diff --git a/.github/ISSUE_TEMPLATE/translation.yml b/.github/ISSUE_TEMPLATE/translation.yml deleted file mode 100644 index 780ebc722..000000000 --- a/.github/ISSUE_TEMPLATE/translation.yml +++ /dev/null @@ -1,46 +0,0 @@ -name: Translation Issue Report -description: File a translation issue report -title: "[Typo]: " -labels: ["translation"] -body: - - type: markdown - attributes: - value: | - Thanks for taking the time to fill out this translation issue report! - - type: input - id: version - attributes: - label: Python Version - description: Which version of the Python documentation covers this issue? - placeholder: ex. 3.12 - validations: - required: true - - type: input - id: url - attributes: - label: Docs Page - description: What is the url of the page containing the issue? - placeholder: https://docs.python.org/3/about.html - validations: - required: true - - type: textarea - id: zh-original - attributes: - label: Original Translation - description: Which translated paragraph in Chinese contains the issue? - validations: - required: true - - type: textarea - id: en-original - attributes: - label: Original Docs Paragraph - description: Which original paragraph in English contains the issue? - validations: - required: false - - type: textarea - id: zh-suggested - attributes: - label: Suggested Fix - description: What is your suggested fix? - validations: - required: true \ No newline at end of file diff --git a/.github/scripts/build.sh b/.github/scripts/build.sh deleted file mode 100755 index 46c229e10..000000000 --- a/.github/scripts/build.sh +++ /dev/null @@ -1,18 +0,0 @@ -#!/bin/bash - -set -e -set -u -set -o pipefail - -error() { - while read -r line; do - echo - echo ::error::"$line" - done -} - -cd cpython/Doc || exit 1 -mkdir -p locales/"$LOCALE"/ -ln -sfn "$(realpath ../../docs)" locales/"$LOCALE"/LC_MESSAGES -pip3 install -q -r requirements.txt -sphinx-build -b dummy -d build/doctrees -j auto -D language=$LOCALE -D gettext_compact=0 -E --keep-going -W . build/html 2> >(error) diff --git a/.github/scripts/commit.sh b/.github/scripts/commit.sh deleted file mode 100755 index 878c0d57e..000000000 --- a/.github/scripts/commit.sh +++ /dev/null @@ -1,14 +0,0 @@ -#!/bin/bash - -set -ex - -cd docs || exit 1 -git config user.email "github-actions[bot]@users.noreply.github.com" -git config user.name "github-actions[bot]" -if ! git status -s|grep '\.po'; then - echo "Nothing to commit" - exit 0 -fi -git add . -git commit -m '[po] auto sync' -git push diff --git a/.github/scripts/generate_tx_config.py b/.github/scripts/generate_tx_config.py deleted file mode 100755 index ebcc3b2dd..000000000 --- a/.github/scripts/generate_tx_config.py +++ /dev/null @@ -1,87 +0,0 @@ -"""Please note that this script requires a Transifex API token to run.""" -import glob -import subprocess -from functools import partial -from pathlib import Path -import re -import os - -run = partial(subprocess.run, check=True) - - -def init_project(): - run(["tx", "init"]) - - -def add_files(project_name: str): - run( - [ - "tx", - "add", - "remote", - "--file-filter", - "trans//.", - f"https://www.transifex.com/python-doc/{project_name}/dashboard/", - ] - ) - - -FILTER_PATTERN = re.compile( - r"^(?Pfile_filter( *)=( *))(?P.+)$", re.MULTILINE -) - - -def name_replacer(match: re.Match[str]): - prefix, resource = match.group("prefix", "resource") - override_prefix = prefix.replace("file_filter", "trans.zh_CN") - pattern = ( - resource.replace("trans//", "") - .replace("glossary_", "glossary") - .replace("--", "/") - .replace("_", "?") - ) - matches = list(glob.glob(pattern.replace(".po", ".rst"))) - if not matches: - print("missing", pattern) - return f"{prefix}{resource}\n{override_prefix}{pattern.replace('?', '_')}" - elif len(matches) == 1: - filename = matches[0].replace(".rst", ".po").replace("\\", "/") - else: - raise ValueError("multi match", resource, pattern, matches) - return f"{prefix}{resource}\n{override_prefix}{filename}" - - -def patch_config(path: str): - tx_config_path = Path(".tx", "config") - - config_content = tx_config_path.read_text("utf-8") - - cwd = os.getcwd() - os.chdir(path) - config_content = FILTER_PATTERN.sub(name_replacer, config_content) - config_content = re.sub(r'replace_edited_strings.*\n','', config_content) - config_content = re.sub(r'keep_translations.*\n','', config_content) - config_content = re.sub(r'0\ntrans\.zh_CN.*\n','0\n', config_content) - config_content = config_content.replace(' =','=') - os.chdir(cwd) - - tx_config_path.write_text(config_content, "utf-8") - - -if __name__ == "__main__": - from argparse import ArgumentParser - - parser = ArgumentParser() - - parser.add_argument("--token", default="") - parser.add_argument("--project-name", required=True) - parser.add_argument("--doc-path", required=True) - - params = parser.parse_args() - - if params.token: - os.environ["TX_TOKEN"] = params.token - - init_project() - add_files(params.project_name) - patch_config(params.doc_path) diff --git a/.github/scripts/prepare.sh b/.github/scripts/prepare.sh deleted file mode 100755 index 1ca5daab0..000000000 --- a/.github/scripts/prepare.sh +++ /dev/null @@ -1,5 +0,0 @@ -#!/bin/bash - -set -ex - -curl -o- https://raw.githubusercontent.com/transifex/cli/master/install.sh | bash \ No newline at end of file diff --git a/.github/scripts/tx_stat.py b/.github/scripts/tx_stat.py deleted file mode 100644 index 00dcf965c..000000000 --- a/.github/scripts/tx_stat.py +++ /dev/null @@ -1,33 +0,0 @@ -import json -import os -import urllib.request -from datetime import datetime - -key = os.environ.get('TX_TOKEN') -project = os.environ.get('TX_PROJECT') - -url = "https://rest.api.transifex.com/resource_language_stats?filter[project]=o%3Apython-doc%3Ap%3A{}&filter[language]=l%3Azh_CN".format(project) - -headers = { - "accept": "application/vnd.api+json", - "authorization": "Bearer " + key -} - -total = 0 -translated = 0 - -while(url): - request = urllib.request.Request(url=url,headers=headers) - - with urllib.request.urlopen(request) as response: - data = json.loads(response.read().decode("utf-8")) - url = data['links'].get('next') - for resourse in data['data']: - translated = translated + resourse['attributes']['translated_strings'] - total = total + resourse['attributes']['total_strings'] - -p = '{:.2%}'.format(translated/total) -print(json.dumps({ - 'translation':p, - 'updated_at':datetime.utcnow().isoformat(timespec='seconds') + 'Z', - })) \ No newline at end of file diff --git a/.github/scripts/update.sh b/.github/scripts/update.sh deleted file mode 100755 index 0f2231d9f..000000000 --- a/.github/scripts/update.sh +++ /dev/null @@ -1,22 +0,0 @@ -#!/bin/bash - -set -u - -cd cpython || exit 1 - -# Restore git timestamp for enabling build cache -rev=HEAD -for f in $(git ls-tree -r -t --full-name --name-only "$rev" Doc) ; do - touch -d $(git log --pretty=format:%cI -1 "$rev" -- "$f") "$f"; -done - -cd .. -cd docs || exit 1 - -# Restore git timestamp for enabling build cache -rev=HEAD -for f in $(git ls-tree -r -t --full-name --name-only "$rev") ; do - touch -d $(git log --pretty=format:%cI -1 "$rev" -- "$f") "$f"; -done - -$(realpath ../tx) pull --languages "$LOCALE" -t --use-git-timestamps --workers 25 --silent diff --git a/.github/workflows/python-310.yml b/.github/workflows/python-310.yml deleted file mode 100644 index 35a148f47..000000000 --- a/.github/workflows/python-310.yml +++ /dev/null @@ -1,18 +0,0 @@ -name: python-310 - -on: - workflow_dispatch: - push: - branches: - - master - schedule: - - cron: "22 * * * *" - -jobs: - sync: - uses: ./.github/workflows/sync.yml - with: - version: "3.10" - tx_project: "python-310" - secrets: inherit - \ No newline at end of file diff --git a/.github/workflows/python-311.yml b/.github/workflows/python-311.yml deleted file mode 100644 index 4fa85bb77..000000000 --- a/.github/workflows/python-311.yml +++ /dev/null @@ -1,18 +0,0 @@ -name: python-311 - -on: - workflow_dispatch: - push: - branches: - - master - schedule: - - cron: "32 * * * *" - -jobs: - sync: - uses: ./.github/workflows/sync.yml - with: - version: "3.11" - tx_project: "python-311" - secrets: inherit - diff --git a/.github/workflows/python-312.yml b/.github/workflows/python-312.yml deleted file mode 100644 index 75cc1d35e..000000000 --- a/.github/workflows/python-312.yml +++ /dev/null @@ -1,17 +0,0 @@ -name: python-312 - -on: - workflow_dispatch: - push: - branches: - - master - schedule: - - cron: "42 * * * *" - -jobs: - sync: - uses: ./.github/workflows/sync.yml - with: - version: "3.12" - tx_project: "python-312" - secrets: inherit diff --git a/.github/workflows/python-313.yml b/.github/workflows/python-313.yml deleted file mode 100644 index 657d53443..000000000 --- a/.github/workflows/python-313.yml +++ /dev/null @@ -1,17 +0,0 @@ -name: python-313 - -on: - workflow_dispatch: - push: - branches: - - master - schedule: - - cron: "52 * * * *" - -jobs: - sync: - uses: ./.github/workflows/sync.yml - with: - version: "3.13" - tx_project: "python-newest" - secrets: inherit diff --git a/.github/workflows/python-37.yml b/.github/workflows/python-37.yml deleted file mode 100644 index 47c224c3b..000000000 --- a/.github/workflows/python-37.yml +++ /dev/null @@ -1,10 +0,0 @@ -name: python-37 - -on: workflow_dispatch - -jobs: - sync: - uses: ./.github/workflows/sync.yml - with: - version: "3.7" - secrets: inherit \ No newline at end of file diff --git a/.github/workflows/python-38.yml b/.github/workflows/python-38.yml deleted file mode 100644 index 9d0bc6daf..000000000 --- a/.github/workflows/python-38.yml +++ /dev/null @@ -1,11 +0,0 @@ -name: python-38 - -on: workflow_dispatch - -jobs: - sync: - uses: ./.github/workflows/sync.yml - with: - version: "3.8" - tx_project: "python-38" - secrets: inherit \ No newline at end of file diff --git a/.github/workflows/python-39.yml b/.github/workflows/python-39.yml deleted file mode 100644 index 39305f585..000000000 --- a/.github/workflows/python-39.yml +++ /dev/null @@ -1,18 +0,0 @@ -name: python-39 - -on: - workflow_dispatch: - push: - branches: - - master - schedule: - - cron: "12 * * * *" - -jobs: - sync: - uses: ./.github/workflows/sync.yml - with: - version: "3.9" - tx_project: "python-39" - secrets: inherit - \ No newline at end of file diff --git a/.github/workflows/sync.yml b/.github/workflows/sync.yml deleted file mode 100644 index 0788a37c0..000000000 --- a/.github/workflows/sync.yml +++ /dev/null @@ -1,68 +0,0 @@ -name: Reusable workflow example - -on: - workflow_call: - inputs: - version: - required: true - type: string - tx_project: - required: true - type: string - secrets: - TRANSIFEX_APIKEY: - required: true - -jobs: - sync: - runs-on: ubuntu-latest - env: - LOCALE: zh_CN - VERSION: ${{ inputs.version }} - steps: - - uses: actions/checkout@v4 - - name: Checkout CPython - uses: actions/checkout@v4 - with: - repository: 'python/cpython' - ref: ${{env.VERSION}} - path: cpython - - uses: actions/cache/restore@v4 - with: - path: | - cpython/Doc/build - docs - key: cache-${{ inputs.version }}-${{ github.run_id }} - restore-keys: cache-${{ inputs.version }}- - - name: Checkout Current Branch - uses: actions/checkout@v4 - with: - ref: ${{env.VERSION}} - path: docs - clean: false - - name: prepare - run: .github/scripts/prepare.sh - - name: update - run: .github/scripts/update.sh - env: - TX_TOKEN: ${{ secrets.TRANSIFEX_APIKEY }} - - uses: actions/cache/restore@v4 - with: - path: cpython/Doc/build - key: cache-${{ inputs.version }}-${{ github.run_id }} - restore-keys: cache-${{ inputs.version }}- - - name: build - run: .github/scripts/build.sh - - uses: actions/cache/save@v4 - with: - path: | - cpython/Doc/build - docs - key: cache-${{ inputs.version }}-${{ github.run_id }} - - name: stat - run: python .github/scripts/tx_stat.py > ./docs/.stat.json - env: - TX_TOKEN: ${{ secrets.TRANSIFEX_APIKEY }} - TX_PROJECT: ${{ inputs.tx_project }} - - name: commit - run: .github/scripts/commit.sh \ No newline at end of file diff --git a/.gitignore b/.gitignore new file mode 100644 index 000000000..cd1f2c943 --- /dev/null +++ b/.gitignore @@ -0,0 +1 @@ +*.mo diff --git a/.stat.json b/.stat.json new file mode 100644 index 000000000..28b4e1524 --- /dev/null +++ b/.stat.json @@ -0,0 +1 @@ +{"translation": "83.21%", "updated_at": "2025-04-28T15:18:52Z"} diff --git a/.tx/config b/.tx/config new file mode 100644 index 000000000..2e677752b --- /dev/null +++ b/.tx/config @@ -0,0 +1,4403 @@ +[main] +host = https://app.transifex.com + +[o:python-doc:p:python-39:r:about] +file_filter = trans//about.po +trans.zh_CN = about.po +source_file = trans/en/about.po +source_lang = en +type = PO +minimum_perc = 0 +resource_name = about + +[o:python-doc:p:python-39:r:bugs] +file_filter = trans//bugs.po +trans.zh_CN = bugs.po +source_file = trans/en/bugs.po +source_lang = en +type = PO +minimum_perc = 0 +resource_name = bugs + +[o:python-doc:p:python-39:r:c-api--abstract] +file_filter = trans//c-api--abstract.po +trans.zh_CN = c-api/abstract.po +source_file = trans/en/c-api--abstract.po +source_lang = en +type = PO +minimum_perc = 0 +resource_name = c-api--abstract + +[o:python-doc:p:python-39:r:c-api--allocation] +file_filter = trans//c-api--allocation.po +trans.zh_CN = c-api/allocation.po +source_file = trans/en/c-api--allocation.po +source_lang = en +type = PO +minimum_perc = 0 +resource_name = c-api--allocation + +[o:python-doc:p:python-39:r:c-api--apiabiversion] +file_filter = trans//c-api--apiabiversion.po +trans.zh_CN = c-api/apiabiversion.po +source_file = trans/en/c-api--apiabiversion.po +source_lang = en +type = PO +minimum_perc = 0 +resource_name = c-api--apiabiversion + +[o:python-doc:p:python-39:r:c-api--arg] +file_filter = trans//c-api--arg.po +trans.zh_CN = c-api/arg.po +source_file = trans/en/c-api--arg.po +source_lang = en +type = PO +minimum_perc = 0 +resource_name = c-api--arg + +[o:python-doc:p:python-39:r:c-api--bool] +file_filter = trans//c-api--bool.po +trans.zh_CN = c-api/bool.po +source_file = trans/en/c-api--bool.po +source_lang = en +type = PO +minimum_perc = 0 +resource_name = c-api--bool + +[o:python-doc:p:python-39:r:c-api--buffer] +file_filter = trans//c-api--buffer.po +trans.zh_CN = c-api/buffer.po +source_file = trans/en/c-api--buffer.po +source_lang = en +type = PO +minimum_perc = 0 +resource_name = c-api--buffer + +[o:python-doc:p:python-39:r:c-api--bytearray] +file_filter = trans//c-api--bytearray.po +trans.zh_CN = c-api/bytearray.po +source_file = trans/en/c-api--bytearray.po +source_lang = en +type = PO +minimum_perc = 0 +resource_name = c-api--bytearray + +[o:python-doc:p:python-39:r:c-api--bytes] +file_filter = trans//c-api--bytes.po +trans.zh_CN = c-api/bytes.po +source_file = trans/en/c-api--bytes.po +source_lang = en +type = PO +minimum_perc = 0 +resource_name = c-api--bytes + +[o:python-doc:p:python-39:r:c-api--call] +file_filter = trans//c-api--call.po +trans.zh_CN = c-api/call.po +source_file = trans/en/c-api--call.po +source_lang = en +type = PO +minimum_perc = 0 +resource_name = c-api--call + +[o:python-doc:p:python-39:r:c-api--capsule] +file_filter = trans//c-api--capsule.po +trans.zh_CN = c-api/capsule.po +source_file = trans/en/c-api--capsule.po +source_lang = en +type = PO +minimum_perc = 0 +resource_name = c-api--capsule + +[o:python-doc:p:python-39:r:c-api--cell] +file_filter = trans//c-api--cell.po +trans.zh_CN = c-api/cell.po +source_file = trans/en/c-api--cell.po +source_lang = en +type = PO +minimum_perc = 0 +resource_name = c-api--cell + +[o:python-doc:p:python-39:r:c-api--code] +file_filter = trans//c-api--code.po +trans.zh_CN = c-api/code.po +source_file = trans/en/c-api--code.po +source_lang = en +type = PO +minimum_perc = 0 +resource_name = c-api--code + +[o:python-doc:p:python-39:r:c-api--codec] +file_filter = trans//c-api--codec.po +trans.zh_CN = c-api/codec.po +source_file = trans/en/c-api--codec.po +source_lang = en +type = PO +minimum_perc = 0 +resource_name = c-api--codec + +[o:python-doc:p:python-39:r:c-api--complex] +file_filter = trans//c-api--complex.po +trans.zh_CN = c-api/complex.po +source_file = trans/en/c-api--complex.po +source_lang = en +type = PO +minimum_perc = 0 +resource_name = c-api--complex + +[o:python-doc:p:python-39:r:c-api--concrete] +file_filter = trans//c-api--concrete.po +trans.zh_CN = c-api/concrete.po +source_file = trans/en/c-api--concrete.po +source_lang = en +type = PO +minimum_perc = 0 +resource_name = c-api--concrete + +[o:python-doc:p:python-39:r:c-api--contextvars] +file_filter = trans//c-api--contextvars.po +trans.zh_CN = c-api/contextvars.po +source_file = trans/en/c-api--contextvars.po +source_lang = en +type = PO +minimum_perc = 0 +resource_name = c-api--contextvars + +[o:python-doc:p:python-39:r:c-api--conversion] +file_filter = trans//c-api--conversion.po +trans.zh_CN = c-api/conversion.po +source_file = trans/en/c-api--conversion.po +source_lang = en +type = PO +minimum_perc = 0 +resource_name = c-api--conversion + +[o:python-doc:p:python-39:r:c-api--coro] +file_filter = trans//c-api--coro.po +trans.zh_CN = c-api/coro.po +source_file = trans/en/c-api--coro.po +source_lang = en +type = PO +minimum_perc = 0 +resource_name = c-api--coro + +[o:python-doc:p:python-39:r:c-api--datetime] +file_filter = trans//c-api--datetime.po +trans.zh_CN = c-api/datetime.po +source_file = trans/en/c-api--datetime.po +source_lang = en +type = PO +minimum_perc = 0 +resource_name = c-api--datetime + +[o:python-doc:p:python-39:r:c-api--descriptor] +file_filter = trans//c-api--descriptor.po +trans.zh_CN = c-api/descriptor.po +source_file = trans/en/c-api--descriptor.po +source_lang = en +type = PO +minimum_perc = 0 +resource_name = c-api--descriptor + +[o:python-doc:p:python-39:r:c-api--dict] +file_filter = trans//c-api--dict.po +trans.zh_CN = c-api/dict.po +source_file = trans/en/c-api--dict.po +source_lang = en +type = PO +minimum_perc = 0 +resource_name = c-api--dict + +[o:python-doc:p:python-39:r:c-api--exceptions] +file_filter = trans//c-api--exceptions.po +trans.zh_CN = c-api/exceptions.po +source_file = trans/en/c-api--exceptions.po +source_lang = en +type = PO +minimum_perc = 0 +resource_name = c-api--exceptions + +[o:python-doc:p:python-39:r:c-api--file] +file_filter = trans//c-api--file.po +trans.zh_CN = c-api/file.po +source_file = trans/en/c-api--file.po +source_lang = en +type = PO +minimum_perc = 0 +resource_name = c-api--file + +[o:python-doc:p:python-39:r:c-api--float] +file_filter = trans//c-api--float.po +trans.zh_CN = c-api/float.po +source_file = trans/en/c-api--float.po +source_lang = en +type = PO +minimum_perc = 0 +resource_name = c-api--float + +[o:python-doc:p:python-39:r:c-api--function] +file_filter = trans//c-api--function.po +trans.zh_CN = c-api/function.po +source_file = trans/en/c-api--function.po +source_lang = en +type = PO +minimum_perc = 0 +resource_name = c-api--function + +[o:python-doc:p:python-39:r:c-api--gcsupport] +file_filter = trans//c-api--gcsupport.po +trans.zh_CN = c-api/gcsupport.po +source_file = trans/en/c-api--gcsupport.po +source_lang = en +type = PO +minimum_perc = 0 +resource_name = c-api--gcsupport + +[o:python-doc:p:python-39:r:c-api--gen] +file_filter = trans//c-api--gen.po +trans.zh_CN = c-api/gen.po +source_file = trans/en/c-api--gen.po +source_lang = en +type = PO +minimum_perc = 0 +resource_name = c-api--gen + +[o:python-doc:p:python-39:r:c-api--import] +file_filter = trans//c-api--import.po +trans.zh_CN = c-api/import.po +source_file = trans/en/c-api--import.po +source_lang = en +type = PO +minimum_perc = 0 +resource_name = c-api--import + +[o:python-doc:p:python-39:r:c-api--index] +file_filter = trans//c-api--index.po +trans.zh_CN = c-api/index.po +source_file = trans/en/c-api--index.po +source_lang = en +type = PO +minimum_perc = 0 +resource_name = c-api--index + +[o:python-doc:p:python-39:r:c-api--init] +file_filter = trans//c-api--init.po +trans.zh_CN = c-api/init.po +source_file = trans/en/c-api--init.po +source_lang = en +type = PO +minimum_perc = 0 +resource_name = c-api--init + +[o:python-doc:p:python-39:r:c-api--init_config] +file_filter = trans//c-api--init_config.po +trans.zh_CN = c-api/init_config.po +source_file = trans/en/c-api--init_config.po +source_lang = en +type = PO +minimum_perc = 0 +resource_name = c-api--init_config + +[o:python-doc:p:python-39:r:c-api--intro] +file_filter = trans//c-api--intro.po +trans.zh_CN = c-api/intro.po +source_file = trans/en/c-api--intro.po +source_lang = en +type = PO +minimum_perc = 0 +resource_name = c-api--intro + +[o:python-doc:p:python-39:r:c-api--iter] +file_filter = trans//c-api--iter.po +trans.zh_CN = c-api/iter.po +source_file = trans/en/c-api--iter.po +source_lang = en +type = PO +minimum_perc = 0 +resource_name = c-api--iter + +[o:python-doc:p:python-39:r:c-api--iterator] +file_filter = trans//c-api--iterator.po +trans.zh_CN = c-api/iterator.po +source_file = trans/en/c-api--iterator.po +source_lang = en +type = PO +minimum_perc = 0 +resource_name = c-api--iterator + +[o:python-doc:p:python-39:r:c-api--list] +file_filter = trans//c-api--list.po +trans.zh_CN = c-api/list.po +source_file = trans/en/c-api--list.po +source_lang = en +type = PO +minimum_perc = 0 +resource_name = c-api--list + +[o:python-doc:p:python-39:r:c-api--long] +file_filter = trans//c-api--long.po +trans.zh_CN = c-api/long.po +source_file = trans/en/c-api--long.po +source_lang = en +type = PO +minimum_perc = 0 +resource_name = c-api--long + +[o:python-doc:p:python-39:r:c-api--mapping] +file_filter = trans//c-api--mapping.po +trans.zh_CN = c-api/mapping.po +source_file = trans/en/c-api--mapping.po +source_lang = en +type = PO +minimum_perc = 0 +resource_name = c-api--mapping + +[o:python-doc:p:python-39:r:c-api--marshal] +file_filter = trans//c-api--marshal.po +trans.zh_CN = c-api/marshal.po +source_file = trans/en/c-api--marshal.po +source_lang = en +type = PO +minimum_perc = 0 +resource_name = c-api--marshal + +[o:python-doc:p:python-39:r:c-api--memory] +file_filter = trans//c-api--memory.po +trans.zh_CN = c-api/memory.po +source_file = trans/en/c-api--memory.po +source_lang = en +type = PO +minimum_perc = 0 +resource_name = c-api--memory + +[o:python-doc:p:python-39:r:c-api--memoryview] +file_filter = trans//c-api--memoryview.po +trans.zh_CN = c-api/memoryview.po +source_file = trans/en/c-api--memoryview.po +source_lang = en +type = PO +minimum_perc = 0 +resource_name = c-api--memoryview + +[o:python-doc:p:python-39:r:c-api--method] +file_filter = trans//c-api--method.po +trans.zh_CN = c-api/method.po +source_file = trans/en/c-api--method.po +source_lang = en +type = PO +minimum_perc = 0 +resource_name = c-api--method + +[o:python-doc:p:python-39:r:c-api--module] +file_filter = trans//c-api--module.po +trans.zh_CN = c-api/module.po +source_file = trans/en/c-api--module.po +source_lang = en +type = PO +minimum_perc = 0 +resource_name = c-api--module + +[o:python-doc:p:python-39:r:c-api--none] +file_filter = trans//c-api--none.po +trans.zh_CN = c-api/none.po +source_file = trans/en/c-api--none.po +source_lang = en +type = PO +minimum_perc = 0 +resource_name = c-api--none + +[o:python-doc:p:python-39:r:c-api--number] +file_filter = trans//c-api--number.po +trans.zh_CN = c-api/number.po +source_file = trans/en/c-api--number.po +source_lang = en +type = PO +minimum_perc = 0 +resource_name = c-api--number + +[o:python-doc:p:python-39:r:c-api--objbuffer] +file_filter = trans//c-api--objbuffer.po +trans.zh_CN = c-api/objbuffer.po +source_file = trans/en/c-api--objbuffer.po +source_lang = en +type = PO +minimum_perc = 0 +resource_name = c-api--objbuffer + +[o:python-doc:p:python-39:r:c-api--object] +file_filter = trans//c-api--object.po +trans.zh_CN = c-api/object.po +source_file = trans/en/c-api--object.po +source_lang = en +type = PO +minimum_perc = 0 +resource_name = c-api--object + +[o:python-doc:p:python-39:r:c-api--objimpl] +file_filter = trans//c-api--objimpl.po +trans.zh_CN = c-api/objimpl.po +source_file = trans/en/c-api--objimpl.po +source_lang = en +type = PO +minimum_perc = 0 +resource_name = c-api--objimpl + +[o:python-doc:p:python-39:r:c-api--refcounting] +file_filter = trans//c-api--refcounting.po +trans.zh_CN = c-api/refcounting.po +source_file = trans/en/c-api--refcounting.po +source_lang = en +type = PO +minimum_perc = 0 +resource_name = c-api--refcounting + +[o:python-doc:p:python-39:r:c-api--reflection] +file_filter = trans//c-api--reflection.po +trans.zh_CN = c-api/reflection.po +source_file = trans/en/c-api--reflection.po +source_lang = en +type = PO +minimum_perc = 0 +resource_name = c-api--reflection + +[o:python-doc:p:python-39:r:c-api--sequence] +file_filter = trans//c-api--sequence.po +trans.zh_CN = c-api/sequence.po +source_file = trans/en/c-api--sequence.po +source_lang = en +type = PO +minimum_perc = 0 +resource_name = c-api--sequence + +[o:python-doc:p:python-39:r:c-api--set] +file_filter = trans//c-api--set.po +trans.zh_CN = c-api/set.po +source_file = trans/en/c-api--set.po +source_lang = en +type = PO +minimum_perc = 0 +resource_name = c-api--set + +[o:python-doc:p:python-39:r:c-api--slice] +file_filter = trans//c-api--slice.po +trans.zh_CN = c-api/slice.po +source_file = trans/en/c-api--slice.po +source_lang = en +type = PO +minimum_perc = 0 +resource_name = c-api--slice + +[o:python-doc:p:python-39:r:c-api--stable] +file_filter = trans//c-api--stable.po +trans.zh_CN = c-api/stable.po +source_file = trans/en/c-api--stable.po +source_lang = en +type = PO +minimum_perc = 0 +resource_name = c-api--stable + +[o:python-doc:p:python-39:r:c-api--structures] +file_filter = trans//c-api--structures.po +trans.zh_CN = c-api/structures.po +source_file = trans/en/c-api--structures.po +source_lang = en +type = PO +minimum_perc = 0 +resource_name = c-api--structures + +[o:python-doc:p:python-39:r:c-api--sys] +file_filter = trans//c-api--sys.po +trans.zh_CN = c-api/sys.po +source_file = trans/en/c-api--sys.po +source_lang = en +type = PO +minimum_perc = 0 +resource_name = c-api--sys + +[o:python-doc:p:python-39:r:c-api--tuple] +file_filter = trans//c-api--tuple.po +trans.zh_CN = c-api/tuple.po +source_file = trans/en/c-api--tuple.po +source_lang = en +type = PO +minimum_perc = 0 +resource_name = c-api--tuple + +[o:python-doc:p:python-39:r:c-api--type] +file_filter = trans//c-api--type.po +trans.zh_CN = c-api/type.po +source_file = trans/en/c-api--type.po +source_lang = en +type = PO +minimum_perc = 0 +resource_name = c-api--type + +[o:python-doc:p:python-39:r:c-api--typehints] +file_filter = trans//c-api--typehints.po +trans.zh_CN = c-api/typehints.po +source_file = trans/en/c-api--typehints.po +source_lang = en +type = PO +minimum_perc = 0 +resource_name = c-api--typehints + +[o:python-doc:p:python-39:r:c-api--typeobj] +file_filter = trans//c-api--typeobj.po +trans.zh_CN = c-api/typeobj.po +source_file = trans/en/c-api--typeobj.po +source_lang = en +type = PO +minimum_perc = 0 +resource_name = c-api--typeobj + +[o:python-doc:p:python-39:r:c-api--unicode] +file_filter = trans//c-api--unicode.po +trans.zh_CN = c-api/unicode.po +source_file = trans/en/c-api--unicode.po +source_lang = en +type = PO +minimum_perc = 0 +resource_name = c-api--unicode + +[o:python-doc:p:python-39:r:c-api--utilities] +file_filter = trans//c-api--utilities.po +trans.zh_CN = c-api/utilities.po +source_file = trans/en/c-api--utilities.po +source_lang = en +type = PO +minimum_perc = 0 +resource_name = c-api--utilities + +[o:python-doc:p:python-39:r:c-api--veryhigh] +file_filter = trans//c-api--veryhigh.po +trans.zh_CN = c-api/veryhigh.po +source_file = trans/en/c-api--veryhigh.po +source_lang = en +type = PO +minimum_perc = 0 +resource_name = c-api--veryhigh + +[o:python-doc:p:python-39:r:c-api--weakref] +file_filter = trans//c-api--weakref.po +trans.zh_CN = c-api/weakref.po +source_file = trans/en/c-api--weakref.po +source_lang = en +type = PO +minimum_perc = 0 +resource_name = c-api--weakref + +[o:python-doc:p:python-39:r:contents] +file_filter = trans//contents.po +trans.zh_CN = contents.po +source_file = trans/en/contents.po +source_lang = en +type = PO +minimum_perc = 0 +resource_name = contents + +[o:python-doc:p:python-39:r:copyright] +file_filter = trans//copyright.po +trans.zh_CN = copyright.po +source_file = trans/en/copyright.po +source_lang = en +type = PO +minimum_perc = 0 +resource_name = copyright + +[o:python-doc:p:python-39:r:distributing--index] +file_filter = trans//distributing--index.po +trans.zh_CN = distributing/index.po +source_file = trans/en/distributing--index.po +source_lang = en +type = PO +minimum_perc = 0 +resource_name = distributing--index + +[o:python-doc:p:python-39:r:distutils--apiref] +file_filter = trans//distutils--apiref.po +trans.zh_CN = distutils/apiref.po +source_file = trans/en/distutils--apiref.po +source_lang = en +type = PO +minimum_perc = 0 +resource_name = distutils--apiref + +[o:python-doc:p:python-39:r:distutils--builtdist] +file_filter = trans//distutils--builtdist.po +trans.zh_CN = distutils/builtdist.po +source_file = trans/en/distutils--builtdist.po +source_lang = en +type = PO +minimum_perc = 0 +resource_name = distutils--builtdist + +[o:python-doc:p:python-39:r:distutils--commandref] +file_filter = trans//distutils--commandref.po +trans.zh_CN = distutils/commandref.po +source_file = trans/en/distutils--commandref.po +source_lang = en +type = PO +minimum_perc = 0 +resource_name = distutils--commandref + +[o:python-doc:p:python-39:r:distutils--configfile] +file_filter = trans//distutils--configfile.po +trans.zh_CN = distutils/configfile.po +source_file = trans/en/distutils--configfile.po +source_lang = en +type = PO +minimum_perc = 0 +resource_name = distutils--configfile + +[o:python-doc:p:python-39:r:distutils--examples] +file_filter = trans//distutils--examples.po +trans.zh_CN = distutils/examples.po +source_file = trans/en/distutils--examples.po +source_lang = en +type = PO +minimum_perc = 0 +resource_name = distutils--examples + +[o:python-doc:p:python-39:r:distutils--extending] +file_filter = trans//distutils--extending.po +trans.zh_CN = distutils/extending.po +source_file = trans/en/distutils--extending.po +source_lang = en +type = PO +minimum_perc = 0 +resource_name = distutils--extending + +[o:python-doc:p:python-39:r:distutils--index] +file_filter = trans//distutils--index.po +trans.zh_CN = distutils/index.po +source_file = trans/en/distutils--index.po +source_lang = en +type = PO +minimum_perc = 0 +resource_name = distutils--index + +[o:python-doc:p:python-39:r:distutils--introduction] +file_filter = trans//distutils--introduction.po +trans.zh_CN = distutils/introduction.po +source_file = trans/en/distutils--introduction.po +source_lang = en +type = PO +minimum_perc = 0 +resource_name = distutils--introduction + +[o:python-doc:p:python-39:r:distutils--packageindex] +file_filter = trans//distutils--packageindex.po +trans.zh_CN = distutils/packageindex.po +source_file = trans/en/distutils--packageindex.po +source_lang = en +type = PO +minimum_perc = 0 +resource_name = distutils--packageindex + +[o:python-doc:p:python-39:r:distutils--setupscript] +file_filter = trans//distutils--setupscript.po +trans.zh_CN = distutils/setupscript.po +source_file = trans/en/distutils--setupscript.po +source_lang = en +type = PO +minimum_perc = 0 +resource_name = distutils--setupscript + +[o:python-doc:p:python-39:r:distutils--_setuptools_disclaimer] +file_filter = trans//distutils--_setuptools_disclaimer.po +trans.zh_CN = distutils/_setuptools_disclaimer.po +source_file = trans/en/distutils--_setuptools_disclaimer.po +source_lang = en +type = PO +minimum_perc = 0 +resource_name = distutils--_setuptools_disclaimer + +[o:python-doc:p:python-39:r:distutils--sourcedist] +file_filter = trans//distutils--sourcedist.po +trans.zh_CN = distutils/sourcedist.po +source_file = trans/en/distutils--sourcedist.po +source_lang = en +type = PO +minimum_perc = 0 +resource_name = distutils--sourcedist + +[o:python-doc:p:python-39:r:distutils--uploading] +file_filter = trans//distutils--uploading.po +trans.zh_CN = distutils/uploading.po +source_file = trans/en/distutils--uploading.po +source_lang = en +type = PO +minimum_perc = 0 +resource_name = distutils--uploading + +[o:python-doc:p:python-39:r:extending--building] +file_filter = trans//extending--building.po +trans.zh_CN = extending/building.po +source_file = trans/en/extending--building.po +source_lang = en +type = PO +minimum_perc = 0 +resource_name = extending--building + +[o:python-doc:p:python-39:r:extending--embedding] +file_filter = trans//extending--embedding.po +trans.zh_CN = extending/embedding.po +source_file = trans/en/extending--embedding.po +source_lang = en +type = PO +minimum_perc = 0 +resource_name = extending--embedding + +[o:python-doc:p:python-39:r:extending--extending] +file_filter = trans//extending--extending.po +trans.zh_CN = extending/extending.po +source_file = trans/en/extending--extending.po +source_lang = en +type = PO +minimum_perc = 0 +resource_name = extending--extending + +[o:python-doc:p:python-39:r:extending--index] +file_filter = trans//extending--index.po +trans.zh_CN = extending/index.po +source_file = trans/en/extending--index.po +source_lang = en +type = PO +minimum_perc = 0 +resource_name = extending--index + +[o:python-doc:p:python-39:r:extending--newtypes] +file_filter = trans//extending--newtypes.po +trans.zh_CN = extending/newtypes.po +source_file = trans/en/extending--newtypes.po +source_lang = en +type = PO +minimum_perc = 0 +resource_name = extending--newtypes + +[o:python-doc:p:python-39:r:extending--newtypes_tutorial] +file_filter = trans//extending--newtypes_tutorial.po +trans.zh_CN = extending/newtypes_tutorial.po +source_file = trans/en/extending--newtypes_tutorial.po +source_lang = en +type = PO +minimum_perc = 0 +resource_name = extending--newtypes_tutorial + +[o:python-doc:p:python-39:r:extending--windows] +file_filter = trans//extending--windows.po +trans.zh_CN = extending/windows.po +source_file = trans/en/extending--windows.po +source_lang = en +type = PO +minimum_perc = 0 +resource_name = extending--windows + +[o:python-doc:p:python-39:r:faq--design] +file_filter = trans//faq--design.po +trans.zh_CN = faq/design.po +source_file = trans/en/faq--design.po +source_lang = en +type = PO +minimum_perc = 0 +resource_name = faq--design + +[o:python-doc:p:python-39:r:faq--extending] +file_filter = trans//faq--extending.po +trans.zh_CN = faq/extending.po +source_file = trans/en/faq--extending.po +source_lang = en +type = PO +minimum_perc = 0 +resource_name = faq--extending + +[o:python-doc:p:python-39:r:faq--general] +file_filter = trans//faq--general.po +trans.zh_CN = faq/general.po +source_file = trans/en/faq--general.po +source_lang = en +type = PO +minimum_perc = 0 +resource_name = faq--general + +[o:python-doc:p:python-39:r:faq--gui] +file_filter = trans//faq--gui.po +trans.zh_CN = faq/gui.po +source_file = trans/en/faq--gui.po +source_lang = en +type = PO +minimum_perc = 0 +resource_name = faq--gui + +[o:python-doc:p:python-39:r:faq--index] +file_filter = trans//faq--index.po +trans.zh_CN = faq/index.po +source_file = trans/en/faq--index.po +source_lang = en +type = PO +minimum_perc = 0 +resource_name = faq--index + +[o:python-doc:p:python-39:r:faq--installed] +file_filter = trans//faq--installed.po +trans.zh_CN = faq/installed.po +source_file = trans/en/faq--installed.po +source_lang = en +type = PO +minimum_perc = 0 +resource_name = faq--installed + +[o:python-doc:p:python-39:r:faq--library] +file_filter = trans//faq--library.po +trans.zh_CN = faq/library.po +source_file = trans/en/faq--library.po +source_lang = en +type = PO +minimum_perc = 0 +resource_name = faq--library + +[o:python-doc:p:python-39:r:faq--programming] +file_filter = trans//faq--programming.po +trans.zh_CN = faq/programming.po +source_file = trans/en/faq--programming.po +source_lang = en +type = PO +minimum_perc = 0 +resource_name = faq--programming + +[o:python-doc:p:python-39:r:faq--windows] +file_filter = trans//faq--windows.po +trans.zh_CN = faq/windows.po +source_file = trans/en/faq--windows.po +source_lang = en +type = PO +minimum_perc = 0 +resource_name = faq--windows + +[o:python-doc:p:python-39:r:glossary_] +file_filter = trans//glossary_.po +trans.zh_CN = glossary.po +source_file = trans/en/glossary_.po +source_lang = en +type = PO +minimum_perc = 0 +resource_name = glossary_ + +[o:python-doc:p:python-39:r:howto--argparse] +file_filter = trans//howto--argparse.po +trans.zh_CN = howto/argparse.po +source_file = trans/en/howto--argparse.po +source_lang = en +type = PO +minimum_perc = 0 +resource_name = howto--argparse + +[o:python-doc:p:python-39:r:howto--clinic] +file_filter = trans//howto--clinic.po +trans.zh_CN = howto/clinic.po +source_file = trans/en/howto--clinic.po +source_lang = en +type = PO +minimum_perc = 0 +resource_name = howto--clinic + +[o:python-doc:p:python-39:r:howto--cporting] +file_filter = trans//howto--cporting.po +trans.zh_CN = howto/cporting.po +source_file = trans/en/howto--cporting.po +source_lang = en +type = PO +minimum_perc = 0 +resource_name = howto--cporting + +[o:python-doc:p:python-39:r:howto--curses] +file_filter = trans//howto--curses.po +trans.zh_CN = howto/curses.po +source_file = trans/en/howto--curses.po +source_lang = en +type = PO +minimum_perc = 0 +resource_name = howto--curses + +[o:python-doc:p:python-39:r:howto--descriptor] +file_filter = trans//howto--descriptor.po +trans.zh_CN = howto/descriptor.po +source_file = trans/en/howto--descriptor.po +source_lang = en +type = PO +minimum_perc = 0 +resource_name = howto--descriptor + +[o:python-doc:p:python-39:r:howto--functional] +file_filter = trans//howto--functional.po +trans.zh_CN = howto/functional.po +source_file = trans/en/howto--functional.po +source_lang = en +type = PO +minimum_perc = 0 +resource_name = howto--functional + +[o:python-doc:p:python-39:r:howto--index] +file_filter = trans//howto--index.po +trans.zh_CN = howto/index.po +source_file = trans/en/howto--index.po +source_lang = en +type = PO +minimum_perc = 0 +resource_name = howto--index + +[o:python-doc:p:python-39:r:howto--instrumentation] +file_filter = trans//howto--instrumentation.po +trans.zh_CN = howto/instrumentation.po +source_file = trans/en/howto--instrumentation.po +source_lang = en +type = PO +minimum_perc = 0 +resource_name = howto--instrumentation + +[o:python-doc:p:python-39:r:howto--ipaddress] +file_filter = trans//howto--ipaddress.po +trans.zh_CN = howto/ipaddress.po +source_file = trans/en/howto--ipaddress.po +source_lang = en +type = PO +minimum_perc = 0 +resource_name = howto--ipaddress + +[o:python-doc:p:python-39:r:howto--logging] +file_filter = trans//howto--logging.po +trans.zh_CN = howto/logging.po +source_file = trans/en/howto--logging.po +source_lang = en +type = PO +minimum_perc = 0 +resource_name = howto--logging + +[o:python-doc:p:python-39:r:howto--logging-cookbook] +file_filter = trans//howto--logging-cookbook.po +trans.zh_CN = howto/logging-cookbook.po +source_file = trans/en/howto--logging-cookbook.po +source_lang = en +type = PO +minimum_perc = 0 +resource_name = howto--logging-cookbook + +[o:python-doc:p:python-39:r:howto--pyporting] +file_filter = trans//howto--pyporting.po +trans.zh_CN = howto/pyporting.po +source_file = trans/en/howto--pyporting.po +source_lang = en +type = PO +minimum_perc = 0 +resource_name = howto--pyporting + +[o:python-doc:p:python-39:r:howto--regex] +file_filter = trans//howto--regex.po +trans.zh_CN = howto/regex.po +source_file = trans/en/howto--regex.po +source_lang = en +type = PO +minimum_perc = 0 +resource_name = howto--regex + +[o:python-doc:p:python-39:r:howto--sockets] +file_filter = trans//howto--sockets.po +trans.zh_CN = howto/sockets.po +source_file = trans/en/howto--sockets.po +source_lang = en +type = PO +minimum_perc = 0 +resource_name = howto--sockets + +[o:python-doc:p:python-39:r:howto--sorting] +file_filter = trans//howto--sorting.po +trans.zh_CN = howto/sorting.po +source_file = trans/en/howto--sorting.po +source_lang = en +type = PO +minimum_perc = 0 +resource_name = howto--sorting + +[o:python-doc:p:python-39:r:howto--unicode] +file_filter = trans//howto--unicode.po +trans.zh_CN = howto/unicode.po +source_file = trans/en/howto--unicode.po +source_lang = en +type = PO +minimum_perc = 0 +resource_name = howto--unicode + +[o:python-doc:p:python-39:r:howto--urllib2] +file_filter = trans//howto--urllib2.po +trans.zh_CN = howto/urllib2.po +source_file = trans/en/howto--urllib2.po +source_lang = en +type = PO +minimum_perc = 0 +resource_name = howto--urllib2 + +[o:python-doc:p:python-39:r:install--index] +file_filter = trans//install--index.po +trans.zh_CN = install/index.po +source_file = trans/en/install--index.po +source_lang = en +type = PO +minimum_perc = 0 +resource_name = install--index + +[o:python-doc:p:python-39:r:installing--index] +file_filter = trans//installing--index.po +trans.zh_CN = installing/index.po +source_file = trans/en/installing--index.po +source_lang = en +type = PO +minimum_perc = 0 +resource_name = installing--index + +[o:python-doc:p:python-39:r:library--2to3] +file_filter = trans//library--2to3.po +trans.zh_CN = library/2to3.po +source_file = trans/en/library--2to3.po +source_lang = en +type = PO +minimum_perc = 0 +resource_name = library--2to3 + +[o:python-doc:p:python-39:r:library--abc] +file_filter = trans//library--abc.po +trans.zh_CN = library/abc.po +source_file = trans/en/library--abc.po +source_lang = en +type = PO +minimum_perc = 0 +resource_name = library--abc + +[o:python-doc:p:python-39:r:library--aifc] +file_filter = trans//library--aifc.po +trans.zh_CN = library/aifc.po +source_file = trans/en/library--aifc.po +source_lang = en +type = PO +minimum_perc = 0 +resource_name = library--aifc + +[o:python-doc:p:python-39:r:library--allos] +file_filter = trans//library--allos.po +trans.zh_CN = library/allos.po +source_file = trans/en/library--allos.po +source_lang = en +type = PO +minimum_perc = 0 +resource_name = library--allos + +[o:python-doc:p:python-39:r:library--archiving] +file_filter = trans//library--archiving.po +trans.zh_CN = library/archiving.po +source_file = trans/en/library--archiving.po +source_lang = en +type = PO +minimum_perc = 0 +resource_name = library--archiving + +[o:python-doc:p:python-39:r:library--argparse] +file_filter = trans//library--argparse.po +trans.zh_CN = library/argparse.po +source_file = trans/en/library--argparse.po +source_lang = en +type = PO +minimum_perc = 0 +resource_name = library--argparse + +[o:python-doc:p:python-39:r:library--array] +file_filter = trans//library--array.po +trans.zh_CN = library/array.po +source_file = trans/en/library--array.po +source_lang = en +type = PO +minimum_perc = 0 +resource_name = library--array + +[o:python-doc:p:python-39:r:library--ast] +file_filter = trans//library--ast.po +trans.zh_CN = library/ast.po +source_file = trans/en/library--ast.po +source_lang = en +type = PO +minimum_perc = 0 +resource_name = library--ast + +[o:python-doc:p:python-39:r:library--asynchat] +file_filter = trans//library--asynchat.po +trans.zh_CN = library/asynchat.po +source_file = trans/en/library--asynchat.po +source_lang = en +type = PO +minimum_perc = 0 +resource_name = library--asynchat + +[o:python-doc:p:python-39:r:library--asyncio] +file_filter = trans//library--asyncio.po +trans.zh_CN = library/asyncio.po +source_file = trans/en/library--asyncio.po +source_lang = en +type = PO +minimum_perc = 0 +resource_name = library--asyncio + +[o:python-doc:p:python-39:r:library--asyncio-api-index] +file_filter = trans//library--asyncio-api-index.po +trans.zh_CN = library/asyncio-api-index.po +source_file = trans/en/library--asyncio-api-index.po +source_lang = en +type = PO +minimum_perc = 0 +resource_name = library--asyncio-api-index + +[o:python-doc:p:python-39:r:library--asyncio-dev] +file_filter = trans//library--asyncio-dev.po +trans.zh_CN = library/asyncio-dev.po +source_file = trans/en/library--asyncio-dev.po +source_lang = en +type = PO +minimum_perc = 0 +resource_name = library--asyncio-dev + +[o:python-doc:p:python-39:r:library--asyncio-eventloop] +file_filter = trans//library--asyncio-eventloop.po +trans.zh_CN = library/asyncio-eventloop.po +source_file = trans/en/library--asyncio-eventloop.po +source_lang = en +type = PO +minimum_perc = 0 +resource_name = library--asyncio-eventloop + +[o:python-doc:p:python-39:r:library--asyncio-exceptions] +file_filter = trans//library--asyncio-exceptions.po +trans.zh_CN = library/asyncio-exceptions.po +source_file = trans/en/library--asyncio-exceptions.po +source_lang = en +type = PO +minimum_perc = 0 +resource_name = library--asyncio-exceptions + +[o:python-doc:p:python-39:r:library--asyncio-future] +file_filter = trans//library--asyncio-future.po +trans.zh_CN = library/asyncio-future.po +source_file = trans/en/library--asyncio-future.po +source_lang = en +type = PO +minimum_perc = 0 +resource_name = library--asyncio-future + +[o:python-doc:p:python-39:r:library--asyncio-llapi-index] +file_filter = trans//library--asyncio-llapi-index.po +trans.zh_CN = library/asyncio-llapi-index.po +source_file = trans/en/library--asyncio-llapi-index.po +source_lang = en +type = PO +minimum_perc = 0 +resource_name = library--asyncio-llapi-index + +[o:python-doc:p:python-39:r:library--asyncio-platforms] +file_filter = trans//library--asyncio-platforms.po +trans.zh_CN = library/asyncio-platforms.po +source_file = trans/en/library--asyncio-platforms.po +source_lang = en +type = PO +minimum_perc = 0 +resource_name = library--asyncio-platforms + +[o:python-doc:p:python-39:r:library--asyncio-policy] +file_filter = trans//library--asyncio-policy.po +trans.zh_CN = library/asyncio-policy.po +source_file = trans/en/library--asyncio-policy.po +source_lang = en +type = PO +minimum_perc = 0 +resource_name = library--asyncio-policy + +[o:python-doc:p:python-39:r:library--asyncio-protocol] +file_filter = trans//library--asyncio-protocol.po +trans.zh_CN = library/asyncio-protocol.po +source_file = trans/en/library--asyncio-protocol.po +source_lang = en +type = PO +minimum_perc = 0 +resource_name = library--asyncio-protocol + +[o:python-doc:p:python-39:r:library--asyncio-queue] +file_filter = trans//library--asyncio-queue.po +trans.zh_CN = library/asyncio-queue.po +source_file = trans/en/library--asyncio-queue.po +source_lang = en +type = PO +minimum_perc = 0 +resource_name = library--asyncio-queue + +[o:python-doc:p:python-39:r:library--asyncio-stream] +file_filter = trans//library--asyncio-stream.po +trans.zh_CN = library/asyncio-stream.po +source_file = trans/en/library--asyncio-stream.po +source_lang = en +type = PO +minimum_perc = 0 +resource_name = library--asyncio-stream + +[o:python-doc:p:python-39:r:library--asyncio-subprocess] +file_filter = trans//library--asyncio-subprocess.po +trans.zh_CN = library/asyncio-subprocess.po +source_file = trans/en/library--asyncio-subprocess.po +source_lang = en +type = PO +minimum_perc = 0 +resource_name = library--asyncio-subprocess + +[o:python-doc:p:python-39:r:library--asyncio-sync] +file_filter = trans//library--asyncio-sync.po +trans.zh_CN = library/asyncio-sync.po +source_file = trans/en/library--asyncio-sync.po +source_lang = en +type = PO +minimum_perc = 0 +resource_name = library--asyncio-sync + +[o:python-doc:p:python-39:r:library--asyncio-task] +file_filter = trans//library--asyncio-task.po +trans.zh_CN = library/asyncio-task.po +source_file = trans/en/library--asyncio-task.po +source_lang = en +type = PO +minimum_perc = 0 +resource_name = library--asyncio-task + +[o:python-doc:p:python-39:r:library--asyncore] +file_filter = trans//library--asyncore.po +trans.zh_CN = library/asyncore.po +source_file = trans/en/library--asyncore.po +source_lang = en +type = PO +minimum_perc = 0 +resource_name = library--asyncore + +[o:python-doc:p:python-39:r:library--atexit] +file_filter = trans//library--atexit.po +trans.zh_CN = library/atexit.po +source_file = trans/en/library--atexit.po +source_lang = en +type = PO +minimum_perc = 0 +resource_name = library--atexit + +[o:python-doc:p:python-39:r:library--audioop] +file_filter = trans//library--audioop.po +trans.zh_CN = library/audioop.po +source_file = trans/en/library--audioop.po +source_lang = en +type = PO +minimum_perc = 0 +resource_name = library--audioop + +[o:python-doc:p:python-39:r:library--audit_events] +file_filter = trans//library--audit_events.po +trans.zh_CN = library/audit_events.po +source_file = trans/en/library--audit_events.po +source_lang = en +type = PO +minimum_perc = 0 +resource_name = library--audit_events + +[o:python-doc:p:python-39:r:library--base64] +file_filter = trans//library--base64.po +trans.zh_CN = library/base64.po +source_file = trans/en/library--base64.po +source_lang = en +type = PO +minimum_perc = 0 +resource_name = library--base64 + +[o:python-doc:p:python-39:r:library--bdb] +file_filter = trans//library--bdb.po +trans.zh_CN = library/bdb.po +source_file = trans/en/library--bdb.po +source_lang = en +type = PO +minimum_perc = 0 +resource_name = library--bdb + +[o:python-doc:p:python-39:r:library--binary] +file_filter = trans//library--binary.po +trans.zh_CN = library/binary.po +source_file = trans/en/library--binary.po +source_lang = en +type = PO +minimum_perc = 0 +resource_name = library--binary + +[o:python-doc:p:python-39:r:library--binascii] +file_filter = trans//library--binascii.po +trans.zh_CN = library/binascii.po +source_file = trans/en/library--binascii.po +source_lang = en +type = PO +minimum_perc = 0 +resource_name = library--binascii + +[o:python-doc:p:python-39:r:library--binhex] +file_filter = trans//library--binhex.po +trans.zh_CN = library/binhex.po +source_file = trans/en/library--binhex.po +source_lang = en +type = PO +minimum_perc = 0 +resource_name = library--binhex + +[o:python-doc:p:python-39:r:library--bisect] +file_filter = trans//library--bisect.po +trans.zh_CN = library/bisect.po +source_file = trans/en/library--bisect.po +source_lang = en +type = PO +minimum_perc = 0 +resource_name = library--bisect + +[o:python-doc:p:python-39:r:library--builtins] +file_filter = trans//library--builtins.po +trans.zh_CN = library/builtins.po +source_file = trans/en/library--builtins.po +source_lang = en +type = PO +minimum_perc = 0 +resource_name = library--builtins + +[o:python-doc:p:python-39:r:library--bz2] +file_filter = trans//library--bz2.po +trans.zh_CN = library/bz2.po +source_file = trans/en/library--bz2.po +source_lang = en +type = PO +minimum_perc = 0 +resource_name = library--bz2 + +[o:python-doc:p:python-39:r:library--calendar] +file_filter = trans//library--calendar.po +trans.zh_CN = library/calendar.po +source_file = trans/en/library--calendar.po +source_lang = en +type = PO +minimum_perc = 0 +resource_name = library--calendar + +[o:python-doc:p:python-39:r:library--cgi] +file_filter = trans//library--cgi.po +trans.zh_CN = library/cgi.po +source_file = trans/en/library--cgi.po +source_lang = en +type = PO +minimum_perc = 0 +resource_name = library--cgi + +[o:python-doc:p:python-39:r:library--cgitb] +file_filter = trans//library--cgitb.po +trans.zh_CN = library/cgitb.po +source_file = trans/en/library--cgitb.po +source_lang = en +type = PO +minimum_perc = 0 +resource_name = library--cgitb + +[o:python-doc:p:python-39:r:library--chunk] +file_filter = trans//library--chunk.po +trans.zh_CN = library/chunk.po +source_file = trans/en/library--chunk.po +source_lang = en +type = PO +minimum_perc = 0 +resource_name = library--chunk + +[o:python-doc:p:python-39:r:library--cmath] +file_filter = trans//library--cmath.po +trans.zh_CN = library/cmath.po +source_file = trans/en/library--cmath.po +source_lang = en +type = PO +minimum_perc = 0 +resource_name = library--cmath + +[o:python-doc:p:python-39:r:library--cmd] +file_filter = trans//library--cmd.po +trans.zh_CN = library/cmd.po +source_file = trans/en/library--cmd.po +source_lang = en +type = PO +minimum_perc = 0 +resource_name = library--cmd + +[o:python-doc:p:python-39:r:library--code] +file_filter = trans//library--code.po +trans.zh_CN = library/code.po +source_file = trans/en/library--code.po +source_lang = en +type = PO +minimum_perc = 0 +resource_name = library--code + +[o:python-doc:p:python-39:r:library--codecs] +file_filter = trans//library--codecs.po +trans.zh_CN = library/codecs.po +source_file = trans/en/library--codecs.po +source_lang = en +type = PO +minimum_perc = 0 +resource_name = library--codecs + +[o:python-doc:p:python-39:r:library--codeop] +file_filter = trans//library--codeop.po +trans.zh_CN = library/codeop.po +source_file = trans/en/library--codeop.po +source_lang = en +type = PO +minimum_perc = 0 +resource_name = library--codeop + +[o:python-doc:p:python-39:r:library--collections] +file_filter = trans//library--collections.po +trans.zh_CN = library/collections.po +source_file = trans/en/library--collections.po +source_lang = en +type = PO +minimum_perc = 0 +resource_name = library--collections + +[o:python-doc:p:python-39:r:library--collections_abc] +file_filter = trans//library--collections_abc.po +trans.zh_CN = library/collections.abc.po +source_file = trans/en/library--collections_abc.po +source_lang = en +type = PO +minimum_perc = 0 +resource_name = library--collections_abc + +[o:python-doc:p:python-39:r:library--colorsys] +file_filter = trans//library--colorsys.po +trans.zh_CN = library/colorsys.po +source_file = trans/en/library--colorsys.po +source_lang = en +type = PO +minimum_perc = 0 +resource_name = library--colorsys + +[o:python-doc:p:python-39:r:library--compileall] +file_filter = trans//library--compileall.po +trans.zh_CN = library/compileall.po +source_file = trans/en/library--compileall.po +source_lang = en +type = PO +minimum_perc = 0 +resource_name = library--compileall + +[o:python-doc:p:python-39:r:library--concurrency] +file_filter = trans//library--concurrency.po +trans.zh_CN = library/concurrency.po +source_file = trans/en/library--concurrency.po +source_lang = en +type = PO +minimum_perc = 0 +resource_name = library--concurrency + +[o:python-doc:p:python-39:r:library--concurrent] +file_filter = trans//library--concurrent.po +trans.zh_CN = library/concurrent.po +source_file = trans/en/library--concurrent.po +source_lang = en +type = PO +minimum_perc = 0 +resource_name = library--concurrent + +[o:python-doc:p:python-39:r:library--concurrent_futures] +file_filter = trans//library--concurrent_futures.po +trans.zh_CN = library/concurrent.futures.po +source_file = trans/en/library--concurrent_futures.po +source_lang = en +type = PO +minimum_perc = 0 +resource_name = library--concurrent_futures + +[o:python-doc:p:python-39:r:library--configparser] +file_filter = trans//library--configparser.po +trans.zh_CN = library/configparser.po +source_file = trans/en/library--configparser.po +source_lang = en +type = PO +minimum_perc = 0 +resource_name = library--configparser + +[o:python-doc:p:python-39:r:library--constants] +file_filter = trans//library--constants.po +trans.zh_CN = library/constants.po +source_file = trans/en/library--constants.po +source_lang = en +type = PO +minimum_perc = 0 +resource_name = library--constants + +[o:python-doc:p:python-39:r:library--contextlib] +file_filter = trans//library--contextlib.po +trans.zh_CN = library/contextlib.po +source_file = trans/en/library--contextlib.po +source_lang = en +type = PO +minimum_perc = 0 +resource_name = library--contextlib + +[o:python-doc:p:python-39:r:library--contextvars] +file_filter = trans//library--contextvars.po +trans.zh_CN = library/contextvars.po +source_file = trans/en/library--contextvars.po +source_lang = en +type = PO +minimum_perc = 0 +resource_name = library--contextvars + +[o:python-doc:p:python-39:r:library--copy] +file_filter = trans//library--copy.po +trans.zh_CN = library/copy.po +source_file = trans/en/library--copy.po +source_lang = en +type = PO +minimum_perc = 0 +resource_name = library--copy + +[o:python-doc:p:python-39:r:library--copyreg] +file_filter = trans//library--copyreg.po +trans.zh_CN = library/copyreg.po +source_file = trans/en/library--copyreg.po +source_lang = en +type = PO +minimum_perc = 0 +resource_name = library--copyreg + +[o:python-doc:p:python-39:r:library--crypt] +file_filter = trans//library--crypt.po +trans.zh_CN = library/crypt.po +source_file = trans/en/library--crypt.po +source_lang = en +type = PO +minimum_perc = 0 +resource_name = library--crypt + +[o:python-doc:p:python-39:r:library--crypto] +file_filter = trans//library--crypto.po +trans.zh_CN = library/crypto.po +source_file = trans/en/library--crypto.po +source_lang = en +type = PO +minimum_perc = 0 +resource_name = library--crypto + +[o:python-doc:p:python-39:r:library--csv] +file_filter = trans//library--csv.po +trans.zh_CN = library/csv.po +source_file = trans/en/library--csv.po +source_lang = en +type = PO +minimum_perc = 0 +resource_name = library--csv + +[o:python-doc:p:python-39:r:library--ctypes] +file_filter = trans//library--ctypes.po +trans.zh_CN = library/ctypes.po +source_file = trans/en/library--ctypes.po +source_lang = en +type = PO +minimum_perc = 0 +resource_name = library--ctypes + +[o:python-doc:p:python-39:r:library--curses] +file_filter = trans//library--curses.po +trans.zh_CN = library/curses.po +source_file = trans/en/library--curses.po +source_lang = en +type = PO +minimum_perc = 0 +resource_name = library--curses + +[o:python-doc:p:python-39:r:library--curses_ascii] +file_filter = trans//library--curses_ascii.po +trans.zh_CN = library/curses.ascii.po +source_file = trans/en/library--curses_ascii.po +source_lang = en +type = PO +minimum_perc = 0 +resource_name = library--curses_ascii + +[o:python-doc:p:python-39:r:library--curses_panel] +file_filter = trans//library--curses_panel.po +trans.zh_CN = library/curses.panel.po +source_file = trans/en/library--curses_panel.po +source_lang = en +type = PO +minimum_perc = 0 +resource_name = library--curses_panel + +[o:python-doc:p:python-39:r:library--custominterp] +file_filter = trans//library--custominterp.po +trans.zh_CN = library/custominterp.po +source_file = trans/en/library--custominterp.po +source_lang = en +type = PO +minimum_perc = 0 +resource_name = library--custominterp + +[o:python-doc:p:python-39:r:library--dataclasses] +file_filter = trans//library--dataclasses.po +trans.zh_CN = library/dataclasses.po +source_file = trans/en/library--dataclasses.po +source_lang = en +type = PO +minimum_perc = 0 +resource_name = library--dataclasses + +[o:python-doc:p:python-39:r:library--datatypes] +file_filter = trans//library--datatypes.po +trans.zh_CN = library/datatypes.po +source_file = trans/en/library--datatypes.po +source_lang = en +type = PO +minimum_perc = 0 +resource_name = library--datatypes + +[o:python-doc:p:python-39:r:library--datetime] +file_filter = trans//library--datetime.po +trans.zh_CN = library/datetime.po +source_file = trans/en/library--datetime.po +source_lang = en +type = PO +minimum_perc = 0 +resource_name = library--datetime + +[o:python-doc:p:python-39:r:library--dbm] +file_filter = trans//library--dbm.po +trans.zh_CN = library/dbm.po +source_file = trans/en/library--dbm.po +source_lang = en +type = PO +minimum_perc = 0 +resource_name = library--dbm + +[o:python-doc:p:python-39:r:library--debug] +file_filter = trans//library--debug.po +trans.zh_CN = library/debug.po +source_file = trans/en/library--debug.po +source_lang = en +type = PO +minimum_perc = 0 +resource_name = library--debug + +[o:python-doc:p:python-39:r:library--decimal] +file_filter = trans//library--decimal.po +trans.zh_CN = library/decimal.po +source_file = trans/en/library--decimal.po +source_lang = en +type = PO +minimum_perc = 0 +resource_name = library--decimal + +[o:python-doc:p:python-39:r:library--development] +file_filter = trans//library--development.po +trans.zh_CN = library/development.po +source_file = trans/en/library--development.po +source_lang = en +type = PO +minimum_perc = 0 +resource_name = library--development + +[o:python-doc:p:python-39:r:library--devmode] +file_filter = trans//library--devmode.po +trans.zh_CN = library/devmode.po +source_file = trans/en/library--devmode.po +source_lang = en +type = PO +minimum_perc = 0 +resource_name = library--devmode + +[o:python-doc:p:python-39:r:library--dialog] +file_filter = trans//library--dialog.po +trans.zh_CN = library/dialog.po +source_file = trans/en/library--dialog.po +source_lang = en +type = PO +minimum_perc = 0 +resource_name = library--dialog + +[o:python-doc:p:python-39:r:library--difflib] +file_filter = trans//library--difflib.po +trans.zh_CN = library/difflib.po +source_file = trans/en/library--difflib.po +source_lang = en +type = PO +minimum_perc = 0 +resource_name = library--difflib + +[o:python-doc:p:python-39:r:library--dis] +file_filter = trans//library--dis.po +trans.zh_CN = library/dis.po +source_file = trans/en/library--dis.po +source_lang = en +type = PO +minimum_perc = 0 +resource_name = library--dis + +[o:python-doc:p:python-39:r:library--distribution] +file_filter = trans//library--distribution.po +trans.zh_CN = library/distribution.po +source_file = trans/en/library--distribution.po +source_lang = en +type = PO +minimum_perc = 0 +resource_name = library--distribution + +[o:python-doc:p:python-39:r:library--distutils] +file_filter = trans//library--distutils.po +trans.zh_CN = library/distutils.po +source_file = trans/en/library--distutils.po +source_lang = en +type = PO +minimum_perc = 0 +resource_name = library--distutils + +[o:python-doc:p:python-39:r:library--doctest] +file_filter = trans//library--doctest.po +trans.zh_CN = library/doctest.po +source_file = trans/en/library--doctest.po +source_lang = en +type = PO +minimum_perc = 0 +resource_name = library--doctest + +[o:python-doc:p:python-39:r:library--email] +file_filter = trans//library--email.po +trans.zh_CN = library/email.po +source_file = trans/en/library--email.po +source_lang = en +type = PO +minimum_perc = 0 +resource_name = library--email + +[o:python-doc:p:python-39:r:library--email_charset] +file_filter = trans//library--email_charset.po +trans.zh_CN = library/email.charset.po +source_file = trans/en/library--email_charset.po +source_lang = en +type = PO +minimum_perc = 0 +resource_name = library--email_charset + +[o:python-doc:p:python-39:r:library--email_compat32-message] +file_filter = trans//library--email_compat32-message.po +trans.zh_CN = library/email.compat32-message.po +source_file = trans/en/library--email_compat32-message.po +source_lang = en +type = PO +minimum_perc = 0 +resource_name = library--email_compat32-message + +[o:python-doc:p:python-39:r:library--email_contentmanager] +file_filter = trans//library--email_contentmanager.po +trans.zh_CN = library/email.contentmanager.po +source_file = trans/en/library--email_contentmanager.po +source_lang = en +type = PO +minimum_perc = 0 +resource_name = library--email_contentmanager + +[o:python-doc:p:python-39:r:library--email_encoders] +file_filter = trans//library--email_encoders.po +trans.zh_CN = library/email.encoders.po +source_file = trans/en/library--email_encoders.po +source_lang = en +type = PO +minimum_perc = 0 +resource_name = library--email_encoders + +[o:python-doc:p:python-39:r:library--email_errors] +file_filter = trans//library--email_errors.po +trans.zh_CN = library/email.errors.po +source_file = trans/en/library--email_errors.po +source_lang = en +type = PO +minimum_perc = 0 +resource_name = library--email_errors + +[o:python-doc:p:python-39:r:library--email_examples] +file_filter = trans//library--email_examples.po +trans.zh_CN = library/email.examples.po +source_file = trans/en/library--email_examples.po +source_lang = en +type = PO +minimum_perc = 0 +resource_name = library--email_examples + +[o:python-doc:p:python-39:r:library--email_generator] +file_filter = trans//library--email_generator.po +trans.zh_CN = library/email.generator.po +source_file = trans/en/library--email_generator.po +source_lang = en +type = PO +minimum_perc = 0 +resource_name = library--email_generator + +[o:python-doc:p:python-39:r:library--email_header] +file_filter = trans//library--email_header.po +trans.zh_CN = library/email.header.po +source_file = trans/en/library--email_header.po +source_lang = en +type = PO +minimum_perc = 0 +resource_name = library--email_header + +[o:python-doc:p:python-39:r:library--email_headerregistry] +file_filter = trans//library--email_headerregistry.po +trans.zh_CN = library/email.headerregistry.po +source_file = trans/en/library--email_headerregistry.po +source_lang = en +type = PO +minimum_perc = 0 +resource_name = library--email_headerregistry + +[o:python-doc:p:python-39:r:library--email_iterators] +file_filter = trans//library--email_iterators.po +trans.zh_CN = library/email.iterators.po +source_file = trans/en/library--email_iterators.po +source_lang = en +type = PO +minimum_perc = 0 +resource_name = library--email_iterators + +[o:python-doc:p:python-39:r:library--email_message] +file_filter = trans//library--email_message.po +trans.zh_CN = library/email.message.po +source_file = trans/en/library--email_message.po +source_lang = en +type = PO +minimum_perc = 0 +resource_name = library--email_message + +[o:python-doc:p:python-39:r:library--email_mime] +file_filter = trans//library--email_mime.po +trans.zh_CN = library/email.mime.po +source_file = trans/en/library--email_mime.po +source_lang = en +type = PO +minimum_perc = 0 +resource_name = library--email_mime + +[o:python-doc:p:python-39:r:library--email_parser] +file_filter = trans//library--email_parser.po +trans.zh_CN = library/email.parser.po +source_file = trans/en/library--email_parser.po +source_lang = en +type = PO +minimum_perc = 0 +resource_name = library--email_parser + +[o:python-doc:p:python-39:r:library--email_policy] +file_filter = trans//library--email_policy.po +trans.zh_CN = library/email.policy.po +source_file = trans/en/library--email_policy.po +source_lang = en +type = PO +minimum_perc = 0 +resource_name = library--email_policy + +[o:python-doc:p:python-39:r:library--email_utils] +file_filter = trans//library--email_utils.po +trans.zh_CN = library/email.utils.po +source_file = trans/en/library--email_utils.po +source_lang = en +type = PO +minimum_perc = 0 +resource_name = library--email_utils + +[o:python-doc:p:python-39:r:library--ensurepip] +file_filter = trans//library--ensurepip.po +trans.zh_CN = library/ensurepip.po +source_file = trans/en/library--ensurepip.po +source_lang = en +type = PO +minimum_perc = 0 +resource_name = library--ensurepip + +[o:python-doc:p:python-39:r:library--enum] +file_filter = trans//library--enum.po +trans.zh_CN = library/enum.po +source_file = trans/en/library--enum.po +source_lang = en +type = PO +minimum_perc = 0 +resource_name = library--enum + +[o:python-doc:p:python-39:r:library--errno] +file_filter = trans//library--errno.po +trans.zh_CN = library/errno.po +source_file = trans/en/library--errno.po +source_lang = en +type = PO +minimum_perc = 0 +resource_name = library--errno + +[o:python-doc:p:python-39:r:library--exceptions] +file_filter = trans//library--exceptions.po +trans.zh_CN = library/exceptions.po +source_file = trans/en/library--exceptions.po +source_lang = en +type = PO +minimum_perc = 0 +resource_name = library--exceptions + +[o:python-doc:p:python-39:r:library--faulthandler] +file_filter = trans//library--faulthandler.po +trans.zh_CN = library/faulthandler.po +source_file = trans/en/library--faulthandler.po +source_lang = en +type = PO +minimum_perc = 0 +resource_name = library--faulthandler + +[o:python-doc:p:python-39:r:library--fcntl] +file_filter = trans//library--fcntl.po +trans.zh_CN = library/fcntl.po +source_file = trans/en/library--fcntl.po +source_lang = en +type = PO +minimum_perc = 0 +resource_name = library--fcntl + +[o:python-doc:p:python-39:r:library--filecmp] +file_filter = trans//library--filecmp.po +trans.zh_CN = library/filecmp.po +source_file = trans/en/library--filecmp.po +source_lang = en +type = PO +minimum_perc = 0 +resource_name = library--filecmp + +[o:python-doc:p:python-39:r:library--fileformats] +file_filter = trans//library--fileformats.po +trans.zh_CN = library/fileformats.po +source_file = trans/en/library--fileformats.po +source_lang = en +type = PO +minimum_perc = 0 +resource_name = library--fileformats + +[o:python-doc:p:python-39:r:library--fileinput] +file_filter = trans//library--fileinput.po +trans.zh_CN = library/fileinput.po +source_file = trans/en/library--fileinput.po +source_lang = en +type = PO +minimum_perc = 0 +resource_name = library--fileinput + +[o:python-doc:p:python-39:r:library--filesys] +file_filter = trans//library--filesys.po +trans.zh_CN = library/filesys.po +source_file = trans/en/library--filesys.po +source_lang = en +type = PO +minimum_perc = 0 +resource_name = library--filesys + +[o:python-doc:p:python-39:r:library--fnmatch] +file_filter = trans//library--fnmatch.po +trans.zh_CN = library/fnmatch.po +source_file = trans/en/library--fnmatch.po +source_lang = en +type = PO +minimum_perc = 0 +resource_name = library--fnmatch + +[o:python-doc:p:python-39:r:library--formatter] +file_filter = trans//library--formatter.po +trans.zh_CN = library/formatter.po +source_file = trans/en/library--formatter.po +source_lang = en +type = PO +minimum_perc = 0 +resource_name = library--formatter + +[o:python-doc:p:python-39:r:library--fractions] +file_filter = trans//library--fractions.po +trans.zh_CN = library/fractions.po +source_file = trans/en/library--fractions.po +source_lang = en +type = PO +minimum_perc = 0 +resource_name = library--fractions + +[o:python-doc:p:python-39:r:library--frameworks] +file_filter = trans//library--frameworks.po +trans.zh_CN = library/frameworks.po +source_file = trans/en/library--frameworks.po +source_lang = en +type = PO +minimum_perc = 0 +resource_name = library--frameworks + +[o:python-doc:p:python-39:r:library--ftplib] +file_filter = trans//library--ftplib.po +trans.zh_CN = library/ftplib.po +source_file = trans/en/library--ftplib.po +source_lang = en +type = PO +minimum_perc = 0 +resource_name = library--ftplib + +[o:python-doc:p:python-39:r:library--functional] +file_filter = trans//library--functional.po +trans.zh_CN = library/functional.po +source_file = trans/en/library--functional.po +source_lang = en +type = PO +minimum_perc = 0 +resource_name = library--functional + +[o:python-doc:p:python-39:r:library--functions] +file_filter = trans//library--functions.po +trans.zh_CN = library/functions.po +source_file = trans/en/library--functions.po +source_lang = en +type = PO +minimum_perc = 0 +resource_name = library--functions + +[o:python-doc:p:python-39:r:library--functools] +file_filter = trans//library--functools.po +trans.zh_CN = library/functools.po +source_file = trans/en/library--functools.po +source_lang = en +type = PO +minimum_perc = 0 +resource_name = library--functools + +[o:python-doc:p:python-39:r:library--__future__] +file_filter = trans//library--__future__.po +trans.zh_CN = library/__future__.po +source_file = trans/en/library--__future__.po +source_lang = en +type = PO +minimum_perc = 0 +resource_name = library--__future__ + +[o:python-doc:p:python-39:r:library--gc] +file_filter = trans//library--gc.po +trans.zh_CN = library/gc.po +source_file = trans/en/library--gc.po +source_lang = en +type = PO +minimum_perc = 0 +resource_name = library--gc + +[o:python-doc:p:python-39:r:library--getopt] +file_filter = trans//library--getopt.po +trans.zh_CN = library/getopt.po +source_file = trans/en/library--getopt.po +source_lang = en +type = PO +minimum_perc = 0 +resource_name = library--getopt + +[o:python-doc:p:python-39:r:library--getpass] +file_filter = trans//library--getpass.po +trans.zh_CN = library/getpass.po +source_file = trans/en/library--getpass.po +source_lang = en +type = PO +minimum_perc = 0 +resource_name = library--getpass + +[o:python-doc:p:python-39:r:library--gettext] +file_filter = trans//library--gettext.po +trans.zh_CN = library/gettext.po +source_file = trans/en/library--gettext.po +source_lang = en +type = PO +minimum_perc = 0 +resource_name = library--gettext + +[o:python-doc:p:python-39:r:library--glob] +file_filter = trans//library--glob.po +trans.zh_CN = library/glob.po +source_file = trans/en/library--glob.po +source_lang = en +type = PO +minimum_perc = 0 +resource_name = library--glob + +[o:python-doc:p:python-39:r:library--graphlib] +file_filter = trans//library--graphlib.po +trans.zh_CN = library/graphlib.po +source_file = trans/en/library--graphlib.po +source_lang = en +type = PO +minimum_perc = 0 +resource_name = library--graphlib + +[o:python-doc:p:python-39:r:library--grp] +file_filter = trans//library--grp.po +trans.zh_CN = library/grp.po +source_file = trans/en/library--grp.po +source_lang = en +type = PO +minimum_perc = 0 +resource_name = library--grp + +[o:python-doc:p:python-39:r:library--gzip] +file_filter = trans//library--gzip.po +trans.zh_CN = library/gzip.po +source_file = trans/en/library--gzip.po +source_lang = en +type = PO +minimum_perc = 0 +resource_name = library--gzip + +[o:python-doc:p:python-39:r:library--hashlib] +file_filter = trans//library--hashlib.po +trans.zh_CN = library/hashlib.po +source_file = trans/en/library--hashlib.po +source_lang = en +type = PO +minimum_perc = 0 +resource_name = library--hashlib + +[o:python-doc:p:python-39:r:library--heapq] +file_filter = trans//library--heapq.po +trans.zh_CN = library/heapq.po +source_file = trans/en/library--heapq.po +source_lang = en +type = PO +minimum_perc = 0 +resource_name = library--heapq + +[o:python-doc:p:python-39:r:library--hmac] +file_filter = trans//library--hmac.po +trans.zh_CN = library/hmac.po +source_file = trans/en/library--hmac.po +source_lang = en +type = PO +minimum_perc = 0 +resource_name = library--hmac + +[o:python-doc:p:python-39:r:library--html] +file_filter = trans//library--html.po +trans.zh_CN = library/html.po +source_file = trans/en/library--html.po +source_lang = en +type = PO +minimum_perc = 0 +resource_name = library--html + +[o:python-doc:p:python-39:r:library--html_entities] +file_filter = trans//library--html_entities.po +trans.zh_CN = library/html.entities.po +source_file = trans/en/library--html_entities.po +source_lang = en +type = PO +minimum_perc = 0 +resource_name = library--html_entities + +[o:python-doc:p:python-39:r:library--html_parser] +file_filter = trans//library--html_parser.po +trans.zh_CN = library/html.parser.po +source_file = trans/en/library--html_parser.po +source_lang = en +type = PO +minimum_perc = 0 +resource_name = library--html_parser + +[o:python-doc:p:python-39:r:library--http] +file_filter = trans//library--http.po +trans.zh_CN = library/http.po +source_file = trans/en/library--http.po +source_lang = en +type = PO +minimum_perc = 0 +resource_name = library--http + +[o:python-doc:p:python-39:r:library--http_client] +file_filter = trans//library--http_client.po +trans.zh_CN = library/http.client.po +source_file = trans/en/library--http_client.po +source_lang = en +type = PO +minimum_perc = 0 +resource_name = library--http_client + +[o:python-doc:p:python-39:r:library--http_cookiejar] +file_filter = trans//library--http_cookiejar.po +trans.zh_CN = library/http.cookiejar.po +source_file = trans/en/library--http_cookiejar.po +source_lang = en +type = PO +minimum_perc = 0 +resource_name = library--http_cookiejar + +[o:python-doc:p:python-39:r:library--http_cookies] +file_filter = trans//library--http_cookies.po +trans.zh_CN = library/http.cookies.po +source_file = trans/en/library--http_cookies.po +source_lang = en +type = PO +minimum_perc = 0 +resource_name = library--http_cookies + +[o:python-doc:p:python-39:r:library--http_server] +file_filter = trans//library--http_server.po +trans.zh_CN = library/http.server.po +source_file = trans/en/library--http_server.po +source_lang = en +type = PO +minimum_perc = 0 +resource_name = library--http_server + +[o:python-doc:p:python-39:r:library--i18n] +file_filter = trans//library--i18n.po +trans.zh_CN = library/i18n.po +source_file = trans/en/library--i18n.po +source_lang = en +type = PO +minimum_perc = 0 +resource_name = library--i18n + +[o:python-doc:p:python-39:r:library--idle] +file_filter = trans//library--idle.po +trans.zh_CN = library/idle.po +source_file = trans/en/library--idle.po +source_lang = en +type = PO +minimum_perc = 0 +resource_name = library--idle + +[o:python-doc:p:python-39:r:library--imaplib] +file_filter = trans//library--imaplib.po +trans.zh_CN = library/imaplib.po +source_file = trans/en/library--imaplib.po +source_lang = en +type = PO +minimum_perc = 0 +resource_name = library--imaplib + +[o:python-doc:p:python-39:r:library--imghdr] +file_filter = trans//library--imghdr.po +trans.zh_CN = library/imghdr.po +source_file = trans/en/library--imghdr.po +source_lang = en +type = PO +minimum_perc = 0 +resource_name = library--imghdr + +[o:python-doc:p:python-39:r:library--imp] +file_filter = trans//library--imp.po +trans.zh_CN = library/imp.po +source_file = trans/en/library--imp.po +source_lang = en +type = PO +minimum_perc = 0 +resource_name = library--imp + +[o:python-doc:p:python-39:r:library--importlib] +file_filter = trans//library--importlib.po +trans.zh_CN = library/importlib.po +source_file = trans/en/library--importlib.po +source_lang = en +type = PO +minimum_perc = 0 +resource_name = library--importlib + +[o:python-doc:p:python-39:r:library--importlib_metadata] +file_filter = trans//library--importlib_metadata.po +trans.zh_CN = library/importlib.metadata.po +source_file = trans/en/library--importlib_metadata.po +source_lang = en +type = PO +minimum_perc = 0 +resource_name = library--importlib_metadata + +[o:python-doc:p:python-39:r:library--index] +file_filter = trans//library--index.po +trans.zh_CN = library/index.po +source_file = trans/en/library--index.po +source_lang = en +type = PO +minimum_perc = 0 +resource_name = library--index + +[o:python-doc:p:python-39:r:library--inspect] +file_filter = trans//library--inspect.po +trans.zh_CN = library/inspect.po +source_file = trans/en/library--inspect.po +source_lang = en +type = PO +minimum_perc = 0 +resource_name = library--inspect + +[o:python-doc:p:python-39:r:library--internet] +file_filter = trans//library--internet.po +trans.zh_CN = library/internet.po +source_file = trans/en/library--internet.po +source_lang = en +type = PO +minimum_perc = 0 +resource_name = library--internet + +[o:python-doc:p:python-39:r:library--intro] +file_filter = trans//library--intro.po +trans.zh_CN = library/intro.po +source_file = trans/en/library--intro.po +source_lang = en +type = PO +minimum_perc = 0 +resource_name = library--intro + +[o:python-doc:p:python-39:r:library--io] +file_filter = trans//library--io.po +trans.zh_CN = library/io.po +source_file = trans/en/library--io.po +source_lang = en +type = PO +minimum_perc = 0 +resource_name = library--io + +[o:python-doc:p:python-39:r:library--ipaddress] +file_filter = trans//library--ipaddress.po +trans.zh_CN = library/ipaddress.po +source_file = trans/en/library--ipaddress.po +source_lang = en +type = PO +minimum_perc = 0 +resource_name = library--ipaddress + +[o:python-doc:p:python-39:r:library--ipc] +file_filter = trans//library--ipc.po +trans.zh_CN = library/ipc.po +source_file = trans/en/library--ipc.po +source_lang = en +type = PO +minimum_perc = 0 +resource_name = library--ipc + +[o:python-doc:p:python-39:r:library--itertools] +file_filter = trans//library--itertools.po +trans.zh_CN = library/itertools.po +source_file = trans/en/library--itertools.po +source_lang = en +type = PO +minimum_perc = 0 +resource_name = library--itertools + +[o:python-doc:p:python-39:r:library--json] +file_filter = trans//library--json.po +trans.zh_CN = library/json.po +source_file = trans/en/library--json.po +source_lang = en +type = PO +minimum_perc = 0 +resource_name = library--json + +[o:python-doc:p:python-39:r:library--keyword] +file_filter = trans//library--keyword.po +trans.zh_CN = library/keyword.po +source_file = trans/en/library--keyword.po +source_lang = en +type = PO +minimum_perc = 0 +resource_name = library--keyword + +[o:python-doc:p:python-39:r:library--language] +file_filter = trans//library--language.po +trans.zh_CN = library/language.po +source_file = trans/en/library--language.po +source_lang = en +type = PO +minimum_perc = 0 +resource_name = library--language + +[o:python-doc:p:python-39:r:library--linecache] +file_filter = trans//library--linecache.po +trans.zh_CN = library/linecache.po +source_file = trans/en/library--linecache.po +source_lang = en +type = PO +minimum_perc = 0 +resource_name = library--linecache + +[o:python-doc:p:python-39:r:library--locale] +file_filter = trans//library--locale.po +trans.zh_CN = library/locale.po +source_file = trans/en/library--locale.po +source_lang = en +type = PO +minimum_perc = 0 +resource_name = library--locale + +[o:python-doc:p:python-39:r:library--logging] +file_filter = trans//library--logging.po +trans.zh_CN = library/logging.po +source_file = trans/en/library--logging.po +source_lang = en +type = PO +minimum_perc = 0 +resource_name = library--logging + +[o:python-doc:p:python-39:r:library--logging_config] +file_filter = trans//library--logging_config.po +trans.zh_CN = library/logging.config.po +source_file = trans/en/library--logging_config.po +source_lang = en +type = PO +minimum_perc = 0 +resource_name = library--logging_config + +[o:python-doc:p:python-39:r:library--logging_handlers] +file_filter = trans//library--logging_handlers.po +trans.zh_CN = library/logging.handlers.po +source_file = trans/en/library--logging_handlers.po +source_lang = en +type = PO +minimum_perc = 0 +resource_name = library--logging_handlers + +[o:python-doc:p:python-39:r:library--lzma] +file_filter = trans//library--lzma.po +trans.zh_CN = library/lzma.po +source_file = trans/en/library--lzma.po +source_lang = en +type = PO +minimum_perc = 0 +resource_name = library--lzma + +[o:python-doc:p:python-39:r:library--mailbox] +file_filter = trans//library--mailbox.po +trans.zh_CN = library/mailbox.po +source_file = trans/en/library--mailbox.po +source_lang = en +type = PO +minimum_perc = 0 +resource_name = library--mailbox + +[o:python-doc:p:python-39:r:library--mailcap] +file_filter = trans//library--mailcap.po +trans.zh_CN = library/mailcap.po +source_file = trans/en/library--mailcap.po +source_lang = en +type = PO +minimum_perc = 0 +resource_name = library--mailcap + +[o:python-doc:p:python-39:r:library--__main__] +file_filter = trans//library--__main__.po +trans.zh_CN = library/__main__.po +source_file = trans/en/library--__main__.po +source_lang = en +type = PO +minimum_perc = 0 +resource_name = library--__main__ + +[o:python-doc:p:python-39:r:library--markup] +file_filter = trans//library--markup.po +trans.zh_CN = library/markup.po +source_file = trans/en/library--markup.po +source_lang = en +type = PO +minimum_perc = 0 +resource_name = library--markup + +[o:python-doc:p:python-39:r:library--marshal] +file_filter = trans//library--marshal.po +trans.zh_CN = library/marshal.po +source_file = trans/en/library--marshal.po +source_lang = en +type = PO +minimum_perc = 0 +resource_name = library--marshal + +[o:python-doc:p:python-39:r:library--math] +file_filter = trans//library--math.po +trans.zh_CN = library/math.po +source_file = trans/en/library--math.po +source_lang = en +type = PO +minimum_perc = 0 +resource_name = library--math + +[o:python-doc:p:python-39:r:library--mimetypes] +file_filter = trans//library--mimetypes.po +trans.zh_CN = library/mimetypes.po +source_file = trans/en/library--mimetypes.po +source_lang = en +type = PO +minimum_perc = 0 +resource_name = library--mimetypes + +[o:python-doc:p:python-39:r:library--misc] +file_filter = trans//library--misc.po +trans.zh_CN = library/misc.po +source_file = trans/en/library--misc.po +source_lang = en +type = PO +minimum_perc = 0 +resource_name = library--misc + +[o:python-doc:p:python-39:r:library--mm] +file_filter = trans//library--mm.po +trans.zh_CN = library/mm.po +source_file = trans/en/library--mm.po +source_lang = en +type = PO +minimum_perc = 0 +resource_name = library--mm + +[o:python-doc:p:python-39:r:library--mmap] +file_filter = trans//library--mmap.po +trans.zh_CN = library/mmap.po +source_file = trans/en/library--mmap.po +source_lang = en +type = PO +minimum_perc = 0 +resource_name = library--mmap + +[o:python-doc:p:python-39:r:library--modulefinder] +file_filter = trans//library--modulefinder.po +trans.zh_CN = library/modulefinder.po +source_file = trans/en/library--modulefinder.po +source_lang = en +type = PO +minimum_perc = 0 +resource_name = library--modulefinder + +[o:python-doc:p:python-39:r:library--modules] +file_filter = trans//library--modules.po +trans.zh_CN = library/modules.po +source_file = trans/en/library--modules.po +source_lang = en +type = PO +minimum_perc = 0 +resource_name = library--modules + +[o:python-doc:p:python-39:r:library--msilib] +file_filter = trans//library--msilib.po +trans.zh_CN = library/msilib.po +source_file = trans/en/library--msilib.po +source_lang = en +type = PO +minimum_perc = 0 +resource_name = library--msilib + +[o:python-doc:p:python-39:r:library--msvcrt] +file_filter = trans//library--msvcrt.po +trans.zh_CN = library/msvcrt.po +source_file = trans/en/library--msvcrt.po +source_lang = en +type = PO +minimum_perc = 0 +resource_name = library--msvcrt + +[o:python-doc:p:python-39:r:library--multiprocessing] +file_filter = trans//library--multiprocessing.po +trans.zh_CN = library/multiprocessing.po +source_file = trans/en/library--multiprocessing.po +source_lang = en +type = PO +minimum_perc = 0 +resource_name = library--multiprocessing + +[o:python-doc:p:python-39:r:library--multiprocessing_shared_memory] +file_filter = trans//library--multiprocessing_shared_memory.po +trans.zh_CN = library/multiprocessing.shared_memory.po +source_file = trans/en/library--multiprocessing_shared_memory.po +source_lang = en +type = PO +minimum_perc = 0 +resource_name = library--multiprocessing_shared_memory + +[o:python-doc:p:python-39:r:library--netdata] +file_filter = trans//library--netdata.po +trans.zh_CN = library/netdata.po +source_file = trans/en/library--netdata.po +source_lang = en +type = PO +minimum_perc = 0 +resource_name = library--netdata + +[o:python-doc:p:python-39:r:library--netrc] +file_filter = trans//library--netrc.po +trans.zh_CN = library/netrc.po +source_file = trans/en/library--netrc.po +source_lang = en +type = PO +minimum_perc = 0 +resource_name = library--netrc + +[o:python-doc:p:python-39:r:library--nis] +file_filter = trans//library--nis.po +trans.zh_CN = library/nis.po +source_file = trans/en/library--nis.po +source_lang = en +type = PO +minimum_perc = 0 +resource_name = library--nis + +[o:python-doc:p:python-39:r:library--nntplib] +file_filter = trans//library--nntplib.po +trans.zh_CN = library/nntplib.po +source_file = trans/en/library--nntplib.po +source_lang = en +type = PO +minimum_perc = 0 +resource_name = library--nntplib + +[o:python-doc:p:python-39:r:library--numbers] +file_filter = trans//library--numbers.po +trans.zh_CN = library/numbers.po +source_file = trans/en/library--numbers.po +source_lang = en +type = PO +minimum_perc = 0 +resource_name = library--numbers + +[o:python-doc:p:python-39:r:library--numeric] +file_filter = trans//library--numeric.po +trans.zh_CN = library/numeric.po +source_file = trans/en/library--numeric.po +source_lang = en +type = PO +minimum_perc = 0 +resource_name = library--numeric + +[o:python-doc:p:python-39:r:library--operator] +file_filter = trans//library--operator.po +trans.zh_CN = library/operator.po +source_file = trans/en/library--operator.po +source_lang = en +type = PO +minimum_perc = 0 +resource_name = library--operator + +[o:python-doc:p:python-39:r:library--optparse] +file_filter = trans//library--optparse.po +trans.zh_CN = library/optparse.po +source_file = trans/en/library--optparse.po +source_lang = en +type = PO +minimum_perc = 0 +resource_name = library--optparse + +[o:python-doc:p:python-39:r:library--os] +file_filter = trans//library--os.po +trans.zh_CN = library/os.po +source_file = trans/en/library--os.po +source_lang = en +type = PO +minimum_perc = 0 +resource_name = library--os + +[o:python-doc:p:python-39:r:library--os_path] +file_filter = trans//library--os_path.po +trans.zh_CN = library/os.path.po +source_file = trans/en/library--os_path.po +source_lang = en +type = PO +minimum_perc = 0 +resource_name = library--os_path + +[o:python-doc:p:python-39:r:library--ossaudiodev] +file_filter = trans//library--ossaudiodev.po +trans.zh_CN = library/ossaudiodev.po +source_file = trans/en/library--ossaudiodev.po +source_lang = en +type = PO +minimum_perc = 0 +resource_name = library--ossaudiodev + +[o:python-doc:p:python-39:r:library--parser] +file_filter = trans//library--parser.po +trans.zh_CN = library/parser.po +source_file = trans/en/library--parser.po +source_lang = en +type = PO +minimum_perc = 0 +resource_name = library--parser + +[o:python-doc:p:python-39:r:library--pathlib] +file_filter = trans//library--pathlib.po +trans.zh_CN = library/pathlib.po +source_file = trans/en/library--pathlib.po +source_lang = en +type = PO +minimum_perc = 0 +resource_name = library--pathlib + +[o:python-doc:p:python-39:r:library--pdb] +file_filter = trans//library--pdb.po +trans.zh_CN = library/pdb.po +source_file = trans/en/library--pdb.po +source_lang = en +type = PO +minimum_perc = 0 +resource_name = library--pdb + +[o:python-doc:p:python-39:r:library--persistence] +file_filter = trans//library--persistence.po +trans.zh_CN = library/persistence.po +source_file = trans/en/library--persistence.po +source_lang = en +type = PO +minimum_perc = 0 +resource_name = library--persistence + +[o:python-doc:p:python-39:r:library--pickle] +file_filter = trans//library--pickle.po +trans.zh_CN = library/pickle.po +source_file = trans/en/library--pickle.po +source_lang = en +type = PO +minimum_perc = 0 +resource_name = library--pickle + +[o:python-doc:p:python-39:r:library--pickletools] +file_filter = trans//library--pickletools.po +trans.zh_CN = library/pickletools.po +source_file = trans/en/library--pickletools.po +source_lang = en +type = PO +minimum_perc = 0 +resource_name = library--pickletools + +[o:python-doc:p:python-39:r:library--pipes] +file_filter = trans//library--pipes.po +trans.zh_CN = library/pipes.po +source_file = trans/en/library--pipes.po +source_lang = en +type = PO +minimum_perc = 0 +resource_name = library--pipes + +[o:python-doc:p:python-39:r:library--pkgutil] +file_filter = trans//library--pkgutil.po +trans.zh_CN = library/pkgutil.po +source_file = trans/en/library--pkgutil.po +source_lang = en +type = PO +minimum_perc = 0 +resource_name = library--pkgutil + +[o:python-doc:p:python-39:r:library--platform] +file_filter = trans//library--platform.po +trans.zh_CN = library/platform.po +source_file = trans/en/library--platform.po +source_lang = en +type = PO +minimum_perc = 0 +resource_name = library--platform + +[o:python-doc:p:python-39:r:library--plistlib] +file_filter = trans//library--plistlib.po +trans.zh_CN = library/plistlib.po +source_file = trans/en/library--plistlib.po +source_lang = en +type = PO +minimum_perc = 0 +resource_name = library--plistlib + +[o:python-doc:p:python-39:r:library--poplib] +file_filter = trans//library--poplib.po +trans.zh_CN = library/poplib.po +source_file = trans/en/library--poplib.po +source_lang = en +type = PO +minimum_perc = 0 +resource_name = library--poplib + +[o:python-doc:p:python-39:r:library--posix] +file_filter = trans//library--posix.po +trans.zh_CN = library/posix.po +source_file = trans/en/library--posix.po +source_lang = en +type = PO +minimum_perc = 0 +resource_name = library--posix + +[o:python-doc:p:python-39:r:library--pprint] +file_filter = trans//library--pprint.po +trans.zh_CN = library/pprint.po +source_file = trans/en/library--pprint.po +source_lang = en +type = PO +minimum_perc = 0 +resource_name = library--pprint + +[o:python-doc:p:python-39:r:library--profile] +file_filter = trans//library--profile.po +trans.zh_CN = library/profile.po +source_file = trans/en/library--profile.po +source_lang = en +type = PO +minimum_perc = 0 +resource_name = library--profile + +[o:python-doc:p:python-39:r:library--pty] +file_filter = trans//library--pty.po +trans.zh_CN = library/pty.po +source_file = trans/en/library--pty.po +source_lang = en +type = PO +minimum_perc = 0 +resource_name = library--pty + +[o:python-doc:p:python-39:r:library--pwd] +file_filter = trans//library--pwd.po +trans.zh_CN = library/pwd.po +source_file = trans/en/library--pwd.po +source_lang = en +type = PO +minimum_perc = 0 +resource_name = library--pwd + +[o:python-doc:p:python-39:r:library--pyclbr] +file_filter = trans//library--pyclbr.po +trans.zh_CN = library/pyclbr.po +source_file = trans/en/library--pyclbr.po +source_lang = en +type = PO +minimum_perc = 0 +resource_name = library--pyclbr + +[o:python-doc:p:python-39:r:library--py_compile] +file_filter = trans//library--py_compile.po +trans.zh_CN = library/py_compile.po +source_file = trans/en/library--py_compile.po +source_lang = en +type = PO +minimum_perc = 0 +resource_name = library--py_compile + +[o:python-doc:p:python-39:r:library--pydoc] +file_filter = trans//library--pydoc.po +trans.zh_CN = library/pydoc.po +source_file = trans/en/library--pydoc.po +source_lang = en +type = PO +minimum_perc = 0 +resource_name = library--pydoc + +[o:python-doc:p:python-39:r:library--pyexpat] +file_filter = trans//library--pyexpat.po +trans.zh_CN = library/pyexpat.po +source_file = trans/en/library--pyexpat.po +source_lang = en +type = PO +minimum_perc = 0 +resource_name = library--pyexpat + +[o:python-doc:p:python-39:r:library--python] +file_filter = trans//library--python.po +trans.zh_CN = library/python.po +source_file = trans/en/library--python.po +source_lang = en +type = PO +minimum_perc = 0 +resource_name = library--python + +[o:python-doc:p:python-39:r:library--queue] +file_filter = trans//library--queue.po +trans.zh_CN = library/queue.po +source_file = trans/en/library--queue.po +source_lang = en +type = PO +minimum_perc = 0 +resource_name = library--queue + +[o:python-doc:p:python-39:r:library--quopri] +file_filter = trans//library--quopri.po +trans.zh_CN = library/quopri.po +source_file = trans/en/library--quopri.po +source_lang = en +type = PO +minimum_perc = 0 +resource_name = library--quopri + +[o:python-doc:p:python-39:r:library--random] +file_filter = trans//library--random.po +trans.zh_CN = library/random.po +source_file = trans/en/library--random.po +source_lang = en +type = PO +minimum_perc = 0 +resource_name = library--random + +[o:python-doc:p:python-39:r:library--re] +file_filter = trans//library--re.po +trans.zh_CN = library/re.po +source_file = trans/en/library--re.po +source_lang = en +type = PO +minimum_perc = 0 +resource_name = library--re + +[o:python-doc:p:python-39:r:library--readline] +file_filter = trans//library--readline.po +trans.zh_CN = library/readline.po +source_file = trans/en/library--readline.po +source_lang = en +type = PO +minimum_perc = 0 +resource_name = library--readline + +[o:python-doc:p:python-39:r:library--reprlib] +file_filter = trans//library--reprlib.po +trans.zh_CN = library/reprlib.po +source_file = trans/en/library--reprlib.po +source_lang = en +type = PO +minimum_perc = 0 +resource_name = library--reprlib + +[o:python-doc:p:python-39:r:library--resource] +file_filter = trans//library--resource.po +trans.zh_CN = library/resource.po +source_file = trans/en/library--resource.po +source_lang = en +type = PO +minimum_perc = 0 +resource_name = library--resource + +[o:python-doc:p:python-39:r:library--rlcompleter] +file_filter = trans//library--rlcompleter.po +trans.zh_CN = library/rlcompleter.po +source_file = trans/en/library--rlcompleter.po +source_lang = en +type = PO +minimum_perc = 0 +resource_name = library--rlcompleter + +[o:python-doc:p:python-39:r:library--runpy] +file_filter = trans//library--runpy.po +trans.zh_CN = library/runpy.po +source_file = trans/en/library--runpy.po +source_lang = en +type = PO +minimum_perc = 0 +resource_name = library--runpy + +[o:python-doc:p:python-39:r:library--sched] +file_filter = trans//library--sched.po +trans.zh_CN = library/sched.po +source_file = trans/en/library--sched.po +source_lang = en +type = PO +minimum_perc = 0 +resource_name = library--sched + +[o:python-doc:p:python-39:r:library--secrets] +file_filter = trans//library--secrets.po +trans.zh_CN = library/secrets.po +source_file = trans/en/library--secrets.po +source_lang = en +type = PO +minimum_perc = 0 +resource_name = library--secrets + +[o:python-doc:p:python-39:r:library--security_warnings] +file_filter = trans//library--security_warnings.po +trans.zh_CN = library/security_warnings.po +source_file = trans/en/library--security_warnings.po +source_lang = en +type = PO +minimum_perc = 0 +resource_name = library--security_warnings + +[o:python-doc:p:python-39:r:library--select] +file_filter = trans//library--select.po +trans.zh_CN = library/select.po +source_file = trans/en/library--select.po +source_lang = en +type = PO +minimum_perc = 0 +resource_name = library--select + +[o:python-doc:p:python-39:r:library--selectors] +file_filter = trans//library--selectors.po +trans.zh_CN = library/selectors.po +source_file = trans/en/library--selectors.po +source_lang = en +type = PO +minimum_perc = 0 +resource_name = library--selectors + +[o:python-doc:p:python-39:r:library--shelve] +file_filter = trans//library--shelve.po +trans.zh_CN = library/shelve.po +source_file = trans/en/library--shelve.po +source_lang = en +type = PO +minimum_perc = 0 +resource_name = library--shelve + +[o:python-doc:p:python-39:r:library--shlex] +file_filter = trans//library--shlex.po +trans.zh_CN = library/shlex.po +source_file = trans/en/library--shlex.po +source_lang = en +type = PO +minimum_perc = 0 +resource_name = library--shlex + +[o:python-doc:p:python-39:r:library--shutil] +file_filter = trans//library--shutil.po +trans.zh_CN = library/shutil.po +source_file = trans/en/library--shutil.po +source_lang = en +type = PO +minimum_perc = 0 +resource_name = library--shutil + +[o:python-doc:p:python-39:r:library--signal] +file_filter = trans//library--signal.po +trans.zh_CN = library/signal.po +source_file = trans/en/library--signal.po +source_lang = en +type = PO +minimum_perc = 0 +resource_name = library--signal + +[o:python-doc:p:python-39:r:library--site] +file_filter = trans//library--site.po +trans.zh_CN = library/site.po +source_file = trans/en/library--site.po +source_lang = en +type = PO +minimum_perc = 0 +resource_name = library--site + +[o:python-doc:p:python-39:r:library--smtpd] +file_filter = trans//library--smtpd.po +trans.zh_CN = library/smtpd.po +source_file = trans/en/library--smtpd.po +source_lang = en +type = PO +minimum_perc = 0 +resource_name = library--smtpd + +[o:python-doc:p:python-39:r:library--smtplib] +file_filter = trans//library--smtplib.po +trans.zh_CN = library/smtplib.po +source_file = trans/en/library--smtplib.po +source_lang = en +type = PO +minimum_perc = 0 +resource_name = library--smtplib + +[o:python-doc:p:python-39:r:library--sndhdr] +file_filter = trans//library--sndhdr.po +trans.zh_CN = library/sndhdr.po +source_file = trans/en/library--sndhdr.po +source_lang = en +type = PO +minimum_perc = 0 +resource_name = library--sndhdr + +[o:python-doc:p:python-39:r:library--socket] +file_filter = trans//library--socket.po +trans.zh_CN = library/socket.po +source_file = trans/en/library--socket.po +source_lang = en +type = PO +minimum_perc = 0 +resource_name = library--socket + +[o:python-doc:p:python-39:r:library--socketserver] +file_filter = trans//library--socketserver.po +trans.zh_CN = library/socketserver.po +source_file = trans/en/library--socketserver.po +source_lang = en +type = PO +minimum_perc = 0 +resource_name = library--socketserver + +[o:python-doc:p:python-39:r:library--spwd] +file_filter = trans//library--spwd.po +trans.zh_CN = library/spwd.po +source_file = trans/en/library--spwd.po +source_lang = en +type = PO +minimum_perc = 0 +resource_name = library--spwd + +[o:python-doc:p:python-39:r:library--sqlite3] +file_filter = trans//library--sqlite3.po +trans.zh_CN = library/sqlite3.po +source_file = trans/en/library--sqlite3.po +source_lang = en +type = PO +minimum_perc = 0 +resource_name = library--sqlite3 + +[o:python-doc:p:python-39:r:library--ssl] +file_filter = trans//library--ssl.po +trans.zh_CN = library/ssl.po +source_file = trans/en/library--ssl.po +source_lang = en +type = PO +minimum_perc = 0 +resource_name = library--ssl + +[o:python-doc:p:python-39:r:library--stat] +file_filter = trans//library--stat.po +trans.zh_CN = library/stat.po +source_file = trans/en/library--stat.po +source_lang = en +type = PO +minimum_perc = 0 +resource_name = library--stat + +[o:python-doc:p:python-39:r:library--statistics] +file_filter = trans//library--statistics.po +trans.zh_CN = library/statistics.po +source_file = trans/en/library--statistics.po +source_lang = en +type = PO +minimum_perc = 0 +resource_name = library--statistics + +[o:python-doc:p:python-39:r:library--stdtypes] +file_filter = trans//library--stdtypes.po +trans.zh_CN = library/stdtypes.po +source_file = trans/en/library--stdtypes.po +source_lang = en +type = PO +minimum_perc = 0 +resource_name = library--stdtypes + +[o:python-doc:p:python-39:r:library--string] +file_filter = trans//library--string.po +trans.zh_CN = library/string.po +source_file = trans/en/library--string.po +source_lang = en +type = PO +minimum_perc = 0 +resource_name = library--string + +[o:python-doc:p:python-39:r:library--stringprep] +file_filter = trans//library--stringprep.po +trans.zh_CN = library/stringprep.po +source_file = trans/en/library--stringprep.po +source_lang = en +type = PO +minimum_perc = 0 +resource_name = library--stringprep + +[o:python-doc:p:python-39:r:library--struct] +file_filter = trans//library--struct.po +trans.zh_CN = library/struct.po +source_file = trans/en/library--struct.po +source_lang = en +type = PO +minimum_perc = 0 +resource_name = library--struct + +[o:python-doc:p:python-39:r:library--subprocess] +file_filter = trans//library--subprocess.po +trans.zh_CN = library/subprocess.po +source_file = trans/en/library--subprocess.po +source_lang = en +type = PO +minimum_perc = 0 +resource_name = library--subprocess + +[o:python-doc:p:python-39:r:library--sunau] +file_filter = trans//library--sunau.po +trans.zh_CN = library/sunau.po +source_file = trans/en/library--sunau.po +source_lang = en +type = PO +minimum_perc = 0 +resource_name = library--sunau + +[o:python-doc:p:python-39:r:library--superseded] +file_filter = trans//library--superseded.po +trans.zh_CN = library/superseded.po +source_file = trans/en/library--superseded.po +source_lang = en +type = PO +minimum_perc = 0 +resource_name = library--superseded + +[o:python-doc:p:python-39:r:library--symbol] +file_filter = trans//library--symbol.po +trans.zh_CN = library/symbol.po +source_file = trans/en/library--symbol.po +source_lang = en +type = PO +minimum_perc = 0 +resource_name = library--symbol + +[o:python-doc:p:python-39:r:library--symtable] +file_filter = trans//library--symtable.po +trans.zh_CN = library/symtable.po +source_file = trans/en/library--symtable.po +source_lang = en +type = PO +minimum_perc = 0 +resource_name = library--symtable + +[o:python-doc:p:python-39:r:library--sys] +file_filter = trans//library--sys.po +trans.zh_CN = library/sys.po +source_file = trans/en/library--sys.po +source_lang = en +type = PO +minimum_perc = 0 +resource_name = library--sys + +[o:python-doc:p:python-39:r:library--sysconfig] +file_filter = trans//library--sysconfig.po +trans.zh_CN = library/sysconfig.po +source_file = trans/en/library--sysconfig.po +source_lang = en +type = PO +minimum_perc = 0 +resource_name = library--sysconfig + +[o:python-doc:p:python-39:r:library--syslog] +file_filter = trans//library--syslog.po +trans.zh_CN = library/syslog.po +source_file = trans/en/library--syslog.po +source_lang = en +type = PO +minimum_perc = 0 +resource_name = library--syslog + +[o:python-doc:p:python-39:r:library--tabnanny] +file_filter = trans//library--tabnanny.po +trans.zh_CN = library/tabnanny.po +source_file = trans/en/library--tabnanny.po +source_lang = en +type = PO +minimum_perc = 0 +resource_name = library--tabnanny + +[o:python-doc:p:python-39:r:library--tarfile] +file_filter = trans//library--tarfile.po +trans.zh_CN = library/tarfile.po +source_file = trans/en/library--tarfile.po +source_lang = en +type = PO +minimum_perc = 0 +resource_name = library--tarfile + +[o:python-doc:p:python-39:r:library--telnetlib] +file_filter = trans//library--telnetlib.po +trans.zh_CN = library/telnetlib.po +source_file = trans/en/library--telnetlib.po +source_lang = en +type = PO +minimum_perc = 0 +resource_name = library--telnetlib + +[o:python-doc:p:python-39:r:library--tempfile] +file_filter = trans//library--tempfile.po +trans.zh_CN = library/tempfile.po +source_file = trans/en/library--tempfile.po +source_lang = en +type = PO +minimum_perc = 0 +resource_name = library--tempfile + +[o:python-doc:p:python-39:r:library--termios] +file_filter = trans//library--termios.po +trans.zh_CN = library/termios.po +source_file = trans/en/library--termios.po +source_lang = en +type = PO +minimum_perc = 0 +resource_name = library--termios + +[o:python-doc:p:python-39:r:library--test] +file_filter = trans//library--test.po +trans.zh_CN = library/test.po +source_file = trans/en/library--test.po +source_lang = en +type = PO +minimum_perc = 0 +resource_name = library--test + +[o:python-doc:p:python-39:r:library--text] +file_filter = trans//library--text.po +trans.zh_CN = library/text.po +source_file = trans/en/library--text.po +source_lang = en +type = PO +minimum_perc = 0 +resource_name = library--text + +[o:python-doc:p:python-39:r:library--textwrap] +file_filter = trans//library--textwrap.po +trans.zh_CN = library/textwrap.po +source_file = trans/en/library--textwrap.po +source_lang = en +type = PO +minimum_perc = 0 +resource_name = library--textwrap + +[o:python-doc:p:python-39:r:library--_thread] +file_filter = trans//library--_thread.po +trans.zh_CN = library/_thread.po +source_file = trans/en/library--_thread.po +source_lang = en +type = PO +minimum_perc = 0 +resource_name = library--_thread + +[o:python-doc:p:python-39:r:library--threading] +file_filter = trans//library--threading.po +trans.zh_CN = library/threading.po +source_file = trans/en/library--threading.po +source_lang = en +type = PO +minimum_perc = 0 +resource_name = library--threading + +[o:python-doc:p:python-39:r:library--time] +file_filter = trans//library--time.po +trans.zh_CN = library/time.po +source_file = trans/en/library--time.po +source_lang = en +type = PO +minimum_perc = 0 +resource_name = library--time + +[o:python-doc:p:python-39:r:library--timeit] +file_filter = trans//library--timeit.po +trans.zh_CN = library/timeit.po +source_file = trans/en/library--timeit.po +source_lang = en +type = PO +minimum_perc = 0 +resource_name = library--timeit + +[o:python-doc:p:python-39:r:library--tk] +file_filter = trans//library--tk.po +trans.zh_CN = library/tk.po +source_file = trans/en/library--tk.po +source_lang = en +type = PO +minimum_perc = 0 +resource_name = library--tk + +[o:python-doc:p:python-39:r:library--tkinter] +file_filter = trans//library--tkinter.po +trans.zh_CN = library/tkinter.po +source_file = trans/en/library--tkinter.po +source_lang = en +type = PO +minimum_perc = 0 +resource_name = library--tkinter + +[o:python-doc:p:python-39:r:library--tkinter_colorchooser] +file_filter = trans//library--tkinter_colorchooser.po +trans.zh_CN = library/tkinter.colorchooser.po +source_file = trans/en/library--tkinter_colorchooser.po +source_lang = en +type = PO +minimum_perc = 0 +resource_name = library--tkinter_colorchooser + +[o:python-doc:p:python-39:r:library--tkinter_dnd] +file_filter = trans//library--tkinter_dnd.po +trans.zh_CN = library/tkinter.dnd.po +source_file = trans/en/library--tkinter_dnd.po +source_lang = en +type = PO +minimum_perc = 0 +resource_name = library--tkinter_dnd + +[o:python-doc:p:python-39:r:library--tkinter_font] +file_filter = trans//library--tkinter_font.po +trans.zh_CN = library/tkinter.font.po +source_file = trans/en/library--tkinter_font.po +source_lang = en +type = PO +minimum_perc = 0 +resource_name = library--tkinter_font + +[o:python-doc:p:python-39:r:library--tkinter_messagebox] +file_filter = trans//library--tkinter_messagebox.po +trans.zh_CN = library/tkinter.messagebox.po +source_file = trans/en/library--tkinter_messagebox.po +source_lang = en +type = PO +minimum_perc = 0 +resource_name = library--tkinter_messagebox + +[o:python-doc:p:python-39:r:library--tkinter_scrolledtext] +file_filter = trans//library--tkinter_scrolledtext.po +trans.zh_CN = library/tkinter.scrolledtext.po +source_file = trans/en/library--tkinter_scrolledtext.po +source_lang = en +type = PO +minimum_perc = 0 +resource_name = library--tkinter_scrolledtext + +[o:python-doc:p:python-39:r:library--tkinter_tix] +file_filter = trans//library--tkinter_tix.po +trans.zh_CN = library/tkinter.tix.po +source_file = trans/en/library--tkinter_tix.po +source_lang = en +type = PO +minimum_perc = 0 +resource_name = library--tkinter_tix + +[o:python-doc:p:python-39:r:library--tkinter_ttk] +file_filter = trans//library--tkinter_ttk.po +trans.zh_CN = library/tkinter.ttk.po +source_file = trans/en/library--tkinter_ttk.po +source_lang = en +type = PO +minimum_perc = 0 +resource_name = library--tkinter_ttk + +[o:python-doc:p:python-39:r:library--token] +file_filter = trans//library--token.po +trans.zh_CN = library/token.po +source_file = trans/en/library--token.po +source_lang = en +type = PO +minimum_perc = 0 +resource_name = library--token + +[o:python-doc:p:python-39:r:library--tokenize] +file_filter = trans//library--tokenize.po +trans.zh_CN = library/tokenize.po +source_file = trans/en/library--tokenize.po +source_lang = en +type = PO +minimum_perc = 0 +resource_name = library--tokenize + +[o:python-doc:p:python-39:r:library--trace] +file_filter = trans//library--trace.po +trans.zh_CN = library/trace.po +source_file = trans/en/library--trace.po +source_lang = en +type = PO +minimum_perc = 0 +resource_name = library--trace + +[o:python-doc:p:python-39:r:library--traceback] +file_filter = trans//library--traceback.po +trans.zh_CN = library/traceback.po +source_file = trans/en/library--traceback.po +source_lang = en +type = PO +minimum_perc = 0 +resource_name = library--traceback + +[o:python-doc:p:python-39:r:library--tracemalloc] +file_filter = trans//library--tracemalloc.po +trans.zh_CN = library/tracemalloc.po +source_file = trans/en/library--tracemalloc.po +source_lang = en +type = PO +minimum_perc = 0 +resource_name = library--tracemalloc + +[o:python-doc:p:python-39:r:library--tty] +file_filter = trans//library--tty.po +trans.zh_CN = library/tty.po +source_file = trans/en/library--tty.po +source_lang = en +type = PO +minimum_perc = 0 +resource_name = library--tty + +[o:python-doc:p:python-39:r:library--turtle] +file_filter = trans//library--turtle.po +trans.zh_CN = library/turtle.po +source_file = trans/en/library--turtle.po +source_lang = en +type = PO +minimum_perc = 0 +resource_name = library--turtle + +[o:python-doc:p:python-39:r:library--types] +file_filter = trans//library--types.po +trans.zh_CN = library/types.po +source_file = trans/en/library--types.po +source_lang = en +type = PO +minimum_perc = 0 +resource_name = library--types + +[o:python-doc:p:python-39:r:library--typing] +file_filter = trans//library--typing.po +trans.zh_CN = library/typing.po +source_file = trans/en/library--typing.po +source_lang = en +type = PO +minimum_perc = 0 +resource_name = library--typing + +[o:python-doc:p:python-39:r:library--unicodedata] +file_filter = trans//library--unicodedata.po +trans.zh_CN = library/unicodedata.po +source_file = trans/en/library--unicodedata.po +source_lang = en +type = PO +minimum_perc = 0 +resource_name = library--unicodedata + +[o:python-doc:p:python-39:r:library--unittest] +file_filter = trans//library--unittest.po +trans.zh_CN = library/unittest.po +source_file = trans/en/library--unittest.po +source_lang = en +type = PO +minimum_perc = 0 +resource_name = library--unittest + +[o:python-doc:p:python-39:r:library--unittest_mock] +file_filter = trans//library--unittest_mock.po +trans.zh_CN = library/unittest.mock.po +source_file = trans/en/library--unittest_mock.po +source_lang = en +type = PO +minimum_perc = 0 +resource_name = library--unittest_mock + +[o:python-doc:p:python-39:r:library--unittest_mock-examples] +file_filter = trans//library--unittest_mock-examples.po +trans.zh_CN = library/unittest.mock-examples.po +source_file = trans/en/library--unittest_mock-examples.po +source_lang = en +type = PO +minimum_perc = 0 +resource_name = library--unittest_mock-examples + +[o:python-doc:p:python-39:r:library--unix] +file_filter = trans//library--unix.po +trans.zh_CN = library/unix.po +source_file = trans/en/library--unix.po +source_lang = en +type = PO +minimum_perc = 0 +resource_name = library--unix + +[o:python-doc:p:python-39:r:library--urllib] +file_filter = trans//library--urllib.po +trans.zh_CN = library/urllib.po +source_file = trans/en/library--urllib.po +source_lang = en +type = PO +minimum_perc = 0 +resource_name = library--urllib + +[o:python-doc:p:python-39:r:library--urllib_error] +file_filter = trans//library--urllib_error.po +trans.zh_CN = library/urllib.error.po +source_file = trans/en/library--urllib_error.po +source_lang = en +type = PO +minimum_perc = 0 +resource_name = library--urllib_error + +[o:python-doc:p:python-39:r:library--urllib_parse] +file_filter = trans//library--urllib_parse.po +trans.zh_CN = library/urllib.parse.po +source_file = trans/en/library--urllib_parse.po +source_lang = en +type = PO +minimum_perc = 0 +resource_name = library--urllib_parse + +[o:python-doc:p:python-39:r:library--urllib_request] +file_filter = trans//library--urllib_request.po +trans.zh_CN = library/urllib.request.po +source_file = trans/en/library--urllib_request.po +source_lang = en +type = PO +minimum_perc = 0 +resource_name = library--urllib_request + +[o:python-doc:p:python-39:r:library--urllib_robotparser] +file_filter = trans//library--urllib_robotparser.po +trans.zh_CN = library/urllib.robotparser.po +source_file = trans/en/library--urllib_robotparser.po +source_lang = en +type = PO +minimum_perc = 0 +resource_name = library--urllib_robotparser + +[o:python-doc:p:python-39:r:library--uu] +file_filter = trans//library--uu.po +trans.zh_CN = library/uu.po +source_file = trans/en/library--uu.po +source_lang = en +type = PO +minimum_perc = 0 +resource_name = library--uu + +[o:python-doc:p:python-39:r:library--uuid] +file_filter = trans//library--uuid.po +trans.zh_CN = library/uuid.po +source_file = trans/en/library--uuid.po +source_lang = en +type = PO +minimum_perc = 0 +resource_name = library--uuid + +[o:python-doc:p:python-39:r:library--venv] +file_filter = trans//library--venv.po +trans.zh_CN = library/venv.po +source_file = trans/en/library--venv.po +source_lang = en +type = PO +minimum_perc = 0 +resource_name = library--venv + +[o:python-doc:p:python-39:r:library--warnings] +file_filter = trans//library--warnings.po +trans.zh_CN = library/warnings.po +source_file = trans/en/library--warnings.po +source_lang = en +type = PO +minimum_perc = 0 +resource_name = library--warnings + +[o:python-doc:p:python-39:r:library--wave] +file_filter = trans//library--wave.po +trans.zh_CN = library/wave.po +source_file = trans/en/library--wave.po +source_lang = en +type = PO +minimum_perc = 0 +resource_name = library--wave + +[o:python-doc:p:python-39:r:library--weakref] +file_filter = trans//library--weakref.po +trans.zh_CN = library/weakref.po +source_file = trans/en/library--weakref.po +source_lang = en +type = PO +minimum_perc = 0 +resource_name = library--weakref + +[o:python-doc:p:python-39:r:library--webbrowser] +file_filter = trans//library--webbrowser.po +trans.zh_CN = library/webbrowser.po +source_file = trans/en/library--webbrowser.po +source_lang = en +type = PO +minimum_perc = 0 +resource_name = library--webbrowser + +[o:python-doc:p:python-39:r:library--windows] +file_filter = trans//library--windows.po +trans.zh_CN = library/windows.po +source_file = trans/en/library--windows.po +source_lang = en +type = PO +minimum_perc = 0 +resource_name = library--windows + +[o:python-doc:p:python-39:r:library--winreg] +file_filter = trans//library--winreg.po +trans.zh_CN = library/winreg.po +source_file = trans/en/library--winreg.po +source_lang = en +type = PO +minimum_perc = 0 +resource_name = library--winreg + +[o:python-doc:p:python-39:r:library--winsound] +file_filter = trans//library--winsound.po +trans.zh_CN = library/winsound.po +source_file = trans/en/library--winsound.po +source_lang = en +type = PO +minimum_perc = 0 +resource_name = library--winsound + +[o:python-doc:p:python-39:r:library--wsgiref] +file_filter = trans//library--wsgiref.po +trans.zh_CN = library/wsgiref.po +source_file = trans/en/library--wsgiref.po +source_lang = en +type = PO +minimum_perc = 0 +resource_name = library--wsgiref + +[o:python-doc:p:python-39:r:library--xdrlib] +file_filter = trans//library--xdrlib.po +trans.zh_CN = library/xdrlib.po +source_file = trans/en/library--xdrlib.po +source_lang = en +type = PO +minimum_perc = 0 +resource_name = library--xdrlib + +[o:python-doc:p:python-39:r:library--xml] +file_filter = trans//library--xml.po +trans.zh_CN = library/xml.po +source_file = trans/en/library--xml.po +source_lang = en +type = PO +minimum_perc = 0 +resource_name = library--xml + +[o:python-doc:p:python-39:r:library--xml_dom] +file_filter = trans//library--xml_dom.po +trans.zh_CN = library/xml.dom.po +source_file = trans/en/library--xml_dom.po +source_lang = en +type = PO +minimum_perc = 0 +resource_name = library--xml_dom + +[o:python-doc:p:python-39:r:library--xml_dom_minidom] +file_filter = trans//library--xml_dom_minidom.po +trans.zh_CN = library/xml.dom.minidom.po +source_file = trans/en/library--xml_dom_minidom.po +source_lang = en +type = PO +minimum_perc = 0 +resource_name = library--xml_dom_minidom + +[o:python-doc:p:python-39:r:library--xml_dom_pulldom] +file_filter = trans//library--xml_dom_pulldom.po +trans.zh_CN = library/xml.dom.pulldom.po +source_file = trans/en/library--xml_dom_pulldom.po +source_lang = en +type = PO +minimum_perc = 0 +resource_name = library--xml_dom_pulldom + +[o:python-doc:p:python-39:r:library--xml_etree_elementtree] +file_filter = trans//library--xml_etree_elementtree.po +trans.zh_CN = library/xml.etree.elementtree.po +source_file = trans/en/library--xml_etree_elementtree.po +source_lang = en +type = PO +minimum_perc = 0 +resource_name = library--xml_etree_elementtree + +[o:python-doc:p:python-39:r:library--xmlrpc] +file_filter = trans//library--xmlrpc.po +trans.zh_CN = library/xmlrpc.po +source_file = trans/en/library--xmlrpc.po +source_lang = en +type = PO +minimum_perc = 0 +resource_name = library--xmlrpc + +[o:python-doc:p:python-39:r:library--xmlrpc_client] +file_filter = trans//library--xmlrpc_client.po +trans.zh_CN = library/xmlrpc.client.po +source_file = trans/en/library--xmlrpc_client.po +source_lang = en +type = PO +minimum_perc = 0 +resource_name = library--xmlrpc_client + +[o:python-doc:p:python-39:r:library--xmlrpc_server] +file_filter = trans//library--xmlrpc_server.po +trans.zh_CN = library/xmlrpc.server.po +source_file = trans/en/library--xmlrpc_server.po +source_lang = en +type = PO +minimum_perc = 0 +resource_name = library--xmlrpc_server + +[o:python-doc:p:python-39:r:library--xml_sax] +file_filter = trans//library--xml_sax.po +trans.zh_CN = library/xml.sax.po +source_file = trans/en/library--xml_sax.po +source_lang = en +type = PO +minimum_perc = 0 +resource_name = library--xml_sax + +[o:python-doc:p:python-39:r:library--xml_sax_handler] +file_filter = trans//library--xml_sax_handler.po +trans.zh_CN = library/xml.sax.handler.po +source_file = trans/en/library--xml_sax_handler.po +source_lang = en +type = PO +minimum_perc = 0 +resource_name = library--xml_sax_handler + +[o:python-doc:p:python-39:r:library--xml_sax_reader] +file_filter = trans//library--xml_sax_reader.po +trans.zh_CN = library/xml.sax.reader.po +source_file = trans/en/library--xml_sax_reader.po +source_lang = en +type = PO +minimum_perc = 0 +resource_name = library--xml_sax_reader + +[o:python-doc:p:python-39:r:library--xml_sax_utils] +file_filter = trans//library--xml_sax_utils.po +trans.zh_CN = library/xml.sax.utils.po +source_file = trans/en/library--xml_sax_utils.po +source_lang = en +type = PO +minimum_perc = 0 +resource_name = library--xml_sax_utils + +[o:python-doc:p:python-39:r:library--zipapp] +file_filter = trans//library--zipapp.po +trans.zh_CN = library/zipapp.po +source_file = trans/en/library--zipapp.po +source_lang = en +type = PO +minimum_perc = 0 +resource_name = library--zipapp + +[o:python-doc:p:python-39:r:library--zipfile] +file_filter = trans//library--zipfile.po +trans.zh_CN = library/zipfile.po +source_file = trans/en/library--zipfile.po +source_lang = en +type = PO +minimum_perc = 0 +resource_name = library--zipfile + +[o:python-doc:p:python-39:r:library--zipimport] +file_filter = trans//library--zipimport.po +trans.zh_CN = library/zipimport.po +source_file = trans/en/library--zipimport.po +source_lang = en +type = PO +minimum_perc = 0 +resource_name = library--zipimport + +[o:python-doc:p:python-39:r:library--zlib] +file_filter = trans//library--zlib.po +trans.zh_CN = library/zlib.po +source_file = trans/en/library--zlib.po +source_lang = en +type = PO +minimum_perc = 0 +resource_name = library--zlib + +[o:python-doc:p:python-39:r:library--zoneinfo] +file_filter = trans//library--zoneinfo.po +trans.zh_CN = library/zoneinfo.po +source_file = trans/en/library--zoneinfo.po +source_lang = en +type = PO +minimum_perc = 0 +resource_name = library--zoneinfo + +[o:python-doc:p:python-39:r:license] +file_filter = trans//license.po +trans.zh_CN = license.po +source_file = trans/en/license.po +source_lang = en +type = PO +minimum_perc = 0 +resource_name = license + +[o:python-doc:p:python-39:r:reference--compound_stmts] +file_filter = trans//reference--compound_stmts.po +trans.zh_CN = reference/compound_stmts.po +source_file = trans/en/reference--compound_stmts.po +source_lang = en +type = PO +minimum_perc = 0 +resource_name = reference--compound_stmts + +[o:python-doc:p:python-39:r:reference--datamodel] +file_filter = trans//reference--datamodel.po +trans.zh_CN = reference/datamodel.po +source_file = trans/en/reference--datamodel.po +source_lang = en +type = PO +minimum_perc = 0 +resource_name = reference--datamodel + +[o:python-doc:p:python-39:r:reference--executionmodel] +file_filter = trans//reference--executionmodel.po +trans.zh_CN = reference/executionmodel.po +source_file = trans/en/reference--executionmodel.po +source_lang = en +type = PO +minimum_perc = 0 +resource_name = reference--executionmodel + +[o:python-doc:p:python-39:r:reference--expressions] +file_filter = trans//reference--expressions.po +trans.zh_CN = reference/expressions.po +source_file = trans/en/reference--expressions.po +source_lang = en +type = PO +minimum_perc = 0 +resource_name = reference--expressions + +[o:python-doc:p:python-39:r:reference--grammar] +file_filter = trans//reference--grammar.po +trans.zh_CN = reference/grammar.po +source_file = trans/en/reference--grammar.po +source_lang = en +type = PO +minimum_perc = 0 +resource_name = reference--grammar + +[o:python-doc:p:python-39:r:reference--import] +file_filter = trans//reference--import.po +trans.zh_CN = reference/import.po +source_file = trans/en/reference--import.po +source_lang = en +type = PO +minimum_perc = 0 +resource_name = reference--import + +[o:python-doc:p:python-39:r:reference--index] +file_filter = trans//reference--index.po +trans.zh_CN = reference/index.po +source_file = trans/en/reference--index.po +source_lang = en +type = PO +minimum_perc = 0 +resource_name = reference--index + +[o:python-doc:p:python-39:r:reference--introduction] +file_filter = trans//reference--introduction.po +trans.zh_CN = reference/introduction.po +source_file = trans/en/reference--introduction.po +source_lang = en +type = PO +minimum_perc = 0 +resource_name = reference--introduction + +[o:python-doc:p:python-39:r:reference--lexical_analysis] +file_filter = trans//reference--lexical_analysis.po +trans.zh_CN = reference/lexical_analysis.po +source_file = trans/en/reference--lexical_analysis.po +source_lang = en +type = PO +minimum_perc = 0 +resource_name = reference--lexical_analysis + +[o:python-doc:p:python-39:r:reference--simple_stmts] +file_filter = trans//reference--simple_stmts.po +trans.zh_CN = reference/simple_stmts.po +source_file = trans/en/reference--simple_stmts.po +source_lang = en +type = PO +minimum_perc = 0 +resource_name = reference--simple_stmts + +[o:python-doc:p:python-39:r:reference--toplevel_components] +file_filter = trans//reference--toplevel_components.po +trans.zh_CN = reference/toplevel_components.po +source_file = trans/en/reference--toplevel_components.po +source_lang = en +type = PO +minimum_perc = 0 +resource_name = reference--toplevel_components + +[o:python-doc:p:python-39:r:sphinx] +file_filter = trans//sphinx.po +trans.zh_CN = sphinx.po +source_file = trans/en/sphinx.po +source_lang = en +type = PO +minimum_perc = 0 +resource_name = sphinx + +[o:python-doc:p:python-39:r:tutorial--appendix] +file_filter = trans//tutorial--appendix.po +trans.zh_CN = tutorial/appendix.po +source_file = trans/en/tutorial--appendix.po +source_lang = en +type = PO +minimum_perc = 0 +resource_name = tutorial--appendix + +[o:python-doc:p:python-39:r:tutorial--appetite] +file_filter = trans//tutorial--appetite.po +trans.zh_CN = tutorial/appetite.po +source_file = trans/en/tutorial--appetite.po +source_lang = en +type = PO +minimum_perc = 0 +resource_name = tutorial--appetite + +[o:python-doc:p:python-39:r:tutorial--classes] +file_filter = trans//tutorial--classes.po +trans.zh_CN = tutorial/classes.po +source_file = trans/en/tutorial--classes.po +source_lang = en +type = PO +minimum_perc = 0 +resource_name = tutorial--classes + +[o:python-doc:p:python-39:r:tutorial--controlflow] +file_filter = trans//tutorial--controlflow.po +trans.zh_CN = tutorial/controlflow.po +source_file = trans/en/tutorial--controlflow.po +source_lang = en +type = PO +minimum_perc = 0 +resource_name = tutorial--controlflow + +[o:python-doc:p:python-39:r:tutorial--datastructures] +file_filter = trans//tutorial--datastructures.po +trans.zh_CN = tutorial/datastructures.po +source_file = trans/en/tutorial--datastructures.po +source_lang = en +type = PO +minimum_perc = 0 +resource_name = tutorial--datastructures + +[o:python-doc:p:python-39:r:tutorial--errors] +file_filter = trans//tutorial--errors.po +trans.zh_CN = tutorial/errors.po +source_file = trans/en/tutorial--errors.po +source_lang = en +type = PO +minimum_perc = 0 +resource_name = tutorial--errors + +[o:python-doc:p:python-39:r:tutorial--floatingpoint] +file_filter = trans//tutorial--floatingpoint.po +trans.zh_CN = tutorial/floatingpoint.po +source_file = trans/en/tutorial--floatingpoint.po +source_lang = en +type = PO +minimum_perc = 0 +resource_name = tutorial--floatingpoint + +[o:python-doc:p:python-39:r:tutorial--index] +file_filter = trans//tutorial--index.po +trans.zh_CN = tutorial/index.po +source_file = trans/en/tutorial--index.po +source_lang = en +type = PO +minimum_perc = 0 +resource_name = tutorial--index + +[o:python-doc:p:python-39:r:tutorial--inputoutput] +file_filter = trans//tutorial--inputoutput.po +trans.zh_CN = tutorial/inputoutput.po +source_file = trans/en/tutorial--inputoutput.po +source_lang = en +type = PO +minimum_perc = 0 +resource_name = tutorial--inputoutput + +[o:python-doc:p:python-39:r:tutorial--interactive] +file_filter = trans//tutorial--interactive.po +trans.zh_CN = tutorial/interactive.po +source_file = trans/en/tutorial--interactive.po +source_lang = en +type = PO +minimum_perc = 0 +resource_name = tutorial--interactive + +[o:python-doc:p:python-39:r:tutorial--interpreter] +file_filter = trans//tutorial--interpreter.po +trans.zh_CN = tutorial/interpreter.po +source_file = trans/en/tutorial--interpreter.po +source_lang = en +type = PO +minimum_perc = 0 +resource_name = tutorial--interpreter + +[o:python-doc:p:python-39:r:tutorial--introduction] +file_filter = trans//tutorial--introduction.po +trans.zh_CN = tutorial/introduction.po +source_file = trans/en/tutorial--introduction.po +source_lang = en +type = PO +minimum_perc = 0 +resource_name = tutorial--introduction + +[o:python-doc:p:python-39:r:tutorial--modules] +file_filter = trans//tutorial--modules.po +trans.zh_CN = tutorial/modules.po +source_file = trans/en/tutorial--modules.po +source_lang = en +type = PO +minimum_perc = 0 +resource_name = tutorial--modules + +[o:python-doc:p:python-39:r:tutorial--stdlib] +file_filter = trans//tutorial--stdlib.po +trans.zh_CN = tutorial/stdlib.po +source_file = trans/en/tutorial--stdlib.po +source_lang = en +type = PO +minimum_perc = 0 +resource_name = tutorial--stdlib + +[o:python-doc:p:python-39:r:tutorial--stdlib2] +file_filter = trans//tutorial--stdlib2.po +trans.zh_CN = tutorial/stdlib2.po +source_file = trans/en/tutorial--stdlib2.po +source_lang = en +type = PO +minimum_perc = 0 +resource_name = tutorial--stdlib2 + +[o:python-doc:p:python-39:r:tutorial--venv] +file_filter = trans//tutorial--venv.po +trans.zh_CN = tutorial/venv.po +source_file = trans/en/tutorial--venv.po +source_lang = en +type = PO +minimum_perc = 0 +resource_name = tutorial--venv + +[o:python-doc:p:python-39:r:tutorial--whatnow] +file_filter = trans//tutorial--whatnow.po +trans.zh_CN = tutorial/whatnow.po +source_file = trans/en/tutorial--whatnow.po +source_lang = en +type = PO +minimum_perc = 0 +resource_name = tutorial--whatnow + +[o:python-doc:p:python-39:r:using--cmdline] +file_filter = trans//using--cmdline.po +trans.zh_CN = using/cmdline.po +source_file = trans/en/using--cmdline.po +source_lang = en +type = PO +minimum_perc = 0 +resource_name = using--cmdline + +[o:python-doc:p:python-39:r:using--editors] +file_filter = trans//using--editors.po +trans.zh_CN = using/editors.po +source_file = trans/en/using--editors.po +source_lang = en +type = PO +minimum_perc = 0 +resource_name = using--editors + +[o:python-doc:p:python-39:r:using--index] +file_filter = trans//using--index.po +trans.zh_CN = using/index.po +source_file = trans/en/using--index.po +source_lang = en +type = PO +minimum_perc = 0 +resource_name = using--index + +[o:python-doc:p:python-39:r:using--mac] +file_filter = trans//using--mac.po +trans.zh_CN = using/mac.po +source_file = trans/en/using--mac.po +source_lang = en +type = PO +minimum_perc = 0 +resource_name = using--mac + +[o:python-doc:p:python-39:r:using--unix] +file_filter = trans//using--unix.po +trans.zh_CN = using/unix.po +source_file = trans/en/using--unix.po +source_lang = en +type = PO +minimum_perc = 0 +resource_name = using--unix + +[o:python-doc:p:python-39:r:using--windows] +file_filter = trans//using--windows.po +trans.zh_CN = using/windows.po +source_file = trans/en/using--windows.po +source_lang = en +type = PO +minimum_perc = 0 +resource_name = using--windows + +[o:python-doc:p:python-39:r:whatsnew--2_0] +file_filter = trans//whatsnew--2_0.po +trans.zh_CN = whatsnew/2.0.po +source_file = trans/en/whatsnew--2_0.po +source_lang = en +type = PO +minimum_perc = 0 +resource_name = whatsnew--2_0 + +[o:python-doc:p:python-39:r:whatsnew--2_1] +file_filter = trans//whatsnew--2_1.po +trans.zh_CN = whatsnew/2.1.po +source_file = trans/en/whatsnew--2_1.po +source_lang = en +type = PO +minimum_perc = 0 +resource_name = whatsnew--2_1 + +[o:python-doc:p:python-39:r:whatsnew--2_2] +file_filter = trans//whatsnew--2_2.po +trans.zh_CN = whatsnew/2.2.po +source_file = trans/en/whatsnew--2_2.po +source_lang = en +type = PO +minimum_perc = 0 +resource_name = whatsnew--2_2 + +[o:python-doc:p:python-39:r:whatsnew--2_3] +file_filter = trans//whatsnew--2_3.po +trans.zh_CN = whatsnew/2.3.po +source_file = trans/en/whatsnew--2_3.po +source_lang = en +type = PO +minimum_perc = 0 +resource_name = whatsnew--2_3 + +[o:python-doc:p:python-39:r:whatsnew--2_4] +file_filter = trans//whatsnew--2_4.po +trans.zh_CN = whatsnew/2.4.po +source_file = trans/en/whatsnew--2_4.po +source_lang = en +type = PO +minimum_perc = 0 +resource_name = whatsnew--2_4 + +[o:python-doc:p:python-39:r:whatsnew--2_5] +file_filter = trans//whatsnew--2_5.po +trans.zh_CN = whatsnew/2.5.po +source_file = trans/en/whatsnew--2_5.po +source_lang = en +type = PO +minimum_perc = 0 +resource_name = whatsnew--2_5 + +[o:python-doc:p:python-39:r:whatsnew--2_6] +file_filter = trans//whatsnew--2_6.po +trans.zh_CN = whatsnew/2.6.po +source_file = trans/en/whatsnew--2_6.po +source_lang = en +type = PO +minimum_perc = 0 +resource_name = whatsnew--2_6 + +[o:python-doc:p:python-39:r:whatsnew--2_7] +file_filter = trans//whatsnew--2_7.po +trans.zh_CN = whatsnew/2.7.po +source_file = trans/en/whatsnew--2_7.po +source_lang = en +type = PO +minimum_perc = 0 +resource_name = whatsnew--2_7 + +[o:python-doc:p:python-39:r:whatsnew--3_0] +file_filter = trans//whatsnew--3_0.po +trans.zh_CN = whatsnew/3.0.po +source_file = trans/en/whatsnew--3_0.po +source_lang = en +type = PO +minimum_perc = 0 +resource_name = whatsnew--3_0 + +[o:python-doc:p:python-39:r:whatsnew--3_1] +file_filter = trans//whatsnew--3_1.po +trans.zh_CN = whatsnew/3.1.po +source_file = trans/en/whatsnew--3_1.po +source_lang = en +type = PO +minimum_perc = 0 +resource_name = whatsnew--3_1 + +[o:python-doc:p:python-39:r:whatsnew--3_2] +file_filter = trans//whatsnew--3_2.po +trans.zh_CN = whatsnew/3.2.po +source_file = trans/en/whatsnew--3_2.po +source_lang = en +type = PO +minimum_perc = 0 +resource_name = whatsnew--3_2 + +[o:python-doc:p:python-39:r:whatsnew--3_3] +file_filter = trans//whatsnew--3_3.po +trans.zh_CN = whatsnew/3.3.po +source_file = trans/en/whatsnew--3_3.po +source_lang = en +type = PO +minimum_perc = 0 +resource_name = whatsnew--3_3 + +[o:python-doc:p:python-39:r:whatsnew--3_4] +file_filter = trans//whatsnew--3_4.po +trans.zh_CN = whatsnew/3.4.po +source_file = trans/en/whatsnew--3_4.po +source_lang = en +type = PO +minimum_perc = 0 +resource_name = whatsnew--3_4 + +[o:python-doc:p:python-39:r:whatsnew--3_5] +file_filter = trans//whatsnew--3_5.po +trans.zh_CN = whatsnew/3.5.po +source_file = trans/en/whatsnew--3_5.po +source_lang = en +type = PO +minimum_perc = 0 +resource_name = whatsnew--3_5 + +[o:python-doc:p:python-39:r:whatsnew--3_6] +file_filter = trans//whatsnew--3_6.po +trans.zh_CN = whatsnew/3.6.po +source_file = trans/en/whatsnew--3_6.po +source_lang = en +type = PO +minimum_perc = 0 +resource_name = whatsnew--3_6 + +[o:python-doc:p:python-39:r:whatsnew--3_7] +file_filter = trans//whatsnew--3_7.po +trans.zh_CN = whatsnew/3.7.po +source_file = trans/en/whatsnew--3_7.po +source_lang = en +type = PO +minimum_perc = 0 +resource_name = whatsnew--3_7 + +[o:python-doc:p:python-39:r:whatsnew--3_8] +file_filter = trans//whatsnew--3_8.po +trans.zh_CN = whatsnew/3.8.po +source_file = trans/en/whatsnew--3_8.po +source_lang = en +type = PO +minimum_perc = 0 +resource_name = whatsnew--3_8 + +[o:python-doc:p:python-39:r:whatsnew--3_9] +file_filter = trans//whatsnew--3_9.po +trans.zh_CN = whatsnew/3.9.po +source_file = trans/en/whatsnew--3_9.po +source_lang = en +type = PO +minimum_perc = 0 +resource_name = whatsnew--3_9 + +[o:python-doc:p:python-39:r:whatsnew--changelog] +file_filter = trans//whatsnew--changelog.po +trans.zh_CN = whatsnew/changelog.po +source_file = trans/en/whatsnew--changelog.po +source_lang = en +type = PO +minimum_perc = 0 +resource_name = whatsnew--changelog + +[o:python-doc:p:python-39:r:whatsnew--index] +file_filter = trans//whatsnew--index.po +trans.zh_CN = whatsnew/index.po +source_file = trans/en/whatsnew--index.po +source_lang = en +type = PO +minimum_perc = 0 +resource_name = whatsnew--index diff --git a/README.md b/README.md new file mode 100644 index 000000000..aef454023 --- /dev/null +++ b/README.md @@ -0,0 +1,3 @@ +# zh\_CN Translation of the Python Documentation + +Check out [master](https://github.com/python/python-docs-zh-cn/tree/master) branch for more information. diff --git a/README.rst b/README.rst deleted file mode 100644 index a4eb6ee9a..000000000 --- a/README.rst +++ /dev/null @@ -1,90 +0,0 @@ -zh_CN Translation of the Python Documentation -============================================= - -All translations are done on transifex. -https://www.transifex.com/python-doc/public/ - -Maintained versions: - -.. list-table:: - :header-rows: 1 - - * - Version - - Sync status - - Translation progress - * - `3.13 `_ - - .. image:: https://github.com/python/python-docs-zh-cn/workflows/python-313/badge.svg - :target: https://github.com/python/python-docs-zh-cn/actions?workflow=python-313 - - .. image:: https://img.shields.io/badge/dynamic/json?url=https%3A%2F%2Fraw.githubusercontent.com%2Fpython%2Fpython-docs-zh-cn%2F3.13%2F.stat.json&query=%24.translation&label=zh-CN - :target: https://app.transifex.com/python-doc/python-newest/ - * - `3.12 `_ - - .. image:: https://github.com/python/python-docs-zh-cn/workflows/python-312/badge.svg - :target: https://github.com/python/python-docs-zh-cn/actions?workflow=python-312 - - .. image:: https://img.shields.io/badge/dynamic/json?url=https%3A%2F%2Fraw.githubusercontent.com%2Fpython%2Fpython-docs-zh-cn%2F3.12%2F.stat.json&query=%24.translation&label=zh-CN - :target: https://app.transifex.com/python-doc/python-312/ - * - `3.11 `_ - - .. image:: https://github.com/python/python-docs-zh-cn/workflows/python-311/badge.svg - :target: https://github.com/python/python-docs-zh-cn/actions?workflow=python-311 - - .. image:: https://img.shields.io/badge/dynamic/json?url=https%3A%2F%2Fraw.githubusercontent.com%2Fpython%2Fpython-docs-zh-cn%2F3.11%2F.stat.json&query=%24.translation&label=zh-CN - :target: https://app.transifex.com/python-doc/python-311/ - * - `3.10 `_ - - .. image:: https://github.com/python/python-docs-zh-cn/workflows/python-310/badge.svg - :target: https://github.com/python/python-docs-zh-cn/actions?workflow=python-310 - - .. image:: https://img.shields.io/badge/dynamic/json?url=https%3A%2F%2Fraw.githubusercontent.com%2Fpython%2Fpython-docs-zh-cn%2F3.10%2F.stat.json&query=%24.translation&label=zh-CN - :target: https://app.transifex.com/python-doc/python-310/ - * - `3.9 `_ - - .. image:: https://github.com/python/python-docs-zh-cn/workflows/python-39/badge.svg - :target: https://github.com/python/python-docs-zh-cn/actions?workflow=python-39 - - .. image:: https://img.shields.io/badge/dynamic/json?url=https%3A%2F%2Fraw.githubusercontent.com%2Fpython%2Fpython-docs-zh-cn%2F3.9%2F.stat.json&query=%24.translation&label=zh-CN - :target: https://app.transifex.com/python-doc/python-39/ - -EOL versions: - -.. list-table:: - :header-rows: 1 - - * - Version - - Sync status - - Translation progress - * - `3.8 `_ - - .. image:: https://github.com/python/python-docs-zh-cn/workflows/python-38/badge.svg - :target: https://github.com/python/python-docs-zh-cn/actions?workflow=python-38 - - .. image:: https://img.shields.io/badge/dynamic/json?url=https%3A%2F%2Fraw.githubusercontent.com%2Fpython%2Fpython-docs-zh-cn%2F3.8%2F.stat.json&query=%24.translation&label=zh-CN - :target: https://app.transifex.com/python-doc/python-38/ - * - `3.7 `_ - - .. image:: https://github.com/python/python-docs-zh-cn/workflows/python-37/badge.svg - :target: https://github.com/python/python-docs-zh-cn/actions?workflow=python-37 - - .. image:: https://img.shields.io/badge/dynamic/json?url=https%3A%2F%2Fraw.githubusercontent.com%2Fpython%2Fpython-docs-zh-cn%2F3.7%2F.stat.json&query=%24.translation&label=zh-CN - :target: https://app.transifex.com/python-doc/python-37/ - -Documentation Contribution Agreement ------------------------------------- - -NOTE REGARDING THE LICENSE FOR TRANSLATIONS: Python's documentation is -maintained using a global network of volunteers. By posting this -project on Transifex, GitHub, and other public places, and inviting -you to participate, we are proposing an agreement that you will -provide your improvements to Python's documentation or the translation -of Python's documentation for the PSF's use under the CC0 license -(available at -https://creativecommons.org/publicdomain/zero/1.0/legalcode). In -return, you may publicly claim credit for the portion of the -translation you contributed and if your translation is accepted by the -PSF, you may (but are not required to) submit a patch including an -appropriate annotation in the Misc/ACKS or TRANSLATORS file. Although -nothing in this Documentation Contribution Agreement obligates the PSF -to incorporate your textual contribution, your participation in the -Python community is welcomed and appreciated. - -You signify acceptance of this agreement by submitting your work to -the PSF for inclusion in the documentation. - -Contributing to the Translation -------------------------------- - -Join the Chinese (China) team on transifex to get start. - -You're recommended to read -`大陆简中自由软件本地化工作指南:Free Software Localization Guide for Chinese (China)`__ first. - -__ http://mirrors.ustc.edu.cn/anthon/aosc-l10n/zh_CN_l10n.pdf diff --git a/TRANSLATORS b/TRANSLATORS deleted file mode 100644 index 8c653ac28..000000000 --- a/TRANSLATORS +++ /dev/null @@ -1,118 +0,0 @@ -# The latest translators list is in each po file. -# Following are the names that translators set at Transifex. -# Generated by: -# grep -ohP '(?<=^# )(.+)(?=, \d+$)' -r .|sed 's| <.*>||g' | sort -u - -3vilive D -443 -ailin zhang -allenjuly7 -Aloxaf -ausaki -banxi -cdarlint -chen_chao -Chengeng Ning -ChenYuan -chordy -cissoid -CommonZ -c pan -Danny Vi -dgy18787 -dhcn -dykai -emrich -eric R -Fei Yin -focusheart -Fred -Freesand Leo -gashero liu -hanfeng -Hanxi Fu -Harry Z -Henry Zhu -isaced -isombyt -Jack Wu -Jann Li -Jarry Shaw -Jerry Chen -Josh Ouyang -jsgang -Junkai Shao -Kaizhao Zhang -Kder -keelii -kevin wong -Larry wang -Larry Wang -Madlee -Meng Du -Menghua Xiao -Ming Jia -musan cheng -MuSheng Chen -Nasy -Natasha Li -Pandaaaa906 -Pan Felix -Pikachu -QR Wang -RSNOW -ryohei -Saiyang Gou -sgqy -Shengjing Zhu -shiyu Peng -Siyuan Xu -SKY H. -SonnyZhang -Steve Ni -sunsol s -Thomas ZHANG -tom smith -Tony Tong -Trim21 -TX Lee -walkinrain -Wang Saul -wenhui -wevsty -Woko -Woostundy -Wu Pipi -wwj402 -ww song -xiao xu -Yan Gao -Yinuo Huang -Yiyi Python -YIZHU LIN -yuan chen -yuxin wang -zc Jin -Zephyr Waitzman -Zhe He -Ziqi Wang -zkonge -Zombie110year -付裕如 -兴然 刘 -刘士 -叶浚安 -启迪 吴 -吴彬 -开 方 -张俊(fighting) -志正 韩 -操旭 -林行众 -梁启凡 -欢 王 -殷平乐 -汇民 王 -演奏王 -非法操作 -马强 diff --git a/about.po b/about.po new file mode 100644 index 000000000..cb1e25edd --- /dev/null +++ b/about.po @@ -0,0 +1,89 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) 2001-2024, Python Software Foundation +# This file is distributed under the same license as the Python package. +# FIRST AUTHOR , YEAR. +# +# Translators: +# chordy , 2017 +# Shengjing Zhu , 2019 +# Rafael Fontenelle , 2024 +# +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: Python 3.9\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2024-09-13 16:48+0000\n" +"PO-Revision-Date: 2017-02-16 17:31+0000\n" +"Last-Translator: Rafael Fontenelle , 2024\n" +"Language-Team: Chinese (China) (https://app.transifex.com/python-doc/teams/5390/zh_CN/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: zh_CN\n" +"Plural-Forms: nplurals=1; plural=0;\n" + +#: ../../about.rst:3 +msgid "About these documents" +msgstr "文档说明" + +#: ../../about.rst:6 +msgid "" +"These documents are generated from `reStructuredText`_ sources by `Sphinx`_," +" a document processor specifically written for the Python documentation." +msgstr "" +"这些文档是用 `Sphinx`_ 从 `reStructuredText`_ 源生成的,`Sphinx` 是一个专为处理 Python " +"文档而编写的文档生成器。" + +#: ../../about.rst:15 +msgid "" +"Development of the documentation and its toolchain is an entirely volunteer " +"effort, just like Python itself. If you want to contribute, please take a " +"look at the :ref:`reporting-bugs` page for information on how to do so. New" +" volunteers are always welcome!" +msgstr "" +"本文档及其工具链之开发,皆在于志愿者之努力,亦恰如 Python 本身。如果您想为此作出贡献,请阅读 :ref:`reporting-bugs` " +"了解如何参与。我们随时欢迎新的志愿者!" + +#: ../../about.rst:20 +msgid "Many thanks go to:" +msgstr "特别鸣谢:" + +#: ../../about.rst:22 +msgid "" +"Fred L. Drake, Jr., the creator of the original Python documentation toolset" +" and writer of much of the content;" +msgstr "Fred L. Drake, Jr.,原始 Python 文档工具集之创造者,众多文档之作者;" + +#: ../../about.rst:24 +msgid "" +"the `Docutils `_ project for creating " +"reStructuredText and the Docutils suite;" +msgstr "" +"`Docutils软件包 `_ 项目,创建了 reStructuredText " +"文本格式和 Docutils 软件套件;" + +#: ../../about.rst:26 +msgid "" +"Fredrik Lundh for his Alternative Python Reference project from which Sphinx" +" got many good ideas." +msgstr "Fredrik Lundh 的 Alternative Python Reference 项目,为 Sphinx 提供许多好的点子。" + +#: ../../about.rst:31 +msgid "Contributors to the Python Documentation" +msgstr "Python 文档的贡献者" + +#: ../../about.rst:33 +msgid "" +"Many people have contributed to the Python language, the Python standard " +"library, and the Python documentation. See :source:`Misc/ACKS` in the " +"Python source distribution for a partial list of contributors." +msgstr "" +"有很多对 Python 语言,Python 标准库和 Python 文档有贡献的人,随 Python 源代码分发的 " +":source:`Misc/ACKS` 文件列出了部分贡献者。" + +#: ../../about.rst:37 +msgid "" +"It is only with the input and contributions of the Python community that " +"Python has such wonderful documentation -- Thank You!" +msgstr "有了 Python 社区的输入和贡献,Python 才有了如此出色的文档——谢谢你们!" diff --git a/bugs.po b/bugs.po new file mode 100644 index 000000000..93952cd07 --- /dev/null +++ b/bugs.po @@ -0,0 +1,225 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) 2001-2024, Python Software Foundation +# This file is distributed under the same license as the Python package. +# FIRST AUTHOR , YEAR. +# +# Translators: +# ppcfish , 2019 +# Shengjing Zhu , 2022 +# Alpha Du , 2022 +# Freesand Leo , 2022 +# Rafael Fontenelle , 2024 +# +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: Python 3.9\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2024-06-20 08:51+0000\n" +"PO-Revision-Date: 2017-02-16 17:31+0000\n" +"Last-Translator: Rafael Fontenelle , 2024\n" +"Language-Team: Chinese (China) (https://app.transifex.com/python-doc/teams/5390/zh_CN/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: zh_CN\n" +"Plural-Forms: nplurals=1; plural=0;\n" + +#: ../../bugs.rst:5 +msgid "Dealing with Bugs" +msgstr "处理错误" + +#: ../../bugs.rst:7 +msgid "" +"Python is a mature programming language which has established a reputation " +"for stability. In order to maintain this reputation, the developers would " +"like to know of any deficiencies you find in Python." +msgstr "Python 是一门成熟的编程语言,以稳定著称。为维持其美誉,开发者希望获悉所有您在 Python 中发现的缺陷。" + +#: ../../bugs.rst:11 +msgid "" +"It can be sometimes faster to fix bugs yourself and contribute patches to " +"Python as it streamlines the process and involves less people. Learn how to " +":ref:`contribute `." +msgstr "" +"有时候自己修复漏洞并将补丁提交给 Python 能更快地解决问题,因为它简化了处理过程并且减少了参与的人力。 请参阅如何 :ref:`提交补丁 " +"`。" + +#: ../../bugs.rst:16 +msgid "Documentation bugs" +msgstr "文档错误" + +#: ../../bugs.rst:18 +msgid "" +"If you find a bug in this documentation or would like to propose an " +"improvement, please submit a bug report on the :ref:`tracker `. If you have a suggestion on how to fix it, include that as well." +msgstr "" +"如果你在这篇文档中找到了一个错误或是想指出一个可改进的地方,请在 :ref:`tracker ` " +"上提交一个错误报告。 如果你有关于改进该问题的建议,请与报告一并提交。" + +#: ../../bugs.rst:22 +msgid "" +"If you're short on time, you can also email documentation bug reports to " +"docs@python.org (behavioral bugs can be sent to python-list@python.org). " +"'docs@' is a mailing list run by volunteers; your request will be noticed, " +"though it may take a while to be processed." +msgstr "" +"如果您时间有限,还可以通过电子邮件将文档的错误报告发送至 docs@python.org(代码运行错误请发送至 python-" +"list@python.org)。“docs@”是一个由志愿者运作的邮件列表;您的请求会得到关注,但可能需要一些时间才会被处理。" + +#: ../../bugs.rst:30 +msgid "`Documentation bugs`_" +msgstr "`文档错误`_" + +#: ../../bugs.rst:30 +msgid "" +"A list of documentation bugs that have been submitted to the Python issue " +"tracker." +msgstr "已提交给 Python 问题追踪系统的文档错误列表。" + +#: ../../bugs.rst:33 +msgid "`Issue Tracking `_" +msgstr "`问题跟踪 `_" + +#: ../../bugs.rst:33 +msgid "" +"Overview of the process involved in reporting an improvement on the tracker." +msgstr "在追踪系统上参与问题改进的过程概述。" + +#: ../../bugs.rst:36 +msgid "" +"`Helping with Documentation " +"`_" +msgstr "" +"`改进文档 `_" + +#: ../../bugs.rst:36 +msgid "" +"Comprehensive guide for individuals that are interested in contributing to " +"Python documentation." +msgstr "给有兴趣为 Python 文档做出贡献的人。" + +#: ../../bugs.rst:38 +msgid "" +"`Documentation Translations " +"`_" +msgstr "`文档翻译 `_" + +#: ../../bugs.rst:39 +msgid "" +"A list of GitHub pages for documentation translation and their primary " +"contacts." +msgstr "文档翻译的 GitHub 页面及其主要联系人的列表" + +#: ../../bugs.rst:45 +msgid "Using the Python issue tracker" +msgstr "使用 Python 的问题追踪系统" + +#: ../../bugs.rst:47 +msgid "" +"Issue reports for Python itself should be submitted via the GitHub issues " +"tracker (https://github.com/python/cpython/issues). The GitHub issues " +"tracker offers a web form which allows pertinent information to be entered " +"and submitted to the developers." +msgstr "" +"针对 Python 本身的问题报告应当通过 GitHub 问题追踪系统 " +"(https://github.com/python/cpython/issues) 来提交。 GitHub " +"问题追踪系统提供了一个网页表单用来输入并提交相关信息给开发者。" + +#: ../../bugs.rst:52 +msgid "" +"The first step in filing a report is to determine whether the problem has " +"already been reported. The advantage in doing so, aside from saving the " +"developers' time, is that you learn what has been done to fix it; it may be " +"that the problem has already been fixed for the next release, or additional " +"information is needed (in which case you are welcome to provide it if you " +"can!). To do this, search the tracker using the search box at the top of the" +" page." +msgstr "" +"第一步是确定问题是否已经被报告了。 " +"这样做的好处除了可以节省开发者的时间,还可以让你了解该问题是如何解决的;有可能该问题已在下一发布版中被修复,或者还需要额外的信息(在此情况下非常欢迎你来提供信息!)。" +" 要确定这一点,请使用页面顶部的搜索框来搜索问题追踪系统。" + +#: ../../bugs.rst:59 +msgid "" +"If the problem you're reporting is not already in the list, log in to " +"GitHub. If you don't already have a GitHub account, create a new account " +"using the \"Sign up\" link. It is not possible to submit a bug report " +"anonymously." +msgstr "" +"如果你要报告的问题未出现在列表中,请登录 GitHub 报告。 如果你还没有 GitHub 账号,请使用 \"Sign up\" 链接新建一个账号。 " +"错误报告是不可能自动被提交的。" + +#: ../../bugs.rst:64 +msgid "" +"Being now logged in, you can submit an issue. Click on the \"New issue\" " +"button in the top bar to report a new issue." +msgstr "当你登录之后,就可以提交问题了。 请点击顶端栏的 \"New issue\" 按钮来报告新问题。" + +#: ../../bugs.rst:67 +msgid "The submission form has two fields, \"Title\" and \"Comment\"." +msgstr "提交表单有两个字段,\"Title\" 和 \"Comment\"。" + +#: ../../bugs.rst:69 +msgid "" +"For the \"Title\" field, enter a *very* short description of the problem; " +"less than ten words is good." +msgstr "对于 \"Title\" 字段,请输入一段 *非常* 简短的问题描述;最好是少于十个单词。" + +#: ../../bugs.rst:72 +msgid "" +"In the \"Comment\" field, describe the problem in detail, including what you" +" expected to happen and what did happen. Be sure to include whether any " +"extension modules were involved, and what hardware and software platform you" +" were using (including version information as appropriate)." +msgstr "" +"在“说明(Comment)”栏,请详细描述问题,包括您预期的情况和实际的情况。请确保包含任何涉及的拓展模块,以及您当时所使用的硬件和软件平台(如果可能,请附上版本信息)。" + +#: ../../bugs.rst:77 +msgid "" +"Each issue report will be reviewed by a developer who will determine what " +"needs to be done to correct the problem. You will receive an update each " +"time an action is taken on the issue." +msgstr "每个问题报告将由一位开发者进行审查并决定要以何种方式来修正该问题。 每当对该问题有新的处理措施时你都会收到更新的消息。" + +#: ../../bugs.rst:86 +msgid "" +"`How to Report Bugs Effectively " +"`_" +msgstr "`如何有效地报告错误 `_" + +#: ../../bugs.rst:85 +msgid "" +"Article which goes into some detail about how to create a useful bug report." +" This describes what kind of information is useful and why it is useful." +msgstr "该文章详细介绍了如何创建一份有用的错误报告。它描述了什么样的信息是有用的,以及为什么是有用的。" + +#: ../../bugs.rst:89 +msgid "" +"`Bug Writing Guidelines `_" +msgstr "" +"`Bug Writing Guidelines `_" + +#: ../../bugs.rst:89 +msgid "" +"Information about writing a good bug report. Some of this is specific to " +"the Mozilla project, but describes general good practices." +msgstr "关于写一份好的错误报告。部分仅针对 Mozilla 项目,不过其描述了通用的恰当做法。" + +#: ../../bugs.rst:95 +msgid "Getting started contributing to Python yourself" +msgstr "开始为 Python 贡献您的知识" + +#: ../../bugs.rst:97 +msgid "" +"Beyond just reporting bugs that you find, you are also welcome to submit " +"patches to fix them. You can find more information on how to get started " +"patching Python in the `Python Developer's Guide`_. If you have questions, " +"the `core-mentorship mailing list`_ is a friendly place to get answers to " +"any and all questions pertaining to the process of fixing issues in Python." +msgstr "" +"除了仅仅报告您所发现的错误之外,同样欢迎您提交修复它们的补丁。您可以在 `Python 开发者指引`_ 中找到更多为 Python " +"打补丁的信息。如果您有任何问题,`核心导师邮件列表`_ 是一个友好的去处,在那里, 你可以寻求修复 Python 相关问题的答案。" diff --git a/c-api/abstract.po b/c-api/abstract.po new file mode 100644 index 000000000..59eff6c88 --- /dev/null +++ b/c-api/abstract.po @@ -0,0 +1,47 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) 2001-2022, Python Software Foundation +# This file is distributed under the same license as the Python package. +# FIRST AUTHOR , YEAR. +# +# Translators: +# wwj402 , 2017 +# cdarlint , 2017 +# +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: Python 3.9\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2022-11-04 14:34+0000\n" +"PO-Revision-Date: 2017-02-16 17:32+0000\n" +"Last-Translator: cdarlint , 2017\n" +"Language-Team: Chinese (China) (https://www.transifex.com/python-doc/teams/5390/zh_CN/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: zh_CN\n" +"Plural-Forms: nplurals=1; plural=0;\n" + +#: ../../c-api/abstract.rst:7 +msgid "Abstract Objects Layer" +msgstr "抽象对象层" + +#: ../../c-api/abstract.rst:9 +msgid "" +"The functions in this chapter interact with Python objects regardless of " +"their type, or with wide classes of object types (e.g. all numerical types, " +"or all sequence types). When used on object types for which they do not " +"apply, they will raise a Python exception." +msgstr "" +"本章中的函数与 Python对象交互,无论其类型,或具有广泛类的对象类型(例如,所有数值类型,或所有序列类型)。当使用对象类型并不适用时,他们会产生一个" +" Python 异常。" + +#: ../../c-api/abstract.rst:14 +msgid "" +"It is not possible to use these functions on objects that are not properly " +"initialized, such as a list object that has been created by " +":c:func:`PyList_New`, but whose items have not been set to some non-\\ " +"``NULL`` value yet." +msgstr "" +"这些函数是不可能用于未正确初始化的对象的,如一个列表对象被 :c:func:`PyList_New` " +"创建,但其中的项目没有被设置为一些非``NULL``的值。" diff --git a/c-api/allocation.po b/c-api/allocation.po new file mode 100644 index 000000000..9035f2ce8 --- /dev/null +++ b/c-api/allocation.po @@ -0,0 +1,103 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) 2001-2022, Python Software Foundation +# This file is distributed under the same license as the Python package. +# FIRST AUTHOR , YEAR. +# +# Translators: +# 付裕如 , 2017 +# 操旭 , 2017 +# cdarlint , 2017 +# Freesand Leo , 2019 +# +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: Python 3.9\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2022-11-04 14:34+0000\n" +"PO-Revision-Date: 2017-02-16 17:32+0000\n" +"Last-Translator: Freesand Leo , 2019\n" +"Language-Team: Chinese (China) (https://www.transifex.com/python-doc/teams/5390/zh_CN/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: zh_CN\n" +"Plural-Forms: nplurals=1; plural=0;\n" + +#: ../../c-api/allocation.rst:6 +msgid "Allocating Objects on the Heap" +msgstr "在堆中分配对象" + +#: ../../c-api/allocation.rst:17 +msgid "" +"Initialize a newly-allocated object *op* with its type and initial " +"reference. Returns the initialized object. If *type* indicates that the " +"object participates in the cyclic garbage detector, it is added to the " +"detector's set of observed objects. Other fields of the object are not " +"affected." +msgstr "" +"为新分配的对象 *op* 初始化它的类型和引用。返回初始化后的对象。如果 *type* " +"声明这个对象参与循环垃圾检测,那么这个对象会被添加进垃圾检测的对象集中。这个对象的其他字段不会被影响。" + +#: ../../c-api/allocation.rst:26 +msgid "" +"This does everything :c:func:`PyObject_Init` does, and also initializes the " +"length information for a variable-size object." +msgstr "它的功能和 :c:func:`PyObject_Init` 一样,并且初始化变量大小的对象的长度。" + +#: ../../c-api/allocation.rst:32 +msgid "" +"Allocate a new Python object using the C structure type *TYPE* and the " +"Python type object *type*. Fields not defined by the Python object header " +"are not initialized; the object's reference count will be one. The size of " +"the memory allocation is determined from the " +":c:member:`~PyTypeObject.tp_basicsize` field of the type object." +msgstr "" +"使用 C 结构类型 *TYPE* 和 Python 类型对象 *type* 分配一个新的 Python 对象。 未在该 Python " +"对象头中定义的字段不会被初始化;对象的引用计数将为一。 内存分配大小由 type 对象的 " +":c:member:`~PyTypeObject.tp_basicsize` 字段来确定。" + +#: ../../c-api/allocation.rst:41 +msgid "" +"Allocate a new Python object using the C structure type *TYPE* and the " +"Python type object *type*. Fields not defined by the Python object header " +"are not initialized. The allocated memory allows for the *TYPE* structure " +"plus *size* fields of the size given by the " +":c:member:`~PyTypeObject.tp_itemsize` field of *type*. This is useful for " +"implementing objects like tuples, which are able to determine their size at " +"construction time. Embedding the array of fields into the same allocation " +"decreases the number of allocations, improving the memory management " +"efficiency." +msgstr "" +"使用C的数据结构类型 *TYPE* 和Python的类型对象 *type* " +"分配一个新的Python对象。Python对象头文件中没有定义的字段不会被初始化。被分配的内存空间预留了 *TYPE* 结构加 *type* 对象中 " +":c:member:`~PyTypeObject.tp_itemsize` 字段提供的 *size* " +"字段的值。这对于实现类似元组这种能够在构造期决定自己大小的对象是很实用的。将字段的数组嵌入到相同的内存分配中可以减少内存分配的次数,这提高了内存分配的效率。" + +#: ../../c-api/allocation.rst:53 +msgid "" +"Releases memory allocated to an object using :c:func:`PyObject_New` or " +":c:func:`PyObject_NewVar`. This is normally called from the " +":c:member:`~PyTypeObject.tp_dealloc` handler specified in the object's type." +" The fields of the object should not be accessed after this call as the " +"memory is no longer a valid Python object." +msgstr "" +"释放由 :c:func:`PyObject_New` 或者 :c:func:`PyObject_NewVar` " +"分配内存的对象。这通常由对象的type字段定义的 :c:member:`~PyTypeObject.tp_dealloc` " +"处理函数来调用。调用这个函数以后op对象中的字段都不可以被访问,因为原分配的内存空间已不再是一个有效的Python对象。" + +#: ../../c-api/allocation.rst:62 +msgid "" +"Object which is visible in Python as ``None``. This should only be accessed" +" using the :c:macro:`Py_None` macro, which evaluates to a pointer to this " +"object." +msgstr "" +"像 ``None`` 一样的Python对象。这个对象仅可以使用 :c:macro:`Py_None` 宏访问,这个宏取得指向这个对象的指针。" + +#: ../../c-api/allocation.rst:69 +msgid ":c:func:`PyModule_Create`" +msgstr ":c:func:`PyModule_Create`" + +#: ../../c-api/allocation.rst:70 +msgid "To allocate and create extension modules." +msgstr "分配内存和创建扩展模块。" diff --git a/c-api/apiabiversion.po b/c-api/apiabiversion.po new file mode 100644 index 000000000..940d872ef --- /dev/null +++ b/c-api/apiabiversion.po @@ -0,0 +1,122 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) 2001-2022, Python Software Foundation +# This file is distributed under the same license as the Python package. +# FIRST AUTHOR , YEAR. +# +# Translators: +# Pikachu , 2017 +# 操旭 , 2017 +# ppcfish , 2019 +# +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: Python 3.9\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2022-11-04 14:34+0000\n" +"PO-Revision-Date: 2017-02-16 17:33+0000\n" +"Last-Translator: ppcfish , 2019\n" +"Language-Team: Chinese (China) (https://www.transifex.com/python-doc/teams/5390/zh_CN/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: zh_CN\n" +"Plural-Forms: nplurals=1; plural=0;\n" + +#: ../../c-api/apiabiversion.rst:7 +msgid "API and ABI Versioning" +msgstr "API 和 ABI 版本管理" + +#: ../../c-api/apiabiversion.rst:9 +msgid "" +"``PY_VERSION_HEX`` is the Python version number encoded in a single integer." +msgstr "``PY_VERSION_HEX`` 是Python的版本号的整数形式。" + +#: ../../c-api/apiabiversion.rst:11 +msgid "" +"For example if the ``PY_VERSION_HEX`` is set to ``0x030401a2``, the " +"underlying version information can be found by treating it as a 32 bit " +"number in the following manner:" +msgstr "" +"例如,如果 ``PY_VERSION_HEX`` 被置为 ``0x030401a2``, 其包含的版本信息可以通过以下方式将其作为一个32位数字来处理:" + +#: ../../c-api/apiabiversion.rst:16 +msgid "Bytes" +msgstr "字节" + +#: ../../c-api/apiabiversion.rst:16 +msgid "Bits (big endian order)" +msgstr "位数(大端字节序)" + +#: ../../c-api/apiabiversion.rst:16 +msgid "Meaning" +msgstr "意义" + +#: ../../c-api/apiabiversion.rst:18 +msgid "``1``" +msgstr "``1``" + +#: ../../c-api/apiabiversion.rst:18 +msgid "``1-8``" +msgstr "``1-8``" + +#: ../../c-api/apiabiversion.rst:18 +msgid "``PY_MAJOR_VERSION`` (the ``3`` in ``3.4.1a2``)" +msgstr "``PY_MAJOR_VERSION`` (``3.4.1a2`` 中的 ``3`` )" + +#: ../../c-api/apiabiversion.rst:21 +msgid "``2``" +msgstr "``2``" + +#: ../../c-api/apiabiversion.rst:21 +msgid "``9-16``" +msgstr "``9-16``" + +#: ../../c-api/apiabiversion.rst:21 +msgid "``PY_MINOR_VERSION`` (the ``4`` in ``3.4.1a2``)" +msgstr "``PY_MINOR_VERSION`` (``3.4.1a2`` 中的 ``4`` )" + +#: ../../c-api/apiabiversion.rst:24 +msgid "``3``" +msgstr "``3``" + +#: ../../c-api/apiabiversion.rst:24 +msgid "``17-24``" +msgstr "``17-24``" + +#: ../../c-api/apiabiversion.rst:24 +msgid "``PY_MICRO_VERSION`` (the ``1`` in ``3.4.1a2``)" +msgstr "``PY_MICRO_VERSION`` (``3.4.1a2`` 中的 ``1`` )" + +#: ../../c-api/apiabiversion.rst:27 +msgid "``4``" +msgstr "``4``" + +#: ../../c-api/apiabiversion.rst:27 +msgid "``25-28``" +msgstr "``25-28``" + +#: ../../c-api/apiabiversion.rst:27 +msgid "" +"``PY_RELEASE_LEVEL`` (``0xA`` for alpha, ``0xB`` for beta, ``0xC`` for " +"release candidate and ``0xF`` for final), in this case it is alpha." +msgstr "" +"``PY_RELEASE_LEVEL`` (``0xA`` 是 alpha版本, ``0xB`` 是 beta版本, ``0xC`` 发布的候选版本并且" +" ``0xF`` 是最终版本),在这个例子中这个版本是alpha版本。" + +#: ../../c-api/apiabiversion.rst:32 +msgid "``29-32``" +msgstr "``29-32``" + +#: ../../c-api/apiabiversion.rst:32 +msgid "" +"``PY_RELEASE_SERIAL`` (the ``2`` in ``3.4.1a2``, zero for final releases)" +msgstr "``PY_RELEASE_SERIAL`` ( ``3.4.1a2`` 中的 ``2`` ,最终版本用0)" + +#: ../../c-api/apiabiversion.rst:36 +msgid "Thus ``3.4.1a2`` is hexversion ``0x030401a2``." +msgstr "因此 ``3.4.1a2`` 的16进制版本号是 ``0x030401a2`` 。" + +#: ../../c-api/apiabiversion.rst:38 +msgid "All the given macros are defined in :source:`Include/patchlevel.h`." +msgstr "所有提到的宏都定义在 :source:`Include/patchlevel.h`。" diff --git a/c-api/arg.po b/c-api/arg.po new file mode 100644 index 000000000..ce1903089 --- /dev/null +++ b/c-api/arg.po @@ -0,0 +1,1322 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) 2001-2023, Python Software Foundation +# This file is distributed under the same license as the Python package. +# FIRST AUTHOR , YEAR. +# +# Translators: +# 张俊(fighting) , 2017 +# 操旭 , 2017 +# cdarlint , 2017 +# QR Wang , 2018 +# 高垚鑫, 2018 +# taotieren , 2020 +# Rafael Fontenelle , 2023 +# Freesand Leo , 2023 +# +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: Python 3.9\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2023-08-18 15:39+0000\n" +"PO-Revision-Date: 2017-02-16 17:33+0000\n" +"Last-Translator: Freesand Leo , 2023\n" +"Language-Team: Chinese (China) (https://app.transifex.com/python-doc/teams/5390/zh_CN/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: zh_CN\n" +"Plural-Forms: nplurals=1; plural=0;\n" + +#: ../../c-api/arg.rst:6 +msgid "Parsing arguments and building values" +msgstr "解析参数并构建值变量" + +#: ../../c-api/arg.rst:8 +msgid "" +"These functions are useful when creating your own extensions functions and " +"methods. Additional information and examples are available in " +":ref:`extending-index`." +msgstr "在创建你自己的扩展函数和方法时,这些函数是有用的。其它的信息和样例见 :ref:`extending-index` 。" + +#: ../../c-api/arg.rst:12 +msgid "" +"The first three of these functions described, :c:func:`PyArg_ParseTuple`, " +":c:func:`PyArg_ParseTupleAndKeywords`, and :c:func:`PyArg_Parse`, all use " +"*format strings* which are used to tell the function about the expected " +"arguments. The format strings use the same syntax for each of these " +"functions." +msgstr "" +"这些函数描述的前三个,:c:func:`PyArg_ParseTuple`,:c:func:`PyArg_ParseTupleAndKeywords`,以及" +" :c:func:`PyArg_Parse`,它们都使用 *格式化字符串* 来将函数期待的参数告知函数。这些函数都使用相同语法规则的格式化字符串。" + +#: ../../c-api/arg.rst:19 +msgid "Parsing arguments" +msgstr "解析参数" + +#: ../../c-api/arg.rst:21 +msgid "" +"A format string consists of zero or more \"format units.\" A format unit " +"describes one Python object; it is usually a single character or a " +"parenthesized sequence of format units. With a few exceptions, a format " +"unit that is not a parenthesized sequence normally corresponds to a single " +"address argument to these functions. In the following description, the " +"quoted form is the format unit; the entry in (round) parentheses is the " +"Python object type that matches the format unit; and the entry in [square] " +"brackets is the type of the C variable(s) whose address should be passed." +msgstr "" +"一个格式化字符串包含 0 或者更多的格式单元。一个格式单元用来描述一个 Python " +"对象;它通常是一个字符或者由括号括起来的格式单元序列。除了少数例外,一个非括号序列的格式单元通常对应这些函数的具有单一地址的参数。在接下来的描述中,双引号内的表达式是格式单元;圆括号" +" () 内的是对应这个格式单元的 Python 对象类型;方括号 [] 内的是传递的 C 变量(变量集)类型。" + +#: ../../c-api/arg.rst:31 +msgid "Strings and buffers" +msgstr "字符串和缓存区" + +#: ../../c-api/arg.rst:33 +msgid "" +"These formats allow accessing an object as a contiguous chunk of memory. You" +" don't have to provide raw storage for the returned unicode or bytes area." +msgstr "这些格式允许将对象按照连续的内存块形式进行访问。你没必要提供返回的 unicode 字符或者字节区的原始数据存储。" + +#: ../../c-api/arg.rst:37 +msgid "" +"In general, when a format sets a pointer to a buffer, the buffer is managed " +"by the corresponding Python object, and the buffer shares the lifetime of " +"this object. You won't have to release any memory yourself. The only " +"exceptions are ``es``, ``es#``, ``et`` and ``et#``." +msgstr "" +"一般的,当一个表达式设置一个指针指向一个缓冲区,这个缓冲区可以被相应的 Python " +"对象管理,并且这个缓冲区共享这个对象的生存周期。你不需要人为的释放任何内存空间。除了这些 ``es``, ``es#``, ``et`` and " +"``et#``." + +#: ../../c-api/arg.rst:42 +msgid "" +"However, when a :c:type:`Py_buffer` structure gets filled, the underlying " +"buffer is locked so that the caller can subsequently use the buffer even " +"inside a :c:type:`Py_BEGIN_ALLOW_THREADS` block without the risk of mutable " +"data being resized or destroyed. As a result, **you have to call** " +":c:func:`PyBuffer_Release` after you have finished processing the data (or " +"in any early abort case)." +msgstr "" +"然而,当一个 :c:type:`Py_buffer` 结构被赋值,其包含的缓冲区被锁住,所以调用者在随后使用这个缓冲区,即使在 " +":c:type:`Py_BEGIN_ALLOW_THREADS` 块中,可以避免可变数据因为调整大小或者被销毁所带来的风险。因此,**你不得不调用** " +":c:func:`PyBuffer_Release` 在你结束数据的处理时(或者在之前任何中断事件中)" + +#: ../../c-api/arg.rst:49 +msgid "Unless otherwise stated, buffers are not NUL-terminated." +msgstr "除非另有说明,缓冲区是不会以空终止的。" + +#: ../../c-api/arg.rst:51 +msgid "" +"Some formats require a read-only :term:`bytes-like object`, and set a " +"pointer instead of a buffer structure. They work by checking that the " +"object's :c:member:`PyBufferProcs.bf_releasebuffer` field is ``NULL``, which" +" disallows mutable objects such as :class:`bytearray`." +msgstr "" +"某些格式需要只读的 :term:`bytes-like object`,并设置指针而不是缓冲区结构。 他们通过检查对象的 " +":c:member:`PyBufferProcs.bf_releasebuffer` 字段是否为 ``NULL`` 来发挥作用,该字段不允许为 " +":class:`bytearray` 这样的可变对象。" + +#: ../../c-api/arg.rst:58 +msgid "" +"For all ``#`` variants of formats (``s#``, ``y#``, etc.), the type of the " +"length argument (int or :c:type:`Py_ssize_t`) is controlled by defining the " +"macro :c:macro:`PY_SSIZE_T_CLEAN` before including :file:`Python.h`. If the" +" macro was defined, length is a :c:type:`Py_ssize_t` rather than an " +":c:type:`int`. This behavior will change in a future Python version to only " +"support :c:type:`Py_ssize_t` and drop :c:type:`int` support. It is best to " +"always define :c:macro:`PY_SSIZE_T_CLEAN`." +msgstr "" +"所有 ``#`` 表达式的变体 (``s#``,``y#`` 等),长度参数的类型 (整型或者 :c:type:`Py_ssize_t`) 在包含 " +":file:`Python.h` 头文件之前由 :c:macro:`PY_SSIZE_T_CLEAN` 宏的定义控制。 如果这个宏被定义,长度是一个 " +":c:type:`Py_ssize_t` 而不是一个 :c:type:`int`。 在未来的 Python 版本中将会改变,只支持 " +":c:type:`Py_ssize_t` 而放弃支持 :c:type:`int`。 最好一直定义 :c:macro:`PY_SSIZE_T_CLEAN`" +" 这个宏。" + +#: ../../c-api/arg.rst:85 +msgid "``s`` (:class:`str`) [const char \\*]" +msgstr "``s`` (:class:`str`) [const char \\*]" + +#: ../../c-api/arg.rst:68 +msgid "" +"Convert a Unicode object to a C pointer to a character string. A pointer to " +"an existing string is stored in the character pointer variable whose address" +" you pass. The C string is NUL-terminated. The Python string must not " +"contain embedded null code points; if it does, a :exc:`ValueError` exception" +" is raised. Unicode objects are converted to C strings using ``'utf-8'`` " +"encoding. If this conversion fails, a :exc:`UnicodeError` is raised." +msgstr "" +"将一个 Unicode 对象转换成一个指向字符串的 C 指针。一个指针指向一个已经存在的字符串,这个字符串存储的是传如的字符指针变量。C " +"字符串是已空结束的。Python 字符串不能包含嵌入的无效的代码点;如果由,一个 :exc:`ValueError` 异常会被引发。Unicode " +"对象被转化成 ``'utf-8'`` 编码的 C 字符串。如果转换失败,一个 :exc:`UnicodeError` 异常被引发。" + +#: ../../c-api/arg.rst:77 +msgid "" +"This format does not accept :term:`bytes-like objects `." +" If you want to accept filesystem paths and convert them to C character " +"strings, it is preferable to use the ``O&`` format with " +":c:func:`PyUnicode_FSConverter` as *converter*." +msgstr "" +"这个表达式不接受 :term:`bytes-like objects `。如果你想接受文件系统路径并将它们转化成 " +"C 字符串,建议使用 ``O&`` 表达式配合 :c:func:`PyUnicode_FSConverter` 作为 *转化函数*。" + +#: ../../c-api/arg.rst:83 ../../c-api/arg.rst:150 +msgid "" +"Previously, :exc:`TypeError` was raised when embedded null code points were " +"encountered in the Python string." +msgstr "以前,当 Python 字符串中遇到了嵌入的 null 代码点会引发 :exc:`TypeError` 。" + +#: ../../c-api/arg.rst:91 +msgid "``s*`` (:class:`str` or :term:`bytes-like object`) [Py_buffer]" +msgstr "``s*`` (:class:`str` or :term:`bytes-like object`) [Py_buffer]" + +#: ../../c-api/arg.rst:88 +msgid "" +"This format accepts Unicode objects as well as bytes-like objects. It fills " +"a :c:type:`Py_buffer` structure provided by the caller. In this case the " +"resulting C string may contain embedded NUL bytes. Unicode objects are " +"converted to C strings using ``'utf-8'`` encoding." +msgstr "" +"这个表达式既接受 Unicode 对象也接受类字节类型对象。它为由调用者提供的 :c:type:`Py_buffer` 结构赋值。这里结果的 C " +"字符串可能包含嵌入的 NUL 字节。Unicode 对象通过 ``'utf-8'`` 编码转化成 C 字符串。" + +#: ../../c-api/arg.rst:98 +msgid "" +"``s#`` (:class:`str`, read-only :term:`bytes-like object`) [const char \\*, " +"int or :c:type:`Py_ssize_t`]" +msgstr "" +"``s#`` (:class:`str`, 只读 :term:`bytes-like object`) [const char \\*, int or " +":c:type:`Py_ssize_t`]" + +#: ../../c-api/arg.rst:94 +msgid "" +"Like ``s*``, except that it doesn't accept mutable objects. The result is " +"stored into two C variables, the first one a pointer to a C string, the " +"second one its length. The string may contain embedded null bytes. Unicode " +"objects are converted to C strings using ``'utf-8'`` encoding." +msgstr "" +"像 ``s*``,除了它不接受易变的对象。结果存储在两个 C 变量中,第一个是指向 C 字符串的指针,第二个是它的长度。字符串可能包含嵌入的 null " +"字节。Unicode 对象都被通过 ``'utf-8'`` 编码转化成 C 字符串。" + +#: ../../c-api/arg.rst:102 ../../c-api/arg.rst:566 +msgid "``z`` (:class:`str` or ``None``) [const char \\*]" +msgstr "``z`` (:class:`str` or ``None``) [const char \\*]" + +#: ../../c-api/arg.rst:101 +msgid "" +"Like ``s``, but the Python object may also be ``None``, in which case the C " +"pointer is set to ``NULL``." +msgstr "与 ``s`` 类似,但 Python 对象也可能为 ``None``,在这种情况下,C 指针设置为 ``NULL``。" + +#: ../../c-api/arg.rst:106 +msgid "" +"``z*`` (:class:`str`, :term:`bytes-like object` or ``None``) [Py_buffer]" +msgstr "" +"``z*`` (:class:`str`, :term:`bytes-like object` or ``None``) [Py_buffer]" + +#: ../../c-api/arg.rst:105 +msgid "" +"Like ``s*``, but the Python object may also be ``None``, in which case the " +"``buf`` member of the :c:type:`Py_buffer` structure is set to ``NULL``." +msgstr "" +"与 ``s*`` 类似,但 Python 对象也可能为 ``None``,在这种情况下,:c:type:`Py_buffer` 结构的 ``buf`` " +"成员设置为 ``NULL``。" + +#: ../../c-api/arg.rst:110 +msgid "" +"``z#`` (:class:`str`, read-only :term:`bytes-like object` or ``None``) " +"[const char \\*, int or :c:type:`Py_ssize_t`]" +msgstr "" +"``z#`` (:class:`str`, 只读 :term:`bytes-like object` 或 ``None``) [const char " +"\\*, int 或 :c:type:`Py_ssize_t`]" + +#: ../../c-api/arg.rst:109 +msgid "" +"Like ``s#``, but the Python object may also be ``None``, in which case the C" +" pointer is set to ``NULL``." +msgstr "与 ``s#`` 类似,但 Python 对象也可能为 ``None``,在这种情况下,C 指针设置为 ``NULL``。" + +#: ../../c-api/arg.rst:120 +msgid "``y`` (read-only :term:`bytes-like object`) [const char \\*]" +msgstr "``y`` (read-only :term:`bytes-like object`) [const char \\*]" + +#: ../../c-api/arg.rst:113 +msgid "" +"This format converts a bytes-like object to a C pointer to a character " +"string; it does not accept Unicode objects. The bytes buffer must not " +"contain embedded null bytes; if it does, a :exc:`ValueError` exception is " +"raised." +msgstr "" +"这个表达式将一个类字节类型对象转化成一个指向字符串的 C 指针;它不接受 Unicode 对象。字节缓存区必须不包含嵌入的 null 字节;如果包含了 " +"null 字节,会引发一个 :exc:`ValueError` 异常。" + +#: ../../c-api/arg.rst:118 +msgid "" +"Previously, :exc:`TypeError` was raised when embedded null bytes were " +"encountered in the bytes buffer." +msgstr "以前,当字节缓冲区中遇到了嵌入的 null 字节会引发 :exc:`TypeError` 。" + +#: ../../c-api/arg.rst:125 +msgid "``y*`` (:term:`bytes-like object`) [Py_buffer]" +msgstr "``y*`` (:term:`bytes-like object`) [Py_buffer]" + +#: ../../c-api/arg.rst:123 +msgid "" +"This variant on ``s*`` doesn't accept Unicode objects, only bytes-like " +"objects. **This is the recommended way to accept binary data.**" +msgstr "``s*`` 的变式,不接受 Unicode 对象,只接受类字节类型变量。**这是接受二进制数据的推荐方法。**" + +#: ../../c-api/arg.rst:129 +msgid "" +"``y#`` (read-only :term:`bytes-like object`) [const char \\*, int or " +":c:type:`Py_ssize_t`]" +msgstr "" +"``y#`` (只读 :term:`bytes-like object`) [const char \\*, int 或 " +":c:type:`Py_ssize_t`]" + +#: ../../c-api/arg.rst:128 +msgid "" +"This variant on ``s#`` doesn't accept Unicode objects, only bytes-like " +"objects." +msgstr "``s#`` 的变式,不接受 Unicode 对象,只接受类字节类型变量。" + +#: ../../c-api/arg.rst:134 +msgid "``S`` (:class:`bytes`) [PyBytesObject \\*]" +msgstr "``S`` (:class:`bytes`) [PyBytesObject \\*]" + +#: ../../c-api/arg.rst:132 +msgid "" +"Requires that the Python object is a :class:`bytes` object, without " +"attempting any conversion. Raises :exc:`TypeError` if the object is not a " +"bytes object. The C variable may also be declared as :c:type:`PyObject*`." +msgstr "" +"要求 Python 对象为 :class:`bytes` 对象,不尝试进行任何转换。 如果该对象不为 bytes 对象则会引发 " +":exc:`TypeError`。 C 变量也可被声明为 :c:type:`PyObject*` 类型。" + +#: ../../c-api/arg.rst:139 +msgid "``Y`` (:class:`bytearray`) [PyByteArrayObject \\*]" +msgstr "``Y`` (:class:`bytearray`) [PyByteArrayObject \\*]" + +#: ../../c-api/arg.rst:137 +msgid "" +"Requires that the Python object is a :class:`bytearray` object, without " +"attempting any conversion. Raises :exc:`TypeError` if the object is not a " +":class:`bytearray` object. The C variable may also be declared as " +":c:type:`PyObject*`." +msgstr "" +"要求 Python 对象为 :class:`bytearray` 对象,不尝试进行任何转换。 如果该对象不为 :class:`bytearray` " +"对象则会引发 :exc:`TypeError`。 C 变量也可被声明为 :c:type:`PyObject*` 类型。" + +#: ../../c-api/arg.rst:156 +msgid "``u`` (:class:`str`) [const Py_UNICODE \\*]" +msgstr "``u`` (:class:`str`) [const Py_UNICODE \\*]" + +#: ../../c-api/arg.rst:142 +msgid "" +"Convert a Python Unicode object to a C pointer to a NUL-terminated buffer of" +" Unicode characters. You must pass the address of a :c:type:`Py_UNICODE` " +"pointer variable, which will be filled with the pointer to an existing " +"Unicode buffer. Please note that the width of a :c:type:`Py_UNICODE` " +"character depends on compilation options (it is either 16 or 32 bits). The " +"Python string must not contain embedded null code points; if it does, a " +":exc:`ValueError` exception is raised." +msgstr "" +"将一个 Python Unicode 对象转化成指向一个以空终止的 Unicode 字符缓冲区的指针。你必须传入一个 " +":c:type:`Py_UNICODE` 指针变量的地址,存储了一个指向已经存在的 Unicode 缓冲区的指针。请注意一个 " +":c:type:`Py_UNICODE` 类型的字符宽度取决于编译选项(16 位或者 32 位)。Python 字符串必须不能包含嵌入的 null " +"代码点;如果有,引发一个 :exc:`ValueError` 异常。" + +#: ../../c-api/arg.rst:157 ../../c-api/arg.rst:166 ../../c-api/arg.rst:174 +#: ../../c-api/arg.rst:182 +msgid "" +"Part of the old-style :c:type:`Py_UNICODE` API; please migrate to using " +":c:func:`PyUnicode_AsWideCharString`." +msgstr "" +"这是旧版样式 :c:type:`Py_UNICODE` API; 请迁移至 :c:func:`PyUnicode_AsWideCharString`." + +#: ../../c-api/arg.rst:165 +msgid "" +"``u#`` (:class:`str`) [const Py_UNICODE \\*, int or :c:type:`Py_ssize_t`]" +msgstr "" +"``u#`` (:class:`str`) [const Py_UNICODE \\*, int 或 :c:type:`Py_ssize_t`]" + +#: ../../c-api/arg.rst:159 +msgid "" +"This variant on ``u`` stores into two C variables, the first one a pointer " +"to a Unicode data buffer, the second one its length. This variant allows " +"null code points." +msgstr "``u`` 的变式,存储两个 C 变量,第一个指针指向一个 Unicode 数据缓存区,第二个是它的长度。它允许 null 代码点。" + +#: ../../c-api/arg.rst:173 +msgid "``Z`` (:class:`str` or ``None``) [const Py_UNICODE \\*]" +msgstr "``Z`` (:class:`str` 或 ``None``) [const Py_UNICODE \\*]" + +#: ../../c-api/arg.rst:168 +msgid "" +"Like ``u``, but the Python object may also be ``None``, in which case the " +":c:type:`Py_UNICODE` pointer is set to ``NULL``." +msgstr "" +"与 ``u`` 类似,但 Python 对象也可能为 ``None``,在这种情况下 :c:type:`Py_UNICODE` 指针设置为 " +"``NULL``。" + +#: ../../c-api/arg.rst:181 +msgid "" +"``Z#`` (:class:`str` or ``None``) [const Py_UNICODE \\*, int or " +":c:type:`Py_ssize_t`]" +msgstr "" +"``Z#`` (:class:`str` 或 ``None``) [const Py_UNICODE \\*, int 或 " +":c:type:`Py_ssize_t`]" + +#: ../../c-api/arg.rst:176 +msgid "" +"Like ``u#``, but the Python object may also be ``None``, in which case the " +":c:type:`Py_UNICODE` pointer is set to ``NULL``." +msgstr "" +"与 ``u#`` 类似,但 Python 对象也可能为 ``None``,在这种情况下 :c:type:`Py_UNICODE` 指针设置为 " +"``NULL``。" + +#: ../../c-api/arg.rst:186 +msgid "``U`` (:class:`str`) [PyObject \\*]" +msgstr "``U`` (:class:`str`) [PyObject \\*]" + +#: ../../c-api/arg.rst:184 +msgid "" +"Requires that the Python object is a Unicode object, without attempting any " +"conversion. Raises :exc:`TypeError` if the object is not a Unicode object." +" The C variable may also be declared as :c:type:`PyObject*`." +msgstr "" +"要求 Python 对象为 Unicode 对象,不尝试进行任何转换。 如果该对象不为 Unicode 对象则会引发 :exc:`TypeError`。" +" C 变量也可被声明为 :c:type:`PyObject*`。" + +#: ../../c-api/arg.rst:192 +msgid "``w*`` (read-write :term:`bytes-like object`) [Py_buffer]" +msgstr "``w*`` (可读写 :term:`bytes-like object`) [Py_buffer]" + +#: ../../c-api/arg.rst:189 +msgid "" +"This format accepts any object which implements the read-write buffer " +"interface. It fills a :c:type:`Py_buffer` structure provided by the caller. " +"The buffer may contain embedded null bytes. The caller have to call " +":c:func:`PyBuffer_Release` when it is done with the buffer." +msgstr "" +"这个表达式接受任何实现可读写缓存区接口的对象。它为调用者提供的 :c:type:`Py_buffer` 结构赋值。缓冲区可能存在嵌入的 null " +"字节。当缓冲区使用完后调用者需要调用 :c:func:`PyBuffer_Release`。" + +#: ../../c-api/arg.rst:209 +msgid "``es`` (:class:`str`) [const char \\*encoding, char \\*\\*buffer]" +msgstr "``es`` (:class:`str`) [const char \\*encoding, char \\*\\*buffer]" + +#: ../../c-api/arg.rst:195 +msgid "" +"This variant on ``s`` is used for encoding Unicode into a character buffer. " +"It only works for encoded data without embedded NUL bytes." +msgstr "``s`` 的变式,它将编码后的 Unicode 字符存入字符缓冲区。它只处理没有嵌 NUL 字节的已编码数据。" + +#: ../../c-api/arg.rst:198 +msgid "" +"This format requires two arguments. The first is only used as input, and " +"must be a :c:type:`const char*` which points to the name of an encoding as a" +" NUL-terminated string, or ``NULL``, in which case ``'utf-8'`` encoding is " +"used. An exception is raised if the named encoding is not known to Python. " +"The second argument must be a :c:type:`char**`; the value of the pointer it " +"references will be set to a buffer with the contents of the argument text. " +"The text will be encoded in the encoding specified by the first argument." +msgstr "" +"此格式需要两个参数。 第一个仅用作输入,并且必须为 :c:type:`const char*`,它指向一个以 NUL " +"结束的字符串表示的编码格式名称,或者为 ``NULL``,这表示使用 ``'utf-8'`` 编码格式。 如果为 Python " +"无法识别的编码格式名称则会引发异常。 第二个参数必须为 :c:type:`char**`;它所引用的指针值将被设为带有参数文本内容的缓冲区。 " +"文本将以第一个参数所指定的编码格式进行编码。" + +#: ../../c-api/arg.rst:206 +msgid "" +":c:func:`PyArg_ParseTuple` will allocate a buffer of the needed size, copy " +"the encoded data into this buffer and adjust *\\*buffer* to reference the " +"newly allocated storage. The caller is responsible for calling " +":c:func:`PyMem_Free` to free the allocated buffer after use." +msgstr "" +":c:func:`PyArg_ParseTuple` 会分配一个足够大小的缓冲区,将编码后的数据拷贝进这个缓冲区并且设置 *\\*buffer* " +"引用这个新分配的内存空间。调用者有责任在使用后调用 :c:func:`PyMem_Free` 去释放已经分配的缓冲区。" + +#: ../../c-api/arg.rst:214 +msgid "" +"``et`` (:class:`str`, :class:`bytes` or :class:`bytearray`) [const char " +"\\*encoding, char \\*\\*buffer]" +msgstr "" +"``et`` (:class:`str`, :class:`bytes` or :class:`bytearray`) [const char " +"\\*encoding, char \\*\\*buffer]" + +#: ../../c-api/arg.rst:212 +msgid "" +"Same as ``es`` except that byte string objects are passed through without " +"recoding them. Instead, the implementation assumes that the byte string " +"object uses the encoding passed in as parameter." +msgstr "和 ``es`` 相同,除了不用重编码传入的字符串对象。相反,它假设传入的参数是编码后的字符串类型。" + +#: ../../c-api/arg.rst:245 +msgid "" +"``es#`` (:class:`str`) [const char \\*encoding, char \\*\\*buffer, int or " +":c:type:`Py_ssize_t` \\*buffer_length]" +msgstr "" +"``es#`` (:class:`str`) [const char \\*encoding, char \\*\\*buffer, int 或 " +":c:type:`Py_ssize_t` \\*buffer_length]" + +#: ../../c-api/arg.rst:217 +msgid "" +"This variant on ``s#`` is used for encoding Unicode into a character buffer." +" Unlike the ``es`` format, this variant allows input data which contains NUL" +" characters." +msgstr "``s#`` 的变式,它将已编码的 Unicode 字符存入字符缓冲区。不像 ``es`` 表达式,它允许传入的数据包含 NUL 字符。" + +#: ../../c-api/arg.rst:221 +msgid "" +"It requires three arguments. The first is only used as input, and must be a" +" :c:type:`const char*` which points to the name of an encoding as a NUL-" +"terminated string, or ``NULL``, in which case ``'utf-8'`` encoding is used. " +"An exception is raised if the named encoding is not known to Python. The " +"second argument must be a :c:type:`char**`; the value of the pointer it " +"references will be set to a buffer with the contents of the argument text. " +"The text will be encoded in the encoding specified by the first argument. " +"The third argument must be a pointer to an integer; the referenced integer " +"will be set to the number of bytes in the output buffer." +msgstr "" +"它需要三个参数。 第一个仅用作输入,并且必须为 :c:type:`const char*`,它指向一个编码格式名称,形式为以 NUL 结束的字符串或 " +"``NULL``,在后一种情况下将使用 ``'utf-8'`` 编码格式。 如果编码格式名称无法被 Python 识别则会引发异常。 第二个参数必须为 " +":c:type:`char**`;它所引用的指针值将被设为带有参数文本内容的缓冲区。 文本将以第一个参数所指定的编码格式进行编码。 " +"第三个参数必须为指向一个整数的指针;被引用的整数将被设为输出缓冲区中的字节数。" + +#: ../../c-api/arg.rst:231 +msgid "There are two modes of operation:" +msgstr "有两种操作方式:" + +#: ../../c-api/arg.rst:233 +msgid "" +"If *\\*buffer* points a ``NULL`` pointer, the function will allocate a " +"buffer of the needed size, copy the encoded data into this buffer and set " +"*\\*buffer* to reference the newly allocated storage. The caller is " +"responsible for calling :c:func:`PyMem_Free` to free the allocated buffer " +"after usage." +msgstr "" +"如果 *\\*buffer* 指向 ``NULL`` 指针,则函数将分配所需大小的缓冲区,将编码的数据复制到此缓冲区,并设置 *\\*buffer* " +"以引用新分配的存储。 呼叫者负责调用 :c:func:`PyMem_Free` 以在使用后释放分配的缓冲区。" + +#: ../../c-api/arg.rst:238 +msgid "" +"If *\\*buffer* points to a non-``NULL`` pointer (an already allocated " +"buffer), :c:func:`PyArg_ParseTuple` will use this location as the buffer and" +" interpret the initial value of *\\*buffer_length* as the buffer size. It " +"will then copy the encoded data into the buffer and NUL-terminate it. If " +"the buffer is not large enough, a :exc:`ValueError` will be set." +msgstr "" +"如果 *\\*buffer* 指向非 ``NULL`` 指针(已分配的缓冲区),则 :c:func:`PyArg_ParseTuple` " +"将使用此位置作为缓冲区,并将 *\\*buffer_length* 的初始值解释为缓冲区大小。 然后,它将将编码的数据复制到缓冲区,并终止它。 " +"如果缓冲区不够大,将设置一个 :exc:`ValueError`。" + +#: ../../c-api/arg.rst:244 +msgid "" +"In both cases, *\\*buffer_length* is set to the length of the encoded data " +"without the trailing NUL byte." +msgstr "在这两个例子中,*\\*buffer_length* 被设置为编码后结尾不为 NUL 的数据的长度。" + +#: ../../c-api/arg.rst:250 +msgid "" +"``et#`` (:class:`str`, :class:`bytes` or :class:`bytearray`) [const char " +"\\*encoding, char \\*\\*buffer, int or :c:type:`Py_ssize_t` " +"\\*buffer_length]" +msgstr "" +"``et#`` (:class:`str`, :class:`bytes` 或 :class:`bytearray`) [const char " +"\\*encoding, char \\*\\*buffer, int 或 :c:type:`Py_ssize_t` \\*buffer_length]" + +#: ../../c-api/arg.rst:248 +msgid "" +"Same as ``es#`` except that byte string objects are passed through without " +"recoding them. Instead, the implementation assumes that the byte string " +"object uses the encoding passed in as parameter." +msgstr "和 ``es#`` 相同,除了不用重编码传入的字符串对象。相反,它假设传入的参数是编码后的字符串类型。" + +#: ../../c-api/arg.rst:253 +msgid "Numbers" +msgstr "数字" + +#: ../../c-api/arg.rst:257 +msgid "``b`` (:class:`int`) [unsigned char]" +msgstr "``b`` (:class:`int`) [unsigned char]" + +#: ../../c-api/arg.rst:256 +msgid "" +"Convert a nonnegative Python integer to an unsigned tiny int, stored in a C " +":c:type:`unsigned char`." +msgstr "将一个非负的 Python 整型转化成一个无符号的微整型,存储在一个 C :c:type:`unsigned char` 类型中。" + +#: ../../c-api/arg.rst:261 ../../c-api/arg.rst:600 +msgid "``B`` (:class:`int`) [unsigned char]" +msgstr "``B`` (:class:`int`) [unsigned char]" + +#: ../../c-api/arg.rst:260 +msgid "" +"Convert a Python integer to a tiny int without overflow checking, stored in " +"a C :c:type:`unsigned char`." +msgstr "将一个 Python 整型转化成一个微整型并不检查溢出问题,存储在一个 C :c:type:`unsigned char` 类型中。" + +#: ../../c-api/arg.rst:264 ../../c-api/arg.rst:594 +msgid "``h`` (:class:`int`) [short int]" +msgstr "``h`` (:class:`int`) [short int]" + +#: ../../c-api/arg.rst:264 +msgid "Convert a Python integer to a C :c:type:`short int`." +msgstr "将一个 Python 整型转化成一个 C :c:type:`short int` 短整型。" + +#: ../../c-api/arg.rst:268 ../../c-api/arg.rst:603 +msgid "``H`` (:class:`int`) [unsigned short int]" +msgstr "``H`` (:class:`int`) [unsigned short int]" + +#: ../../c-api/arg.rst:267 +msgid "" +"Convert a Python integer to a C :c:type:`unsigned short int`, without " +"overflow checking." +msgstr "将一个 Python 整型转化成一个 C :c:type:`unsigned short int` 无符号短整型,并不检查溢出问题。" + +#: ../../c-api/arg.rst:271 ../../c-api/arg.rst:588 +msgid "``i`` (:class:`int`) [int]" +msgstr "``i`` (:class:`int`) [int]" + +#: ../../c-api/arg.rst:271 +msgid "Convert a Python integer to a plain C :c:type:`int`." +msgstr "将一个 Python 整型转化成一个 C :c:type:`int` 整型。" + +#: ../../c-api/arg.rst:275 ../../c-api/arg.rst:606 +msgid "``I`` (:class:`int`) [unsigned int]" +msgstr "``I`` (:class:`int`) [unsigned int]" + +#: ../../c-api/arg.rst:274 +msgid "" +"Convert a Python integer to a C :c:type:`unsigned int`, without overflow " +"checking." +msgstr "将一个 Python 整型转化成一个 C :c:type:`unsigned int` 无符号整型,并不检查溢出问题。" + +#: ../../c-api/arg.rst:278 ../../c-api/arg.rst:597 +msgid "``l`` (:class:`int`) [long int]" +msgstr "``l`` (:class:`int`) [long int]" + +#: ../../c-api/arg.rst:278 +msgid "Convert a Python integer to a C :c:type:`long int`." +msgstr "将一个 Python 整型转化成一个 C :c:type:`long int` 长整型。" + +#: ../../c-api/arg.rst:282 ../../c-api/arg.rst:609 +msgid "``k`` (:class:`int`) [unsigned long]" +msgstr "``k`` (:class:`int`) [unsigned long]" + +#: ../../c-api/arg.rst:281 +msgid "" +"Convert a Python integer to a C :c:type:`unsigned long` without overflow " +"checking." +msgstr "将一个Python整型转化成一个C :c:type:`unsigned long int` 无符号长整型,并不检查溢出问题。" + +#: ../../c-api/arg.rst:285 ../../c-api/arg.rst:612 +msgid "``L`` (:class:`int`) [long long]" +msgstr "``L`` (:class:`int`) [long long]" + +#: ../../c-api/arg.rst:285 +msgid "Convert a Python integer to a C :c:type:`long long`." +msgstr "将一个 Python 整型转化成一个 C :c:type:`long long` 长长整型。" + +#: ../../c-api/arg.rst:289 ../../c-api/arg.rst:615 +msgid "``K`` (:class:`int`) [unsigned long long]" +msgstr "``K`` (:class:`int`) [unsigned long long]" + +#: ../../c-api/arg.rst:288 +msgid "" +"Convert a Python integer to a C :c:type:`unsigned long long` without " +"overflow checking." +msgstr "将一个 Python 整型转化成一个 C :c:type:`unsigned long long` 无符号长长整型,并不检查溢出问题。" + +#: ../../c-api/arg.rst:292 ../../c-api/arg.rst:618 +msgid "``n`` (:class:`int`) [:c:type:`Py_ssize_t`]" +msgstr "``n`` (:class:`int`) [:c:type:`Py_ssize_t`]" + +#: ../../c-api/arg.rst:292 +msgid "Convert a Python integer to a C :c:type:`Py_ssize_t`." +msgstr "将一个 Python 整型转化成一个 C :c:type:`Py_ssize_t` Python 元大小类型。" + +#: ../../c-api/arg.rst:299 +msgid "``c`` (:class:`bytes` or :class:`bytearray` of length 1) [char]" +msgstr "``c`` (:class:`bytes` 或者 :class:`bytearray` 长度为 1) [char]" + +#: ../../c-api/arg.rst:295 +msgid "" +"Convert a Python byte, represented as a :class:`bytes` or :class:`bytearray`" +" object of length 1, to a C :c:type:`char`." +msgstr "" +"将一个 Python 字节类型,如一个长度为 1 的 :class:`bytes` 或者 :class:`bytearray` 对象,转化成一个 C " +":c:type:`char` 字符类型。" + +#: ../../c-api/arg.rst:298 +msgid "Allow :class:`bytearray` objects." +msgstr "允许 :class:`bytearray` 类型的对象。" + +#: ../../c-api/arg.rst:303 ../../c-api/arg.rst:626 +msgid "``C`` (:class:`str` of length 1) [int]" +msgstr "``C`` (:class:`str` 长度为 1) [int]" + +#: ../../c-api/arg.rst:302 +msgid "" +"Convert a Python character, represented as a :class:`str` object of length " +"1, to a C :c:type:`int`." +msgstr "" +"将一个 Python 字符,如一个长度为 1 的 :class:`str` 字符串对象,转化成一个 C :c:type:`int` 整型类型。" + +#: ../../c-api/arg.rst:306 ../../c-api/arg.rst:632 +msgid "``f`` (:class:`float`) [float]" +msgstr "``f`` (:class:`float`) [float]" + +#: ../../c-api/arg.rst:306 +msgid "Convert a Python floating point number to a C :c:type:`float`." +msgstr "将一个 Python 浮点数转化成一个 C :c:type:`float` 浮点数。" + +#: ../../c-api/arg.rst:309 ../../c-api/arg.rst:629 +msgid "``d`` (:class:`float`) [double]" +msgstr "``d`` (:class:`float`) [double]" + +#: ../../c-api/arg.rst:309 +msgid "Convert a Python floating point number to a C :c:type:`double`." +msgstr "将一个Python浮点数转化成一个C :c:type:`double` 双精度浮点数。" + +#: ../../c-api/arg.rst:312 +msgid "``D`` (:class:`complex`) [Py_complex]" +msgstr "``D`` (:class:`complex`) [Py_complex]" + +#: ../../c-api/arg.rst:312 +msgid "Convert a Python complex number to a C :c:type:`Py_complex` structure." +msgstr "将一个 Python 复数类型转化成一个 C :c:type:`Py_complex` Python 复数类型。" + +#: ../../c-api/arg.rst:315 +msgid "Other objects" +msgstr "其他对象" + +#: ../../c-api/arg.rst:320 ../../c-api/arg.rst:643 +msgid "``O`` (object) [PyObject \\*]" +msgstr "``O`` (object) [PyObject \\*]" + +#: ../../c-api/arg.rst:318 +msgid "" +"Store a Python object (without any conversion) in a C object pointer. The C" +" program thus receives the actual object that was passed. The object's " +"reference count is not increased. The pointer stored is not ``NULL``." +msgstr "" +"将 Python 对象(不进行任何转换)存储在 C 对象指针中。 因此,C 程序接收已传递的实际对象。 对象的引用计数不会增加。 存储的指针不是 " +"``NULL``。" + +#: ../../c-api/arg.rst:327 +msgid "``O!`` (object) [*typeobject*, PyObject \\*]" +msgstr "``O!`` (object) [*typeobject*, PyObject \\*]" + +#: ../../c-api/arg.rst:323 +msgid "" +"Store a Python object in a C object pointer. This is similar to ``O``, but " +"takes two C arguments: the first is the address of a Python type object, the" +" second is the address of the C variable (of type :c:type:`PyObject*`) into " +"which the object pointer is stored. If the Python object does not have the " +"required type, :exc:`TypeError` is raised." +msgstr "" +"将一个 Python 对象存入一个 C 对象指针。 这类似于 ``O``,但是接受两个 C 参数:第一个是 Python " +"类型对象的地址,第二个是存储对象指针的 C 变量 (类型为 :c:type:`PyObject*`) 的地址。 如果 Python " +"对象不具有所要求的类型,则会引发 :exc:`TypeError`。" + +#: ../../c-api/arg.rst:352 ../../c-api/arg.rst:657 +msgid "``O&`` (object) [*converter*, *anything*]" +msgstr "``O&`` (object) [*converter*, *anything*]" + +#: ../../c-api/arg.rst:332 +msgid "" +"Convert a Python object to a C variable through a *converter* function. " +"This takes two arguments: the first is a function, the second is the address" +" of a C variable (of arbitrary type), converted to :c:type:`void *`. The " +"*converter* function in turn is called as follows::" +msgstr "" +"通过一个 *converter* 函数将一个 Python 对象转换为一个 C 变量。 此函数接受两个参数:第一个是函数,第二个是 C 变量 " +"(类型任意) 的地址,转换为 :c:type:`void *` 类型。 *converter* 函数将以如下方式被调用::" + +#: ../../c-api/arg.rst:339 +msgid "" +"where *object* is the Python object to be converted and *address* is the " +":c:type:`void*` argument that was passed to the :c:func:`PyArg_Parse\\*` " +"function. The returned *status* should be ``1`` for a successful conversion " +"and ``0`` if the conversion has failed. When the conversion fails, the " +"*converter* function should raise an exception and leave the content of " +"*address* unmodified." +msgstr "" +"其中 *object* 是待转换的 Python 对象而 *address* 为传给 :c:func:`PyArg_Parse\\*` 函数的 " +":c:type:`void*` 参数。 返回的 *status* 应当以 ``1`` 代表转换成功而以 ``0`` 代表转换失败。 " +"当转换失败时,*converter* 函数应当引发异常并且会让 *address* 的内容保持未修改状态。" + +#: ../../c-api/arg.rst:345 +msgid "" +"If the *converter* returns ``Py_CLEANUP_SUPPORTED``, it may get called a " +"second time if the argument parsing eventually fails, giving the converter a" +" chance to release any memory that it had already allocated. In this second " +"call, the *object* parameter will be ``NULL``; *address* will have the same " +"value as in the original call." +msgstr "" +"如果 *converter* 返回 ``Py_CLEANUP_SUPPORTED`` " +",则如果参数解析最终失败,它可能会再次调用该函数,从而使转换器有机会释放已分配的任何内存。在第二个调用中,*object* 参数将为 ``NULL`` " +";因此,该参数将为 ``NULL`` ;因此,该参数将为 ``NULL`` ,因此,该参数将为 ``NULL`` (如果值)为 ``NULL`` " +"*address* 的值与原始呼叫中的值相同。" + +#: ../../c-api/arg.rst:351 +msgid "``Py_CLEANUP_SUPPORTED`` was added." +msgstr "``Py_CLEANUP_SUPPORTED`` 被添加。" + +#: ../../c-api/arg.rst:361 +msgid "``p`` (:class:`bool`) [int]" +msgstr "``p`` (:class:`bool`) [int]" + +#: ../../c-api/arg.rst:355 +msgid "" +"Tests the value passed in for truth (a boolean **p**\\ redicate) and " +"converts the result to its equivalent C true/false integer value. Sets the " +"int to ``1`` if the expression was true and ``0`` if it was false. This " +"accepts any valid Python value. See :ref:`truth` for more information about" +" how Python tests values for truth." +msgstr "" +"测试传入的值是否为真(一个布尔判断)并且将结果转化为相对应的 C true/false 整型值。如果表达式为真置 ``1``,假则置 " +"``0``。它接受任何合法的 Python 值。参见 :ref:`truth` 获取更多关于 Python 如何测试值为真的信息。" + +#: ../../c-api/arg.rst:366 ../../c-api/arg.rst:660 +msgid "``(items)`` (:class:`tuple`) [*matching-items*]" +msgstr "``(items)`` (:class:`tuple`) [*matching-items*]" + +#: ../../c-api/arg.rst:364 +msgid "" +"The object must be a Python sequence whose length is the number of format " +"units in *items*. The C arguments must correspond to the individual format " +"units in *items*. Format units for sequences may be nested." +msgstr "" +"对象必须是 Python 序列,它的长度是 *items* 中格式单元的数量。C 参数必须对应 *items* " +"中每一个独立的格式单元。序列中的格式单元可能有嵌套。" + +#: ../../c-api/arg.rst:368 +msgid "" +"It is possible to pass \"long\" integers (integers whose value exceeds the " +"platform's :const:`LONG_MAX`) however no proper range checking is done --- " +"the most significant bits are silently truncated when the receiving field is" +" too small to receive the value (actually, the semantics are inherited from " +"downcasts in C --- your mileage may vary)." +msgstr "" +"传递 \"long\" 整型(整型的值超过了平台的 :const:`LONG_MAX` " +"限制)是可能的,然而没有进行适当的范围检测——当接收字段太小而接收不到值时,最重要的位被静默地截断(实际上,C " +"语言会在语义继承的基础上强制类型转换——期望的值可能会发生变化)。" + +#: ../../c-api/arg.rst:374 +msgid "" +"A few other characters have a meaning in a format string. These may not " +"occur inside nested parentheses. They are:" +msgstr "格式化字符串中还有一些其他的字符具有特殊的涵义。这些可能并不嵌套在圆括号中。它们是:" + +#: ../../c-api/arg.rst:382 +msgid "``|``" +msgstr "``|``" + +#: ../../c-api/arg.rst:378 +msgid "" +"Indicates that the remaining arguments in the Python argument list are " +"optional. The C variables corresponding to optional arguments should be " +"initialized to their default value --- when an optional argument is not " +"specified, :c:func:`PyArg_ParseTuple` does not touch the contents of the " +"corresponding C variable(s)." +msgstr "" +"表明在 Python 参数列表中剩下的参数都是可选的。C 变量对应的可选参数需要初始化为默认值——当一个可选参数没有指定时, " +":c:func:`PyArg_ParseTuple` 不能访问相应的 C 变量(变量集)的内容。" + +#: ../../c-api/arg.rst:391 +msgid "``$``" +msgstr "``$``" + +#: ../../c-api/arg.rst:385 +msgid "" +":c:func:`PyArg_ParseTupleAndKeywords` only: Indicates that the remaining " +"arguments in the Python argument list are keyword-only. Currently, all " +"keyword-only arguments must also be optional arguments, so ``|`` must always" +" be specified before ``$`` in the format string." +msgstr "" +":c:func:`PyArg_ParseTupleAndKeywords` only:表明在 Python " +"参数列表中剩下的参数都是强制关键字参数。当前,所有强制关键字参数都必须也是可选参数,所以格式化字符串中 ``|`` 必须一直在 ``$`` 前面。" + +#: ../../c-api/arg.rst:396 +msgid "``:``" +msgstr "``:``" + +#: ../../c-api/arg.rst:394 +msgid "" +"The list of format units ends here; the string after the colon is used as " +"the function name in error messages (the \"associated value\" of the " +"exception that :c:func:`PyArg_ParseTuple` raises)." +msgstr "" +"格式单元的列表结束标志;冒号后的字符串被用来作为错误消息中的函数名(:c:func:`PyArg_ParseTuple` 函数引发的“关联值”异常)。" + +#: ../../c-api/arg.rst:401 +msgid "``;``" +msgstr "``;``" + +#: ../../c-api/arg.rst:399 +msgid "" +"The list of format units ends here; the string after the semicolon is used " +"as the error message *instead* of the default error message. ``:`` and " +"``;`` mutually exclude each other." +msgstr "格式单元的列表结束标志;分号后的字符串被用来作为错误消息取代默认的错误消息。 ``:`` 和 ``;`` 相互排斥。" + +#: ../../c-api/arg.rst:403 +msgid "" +"Note that any Python object references which are provided to the caller are " +"*borrowed* references; do not decrement their reference count!" +msgstr "注意任何由调用者提供的 Python 对象引用是 *借来的* 引用;不要递减它们的引用计数!" + +#: ../../c-api/arg.rst:406 +msgid "" +"Additional arguments passed to these functions must be addresses of " +"variables whose type is determined by the format string; these are used to " +"store values from the input tuple. There are a few cases, as described in " +"the list of format units above, where these parameters are used as input " +"values; they should match what is specified for the corresponding format " +"unit in that case." +msgstr "" +"传递给这些函数的附加参数必须是由格式化字符串确定的变量的地址;这些都是用来存储输入元组的值。有一些情况,如上面的格式单元列表中所描述的,这些参数作为输入值使用;在这种情况下,它们应该匹配指定的相应的格式单元。" + +#: ../../c-api/arg.rst:412 +msgid "" +"For the conversion to succeed, the *arg* object must match the format and " +"the format must be exhausted. On success, the :c:func:`PyArg_Parse\\*` " +"functions return true, otherwise they return false and raise an appropriate " +"exception. When the :c:func:`PyArg_Parse\\*` functions fail due to " +"conversion failure in one of the format units, the variables at the " +"addresses corresponding to that and the following format units are left " +"untouched." +msgstr "" +"为了转换成功,*arg* 对象必须匹配格式并且格式必须用尽。成功的话,:c:func:`PyArg_Parse\\*` 函数返回 true,反之它们返回" +" false 并且引发一个合适的异常。当 :c:func:`PyArg_Parse\\*` " +"函数因为某一个格式单元转化失败而失败时,对应的以及后续的格式单元地址内的变量都不会被使用。" + +#: ../../c-api/arg.rst:421 +msgid "API Functions" +msgstr "API 函数" + +#: ../../c-api/arg.rst:425 +msgid "" +"Parse the parameters of a function that takes only positional parameters " +"into local variables. Returns true on success; on failure, it returns false" +" and raises the appropriate exception." +msgstr "解析一个函数的参数,表达式中的参数按参数位置顺序存入局部变量中。成功返回 true;失败返回 false 并且引发相应的异常。" + +#: ../../c-api/arg.rst:432 +msgid "" +"Identical to :c:func:`PyArg_ParseTuple`, except that it accepts a va_list " +"rather than a variable number of arguments." +msgstr "和 :c:func:`PyArg_ParseTuple` 相同,然而它接受一个 va_list 类型的参数而不是可变数量的参数集。" + +#: ../../c-api/arg.rst:438 +msgid "" +"Parse the parameters of a function that takes both positional and keyword " +"parameters into local variables. The *keywords* argument is a " +"``NULL``-terminated array of keyword parameter names. Empty names denote " +":ref:`positional-only parameters `. Returns true " +"on success; on failure, it returns false and raises the appropriate " +"exception." +msgstr "" +"分析将位置参数和关键字参数同时转换为局部变量的函数的参数。 *keywords* 参数是关键字参数名称的 ``NULL`` 终止数组。 空名称表示 " +":ref:`positional-only parameters `。成功时返回 " +"true;发生故障时,它将返回 false 并引发相应的异常。" + +#: ../../c-api/arg.rst:445 +msgid "" +"Added support for :ref:`positional-only parameters `." +msgstr "" +"添加了 :ref:`positional-only parameters ` 的支持。" + +#: ../../c-api/arg.rst:452 +msgid "" +"Identical to :c:func:`PyArg_ParseTupleAndKeywords`, except that it accepts a" +" va_list rather than a variable number of arguments." +msgstr "" +"和 :c:func:`PyArg_ParseTupleAndKeywords` 相同,然而它接受一个va_list类型的参数而不是可变数量的参数集。" + +#: ../../c-api/arg.rst:458 +msgid "" +"Ensure that the keys in the keywords argument dictionary are strings. This " +"is only needed if :c:func:`PyArg_ParseTupleAndKeywords` is not used, since " +"the latter already does this check." +msgstr "" +"确保字典中的关键字参数都是字符串。这个函数只被使用于 :c:func:`PyArg_ParseTupleAndKeywords` " +"不被使用的情况下,后者已经不再做这样的检查。" + +#: ../../c-api/arg.rst:468 +msgid "" +"Function used to deconstruct the argument lists of \"old-style\" functions " +"--- these are functions which use the :const:`METH_OLDARGS` parameter " +"parsing method, which has been removed in Python 3. This is not recommended" +" for use in parameter parsing in new code, and most code in the standard " +"interpreter has been modified to no longer use this for that purpose. It " +"does remain a convenient way to decompose other tuples, however, and may " +"continue to be used for that purpose." +msgstr "" +"函数被用来析构“旧类型”函数的参数列表——这些函数使用的 :const:`METH_OLDARGS` 参数解析方法已从 Python 3 " +"中移除。这不被推荐用于新代码的参数解析,并且在标准解释器中的大多数代码已被修改,已不再用于该目的。它仍然方便于分解其他元组,然而可能因为这个目的被继续使用。" + +#: ../../c-api/arg.rst:479 +msgid "" +"A simpler form of parameter retrieval which does not use a format string to " +"specify the types of the arguments. Functions which use this method to " +"retrieve their parameters should be declared as :const:`METH_VARARGS` in " +"function or method tables. The tuple containing the actual parameters " +"should be passed as *args*; it must actually be a tuple. The length of the " +"tuple must be at least *min* and no more than *max*; *min* and *max* may be " +"equal. Additional arguments must be passed to the function, each of which " +"should be a pointer to a :c:type:`PyObject*` variable; these will be filled " +"in with the values from *args*; they will contain borrowed references. The " +"variables which correspond to optional parameters not given by *args* will " +"not be filled in; these should be initialized by the caller. This function " +"returns true on success and false if *args* is not a tuple or contains the " +"wrong number of elements; an exception will be set if there was a failure." +msgstr "" +"一个更简单的参数提取方式,它不使用格式字符串来指定参数类型。 使用这种方法来提取参数的函数应当在函数或方法表中被声明为 " +":const:`METH_VARARGS`。 包含实际参数的元组应当作为 *args* 传入;它必须确实是一个元组。 元组的长度必须至少为 *min* " +"并且不超过 *max*;*min* 和 *max* 可能相等。 额外的参数必须被传入函数,每个参数必须是一个指向 :c:type:`PyObject*`" +" 变量的指针;它们将以来自 *args* 的值填充;它们将包含暂借的引用。 对应于可选参数的变量不会由 *args* " +"给出的值填充;它们将由调用者来初始化。 此函数执行成功时返回真值,如果 *args* " +"不是元组或者包含错误数量的元素则返回假值;如果执行失败则将设置一个异常。" + +#: ../../c-api/arg.rst:493 +msgid "" +"This is an example of the use of this function, taken from the sources for " +"the :mod:`_weakref` helper module for weak references::" +msgstr "这是一个使用此函数的示例,取自 :mod:`_weakref` 帮助模块用来弱化引用的源代码:" + +#: ../../c-api/arg.rst:509 +msgid "" +"The call to :c:func:`PyArg_UnpackTuple` in this example is entirely " +"equivalent to this call to :c:func:`PyArg_ParseTuple`::" +msgstr "" +"这个例子中调用 :c:func:`PyArg_UnpackTuple` 完全等价于调用 :c:func:`PyArg_ParseTuple`::" + +#: ../../c-api/arg.rst:517 +msgid "Building values" +msgstr "创建变量" + +#: ../../c-api/arg.rst:521 +msgid "" +"Create a new value based on a format string similar to those accepted by the" +" :c:func:`PyArg_Parse\\*` family of functions and a sequence of values. " +"Returns the value or ``NULL`` in the case of an error; an exception will be " +"raised if ``NULL`` is returned." +msgstr "" +"基于类似于 :c:func:`PyArg_Parse\\*` 函数系列和一系列值的格式字符串创建新值。 在出现错误时返回值或 ``NULL``;如果返回" +" ``NULL``,将引发异常。" + +#: ../../c-api/arg.rst:526 +msgid "" +":c:func:`Py_BuildValue` does not always build a tuple. It builds a tuple " +"only if its format string contains two or more format units. If the format " +"string is empty, it returns ``None``; if it contains exactly one format " +"unit, it returns whatever object is described by that format unit. To force" +" it to return a tuple of size 0 or one, parenthesize the format string." +msgstr "" +":c:func:`Py_BuildValue` " +"并不一直创建一个元组。只有当它的格式化字符串包含两个或更多的格式单元才会创建一个元组。如果格式化字符串是空,它返回 " +"``None``;如果它包含一个格式单元,它返回由格式单元描述的的任一对象。用圆括号包裹格式化字符串可以强制它返回一个大小为 0 或者 1 的元组。" + +#: ../../c-api/arg.rst:532 +msgid "" +"When memory buffers are passed as parameters to supply data to build " +"objects, as for the ``s`` and ``s#`` formats, the required data is copied. " +"Buffers provided by the caller are never referenced by the objects created " +"by :c:func:`Py_BuildValue`. In other words, if your code invokes " +":c:func:`malloc` and passes the allocated memory to :c:func:`Py_BuildValue`," +" your code is responsible for calling :c:func:`free` for that memory once " +":c:func:`Py_BuildValue` returns." +msgstr "" +"当内存缓存区的数据以参数形式传递用来构建对象时,如 ``s`` 和 ``s#`` 格式单元,会拷贝需要的数据。调用者提供的缓冲区从来都不会被由 " +":c:func:`Py_BuildValue` 创建的对象来引用。换句话说,如果你的代码调用 :c:func:`malloc` " +"并且将分配的内存空间传递给 :c:func:`Py_BuildValue`,你的代码就有责任在 :c:func:`Py_BuildValue` " +"返回时调用 :c:func:`free` 。" + +#: ../../c-api/arg.rst:540 +msgid "" +"In the following description, the quoted form is the format unit; the entry " +"in (round) parentheses is the Python object type that the format unit will " +"return; and the entry in [square] brackets is the type of the C value(s) to " +"be passed." +msgstr "" +"在下面的描述中,双引号的表达式使格式单元;圆括号 () 内的是格式单元将要返回的 Python 对象类型;方括号 [] 内的是传递的 C " +"变量(变量集)的类型。" + +#: ../../c-api/arg.rst:544 +msgid "" +"The characters space, tab, colon and comma are ignored in format strings " +"(but not within format units such as ``s#``). This can be used to make long" +" format strings a tad more readable." +msgstr "" +"字符例如空格,制表符,冒号和逗号在格式化字符串中会被忽略(但是不包括格式单元,如 ``s#``)。这可以使很长的格式化字符串具有更好的可读性。" + +#: ../../c-api/arg.rst:550 +msgid "``s`` (:class:`str` or ``None``) [const char \\*]" +msgstr "``s`` (:class:`str` 或 ``None``) [const char \\*]" + +#: ../../c-api/arg.rst:549 +msgid "" +"Convert a null-terminated C string to a Python :class:`str` object using " +"``'utf-8'`` encoding. If the C string pointer is ``NULL``, ``None`` is used." +msgstr "" +"使用 ``'utf-8'`` 编码将空终止的 C 字符串转换为 Python :class:`str` 对象。如果 C 字符串指针为 " +"``NULL``,则使用 ``None``。" + +#: ../../c-api/arg.rst:555 +msgid "" +"``s#`` (:class:`str` or ``None``) [const char \\*, int or " +":c:type:`Py_ssize_t`]" +msgstr "" +"``s#`` (:class:`str` 或 ``None``) [const char \\*, int 或 " +":c:type:`Py_ssize_t`]" + +#: ../../c-api/arg.rst:553 +msgid "" +"Convert a C string and its length to a Python :class:`str` object using " +"``'utf-8'`` encoding. If the C string pointer is ``NULL``, the length is " +"ignored and ``None`` is returned." +msgstr "" +"使用 ``'utf-8'`` 编码将 C 字符串及其长度转换为 Python :class:`str` 对象。如果 C 字符串指针为 " +"``NULL``,则长度将被忽略,并返回 ``None``。" + +#: ../../c-api/arg.rst:559 +msgid "``y`` (:class:`bytes`) [const char \\*]" +msgstr "``y`` (:class:`bytes`) [const char \\*]" + +#: ../../c-api/arg.rst:558 +msgid "" +"This converts a C string to a Python :class:`bytes` object. If the C string" +" pointer is ``NULL``, ``None`` is returned." +msgstr "" +"这将 C 字符串转换为 Python :class:`bytes` 对象。 如果 C 字符串指针为 ``NULL``,则返回 ``None``。" + +#: ../../c-api/arg.rst:563 +msgid "``y#`` (:class:`bytes`) [const char \\*, int or :c:type:`Py_ssize_t`]" +msgstr "``y#`` (:class:`bytes`) [const char \\*, int 或 :c:type:`Py_ssize_t`]" + +#: ../../c-api/arg.rst:562 +msgid "" +"This converts a C string and its lengths to a Python object. If the C " +"string pointer is ``NULL``, ``None`` is returned." +msgstr "这会将 C 字符串及其长度转换为一个 Python 对象。 如果该 C 字符串指针为 ``NULL``,则返回 ``None``。" + +#: ../../c-api/arg.rst:566 ../../c-api/arg.rst:582 +msgid "Same as ``s``." +msgstr "和 ``s`` 一样。" + +#: ../../c-api/arg.rst:569 +msgid "" +"``z#`` (:class:`str` or ``None``) [const char \\*, int or " +":c:type:`Py_ssize_t`]" +msgstr "" +"``z#`` (:class:`str` 或 ``None``) [const char \\*, int 或 " +":c:type:`Py_ssize_t`]" + +#: ../../c-api/arg.rst:569 ../../c-api/arg.rst:585 +msgid "Same as ``s#``." +msgstr "和 ``s#`` 一样。" + +#: ../../c-api/arg.rst:574 +msgid "``u`` (:class:`str`) [const wchar_t \\*]" +msgstr "``u`` (:class:`str`) [const wchar_t \\*]" + +#: ../../c-api/arg.rst:572 +msgid "" +"Convert a null-terminated :c:type:`wchar_t` buffer of Unicode (UTF-16 or " +"UCS-4) data to a Python Unicode object. If the Unicode buffer pointer is " +"``NULL``, ``None`` is returned." +msgstr "" +"将空终止的 :c:type:`wchar_t` 的 Unicode (UTF-16 或 UCS-4) 数据缓冲区转换为 Python Unicode " +"对象。 如果 Unicode 缓冲区指针为 ``NULL``,则返回 ``None``。" + +#: ../../c-api/arg.rst:579 +msgid "``u#`` (:class:`str`) [const wchar_t \\*, int or :c:type:`Py_ssize_t`]" +msgstr "``u#`` (:class:`str`) [const wchar_t \\*, int 或 :c:type:`Py_ssize_t`]" + +#: ../../c-api/arg.rst:577 +msgid "" +"Convert a Unicode (UTF-16 or UCS-4) data buffer and its length to a Python " +"Unicode object. If the Unicode buffer pointer is ``NULL``, the length is " +"ignored and ``None`` is returned." +msgstr "" +"将 Unicode (UTF-16 或 UCS-4) 数据缓冲区及其长度转换为 Python Unicode 对象。 如果 Unicode " +"缓冲区指针为 ``NULL``,则长度将被忽略,并返回 ``None``。" + +#: ../../c-api/arg.rst:582 +msgid "``U`` (:class:`str` or ``None``) [const char \\*]" +msgstr "``U`` (:class:`str` 或 ``None``) [const char \\*]" + +#: ../../c-api/arg.rst:585 +msgid "" +"``U#`` (:class:`str` or ``None``) [const char \\*, int or " +":c:type:`Py_ssize_t`]" +msgstr "" +"``U#`` (:class:`str` 或 ``None``) [const char \\*, int 或 " +":c:type:`Py_ssize_t`]" + +#: ../../c-api/arg.rst:588 +msgid "Convert a plain C :c:type:`int` to a Python integer object." +msgstr "将一个 C :c:type:`int` 整型转化成 Python 整型对象。" + +#: ../../c-api/arg.rst:591 +msgid "``b`` (:class:`int`) [char]" +msgstr "``b`` (:class:`int`) [char]" + +#: ../../c-api/arg.rst:591 +msgid "Convert a plain C :c:type:`char` to a Python integer object." +msgstr "将一个 C :c:type:`char` 字符型转化成 Python 整型对象。" + +#: ../../c-api/arg.rst:594 +msgid "Convert a plain C :c:type:`short int` to a Python integer object." +msgstr "将一个 C :c:type:`short int` 短整型转化成 Python 整型对象。" + +#: ../../c-api/arg.rst:597 +msgid "Convert a C :c:type:`long int` to a Python integer object." +msgstr "将一个 C :c:type:`long int` 长整型转化成 Python 整型对象。" + +#: ../../c-api/arg.rst:600 +msgid "Convert a C :c:type:`unsigned char` to a Python integer object." +msgstr "将一个 C :c:type:`unsigned char` 无符号字符型转化成 Python 整型对象。" + +#: ../../c-api/arg.rst:603 +msgid "Convert a C :c:type:`unsigned short int` to a Python integer object." +msgstr "将一个 C :c:type:`unsigned long` 无符号短整型转化成 Python 整型对象。" + +#: ../../c-api/arg.rst:606 +msgid "Convert a C :c:type:`unsigned int` to a Python integer object." +msgstr "将一个 C :c:type:`unsigned long` 无符号整型转化成 Python 整型对象。" + +#: ../../c-api/arg.rst:609 +msgid "Convert a C :c:type:`unsigned long` to a Python integer object." +msgstr "将一个 C :c:type:`unsigned long` 无符号长整型转化成 Python 整型对象。" + +#: ../../c-api/arg.rst:612 +msgid "Convert a C :c:type:`long long` to a Python integer object." +msgstr "将一个 C :c:type:`long long` 长长整形转化成 Python 整形对象。" + +#: ../../c-api/arg.rst:615 +msgid "Convert a C :c:type:`unsigned long long` to a Python integer object." +msgstr "将一个 C :c:type:`unsigned long long` 无符号长长整型转化成 Python 整型对象。" + +#: ../../c-api/arg.rst:618 +msgid "Convert a C :c:type:`Py_ssize_t` to a Python integer." +msgstr "将一个 C :c:type:`Py_ssize_t` 类型转化为 Python 整型。" + +#: ../../c-api/arg.rst:622 +msgid "``c`` (:class:`bytes` of length 1) [char]" +msgstr "``c`` (:class:`bytes` 长度为1 ) [char]" + +#: ../../c-api/arg.rst:621 +msgid "" +"Convert a C :c:type:`int` representing a byte to a Python :class:`bytes` " +"object of length 1." +msgstr "将一个 C :c:type:`int` 整型代表的字符转化为 Python :class:`bytes` 长度为 1 的字节对象。" + +#: ../../c-api/arg.rst:625 +msgid "" +"Convert a C :c:type:`int` representing a character to Python :class:`str` " +"object of length 1." +msgstr "将一个 C :c:type:`int` 整型代表的字符转化为 Python :class:`str` 长度为 1 的字符串对象。" + +#: ../../c-api/arg.rst:629 +msgid "Convert a C :c:type:`double` to a Python floating point number." +msgstr "将一个 C :c:type:`double` 双精度浮点数转化为 Python 浮点数类型数字。" + +#: ../../c-api/arg.rst:632 +msgid "Convert a C :c:type:`float` to a Python floating point number." +msgstr "将一个 C :c:type:`float` 单精度浮点数转化为 Python 浮点数类型数字。" + +#: ../../c-api/arg.rst:635 +msgid "``D`` (:class:`complex`) [Py_complex \\*]" +msgstr "``D`` (:class:`complex`) [Py_complex \\*]" + +#: ../../c-api/arg.rst:635 +msgid "Convert a C :c:type:`Py_complex` structure to a Python complex number." +msgstr "将一个 C :c:type:`Py_complex` 类型的结构转化为 Python 复数类型。" + +#: ../../c-api/arg.rst:638 +msgid "" +"Pass a Python object untouched (except for its reference count, which is " +"incremented by one). If the object passed in is a ``NULL`` pointer, it is " +"assumed that this was caused because the call producing the argument found " +"an error and set an exception. Therefore, :c:func:`Py_BuildValue` will " +"return ``NULL`` but won't raise an exception. If no exception has been " +"raised yet, :exc:`SystemError` is set." +msgstr "" +"将 Python 对象传递不变(其引用计数除外,该计数由 1 递增)。 如果传入的对象是 ``NULL`` " +"指针,则假定这是由于生成参数的调用发现错误并设置异常而引起的。因此,:c:func:`Py_BuildValue` 将返回 " +"``NULL``,但不会引发异常。 如果尚未引发异常,则设置 :exc:`SystemError`。" + +#: ../../c-api/arg.rst:646 +msgid "``S`` (object) [PyObject \\*]" +msgstr "``S`` (object) [PyObject \\*]" + +#: ../../c-api/arg.rst:646 +msgid "Same as ``O``." +msgstr "和 ``O`` 相同。" + +#: ../../c-api/arg.rst:651 +msgid "``N`` (object) [PyObject \\*]" +msgstr "``N`` (object) [PyObject \\*]" + +#: ../../c-api/arg.rst:649 +msgid "" +"Same as ``O``, except it doesn't increment the reference count on the " +"object. Useful when the object is created by a call to an object constructor" +" in the argument list." +msgstr "和 ``O`` 相同,然而它并不增加对象的引用计数。当通过调用参数列表中的对象构造器创建对象时很实用。" + +#: ../../c-api/arg.rst:654 +msgid "" +"Convert *anything* to a Python object through a *converter* function. The " +"function is called with *anything* (which should be compatible with " +":c:type:`void*`) as its argument and should return a \"new\" Python object, " +"or ``NULL`` if an error occurred." +msgstr "" +"通过 *converter* 函数将 *anything* 转换为 Python 对象。 该函数调用时会传入 *anything* (应与 " +":c:type:`void*` 兼容) 作为参数并且应当返回一个“新的”Python 对象,或者当发生错误时返回 ``NULL``。" + +#: ../../c-api/arg.rst:660 +msgid "" +"Convert a sequence of C values to a Python tuple with the same number of " +"items." +msgstr "将一个 C 变量序列转换成 Python 元组并保持相同的元素数量。" + +#: ../../c-api/arg.rst:663 +msgid "``[items]`` (:class:`list`) [*matching-items*]" +msgstr "``[items]`` (:class:`list`) [*相关的元素*]" + +#: ../../c-api/arg.rst:663 +msgid "" +"Convert a sequence of C values to a Python list with the same number of " +"items." +msgstr "将一个 C 变量序列转换成 Python 列表并保持相同的元素数量。" + +#: ../../c-api/arg.rst:668 +msgid "``{items}`` (:class:`dict`) [*matching-items*]" +msgstr "``{items}`` (:class:`dict`) [*相关的元素*]" + +#: ../../c-api/arg.rst:666 +msgid "" +"Convert a sequence of C values to a Python dictionary. Each pair of " +"consecutive C values adds one item to the dictionary, serving as key and " +"value, respectively." +msgstr "将一个C变量序列转换成 Python 字典。每一对连续的 C 变量对作为一个元素插入字典中,分别作为关键字和值。" + +#: ../../c-api/arg.rst:670 +msgid "" +"If there is an error in the format string, the :exc:`SystemError` exception " +"is set and ``NULL`` returned." +msgstr "如果格式字符串中出现错误,则设置 :exc:`SystemError` 异常并返回 ``NULL``。" + +#: ../../c-api/arg.rst:675 +msgid "" +"Identical to :c:func:`Py_BuildValue`, except that it accepts a va_list " +"rather than a variable number of arguments." +msgstr "和 :c:func:`Py_BuildValue` 相同,然而它接受一个 va_list 类型的参数而不是可变数量的参数集。" diff --git a/c-api/bool.po b/c-api/bool.po new file mode 100644 index 000000000..85001db01 --- /dev/null +++ b/c-api/bool.po @@ -0,0 +1,75 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) 2001-2024, Python Software Foundation +# This file is distributed under the same license as the Python package. +# FIRST AUTHOR , YEAR. +# +# Translators: +# QR Wang , 2018 +# Shengjing Zhu , 2018 +# Freesand Leo , 2021 +# Rafael Fontenelle , 2024 +# +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: Python 3.9\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2024-04-19 21:47+0000\n" +"PO-Revision-Date: 2017-02-16 17:33+0000\n" +"Last-Translator: Rafael Fontenelle , 2024\n" +"Language-Team: Chinese (China) (https://app.transifex.com/python-doc/teams/5390/zh_CN/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: zh_CN\n" +"Plural-Forms: nplurals=1; plural=0;\n" + +#: ../../c-api/bool.rst:6 +msgid "Boolean Objects" +msgstr "布尔对象" + +#: ../../c-api/bool.rst:8 +msgid "" +"Booleans in Python are implemented as a subclass of integers. There are " +"only two booleans, :const:`Py_False` and :const:`Py_True`. As such, the " +"normal creation and deletion functions don't apply to booleans. The " +"following macros are available, however." +msgstr "" +"Python 中的布尔值是作为整数的子类实现的。只有 :const:`Py_False` 和 :const:`Py_True` " +"两个布尔值。因此,正常的创建和删除功能不适用于布尔值。但是,下列宏可用。" + +#: ../../c-api/bool.rst:16 +msgid "" +"Return true if *o* is of type :c:data:`PyBool_Type`. This function always " +"succeeds." +msgstr "如果 *o* 的类型为 :c:data:`PyBool_Type` 则返回真值。 此函数总是会成功执行。" + +#: ../../c-api/bool.rst:22 +msgid "" +"The Python ``False`` object. This object has no methods. It needs to be " +"treated just like any other object with respect to reference counts." +msgstr "Python的 ``False`` 对象。该对象没有任何方法。它应该象其它使用引用计数管理的对象一样使用。" + +#: ../../c-api/bool.rst:28 +msgid "" +"The Python ``True`` object. This object has no methods. It needs to be " +"treated just like any other object with respect to reference counts." +msgstr "Python的 ``True`` 对象。该对象没有任何方法。它应该象其它使用引用计数管理的对象一样使用。" + +#: ../../c-api/bool.rst:34 +msgid "" +"Return :const:`Py_False` from a function, properly incrementing its " +"reference count." +msgstr "从函数返回 :const:`Py_False` 时,需要增加它的引用计数。" + +#: ../../c-api/bool.rst:40 +msgid "" +"Return :const:`Py_True` from a function, properly incrementing its reference" +" count." +msgstr "从函数返回 :const:`Py_True` 时,需要增加它的引用计数。" + +#: ../../c-api/bool.rst:46 +msgid "" +"Return a new reference to :const:`Py_True` or :const:`Py_False` depending on" +" the truth value of *v*." +msgstr "根据 *v* 的实际值,返回一个 :const:`Py_True` 或者 :const:`Py_False` 的新引用。" diff --git a/c-api/buffer.po b/c-api/buffer.po new file mode 100644 index 000000000..b6206c7af --- /dev/null +++ b/c-api/buffer.po @@ -0,0 +1,837 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) 2001-2024, Python Software Foundation +# This file is distributed under the same license as the Python package. +# FIRST AUTHOR , YEAR. +# +# Translators: +# Fei Yin , 2018 +# 稀饭~~ , 2019 +# jacky , 2019 +# Alpha Du , 2019 +# 豌豆花下猫 , 2019 +# Jiu Hong Jiang , 2019 +# 8af080f2e6702c64bedd01873aed27e8_25aec74 , 2019 +# ppcfish , 2019 +# taotieren , 2020 +# NCJ , 2020 +# Jianchao Su, 2020 +# jsgang , 2020 +# Jiuh.star , 2021 +# Dankinder <2535262279@qq.com>, 2021 +# helloworldSB , 2021 +# Dai Xu , 2021 +# Freesand Leo , 2021 +# Rafael Fontenelle , 2024 +# +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: Python 3.9\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2024-05-31 16:34+0000\n" +"PO-Revision-Date: 2017-02-16 17:33+0000\n" +"Last-Translator: Rafael Fontenelle , 2024\n" +"Language-Team: Chinese (China) (https://app.transifex.com/python-doc/teams/5390/zh_CN/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: zh_CN\n" +"Plural-Forms: nplurals=1; plural=0;\n" + +#: ../../c-api/buffer.rst:11 +msgid "Buffer Protocol" +msgstr "缓冲协议" + +#: ../../c-api/buffer.rst:18 +msgid "" +"Certain objects available in Python wrap access to an underlying memory " +"array or *buffer*. Such objects include the built-in :class:`bytes` and " +":class:`bytearray`, and some extension types like :class:`array.array`. " +"Third-party libraries may define their own types for special purposes, such " +"as image processing or numeric analysis." +msgstr "" +"在 Python 中可使用一些对象来包装对底层内存数组或称 *缓冲* 的访问。此类对象包括内置的 :class:`bytes` 和 " +":class:`bytearray` 以及一些如 :class:`array.array` " +"这样的扩展类型。第三方库也可能会为了特殊的目的而定义它们自己的类型,例如用于图像处理和数值分析等。" + +#: ../../c-api/buffer.rst:24 +msgid "" +"While each of these types have their own semantics, they share the common " +"characteristic of being backed by a possibly large memory buffer. It is " +"then desirable, in some situations, to access that buffer directly and " +"without intermediate copying." +msgstr "虽然这些类型中的每一种都有自己的语义,但它们具有由可能较大的内存缓冲区支持的共同特征。 在某些情况下,希望直接访问该缓冲区而无需中间复制。" + +#: ../../c-api/buffer.rst:29 +msgid "" +"Python provides such a facility at the C level in the form of the " +":ref:`buffer protocol `. This protocol has two sides:" +msgstr "Python 以 :ref:`缓冲协议 ` 的形式在 C 层级上提供这样的功能。 此协议包括两个方面:" + +#: ../../c-api/buffer.rst:34 +msgid "" +"on the producer side, a type can export a \"buffer interface\" which allows " +"objects of that type to expose information about their underlying buffer. " +"This interface is described in the section :ref:`buffer-structs`;" +msgstr "" +"在生产者这一方面,该类型的协议可以导出一个“缓冲区接口”,允许公开它的底层缓冲区信息。该接口的描述信息在 :ref:`buffer-structs` " +"一节中;" + +#: ../../c-api/buffer.rst:38 +msgid "" +"on the consumer side, several means are available to obtain a pointer to the" +" raw underlying data of an object (for example a method parameter)." +msgstr "在消费者一侧,有几种方法可用于获得指向对象的原始底层数据的指针(例如一个方法的形参)。" + +#: ../../c-api/buffer.rst:41 +msgid "" +"Simple objects such as :class:`bytes` and :class:`bytearray` expose their " +"underlying buffer in byte-oriented form. Other forms are possible; for " +"example, the elements exposed by an :class:`array.array` can be multi-byte " +"values." +msgstr "" +"一些简单的对象例如 :class:`bytes` 和 :class:`bytearray` 会以面向字节的形式公开它们的底层缓冲区。 " +"也可能会用其他形式;例如 :class:`array.array` 所公开的元素可以是多字节值。" + +#: ../../c-api/buffer.rst:45 +msgid "" +"An example consumer of the buffer interface is the " +":meth:`~io.BufferedIOBase.write` method of file objects: any object that can" +" export a series of bytes through the buffer interface can be written to a " +"file. While :meth:`write` only needs read-only access to the internal " +"contents of the object passed to it, other methods such as " +":meth:`~io.BufferedIOBase.readinto` need write access to the contents of " +"their argument. The buffer interface allows objects to selectively allow or" +" reject exporting of read-write and read-only buffers." +msgstr "" +"缓冲区接口的消费者的一个例子是文件对象的 :meth:`~io.BufferedIOBase.write` " +"方法:任何可以输出为一系列字节流的对象可以被写入文件。然而 :meth:`write` 方法只需要对于传入对象的只读权限,其他的方法,如 " +":meth:`~io.BufferedIOBase.readinto` " +"需要参数内容的写入权限。缓冲区接口使得对象可以选择性地允许或拒绝读写或只读缓冲区的导出。" + +#: ../../c-api/buffer.rst:53 +msgid "" +"There are two ways for a consumer of the buffer interface to acquire a " +"buffer over a target object:" +msgstr "对于缓冲区接口的使用者而言,有两种方式来获取一个目的对象的缓冲:" + +#: ../../c-api/buffer.rst:56 +msgid "call :c:func:`PyObject_GetBuffer` with the right parameters;" +msgstr "使用正确的参数来调用 :c:func:`PyObject_GetBuffer` 函数;" + +#: ../../c-api/buffer.rst:58 +msgid "" +"call :c:func:`PyArg_ParseTuple` (or one of its siblings) with one of the " +"``y*``, ``w*`` or ``s*`` :ref:`format codes `." +msgstr "" +"调用 :c:func:`PyArg_ParseTuple` (或其同级对象之一) 并传入 ``y*``, ``w*`` or ``s*`` " +":ref:`格式代码 ` 中的一个。" + +#: ../../c-api/buffer.rst:61 +msgid "" +"In both cases, :c:func:`PyBuffer_Release` must be called when the buffer " +"isn't needed anymore. Failure to do so could lead to various issues such as" +" resource leaks." +msgstr "" +"在这两种情况下,当不再需要缓冲区时必须调用 :c:func:`PyBuffer_Release` 。如果此操作失败,可能会导致各种问题,例如资源泄漏。" + +#: ../../c-api/buffer.rst:69 +msgid "Buffer structure" +msgstr "缓冲区结构" + +#: ../../c-api/buffer.rst:71 +msgid "" +"Buffer structures (or simply \"buffers\") are useful as a way to expose the " +"binary data from another object to the Python programmer. They can also be " +"used as a zero-copy slicing mechanism. Using their ability to reference a " +"block of memory, it is possible to expose any data to the Python programmer " +"quite easily. The memory could be a large, constant array in a C extension," +" it could be a raw block of memory for manipulation before passing to an " +"operating system library, or it could be used to pass around structured data" +" in its native, in-memory format." +msgstr "" +"缓冲区结构(或者简单地称为“buffers”)对于将二进制数据从另一个对象公开给 Python " +"程序员非常有用。它们还可以用作零拷贝切片机制。使用它们引用内存块的能力,可以很容易地将任何数据公开给 Python 程序员。内存可以是 C " +"扩展中的一个大的常量数组,也可以是在传递到操作系统库之前用于操作的原始内存块,或者可以用来传递本机内存格式的结构化数据。" + +#: ../../c-api/buffer.rst:80 +msgid "" +"Contrary to most data types exposed by the Python interpreter, buffers are " +"not :c:type:`PyObject` pointers but rather simple C structures. This allows" +" them to be created and copied very simply. When a generic wrapper around a" +" buffer is needed, a :ref:`memoryview ` object can be " +"created." +msgstr "" +"与 Python 解释器公开的大多部数据类型不同,缓冲区不是 :c:type:`PyObject` 指针而是简单的 C 结构。 " +"这使得它们可以非常简单地创建和复制。 当需要为缓冲区加上泛型包装器时,可以创建一个 :ref:`内存视图 ` " +"对象。" + +#: ../../c-api/buffer.rst:86 +msgid "" +"For short instructions how to write an exporting object, see :ref:`Buffer " +"Object Structures `. For obtaining a buffer, see " +":c:func:`PyObject_GetBuffer`." +msgstr "" +"有关如何编写并导出对象的简短说明,请参阅 :ref:`缓冲区对象结构 `。 要获取缓冲区对象,请参阅 " +":c:func:`PyObject_GetBuffer`。" + +#: ../../c-api/buffer.rst:94 +msgid "" +"A pointer to the start of the logical structure described by the buffer " +"fields. This can be any location within the underlying physical memory block" +" of the exporter. For example, with negative :c:member:`~Py_buffer.strides` " +"the value may point to the end of the memory block." +msgstr "" +"指向由缓冲区字段描述的逻辑结构开始的指针。 这可以是导出程序底层物理内存块中的任何位置。 例如,使用负的 " +":c:member:`~Py_buffer.strides` 值可能指向内存块的末尾。" + +#: ../../c-api/buffer.rst:99 +msgid "" +"For :term:`contiguous` arrays, the value points to the beginning of the " +"memory block." +msgstr "对于 :term:`contiguous` ,‘邻接’数组,值指向内存块的开头。" + +#: ../../c-api/buffer.rst:104 +msgid "" +"A new reference to the exporting object. The reference is owned by the " +"consumer and automatically decremented and set to ``NULL`` by " +":c:func:`PyBuffer_Release`. The field is the equivalent of the return value " +"of any standard C-API function." +msgstr "" +"对导出对象的新引用。 该引用归使用者所有,并由 :c:func:`PyBuffer_Release` 自动递减并设置为 ``NULL``。 " +"该字段等于任何标准 C-API 函数的返回值。" + +#: ../../c-api/buffer.rst:109 +msgid "" +"As a special case, for *temporary* buffers that are wrapped by " +":c:func:`PyMemoryView_FromBuffer` or :c:func:`PyBuffer_FillInfo` this field " +"is ``NULL``. In general, exporting objects MUST NOT use this scheme." +msgstr "" +"作为一种特殊情况,对于由 :c:func:`PyMemoryView_FromBuffer` 或 :c:func:`PyBuffer_FillInfo`" +" 包装的 *temporary* 缓冲区,此字段为 ``NULL``。 通常,导出对象不得使用此方案。" + +#: ../../c-api/buffer.rst:116 +msgid "" +"``product(shape) * itemsize``. For contiguous arrays, this is the length of " +"the underlying memory block. For non-contiguous arrays, it is the length " +"that the logical structure would have if it were copied to a contiguous " +"representation." +msgstr "" +"``product(shape) * " +"itemsize``。对于连续数组,这是基础内存块的长度。对于非连续数组,如果逻辑结构复制到连续表示形式,则该长度将具有该长度。" + +#: ../../c-api/buffer.rst:121 +msgid "" +"Accessing ``((char *)buf)[0] up to ((char *)buf)[len-1]`` is only valid if " +"the buffer has been obtained by a request that guarantees contiguity. In " +"most cases such a request will be :c:macro:`PyBUF_SIMPLE` or " +":c:macro:`PyBUF_WRITABLE`." +msgstr "" +"仅当缓冲区是通过保证连续性的请求获取时,才访问 ``((char *)buf)[0] up to ((char *)buf)[len-1]`` " +"时才有效。在大多数情况下,此类请求将为 :c:macro:`PyBUF_SIMPLE` 或 :c:macro:`PyBUF_WRITABLE`。" + +#: ../../c-api/buffer.rst:127 +msgid "" +"An indicator of whether the buffer is read-only. This field is controlled by" +" the :c:macro:`PyBUF_WRITABLE` flag." +msgstr "缓冲区是否为只读的指示器。此字段由 :c:macro:`PyBUF_WRITABLE` 标志控制。" + +#: ../../c-api/buffer.rst:132 +msgid "" +"Item size in bytes of a single element. Same as the value of " +":func:`struct.calcsize` called on non-``NULL`` :c:member:`~Py_buffer.format`" +" values." +msgstr "" +"单个元素的项大小(以字节为单位)。与 :func:`struct.calcsize` 调用非 ``NULL`` " +":c:member:`~Py_buffer.format` 的值相同。" + +#: ../../c-api/buffer.rst:135 +msgid "" +"Important exception: If a consumer requests a buffer without the " +":c:macro:`PyBUF_FORMAT` flag, :c:member:`~Py_buffer.format` will be set to " +"``NULL``, but :c:member:`~Py_buffer.itemsize` still has the value for the " +"original format." +msgstr "" +"重要例外:如果使用者请求的缓冲区没有 :c:macro:`PyBUF_FORMAT` 标志,:c:member:`~Py_buffer.format` " +"将设置为 ``NULL``,但 :c:member:`~Py_buffer.itemsize` 仍具有原始格式的值。" + +#: ../../c-api/buffer.rst:140 +msgid "" +"If :c:member:`~Py_buffer.shape` is present, the equality ``product(shape) * " +"itemsize == len`` still holds and the consumer can use " +":c:member:`~Py_buffer.itemsize` to navigate the buffer." +msgstr "" +"如果 :c:member:`~Py_buffer.shape` 存在,则相等的 ``product(shape) * itemsize == len``" +" 仍然存在,使用者可以使用 :c:member:`~Py_buffer.itemsize` 来导航缓冲区。" + +#: ../../c-api/buffer.rst:144 +msgid "" +"If :c:member:`~Py_buffer.shape` is ``NULL`` as a result of a " +":c:macro:`PyBUF_SIMPLE` or a :c:macro:`PyBUF_WRITABLE` request, the consumer" +" must disregard :c:member:`~Py_buffer.itemsize` and assume ``itemsize == " +"1``." +msgstr "" +"如果 :c:member:`~Py_buffer.shape` 是 ``NULL``,因为结果为 :c:macro:`PyBUF_SIMPLE` 或 " +":c:macro:`PyBUF_WRITABLE` 请求,则使用者必须忽略 :c:member:`~Py_buffer.itemsize`,并假设 " +"``itemsize == 1``。" + +#: ../../c-api/buffer.rst:150 +msgid "" +"A *NUL* terminated string in :mod:`struct` module style syntax describing " +"the contents of a single item. If this is ``NULL``, ``\"B\"`` (unsigned " +"bytes) is assumed." +msgstr "" +"在 :mod:`struct` 模块样式语法中 *NUL* 字符串,描述单个项的内容。如果这是 ``NULL``,则假定为 ``\"B\"`` " +"(无符号字节) 。" + +#: ../../c-api/buffer.rst:154 +msgid "This field is controlled by the :c:macro:`PyBUF_FORMAT` flag." +msgstr "此字段由 :c:macro:`PyBUF_FORMAT` 标志控制。" + +#: ../../c-api/buffer.rst:158 +msgid "" +"The number of dimensions the memory represents as an n-dimensional array. If" +" it is ``0``, :c:member:`~Py_buffer.buf` points to a single item " +"representing a scalar. In this case, :c:member:`~Py_buffer.shape`, " +":c:member:`~Py_buffer.strides` and :c:member:`~Py_buffer.suboffsets` MUST be" +" ``NULL``." +msgstr "" +"内存表示为 n 维数组的维数。 如果是 ``0``, :c:member:`~Py_buffer.buf` 指向表示标量的单个项目。 " +"在这种情况下,:c:member:`~Py_buffer.shape`、:c:member:`~Py_buffer.strides` 和 " +":c:member:`~Py_buffer.suboffsets` 必须是 ``NULL`` 。" + +#: ../../c-api/buffer.rst:163 +msgid "" +"The macro :c:macro:`PyBUF_MAX_NDIM` limits the maximum number of dimensions " +"to 64. Exporters MUST respect this limit, consumers of multi-dimensional " +"buffers SHOULD be able to handle up to :c:macro:`PyBUF_MAX_NDIM` dimensions." +msgstr "" +"宏 :c:macro:`PyBUF_MAX_NDIM` 将最大维度数限制为 64。 导出程序必须遵守这个限制,多维缓冲区的使用者应该能够处理最多 " +":c:macro:`PyBUF_MAX_NDIM` 维度。" + +#: ../../c-api/buffer.rst:169 +msgid "" +"An array of :c:type:`Py_ssize_t` of length :c:member:`~Py_buffer.ndim` " +"indicating the shape of the memory as an n-dimensional array. Note that " +"``shape[0] * ... * shape[ndim-1] * itemsize`` MUST be equal to " +":c:member:`~Py_buffer.len`." +msgstr "" +"一个长度为 :c:type:`Py_ssize_t` 的数组 :c:member:`~Py_buffer.ndim` 表示作为 n 维数组的内存形状。 " +"请注意,``shape[0] * ... * shape[ndim-1] * itemsize`` 必须等于 " +":c:member:`~Py_buffer.len`。" + +#: ../../c-api/buffer.rst:174 +msgid "" +"Shape values are restricted to ``shape[n] >= 0``. The case ``shape[n] == 0``" +" requires special attention. See `complex arrays`_ for further information." +msgstr "" +"Shape 形状数组中的值被限定在 ``shape[n] >= 0`` 。 ``shape[n] == 0`` 这一情形需要特别注意。更多信息请参阅 " +"`complex arrays`_ 。" + +#: ../../c-api/buffer.rst:178 +msgid "The shape array is read-only for the consumer." +msgstr "shape 数组对于使用者来说是只读的。" + +#: ../../c-api/buffer.rst:182 +msgid "" +"An array of :c:type:`Py_ssize_t` of length :c:member:`~Py_buffer.ndim` " +"giving the number of bytes to skip to get to a new element in each " +"dimension." +msgstr "" +"一个长度为 :c:type:`Py_ssize_t` 的数组 :c:member:`~Py_buffer.ndim` " +"给出要跳过的字节数以获取每个尺寸中的新元素。" + +#: ../../c-api/buffer.rst:186 +msgid "" +"Stride values can be any integer. For regular arrays, strides are usually " +"positive, but a consumer MUST be able to handle the case ``strides[n] <= " +"0``. See `complex arrays`_ for further information." +msgstr "" +"Stride 步幅数组中的值可以为任何整数。对于常规数组,步幅通常为正数,但是使用者必须能够处理 ``strides[n] <= 0`` " +"的情况。更多信息请参阅 `complex arrays`_ 。" + +#: ../../c-api/buffer.rst:190 +msgid "The strides array is read-only for the consumer." +msgstr "strides数组对用户来说是只读的。" + +#: ../../c-api/buffer.rst:194 +msgid "" +"An array of :c:type:`Py_ssize_t` of length :c:member:`~Py_buffer.ndim`. If " +"``suboffsets[n] >= 0``, the values stored along the nth dimension are " +"pointers and the suboffset value dictates how many bytes to add to each " +"pointer after de-referencing. A suboffset value that is negative indicates " +"that no de-referencing should occur (striding in a contiguous memory block)." +msgstr "" +"一个长度为 :c:member:`~Py_buffer.ndim` 类型为 :c:type:`Py_ssize_t` 的数组 。如果 " +"``suboffsets[n] >= 0``,则第 n 维存储的是指针,suboffset " +"值决定了解除引用时要给指针增加多少字节的偏移。suboffset 为负值,则表示不应解除引用(在连续内存块中移动)。" + +#: ../../c-api/buffer.rst:201 +msgid "" +"If all suboffsets are negative (i.e. no de-referencing is needed), then this" +" field must be ``NULL`` (the default value)." +msgstr "如果所有子偏移均为负(即无需取消引用),则此字段必须为 ``NULL`` (默认值)。" + +#: ../../c-api/buffer.rst:204 +msgid "" +"This type of array representation is used by the Python Imaging Library " +"(PIL). See `complex arrays`_ for further information how to access elements " +"of such an array." +msgstr "" +"Python Imaging Library (PIL) 中使用了这种类型的数组表达方式。请参阅 `complex arrays`_ " +"来了解如何从这样一个数组中访问元素。" + +#: ../../c-api/buffer.rst:208 +msgid "The suboffsets array is read-only for the consumer." +msgstr "suboffsets 数组对于使用者来说是只读的。" + +#: ../../c-api/buffer.rst:212 +msgid "" +"This is for use internally by the exporting object. For example, this might " +"be re-cast as an integer by the exporter and used to store flags about " +"whether or not the shape, strides, and suboffsets arrays must be freed when " +"the buffer is released. The consumer MUST NOT alter this value." +msgstr "" +"供输出对象内部使用。比如可能被输出程序重组为一个整数,用于存储一个标志,标明在缓冲区释放时是否必须释放 shape、strides 和 " +"suboffsets 数组。消费者程序 *不得* 修改该值。" + +#: ../../c-api/buffer.rst:221 +msgid "Buffer request types" +msgstr "缓冲区请求的类型" + +#: ../../c-api/buffer.rst:223 +msgid "" +"Buffers are usually obtained by sending a buffer request to an exporting " +"object via :c:func:`PyObject_GetBuffer`. Since the complexity of the logical" +" structure of the memory can vary drastically, the consumer uses the *flags*" +" argument to specify the exact buffer type it can handle." +msgstr "" +"通常,通过 :c:func:`PyObject_GetBuffer` " +"向输出对象发送缓冲区请求,即可获得缓冲区。由于内存的逻辑结构复杂,可能会有很大差异,缓冲区使用者可用 *flags* " +"参数指定其能够处理的缓冲区具体类型。" + +#: ../../c-api/buffer.rst:228 +msgid "" +"All :c:data:`Py_buffer` fields are unambiguously defined by the request " +"type." +msgstr "所有 :c:data:`Py_buffer` 字段均由请求类型明确定义。" + +#: ../../c-api/buffer.rst:232 +msgid "request-independent fields" +msgstr "与请求无关的字段" + +#: ../../c-api/buffer.rst:233 +msgid "" +"The following fields are not influenced by *flags* and must always be filled" +" in with the correct values: :c:member:`~Py_buffer.obj`, " +":c:member:`~Py_buffer.buf`, :c:member:`~Py_buffer.len`, " +":c:member:`~Py_buffer.itemsize`, :c:member:`~Py_buffer.ndim`." +msgstr "" +"以下字段不会被 *flags* 影响,并且必须总是用正确的值填充::c:member:`~Py_buffer.obj`, " +":c:member:`~Py_buffer.buf`,:c:member:`~Py_buffer.len`,:c:member:`~Py_buffer.itemsize`,:c:member:`~Py_buffer.ndim`。" + +#: ../../c-api/buffer.rst:239 +msgid "readonly, format" +msgstr "只读,格式" + +#: ../../c-api/buffer.rst:243 +msgid "" +"Controls the :c:member:`~Py_buffer.readonly` field. If set, the exporter " +"MUST provide a writable buffer or else report failure. Otherwise, the " +"exporter MAY provide either a read-only or writable buffer, but the choice " +"MUST be consistent for all consumers." +msgstr "" +"控制 :c:member:`~Py_buffer.readonly` 字段。如果设置了,输出程序 *必须* " +"提供一个可写的缓冲区,否则报告失败。若未设置,输出程序 *可以* 提供只读或可写的缓冲区,但对所有消费者程序 *必须* 保持一致。" + +#: ../../c-api/buffer.rst:250 +msgid "" +"Controls the :c:member:`~Py_buffer.format` field. If set, this field MUST be" +" filled in correctly. Otherwise, this field MUST be ``NULL``." +msgstr "" +"控制 :c:member:`~Py_buffer.format` 字段。 如果设置,则必须正确填写此字段。其他情况下,此字段必须为 ``NULL``。" + +#: ../../c-api/buffer.rst:254 +msgid "" +":c:macro:`PyBUF_WRITABLE` can be \\|'d to any of the flags in the next " +"section. Since :c:macro:`PyBUF_SIMPLE` is defined as 0, " +":c:macro:`PyBUF_WRITABLE` can be used as a stand-alone flag to request a " +"simple writable buffer." +msgstr "" +":c:macro:`PyBUF_WRITABLE` 可以和下一节的所有标志联用。由于 :c:macro:`PyBUF_SIMPLE` 定义为 0,所以 " +":c:macro:`PyBUF_WRITABLE` 可以作为一个独立的标志,用于请求一个简单的可写缓冲区。" + +#: ../../c-api/buffer.rst:258 +msgid "" +":c:macro:`PyBUF_FORMAT` can be \\|'d to any of the flags except " +":c:macro:`PyBUF_SIMPLE`. The latter already implies format ``B`` (unsigned " +"bytes)." +msgstr "" +":c:macro:`PyBUF_FORMAT` 可以被设为除了 :c:macro:`PyBUF_SIMPLE` 之外的任何标志。 后者已经按暗示了 " +"``B`` (无符号字节串)格式。" + +#: ../../c-api/buffer.rst:263 +msgid "shape, strides, suboffsets" +msgstr "形状,步幅,子偏移量" + +#: ../../c-api/buffer.rst:265 +msgid "" +"The flags that control the logical structure of the memory are listed in " +"decreasing order of complexity. Note that each flag contains all bits of the" +" flags below it." +msgstr "控制内存逻辑结构的标志按照复杂度的递减顺序列出。注意,每个标志包含它下面的所有标志。" + +#: ../../c-api/buffer.rst:272 ../../c-api/buffer.rst:296 +#: ../../c-api/buffer.rst:321 +msgid "Request" +msgstr "请求" + +#: ../../c-api/buffer.rst:272 ../../c-api/buffer.rst:296 +#: ../../c-api/buffer.rst:321 +msgid "shape" +msgstr "形状" + +#: ../../c-api/buffer.rst:272 ../../c-api/buffer.rst:296 +#: ../../c-api/buffer.rst:321 +msgid "strides" +msgstr "步幅" + +#: ../../c-api/buffer.rst:272 ../../c-api/buffer.rst:296 +#: ../../c-api/buffer.rst:321 +msgid "suboffsets" +msgstr "子偏移量" + +#: ../../c-api/buffer.rst:274 ../../c-api/buffer.rst:274 +#: ../../c-api/buffer.rst:276 ../../c-api/buffer.rst:276 +#: ../../c-api/buffer.rst:278 ../../c-api/buffer.rst:298 +#: ../../c-api/buffer.rst:298 ../../c-api/buffer.rst:300 +#: ../../c-api/buffer.rst:300 ../../c-api/buffer.rst:302 +#: ../../c-api/buffer.rst:302 ../../c-api/buffer.rst:304 +#: ../../c-api/buffer.rst:323 ../../c-api/buffer.rst:323 +#: ../../c-api/buffer.rst:323 ../../c-api/buffer.rst:325 +#: ../../c-api/buffer.rst:325 ../../c-api/buffer.rst:325 +#: ../../c-api/buffer.rst:327 ../../c-api/buffer.rst:327 +#: ../../c-api/buffer.rst:327 ../../c-api/buffer.rst:329 +#: ../../c-api/buffer.rst:329 ../../c-api/buffer.rst:329 +#: ../../c-api/buffer.rst:331 ../../c-api/buffer.rst:331 +#: ../../c-api/buffer.rst:333 ../../c-api/buffer.rst:333 +#: ../../c-api/buffer.rst:335 ../../c-api/buffer.rst:337 +msgid "yes" +msgstr "是" + +#: ../../c-api/buffer.rst:274 ../../c-api/buffer.rst:323 +#: ../../c-api/buffer.rst:325 +msgid "if needed" +msgstr "如果需要的话" + +#: ../../c-api/buffer.rst:276 ../../c-api/buffer.rst:278 +#: ../../c-api/buffer.rst:278 ../../c-api/buffer.rst:280 +#: ../../c-api/buffer.rst:280 ../../c-api/buffer.rst:280 +#: ../../c-api/buffer.rst:298 ../../c-api/buffer.rst:300 +#: ../../c-api/buffer.rst:302 ../../c-api/buffer.rst:304 +#: ../../c-api/buffer.rst:304 ../../c-api/buffer.rst:327 +#: ../../c-api/buffer.rst:329 ../../c-api/buffer.rst:331 +#: ../../c-api/buffer.rst:331 ../../c-api/buffer.rst:333 +#: ../../c-api/buffer.rst:333 ../../c-api/buffer.rst:335 +#: ../../c-api/buffer.rst:335 ../../c-api/buffer.rst:335 +#: ../../c-api/buffer.rst:337 ../../c-api/buffer.rst:337 +#: ../../c-api/buffer.rst:337 +msgid "NULL" +msgstr "NULL" + +#: ../../c-api/buffer.rst:287 +msgid "contiguity requests" +msgstr "连续性的请求" + +#: ../../c-api/buffer.rst:289 +msgid "" +"C or Fortran :term:`contiguity ` can be explicitly requested, " +"with and without stride information. Without stride information, the buffer " +"must be C-contiguous." +msgstr "" +"可以显式地请求C 或 Fortran :term:`连续 ` ,不管有没有步幅信息。若没有步幅信息,则缓冲区必须是 C-连续的。" + +#: ../../c-api/buffer.rst:296 ../../c-api/buffer.rst:321 +msgid "contig" +msgstr "邻接" + +#: ../../c-api/buffer.rst:298 ../../c-api/buffer.rst:304 +#: ../../c-api/buffer.rst:335 ../../c-api/buffer.rst:337 +msgid "C" +msgstr "C" + +#: ../../c-api/buffer.rst:300 +msgid "F" +msgstr "F" + +#: ../../c-api/buffer.rst:302 +msgid "C or F" +msgstr "C 或 F" + +#: ../../c-api/buffer.rst:304 +msgid ":c:macro:`PyBUF_ND`" +msgstr ":c:macro:`PyBUF_ND`" + +#: ../../c-api/buffer.rst:309 +msgid "compound requests" +msgstr "复合请求" + +#: ../../c-api/buffer.rst:311 +msgid "" +"All possible requests are fully defined by some combination of the flags in " +"the previous section. For convenience, the buffer protocol provides " +"frequently used combinations as single flags." +msgstr "所有可能的请求都由上一节中某些标志的组合完全定义。为方便起见,缓冲区协议提供常用的组合作为单个标志。" + +#: ../../c-api/buffer.rst:315 +msgid "" +"In the following table *U* stands for undefined contiguity. The consumer " +"would have to call :c:func:`PyBuffer_IsContiguous` to determine contiguity." +msgstr "在下表中,*U* 代表连续性未定义。消费者程序必须调用 :c:func:`PyBuffer_IsContiguous` 以确定连续性。" + +#: ../../c-api/buffer.rst:321 +msgid "readonly" +msgstr "readonly" + +#: ../../c-api/buffer.rst:321 +msgid "format" +msgstr "format" + +#: ../../c-api/buffer.rst:323 ../../c-api/buffer.rst:325 +#: ../../c-api/buffer.rst:327 ../../c-api/buffer.rst:329 +#: ../../c-api/buffer.rst:331 ../../c-api/buffer.rst:333 +msgid "U" +msgstr "U" + +#: ../../c-api/buffer.rst:323 ../../c-api/buffer.rst:327 +#: ../../c-api/buffer.rst:331 ../../c-api/buffer.rst:335 +msgid "0" +msgstr "0" + +#: ../../c-api/buffer.rst:325 ../../c-api/buffer.rst:329 +#: ../../c-api/buffer.rst:333 ../../c-api/buffer.rst:337 +msgid "1 or 0" +msgstr "1 或 0" + +#: ../../c-api/buffer.rst:342 +msgid "Complex arrays" +msgstr "复杂数组" + +#: ../../c-api/buffer.rst:345 +msgid "NumPy-style: shape and strides" +msgstr "NumPy-风格:形状和步幅" + +#: ../../c-api/buffer.rst:347 +msgid "" +"The logical structure of NumPy-style arrays is defined by " +":c:member:`~Py_buffer.itemsize`, :c:member:`~Py_buffer.ndim`, " +":c:member:`~Py_buffer.shape` and :c:member:`~Py_buffer.strides`." +msgstr "" +"NumPy 风格数组的逻辑结构由 :c:member:`~Py_buffer.itemsize` 、 " +":c:member:`~Py_buffer.ndim` 、 :c:member:`~Py_buffer.shape` 和 " +":c:member:`~Py_buffer.strides` 定义。" + +#: ../../c-api/buffer.rst:350 +msgid "" +"If ``ndim == 0``, the memory location pointed to by " +":c:member:`~Py_buffer.buf` is interpreted as a scalar of size " +":c:member:`~Py_buffer.itemsize`. In that case, both " +":c:member:`~Py_buffer.shape` and :c:member:`~Py_buffer.strides` are " +"``NULL``." +msgstr "" +"如果 ``ndim == 0`` , :c:member:`~Py_buffer.buf` 指向的内存位置被解释为大小为 " +":c:member:`~Py_buffer.itemsize` 的标量。这时, :c:member:`~Py_buffer.shape` 和 " +":c:member:`~Py_buffer.strides` 都为 ``NULL``。" + +#: ../../c-api/buffer.rst:354 +msgid "" +"If :c:member:`~Py_buffer.strides` is ``NULL``, the array is interpreted as a" +" standard n-dimensional C-array. Otherwise, the consumer must access an " +"n-dimensional array as follows:" +msgstr "" +"如果 :c:member:`~Py_buffer.strides` 为 ``NULL``,则数组将被解释为一个标准的 n 维 C " +"语言数组。否则,消费者程序必须按如下方式访问 n 维数组:" + +#: ../../c-api/buffer.rst:364 +msgid "" +"As noted above, :c:member:`~Py_buffer.buf` can point to any location within " +"the actual memory block. An exporter can check the validity of a buffer with" +" this function:" +msgstr "如上所述,:c:member:`~Py_buffer.buf` 可以指向实际内存块中的任意位置。输出者程序可以用该函数检查缓冲区的有效性。" + +#: ../../c-api/buffer.rst:398 +msgid "PIL-style: shape, strides and suboffsets" +msgstr "PIL-风格:形状,步幅和子偏移量" + +#: ../../c-api/buffer.rst:400 +msgid "" +"In addition to the regular items, PIL-style arrays can contain pointers that" +" must be followed in order to get to the next element in a dimension. For " +"example, the regular three-dimensional C-array ``char v[2][2][3]`` can also " +"be viewed as an array of 2 pointers to 2 two-dimensional arrays: ``char " +"(*v[2])[2][3]``. In suboffsets representation, those two pointers can be " +"embedded at the start of :c:member:`~Py_buffer.buf`, pointing to two ``char " +"x[2][3]`` arrays that can be located anywhere in memory." +msgstr "" +"除了常规项之外, PIL 风格的数组还可以包含指针,必须跟随这些指针才能到达维度的下一个元素。例如,常规的三维 C 语言数组 ``char " +"v[2][2][3]`` 可以看作是一个指向 2 个二维数组的 2 个指针:``char " +"(*v[2])[2][3]``。在子偏移表示中,这两个指针可以嵌入在 :c:member:`~Py_buffer.buf` " +"的开头,指向两个可以位于内存任何位置的 ``char x[2][3]`` 数组。" + +#: ../../c-api/buffer.rst:409 +msgid "" +"Here is a function that returns a pointer to the element in an N-D array " +"pointed to by an N-dimensional index when there are both non-``NULL`` " +"strides and suboffsets::" +msgstr "这是一个函数,当n维索引所指向的N-D数组中有 ``NULL`` 步长和子偏移量时,它返回一个指针" + +#: ../../c-api/buffer.rst:428 +msgid "Buffer-related functions" +msgstr "缓冲区相关函数" + +#: ../../c-api/buffer.rst:432 +msgid "" +"Return ``1`` if *obj* supports the buffer interface otherwise ``0``. When " +"``1`` is returned, it doesn't guarantee that :c:func:`PyObject_GetBuffer` " +"will succeed. This function always succeeds." +msgstr "" +"如果 *obj* 支持缓冲区接口,则返回 ``1``,否则返回 ``0``。 返回 ``1`` 时不保证 " +":c:func:`PyObject_GetBuffer` 一定成功。本函数一定调用成功。" + +#: ../../c-api/buffer.rst:439 +msgid "" +"Send a request to *exporter* to fill in *view* as specified by *flags*. If " +"the exporter cannot provide a buffer of the exact type, it MUST raise " +":c:data:`PyExc_BufferError`, set ``view->obj`` to ``NULL`` and return " +"``-1``." +msgstr "" +"向 *输出器程序* 发送请求,按照 *flags* 指定的内容填充 *view*。如果 输出器程序不能提供准确类型的缓冲区,*必须* 触发 " +":c:data:`PyExc_BufferError`,设置 ``view->obj`` 为 ``NULL`` 并返回 ``-1``。" + +#: ../../c-api/buffer.rst:444 +msgid "" +"On success, fill in *view*, set ``view->obj`` to a new reference to " +"*exporter* and return 0. In the case of chained buffer providers that " +"redirect requests to a single object, ``view->obj`` MAY refer to this object" +" instead of *exporter* (See :ref:`Buffer Object Structures `)." +msgstr "" +"成功时,填充 *view*,将 ``view->obj`` 设为对 *exporter* 的新引用,并返回 0。 " +"当链式缓冲区提供程序将请求重定向到一个对象时,``view->obj`` 可以引用该对象而不是 *exporter* (参见 " +":ref:`缓冲区对象结构 `)。" + +#: ../../c-api/buffer.rst:449 +msgid "" +"Successful calls to :c:func:`PyObject_GetBuffer` must be paired with calls " +"to :c:func:`PyBuffer_Release`, similar to :c:func:`malloc` and " +":c:func:`free`. Thus, after the consumer is done with the buffer, " +":c:func:`PyBuffer_Release` must be called exactly once." +msgstr "" +":c:func:`PyObject_GetBuffer` 必须与 :c:func:`PyBuffer_Release` 同时调用成功,类似于 " +":c:func:`malloc` 和 :c:func:`free`。因此,消费者程序用完缓冲区后, :c:func:`PyBuffer_Release`" +" 必须保证被调用一次。" + +#: ../../c-api/buffer.rst:457 +msgid "" +"Release the buffer *view* and decrement the reference count for " +"``view->obj``. This function MUST be called when the buffer is no longer " +"being used, otherwise reference leaks may occur." +msgstr "释放缓冲区 *view* 并递减 ``view->obj`` 的引用计数。该函数必须在缓冲区不再使用时才能调用,否则可能会发生引用泄漏。" + +#: ../../c-api/buffer.rst:461 +msgid "" +"It is an error to call this function on a buffer that was not obtained via " +":c:func:`PyObject_GetBuffer`." +msgstr "若该函数针对的缓冲区不是通过 :c:func:`PyObject_GetBuffer` 获得的,将会出错。" + +#: ../../c-api/buffer.rst:467 +msgid "" +"Return the implied :c:data:`~Py_buffer.itemsize` from " +":c:data:`~Py_buffer.format`. On error, raise an exception and return -1." +msgstr "" +"返回 :c:data:`~Py_buffer.itemsize` 中隐含的 :c:data:`~Py_buffer.format` " +"。如果出错,会触发异常并返回 -1。" + +#: ../../c-api/buffer.rst:475 +msgid "" +"Return ``1`` if the memory defined by the *view* is C-style (*order* is " +"``'C'``) or Fortran-style (*order* is ``'F'``) :term:`contiguous` or either " +"one (*order* is ``'A'``). Return ``0`` otherwise. This function always " +"succeeds." +msgstr "" +"如果 *view* 定义的内存是 C 风格(*order* 为 ``'C'``)或 Fortran 风格(*order* 为 ``'F'``) " +":term:`contiguous` 或其中之一(*order* 是 ``'A'``),则返回 ``1``。否则返回 ``0``。该函数总会成功。" + +#: ../../c-api/buffer.rst:482 +msgid "" +"Get the memory area pointed to by the *indices* inside the given *view*. " +"*indices* must point to an array of ``view->ndim`` indices." +msgstr "" +"获取给定 *view* 内的 *indices* 所指向的内存区域。*indices* 必须指向一个 ``view->ndim`` 索引的数组。" + +#: ../../c-api/buffer.rst:488 +msgid "" +"Copy contiguous *len* bytes from *buf* to *view*. *fort* can be ``'C'`` or " +"``'F'`` (for C-style or Fortran-style ordering). ``0`` is returned on " +"success, ``-1`` on error." +msgstr "" +"从 *buf* 复制连续的 *len* 字节到 *view* 。*fort* 可以是 ``'C'`` 或 ``'F'`` (对应于 C 风格或 " +"Fortran 风格的顺序)。成功时返回 ``0`` ,错误时返回 ``-1`` 。" + +#: ../../c-api/buffer.rst:495 +msgid "" +"Copy *len* bytes from *src* to its contiguous representation in *buf*. " +"*order* can be ``'C'`` or ``'F'`` or ``'A'`` (for C-style or Fortran-style " +"ordering or either one). ``0`` is returned on success, ``-1`` on error." +msgstr "" +"从 *src* 复制 *len* 字节到 *buf* ,成为连续字节串的形式。*order* 可以是 ``'C'`` 或 ``'F'`` 或 " +"``'A'`` (对应于 C 风格、Fortran 风格的顺序或其中任意一种)。成功时返回 ``0`` ,出错时返回 ``-1`` 。" + +#: ../../c-api/buffer.rst:499 +msgid "This function fails if *len* != *src->len*." +msgstr "如果 *len* != *src->len* 则此函数将报错。" + +#: ../../c-api/buffer.rst:504 +msgid "" +"Fill the *strides* array with byte-strides of a :term:`contiguous` (C-style " +"if *order* is ``'C'`` or Fortran-style if *order* is ``'F'``) array of the " +"given shape with the given number of bytes per element." +msgstr "" +"用给定形状的 :term:`contiguous` 字节串数组 (如果 *order* 为 ``'C'`` 则为 C 风格,如果 *order* 为 " +"``'F'`` 则为 Fortran 风格) 来填充 *strides* 数组,每个元素具有给定的字节数。" + +#: ../../c-api/buffer.rst:511 +msgid "" +"Handle buffer requests for an exporter that wants to expose *buf* of size " +"*len* with writability set according to *readonly*. *buf* is interpreted as " +"a sequence of unsigned bytes." +msgstr "" +"处理导出程序的缓冲区请求,该导出程序要公开大小为 *len* 的 *buf* ,并根据 *readonly* 设置可写性。*bug* " +"被解释为一个无符号字节序列。" + +#: ../../c-api/buffer.rst:515 +msgid "" +"The *flags* argument indicates the request type. This function always fills " +"in *view* as specified by flags, unless *buf* has been designated as read-" +"only and :c:macro:`PyBUF_WRITABLE` is set in *flags*." +msgstr "" +"参数 *flags* 表示请求的类型。该函数总是按照 flag 指定的内容填入 *view*,除非 *buf* 设为只读,并且 *flag* 中设置了 " +":c:macro:`PyBUF_WRITABLE` 标志。" + +#: ../../c-api/buffer.rst:519 +msgid "" +"On success, set ``view->obj`` to a new reference to *exporter* and return 0." +" Otherwise, raise :c:data:`PyExc_BufferError`, set ``view->obj`` to ``NULL``" +" and return ``-1``;" +msgstr "" +"成功时,将 ``view->obj`` 设为 *exporter* 的新引用,并返回 0。否则,引发 " +":c:data:`PyExc_BufferError` ,将 ``view->obj`` 设为 ``NULL``,并返回 ``-1``。" + +#: ../../c-api/buffer.rst:523 +msgid "" +"If this function is used as part of a :ref:`getbufferproc `," +" *exporter* MUST be set to the exporting object and *flags* must be passed " +"unmodified. Otherwise, *exporter* MUST be ``NULL``." +msgstr "" +"如果此函数用作 :ref:`getbufferproc ` 的一部分,则 *exporter* " +"必须设置为导出对象,并且必须在未修改的情况下传递 *flags*。否则,*exporter* 必须是 ``NULL``。" diff --git a/c-api/bytearray.po b/c-api/bytearray.po new file mode 100644 index 000000000..63f0bff2d --- /dev/null +++ b/c-api/bytearray.po @@ -0,0 +1,109 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) 2001-2022, Python Software Foundation +# This file is distributed under the same license as the Python package. +# FIRST AUTHOR , YEAR. +# +# Translators: +# 刘士 , 2018 +# 叶浚安 , 2019 +# Freesand Leo , 2021 +# +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: Python 3.9\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2022-11-04 14:34+0000\n" +"PO-Revision-Date: 2017-02-16 17:33+0000\n" +"Last-Translator: Freesand Leo , 2021\n" +"Language-Team: Chinese (China) (https://www.transifex.com/python-doc/teams/5390/zh_CN/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: zh_CN\n" +"Plural-Forms: nplurals=1; plural=0;\n" + +#: ../../c-api/bytearray.rst:6 +msgid "Byte Array Objects" +msgstr "字节数组对象" + +#: ../../c-api/bytearray.rst:13 +msgid "" +"This subtype of :c:type:`PyObject` represents a Python bytearray object." +msgstr "这个 :c:type:`PyObject` 的子类型表示一个 Python 字节数组对象。" + +#: ../../c-api/bytearray.rst:18 +msgid "" +"This instance of :c:type:`PyTypeObject` represents the Python bytearray " +"type; it is the same object as :class:`bytearray` in the Python layer." +msgstr "" +"Python bytearray 类型表示为 :c:type:`PyTypeObject` 的实例;这与Python层面的 " +":class:`bytearray` 是相同的对象。" + +#: ../../c-api/bytearray.rst:23 +msgid "Type check macros" +msgstr "类型检查宏" + +#: ../../c-api/bytearray.rst:27 +msgid "" +"Return true if the object *o* is a bytearray object or an instance of a " +"subtype of the bytearray type. This function always succeeds." +msgstr "如果对象 *o* 是一个 bytearray 对象或者 bytearray 类型的子类型的实例则返回真值。 此函数总是会成功执行。" + +#: ../../c-api/bytearray.rst:33 +msgid "" +"Return true if the object *o* is a bytearray object, but not an instance of " +"a subtype of the bytearray type. This function always succeeds." +msgstr "如果对象 *o* 是一个 bytearray 对象但不是 bytearray 类型的子类型的实例则返回真值。 此函数总是会成功执行。" + +#: ../../c-api/bytearray.rst:38 +msgid "Direct API functions" +msgstr "直接 API 函数" + +#: ../../c-api/bytearray.rst:42 +msgid "" +"Return a new bytearray object from any object, *o*, that implements the " +":ref:`buffer protocol `." +msgstr "根据任何实现了 :ref:`缓冲区协议` 的对象 *o*,返回一个新的字节数组对象。" + +#: ../../c-api/bytearray.rst:48 +msgid "" +"Create a new bytearray object from *string* and its length, *len*. On " +"failure, ``NULL`` is returned." +msgstr "根据 *string* 及其长度 *len* 创建一个新的 bytearray 对象。 当失败时返回 ``NULL``。" + +#: ../../c-api/bytearray.rst:54 +msgid "" +"Concat bytearrays *a* and *b* and return a new bytearray with the result." +msgstr "连接字节数组 *a* 和 *b* 并返回一个带有结果的新的字节数组。" + +#: ../../c-api/bytearray.rst:59 +msgid "Return the size of *bytearray* after checking for a ``NULL`` pointer." +msgstr "在检查 ``NULL`` 指针后返回 *bytearray* 的大小。" + +#: ../../c-api/bytearray.rst:64 +msgid "" +"Return the contents of *bytearray* as a char array after checking for a " +"``NULL`` pointer. The returned array always has an extra null byte " +"appended." +msgstr "在检查 ``NULL`` 指针后返回将 *bytearray* 返回为一个字符数组。 返回的数组总是会附加一个额外的空字节。" + +#: ../../c-api/bytearray.rst:71 +msgid "Resize the internal buffer of *bytearray* to *len*." +msgstr "将 *bytearray* 的内部缓冲区的大小调整为 *len*。" + +#: ../../c-api/bytearray.rst:74 +msgid "Macros" +msgstr "宏" + +#: ../../c-api/bytearray.rst:76 +msgid "These macros trade safety for speed and they don't check pointers." +msgstr "这些宏减低安全性以换取性能,它们不检查指针。" + +#: ../../c-api/bytearray.rst:80 +msgid "Macro version of :c:func:`PyByteArray_AsString`." +msgstr "C函数 :c:func:`PyByteArray_AsString` 的宏版本。" + +#: ../../c-api/bytearray.rst:85 +msgid "Macro version of :c:func:`PyByteArray_Size`." +msgstr "C函数 :c:func:`PyByteArray_Size` 的宏版本。" diff --git a/c-api/bytes.po b/c-api/bytes.po new file mode 100644 index 000000000..e5f85af6a --- /dev/null +++ b/c-api/bytes.po @@ -0,0 +1,369 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) 2001-2022, Python Software Foundation +# This file is distributed under the same license as the Python package. +# FIRST AUTHOR , YEAR. +# +# Translators: +# jacky , 2019 +# allenjuly7 , 2019 +# sgqy , 2019 +# Iterator , 2019 +# ppcfish , 2019 +# 昌伟 任 , 2019 +# Freesand Leo , 2022 +# +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: Python 3.9\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2022-11-04 14:34+0000\n" +"PO-Revision-Date: 2017-02-16 17:33+0000\n" +"Last-Translator: Freesand Leo , 2022\n" +"Language-Team: Chinese (China) (https://www.transifex.com/python-doc/teams/5390/zh_CN/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: zh_CN\n" +"Plural-Forms: nplurals=1; plural=0;\n" + +#: ../../c-api/bytes.rst:6 +msgid "Bytes Objects" +msgstr "字节对象" + +#: ../../c-api/bytes.rst:8 +msgid "" +"These functions raise :exc:`TypeError` when expecting a bytes parameter and " +"called with a non-bytes parameter." +msgstr "这些函数在期望附带一个字节串形参但却附带了一个非字节串形参被调用时会引发 :exc:`TypeError`。" + +#: ../../c-api/bytes.rst:16 +msgid "This subtype of :c:type:`PyObject` represents a Python bytes object." +msgstr "这种 :c:type:`PyObject` 的子类型表示一个 Python 字节对象。" + +#: ../../c-api/bytes.rst:21 +msgid "" +"This instance of :c:type:`PyTypeObject` represents the Python bytes type; it" +" is the same object as :class:`bytes` in the Python layer." +msgstr "" +":c:type:`PyTypeObject` 的实例代表一个 Python 字节类型,在 Python 层面它与 :class:`bytes` " +"是相同的对象。" + +#: ../../c-api/bytes.rst:27 +msgid "" +"Return true if the object *o* is a bytes object or an instance of a subtype " +"of the bytes type. This function always succeeds." +msgstr "如果对象 *o* 是一个 bytes 对象或者 bytes 类型的子类型的实例则返回真值。 此函数总是会成功执行。" + +#: ../../c-api/bytes.rst:33 +msgid "" +"Return true if the object *o* is a bytes object, but not an instance of a " +"subtype of the bytes type. This function always succeeds." +msgstr "如果对象 *o* 是一个 bytes 对象但不是 bytes 类型的子类型的实例则返回真值。 此函数总是会成功执行。" + +#: ../../c-api/bytes.rst:39 +msgid "" +"Return a new bytes object with a copy of the string *v* as value on success," +" and ``NULL`` on failure. The parameter *v* must not be ``NULL``; it will " +"not be checked." +msgstr "" +"成功时返回一个以字符串 *v* 的副本为值的新字节串对象,失败时返回 ``NULL``。 形参 *v* 不可为 ``NULL``;它不会被检查。" + +#: ../../c-api/bytes.rst:46 +msgid "" +"Return a new bytes object with a copy of the string *v* as value and length " +"*len* on success, and ``NULL`` on failure. If *v* is ``NULL``, the contents" +" of the bytes object are uninitialized." +msgstr "" +"成功时返回一个以字符串 *v* 的副本为值且长度为 *len* 的新字节串对象,失败时返回 ``NULL``。 如果 *v* 为 " +"``NULL``,则不初始化字节串对象的内容。" + +#: ../../c-api/bytes.rst:53 +msgid "" +"Take a C :c:func:`printf`\\ -style *format* string and a variable number of " +"arguments, calculate the size of the resulting Python bytes object and " +"return a bytes object with the values formatted into it. The variable " +"arguments must be C types and must correspond exactly to the format " +"characters in the *format* string. The following format characters are " +"allowed:" +msgstr "" +"接受一个 C :c:func:`printf` 风格的 *format* 字符串和可变数量的参数,计算结果 Python " +"字节串对象的大小并返回参数值经格式化后的字节串对象。 可变数量的参数必须均为 C 类型并且必须恰好与 *format* 字符串中的格式字符相对应。 " +"允许使用下列格式字符串:" + +#: ../../c-api/bytes.rst:68 +msgid "Format Characters" +msgstr "格式字符" + +#: ../../c-api/bytes.rst:68 +msgid "Type" +msgstr "类型" + +#: ../../c-api/bytes.rst:68 +msgid "Comment" +msgstr "注释" + +#: ../../c-api/bytes.rst:70 +msgid ":attr:`%%`" +msgstr ":attr:`%%`" + +#: ../../c-api/bytes.rst:70 +msgid "*n/a*" +msgstr "*不适用*" + +#: ../../c-api/bytes.rst:70 +msgid "The literal % character." +msgstr "文字%字符。" + +#: ../../c-api/bytes.rst:72 +msgid ":attr:`%c`" +msgstr ":attr:`%c`" + +#: ../../c-api/bytes.rst:72 ../../c-api/bytes.rst:75 ../../c-api/bytes.rst:93 +#: ../../c-api/bytes.rst:96 +msgid "int" +msgstr "int" + +#: ../../c-api/bytes.rst:72 +msgid "A single byte, represented as a C int." +msgstr "一个字节,被表示为一个 C 语言的整型" + +#: ../../c-api/bytes.rst:75 +msgid ":attr:`%d`" +msgstr ":attr:`%d`" + +#: ../../c-api/bytes.rst:75 +msgid "Equivalent to ``printf(\"%d\")``. [1]_" +msgstr "相当于 ``printf(\"%d\")``. [1]_" + +#: ../../c-api/bytes.rst:78 +msgid ":attr:`%u`" +msgstr ":attr:`%u`" + +#: ../../c-api/bytes.rst:78 +msgid "unsigned int" +msgstr "无符号整型" + +#: ../../c-api/bytes.rst:78 +msgid "Equivalent to ``printf(\"%u\")``. [1]_" +msgstr "相当于 ``printf(\"%u\")``. [1]_" + +#: ../../c-api/bytes.rst:81 +msgid ":attr:`%ld`" +msgstr ":attr:`%ld`" + +#: ../../c-api/bytes.rst:81 +msgid "long" +msgstr "长整型" + +#: ../../c-api/bytes.rst:81 +msgid "Equivalent to ``printf(\"%ld\")``. [1]_" +msgstr "相当于 ``printf(\"%ld\")``. [1]_" + +#: ../../c-api/bytes.rst:84 +msgid ":attr:`%lu`" +msgstr ":attr:`%lu`" + +#: ../../c-api/bytes.rst:84 +msgid "unsigned long" +msgstr "无符号长整型" + +#: ../../c-api/bytes.rst:84 +msgid "Equivalent to ``printf(\"%lu\")``. [1]_" +msgstr "相当于 ``printf(\"%lu\")``. [1]_" + +#: ../../c-api/bytes.rst:87 +msgid ":attr:`%zd`" +msgstr ":attr:`%zd`" + +#: ../../c-api/bytes.rst:87 +msgid ":c:type:`\\ Py_ssize_t`" +msgstr ":c:type:`\\ Py_ssize_t`" + +#: ../../c-api/bytes.rst:87 +msgid "Equivalent to ``printf(\"%zd\")``. [1]_" +msgstr "相当于 ``printf(\"%zd\")``. [1]_" + +#: ../../c-api/bytes.rst:90 +msgid ":attr:`%zu`" +msgstr ":attr:`%zu`" + +#: ../../c-api/bytes.rst:90 +msgid "size_t" +msgstr "size_t" + +#: ../../c-api/bytes.rst:90 +msgid "Equivalent to ``printf(\"%zu\")``. [1]_" +msgstr "相当于 ``printf(\"%zu\")``. [1]_" + +#: ../../c-api/bytes.rst:93 +msgid ":attr:`%i`" +msgstr ":attr:`%i`" + +#: ../../c-api/bytes.rst:93 +msgid "Equivalent to ``printf(\"%i\")``. [1]_" +msgstr "相当于 ``printf(\"%i\")``. [1]_" + +#: ../../c-api/bytes.rst:96 +msgid ":attr:`%x`" +msgstr ":attr:`%x`" + +#: ../../c-api/bytes.rst:96 +msgid "Equivalent to ``printf(\"%x\")``. [1]_" +msgstr "相当于 ``printf(\"%x\")``. [1]_" + +#: ../../c-api/bytes.rst:99 +msgid ":attr:`%s`" +msgstr ":attr:`%s`" + +#: ../../c-api/bytes.rst:99 +msgid "const char\\*" +msgstr "const char\\*" + +#: ../../c-api/bytes.rst:99 +msgid "A null-terminated C character array." +msgstr "以 null 为终止符的 C 字符数组。" + +#: ../../c-api/bytes.rst:102 +msgid ":attr:`%p`" +msgstr ":attr:`%p`" + +#: ../../c-api/bytes.rst:102 +msgid "const void\\*" +msgstr "const void\\*" + +#: ../../c-api/bytes.rst:102 +msgid "" +"The hex representation of a C pointer. Mostly equivalent to " +"``printf(\"%p\")`` except that it is guaranteed to start with the literal " +"``0x`` regardless of what the platform's ``printf`` yields." +msgstr "" +"一个 C 指针的十六进制表示形式。 基本等价于 ``printf(\"%p\")`` 但它会确保以字面值 ``0x`` 开头,不论系统平台上 " +"``printf`` 的输出是什么。" + +#: ../../c-api/bytes.rst:111 +msgid "" +"An unrecognized format character causes all the rest of the format string to" +" be copied as-is to the result object, and any extra arguments discarded." +msgstr "无法识别的格式字符会导致将格式字符串的其余所有内容原样复制到结果对象,并丢弃所有多余的参数。" + +#: ../../c-api/bytes.rst:114 +msgid "" +"For integer specifiers (d, u, ld, lu, zd, zu, i, x): the 0-conversion flag " +"has effect even when a precision is given." +msgstr "对于整数说明符(d,u,ld,lu,zd,zu,i,x):当给出精度时,0 转换标志是有效的。" + +#: ../../c-api/bytes.rst:120 +msgid "" +"Identical to :c:func:`PyBytes_FromFormat` except that it takes exactly two " +"arguments." +msgstr "与 :c:func:`PyBytes_FromFormat` 完全相同,除了它需要两个参数。" + +#: ../../c-api/bytes.rst:126 +msgid "" +"Return the bytes representation of object *o* that implements the buffer " +"protocol." +msgstr "返回字节表示实现缓冲区协议的对象*o*。" + +#: ../../c-api/bytes.rst:132 +msgid "Return the length of the bytes in bytes object *o*." +msgstr "返回字节对象*o*中字节的长度。" + +#: ../../c-api/bytes.rst:137 +msgid "Macro form of :c:func:`PyBytes_Size` but without error checking." +msgstr "宏版本的 :c:func:`PyBytes_Size` 但是不带错误检测。" + +#: ../../c-api/bytes.rst:142 +msgid "" +"Return a pointer to the contents of *o*. The pointer refers to the internal" +" buffer of *o*, which consists of ``len(o) + 1`` bytes. The last byte in " +"the buffer is always null, regardless of whether there are any other null " +"bytes. The data must not be modified in any way, unless the object was just" +" created using ``PyBytes_FromStringAndSize(NULL, size)``. It must not be " +"deallocated. If *o* is not a bytes object at all, " +":c:func:`PyBytes_AsString` returns ``NULL`` and raises :exc:`TypeError`." +msgstr "" +"返回对应 *o* 的内容的指针。 该指针指向 *o* 的内部缓冲区,其中包含 ``len(o) + 1`` 个字节。 " +"缓冲区的最后一个字节总是为空,不论是否存在其他空字节。 该数据不可通过任何形式来修改,除非是刚使用 " +"``PyBytes_FromStringAndSize(NULL, size)`` 创建该对象。 它不可被撤销分配。 如果 *o* " +"根本不是一个字节串对象,则 :c:func:`PyBytes_AsString` 将返回 ``NULL`` 并引发 :exc:`TypeError`。" + +#: ../../c-api/bytes.rst:154 +msgid "Macro form of :c:func:`PyBytes_AsString` but without error checking." +msgstr "宏版本的 :c:func:`PyBytes_AsString` 但是不带错误检测。" + +#: ../../c-api/bytes.rst:159 +msgid "" +"Return the null-terminated contents of the object *obj* through the output " +"variables *buffer* and *length*." +msgstr "通过输出变量 *buffer* 和 *length* 返回以 null 为终止符的对象 *obj* 的内容。" + +#: ../../c-api/bytes.rst:162 +msgid "" +"If *length* is ``NULL``, the bytes object may not contain embedded null " +"bytes; if it does, the function returns ``-1`` and a :exc:`ValueError` is " +"raised." +msgstr "" +"如果 *length* 为 ``NULL``,字节串对象就不包含嵌入的空字节;如果包含,则该函数将返回 ``-1`` 并引发 " +":exc:`ValueError`。" + +#: ../../c-api/bytes.rst:166 +msgid "" +"The buffer refers to an internal buffer of *obj*, which includes an " +"additional null byte at the end (not counted in *length*). The data must " +"not be modified in any way, unless the object was just created using " +"``PyBytes_FromStringAndSize(NULL, size)``. It must not be deallocated. If " +"*obj* is not a bytes object at all, :c:func:`PyBytes_AsStringAndSize` " +"returns ``-1`` and raises :exc:`TypeError`." +msgstr "" +"该缓冲区指向 *obj* 的内部缓冲,它的末尾包含一个额外的空字节(不算在 *length* 当中)。 该数据不可通过任何方式来修改,除非是刚使用 " +"``PyBytes_FromStringAndSize(NULL, size)`` 创建该对象。 它不可被撤销分配。 如果 *obj* " +"根本不是一个字节串对象,则 :c:func:`PyBytes_AsStringAndSize` 将返回 ``-1`` 并引发 " +":exc:`TypeError`。" + +#: ../../c-api/bytes.rst:173 +msgid "" +"Previously, :exc:`TypeError` was raised when embedded null bytes were " +"encountered in the bytes object." +msgstr "以前,当字节串对象中出现嵌入的空字节时将引发 :exc:`TypeError`。" + +#: ../../c-api/bytes.rst:180 +msgid "" +"Create a new bytes object in *\\*bytes* containing the contents of *newpart*" +" appended to *bytes*; the caller will own the new reference. The reference " +"to the old value of *bytes* will be stolen. If the new object cannot be " +"created, the old reference to *bytes* will still be discarded and the value " +"of *\\*bytes* will be set to ``NULL``; the appropriate exception will be " +"set." +msgstr "" +"在 *\\*bytes* 中创建新的字节串对象,其中包含添加到 *bytes* 的 *newpart* 的内容;调用者将获得新的引用。 对 " +"*bytes* 原值的引用将被收回。 如果无法创建新对象,对 *bytes* 的旧引用仍将被丢弃且 *\\*bytes* 的值将被设为 " +"``NULL``;并将设置适当的异常。" + +#: ../../c-api/bytes.rst:189 +msgid "" +"Create a new bytes object in *\\*bytes* containing the contents of *newpart*" +" appended to *bytes*. This version decrements the reference count of " +"*newpart*." +msgstr "" +"在 *\\*bytes* 中创建新的字节串对象,其中包含添加到 *bytes* 的 *newpart* 的内容。 此版本会减少 *newpart* " +"的引用计数。" + +#: ../../c-api/bytes.rst:196 +msgid "" +"A way to resize a bytes object even though it is \"immutable\". Only use " +"this to build up a brand new bytes object; don't use this if the bytes may " +"already be known in other parts of the code. It is an error to call this " +"function if the refcount on the input bytes object is not one. Pass the " +"address of an existing bytes object as an lvalue (it may be written into), " +"and the new size desired. On success, *\\*bytes* holds the resized bytes " +"object and ``0`` is returned; the address in *\\*bytes* may differ from its " +"input value. If the reallocation fails, the original bytes object at " +"*\\*bytes* is deallocated, *\\*bytes* is set to ``NULL``, :exc:`MemoryError`" +" is set, and ``-1`` is returned." +msgstr "" +"改变字节串大小的一种方式,即使其为“不可变对象”。 此方式仅用于创建全新的字节串对象;如果字节串在代码的其他部分已知则不可使用此方式。 " +"如果输入字节串对象的引用计数不为一则调用此函数将报错。 传入一个现有字节串对象的地址作为 lvalue(它可能会被写入),并传入希望的新大小。 " +"当成功时,*\\*bytes* 将存放改变大小后的字节串对象并返回 ``0``;*\\*bytes* 中的地址可能与其输入值不同。 如果重新分配失败,则" +" *\\*bytes* 上的原字节串对象将被撤销分配,*\\*bytes* 会被设为 ``NULL``,同时设置 :exc:`MemoryError` " +"并返回 ``-1``。" diff --git a/c-api/call.po b/c-api/call.po new file mode 100644 index 000000000..37e074ff0 --- /dev/null +++ b/c-api/call.po @@ -0,0 +1,649 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) 2001-2025, Python Software Foundation +# This file is distributed under the same license as the Python package. +# FIRST AUTHOR , YEAR. +# +# Translators: +# Shengjing Zhu , 2020 +# ppcfish , 2020 +# 稀饭~~ , 2020 +# Yi Cao <1783250036@qq.com>, 2020 +# Zxilly Chou , 2020 +# helloworldSB , 2021 +# Jiuh.star , 2021 +# Rafael Fontenelle , 2024 +# Freesand Leo , 2025 +# +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: Python 3.9\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2025-02-21 17:04+0000\n" +"PO-Revision-Date: 2020-05-31 09:28+0000\n" +"Last-Translator: Freesand Leo , 2025\n" +"Language-Team: Chinese (China) (https://app.transifex.com/python-doc/teams/5390/zh_CN/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: zh_CN\n" +"Plural-Forms: nplurals=1; plural=0;\n" + +#: ../../c-api/call.rst:6 +msgid "Call Protocol" +msgstr "调用协议" + +#: ../../c-api/call.rst:8 +msgid "" +"CPython supports two different calling protocols: *tp_call* and vectorcall." +msgstr "CPython 支持两种不同的调用协议:*tp_call* 和矢量调用。" + +#: ../../c-api/call.rst:12 +msgid "The *tp_call* Protocol" +msgstr "*tp_call* 协议" + +#: ../../c-api/call.rst:14 +msgid "" +"Instances of classes that set :c:member:`~PyTypeObject.tp_call` are " +"callable. The signature of the slot is::" +msgstr "设置 :c:member:`~PyTypeObject.tp_call` 的类的实例都是可调用的。 槽位的签名为::" + +#: ../../c-api/call.rst:19 +msgid "" +"A call is made using a tuple for the positional arguments and a dict for the" +" keyword arguments, similarly to ``callable(*args, **kwargs)`` in Python " +"code. *args* must be non-NULL (use an empty tuple if there are no arguments)" +" but *kwargs* may be *NULL* if there are no keyword arguments." +msgstr "" +"一个调用是用一个元组表示位置参数,用一个dict表示关键字参数,类似于Python代码中的 ``callable(*args, " +"**kwargs)``。*args*必须是非空的(如果没有参数,会使用一个空元组),但如果没有关键字参数,*kwargs*可以是*NULL*。" + +#: ../../c-api/call.rst:25 +msgid "" +"This convention is not only used by *tp_call*: " +":c:member:`~PyTypeObject.tp_new` and :c:member:`~PyTypeObject.tp_init` also " +"pass arguments this way." +msgstr "" +"这个约定不仅被*tp_call*使用: :c:member:`~PyTypeObject.tp_new` 和 " +":c:member:`~PyTypeObject.tp_init` 也这样传递参数。" + +#: ../../c-api/call.rst:29 +msgid "" +"To call an object, use :c:func:`PyObject_Call` or another :ref:`call API " +"`." +msgstr "要调用一个对象,请使用 :c:func:`PyObject_Call` 或者其他的 :ref:`调用 API `。" + +#: ../../c-api/call.rst:36 +msgid "The Vectorcall Protocol" +msgstr "Vectorcall 协议" + +#: ../../c-api/call.rst:40 +msgid "" +"The vectorcall protocol was introduced in :pep:`590` as an additional " +"protocol for making calls more efficient." +msgstr "vectorcall 协议是在 :pep:`590` 被引入的,它是使调用函数更加有效的附加协议。" + +#: ../../c-api/call.rst:43 +msgid "" +"As rule of thumb, CPython will prefer the vectorcall for internal calls if " +"the callable supports it. However, this is not a hard rule. Additionally, " +"some third-party extensions use *tp_call* directly (rather than using " +":c:func:`PyObject_Call`). Therefore, a class supporting vectorcall must also" +" implement :c:member:`~PyTypeObject.tp_call`. Moreover, the callable must " +"behave the same regardless of which protocol is used. The recommended way to" +" achieve this is by setting :c:member:`~PyTypeObject.tp_call` to " +":c:func:`PyVectorcall_Call`. This bears repeating:" +msgstr "" +"作为经验法则,如果可调用程序支持 vectorcall,CPython 会更倾向于内联调用。 然而,这并不是一个硬性规定。 此外,一些第三方扩展直接使用" +" *tp_call* (而不是使用 :c:func:`PyObject_Call`)。 因此,一个支持 vectorcall 的类也必须实现 " +":c:member:`~PyTypeObject.tp_call`。 此外,无论使用哪种协议,可调对象的行为都必须是相同的。 推荐的方法是将 " +":c:member:`~PyTypeObject.tp_call` 设置为 :c:func:`PyVectorcall_Call`。值得一提的是:" + +#: ../../c-api/call.rst:57 +msgid "" +"A class supporting vectorcall **must** also implement " +":c:member:`~PyTypeObject.tp_call` with the same semantics." +msgstr "" +"一个支持 Vectorcall 的类 **必须** 也实现具有相同语义的 :c:member:`~PyTypeObject.tp_call`。" + +#: ../../c-api/call.rst:60 +msgid "" +"A class should not implement vectorcall if that would be slower than " +"*tp_call*. For example, if the callee needs to convert the arguments to an " +"args tuple and kwargs dict anyway, then there is no point in implementing " +"vectorcall." +msgstr "" +"如果一个类的vectorcall比*tp_call*慢,就不应该实现vectorcall。例如,如果被调用者需要将参数转换为args 元组和kwargs" +" dict,那么实现vectorcall就没有意义。" + +#: ../../c-api/call.rst:65 +msgid "" +"Classes can implement the vectorcall protocol by enabling the " +":const:`Py_TPFLAGS_HAVE_VECTORCALL` flag and setting " +":c:member:`~PyTypeObject.tp_vectorcall_offset` to the offset inside the " +"object structure where a *vectorcallfunc* appears. This is a pointer to a " +"function with the following signature:" +msgstr "" +"类可以通过启用 :const:`Py_TPFLAGS_HAVE_VECTORCALL` 标志并将 " +":c:member:`~PyTypeObject.tp_vectorcall_offset` 设置为对象结构中的 *vectorcallfunc* 的 " +"offset 来实现 vectorcall 协议。这是一个指向具有以下签名的函数的指针:" + +#: ../../c-api/call.rst:73 +msgid "*callable* is the object being called." +msgstr "*callable* 是指被调用的对象。" + +#: ../../c-api/call.rst:75 +msgid "" +"*args* is a C array consisting of the positional arguments followed by the" +msgstr "*args* 是一个C语言数组,由位置参数和后面的" + +#: ../../c-api/call.rst:75 +msgid "" +"values of the keyword arguments. This can be *NULL* if there are no " +"arguments." +msgstr "关键字参数的值。如果没有参数,这个值可以是 *NULL* 。" + +#: ../../c-api/call.rst:79 +msgid "*nargsf* is the number of positional arguments plus possibly the" +msgstr "*nargsf* 是位置参数的数量加上可能的" + +#: ../../c-api/call.rst:78 +msgid "" +":const:`PY_VECTORCALL_ARGUMENTS_OFFSET` flag. To get the actual number of " +"positional arguments from *nargsf*, use :c:func:`PyVectorcall_NARGS`." +msgstr "" +":const:`PY_VECTORCALL_ARGUMENTS_OFFSET` 标志。 要从 *nargsf* 获得实际的位置参数数,请使用 " +":c:func:`PyVectorcall_NARGS`。" + +#: ../../c-api/call.rst:85 +msgid "*kwnames* is a tuple containing the names of the keyword arguments;" +msgstr "*kwnames* 是一包含所有关键字名称的元组。" + +#: ../../c-api/call.rst:82 +msgid "" +"in other words, the keys of the kwargs dict. These names must be strings " +"(instances of ``str`` or a subclass) and they must be unique. If there are " +"no keyword arguments, then *kwnames* can instead be *NULL*." +msgstr "" +"换句话说,就是 kwargs 字典的键。 这些名字必须是字符串 (``str`` 或其子类的实例),并且它们必须是唯一的。 如果没有关键字参数,那么 " +"*kwnames* 可以用 *NULL* 代替。" + +#: ../../c-api/call.rst:89 +msgid "" +"If this flag is set in a vectorcall *nargsf* argument, the callee is allowed" +" to temporarily change ``args[-1]``. In other words, *args* points to " +"argument 1 (not 0) in the allocated vector. The callee must restore the " +"value of ``args[-1]`` before returning." +msgstr "" +"如果在 vectorcall 的 *nargsf* 参数中设置了此标志,则允许被调用者临时更改 ``args[-1]`` 的值。换句话说, *args*" +" 指向分配向量中的参数 1(不是 0 )。被调用方必须在返回之前还原 ``args[-1]`` 的值。" + +#: ../../c-api/call.rst:94 +msgid "" +"For :c:func:`PyObject_VectorcallMethod`, this flag means instead that " +"``args[0]`` may be changed." +msgstr "对于 :c:func:`PyObject_VectorcallMethod` ,这个标志的改变意味着 ``args[0]`` 可能改变了。" + +#: ../../c-api/call.rst:97 +msgid "" +"Whenever they can do so cheaply (without additional allocation), callers are" +" encouraged to use :const:`PY_VECTORCALL_ARGUMENTS_OFFSET`. Doing so will " +"allow callables such as bound methods to make their onward calls (which " +"include a prepended *self* argument) very efficiently." +msgstr "" +"当调用方可以以几乎无代价的方式(无额外的内存申请),那么调用者被推荐适用: " +":const:`PY_VECTORCALL_ARGUMENTS_OFFSET`。这样做将允许诸如绑定方法之类的可调用函数非常有效地进行向前调用(其中包括一个带前缀的" +" *self* 参数)。" + +#: ../../c-api/call.rst:102 +msgid "" +"To call an object that implements vectorcall, use a :ref:`call API ` function as with any other callable. :c:func:`PyObject_Vectorcall` " +"will usually be most efficient." +msgstr "" +"要调用一个实现了 vectorcall 的对象,请使用某个 :ref:`call API` 函数,就像其他可调对象一样。 " +":c:func:`PyObject_Vectorcall` 通常是最有效的。" + +#: ../../c-api/call.rst:109 +msgid "" +"In CPython 3.8, the vectorcall API and related functions were available " +"provisionally under names with a leading underscore: " +"``_PyObject_Vectorcall``, ``_Py_TPFLAGS_HAVE_VECTORCALL``, " +"``_PyObject_VectorcallMethod``, ``_PyVectorcall_Function``, " +"``_PyObject_CallOneArg``, ``_PyObject_CallMethodNoArgs``, " +"``_PyObject_CallMethodOneArg``. Additionally, ``PyObject_VectorcallDict`` " +"was available as ``_PyObject_FastCallDict``. The old names are still defined" +" as aliases of the new, non-underscored names." +msgstr "" +"在 CPython 3.8 中,vectorcall API 和相关的函数暂定以带开头下划线的名称提供: " +"``_PyObject_Vectorcall``, ``_Py_TPFLAGS_HAVE_VECTORCALL``, " +"``_PyObject_VectorcallMethod``, ``_PyVectorcall_Function``, " +"``_PyObject_CallOneArg``, ``_PyObject_CallMethodNoArgs``, " +"``_PyObject_CallMethodOneArg``。 此外, ``PyObject_VectorcallDict`` 以 " +"``_PyObject_FastCallDict`` 的名称提供。 旧名称仍然被定义为不带下划线的新名称的别名。" + +#: ../../c-api/call.rst:121 +msgid "Recursion Control" +msgstr "递归控制" + +#: ../../c-api/call.rst:123 +msgid "" +"When using *tp_call*, callees do not need to worry about :ref:`recursion " +"`: CPython uses :c:func:`Py_EnterRecursiveCall` and " +":c:func:`Py_LeaveRecursiveCall` for calls made using *tp_call*." +msgstr "" +"在使用 *tp_call* 时,被调用者不必担心 :ref:`递归 `: CPython 对于使用 *tp_call* " +"进行的调用会使用 :c:func:`Py_EnterRecursiveCall` 和 :c:func:`Py_LeaveRecursiveCall`。" + +#: ../../c-api/call.rst:128 +msgid "" +"For efficiency, this is not the case for calls done using vectorcall: the " +"callee should use *Py_EnterRecursiveCall* and *Py_LeaveRecursiveCall* if " +"needed." +msgstr "" +"为保证效率,这不适用于使用 vectorcall 的调用:被调用方在需要时应当使用 *Py_EnterRecursiveCall* 和 " +"*Py_LeaveRecursiveCall*。" + +#: ../../c-api/call.rst:134 +msgid "Vectorcall Support API" +msgstr "Vectorcall 支持 API" + +#: ../../c-api/call.rst:138 +msgid "" +"Given a vectorcall *nargsf* argument, return the actual number of arguments." +" Currently equivalent to::" +msgstr "给定一个 vectorcall *nargsf* 实参,返回参数的实际数量。 目前等同于::" + +#: ../../c-api/call.rst:144 +msgid "" +"However, the function ``PyVectorcall_NARGS`` should be used to allow for " +"future extensions." +msgstr "然而,应使用 ``PyVectorcall_NARGS`` 函数以便将来扩展。" + +#: ../../c-api/call.rst:147 ../../c-api/call.rst:161 ../../c-api/call.rst:175 +#: ../../c-api/call.rst:259 ../../c-api/call.rst:346 ../../c-api/call.rst:360 +#: ../../c-api/call.rst:375 ../../c-api/call.rst:391 ../../c-api/call.rst:413 +msgid "This function is not part of the :ref:`limited API `." +msgstr "这个函数不是 :ref:`limited API ` 的一部分。" + +#: ../../c-api/call.rst:153 +msgid "" +"If *op* does not support the vectorcall protocol (either because the type " +"does not or because the specific instance does not), return *NULL*. " +"Otherwise, return the vectorcall function pointer stored in *op*. This " +"function never raises an exception." +msgstr "" +"如果*op*不支持vectorcall协议(要么是因为类型不支持,要么是因为具体实例不支持),返回*NULL*。否则,返回存储在*op*中的vectorcall函数指针。这个函数从不触发异常。" + +#: ../../c-api/call.rst:158 +msgid "" +"This is mostly useful to check whether or not *op* supports vectorcall, " +"which can be done by checking ``PyVectorcall_Function(op) != NULL``." +msgstr "" +"这在检查 *op* 是否支持 vectorcall 时最有用处,可以通过检查 ``PyVectorcall_Function(op) != NULL``" +" 来实现。" + +#: ../../c-api/call.rst:167 +msgid "" +"Call *callable*'s :c:type:`vectorcallfunc` with positional and keyword " +"arguments given in a tuple and dict, respectively." +msgstr "调用*可调对象*的 :c:type:`vectorcallfunc`,其位置参数和关键字参数分别以元组和dict形式给出。" + +#: ../../c-api/call.rst:170 +msgid "" +"This is a specialized function, intended to be put in the " +":c:member:`~PyTypeObject.tp_call` slot or be used in an implementation of " +"``tp_call``. It does not check the :const:`Py_TPFLAGS_HAVE_VECTORCALL` flag " +"and it does not fall back to ``tp_call``." +msgstr "" +"这是一个专门函数,其目的是被放入 :c:member:`~PyTypeObject.tp_call` 槽位或是用于 ``tp_call`` 的实现。 " +"它不会检查 :const:`Py_TPFLAGS_HAVE_VECTORCALL` 旗标并且它不会回退到 ``tp_call``。" + +#: ../../c-api/call.rst:183 +msgid "Object Calling API" +msgstr "调用对象的 API" + +#: ../../c-api/call.rst:185 +msgid "" +"Various functions are available for calling a Python object. Each converts " +"its arguments to a convention supported by the called object – either " +"*tp_call* or vectorcall. In order to do as little conversion as possible, " +"pick one that best fits the format of data you have available." +msgstr "" +"有多个函数可被用来调用 Python 对象。 各个函数会将其参数转换为被调用对象所支持的惯例 – 可以是 *tp_call* 或 vectorcall。" +" 为了尽可能少地进行转换,请选择一个适合你所拥有的数据格式的函数。" + +#: ../../c-api/call.rst:191 +msgid "" +"The following table summarizes the available functions; please see " +"individual documentation for details." +msgstr "下表总结了可用的功能; 请参阅各个文档以了解详细信息。" + +#: ../../c-api/call.rst:195 +msgid "Function" +msgstr "函数" + +#: ../../c-api/call.rst:195 +msgid "callable" +msgstr "callable -- 可调用对象" + +#: ../../c-api/call.rst:195 +msgid "args" +msgstr "args" + +#: ../../c-api/call.rst:195 +msgid "kwargs" +msgstr "kwargs" + +#: ../../c-api/call.rst:197 +msgid ":c:func:`PyObject_Call`" +msgstr ":c:func:`PyObject_Call`" + +#: ../../c-api/call.rst:197 ../../c-api/call.rst:199 ../../c-api/call.rst:201 +#: ../../c-api/call.rst:203 ../../c-api/call.rst:205 ../../c-api/call.rst:209 +#: ../../c-api/call.rst:217 ../../c-api/call.rst:219 +msgid "``PyObject *``" +msgstr "``PyObject *``" + +#: ../../c-api/call.rst:197 +msgid "tuple" +msgstr "元组" + +#: ../../c-api/call.rst:197 ../../c-api/call.rst:219 +msgid "dict/``NULL``" +msgstr "dict/``NULL``" + +#: ../../c-api/call.rst:199 +msgid ":c:func:`PyObject_CallNoArgs`" +msgstr ":c:func:`PyObject_CallNoArgs`" + +#: ../../c-api/call.rst:199 ../../c-api/call.rst:199 ../../c-api/call.rst:201 +#: ../../c-api/call.rst:203 ../../c-api/call.rst:205 ../../c-api/call.rst:207 +#: ../../c-api/call.rst:209 ../../c-api/call.rst:211 ../../c-api/call.rst:213 +#: ../../c-api/call.rst:213 ../../c-api/call.rst:215 +msgid "---" +msgstr "---" + +#: ../../c-api/call.rst:201 +msgid ":c:func:`PyObject_CallOneArg`" +msgstr ":c:func:`PyObject_CallOneArg`" + +#: ../../c-api/call.rst:201 ../../c-api/call.rst:215 +msgid "1 object" +msgstr "1个对象" + +#: ../../c-api/call.rst:203 +msgid ":c:func:`PyObject_CallObject`" +msgstr ":c:func:`PyObject_CallObject`" + +#: ../../c-api/call.rst:203 +msgid "tuple/``NULL``" +msgstr "元组/``NULL``" + +#: ../../c-api/call.rst:205 +msgid ":c:func:`PyObject_CallFunction`" +msgstr ":c:func:`PyObject_CallFunction`" + +#: ../../c-api/call.rst:205 ../../c-api/call.rst:207 +msgid "format" +msgstr "format" + +#: ../../c-api/call.rst:207 +msgid ":c:func:`PyObject_CallMethod`" +msgstr ":c:func:`PyObject_CallMethod`" + +#: ../../c-api/call.rst:207 +msgid "obj + ``char*``" +msgstr "对象 + ``char*``" + +#: ../../c-api/call.rst:209 +msgid ":c:func:`PyObject_CallFunctionObjArgs`" +msgstr ":c:func:`PyObject_CallFunctionObjArgs`" + +#: ../../c-api/call.rst:209 ../../c-api/call.rst:211 +msgid "variadic" +msgstr "可变参数" + +#: ../../c-api/call.rst:211 +msgid ":c:func:`PyObject_CallMethodObjArgs`" +msgstr ":c:func:`PyObject_CallMethodObjArgs`" + +#: ../../c-api/call.rst:211 ../../c-api/call.rst:213 ../../c-api/call.rst:215 +msgid "obj + name" +msgstr "对象 + 名称" + +#: ../../c-api/call.rst:213 +msgid ":c:func:`PyObject_CallMethodNoArgs`" +msgstr ":c:func:`PyObject_CallMethodNoArgs`" + +#: ../../c-api/call.rst:215 +msgid ":c:func:`PyObject_CallMethodOneArg`" +msgstr ":c:func:`PyObject_CallMethodOneArg`" + +#: ../../c-api/call.rst:217 +msgid ":c:func:`PyObject_Vectorcall`" +msgstr ":c:func:`PyObject_Vectorcall`" + +#: ../../c-api/call.rst:217 ../../c-api/call.rst:217 ../../c-api/call.rst:219 +#: ../../c-api/call.rst:221 ../../c-api/call.rst:221 +msgid "vectorcall" +msgstr "vectorcall" + +#: ../../c-api/call.rst:219 +msgid ":c:func:`PyObject_VectorcallDict`" +msgstr ":c:func:`PyObject_VectorcallDict`" + +#: ../../c-api/call.rst:221 +msgid ":c:func:`PyObject_VectorcallMethod`" +msgstr ":c:func:`PyObject_VectorcallMethod`" + +#: ../../c-api/call.rst:221 +msgid "arg + name" +msgstr "参数 + 名称" + +#: ../../c-api/call.rst:227 +msgid "" +"Call a callable Python object *callable*, with arguments given by the tuple " +"*args*, and named arguments given by the dictionary *kwargs*." +msgstr "" +"调用一个可调用的 Python 对象 *callable*,附带由元组 *args* 所给出的参数,以及由字典 *kwargs* 所给出的关键字参数。" + +#: ../../c-api/call.rst:230 +msgid "" +"*args* must not be *NULL*; use an empty tuple if no arguments are needed. If" +" no named arguments are needed, *kwargs* can be *NULL*." +msgstr "*args* 必须不为 *NULL*;如果不想要参数请使用一个空元组。 如果不想要关键字参数,则 *kwargs* 可以为 *NULL*。" + +#: ../../c-api/call.rst:233 ../../c-api/call.rst:245 ../../c-api/call.rst:256 +#: ../../c-api/call.rst:269 ../../c-api/call.rst:281 ../../c-api/call.rst:301 +#: ../../c-api/call.rst:320 ../../c-api/call.rst:334 ../../c-api/call.rst:343 +#: ../../c-api/call.rst:357 ../../c-api/call.rst:372 ../../c-api/call.rst:410 +msgid "" +"Return the result of the call on success, or raise an exception and return " +"*NULL* on failure." +msgstr "成功时返回结果,在失败时抛出一个异常并返回 *NULL*。" + +#: ../../c-api/call.rst:236 +msgid "" +"This is the equivalent of the Python expression: ``callable(*args, " +"**kwargs)``." +msgstr "这等价于 Python 表达式 ``callable(*args, **kwargs)``。" + +#: ../../c-api/call.rst:242 +msgid "" +"Call a callable Python object *callable* without any arguments. It is the " +"most efficient way to call a callable Python object without any argument." +msgstr "调用一个可调用的 Python 对象 *callable* 并不附带任何参数。 这是不带参数调用 Python 可调用对象的最有效方式。" + +#: ../../c-api/call.rst:253 +msgid "" +"Call a callable Python object *callable* with exactly 1 positional argument " +"*arg* and no keyword arguments." +msgstr "调用一个可调用的 Python 对象 *callable* 并附带恰好 1 个位置参数 *arg* 而没有关键字参数。" + +#: ../../c-api/call.rst:266 +msgid "" +"Call a callable Python object *callable*, with arguments given by the tuple " +"*args*. If no arguments are needed, then *args* can be *NULL*." +msgstr "" +"调用一个可调用的 Python 对象 *callable*,附带由元组 *args* 所给出的参数。 如果不想要传入参数,则 *args* 可以为 " +"*NULL*。" + +#: ../../c-api/call.rst:272 ../../c-api/call.rst:284 +msgid "This is the equivalent of the Python expression: ``callable(*args)``." +msgstr "这等价于 Python 表达式 ``callable(*args)``。" + +#: ../../c-api/call.rst:277 +msgid "" +"Call a callable Python object *callable*, with a variable number of C " +"arguments. The C arguments are described using a :c:func:`Py_BuildValue` " +"style format string. The format can be *NULL*, indicating that no arguments" +" are provided." +msgstr "" +"调用一个可调用的 Python 对象 *callable*,附带可变数量的 C 参数。 这些 C 参数使用 " +":c:func:`Py_BuildValue` 风格的格式字符串来描述。 format 可以为 *NULL*,表示没有提供任何参数。" + +#: ../../c-api/call.rst:286 +msgid "" +"Note that if you only pass :c:type:`PyObject *` args, " +":c:func:`PyObject_CallFunctionObjArgs` is a faster alternative." +msgstr "" +"请注意如果你只传入 :c:type:`PyObject *` 参数,则 :c:func:`PyObject_CallFunctionObjArgs` " +"是更快速的选择。" + +#: ../../c-api/call.rst:289 +msgid "The type of *format* was changed from ``char *``." +msgstr "这个 *format* 类型已从 ``char *`` 更改。" + +#: ../../c-api/call.rst:295 +msgid "" +"Call the method named *name* of object *obj* with a variable number of C " +"arguments. The C arguments are described by a :c:func:`Py_BuildValue` " +"format string that should produce a tuple." +msgstr "" +"调用 *obj* 对象中名为 *name* 的方法并附带可变数量的 C 参数。 这些 C 参数由 :c:func:`Py_BuildValue` " +"格式字符串来描述并应当生成一个元组。" + +#: ../../c-api/call.rst:299 +msgid "The format can be *NULL*, indicating that no arguments are provided." +msgstr "格式可以为 *NULL* ,表示未提供任何参数。" + +#: ../../c-api/call.rst:304 +msgid "" +"This is the equivalent of the Python expression: ``obj.name(arg1, arg2, " +"...)``." +msgstr "这和Python表达式 ``obj.name(arg1, arg2, ...)`` 是一样的。" + +#: ../../c-api/call.rst:307 +msgid "" +"Note that if you only pass :c:type:`PyObject *` args, " +":c:func:`PyObject_CallMethodObjArgs` is a faster alternative." +msgstr "" +"请注意如果你只传入 :c:type:`PyObject *` 参数,则 :c:func:`PyObject_CallMethodObjArgs` " +"是更快速的选择。" + +#: ../../c-api/call.rst:310 +msgid "The types of *name* and *format* were changed from ``char *``." +msgstr " *name* 和 *format* 类型已从 ``char *`` 更改。" + +#: ../../c-api/call.rst:316 +msgid "" +"Call a callable Python object *callable*, with a variable number of " +":c:type:`PyObject *` arguments. The arguments are provided as a variable " +"number of parameters followed by *NULL*." +msgstr "" +"调用一个可调用的 Python 对象 *callable*,附带可变数量的 :c:type:`PyObject *` 参数。 " +"这些参数以可变数量的形参的形式提供并以 *NULL* 结尾。" + +#: ../../c-api/call.rst:323 +msgid "" +"This is the equivalent of the Python expression: ``callable(arg1, arg2, " +"...)``." +msgstr "这和Python表达式 ``callable(arg1, arg2, ...)`` 是一样的。" + +#: ../../c-api/call.rst:329 +msgid "" +"Call a method of the Python object *obj*, where the name of the method is " +"given as a Python string object in *name*. It is called with a variable " +"number of :c:type:`PyObject *` arguments. The arguments are provided as a " +"variable number of parameters followed by *NULL*." +msgstr "" +"调用 Python 对象 *obj* 中的一个方法,其中方法名称由 *name* 中的 Python 字符串对象给出。 它将附带可变数量的 " +":c:type:`PyObject *` 参数被调用。 这些参数以可变数量的形参的形式提供并以 *NULL* 结尾。" + +#: ../../c-api/call.rst:340 +msgid "" +"Call a method of the Python object *obj* without arguments, where the name " +"of the method is given as a Python string object in *name*." +msgstr "调用 Python 对象 *obj* 中的一个方法并不附带任何参数,其中方法名称由 *name* 中的 Python 字符串对象给出。" + +#: ../../c-api/call.rst:353 +msgid "" +"Call a method of the Python object *obj* with a single positional argument " +"*arg*, where the name of the method is given as a Python string object in " +"*name*." +msgstr "" +"调用 Python 对象 *obj* 中的一个方法并附带单个位置参数 *arg*,其中方法名称由 *name* 中的 Python 字符串对象给出。" + +#: ../../c-api/call.rst:367 +msgid "" +"Call a callable Python object *callable*. The arguments are the same as for " +":c:type:`vectorcallfunc`. If *callable* supports vectorcall_, this directly " +"calls the vectorcall function stored in *callable*." +msgstr "" +"调用一个可调用的 Python 对象 *callable*。 附带的参数与 :c:type:`vectorcallfunc` 相同。 如果 " +"*callable* 支持 vectorcall_,则它会直接调用存放在 *callable* 中的 vectorcall 函数。" + +#: ../../c-api/call.rst:381 +msgid "" +"Call *callable* with positional arguments passed exactly as in the " +"vectorcall_ protocol, but with keyword arguments passed as a dictionary " +"*kwdict*. The *args* array contains only the positional arguments." +msgstr "" +"调用 *callable* 并附带与在 vectorcall_ 协议中传入的完全相同的位置参数,但会加上以字典 *kwdict* 形式传入的关键字参数。" +" *args* 数组将只包含位置参数。" + +#: ../../c-api/call.rst:385 +msgid "" +"Regardless of which protocol is used internally, a conversion of arguments " +"needs to be done. Therefore, this function should only be used if the caller" +" already has a dictionary ready to use for the keyword arguments, but not a " +"tuple for the positional arguments." +msgstr "" +"无论在内部使用哪种协议,都需要进行参数的转换。 因此,此函数应当仅在调用方已经拥有作为关键字参数的字典,但没有作为位置参数的元组时才被使用。" + +#: ../../c-api/call.rst:397 +msgid "" +"Call a method using the vectorcall calling convention. The name of the " +"method is given as a Python string *name*. The object whose method is called" +" is *args[0]*, and the *args* array starting at *args[1]* represents the " +"arguments of the call. There must be at least one positional argument. " +"*nargsf* is the number of positional arguments including *args[0]*, plus " +":const:`PY_VECTORCALL_ARGUMENTS_OFFSET` if the value of ``args[0]`` may " +"temporarily be changed. Keyword arguments can be passed just like in " +":c:func:`PyObject_Vectorcall`." +msgstr "" +"使用 vectorcall 调用惯例来调用一个方法。 方法的名称以 Python 字符串 *name* 的形式给出。 调用方法的对象为 " +"*args[0]*,而 *args* 数组从 *args[1]* 开始的部分则代表调用的参数。 必须传入至少一个位置参数。 *nargsf* 为包括 " +"*args[0]* 在内的位置参数的数量,如果 ``args[0]`` 的值可能被临时改变则要再加上 " +":const:`PY_VECTORCALL_ARGUMENTS_OFFSET`。 关键字参数可以像在 " +":c:func:`PyObject_Vectorcall` 中一样被传入。" + +#: ../../c-api/call.rst:406 +msgid "" +"If the object has the :const:`Py_TPFLAGS_METHOD_DESCRIPTOR` feature, this " +"will call the unbound method object with the full *args* vector as " +"arguments." +msgstr "" +"如果对象具有 :const:`Py_TPFLAGS_METHOD_DESCRIPTOR` 特性,此函数将调用调用未绑定的方法对象并附带完整的 " +"*args* vector 作为参数。" + +#: ../../c-api/call.rst:419 +msgid "Call Support API" +msgstr "调用支持 API" + +#: ../../c-api/call.rst:423 +msgid "" +"Determine if the object *o* is callable. Return ``1`` if the object is " +"callable and ``0`` otherwise. This function always succeeds." +msgstr "确定对象 *o* 是可调对象。如果对象是可调对象则返回 ``1`` ,其他情况返回 ``0`` 。这个函数不会调用失败。" diff --git a/c-api/capsule.po b/c-api/capsule.po new file mode 100644 index 000000000..ce4257000 --- /dev/null +++ b/c-api/capsule.po @@ -0,0 +1,233 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) 2001-2022, Python Software Foundation +# This file is distributed under the same license as the Python package. +# FIRST AUTHOR , YEAR. +# +# Translators: +# Shengjing Zhu , 2019 +# Trim21 , 2019 +# Freesand Leo , 2021 +# +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: Python 3.9\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2022-11-04 14:34+0000\n" +"PO-Revision-Date: 2017-02-16 17:33+0000\n" +"Last-Translator: Freesand Leo , 2021\n" +"Language-Team: Chinese (China) (https://www.transifex.com/python-doc/teams/5390/zh_CN/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: zh_CN\n" +"Plural-Forms: nplurals=1; plural=0;\n" + +#: ../../c-api/capsule.rst:6 +msgid "Capsules" +msgstr "Capsule 对象" + +#: ../../c-api/capsule.rst:10 +msgid "" +"Refer to :ref:`using-capsules` for more information on using these objects." +msgstr "有关使用这些对象的更多信息请参阅 :ref:`using-capsules`。" + +#: ../../c-api/capsule.rst:17 +msgid "" +"This subtype of :c:type:`PyObject` represents an opaque value, useful for C " +"extension modules who need to pass an opaque value (as a :c:type:`void*` " +"pointer) through Python code to other C code. It is often used to make a C " +"function pointer defined in one module available to other modules, so the " +"regular import mechanism can be used to access C APIs defined in dynamically" +" loaded modules." +msgstr "" +"这个 :c:type:`PyObject` 的子类型代表一个隐藏的值,适用于需要将隐藏值(作为 :c:type:`void*` 指针)通过 Python" +" 代码传递到其他 C 代码的 C 扩展模块。 它常常被用来让在一个模块中定义的 C " +"函数指针在其他模块中可用,这样就可以使用常规导入机制来访问在动态加载的模块中定义的 C API。" + +#: ../../c-api/capsule.rst:27 +msgid "The type of a destructor callback for a capsule. Defined as::" +msgstr "Capsule 的析构器回调的类型。 定义如下:" + +#: ../../c-api/capsule.rst:31 +msgid "" +"See :c:func:`PyCapsule_New` for the semantics of PyCapsule_Destructor " +"callbacks." +msgstr "参阅 :c:func:`PyCapsule_New` 来获取 PyCapsule_Destructor 返回值的语义。" + +#: ../../c-api/capsule.rst:37 +msgid "" +"Return true if its argument is a :c:type:`PyCapsule`. This function always " +"succeeds." +msgstr "如果参数是一个 :c:type:`PyCapsule` 则返回真值。 此函数总是会成功执行。" + +#: ../../c-api/capsule.rst:43 +msgid "" +"Create a :c:type:`PyCapsule` encapsulating the *pointer*. The *pointer* " +"argument may not be ``NULL``." +msgstr "创建一个封装了 *pointer* 的 :c:type:`PyCapsule`。 *pointer* 参考可以不为 ``NULL``。" + +#: ../../c-api/capsule.rst:46 +msgid "On failure, set an exception and return ``NULL``." +msgstr "在失败时设置一个异常并返回 ``NULL``。" + +#: ../../c-api/capsule.rst:48 +msgid "" +"The *name* string may either be ``NULL`` or a pointer to a valid C string. " +"If non-``NULL``, this string must outlive the capsule. (Though it is " +"permitted to free it inside the *destructor*.)" +msgstr "" +"字符串 *name* 可以是 ``NULL`` 或是一个指向有效的 C 字符串的指针。 如果不为 ``NULL``,则此字符串必须比 capsule " +"长(虽然也允许在 *destructor* 中释放它。)" + +#: ../../c-api/capsule.rst:52 +msgid "" +"If the *destructor* argument is not ``NULL``, it will be called with the " +"capsule as its argument when it is destroyed." +msgstr "如果 *destructor* 参数不为 ``NULL``,则当它被销毁时将附带 capsule 作为参数来调用。" + +#: ../../c-api/capsule.rst:55 +msgid "" +"If this capsule will be stored as an attribute of a module, the *name* " +"should be specified as ``modulename.attributename``. This will enable other" +" modules to import the capsule using :c:func:`PyCapsule_Import`." +msgstr "" +"如果此 capsule 将被保存为一个模块的属性,则 *name* 应当被指定为 ``modulename.attributename``。 " +"这将允许其他模块使用 :c:func:`PyCapsule_Import` 来导入此 capsule。" + +#: ../../c-api/capsule.rst:62 +msgid "" +"Retrieve the *pointer* stored in the capsule. On failure, set an exception " +"and return ``NULL``." +msgstr "提取保存在 capsule 中的 *pointer*。 在失败时设置一个异常并返回 ``NULL``。" + +#: ../../c-api/capsule.rst:65 +msgid "" +"The *name* parameter must compare exactly to the name stored in the capsule." +" If the name stored in the capsule is ``NULL``, the *name* passed in must " +"also be ``NULL``. Python uses the C function :c:func:`strcmp` to compare " +"capsule names." +msgstr "" +"*name* 形参必须与保存在 capsule 中的名称进行精确比较。 如果保存在 capsule 中的名称为 ``NULL``,则传入的 *name*" +" 也必须为 ``NULL``。 Python 会使用 C 函数 :c:func:`strcmp` 来比较 capsule 名称。" + +#: ../../c-api/capsule.rst:73 +msgid "" +"Return the current destructor stored in the capsule. On failure, set an " +"exception and return ``NULL``." +msgstr "返回保存在 capsule 中的当前析构器。 在失败时设置一个异常并返回 ``NULL``。" + +#: ../../c-api/capsule.rst:76 +msgid "" +"It is legal for a capsule to have a ``NULL`` destructor. This makes a " +"``NULL`` return code somewhat ambiguous; use :c:func:`PyCapsule_IsValid` or " +":c:func:`PyErr_Occurred` to disambiguate." +msgstr "" +"capsule 具有 ``NULL`` 析构器是合法的。 这会使得 ``NULL`` 返回码有些歧义;请使用 " +":c:func:`PyCapsule_IsValid` 或 :c:func:`PyErr_Occurred` 来消除歧义。" + +#: ../../c-api/capsule.rst:83 +msgid "" +"Return the current context stored in the capsule. On failure, set an " +"exception and return ``NULL``." +msgstr "返回保存在 capsule 中的当前上下文。 在失败时设置一个异常并返回 ``NULL``。" + +#: ../../c-api/capsule.rst:86 +msgid "" +"It is legal for a capsule to have a ``NULL`` context. This makes a ``NULL``" +" return code somewhat ambiguous; use :c:func:`PyCapsule_IsValid` or " +":c:func:`PyErr_Occurred` to disambiguate." +msgstr "" +"capsule 具有 ``NULL`` 上下文是全法的。 这会使得 ``NULL`` 返回码有些歧义;请使用 " +":c:func:`PyCapsule_IsValid` 或 :c:func:`PyErr_Occurred` 来消除歧义。" + +#: ../../c-api/capsule.rst:93 +msgid "" +"Return the current name stored in the capsule. On failure, set an exception" +" and return ``NULL``." +msgstr "返回保存在 capsule 中的当前名称。 在失败时设置一个异常并返回 ``NULL``。" + +#: ../../c-api/capsule.rst:96 +msgid "" +"It is legal for a capsule to have a ``NULL`` name. This makes a ``NULL`` " +"return code somewhat ambiguous; use :c:func:`PyCapsule_IsValid` or " +":c:func:`PyErr_Occurred` to disambiguate." +msgstr "" +"capsule 具有 ``NULL`` 名称是合法的。 这会使得 ``NULL`` 返回码有些歧义;请使用 " +":c:func:`PyCapsule_IsValid` 或 :c:func:`PyErr_Occurred` 来消除歧义。" + +#: ../../c-api/capsule.rst:103 +msgid "" +"Import a pointer to a C object from a capsule attribute in a module. The " +"*name* parameter should specify the full name to the attribute, as in " +"``module.attribute``. The *name* stored in the capsule must match this " +"string exactly. If *no_block* is true, import the module without blocking " +"(using :c:func:`PyImport_ImportModuleNoBlock`). If *no_block* is false, " +"import the module conventionally (using :c:func:`PyImport_ImportModule`)." +msgstr "" +"从一个模块的 capsule 属性导入指向 C 对象的指针。 *name* 形参应当指定属性的完整名称,与 ``module.attribute`` " +"中的一致。 保存在 capsule 中的 *name* 必须完全匹配此字符串。 如果 *no_block* 为真值,则以无阻塞模式导入模块 (使用 " +":c:func:`PyImport_ImportModuleNoBlock`)。 如果 *no_block* 为假值,则以传统模式导入模块 (使用 " +":c:func:`PyImport_ImportModule`)。" + +#: ../../c-api/capsule.rst:110 +msgid "" +"Return the capsule's internal *pointer* on success. On failure, set an " +"exception and return ``NULL``." +msgstr "成功时返回 capsule 的内部 *指针*。 在失败时设置一个异常并返回 ``NULL``。" + +#: ../../c-api/capsule.rst:116 +msgid "" +"Determines whether or not *capsule* is a valid capsule. A valid capsule is " +"non-``NULL``, passes :c:func:`PyCapsule_CheckExact`, has a non-``NULL`` " +"pointer stored in it, and its internal name matches the *name* parameter. " +"(See :c:func:`PyCapsule_GetPointer` for information on how capsule names are" +" compared.)" +msgstr "" +"确定 *capsule* 是否是一个有效的。 有效的 capsule 必须不为 ``NULL``,传递 " +":c:func:`PyCapsule_CheckExact`,在其中存储一个不为 ``NULL`` 的指针,并且其内部名称与 *name* 形参相匹配。" +" (请参阅 :c:func:`PyCapsule_GetPointer` 了解如何对 capsule 名称进行比较的有关信息。)" + +#: ../../c-api/capsule.rst:122 +msgid "" +"In other words, if :c:func:`PyCapsule_IsValid` returns a true value, calls " +"to any of the accessors (any function starting with :c:func:`PyCapsule_Get`)" +" are guaranteed to succeed." +msgstr "" +"换句话说,如果 :c:func:`PyCapsule_IsValid` 返回真值,则任何对访问器(以 :c:func:`PyCapsule_Get` " +"开头的任何函数)的调用都保证会成功。" + +#: ../../c-api/capsule.rst:126 +msgid "" +"Return a nonzero value if the object is valid and matches the name passed " +"in. Return ``0`` otherwise. This function will not fail." +msgstr "如果对象有效并且匹配传入的名称则返回非零值。 否则返回 ``0``。 此函数一定不会失败。" + +#: ../../c-api/capsule.rst:132 +msgid "Set the context pointer inside *capsule* to *context*." +msgstr "将 *capsule* 内部的上下文指针设为 *context*。" + +#: ../../c-api/capsule.rst:134 ../../c-api/capsule.rst:141 +#: ../../c-api/capsule.rst:150 ../../c-api/capsule.rst:158 +msgid "" +"Return ``0`` on success. Return nonzero and set an exception on failure." +msgstr "成功时返回 ``0``。 失败时返回非零值并设置一个异常。" + +#: ../../c-api/capsule.rst:139 +msgid "Set the destructor inside *capsule* to *destructor*." +msgstr "将 *capsule* 内部的析构器设为 *destructor*。" + +#: ../../c-api/capsule.rst:146 +msgid "" +"Set the name inside *capsule* to *name*. If non-``NULL``, the name must " +"outlive the capsule. If the previous *name* stored in the capsule was not " +"``NULL``, no attempt is made to free it." +msgstr "" +"将 *capsule* 内部的名称设为 *name*。 如果不为 ``NULL``,则名称的存在期必须比 capsule 更长。 如果之前保存在 " +"capsule 中的 *name* 不为 ``NULL``,则不会尝试释放它。" + +#: ../../c-api/capsule.rst:155 +msgid "" +"Set the void pointer inside *capsule* to *pointer*. The pointer may not be " +"``NULL``." +msgstr "将 *capsule* 内部的空指针设为 *pointer*。 指针不可为 ``NULL``。" diff --git a/c-api/cell.po b/c-api/cell.po new file mode 100644 index 000000000..5ae5601d9 --- /dev/null +++ b/c-api/cell.po @@ -0,0 +1,93 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) 2001-2022, Python Software Foundation +# This file is distributed under the same license as the Python package. +# FIRST AUTHOR , YEAR. +# +# Translators: +# Makdon , 2019 +# Freesand Leo , 2021 +# +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: Python 3.9\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2022-11-04 14:34+0000\n" +"PO-Revision-Date: 2017-02-16 17:33+0000\n" +"Last-Translator: Freesand Leo , 2021\n" +"Language-Team: Chinese (China) (https://www.transifex.com/python-doc/teams/5390/zh_CN/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: zh_CN\n" +"Plural-Forms: nplurals=1; plural=0;\n" + +#: ../../c-api/cell.rst:6 +msgid "Cell Objects" +msgstr "Cell 对象" + +#: ../../c-api/cell.rst:8 +msgid "" +"\"Cell\" objects are used to implement variables referenced by multiple " +"scopes. For each such variable, a cell object is created to store the value;" +" the local variables of each stack frame that references the value contains " +"a reference to the cells from outer scopes which also use that variable. " +"When the value is accessed, the value contained in the cell is used instead " +"of the cell object itself. This de-referencing of the cell object requires " +"support from the generated byte-code; these are not automatically de-" +"referenced when accessed. Cell objects are not likely to be useful " +"elsewhere." +msgstr "" +"“Cell”对象用于实现由多个作用域引用的变量。 " +"对于每个这样的变量,一个“Cell”对象为了存储该值而被创建;引用该值的每个堆栈框架的局部变量包含同样使用该变量的对外部作用域的“Cell”引用。 " +"访问该值时,将使用“Cell”中包含的值而不是单元格对象本身。 " +"这种对“Cell”对象的非关联化的引用需要支持生成的字节码;访问时不会自动非关联化这些内容。 “Cell”对象在其他地方可能不太有用。" + +#: ../../c-api/cell.rst:20 +msgid "The C structure used for cell objects." +msgstr "用于Cell对象的C结构体。" + +#: ../../c-api/cell.rst:25 +msgid "The type object corresponding to cell objects." +msgstr "与 Cell 对象对应的类型对​​象。" + +#: ../../c-api/cell.rst:30 +msgid "" +"Return true if *ob* is a cell object; *ob* must not be ``NULL``. This " +"function always succeeds." +msgstr "如果 *ob* 是一个 cell 对象则返回真值;*ob* 必须不为 ``NULL``。 此函数总是会成功执行。" + +#: ../../c-api/cell.rst:36 +msgid "" +"Create and return a new cell object containing the value *ob*. The parameter" +" may be ``NULL``." +msgstr "创建并返回一个包含值 *ob* 的新 cell 对象。形参可以为 ``NULL``。" + +#: ../../c-api/cell.rst:42 +msgid "Return the contents of the cell *cell*." +msgstr "返回 cell 对象 *cell* 的内容。" + +#: ../../c-api/cell.rst:47 +msgid "" +"Return the contents of the cell *cell*, but without checking that *cell* is " +"non-``NULL`` and a cell object." +msgstr "返回 cell 对象 *cell* 的内容,但是不检测 *cell* 是否非 ``NULL`` 并且为一个 cell 对象。" + +#: ../../c-api/cell.rst:53 +msgid "" +"Set the contents of the cell object *cell* to *value*. This releases the " +"reference to any current content of the cell. *value* may be ``NULL``. " +"*cell* must be non-``NULL``; if it is not a cell object, ``-1`` will be " +"returned. On success, ``0`` will be returned." +msgstr "" +"将 cell 对象 *cell* 的内容设为 *value*。 这将释放任何对 cell 对象当前内容的引用。 *value* 可以为 " +"``NULL``。 *cell* 必须为非 ``NULL``;如果它不是一个 cell 对象则将返回 ``-1``。 如果设置成功则将返回 ``0``。" + +#: ../../c-api/cell.rst:61 +msgid "" +"Sets the value of the cell object *cell* to *value*. No reference counts " +"are adjusted, and no checks are made for safety; *cell* must be non-``NULL``" +" and must be a cell object." +msgstr "" +"将 cell 对象 *cell* 的值设为 *value*。 不会调整引用计数,并且不会进行检测以保证安全;*cell* 必须为非 ``NULL`` " +"并且为一个 cell 对象。" diff --git a/c-api/code.po b/c-api/code.po new file mode 100644 index 000000000..39c9de6e4 --- /dev/null +++ b/c-api/code.po @@ -0,0 +1,82 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) 2001-2023, Python Software Foundation +# This file is distributed under the same license as the Python package. +# FIRST AUTHOR , YEAR. +# +# Translators: +# CommonZ , 2018 +# Alpha Du , 2019 +# Freesand Leo , 2021 +# Rafael Fontenelle , 2023 +# +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: Python 3.9\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2023-08-11 15:45+0000\n" +"PO-Revision-Date: 2017-02-16 17:34+0000\n" +"Last-Translator: Rafael Fontenelle , 2023\n" +"Language-Team: Chinese (China) (https://app.transifex.com/python-doc/teams/5390/zh_CN/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: zh_CN\n" +"Plural-Forms: nplurals=1; plural=0;\n" + +#: ../../c-api/code.rst:8 +msgid "Code Objects" +msgstr "代码对象" + +#: ../../c-api/code.rst:12 +msgid "" +"Code objects are a low-level detail of the CPython implementation. Each one " +"represents a chunk of executable code that hasn't yet been bound into a " +"function." +msgstr "代码对象是 CPython 实现的低层级细节。 每个代表一块尚未绑定到函数中的可执行代码。" + +#: ../../c-api/code.rst:18 +msgid "" +"The C structure of the objects used to describe code objects. The fields of" +" this type are subject to change at any time." +msgstr "用于描述代码对象的对象的 C 结构。 此类型字段可随时更改。" + +#: ../../c-api/code.rst:24 +msgid "" +"This is an instance of :c:type:`PyTypeObject` representing the Python " +":class:`code` type." +msgstr "这是一个 :c:type:`PyTypeObject` 实例,其表示Python的 :class:`code` 类型。" + +#: ../../c-api/code.rst:30 +msgid "" +"Return true if *co* is a :class:`code` object. This function always " +"succeeds." +msgstr "如果 *co* 是一个 :class:`code` 对象则返回真值。 此函数总是会成功执行。" + +#: ../../c-api/code.rst:34 +msgid "Return the number of free variables in *co*." +msgstr "返回 *co* 中的自由变量数。" + +#: ../../c-api/code.rst:38 +msgid "" +"Return a new code object. If you need a dummy code object to create a " +"frame, use :c:func:`PyCode_NewEmpty` instead. Calling :c:func:`PyCode_New` " +"directly can bind you to a precise Python version since the definition of " +"the bytecode changes often." +msgstr "" +"返回一个新的代码对象。 如果你需要一个虚拟代码对象来创建一个代码帧,请使用 :c:func:`PyCode_NewEmpty`。 调用 " +":c:func:`PyCode_New` 直接可以绑定到准确的 Python 版本,因为字节码的定义经常变化。" + +#: ../../c-api/code.rst:45 +msgid "" +"Similar to :c:func:`PyCode_New`, but with an extra \"posonlyargcount\" for " +"positional-only arguments." +msgstr "类似于 :c:func:`PyCode_New`,但带有一个额外的 \"posonlyargcount\" 用于仅限位置参数。" + +#: ../../c-api/code.rst:51 +msgid "" +"Return a new empty code object with the specified filename, function name, " +"and first line number. It is illegal to :func:`exec` or :func:`eval` the " +"resulting code object." +msgstr "" +"返回具有指定文件名、函数名和第一行号的新空代码对象。 对于 :func:`exec` 或 :func:`eval` 生成的代码对象是非法的。" diff --git a/c-api/codec.po b/c-api/codec.po new file mode 100644 index 000000000..f51bc9aa4 --- /dev/null +++ b/c-api/codec.po @@ -0,0 +1,187 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) 2001-2022, Python Software Foundation +# This file is distributed under the same license as the Python package. +# FIRST AUTHOR , YEAR. +# +# Translators: +# Zombie110year , 2019 +# Jiu Hong Jiang , 2019 +# Leo Li , 2019 +# Freesand Leo , 2020 +# +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: Python 3.9\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2022-11-04 14:34+0000\n" +"PO-Revision-Date: 2017-02-16 17:34+0000\n" +"Last-Translator: Freesand Leo , 2020\n" +"Language-Team: Chinese (China) (https://www.transifex.com/python-doc/teams/5390/zh_CN/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: zh_CN\n" +"Plural-Forms: nplurals=1; plural=0;\n" + +#: ../../c-api/codec.rst:4 +msgid "Codec registry and support functions" +msgstr "编解码器注册与支持功能" + +#: ../../c-api/codec.rst:8 +msgid "Register a new codec search function." +msgstr "注册一个新的编解码器搜索函数。" + +#: ../../c-api/codec.rst:10 +msgid "" +"As side effect, this tries to load the :mod:`encodings` package, if not yet " +"done, to make sure that it is always first in the list of search functions." +msgstr "作为副作用,其尝试加载 :mod:`encodings` 包,如果尚未完成,请确保它始终位于搜索函数列表的第一位。" + +#: ../../c-api/codec.rst:15 +msgid "" +"Return ``1`` or ``0`` depending on whether there is a registered codec for " +"the given *encoding*. This function always succeeds." +msgstr "根据注册的给定 *encoding* 的编解码器是否已存在而返回 ``1`` 或 ``0``。此函数总能成功。" + +#: ../../c-api/codec.rst:20 +msgid "Generic codec based encoding API." +msgstr "泛型编解码器基本编码 API。" + +#: ../../c-api/codec.rst:22 +msgid "" +"*object* is passed through the encoder function found for the given " +"*encoding* using the error handling method defined by *errors*. *errors* " +"may be ``NULL`` to use the default method defined for the codec. Raises a " +":exc:`LookupError` if no encoder can be found." +msgstr "" +"*object* 使用由 *errors* 所定义的错误处理方法传递给定 *encoding* 的编码器函数。 *errors* 可以为 " +"``NULL`` 表示使用为编码器所定义的默认方法。 如果找不到编码器则会引发 :exc:`LookupError`。" + +#: ../../c-api/codec.rst:29 +msgid "Generic codec based decoding API." +msgstr "泛型编解码器基本解码 API。" + +#: ../../c-api/codec.rst:31 +msgid "" +"*object* is passed through the decoder function found for the given " +"*encoding* using the error handling method defined by *errors*. *errors* " +"may be ``NULL`` to use the default method defined for the codec. Raises a " +":exc:`LookupError` if no encoder can be found." +msgstr "" +"*object* 使用由 *errors* 所定义的错误处理方法传递给定 *encoding* 的解码器函数。 *errors* 可以为 " +"``NULL`` 表示使用为编解码器所定义的默认方法。 如果找不到编解码器则会引发 :exc:`LookupError`。" + +#: ../../c-api/codec.rst:38 +msgid "Codec lookup API" +msgstr "Codec 查找API" + +#: ../../c-api/codec.rst:40 +msgid "" +"In the following functions, the *encoding* string is looked up converted to " +"all lower-case characters, which makes encodings looked up through this " +"mechanism effectively case-insensitive. If no codec is found, a " +":exc:`KeyError` is set and ``NULL`` returned." +msgstr "" +"在下列函数中,*encoding* 字符串会被查找并转换为小写字母形式,这使得通过此机制查找编码格式实际上对大小写不敏感。 " +"如果未找到任何编解码器,则将设置 :exc:`KeyError` 并返回 ``NULL``。" + +#: ../../c-api/codec.rst:47 +msgid "Get an encoder function for the given *encoding*." +msgstr "为给定的 *encoding* 获取一个编码器函数。" + +#: ../../c-api/codec.rst:51 +msgid "Get a decoder function for the given *encoding*." +msgstr "为给定的 *encoding* 获取一个解码器函数。" + +#: ../../c-api/codec.rst:55 +msgid "" +"Get an :class:`~codecs.IncrementalEncoder` object for the given *encoding*." +msgstr "为给定的 *encoding* 获取一个 :class:`~codecs.IncrementalEncoder` 对象。" + +#: ../../c-api/codec.rst:59 +msgid "" +"Get an :class:`~codecs.IncrementalDecoder` object for the given *encoding*." +msgstr "为给定的 *encoding* 获取一个 :class:`~codecs.IncrementalDecoder` 对象。" + +#: ../../c-api/codec.rst:63 +msgid "" +"Get a :class:`~codecs.StreamReader` factory function for the given " +"*encoding*." +msgstr "为给定的 *encoding* 获取一个 :class:`~codecs.StreamReader` 工厂函数。" + +#: ../../c-api/codec.rst:67 +msgid "" +"Get a :class:`~codecs.StreamWriter` factory function for the given " +"*encoding*." +msgstr "为给定的 *encoding* 获取一个 :class:`~codecs.StreamWriter` 工厂函数。" + +#: ../../c-api/codec.rst:71 +msgid "Registry API for Unicode encoding error handlers" +msgstr "用于Unicode编码错误处理程序的注册表API" + +#: ../../c-api/codec.rst:75 +msgid "" +"Register the error handling callback function *error* under the given " +"*name*. This callback function will be called by a codec when it encounters " +"unencodable characters/undecodable bytes and *name* is specified as the " +"error parameter in the call to the encode/decode function." +msgstr "" +"在给定的 *name* 之下注册错误处理回调函数 *error*。 该回调函数将在一个编解码器遇到无法编码的字符/无法解码的字节数据并且 *name* " +"被指定为 encode/decode 函数调用的 error 形参时由该编解码器来调用。" + +#: ../../c-api/codec.rst:80 +msgid "" +"The callback gets a single argument, an instance of " +":exc:`UnicodeEncodeError`, :exc:`UnicodeDecodeError` or " +":exc:`UnicodeTranslateError` that holds information about the problematic " +"sequence of characters or bytes and their offset in the original string (see" +" :ref:`unicodeexceptions` for functions to extract this information). The " +"callback must either raise the given exception, or return a two-item tuple " +"containing the replacement for the problematic sequence, and an integer " +"giving the offset in the original string at which encoding/decoding should " +"be resumed." +msgstr "" +"该回调函数会接受一个 :exc:`UnicodeEncodeError`, :exc:`UnicodeDecodeError` 或 " +":exc:`UnicodeTranslateError` 的实例作为单独参数,其中包含关于有问题字符或字节序列及其在原始序列的偏移量信息(请参阅 " +":ref:`unicodeexceptions` 了解提取此信息的函数详情)。 " +"该回调函数必须引发给定的异常,或者返回一个包含有问题序列及相应替换序列的二元组,以及一个表示偏移量的整数,该整数指明应在什么位置上恢复编码/解码操作。" + +#: ../../c-api/codec.rst:90 +msgid "Return ``0`` on success, ``-1`` on error." +msgstr "成功则返回``0`` ,失败则返回``-1`` " + +#: ../../c-api/codec.rst:94 +msgid "" +"Lookup the error handling callback function registered under *name*. As a " +"special case ``NULL`` can be passed, in which case the error handling " +"callback for \"strict\" will be returned." +msgstr "" +"查找在 *name* 之下注册的错误处理回调函数。 作为特例还可以传入 ``NULL``,在此情况下将返回针对 \"strict\" " +"的错误处理回调函数。" + +#: ../../c-api/codec.rst:100 +msgid "Raise *exc* as an exception." +msgstr "引发 *exc* 作为异常。" + +#: ../../c-api/codec.rst:104 +msgid "Ignore the unicode error, skipping the faulty input." +msgstr "忽略 unicode 错误,跳过错误的输入。" + +#: ../../c-api/codec.rst:108 +msgid "Replace the unicode encode error with ``?`` or ``U+FFFD``." +msgstr "使用 ``?`` 或 ``U+FFFD`` 替换 unicode 编码错误。" + +#: ../../c-api/codec.rst:112 +msgid "Replace the unicode encode error with XML character references." +msgstr "使用 XML 字符引用替换 unicode 编码错误。" + +#: ../../c-api/codec.rst:116 +msgid "" +"Replace the unicode encode error with backslash escapes (``\\x``, ``\\u`` " +"and ``\\U``)." +msgstr "使用反斜杠转义符 (``\\x``, ``\\u`` 和 ``\\U``) 替换 unicode 编码错误。" + +#: ../../c-api/codec.rst:121 +msgid "Replace the unicode encode error with ``\\N{...}`` escapes." +msgstr "使用 ``\\N{...}`` 转义符替换 unicode 编码错误。" diff --git a/c-api/complex.po b/c-api/complex.po new file mode 100644 index 000000000..26657c3af --- /dev/null +++ b/c-api/complex.po @@ -0,0 +1,177 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) 2001-2022, Python Software Foundation +# This file is distributed under the same license as the Python package. +# FIRST AUTHOR , YEAR. +# +# Translators: +# 叶浚安 , 2019 +# Freesand Leo , 2021 +# +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: Python 3.9\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2022-11-04 14:34+0000\n" +"PO-Revision-Date: 2017-02-16 17:34+0000\n" +"Last-Translator: Freesand Leo , 2021\n" +"Language-Team: Chinese (China) (https://www.transifex.com/python-doc/teams/5390/zh_CN/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: zh_CN\n" +"Plural-Forms: nplurals=1; plural=0;\n" + +#: ../../c-api/complex.rst:6 +msgid "Complex Number Objects" +msgstr "复数对象" + +#: ../../c-api/complex.rst:10 +msgid "" +"Python's complex number objects are implemented as two distinct types when " +"viewed from the C API: one is the Python object exposed to Python programs," +" and the other is a C structure which represents the actual complex number " +"value. The API provides functions for working with both." +msgstr "" +"从C " +"API看,Python的复数对象由两个不同的部分实现:一个是在Python程序使用的Python对象,另外的是一个代表真正复数值的C结构体。API提供了函数共同操作两者。" + +#: ../../c-api/complex.rst:17 +msgid "Complex Numbers as C Structures" +msgstr "表示复数的C结构体" + +#: ../../c-api/complex.rst:19 +msgid "" +"Note that the functions which accept these structures as parameters and " +"return them as results do so *by value* rather than dereferencing them " +"through pointers. This is consistent throughout the API." +msgstr "需要注意的是接受这些结构体的作为参数并当做结果返回的函数,都是传递“值”而不是引用指针。此规则适用于整个API。" + +#: ../../c-api/complex.rst:26 +msgid "" +"The C structure which corresponds to the value portion of a Python complex " +"number object. Most of the functions for dealing with complex number " +"objects use structures of this type as input or output values, as " +"appropriate. It is defined as::" +msgstr "这是一个对应Python复数对象的值部分的C结构体。绝大部分处理复数对象的函数都用这类型的结构体作为输入或者输出值,它可近似地定义为:" + +#: ../../c-api/complex.rst:39 +msgid "" +"Return the sum of two complex numbers, using the C :c:type:`Py_complex` " +"representation." +msgstr "返回两个复数的和,用 C 类型 :c:type:`Py_complex` 表示。" + +#: ../../c-api/complex.rst:45 +msgid "" +"Return the difference between two complex numbers, using the C " +":c:type:`Py_complex` representation." +msgstr "返回两个复数的差,用 C 类型 :c:type:`Py_complex` 表示。" + +#: ../../c-api/complex.rst:51 +msgid "" +"Return the negation of the complex number *num*, using the C " +":c:type:`Py_complex` representation." +msgstr "返回复数 *num* 的负值,用 C :c:type:`Py_complex` 表示。" + +#: ../../c-api/complex.rst:57 +msgid "" +"Return the product of two complex numbers, using the C :c:type:`Py_complex` " +"representation." +msgstr "返回两个复数的乘积,用 C 类型 :c:type:`Py_complex` 表示。" + +#: ../../c-api/complex.rst:63 +msgid "" +"Return the quotient of two complex numbers, using the C :c:type:`Py_complex`" +" representation." +msgstr "返回两个复数的商,用 C 类型 :c:type:`Py_complex` 表示。" + +#: ../../c-api/complex.rst:66 +msgid "" +"If *divisor* is null, this method returns zero and sets :c:data:`errno` to " +":c:data:`EDOM`." +msgstr "如果 *divisor* 为空,这个方法返回零并设置 :c:data:`errno` 为 :c:data:`EDOM`。" + +#: ../../c-api/complex.rst:72 +msgid "" +"Return the exponentiation of *num* by *exp*, using the C " +":c:type:`Py_complex` representation." +msgstr "返回 *num* 的 *exp* 次幂,用 C 类型 :c:type:`Py_complex` 表示。" + +#: ../../c-api/complex.rst:75 +msgid "" +"If *num* is null and *exp* is not a positive real number, this method " +"returns zero and sets :c:data:`errno` to :c:data:`EDOM`." +msgstr "如果 *num* 为空且 *exp* 不是正实数,这个方法返回零并设置 :c:data:`errno` 为 :c:data:`EDOM`。" + +#: ../../c-api/complex.rst:80 +msgid "Complex Numbers as Python Objects" +msgstr "表示复数的Python对象" + +#: ../../c-api/complex.rst:85 +msgid "" +"This subtype of :c:type:`PyObject` represents a Python complex number " +"object." +msgstr "这个C类型 :c:type:`PyObject` 的子类型代表一个 Python 复数对象。" + +#: ../../c-api/complex.rst:90 +msgid "" +"This instance of :c:type:`PyTypeObject` represents the Python complex number" +" type. It is the same object as :class:`complex` in the Python layer." +msgstr "" +"这是个属于C类型 :c:type:`PyTypeObject` 的代表 Python 复数类型的实例。 和 Python 层面的类 " +":class:`complex` 是同一个对象。" + +#: ../../c-api/complex.rst:96 +msgid "" +"Return true if its argument is a :c:type:`PyComplexObject` or a subtype of " +":c:type:`PyComplexObject`. This function always succeeds." +msgstr "" +"如果它的参数是一个 :c:type:`PyComplexObject` 或者 :c:type:`PyComplexObject` 的子类型则返回真值。 " +"此函数总是会成功执行。" + +#: ../../c-api/complex.rst:102 +msgid "" +"Return true if its argument is a :c:type:`PyComplexObject`, but not a " +"subtype of :c:type:`PyComplexObject`. This function always succeeds." +msgstr "" +"如果它的参数是一个 :c:type:`PyComplexObject` 但不是 :c:type:`PyComplexObject` 的子类型则返回真值。" +" 此函数总是会成功执行。" + +#: ../../c-api/complex.rst:108 +msgid "" +"Create a new Python complex number object from a C :c:type:`Py_complex` " +"value." +msgstr "根据C类型 :c:type:`Py_complex` 的值生成一个新的Python复数对象。" + +#: ../../c-api/complex.rst:113 +msgid "Return a new :c:type:`PyComplexObject` object from *real* and *imag*." +msgstr "根据 *real* 和 *imag* 返回一个新的C类型 :c:type:`PyComplexObject` 对象。" + +#: ../../c-api/complex.rst:118 +msgid "Return the real part of *op* as a C :c:type:`double`." +msgstr "以C类型 :c:type:`double` 返回 *op* 的实部。" + +#: ../../c-api/complex.rst:123 +msgid "Return the imaginary part of *op* as a C :c:type:`double`." +msgstr "以C类型 :c:type:`double` 返回 *op* 的虚部。" + +#: ../../c-api/complex.rst:128 +msgid "Return the :c:type:`Py_complex` value of the complex number *op*." +msgstr "返回复数 *op* 的C类型 :c:type:`Py_complex` 值。" + +#: ../../c-api/complex.rst:130 +msgid "" +"If *op* is not a Python complex number object but has a :meth:`__complex__` " +"method, this method will first be called to convert *op* to a Python complex" +" number object. If ``__complex__()`` is not defined then it falls back to " +":meth:`__float__`. If ``__float__()`` is not defined then it falls back to " +":meth:`__index__`. Upon failure, this method returns ``-1.0`` as a real " +"value." +msgstr "" +"如果 *op* 不是一个 Python 复数对象,但是具有 :meth:`__complex__` 方法,此方法将首先被调用,将 *op* 转换为一个 " +"Python 复数对象。 如果 ``__complex__()`` 未定义则将回退至 :meth:`__float__`,如果 " +"``__float__()`` 未定义则将回退至 :meth:`__index__`。 如果失败,此方法将返回 ``-1.0`` 作为实数值。" + +#: ../../c-api/complex.rst:137 +msgid "Use :meth:`__index__` if available." +msgstr "如果可用将使用 :meth:`__index__`。" diff --git a/c-api/concrete.po b/c-api/concrete.po new file mode 100644 index 000000000..86e900a24 --- /dev/null +++ b/c-api/concrete.po @@ -0,0 +1,90 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) 2001-2022, Python Software Foundation +# This file is distributed under the same license as the Python package. +# FIRST AUTHOR , YEAR. +# +# Translators: +# Alpha Du , 2019 +# Wang Saul , 2019 +# ppcfish , 2019 +# Freesand Leo , 2019 +# +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: Python 3.9\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2022-11-04 14:34+0000\n" +"PO-Revision-Date: 2017-02-16 17:34+0000\n" +"Last-Translator: Freesand Leo , 2019\n" +"Language-Team: Chinese (China) (https://www.transifex.com/python-doc/teams/5390/zh_CN/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: zh_CN\n" +"Plural-Forms: nplurals=1; plural=0;\n" + +#: ../../c-api/concrete.rst:8 +msgid "Concrete Objects Layer" +msgstr "具体的对象层" + +#: ../../c-api/concrete.rst:10 +msgid "" +"The functions in this chapter are specific to certain Python object types. " +"Passing them an object of the wrong type is not a good idea; if you receive " +"an object from a Python program and you are not sure that it has the right " +"type, you must perform a type check first; for example, to check that an " +"object is a dictionary, use :c:func:`PyDict_Check`. The chapter is " +"structured like the \"family tree\" of Python object types." +msgstr "" +"本章中的函数特定于某些 Python 对象类型。 将错误类型的对象传递给它们并不是一个好主意;如果您从 Python " +"程序接收到一个对象,但不确定它是否具有正确的类型,则必须首先执行类型检查;例如,要检查对象是否为字典,请使用 " +":c:func:`PyDict_Check`。 本章的结构类似于 Python 对象类型的“家族树”。" + +#: ../../c-api/concrete.rst:19 +msgid "" +"While the functions described in this chapter carefully check the type of " +"the objects which are passed in, many of them do not check for ``NULL`` " +"being passed instead of a valid object. Allowing ``NULL`` to be passed in " +"can cause memory access violations and immediate termination of the " +"interpreter." +msgstr "" +"虽然本章所描述的函数会仔细检查传入对象的类型,但是其中许多函数不会检查传入的对象是否为 ``NULL``。 允许传入 ``NULL`` " +"可能导致内存访问冲突和解释器的立即终止。" + +#: ../../c-api/concrete.rst:28 +msgid "Fundamental Objects" +msgstr "基本对象" + +#: ../../c-api/concrete.rst:30 +msgid "" +"This section describes Python type objects and the singleton object " +"``None``." +msgstr "本节描述Python类型对象和单一实例对象 象None。" + +#: ../../c-api/concrete.rst:41 +msgid "Numeric Objects" +msgstr "数值对象" + +#: ../../c-api/concrete.rst:56 +msgid "Sequence Objects" +msgstr "序列对象" + +#: ../../c-api/concrete.rst:60 +msgid "" +"Generic operations on sequence objects were discussed in the previous " +"chapter; this section deals with the specific kinds of sequence objects that" +" are intrinsic to the Python language." +msgstr "序列对象的一般操作在前一章中讨论过;本节介绍Python语言固有的特定类型的序列对象。" + +#: ../../c-api/concrete.rst:78 +msgid "Container Objects" +msgstr "容器对象" + +#: ../../c-api/concrete.rst:91 +msgid "Function Objects" +msgstr "函数对象" + +#: ../../c-api/concrete.rst:102 +msgid "Other Objects" +msgstr "其他对象" diff --git a/c-api/contextvars.po b/c-api/contextvars.po new file mode 100644 index 000000000..e871c6e57 --- /dev/null +++ b/c-api/contextvars.po @@ -0,0 +1,195 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) 2001-2022, Python Software Foundation +# This file is distributed under the same license as the Python package. +# FIRST AUTHOR , YEAR. +# +# Translators: +# Kade For, 2019 +# ppcfish , 2019 +# bmxbmx3 <982766639@qq.com>, 2019 +# Jiu Hong Jiang , 2019 +# Freesand Leo , 2021 +# +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: Python 3.9\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2022-11-04 14:34+0000\n" +"PO-Revision-Date: 2018-06-29 21:01+0000\n" +"Last-Translator: Freesand Leo , 2021\n" +"Language-Team: Chinese (China) (https://www.transifex.com/python-doc/teams/5390/zh_CN/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: zh_CN\n" +"Plural-Forms: nplurals=1; plural=0;\n" + +#: ../../c-api/contextvars.rst:6 +msgid "Context Variables Objects" +msgstr "上下文变量对象" + +#: ../../c-api/contextvars.rst:13 +msgid "" +"In Python 3.7.1 the signatures of all context variables C APIs were " +"**changed** to use :c:type:`PyObject` pointers instead of " +":c:type:`PyContext`, :c:type:`PyContextVar`, and :c:type:`PyContextToken`, " +"e.g.::" +msgstr "" +"在 Python 3.7.1 中,所有上下文变量 C API 的签名被 **更改** 为使用 :c:type:`PyObject` 指针而不是 " +":c:type:`PyContext`, :c:type:`PyContextVar` 以及 :c:type:`PyContextToken`,例如::" + +#: ../../c-api/contextvars.rst:24 +msgid "See :issue:`34762` for more details." +msgstr "请参阅 :issue:`34762` 了解详情。" + +#: ../../c-api/contextvars.rst:29 +msgid "" +"This section details the public C API for the :mod:`contextvars` module." +msgstr "本节深入介绍了 :mod:`contextvars` 模块的公用 C API。" + +#: ../../c-api/contextvars.rst:33 +msgid "" +"The C structure used to represent a :class:`contextvars.Context` object." +msgstr "用于表示 :class:`contextvars.Context` 对象的 C 结构体。" + +#: ../../c-api/contextvars.rst:38 +msgid "" +"The C structure used to represent a :class:`contextvars.ContextVar` object." +msgstr "用于表示 :class:`contextvars.ContextVar` 对象的 C 结构体。" + +#: ../../c-api/contextvars.rst:43 +msgid "The C structure used to represent a :class:`contextvars.Token` object." +msgstr "用于表示 :class:`contextvars.Token` 对象的 C 结构体。" + +#: ../../c-api/contextvars.rst:47 +msgid "The type object representing the *context* type." +msgstr "表示 *context* 类型的类型对象。" + +#: ../../c-api/contextvars.rst:51 +msgid "The type object representing the *context variable* type." +msgstr "表示 *context variable* 类型的类型对象。" + +#: ../../c-api/contextvars.rst:55 +msgid "The type object representing the *context variable token* type." +msgstr "表示 *context variable token* 类型的类型对象。" + +#: ../../c-api/contextvars.rst:58 +msgid "Type-check macros:" +msgstr "类型检查宏:" + +#: ../../c-api/contextvars.rst:62 +msgid "" +"Return true if *o* is of type :c:data:`PyContext_Type`. *o* must not be " +"``NULL``. This function always succeeds." +msgstr "" +"如果 *o* 的类型为 :c:data:`PyContext_Type` 则返回真值。 *o* 必须不为 ``NULL``。 此函数总是会成功执行。" + +#: ../../c-api/contextvars.rst:67 +msgid "" +"Return true if *o* is of type :c:data:`PyContextVar_Type`. *o* must not be " +"``NULL``. This function always succeeds." +msgstr "" +"如果 *o* 的类型为 :c:data:`PyContextVar_Type` 则返回真值。 *o* 必须不为 ``NULL``。 " +"此函数总是会成功执行。" + +#: ../../c-api/contextvars.rst:72 +msgid "" +"Return true if *o* is of type :c:data:`PyContextToken_Type`. *o* must not be" +" ``NULL``. This function always succeeds." +msgstr "" +"如果 *o* 的类型为 :c:data:`PyContextToken_Type` 则返回真值。 *o* 必须不为 ``NULL``。 " +"此函数总是会成功执行。" + +#: ../../c-api/contextvars.rst:76 +msgid "Context object management functions:" +msgstr "上下文对象管理函数:" + +#: ../../c-api/contextvars.rst:80 +msgid "" +"Create a new empty context object. Returns ``NULL`` if an error has " +"occurred." +msgstr "创建一个新的空上下文对象。 如果发生错误则返回 ``NULL``。" + +#: ../../c-api/contextvars.rst:85 +msgid "" +"Create a shallow copy of the passed *ctx* context object. Returns ``NULL`` " +"if an error has occurred." +msgstr "创建所传入的 *ctx* 上下文对象的浅拷贝。 如果发生错误则返回 ``NULL``。" + +#: ../../c-api/contextvars.rst:90 +msgid "" +"Create a shallow copy of the current thread context. Returns ``NULL`` if an " +"error has occurred." +msgstr "创建当前线程上下文的浅拷贝。 如果发生错误则返回 ``NULL``。" + +#: ../../c-api/contextvars.rst:95 +msgid "" +"Set *ctx* as the current context for the current thread. Returns ``0`` on " +"success, and ``-1`` on error." +msgstr "将 *ctx* 设为当前线程的当前上下文。 成功时返回 ``0``,出错时返回 ``-1``。" + +#: ../../c-api/contextvars.rst:100 +msgid "" +"Deactivate the *ctx* context and restore the previous context as the current" +" context for the current thread. Returns ``0`` on success, and ``-1`` on " +"error." +msgstr "取消激活 *ctx* 上下文并将之前的上下文恢复为当前线程的当前上下文。 成功时返回 ``0``,出错时返回 ``-1``。" + +#: ../../c-api/contextvars.rst:105 +msgid "Context variable functions:" +msgstr "上下文变量函数:" + +#: ../../c-api/contextvars.rst:109 +msgid "" +"Create a new ``ContextVar`` object. The *name* parameter is used for " +"introspection and debug purposes. The *def* parameter specifies a default " +"value for the context variable, or ``NULL`` for no default. If an error has " +"occurred, this function returns ``NULL``." +msgstr "" +"创建一个新的 ``ContextVar`` 对象。 形参 *name* 用于自我检查和调试目的。 形参 *def* 为上下文变量指定默认值,或为 " +"``NULL`` 表示无默认值。 如果发生错误,这个函数会返回 ``NULL``。" + +#: ../../c-api/contextvars.rst:116 +msgid "" +"Get the value of a context variable. Returns ``-1`` if an error has " +"occurred during lookup, and ``0`` if no error occurred, whether or not a " +"value was found." +msgstr "获取上下文变量的值。如果在查找过程中发生错误,返回' ' -1 ' ',如果没有发生错误,无论是否找到值,都返回' ' 0 ' '," + +#: ../../c-api/contextvars.rst:120 +msgid "" +"If the context variable was found, *value* will be a pointer to it. If the " +"context variable was *not* found, *value* will point to:" +msgstr "如果找到上下文变量,*value* 将是指向它的指针。 如果上下文变量 *没有* 找到,*value* 将指向:" + +#: ../../c-api/contextvars.rst:123 +msgid "*default_value*, if not ``NULL``;" +msgstr "*default_value*,如果非``NULL``;" + +#: ../../c-api/contextvars.rst:124 +msgid "the default value of *var*, if not ``NULL``;" +msgstr "*var* 的默认值,如果不是 ``NULL``;" + +#: ../../c-api/contextvars.rst:125 +msgid "``NULL``" +msgstr "``NULL``" + +#: ../../c-api/contextvars.rst:127 +msgid "Except for ``NULL``, the function returns a new reference." +msgstr "除了返回 ``NULL``,这个函数会返回一个新的引用。" + +#: ../../c-api/contextvars.rst:131 +msgid "" +"Set the value of *var* to *value* in the current context. Returns a new " +"token object for this change, or ``NULL`` if an error has occurred." +msgstr "在当前上下文中将 *var* 设为 *value*。 返回针对此修改的新凭据对象,或者如果发生错误则返回 ``NULL``。" + +#: ../../c-api/contextvars.rst:136 +msgid "" +"Reset the state of the *var* context variable to that it was in before " +":c:func:`PyContextVar_Set` that returned the *token* was called. This " +"function returns ``0`` on success and ``-1`` on error." +msgstr "" +"将上下文变量 *var* 的状态重置为它在返回 *token* 的 :c:func:`PyContextVar_Set` 被调用之前的状态。 " +"此函数成功时返回 ``0``,出错时返回 ``-1``。" diff --git a/c-api/conversion.po b/c-api/conversion.po new file mode 100644 index 000000000..e3e564089 --- /dev/null +++ b/c-api/conversion.po @@ -0,0 +1,251 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) 2001-2022, Python Software Foundation +# This file is distributed under the same license as the Python package. +# FIRST AUTHOR , YEAR. +# +# Translators: +# Nasy, 2019 +# Pan Felix , 2019 +# ppcfish , 2019 +# dannyvi , 2019 +# Naisen Xu <723648649@qq.com>, 2019 +# Alpha Du , 2019 +# Freesand Leo , 2021 +# +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: Python 3.9\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2022-11-04 14:34+0000\n" +"PO-Revision-Date: 2017-02-16 17:34+0000\n" +"Last-Translator: Freesand Leo , 2021\n" +"Language-Team: Chinese (China) (https://www.transifex.com/python-doc/teams/5390/zh_CN/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: zh_CN\n" +"Plural-Forms: nplurals=1; plural=0;\n" + +#: ../../c-api/conversion.rst:6 +msgid "String conversion and formatting" +msgstr "字符串转换与格式化" + +#: ../../c-api/conversion.rst:8 +msgid "Functions for number conversion and formatted string output." +msgstr "用于数字转换和格式化字符串输出的函数" + +#: ../../c-api/conversion.rst:13 +msgid "" +"Output not more than *size* bytes to *str* according to the format string " +"*format* and the extra arguments. See the Unix man page " +":manpage:`snprintf(3)`." +msgstr "" +"根据格式字符串 *format* 和额外参数,输出不超过 *size* 个字节到 *str*。 参见 Unix 手册页面 " +":manpage:`snprintf(3)`。" + +#: ../../c-api/conversion.rst:19 +msgid "" +"Output not more than *size* bytes to *str* according to the format string " +"*format* and the variable argument list *va*. Unix man page " +":manpage:`vsnprintf(3)`." +msgstr "" +"根据格式字符串 *format* 和变量参数列表 *va*,输出不超过 *size* 个字节到 *str*。 参见 Unix 手册页面 " +":manpage:`vsnprintf(3)`。" + +#: ../../c-api/conversion.rst:23 +msgid "" +":c:func:`PyOS_snprintf` and :c:func:`PyOS_vsnprintf` wrap the Standard C " +"library functions :c:func:`snprintf` and :c:func:`vsnprintf`. Their purpose " +"is to guarantee consistent behavior in corner cases, which the Standard C " +"functions do not." +msgstr "" +":c:func:`PyOS_snprintf` 和 :c:func:`PyOS_vsnprintf` 包装 C 标准库函数 " +":c:func:`snprintf` 和 :c:func:`vsnprintf` 。它们的目的是保证在极端情况下的一致行为,而标准 C 的函数则不然。" + +#: ../../c-api/conversion.rst:28 +msgid "" +"The wrappers ensure that ``str[size-1]`` is always ``'\\0'`` upon return. " +"They never write more than *size* bytes (including the trailing ``'\\0'``) " +"into str. Both functions require that ``str != NULL``, ``size > 0`` and " +"``format != NULL``." +msgstr "" +"包装器会确保 ``str[size-1]`` 在返回时始终为 ``'\\0'``。 它们从不写入超过 *size* 个字节 (包括末尾的 " +"``'\\0'``) 到字符串。 两个函数都要求 ``str != NULL``, ``size > 0`` 和 ``format != NULL``。" + +#: ../../c-api/conversion.rst:33 +msgid "" +"If the platform doesn't have :c:func:`vsnprintf` and the buffer size needed " +"to avoid truncation exceeds *size* by more than 512 bytes, Python aborts " +"with a :c:func:`Py_FatalError`." +msgstr "" +"如果平台没有 :c:func:`vsnprintf` 而且缓冲区大小需要避免截断超出 *size* 512 字节以上,Python 会以一个 " +":c:func:`Py_FatalError` 来中止。" + +#: ../../c-api/conversion.rst:37 +msgid "" +"The return value (*rv*) for these functions should be interpreted as " +"follows:" +msgstr "这些函数的返回值( *rv* )应按照以下规则被解释:" + +#: ../../c-api/conversion.rst:39 +msgid "" +"When ``0 <= rv < size``, the output conversion was successful and *rv* " +"characters were written to *str* (excluding the trailing ``'\\0'`` byte at " +"``str[rv]``)." +msgstr "" +"当 ``0 <= rv < size`` 时,输出转换即成功并将 *rv* 个字符写入到 *str* (不包括末尾 ``str[rv]`` 位置的 " +"``'\\0'`` 字节)。" + +#: ../../c-api/conversion.rst:43 +msgid "" +"When ``rv >= size``, the output conversion was truncated and a buffer with " +"``rv + 1`` bytes would have been needed to succeed. ``str[size-1]`` is " +"``'\\0'`` in this case." +msgstr "" +"当 ``rv >= size`` 时,输出转换会被截断并且需要一个具有 ``rv + 1`` 字节的缓冲区才能成功执行。 在此情况下 " +"``str[size-1]`` 为 ``'\\0'``。" + +#: ../../c-api/conversion.rst:47 +msgid "" +"When ``rv < 0``, \"something bad happened.\" ``str[size-1]`` is ``'\\0'`` in" +" this case too, but the rest of *str* is undefined. The exact cause of the " +"error depends on the underlying platform." +msgstr "" +"当 ``rv < 0`` 时,\"会发生不好的事情。\" 在此情况下 ``str[size-1]`` 也为 ``'\\0'``,但 *str* " +"的其余部分是未定义的。 错误的确切原因取决于底层平台。" + +#: ../../c-api/conversion.rst:51 +msgid "" +"The following functions provide locale-independent string to number " +"conversions." +msgstr "以下函数提供与语言环境无关的字符串到数字转换。" + +#: ../../c-api/conversion.rst:56 +msgid "" +"Convert a string ``s`` to a :c:type:`double`, raising a Python exception on " +"failure. The set of accepted strings corresponds to the set of strings " +"accepted by Python's :func:`float` constructor, except that ``s`` must not " +"have leading or trailing whitespace. The conversion is independent of the " +"current locale." +msgstr "" +"将字符串 ``s`` 转换为 :c:type:`double` 类型,失败时引发Python异常。接受的字符串的集合对应于被 Python 的 " +":func:`float` 构造函数接受的字符串的集合,除了 ``s`` 必须没有前导或尾随空格。转换必须独立于当前的区域。" + +#: ../../c-api/conversion.rst:62 +msgid "" +"If ``endptr`` is ``NULL``, convert the whole string. Raise " +":exc:`ValueError` and return ``-1.0`` if the string is not a valid " +"representation of a floating-point number." +msgstr "" +"如果 ``endptr`` 是 ``NULL`` ,转换整个字符串。引发 :exc:`ValueError` 并且 返回 ``-1.0`` " +"如果字符串不是浮点数的有效的表达方式。" + +#: ../../c-api/conversion.rst:66 +msgid "" +"If endptr is not ``NULL``, convert as much of the string as possible and set" +" ``*endptr`` to point to the first unconverted character. If no initial " +"segment of the string is the valid representation of a floating-point " +"number, set ``*endptr`` to point to the beginning of the string, raise " +"ValueError, and return ``-1.0``." +msgstr "" +"如果 ``endptr`` 不是 ``NULL`` ,尽可能多的转换字符串并将 ``*endptr`` " +"设置为指向第一个未转换的字符。如果字符串的初始段不是浮点数的有效的表达方式,将 ``*endptr`` 设置为指向字符串的开头,引发 " +"ValueError 异常,并且返回 ``-1.0`` 。" + +#: ../../c-api/conversion.rst:73 +msgid "" +"If ``s`` represents a value that is too large to store in a float (for " +"example, ``\"1e500\"`` is such a string on many platforms) then if " +"``overflow_exception`` is ``NULL`` return ``Py_HUGE_VAL`` (with an " +"appropriate sign) and don't set any exception. Otherwise, " +"``overflow_exception`` must point to a Python exception object; raise that " +"exception and return ``-1.0``. In both cases, set ``*endptr`` to point to " +"the first character after the converted value." +msgstr "" +"如果 ``s`` 表示一个太大而不能存储在一个浮点数中的值(比方说, ``\"1e500\"`` 在许多平台上是一个字符串)然后如果 " +"``overflow_exception`` 是 ``NULL`` 返回 ``Py_HUGE_VAL`` (用适当的符号)并且不设置任何异常。 " +"在其他方面, ``overflow_exception`` 必须指向一个 Python 异常对象;引发异常并返回 ``-1.0`` " +"。在这两种情况下,设置 ``*endptr`` 指向转换值之后的第一个字符。" + +#: ../../c-api/conversion.rst:81 +msgid "" +"If any other error occurs during the conversion (for example an out-of-" +"memory error), set the appropriate Python exception and return ``-1.0``." +msgstr "如果在转换期间发生任何其他错误(比如一个内存不足的错误),设置适当的 Python 异常并且返回 ``-1.0`` 。" + +#: ../../c-api/conversion.rst:90 +msgid "" +"Convert a :c:type:`double` *val* to a string using supplied *format_code*, " +"*precision*, and *flags*." +msgstr "" +"转换 :c:type:`double` *val* 为一个使用 *format_code*, *precision* 和 *flags* 的字符串" + +#: ../../c-api/conversion.rst:93 +msgid "" +"*format_code* must be one of ``'e'``, ``'E'``, ``'f'``, ``'F'``, ``'g'``, " +"``'G'`` or ``'r'``. For ``'r'``, the supplied *precision* must be 0 and is " +"ignored. The ``'r'`` format code specifies the standard :func:`repr` " +"format." +msgstr "" +"*格式码* 必须是以下其中之一, ``'e'``, ``'E'``, ``'f'``, ``'F'``, ``'g'``, ``'G'`` 或者 " +"``'r'``。对于 ``'r'`` , 提供的 *精度* 必须是0。``'r'`` 格式码指定了标准函数 :func:`repr` 格式。" + +#: ../../c-api/conversion.rst:98 +msgid "" +"*flags* can be zero or more of the values ``Py_DTSF_SIGN``, " +"``Py_DTSF_ADD_DOT_0``, or ``Py_DTSF_ALT``, or-ed together:" +msgstr "" +"*flags* 可以为零或者其他值 ``Py_DTSF_SIGN``, ``Py_DTSF_ADD_DOT_0`` 或 ``Py_DTSF_ALT`` " +"或其组合:" + +#: ../../c-api/conversion.rst:101 +msgid "" +"``Py_DTSF_SIGN`` means to always precede the returned string with a sign " +"character, even if *val* is non-negative." +msgstr "``Py_DTSF_SIGN`` 表示总是在返回的字符串前附加一个符号字符,即使 *val* 为非负数。" + +#: ../../c-api/conversion.rst:104 +msgid "" +"``Py_DTSF_ADD_DOT_0`` means to ensure that the returned string will not look" +" like an integer." +msgstr "``Py_DTSF_ADD_DOT_0`` 表示确保返回的字符串看起来不像是一个整数。" + +#: ../../c-api/conversion.rst:107 +msgid "" +"``Py_DTSF_ALT`` means to apply \"alternate\" formatting rules. See the " +"documentation for the :c:func:`PyOS_snprintf` ``'#'`` specifier for details." +msgstr "" +"``Py_DTSF_ALT`` 表示应用 \"替代的\" 格式化规则。 相关细节请参阅 :c:func:`PyOS_snprintf` ``'#'`` " +"定义文档。" + +#: ../../c-api/conversion.rst:111 +msgid "" +"If *ptype* is non-``NULL``, then the value it points to will be set to one " +"of ``Py_DTST_FINITE``, ``Py_DTST_INFINITE``, or ``Py_DTST_NAN``, signifying " +"that *val* is a finite number, an infinite number, or not a number, " +"respectively." +msgstr "" +"如果 *ptype* 不为 ``NULL``,则它指向的值将被设为 ``Py_DTST_FINITE``, ``Py_DTST_INFINITE`` 或" +" ``Py_DTST_NAN`` 中的一个,分别表示 *val* 是一个有限数字、无限数字或非数字。" + +#: ../../c-api/conversion.rst:115 +msgid "" +"The return value is a pointer to *buffer* with the converted string or " +"``NULL`` if the conversion failed. The caller is responsible for freeing the" +" returned string by calling :c:func:`PyMem_Free`." +msgstr "" +"返回值是一个指向包含转换后字符串的 *buffer* 的指针,如果转换失败则为 ``NULL``。 调用方要负责调用 " +":c:func:`PyMem_Free` 来释放返回的字符串。" + +#: ../../c-api/conversion.rst:124 +msgid "" +"Case insensitive comparison of strings. The function works almost " +"identically to :c:func:`strcmp` except that it ignores the case." +msgstr "字符串不区分大小写。该函数几乎与 :c:func:`strcmp` 的工作方式相同,只是它忽略了大小写。" + +#: ../../c-api/conversion.rst:130 +msgid "" +"Case insensitive comparison of strings. The function works almost " +"identically to :c:func:`strncmp` except that it ignores the case." +msgstr "字符串不区分大小写。该函数几乎与 :c:func:`strncmp` 的工作方式相同,只是它忽略了大小写。" diff --git a/c-api/coro.po b/c-api/coro.po new file mode 100644 index 000000000..e0715324a --- /dev/null +++ b/c-api/coro.po @@ -0,0 +1,58 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) 2001-2022, Python Software Foundation +# This file is distributed under the same license as the Python package. +# FIRST AUTHOR , YEAR. +# +# Translators: +# ww song , 2018 +# Freesand Leo , 2021 +# +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: Python 3.9\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2022-11-04 14:34+0000\n" +"PO-Revision-Date: 2017-02-16 17:34+0000\n" +"Last-Translator: Freesand Leo , 2021\n" +"Language-Team: Chinese (China) (https://www.transifex.com/python-doc/teams/5390/zh_CN/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: zh_CN\n" +"Plural-Forms: nplurals=1; plural=0;\n" + +#: ../../c-api/coro.rst:6 +msgid "Coroutine Objects" +msgstr "协程对象" + +#: ../../c-api/coro.rst:10 +msgid "" +"Coroutine objects are what functions declared with an ``async`` keyword " +"return." +msgstr "协程对象是使用 ``async`` 关键字声明的函数返回的。" + +#: ../../c-api/coro.rst:16 +msgid "The C structure used for coroutine objects." +msgstr "用于协程对象的C结构体。" + +#: ../../c-api/coro.rst:21 +msgid "The type object corresponding to coroutine objects." +msgstr "与协程对象对应的类型对​​象。" + +#: ../../c-api/coro.rst:26 +msgid "" +"Return true if *ob*'s type is :c:type:`PyCoro_Type`; *ob* must not be " +"``NULL``. This function always succeeds." +msgstr "" +"如果 *ob* 的类型是 :c:type:`PyCoro_Type` 则返回真值;*ob* 必须不为 ``NULL``。 此函数总是会成功执行。" + +#: ../../c-api/coro.rst:32 +msgid "" +"Create and return a new coroutine object based on the *frame* object, with " +"``__name__`` and ``__qualname__`` set to *name* and *qualname*. A reference " +"to *frame* is stolen by this function. The *frame* argument must not be " +"``NULL``." +msgstr "" +"基于 *frame* 对象创建并返回一个新的协程对象,其中 ``__name__`` 和 ``__qualname__`` 设为 *name* 和 " +"*qualname*。 此函数会取得一个对 *frame* 的引用。 *frame* 参数必须不为 ``NULL``。" diff --git a/c-api/datetime.po b/c-api/datetime.po new file mode 100644 index 000000000..c4767ccd4 --- /dev/null +++ b/c-api/datetime.po @@ -0,0 +1,309 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) 2001-2022, Python Software Foundation +# This file is distributed under the same license as the Python package. +# FIRST AUTHOR , YEAR. +# +# Translators: +# Larry Wang , 2019 +# Jiu Hong Jiang , 2019 +# ppcfish , 2019 +# Freesand Leo , 2021 +# +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: Python 3.9\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2022-11-04 14:34+0000\n" +"PO-Revision-Date: 2017-02-16 17:34+0000\n" +"Last-Translator: Freesand Leo , 2021\n" +"Language-Team: Chinese (China) (https://www.transifex.com/python-doc/teams/5390/zh_CN/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: zh_CN\n" +"Plural-Forms: nplurals=1; plural=0;\n" + +#: ../../c-api/datetime.rst:6 +msgid "DateTime Objects" +msgstr "DateTime 对象" + +#: ../../c-api/datetime.rst:8 +msgid "" +"Various date and time objects are supplied by the :mod:`datetime` module. " +"Before using any of these functions, the header file :file:`datetime.h` must" +" be included in your source (note that this is not included by " +":file:`Python.h`), and the macro :c:macro:`PyDateTime_IMPORT` must be " +"invoked, usually as part of the module initialisation function. The macro " +"puts a pointer to a C structure into a static variable, " +":c:data:`PyDateTimeAPI`, that is used by the following macros." +msgstr "" +":mod:`datetime` 模块提供了各种日期和时间对象。 在使用任何这些函数之前,必须在你的源码中包含头文件 :file:`datetime.h`" +" (请注意此文件并未包含在 :file:`Python.h` 中),并且宏 :c:macro:`PyDateTime_IMPORT` " +"必须被发起调用,通常是作为模块初始化函数的一部分。 这个宏会将指向特定 C 结构的指针放入一个静态变量 :c:data:`PyDateTimeAPI` " +"中,它会由下面的宏来使用。" + +#: ../../c-api/datetime.rst:16 +msgid "Macro for access to the UTC singleton:" +msgstr "宏访问UTC单例:" + +#: ../../c-api/datetime.rst:20 +msgid "" +"Returns the time zone singleton representing UTC, the same object as " +":attr:`datetime.timezone.utc`." +msgstr "返回表示 UTC 的时区单例,与 :attr:`datetime.timezone.utc` 为同一对象。" + +#: ../../c-api/datetime.rst:26 +msgid "Type-check macros:" +msgstr "类型检查宏:" + +#: ../../c-api/datetime.rst:30 +msgid "" +"Return true if *ob* is of type :c:data:`PyDateTime_DateType` or a subtype of" +" :c:data:`PyDateTime_DateType`. *ob* must not be ``NULL``. This function " +"always succeeds." +msgstr "" +"如果 *ob* 为 :c:data:`PyDateTime_DateType` 类型或 :c:data:`PyDateTime_DateType` " +"的某个子类型则返回真值。 *ob* 不能为 ``NULL``。 此函数总是会成功执行。" + +#: ../../c-api/datetime.rst:37 +msgid "" +"Return true if *ob* is of type :c:data:`PyDateTime_DateType`. *ob* must not " +"be ``NULL``. This function always succeeds." +msgstr "" +"如果 *ob* 为 :c:data:`PyDateTime_DateType` 类型则返回真值。 *ob* 不能为 ``NULL``。 " +"此函数总是会成功执行。" + +#: ../../c-api/datetime.rst:43 +msgid "" +"Return true if *ob* is of type :c:data:`PyDateTime_DateTimeType` or a " +"subtype of :c:data:`PyDateTime_DateTimeType`. *ob* must not be ``NULL``. " +"This function always succeeds." +msgstr "" +"如果 *ob* 为 :c:data:`PyDateTime_DateTimeType` 类型或 " +":c:data:`PyDateTime_DateTimeType` 的某个子类型则返回真值。 *ob* 不能为 ``NULL``。 " +"此函数总是会成功执行。" + +#: ../../c-api/datetime.rst:50 +msgid "" +"Return true if *ob* is of type :c:data:`PyDateTime_DateTimeType`. *ob* must " +"not be ``NULL``. This function always succeeds." +msgstr "" +"如果 *ob* 为 :c:data:`PyDateTime_DateTimeType` 类型则返回真值。 *ob* 不能为 ``NULL``。 " +"此函数总是会成功执行。" + +#: ../../c-api/datetime.rst:56 +msgid "" +"Return true if *ob* is of type :c:data:`PyDateTime_TimeType` or a subtype of" +" :c:data:`PyDateTime_TimeType`. *ob* must not be ``NULL``. This function " +"always succeeds." +msgstr "" +"如果 *ob* 的类型是 :c:data:`PyDateTime_TimeType` 或是 :c:data:`PyDateTime_TimeType` " +"的子类型则返回真值。 *ob* 必须不为 ``NULL``。 此函数总是会成功执行。" + +#: ../../c-api/datetime.rst:63 +msgid "" +"Return true if *ob* is of type :c:data:`PyDateTime_TimeType`. *ob* must not " +"be ``NULL``. This function always succeeds." +msgstr "" +"如果 *ob* 为 :c:data:`PyDateTime_TimeType` 类型则返回真值。 *ob* 不能为 ``NULL``。 " +"此函数总是会成功执行。" + +#: ../../c-api/datetime.rst:69 +msgid "" +"Return true if *ob* is of type :c:data:`PyDateTime_DeltaType` or a subtype " +"of :c:data:`PyDateTime_DeltaType`. *ob* must not be ``NULL``. This " +"function always succeeds." +msgstr "" +"如果 *ob* 为 :c:data:`PyDateTime_DeltaType` 类型或 :c:data:`PyDateTime_DeltaType` " +"的某个子类型则返回真值。 *ob* 不能为 ``NULL``。 此函数总是会成功执行。" + +#: ../../c-api/datetime.rst:76 +msgid "" +"Return true if *ob* is of type :c:data:`PyDateTime_DeltaType`. *ob* must not" +" be ``NULL``. This function always succeeds." +msgstr "" +"如果 *ob* 为 :c:data:`PyDateTime_DeltaType` 类型则返回真值。 *ob* 不能为 ``NULL``。 " +"此函数总是会成功执行。" + +#: ../../c-api/datetime.rst:82 +msgid "" +"Return true if *ob* is of type :c:data:`PyDateTime_TZInfoType` or a subtype " +"of :c:data:`PyDateTime_TZInfoType`. *ob* must not be ``NULL``. This " +"function always succeeds." +msgstr "" +"如果 *ob* 的类型是 :c:data:`PyDateTime_TZInfoType` 或是 " +":c:data:`PyDateTime_TZInfoType` 的子类型则返回真值。 *ob* 必须不为 ``NULL``。 此函数总是会成功执行。" + +#: ../../c-api/datetime.rst:89 +msgid "" +"Return true if *ob* is of type :c:data:`PyDateTime_TZInfoType`. *ob* must " +"not be ``NULL``. This function always succeeds." +msgstr "" +"如果 *ob* 为 :c:data:`PyDateTime_TZInfoType` 类型则返回真值。 *ob* 不能为 ``NULL``。 " +"此函数总是会成功执行。" + +#: ../../c-api/datetime.rst:93 +msgid "Macros to create objects:" +msgstr "用于创建对象的宏:" + +#: ../../c-api/datetime.rst:97 +msgid "" +"Return a :class:`datetime.date` object with the specified year, month and " +"day." +msgstr "返回指定年、月、日的 :class:`datetime.date` 对象。" + +#: ../../c-api/datetime.rst:102 +msgid "" +"Return a :class:`datetime.datetime` object with the specified year, month, " +"day, hour, minute, second and microsecond." +msgstr "" +"返回具有指定 year, month, day, hour, minute, second 和 microsecond 属性的 " +":class:`datetime.datetime` 对象。" + +#: ../../c-api/datetime.rst:108 +msgid "" +"Return a :class:`datetime.datetime` object with the specified year, month, " +"day, hour, minute, second, microsecond and fold." +msgstr "" +"返回具有指定 year, month, day, hour, minute, second, microsecond 和 fold 属性的 " +":class:`datetime.datetime` 对象。" + +#: ../../c-api/datetime.rst:116 +msgid "" +"Return a :class:`datetime.time` object with the specified hour, minute, " +"second and microsecond." +msgstr "" +"返回具有指定 hour, minute, second and microsecond 属性的 :class:`datetime.time` 对象。" + +#: ../../c-api/datetime.rst:122 +msgid "" +"Return a :class:`datetime.time` object with the specified hour, minute, " +"second, microsecond and fold." +msgstr "" +"返回具有指定 hour, minute, second, microsecond 和 fold 属性的 :class:`datetime.time` " +"对象。" + +#: ../../c-api/datetime.rst:130 +msgid "" +"Return a :class:`datetime.timedelta` object representing the given number of" +" days, seconds and microseconds. Normalization is performed so that the " +"resulting number of microseconds and seconds lie in the ranges documented " +"for :class:`datetime.timedelta` objects." +msgstr "" +"返回代表给定天、秒和微秒数的 :class:`datetime.timedelta` 对象。 将执行正规化操作以使最终的微秒和秒数处在 " +":class:`datetime.timedelta` 对象的文档指明的区间之内。" + +#: ../../c-api/datetime.rst:137 +msgid "" +"Return a :class:`datetime.timezone` object with an unnamed fixed offset " +"represented by the *offset* argument." +msgstr "返回一个 :class:`datetime.timezone` 对象,该对象具有以 *offset* 参数表示 的未命名固定时差。" + +#: ../../c-api/datetime.rst:144 +msgid "" +"Return a :class:`datetime.timezone` object with a fixed offset represented " +"by the *offset* argument and with tzname *name*." +msgstr "" +"返回一个 :class:`datetime.timezone` 对象,该对象具有以 *offset* 参数表示的固定时差和时区名称 *name*。" + +#: ../../c-api/datetime.rst:150 +msgid "" +"Macros to extract fields from date objects. The argument must be an " +"instance of :c:data:`PyDateTime_Date`, including subclasses (such as " +":c:data:`PyDateTime_DateTime`). The argument must not be ``NULL``, and the " +"type is not checked:" +msgstr "" +"一些用来从 date 对象中提取字段的宏。 参数必须是 :c:data:`PyDateTime_Date` 包括其子类 (例如 " +":c:data:`PyDateTime_DateTime`) 的实例。 参数必须不为 ``NULL``,并且类型不被会检查:" + +#: ../../c-api/datetime.rst:157 +msgid "Return the year, as a positive int." +msgstr "以正整数的形式返回年份值。" + +#: ../../c-api/datetime.rst:162 +msgid "Return the month, as an int from 1 through 12." +msgstr "返回月,从0到12的整数。" + +#: ../../c-api/datetime.rst:167 +msgid "Return the day, as an int from 1 through 31." +msgstr "返回日期,从0到31的整数。" + +#: ../../c-api/datetime.rst:170 +msgid "" +"Macros to extract fields from datetime objects. The argument must be an " +"instance of :c:data:`PyDateTime_DateTime`, including subclasses. The " +"argument must not be ``NULL``, and the type is not checked:" +msgstr "" +"一些用来从 datetime 对象中提取字段的宏。 参数必须是 :c:data:`PyDateTime_DateTime` 包括其子类的实例。 " +"参数必须不为 ``NULL``,并且类型不会被检查:" + +#: ../../c-api/datetime.rst:176 ../../c-api/datetime.rst:207 +msgid "Return the hour, as an int from 0 through 23." +msgstr "返回小时,从0到23的整数。" + +#: ../../c-api/datetime.rst:181 ../../c-api/datetime.rst:212 +msgid "Return the minute, as an int from 0 through 59." +msgstr "返回分钟,从0到59的整数。" + +#: ../../c-api/datetime.rst:186 ../../c-api/datetime.rst:217 +msgid "Return the second, as an int from 0 through 59." +msgstr "返回秒,从0到59的整数。" + +#: ../../c-api/datetime.rst:191 ../../c-api/datetime.rst:222 +msgid "Return the microsecond, as an int from 0 through 999999." +msgstr "返回微秒,从0到999999的整数。" + +#: ../../c-api/datetime.rst:196 ../../c-api/datetime.rst:227 +msgid "Return the fold, as an int from 0 through 1." +msgstr "" + +#: ../../c-api/datetime.rst:201 +msgid "" +"Macros to extract fields from time objects. The argument must be an " +"instance of :c:data:`PyDateTime_Time`, including subclasses. The argument " +"must not be ``NULL``, and the type is not checked:" +msgstr "" +"一些用来从 time 对象中提取字段的宏。 参数必须是 :c:data:`PyDateTime_Time` 包括其子类的实例。 参数必须不为 " +"``NULL``,并且类型不会被检查:" + +#: ../../c-api/datetime.rst:232 +msgid "" +"Macros to extract fields from time delta objects. The argument must be an " +"instance of :c:data:`PyDateTime_Delta`, including subclasses. The argument " +"must not be ``NULL``, and the type is not checked:" +msgstr "" +"一些用来从 timedelta 对象中提取字段的宏。 参数必须是 :c:data:`PyDateTime_Delta` 包括其子类的实例。 参数必须不为" +" ``NULL``,并且类型不会被检查:" + +#: ../../c-api/datetime.rst:238 +msgid "Return the number of days, as an int from -999999999 to 999999999." +msgstr "返回天数,从-999999999到999999999的整数。" + +#: ../../c-api/datetime.rst:245 +msgid "Return the number of seconds, as an int from 0 through 86399." +msgstr "返回秒数,从0到86399的整数。" + +#: ../../c-api/datetime.rst:252 +msgid "Return the number of microseconds, as an int from 0 through 999999." +msgstr "返回微秒数,从0到999999的整数。" + +#: ../../c-api/datetime.rst:257 +msgid "Macros for the convenience of modules implementing the DB API:" +msgstr "一些便于模块实现 DB API 的宏:" + +#: ../../c-api/datetime.rst:261 +msgid "" +"Create and return a new :class:`datetime.datetime` object given an argument " +"tuple suitable for passing to :meth:`datetime.datetime.fromtimestamp()`." +msgstr "" +"创建并返回一个给定元组参数的新 :class:`datetime.datetime` 对象,适合传给 " +":meth:`datetime.datetime.fromtimestamp()`。" + +#: ../../c-api/datetime.rst:267 +msgid "" +"Create and return a new :class:`datetime.date` object given an argument " +"tuple suitable for passing to :meth:`datetime.date.fromtimestamp()`." +msgstr "" +"创建并返回一个给定元组参数的新 :class:`datetime.date` 对象,适合传给 " +":meth:`datetime.date.fromtimestamp()`。" diff --git a/c-api/descriptor.po b/c-api/descriptor.po new file mode 100644 index 000000000..c3ce790f0 --- /dev/null +++ b/c-api/descriptor.po @@ -0,0 +1,44 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) 2001-2022, Python Software Foundation +# This file is distributed under the same license as the Python package. +# FIRST AUTHOR , YEAR. +# +# Translators: +# df2dc1c92e792f7ae8417c51df43db8f_594d92a <0f49be28017426edb1db1a2ab6e67088_717605>, 2018 +# +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: Python 3.9\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2022-11-04 14:34+0000\n" +"PO-Revision-Date: 2017-02-16 17:34+0000\n" +"Last-Translator: df2dc1c92e792f7ae8417c51df43db8f_594d92a <0f49be28017426edb1db1a2ab6e67088_717605>, 2018\n" +"Language-Team: Chinese (China) (https://www.transifex.com/python-doc/teams/5390/zh_CN/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: zh_CN\n" +"Plural-Forms: nplurals=1; plural=0;\n" + +#: ../../c-api/descriptor.rst:6 +msgid "Descriptor Objects" +msgstr "描述符对象" + +#: ../../c-api/descriptor.rst:8 +msgid "" +"\"Descriptors\" are objects that describe some attribute of an object. They " +"are found in the dictionary of type objects." +msgstr "“描述符”是描述对象的某些属性的对象。它们存在于类型对象的字典中。" + +#: ../../c-api/descriptor.rst:15 +msgid "The type object for the built-in descriptor types." +msgstr "内建描述符类型的类型对象。" + +#: ../../c-api/descriptor.rst:35 +msgid "" +"Return true if the descriptor objects *descr* describes a data attribute, or" +" false if it describes a method. *descr* must be a descriptor object; there" +" is no error checking." +msgstr "" +"如果描述符对象 *descr* 描述数据属性,则返回true;如果描述方法,则返回false。 *descr* 必须是描述符对象;没有错误检查。" diff --git a/c-api/dict.po b/c-api/dict.po new file mode 100644 index 000000000..d5e222bf6 --- /dev/null +++ b/c-api/dict.po @@ -0,0 +1,267 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) 2001-2022, Python Software Foundation +# This file is distributed under the same license as the Python package. +# FIRST AUTHOR , YEAR. +# +# Translators: +# ww song , 2018 +# 叶浚安 , 2019 +# Josh Ouyang , 2019 +# Freesand Leo , 2021 +# +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: Python 3.9\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2022-11-04 14:34+0000\n" +"PO-Revision-Date: 2017-02-16 17:35+0000\n" +"Last-Translator: Freesand Leo , 2021\n" +"Language-Team: Chinese (China) (https://www.transifex.com/python-doc/teams/5390/zh_CN/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: zh_CN\n" +"Plural-Forms: nplurals=1; plural=0;\n" + +#: ../../c-api/dict.rst:6 +msgid "Dictionary Objects" +msgstr "字典对象" + +#: ../../c-api/dict.rst:13 +msgid "" +"This subtype of :c:type:`PyObject` represents a Python dictionary object." +msgstr "这个 :c:type:`PyObject` 的子类型代表一个Python字典对象。" + +#: ../../c-api/dict.rst:18 +msgid "" +"This instance of :c:type:`PyTypeObject` represents the Python dictionary " +"type. This is the same object as :class:`dict` in the Python layer." +msgstr "" +"Python字典类型表示为 :c:type:`PyTypeObject` 的实例。这与Python层面的 :class:`dict` 是相同的对象。" + +#: ../../c-api/dict.rst:24 +msgid "" +"Return true if *p* is a dict object or an instance of a subtype of the dict " +"type. This function always succeeds." +msgstr "如果 *p* 是一个 dict 对象或者 dict 类型的子类型的实例则返回真值。 此函数总是会成功执行。" + +#: ../../c-api/dict.rst:30 +msgid "" +"Return true if *p* is a dict object, but not an instance of a subtype of the" +" dict type. This function always succeeds." +msgstr "如果 *p* 是一个 dict 对象但不是 dict 类型的子类型的实例则返回真值。 此函数总是会成功执行。" + +#: ../../c-api/dict.rst:36 +msgid "Return a new empty dictionary, or ``NULL`` on failure." +msgstr "返回一个新的空字典,失败时返回 ``NULL``。" + +#: ../../c-api/dict.rst:41 +msgid "" +"Return a :class:`types.MappingProxyType` object for a mapping which enforces" +" read-only behavior. This is normally used to create a view to prevent " +"modification of the dictionary for non-dynamic class types." +msgstr "" +"返回 :class:`types.MappingProxyType` 对象,用于强制执行只读行为的映射。这通常用于创建视图以防止修改非动态类类型的字典。" + +#: ../../c-api/dict.rst:48 +msgid "Empty an existing dictionary of all key-value pairs." +msgstr "清空现有字典的所有键值对。" + +#: ../../c-api/dict.rst:53 +msgid "" +"Determine if dictionary *p* contains *key*. If an item in *p* is matches " +"*key*, return ``1``, otherwise return ``0``. On error, return ``-1``. This " +"is equivalent to the Python expression ``key in p``." +msgstr "" +"确定 *key* 是否包含在字典 *p* 中。如果 *key* 匹配上 *p* 的某一项,则返回 ``1`` ,否则返回 ``0`` 。返回 " +"``-1`` 表示出错。这等同于Python表达式 ``key in p`` 。" + +#: ../../c-api/dict.rst:60 +msgid "Return a new dictionary that contains the same key-value pairs as *p*." +msgstr "返回与 *p* 包含相同键值对的新字典。" + +#: ../../c-api/dict.rst:65 +msgid "" +"Insert *val* into the dictionary *p* with a key of *key*. *key* must be " +":term:`hashable`; if it isn't, :exc:`TypeError` will be raised. Return ``0``" +" on success or ``-1`` on failure. This function *does not* steal a " +"reference to *val*." +msgstr "" +"使用 *key* 作为键将 *val* 插入字典 *p*。 *key* 必须为 :term:`hashable`;如果不是,则将引发 " +":exc:`TypeError`。 成功时返回 ``0``,失败时返回 ``-1``。 此函数 *不会* 附带对 *val* 的引用。" + +#: ../../c-api/dict.rst:75 +msgid "" +"Insert *val* into the dictionary *p* using *key* as a key. *key* should be a" +" :c:type:`const char*`. The key object is created using " +"``PyUnicode_FromString(key)``. Return ``0`` on success or ``-1`` on " +"failure. This function *does not* steal a reference to *val*." +msgstr "" +"使用 *key* 作为键将 *val* 插入到字典 *p*。 *key* 应当为 :c:type:`const char*`。 键对象是使用 " +"``PyUnicode_FromString(key)`` 创建的。 成功时返回 ``0``,失败时返回 ``-1``。 此函数 *不会* 附带对 " +"*val* 的引用。" + +#: ../../c-api/dict.rst:83 +msgid "" +"Remove the entry in dictionary *p* with key *key*. *key* must be hashable; " +"if it isn't, :exc:`TypeError` is raised. If *key* is not in the dictionary, " +":exc:`KeyError` is raised. Return ``0`` on success or ``-1`` on failure." +msgstr "" +"移除字典 *p* 中键为 *key* 的条目。 *key* 必须是可哈希的;如果不是,则会引发 :exc:`TypeError`。 如果字典中没有 " +"*key*,则会引发 :exc:`KeyError`。 成功时返回 ``0``,失败时返回 ``-1``。" + +#: ../../c-api/dict.rst:91 +msgid "" +"Remove the entry in dictionary *p* which has a key specified by the string " +"*key*. If *key* is not in the dictionary, :exc:`KeyError` is raised. Return " +"``0`` on success or ``-1`` on failure." +msgstr "" +"移除字典 *p* 中由字符串 *key* 指定的键的条目。 如果字典中没有 *key*,则会引发 :exc:`KeyError`。 成功时返回 " +"``0``,失败时返回 ``-1``。" + +#: ../../c-api/dict.rst:98 +msgid "" +"Return the object from dictionary *p* which has a key *key*. Return " +"``NULL`` if the key *key* is not present, but *without* setting an " +"exception." +msgstr "从字典 *p* 中返回以 *key* 为键的对象。 如果键名 *key* 不存在但 *没有* 设置一个异常则返回 ``NULL``。" + +#: ../../c-api/dict.rst:101 +msgid "" +"Note that exceptions which occur while calling :meth:`__hash__` and " +":meth:`__eq__` methods will get suppressed. To get error reporting use " +":c:func:`PyDict_GetItemWithError()` instead." +msgstr "" +"需要注意的是,调用 :meth:`__hash__` 和 :meth:`__eq__` 方法产生的异常不会被抛出。改用 " +":c:func:`PyDict_GetItemWithError()` 获得错误报告。" + +#: ../../c-api/dict.rst:108 +msgid "" +"Variant of :c:func:`PyDict_GetItem` that does not suppress exceptions. " +"Return ``NULL`` **with** an exception set if an exception occurred. Return " +"``NULL`` **without** an exception set if the key wasn't present." +msgstr "" +":c:func:`PyDict_GetItem` 的变种,它不会屏蔽异常。 当异常发生时将返回 ``NULL`` **并且** 设置一个异常。 " +"如果键不存在则返回 ``NULL`` **并且不会** 设置一个异常。" + +#: ../../c-api/dict.rst:116 +msgid "" +"This is the same as :c:func:`PyDict_GetItem`, but *key* is specified as a " +":c:type:`const char*`, rather than a :c:type:`PyObject*`." +msgstr "" +"这与 :c:func:`PyDict_GetItem` 一样,但是 *key* 被指定为 :c:type:`const char*`,而不是 " +":c:type:`PyObject*`。" + +#: ../../c-api/dict.rst:119 +msgid "" +"Note that exceptions which occur while calling :meth:`__hash__` and " +":meth:`__eq__` methods and creating a temporary string object will get " +"suppressed. To get error reporting use :c:func:`PyDict_GetItemWithError()` " +"instead." +msgstr "" +"需要注意的是,调用 :meth:`__hash__` 、 :meth:`__eq__` 方法和创建一个临时的字符串对象时产生的异常不会被抛出。改用 " +":c:func:`PyDict_GetItemWithError()` 获得错误报告。" + +#: ../../c-api/dict.rst:127 +msgid "" +"This is the same as the Python-level :meth:`dict.setdefault`. If present, " +"it returns the value corresponding to *key* from the dictionary *p*. If the" +" key is not in the dict, it is inserted with value *defaultobj* and " +"*defaultobj* is returned. This function evaluates the hash function of " +"*key* only once, instead of evaluating it independently for the lookup and " +"the insertion." +msgstr "" +"这跟Python层面的 :meth:`dict.setdefault` 一样。如果键 *key* 存在,它返回在字典 *p* " +"里面对应的值。如果键不存在,它会和值 *defaultobj* 一起插入并返回 *defaultobj* 。这个函数只计算 *key* " +"的哈希函数一次,而不是在查找和插入时分别计算它。" + +#: ../../c-api/dict.rst:137 +msgid "" +"Return a :c:type:`PyListObject` containing all the items from the " +"dictionary." +msgstr "返回一个包含字典中所有键值项的 :c:type:`PyListObject`。" + +#: ../../c-api/dict.rst:142 +msgid "" +"Return a :c:type:`PyListObject` containing all the keys from the dictionary." +msgstr "返回一个包含字典中所有键(keys)的 :c:type:`PyListObject`。" + +#: ../../c-api/dict.rst:147 +msgid "" +"Return a :c:type:`PyListObject` containing all the values from the " +"dictionary *p*." +msgstr "返回一个包含字典中所有值(values)的 :c:type:`PyListObject`。" + +#: ../../c-api/dict.rst:155 +msgid "" +"Return the number of items in the dictionary. This is equivalent to " +"``len(p)`` on a dictionary." +msgstr "返回字典中项目数,等价于对字典 *p* 使用 ``len(p)``。" + +#: ../../c-api/dict.rst:161 +msgid "" +"Iterate over all key-value pairs in the dictionary *p*. The " +":c:type:`Py_ssize_t` referred to by *ppos* must be initialized to ``0`` " +"prior to the first call to this function to start the iteration; the " +"function returns true for each pair in the dictionary, and false once all " +"pairs have been reported. The parameters *pkey* and *pvalue* should either " +"point to :c:type:`PyObject*` variables that will be filled in with each key " +"and value, respectively, or may be ``NULL``. Any references returned " +"through them are borrowed. *ppos* should not be altered during iteration. " +"Its value represents offsets within the internal dictionary structure, and " +"since the structure is sparse, the offsets are not consecutive." +msgstr "" +"迭代字典 *p* 中的所有键值对。 在第一次调用此函数开始迭代之前,由 *ppos* 所引用的 :c:type:`Py_ssize_t` 必须被初始化为" +" ``0``;该函数将为字典中的每个键值对返回真值,一旦所有键值对都报告完毕则返回假值。 形参 *pkey* 和 *pvalue* 应当指向 " +":c:type:`PyObject*` 变量,它们将分别使用每个键和值来填充,或者也可以为 ``NULL``。 通过它们返回的任何引用都是暂借的。 " +"*ppos* 在迭代期间不应被更改。 它的值表示内部字典结构中的偏移量,并且由于结构是稀疏的,因此偏移量并不连续。" + +#: ../../c-api/dict.rst:172 +msgid "For example::" +msgstr "例如::" + +#: ../../c-api/dict.rst:182 +msgid "" +"The dictionary *p* should not be mutated during iteration. It is safe to " +"modify the values of the keys as you iterate over the dictionary, but only " +"so long as the set of keys does not change. For example::" +msgstr "字典 *p* 不应该在遍历期间发生改变。在遍历字典时,改变键中的值是安全的,但仅限于键的集合不发生改变。例如::" + +#: ../../c-api/dict.rst:207 +msgid "" +"Iterate over mapping object *b* adding key-value pairs to dictionary *a*. " +"*b* may be a dictionary, or any object supporting :c:func:`PyMapping_Keys` " +"and :c:func:`PyObject_GetItem`. If *override* is true, existing pairs in *a*" +" will be replaced if a matching key is found in *b*, otherwise pairs will " +"only be added if there is not a matching key in *a*. Return ``0`` on success" +" or ``-1`` if an exception was raised." +msgstr "" +"对映射对象 *b* 进行迭代,将键值对添加到字典 *a*。 *b* 可以是一个字典,或任何支持 :c:func:`PyMapping_Keys` 和 " +":c:func:`PyObject_GetItem` 的对象。 如果 *override* 为真值,则如果在 *b* 中找到相同的键则 *a* " +"中已存在的相应键值对将被替换,否则如果在 *a* 中没有相同的键则只是添加键值对。 当成功时返回 ``0`` 或者当引发异常时返回 ``-1``。" + +#: ../../c-api/dict.rst:217 +msgid "" +"This is the same as ``PyDict_Merge(a, b, 1)`` in C, and is similar to " +"``a.update(b)`` in Python except that :c:func:`PyDict_Update` doesn't fall " +"back to the iterating over a sequence of key value pairs if the second " +"argument has no \"keys\" attribute. Return ``0`` on success or ``-1`` if an" +" exception was raised." +msgstr "" +"这与 C 中的 ``PyDict_Merge(a, b, 1)`` 一样,也类似于 Python 中的 ``a.update(b)``,差别在于 " +":c:func:`PyDict_Update` 在第二个参数没有 \"keys\" 属性时不会回退到迭代键值对的序列。 当成功时返回 ``0`` " +"或者当引发异常时返回 ``-1``。" + +#: ../../c-api/dict.rst:226 +msgid "" +"Update or merge into dictionary *a*, from the key-value pairs in *seq2*. " +"*seq2* must be an iterable object producing iterable objects of length 2, " +"viewed as key-value pairs. In case of duplicate keys, the last wins if " +"*override* is true, else the first wins. Return ``0`` on success or ``-1`` " +"if an exception was raised. Equivalent Python (except for the return " +"value)::" +msgstr "" +"将 *seq2* 中的键值对更新或合并到字典 *a*。 *seq2* 必须为产生长度为 2 的用作键值对的元素的可迭代对象。 当存在重复的键时,如果 " +"*override* 真值则最后出现的键胜出。 当成功时返回 ``0`` 或者当引发异常时返回 ``-1``。 等价的 Python " +"代码(返回值除外)::" diff --git a/c-api/exceptions.po b/c-api/exceptions.po new file mode 100644 index 000000000..cbd54d27a --- /dev/null +++ b/c-api/exceptions.po @@ -0,0 +1,1643 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) 2001-2025, Python Software Foundation +# This file is distributed under the same license as the Python package. +# FIRST AUTHOR , YEAR. +# +# Translators: +# allenjuly7 , 2019 +# Ziqi Wang , 2019 +# ppcfish , 2019 +# Yi Cao <1783250036@qq.com>, 2020 +# jsgang , 2020 +# Jiuh.star , 2021 +# helloworldSB , 2021 +# Dai Xu , 2022 +# cdarlint , 2022 +# Freesand Leo , 2022 +# Rafael Fontenelle , 2025 +# +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: Python 3.9\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2025-02-07 16:40+0000\n" +"PO-Revision-Date: 2017-02-16 17:35+0000\n" +"Last-Translator: Rafael Fontenelle , 2025\n" +"Language-Team: Chinese (China) (https://app.transifex.com/python-doc/teams/5390/zh_CN/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: zh_CN\n" +"Plural-Forms: nplurals=1; plural=0;\n" + +#: ../../c-api/exceptions.rst:8 +msgid "Exception Handling" +msgstr "异常处理" + +#: ../../c-api/exceptions.rst:10 +msgid "" +"The functions described in this chapter will let you handle and raise Python" +" exceptions. It is important to understand some of the basics of Python " +"exception handling. It works somewhat like the POSIX :c:data:`errno` " +"variable: there is a global indicator (per thread) of the last error that " +"occurred. Most C API functions don't clear this on success, but will set it" +" to indicate the cause of the error on failure. Most C API functions also " +"return an error indicator, usually ``NULL`` if they are supposed to return a" +" pointer, or ``-1`` if they return an integer (exception: the " +":c:func:`PyArg_\\*` functions return ``1`` for success and ``0`` for " +"failure)." +msgstr "" +"本章描述的函数将让你处理和触发 Python 异常。了解一些 Python 异常处理的基本知识是很重要的。 它的工作原理有点像 POSIX 的 " +":c:data:`errno` 变量:(每个线程)有一个全局指示器显示最近发生的错误。 大多数 C API " +"函数不会在成功时理会它,但会在失败时设置它来指示错误的原因。 多数 C API 函数也返回一个错误指示器,如果它们应该返回一个指针,通常返回 " +"``NULL``,如果返回一个整数,则返回 ``-1`` (例外: :c:func:`PyArg_\\*` 函数成功时返回 ``1`` 而失败时返回 " +"``0``)。" + +#: ../../c-api/exceptions.rst:20 +msgid "" +"Concretely, the error indicator consists of three object pointers: the " +"exception's type, the exception's value, and the traceback object. Any of " +"those pointers can be ``NULL`` if non-set (although some combinations are " +"forbidden, for example you can't have a non-``NULL`` traceback if the " +"exception type is ``NULL``)." +msgstr "" +"具体地说,错误指示器由三个对象指针组成:异常的类型,异常的值,和回溯对象。如果没有错误被设置,这些指针都可以是 ``NULL`` " +"(尽管一些组合使禁止的,例如,如果异常类型是 ``NULL``,你不能有一个非 ``NULL`` 的回溯)。" + +#: ../../c-api/exceptions.rst:26 +msgid "" +"When a function must fail because some function it called failed, it " +"generally doesn't set the error indicator; the function it called already " +"set it. It is responsible for either handling the error and clearing the " +"exception or returning after cleaning up any resources it holds (such as " +"object references or memory allocations); it should *not* continue normally " +"if it is not prepared to handle the error. If returning due to an error, it" +" is important to indicate to the caller that an error has been set. If the " +"error is not handled or carefully propagated, additional calls into the " +"Python/C API may not behave as intended and may fail in mysterious ways." +msgstr "" +"当一个函数由于它调用的某个函数失败而必须失败时,通常不会设置错误指示器;它调用的那个函数已经设置了它。而它负责处理错误和清理异常,或在清除其拥有的所有资源后返回(如对象应用或内存分配)。如果不准备处理异常,则" +" *不* 应该正常地继续。如果是由于一个错误返回,那么一定要向调用者表明已经设置了错误。如果错误没有得到处理或小心传播,对 Python/C " +"API的其它调用可能不会有预期的行为,并且可能会以某种神秘的方式失败。" + +#: ../../c-api/exceptions.rst:37 +msgid "" +"The error indicator is **not** the result of :func:`sys.exc_info()`. The " +"former corresponds to an exception that is not yet caught (and is therefore " +"still propagating), while the latter returns an exception after it is caught" +" (and has therefore stopped propagating)." +msgstr "" +"错误指示器 **不是** :func:`sys.exc_info()` " +"的执行结果。前者对应尚未捕获的异常(异常还在传播),而后者在捕获异常后返回这个异常(异常已经停止传播)。" + +#: ../../c-api/exceptions.rst:44 +msgid "Printing and clearing" +msgstr "打印和清理" + +#: ../../c-api/exceptions.rst:49 +msgid "" +"Clear the error indicator. If the error indicator is not set, there is no " +"effect." +msgstr "清除错误指示器。如果没有设置错误指示器,则不会有作用。" + +#: ../../c-api/exceptions.rst:55 +msgid "" +"Print a standard traceback to ``sys.stderr`` and clear the error indicator. " +"**Unless** the error is a ``SystemExit``, in that case no traceback is " +"printed and the Python process will exit with the error code specified by " +"the ``SystemExit`` instance." +msgstr "" +"将标准回溯打印到 ``sys.stderr`` 并清除错误指示器。**除非** 错误是 " +"``SystemExit``,这种情况下不会打印回溯进程,且会退出 Python 进程,并显示 ``SystemExit`` 实例指定的错误代码。" + +#: ../../c-api/exceptions.rst:60 +msgid "" +"Call this function **only** when the error indicator is set. Otherwise it " +"will cause a fatal error!" +msgstr "只有在错误指示器被设置时才需要调用这个函数,否则这会导致错误!" + +#: ../../c-api/exceptions.rst:63 +msgid "" +"If *set_sys_last_vars* is nonzero, the variables :data:`sys.last_type`, " +":data:`sys.last_value` and :data:`sys.last_traceback` will be set to the " +"type, value and traceback of the printed exception, respectively." +msgstr "" +"如果 *set_sys_last_vars* 非零,则变量 :data:`sys.last_type`,:data:`sys.last_value` 和" +" :data:`sys.last_traceback` 将分别设置为打印异常的类型,值和回溯。" + +#: ../../c-api/exceptions.rst:70 +msgid "Alias for ``PyErr_PrintEx(1)``." +msgstr "``PyErr_PrintEx(1)`` 的别名。" + +#: ../../c-api/exceptions.rst:75 +msgid "" +"Call :func:`sys.unraisablehook` using the current exception and *obj* " +"argument." +msgstr "使用当前异常和 *obj* 参数调用 :func:`sys.unraisablehook`。" + +#: ../../c-api/exceptions.rst:78 +msgid "" +"This utility function prints a warning message to ``sys.stderr`` when an " +"exception has been set but it is impossible for the interpreter to actually " +"raise the exception. It is used, for example, when an exception occurs in " +"an :meth:`__del__` method." +msgstr "" +"当设置了异常,但解释器不可能实际地触发异常时,这个实用函数向 ``sys.stderr`` 打印一个警告信息。例如,当 :meth:`__del__` " +"方法中发生异常时使用这个函数。" + +#: ../../c-api/exceptions.rst:83 +msgid "" +"The function is called with a single argument *obj* that identifies the " +"context in which the unraisable exception occurred. If possible, the repr of" +" *obj* will be printed in the warning message." +msgstr "该函数使用单个参数 *obj* 进行调用,该参数标识发生不可触发异常的上下文。如果可能,*obj* 的报告将打印在警告消息中。" + +#: ../../c-api/exceptions.rst:87 +msgid "An exception must be set when calling this function." +msgstr "调用此函数时必须设置一个异常。" + +#: ../../c-api/exceptions.rst:91 +msgid "Raising exceptions" +msgstr "抛出异常" + +#: ../../c-api/exceptions.rst:93 +msgid "" +"These functions help you set the current thread's error indicator. For " +"convenience, some of these functions will always return a ``NULL`` pointer " +"for use in a ``return`` statement." +msgstr "这些函数可帮助你设置当前线程的错误指示器。为了方便起见,一些函数将始终返回 ``NULL`` 指针,以便用于 ``return`` 语句。" + +#: ../../c-api/exceptions.rst:100 +msgid "" +"This is the most common way to set the error indicator. The first argument " +"specifies the exception type; it is normally one of the standard exceptions," +" e.g. :c:data:`PyExc_RuntimeError`. You need not increment its reference " +"count. The second argument is an error message; it is decoded from " +"``'utf-8'``." +msgstr "" +"这是设置错误标记最常用的方式。 第一个参数指定异常类型;它通常为某个标准异常,例如 :c:data:`PyExc_RuntimeError`。 " +"你不需要增加它的引用计数。 第二个参数是错误消息;它是用 ``'utf-8'`` 解码的。" + +#: ../../c-api/exceptions.rst:108 +msgid "" +"This function is similar to :c:func:`PyErr_SetString` but lets you specify " +"an arbitrary Python object for the \"value\" of the exception." +msgstr "此函数类似于 :c:func:`PyErr_SetString`,但是允许你为异常的“值”指定任意一个 Python 对象。" + +#: ../../c-api/exceptions.rst:114 +msgid "" +"This function sets the error indicator and returns ``NULL``. *exception* " +"should be a Python exception class. The *format* and subsequent parameters " +"help format the error message; they have the same meaning and values as in " +":c:func:`PyUnicode_FromFormat`. *format* is an ASCII-encoded string." +msgstr "" +"这个函数设置了一个错误指示器并且返回了 ``NULL``,*exception* 应当是一个 Python 中的异常类。*format* " +"和随后的形参会帮助格式化这个错误的信息;它们与 :c:func:`PyUnicode_FromFormat` 有着相同的含义和值。*format* " +"是一个ASCII编码的字符串。" + +#: ../../c-api/exceptions.rst:123 +msgid "" +"Same as :c:func:`PyErr_Format`, but taking a :c:type:`va_list` argument " +"rather than a variable number of arguments." +msgstr "" +"和 :c:func:`PyErr_Format` 相同,但它接受一个 :c:type:`va_list` 类型的参数而不是可变数量的参数集。" + +#: ../../c-api/exceptions.rst:131 +msgid "This is a shorthand for ``PyErr_SetObject(type, Py_None)``." +msgstr "这是 ``PyErr_SetObject(type, Py_None)`` 的简写。" + +#: ../../c-api/exceptions.rst:136 +msgid "" +"This is a shorthand for ``PyErr_SetString(PyExc_TypeError, message)``, where" +" *message* indicates that a built-in operation was invoked with an illegal " +"argument. It is mostly for internal use." +msgstr "" +"这是 ``PyErr_SetString(PyExc_TypeError, message)`` 的简写,其中 *message* " +"指出使用了非法参数调用内置操作。它主要用于内部使用。" + +#: ../../c-api/exceptions.rst:143 +msgid "" +"This is a shorthand for ``PyErr_SetNone(PyExc_MemoryError)``; it returns " +"``NULL`` so an object allocation function can write ``return " +"PyErr_NoMemory();`` when it runs out of memory." +msgstr "" +"这是 ``PyErr_SetNone(PyExc_MemoryError)`` 的简写;它返回 ``NULL`` ,以便当内存耗尽时,对象分配函数可以写" +" ``return PyErr_NoMemory();`` 。" + +#: ../../c-api/exceptions.rst:152 +msgid "" +"This is a convenience function to raise an exception when a C library " +"function has returned an error and set the C variable :c:data:`errno`. It " +"constructs a tuple object whose first item is the integer :c:data:`errno` " +"value and whose second item is the corresponding error message (gotten from " +":c:func:`strerror`), and then calls ``PyErr_SetObject(type, object)``. On " +"Unix, when the :c:data:`errno` value is :const:`EINTR`, indicating an " +"interrupted system call, this calls :c:func:`PyErr_CheckSignals`, and if " +"that set the error indicator, leaves it set to that. The function always " +"returns ``NULL``, so a wrapper function around a system call can write " +"``return PyErr_SetFromErrno(type);`` when the system call returns an error." +msgstr "" +"这是个便捷函数,当 C 库函数返回错误并设置 :c:data:`errno` 时,这个函数会触发异常。它构造一个元组对象,其第一项是整数值 " +":c:data:`errno`,第二项是相应的错误消息(从 :c:func:`strerror` 获取),然后调用 " +"``PyErr_SetObject(type, object)``。在 Unix 上,当 :c:data:`errno` 值是 " +":const:`EINTR` ,即中断的系统调用时,这个函数会调用 :c:func:`PyErr_CheckSignals` " +",如果设置了错误指示器,则将其设置为该值。该函数永远返回 ``NULL`` ,因此当系统调用返回错误时,围绕系统调用的包装函数可以写成 ``return" +" PyErr_SetFromErrno(type);``。" + +#: ../../c-api/exceptions.rst:166 +msgid "" +"Similar to :c:func:`PyErr_SetFromErrno`, with the additional behavior that " +"if *filenameObject* is not ``NULL``, it is passed to the constructor of " +"*type* as a third parameter. In the case of :exc:`OSError` exception, this " +"is used to define the :attr:`filename` attribute of the exception instance." +msgstr "" +"类似于 :c:func:`PyErr_SetFromErrno` ,附加的行为是如果 *filenameObject* 不为 ``NULL`` " +",它将作为第三个参数传递给 *type* 的构造函数。举个例子,在 :exc:`OSError` 异常中,*filenameObject* " +"将用来定义异常实例的 :attr:`filename` 属性。" + +#: ../../c-api/exceptions.rst:175 +msgid "" +"Similar to :c:func:`PyErr_SetFromErrnoWithFilenameObject`, but takes a " +"second filename object, for raising errors when a function that takes two " +"filenames fails." +msgstr "" +"类似于 :c:func:`PyErr_SetFromErrnoWithFilenameObject` ,但接受第二个 filename " +"对象,用于当一个接受两个 filename 的函数失败时触发错误。" + +#: ../../c-api/exceptions.rst:184 +msgid "" +"Similar to :c:func:`PyErr_SetFromErrnoWithFilenameObject`, but the filename " +"is given as a C string. *filename* is decoded from the filesystem encoding " +"(:func:`os.fsdecode`)." +msgstr "" +"类似于 :c:func:`PyErr_SetFromErrnoWithFilenameObject` ,但文件名以 C 字符串形式给出。 " +"*filename* 是从文件系统编码(:func:`os.fsdecode`)解码出来的。" + +#: ../../c-api/exceptions.rst:191 +msgid "" +"This is a convenience function to raise :exc:`WindowsError`. If called with " +"*ierr* of :c:data:`0`, the error code returned by a call to " +":c:func:`GetLastError` is used instead. It calls the Win32 function " +":c:func:`FormatMessage` to retrieve the Windows description of error code " +"given by *ierr* or :c:func:`GetLastError`, then it constructs a tuple object" +" whose first item is the *ierr* value and whose second item is the " +"corresponding error message (gotten from :c:func:`FormatMessage`), and then " +"calls ``PyErr_SetObject(PyExc_WindowsError, object)``. This function always " +"returns ``NULL``." +msgstr "" +"这是触发 :exc:`WindowsError` 的便捷函数。如果 *lerr* 为 :c:data:`0` ,则改用调用 " +":c:func:`GetLastError` 返回的错误代码。它调用 Win32 函数 :c:func:`FormatMessage` 来检索 " +"*ierr* 或 :c:func:`GetLastError` 给定的错误代码的 Windows 描述,然后构造一个元组对象,其第一项是 *ierr* " +"值,第二项是相应的错误信息(从 :c:func:`FormatMessage` 获取),然后调用 " +"``PyErr_SetObject(PyExc_WindowsError, object)`` 。该函数永远返回 ``NULL`` 。" + +#: ../../c-api/exceptions.rst:200 ../../c-api/exceptions.rst:208 +#: ../../c-api/exceptions.rst:217 ../../c-api/exceptions.rst:225 +#: ../../c-api/exceptions.rst:234 ../../c-api/exceptions.rst:243 +msgid ":ref:`Availability `: Windows." +msgstr ":ref:`可用性 `: Windows。" + +#: ../../c-api/exceptions.rst:205 +msgid "" +"Similar to :c:func:`PyErr_SetFromWindowsErr`, with an additional parameter " +"specifying the exception type to be raised." +msgstr "类似于 :c:func:`PyErr_SetFromWindowsErr` ,额外的参数指定要触发的异常类型。" + +#: ../../c-api/exceptions.rst:213 +msgid "" +"Similar to :c:func:`PyErr_SetFromWindowsErrWithFilenameObject`, but the " +"filename is given as a C string. *filename* is decoded from the filesystem " +"encoding (:func:`os.fsdecode`)." +msgstr "" +"类似于 :c:func:`PyErr_SetFromWindowsErrWithFilenameObject` ,但是 filename 是以 C " +"字符串形式给出的。 *filename* 是从文件系统编码(:func:`os.fsdecode`)解码出来的。" + +#: ../../c-api/exceptions.rst:222 +msgid "" +"Similar to :c:func:`PyErr_SetFromWindowsErrWithFilenameObject`, with an " +"additional parameter specifying the exception type to be raised." +msgstr "" +"类似于 :c:func:`PyErr_SetFromWindowsErrWithFilenameObject` ,额外参数指定要触发的异常类型。" + +#: ../../c-api/exceptions.rst:230 +msgid "" +"Similar to :c:func:`PyErr_SetExcFromWindowsErrWithFilenameObject`, but " +"accepts a second filename object." +msgstr "" +"类似于 :c:func:`PyErr_SetExcFromWindowsErrWithFilenameObject` ,但是接受第二个 filename" +" 对象。" + +#: ../../c-api/exceptions.rst:240 +msgid "" +"Similar to :c:func:`PyErr_SetFromWindowsErrWithFilename`, with an additional" +" parameter specifying the exception type to be raised." +msgstr "类似于 :c:func:`PyErr_SetFromWindowsErrWithFilename` ,额外参数指定要触发的异常类型。" + +#: ../../c-api/exceptions.rst:248 +msgid "" +"This is a convenience function to raise :exc:`ImportError`. *msg* will be " +"set as the exception's message string. *name* and *path*, both of which can " +"be ``NULL``, will be set as the :exc:`ImportError`'s respective ``name`` and" +" ``path`` attributes." +msgstr "" +"这是触发 :exc:`ImportError` 的便捷函数。 *msg* 将被设为异常的消息字符串。 *name* 和 *path* ,(都可以为 " +"``NULL`` ),将用来被设置 :exc:`ImportError` 对应的属性 ``name`` 和 ``path``。" + +#: ../../c-api/exceptions.rst:258 +msgid "" +"Much like :c:func:`PyErr_SetImportError` but this function allows for " +"specifying a subclass of :exc:`ImportError` to raise." +msgstr "" +"和 :c:func:`PyErr_SetImportError` 很类似,但这个函数允许指定一个 :exc:`ImportError` 的子类来触发。" + +#: ../../c-api/exceptions.rst:266 +msgid "" +"Set file, line, and offset information for the current exception. If the " +"current exception is not a :exc:`SyntaxError`, then it sets additional " +"attributes, which make the exception printing subsystem think the exception " +"is a :exc:`SyntaxError`." +msgstr "" +"设置当前异常的文件,行和偏移信息。如果当前异常不是 :exc:`SyntaxError` ,则它设置额外的属性,使异常打印子系统认为异常是 " +":exc:`SyntaxError`。" + +#: ../../c-api/exceptions.rst:276 +msgid "" +"Like :c:func:`PyErr_SyntaxLocationObject`, but *filename* is a byte string " +"decoded from the filesystem encoding (:func:`os.fsdecode`)." +msgstr "" +"与 :c:func:`PyErr_SyntaxLocationObject` 类似,只是 *filename* 是从文件系统编码( " +":func:`os.fsdecode` )解码出的一个字节字符串。" + +#: ../../c-api/exceptions.rst:284 +msgid "" +"Like :c:func:`PyErr_SyntaxLocationEx`, but the *col_offset* parameter is " +"omitted." +msgstr "类似于 :c:func:`PyErr_SyntaxLocationEx`,但省略了 *col_offset* parameter 形参。" + +#: ../../c-api/exceptions.rst:290 +msgid "" +"This is a shorthand for ``PyErr_SetString(PyExc_SystemError, message)``, " +"where *message* indicates that an internal operation (e.g. a Python/C API " +"function) was invoked with an illegal argument. It is mostly for internal " +"use." +msgstr "" +"这是 ``PyErr_SetString(PyExc_SystemError, message)`` 的缩写,其中 *message* " +"表示使用了非法参数调用内部操作(例如,Python/C API 函数)。它主要用于内部使用。" + +#: ../../c-api/exceptions.rst:297 +msgid "Issuing warnings" +msgstr "发出警告" + +#: ../../c-api/exceptions.rst:299 +msgid "" +"Use these functions to issue warnings from C code. They mirror similar " +"functions exported by the Python :mod:`warnings` module. They normally " +"print a warning message to *sys.stderr*; however, it is also possible that " +"the user has specified that warnings are to be turned into errors, and in " +"that case they will raise an exception. It is also possible that the " +"functions raise an exception because of a problem with the warning " +"machinery. The return value is ``0`` if no exception is raised, or ``-1`` if" +" an exception is raised. (It is not possible to determine whether a warning" +" message is actually printed, nor what the reason is for the exception; this" +" is intentional.) If an exception is raised, the caller should do its " +"normal exception handling (for example, :c:func:`Py_DECREF` owned references" +" and return an error value)." +msgstr "" +"这些函数可以从 C 代码中发出警告。它们仿照了由 Python 模块 :mod:`warnings` 导出的那些函数。它们通常向 " +"*sys.stderr* " +"打印一条警告信息;当然,用户也有可能已经指定将警告转换为错误,在这种情况下,它们将触发异常。也有可能由于警告机制出现问题,使得函数触发异常。如果没有触发异常,返回值为" +" ``0`` ;如果触发异常,返回值为 " +"``-1``。(无法确定是否实际打印了警告信息,也无法确定异常触发的原因。这是故意为之)。如果触发了异常,调用者应该进行正常的异常处理(例如,:c:func:`Py_DECREF`" +" 持有引用并返回一个错误值)。" + +#: ../../c-api/exceptions.rst:314 +msgid "" +"Issue a warning message. The *category* argument is a warning category (see" +" below) or ``NULL``; the *message* argument is a UTF-8 encoded string. " +"*stack_level* is a positive number giving a number of stack frames; the " +"warning will be issued from the currently executing line of code in that " +"stack frame. A *stack_level* of 1 is the function calling " +":c:func:`PyErr_WarnEx`, 2 is the function above that, and so forth." +msgstr "" +"发出一个警告信息。参数 *category* 是一个警告类别(见下面)或 ``NULL`` ; *message* 是一个 UTF-8 编码的字符串。 " +"*stack_level* 是一个给出栈帧数量的正数;警告将从该栈帧中当前正在执行的代码行发出。 *stack_level* 为 1 的是调用 " +":c:func:`PyErr_WarnEx` 的函数,2 是在此之上的函数,以此类推。" + +#: ../../c-api/exceptions.rst:321 +msgid "" +"Warning categories must be subclasses of :c:data:`PyExc_Warning`; " +":c:data:`PyExc_Warning` is a subclass of :c:data:`PyExc_Exception`; the " +"default warning category is :c:data:`PyExc_RuntimeWarning`. The standard " +"Python warning categories are available as global variables whose names are " +"enumerated at :ref:`standardwarningcategories`." +msgstr "" +"警告类别必须是 :c:data:`PyExc_Warning` 的子类, :c:data:`PyExc_Warning` 是 " +":c:data:`PyExc_Exception` 的子类;默认警告类别是 :c:data:`PyExc_RuntimeWarning` 。标准 " +"Python 警告类别作为全局变量可用,所有其名称见 :ref:`standardwarningcategories` 。" + +#: ../../c-api/exceptions.rst:327 +msgid "" +"For information about warning control, see the documentation for the " +":mod:`warnings` module and the :option:`-W` option in the command line " +"documentation. There is no C API for warning control." +msgstr "" +"有关警告控制的信息,参见模块文档 :mod:`warnings` 和命令行文档中的 :option:`-W` 选项。没有用于警告控制的 C API。" + +#: ../../c-api/exceptions.rst:334 +msgid "" +"Issue a warning message with explicit control over all warning attributes. " +"This is a straightforward wrapper around the Python function " +":func:`warnings.warn_explicit`; see there for more information. The " +"*module* and *registry* arguments may be set to ``NULL`` to get the default " +"effect described there." +msgstr "" +"发出一个对所有警告属性进行显式控制的警告消息。 这是位于 Python 函数 :func:`warnings.warn_explicit` " +"外层的直接包装;请查看其文档了解详情。 *module* 和 *registry* 参数可被设为 ``NULL`` 以得到相关文档所描述的默认效果。" + +#: ../../c-api/exceptions.rst:345 +msgid "" +"Similar to :c:func:`PyErr_WarnExplicitObject` except that *message* and " +"*module* are UTF-8 encoded strings, and *filename* is decoded from the " +"filesystem encoding (:func:`os.fsdecode`)." +msgstr "" + +#: ../../c-api/exceptions.rst:352 +msgid "" +"Function similar to :c:func:`PyErr_WarnEx`, but use " +":c:func:`PyUnicode_FromFormat` to format the warning message. *format* is " +"an ASCII-encoded string." +msgstr "" +"类似于 :c:func:`PyErr_WarnEx` 的函数,但使用 :c:func:`PyUnicode_FromFormat` 来格式化警告消息。 " +"*format* 是使用 ASCII 编码的字符串。" + +#: ../../c-api/exceptions.rst:361 +msgid "" +"Function similar to :c:func:`PyErr_WarnFormat`, but *category* is " +":exc:`ResourceWarning` and it passes *source* to " +":func:`warnings.WarningMessage`." +msgstr "" +"类似于 :c:func:`PyErr_WarnFormat` 的函数,但 *category* 是 :exc:`ResourceWarning` " +"并且它会将 *source* 传给 :func:`warnings.WarningMessage`。" + +#: ../../c-api/exceptions.rst:368 +msgid "Querying the error indicator" +msgstr "查询错误指示器" + +#: ../../c-api/exceptions.rst:372 +msgid "" +"Test whether the error indicator is set. If set, return the exception " +"*type* (the first argument to the last call to one of the " +":c:func:`PyErr_Set\\*` functions or to :c:func:`PyErr_Restore`). If not " +"set, return ``NULL``. You do not own a reference to the return value, so " +"you do not need to :c:func:`Py_DECREF` it." +msgstr "" +"检测是否设置了错误指示器。 如已设置,则返回异常 *type* (传给最近一次对某个 :c:func:`PyErr_Set\\*` 函数或 " +":c:func:`PyErr_Restore` 的调用的第一个参数)。 如未设置,则返回 ``NULL``。 " +"你并不拥有对返回值的引用,因此你不需要对它执行 :c:func:`Py_DECREF`。" + +#: ../../c-api/exceptions.rst:378 +msgid "The caller must hold the GIL." +msgstr "调用时必须携带GIL。" + +#: ../../c-api/exceptions.rst:382 +msgid "" +"Do not compare the return value to a specific exception; use " +":c:func:`PyErr_ExceptionMatches` instead, shown below. (The comparison " +"could easily fail since the exception may be an instance instead of a class," +" in the case of a class exception, or it may be a subclass of the expected " +"exception.)" +msgstr "" +"不要将返回值与特定的异常进行比较;请改为使用 :c:func:`PyErr_ExceptionMatches`,如下所示。 " +"(比较很容易失败因为对于类异常来说,异常可能是一个实例而不是类,或者它可能是预期的异常的一个子类。)" + +#: ../../c-api/exceptions.rst:390 +msgid "" +"Equivalent to ``PyErr_GivenExceptionMatches(PyErr_Occurred(), exc)``. This " +"should only be called when an exception is actually set; a memory access " +"violation will occur if no exception has been raised." +msgstr "" +"等价于 ``PyErr_GivenExceptionMatches(PyErr_Occurred(), exc)``。 " +"此函数应当只在实际设置了异常时才被调用;如果没有任何异常被引发则将发生非法内存访问。" + +#: ../../c-api/exceptions.rst:397 +msgid "" +"Return true if the *given* exception matches the exception type in *exc*. " +"If *exc* is a class object, this also returns true when *given* is an " +"instance of a subclass. If *exc* is a tuple, all exception types in the " +"tuple (and recursively in subtuples) are searched for a match." +msgstr "" +"如果 *given* 异常与 *exc* 中的异常类型相匹配则返回真值。 如果 *exc* 是一个类对象,则当 *given* " +"是一个子类的实例时也将返回真值。 如果 *exc* 是一个元组,则该元组(以及递归的子元组)中的所有异常类型都将被搜索进行匹配。" + +#: ../../c-api/exceptions.rst:405 +msgid "" +"Retrieve the error indicator into three variables whose addresses are " +"passed. If the error indicator is not set, set all three variables to " +"``NULL``. If it is set, it will be cleared and you own a reference to each " +"object retrieved. The value and traceback object may be ``NULL`` even when " +"the type object is not." +msgstr "" +"将错误指示符提取到三个变量中并传递其地址。 如果未设置错误指示符,则将三个变量都设为 ``NULL``。 " +"如果已设置,则将其清除并且你将得到对所提取的每个对象的引用。 值和回溯对象可以为 ``NULL`` 即使类型对象不为空。" + +#: ../../c-api/exceptions.rst:412 +msgid "" +"This function is normally only used by code that needs to catch exceptions " +"or by code that needs to save and restore the error indicator temporarily, " +"e.g.::" +msgstr "此函数通常只被需要捕获异常的代码或需要临时保存和恢复错误指示符的代码所使用,例如::" + +#: ../../c-api/exceptions.rst:427 +msgid "" +"Set the error indicator from the three objects. If the error indicator is " +"already set, it is cleared first. If the objects are ``NULL``, the error " +"indicator is cleared. Do not pass a ``NULL`` type and non-``NULL`` value or" +" traceback. The exception type should be a class. Do not pass an invalid " +"exception type or value. (Violating these rules will cause subtle problems " +"later.) This call takes away a reference to each object: you must own a " +"reference to each object before the call and after the call you no longer " +"own these references. (If you don't understand this, don't use this " +"function. I warned you.)" +msgstr "" +"基于三个对象设置错误指示符。 如果错误指示符已设置,它将首先被清除。 如果三个对象均为 ``NULL``,错误指示器将被清除。 请不要传入 " +"``NULL`` 类型和非 ``NULL`` 值或回溯。 异常类型应当是一个类。 请不要传入无效的异常类型或值。 (违反这些规则将导致微妙的后续问题。)" +" 此调用会带走对每个对象的引用:你必须在调用之前拥有对每个对象的引用且在调用之后你将不再拥有这些引用。 (如果你不理解这一点,就不要使用此函数。 " +"勿谓言之不预。)" + +#: ../../c-api/exceptions.rst:439 +msgid "" +"This function is normally only used by code that needs to save and restore " +"the error indicator temporarily. Use :c:func:`PyErr_Fetch` to save the " +"current error indicator." +msgstr "此函数通常只被需要临时保存和恢复错误指示符的代码所使用。 请使用 :c:func:`PyErr_Fetch` 来保存当前的错误指示符。" + +#: ../../c-api/exceptions.rst:446 +msgid "" +"Under certain circumstances, the values returned by :c:func:`PyErr_Fetch` " +"below can be \"unnormalized\", meaning that ``*exc`` is a class object but " +"``*val`` is not an instance of the same class. This function can be used " +"to instantiate the class in that case. If the values are already " +"normalized, nothing happens. The delayed normalization is implemented to " +"improve performance." +msgstr "" +"在特定情况下,下面 :c:func:`PyErr_Fetch` 所返回的值可以是“非正规化的”,即 ``*exc`` 是一个类对象而 ``*val`` " +"不是同一个类的实例。 在这种情况下此函数可以被用来实例化类。 如果值已经是正规化的,则不做任何操作。 实现这种延迟正规化是为了提升性能。" + +#: ../../c-api/exceptions.rst:454 +msgid "" +"This function *does not* implicitly set the ``__traceback__`` attribute on " +"the exception value. If setting the traceback appropriately is desired, the " +"following additional snippet is needed::" +msgstr "此函数 *不会* 显式地在异常值上设置 ``__traceback__`` 属性。 如果想要适当地设置回溯,还需要以下附加代码片段::" + +#: ../../c-api/exceptions.rst:465 +msgid "" +"Retrieve the exception info, as known from ``sys.exc_info()``. This refers " +"to an exception that was *already caught*, not to an exception that was " +"freshly raised. Returns new references for the three objects, any of which " +"may be ``NULL``. Does not modify the exception info state." +msgstr "" +"提取异常信息,即从 ``sys.exc_info()`` 所得到的。 这是指一个 *已被捕获* 的异常,而不是刚被引发的异常。 " +"返回分别指向三个对象的新引用,其中任何一个均可以为 ``NULL``。 不会修改异常信息的状态。" + +#: ../../c-api/exceptions.rst:472 +msgid "" +"This function is not normally used by code that wants to handle exceptions. " +"Rather, it can be used when code needs to save and restore the exception " +"state temporarily. Use :c:func:`PyErr_SetExcInfo` to restore or clear the " +"exception state." +msgstr "" +"此函数通常不会被需要处理异常的代码所使用。 它被使用的场合是在代码需要临时保存并恢复异常状态的时候。 请使用 " +":c:func:`PyErr_SetExcInfo` 来恢复或清除异常状态。" + +#: ../../c-api/exceptions.rst:482 +msgid "" +"Set the exception info, as known from ``sys.exc_info()``. This refers to an" +" exception that was *already caught*, not to an exception that was freshly " +"raised. This function steals the references of the arguments. To clear the " +"exception state, pass ``NULL`` for all three arguments. For general rules " +"about the three arguments, see :c:func:`PyErr_Restore`." +msgstr "" +"设置异常信息,即从 ``sys.exc_info()`` 所得到的。 这是指一个 *已被捕获* 的异常,而不是刚被引发的异常。 " +"此函数会偷取对参数的引用。 要清空异常状态,请为所有三个参数传入 ``NULL``。 对于有关三个参数的一般规则,请参阅 " +":c:func:`PyErr_Restore`。" + +#: ../../c-api/exceptions.rst:490 +msgid "" +"This function is not normally used by code that wants to handle exceptions. " +"Rather, it can be used when code needs to save and restore the exception " +"state temporarily. Use :c:func:`PyErr_GetExcInfo` to read the exception " +"state." +msgstr "" +"此函数通常不会被需要处理异常的代码所使用。 它被使用的场合是在代码需要临时保存并恢复异常状态的情况。 请使用 " +":c:func:`PyErr_GetExcInfo` 来读取异常状态。" + +#: ../../c-api/exceptions.rst:499 +msgid "Signal Handling" +msgstr "信号处理" + +#: ../../c-api/exceptions.rst:509 +msgid "" +"This function interacts with Python's signal handling. It checks whether a " +"signal has been sent to the processes and if so, invokes the corresponding " +"signal handler. If the :mod:`signal` module is supported, this can invoke a" +" signal handler written in Python. In all cases, the default effect for " +":const:`SIGINT` is to raise the :exc:`KeyboardInterrupt` exception. If an " +"exception is raised the error indicator is set and the function returns " +"``-1``; otherwise the function returns ``0``. The error indicator may or " +"may not be cleared if it was previously set." +msgstr "" + +#: ../../c-api/exceptions.rst:525 +msgid "" +"Simulate the effect of a :const:`SIGINT` signal arriving. The next time " +":c:func:`PyErr_CheckSignals` is called, the Python signal handler for " +":const:`SIGINT` will be called." +msgstr "" + +#: ../../c-api/exceptions.rst:529 +msgid "" +"If :const:`SIGINT` isn't handled by Python (it was set to " +":data:`signal.SIG_DFL` or :data:`signal.SIG_IGN`), this function does " +"nothing." +msgstr "" +"如果 Python 没有处理 :const:`signal.SIGINT` (将它设为 :data:`signal.SIG_DFL` 或 " +":data:`signal.SIG_IGN`),此函数将不做任何事。" + +#: ../../c-api/exceptions.rst:535 +msgid "" +"This utility function specifies a file descriptor to which the signal number" +" is written as a single byte whenever a signal is received. *fd* must be " +"non-blocking. It returns the previous such file descriptor." +msgstr "" +"这个工具函数指定了一个每当收到信号时将被作为以单个字节的形式写入信号编号的目标的文件描述符。 *fd* 必须是非阻塞的。 " +"它将返回前一个这样的文件描述符。" + +#: ../../c-api/exceptions.rst:539 +msgid "" +"The value ``-1`` disables the feature; this is the initial state. This is " +"equivalent to :func:`signal.set_wakeup_fd` in Python, but without any error " +"checking. *fd* should be a valid file descriptor. The function should only" +" be called from the main thread." +msgstr "" +"设置值 ``-1`` 将禁用该特性;这是初始状态。 这等价于 Python 中的 " +":func:`signal.set_wakeup_fd`,但是没有任何错误检查。 *fd* 应当是一个有效的文件描述符。 此函数应当只从主线程来调用。" + +#: ../../c-api/exceptions.rst:544 +msgid "On Windows, the function now also supports socket handles." +msgstr "在 Windows 上,此函数现在也支持套接字处理。" + +#: ../../c-api/exceptions.rst:549 +msgid "Exception Classes" +msgstr "Exception 类" + +#: ../../c-api/exceptions.rst:553 +msgid "" +"This utility function creates and returns a new exception class. The *name* " +"argument must be the name of the new exception, a C string of the form " +"``module.classname``. The *base* and *dict* arguments are normally " +"``NULL``. This creates a class object derived from :exc:`Exception` " +"(accessible in C as :c:data:`PyExc_Exception`)." +msgstr "" +"这个工具函数会创建并返回一个新的异常类。 *name* 参数必须为新异常的名称,是 ``module.classname`` 形式的 C 字符串。 " +"*base* 和 *dict* 参数通常为 ``NULL``。 这将创建一个派生自 :exc:`Exception` 的类对象(在 C 中可以通过 " +":c:data:`PyExc_Exception` 访问)。" + +#: ../../c-api/exceptions.rst:559 +msgid "" +"The :attr:`__module__` attribute of the new class is set to the first part " +"(up to the last dot) of the *name* argument, and the class name is set to " +"the last part (after the last dot). The *base* argument can be used to " +"specify alternate base classes; it can either be only one class or a tuple " +"of classes. The *dict* argument can be used to specify a dictionary of class" +" variables and methods." +msgstr "" +"新类的 :attr:`__module__` 属性将被设为 *name* " +"参数的前半部分(最后一个点号之前),而类名将被设为后半部分(最后一个点号之后)。 *base* " +"参数可被用来指定替代基类;它可以是一个类或是一个由类组成的元组。 *dict* 参数可被用来指定一个由类变量和方法组成的字典。" + +#: ../../c-api/exceptions.rst:568 +msgid "" +"Same as :c:func:`PyErr_NewException`, except that the new exception class " +"can easily be given a docstring: If *doc* is non-``NULL``, it will be used " +"as the docstring for the exception class." +msgstr "" +"和 :c:func:`PyErr_NewException` 一样,除了可以轻松地给新的异常类一个文档字符串:如果 *doc* " +"属性非空,它将用作异常类的文档字符串。" + +#: ../../c-api/exceptions.rst:576 +msgid "Exception Objects" +msgstr "异常对象" + +#: ../../c-api/exceptions.rst:580 +msgid "" +"Return the traceback associated with the exception as a new reference, as " +"accessible from Python through :attr:`__traceback__`. If there is no " +"traceback associated, this returns ``NULL``." +msgstr "" +"将与异常相关联的回溯作为一个新引用返回,可以通过 :attr:`__traceback__` 在 Python 中访问。 如果没有已关联的回溯,则返回 " +"``NULL``。" + +#: ../../c-api/exceptions.rst:587 +msgid "" +"Set the traceback associated with the exception to *tb*. Use ``Py_None`` to" +" clear it." +msgstr "将异常关联的回溯设置为 *tb* 。使用 ``Py_None`` 清除它。" + +#: ../../c-api/exceptions.rst:593 +msgid "" +"Return the context (another exception instance during whose handling *ex* " +"was raised) associated with the exception as a new reference, as accessible " +"from Python through :attr:`__context__`. If there is no context associated," +" this returns ``NULL``." +msgstr "" +"将与异常相关联的上下文(在处理 *ex* 的过程中引发的另一个异常实例)作为一个新引用返回,可以通过 :attr:`__context__` 在 " +"Python 中访问。 如果没有已关联的上下文,则返回 ``NULL``。" + +#: ../../c-api/exceptions.rst:601 +msgid "" +"Set the context associated with the exception to *ctx*. Use ``NULL`` to " +"clear it. There is no type check to make sure that *ctx* is an exception " +"instance. This steals a reference to *ctx*." +msgstr "" +"将与异常相关联的上下文设置为 *ctx*。 使用 ``NULL`` 来清空它。 没有用来确保 *ctx* 是一个异常实例的类型检查。 这将窃取一个指向 " +"*ctx* 的引用。" + +#: ../../c-api/exceptions.rst:608 +msgid "" +"Return the cause (either an exception instance, or :const:`None`, set by " +"``raise ... from ...``) associated with the exception as a new reference, as" +" accessible from Python through :attr:`__cause__`." +msgstr "" +"将与异常相关联的原因(一个异常实例,或是 :const:`None`,由 ``raise ... from ...`` 设置)作为一个新引用返回,可在 " +"Python 中通过 :attr:`__cause__` 来访问。" + +#: ../../c-api/exceptions.rst:615 +msgid "" +"Set the cause associated with the exception to *cause*. Use ``NULL`` to " +"clear it. There is no type check to make sure that *cause* is either an " +"exception instance or :const:`None`. This steals a reference to *cause*." +msgstr "" +"将与异常相关联的原因设置为 *cause*。 使用 ``NULL`` 来清空它。 它没有用来确保 *cause* 是一个异常实例或 " +":const:`None` 的类型检查。 这将偷取一个指向 *cause* 的引用。" + +#: ../../c-api/exceptions.rst:619 +msgid "" +":attr:`__suppress_context__` is implicitly set to ``True`` by this function." +msgstr ":attr:`__suppress_context__` 会被此函数隐式地设为 ``True``。" + +#: ../../c-api/exceptions.rst:625 +msgid "Unicode Exception Objects" +msgstr "Unicode 异常对象" + +#: ../../c-api/exceptions.rst:627 +msgid "" +"The following functions are used to create and modify Unicode exceptions " +"from C." +msgstr "下列函数被用于创建和修改来自 C 的 Unicode 异常。" + +#: ../../c-api/exceptions.rst:631 +msgid "" +"Create a :class:`UnicodeDecodeError` object with the attributes *encoding*, " +"*object*, *length*, *start*, *end* and *reason*. *encoding* and *reason* are" +" UTF-8 encoded strings." +msgstr "" +"创建一个 :class:`UnicodeDecodeError` 对象并附带 *encoding*, *object*, *length*, " +"*start*, *end* 和 *reason* 等属性。 *encoding* 和 *reason* 为 UTF-8 编码的字符串。" + +#: ../../c-api/exceptions.rst:637 +msgid "" +"Create a :class:`UnicodeEncodeError` object with the attributes *encoding*, " +"*object*, *length*, *start*, *end* and *reason*. *encoding* and *reason* are" +" UTF-8 encoded strings." +msgstr "" +"创建一个 :class:`UnicodeEncodeError` 对象并附带 *encoding*, *object*, *length*, " +"*start*, *end* 和 *reason*。 *encoding* 和 *reason* 都是以 UTF-8 编码的字符串。" + +#: ../../c-api/exceptions.rst:641 ../../c-api/exceptions.rst:651 +msgid "3.11" +msgstr "3.11" + +#: ../../c-api/exceptions.rst:643 +msgid "" +"``Py_UNICODE`` is deprecated since Python 3.3. Please migrate to " +"``PyObject_CallFunction(PyExc_UnicodeEncodeError, \"sOnns\", ...)``." +msgstr "" +"``Py_UNICODE`` 自 Python 3.3 起已被弃用。 请迁移至 " +"``PyObject_CallFunction(PyExc_UnicodeEncodeError, \"sOnns\", ...)``。" + +#: ../../c-api/exceptions.rst:648 +msgid "" +"Create a :class:`UnicodeTranslateError` object with the attributes *object*," +" *length*, *start*, *end* and *reason*. *reason* is a UTF-8 encoded string." +msgstr "" +"创建一个 :class:`UnicodeTranslateError` 对象并附带 *object*, *length*, *start*, *end*" +" 和 *reason*。 *reason* 是一个以 UTF-8 编码的字符串。" + +#: ../../c-api/exceptions.rst:653 +msgid "" +"``Py_UNICODE`` is deprecated since Python 3.3. Please migrate to " +"``PyObject_CallFunction(PyExc_UnicodeTranslateError, \"Onns\", ...)``." +msgstr "" +"``Py_UNICODE`` 自 Python 3.3 起已被弃用。 请迁移至 " +"``PyObject_CallFunction(PyExc_UnicodeTranslateError, \"Onns\", ...)``。" + +#: ../../c-api/exceptions.rst:659 +msgid "Return the *encoding* attribute of the given exception object." +msgstr "返回给定异常对象的 *encoding* 属性" + +#: ../../c-api/exceptions.rst:665 +msgid "Return the *object* attribute of the given exception object." +msgstr "返回给定异常对象的 *object* 属性" + +#: ../../c-api/exceptions.rst:671 +msgid "" +"Get the *start* attribute of the given exception object and place it into " +"*\\*start*. *start* must not be ``NULL``. Return ``0`` on success, ``-1`` " +"on failure." +msgstr "" +"获取给定异常对象的 *start* 属性并将其放入 *\\*start*。 *start* 必须不为 ``NULL``。 成功时返回 " +"``0``,失败时返回 ``-1``。" + +#: ../../c-api/exceptions.rst:679 +msgid "" +"Set the *start* attribute of the given exception object to *start*. Return " +"``0`` on success, ``-1`` on failure." +msgstr "将给定异常对象的 *start* 属性设为 *start*。 成功时返回 ``0``,失败时返回 ``-1``。" + +#: ../../c-api/exceptions.rst:686 +msgid "" +"Get the *end* attribute of the given exception object and place it into " +"*\\*end*. *end* must not be ``NULL``. Return ``0`` on success, ``-1`` on " +"failure." +msgstr "" +"获取给定异常对象的 *end* 属性并将其放入 *\\*end*。 *end* 必须不为 ``NULL``。 成功时返回 ``0``,失败时返回 " +"``-1``。" + +#: ../../c-api/exceptions.rst:694 +msgid "" +"Set the *end* attribute of the given exception object to *end*. Return " +"``0`` on success, ``-1`` on failure." +msgstr "将给定异常对象的 *end* 属性设为 *end*。 成功时返回 ``0``,失败时返回 ``-1``。" + +#: ../../c-api/exceptions.rst:701 +msgid "Return the *reason* attribute of the given exception object." +msgstr "返回给定异常对象的 *reason* 属性" + +#: ../../c-api/exceptions.rst:707 +msgid "" +"Set the *reason* attribute of the given exception object to *reason*. " +"Return ``0`` on success, ``-1`` on failure." +msgstr "将给定异常对象的 *reason* 属性设为 *reason*。 成功时返回 ``0``,失败时返回 ``-1``。" + +#: ../../c-api/exceptions.rst:714 +msgid "Recursion Control" +msgstr "递归控制" + +#: ../../c-api/exceptions.rst:716 +msgid "" +"These two functions provide a way to perform safe recursive calls at the C " +"level, both in the core and in extension modules. They are needed if the " +"recursive code does not necessarily invoke Python code (which tracks its " +"recursion depth automatically). They are also not needed for *tp_call* " +"implementations because the :ref:`call protocol ` takes care of " +"recursion handling." +msgstr "" +"这两个函数提供了一种在 C 层级上进行安全的递归调用的方式,在核心模块与扩展模块中均适用。 当递归代码不一定会唤起 Python " +"代码(后者会自动跟踪其递归深度)时就需要用到它们。 它们对于 *tp_call* 实现来说也无必要因为 :ref:`调用协议 ` " +"会负责递归处理。" + +#: ../../c-api/exceptions.rst:725 +msgid "Marks a point where a recursive C-level call is about to be performed." +msgstr "标记一个递归的 C 层级调用即将被执行的点位。" + +#: ../../c-api/exceptions.rst:727 +msgid "" +"If :const:`USE_STACKCHECK` is defined, this function checks if the OS stack " +"overflowed using :c:func:`PyOS_CheckStack`. In this is the case, it sets a " +":exc:`MemoryError` and returns a nonzero value." +msgstr "" +"如果定义了 :const:`USE_STACKCHECK`,此函数会使用 :c:func:`PyOS_CheckStack` " +"来检查操作系统堆栈是否溢出。 在这种情况下,它将设置一个 :exc:`MemoryError` 并返回非零值。" + +#: ../../c-api/exceptions.rst:731 +msgid "" +"The function then checks if the recursion limit is reached. If this is the " +"case, a :exc:`RecursionError` is set and a nonzero value is returned. " +"Otherwise, zero is returned." +msgstr "" +"随后此函数将检查是否达到递归限制。 如果是的话,将设置一个 :exc:`RecursionError` 并返回一个非零值。 在其他情况下,则返回零。" + +#: ../../c-api/exceptions.rst:735 +msgid "" +"*where* should be a UTF-8 encoded string such as ``\" in instance check\"`` " +"to be concatenated to the :exc:`RecursionError` message caused by the " +"recursion depth limit." +msgstr "" +"*where* 应为一个 UTF-8 编码的字符串如 ``\" in instance check\"``,它将与由递归深度限制所导致的 " +":exc:`RecursionError` 消息相拼接。" + +#: ../../c-api/exceptions.rst:739 ../../c-api/exceptions.rst:747 +msgid "This function is now also available in the limited API." +msgstr "此函数现在也在受限 API 中可用。" + +#: ../../c-api/exceptions.rst:744 +msgid "" +"Ends a :c:func:`Py_EnterRecursiveCall`. Must be called once for each " +"*successful* invocation of :c:func:`Py_EnterRecursiveCall`." +msgstr "" +"结束一个 :c:func:`Py_EnterRecursiveCall`。 必须针对 :c:func:`Py_EnterRecursiveCall` " +"的每个 *成功的* 唤起操作执行一次调用。" + +#: ../../c-api/exceptions.rst:750 +msgid "" +"Properly implementing :c:member:`~PyTypeObject.tp_repr` for container types " +"requires special recursion handling. In addition to protecting the stack, " +":c:member:`~PyTypeObject.tp_repr` also needs to track objects to prevent " +"cycles. The following two functions facilitate this functionality. " +"Effectively, these are the C equivalent to :func:`reprlib.recursive_repr`." +msgstr "" +"正确地针对容器类型实现 :c:member:`~PyTypeObject.tp_repr` 需要特别的递归处理。 " +"在保护栈之外,:c:member:`~PyTypeObject.tp_repr` 还需要追踪对象以防止出现循环。 以下两个函数将帮助完成此功能。 " +"从实际效果来说,这两个函数是 C 中对应 :func:`reprlib.recursive_repr` 的等价物。" + +#: ../../c-api/exceptions.rst:758 +msgid "" +"Called at the beginning of the :c:member:`~PyTypeObject.tp_repr` " +"implementation to detect cycles." +msgstr "在 :c:member:`~PyTypeObject.tp_repr` 实现的开头被调用以检测循环。" + +#: ../../c-api/exceptions.rst:761 +msgid "" +"If the object has already been processed, the function returns a positive " +"integer. In that case the :c:member:`~PyTypeObject.tp_repr` implementation " +"should return a string object indicating a cycle. As examples, " +":class:`dict` objects return ``{...}`` and :class:`list` objects return " +"``[...]``." +msgstr "" +"如果对象已经被处理,此函数将返回一个正整数。 在此情况下 :c:member:`~PyTypeObject.tp_repr` " +"实现应当返回一个指明发生循环的字符串对象。 例如,:class:`dict` 对象将返回 ``{...}`` 而 :class:`list` 对象将返回" +" ``[...]``。" + +#: ../../c-api/exceptions.rst:767 +msgid "" +"The function will return a negative integer if the recursion limit is " +"reached. In that case the :c:member:`~PyTypeObject.tp_repr` implementation " +"should typically return ``NULL``." +msgstr "" +"如果已达到递归限制则此函数将返回一个负正数。 在此情况下 :c:member:`~PyTypeObject.tp_repr` 实现通常应当返回 " +"``NULL``。" + +#: ../../c-api/exceptions.rst:771 +msgid "" +"Otherwise, the function returns zero and the " +":c:member:`~PyTypeObject.tp_repr` implementation can continue normally." +msgstr "在其他情况下,此函数将返回零而 :c:member:`~PyTypeObject.tp_repr` 实现将可正常继续。" + +#: ../../c-api/exceptions.rst:776 +msgid "" +"Ends a :c:func:`Py_ReprEnter`. Must be called once for each invocation of " +":c:func:`Py_ReprEnter` that returns zero." +msgstr "" +"结束一个 :c:func:`Py_ReprEnter`。 必须针对每个返回零的 :c:func:`Py_ReprEnter` 的唤起操作调用一次。" + +#: ../../c-api/exceptions.rst:783 +msgid "Standard Exceptions" +msgstr "标准异常" + +#: ../../c-api/exceptions.rst:785 +msgid "" +"All standard Python exceptions are available as global variables whose names" +" are ``PyExc_`` followed by the Python exception name. These have the type " +":c:type:`PyObject*`; they are all class objects. For completeness, here are" +" all the variables:" +msgstr "" +"所有的 Python 标准异常都可用作全局变量,其名称为 ``PyExc_`` 跟上 Python 异常名称。这些变量是 " +":c:type:`PyObject*` 类型;都是类对象。下面列出了全部这些用作标准异常的变量:" + +#: ../../c-api/exceptions.rst:846 ../../c-api/exceptions.rst:979 +#: ../../c-api/exceptions.rst:1024 +msgid "C Name" +msgstr "C 名称" + +#: ../../c-api/exceptions.rst:846 ../../c-api/exceptions.rst:1024 +msgid "Python Name" +msgstr "Python 名称" + +#: ../../c-api/exceptions.rst:846 ../../c-api/exceptions.rst:979 +#: ../../c-api/exceptions.rst:1024 +msgid "Notes" +msgstr "备注" + +#: ../../c-api/exceptions.rst:848 +msgid ":c:data:`PyExc_BaseException`" +msgstr ":c:data:`PyExc_BaseException`" + +#: ../../c-api/exceptions.rst:848 +msgid ":exc:`BaseException`" +msgstr ":exc:`BaseException`" + +#: ../../c-api/exceptions.rst:848 ../../c-api/exceptions.rst:850 +#: ../../c-api/exceptions.rst:852 ../../c-api/exceptions.rst:898 +#: ../../c-api/exceptions.rst:910 +msgid "[1]_" +msgstr "[1]_" + +#: ../../c-api/exceptions.rst:850 +msgid ":c:data:`PyExc_Exception`" +msgstr ":c:data:`PyExc_Exception`" + +#: ../../c-api/exceptions.rst:850 +msgid ":exc:`Exception`" +msgstr ":exc:`Exception`" + +#: ../../c-api/exceptions.rst:852 +msgid ":c:data:`PyExc_ArithmeticError`" +msgstr ":c:data:`PyExc_ArithmeticError`" + +#: ../../c-api/exceptions.rst:852 +msgid ":exc:`ArithmeticError`" +msgstr ":exc:`ArithmeticError`" + +#: ../../c-api/exceptions.rst:854 +msgid ":c:data:`PyExc_AssertionError`" +msgstr ":c:data:`PyExc_AssertionError`" + +#: ../../c-api/exceptions.rst:854 +msgid ":exc:`AssertionError`" +msgstr ":exc:`AssertionError`" + +#: ../../c-api/exceptions.rst:856 +msgid ":c:data:`PyExc_AttributeError`" +msgstr ":c:data:`PyExc_AttributeError`" + +#: ../../c-api/exceptions.rst:856 +msgid ":exc:`AttributeError`" +msgstr ":exc:`AttributeError`" + +#: ../../c-api/exceptions.rst:858 +msgid ":c:data:`PyExc_BlockingIOError`" +msgstr ":c:data:`PyExc_BlockingIOError`" + +#: ../../c-api/exceptions.rst:858 +msgid ":exc:`BlockingIOError`" +msgstr ":exc:`BlockingIOError`" + +#: ../../c-api/exceptions.rst:860 +msgid ":c:data:`PyExc_BrokenPipeError`" +msgstr ":c:data:`PyExc_BrokenPipeError`" + +#: ../../c-api/exceptions.rst:860 +msgid ":exc:`BrokenPipeError`" +msgstr ":exc:`BrokenPipeError`" + +#: ../../c-api/exceptions.rst:862 +msgid ":c:data:`PyExc_BufferError`" +msgstr ":c:data:`PyExc_BufferError`" + +#: ../../c-api/exceptions.rst:862 +msgid ":exc:`BufferError`" +msgstr ":exc:`BufferError`" + +#: ../../c-api/exceptions.rst:864 +msgid ":c:data:`PyExc_ChildProcessError`" +msgstr ":c:data:`PyExc_ChildProcessError`" + +#: ../../c-api/exceptions.rst:864 +msgid ":exc:`ChildProcessError`" +msgstr ":exc:`ChildProcessError`" + +#: ../../c-api/exceptions.rst:866 +msgid ":c:data:`PyExc_ConnectionAbortedError`" +msgstr ":c:data:`PyExc_ConnectionAbortedError`" + +#: ../../c-api/exceptions.rst:866 +msgid ":exc:`ConnectionAbortedError`" +msgstr ":exc:`ConnectionAbortedError`" + +#: ../../c-api/exceptions.rst:868 +msgid ":c:data:`PyExc_ConnectionError`" +msgstr ":c:data:`PyExc_ConnectionError`" + +#: ../../c-api/exceptions.rst:868 +msgid ":exc:`ConnectionError`" +msgstr ":exc:`ConnectionError`" + +#: ../../c-api/exceptions.rst:870 +msgid ":c:data:`PyExc_ConnectionRefusedError`" +msgstr ":c:data:`PyExc_ConnectionRefusedError`" + +#: ../../c-api/exceptions.rst:870 +msgid ":exc:`ConnectionRefusedError`" +msgstr ":exc:`ConnectionRefusedError`" + +#: ../../c-api/exceptions.rst:872 +msgid ":c:data:`PyExc_ConnectionResetError`" +msgstr ":c:data:`PyExc_ConnectionResetError`" + +#: ../../c-api/exceptions.rst:872 +msgid ":exc:`ConnectionResetError`" +msgstr ":exc:`ConnectionResetError`" + +#: ../../c-api/exceptions.rst:874 +msgid ":c:data:`PyExc_EOFError`" +msgstr ":c:data:`PyExc_EOFError`" + +#: ../../c-api/exceptions.rst:874 +msgid ":exc:`EOFError`" +msgstr ":exc:`EOFError`" + +#: ../../c-api/exceptions.rst:876 +msgid ":c:data:`PyExc_FileExistsError`" +msgstr ":c:data:`PyExc_FileExistsError`" + +#: ../../c-api/exceptions.rst:876 +msgid ":exc:`FileExistsError`" +msgstr ":exc:`FileExistsError`" + +#: ../../c-api/exceptions.rst:878 +msgid ":c:data:`PyExc_FileNotFoundError`" +msgstr ":c:data:`PyExc_FileNotFoundError`" + +#: ../../c-api/exceptions.rst:878 +msgid ":exc:`FileNotFoundError`" +msgstr ":exc:`FileNotFoundError`" + +#: ../../c-api/exceptions.rst:880 +msgid ":c:data:`PyExc_FloatingPointError`" +msgstr ":c:data:`PyExc_FloatingPointError`" + +#: ../../c-api/exceptions.rst:880 +msgid ":exc:`FloatingPointError`" +msgstr ":exc:`FloatingPointError`" + +#: ../../c-api/exceptions.rst:882 +msgid ":c:data:`PyExc_GeneratorExit`" +msgstr ":c:data:`PyExc_GeneratorExit`" + +#: ../../c-api/exceptions.rst:882 +msgid ":exc:`GeneratorExit`" +msgstr ":exc:`GeneratorExit`" + +#: ../../c-api/exceptions.rst:884 +msgid ":c:data:`PyExc_ImportError`" +msgstr ":c:data:`PyExc_ImportError`" + +#: ../../c-api/exceptions.rst:884 +msgid ":exc:`ImportError`" +msgstr ":exc:`ImportError`" + +#: ../../c-api/exceptions.rst:886 +msgid ":c:data:`PyExc_IndentationError`" +msgstr ":c:data:`PyExc_IndentationError`" + +#: ../../c-api/exceptions.rst:886 +msgid ":exc:`IndentationError`" +msgstr ":exc:`IndentationError`" + +#: ../../c-api/exceptions.rst:888 +msgid ":c:data:`PyExc_IndexError`" +msgstr ":c:data:`PyExc_IndexError`" + +#: ../../c-api/exceptions.rst:888 +msgid ":exc:`IndexError`" +msgstr ":exc:`IndexError`" + +#: ../../c-api/exceptions.rst:890 +msgid ":c:data:`PyExc_InterruptedError`" +msgstr ":c:data:`PyExc_InterruptedError`" + +#: ../../c-api/exceptions.rst:890 +msgid ":exc:`InterruptedError`" +msgstr ":exc:`InterruptedError`" + +#: ../../c-api/exceptions.rst:892 +msgid ":c:data:`PyExc_IsADirectoryError`" +msgstr ":c:data:`PyExc_IsADirectoryError`" + +#: ../../c-api/exceptions.rst:892 +msgid ":exc:`IsADirectoryError`" +msgstr ":exc:`IsADirectoryError`" + +#: ../../c-api/exceptions.rst:894 +msgid ":c:data:`PyExc_KeyError`" +msgstr ":c:data:`PyExc_KeyError`" + +#: ../../c-api/exceptions.rst:894 +msgid ":exc:`KeyError`" +msgstr ":exc:`KeyError`" + +#: ../../c-api/exceptions.rst:896 +msgid ":c:data:`PyExc_KeyboardInterrupt`" +msgstr ":c:data:`PyExc_KeyboardInterrupt`" + +#: ../../c-api/exceptions.rst:896 +msgid ":exc:`KeyboardInterrupt`" +msgstr ":exc:`KeyboardInterrupt`" + +#: ../../c-api/exceptions.rst:898 +msgid ":c:data:`PyExc_LookupError`" +msgstr ":c:data:`PyExc_LookupError`" + +#: ../../c-api/exceptions.rst:898 +msgid ":exc:`LookupError`" +msgstr ":exc:`LookupError`" + +#: ../../c-api/exceptions.rst:900 +msgid ":c:data:`PyExc_MemoryError`" +msgstr ":c:data:`PyExc_MemoryError`" + +#: ../../c-api/exceptions.rst:900 +msgid ":exc:`MemoryError`" +msgstr ":exc:`MemoryError`" + +#: ../../c-api/exceptions.rst:902 +msgid ":c:data:`PyExc_ModuleNotFoundError`" +msgstr ":c:data:`PyExc_ModuleNotFoundError`" + +#: ../../c-api/exceptions.rst:902 +msgid ":exc:`ModuleNotFoundError`" +msgstr ":exc:`ModuleNotFoundError`" + +#: ../../c-api/exceptions.rst:904 +msgid ":c:data:`PyExc_NameError`" +msgstr ":c:data:`PyExc_NameError`" + +#: ../../c-api/exceptions.rst:904 +msgid ":exc:`NameError`" +msgstr ":exc:`NameError`" + +#: ../../c-api/exceptions.rst:906 +msgid ":c:data:`PyExc_NotADirectoryError`" +msgstr ":c:data:`PyExc_NotADirectoryError`" + +#: ../../c-api/exceptions.rst:906 +msgid ":exc:`NotADirectoryError`" +msgstr ":exc:`NotADirectoryError`" + +#: ../../c-api/exceptions.rst:908 +msgid ":c:data:`PyExc_NotImplementedError`" +msgstr ":c:data:`PyExc_NotImplementedError`" + +#: ../../c-api/exceptions.rst:908 +msgid ":exc:`NotImplementedError`" +msgstr ":exc:`NotImplementedError`" + +#: ../../c-api/exceptions.rst:910 +msgid ":c:data:`PyExc_OSError`" +msgstr ":c:data:`PyExc_OSError`" + +#: ../../c-api/exceptions.rst:910 +msgid ":exc:`OSError`" +msgstr ":exc:`OSError`" + +#: ../../c-api/exceptions.rst:912 +msgid ":c:data:`PyExc_OverflowError`" +msgstr ":c:data:`PyExc_OverflowError`" + +#: ../../c-api/exceptions.rst:912 +msgid ":exc:`OverflowError`" +msgstr ":exc:`OverflowError`" + +#: ../../c-api/exceptions.rst:914 +msgid ":c:data:`PyExc_PermissionError`" +msgstr ":c:data:`PyExc_PermissionError`" + +#: ../../c-api/exceptions.rst:914 +msgid ":exc:`PermissionError`" +msgstr ":exc:`PermissionError`" + +#: ../../c-api/exceptions.rst:916 +msgid ":c:data:`PyExc_ProcessLookupError`" +msgstr ":c:data:`PyExc_ProcessLookupError`" + +#: ../../c-api/exceptions.rst:916 +msgid ":exc:`ProcessLookupError`" +msgstr ":exc:`ProcessLookupError`" + +#: ../../c-api/exceptions.rst:918 +msgid ":c:data:`PyExc_RecursionError`" +msgstr ":c:data:`PyExc_RecursionError`" + +#: ../../c-api/exceptions.rst:918 +msgid ":exc:`RecursionError`" +msgstr ":exc:`RecursionError`" + +#: ../../c-api/exceptions.rst:920 +msgid ":c:data:`PyExc_ReferenceError`" +msgstr ":c:data:`PyExc_ReferenceError`" + +#: ../../c-api/exceptions.rst:920 +msgid ":exc:`ReferenceError`" +msgstr ":exc:`ReferenceError`" + +#: ../../c-api/exceptions.rst:922 +msgid ":c:data:`PyExc_RuntimeError`" +msgstr ":c:data:`PyExc_RuntimeError`" + +#: ../../c-api/exceptions.rst:922 +msgid ":exc:`RuntimeError`" +msgstr ":exc:`RuntimeError`" + +#: ../../c-api/exceptions.rst:924 +msgid ":c:data:`PyExc_StopAsyncIteration`" +msgstr ":c:data:`PyExc_StopAsyncIteration`" + +#: ../../c-api/exceptions.rst:924 +msgid ":exc:`StopAsyncIteration`" +msgstr ":exc:`StopAsyncIteration`" + +#: ../../c-api/exceptions.rst:926 +msgid ":c:data:`PyExc_StopIteration`" +msgstr ":c:data:`PyExc_StopIteration`" + +#: ../../c-api/exceptions.rst:926 +msgid ":exc:`StopIteration`" +msgstr ":exc:`StopIteration`" + +#: ../../c-api/exceptions.rst:928 +msgid ":c:data:`PyExc_SyntaxError`" +msgstr ":c:data:`PyExc_SyntaxError`" + +#: ../../c-api/exceptions.rst:928 +msgid ":exc:`SyntaxError`" +msgstr ":exc:`SyntaxError`" + +#: ../../c-api/exceptions.rst:930 +msgid ":c:data:`PyExc_SystemError`" +msgstr ":c:data:`PyExc_SystemError`" + +#: ../../c-api/exceptions.rst:930 +msgid ":exc:`SystemError`" +msgstr ":exc:`SystemError`" + +#: ../../c-api/exceptions.rst:932 +msgid ":c:data:`PyExc_SystemExit`" +msgstr ":c:data:`PyExc_SystemExit`" + +#: ../../c-api/exceptions.rst:932 +msgid ":exc:`SystemExit`" +msgstr ":exc:`SystemExit`" + +#: ../../c-api/exceptions.rst:934 +msgid ":c:data:`PyExc_TabError`" +msgstr ":c:data:`PyExc_TabError`" + +#: ../../c-api/exceptions.rst:934 +msgid ":exc:`TabError`" +msgstr ":exc:`TabError`" + +#: ../../c-api/exceptions.rst:936 +msgid ":c:data:`PyExc_TimeoutError`" +msgstr ":c:data:`PyExc_TimeoutError`" + +#: ../../c-api/exceptions.rst:936 +msgid ":exc:`TimeoutError`" +msgstr ":exc:`TimeoutError`" + +#: ../../c-api/exceptions.rst:938 +msgid ":c:data:`PyExc_TypeError`" +msgstr ":c:data:`PyExc_TypeError`" + +#: ../../c-api/exceptions.rst:938 +msgid ":exc:`TypeError`" +msgstr ":exc:`TypeError`" + +#: ../../c-api/exceptions.rst:940 +msgid ":c:data:`PyExc_UnboundLocalError`" +msgstr ":c:data:`PyExc_UnboundLocalError`" + +#: ../../c-api/exceptions.rst:940 +msgid ":exc:`UnboundLocalError`" +msgstr ":exc:`UnboundLocalError`" + +#: ../../c-api/exceptions.rst:942 +msgid ":c:data:`PyExc_UnicodeDecodeError`" +msgstr ":c:data:`PyExc_UnicodeDecodeError`" + +#: ../../c-api/exceptions.rst:942 +msgid ":exc:`UnicodeDecodeError`" +msgstr ":exc:`UnicodeDecodeError`" + +#: ../../c-api/exceptions.rst:944 +msgid ":c:data:`PyExc_UnicodeEncodeError`" +msgstr ":c:data:`PyExc_UnicodeEncodeError`" + +#: ../../c-api/exceptions.rst:944 +msgid ":exc:`UnicodeEncodeError`" +msgstr ":exc:`UnicodeEncodeError`" + +#: ../../c-api/exceptions.rst:946 +msgid ":c:data:`PyExc_UnicodeError`" +msgstr ":c:data:`PyExc_UnicodeError`" + +#: ../../c-api/exceptions.rst:946 +msgid ":exc:`UnicodeError`" +msgstr ":exc:`UnicodeError`" + +#: ../../c-api/exceptions.rst:948 +msgid ":c:data:`PyExc_UnicodeTranslateError`" +msgstr ":c:data:`PyExc_UnicodeTranslateError`" + +#: ../../c-api/exceptions.rst:948 +msgid ":exc:`UnicodeTranslateError`" +msgstr ":exc:`UnicodeTranslateError`" + +#: ../../c-api/exceptions.rst:950 +msgid ":c:data:`PyExc_ValueError`" +msgstr ":c:data:`PyExc_ValueError`" + +#: ../../c-api/exceptions.rst:950 +msgid ":exc:`ValueError`" +msgstr ":exc:`ValueError`" + +#: ../../c-api/exceptions.rst:952 +msgid ":c:data:`PyExc_ZeroDivisionError`" +msgstr ":c:data:`PyExc_ZeroDivisionError`" + +#: ../../c-api/exceptions.rst:952 +msgid ":exc:`ZeroDivisionError`" +msgstr ":exc:`ZeroDivisionError`" + +#: ../../c-api/exceptions.rst:955 +msgid "" +":c:data:`PyExc_BlockingIOError`, :c:data:`PyExc_BrokenPipeError`, " +":c:data:`PyExc_ChildProcessError`, :c:data:`PyExc_ConnectionError`, " +":c:data:`PyExc_ConnectionAbortedError`, " +":c:data:`PyExc_ConnectionRefusedError`, " +":c:data:`PyExc_ConnectionResetError`, :c:data:`PyExc_FileExistsError`, " +":c:data:`PyExc_FileNotFoundError`, :c:data:`PyExc_InterruptedError`, " +":c:data:`PyExc_IsADirectoryError`, :c:data:`PyExc_NotADirectoryError`, " +":c:data:`PyExc_PermissionError`, :c:data:`PyExc_ProcessLookupError` and " +":c:data:`PyExc_TimeoutError` were introduced following :pep:`3151`." +msgstr "" +":c:data:`PyExc_BlockingIOError`, :c:data:`PyExc_BrokenPipeError`, " +":c:data:`PyExc_ChildProcessError`, :c:data:`PyExc_ConnectionError`, " +":c:data:`PyExc_ConnectionAbortedError`, " +":c:data:`PyExc_ConnectionRefusedError`, " +":c:data:`PyExc_ConnectionResetError`, :c:data:`PyExc_FileExistsError`, " +":c:data:`PyExc_FileNotFoundError`, :c:data:`PyExc_InterruptedError`, " +":c:data:`PyExc_IsADirectoryError`, :c:data:`PyExc_NotADirectoryError`, " +":c:data:`PyExc_PermissionError`, :c:data:`PyExc_ProcessLookupError` and " +":c:data:`PyExc_TimeoutError` 介绍如下 :pep:`3151`." + +#: ../../c-api/exceptions.rst:965 +msgid ":c:data:`PyExc_StopAsyncIteration` and :c:data:`PyExc_RecursionError`." +msgstr ":c:data:`PyExc_StopAsyncIteration` 和 :c:data:`PyExc_RecursionError`." + +#: ../../c-api/exceptions.rst:968 +msgid ":c:data:`PyExc_ModuleNotFoundError`." +msgstr ":c:data:`PyExc_ModuleNotFoundError`." + +#: ../../c-api/exceptions.rst:971 +msgid "These are compatibility aliases to :c:data:`PyExc_OSError`:" +msgstr "这些是兼容性别名 :c:data:`PyExc_OSError`:" + +#: ../../c-api/exceptions.rst:981 +msgid ":c:data:`PyExc_EnvironmentError`" +msgstr ":c:data:`PyExc_EnvironmentError`" + +#: ../../c-api/exceptions.rst:983 +msgid ":c:data:`PyExc_IOError`" +msgstr ":c:data:`PyExc_IOError`" + +#: ../../c-api/exceptions.rst:985 +msgid ":c:data:`PyExc_WindowsError`" +msgstr ":c:data:`PyExc_WindowsError`" + +#: ../../c-api/exceptions.rst:985 +msgid "[2]_" +msgstr "[2]_" + +#: ../../c-api/exceptions.rst:988 +msgid "These aliases used to be separate exception types." +msgstr "这些别名曾经是单独的异常类型。" + +#: ../../c-api/exceptions.rst:991 ../../c-api/exceptions.rst:1052 +msgid "Notes:" +msgstr "注释:" + +#: ../../c-api/exceptions.rst:994 +msgid "This is a base class for other standard exceptions." +msgstr "这是其他标准异常的基类。" + +#: ../../c-api/exceptions.rst:997 +msgid "" +"Only defined on Windows; protect code that uses this by testing that the " +"preprocessor macro ``MS_WINDOWS`` is defined." +msgstr "仅在 Windows 中定义;检测是否定义了预处理程序宏 ``MS_WINDOWS`` ,以便保护用到它的代码。" + +#: ../../c-api/exceptions.rst:1003 +msgid "Standard Warning Categories" +msgstr "标准警告类别" + +#: ../../c-api/exceptions.rst:1005 +msgid "" +"All standard Python warning categories are available as global variables " +"whose names are ``PyExc_`` followed by the Python exception name. These have" +" the type :c:type:`PyObject*`; they are all class objects. For completeness," +" here are all the variables:" +msgstr "" +"所有的标准 Python 警告类别都可以用作全局变量,其名称为``PyExc_`` 跟上 Python 异常名称。这些变量是 " +":c:type:`PyObject*` 类型;都是类对象。以下列出了所有用作警告的变量:" + +#: ../../c-api/exceptions.rst:1026 +msgid ":c:data:`PyExc_Warning`" +msgstr ":c:data:`PyExc_Warning`" + +#: ../../c-api/exceptions.rst:1026 +msgid ":exc:`Warning`" +msgstr ":exc:`Warning`" + +#: ../../c-api/exceptions.rst:1026 +msgid "[3]_" +msgstr "[3]_" + +#: ../../c-api/exceptions.rst:1028 +msgid ":c:data:`PyExc_BytesWarning`" +msgstr ":c:data:`PyExc_BytesWarning`" + +#: ../../c-api/exceptions.rst:1028 +msgid ":exc:`BytesWarning`" +msgstr ":exc:`BytesWarning`" + +#: ../../c-api/exceptions.rst:1030 +msgid ":c:data:`PyExc_DeprecationWarning`" +msgstr ":c:data:`PyExc_DeprecationWarning`" + +#: ../../c-api/exceptions.rst:1030 +msgid ":exc:`DeprecationWarning`" +msgstr ":exc:`DeprecationWarning`" + +#: ../../c-api/exceptions.rst:1032 +msgid ":c:data:`PyExc_FutureWarning`" +msgstr ":c:data:`PyExc_FutureWarning`" + +#: ../../c-api/exceptions.rst:1032 +msgid ":exc:`FutureWarning`" +msgstr ":exc:`FutureWarning`" + +#: ../../c-api/exceptions.rst:1034 +msgid ":c:data:`PyExc_ImportWarning`" +msgstr ":c:data:`PyExc_ImportWarning`" + +#: ../../c-api/exceptions.rst:1034 +msgid ":exc:`ImportWarning`" +msgstr ":exc:`ImportWarning`" + +#: ../../c-api/exceptions.rst:1036 +msgid ":c:data:`PyExc_PendingDeprecationWarning`" +msgstr ":c:data:`PyExc_PendingDeprecationWarning`" + +#: ../../c-api/exceptions.rst:1036 +msgid ":exc:`PendingDeprecationWarning`" +msgstr ":exc:`PendingDeprecationWarning`" + +#: ../../c-api/exceptions.rst:1038 +msgid ":c:data:`PyExc_ResourceWarning`" +msgstr ":c:data:`PyExc_ResourceWarning`" + +#: ../../c-api/exceptions.rst:1038 +msgid ":exc:`ResourceWarning`" +msgstr ":exc:`ResourceWarning`" + +#: ../../c-api/exceptions.rst:1040 +msgid ":c:data:`PyExc_RuntimeWarning`" +msgstr ":c:data:`PyExc_RuntimeWarning`" + +#: ../../c-api/exceptions.rst:1040 +msgid ":exc:`RuntimeWarning`" +msgstr ":exc:`RuntimeWarning`" + +#: ../../c-api/exceptions.rst:1042 +msgid ":c:data:`PyExc_SyntaxWarning`" +msgstr ":c:data:`PyExc_SyntaxWarning`" + +#: ../../c-api/exceptions.rst:1042 +msgid ":exc:`SyntaxWarning`" +msgstr ":exc:`SyntaxWarning`" + +#: ../../c-api/exceptions.rst:1044 +msgid ":c:data:`PyExc_UnicodeWarning`" +msgstr ":c:data:`PyExc_UnicodeWarning`" + +#: ../../c-api/exceptions.rst:1044 +msgid ":exc:`UnicodeWarning`" +msgstr ":exc:`UnicodeWarning`" + +#: ../../c-api/exceptions.rst:1046 +msgid ":c:data:`PyExc_UserWarning`" +msgstr ":c:data:`PyExc_UserWarning`" + +#: ../../c-api/exceptions.rst:1046 +msgid ":exc:`UserWarning`" +msgstr ":exc:`UserWarning`" + +#: ../../c-api/exceptions.rst:1049 +msgid ":c:data:`PyExc_ResourceWarning`." +msgstr ":c:data:`PyExc_ResourceWarning`." + +#: ../../c-api/exceptions.rst:1055 +msgid "This is a base class for other standard warning categories." +msgstr "这是其他标准警告类别的基类。" diff --git a/c-api/file.po b/c-api/file.po new file mode 100644 index 000000000..3078d89f9 --- /dev/null +++ b/c-api/file.po @@ -0,0 +1,161 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) 2001-2024, Python Software Foundation +# This file is distributed under the same license as the Python package. +# FIRST AUTHOR , YEAR. +# +# Translators: +# Alpha Du , 2019 +# Freesand Leo , 2020 +# Rafael Fontenelle , 2024 +# +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: Python 3.9\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2024-08-30 16:51+0000\n" +"PO-Revision-Date: 2017-02-16 17:35+0000\n" +"Last-Translator: Rafael Fontenelle , 2024\n" +"Language-Team: Chinese (China) (https://app.transifex.com/python-doc/teams/5390/zh_CN/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: zh_CN\n" +"Plural-Forms: nplurals=1; plural=0;\n" + +#: ../../c-api/file.rst:6 +msgid "File Objects" +msgstr "文件对象" + +#: ../../c-api/file.rst:10 +msgid "" +"These APIs are a minimal emulation of the Python 2 C API for built-in file " +"objects, which used to rely on the buffered I/O (:c:type:`FILE*`) support " +"from the C standard library. In Python 3, files and streams use the new " +":mod:`io` module, which defines several layers over the low-level unbuffered" +" I/O of the operating system. The functions described below are convenience" +" C wrappers over these new APIs, and meant mostly for internal error " +"reporting in the interpreter; third-party code is advised to access the " +":mod:`io` APIs instead." +msgstr "" +"这此 API 是对内置文件对象的 Python 2 C API 的最小仿真,它过去依赖于 C 标准库的缓冲 I/O (:c:type:`FILE*`) " +"支持。 在 Python 3 中,文件和流使用新的 :mod:`io` 模块,该模块在操作系统的低层级无缓冲 I/O 之上定义了几个层。 " +"下面所描述的函数是针对这些新 API 的便捷 C 包装器,主要用于解释器的内部错误报告;建议第三方代码改为访问 :mod:`io` API。" + +#: ../../c-api/file.rst:22 +msgid "" +"Create a Python file object from the file descriptor of an already opened " +"file *fd*. The arguments *name*, *encoding*, *errors* and *newline* can be " +"``NULL`` to use the defaults; *buffering* can be *-1* to use the default. " +"*name* is ignored and kept for backward compatibility. Return ``NULL`` on " +"failure. For a more comprehensive description of the arguments, please refer" +" to the :func:`io.open` function documentation." +msgstr "" +"根据已打开文件 *fd* 的文件描述符创建一个 Python 文件对象。 参数 *name*, *encoding*, *errors* 和 " +"*newline* 可以为 ``NULL`` 表示使用默认值;*buffering* 可以为 *-1* 表示使用默认值。 *name* " +"会被忽略仅保留用于向下兼容。 失败时返回 ``NULL``。 有关参数的更全面描述,请参阅 :func:`io.open` 函数的文档。" + +#: ../../c-api/file.rst:31 +msgid "" +"Since Python streams have their own buffering layer, mixing them with OS-" +"level file descriptors can produce various issues (such as unexpected " +"ordering of data)." +msgstr "由于Python流具有自己的缓冲层,因此将它们与 OS 级文件描述符混合会产生各种问题(例如数据的意外排序)。" + +#: ../../c-api/file.rst:35 +msgid "Ignore *name* attribute." +msgstr "忽略 *name* 属性。" + +#: ../../c-api/file.rst:41 +msgid "" +"Return the file descriptor associated with *p* as an :c:type:`int`. If the " +"object is an integer, its value is returned. If not, the object's " +":meth:`~io.IOBase.fileno` method is called if it exists; the method must " +"return an integer, which is returned as the file descriptor value. Sets an " +"exception and returns ``-1`` on failure." +msgstr "" +"将与 *p* 关联的文件描述器返回为 :c:type:`int` 。 如果对象是整数,则返回其值。 如果没有,则调用对象的 " +":meth:`~io.IOBase.fileno` 方法(如果存在); 该方法必须返回一个整数,该整数作为文件描述器值返回。 设置异常并在失败时返回 " +"``-1``。" + +#: ../../c-api/file.rst:52 +msgid "" +"Equivalent to ``p.readline([n])``, this function reads one line from the " +"object *p*. *p* may be a file object or any object with a " +":meth:`~io.IOBase.readline` method. If *n* is ``0``, exactly one line is " +"read, regardless of the length of the line. If *n* is greater than ``0``, " +"no more than *n* bytes will be read from the file; a partial line can be " +"returned. In both cases, an empty string is returned if the end of the file" +" is reached immediately. If *n* is less than ``0``, however, one line is " +"read regardless of length, but :exc:`EOFError` is raised if the end of the " +"file is reached immediately." +msgstr "" +"等价于 ``p.readline([n])`` ,这个函数从对象 *p* 中读取一行。 *p* 可以是文件对象或具有 " +":meth:`~io.IOBase.readline` 方法的任何对象。 如果 *n* 是 ``0`` ,则无论该行的长度如何,都会读取一行。 如果 " +"*n* 大于 ``0``,则从文件中读取不超过 *n* 个字节;可以返回行的一部分。 在这两种情况下,如果立即到达文件末尾,则返回空字符串。 但是,如果" +" *n* 小于 ``0`` ,则无论长度如何都会读取一行,但是如果立即到达文件末尾,则引发 :exc:`EOFError`。" + +#: ../../c-api/file.rst:65 +msgid "" +"Overrides the normal behavior of :func:`io.open_code` to pass its parameter " +"through the provided handler." +msgstr "重写 :func:`io.open_code` 的正常行为,将其形参通过所提供的处理程序来传递。" + +#: ../../c-api/file.rst:68 +msgid "" +"The handler is a function of type :c:type:`PyObject *(\\*)(PyObject *path, " +"void *userData)`, where *path* is guaranteed to be " +":c:type:`PyUnicodeObject`." +msgstr "" +"处理程序是一个类型为 :c:type:`PyObject *(\\*)(PyObject *path, void *userData)` 的函数,其中 " +"*path* 确保为 :c:type:`PyUnicodeObject`。" + +#: ../../c-api/file.rst:71 +msgid "" +"The *userData* pointer is passed into the hook function. Since hook " +"functions may be called from different runtimes, this pointer should not " +"refer directly to Python state." +msgstr "*userData* 指针会被传入钩子函数。 因于钩子函数可能由不同的运行时调用,该指针不应直接指向 Python 状态。" + +#: ../../c-api/file.rst:75 +msgid "" +"As this hook is intentionally used during import, avoid importing new " +"modules during its execution unless they are known to be frozen or available" +" in ``sys.modules``." +msgstr "" +"鉴于这个钩子专门在导入期间使用的,请避免在新模块执行期间进行导入操作,除非已知它们为冻结状态或者是在 ``sys.modules`` 中可用。" + +#: ../../c-api/file.rst:79 +msgid "" +"Once a hook has been set, it cannot be removed or replaced, and later calls " +"to :c:func:`PyFile_SetOpenCodeHook` will fail. On failure, the function " +"returns -1 and sets an exception if the interpreter has been initialized." +msgstr "" +"一旦钩子被设定,它就不能被移除或替换,之后对 :c:func:`PyFile_SetOpenCodeHook` " +"的调用也将失败,如果解释器已经被初始化,函数将返回 -1 并设置一个异常。" + +#: ../../c-api/file.rst:83 +msgid "This function is safe to call before :c:func:`Py_Initialize`." +msgstr "此函数可以安全地在 :c:func:`Py_Initialize` 之前调用。" + +#: ../../c-api/file.rst:85 +msgid "" +"Raises an :ref:`auditing event ` ``setopencodehook`` with no " +"arguments." +msgstr "引发一个不带参数的 :ref:`审计事件 ` ``setopencodehook``。" + +#: ../../c-api/file.rst:95 +msgid "" +"Write object *obj* to file object *p*. The only supported flag for *flags* " +"is :const:`Py_PRINT_RAW`; if given, the :func:`str` of the object is written" +" instead of the :func:`repr`. Return ``0`` on success or ``-1`` on failure;" +" the appropriate exception will be set." +msgstr "" +"将对象 *obj* 写入文件对象 *p* 。 *flags* 唯一支持的标志是 :const:`Py_PRINT_RAW`;如果给定,则写入对象的 " +":func:`str` 而不是 :func:`repr`。成功时返回 ``0``,失败时返回 ``-1``。 将设置适当的例外。" + +#: ../../c-api/file.rst:103 +msgid "" +"Write string *s* to file object *p*. Return ``0`` on success or ``-1`` on " +"failure; the appropriate exception will be set." +msgstr "将字符串 *s* 写入文件对象 *p*。 成功返回 ``0`` 失败返回 ``-1``;将设定相应的异常。" diff --git a/c-api/float.po b/c-api/float.po new file mode 100644 index 000000000..40d20ace1 --- /dev/null +++ b/c-api/float.po @@ -0,0 +1,114 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) 2001-2022, Python Software Foundation +# This file is distributed under the same license as the Python package. +# FIRST AUTHOR , YEAR. +# +# Translators: +# 叶浚安 , 2019 +# Alpha Du , 2019 +# Freesand Leo , 2021 +# +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: Python 3.9\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2022-11-04 14:34+0000\n" +"PO-Revision-Date: 2017-02-16 17:35+0000\n" +"Last-Translator: Freesand Leo , 2021\n" +"Language-Team: Chinese (China) (https://www.transifex.com/python-doc/teams/5390/zh_CN/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: zh_CN\n" +"Plural-Forms: nplurals=1; plural=0;\n" + +#: ../../c-api/float.rst:6 +msgid "Floating Point Objects" +msgstr "浮点数对象" + +#: ../../c-api/float.rst:13 +msgid "" +"This subtype of :c:type:`PyObject` represents a Python floating point " +"object." +msgstr "这个C类型 :c:type:`PyObject` 的子类型代表一个Python浮点数对象。" + +#: ../../c-api/float.rst:18 +msgid "" +"This instance of :c:type:`PyTypeObject` represents the Python floating point" +" type. This is the same object as :class:`float` in the Python layer." +msgstr "" +"这是个属于C类型 :c:type:`PyTypeObject` 的代表Python浮点类型的实例。在Python层面的类型 :class:`float`" +" 是同一个对象。" + +#: ../../c-api/float.rst:24 +msgid "" +"Return true if its argument is a :c:type:`PyFloatObject` or a subtype of " +":c:type:`PyFloatObject`. This function always succeeds." +msgstr "" +"如果它的参数是一个 :c:type:`PyFloatObject` 或者 :c:type:`PyFloatObject` 的子类型则返回真值。 " +"此函数总是会成功执行。" + +#: ../../c-api/float.rst:30 +msgid "" +"Return true if its argument is a :c:type:`PyFloatObject`, but not a subtype " +"of :c:type:`PyFloatObject`. This function always succeeds." +msgstr "" +"如果它的参数是一个 :c:type:`PyFloatObject` 但不是 :c:type:`PyFloatObject` 的子类型则返回真值。 " +"此函数总是会成功执行。" + +#: ../../c-api/float.rst:36 +msgid "" +"Create a :c:type:`PyFloatObject` object based on the string value in *str*, " +"or ``NULL`` on failure." +msgstr "根据字符串 *str* 的值创建一个 :c:type:`PyFloatObject`,失败时返回 ``NULL``。" + +#: ../../c-api/float.rst:42 +msgid "" +"Create a :c:type:`PyFloatObject` object from *v*, or ``NULL`` on failure." +msgstr "根据 *v* 创建一个 :c:type:`PyFloatObject` 对象,失败时返回 ``NULL``。" + +#: ../../c-api/float.rst:47 +msgid "" +"Return a C :c:type:`double` representation of the contents of *pyfloat*. If" +" *pyfloat* is not a Python floating point object but has a :meth:`__float__`" +" method, this method will first be called to convert *pyfloat* into a float." +" If ``__float__()`` is not defined then it falls back to :meth:`__index__`. " +"This method returns ``-1.0`` upon failure, so one should call " +":c:func:`PyErr_Occurred` to check for errors." +msgstr "" +"返回一个 C :c:type:`double` 代表 *pyfloat* 的内容。 如果 *pyfloat* 不是一个 Python 浮点数对象但是具有" +" :meth:`__float__` 方法,此方法将首先被调用,将 *pyfloat* 转换成一个数点数。 如果 ``__float__()`` " +"未定义则将回退至 :meth:`__index__`。 如果失败,此方法将返回 ``-1.0``,因此开发者应当调用 " +":c:func:`PyErr_Occurred` 来检查错误。" + +#: ../../c-api/float.rst:54 +msgid "Use :meth:`__index__` if available." +msgstr "如果可用将使用 :meth:`__index__`。" + +#: ../../c-api/float.rst:60 +msgid "" +"Return a C :c:type:`double` representation of the contents of *pyfloat*, but" +" without error checking." +msgstr "返回一个 *pyfloat* 内容的 C :c:type:`double` 表示,但没有错误检查。" + +#: ../../c-api/float.rst:66 +msgid "" +"Return a structseq instance which contains information about the precision, " +"minimum and maximum values of a float. It's a thin wrapper around the header" +" file :file:`float.h`." +msgstr "" +"返回一个 structseq 实例,其中包含有关 float 的精度、最小值和最大值的信息。 它是头文件 :file:`float.h` " +"的一个简单包装。" + +#: ../../c-api/float.rst:73 +msgid "" +"Return the maximum representable finite float *DBL_MAX* as C " +":c:type:`double`." +msgstr "返回最大可表示的有限浮点数 *DBL_MAX* 为 C :c:type:`double` 。" + +#: ../../c-api/float.rst:78 +msgid "" +"Return the minimum normalized positive float *DBL_MIN* as C " +":c:type:`double`." +msgstr "返回最小可表示归一化正浮点数 *DBL_MIN* 为 C :c:type:`double` 。" diff --git a/c-api/function.po b/c-api/function.po new file mode 100644 index 000000000..1a0e66a26 --- /dev/null +++ b/c-api/function.po @@ -0,0 +1,142 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) 2001-2022, Python Software Foundation +# This file is distributed under the same license as the Python package. +# FIRST AUTHOR , YEAR. +# +# Translators: +# Alpha Du , 2019 +# Josh Ouyang , 2019 +# allenjuly7 , 2019 +# Kade For, 2019 +# Freesand Leo , 2021 +# +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: Python 3.9\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2022-11-04 14:34+0000\n" +"PO-Revision-Date: 2017-02-16 17:35+0000\n" +"Last-Translator: Freesand Leo , 2021\n" +"Language-Team: Chinese (China) (https://www.transifex.com/python-doc/teams/5390/zh_CN/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: zh_CN\n" +"Plural-Forms: nplurals=1; plural=0;\n" + +#: ../../c-api/function.rst:6 +msgid "Function Objects" +msgstr "函数对象" + +#: ../../c-api/function.rst:10 +msgid "There are a few functions specific to Python functions." +msgstr "有一些特定于 Python 函数的函数。" + +#: ../../c-api/function.rst:15 +msgid "The C structure used for functions." +msgstr "用于函数的 C 结构体。" + +#: ../../c-api/function.rst:22 +msgid "" +"This is an instance of :c:type:`PyTypeObject` and represents the Python " +"function type. It is exposed to Python programmers as " +"``types.FunctionType``." +msgstr "" +"这是一个 :c:type:`PyTypeObject` 实例并表示 Python 函数类型。 它作为 ``types.FunctionType`` 向 " +"Python 程序员公开。" + +#: ../../c-api/function.rst:28 +msgid "" +"Return true if *o* is a function object (has type " +":c:data:`PyFunction_Type`). The parameter must not be ``NULL``. This " +"function always succeeds." +msgstr "" +"如果 *o* 是一个函数对象 (类型为 :c:data:`PyFunction_Type`) 则返回真值。 形参必须不为 ``NULL``。 " +"此函数总是会成功执行。" + +#: ../../c-api/function.rst:34 +msgid "" +"Return a new function object associated with the code object *code*. " +"*globals* must be a dictionary with the global variables accessible to the " +"function." +msgstr "返回与代码对象 *code* 关联的新函数对象。 *globals* 必须是一个字典,该函数可以访问全局变量。" + +#: ../../c-api/function.rst:37 +msgid "" +"The function's docstring and name are retrieved from the code object. " +"*__module__* is retrieved from *globals*. The argument defaults, annotations" +" and closure are set to ``NULL``. *__qualname__* is set to the same value as" +" the function's name." +msgstr "" +"从代码对象中提取函数的文档字符串和名称。 *__module__* 会从 *globals* 中提取。 参数 defaults, annotations" +" 和 closure 设为 ``NULL``。 *__qualname__* 设为与函数名称相同的值。" + +#: ../../c-api/function.rst:44 +msgid "" +"As :c:func:`PyFunction_New`, but also allows setting the function object's " +"``__qualname__`` attribute. *qualname* should be a unicode object or " +"``NULL``; if ``NULL``, the ``__qualname__`` attribute is set to the same " +"value as its ``__name__`` attribute." +msgstr "" +"类似 :c:func:`PyFunction_New`,但还允许设置函数对象的 ``__qualname__`` 属性。 *qualname* 应当是 " +"unicode 对象或 ``NULL``;如果是 ``NULL`` 则 ``__qualname__`` 属性设为与其 ``__name__`` " +"属性相同的值。" + +#: ../../c-api/function.rst:54 +msgid "Return the code object associated with the function object *op*." +msgstr "返回与函数对象 *op* 关联的代码对象。" + +#: ../../c-api/function.rst:59 +msgid "" +"Return the globals dictionary associated with the function object *op*." +msgstr "返回与函数对象*op*相关联的全局字典。" + +#: ../../c-api/function.rst:64 +msgid "" +"Return the *__module__* attribute of the function object *op*. This is " +"normally a string containing the module name, but can be set to any other " +"object by Python code." +msgstr "" +"返回函数对象 *op* 的 *__module__* 属性,通常为一个包含了模块名称的字符串,但可以通过 Python 代码设为返回其他任意对象。" + +#: ../../c-api/function.rst:71 +msgid "" +"Return the argument default values of the function object *op*. This can be " +"a tuple of arguments or ``NULL``." +msgstr "返回函数对象 *op* 的参数默认值。 这可以是一个参数元组或 ``NULL``。" + +#: ../../c-api/function.rst:77 +msgid "" +"Set the argument default values for the function object *op*. *defaults* " +"must be ``Py_None`` or a tuple." +msgstr "为函数对象 *op* 设置参数默认值。 *defaults* 必须为 ``Py_None`` 或一个元组。" + +#: ../../c-api/function.rst:80 ../../c-api/function.rst:94 +#: ../../c-api/function.rst:108 +msgid "Raises :exc:`SystemError` and returns ``-1`` on failure." +msgstr "失败时引发 :exc:`SystemError` 异常并返回 ``-1`` 。" + +#: ../../c-api/function.rst:85 +msgid "" +"Return the closure associated with the function object *op*. This can be " +"``NULL`` or a tuple of cell objects." +msgstr "返回关联到函数对象 *op* 的闭包。 这可以是 ``NULL`` 或 cell 对象的元组。" + +#: ../../c-api/function.rst:91 +msgid "" +"Set the closure associated with the function object *op*. *closure* must be " +"``Py_None`` or a tuple of cell objects." +msgstr "设置关联到函数对象 *op* 的闭包。 *closure* 必须为 ``Py_None`` 或 cell 对象的元组。" + +#: ../../c-api/function.rst:99 +msgid "" +"Return the annotations of the function object *op*. This can be a mutable " +"dictionary or ``NULL``." +msgstr "返回函数对象 *op* 的标注。 这可以是一个可变字典或 ``NULL``。" + +#: ../../c-api/function.rst:105 +msgid "" +"Set the annotations for the function object *op*. *annotations* must be a " +"dictionary or ``Py_None``." +msgstr "设置函数对象 *op* 的标注。 *annotations* 必须为一个字典或 ``Py_None``。" diff --git a/c-api/gcsupport.po b/c-api/gcsupport.po new file mode 100644 index 000000000..a29dd00c1 --- /dev/null +++ b/c-api/gcsupport.po @@ -0,0 +1,290 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) 2001-2022, Python Software Foundation +# This file is distributed under the same license as the Python package. +# FIRST AUTHOR , YEAR. +# +# Translators: +# Makdon , 2019 +# Freesand Leo , 2021 +# +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: Python 3.9\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2022-11-04 14:34+0000\n" +"PO-Revision-Date: 2017-02-16 17:35+0000\n" +"Last-Translator: Freesand Leo , 2021\n" +"Language-Team: Chinese (China) (https://www.transifex.com/python-doc/teams/5390/zh_CN/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: zh_CN\n" +"Plural-Forms: nplurals=1; plural=0;\n" + +#: ../../c-api/gcsupport.rst:6 +msgid "Supporting Cyclic Garbage Collection" +msgstr "使对象类型支持循环垃圾回收" + +#: ../../c-api/gcsupport.rst:8 +msgid "" +"Python's support for detecting and collecting garbage which involves " +"circular references requires support from object types which are " +"\"containers\" for other objects which may also be containers. Types which " +"do not store references to other objects, or which only store references to " +"atomic types (such as numbers or strings), do not need to provide any " +"explicit support for garbage collection." +msgstr "" +"Python " +"对循环引用的垃圾检测与回收需要“容器”对象类型的支持,此类型的容器对象中可能包含其它容器对象。不保存其它对象的引用的类型,或者只保存原子类型(如数字或字符串)的引用的类型,不需要显式提供垃圾回收的支持。" + +#: ../../c-api/gcsupport.rst:15 +msgid "" +"To create a container type, the :c:member:`~PyTypeObject.tp_flags` field of " +"the type object must include the :const:`Py_TPFLAGS_HAVE_GC` and provide an " +"implementation of the :c:member:`~PyTypeObject.tp_traverse` handler. If " +"instances of the type are mutable, a :c:member:`~PyTypeObject.tp_clear` " +"implementation must also be provided." +msgstr "" +"若要创建一个容器类,类型对象的 :c:member:`~PyTypeObject.tp_flags` 字段必须包含 " +":const:`Py_TPFLAGS_HAVE_GC` 并提供一个 :c:member:`~PyTypeObject.tp_traverse` " +"处理的实现。如果该类型的实例是可变的,还需要实现 :c:member:`~PyTypeObject.tp_clear` 。" + +#: ../../c-api/gcsupport.rst:24 +msgid "" +"Objects with a type with this flag set must conform with the rules " +"documented here. For convenience these objects will be referred to as " +"container objects." +msgstr "设置了此标志位的类型的对象必须符合此处记录的规则。为方便起见,下文把这些对象称为容器对象。" + +#: ../../c-api/gcsupport.rst:28 +msgid "Constructors for container types must conform to two rules:" +msgstr "容器类型的构造函数必须符合两个规则:" + +#: ../../c-api/gcsupport.rst:30 +msgid "" +"The memory for the object must be allocated using :c:func:`PyObject_GC_New` " +"or :c:func:`PyObject_GC_NewVar`." +msgstr "" +"必须使用 :c:func:`PyObject_GC_New` 或 :c:func:`PyObject_GC_NewVar` 为这些对象分配内存。" + +#: ../../c-api/gcsupport.rst:33 +msgid "" +"Once all the fields which may contain references to other containers are " +"initialized, it must call :c:func:`PyObject_GC_Track`." +msgstr "初始化了所有可能包含其他容器的引用的字段后,它必须调用 :c:func:`PyObject_GC_Track` 。" + +#: ../../c-api/gcsupport.rst:36 +msgid "" +"Similarly, the deallocator for the object must conform to a similar pair of " +"rules:" +msgstr "同样的,对象的释放器必须符合两个类似的规则:" + +#: ../../c-api/gcsupport.rst:39 +msgid "" +"Before fields which refer to other containers are invalidated, " +":c:func:`PyObject_GC_UnTrack` must be called." +msgstr "在引用其它容器的字段失效前,必须调用 :c:func:`PyObject_GC_UnTrack` 。" + +#: ../../c-api/gcsupport.rst:42 +msgid "" +"The object's memory must be deallocated using :c:func:`PyObject_GC_Del`." +msgstr "必须使用 :c:func:`PyObject_GC_Del` 释放对象的内存。" + +#: ../../c-api/gcsupport.rst:45 +msgid "" +"If a type adds the Py_TPFLAGS_HAVE_GC, then it *must* implement at least a " +":c:member:`~PyTypeObject.tp_traverse` handler or explicitly use one from its" +" subclass or subclasses." +msgstr "" +"如果一个类型添加了 Py_TPFLAGS_HAVE_GC,则它 *必须* 实现至少一个 " +":c:member:`~PyTypeObject.tp_traverse` 句柄或显式地使用来自其一个或多个子类的句柄。" + +#: ../../c-api/gcsupport.rst:49 +msgid "" +"When calling :c:func:`PyType_Ready` or some of the APIs that indirectly call" +" it like :c:func:`PyType_FromSpecWithBases` or :c:func:`PyType_FromSpec` the" +" interpreter will automatically populate the " +":c:member:`~PyTypeObject.tp_flags`, :c:member:`~PyTypeObject.tp_traverse` " +"and :c:member:`~PyTypeObject.tp_clear` fields if the type inherits from a " +"class that implements the garbage collector protocol and the child class " +"does *not* include the :const:`Py_TPFLAGS_HAVE_GC` flag." +msgstr "" +"当调用 :c:func:`PyType_Ready` 或者 API 中某些间接调用它的函数例如 " +":c:func:`PyType_FromSpecWithBases` 或 :c:func:`PyType_FromSpec` 时解释器就自动填充 " +":c:member:`~PyTypeObject.tp_flags`, :c:member:`~PyTypeObject.tp_traverse` 和 " +":c:member:`~PyTypeObject.tp_clear` 字段,如果该类型是继承自实现了垃圾回收器协议的类并且该子类 *没有* 包括 " +":const:`Py_TPFLAGS_HAVE_GC` 旗标的话。" + +#: ../../c-api/gcsupport.rst:59 +msgid "" +"Analogous to :c:func:`PyObject_New` but for container objects with the " +":const:`Py_TPFLAGS_HAVE_GC` flag set." +msgstr "" +"类似于 :c:func:`PyObject_New` ,适用于设置了 :const:`Py_TPFLAGS_HAVE_GC` 标签的容器对象。" + +#: ../../c-api/gcsupport.rst:65 +msgid "" +"Analogous to :c:func:`PyObject_NewVar` but for container objects with the " +":const:`Py_TPFLAGS_HAVE_GC` flag set." +msgstr "" +"类似于 :c:func:`PyObject_NewVar` ,适用于设置了 :const:`Py_TPFLAGS_HAVE_GC` 标签的容器对象。" + +#: ../../c-api/gcsupport.rst:71 +msgid "" +"Resize an object allocated by :c:func:`PyObject_NewVar`. Returns the " +"resized object or ``NULL`` on failure. *op* must not be tracked by the " +"collector yet." +msgstr "" +"为 :c:func:`PyObject_NewVar` 所分配对象重新调整大小。 返回调整大小后的对象或在失败时返回 ``NULL``。 *op* " +"必须尚未被垃圾回收器追踪。" + +#: ../../c-api/gcsupport.rst:77 +msgid "" +"Adds the object *op* to the set of container objects tracked by the " +"collector. The collector can run at unexpected times so objects must be " +"valid while being tracked. This should be called once all the fields " +"followed by the :c:member:`~PyTypeObject.tp_traverse` handler become valid, " +"usually near the end of the constructor." +msgstr "" +"把对象 *op* 加入到垃圾回收器跟踪的容器对象中。对象在被回收器跟踪时必须保持有效的,因为回收器可能在任何时候开始运行。在 " +":c:member:`~PyTypeObject.tp_traverse` 处理前的所有字段变为有效后,必须调用此函数,通常在靠近构造函数末尾的位置。" + +#: ../../c-api/gcsupport.rst:86 +msgid "" +"Returns non-zero if the object implements the garbage collector protocol, " +"otherwise returns 0." +msgstr "如果对象实现了垃圾回收器协议则返回非零值,否则返回 0。" + +#: ../../c-api/gcsupport.rst:89 +msgid "" +"The object cannot be tracked by the garbage collector if this function " +"returns 0." +msgstr "如果此函数返回 0 则对象无法被垃圾回收器追踪。" + +#: ../../c-api/gcsupport.rst:94 +msgid "" +"Returns 1 if the object type of *op* implements the GC protocol and *op* is " +"being currently tracked by the garbage collector and 0 otherwise." +msgstr "如果 *op* 对象的类型实现了 GC 协议且 *op* 目前正被垃圾回收器追踪则返回 1, 否则返回 0。" + +#: ../../c-api/gcsupport.rst:97 +msgid "This is analogous to the Python function :func:`gc.is_tracked`." +msgstr "这类似于 Python 函数 :func:`gc.is_tracked`。" + +#: ../../c-api/gcsupport.rst:104 +msgid "" +"Returns 1 if the object type of *op* implements the GC protocol and *op* has" +" been already finalized by the garbage collector and 0 otherwise." +msgstr "如果 *op* 对象的类型实现了 GC 协议且 *op* 已经被垃圾回收器终结则返回 1, 否则返回 0。" + +#: ../../c-api/gcsupport.rst:107 +msgid "This is analogous to the Python function :func:`gc.is_finalized`." +msgstr "这类似于 Python 函数 :func:`gc.is_finalized`。" + +#: ../../c-api/gcsupport.rst:114 +msgid "" +"Releases memory allocated to an object using :c:func:`PyObject_GC_New` or " +":c:func:`PyObject_GC_NewVar`." +msgstr "" +"释放对象的内存,该对象初始化时由 :c:func:`PyObject_GC_New` 或 :c:func:`PyObject_GC_NewVar` " +"分配内存。" + +#: ../../c-api/gcsupport.rst:120 +msgid "" +"Remove the object *op* from the set of container objects tracked by the " +"collector. Note that :c:func:`PyObject_GC_Track` can be called again on " +"this object to add it back to the set of tracked objects. The deallocator " +"(:c:member:`~PyTypeObject.tp_dealloc` handler) should call this for the " +"object before any of the fields used by the " +":c:member:`~PyTypeObject.tp_traverse` handler become invalid." +msgstr "" +"从回收器跟踪的容器对象集合中移除 *op* 对象。 请注意可以在此对象上再次调用 :c:func:`PyObject_GC_Track` " +"以将其加回到被跟踪对象集合。 释放器 (:c:member:`~PyTypeObject.tp_dealloc` 句柄) 应当在 " +":c:member:`~PyTypeObject.tp_traverse` 句柄所使用的任何字段失效之前为对象调用此函数。" + +#: ../../c-api/gcsupport.rst:129 +msgid "" +"The :c:func:`_PyObject_GC_TRACK` and :c:func:`_PyObject_GC_UNTRACK` macros " +"have been removed from the public C API." +msgstr "" +":c:func:`_PyObject_GC_TRACK` 和 :c:func:`_PyObject_GC_UNTRACK` 宏已从公有 C API " +"中移除。" + +#: ../../c-api/gcsupport.rst:132 +msgid "" +"The :c:member:`~PyTypeObject.tp_traverse` handler accepts a function " +"parameter of this type:" +msgstr ":c:member:`~PyTypeObject.tp_traverse` 处理接收以下类型的函数形参。" + +#: ../../c-api/gcsupport.rst:137 +msgid "" +"Type of the visitor function passed to the " +":c:member:`~PyTypeObject.tp_traverse` handler. The function should be called" +" with an object to traverse as *object* and the third parameter to the " +":c:member:`~PyTypeObject.tp_traverse` handler as *arg*. The Python core " +"uses several visitor functions to implement cyclic garbage detection; it's " +"not expected that users will need to write their own visitor functions." +msgstr "" +"传给 :c:member:`~PyTypeObject.tp_traverse` 处理的访问函数的类型。*object* " +"是容器中需要被遍历的一个对象,第三个形参对应于 :c:member:`~PyTypeObject.tp_traverse` 处理的 *arg* " +"。Python核心使用多个访问者函数实现循环引用的垃圾检测,不需要用户自行实现访问者函数。" + +#: ../../c-api/gcsupport.rst:144 +msgid "" +"The :c:member:`~PyTypeObject.tp_traverse` handler must have the following " +"type:" +msgstr ":c:member:`~PyTypeObject.tp_traverse` 处理必须是以下类型:" + +#: ../../c-api/gcsupport.rst:149 +msgid "" +"Traversal function for a container object. Implementations must call the " +"*visit* function for each object directly contained by *self*, with the " +"parameters to *visit* being the contained object and the *arg* value passed " +"to the handler. The *visit* function must not be called with a ``NULL`` " +"object argument. If *visit* returns a non-zero value that value should be " +"returned immediately." +msgstr "" +"用于容器对象的遍历函数。 它的实现必须对 *self* 所直接包含的每个对象调用 *visit* 函数,*visit* " +"的形参为所包含对象和传给处理程序的 *arg* 值。 *visit* 函数调用不可附带 ``NULL`` 对象作为参数。 如果 *visit* " +"返回非零值,则该值应当被立即返回。" + +#: ../../c-api/gcsupport.rst:156 +msgid "" +"To simplify writing :c:member:`~PyTypeObject.tp_traverse` handlers, a " +":c:func:`Py_VISIT` macro is provided. In order to use this macro, the " +":c:member:`~PyTypeObject.tp_traverse` implementation must name its arguments" +" exactly *visit* and *arg*:" +msgstr "" +"为了简化 :c:member:`~PyTypeObject.tp_traverse` 处理的实现,Python提供了一个 " +":c:func:`Py_VISIT` 宏。若要使用这个宏,必须把 :c:member:`~PyTypeObject.tp_traverse` " +"的参数命名为 *visit* 和 *arg* 。" + +#: ../../c-api/gcsupport.rst:163 +msgid "" +"If *o* is not ``NULL``, call the *visit* callback, with arguments *o* and " +"*arg*. If *visit* returns a non-zero value, then return it. Using this " +"macro, :c:member:`~PyTypeObject.tp_traverse` handlers look like::" +msgstr "" +"如果 *o* 不为 ``NULL``,则调用 *visit* 回调函数,附带参数 *o* 和 *arg*。 如果 *visit* " +"返回一个非零值,则返回该值。 使用此宏之后,:c:member:`~PyTypeObject.tp_traverse` 处理程序的形式如下::" + +#: ../../c-api/gcsupport.rst:176 +msgid "" +"The :c:member:`~PyTypeObject.tp_clear` handler must be of the " +":c:type:`inquiry` type, or ``NULL`` if the object is immutable." +msgstr "" +":c:member:`~PyTypeObject.tp_clear` 处理程序必须为 :c:type:`inquiry` 类型,如果对象不可变则为 " +"``NULL``。" + +#: ../../c-api/gcsupport.rst:182 +msgid "" +"Drop references that may have created reference cycles. Immutable objects " +"do not have to define this method since they can never directly create " +"reference cycles. Note that the object must still be valid after calling " +"this method (don't just call :c:func:`Py_DECREF` on a reference). The " +"collector will call this method if it detects that this object is involved " +"in a reference cycle." +msgstr "" +"丢弃产生循环引用的引用。不可变对象不需要声明此方法,因为他们不可能直接产生循环引用。需要注意的是,对象在调用此方法后必须仍是有效的(不能对引用只调用 " +":c:func:`Py_DECREF` 方法)。当垃圾回收器检测到该对象在循环引用中时,此方法会被调用。" diff --git a/c-api/gen.po b/c-api/gen.po new file mode 100644 index 000000000..4b834e137 --- /dev/null +++ b/c-api/gen.po @@ -0,0 +1,75 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) 2001-2022, Python Software Foundation +# This file is distributed under the same license as the Python package. +# FIRST AUTHOR , YEAR. +# +# Translators: +# ww song , 2018 +# Freesand Leo , 2021 +# +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: Python 3.9\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2022-11-04 14:34+0000\n" +"PO-Revision-Date: 2017-02-16 17:35+0000\n" +"Last-Translator: Freesand Leo , 2021\n" +"Language-Team: Chinese (China) (https://www.transifex.com/python-doc/teams/5390/zh_CN/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: zh_CN\n" +"Plural-Forms: nplurals=1; plural=0;\n" + +#: ../../c-api/gen.rst:6 +msgid "Generator Objects" +msgstr "生成器对象" + +#: ../../c-api/gen.rst:8 +msgid "" +"Generator objects are what Python uses to implement generator iterators. " +"They are normally created by iterating over a function that yields values, " +"rather than explicitly calling :c:func:`PyGen_New` or " +":c:func:`PyGen_NewWithQualName`." +msgstr "" +"生成器对象是Python用来实现生成器迭代器的对象。它们通常通过迭代产生值的函数来创建,而不是显式调用 :c:func:`PyGen_New` 或 " +":c:func:`PyGen_NewWithQualName`。" + +#: ../../c-api/gen.rst:15 +msgid "The C structure used for generator objects." +msgstr "用于生成器对象的C结构体。" + +#: ../../c-api/gen.rst:20 +msgid "The type object corresponding to generator objects." +msgstr "与生成器对象对应的类型对​​象。" + +#: ../../c-api/gen.rst:25 +msgid "" +"Return true if *ob* is a generator object; *ob* must not be ``NULL``. This " +"function always succeeds." +msgstr "如果 *ob* 是一个 generator 对象则返回真值;*ob* 必须不为 ``NULL``。 此函数总是会成功执行。" + +#: ../../c-api/gen.rst:31 +msgid "" +"Return true if *ob*'s type is :c:type:`PyGen_Type`; *ob* must not be " +"``NULL``. This function always succeeds." +msgstr "" +"如果 *ob* 的类型是 :c:type:`PyGen_Type` 则返回真值;*ob* 必须不为 ``NULL``。 此函数总是会成功执行。" + +#: ../../c-api/gen.rst:37 +msgid "" +"Create and return a new generator object based on the *frame* object. A " +"reference to *frame* is stolen by this function. The argument must not be " +"``NULL``." +msgstr "基于 *frame* 对象创建并返回一个新的生成器对象。 此函数会取走一个对 *frame* 的引用。 参数必须不为 ``NULL``。" + +#: ../../c-api/gen.rst:43 +msgid "" +"Create and return a new generator object based on the *frame* object, with " +"``__name__`` and ``__qualname__`` set to *name* and *qualname*. A reference " +"to *frame* is stolen by this function. The *frame* argument must not be " +"``NULL``." +msgstr "" +"基于 *frame* 对象创建并返回一个新的生成器对象,其中 ``__name__`` 和 ``__qualname__`` 设为 *name* 和 " +"*qualname*。 此函数会取走一个对 *frame* 的引用。 *frame* 参数必须不为 ``NULL``。" diff --git a/c-api/import.po b/c-api/import.po new file mode 100644 index 000000000..df309b4df --- /dev/null +++ b/c-api/import.po @@ -0,0 +1,403 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) 2001-2025, Python Software Foundation +# This file is distributed under the same license as the Python package. +# FIRST AUTHOR , YEAR. +# +# Translators: +# Alpha Du , 2019 +# 汪心禾 , 2019 +# Lordran , 2019 +# zeroswan , 2020 +# Freesand Leo , 2022 +# Rafael Fontenelle , 2025 +# +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: Python 3.9\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2025-02-07 16:40+0000\n" +"PO-Revision-Date: 2017-02-16 17:35+0000\n" +"Last-Translator: Rafael Fontenelle , 2025\n" +"Language-Team: Chinese (China) (https://app.transifex.com/python-doc/teams/5390/zh_CN/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: zh_CN\n" +"Plural-Forms: nplurals=1; plural=0;\n" + +#: ../../c-api/import.rst:6 +msgid "Importing Modules" +msgstr "导入模块" + +#: ../../c-api/import.rst:16 +msgid "" +"This is a simplified interface to :c:func:`PyImport_ImportModuleEx` below, " +"leaving the *globals* and *locals* arguments set to ``NULL`` and *level* set" +" to 0. When the *name* argument contains a dot (when it specifies a " +"submodule of a package), the *fromlist* argument is set to the list " +"``['*']`` so that the return value is the named module rather than the top-" +"level package containing it as would otherwise be the case. (Unfortunately," +" this has an additional side effect when *name* in fact specifies a " +"subpackage instead of a submodule: the submodules specified in the package's" +" ``__all__`` variable are loaded.) Return a new reference to the imported " +"module, or ``NULL`` with an exception set on failure. A failing import of a" +" module doesn't leave the module in :data:`sys.modules`." +msgstr "" +"这是下面 :c:func:`PyImport_ImportModuleEx` 的简化版接口,将 *globals* 和 *locals* 参数设为 " +"``NULL`` 并将 *level* 设为 0。 当 *name* 参数包含一个点号(即指定了一个包的子模块)时,*fromlist* " +"参数会被设为列表 ``['*']`` 这样返回值将为所指定的模块而不像在其他情况下那样为包含模块的最高层级包。 (不幸的是,这在 *name* " +"实际上是指定一个子包而非子模块时将有一个额外的副作用:在包的 ``__all__`` 变量中指定的子模块会被加载。) " +"返回一个对所导入模块的新引用,或是在导入失败时返回 ``NULL`` 并设置一个异常。 模块导入失败同模块不会留 在 " +":data:`sys.modules` 中。" + +#: ../../c-api/import.rst:28 ../../c-api/import.rst:89 +msgid "This function always uses absolute imports." +msgstr "该函数总是使用绝对路径导入。" + +#: ../../c-api/import.rst:33 +msgid "" +"This function is a deprecated alias of :c:func:`PyImport_ImportModule`." +msgstr "该函数是 :c:func:`PyImport_ImportModule` 的一个被遗弃的别名。" + +#: ../../c-api/import.rst:35 +msgid "" +"This function used to fail immediately when the import lock was held by " +"another thread. In Python 3.3 though, the locking scheme switched to per-" +"module locks for most purposes, so this function's special behaviour isn't " +"needed anymore." +msgstr "" +"在导入锁被另一线程掌控时此函数会立即失败。 但是从 Python 3.3 " +"起,锁方案在大多数情况下都已切换为针对每个模块加锁,所以此函数的特殊行为已无必要。" + +#: ../../c-api/import.rst:46 +msgid "" +"Import a module. This is best described by referring to the built-in Python" +" function :func:`__import__`." +msgstr "导入一个模块。 请参阅内置 Python 函数 :func:`__import__` 获取完善的相关描述。" + +#: ../../c-api/import.rst:49 ../../c-api/import.rst:65 +msgid "" +"The return value is a new reference to the imported module or top-level " +"package, or ``NULL`` with an exception set on failure. Like for " +":func:`__import__`, the return value when a submodule of a package was " +"requested is normally the top-level package, unless a non-empty *fromlist* " +"was given." +msgstr "" +"返回值是一个对所导入模块或最高层级包的新引用,或是在导入失败时则为 ``NULL`` 并设置一个异常。 与 :func:`__import__` " +"类似,当请求一个包的子模块时返回值通常为该最高层级包,除非给出了一个非空的 *fromlist*。" + +#: ../../c-api/import.rst:55 +msgid "" +"Failing imports remove incomplete module objects, like with " +":c:func:`PyImport_ImportModule`." +msgstr "导入失败将移动不完整的模块对象,就像 :c:func:`PyImport_ImportModule` 那样。" + +#: ../../c-api/import.rst:61 +msgid "" +"Import a module. This is best described by referring to the built-in Python" +" function :func:`__import__`, as the standard :func:`__import__` function " +"calls this function directly." +msgstr "" +"导入一个模块。 关于此函数的最佳说明请参考内置 Python 函数 :func:`__import__`,因为标准 :func:`__import__`" +" 函数会直接调用此函数。" + +#: ../../c-api/import.rst:75 +msgid "" +"Similar to :c:func:`PyImport_ImportModuleLevelObject`, but the name is a " +"UTF-8 encoded string instead of a Unicode object." +msgstr "" +"类似于 :c:func:`PyImport_ImportModuleLevelObject`,但其名称为 UTF-8 编码的字符串而不是 Unicode" +" 对象。" + +#: ../../c-api/import.rst:78 +msgid "Negative values for *level* are no longer accepted." +msgstr "不再接受 *level* 为负数值。" + +#: ../../c-api/import.rst:83 +msgid "" +"This is a higher-level interface that calls the current \"import hook " +"function\" (with an explicit *level* of 0, meaning absolute import). It " +"invokes the :func:`__import__` function from the ``__builtins__`` of the " +"current globals. This means that the import is done using whatever import " +"hooks are installed in the current environment." +msgstr "" +"这是一个调用了当前“导入钩子函数”的更高层级接口(显式指定 *level* 为 0,表示绝对导入)。 它将唤起当前全局作用域下 " +"``__builtins__`` 中的 :func:`__import__` 函数。 这意味着将使用当前环境下安装的任何导入钩子来完成导入。" + +#: ../../c-api/import.rst:94 +msgid "" +"Reload a module. Return a new reference to the reloaded module, or ``NULL``" +" with an exception set on failure (the module still exists in this case)." +msgstr "重载一个模块。 返回一个指向被重载模块的新引用,或者在失败时返回 ``NULL`` 并设置一个异常(在此情况下模块仍然会存在)。" + +#: ../../c-api/import.rst:100 +msgid "" +"Return the module object corresponding to a module name. The *name* " +"argument may be of the form ``package.module``. First check the modules " +"dictionary if there's one there, and if not, create a new one and insert it " +"in the modules dictionary. Return ``NULL`` with an exception set on failure." +msgstr "" +"返回对应于某个模块名称的模块对象。 *name* 参数的形式可以为 ``package.module``。 如果存在 modules " +"字典则首先检查该字典,如果找不到,则创建一个新模块并将其插入到 modules 字典。 在失败时返回 ``NULL`` 并设置一个异常。" + +#: ../../c-api/import.rst:107 +msgid "" +"This function does not load or import the module; if the module wasn't " +"already loaded, you will get an empty module object. Use " +":c:func:`PyImport_ImportModule` or one of its variants to import a module. " +"Package structures implied by a dotted name for *name* are not created if " +"not already present." +msgstr "" +"此函数不会加载或导入指定模块;如果模块还未被加载,你将得到一个空的模块对象。 请使用 :c:func:`PyImport_ImportModule` " +"或它的某个变体形式来导入模块。 *name* 使用带点号名称的包结构如果尚不存在则不会被创建。" + +#: ../../c-api/import.rst:117 +msgid "" +"Similar to :c:func:`PyImport_AddModuleObject`, but the name is a UTF-8 " +"encoded string instead of a Unicode object." +msgstr "" +"类似于 :c:func:`PyImport_AddModuleObject`,但其名称为 UTF-8 编码的字符串而不是 Unicode " +"对象。object." + +#: ../../c-api/import.rst:125 +msgid "" +"Given a module name (possibly of the form ``package.module``) and a code " +"object read from a Python bytecode file or obtained from the built-in " +"function :func:`compile`, load the module. Return a new reference to the " +"module object, or ``NULL`` with an exception set if an error occurred. " +"*name* is removed from :attr:`sys.modules` in error cases, even if *name* " +"was already in :attr:`sys.modules` on entry to " +":c:func:`PyImport_ExecCodeModule`. Leaving incompletely initialized modules" +" in :attr:`sys.modules` is dangerous, as imports of such modules have no way" +" to know that the module object is an unknown (and probably damaged with " +"respect to the module author's intents) state." +msgstr "" +"给定一个模块名称(可能为 ``package.module`` 形式)和一个从 Pyhon 字节码文件读取或从内置函数 :func:`compile` " +"获取的代码对象,加载该模块。 返回对该模块对象的新引用,或者如果发生错误则返回 ``NULL`` 并设置一个异常。 在发生错误的情况下 *name* " +"会从 :attr:`sys.modules` 中被移除,即使 *name* 在进入 :c:func:`PyImport_ExecCodeModule` " +"时已存在于 :attr:`sys.modules` 中。 在 :attr:`sys.modules` " +"中保留未完全初始化的模块是危险的,因为导入这样的模块没有办法知道模块对象是否处于一种未知的(对于模块作业的意图来说可能是已损坏的)状态。" + +#: ../../c-api/import.rst:135 +msgid "" +"The module's :attr:`__spec__` and :attr:`__loader__` will be set, if not set" +" already, with the appropriate values. The spec's loader will be set to the" +" module's ``__loader__`` (if set) and to an instance of " +":class:`SourceFileLoader` otherwise." +msgstr "" +"模块的 :attr:`__spec__` 和 :attr:`__loader__` 如果尚未设置的话,将被设置为适当的值。 相应 spec " +"的加载器(如果已设置)将被设为模块的 ``__loader__`` 而在其他情况下设为 :class:`SourceFileLoader` 的实例。" + +#: ../../c-api/import.rst:140 +msgid "" +"The module's :attr:`__file__` attribute will be set to the code object's " +":c:member:`co_filename`. If applicable, :attr:`__cached__` will also be " +"set." +msgstr "" +"模块的 :attr:`__file__` 属性将被设为代码对象的 :c:member:`co_filename`。 " +"如果适用,:attr:`__cached__` 也将被设置。" + +#: ../../c-api/import.rst:144 +msgid "" +"This function will reload the module if it was already imported. See " +":c:func:`PyImport_ReloadModule` for the intended way to reload a module." +msgstr "如果模块已被导入则此函数将重载它。 请参阅 :c:func:`PyImport_ReloadModule` 了解重载模块的预定方式。" + +#: ../../c-api/import.rst:147 +msgid "" +"If *name* points to a dotted name of the form ``package.module``, any " +"package structures not already created will still not be created." +msgstr "如果 *name* 指向一个形式为 ``package.module`` 的带点号的名称,则任何尚未创建的包结构仍然不会被创建。" + +#: ../../c-api/import.rst:150 +msgid "" +"See also :c:func:`PyImport_ExecCodeModuleEx` and " +":c:func:`PyImport_ExecCodeModuleWithPathnames`." +msgstr "" +"另请参阅 :c:func:`PyImport_ExecCodeModuleEx` 和 " +":c:func:`PyImport_ExecCodeModuleWithPathnames`。" + +#: ../../c-api/import.rst:156 +msgid "" +"Like :c:func:`PyImport_ExecCodeModule`, but the :attr:`__file__` attribute " +"of the module object is set to *pathname* if it is non-``NULL``." +msgstr "" +"类似于 :c:func:`PyImport_ExecCodeModule`,但如果 *pathname* 不为 ``NULL`` 则会被设为模块对象的 " +":attr:`__file__` 属性的值。" + +#: ../../c-api/import.rst:159 +msgid "See also :c:func:`PyImport_ExecCodeModuleWithPathnames`." +msgstr "参见 :c:func:`PyImport_ExecCodeModuleWithPathnames`。" + +#: ../../c-api/import.rst:164 +msgid "" +"Like :c:func:`PyImport_ExecCodeModuleEx`, but the :attr:`__cached__` " +"attribute of the module object is set to *cpathname* if it is non-``NULL``." +" Of the three functions, this is the preferred one to use." +msgstr "" +"类似于 :c:func:`PyImport_ExecCodeModuleEx`,但如果 *cpathname* 不为 ``NULL`` " +"则会被设为模块对象的 :attr:`__cached__` 值。 在三个函数中,这是推荐使用的一个。" + +#: ../../c-api/import.rst:173 +msgid "" +"Like :c:func:`PyImport_ExecCodeModuleObject`, but *name*, *pathname* and " +"*cpathname* are UTF-8 encoded strings. Attempts are also made to figure out " +"what the value for *pathname* should be from *cpathname* if the former is " +"set to ``NULL``." +msgstr "" +"类似于 :c:func:`PyImport_ExecCodeModuleObject`,但 *name*, *pathname* 和 " +"*cpathname* 为 UTF-8 编码的字符串。如果 *pathname* 也被设为 ``NULL`` 则还会尝试根据 *cpathname* " +"推断出前者的值。" + +#: ../../c-api/import.rst:179 +msgid "" +"Uses :func:`imp.source_from_cache()` in calculating the source path if only " +"the bytecode path is provided." +msgstr "如果只提供了字节码路径则会使用 :func:`imp.source_from_cache()` 来计算源路径。" + +#: ../../c-api/import.rst:186 +msgid "" +"Return the magic number for Python bytecode files (a.k.a. :file:`.pyc` " +"file). The magic number should be present in the first four bytes of the " +"bytecode file, in little-endian byte order. Returns ``-1`` on error." +msgstr "" +"返回 Python 字节码文件(即 :file:`.pyc` 文件)的魔数。 此魔数应当存在于字节码文件的开头四个字节中,按照小端字节序。 出错时返回 " +"``-1``。" + +#: ../../c-api/import.rst:190 +msgid "Return value of ``-1`` upon failure." +msgstr "失败时返回值 ``-1``。" + +#: ../../c-api/import.rst:196 +msgid "" +"Return the magic tag string for :pep:`3147` format Python bytecode file " +"names. Keep in mind that the value at ``sys.implementation.cache_tag`` is " +"authoritative and should be used instead of this function." +msgstr "" +"针对 :pep:`3147` 格式的 Python 字节码文件名返回魔术标签字符串。 请记住在 " +"``sys.implementation.cache_tag`` 上的值是应当被用来代替此函数的更权威的值。" + +#: ../../c-api/import.rst:204 +msgid "" +"Return the dictionary used for the module administration (a.k.a. " +"``sys.modules``). Note that this is a per-interpreter variable." +msgstr "返回用于模块管理的字典 (即 ``sys.modules``)。 请注意这是针对每个解释器的变量。" + +#: ../../c-api/import.rst:209 +msgid "" +"Return the already imported module with the given name. If the module has " +"not been imported yet then returns ``NULL`` but does not set an error. " +"Returns ``NULL`` and sets an error if the lookup failed." +msgstr "返回给定名称的已导入模块。 如果模块尚未导入则返回 ``NULL`` 但不会设置错误。 如果查找失败则返回 ``NULL`` 并设置错误。" + +#: ../../c-api/import.rst:217 +msgid "" +"Return a finder object for a :data:`sys.path`/:attr:`pkg.__path__` item " +"*path*, possibly by fetching it from the :data:`sys.path_importer_cache` " +"dict. If it wasn't yet cached, traverse :data:`sys.path_hooks` until a hook" +" is found that can handle the path item. Return ``None`` if no hook could; " +"this tells our caller that the :term:`path based finder` could not find a " +"finder for this path item. Cache the result in " +":data:`sys.path_importer_cache`. Return a new reference to the finder " +"object." +msgstr "" +"返回针对一个 :data:`sys.path`/:attr:`pkg.__path__` 中条目 *path* 的查找器对象,可能会通过 " +":data:`sys.path_importer_cache` 字典来获取。 如果它尚未被缓存,则会遍历 :data:`sys.path_hooks` " +"直至找到一个能处理该 path 条目的钩子。 如果没有可用的钩子则返回 ``None``;这将告知调用方 :term:`path based " +"finder` 无法为该 path 条目找到查找器。 结果将缓存到 :data:`sys.path_importer_cache`。 " +"返回一个指向查找器对象的新引用。" + +#: ../../c-api/import.rst:228 +msgid "" +"Load a frozen module named *name*. Return ``1`` for success, ``0`` if the " +"module is not found, and ``-1`` with an exception set if the initialization " +"failed. To access the imported module on a successful load, use " +":c:func:`PyImport_ImportModule`. (Note the misnomer --- this function would" +" reload the module if it was already imported.)" +msgstr "" +"加载名称为 *name* 的已冻结模块。 成功时返回 ``1``,如果未找到模块则返回 ``0``,如果初始化失败则返回 ``-1`` 并设置一个异常。" +" 要在加载成功后访问被导入的模块,请使用 :c:func:`PyImport_ImportModule`。 (请注意此名称有误导性 --- " +"如果模块已被导入此函数将重载它。)" + +#: ../../c-api/import.rst:236 +msgid "The ``__file__`` attribute is no longer set on the module." +msgstr "``__file__`` 属性将不再在模块上设置。" + +#: ../../c-api/import.rst:242 +msgid "" +"Similar to :c:func:`PyImport_ImportFrozenModuleObject`, but the name is a " +"UTF-8 encoded string instead of a Unicode object." +msgstr "" +"类似于 :c:func:`PyImport_ImportFrozenModuleObject`,但其名称为 UTF-8 编码的字符串而不是 " +"Unicode 对象。" + +#: ../../c-api/import.rst:250 +msgid "" +"This is the structure type definition for frozen module descriptors, as " +"generated by the :program:`freeze` utility (see :file:`Tools/freeze/` in the" +" Python source distribution). Its definition, found in " +":file:`Include/import.h`, is::" +msgstr "" +"这是针对已冻结模块描述器的结构类型定义,与由 :program:`freeze` 工具所生成的一致 (请参看 Python 源代码发行版中的 " +":file:`Tools/freeze/`)。 其定义可在 :file:`Include/import.h` 中找到::" + +#: ../../c-api/import.rst:264 +msgid "" +"This pointer is initialized to point to an array of :c:type:`struct _frozen`" +" records, terminated by one whose members are all ``NULL`` or zero. When a " +"frozen module is imported, it is searched in this table. Third-party code " +"could play tricks with this to provide a dynamically created collection of " +"frozen modules." +msgstr "" +"该指针被初始化为指向 :c:type:`struct _frozen` 数组,以 ``NULL`` 或者 0 " +"作为结束标记。当一个冻结模块被导入,首先要在这个表中搜索。第三方库可以以此来提供动态创建的冻结模块集合。" + +#: ../../c-api/import.rst:272 +msgid "" +"Add a single module to the existing table of built-in modules. This is a " +"convenience wrapper around :c:func:`PyImport_ExtendInittab`, returning " +"``-1`` if the table could not be extended. The new module can be imported " +"by the name *name*, and uses the function *initfunc* as the initialization " +"function called on the first attempted import. This should be called before" +" :c:func:`Py_Initialize`." +msgstr "" +"向现有的内置模块表添加一个模块。 这是对 :c:func:`PyImport_ExtendInittab` 的便捷包装,如果无法扩展表则返回 " +"``-1``。 新的模块可使用名称 *name* 来导入,并使用函数 *initfunc* 作为在第一次尝试导入时调用的初始化函数。 此函数应当在 " +":c:func:`Py_Initialize` 之前调用。" + +#: ../../c-api/import.rst:282 +msgid "" +"Structure describing a single entry in the list of built-in modules. Each " +"of these structures gives the name and initialization function for a module " +"built into the interpreter. The name is an ASCII encoded string. Programs " +"which embed Python may use an array of these structures in conjunction with " +":c:func:`PyImport_ExtendInittab` to provide additional built-in modules. The" +" structure is defined in :file:`Include/import.h` as::" +msgstr "" +"描述内置模块列表中的一个条目的结构体。 每个结构体都给出了内置在解释器中的某个模块的名称和初始化函数。 名称是一个 ASCII 编码的字符串。 嵌入了 " +"Python 的程序可以使用该结构体的数组来与 :c:func:`PyImport_ExtendInittab` 相结合以提供额外的内置模块。 " +"该结构体在 :file:`Include/import.h` 中被定义为::" + +#: ../../c-api/import.rst:297 +msgid "" +"Add a collection of modules to the table of built-in modules. The *newtab* " +"array must end with a sentinel entry which contains ``NULL`` for the " +":attr:`name` field; failure to provide the sentinel value can result in a " +"memory fault. Returns ``0`` on success or ``-1`` if insufficient memory " +"could be allocated to extend the internal table. In the event of failure, " +"no modules are added to the internal table. This must be called before " +":c:func:`Py_Initialize`." +msgstr "" +"将内置模块表添加一组模块。 *newtab* 数组必须以一个包含以 ``NULL`` 作为 :attr:`name` " +"字段的岗哨条目结束;未能提供岗哨值会导致内存错误。 成功时返回 ``0`` 或者如果无法分配足够内存来扩展内部表则返回 ``-1``。 " +"当发生失败时,将不会添加模块到内部表。 此函数必须在 :c:func:`Py_Initialize` 之前调用。" + +#: ../../c-api/import.rst:304 +msgid "" +"If Python is initialized multiple times, :c:func:`PyImport_AppendInittab` or" +" :c:func:`PyImport_ExtendInittab` must be called before each Python " +"initialization." +msgstr "" +"如果 Python 要被多次初始化,则 :c:func:`PyImport_AppendInittab` 或 " +":c:func:`PyImport_ExtendInittab` 必须在每次 Python 初始化之前调用。" diff --git a/c-api/index.po b/c-api/index.po new file mode 100644 index 000000000..25b5762f2 --- /dev/null +++ b/c-api/index.po @@ -0,0 +1,37 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) 2001-2022, Python Software Foundation +# This file is distributed under the same license as the Python package. +# FIRST AUTHOR , YEAR. +# +# Translators: +# QR Wang , 2018 +# Shengjing Zhu , 2018 +# +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: Python 3.9\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2022-11-04 14:34+0000\n" +"PO-Revision-Date: 2017-02-16 17:35+0000\n" +"Last-Translator: Shengjing Zhu , 2018\n" +"Language-Team: Chinese (China) (https://www.transifex.com/python-doc/teams/5390/zh_CN/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: zh_CN\n" +"Plural-Forms: nplurals=1; plural=0;\n" + +#: ../../c-api/index.rst:5 +msgid "Python/C API Reference Manual" +msgstr "Python/C API 参考手册" + +#: ../../c-api/index.rst:7 +msgid "" +"This manual documents the API used by C and C++ programmers who want to " +"write extension modules or embed Python. It is a companion to " +":ref:`extending-index`, which describes the general principles of extension " +"writing but does not document the API functions in detail." +msgstr "" +"本手册描述了希望编写扩展模块并将 Python 解释器嵌入其应用程序中的 C 和 C++ 程序员可用的 API。同时可以参阅 " +":ref:`extending-index` ,其中描述了扩展编写的一般原则,但没有详细描述 API 函数。" diff --git a/c-api/init.po b/c-api/init.po new file mode 100644 index 000000000..8bcaf3050 --- /dev/null +++ b/c-api/init.po @@ -0,0 +1,2293 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) 2001-2024, Python Software Foundation +# This file is distributed under the same license as the Python package. +# FIRST AUTHOR , YEAR. +# +# Translators: +# Zombie110year , 2019 +# cdarlint , 2019 +# ppcfish , 2019 +# Edward Ji , 2021 +# Jing Li , 2022 +# 高乐喆 , 2023 +# ProgramRipper, 2023 +# Freesand Leo , 2024 +# Rafael Fontenelle , 2024 +# +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: Python 3.9\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2024-08-30 16:51+0000\n" +"PO-Revision-Date: 2017-02-16 17:36+0000\n" +"Last-Translator: Rafael Fontenelle , 2024\n" +"Language-Team: Chinese (China) (https://app.transifex.com/python-doc/teams/5390/zh_CN/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: zh_CN\n" +"Plural-Forms: nplurals=1; plural=0;\n" + +#: ../../c-api/init.rst:8 +msgid "Initialization, Finalization, and Threads" +msgstr "初始化,最终化和线程" + +#: ../../c-api/init.rst:10 +msgid "See also :ref:`Python Initialization Configuration `." +msgstr "请参阅 :ref:`Python 初始化配置 ` 。" + +#: ../../c-api/init.rst:15 +msgid "Before Python Initialization" +msgstr "在Python初始化之前" + +#: ../../c-api/init.rst:17 +msgid "" +"In an application embedding Python, the :c:func:`Py_Initialize` function " +"must be called before using any other Python/C API functions; with the " +"exception of a few functions and the :ref:`global configuration variables " +"`." +msgstr "" +"在一个植入了 Python 的应用程序中,:c:func:`Py_Initialize` 函数必须在任何其他 Python/C API " +"函数之前被调用;例外的只有个别函数和 :ref:`全局配置变量 `。" + +#: ../../c-api/init.rst:22 +msgid "" +"The following functions can be safely called before Python is initialized:" +msgstr "在初始化Python之前,可以安全地调用以下函数:" + +#: ../../c-api/init.rst:24 +msgid "Configuration functions:" +msgstr "配置函数:" + +#: ../../c-api/init.rst:26 +msgid ":c:func:`PyImport_AppendInittab`" +msgstr ":c:func:`PyImport_AppendInittab`" + +#: ../../c-api/init.rst:27 +msgid ":c:func:`PyImport_ExtendInittab`" +msgstr ":c:func:`PyImport_ExtendInittab`" + +#: ../../c-api/init.rst:28 +msgid ":c:func:`PyInitFrozenExtensions`" +msgstr ":c:func:`PyInitFrozenExtensions`" + +#: ../../c-api/init.rst:29 +msgid ":c:func:`PyMem_SetAllocator`" +msgstr ":c:func:`PyMem_SetAllocator`" + +#: ../../c-api/init.rst:30 +msgid ":c:func:`PyMem_SetupDebugHooks`" +msgstr ":c:func:`PyMem_SetupDebugHooks`" + +#: ../../c-api/init.rst:31 +msgid ":c:func:`PyObject_SetArenaAllocator`" +msgstr ":c:func:`PyObject_SetArenaAllocator`" + +#: ../../c-api/init.rst:32 +msgid ":c:func:`Py_SetPath`" +msgstr ":c:func:`Py_SetPath`" + +#: ../../c-api/init.rst:33 +msgid ":c:func:`Py_SetProgramName`" +msgstr ":c:func:`Py_SetProgramName`" + +#: ../../c-api/init.rst:34 +msgid ":c:func:`Py_SetPythonHome`" +msgstr ":c:func:`Py_SetPythonHome`" + +#: ../../c-api/init.rst:35 +msgid ":c:func:`Py_SetStandardStreamEncoding`" +msgstr ":c:func:`Py_SetStandardStreamEncoding`" + +#: ../../c-api/init.rst:36 +msgid ":c:func:`PySys_AddWarnOption`" +msgstr ":c:func:`PySys_AddWarnOption`" + +#: ../../c-api/init.rst:37 +msgid ":c:func:`PySys_AddXOption`" +msgstr ":c:func:`PySys_AddXOption`" + +#: ../../c-api/init.rst:38 +msgid ":c:func:`PySys_ResetWarnOptions`" +msgstr ":c:func:`PySys_ResetWarnOptions`" + +#: ../../c-api/init.rst:40 +msgid "Informative functions:" +msgstr "信息函数:" + +#: ../../c-api/init.rst:42 +msgid ":c:func:`Py_IsInitialized`" +msgstr ":c:func:`Py_IsInitialized`" + +#: ../../c-api/init.rst:43 +msgid ":c:func:`PyMem_GetAllocator`" +msgstr ":c:func:`PyMem_GetAllocator`" + +#: ../../c-api/init.rst:44 +msgid ":c:func:`PyObject_GetArenaAllocator`" +msgstr ":c:func:`PyObject_GetArenaAllocator`" + +#: ../../c-api/init.rst:45 +msgid ":c:func:`Py_GetBuildInfo`" +msgstr ":c:func:`Py_GetBuildInfo`" + +#: ../../c-api/init.rst:46 +msgid ":c:func:`Py_GetCompiler`" +msgstr ":c:func:`Py_GetCompiler`" + +#: ../../c-api/init.rst:47 +msgid ":c:func:`Py_GetCopyright`" +msgstr ":c:func:`Py_GetCopyright`" + +#: ../../c-api/init.rst:48 +msgid ":c:func:`Py_GetPlatform`" +msgstr ":c:func:`Py_GetPlatform`" + +#: ../../c-api/init.rst:49 +msgid ":c:func:`Py_GetVersion`" +msgstr ":c:func:`Py_GetVersion`" + +#: ../../c-api/init.rst:51 +msgid "Utilities:" +msgstr "工具" + +#: ../../c-api/init.rst:53 +msgid ":c:func:`Py_DecodeLocale`" +msgstr ":c:func:`Py_DecodeLocale`" + +#: ../../c-api/init.rst:55 +msgid "Memory allocators:" +msgstr "内存分配器:" + +#: ../../c-api/init.rst:57 +msgid ":c:func:`PyMem_RawMalloc`" +msgstr ":c:func:`PyMem_RawMalloc`" + +#: ../../c-api/init.rst:58 +msgid ":c:func:`PyMem_RawRealloc`" +msgstr ":c:func:`PyMem_RawRealloc`" + +#: ../../c-api/init.rst:59 +msgid ":c:func:`PyMem_RawCalloc`" +msgstr ":c:func:`PyMem_RawCalloc`" + +#: ../../c-api/init.rst:60 +msgid ":c:func:`PyMem_RawFree`" +msgstr ":c:func:`PyMem_RawFree`" + +#: ../../c-api/init.rst:64 +msgid "" +"The following functions **should not be called** before " +":c:func:`Py_Initialize`: :c:func:`Py_EncodeLocale`, :c:func:`Py_GetPath`, " +":c:func:`Py_GetPrefix`, :c:func:`Py_GetExecPrefix`, " +":c:func:`Py_GetProgramFullPath`, :c:func:`Py_GetPythonHome`, " +":c:func:`Py_GetProgramName` and :c:func:`PyEval_InitThreads`." +msgstr "" +"以下函数 **不应该** 在 :c:func:`Py_Initialize`: :c:func:`Py_EncodeLocale`, " +":c:func:`Py_GetPath`, :c:func:`Py_GetPrefix`, :c:func:`Py_GetExecPrefix`, " +":c:func:`Py_GetProgramFullPath`, :c:func:`Py_GetPythonHome`, " +":c:func:`Py_GetProgramName` 和 :c:func:`PyEval_InitThreads` 前调用。" + +#: ../../c-api/init.rst:74 +msgid "Global configuration variables" +msgstr "全局配置变量" + +#: ../../c-api/init.rst:76 +msgid "" +"Python has variables for the global configuration to control different " +"features and options. By default, these flags are controlled by " +":ref:`command line options `." +msgstr "" +"Python 有负责控制全局配置中不同特性和选项的变量。这些标志默认被 :ref:`命令行选项 `。" + +#: ../../c-api/init.rst:80 +msgid "" +"When a flag is set by an option, the value of the flag is the number of " +"times that the option was set. For example, ``-b`` sets " +":c:data:`Py_BytesWarningFlag` to 1 and ``-bb`` sets " +":c:data:`Py_BytesWarningFlag` to 2." +msgstr "" +"当一个选项设置一个旗标时,该旗标的值将是设置选项的次数。 例如,``-b`` 会将 :c:data:`Py_BytesWarningFlag` 设为 1" +" 而 ``-bb`` 会将 :c:data:`Py_BytesWarningFlag` 设为 2." + +#: ../../c-api/init.rst:86 +msgid "" +"Issue a warning when comparing :class:`bytes` or :class:`bytearray` with " +":class:`str` or :class:`bytes` with :class:`int`. Issue an error if greater" +" or equal to ``2``." +msgstr "" +"当将 :class:`bytes` 或 :class:`bytearray` 与 :class:`str` 比较或者将 :class:`bytes` 与" +" :class:`int` 比较时发出警告。 如果大于等于 ``2`` 则报错。" + +#: ../../c-api/init.rst:90 +msgid "Set by the :option:`-b` option." +msgstr "由 :option:`-b` 选项设置。" + +#: ../../c-api/init.rst:94 +msgid "" +"Turn on parser debugging output (for expert only, depending on compilation " +"options)." +msgstr "开启解析器调试输出(限专家使用,依赖于编译选项)。" + +#: ../../c-api/init.rst:97 +msgid "" +"Set by the :option:`-d` option and the :envvar:`PYTHONDEBUG` environment " +"variable." +msgstr "由 :option:`-d` 选项和 :envvar:`PYTHONDEBUG` 环境变量设置。" + +#: ../../c-api/init.rst:102 +msgid "" +"If set to non-zero, Python won't try to write ``.pyc`` files on the import " +"of source modules." +msgstr "如果设置为非零, Python 不会在导入源代码时尝试写入 ``.pyc`` 文件" + +#: ../../c-api/init.rst:105 +msgid "" +"Set by the :option:`-B` option and the :envvar:`PYTHONDONTWRITEBYTECODE` " +"environment variable." +msgstr "由 :option:`-B` 选项和 :envvar:`PYTHONDONTWRITEBYTECODE` 环境变量设置。" + +#: ../../c-api/init.rst:110 +msgid "" +"Suppress error messages when calculating the module search path in " +":c:func:`Py_GetPath`." +msgstr "当在 :c:func:`Py_GetPath` 中计算模块搜索路径时屏蔽错误消息。" + +#: ../../c-api/init.rst:113 +msgid "" +"Private flag used by ``_freeze_importlib`` and ``frozenmain`` programs." +msgstr "由 ``_freeze_importlib`` 和 ``frozenmain`` 程序使用的私有旗标。" + +#: ../../c-api/init.rst:117 +msgid "" +"Set to ``1`` if the :envvar:`PYTHONHASHSEED` environment variable is set to " +"a non-empty string." +msgstr "如果 :envvar:`PYTHONHASHSEED` 环境变量被设为非空字符串则设为 ``1``。" + +#: ../../c-api/init.rst:120 +msgid "" +"If the flag is non-zero, read the :envvar:`PYTHONHASHSEED` environment " +"variable to initialize the secret hash seed." +msgstr "如果该旗标为非零值,则读取 :envvar:`PYTHONHASHSEED` 环境变量来初始化加密哈希种子。" + +#: ../../c-api/init.rst:125 +msgid "" +"Ignore all :envvar:`PYTHON*` environment variables, e.g. " +":envvar:`PYTHONPATH` and :envvar:`PYTHONHOME`, that might be set." +msgstr "" +"忽略所有 :envvar:`PYTHON*` 环境变量,例如,已设置的 :envvar:`PYTHONPATH` 和 " +":envvar:`PYTHONHOME`。" + +#: ../../c-api/init.rst:128 +msgid "Set by the :option:`-E` and :option:`-I` options." +msgstr "由 :option:`-E` 和 :option:`-I` 选项设置。" + +#: ../../c-api/init.rst:132 +msgid "" +"When a script is passed as first argument or the :option:`-c` option is " +"used, enter interactive mode after executing the script or the command, even" +" when :data:`sys.stdin` does not appear to be a terminal." +msgstr "" +"当将脚本作为第一个参数传入或是使用了 :option:`-c` 选项时,则会在执行该脚本或命令后进入交互模式,即使在 :data:`sys.stdin`" +" 并非一个终端时也是如此。" + +#: ../../c-api/init.rst:136 +msgid "" +"Set by the :option:`-i` option and the :envvar:`PYTHONINSPECT` environment " +"variable." +msgstr "由 :option:`-i` 选项和 :envvar:`PYTHONINSPECT` 环境变量设置。" + +#: ../../c-api/init.rst:141 +msgid "Set by the :option:`-i` option." +msgstr "由 :option:`-i` 选项设置。" + +#: ../../c-api/init.rst:145 +msgid "" +"Run Python in isolated mode. In isolated mode :data:`sys.path` contains " +"neither the script's directory nor the user's site-packages directory." +msgstr "" +"以隔离模式运行 Python. 在隔离模式下 :data:`sys.path` 将不包含脚本的目录或用户的 site-packages 目录。" + +#: ../../c-api/init.rst:148 +msgid "Set by the :option:`-I` option." +msgstr "由 :option:`-I` 选项设置。" + +#: ../../c-api/init.rst:154 +msgid "" +"If the flag is non-zero, use the ``mbcs`` encoding instead of the UTF-8 " +"encoding for the filesystem encoding." +msgstr "" + +#: ../../c-api/init.rst:157 +msgid "" +"Set to ``1`` if the :envvar:`PYTHONLEGACYWINDOWSFSENCODING` environment " +"variable is set to a non-empty string." +msgstr "如果 :envvar:`PYTHONLEGACYWINDOWSFSENCODING` 环境变量被设为非空字符串则设为 ``1``。" + +#: ../../c-api/init.rst:160 +msgid "See :pep:`529` for more details." +msgstr "更多详情请参阅 :pep:`529`。" + +#: ../../c-api/init.rst:162 ../../c-api/init.rst:174 +msgid ":ref:`Availability `: Windows." +msgstr ":ref:`可用性 `: Windows。" + +#: ../../c-api/init.rst:166 +msgid "" +"If the flag is non-zero, use :class:`io.FileIO` instead of " +":class:`WindowsConsoleIO` for :mod:`sys` standard streams." +msgstr "" +"如果该旗标为非零值,则会使用 :class:`io.FileIO` 而不是 :class:`WindowsConsoleIO` 作为 " +":mod:`sys` 的标准流。" + +#: ../../c-api/init.rst:169 +msgid "" +"Set to ``1`` if the :envvar:`PYTHONLEGACYWINDOWSSTDIO` environment variable " +"is set to a non-empty string." +msgstr "如果 :envvar:`PYTHONLEGACYWINDOWSSTDIO` 环境变量被设为非空字符串则设为 ``1``。" + +#: ../../c-api/init.rst:172 +msgid "See :pep:`528` for more details." +msgstr "有关更多详细信息,请参阅 :pep:`528`。" + +#: ../../c-api/init.rst:178 +msgid "" +"Disable the import of the module :mod:`site` and the site-dependent " +"manipulations of :data:`sys.path` that it entails. Also disable these " +"manipulations if :mod:`site` is explicitly imported later (call " +":func:`site.main` if you want them to be triggered)." +msgstr "" +"禁用 :mod:`site` 的导入及其所附带的基于站点对 :data:`sys.path` 的操作。 如果 :mod:`site` " +"会在稍后被显式地导入也会禁用这些操作 (如果你希望触发它们则应调用 :func:`site.main`)。" + +#: ../../c-api/init.rst:183 +msgid "Set by the :option:`-S` option." +msgstr "由 :option:`-S` 选项设置。" + +#: ../../c-api/init.rst:187 +msgid "" +"Don't add the :data:`user site-packages directory ` to " +":data:`sys.path`." +msgstr "" +"不要将 :data:`用户 site-packages 目录 ` 添加到 :data:`sys.path`。" + +#: ../../c-api/init.rst:190 +msgid "" +"Set by the :option:`-s` and :option:`-I` options, and the " +":envvar:`PYTHONNOUSERSITE` environment variable." +msgstr "由 :option:`-s` 和 :option:`-I` 选项以及 :envvar:`PYTHONNOUSERSITE` 环境变量设置。" + +#: ../../c-api/init.rst:195 +msgid "" +"Set by the :option:`-O` option and the :envvar:`PYTHONOPTIMIZE` environment " +"variable." +msgstr "由 :option:`-O` 选项和 :envvar:`PYTHONOPTIMIZE` 环境变量设置。" + +#: ../../c-api/init.rst:200 +msgid "" +"Don't display the copyright and version messages even in interactive mode." +msgstr "即使在交互模式下也不显示版权和版本信息。" + +#: ../../c-api/init.rst:202 +msgid "Set by the :option:`-q` option." +msgstr "由 :option:`-q` 选项设置。" + +#: ../../c-api/init.rst:208 +msgid "Force the stdout and stderr streams to be unbuffered." +msgstr "强制 stdout 和 stderr 流不带缓冲。" + +#: ../../c-api/init.rst:210 +msgid "" +"Set by the :option:`-u` option and the :envvar:`PYTHONUNBUFFERED` " +"environment variable." +msgstr "由 :option:`-u` 选项和 :envvar:`PYTHONUNBUFFERED` 环境变量设置。" + +#: ../../c-api/init.rst:215 +msgid "" +"Print a message each time a module is initialized, showing the place " +"(filename or built-in module) from which it is loaded. If greater or equal " +"to ``2``, print a message for each file that is checked for when searching " +"for a module. Also provides information on module cleanup at exit." +msgstr "" +"每次初始化模块时打印一条消息,显示加载模块的位置(文件名或内置模块)。 如果大于或等于 ``2``,则为搜索模块时检查的每个文件打印一条消息。 " +"此外还会在退出时提供模块清理信息。" + +#: ../../c-api/init.rst:220 +msgid "" +"Set by the :option:`-v` option and the :envvar:`PYTHONVERBOSE` environment " +"variable." +msgstr "由 :option:`-v` 选项和 :envvar:`PYTHONVERBOSE` 环境变量设置。" + +#: ../../c-api/init.rst:225 +msgid "Initializing and finalizing the interpreter" +msgstr "初始化和最终化解释器" + +#: ../../c-api/init.rst:243 +msgid "" +"Initialize the Python interpreter. In an application embedding Python, " +"this should be called before using any other Python/C API functions; see " +":ref:`Before Python Initialization ` for the few exceptions." +msgstr "" +"初始化 Python 解释器。 在嵌入 Python 的应用程序中,它应当在使用任何其他 Python/C API 函数之前被调用;请参阅 " +":ref:`在 Python 初始化之前 ` 了解少数的例外情况。" + +#: ../../c-api/init.rst:247 +msgid "" +"This initializes the table of loaded modules (``sys.modules``), and creates " +"the fundamental modules :mod:`builtins`, :mod:`__main__` and :mod:`sys`. It" +" also initializes the module search path (``sys.path``). It does not set " +"``sys.argv``; use :c:func:`PySys_SetArgvEx` for that. This is a no-op when " +"called for a second time (without calling :c:func:`Py_FinalizeEx` first). " +"There is no return value; it is a fatal error if the initialization fails." +msgstr "" +"这将初始化已加载模块表 (``sys.modules``),并创建基本模块 :mod:`builtins`、:mod:`__main__` 和 " +":mod:`sys`。 它还会初始化模块搜索路径 (``sys.path``)。 它不会设置 ``sys.argv``;如有需要请使用 " +":c:func:`PySys_SetArgvEx`。 当第二次调用时 (在未事先调用 :c:func:`Py_FinalizeEx` 的情况下) " +"将不会执行任何操作。 它没有返回值;如果初始化失败则会发生致命错误。" + +#: ../../c-api/init.rst:256 +msgid "" +"On Windows, changes the console mode from ``O_TEXT`` to ``O_BINARY``, which " +"will also affect non-Python uses of the console using the C Runtime." +msgstr "" +"在 Windows 上,将控制台模式从 ``O_TEXT`` 改为 ``O_BINARY``,这还将影响使用 C 运行时的非 Python " +"的控制台使用。" + +#: ../../c-api/init.rst:262 +msgid "" +"This function works like :c:func:`Py_Initialize` if *initsigs* is ``1``. If " +"*initsigs* is ``0``, it skips initialization registration of signal " +"handlers, which might be useful when Python is embedded." +msgstr "" +"如果 *initsigs* 为 ``1`` 则该函数的工作方式与 :c:func:`Py_Initialize` 类似。 如果 *initsigs* 为" +" ``0``,它将跳过信号处理器的初始化注册,这在嵌入 Python 时可能会很有用处。" + +#: ../../c-api/init.rst:269 +msgid "" +"Return true (nonzero) when the Python interpreter has been initialized, " +"false (zero) if not. After :c:func:`Py_FinalizeEx` is called, this returns " +"false until :c:func:`Py_Initialize` is called again." +msgstr "" +"如果 Python 解释器已初始化,则返回真值(非零);否则返回假值(零)。 在调用 :c:func:`Py_FinalizeEx` " +"之后,此函数将返回假值直到 :c:func:`Py_Initialize` 再次被调用。" + +#: ../../c-api/init.rst:276 +msgid "" +"Undo all initializations made by :c:func:`Py_Initialize` and subsequent use " +"of Python/C API functions, and destroy all sub-interpreters (see " +":c:func:`Py_NewInterpreter` below) that were created and not yet destroyed " +"since the last call to :c:func:`Py_Initialize`. Ideally, this frees all " +"memory allocated by the Python interpreter. This is a no-op when called for" +" a second time (without calling :c:func:`Py_Initialize` again first). " +"Normally the return value is ``0``. If there were errors during " +"finalization (flushing buffered data), ``-1`` is returned." +msgstr "" +"撤销 :c:func:`Py_Initialize` 所做的所有初始化操作和后续对 Python/C API 函数的使用,并销毁自上次调用 " +":c:func:`Py_Initialize` 以来创建但尚未销毁的所有子解释器(参见下文 :c:func:`Py_NewInterpreter` " +"一节)。 在理想情况下,这会释放 Python 解释器分配的所有内存。 当第二次调用时(在未再次调用 :c:func:`Py_Initialize` " +"的情况下),这将不执行任何操作。 正常情况下返回值是 ``0``。 如果在最终化(刷新缓冲数据)过程中出现错误,则返回 ``-1``。" + +#: ../../c-api/init.rst:285 +msgid "" +"This function is provided for a number of reasons. An embedding application" +" might want to restart Python without having to restart the application " +"itself. An application that has loaded the Python interpreter from a " +"dynamically loadable library (or DLL) might want to free all memory " +"allocated by Python before unloading the DLL. During a hunt for memory leaks" +" in an application a developer might want to free all memory allocated by " +"Python before exiting from the application." +msgstr "" +"提供此函数的原因有很多。嵌入应用程序可能希望重新启动Python,而不必重新启动应用程序本身。从动态可加载库(或DLL)加载Python解释器的应用程序可能希望在卸载DLL之前释放Python分配的所有内存。在搜索应用程序内存泄漏的过程中,开发人员可能希望在退出应用程序之前释放Python分配的所有内存。" + +#: ../../c-api/init.rst:293 +msgid "" +"**Bugs and caveats:** The destruction of modules and objects in modules is " +"done in random order; this may cause destructors (:meth:`__del__` methods) " +"to fail when they depend on other objects (even functions) or modules. " +"Dynamically loaded extension modules loaded by Python are not unloaded. " +"Small amounts of memory allocated by the Python interpreter may not be freed" +" (if you find a leak, please report it). Memory tied up in circular " +"references between objects is not freed. Some memory allocated by extension" +" modules may not be freed. Some extensions may not work properly if their " +"initialization routine is called more than once; this can happen if an " +"application calls :c:func:`Py_Initialize` and :c:func:`Py_FinalizeEx` more " +"than once." +msgstr "" + +#: ../../c-api/init.rst:304 +msgid "" +"Raises an :ref:`auditing event ` " +"``cpython._PySys_ClearAuditHooks`` with no arguments." +msgstr "引发一个不带参数的 :ref:`审计事件 ` ``cpython._PySys_ClearAuditHooks``。" + +#: ../../c-api/init.rst:310 +msgid "" +"This is a backwards-compatible version of :c:func:`Py_FinalizeEx` that " +"disregards the return value." +msgstr "这是一个不考虑返回值的 :c:func:`Py_FinalizeEx` 的向下兼容版本。" + +#: ../../c-api/init.rst:315 +msgid "Process-wide parameters" +msgstr "进程级参数" + +#: ../../c-api/init.rst:325 +msgid "" +"This function should be called before :c:func:`Py_Initialize`, if it is " +"called at all. It specifies which encoding and error handling to use with " +"standard IO, with the same meanings as in :func:`str.encode`." +msgstr "" +"如果要调用该函数,应当在 :c:func:`Py_Initialize` 之前调用。 它指定了标准 IO 使用的编码格式和错误处理方式,其含义与 " +":func:`str.encode` 中的相同。" + +#: ../../c-api/init.rst:329 +msgid "" +"It overrides :envvar:`PYTHONIOENCODING` values, and allows embedding code to" +" control IO encoding when the environment variable does not work." +msgstr "它覆盖了 :envvar:`PYTHONIOENCODING` 的值,并允许嵌入代码以便在环境变量不起作用时控制 IO 编码格式。" + +#: ../../c-api/init.rst:332 +msgid "" +"*encoding* and/or *errors* may be ``NULL`` to use :envvar:`PYTHONIOENCODING`" +" and/or default values (depending on other settings)." +msgstr "" +"*encoding* 和/或 *errors* 可以为 ``NULL`` 以使用 :envvar:`PYTHONIOENCODING` " +"和/或默认值(取决于其他设置)。" + +#: ../../c-api/init.rst:336 +msgid "" +"Note that :data:`sys.stderr` always uses the \"backslashreplace\" error " +"handler, regardless of this (or any other) setting." +msgstr "请注意无论是否有此设置(或任何其他设置),:data:`sys.stderr` 都会使用 \"backslashreplace\" 错误处理器。" + +#: ../../c-api/init.rst:339 +msgid "" +"If :c:func:`Py_FinalizeEx` is called, this function will need to be called " +"again in order to affect subsequent calls to :c:func:`Py_Initialize`." +msgstr "" +"如果调用了 :c:func:`Py_FinalizeEx`,则需要再次调用该函数以便影响对 :c:func:`Py_Initialize` 的后续调用。" + +#: ../../c-api/init.rst:342 +msgid "" +"Returns ``0`` if successful, a nonzero value on error (e.g. calling after " +"the interpreter has already been initialized)." +msgstr "成功时返回 ``0``,出错时返回非零值(例如在解释器已被初始化后再调用)。" + +#: ../../c-api/init.rst:355 +msgid "" +"This function should be called before :c:func:`Py_Initialize` is called for " +"the first time, if it is called at all. It tells the interpreter the value " +"of the ``argv[0]`` argument to the :c:func:`main` function of the program " +"(converted to wide characters). This is used by :c:func:`Py_GetPath` and " +"some other functions below to find the Python run-time libraries relative to" +" the interpreter executable. The default value is ``'python'``. The " +"argument should point to a zero-terminated wide character string in static " +"storage whose contents will not change for the duration of the program's " +"execution. No code in the Python interpreter will change the contents of " +"this storage." +msgstr "" +"如果要调用该函数,应当在首次调用 :c:func:`Py_Initialize` 之前调用它。 它将告诉解释器程序的 :c:func:`main` " +"函数的 ``argv[0]`` 参数的值(转换为宽字符)。 :c:func:`Py_GetPath` " +"和下面的某些其他函数会使用它在相对于解释器的位置上查找可执行文件的 Python 运行时库。 默认值是 ``'python'``。 " +"参数应当指向静态存储中的一个以零值结束的宽字符串,其内容在程序执行期间不会发生改变。 Python 解释器中的任何代码都不会改变该存储的内容。" + +#: ../../c-api/init.rst:366 ../../c-api/init.rst:480 ../../c-api/init.rst:586 +#: ../../c-api/init.rst:613 ../../c-api/init.rst:630 +msgid "" +"Use :c:func:`Py_DecodeLocale` to decode a bytes string to get a " +":c:type:`wchar_*` string." +msgstr "" + +#: ../../c-api/init.rst:374 +msgid "" +"Return the program name set with :c:func:`Py_SetProgramName`, or the " +"default. The returned string points into static storage; the caller should " +"not modify its value." +msgstr "" +"返回用 :c:func:`Py_SetProgramName` 设置的程序名称,或默认的名称。 返回的字符串指向静态存储;调用者不应修改其值。" + +#: ../../c-api/init.rst:381 +msgid "" +"Return the *prefix* for installed platform-independent files. This is " +"derived through a number of complicated rules from the program name set with" +" :c:func:`Py_SetProgramName` and some environment variables; for example, if" +" the program name is ``'/usr/local/bin/python'``, the prefix is " +"``'/usr/local'``. The returned string points into static storage; the caller" +" should not modify its value. This corresponds to the :makevar:`prefix` " +"variable in the top-level :file:`Makefile` and the ``--prefix`` argument to " +"the :program:`configure` script at build time. The value is available to " +"Python code as ``sys.prefix``. It is only useful on Unix. See also the next" +" function." +msgstr "" + +#: ../../c-api/init.rst:394 +msgid "" +"Return the *exec-prefix* for installed platform-*dependent* files. This is " +"derived through a number of complicated rules from the program name set with" +" :c:func:`Py_SetProgramName` and some environment variables; for example, if" +" the program name is ``'/usr/local/bin/python'``, the exec-prefix is " +"``'/usr/local'``. The returned string points into static storage; the " +"caller should not modify its value. This corresponds to the " +":makevar:`exec_prefix` variable in the top-level :file:`Makefile` and the " +"``--exec-prefix`` argument to the :program:`configure` script at build " +"time. The value is available to Python code as ``sys.exec_prefix``. It is " +"only useful on Unix." +msgstr "" +"返回针对已安装的 *依赖于* 平台文件的 *exec-prefix*。 这是通过基于使用 :c:func:`Py_SetProgramName` " +"设置的程序名称和某些环境变量所派生的一系列复杂规则获得的;举例来说,如果程序名称为 ``'/usr/local/bin/python'``,则 " +"exec-prefix 为 ``'/usr/local'``。 返回的字符串将指向静态存储;调用方不应修改其值。 这对应于最高层级 " +":file:`Makefile` 中的 :makevar:`exec_prefix` 变量以及在编译时传给 :program:`configure` " +"脚本的 ``--exec-prefix`` 参数。 该值将以 ``sys.exec_prefix`` 的名称供 Python 代码使用。 它仅适用于 " +"Unix。" + +#: ../../c-api/init.rst:404 +msgid "" +"Background: The exec-prefix differs from the prefix when platform dependent " +"files (such as executables and shared libraries) are installed in a " +"different directory tree. In a typical installation, platform dependent " +"files may be installed in the :file:`/usr/local/plat` subtree while platform" +" independent may be installed in :file:`/usr/local`." +msgstr "" +"背景:当依赖于平台的文件(如可执行文件和共享库)是安装于不同的目录树中的时候 exec-prefix 将会不同于 prefix。 " +"在典型的安装中,依赖于平台的文件可能安装于 the :file:`/usr/local/plat` 子目录树而独立于平台的文件可能安装于 " +":file:`/usr/local`。" + +#: ../../c-api/init.rst:410 +msgid "" +"Generally speaking, a platform is a combination of hardware and software " +"families, e.g. Sparc machines running the Solaris 2.x operating system are " +"considered the same platform, but Intel machines running Solaris 2.x are " +"another platform, and Intel machines running Linux are yet another platform." +" Different major revisions of the same operating system generally also form" +" different platforms. Non-Unix operating systems are a different story; the" +" installation strategies on those systems are so different that the prefix " +"and exec-prefix are meaningless, and set to the empty string. Note that " +"compiled Python bytecode files are platform independent (but not independent" +" from the Python version by which they were compiled!)." +msgstr "" +"总而言之,平台是一组硬件和软件资源的组合,例如所有运行 Solaris 2.x 操作系统的 Sparc 机器会被视为相同平台,但运行 Solaris " +"2.x 的 Intel 机器是另一种平台,而运行 Linux 的 Intel 机器又是另一种平台。 相同操作系统的不同主要发布版通常也会构成不同的平台。" +" 非 Unix 操作系统的情况又有所不同;这类系统上的安装策略差别巨大因此 prefix 和 exec-prefix 是没有意义的,并将被设为空字符串。" +" 请注意已编译的 Python 字节码是独立于平台的(但并不独立于它们编译时所使用的 Python 版本!)" + +#: ../../c-api/init.rst:421 +msgid "" +"System administrators will know how to configure the :program:`mount` or " +":program:`automount` programs to share :file:`/usr/local` between platforms " +"while having :file:`/usr/local/plat` be a different filesystem for each " +"platform." +msgstr "" +"系统管理员知道如何配置 :program:`mount` 或 :program:`automount` 程序以在平台间共享 " +":file:`/usr/local` 而让 :file:`/usr/local/plat` 成为针对不同平台的不同文件系统。" + +#: ../../c-api/init.rst:433 +msgid "" +"Return the full program name of the Python executable; this is computed as " +"a side-effect of deriving the default module search path from the program " +"name (set by :c:func:`Py_SetProgramName` above). The returned string points " +"into static storage; the caller should not modify its value. The value is " +"available to Python code as ``sys.executable``." +msgstr "" +"返回 Python 可执行文件的完整程序名称;这是作为根据程序名称(由上述 :c:func:`Py_SetProgramName` " +"设置)派生默认模块搜索路径的附带影响计算得出的。 返回的字符串将指向静态存储;调用方不应修改其值。 该值将以 ``sys.executable`` " +"的名称供 Python 代码使用。" + +#: ../../c-api/init.rst:447 +msgid "" +"Return the default module search path; this is computed from the program " +"name (set by :c:func:`Py_SetProgramName` above) and some environment " +"variables. The returned string consists of a series of directory names " +"separated by a platform dependent delimiter character. The delimiter " +"character is ``':'`` on Unix and macOS, ``';'`` on Windows. The returned " +"string points into static storage; the caller should not modify its value. " +"The list :data:`sys.path` is initialized with this value on interpreter " +"startup; it can be (and usually is) modified later to change the search path" +" for loading modules." +msgstr "" +"返回默认模块搜索路径;这是根据程序名称(由上述 :c:func:`Py_SetProgramName` 设置)和某些环境变量计算得出的。 " +"返回的字符串由一系列由依赖于平台的分隔符分开的目录名称组成。 分隔符在 Unix 和 macOS 上为 ``':'`` 而在 Windows 上为 " +"``';'``。 返回的字符串将指向静态存储;调用方不应修改其值。 列表 :data:`sys.path` " +"将在解释器启动时使用该值来初始化;它可以在随后被修改(并且通常都会被修改)以变更加载模块的搜索路径。" + +#: ../../c-api/init.rst:467 +msgid "" +"Set the default module search path. If this function is called before " +":c:func:`Py_Initialize`, then :c:func:`Py_GetPath` won't attempt to compute " +"a default search path but uses the one provided instead. This is useful if " +"Python is embedded by an application that has full knowledge of the location" +" of all modules. The path components should be separated by the platform " +"dependent delimiter character, which is ``':'`` on Unix and macOS, ``';'`` " +"on Windows." +msgstr "" +"设置默认的模块搜索路径。 如果此函数在 :c:func:`Py_Initialize` 之前被调用,则 :c:func:`Py_GetPath` " +"将不会尝试计算默认的搜索路径而是改用已提供的路径。 这适用于由一个完全知晓所有模块的位置的应用程序来嵌入 Python 的情况。 " +"路径组件应当由平台专属的分隔符来分隔,在 Unix 和 macOS 上是 ``':'`` 而在 Windows 上则是 ``';'``。" + +#: ../../c-api/init.rst:475 +msgid "" +"This also causes :data:`sys.executable` to be set to the program full path " +"(see :c:func:`Py_GetProgramFullPath`) and for :data:`sys.prefix` and " +":data:`sys.exec_prefix` to be empty. It is up to the caller to modify these" +" if required after calling :c:func:`Py_Initialize`." +msgstr "" +"这也将导致 :data:`sys.executable` 被设为程序的完整路径 (参见 :c:func:`Py_GetProgramFullPath`)" +" 而 :data:`sys.prefix` 和 :data:`sys.exec_prefix` 变为空值。 如果在调用 " +":c:func:`Py_Initialize` 之后有需要则应由调用方来修改它们。" + +#: ../../c-api/init.rst:483 +msgid "" +"The path argument is copied internally, so the caller may free it after the " +"call completes." +msgstr "路径参数会在内部被复制,使调用方可以在调用结束后释放它。" + +#: ../../c-api/init.rst:486 +msgid "" +"The program full path is now used for :data:`sys.executable`, instead of the" +" program name." +msgstr "现在 :data:`sys.executable` 将使用程序的完整路径,而不是程序文件名。" + +#: ../../c-api/init.rst:493 +msgid "" +"Return the version of this Python interpreter. This is a string that looks " +"something like ::" +msgstr "返回 Python 解释器的版本。 这将为如下形式的字符串 ::" + +#: ../../c-api/init.rst:500 +msgid "" +"The first word (up to the first space character) is the current Python " +"version; the first characters are the major and minor version separated by a" +" period. The returned string points into static storage; the caller should " +"not modify its value. The value is available to Python code as " +":data:`sys.version`." +msgstr "" +"第一个单词(到第一个空格符为止)是当前的 Python 版本;前面的字符是以点号分隔的主要和次要版本号。 " +"返回的字符串将指向静态存储;调用方不应修改其值。 该值将以 :data:`sys.version` 的名称供 Python 代码使用。" + +#: ../../c-api/init.rst:510 +msgid "" +"Return the platform identifier for the current platform. On Unix, this is " +"formed from the \"official\" name of the operating system, converted to " +"lower case, followed by the major revision number; e.g., for Solaris 2.x, " +"which is also known as SunOS 5.x, the value is ``'sunos5'``. On macOS, it " +"is ``'darwin'``. On Windows, it is ``'win'``. The returned string points " +"into static storage; the caller should not modify its value. The value is " +"available to Python code as ``sys.platform``." +msgstr "" +"返回当前平台的平台标识符。 在 Unix 上,这将以操作系统的“官方”名称为基础,转换为小写形式,再加上主版本号;例如,对于 Solaris " +"2.x,或称 SunOS 5.x,该值将为 ``'sunos5'``。 在 macOS 上,它将为 ``'darwin'``。 在 Windows " +"上它将为 ``'win'``。 返回的字符串指向静态存储;调用方不应修改其值。 Python 代码可通过 ``sys.platform`` 获取该值。" + +#: ../../c-api/init.rst:521 +msgid "" +"Return the official copyright string for the current Python version, for " +"example" +msgstr "返回当前 Python 版本的官方版权字符串,例如" + +#: ../../c-api/init.rst:523 +msgid "``'Copyright 1991-1995 Stichting Mathematisch Centrum, Amsterdam'``" +msgstr "``'Copyright 1991-1995 Stichting Mathematisch Centrum, Amsterdam'``" + +#: ../../c-api/init.rst:527 +msgid "" +"The returned string points into static storage; the caller should not modify" +" its value. The value is available to Python code as ``sys.copyright``." +msgstr "返回的字符串指向静态存储;调用者不应修改其值。 Python 代码可通过 ``sys.copyright`` 获取该值。" + +#: ../../c-api/init.rst:533 +msgid "" +"Return an indication of the compiler used to build the current Python " +"version, in square brackets, for example::" +msgstr "返回用于编译当前 Python 版本的编译器指令,为带方括号的形式,例如::" + +#: ../../c-api/init.rst:540 ../../c-api/init.rst:554 +msgid "" +"The returned string points into static storage; the caller should not modify" +" its value. The value is available to Python code as part of the variable " +"``sys.version``." +msgstr "返回的字符串指向静态存储;调用者不应修改其值。 Python 代码可以从变量 ``sys.version`` 中获取该值。" + +#: ../../c-api/init.rst:547 +msgid "" +"Return information about the sequence number and build date and time of the" +" current Python interpreter instance, for example ::" +msgstr "返回有关当前Python解释器实例的序列号和构建日期和时间的信息,例如:" + +#: ../../c-api/init.rst:566 +msgid "" +"Set :data:`sys.argv` based on *argc* and *argv*. These parameters are " +"similar to those passed to the program's :c:func:`main` function with the " +"difference that the first entry should refer to the script file to be " +"executed rather than the executable hosting the Python interpreter. If " +"there isn't a script that will be run, the first entry in *argv* can be an " +"empty string. If this function fails to initialize :data:`sys.argv`, a " +"fatal condition is signalled using :c:func:`Py_FatalError`." +msgstr "" +"根据 *argc* 和 *argv* 设置 :data:`sys.argv`。 这些形参与传给程序的 :c:func:`main` " +"函数的类似,区别在于第一项应当指向要执行的脚本文件而不是 Python 解释器对应的可执行文件。 如果没有要运行的脚本,则 *argv* " +"中的第一项可以为空字符串。 如果此函数无法初始化 :data:`sys.argv`,则将使用 :c:func:`Py_FatalError` " +"发出严重情况信号。" + +#: ../../c-api/init.rst:574 +msgid "" +"If *updatepath* is zero, this is all the function does. If *updatepath* is " +"non-zero, the function also modifies :data:`sys.path` according to the " +"following algorithm:" +msgstr "" +"如果 *updatepath* 为零,此函数将完成操作。 如果 *updatepath* 为非零值,则此函数还将根据以下算法修改 " +":data:`sys.path`:" + +#: ../../c-api/init.rst:578 +msgid "" +"If the name of an existing script is passed in ``argv[0]``, the absolute " +"path of the directory where the script is located is prepended to " +":data:`sys.path`." +msgstr "如果在 ``argv[0]`` 中传入一个现有脚本,则脚本所在目录的绝对路径将被添加到 :data:`sys.path` 的开头。" + +#: ../../c-api/init.rst:581 +msgid "" +"Otherwise (that is, if *argc* is ``0`` or ``argv[0]`` doesn't point to an " +"existing file name), an empty string is prepended to :data:`sys.path`, which" +" is the same as prepending the current working directory (``\".\"``)." +msgstr "" +"在其他情况下 (也就是说,如果 *argc* 为 ``0`` 或 ``argv[0]`` 未指向现有文件名),则将在 :data:`sys.path` " +"的开头添加一个空字符串,这等价于添加当前工作目录 (``\".\"``)。" + +#: ../../c-api/init.rst:590 +msgid "" +"It is recommended that applications embedding the Python interpreter for " +"purposes other than executing a single script pass ``0`` as *updatepath*, " +"and update :data:`sys.path` themselves if desired. See `CVE-2008-5983 " +"`_." +msgstr "" +"建议在出于执行单个脚本以外的目的嵌入 Python 解释器的应用程序传入 ``0`` 作为 *updatepath*,并在需要时更新 " +":data:`sys.path` 本身。 参见 `CVE-2008-5983 `_。" + +#: ../../c-api/init.rst:595 +msgid "" +"On versions before 3.1.3, you can achieve the same effect by manually " +"popping the first :data:`sys.path` element after having called " +":c:func:`PySys_SetArgv`, for example using::" +msgstr "" +"在 3.1.3 之前的版本中,你可以通过在调用 :c:func:`PySys_SetArgv` 之后手动弹出第一个 :data:`sys.path` " +"元素,例如使用::" + +#: ../../c-api/init.rst:609 +msgid "" +"This function works like :c:func:`PySys_SetArgvEx` with *updatepath* set to " +"``1`` unless the :program:`python` interpreter was started with the " +":option:`-I`." +msgstr "" +"此函数相当于 :c:func:`PySys_SetArgvEx` 设置了 *updatepath* 为 ``1`` 除非 " +":program:`python` 解释器启动时附带了 :option:`-I`。" + +#: ../../c-api/init.rst:616 +msgid "The *updatepath* value depends on :option:`-I`." +msgstr "*updatepath* 值依赖于 :option:`-I`。" + +#: ../../c-api/init.rst:621 +msgid "" +"Set the default \"home\" directory, that is, the location of the standard " +"Python libraries. See :envvar:`PYTHONHOME` for the meaning of the argument " +"string." +msgstr "" +"设置默认的 \"home\" 目录,也就是标准 Python 库所在的位置。 请参阅 :envvar:`PYTHONHOME` 了解该参数字符串的含义。" + +#: ../../c-api/init.rst:625 +msgid "" +"The argument should point to a zero-terminated character string in static " +"storage whose contents will not change for the duration of the program's " +"execution. No code in the Python interpreter will change the contents of " +"this storage." +msgstr "此参数应当指向静态存储中一个以零值结束的字符串,其内容在程序执行期间将保持不变。 Python 解释器中的代码绝不会修改此存储中的内容。" + +#: ../../c-api/init.rst:636 +msgid "" +"Return the default \"home\", that is, the value set by a previous call to " +":c:func:`Py_SetPythonHome`, or the value of the :envvar:`PYTHONHOME` " +"environment variable if it is set." +msgstr "" +"返回默认的 \"home\",就是由之前对 :c:func:`Py_SetPythonHome` 的调用所设置的值,或者在设置了 " +":envvar:`PYTHONHOME` 环境变量的情况下该环境变量的值。" + +#: ../../c-api/init.rst:644 +msgid "Thread State and the Global Interpreter Lock" +msgstr "线程状态和全局解释器锁" + +#: ../../c-api/init.rst:651 +msgid "" +"The Python interpreter is not fully thread-safe. In order to support multi-" +"threaded Python programs, there's a global lock, called the :term:`global " +"interpreter lock` or :term:`GIL`, that must be held by the current thread " +"before it can safely access Python objects. Without the lock, even the " +"simplest operations could cause problems in a multi-threaded program: for " +"example, when two threads simultaneously increment the reference count of " +"the same object, the reference count could end up being incremented only " +"once instead of twice." +msgstr "" +"Python 解释器不是完全线程安全的。 为了支持多线程的 Python 程序,设置了一个全局锁,称为 :term:`global " +"interpreter lock` 或 :term:`GIL`,当前线程必须在持有它之后才能安全地访问 Python 对象。 " +"如果没有这个锁,即使最简单的操作也可能在多线程的程序中导致问题:例如,当两个线程同时增加相同对象的引用计数时,引用计数可能最终只增加了一次而不是两次。" + +#: ../../c-api/init.rst:661 +msgid "" +"Therefore, the rule exists that only the thread that has acquired the " +":term:`GIL` may operate on Python objects or call Python/C API functions. In" +" order to emulate concurrency of execution, the interpreter regularly tries " +"to switch threads (see :func:`sys.setswitchinterval`). The lock is also " +"released around potentially blocking I/O operations like reading or writing " +"a file, so that other Python threads can run in the meantime." +msgstr "" +"因此,规则要求只有获得 :term:`GIL` 的线程才能在 Python对象上执行操作或调用 Python/C API 函数。 " +"为了模拟并发执行,解释器会定期尝试切换线程 (参见 :func:`sys.setswitchinterval`)。 锁也会在读写文件等可能造成阻塞的 " +"I/O 操作时释放,以便其他 Python 线程可以同时运行。" + +#: ../../c-api/init.rst:672 +msgid "" +"The Python interpreter keeps some thread-specific bookkeeping information " +"inside a data structure called :c:type:`PyThreadState`. There's also one " +"global variable pointing to the current :c:type:`PyThreadState`: it can be " +"retrieved using :c:func:`PyThreadState_Get`." +msgstr "" +"Python 解释器会在一个名为 :c:type:`PyThreadState` 的数据结构体中保存一些线程专属的记录信息。 还有一个全局变量指向当前的" +" :c:type:`PyThreadState`: 它可以使用 :c:func:`PyThreadState_Get` 来获取。" + +#: ../../c-api/init.rst:678 +msgid "Releasing the GIL from extension code" +msgstr "从扩展扩展代码中释放 GIL" + +#: ../../c-api/init.rst:680 +msgid "" +"Most extension code manipulating the :term:`GIL` has the following simple " +"structure::" +msgstr "大多数操作 :term:`GIL` 的扩展代码具有以下简单结构:" + +#: ../../c-api/init.rst:689 +msgid "This is so common that a pair of macros exists to simplify it::" +msgstr "这是如此常用因此增加了一对宏来简化它::" + +#: ../../c-api/init.rst:699 +msgid "" +"The :c:macro:`Py_BEGIN_ALLOW_THREADS` macro opens a new block and declares a" +" hidden local variable; the :c:macro:`Py_END_ALLOW_THREADS` macro closes the" +" block." +msgstr "" +":c:macro:`Py_BEGIN_ALLOW_THREADS` " +"宏将打开一个新块并声明一个隐藏的局部变量;:c:macro:`Py_END_ALLOW_THREADS` 宏将关闭这个块。" + +#: ../../c-api/init.rst:703 +msgid "The block above expands to the following code::" +msgstr "上面的代码块可扩展为下面的代码::" + +#: ../../c-api/init.rst:715 +msgid "" +"Here is how these functions work: the global interpreter lock is used to " +"protect the pointer to the current thread state. When releasing the lock " +"and saving the thread state, the current thread state pointer must be " +"retrieved before the lock is released (since another thread could " +"immediately acquire the lock and store its own thread state in the global " +"variable). Conversely, when acquiring the lock and restoring the thread " +"state, the lock must be acquired before storing the thread state pointer." +msgstr "" +"这些函数的工作原理如下:全局解释器锁被用来保护指向当前线程状态的指针。 当释放锁并保存线程状态时,必须在锁被释放之前获取当前线程状态指针 " +"(因为另一个线程可以立即获取锁并将自己的线程状态存储到全局变量中)。 相应地,当获取锁并恢复线程状态时,必须在存储线程状态指针之前先获取锁。" + +#: ../../c-api/init.rst:724 +msgid "" +"Calling system I/O functions is the most common use case for releasing the " +"GIL, but it can also be useful before calling long-running computations " +"which don't need access to Python objects, such as compression or " +"cryptographic functions operating over memory buffers. For example, the " +"standard :mod:`zlib` and :mod:`hashlib` modules release the GIL when " +"compressing or hashing data." +msgstr "" +"调用系统 I/O 函数是释放 GIL 的最常见用例,但它在调用不需要访问 Python " +"对象的长期运行计算,比如针对内存缓冲区进行操作的压缩或加密函数之前也很有用。 举例来说,在对数据执行压缩或哈希操作时标准 :mod:`zlib` 和 " +":mod:`hashlib` 模块就会释放 GIL。" + +#: ../../c-api/init.rst:735 +msgid "Non-Python created threads" +msgstr "非Python创建的线程" + +#: ../../c-api/init.rst:737 +msgid "" +"When threads are created using the dedicated Python APIs (such as the " +":mod:`threading` module), a thread state is automatically associated to them" +" and the code showed above is therefore correct. However, when threads are " +"created from C (for example by a third-party library with its own thread " +"management), they don't hold the GIL, nor is there a thread state structure " +"for them." +msgstr "" +"当使用专门的 Python API(如 :mod:`threading` 模块)创建线程时,会自动关联一个线程状态因而上面显示的代码是正确的。 " +"但是,如果线程是用 C 创建的(例如由具有自己的线程管理的第三方库创建),它们就不持有 GIL 也没有对应的线程状态结构体。" + +#: ../../c-api/init.rst:744 +msgid "" +"If you need to call Python code from these threads (often this will be part " +"of a callback API provided by the aforementioned third-party library), you " +"must first register these threads with the interpreter by creating a thread " +"state data structure, then acquiring the GIL, and finally storing their " +"thread state pointer, before you can start using the Python/C API. When you" +" are done, you should reset the thread state pointer, release the GIL, and " +"finally free the thread state data structure." +msgstr "" +"如果你需要从这些线程调用 Python 代码(这通常会是上述第三方库所提供的回调 API " +"的一部分),你必须首先通过创建线程状态数据结构体向解释器注册这些线程,然后获取 GIL,最后存储它们的线程状态指针,这样你才能开始使用 Python/C" +" API。 完成以上步骤后,你应当重置线程状态指针,释放 GIL,最后释放线程状态数据结构体。" + +#: ../../c-api/init.rst:752 +msgid "" +"The :c:func:`PyGILState_Ensure` and :c:func:`PyGILState_Release` functions " +"do all of the above automatically. The typical idiom for calling into " +"Python from a C thread is::" +msgstr "" +":c:func:`PyGILState_Ensure` 和 :c:func:`PyGILState_Release` 函数会自动完成上述的所有操作。 从" +" C 线程调用到 Python 的典型方式如下::" + +#: ../../c-api/init.rst:766 +msgid "" +"Note that the :c:func:`PyGILState_\\*` functions assume there is only one " +"global interpreter (created automatically by :c:func:`Py_Initialize`). " +"Python supports the creation of additional interpreters (using " +":c:func:`Py_NewInterpreter`), but mixing multiple interpreters and the " +":c:func:`PyGILState_\\*` API is unsupported." +msgstr "" + +#: ../../c-api/init.rst:776 +msgid "Cautions about fork()" +msgstr "有关 fork() 的注意事项" + +#: ../../c-api/init.rst:778 +msgid "" +"Another important thing to note about threads is their behaviour in the face" +" of the C :c:func:`fork` call. On most systems with :c:func:`fork`, after a " +"process forks only the thread that issued the fork will exist. This has a " +"concrete impact both on how locks must be handled and on all stored state in" +" CPython's runtime." +msgstr "" +"有关线程的另一个需要注意的重要问题是它们在面对 C :c:func:`fork` 调用时的行为。 在大多数支持 :c:func:`fork` " +"的系统中,当一个进程执行 fork 之后将只有发出 fork 的线程存在。 这对需要如何处理锁以及CPython " +"的运行时内所有的存储状态都会有实质性的影响。" + +#: ../../c-api/init.rst:784 +msgid "" +"The fact that only the \"current\" thread remains means any locks held by " +"other threads will never be released. Python solves this for :func:`os.fork`" +" by acquiring the locks it uses internally before the fork, and releasing " +"them afterwards. In addition, it resets any :ref:`lock-objects` in the " +"child. When extending or embedding Python, there is no way to inform Python " +"of additional (non-Python) locks that need to be acquired before or reset " +"after a fork. OS facilities such as :c:func:`pthread_atfork` would need to " +"be used to accomplish the same thing. Additionally, when extending or " +"embedding Python, calling :c:func:`fork` directly rather than through " +":func:`os.fork` (and returning to or calling into Python) may result in a " +"deadlock by one of Python's internal locks being held by a thread that is " +"defunct after the fork. :c:func:`PyOS_AfterFork_Child` tries to reset the " +"necessary locks, but is not always able to." +msgstr "" + +#: ../../c-api/init.rst:799 +msgid "" +"The fact that all other threads go away also means that CPython's runtime " +"state there must be cleaned up properly, which :func:`os.fork` does. This " +"means finalizing all other :c:type:`PyThreadState` objects belonging to the " +"current interpreter and all other :c:type:`PyInterpreterState` objects. Due" +" to this and the special nature of the :ref:`\"main\" interpreter `, :c:func:`fork` should only be called in that " +"interpreter's \"main\" thread, where the CPython global runtime was " +"originally initialized. The only exception is if :c:func:`exec` will be " +"called immediately after." +msgstr "" +"所有其他线程都将结束这一事实也意味着 CPython 的运行时状态必须妥善清理,:func:`os.fork` 就是这样做的。 " +"这意味着最终化归属于当前解释器的所有其他 :c:type:`PyThreadState` 对象以及所有其他 " +":c:type:`PyInterpreterState` 对象。 由于这一点以及 :ref:`\"main\" 解释器 ` 的特殊性质,:c:func:`fork` 应当只在该解释器 的 \"main\" 线程中被调用,而 " +"CPython 全局运行时最初就是在该线程中初始化的。 只有当 :c:func:`exec` 将随后立即被调用的情况是唯一的例外。" + +#: ../../c-api/init.rst:812 +msgid "High-level API" +msgstr "高阶 API" + +#: ../../c-api/init.rst:814 +msgid "" +"These are the most commonly used types and functions when writing C " +"extension code, or when embedding the Python interpreter:" +msgstr "这些是在编写 C 扩展代码或在嵌入 Python 解释器时最常用的类型和函数:" + +#: ../../c-api/init.rst:819 +msgid "" +"This data structure represents the state shared by a number of cooperating " +"threads. Threads belonging to the same interpreter share their module " +"administration and a few other internal items. There are no public members " +"in this structure." +msgstr "该数据结构代表多个合作线程所共享的状态。 属于同一解释器的线程将共享其模块管理以及其他一些内部条目。 该结构体中不包含公有成员。" + +#: ../../c-api/init.rst:824 +msgid "" +"Threads belonging to different interpreters initially share nothing, except " +"process state like available memory, open file descriptors and such. The " +"global interpreter lock is also shared by all threads, regardless of to " +"which interpreter they belong." +msgstr "" +"最初归属于不同解释器的线程不会共享任何东西,但进程状态如可用内存、打开的文件描述符等等除外。 全局解释器锁也会被所有线程共享,无论它们归属于哪个解释器。" + +#: ../../c-api/init.rst:832 +msgid "" +"This data structure represents the state of a single thread. The only " +"public data member is :attr:`interp` (:c:type:`PyInterpreterState *`), which" +" points to this thread's interpreter state." +msgstr "" + +#: ../../c-api/init.rst:845 +msgid "Deprecated function which does nothing." +msgstr "不执行任何操作的已弃用函数。" + +#: ../../c-api/init.rst:847 +msgid "" +"In Python 3.6 and older, this function created the GIL if it didn't exist." +msgstr "在 Python 3.6 及更老的版本中,此函数会在 GIL 不存在时创建它。" + +#: ../../c-api/init.rst:849 +msgid "The function now does nothing." +msgstr "此函数现在不执行任何操作。" + +#: ../../c-api/init.rst:852 +msgid "" +"This function is now called by :c:func:`Py_Initialize()`, so you don't have " +"to call it yourself anymore." +msgstr "该函数现在由 :c:func:`Py_Initialize()` 调用,因此你无需再自行调用它。" + +#: ../../c-api/init.rst:856 +msgid "" +"This function cannot be called before :c:func:`Py_Initialize()` anymore." +msgstr "此函数已不再被允许在 :c:func:`Py_Initialize()` 之前调用。" + +#: ../../c-api/init.rst:866 +msgid "" +"Returns a non-zero value if :c:func:`PyEval_InitThreads` has been called. " +"This function can be called without holding the GIL, and therefore can be " +"used to avoid calls to the locking API when running single-threaded." +msgstr "" +"如果 :c:func:`PyEval_InitThreads` 已经被调用则返回非零值。 此函数可在不持有 GIL " +"的情况下被调用,因而可被用来避免在单线程运行时对加锁 API 的调用。" + +#: ../../c-api/init.rst:870 +msgid "The :term:`GIL` is now initialized by :c:func:`Py_Initialize()`." +msgstr "现在 :term:`GIL` 将由 :c:func:`Py_Initialize()` 来初始化。" + +#: ../../c-api/init.rst:878 +msgid "" +"Release the global interpreter lock (if it has been created) and reset the " +"thread state to ``NULL``, returning the previous thread state (which is not " +"``NULL``). If the lock has been created, the current thread must have " +"acquired it." +msgstr "" +"释放全局解释器锁 (如果已创建) 并将线程状态重置为 ``NULL``,返回之前的线程状态 (不为 ``NULL``)。 " +"如果锁已被创建,则当前线程必须已获取到它。" + +#: ../../c-api/init.rst:886 +msgid "" +"Acquire the global interpreter lock (if it has been created) and set the " +"thread state to *tstate*, which must not be ``NULL``. If the lock has been " +"created, the current thread must not have acquired it, otherwise deadlock " +"ensues." +msgstr "" +"获取全局解释器锁 (如果已创建) 并将线程状态设为 *tstate*,它必须不为 ``NULL``。 " +"如果锁已被创建,则当前线程必须尚未获取它,否则将发生死锁。" + +#: ../../c-api/init.rst:892 ../../c-api/init.rst:938 ../../c-api/init.rst:1197 +#: ../../c-api/init.rst:1235 +msgid "" +"Calling this function from a thread when the runtime is finalizing will " +"terminate the thread, even if the thread was not created by Python. You can " +"use :c:func:`_Py_IsFinalizing` or :func:`sys.is_finalizing` to check if the " +"interpreter is in process of being finalized before calling this function to" +" avoid unwanted termination." +msgstr "" +"当运行时正在最终化时从某个线程调用此函数将终结该线程,即使线程不是由 Python 创建的。 你可以在调用此函数之前使用 " +":c:func:`_Py_IsFinalizing` 或 :func:`sys.is_finalizing` " +"来检查解释器是否还处于最终化过程中以避免不必要的终结。" + +#: ../../c-api/init.rst:900 +msgid "" +"Return the current thread state. The global interpreter lock must be held. " +"When the current thread state is ``NULL``, this issues a fatal error (so " +"that the caller needn't check for ``NULL``)." +msgstr "" +"返回当前线程状态。 全局解释器锁必须被持有。 在当前状态为 ``NULL`` 时,这将发出一个致命错误 (这样调用方将无须检查是否为 " +"``NULL``)。" + +#: ../../c-api/init.rst:907 +msgid "" +"Swap the current thread state with the thread state given by the argument " +"*tstate*, which may be ``NULL``. The global interpreter lock must be held " +"and is not released." +msgstr "交换当前线程状态与由参数 *tstate* (可能为 ``NULL``) 给出的线程状态。 全局解释器锁必须被持有且未被释放。" + +#: ../../c-api/init.rst:912 +msgid "" +"The following functions use thread-local storage, and are not compatible " +"with sub-interpreters:" +msgstr "下列函数使用线程级本地存储,并且不能兼容子解释器:" + +#: ../../c-api/init.rst:917 +msgid "" +"Ensure that the current thread is ready to call the Python C API regardless " +"of the current state of Python, or of the global interpreter lock. This may " +"be called as many times as desired by a thread as long as each call is " +"matched with a call to :c:func:`PyGILState_Release`. In general, other " +"thread-related APIs may be used between :c:func:`PyGILState_Ensure` and " +":c:func:`PyGILState_Release` calls as long as the thread state is restored " +"to its previous state before the Release(). For example, normal usage of " +"the :c:macro:`Py_BEGIN_ALLOW_THREADS` and :c:macro:`Py_END_ALLOW_THREADS` " +"macros is acceptable." +msgstr "" +"确保当前线程已准备好调用 Python C API 而不管 Python 或全局解释器锁的当前状态如何。 只要每次调用都与 " +":c:func:`PyGILState_Release` 的调用相匹配就可以通过线程调用此函数任意多次。 一般来说,只要线程状态恢复到 " +"Release() 之前的状态就可以在 :c:func:`PyGILState_Ensure` 和 " +":c:func:`PyGILState_Release` 调用之间使用其他与线程相关的 API。 例如,可以正常使用 " +":c:macro:`Py_BEGIN_ALLOW_THREADS` 和 :c:macro:`Py_END_ALLOW_THREADS` 宏。" + +#: ../../c-api/init.rst:927 +msgid "" +"The return value is an opaque \"handle\" to the thread state when " +":c:func:`PyGILState_Ensure` was called, and must be passed to " +":c:func:`PyGILState_Release` to ensure Python is left in the same state. " +"Even though recursive calls are allowed, these handles *cannot* be shared - " +"each unique call to :c:func:`PyGILState_Ensure` must save the handle for its" +" call to :c:func:`PyGILState_Release`." +msgstr "" +"返回值是一个当 :c:func:`PyGILState_Ensure` 被调用时的线程状态的不透明“句柄”,并且必须被传递给 " +":c:func:`PyGILState_Release` 以确保 Python 处于相同状态。 虽然允许递归调用,但这些句柄 *不能* 被共享 —— " +"每次对 :c:func:`PyGILState_Ensure` 的单独调用都必须保存其对 :c:func:`PyGILState_Release` " +"的调用的句柄。" + +#: ../../c-api/init.rst:934 +msgid "" +"When the function returns, the current thread will hold the GIL and be able " +"to call arbitrary Python code. Failure is a fatal error." +msgstr "当该函数返回时,当前线程将持有 GIL 并能够调用任意 Python 代码。 执行失败将导致致命级错误。" + +#: ../../c-api/init.rst:946 +msgid "" +"Release any resources previously acquired. After this call, Python's state " +"will be the same as it was prior to the corresponding " +":c:func:`PyGILState_Ensure` call (but generally this state will be unknown " +"to the caller, hence the use of the GILState API)." +msgstr "" +"释放之前获取的任何资源。 在此调用之后,Python 的状态将与其在对相应 :c:func:`PyGILState_Ensure` " +"调用之前的一样(但是通常此状态对调用方来说将是未知的,对 GILState API 的使用也是如此)。" + +#: ../../c-api/init.rst:951 +msgid "" +"Every call to :c:func:`PyGILState_Ensure` must be matched by a call to " +":c:func:`PyGILState_Release` on the same thread." +msgstr "" +"对 :c:func:`PyGILState_Ensure` 的每次调用都必须与在同一线程上对 :c:func:`PyGILState_Release` " +"的调用相匹配。" + +#: ../../c-api/init.rst:957 +msgid "" +"Get the current thread state for this thread. May return ``NULL`` if no " +"GILState API has been used on the current thread. Note that the main thread" +" always has such a thread-state, even if no auto-thread-state call has been " +"made on the main thread. This is mainly a helper/diagnostic function." +msgstr "" +"获取此线程的当前线程状态。 如果当前线程上没有使用过 GILState API 则可以返回 ``NULL``。 " +"请注意主线程总是会有这样一个线程状态,即使没有在主线程上执行过自动线程状态调用。 这主要是一个辅助/诊断函数。" + +#: ../../c-api/init.rst:965 +msgid "" +"Return ``1`` if the current thread is holding the GIL and ``0`` otherwise. " +"This function can be called from any thread at any time. Only if it has had " +"its Python thread state initialized and currently is holding the GIL will it" +" return ``1``. This is mainly a helper/diagnostic function. It can be " +"useful for example in callback contexts or memory allocation functions when " +"knowing that the GIL is locked can allow the caller to perform sensitive " +"actions or otherwise behave differently." +msgstr "" +"如果当前线程持有 GIL 则返回 ``1`` 否则返回 ``0``。 此函数可以随时从任何线程调用。 只有当它的 Python " +"线程状态已经初始化并且当前持有 GIL 时它才会返回 ``1``。 这主要是一个辅助/诊断函数。 例如在回调上下文或内存分配函数中会很有用处,当知道 " +"GIL 被锁定时可以允许调用方执行敏感的操作或是在其他情况下做出不同的行为。" + +#: ../../c-api/init.rst:977 +msgid "" +"The following macros are normally used without a trailing semicolon; look " +"for example usage in the Python source distribution." +msgstr "以下的宏被使用时通常不带末尾分号;请在 Python 源代码发布包中查看示例用法。" + +#: ../../c-api/init.rst:983 +msgid "" +"This macro expands to ``{ PyThreadState *_save; _save = " +"PyEval_SaveThread();``. Note that it contains an opening brace; it must be " +"matched with a following :c:macro:`Py_END_ALLOW_THREADS` macro. See above " +"for further discussion of this macro." +msgstr "" +"此宏会扩展为 ``{ PyThreadState *_save; _save = PyEval_SaveThread();``。 " +"请注意它包含一个开头花括号;它必须与后面的 :c:macro:`Py_END_ALLOW_THREADS` 宏匹配。 有关此宏的进一步讨论请参阅上文。" + +#: ../../c-api/init.rst:991 +msgid "" +"This macro expands to ``PyEval_RestoreThread(_save); }``. Note that it " +"contains a closing brace; it must be matched with an earlier " +":c:macro:`Py_BEGIN_ALLOW_THREADS` macro. See above for further discussion " +"of this macro." +msgstr "" +"此宏扩展为 ``PyEval_RestoreThread(_save); }``。 注意它包含一个右花括号;它必须与之前的 " +":c:macro:`Py_BEGIN_ALLOW_THREADS` 宏匹配。 请参阅上文以进一步讨论此宏。" + +#: ../../c-api/init.rst:999 +msgid "" +"This macro expands to ``PyEval_RestoreThread(_save);``: it is equivalent to " +":c:macro:`Py_END_ALLOW_THREADS` without the closing brace." +msgstr "" +"这个宏扩展为 ``PyEval_RestoreThread(_save);``: 它等价于没有关闭花括号的 " +":c:macro:`Py_END_ALLOW_THREADS`。" + +#: ../../c-api/init.rst:1005 +msgid "" +"This macro expands to ``_save = PyEval_SaveThread();``: it is equivalent to " +":c:macro:`Py_BEGIN_ALLOW_THREADS` without the opening brace and variable " +"declaration." +msgstr "" +"这个宏扩展为 ``_save = PyEval_SaveThread();``: 它等价于没有开始花括号和变量声明的 " +":c:macro:`Py_BEGIN_ALLOW_THREADS`。" + +#: ../../c-api/init.rst:1011 +msgid "Low-level API" +msgstr "底层级 API" + +#: ../../c-api/init.rst:1013 +msgid "" +"All of the following functions must be called after :c:func:`Py_Initialize`." +msgstr "下列所有函数都必须在 :c:func:`Py_Initialize` 之后被调用。" + +#: ../../c-api/init.rst:1015 +msgid ":c:func:`Py_Initialize()` now initializes the :term:`GIL`." +msgstr ":c:func:`Py_Initialize()` 现在会初始化 :term:`GIL`。" + +#: ../../c-api/init.rst:1021 +msgid "" +"Create a new interpreter state object. The global interpreter lock need not" +" be held, but may be held if it is necessary to serialize calls to this " +"function." +msgstr "创建一个新的解释器状态对象。 不需要持有全局解释器锁,但如果有必要序列化对此函数的调用则可能会持有。" + +#: ../../c-api/init.rst:1025 +msgid "" +"Raises an :ref:`auditing event ` " +"``cpython.PyInterpreterState_New`` with no arguments." +msgstr "引发一个不带参数的 :ref:`审计事件 ` ``cpython.PyInterpreterState_New``。" + +#: ../../c-api/init.rst:1030 +msgid "" +"Reset all information in an interpreter state object. The global " +"interpreter lock must be held." +msgstr "重置解释器状态对象中的所有信息。 必须持有全局解释器锁。" + +#: ../../c-api/init.rst:1033 +msgid "" +"Raises an :ref:`auditing event ` " +"``cpython.PyInterpreterState_Clear`` with no arguments." +msgstr "" +"引发一个不带参数的 :ref:`审计事件 ` ``cpython.PyInterpreterState_Clear``。" + +#: ../../c-api/init.rst:1038 +msgid "" +"Destroy an interpreter state object. The global interpreter lock need not " +"be held. The interpreter state must have been reset with a previous call to" +" :c:func:`PyInterpreterState_Clear`." +msgstr "" +"销毁解释器状态对象。 不需要持有全局解释器锁。 解释器状态必须使用之前对 :c:func:`PyInterpreterState_Clear` " +"的调用来重置。" + +#: ../../c-api/init.rst:1045 +msgid "" +"Create a new thread state object belonging to the given interpreter object. " +"The global interpreter lock need not be held, but may be held if it is " +"necessary to serialize calls to this function." +msgstr "创建属于给定解释器对象的新线程状态对象。全局解释器锁不需要保持,但如果需要序列化对此函数的调用,则可以保持。" + +#: ../../c-api/init.rst:1052 +msgid "" +"Reset all information in a thread state object. The global interpreter lock" +" must be held." +msgstr "重置线程状态对象中的所有信息。 必须持有全局解释器锁。" + +#: ../../c-api/init.rst:1055 +msgid "" +"This function now calls the :c:member:`PyThreadState.on_delete` callback. " +"Previously, that happened in :c:func:`PyThreadState_Delete`." +msgstr "" +"此函数现在会调用 :c:member:`PyThreadState.on_delete` 回调。 在之前版本中,此操作是发生在 " +":c:func:`PyThreadState_Delete` 中的。" + +#: ../../c-api/init.rst:1062 +msgid "" +"Destroy a thread state object. The global interpreter lock need not be " +"held. The thread state must have been reset with a previous call to " +":c:func:`PyThreadState_Clear`." +msgstr "" +"销毁线程状态对象。 不需要持有全局解释器锁。 线程状态必须使用之前对 :c:func:`PyThreadState_Clear` 的调用来重置。" + +#: ../../c-api/init.rst:1069 +msgid "" +"Destroy the current thread state and release the global interpreter lock. " +"Like :c:func:`PyThreadState_Delete`, the global interpreter lock need not be" +" held. The thread state must have been reset with a previous call to " +":c:func:`PyThreadState_Clear`." +msgstr "" +"销毁当前线程状态并释放全局解释器锁。 与 :c:func:`PyThreadState_Delete` 类似,不需要持有全局解释器锁。 " +"线程状态必须已使用之前对 :c:func:`PyThreadState_Clear` 调用来重置。" + +#: ../../c-api/init.rst:1077 +msgid "Get the current frame of the Python thread state *tstate*." +msgstr "获取 Python 线程状态 *tstate* 的当前帧。" + +#: ../../c-api/init.rst:1079 +msgid "" +"Return a strong reference. Return ``NULL`` if no frame is currently " +"executing." +msgstr "" + +#: ../../c-api/init.rst:1082 +msgid "See also :c:func:`PyEval_GetFrame`." +msgstr "另请参阅 :c:func:`PyEval_GetFrame`。" + +#: ../../c-api/init.rst:1084 ../../c-api/init.rst:1093 +#: ../../c-api/init.rst:1102 +msgid "*tstate* must not be ``NULL``." +msgstr "*tstate* 必须不为 ``NULL``。" + +#: ../../c-api/init.rst:1091 +msgid "" +"Get the unique thread state identifier of the Python thread state *tstate*." +msgstr "获取 Python 线程状态 *tstate* 的唯一线程状态标识符。" + +#: ../../c-api/init.rst:1100 +msgid "Get the interpreter of the Python thread state *tstate*." +msgstr "获取 Python 线程状态 *tstate* 对应的解释器。" + +#: ../../c-api/init.rst:1109 +msgid "Get the current interpreter." +msgstr "获取当前解释器。" + +#: ../../c-api/init.rst:1111 +msgid "" +"Issue a fatal error if there no current Python thread state or no current " +"interpreter. It cannot return NULL." +msgstr "如果不存在当前 Python 线程状态或不存在当前解释器则将发出致命级错误信号。 它无法返回 NULL。" + +#: ../../c-api/init.rst:1114 ../../c-api/init.rst:1124 +msgid "The caller must hold the GIL." +msgstr "调用时必须携带GIL。" + +#: ../../c-api/init.rst:1121 +msgid "" +"Return the interpreter's unique ID. If there was any error in doing so then" +" ``-1`` is returned and an error is set." +msgstr "返回解释器的唯一 ID。 如果执行过程中发生任何错误则将返回 ``-1`` 并设置错误。" + +#: ../../c-api/init.rst:1131 +msgid "" +"Return a dictionary in which interpreter-specific data may be stored. If " +"this function returns ``NULL`` then no exception has been raised and the " +"caller should assume no interpreter-specific dict is available." +msgstr "返回一个存储解释器专属数据的字典。 如果此函数返回 ``NULL`` 则没有任何异常被引发并且调用方应当将解释器专属字典视为不可用。" + +#: ../../c-api/init.rst:1135 +msgid "" +"This is not a replacement for :c:func:`PyModule_GetState()`, which " +"extensions should use to store interpreter-specific state information." +msgstr "这不是 :c:func:`PyModule_GetState()` 的替代,扩展仍应使用它来存储解释器专属的状态信息。" + +#: ../../c-api/init.rst:1142 +msgid "Type of a frame evaluation function." +msgstr "帧评估函数的类型" + +#: ../../c-api/init.rst:1144 +msgid "" +"The *throwflag* parameter is used by the ``throw()`` method of generators: " +"if non-zero, handle the current exception." +msgstr "*throwflag* 形参将由生成器的 ``throw()`` 方法来使用:如为非零值,则处理当前异常。" + +#: ../../c-api/init.rst:1147 +msgid "The function now takes a *tstate* parameter." +msgstr "此函数现在可接受一个 *tstate* 形参。" + +#: ../../c-api/init.rst:1152 +msgid "Get the frame evaluation function." +msgstr "获取帧评估函数。" + +#: ../../c-api/init.rst:1154 ../../c-api/init.rst:1162 +msgid "See the :pep:`523` \"Adding a frame evaluation API to CPython\"." +msgstr "请参阅 :pep:`523` \"Adding a frame evaluation API to CPython\"。" + +#: ../../c-api/init.rst:1160 +msgid "Set the frame evaluation function." +msgstr "设置帧评估函数。" + +#: ../../c-api/init.rst:1169 +msgid "" +"Return a dictionary in which extensions can store thread-specific state " +"information. Each extension should use a unique key to use to store state " +"in the dictionary. It is okay to call this function when no current thread " +"state is available. If this function returns ``NULL``, no exception has been" +" raised and the caller should assume no current thread state is available." +msgstr "" +"返回一个扩展可以在其中存储线程专属状态信息的字典。 每个扩展都应当使用一个独有的键用来在该字典中存储状态。 在没有可用的当前线程状态时也可以调用此函数。" +" 如果此函数返回 ``NULL``,则还没有任何异常被引发并且调用方应当假定没有可用的当前线程状态。" + +#: ../../c-api/init.rst:1178 +msgid "" +"Asynchronously raise an exception in a thread. The *id* argument is the " +"thread id of the target thread; *exc* is the exception object to be raised. " +"This function does not steal any references to *exc*. To prevent naive " +"misuse, you must write your own C extension to call this. Must be called " +"with the GIL held. Returns the number of thread states modified; this is " +"normally one, but will be zero if the thread id isn't found. If *exc* is " +":const:`NULL`, the pending exception (if any) for the thread is cleared. " +"This raises no exceptions." +msgstr "" + +#: ../../c-api/init.rst:1186 +msgid "" +"The type of the *id* parameter changed from :c:type:`long` to " +":c:type:`unsigned long`." +msgstr "" + +#: ../../c-api/init.rst:1192 +msgid "" +"Acquire the global interpreter lock and set the current thread state to " +"*tstate*, which must not be ``NULL``. The lock must have been created " +"earlier. If this thread already has the lock, deadlock ensues." +msgstr "" +"获取全局解释器锁并将当前线程状态设为 *tstate*,它必须不为 ``NULL``。 锁必须在此之前已被创建。 如果该线程已获取锁,则会发生死锁。" + +#: ../../c-api/init.rst:1203 ../../c-api/init.rst:1241 +msgid "" +"Updated to be consistent with :c:func:`PyEval_RestoreThread`, " +":c:func:`Py_END_ALLOW_THREADS`, and :c:func:`PyGILState_Ensure`, and " +"terminate the current thread if called while the interpreter is finalizing." +msgstr "" +"已被更新为与 :c:func:`PyEval_RestoreThread`, :c:func:`Py_END_ALLOW_THREADS` 和 " +":c:func:`PyGILState_Ensure` 保持一致,如果在解释器正在最终化时被调用则会终结当前线程。" + +#: ../../c-api/init.rst:1208 +msgid "" +":c:func:`PyEval_RestoreThread` is a higher-level function which is always " +"available (even when threads have not been initialized)." +msgstr ":c:func:`PyEval_RestoreThread` 是一个始终可用的(即使线程尚未初始化)更高层级函数。" + +#: ../../c-api/init.rst:1214 +msgid "" +"Reset the current thread state to ``NULL`` and release the global " +"interpreter lock. The lock must have been created earlier and must be held " +"by the current thread. The *tstate* argument, which must not be ``NULL``, " +"is only used to check that it represents the current thread state --- if it " +"isn't, a fatal error is reported." +msgstr "" +"将当前线程状态重置为 ``NULL`` 并释放全局解释器锁。 在此之前锁必须已被创建并且必须由当前的线程所持有。 *tstate* 参数必须不为 " +"``NULL``,该参数仅被用于检查它是否代表当前线程状态 --- 如果不是,则会报告一个致命级错误。" + +#: ../../c-api/init.rst:1220 +msgid "" +":c:func:`PyEval_SaveThread` is a higher-level function which is always " +"available (even when threads have not been initialized)." +msgstr ":c:func:`PyEval_SaveThread` 是一个始终可用的(即使线程尚未初始化)更高层级函数。" + +#: ../../c-api/init.rst:1226 +msgid "" +"Acquire the global interpreter lock. The lock must have been created " +"earlier. If this thread already has the lock, a deadlock ensues." +msgstr "获取全局解释器锁。锁必须在此之前已被创建。 如果该线程已经拥有锁,则会出现死锁。" + +#: ../../c-api/init.rst:1229 +msgid "" +"This function does not update the current thread state. Please use " +":c:func:`PyEval_RestoreThread` or :c:func:`PyEval_AcquireThread` instead." +msgstr "" +"此函数不会更新当前线程状态。 请改用 :c:func:`PyEval_RestoreThread` 或 " +":c:func:`PyEval_AcquireThread`。" + +#: ../../c-api/init.rst:1249 +msgid "" +"Release the global interpreter lock. The lock must have been created " +"earlier." +msgstr "释放全局解释器锁。 锁必须在此之前已被创建。" + +#: ../../c-api/init.rst:1251 +msgid "" +"This function does not update the current thread state. Please use " +":c:func:`PyEval_SaveThread` or :c:func:`PyEval_ReleaseThread` instead." +msgstr "" +"此函数不会更新当前线程状态。 请改用 :c:func:`PyEval_SaveThread` 或 " +":c:func:`PyEval_ReleaseThread`。" + +#: ../../c-api/init.rst:1260 +msgid "Sub-interpreter support" +msgstr "子解释器支持" + +#: ../../c-api/init.rst:1262 +msgid "" +"While in most uses, you will only embed a single Python interpreter, there " +"are cases where you need to create several independent interpreters in the " +"same process and perhaps even in the same thread. Sub-interpreters allow you" +" to do that." +msgstr "" +"虽然在大多数用例中,你都只会嵌入一个单独的 Python 解释器,但某些场景需要你在同一个进程甚至同一个线程中创建多个独立的解释器。 " +"子解释器让你能够做到这一点。" + +#: ../../c-api/init.rst:1267 +msgid "" +"The \"main\" interpreter is the first one created when the runtime " +"initializes. It is usually the only Python interpreter in a process. Unlike" +" sub-interpreters, the main interpreter has unique process-global " +"responsibilities like signal handling. It is also responsible for execution" +" during runtime initialization and is usually the active interpreter during " +"runtime finalization. The :c:func:`PyInterpreterState_Main` function " +"returns a pointer to its state." +msgstr "" +"“主”解释器是在运行时初始化时创建的第一个解释器。 它通常是一个进程中唯一的 Python 解释器。 " +"与子解释器不同,主解释器具有唯一的进程全局责任比如信号处理等。 它还负责在运行时初始化期间的执行并且通常还是运行时最终化期间的活动解释器。 " +":c:func:`PyInterpreterState_Main` 函数将返回一个指向其状态的指针。" + +#: ../../c-api/init.rst:1274 +msgid "" +"You can switch between sub-interpreters using the " +":c:func:`PyThreadState_Swap` function. You can create and destroy them using" +" the following functions:" +msgstr "你可以使用 :c:func:`PyThreadState_Swap` 函数在子解释器之间进行切换。 你可以使用下列函数来创建和销毁它们:" + +#: ../../c-api/init.rst:1288 +msgid "" +"Create a new sub-interpreter. This is an (almost) totally separate " +"environment for the execution of Python code. In particular, the new " +"interpreter has separate, independent versions of all imported modules, " +"including the fundamental modules :mod:`builtins`, :mod:`__main__` and " +":mod:`sys`. The table of loaded modules (``sys.modules``) and the module " +"search path (``sys.path``) are also separate. The new environment has no " +"``sys.argv`` variable. It has new standard I/O stream file objects " +"``sys.stdin``, ``sys.stdout`` and ``sys.stderr`` (however these refer to the" +" same underlying file descriptors)." +msgstr "" +"新建一个子解释器。 这是一个 (几乎) 完全隔离的 Python 代码执行环境。 " +"特别需要注意,新的子解释器具有全部已导入模块的隔离的、独立的版本,包括基本模块 :mod:`builtins`, :mod:`__main__` 和 " +":mod:`sys` 等。 已加载模块表 (``sys.modules``) 和模块搜索路径 (``sys.path``) 也是隔离的。 新环境没有 " +"``sys.argv`` 变量。 它具有新的标准 I/O 流文件对象 ``sys.stdin``, ``sys.stdout`` 和 " +"``sys.stderr`` (不过这些对象都指向相同的底层文件描述符)。" + +#: ../../c-api/init.rst:1298 +msgid "" +"The return value points to the first thread state created in the new sub-" +"interpreter. This thread state is made in the current thread state. Note " +"that no actual thread is created; see the discussion of thread states below." +" If creation of the new interpreter is unsuccessful, ``NULL`` is returned; " +"no exception is set since the exception state is stored in the current " +"thread state and there may not be a current thread state. (Like all other " +"Python/C API functions, the global interpreter lock must be held before " +"calling this function and is still held when it returns; however, unlike " +"most other Python/C API functions, there needn't be a current thread state " +"on entry.)" +msgstr "" + +#: ../../c-api/init.rst:1313 +msgid "Extension modules are shared between (sub-)interpreters as follows:" +msgstr "扩展模块将以如下方式在(子)解释器之间共享:" + +#: ../../c-api/init.rst:1315 +msgid "" +"For modules using multi-phase initialization, e.g. " +":c:func:`PyModule_FromDefAndSpec`, a separate module object is created and " +"initialized for each interpreter. Only C-level static and global variables " +"are shared between these module objects." +msgstr "" +"对于使用多阶段初始化的模块 ,例如 :c:func:`PyModule_FromDefAndSpec`,将为每个解释器创建并初始化一个单独的模块对象。 " +"只有 C 层级的静态和全局变量能在这些模块 对象之间共享。" + +#: ../../c-api/init.rst:1321 +msgid "" +"For modules using single-phase initialization, e.g. " +":c:func:`PyModule_Create`, the first time a particular extension is " +"imported, it is initialized normally, and a (shallow) copy of its module's " +"dictionary is squirreled away. When the same extension is imported by " +"another (sub-)interpreter, a new module is initialized and filled with the " +"contents of this copy; the extension's ``init`` function is not called. " +"Objects in the module's dictionary thus end up shared across " +"(sub-)interpreters, which might cause unwanted behavior (see `Bugs and " +"caveats`_ below)." +msgstr "" +"对于使用单阶段初始化的模块,例如 :c:func:`PyModule_Create`,当特定扩展被首次导入时,它将被正常初始化,并会保存其模块字典的一个" +" (浅) 拷贝。 当同一扩展被另一个 (子) 解释器导入时,将初始化一个新模块并填充该拷贝的内容;扩展的 ``init`` 函数不会被调用。 " +"因此模块字典中的对象最终会被 (子) 解释器所共享,这可能会导致预期之外的行为 (参见下文的 `Bugs and caveats`_)。" + +#: ../../c-api/init.rst:1332 +msgid "" +"Note that this is different from what happens when an extension is imported " +"after the interpreter has been completely re-initialized by calling " +":c:func:`Py_FinalizeEx` and :c:func:`Py_Initialize`; in that case, the " +"extension's ``initmodule`` function *is* called again. As with multi-phase " +"initialization, this means that only C-level static and global variables are" +" shared between these modules." +msgstr "" +"请注意这不同于在调用 :c:func:`Py_FinalizeEx` 和 :c:func:`Py_Initialize` " +"完全重新初始化解释器之后导入扩展时所发生的情况;对于那种情况,扩展的 ``initmodule`` 函数 *会被* 再次调用。 " +"与多阶段初始化一样,这意味着只有 C 层级的静态和全局变量能在这些模块之间共享。" + +#: ../../c-api/init.rst:1346 +msgid "" +"Destroy the (sub-)interpreter represented by the given thread state. The " +"given thread state must be the current thread state. See the discussion of " +"thread states below. When the call returns, the current thread state is " +"``NULL``. All thread states associated with this interpreter are destroyed." +" (The global interpreter lock must be held before calling this function and" +" is still held when it returns.) :c:func:`Py_FinalizeEx` will destroy all " +"sub-interpreters that haven't been explicitly destroyed at that point." +msgstr "" + +#: ../../c-api/init.rst:1356 +msgid "Bugs and caveats" +msgstr "错误和警告" + +#: ../../c-api/init.rst:1358 +msgid "" +"Because sub-interpreters (and the main interpreter) are part of the same " +"process, the insulation between them isn't perfect --- for example, using " +"low-level file operations like :func:`os.close` they can (accidentally or " +"maliciously) affect each other's open files. Because of the way extensions " +"are shared between (sub-)interpreters, some extensions may not work " +"properly; this is especially likely when using single-phase initialization " +"or (static) global variables. It is possible to insert objects created in " +"one sub-interpreter into a namespace of another (sub-)interpreter; this " +"should be avoided if possible." +msgstr "" +"由于子解释器 (以及主解释器) 都是同一个进程的组成部分,它们之间的隔离状态并非完美 --- 举例来说,使用低层级的文件操作如 " +":func:`os.close` 时它们可能 (无意或恶意地) 影响它们各自打开的文件。 由于 (子) " +"解释器之间共享扩展的方式,某些扩展可能无法正常工作;在使用单阶段初始化或者 (静态) 全局变量时尤其如此。 " +"在一个子解释器中创建的对象有可能被插入到另一个 (子) 解释器的命名空间中;这种情况应当尽可能地避免。" + +#: ../../c-api/init.rst:1368 +msgid "" +"Special care should be taken to avoid sharing user-defined functions, " +"methods, instances or classes between sub-interpreters, since import " +"operations executed by such objects may affect the wrong (sub-)interpreter's" +" dictionary of loaded modules. It is equally important to avoid sharing " +"objects from which the above are reachable." +msgstr "" +"应当特别注意避免在子解释器之间共享用户自定义的函数、方法、实例或类,因为由这些对象执行的导入 操作可能会影响错误的已加载模块的 (子) 解释器的字典。 " +"同样重要的一点是应当避免共享可被上述对象访问的对象 。" + +#: ../../c-api/init.rst:1374 +msgid "" +"Also note that combining this functionality with :c:func:`PyGILState_\\*` " +"APIs is delicate, because these APIs assume a bijection between Python " +"thread states and OS-level threads, an assumption broken by the presence of " +"sub-interpreters. It is highly recommended that you don't switch sub-" +"interpreters between a pair of matching :c:func:`PyGILState_Ensure` and " +":c:func:`PyGILState_Release` calls. Furthermore, extensions (such as " +":mod:`ctypes`) using these APIs to allow calling of Python code from non-" +"Python created threads will probably be broken when using sub-interpreters." +msgstr "" + +#: ../../c-api/init.rst:1385 +msgid "Asynchronous Notifications" +msgstr "异步通知" + +#: ../../c-api/init.rst:1387 +msgid "" +"A mechanism is provided to make asynchronous notifications to the main " +"interpreter thread. These notifications take the form of a function pointer" +" and a void pointer argument." +msgstr "提供了一种向主解释器线程发送异步通知的机制。 这些通知将采用函数指针和空指针参数的形式。" + +#: ../../c-api/init.rst:1396 +msgid "" +"Schedule a function to be called from the main interpreter thread. On " +"success, ``0`` is returned and *func* is queued for being called in the main" +" thread. On failure, ``-1`` is returned without setting any exception." +msgstr "" +"将一个函数加入从主解释器线程调用的计划任务。 成功时,将返回 ``0`` 并将 *func* 加入要被主线程调用的等待队列。 失败时,将返回 " +"``-1`` 但不会设置任何异常。" + +#: ../../c-api/init.rst:1400 +msgid "" +"When successfully queued, *func* will be *eventually* called from the main " +"interpreter thread with the argument *arg*. It will be called " +"asynchronously with respect to normally running Python code, but with both " +"these conditions met:" +msgstr "" +"当成功加入队列后,*func* 将 *最终* 附带参数 *arg* 被主解释器线程调用。 对于正常运行的 Python " +"代码来说它将被异步地调用,但要同时满足以下两个条件:" + +#: ../../c-api/init.rst:1405 +msgid "on a :term:`bytecode` boundary;" +msgstr "位于 :term:`bytecode` 的边界上;" + +#: ../../c-api/init.rst:1406 +msgid "" +"with the main thread holding the :term:`global interpreter lock` (*func* can" +" therefore use the full C API)." +msgstr "主线程持有 :term:`global interpreter lock` (因此 *func* 可以使用完整的 C API)。" + +#: ../../c-api/init.rst:1409 +msgid "" +"*func* must return ``0`` on success, or ``-1`` on failure with an exception " +"set. *func* won't be interrupted to perform another asynchronous " +"notification recursively, but it can still be interrupted to switch threads " +"if the global interpreter lock is released." +msgstr "" +"*func* 必须在成功时返回 ``0``,或在失败时返回 ``-1`` 并设置一个异常集合。 *func* " +"不会被中断来递归地执行另一个异步通知,但如果全局解释器锁被释放则它仍可被中断以切换线程。" + +#: ../../c-api/init.rst:1414 +msgid "" +"This function doesn't need a current thread state to run, and it doesn't " +"need the global interpreter lock." +msgstr "此函数的运行不需要当前线程状态,也不需要全局解释器锁。" + +#: ../../c-api/init.rst:1417 +msgid "" +"To call this function in a subinterpreter, the caller must hold the GIL. " +"Otherwise, the function *func* can be scheduled to be called from the wrong " +"interpreter." +msgstr "要在子解释器中调用函数,调用方必须持有 GIL。 否则,函数 *func* 可能会被安排给错误的解释器来调用。" + +#: ../../c-api/init.rst:1422 +msgid "" +"This is a low-level function, only useful for very special cases. There is " +"no guarantee that *func* will be called as quick as possible. If the main " +"thread is busy executing a system call, *func* won't be called before the " +"system call returns. This function is generally **not** suitable for " +"calling Python code from arbitrary C threads. Instead, use the " +":ref:`PyGILState API`." +msgstr "" +"这是一个低层级函数,只在非常特殊的情况下有用。 不能保证 *func* 会尽快被调用。 如果主线程忙于执行某个系统调用,*func* " +"将不会在系统调用返回之前被调用。 此函数 通常 **不适合** 从任意 C 线程调用 Python 代码。 作为替代,请使用 " +":ref:`PyGILStateAPI `。" + +#: ../../c-api/init.rst:1429 +msgid "" +"If this function is called in a subinterpreter, the function *func* is now " +"scheduled to be called from the subinterpreter, rather than being called " +"from the main interpreter. Each subinterpreter now has its own list of " +"scheduled calls." +msgstr "" +"如果此函数在子解释器中被调用,则函数 *func* 将被安排在子解释器中调用,而不是在主解释器中调用。现在每个子解释器都有自己的计划调用列表。" + +#: ../../c-api/init.rst:1440 +msgid "Profiling and Tracing" +msgstr "分析和跟踪" + +#: ../../c-api/init.rst:1445 +msgid "" +"The Python interpreter provides some low-level support for attaching " +"profiling and execution tracing facilities. These are used for profiling, " +"debugging, and coverage analysis tools." +msgstr "Python 解释器为附加的性能分析和执行跟踪工具提供了一些低层级的支持。 它们可被用于性能分析、调试和覆盖分析工具。" + +#: ../../c-api/init.rst:1449 +msgid "" +"This C interface allows the profiling or tracing code to avoid the overhead " +"of calling through Python-level callable objects, making a direct C function" +" call instead. The essential attributes of the facility have not changed; " +"the interface allows trace functions to be installed per-thread, and the " +"basic events reported to the trace function are the same as had been " +"reported to the Python-level trace functions in previous versions." +msgstr "" +"这个 C 接口允许性能分析或跟踪代码避免调用 Python 层级的可调用对象带来的开销,它能直接执行 C 函数调用。 " +"此工具的基本属性没有变化;这个接口允许针对每个线程安装跟踪函数,并且向跟踪函数报告的基本事件与之前版本中向 Python 层级跟踪函数报告的事件相同。" + +#: ../../c-api/init.rst:1459 +msgid "" +"The type of the trace function registered using :c:func:`PyEval_SetProfile` " +"and :c:func:`PyEval_SetTrace`. The first parameter is the object passed to " +"the registration function as *obj*, *frame* is the frame object to which the" +" event pertains, *what* is one of the constants :const:`PyTrace_CALL`, " +":const:`PyTrace_EXCEPTION`, :const:`PyTrace_LINE`, :const:`PyTrace_RETURN`, " +":const:`PyTrace_C_CALL`, :const:`PyTrace_C_EXCEPTION`, " +":const:`PyTrace_C_RETURN`, or :const:`PyTrace_OPCODE`, and *arg* depends on " +"the value of *what*:" +msgstr "" + +#: ../../c-api/init.rst:1468 +msgid "Value of *what*" +msgstr "*what* 的值" + +#: ../../c-api/init.rst:1468 +msgid "Meaning of *arg*" +msgstr "*arg* 的含义" + +#: ../../c-api/init.rst:1470 +msgid ":const:`PyTrace_CALL`" +msgstr ":const:`PyTrace_CALL`" + +#: ../../c-api/init.rst:1470 ../../c-api/init.rst:1475 +#: ../../c-api/init.rst:1486 +msgid "Always :c:data:`Py_None`." +msgstr "总是 :c:data:`Py_None`." + +#: ../../c-api/init.rst:1472 +msgid ":const:`PyTrace_EXCEPTION`" +msgstr ":const:`PyTrace_EXCEPTION`" + +#: ../../c-api/init.rst:1472 +msgid "Exception information as returned by :func:`sys.exc_info`." +msgstr ":func:`sys.exc_info` 返回的异常信息。" + +#: ../../c-api/init.rst:1475 +msgid ":const:`PyTrace_LINE`" +msgstr ":const:`PyTrace_LINE`" + +#: ../../c-api/init.rst:1477 +msgid ":const:`PyTrace_RETURN`" +msgstr ":const:`PyTrace_RETURN`" + +#: ../../c-api/init.rst:1477 +msgid "" +"Value being returned to the caller, or ``NULL`` if caused by an exception." +msgstr "返回给调用方的值,或者如果是由异常导致的则返回 ``NULL``。" + +#: ../../c-api/init.rst:1480 +msgid ":const:`PyTrace_C_CALL`" +msgstr ":const:`PyTrace_C_CALL`" + +#: ../../c-api/init.rst:1480 ../../c-api/init.rst:1482 +#: ../../c-api/init.rst:1484 +msgid "Function object being called." +msgstr "正在调用函数对象。" + +#: ../../c-api/init.rst:1482 +msgid ":const:`PyTrace_C_EXCEPTION`" +msgstr ":const:`PyTrace_C_EXCEPTION`" + +#: ../../c-api/init.rst:1484 +msgid ":const:`PyTrace_C_RETURN`" +msgstr ":const:`PyTrace_C_RETURN`" + +#: ../../c-api/init.rst:1486 +msgid ":const:`PyTrace_OPCODE`" +msgstr ":const:`PyTrace_OPCODE`" + +#: ../../c-api/init.rst:1491 +msgid "" +"The value of the *what* parameter to a :c:type:`Py_tracefunc` function when " +"a new call to a function or method is being reported, or a new entry into a " +"generator. Note that the creation of the iterator for a generator function " +"is not reported as there is no control transfer to the Python bytecode in " +"the corresponding frame." +msgstr "" +"当对一个函数或方法的新调用被报告,或是向一个生成器增加新条目时传给 :c:type:`Py_tracefunc` 函数的 *what* 形参的值。 " +"请注意针对生成器函数的迭代器的创建情况不会被报告因为在相应的帧中没有向 Python字节码转移控制权。" + +#: ../../c-api/init.rst:1500 +msgid "" +"The value of the *what* parameter to a :c:type:`Py_tracefunc` function when " +"an exception has been raised. The callback function is called with this " +"value for *what* when after any bytecode is processed after which the " +"exception becomes set within the frame being executed. The effect of this " +"is that as exception propagation causes the Python stack to unwind, the " +"callback is called upon return to each frame as the exception propagates. " +"Only trace functions receives these events; they are not needed by the " +"profiler." +msgstr "" +"当一个异常被引发时传给 :c:type:`Py_tracefunc` 函数的 *what* 形参的值。 在处理完任何字节码之后将附带 *what* " +"的值调用回调函数,在此之后该异常将会被设置在正在执行的帧中。 这样做的效果是当异常传播导致 Python " +"栈展开时,被调用的回调函数将随异常传播返回到每个帧。 只有跟踪函数才会接收到这些事件;性能分析器并不需要它们。" + +#: ../../c-api/init.rst:1511 +msgid "" +"The value passed as the *what* parameter to a :c:type:`Py_tracefunc` " +"function (but not a profiling function) when a line-number event is being " +"reported. It may be disabled for a frame by setting :attr:`f_trace_lines` to" +" *0* on that frame." +msgstr "" + +#: ../../c-api/init.rst:1518 +msgid "" +"The value for the *what* parameter to :c:type:`Py_tracefunc` functions when " +"a call is about to return." +msgstr "当一个调用即将返回时传给 :c:type:`Py_tracefunc` 函数的 *what* 形参的值。" + +#: ../../c-api/init.rst:1524 +msgid "" +"The value for the *what* parameter to :c:type:`Py_tracefunc` functions when " +"a C function is about to be called." +msgstr "当一个 C 函数即将被调用时传给 :c:type:`Py_tracefunc` 函数的 *what* 形参的值。" + +#: ../../c-api/init.rst:1530 +msgid "" +"The value for the *what* parameter to :c:type:`Py_tracefunc` functions when " +"a C function has raised an exception." +msgstr "当一个 C 函数引发异常时传给 :c:type:`Py_tracefunc` 函数的 *what* 形参的值。" + +#: ../../c-api/init.rst:1536 +msgid "" +"The value for the *what* parameter to :c:type:`Py_tracefunc` functions when " +"a C function has returned." +msgstr "当一个 C 函数返回时传给 :c:type:`Py_tracefunc` 函数的 *what* 形参的值。" + +#: ../../c-api/init.rst:1542 +msgid "" +"The value for the *what* parameter to :c:type:`Py_tracefunc` functions (but " +"not profiling functions) when a new opcode is about to be executed. This " +"event is not emitted by default: it must be explicitly requested by setting " +":attr:`f_trace_opcodes` to *1* on the frame." +msgstr "" + +#: ../../c-api/init.rst:1550 +msgid "" +"Set the profiler function to *func*. The *obj* parameter is passed to the " +"function as its first parameter, and may be any Python object, or ``NULL``." +" If the profile function needs to maintain state, using a different value " +"for *obj* for each thread provides a convenient and thread-safe place to " +"store it. The profile function is called for all monitored events except " +":const:`PyTrace_LINE` :const:`PyTrace_OPCODE` and " +":const:`PyTrace_EXCEPTION`." +msgstr "" + +#: ../../c-api/init.rst:1557 ../../c-api/init.rst:1569 +msgid "The caller must hold the :term:`GIL`." +msgstr "调用方必须持有 :term:`GIL`。" + +#: ../../c-api/init.rst:1562 +msgid "" +"Set the tracing function to *func*. This is similar to " +":c:func:`PyEval_SetProfile`, except the tracing function does receive line-" +"number events and per-opcode events, but does not receive any event related " +"to C function objects being called. Any trace function registered using " +":c:func:`PyEval_SetTrace` will not receive :const:`PyTrace_C_CALL`, " +":const:`PyTrace_C_EXCEPTION` or :const:`PyTrace_C_RETURN` as a value for the" +" *what* parameter." +msgstr "" + +#: ../../c-api/init.rst:1575 +msgid "Advanced Debugger Support" +msgstr "高级调试器支持" + +#: ../../c-api/init.rst:1580 +msgid "" +"These functions are only intended to be used by advanced debugging tools." +msgstr "这些函数仅供高级调试工具使用。" + +#: ../../c-api/init.rst:1585 +msgid "" +"Return the interpreter state object at the head of the list of all such " +"objects." +msgstr "将解释器状态对象返回到由所有此类对象组成的列表的开头。" + +#: ../../c-api/init.rst:1590 +msgid "Return the main interpreter state object." +msgstr "返回主解释器状态对象。" + +#: ../../c-api/init.rst:1595 +msgid "" +"Return the next interpreter state object after *interp* from the list of all" +" such objects." +msgstr "从由解释器状态对象组成的列表中返回 *interp* 之后的下一项。" + +#: ../../c-api/init.rst:1601 +msgid "" +"Return the pointer to the first :c:type:`PyThreadState` object in the list " +"of threads associated with the interpreter *interp*." +msgstr "在由与解释器 *interp* 相关联的线程组成的列表中返回指向第一个 :c:type:`PyThreadState` 对象的指针。" + +#: ../../c-api/init.rst:1607 +msgid "" +"Return the next thread state object after *tstate* from the list of all such" +" objects belonging to the same :c:type:`PyInterpreterState` object." +msgstr "" +"从由属于同一个 :c:type:`PyInterpreterState` 对象的线程状态对象组成的列表中返回 *tstate* 之后的下一项。" + +#: ../../c-api/init.rst:1614 +msgid "Thread Local Storage Support" +msgstr "线程本地存储支持" + +#: ../../c-api/init.rst:1618 +msgid "" +"The Python interpreter provides low-level support for thread-local storage " +"(TLS) which wraps the underlying native TLS implementation to support the " +"Python-level thread local storage API (:class:`threading.local`). The " +"CPython C level APIs are similar to those offered by pthreads and Windows: " +"use a thread key and functions to associate a :c:type:`void*` value per " +"thread." +msgstr "" + +#: ../../c-api/init.rst:1625 +msgid "" +"The GIL does *not* need to be held when calling these functions; they supply" +" their own locking." +msgstr "当调用这些函数时 *无须* 持有 GIL;它们会提供自己的锁机制。" + +#: ../../c-api/init.rst:1628 +msgid "" +"Note that :file:`Python.h` does not include the declaration of the TLS APIs," +" you need to include :file:`pythread.h` to use thread-local storage." +msgstr "" +"请注意 :file:`Python.h` 并不包括 TLS API 的声明,你需要包括 :file:`pythread.h` 来使用线程本地存储。" + +#: ../../c-api/init.rst:1632 +msgid "" +"None of these API functions handle memory management on behalf of the " +":c:type:`void*` values. You need to allocate and deallocate them yourself. " +"If the :c:type:`void*` values happen to be :c:type:`PyObject*`, these " +"functions don't do refcount operations on them either." +msgstr "" + +#: ../../c-api/init.rst:1640 +msgid "Thread Specific Storage (TSS) API" +msgstr "线程专属存储 (TSS) API" + +#: ../../c-api/init.rst:1642 +msgid "" +"TSS API is introduced to supersede the use of the existing TLS API within " +"the CPython interpreter. This API uses a new type :c:type:`Py_tss_t` " +"instead of :c:type:`int` to represent thread keys." +msgstr "" + +#: ../../c-api/init.rst:1648 +msgid "\"A New C-API for Thread-Local Storage in CPython\" (:pep:`539`)" +msgstr "\"A New C-API for Thread-Local Storage in CPython\" (:pep:`539`)" + +#: ../../c-api/init.rst:1653 +msgid "" +"This data structure represents the state of a thread key, the definition of " +"which may depend on the underlying TLS implementation, and it has an " +"internal field representing the key's initialization state. There are no " +"public members in this structure." +msgstr "该数据结构表示线程键的状态,其定义可能依赖于下层的 TLS 实现,并且它有一个表示键初始化状态的内部字段。 该结构体中不存在公有成员。" + +#: ../../c-api/init.rst:1658 +msgid "" +"When :ref:`Py_LIMITED_API ` is not defined, static allocation of " +"this type by :c:macro:`Py_tss_NEEDS_INIT` is allowed." +msgstr "" +"当未定义 :ref:`Py_LIMITED_API ` 时,允许由 :c:macro:`Py_tss_NEEDS_INIT` " +"执行此类型的静态分配。" + +#: ../../c-api/init.rst:1664 +msgid "" +"This macro expands to the initializer for :c:type:`Py_tss_t` variables. Note" +" that this macro won't be defined with :ref:`Py_LIMITED_API `." +msgstr "" +"这个宏将扩展为 :c:type:`Py_tss_t` 变量的初始化器。 请注意这个宏不会用 :ref:`Py_LIMITED_API `" +" 来定义。" + +#: ../../c-api/init.rst:1669 +msgid "Dynamic Allocation" +msgstr "动态分配" + +#: ../../c-api/init.rst:1671 +msgid "" +"Dynamic allocation of the :c:type:`Py_tss_t`, required in extension modules " +"built with :ref:`Py_LIMITED_API `, where static allocation of this " +"type is not possible due to its implementation being opaque at build time." +msgstr "" +":c:type:`Py_tss_t` 的动态分配,在使用 :ref:`Py_LIMITED_API ` " +"编译的扩展模块中是必须的,在这些模块由于此类型的实现在编译时是不透明的因此它不可能静态分配。" + +#: ../../c-api/init.rst:1678 +msgid "" +"Return a value which is the same state as a value initialized with " +":c:macro:`Py_tss_NEEDS_INIT`, or ``NULL`` in the case of dynamic allocation " +"failure." +msgstr "" +"返回一个与使用 :c:macro:`Py_tss_NEEDS_INIT` 初始化的值的状态相同的值,或者当动态分配失败时则返回 ``NULL``。" + +#: ../../c-api/init.rst:1685 +msgid "" +"Free the given *key* allocated by :c:func:`PyThread_tss_alloc`, after first " +"calling :c:func:`PyThread_tss_delete` to ensure any associated thread locals" +" have been unassigned. This is a no-op if the *key* argument is `NULL`." +msgstr "" + +#: ../../c-api/init.rst:1691 +msgid "" +"A freed key becomes a dangling pointer. You should reset the key to `NULL`." +msgstr "" + +#: ../../c-api/init.rst:1696 +msgid "Methods" +msgstr "方法" + +#: ../../c-api/init.rst:1698 +msgid "" +"The parameter *key* of these functions must not be ``NULL``. Moreover, the " +"behaviors of :c:func:`PyThread_tss_set` and :c:func:`PyThread_tss_get` are " +"undefined if the given :c:type:`Py_tss_t` has not been initialized by " +":c:func:`PyThread_tss_create`." +msgstr "" +"这些函数的形参 *key* 不可为 ``NULL``。 并且,如果给定的 :c:type:`Py_tss_t` 还未被 " +":c:func:`PyThread_tss_create` 初始化则 :c:func:`PyThread_tss_set` 和 " +":c:func:`PyThread_tss_get` 的行为将是未定义的。" + +#: ../../c-api/init.rst:1706 +msgid "" +"Return a non-zero value if the given :c:type:`Py_tss_t` has been initialized" +" by :c:func:`PyThread_tss_create`." +msgstr "" +"如果给定的 :c:type:`Py_tss_t` 已通过has been initialized by " +":c:func:`PyThread_tss_create` 被初始化则返回一个非零值。" + +#: ../../c-api/init.rst:1712 +msgid "" +"Return a zero value on successful initialization of a TSS key. The behavior" +" is undefined if the value pointed to by the *key* argument is not " +"initialized by :c:macro:`Py_tss_NEEDS_INIT`. This function can be called " +"repeatedly on the same key -- calling it on an already initialized key is a " +"no-op and immediately returns success." +msgstr "" +"当成功初始化一个 TSS 键时将返回零值。 如果 *key* 参数所指向的值未被 :c:macro:`Py_tss_NEEDS_INIT` " +"初始化则其行为是未定义的。 此函数可在相同的键上重复调用 -- 在已初始化的键上调用它将不执行任何操作并立即成功返回。" + +#: ../../c-api/init.rst:1721 +msgid "" +"Destroy a TSS key to forget the values associated with the key across all " +"threads, and change the key's initialization state to uninitialized. A " +"destroyed key is able to be initialized again by " +":c:func:`PyThread_tss_create`. This function can be called repeatedly on the" +" same key -- calling it on an already destroyed key is a no-op." +msgstr "" +"销毁一个 TSS 键以便在所有线程中遗忘与该键相关联的值,并将该键的初始化状态改为未初始化的。 已销毁的键可以通过 " +":c:func:`PyThread_tss_create` 再次被初始化。 此函数可以在同一个键上重复调用 -- 但在一个已被销毁的键上调用将是无效的。" + +#: ../../c-api/init.rst:1730 +msgid "" +"Return a zero value to indicate successfully associating a :c:type:`void*` " +"value with a TSS key in the current thread. Each thread has a distinct " +"mapping of the key to a :c:type:`void*` value." +msgstr "" + +#: ../../c-api/init.rst:1737 +msgid "" +"Return the :c:type:`void*` value associated with a TSS key in the current " +"thread. This returns ``NULL`` if no value is associated with the key in the" +" current thread." +msgstr "" + +#: ../../c-api/init.rst:1745 +msgid "Thread Local Storage (TLS) API" +msgstr "线程本地存储 (TLS) API" + +#: ../../c-api/init.rst:1747 +msgid "" +"This API is superseded by :ref:`Thread Specific Storage (TSS) API `." +msgstr "此 API 已被 :ref:`线程专属存储 (TSS) API ` 所取代。" + +#: ../../c-api/init.rst:1752 +msgid "" +"This version of the API does not support platforms where the native TLS key " +"is defined in a way that cannot be safely cast to ``int``. On such " +"platforms, :c:func:`PyThread_create_key` will return immediately with a " +"failure status, and the other TLS functions will all be no-ops on such " +"platforms." +msgstr "" +"这个 API 版本不支持原生 TLS 键采用无法被安全转换为 ``int`` 的的定义方式的平台。 " +"在这样的平台上,:c:func:`PyThread_create_key` 将立即返回一个失败状态,并且其他 TLS 函数在这样的平台上也都无效。" + +#: ../../c-api/init.rst:1757 +msgid "" +"Due to the compatibility problem noted above, this version of the API should" +" not be used in new code." +msgstr "由于上面提到的兼容性问题,不应在新代码中使用此版本的API。" diff --git a/c-api/init_config.po b/c-api/init_config.po new file mode 100644 index 000000000..df6e97e0d --- /dev/null +++ b/c-api/init_config.po @@ -0,0 +1,1466 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) 2001-2024, Python Software Foundation +# This file is distributed under the same license as the Python package. +# FIRST AUTHOR , YEAR. +# +# Translators: +# ppcfish , 2021 +# meowmeowcat , 2021 +# Lu , 2022 +# Rafael Fontenelle , 2024 +# Freesand Leo , 2024 +# +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: Python 3.9\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2024-04-26 21:29+0000\n" +"PO-Revision-Date: 2019-09-01 14:43+0000\n" +"Last-Translator: Freesand Leo , 2024\n" +"Language-Team: Chinese (China) (https://app.transifex.com/python-doc/teams/5390/zh_CN/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: zh_CN\n" +"Plural-Forms: nplurals=1; plural=0;\n" + +#: ../../c-api/init_config.rst:7 +msgid "Python Initialization Configuration" +msgstr "Python初始化配置" + +#: ../../c-api/init_config.rst:11 +msgid "Structures:" +msgstr "结构" + +#: ../../c-api/init_config.rst:13 +msgid ":c:type:`PyConfig`" +msgstr ":c:type:`PyConfig`" + +#: ../../c-api/init_config.rst:14 +msgid ":c:type:`PyPreConfig`" +msgstr ":c:type:`PyPreConfig`" + +#: ../../c-api/init_config.rst:15 +msgid ":c:type:`PyStatus`" +msgstr ":c:type:`PyStatus`" + +#: ../../c-api/init_config.rst:16 +msgid ":c:type:`PyWideStringList`" +msgstr ":c:type:`PyWideStringList`" + +#: ../../c-api/init_config.rst:18 +msgid "Functions:" +msgstr "函数" + +#: ../../c-api/init_config.rst:20 +msgid ":c:func:`PyConfig_Clear`" +msgstr ":c:func:`PyConfig_Clear`" + +#: ../../c-api/init_config.rst:21 +msgid ":c:func:`PyConfig_InitIsolatedConfig`" +msgstr ":c:func:`PyConfig_InitIsolatedConfig`" + +#: ../../c-api/init_config.rst:22 +msgid ":c:func:`PyConfig_InitPythonConfig`" +msgstr ":c:func:`PyConfig_InitPythonConfig`" + +#: ../../c-api/init_config.rst:23 +msgid ":c:func:`PyConfig_Read`" +msgstr ":c:func:`PyConfig_Read`" + +#: ../../c-api/init_config.rst:24 +msgid ":c:func:`PyConfig_SetArgv`" +msgstr ":c:func:`PyConfig_SetArgv`" + +#: ../../c-api/init_config.rst:25 +msgid ":c:func:`PyConfig_SetBytesArgv`" +msgstr ":c:func:`PyConfig_SetBytesArgv`" + +#: ../../c-api/init_config.rst:26 +msgid ":c:func:`PyConfig_SetBytesString`" +msgstr ":c:func:`PyConfig_SetBytesString`" + +#: ../../c-api/init_config.rst:27 +msgid ":c:func:`PyConfig_SetString`" +msgstr ":c:func:`PyConfig_SetString`" + +#: ../../c-api/init_config.rst:28 +msgid ":c:func:`PyConfig_SetWideStringList`" +msgstr ":c:func:`PyConfig_SetWideStringList`" + +#: ../../c-api/init_config.rst:29 +msgid ":c:func:`PyPreConfig_InitIsolatedConfig`" +msgstr ":c:func:`PyPreConfig_InitIsolatedConfig`" + +#: ../../c-api/init_config.rst:30 +msgid ":c:func:`PyPreConfig_InitPythonConfig`" +msgstr ":c:func:`PyPreConfig_InitPythonConfig`" + +#: ../../c-api/init_config.rst:31 +msgid ":c:func:`PyStatus_Error`" +msgstr ":c:func:`PyStatus_Error`" + +#: ../../c-api/init_config.rst:32 +msgid ":c:func:`PyStatus_Exception`" +msgstr ":c:func:`PyStatus_Exception`" + +#: ../../c-api/init_config.rst:33 +msgid ":c:func:`PyStatus_Exit`" +msgstr ":c:func:`PyStatus_Exit`" + +#: ../../c-api/init_config.rst:34 +msgid ":c:func:`PyStatus_IsError`" +msgstr ":c:func:`PyStatus_IsError`" + +#: ../../c-api/init_config.rst:35 +msgid ":c:func:`PyStatus_IsExit`" +msgstr ":c:func:`PyStatus_IsExit`" + +#: ../../c-api/init_config.rst:36 +msgid ":c:func:`PyStatus_NoMemory`" +msgstr ":c:func:`PyStatus_NoMemory`" + +#: ../../c-api/init_config.rst:37 +msgid ":c:func:`PyStatus_Ok`" +msgstr ":c:func:`PyStatus_Ok`" + +#: ../../c-api/init_config.rst:38 +msgid ":c:func:`PyWideStringList_Append`" +msgstr ":c:func:`PyWideStringList_Append`" + +#: ../../c-api/init_config.rst:39 +msgid ":c:func:`PyWideStringList_Insert`" +msgstr ":c:func:`PyWideStringList_Insert`" + +#: ../../c-api/init_config.rst:40 +msgid ":c:func:`Py_ExitStatusException`" +msgstr ":c:func:`Py_ExitStatusException`" + +#: ../../c-api/init_config.rst:41 +msgid ":c:func:`Py_InitializeFromConfig`" +msgstr ":c:func:`Py_InitializeFromConfig`" + +#: ../../c-api/init_config.rst:42 +msgid ":c:func:`Py_PreInitialize`" +msgstr ":c:func:`Py_PreInitialize`" + +#: ../../c-api/init_config.rst:43 +msgid ":c:func:`Py_PreInitializeFromArgs`" +msgstr ":c:func:`Py_PreInitializeFromArgs`" + +#: ../../c-api/init_config.rst:44 +msgid ":c:func:`Py_PreInitializeFromBytesArgs`" +msgstr ":c:func:`Py_PreInitializeFromBytesArgs`" + +#: ../../c-api/init_config.rst:45 +msgid ":c:func:`Py_RunMain`" +msgstr ":c:func:`Py_RunMain`" + +#: ../../c-api/init_config.rst:46 +msgid ":c:func:`Py_GetArgcArgv`" +msgstr ":c:func:`Py_GetArgcArgv`" + +#: ../../c-api/init_config.rst:48 +msgid "" +"The preconfiguration (``PyPreConfig`` type) is stored in " +"``_PyRuntime.preconfig`` and the configuration (``PyConfig`` type) is stored" +" in ``PyInterpreterState.config``." +msgstr "" + +#: ../../c-api/init_config.rst:52 +msgid "" +"See also :ref:`Initialization, Finalization, and Threads `." +msgstr "参见 :ref:`Initialization, Finalization, and Threads `." + +#: ../../c-api/init_config.rst:55 +msgid ":pep:`587` \"Python Initialization Configuration\"." +msgstr ":pep:`587` \"Python 初始化配置\"." + +#: ../../c-api/init_config.rst:59 +msgid "PyWideStringList" +msgstr "PyWideStringList" + +#: ../../c-api/init_config.rst:63 +msgid "List of ``wchar_t*`` strings." +msgstr "由 ``wchar_t*`` 字符串组成的列表。" + +#: ../../c-api/init_config.rst:65 +msgid "" +"If *length* is non-zero, *items* must be non-``NULL`` and all strings must " +"be non-``NULL``." +msgstr "如果 *length* 为非零值,则 *items* 必须不为 ``NULL`` 并且所有字符串均必须不为 ``NULL``。" + +#: ../../c-api/init_config.rst:68 +msgid "Methods:" +msgstr "方法" + +#: ../../c-api/init_config.rst:72 +msgid "Append *item* to *list*." +msgstr "将 *item* 添加到 *list*。" + +#: ../../c-api/init_config.rst:74 ../../c-api/init_config.rst:85 +msgid "Python must be preinitialized to call this function." +msgstr "Python 必须被预初始化以便调用此函数。" + +#: ../../c-api/init_config.rst:78 +msgid "Insert *item* into *list* at *index*." +msgstr "将 *item* 插入到 *list* 的 *index* 位置上。" + +#: ../../c-api/init_config.rst:80 +msgid "" +"If *index* is greater than or equal to *list* length, append *item* to " +"*list*." +msgstr "如果 *index* 大于等于 *list* 的长度,则将 *item* 添加到 *list*。" + +#: ../../c-api/init_config.rst:83 +msgid "*index* must be greater than or equal to 0." +msgstr "" + +#: ../../c-api/init_config.rst:87 ../../c-api/init_config.rst:107 +#: ../../c-api/init_config.rst:210 ../../c-api/init_config.rst:417 +msgid "Structure fields:" +msgstr "结构体字段:" + +#: ../../c-api/init_config.rst:91 +msgid "List length." +msgstr "List 长度。" + +#: ../../c-api/init_config.rst:95 +msgid "List items." +msgstr "列表项目。" + +#: ../../c-api/init_config.rst:98 +msgid "PyStatus" +msgstr "PyStatus" + +#: ../../c-api/init_config.rst:102 +msgid "" +"Structure to store an initialization function status: success, error or " +"exit." +msgstr "存储初始函数状态:成功、错误或退出的结构体。" + +#: ../../c-api/init_config.rst:105 +msgid "" +"For an error, it can store the C function name which created the error." +msgstr "对于错误,它可以存储造成错误的 C 函数的名称。" + +#: ../../c-api/init_config.rst:111 +msgid "Exit code. Argument passed to ``exit()``." +msgstr "退出码。 传给 ``exit()`` 的参数。" + +#: ../../c-api/init_config.rst:115 +msgid "Error message." +msgstr "错误信息" + +#: ../../c-api/init_config.rst:119 +msgid "Name of the function which created an error, can be ``NULL``." +msgstr "造成错误的函数的名称,可以为 ``NULL``。" + +#: ../../c-api/init_config.rst:121 +msgid "Functions to create a status:" +msgstr "创建状态的函数:" + +#: ../../c-api/init_config.rst:125 +msgid "Success." +msgstr "完成。" + +#: ../../c-api/init_config.rst:129 +msgid "Initialization error with a message." +msgstr "带消息的初始化错误。" + +#: ../../c-api/init_config.rst:133 +msgid "Memory allocation failure (out of memory)." +msgstr "内存分配失败(内存不足)。" + +#: ../../c-api/init_config.rst:137 +msgid "Exit Python with the specified exit code." +msgstr "以指定的退出代码退出 Python。" + +#: ../../c-api/init_config.rst:139 +msgid "Functions to handle a status:" +msgstr "处理状态的函数:" + +#: ../../c-api/init_config.rst:143 +msgid "" +"Is the status an error or an exit? If true, the exception must be handled; " +"by calling :c:func:`Py_ExitStatusException` for example." +msgstr "状态为错误还是退出?如为真值,则异常必须被处理;例如通过调用 :c:func:`Py_ExitStatusException`。" + +#: ../../c-api/init_config.rst:148 +msgid "Is the result an error?" +msgstr "结果错误吗?" + +#: ../../c-api/init_config.rst:152 +msgid "Is the result an exit?" +msgstr "结果是否退出?" + +#: ../../c-api/init_config.rst:156 +msgid "" +"Call ``exit(exitcode)`` if *status* is an exit. Print the error message and " +"exit with a non-zero exit code if *status* is an error. Must only be called" +" if ``PyStatus_Exception(status)`` is non-zero." +msgstr "" +"如果 *status* 是一个退出码则调用 ``exit(exitcode)``。如果 *status* " +"是一个错误码则打印错误消息并设置一个非零退出码再退出。 必须在 ``PyStatus_Exception(status)`` 为非零值时才能被调用。" + +#: ../../c-api/init_config.rst:161 +msgid "" +"Internally, Python uses macros which set ``PyStatus.func``, whereas " +"functions to create a status set ``func`` to ``NULL``." +msgstr "" +"在内部,Python 将使用设置 ``PyStatus.func`` 的宏,而创建状态的函数则会将 ``func`` 设为 ``NULL``。" + +#: ../../c-api/init_config.rst:164 +msgid "Example::" +msgstr "示例::" + +#: ../../c-api/init_config.rst:188 +msgid "PyPreConfig" +msgstr "PyPreConfig" + +#: ../../c-api/init_config.rst:192 +msgid "Structure used to preinitialize Python:" +msgstr "" + +#: ../../c-api/init_config.rst:194 +msgid "Set the Python memory allocator" +msgstr "" + +#: ../../c-api/init_config.rst:195 +msgid "Configure the LC_CTYPE locale" +msgstr "" + +#: ../../c-api/init_config.rst:196 +msgid "Set the UTF-8 mode" +msgstr "设置为 UTF-8 模式" + +#: ../../c-api/init_config.rst:198 +msgid "Function to initialize a preconfiguration:" +msgstr "用于初始化预先配置的函数:" + +#: ../../c-api/init_config.rst:202 +msgid "" +"Initialize the preconfiguration with :ref:`Python Configuration `." +msgstr "通过 :ref:`Python 配置 ` 来初始化预先配置。" + +#: ../../c-api/init_config.rst:207 +msgid "" +"Initialize the preconfiguration with :ref:`Isolated Configuration `." +msgstr "通过 :ref:`隔离配置 ` 来初始化预先配置。" + +#: ../../c-api/init_config.rst:214 +msgid "Name of the memory allocator:" +msgstr "" + +#: ../../c-api/init_config.rst:216 +msgid "" +"``PYMEM_ALLOCATOR_NOT_SET`` (``0``): don't change memory allocators (use " +"defaults)" +msgstr "" + +#: ../../c-api/init_config.rst:218 +msgid "``PYMEM_ALLOCATOR_DEFAULT`` (``1``): default memory allocators" +msgstr "" + +#: ../../c-api/init_config.rst:219 +msgid "" +"``PYMEM_ALLOCATOR_DEBUG`` (``2``): default memory allocators with debug " +"hooks" +msgstr "" + +#: ../../c-api/init_config.rst:221 +msgid "``PYMEM_ALLOCATOR_MALLOC`` (``3``): force usage of ``malloc()``" +msgstr "" + +#: ../../c-api/init_config.rst:222 +msgid "" +"``PYMEM_ALLOCATOR_MALLOC_DEBUG`` (``4``): force usage of ``malloc()`` with " +"debug hooks" +msgstr "" + +#: ../../c-api/init_config.rst:224 +msgid "" +"``PYMEM_ALLOCATOR_PYMALLOC`` (``5``): :ref:`Python pymalloc memory allocator" +" `" +msgstr "" + +#: ../../c-api/init_config.rst:226 +msgid "" +"``PYMEM_ALLOCATOR_PYMALLOC_DEBUG`` (``6``): :ref:`Python pymalloc memory " +"allocator ` with debug hooks" +msgstr "" + +#: ../../c-api/init_config.rst:229 +msgid "" +"``PYMEM_ALLOCATOR_PYMALLOC`` and ``PYMEM_ALLOCATOR_PYMALLOC_DEBUG`` are not " +"supported if Python is configured using ``--without-pymalloc``" +msgstr "" + +#: ../../c-api/init_config.rst:232 +msgid "See :ref:`Memory Management `." +msgstr "参见 :ref:`Memory Management `." + +#: ../../c-api/init_config.rst:236 +msgid "" +"Set the LC_CTYPE locale to the user preferred locale? If equals to 0, set " +":c:member:`coerce_c_locale` and :c:member:`coerce_c_locale_warn` to 0." +msgstr "" + +#: ../../c-api/init_config.rst:241 +msgid "" +"If equals to 2, coerce the C locale; if equals to 1, read the LC_CTYPE " +"locale to decide if it should be coerced." +msgstr "" + +#: ../../c-api/init_config.rst:246 +msgid "If non-zero, emit a warning if the C locale is coerced." +msgstr "如为非零值,则会在 C 语言区域被强制转换时发出警告。" + +#: ../../c-api/init_config.rst:250 +msgid "See :c:member:`PyConfig.dev_mode`." +msgstr "参见 :c:member:`PyConfig.dev_mode`." + +#: ../../c-api/init_config.rst:254 +msgid "See :c:member:`PyConfig.isolated`." +msgstr "参见 :c:member:`PyConfig.isolated`." + +#: ../../c-api/init_config.rst:258 +msgid "" +"If non-zero, disable UTF-8 Mode, set the Python filesystem encoding to " +"``mbcs``, set the filesystem error handler to ``replace``." +msgstr "" + +#: ../../c-api/init_config.rst:261 ../../c-api/init_config.rst:555 +msgid "" +"Only available on Windows. ``#ifdef MS_WINDOWS`` macro can be used for " +"Windows specific code." +msgstr "仅在 Windows 上可用。 ``#ifdef MS_WINDOWS`` 宏可被用于 Windows 专属的代码。" + +#: ../../c-api/init_config.rst:266 +msgid "" +"If non-zero, :c:func:`Py_PreInitializeFromArgs` and " +":c:func:`Py_PreInitializeFromBytesArgs` parse their ``argv`` argument the " +"same way the regular Python parses command line arguments: see :ref:`Command" +" Line Arguments `." +msgstr "" +"如为非零值,:c:func:`Py_PreInitializeFromArgs` 和 " +":c:func:`Py_PreInitializeFromBytesArgs` 将以与常规 Python 解析命令行参数的相同方式解析其 " +"``argv`` 参数:参见 :ref:`命令行参数 `。" + +#: ../../c-api/init_config.rst:273 +msgid "See :c:member:`PyConfig.use_environment`." +msgstr "参见 :c:member:`PyConfig.use_environment`." + +#: ../../c-api/init_config.rst:277 +msgid "If non-zero, enable the UTF-8 mode." +msgstr "" + +#: ../../c-api/init_config.rst:280 +msgid "Preinitialization with PyPreConfig" +msgstr "" + +#: ../../c-api/init_config.rst:282 +msgid "Functions to preinitialize Python:" +msgstr "用于预初始化 Python 的函数:" + +#: ../../c-api/init_config.rst:286 +msgid "Preinitialize Python from *preconfig* preconfiguration." +msgstr "根据 *preconfig* 预配置来预初始化 Python。" + +#: ../../c-api/init_config.rst:290 +msgid "" +"Preinitialize Python from *preconfig* preconfiguration and command line " +"arguments (bytes strings)." +msgstr "" + +#: ../../c-api/init_config.rst:295 +msgid "" +"Preinitialize Python from *preconfig* preconfiguration and command line " +"arguments (wide strings)." +msgstr "" + +#: ../../c-api/init_config.rst:298 ../../c-api/init_config.rst:730 +msgid "" +"The caller is responsible to handle exceptions (error or exit) using " +":c:func:`PyStatus_Exception` and :c:func:`Py_ExitStatusException`." +msgstr "" +"调用方要负责使用 :c:func:`PyStatus_Exception` 和 :c:func:`Py_ExitStatusException` " +"来处理异常(错误或退出)。" + +#: ../../c-api/init_config.rst:301 +msgid "" +"For :ref:`Python Configuration ` " +"(:c:func:`PyPreConfig_InitPythonConfig`), if Python is initialized with " +"command line arguments, the command line arguments must also be passed to " +"preinitialize Python, since they have an effect on the pre-configuration " +"like encodings. For example, the :option:`-X utf8 <-X>` command line option " +"enables the UTF-8 Mode." +msgstr "" + +#: ../../c-api/init_config.rst:308 +msgid "" +"``PyMem_SetAllocator()`` can be called after :c:func:`Py_PreInitialize` and " +"before :c:func:`Py_InitializeFromConfig` to install a custom memory " +"allocator. It can be called before :c:func:`Py_PreInitialize` if " +":c:member:`PyPreConfig.allocator` is set to ``PYMEM_ALLOCATOR_NOT_SET``." +msgstr "" +"``PyMem_SetAllocator()`` 可在 :c:func:`Py_PreInitialize` " +"之后、:c:func:`Py_InitializeFromConfig` 之前被调用以安装自定义的内存分配器。 如果 " +":c:member:`PyPreConfig.allocator` 被设为 ``PYMEM_ALLOCATOR_NOT_SET`` 则可在 " +":c:func:`Py_PreInitialize` 之前被调用。" + +#: ../../c-api/init_config.rst:313 +msgid "" +"Python memory allocation functions like :c:func:`PyMem_RawMalloc` must not " +"be used before Python preinitialization, whereas calling directly " +"``malloc()`` and ``free()`` is always safe. :c:func:`Py_DecodeLocale` must " +"not be called before the preinitialization." +msgstr "" + +#: ../../c-api/init_config.rst:318 +msgid "Example using the preinitialization to enable the UTF-8 Mode::" +msgstr "" + +#: ../../c-api/init_config.rst:339 +msgid "PyConfig" +msgstr "PyConfig" + +#: ../../c-api/init_config.rst:343 +msgid "Structure containing most parameters to configure Python." +msgstr "包含了大部分用于配置 Python 的形参的结构体。" + +#: ../../c-api/init_config.rst:345 +msgid "Structure methods:" +msgstr "结构体方法:" + +#: ../../c-api/init_config.rst:349 +msgid "" +"Initialize configuration with :ref:`Python Configuration `." +msgstr "" + +#: ../../c-api/init_config.rst:354 +msgid "" +"Initialize configuration with :ref:`Isolated Configuration `." +msgstr "" + +#: ../../c-api/init_config.rst:359 +msgid "Copy the wide character string *str* into ``*config_str``." +msgstr "将宽字符串 *str* 拷贝至 ``*config_str``。" + +#: ../../c-api/init_config.rst:361 ../../c-api/init_config.rst:367 +#: ../../c-api/init_config.rst:373 ../../c-api/init_config.rst:379 +#: ../../c-api/init_config.rst:385 ../../c-api/init_config.rst:393 +msgid "Preinitialize Python if needed." +msgstr "" + +#: ../../c-api/init_config.rst:365 +msgid "" +"Decode *str* using ``Py_DecodeLocale()`` and set the result into " +"``*config_str``." +msgstr "" + +#: ../../c-api/init_config.rst:371 +msgid "Set command line arguments from wide character strings." +msgstr "" + +#: ../../c-api/init_config.rst:377 +msgid "" +"Set command line arguments: decode bytes using :c:func:`Py_DecodeLocale`." +msgstr "" + +#: ../../c-api/init_config.rst:383 +msgid "Set the list of wide strings *list* to *length* and *items*." +msgstr "将宽字符串列表 *list* 设置为 *length* 和 *items*。" + +#: ../../c-api/init_config.rst:389 +msgid "Read all Python configuration." +msgstr "读取所有 Python 配置。" + +#: ../../c-api/init_config.rst:391 +msgid "Fields which are already initialized are left unchanged." +msgstr "已经初始化的字段会保持不变。" + +#: ../../c-api/init_config.rst:397 +msgid "Release configuration memory." +msgstr "释放配置内存" + +#: ../../c-api/init_config.rst:399 +msgid "" +"Most ``PyConfig`` methods preinitialize Python if needed. In that case, the " +"Python preinitialization configuration in based on the :c:type:`PyConfig`. " +"If configuration fields which are in common with :c:type:`PyPreConfig` are " +"tuned, they must be set before calling a :c:type:`PyConfig` method:" +msgstr "" + +#: ../../c-api/init_config.rst:404 +msgid ":c:member:`~PyConfig.dev_mode`" +msgstr ":c:member:`~PyConfig.dev_mode`" + +#: ../../c-api/init_config.rst:405 +msgid ":c:member:`~PyConfig.isolated`" +msgstr ":c:member:`~PyConfig.isolated`" + +#: ../../c-api/init_config.rst:406 +msgid ":c:member:`~PyConfig.parse_argv`" +msgstr ":c:member:`~PyConfig.parse_argv`" + +#: ../../c-api/init_config.rst:407 +msgid ":c:member:`~PyConfig.use_environment`" +msgstr ":c:member:`~PyConfig.use_environment`" + +#: ../../c-api/init_config.rst:409 +msgid "" +"Moreover, if :c:func:`PyConfig_SetArgv` or :c:func:`PyConfig_SetBytesArgv` " +"is used, this method must be called first, before other methods, since the " +"preinitialization configuration depends on command line arguments (if " +":c:member:`parse_argv` is non-zero)." +msgstr "" + +#: ../../c-api/init_config.rst:414 +msgid "" +"The caller of these methods is responsible to handle exceptions (error or " +"exit) using ``PyStatus_Exception()`` and ``Py_ExitStatusException()``." +msgstr "" +"这些方法的调用者要负责使用 ``PyStatus_Exception()`` 和 ``Py_ExitStatusException()`` " +"来处理异常(错误或退出)。" + +#: ../../c-api/init_config.rst:421 +msgid "" +"Command line arguments, :data:`sys.argv`. See " +":c:member:`~PyConfig.parse_argv` to parse :c:member:`~PyConfig.argv` the " +"same way the regular Python parses Python command line arguments. If " +":c:member:`~PyConfig.argv` is empty, an empty string is added to ensure that" +" :data:`sys.argv` always exists and is never empty." +msgstr "" + +#: ../../c-api/init_config.rst:429 +msgid ":data:`sys.base_exec_prefix`." +msgstr ":data:`sys.base_exec_prefix`." + +#: ../../c-api/init_config.rst:433 +msgid "" +":data:`sys._base_executable`: ``__PYVENV_LAUNCHER__`` environment variable " +"value, or copy of :c:member:`PyConfig.executable`." +msgstr "" + +#: ../../c-api/init_config.rst:438 +msgid ":data:`sys.base_prefix`." +msgstr ":data:`sys.base_prefix`." + +#: ../../c-api/init_config.rst:442 +msgid "" +":data:`sys.platlibdir`: platform library directory name, set at configure " +"time by ``--with-platlibdir``, overrideable by the ``PYTHONPLATLIBDIR`` " +"environment variable." +msgstr "" + +#: ../../c-api/init_config.rst:450 +msgid "" +"If equals to 0, enable unbuffered mode, making the stdout and stderr streams" +" unbuffered." +msgstr "" + +#: ../../c-api/init_config.rst:453 +msgid "stdin is always opened in buffered mode." +msgstr "stdin 始终以缓冲模式打开。" + +#: ../../c-api/init_config.rst:457 +msgid "" +"If equals to 1, issue a warning when comparing :class:`bytes` or " +":class:`bytearray` with :class:`str`, or comparing :class:`bytes` with " +":class:`int`. If equal or greater to 2, raise a :exc:`BytesWarning` " +"exception." +msgstr "" + +#: ../../c-api/init_config.rst:464 +msgid "" +"Control the validation behavior of hash-based ``.pyc`` files (see " +":pep:`552`): :option:`--check-hash-based-pycs` command line option value." +msgstr "" + +#: ../../c-api/init_config.rst:467 +msgid "Valid values: ``always``, ``never`` and ``default``." +msgstr "" + +#: ../../c-api/init_config.rst:469 +msgid "The default value is: ``default``." +msgstr "默认值为: ``default``." + +#: ../../c-api/init_config.rst:473 +msgid "" +"If non-zero, configure C standard streams (``stdio``, ``stdout``, " +"``stdout``). For example, set their mode to ``O_BINARY`` on Windows." +msgstr "" + +#: ../../c-api/init_config.rst:478 +msgid "If non-zero, enable the :ref:`Python Development Mode `." +msgstr "如果为非零值,则启用 :ref:`Python 开发模式 `。" + +#: ../../c-api/init_config.rst:482 +msgid "If non-zero, dump all objects which are still alive at exit." +msgstr "如果为非零值,则转储所有在退出时仍存活的对象。" + +#: ../../c-api/init_config.rst:484 +msgid "``Py_TRACE_REFS`` macro must be defined in build." +msgstr "" + +#: ../../c-api/init_config.rst:488 +msgid ":data:`sys.exec_prefix`." +msgstr ":data:`sys.exec_prefix`." + +#: ../../c-api/init_config.rst:492 +msgid ":data:`sys.executable`." +msgstr ":data:`sys.executable`." + +#: ../../c-api/init_config.rst:496 +msgid "If non-zero, call :func:`faulthandler.enable` at startup." +msgstr "如果为非零值,则在启动时调用 :func:`faulthandler.enable`。" + +#: ../../c-api/init_config.rst:500 +msgid "Filesystem encoding, :func:`sys.getfilesystemencoding`." +msgstr "" + +#: ../../c-api/init_config.rst:504 +msgid "Filesystem encoding errors, :func:`sys.getfilesystemencodeerrors`." +msgstr "" + +#: ../../c-api/init_config.rst:509 +msgid "Randomized hash function seed." +msgstr "随机化的哈希函数种子。" + +#: ../../c-api/init_config.rst:511 +msgid "" +"If :c:member:`~PyConfig.use_hash_seed` is zero, a seed is chosen randomly at" +" Pythonstartup, and :c:member:`~PyConfig.hash_seed` is ignored." +msgstr "" + +#: ../../c-api/init_config.rst:516 +msgid "Python home directory." +msgstr "Python 主目录。" + +#: ../../c-api/init_config.rst:518 +msgid "" +"Initialized from :envvar:`PYTHONHOME` environment variable value by default." +msgstr "" + +#: ../../c-api/init_config.rst:523 +msgid "If non-zero, profile import time." +msgstr "如为非零值,则对导入时间执行性能分析。" + +#: ../../c-api/init_config.rst:527 +msgid "Enter interactive mode after executing a script or a command." +msgstr "在执行脚本或命令之后进入交互模式。" + +#: ../../c-api/init_config.rst:531 +msgid "Install signal handlers?" +msgstr "" + +#: ../../c-api/init_config.rst:535 +msgid "Interactive mode." +msgstr "交互模式" + +#: ../../c-api/init_config.rst:539 +msgid "If greater than 0, enable isolated mode:" +msgstr "" + +#: ../../c-api/init_config.rst:541 +msgid "" +":data:`sys.path` contains neither the script's directory (computed from " +"``argv[0]`` or the current directory) nor the user's site-packages " +"directory." +msgstr "" + +#: ../../c-api/init_config.rst:544 +msgid "" +"Python REPL doesn't import :mod:`readline` nor enable default readline " +"configuration on interactive prompts." +msgstr "Python REPL 将不导入 :mod:`readline` 也不在交互提示符中启用默认的 readline 配置。" + +#: ../../c-api/init_config.rst:546 +msgid "" +"Set :c:member:`~PyConfig.use_environment` and " +":c:member:`~PyConfig.user_site_directory` to 0." +msgstr "" + +#: ../../c-api/init_config.rst:551 +msgid "" +"If non-zero, use :class:`io.FileIO` instead of :class:`io.WindowsConsoleIO` " +"for :data:`sys.stdin`, :data:`sys.stdout` and :data:`sys.stderr`." +msgstr "" + +#: ../../c-api/init_config.rst:560 +msgid "" +"If non-zero, dump statistics on :ref:`Python pymalloc memory allocator " +"` at exit." +msgstr "如为非零值,则在退出时转储 :ref:`Python pymalloc 内存分配器 ` 的统计数据。" + +#: ../../c-api/init_config.rst:563 +msgid "The option is ignored if Python is built using ``--without-pymalloc``." +msgstr "" + +#: ../../c-api/init_config.rst:567 +msgid "" +"Module search paths as a string separated by ``DELIM`` " +"(:data:`os.path.pathsep`)." +msgstr "" + +#: ../../c-api/init_config.rst:570 +msgid "" +"Initialized from :envvar:`PYTHONPATH` environment variable value by default." +msgstr "" + +#: ../../c-api/init_config.rst:576 +msgid "" +":data:`sys.path`. If :c:member:`~PyConfig.module_search_paths_set` is equal " +"to 0, the :c:member:`~PyConfig.module_search_paths` is overridden by the " +"function calculating the :ref:`Path Configuration `." +msgstr "" + +#: ../../c-api/init_config.rst:583 +msgid "Compilation optimization level:" +msgstr "编译优化级别:" + +#: ../../c-api/init_config.rst:585 +msgid "0: Peephole optimizer (and ``__debug__`` is set to ``True``)" +msgstr "" + +#: ../../c-api/init_config.rst:586 +msgid "1: Remove assertions, set ``__debug__`` to ``False``" +msgstr "" + +#: ../../c-api/init_config.rst:587 +msgid "2: Strip docstrings" +msgstr "" + +#: ../../c-api/init_config.rst:591 +msgid "" +"If non-zero, parse :c:member:`~PyConfig.argv` the same way the regular " +"Python command line arguments, and strip Python arguments from " +":c:member:`~PyConfig.argv`: see :ref:`Command Line Arguments `." +msgstr "" + +#: ../../c-api/init_config.rst:598 +msgid "" +"If non-zero, turn on parser debugging output (for expert only, depending on " +"compilation options)." +msgstr "" + +#: ../../c-api/init_config.rst:603 +msgid "" +"If equal to 0, suppress warnings when calculating the :ref:`Path " +"Configuration ` (Unix only, Windows does not log any " +"warning). Otherwise, warnings are written into ``stderr``." +msgstr "" + +#: ../../c-api/init_config.rst:609 +msgid ":data:`sys.prefix`." +msgstr ":data:`sys.prefix`." + +#: ../../c-api/init_config.rst:613 +msgid "" +"Program name. Used to initialize :c:member:`~PyConfig.executable`, and in " +"early error messages." +msgstr "" + +#: ../../c-api/init_config.rst:618 +msgid ":data:`sys.pycache_prefix`: ``.pyc`` cache prefix." +msgstr "" + +#: ../../c-api/init_config.rst:620 +msgid "If ``NULL``, :data:`sys.pycache_prefix` is set to ``None``." +msgstr "如果为 ``NULL``,则 :data:`sys.pycache_prefix` 将被设为 ``None``。" + +#: ../../c-api/init_config.rst:624 +msgid "" +"Quiet mode. For example, don't display the copyright and version messages in" +" interactive mode." +msgstr "" + +#: ../../c-api/init_config.rst:629 +msgid "``python3 -c COMMAND`` argument. Used by :c:func:`Py_RunMain`." +msgstr "" + +#: ../../c-api/init_config.rst:633 +msgid "``python3 FILENAME`` argument. Used by :c:func:`Py_RunMain`." +msgstr "" + +#: ../../c-api/init_config.rst:637 +msgid "``python3 -m MODULE`` argument. Used by :c:func:`Py_RunMain`." +msgstr "" + +#: ../../c-api/init_config.rst:641 +msgid "Show total reference count at exit?" +msgstr "在退出时显示引用总数?" + +#: ../../c-api/init_config.rst:643 +msgid "Set to 1 by :option:`-X showrefcount <-X>` command line option." +msgstr "" + +#: ../../c-api/init_config.rst:645 +msgid "Need a debug build of Python (``Py_REF_DEBUG`` macro must be defined)." +msgstr "" + +#: ../../c-api/init_config.rst:649 +msgid "Import the :mod:`site` module at startup?" +msgstr "在启动时导入 :mod:`site` 模块?" + +#: ../../c-api/init_config.rst:653 +msgid "Skip the first line of the source?" +msgstr "" + +#: ../../c-api/init_config.rst:658 +msgid "" +"Encoding and encoding errors of :data:`sys.stdin`, :data:`sys.stdout` and " +":data:`sys.stderr`." +msgstr "" + +#: ../../c-api/init_config.rst:663 +msgid "If non-zero, call :func:`tracemalloc.start` at startup." +msgstr "如果为非零值,则在启动时调用 :func:`tracemalloc.start`。" + +#: ../../c-api/init_config.rst:667 +msgid "" +"If greater than 0, use :ref:`environment variables `." +msgstr "" + +#: ../../c-api/init_config.rst:671 +msgid "If non-zero, add user site directory to :data:`sys.path`." +msgstr "" + +#: ../../c-api/init_config.rst:675 +msgid "If non-zero, enable verbose mode." +msgstr "" + +#: ../../c-api/init_config.rst:679 +msgid "" +":data:`sys.warnoptions`: options of the :mod:`warnings` module to build " +"warnings filters: lowest to highest priority." +msgstr "" + +#: ../../c-api/init_config.rst:682 +msgid "" +"The :mod:`warnings` module adds :data:`sys.warnoptions` in the reverse " +"order: the last :c:member:`PyConfig.warnoptions` item becomes the first item" +" of :data:`warnings.filters` which is checked first (highest priority)." +msgstr "" +":mod:`warnings` 模块以相反的顺序添加 :data:`sys.warnoptions`: 最后一个 " +":c:member:`PyConfig.warnoptions` 条目将成为 :data:`warnings.filters` " +"的第一个条目并将最先被检查(最高优先级)。" + +#: ../../c-api/init_config.rst:689 +msgid "If non-zero, write ``.pyc`` files." +msgstr "" + +#: ../../c-api/init_config.rst:691 +msgid "" +":data:`sys.dont_write_bytecode` is initialized to the inverted value of " +":c:member:`~PyConfig.write_bytecode`." +msgstr "" +":data:`sys.dont_write_bytecode` 会被初始化为 :c:member:`~PyConfig.write_bytecode` " +"取反后的值。" + +#: ../../c-api/init_config.rst:696 +msgid ":data:`sys._xoptions`." +msgstr ":data:`sys._xoptions`." + +#: ../../c-api/init_config.rst:700 +msgid "Enable PEG parser? Default: 1." +msgstr "" + +#: ../../c-api/init_config.rst:702 +msgid "Set to 0 by :option:`-X oldparser <-X>` and :envvar:`PYTHONOLDPARSER`." +msgstr "" + +#: ../../c-api/init_config.rst:704 +msgid "See also :pep:`617`." +msgstr "参见 :pep:`617`。" + +#: ../../c-api/init_config.rst:708 +msgid "" +"If ``parse_argv`` is non-zero, ``argv`` arguments are parsed the same way " +"the regular Python parses command line arguments, and Python arguments are " +"stripped from ``argv``: see :ref:`Command Line Arguments `." +msgstr "" + +#: ../../c-api/init_config.rst:713 +msgid "" +"The ``xoptions`` options are parsed to set other options: see :option:`-X` " +"option." +msgstr "" + +#: ../../c-api/init_config.rst:718 +msgid "The ``show_alloc_count`` field has been removed." +msgstr "``show_alloc_count`` 字段已被移除。" + +#: ../../c-api/init_config.rst:722 +msgid "Initialization with PyConfig" +msgstr "使用 PyConfig 初始化" + +#: ../../c-api/init_config.rst:724 +msgid "Function to initialize Python:" +msgstr "用于初始化 Python 的函数:" + +#: ../../c-api/init_config.rst:728 +msgid "Initialize Python from *config* configuration." +msgstr "根据 *config* 配置来初始化 Python。" + +#: ../../c-api/init_config.rst:733 +msgid "" +"If :c:func:`PyImport_FrozenModules`, :c:func:`PyImport_AppendInittab` or " +":c:func:`PyImport_ExtendInittab` are used, they must be set or called after " +"Python preinitialization and before the Python initialization. If Python is " +"initialized multiple times, :c:func:`PyImport_AppendInittab` or " +":c:func:`PyImport_ExtendInittab` must be called before each Python " +"initialization." +msgstr "" +"如果使用了 :c:func:`PyImport_FrozenModules`、:c:func:`PyImport_AppendInittab` 或 " +":c:func:`PyImport_ExtendInittab`,则必须在 Python 预初始化之后、Python 初始化之前设置或调用它们。 如果 " +"Python 被多次初始化,则必须在每次初始化 Python 之前调用 :c:func:`PyImport_AppendInittab` 或 " +":c:func:`PyImport_ExtendInittab`。" + +#: ../../c-api/init_config.rst:740 +msgid "Example setting the program name::" +msgstr "设置程序名称的示例::" + +#: ../../c-api/init_config.rst:768 +msgid "" +"More complete example modifying the default configuration, read the " +"configuration, and then override some parameters::" +msgstr "" + +#: ../../c-api/init_config.rst:819 +msgid "Isolated Configuration" +msgstr "隔离配置" + +#: ../../c-api/init_config.rst:821 +msgid "" +":c:func:`PyPreConfig_InitIsolatedConfig` and " +":c:func:`PyConfig_InitIsolatedConfig` functions create a configuration to " +"isolate Python from the system. For example, to embed Python into an " +"application." +msgstr "" +":c:func:`PyPreConfig_InitIsolatedConfig` 和 " +":c:func:`PyConfig_InitIsolatedConfig` 函数会创建一个配置来将 Python 与系统隔离开来。 例如,将 " +"Python 嵌入到某个应用程序。" + +#: ../../c-api/init_config.rst:826 +msgid "" +"This configuration ignores global configuration variables, environment " +"variables, command line arguments (:c:member:`PyConfig.argv` is not parsed) " +"and user site directory. The C standard streams (ex: ``stdout``) and the " +"LC_CTYPE locale are left unchanged. Signal handlers are not installed." +msgstr "" +"该配置将忽略全局配置变量、环境变量、命令行参数 (:c:member:`PyConfig.argv` 将不会被解析) 和用户站点目录。 C 标准流 " +"(例如 ``stdout``) 和 LC_CTYPE 语言区域将保持不变。 信号处理器将不会被安装。" + +#: ../../c-api/init_config.rst:831 +msgid "" +"Configuration files are still used with this configuration. Set the " +":ref:`Path Configuration ` (\"output fields\") to ignore " +"these configuration files and avoid the function computing the default path " +"configuration." +msgstr "" + +#: ../../c-api/init_config.rst:840 +msgid "Python Configuration" +msgstr "Python 配置" + +#: ../../c-api/init_config.rst:842 +msgid "" +":c:func:`PyPreConfig_InitPythonConfig` and " +":c:func:`PyConfig_InitPythonConfig` functions create a configuration to " +"build a customized Python which behaves as the regular Python." +msgstr "" +":c:func:`PyPreConfig_InitPythonConfig` 和 :c:func:`PyConfig_InitPythonConfig`" +" 函数会创建一个配置来构建一个行为与常规 Python 相同的自定义 Python。" + +#: ../../c-api/init_config.rst:846 +msgid "" +"Environments variables and command line arguments are used to configure " +"Python, whereas global configuration variables are ignored." +msgstr "环境变量和命令行参数将被用于配置 Python,而全局配置变量将被忽略。" + +#: ../../c-api/init_config.rst:849 +msgid "" +"This function enables C locale coercion (:pep:`538`) and UTF-8 Mode " +"(:pep:`540`) depending on the LC_CTYPE locale, :envvar:`PYTHONUTF8` and " +":envvar:`PYTHONCOERCECLOCALE` environment variables." +msgstr "" + +#: ../../c-api/init_config.rst:853 +msgid "Example of customized Python always running in isolated mode::" +msgstr "定制的 Python 的示例总是会以隔离模式运行::" + +#: ../../c-api/init_config.rst:892 +msgid "Path Configuration" +msgstr "路径配置" + +#: ../../c-api/init_config.rst:894 +msgid "" +":c:type:`PyConfig` contains multiple fields for the path configuration:" +msgstr ":c:type:`PyConfig` 包含多个用于路径配置的字段:" + +#: ../../c-api/init_config.rst:896 +msgid "Path configuration inputs:" +msgstr "路径配置输入:" + +#: ../../c-api/init_config.rst:898 +msgid ":c:member:`PyConfig.home`" +msgstr ":c:member:`PyConfig.home`" + +#: ../../c-api/init_config.rst:899 +msgid ":c:member:`PyConfig.platlibdir`" +msgstr ":c:member:`PyConfig.platlibdir`" + +#: ../../c-api/init_config.rst:900 +msgid ":c:member:`PyConfig.pathconfig_warnings`" +msgstr ":c:member:`PyConfig.pathconfig_warnings`" + +#: ../../c-api/init_config.rst:901 +msgid ":c:member:`PyConfig.program_name`" +msgstr ":c:member:`PyConfig.program_name`" + +#: ../../c-api/init_config.rst:902 +msgid ":c:member:`PyConfig.pythonpath_env`" +msgstr ":c:member:`PyConfig.pythonpath_env`" + +#: ../../c-api/init_config.rst:903 +msgid "current working directory: to get absolute paths" +msgstr "当前工作目录:用于获取绝对路径" + +#: ../../c-api/init_config.rst:904 +msgid "" +"``PATH`` environment variable to get the program full path (from " +":c:member:`PyConfig.program_name`)" +msgstr "``PATH`` 环境变量用于获取程序的完整路径 (来自 :c:member:`PyConfig.program_name`)" + +#: ../../c-api/init_config.rst:906 +msgid "``__PYVENV_LAUNCHER__`` environment variable" +msgstr "``__PYVENV_LAUNCHER__`` 环境变量" + +#: ../../c-api/init_config.rst:907 +msgid "" +"(Windows only) Application paths in the registry under " +"\"Software\\Python\\PythonCore\\X.Y\\PythonPath\" of HKEY_CURRENT_USER and " +"HKEY_LOCAL_MACHINE (where X.Y is the Python version)." +msgstr "" +"(仅限 Windows only) 注册表 HKEY_CURRENT_USER 和 HKEY_LOCAL_MACHINE 的 " +"\"Software\\Python\\PythonCore\\X.Y\\PythonPath\" 项下的应用程序目录(其中 X.Y 为 Python " +"版本)。" + +#: ../../c-api/init_config.rst:911 +msgid "Path configuration output fields:" +msgstr "路径配置输出字段:" + +#: ../../c-api/init_config.rst:913 +msgid ":c:member:`PyConfig.base_exec_prefix`" +msgstr ":c:member:`PyConfig.base_exec_prefix`" + +#: ../../c-api/init_config.rst:914 +msgid ":c:member:`PyConfig.base_executable`" +msgstr ":c:member:`PyConfig.base_executable`" + +#: ../../c-api/init_config.rst:915 +msgid ":c:member:`PyConfig.base_prefix`" +msgstr ":c:member:`PyConfig.base_prefix`" + +#: ../../c-api/init_config.rst:916 +msgid ":c:member:`PyConfig.exec_prefix`" +msgstr ":c:member:`PyConfig.exec_prefix`" + +#: ../../c-api/init_config.rst:917 +msgid ":c:member:`PyConfig.executable`" +msgstr ":c:member:`PyConfig.executable`" + +#: ../../c-api/init_config.rst:918 +msgid "" +":c:member:`PyConfig.module_search_paths_set`, " +":c:member:`PyConfig.module_search_paths`" +msgstr "" +":c:member:`PyConfig.module_search_paths_set`, " +":c:member:`PyConfig.module_search_paths`" + +#: ../../c-api/init_config.rst:920 +msgid ":c:member:`PyConfig.prefix`" +msgstr ":c:member:`PyConfig.prefix`" + +#: ../../c-api/init_config.rst:922 +msgid "" +"If at least one \"output field\" is not set, Python calculates the path " +"configuration to fill unset fields. If " +":c:member:`~PyConfig.module_search_paths_set` is equal to 0, " +":c:member:`~PyConfig.module_search_paths` is overridden and " +":c:member:`~PyConfig.module_search_paths_set` is set to 1." +msgstr "" + +#: ../../c-api/init_config.rst:928 +msgid "" +"It is possible to completely ignore the function calculating the default " +"path configuration by setting explicitly all path configuration output " +"fields listed above. A string is considered as set even if it is non-empty. " +"``module_search_paths`` is considered as set if ``module_search_paths_set`` " +"is set to 1. In this case, path configuration input fields are ignored as " +"well." +msgstr "" + +#: ../../c-api/init_config.rst:935 +msgid "" +"Set :c:member:`~PyConfig.pathconfig_warnings` to 0 to suppress warnings when" +" calculating the path configuration (Unix only, Windows does not log any " +"warning)." +msgstr "" + +#: ../../c-api/init_config.rst:938 +msgid "" +"If :c:member:`~PyConfig.base_prefix` or " +":c:member:`~PyConfig.base_exec_prefix` fields are not set, they inherit " +"their value from :c:member:`~PyConfig.prefix` and " +":c:member:`~PyConfig.exec_prefix` respectively." +msgstr "" +"如果 :c:member:`~PyConfig.base_prefix` 或 " +":c:member:`~PyConfig.base_exec_prefix` 字段未设置,它们将分别从 " +":c:member:`~PyConfig.prefix` 和 :c:member:`~PyConfig.exec_prefix` 继承其值。" + +#: ../../c-api/init_config.rst:942 +msgid ":c:func:`Py_RunMain` and :c:func:`Py_Main` modify :data:`sys.path`:" +msgstr ":c:func:`Py_RunMain` 和 :c:func:`Py_Main` 将修改 :data:`sys.path`:" + +#: ../../c-api/init_config.rst:944 +msgid "" +"If :c:member:`~PyConfig.run_filename` is set and is a directory which " +"contains a ``__main__.py`` script, prepend " +":c:member:`~PyConfig.run_filename` to :data:`sys.path`." +msgstr "" +"如果 :c:member:`~PyConfig.run_filename` 已设置并且是一个包含 ``__main__.py`` 脚本的目录,则会将 " +":c:member:`~PyConfig.run_filename` 添加到 :data:`sys.path` 的开头。" + +#: ../../c-api/init_config.rst:947 +msgid "If :c:member:`~PyConfig.isolated` is zero:" +msgstr "如果 :c:member:`~PyConfig.isolated` 为零:" + +#: ../../c-api/init_config.rst:949 +msgid "" +"If :c:member:`~PyConfig.run_module` is set, prepend the current directory to" +" :data:`sys.path`. Do nothing if the current directory cannot be read." +msgstr "" +"如果设置了 :c:member:`~PyConfig.run_module`,则将当前目录添加到 :data:`sys.path` 的开头。 " +"如果无法读取当前目录则不执行任何操作。" + +#: ../../c-api/init_config.rst:951 +msgid "" +"If :c:member:`~PyConfig.run_filename` is set, prepend the directory of the " +"filename to :data:`sys.path`." +msgstr "" +"如果设置了 :c:member:`~PyConfig.run_filename`,则将文件名的目录添加到 :data:`sys.path` 的开头。" + +#: ../../c-api/init_config.rst:953 +msgid "Otherwise, prepend an empty string to :data:`sys.path`." +msgstr "在其他情况下,则将一个空字符串添加到 :data:`sys.path` 的开头。" + +#: ../../c-api/init_config.rst:955 +msgid "" +"If :c:member:`~PyConfig.site_import` is non-zero, :data:`sys.path` can be " +"modified by the :mod:`site` module. If " +":c:member:`~PyConfig.user_site_directory` is non-zero and the user's site-" +"package directory exists, the :mod:`site` module appends the user's site-" +"package directory to :data:`sys.path`." +msgstr "" +"如果 :c:member:`~PyConfig.site_import` 为非零值,则 :data:`sys.path` 可通过 :mod:`site`" +" 模块修改。 如果 :c:member:`~PyConfig.user_site_directory` 为非零值且用户的 site-package " +"目录存在,则 :mod:`site` 模块会将用户的 site-package 目录附加到 :data:`sys.path`。" + +#: ../../c-api/init_config.rst:961 +msgid "The following configuration files are used by the path configuration:" +msgstr "路径配置会使用以下配置文件:" + +#: ../../c-api/init_config.rst:963 +msgid "``pyvenv.cfg``" +msgstr "``pyvenv.cfg``" + +#: ../../c-api/init_config.rst:964 +msgid "``python._pth`` (Windows only)" +msgstr "``python._pth`` (仅Windows)" + +#: ../../c-api/init_config.rst:965 +msgid "``pybuilddir.txt`` (Unix only)" +msgstr "``pybuilddir.txt`` (仅Unix)" + +#: ../../c-api/init_config.rst:967 +msgid "" +"The ``__PYVENV_LAUNCHER__`` environment variable is used to set " +":c:member:`PyConfig.base_executable`" +msgstr "" +"``__PYVENV_LAUNCHER__`` 环境变量将被用于设置 :c:member:`PyConfig.base_executable`" + +#: ../../c-api/init_config.rst:972 +msgid "Py_RunMain()" +msgstr "Py_RunMain()" + +#: ../../c-api/init_config.rst:976 +msgid "" +"Execute the command (:c:member:`PyConfig.run_command`), the script " +"(:c:member:`PyConfig.run_filename`) or the module " +"(:c:member:`PyConfig.run_module`) specified on the command line or in the " +"configuration." +msgstr "" +"执行在命令行或配置中指定的命令 (:c:member:`PyConfig.run_command`)、脚本 " +"(:c:member:`PyConfig.run_filename`) 或模块 (:c:member:`PyConfig.run_module`)。" + +#: ../../c-api/init_config.rst:981 +msgid "By default and when if :option:`-i` option is used, run the REPL." +msgstr "在默认情况下如果使用了 :option:`-i` 选项,则运行 REPL。" + +#: ../../c-api/init_config.rst:983 +msgid "" +"Finally, finalizes Python and returns an exit status that can be passed to " +"the ``exit()`` function." +msgstr "最后,终结化 Python 并返回一个可传递给 ``exit()`` 函数的退出状态。" + +#: ../../c-api/init_config.rst:986 +msgid "" +"See :ref:`Python Configuration ` for an example of " +"customized Python always running in isolated mode using " +":c:func:`Py_RunMain`." +msgstr "" +"请参阅 :ref:`Python 配置 ` 查看一个使用 :c:func:`Py_RunMain` " +"在隔离模式下始终运行自定义 Python 的示例。" + +#: ../../c-api/init_config.rst:992 +msgid "Py_GetArgcArgv()" +msgstr "Py_GetArgcArgv()" + +#: ../../c-api/init_config.rst:996 +msgid "Get the original command line arguments, before Python modified them." +msgstr "在 Python 修改原始命令行参数之前,获取这些参数。" + +#: ../../c-api/init_config.rst:1000 +msgid "Multi-Phase Initialization Private Provisional API" +msgstr "多阶段初始化私有暂定 API" + +#: ../../c-api/init_config.rst:1002 +msgid "" +"This section is a private provisional API introducing multi-phase " +"initialization, the core feature of :pep:`432`:" +msgstr "本节介绍的私有暂定 API 引入了多阶段初始化,它是 :pep:`432` 的核心特性:" + +#: ../../c-api/init_config.rst:1005 +msgid "\"Core\" initialization phase, \"bare minimum Python\":" +msgstr "“核心”初始化阶段,“最小化的基本 Python”:" + +#: ../../c-api/init_config.rst:1007 +msgid "Builtin types;" +msgstr "内置类型;" + +#: ../../c-api/init_config.rst:1008 +msgid "Builtin exceptions;" +msgstr "内置异常;" + +#: ../../c-api/init_config.rst:1009 +msgid "Builtin and frozen modules;" +msgstr "内置和已冻结模块;" + +#: ../../c-api/init_config.rst:1010 +msgid "" +"The :mod:`sys` module is only partially initialized (ex: :data:`sys.path` " +"doesn't exist yet)." +msgstr ":mod:`sys` 模块仅部分初始化(例如: :data:`sys.path` 尚不存在)。" + +#: ../../c-api/init_config.rst:1013 +msgid "\"Main\" initialization phase, Python is fully initialized:" +msgstr "\"主要\"初始化阶段,Python 被完全初始化:" + +#: ../../c-api/init_config.rst:1015 +msgid "Install and configure :mod:`importlib`;" +msgstr "安装并配置 :mod:`importlib`;" + +#: ../../c-api/init_config.rst:1016 +msgid "Apply the :ref:`Path Configuration `;" +msgstr "应用 :ref:`路径配置 `;" + +#: ../../c-api/init_config.rst:1017 +msgid "Install signal handlers;" +msgstr "安装信号处理器;" + +#: ../../c-api/init_config.rst:1018 +msgid "" +"Finish :mod:`sys` module initialization (ex: create :data:`sys.stdout` and " +":data:`sys.path`);" +msgstr "完成 :mod:`sys` 模块初始化 (例如:创建 :data:`sys.stdout` 和 :data:`sys.path`);" + +#: ../../c-api/init_config.rst:1020 +msgid "" +"Enable optional features like :mod:`faulthandler` and :mod:`tracemalloc`;" +msgstr "启用 :mod:`faulthandler` 和 :mod:`tracemalloc` 等可选功能;" + +#: ../../c-api/init_config.rst:1021 +msgid "Import the :mod:`site` module;" +msgstr "导入 :mod:`site` 模块;" + +#: ../../c-api/init_config.rst:1022 +msgid "etc." +msgstr "等等." + +#: ../../c-api/init_config.rst:1024 +msgid "Private provisional API:" +msgstr "私有临时API:" + +#: ../../c-api/init_config.rst:1026 +msgid "" +":c:member:`PyConfig._init_main`: if set to 0, " +":c:func:`Py_InitializeFromConfig` stops at the \"Core\" initialization " +"phase." +msgstr "" + +#: ../../c-api/init_config.rst:1028 +msgid "" +":c:member:`PyConfig._isolated_interpreter`: if non-zero, disallow threads, " +"subprocesses and fork." +msgstr "" + +#: ../../c-api/init_config.rst:1033 +msgid "" +"Move to the \"Main\" initialization phase, finish the Python initialization." +msgstr "进入“主要”初始化阶段,完成 Python 初始化。" + +#: ../../c-api/init_config.rst:1035 +msgid "" +"No module is imported during the \"Core\" phase and the ``importlib`` module" +" is not configured: the :ref:`Path Configuration ` is only" +" applied during the \"Main\" phase. It may allow to customize Python in " +"Python to override or tune the :ref:`Path Configuration `," +" maybe install a custom :data:`sys.meta_path` importer or an import hook, " +"etc." +msgstr "" +"在“核心”阶段不会导入任何模块,也不会配置 ``importlib`` 模块: :ref:`路径配置 ` " +"只会在“主要”阶段期间应用。 这可能允许在 Python 中定制 Python 以覆盖或微调 :ref:`路径配置 `,也可能会安装自定义的 :data:`sys.meta_path` 导入器或导入钩子等等。" + +#: ../../c-api/init_config.rst:1041 +msgid "" +"It may become possible to calculatin the :ref:`Path Configuration ` in Python, after the Core phase and before the Main phase, " +"which is one of the :pep:`432` motivation." +msgstr "" + +#: ../../c-api/init_config.rst:1045 +msgid "" +"The \"Core\" phase is not properly defined: what should be and what should " +"not be available at this phase is not specified yet. The API is marked as " +"private and provisional: the API can be modified or even be removed anytime " +"until a proper public API is designed." +msgstr "" +"“核心”阶段并没有完整的定义:在这一阶段什么应该可用什么不应该可用都尚未被指明。 该 API 被标记为私有和暂定的:也就是说该 API " +"可以随时被修改甚至被移除直到设计出适用的公共 API。" + +#: ../../c-api/init_config.rst:1050 +msgid "" +"Example running Python code between \"Core\" and \"Main\" initialization " +"phases::" +msgstr "在“核心”和“主要”初始化阶段之间运行 Python 代码的示例::" diff --git a/c-api/intro.po b/c-api/intro.po new file mode 100644 index 000000000..621d87866 --- /dev/null +++ b/c-api/intro.po @@ -0,0 +1,970 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) 2001-2025, Python Software Foundation +# This file is distributed under the same license as the Python package. +# FIRST AUTHOR , YEAR. +# +# Translators: +# Fei Yin , 2018 +# Tony Tong , 2018 +# ww song , 2018 +# ppcfish , 2019 +# Jiuh.star , 2021 +# Freesand Leo , 2022 +# Rafael Fontenelle , 2025 +# +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: Python 3.9\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2025-02-03 19:54+0000\n" +"PO-Revision-Date: 2017-02-16 17:36+0000\n" +"Last-Translator: Rafael Fontenelle , 2025\n" +"Language-Team: Chinese (China) (https://app.transifex.com/python-doc/teams/5390/zh_CN/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: zh_CN\n" +"Plural-Forms: nplurals=1; plural=0;\n" + +#: ../../c-api/intro.rst:8 +msgid "Introduction" +msgstr "概述" + +#: ../../c-api/intro.rst:10 +msgid "" +"The Application Programmer's Interface to Python gives C and C++ programmers" +" access to the Python interpreter at a variety of levels. The API is " +"equally usable from C++, but for brevity it is generally referred to as the " +"Python/C API. There are two fundamentally different reasons for using the " +"Python/C API. The first reason is to write *extension modules* for specific " +"purposes; these are C modules that extend the Python interpreter. This is " +"probably the most common use. The second reason is to use Python as a " +"component in a larger application; this technique is generally referred to " +"as :dfn:`embedding` Python in an application." +msgstr "" +"Python 的应用编程接口(API)使得 C 和 C++ 程序员可以在多个层级上访问 Python 解释器。该 API 在 C++ " +"中同样可用,但为简化描述,通常将其称为 Python/C API。使用 Python/C API 有两个基本的理由。第一个理由是为了特定目的而编写 " +"*扩展模块*;它们是扩展 Python 解释器功能的 C 模块。这可能是最常见的使用场景。第二个理由是将 Python " +"用作更大规模应用的组件;这种技巧通常被称为在一个应用中 :dfn:`embedding` Python。" + +#: ../../c-api/intro.rst:20 +msgid "" +"Writing an extension module is a relatively well-understood process, where a" +" \"cookbook\" approach works well. There are several tools that automate " +"the process to some extent. While people have embedded Python in other " +"applications since its early existence, the process of embedding Python is " +"less straightforward than writing an extension." +msgstr "" +"编写扩展模块的过程相对来说更易于理解,可以通过“菜谱”的形式分步骤介绍。使用某些工具可在一定程度上自动化这一过程。虽然人们在其他应用中嵌入 Python" +" 的做法早已有之,但嵌入 Python 的过程没有编写扩展模块那样方便直观。" + +#: ../../c-api/intro.rst:26 +msgid "" +"Many API functions are useful independent of whether you're embedding or " +"extending Python; moreover, most applications that embed Python will need " +"to provide a custom extension as well, so it's probably a good idea to " +"become familiar with writing an extension before attempting to embed Python" +" in a real application." +msgstr "" +"许多 API 函数在你嵌入或是扩展 Python 这两种场景下都能发挥作用;此外,大多数嵌入 Python " +"的应用程序也需要提供自定义扩展,因此在尝试在实际应用中嵌入 Python 之前先熟悉编写扩展应该会是个好主意。" + +#: ../../c-api/intro.rst:34 +msgid "Coding standards" +msgstr "代码标准" + +#: ../../c-api/intro.rst:36 +msgid "" +"If you're writing C code for inclusion in CPython, you **must** follow the " +"guidelines and standards defined in :PEP:`7`. These guidelines apply " +"regardless of the version of Python you are contributing to. Following " +"these conventions is not necessary for your own third party extension " +"modules, unless you eventually expect to contribute them to Python." +msgstr "" +"如果你想要编写可包含于 CPython 的 C 代码,你 **必须** 遵循在 :PEP:`7` " +"中定义的指导原则和标准。这些指导原则适用于任何你所要扩展的 Python 版本。在编写你自己的第三方扩展模块时可以不必遵循这些规范,除非你准备在日后向 " +"Python 贡献这些模块。" + +#: ../../c-api/intro.rst:46 +msgid "Include Files" +msgstr "包含文件" + +#: ../../c-api/intro.rst:48 +msgid "" +"All function, type and macro definitions needed to use the Python/C API are " +"included in your code by the following line::" +msgstr "使用 Python/C API 所需要的全部函数、类型和宏定义可通过下面这行语句包含到你的代码之中:" + +#: ../../c-api/intro.rst:54 +msgid "" +"This implies inclusion of the following standard headers: ````, " +"````, ````, ````, ```` and " +"```` (if available)." +msgstr "" +"这意味着包含以下标准头文件:\\ ````\\ ,\\ ````\\ ,\\ ````\\ " +",\\ ````\\ ,\\ ```` 和 ````\\ (如果可用)。" + +#: ../../c-api/intro.rst:60 +msgid "" +"Since Python may define some pre-processor definitions which affect the " +"standard headers on some systems, you *must* include :file:`Python.h` before" +" any standard headers are included." +msgstr "" +"由于 Python 可能会定义一些能在某些系统上影响标准头文件的预处理器定义,因此在包含任何标准头文件之前,你 *必须* 先包含 " +":file:`Python.h`。" + +#: ../../c-api/intro.rst:64 +msgid "" +"It is recommended to always define ``PY_SSIZE_T_CLEAN`` before including " +"``Python.h``. See :ref:`arg-parsing` for a description of this macro." +msgstr "" +"推荐总是在 ``Python.h`` 前定义 ``PY_SSIZE_T_CLEAN`` 。查看 :ref:`arg-parsing` " +"来了解这个宏的更多内容。" + +#: ../../c-api/intro.rst:67 +msgid "" +"All user visible names defined by Python.h (except those defined by the " +"included standard headers) have one of the prefixes ``Py`` or ``_Py``. " +"Names beginning with ``_Py`` are for internal use by the Python " +"implementation and should not be used by extension writers. Structure member" +" names do not have a reserved prefix." +msgstr "" +"Python.h 所定义的全部用户可见名称(由包含的标准头文件所定义的除外)都带有前缀 ``Py`` 或者 ``_Py``。以 ``_Py`` " +"打头的名称是供 Python 实现内部使用的,不应被扩展编写者使用。结构成员名称没有保留前缀。" + +#: ../../c-api/intro.rst:74 +msgid "" +"User code should never define names that begin with ``Py`` or ``_Py``. This " +"confuses the reader, and jeopardizes the portability of the user code to " +"future Python versions, which may define additional names beginning with one" +" of these prefixes." +msgstr "" +"用户代码永远不应该定义以 ``Py`` 或 ``_Py`` " +"开头的名称。这会使读者感到困惑,并危及用户代码对未来Python版本的可移植性,这些版本可能会定义以这些前缀之一开头的其他名称。" + +#: ../../c-api/intro.rst:79 +msgid "" +"The header files are typically installed with Python. On Unix, these are " +"located in the directories :file:`{prefix}/include/pythonversion/` and " +":file:`{exec_prefix}/include/pythonversion/`, where :envvar:`prefix` and " +":envvar:`exec_prefix` are defined by the corresponding parameters to " +"Python's :program:`configure` script and *version* is ``'%d.%d' % " +"sys.version_info[:2]``. On Windows, the headers are installed in " +":file:`{prefix}/include`, where :envvar:`prefix` is the installation " +"directory specified to the installer." +msgstr "" +"头文件通常会与 Python 一起安装。在 Unix " +"上,它们位于以下目录::file:`{prefix}/include/pythonversion/` 和 " +":file:`{exec_prefix}/include/pythonversion/`,其中 :envvar:`prefix` 和 " +":envvar:`exec_prefix` 是由向 Python 的 :program:`configure` 脚本传入的对应形参所定义,而 " +"*version* 则为 ``'%d.%d' % sys.version_info[:2]``。在 Windows 上,头文件安装于 " +":file:`{prefix}/include`,其中 :envvar:`prefix` 是向安装程序指定的安装目录。" + +#: ../../c-api/intro.rst:88 +msgid "" +"To include the headers, place both directories (if different) on your " +"compiler's search path for includes. Do *not* place the parent directories " +"on the search path and then use ``#include ``; this will" +" break on multi-platform builds since the platform independent headers under" +" :envvar:`prefix` include the platform specific headers from " +":envvar:`exec_prefix`." +msgstr "" +"要包含头文件,请将两个目录(如果不同)都放到你所用编译器的包含搜索路径中。请 *不要* 将父目录放入搜索路径然后使用 ``#include " +"``;这将使得多平台编译不可用,因为 :envvar:`prefix` 下平台无关的头文件需要包含来自 " +":envvar:`exec_prefix` 下特定平台的头文件。" + +#: ../../c-api/intro.rst:95 +msgid "" +"C++ users should note that although the API is defined entirely using C, the" +" header files properly declare the entry points to be ``extern \"C\"``. As a" +" result, there is no need to do anything special to use the API from C++." +msgstr "" +"C++ 用户应该注意,尽管 API 是完全使用 C 来定义的,但头文件正确地将入口点声明为 ``extern \"C\"``,因此 API 在 C++ " +"中使用此 API 不必再做任何特殊处理。" + +#: ../../c-api/intro.rst:101 +msgid "Useful macros" +msgstr "有用的宏" + +#: ../../c-api/intro.rst:103 +msgid "" +"Several useful macros are defined in the Python header files. Many are " +"defined closer to where they are useful (e.g. :c:macro:`Py_RETURN_NONE`). " +"Others of a more general utility are defined here. This is not necessarily " +"a complete listing." +msgstr "" +"Python 头文件中定义了一些有用的宏。许多是在靠近它们被使用的地方定义的(例如 " +":c:macro:`Py_RETURN_NONE`)。其他更为通用的则定义在这里。这里所显示的并不是一个完整的列表。" + +#: ../../c-api/intro.rst:110 +msgid "" +"Use this when you have a code path that cannot be reached by design. For " +"example, in the ``default:`` clause in a ``switch`` statement for which all " +"possible values are covered in ``case`` statements. Use this in places " +"where you might be tempted to put an ``assert(0)`` or ``abort()`` call." +msgstr "" +"这个可以在你有一个设计上无法到达的代码路径时使用。例如,当一个 ``switch`` 语句中所有可能的值都已被 ``case`` " +"子句覆盖了,就可将其用在 ``default:`` 子句中。当你非常想在某个位置放一个 ``assert(0)`` 或 ``abort()`` " +"调用时也可以用这个。" + +#: ../../c-api/intro.rst:115 +msgid "" +"In release mode, the macro helps the compiler to optimize the code, and " +"avoids a warning about unreachable code. For example, the macro is " +"implemented with ``__builtin_unreachable()`` on GCC in release mode." +msgstr "" +"在 release 模式下,该宏帮助编译器优化代码,并避免发出不可到达代码的警告。例如,在 GCC 的 release 模式下,该宏使用 " +"``__builtin_unreachable()`` 实现。" + +#: ../../c-api/intro.rst:119 +msgid "" +"A use for ``Py_UNREACHABLE()`` is following a call a function that never " +"returns but that is not declared :c:macro:`_Py_NO_RETURN`." +msgstr "" +"``Py_UNREACHABLE()`` 的一个用法是调用一个不会返回,但却没有声明 :c:macro:`_Py_NO_RETURN` 的函数之后。" + +#: ../../c-api/intro.rst:122 +msgid "" +"If a code path is very unlikely code but can be reached under exceptional " +"case, this macro must not be used. For example, under low memory condition " +"or if a system call returns a value out of the expected range. In this " +"case, it's better to report the error to the caller. If the error cannot be" +" reported to caller, :c:func:`Py_FatalError` can be used." +msgstr "" +"如果一个代码路径不太可能是正常代码,但在特殊情况下可以到达,就不能使用该宏。例如,在低内存条件下,或者一个系统调用返回超出预期范围值,诸如此类,最好将错误报告给调用者。如果无法将错误报告给调用者,可以使用" +" :c:func:`Py_FatalError` 。" + +#: ../../c-api/intro.rst:132 +msgid "Return the absolute value of ``x``." +msgstr "返回 ``x`` 的绝对值。" + +#: ../../c-api/intro.rst:138 +msgid "Return the minimum value between ``x`` and ``y``." +msgstr "返回 ``x`` 和 ``y`` 当中的最小值。" + +#: ../../c-api/intro.rst:144 +msgid "Return the maximum value between ``x`` and ``y``." +msgstr "返回 ``x`` 和 ``y`` 当中的最大值。" + +#: ../../c-api/intro.rst:150 +msgid "" +"Convert ``x`` to a C string. E.g. ``Py_STRINGIFY(123)`` returns " +"``\"123\"``." +msgstr "将 ``x`` 转换为 C 字符串。例如 ``Py_STRINGIFY(123)`` 返回 ``\"123\"``。" + +#: ../../c-api/intro.rst:157 +msgid "Return the size of a structure (``type``) ``member`` in bytes." +msgstr "返回结构 (``type``) ``member`` 的大小,以字节表示。" + +#: ../../c-api/intro.rst:163 +msgid "" +"Argument must be a character or an integer in the range [-128, 127] or [0, " +"255]. This macro returns ``c`` cast to an ``unsigned char``." +msgstr "" +"参数必须为 [-128, 127] 或 [0, 255] 范围内的字符或整数类型。这个宏将 ``c`` 强制转换为 ``unsigned char`` " +"返回。" + +#: ../../c-api/intro.rst:168 +msgid "" +"Like ``getenv(s)``, but returns ``NULL`` if :option:`-E` was passed on the " +"command line (i.e. if ``Py_IgnoreEnvironmentFlag`` is set)." +msgstr "" +"与 ``getenv(s)`` 类似,但是如果命令行上传递了 :option:`-E` ,则返回 ``NULL`` (即如果设置了 " +"``Py_IgnoreEnvironmentFlag`` )。" + +#: ../../c-api/intro.rst:173 +msgid "" +"Use this for unused arguments in a function definition to silence compiler " +"warnings. Example: ``int func(int a, int Py_UNUSED(b)) { return a; }``." +msgstr "" +"用于函数定义中未使用的参数,从而消除编译器警告。例如: ``int func(int a, int Py_UNUSED(b)) { return a; " +"}`` 。" + +#: ../../c-api/intro.rst:180 +msgid "" +"Use this for deprecated declarations. The macro must be placed before the " +"symbol name." +msgstr "弃用声明。该宏必须放置在符号名称前。" + +#: ../../c-api/intro.rst:183 ../../c-api/intro.rst:198 +#: ../../c-api/intro.rst:216 +msgid "Example::" +msgstr "示例::" + +#: ../../c-api/intro.rst:187 +msgid "MSVC support was added." +msgstr "添加了 MSVC 支持。" + +#: ../../c-api/intro.rst:192 +msgid "" +"Creates a variable with name ``name`` that can be used in docstrings. If " +"Python is built without docstrings, the value will be empty." +msgstr "创建一个可以在文档字符串中使用的,名字为 ``name`` 的变量。如果不和文档字符串一起构建 Python,该值将为空。" + +#: ../../c-api/intro.rst:195 +msgid "" +"Use :c:macro:`PyDoc_STRVAR` for docstrings to support building Python " +"without docstrings, as specified in :pep:`7`." +msgstr "" +"如 :pep:`7` 所述,使用 :c:macro:`PyDoc_STRVAR` 作为文档字符串,以支持不和文档字符串一起构建 Python 的情况。" + +#: ../../c-api/intro.rst:210 +msgid "" +"Creates a docstring for the given input string or an empty string if " +"docstrings are disabled." +msgstr "为给定的字符串输入创建一个文档字符串,或者当文档字符串被禁用时,创建一个空字符串。" + +#: ../../c-api/intro.rst:213 +msgid "" +"Use :c:macro:`PyDoc_STR` in specifying docstrings to support building Python" +" without docstrings, as specified in :pep:`7`." +msgstr "" +"如 :pep:`7` 所述,使用 :c:macro:`PyDoc_STR` 指定文档字符串,以支持不和文档字符串一起构建 Python 的情况。" + +#: ../../c-api/intro.rst:227 +msgid "Objects, Types and Reference Counts" +msgstr "对象、类型和引用计数" + +#: ../../c-api/intro.rst:231 +msgid "" +"Most Python/C API functions have one or more arguments as well as a return " +"value of type :c:type:`PyObject*`. This type is a pointer to an opaque data" +" type representing an arbitrary Python object. Since all Python object " +"types are treated the same way by the Python language in most situations " +"(e.g., assignments, scope rules, and argument passing), it is only fitting " +"that they should be represented by a single C type. Almost all Python " +"objects live on the heap: you never declare an automatic or static variable " +"of type :c:type:`PyObject`, only pointer variables of type " +":c:type:`PyObject*` can be declared. The sole exception are the type " +"objects; since these must never be deallocated, they are typically static " +":c:type:`PyTypeObject` objects." +msgstr "" +"多数 Python/C API 有一个或多个参数,以及一个 :c:type:`PyObject*` 类型的返回值。这种类型是指向任意 Python " +"对象的不透明数据类型的指针。所有 Python 对象类型在大多数情况下都被 Python " +"语言由相同的方式处理(例如,赋值,作用域规则,和参数传递),因此将它们由单个 C 类型表示才合适。几乎所有 Python " +"对象存放在堆中:你不能声明一个类型为 :c:type:`PyObject` 的自动或静态的变量,只能声明类型为 :c:type:`PyObject*` " +"的指针。type 对象是唯一的例外,因为它们永远不能被释放,所以它们通常是静态的 :c:type:`PyTypeObject` 对象。" + +#: ../../c-api/intro.rst:242 +msgid "" +"All Python objects (even Python integers) have a :dfn:`type` and a " +":dfn:`reference count`. An object's type determines what kind of object it " +"is (e.g., an integer, a list, or a user-defined function; there are many " +"more as explained in :ref:`types`). For each of the well-known types there " +"is a macro to check whether an object is of that type; for instance, " +"``PyList_Check(a)`` is true if (and only if) the object pointed to by *a* is" +" a Python list." +msgstr "" +"所有 Python 对象(甚至 Python 整数)都有一个 :dfn:`type` 和一个 :dfn:`reference " +"count`。对象的类型确定它是什么类型的对象(例如整数、列表或用户定义函数;还有更多,如 :ref:`types` " +"中所述)。对于每个众所周知的类型,都有一个宏来检查对象是否属于该类型;例如,当(且仅当) *a* 所指的对象是 Python 列表时 " +"``PyList_Check(a)`` 为真。" + +#: ../../c-api/intro.rst:253 +msgid "Reference Counts" +msgstr "引用计数" + +#: ../../c-api/intro.rst:255 +msgid "" +"The reference count is important because today's computers have a finite " +"(and often severely limited) memory size; it counts how many different " +"places there are that have a reference to an object. Such a place could be" +" another object, or a global (or static) C variable, or a local variable in" +" some C function. When an object's reference count becomes zero, the object" +" is deallocated. If it contains references to other objects, their " +"reference count is decremented. Those other objects may be deallocated in " +"turn, if this decrement makes their reference count become zero, and so on." +" (There's an obvious problem with objects that reference each other here; " +"for now, the solution is \"don't do that.\")" +msgstr "" +"引用计数非常重要,因为现代计算机内存(通常十分)有限;它计算有多少不同的地方引用同一个对象。这样的地方可以是某个对象,或者是某个全局(或静态)C " +"变量,亦或是某个 C 函数的局部变量。当一个对象的引用计数变为 " +"0,释放该对象。如果这个已释放的对象包含其它对象的引用计数,则递减这些对象的引用计数。如果这些对象的引用计数减少为零,则可以依次释放这些对象,依此类推。(这里有一个很明显的问题——对象之间相互引用;目前,解决方案是“不要那样做”。)" + +#: ../../c-api/intro.rst:270 +msgid "" +"Reference counts are always manipulated explicitly. The normal way is to " +"use the macro :c:func:`Py_INCREF` to increment an object's reference count " +"by one, and :c:func:`Py_DECREF` to decrement it by one. The " +":c:func:`Py_DECREF` macro is considerably more complex than the incref one, " +"since it must check whether the reference count becomes zero and then cause " +"the object's deallocator to be called. The deallocator is a function pointer" +" contained in the object's type structure. The type-specific deallocator " +"takes care of decrementing the reference counts for other objects contained " +"in the object if this is a compound object type, such as a list, as well as " +"performing any additional finalization that's needed. There's no chance " +"that the reference count can overflow; at least as many bits are used to " +"hold the reference count as there are distinct memory locations in virtual " +"memory (assuming ``sizeof(Py_ssize_t) >= sizeof(void*)``). Thus, the " +"reference count increment is a simple operation." +msgstr "" +"总是显式操作引用计数。通常的方法是使用宏 :c:func:`Py_INCREF` 来增加一个对象的引用计数,使用宏 " +":c:func:`Py_DECREF` 来减少一个对象的引用计数。宏 :c:func:`Py_DECREF` " +"必须检查引用计数是否为零,然后调用对象的释放器, 因此它比 incref " +"宏复杂得多。释放器是一个包含在对象类型结构中的函数指针。如果对象是复合对象类型(例如列表),则类型特定的释放器负责递减包含在对象中的其他对象的引用计数,并执行所需的终结。引用计数不会溢出,至少用与虚拟内存中不同内存位置一样多的位用于保存引用计数(即" +" ``sizeof(Py_ssize_t) >= sizeof(void*)`` )。因此,引用计数递增是一个简单的操作。" + +#: ../../c-api/intro.rst:284 +msgid "" +"It is not necessary to increment an object's reference count for every " +"local variable that contains a pointer to an object. In theory, the " +"object's reference count goes up by one when the variable is made to point " +"to it and it goes down by one when the variable goes out of scope. " +"However, these two cancel each other out, so at the end the reference count" +" hasn't changed. The only real reason to use the reference count is to " +"prevent the object from being deallocated as long as our variable is " +"pointing to it. If we know that there is at least one other reference to " +"the object that lives at least as long as our variable, there is no need to " +"increment the reference count temporarily. An important situation where " +"this arises is in objects that are passed as arguments to C functions in an" +" extension module that are called from Python; the call mechanism " +"guarantees to hold a reference to every argument for the duration of the " +"call." +msgstr "" +"没有必要为每个包含指向对象的指针的局部变量增加对象的引用计数。理论上,当变量指向对象时,对象的引用计数增加 1 ,当变量超出范围时,对象的引用计数减少 " +"1 " +"。但是,这两者相互抵消,所以最后引用计数没有改变。使用引用计数的唯一真正原因是只要我们的变量指向它,就可以防止对象被释放。如果知道至少有一个对该对象的其他引用存活时间至少和我们的变量一样长,则没必要临时增加引用计数。一个典型的情形是,对象作为参数从" +" Python 中传递给被调用的扩展模块中的 C 函数时,调用机制会保证在调用期间持有对所有参数的引用。" + +#: ../../c-api/intro.rst:298 +msgid "" +"However, a common pitfall is to extract an object from a list and hold on to" +" it for a while without incrementing its reference count. Some other " +"operation might conceivably remove the object from the list, decrementing " +"its reference count and possibly deallocating it. The real danger is that " +"innocent-looking operations may invoke arbitrary Python code which could do " +"this; there is a code path which allows control to flow back to the user " +"from a :c:func:`Py_DECREF`, so almost any operation is potentially " +"dangerous." +msgstr "" +"但是,有一个常见的陷阱是从列表中提取一个对象,并将其持有一段时间,而不增加其引用计数。某些操作可能会从列表中删除某个对象,减少其引用计数,并有可能重新分配这个对象。真正的危险是,这个看似无害的操作可能会调用任意" +" Python 代码——也许有一个代码路径允许控制流从 :c:func:`Py_DECREF` 回到用户,因此在复合对象上的操作都存在潜在的风险。" + +#: ../../c-api/intro.rst:306 +msgid "" +"A safe approach is to always use the generic operations (functions whose " +"name begins with ``PyObject_``, ``PyNumber_``, ``PySequence_`` or " +"``PyMapping_``). These operations always increment the reference count of " +"the object they return. This leaves the caller with the responsibility to " +"call :c:func:`Py_DECREF` when they are done with the result; this soon " +"becomes second nature." +msgstr "" +"一个安全的方式是始终使用泛型操作(名称以 ``PyObject_`` , ``PyNumber_`` , ``PySequence_`` 或 " +"``PyMapping_`` 开头的函数)。这些操作总是增加它们返回的对象的引用计数。这让调用者有责任在获得结果后调用 " +":c:func:`Py_DECREF` 。习惯这种方式很简单。" + +#: ../../c-api/intro.rst:316 +msgid "Reference Count Details" +msgstr "引用计数细节" + +#: ../../c-api/intro.rst:318 +msgid "" +"The reference count behavior of functions in the Python/C API is best " +"explained in terms of *ownership of references*. Ownership pertains to " +"references, never to objects (objects are not owned: they are always " +"shared). \"Owning a reference\" means being responsible for calling " +"Py_DECREF on it when the reference is no longer needed. Ownership can also " +"be transferred, meaning that the code that receives ownership of the " +"reference then becomes responsible for eventually decref'ing it by calling " +":c:func:`Py_DECREF` or :c:func:`Py_XDECREF` when it's no longer needed---or " +"passing on this responsibility (usually to its caller). When a function " +"passes ownership of a reference on to its caller, the caller is said to " +"receive a *new* reference. When no ownership is transferred, the caller is " +"said to *borrow* the reference. Nothing needs to be done for a borrowed " +"reference." +msgstr "" + +#: ../../c-api/intro.rst:331 +msgid "" +"Conversely, when a calling function passes in a reference to an object, " +"there are two possibilities: the function *steals* a reference to the " +"object, or it does not. *Stealing a reference* means that when you pass a " +"reference to a function, that function assumes that it now owns that " +"reference, and you are not responsible for it any longer." +msgstr "" +"相反地,当调用方函数传入一个对象的引用时,存在两种可能:该函数 *窃取* 了一个对象的引用,或是没有窃取。 *窃取引用* " +"意味着当你向一个函数传入引用时,该函数会假定它拥有该引用,而你将不再对它负有责任。" + +#: ../../c-api/intro.rst:341 +msgid "" +"Few functions steal references; the two notable exceptions are " +":c:func:`PyList_SetItem` and :c:func:`PyTuple_SetItem`, which steal a " +"reference to the item (but not to the tuple or list into which the item is " +"put!). These functions were designed to steal a reference because of a " +"common idiom for populating a tuple or list with newly created objects; for " +"example, the code to create the tuple ``(1, 2, \"three\")`` could look like " +"this (forgetting about error handling for the moment; a better way to code " +"this is shown below)::" +msgstr "" +"很少有函数会窃取引用;两个重要的例外是 :c:func:`PyList_SetItem` 和 " +":c:func:`PyTuple_SetItem`,它们会窃取对条目的引用(但不是条目所在的元组或列表!)。 " +"这些函数被设计为会窃取引用是因为在使用新创建的对象来填充元组或列表时有一个通常的惯例;例如,创建元组 ``(1, 2, \"three\")`` " +"的代码看起来可以是这样的(暂时不要管错误处理;下面会显示更好的代码编写方式)::" + +#: ../../c-api/intro.rst:356 +msgid "" +"Here, :c:func:`PyLong_FromLong` returns a new reference which is immediately" +" stolen by :c:func:`PyTuple_SetItem`. When you want to keep using an object" +" although the reference to it will be stolen, use :c:func:`Py_INCREF` to " +"grab another reference before calling the reference-stealing function." +msgstr "" +"在这里,:c:func:`PyLong_FromLong` 返回了一个新的引用并且它立即被 :c:func:`PyTuple_SetItem` 所窃取。" +" 当你想要继续使用一个对象而对它的引用将被窃取时,请在调用窃取引用的函数之前使用 :c:func:`Py_INCREF` 来抓取另一个引用。" + +#: ../../c-api/intro.rst:361 +msgid "" +"Incidentally, :c:func:`PyTuple_SetItem` is the *only* way to set tuple " +"items; :c:func:`PySequence_SetItem` and :c:func:`PyObject_SetItem` refuse to" +" do this since tuples are an immutable data type. You should only use " +":c:func:`PyTuple_SetItem` for tuples that you are creating yourself." +msgstr "" +"顺便提一下,:c:func:`PyTuple_SetItem` 是设置元组条目的 *唯一* " +"方式;:c:func:`PySequence_SetItem` 和 :c:func:`PyObject_SetItem` " +"会拒绝这样做因为元组是不可变数据类型。 你应当只对你自己创建的元组使用 :c:func:`PyTuple_SetItem`。" + +#: ../../c-api/intro.rst:366 +msgid "" +"Equivalent code for populating a list can be written using " +":c:func:`PyList_New` and :c:func:`PyList_SetItem`." +msgstr "等价于填充一个列表的代码可以使用 :c:func:`PyList_New` 和 :c:func:`PyList_SetItem` 来编写。" + +#: ../../c-api/intro.rst:369 +msgid "" +"However, in practice, you will rarely use these ways of creating and " +"populating a tuple or list. There's a generic function, " +":c:func:`Py_BuildValue`, that can create most common objects from C values, " +"directed by a :dfn:`format string`. For example, the above two blocks of " +"code could be replaced by the following (which also takes care of the error " +"checking)::" +msgstr "" +"然而,在实践中,你很少会使用这些创建和填充元组或列表的方式。 有一个通用的函数 :c:func:`Py_BuildValue` 可以根据 C " +"值来创建大多数常用对象,由一个 :dfn:`格式字符串` 来指明。 例如,上面的两个代码块可以用下面的代码来代替(还会负责错误检测)::" + +#: ../../c-api/intro.rst:380 +msgid "" +"It is much more common to use :c:func:`PyObject_SetItem` and friends with " +"items whose references you are only borrowing, like arguments that were " +"passed in to the function you are writing. In that case, their behaviour " +"regarding reference counts is much saner, since you don't have to increment " +"a reference count so you can give a reference away (\"have it be stolen\")." +" For example, this function sets all items of a list (actually, any mutable" +" sequence) to a given item::" +msgstr "" +"使用 :c:func:`PyObject_SetItem` 等来处理那些你只是借入引用的条目是更为常见的,例如传给你正在编写的函数的参数。 " +"在这种情况下,他们对于引用计数的行为会更为理智,因为你不需要递增引用计数以便你可以将引用计数转出去(“让它被窃取”)。 " +"例如,这个函数将一个列表(实例上是任何可变序列)中的所有项设置为一个给定的条目::" + +#: ../../c-api/intro.rst:410 +msgid "" +"The situation is slightly different for function return values. While " +"passing a reference to most functions does not change your ownership " +"responsibilities for that reference, many functions that return a reference" +" to an object give you ownership of the reference. The reason is simple: in " +"many cases, the returned object is created on the fly, and the reference " +"you get is the only reference to the object. Therefore, the generic " +"functions that return object references, like :c:func:`PyObject_GetItem` and" +" :c:func:`PySequence_GetItem`, always return a new reference (the caller " +"becomes the owner of the reference)." +msgstr "" +"对于函数返回值的情况略有不同。 虽然向大多数函数传递一个引用不会改变你对该引用的所有权责任,但许多返回一个引用的函数会给你该引用的所有权。 " +"原因很简单:在许多情况下,返回的对象是临时创建的,而你得到的引用是对该对象的唯一引用。 因此,返回对象引用的通用函数,如 " +":c:func:`PyObject_GetItem` 和 " +":c:func:`PySequence_GetItem`,将总是返回一个新的引用(调用方将成为该引用的所有者)。" + +#: ../../c-api/intro.rst:419 +msgid "" +"It is important to realize that whether you own a reference returned by a " +"function depends on which function you call only --- *the plumage* (the type" +" of the object passed as an argument to the function) *doesn't enter into " +"it!* Thus, if you extract an item from a list using " +":c:func:`PyList_GetItem`, you don't own the reference --- but if you obtain " +"the same item from the same list using :c:func:`PySequence_GetItem` (which " +"happens to take exactly the same arguments), you do own a reference to the " +"returned object." +msgstr "" +"一个需要了解的重点在于你是否拥有一个由函数返回的引用只取决于你所调用的函数 --- *附带物* (作为参数传给函数的对象的类型) *不会带来额外影响!*" +" 因此,如果你使用 :c:func:`PyList_GetItem` 从一个列表提取条目,你并不会拥有其引用 --- 但是如果你使用 " +":c:func:`PySequence_GetItem` (它恰好接受完全相同的参数) 从同一个列表获取同样的条目,你就会拥有一个对所返回对象的引用。" + +#: ../../c-api/intro.rst:431 +msgid "" +"Here is an example of how you could write a function that computes the sum " +"of the items in a list of integers; once using :c:func:`PyList_GetItem`, " +"and once using :c:func:`PySequence_GetItem`. ::" +msgstr "" +"下面是说明你要如何编写一个函数来计算一个整数列表中条目的示例;一个是使用 :c:func:`PyList_GetItem`,而另一个是使用 " +":c:func:`PySequence_GetItem`。 ::" + +#: ../../c-api/intro.rst:495 +msgid "Types" +msgstr "类型" + +#: ../../c-api/intro.rst:497 +msgid "" +"There are few other data types that play a significant role in the Python/C" +" API; most are simple C types such as :c:type:`int`, :c:type:`long`, " +":c:type:`double` and :c:type:`char*`. A few structure types are used to " +"describe static tables used to list the functions exported by a module or " +"the data attributes of a new object type, and another is used to describe " +"the value of a complex number. These will be discussed together with the " +"functions that use them." +msgstr "" +"在 Python/C API 中扮演重要角色的其他数据类型很少;大多为简单 C 类型如 :c:type:`int`, :c:type:`long`, " +":c:type:`double` 和 :c:type:`char*`。 " +"有一些结构类型被用来描述用于列出模块导出的函数或者某个新对象类型的静态表,还有一个结构类型被用来描述复数的值。 这些结构类型将与使用它们的函数一起讨论。" + +#: ../../c-api/intro.rst:507 +msgid "" +"A signed integral type such that ``sizeof(Py_ssize_t) == sizeof(size_t)``. " +"C99 doesn't define such a thing directly (size_t is an unsigned integral " +"type). See :pep:`353` for details. ``PY_SSIZE_T_MAX`` is the largest " +"positive value of type :c:type:`Py_ssize_t`." +msgstr "" +"一个使得 ``sizeof(Py_ssize_t) == sizeof(size_t)`` 的有符号整数类型。 C99 " +"没有直接定义这样的东西(size_t 是一个无符号整数类型)。 请参阅 :pep:`353` 了解详情。 ``PY_SSIZE_T_MAX`` 是 " +":c:type:`Py_ssize_t` 类型的最大正数值。" + +#: ../../c-api/intro.rst:516 +msgid "Exceptions" +msgstr "异常" + +#: ../../c-api/intro.rst:518 +msgid "" +"The Python programmer only needs to deal with exceptions if specific error " +"handling is required; unhandled exceptions are automatically propagated to " +"the caller, then to the caller's caller, and so on, until they reach the " +"top-level interpreter, where they are reported to the user accompanied by a" +" stack traceback." +msgstr "" +"Python程序员只需要处理特定需要处理的错误异常;未处理的异常会自动传递给调用者,然后传递给调用者的调用者,依此类推,直到他们到达顶级解释器,在那里将它们报告给用户并伴随堆栈回溯。" + +#: ../../c-api/intro.rst:526 +msgid "" +"For C programmers, however, error checking always has to be explicit. All " +"functions in the Python/C API can raise exceptions, unless an explicit claim" +" is made otherwise in a function's documentation. In general, when a " +"function encounters an error, it sets an exception, discards any object " +"references that it owns, and returns an error indicator. If not documented " +"otherwise, this indicator is either ``NULL`` or ``-1``, depending on the " +"function's return type. A few functions return a Boolean true/false result, " +"with false indicating an error. Very few functions return no explicit error" +" indicator or have an ambiguous return value, and require explicit testing " +"for errors with :c:func:`PyErr_Occurred`. These exceptions are always " +"explicitly documented." +msgstr "" +"然而,对于 C 程序员来说,错误检查必须总是显式进行的。 Python/C API 中的所有函数都可以引发异常,除非在函数的文档中另外显式声明。 " +"一般来说,当一个函数遇到错误时,它会设置一个异常,丢弃它所拥有的任何对象引用,并返回一个错误标示。 如果没有说明例外的文档,这个标示将为 " +"``NULL`` 或 ``-1``,具体取决于函数的返回类型。 有少量函数会返回一个布尔真/假结果值,其中假值表示错误。 " +"有极少的函数没有显式的错误标示或是具有不明确的返回值,并需要用 :c:func:`PyErr_Occurred` 来进行显式的检测。 " +"这些例外总是会被明确地记入文档中。" + +#: ../../c-api/intro.rst:541 +msgid "" +"Exception state is maintained in per-thread storage (this is equivalent to " +"using global storage in an unthreaded application). A thread can be in one" +" of two states: an exception has occurred, or not. The function " +":c:func:`PyErr_Occurred` can be used to check for this: it returns a " +"borrowed reference to the exception type object when an exception has " +"occurred, and ``NULL`` otherwise. There are a number of functions to set " +"the exception state: :c:func:`PyErr_SetString` is the most common (though " +"not the most general) function to set the exception state, and " +":c:func:`PyErr_Clear` clears the exception state." +msgstr "" +"异常状态是在各个线程的存储中维护的(这相当于在一个无线程的应用中使用全局存储)。 一个线程可以处在两种状态之一:异常已经发生,或者没有发生。 函数 " +":c:func:`PyErr_Occurred` 可以被用来检查此状态:当异常发生时它将返回一个借入的异常类型对象的引用,在其他情况下则返回 " +"``NULL``。 有多个函数可以设置异常状态: :c:func:`PyErr_SetString` " +"是最常见的(尽管不是最通用的)设置异常状态的函数,而 :c:func:`PyErr_Clear` 可以清除异常状态。" + +#: ../../c-api/intro.rst:551 +msgid "" +"The full exception state consists of three objects (all of which can be " +"``NULL``): the exception type, the corresponding exception value, and the " +"traceback. These have the same meanings as the Python result of " +"``sys.exc_info()``; however, they are not the same: the Python objects " +"represent the last exception being handled by a Python :keyword:`try` ... " +":keyword:`except` statement, while the C level exception state only exists " +"while an exception is being passed on between C functions until it reaches " +"the Python bytecode interpreter's main loop, which takes care of " +"transferring it to ``sys.exc_info()`` and friends." +msgstr "" +"完整的异常状态由三个对象组成 (它为都可以为 ``NULL``): 异常类型、相应的异常值,以及回溯信息。 这些对象的含义与 Python 中 " +"``sys.exc_info()`` 的结果相同;然而,它们并不是一样的:Python 对象代表由 Python :keyword:`try` ..." +" :keyword:`except` 语句所处理的最后一个异常,而 C 层级的异常状态只在异常被传入到 C 函数或在它们之间传递时存在直至其到达 " +"Python 字节码解释器的主事件循环,该事件循环会负责将其转移至 ``sys.exc_info()`` 等处。" + +#: ../../c-api/intro.rst:563 +msgid "" +"Note that starting with Python 1.5, the preferred, thread-safe way to access" +" the exception state from Python code is to call the function " +":func:`sys.exc_info`, which returns the per-thread exception state for " +"Python code. Also, the semantics of both ways to access the exception state" +" have changed so that a function which catches an exception will save and " +"restore its thread's exception state so as to preserve the exception state " +"of its caller. This prevents common bugs in exception handling code caused " +"by an innocent-looking function overwriting the exception being handled; it " +"also reduces the often unwanted lifetime extension for objects that are " +"referenced by the stack frames in the traceback." +msgstr "" +"请注意自 Python 1.5 开始,从 Python 代码访问异常状态的首选的、线程安全的方式是调用函数 " +":func:`sys.exc_info`,它将返回 Python 代码的分线程异常状态。 " +"此外,这两种访问异常状态的方式的语义都发生了变化因而捕获到异常的函数将保存并恢复其线程的异常状态以保留其调用方的异常状态。 " +"这将防止异常处理代码中由一个看起来很无辜的函数覆盖了正在处理的异常所造成的常见错误;它还减少了在回溯由栈帧所引用的对象的往往不被需要的生命其延长。" + +#: ../../c-api/intro.rst:574 +msgid "" +"As a general principle, a function that calls another function to perform " +"some task should check whether the called function raised an exception, and" +" if so, pass the exception state on to its caller. It should discard any " +"object references that it owns, and return an error indicator, but it " +"should *not* set another exception --- that would overwrite the exception " +"that was just raised, and lose important information about the exact cause " +"of the error." +msgstr "" +"作为一般的原则,一个调用另一个函数来执行某些任务的函数应当检查被调用的函数是否引发了异常,并在引发异常时将异常状态传递给其调用方。 " +"它应当丢弃它所拥有的任何对象引用,并返回一个错误标示,但它 *不应* 设置另一个异常 --- 那会覆盖刚引发的异常,并丢失有关错误确切原因的重要信息。" + +#: ../../c-api/intro.rst:583 +msgid "" +"A simple example of detecting exceptions and passing them on is shown in the" +" :c:func:`sum_sequence` example above. It so happens that this example " +"doesn't need to clean up any owned references when it detects an error. The" +" following example function shows some error cleanup. First, to remind you " +"why you like Python, we show the equivalent Python code::" +msgstr "" +"一个检测异常并传递它们的简单例子在上面的 :c:func:`sum_sequence` 示例中进行了演示。 " +"这个例子恰好在检测到错误时不需要清理所拥有的任何引用。 下面的示例函数演示了一些错误清理操作。 首先,为了向你提示 Python " +"的优势,我们展示了等效的 Python 代码::" + +#: ../../c-api/intro.rst:598 +msgid "Here is the corresponding C code, in all its glory::" +msgstr "对应的 C 代码如下:" + +#: ../../c-api/intro.rst:650 +msgid "" +"This example represents an endorsed use of the ``goto`` statement in C! It " +"illustrates the use of :c:func:`PyErr_ExceptionMatches` and " +":c:func:`PyErr_Clear` to handle specific exceptions, and the use of " +":c:func:`Py_XDECREF` to dispose of owned references that may be ``NULL`` " +"(note the ``'X'`` in the name; :c:func:`Py_DECREF` would crash when " +"confronted with a ``NULL`` reference). It is important that the variables " +"used to hold owned references are initialized to ``NULL`` for this to work; " +"likewise, the proposed return value is initialized to ``-1`` (failure) and " +"only set to success after the final call made is successful." +msgstr "" +"这个例子代表了 C 语言中 ``goto`` 语句一种受到认可的用法! 它说明了如何使用 " +":c:func:`PyErr_ExceptionMatches` 和 :c:func:`PyErr_Clear` 来处理特定的异常,以及如何使用 " +":c:func:`Py_XDECREF` 来处理可能为 ``NULL`` 的自有引用(注意名称中的 " +"``'X'``;:c:func:`Py_DECREF` 在遇到 ``NULL`` 引用时将会崩溃)。 重要的一点在于用来保存自有引用的变量要被初始化为 " +"``NULL`` 才能发挥作用;类似地,建议的返回值也要被初始化为 ``-1`` (失败) 并且只有在最终执行的调用成功后才会被设置为成功。" + +#: ../../c-api/intro.rst:664 +msgid "Embedding Python" +msgstr "嵌入Python" + +#: ../../c-api/intro.rst:666 +msgid "" +"The one important task that only embedders (as opposed to extension writers)" +" of the Python interpreter have to worry about is the initialization, and " +"possibly the finalization, of the Python interpreter. Most functionality of" +" the interpreter can only be used after the interpreter has been " +"initialized." +msgstr "" +"只有 Python 解释器的嵌入方(相对于扩展编写者而言)才需要担心的一项重要任务是它的初始化,可能还有它的最终化。 " +"解释器的大多数功能只有在解释器被初始化之后才能被使用。" + +#: ../../c-api/intro.rst:679 +msgid "" +"The basic initialization function is :c:func:`Py_Initialize`. This " +"initializes the table of loaded modules, and creates the fundamental modules" +" :mod:`builtins`, :mod:`__main__`, and :mod:`sys`. It also initializes the " +"module search path (``sys.path``)." +msgstr "" +"基本的初始化函数是 :c:func:`Py_Initialize`。 此函数将初始化已加载模块表,并创建基本模块 :mod:`builtins`, " +":mod:`__main__` 和 :mod:`sys`。 它还将初始化模块搜索路径 (``sys.path``)。" + +#: ../../c-api/intro.rst:686 +msgid "" +":c:func:`Py_Initialize` does not set the \"script argument list\" " +"(``sys.argv``). If this variable is needed by Python code that will be " +"executed later, it must be set explicitly with a call to " +"``PySys_SetArgvEx(argc, argv, updatepath)`` after the call to " +":c:func:`Py_Initialize`." +msgstr "" +":c:func:`Py_Initialize` 不会设置 \"脚本参数列表\" (``sys.argv``)。 如果随后将要执行的 Python " +"代码需要此变量,则必须在调用 :c:func:`Py_Initialize` 之后通过调用 ``PySys_SetArgvEx(argc, argv," +" updatepath)`` 来显式地设置它。" + +#: ../../c-api/intro.rst:691 +msgid "" +"On most systems (in particular, on Unix and Windows, although the details " +"are slightly different), :c:func:`Py_Initialize` calculates the module " +"search path based upon its best guess for the location of the standard " +"Python interpreter executable, assuming that the Python library is found in " +"a fixed location relative to the Python interpreter executable. In " +"particular, it looks for a directory named :file:`lib/python{X.Y}` relative " +"to the parent directory where the executable named :file:`python` is found " +"on the shell command search path (the environment variable :envvar:`PATH`)." +msgstr "" +"在大多数系统上(特别是 Unix 和 Windows,虽然在细节上有所不同),:c:func:`Py_Initialize` 将根据对标准 Python" +" 解释器可执行文件的位置的最佳猜测来计算模块搜索路径,并设定 Python 库可在相对于 Python 解释器可执行文件的固定位置上找到。 " +"特别地,它将相对于在 shell 命令搜索路径 (环境变量 :envvar:`PATH`) 上找到的名为 :file:`python` " +"的可执行文件所在父目录中查找名为 :file:`lib/python{X.Y}` 的目录。" + +#: ../../c-api/intro.rst:700 +msgid "" +"For instance, if the Python executable is found in " +":file:`/usr/local/bin/python`, it will assume that the libraries are in " +":file:`/usr/local/lib/python{X.Y}`. (In fact, this particular path is also " +"the \"fallback\" location, used when no executable file named :file:`python`" +" is found along :envvar:`PATH`.) The user can override this behavior by " +"setting the environment variable :envvar:`PYTHONHOME`, or insert additional " +"directories in front of the standard path by setting :envvar:`PYTHONPATH`." +msgstr "" +"举例来说,如果 Python 可执行文件位于 :file:`/usr/local/bin/python`,它将假定库位于 " +":file:`/usr/local/lib/python{X.Y}`。 (实际上,这个特定路径还将成为“回退”位置,会在当无法在 " +":envvar:`PATH` 中找到名为 :file:`python` 的可执行文件时被使用。) 用户可以通过设置环境变量 " +":envvar:`PYTHONHOME`,或通过设置 :envvar:`PYTHONPATH` 在标准路径之前插入额外的目录来覆盖此行为。" + +#: ../../c-api/intro.rst:715 +msgid "" +"The embedding application can steer the search by calling " +"``Py_SetProgramName(file)`` *before* calling :c:func:`Py_Initialize`. Note" +" that :envvar:`PYTHONHOME` still overrides this and :envvar:`PYTHONPATH` is " +"still inserted in front of the standard path. An application that requires " +"total control has to provide its own implementation of :c:func:`Py_GetPath`," +" :c:func:`Py_GetPrefix`, :c:func:`Py_GetExecPrefix`, and " +":c:func:`Py_GetProgramFullPath` (all defined in :file:`Modules/getpath.c`)." +msgstr "" +"嵌入的应用程序可以通过在调用 :c:func:`Py_Initialize` *之前* 调用 ``Py_SetProgramName(file)`` " +"来改变搜索次序。 请注意 :envvar:`PYTHONHOME` 仍然会覆盖此设置并且 :envvar:`PYTHONPATH` " +"仍然会被插入到标准路径之前。 需要完全控制权的应用程序必须提供它自己的 :c:func:`Py_GetPath`, " +":c:func:`Py_GetPrefix`, :c:func:`Py_GetExecPrefix` 和 " +":c:func:`Py_GetProgramFullPath` 实现(这些函数均在 :file:`Modules/getpath.c` 中定义)。" + +#: ../../c-api/intro.rst:725 +msgid "" +"Sometimes, it is desirable to \"uninitialize\" Python. For instance, the " +"application may want to start over (make another call to " +":c:func:`Py_Initialize`) or the application is simply done with its use of " +"Python and wants to free memory allocated by Python. This can be " +"accomplished by calling :c:func:`Py_FinalizeEx`. The function " +":c:func:`Py_IsInitialized` returns true if Python is currently in the " +"initialized state. More information about these functions is given in a " +"later chapter. Notice that :c:func:`Py_FinalizeEx` does *not* free all " +"memory allocated by the Python interpreter, e.g. memory allocated by " +"extension modules currently cannot be released." +msgstr "" +"有时,还需要对 Python 进行“反初始化”。 例如,应用程序可能想要重新启动 (再次调用 :c:func:`Py_Initialize`) " +"或者应用程序对 Python 的使用已经完成并想要释放 Python 所分配的内存。 这可以通过调用 :c:func:`Py_FinalizeEx` " +"来实现。 如果当前 Python 处于已初始化状态则 :c:func:`Py_IsInitialized` 函数将返回真值。 " +"有关这些函数的更多信息将在之后的章节中给出。 请注意 :c:func:`Py_FinalizeEx` *不会* 释放所有由 Python " +"解释器所分配的内存,例如由扩展模块所分配的内存目前是不会被释放的。" + +#: ../../c-api/intro.rst:739 +msgid "Debugging Builds" +msgstr "调试构建" + +#: ../../c-api/intro.rst:741 +msgid "" +"Python can be built with several macros to enable extra checks of the " +"interpreter and extension modules. These checks tend to add a large amount " +"of overhead to the runtime so they are not enabled by default." +msgstr "Python 可以附带某些宏来编译以启用对解释器和扩展模块的额外检查。 这些检查会给运行时增加大量额外开销因此它们默认未被启用。" + +#: ../../c-api/intro.rst:745 +msgid "" +"A full list of the various types of debugging builds is in the file " +":file:`Misc/SpecialBuilds.txt` in the Python source distribution. Builds are" +" available that support tracing of reference counts, debugging the memory " +"allocator, or low-level profiling of the main interpreter loop. Only the " +"most frequently-used builds will be described in the remainder of this " +"section." +msgstr "" +"A full list of the various types of debugging builds is in the file " +":file:`Misc/SpecialBuilds.txt` in the Python source distribution. Builds are" +" available that support tracing of reference counts, debugging the memory " +"allocator, or low-level profiling of the main interpreter loop. Only the " +"most frequently-used builds will be described in the remainder of this " +"section." + +#: ../../c-api/intro.rst:751 +msgid "" +"Compiling the interpreter with the :c:macro:`Py_DEBUG` macro defined " +"produces what is generally meant by \"a debug build\" of Python. " +":c:macro:`Py_DEBUG` is enabled in the Unix build by adding ``--with-" +"pydebug`` to the :file:`./configure` command. It is also implied by the " +"presence of the not-Python-specific :c:macro:`_DEBUG` macro. When " +":c:macro:`Py_DEBUG` is enabled in the Unix build, compiler optimization is " +"disabled." +msgstr "" + +#: ../../c-api/intro.rst:758 +msgid "" +"In addition to the reference count debugging described below, the following " +"extra checks are performed:" +msgstr "除了前面描述的引用计数调试之外,还执行以下额外检查:" + +#: ../../c-api/intro.rst:761 +msgid "Extra checks are added to the object allocator." +msgstr "额外检查将添加到对象分配器。" + +#: ../../c-api/intro.rst:763 +msgid "Extra checks are added to the parser and compiler." +msgstr "额外的检查将添加到解析器和编译器中。" + +#: ../../c-api/intro.rst:765 +msgid "" +"Downcasts from wide types to narrow types are checked for loss of " +"information." +msgstr "检查从宽类型向窄类型的向下强转是否损失了信息。" + +#: ../../c-api/intro.rst:767 +msgid "" +"A number of assertions are added to the dictionary and set implementations. " +"In addition, the set object acquires a :meth:`test_c_api` method." +msgstr "许多断言被添加到字典和集合实现中。另外,集合对象需要 :meth:`test_c_api` 方法。" + +#: ../../c-api/intro.rst:770 +msgid "Sanity checks of the input arguments are added to frame creation." +msgstr "输入参数的完整性检查被添加到框架创建中。" + +#: ../../c-api/intro.rst:772 +msgid "" +"The storage for ints is initialized with a known invalid pattern to catch " +"reference to uninitialized digits." +msgstr "使用已知的无效模式初始化整型的存储,以捕获对未初始化数字的引用。" + +#: ../../c-api/intro.rst:775 +msgid "" +"Low-level tracing and extra exception checking are added to the runtime " +"virtual machine." +msgstr "添加底层跟踪和额外的异常检查到虚拟机的运行时中。" + +#: ../../c-api/intro.rst:778 +msgid "Extra checks are added to the memory arena implementation." +msgstr "添加额外的检查到 arena 内存实现。" + +#: ../../c-api/intro.rst:780 +msgid "Extra debugging is added to the thread module." +msgstr "添加额外调试到线程模块。" + +#: ../../c-api/intro.rst:782 +msgid "There may be additional checks not mentioned here." +msgstr "这里可能没有提到的额外的检查。" + +#: ../../c-api/intro.rst:784 +msgid "" +"Defining :c:macro:`Py_TRACE_REFS` enables reference tracing. When defined, " +"a circular doubly linked list of active objects is maintained by adding two " +"extra fields to every :c:type:`PyObject`. Total allocations are tracked as " +"well. Upon exit, all existing references are printed. (In interactive mode" +" this happens after every statement run by the interpreter.) Implied by " +":c:macro:`Py_DEBUG`." +msgstr "" + +#: ../../c-api/intro.rst:790 +msgid "" +"Please refer to :file:`Misc/SpecialBuilds.txt` in the Python source " +"distribution for more detailed information." +msgstr "有关更多详细信息,请参阅Python源代码中的 :file:`Misc/SpecialBuilds.txt` 。" diff --git a/c-api/iter.po b/c-api/iter.po new file mode 100644 index 000000000..0bffaa137 --- /dev/null +++ b/c-api/iter.po @@ -0,0 +1,53 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) 2001-2022, Python Software Foundation +# This file is distributed under the same license as the Python package. +# FIRST AUTHOR , YEAR. +# +# Translators: +# dannyvi , 2018 +# Freesand Leo , 2021 +# +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: Python 3.9\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2022-11-04 14:34+0000\n" +"PO-Revision-Date: 2017-02-16 17:36+0000\n" +"Last-Translator: Freesand Leo , 2021\n" +"Language-Team: Chinese (China) (https://www.transifex.com/python-doc/teams/5390/zh_CN/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: zh_CN\n" +"Plural-Forms: nplurals=1; plural=0;\n" + +#: ../../c-api/iter.rst:6 +msgid "Iterator Protocol" +msgstr "迭代器协议" + +#: ../../c-api/iter.rst:8 +msgid "There are two functions specifically for working with iterators." +msgstr "迭代器有两个函数。" + +#: ../../c-api/iter.rst:12 +msgid "" +"Return true if the object *o* supports the iterator protocol. This function" +" always succeeds." +msgstr "如果对象 *o* 支持迭代器协议则返回真值。 此函数总是会成功执行。" + +#: ../../c-api/iter.rst:18 +msgid "" +"Return the next value from the iteration *o*. The object must be an " +"iterator (it is up to the caller to check this). If there are no remaining " +"values, returns ``NULL`` with no exception set. If an error occurs while " +"retrieving the item, returns ``NULL`` and passes along the exception." +msgstr "" +"返回迭代 *o* 的下一个值。 对象必须是一个迭代器(这应由调用者来判断)。 如果没有余下的值,则返回 ``NULL`` 并且不设置异常。 " +"如果在获取条目时发生了错误,则返回 ``NULL`` 并且传递异常。" + +#: ../../c-api/iter.rst:23 +msgid "" +"To write a loop which iterates over an iterator, the C code should look " +"something like this::" +msgstr "要为迭代器编写一个一个循环,C代码应该看起来像这样 ::" diff --git a/c-api/iterator.po b/c-api/iterator.po new file mode 100644 index 000000000..830354bc2 --- /dev/null +++ b/c-api/iterator.po @@ -0,0 +1,80 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) 2001-2022, Python Software Foundation +# This file is distributed under the same license as the Python package. +# FIRST AUTHOR , YEAR. +# +# Translators: +# Alpha Du , 2019 +# Freesand Leo , 2021 +# +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: Python 3.9\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2022-11-04 14:34+0000\n" +"PO-Revision-Date: 2017-02-16 17:36+0000\n" +"Last-Translator: Freesand Leo , 2021\n" +"Language-Team: Chinese (China) (https://www.transifex.com/python-doc/teams/5390/zh_CN/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: zh_CN\n" +"Plural-Forms: nplurals=1; plural=0;\n" + +#: ../../c-api/iterator.rst:6 +msgid "Iterator Objects" +msgstr "迭代器对象" + +#: ../../c-api/iterator.rst:8 +msgid "" +"Python provides two general-purpose iterator objects. The first, a sequence" +" iterator, works with an arbitrary sequence supporting the " +":meth:`__getitem__` method. The second works with a callable object and a " +"sentinel value, calling the callable for each item in the sequence, and " +"ending the iteration when the sentinel value is returned." +msgstr "" +"Python 提供了两个通用迭代器对象。 第一个是序列迭代器,它使用支持 :meth:`__getitem__` 方法的任意序列。 " +"第二个使用可调用对象和一个 sentinel 值,为序列中的每个项调用可调用对象,并在返回 sentinel 值时结束迭代。" + +#: ../../c-api/iterator.rst:17 +msgid "" +"Type object for iterator objects returned by :c:func:`PySeqIter_New` and the" +" one-argument form of the :func:`iter` built-in function for built-in " +"sequence types." +msgstr ":c:func:`PySeqIter_New` 返回迭代器对象的类型对象和内置序列类型内置函数 :func:`iter` 的单参数形式。" + +#: ../../c-api/iterator.rst:24 +msgid "" +"Return true if the type of *op* is :c:data:`PySeqIter_Type`. This function " +"always succeeds." +msgstr "如果 *op* 的类型为 :c:data:`PySeqIter_Type` 则返回真值。 此函数总是会成功执行。" + +#: ../../c-api/iterator.rst:30 +msgid "" +"Return an iterator that works with a general sequence object, *seq*. The " +"iteration ends when the sequence raises :exc:`IndexError` for the " +"subscripting operation." +msgstr "返回一个与常规序列对象一起使用的迭代器 *seq*。 当序列订阅操作引发 :exc:`IndexError` 时,迭代结束。" + +#: ../../c-api/iterator.rst:37 +msgid "" +"Type object for iterator objects returned by :c:func:`PyCallIter_New` and " +"the two-argument form of the :func:`iter` built-in function." +msgstr "由函数 :c:func:`PyCallIter_New` 和 :func:`iter` 内置函数的双参数形式返回的迭代器对象类型对象。" + +#: ../../c-api/iterator.rst:43 +msgid "" +"Return true if the type of *op* is :c:data:`PyCallIter_Type`. This function" +" always succeeds." +msgstr "如果 *op* 的类型为 :c:data:`PyCallIter_Type` 则返回真值。 此函数总是会成功执行。" + +#: ../../c-api/iterator.rst:49 +msgid "" +"Return a new iterator. The first parameter, *callable*, can be any Python " +"callable object that can be called with no parameters; each call to it " +"should return the next item in the iteration. When *callable* returns a " +"value equal to *sentinel*, the iteration will be terminated." +msgstr "" +"返回一个新的迭代器。 第一个参数 *callable* 可以是任何可以在没有参数的情况下调用的 Python " +"可调用对象;每次调用都应该返回迭代中的下一个项目。 当 *callable* 返回等于 *sentinel* 的值时,迭代将终止。" diff --git a/c-api/list.po b/c-api/list.po new file mode 100644 index 000000000..a0bf52656 --- /dev/null +++ b/c-api/list.po @@ -0,0 +1,179 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) 2001-2022, Python Software Foundation +# This file is distributed under the same license as the Python package. +# FIRST AUTHOR , YEAR. +# +# Translators: +# Ming Jia <616896512@qq.com>, 2017 +# 叶浚安 , 2019 +# Freesand Leo , 2021 +# +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: Python 3.9\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2022-11-04 14:34+0000\n" +"PO-Revision-Date: 2017-02-16 17:36+0000\n" +"Last-Translator: Freesand Leo , 2021\n" +"Language-Team: Chinese (China) (https://www.transifex.com/python-doc/teams/5390/zh_CN/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: zh_CN\n" +"Plural-Forms: nplurals=1; plural=0;\n" + +#: ../../c-api/list.rst:6 +msgid "List Objects" +msgstr "列表对象" + +#: ../../c-api/list.rst:13 +msgid "This subtype of :c:type:`PyObject` represents a Python list object." +msgstr "这个C类型 :c:type:`PyObject` 的子类型代表一个Python列表对象。" + +#: ../../c-api/list.rst:18 +msgid "" +"This instance of :c:type:`PyTypeObject` represents the Python list type. " +"This is the same object as :class:`list` in the Python layer." +msgstr "" +"这是个属于 :c:type:`PyTypeObject` 的代表Python列表类型的实例。在Python层面和类型 :class:`list` " +"是同一个对象。" + +#: ../../c-api/list.rst:24 +msgid "" +"Return true if *p* is a list object or an instance of a subtype of the list " +"type. This function always succeeds." +msgstr "如果 *p* 是一个 list 对象或者 list 类型的子类型的实例则返回真值。 此函数总是会成功执行。" + +#: ../../c-api/list.rst:30 +msgid "" +"Return true if *p* is a list object, but not an instance of a subtype of the" +" list type. This function always succeeds." +msgstr "如果 *p* 是一个 list 对象但不是 list 类型的子类型的实例则返回真值。 此函数总是会成功执行。" + +#: ../../c-api/list.rst:36 +msgid "Return a new list of length *len* on success, or ``NULL`` on failure." +msgstr "成功时返回一个长度为 *len* 的新列表,失败时返回 ``NULL``。" + +#: ../../c-api/list.rst:40 +msgid "" +"If *len* is greater than zero, the returned list object's items are set to " +"``NULL``. Thus you cannot use abstract API functions such as " +":c:func:`PySequence_SetItem` or expose the object to Python code before " +"setting all items to a real object with :c:func:`PyList_SetItem`." +msgstr "" +"当 *len* 大于零时,被返回的列表对象项目被设成 ``NULL``。因此你不能用类似C函数 :c:func:`PySequence_SetItem`" +" 的抽象API或者用C函数 :c:func:`PyList_SetItem` 将所有项目设置成真实对象前对Python代码公开这个对象。" + +#: ../../c-api/list.rst:50 +msgid "" +"Return the length of the list object in *list*; this is equivalent to " +"``len(list)`` on a list object." +msgstr "返回 *list* 中列表对象的长度;这等于在列表对象调用 ``len(list)`` 。" + +#: ../../c-api/list.rst:56 +msgid "Macro form of :c:func:`PyList_Size` without error checking." +msgstr "宏版本的C函数 :c:func:`PyList_Size` ,没有错误检测。" + +#: ../../c-api/list.rst:61 +msgid "" +"Return the object at position *index* in the list pointed to by *list*. The" +" position must be non-negative; indexing from the end of the list is not " +"supported. If *index* is out of bounds (<0 or >=len(list)), return ``NULL``" +" and set an :exc:`IndexError` exception." +msgstr "" +"返回 *list* 所指向列表中 *index* 位置上的对象。 位置值必须为非负数;不支持从列表末尾进行索引。 如果 *index* 超出边界 (<0" +" or >=len(list)),则返回 ``NULL`` 并设置 :exc:`IndexError` 异常。" + +#: ../../c-api/list.rst:69 +msgid "Macro form of :c:func:`PyList_GetItem` without error checking." +msgstr "宏版本的C函数 :c:func:`PyList_GetItem` ,没有错误检测。" + +#: ../../c-api/list.rst:74 +msgid "" +"Set the item at index *index* in list to *item*. Return ``0`` on success. " +"If *index* is out of bounds, return ``-1`` and set an :exc:`IndexError` " +"exception." +msgstr "" +"将列表中索引为 *index* 的项设为 *item*。 成功时返回 ``0``。 如果 *index* 超出范围则返回 ``-1`` 并设定 " +":exc:`IndexError` 异常。" + +#: ../../c-api/list.rst:80 +msgid "" +"This function \"steals\" a reference to *item* and discards a reference to " +"an item already in the list at the affected position." +msgstr "此函数会“偷走”一个对 *item* 的引用并丢弃一个对列表中受影响位置上的已有条目的引用。" + +#: ../../c-api/list.rst:86 +msgid "" +"Macro form of :c:func:`PyList_SetItem` without error checking. This is " +"normally only used to fill in new lists where there is no previous content." +msgstr "不带错误检测的宏版本 :c:func:`PyList_SetItem`。 这通常只被用于新列表中之前没有内容的位置进行填充。" + +#: ../../c-api/list.rst:91 +msgid "" +"This macro \"steals\" a reference to *item*, and, unlike " +":c:func:`PyList_SetItem`, does *not* discard a reference to any item that is" +" being replaced; any reference in *list* at position *i* will be leaked." +msgstr "" +"该宏会“偷走”一个对 *item* 的引用,但与 :c:func:`PyList_SetItem` 不同的是它 *不会* 丢弃对任何被替换条目的引用;在" +" *list* 的 *i* 位置上的任何引用都将被泄露。" + +#: ../../c-api/list.rst:99 +msgid "" +"Insert the item *item* into list *list* in front of index *index*. Return " +"``0`` if successful; return ``-1`` and set an exception if unsuccessful. " +"Analogous to ``list.insert(index, item)``." +msgstr "" +"将条目 *item* 插入到列表 *list* 索引号 *index* 之前的位置。 如果成功将返回 ``0``;如果不成功则返回 ``-1`` " +"并设置一个异常。 相当于 ``list.insert(index, item)``。" + +#: ../../c-api/list.rst:106 +msgid "" +"Append the object *item* at the end of list *list*. Return ``0`` if " +"successful; return ``-1`` and set an exception if unsuccessful. Analogous " +"to ``list.append(item)``." +msgstr "" +"将对象 *item* 添加到列表 *list* 的末尾。 如果成功将返回 ``0``;如果不成功则返回 ``-1`` 并设置一个异常。 相当于 " +"``list.append(item)``。" + +#: ../../c-api/list.rst:113 +msgid "" +"Return a list of the objects in *list* containing the objects *between* " +"*low* and *high*. Return ``NULL`` and set an exception if unsuccessful. " +"Analogous to ``list[low:high]``. Indexing from the end of the list is not " +"supported." +msgstr "" +"返回一个对象列表,包含 *list* 当中位于 *low* 和 *high* *之间* 的对象。 如果不成功则返回 ``NULL`` 并设置异常。 " +"相当于 ``list[low:high]``。 不支持从列表末尾进行索引。" + +#: ../../c-api/list.rst:120 +msgid "" +"Set the slice of *list* between *low* and *high* to the contents of " +"*itemlist*. Analogous to ``list[low:high] = itemlist``. The *itemlist* may " +"be ``NULL``, indicating the assignment of an empty list (slice deletion). " +"Return ``0`` on success, ``-1`` on failure. Indexing from the end of the " +"list is not supported." +msgstr "" +"将 *list* 当中 *low* 与 *high* 之间的切片设为 *itemlist* 的内容。 相当于 ``list[low:high] = " +"itemlist``。 *itemlist* 可以为 ``NULL``,表示赋值为一个空列表(删除切片)。 成功时返回 ``0``,失败时返回 " +"``-1``。 这里不支持从列表末尾进行索引。" + +#: ../../c-api/list.rst:129 +msgid "" +"Sort the items of *list* in place. Return ``0`` on success, ``-1`` on " +"failure. This is equivalent to ``list.sort()``." +msgstr "对 *list* 中的条目进行原地排序。 成功时返回 ``0``,失败时返回 ``-1``。 这等价于 ``list.sort()``。" + +#: ../../c-api/list.rst:135 +msgid "" +"Reverse the items of *list* in place. Return ``0`` on success, ``-1`` on " +"failure. This is the equivalent of ``list.reverse()``." +msgstr "" +"对 *list* 中的条目进行原地反转。 成功时返回 ``0``,失败时返回 ``-1``。 这等价于 ``list.reverse()``。" + +#: ../../c-api/list.rst:143 +msgid "" +"Return a new tuple object containing the contents of *list*; equivalent to " +"``tuple(list)``." +msgstr "返回一个新的元组对象,其中包含 *list* 的内容;等价于 ``tuple(list)``。" diff --git a/c-api/long.po b/c-api/long.po new file mode 100644 index 000000000..cd7177343 --- /dev/null +++ b/c-api/long.po @@ -0,0 +1,406 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) 2001-2024, Python Software Foundation +# This file is distributed under the same license as the Python package. +# FIRST AUTHOR , YEAR. +# +# Translators: +# 8af080f2e6702c64bedd01873aed27e8_25aec74 , 2019 +# Sean Chao , 2020 +# helloworldSB , 2021 +# Dai Xu , 2022 +# Freesand Leo , 2022 +# Rafael Fontenelle , 2024 +# +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: Python 3.9\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2024-04-15 06:01+0000\n" +"PO-Revision-Date: 2017-02-16 17:36+0000\n" +"Last-Translator: Rafael Fontenelle , 2024\n" +"Language-Team: Chinese (China) (https://app.transifex.com/python-doc/teams/5390/zh_CN/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: zh_CN\n" +"Plural-Forms: nplurals=1; plural=0;\n" + +#: ../../c-api/long.rst:6 +msgid "Integer Objects" +msgstr "整数型对象" + +#: ../../c-api/long.rst:11 +msgid "" +"All integers are implemented as \"long\" integer objects of arbitrary size." +msgstr "所有整数都实现为长度任意的长整数对象。" + +#: ../../c-api/long.rst:13 +msgid "" +"On error, most ``PyLong_As*`` APIs return ``(return type)-1`` which cannot " +"be distinguished from a number. Use :c:func:`PyErr_Occurred` to " +"disambiguate." +msgstr "" +"在出错时,大多数 ``PyLong_As*`` API 都会返回 ``(return type)-1``,这与数字无法区分开。请采用 " +":c:func:`PyErr_Occurred` 来加以区分。" + +#: ../../c-api/long.rst:18 +msgid "This subtype of :c:type:`PyObject` represents a Python integer object." +msgstr "表示 Python 整数对象的 :c:type:`PyObject` 子类型。" + +#: ../../c-api/long.rst:23 +msgid "" +"This instance of :c:type:`PyTypeObject` represents the Python integer type. " +"This is the same object as :class:`int` in the Python layer." +msgstr "" +"这个 :c:type:`PyTypeObject` 的实例表示 Python 的整数类型。与 Python 语言中的 :class:`int` 相同。" + +#: ../../c-api/long.rst:29 +msgid "" +"Return true if its argument is a :c:type:`PyLongObject` or a subtype of " +":c:type:`PyLongObject`. This function always succeeds." +msgstr "" +"如果参数是 :c:type:`PyLongObject` 或 :c:type:`PyLongObject` 的子类型,则返回 " +"True。该函数一定能够执行成功。" + +#: ../../c-api/long.rst:35 +msgid "" +"Return true if its argument is a :c:type:`PyLongObject`, but not a subtype " +"of :c:type:`PyLongObject`. This function always succeeds." +msgstr "" +"如果其参数属于 :c:type:`PyLongObject`,但不是 :c:type:`PyLongObject` 的子类型则返回真值。 " +"此函数总是会成功执行。" + +#: ../../c-api/long.rst:41 +msgid "" +"Return a new :c:type:`PyLongObject` object from *v*, or ``NULL`` on failure." +msgstr "由 *v* 返回一个新的 :c:type:`PyLongObject` 对象,失败时返回 ``NULL`` 。" + +#: ../../c-api/long.rst:43 +msgid "" +"The current implementation keeps an array of integer objects for all " +"integers between ``-5`` and ``256``. When you create an int in that range " +"you actually just get back a reference to the existing object." +msgstr "" +"当前的实现维护着一个整数对象数组,包含 ``-5`` 和 ``256`` 之间的所有整数对象。 若创建一个位于该区间的 int " +"时,实际得到的将是对已有对象的引用。" + +#: ../../c-api/long.rst:50 +msgid "" +"Return a new :c:type:`PyLongObject` object from a C :c:type:`unsigned long`," +" or ``NULL`` on failure." +msgstr "" +"由 C :c:type:`unsigned long` 类型返回一个新的 :c:type:`PyLongObject` 对象,失败时返回 " +"``NULL`` 。" + +#: ../../c-api/long.rst:56 +msgid "" +"Return a new :c:type:`PyLongObject` object from a C :c:type:`Py_ssize_t`, or" +" ``NULL`` on failure." +msgstr "" +"由 C :c:type:`Py_ssize_t` 返回一个新的 :c:type:`PyLongObject` 对象,失败时返回 ``NULL`` 。" + +#: ../../c-api/long.rst:62 +msgid "" +"Return a new :c:type:`PyLongObject` object from a C :c:type:`size_t`, or " +"``NULL`` on failure." +msgstr "" +"由 C :c:type:`size_t` 返回一个新的 :c:type:`PyLongObject` 对象,失败则返回 ``NULL`` 。" + +#: ../../c-api/long.rst:68 +msgid "" +"Return a new :c:type:`PyLongObject` object from a C :c:type:`long long`, or " +"``NULL`` on failure." +msgstr "" +"从 C :c:type:`long long` 返回一个新的 :c:type:`PyLongObject` 对象,失败时返回 ``NULL`` 。" + +#: ../../c-api/long.rst:74 +msgid "" +"Return a new :c:type:`PyLongObject` object from a C :c:type:`unsigned long " +"long`, or ``NULL`` on failure." +msgstr "" +"从 C :c:type:`unsigned long long` 返回一个新的 :c:type:`PyLongObject` 对象,失败时返回 " +"``NULL`` 。" + +#: ../../c-api/long.rst:80 +msgid "" +"Return a new :c:type:`PyLongObject` object from the integer part of *v*, or " +"``NULL`` on failure." +msgstr "由 *v* 的整数部分返回一个新的 :c:type:`PyLongObject` 对象,失败则返回 ``NULL`` 。" + +#: ../../c-api/long.rst:86 +msgid "" +"Return a new :c:type:`PyLongObject` based on the string value in *str*, " +"which is interpreted according to the radix in *base*. If *pend* is " +"non-``NULL``, *\\*pend* will point to the first character in *str* which " +"follows the representation of the number. If *base* is ``0``, *str* is " +"interpreted using the :ref:`integers` definition; in this case, leading " +"zeros in a non-zero decimal number raises a :exc:`ValueError`. If *base* is " +"not ``0``, it must be between ``2`` and ``36``, inclusive. Leading spaces " +"and single underscores after a base specifier and between digits are " +"ignored. If there are no digits, :exc:`ValueError` will be raised." +msgstr "" +"根据 *str* 字符串值返回一个新的 :c:type:`PyLongObject` ,*base* 指定了整数的基。如果 *pend* 不为 " +"``NULL`` ,则 */*pend* 将指向 *str* 中表示数字部分后面的第一个字符。如果 *base* 为 ``0`` , *str* 将采用" +" :ref:`integers` 的定义进行解释;这时非零十进制数的前导零会触发 :exc:`ValueError` 。如果 *base* 不为 " +"``0`` ,则须位于 ``2`` 和 ``36`` 之间(含 2 和 36)。基之后及数字之间的前导空格、单下划线将被忽略。如果不存在数字,将触发 " +":exc:`ValueError`。" + +#: ../../c-api/long.rst:99 +msgid "Convert a sequence of Unicode digits to a Python integer value." +msgstr "将 Unicode 数字序列转换为 Python 整数值。" + +#: ../../c-api/long.rst:103 +msgid "" +"Part of the old-style :c:type:`Py_UNICODE` API; please migrate to using " +":c:func:`PyLong_FromUnicodeObject`." +msgstr "" +"旧的 :c:type:`Py_UNICODE` API的一部分;请迁移到使用 :c:func:`PyLong_FromUnicodeObject` 。" + +#: ../../c-api/long.rst:108 +msgid "" +"Convert a sequence of Unicode digits in the string *u* to a Python integer " +"value." +msgstr "将字符串 *u* 中的 Unicode 数字序列转换为 Python 整数值。" + +#: ../../c-api/long.rst:116 +msgid "" +"Create a Python integer from the pointer *p*. The pointer value can be " +"retrieved from the resulting value using :c:func:`PyLong_AsVoidPtr`." +msgstr "从指针 *p* 创建一个 Python 整数。可以使用 :c:func:`PyLong_AsVoidPtr` 返回的指针值。" + +#: ../../c-api/long.rst:127 ../../c-api/long.rst:146 +msgid "" +"Return a C :c:type:`long` representation of *obj*. If *obj* is not an " +"instance of :c:type:`PyLongObject`, first call its :meth:`__index__` or " +":meth:`__int__` method (if present) to convert it to a " +":c:type:`PyLongObject`." +msgstr "" +"返回 *obj* 的 C :c:type:`long` 表达方式。 如果 *obj* 不是 :c:type:`PyLongObject` " +"的实例,先调用它的 :meth:`__index__` 或 :meth:`__int__` 方法(如果有)将其转换为 " +":c:type:`PyLongObject` 。" + +#: ../../c-api/long.rst:132 +msgid "" +"Raise :exc:`OverflowError` if the value of *obj* is out of range for a " +":c:type:`long`." +msgstr "如果 *obj* 的值溢出了 :c:type:`long` 的范围,会引发 :exc:`OverflowError`。" + +#: ../../c-api/long.rst:135 ../../c-api/long.rst:156 ../../c-api/long.rst:178 +#: ../../c-api/long.rst:199 ../../c-api/long.rst:222 +msgid "" +"Returns ``-1`` on error. Use :c:func:`PyErr_Occurred` to disambiguate." +msgstr "出错则返回 ``-1`` 。请用 :c:func:`PyErr_Occurred` 找出具体问题。" + +#: ../../c-api/long.rst:137 ../../c-api/long.rst:158 ../../c-api/long.rst:180 +#: ../../c-api/long.rst:203 ../../c-api/long.rst:288 ../../c-api/long.rst:308 +msgid "Use :meth:`__index__` if available." +msgstr "如果可用将使用 :meth:`__index__`。" + +#: ../../c-api/long.rst:140 ../../c-api/long.rst:161 ../../c-api/long.rst:183 +#: ../../c-api/long.rst:206 ../../c-api/long.rst:291 ../../c-api/long.rst:311 +msgid "Using :meth:`__int__` is deprecated." +msgstr ":meth:`__int__` 已被弃用。" + +#: ../../c-api/long.rst:151 +msgid "" +"If the value of *obj* is greater than :const:`LONG_MAX` or less than " +":const:`LONG_MIN`, set *\\*overflow* to ``1`` or ``-1``, respectively, and " +"return ``-1``; otherwise, set *\\*overflow* to ``0``. If any other " +"exception occurs set *\\*overflow* to ``0`` and return ``-1`` as usual." +msgstr "" +"如果 *obj* 的值大于 :const:`LONG_MAX` 或小于 :const:`LONG_MIN`,则会把 *\\*overflow* " +"分别置为``1`` 或 ``-1``,并返回 ``1``;否则,将 *\\*overflow* 置为 `0`。如果发生其他异常,则会按常规把 " +"*\\*overflow* 置为 ``0``,并返回 ``-1``。" + +#: ../../c-api/long.rst:170 ../../c-api/long.rst:189 +msgid "" +"Return a C :c:type:`long long` representation of *obj*. If *obj* is not an " +"instance of :c:type:`PyLongObject`, first call its :meth:`__index__` or " +":meth:`__int__` method (if present) to convert it to a " +":c:type:`PyLongObject`." +msgstr "" + +#: ../../c-api/long.rst:175 +msgid "" +"Raise :exc:`OverflowError` if the value of *obj* is out of range for a " +":c:type:`long long`." +msgstr "如果 *obj* 值超出 :c:type:`long long` ,触发 :exc:`OverflowError`" + +#: ../../c-api/long.rst:194 +msgid "" +"If the value of *obj* is greater than :const:`LLONG_MAX` or less than " +":const:`LLONG_MIN`, set *\\*overflow* to ``1`` or ``-1``, respectively, and " +"return ``-1``; otherwise, set *\\*overflow* to ``0``. If any other " +"exception occurs set *\\*overflow* to ``0`` and return ``-1`` as usual." +msgstr "" +"如果 *obj* 的值大于 :const:`LLONG_MAX` 或小于 :const:`LLONG_MIN`,则按常规将 *\\*overflow* " +"分别置为 ``1`` 或 ``-1``,并返回 -1,否则将 *\\*overflow* 置为 0。如果触发其他异常则 *\\*overflow* 置为" +" 0 并返回 -1。" + +#: ../../c-api/long.rst:216 +msgid "" +"Return a C :c:type:`Py_ssize_t` representation of *pylong*. *pylong* must " +"be an instance of :c:type:`PyLongObject`." +msgstr "" +"返回 *pylong* 的 C 语言 :c:type:`Py_ssize_t` 形式。*pylong* 必须是 " +":c:type:`PyLongObject` 的实例。" + +#: ../../c-api/long.rst:219 +msgid "" +"Raise :exc:`OverflowError` if the value of *pylong* is out of range for a " +":c:type:`Py_ssize_t`." +msgstr "" +"如果 *pylong* 的值超出了 :c:type:`Py_ssize_t` 的取值范围则会引发 :exc:`OverflowError`。" + +#: ../../c-api/long.rst:231 +msgid "" +"Return a C :c:type:`unsigned long` representation of *pylong*. *pylong* " +"must be an instance of :c:type:`PyLongObject`." +msgstr "" +"返回 *pylong* 的 C :c:type:`unsigned long` 形式。 *pylong* 必须是 " +":c:type:`PyLongObject` 的实例。" + +#: ../../c-api/long.rst:234 +msgid "" +"Raise :exc:`OverflowError` if the value of *pylong* is out of range for a " +":c:type:`unsigned long`." +msgstr "" +"如果 *pylong* 的值超出了 :c:type:`unsigned long` 的取值范围则会引发 :exc:`OverflowError`。" + +#: ../../c-api/long.rst:237 +msgid "" +"Returns ``(unsigned long)-1`` on error. Use :c:func:`PyErr_Occurred` to " +"disambiguate." +msgstr "出错时返回 ``(unsigned long)-1`` ,请利用 :c:func:`PyErr_Occurred` 辨别具体问题。" + +#: ../../c-api/long.rst:247 +msgid "" +"Return a C :c:type:`size_t` representation of *pylong*. *pylong* must be an" +" instance of :c:type:`PyLongObject`." +msgstr "" +"返回 *pylong* 的 C 语言 :c:type:`size_t` 形式。*pylong* 必须是 :c:type:`PyLongObject` " +"的实例。" + +#: ../../c-api/long.rst:250 +msgid "" +"Raise :exc:`OverflowError` if the value of *pylong* is out of range for a " +":c:type:`size_t`." +msgstr "如果 *pylong* 的值超出了 :c:type:`size_t` 的取值范围则会引发 :exc:`OverflowError`。" + +#: ../../c-api/long.rst:253 +msgid "" +"Returns ``(size_t)-1`` on error. Use :c:func:`PyErr_Occurred` to " +"disambiguate." +msgstr "出错时返回 ``(size_t)-1`` ,请利用 :c:func:`PyErr_Occurred` 辨别具体问题。" + +#: ../../c-api/long.rst:262 +msgid "" +"Return a C :c:type:`unsigned long long` representation of *pylong*. " +"*pylong* must be an instance of :c:type:`PyLongObject`." +msgstr "" +"返回 *pylong* 的 C 语言 :c:type:`unsigned long long` 形式。*pylong* 必须是 " +":c:type:`PyLongObject` 的实例。" + +#: ../../c-api/long.rst:265 +msgid "" +"Raise :exc:`OverflowError` if the value of *pylong* is out of range for an " +":c:type:`unsigned long long`." +msgstr "" +"如果 *pylong* 的值超出了 :c:type:`unsigned long long` 的取值范围则会引发 " +":exc:`OverflowError`。" + +#: ../../c-api/long.rst:268 +msgid "" +"Returns ``(unsigned long long)-1`` on error. Use :c:func:`PyErr_Occurred` to" +" disambiguate." +msgstr "出错时返回 ``(unsigned long long)-1``,请利用 :c:func:`PyErr_Occurred` 辨别具体问题。" + +#: ../../c-api/long.rst:271 +msgid "" +"A negative *pylong* now raises :exc:`OverflowError`, not :exc:`TypeError`." +msgstr "现在 *pylong* 为负值会触发 :exc:`OverflowError`,而不是 :exc:`TypeError`。" + +#: ../../c-api/long.rst:277 +msgid "" +"Return a C :c:type:`unsigned long` representation of *obj*. If *obj* is not" +" an instance of :c:type:`PyLongObject`, first call its :meth:`__index__` or " +":meth:`__int__` method (if present) to convert it to a " +":c:type:`PyLongObject`." +msgstr "" +"返回 *obj* 的 C :c:type:`unsigned long` 表示形式。 如果 *obj* 不是 " +":c:type:`PyLongObject` 的实例,则会先调用其 :meth:`__index__` 或 :meth:`__int__` " +"方法(如果有的话)将其转为 :c:type:`PyLongObject`。" + +#: ../../c-api/long.rst:282 +msgid "" +"If the value of *obj* is out of range for an :c:type:`unsigned long`, return" +" the reduction of that value modulo ``ULONG_MAX + 1``." +msgstr "" +"如果 *obj* 的值超出了 :c:type:`unsigned long` 的范围,则返回该值对 ``ULONG_MAX + 1`` 求模的差值。" + +#: ../../c-api/long.rst:285 +msgid "" +"Returns ``(unsigned long)-1`` on error. Use :c:func:`PyErr_Occurred` to " +"disambiguate." +msgstr "出错时返回 ``(unsigned long)-1``,请利用 :c:func:`PyErr_Occurred` 辨别具体问题。" + +#: ../../c-api/long.rst:297 +msgid "" +"Return a C :c:type:`unsigned long long` representation of *obj*. If *obj* " +"is not an instance of :c:type:`PyLongObject`, first call its " +":meth:`__index__` or :meth:`__int__` method (if present) to convert it to a " +":c:type:`PyLongObject`." +msgstr "" +"返回 *obj* 的 C :c:type:`unsigned long long` 表示形式。 如果 *obj* 不是 " +":c:type:`PyLongObject` 的实例,则会先调用其 :meth:`__index__` 或 :meth:`__int__` " +"方法(如果有的话)将其转为 :c:type:`PyLongObject`。" + +#: ../../c-api/long.rst:302 +msgid "" +"If the value of *obj* is out of range for an :c:type:`unsigned long long`, " +"return the reduction of that value modulo ``ULLONG_MAX + 1``." +msgstr "" +"如果 *obj* 的值超出了 :c:type:`unsigned long long` 的范围,则返回该值对 ``ULLONG_MAX + 1`` " +"求模的差值。" + +#: ../../c-api/long.rst:305 +msgid "" +"Returns ``(unsigned long long)-1`` on error. Use :c:func:`PyErr_Occurred` " +"to disambiguate." +msgstr "出错时返回 ``(unsigned long long)-1``,请利用 :c:func:`PyErr_Occurred` 辨别具体问题。" + +#: ../../c-api/long.rst:317 +msgid "" +"Return a C :c:type:`double` representation of *pylong*. *pylong* must be an" +" instance of :c:type:`PyLongObject`." +msgstr "" +"返回 *pylong* 的 C 语言 :c:type:`double` 形式。*pylong* 必须是 :c:type:`PyLongObject` " +"的实例。" + +#: ../../c-api/long.rst:320 +msgid "" +"Raise :exc:`OverflowError` if the value of *pylong* is out of range for a " +":c:type:`double`." +msgstr "如果 *pylong* 的值超出了 :c:type:`double` 的取值范围则会引发 :exc:`OverflowError`。" + +#: ../../c-api/long.rst:323 +msgid "" +"Returns ``-1.0`` on error. Use :c:func:`PyErr_Occurred` to disambiguate." +msgstr "出错时返回 ``-1.0`` ,请利用 :c:func:`PyErr_Occurred` 辨别具体问题。" + +#: ../../c-api/long.rst:328 +msgid "" +"Convert a Python integer *pylong* to a C :c:type:`void` pointer. If *pylong*" +" cannot be converted, an :exc:`OverflowError` will be raised. This is only " +"assured to produce a usable :c:type:`void` pointer for values created with " +":c:func:`PyLong_FromVoidPtr`." +msgstr "" +"将一个 Python 整数 *pylong* 转换为 C 语言的 :c:type:`void` 指针。 如果 *pylong* 无法转换,则会触发 " +":exc:`OverflowError`。 这只是保证为 :c:func:`PyLong_FromVoidPtr` 创建的值产生一个合法的 " +":c:type:`void` 指针。" + +#: ../../c-api/long.rst:333 +msgid "" +"Returns ``NULL`` on error. Use :c:func:`PyErr_Occurred` to disambiguate." +msgstr "出错时返回 ``NULL``,请利用 :c:func:`PyErr_Occurred` 辨别具体问题。" diff --git a/c-api/mapping.po b/c-api/mapping.po new file mode 100644 index 000000000..cc70f3029 --- /dev/null +++ b/c-api/mapping.po @@ -0,0 +1,137 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) 2001-2022, Python Software Foundation +# This file is distributed under the same license as the Python package. +# FIRST AUTHOR , YEAR. +# +# Translators: +# 汪心禾 , 2019 +# Freesand Leo , 2022 +# +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: Python 3.9\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2022-11-04 14:34+0000\n" +"PO-Revision-Date: 2017-02-16 17:37+0000\n" +"Last-Translator: Freesand Leo , 2022\n" +"Language-Team: Chinese (China) (https://www.transifex.com/python-doc/teams/5390/zh_CN/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: zh_CN\n" +"Plural-Forms: nplurals=1; plural=0;\n" + +#: ../../c-api/mapping.rst:6 +msgid "Mapping Protocol" +msgstr "映射协议" + +#: ../../c-api/mapping.rst:8 +msgid "" +"See also :c:func:`PyObject_GetItem`, :c:func:`PyObject_SetItem` and " +":c:func:`PyObject_DelItem`." +msgstr "" +"参见 :c:func:`PyObject_GetItem`、:c:func:`PyObject_SetItem` 与 " +":c:func:`PyObject_DelItem`。" + +#: ../../c-api/mapping.rst:14 +msgid "" +"Return ``1`` if the object provides the mapping protocol or supports " +"slicing, and ``0`` otherwise. Note that it returns ``1`` for Python classes" +" with a :meth:`__getitem__` method, since in general it is impossible to " +"determine what type of keys the class supports. This function always " +"succeeds." +msgstr "" +"如果对象提供了映射协议或是支持切片则返回 ``1``,否则返回 ``0``。 请注意它将为具有 :meth:`__getitem__` 方法的 " +"Python 类返回 ``1``,因为在通常情况下无法确定该类所支持的键类型。 此函数总是会成功执行。" + +#: ../../c-api/mapping.rst:25 +msgid "" +"Returns the number of keys in object *o* on success, and ``-1`` on failure. " +"This is equivalent to the Python expression ``len(o)``." +msgstr "成功时返回对象 *o* 中键的数量,失败时返回 ``-1``。 这相当于 Python 表达式 ``len(o)``。" + +#: ../../c-api/mapping.rst:31 +msgid "" +"Return element of *o* corresponding to the string *key* or ``NULL`` on " +"failure. This is the equivalent of the Python expression ``o[key]``. See " +"also :c:func:`PyObject_GetItem`." +msgstr "" +"返回 *o* 中对应于字符串 *key* 的元素,或者失败时返回 ``NULL``。 这相当于 Python 表达式 ``o[key]``。 另请参见 " +"also :c:func:`PyObject_GetItem`。" + +#: ../../c-api/mapping.rst:38 +msgid "" +"Map the string *key* to the value *v* in object *o*. Returns ``-1`` on " +"failure. This is the equivalent of the Python statement ``o[key] = v``. See" +" also :c:func:`PyObject_SetItem`. This function *does not* steal a " +"reference to *v*." +msgstr "" +"在对象 *o* 中将字符串 *key* 映射到值 *v*。 失败时返回 ``-1``。 这相当于 Python 语句 ``o[key] = v``。 " +"另请参见 :c:func:`PyObject_SetItem`。 此函数 *不会* 增加对 *v* 的引用。" + +#: ../../c-api/mapping.rst:46 +msgid "" +"Remove the mapping for the object *key* from the object *o*. Return ``-1`` " +"on failure. This is equivalent to the Python statement ``del o[key]``. This" +" is an alias of :c:func:`PyObject_DelItem`." +msgstr "" +"从对象 *o* 中移除对象 *key* 的映射。 失败时返回 ``-1``。 这相当于 Python 语句 ``del o[key]``。 这是 " +":c:func:`PyObject_DelItem` 的一个别名。" + +#: ../../c-api/mapping.rst:53 +msgid "" +"Remove the mapping for the string *key* from the object *o*. Return ``-1`` " +"on failure. This is equivalent to the Python statement ``del o[key]``." +msgstr "" +"从对象 *o* 中移除字符串 *key* 的映射。 失败时返回 ``-1``。 这相当于 Python 语句 ``del o[key]``。" + +#: ../../c-api/mapping.rst:59 ../../c-api/mapping.rst:70 +msgid "" +"Return ``1`` if the mapping object has the key *key* and ``0`` otherwise. " +"This is equivalent to the Python expression ``key in o``. This function " +"always succeeds." +msgstr "" +"如果映射对象具有键 *key* 则返回 ``1``,否则返回 ``0``。 这相当于 Python 表达式 ``key in o``。 " +"此函数总是会成功执行。" + +#: ../../c-api/mapping.rst:63 +msgid "" +"Note that exceptions which occur while calling the :meth:`__getitem__` " +"method will get suppressed. To get error reporting use " +":c:func:`PyObject_GetItem()` instead." +msgstr "" +"请注意在调用 :meth:`__getitem__` 方法期间发生的异常将会被屏蔽。 要获取错误报告请改用 " +":c:func:`PyObject_GetItem()`。" + +#: ../../c-api/mapping.rst:74 +msgid "" +"Note that exceptions which occur while calling the :meth:`__getitem__` " +"method and creating a temporary string object will get suppressed. To get " +"error reporting use :c:func:`PyMapping_GetItemString()` instead." +msgstr "" +"请注意在调用 :meth:`__getitem__` 方法期间发生的异常将会被屏蔽。 要获取错误报告请改用 " +":c:func:`PyMapping_GetItemString()`。" + +#: ../../c-api/mapping.rst:81 +msgid "" +"On success, return a list of the keys in object *o*. On failure, return " +"``NULL``." +msgstr "成功时,返回对象 *o* 中的键的列表。 失败时,返回 ``NULL``。" + +#: ../../c-api/mapping.rst:84 ../../c-api/mapping.rst:93 +#: ../../c-api/mapping.rst:102 +msgid "Previously, the function returned a list or a tuple." +msgstr "在之前版本中,此函数返回一个列表或元组。" + +#: ../../c-api/mapping.rst:90 +msgid "" +"On success, return a list of the values in object *o*. On failure, return " +"``NULL``." +msgstr "成功时,返回对象 *o* 中的值的列表。 失败时,返回 ``NULL``。" + +#: ../../c-api/mapping.rst:99 +msgid "" +"On success, return a list of the items in object *o*, where each item is a " +"tuple containing a key-value pair. On failure, return ``NULL``." +msgstr "成功时,返回对象 *o* 中条目的列表,其中每个条目是一个包含键值对的元组。 失败时,返回 ``NULL``。" diff --git a/c-api/marshal.po b/c-api/marshal.po new file mode 100644 index 000000000..81f19f4cf --- /dev/null +++ b/c-api/marshal.po @@ -0,0 +1,135 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) 2001-2022, Python Software Foundation +# This file is distributed under the same license as the Python package. +# FIRST AUTHOR , YEAR. +# +# Translators: +# Freesand Leo , 2020 +# +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: Python 3.9\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2022-11-04 14:34+0000\n" +"PO-Revision-Date: 2017-02-16 17:37+0000\n" +"Last-Translator: Freesand Leo , 2020\n" +"Language-Team: Chinese (China) (https://www.transifex.com/python-doc/teams/5390/zh_CN/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: zh_CN\n" +"Plural-Forms: nplurals=1; plural=0;\n" + +#: ../../c-api/marshal.rst:6 +msgid "Data marshalling support" +msgstr "数据 marshal 操作支持" + +#: ../../c-api/marshal.rst:8 +msgid "" +"These routines allow C code to work with serialized objects using the same " +"data format as the :mod:`marshal` module. There are functions to write data" +" into the serialization format, and additional functions that can be used to" +" read the data back. Files used to store marshalled data must be opened in " +"binary mode." +msgstr "" +"这些例程允许 C 代码处理与 :mod:`marshal` 模块所用相同数据格式的序列化对象。 " +"其中有些函数可用来将数据写入这种序列化格式,另一些函数则可用来读取并恢复数据。 用于存储 marshal 数据的文件必须以二进制模式打开。" + +#: ../../c-api/marshal.rst:14 +msgid "Numeric values are stored with the least significant byte first." +msgstr "数字值在存储时会将最低位字节放在开头。" + +#: ../../c-api/marshal.rst:16 +msgid "" +"The module supports two versions of the data format: version 0 is the " +"historical version, version 1 shares interned strings in the file, and upon " +"unmarshalling. Version 2 uses a binary format for floating point numbers. " +"``Py_MARSHAL_VERSION`` indicates the current file format (currently 2)." +msgstr "" +"此模块支持两种数据格式版本:第 0 版为历史版本,第 1 版本会在文件和 marshal 反序列化中共享固化的字符串。 第 2 " +"版本会对浮点数使用二进制格式。 ``Py_MARSHAL_VERSION`` 指明了当前文件的格式(当前取值为 2)。" + +#: ../../c-api/marshal.rst:24 +msgid "" +"Marshal a :c:type:`long` integer, *value*, to *file*. This will only write " +"the least-significant 32 bits of *value*; regardless of the size of the " +"native :c:type:`long` type. *version* indicates the file format." +msgstr "" +"将一个 :c:type:`long` 整数 *value* 以 marshal 格式写入 *file*。 这将只写入 *value* 最低的 32 " +"位;无论本机 :c:type:`long` 类型的长度如何。 *version* 指明文件格式的版本。" + +#: ../../c-api/marshal.rst:31 +msgid "" +"Marshal a Python object, *value*, to *file*. *version* indicates the file " +"format." +msgstr "将一个 Python 对象 *value* 以 marshal 格式写入 *file*。 *version* 指明文件格式的版本。" + +#: ../../c-api/marshal.rst:37 +msgid "" +"Return a bytes object containing the marshalled representation of *value*. " +"*version* indicates the file format." +msgstr "返回一个包含 *value* 的 marshal 表示形式的字节串对象。 *version* 指明文件格式的版本。" + +#: ../../c-api/marshal.rst:41 +msgid "The following functions allow marshalled values to be read back in." +msgstr "以下函数允许读取并恢复存储为 marshal 格式的值。" + +#: ../../c-api/marshal.rst:46 +msgid "" +"Return a C :c:type:`long` from the data stream in a :c:type:`FILE*` opened " +"for reading. Only a 32-bit value can be read in using this function, " +"regardless of the native size of :c:type:`long`." +msgstr "" +"从打开用于读取的 :c:type:`FILE*` 的对应数据流返回一个 C :c:type:`long`。 使用只函数只能读取 32 位的值,无论本机 " +":c:type:`long` 类型的长度为何。" + +#: ../../c-api/marshal.rst:50 ../../c-api/marshal.rst:60 +msgid "" +"On error, sets the appropriate exception (:exc:`EOFError`) and returns " +"``-1``." +msgstr "发生错误时,将设置适当的异常 (:exc:`EOFError`) 并返回 ``-1``。" + +#: ../../c-api/marshal.rst:56 +msgid "" +"Return a C :c:type:`short` from the data stream in a :c:type:`FILE*` opened " +"for reading. Only a 16-bit value can be read in using this function, " +"regardless of the native size of :c:type:`short`." +msgstr "" +"从打开用于读取的 :c:type:`FILE*` 的对应数据流返回一个 C :c:type:`short`。 使用此函数只能读取 16 位的值,无论本机" +" :c:type:`short` 类型的长度为何。" + +#: ../../c-api/marshal.rst:66 +msgid "" +"Return a Python object from the data stream in a :c:type:`FILE*` opened for " +"reading." +msgstr "从打开用于读取的 :c:type:`FILE*` 的对应数据流返回一个 Python 对象。" + +#: ../../c-api/marshal.rst:69 ../../c-api/marshal.rst:83 +#: ../../c-api/marshal.rst:92 +msgid "" +"On error, sets the appropriate exception (:exc:`EOFError`, :exc:`ValueError`" +" or :exc:`TypeError`) and returns ``NULL``." +msgstr "" +"发生错误时,将设置适当的异常 (:exc:`EOFError`, :exc:`ValueError` 或 :exc:`TypeError`) 并返回 " +"``NULL``。" + +#: ../../c-api/marshal.rst:75 +msgid "" +"Return a Python object from the data stream in a :c:type:`FILE*` opened for " +"reading. Unlike :c:func:`PyMarshal_ReadObjectFromFile`, this function " +"assumes that no further objects will be read from the file, allowing it to " +"aggressively load file data into memory so that the de-serialization can " +"operate from data in memory rather than reading a byte at a time from the " +"file. Only use these variant if you are certain that you won't be reading " +"anything else from the file." +msgstr "" +"从打开用于读取的 :c:type:`FILE*` 的对应数据流返回一个 Python 对象。 不同于 " +":c:func:`PyMarshal_ReadObjectFromFile`,此函数假定将不再从该文件读取更多的对象,允许其将文件数据积极地载入内存,以便反序列化过程可以在内存中的数据上操作而不是每次从文件读取一个字节。" +" 只有当你确定不会再从文件读取任何内容时方可使用此形式。" + +#: ../../c-api/marshal.rst:89 +msgid "" +"Return a Python object from the data stream in a byte buffer containing " +"*len* bytes pointed to by *data*." +msgstr "从包含指向 *data* 的 *len* 个字节的字节缓冲区对应的数据流返回一个 Python 对象。" diff --git a/c-api/memory.po b/c-api/memory.po new file mode 100644 index 000000000..dac7302cb --- /dev/null +++ b/c-api/memory.po @@ -0,0 +1,940 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) 2001-2022, Python Software Foundation +# This file is distributed under the same license as the Python package. +# FIRST AUTHOR , YEAR. +# +# Translators: +# Fred , 2018 +# Alpha Du , 2019 +# ppcfish , 2019 +# Sean Chao , 2020 +# Freesand Leo , 2022 +# +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: Python 3.9\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2022-11-04 14:34+0000\n" +"PO-Revision-Date: 2017-02-16 17:37+0000\n" +"Last-Translator: Freesand Leo , 2022\n" +"Language-Team: Chinese (China) (https://www.transifex.com/python-doc/teams/5390/zh_CN/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: zh_CN\n" +"Plural-Forms: nplurals=1; plural=0;\n" + +#: ../../c-api/memory.rst:8 +msgid "Memory Management" +msgstr "内存管理" + +#: ../../c-api/memory.rst:17 +msgid "Overview" +msgstr "概述" + +#: ../../c-api/memory.rst:19 +msgid "" +"Memory management in Python involves a private heap containing all Python " +"objects and data structures. The management of this private heap is ensured " +"internally by the *Python memory manager*. The Python memory manager has " +"different components which deal with various dynamic storage management " +"aspects, like sharing, segmentation, preallocation or caching." +msgstr "" +"在 Python 中,内存管理涉及到一个包含所有 Python 对象和数据结构的私有堆(heap)。这个私有堆的管理由内部的 *Python " +"内存管理器(Python memory manager)* 保证。Python " +"内存管理器有不同的组件来处理各种动态存储管理方面的问题,如共享、分割、预分配或缓存。" + +#: ../../c-api/memory.rst:25 +msgid "" +"At the lowest level, a raw memory allocator ensures that there is enough " +"room in the private heap for storing all Python-related data by interacting " +"with the memory manager of the operating system. On top of the raw memory " +"allocator, several object-specific allocators operate on the same heap and " +"implement distinct memory management policies adapted to the peculiarities " +"of every object type. For example, integer objects are managed differently " +"within the heap than strings, tuples or dictionaries because integers imply " +"different storage requirements and speed/space tradeoffs. The Python memory " +"manager thus delegates some of the work to the object-specific allocators, " +"but ensures that the latter operate within the bounds of the private heap." +msgstr "" +"在最底层,一个原始内存分配器通过与操作系统的内存管理器交互,确保私有堆中有足够的空间来存储所有与 Python " +"相关的数据。在原始内存分配器的基础上,几个对象特定的分配器在同一堆上运行,并根据每种对象类型的特点实现不同的内存管理策略。例如,整数对象在堆内的管理方式不同于字符串、元组或字典,因为整数需要不同的存储需求和速度与空间的权衡。因此,Python" +" 内存管理器将一些工作分配给对象特定分配器,但确保后者在私有堆的范围内运行。" + +#: ../../c-api/memory.rst:36 +msgid "" +"It is important to understand that the management of the Python heap is " +"performed by the interpreter itself and that the user has no control over " +"it, even if they regularly manipulate object pointers to memory blocks " +"inside that heap. The allocation of heap space for Python objects and other" +" internal buffers is performed on demand by the Python memory manager " +"through the Python/C API functions listed in this document." +msgstr "" +"Python 堆内存的管理是由解释器来执行,用户对它没有控制权,即使他们经常操作指向堆内内存块的对象指针,理解这一点十分重要。Python " +"对象和其他内部缓冲区的堆空间分配是由 Python 内存管理器按需通过本文档中列出的 Python/C API 函数进行的。" + +#: ../../c-api/memory.rst:49 +msgid "" +"To avoid memory corruption, extension writers should never try to operate on" +" Python objects with the functions exported by the C library: " +":c:func:`malloc`, :c:func:`calloc`, :c:func:`realloc` and :c:func:`free`. " +"This will result in mixed calls between the C allocator and the Python " +"memory manager with fatal consequences, because they implement different " +"algorithms and operate on different heaps. However, one may safely allocate" +" and release memory blocks with the C library allocator for individual " +"purposes, as shown in the following example::" +msgstr "" +"为了避免内存破坏,扩展的作者永远不应该试图用 C 库函数导出的函数来对 Python 对象进行操作,这些函数包括: :c:func:`malloc`, " +":c:func:`calloc`, :c:func:`realloc` 和 :c:func:`free`。这将导致 C 分配器和 Python " +"内存管理器之间的混用,引发严重后果,这是由于它们实现了不同的算法,并在不同的堆上操作。但是,我们可以安全地使用 C " +"库分配器为单独的目的分配和释放内存块,如下例所示:" + +#: ../../c-api/memory.rst:68 +msgid "" +"In this example, the memory request for the I/O buffer is handled by the C " +"library allocator. The Python memory manager is involved only in the " +"allocation of the bytes object returned as a result." +msgstr "在这个例子中,I/O 缓冲区的内存请求是由 C 库分配器处理的。Python 内存管理器只参与了分配作为结果返回的字节对象。" + +#: ../../c-api/memory.rst:72 +msgid "" +"In most situations, however, it is recommended to allocate memory from the " +"Python heap specifically because the latter is under control of the Python " +"memory manager. For example, this is required when the interpreter is " +"extended with new object types written in C. Another reason for using the " +"Python heap is the desire to *inform* the Python memory manager about the " +"memory needs of the extension module. Even when the requested memory is used" +" exclusively for internal, highly-specific purposes, delegating all memory " +"requests to the Python memory manager causes the interpreter to have a more " +"accurate image of its memory footprint as a whole. Consequently, under " +"certain circumstances, the Python memory manager may or may not trigger " +"appropriate actions, like garbage collection, memory compaction or other " +"preventive procedures. Note that by using the C library allocator as shown " +"in the previous example, the allocated memory for the I/O buffer escapes " +"completely the Python memory manager." +msgstr "" +"然而,在大多数情况下,建议专门从 Python 堆中分配内存,因为后者由 Python 内存管理器控制。例如,当解释器扩展了用 C " +"写的新对象类型时,就必须这样做。使用 Python 堆的另一个原因是希望*通知* Python " +"内存管理器关于扩展模块的内存需求。即使所请求的内存全部只用于内部的、高度特定的目的,将所有的内存请求交给 Python " +"内存管理器能让解释器对其内存占用的整体情况有更准确的了解。因此,在某些情况下,Python " +"内存管理器可能会触发或不触发适当的操作,如垃圾回收、内存压缩或其他预防性操作。请注意,通过使用前面例子中所示的 C 库分配器,为 I/O " +"缓冲区分配的内存会完全不受 Python 内存管理器管理。" + +#: ../../c-api/memory.rst:88 +msgid "" +"The :envvar:`PYTHONMALLOC` environment variable can be used to configure the" +" memory allocators used by Python." +msgstr "环境变量 :envvar:`PYTHONMALLOC` 可被用来配置 Python 所使用的内存分配器。" + +#: ../../c-api/memory.rst:91 +msgid "" +"The :envvar:`PYTHONMALLOCSTATS` environment variable can be used to print " +"statistics of the :ref:`pymalloc memory allocator ` every time a " +"new pymalloc object arena is created, and on shutdown." +msgstr "" +"环境变量 :envvar:`PYTHONMALLOCSTATS` 可以用来在每次创建和关闭新的 pymalloc 对象区域时打印 " +":ref:`pymalloc 内存分配器 ` 的统计数据。" + +#: ../../c-api/memory.rst:97 +msgid "Raw Memory Interface" +msgstr "原始内存接口" + +#: ../../c-api/memory.rst:99 +msgid "" +"The following function sets are wrappers to the system allocator. These " +"functions are thread-safe, the :term:`GIL ` does " +"not need to be held." +msgstr "" +"以下函数集封装了系统分配器。这些函数是线程安全的,不需要持有 :term:`全局解释器锁 `。" + +#: ../../c-api/memory.rst:103 +msgid "" +"The :ref:`default raw memory allocator ` uses the" +" following functions: :c:func:`malloc`, :c:func:`calloc`, :c:func:`realloc` " +"and :c:func:`free`; call ``malloc(1)`` (or ``calloc(1, 1)``) when requesting" +" zero bytes." +msgstr "" +":ref:`default raw memory allocator ` " +"使用这些函数::c:func:`malloc`、 :c:func:`calloc`、 :c:func:`realloc` 和 " +":c:func:`free`;申请零字节时则调用 ``malloc(1)`` (或 ``calloc(1, 1)``)" + +#: ../../c-api/memory.rst:112 ../../c-api/memory.rst:183 +#: ../../c-api/memory.rst:285 +msgid "" +"Allocates *n* bytes and returns a pointer of type :c:type:`void*` to the " +"allocated memory, or ``NULL`` if the request fails." +msgstr "分配 *n* 个字节并返回一个指向分配的内存的 :c:type:`void*` 类型指针,如果请求失败则返回 ``NULL``。" + +#: ../../c-api/memory.rst:115 +msgid "" +"Requesting zero bytes returns a distinct non-``NULL`` pointer if possible, " +"as if ``PyMem_RawMalloc(1)`` had been called instead. The memory will not " +"have been initialized in any way." +msgstr "" +"请求零字节可能返回一个独特的非 ``NULL`` 指针,就像调用了 ``PyMem_RawMalloc(1)`` 一样。但是内存不会以任何方式被初始化。" + +#: ../../c-api/memory.rst:122 ../../c-api/memory.rst:193 +#: ../../c-api/memory.rst:295 +msgid "" +"Allocates *nelem* elements each whose size in bytes is *elsize* and returns " +"a pointer of type :c:type:`void*` to the allocated memory, or ``NULL`` if " +"the request fails. The memory is initialized to zeros." +msgstr "" +"分配 *nelem* 个元素,每个元素的大小为 *elsize* 字节,并返回指向分配的内存的 :c:type:`void*` " +"类型指针,如果请求失败则返回 ``NULL``。 内存会被初始化为零。" + +#: ../../c-api/memory.rst:126 +msgid "" +"Requesting zero elements or elements of size zero bytes returns a distinct " +"non-``NULL`` pointer if possible, as if ``PyMem_RawCalloc(1, 1)`` had been " +"called instead." +msgstr "请求零字节可能返回一个独特的非 ``NULL`` 指针,就像调用了 ``PyMem_RawCalloc(1, 1)`` 一样。" + +#: ../../c-api/memory.rst:135 ../../c-api/memory.rst:206 +#: ../../c-api/memory.rst:308 +msgid "" +"Resizes the memory block pointed to by *p* to *n* bytes. The contents will " +"be unchanged to the minimum of the old and the new sizes." +msgstr "将 *p* 指向的内存块大小调整为 *n* 字节。以新旧内存块大小中的最小值为准,其中内容保持不变," + +#: ../../c-api/memory.rst:138 +msgid "" +"If *p* is ``NULL``, the call is equivalent to ``PyMem_RawMalloc(n)``; else " +"if *n* is equal to zero, the memory block is resized but is not freed, and " +"the returned pointer is non-``NULL``." +msgstr "" +"如果 *p* 是 ``NULL`` ,则相当于调用 ``PyMem_RawMalloc(n)`` ;如果 *n* 等于 " +"0,则内存块大小会被调整,但不会被释放,返回非 ``NULL`` 指针。" + +#: ../../c-api/memory.rst:142 +msgid "" +"Unless *p* is ``NULL``, it must have been returned by a previous call to " +":c:func:`PyMem_RawMalloc`, :c:func:`PyMem_RawRealloc` or " +":c:func:`PyMem_RawCalloc`." +msgstr "" +"除非 *p* 是 ``NULL`` ,否则它必须是之前调用 :c:func:`PyMem_RawMalloc` 、 " +":c:func:`PyMem_RawRealloc` 或 :c:func:`PyMem_RawCalloc` 所返回的。" + +#: ../../c-api/memory.rst:146 +msgid "" +"If the request fails, :c:func:`PyMem_RawRealloc` returns ``NULL`` and *p* " +"remains a valid pointer to the previous memory area." +msgstr "如果请求失败,:c:func:`PyMem_RawRealloc` 返回 ``NULL`` , *p* 仍然是指向先前内存区域的有效指针。" + +#: ../../c-api/memory.rst:152 +msgid "" +"Frees the memory block pointed to by *p*, which must have been returned by a" +" previous call to :c:func:`PyMem_RawMalloc`, :c:func:`PyMem_RawRealloc` or " +":c:func:`PyMem_RawCalloc`. Otherwise, or if ``PyMem_RawFree(p)`` has been " +"called before, undefined behavior occurs." +msgstr "" +"释放 *p* 指向的内存块。 *p* 必须是之前调用 :c:func:`PyMem_RawMalloc` 、 " +":c:func:`PyMem_RawRealloc` 或 :c:func:`PyMem_RawCalloc` 所返回的指针。否则,或在 " +"``PyMem_RawFree(p)`` 之前已经调用过的情况下,未定义的行为会发生。" + +#: ../../c-api/memory.rst:157 ../../c-api/memory.rst:227 +#: ../../c-api/memory.rst:329 +msgid "If *p* is ``NULL``, no operation is performed." +msgstr "如果 *p* 是 ``NULL``, 那么什么操作也不会进行。" + +#: ../../c-api/memory.rst:163 +msgid "Memory Interface" +msgstr "内存接口" + +#: ../../c-api/memory.rst:165 ../../c-api/memory.rst:271 +msgid "" +"The following function sets, modeled after the ANSI C standard, but " +"specifying behavior when requesting zero bytes, are available for allocating" +" and releasing memory from the Python heap." +msgstr "以下函数集,仿照 ANSI C 标准,并指定了请求零字节时的行为,可用于从Python堆分配和释放内存。" + +#: ../../c-api/memory.rst:169 +msgid "" +"The :ref:`default memory allocator ` uses the " +":ref:`pymalloc memory allocator `." +msgstr "" +":ref:`默认内存分配器 ` 使用了 :ref:`pymalloc 内存分配器 " +"`." + +#: ../../c-api/memory.rst:174 ../../c-api/memory.rst:280 +msgid "" +"The :term:`GIL ` must be held when using these " +"functions." +msgstr "在使用这些函数时,必须持有 :term:`全局解释器锁(GIL) ` 。" + +#: ../../c-api/memory.rst:179 +msgid "" +"The default allocator is now pymalloc instead of system :c:func:`malloc`." +msgstr "现在默认的分配器是 pymalloc 而非系统的 :c:func:`malloc` 。" + +#: ../../c-api/memory.rst:186 +msgid "" +"Requesting zero bytes returns a distinct non-``NULL`` pointer if possible, " +"as if ``PyMem_Malloc(1)`` had been called instead. The memory will not have " +"been initialized in any way." +msgstr "" +"请求零字节可能返回一个独特的非 ``NULL`` 指针,就像调用了 ``PyMem_Malloc(1)`` 一样。但是内存不会以任何方式被初始化。" + +#: ../../c-api/memory.rst:197 +msgid "" +"Requesting zero elements or elements of size zero bytes returns a distinct " +"non-``NULL`` pointer if possible, as if ``PyMem_Calloc(1, 1)`` had been " +"called instead." +msgstr "请求零字节可能返回一个独特的非 ``NULL`` 指针,就像调用了 ``PyMem_Calloc(1, 1)`` 一样。" + +#: ../../c-api/memory.rst:209 +msgid "" +"If *p* is ``NULL``, the call is equivalent to ``PyMem_Malloc(n)``; else if " +"*n* is equal to zero, the memory block is resized but is not freed, and the " +"returned pointer is non-``NULL``." +msgstr "" +"如果 *p* 是 ``NULL`` ,则相当于调用 ``PyMem_Malloc(n)`` ;如果 *n* 等于 " +"0,则内存块大小会被调整,但不会被释放,返回非 ``NULL`` 指针。" + +#: ../../c-api/memory.rst:213 +msgid "" +"Unless *p* is ``NULL``, it must have been returned by a previous call to " +":c:func:`PyMem_Malloc`, :c:func:`PyMem_Realloc` or :c:func:`PyMem_Calloc`." +msgstr "" +"除非 *p* 是 ``NULL`` ,否则它必须是之前调用 :c:func:`PyMem_Malloc` 、 " +":c:func:`PyMem_Realloc` 或 :c:func:`PyMem_Calloc` 所返回的。" + +#: ../../c-api/memory.rst:216 +msgid "" +"If the request fails, :c:func:`PyMem_Realloc` returns ``NULL`` and *p* " +"remains a valid pointer to the previous memory area." +msgstr "如果请求失败,:c:func:`PyMem_Realloc` 返回 ``NULL`` , *p* 仍然是指向先前内存区域的有效指针。" + +#: ../../c-api/memory.rst:222 +msgid "" +"Frees the memory block pointed to by *p*, which must have been returned by a" +" previous call to :c:func:`PyMem_Malloc`, :c:func:`PyMem_Realloc` or " +":c:func:`PyMem_Calloc`. Otherwise, or if ``PyMem_Free(p)`` has been called " +"before, undefined behavior occurs." +msgstr "" +"释放 *p* 指向的内存块。 *p* 必须是之前调用 :c:func:`PyMem_Malloc` 、 :c:func:`PyMem_Realloc` " +"或 :c:func:`PyMem_Calloc` 所返回的指针。否则,或在 ``PyMem_Free(p)`` " +"之前已经调用过的情况下,未定义的行为会发生。" + +#: ../../c-api/memory.rst:229 +msgid "" +"The following type-oriented macros are provided for convenience. Note that" +" *TYPE* refers to any C type." +msgstr "以下面向类型的宏为方便而提供。 注意 *TYPE* 可以指任何 C 类型。" + +#: ../../c-api/memory.rst:235 +msgid "" +"Same as :c:func:`PyMem_Malloc`, but allocates ``(n * sizeof(TYPE))`` bytes " +"of memory. Returns a pointer cast to :c:type:`TYPE*`. The memory will not " +"have been initialized in any way." +msgstr "" +"与 :c:func:`PyMem_Malloc` 相同,但会分配 ``(n * sizeof(TYPE))`` 字节的内存。 返回一个转换为 " +":c:type:`TYPE*` 的指针。 内存将不会以任何方式被初始化。" + +#: ../../c-api/memory.rst:242 +msgid "" +"Same as :c:func:`PyMem_Realloc`, but the memory block is resized to ``(n * " +"sizeof(TYPE))`` bytes. Returns a pointer cast to :c:type:`TYPE*`. On " +"return, *p* will be a pointer to the new memory area, or ``NULL`` in the " +"event of failure." +msgstr "" +"与 :c:func:`PyMem_Realloc` 相同,但内存块的大小被调整为 ``(n * sizeof(TYPE))`` 字节。 返回一个转换为 " +":c:type:`TYPE*` 类型的指针。 返回时,*p* 将为指向新内存区域的指针,如果失败则返回 ``NULL``。" + +#: ../../c-api/memory.rst:247 +msgid "" +"This is a C preprocessor macro; *p* is always reassigned. Save the original" +" value of *p* to avoid losing memory when handling errors." +msgstr "这是一个 C 预处理宏, *p* 总是被重新赋值。请保存 *p* 的原始值,以避免在处理错误时丢失内存。" + +#: ../../c-api/memory.rst:253 +msgid "Same as :c:func:`PyMem_Free`." +msgstr "与 :c:func:`PyMem_Free` 相同" + +#: ../../c-api/memory.rst:255 +msgid "" +"In addition, the following macro sets are provided for calling the Python " +"memory allocator directly, without involving the C API functions listed " +"above. However, note that their use does not preserve binary compatibility " +"across Python versions and is therefore deprecated in extension modules." +msgstr "" +"此外,我们还提供了以下宏集用于直接调用 Python 内存分配器,而不涉及上面列出的 C API 函数。但是请注意,使用它们并不能保证跨 Python " +"版本的二进制兼容性,因此在扩展模块被弃用。" + +#: ../../c-api/memory.rst:260 +msgid "``PyMem_MALLOC(size)``" +msgstr "``PyMem_MALLOC(size)``" + +#: ../../c-api/memory.rst:261 +msgid "``PyMem_NEW(type, size)``" +msgstr "``PyMem_NEW(type, size)``" + +#: ../../c-api/memory.rst:262 +msgid "``PyMem_REALLOC(ptr, size)``" +msgstr "``PyMem_REALLOC(ptr, size)``" + +#: ../../c-api/memory.rst:263 +msgid "``PyMem_RESIZE(ptr, type, size)``" +msgstr "``PyMem_RESIZE(ptr, type, size)``" + +#: ../../c-api/memory.rst:264 +msgid "``PyMem_FREE(ptr)``" +msgstr "``PyMem_FREE(ptr)``" + +#: ../../c-api/memory.rst:265 +msgid "``PyMem_DEL(ptr)``" +msgstr "``PyMem_DEL(ptr)``" + +#: ../../c-api/memory.rst:269 +msgid "Object allocators" +msgstr "对象分配器" + +#: ../../c-api/memory.rst:275 +msgid "" +"The :ref:`default object allocator ` uses the " +":ref:`pymalloc memory allocator `." +msgstr "" +":ref:`默认对象分配器 ` 使用 :ref:`pymalloc 内存分配器 " +"`." + +#: ../../c-api/memory.rst:288 +msgid "" +"Requesting zero bytes returns a distinct non-``NULL`` pointer if possible, " +"as if ``PyObject_Malloc(1)`` had been called instead. The memory will not " +"have been initialized in any way." +msgstr "" +"请求零字节可能返回一个独特的非 ``NULL`` 指针,就像调用了 ``PyObject_Malloc(1)`` 一样。但是内存不会以任何方式被初始化。" + +#: ../../c-api/memory.rst:299 +msgid "" +"Requesting zero elements or elements of size zero bytes returns a distinct " +"non-``NULL`` pointer if possible, as if ``PyObject_Calloc(1, 1)`` had been " +"called instead." +msgstr "请求零字节可能返回一个独特的非 ``NULL`` 指针,就像调用了 ``PyObject_Calloc(1, 1)`` 一样。" + +#: ../../c-api/memory.rst:311 +msgid "" +"If *p* is ``NULL``, the call is equivalent to ``PyObject_Malloc(n)``; else " +"if *n* is equal to zero, the memory block is resized but is not freed, and " +"the returned pointer is non-``NULL``." +msgstr "" +"如果*p*是``NULL``,则相当于调用 ``PyObject_Malloc(n)`` ;如果 *n* 等于 " +"0,则内存块大小会被调整,但不会被释放,返回非 ``NULL`` 指针。" + +#: ../../c-api/memory.rst:315 +msgid "" +"Unless *p* is ``NULL``, it must have been returned by a previous call to " +":c:func:`PyObject_Malloc`, :c:func:`PyObject_Realloc` or " +":c:func:`PyObject_Calloc`." +msgstr "" +"除非 *p* 是 ``NULL`` ,否则它必须是之前调用 :c:func:`PyObject_Malloc` 、 " +":c:func:`PyObject_Realloc` 或 :c:func:`PyObject_Calloc` 所返回的。" + +#: ../../c-api/memory.rst:318 +msgid "" +"If the request fails, :c:func:`PyObject_Realloc` returns ``NULL`` and *p* " +"remains a valid pointer to the previous memory area." +msgstr "如果请求失败,:c:func:`PyObject_Realloc` 返回 ``NULL`` , *p* 仍然是指向先前内存区域的有效指针。" + +#: ../../c-api/memory.rst:324 +msgid "" +"Frees the memory block pointed to by *p*, which must have been returned by a" +" previous call to :c:func:`PyObject_Malloc`, :c:func:`PyObject_Realloc` or " +":c:func:`PyObject_Calloc`. Otherwise, or if ``PyObject_Free(p)`` has been " +"called before, undefined behavior occurs." +msgstr "" +"释放 *p* 指向的内存块。 *p* 必须是之前调用 :c:func:`PyObject_Malloc` 、 " +":c:func:`PyObject_Realloc` 或 :c:func:`PyObject_Calloc` 所返回的指针。否则,或在 " +"``PyObject_Free(p)`` 之前已经调用过的情况下,未定义行为会发生。" + +#: ../../c-api/memory.rst:335 +msgid "Default Memory Allocators" +msgstr "默认内存分配器" + +#: ../../c-api/memory.rst:337 +msgid "Default memory allocators:" +msgstr "默认内存分配器:" + +#: ../../c-api/memory.rst:340 +msgid "Configuration" +msgstr "配置" + +#: ../../c-api/memory.rst:340 +msgid "Name" +msgstr "名称" + +#: ../../c-api/memory.rst:340 +msgid "PyMem_RawMalloc" +msgstr "PyMem_RawMalloc" + +#: ../../c-api/memory.rst:340 +msgid "PyMem_Malloc" +msgstr "PyMem_Malloc" + +#: ../../c-api/memory.rst:340 +msgid "PyObject_Malloc" +msgstr "PyObject_Malloc" + +#: ../../c-api/memory.rst:342 +msgid "Release build" +msgstr "发布版本" + +#: ../../c-api/memory.rst:342 +msgid "``\"pymalloc\"``" +msgstr "``\"pymalloc\"``" + +#: ../../c-api/memory.rst:342 ../../c-api/memory.rst:344 +#: ../../c-api/memory.rst:344 ../../c-api/memory.rst:344 +msgid "``malloc``" +msgstr "``malloc``" + +#: ../../c-api/memory.rst:342 ../../c-api/memory.rst:342 +msgid "``pymalloc``" +msgstr "``pymalloc``" + +#: ../../c-api/memory.rst:343 +msgid "Debug build" +msgstr "调试构建" + +#: ../../c-api/memory.rst:343 +msgid "``\"pymalloc_debug\"``" +msgstr "``\"pymalloc_debug\"``" + +#: ../../c-api/memory.rst:343 ../../c-api/memory.rst:345 +#: ../../c-api/memory.rst:345 ../../c-api/memory.rst:345 +msgid "``malloc`` + debug" +msgstr "``malloc`` + debug" + +#: ../../c-api/memory.rst:343 ../../c-api/memory.rst:343 +msgid "``pymalloc`` + debug" +msgstr "``pymalloc`` + debug" + +#: ../../c-api/memory.rst:344 +msgid "Release build, without pymalloc" +msgstr "没有 pymalloc 的发布版本" + +#: ../../c-api/memory.rst:344 +msgid "``\"malloc\"``" +msgstr "``\"malloc\"``" + +#: ../../c-api/memory.rst:345 +msgid "Debug build, without pymalloc" +msgstr "没有 pymalloc 的调试构建" + +#: ../../c-api/memory.rst:345 +msgid "``\"malloc_debug\"``" +msgstr "``\"malloc_debug\"``" + +#: ../../c-api/memory.rst:348 +msgid "Legend:" +msgstr "说明:" + +#: ../../c-api/memory.rst:350 +msgid "Name: value for :envvar:`PYTHONMALLOC` environment variable" +msgstr "名称: 环境变量 :envvar:`PYTHONMALLOC` 的值" + +#: ../../c-api/memory.rst:351 +msgid "" +"``malloc``: system allocators from the standard C library, C functions: " +":c:func:`malloc`, :c:func:`calloc`, :c:func:`realloc` and :c:func:`free`" +msgstr "" +"``malloc``: 来自 C 标准库的系统分配, C 函数 :c:func:`malloc`, :c:func:`calloc`, " +":c:func:`realloc` and :c:func:`free`" + +#: ../../c-api/memory.rst:353 +msgid "``pymalloc``: :ref:`pymalloc memory allocator `" +msgstr "``pymalloc``: :ref:`pymalloc 内存分配器 `" + +#: ../../c-api/memory.rst:354 +msgid "\"+ debug\": with debug hooks installed by :c:func:`PyMem_SetupDebugHooks`" +msgstr "\"+ debug\": 带有 :c:func:`PyMem_SetupDebugHooks` 安装的调试钩子" + +#: ../../c-api/memory.rst:358 +msgid "Customize Memory Allocators" +msgstr "自定义内存分配器" + +#: ../../c-api/memory.rst:364 +msgid "" +"Structure used to describe a memory block allocator. The structure has the " +"following fields:" +msgstr "用于描述内存块分配器的结构体。 该结构体下列字段:" + +#: ../../c-api/memory.rst:368 ../../c-api/memory.rst:513 +msgid "Field" +msgstr "域" + +#: ../../c-api/memory.rst:368 ../../c-api/memory.rst:513 +msgid "Meaning" +msgstr "含义" + +#: ../../c-api/memory.rst:370 ../../c-api/memory.rst:515 +msgid "``void *ctx``" +msgstr "``void *ctx``" + +#: ../../c-api/memory.rst:370 ../../c-api/memory.rst:515 +msgid "user context passed as first argument" +msgstr "作为第一个参数传入的用户上下文" + +#: ../../c-api/memory.rst:372 +msgid "``void* malloc(void *ctx, size_t size)``" +msgstr "``void* malloc(void *ctx, size_t size)``" + +#: ../../c-api/memory.rst:372 +msgid "allocate a memory block" +msgstr "分配一个内存块" + +#: ../../c-api/memory.rst:374 +msgid "``void* calloc(void *ctx, size_t nelem, size_t elsize)``" +msgstr "``void* calloc(void *ctx, size_t nelem, size_t elsize)``" + +#: ../../c-api/memory.rst:374 +msgid "allocate a memory block initialized with zeros" +msgstr "分配一个初始化为 0 的内存块" + +#: ../../c-api/memory.rst:377 +msgid "``void* realloc(void *ctx, void *ptr, size_t new_size)``" +msgstr "``void* realloc(void *ctx, void *ptr, size_t new_size)``" + +#: ../../c-api/memory.rst:377 +msgid "allocate or resize a memory block" +msgstr "分配一个内存块或调整其大小" + +#: ../../c-api/memory.rst:379 +msgid "``void free(void *ctx, void *ptr)``" +msgstr "``void free(void *ctx, void *ptr)``" + +#: ../../c-api/memory.rst:379 +msgid "free a memory block" +msgstr "释放一个内存块" + +#: ../../c-api/memory.rst:382 +msgid "" +"The :c:type:`PyMemAllocator` structure was renamed to " +":c:type:`PyMemAllocatorEx` and a new ``calloc`` field was added." +msgstr "" +" :c:type:`PyMemAllocator` 结构被重命名为 :c:type:`PyMemAllocatorEx` 并且添加了一个字段 " +"``calloc`` 。" + +#: ../../c-api/memory.rst:389 +msgid "Enum used to identify an allocator domain. Domains:" +msgstr "用来识别分配器域的枚举类。域有:" + +#: ../../c-api/memory.rst:393 ../../c-api/memory.rst:402 +#: ../../c-api/memory.rst:411 +msgid "Functions:" +msgstr "函数" + +#: ../../c-api/memory.rst:395 +msgid ":c:func:`PyMem_RawMalloc`" +msgstr ":c:func:`PyMem_RawMalloc`" + +#: ../../c-api/memory.rst:396 +msgid ":c:func:`PyMem_RawRealloc`" +msgstr ":c:func:`PyMem_RawRealloc`" + +#: ../../c-api/memory.rst:397 +msgid ":c:func:`PyMem_RawCalloc`" +msgstr ":c:func:`PyMem_RawCalloc`" + +#: ../../c-api/memory.rst:398 +msgid ":c:func:`PyMem_RawFree`" +msgstr ":c:func:`PyMem_RawFree`" + +#: ../../c-api/memory.rst:404 +msgid ":c:func:`PyMem_Malloc`," +msgstr ":c:func:`PyMem_Malloc`," + +#: ../../c-api/memory.rst:405 +msgid ":c:func:`PyMem_Realloc`" +msgstr ":c:func:`PyMem_Realloc`" + +#: ../../c-api/memory.rst:406 +msgid ":c:func:`PyMem_Calloc`" +msgstr ":c:func:`PyMem_Calloc`" + +#: ../../c-api/memory.rst:407 +msgid ":c:func:`PyMem_Free`" +msgstr ":c:func:`PyMem_Free`" + +#: ../../c-api/memory.rst:413 +msgid ":c:func:`PyObject_Malloc`" +msgstr ":c:func:`PyObject_Malloc`" + +#: ../../c-api/memory.rst:414 +msgid ":c:func:`PyObject_Realloc`" +msgstr ":c:func:`PyObject_Realloc`" + +#: ../../c-api/memory.rst:415 +msgid ":c:func:`PyObject_Calloc`" +msgstr ":c:func:`PyObject_Calloc`" + +#: ../../c-api/memory.rst:416 +msgid ":c:func:`PyObject_Free`" +msgstr ":c:func:`PyObject_Free`" + +#: ../../c-api/memory.rst:420 +msgid "Get the memory block allocator of the specified domain." +msgstr "获取指定域的内存块分配器。" + +#: ../../c-api/memory.rst:425 +msgid "Set the memory block allocator of the specified domain." +msgstr "设置指定域的内存块分配器。" + +#: ../../c-api/memory.rst:427 +msgid "" +"The new allocator must return a distinct non-``NULL`` pointer when " +"requesting zero bytes." +msgstr "当请求零字节时,新的分配器必须返回一个独特的非 ``NULL`` 指针。" + +#: ../../c-api/memory.rst:430 +msgid "" +"For the :c:data:`PYMEM_DOMAIN_RAW` domain, the allocator must be thread-" +"safe: the :term:`GIL ` is not held when the " +"allocator is called." +msgstr "" +"对于 :c:data:`PYMEM_DOMAIN_RAW` 域,分配器必须是线程安全的:当分配器被调用时,不持有 :term:`全局解释器锁 " +"` 。" + +#: ../../c-api/memory.rst:434 +msgid "" +"If the new allocator is not a hook (does not call the previous allocator), " +"the :c:func:`PyMem_SetupDebugHooks` function must be called to reinstall the" +" debug hooks on top on the new allocator." +msgstr "" +"如果新的分配器不是钩子(不调用之前的分配器),必须调用 :c:func:`PyMem_SetupDebugHooks` " +"函数在新分配器上重新安装调试钩子。" + +#: ../../c-api/memory.rst:441 +msgid "Setup hooks to detect bugs in the Python memory allocator functions." +msgstr "设置检测 Python 内存分配器函数中错误的钩子。" + +#: ../../c-api/memory.rst:443 +msgid "" +"Newly allocated memory is filled with the byte ``0xCD`` (``CLEANBYTE``), " +"freed memory is filled with the byte ``0xDD`` (``DEADBYTE``). Memory blocks " +"are surrounded by \"forbidden bytes\" (``FORBIDDENBYTE``: byte ``0xFD``)." +msgstr "" +"新分配的内存由字节 ``0xCD`` ( ``CLEANBYTE`` ) 填充,释放的内存由字节 ``0xDD`` ( ``DEADBYTE`` " +")填充。内存块被 \"禁止字节\" 包围( ``FORBIDDENBYTE`` :字节 ``0xFD`` )。" + +#: ../../c-api/memory.rst:447 +msgid "Runtime checks:" +msgstr "运行时检查:" + +#: ../../c-api/memory.rst:449 +msgid "" +"Detect API violations, ex: :c:func:`PyObject_Free` called on a buffer " +"allocated by :c:func:`PyMem_Malloc`" +msgstr "" +"检测对 API 的违反,例如:对用 :c:func:`PyMem_Malloc` 分配的缓冲区调用 :c:func:`PyObject_Free` 。" + +#: ../../c-api/memory.rst:451 +msgid "Detect write before the start of the buffer (buffer underflow)" +msgstr "检测缓冲区起始位置前的写入(缓冲区下溢)。" + +#: ../../c-api/memory.rst:452 +msgid "Detect write after the end of the buffer (buffer overflow)" +msgstr "检测缓冲区终止位置后的写入(缓冲区溢出)。" + +#: ../../c-api/memory.rst:453 +msgid "" +"Check that the :term:`GIL ` is held when allocator " +"functions of :c:data:`PYMEM_DOMAIN_OBJ` (ex: :c:func:`PyObject_Malloc`) and " +":c:data:`PYMEM_DOMAIN_MEM` (ex: :c:func:`PyMem_Malloc`) domains are called" +msgstr "" +"检测当调用 :c:data:`PYMEM_DOMAIN_OBJ` (如: :c:func:`PyObject_Malloc`) 和 " +":c:data:`PYMEM_DOMAIN_MEM` (如: :c:func:`PyMem_Malloc`) 域的分配器函数时 :term:`GIL " +"` 已被保持。" + +#: ../../c-api/memory.rst:458 +msgid "" +"On error, the debug hooks use the :mod:`tracemalloc` module to get the " +"traceback where a memory block was allocated. The traceback is only " +"displayed if :mod:`tracemalloc` is tracing Python memory allocations and the" +" memory block was traced." +msgstr "" +"在出错时,调试钩子使用 :mod:`tracemalloc` 模块来回溯内存块被分配的位置。只有当 :mod:`tracemalloc` 正在追踪 " +"Python 内存分配,并且内存块被追踪时,才会显示回溯。" + +#: ../../c-api/memory.rst:463 +msgid "" +"These hooks are :ref:`installed by default ` if " +"Python is compiled in debug mode. The :envvar:`PYTHONMALLOC` environment " +"variable can be used to install debug hooks on a Python compiled in release " +"mode." +msgstr "" +"如果 Python 是在调试模式下编译的,这些钩子是 :ref:`installed by default ` 。环境变量 :envvar:`PYTHONMALLOC` 可以用来在发布模式编译的 Python 上安装调试钩子。" + +#: ../../c-api/memory.rst:468 +msgid "" +"This function now also works on Python compiled in release mode. On error, " +"the debug hooks now use :mod:`tracemalloc` to get the traceback where a " +"memory block was allocated. The debug hooks now also check if the GIL is " +"held when functions of :c:data:`PYMEM_DOMAIN_OBJ` and " +":c:data:`PYMEM_DOMAIN_MEM` domains are called." +msgstr "" +"这个函数现在也适用于以 发布模式编译的 Python。在出错时,调试钩子现在使用 :mod:`tracemalloc` " +"来回溯内存块被分配的位置。调试钩子现在也检查当 :c:data:`PYMEM_DOMAIN_OBJ` 和 " +":c:data:`PYMEM_DOMAIN_MEM` 域的函数被调用时,全局解释器锁是否被持有。" + +#: ../../c-api/memory.rst:475 +msgid "" +"Byte patterns ``0xCB`` (``CLEANBYTE``), ``0xDB`` (``DEADBYTE``) and ``0xFB``" +" (``FORBIDDENBYTE``) have been replaced with ``0xCD``, ``0xDD`` and ``0xFD``" +" to use the same values than Windows CRT debug ``malloc()`` and ``free()``." +msgstr "" +"字节模式 ``0xCB`` (``CLEANBYTE``)、 ``0xDB`` (``DEADBYTE``) 和 ``0xFB`` " +"(``FORBIDDENBYTE``) 已被 ``0xCD`` 、 ``0xDD`` 和 ``0xFD`` 替代以使用与 Windows CRT 调试 " +"``malloc()`` 和 ``free()`` 相同的值。" + +#: ../../c-api/memory.rst:485 +msgid "The pymalloc allocator" +msgstr "pymalloc 分配器" + +#: ../../c-api/memory.rst:487 +msgid "" +"Python has a *pymalloc* allocator optimized for small objects (smaller or " +"equal to 512 bytes) with a short lifetime. It uses memory mappings called " +"\"arenas\" with a fixed size of 256 KiB. It falls back to " +":c:func:`PyMem_RawMalloc` and :c:func:`PyMem_RawRealloc` for allocations " +"larger than 512 bytes." +msgstr "" +"Python 有为具有短生命周期的小对象(小于或等于 512 字节)优化的 *pymalloc* 分配器。它使用固定大小为 256 KiB 的称为 " +"\"arenas\" 的内存映射。对于大于512字节的分配,它回到使用 :c:func:`PyMem_RawMalloc` 和 " +":c:func:`PyMem_RawRealloc` 。" + +#: ../../c-api/memory.rst:492 +msgid "" +"*pymalloc* is the :ref:`default allocator ` of " +"the :c:data:`PYMEM_DOMAIN_MEM` (ex: :c:func:`PyMem_Malloc`) and " +":c:data:`PYMEM_DOMAIN_OBJ` (ex: :c:func:`PyObject_Malloc`) domains." +msgstr "" +"*pymalloc* 是 :c:data:`PYMEM_DOMAIN_MEM` (例如: :c:func:`PyMem_Malloc`) 和 " +":c:data:`PYMEM_DOMAIN_OBJ` (例如: :c:func:`PyObject_Malloc`) 域的 :ref:`默认分配器 " +"` 。" + +#: ../../c-api/memory.rst:496 +msgid "The arena allocator uses the following functions:" +msgstr "arena 分配器使用以下函数:" + +#: ../../c-api/memory.rst:498 +msgid ":c:func:`VirtualAlloc` and :c:func:`VirtualFree` on Windows," +msgstr "Windows 上的 :c:func:`VirtualAlloc` 和 :c:func:`VirtualFree` ," + +#: ../../c-api/memory.rst:499 +msgid ":c:func:`mmap` and :c:func:`munmap` if available," +msgstr ":c:func:`mmap` 和 :c:func:`munmap` ,如果可用," + +#: ../../c-api/memory.rst:500 +msgid ":c:func:`malloc` and :c:func:`free` otherwise." +msgstr "否则, :c:func:`malloc` 和 :c:func:`free` 。" + +#: ../../c-api/memory.rst:503 +msgid "Customize pymalloc Arena Allocator" +msgstr "自定义 pymalloc Arena 分配器" + +#: ../../c-api/memory.rst:509 +msgid "" +"Structure used to describe an arena allocator. The structure has three " +"fields:" +msgstr "用来描述一个 arena 分配器的结构体。这个结构体有三个字段:" + +#: ../../c-api/memory.rst:517 +msgid "``void* alloc(void *ctx, size_t size)``" +msgstr "``void* alloc(void *ctx, size_t size)``" + +#: ../../c-api/memory.rst:517 +msgid "allocate an arena of size bytes" +msgstr "分配一块 size 字节的区域" + +#: ../../c-api/memory.rst:519 +msgid "``void free(void *ctx, void *ptr, size_t size)``" +msgstr "``void free(void *ctx, void *ptr, size_t size)``" + +#: ../../c-api/memory.rst:519 +msgid "free an arena" +msgstr "释放一块区域" + +#: ../../c-api/memory.rst:524 +msgid "Get the arena allocator." +msgstr "获取 arena 分配器" + +#: ../../c-api/memory.rst:528 +msgid "Set the arena allocator." +msgstr "设置 arena 分配器" + +#: ../../c-api/memory.rst:532 +msgid "tracemalloc C API" +msgstr "tracemalloc C API" + +#: ../../c-api/memory.rst:538 +msgid "Track an allocated memory block in the :mod:`tracemalloc` module." +msgstr "在 :mod:`tracemalloc` 模块中跟踪一个已分配的内存块。" + +#: ../../c-api/memory.rst:540 +msgid "" +"Return ``0`` on success, return ``-1`` on error (failed to allocate memory " +"to store the trace). Return ``-2`` if tracemalloc is disabled." +msgstr "" +"成功时返回 ``0``,出错时返回 ``-1`` (无法分配内存来保存跟踪信息)。 如果禁用了 tracemalloc 则返回 ``-2``。" + +#: ../../c-api/memory.rst:543 +msgid "If memory block is already tracked, update the existing trace." +msgstr "如果内存块已被跟踪,则更新现有跟踪信息。" + +#: ../../c-api/memory.rst:547 +msgid "" +"Untrack an allocated memory block in the :mod:`tracemalloc` module. Do " +"nothing if the block was not tracked." +msgstr "在 :mod:`tracemalloc` 模块中取消跟踪一个已分配的内存块。 如果内存块未被跟踪则不执行任何操作。" + +#: ../../c-api/memory.rst:550 +msgid "Return ``-2`` if tracemalloc is disabled, otherwise return ``0``." +msgstr "如果 tracemalloc 被禁用则返回 ``-2``,否则返回 ``0``。" + +#: ../../c-api/memory.rst:556 +msgid "Examples" +msgstr "示例" + +#: ../../c-api/memory.rst:558 +msgid "" +"Here is the example from section :ref:`memoryoverview`, rewritten so that " +"the I/O buffer is allocated from the Python heap by using the first function" +" set::" +msgstr "" +"以下是来自 :ref:`memoryoverview` 小节的示例,经过重写以使 I/O 缓冲区是通过使用第一个函数集从 Python 堆中分配的::" + +#: ../../c-api/memory.rst:571 +msgid "The same code using the type-oriented function set::" +msgstr "使用面向类型函数集的相同代码::" + +#: ../../c-api/memory.rst:583 +msgid "" +"Note that in the two examples above, the buffer is always manipulated via " +"functions belonging to the same set. Indeed, it is required to use the same " +"memory API family for a given memory block, so that the risk of mixing " +"different allocators is reduced to a minimum. The following code sequence " +"contains two errors, one of which is labeled as *fatal* because it mixes two" +" different allocators operating on different heaps. ::" +msgstr "" +"请注意在以上两个示例中,缓冲区总是通过归属于相同集的函数来操纵的。 事实上,对于一个给定的内存块必须使用相同的内存 API " +"族,以便使得混合不同分配器的风险减至最低。 以下代码序列包含两处错误,其中一个被标记为 *fatal* 因为它混合了两种在不同堆上操作的不同分配器。 " +"::" + +#: ../../c-api/memory.rst:598 +msgid "" +"In addition to the functions aimed at handling raw memory blocks from the " +"Python heap, objects in Python are allocated and released with " +":c:func:`PyObject_New`, :c:func:`PyObject_NewVar` and " +":c:func:`PyObject_Del`." +msgstr "" +"除了旨在处理来自 Python 堆的原始内存块的函数之外, Python 中的对象是通过 :c:func:`PyObject_New`, " +":c:func:`PyObject_NewVar` 和 :c:func:`PyObject_Del` 来分配和释放的。" + +#: ../../c-api/memory.rst:602 +msgid "" +"These will be explained in the next chapter on defining and implementing new" +" object types in C." +msgstr "这些将在有关如何在 C 中定义和实现新对象类型的下一章中讲解。" diff --git a/c-api/memoryview.po b/c-api/memoryview.po new file mode 100644 index 000000000..568c0ef4e --- /dev/null +++ b/c-api/memoryview.po @@ -0,0 +1,104 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) 2001-2022, Python Software Foundation +# This file is distributed under the same license as the Python package. +# FIRST AUTHOR , YEAR. +# +# Translators: +# Alpha Du , 2019 +# Freesand Leo , 2021 +# +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: Python 3.9\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2022-11-04 14:34+0000\n" +"PO-Revision-Date: 2017-02-16 17:37+0000\n" +"Last-Translator: Freesand Leo , 2021\n" +"Language-Team: Chinese (China) (https://www.transifex.com/python-doc/teams/5390/zh_CN/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: zh_CN\n" +"Plural-Forms: nplurals=1; plural=0;\n" + +#: ../../c-api/memoryview.rst:9 +msgid "MemoryView objects" +msgstr "MemoryView 对象" + +#: ../../c-api/memoryview.rst:11 +msgid "" +"A :class:`memoryview` object exposes the C level :ref:`buffer interface " +"` as a Python object which can then be passed around like any" +" other object." +msgstr "" +"一个 :class:`memoryview` 对象C级别的 :ref:`缓冲区接口 ` " +"暴露为一个可以像任何其他对象一样传递的 Python 对象。" + +#: ../../c-api/memoryview.rst:18 +msgid "" +"Create a memoryview object from an object that provides the buffer " +"interface. If *obj* supports writable buffer exports, the memoryview object " +"will be read/write, otherwise it may be either read-only or read/write at " +"the discretion of the exporter." +msgstr "" +"从提供缓冲区接口的对象创建 memoryview 对象。 如果 *obj* 支持可写缓冲区导出,则 memoryview " +"对象将可以被读/写,否则它可能是只读的,也可以是导出器自行决定的读/写。" + +#: ../../c-api/memoryview.rst:25 +msgid "" +"Create a memoryview object using *mem* as the underlying buffer. *flags* can" +" be one of :c:macro:`PyBUF_READ` or :c:macro:`PyBUF_WRITE`." +msgstr "" +"使用 *mem* 作为底层缓冲区创建一个 memoryview 对象。 *flags* 可以是 :c:macro:`PyBUF_READ` 或者 " +":c:macro:`PyBUF_WRITE` 之一." + +#: ../../c-api/memoryview.rst:32 +msgid "" +"Create a memoryview object wrapping the given buffer structure *view*. For " +"simple byte buffers, :c:func:`PyMemoryView_FromMemory` is the preferred " +"function." +msgstr "" +"创建一个包含给定缓冲区结构 *view* 的 memoryview 对象。 " +"对于简单的字节缓冲区,:c:func:`PyMemoryView_FromMemory` 是首选函数。" + +#: ../../c-api/memoryview.rst:38 +msgid "" +"Create a memoryview object to a :term:`contiguous` chunk of memory (in " +"either 'C' or 'F'ortran *order*) from an object that defines the buffer " +"interface. If memory is contiguous, the memoryview object points to the " +"original memory. Otherwise, a copy is made and the memoryview points to a " +"new bytes object." +msgstr "" +"从定义缓冲区接口的对象创建一个 memoryview 对象 :term:`contiguous` 内存块(在 'C' 或 'F'ortran " +"*order* 中)。 如果内存是连续的,则 memoryview 对象指向原始内存。 否则,复制并且 memoryview 指向新的 bytes " +"对象。" + +#: ../../c-api/memoryview.rst:47 +msgid "" +"Return true if the object *obj* is a memoryview object. It is not currently" +" allowed to create subclasses of :class:`memoryview`. This function always " +"succeeds." +msgstr "" +"如果 *obj* 是一个 memoryview 对象则返回真值。 目前不允许创建 :class:`memoryview` 的子类。 " +"此函数总是会成功执行。" + +#: ../../c-api/memoryview.rst:54 +msgid "" +"Return a pointer to the memoryview's private copy of the exporter's buffer. " +"*mview* **must** be a memoryview instance; this macro doesn't check its " +"type, you must do it yourself or you will risk crashes." +msgstr "" +"返回指向 memoryview 的导出缓冲区私有副本的指针。 *mview* **必须** 是一个 memoryview " +"实例;这个宏不检查它的类型,你必须自己检查,否则你将面临崩溃风险。" + +#: ../../c-api/memoryview.rst:60 +msgid "" +"Return either a pointer to the exporting object that the memoryview is based" +" on or ``NULL`` if the memoryview has been created by one of the functions " +":c:func:`PyMemoryView_FromMemory` or :c:func:`PyMemoryView_FromBuffer`. " +"*mview* **must** be a memoryview instance." +msgstr "" +"返回 memoryview 所基于的导出对象的指针,或者如果 memoryview 已由函数 " +":c:func:`PyMemoryView_FromMemory` 或 :c:func:`PyMemoryView_FromBuffer` 创建则返回 " +"``NULL``。 *mview* **必须** 是一个 memoryview 实例。" diff --git a/c-api/method.po b/c-api/method.po new file mode 100644 index 000000000..f11d8f3c4 --- /dev/null +++ b/c-api/method.po @@ -0,0 +1,122 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) 2001-2022, Python Software Foundation +# This file is distributed under the same license as the Python package. +# FIRST AUTHOR , YEAR. +# +# Translators: +# Shengjing Zhu , 2018 +# dhcn, 2018 +# Freesand Leo , 2022 +# +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: Python 3.9\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2022-11-04 14:34+0000\n" +"PO-Revision-Date: 2017-02-16 17:37+0000\n" +"Last-Translator: Freesand Leo , 2022\n" +"Language-Team: Chinese (China) (https://www.transifex.com/python-doc/teams/5390/zh_CN/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: zh_CN\n" +"Plural-Forms: nplurals=1; plural=0;\n" + +#: ../../c-api/method.rst:6 +msgid "Instance Method Objects" +msgstr "实例方法对象" + +#: ../../c-api/method.rst:10 +msgid "" +"An instance method is a wrapper for a :c:data:`PyCFunction` and the new way " +"to bind a :c:data:`PyCFunction` to a class object. It replaces the former " +"call ``PyMethod_New(func, NULL, class)``." +msgstr "" +"实例方法是 :c:data:`PyCFunction` 的包装器,也是将 :c:data:`PyCFunction` 绑定到类对象的一种新方式。 " +"它替代了原先的调用 ``PyMethod_New(func, NULL, class)``。" + +#: ../../c-api/method.rst:17 +msgid "" +"This instance of :c:type:`PyTypeObject` represents the Python instance " +"method type. It is not exposed to Python programs." +msgstr "这个 :c:type:`PyTypeObject` 实例代表 Python 实例方法类型。 它并不对 Python 程序公开。" + +#: ../../c-api/method.rst:23 +msgid "" +"Return true if *o* is an instance method object (has type " +":c:data:`PyInstanceMethod_Type`). The parameter must not be ``NULL``. This " +"function always succeeds." +msgstr "" +"如果 *o* 是一个实例方法对象 (类型为 :c:data:`PyInstanceMethod_Type`) 则返回真值。 形参必须不为 " +"``NULL``。 此函数总是会成功执行。" + +#: ../../c-api/method.rst:30 +msgid "" +"Return a new instance method object, with *func* being any callable object. " +"*func* is the function that will be called when the instance method is " +"called." +msgstr "返回一个新的实例方法对象,*func* 应为任意可调用对象。 *func* 将在实例方法被调用时作为函数被调用。" + +#: ../../c-api/method.rst:37 +msgid "Return the function object associated with the instance method *im*." +msgstr "返回关联到实例方法 *im* 的函数对象。" + +#: ../../c-api/method.rst:42 +msgid "" +"Macro version of :c:func:`PyInstanceMethod_Function` which avoids error " +"checking." +msgstr "宏版本的 :c:func:`PyInstanceMethod_Function`,略去了错误检测。" + +#: ../../c-api/method.rst:48 +msgid "Method Objects" +msgstr "方法对象" + +#: ../../c-api/method.rst:52 +msgid "" +"Methods are bound function objects. Methods are always bound to an instance " +"of a user-defined class. Unbound methods (methods bound to a class object) " +"are no longer available." +msgstr "方法是绑定的函数对象。 方法总是会被绑定到一个用户自定义类的实例。 未绑定方法(绑定到一个类的方法)已不再可用。" + +#: ../../c-api/method.rst:61 +msgid "" +"This instance of :c:type:`PyTypeObject` represents the Python method type. " +"This is exposed to Python programs as ``types.MethodType``." +msgstr "" +"这个 :c:type:`PyTypeObject` 实例代表 Python 方法类型。 它作为 ``types.MethodType`` 向 " +"Python 程序公开。" + +#: ../../c-api/method.rst:67 +msgid "" +"Return true if *o* is a method object (has type :c:data:`PyMethod_Type`). " +"The parameter must not be ``NULL``. This function always succeeds." +msgstr "" +"如果 *o* 是一个方法对象 (类型为 :c:data:`PyMethod_Type`) 则返回真值。 形参必须不为 ``NULL``。 " +"此函数总是会成功执行。" + +#: ../../c-api/method.rst:73 +msgid "" +"Return a new method object, with *func* being any callable object and *self*" +" the instance the method should be bound. *func* is the function that will " +"be called when the method is called. *self* must not be ``NULL``." +msgstr "" +"返回一个新的方法对象,*func* 应为任意可调用对象,*self* 为该方法应绑定的实例。 在方法被调用时 *func* 将作为函数被调用。 " +"*self* 必须不为 ``NULL``。" + +#: ../../c-api/method.rst:80 +msgid "Return the function object associated with the method *meth*." +msgstr "返回关联到方法 *meth* 的函数对象。" + +#: ../../c-api/method.rst:85 +msgid "" +"Macro version of :c:func:`PyMethod_Function` which avoids error checking." +msgstr "宏版本的 :c:func:`PyMethod_Function`,略去了错误检测。" + +#: ../../c-api/method.rst:90 +msgid "Return the instance associated with the method *meth*." +msgstr "返回关联到方法 *meth* 的实例。" + +#: ../../c-api/method.rst:95 +msgid "Macro version of :c:func:`PyMethod_Self` which avoids error checking." +msgstr "宏版本的 :c:func:`PyMethod_Self`,略去了错误检测。" diff --git a/c-api/module.po b/c-api/module.po new file mode 100644 index 000000000..02bdb1248 --- /dev/null +++ b/c-api/module.po @@ -0,0 +1,638 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) 2001-2022, Python Software Foundation +# This file is distributed under the same license as the Python package. +# FIRST AUTHOR , YEAR. +# +# Translators: +# 汪心禾 , 2019 +# helloworldSB , 2021 +# Yifan Sun, 2022 +# Freesand Leo , 2022 +# +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: Python 3.9\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2022-11-04 14:34+0000\n" +"PO-Revision-Date: 2017-02-16 17:37+0000\n" +"Last-Translator: Freesand Leo , 2022\n" +"Language-Team: Chinese (China) (https://www.transifex.com/python-doc/teams/5390/zh_CN/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: zh_CN\n" +"Plural-Forms: nplurals=1; plural=0;\n" + +#: ../../c-api/module.rst:6 +msgid "Module Objects" +msgstr "模块对象" + +#: ../../c-api/module.rst:15 +msgid "" +"This instance of :c:type:`PyTypeObject` represents the Python module type. " +"This is exposed to Python programs as ``types.ModuleType``." +msgstr "" +"这个 :c:type:`PyTypeObject` 的实例代表 Python 模块类型。 它以 ``types.ModuleType`` 的形式暴露给 " +"Python 程序。" + +#: ../../c-api/module.rst:21 +msgid "" +"Return true if *p* is a module object, or a subtype of a module object. This" +" function always succeeds." +msgstr "当 *p* 为模块类型的对象,或是模块子类型的对象时返回真。该函数永远有返回。" + +#: ../../c-api/module.rst:27 +msgid "" +"Return true if *p* is a module object, but not a subtype of " +":c:data:`PyModule_Type`. This function always succeeds." +msgstr "当 *p* 为模块对象且不是 :c:data:`PyModule_Type` 的子类型的对象时返回真值。该函数永远有返回值。" + +#: ../../c-api/module.rst:40 +msgid "" +"Return a new module object with the :attr:`__name__` attribute set to " +"*name*. The module's :attr:`__name__`, :attr:`__doc__`, :attr:`__package__`," +" and :attr:`__loader__` attributes are filled in (all but :attr:`__name__` " +"are set to ``None``); the caller is responsible for providing a " +":attr:`__file__` attribute." +msgstr "" +"返回新的模块对象,其属性 :attr:`__name__` 为 *name* 。模块的这些属性 :attr:`__name__`, " +":attr:`__doc__`, :attr:`__package__`, and :attr:`__loader__` (所有属性除了 " +":attr:`__name__` 都被设为``None``)。调用时应当提供 :attr:`__file__` 属性。 " + +#: ../../c-api/module.rst:48 +msgid ":attr:`__package__` and :attr:`__loader__` are set to ``None``." +msgstr "属性 :attr:`__package__` 和 :attr:`__loader__` 被设为``None``。" + +#: ../../c-api/module.rst:54 +msgid "" +"Similar to :c:func:`PyModule_NewObject`, but the name is a UTF-8 encoded " +"string instead of a Unicode object." +msgstr "这类似于 :c:func:`PyModule_NewObject`, 但其名称为 UTF-8 编码的字符串而不是 Unicode 对象。" + +#: ../../c-api/module.rst:62 +msgid "" +"Return the dictionary object that implements *module*'s namespace; this " +"object is the same as the :attr:`~object.__dict__` attribute of the module " +"object. If *module* is not a module object (or a subtype of a module " +"object), :exc:`SystemError` is raised and ``NULL`` is returned." +msgstr "" +"返回实现 *module* 的命名空间的字典对象;此对象与模块对象的 :attr:`~object.__dict__` 属性相同。 如果 " +"*module* 不是一个模块对象(或模块对象的子类型),则会引发 :exc:`SystemError` 并返回 ``NULL``。" + +#: ../../c-api/module.rst:67 +msgid "" +"It is recommended extensions use other :c:func:`PyModule_\\*` and " +":c:func:`PyObject_\\*` functions rather than directly manipulate a module's " +":attr:`~object.__dict__`." +msgstr "" +"建议扩展使用其他 :c:func:`PyModule_\\*` and :c:func:`PyObject_\\*` 函数而不是直接操纵模块的 " +":attr:`~object.__dict__`。" + +#: ../../c-api/module.rst:78 +msgid "" +"Return *module*'s :attr:`__name__` value. If the module does not provide " +"one, or if it is not a string, :exc:`SystemError` is raised and ``NULL`` is " +"returned." +msgstr "" +"返回 *module* 的 :attr:`__name__` 值。 如果模块未提供该值,或者如果它不是一个字符串,则会引发 " +":exc:`SystemError` 并返回 ``NULL``。" + +#: ../../c-api/module.rst:86 +msgid "" +"Similar to :c:func:`PyModule_GetNameObject` but return the name encoded to " +"``'utf-8'``." +msgstr "类似于 :c:func:`PyModule_GetNameObject` 但返回 ``'utf-8'`` 编码的名称。" + +#: ../../c-api/module.rst:91 +msgid "" +"Return the \"state\" of the module, that is, a pointer to the block of " +"memory allocated at module creation time, or ``NULL``. See " +":c:member:`PyModuleDef.m_size`." +msgstr "" +"返回模块的“状态”,也就是说,返回指向在模块创建时分配的内存块的指针,或者 ``NULL``。 参见 " +":c:member:`PyModuleDef.m_size`。" + +#: ../../c-api/module.rst:98 +msgid "" +"Return a pointer to the :c:type:`PyModuleDef` struct from which the module " +"was created, or ``NULL`` if the module wasn't created from a definition." +msgstr "" +"返回指向模块创建所使用的 :c:type:`PyModuleDef` 结构体的指针,或者如果模块不是使用结构体定义创建的则返回 ``NULL``。" + +#: ../../c-api/module.rst:108 +msgid "" +"Return the name of the file from which *module* was loaded using *module*'s " +":attr:`__file__` attribute. If this is not defined, or if it is not a " +"unicode string, raise :exc:`SystemError` and return ``NULL``; otherwise " +"return a reference to a Unicode object." +msgstr "" +"返回使用 *module* 的 :attr:`__file__` 属性所加载的 *模块* 的文件名。 如果属性未定义,或者如果它不是一个 Unicode" +" 字符串,则会引发 :exc:`SystemError` 并返回 ``NULL``;在其他情况下将返回一个指向 Unicode 对象的引用。" + +#: ../../c-api/module.rst:118 +msgid "" +"Similar to :c:func:`PyModule_GetFilenameObject` but return the filename " +"encoded to 'utf-8'." +msgstr "" + +#: ../../c-api/module.rst:121 +msgid "" +":c:func:`PyModule_GetFilename` raises :c:type:`UnicodeEncodeError` on " +"unencodable filenames, use :c:func:`PyModule_GetFilenameObject` instead." +msgstr "" + +#: ../../c-api/module.rst:129 +msgid "Initializing C modules" +msgstr "初始化 C 模块" + +#: ../../c-api/module.rst:131 +msgid "" +"Modules objects are usually created from extension modules (shared libraries" +" which export an initialization function), or compiled-in modules (where the" +" initialization function is added using :c:func:`PyImport_AppendInittab`). " +"See :ref:`building` or :ref:`extending-with-embedding` for details." +msgstr "" + +#: ../../c-api/module.rst:136 +msgid "" +"The initialization function can either pass a module definition instance to " +":c:func:`PyModule_Create`, and return the resulting module object, or " +"request \"multi-phase initialization\" by returning the definition struct " +"itself." +msgstr "" + +#: ../../c-api/module.rst:142 +msgid "" +"The module definition struct, which holds all information needed to create a" +" module object. There is usually only one statically initialized variable of" +" this type for each module." +msgstr "" + +#: ../../c-api/module.rst:148 +msgid "Always initialize this member to :const:`PyModuleDef_HEAD_INIT`." +msgstr "" + +#: ../../c-api/module.rst:152 +msgid "Name for the new module." +msgstr "新模块的名称。" + +#: ../../c-api/module.rst:156 +msgid "" +"Docstring for the module; usually a docstring variable created with " +":c:macro:`PyDoc_STRVAR` is used." +msgstr "" + +#: ../../c-api/module.rst:161 +msgid "" +"Module state may be kept in a per-module memory area that can be retrieved " +"with :c:func:`PyModule_GetState`, rather than in static globals. This makes " +"modules safe for use in multiple sub-interpreters." +msgstr "" + +#: ../../c-api/module.rst:165 +msgid "" +"This memory area is allocated based on *m_size* on module creation, and " +"freed when the module object is deallocated, after the :c:member:`m_free` " +"function has been called, if present." +msgstr "" + +#: ../../c-api/module.rst:169 +msgid "" +"Setting ``m_size`` to ``-1`` means that the module does not support sub-" +"interpreters, because it has global state." +msgstr "" + +#: ../../c-api/module.rst:172 +msgid "" +"Setting it to a non-negative value means that the module can be re-" +"initialized and specifies the additional amount of memory it requires for " +"its state. Non-negative ``m_size`` is required for multi-phase " +"initialization." +msgstr "" + +#: ../../c-api/module.rst:177 +msgid "See :PEP:`3121` for more details." +msgstr "请参阅 :PEP:`3121` 了解详情。" + +#: ../../c-api/module.rst:181 +msgid "" +"A pointer to a table of module-level functions, described by " +":c:type:`PyMethodDef` values. Can be ``NULL`` if no functions are present." +msgstr "" + +#: ../../c-api/module.rst:186 +msgid "" +"An array of slot definitions for multi-phase initialization, terminated by a" +" ``{0, NULL}`` entry. When using single-phase initialization, *m_slots* must" +" be ``NULL``." +msgstr "" + +#: ../../c-api/module.rst:192 +msgid "" +"Prior to version 3.5, this member was always set to ``NULL``, and was " +"defined as:" +msgstr "" + +#: ../../c-api/module.rst:199 +msgid "" +"A traversal function to call during GC traversal of the module object, or " +"``NULL`` if not needed." +msgstr "" + +#: ../../c-api/module.rst:202 ../../c-api/module.rst:217 +#: ../../c-api/module.rst:238 +msgid "" +"This function is not called if the module state was requested but is not " +"allocated yet. This is the case immediately after the module is created and " +"before the module is executed (:c:data:`Py_mod_exec` function). More " +"precisely, this function is not called if :c:member:`m_size` is greater than" +" 0 and the module state (as returned by :c:func:`PyModule_GetState`) is " +"``NULL``." +msgstr "" + +#: ../../c-api/module.rst:209 ../../c-api/module.rst:230 +#: ../../c-api/module.rst:245 +msgid "No longer called before the module state is allocated." +msgstr "" + +#: ../../c-api/module.rst:214 +msgid "" +"A clear function to call during GC clearing of the module object, or " +"``NULL`` if not needed." +msgstr "" + +#: ../../c-api/module.rst:224 +msgid "" +"Like :c:member:`PyTypeObject.tp_clear`, this function is not *always* called" +" before a module is deallocated. For example, when reference counting is " +"enough to determine that an object is no longer used, the cyclic garbage " +"collector is not involved and :c:member:`~PyModuleDef.m_free` is called " +"directly." +msgstr "" + +#: ../../c-api/module.rst:235 +msgid "" +"A function to call during deallocation of the module object, or ``NULL`` if " +"not needed." +msgstr "" + +#: ../../c-api/module.rst:249 +msgid "Single-phase initialization" +msgstr "" + +#: ../../c-api/module.rst:251 +msgid "" +"The module initialization function may create and return the module object " +"directly. This is referred to as \"single-phase initialization\", and uses " +"one of the following two module creation functions:" +msgstr "" + +#: ../../c-api/module.rst:257 +msgid "" +"Create a new module object, given the definition in *def*. This behaves " +"like :c:func:`PyModule_Create2` with *module_api_version* set to " +":const:`PYTHON_API_VERSION`." +msgstr "" + +#: ../../c-api/module.rst:264 +msgid "" +"Create a new module object, given the definition in *def*, assuming the API " +"version *module_api_version*. If that version does not match the version of" +" the running interpreter, a :exc:`RuntimeWarning` is emitted." +msgstr "" + +#: ../../c-api/module.rst:270 +msgid "" +"Most uses of this function should be using :c:func:`PyModule_Create` " +"instead; only use this if you are sure you need it." +msgstr "" + +#: ../../c-api/module.rst:273 +msgid "" +"Before it is returned from in the initialization function, the resulting " +"module object is typically populated using functions like " +":c:func:`PyModule_AddObject`." +msgstr "" + +#: ../../c-api/module.rst:279 +msgid "Multi-phase initialization" +msgstr "" + +#: ../../c-api/module.rst:281 +msgid "" +"An alternate way to specify extensions is to request \"multi-phase " +"initialization\". Extension modules created this way behave more like Python" +" modules: the initialization is split between the *creation phase*, when the" +" module object is created, and the *execution phase*, when it is populated. " +"The distinction is similar to the :py:meth:`__new__` and :py:meth:`__init__`" +" methods of classes." +msgstr "" + +#: ../../c-api/module.rst:288 +msgid "" +"Unlike modules created using single-phase initialization, these modules are " +"not singletons: if the *sys.modules* entry is removed and the module is re-" +"imported, a new module object is created, and the old module is subject to " +"normal garbage collection -- as with Python modules. By default, multiple " +"modules created from the same definition should be independent: changes to " +"one should not affect the others. This means that all state should be " +"specific to the module object (using e.g. using " +":c:func:`PyModule_GetState`), or its contents (such as the module's " +":attr:`__dict__` or individual classes created with " +":c:func:`PyType_FromSpec`)." +msgstr "" + +#: ../../c-api/module.rst:298 +msgid "" +"All modules created using multi-phase initialization are expected to support" +" :ref:`sub-interpreters `. Making sure multiple " +"modules are independent is typically enough to achieve this." +msgstr "" + +#: ../../c-api/module.rst:302 +msgid "" +"To request multi-phase initialization, the initialization function " +"(PyInit_modulename) returns a :c:type:`PyModuleDef` instance with non-empty " +":c:member:`~PyModuleDef.m_slots`. Before it is returned, the ``PyModuleDef``" +" instance must be initialized with the following function:" +msgstr "" + +#: ../../c-api/module.rst:309 +msgid "" +"Ensures a module definition is a properly initialized Python object that " +"correctly reports its type and reference count." +msgstr "" + +#: ../../c-api/module.rst:312 +msgid "Returns *def* cast to ``PyObject*``, or ``NULL`` if an error occurred." +msgstr "" + +#: ../../c-api/module.rst:316 +msgid "" +"The *m_slots* member of the module definition must point to an array of " +"``PyModuleDef_Slot`` structures:" +msgstr "" + +#: ../../c-api/module.rst:323 +msgid "A slot ID, chosen from the available values explained below." +msgstr "" + +#: ../../c-api/module.rst:327 +msgid "Value of the slot, whose meaning depends on the slot ID." +msgstr "" + +#: ../../c-api/module.rst:331 +msgid "The *m_slots* array must be terminated by a slot with id 0." +msgstr "" + +#: ../../c-api/module.rst:333 +msgid "The available slot types are:" +msgstr "" + +#: ../../c-api/module.rst:337 +msgid "" +"Specifies a function that is called to create the module object itself. The " +"*value* pointer of this slot must point to a function of the signature:" +msgstr "" + +#: ../../c-api/module.rst:342 +msgid "" +"The function receives a :py:class:`~importlib.machinery.ModuleSpec` " +"instance, as defined in :PEP:`451`, and the module definition. It should " +"return a new module object, or set an error and return ``NULL``." +msgstr "" + +#: ../../c-api/module.rst:347 +msgid "" +"This function should be kept minimal. In particular, it should not call " +"arbitrary Python code, as trying to import the same module again may result " +"in an infinite loop." +msgstr "" + +#: ../../c-api/module.rst:351 +msgid "" +"Multiple ``Py_mod_create`` slots may not be specified in one module " +"definition." +msgstr "" + +#: ../../c-api/module.rst:354 +msgid "" +"If ``Py_mod_create`` is not specified, the import machinery will create a " +"normal module object using :c:func:`PyModule_New`. The name is taken from " +"*spec*, not the definition, to allow extension modules to dynamically adjust" +" to their place in the module hierarchy and be imported under different " +"names through symlinks, all while sharing a single module definition." +msgstr "" + +#: ../../c-api/module.rst:360 +msgid "" +"There is no requirement for the returned object to be an instance of " +":c:type:`PyModule_Type`. Any type can be used, as long as it supports " +"setting and getting import-related attributes. However, only " +"``PyModule_Type`` instances may be returned if the ``PyModuleDef`` has " +"non-``NULL`` ``m_traverse``, ``m_clear``, ``m_free``; non-zero ``m_size``; " +"or slots other than ``Py_mod_create``." +msgstr "" + +#: ../../c-api/module.rst:369 +msgid "" +"Specifies a function that is called to *execute* the module. This is " +"equivalent to executing the code of a Python module: typically, this " +"function adds classes and constants to the module. The signature of the " +"function is:" +msgstr "" + +#: ../../c-api/module.rst:376 +msgid "" +"If multiple ``Py_mod_exec`` slots are specified, they are processed in the " +"order they appear in the *m_slots* array." +msgstr "" + +#: ../../c-api/module.rst:379 +msgid "See :PEP:`489` for more details on multi-phase initialization." +msgstr "" + +#: ../../c-api/module.rst:382 +msgid "Low-level module creation functions" +msgstr "" + +#: ../../c-api/module.rst:384 +msgid "" +"The following functions are called under the hood when using multi-phase " +"initialization. They can be used directly, for example when creating module " +"objects dynamically. Note that both ``PyModule_FromDefAndSpec`` and " +"``PyModule_ExecDef`` must be called to fully initialize a module." +msgstr "" + +#: ../../c-api/module.rst:391 +msgid "" +"Create a new module object, given the definition in *module* and the " +"ModuleSpec *spec*. This behaves like :c:func:`PyModule_FromDefAndSpec2` " +"with *module_api_version* set to :const:`PYTHON_API_VERSION`." +msgstr "" + +#: ../../c-api/module.rst:399 +msgid "" +"Create a new module object, given the definition in *module* and the " +"ModuleSpec *spec*, assuming the API version *module_api_version*. If that " +"version does not match the version of the running interpreter, a " +":exc:`RuntimeWarning` is emitted." +msgstr "" + +#: ../../c-api/module.rst:406 +msgid "" +"Most uses of this function should be using :c:func:`PyModule_FromDefAndSpec`" +" instead; only use this if you are sure you need it." +msgstr "" + +#: ../../c-api/module.rst:413 +msgid "Process any execution slots (:c:data:`Py_mod_exec`) given in *def*." +msgstr "" + +#: ../../c-api/module.rst:419 +msgid "" +"Set the docstring for *module* to *docstring*. This function is called " +"automatically when creating a module from ``PyModuleDef``, using either " +"``PyModule_Create`` or ``PyModule_FromDefAndSpec``." +msgstr "" + +#: ../../c-api/module.rst:428 +msgid "" +"Add the functions from the ``NULL`` terminated *functions* array to " +"*module*. Refer to the :c:type:`PyMethodDef` documentation for details on " +"individual entries (due to the lack of a shared module namespace, module " +"level \"functions\" implemented in C typically receive the module as their " +"first parameter, making them similar to instance methods on Python classes)." +" This function is called automatically when creating a module from " +"``PyModuleDef``, using either ``PyModule_Create`` or " +"``PyModule_FromDefAndSpec``." +msgstr "" + +#: ../../c-api/module.rst:440 +msgid "Support functions" +msgstr "" + +#: ../../c-api/module.rst:442 +msgid "" +"The module initialization function (if using single phase initialization) or" +" a function called from a module execution slot (if using multi-phase " +"initialization), can use the following functions to help initialize the " +"module state:" +msgstr "" + +#: ../../c-api/module.rst:449 +msgid "" +"Add an object to *module* as *name*. This is a convenience function which " +"can be used from the module's initialization function. This steals a " +"reference to *value* on success. Return ``-1`` on error, ``0`` on success." +msgstr "" + +#: ../../c-api/module.rst:455 +msgid "" +"Unlike other functions that steal references, ``PyModule_AddObject()`` only " +"decrements the reference count of *value* **on success**." +msgstr "" + +#: ../../c-api/module.rst:458 +msgid "" +"This means that its return value must be checked, and calling code must " +":c:func:`Py_DECREF` *value* manually on error. Example usage::" +msgstr "" + +#: ../../c-api/module.rst:470 +msgid "" +"Add an integer constant to *module* as *name*. This convenience function " +"can be used from the module's initialization function. Return ``-1`` on " +"error, ``0`` on success." +msgstr "" + +#: ../../c-api/module.rst:477 +msgid "" +"Add a string constant to *module* as *name*. This convenience function can " +"be used from the module's initialization function. The string *value* must " +"be ``NULL``-terminated. Return ``-1`` on error, ``0`` on success." +msgstr "" + +#: ../../c-api/module.rst:484 +msgid "" +"Add an int constant to *module*. The name and the value are taken from " +"*macro*. For example ``PyModule_AddIntMacro(module, AF_INET)`` adds the int " +"constant *AF_INET* with the value of *AF_INET* to *module*. Return ``-1`` on" +" error, ``0`` on success." +msgstr "" + +#: ../../c-api/module.rst:492 +msgid "Add a string constant to *module*." +msgstr "" + +#: ../../c-api/module.rst:496 +msgid "" +"Add a type object to *module*. The type object is finalized by calling " +"internally :c:func:`PyType_Ready`. The name of the type object is taken from" +" the last component of :c:member:`~PyTypeObject.tp_name` after dot. Return " +"``-1`` on error, ``0`` on success." +msgstr "" + +#: ../../c-api/module.rst:506 +msgid "Module lookup" +msgstr "" + +#: ../../c-api/module.rst:508 +msgid "" +"Single-phase initialization creates singleton modules that can be looked up " +"in the context of the current interpreter. This allows the module object to " +"be retrieved later with only a reference to the module definition." +msgstr "" + +#: ../../c-api/module.rst:512 +msgid "" +"These functions will not work on modules created using multi-phase " +"initialization, since multiple such modules can be created from a single " +"definition." +msgstr "" + +#: ../../c-api/module.rst:517 +msgid "" +"Returns the module object that was created from *def* for the current " +"interpreter. This method requires that the module object has been attached " +"to the interpreter state with :c:func:`PyState_AddModule` beforehand. In " +"case the corresponding module object is not found or has not been attached " +"to the interpreter state yet, it returns ``NULL``." +msgstr "" + +#: ../../c-api/module.rst:524 +msgid "" +"Attaches the module object passed to the function to the interpreter state. " +"This allows the module object to be accessible via " +":c:func:`PyState_FindModule`." +msgstr "" + +#: ../../c-api/module.rst:527 +msgid "Only effective on modules created using single-phase initialization." +msgstr "" + +#: ../../c-api/module.rst:529 +msgid "" +"Python calls ``PyState_AddModule`` automatically after importing a module, " +"so it is unnecessary (but harmless) to call it from module initialization " +"code. An explicit call is needed only if the module's own init code " +"subsequently calls ``PyState_FindModule``. The function is mainly intended " +"for implementing alternative import mechanisms (either by calling it " +"directly, or by referring to its implementation for details of the required " +"state updates)." +msgstr "" + +#: ../../c-api/module.rst:537 ../../c-api/module.rst:548 +msgid "The caller must hold the GIL." +msgstr "呼叫者必须持有GIL。" + +#: ../../c-api/module.rst:539 +msgid "Return 0 on success or -1 on failure." +msgstr "" + +#: ../../c-api/module.rst:545 +msgid "" +"Removes the module object created from *def* from the interpreter state. " +"Return 0 on success or -1 on failure." +msgstr "" diff --git a/c-api/none.po b/c-api/none.po new file mode 100644 index 000000000..4350e9734 --- /dev/null +++ b/c-api/none.po @@ -0,0 +1,49 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) 2001-2022, Python Software Foundation +# This file is distributed under the same license as the Python package. +# FIRST AUTHOR , YEAR. +# +# Translators: +# Alpha Du , 2019 +# +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: Python 3.9\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2022-11-04 14:34+0000\n" +"PO-Revision-Date: 2017-02-16 17:37+0000\n" +"Last-Translator: Alpha Du , 2019\n" +"Language-Team: Chinese (China) (https://www.transifex.com/python-doc/teams/5390/zh_CN/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: zh_CN\n" +"Plural-Forms: nplurals=1; plural=0;\n" + +#: ../../c-api/none.rst:6 +msgid "The ``None`` Object" +msgstr "``None`` 对象" + +#: ../../c-api/none.rst:10 +msgid "" +"Note that the :c:type:`PyTypeObject` for ``None`` is not directly exposed in" +" the Python/C API. Since ``None`` is a singleton, testing for object " +"identity (using ``==`` in C) is sufficient. There is no " +":c:func:`PyNone_Check` function for the same reason." +msgstr "" +"请注意, ``None`` 的 :c:type:`PyTypeObject` 不会直接在 Python / C API 中公开。 由于 ``None``" +" 是单例,测试对象标识(在C中使用 ``==`` )就足够了。 由于同样的原因,没有 :c:func:`PyNone_Check` 函数。" + +#: ../../c-api/none.rst:18 +msgid "" +"The Python ``None`` object, denoting lack of value. This object has no " +"methods. It needs to be treated just like any other object with respect to " +"reference counts." +msgstr "Python ``None`` 对象,表示缺乏值。 这个对象没有方法。 它需要像引用计数一样处理任何其他对象。" + +#: ../../c-api/none.rst:25 +msgid "" +"Properly handle returning :c:data:`Py_None` from within a C function (that " +"is, increment the reference count of ``None`` and return it.)" +msgstr "正确处理来自C函数内的 :c:data:`Py_None` 返回(也就是说,增加 ``None`` 的引用计数并返回它。)" diff --git a/c-api/number.po b/c-api/number.po new file mode 100644 index 000000000..afd92cdb3 --- /dev/null +++ b/c-api/number.po @@ -0,0 +1,350 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) 2001-2022, Python Software Foundation +# This file is distributed under the same license as the Python package. +# FIRST AUTHOR , YEAR. +# +# Translators: +# 心韵 方 , 2019 +# Azuk 443 , 2020 +# Freesand Leo , 2022 +# +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: Python 3.9\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2022-11-04 14:34+0000\n" +"PO-Revision-Date: 2017-02-16 17:37+0000\n" +"Last-Translator: Freesand Leo , 2022\n" +"Language-Team: Chinese (China) (https://www.transifex.com/python-doc/teams/5390/zh_CN/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: zh_CN\n" +"Plural-Forms: nplurals=1; plural=0;\n" + +#: ../../c-api/number.rst:6 +msgid "Number Protocol" +msgstr "数字协议" + +#: ../../c-api/number.rst:11 +msgid "" +"Returns ``1`` if the object *o* provides numeric protocols, and false " +"otherwise. This function always succeeds." +msgstr "如果对象 *o* 提供数字的协议,返回真 ``1``,否则返回假。这个函数不会调用失败。" + +#: ../../c-api/number.rst:14 +msgid "Returns ``1`` if *o* is an index integer." +msgstr "如果 *o* 是一个索引整数则返回 ``1``。" + +#: ../../c-api/number.rst:20 +msgid "" +"Returns the result of adding *o1* and *o2*, or ``NULL`` on failure. This is" +" the equivalent of the Python expression ``o1 + o2``." +msgstr "返回 *o1* 、*o2* 相加的结果,如果失败,返回 ``NULL``。等价于 Python 表达式 ``o1 + o2``。" + +#: ../../c-api/number.rst:26 +msgid "" +"Returns the result of subtracting *o2* from *o1*, or ``NULL`` on failure. " +"This is the equivalent of the Python expression ``o1 - o2``." +msgstr "返回 *o1* 减去 *o2* 的结果,如果失败,返回 ``NULL``。等价于 Python 表达式 ``o1 - o2``。" + +#: ../../c-api/number.rst:32 +msgid "" +"Returns the result of multiplying *o1* and *o2*, or ``NULL`` on failure. " +"This is the equivalent of the Python expression ``o1 * o2``." +msgstr "返回 *o1* 、 *o2* 相乘的结果,如果失败,返回 ``NULL``。等价于 Python 表达式 ``o1 * o2``。" + +#: ../../c-api/number.rst:38 +msgid "" +"Returns the result of matrix multiplication on *o1* and *o2*, or ``NULL`` on" +" failure. This is the equivalent of the Python expression ``o1 @ o2``." +msgstr "返回 *o1* 、*o2* 做矩阵乘法的结果,如果失败,返回 ``NULL``。等价于 Python 表达式 ``o1 @ o2``。" + +#: ../../c-api/number.rst:46 +msgid "" +"Return the floor of *o1* divided by *o2*, or ``NULL`` on failure. This is " +"the equivalent of the Python expression ``o1 // o2``." +msgstr "返回 *o1* 除以 *o2* 向下取整的值,失败时返回 ``NULL``。 这等价于 Python 表达式 ``o1 // o2``。" + +#: ../../c-api/number.rst:52 +msgid "" +"Return a reasonable approximation for the mathematical value of *o1* divided" +" by *o2*, or ``NULL`` on failure. The return value is \"approximate\" " +"because binary floating point numbers are approximate; it is not possible to" +" represent all real numbers in base two. This function can return a " +"floating point value when passed two integers. This is the equivalent of " +"the Python expression ``o1 / o2``." +msgstr "" +"返回 *o1* 除以 *o2* 的数学值的合理近似值,或失败时返回 ``NULL``。 返回的是 \"近似值\" " +"因为二进制浮点数本身就是近似值;不可能以二进制精确表示所有实数。 此函数可以在传入两个整数时返回一个浮点值。 此函数等价于 Python 表达式 " +"``o1 / o2``。" + +#: ../../c-api/number.rst:61 +msgid "" +"Returns the remainder of dividing *o1* by *o2*, or ``NULL`` on failure. " +"This is the equivalent of the Python expression ``o1 % o2``." +msgstr "返回 *o1* 除以 *o2* 得到的余数,如果失败,返回 ``NULL``。等价于 Python 表达式 ``o1 % o2``。" + +#: ../../c-api/number.rst:69 +msgid "" +"See the built-in function :func:`divmod`. Returns ``NULL`` on failure. This" +" is the equivalent of the Python expression ``divmod(o1, o2)``." +msgstr "" +"参考内置函数 :func:`divmod`。如果失败,返回 ``NULL``。等价于 Python 表达式 ``divmod(o1, o2)``。" + +#: ../../c-api/number.rst:77 +msgid "" +"See the built-in function :func:`pow`. Returns ``NULL`` on failure. This is" +" the equivalent of the Python expression ``pow(o1, o2, o3)``, where *o3* is " +"optional. If *o3* is to be ignored, pass :c:data:`Py_None` in its place " +"(passing ``NULL`` for *o3* would cause an illegal memory access)." +msgstr "" +"请参阅内置函数 :func:`pow`。 如果失败,返回 ``NULL``。 等价于 Python 中的表达式 ``pow(o1, o2, " +"o3)``,其中 *o3* 是可选的。如果要忽略 *o3*,则需传入 :c:data:`Py_None` 作为代替(如果传入 ``NULL`` " +"会导致非法内存访问)。" + +#: ../../c-api/number.rst:85 +msgid "" +"Returns the negation of *o* on success, or ``NULL`` on failure. This is the " +"equivalent of the Python expression ``-o``." +msgstr "返回 *o* 的负值,如果失败,返回 ``NULL`` 。等价于 Python 表达式 ``-o``。" + +#: ../../c-api/number.rst:91 +msgid "" +"Returns *o* on success, or ``NULL`` on failure. This is the equivalent of " +"the Python expression ``+o``." +msgstr "返回 *o*,如果失败,返回 ``NULL`` 。等价于 Python 表达式 ``+o``。" + +#: ../../c-api/number.rst:99 +msgid "" +"Returns the absolute value of *o*, or ``NULL`` on failure. This is the " +"equivalent of the Python expression ``abs(o)``." +msgstr "返回 *o* 的绝对值,如果失败,返回 ``NULL``。等价于 Python 表达式 ``abs(o)``。" + +#: ../../c-api/number.rst:105 +msgid "" +"Returns the bitwise negation of *o* on success, or ``NULL`` on failure. " +"This is the equivalent of the Python expression ``~o``." +msgstr "返回 *o* 的按位取反后的结果,如果失败,返回 ``NULL``。等价于 Python 表达式 ``~o``。" + +#: ../../c-api/number.rst:111 +msgid "" +"Returns the result of left shifting *o1* by *o2* on success, or ``NULL`` on " +"failure. This is the equivalent of the Python expression ``o1 << o2``." +msgstr "返回 *o1* 左移 *o2* 个比特后的结果,如果失败,返回 ``NULL``。等价于 Python 表达式 ``o1 << o2``。" + +#: ../../c-api/number.rst:117 +msgid "" +"Returns the result of right shifting *o1* by *o2* on success, or ``NULL`` on" +" failure. This is the equivalent of the Python expression ``o1 >> o2``." +msgstr "" +"返回 *o1* 右移 *o2* 个比特后的结果,如果失败,返回 ``NULL`` 。等价于 Python 表达式 ``o1 >> o2``。" + +#: ../../c-api/number.rst:123 +msgid "" +"Returns the \"bitwise and\" of *o1* and *o2* on success and ``NULL`` on " +"failure. This is the equivalent of the Python expression ``o1 & o2``." +msgstr "返回 *o1* 和 *o2* “按位与”的结果,如果失败,返回 ``NULL`` 。等价于 Python 表达式 ``o1 & o2``。" + +#: ../../c-api/number.rst:129 +msgid "" +"Returns the \"bitwise exclusive or\" of *o1* by *o2* on success, or ``NULL``" +" on failure. This is the equivalent of the Python expression ``o1 ^ o2``." +msgstr "" +"返回 *o1* 和 *o2* “按位异或”的结果,如果失败,返回 ``NULL`` 。等价于 Python 表达式 ``o1 ^ o2``。" + +#: ../../c-api/number.rst:135 +msgid "" +"Returns the \"bitwise or\" of *o1* and *o2* on success, or ``NULL`` on " +"failure. This is the equivalent of the Python expression ``o1 | o2``." +msgstr "返回 *o1* 和 *o2* “按位或”的结果,如果失败,返回 ``NULL`` 。等价于 Python 表达式 ``o1 | o2``。" + +#: ../../c-api/number.rst:141 +msgid "" +"Returns the result of adding *o1* and *o2*, or ``NULL`` on failure. The " +"operation is done *in-place* when *o1* supports it. This is the equivalent " +"of the Python statement ``o1 += o2``." +msgstr "" +"返回 *o1* 、*o2* 相加的结果,如果失败,返回 ``NULL``。当 *o1* 支持时,这个运算直接使用它储存结果。 等价于 Python 语句" +" ``o1 += o2``。" + +#: ../../c-api/number.rst:148 +msgid "" +"Returns the result of subtracting *o2* from *o1*, or ``NULL`` on failure. " +"The operation is done *in-place* when *o1* supports it. This is the " +"equivalent of the Python statement ``o1 -= o2``." +msgstr "" +"返回 *o1* 、*o2* 相减的结果,如果失败,返回 ``NULL`` 。当 *o1* 支持时,这个运算直接使用它储存结果。 等价于 Python " +"语句 ``o1 -= o2``。" + +#: ../../c-api/number.rst:155 +msgid "" +"Returns the result of multiplying *o1* and *o2*, or ``NULL`` on failure. " +"The operation is done *in-place* when *o1* supports it. This is the " +"equivalent of the Python statement ``o1 *= o2``." +msgstr "" +"返回 *o1* 、*o2*相乘的结果,如果失败,返回 ``NULL`` 。当 *o1* 支持时,这个运算直接使用它储存结果。 等价于 Python 语句" +" ``o1 *= o2``。" + +#: ../../c-api/number.rst:162 +msgid "" +"Returns the result of matrix multiplication on *o1* and *o2*, or ``NULL`` on" +" failure. The operation is done *in-place* when *o1* supports it. This is " +"the equivalent of the Python statement ``o1 @= o2``." +msgstr "" +"返回 *o1* 、*o2* 做矩阵乘法后的结果,如果失败,返回 ``NULL`` 。当 *o1* 支持时,这个运算直接使用它储存结果。 等价于 " +"Python 语句 ``o1 @= o2``。" + +#: ../../c-api/number.rst:171 +msgid "" +"Returns the mathematical floor of dividing *o1* by *o2*, or ``NULL`` on " +"failure. The operation is done *in-place* when *o1* supports it. This is " +"the equivalent of the Python statement ``o1 //= o2``." +msgstr "" +"返回 *o1* 除以 *o2* 后向下取整的结果,如果失败,返回 ``NULL``。当 *o1* 支持时,这个运算直接使用它储存结果。 等价于 " +"Python 语句 ``o1 //= o2``。" + +#: ../../c-api/number.rst:178 +msgid "" +"Return a reasonable approximation for the mathematical value of *o1* divided" +" by *o2*, or ``NULL`` on failure. The return value is \"approximate\" " +"because binary floating point numbers are approximate; it is not possible to" +" represent all real numbers in base two. This function can return a " +"floating point value when passed two integers. The operation is done *in-" +"place* when *o1* supports it. This is the equivalent of the Python statement" +" ``o1 /= o2``." +msgstr "" +"返回 *o1* 除以 *o2* 的数学值的合理近似值,或失败时返回 ``NULL``。 返回的是 \"近似值\" " +"因为二进制浮点数本身就是近似值;不可能以二进制精确表示所有实数。 此函数可以在传入两个整数时返回一个浮点数。 此运算在 *o1* 支持的时候会 *原地*" +" 执行。此函数等价于 Python 语句 ``o1 /= o2``。" + +#: ../../c-api/number.rst:188 +msgid "" +"Returns the remainder of dividing *o1* by *o2*, or ``NULL`` on failure. The" +" operation is done *in-place* when *o1* supports it. This is the equivalent" +" of the Python statement ``o1 %= o2``." +msgstr "" +"返回 *o1* 除以 *o2* 得到的余数,如果失败,返回 ``NULL``。当 *o1* 支持时,这个运算直接使用它储存结果。 等价于 Python " +"语句 ``o1 %= o2``。" + +#: ../../c-api/number.rst:197 +msgid "" +"See the built-in function :func:`pow`. Returns ``NULL`` on failure. The " +"operation is done *in-place* when *o1* supports it. This is the equivalent " +"of the Python statement ``o1 **= o2`` when o3 is :c:data:`Py_None`, or an " +"in-place variant of ``pow(o1, o2, o3)`` otherwise. If *o3* is to be ignored," +" pass :c:data:`Py_None` in its place (passing ``NULL`` for *o3* would cause " +"an illegal memory access)." +msgstr "" +"请参阅内置函数 :func:`pow`。 如果失败,返回 ``NULL``。当 *o1* 支持时,这个运算直接使用它储存结果。当 *o3* 是 " +":c:data:`Py_None` 时,等价于 Python 语句 ``o1 **= o2``;否则等价于在原来位置储存结果的 ``pow(o1, " +"o2, o3)`` 。如果要忽略 *o3*,则需传入 :c:data:`Py_None` (传入 ``NULL`` 会导致非法内存访问)。" + +#: ../../c-api/number.rst:206 +msgid "" +"Returns the result of left shifting *o1* by *o2* on success, or ``NULL`` on " +"failure. The operation is done *in-place* when *o1* supports it. This is " +"the equivalent of the Python statement ``o1 <<= o2``." +msgstr "" +"返回 *o1* 左移 *o2* 个比特后的结果,如果失败,返回 ``NULL``。当 *o1* 支持时,这个运算直接使用它储存结果。 等价于 " +"Python 语句 ``o1 <<= o2``。" + +#: ../../c-api/number.rst:213 +msgid "" +"Returns the result of right shifting *o1* by *o2* on success, or ``NULL`` on" +" failure. The operation is done *in-place* when *o1* supports it. This is " +"the equivalent of the Python statement ``o1 >>= o2``." +msgstr "" +"返回 *o1* 右移 *o2* 个比特后的结果,如果失败,返回 ``NULL``。当 *o1* 支持时,这个运算直接使用它储存结果。 等价于 " +"Python 语句 ``o1 >>= o2``。" + +#: ../../c-api/number.rst:220 +msgid "" +"Returns the \"bitwise and\" of *o1* and *o2* on success and ``NULL`` on " +"failure. The operation is done *in-place* when *o1* supports it. This is " +"the equivalent of the Python statement ``o1 &= o2``." +msgstr "" +"成功时返回 *o1* 和 *o2* \"按位与\" 的结果,失败时返回 ``NULL``。 在 *o1* 支持的前提下该操作将 *原地* 执行。 等价与" +" Python 语句 ``o1 &= o2``。" + +#: ../../c-api/number.rst:227 +msgid "" +"Returns the \"bitwise exclusive or\" of *o1* by *o2* on success, or ``NULL``" +" on failure. The operation is done *in-place* when *o1* supports it. This " +"is the equivalent of the Python statement ``o1 ^= o2``." +msgstr "" +"成功时返回 *o1* 和 *o2* \"按位异或的结果,失败时返回 ``NULL``。 在 *o1* 支持的前提下该操作将 *原地* 执行。 等价与 " +"Python 语句 ``o1 ^= o2``。" + +#: ../../c-api/number.rst:234 +msgid "" +"Returns the \"bitwise or\" of *o1* and *o2* on success, or ``NULL`` on " +"failure. The operation is done *in-place* when *o1* supports it. This is " +"the equivalent of the Python statement ``o1 |= o2``." +msgstr "" +"成功时返回 *o1* 和 *o2* \"按位或\" 的结果,失败时返回 ``NULL``。 在 *o1* 支持的前提下该操作将 *原地* 执行。 等价于" +" Python 语句 ``o1 |= o2``。" + +#: ../../c-api/number.rst:243 +msgid "" +"Returns the *o* converted to an integer object on success, or ``NULL`` on " +"failure. This is the equivalent of the Python expression ``int(o)``." +msgstr "成功时返回 *o* 转换为整数对象后的结果,失败时返回 ``NULL``。 等价于 Python 表达式 ``int(o)``。" + +#: ../../c-api/number.rst:251 +msgid "" +"Returns the *o* converted to a float object on success, or ``NULL`` on " +"failure. This is the equivalent of the Python expression ``float(o)``." +msgstr "成功时返回 *o* 转换为浮点对象后的结果,失败时返回 ``NULL``。 等价于 Python 表达式 ``float(o)``。" + +#: ../../c-api/number.rst:257 +msgid "" +"Returns the *o* converted to a Python int on success or ``NULL`` with a " +":exc:`TypeError` exception raised on failure." +msgstr "" +"成功时返回 *o* 转换为 Python int 类型后的结果,失败时返回 ``NULL`` 并引发 :exc:`TypeError` 异常。" + +#: ../../c-api/number.rst:263 +msgid "" +"Returns the integer *n* converted to base *base* as a string. The *base* " +"argument must be one of 2, 8, 10, or 16. For base 2, 8, or 16, the returned" +" string is prefixed with a base marker of ``'0b'``, ``'0o'``, or ``'0x'``, " +"respectively. If *n* is not a Python int, it is converted with " +":c:func:`PyNumber_Index` first." +msgstr "" +"返回整数 *n* 转换成以 *base* 为基数的字符串后的结果。这个 *base* 参数必须是 2,8,10 或者 16 。对于基数 2,8,或 16" +" ,返回的字符串将分别加上基数标识 ``'0b'``, ``'0o'``, or ``'0x'``。如果 *n* 不是 Python 中的整数 " +"*int* 类型,就先通过 :c:func:`PyNumber_Index` 将它转换成整数类型。" + +#: ../../c-api/number.rst:272 +msgid "" +"Returns *o* converted to a :c:type:`Py_ssize_t` value if *o* can be " +"interpreted as an integer. If the call fails, an exception is raised and " +"``-1`` is returned." +msgstr "" +"如果 *o* 可以被解读为一个整数则返回 *o* 转换成的 :c:type:`Py_ssize_t` 值。 如果调用失败,则会引发一个异常并返回 " +"``-1``。" + +#: ../../c-api/number.rst:275 +msgid "" +"If *o* can be converted to a Python int but the attempt to convert to a " +":c:type:`Py_ssize_t` value would raise an :exc:`OverflowError`, then the " +"*exc* argument is the type of exception that will be raised (usually " +":exc:`IndexError` or :exc:`OverflowError`). If *exc* is ``NULL``, then the " +"exception is cleared and the value is clipped to ``PY_SSIZE_T_MIN`` for a " +"negative integer or ``PY_SSIZE_T_MAX`` for a positive integer." +msgstr "" +"如果 *o* 可以被转换为 Python 的 int 值但尝试转换为 :c:type:`Py_ssize_t` 值则会引发 " +":exc:`OverflowError`,则 *exc* 参数将为所引发的异常类型 (通常为 :exc:`IndexError` 或 " +":exc:`OverflowError`)。 如果 *exc* 为 ``NULL``,则异常会被清除并且值会在为负整数时被裁剪为 " +"``PY_SSIZE_T_MIN`` 而在为正整数时被裁剪为 ``PY_SSIZE_T_MAX``。" + +#: ../../c-api/number.rst:285 +msgid "" +"Returns ``1`` if *o* is an index integer (has the ``nb_index`` slot of the " +"``tp_as_number`` structure filled in), and ``0`` otherwise. This function " +"always succeeds." +msgstr "" +"返回 ``1`` 如果 *o* 是一个索引整数(将 ``nb_index`` 槽位填充到 ``tp_as_number`` " +"结构体),或者在其他情况下返回 ``0``。 此函数总是会成功执行。" diff --git a/c-api/objbuffer.po b/c-api/objbuffer.po new file mode 100644 index 000000000..01e12441c --- /dev/null +++ b/c-api/objbuffer.po @@ -0,0 +1,98 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) 2001-2022, Python Software Foundation +# This file is distributed under the same license as the Python package. +# FIRST AUTHOR , YEAR. +# +# Translators: +# Freesand Leo , 2019 +# +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: Python 3.9\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2022-11-04 14:34+0000\n" +"PO-Revision-Date: 2017-02-16 17:38+0000\n" +"Last-Translator: Freesand Leo , 2019\n" +"Language-Team: Chinese (China) (https://www.transifex.com/python-doc/teams/5390/zh_CN/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: zh_CN\n" +"Plural-Forms: nplurals=1; plural=0;\n" + +#: ../../c-api/objbuffer.rst:4 +msgid "Old Buffer Protocol" +msgstr "旧缓冲协议" + +#: ../../c-api/objbuffer.rst:8 +msgid "" +"These functions were part of the \"old buffer protocol\" API in Python 2. In" +" Python 3, this protocol doesn't exist anymore but the functions are still " +"exposed to ease porting 2.x code. They act as a compatibility wrapper " +"around the :ref:`new buffer protocol `, but they don't give " +"you control over the lifetime of the resources acquired when a buffer is " +"exported." +msgstr "" +"这些函数是 Python 2 中“旧缓冲协议”API 的组成部分。 在 Python 3 中,此协议已不复存在,但这些函数仍然被公开以便移植 2.x " +"的代码。 它们被用作 :ref:`新缓冲协议 ` " +"的兼容性包装器,但它们并不会在缓冲被导出时向你提供对所获资源的生命周期控制。" + +#: ../../c-api/objbuffer.rst:15 +msgid "" +"Therefore, it is recommended that you call :c:func:`PyObject_GetBuffer` (or " +"the ``y*`` or ``w*`` :ref:`format codes ` with the " +":c:func:`PyArg_ParseTuple` family of functions) to get a buffer view over an" +" object, and :c:func:`PyBuffer_Release` when the buffer view can be " +"released." +msgstr "" +"因此,推荐你调用 :c:func:`PyObject_GetBuffer` (或者配合 :c:func:`PyArg_ParseTuple` 函数族使用" +" ``y*`` 或 ``w*`` :ref:`格式码 `) 来获取一个对象的缓冲视图,并在缓冲视图可被释放时调用 " +":c:func:`PyBuffer_Release`。" + +#: ../../c-api/objbuffer.rst:23 +msgid "" +"Returns a pointer to a read-only memory location usable as character-based " +"input. The *obj* argument must support the single-segment character buffer " +"interface. On success, returns ``0``, sets *buffer* to the memory location " +"and *buffer_len* to the buffer length. Returns ``-1`` and sets a " +":exc:`TypeError` on error." +msgstr "" +"返回一个指向可用作基于字符的输入的只读内存地址的指针。 *obj* 参数必须支持单段字符缓冲接口。 成功时返回 ``0``,将 *buffer* " +"设为内存地址并将 *buffer_len* 设为缓冲区长度。 出错时返回 ``-1`` 并设置一个 :exc:`TypeError`。" + +#: ../../c-api/objbuffer.rst:32 +msgid "" +"Returns a pointer to a read-only memory location containing arbitrary data. " +"The *obj* argument must support the single-segment readable buffer " +"interface. On success, returns ``0``, sets *buffer* to the memory location " +"and *buffer_len* to the buffer length. Returns ``-1`` and sets a " +":exc:`TypeError` on error." +msgstr "" +"返回一个指向包含任意数据的只读内存地址的指针。 *obj* 参数必须支持单段可读缓冲接口。 成功时返回 ``0``,将 *buffer* " +"设为内存地址并将 *buffer_len* 设为缓冲区长度。 出错时返回 ``-1`` 并设置一个 :exc:`TypeError`。" + +#: ../../c-api/objbuffer.rst:41 +msgid "" +"Returns ``1`` if *o* supports the single-segment readable buffer interface. " +"Otherwise returns ``0``. This function always succeeds." +msgstr "如果 *o* 支持单段可读缓冲接口则返回 ``1``。 否则返回 ``0``。 此函数总是会成功执行。" + +#: ../../c-api/objbuffer.rst:44 +msgid "" +"Note that this function tries to get and release a buffer, and exceptions " +"which occur while calling corresponding functions will get suppressed. To " +"get error reporting use :c:func:`PyObject_GetBuffer()` instead." +msgstr "" +"请注意此函数会尝试获取并释放一个缓冲区,并且在调用对应函数期间发生的异常会被屏蔽。 要获取错误报告则应改用 " +":c:func:`PyObject_GetBuffer()`。" + +#: ../../c-api/objbuffer.rst:51 +msgid "" +"Returns a pointer to a writable memory location. The *obj* argument must " +"support the single-segment, character buffer interface. On success, returns" +" ``0``, sets *buffer* to the memory location and *buffer_len* to the buffer " +"length. Returns ``-1`` and sets a :exc:`TypeError` on error." +msgstr "" +"返回一个指向可写内存地址的指针。 *obj* 必须支持单段字符缓冲接口。 成功时返回 ``0``,将 *buffer* 设为内存地址并将 " +"*buffer_len* 设为缓冲区长度。 出错时返回 ``-1`` 并设置一个 :exc:`TypeError`。" diff --git a/c-api/object.po b/c-api/object.po new file mode 100644 index 000000000..09f7df394 --- /dev/null +++ b/c-api/object.po @@ -0,0 +1,453 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) 2001-2024, Python Software Foundation +# This file is distributed under the same license as the Python package. +# FIRST AUTHOR , YEAR. +# +# Translators: +# 汪心禾 , 2019 +# Dai Xu , 2021 +# Freesand Leo , 2022 +# Rafael Fontenelle , 2024 +# +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: Python 3.9\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2024-04-15 06:01+0000\n" +"PO-Revision-Date: 2017-02-16 17:38+0000\n" +"Last-Translator: Rafael Fontenelle , 2024\n" +"Language-Team: Chinese (China) (https://app.transifex.com/python-doc/teams/5390/zh_CN/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: zh_CN\n" +"Plural-Forms: nplurals=1; plural=0;\n" + +#: ../../c-api/object.rst:6 +msgid "Object Protocol" +msgstr "对象协议" + +#: ../../c-api/object.rst:11 +msgid "" +"The ``NotImplemented`` singleton, used to signal that an operation is not " +"implemented for the given type combination." +msgstr "``NotImplemented`` 单例,用于标记某个操作没有针对给定类型组合的实现。" + +#: ../../c-api/object.rst:17 +msgid "" +"Properly handle returning :c:data:`Py_NotImplemented` from within a C " +"function (that is, increment the reference count of NotImplemented and " +"return it)." +msgstr "" +"C 函数内部应正确处理 :c:data:`Py_NotImplemented` 的返回过程(即增加 NotImplemented 的引用计数并返回之)。" + +#: ../../c-api/object.rst:24 +msgid "" +"Print an object *o*, on file *fp*. Returns ``-1`` on error. The flags " +"argument is used to enable certain printing options. The only option " +"currently supported is :const:`Py_PRINT_RAW`; if given, the :func:`str` of " +"the object is written instead of the :func:`repr`." +msgstr "" +"将对象 *o* 写入到文件 *fp*。 出错时返回 ``-1`` 。 旗标参数被用于启用特定的输出选项。 目前唯一支持的选项是 " +":const:`Py_PRINT_RAW`;如果给出该选项,则将写入对象的 :func:`str` 而不是 :func:`repr`。" + +#: ../../c-api/object.rst:32 ../../c-api/object.rst:43 +msgid "" +"Returns ``1`` if *o* has the attribute *attr_name*, and ``0`` otherwise. " +"This is equivalent to the Python expression ``hasattr(o, attr_name)``. This" +" function always succeeds." +msgstr "" +"如果 *o* 带有属性 *attr_name*,则返回 ``1``,否则返回 ``0``。这相当于 Python 表达式 ``hasattr(o, " +"attr_name)``。 此函数总是成功。" + +#: ../../c-api/object.rst:36 +msgid "" +"Note that exceptions which occur while calling :meth:`__getattr__` and " +":meth:`__getattribute__` methods will get suppressed. To get error reporting" +" use :c:func:`PyObject_GetAttr()` instead." +msgstr "" +"注意,在调用 :meth:`__getattr__` 和 :meth:`__getattribute__` " +"方法时发生的异常将被抑制。若要获得错误报告,请换用 :c:func:`PyObject_GetAttr()` 。" + +#: ../../c-api/object.rst:47 +msgid "" +"Note that exceptions which occur while calling :meth:`__getattr__` and " +":meth:`__getattribute__` methods and creating a temporary string object will" +" get suppressed. To get error reporting use " +":c:func:`PyObject_GetAttrString()` instead." +msgstr "" +"注意,在调用 :meth:`__getattr__` 和 :meth:`__getattribute__` " +"方法并创建一个临时字符串对象时,异常将被抑制。若要获得错误报告,请换用 :c:func:`PyObject_GetAttrString()` 。" + +#: ../../c-api/object.rst:55 +msgid "" +"Retrieve an attribute named *attr_name* from object *o*. Returns the " +"attribute value on success, or ``NULL`` on failure. This is the equivalent " +"of the Python expression ``o.attr_name``." +msgstr "" +"从对象 *o* 中读取名为 *attr_name* 的属性。成功返回属性值,失败则返回 ``NULL``。 这相当于 Python 表达式 " +"``o.attr_name``。" + +#: ../../c-api/object.rst:62 +msgid "" +"Retrieve an attribute named *attr_name* from object *o*. Returns the " +"attribute value on success, or ``NULL`` on failure. This is the equivalent " +"of the Python expression ``o.attr_name``." +msgstr "" +"从对象 *o* 中读取一个名为 *attr_name* 的属性。成功时返回属性值,失败则返回 ``NULL``。这相当于 Python 表达式 " +"``o.attr_name``。" + +#: ../../c-api/object.rst:69 +msgid "" +"Generic attribute getter function that is meant to be put into a type " +"object's ``tp_getattro`` slot. It looks for a descriptor in the dictionary " +"of classes in the object's MRO as well as an attribute in the object's " +":attr:`~object.__dict__` (if present). As outlined in :ref:`descriptors`, " +"data descriptors take preference over instance attributes, while non-data " +"descriptors don't. Otherwise, an :exc:`AttributeError` is raised." +msgstr "" +"通用的属性获取函数,用于放入类型对象的 ``tp_getattro`` 槽中。它在类的字典中(位于对象的 MRO 中)查找某个描述符,并在对象的 " +":attr:`~object.__dict__` 中查找某个属性。正如 :ref:`descriptors` " +"所述,数据描述符优先于实例属性,而非数据描述符则不优先。失败则会触发 :exc:`AttributeError` 。" + +#: ../../c-api/object.rst:79 ../../c-api/object.rst:91 +msgid "" +"Set the value of the attribute named *attr_name*, for object *o*, to the " +"value *v*. Raise an exception and return ``-1`` on failure; return ``0`` on " +"success. This is the equivalent of the Python statement ``o.attr_name = " +"v``." +msgstr "" +"将对象 *o* 中名为 *attr_name* 的属性值设为 *v* 。失败时引发异常并返回 ``-1``;成功时返 回 ``0`` 。这相当于 " +"Python 语句 ``o.attr_name = v``。" + +#: ../../c-api/object.rst:84 +msgid "" +"If *v* is ``NULL``, the attribute is deleted. This behaviour is deprecated " +"in favour of using :c:func:`PyObject_DelAttr`, but there are currently no " +"plans to remove it." +msgstr "" +"如果 *v* 为 ``NULL``,该属性将被删除。 此行为已被弃用而应改用 " +":c:func:`PyObject_DelAttr`,但目前还没有移除它的计划。" + +#: ../../c-api/object.rst:96 +msgid "" +"If *v* is ``NULL``, the attribute is deleted, but this feature is deprecated" +" in favour of using :c:func:`PyObject_DelAttrString`." +msgstr "" +"如果 *v* 为 ``NULL``,该属性将被删除,但是此功能已被弃用而应改用 :c:func:`PyObject_DelAttrString`。" + +#: ../../c-api/object.rst:102 +msgid "" +"Generic attribute setter and deleter function that is meant to be put into a" +" type object's :c:member:`~PyTypeObject.tp_setattro` slot. It looks for a " +"data descriptor in the dictionary of classes in the object's MRO, and if " +"found it takes preference over setting or deleting the attribute in the " +"instance dictionary. Otherwise, the attribute is set or deleted in the " +"object's :attr:`~object.__dict__` (if present). On success, ``0`` is " +"returned, otherwise an :exc:`AttributeError` is raised and ``-1`` is " +"returned." +msgstr "" +"通用的属性设置和删除函数,用于放入类型对象的 :c:member:`~PyTypeObject.tp_setattro` " +"槽。它在类的字典中(位于对象的MRO中)查找数据描述器,如果找到,则将比在实例字典中设置或删除属性优先执行。否则,该属性将在对象的 " +":attr:`~object.__dict__` 中设置或删除。如果成功将返回 ``0``,否则将引发 :exc:`AttributeError` " +"并返回 ``-1``。" + +#: ../../c-api/object.rst:114 ../../c-api/object.rst:120 +msgid "" +"Delete attribute named *attr_name*, for object *o*. Returns ``-1`` on " +"failure. This is the equivalent of the Python statement ``del o.attr_name``." +msgstr "" +"删除对象 *o* 中名为 *attr_name* 的属性。失败时返回 ``-1``。这相当于 Python 语句 ``del " +"o.attr_name``。" + +#: ../../c-api/object.rst:126 +msgid "" +"A generic implementation for the getter of a ``__dict__`` descriptor. It " +"creates the dictionary if necessary." +msgstr "``__dict__`` 描述符的获取函数的一种通用实现。必要时会创建该字典。" + +#: ../../c-api/object.rst:134 +msgid "" +"A generic implementation for the setter of a ``__dict__`` descriptor. This " +"implementation does not allow the dictionary to be deleted." +msgstr "``__dict__`` 描述符设置函数的一种通用实现。这里不允许删除该字典。" + +#: ../../c-api/object.rst:142 +msgid "" +"Compare the values of *o1* and *o2* using the operation specified by *opid*," +" which must be one of :const:`Py_LT`, :const:`Py_LE`, :const:`Py_EQ`, " +":const:`Py_NE`, :const:`Py_GT`, or :const:`Py_GE`, corresponding to ``<``, " +"``<=``, ``==``, ``!=``, ``>``, or ``>=`` respectively. This is the " +"equivalent of the Python expression ``o1 op o2``, where ``op`` is the " +"operator corresponding to *opid*. Returns the value of the comparison on " +"success, or ``NULL`` on failure." +msgstr "" +"用 *opid* 指定的操作比较 *o1* 和 *o2* 的值,必须是 :const:`Py_LT` 、 :const:`Py_LE` 、 " +":const:`Py_EQ` 、 :const:`Py_NE` 、 :const:`Py_GT` 或 :const:`Py_GE` " +"之一,分别对应于``<``、``<=`` 、``==`` 、 ``!=`` 、``>`` 或 ``>=``。这相当于 Python 表达式 ``o1 " +"op o2``,其中 ``op`` 是对应于 *opid* 的操作符。成功时返回比较值,失败时返回 ``NULL``。" + +#: ../../c-api/object.rst:152 +msgid "" +"Compare the values of *o1* and *o2* using the operation specified by *opid*," +" which must be one of :const:`Py_LT`, :const:`Py_LE`, :const:`Py_EQ`, " +":const:`Py_NE`, :const:`Py_GT`, or :const:`Py_GE`, corresponding to ``<``, " +"``<=``, ``==``, ``!=``, ``>``, or ``>=`` respectively. Returns ``-1`` on " +"error, ``0`` if the result is false, ``1`` otherwise. This is the equivalent" +" of the Python expression ``o1 op o2``, where ``op`` is the operator " +"corresponding to *opid*." +msgstr "" +"用 *opid* 指定的操作比较 *o1* 和 *o2* 的值,必须是 :const:`Py_LT` 、 :const:`Py_LE` 、 " +":const:`Py_EQ` 、 :const:`Py_NE` 、 :const:`Py_GT` 或 :const:`Py_GE` 之一,分别对应于 " +"``<`` 、``<=``、 ``==`` 、``!=`` 、``>`` 或 ``>=``。错误时返回 ``-1``,若结果为 false 则返回 " +"``0``,否则返回 ``1``。这相当于 Python 表达式 ``o1 op o2``,其中 ``op`` 是对应于 *opid* 的操作符。" + +#: ../../c-api/object.rst:161 +msgid "" +"If *o1* and *o2* are the same object, :c:func:`PyObject_RichCompareBool` " +"will always return ``1`` for :const:`Py_EQ` and ``0`` for :const:`Py_NE`." +msgstr "" +"如果 *o1* 和 *o2* 是同一个对象,:c:func:`PyObject_RichCompareBool` 为 :const:`Py_EQ` " +"则返回 ``1`` ,为 :const:`Py_NE` 则返回 ``0``。" + +#: ../../c-api/object.rst:168 +msgid "" +"Compute a string representation of object *o*. Returns the string " +"representation on success, ``NULL`` on failure. This is the equivalent of " +"the Python expression ``repr(o)``. Called by the :func:`repr` built-in " +"function." +msgstr "" +"计算对象 *o* 的字符串形式。 成功时返回字符串,失败时返回 ``NULL``。 这相当于 Python 表达式 ``repr(o)``。 由内置函数" +" :func:`repr` 调用。" + +#: ../../c-api/object.rst:172 ../../c-api/object.rst:196 +msgid "" +"This function now includes a debug assertion to help ensure that it does not" +" silently discard an active exception." +msgstr "该函数现在包含一个调试断言,用以确保不会静默地丢弃活动的异常。" + +#: ../../c-api/object.rst:180 +msgid "" +"As :c:func:`PyObject_Repr`, compute a string representation of object *o*, " +"but escape the non-ASCII characters in the string returned by " +":c:func:`PyObject_Repr` with ``\\x``, ``\\u`` or ``\\U`` escapes. This " +"generates a string similar to that returned by :c:func:`PyObject_Repr` in " +"Python 2. Called by the :func:`ascii` built-in function." +msgstr "" +"与 :c:func:`PyObject_Repr` 一样,计算对象 *o* 的字符串形式,但在 :c:func:`PyObject_Repr` " +"返回的字符串中用 ``\\x``、``\\u`` 或 ``\\U`` 转义非 ASCII 字符。这将生成一个类似于 Python 2 中由 " +":c:func:`PyObject_Repr` 返回的字符串。由内置函数 :func:`ascii` 调用。" + +#: ../../c-api/object.rst:191 +msgid "" +"Compute a string representation of object *o*. Returns the string " +"representation on success, ``NULL`` on failure. This is the equivalent of " +"the Python expression ``str(o)``. Called by the :func:`str` built-in " +"function and, therefore, by the :func:`print` function." +msgstr "" +"计算对象 *o* 的字符串形式。 成功时返回字符串,失败时返回 ``NULL``。 这相当于 Python 表达式 ``str(o)``。由内置函数 " +":func:`str` 调用,因此也由 :func:`print` 函数调用。" + +#: ../../c-api/object.rst:205 +msgid "" +"Compute a bytes representation of object *o*. ``NULL`` is returned on " +"failure and a bytes object on success. This is equivalent to the Python " +"expression ``bytes(o)``, when *o* is not an integer. Unlike ``bytes(o)``, a" +" TypeError is raised when *o* is an integer instead of a zero-initialized " +"bytes object." +msgstr "" +"计算对象 *o* 的字节形式。失败时返回 ``NULL``,成功时返回一个字节串对象。这相当于 *o* 不是整数时的 Python 表达式 " +"``bytes(o)`` 。与 ``bytes(o)`` 不同的是,当 *o* 是整数而不是初始为 0 的字节串对象时,会触发 TypeError。" + +#: ../../c-api/object.rst:214 +msgid "" +"Return ``1`` if the class *derived* is identical to or derived from the " +"class *cls*, otherwise return ``0``. In case of an error, return ``-1``." +msgstr "如果 *derived* 类与 *cls* 类相同或为其派生类,则返回 ``1``,否则返回 ``0``。 如果出错则返回 ``-1``。" + +#: ../../c-api/object.rst:217 ../../c-api/object.rst:236 +msgid "" +"If *cls* is a tuple, the check will be done against every entry in *cls*. " +"The result will be ``1`` when at least one of the checks returns ``1``, " +"otherwise it will be ``0``." +msgstr "" +"如果 *cls* 是元组,则会对 *cls* 进行逐项检测。如果至少有一次检测返回 ``1``,结果将为 ``1``,否则将是 ``0``。" + +#: ../../c-api/object.rst:221 +msgid "" +"If *cls* has a :meth:`~class.__subclasscheck__` method, it will be called to" +" determine the subclass status as described in :pep:`3119`. Otherwise, " +"*derived* is a subclass of *cls* if it is a direct or indirect subclass, " +"i.e. contained in ``cls.__mro__``." +msgstr "" +"正如 :pep:`3119` 所述,如果 *cls* 带有 :meth:`~class.__subclasscheck__` " +"方法,将会被调用以确定子类的状态。 否则,如果 *derived* 是个直接或间接子类,即包含在 ``cls.__mro__`` 中,那么它就是 " +"*cls* 的一个子类。" + +#: ../../c-api/object.rst:226 +msgid "" +"Normally only class objects, i.e. instances of :class:`type` or a derived " +"class, are considered classes. However, objects can override this by having" +" a :attr:`__bases__` attribute (which must be a tuple of base classes)." +msgstr "" +"通常只有类对象才会被视为类,即 :class:`type` 或派生类的实例。然而,对象可以通过拥有 :attr:`__bases__` " +"属性(必须是基类的元组)来覆盖这一点。" + +#: ../../c-api/object.rst:233 +msgid "" +"Return ``1`` if *inst* is an instance of the class *cls* or a subclass of " +"*cls*, or ``0`` if not. On error, returns ``-1`` and sets an exception." +msgstr "" +"如果 *inst* 是 *cls* 类或其子类的实例,则返回 ``1``,如果不是则返回 ``0``。 如果出错则返回 ``-1`` 并设置一个异常。" + +#: ../../c-api/object.rst:240 +msgid "" +"If *cls* has a :meth:`~class.__instancecheck__` method, it will be called to" +" determine the subclass status as described in :pep:`3119`. Otherwise, " +"*inst* is an instance of *cls* if its class is a subclass of *cls*." +msgstr "" +"正如 :pep:`3119` 所述,如果 *cls* 带有 :meth:`~class.__subclasscheck__` " +"方法,将会被调用以确定子类的状态。 否则,如果 *derived* 是 *cls* 的子类,那么它就是 *cls* 的一个实例。" + +#: ../../c-api/object.rst:244 +msgid "" +"An instance *inst* can override what is considered its class by having a " +":attr:`__class__` attribute." +msgstr "实例 *inst* 可以通过 :attr:`__class__` 属性来覆盖其所属类。" + +#: ../../c-api/object.rst:247 +msgid "" +"An object *cls* can override if it is considered a class, and what its base " +"classes are, by having a :attr:`__bases__` attribute (which must be a tuple " +"of base classes)." +msgstr "对象 *cls* 是否被认作类,以及基类是什么,均可通过 :attr:`__bases__` 属性(必须是基类的元组)进行覆盖。" + +#: ../../c-api/object.rst:256 +msgid "" +"Compute and return the hash value of an object *o*. On failure, return " +"``-1``. This is the equivalent of the Python expression ``hash(o)``." +msgstr "计算并返回对象的哈希值 *o*。 失败时返回 ``-1``。这相当于 Python 表达式 ``hash(o)``。" + +#: ../../c-api/object.rst:259 +msgid "" +"The return type is now Py_hash_t. This is a signed integer the same size as" +" :c:type:`Py_ssize_t`." +msgstr "现在的返回类型是 Py_hash_t。 这是一个大小与 :c:type:`Py_ssize_t` 相同的有符号整数。" + +#: ../../c-api/object.rst:266 +msgid "" +"Set a :exc:`TypeError` indicating that ``type(o)`` is not hashable and " +"return ``-1``. This function receives special treatment when stored in a " +"``tp_hash`` slot, allowing a type to explicitly indicate to the interpreter " +"that it is not hashable." +msgstr "" +"设置一个 :exc:`TypeError` 表示 ``type(o)`` 是不可哈希的,并返回 ``-1`` 。该函数保存在 ``tp_hash`` " +"槽中时会受到特别对待,允许某个类型向解释器显式表明它不可散列。" + +#: ../../c-api/object.rst:274 +msgid "" +"Returns ``1`` if the object *o* is considered to be true, and ``0`` " +"otherwise. This is equivalent to the Python expression ``not not o``. On " +"failure, return ``-1``." +msgstr "" +"如果对象 *o* 被认为是 true,则返回 ``1``,否则返回 ``0``。这相当于 Python 表达式 ``not not o``。 失败则返回" +" ``-1``。" + +#: ../../c-api/object.rst:281 +msgid "" +"Returns ``0`` if the object *o* is considered to be true, and ``1`` " +"otherwise. This is equivalent to the Python expression ``not o``. On " +"failure, return ``-1``." +msgstr "" +"如果对象 *o* 被认为是 true,则返回 ``1``,否则返回 ``0``。这相当于 Python 表达式 ``not not o``。 失败则返回" +" ``-1``。" + +#: ../../c-api/object.rst:290 +msgid "" +"When *o* is non-``NULL``, returns a type object corresponding to the object " +"type of object *o*. On failure, raises :exc:`SystemError` and returns " +"``NULL``. This is equivalent to the Python expression ``type(o)``. This " +"function increments the reference count of the return value. There's really " +"no reason to use this function instead of the :c:func:`Py_TYPE()` function, " +"which returns a pointer of type :c:type:`PyTypeObject*`, except when the " +"incremented reference count is needed." +msgstr "" +"当 *o* 不为 ``NULL`` 时,返回一个与对象 *o* 的类型相对应的类型对象。 当失败时,将引发 :exc:`SystemError` 并返回" +" ``NULL``。 这等同于 Python 表达式 ``type(o)``。 该函数会增加返回值的引用计数。 实际上没有理由不去用普通的表达式 " +":c:func:`Py_TYPE()` 函数而使用该函数,它将返回一个 :c:type:`PyTypeObject*` " +"类型的指针,除非是需要增强引用计数的时候。" + +#: ../../c-api/object.rst:301 +msgid "" +"Return true if the object *o* is of type *type* or a subtype of *type*. " +"Both parameters must be non-``NULL``." +msgstr "如果对象 *o* 为 *type* 类型或 *type* 的子类型则返回真值。 两个参数都必须非 ``NULL``。" + +#: ../../c-api/object.rst:310 +msgid "" +"Return the length of object *o*. If the object *o* provides either the " +"sequence and mapping protocols, the sequence length is returned. On error, " +"``-1`` is returned. This is the equivalent to the Python expression " +"``len(o)``." +msgstr "" +"返回对象 *o* 的长度。 如果对象 *o* 支持序列和映射协议,则返回序列长度。 出错时返回 ``-1``。这等同于 Python 表达式 " +"``len(o)``。" + +#: ../../c-api/object.rst:317 +msgid "" +"Return an estimated length for the object *o*. First try to return its " +"actual length, then an estimate using :meth:`~object.__length_hint__`, and " +"finally return the default value. On error return ``-1``. This is the " +"equivalent to the Python expression ``operator.length_hint(o, " +"defaultvalue)``." +msgstr "" +"返回对象 *o* 的估计长度。首先尝试返回实际长度,然后用 :meth:`~object.__length_hint__` " +"进行估计,最后返回默认值。出错时返回 ``-1``。这等同于 Python 表达式 ``operator.length_hint(o, " +"defaultvalue)``。" + +#: ../../c-api/object.rst:327 +msgid "" +"Return element of *o* corresponding to the object *key* or ``NULL`` on " +"failure. This is the equivalent of the Python expression ``o[key]``." +msgstr "返回对象 *key* 对应的 *o* 元素,或在失败时返回 ``NULL``。这等同于 Python 表达式 ``o[key]``。" + +#: ../../c-api/object.rst:333 +msgid "" +"Map the object *key* to the value *v*. Raise an exception and return ``-1``" +" on failure; return ``0`` on success. This is the equivalent of the Python " +"statement ``o[key] = v``. This function *does not* steal a reference to " +"*v*." +msgstr "" +"将对象 *key* 映射到值 *v*。 失败时引发异常并返回 ``-1``;成功时返回 ``0``。 这相当于 Python 语句 ``o[key] =" +" v``。该函数 *不会* 偷取 *v* 的引用计数。" + +#: ../../c-api/object.rst:341 +msgid "" +"Remove the mapping for the object *key* from the object *o*. Return ``-1`` " +"on failure. This is equivalent to the Python statement ``del o[key]``." +msgstr "从对象 *o* 中移除对象 *key* 的映射。失败时返回 ``-1``。 这相当于 Python 语句 ``del o[key]``。" + +#: ../../c-api/object.rst:347 +msgid "" +"This is equivalent to the Python expression ``dir(o)``, returning a " +"(possibly empty) list of strings appropriate for the object argument, or " +"``NULL`` if there was an error. If the argument is ``NULL``, this is like " +"the Python ``dir()``, returning the names of the current locals; in this " +"case, if no execution frame is active then ``NULL`` is returned but " +":c:func:`PyErr_Occurred` will return false." +msgstr "" +"相当于 Python 表达式 ``dir(o)``,返回一个(可能为空)适合对象参数的字符串列表,如果出错则返回 ``NULL``。 如果参数为 " +"``NULL``,类似 Python 的 ``dir()``,则返回当前 locals 的名字;这时如果没有活动的执行框架,则返回 ``NULL``,但" +" :c:func:`PyErr_Occurred` 将返回 false。" + +#: ../../c-api/object.rst:356 +msgid "" +"This is equivalent to the Python expression ``iter(o)``. It returns a new " +"iterator for the object argument, or the object itself if the object is " +"already an iterator. Raises :exc:`TypeError` and returns ``NULL`` if the " +"object cannot be iterated." +msgstr "" +"等同于 Python 表达式 " +"``iter(o)``。为对象参数返回一个新的迭代器,如果该对象已经是一个迭代器,则返回对象本身。如果对象不能被迭代,会引发 " +":exc:`TypeError` ,并返回 ``NULL``。" diff --git a/c-api/objimpl.po b/c-api/objimpl.po new file mode 100644 index 000000000..6e02997e8 --- /dev/null +++ b/c-api/objimpl.po @@ -0,0 +1,32 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) 2001-2022, Python Software Foundation +# This file is distributed under the same license as the Python package. +# FIRST AUTHOR , YEAR. +# +# Translators: +# Freesand Leo , 2018 +# +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: Python 3.9\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2022-11-04 14:34+0000\n" +"PO-Revision-Date: 2017-02-16 17:38+0000\n" +"Last-Translator: Freesand Leo , 2018\n" +"Language-Team: Chinese (China) (https://www.transifex.com/python-doc/teams/5390/zh_CN/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: zh_CN\n" +"Plural-Forms: nplurals=1; plural=0;\n" + +#: ../../c-api/objimpl.rst:7 +msgid "Object Implementation Support" +msgstr "对象实现支持" + +#: ../../c-api/objimpl.rst:9 +msgid "" +"This chapter describes the functions, types, and macros used when defining " +"new object types." +msgstr "本章描述了定义新对象类型时所使用的函数、类型和宏。" diff --git a/c-api/refcounting.po b/c-api/refcounting.po new file mode 100644 index 000000000..08e37b751 --- /dev/null +++ b/c-api/refcounting.po @@ -0,0 +1,122 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) 2001-2022, Python Software Foundation +# This file is distributed under the same license as the Python package. +# FIRST AUTHOR , YEAR. +# +# Translators: +# Freesand Leo , 2019 +# +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: Python 3.9\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2022-11-04 14:34+0000\n" +"PO-Revision-Date: 2017-02-16 17:38+0000\n" +"Last-Translator: Freesand Leo , 2019\n" +"Language-Team: Chinese (China) (https://www.transifex.com/python-doc/teams/5390/zh_CN/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: zh_CN\n" +"Plural-Forms: nplurals=1; plural=0;\n" + +#: ../../c-api/refcounting.rst:8 +msgid "Reference Counting" +msgstr "引用计数" + +#: ../../c-api/refcounting.rst:10 +msgid "" +"The macros in this section are used for managing reference counts of Python " +"objects." +msgstr "本节介绍的宏被用于管理 Python 对象的引用计数。" + +#: ../../c-api/refcounting.rst:16 +msgid "" +"Increment the reference count for object *o*. The object must not be " +"``NULL``; if you aren't sure that it isn't ``NULL``, use " +":c:func:`Py_XINCREF`." +msgstr "" +"增加对象 *o* 的引用计数。 对象必须不为 ``NULL``;如果你不确定它不为 ``NULL``,可使用 :c:func:`Py_XINCREF`。" + +#: ../../c-api/refcounting.rst:22 +msgid "" +"Increment the reference count for object *o*. The object may be ``NULL``, " +"in which case the macro has no effect." +msgstr "增加对象 *o* 的引用计数。 对象可以为 ``NULL``,在此情况下该宏不产生任何效果。" + +#: ../../c-api/refcounting.rst:28 +msgid "" +"Decrement the reference count for object *o*. The object must not be " +"``NULL``; if you aren't sure that it isn't ``NULL``, use " +":c:func:`Py_XDECREF`. If the reference count reaches zero, the object's " +"type's deallocation function (which must not be ``NULL``) is invoked." +msgstr "" +"减少对象 *o* 的引用计数。 对象必须不为 ``NULL``;如果你不确定它不为 ``NULL``,可使用 :c:func:`Py_XDECREF`。" +" 如果引用计数降为零,将发起调用对象所属类型的释放函数 (它必须不为 ``NULL``)。" + +#: ../../c-api/refcounting.rst:35 +msgid "" +"The deallocation function can cause arbitrary Python code to be invoked " +"(e.g. when a class instance with a :meth:`__del__` method is deallocated). " +"While exceptions in such code are not propagated, the executed code has free" +" access to all Python global variables. This means that any object that is " +"reachable from a global variable should be in a consistent state before " +":c:func:`Py_DECREF` is invoked. For example, code to delete an object from " +"a list should copy a reference to the deleted object in a temporary " +"variable, update the list data structure, and then call :c:func:`Py_DECREF` " +"for the temporary variable." +msgstr "" +"释放函数可导致任意 Python 代码被发起调用(例如当一个带有 :meth:`__del__` 方法的类实例被释放时就是如此)。 " +"虽然此类代码中的异常不会被传播,但被执行的代码能够自由访问所有 Python 全局变量。 这意味着任何可通过全局变量获取的对象在 " +":c:func:`Py_DECREF` 被发起调用之前都应当处于完好状态。 " +"例如,从一个列表中删除对象的代码应当将被删除对象的引用拷贝到一个临时变量中,更新列表数据结构,然后再为临时变量调用 " +":c:func:`Py_DECREF`。" + +#: ../../c-api/refcounting.rst:47 +msgid "" +"Decrement the reference count for object *o*. The object may be ``NULL``, " +"in which case the macro has no effect; otherwise the effect is the same as " +"for :c:func:`Py_DECREF`, and the same warning applies." +msgstr "" +"减少对象 *o* 的引用计数。 对象可以为 ``NULL``,在此情况下该宏不产生任何效果;在其他情况下其效果与 :c:func:`Py_DECREF`" +" 相同,并会应用同样的警告。" + +#: ../../c-api/refcounting.rst:54 +msgid "" +"Decrement the reference count for object *o*. The object may be ``NULL``, " +"in which case the macro has no effect; otherwise the effect is the same as " +"for :c:func:`Py_DECREF`, except that the argument is also set to ``NULL``. " +"The warning for :c:func:`Py_DECREF` does not apply with respect to the " +"object passed because the macro carefully uses a temporary variable and sets" +" the argument to ``NULL`` before decrementing its reference count." +msgstr "" +"减少对象 *o* 的引用计数。 对象可以为 ``NULL``,在此情况下该宏不产生任何效果;在其他情况下其效果与 :c:func:`Py_DECREF`" +" 相同,区别在于其参数也会被设为 ``NULL``。 针对 :c:func:`Py_DECREF` " +"的警告不适用于所传递的对象,因为该宏会细心地使用一个临时变量并在减少其引用计数之前将参数设为 ``NULL``。" + +#: ../../c-api/refcounting.rst:61 +msgid "" +"It is a good idea to use this macro whenever decrementing the reference " +"count of an object that might be traversed during garbage collection." +msgstr "每当要减少在垃圾回收期间可能会被遍历的对象的引用计数时,使用该宏是一个好主意。" + +#: ../../c-api/refcounting.rst:65 +msgid "" +"The following functions are for runtime dynamic embedding of Python: " +"``Py_IncRef(PyObject *o)``, ``Py_DecRef(PyObject *o)``. They are simply " +"exported function versions of :c:func:`Py_XINCREF` and :c:func:`Py_XDECREF`," +" respectively." +msgstr "" +"以下函数适用于 Python 的运行时动态嵌入: ``Py_IncRef(PyObject *o)``, ``Py_DecRef(PyObject " +"*o)``。 它们分别只是 :c:func:`Py_XINCREF` 和 :c:func:`Py_XDECREF` 的简单导出函数版本。" + +#: ../../c-api/refcounting.rst:70 +msgid "" +"The following functions or macros are only for use within the interpreter " +"core: :c:func:`_Py_Dealloc`, :c:func:`_Py_ForgetReference`, " +":c:func:`_Py_NewReference`, as well as the global variable " +":c:data:`_Py_RefTotal`." +msgstr "" +"以下函数或宏仅可在解释器核心内部使用: :c:func:`_Py_Dealloc`, :c:func:`_Py_ForgetReference`, " +":c:func:`_Py_NewReference` 以及全局变量 :c:data:`_Py_RefTotal`。" diff --git a/c-api/reflection.po b/c-api/reflection.po new file mode 100644 index 000000000..cd2c9bdea --- /dev/null +++ b/c-api/reflection.po @@ -0,0 +1,100 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) 2001-2022, Python Software Foundation +# This file is distributed under the same license as the Python package. +# FIRST AUTHOR , YEAR. +# +# Translators: +# Alpha Du , 2019 +# Freesand Leo , 2020 +# +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: Python 3.9\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2022-11-04 14:34+0000\n" +"PO-Revision-Date: 2017-02-16 17:38+0000\n" +"Last-Translator: Freesand Leo , 2020\n" +"Language-Team: Chinese (China) (https://www.transifex.com/python-doc/teams/5390/zh_CN/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: zh_CN\n" +"Plural-Forms: nplurals=1; plural=0;\n" + +#: ../../c-api/reflection.rst:6 +msgid "Reflection" +msgstr "反射" + +#: ../../c-api/reflection.rst:10 +msgid "" +"Return a dictionary of the builtins in the current execution frame, or the " +"interpreter of the thread state if no frame is currently executing." +msgstr "返回当前执行帧中内置函数的字典,如果当前没有帧正在执行,则返回线程状态的解释器。" + +#: ../../c-api/reflection.rst:16 +msgid "" +"Return a dictionary of the local variables in the current execution frame, " +"or ``NULL`` if no frame is currently executing." +msgstr "返回当前执行帧中局部变量的字典,如果没有当前执行的帧则返回 ``NULL``。" + +#: ../../c-api/reflection.rst:22 +msgid "" +"Return a dictionary of the global variables in the current execution frame, " +"or ``NULL`` if no frame is currently executing." +msgstr "返回当前执行帧中全局变量的字典,如果没有当前执行的帧则返回 ``NULL``。" + +#: ../../c-api/reflection.rst:28 +msgid "" +"Return the current thread state's frame, which is ``NULL`` if no frame is " +"currently executing." +msgstr "返回当前线程状态的帧,如果没有当前执行的帧则返回 ``NULL``。" + +#: ../../c-api/reflection.rst:31 +msgid "See also :c:func:`PyThreadState_GetFrame`." +msgstr "另请参阅 :c:func:`PyThreadState_GetFrame`。" + +#: ../../c-api/reflection.rst:36 +msgid "Get the *frame* next outer frame." +msgstr "获取 *frame* 为下一个外部帧。" + +#: ../../c-api/reflection.rst:38 +msgid "Return a strong reference, or ``NULL`` if *frame* has no outer frame." +msgstr "返回一个强引用,如果 *frame* 没有外部帧则返回 ``NULL``。" + +#: ../../c-api/reflection.rst:40 ../../c-api/reflection.rst:60 +msgid "*frame* must not be ``NULL``." +msgstr "*frame* 必须不为 ``NULL``。" + +#: ../../c-api/reflection.rst:47 +msgid "Get the *frame* code." +msgstr "获取 *frame* 的代码。" + +#: ../../c-api/reflection.rst:49 +msgid "Return a strong reference." +msgstr "返回一个强引用。" + +#: ../../c-api/reflection.rst:51 +msgid "" +"*frame* must not be ``NULL``. The result (frame code) cannot be ``NULL``." +msgstr "*frame* 必须不为 ``NULL``。 结果(帧的代码)不能为 ``NULL``。" + +#: ../../c-api/reflection.rst:58 +msgid "Return the line number that *frame* is currently executing." +msgstr "返回 *frame* 当前正在执行的行号。" + +#: ../../c-api/reflection.rst:65 +msgid "" +"Return the name of *func* if it is a function, class or instance object, " +"else the name of *func*\\s type." +msgstr "如果 *func* 是函数、类或实例对象,则返回它的名称,否则返回 *func* 的类型的名称。" + +#: ../../c-api/reflection.rst:71 +msgid "" +"Return a description string, depending on the type of *func*. Return values " +"include \"()\" for functions and methods, \" constructor\", \" instance\", " +"and \" object\". Concatenated with the result of " +":c:func:`PyEval_GetFuncName`, the result will be a description of *func*." +msgstr "" +"根据 *func* 的类型返回描述字符串。 返回值包括函数和方法的 \"()\", \" constructor\", \" instance\" 和 " +"\" object\"。 与 :c:func:`PyEval_GetFuncName` 的结果连接,结果将是 *func* 的描述。" diff --git a/c-api/sequence.po b/c-api/sequence.po new file mode 100644 index 000000000..8f3cb5517 --- /dev/null +++ b/c-api/sequence.po @@ -0,0 +1,242 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) 2001-2022, Python Software Foundation +# This file is distributed under the same license as the Python package. +# FIRST AUTHOR , YEAR. +# +# Translators: +# jacky , 2019 +# Freesand Leo , 2022 +# +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: Python 3.9\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2022-11-04 14:34+0000\n" +"PO-Revision-Date: 2017-02-16 17:38+0000\n" +"Last-Translator: Freesand Leo , 2022\n" +"Language-Team: Chinese (China) (https://www.transifex.com/python-doc/teams/5390/zh_CN/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: zh_CN\n" +"Plural-Forms: nplurals=1; plural=0;\n" + +#: ../../c-api/sequence.rst:6 +msgid "Sequence Protocol" +msgstr "序列协议" + +#: ../../c-api/sequence.rst:11 +msgid "" +"Return ``1`` if the object provides the sequence protocol, and ``0`` " +"otherwise. Note that it returns ``1`` for Python classes with a " +":meth:`__getitem__` method, unless they are :class:`dict` subclasses, since " +"in general it is impossible to determine what type of keys the class " +"supports. This function always succeeds." +msgstr "" +"如果对象提供了序列协议则返回 ``1``,否则返回 ``0``。 请注意它将为具有 :meth:`__getitem__` 方法的 Python 类返回" +" ``1``,除非它们是 :class:`dict` 的子类,因为在通常情况下无法确定这种类支持哪种键类型。 此函数总是会成功执行。" + +#: ../../c-api/sequence.rst:23 +msgid "" +"Returns the number of objects in sequence *o* on success, and ``-1`` on " +"failure. This is equivalent to the Python expression ``len(o)``." +msgstr "到哪里积分返回序列 *o* 中对象的数量,失败时返回 ``-1``。 这相当于 Python 表达式 ``len(o)``。" + +#: ../../c-api/sequence.rst:29 +msgid "" +"Return the concatenation of *o1* and *o2* on success, and ``NULL`` on " +"failure. This is the equivalent of the Python expression ``o1 + o2``." +msgstr "成功时返回 *o1* 和 *o2* 的拼接,失败时返回 ``NULL``。 这等价于 Python 表达式 ``o1 + o2``。" + +#: ../../c-api/sequence.rst:35 +msgid "" +"Return the result of repeating sequence object *o* *count* times, or " +"``NULL`` on failure. This is the equivalent of the Python expression ``o * " +"count``." +msgstr "" +"返回序列对象 *o* 重复 *count* 次的结果,失败时返回 ``NULL``。 这等价于 Python 表达式 ``o * count``。" + +#: ../../c-api/sequence.rst:41 +msgid "" +"Return the concatenation of *o1* and *o2* on success, and ``NULL`` on " +"failure. The operation is done *in-place* when *o1* supports it. This is " +"the equivalent of the Python expression ``o1 += o2``." +msgstr "" +"成功时返回 *o1* 和 *o2* 的拼接,失败时返回 ``NULL``。 在 *o1* 支持的情况下操作将 *原地* 完成。 这等价于 Python " +"表达式 ``o1 += o2``。" + +#: ../../c-api/sequence.rst:48 +msgid "" +"Return the result of repeating sequence object *o* *count* times, or " +"``NULL`` on failure. The operation is done *in-place* when *o* supports it." +" This is the equivalent of the Python expression ``o *= count``." +msgstr "" +"Return the result of repeating sequence object返回序列对象 *o* 重复 *count* " +"次的结果,失败时返回 ``NULL``。 在 *o* 支持的情况下该操作会 *原地* 完成。 这等价于 Python 表达式 ``o *= " +"count``。" + +#: ../../c-api/sequence.rst:55 +msgid "" +"Return the *i*\\ th element of *o*, or ``NULL`` on failure. This is the " +"equivalent of the Python expression ``o[i]``." +msgstr "返回 *o* 中的第 *i* 号元素,失败时返回 ``NULL``。 这等价于 Python 表达式 ``o[i]``。" + +#: ../../c-api/sequence.rst:61 +msgid "" +"Return the slice of sequence object *o* between *i1* and *i2*, or ``NULL`` " +"on failure. This is the equivalent of the Python expression ``o[i1:i2]``." +msgstr "" +"返回序列对象 *o* 的 *i1* 到 *i2* 的切片,失败时返回 ``NULL``。 这等价于 Python 表达式 ``o[i1:i2]``。" + +#: ../../c-api/sequence.rst:67 +msgid "" +"Assign object *v* to the *i*\\ th element of *o*. Raise an exception and " +"return ``-1`` on failure; return ``0`` on success. This is the equivalent " +"of the Python statement ``o[i] = v``. This function *does not* steal a " +"reference to *v*." +msgstr "" +"将对象 *v* 赋值给 *o* 的第 *i* 号元素。 失败时会引发异常并返回 ``-1``;成功时返回 ``0``。 这相当于 Python 语句 " +"``o[i] = v``。 此函数 *不会* 改变对 *v* 的引用。" + +#: ../../c-api/sequence.rst:72 +msgid "" +"If *v* is ``NULL``, the element is deleted, but this feature is deprecated " +"in favour of using :c:func:`PySequence_DelItem`." +msgstr "如果 *v* 为 ``NULL``,元素将被删除,但是此特性已被弃用而应改用 :c:func:`PySequence_DelItem`。" + +#: ../../c-api/sequence.rst:78 +msgid "" +"Delete the *i*\\ th element of object *o*. Returns ``-1`` on failure. This" +" is the equivalent of the Python statement ``del o[i]``." +msgstr "删除对象 *o* 的第 *i* 号元素。 失败时返回 ``-1``。 这相当于 Python 语句 ``del o[i]``。" + +#: ../../c-api/sequence.rst:84 +msgid "" +"Assign the sequence object *v* to the slice in sequence object *o* from *i1*" +" to *i2*. This is the equivalent of the Python statement ``o[i1:i2] = v``." +msgstr "" +"将序列对象 *v* 赋值给序列对象 *o* 的从 *i1* 到 *i2* 切片。 这相当于 Python 语句 ``o[i1:i2] = v``。" + +#: ../../c-api/sequence.rst:90 +msgid "" +"Delete the slice in sequence object *o* from *i1* to *i2*. Returns ``-1`` " +"on failure. This is the equivalent of the Python statement ``del " +"o[i1:i2]``." +msgstr "" +"删除序列对象 *o* 的从 *i1* 到 *i2* 的切片。 失败时返回 ``-1``。 这相当于 Python 语句 ``del " +"o[i1:i2]``。" + +#: ../../c-api/sequence.rst:96 +msgid "" +"Return the number of occurrences of *value* in *o*, that is, return the " +"number of keys for which ``o[key] == value``. On failure, return ``-1``. " +"This is equivalent to the Python expression ``o.count(value)``." +msgstr "" +"返回 *value* 在 *o* 中出现的次数,即返回使得 ``o[key] == value`` 的键的数量。 失败时返回 ``-1``。 这相当于 " +"Python 表达式 ``o.count(value)``。" + +#: ../../c-api/sequence.rst:103 +msgid "" +"Determine if *o* contains *value*. If an item in *o* is equal to *value*, " +"return ``1``, otherwise return ``0``. On error, return ``-1``. This is " +"equivalent to the Python expression ``value in o``." +msgstr "" +"确定 *o* 是否包含 *value*。 如果 *o* 中的某一项等于 *value*,则返回 ``1``,否则返回 ``0``。 出错时,返回 " +"``-1``。 这相当于 Python 表达式 ``value in o``。" + +#: ../../c-api/sequence.rst:110 +msgid "" +"Return the first index *i* for which ``o[i] == value``. On error, return " +"``-1``. This is equivalent to the Python expression ``o.index(value)``." +msgstr "" +"返回第一个索引*i*,其中 ``o[i] == value``.出错时,返回“-1”.相当于Python的``o.index(value)``表达式." + +#: ../../c-api/sequence.rst:116 +msgid "" +"Return a list object with the same contents as the sequence or iterable *o*," +" or ``NULL`` on failure. The returned list is guaranteed to be new. This " +"is equivalent to the Python expression ``list(o)``." +msgstr "" +"返回一个列表对象,其内容与序列或可迭代对象 *o* 相同,失败时返回 ``NULL``。 返回的列表保证是一个新对象。 这等价于 Python 表达式 " +"``list(o)``。" + +#: ../../c-api/sequence.rst:125 +msgid "" +"Return a tuple object with the same contents as the sequence or iterable " +"*o*, or ``NULL`` on failure. If *o* is a tuple, a new reference will be " +"returned, otherwise a tuple will be constructed with the appropriate " +"contents. This is equivalent to the Python expression ``tuple(o)``." +msgstr "" +"返回一个元组对象,其内容与序列或可迭代对象 *o* 相同,失败时返回 ``NULL``。 如果 *o* " +"为元组,则将返回一个新的引用,在其他情况下将使用适当的内容构造一个元组。 这等价于 Python 表达式 ``tuple(o)``。" + +#: ../../c-api/sequence.rst:133 +msgid "" +"Return the sequence or iterable *o* as an object usable by the other " +"``PySequence_Fast*`` family of functions. If the object is not a sequence or" +" iterable, raises :exc:`TypeError` with *m* as the message text. Returns " +"``NULL`` on failure." +msgstr "" +"将序列或可迭代对象 *o* 作为其他 ``PySequence_Fast*`` 函数族可用的对象返回。 如果该对象不是序列或可迭代对象,则会引发 " +":exc:`TypeError` 并将 *m* 作为消息文本。 失败时返回 ``NULL``。" + +#: ../../c-api/sequence.rst:138 +msgid "" +"The ``PySequence_Fast*`` functions are thus named because they assume *o* is" +" a :c:type:`PyTupleObject` or a :c:type:`PyListObject` and access the data " +"fields of *o* directly." +msgstr "" +"``PySequence_Fast*`` 函数之所以这样命名,是因为它们会假定 *o* 是一个 :c:type:`PyTupleObject` 或 " +":c:type:`PyListObject` 并直接访问 *o* 的数据字段。" + +#: ../../c-api/sequence.rst:142 +msgid "" +"As a CPython implementation detail, if *o* is already a sequence or list, it" +" will be returned." +msgstr "作为 CPython 的实现细节,如果 *o* 已经是一个序列或列表,它将被直接返回。" + +#: ../../c-api/sequence.rst:148 +msgid "" +"Returns the length of *o*, assuming that *o* was returned by " +":c:func:`PySequence_Fast` and that *o* is not ``NULL``. The size can also " +"be retrieved by calling :c:func:`PySequence_Size` on *o*, but " +":c:func:`PySequence_Fast_GET_SIZE` is faster because it can assume *o* is a " +"list or tuple." +msgstr "" +"在 *o* 由 :c:func:`PySequence_Fast` 返回且 *o* 不为 ``NULL`` 的情况下返回 *o* 长度。 也可以通过在" +" *o* 上调用 :c:func:`PySequence_Size` 来获取大小,但是 " +":c:func:`PySequence_Fast_GET_SIZE` 的速度更快因为它可以假定 *o* 为列表或元组。" + +#: ../../c-api/sequence.rst:157 +msgid "" +"Return the *i*\\ th element of *o*, assuming that *o* was returned by " +":c:func:`PySequence_Fast`, *o* is not ``NULL``, and that *i* is within " +"bounds." +msgstr "" +"在 *o* 由 :c:func:`PySequence_Fast` 返回且 *o* 不 ``NULL``,并且 *i* d在索引范围内的情况下返回 " +"*o* 的第 *i* 号元素。" + +#: ../../c-api/sequence.rst:163 +msgid "" +"Return the underlying array of PyObject pointers. Assumes that *o* was " +"returned by :c:func:`PySequence_Fast` and *o* is not ``NULL``." +msgstr "" +"返回 PyObject 指针的底层数组。 假设 *o* 由 :c:func:`PySequence_Fast` 返回且 *o* 不为 ``NULL``。" + +#: ../../c-api/sequence.rst:166 +msgid "" +"Note, if a list gets resized, the reallocation may relocate the items array." +" So, only use the underlying array pointer in contexts where the sequence " +"cannot change." +msgstr "请注意,如果列表调整大小,重新分配可能会重新定位items数组.因此,仅在序列无法更改的上下文中使用基础数组指针." + +#: ../../c-api/sequence.rst:173 +msgid "" +"Return the *i*\\ th element of *o* or ``NULL`` on failure. Faster form of " +":c:func:`PySequence_GetItem` but without checking that " +":c:func:`PySequence_Check` on *o* is true and without adjustment for " +"negative indices." +msgstr "" +"返回 *o* 的第 *i* 个元素或在失败时返回 ``NULL``。 此形式比 :c:func:`PySequence_GetItem` " +"理馔,但不会检查 *o* 上的 :c:func:`PySequence_Check` 是否为真值,也不会对负序号进行调整。" diff --git a/c-api/set.po b/c-api/set.po new file mode 100644 index 000000000..45eb3820d --- /dev/null +++ b/c-api/set.po @@ -0,0 +1,222 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) 2001-2022, Python Software Foundation +# This file is distributed under the same license as the Python package. +# FIRST AUTHOR , YEAR. +# +# Translators: +# Josh Ouyang , 2019 +# Freesand Leo , 2022 +# +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: Python 3.9\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2022-11-04 14:34+0000\n" +"PO-Revision-Date: 2017-02-16 17:38+0000\n" +"Last-Translator: Freesand Leo , 2022\n" +"Language-Team: Chinese (China) (https://www.transifex.com/python-doc/teams/5390/zh_CN/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: zh_CN\n" +"Plural-Forms: nplurals=1; plural=0;\n" + +#: ../../c-api/set.rst:6 +msgid "Set Objects" +msgstr "集合对象" + +#: ../../c-api/set.rst:15 +msgid "" +"This section details the public API for :class:`set` and :class:`frozenset` " +"objects. Any functionality not listed below is best accessed using either " +"the abstract object protocol (including :c:func:`PyObject_CallMethod`, " +":c:func:`PyObject_RichCompareBool`, :c:func:`PyObject_Hash`, " +":c:func:`PyObject_Repr`, :c:func:`PyObject_IsTrue`, " +":c:func:`PyObject_Print`, and :c:func:`PyObject_GetIter`) or the abstract " +"number protocol (including :c:func:`PyNumber_And`, " +":c:func:`PyNumber_Subtract`, :c:func:`PyNumber_Or`, :c:func:`PyNumber_Xor`, " +":c:func:`PyNumber_InPlaceAnd`, :c:func:`PyNumber_InPlaceSubtract`, " +":c:func:`PyNumber_InPlaceOr`, and :c:func:`PyNumber_InPlaceXor`)." +msgstr "" +"这一节详细介绍了针对 :class:`set` 和 :class:`frozenset` 对象的公共 API。 " +"任何未在下面列出的功能最好是使用抽象对象协议 (包括 :c:func:`PyObject_CallMethod`, " +":c:func:`PyObject_RichCompareBool`, :c:func:`PyObject_Hash`, " +":c:func:`PyObject_Repr`, :c:func:`PyObject_IsTrue`, :c:func:`PyObject_Print`" +" 以及 :c:func:`PyObject_GetIter`) 或者抽象数字协议 (包括 :c:func:`PyNumber_And`, " +":c:func:`PyNumber_Subtract`, :c:func:`PyNumber_Or`, :c:func:`PyNumber_Xor`, " +":c:func:`PyNumber_InPlaceAnd`, :c:func:`PyNumber_InPlaceSubtract`, " +":c:func:`PyNumber_InPlaceOr` 以及 :c:func:`PyNumber_InPlaceXor`)。" + +#: ../../c-api/set.rst:29 +msgid "" +"This subtype of :c:type:`PyObject` is used to hold the internal data for " +"both :class:`set` and :class:`frozenset` objects. It is like a " +":c:type:`PyDictObject` in that it is a fixed size for small sets (much like " +"tuple storage) and will point to a separate, variable sized block of memory " +"for medium and large sized sets (much like list storage). None of the fields" +" of this structure should be considered public and all are subject to " +"change. All access should be done through the documented API rather than by" +" manipulating the values in the structure." +msgstr "" +"这个 :c:type:`PyObject` 的子类型被用来保存 :class:`set` 和 :class:`frozenset` 对象的内部数据。 " +"它类似于 :c:type:`PyDictObject` " +"的地方在于对小尺寸集合来说它是固定大小的(很像元组的存储方式),而对于中等和大尺寸集合来说它将指向单独的可变大小的内存块(很像列表的存储方式)。 " +"此结构体的字段不应被视为公有并且可能发生改变。 所有访问都应当通过已写入文档的 API 来进行而不可通过直接操纵结构体中的值。" + +#: ../../c-api/set.rst:40 +msgid "" +"This is an instance of :c:type:`PyTypeObject` representing the Python " +":class:`set` type." +msgstr "这是一个 :c:type:`PyTypeObject` 实例,表示 Python :class:`set` 类型。" + +#: ../../c-api/set.rst:46 +msgid "" +"This is an instance of :c:type:`PyTypeObject` representing the Python " +":class:`frozenset` type." +msgstr "这是一个 :c:type:`PyTypeObject` 实例,表示 Python :class:`frozenset` 类型。" + +#: ../../c-api/set.rst:49 +msgid "" +"The following type check macros work on pointers to any Python object. " +"Likewise, the constructor functions work with any iterable Python object." +msgstr "下列类型检查宏适用于指向任意 Python 对象的指针。 类似地,这些构造函数也适用于任意可迭代的 Python 对象。" + +#: ../../c-api/set.rst:55 +msgid "" +"Return true if *p* is a :class:`set` object or an instance of a subtype. " +"This function always succeeds." +msgstr "如果 *p* 是一个 :class:`set` 对象或者是其子类型的实例则返回真值。 此函数总是会成功执行。" + +#: ../../c-api/set.rst:60 +msgid "" +"Return true if *p* is a :class:`frozenset` object or an instance of a " +"subtype. This function always succeeds." +msgstr "如果 *p* 是一个 :class:`frozenset` 对象或者是其子类型的实例则返回真值。 此函数总是会成功执行。" + +#: ../../c-api/set.rst:65 +msgid "" +"Return true if *p* is a :class:`set` object, a :class:`frozenset` object, or" +" an instance of a subtype. This function always succeeds." +msgstr "" +"如果 *p* 是一个 :class:`set` 对象、:class:`frozenset` 对象或者是其子类型的实例则返回真值。 此函数总是会成功执行。" + +#: ../../c-api/set.rst:71 +msgid "" +"Return true if *p* is a :class:`set` object or a :class:`frozenset` object " +"but not an instance of a subtype. This function always succeeds." +msgstr "" +"如果 *p* 是一个 :class:`set` 或 :class:`frozenset` 对象但不是其子类型的实例则返回真值。 此函数总是会成功执行。" + +#: ../../c-api/set.rst:77 +msgid "" +"Return true if *p* is a :class:`frozenset` object but not an instance of a " +"subtype. This function always succeeds." +msgstr "如果 *p* 是一个 :class:`frozenset` 对象但不是其子类型的实例则返回真值。 此函数总是会成功执行。" + +#: ../../c-api/set.rst:83 +msgid "" +"Return a new :class:`set` containing objects returned by the *iterable*. " +"The *iterable* may be ``NULL`` to create a new empty set. Return the new " +"set on success or ``NULL`` on failure. Raise :exc:`TypeError` if *iterable*" +" is not actually iterable. The constructor is also useful for copying a set" +" (``c=set(s)``)." +msgstr "" +"返回一个新的 :class:`set`,其中包含 *iterable* 所返回的对象。 *iterable* 可以为 ``NULL`` " +"表示创建一个新的空集合。 成功时返回新的集合,失败时返回 ``NULL``。 如果 *iterable* 实际上不是可迭代对象则引发 " +":exc:`TypeError`。 该构造器也适用于拷贝集合 (``c=set(s)``)。" + +#: ../../c-api/set.rst:92 +msgid "" +"Return a new :class:`frozenset` containing objects returned by the " +"*iterable*. The *iterable* may be ``NULL`` to create a new empty frozenset." +" Return the new set on success or ``NULL`` on failure. Raise " +":exc:`TypeError` if *iterable* is not actually iterable." +msgstr "" +"返回一个新的 :class:`frozenset`,其中包含 *iterable* 所返回的对象。 *iterable* 可以为 ``NULL`` " +"表示创建一个新的空冻结集合。 成功时返回新的冻结集合,失败时返回 ``NULL``。 如果 *iterable* 实际上不是可迭代对象则引发 " +":exc:`TypeError`。" + +#: ../../c-api/set.rst:98 +msgid "" +"The following functions and macros are available for instances of " +":class:`set` or :class:`frozenset` or instances of their subtypes." +msgstr "下列函数和宏适用于 :class:`set` 或 :class:`frozenset` 的实例或是其子类型的实例。" + +#: ../../c-api/set.rst:106 +msgid "" +"Return the length of a :class:`set` or :class:`frozenset` object. Equivalent" +" to ``len(anyset)``. Raises a :exc:`PyExc_SystemError` if *anyset* is not a" +" :class:`set`, :class:`frozenset`, or an instance of a subtype." +msgstr "" +"返回 :class:`set` 或 :class:`frozenset` 对象的长度。 等价于 ``len(anyset)``。 如果 *anyset*" +" 不是 :class:`set`, :class:`frozenset` 或其子类型的实例则会引发 :exc:`PyExc_SystemError`。" + +#: ../../c-api/set.rst:113 +msgid "Macro form of :c:func:`PySet_Size` without error checking." +msgstr "宏版本的 :c:func:`PySet_Size`,不带错误检测。" + +#: ../../c-api/set.rst:118 +msgid "" +"Return ``1`` if found, ``0`` if not found, and ``-1`` if an error is " +"encountered. Unlike the Python :meth:`__contains__` method, this function " +"does not automatically convert unhashable sets into temporary frozensets. " +"Raise a :exc:`TypeError` if the *key* is unhashable. Raise " +":exc:`PyExc_SystemError` if *anyset* is not a :class:`set`, " +":class:`frozenset`, or an instance of a subtype." +msgstr "" +"如果找到返回 ``1``,如果未找到返回 ``0``,如果遇到错误则返回 ``-1``。 不同于 Python :meth:`__contains__`" +" 方法,此函数不会自动将不可哈希的集合转换为临时的冻结集合。 如果 *key* 为不可哈希对象则会引发 :exc:`TypeError`。 如果 " +"*anyset* 不是 :class:`set`, :class:`frozenset` 或其子类型的实例则会引发 " +":exc:`PyExc_SystemError`。" + +#: ../../c-api/set.rst:127 +msgid "" +"Add *key* to a :class:`set` instance. Also works with :class:`frozenset` " +"instances (like :c:func:`PyTuple_SetItem` it can be used to fill in the " +"values of brand new frozensets before they are exposed to other code). " +"Return ``0`` on success or ``-1`` on failure. Raise a :exc:`TypeError` if " +"the *key* is unhashable. Raise a :exc:`MemoryError` if there is no room to " +"grow. Raise a :exc:`SystemError` if *set* is not an instance of " +":class:`set` or its subtype." +msgstr "" +"添加 *key* 到一个 :class:`set` 实例。 也可用于 :class:`frozenset` 实例(与 " +":c:func:`PyTuple_SetItem` 的类似之处是它也可被用来为全新的冻结集合在公开给其他代码之前填充全新的值)。 成功时返回 ``0``" +" 而失败时返回 ``-1``。 如果 *key* 为不可哈希对象则会引发 :exc:`TypeError`。 如果没有增长空间则会引发 " +":exc:`MemoryError`。 如果 *set* 不是 :class:`set` 或其子类型的实例则会引发 " +":exc:`SystemError`。" + +#: ../../c-api/set.rst:136 +msgid "" +"The following functions are available for instances of :class:`set` or its " +"subtypes but not for instances of :class:`frozenset` or its subtypes." +msgstr "下列函数适用于 :class:`set` 或其子类型的实例,但不可用于 :class:`frozenset` 或其子类型的实例。" + +#: ../../c-api/set.rst:142 +msgid "" +"Return ``1`` if found and removed, ``0`` if not found (no action taken), and" +" ``-1`` if an error is encountered. Does not raise :exc:`KeyError` for " +"missing keys. Raise a :exc:`TypeError` if the *key* is unhashable. Unlike " +"the Python :meth:`~set.discard` method, this function does not automatically" +" convert unhashable sets into temporary frozensets. Raise " +":exc:`PyExc_SystemError` if *set* is not an instance of :class:`set` or its " +"subtype." +msgstr "" +"如果找到并移除返回 ``1``,如果未找到(无操作)返回 ``0``,如果遇到错误则返回 ``-1``。 对于不存在的键不会引发 " +":exc:`KeyError`。 如果 *key* 为不可哈希对象则会引发 :exc:`TypeError`。 不同于 Python " +":meth:`~set.discard` 方法,此函数不会自动将不可哈希的集合转换为临时的冻结集合。 如果 *set* 不是 :class:`set` " +"或其子类型的实例则会引发 :exc:`PyExc_SystemError`。" + +#: ../../c-api/set.rst:152 +msgid "" +"Return a new reference to an arbitrary object in the *set*, and removes the " +"object from the *set*. Return ``NULL`` on failure. Raise :exc:`KeyError` " +"if the set is empty. Raise a :exc:`SystemError` if *set* is not an instance " +"of :class:`set` or its subtype." +msgstr "" +"返回 *set* 中任意对象的新引用,并从 *set* 中移除该对象。 失败时返回 ``NULL``。 如果集合为空则会引发 " +":exc:`KeyError`。 如果 *set* 不是 :class:`set` 或其子类型的实例则会引发 :exc:`SystemError`。" + +#: ../../c-api/set.rst:160 +msgid "Empty an existing set of all elements." +msgstr "清空现有字典的所有键值对。" diff --git a/c-api/slice.po b/c-api/slice.po new file mode 100644 index 000000000..71db6cf4d --- /dev/null +++ b/c-api/slice.po @@ -0,0 +1,170 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) 2001-2022, Python Software Foundation +# This file is distributed under the same license as the Python package. +# FIRST AUTHOR , YEAR. +# +# Translators: +# Kunkgg , 2019 +# Freesand Leo , 2021 +# +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: Python 3.9\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2022-11-04 14:34+0000\n" +"PO-Revision-Date: 2017-02-16 17:38+0000\n" +"Last-Translator: Freesand Leo , 2021\n" +"Language-Team: Chinese (China) (https://www.transifex.com/python-doc/teams/5390/zh_CN/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: zh_CN\n" +"Plural-Forms: nplurals=1; plural=0;\n" + +#: ../../c-api/slice.rst:6 +msgid "Slice Objects" +msgstr "切片对象" + +#: ../../c-api/slice.rst:11 +msgid "" +"The type object for slice objects. This is the same as :class:`slice` in " +"the Python layer." +msgstr "切片对象的类型对象。 它与 Python 层面的 :class:`slice` 是相同的对象。" + +#: ../../c-api/slice.rst:17 +msgid "" +"Return true if *ob* is a slice object; *ob* must not be ``NULL``. This " +"function always succeeds." +msgstr "如果 *ob* 是一个 slice 对象则返回真值;*ob* 必须不为 ``NULL``。 此函数总是会成功执行。" + +#: ../../c-api/slice.rst:23 +msgid "" +"Return a new slice object with the given values. The *start*, *stop*, and " +"*step* parameters are used as the values of the slice object attributes of " +"the same names. Any of the values may be ``NULL``, in which case the " +"``None`` will be used for the corresponding attribute. Return ``NULL`` if " +"the new object could not be allocated." +msgstr "" +"返回一个具有给定值的新切片对象。 *start*, *stop* 和 *step* 形参会被用作 slice 对象相应名称的属性的值。 " +"这些值中的任何一个都可以为 ``NULL``,在这种情况下将使用 ``None`` 作为对应属性的值。 如果新对象无法被分配则返回 ``NULL``。" + +#: ../../c-api/slice.rst:32 +msgid "" +"Retrieve the start, stop and step indices from the slice object *slice*, " +"assuming a sequence of length *length*. Treats indices greater than *length*" +" as errors." +msgstr "" +"从切片对象 *slice* 提取 start, stop 和 step 索引号,将序列长度视为 *length*。 大于 *length* " +"的序列号将被当作错误。" + +#: ../../c-api/slice.rst:36 +msgid "" +"Returns ``0`` on success and ``-1`` on error with no exception set (unless " +"one of the indices was not :const:`None` and failed to be converted to an " +"integer, in which case ``-1`` is returned with an exception set)." +msgstr "" +"成功时返回 ``0``,出错时返回 ``-1`` 并且不设置异常(除非某个序列号不为 :const:`None` 且无法被转换为整数,在这种情况下会返回" +" ``-1`` 并且设置一个异常)。" + +#: ../../c-api/slice.rst:40 +msgid "You probably do not want to use this function." +msgstr "你可能不会打算使用此函数。" + +#: ../../c-api/slice.rst:42 ../../c-api/slice.rst:73 +msgid "" +"The parameter type for the *slice* parameter was ``PySliceObject*`` before." +msgstr "之前 *slice* 形参的形参类型是 ``PySliceObject*``。" + +#: ../../c-api/slice.rst:49 +msgid "" +"Usable replacement for :c:func:`PySlice_GetIndices`. Retrieve the start, " +"stop, and step indices from the slice object *slice* assuming a sequence of " +"length *length*, and store the length of the slice in *slicelength*. Out of" +" bounds indices are clipped in a manner consistent with the handling of " +"normal slices." +msgstr "" +":c:func:`PySlice_GetIndices` 的可用替代。 从切片对象 *slice* 提取 start, stop 和 step " +"索引号,将序列长度视为 *length*,并将切片的长度保存在 *slicelength* 中,超出范围的索引号会以与普通切片一致的方式进行剪切。" + +#: ../../c-api/slice.rst:55 +msgid "Returns ``0`` on success and ``-1`` on error with exception set." +msgstr "成功时返回 ``0``,出错时返回 ``-1`` 并且不设置异常。" + +#: ../../c-api/slice.rst:58 +msgid "" +"This function is considered not safe for resizable sequences. Its invocation" +" should be replaced by a combination of :c:func:`PySlice_Unpack` and " +":c:func:`PySlice_AdjustIndices` where ::" +msgstr "" +"此函数对于可变大小序列来说是不安全的。 对它的调用应被替换为 :c:func:`PySlice_Unpack` 和 " +":c:func:`PySlice_AdjustIndices` 的组合,其中 ::" + +#: ../../c-api/slice.rst:66 +msgid "is replaced by ::" +msgstr "会被替换为 ::" + +#: ../../c-api/slice.rst:77 +msgid "" +"If ``Py_LIMITED_API`` is not set or set to the value between ``0x03050400`` " +"and ``0x03060000`` (not including) or ``0x03060100`` or higher " +":c:func:`!PySlice_GetIndicesEx` is implemented as a macro using " +":c:func:`!PySlice_Unpack` and :c:func:`!PySlice_AdjustIndices`. Arguments " +"*start*, *stop* and *step* are evaluated more than once." +msgstr "" +"如果 ``Py_LIMITED_API`` 未设置或设置为 ``0x03050400`` 与 ``0x03060000`` 之间的值(不包括边界)或 " +"``0x03060100`` 或更大则 :c:func:`!PySlice_GetIndicesEx` 会被实现为一个使用 " +":c:func:`!PySlice_Unpack` 和 :c:func:`!PySlice_AdjustIndices` 的宏。 参数 *start*," +" *stop* 和 *step* 会被多被求值。" + +#: ../../c-api/slice.rst:84 +msgid "" +"If ``Py_LIMITED_API`` is set to the value less than ``0x03050400`` or " +"between ``0x03060000`` and ``0x03060100`` (not including) " +":c:func:`!PySlice_GetIndicesEx` is a deprecated function." +msgstr "" +"如果 ``Py_LIMITED_API`` 设置为小于 ``0x03050400`` 或 ``0x03060000`` 与 ``0x03060100``" +" 之间的值(不包括边界)则 :c:func:`!PySlice_GetIndicesEx` 为已弃用的函数。" + +#: ../../c-api/slice.rst:92 +msgid "" +"Extract the start, stop and step data members from a slice object as C " +"integers. Silently reduce values larger than ``PY_SSIZE_T_MAX`` to " +"``PY_SSIZE_T_MAX``, silently boost the start and stop values less than " +"``PY_SSIZE_T_MIN`` to ``PY_SSIZE_T_MIN``, and silently boost the step values" +" less than ``-PY_SSIZE_T_MAX`` to ``-PY_SSIZE_T_MAX``." +msgstr "" +"从切片对象中将 start, stop 和 step 数据成员提取为 C 整数。 会静默地将大于 ``PY_SSIZE_T_MAX`` 的值减小为 " +"``PY_SSIZE_T_MAX``,静默地将小于 ``PY_SSIZE_T_MIN`` 的 start 和 stop 值增大为 " +"``PY_SSIZE_T_MIN``,并静默地将小于 ``-PY_SSIZE_T_MAX`` 的 step 值增大为 " +"``-PY_SSIZE_T_MAX``。" + +#: ../../c-api/slice.rst:98 +msgid "Return ``-1`` on error, ``0`` on success." +msgstr "出错时返回 ``-1``,成功时返回 ``0``。" + +#: ../../c-api/slice.rst:105 +msgid "" +"Adjust start/end slice indices assuming a sequence of the specified length. " +"Out of bounds indices are clipped in a manner consistent with the handling " +"of normal slices." +msgstr "将 start/end 切片索引号根据指定的序列长度进行调整。 超出范围的索引号会以与普通切片一致的方式进行剪切。" + +#: ../../c-api/slice.rst:109 +msgid "" +"Return the length of the slice. Always successful. Doesn't call Python " +"code." +msgstr "返回切片的长度。 此操作总是会成功。 不会调用 Python 代码。" + +#: ../../c-api/slice.rst:116 +msgid "Ellipsis Object" +msgstr "Ellipsis 对象" + +#: ../../c-api/slice.rst:121 +msgid "" +"The Python ``Ellipsis`` object. This object has no methods. It needs to be" +" treated just like any other object with respect to reference counts. Like " +":c:data:`Py_None` it is a singleton object." +msgstr "" +"Python 的 ``Ellipsis`` 对象。 该对象没有任何方法。 它必须以与任何其他对象一样的方式遵循引用计数。 它与 " +":c:data:`Py_None` 一样属于单例对象。" diff --git a/c-api/stable.po b/c-api/stable.po new file mode 100644 index 000000000..1e0c0f8a2 --- /dev/null +++ b/c-api/stable.po @@ -0,0 +1,85 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) 2001-2022, Python Software Foundation +# This file is distributed under the same license as the Python package. +# FIRST AUTHOR , YEAR. +# +# Translators: +# Shengjing Zhu , 2019 +# ppcfish , 2019 +# +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: Python 3.9\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2022-11-04 14:34+0000\n" +"PO-Revision-Date: 2017-02-16 17:39+0000\n" +"Last-Translator: ppcfish , 2019\n" +"Language-Team: Chinese (China) (https://www.transifex.com/python-doc/teams/5390/zh_CN/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: zh_CN\n" +"Plural-Forms: nplurals=1; plural=0;\n" + +#: ../../c-api/stable.rst:7 +msgid "Stable Application Binary Interface" +msgstr "稳定的应用程序二进制接口" + +#: ../../c-api/stable.rst:9 +msgid "" +"Traditionally, the C API of Python will change with every release. Most " +"changes will be source-compatible, typically by only adding API, rather than" +" changing existing API or removing API (although some interfaces do get " +"removed after being deprecated first)." +msgstr "" +"传统上,Python的C " +"API将随每个版本而变化。大多数更改都与源代码兼容,通常只添加API,而不是更改现有API或删除API(尽管某些接口会首先弃用然后再删除)。" + +#: ../../c-api/stable.rst:14 +msgid "" +"Unfortunately, the API compatibility does not extend to binary compatibility" +" (the ABI). The reason is primarily the evolution of struct definitions, " +"where addition of a new field, or changing the type of a field, might not " +"break the API, but can break the ABI. As a consequence, extension modules " +"need to be recompiled for every Python release (although an exception is " +"possible on Unix when none of the affected interfaces are used). In " +"addition, on Windows, extension modules link with a specific pythonXY.dll " +"and need to be recompiled to link with a newer one." +msgstr "" +"不幸的是,API兼容性没有扩展到二进制兼容性(ABI)。原因主要是结构定义的演变,在这里添加新字段或更改字段类型可能不会破坏API,但可能会破坏ABI。因此,每个Python版本都需要重新编译扩展模块(即使在未使用任何受影响的接口的情况下,Unix上也可能会出现异常)。此外,在Windows上,扩展模块与特定的pythonXY.dll链接,需要重新编译才能与新的pythonXY.dll链接。" + +#: ../../c-api/stable.rst:23 +msgid "" +"Since Python 3.2, a subset of the API has been declared to guarantee a " +"stable ABI. Extension modules wishing to use this API (called \"limited " +"API\") need to define ``Py_LIMITED_API``. A number of interpreter details " +"then become hidden from the extension module; in return, a module is built " +"that works on any 3.x version (x>=2) without recompilation." +msgstr "" +"从Python3.2起,已经声明了一个API的子集,以确保稳定的ABI。如果使用此API(也被称为“受限API”)的扩展模块需要定义``Py_LIMITED_API``。许多解释器细节将从扩展模块中隐藏;" +" 反过来,在任何3.x版本(x>=2)上构建的模块都不需要重新编译" + +#: ../../c-api/stable.rst:29 +msgid "" +"In some cases, the stable ABI needs to be extended with new functions. " +"Extension modules wishing to use these new APIs need to set " +"``Py_LIMITED_API`` to the ``PY_VERSION_HEX`` value (see " +":ref:`apiabiversion`) of the minimum Python version they want to support " +"(e.g. ``0x03030000`` for Python 3.3). Such modules will work on all " +"subsequent Python releases, but fail to load (because of missing symbols) on" +" the older releases." +msgstr "" +"在某些情况下,需要添加新函数来扩展稳定版 ABI。希望使用这些新 API 的扩展模块需要将 ``Py_LIMITED_API`` " +"设置为他们想要支持的最低 Python 版本的 ``PY_VERSION_HEX`` 值(例如: Python 3.3 为 " +"``0x03030000``)(参见 :ref:`apiabiversion`)。此类模块将适用于所有后续 " +"Python版本,但无法在旧版本上加载(因为缺少符号)。" + +#: ../../c-api/stable.rst:36 +msgid "" +"As of Python 3.2, the set of functions available to the limited API is " +"documented in :pep:`384`. In the C API documentation, API elements that are" +" not part of the limited API are marked as \"Not part of the limited API.\"" +msgstr "" +"从Python 3.2开始,受限API可用的函数集记录在 :pep:`384` 。在C API文档中,不属于受限API的API元素标记为 " +"“不属于受限API” 。" diff --git a/c-api/structures.po b/c-api/structures.po new file mode 100644 index 000000000..345fb62d3 --- /dev/null +++ b/c-api/structures.po @@ -0,0 +1,709 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) 2001-2022, Python Software Foundation +# This file is distributed under the same license as the Python package. +# FIRST AUTHOR , YEAR. +# +# Translators: +# 操旭 , 2017 +# Madlee , 2018 +# Iterator , 2019 +# ppcfish , 2019 +# Fw[a]rd , 2021 +# Dai Xu , 2022 +# Freesand Leo , 2022 +# +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: Python 3.9\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2022-11-04 14:34+0000\n" +"PO-Revision-Date: 2017-02-16 17:39+0000\n" +"Last-Translator: Freesand Leo , 2022\n" +"Language-Team: Chinese (China) (https://www.transifex.com/python-doc/teams/5390/zh_CN/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: zh_CN\n" +"Plural-Forms: nplurals=1; plural=0;\n" + +#: ../../c-api/structures.rst:6 +msgid "Common Object Structures" +msgstr "公用对象的结构" + +#: ../../c-api/structures.rst:8 +msgid "" +"There are a large number of structures which are used in the definition of " +"object types for Python. This section describes these structures and how " +"they are used." +msgstr "大量的结构体被用于定义Python的对象类型。这一节描述了这些的结构体和它们的使用方法。" + +#: ../../c-api/structures.rst:14 +msgid "Base object types and macros" +msgstr "基本的对象类型和宏" + +#: ../../c-api/structures.rst:16 +msgid "" +"All Python objects ultimately share a small number of fields at the " +"beginning of the object's representation in memory. These are represented " +"by the :c:type:`PyObject` and :c:type:`PyVarObject` types, which are " +"defined, in turn, by the expansions of some macros also used, whether " +"directly or indirectly, in the definition of all other Python objects." +msgstr "" +"所有的 Python 对象都在对象的内存表示的开始部分共享少量的字段。 这些字段用 :c:type:`PyObject` 或 " +":c:type:`PyVarObject` 类型来表示,这些类型又由一些宏定义,这些宏也直接或间接地用于所有其他 Python 对象的定义。" + +#: ../../c-api/structures.rst:25 +msgid "" +"All object types are extensions of this type. This is a type which contains" +" the information Python needs to treat a pointer to an object as an object." +" In a normal \"release\" build, it contains only the object's reference " +"count and a pointer to the corresponding type object. Nothing is actually " +"declared to be a :c:type:`PyObject`, but every pointer to a Python object " +"can be cast to a :c:type:`PyObject*`. Access to the members must be done by" +" using the macros :c:macro:`Py_REFCNT` and :c:macro:`Py_TYPE`." +msgstr "" + +#: ../../c-api/structures.rst:37 +msgid "" +"This is an extension of :c:type:`PyObject` that adds the :attr:`ob_size` " +"field. This is only used for objects that have some notion of *length*. " +"This type does not often appear in the Python/C API. Access to the members " +"must be done by using the macros :c:macro:`Py_REFCNT`, :c:macro:`Py_TYPE`, " +"and :c:macro:`Py_SIZE`." +msgstr "" + +#: ../../c-api/structures.rst:46 +msgid "" +"This is a macro used when declaring new types which represent objects " +"without a varying length. The PyObject_HEAD macro expands to::" +msgstr "" + +#: ../../c-api/structures.rst:51 +msgid "See documentation of :c:type:`PyObject` above." +msgstr "" + +#: ../../c-api/structures.rst:56 +msgid "" +"This is a macro used when declaring new types which represent objects with a" +" length that varies from instance to instance. The PyObject_VAR_HEAD macro " +"expands to::" +msgstr "" + +#: ../../c-api/structures.rst:62 +msgid "See documentation of :c:type:`PyVarObject` above." +msgstr "参见上面 :c:type:`PyVarObject` 的文档。" + +#: ../../c-api/structures.rst:67 +msgid "" +"This macro is used to access the :attr:`ob_type` member of a Python object. " +"It expands to::" +msgstr "" + +#: ../../c-api/structures.rst:75 +msgid "" +"Return non-zero if the object *o* type is *type*. Return zero otherwise. " +"Equivalent to: ``Py_TYPE(o) == type``." +msgstr "" + +#: ../../c-api/structures.rst:83 +msgid "Set the object *o* type to *type*." +msgstr "" + +#: ../../c-api/structures.rst:90 +msgid "" +"This macro is used to access the :attr:`ob_refcnt` member of a Python " +"object. It expands to::" +msgstr "" + +#: ../../c-api/structures.rst:99 +msgid "Set the object *o* reference counter to *refcnt*." +msgstr "" + +#: ../../c-api/structures.rst:106 +msgid "" +"This macro is used to access the :attr:`ob_size` member of a Python object. " +"It expands to::" +msgstr "" + +#: ../../c-api/structures.rst:114 +msgid "Set the object *o* size to *size*." +msgstr "" + +#: ../../c-api/structures.rst:121 +msgid "" +"This is a macro which expands to initialization values for a new " +":c:type:`PyObject` type. This macro expands to::" +msgstr "" + +#: ../../c-api/structures.rst:130 +msgid "" +"This is a macro which expands to initialization values for a new " +":c:type:`PyVarObject` type, including the :attr:`ob_size` field. This macro " +"expands to::" +msgstr "" + +#: ../../c-api/structures.rst:139 +msgid "Implementing functions and methods" +msgstr "" + +#: ../../c-api/structures.rst:143 +msgid "" +"Type of the functions used to implement most Python callables in C. " +"Functions of this type take two :c:type:`PyObject*` parameters and return " +"one such value. If the return value is ``NULL``, an exception shall have " +"been set. If not ``NULL``, the return value is interpreted as the return " +"value of the function as exposed in Python. The function must return a new " +"reference." +msgstr "" + +#: ../../c-api/structures.rst:150 +msgid "The function signature is::" +msgstr "" + +#: ../../c-api/structures.rst:157 +msgid "" +"Type of the functions used to implement Python callables in C with signature" +" :const:`METH_VARARGS | METH_KEYWORDS`. The function signature is::" +msgstr "" + +#: ../../c-api/structures.rst:168 +msgid "" +"Type of the functions used to implement Python callables in C with signature" +" :const:`METH_FASTCALL`. The function signature is::" +msgstr "" + +#: ../../c-api/structures.rst:178 +msgid "" +"Type of the functions used to implement Python callables in C with signature" +" :const:`METH_FASTCALL | METH_KEYWORDS`. The function signature is::" +msgstr "" + +#: ../../c-api/structures.rst:189 +msgid "" +"Type of the functions used to implement Python callables in C with signature" +" :const:`METH_METHOD | METH_FASTCALL | METH_KEYWORDS`. The function " +"signature is::" +msgstr "" + +#: ../../c-api/structures.rst:204 +msgid "" +"Structure used to describe a method of an extension type. This structure " +"has four fields:" +msgstr "" + +#: ../../c-api/structures.rst:208 ../../c-api/structures.rst:364 +#: ../../c-api/structures.rst:460 +msgid "Field" +msgstr "域" + +#: ../../c-api/structures.rst:208 ../../c-api/structures.rst:364 +#: ../../c-api/structures.rst:460 +msgid "C Type" +msgstr "C 类型" + +#: ../../c-api/structures.rst:208 ../../c-api/structures.rst:364 +#: ../../c-api/structures.rst:460 +msgid "Meaning" +msgstr "意义" + +#: ../../c-api/structures.rst:210 +msgid ":attr:`ml_name`" +msgstr ":attr:`ml_name`" + +#: ../../c-api/structures.rst:210 ../../c-api/structures.rst:218 +#: ../../c-api/structures.rst:366 ../../c-api/structures.rst:379 +#: ../../c-api/structures.rst:395 ../../c-api/structures.rst:462 +#: ../../c-api/structures.rst:470 +msgid "const char \\*" +msgstr "" + +#: ../../c-api/structures.rst:210 +msgid "name of the method" +msgstr "" + +#: ../../c-api/structures.rst:212 +msgid ":attr:`ml_meth`" +msgstr ":attr:`ml_meth`" + +#: ../../c-api/structures.rst:212 +msgid "PyCFunction" +msgstr "" + +#: ../../c-api/structures.rst:212 +msgid "pointer to the C implementation" +msgstr "" + +#: ../../c-api/structures.rst:215 +msgid ":attr:`ml_flags`" +msgstr "" + +#: ../../c-api/structures.rst:215 ../../c-api/structures.rst:368 +#: ../../c-api/structures.rst:375 ../../c-api/structures.rst:391 +msgid "int" +msgstr "int" + +#: ../../c-api/structures.rst:215 +msgid "flag bits indicating how the call should be constructed" +msgstr "" + +#: ../../c-api/structures.rst:218 +msgid ":attr:`ml_doc`" +msgstr ":attr:`ml_doc`" + +#: ../../c-api/structures.rst:218 ../../c-api/structures.rst:379 +msgid "points to the contents of the docstring" +msgstr "" + +#: ../../c-api/structures.rst:222 +msgid "" +"The :attr:`ml_meth` is a C function pointer. The functions may be of " +"different types, but they always return :c:type:`PyObject*`. If the " +"function is not of the :c:type:`PyCFunction`, the compiler will require a " +"cast in the method table. Even though :c:type:`PyCFunction` defines the " +"first parameter as :c:type:`PyObject*`, it is common that the method " +"implementation uses the specific C type of the *self* object." +msgstr "" + +#: ../../c-api/structures.rst:229 +msgid "" +"The :attr:`ml_flags` field is a bitfield which can include the following " +"flags. The individual flags indicate either a calling convention or a " +"binding convention." +msgstr "" + +#: ../../c-api/structures.rst:233 +msgid "There are these calling conventions:" +msgstr "" + +#: ../../c-api/structures.rst:237 +msgid "" +"This is the typical calling convention, where the methods have the type " +":c:type:`PyCFunction`. The function expects two :c:type:`PyObject*` values. " +"The first one is the *self* object for methods; for module functions, it is " +"the module object. The second parameter (often called *args*) is a tuple " +"object representing all arguments. This parameter is typically processed " +"using :c:func:`PyArg_ParseTuple` or :c:func:`PyArg_UnpackTuple`." +msgstr "" + +#: ../../c-api/structures.rst:247 +msgid "" +"Methods with these flags must be of type :c:type:`PyCFunctionWithKeywords`. " +"The function expects three parameters: *self*, *args*, *kwargs* where " +"*kwargs* is a dictionary of all the keyword arguments or possibly ``NULL`` " +"if there are no keyword arguments. The parameters are typically processed " +"using :c:func:`PyArg_ParseTupleAndKeywords`." +msgstr "" + +#: ../../c-api/structures.rst:256 +msgid "" +"Fast calling convention supporting only positional arguments. The methods " +"have the type :c:type:`_PyCFunctionFast`. The first parameter is *self*, the" +" second parameter is a C array of :c:type:`PyObject*` values indicating the " +"arguments and the third parameter is the number of arguments (the length of " +"the array)." +msgstr "" + +#: ../../c-api/structures.rst:262 ../../c-api/structures.rst:279 +msgid "This is not part of the :ref:`limited API `." +msgstr "" + +#: ../../c-api/structures.rst:269 +msgid "" +"Extension of :const:`METH_FASTCALL` supporting also keyword arguments, with " +"methods of type :c:type:`_PyCFunctionFastWithKeywords`. Keyword arguments " +"are passed the same way as in the :ref:`vectorcall protocol `: " +"there is an additional fourth :c:type:`PyObject*` parameter which is a tuple" +" representing the names of the keyword arguments (which are guaranteed to be" +" strings) or possibly ``NULL`` if there are no keywords. The values of the " +"keyword arguments are stored in the *args* array, after the positional " +"arguments." +msgstr "" + +#: ../../c-api/structures.rst:286 +msgid "" +"Extension of :const:`METH_FASTCALL | METH_KEYWORDS` supporting the *defining" +" class*, that is, the class that contains the method in question. The " +"defining class might be a superclass of ``Py_TYPE(self)``." +msgstr "" + +#: ../../c-api/structures.rst:290 +msgid "" +"The method needs to be of type :c:type:`PyCMethod`, the same as for " +"``METH_FASTCALL | METH_KEYWORDS`` with ``defining_class`` argument added " +"after ``self``." +msgstr "" + +#: ../../c-api/structures.rst:299 +msgid "" +"Methods without parameters don't need to check whether arguments are given " +"if they are listed with the :const:`METH_NOARGS` flag. They need to be of " +"type :c:type:`PyCFunction`. The first parameter is typically named *self* " +"and will hold a reference to the module or object instance. In all cases " +"the second parameter will be ``NULL``." +msgstr "" + +#: ../../c-api/structures.rst:308 +msgid "" +"Methods with a single object argument can be listed with the :const:`METH_O`" +" flag, instead of invoking :c:func:`PyArg_ParseTuple` with a ``\"O\"`` " +"argument. They have the type :c:type:`PyCFunction`, with the *self* " +"parameter, and a :c:type:`PyObject*` parameter representing the single " +"argument." +msgstr "" + +#: ../../c-api/structures.rst:314 +msgid "" +"These two constants are not used to indicate the calling convention but the " +"binding when use with methods of classes. These may not be used for " +"functions defined for modules. At most one of these flags may be set for " +"any given method." +msgstr "" + +#: ../../c-api/structures.rst:324 +msgid "" +"The method will be passed the type object as the first parameter rather than" +" an instance of the type. This is used to create *class methods*, similar " +"to what is created when using the :func:`classmethod` built-in function." +msgstr "" + +#: ../../c-api/structures.rst:334 +msgid "" +"The method will be passed ``NULL`` as the first parameter rather than an " +"instance of the type. This is used to create *static methods*, similar to " +"what is created when using the :func:`staticmethod` built-in function." +msgstr "" + +#: ../../c-api/structures.rst:338 +msgid "" +"One other constant controls whether a method is loaded in place of another " +"definition with the same method name." +msgstr "" + +#: ../../c-api/structures.rst:344 +msgid "" +"The method will be loaded in place of existing definitions. Without " +"*METH_COEXIST*, the default is to skip repeated definitions. Since slot " +"wrappers are loaded before the method table, the existence of a " +"*sq_contains* slot, for example, would generate a wrapped method named " +":meth:`__contains__` and preclude the loading of a corresponding PyCFunction" +" with the same name. With the flag defined, the PyCFunction will be loaded " +"in place of the wrapper object and will co-exist with the slot. This is " +"helpful because calls to PyCFunctions are optimized more than wrapper object" +" calls." +msgstr "" + +#: ../../c-api/structures.rst:356 +msgid "Accessing attributes of extension types" +msgstr "" + +#: ../../c-api/structures.rst:360 +msgid "" +"Structure which describes an attribute of a type which corresponds to a C " +"struct member. Its fields are:" +msgstr "" + +#: ../../c-api/structures.rst:366 +msgid ":attr:`name`" +msgstr ":attr:`name`" + +#: ../../c-api/structures.rst:366 +msgid "name of the member" +msgstr "" + +#: ../../c-api/structures.rst:368 +msgid ":attr:`!type`" +msgstr "" + +#: ../../c-api/structures.rst:368 +msgid "the type of the member in the C struct" +msgstr "" + +#: ../../c-api/structures.rst:371 +msgid ":attr:`offset`" +msgstr ":attr:`offset`" + +#: ../../c-api/structures.rst:371 ../../c-api/structures.rst:407 +msgid "Py_ssize_t" +msgstr "Py_ssize_t" + +#: ../../c-api/structures.rst:371 +msgid "" +"the offset in bytes that the member is located on the type's object struct" +msgstr "" + +#: ../../c-api/structures.rst:375 +msgid ":attr:`flags`" +msgstr ":attr:`flags`" + +#: ../../c-api/structures.rst:375 +msgid "flag bits indicating if the field should be read-only or writable" +msgstr "" + +#: ../../c-api/structures.rst:379 +msgid ":attr:`doc`" +msgstr ":attr:`doc`" + +#: ../../c-api/structures.rst:383 +msgid "" +":attr:`!type` can be one of many ``T_`` macros corresponding to various C " +"types. When the member is accessed in Python, it will be converted to the " +"equivalent Python type." +msgstr "" + +#: ../../c-api/structures.rst:388 +msgid "Macro name" +msgstr "" + +#: ../../c-api/structures.rst:388 +msgid "C type" +msgstr "C数据类型" + +#: ../../c-api/structures.rst:390 +msgid "T_SHORT" +msgstr "T_SHORT" + +#: ../../c-api/structures.rst:390 +msgid "short" +msgstr "short" + +#: ../../c-api/structures.rst:391 +msgid "T_INT" +msgstr "T_INT" + +#: ../../c-api/structures.rst:392 +msgid "T_LONG" +msgstr "T_LONG" + +#: ../../c-api/structures.rst:392 +msgid "long" +msgstr "长整型" + +#: ../../c-api/structures.rst:393 +msgid "T_FLOAT" +msgstr "T_FLOAT" + +#: ../../c-api/structures.rst:393 +msgid "float" +msgstr "float" + +#: ../../c-api/structures.rst:394 +msgid "T_DOUBLE" +msgstr "T_DOUBLE" + +#: ../../c-api/structures.rst:394 +msgid "double" +msgstr "double" + +#: ../../c-api/structures.rst:395 +msgid "T_STRING" +msgstr "T_STRING" + +#: ../../c-api/structures.rst:396 +msgid "T_OBJECT" +msgstr "T_OBJECT" + +#: ../../c-api/structures.rst:396 ../../c-api/structures.rst:397 +msgid "PyObject \\*" +msgstr "" + +#: ../../c-api/structures.rst:397 +msgid "T_OBJECT_EX" +msgstr "T_OBJECT_EX" + +#: ../../c-api/structures.rst:398 +msgid "T_CHAR" +msgstr "T_CHAR" + +#: ../../c-api/structures.rst:398 ../../c-api/structures.rst:399 +#: ../../c-api/structures.rst:404 +msgid "char" +msgstr "字符" + +#: ../../c-api/structures.rst:399 +msgid "T_BYTE" +msgstr "T_BYTE" + +#: ../../c-api/structures.rst:400 +msgid "T_UBYTE" +msgstr "T_UBYTE" + +#: ../../c-api/structures.rst:400 +msgid "unsigned char" +msgstr "unsigned char" + +#: ../../c-api/structures.rst:401 +msgid "T_UINT" +msgstr "T_UINT" + +#: ../../c-api/structures.rst:401 +msgid "unsigned int" +msgstr "无符号整型" + +#: ../../c-api/structures.rst:402 +msgid "T_USHORT" +msgstr "T_USHORT" + +#: ../../c-api/structures.rst:402 +msgid "unsigned short" +msgstr "unsigned short" + +#: ../../c-api/structures.rst:403 +msgid "T_ULONG" +msgstr "T_ULONG" + +#: ../../c-api/structures.rst:403 +msgid "unsigned long" +msgstr "无符号长整型" + +#: ../../c-api/structures.rst:404 +msgid "T_BOOL" +msgstr "" + +#: ../../c-api/structures.rst:405 +msgid "T_LONGLONG" +msgstr "T_LONGLONG" + +#: ../../c-api/structures.rst:405 +msgid "long long" +msgstr "long long" + +#: ../../c-api/structures.rst:406 +msgid "T_ULONGLONG" +msgstr "T_ULONGLONG" + +#: ../../c-api/structures.rst:406 +msgid "unsigned long long" +msgstr "无符号 long long" + +#: ../../c-api/structures.rst:407 +msgid "T_PYSSIZET" +msgstr "T_PYSSIZET" + +#: ../../c-api/structures.rst:410 +msgid "" +":c:macro:`T_OBJECT` and :c:macro:`T_OBJECT_EX` differ in that " +":c:macro:`T_OBJECT` returns ``None`` if the member is ``NULL`` and " +":c:macro:`T_OBJECT_EX` raises an :exc:`AttributeError`. Try to use " +":c:macro:`T_OBJECT_EX` over :c:macro:`T_OBJECT` because " +":c:macro:`T_OBJECT_EX` handles use of the :keyword:`del` statement on that " +"attribute more correctly than :c:macro:`T_OBJECT`." +msgstr "" + +#: ../../c-api/structures.rst:417 +msgid "" +":attr:`flags` can be ``0`` for write and read access or :c:macro:`READONLY` " +"for read-only access. Using :c:macro:`T_STRING` for :attr:`type` implies " +":c:macro:`READONLY`. :c:macro:`T_STRING` data is interpreted as UTF-8. Only" +" :c:macro:`T_OBJECT` and :c:macro:`T_OBJECT_EX` members can be deleted. " +"(They are set to ``NULL``)." +msgstr "" + +#: ../../c-api/structures.rst:425 +msgid "" +"Heap allocated types (created using :c:func:`PyType_FromSpec` or similar), " +"``PyMemberDef`` may contain definitions for the special members " +"``__dictoffset__``, ``__weaklistoffset__`` and ``__vectorcalloffset__``, " +"corresponding to :c:member:`~PyTypeObject.tp_dictoffset`, " +":c:member:`~PyTypeObject.tp_weaklistoffset` and " +":c:member:`~PyTypeObject.tp_vectorcall_offset` in type objects. These must " +"be defined with ``T_PYSSIZET`` and ``READONLY``, for example::" +msgstr "" + +#: ../../c-api/structures.rst:442 +msgid "" +"Get an attribute belonging to the object at address *obj_addr*. The " +"attribute is described by ``PyMemberDef`` *m*. Returns ``NULL`` on error." +msgstr "" + +#: ../../c-api/structures.rst:449 +msgid "" +"Set an attribute belonging to the object at address *obj_addr* to object " +"*o*. The attribute to set is described by ``PyMemberDef`` *m*. Returns " +"``0`` if successful and a negative value on failure." +msgstr "" + +#: ../../c-api/structures.rst:456 +msgid "" +"Structure to define property-like access for a type. See also description of" +" the :c:member:`PyTypeObject.tp_getset` slot." +msgstr "" + +#: ../../c-api/structures.rst:462 +msgid "name" +msgstr "name" + +#: ../../c-api/structures.rst:462 +msgid "attribute name" +msgstr "" + +#: ../../c-api/structures.rst:464 +msgid "get" +msgstr "" + +#: ../../c-api/structures.rst:464 +msgid "getter" +msgstr "" + +#: ../../c-api/structures.rst:464 +msgid "C function to get the attribute" +msgstr "" + +#: ../../c-api/structures.rst:466 +msgid "set" +msgstr "" + +#: ../../c-api/structures.rst:466 +msgid "setter" +msgstr "" + +#: ../../c-api/structures.rst:466 +msgid "" +"optional C function to set or delete the attribute, if omitted the attribute" +" is readonly" +msgstr "" + +#: ../../c-api/structures.rst:470 +msgid "doc" +msgstr "" + +#: ../../c-api/structures.rst:470 +msgid "optional docstring" +msgstr "" + +#: ../../c-api/structures.rst:472 +msgid "closure" +msgstr "" + +#: ../../c-api/structures.rst:472 +msgid "void \\*" +msgstr "" + +#: ../../c-api/structures.rst:472 +msgid "" +"optional function pointer, providing additional data for getter and setter" +msgstr "" + +#: ../../c-api/structures.rst:477 +msgid "" +"The ``get`` function takes one :c:type:`PyObject*` parameter (the instance) " +"and a function pointer (the associated ``closure``)::" +msgstr "" + +#: ../../c-api/structures.rst:482 +msgid "" +"It should return a new reference on success or ``NULL`` with a set exception" +" on failure." +msgstr "" + +#: ../../c-api/structures.rst:485 +msgid "" +"``set`` functions take two :c:type:`PyObject*` parameters (the instance and " +"the value to be set) and a function pointer (the associated ``closure``)::" +msgstr "" + +#: ../../c-api/structures.rst:490 +msgid "" +"In case the attribute should be deleted the second parameter is ``NULL``. " +"Should return ``0`` on success or ``-1`` with a set exception on failure." +msgstr "" diff --git a/c-api/sys.po b/c-api/sys.po new file mode 100644 index 000000000..5368ad26b --- /dev/null +++ b/c-api/sys.po @@ -0,0 +1,600 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) 2001-2024, Python Software Foundation +# This file is distributed under the same license as the Python package. +# FIRST AUTHOR , YEAR. +# +# Translators: +# ppcfish , 2019 +# Rafael Fontenelle , 2023 +# Freesand Leo , 2024 +# +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: Python 3.9\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2024-11-12 10:57+0000\n" +"PO-Revision-Date: 2017-02-16 17:39+0000\n" +"Last-Translator: Freesand Leo , 2024\n" +"Language-Team: Chinese (China) (https://app.transifex.com/python-doc/teams/5390/zh_CN/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: zh_CN\n" +"Plural-Forms: nplurals=1; plural=0;\n" + +#: ../../c-api/sys.rst:6 +msgid "Operating System Utilities" +msgstr "操作系统实用工具" + +#: ../../c-api/sys.rst:10 +msgid "" +"Return the file system representation for *path*. If the object is a " +":class:`str` or :class:`bytes` object, then its reference count is " +"incremented. If the object implements the :class:`os.PathLike` interface, " +"then :meth:`~os.PathLike.__fspath__` is returned as long as it is a " +":class:`str` or :class:`bytes` object. Otherwise :exc:`TypeError` is raised " +"and ``NULL`` is returned." +msgstr "" +"返回 *path* 在文件系统中的表示形式。 如果该对象是一个 :class:`str` 或 :class:`bytes` " +"对象,则它的引用计数将会增加。 如果该对象实现了 :class:`os.PathLike` 接口,则只要它是一个 :class:`str` 或 " +":class:`bytes` 对象就将返回 :meth:`~os.PathLike.__fspath__`。 在其他情况下将引发 " +":exc:`TypeError` 并返回 ``NULL``。" + +#: ../../c-api/sys.rst:22 +msgid "" +"Return true (nonzero) if the standard I/O file *fp* with name *filename* is " +"deemed interactive. This is the case for files for which " +"``isatty(fileno(fp))`` is true. If the global flag " +":c:data:`Py_InteractiveFlag` is true, this function also returns true if the" +" *filename* pointer is ``NULL`` or if the name is equal to one of the " +"strings ``''`` or ``'???'``." +msgstr "" +"如果名称为 *filename* 的标准 I/O 文件 *fp* 被确认为可交互的则返回真(非零)值。 ``isatty(fileno(fp))`` " +"为真值的文件均属于这种情况。 如果全局旗标 :c:data:`Py_InteractiveFlag` 为真值,此函数在 *filename* 指针为 " +"``NULL`` 或者其名称等于字符串 ``''`` 或 ``'???'`` 时也将返回真值。" + +#: ../../c-api/sys.rst:31 +msgid "" +"Function to prepare some internal state before a process fork. This should " +"be called before calling :c:func:`fork` or any similar function that clones " +"the current process. Only available on systems where :c:func:`fork` is " +"defined." +msgstr "" +"在进程分叉之前准备某些内部状态的函数。 此函数应当在调用 :c:func:`fork` 或者任何类似的克隆当前进程的函数之前被调用。 只适用于定义了 " +":c:func:`fork` 的系统。" + +#: ../../c-api/sys.rst:37 +msgid "" +"The C :c:func:`fork` call should only be made from the :ref:`\"main\" thread" +" ` (of the :ref:`\"main\" interpreter `). The same is true for ``PyOS_BeforeFork()``." +msgstr "" +"C :c:func:`fork` 调用应当只在 :ref:`\"main\" 线程 ` (位于 " +":ref:`\"main\" 解释器 `) 中进行。 对于 ``PyOS_BeforeFork()``" +" 来说也是如此。" + +#: ../../c-api/sys.rst:47 +msgid "" +"Function to update some internal state after a process fork. This should be" +" called from the parent process after calling :c:func:`fork` or any similar " +"function that clones the current process, regardless of whether process " +"cloning was successful. Only available on systems where :c:func:`fork` is " +"defined." +msgstr "" +"在进程分叉之后更新某些内部状态的函数。 此函数应当在调用 :c:func:`fork` 或任何类似的克隆当前进程的函数之后被调用,无论进程克隆是否成功。" +" 只适用于定义了 :c:func:`fork` 的系统。" + +#: ../../c-api/sys.rst:54 +msgid "" +"The C :c:func:`fork` call should only be made from the :ref:`\"main\" thread" +" ` (of the :ref:`\"main\" interpreter `). The same is true for ``PyOS_AfterFork_Parent()``." +msgstr "" +"C :c:func:`fork` 调用应当只在 :ref:`\"main\" 线程 ` (位于 " +":ref:`\"main\" 解释器 `) 中进行。 对于 " +"``PyOS_AfterFork_Parent()`` 来说也是如此。" + +#: ../../c-api/sys.rst:64 +msgid "" +"Function to update internal interpreter state after a process fork. This " +"must be called from the child process after calling :c:func:`fork`, or any " +"similar function that clones the current process, if there is any chance the" +" process will call back into the Python interpreter. Only available on " +"systems where :c:func:`fork` is defined." +msgstr "" +"在进程分叉之后更新内部解释器状态的函数。 此函数必须在调用 :c:func:`fork` " +"或任何类似的克隆当前进程的函数之后在子进程中被调用,如果该进程有机会回调到 Python 解释器的话。 只适用于定义了 :c:func:`fork` " +"的系统。" + +#: ../../c-api/sys.rst:71 +msgid "" +"The C :c:func:`fork` call should only be made from the :ref:`\"main\" thread" +" ` (of the :ref:`\"main\" interpreter `). The same is true for ``PyOS_AfterFork_Child()``." +msgstr "" +"C :c:func:`fork` 调用应当只在 :ref:`\"main\" 线程 ` (位于 " +":ref:`\"main\" 解释器 `) 中进行。 对于 " +"``PyOS_AfterFork_Child()`` 来说也是如此。" + +#: ../../c-api/sys.rst:79 +msgid "" +":func:`os.register_at_fork` allows registering custom Python functions to be" +" called by :c:func:`PyOS_BeforeFork()`, :c:func:`PyOS_AfterFork_Parent` and" +" :c:func:`PyOS_AfterFork_Child`." +msgstr "" +":func:`os.register_at_fork` 允许注册可被 :c:func:`PyOS_BeforeFork()`, " +":c:func:`PyOS_AfterFork_Parent` 和 :c:func:`PyOS_AfterFork_Child` 调用的自定义 " +"Python 函数。" + +#: ../../c-api/sys.rst:86 +msgid "" +"Function to update some internal state after a process fork; this should be " +"called in the new process if the Python interpreter will continue to be " +"used. If a new executable is loaded into the new process, this function does" +" not need to be called." +msgstr "" +"在进程分叉之后更新某些内部状态的函数;如果要继续使用 Python 解释器则此函数应当在新进程中被调用。 " +"如果已将一个新的可执行文件载入到新进程中,则不需要调用此函数。" + +#: ../../c-api/sys.rst:91 +msgid "This function is superseded by :c:func:`PyOS_AfterFork_Child()`." +msgstr "此函数已被 :c:func:`PyOS_AfterFork_Child()` 取代。" + +#: ../../c-api/sys.rst:97 +msgid "" +"Return true when the interpreter runs out of stack space. This is a " +"reliable check, but is only available when :const:`USE_STACKCHECK` is " +"defined (currently on Windows using the Microsoft Visual C++ compiler). " +":const:`USE_STACKCHECK` will be defined automatically; you should never " +"change the definition in your own code." +msgstr "" +"当解释器的栈空间耗尽时返回真值。 这是一个可靠的检查,但仅在定义了 :const:`USE_STACKCHECK` 时可用(目前在 Windows " +"上使用 Microsoft Visual C++ 编译器)。 :const:`USE_STACKCHECK` " +"将被自动定义;你绝不应该在你自己的代码中改变此定义。" + +#: ../../c-api/sys.rst:106 +msgid "" +"Return the current signal handler for signal *i*. This is a thin wrapper " +"around either :c:func:`sigaction` or :c:func:`signal`. Do not call those " +"functions directly! :c:type:`PyOS_sighandler_t` is a typedef alias for " +":c:type:`void (\\*)(int)`." +msgstr "" +"返回当前用于信号 *i* 的信号处理器。 这是一个对 :c:func:`sigaction` 或 :c:func:`signal` 简单包装器。 " +"请不要直接调用那两个函数! :c:type:`PyOS_sighandler_t` 是对应于 :c:type:`void (\\*)(int)` 的 " +"typedef 别名。" + +#: ../../c-api/sys.rst:114 +msgid "" +"Set the signal handler for signal *i* to be *h*; return the old signal " +"handler. This is a thin wrapper around either :c:func:`sigaction` or " +":c:func:`signal`. Do not call those functions directly! " +":c:type:`PyOS_sighandler_t` is a typedef alias for :c:type:`void " +"(\\*)(int)`." +msgstr "" +"将用于信号 *i* 的信号处理器设为 *h*;返回旧的信号处理器。 这是一个对 :c:func:`sigaction` 或 " +":c:func:`signal` 的简单包装器。 请不要直接调用那两个函数! :c:type:`PyOS_sighandler_t` 是对应于 " +":c:type:`void (\\*)(int)` 的 typedef 别名。" + +#: ../../c-api/sys.rst:121 +msgid "" +"Decode a byte string from the locale encoding with the :ref:`surrogateescape" +" error handler `: undecodable bytes are decoded as " +"characters in range U+DC80..U+DCFF. If a byte sequence can be decoded as a " +"surrogate character, escape the bytes using the surrogateescape error " +"handler instead of decoding them." +msgstr "" + +#: ../../c-api/sys.rst:127 ../../c-api/sys.rst:173 +msgid "Encoding, highest priority to lowest priority:" +msgstr "" + +#: ../../c-api/sys.rst:129 ../../c-api/sys.rst:175 +msgid "``UTF-8`` on macOS, Android, and VxWorks;" +msgstr "" + +#: ../../c-api/sys.rst:130 ../../c-api/sys.rst:176 +msgid "" +"``UTF-8`` on Windows if :c:data:`Py_LegacyWindowsFSEncodingFlag` is zero;" +msgstr "" + +#: ../../c-api/sys.rst:131 ../../c-api/sys.rst:177 +msgid "``UTF-8`` if the Python UTF-8 mode is enabled;" +msgstr "" + +#: ../../c-api/sys.rst:132 ../../c-api/sys.rst:178 +msgid "" +"``ASCII`` if the ``LC_CTYPE`` locale is ``\"C\"``, ``nl_langinfo(CODESET)`` " +"returns the ``ASCII`` encoding (or an alias), and :c:func:`mbstowcs` and " +":c:func:`wcstombs` functions uses the ``ISO-8859-1`` encoding." +msgstr "" + +#: ../../c-api/sys.rst:136 ../../c-api/sys.rst:182 +msgid "the current locale encoding." +msgstr "" + +#: ../../c-api/sys.rst:138 +msgid "" +"Return a pointer to a newly allocated wide character string, use " +":c:func:`PyMem_RawFree` to free the memory. If size is not ``NULL``, write " +"the number of wide characters excluding the null character into ``*size``" +msgstr "" +"返回一个指向新分配的由宽字符组成的字符串的指针,使用 :c:func:`PyMem_RawFree` 来释放内存。 如果 size 不为 " +"``NULL``,则将排除了 null 字符的宽字符数量写入到 ``*size``" + +#: ../../c-api/sys.rst:142 +msgid "" +"Return ``NULL`` on decoding error or memory allocation error. If *size* is " +"not ``NULL``, ``*size`` is set to ``(size_t)-1`` on memory error or set to " +"``(size_t)-2`` on decoding error." +msgstr "" +"在解码错误或内存分配错误时返回 ``NULL``。 如果 *size* 不为 ``NULL``,则 ``*size`` 将在内存错误时设为 " +"``(size_t)-1`` 或在解码错误时设为 ``(size_t)-2``。" + +#: ../../c-api/sys.rst:146 +msgid "" +"Decoding errors should never happen, unless there is a bug in the C library." +msgstr "解码错误绝对不应当发生,除非 C 库有程序缺陷。" + +#: ../../c-api/sys.rst:149 +msgid "" +"Use the :c:func:`Py_EncodeLocale` function to encode the character string " +"back to a byte string." +msgstr "请使用 :c:func:`Py_EncodeLocale` 函数来将字符串编码回字节串。" + +#: ../../c-api/sys.rst:154 +msgid "" +"The :c:func:`PyUnicode_DecodeFSDefaultAndSize` and " +":c:func:`PyUnicode_DecodeLocaleAndSize` functions." +msgstr "" +":c:func:`PyUnicode_DecodeFSDefaultAndSize` 和 " +":c:func:`PyUnicode_DecodeLocaleAndSize` 函数。" + +#: ../../c-api/sys.rst:159 ../../c-api/sys.rst:203 +msgid "The function now uses the UTF-8 encoding in the UTF-8 mode." +msgstr "" + +#: ../../c-api/sys.rst:162 +msgid "" +"The function now uses the UTF-8 encoding on Windows if " +":c:data:`Py_LegacyWindowsFSEncodingFlag` is zero;" +msgstr "" +"现在如果在 Windows 上 :c:data:`Py_LegacyWindowsFSEncodingFlag` 为零则此函数将使用 UTF-8 " +"编码格式;" + +#: ../../c-api/sys.rst:169 +msgid "" +"Encode a wide character string to the locale encoding with the " +":ref:`surrogateescape error handler `: surrogate characters" +" in the range U+DC80..U+DCFF are converted to bytes 0x80..0xFF." +msgstr "" + +#: ../../c-api/sys.rst:184 +msgid "The function uses the UTF-8 encoding in the Python UTF-8 mode." +msgstr "" + +#: ../../c-api/sys.rst:186 +msgid "" +"Return a pointer to a newly allocated byte string, use :c:func:`PyMem_Free` " +"to free the memory. Return ``NULL`` on encoding error or memory allocation " +"error." +msgstr "" +"返回一个指向新分配的字节串的指针,使用 :c:func:`PyMem_Free` 来释放内存。 当发生编码错误或内存分配错误时返回 ``NULL``。" + +#: ../../c-api/sys.rst:190 +msgid "" +"If error_pos is not ``NULL``, ``*error_pos`` is set to ``(size_t)-1`` on " +"success, or set to the index of the invalid character on encoding error." +msgstr "" +"如果 error_pos 不为 ``NULL``,则成功时会将 ``*error_pos`` 设为 " +"``(size_t)-1``,或是在发生编码错误时设为无效字符的索引号。" + +#: ../../c-api/sys.rst:193 +msgid "" +"Use the :c:func:`Py_DecodeLocale` function to decode the bytes string back " +"to a wide character string." +msgstr "请使用 :c:func:`Py_DecodeLocale` 函数来将字节串解码回由宽字符组成的字符串。" + +#: ../../c-api/sys.rst:198 +msgid "" +"The :c:func:`PyUnicode_EncodeFSDefault` and :c:func:`PyUnicode_EncodeLocale`" +" functions." +msgstr "" +":c:func:`PyUnicode_EncodeFSDefault` 和 :c:func:`PyUnicode_EncodeLocale` 函数。" + +#: ../../c-api/sys.rst:206 +msgid "" +"The function now uses the UTF-8 encoding on Windows if " +":c:data:`Py_LegacyWindowsFSEncodingFlag` is zero." +msgstr "" +"现在如果在 Windows 上 :c:data:`Py_LegacyWindowsFSEncodingFlag` 为零则此函数将使用 UTF-8 " +"编码格式。" + +#: ../../c-api/sys.rst:214 +msgid "System Functions" +msgstr "系统功能" + +#: ../../c-api/sys.rst:216 +msgid "" +"These are utility functions that make functionality from the :mod:`sys` " +"module accessible to C code. They all work with the current interpreter " +"thread's :mod:`sys` module's dict, which is contained in the internal thread" +" state structure." +msgstr "" +"这些是使来自 :mod:`sys` 模块的功能可以让 C 代码访问的工具函数。 它们都可用于当前解释器线程的 :mod:`sys` " +"模块的字典,该字典包含在内部线程状态结构体中。" + +#: ../../c-api/sys.rst:222 +msgid "" +"Return the object *name* from the :mod:`sys` module or ``NULL`` if it does " +"not exist, without setting an exception." +msgstr "返回来自 :mod:`sys` 模块的对象 *name* 或者如果它不存在则返回 ``NULL``,并且不会设置异常。" + +#: ../../c-api/sys.rst:227 +msgid "" +"Set *name* in the :mod:`sys` module to *v* unless *v* is ``NULL``, in which " +"case *name* is deleted from the sys module. Returns ``0`` on success, ``-1``" +" on error." +msgstr "" +"将 :mod:`sys` 模块中的 *name* 设为 *v* 除非 *v* 为 ``NULL``,在此情况下 *name* 将从 sys " +"模块中被删除。 成功时返回 ``0``,发生错误时返回 ``-1``。" + +#: ../../c-api/sys.rst:233 +msgid "" +"Reset :data:`sys.warnoptions` to an empty list. This function may be called " +"prior to :c:func:`Py_Initialize`." +msgstr "" +"将 :data:`sys.warnoptions` 重置为空列表。 此函数可在 :c:func:`Py_Initialize` 之前被调用。" + +#: ../../c-api/sys.rst:238 +msgid "" +"Append *s* to :data:`sys.warnoptions`. This function must be called prior to" +" :c:func:`Py_Initialize` in order to affect the warnings filter list." +msgstr "" +"将 *s* 添加到 :data:`sys.warnoptions`。 此函数必须在 :c:func:`Py_Initialize` " +"之前被调用以便影响警告过滤器列表。" + +#: ../../c-api/sys.rst:243 +msgid "Append *unicode* to :data:`sys.warnoptions`." +msgstr "将 *unicode* 添加到 :data:`sys.warnoptions`。" + +#: ../../c-api/sys.rst:245 +msgid "" +"Note: this function is not currently usable from outside the CPython " +"implementation, as it must be called prior to the implicit import of " +":mod:`warnings` in :c:func:`Py_Initialize` to be effective, but can't be " +"called until enough of the runtime has been initialized to permit the " +"creation of Unicode objects." +msgstr "" +"注意:目前此函数不可在 CPython 实现之外使用,因为它必须在 :c:func:`Py_Initialize` 中的 :mod:`warnings`" +" 显式导入之前被调用,但是要等运行时已初始化到足以允许创建 Unicode 对象时才能被调用。" + +#: ../../c-api/sys.rst:253 +msgid "" +"Set :data:`sys.path` to a list object of paths found in *path* which should " +"be a list of paths separated with the platform's search path delimiter " +"(``:`` on Unix, ``;`` on Windows)." +msgstr "" +"将 :data:`sys.path` 设为由在 *path* 中找到的路径组成的列表对象,该参数应为使用特定平台的搜索路径分隔符 (在 Unix 上为 " +"``:``,在 Windows 上为 ``;``) 分隔的路径的列表。" + +#: ../../c-api/sys.rst:259 +msgid "" +"Write the output string described by *format* to :data:`sys.stdout`. No " +"exceptions are raised, even if truncation occurs (see below)." +msgstr "将以 *format* 描述的输出字符串写入到 :data:`sys.stdout`。 不会引发任何异常,即使发生了截断(见下文)。" + +#: ../../c-api/sys.rst:262 +msgid "" +"*format* should limit the total size of the formatted output string to 1000 " +"bytes or less -- after 1000 bytes, the output string is truncated. In " +"particular, this means that no unrestricted \"%s\" formats should occur; " +"these should be limited using \"%.s\" where is a decimal number " +"calculated so that plus the maximum size of other formatted text does " +"not exceed 1000 bytes. Also watch out for \"%f\", which can print hundreds " +"of digits for very large numbers." +msgstr "" +"*format* 应当将已格式化的输出字符串的总大小限制在 1000 字节以下 -- 超过 1000 字节后,输出字符串会被截断。 " +"特别地,这意味着不应出现不受限制的 \"%s\" 格式;它们应当使用 \"%.s\" 来限制,其中 是一个经计算使得 " +"与其他已格式化文本的最大尺寸之和不会超过 1000 字节的十进制数字。 还要注意 \"%f\",它可能为非常大的数字打印出数以百计的数位。" + +#: ../../c-api/sys.rst:270 +msgid "" +"If a problem occurs, or :data:`sys.stdout` is unset, the formatted message " +"is written to the real (C level) *stdout*." +msgstr "如果发生了错误,:data:`sys.stdout` 会被清空,已格式化的消息将被写入到真正的 (C 层级) *stdout*。" + +#: ../../c-api/sys.rst:275 +msgid "" +"As :c:func:`PySys_WriteStdout`, but write to :data:`sys.stderr` or *stderr* " +"instead." +msgstr "类似 :c:func:`PySys_WriteStdout`,但改为写入到 :data:`sys.stderr` 或 *stderr*。" + +#: ../../c-api/sys.rst:280 +msgid "" +"Function similar to PySys_WriteStdout() but format the message using " +":c:func:`PyUnicode_FromFormatV` and don't truncate the message to an " +"arbitrary length." +msgstr "" +"类似 PySys_WriteStdout() 的函数将会使用 :c:func:`PyUnicode_FromFormatV` " +"来格式化消息并且不会将消息截短至任意长度。" + +#: ../../c-api/sys.rst:288 +msgid "" +"As :c:func:`PySys_FormatStdout`, but write to :data:`sys.stderr` or *stderr*" +" instead." +msgstr "类似 :c:func:`PySys_FormatStdout`,但改为写入到 :data:`sys.stderr` 或 *stderr*。" + +#: ../../c-api/sys.rst:295 +msgid "" +"Parse *s* as a set of :option:`-X` options and add them to the current " +"options mapping as returned by :c:func:`PySys_GetXOptions`. This function " +"may be called prior to :c:func:`Py_Initialize`." +msgstr "" +"将 *s* 解析为一个由 :option:`-X` 选项组成的集合并将它们添加到 :c:func:`PySys_GetXOptions` " +"所返回的当前选项映射。 此函数可以在 :c:func:`Py_Initialize` 之前被调用。" + +#: ../../c-api/sys.rst:303 +msgid "" +"Return the current dictionary of :option:`-X` options, similarly to " +":data:`sys._xoptions`. On error, ``NULL`` is returned and an exception is " +"set." +msgstr "" +"返回当前 :option:`-X` 选项的字典,类似于 :data:`sys._xoptions`。 发生错误时,将返回 ``NULL`` " +"并设置一个异常。" + +#: ../../c-api/sys.rst:312 +msgid "" +"Raise an auditing event with any active hooks. Return zero for success and " +"non-zero with an exception set on failure." +msgstr "引发一个审计事件并附带任何激活的钩子。 成功时返回零值或在失败时返回非零值并设置一个异常。" + +#: ../../c-api/sys.rst:315 +msgid "" +"If any hooks have been added, *format* and other arguments will be used to " +"construct a tuple to pass. Apart from ``N``, the same format characters as " +"used in :c:func:`Py_BuildValue` are available. If the built value is not a " +"tuple, it will be added into a single-element tuple. (The ``N`` format " +"option consumes a reference, but since there is no way to know whether " +"arguments to this function will be consumed, using it may cause reference " +"leaks.)" +msgstr "" +"如果已添加了任何钩子,则将使用 *format* 和其他参数来构造一个用入传入的元组。 除 ``N`` 以外,在 " +":c:func:`Py_BuildValue` 中使用的格式字符均可使用。 如果构建的值不是一个元组,它将被添加到一个单元素元组中。 (格式选项 " +"``N`` 会消耗一个引用,但是由于没有办法知道此函数的参数是否将被消耗,因此使用它可能导致引用泄漏。)" + +#: ../../c-api/sys.rst:323 +msgid "" +"Note that ``#`` format characters should always be treated as " +":c:type:`Py_ssize_t`, regardless of whether ``PY_SSIZE_T_CLEAN`` was " +"defined." +msgstr "" +"请注意 ``#`` 格式字符应当总是被当作 :c:type:`Py_ssize_t` 来处理,无论是否定义了 ``PY_SSIZE_T_CLEAN``。" + +#: ../../c-api/sys.rst:326 +msgid ":func:`sys.audit` performs the same function from Python code." +msgstr ":func:`sys.audit` 会执行与来自 Python 代码的函数相同的操作。" + +#: ../../c-api/sys.rst:332 +msgid "" +"Require :c:type:`Py_ssize_t` for ``#`` format characters. Previously, an " +"unavoidable deprecation warning was raised." +msgstr "要求 :c:type:`Py_ssize_t` 用于 ``#`` 格式字符。 在此之前,会引发一个不可避免的弃用警告。" + +#: ../../c-api/sys.rst:338 +msgid "" +"Append the callable *hook* to the list of active auditing hooks. Return zero" +" on success and non-zero on failure. If the runtime has been initialized, " +"also set an error on failure. Hooks added through this API are called for " +"all interpreters created by the runtime." +msgstr "" +"将可调用对象 *hook* 添加到激活的审计钩子列表。 在成功时返回零而在失败时返回非零值。 如果运行时已经被初始化,还会在失败时设置一个错误。 通过此" +" API 添加的钩子会针对在运行时创建的所有解释器被调用。" + +#: ../../c-api/sys.rst:344 +msgid "" +"The *userData* pointer is passed into the hook function. Since hook " +"functions may be called from different runtimes, this pointer should not " +"refer directly to Python state." +msgstr "*userData* 指针会被传入钩子函数。 因于钩子函数可能由不同的运行时调用,该指针不应直接指向 Python 状态。" + +#: ../../c-api/sys.rst:348 +msgid "" +"This function is safe to call before :c:func:`Py_Initialize`. When called " +"after runtime initialization, existing audit hooks are notified and may " +"silently abort the operation by raising an error subclassed from " +":class:`Exception` (other errors will not be silenced)." +msgstr "" +"此函数可在 :c:func:`Py_Initialize` 之前被安全地调用。 " +"如果在运行时初始化之后被调用,现有的审计钩子将得到通知并可能通过引发一个从 :class:`Exception` " +"子类化的错误静默地放弃操作(其他错误将不会被静默)。" + +#: ../../c-api/sys.rst:353 +msgid "" +"The hook function is of type :c:type:`int (*)(const char *event, PyObject " +"*args, void *userData)`, where *args* is guaranteed to be a " +":c:type:`PyTupleObject`. The hook function is always called with the GIL " +"held by the Python interpreter that raised the event." +msgstr "" +"钩子函数的类型为 :c:type:`int (*)(const char *event, PyObject *args, void " +"*userData)`,其中 *args* 保证是一个 :c:type:`PyTupleObject`。 钩子函数调用时总是附带引发该事件的 " +"Python 解释器所持有的 GIL。" + +#: ../../c-api/sys.rst:358 +msgid "" +"See :pep:`578` for a detailed description of auditing. Functions in the " +"runtime and standard library that raise events are listed in the :ref:`audit" +" events table `. Details are in each function's documentation." +msgstr "" +"请参阅 :pep:`578` 了解有关审计的详细描述。 在运行时和标准库中会引发审计事件的函数清单见 :ref:`审计事件表 `。 更多细节见每个函数的文档。" + +#: ../../c-api/sys.rst:365 +msgid "" +"If the interpreter is initialized, this function raises a auditing event " +"``sys.addaudithook`` with no arguments. If any existing hooks raise an " +"exception derived from :class:`Exception`, the new hook will not be added " +"and the exception is cleared. As a result, callers cannot assume that their " +"hook has been added unless they control all existing hooks." +msgstr "" +"如果解释器已被初始化,此函数将引发审计事件 ``sys.addaudithook`` 且不附带任何参数。 如果有任何现存的钩子引发了一个派生自 " +":class:`Exception` 的异常,新的钩子将不会被添加且该异常会被清除。 " +"因此,调用方不可假定他们的钩子已被添加除非他们能控制所有现存的钩子。" + +#: ../../c-api/sys.rst:377 +msgid "Process Control" +msgstr "过程控制" + +#: ../../c-api/sys.rst:384 +msgid "" +"Print a fatal error message and kill the process. No cleanup is performed. " +"This function should only be invoked when a condition is detected that would" +" make it dangerous to continue using the Python interpreter; e.g., when the " +"object administration appears to be corrupted. On Unix, the standard C " +"library function :c:func:`abort` is called which will attempt to produce a " +":file:`core` file." +msgstr "" +"打印一个致命错误消息并杀掉进程。 不会执行任何清理。 此函数应当仅在检测到可能令继续使用 Python " +"解释器变得危险的条件时被发起调用;例如,当对象管理已被破坏的时候。 在 Unix 上,标准 C 库函数 :c:func:`abort` " +"会被调用并将由它来尝试产生一个 :file:`core` 文件。" + +#: ../../c-api/sys.rst:391 +msgid "" +"The ``Py_FatalError()`` function is replaced with a macro which logs " +"automatically the name of the current function, unless the " +"``Py_LIMITED_API`` macro is defined." +msgstr "" +" ``Py_FatalError()`` 函数会被替换为一个将自动记录当前函数名称的宏,除非定义了 ``Py_LIMITED_API`` 宏。" + +#: ../../c-api/sys.rst:395 +msgid "Log the function name automatically." +msgstr "自动记录函数名称。" + +#: ../../c-api/sys.rst:405 +msgid "" +"Exit the current process. This calls :c:func:`Py_FinalizeEx` and then calls" +" the standard C library function ``exit(status)``. If " +":c:func:`Py_FinalizeEx` indicates an error, the exit status is set to 120." +msgstr "" +"退出当前进程。 这将调用 :c:func:`Py_FinalizeEx` 然后再调用标准 C 库函数 ``exit(status)``。 如果 " +":c:func:`Py_FinalizeEx` 提示错误,退出状态将被设为 120。" + +#: ../../c-api/sys.rst:409 +msgid "Errors from finalization no longer ignored." +msgstr "来自最终化的错误不会再被忽略。" + +#: ../../c-api/sys.rst:419 +msgid "" +"Register a cleanup function to be called by :c:func:`Py_FinalizeEx`. The " +"cleanup function will be called with no arguments and should return no " +"value. At most 32 cleanup functions can be registered. When the " +"registration is successful, :c:func:`Py_AtExit` returns ``0``; on failure, " +"it returns ``-1``. The cleanup function registered last is called first. " +"Each cleanup function will be called at most once. Since Python's internal " +"finalization will have completed before the cleanup function, no Python APIs" +" should be called by *func*." +msgstr "" +"注册一个由 :c:func:`Py_FinalizeEx` 调用的清理函数。 调用清理函数将不传入任何参数且不应返回任何值。 最多可以注册32 " +"个清理函数。 当注册成功时,:c:func:`Py_AtExit` 将返回 ``0``;失败时,它将返回 ``-1``。 " +"最后注册的清理函数会最先被调用。 每个清理函数将至多被调用一次。 由于 Python 的内部最终化将在清理函数之前完成,因此 Python API " +"不应被 *func* 调用。" diff --git a/c-api/tuple.po b/c-api/tuple.po new file mode 100644 index 000000000..1f15642cb --- /dev/null +++ b/c-api/tuple.po @@ -0,0 +1,308 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) 2001-2022, Python Software Foundation +# This file is distributed under the same license as the Python package. +# FIRST AUTHOR , YEAR. +# +# Translators: +# 操旭 , 2017 +# dykai , 2019 +# ppcfish , 2019 +# 伟 裴 , 2020 +# Freesand Leo , 2021 +# +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: Python 3.9\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2022-11-04 14:34+0000\n" +"PO-Revision-Date: 2017-02-16 17:39+0000\n" +"Last-Translator: Freesand Leo , 2021\n" +"Language-Team: Chinese (China) (https://www.transifex.com/python-doc/teams/5390/zh_CN/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: zh_CN\n" +"Plural-Forms: nplurals=1; plural=0;\n" + +#: ../../c-api/tuple.rst:6 +msgid "Tuple Objects" +msgstr "元组对象" + +#: ../../c-api/tuple.rst:13 +msgid "This subtype of :c:type:`PyObject` represents a Python tuple object." +msgstr "这个 :c:type:`PyObject` 的子类型代表一个 Python 的元组对象。" + +#: ../../c-api/tuple.rst:18 +msgid "" +"This instance of :c:type:`PyTypeObject` represents the Python tuple type; it" +" is the same object as :class:`tuple` in the Python layer." +msgstr "" +":c:type:`PyTypeObject` 的实例代表一个 Python 元组类型,这与 Python 层面的 :class:`tuple` " +"是相同的对象。" + +#: ../../c-api/tuple.rst:24 +msgid "" +"Return true if *p* is a tuple object or an instance of a subtype of the " +"tuple type. This function always succeeds." +msgstr "如果 *p* 是一个 tuple 对象或者 tuple 类型的子类型的实例则返回真值。 此函数总是会成功执行。" + +#: ../../c-api/tuple.rst:30 +msgid "" +"Return true if *p* is a tuple object, but not an instance of a subtype of " +"the tuple type. This function always succeeds." +msgstr "如果 *p* 是一个 tuple 对象但不是 tuple 类型的子类型的实例则返回真值。 此函数总是会成功执行。" + +#: ../../c-api/tuple.rst:36 +msgid "Return a new tuple object of size *len*, or ``NULL`` on failure." +msgstr "成功时返回一个新的元组对象,长度为 *len*,失败时返回``NULL``。" + +#: ../../c-api/tuple.rst:41 +msgid "" +"Return a new tuple object of size *n*, or ``NULL`` on failure. The tuple " +"values are initialized to the subsequent *n* C arguments pointing to Python " +"objects. ``PyTuple_Pack(2, a, b)`` is equivalent to " +"``Py_BuildValue(\"(OO)\", a, b)``." +msgstr "" +"成功时返回一个新的元组对象,大小为 *n* ,失败时返回 ``NULL``。 元组值初始化为指向 Python 对象的后续 *n* 个 C 参数。 " +"``PyTuple_Pack(2, a, b)`` 和 ``Py_BuildValue(\"(OO)\", a, b)`` 相等。" + +#: ../../c-api/tuple.rst:48 +msgid "Take a pointer to a tuple object, and return the size of that tuple." +msgstr "获取指向元组对象的指针,并返回该元组的大小。" + +#: ../../c-api/tuple.rst:53 +msgid "" +"Return the size of the tuple *p*, which must be non-``NULL`` and point to a " +"tuple; no error checking is performed." +msgstr "返回元组 *p* 的大小,它必须为非 ``NULL`` 并且指向一个元组;不执行错误检查。" + +#: ../../c-api/tuple.rst:59 +msgid "" +"Return the object at position *pos* in the tuple pointed to by *p*. If " +"*pos* is out of bounds, return ``NULL`` and set an :exc:`IndexError` " +"exception." +msgstr "" +"返回 *p* 所指向的元组中,位于 *pos* 处的对象。 如果 *pos* 超出界限,返回 ``NULL``,并抛出一个 " +":exc:`IndexError` 异常。" + +#: ../../c-api/tuple.rst:65 +msgid "Like :c:func:`PyTuple_GetItem`, but does no checking of its arguments." +msgstr "类似于 :c:func:`PyTuple_GetItem`,但不检查其参数。" + +#: ../../c-api/tuple.rst:70 +msgid "" +"Return the slice of the tuple pointed to by *p* between *low* and *high*, or" +" ``NULL`` on failure. This is the equivalent of the Python expression " +"``p[low:high]``. Indexing from the end of the list is not supported." +msgstr "" +"返回 *p* 所指向的元组的切片,在 *low* 和 *high* 之间,或者在失败时返回 ``NULL``。 这等同于 Python 表达式 " +"``p[low:high]``。 不支持从列表末尾索引。" + +#: ../../c-api/tuple.rst:77 +msgid "" +"Insert a reference to object *o* at position *pos* of the tuple pointed to " +"by *p*. Return ``0`` on success. If *pos* is out of bounds, return ``-1`` " +"and set an :exc:`IndexError` exception." +msgstr "" +"在 *p* 指向的元组的 *pos* 位置插入对对象 *o* 的引用。 成功时返回 ``0``;如果 *pos* 越界,则返回 ``-1``,并抛出一个" +" :exc:`IndexError` 异常。" + +#: ../../c-api/tuple.rst:83 +msgid "" +"This function \"steals\" a reference to *o* and discards a reference to an " +"item already in the tuple at the affected position." +msgstr "此函数会“窃取”对 *o* 的引用,并丢弃对元组中已在受影响位置的条目的引用。" + +#: ../../c-api/tuple.rst:89 +msgid "" +"Like :c:func:`PyTuple_SetItem`, but does no error checking, and should " +"*only* be used to fill in brand new tuples." +msgstr "类似于 :c:func:`PyTuple_SetItem`,但不进行错误检查,并且应该 *只是* 被用来填充全新的元组。" + +#: ../../c-api/tuple.rst:94 +msgid "" +"This macro \"steals\" a reference to *o*, and, unlike " +":c:func:`PyTuple_SetItem`, does *not* discard a reference to any item that " +"is being replaced; any reference in the tuple at position *pos* will be " +"leaked." +msgstr "" +"这个宏会“偷走”一个对 *o* 的引用,但与 :c:func:`PyTuple_SetItem` 不同,它 *不会* " +"丢弃对任何被替换项的引用;元组中位于 *pos* 位置的任何引用都将被泄漏。" + +#: ../../c-api/tuple.rst:102 +msgid "" +"Can be used to resize a tuple. *newsize* will be the new length of the " +"tuple. Because tuples are *supposed* to be immutable, this should only be " +"used if there is only one reference to the object. Do *not* use this if the" +" tuple may already be known to some other part of the code. The tuple will " +"always grow or shrink at the end. Think of this as destroying the old tuple" +" and creating a new one, only more efficiently. Returns ``0`` on success. " +"Client code should never assume that the resulting value of ``*p`` will be " +"the same as before calling this function. If the object referenced by ``*p``" +" is replaced, the original ``*p`` is destroyed. On failure, returns ``-1`` " +"and sets ``*p`` to ``NULL``, and raises :exc:`MemoryError` or " +":exc:`SystemError`." +msgstr "" +"可以用于调整元组的大小。 *newsize* 将是元组的新长度。 因为元组 *被认为* 是不可变的,所以只有在对象仅有一个引用时,才应该使用它。 " +"如果元组已经被代码的其他部分所引用,请不要使用此项。 元组在最后总是会增长或缩小。 把它看作是销毁旧元组并创建一个新元组,只会更有效。 成功时返回 " +"``0`` 。 客户端代码不应假定 ``*p`` 的结果值将与调用此函数之前的值相同。 如果替换了 ``*p`` 引用的对象,则原始的 ``*p`` " +"将被销毁。 失败时,返回``-1``,将 ``*p`` 设置为 ``NULL``,并引发 :exc:`MemoryError` 或者 " +":exc:`SystemError`。" + +#: ../../c-api/tuple.rst:115 +msgid "Struct Sequence Objects" +msgstr "结构序列对象" + +#: ../../c-api/tuple.rst:117 +msgid "" +"Struct sequence objects are the C equivalent of " +":func:`~collections.namedtuple` objects, i.e. a sequence whose items can " +"also be accessed through attributes. To create a struct sequence, you first " +"have to create a specific struct sequence type." +msgstr "" +"结构序列对象是等价于 :func:`~collections.namedtuple` 的 C 对象,即一个序列,其中的条目也可以通过属性访问。 " +"要创建结构序列,你首先必须创建特定的结构序列类型。" + +#: ../../c-api/tuple.rst:124 +msgid "" +"Create a new struct sequence type from the data in *desc*, described below. " +"Instances of the resulting type can be created with " +":c:func:`PyStructSequence_New`." +msgstr "" +"根据 *desc* 中的数据创建一个新的结构序列类型,如下所述。 可以使用 :c:func:`PyStructSequence_New` " +"创建结果类型的实例。" + +#: ../../c-api/tuple.rst:130 +msgid "Initializes a struct sequence type *type* from *desc* in place." +msgstr "从 *desc* 就地初始化结构序列类型 *type*。" + +#: ../../c-api/tuple.rst:135 +msgid "" +"The same as ``PyStructSequence_InitType``, but returns ``0`` on success and " +"``-1`` on failure." +msgstr "与 ``PyStructSequence_InitType`` 相同,但成功时返回 ``0`` ,失败时返回 ``-1`` 。" + +#: ../../c-api/tuple.rst:143 +msgid "Contains the meta information of a struct sequence type to create." +msgstr "包含要创建的结构序列类型的元信息。" + +#: ../../c-api/tuple.rst:146 ../../c-api/tuple.rst:169 +msgid "Field" +msgstr "域" + +#: ../../c-api/tuple.rst:146 ../../c-api/tuple.rst:169 +msgid "C Type" +msgstr "C 类型" + +#: ../../c-api/tuple.rst:146 ../../c-api/tuple.rst:169 +msgid "Meaning" +msgstr "意义" + +#: ../../c-api/tuple.rst:148 ../../c-api/tuple.rst:171 +msgid "``name``" +msgstr "``name``" + +#: ../../c-api/tuple.rst:148 ../../c-api/tuple.rst:150 +#: ../../c-api/tuple.rst:171 ../../c-api/tuple.rst:176 +msgid "``const char *``" +msgstr "``const char *``" + +#: ../../c-api/tuple.rst:148 +msgid "name of the struct sequence type" +msgstr "结构序列类型的名称" + +#: ../../c-api/tuple.rst:150 ../../c-api/tuple.rst:176 +msgid "``doc``" +msgstr "``doc``" + +#: ../../c-api/tuple.rst:150 +msgid "pointer to docstring for the type or ``NULL`` to omit" +msgstr "指向要忽略类型的文档字符串或 ``NULL`` 的指针" + +#: ../../c-api/tuple.rst:153 +msgid "``fields``" +msgstr "``fields``" + +#: ../../c-api/tuple.rst:153 +msgid "``PyStructSequence_Field *``" +msgstr "``PyStructSequence_Field *``" + +#: ../../c-api/tuple.rst:153 +msgid "pointer to ``NULL``-terminated array with field names of the new type" +msgstr "指向以 ``NULL`` 结尾的数组的指针,其字段名称为新类型" + +#: ../../c-api/tuple.rst:156 +msgid "``n_in_sequence``" +msgstr "``n_in_sequence``" + +#: ../../c-api/tuple.rst:156 +msgid "``int``" +msgstr "``int``" + +#: ../../c-api/tuple.rst:156 +msgid "number of fields visible to the Python side (if used as tuple)" +msgstr "Python侧可见的字段数(如果用作元组)" + +#: ../../c-api/tuple.rst:163 +msgid "" +"Describes a field of a struct sequence. As a struct sequence is modeled as a" +" tuple, all fields are typed as :c:type:`PyObject*`. The index in the " +":attr:`fields` array of the :c:type:`PyStructSequence_Desc` determines which" +" field of the struct sequence is described." +msgstr "" +"描述结构序列的一个字段。 当结构序列被建模为元组时,所有字段的类型都是 :c:type:`PyObject*`。 在 " +":c:type:`PyStructSequence_Desc` 的 :attr:`fields` 数组中的索引确定了结构序列描述的是哪个字段。" + +#: ../../c-api/tuple.rst:171 +msgid "" +"name for the field or ``NULL`` to end the list of named fields, set to " +":c:data:`PyStructSequence_UnnamedField` to leave unnamed" +msgstr "" +"字段的名称或 ``NULL`` ,若要结束命名字段的列表,请设置为 :c:data:`PyStructSequence_UnnamedField` " +"以保留未命名字段" + +#: ../../c-api/tuple.rst:176 +msgid "field docstring or ``NULL`` to omit" +msgstr "要忽略的字段文档字符串或 ``NULL``" + +#: ../../c-api/tuple.rst:182 +msgid "Special value for a field name to leave it unnamed." +msgstr "字段名的特殊值将保持未命名状态。" + +#: ../../c-api/tuple.rst:184 +msgid "The type was changed from ``char *``." +msgstr "这个类型已从 ``char *`` 更改。" + +#: ../../c-api/tuple.rst:190 +msgid "" +"Creates an instance of *type*, which must have been created with " +":c:func:`PyStructSequence_NewType`." +msgstr "创建 *type* 的实例,该实例必须使用 :c:func:`PyStructSequence_NewType` 创建。" + +#: ../../c-api/tuple.rst:196 +msgid "" +"Return the object at position *pos* in the struct sequence pointed to by " +"*p*. No bounds checking is performed." +msgstr "返回 *p* 所指向的结构序列中,位于 *pos* 处的对象。不需要进行边界检查。" + +#: ../../c-api/tuple.rst:202 +msgid "Macro equivalent of :c:func:`PyStructSequence_GetItem`." +msgstr ":c:func:`PyStructSequence_GetItem` 的宏版本。" + +#: ../../c-api/tuple.rst:207 +msgid "" +"Sets the field at index *pos* of the struct sequence *p* to value *o*. Like" +" :c:func:`PyTuple_SET_ITEM`, this should only be used to fill in brand new " +"instances." +msgstr "" +"将结构序列 *p* 的索引 *pos* 处的字段设置为值 *o*。 与 :c:func:`PyTuple_SET_ITEM` " +"一样,它应该只用于填充全新的实例。" + +#: ../../c-api/tuple.rst:213 ../../c-api/tuple.rst:222 +msgid "This function \"steals\" a reference to *o*." +msgstr "这个函数“窃取”了指向 *o* 的一个引用。" + +#: ../../c-api/tuple.rst:218 +msgid "Macro equivalent of :c:func:`PyStructSequence_SetItem`." +msgstr ":c:func:`PyStructSequence_SetItem` 的宏版本。" diff --git a/c-api/type.po b/c-api/type.po new file mode 100644 index 000000000..9ab9ca545 --- /dev/null +++ b/c-api/type.po @@ -0,0 +1,418 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) 2001-2024, Python Software Foundation +# This file is distributed under the same license as the Python package. +# FIRST AUTHOR , YEAR. +# +# Translators: +# stone jing , 2019 +# ppcfish , 2019 +# Lu , 2022 +# Rafael Fontenelle , 2023 +# Freesand Leo , 2024 +# +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: Python 3.9\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2024-04-26 21:29+0000\n" +"PO-Revision-Date: 2017-02-16 17:39+0000\n" +"Last-Translator: Freesand Leo , 2024\n" +"Language-Team: Chinese (China) (https://app.transifex.com/python-doc/teams/5390/zh_CN/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: zh_CN\n" +"Plural-Forms: nplurals=1; plural=0;\n" + +#: ../../c-api/type.rst:6 +msgid "Type Objects" +msgstr "类型对象" + +#: ../../c-api/type.rst:13 +msgid "The C structure of the objects used to describe built-in types." +msgstr "对象的 C 结构用于描述 built-in 类型。" + +#: ../../c-api/type.rst:18 +msgid "" +"This is the type object for type objects; it is the same object as " +":class:`type` in the Python layer." +msgstr "这是属于 type 对象的 type object,它在 Python 层面和 :class:`type` 是相同的对象。" + +#: ../../c-api/type.rst:24 +msgid "" +"Return non-zero if the object *o* is a type object, including instances of " +"types derived from the standard type object. Return 0 in all other cases. " +"This function always succeeds." +msgstr "如果对象 *o* 是一个类型对象,包括派生自标准类型对象的类型实例则返回非零值。 在所有其它情况下都返回 0。 此函数将总是成功执行。" + +#: ../../c-api/type.rst:31 +msgid "" +"Return non-zero if the object *o* is a type object, but not a subtype of the" +" standard type object. Return 0 in all other cases. This function always " +"succeeds." +msgstr "如果对象 *o* 是一个类型对象,但不是标准类型对象的子类型则返回非零值。 在所有其它情况下都返回 0。 此函数将总是成功执行。" + +#: ../../c-api/type.rst:38 +msgid "Clear the internal lookup cache. Return the current version tag." +msgstr "清空内部查找缓存。 返回当前版本标签。" + +#: ../../c-api/type.rst:42 +msgid "" +"Return the :c:member:`~PyTypeObject.tp_flags` member of *type*. This " +"function is primarily meant for use with `Py_LIMITED_API`; the individual " +"flag bits are guaranteed to be stable across Python releases, but access to " +":c:member:`~PyTypeObject.tp_flags` itself is not part of the limited API." +msgstr "" +"返回 *type* 的 :c:member:`~PyTypeObject.tp_flags` 成员。 此函数主要是配合 `Py_LIMITED_API`" +" 使用;单独的旗标位会确保在各个 Python 发行版之间保持稳定,但对 :c:member:`~PyTypeObject.tp_flags` " +"本身的访问并不是受限 API 的一部分。" + +#: ../../c-api/type.rst:49 +msgid "The return type is now ``unsigned long`` rather than ``long``." +msgstr "返回类型现在是 ``unsigned long`` 而不是 ``long``。" + +#: ../../c-api/type.rst:55 +msgid "" +"Invalidate the internal lookup cache for the type and all of its subtypes. " +"This function must be called after any manual modification of the attributes" +" or base classes of the type." +msgstr "使该类型及其所有子类型的内部查找缓存失效。 此函数必须在对该类型的属性或基类进行任何手动修改之后调用。" + +#: ../../c-api/type.rst:62 +msgid "" +"Return non-zero if the type object *o* sets the feature *feature*. Type " +"features are denoted by single bit flags." +msgstr "如果类型对象 *o* 设置了特性 *feature* 则返回非零值。 类型特性是用单个比特位旗标来表示的。" + +#: ../../c-api/type.rst:68 +msgid "" +"Return true if the type object includes support for the cycle detector; this" +" tests the type flag :const:`Py_TPFLAGS_HAVE_GC`." +msgstr "如果类型对象包括对循环检测器的支持则返回真值;这会测试类型旗标 :const:`Py_TPFLAGS_HAVE_GC`。" + +#: ../../c-api/type.rst:74 +msgid "Return true if *a* is a subtype of *b*." +msgstr "如果 *a* 是 *b* 的子类型则返回真值。" + +#: ../../c-api/type.rst:76 +msgid "" +"This function only checks for actual subtypes, which means that " +":meth:`~class.__subclasscheck__` is not called on *b*. Call " +":c:func:`PyObject_IsSubclass` to do the same check that :func:`issubclass` " +"would do." +msgstr "" +"此函数只检查实际的子类型,这意味着 :meth:`~class.__subclasscheck__` 不会在 *b* 上被调用。 请调用 " +":c:func:`PyObject_IsSubclass` 来执行与 :func:`issubclass` 所做的相同检查。" + +#: ../../c-api/type.rst:84 +msgid "" +"Generic handler for the :c:member:`~PyTypeObject.tp_alloc` slot of a type " +"object. Use Python's default memory allocation mechanism to allocate a new " +"instance and initialize all its contents to ``NULL``." +msgstr "" +"类型对象的 :c:member:`~PyTypeObject.tp_alloc` 槽位的通用处理器。 请使用 Python " +"的默认内存分配机制来分配一个新的实例并将其所有内容初始化为 ``NULL``。" + +#: ../../c-api/type.rst:90 +msgid "" +"Generic handler for the :c:member:`~PyTypeObject.tp_new` slot of a type " +"object. Create a new instance using the type's " +":c:member:`~PyTypeObject.tp_alloc` slot." +msgstr "" +"类型对象的 :c:member:`~PyTypeObject.tp_new` 槽位的通用处理器。 请使用类型的 " +":c:member:`~PyTypeObject.tp_alloc` 槽位来创建一个新的实例。" + +#: ../../c-api/type.rst:95 +msgid "" +"Finalize a type object. This should be called on all type objects to finish" +" their initialization. This function is responsible for adding inherited " +"slots from a type's base class. Return ``0`` on success, or return ``-1`` " +"and sets an exception on error." +msgstr "" +"最终化一个类型对象。 这应当在所有类型对象上调用以完成它们的初始化。 此函数会负责从一个类型的基类添加被继承的槽位。 成功时返回 " +"``0``,或是在出错时返回 ``-1`` 并设置一个异常。" + +#: ../../c-api/type.rst:101 +msgid "" +"If some of the base classes implements the GC protocol and the provided type" +" does not include the :const:`Py_TPFLAGS_HAVE_GC` in its flags, then the GC " +"protocol will be automatically implemented from its parents. On the " +"contrary, if the type being created does include :const:`Py_TPFLAGS_HAVE_GC`" +" in its flags then it **must** implement the GC protocol itself by at least " +"implementing the :c:member:`~PyTypeObject.tp_traverse` handle." +msgstr "" +"如果某些基类实现了 GC 协议并且所提供的类型的旗标中未包括 :const:`Py_TPFLAGS_HAVE_GC`,则将自动从其父类实现 GC 协议。" +" 相反地,如果被创建的类型的旗标中未包括 :const:`Py_TPFLAGS_HAVE_GC` 则它 **必须** 自己通过实现 " +":c:member:`~PyTypeObject.tp_traverse` 句柄来实现 GC 协议。" + +#: ../../c-api/type.rst:111 +msgid "" +"Return the function pointer stored in the given slot. If the result is " +"``NULL``, this indicates that either the slot is ``NULL``, or that the " +"function was called with invalid parameters. Callers will typically cast the" +" result pointer into the appropriate function type." +msgstr "" +"返回存储在给定槽位中的函数指针。 如果结果为 ``NULL``,则表示或者该槽位为 ``NULL``,或者该函数调用传入了无效的形参。 " +"调用方通常要将结果指针转换到适当的函数类型。" + +#: ../../c-api/type.rst:117 +msgid "" +"See :c:member:`PyType_Slot.slot` for possible values of the *slot* argument." +msgstr "请参阅 :c:member:`PyType_Slot.slot` 查看可用的 *slot* 参数值。" + +#: ../../c-api/type.rst:119 +msgid "An exception is raised if *type* is not a heap type." +msgstr "" + +#: ../../c-api/type.rst:125 +msgid "" +"Return the module object associated with the given type when the type was " +"created using :c:func:`PyType_FromModuleAndSpec`." +msgstr "返回当使用 :c:func:`PyType_FromModuleAndSpec` 创建类型时关联到给定类型的模块对象。" + +#: ../../c-api/type.rst:128 ../../c-api/type.rst:146 +msgid "" +"If no module is associated with the given type, sets :py:class:`TypeError` " +"and returns ``NULL``." +msgstr "如果没有关联到给定类型的模块,则设置 :py:class:`TypeError` 并返回 ``NULL``。" + +#: ../../c-api/type.rst:131 +msgid "" +"This function is usually used to get the module in which a method is " +"defined. Note that in such a method, ``PyType_GetModule(Py_TYPE(self))`` may" +" not return the intended result. ``Py_TYPE(self)`` may be a *subclass* of " +"the intended class, and subclasses are not necessarily defined in the same " +"module as their superclass. See :c:type:`PyCMethod` to get the class that " +"defines the method." +msgstr "" +"此函数通常被用于获取方法定义所在的模块。 请注意在这样的方法中,``PyType_GetModule(Py_TYPE(self))`` " +"可能不会返回预期的结果。 ``Py_TYPE(self)`` 可以是目标类的一个 *子类*,而子类并不一定是在与其上级类相同的模块中定义的。 请参阅 " +":c:type:`PyCMethod` 了解如何获取方法定义所在的类。" + +#: ../../c-api/type.rst:142 +msgid "" +"Return the state of the module object associated with the given type. This " +"is a shortcut for calling :c:func:`PyModule_GetState()` on the result of " +":c:func:`PyType_GetModule`." +msgstr "" +"返回关联到给定类型的模块对象的状态。 这是一个在 :c:func:`PyType_GetModule` 的结果上调用 " +":c:func:`PyModule_GetState()` 的快捷方式。" + +#: ../../c-api/type.rst:149 +msgid "" +"If the *type* has an associated module but its state is ``NULL``, returns " +"``NULL`` without setting an exception." +msgstr "如果 *type* 有关联的模块但其状态为 ``NULL``,则返回 ``NULL`` 且不设置异常。" + +#: ../../c-api/type.rst:156 +msgid "Creating Heap-Allocated Types" +msgstr "创建堆分配类型" + +#: ../../c-api/type.rst:158 +msgid "" +"The following functions and structs are used to create :ref:`heap types " +"`." +msgstr "下列函数和结构体可被用来创建 :ref:`堆类型 `。" + +#: ../../c-api/type.rst:163 +msgid "" +"Creates and returns a heap type object from the *spec* " +"(:const:`Py_TPFLAGS_HEAPTYPE`)." +msgstr "" + +#: ../../c-api/type.rst:166 +msgid "" +"If *bases* is a tuple, the created heap type contains all types contained in" +" it as base types." +msgstr "" + +#: ../../c-api/type.rst:169 +msgid "" +"If *bases* is ``NULL``, the *Py_tp_bases* slot is used instead. If that also" +" is ``NULL``, the *Py_tp_base* slot is used instead. If that also is " +"``NULL``, the new type derives from :class:`object`." +msgstr "" + +#: ../../c-api/type.rst:173 +msgid "" +"The *module* argument can be used to record the module in which the new " +"class is defined. It must be a module object or ``NULL``. If not ``NULL``, " +"the module is associated with the new type and can later be retrieved with " +":c:func:`PyType_GetModule`. The associated module is not inherited by " +"subclasses; it must be specified for each class individually." +msgstr "" +"*module* 参数可被用来记录新类定义所在的模块。 它必须是一个模块对象或为 ``NULL``。 如果不为 " +"``NULL``,则该模块会被关联到新类型并且可在之后通过 :c:func:`PyType_GetModule` 来获取。 " +"这个关联模块不可被子类继承;它必须为每个类单独指定。" + +#: ../../c-api/type.rst:180 +msgid "This function calls :c:func:`PyType_Ready` on the new type." +msgstr "此函数会在新类型上调用 :c:func:`PyType_Ready`。" + +#: ../../c-api/type.rst:186 +msgid "Equivalent to ``PyType_FromModuleAndSpec(NULL, spec, bases)``." +msgstr "等价于 ``PyType_FromModuleAndSpec(NULL, spec, bases)``。" + +#: ../../c-api/type.rst:192 +msgid "Equivalent to ``PyType_FromSpecWithBases(spec, NULL)``." +msgstr "等价于 ``PyType_FromSpecWithBases(spec, NULL)``。" + +#: ../../c-api/type.rst:196 +msgid "Structure defining a type's behavior." +msgstr "定义一个类型的行为的结构体。" + +#: ../../c-api/type.rst:200 +msgid "Name of the type, used to set :c:member:`PyTypeObject.tp_name`." +msgstr "类型的名称,用来设置 :c:member:`PyTypeObject.tp_name`。" + +#: ../../c-api/type.rst:205 +msgid "" +"Size of the instance in bytes, used to set " +":c:member:`PyTypeObject.tp_basicsize` and " +":c:member:`PyTypeObject.tp_itemsize`." +msgstr "" +"以字节数表示的实例大小,用来设置 :c:member:`PyTypeObject.tp_basicsize` 和 " +":c:member:`PyTypeObject.tp_itemsize`。" + +#: ../../c-api/type.rst:211 +msgid "Type flags, used to set :c:member:`PyTypeObject.tp_flags`." +msgstr "类型旗标,用来设置 :c:member:`PyTypeObject.tp_flags`。" + +#: ../../c-api/type.rst:213 +msgid "" +"If the ``Py_TPFLAGS_HEAPTYPE`` flag is not set, " +":c:func:`PyType_FromSpecWithBases` sets it automatically." +msgstr "" +"如果未设置 ``Py_TPFLAGS_HEAPTYPE`` 旗标,则 :c:func:`PyType_FromSpecWithBases` " +"会自动设置它。" + +#: ../../c-api/type.rst:218 +msgid "" +"Array of :c:type:`PyType_Slot` structures. Terminated by the special slot " +"value ``{0, NULL}``." +msgstr ":c:type:`PyType_Slot` 结构体的数组。 以特殊槽位值 ``{0, NULL}`` 来结束。" + +#: ../../c-api/type.rst:223 +msgid "" +"Structure defining optional functionality of a type, containing a slot ID " +"and a value pointer." +msgstr "定义一个类型的可选功能的结构体,包含一个槽位 ID 和一个值指针。" + +#: ../../c-api/type.rst:228 +msgid "A slot ID." +msgstr "槽位 ID。" + +#: ../../c-api/type.rst:230 +msgid "" +"Slot IDs are named like the field names of the structures " +":c:type:`PyTypeObject`, :c:type:`PyNumberMethods`, " +":c:type:`PySequenceMethods`, :c:type:`PyMappingMethods` and " +":c:type:`PyAsyncMethods` with an added ``Py_`` prefix. For example, use:" +msgstr "" +"槽位 ID 的类名像是结构体 :c:type:`PyTypeObject`, :c:type:`PyNumberMethods`, " +":c:type:`PySequenceMethods`, :c:type:`PyMappingMethods` 和 " +":c:type:`PyAsyncMethods` 的字段名附加一个 ``Py_`` 前缀。 举例来说,使用:" + +#: ../../c-api/type.rst:236 +msgid "``Py_tp_dealloc`` to set :c:member:`PyTypeObject.tp_dealloc`" +msgstr "``Py_tp_dealloc`` 设置 :c:member:`PyTypeObject.tp_dealloc`" + +#: ../../c-api/type.rst:237 +msgid "``Py_nb_add`` to set :c:member:`PyNumberMethods.nb_add`" +msgstr "``Py_nb_add`` 设置 :c:member:`PyNumberMethods.nb_add`" + +#: ../../c-api/type.rst:238 +msgid "``Py_sq_length`` to set :c:member:`PySequenceMethods.sq_length`" +msgstr "``Py_sq_length`` 设置 :c:member:`PySequenceMethods.sq_length`" + +#: ../../c-api/type.rst:240 +msgid "" +"The following fields cannot be set at all using :c:type:`PyType_Spec` and " +":c:type:`PyType_Slot`:" +msgstr "下列字段完全无法使得 :c:type:`PyType_Spec` 和 :c:type:`PyType_Slot` 来设置:" + +#: ../../c-api/type.rst:243 +msgid ":c:member:`~PyTypeObject.tp_dict`" +msgstr ":c:member:`~PyTypeObject.tp_dict`" + +#: ../../c-api/type.rst:244 +msgid ":c:member:`~PyTypeObject.tp_mro`" +msgstr ":c:member:`~PyTypeObject.tp_mro`" + +#: ../../c-api/type.rst:245 +msgid ":c:member:`~PyTypeObject.tp_cache`" +msgstr ":c:member:`~PyTypeObject.tp_cache`" + +#: ../../c-api/type.rst:246 +msgid ":c:member:`~PyTypeObject.tp_subclasses`" +msgstr ":c:member:`~PyTypeObject.tp_subclasses`" + +#: ../../c-api/type.rst:247 +msgid ":c:member:`~PyTypeObject.tp_weaklist`" +msgstr ":c:member:`~PyTypeObject.tp_weaklist`" + +#: ../../c-api/type.rst:248 +msgid ":c:member:`~PyTypeObject.tp_vectorcall`" +msgstr ":c:member:`~PyTypeObject.tp_vectorcall`" + +#: ../../c-api/type.rst:249 +msgid "" +":c:member:`~PyTypeObject.tp_weaklistoffset` (see :ref:`PyMemberDef " +"`)" +msgstr "" +":c:member:`~PyTypeObject.tp_weaklistoffset` (参见 :ref:`PyMemberDef " +"`)" + +#: ../../c-api/type.rst:251 +msgid "" +":c:member:`~PyTypeObject.tp_dictoffset` (see :ref:`PyMemberDef `)" +msgstr "" +":c:member:`~PyTypeObject.tp_dictoffset` (参见 :ref:`PyMemberDef `)" + +#: ../../c-api/type.rst:253 +msgid "" +":c:member:`~PyTypeObject.tp_vectorcall_offset` (see :ref:`PyMemberDef " +"`)" +msgstr "" +":c:member:`~PyTypeObject.tp_vectorcall_offset` (参见 :ref:`PyMemberDef " +"`)" + +#: ../../c-api/type.rst:256 +msgid "" +"The following fields cannot be set using :c:type:`PyType_Spec` and " +":c:type:`PyType_Slot` under the limited API:" +msgstr "下列字段在受限 API 下无法使用 :c:type:`PyType_Spec` 和 :c:type:`PyType_Slot` 来设置:" + +#: ../../c-api/type.rst:259 +msgid ":c:member:`~PyBufferProcs.bf_getbuffer`" +msgstr ":c:member:`~PyBufferProcs.bf_getbuffer`" + +#: ../../c-api/type.rst:260 +msgid ":c:member:`~PyBufferProcs.bf_releasebuffer`" +msgstr ":c:member:`~PyBufferProcs.bf_releasebuffer`" + +#: ../../c-api/type.rst:262 +msgid "" +"Setting :c:data:`Py_tp_bases` or :c:data:`Py_tp_base` may be problematic on " +"some platforms. To avoid issues, use the *bases* argument of " +":py:func:`PyType_FromSpecWithBases` instead." +msgstr "" +"设置 :c:data:`Py_tp_bases` 或 :c:data:`Py_tp_base` 在某些平台上可能会有问题。 为了避免问题,请改用 " +":py:func:`PyType_FromSpecWithBases` 的 *bases* 参数。" + +#: ../../c-api/type.rst:269 +msgid "Slots in :c:type:`PyBufferProcs` may be set in the unlimited API." +msgstr ":c:type:`PyBufferProcs` 中的槽位可能会在不受限 API 中被设置。" + +#: ../../c-api/type.rst:273 +msgid "" +"The desired value of the slot. In most cases, this is a pointer to a " +"function." +msgstr "该槽位的预期值。 在大多数情况下,这将是一个指向函数的指针。" + +#: ../../c-api/type.rst:276 +msgid "May not be ``NULL``." +msgstr "" diff --git a/c-api/typehints.po b/c-api/typehints.po new file mode 100644 index 000000000..6446c0413 --- /dev/null +++ b/c-api/typehints.po @@ -0,0 +1,71 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) 2001-2022, Python Software Foundation +# This file is distributed under the same license as the Python package. +# FIRST AUTHOR , YEAR. +# +# Translators: +# Jiuh-star , 2021 +# +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: Python 3.9\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2022-11-04 14:34+0000\n" +"PO-Revision-Date: 2021-06-17 06:42+0000\n" +"Last-Translator: Jiuh-star , 2021\n" +"Language-Team: Chinese (China) (https://www.transifex.com/python-doc/teams/5390/zh_CN/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: zh_CN\n" +"Plural-Forms: nplurals=1; plural=0;\n" + +#: ../../c-api/typehints.rst:6 +msgid "Objects for Type Hinting" +msgstr "类型注解对象" + +#: ../../c-api/typehints.rst:8 +msgid "" +"Various built-in types for type hinting are provided. Only " +":ref:`GenericAlias ` is exposed to C." +msgstr "" +"Python 提供了多种内置类型用于类型注解,但只有 :ref:`GenericAlias ` 暴露给了 C。" + +#: ../../c-api/typehints.rst:13 +msgid "" +"Create a :ref:`GenericAlias ` object. Equivalent to " +"calling the Python class :class:`types.GenericAlias`. The *origin* and " +"*args* arguments set the ``GenericAlias``\\ 's ``__origin__`` and " +"``__args__`` attributes respectively. *origin* should be a " +":c:type:`PyTypeObject*`, and *args* can be a :c:type:`PyTupleObject*` or any" +" ``PyObject*``. If *args* passed is not a tuple, a 1-tuple is automatically" +" constructed and ``__args__`` is set to ``(args,)``. Minimal checking is " +"done for the arguments, so the function will succeed even if *origin* is not" +" a type. The ``GenericAlias``\\ 's ``__parameters__`` attribute is " +"constructed lazily from ``__args__``. On failure, an exception is raised " +"and ``NULL`` is returned." +msgstr "" +"创建一个 :ref:`GenericAlias ` 对象。相当于调用 Python 类 " +":class:`types.GenericAlias` 。参数 *origin* 和 *args* 分别设置 ``GenericAlias``\\ 's" +" ``__origin__`` 属性和 ``__args__`` 属性。 *origin* 应该是 :c:type:`PyTypeObject*` " +"类型, *args* 可以是 :c:type:`PyTupleObject*` 类型或者任意 ``PyObject*`` 类型。如果传递的 *args*" +" 不是一个元组,则自动构建一个 1 元元组,并将 ``__args__`` 设置为 ``(args,)`` 。对参数进行了最小限度的检查,因此即使 " +"*origin* 不是类型,函数也会成功。``GenericAlias`` 的 ``__parameters__`` 属性是通过 " +"``__args__`` 懒加载的。如果失败,则触发异常并返回 ``NULL`` 。" + +#: ../../c-api/typehints.rst:27 +msgid "Here's an example of how to make an extension type generic::" +msgstr "下面是一个如何创建一个扩展类型泛型的例子::" + +#: ../../c-api/typehints.rst:37 +msgid "The data model method :meth:`__class_getitem__`." +msgstr "数据模型的方法 :meth:`__class_getitem__` 。" + +#: ../../c-api/typehints.rst:43 +msgid "" +"The C type of the object returned by :c:func:`Py_GenericAlias`. Equivalent " +"to :class:`types.GenericAlias` in Python." +msgstr "" +"由 :c:func:`Py_GenericAlias` 所返回的对象的 C 类型。等价于 Python 中的 " +":class:`types.GenericAlias` 。" diff --git a/c-api/typeobj.po b/c-api/typeobj.po new file mode 100644 index 000000000..60b0277ec --- /dev/null +++ b/c-api/typeobj.po @@ -0,0 +1,3652 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) 2001-2025, Python Software Foundation +# This file is distributed under the same license as the Python package. +# FIRST AUTHOR , YEAR. +# +# Translators: +# 叶浚安 , 2019 +# nick <2330458484@qq.com>, 2019 +# ruoyu zhang , 2019 +# ppcfish , 2019 +# 文博 周 , 2021 +# Lu , 2022 +# chime z , 2022 +# Shan Su, 2023 +# ProgramRipper, 2023 +# Nyuan Zhang, 2023 +# Kevin Deng , 2024 +# Freesand Leo , 2024 +# Rafael Fontenelle , 2025 +# +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: Python 3.9\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2025-02-07 16:40+0000\n" +"PO-Revision-Date: 2017-02-16 17:39+0000\n" +"Last-Translator: Rafael Fontenelle , 2025\n" +"Language-Team: Chinese (China) (https://app.transifex.com/python-doc/teams/5390/zh_CN/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: zh_CN\n" +"Plural-Forms: nplurals=1; plural=0;\n" + +#: ../../c-api/typeobj.rst:6 +msgid "Type Objects" +msgstr "类型对象" + +#: ../../c-api/typeobj.rst:8 +msgid "" +"Perhaps one of the most important structures of the Python object system is " +"the structure that defines a new type: the :c:type:`PyTypeObject` structure." +" Type objects can be handled using any of the :c:func:`PyObject_\\*` or " +":c:func:`PyType_\\*` functions, but do not offer much that's interesting to " +"most Python applications. These objects are fundamental to how objects " +"behave, so they are very important to the interpreter itself and to any " +"extension module that implements new types." +msgstr "" +"也许 Python 对象系统中最重要的结构之一就是定义新类型的结构: :c:type:`PyTypeObject` 结构。 类型对象可以使用任何 " +":c:func:`PyObject_\\*` 或 :c:func:`PyType_\\*` 函数来处理,但不能提供大多数 Python " +"应用程序所感兴趣的内容。 这些对象是对象行为的基础,所以它们对解释器本身或任何实现新类型的扩展模块都非常重要。" + +#: ../../c-api/typeobj.rst:16 +msgid "" +"Type objects are fairly large compared to most of the standard types. The " +"reason for the size is that each type object stores a large number of " +"values, mostly C function pointers, each of which implements a small part of" +" the type's functionality. The fields of the type object are examined in " +"detail in this section. The fields will be described in the order in which " +"they occur in the structure." +msgstr "" +"与大多数标准类型相比,类型对象相当大。这么大的原因是每个类型对象存储了大量的值,大部分是C函数指针,每个指针实现了类型功能的一小部分。本节将详细描述类型对象的字段。这些字段将按照它们在结构中出现的顺序进行描述。" + +#: ../../c-api/typeobj.rst:23 +msgid "" +"In addition to the following quick reference, the :ref:`typedef-examples` " +"section provides at-a-glance insight into the meaning and use of " +":c:type:`PyTypeObject`." +msgstr "" +"除了下面的快速参考, :ref:`typedef-examples` 小节提供了快速了解 :c:type:`PyTypeObject` " +"的含义和用法的例子。" + +#: ../../c-api/typeobj.rst:29 +msgid "Quick Reference" +msgstr "快速参考" + +#: ../../c-api/typeobj.rst:34 +msgid "\"tp slots\"" +msgstr "\"tp 槽位\"" + +#: ../../c-api/typeobj.rst:40 +msgid "PyTypeObject Slot [#slots]_" +msgstr "PyTypeObject 槽位 [#slots]_" + +#: ../../c-api/typeobj.rst:40 ../../c-api/typeobj.rst:193 +msgid ":ref:`Type `" +msgstr ":ref:`类型 `" + +#: ../../c-api/typeobj.rst:40 +msgid "special methods/attrs" +msgstr "特殊方法/属性" + +#: ../../c-api/typeobj.rst:40 +msgid "Info [#cols]_" +msgstr "信息 [#cols]_" + +#: ../../c-api/typeobj.rst:42 +msgid "O" +msgstr "O" + +#: ../../c-api/typeobj.rst:42 +msgid "T" +msgstr "T" + +#: ../../c-api/typeobj.rst:42 +msgid "D" +msgstr "D" + +#: ../../c-api/typeobj.rst:42 +msgid "I" +msgstr "I" + +#: ../../c-api/typeobj.rst:44 +msgid " :c:member:`~PyTypeObject.tp_name`" +msgstr " :c:member:`~PyTypeObject.tp_name`" + +#: ../../c-api/typeobj.rst:44 ../../c-api/typeobj.rst:86 +#: ../../c-api/typeobj.rst:0 ../../c-api/typeobj.rst:0 +msgid "const char *" +msgstr "const char *" + +#: ../../c-api/typeobj.rst:44 +msgid "__name__" +msgstr "__name__" + +#: ../../c-api/typeobj.rst:44 ../../c-api/typeobj.rst:44 +#: ../../c-api/typeobj.rst:46 ../../c-api/typeobj.rst:46 +#: ../../c-api/typeobj.rst:46 ../../c-api/typeobj.rst:48 +#: ../../c-api/typeobj.rst:48 ../../c-api/typeobj.rst:50 +#: ../../c-api/typeobj.rst:50 ../../c-api/typeobj.rst:50 +#: ../../c-api/typeobj.rst:52 ../../c-api/typeobj.rst:52 +#: ../../c-api/typeobj.rst:62 ../../c-api/typeobj.rst:62 +#: ../../c-api/typeobj.rst:62 ../../c-api/typeobj.rst:70 +#: ../../c-api/typeobj.rst:72 ../../c-api/typeobj.rst:72 +#: ../../c-api/typeobj.rst:74 ../../c-api/typeobj.rst:74 +#: ../../c-api/typeobj.rst:76 ../../c-api/typeobj.rst:76 +#: ../../c-api/typeobj.rst:79 ../../c-api/typeobj.rst:79 +#: ../../c-api/typeobj.rst:84 ../../c-api/typeobj.rst:84 +#: ../../c-api/typeobj.rst:86 ../../c-api/typeobj.rst:86 +#: ../../c-api/typeobj.rst:88 ../../c-api/typeobj.rst:90 +#: ../../c-api/typeobj.rst:92 ../../c-api/typeobj.rst:99 +#: ../../c-api/typeobj.rst:101 ../../c-api/typeobj.rst:103 +#: ../../c-api/typeobj.rst:105 ../../c-api/typeobj.rst:105 +#: ../../c-api/typeobj.rst:107 ../../c-api/typeobj.rst:109 +#: ../../c-api/typeobj.rst:109 ../../c-api/typeobj.rst:111 +#: ../../c-api/typeobj.rst:115 ../../c-api/typeobj.rst:117 +#: ../../c-api/typeobj.rst:120 ../../c-api/typeobj.rst:122 +#: ../../c-api/typeobj.rst:122 ../../c-api/typeobj.rst:122 +#: ../../c-api/typeobj.rst:124 ../../c-api/typeobj.rst:126 +#: ../../c-api/typeobj.rst:126 ../../c-api/typeobj.rst:128 +#: ../../c-api/typeobj.rst:128 ../../c-api/typeobj.rst:130 +#: ../../c-api/typeobj.rst:130 ../../c-api/typeobj.rst:146 +msgid "X" +msgstr "X" + +#: ../../c-api/typeobj.rst:46 +msgid ":c:member:`~PyTypeObject.tp_basicsize`" +msgstr ":c:member:`~PyTypeObject.tp_basicsize`" + +#: ../../c-api/typeobj.rst:46 ../../c-api/typeobj.rst:48 +#: ../../c-api/typeobj.rst:52 ../../c-api/typeobj.rst:99 +#: ../../c-api/typeobj.rst:120 ../../c-api/typeobj.rst:0 +#: ../../c-api/typeobj.rst:406 ../../c-api/typeobj.rst:0 +#: ../../c-api/typeobj.rst:0 +msgid ":c:type:`Py_ssize_t`" +msgstr ":c:type:`Py_ssize_t`" + +#: ../../c-api/typeobj.rst:48 +msgid ":c:member:`~PyTypeObject.tp_itemsize`" +msgstr ":c:member:`~PyTypeObject.tp_itemsize`" + +#: ../../c-api/typeobj.rst:50 +msgid ":c:member:`~PyTypeObject.tp_dealloc`" +msgstr ":c:member:`~PyTypeObject.tp_dealloc`" + +#: ../../c-api/typeobj.rst:50 ../../c-api/typeobj.rst:142 +#: ../../c-api/typeobj.rst:146 ../../c-api/typeobj.rst:336 +msgid ":c:type:`destructor`" +msgstr ":c:type:`destructor`" + +#: ../../c-api/typeobj.rst:52 +msgid ":c:member:`~PyTypeObject.tp_vectorcall_offset`" +msgstr ":c:member:`~PyTypeObject.tp_vectorcall_offset`" + +#: ../../c-api/typeobj.rst:54 +msgid "(:c:member:`~PyTypeObject.tp_getattr`)" +msgstr "(:c:member:`~PyTypeObject.tp_getattr`)" + +#: ../../c-api/typeobj.rst:54 ../../c-api/typeobj.rst:360 +msgid ":c:type:`getattrfunc`" +msgstr ":c:type:`getattrfunc`" + +#: ../../c-api/typeobj.rst:54 ../../c-api/typeobj.rst:76 +msgid "__getattribute__, __getattr__" +msgstr "__getattribute__, __getattr__" + +#: ../../c-api/typeobj.rst:54 ../../c-api/typeobj.rst:57 +#: ../../c-api/typeobj.rst:70 ../../c-api/typeobj.rst:76 +#: ../../c-api/typeobj.rst:79 ../../c-api/typeobj.rst:88 +#: ../../c-api/typeobj.rst:90 ../../c-api/typeobj.rst:92 +msgid "G" +msgstr "G" + +#: ../../c-api/typeobj.rst:57 +msgid "(:c:member:`~PyTypeObject.tp_setattr`)" +msgstr "(:c:member:`~PyTypeObject.tp_setattr`)" + +#: ../../c-api/typeobj.rst:57 ../../c-api/typeobj.rst:365 +msgid ":c:type:`setattrfunc`" +msgstr ":c:type:`setattrfunc`" + +#: ../../c-api/typeobj.rst:57 ../../c-api/typeobj.rst:79 +msgid "__setattr__, __delattr__" +msgstr "__setattr__, __delattr__" + +#: ../../c-api/typeobj.rst:60 +msgid ":c:member:`~PyTypeObject.tp_as_async`" +msgstr ":c:member:`~PyTypeObject.tp_as_async`" + +#: ../../c-api/typeobj.rst:60 +msgid ":c:type:`PyAsyncMethods` *" +msgstr ":c:type:`PyAsyncMethods` *" + +#: ../../c-api/typeobj.rst:60 ../../c-api/typeobj.rst:64 +#: ../../c-api/typeobj.rst:66 ../../c-api/typeobj.rst:68 +msgid ":ref:`sub-slots`" +msgstr ":ref:`sub-slots`" + +#: ../../c-api/typeobj.rst:60 ../../c-api/typeobj.rst:64 +#: ../../c-api/typeobj.rst:66 ../../c-api/typeobj.rst:68 +#: ../../c-api/typeobj.rst:82 +msgid "%" +msgstr "%" + +#: ../../c-api/typeobj.rst:62 +msgid ":c:member:`~PyTypeObject.tp_repr`" +msgstr ":c:member:`~PyTypeObject.tp_repr`" + +#: ../../c-api/typeobj.rst:62 ../../c-api/typeobj.rst:74 +#: ../../c-api/typeobj.rst:358 +msgid ":c:type:`reprfunc`" +msgstr ":c:type:`reprfunc`" + +#: ../../c-api/typeobj.rst:62 +msgid "__repr__" +msgstr "__repr__" + +#: ../../c-api/typeobj.rst:64 +msgid ":c:member:`~PyTypeObject.tp_as_number`" +msgstr ":c:member:`~PyTypeObject.tp_as_number`" + +#: ../../c-api/typeobj.rst:64 +msgid ":c:type:`PyNumberMethods` *" +msgstr ":c:type:`PyNumberMethods` *" + +#: ../../c-api/typeobj.rst:66 +msgid ":c:member:`~PyTypeObject.tp_as_sequence`" +msgstr ":c:member:`~PyTypeObject.tp_as_sequence`" + +#: ../../c-api/typeobj.rst:66 +msgid ":c:type:`PySequenceMethods` *" +msgstr ":c:type:`PySequenceMethods` *" + +#: ../../c-api/typeobj.rst:68 +msgid ":c:member:`~PyTypeObject.tp_as_mapping`" +msgstr ":c:member:`~PyTypeObject.tp_as_mapping`" + +#: ../../c-api/typeobj.rst:68 +msgid ":c:type:`PyMappingMethods` *" +msgstr ":c:type:`PyMappingMethods` *" + +#: ../../c-api/typeobj.rst:70 +msgid ":c:member:`~PyTypeObject.tp_hash`" +msgstr ":c:member:`~PyTypeObject.tp_hash`" + +#: ../../c-api/typeobj.rst:70 ../../c-api/typeobj.rst:394 +msgid ":c:type:`hashfunc`" +msgstr ":c:type:`hashfunc`" + +#: ../../c-api/typeobj.rst:70 +msgid "__hash__" +msgstr "__hash__" + +#: ../../c-api/typeobj.rst:72 +msgid ":c:member:`~PyTypeObject.tp_call`" +msgstr ":c:member:`~PyTypeObject.tp_call`" + +#: ../../c-api/typeobj.rst:72 ../../c-api/typeobj.rst:227 +#: ../../c-api/typeobj.rst:230 ../../c-api/typeobj.rst:430 +msgid ":c:type:`ternaryfunc`" +msgstr ":c:type:`ternaryfunc`" + +#: ../../c-api/typeobj.rst:72 +msgid "__call__" +msgstr "__call__" + +#: ../../c-api/typeobj.rst:74 +msgid ":c:member:`~PyTypeObject.tp_str`" +msgstr ":c:member:`~PyTypeObject.tp_str`" + +#: ../../c-api/typeobj.rst:74 +msgid "__str__" +msgstr "__str__" + +#: ../../c-api/typeobj.rst:76 +msgid ":c:member:`~PyTypeObject.tp_getattro`" +msgstr ":c:member:`~PyTypeObject.tp_getattro`" + +#: ../../c-api/typeobj.rst:76 ../../c-api/typeobj.rst:371 +msgid ":c:type:`getattrofunc`" +msgstr ":c:type:`getattrofunc`" + +#: ../../c-api/typeobj.rst:79 +msgid ":c:member:`~PyTypeObject.tp_setattro`" +msgstr ":c:member:`~PyTypeObject.tp_setattro`" + +#: ../../c-api/typeobj.rst:79 ../../c-api/typeobj.rst:376 +msgid ":c:type:`setattrofunc`" +msgstr ":c:type:`setattrofunc`" + +#: ../../c-api/typeobj.rst:82 +msgid ":c:member:`~PyTypeObject.tp_as_buffer`" +msgstr ":c:member:`~PyTypeObject.tp_as_buffer`" + +#: ../../c-api/typeobj.rst:82 +msgid ":c:type:`PyBufferProcs` *" +msgstr ":c:type:`PyBufferProcs` *" + +#: ../../c-api/typeobj.rst:84 +msgid ":c:member:`~PyTypeObject.tp_flags`" +msgstr ":c:member:`~PyTypeObject.tp_flags`" + +#: ../../c-api/typeobj.rst:84 +msgid "unsigned long" +msgstr "unsigned long" + +#: ../../c-api/typeobj.rst:84 ../../c-api/typeobj.rst:99 +#: ../../c-api/typeobj.rst:113 ../../c-api/typeobj.rst:120 +#: ../../c-api/typeobj.rst:124 ../../c-api/typeobj.rst:124 +#: ../../c-api/typeobj.rst:126 ../../c-api/typeobj.rst:126 +#: ../../c-api/typeobj.rst:128 ../../c-api/typeobj.rst:128 +msgid "?" +msgstr "?" + +#: ../../c-api/typeobj.rst:86 +msgid ":c:member:`~PyTypeObject.tp_doc`" +msgstr ":c:member:`~PyTypeObject.tp_doc`" + +#: ../../c-api/typeobj.rst:86 +msgid "__doc__" +msgstr "__doc__" + +#: ../../c-api/typeobj.rst:88 +msgid ":c:member:`~PyTypeObject.tp_traverse`" +msgstr ":c:member:`~PyTypeObject.tp_traverse`" + +#: ../../c-api/typeobj.rst:88 ../../c-api/typeobj.rst:340 +msgid ":c:type:`traverseproc`" +msgstr ":c:type:`traverseproc`" + +#: ../../c-api/typeobj.rst:90 +msgid ":c:member:`~PyTypeObject.tp_clear`" +msgstr ":c:member:`~PyTypeObject.tp_clear`" + +#: ../../c-api/typeobj.rst:90 ../../c-api/typeobj.rst:130 +#: ../../c-api/typeobj.rst:238 ../../c-api/typeobj.rst:419 +msgid ":c:type:`inquiry`" +msgstr ":c:type:`inquiry`" + +#: ../../c-api/typeobj.rst:92 +msgid ":c:member:`~PyTypeObject.tp_richcompare`" +msgstr ":c:member:`~PyTypeObject.tp_richcompare`" + +#: ../../c-api/typeobj.rst:92 ../../c-api/typeobj.rst:396 +msgid ":c:type:`richcmpfunc`" +msgstr ":c:type:`richcmpfunc`" + +#: ../../c-api/typeobj.rst:92 +msgid "__lt__, __le__, __eq__, __ne__, __gt__, __ge__" +msgstr "__lt__, __le__, __eq__, __ne__, __gt__, __ge__" + +#: ../../c-api/typeobj.rst:99 +msgid ":c:member:`~PyTypeObject.tp_weaklistoffset`" +msgstr ":c:member:`~PyTypeObject.tp_weaklistoffset`" + +#: ../../c-api/typeobj.rst:101 +msgid ":c:member:`~PyTypeObject.tp_iter`" +msgstr ":c:member:`~PyTypeObject.tp_iter`" + +#: ../../c-api/typeobj.rst:101 ../../c-api/typeobj.rst:402 +msgid ":c:type:`getiterfunc`" +msgstr ":c:type:`getiterfunc`" + +#: ../../c-api/typeobj.rst:101 +msgid "__iter__" +msgstr "__iter__" + +#: ../../c-api/typeobj.rst:103 +msgid ":c:member:`~PyTypeObject.tp_iternext`" +msgstr ":c:member:`~PyTypeObject.tp_iternext`" + +#: ../../c-api/typeobj.rst:103 ../../c-api/typeobj.rst:404 +msgid ":c:type:`iternextfunc`" +msgstr ":c:type:`iternextfunc`" + +#: ../../c-api/typeobj.rst:103 +msgid "__next__" +msgstr "__next__" + +#: ../../c-api/typeobj.rst:105 +msgid ":c:member:`~PyTypeObject.tp_methods`" +msgstr ":c:member:`~PyTypeObject.tp_methods`" + +#: ../../c-api/typeobj.rst:105 +msgid ":c:type:`PyMethodDef` []" +msgstr ":c:type:`PyMethodDef` []" + +#: ../../c-api/typeobj.rst:107 +msgid ":c:member:`~PyTypeObject.tp_members`" +msgstr ":c:member:`~PyTypeObject.tp_members`" + +#: ../../c-api/typeobj.rst:107 +msgid ":c:type:`PyMemberDef` []" +msgstr ":c:type:`PyMemberDef` []" + +#: ../../c-api/typeobj.rst:109 +msgid ":c:member:`~PyTypeObject.tp_getset`" +msgstr ":c:member:`~PyTypeObject.tp_getset`" + +#: ../../c-api/typeobj.rst:109 +msgid ":c:type:`PyGetSetDef` []" +msgstr ":c:type:`PyGetSetDef` []" + +#: ../../c-api/typeobj.rst:111 +msgid ":c:member:`~PyTypeObject.tp_base`" +msgstr ":c:member:`~PyTypeObject.tp_base`" + +#: ../../c-api/typeobj.rst:111 ../../c-api/typeobj.rst:0 +msgid ":c:type:`PyTypeObject` *" +msgstr ":c:type:`PyTypeObject` *" + +#: ../../c-api/typeobj.rst:111 +msgid "__base__" +msgstr "__base__" + +#: ../../c-api/typeobj.rst:113 +msgid ":c:member:`~PyTypeObject.tp_dict`" +msgstr ":c:member:`~PyTypeObject.tp_dict`" + +#: ../../c-api/typeobj.rst:113 ../../c-api/typeobj.rst:132 +#: ../../c-api/typeobj.rst:134 ../../c-api/typeobj.rst:136 +#: ../../c-api/typeobj.rst:138 ../../c-api/typeobj.rst:140 +#: ../../c-api/typeobj.rst:331 ../../c-api/typeobj.rst:0 +#: ../../c-api/typeobj.rst:0 ../../c-api/typeobj.rst:0 +#: ../../c-api/typeobj.rst:346 ../../c-api/typeobj.rst:0 +#: ../../c-api/typeobj.rst:0 ../../c-api/typeobj.rst:0 +#: ../../c-api/typeobj.rst:358 ../../c-api/typeobj.rst:358 +#: ../../c-api/typeobj.rst:0 ../../c-api/typeobj.rst:360 +#: ../../c-api/typeobj.rst:0 ../../c-api/typeobj.rst:0 +#: ../../c-api/typeobj.rst:0 ../../c-api/typeobj.rst:0 +#: ../../c-api/typeobj.rst:371 ../../c-api/typeobj.rst:0 +#: ../../c-api/typeobj.rst:0 ../../c-api/typeobj.rst:0 +#: ../../c-api/typeobj.rst:0 ../../c-api/typeobj.rst:0 +#: ../../c-api/typeobj.rst:0 ../../c-api/typeobj.rst:382 +#: ../../c-api/typeobj.rst:0 ../../c-api/typeobj.rst:0 +#: ../../c-api/typeobj.rst:0 ../../c-api/typeobj.rst:394 +#: ../../c-api/typeobj.rst:0 ../../c-api/typeobj.rst:0 +#: ../../c-api/typeobj.rst:396 ../../c-api/typeobj.rst:402 +#: ../../c-api/typeobj.rst:402 ../../c-api/typeobj.rst:404 +#: ../../c-api/typeobj.rst:404 ../../c-api/typeobj.rst:406 +#: ../../c-api/typeobj.rst:0 ../../c-api/typeobj.rst:0 +#: ../../c-api/typeobj.rst:0 ../../c-api/typeobj.rst:421 +#: ../../c-api/typeobj.rst:0 ../../c-api/typeobj.rst:0 +#: ../../c-api/typeobj.rst:425 ../../c-api/typeobj.rst:0 +#: ../../c-api/typeobj.rst:0 ../../c-api/typeobj.rst:0 +#: ../../c-api/typeobj.rst:430 ../../c-api/typeobj.rst:0 +#: ../../c-api/typeobj.rst:436 ../../c-api/typeobj.rst:0 +#: ../../c-api/typeobj.rst:0 ../../c-api/typeobj.rst:0 +#: ../../c-api/typeobj.rst:0 ../../c-api/typeobj.rst:0 +#: ../../c-api/typeobj.rst:0 +msgid ":c:type:`PyObject` *" +msgstr ":c:type:`PyObject` *" + +#: ../../c-api/typeobj.rst:113 +msgid "__dict__" +msgstr "__dict__" + +#: ../../c-api/typeobj.rst:115 +msgid ":c:member:`~PyTypeObject.tp_descr_get`" +msgstr ":c:member:`~PyTypeObject.tp_descr_get`" + +#: ../../c-api/typeobj.rst:115 ../../c-api/typeobj.rst:382 +msgid ":c:type:`descrgetfunc`" +msgstr ":c:type:`descrgetfunc`" + +#: ../../c-api/typeobj.rst:115 +msgid "__get__" +msgstr "__get__" + +#: ../../c-api/typeobj.rst:117 +msgid ":c:member:`~PyTypeObject.tp_descr_set`" +msgstr ":c:member:`~PyTypeObject.tp_descr_set`" + +#: ../../c-api/typeobj.rst:117 ../../c-api/typeobj.rst:388 +msgid ":c:type:`descrsetfunc`" +msgstr ":c:type:`descrsetfunc`" + +#: ../../c-api/typeobj.rst:117 +msgid "__set__, __delete__" +msgstr "__set__, __delete__" + +#: ../../c-api/typeobj.rst:120 +msgid ":c:member:`~PyTypeObject.tp_dictoffset`" +msgstr ":c:member:`~PyTypeObject.tp_dictoffset`" + +#: ../../c-api/typeobj.rst:122 +msgid ":c:member:`~PyTypeObject.tp_init`" +msgstr ":c:member:`~PyTypeObject.tp_init`" + +#: ../../c-api/typeobj.rst:122 ../../c-api/typeobj.rst:352 +msgid ":c:type:`initproc`" +msgstr ":c:type:`initproc`" + +#: ../../c-api/typeobj.rst:122 +msgid "__init__" +msgstr "__init__" + +#: ../../c-api/typeobj.rst:124 +msgid ":c:member:`~PyTypeObject.tp_alloc`" +msgstr ":c:member:`~PyTypeObject.tp_alloc`" + +#: ../../c-api/typeobj.rst:124 ../../c-api/typeobj.rst:331 +msgid ":c:type:`allocfunc`" +msgstr ":c:type:`allocfunc`" + +#: ../../c-api/typeobj.rst:126 +msgid ":c:member:`~PyTypeObject.tp_new`" +msgstr ":c:member:`~PyTypeObject.tp_new`" + +#: ../../c-api/typeobj.rst:126 ../../c-api/typeobj.rst:346 +msgid ":c:type:`newfunc`" +msgstr ":c:type:`newfunc`" + +#: ../../c-api/typeobj.rst:126 +msgid "__new__" +msgstr "__new__" + +#: ../../c-api/typeobj.rst:128 +msgid ":c:member:`~PyTypeObject.tp_free`" +msgstr ":c:member:`~PyTypeObject.tp_free`" + +#: ../../c-api/typeobj.rst:128 ../../c-api/typeobj.rst:338 +msgid ":c:type:`freefunc`" +msgstr ":c:type:`freefunc`" + +#: ../../c-api/typeobj.rst:130 +msgid ":c:member:`~PyTypeObject.tp_is_gc`" +msgstr ":c:member:`~PyTypeObject.tp_is_gc`" + +#: ../../c-api/typeobj.rst:132 +msgid "<:c:member:`~PyTypeObject.tp_bases`>" +msgstr "<:c:member:`~PyTypeObject.tp_bases`>" + +#: ../../c-api/typeobj.rst:132 +msgid "__bases__" +msgstr "__bases__" + +#: ../../c-api/typeobj.rst:132 ../../c-api/typeobj.rst:134 +msgid "~" +msgstr "~" + +#: ../../c-api/typeobj.rst:134 +msgid "<:c:member:`~PyTypeObject.tp_mro`>" +msgstr "<:c:member:`~PyTypeObject.tp_mro`>" + +#: ../../c-api/typeobj.rst:134 +msgid "__mro__" +msgstr "__mro__" + +#: ../../c-api/typeobj.rst:136 +msgid "[:c:member:`~PyTypeObject.tp_cache`]" +msgstr "[:c:member:`~PyTypeObject.tp_cache`]" + +#: ../../c-api/typeobj.rst:138 +msgid "[:c:member:`~PyTypeObject.tp_subclasses`]" +msgstr "[:c:member:`~PyTypeObject.tp_subclasses`]" + +#: ../../c-api/typeobj.rst:138 +msgid "__subclasses__" +msgstr "__subclasses__" + +#: ../../c-api/typeobj.rst:140 +msgid "[:c:member:`~PyTypeObject.tp_weaklist`]" +msgstr "[:c:member:`~PyTypeObject.tp_weaklist`]" + +#: ../../c-api/typeobj.rst:142 +msgid "(:c:member:`~PyTypeObject.tp_del`)" +msgstr "(:c:member:`~PyTypeObject.tp_del`)" + +#: ../../c-api/typeobj.rst:144 +msgid "[:c:member:`~PyTypeObject.tp_version_tag`]" +msgstr "[:c:member:`~PyTypeObject.tp_version_tag`]" + +#: ../../c-api/typeobj.rst:144 +msgid "unsigned int" +msgstr "unsigned int" + +#: ../../c-api/typeobj.rst:146 +msgid ":c:member:`~PyTypeObject.tp_finalize`" +msgstr ":c:member:`~PyTypeObject.tp_finalize`" + +#: ../../c-api/typeobj.rst:146 +msgid "__del__" +msgstr "__del__" + +#: ../../c-api/typeobj.rst:148 +msgid ":c:member:`~PyTypeObject.tp_vectorcall`" +msgstr ":c:member:`~PyTypeObject.tp_vectorcall`" + +#: ../../c-api/typeobj.rst:148 +msgid ":c:type:`vectorcallfunc`" +msgstr ":c:type:`vectorcallfunc`" + +#: ../../c-api/typeobj.rst:152 +msgid "" +"A slot name in parentheses indicates it is (effectively) deprecated. Names " +"in angle brackets should be treated as read-only. Names in square brackets " +"are for internal use only. \"\" (as a prefix) means the field is required" +" (must be non-``NULL``)." +msgstr "" +"小括号中的槽名表示它(实际上)已弃用。尖括号中的名称应该被视为只读的。方括号中的名称仅供内部使用。\"\"(作为前缀)表示该字段是必需的(必须是非null)。" + +#: ../../c-api/typeobj.rst:156 +msgid "Columns:" +msgstr "列:" + +#: ../../c-api/typeobj.rst:158 +msgid "**\"O\"**: set on :c:type:`PyBaseObject_Type`" +msgstr "**\"O\"**: :c:type:`PyBaseObject_Type` 必须设置" + +#: ../../c-api/typeobj.rst:160 +msgid "**\"T\"**: set on :c:type:`PyType_Type`" +msgstr "**\"T\"**: :c:type:`PyType_Type` 必须设置" + +#: ../../c-api/typeobj.rst:162 +msgid "**\"D\"**: default (if slot is set to ``NULL``)" +msgstr "**\"D\"**: 默认设置(如果方法槽被设置为NULL)" + +#: ../../c-api/typeobj.rst:172 +msgid "**\"I\"**: inheritance" +msgstr "**\"I\"**: 继承" + +#: ../../c-api/typeobj.rst:181 +msgid "" +"Note that some slots are effectively inherited through the normal attribute " +"lookup chain." +msgstr "注意,有些方法槽是通过普通属性查找链有效继承的。" + +#: ../../c-api/typeobj.rst:187 +msgid "sub-slots" +msgstr "子槽位" + +#: ../../c-api/typeobj.rst:193 +msgid "Slot" +msgstr "槽位" + +#: ../../c-api/typeobj.rst:193 +msgid "special methods" +msgstr "特殊方法" + +#: ../../c-api/typeobj.rst:196 +msgid ":c:member:`~PyAsyncMethods.am_await`" +msgstr ":c:member:`~PyAsyncMethods.am_await`" + +#: ../../c-api/typeobj.rst:196 ../../c-api/typeobj.rst:198 +#: ../../c-api/typeobj.rst:200 ../../c-api/typeobj.rst:232 +#: ../../c-api/typeobj.rst:234 ../../c-api/typeobj.rst:236 +#: ../../c-api/typeobj.rst:240 ../../c-api/typeobj.rst:267 +#: ../../c-api/typeobj.rst:271 ../../c-api/typeobj.rst:281 +#: ../../c-api/typeobj.rst:421 +msgid ":c:type:`unaryfunc`" +msgstr ":c:type:`unaryfunc`" + +#: ../../c-api/typeobj.rst:196 +msgid "__await__" +msgstr "__await__" + +#: ../../c-api/typeobj.rst:198 +msgid ":c:member:`~PyAsyncMethods.am_aiter`" +msgstr ":c:member:`~PyAsyncMethods.am_aiter`" + +#: ../../c-api/typeobj.rst:198 +msgid "__aiter__" +msgstr "__aiter__" + +#: ../../c-api/typeobj.rst:200 +msgid ":c:member:`~PyAsyncMethods.am_anext`" +msgstr ":c:member:`~PyAsyncMethods.am_anext`" + +#: ../../c-api/typeobj.rst:200 +msgid "__anext__" +msgstr "__anext__" + +#: ../../c-api/typeobj.rst:204 +msgid ":c:member:`~PyNumberMethods.nb_add`" +msgstr ":c:member:`~PyNumberMethods.nb_add`" + +#: ../../c-api/typeobj.rst:204 ../../c-api/typeobj.rst:207 +#: ../../c-api/typeobj.rst:209 ../../c-api/typeobj.rst:212 +#: ../../c-api/typeobj.rst:214 ../../c-api/typeobj.rst:217 +#: ../../c-api/typeobj.rst:219 ../../c-api/typeobj.rst:222 +#: ../../c-api/typeobj.rst:224 ../../c-api/typeobj.rst:242 +#: ../../c-api/typeobj.rst:245 ../../c-api/typeobj.rst:247 +#: ../../c-api/typeobj.rst:250 ../../c-api/typeobj.rst:252 +#: ../../c-api/typeobj.rst:255 ../../c-api/typeobj.rst:257 +#: ../../c-api/typeobj.rst:260 ../../c-api/typeobj.rst:262 +#: ../../c-api/typeobj.rst:265 ../../c-api/typeobj.rst:273 +#: ../../c-api/typeobj.rst:275 ../../c-api/typeobj.rst:277 +#: ../../c-api/typeobj.rst:279 ../../c-api/typeobj.rst:283 +#: ../../c-api/typeobj.rst:286 ../../c-api/typeobj.rst:292 +#: ../../c-api/typeobj.rst:301 ../../c-api/typeobj.rst:312 +#: ../../c-api/typeobj.rst:425 +msgid ":c:type:`binaryfunc`" +msgstr ":c:type:`binaryfunc`" + +#: ../../c-api/typeobj.rst:204 +msgid "__add__ __radd__" +msgstr "__add__ __radd__" + +#: ../../c-api/typeobj.rst:207 +msgid ":c:member:`~PyNumberMethods.nb_inplace_add`" +msgstr ":c:member:`~PyNumberMethods.nb_inplace_add`" + +#: ../../c-api/typeobj.rst:207 ../../c-api/typeobj.rst:312 +msgid "__iadd__" +msgstr "__iadd__" + +#: ../../c-api/typeobj.rst:209 +msgid ":c:member:`~PyNumberMethods.nb_subtract`" +msgstr ":c:member:`~PyNumberMethods.nb_subtract`" + +#: ../../c-api/typeobj.rst:209 +msgid "__sub__ __rsub__" +msgstr "__sub__ __rsub__" + +#: ../../c-api/typeobj.rst:212 +msgid ":c:member:`~PyNumberMethods.nb_inplace_subtract`" +msgstr ":c:member:`~PyNumberMethods.nb_inplace_subtract`" + +#: ../../c-api/typeobj.rst:212 +msgid "__isub__" +msgstr "__isub__" + +#: ../../c-api/typeobj.rst:214 +msgid ":c:member:`~PyNumberMethods.nb_multiply`" +msgstr ":c:member:`~PyNumberMethods.nb_multiply`" + +#: ../../c-api/typeobj.rst:214 +msgid "__mul__ __rmul__" +msgstr "__mul__ __rmul__" + +#: ../../c-api/typeobj.rst:217 +msgid ":c:member:`~PyNumberMethods.nb_inplace_multiply`" +msgstr ":c:member:`~PyNumberMethods.nb_inplace_multiply`" + +#: ../../c-api/typeobj.rst:217 ../../c-api/typeobj.rst:314 +msgid "__imul__" +msgstr "__imul__" + +#: ../../c-api/typeobj.rst:219 +msgid ":c:member:`~PyNumberMethods.nb_remainder`" +msgstr ":c:member:`~PyNumberMethods.nb_remainder`" + +#: ../../c-api/typeobj.rst:219 +msgid "__mod__ __rmod__" +msgstr "__mod__ __rmod__" + +#: ../../c-api/typeobj.rst:222 +msgid ":c:member:`~PyNumberMethods.nb_inplace_remainder`" +msgstr ":c:member:`~PyNumberMethods.nb_inplace_remainder`" + +#: ../../c-api/typeobj.rst:222 +msgid "__imod__" +msgstr "__imod__" + +#: ../../c-api/typeobj.rst:224 +msgid ":c:member:`~PyNumberMethods.nb_divmod`" +msgstr ":c:member:`~PyNumberMethods.nb_divmod`" + +#: ../../c-api/typeobj.rst:224 +msgid "__divmod__ __rdivmod__" +msgstr "__divmod__ __rdivmod__" + +#: ../../c-api/typeobj.rst:227 +msgid ":c:member:`~PyNumberMethods.nb_power`" +msgstr ":c:member:`~PyNumberMethods.nb_power`" + +#: ../../c-api/typeobj.rst:227 +msgid "__pow__ __rpow__" +msgstr "__pow__ __rpow__" + +#: ../../c-api/typeobj.rst:230 +msgid ":c:member:`~PyNumberMethods.nb_inplace_power`" +msgstr ":c:member:`~PyNumberMethods.nb_inplace_power`" + +#: ../../c-api/typeobj.rst:230 +msgid "__ipow__" +msgstr "__ipow__" + +#: ../../c-api/typeobj.rst:232 +msgid ":c:member:`~PyNumberMethods.nb_negative`" +msgstr ":c:member:`~PyNumberMethods.nb_negative`" + +#: ../../c-api/typeobj.rst:232 +msgid "__neg__" +msgstr "__neg__" + +#: ../../c-api/typeobj.rst:234 +msgid ":c:member:`~PyNumberMethods.nb_positive`" +msgstr ":c:member:`~PyNumberMethods.nb_positive`" + +#: ../../c-api/typeobj.rst:234 +msgid "__pos__" +msgstr "__pos__" + +#: ../../c-api/typeobj.rst:236 +msgid ":c:member:`~PyNumberMethods.nb_absolute`" +msgstr ":c:member:`~PyNumberMethods.nb_absolute`" + +#: ../../c-api/typeobj.rst:236 +msgid "__abs__" +msgstr "__abs__" + +#: ../../c-api/typeobj.rst:238 +msgid ":c:member:`~PyNumberMethods.nb_bool`" +msgstr ":c:member:`~PyNumberMethods.nb_bool`" + +#: ../../c-api/typeobj.rst:238 +msgid "__bool__" +msgstr "__bool__" + +#: ../../c-api/typeobj.rst:240 +msgid ":c:member:`~PyNumberMethods.nb_invert`" +msgstr ":c:member:`~PyNumberMethods.nb_invert`" + +#: ../../c-api/typeobj.rst:240 +msgid "__invert__" +msgstr "__invert__" + +#: ../../c-api/typeobj.rst:242 +msgid ":c:member:`~PyNumberMethods.nb_lshift`" +msgstr ":c:member:`~PyNumberMethods.nb_lshift`" + +#: ../../c-api/typeobj.rst:242 +msgid "__lshift__ __rlshift__" +msgstr "__lshift__ __rlshift__" + +#: ../../c-api/typeobj.rst:245 +msgid ":c:member:`~PyNumberMethods.nb_inplace_lshift`" +msgstr ":c:member:`~PyNumberMethods.nb_inplace_lshift`" + +#: ../../c-api/typeobj.rst:245 +msgid "__ilshift__" +msgstr "__ilshift__" + +#: ../../c-api/typeobj.rst:247 +msgid ":c:member:`~PyNumberMethods.nb_rshift`" +msgstr ":c:member:`~PyNumberMethods.nb_rshift`" + +#: ../../c-api/typeobj.rst:247 +msgid "__rshift__ __rrshift__" +msgstr "__rshift__ __rrshift__" + +#: ../../c-api/typeobj.rst:250 +msgid ":c:member:`~PyNumberMethods.nb_inplace_rshift`" +msgstr ":c:member:`~PyNumberMethods.nb_inplace_rshift`" + +#: ../../c-api/typeobj.rst:250 +msgid "__irshift__" +msgstr "__irshift__" + +#: ../../c-api/typeobj.rst:252 +msgid ":c:member:`~PyNumberMethods.nb_and`" +msgstr ":c:member:`~PyNumberMethods.nb_and`" + +#: ../../c-api/typeobj.rst:252 +msgid "__and__ __rand__" +msgstr "__and__ __rand__" + +#: ../../c-api/typeobj.rst:255 +msgid ":c:member:`~PyNumberMethods.nb_inplace_and`" +msgstr ":c:member:`~PyNumberMethods.nb_inplace_and`" + +#: ../../c-api/typeobj.rst:255 +msgid "__iand__" +msgstr "__iand__" + +#: ../../c-api/typeobj.rst:257 +msgid ":c:member:`~PyNumberMethods.nb_xor`" +msgstr ":c:member:`~PyNumberMethods.nb_xor`" + +#: ../../c-api/typeobj.rst:257 +msgid "__xor__ __rxor__" +msgstr "__xor__ __rxor__" + +#: ../../c-api/typeobj.rst:260 +msgid ":c:member:`~PyNumberMethods.nb_inplace_xor`" +msgstr ":c:member:`~PyNumberMethods.nb_inplace_xor`" + +#: ../../c-api/typeobj.rst:260 +msgid "__ixor__" +msgstr "__ixor__" + +#: ../../c-api/typeobj.rst:262 +msgid ":c:member:`~PyNumberMethods.nb_or`" +msgstr ":c:member:`~PyNumberMethods.nb_or`" + +#: ../../c-api/typeobj.rst:262 +msgid "__or__ __ror__" +msgstr "__or__ __ror__" + +#: ../../c-api/typeobj.rst:265 +msgid ":c:member:`~PyNumberMethods.nb_inplace_or`" +msgstr ":c:member:`~PyNumberMethods.nb_inplace_or`" + +#: ../../c-api/typeobj.rst:265 +msgid "__ior__" +msgstr "__ior__" + +#: ../../c-api/typeobj.rst:267 +msgid ":c:member:`~PyNumberMethods.nb_int`" +msgstr ":c:member:`~PyNumberMethods.nb_int`" + +#: ../../c-api/typeobj.rst:267 +msgid "__int__" +msgstr "__int__" + +#: ../../c-api/typeobj.rst:269 +msgid ":c:member:`~PyNumberMethods.nb_reserved`" +msgstr ":c:member:`~PyNumberMethods.nb_reserved`" + +#: ../../c-api/typeobj.rst:269 ../../c-api/typeobj.rst:336 +#: ../../c-api/typeobj.rst:338 ../../c-api/typeobj.rst:0 +#: ../../c-api/typeobj.rst:0 ../../c-api/typeobj.rst:419 +msgid "void *" +msgstr "void *" + +#: ../../c-api/typeobj.rst:271 +msgid ":c:member:`~PyNumberMethods.nb_float`" +msgstr ":c:member:`~PyNumberMethods.nb_float`" + +#: ../../c-api/typeobj.rst:271 +msgid "__float__" +msgstr "__float__" + +#: ../../c-api/typeobj.rst:273 +msgid ":c:member:`~PyNumberMethods.nb_floor_divide`" +msgstr ":c:member:`~PyNumberMethods.nb_floor_divide`" + +#: ../../c-api/typeobj.rst:273 +msgid "__floordiv__" +msgstr "__floordiv__" + +#: ../../c-api/typeobj.rst:275 +msgid ":c:member:`~PyNumberMethods.nb_inplace_floor_divide`" +msgstr ":c:member:`~PyNumberMethods.nb_inplace_floor_divide`" + +#: ../../c-api/typeobj.rst:275 +msgid "__ifloordiv__" +msgstr "__ifloordiv__" + +#: ../../c-api/typeobj.rst:277 +msgid ":c:member:`~PyNumberMethods.nb_true_divide`" +msgstr ":c:member:`~PyNumberMethods.nb_true_divide`" + +#: ../../c-api/typeobj.rst:277 +msgid "__truediv__" +msgstr "__truediv__" + +#: ../../c-api/typeobj.rst:279 +msgid ":c:member:`~PyNumberMethods.nb_inplace_true_divide`" +msgstr ":c:member:`~PyNumberMethods.nb_inplace_true_divide`" + +#: ../../c-api/typeobj.rst:279 +msgid "__itruediv__" +msgstr "__itruediv__" + +#: ../../c-api/typeobj.rst:281 +msgid ":c:member:`~PyNumberMethods.nb_index`" +msgstr ":c:member:`~PyNumberMethods.nb_index`" + +#: ../../c-api/typeobj.rst:281 +msgid "__index__" +msgstr "__index__" + +#: ../../c-api/typeobj.rst:283 +msgid ":c:member:`~PyNumberMethods.nb_matrix_multiply`" +msgstr ":c:member:`~PyNumberMethods.nb_matrix_multiply`" + +#: ../../c-api/typeobj.rst:283 +msgid "__matmul__ __rmatmul__" +msgstr "__matmul__ __rmatmul__" + +#: ../../c-api/typeobj.rst:286 +msgid ":c:member:`~PyNumberMethods.nb_inplace_matrix_multiply`" +msgstr ":c:member:`~PyNumberMethods.nb_inplace_matrix_multiply`" + +#: ../../c-api/typeobj.rst:286 +msgid "__imatmul__" +msgstr "__imatmul__" + +#: ../../c-api/typeobj.rst:290 +msgid ":c:member:`~PyMappingMethods.mp_length`" +msgstr ":c:member:`~PyMappingMethods.mp_length`" + +#: ../../c-api/typeobj.rst:290 ../../c-api/typeobj.rst:299 +#: ../../c-api/typeobj.rst:406 +msgid ":c:type:`lenfunc`" +msgstr ":c:type:`lenfunc`" + +#: ../../c-api/typeobj.rst:290 ../../c-api/typeobj.rst:299 +msgid "__len__" +msgstr "__len__" + +#: ../../c-api/typeobj.rst:292 +msgid ":c:member:`~PyMappingMethods.mp_subscript`" +msgstr ":c:member:`~PyMappingMethods.mp_subscript`" + +#: ../../c-api/typeobj.rst:292 ../../c-api/typeobj.rst:305 +msgid "__getitem__" +msgstr "__getitem__" + +#: ../../c-api/typeobj.rst:294 +msgid ":c:member:`~PyMappingMethods.mp_ass_subscript`" +msgstr ":c:member:`~PyMappingMethods.mp_ass_subscript`" + +#: ../../c-api/typeobj.rst:294 ../../c-api/typeobj.rst:451 +msgid ":c:type:`objobjargproc`" +msgstr ":c:type:`objobjargproc`" + +#: ../../c-api/typeobj.rst:294 +msgid "__setitem__, __delitem__" +msgstr "__setitem__, __delitem__" + +#: ../../c-api/typeobj.rst:299 +msgid ":c:member:`~PySequenceMethods.sq_length`" +msgstr ":c:member:`~PySequenceMethods.sq_length`" + +#: ../../c-api/typeobj.rst:301 +msgid ":c:member:`~PySequenceMethods.sq_concat`" +msgstr ":c:member:`~PySequenceMethods.sq_concat`" + +#: ../../c-api/typeobj.rst:301 +msgid "__add__" +msgstr "__add__" + +#: ../../c-api/typeobj.rst:303 +msgid ":c:member:`~PySequenceMethods.sq_repeat`" +msgstr ":c:member:`~PySequenceMethods.sq_repeat`" + +#: ../../c-api/typeobj.rst:303 ../../c-api/typeobj.rst:305 +#: ../../c-api/typeobj.rst:314 ../../c-api/typeobj.rst:436 +msgid ":c:type:`ssizeargfunc`" +msgstr ":c:type:`ssizeargfunc`" + +#: ../../c-api/typeobj.rst:303 +msgid "__mul__" +msgstr "__mul__" + +#: ../../c-api/typeobj.rst:305 +msgid ":c:member:`~PySequenceMethods.sq_item`" +msgstr ":c:member:`~PySequenceMethods.sq_item`" + +#: ../../c-api/typeobj.rst:307 +msgid ":c:member:`~PySequenceMethods.sq_ass_item`" +msgstr ":c:member:`~PySequenceMethods.sq_ass_item`" + +#: ../../c-api/typeobj.rst:307 ../../c-api/typeobj.rst:441 +msgid ":c:type:`ssizeobjargproc`" +msgstr ":c:type:`ssizeobjargproc`" + +#: ../../c-api/typeobj.rst:307 +msgid "__setitem__ __delitem__" +msgstr "__setitem__ __delitem__" + +#: ../../c-api/typeobj.rst:310 +msgid ":c:member:`~PySequenceMethods.sq_contains`" +msgstr ":c:member:`~PySequenceMethods.sq_contains`" + +#: ../../c-api/typeobj.rst:310 ../../c-api/typeobj.rst:446 +msgid ":c:type:`objobjproc`" +msgstr ":c:type:`objobjproc`" + +#: ../../c-api/typeobj.rst:310 +msgid "__contains__" +msgstr "__contains__" + +#: ../../c-api/typeobj.rst:312 +msgid ":c:member:`~PySequenceMethods.sq_inplace_concat`" +msgstr ":c:member:`~PySequenceMethods.sq_inplace_concat`" + +#: ../../c-api/typeobj.rst:314 +msgid ":c:member:`~PySequenceMethods.sq_inplace_repeat`" +msgstr ":c:member:`~PySequenceMethods.sq_inplace_repeat`" + +#: ../../c-api/typeobj.rst:318 +msgid ":c:member:`~PyBufferProcs.bf_getbuffer`" +msgstr ":c:member:`~PyBufferProcs.bf_getbuffer`" + +#: ../../c-api/typeobj.rst:318 +msgid ":c:func:`getbufferproc`" +msgstr ":c:func:`getbufferproc`" + +#: ../../c-api/typeobj.rst:320 +msgid ":c:member:`~PyBufferProcs.bf_releasebuffer`" +msgstr ":c:member:`~PyBufferProcs.bf_releasebuffer`" + +#: ../../c-api/typeobj.rst:320 +msgid ":c:func:`releasebufferproc`" +msgstr ":c:func:`releasebufferproc`" + +#: ../../c-api/typeobj.rst:326 +msgid "slot typedefs" +msgstr "槽位 typedef" + +#: ../../c-api/typeobj.rst:329 +msgid "typedef" +msgstr "typedef" + +#: ../../c-api/typeobj.rst:329 +msgid "Parameter Types" +msgstr "参数类型" + +#: ../../c-api/typeobj.rst:329 +msgid "Return Type" +msgstr "返回类型" + +#: ../../c-api/typeobj.rst:336 ../../c-api/typeobj.rst:338 +#: ../../c-api/typeobj.rst:414 +msgid "void" +msgstr "void" + +#: ../../c-api/typeobj.rst:0 +msgid ":c:type:`visitproc`" +msgstr ":c:type:`visitproc`" + +#: ../../c-api/typeobj.rst:340 ../../c-api/typeobj.rst:352 +#: ../../c-api/typeobj.rst:365 ../../c-api/typeobj.rst:376 +#: ../../c-api/typeobj.rst:388 ../../c-api/typeobj.rst:0 +#: ../../c-api/typeobj.rst:0 ../../c-api/typeobj.rst:408 +#: ../../c-api/typeobj.rst:419 ../../c-api/typeobj.rst:441 +#: ../../c-api/typeobj.rst:446 ../../c-api/typeobj.rst:451 +msgid "int" +msgstr "int" + +#: ../../c-api/typeobj.rst:394 +msgid "Py_hash_t" +msgstr "Py_hash_t" + +#: ../../c-api/typeobj.rst:408 +msgid ":c:type:`getbufferproc`" +msgstr ":c:type:`getbufferproc`" + +#: ../../c-api/typeobj.rst:0 ../../c-api/typeobj.rst:0 +msgid ":c:type:`Py_buffer` *" +msgstr ":c:type:`Py_buffer` *" + +#: ../../c-api/typeobj.rst:414 +msgid ":c:type:`releasebufferproc`" +msgstr ":c:type:`releasebufferproc`" + +#: ../../c-api/typeobj.rst:458 +msgid "See :ref:`slot-typedefs` below for more detail." +msgstr "请参阅 :ref:`slot-typedefs` 里有更多详细信息。" + +#: ../../c-api/typeobj.rst:462 +msgid "PyTypeObject Definition" +msgstr "PyTypeObject 定义" + +#: ../../c-api/typeobj.rst:464 +msgid "" +"The structure definition for :c:type:`PyTypeObject` can be found in " +":file:`Include/object.h`. For convenience of reference, this repeats the " +"definition found there:" +msgstr "" +":c:type:`PyTypeObject` 的结构定义可以在 :file:`Include/object.h` 中找到。 " +"为了方便参考,此处复述了其中的定义:" + +#: ../../c-api/typeobj.rst:474 +msgid "PyObject Slots" +msgstr "PyObject 槽位" + +#: ../../c-api/typeobj.rst:476 +msgid "" +"The type object structure extends the :c:type:`PyVarObject` structure. The " +":attr:`ob_size` field is used for dynamic types (created by " +":func:`type_new`, usually called from a class statement). Note that " +":c:data:`PyType_Type` (the metatype) initializes " +":c:member:`~PyTypeObject.tp_itemsize`, which means that its instances (i.e. " +"type objects) *must* have the :attr:`ob_size` field." +msgstr "" +"类型对象结构扩展了 :c:type:`PyVarObject` 结构。 :attr:`ob_size` 字段用于动态类型 (由 " +":func:`type_new` 创建,通常通过 类 语句来调用)。 注意 :c:data:`PyType_Type` (元类型) 会初始化 " +":c:member:`~PyTypeObject.tp_itemsize`,这意味着它的实例 (即类型对象) *必须* 具有 " +":attr:`ob_size` 字段。" + +#: ../../c-api/typeobj.rst:486 +msgid "" +"These fields are only present when the macro ``Py_TRACE_REFS`` is defined. " +"Their initialization to ``NULL`` is taken care of by the " +"``PyObject_HEAD_INIT`` macro. For statically allocated objects, these " +"fields always remain ``NULL``. For dynamically allocated objects, these two " +"fields are used to link the object into a doubly-linked list of *all* live " +"objects on the heap. This could be used for various debugging purposes; " +"currently the only use is to print the objects that are still alive at the " +"end of a run when the environment variable :envvar:`PYTHONDUMPREFS` is set." +msgstr "" + +#: ../../c-api/typeobj.rst:495 ../../c-api/typeobj.rst:508 +#: ../../c-api/typeobj.rst:531 ../../c-api/typeobj.rst:544 +#: ../../c-api/typeobj.rst:586 ../../c-api/typeobj.rst:629 +#: ../../c-api/typeobj.rst:687 ../../c-api/typeobj.rst:731 +#: ../../c-api/typeobj.rst:750 ../../c-api/typeobj.rst:767 +#: ../../c-api/typeobj.rst:785 ../../c-api/typeobj.rst:809 +#: ../../c-api/typeobj.rst:826 ../../c-api/typeobj.rst:838 +#: ../../c-api/typeobj.rst:850 ../../c-api/typeobj.rst:883 +#: ../../c-api/typeobj.rst:901 ../../c-api/typeobj.rst:921 +#: ../../c-api/typeobj.rst:942 ../../c-api/typeobj.rst:968 +#: ../../c-api/typeobj.rst:987 ../../c-api/typeobj.rst:1003 +#: ../../c-api/typeobj.rst:1040 ../../c-api/typeobj.rst:1051 +#: ../../c-api/typeobj.rst:1061 ../../c-api/typeobj.rst:1071 +#: ../../c-api/typeobj.rst:1085 ../../c-api/typeobj.rst:1104 +#: ../../c-api/typeobj.rst:1127 ../../c-api/typeobj.rst:1174 +#: ../../c-api/typeobj.rst:1189 ../../c-api/typeobj.rst:1257 +#: ../../c-api/typeobj.rst:1324 ../../c-api/typeobj.rst:1383 +#: ../../c-api/typeobj.rst:1413 ../../c-api/typeobj.rst:1445 +#: ../../c-api/typeobj.rst:1468 ../../c-api/typeobj.rst:1481 +#: ../../c-api/typeobj.rst:1496 ../../c-api/typeobj.rst:1510 +#: ../../c-api/typeobj.rst:1540 ../../c-api/typeobj.rst:1560 +#: ../../c-api/typeobj.rst:1586 ../../c-api/typeobj.rst:1604 +#: ../../c-api/typeobj.rst:1644 ../../c-api/typeobj.rst:1695 +#: ../../c-api/typeobj.rst:1712 ../../c-api/typeobj.rst:1750 +#: ../../c-api/typeobj.rst:1771 ../../c-api/typeobj.rst:1803 +#: ../../c-api/typeobj.rst:1820 ../../c-api/typeobj.rst:1831 +#: ../../c-api/typeobj.rst:1841 ../../c-api/typeobj.rst:1850 +#: ../../c-api/typeobj.rst:1860 ../../c-api/typeobj.rst:1874 +#: ../../c-api/typeobj.rst:1923 ../../c-api/typeobj.rst:1940 +msgid "**Inheritance:**" +msgstr "**继承:**" + +#: ../../c-api/typeobj.rst:497 +msgid "These fields are not inherited by subtypes." +msgstr "这些字段不会被子类型继承。" + +#: ../../c-api/typeobj.rst:502 +msgid "" +"This is the type object's reference count, initialized to ``1`` by the " +"``PyObject_HEAD_INIT`` macro. Note that for statically allocated type " +"objects, the type's instances (objects whose :attr:`ob_type` points back to " +"the type) do *not* count as references. But for dynamically allocated type " +"objects, the instances *do* count as references." +msgstr "" +"这是类型对象的引用计数,由 ``PyObject_HEAD_INIT`` 宏初始化为 ``1``。 请注意对于静态分配的类型对象 (对象的 " +":attr:`ob_type` 指回该类型) *不会* 被加入引用计数。 但对于动态分配的类型对象,实例 *确实* 会被算作引用。" + +#: ../../c-api/typeobj.rst:510 ../../c-api/typeobj.rst:546 +#: ../../c-api/typeobj.rst:588 +msgid "This field is not inherited by subtypes." +msgstr "子类型不继承此字段。" + +#: ../../c-api/typeobj.rst:515 +msgid "" +"This is the type's type, in other words its metatype. It is initialized by " +"the argument to the ``PyObject_HEAD_INIT`` macro, and its value should " +"normally be ``&PyType_Type``. However, for dynamically loadable extension " +"modules that must be usable on Windows (at least), the compiler complains " +"that this is not a valid initializer. Therefore, the convention is to pass " +"``NULL`` to the ``PyObject_HEAD_INIT`` macro and to initialize this field " +"explicitly at the start of the module's initialization function, before " +"doing anything else. This is typically done like this::" +msgstr "" +"这是类型的类型,换句话说就是元类型,它由宏 ``PyObject_HEAD_INIT`` 的参数来做初始化,它的值一般情况下是 " +"``&PyType_Type`` 。可是为了使动态可载入扩展模块至少在Windows上可用,编译器会报错这是一个不可用的初始化。因此按照惯例传递 " +"``NULL`` 给宏 ``PyObject_HEAD_INIT`` 并且在模块的初始化函数开始时候其他任何操作之前初始化这个字段。典型做法是这样的:" + +#: ../../c-api/typeobj.rst:526 +msgid "" +"This should be done before any instances of the type are created. " +":c:func:`PyType_Ready` checks if :attr:`ob_type` is ``NULL``, and if so, " +"initializes it to the :attr:`ob_type` field of the base class. " +":c:func:`PyType_Ready` will not change this field if it is non-zero." +msgstr "" +"这应该在创建该类型的任何实例之前完成。:c:func:`PyType_Ready` 检查 :attr:`ob_type` 是否为 " +"``NULL``,如果是,则用基类的 :attr:`ob_type` 字段初始化它。如果该字段非零,则 :c:func:`PyType_Ready` " +"不会更改它。" + +#: ../../c-api/typeobj.rst:533 ../../c-api/typeobj.rst:689 +#: ../../c-api/typeobj.rst:811 ../../c-api/typeobj.rst:903 +#: ../../c-api/typeobj.rst:923 ../../c-api/typeobj.rst:1447 +#: ../../c-api/typeobj.rst:1470 ../../c-api/typeobj.rst:1588 +#: ../../c-api/typeobj.rst:1606 ../../c-api/typeobj.rst:1697 +#: ../../c-api/typeobj.rst:1805 ../../c-api/typeobj.rst:1925 +msgid "This field is inherited by subtypes." +msgstr "此字段会被子类型继承。" + +#: ../../c-api/typeobj.rst:537 +msgid "PyVarObject Slots" +msgstr "PyVarObject 槽位" + +#: ../../c-api/typeobj.rst:541 +msgid "" +"For statically allocated type objects, this should be initialized to zero. " +"For dynamically allocated type objects, this field has a special internal " +"meaning." +msgstr "" + +#: ../../c-api/typeobj.rst:550 +msgid "PyTypeObject Slots" +msgstr "PyTypeObject 槽" + +#: ../../c-api/typeobj.rst:552 +msgid "" +"Each slot has a section describing inheritance. If :c:func:`PyType_Ready` " +"may set a value when the field is set to ``NULL`` then there will also be a " +"\"Default\" section. (Note that many fields set on " +":c:type:`PyBaseObject_Type` and :c:type:`PyType_Type` effectively act as " +"defaults.)" +msgstr "" +"每个槽位都有一个部分来描述继承关系。如果 :c:func:`PyType_Ready` 会在该字段为 ``NULL`` " +"时设置它的值,那么也会有一个“默认”部分。(注意,在 :c:type:`PyBaseObject_Type` 和 " +":c:type:`PyType_Type` 中设置的许多字段实际上就是默认值。)" + +#: ../../c-api/typeobj.rst:559 +msgid "" +"Pointer to a NUL-terminated string containing the name of the type. For " +"types that are accessible as module globals, the string should be the full " +"module name, followed by a dot, followed by the type name; for built-in " +"types, it should be just the type name. If the module is a submodule of a " +"package, the full package name is part of the full module name. For " +"example, a type named :class:`T` defined in module :mod:`M` in subpackage " +":mod:`Q` in package :mod:`P` should have the " +":c:member:`~PyTypeObject.tp_name` initializer ``\"P.Q.M.T\"``." +msgstr "" +"指针,指向以 NULL " +"结尾的表示类型名称的字符串。对于可以作为模块的全局变量访问的类型,字符串应该是完整的模块名,后跟一个点,再后跟类型名。对于内置类型,字符串应该只是类型名。如果模块是包的子模块,则完整的包名是完整的模块名的一部分。例如,包" +" :mod:`P` 的子包 :mod:`Q` 的模块 :mod:`M` 中定义的类型 :class:`T` 的 " +":c:member:`~PyTypeObject.tp_name` 应该初始化为 ``\"P.Q.M.T\"``。" + +#: ../../c-api/typeobj.rst:567 +msgid "" +"For dynamically allocated type objects, this should just be the type name, " +"and the module name explicitly stored in the type dict as the value for key " +"``'__module__'``." +msgstr "" + +#: ../../c-api/typeobj.rst:571 +msgid "" +"For statically allocated type objects, the tp_name field should contain a " +"dot. Everything before the last dot is made accessible as the " +":attr:`__module__` attribute, and everything after the last dot is made " +"accessible as the :attr:`~definition.__name__` attribute." +msgstr "" + +#: ../../c-api/typeobj.rst:576 +msgid "" +"If no dot is present, the entire :c:member:`~PyTypeObject.tp_name` field is " +"made accessible as the :attr:`~definition.__name__` attribute, and the " +":attr:`__module__` attribute is undefined (unless explicitly set in the " +"dictionary, as explained above). This means your type will be impossible to" +" pickle. Additionally, it will not be listed in module documentations " +"created with pydoc." +msgstr "" +"如果不存在点号,则整个 :c:member:`~PyTypeObject.tp_name` 字段将作为 " +":attr:`~definition.__name__` 属性访问,而 :attr:`__module__` " +"属性则将是未定义的(除非在字典中显式地设置,如上文所述)。 这意味着你的类型将无法执行 pickle。 此外,用 pydoc " +"创建的模块文档中也不会列出该类型。" + +#: ../../c-api/typeobj.rst:582 +msgid "" +"This field must not be ``NULL``. It is the only required field in " +":c:func:`PyTypeObject` (other than potentially " +":c:member:`~PyTypeObject.tp_itemsize`)." +msgstr "" +"该字段不可为 ``NULL``。 它是 :c:func:`PyTypeObject` 中唯一的必填字段(除了潜在的 " +":c:member:`~PyTypeObject.tp_itemsize` 以外)。" + +#: ../../c-api/typeobj.rst:594 +msgid "" +"These fields allow calculating the size in bytes of instances of the type." +msgstr "通过这些字段可以计算出该类型实例以字节为单位的大小。" + +#: ../../c-api/typeobj.rst:596 +msgid "" +"There are two kinds of types: types with fixed-length instances have a zero " +":c:member:`~PyTypeObject.tp_itemsize` field, types with variable-length " +"instances have a non-zero :c:member:`~PyTypeObject.tp_itemsize` field. For " +"a type with fixed-length instances, all instances have the same size, given " +"in :c:member:`~PyTypeObject.tp_basicsize`." +msgstr "" +"存在两种类型:具有固定长度实例的类型其 :c:member:`~PyTypeObject.tp_itemsize` 字段为零;具有可变长度实例的类型其 " +":c:member:`~PyTypeObject.tp_itemsize` 字段不为零。 对于具有固定长度实例的类型,所有实例的大小都相同,具体大小由 " +":c:member:`~PyTypeObject.tp_basicsize` 给出。" + +#: ../../c-api/typeobj.rst:601 +msgid "" +"For a type with variable-length instances, the instances must have an " +":attr:`ob_size` field, and the instance size is " +":c:member:`~PyTypeObject.tp_basicsize` plus N times " +":c:member:`~PyTypeObject.tp_itemsize`, where N is the \"length\" of the " +"object. The value of N is typically stored in the instance's " +":attr:`ob_size` field. There are exceptions: for example, ints use a " +"negative :attr:`ob_size` to indicate a negative number, and N is " +"``abs(ob_size)`` there. Also, the presence of an :attr:`ob_size` field in " +"the instance layout doesn't mean that the instance structure is variable-" +"length (for example, the structure for the list type has fixed-length " +"instances, yet those instances have a meaningful :attr:`ob_size` field)." +msgstr "" + +#: ../../c-api/typeobj.rst:612 +msgid "" +"The basic size includes the fields in the instance declared by the macro " +":c:macro:`PyObject_HEAD` or :c:macro:`PyObject_VAR_HEAD` (whichever is used " +"to declare the instance struct) and this in turn includes the " +":attr:`_ob_prev` and :attr:`_ob_next` fields if they are present. This " +"means that the only correct way to get an initializer for the " +":c:member:`~PyTypeObject.tp_basicsize` is to use the ``sizeof`` operator on " +"the struct used to declare the instance layout. The basic size does not " +"include the GC header size." +msgstr "" + +#: ../../c-api/typeobj.rst:620 +msgid "" +"A note about alignment: if the variable items require a particular " +"alignment, this should be taken care of by the value of " +":c:member:`~PyTypeObject.tp_basicsize`. Example: suppose a type implements " +"an array of ``double``. :c:member:`~PyTypeObject.tp_itemsize` is " +"``sizeof(double)``. It is the programmer's responsibility that " +":c:member:`~PyTypeObject.tp_basicsize` is a multiple of ``sizeof(double)`` " +"(assuming this is the alignment requirement for ``double``)." +msgstr "" +"关于对齐的说明:如果变量条目需要特定的对齐,则应通过 :c:member:`~PyTypeObject.tp_basicsize` 的值来处理。 " +"例如:假设某个类型实现了一个 ``double`` 数组。 :c:member:`~PyTypeObject.tp_itemsize` 就是 " +"``sizeof(double)``。 程序员有责任确保 :c:member:`~PyTypeObject.tp_basicsize` 是 " +"``sizeof(double)`` 的倍数(假设这是 ``double`` 的对齐要求)。" + +#: ../../c-api/typeobj.rst:627 +msgid "" +"For any type with variable-length instances, this field must not be " +"``NULL``." +msgstr "对于任何具有可变长度实例的类型,该字段不可为 ``NULL``。" + +#: ../../c-api/typeobj.rst:631 +msgid "" +"These fields are inherited separately by subtypes. If the base type has a " +"non-zero :c:member:`~PyTypeObject.tp_itemsize`, it is generally not safe to " +"set :c:member:`~PyTypeObject.tp_itemsize` to a different non-zero value in a" +" subtype (though this depends on the implementation of the base type)." +msgstr "" +"这些字段将由子类分别继承。 如果基本类型有一个非零的 :c:member:`~PyTypeObject.tp_itemsize`,那么在子类型中将 " +":c:member:`~PyTypeObject.tp_itemsize` 设置为不同的非零值通常是不安全的(不过这取决于该基本类型的具体实现)。" + +#: ../../c-api/typeobj.rst:639 +msgid "" +"A pointer to the instance destructor function. This function must be " +"defined unless the type guarantees that its instances will never be " +"deallocated (as is the case for the singletons ``None`` and ``Ellipsis``). " +"The function signature is::" +msgstr "" +"指向实例析构函数的指针。除非保证类型的实例永远不会被释放(就像单例对象 ``None`` 和 ``Ellipsis`` " +"那样),否则必须定义这个函数。函数声明如下:" + +#: ../../c-api/typeobj.rst:645 +msgid "" +"The destructor function is called by the :c:func:`Py_DECREF` and " +":c:func:`Py_XDECREF` macros when the new reference count is zero. At this " +"point, the instance is still in existence, but there are no references to " +"it. The destructor function should free all references which the instance " +"owns, free all memory buffers owned by the instance (using the freeing " +"function corresponding to the allocation function used to allocate the " +"buffer), and call the type's :c:member:`~PyTypeObject.tp_free` function. If" +" the type is not subtypable (doesn't have the :const:`Py_TPFLAGS_BASETYPE` " +"flag bit set), it is permissible to call the object deallocator directly " +"instead of via :c:member:`~PyTypeObject.tp_free`. The object deallocator " +"should be the one used to allocate the instance; this is normally " +":c:func:`PyObject_Del` if the instance was allocated using " +":c:func:`PyObject_New` or :c:func:`PyObject_VarNew`, or " +":c:func:`PyObject_GC_Del` if the instance was allocated using " +":c:func:`PyObject_GC_New` or :c:func:`PyObject_GC_NewVar`." +msgstr "" +"当引用计数为0时,由 :c:func:`Py_DECREF` 和 :c:func:`Py_XDECREF` " +"宏调用析构函数。此时,实例仍然存在,但已经没有了对它的引用。析构函数应该释放该实例拥有的所有引用,释放该实例拥有的所有内存缓冲区(通过分配内存对应的释放函数),并调用该类型的" +" :c:member:`~PyTypeObject.tp_free` 函数。如果该类型不可子类型化(没有设置 " +":const:`Py_TPFLAGS_BASETYPE` 标志位),则允许直接调用对象的释放函数,不必调用 " +":c:member:`~PyTypeObject.tp_free`。对象的释放函数应该与分配函数对应:如果使用 " +":c:func:`PyObject_New` 或 :c:func:`PyObject_VarNew` 分配,通常为 " +":c:func:`PyObject_Del`;如果使用 :c:func:`PyObject_GC_New` 或 " +":c:func:`PyObject_GC_NewVar` 分配,通常为 :c:func:`PyObject_GC_Del`。" + +#: ../../c-api/typeobj.rst:660 +msgid "" +"If the type supports garbage collection (has the :const:`Py_TPFLAGS_HAVE_GC`" +" flag bit set), the destructor should call :c:func:`PyObject_GC_UnTrack` " +"before clearing any member fields." +msgstr "" +"如果该类型支持垃圾回收(设置了 :const:`Py_TPFLAGS_HAVE_GC` 标志位),析构器应该在清理任何成员字段之前调用 " +":c:func:`PyObject_GC_UnTrack`。" + +#: ../../c-api/typeobj.rst:672 +msgid "" +"Finally, if the type is heap allocated (:const:`Py_TPFLAGS_HEAPTYPE`), the " +"deallocator should decrement the reference count for its type object after " +"calling the type deallocator. In order to avoid dangling pointers, the " +"recommended way to achieve this is:" +msgstr "" +"最后,如果该类型是在堆上分配的(:const:`Py_TPFLAGS_HEAPTYPE`),释放器应该在调用类型释放器后减少类型对象的引用计数。为了避免空悬指针,建议的实现方法为:" + +#: ../../c-api/typeobj.rst:694 +msgid "" +"An optional offset to a per-instance function that implements calling the " +"object using the :ref:`vectorcall protocol `, a more efficient " +"alternative of the simpler :c:member:`~PyTypeObject.tp_call`." +msgstr "" +"一个相对使用 :ref:`vectorcall 协议 ` 实现调用对象的实例级函数的可选的偏移量,这是一种比简单的 " +":c:member:`~PyTypeObject.tp_call` 更有效的替代选择。" + +#: ../../c-api/typeobj.rst:699 +msgid "" +"This field is only used if the flag :const:`Py_TPFLAGS_HAVE_VECTORCALL` is " +"set. If so, this must be a positive integer containing the offset in the " +"instance of a :c:type:`vectorcallfunc` pointer." +msgstr "" + +#: ../../c-api/typeobj.rst:703 +msgid "" +"The *vectorcallfunc* pointer may be ``NULL``, in which case the instance " +"behaves as if :const:`Py_TPFLAGS_HAVE_VECTORCALL` was not set: calling the " +"instance falls back to :c:member:`~PyTypeObject.tp_call`." +msgstr "" + +#: ../../c-api/typeobj.rst:707 +msgid "" +"Any class that sets ``Py_TPFLAGS_HAVE_VECTORCALL`` must also set " +":c:member:`~PyTypeObject.tp_call` and make sure its behaviour is consistent " +"with the *vectorcallfunc* function. This can be done by setting *tp_call* to" +" :c:func:`PyVectorcall_Call`." +msgstr "" +"任何设置了 ``Py_TPFLAGS_HAVE_VECTORCALL`` 的类也必须设置 " +":c:member:`~PyTypeObject.tp_call` 并确保其行为与 *vectorcallfunc* 函数一致。 这可以通过将 " +"*tp_call* 设为 :c:func:`PyVectorcall_Call` 来实现。" + +#: ../../c-api/typeobj.rst:714 +msgid "" +"It is not recommended for :ref:`heap types ` to implement the " +"vectorcall protocol. When a user sets :attr:`__call__` in Python code, only " +"*tp_call* is updated, likely making it inconsistent with the vectorcall " +"function." +msgstr "" + +#: ../../c-api/typeobj.rst:721 +msgid "" +"The semantics of the ``tp_vectorcall_offset`` slot are provisional and " +"expected to be finalized in Python 3.9. If you use vectorcall, plan for " +"updating your code for Python 3.9." +msgstr "" + +#: ../../c-api/typeobj.rst:727 +msgid "" +"Before version 3.8, this slot was named ``tp_print``. In Python 2.x, it was " +"used for printing to a file. In Python 3.0 to 3.7, it was unused." +msgstr "" +"在 3.8 版之前,这个槽位被命名为 ``tp_print``。 在 Python 2.x 中,它被用于打印到文件。 在 Python 3.0 至 " +"3.7 中,它没有被使用。" + +#: ../../c-api/typeobj.rst:733 +msgid "" +"This field is always inherited. However, the " +":const:`Py_TPFLAGS_HAVE_VECTORCALL` flag is not always inherited. If it's " +"not, then the subclass won't use :ref:`vectorcall `, except when" +" :c:func:`PyVectorcall_Call` is explicitly called. This is in particular the" +" case for `heap types`_ (including subclasses defined in Python)." +msgstr "" + +#: ../../c-api/typeobj.rst:744 +msgid "An optional pointer to the get-attribute-string function." +msgstr "一个指向获取属性字符串函数的可选指针。" + +#: ../../c-api/typeobj.rst:746 +msgid "" +"This field is deprecated. When it is defined, it should point to a function" +" that acts the same as the :c:member:`~PyTypeObject.tp_getattro` function, " +"but taking a C string instead of a Python string object to give the " +"attribute name." +msgstr "" +"该字段已弃用。当它被定义时,应该和 :c:member:`~PyTypeObject.tp_getattro` " +"指向同一个函数,但接受一个C字符串参数表示属性名,而不是Python字符串对象。" + +#: ../../c-api/typeobj.rst:752 ../../c-api/typeobj.rst:944 +msgid "Group: :attr:`tp_getattr`, :attr:`tp_getattro`" +msgstr "分组: :attr:`tp_getattr`, :attr:`tp_getattro`" + +#: ../../c-api/typeobj.rst:754 +msgid "" +"This field is inherited by subtypes together with " +":c:member:`~PyTypeObject.tp_getattro`: a subtype inherits both " +":c:member:`~PyTypeObject.tp_getattr` and " +":c:member:`~PyTypeObject.tp_getattro` from its base type when the subtype's " +":c:member:`~PyTypeObject.tp_getattr` and " +":c:member:`~PyTypeObject.tp_getattro` are both ``NULL``." +msgstr "" +"该字段会被子类和 :c:member:`~PyTypeObject.tp_getattro` 所继承:当子类型的 " +":c:member:`~PyTypeObject.tp_getattr` 和 :c:member:`~PyTypeObject.tp_getattro`" +" 均为 ``NULL`` 时该子类型将从它的基类型同时继承 :c:member:`~PyTypeObject.tp_getattr` 和 " +":c:member:`~PyTypeObject.tp_getattro`。" + +#: ../../c-api/typeobj.rst:761 ../../c-api/typeobj.rst:957 +msgid "" +"An optional pointer to the function for setting and deleting attributes." +msgstr "一个指向函数以便设置和删除属性的可选指针。" + +#: ../../c-api/typeobj.rst:763 +msgid "" +"This field is deprecated. When it is defined, it should point to a function" +" that acts the same as the :c:member:`~PyTypeObject.tp_setattro` function, " +"but taking a C string instead of a Python string object to give the " +"attribute name." +msgstr "" +"该字段已弃用。当它被定义时,应该和 :c:member:`~PyTypeObject.tp_setattro` " +"指向同一个函数,但接受一个C字符串参数表示属性名,而不是Python字符串对象。" + +#: ../../c-api/typeobj.rst:769 ../../c-api/typeobj.rst:970 +msgid "Group: :attr:`tp_setattr`, :attr:`tp_setattro`" +msgstr "分组: :attr:`tp_setattr`, :attr:`tp_setattro`" + +#: ../../c-api/typeobj.rst:771 +msgid "" +"This field is inherited by subtypes together with " +":c:member:`~PyTypeObject.tp_setattro`: a subtype inherits both " +":c:member:`~PyTypeObject.tp_setattr` and " +":c:member:`~PyTypeObject.tp_setattro` from its base type when the subtype's " +":c:member:`~PyTypeObject.tp_setattr` and " +":c:member:`~PyTypeObject.tp_setattro` are both ``NULL``." +msgstr "" +"该字段会被子类型和 :c:member:`~PyTypeObject.tp_setattro` 所继承:当子类型的 " +":c:member:`~PyTypeObject.tp_setattr` 和 :c:member:`~PyTypeObject.tp_setattro`" +" 均为 ``NULL`` 时该子类型将同时从它的基类型继承 :c:member:`~PyTypeObject.tp_setattr` 和 " +":c:member:`~PyTypeObject.tp_setattro`。" + +#: ../../c-api/typeobj.rst:778 +msgid "" +"Pointer to an additional structure that contains fields relevant only to " +"objects which implement :term:`awaitable` and :term:`asynchronous iterator` " +"protocols at the C-level. See :ref:`async-structs` for details." +msgstr "" +"指向一个包含仅与在 C 层级上实现 :term:`awaitable` 和 :term:`asynchronous iterator` " +"协议的对象相关联的字段的附加结构体。 请参阅 :ref:`async-structs` 了解详情。" + +#: ../../c-api/typeobj.rst:782 +msgid "Formerly known as ``tp_compare`` and ``tp_reserved``." +msgstr "在之前被称为 ``tp_compare`` 和 ``tp_reserved``。" + +#: ../../c-api/typeobj.rst:787 +msgid "" +"The :c:member:`~PyTypeObject.tp_as_async` field is not inherited, but the " +"contained fields are inherited individually." +msgstr ":c:member:`~PyTypeObject.tp_as_async` 字段不会被继承,但所包含的字段会被单独继承。" + +#: ../../c-api/typeobj.rst:795 +msgid "" +"An optional pointer to a function that implements the built-in function " +":func:`repr`." +msgstr "一个实现了内置函数 :func:`repr` 的函数的可选指针。" + +#: ../../c-api/typeobj.rst:798 +msgid "The signature is the same as for :c:func:`PyObject_Repr`::" +msgstr "该签名与 :c:func:`PyObject_Repr` 的相同::" + +#: ../../c-api/typeobj.rst:802 +msgid "" +"The function must return a string or a Unicode object. Ideally, this " +"function should return a string that, when passed to :func:`eval`, given a " +"suitable environment, returns an object with the same value. If this is not" +" feasible, it should return a string starting with ``'<'`` and ending with " +"``'>'`` from which both the type and the value of the object can be deduced." +msgstr "" +"该函数必须返回一个字符串或 Unicode 对象。 在理想情况下,该函数应当返回一个字符串,当将其传给 :func:`eval` " +"时,只要有合适的环境,就会返回一个具有相同值的对象。 如果这不可行,则它应当返回一个以 ``'<'`` 开头并以 ``'>'`` " +"结尾的可被用来推断出对象的类型和值的字符串。" + +#: ../../c-api/typeobj.rst:813 ../../c-api/typeobj.rst:925 +#: ../../c-api/typeobj.rst:950 ../../c-api/typeobj.rst:976 +#: ../../c-api/typeobj.rst:1018 ../../c-api/typeobj.rst:1392 +#: ../../c-api/typeobj.rst:1544 ../../c-api/typeobj.rst:1565 +#: ../../c-api/typeobj.rst:1663 ../../c-api/typeobj.rst:1699 +#: ../../c-api/typeobj.rst:1717 ../../c-api/typeobj.rst:1755 +#: ../../c-api/typeobj.rst:1776 ../../c-api/typeobj.rst:1807 +msgid "**Default:**" +msgstr "**默认:**" + +#: ../../c-api/typeobj.rst:815 +msgid "" +"When this field is not set, a string of the form ``<%s object at %p>`` is " +"returned, where ``%s`` is replaced by the type name, and ``%p`` by the " +"object's memory address." +msgstr "" +"如果未设置该字段,则返回 ``<%s object at %p>`` 形式的字符串,其中 ``%s`` 将替换为类型名称,``%p`` " +"将替换为对象的内存地址。" + +#: ../../c-api/typeobj.rst:822 +msgid "" +"Pointer to an additional structure that contains fields relevant only to " +"objects which implement the number protocol. These fields are documented in" +" :ref:`number-structs`." +msgstr "指向一个附加结构体的指针,其中包含只与执行数字协议的对象相关的字段。 这些字段的文档参见 :ref:`number-structs`。" + +#: ../../c-api/typeobj.rst:828 +msgid "" +"The :c:member:`~PyTypeObject.tp_as_number` field is not inherited, but the " +"contained fields are inherited individually." +msgstr ":c:member:`~PyTypeObject.tp_as_number` 字段不会被继承,但所包含的字段会被单独继承。" + +#: ../../c-api/typeobj.rst:834 +msgid "" +"Pointer to an additional structure that contains fields relevant only to " +"objects which implement the sequence protocol. These fields are documented " +"in :ref:`sequence-structs`." +msgstr "指向一个附加结构体的指针,其中包含只与执行序列协议的对象相关的字段。 这些字段的文档见 :ref:`sequence-structs`。" + +#: ../../c-api/typeobj.rst:840 +msgid "" +"The :c:member:`~PyTypeObject.tp_as_sequence` field is not inherited, but the" +" contained fields are inherited individually." +msgstr ":c:member:`~PyTypeObject.tp_as_sequence` 字段不会被继承,但所包含的字段会被单独继承。" + +#: ../../c-api/typeobj.rst:846 +msgid "" +"Pointer to an additional structure that contains fields relevant only to " +"objects which implement the mapping protocol. These fields are documented " +"in :ref:`mapping-structs`." +msgstr "指向一个附加结构体的指针,其中包含只与执行映射协议的对象相关的字段。 这些字段的文档见 :ref:`mapping-structs`。" + +#: ../../c-api/typeobj.rst:852 +msgid "" +"The :c:member:`~PyTypeObject.tp_as_mapping` field is not inherited, but the " +"contained fields are inherited individually." +msgstr ":c:member:`~PyTypeObject.tp_as_mapping` 字段不会继承,但所包含的字段会被单独继承。" + +#: ../../c-api/typeobj.rst:860 +msgid "" +"An optional pointer to a function that implements the built-in function " +":func:`hash`." +msgstr "一个指向实现了内置函数 :func:`hash` 的函数的可选指针。" + +#: ../../c-api/typeobj.rst:863 +msgid "The signature is the same as for :c:func:`PyObject_Hash`::" +msgstr "其签名与 :c:func:`PyObject_Hash` 的相同::" + +#: ../../c-api/typeobj.rst:867 +msgid "" +"The value ``-1`` should not be returned as a normal return value; when an " +"error occurs during the computation of the hash value, the function should " +"set an exception and return ``-1``." +msgstr "``-1`` 不应作为正常返回值被返回;当计算哈希值过程中发生错误时,函数应设置一个异常并返回 ``-1``。" + +#: ../../c-api/typeobj.rst:871 +msgid "" +"When this field is not set (*and* :attr:`tp_richcompare` is not set), an " +"attempt to take the hash of the object raises :exc:`TypeError`. This is the " +"same as setting it to :c:func:`PyObject_HashNotImplemented`." +msgstr "" + +#: ../../c-api/typeobj.rst:875 +msgid "" +"This field can be set explicitly to :c:func:`PyObject_HashNotImplemented` to" +" block inheritance of the hash method from a parent type. This is " +"interpreted as the equivalent of ``__hash__ = None`` at the Python level, " +"causing ``isinstance(o, collections.Hashable)`` to correctly return " +"``False``. Note that the converse is also true - setting ``__hash__ = None``" +" on a class at the Python level will result in the ``tp_hash`` slot being " +"set to :c:func:`PyObject_HashNotImplemented`." +msgstr "" +"此字段可被显式设为 :c:func:`PyObject_HashNotImplemented` 以阻止从父类型继承哈希方法。在 Python " +"层面这被解释为 ``__hash__ = None`` 的等价物,使得 ``isinstance(o, collections.Hashable)`` " +"正确返回 ``False``.。请注意反过来也是如此:在 Python 层面设置一个类的 ``__hash__ = None`` 会使得 " +"``tp_hash`` 槽位被设置为 :c:func:`PyObject_HashNotImplemented`。" + +#: ../../c-api/typeobj.rst:885 ../../c-api/typeobj.rst:1385 +msgid "Group: :attr:`tp_hash`, :attr:`tp_richcompare`" +msgstr "分组: :attr:`tp_hash`, :attr:`tp_richcompare`" + +#: ../../c-api/typeobj.rst:887 +msgid "" +"This field is inherited by subtypes together with " +":c:member:`~PyTypeObject.tp_richcompare`: a subtype inherits both of " +":c:member:`~PyTypeObject.tp_richcompare` and " +":c:member:`~PyTypeObject.tp_hash`, when the subtype's " +":c:member:`~PyTypeObject.tp_richcompare` and " +":c:member:`~PyTypeObject.tp_hash` are both ``NULL``." +msgstr "" +"该字段会被子类型同 :c:member:`~PyTypeObject.tp_richcompare` 一起继承:当子类型的 " +":c:member:`~PyTypeObject.tp_richcompare` 和 :c:member:`~PyTypeObject.tp_hash`" +" 均为 ``NULL`` 时子类型将同时继承 :c:member:`~PyTypeObject.tp_richcompare` 和 " +":c:member:`~PyTypeObject.tp_hash`。" + +#: ../../c-api/typeobj.rst:895 +msgid "" +"An optional pointer to a function that implements calling the object. This " +"should be ``NULL`` if the object is not callable. The signature is the same" +" as for :c:func:`PyObject_Call`::" +msgstr "" +"一个可选的实现对象调用的指向函数的指针。 如果对象不是可调用对象则该值应为 ``NULL``。 其签名与 :c:func:`PyObject_Call`" +" 的相同::" + +#: ../../c-api/typeobj.rst:908 +msgid "" +"An optional pointer to a function that implements the built-in operation " +":func:`str`. (Note that :class:`str` is a type now, and :func:`str` calls " +"the constructor for that type. This constructor calls " +":c:func:`PyObject_Str` to do the actual work, and :c:func:`PyObject_Str` " +"will call this handler.)" +msgstr "" +"一个可选的实现内置 :func:`str` 操作的函数的指针。 (请注意 :class:`str` 现在是一个类型,:func:`str` " +"是调用该类型的构造器。 该构造器将调用 :c:func:`PyObject_Str` 执行实际操作,而 :c:func:`PyObject_Str` " +"将调用该处理器。)" + +#: ../../c-api/typeobj.rst:913 +msgid "The signature is the same as for :c:func:`PyObject_Str`::" +msgstr "其签名与 :c:func:`PyObject_Str` 的相同::" + +#: ../../c-api/typeobj.rst:917 +msgid "" +"The function must return a string or a Unicode object. It should be a " +"\"friendly\" string representation of the object, as this is the " +"representation that will be used, among other things, by the :func:`print` " +"function." +msgstr "" +"该函数必须返回一个字符串或 Unicode 对象。 它应当是一个“友好”的对象字符串表示形式,因为这就是要在 :func:`print` " +"函数中与其他内容一起使用的表示形式。" + +#: ../../c-api/typeobj.rst:927 +msgid "" +"When this field is not set, :c:func:`PyObject_Repr` is called to return a " +"string representation." +msgstr "当未设置该字段时,将调用 :c:func:`PyObject_Repr` 来返回一个字符串表示形式。" + +#: ../../c-api/typeobj.rst:933 +msgid "An optional pointer to the get-attribute function." +msgstr "一个指向获取属性字符串函数的可选指针。" + +#: ../../c-api/typeobj.rst:935 +msgid "The signature is the same as for :c:func:`PyObject_GetAttr`::" +msgstr "其签名与 :c:func:`PyObject_GetAttr` 的相同::" + +#: ../../c-api/typeobj.rst:939 +msgid "" +"It is usually convenient to set this field to " +":c:func:`PyObject_GenericGetAttr`, which implements the normal way of " +"looking for object attributes." +msgstr "可以方便地将该字段设为 :c:func:`PyObject_GenericGetAttr`,它实现了查找对象属性的通常方式。" + +#: ../../c-api/typeobj.rst:946 +msgid "" +"This field is inherited by subtypes together with " +":c:member:`~PyTypeObject.tp_getattr`: a subtype inherits both " +":c:member:`~PyTypeObject.tp_getattr` and " +":c:member:`~PyTypeObject.tp_getattro` from its base type when the subtype's " +":c:member:`~PyTypeObject.tp_getattr` and " +":c:member:`~PyTypeObject.tp_getattro` are both ``NULL``." +msgstr "" +"该字段会被子类同 :c:member:`~PyTypeObject.tp_getattr` 一起继承:当子类型的 " +":c:member:`~PyTypeObject.tp_getattr` 和 :c:member:`~PyTypeObject.tp_getattro`" +" 均为 ``NULL`` 时子类型将同时继承 :c:member:`~PyTypeObject.tp_getattr` 和 " +":c:member:`~PyTypeObject.tp_getattro`。" + +#: ../../c-api/typeobj.rst:952 +msgid ":c:type:`PyBaseObject_Type` uses :c:func:`PyObject_GenericGetAttr`." +msgstr ":c:type:`PyBaseObject_Type` 使用 :c:func:`PyObject_GenericGetAttr`。" + +#: ../../c-api/typeobj.rst:959 +msgid "The signature is the same as for :c:func:`PyObject_SetAttr`::" +msgstr "其签名与 :c:func:`PyObject_SetAttr` 的相同::" + +#: ../../c-api/typeobj.rst:963 +msgid "" +"In addition, setting *value* to ``NULL`` to delete an attribute must be " +"supported. It is usually convenient to set this field to " +":c:func:`PyObject_GenericSetAttr`, which implements the normal way of " +"setting object attributes." +msgstr "" +"此外,还必须支持将 *value* 设为 ``NULL`` 来删除属性。 通常可以方便地将该字段设为 " +":c:func:`PyObject_GenericSetAttr`,它实现了设备对象属性的通常方式。" + +#: ../../c-api/typeobj.rst:972 +msgid "" +"This field is inherited by subtypes together with " +":c:member:`~PyTypeObject.tp_setattr`: a subtype inherits both " +":c:member:`~PyTypeObject.tp_setattr` and " +":c:member:`~PyTypeObject.tp_setattro` from its base type when the subtype's " +":c:member:`~PyTypeObject.tp_setattr` and " +":c:member:`~PyTypeObject.tp_setattro` are both ``NULL``." +msgstr "" +"该字段会被子类型同 :c:member:`~PyTypeObject.tp_setattr` 一起继承:当子类型的 " +":c:member:`~PyTypeObject.tp_setattr` 和 :c:member:`~PyTypeObject.tp_setattro`" +" 均为 ``NULL`` 时子类型将同时继承 :c:member:`~PyTypeObject.tp_setattr` 和 " +":c:member:`~PyTypeObject.tp_setattro`。" + +#: ../../c-api/typeobj.rst:978 +msgid ":c:type:`PyBaseObject_Type` uses :c:func:`PyObject_GenericSetAttr`." +msgstr ":c:type:`PyBaseObject_Type` 使用 :c:func:`PyObject_GenericSetAttr`." + +#: ../../c-api/typeobj.rst:983 +msgid "" +"Pointer to an additional structure that contains fields relevant only to " +"objects which implement the buffer interface. These fields are documented " +"in :ref:`buffer-structs`." +msgstr "指向一个包含只与实现缓冲区接口的对象相关的字段的附加结构体的指针。 这些字段的文档参见 :ref:`buffer-structs`。" + +#: ../../c-api/typeobj.rst:989 +msgid "" +"The :c:member:`~PyTypeObject.tp_as_buffer` field is not inherited, but the " +"contained fields are inherited individually." +msgstr ":c:member:`~PyTypeObject.tp_as_buffer` 字段不会被继承,但所包含的字段会被单独继承。" + +#: ../../c-api/typeobj.rst:995 +msgid "" +"This field is a bit mask of various flags. Some flags indicate variant " +"semantics for certain situations; others are used to indicate that certain " +"fields in the type object (or in the extension structures referenced via " +":c:member:`~PyTypeObject.tp_as_number`, " +":c:member:`~PyTypeObject.tp_as_sequence`, " +":c:member:`~PyTypeObject.tp_as_mapping`, and " +":c:member:`~PyTypeObject.tp_as_buffer`) that were historically not always " +"present are valid; if such a flag bit is clear, the type fields it guards " +"must not be accessed and must be considered to have a zero or ``NULL`` value" +" instead." +msgstr "" +"该字段是针对多个旗标的位掩码。 某些旗标指明用于特定场景的变化语义;另一些旗标则用于指明类型对象(或通过 " +":c:member:`~PyTypeObject.tp_as_number`, " +":c:member:`~PyTypeObject.tp_as_sequence`, " +":c:member:`~PyTypeObject.tp_as_mapping` 和 " +":c:member:`~PyTypeObject.tp_as_buffer` " +"引用的扩展结构体)中的特定字段,它们在历史上并不总是有效;如果这样的旗标位是清晰的,则它所保护的类型字段必须不可被访问并且必须被视为具有零或 " +"``NULL`` 值。" + +#: ../../c-api/typeobj.rst:1005 +msgid "" +"Inheritance of this field is complicated. Most flag bits are inherited " +"individually, i.e. if the base type has a flag bit set, the subtype inherits" +" this flag bit. The flag bits that pertain to extension structures are " +"strictly inherited if the extension structure is inherited, i.e. the base " +"type's value of the flag bit is copied into the subtype together with a " +"pointer to the extension structure. The :const:`Py_TPFLAGS_HAVE_GC` flag " +"bit is inherited together with the :c:member:`~PyTypeObject.tp_traverse` and" +" :c:member:`~PyTypeObject.tp_clear` fields, i.e. if the " +":const:`Py_TPFLAGS_HAVE_GC` flag bit is clear in the subtype and the " +":c:member:`~PyTypeObject.tp_traverse` and :c:member:`~PyTypeObject.tp_clear`" +" fields in the subtype exist and have ``NULL`` values." +msgstr "" + +#: ../../c-api/typeobj.rst:1020 +msgid "" +":c:type:`PyBaseObject_Type` uses ``Py_TPFLAGS_DEFAULT | " +"Py_TPFLAGS_BASETYPE``." +msgstr "" + +#: ../../c-api/typeobj.rst:1023 +msgid "**Bit Masks:**" +msgstr "**位掩码:**" + +#: ../../c-api/typeobj.rst:1025 +msgid "" +"The following bit masks are currently defined; these can be ORed together " +"using the ``|`` operator to form the value of the " +":c:member:`~PyTypeObject.tp_flags` field. The macro " +":c:func:`PyType_HasFeature` takes a type and a flags value, *tp* and *f*, " +"and checks whether ``tp->tp_flags & f`` is non-zero." +msgstr "" +"目前定义了以下位掩码;可以使用 ``|`` 运算符对它们进行 OR 运算以形成 :c:member:`~PyTypeObject.tp_flags` " +"字段的值。 宏 :c:func:`PyType_HasFeature` 接受一个类型和一个旗标值 *tp* 和 *f*,并检查 " +"``tp->tp_flags & f`` 是否为非零值。" + +#: ../../c-api/typeobj.rst:1032 +msgid "" +"This bit is set when the type object itself is allocated on the heap, for " +"example, types created dynamically using :c:func:`PyType_FromSpec`. In this" +" case, the :attr:`ob_type` field of its instances is considered a reference " +"to the type, and the type object is INCREF'ed when a new instance is " +"created, and DECREF'ed when an instance is destroyed (this does not apply to" +" instances of subtypes; only the type referenced by the instance's ob_type " +"gets INCREF'ed or DECREF'ed)." +msgstr "" + +#: ../../c-api/typeobj.rst:1042 ../../c-api/typeobj.rst:1053 +#: ../../c-api/typeobj.rst:1063 ../../c-api/typeobj.rst:1073 +#: ../../c-api/typeobj.rst:1106 +msgid "???" +msgstr "???" + +#: ../../c-api/typeobj.rst:1047 +msgid "" +"This bit is set when the type can be used as the base type of another type." +" If this bit is clear, the type cannot be subtyped (similar to a \"final\" " +"class in Java)." +msgstr "" +"当此类型可被用作另一个类型的基类型时该比特位将被设置。 如果该比特位被清除,则此类型将无法被子类型化(类似于 Java 中的 \"final\" 类)。" + +#: ../../c-api/typeobj.rst:1058 +msgid "" +"This bit is set when the type object has been fully initialized by " +":c:func:`PyType_Ready`." +msgstr "当此类型对象通过 :c:func:`PyType_Ready` 被完全实例化时该比特位将被设置。" + +#: ../../c-api/typeobj.rst:1068 +msgid "" +"This bit is set while :c:func:`PyType_Ready` is in the process of " +"initializing the type object." +msgstr "当 :c:func:`PyType_Ready` 处在初始化此类型对象过程中时该比特位将被设置。" + +#: ../../c-api/typeobj.rst:1078 +msgid "" +"This bit is set when the object supports garbage collection. If this bit is" +" set, instances must be created using :c:func:`PyObject_GC_New` and " +"destroyed using :c:func:`PyObject_GC_Del`. More information in section " +":ref:`supporting-cycle-detection`. This bit also implies that the GC-" +"related fields :c:member:`~PyTypeObject.tp_traverse` and " +":c:member:`~PyTypeObject.tp_clear` are present in the type object." +msgstr "" +"当此对象支持垃圾回收时该比特位将被设置。 如果设置了该比特位,则实例必须使用 :c:func:`PyObject_GC_New` 来创建并使用 " +":c:func:`PyObject_GC_Del` 来销毁。 更多信息见 :ref:`supporting-cycle-detection` 一节。 " +"该比特位还表明与类型对象中存在 GC 相关字段 :c:member:`~PyTypeObject.tp_traverse` 和 " +":c:member:`~PyTypeObject.tp_clear`。" + +#: ../../c-api/typeobj.rst:1087 ../../c-api/typeobj.rst:1259 +#: ../../c-api/typeobj.rst:1326 +msgid "" +"Group: :const:`Py_TPFLAGS_HAVE_GC`, :attr:`tp_traverse`, :attr:`tp_clear`" +msgstr "" +"分组: :const:`Py_TPFLAGS_HAVE_GC`, :attr:`tp_traverse`, :attr:`tp_clear`" + +#: ../../c-api/typeobj.rst:1089 +msgid "" +"The :const:`Py_TPFLAGS_HAVE_GC` flag bit is inherited together with the " +":attr:`tp_traverse` and :attr:`tp_clear` fields, i.e. if the " +":const:`Py_TPFLAGS_HAVE_GC` flag bit is clear in the subtype and the " +":attr:`tp_traverse` and :attr:`tp_clear` fields in the subtype exist and " +"have ``NULL`` values." +msgstr "" + +#: ../../c-api/typeobj.rst:1099 +msgid "" +"This is a bitmask of all the bits that pertain to the existence of certain " +"fields in the type object and its extension structures. Currently, it " +"includes the following bits: :const:`Py_TPFLAGS_HAVE_STACKLESS_EXTENSION`, " +":const:`Py_TPFLAGS_HAVE_VERSION_TAG`." +msgstr "" + +#: ../../c-api/typeobj.rst:1111 +msgid "This bit indicates that objects behave like unbound methods." +msgstr "这个位指明对象的行为类似于未绑定方法。" + +#: ../../c-api/typeobj.rst:1113 +msgid "If this flag is set for ``type(meth)``, then:" +msgstr "如果为 ``type(meth)`` 设置了该旗标,那么:" + +#: ../../c-api/typeobj.rst:1115 +msgid "" +"``meth.__get__(obj, cls)(*args, **kwds)`` (with ``obj`` not None) must be " +"equivalent to ``meth(obj, *args, **kwds)``." +msgstr "" +"``meth.__get__(obj, cls)(*args, **kwds)`` (其中 ``obj`` 不为 None) 必须等价于 " +"``meth(obj, *args, **kwds)``。" + +#: ../../c-api/typeobj.rst:1118 +msgid "" +"``meth.__get__(None, cls)(*args, **kwds)`` must be equivalent to " +"``meth(*args, **kwds)``." +msgstr "" +"``meth.__get__(None, cls)(*args, **kwds)`` 必须等价于 ``meth(*args, **kwds)``。" + +#: ../../c-api/typeobj.rst:1121 +msgid "" +"This flag enables an optimization for typical method calls like " +"``obj.meth()``: it avoids creating a temporary \"bound method\" object for " +"``obj.meth``." +msgstr "此旗标为 ``obj.meth()`` 这样的典型方法调用启用优化:它将避免为 ``obj.meth`` 创建临时的“绑定方法”对象。" + +#: ../../c-api/typeobj.rst:1129 +msgid "" +"This flag is never inherited by heap types. For extension types, it is " +"inherited whenever :c:member:`~PyTypeObject.tp_descr_get` is inherited." +msgstr "" + +#: ../../c-api/typeobj.rst:1146 +msgid "" +"These flags are used by functions such as :c:func:`PyLong_Check` to quickly " +"determine if a type is a subclass of a built-in type; such specific checks " +"are faster than a generic check, like :c:func:`PyObject_IsInstance`. Custom " +"types that inherit from built-ins should have their " +":c:member:`~PyTypeObject.tp_flags` set appropriately, or the code that " +"interacts with such types will behave differently depending on what kind of " +"check is used." +msgstr "" +"这些旗标被 :c:func:`PyLong_Check` 等函数用来快速确定一个类型是否为内置类型的子类;这样的专用检测比泛用检测如 " +":c:func:`PyObject_IsInstance` 要更快速。 继承自内置类型的自定义类型应当正确地设置其 " +":c:member:`~PyTypeObject.tp_flags`,否则与这样的类型进行交互的代码将因所使用的检测种类而出现不同的行为。" + +#: ../../c-api/typeobj.rst:1157 +msgid "" +"This bit is set when the :c:member:`~PyTypeObject.tp_finalize` slot is " +"present in the type structure." +msgstr "当类型结构体中存在 :c:member:`~PyTypeObject.tp_finalize` 槽位时会设置这个比特位。" + +#: ../../c-api/typeobj.rst:1162 +msgid "" +"This flag isn't necessary anymore, as the interpreter assumes the " +":c:member:`~PyTypeObject.tp_finalize` slot is always present in the type " +"structure." +msgstr "" +"此旗标已不再是必要的,因为解释器会假定类型结构体中总是存在 :c:member:`~PyTypeObject.tp_finalize` 槽位。" + +#: ../../c-api/typeobj.rst:1170 +msgid "" +"This bit is set when the class implements the :ref:`vectorcall protocol " +"`. See :c:member:`~PyTypeObject.tp_vectorcall_offset` for " +"details." +msgstr "" +"当类实现了 :ref:`vectorcall 协议 ` 时会设置这个比特位。 请参阅 " +":c:member:`~PyTypeObject.tp_vectorcall_offset` 了解详情。" + +#: ../../c-api/typeobj.rst:1176 +msgid "" +"This bit is inherited for *static* subtypes if " +":c:member:`~PyTypeObject.tp_call` is also inherited. `Heap types`_ do not " +"inherit ``Py_TPFLAGS_HAVE_VECTORCALL``." +msgstr "" + +#: ../../c-api/typeobj.rst:1185 +msgid "" +"An optional pointer to a NUL-terminated C string giving the docstring for " +"this type object. This is exposed as the :attr:`__doc__` attribute on the " +"type and instances of the type." +msgstr "" +"一个可选的指向给出该类型对象的文档字符串的以 NUL 结束的 C 字符串的指针。 该指针被暴露为类型和类型实例上的 :attr:`__doc__` " +"属性。" + +#: ../../c-api/typeobj.rst:1191 +msgid "This field is *not* inherited by subtypes." +msgstr "这个字段 *不会* 被子类型继承。" + +#: ../../c-api/typeobj.rst:1196 +msgid "" +"An optional pointer to a traversal function for the garbage collector. This" +" is only used if the :const:`Py_TPFLAGS_HAVE_GC` flag bit is set. The " +"signature is::" +msgstr "" + +#: ../../c-api/typeobj.rst:1201 ../../c-api/typeobj.rst:1321 +msgid "" +"More information about Python's garbage collection scheme can be found in " +"section :ref:`supporting-cycle-detection`." +msgstr "有关 Python 垃圾回收方案的更多信息可在 :ref:`supporting-cycle-detection` 一节中查看。" + +#: ../../c-api/typeobj.rst:1204 +msgid "" +"The :c:member:`~PyTypeObject.tp_traverse` pointer is used by the garbage " +"collector to detect reference cycles. A typical implementation of a " +":c:member:`~PyTypeObject.tp_traverse` function simply calls " +":c:func:`Py_VISIT` on each of the instance's members that are Python objects" +" that the instance owns. For example, this is function " +":c:func:`local_traverse` from the :mod:`_thread` extension module::" +msgstr "" + +#: ../../c-api/typeobj.rst:1219 +msgid "" +"Note that :c:func:`Py_VISIT` is called only on those members that can " +"participate in reference cycles. Although there is also a ``self->key`` " +"member, it can only be ``NULL`` or a Python string and therefore cannot be " +"part of a reference cycle." +msgstr "" +"请注意 :c:func:`Py_VISIT` 仅能在可以参加循环引用的成员上被调用。 虽然还存在一个 ``self->key`` 成员,但它只能为 " +"``NULL`` 或 Python 字符串因而不能成为循环引用的一部分。" + +#: ../../c-api/typeobj.rst:1223 +msgid "" +"On the other hand, even if you know a member can never be part of a cycle, " +"as a debugging aid you may want to visit it anyway just so the :mod:`gc` " +"module's :func:`~gc.get_referents` function will include it." +msgstr "" +"在另一方面,即使你知道某个成员永远不会成为循环引用的一部分,作为调试的辅助你仍然可能想要访问它因此 :mod:`gc` 模块的 " +":func:`~gc.get_referents` 函数将会包括它。" + +#: ../../c-api/typeobj.rst:1228 +msgid "" +"When implementing :c:member:`~PyTypeObject.tp_traverse`, only the members " +"that the instance *owns* (by having strong references to them) must be " +"visited. For instance, if an object supports weak references via the " +":c:member:`~PyTypeObject.tp_weaklist` slot, the pointer supporting the " +"linked list (what *tp_weaklist* points to) must **not** be visited as the " +"instance does not directly own the weak references to itself (the " +"weakreference list is there to support the weak reference machinery, but the" +" instance has no strong reference to the elements inside it, as they are " +"allowed to be removed even if the instance is still alive)." +msgstr "" + +#: ../../c-api/typeobj.rst:1238 +msgid "" +"Note that :c:func:`Py_VISIT` requires the *visit* and *arg* parameters to " +":c:func:`local_traverse` to have these specific names; don't name them just " +"anything." +msgstr "" +"请注意 :c:func:`Py_VISIT` 要求传给 :c:func:`local_traverse` 的 *visit* 和 *arg* " +"形参具有指定的名称;不要随意命名它们。" + +#: ../../c-api/typeobj.rst:1242 +msgid "" +"Heap-allocated types (:const:`Py_TPFLAGS_HEAPTYPE`, such as those created " +"with :c:func:`PyType_FromSpec` and similar APIs) hold a reference to their " +"type. Their traversal function must therefore either visit " +":c:func:`Py_TYPE(self) `, or delegate this responsibility by " +"calling ``tp_traverse`` of another heap-allocated type (such as a heap-" +"allocated superclass). If they do not, the type object may not be garbage-" +"collected." +msgstr "" + +#: ../../c-api/typeobj.rst:1252 +msgid "" +"Heap-allocated types are expected to visit ``Py_TYPE(self)`` in " +"``tp_traverse``. In earlier versions of Python, due to `bug 40217 " +"`_, doing this may lead to crashes in " +"subclasses." +msgstr "" +"堆分配类型应当访问 ``tp_traverse`` 中的 ``Py_TYPE(self)``。 在较早的 Python 版本中,由于 `bug " +"40217 `_,这样做可能会导致在超类中发生崩溃。" + +#: ../../c-api/typeobj.rst:1261 +msgid "" +"This field is inherited by subtypes together with " +":c:member:`~PyTypeObject.tp_clear` and the :const:`Py_TPFLAGS_HAVE_GC` flag " +"bit: the flag bit, :c:member:`~PyTypeObject.tp_traverse`, and " +":c:member:`~PyTypeObject.tp_clear` are all inherited from the base type if " +"they are all zero in the subtype." +msgstr "" + +#: ../../c-api/typeobj.rst:1269 +msgid "" +"An optional pointer to a clear function for the garbage collector. This is " +"only used if the :const:`Py_TPFLAGS_HAVE_GC` flag bit is set. The signature" +" is::" +msgstr "" + +#: ../../c-api/typeobj.rst:1274 +msgid "" +"The :c:member:`~PyTypeObject.tp_clear` member function is used to break " +"reference cycles in cyclic garbage detected by the garbage collector. Taken" +" together, all :c:member:`~PyTypeObject.tp_clear` functions in the system " +"must combine to break all reference cycles. This is subtle, and if in any " +"doubt supply a :c:member:`~PyTypeObject.tp_clear` function. For example, " +"the tuple type does not implement a :c:member:`~PyTypeObject.tp_clear` " +"function, because it's possible to prove that no reference cycle can be " +"composed entirely of tuples. Therefore the " +":c:member:`~PyTypeObject.tp_clear` functions of other types must be " +"sufficient to break any cycle containing a tuple. This isn't immediately " +"obvious, and there's rarely a good reason to avoid implementing " +":c:member:`~PyTypeObject.tp_clear`." +msgstr "" +":c:member:`~PyTypeObject.tp_clear` 成员函数被用来打破垃圾回收器在循环垃圾中检测到的循环引用。 总的来说,系统中的所有" +" :c:member:`~PyTypeObject.tp_clear` 函数必须合到一起以打破所有引用循环。 " +"这是个微妙的问题,并且如有任何疑问都需要提供 :c:member:`~PyTypeObject.tp_clear` 函数。 例如,元组类型不会实现 " +":c:member:`~PyTypeObject.tp_clear` 函数,因为有可能证明完全用元组是不会构成循环引用的。 因此其他类型的 " +":c:member:`~PyTypeObject.tp_clear` 函数必须足以打破任何包含元组的循环。 这不是立即能明确的,并且很少会有避免实现 " +":c:member:`~PyTypeObject.tp_clear` 的适当理由。" + +#: ../../c-api/typeobj.rst:1284 +msgid "" +"Implementations of :c:member:`~PyTypeObject.tp_clear` should drop the " +"instance's references to those of its members that may be Python objects, " +"and set its pointers to those members to ``NULL``, as in the following " +"example::" +msgstr "" +":c:member:`~PyTypeObject.tp_clear` 的实现应当丢弃实例指向其成员的可能为 Python " +"对象的引用,并将指向这些成员的指针设为 ``NULL``,如下面的例子所示::" + +#: ../../c-api/typeobj.rst:1298 +msgid "" +"The :c:func:`Py_CLEAR` macro should be used, because clearing references is " +"delicate: the reference to the contained object must not be decremented " +"until after the pointer to the contained object is set to ``NULL``. This is" +" because decrementing the reference count may cause the contained object to " +"become trash, triggering a chain of reclamation activity that may include " +"invoking arbitrary Python code (due to finalizers, or weakref callbacks, " +"associated with the contained object). If it's possible for such code to " +"reference *self* again, it's important that the pointer to the contained " +"object be ``NULL`` at that time, so that *self* knows the contained object " +"can no longer be used. The :c:func:`Py_CLEAR` macro performs the operations" +" in a safe order." +msgstr "" + +#: ../../c-api/typeobj.rst:1309 +msgid "" +"Note that :c:member:`~PyTypeObject.tp_clear` is not *always* called before " +"an instance is deallocated. For example, when reference counting is enough " +"to determine that an object is no longer used, the cyclic garbage collector " +"is not involved and :c:member:`~PyTypeObject.tp_dealloc` is called directly." +msgstr "" +"请注意 :c:member:`~PyTypeObject.tp_clear` 并非 *总是* 在实例被取消分配之前被调用。 " +"例如,当引用计数足以确定对象不再被使用时,就不会涉及循环垃圾回收器而是直接调用 " +":c:member:`~PyTypeObject.tp_dealloc`。" + +#: ../../c-api/typeobj.rst:1315 +msgid "" +"Because the goal of :c:member:`~PyTypeObject.tp_clear` functions is to break" +" reference cycles, it's not necessary to clear contained objects like Python" +" strings or Python integers, which can't participate in reference cycles. On" +" the other hand, it may be convenient to clear all contained Python objects," +" and write the type's :c:member:`~PyTypeObject.tp_dealloc` function to " +"invoke :c:member:`~PyTypeObject.tp_clear`." +msgstr "" +"因为 :c:member:`~PyTypeObject.tp_clear` 函数的目的是打破循环引用,所以不需要清除所包含的对象如 Python " +"字符串或 Python 整数,它们无法参与循环引用。 另一方面,清除所包含的全部 Python 对象,并编写类型的 " +":c:member:`~PyTypeObject.tp_dealloc` 函数来唤起 " +":c:member:`~PyTypeObject.tp_clear` 也很方便。" + +#: ../../c-api/typeobj.rst:1328 +msgid "" +"This field is inherited by subtypes together with " +":c:member:`~PyTypeObject.tp_traverse` and the :const:`Py_TPFLAGS_HAVE_GC` " +"flag bit: the flag bit, :c:member:`~PyTypeObject.tp_traverse`, and " +":c:member:`~PyTypeObject.tp_clear` are all inherited from the base type if " +"they are all zero in the subtype." +msgstr "" + +#: ../../c-api/typeobj.rst:1336 +msgid "" +"An optional pointer to the rich comparison function, whose signature is::" +msgstr "一个可选的指向富比较函数的指针,函数的签名为::" + +#: ../../c-api/typeobj.rst:1340 +msgid "" +"The first parameter is guaranteed to be an instance of the type that is " +"defined by :c:type:`PyTypeObject`." +msgstr "第一个形参将保证为 :c:type:`PyTypeObject` 所定义的类型的实例。" + +#: ../../c-api/typeobj.rst:1343 +msgid "" +"The function should return the result of the comparison (usually ``Py_True``" +" or ``Py_False``). If the comparison is undefined, it must return " +"``Py_NotImplemented``, if another error occurred it must return ``NULL`` and" +" set an exception condition." +msgstr "" +"该函数应当返回比较的结果 (通常为 ``Py_True`` 或 ``Py_False``)。 如果未定义比较运算,它必须返回 " +"``Py_NotImplemented``,如果发生了其他错误则它必须返回 ``NULL`` 并设置一个异常条件。" + +#: ../../c-api/typeobj.rst:1348 +msgid "" +"The following constants are defined to be used as the third argument for " +":c:member:`~PyTypeObject.tp_richcompare` and for " +":c:func:`PyObject_RichCompare`:" +msgstr "" +"以下常量被定义用作 :c:member:`~PyTypeObject.tp_richcompare` 和 " +":c:func:`PyObject_RichCompare` 的第三个参数:" + +#: ../../c-api/typeobj.rst:1352 +msgid "Constant" +msgstr "常量" + +#: ../../c-api/typeobj.rst:1352 +msgid "Comparison" +msgstr "对照" + +#: ../../c-api/typeobj.rst:1354 +msgid ":const:`Py_LT`" +msgstr ":const:`Py_LT`" + +#: ../../c-api/typeobj.rst:1354 +msgid "``<``" +msgstr "``<``" + +#: ../../c-api/typeobj.rst:1356 +msgid ":const:`Py_LE`" +msgstr ":const:`Py_LE`" + +#: ../../c-api/typeobj.rst:1356 +msgid "``<=``" +msgstr "``<=``" + +#: ../../c-api/typeobj.rst:1358 +msgid ":const:`Py_EQ`" +msgstr ":const:`Py_EQ`" + +#: ../../c-api/typeobj.rst:1358 +msgid "``==``" +msgstr "``==``" + +#: ../../c-api/typeobj.rst:1360 +msgid ":const:`Py_NE`" +msgstr ":const:`Py_NE`" + +#: ../../c-api/typeobj.rst:1360 +msgid "``!=``" +msgstr "``!=``" + +#: ../../c-api/typeobj.rst:1362 +msgid ":const:`Py_GT`" +msgstr ":const:`Py_GT`" + +#: ../../c-api/typeobj.rst:1362 +msgid "``>``" +msgstr "``>``" + +#: ../../c-api/typeobj.rst:1364 +msgid ":const:`Py_GE`" +msgstr ":const:`Py_GE`" + +#: ../../c-api/typeobj.rst:1364 +msgid "``>=``" +msgstr "``>=``" + +#: ../../c-api/typeobj.rst:1367 +msgid "" +"The following macro is defined to ease writing rich comparison functions:" +msgstr "定义以下宏是为了简化编写丰富的比较函数:" + +#: ../../c-api/typeobj.rst:1371 +msgid "" +"Return ``Py_True`` or ``Py_False`` from the function, depending on the " +"result of a comparison. VAL_A and VAL_B must be orderable by C comparison " +"operators (for example, they may be C ints or floats). The third argument " +"specifies the requested operation, as for :c:func:`PyObject_RichCompare`." +msgstr "" +"从该函数返回 ``Py_True`` 或 ``Py_False``,这取决于比较的结果。 VAL_A 和 VAL_B 必须是可通过 C " +"比较运算符进行排序的(例如,它们可以为 C 整数或浮点数)。 第三个参数指明所请求的运算,与 " +":c:func:`PyObject_RichCompare` 的参数一样。" + +#: ../../c-api/typeobj.rst:1377 +msgid "The return value's reference count is properly incremented." +msgstr "" + +#: ../../c-api/typeobj.rst:1379 +msgid "On error, sets an exception and returns ``NULL`` from the function." +msgstr "发生错误时,将设置异常并从该函数返回 ``NULL``。" + +#: ../../c-api/typeobj.rst:1387 +msgid "" +"This field is inherited by subtypes together with " +":c:member:`~PyTypeObject.tp_hash`: a subtype inherits " +":c:member:`~PyTypeObject.tp_richcompare` and " +":c:member:`~PyTypeObject.tp_hash` when the subtype's " +":c:member:`~PyTypeObject.tp_richcompare` and " +":c:member:`~PyTypeObject.tp_hash` are both ``NULL``." +msgstr "" +"该字段会被子类型同 :c:member:`~PyTypeObject.tp_hash` 一起继承:当子类型的 " +":c:member:`~PyTypeObject.tp_richcompare` 和 :c:member:`~PyTypeObject.tp_hash`" +" 均为 ``NULL`` 时子类型将同时继承 :c:member:`~PyTypeObject.tp_richcompare` 和 " +":c:member:`~PyTypeObject.tp_hash`。" + +#: ../../c-api/typeobj.rst:1394 +msgid "" +":c:type:`PyBaseObject_Type` provides a :attr:`tp_richcompare` " +"implementation, which may be inherited. However, if only :attr:`tp_hash` is" +" defined, not even the inherited function is used and instances of the type " +"will not be able to participate in any comparisons." +msgstr "" + +#: ../../c-api/typeobj.rst:1403 +msgid "" +"If the instances of this type are weakly referenceable, this field is " +"greater than zero and contains the offset in the instance structure of the " +"weak reference list head (ignoring the GC header, if present); this offset " +"is used by :c:func:`PyObject_ClearWeakRefs` and the :c:func:`PyWeakref_\\*` " +"functions. The instance structure needs to include a field of type " +":c:type:`PyObject*` which is initialized to ``NULL``." +msgstr "" + +#: ../../c-api/typeobj.rst:1410 +msgid "" +"Do not confuse this field with :c:member:`~PyTypeObject.tp_weaklist`; that " +"is the list head for weak references to the type object itself." +msgstr "不要将该字段与 :c:member:`~PyTypeObject.tp_weaklist` 混淆;后者是指向类型对象本身的弱引用的列表头。" + +#: ../../c-api/typeobj.rst:1415 +msgid "" +"This field is inherited by subtypes, but see the rules listed below. A " +"subtype may override this offset; this means that the subtype uses a " +"different weak reference list head than the base type. Since the list head " +"is always found via :c:member:`~PyTypeObject.tp_weaklistoffset`, this should" +" not be a problem." +msgstr "" +"该字段会被子类型继承,但注意参阅下面列出的规则。 子类型可以覆盖此偏移量;这意味着子类型将使用不同于基类型的弱引用列表。 由于列表头总是通过 " +":c:member:`~PyTypeObject.tp_weaklistoffset` 找到的,所以这应该不成问题。" + +#: ../../c-api/typeobj.rst:1420 +msgid "" +"When a type defined by a class statement has no :attr:`~object.__slots__` " +"declaration, and none of its base types are weakly referenceable, the type " +"is made weakly referenceable by adding a weak reference list head slot to " +"the instance layout and setting the " +":c:member:`~PyTypeObject.tp_weaklistoffset` of that slot's offset." +msgstr "" + +#: ../../c-api/typeobj.rst:1425 +msgid "" +"When a type's :attr:`__slots__` declaration contains a slot named " +":attr:`__weakref__`, that slot becomes the weak reference list head for " +"instances of the type, and the slot's offset is stored in the type's " +":c:member:`~PyTypeObject.tp_weaklistoffset`." +msgstr "" + +#: ../../c-api/typeobj.rst:1430 +msgid "" +"When a type's :attr:`__slots__` declaration does not contain a slot named " +":attr:`__weakref__`, the type inherits its " +":c:member:`~PyTypeObject.tp_weaklistoffset` from its base type." +msgstr "" + +#: ../../c-api/typeobj.rst:1437 +msgid "" +"An optional pointer to a function that returns an iterator for the object. " +"Its presence normally signals that the instances of this type are iterable " +"(although sequences may be iterable without this function)." +msgstr "" + +#: ../../c-api/typeobj.rst:1441 +msgid "This function has the same signature as :c:func:`PyObject_GetIter`::" +msgstr "此函数的签名与 :c:func:`PyObject_GetIter` 的相同::" + +#: ../../c-api/typeobj.rst:1452 +msgid "" +"An optional pointer to a function that returns the next item in an iterator." +" The signature is::" +msgstr "" + +#: ../../c-api/typeobj.rst:1457 +msgid "" +"When the iterator is exhausted, it must return ``NULL``; a " +":exc:`StopIteration` exception may or may not be set. When another error " +"occurs, it must return ``NULL`` too. Its presence signals that the " +"instances of this type are iterators." +msgstr "" +"当该迭代器被耗尽时,它必须返回 ``NULL``;:exc:`StopIteration` 异常可能会设置也可能不设置。 " +"当发生另一个错误时,它也必须返回 ``NULL``。 它的存在表明该类型的实际是迭代器。" + +#: ../../c-api/typeobj.rst:1462 +msgid "" +"Iterator types should also define the :c:member:`~PyTypeObject.tp_iter` " +"function, and that function should return the iterator instance itself (not " +"a new iterator instance)." +msgstr "" +"迭代器类型也应当定义 :c:member:`~PyTypeObject.tp_iter` " +"函数,并且该函数应当返回迭代器实例本身(而不是新的迭代器实例)。" + +#: ../../c-api/typeobj.rst:1466 +msgid "This function has the same signature as :c:func:`PyIter_Next`." +msgstr "此函数的签名与 :c:func:`PyIter_Next` 的相同。" + +#: ../../c-api/typeobj.rst:1475 +msgid "" +"An optional pointer to a static ``NULL``-terminated array of " +":c:type:`PyMethodDef` structures, declaring regular methods of this type." +msgstr "一个可选的指向 :c:type:`PyMethodDef` 结构体的以 ``NULL`` 结束的静态数组的指针,它声明了此类型的常规方法。" + +#: ../../c-api/typeobj.rst:1478 +msgid "" +"For each entry in the array, an entry is added to the type's dictionary (see" +" :c:member:`~PyTypeObject.tp_dict` below) containing a method descriptor." +msgstr "" +"对于该数组中的每一项,都会向类型的字典 (参见下面的 :c:member:`~PyTypeObject.tp_dict`) " +"添加一个包含方法描述器的条目。" + +#: ../../c-api/typeobj.rst:1483 +msgid "" +"This field is not inherited by subtypes (methods are inherited through a " +"different mechanism)." +msgstr "该字段不会被子类型所继承(方法是通过不同的机制来继承的)。" + +#: ../../c-api/typeobj.rst:1489 +msgid "" +"An optional pointer to a static ``NULL``-terminated array of " +":c:type:`PyMemberDef` structures, declaring regular data members (fields or " +"slots) of instances of this type." +msgstr "" +"一个可选的指向 :c:type:`PyMemberDef` 结构体的以 ``NULL`` " +"结束的静态数组的指针,它声明了此类型的常规数据成员(字段或槽位)。" + +#: ../../c-api/typeobj.rst:1493 +msgid "" +"For each entry in the array, an entry is added to the type's dictionary (see" +" :c:member:`~PyTypeObject.tp_dict` below) containing a member descriptor." +msgstr "" +"对于该数组中的每一项,都会向类型的字典 (参见下面的 :c:member:`~PyTypeObject.tp_dict`) " +"添加一个包含方法描述器的条目。" + +#: ../../c-api/typeobj.rst:1498 +msgid "" +"This field is not inherited by subtypes (members are inherited through a " +"different mechanism)." +msgstr "该字段不会被子类型所继承(成员是通过不同的机制来继承的)。" + +#: ../../c-api/typeobj.rst:1504 +msgid "" +"An optional pointer to a static ``NULL``-terminated array of " +":c:type:`PyGetSetDef` structures, declaring computed attributes of instances" +" of this type." +msgstr "" +"一个可选的指向 :c:type:`PyGetSetDef` 结构体的以 ``NULL`` 结束的静态数组的指针,它声明了此类型的实例中的被计算属性。" + +#: ../../c-api/typeobj.rst:1507 +msgid "" +"For each entry in the array, an entry is added to the type's dictionary (see" +" :c:member:`~PyTypeObject.tp_dict` below) containing a getset descriptor." +msgstr "" +"对于该数组中的每一项,都会向类型的字典 (参见下面的 :c:member:`~PyTypeObject.tp_dict`) " +"添加一个包含读写描述器的条目。" + +#: ../../c-api/typeobj.rst:1512 +msgid "" +"This field is not inherited by subtypes (computed attributes are inherited " +"through a different mechanism)." +msgstr "该字段不会被子类型所继承(被计算属性是通过不同的机制来继承的)。" + +#: ../../c-api/typeobj.rst:1518 +msgid "" +"An optional pointer to a base type from which type properties are inherited." +" At this level, only single inheritance is supported; multiple inheritance " +"require dynamically creating a type object by calling the metatype." +msgstr "一个可选的指向类型特征属性所继承的基类型的指针。 在这个层级上,只支持单继承;多重继承需要通过调用元类型动态地创建类型对象。" + +#: ../../c-api/typeobj.rst:1526 +msgid "" +"Slot initialization is subject to the rules of initializing globals. C99 " +"requires the initializers to be \"address constants\". Function designators" +" like :c:func:`PyType_GenericNew`, with implicit conversion to a pointer, " +"are valid C99 address constants." +msgstr "" +"槽位初始化需要遵循初始化全局变量的规则。 C99 要求初始化器为“地址常量”。 隐式转换为指针的函数指示器如 " +":c:func:`PyType_GenericNew` 都是有效的 C99 地址常量。" + +#: ../../c-api/typeobj.rst:1531 +msgid "" +"However, the unary '&' operator applied to a non-static variable like " +":c:func:`PyBaseObject_Type` is not required to produce an address constant." +" Compilers may support this (gcc does), MSVC does not. Both compilers are " +"strictly standard conforming in this particular behavior." +msgstr "" + +#: ../../c-api/typeobj.rst:1537 +msgid "" +"Consequently, :c:member:`~PyTypeObject.tp_base` should be set in the " +"extension module's init function." +msgstr "因此,应当在扩展模块的初始化函数中设置 :c:member:`~PyTypeObject.tp_base`。" + +#: ../../c-api/typeobj.rst:1542 +msgid "This field is not inherited by subtypes (obviously)." +msgstr "该字段不会被子类型继承(显然)。" + +#: ../../c-api/typeobj.rst:1546 +msgid "" +"This field defaults to ``&PyBaseObject_Type`` (which to Python programmers " +"is known as the type :class:`object`)." +msgstr "该字段默认为 ``&PyBaseObject_Type`` (对 Python 程序员来说即 :class:`object` 类型)。" + +#: ../../c-api/typeobj.rst:1552 +msgid "The type's dictionary is stored here by :c:func:`PyType_Ready`." +msgstr "类型的字典将由 :c:func:`PyType_Ready` 存储到这里。" + +#: ../../c-api/typeobj.rst:1554 +msgid "" +"This field should normally be initialized to ``NULL`` before PyType_Ready is" +" called; it may also be initialized to a dictionary containing initial " +"attributes for the type. Once :c:func:`PyType_Ready` has initialized the " +"type, extra attributes for the type may be added to this dictionary only if " +"they don't correspond to overloaded operations (like :meth:`__add__`)." +msgstr "" + +#: ../../c-api/typeobj.rst:1562 +msgid "" +"This field is not inherited by subtypes (though the attributes defined in " +"here are inherited through a different mechanism)." +msgstr "该字段不会被子类型所继承(但在这里定义的属性是通过不同的机制来继承的)。" + +#: ../../c-api/typeobj.rst:1567 +msgid "" +"If this field is ``NULL``, :c:func:`PyType_Ready` will assign a new " +"dictionary to it." +msgstr "如果该字段为 ``NULL``,:c:func:`PyType_Ready` 将为它分配一个新字典。" + +#: ../../c-api/typeobj.rst:1572 +msgid "" +"It is not safe to use :c:func:`PyDict_SetItem` on or otherwise modify " +":c:member:`~PyTypeObject.tp_dict` with the dictionary C-API." +msgstr "" +"通过字典 C-API 使用 :c:func:`PyDict_SetItem` 或修改 :c:member:`~PyTypeObject.tp_dict`" +" 是不安全的。" + +#: ../../c-api/typeobj.rst:1578 +msgid "An optional pointer to a \"descriptor get\" function." +msgstr "一个可选的指向“描述器获取”函数的指针。" + +#: ../../c-api/typeobj.rst:1580 ../../c-api/typeobj.rst:1596 +#: ../../c-api/typeobj.rst:1678 ../../c-api/typeobj.rst:1708 +#: ../../c-api/typeobj.rst:1732 +msgid "The function signature is::" +msgstr "函数的签名为::" + +#: ../../c-api/typeobj.rst:1593 +msgid "" +"An optional pointer to a function for setting and deleting a descriptor's " +"value." +msgstr "一个指向用于设置和删除描述器值的函数的选项指针。" + +#: ../../c-api/typeobj.rst:1600 +msgid "The *value* argument is set to ``NULL`` to delete the value." +msgstr "将 *value* 参数设为 ``NULL`` 以删除该值。" + +#: ../../c-api/typeobj.rst:1611 +msgid "" +"If the instances of this type have a dictionary containing instance " +"variables, this field is non-zero and contains the offset in the instances " +"of the type of the instance variable dictionary; this offset is used by " +":c:func:`PyObject_GenericGetAttr`." +msgstr "" +"如果该类型的实例具有一个包含实例变量的字典,则此字段将为非零值并包含该实例变量字典的类型的实例的偏移量;该偏移量将由 " +":c:func:`PyObject_GenericGetAttr` 使用。" + +#: ../../c-api/typeobj.rst:1616 +msgid "" +"Do not confuse this field with :c:member:`~PyTypeObject.tp_dict`; that is " +"the dictionary for attributes of the type object itself." +msgstr "不要将该字段与 :c:member:`~PyTypeObject.tp_dict` 混淆;后者是由类型对象本身的属性组成的字典。" + +#: ../../c-api/typeobj.rst:1619 +msgid "" +"If the value of this field is greater than zero, it specifies the offset " +"from the start of the instance structure. If the value is less than zero, " +"it specifies the offset from the *end* of the instance structure. A " +"negative offset is more expensive to use, and should only be used when the " +"instance structure contains a variable-length part. This is used for " +"example to add an instance variable dictionary to subtypes of :class:`str` " +"or :class:`tuple`. Note that the :c:member:`~PyTypeObject.tp_basicsize` " +"field should account for the dictionary added to the end in that case, even " +"though the dictionary is not included in the basic object layout. On a " +"system with a pointer size of 4 bytes, " +":c:member:`~PyTypeObject.tp_dictoffset` should be set to ``-4`` to indicate " +"that the dictionary is at the very end of the structure." +msgstr "" + +#: ../../c-api/typeobj.rst:1631 +msgid "" +"The real dictionary offset in an instance can be computed from a negative " +":c:member:`~PyTypeObject.tp_dictoffset` as follows::" +msgstr "" + +#: ../../c-api/typeobj.rst:1638 +msgid "" +"where :c:member:`~PyTypeObject.tp_basicsize`, " +":c:member:`~PyTypeObject.tp_itemsize` and " +":c:member:`~PyTypeObject.tp_dictoffset` are taken from the type object, and " +":attr:`ob_size` is taken from the instance. The absolute value is taken " +"because ints use the sign of :attr:`ob_size` to store the sign of the " +"number. (There's never a need to do this calculation yourself; it is done " +"for you by :c:func:`_PyObject_GetDictPtr`.)" +msgstr "" + +#: ../../c-api/typeobj.rst:1646 +msgid "" +"This field is inherited by subtypes, but see the rules listed below. A " +"subtype may override this offset; this means that the subtype instances " +"store the dictionary at a difference offset than the base type. Since the " +"dictionary is always found via :c:member:`~PyTypeObject.tp_dictoffset`, this" +" should not be a problem." +msgstr "" + +#: ../../c-api/typeobj.rst:1651 +msgid "" +"When a type defined by a class statement has no :attr:`~object.__slots__` " +"declaration, and none of its base types has an instance variable dictionary," +" a dictionary slot is added to the instance layout and the " +":c:member:`~PyTypeObject.tp_dictoffset` is set to that slot's offset." +msgstr "" + +#: ../../c-api/typeobj.rst:1656 +msgid "" +"When a type defined by a class statement has a :attr:`__slots__` " +"declaration, the type inherits its :c:member:`~PyTypeObject.tp_dictoffset` " +"from its base type." +msgstr "" + +#: ../../c-api/typeobj.rst:1659 +msgid "" +"(Adding a slot named :attr:`~object.__dict__` to the :attr:`__slots__` " +"declaration does not have the expected effect, it just causes confusion. " +"Maybe this should be added as a feature just like :attr:`__weakref__` " +"though.)" +msgstr "" + +#: ../../c-api/typeobj.rst:1665 +msgid "" +"This slot has no default. For static types, if the field is ``NULL`` then " +"no :attr:`__dict__` gets created for instances." +msgstr "" + +#: ../../c-api/typeobj.rst:1671 +msgid "An optional pointer to an instance initialization function." +msgstr "一个可选的指向实例初始化函数的指针。" + +#: ../../c-api/typeobj.rst:1673 +msgid "" +"This function corresponds to the :meth:`__init__` method of classes. Like " +":meth:`__init__`, it is possible to create an instance without calling " +":meth:`__init__`, and it is possible to reinitialize an instance by calling " +"its :meth:`__init__` method again." +msgstr "" + +#: ../../c-api/typeobj.rst:1682 +msgid "" +"The self argument is the instance to be initialized; the *args* and *kwds* " +"arguments represent positional and keyword arguments of the call to " +":meth:`__init__`." +msgstr "" + +#: ../../c-api/typeobj.rst:1686 +msgid "" +"The :c:member:`~PyTypeObject.tp_init` function, if not ``NULL``, is called " +"when an instance is created normally by calling its type, after the type's " +":c:member:`~PyTypeObject.tp_new` function has returned an instance of the " +"type. If the :c:member:`~PyTypeObject.tp_new` function returns an instance " +"of some other type that is not a subtype of the original type, no " +":c:member:`~PyTypeObject.tp_init` function is called; if " +":c:member:`~PyTypeObject.tp_new` returns an instance of a subtype of the " +"original type, the subtype's :c:member:`~PyTypeObject.tp_init` is called." +msgstr "" +":c:member:`~PyTypeObject.tp_init` 函数如果不为 ``NULL``,将在通过调用类型正常创建其实例时被调用,即在类型的 " +":c:member:`~PyTypeObject.tp_new` 函数返回一个该类型的实例时。 如果 " +":c:member:`~PyTypeObject.tp_new` 函数返回了一个不是原始类型的子类型的其他类型的实例,则 " +":c:member:`~PyTypeObject.tp_init` 函数不会被调用;如果 " +":c:member:`~PyTypeObject.tp_new` 返回了一个原始类型的子类型的实例,则该子类型的 " +":c:member:`~PyTypeObject.tp_init` 将被调用。" + +#: ../../c-api/typeobj.rst:1693 +msgid "Returns ``0`` on success, ``-1`` and sets an exception on error." +msgstr "" +"成功时返回 ``0``,发生错误时则返回 ``-1`` 并在错误上设置一个异常。and sets an exception on error." + +#: ../../c-api/typeobj.rst:1701 +msgid "For static types this field does not have a default." +msgstr "" + +#: ../../c-api/typeobj.rst:1706 +msgid "An optional pointer to an instance allocation function." +msgstr "指向一个实例分配函数的可选指针。" + +#: ../../c-api/typeobj.rst:1714 +msgid "" +"This field is inherited by static subtypes, but not by dynamic subtypes " +"(subtypes created by a class statement)." +msgstr "该字段会被静态子类型继承,但不会被动态子类型(通过 class 语句创建的子类型)继承。" + +#: ../../c-api/typeobj.rst:1719 +msgid "" +"For dynamic subtypes, this field is always set to " +":c:func:`PyType_GenericAlloc`, to force a standard heap allocation strategy." +msgstr "对于动态子类型,该字段总是会被设为 :c:func:`PyType_GenericAlloc`,以强制应用标准的堆分配策略。" + +#: ../../c-api/typeobj.rst:1723 +msgid "" +"For static subtypes, :c:type:`PyBaseObject_Type` uses " +":c:func:`PyType_GenericAlloc`. That is the recommended value for all " +"statically defined types." +msgstr "" + +#: ../../c-api/typeobj.rst:1730 +msgid "An optional pointer to an instance creation function." +msgstr "一个可选的指向实例创建函数的指针。" + +#: ../../c-api/typeobj.rst:1736 +msgid "" +"The *subtype* argument is the type of the object being created; the *args* " +"and *kwds* arguments represent positional and keyword arguments of the call " +"to the type. Note that *subtype* doesn't have to equal the type whose " +":c:member:`~PyTypeObject.tp_new` function is called; it may be a subtype of " +"that type (but not an unrelated type)." +msgstr "" +"*subtype* 参数是被创建的对象的类型;*args* 和 *kwds* 参数表示调用类型时传入的位置和关键字参数。 请注意 *subtype* " +"不是必须与被调用的 :c:member:`~PyTypeObject.tp_new` " +"函数所属的类型相同;它可以是该类型的子类型(但不能是完全无关的类型)。" + +#: ../../c-api/typeobj.rst:1742 +msgid "" +"The :c:member:`~PyTypeObject.tp_new` function should call " +"``subtype->tp_alloc(subtype, nitems)`` to allocate space for the object, and" +" then do only as much further initialization as is absolutely necessary. " +"Initialization that can safely be ignored or repeated should be placed in " +"the :c:member:`~PyTypeObject.tp_init` handler. A good rule of thumb is that" +" for immutable types, all initialization should take place in " +":c:member:`~PyTypeObject.tp_new`, while for mutable types, most " +"initialization should be deferred to :c:member:`~PyTypeObject.tp_init`." +msgstr "" +":c:member:`~PyTypeObject.tp_new` 函数应当调用 ``subtype->tp_alloc(subtype, " +"nitems)`` 来为对象分配空间,然后只执行绝对有必要的进一步初始化操作。 可以安全地忽略或重复的初始化操作应当放在 " +":c:member:`~PyTypeObject.tp_init` 处理器中。 一个关键的规则是对于不可变类型来说,所有初始化操作都应当在 " +":c:member:`~PyTypeObject.tp_new` 中发生,而对于可变类型,大部分初始化操作都应当推迟到 " +":c:member:`~PyTypeObject.tp_init` 再执行。" + +#: ../../c-api/typeobj.rst:1752 +msgid "" +"This field is inherited by subtypes, except it is not inherited by static " +"types whose :c:member:`~PyTypeObject.tp_base` is ``NULL`` or " +"``&PyBaseObject_Type``." +msgstr "" + +#: ../../c-api/typeobj.rst:1757 +msgid "" +"For static types this field has no default. This means if the slot is " +"defined as ``NULL``, the type cannot be called to create new instances; " +"presumably there is some other way to create instances, like a factory " +"function." +msgstr "" + +#: ../../c-api/typeobj.rst:1765 +msgid "" +"An optional pointer to an instance deallocation function. Its signature " +"is::" +msgstr "一个可选的指向实例释放函数的指针。 函数的签名为::" + +#: ../../c-api/typeobj.rst:1769 +msgid "" +"An initializer that is compatible with this signature is " +":c:func:`PyObject_Free`." +msgstr "一个兼容该签名的初始化器是 :c:func:`PyObject_Free`。" + +#: ../../c-api/typeobj.rst:1773 +msgid "" +"This field is inherited by static subtypes, but not by dynamic subtypes " +"(subtypes created by a class statement)" +msgstr "该字段会被静态子类型继承,但不会被动态子类型(通过 class 语句创建的子类型)继承" + +#: ../../c-api/typeobj.rst:1778 +msgid "" +"In dynamic subtypes, this field is set to a deallocator suitable to match " +":c:func:`PyType_GenericAlloc` and the value of the " +":const:`Py_TPFLAGS_HAVE_GC` flag bit." +msgstr "" + +#: ../../c-api/typeobj.rst:1782 +msgid "For static subtypes, :c:type:`PyBaseObject_Type` uses PyObject_Del." +msgstr "对于静态子类型,:c:type:`PyBaseObject_Type` 使用 PyObject_Del." + +#: ../../c-api/typeobj.rst:1787 +msgid "An optional pointer to a function called by the garbage collector." +msgstr "可选的指向垃圾回收器所调用的函数的指针。" + +#: ../../c-api/typeobj.rst:1789 +msgid "" +"The garbage collector needs to know whether a particular object is " +"collectible or not. Normally, it is sufficient to look at the object's " +"type's :c:member:`~PyTypeObject.tp_flags` field, and check the " +":const:`Py_TPFLAGS_HAVE_GC` flag bit. But some types have a mixture of " +"statically and dynamically allocated instances, and the statically allocated" +" instances are not collectible. Such types should define this function; it " +"should return ``1`` for a collectible instance, and ``0`` for a non-" +"collectible instance. The signature is::" +msgstr "" + +#: ../../c-api/typeobj.rst:1799 +msgid "" +"(The only example of this are types themselves. The metatype, " +":c:data:`PyType_Type`, defines this function to distinguish between " +"statically and dynamically allocated types.)" +msgstr "" + +#: ../../c-api/typeobj.rst:1809 +msgid "" +"This slot has no default. If this field is ``NULL``, " +":const:`Py_TPFLAGS_HAVE_GC` is used as the functional equivalent." +msgstr "" + +#: ../../c-api/typeobj.rst:1815 +msgid "Tuple of base types." +msgstr "基类型的元组。" + +#: ../../c-api/typeobj.rst:1817 +msgid "" +"This is set for types created by a class statement. It should be ``NULL`` " +"for statically defined types." +msgstr "" + +#: ../../c-api/typeobj.rst:1822 ../../c-api/typeobj.rst:1843 +#: ../../c-api/typeobj.rst:1852 ../../c-api/typeobj.rst:1862 +#: ../../c-api/typeobj.rst:1876 +msgid "This field is not inherited." +msgstr "这个字段不会被继承。" + +#: ../../c-api/typeobj.rst:1827 +msgid "" +"Tuple containing the expanded set of base types, starting with the type " +"itself and ending with :class:`object`, in Method Resolution Order." +msgstr "包含基类型的扩展集的元组,以类型本身开始并以 :class:`object` 作为结束,使用方法解析顺序。" + +#: ../../c-api/typeobj.rst:1833 +msgid "" +"This field is not inherited; it is calculated fresh by " +":c:func:`PyType_Ready`." +msgstr "这个字段不会被继承;它是通过 :c:func:`PyType_Ready` 计算得到的。" + +#: ../../c-api/typeobj.rst:1839 +msgid "Unused. Internal use only." +msgstr "尚未使用。 仅供内部使用。" + +#: ../../c-api/typeobj.rst:1848 +msgid "List of weak references to subclasses. Internal use only." +msgstr "由对子类的弱引用组成的列表。 仅供内部使用。" + +#: ../../c-api/typeobj.rst:1857 +msgid "" +"Weak reference list head, for weak references to this type object. Not " +"inherited. Internal use only." +msgstr "弱引用列表头,用于指向该类型对象的弱引用。 不会被继承。 仅限内部使用。" + +#: ../../c-api/typeobj.rst:1867 +msgid "" +"This field is deprecated. Use :c:member:`~PyTypeObject.tp_finalize` " +"instead." +msgstr "该字段已被弃用。 请改用 :c:member:`~PyTypeObject.tp_finalize`。" + +#: ../../c-api/typeobj.rst:1872 +msgid "Used to index into the method cache. Internal use only." +msgstr "用于索引至方法缓存。 仅限内部使用。" + +#: ../../c-api/typeobj.rst:1881 +msgid "" +"An optional pointer to an instance finalization function. Its signature " +"is::" +msgstr "一个可选的指向实例最终化函数的指针。 函数的签名为::" + +#: ../../c-api/typeobj.rst:1885 +msgid "" +"If :c:member:`~PyTypeObject.tp_finalize` is set, the interpreter calls it " +"once when finalizing an instance. It is called either from the garbage " +"collector (if the instance is part of an isolated reference cycle) or just " +"before the object is deallocated. Either way, it is guaranteed to be called" +" before attempting to break reference cycles, ensuring that it finds the " +"object in a sane state." +msgstr "" +"如果设置了 :c:member:`~PyTypeObject.tp_finalize`,解释器将在最终化特定实例时调用它一次。 " +"它将由垃圾回收器调用(如果实例是单独循环引用的一部分)或是在对象被释放之前被调用。 " +"不论是哪种方式,它都肯定会在尝试打破循环引用之前被调用,以确保它所操作的对象处于正常状态。" + +#: ../../c-api/typeobj.rst:1892 +msgid "" +":c:member:`~PyTypeObject.tp_finalize` should not mutate the current " +"exception status; therefore, a recommended way to write a non-trivial " +"finalizer is::" +msgstr ":c:member:`~PyTypeObject.tp_finalize` 不应改变当前异常状态;因此,编写非关键终结器的推荐做法如下::" + +#: ../../c-api/typeobj.rst:1909 +msgid "" +"For this field to be taken into account (even through inheritance), you must" +" also set the :const:`Py_TPFLAGS_HAVE_FINALIZE` flags bit." +msgstr "" + +#: ../../c-api/typeobj.rst:1912 +msgid "" +"Also, note that, in a garbage collected Python, " +":c:member:`~PyTypeObject.tp_dealloc` may be called from any Python thread, " +"not just the thread which created the object (if the object becomes part of " +"a refcount cycle, that cycle might be collected by a garbage collection on " +"any thread). This is not a problem for Python API calls, since the thread " +"on which tp_dealloc is called will own the Global Interpreter Lock (GIL). " +"However, if the object being destroyed in turn destroys objects from some " +"other C or C++ library, care should be taken to ensure that destroying those" +" objects on the thread which called tp_dealloc will not violate any " +"assumptions of the library." +msgstr "" +"另外还需要注意,在应用垃圾回收机制的 Python 中,:c:member:`~PyTypeObject.tp_dealloc` 可以从任意 " +"Python 线程被调用,而不仅是创建该对象的线程(如果对象成为引用计数循环的一部分,则该循环可能会被任何线程上的垃圾回收操作所回收)。 这对 " +"Python API 调用来说不是问题,因为 tp_dealloc 调用所在的线程将持有全局解释器锁(GIL)。 但是,如果被销毁的对象又销毁了来自其他" +" C 或 C++ 库的对象,则应当小心确保在调用 tp_dealloc 的线程上销毁这些对象不会破坏这些库的任何资源。" + +#: ../../c-api/typeobj.rst:1929 +msgid "\"Safe object finalization\" (:pep:`442`)" +msgstr "\"安全的对象最终化\" (:pep:`442`)" + +#: ../../c-api/typeobj.rst:1934 +msgid "" +"Vectorcall function to use for calls of this type object. In other words, it" +" is used to implement :ref:`vectorcall ` for ``type.__call__``. " +"If ``tp_vectorcall`` is ``NULL``, the default call implementation using " +":attr:`__new__` and :attr:`__init__` is used." +msgstr "" + +#: ../../c-api/typeobj.rst:1942 +msgid "This field is never inherited." +msgstr "这个字段不会被继承。" + +#: ../../c-api/typeobj.rst:1944 +msgid "(the field exists since 3.8 but it's only used since 3.9)" +msgstr "(这个字段从 3.8 起即存在,但是从 3.9 开始投入使用)" + +#: ../../c-api/typeobj.rst:1950 +msgid "Heap Types" +msgstr "堆类型" + +#: ../../c-api/typeobj.rst:1952 +msgid "" +"Traditionally, types defined in C code are *static*, that is, a static " +":c:type:`PyTypeObject` structure is defined directly in code and initialized" +" using :c:func:`PyType_Ready`." +msgstr "" +"在传统上,在 C 代码中定义的类型都是 *静态的*,也就是说,:c:type:`PyTypeObject` 结构体在代码中直接定义并使用 " +":c:func:`PyType_Ready` 来初始化。" + +#: ../../c-api/typeobj.rst:1956 +msgid "" +"This results in types that are limited relative to types defined in Python:" +msgstr "这就导致了与在 Python 中定义的类型相关联的类型限制:" + +#: ../../c-api/typeobj.rst:1958 +msgid "" +"Static types are limited to one base, i.e. they cannot use multiple " +"inheritance." +msgstr "静态类型只能拥有一个基类;换句话说,他们不能使用多重继承。" + +#: ../../c-api/typeobj.rst:1960 +msgid "" +"Static type objects (but not necessarily their instances) are immutable. It " +"is not possible to add or modify the type object's attributes from Python." +msgstr "静态类型对象(但并非它们的实例)是不可变对象。 不可能在 Python 中添加或修改类型对象的属性。" + +#: ../../c-api/typeobj.rst:1962 +msgid "" +"Static type objects are shared across :ref:`sub-interpreters `, so they should not include any subinterpreter-" +"specific state." +msgstr "" +"静态类型对象是跨 :ref:`子解释器 ` 共享的,因此它们不应包括任何子解释器专属的状态。" + +#: ../../c-api/typeobj.rst:1966 +msgid "" +"Also, since :c:type:`PyTypeObject` is not part of the :ref:`stable ABI " +"`, any extension modules using static types must be compiled for a " +"specific Python minor version." +msgstr "" + +#: ../../c-api/typeobj.rst:1970 +msgid "" +"An alternative to static types is *heap-allocated types*, or *heap types* " +"for short, which correspond closely to classes created by Python's ``class``" +" statement." +msgstr "" + +#: ../../c-api/typeobj.rst:1974 +msgid "" +"This is done by filling a :c:type:`PyType_Spec` structure and calling " +":c:func:`PyType_FromSpecWithBases`." +msgstr "" + +#: ../../c-api/typeobj.rst:1981 +msgid "Number Object Structures" +msgstr "数字对象结构体" + +#: ../../c-api/typeobj.rst:1988 +msgid "" +"This structure holds pointers to the functions which an object uses to " +"implement the number protocol. Each function is used by the function of " +"similar name documented in the :ref:`number` section." +msgstr "该结构体持有指向被对象用来实现数字协议的函数的指针。 每个函数都被 :ref:`number` 一节中记录的对应名称的函数所使用。" + +#: ../../c-api/typeobj.rst:1994 ../../c-api/typeobj.rst:2318 +msgid "Here is the structure definition::" +msgstr "结构体定义如下::" + +#: ../../c-api/typeobj.rst:2041 +msgid "" +"Binary and ternary functions must check the type of all their operands, and " +"implement the necessary conversions (at least one of the operands is an " +"instance of the defined type). If the operation is not defined for the " +"given operands, binary and ternary functions must return " +"``Py_NotImplemented``, if another error occurred they must return ``NULL`` " +"and set an exception." +msgstr "" +"双目和三目函数必须检查其所有操作数的类型,并实现必要的转换(至少有一个操作数是所定义类型的实例)。 " +"如果没有为所给出的操作数定义操作,则双目和三目函数必须返回 ``Py_NotImplemented``,如果发生了其他错误则它们必须返回 " +"``NULL`` 并设置一个异常。" + +#: ../../c-api/typeobj.rst:2050 +msgid "" +"The :c:data:`nb_reserved` field should always be ``NULL``. It was " +"previously called :c:data:`nb_long`, and was renamed in Python 3.0.1." +msgstr "" + +#: ../../c-api/typeobj.rst:2095 +msgid "Mapping Object Structures" +msgstr "映射对象结构体" + +#: ../../c-api/typeobj.rst:2102 +msgid "" +"This structure holds pointers to the functions which an object uses to " +"implement the mapping protocol. It has three members:" +msgstr "该结构体持有指向对象用于实现映射协议的函数的指针。 它有三个成员:" + +#: ../../c-api/typeobj.rst:2107 +msgid "" +"This function is used by :c:func:`PyMapping_Size` and " +":c:func:`PyObject_Size`, and has the same signature. This slot may be set " +"to ``NULL`` if the object has no defined length." +msgstr "" +"该函数将被 :c:func:`PyMapping_Size` 和 :c:func:`PyObject_Size` 使用,并具有相同的签名。 " +"如果对象没有定义长度则此槽位可被设为 ``NULL``。" + +#: ../../c-api/typeobj.rst:2113 +msgid "" +"This function is used by :c:func:`PyObject_GetItem` and " +":c:func:`PySequence_GetSlice`, and has the same signature as " +":c:func:`!PyObject_GetItem`. This slot must be filled for the " +":c:func:`PyMapping_Check` function to return ``1``, it can be ``NULL`` " +"otherwise." +msgstr "" +"该函数将被 :c:func:`PyObject_GetItem` 和 :c:func:`PySequence_GetSlice` 使用,并具有与 " +":c:func:`!PyObject_GetItem` 相同的签名。 此槽位必须被填充以便 :c:func:`PyMapping_Check` 函数返回" +" ``1``,否则它可以为 ``NULL``。" + +#: ../../c-api/typeobj.rst:2121 +msgid "" +"This function is used by :c:func:`PyObject_SetItem`, " +":c:func:`PyObject_DelItem`, :c:func:`PyObject_SetSlice` and " +":c:func:`PyObject_DelSlice`. It has the same signature as " +":c:func:`!PyObject_SetItem`, but *v* can also be set to ``NULL`` to delete " +"an item. If this slot is ``NULL``, the object does not support item " +"assignment and deletion." +msgstr "" + +#: ../../c-api/typeobj.rst:2132 +msgid "Sequence Object Structures" +msgstr "序列对象结构体" + +#: ../../c-api/typeobj.rst:2139 +msgid "" +"This structure holds pointers to the functions which an object uses to " +"implement the sequence protocol." +msgstr "该结构体持有指向对象用于实现序列协议的函数的指针。" + +#: ../../c-api/typeobj.rst:2144 +msgid "" +"This function is used by :c:func:`PySequence_Size` and " +":c:func:`PyObject_Size`, and has the same signature. It is also used for " +"handling negative indices via the :c:member:`~PySequenceMethods.sq_item` and" +" the :c:member:`~PySequenceMethods.sq_ass_item` slots." +msgstr "" +"此函数被 :c:func:`PySequence_Size` 和 :c:func:`PyObject_Size` 所使用,并具有与它们相同的签名。 " +"它还被用于通过 :c:member:`~PySequenceMethods.sq_item` 和 " +":c:member:`~PySequenceMethods.sq_ass_item` 槽位来处理负索引号。" + +#: ../../c-api/typeobj.rst:2151 +msgid "" +"This function is used by :c:func:`PySequence_Concat` and has the same " +"signature. It is also used by the ``+`` operator, after trying the numeric " +"addition via the :c:member:`~PyNumberMethods.nb_add` slot." +msgstr "" +"此函数被 :c:func:`PySequence_Concat` 所使用并具有相同的签名。 在尝试通过 " +":c:member:`~PyNumberMethods.nb_add` 槽位执行数值相加之后它还会被用于 ``+`` 运算符。" + +#: ../../c-api/typeobj.rst:2157 +msgid "" +"This function is used by :c:func:`PySequence_Repeat` and has the same " +"signature. It is also used by the ``*`` operator, after trying numeric " +"multiplication via the :c:member:`~PyNumberMethods.nb_multiply` slot." +msgstr "" +"此函数被 :c:func:`PySequence_Repeat` 所使用并具有相同的签名。 在尝试通过 " +":c:member:`~PyNumberMethods.nb_multiply` 槽位执行数值相乘之后它还会被用于 ``*`` 运算符。" + +#: ../../c-api/typeobj.rst:2163 +msgid "" +"This function is used by :c:func:`PySequence_GetItem` and has the same " +"signature. It is also used by :c:func:`PyObject_GetItem`, after trying the " +"subscription via the :c:member:`~PyMappingMethods.mp_subscript` slot. This " +"slot must be filled for the :c:func:`PySequence_Check` function to return " +"``1``, it can be ``NULL`` otherwise." +msgstr "" +"此函数被 :c:func:`PySequence_GetItem` 所使用并具有相同的签名。 在尝试通过 " +":c:member:`~PyMappingMethods.mp_subscript` 槽位执行下标操作之后它还会被用于 " +":c:func:`PyObject_GetItem`。 该槽位必须被填充以便 :c:func:`PySequence_Check` 函数返回 " +"``1``,否则它可以为 ``NULL``。" + +#: ../../c-api/typeobj.rst:2169 +msgid "" +"Negative indexes are handled as follows: if the :attr:`sq_length` slot is " +"filled, it is called and the sequence length is used to compute a positive " +"index which is passed to :attr:`sq_item`. If :attr:`sq_length` is ``NULL``," +" the index is passed as is to the function." +msgstr "" + +#: ../../c-api/typeobj.rst:2176 +msgid "" +"This function is used by :c:func:`PySequence_SetItem` and has the same " +"signature. It is also used by :c:func:`PyObject_SetItem` and " +":c:func:`PyObject_DelItem`, after trying the item assignment and deletion " +"via the :c:member:`~PyMappingMethods.mp_ass_subscript` slot. This slot may " +"be left to ``NULL`` if the object does not support item assignment and " +"deletion." +msgstr "" +"此函数被 :c:func:`PySequence_SetItem` 所使用并具有相同的签名。 在尝试通过 " +":c:member:`~PyMappingMethods.mp_ass_subscript` 槽位执行条目赋值和删除操作之后它还会被用于 " +":c:func:`PyObject_SetItem` 和 :c:func:`PyObject_DelItem`。 " +"如果对象不支持条目和删除则该槽位可以保持为 ``NULL``。" + +#: ../../c-api/typeobj.rst:2185 +msgid "" +"This function may be used by :c:func:`PySequence_Contains` and has the same " +"signature. This slot may be left to ``NULL``, in this case " +":c:func:`!PySequence_Contains` simply traverses the sequence until it finds " +"a match." +msgstr "" +"该函数可供 :c:func:`PySequence_Contains` 使用并具有相同的签名。 此槽位可以保持为 ``NULL``,在此情况下 " +":c:func:`!PySequence_Contains` 只需遍历该序列直到找到一个匹配。" + +#: ../../c-api/typeobj.rst:2192 +msgid "" +"This function is used by :c:func:`PySequence_InPlaceConcat` and has the same" +" signature. It should modify its first operand, and return it. This slot " +"may be left to ``NULL``, in this case :c:func:`!PySequence_InPlaceConcat` " +"will fall back to :c:func:`PySequence_Concat`. It is also used by the " +"augmented assignment ``+=``, after trying numeric in-place addition via the " +":c:member:`~PyNumberMethods.nb_inplace_add` slot." +msgstr "" +"此函数被 :c:func:`PySequence_InPlaceConcat` 所使用并具有相同的签名。 它应当修改它的第一个操作数,并将其返回。 " +"该槽位可以保持为 ``NULL``,在此情况下 :c:func:`!PySequence_InPlaceConcat` 将回退到 " +":c:func:`PySequence_Concat`。 在尝试通过 " +":c:member:`~PyNumberMethods.nb_inplace_add` 槽位执行数字原地相加之后它还会被用于增强赋值运算符 " +"``+=``。" + +#: ../../c-api/typeobj.rst:2201 +msgid "" +"This function is used by :c:func:`PySequence_InPlaceRepeat` and has the same" +" signature. It should modify its first operand, and return it. This slot " +"may be left to ``NULL``, in this case :c:func:`!PySequence_InPlaceRepeat` " +"will fall back to :c:func:`PySequence_Repeat`. It is also used by the " +"augmented assignment ``*=``, after trying numeric in-place multiplication " +"via the :c:member:`~PyNumberMethods.nb_inplace_multiply` slot." +msgstr "" +"此函数被 :c:func:`PySequence_InPlaceRepeat` 所使用并具有相同的签名。 它应当修改它的第一个操作数,并将其返回。 " +"该槽位可以保持为 ``NULL``,在此情况下 :c:func:`!PySequence_InPlaceRepeat` 将回退到 " +":c:func:`PySequence_Repeat`。 在尝试通过 " +":c:member:`~PyNumberMethods.nb_inplace_multiply` 槽位执行数字原地相乘之后它还会被用于增强赋值运算符 " +"``*=``。" + +#: ../../c-api/typeobj.rst:2212 +msgid "Buffer Object Structures" +msgstr "缓冲区对象结构体" + +#: ../../c-api/typeobj.rst:2220 +msgid "" +"This structure holds pointers to the functions required by the :ref:`Buffer " +"protocol `. The protocol defines how an exporter object can " +"expose its internal data to consumer objects." +msgstr "" +"此结构体持有指向 :ref:`缓冲区协议 ` 所需要的函数的指针。 " +"该协议定义了导出方对象要如何向消费方对象暴露其内部数据。" + +#: ../../c-api/typeobj.rst:2226 ../../c-api/typeobj.rst:2275 +#: ../../c-api/typeobj.rst:2328 ../../c-api/typeobj.rst:2339 +#: ../../c-api/typeobj.rst:2351 +msgid "The signature of this function is::" +msgstr "此函数的签名为::" + +#: ../../c-api/typeobj.rst:2230 +msgid "" +"Handle a request to *exporter* to fill in *view* as specified by *flags*. " +"Except for point (3), an implementation of this function MUST take these " +"steps:" +msgstr "处理发给 *exporter* 的请求来填充 *flags* 所指定的 *view*。 除第 (3) 点外,此函数的实现必须执行以下步骤:" + +#: ../../c-api/typeobj.rst:2234 +msgid "" +"Check if the request can be met. If not, raise :c:data:`PyExc_BufferError`, " +"set :c:data:`view->obj` to ``NULL`` and return ``-1``." +msgstr "" + +#: ../../c-api/typeobj.rst:2237 +msgid "Fill in the requested fields." +msgstr "填充请求的字段。" + +#: ../../c-api/typeobj.rst:2239 +msgid "Increment an internal counter for the number of exports." +msgstr "递增用于保存导出次数的内部计数器。" + +#: ../../c-api/typeobj.rst:2241 +msgid "" +"Set :c:data:`view->obj` to *exporter* and increment :c:data:`view->obj`." +msgstr "" + +#: ../../c-api/typeobj.rst:2243 +msgid "Return ``0``." +msgstr "返回 ``0``。" + +#: ../../c-api/typeobj.rst:2245 +msgid "" +"If *exporter* is part of a chain or tree of buffer providers, two main " +"schemes can be used:" +msgstr "如果 *exporter* 是缓冲区提供方的链式或树型结构的一部分,则可以使用两种主要方案:" + +#: ../../c-api/typeobj.rst:2248 +msgid "" +"Re-export: Each member of the tree acts as the exporting object and sets " +":c:data:`view->obj` to a new reference to itself." +msgstr "" + +#: ../../c-api/typeobj.rst:2251 +msgid "" +"Redirect: The buffer request is redirected to the root object of the tree. " +"Here, :c:data:`view->obj` will be a new reference to the root object." +msgstr "" + +#: ../../c-api/typeobj.rst:2255 +msgid "" +"The individual fields of *view* are described in section :ref:`Buffer " +"structure `, the rules how an exporter must react to " +"specific requests are in section :ref:`Buffer request types `." +msgstr "" +"*view* 中每个字段的描述参见 :ref:`缓冲区结构体 ` 一节,导出方对于特定请求应当如何反应参见 " +":ref:`缓冲区请求类型 ` 一节。" + +#: ../../c-api/typeobj.rst:2260 +msgid "" +"All memory pointed to in the :c:type:`Py_buffer` structure belongs to the " +"exporter and must remain valid until there are no consumers left. " +":c:member:`~Py_buffer.format`, :c:member:`~Py_buffer.shape`, " +":c:member:`~Py_buffer.strides`, :c:member:`~Py_buffer.suboffsets` and " +":c:member:`~Py_buffer.internal` are read-only for the consumer." +msgstr "" +"所有在 :c:type:`Py_buffer` 结构体中被指向的内存都属于导出方并必须保持有效直到不再有任何消费方。 " +":c:member:`~Py_buffer.format`, :c:member:`~Py_buffer.shape`, " +":c:member:`~Py_buffer.strides`, :c:member:`~Py_buffer.suboffsets` 和 " +":c:member:`~Py_buffer.internal` 对于消费方来说是只读的。" + +#: ../../c-api/typeobj.rst:2267 +msgid "" +":c:func:`PyBuffer_FillInfo` provides an easy way of exposing a simple bytes " +"buffer while dealing correctly with all request types." +msgstr ":c:func:`PyBuffer_FillInfo` 提供了一种暴露简单字节缓冲区同时正确处理地所有请求类型的简便方式。" + +#: ../../c-api/typeobj.rst:2270 +msgid "" +":c:func:`PyObject_GetBuffer` is the interface for the consumer that wraps " +"this function." +msgstr ":c:func:`PyObject_GetBuffer` 是针对包装此函数的消费方的接口。" + +#: ../../c-api/typeobj.rst:2279 +msgid "" +"Handle a request to release the resources of the buffer. If no resources " +"need to be released, :c:member:`PyBufferProcs.bf_releasebuffer` may be " +"``NULL``. Otherwise, a standard implementation of this function will take " +"these optional steps:" +msgstr "" +"处理释放缓冲区资源的请求。 如果不需要释放任何资源,则 :c:member:`PyBufferProcs.bf_releasebuffer` 可以为 " +"``NULL``。 在其他情况下,此函数的标准实现将执行以下的可选步骤:" + +#: ../../c-api/typeobj.rst:2284 +msgid "Decrement an internal counter for the number of exports." +msgstr "递减用于保存导出次数的内部计数器。" + +#: ../../c-api/typeobj.rst:2286 +msgid "If the counter is ``0``, free all memory associated with *view*." +msgstr "如果计数器为 ``0``,则释放所有关联到 *view* 的内存。" + +#: ../../c-api/typeobj.rst:2288 +msgid "" +"The exporter MUST use the :c:member:`~Py_buffer.internal` field to keep " +"track of buffer-specific resources. This field is guaranteed to remain " +"constant, while a consumer MAY pass a copy of the original buffer as the " +"*view* argument." +msgstr "" +"导出方必须使用 :c:member:`~Py_buffer.internal` 字段来记录缓冲区专属的资源。 " +"该字段将确保恒定,而消费方则可能将原始缓冲区作为 *view* 参数传入。" + +#: ../../c-api/typeobj.rst:2294 +msgid "" +"This function MUST NOT decrement :c:data:`view->obj`, since that is done " +"automatically in :c:func:`PyBuffer_Release` (this scheme is useful for " +"breaking reference cycles)." +msgstr "" + +#: ../../c-api/typeobj.rst:2299 +msgid "" +":c:func:`PyBuffer_Release` is the interface for the consumer that wraps this" +" function." +msgstr ":c:func:`PyBuffer_Release` 是针对包装此函数的消费方的接口。" + +#: ../../c-api/typeobj.rst:2307 +msgid "Async Object Structures" +msgstr "异步对象结构体" + +#: ../../c-api/typeobj.rst:2315 +msgid "" +"This structure holds pointers to the functions required to implement " +":term:`awaitable` and :term:`asynchronous iterator` objects." +msgstr "" +"此结构体将持有指向需要用来实现 :term:`awaitable` 和 :term:`asynchronous iterator` 对象的函数的指针。" + +#: ../../c-api/typeobj.rst:2332 +msgid "" +"The returned object must be an iterator, i.e. :c:func:`PyIter_Check` must " +"return ``1`` for it." +msgstr "" + +#: ../../c-api/typeobj.rst:2335 +msgid "" +"This slot may be set to ``NULL`` if an object is not an :term:`awaitable`." +msgstr "如果一个对象不是 :term:`awaitable` 则此槽位可被设为 ``NULL``。" + +#: ../../c-api/typeobj.rst:2343 +msgid "" +"Must return an :term:`asynchronous iterator` object. See :meth:`__anext__` " +"for details." +msgstr "必须返回一个 :term:`asynchronous iterator` 对象。 请参阅 :meth:`__anext__` 了解详情。" + +#: ../../c-api/typeobj.rst:2346 +msgid "" +"This slot may be set to ``NULL`` if an object does not implement " +"asynchronous iteration protocol." +msgstr "如果一个对象没有实现异步迭代协议则此槽位可被设为 ``NULL``。" + +#: ../../c-api/typeobj.rst:2355 +msgid "" +"Must return an :term:`awaitable` object. See :meth:`__anext__` for details." +" This slot may be set to ``NULL``." +msgstr "" + +#: ../../c-api/typeobj.rst:2362 +msgid "Slot Type typedefs" +msgstr "槽位类型 typedef" + +#: ../../c-api/typeobj.rst:2366 +msgid "" +"The purpose of this function is to separate memory allocation from memory " +"initialization. It should return a pointer to a block of memory of adequate" +" length for the instance, suitably aligned, and initialized to zeros, but " +"with :attr:`ob_refcnt` set to ``1`` and :attr:`ob_type` set to the type " +"argument. If the type's :c:member:`~PyTypeObject.tp_itemsize` is non-zero, " +"the object's :attr:`ob_size` field should be initialized to *nitems* and the" +" length of the allocated memory block should be ``tp_basicsize + " +"nitems*tp_itemsize``, rounded up to a multiple of ``sizeof(void*)``; " +"otherwise, *nitems* is not used and the length of the block should be " +":c:member:`~PyTypeObject.tp_basicsize`." +msgstr "" + +#: ../../c-api/typeobj.rst:2376 +msgid "" +"This function should not do any other instance initialization, not even to " +"allocate additional memory; that should be done by " +":c:member:`~PyTypeObject.tp_new`." +msgstr "" +"此函数不应执行任何其他实例初始化操作,即使是分配额外内存也不应执行;那应当由 :c:member:`~PyTypeObject.tp_new` 来完成。" + +#: ../../c-api/typeobj.rst:2383 +msgid "See :c:member:`~PyTypeObject.tp_free`." +msgstr "参见 :c:member:`~PyTypeObject.tp_free`。" + +#: ../../c-api/typeobj.rst:2387 +msgid "See :c:member:`~PyTypeObject.tp_new`." +msgstr "参见 :c:member:`~PyTypeObject.tp_new`。" + +#: ../../c-api/typeobj.rst:2391 +msgid "See :c:member:`~PyTypeObject.tp_init`." +msgstr "参见 :c:member:`~PyTypeObject.tp_init`。" + +#: ../../c-api/typeobj.rst:2395 +msgid "See :c:member:`~PyTypeObject.tp_repr`." +msgstr "参见 :c:member:`~PyTypeObject.tp_repr`。" + +#: ../../c-api/typeobj.rst:2399 ../../c-api/typeobj.rst:2408 +msgid "Return the value of the named attribute for the object." +msgstr "返回对象的指定属性的值。" + +#: ../../c-api/typeobj.rst:2403 ../../c-api/typeobj.rst:2414 +msgid "" +"Set the value of the named attribute for the object. The value argument is " +"set to ``NULL`` to delete the attribute." +msgstr "为对象设置指定属性的值。 将 value 参数设为 ``NULL`` 将删除该属性。" + +#: ../../c-api/typeobj.rst:2410 +msgid "See :c:member:`~PyTypeObject.tp_getattro`." +msgstr "参见 :c:member:`~PyTypeObject.tp_getattro`。" + +#: ../../c-api/typeobj.rst:2417 +msgid "See :c:member:`~PyTypeObject.tp_setattro`." +msgstr "参见 :c:member:`~PyTypeObject.tp_setattro`。" + +#: ../../c-api/typeobj.rst:2421 +msgid "See :c:member:`~PyTypeObject.tp_descrget`." +msgstr "" + +#: ../../c-api/typeobj.rst:2425 +msgid "See :c:member:`~PyTypeObject.tp_descrset`." +msgstr "" + +#: ../../c-api/typeobj.rst:2429 +msgid "See :c:member:`~PyTypeObject.tp_hash`." +msgstr "参见 :c:member:`~PyTypeObject.tp_hash`。" + +#: ../../c-api/typeobj.rst:2433 +msgid "See :c:member:`~PyTypeObject.tp_richcompare`." +msgstr "参见 :c:member:`~PyTypeObject.tp_richcompare`。" + +#: ../../c-api/typeobj.rst:2437 +msgid "See :c:member:`~PyTypeObject.tp_iter`." +msgstr "参见 :c:member:`~PyTypeObject.tp_iter`。" + +#: ../../c-api/typeobj.rst:2441 +msgid "See :c:member:`~PyTypeObject.tp_iternext`." +msgstr "参见 :c:member:`~PyTypeObject.tp_iternext`。" + +#: ../../c-api/typeobj.rst:2467 +msgid "Examples" +msgstr "例子" + +#: ../../c-api/typeobj.rst:2469 +msgid "" +"The following are simple examples of Python type definitions. They include " +"common usage you may encounter. Some demonstrate tricky corner cases. For " +"more examples, practical info, and a tutorial, see :ref:`defining-new-types`" +" and :ref:`new-types-topics`." +msgstr "" +"下面是一些 Python 类型定义的简单示例。 其中包括你可能会遇到的通常用法。 有些演示了令人困惑的边际情况。 " +"要获取更多示例、实践信息以及教程,请参阅 :ref:`defining-new-types` 和 :ref:`new-types-topics`。" + +#: ../../c-api/typeobj.rst:2474 +msgid "A basic static type::" +msgstr "" + +#: ../../c-api/typeobj.rst:2491 +msgid "" +"You may also find older code (especially in the CPython code base) with a " +"more verbose initializer::" +msgstr "你可能还会看到带有更繁琐的初始化器的较旧代码(特别是在 CPython 代码库中)::" + +#: ../../c-api/typeobj.rst:2535 +msgid "A type that supports weakrefs, instance dicts, and hashing::" +msgstr "一个支持弱引用、实例字典和哈希运算的类型::" + +#: ../../c-api/typeobj.rst:2562 +msgid "" +"A str subclass that cannot be subclassed and cannot be called to create " +"instances (e.g. uses a separate factory func)::" +msgstr "" + +#: ../../c-api/typeobj.rst:2581 +msgid "The simplest static type (with fixed-length instances)::" +msgstr "" + +#: ../../c-api/typeobj.rst:2592 +msgid "The simplest static type (with variable-length instances)::" +msgstr "" diff --git a/c-api/unicode.po b/c-api/unicode.po new file mode 100644 index 000000000..c1a1b7d79 --- /dev/null +++ b/c-api/unicode.po @@ -0,0 +1,2168 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) 2001-2025, Python Software Foundation +# This file is distributed under the same license as the Python package. +# FIRST AUTHOR , YEAR. +# +# Translators: +# 8af080f2e6702c64bedd01873aed27e8_25aec74 , 2019 +# ppcfish , 2019 +# Jiuh.star , 2021 +# 高乐喆 , 2023 +# Freesand Leo , 2024 +# Rafael Fontenelle , 2025 +# +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: Python 3.9\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2025-02-07 16:40+0000\n" +"PO-Revision-Date: 2017-02-16 17:39+0000\n" +"Last-Translator: Rafael Fontenelle , 2025\n" +"Language-Team: Chinese (China) (https://app.transifex.com/python-doc/teams/5390/zh_CN/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: zh_CN\n" +"Plural-Forms: nplurals=1; plural=0;\n" + +#: ../../c-api/unicode.rst:6 +msgid "Unicode Objects and Codecs" +msgstr "Unicode对象和编解码器" + +#: ../../c-api/unicode.rst:12 +msgid "Unicode Objects" +msgstr "Unicode对象" + +#: ../../c-api/unicode.rst:14 +msgid "" +"Since the implementation of :pep:`393` in Python 3.3, Unicode objects " +"internally use a variety of representations, in order to allow handling the " +"complete range of Unicode characters while staying memory efficient. There " +"are special cases for strings where all code points are below 128, 256, or " +"65536; otherwise, code points must be below 1114112 (which is the full " +"Unicode range)." +msgstr "" +"自从python3.3中实现了 :pep:`393` " +"以来,Unicode对象在内部使用各种表示形式,以便在保持内存效率的同时处理完整范围的Unicode字符。对于所有代码点都低于128、256或65536的字符串,有一些特殊情况;否则,代码点必须低于1114112(这是完整的Unicode范围)。" + +#: ../../c-api/unicode.rst:20 +msgid "" +":c:type:`Py_UNICODE*` and UTF-8 representations are created on demand and " +"cached in the Unicode object. The :c:type:`Py_UNICODE*` representation is " +"deprecated and inefficient." +msgstr "" + +#: ../../c-api/unicode.rst:24 +msgid "" +"Due to the transition between the old APIs and the new APIs, Unicode objects" +" can internally be in two states depending on how they were created:" +msgstr "由于旧API和新API之间的转换,Unicode对象内部可以处于两种状态,这取决于它们的创建方式:" + +#: ../../c-api/unicode.rst:27 +msgid "" +"\"canonical\" Unicode objects are all objects created by a non-deprecated " +"Unicode API. They use the most efficient representation allowed by the " +"implementation." +msgstr "“规范”Unicode对象是由非弃用的Unicode API创建的所有对象。它们使用实现所允许的最有效的表达方式。" + +#: ../../c-api/unicode.rst:31 +msgid "" +"\"legacy\" Unicode objects have been created through one of the deprecated " +"APIs (typically :c:func:`PyUnicode_FromUnicode`) and only bear the " +":c:type:`Py_UNICODE*` representation; you will have to call " +":c:func:`PyUnicode_READY` on them before calling any other API." +msgstr "" + +#: ../../c-api/unicode.rst:37 +msgid "" +"The \"legacy\" Unicode object will be removed in Python 3.12 with deprecated" +" APIs. All Unicode objects will be \"canonical\" since then. See :pep:`623` " +"for more information." +msgstr "" + +#: ../../c-api/unicode.rst:43 +msgid "Unicode Type" +msgstr "Unicode类型" + +#: ../../c-api/unicode.rst:45 +msgid "" +"These are the basic Unicode object types used for the Unicode implementation" +" in Python:" +msgstr "以下是用于Python中Unicode实现的基本Unicode对象类型:" + +#: ../../c-api/unicode.rst:52 +msgid "" +"These types are typedefs for unsigned integer types wide enough to contain " +"characters of 32 bits, 16 bits and 8 bits, respectively. When dealing with " +"single Unicode characters, use :c:type:`Py_UCS4`." +msgstr "" +"这些类型是无符号整数类型的类型定义,其宽度足以分别包含 32 位、16 位和 8 位字符。 当需要处理单个 Unicode 字符时,请使用 " +":c:type:`Py_UCS4`。" + +#: ../../c-api/unicode.rst:61 +msgid "" +"This is a typedef of :c:type:`wchar_t`, which is a 16-bit type or 32-bit " +"type depending on the platform." +msgstr "这是 :c:type:`wchar_t` 的类型定义,根据平台的不同它可能为 16 位类型或 32 位类型。" + +#: ../../c-api/unicode.rst:64 +msgid "" +"In previous versions, this was a 16-bit type or a 32-bit type depending on " +"whether you selected a \"narrow\" or \"wide\" Unicode version of Python at " +"build time." +msgstr "在以前的版本中,这是16位类型还是32位类型,这取决于您在构建时选择的是“窄”还是“宽”Unicode版本的Python。" + +#: ../../c-api/unicode.rst:74 +msgid "" +"These subtypes of :c:type:`PyObject` represent a Python Unicode object. In " +"almost all cases, they shouldn't be used directly, since all API functions " +"that deal with Unicode objects take and return :c:type:`PyObject` pointers." +msgstr "" +"这些关于 :c:type:`PyObject` 的子类型表示了一个 Python Unicode 对象。 " +"在几乎所有情形下,它们不应该被直接使用,因为所有处理 Unicode 对象的 API 函数都接受并返回 :c:type:`PyObject` " +"类型的指针。" + +#: ../../c-api/unicode.rst:83 +msgid "" +"This instance of :c:type:`PyTypeObject` represents the Python Unicode type." +" It is exposed to Python code as ``str``." +msgstr "" +"这个 :c:type:`PyTypeObject` 实例代表 Python Unicode 类型。 它作为 ``str`` 公开给 Python 代码。" + +#: ../../c-api/unicode.rst:87 +msgid "" +"The following APIs are really C macros and can be used to do fast checks and" +" to access internal read-only data of Unicode objects:" +msgstr "" + +#: ../../c-api/unicode.rst:92 +msgid "" +"Return true if the object *o* is a Unicode object or an instance of a " +"Unicode subtype. This function always succeeds." +msgstr "如果对象*o*是Unicode对象或Unicode子类型的实例,则返回“真\"。此函数始终成功。" + +#: ../../c-api/unicode.rst:98 +msgid "" +"Return true if the object *o* is a Unicode object, but not an instance of a " +"subtype. This function always succeeds." +msgstr "如果对象*o*是Unicode对象,但不是子类型的实例,则返回“真”。此函数始终成功。" + +#: ../../c-api/unicode.rst:104 +msgid "" +"Ensure the string object *o* is in the \"canonical\" representation. This " +"is required before using any of the access macros described below." +msgstr "确保字符串对象*o*处于“规范的”表达方式。在使用下面描述的任何访问宏之前,这是必需的。" + +#: ../../c-api/unicode.rst:109 +msgid "" +"Returns ``0`` on success and ``-1`` with an exception set on failure, which " +"in particular happens if memory allocation fails." +msgstr "" + +#: ../../c-api/unicode.rst:115 +msgid "This API will be removed with :c:func:`PyUnicode_FromUnicode`." +msgstr "" + +#: ../../c-api/unicode.rst:120 +msgid "" +"Return the length of the Unicode string, in code points. *o* has to be a " +"Unicode object in the \"canonical\" representation (not checked)." +msgstr "返回Unicode字符串的长度(以代码点为单位)*o*必须是“规范”表达方式中的Unicode对象(未选中)。" + +#: ../../c-api/unicode.rst:130 +msgid "" +"Return a pointer to the canonical representation cast to UCS1, UCS2 or UCS4 " +"integer types for direct character access. No checks are performed if the " +"canonical representation has the correct character size; use " +":c:func:`PyUnicode_KIND` to select the right macro. Make sure " +":c:func:`PyUnicode_READY` has been called before accessing this." +msgstr "" + +#: ../../c-api/unicode.rst:144 +msgid "Return values of the :c:func:`PyUnicode_KIND` macro." +msgstr "返回 :c:func:`PyUnicode_KIND` 宏的值。" + +#: ../../c-api/unicode.rst:149 +msgid "``PyUnicode_WCHAR_KIND`` is deprecated." +msgstr "``PyUnicode_WCHAR_KIND`` 已被弃用。" + +#: ../../c-api/unicode.rst:154 +msgid "" +"Return one of the PyUnicode kind constants (see above) that indicate how " +"many bytes per character this Unicode object uses to store its data. *o* " +"has to be a Unicode object in the \"canonical\" representation (not " +"checked)." +msgstr "" +"返回一个PyUnicode类常量(见上文),指示此Unicode对象用于存储其数据的每个字符的字节数*o*必须是“规范”表达方式中的Unicode对象(未选中)。" + +#: ../../c-api/unicode.rst:165 +msgid "" +"Return a void pointer to the raw Unicode buffer. *o* has to be a Unicode " +"object in the \"canonical\" representation (not checked)." +msgstr "返回指向原始Unicode缓冲区的空指针*o*必须是“规范”表达方式中的Unicode对象(未选中)。" + +#: ../../c-api/unicode.rst:174 +msgid "" +"Write into a canonical representation *data* (as obtained with " +":c:func:`PyUnicode_DATA`). This macro does not do any sanity checks and is " +"intended for usage in loops. The caller should cache the *kind* value and " +"*data* pointer as obtained from other macro calls. *index* is the index in " +"the string (starts at 0) and *value* is the new code point value which " +"should be written to that location." +msgstr "" + +#: ../../c-api/unicode.rst:186 +msgid "" +"Read a code point from a canonical representation *data* (as obtained with " +":c:func:`PyUnicode_DATA`). No checks or ready calls are performed." +msgstr "从规范表示的 *data* (如同用 :c:func:`PyUnicode_DATA` 获取) 中读取一个码位。 不会执行检查或就绪调用。" + +#: ../../c-api/unicode.rst:194 +msgid "" +"Read a character from a Unicode object *o*, which must be in the " +"\"canonical\" representation. This is less efficient than " +":c:func:`PyUnicode_READ` if you do multiple consecutive reads." +msgstr "" +"从 Unicode 对象 *o* 读取一个字符,必须使用“规范”表示形式。 如果你执行行多次连续读取则此函数的效率将低于 " +":c:func:`PyUnicode_READ`。" + +#: ../../c-api/unicode.rst:203 +msgid "" +"Return the maximum code point that is suitable for creating another string " +"based on *o*, which must be in the \"canonical\" representation. This is " +"always an approximation but more efficient than iterating over the string." +msgstr "返回适合于基于*o*创建另一个字符串的最大代码点,该字符串必须在“规范”表达方式中。这始终是一种近似,但比在字符串上迭代更有效。" + +#: ../../c-api/unicode.rst:212 +msgid "" +"Return the size of the deprecated :c:type:`Py_UNICODE` representation, in " +"code units (this includes surrogate pairs as 2 units). *o* has to be a " +"Unicode object (not checked)." +msgstr "" + +#: ../../c-api/unicode.rst:218 ../../c-api/unicode.rst:228 +#: ../../c-api/unicode.rst:772 +msgid "" +"Part of the old-style Unicode API, please migrate to using " +":c:func:`PyUnicode_GET_LENGTH`." +msgstr "旧式 Unicode API 的一部分,请迁移到使用 :c:func:`PyUnicode_GET_LENGTH`。" + +#: ../../c-api/unicode.rst:223 +msgid "" +"Return the size of the deprecated :c:type:`Py_UNICODE` representation in " +"bytes. *o* has to be a Unicode object (not checked)." +msgstr "" + +#: ../../c-api/unicode.rst:234 +msgid "" +"Return a pointer to a :c:type:`Py_UNICODE` representation of the object. " +"The returned buffer is always terminated with an extra null code point. It " +"may also contain embedded null code points, which would cause the string to " +"be truncated when used in most C functions. The ``AS_DATA`` form casts the " +"pointer to :c:type:`const char *`. The *o* argument has to be a Unicode " +"object (not checked)." +msgstr "" + +#: ../../c-api/unicode.rst:241 +msgid "" +"This macro is now inefficient -- because in many cases the " +":c:type:`Py_UNICODE` representation does not exist and needs to be created " +"-- and can fail (return ``NULL`` with an exception set). Try to port the " +"code to use the new :c:func:`PyUnicode_nBYTE_DATA` macros or use " +":c:func:`PyUnicode_WRITE` or :c:func:`PyUnicode_READ`." +msgstr "" + +#: ../../c-api/unicode.rst:250 +msgid "" +"Part of the old-style Unicode API, please migrate to using the " +":c:func:`PyUnicode_nBYTE_DATA` family of macros." +msgstr "旧式 Unicode API 的一部分,请迁移到使用 :c:func:`PyUnicode_nBYTE_DATA` 宏族。" + +#: ../../c-api/unicode.rst:255 +msgid "" +"Return ``1`` if the string is a valid identifier according to the language " +"definition, section :ref:`identifiers`. Return ``0`` otherwise." +msgstr "如果字符串按照语言定义是合法的标识符则返回 ``1``,参见 :ref:`identifiers` 小节。 否则返回 ``0``。" + +#: ../../c-api/unicode.rst:258 +msgid "" +"The function does not call :c:func:`Py_FatalError` anymore if the string is " +"not ready." +msgstr "如果字符串尚未就绪则此函数不会再调用 :c:func:`Py_FatalError`。" + +#: ../../c-api/unicode.rst:264 +msgid "Unicode Character Properties" +msgstr "Unicode字符属性" + +#: ../../c-api/unicode.rst:266 +msgid "" +"Unicode provides many different character properties. The most often needed " +"ones are available through these macros which are mapped to C functions " +"depending on the Python configuration." +msgstr "Unicode提供了许多不同的字符特性。最常需要的宏可以通过这些宏获得,这些宏根据Python配置映射到C函数。" + +#: ../../c-api/unicode.rst:273 +msgid "" +"Return ``1`` or ``0`` depending on whether *ch* is a whitespace character." +msgstr "根据 *ch* 是否为空白字符返回 ``1`` 或 ``0``。" + +#: ../../c-api/unicode.rst:278 +msgid "" +"Return ``1`` or ``0`` depending on whether *ch* is a lowercase character." +msgstr "根据 *ch* 是否为小写字符返回 ``1`` 或 ``0``。" + +#: ../../c-api/unicode.rst:283 +msgid "" +"Return ``1`` or ``0`` depending on whether *ch* is an uppercase character." +msgstr "根据 *ch* 是否为大写字符返回 ``1`` 或 ``0``" + +#: ../../c-api/unicode.rst:288 +msgid "" +"Return ``1`` or ``0`` depending on whether *ch* is a titlecase character." +msgstr "根据 *ch* 是否为标题化的大小写返回 ``1`` 或 ``0``。" + +#: ../../c-api/unicode.rst:293 +msgid "" +"Return ``1`` or ``0`` depending on whether *ch* is a linebreak character." +msgstr "根据 *ch* 是否为换行类字符返回 ``1`` 或 ``0``。" + +#: ../../c-api/unicode.rst:298 +msgid "" +"Return ``1`` or ``0`` depending on whether *ch* is a decimal character." +msgstr "根据 *ch* 是否为十进制数字符返回 ``1`` 或 ``0``。" + +#: ../../c-api/unicode.rst:303 +msgid "Return ``1`` or ``0`` depending on whether *ch* is a digit character." +msgstr "根据 *ch* 是否为数码类字符返回 ``1`` 或 ``0``。" + +#: ../../c-api/unicode.rst:308 +msgid "" +"Return ``1`` or ``0`` depending on whether *ch* is a numeric character." +msgstr "根据 *ch* 是否为数值类字符返回 ``1`` 或 ``0``。" + +#: ../../c-api/unicode.rst:313 +msgid "" +"Return ``1`` or ``0`` depending on whether *ch* is an alphabetic character." +msgstr "根据 *ch* 是否为字母类字符返回 ``1`` 或 ``0``。" + +#: ../../c-api/unicode.rst:318 +msgid "" +"Return ``1`` or ``0`` depending on whether *ch* is an alphanumeric " +"character." +msgstr "根据 *ch* 是否为字母数字类字符返回 ``1`` 或 ``0``。" + +#: ../../c-api/unicode.rst:323 +msgid "" +"Return ``1`` or ``0`` depending on whether *ch* is a printable character. " +"Nonprintable characters are those characters defined in the Unicode " +"character database as \"Other\" or \"Separator\", excepting the ASCII space " +"(0x20) which is considered printable. (Note that printable characters in " +"this context are those which should not be escaped when :func:`repr` is " +"invoked on a string. It has no bearing on the handling of strings written to" +" :data:`sys.stdout` or :data:`sys.stderr`.)" +msgstr "" +"根据 *ch* 是否为可打印字符返回 ``1`` 或``0``。 不可打印字符是指在 Unicode 字符数据库中被定义为 \"Other\" 或 " +"\"Separator\" 的字符,例外情况是 ASCII 空格 (0x20) 被视为可打印字符。 (请注意在此语境下可打印字符是指当在字符串上唤起 " +":func:`repr` 时不应被转义的字符。 它们字符串写入 :data:`sys.stdout` 或 :data:`sys.stderr` " +"时所需的处理无关)。" + +#: ../../c-api/unicode.rst:332 +msgid "These APIs can be used for fast direct character conversions:" +msgstr "这些 API 可用于快速直接的字符转换:" + +#: ../../c-api/unicode.rst:337 +msgid "Return the character *ch* converted to lower case." +msgstr "返回转换为小写形式的字符 *ch*。" + +#: ../../c-api/unicode.rst:339 ../../c-api/unicode.rst:347 +#: ../../c-api/unicode.rst:355 +msgid "This function uses simple case mappings." +msgstr "此函数使用简单的大小写映射。" + +#: ../../c-api/unicode.rst:345 +msgid "Return the character *ch* converted to upper case." +msgstr "返回转换为大写形式的字符 *ch*。" + +#: ../../c-api/unicode.rst:353 +msgid "Return the character *ch* converted to title case." +msgstr "返回转换为标题大小写形式的字符 *ch*。" + +#: ../../c-api/unicode.rst:361 +msgid "" +"Return the character *ch* converted to a decimal positive integer. Return " +"``-1`` if this is not possible. This macro does not raise exceptions." +msgstr "" + +#: ../../c-api/unicode.rst:367 +msgid "" +"Return the character *ch* converted to a single digit integer. Return ``-1``" +" if this is not possible. This macro does not raise exceptions." +msgstr "" + +#: ../../c-api/unicode.rst:373 +msgid "" +"Return the character *ch* converted to a double. Return ``-1.0`` if this is " +"not possible. This macro does not raise exceptions." +msgstr "" + +#: ../../c-api/unicode.rst:377 +msgid "These APIs can be used to work with surrogates:" +msgstr "这些 API 可被用来操作代理项:" + +#: ../../c-api/unicode.rst:381 +msgid "Check if *ch* is a surrogate (``0xD800 <= ch <= 0xDFFF``)." +msgstr "检测 *ch* 是否为代理项 (``0xD800 <= ch <= 0xDFFF``)。" + +#: ../../c-api/unicode.rst:385 +msgid "Check if *ch* is a high surrogate (``0xD800 <= ch <= 0xDBFF``)." +msgstr "检测 *ch* 是否为高代理项 (``0xD800 <= ch <= 0xDBFF``)。" + +#: ../../c-api/unicode.rst:389 +msgid "Check if *ch* is a low surrogate (``0xDC00 <= ch <= 0xDFFF``)." +msgstr "检测 *ch* 是否为低代理项 (``0xDC00 <= ch <= 0xDFFF``)。" + +#: ../../c-api/unicode.rst:393 +msgid "" +"Join two surrogate characters and return a single Py_UCS4 value. *high* and " +"*low* are respectively the leading and trailing surrogates in a surrogate " +"pair." +msgstr "" + +#: ../../c-api/unicode.rst:399 +msgid "Creating and accessing Unicode strings" +msgstr "创建和访问 Unicode 字符串" + +#: ../../c-api/unicode.rst:401 +msgid "" +"To create Unicode objects and access their basic sequence properties, use " +"these APIs:" +msgstr "要创建 Unicode 对象和访问其基本序列属性,请使用这些 API:" + +#: ../../c-api/unicode.rst:406 +msgid "" +"Create a new Unicode object. *maxchar* should be the true maximum code " +"point to be placed in the string. As an approximation, it can be rounded up" +" to the nearest value in the sequence 127, 255, 65535, 1114111." +msgstr "" +"创建一个新的 Unicode 对象。 *maxchar* 应为可放入字符串的实际最大码位。 作为一个近似值,它可被向上舍入到序列 127, 255, " +"65535, 1114111 中最接近的值。" + +#: ../../c-api/unicode.rst:410 +msgid "" +"This is the recommended way to allocate a new Unicode object. Objects " +"created using this function are not resizable." +msgstr "这是分配新的 Unicode 对象的推荐方式。 使用此函数创建的对象不可改变大小。" + +#: ../../c-api/unicode.rst:419 +msgid "" +"Create a new Unicode object with the given *kind* (possible values are " +":c:macro:`PyUnicode_1BYTE_KIND` etc., as returned by " +":c:func:`PyUnicode_KIND`). The *buffer* must point to an array of *size* " +"units of 1, 2 or 4 bytes per character, as given by the kind." +msgstr "" +"以给定的 *kind* 创建一个新的 Unicode 对象(可能的值为 :c:macro:`PyUnicode_1BYTE_KIND` 等,即 " +":c:func:`PyUnicode_KIND` 所返回的值)。 *buffer* 必须指向由此分类所给出的,以每字符 1, 2 或 4 字节单位的 " +"*size* 大小的数组。" + +#: ../../c-api/unicode.rst:429 +msgid "" +"Create a Unicode object from the char buffer *u*. The bytes will be " +"interpreted as being UTF-8 encoded. The buffer is copied into the new " +"object. If the buffer is not ``NULL``, the return value might be a shared " +"object, i.e. modification of the data is not allowed." +msgstr "" + +#: ../../c-api/unicode.rst:434 +msgid "" +"If *u* is ``NULL``, this function behaves like " +":c:func:`PyUnicode_FromUnicode` with the buffer set to ``NULL``. This usage" +" is deprecated in favor of :c:func:`PyUnicode_New`, and will be removed in " +"Python 3.12." +msgstr "" + +#: ../../c-api/unicode.rst:441 +msgid "" +"Create a Unicode object from a UTF-8 encoded null-terminated char buffer " +"*u*." +msgstr "根据 UTF-8 编码的以空值结束的字符缓冲区 *u* 创建一个 Unicode 对象。" + +#: ../../c-api/unicode.rst:447 +msgid "" +"Take a C :c:func:`printf`\\ -style *format* string and a variable number of " +"arguments, calculate the size of the resulting Python Unicode string and " +"return a string with the values formatted into it. The variable arguments " +"must be C types and must correspond exactly to the format characters in the " +"*format* ASCII-encoded string. The following format characters are allowed:" +msgstr "" + +#: ../../c-api/unicode.rst:462 +msgid "Format Characters" +msgstr "格式字符" + +#: ../../c-api/unicode.rst:462 +msgid "Type" +msgstr "类型" + +#: ../../c-api/unicode.rst:462 +msgid "Comment" +msgstr "注释" + +#: ../../c-api/unicode.rst:464 +msgid ":attr:`%%`" +msgstr ":attr:`%%`" + +#: ../../c-api/unicode.rst:464 +msgid "*n/a*" +msgstr "*不适用*" + +#: ../../c-api/unicode.rst:464 +msgid "The literal % character." +msgstr "文字%字符。" + +#: ../../c-api/unicode.rst:466 +msgid ":attr:`%c`" +msgstr ":attr:`%c`" + +#: ../../c-api/unicode.rst:466 ../../c-api/unicode.rst:469 +#: ../../c-api/unicode.rst:502 ../../c-api/unicode.rst:505 +msgid "int" +msgstr "int" + +#: ../../c-api/unicode.rst:466 +msgid "A single character, represented as a C int." +msgstr "单个字符,表示为C 语言的整型。" + +#: ../../c-api/unicode.rst:469 +msgid ":attr:`%d`" +msgstr ":attr:`%d`" + +#: ../../c-api/unicode.rst:469 +msgid "Equivalent to ``printf(\"%d\")``. [1]_" +msgstr "相当于 ``printf(\"%d\")``. [1]_" + +#: ../../c-api/unicode.rst:472 +msgid ":attr:`%u`" +msgstr ":attr:`%u`" + +#: ../../c-api/unicode.rst:472 +msgid "unsigned int" +msgstr "unsigned int" + +#: ../../c-api/unicode.rst:472 +msgid "Equivalent to ``printf(\"%u\")``. [1]_" +msgstr "相当于 ``printf(\"%u\")``. [1]_" + +#: ../../c-api/unicode.rst:475 +msgid ":attr:`%ld`" +msgstr ":attr:`%ld`" + +#: ../../c-api/unicode.rst:475 ../../c-api/unicode.rst:478 +msgid "long" +msgstr "长整型" + +#: ../../c-api/unicode.rst:475 +msgid "Equivalent to ``printf(\"%ld\")``. [1]_" +msgstr "相当于 ``printf(\"%ld\")``. [1]_" + +#: ../../c-api/unicode.rst:478 +msgid ":attr:`%li`" +msgstr ":attr:`%li`" + +#: ../../c-api/unicode.rst:478 +msgid "Equivalent to ``printf(\"%li\")``. [1]_" +msgstr "相当于 ``printf(\"%li\")``. [1]_" + +#: ../../c-api/unicode.rst:481 +msgid ":attr:`%lu`" +msgstr ":attr:`%lu`" + +#: ../../c-api/unicode.rst:481 +msgid "unsigned long" +msgstr "unsigned long" + +#: ../../c-api/unicode.rst:481 +msgid "Equivalent to ``printf(\"%lu\")``. [1]_" +msgstr "相当于 ``printf(\"%lu\")``. [1]_" + +#: ../../c-api/unicode.rst:484 +msgid ":attr:`%lld`" +msgstr ":attr:`%lld`" + +#: ../../c-api/unicode.rst:484 ../../c-api/unicode.rst:487 +msgid "long long" +msgstr "long long" + +#: ../../c-api/unicode.rst:484 +msgid "Equivalent to ``printf(\"%lld\")``. [1]_" +msgstr "相当于 ``printf(\"%lld\")``. [1]_" + +#: ../../c-api/unicode.rst:487 +msgid ":attr:`%lli`" +msgstr ":attr:`%lli`" + +#: ../../c-api/unicode.rst:487 +msgid "Equivalent to ``printf(\"%lli\")``. [1]_" +msgstr "相当于 ``printf(\"%lli\")``. [1]_" + +#: ../../c-api/unicode.rst:490 +msgid ":attr:`%llu`" +msgstr ":attr:`%llu`" + +#: ../../c-api/unicode.rst:490 +msgid "unsigned long long" +msgstr "unsigned long long" + +#: ../../c-api/unicode.rst:490 +msgid "Equivalent to ``printf(\"%llu\")``. [1]_" +msgstr "相当于 ``printf(\"%llu\")``. [1]_" + +#: ../../c-api/unicode.rst:493 +msgid ":attr:`%zd`" +msgstr ":attr:`%zd`" + +#: ../../c-api/unicode.rst:493 ../../c-api/unicode.rst:496 +msgid ":c:type:`\\ Py_ssize_t`" +msgstr ":c:type:`\\ Py_ssize_t`" + +#: ../../c-api/unicode.rst:493 +msgid "Equivalent to ``printf(\"%zd\")``. [1]_" +msgstr "相当于 ``printf(\"%zd\")``. [1]_" + +#: ../../c-api/unicode.rst:496 +msgid ":attr:`%zi`" +msgstr ":attr:`%zi`" + +#: ../../c-api/unicode.rst:496 +msgid "Equivalent to ``printf(\"%zi\")``. [1]_" +msgstr "相当于 ``printf(\"%zi\")``. [1]_" + +#: ../../c-api/unicode.rst:499 +msgid ":attr:`%zu`" +msgstr ":attr:`%zu`" + +#: ../../c-api/unicode.rst:499 +msgid "size_t" +msgstr "size_t" + +#: ../../c-api/unicode.rst:499 +msgid "Equivalent to ``printf(\"%zu\")``. [1]_" +msgstr "相当于 ``printf(\"%zu\")``. [1]_" + +#: ../../c-api/unicode.rst:502 +msgid ":attr:`%i`" +msgstr ":attr:`%i`" + +#: ../../c-api/unicode.rst:502 +msgid "Equivalent to ``printf(\"%i\")``. [1]_" +msgstr "相当于 ``printf(\"%i\")``. [1]_" + +#: ../../c-api/unicode.rst:505 +msgid ":attr:`%x`" +msgstr ":attr:`%x`" + +#: ../../c-api/unicode.rst:505 +msgid "Equivalent to ``printf(\"%x\")``. [1]_" +msgstr "相当于 ``printf(\"%x\")``. [1]_" + +#: ../../c-api/unicode.rst:508 +msgid ":attr:`%s`" +msgstr ":attr:`%s`" + +#: ../../c-api/unicode.rst:508 +msgid "const char\\*" +msgstr "const char\\*" + +#: ../../c-api/unicode.rst:508 +msgid "A null-terminated C character array." +msgstr "以 null 为终止符的 C 字符数组。" + +#: ../../c-api/unicode.rst:511 +msgid ":attr:`%p`" +msgstr ":attr:`%p`" + +#: ../../c-api/unicode.rst:511 +msgid "const void\\*" +msgstr "const void\\*" + +#: ../../c-api/unicode.rst:511 +msgid "" +"The hex representation of a C pointer. Mostly equivalent to " +"``printf(\"%p\")`` except that it is guaranteed to start with the literal " +"``0x`` regardless of what the platform's ``printf`` yields." +msgstr "" +"一个 C 指针的十六进制表示形式。 基本等价于 ``printf(\"%p\")`` 但它会确保以字面值 ``0x`` 开头,不论系统平台上 " +"``printf`` 的输出是什么。" + +#: ../../c-api/unicode.rst:519 +msgid ":attr:`%A`" +msgstr ":attr:`%A`" + +#: ../../c-api/unicode.rst:519 ../../c-api/unicode.rst:522 +#: ../../c-api/unicode.rst:531 ../../c-api/unicode.rst:534 +msgid "PyObject\\*" +msgstr "PyObject\\*" + +#: ../../c-api/unicode.rst:519 +msgid "The result of calling :func:`ascii`." +msgstr ":func:`ascii` 调用的结果。" + +#: ../../c-api/unicode.rst:522 +msgid ":attr:`%U`" +msgstr ":attr:`%U`" + +#: ../../c-api/unicode.rst:522 +msgid "A Unicode object." +msgstr "一个 Unicode 对象。" + +#: ../../c-api/unicode.rst:524 +msgid ":attr:`%V`" +msgstr ":attr:`%V`" + +#: ../../c-api/unicode.rst:524 +msgid "PyObject\\*, const char\\*" +msgstr "" + +#: ../../c-api/unicode.rst:524 +msgid "" +"A Unicode object (which may be ``NULL``) and a null-terminated C character " +"array as a second parameter (which will be used, if the first parameter is " +"``NULL``)." +msgstr "" +"一个 Unicode 对象 (可以为 ``NULL``) 和一个以空值结束的 C 字符数组作为第二个形参(如果第一个形参为 " +"``NULL``,第二个形参将被使用)。" + +#: ../../c-api/unicode.rst:531 +msgid ":attr:`%S`" +msgstr ":attr:`%S`" + +#: ../../c-api/unicode.rst:531 +msgid "The result of calling :c:func:`PyObject_Str`." +msgstr "调用 :c:func:`PyObject_Str` 的结果。" + +#: ../../c-api/unicode.rst:534 +msgid ":attr:`%R`" +msgstr ":attr:`%R`" + +#: ../../c-api/unicode.rst:534 +msgid "The result of calling :c:func:`PyObject_Repr`." +msgstr "调用 :c:func:`PyObject_Repr` 的结果。" + +#: ../../c-api/unicode.rst:538 +msgid "" +"An unrecognized format character causes all the rest of the format string to" +" be copied as-is to the result string, and any extra arguments discarded." +msgstr "" + +#: ../../c-api/unicode.rst:542 +msgid "" +"The width formatter unit is number of characters rather than bytes. The " +"precision formatter unit is number of bytes for ``\"%s\"`` and ``\"%V\"`` " +"(if the ``PyObject*`` argument is ``NULL``), and a number of characters for " +"``\"%A\"``, ``\"%U\"``, ``\"%S\"``, ``\"%R\"`` and ``\"%V\"`` (if the " +"``PyObject*`` argument is not ``NULL``)." +msgstr "" + +#: ../../c-api/unicode.rst:548 +msgid "" +"For integer specifiers (d, u, ld, li, lu, lld, lli, llu, zd, zi, zu, i, x): " +"the 0-conversion flag has effect even when a precision is given." +msgstr "" + +#: ../../c-api/unicode.rst:551 +msgid "Support for ``\"%lld\"`` and ``\"%llu\"`` added." +msgstr "增加了对 ``\"%lld\"`` 和 ``\"%llu\"`` 的支持。" + +#: ../../c-api/unicode.rst:554 +msgid "Support for ``\"%li\"``, ``\"%lli\"`` and ``\"%zi\"`` added." +msgstr "增加了对 ``\"%li\"``, ``\"%lli\"`` 和 ``\"%zi\"`` 的支持。" + +#: ../../c-api/unicode.rst:557 +msgid "" +"Support width and precision formatter for ``\"%s\"``, ``\"%A\"``, " +"``\"%U\"``, ``\"%V\"``, ``\"%S\"``, ``\"%R\"`` added." +msgstr "增加了对 ``\"%s\"``, ``\"%A\"``, ``\"%U\"``, ``\"%V\"``, ``\"%S\"``, ``\"%R\"`` 的宽度和精度格式符支持。" + +#: ../../c-api/unicode.rst:564 +msgid "" +"Identical to :c:func:`PyUnicode_FromFormat` except that it takes exactly two" +" arguments." +msgstr "等同于 :c:func:`PyUnicode_FromFormat` 但它将接受恰好两个参数。" + +#: ../../c-api/unicode.rst:571 +msgid "Decode an encoded object *obj* to a Unicode object." +msgstr "将一个已编码的对象 *obj* 解码为 Unicode 对象。" + +#: ../../c-api/unicode.rst:573 +msgid "" +":class:`bytes`, :class:`bytearray` and other :term:`bytes-like objects " +"` are decoded according to the given *encoding* and using" +" the error handling defined by *errors*. Both can be ``NULL`` to have the " +"interface use the default values (see :ref:`builtincodecs` for details)." +msgstr "" +":class:`bytes`, :class:`bytearray` 和其他 :term:`字节类对象 ` " +"将按照给定的 *encoding* 来解码并使用由 *errors* 定义的错误处理方式。 两者均可为 ``NULL`` 即让接口使用默认值(请参阅 " +":ref:`builtincodecs` 了解详情)。" + +#: ../../c-api/unicode.rst:579 +msgid "" +"All other objects, including Unicode objects, cause a :exc:`TypeError` to be" +" set." +msgstr "所有其他对象,包括 Unicode 对象,都将导致设置 :exc:`TypeError`。" + +#: ../../c-api/unicode.rst:582 +msgid "" +"The API returns ``NULL`` if there was an error. The caller is responsible " +"for decref'ing the returned objects." +msgstr "如有错误该 API 将返回 ``NULL``。 调用方要负责递减指向所返回对象的引用。" + +#: ../../c-api/unicode.rst:588 +msgid "Return the length of the Unicode object, in code points." +msgstr "返回 Unicode 对象码位的长度。" + +#: ../../c-api/unicode.rst:599 +msgid "" +"Copy characters from one Unicode object into another. This function " +"performs character conversion when necessary and falls back to " +":c:func:`memcpy` if possible. Returns ``-1`` and sets an exception on " +"error, otherwise returns the number of copied characters." +msgstr "" + +#: ../../c-api/unicode.rst:610 +msgid "" +"Fill a string with a character: write *fill_char* into " +"``unicode[start:start+length]``." +msgstr "使用一个字符填充字符串:将 *fill_char* 写入 ``unicode[start:start+length]``。" + +#: ../../c-api/unicode.rst:613 +msgid "" +"Fail if *fill_char* is bigger than the string maximum character, or if the " +"string has more than 1 reference." +msgstr "如果 *fill_char* 值大于字符串最大字符值,或者如果字符串有 1 以上的引用将执行失败。" + +#: ../../c-api/unicode.rst:616 +msgid "" +"Return the number of written character, or return ``-1`` and raise an " +"exception on error." +msgstr "返回写入的字符数量,或者在出错时返回 ``-1`` 并引发一个异常。" + +#: ../../c-api/unicode.rst:625 +msgid "" +"Write a character to a string. The string must have been created through " +":c:func:`PyUnicode_New`. Since Unicode strings are supposed to be " +"immutable, the string must not be shared, or have been hashed yet." +msgstr "" +"将一个字符写入到字符串。 字符串必须通过 :c:func:`PyUnicode_New` 创建。 由于 Unicode " +"字符串应当是不可变的,因此该字符串不能被共享,或是被哈希。" + +#: ../../c-api/unicode.rst:629 +msgid "" +"This function checks that *unicode* is a Unicode object, that the index is " +"not out of bounds, and that the object can be modified safely (i.e. that it " +"its reference count is one)." +msgstr "该函数将检查 *unicode* 是否为 Unicode 对象,索引是否未越界,并且对象是否可被安全地修改(即其引用计数为一)。" + +#: ../../c-api/unicode.rst:638 +msgid "" +"Read a character from a string. This function checks that *unicode* is a " +"Unicode object and the index is not out of bounds, in contrast to the macro " +"version :c:func:`PyUnicode_READ_CHAR`." +msgstr "" + +#: ../../c-api/unicode.rst:648 +msgid "" +"Return a substring of *str*, from character index *start* (included) to " +"character index *end* (excluded). Negative indices are not supported." +msgstr "返回 *str* 的一个子串,从字符索引 *start* (包括) 到字符索引 *end* (不包括)。 不支持负索引号。" + +#: ../../c-api/unicode.rst:657 +msgid "" +"Copy the string *u* into a UCS4 buffer, including a null character, if " +"*copy_null* is set. Returns ``NULL`` and sets an exception on error (in " +"particular, a :exc:`SystemError` if *buflen* is smaller than the length of " +"*u*). *buffer* is returned on success." +msgstr "" +"将字符串 *u* 拷贝到一个 UCS4 缓冲区,包括一个空字符,如果设置了 *copy_null* 的话。 出错时返回 ``NULL`` " +"并设置一个异常(特别是当 *buflen* 小于 *u* 的长度时,:exc:`SystemError` 将被设置)。 成功时返回 *buffer*。" + +#: ../../c-api/unicode.rst:667 +msgid "" +"Copy the string *u* into a new UCS4 buffer that is allocated using " +":c:func:`PyMem_Malloc`. If this fails, ``NULL`` is returned with a " +":exc:`MemoryError` set. The returned buffer always has an extra null code " +"point appended." +msgstr "" +"将字符串 *u* 拷贝到使用 :c:func:`PyMem_Malloc` 分配的新 UCS4 缓冲区。 如果执行失败,将返回 ``NULL`` 并设置" +" :exc:`MemoryError`。 返回的缓冲区将总是会添加一个额外的空码位。" + +#: ../../c-api/unicode.rst:676 +msgid "Deprecated Py_UNICODE APIs" +msgstr "已弃用的 Py_UNICODE API" + +#: ../../c-api/unicode.rst:680 +msgid "" +"These API functions are deprecated with the implementation of :pep:`393`. " +"Extension modules can continue using them, as they will not be removed in " +"Python 3.x, but need to be aware that their use can now cause performance " +"and memory hits." +msgstr "" + +#: ../../c-api/unicode.rst:687 +msgid "" +"Create a Unicode object from the Py_UNICODE buffer *u* of the given size. " +"*u* may be ``NULL`` which causes the contents to be undefined. It is the " +"user's responsibility to fill in the needed data. The buffer is copied into" +" the new object." +msgstr "" + +#: ../../c-api/unicode.rst:692 +msgid "" +"If the buffer is not ``NULL``, the return value might be a shared object. " +"Therefore, modification of the resulting Unicode object is only allowed when" +" *u* is ``NULL``." +msgstr "" + +#: ../../c-api/unicode.rst:696 +msgid "" +"If the buffer is ``NULL``, :c:func:`PyUnicode_READY` must be called once the" +" string content has been filled before using any of the access macros such " +"as :c:func:`PyUnicode_KIND`." +msgstr "" + +#: ../../c-api/unicode.rst:703 +msgid "" +"Part of the old-style Unicode API, please migrate to using " +":c:func:`PyUnicode_FromKindAndData`, :c:func:`PyUnicode_FromWideChar`, or " +":c:func:`PyUnicode_New`." +msgstr "" + +#: ../../c-api/unicode.rst:708 +msgid "" +"Return a read-only pointer to the Unicode object's internal " +":c:type:`Py_UNICODE` buffer, or ``NULL`` on error. This will create the " +":c:type:`Py_UNICODE*` representation of the object if it is not yet " +"available. The buffer is always terminated with an extra null code point. " +"Note that the resulting :c:type:`Py_UNICODE` string may also contain " +"embedded null code points, which would cause the string to be truncated when" +" used in most C functions." +msgstr "" + +#: ../../c-api/unicode.rst:720 ../../c-api/unicode.rst:748 +msgid "" +"Part of the old-style Unicode API, please migrate to using " +":c:func:`PyUnicode_AsUCS4`, :c:func:`PyUnicode_AsWideChar`, " +":c:func:`PyUnicode_ReadChar` or similar new APIs." +msgstr "" + +#: ../../c-api/unicode.rst:726 +msgid "" +"Create a Unicode object by replacing all decimal digits in " +":c:type:`Py_UNICODE` buffer of the given *size* by ASCII digits 0--9 " +"according to their decimal value. Return ``NULL`` if an exception occurs." +msgstr "" + +#: ../../c-api/unicode.rst:732 +msgid "" +"Part of the old-style :c:type:`Py_UNICODE` API; please migrate to using " +":c:func:`Py_UNICODE_TODECIMAL`." +msgstr "" + +#: ../../c-api/unicode.rst:737 +msgid "" +"Like :c:func:`PyUnicode_AsUnicode`, but also saves the :c:func:`Py_UNICODE` " +"array length (excluding the extra null terminator) in *size*. Note that the " +"resulting :c:type:`Py_UNICODE*` string may contain embedded null code " +"points, which would cause the string to be truncated when used in most C " +"functions." +msgstr "" + +#: ../../c-api/unicode.rst:753 +msgid "" +"Create a copy of a Unicode string ending with a null code point. Return " +"``NULL`` and raise a :exc:`MemoryError` exception on memory allocation " +"failure, otherwise return a new allocated buffer (use :c:func:`PyMem_Free` " +"to free the buffer). Note that the resulting :c:type:`Py_UNICODE*` string " +"may contain embedded null code points, which would cause the string to be " +"truncated when used in most C functions." +msgstr "" + +#: ../../c-api/unicode.rst:762 +msgid "" +"Please migrate to using :c:func:`PyUnicode_AsUCS4Copy` or similar new APIs." +msgstr "" + +#: ../../c-api/unicode.rst:767 +msgid "" +"Return the size of the deprecated :c:type:`Py_UNICODE` representation, in " +"code units (this includes surrogate pairs as 2 units)." +msgstr "" + +#: ../../c-api/unicode.rst:777 +msgid "" +"Copy an instance of a Unicode subtype to a new true Unicode object if " +"necessary. If *obj* is already a true Unicode object (not a subtype), return" +" the reference with incremented refcount." +msgstr "" + +#: ../../c-api/unicode.rst:781 +msgid "" +"Objects other than Unicode or its subtypes will cause a :exc:`TypeError`." +msgstr "非 Unicode 或其子类型的对象将导致 :exc:`TypeError`。" + +#: ../../c-api/unicode.rst:785 +msgid "Locale Encoding" +msgstr "语言区域编码格式" + +#: ../../c-api/unicode.rst:787 +msgid "" +"The current locale encoding can be used to decode text from the operating " +"system." +msgstr "当前语言区域编码格式可被用来解码来自操作系统的文本。" + +#: ../../c-api/unicode.rst:794 +msgid "" +"Decode a string from UTF-8 on Android and VxWorks, or from the current " +"locale encoding on other platforms. The supported error handlers are " +"``\"strict\"`` and ``\"surrogateescape\"`` (:pep:`383`). The decoder uses " +"``\"strict\"`` error handler if *errors* is ``NULL``. *str* must end with a" +" null character but cannot contain embedded null characters." +msgstr "" +"解码字符串在 Android 和 VxWorks 上使用 UTF-8,在其他平台上则使用当前语言区域编码格式。 支持的错误处理器有 " +"``\"strict\"`` 和 ``\"surrogateescape\"`` (:pep:`383`)。 如果 *errors* 为 " +"``NULL`` 则解码器将使用 ``\"strict\"`` 错误处理器。 *str* 必须以一个空字符结束但不可包含嵌入的空字符。" + +#: ../../c-api/unicode.rst:801 +msgid "" +"Use :c:func:`PyUnicode_DecodeFSDefaultAndSize` to decode a string from " +":c:data:`Py_FileSystemDefaultEncoding` (the locale encoding read at Python " +"startup)." +msgstr "" + +#: ../../c-api/unicode.rst:805 ../../c-api/unicode.rst:841 +msgid "This function ignores the Python UTF-8 mode." +msgstr "" + +#: ../../c-api/unicode.rst:809 ../../c-api/unicode.rst:913 +msgid "The :c:func:`Py_DecodeLocale` function." +msgstr "The :c:func:`Py_DecodeLocale` 函数。" + +#: ../../c-api/unicode.rst:813 +msgid "" +"The function now also uses the current locale encoding for the " +"``surrogateescape`` error handler, except on Android. Previously, " +":c:func:`Py_DecodeLocale` was used for the ``surrogateescape``, and the " +"current locale encoding was used for ``strict``." +msgstr "" +"此函数现在也会为 ``surrogateescape`` 错误处理器使用当前语言区域编码格式,但在 Android 上例外。 " +"在之前版本中,:c:func:`Py_DecodeLocale` 将被用于 ``surrogateescape``,而当前语言区域编码格式将被用于 " +"``strict``。" + +#: ../../c-api/unicode.rst:822 +msgid "" +"Similar to :c:func:`PyUnicode_DecodeLocaleAndSize`, but compute the string " +"length using :c:func:`strlen`." +msgstr "" + +#: ../../c-api/unicode.rst:830 +msgid "" +"Encode a Unicode object to UTF-8 on Android and VxWorks, or to the current " +"locale encoding on other platforms. The supported error handlers are " +"``\"strict\"`` and ``\"surrogateescape\"`` (:pep:`383`). The encoder uses " +"``\"strict\"`` error handler if *errors* is ``NULL``. Return a " +":class:`bytes` object. *unicode* cannot contain embedded null characters." +msgstr "" +"编码 Unicode 对象在 Android 和 VxWorks 上使用 UTF-8,在其他平台上使用当前语言区域编码格式。 支持的错误处理器有 " +"``\"strict\"`` 和 ``\"surrogateescape\"`` (:pep:`383`)。 如果 *errors* 为 " +"``NULL`` 则编码器将使用 ``\"strict\"`` 错误处理器。 返回一个 :class:`bytes` 对象。 *unicode* " +"不可包含嵌入的空字符。" + +#: ../../c-api/unicode.rst:837 +msgid "" +"Use :c:func:`PyUnicode_EncodeFSDefault` to encode a string to " +":c:data:`Py_FileSystemDefaultEncoding` (the locale encoding read at Python " +"startup)." +msgstr "" + +#: ../../c-api/unicode.rst:845 ../../c-api/unicode.rst:949 +msgid "The :c:func:`Py_EncodeLocale` function." +msgstr ":c:func:`Py_EncodeLocale` 函数。" + +#: ../../c-api/unicode.rst:849 +msgid "" +"The function now also uses the current locale encoding for the " +"``surrogateescape`` error handler, except on Android. Previously, " +":c:func:`Py_EncodeLocale` was used for the ``surrogateescape``, and the " +"current locale encoding was used for ``strict``." +msgstr "" +"此函数现在也会为 ``surrogateescape`` 错误处理器使用当前语言区域编码格式,但在 Android 上例外。 " +"在之前版本中,:c:func:`Py_EncodeLocale` 将被用于 ``surrogateescape``,而当前语言区域编码格式将被用于 " +"``strict``。" + +#: ../../c-api/unicode.rst:858 +msgid "File System Encoding" +msgstr "文件系统编码格式" + +#: ../../c-api/unicode.rst:860 +msgid "" +"To encode and decode file names and other environment strings, " +":c:data:`Py_FileSystemDefaultEncoding` should be used as the encoding, and " +":c:data:`Py_FileSystemDefaultEncodeErrors` should be used as the error " +"handler (:pep:`383` and :pep:`529`). To encode file names to :class:`bytes` " +"during argument parsing, the ``\"O&\"`` converter should be used, passing " +":c:func:`PyUnicode_FSConverter` as the conversion function:" +msgstr "" + +#: ../../c-api/unicode.rst:869 +msgid "" +"ParseTuple converter: encode :class:`str` objects -- obtained directly or " +"through the :class:`os.PathLike` interface -- to :class:`bytes` using " +":c:func:`PyUnicode_EncodeFSDefault`; :class:`bytes` objects are output as-" +"is. *result* must be a :c:type:`PyBytesObject*` which must be released when " +"it is no longer used." +msgstr "" + +#: ../../c-api/unicode.rst:877 ../../c-api/unicode.rst:894 +msgid "Accepts a :term:`path-like object`." +msgstr "接受一个 :term:`path-like object`。" + +#: ../../c-api/unicode.rst:880 +msgid "" +"To decode file names to :class:`str` during argument parsing, the ``\"O&\"``" +" converter should be used, passing :c:func:`PyUnicode_FSDecoder` as the " +"conversion function:" +msgstr "" +"要在参数解析期间将文件名解码为 :class:`str`,应当使用 ``\"O&\"`` 转换器,传入 " +":c:func:`PyUnicode_FSDecoder` 作为转换函数:" + +#: ../../c-api/unicode.rst:886 +msgid "" +"ParseTuple converter: decode :class:`bytes` objects -- obtained either " +"directly or indirectly through the :class:`os.PathLike` interface -- to " +":class:`str` using :c:func:`PyUnicode_DecodeFSDefaultAndSize`; :class:`str` " +"objects are output as-is. *result* must be a :c:type:`PyUnicodeObject*` " +"which must be released when it is no longer used." +msgstr "" + +#: ../../c-api/unicode.rst:900 +msgid "" +"Decode a string using :c:data:`Py_FileSystemDefaultEncoding` and the " +":c:data:`Py_FileSystemDefaultEncodeErrors` error handler." +msgstr "" + +#: ../../c-api/unicode.rst:903 ../../c-api/unicode.rst:924 +#: ../../c-api/unicode.rst:940 +msgid "" +"If :c:data:`Py_FileSystemDefaultEncoding` is not set, fall back to the " +"locale encoding." +msgstr "" + +#: ../../c-api/unicode.rst:906 +msgid "" +":c:data:`Py_FileSystemDefaultEncoding` is initialized at startup from the " +"locale encoding and cannot be modified later. If you need to decode a string" +" from the current locale encoding, use " +":c:func:`PyUnicode_DecodeLocaleAndSize`." +msgstr "" + +#: ../../c-api/unicode.rst:915 ../../c-api/unicode.rst:929 +#: ../../c-api/unicode.rst:953 +msgid "Use :c:data:`Py_FileSystemDefaultEncodeErrors` error handler." +msgstr "" + +#: ../../c-api/unicode.rst:921 +msgid "" +"Decode a null-terminated string using :c:data:`Py_FileSystemDefaultEncoding`" +" and the :c:data:`Py_FileSystemDefaultEncodeErrors` error handler." +msgstr "" + +#: ../../c-api/unicode.rst:927 +msgid "" +"Use :c:func:`PyUnicode_DecodeFSDefaultAndSize` if you know the string " +"length." +msgstr "" + +#: ../../c-api/unicode.rst:935 +msgid "" +"Encode a Unicode object to :c:data:`Py_FileSystemDefaultEncoding` with the " +":c:data:`Py_FileSystemDefaultEncodeErrors` error handler, and return " +":class:`bytes`. Note that the resulting :class:`bytes` object may contain " +"null bytes." +msgstr "" + +#: ../../c-api/unicode.rst:943 +msgid "" +":c:data:`Py_FileSystemDefaultEncoding` is initialized at startup from the " +"locale encoding and cannot be modified later. If you need to encode a string" +" to the current locale encoding, use :c:func:`PyUnicode_EncodeLocale`." +msgstr "" + +#: ../../c-api/unicode.rst:957 +msgid "wchar_t Support" +msgstr "wchar_t 支持" + +#: ../../c-api/unicode.rst:959 +msgid ":c:type:`wchar_t` support for platforms which support it:" +msgstr "在受支持的平台上支持 :c:type:`wchar_t`:" + +#: ../../c-api/unicode.rst:963 +msgid "" +"Create a Unicode object from the :c:type:`wchar_t` buffer *w* of the given " +"*size*. Passing ``-1`` as the *size* indicates that the function must itself" +" compute the length, using wcslen. Return ``NULL`` on failure." +msgstr "" +"根据给定 *size* 的 :c:type:`wchar_t` 缓冲区 *w* 创建一个 Unicode 对象。 传入 ``-1`` 作为 *size*" +" 表示该函数必须使用 wcslen 自行计算缓冲区长度。 失败时将返回 ``NULL``。" + +#: ../../c-api/unicode.rst:971 +msgid "" +"Copy the Unicode object contents into the :c:type:`wchar_t` buffer *w*. At " +"most *size* :c:type:`wchar_t` characters are copied (excluding a possibly " +"trailing null termination character). Return the number of " +":c:type:`wchar_t` characters copied or ``-1`` in case of an error. Note " +"that the resulting :c:type:`wchar_t*` string may or may not be null-" +"terminated. It is the responsibility of the caller to make sure that the " +":c:type:`wchar_t*` string is null-terminated in case this is required by the" +" application. Also, note that the :c:type:`wchar_t*` string might contain " +"null characters, which would cause the string to be truncated when used with" +" most C functions." +msgstr "" + +#: ../../c-api/unicode.rst:984 +msgid "" +"Convert the Unicode object to a wide character string. The output string " +"always ends with a null character. If *size* is not ``NULL``, write the " +"number of wide characters (excluding the trailing null termination " +"character) into *\\*size*. Note that the resulting :c:type:`wchar_t` string " +"might contain null characters, which would cause the string to be truncated " +"when used with most C functions. If *size* is ``NULL`` and the " +":c:type:`wchar_t*` string contains null characters a :exc:`ValueError` is " +"raised." +msgstr "" + +#: ../../c-api/unicode.rst:992 +msgid "" +"Returns a buffer allocated by :c:func:`PyMem_Alloc` (use " +":c:func:`PyMem_Free` to free it) on success. On error, returns ``NULL`` and " +"*\\*size* is undefined. Raises a :exc:`MemoryError` if memory allocation is " +"failed." +msgstr "" + +#: ../../c-api/unicode.rst:999 +msgid "" +"Raises a :exc:`ValueError` if *size* is ``NULL`` and the :c:type:`wchar_t*` " +"string contains null characters." +msgstr "" + +#: ../../c-api/unicode.rst:1007 +msgid "Built-in Codecs" +msgstr "内置编解码器" + +#: ../../c-api/unicode.rst:1009 +msgid "" +"Python provides a set of built-in codecs which are written in C for speed. " +"All of these codecs are directly usable via the following functions." +msgstr "Python 提供了一组以 C 编写以保证运行速度的内置编解码器。 所有这些编解码器均可通过下列函数直接使用。" + +#: ../../c-api/unicode.rst:1012 +msgid "" +"Many of the following APIs take two arguments encoding and errors, and they " +"have the same semantics as the ones of the built-in :func:`str` string " +"object constructor." +msgstr "" +"下列 API 大都接受 encoding 和 errors 两个参数,它们具有与在内置 :func:`str` 字符串对象构造器中同名参数相同的语义。" + +#: ../../c-api/unicode.rst:1016 +msgid "" +"Setting encoding to ``NULL`` causes the default encoding to be used which is" +" UTF-8. The file system calls should use :c:func:`PyUnicode_FSConverter` " +"for encoding file names. This uses the variable " +":c:data:`Py_FileSystemDefaultEncoding` internally. This variable should be " +"treated as read-only: on some systems, it will be a pointer to a static " +"string, on others, it will change at run-time (such as when the application " +"invokes setlocale)." +msgstr "" + +#: ../../c-api/unicode.rst:1024 +msgid "" +"Error handling is set by errors which may also be set to ``NULL`` meaning to" +" use the default handling defined for the codec. Default error handling for" +" all built-in codecs is \"strict\" (:exc:`ValueError` is raised)." +msgstr "" +"错误处理方式由 errors 设置并且也可以设为 ``NULL`` 表示使用为编解码器定义的默认处理方式。 所有内置编解码器的默认错误处理方式是 " +"\"strict\" (会引发 :exc:`ValueError`)。" + +#: ../../c-api/unicode.rst:1028 +msgid "" +"The codecs all use a similar interface. Only deviations from the following " +"generic ones are documented for simplicity." +msgstr "编解码器都使用类似的接口。 为了保持简单只有与下列泛型编解码器的差异才会记录在文档中。" + +#: ../../c-api/unicode.rst:1033 +msgid "Generic Codecs" +msgstr "泛型编解码器" + +#: ../../c-api/unicode.rst:1035 +msgid "These are the generic codec APIs:" +msgstr "以下是泛型编解码器的 API:" + +#: ../../c-api/unicode.rst:1041 +msgid "" +"Create a Unicode object by decoding *size* bytes of the encoded string *s*. " +"*encoding* and *errors* have the same meaning as the parameters of the same " +"name in the :func:`str` built-in function. The codec to be used is looked " +"up using the Python codec registry. Return ``NULL`` if an exception was " +"raised by the codec." +msgstr "" +"通过解码已编码字符串 *s* 的 *size* 个字节创建一个 Unicode 对象。 *encoding* 和 *errors* 具有与 " +":func:`str` 内置函数中同名形参相同的含义。 要使用的编解码器将使用 Python 编解码器注册表来查找。 如果编解码器引发了异常则返回 " +"``NULL``。" + +#: ../../c-api/unicode.rst:1051 +msgid "" +"Encode a Unicode object and return the result as Python bytes object. " +"*encoding* and *errors* have the same meaning as the parameters of the same " +"name in the Unicode :meth:`~str.encode` method. The codec to be used is " +"looked up using the Python codec registry. Return ``NULL`` if an exception " +"was raised by the codec." +msgstr "" +"编码一个 Unicode 对象并将结果作为 Python 字节串对象返回。 *encoding* 和 *errors* 具有与 Unicode " +":meth:`~str.encode` 方法中同名形参相同的含义。 要使用的编解码器将使用 Python 编解码器注册表来查找。 " +"如果编解码器引发了异常则返回 ``NULL``。" + +#: ../../c-api/unicode.rst:1061 +msgid "" +"Encode the :c:type:`Py_UNICODE` buffer *s* of the given *size* and return a " +"Python bytes object. *encoding* and *errors* have the same meaning as the " +"parameters of the same name in the Unicode :meth:`~str.encode` method. The " +"codec to be used is looked up using the Python codec registry. Return " +"``NULL`` if an exception was raised by the codec." +msgstr "" + +#: ../../c-api/unicode.rst:1069 ../../c-api/unicode.rst:1327 +msgid "" +"Part of the old-style :c:type:`Py_UNICODE` API; please migrate to using " +":c:func:`PyUnicode_AsEncodedString`." +msgstr "" + +#: ../../c-api/unicode.rst:1073 +msgid "UTF-8 Codecs" +msgstr "UTF-8 编解码器" + +#: ../../c-api/unicode.rst:1075 +msgid "These are the UTF-8 codec APIs:" +msgstr "以下是 UTF-8 编解码器 API:" + +#: ../../c-api/unicode.rst:1080 +msgid "" +"Create a Unicode object by decoding *size* bytes of the UTF-8 encoded string" +" *s*. Return ``NULL`` if an exception was raised by the codec." +msgstr "" +"通过解码 UTF-8 编码的字节串 *s* 的 *size* 个字节创建一个 Unicode 对象。 如果编解码器引发了异常则返回 ``NULL``。" + +#: ../../c-api/unicode.rst:1087 +msgid "" +"If *consumed* is ``NULL``, behave like :c:func:`PyUnicode_DecodeUTF8`. If " +"*consumed* is not ``NULL``, trailing incomplete UTF-8 byte sequences will " +"not be treated as an error. Those bytes will not be decoded and the number " +"of bytes that have been decoded will be stored in *consumed*." +msgstr "" +"如果 *consumed* 为 ``NULL``,则行为类似于 :c:func:`PyUnicode_DecodeUTF8`。 如果 " +"*consumed* 不为 ``NULL``,则末尾的不完整 UTF-8 字节序列将不被视为错误。 这些字节将不会被解码并且已被解码的字节数将存储在 " +"*consumed* 中。" + +#: ../../c-api/unicode.rst:1095 +msgid "" +"Encode a Unicode object using UTF-8 and return the result as Python bytes " +"object. Error handling is \"strict\". Return ``NULL`` if an exception was " +"raised by the codec." +msgstr "" +"使用 UTF-8 编码 Unicode 对象并将结果作为 Python 字节串对象返回。 错误处理方式为 \"strict\"。 " +"如果编解码器引发了异常则将返回 ``NULL``。" + +#: ../../c-api/unicode.rst:1102 +msgid "" +"Return a pointer to the UTF-8 encoding of the Unicode object, and store the " +"size of the encoded representation (in bytes) in *size*. The *size* " +"argument can be ``NULL``; in this case no size will be stored. The returned" +" buffer always has an extra null byte appended (not included in *size*), " +"regardless of whether there are any other null code points." +msgstr "" +"返回一个指向 Unicode 对象的 UTF-8 编码格式数据的指针,并将已编码数据的大小(以字节为单位)存储在 *size* 中。 *size* " +"参数可以为 ``NULL``;在此情况下数据的大小将不会被存储。 返回的缓冲区总是会添加一个额外的空字节(不包括在 *size* " +"中),无论是否存在任何其他的空码位。" + +#: ../../c-api/unicode.rst:1108 +msgid "" +"In the case of an error, ``NULL`` is returned with an exception set and no " +"*size* is stored." +msgstr "在发生错误的情况下,将返回 ``NULL`` 附带设置一个异常并且不会存储 *size* 值。" + +#: ../../c-api/unicode.rst:1111 +msgid "" +"This caches the UTF-8 representation of the string in the Unicode object, " +"and subsequent calls will return a pointer to the same buffer. The caller " +"is not responsible for deallocating the buffer. The buffer is deallocated " +"and pointers to it become invalid when the Unicode object is garbage " +"collected." +msgstr "" +"这将缓存 Unicode 对象中字符串的 UTF-8 表示形式,并且后续调用将返回指向同一缓存区的指针。 调用方不必负责释放该缓冲区。 缓冲区会在 " +"Unicode 对象被作为垃圾回收时被释放并使指向它的指针失效。" + +#: ../../c-api/unicode.rst:1118 ../../c-api/unicode.rst:1128 +msgid "The return type is now ``const char *`` rather of ``char *``." +msgstr "返回类型现在是 ``const char *`` 而不是 ``char *``。" + +#: ../../c-api/unicode.rst:1124 +msgid "As :c:func:`PyUnicode_AsUTF8AndSize`, but does not store the size." +msgstr "类似于 :c:func:`PyUnicode_AsUTF8AndSize`,但不会存储大小值。" + +#: ../../c-api/unicode.rst:1134 +msgid "" +"Encode the :c:type:`Py_UNICODE` buffer *s* of the given *size* using UTF-8 " +"and return a Python bytes object. Return ``NULL`` if an exception was " +"raised by the codec." +msgstr "" + +#: ../../c-api/unicode.rst:1141 +msgid "" +"Part of the old-style :c:type:`Py_UNICODE` API; please migrate to using " +":c:func:`PyUnicode_AsUTF8String`, :c:func:`PyUnicode_AsUTF8AndSize` or " +":c:func:`PyUnicode_AsEncodedString`." +msgstr "" + +#: ../../c-api/unicode.rst:1145 +msgid "UTF-32 Codecs" +msgstr "UTF-32 编解码器" + +#: ../../c-api/unicode.rst:1147 +msgid "These are the UTF-32 codec APIs:" +msgstr "以下是 UTF-32 编解码器 API:" + +#: ../../c-api/unicode.rst:1153 +msgid "" +"Decode *size* bytes from a UTF-32 encoded buffer string and return the " +"corresponding Unicode object. *errors* (if non-``NULL``) defines the error " +"handling. It defaults to \"strict\"." +msgstr "" +"从 UTF-32 编码的缓冲区数据解码 *size* 个字节并返回相应的 Unicode 对象。 *errors* (如果不为 ``NULL``) " +"定义了错误处理方式。 默认为 \"strict\"。" + +#: ../../c-api/unicode.rst:1157 ../../c-api/unicode.rst:1230 +msgid "" +"If *byteorder* is non-``NULL``, the decoder starts decoding using the given " +"byte order::" +msgstr "如果 *byteorder* 不为 ``NULL``,解码器将使用给定的字节序进行解码::" + +#: ../../c-api/unicode.rst:1164 +msgid "" +"If ``*byteorder`` is zero, and the first four bytes of the input data are a " +"byte order mark (BOM), the decoder switches to this byte order and the BOM " +"is not copied into the resulting Unicode string. If ``*byteorder`` is " +"``-1`` or ``1``, any byte order mark is copied to the output." +msgstr "" +"如果 ``*byteorder`` 为零,且输入数据的前四个字节为字节序标记 (BOM),则解码器将切换为该字节序并且 BOM 将不会被拷贝到结果 " +"Unicode 字符串中。 如果 ``*byteorder`` 为 ``-1`` 或 ``1``,则字节序标记会被拷贝到输出中。" + +#: ../../c-api/unicode.rst:1169 +msgid "" +"After completion, *\\*byteorder* is set to the current byte order at the end" +" of input data." +msgstr "在完成后,*\\*byteorder* 将在输入数据的末尾被设为当前字节序。" + +#: ../../c-api/unicode.rst:1172 ../../c-api/unicode.rst:1246 +msgid "If *byteorder* is ``NULL``, the codec starts in native order mode." +msgstr "如果 *byteorder* 为 ``NULL``,编解码器将使用本机字节序。" + +#: ../../c-api/unicode.rst:1174 ../../c-api/unicode.rst:1210 +#: ../../c-api/unicode.rst:1248 ../../c-api/unicode.rst:1285 +msgid "Return ``NULL`` if an exception was raised by the codec." +msgstr "如果编解码器引发了异常则返回 ``NULL``。" + +#: ../../c-api/unicode.rst:1180 +msgid "" +"If *consumed* is ``NULL``, behave like :c:func:`PyUnicode_DecodeUTF32`. If " +"*consumed* is not ``NULL``, :c:func:`PyUnicode_DecodeUTF32Stateful` will not" +" treat trailing incomplete UTF-32 byte sequences (such as a number of bytes " +"not divisible by four) as an error. Those bytes will not be decoded and the " +"number of bytes that have been decoded will be stored in *consumed*." +msgstr "" +"如果 *consumed* 为 ``NULL``,则行为类似于 :c:func:`PyUnicode_DecodeUTF32`。 如果 " +"*consumed* 不为 ``NULL``,则 :c:func:`PyUnicode_DecodeUTF32Stateful` 将不把末尾的不完整 " +"UTF-32 字节序列(如字节数不可被四整除)视为错误。 这些字节将不会被解码并且已被解码的字节数将存储在 *consumed* 中。" + +#: ../../c-api/unicode.rst:1189 +msgid "" +"Return a Python byte string using the UTF-32 encoding in native byte order. " +"The string always starts with a BOM mark. Error handling is \"strict\". " +"Return ``NULL`` if an exception was raised by the codec." +msgstr "" +"返回使用 UTF-32 编码格式本机字节序的 Python 字节串。 字节串将总是以 BOM 标记打头。 错误处理方式为 \"strict\"。 " +"如果编解码器引发了异常则返回 ``NULL``。" + +#: ../../c-api/unicode.rst:1197 +msgid "" +"Return a Python bytes object holding the UTF-32 encoded value of the Unicode" +" data in *s*. Output is written according to the following byte order::" +msgstr "" + +#: ../../c-api/unicode.rst:1204 ../../c-api/unicode.rst:1278 +msgid "" +"If byteorder is ``0``, the output string will always start with the Unicode " +"BOM mark (U+FEFF). In the other two modes, no BOM mark is prepended." +msgstr "" + +#: ../../c-api/unicode.rst:1207 +msgid "" +"If ``Py_UNICODE_WIDE`` is not defined, surrogate pairs will be output as a " +"single code point." +msgstr "" + +#: ../../c-api/unicode.rst:1214 +msgid "" +"Part of the old-style :c:type:`Py_UNICODE` API; please migrate to using " +":c:func:`PyUnicode_AsUTF32String` or :c:func:`PyUnicode_AsEncodedString`." +msgstr "" + +#: ../../c-api/unicode.rst:1218 +msgid "UTF-16 Codecs" +msgstr "UTF-16 编解码器" + +#: ../../c-api/unicode.rst:1220 +msgid "These are the UTF-16 codec APIs:" +msgstr "以下是 UTF-16 编解码器的 API:" + +#: ../../c-api/unicode.rst:1226 +msgid "" +"Decode *size* bytes from a UTF-16 encoded buffer string and return the " +"corresponding Unicode object. *errors* (if non-``NULL``) defines the error " +"handling. It defaults to \"strict\"." +msgstr "" +"从 UTF-16 编码的缓冲区数据解码 *size* 个字节并返回相应的 Unicode 对象。 *errors* (如果不为 ``NULL``) " +"定义了错误处理方式。 默认为 \"strict\"。" + +#: ../../c-api/unicode.rst:1237 +msgid "" +"If ``*byteorder`` is zero, and the first two bytes of the input data are a " +"byte order mark (BOM), the decoder switches to this byte order and the BOM " +"is not copied into the resulting Unicode string. If ``*byteorder`` is " +"``-1`` or ``1``, any byte order mark is copied to the output (where it will " +"result in either a ``\\ufeff`` or a ``\\ufffe`` character)." +msgstr "" +"如果 ``*byteorder`` 为零,且输入数据的前两个字节为字节序标记 (BOM),则解码器将切换为该字节序并且 BOM 将不会被拷贝到结果 " +"Unicode 字符串中。 如果 ``*byteorder`` 为 ``-1`` 或 ``1``,则字节序标记会被拷贝到输出中 (它将是一个 " +"``\\ufeff`` 或 ``\\ufffe`` 字符)。" + +#: ../../c-api/unicode.rst:1243 +msgid "" +"After completion, ``*byteorder`` is set to the current byte order at the end" +" of input data." +msgstr "在完成后,``*byteorder`` 将在输入数据的末尾被设为当前字节序。" + +#: ../../c-api/unicode.rst:1254 +msgid "" +"If *consumed* is ``NULL``, behave like :c:func:`PyUnicode_DecodeUTF16`. If " +"*consumed* is not ``NULL``, :c:func:`PyUnicode_DecodeUTF16Stateful` will not" +" treat trailing incomplete UTF-16 byte sequences (such as an odd number of " +"bytes or a split surrogate pair) as an error. Those bytes will not be " +"decoded and the number of bytes that have been decoded will be stored in " +"*consumed*." +msgstr "" +"如果 *consumed* 为 ``NULL``,则行为类似于 :c:func:`PyUnicode_DecodeUTF16`。 如果 " +"*consumed* 不为 ``NULL``,则 :c:func:`PyUnicode_DecodeUTF16Stateful` 将不把末尾的不完整 " +"UTF-16 字节序列(如为奇数个字节或为分开的替代对)视为错误。 这些字节将不会被解码并且已被解码的字节数将存储在 *consumed* 中。" + +#: ../../c-api/unicode.rst:1263 +msgid "" +"Return a Python byte string using the UTF-16 encoding in native byte order. " +"The string always starts with a BOM mark. Error handling is \"strict\". " +"Return ``NULL`` if an exception was raised by the codec." +msgstr "" +"返回使用 UTF-16 编码格式本机字节序的 Python 字节串。 字节串将总是以 BOM 标记打头。 错误处理方式为 \"strict\"。 " +"如果编解码器引发了异常则返回 ``NULL``。" + +#: ../../c-api/unicode.rst:1271 +msgid "" +"Return a Python bytes object holding the UTF-16 encoded value of the Unicode" +" data in *s*. Output is written according to the following byte order::" +msgstr "" + +#: ../../c-api/unicode.rst:1281 +msgid "" +"If ``Py_UNICODE_WIDE`` is defined, a single :c:type:`Py_UNICODE` value may " +"get represented as a surrogate pair. If it is not defined, each " +":c:type:`Py_UNICODE` values is interpreted as a UCS-2 character." +msgstr "" + +#: ../../c-api/unicode.rst:1289 +msgid "" +"Part of the old-style :c:type:`Py_UNICODE` API; please migrate to using " +":c:func:`PyUnicode_AsUTF16String` or :c:func:`PyUnicode_AsEncodedString`." +msgstr "" + +#: ../../c-api/unicode.rst:1293 +msgid "UTF-7 Codecs" +msgstr "UTF-7 编解码器" + +#: ../../c-api/unicode.rst:1295 +msgid "These are the UTF-7 codec APIs:" +msgstr "以下是 UTF-7 编解码器 API:" + +#: ../../c-api/unicode.rst:1300 +msgid "" +"Create a Unicode object by decoding *size* bytes of the UTF-7 encoded string" +" *s*. Return ``NULL`` if an exception was raised by the codec." +msgstr "" +"通过解码 UTF-7 编码的字节串 *s* 的 *size* 个字节创建一个 Unicode 对象。 如果编解码器引发了异常则返回 ``NULL``。" + +#: ../../c-api/unicode.rst:1307 +msgid "" +"If *consumed* is ``NULL``, behave like :c:func:`PyUnicode_DecodeUTF7`. If " +"*consumed* is not ``NULL``, trailing incomplete UTF-7 base-64 sections will " +"not be treated as an error. Those bytes will not be decoded and the number " +"of bytes that have been decoded will be stored in *consumed*." +msgstr "" +"如果 *consumed* 为 ``NULL``,则行为类似于 :c:func:`PyUnicode_DecodeUTF7`。 如果 " +"*consumed* 不为 ``NULL``,则末尾的不完整 UTF-7 base-64 部分将不被视为错误。 " +"这些字节将不会被解码并且已被解码的字节数将存储在 *consumed* 中。" + +#: ../../c-api/unicode.rst:1316 +msgid "" +"Encode the :c:type:`Py_UNICODE` buffer of the given size using UTF-7 and " +"return a Python bytes object. Return ``NULL`` if an exception was raised by" +" the codec." +msgstr "" + +#: ../../c-api/unicode.rst:1320 +msgid "" +"If *base64SetO* is nonzero, \"Set O\" (punctuation that has no otherwise " +"special meaning) will be encoded in base-64. If *base64WhiteSpace* is " +"nonzero, whitespace will be encoded in base-64. Both are set to zero for " +"the Python \"utf-7\" codec." +msgstr "" + +#: ../../c-api/unicode.rst:1331 +msgid "Unicode-Escape Codecs" +msgstr "Unicode-Escape 编解码器" + +#: ../../c-api/unicode.rst:1333 +msgid "These are the \"Unicode Escape\" codec APIs:" +msgstr "以下是 \"Unicode Escape\" 编解码器的 API:" + +#: ../../c-api/unicode.rst:1339 +msgid "" +"Create a Unicode object by decoding *size* bytes of the Unicode-Escape " +"encoded string *s*. Return ``NULL`` if an exception was raised by the " +"codec." +msgstr "" +"通过解码 Unicode-Escape 编码的字节串 *s* 的 *size* 个字节创建一个 Unicode 对象。 如果编解码器引发了异常则返回 " +"``NULL``。" + +#: ../../c-api/unicode.rst:1345 +msgid "" +"Encode a Unicode object using Unicode-Escape and return the result as a " +"bytes object. Error handling is \"strict\". Return ``NULL`` if an " +"exception was raised by the codec." +msgstr "" +"使用 Unicode-Escape 编码 Unicode 对象并将结果作为字节串对象返回。 错误处理方式为 \"strict\"。 " +"如果编解码器引发了异常则将返回 ``NULL``。" + +#: ../../c-api/unicode.rst:1352 +msgid "" +"Encode the :c:type:`Py_UNICODE` buffer of the given *size* using Unicode-" +"Escape and return a bytes object. Return ``NULL`` if an exception was " +"raised by the codec." +msgstr "" + +#: ../../c-api/unicode.rst:1357 +msgid "" +"Part of the old-style :c:type:`Py_UNICODE` API; please migrate to using " +":c:func:`PyUnicode_AsUnicodeEscapeString`." +msgstr "" + +#: ../../c-api/unicode.rst:1361 +msgid "Raw-Unicode-Escape Codecs" +msgstr "Raw-Unicode-Escape 编解码器" + +#: ../../c-api/unicode.rst:1363 +msgid "These are the \"Raw Unicode Escape\" codec APIs:" +msgstr "以下是 \"Raw Unicode Escape\" 编解码器的 API:" + +#: ../../c-api/unicode.rst:1369 +msgid "" +"Create a Unicode object by decoding *size* bytes of the Raw-Unicode-Escape " +"encoded string *s*. Return ``NULL`` if an exception was raised by the " +"codec." +msgstr "" +"通过解码 Raw-Unicode-Escape 编码的字节串 *s* 的 *size* 个字节创建一个 Unicode 对象。 " +"如果编解码器引发了异常则返回 ``NULL``。" + +#: ../../c-api/unicode.rst:1375 +msgid "" +"Encode a Unicode object using Raw-Unicode-Escape and return the result as a " +"bytes object. Error handling is \"strict\". Return ``NULL`` if an " +"exception was raised by the codec." +msgstr "" +"使用 Raw-Unicode-Escape 编码 Unicode 对象并将结果作为字节串对象返回。 错误处理方式为 \"strict\"。 " +"如果编解码器引发了异常则将返回 ``NULL``。" + +#: ../../c-api/unicode.rst:1383 +msgid "" +"Encode the :c:type:`Py_UNICODE` buffer of the given *size* using Raw-" +"Unicode-Escape and return a bytes object. Return ``NULL`` if an exception " +"was raised by the codec." +msgstr "" + +#: ../../c-api/unicode.rst:1389 +msgid "" +"Part of the old-style :c:type:`Py_UNICODE` API; please migrate to using " +":c:func:`PyUnicode_AsRawUnicodeEscapeString` or " +":c:func:`PyUnicode_AsEncodedString`." +msgstr "" + +#: ../../c-api/unicode.rst:1393 +msgid "Latin-1 Codecs" +msgstr "Latin-1 编解码器" + +#: ../../c-api/unicode.rst:1395 +msgid "" +"These are the Latin-1 codec APIs: Latin-1 corresponds to the first 256 " +"Unicode ordinals and only these are accepted by the codecs during encoding." +msgstr "以下是 Latin-1 编解码器的 API: Latin-1 对应于前 256 个 Unicode 码位且编码器在编码期间只接受这些码位。" + +#: ../../c-api/unicode.rst:1401 +msgid "" +"Create a Unicode object by decoding *size* bytes of the Latin-1 encoded " +"string *s*. Return ``NULL`` if an exception was raised by the codec." +msgstr "" +"通过解码 Latin-1 编码的字节串 *s* 的 *size* 个字节创建一个 Unicode 对象。 如果编解码器引发了异常则返回 " +"``NULL``。" + +#: ../../c-api/unicode.rst:1407 +msgid "" +"Encode a Unicode object using Latin-1 and return the result as Python bytes " +"object. Error handling is \"strict\". Return ``NULL`` if an exception was " +"raised by the codec." +msgstr "" +"使用 Latin-1 编码 Unicode 对象并将结果作为 Python 字节串对象返回。 错误处理方式为 \"strict\"。 " +"如果编解码器引发了异常则将返回 ``NULL``。" + +#: ../../c-api/unicode.rst:1414 +msgid "" +"Encode the :c:type:`Py_UNICODE` buffer of the given *size* using Latin-1 and" +" return a Python bytes object. Return ``NULL`` if an exception was raised " +"by the codec." +msgstr "" + +#: ../../c-api/unicode.rst:1421 +msgid "" +"Part of the old-style :c:type:`Py_UNICODE` API; please migrate to using " +":c:func:`PyUnicode_AsLatin1String` or :c:func:`PyUnicode_AsEncodedString`." +msgstr "" + +#: ../../c-api/unicode.rst:1425 +msgid "ASCII Codecs" +msgstr "ASCII 编解码器" + +#: ../../c-api/unicode.rst:1427 +msgid "" +"These are the ASCII codec APIs. Only 7-bit ASCII data is accepted. All " +"other codes generate errors." +msgstr "以下是 ASCII 编解码器的 API。 只接受 7 位 ASCII 数据。 任何其他编码的数据都将导致错误。" + +#: ../../c-api/unicode.rst:1433 +msgid "" +"Create a Unicode object by decoding *size* bytes of the ASCII encoded string" +" *s*. Return ``NULL`` if an exception was raised by the codec." +msgstr "" +"通过解码 ASCII 编码的字节串 *s* 的 *size* 个字节创建一个 Unicode 对象。 如果编解码器引发了异常则返回 ``NULL``。" + +#: ../../c-api/unicode.rst:1439 +msgid "" +"Encode a Unicode object using ASCII and return the result as Python bytes " +"object. Error handling is \"strict\". Return ``NULL`` if an exception was " +"raised by the codec." +msgstr "" +"使用 ASCII 编码 Unicode 对象并将结果作为 Python 字节串对象返回。 错误处理方式为 \"strict\"。 " +"如果编解码器引发了异常则将返回 ``NULL``。" + +#: ../../c-api/unicode.rst:1446 +msgid "" +"Encode the :c:type:`Py_UNICODE` buffer of the given *size* using ASCII and " +"return a Python bytes object. Return ``NULL`` if an exception was raised by" +" the codec." +msgstr "" + +#: ../../c-api/unicode.rst:1453 +msgid "" +"Part of the old-style :c:type:`Py_UNICODE` API; please migrate to using " +":c:func:`PyUnicode_AsASCIIString` or :c:func:`PyUnicode_AsEncodedString`." +msgstr "" + +#: ../../c-api/unicode.rst:1457 +msgid "Character Map Codecs" +msgstr "字符映射编解码器" + +#: ../../c-api/unicode.rst:1459 +msgid "" +"This codec is special in that it can be used to implement many different " +"codecs (and this is in fact what was done to obtain most of the standard " +"codecs included in the :mod:`encodings` package). The codec uses mappings to" +" encode and decode characters. The mapping objects provided must support " +"the :meth:`__getitem__` mapping interface; dictionaries and sequences work " +"well." +msgstr "" + +#: ../../c-api/unicode.rst:1465 +msgid "These are the mapping codec APIs:" +msgstr "以下是映射编解码器的 API:" + +#: ../../c-api/unicode.rst:1470 +msgid "" +"Create a Unicode object by decoding *size* bytes of the encoded string *s* " +"using the given *mapping* object. Return ``NULL`` if an exception was " +"raised by the codec." +msgstr "" +"通过使用给定的 *mapping* 对象解码已编码字节串 *s* 的 *size* 个字节创建 Unicode 对象。 如果编解码器引发了异常则返回 " +"``NULL``。" + +#: ../../c-api/unicode.rst:1474 +msgid "" +"If *mapping* is ``NULL``, Latin-1 decoding will be applied. Else *mapping* " +"must map bytes ordinals (integers in the range from 0 to 255) to Unicode " +"strings, integers (which are then interpreted as Unicode ordinals) or " +"``None``. Unmapped data bytes -- ones which cause a :exc:`LookupError`, as " +"well as ones which get mapped to ``None``, ``0xFFFE`` or ``'\\ufffe'``, are " +"treated as undefined mappings and cause an error." +msgstr "" +"如果 *mapping* 为 ``NULL``,则将应用 Latin-1 编码格式。 否则 *mapping* 必须为字节码位值(0 至 255 " +"范围内的整数)到 Unicode 字符串的映射、整数(将被解读为 Unicode 码位)或 ``None``。 未映射的数据字节 -- 这样的数据将导致" +" :exc:`LookupError`,以及被映射到 ``None`` 的数据,``0xFFFE`` 或 " +"``'\\ufffe'``,将被视为未定义的映射并导致报错。" + +#: ../../c-api/unicode.rst:1485 +msgid "" +"Encode a Unicode object using the given *mapping* object and return the " +"result as a bytes object. Error handling is \"strict\". Return ``NULL`` if" +" an exception was raised by the codec." +msgstr "" +"使用给定的 *mapping* 对象编码 Unicode 对象并将结果作为字节串对象返回。 错误处理方式为 \"strict\"。 " +"如果编解码器引发了异常则将返回 ``NULL``。" + +#: ../../c-api/unicode.rst:1489 +msgid "" +"The *mapping* object must map Unicode ordinal integers to bytes objects, " +"integers in the range from 0 to 255 or ``None``. Unmapped character " +"ordinals (ones which cause a :exc:`LookupError`) as well as mapped to " +"``None`` are treated as \"undefined mapping\" and cause an error." +msgstr "" +"*mapping* 对象必须将整数 Unicode 码位映射到字节串对象、0 至 255 范围内的整数或 ``None``。 未映射的字符码位(将导致 " +":exc:`LookupError` 的数据)以及映射到 ``None`` 的数据将被视为“未定义的映射”并导致报错。" + +#: ../../c-api/unicode.rst:1498 +msgid "" +"Encode the :c:type:`Py_UNICODE` buffer of the given *size* using the given " +"*mapping* object and return the result as a bytes object. Return ``NULL`` " +"if an exception was raised by the codec." +msgstr "" + +#: ../../c-api/unicode.rst:1505 +msgid "" +"Part of the old-style :c:type:`Py_UNICODE` API; please migrate to using " +":c:func:`PyUnicode_AsCharmapString` or :c:func:`PyUnicode_AsEncodedString`." +msgstr "" + +#: ../../c-api/unicode.rst:1508 +msgid "The following codec API is special in that maps Unicode to Unicode." +msgstr "以下特殊的编解码器 API 会将 Unicode 映射至 Unicode。" + +#: ../../c-api/unicode.rst:1512 +msgid "" +"Translate a string by applying a character mapping table to it and return " +"the resulting Unicode object. Return ``NULL`` if an exception was raised by " +"the codec." +msgstr "通过应用字符映射表来转写字符串并返回结果 Unicode 对象。 如果编解码器引发了异常则返回 ``NULL``。" + +#: ../../c-api/unicode.rst:1516 +msgid "" +"The mapping table must map Unicode ordinal integers to Unicode ordinal " +"integers or ``None`` (causing deletion of the character)." +msgstr "字符映射表必须将整数 Unicode 码位映射到整数 Unicode 码位或 ``None`` (这将删除相应的字符)。" + +#: ../../c-api/unicode.rst:1519 +msgid "" +"Mapping tables need only provide the :meth:`__getitem__` interface; " +"dictionaries and sequences work well. Unmapped character ordinals (ones " +"which cause a :exc:`LookupError`) are left untouched and are copied as-is." +msgstr "" + +#: ../../c-api/unicode.rst:1523 +msgid "" +"*errors* has the usual meaning for codecs. It may be ``NULL`` which " +"indicates to use the default error handling." +msgstr "*errors* 具有用于编解码器的通常含义。 它可以为 ``NULL`` 表示使用默认的错误处理方式。" + +#: ../../c-api/unicode.rst:1530 +msgid "" +"Translate a :c:type:`Py_UNICODE` buffer of the given *size* by applying a " +"character *mapping* table to it and return the resulting Unicode object. " +"Return ``NULL`` when an exception was raised by the codec." +msgstr "" + +#: ../../c-api/unicode.rst:1537 +msgid "" +"Part of the old-style :c:type:`Py_UNICODE` API; please migrate to using " +":c:func:`PyUnicode_Translate`. or :ref:`generic codec based API `" +msgstr "" + +#: ../../c-api/unicode.rst:1541 +msgid "MBCS codecs for Windows" +msgstr "Windows 中的 MBCS 编解码器" + +#: ../../c-api/unicode.rst:1543 +msgid "" +"These are the MBCS codec APIs. They are currently only available on Windows " +"and use the Win32 MBCS converters to implement the conversions. Note that " +"MBCS (or DBCS) is a class of encodings, not just one. The target encoding " +"is defined by the user settings on the machine running the codec." +msgstr "" +"以下是 MBCS 编解码器的 API。 目前它们仅在 Windows 中可用并使用 Win32 MBCS 转换器来实现转换。 请注意 MBCS(或 " +"DBCS)是一类编码格式,而非只有一个。 目标编码格式是由运行编解码器的机器上的用户设置定义的。" + +#: ../../c-api/unicode.rst:1550 +msgid "" +"Create a Unicode object by decoding *size* bytes of the MBCS encoded string " +"*s*. Return ``NULL`` if an exception was raised by the codec." +msgstr "" +"通过解码 MBCS 编码的字节串 *s* 的 *size* 个字节创建一个 Unicode 对象。 如果编解码器引发了异常则返回 ``NULL``。" + +#: ../../c-api/unicode.rst:1557 +msgid "" +"If *consumed* is ``NULL``, behave like :c:func:`PyUnicode_DecodeMBCS`. If " +"*consumed* is not ``NULL``, :c:func:`PyUnicode_DecodeMBCSStateful` will not " +"decode trailing lead byte and the number of bytes that have been decoded " +"will be stored in *consumed*." +msgstr "" +"如果 *consumed* 为 ``NULL``,则行为类似于 :c:func:`PyUnicode_DecodeMBCS`。 如果 " +"*consumed* 不为 ``NULL``,则 :c:func:`PyUnicode_DecodeMBCSStateful` " +"将不会解码末尾的不完整字节并且已被解码的字节数将存储在 *consumed* 中。" + +#: ../../c-api/unicode.rst:1565 +msgid "" +"Encode a Unicode object using MBCS and return the result as Python bytes " +"object. Error handling is \"strict\". Return ``NULL`` if an exception was " +"raised by the codec." +msgstr "" +"使用 MBCS 编码 Unicode 对象并将结果作为 Python 字节串对象返回。 错误处理方式为 \"strict\"。 " +"如果编解码器引发了异常则将返回 ``NULL``。" + +#: ../../c-api/unicode.rst:1572 +msgid "" +"Encode the Unicode object using the specified code page and return a Python " +"bytes object. Return ``NULL`` if an exception was raised by the codec. Use " +":c:data:`CP_ACP` code page to get the MBCS encoder." +msgstr "" + +#: ../../c-api/unicode.rst:1581 +msgid "" +"Encode the :c:type:`Py_UNICODE` buffer of the given *size* using MBCS and " +"return a Python bytes object. Return ``NULL`` if an exception was raised by" +" the codec." +msgstr "" + +#: ../../c-api/unicode.rst:1588 +msgid "" +"Part of the old-style :c:type:`Py_UNICODE` API; please migrate to using " +":c:func:`PyUnicode_AsMBCSString`, :c:func:`PyUnicode_EncodeCodePage` or " +":c:func:`PyUnicode_AsEncodedString`." +msgstr "" + +#: ../../c-api/unicode.rst:1592 +msgid "Methods & Slots" +msgstr "方法和槽位" + +#: ../../c-api/unicode.rst:1598 +msgid "Methods and Slot Functions" +msgstr "方法与槽位函数" + +#: ../../c-api/unicode.rst:1600 +msgid "" +"The following APIs are capable of handling Unicode objects and strings on " +"input (we refer to them as strings in the descriptions) and return Unicode " +"objects or integers as appropriate." +msgstr "以下 API 可以处理输入的 Unicode 对象和字符串(在描述中我们称其为字符串)并返回适当的 Unicode 对象或整数值。" + +#: ../../c-api/unicode.rst:1604 +msgid "They all return ``NULL`` or ``-1`` if an exception occurs." +msgstr "如果发生异常它们都将返回 ``NULL`` 或 ``-1``。" + +#: ../../c-api/unicode.rst:1609 +msgid "Concat two strings giving a new Unicode string." +msgstr "拼接两个字符串得到一个新的 Unicode 字符串。" + +#: ../../c-api/unicode.rst:1614 +msgid "" +"Split a string giving a list of Unicode strings. If *sep* is ``NULL``, " +"splitting will be done at all whitespace substrings. Otherwise, splits " +"occur at the given separator. At most *maxsplit* splits will be done. If " +"negative, no limit is set. Separators are not included in the resulting " +"list." +msgstr "" +"拆分一个字符串得到一个 Unicode 字符串的列表。 如果 *sep* 为 ``NULL``,则将根据空格来拆分所有子字符串。 " +"否则,将根据指定的分隔符来拆分。 最多拆分数为 *maxsplit*。 如为负值,则没有限制。 分隔符不包括在结果列表中。" + +#: ../../c-api/unicode.rst:1622 +msgid "" +"Split a Unicode string at line breaks, returning a list of Unicode strings. " +"CRLF is considered to be one line break. If *keepend* is ``0``, the line " +"break characters are not included in the resulting strings." +msgstr "" +"根据分行符来拆分 Unicode 字符串,返回一个 Unicode 字符串的列表。 CRLF 将被视为一个分行符。 如果 *keepend* 为 " +"``0``,则行分隔符不包括在结果列表中。" + +#: ../../c-api/unicode.rst:1629 +msgid "" +"Join a sequence of strings using the given *separator* and return the " +"resulting Unicode string." +msgstr "使用给定的 *separator* 合并一个字符串列表并返回结果 Unicode 字符串。" + +#: ../../c-api/unicode.rst:1636 +msgid "" +"Return ``1`` if *substr* matches ``str[start:end]`` at the given tail end " +"(*direction* == ``-1`` means to do a prefix match, *direction* == ``1`` a " +"suffix match), ``0`` otherwise. Return ``-1`` if an error occurred." +msgstr "" +"如果 *substr* 在给定的端点 (*direction* == ``-1`` 表示前缀匹配,*direction* == ``1`` " +"表示后缀匹配) 与 ``str[start:end]`` 相匹配则返回 ``1``,否则返回 ``0``。 如果发生错误则返回 ``-1``。" + +#: ../../c-api/unicode.rst:1644 +msgid "" +"Return the first position of *substr* in ``str[start:end]`` using the given " +"*direction* (*direction* == ``1`` means to do a forward search, *direction* " +"== ``-1`` a backward search). The return value is the index of the first " +"match; a value of ``-1`` indicates that no match was found, and ``-2`` " +"indicates that an error occurred and an exception has been set." +msgstr "" +"返回使用给定的 *direction* (*direction* == ``1`` 表示前向搜索,*direction* == ``-1`` " +"表示后向搜索) 时 *substr* 在 ``str[start:end]`` 中首次出现的位置。 返回值为首个匹配的索引号;值为 ``-1`` " +"表示未找到匹配,``-2`` 则表示发生错误并设置了异常。" + +#: ../../c-api/unicode.rst:1654 +msgid "" +"Return the first position of the character *ch* in ``str[start:end]`` using " +"the given *direction* (*direction* == ``1`` means to do a forward search, " +"*direction* == ``-1`` a backward search). The return value is the index of " +"the first match; a value of ``-1`` indicates that no match was found, and " +"``-2`` indicates that an error occurred and an exception has been set." +msgstr "" +"返回使用给定的 *direction* (*direction* == ``1`` 表示前向搜索,*direction* == ``-1`` " +"表示后向搜索) 时字符 *ch* 在 ``str[start:end]`` 中首次出现的位置。 返回值为首个匹配的索引号;值为 ``-1`` " +"表示未找到匹配,``-2`` 则表示发生错误并设置了异常。" + +#: ../../c-api/unicode.rst:1662 +msgid "*start* and *end* are now adjusted to behave like ``str[start:end]``." +msgstr "现在 *start* 和 *end* 被调整为与 ``str[start:end]`` 类似的行为。" + +#: ../../c-api/unicode.rst:1669 +msgid "" +"Return the number of non-overlapping occurrences of *substr* in " +"``str[start:end]``. Return ``-1`` if an error occurred." +msgstr "返回 *substr* 在 ``str[start:end]`` 中不重叠出现的次数。 如果发生错误则返回 ``-1``。" + +#: ../../c-api/unicode.rst:1676 +msgid "" +"Replace at most *maxcount* occurrences of *substr* in *str* with *replstr* " +"and return the resulting Unicode object. *maxcount* == ``-1`` means replace " +"all occurrences." +msgstr "" +"将 *str* 中 *substr* 在替换为 *replstr* 至多 *maxcount* 次并返回结果 Unicode 对象。 " +"*maxcount* == ``-1`` 表示全部替换。" + +#: ../../c-api/unicode.rst:1683 +msgid "" +"Compare two strings and return ``-1``, ``0``, ``1`` for less than, equal, " +"and greater than, respectively." +msgstr "比较两个字符串并返回 ``-1``, ``0``, ``1`` 分别表示小于、等于和大于。" + +#: ../../c-api/unicode.rst:1686 +msgid "" +"This function returns ``-1`` upon failure, so one should call " +":c:func:`PyErr_Occurred` to check for errors." +msgstr "此函数执行失败时返回 ``-1``,因此应当调用 :c:func:`PyErr_Occurred` 来检查错误。" + +#: ../../c-api/unicode.rst:1692 +msgid "" +"Compare a Unicode object, *uni*, with *string* and return ``-1``, ``0``, " +"``1`` for less than, equal, and greater than, respectively. It is best to " +"pass only ASCII-encoded strings, but the function interprets the input " +"string as ISO-8859-1 if it contains non-ASCII characters." +msgstr "" +"将 Unicode 对象 *uni* 与 *string* 进行比较并返回 ``-1``, ``0``, ``1`` 分别表示小于、等于和大于。 " +"最好只传入 ASCII 编码的字符串,但如果输入字符串包含非 ASCII 字符则此函数会将其按 ISO-8859-1 编码来解读。" + +#: ../../c-api/unicode.rst:1697 +msgid "This function does not raise exceptions." +msgstr "此函数不会引发异常。" + +#: ../../c-api/unicode.rst:1702 +msgid "Rich compare two Unicode strings and return one of the following:" +msgstr "对两个 Unicode 字符串执行富比较并返回以下值之一:" + +#: ../../c-api/unicode.rst:1704 +msgid "``NULL`` in case an exception was raised" +msgstr "``NULL`` 用于引发了异常的情况" + +#: ../../c-api/unicode.rst:1705 +msgid ":const:`Py_True` or :const:`Py_False` for successful comparisons" +msgstr "" + +#: ../../c-api/unicode.rst:1706 +msgid ":const:`Py_NotImplemented` in case the type combination is unknown" +msgstr "" + +#: ../../c-api/unicode.rst:1708 +msgid "" +"Possible values for *op* are :const:`Py_GT`, :const:`Py_GE`, :const:`Py_EQ`," +" :const:`Py_NE`, :const:`Py_LT`, and :const:`Py_LE`." +msgstr "" + +#: ../../c-api/unicode.rst:1714 +msgid "" +"Return a new string object from *format* and *args*; this is analogous to " +"``format % args``." +msgstr "根据 *format* 和 *args* 返回一个新的字符串对象;这等同于 ``format % args``。" + +#: ../../c-api/unicode.rst:1720 +msgid "" +"Check whether *element* is contained in *container* and return true or false" +" accordingly." +msgstr "检查 *element* 是否包含在 *container* 中并相应返回真值或假值。" + +#: ../../c-api/unicode.rst:1723 +msgid "" +"*element* has to coerce to a one element Unicode string. ``-1`` is returned " +"if there was an error." +msgstr "*element* 必须强制转成一个单元素 Unicode 字符串。 如果发生错误则返回 ``-1``。" + +#: ../../c-api/unicode.rst:1729 +msgid "" +"Intern the argument *\\*string* in place. The argument must be the address " +"of a pointer variable pointing to a Python Unicode string object. If there " +"is an existing interned string that is the same as *\\*string*, it sets " +"*\\*string* to it (decrementing the reference count of the old string object" +" and incrementing the reference count of the interned string object), " +"otherwise it leaves *\\*string* alone and interns it (incrementing its " +"reference count). (Clarification: even though there is a lot of talk about " +"reference counts, think of this function as reference-count-neutral; you own" +" the object after the call if and only if you owned it before the call.)" +msgstr "" + +#: ../../c-api/unicode.rst:1742 +msgid "" +"A combination of :c:func:`PyUnicode_FromString` and " +":c:func:`PyUnicode_InternInPlace`, returning either a new Unicode string " +"object that has been interned, or a new (\"owned\") reference to an earlier " +"interned string object with the same value." +msgstr "" +":c:func:`PyUnicode_FromString` 和 :c:func:`PyUnicode_InternInPlace` " +"的组合操作,返回一个已内部化的新 Unicode 字符串对象,或一个指向具有相同值的原有内部化字符串对象的新的(“拥有的”)引用。" diff --git a/c-api/utilities.po b/c-api/utilities.po new file mode 100644 index 000000000..982e1267e --- /dev/null +++ b/c-api/utilities.po @@ -0,0 +1,36 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) 2001-2022, Python Software Foundation +# This file is distributed under the same license as the Python package. +# FIRST AUTHOR , YEAR. +# +# Translators: +# Freesand Leo , 2019 +# +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: Python 3.9\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2022-11-04 14:34+0000\n" +"PO-Revision-Date: 2017-02-16 17:40+0000\n" +"Last-Translator: Freesand Leo , 2019\n" +"Language-Team: Chinese (China) (https://www.transifex.com/python-doc/teams/5390/zh_CN/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: zh_CN\n" +"Plural-Forms: nplurals=1; plural=0;\n" + +#: ../../c-api/utilities.rst:7 +msgid "Utilities" +msgstr "工具" + +#: ../../c-api/utilities.rst:9 +msgid "" +"The functions in this chapter perform various utility tasks, ranging from " +"helping C code be more portable across platforms, using Python modules from " +"C, and parsing function arguments and constructing Python values from C " +"values." +msgstr "" +"本章中的函数执行各种实用工具任务,包括帮助 C 代码提升跨平台可移植性,在 C 中使用 Python 模块,以及解析函数参数并根据 C 中的值构建 " +"Python 中的值等等。" diff --git a/c-api/veryhigh.po b/c-api/veryhigh.po new file mode 100644 index 000000000..f33b41e4c --- /dev/null +++ b/c-api/veryhigh.po @@ -0,0 +1,536 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) 2001-2024, Python Software Foundation +# This file is distributed under the same license as the Python package. +# FIRST AUTHOR , YEAR. +# +# Translators: +# Dai Xu , 2021 +# Freesand Leo , 2022 +# Rafael Fontenelle , 2024 +# +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: Python 3.9\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2024-04-15 06:01+0000\n" +"PO-Revision-Date: 2017-02-16 17:40+0000\n" +"Last-Translator: Rafael Fontenelle , 2024\n" +"Language-Team: Chinese (China) (https://app.transifex.com/python-doc/teams/5390/zh_CN/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: zh_CN\n" +"Plural-Forms: nplurals=1; plural=0;\n" + +#: ../../c-api/veryhigh.rst:8 +msgid "The Very High Level Layer" +msgstr "极高层级 API" + +#: ../../c-api/veryhigh.rst:10 +msgid "" +"The functions in this chapter will let you execute Python source code given " +"in a file or a buffer, but they will not let you interact in a more detailed" +" way with the interpreter." +msgstr "本章节的函数将允许你执行在文件或缓冲区中提供的 Python 源代码,但它们将不允许你在更细节化的方式与解释器进行交互。" + +#: ../../c-api/veryhigh.rst:14 +msgid "" +"Several of these functions accept a start symbol from the grammar as a " +"parameter. The available start symbols are :const:`Py_eval_input`, " +":const:`Py_file_input`, and :const:`Py_single_input`. These are described " +"following the functions which accept them as parameters." +msgstr "" +"这些函数中有几个可以接受特定的前缀语法符号作为形参。 可用的前缀符号有 :const:`Py_eval_input`, " +":const:`Py_file_input` 以及 :const:`Py_single_input`。 " +"这些符号会在接受它们作为形参的函数文档中加以说明。" + +#: ../../c-api/veryhigh.rst:19 +msgid "" +"Note also that several of these functions take :c:type:`FILE*` parameters. " +"One particular issue which needs to be handled carefully is that the " +":c:type:`FILE` structure for different C libraries can be different and " +"incompatible. Under Windows (at least), it is possible for dynamically " +"linked extensions to actually use different libraries, so care should be " +"taken that :c:type:`FILE*` parameters are only passed to these functions if " +"it is certain that they were created by the same library that the Python " +"runtime is using." +msgstr "" +"还要注意这些函数中有几个可以接受 :c:type:`FILE*` 形参。 有一个需要小心处理的特别问题是针对不同 C 库的 :c:type:`FILE`" +" 结构体可能是不相同而且不兼容的。 (至少是)在 Windows 中,动态链接的扩展有可能会使用不同的库,所以应当特别注意只有在确定这些函数是由 " +"Python 运行时所使用的相同的库创建的情况下才将 :c:type:`FILE*` 形参传给它们。" + +#: ../../c-api/veryhigh.rst:30 +msgid "" +"The main program for the standard interpreter. This is made available for " +"programs which embed Python. The *argc* and *argv* parameters should be " +"prepared exactly as those which are passed to a C program's :c:func:`main` " +"function (converted to wchar_t according to the user's locale). It is " +"important to note that the argument list may be modified (but the contents " +"of the strings pointed to by the argument list are not). The return value " +"will be ``0`` if the interpreter exits normally (i.e., without an " +"exception), ``1`` if the interpreter exits due to an exception, or ``2`` if " +"the parameter list does not represent a valid Python command line." +msgstr "" +"针对标准解释器的主程序。 嵌入了 Python 的程序将可使用此程序。 所提供的 *argc* 和 *argv* 形参应当与传给 C 程序的 " +":c:func:`main` 函数的形参相同(将根据用户的语言区域转换为)。 " +"一个重要的注意事项是参数列表可能会被修改(但参数列表中字符串所指向的内容不会被修改)。 如果解释器正常退出(即未引发异常)则返回值将为 " +"``0``,如果解释器因引发异常而退出则返回 ``1``,或者如果形参列表不能表示有效的 Python 命令行则返回 ``2``。" + +#: ../../c-api/veryhigh.rst:40 +msgid "" +"Note that if an otherwise unhandled :exc:`SystemExit` is raised, this " +"function will not return ``1``, but exit the process, as long as " +"``Py_InspectFlag`` is not set." +msgstr "" +"请注意如果引发了一个在其他场合下未处理的 :exc:`SystemExit`,此函数将不会返回 ``1``,而是退出进程,只要 " +"``Py_InspectFlag`` 还未被设置。" + +#: ../../c-api/veryhigh.rst:47 +msgid "Similar to :c:func:`Py_Main` but *argv* is an array of bytes strings." +msgstr "类似于 :c:func:`Py_Main` 但 *argv* 是一个包含字节串的数组。" + +#: ../../c-api/veryhigh.rst:54 +msgid "" +"This is a simplified interface to :c:func:`PyRun_AnyFileExFlags` below, " +"leaving *closeit* set to ``0`` and *flags* set to ``NULL``." +msgstr "" +"这是针对下面 :c:func:`PyRun_AnyFileExFlags` 的简化版接口,将 *closeit* 设为 ``0`` 而将 *flags*" +" 设为 ``NULL``。" + +#: ../../c-api/veryhigh.rst:60 +msgid "" +"This is a simplified interface to :c:func:`PyRun_AnyFileExFlags` below, " +"leaving the *closeit* argument set to ``0``." +msgstr "这是针对下面 :c:func:`PyRun_AnyFileExFlags` 的简化版接口,将 *closeit* 参数设为 ``0``。" + +#: ../../c-api/veryhigh.rst:66 +msgid "" +"This is a simplified interface to :c:func:`PyRun_AnyFileExFlags` below, " +"leaving the *flags* argument set to ``NULL``." +msgstr "这是针对下面 :c:func:`PyRun_AnyFileExFlags` 的简化版接口,将 *flags* 参数设为 ``NULL``。" + +#: ../../c-api/veryhigh.rst:72 +msgid "" +"If *fp* refers to a file associated with an interactive device (console or " +"terminal input or Unix pseudo-terminal), return the value of " +":c:func:`PyRun_InteractiveLoop`, otherwise return the result of " +":c:func:`PyRun_SimpleFile`. *filename* is decoded from the filesystem " +"encoding (:func:`sys.getfilesystemencoding`). If *filename* is ``NULL``, " +"this function uses ``\"???\"`` as the filename. If *closeit* is true, the " +"file is closed before ``PyRun_SimpleFileExFlags()`` returns." +msgstr "" +"如果 *fp* 指向一个关联到交互设备(控制台或终端输入或 Unix 伪终端)的文件,则返回 " +":c:func:`PyRun_InteractiveLoop` 的值,否则返回 :c:func:`PyRun_SimpleFile` 的结果。 " +"*filename* 会使用文件系统的编码格式 (:func:`sys.getfilesystemencoding`) 来解码。 如果 " +"*filename* 为 ``NULL``,此函数会使用 ``\"???\"`` 作为文件名。 如果 *closeit* 为真值,文件会在 " +"``PyRun_SimpleFileExFlags()`` 返回之前被关闭。" + +#: ../../c-api/veryhigh.rst:84 +msgid "" +"This is a simplified interface to :c:func:`PyRun_SimpleStringFlags` below, " +"leaving the :c:type:`PyCompilerFlags`\\* argument set to ``NULL``." +msgstr "" +"这是针对下面 :c:func:`PyRun_SimpleStringFlags` 的简化版接口,将 " +":c:type:`PyCompilerFlags`\\* 参数设为 ``NULL``。" + +#: ../../c-api/veryhigh.rst:90 +msgid "" +"Executes the Python source code from *command* in the :mod:`__main__` module" +" according to the *flags* argument. If :mod:`__main__` does not already " +"exist, it is created. Returns ``0`` on success or ``-1`` if an exception " +"was raised. If there was an error, there is no way to get the exception " +"information. For the meaning of *flags*, see below." +msgstr "" +"根据 *flags* 参数,在 :mod:`__main__` 模块中执行 Python 源代码。 如果 :mod:`__main__` " +"尚不存在,它将被创建。 成功时返回 ``0``,如果引发异常则返回 ``-1``。 如果发生错误,则将无法获得异常信息。 对于 *flags* " +"的含义,请参阅下文。" + +#: ../../c-api/veryhigh.rst:96 +msgid "" +"Note that if an otherwise unhandled :exc:`SystemExit` is raised, this " +"function will not return ``-1``, but exit the process, as long as " +"``Py_InspectFlag`` is not set." +msgstr "" +"请注意如果引发了一个在其他场合下未处理的 :exc:`SystemExit`,此函数将不会返回 ``-1``,而是退出进程,只要 " +"``Py_InspectFlag`` 还未被设置。" + +#: ../../c-api/veryhigh.rst:103 +msgid "" +"This is a simplified interface to :c:func:`PyRun_SimpleFileExFlags` below, " +"leaving *closeit* set to ``0`` and *flags* set to ``NULL``." +msgstr "" +"这是针对下面 :c:func:`PyRun_SimpleFileExFlags` 的简化版接口,将 *closeit* 设为 ``0`` 而将 " +"*flags* 设为 ``NULL``。" + +#: ../../c-api/veryhigh.rst:109 +msgid "" +"This is a simplified interface to :c:func:`PyRun_SimpleFileExFlags` below, " +"leaving *flags* set to ``NULL``." +msgstr "" +"这是针对下面 :c:func:`PyRun_SimpleFileExFlags` 的简化版接口,将 *flags* 设为 ``NULL``。" + +#: ../../c-api/veryhigh.rst:115 +msgid "" +"Similar to :c:func:`PyRun_SimpleStringFlags`, but the Python source code is " +"read from *fp* instead of an in-memory string. *filename* should be the name" +" of the file, it is decoded from the filesystem encoding " +"(:func:`sys.getfilesystemencoding`). If *closeit* is true, the file is " +"closed before PyRun_SimpleFileExFlags returns." +msgstr "" + +#: ../../c-api/veryhigh.rst:122 +msgid "" +"On Windows, *fp* should be opened as binary mode (e.g. ``fopen(filename, " +"\"rb\")``). Otherwise, Python may not handle script file with LF line ending" +" correctly." +msgstr "" +"在 Windows 上,*fp* 应当以二进制模式打开 (即 ``fopen(filename, \"rb\")``)。 否则,Python " +"可能无法正确地处理使用 LF 行结束符的脚本文件。" + +#: ../../c-api/veryhigh.rst:128 +msgid "" +"This is a simplified interface to :c:func:`PyRun_InteractiveOneFlags` below," +" leaving *flags* set to ``NULL``." +msgstr "" +"这是针对下面 :c:func:`PyRun_InteractiveOneFlags` 的简化版接口,将 *flags* 设为 ``NULL``。" + +#: ../../c-api/veryhigh.rst:134 +msgid "" +"Read and execute a single statement from a file associated with an " +"interactive device according to the *flags* argument. The user will be " +"prompted using ``sys.ps1`` and ``sys.ps2``. *filename* is decoded from the " +"filesystem encoding (:func:`sys.getfilesystemencoding`)." +msgstr "" + +#: ../../c-api/veryhigh.rst:139 +msgid "" +"Returns ``0`` when the input was executed successfully, ``-1`` if there was " +"an exception, or an error code from the :file:`errcode.h` include file " +"distributed as part of Python if there was a parse error. (Note that " +":file:`errcode.h` is not included by :file:`Python.h`, so must be included " +"specifically if needed.)" +msgstr "" +"当输入被成功执行时返回 ``0``,如果引发异常则返回 ``-1``,或者如果存在解析错误则返回来自作为 Python 的组成部分发布的 " +":file:`errcode.h` 包括文件的错误代码。 (请注意 :file:`errcode.h` 并未被 :file:`Python.h` " +"所包括,因此如果需要则必须专门地包括。)" + +#: ../../c-api/veryhigh.rst:148 +msgid "" +"This is a simplified interface to :c:func:`PyRun_InteractiveLoopFlags` " +"below, leaving *flags* set to ``NULL``." +msgstr "" +"这是针对下面 :c:func:`PyRun_InteractiveLoopFlags` 的简化版接口,将 *flags* 设为 ``NULL``。" + +#: ../../c-api/veryhigh.rst:154 +msgid "" +"Read and execute statements from a file associated with an interactive " +"device until EOF is reached. The user will be prompted using ``sys.ps1`` " +"and ``sys.ps2``. *filename* is decoded from the filesystem encoding " +"(:func:`sys.getfilesystemencoding`). Returns ``0`` at EOF or a negative " +"number upon failure." +msgstr "" + +#: ../../c-api/veryhigh.rst:163 +msgid "" +"Can be set to point to a function with the prototype ``int func(void)``. " +"The function will be called when Python's interpreter prompt is about to " +"become idle and wait for user input from the terminal. The return value is " +"ignored. Overriding this hook can be used to integrate the interpreter's " +"prompt with other event loops, as done in the :file:`Modules/_tkinter.c` in " +"the Python source code." +msgstr "" +"可以被设为指向一个原型为 ``int func(void)`` 的函数。 该函数将在Python 的解释器提示符即将空闲并等待用户从终端输入时被调用。 " +"返回值会被忽略。 重写这个钩子可被用来将解释器的提示符集成到其他事件循环中,就像 Python 码中 " +":file:`Modules/_tkinter.c` 所做的那样。" + +#: ../../c-api/veryhigh.rst:174 +msgid "" +"Can be set to point to a function with the prototype ``char *func(FILE " +"*stdin, FILE *stdout, char *prompt)``, overriding the default function used " +"to read a single line of input at the interpreter's prompt. The function is" +" expected to output the string *prompt* if it's not ``NULL``, and then read " +"a line of input from the provided standard input file, returning the " +"resulting string. For example, The :mod:`readline` module sets this hook to" +" provide line-editing and tab-completion features." +msgstr "" +"可以被设为指向一个原型为 ``char *func(FILE *stdin, FILE *stdout, char *prompt)`` " +"的函数,重写被用来读取解释器提示符的一行输入的默认函数。 该函数被预期为如果字符串 *prompt* 不为 ``NULL`` " +"就输出它,然后从所提供的标准输入文件读取一行输入,并返回结果字符串。 例如,:mod:`readline` 模块将这个钩子设置为提供行编辑和 tab " +"键补全等功能。" + +#: ../../c-api/veryhigh.rst:183 +msgid "" +"The result must be a string allocated by :c:func:`PyMem_RawMalloc` or " +":c:func:`PyMem_RawRealloc`, or ``NULL`` if an error occurred." +msgstr "" +"结果必须是一个由 :c:func:`PyMem_RawMalloc` 或 :c:func:`PyMem_RawRealloc` " +"分配的字符串,或者如果发生错误则为 ``NULL``。" + +#: ../../c-api/veryhigh.rst:186 +msgid "" +"The result must be allocated by :c:func:`PyMem_RawMalloc` or " +":c:func:`PyMem_RawRealloc`, instead of being allocated by " +":c:func:`PyMem_Malloc` or :c:func:`PyMem_Realloc`." +msgstr "" +"结果必须由 :c:func:`PyMem_RawMalloc` 或 :c:func:`PyMem_RawRealloc` 分配,而不是由 " +":c:func:`PyMem_Malloc` 或 :c:func:`PyMem_Realloc` 分配。" + +#: ../../c-api/veryhigh.rst:194 +msgid "" +"This is a simplified interface to " +":c:func:`PyParser_SimpleParseStringFlagsFilename` below, leaving *filename*" +" set to ``NULL`` and *flags* set to ``0``." +msgstr "" + +#: ../../c-api/veryhigh.rst:203 +msgid "" +"This is a simplified interface to " +":c:func:`PyParser_SimpleParseStringFlagsFilename` below, leaving *filename*" +" set to ``NULL``." +msgstr "" + +#: ../../c-api/veryhigh.rst:212 +msgid "" +"Parse Python source code from *str* using the start token *start* according " +"to the *flags* argument. The result can be used to create a code object " +"which can be evaluated efficiently. This is useful if a code fragment must " +"be evaluated many times. *filename* is decoded from the filesystem encoding " +"(:func:`sys.getfilesystemencoding`)." +msgstr "" + +#: ../../c-api/veryhigh.rst:223 +msgid "" +"This is a simplified interface to :c:func:`PyParser_SimpleParseFileFlags` " +"below, leaving *flags* set to ``0``." +msgstr "" + +#: ../../c-api/veryhigh.rst:231 +msgid "" +"Similar to :c:func:`PyParser_SimpleParseStringFlagsFilename`, but the Python" +" source code is read from *fp* instead of an in-memory string." +msgstr "" + +#: ../../c-api/veryhigh.rst:239 +msgid "" +"This is a simplified interface to :c:func:`PyRun_StringFlags` below, leaving" +" *flags* set to ``NULL``." +msgstr "这是针对下面 :c:func:`PyRun_StringFlags` 的简化版接口,将 *flags* 设为 ``NULL``。" + +#: ../../c-api/veryhigh.rst:245 +msgid "" +"Execute Python source code from *str* in the context specified by the " +"objects *globals* and *locals* with the compiler flags specified by *flags*." +" *globals* must be a dictionary; *locals* can be any object that implements" +" the mapping protocol. The parameter *start* specifies the start token that" +" should be used to parse the source code." +msgstr "" +"在由对象 *globals* 和 *locals* 指定的上下文中执行来自 *str* 的 Python 源代码,并使用以 *flags* " +"指定的编译器旗标。 *globals* 必须是一个字典;*locals* 可以是任何实现了映射协议的对象。 形参 *start* " +"指定了应当被用来解析源代码的起始形符。" + +#: ../../c-api/veryhigh.rst:251 +msgid "" +"Returns the result of executing the code as a Python object, or ``NULL`` if " +"an exception was raised." +msgstr "返回将代码作为 Python 对象执行的结果,或者如果引发了异常则返回 ``NULL``。" + +#: ../../c-api/veryhigh.rst:257 +msgid "" +"This is a simplified interface to :c:func:`PyRun_FileExFlags` below, leaving" +" *closeit* set to ``0`` and *flags* set to ``NULL``." +msgstr "" +"这是针对下面 :c:func:`PyRun_FileExFlags` 的简化版接口,将 *closeit* 设为 ``0`` 并将 *flags* 设为" +" ``NULL``。" + +#: ../../c-api/veryhigh.rst:263 +msgid "" +"This is a simplified interface to :c:func:`PyRun_FileExFlags` below, leaving" +" *flags* set to ``NULL``." +msgstr "这是针对下面 :c:func:`PyRun_FileExFlags` 的简化版接口,将 *flags* 设为 ``NULL``。" + +#: ../../c-api/veryhigh.rst:269 +msgid "" +"This is a simplified interface to :c:func:`PyRun_FileExFlags` below, leaving" +" *closeit* set to ``0``." +msgstr "这是针对下面 :c:func:`PyRun_FileExFlags` 的简化版接口,将 *closeit* 设为 ``0``。" + +#: ../../c-api/veryhigh.rst:275 +msgid "" +"Similar to :c:func:`PyRun_StringFlags`, but the Python source code is read " +"from *fp* instead of an in-memory string. *filename* should be the name of " +"the file, it is decoded from the filesystem encoding " +"(:func:`sys.getfilesystemencoding`). If *closeit* is true, the file is " +"closed before :c:func:`PyRun_FileExFlags` returns." +msgstr "" + +#: ../../c-api/veryhigh.rst:284 +msgid "" +"This is a simplified interface to :c:func:`Py_CompileStringFlags` below, " +"leaving *flags* set to ``NULL``." +msgstr "这是针对下面 :c:func:`Py_CompileStringFlags` 的简化版接口,将 *flags* 设为 ``NULL``。" + +#: ../../c-api/veryhigh.rst:290 +msgid "" +"This is a simplified interface to :c:func:`Py_CompileStringExFlags` below, " +"with *optimize* set to ``-1``." +msgstr "" +"这是针对下面 :c:func:`Py_CompileStringExFlags` 的简化版接口,将 *optimize* 设为 ``-1``。" + +#: ../../c-api/veryhigh.rst:296 +msgid "" +"Parse and compile the Python source code in *str*, returning the resulting " +"code object. The start token is given by *start*; this can be used to " +"constrain the code which can be compiled and should be " +":const:`Py_eval_input`, :const:`Py_file_input`, or :const:`Py_single_input`." +" The filename specified by *filename* is used to construct the code object " +"and may appear in tracebacks or :exc:`SyntaxError` exception messages. This" +" returns ``NULL`` if the code cannot be parsed or compiled." +msgstr "" +"解析并编译 *str* 中的 Python 源代码,返回结果代码对象。 开始形符由 *start* 给出;这可被用来限制可被编译的代码并且应为 " +":const:`Py_eval_input`, :const:`Py_file_input` 或 :const:`Py_single_input`。 由" +" *filename* 指定的文件名会被用来构造代码对象并可能出现在回溯信息或 :exc:`SyntaxError` 异常消息中。 " +"如果代码无法被解析或编译则此函数将返回 ``NULL``。" + +#: ../../c-api/veryhigh.rst:304 +msgid "" +"The integer *optimize* specifies the optimization level of the compiler; a " +"value of ``-1`` selects the optimization level of the interpreter as given " +"by :option:`-O` options. Explicit levels are ``0`` (no optimization; " +"``__debug__`` is true), ``1`` (asserts are removed, ``__debug__`` is false) " +"or ``2`` (docstrings are removed too)." +msgstr "" +"整数 *optimize* 指定编译器的优化级别;值 ``-1`` 将选择与 :option:`-O` 选项相同的解释器优化级别。 显式级别为 " +"``0`` (无优化;``__debug__`` 为真值)、``1`` (断言被移除,``__debug__`` 为假值) 或 ``2`` " +"(文档字符串也被移除)。" + +#: ../../c-api/veryhigh.rst:315 +msgid "" +"Like :c:func:`Py_CompileStringObject`, but *filename* is a byte string " +"decoded from the filesystem encoding (:func:`os.fsdecode`)." +msgstr "" + +#: ../../c-api/veryhigh.rst:322 +msgid "" +"This is a simplified interface to :c:func:`PyEval_EvalCodeEx`, with just the" +" code object, and global and local variables. The other arguments are set " +"to ``NULL``." +msgstr "" +"这是针对 :c:func:`PyEval_EvalCodeEx` 的简化版接口,只附带代码对象,以及全局和局部变量。 其他参数均设为 ``NULL``。" + +#: ../../c-api/veryhigh.rst:329 +msgid "" +"Evaluate a precompiled code object, given a particular environment for its " +"evaluation. This environment consists of a dictionary of global variables, " +"a mapping object of local variables, arrays of arguments, keywords and " +"defaults, a dictionary of default values for :ref:`keyword-only ` arguments and a closure tuple of cells." +msgstr "" +"对一个预编译的代码对象求值,为其求值给出特定的环境。 此环境由全局变量的字典,局部变量映射对象,参数、关键字和默认值的数组,:ref:`仅限关键字 " +"` 参数的默认值的字典和单元的封闭元组构成。" + +#: ../../c-api/veryhigh.rst:338 +msgid "" +"The C structure of the objects used to describe frame objects. The fields of" +" this type are subject to change at any time." +msgstr "用于描述帧对象的 C 对象结构体。 此类型的字段可能在任何时候被改变。" + +#: ../../c-api/veryhigh.rst:344 +msgid "" +"Evaluate an execution frame. This is a simplified interface to " +":c:func:`PyEval_EvalFrameEx`, for backward compatibility." +msgstr "对一个执行帧求值。 这是针对 :c:func:`PyEval_EvalFrameEx` 的简化版接口,用于保持向下兼容性。" + +#: ../../c-api/veryhigh.rst:350 +msgid "" +"This is the main, unvarnished function of Python interpretation. The code " +"object associated with the execution frame *f* is executed, interpreting " +"bytecode and executing calls as needed. The additional *throwflag* " +"parameter can mostly be ignored - if true, then it causes an exception to " +"immediately be thrown; this is used for the :meth:`~generator.throw` methods" +" of generator objects." +msgstr "" +"这是 Python 解释运行不带修饰的主函数。 与执行帧 *f* 相关联的代码对象将被执行,解释字节码并根据需要执行调用。 额外的 " +"*throwflag* 形参基本可以被忽略 —— 如果为真值,则会导致立即抛出一个异常;这会被用于生成器对象的 " +":meth:`~generator.throw` 方法。" + +#: ../../c-api/veryhigh.rst:357 +msgid "" +"This function now includes a debug assertion to help ensure that it does not" +" silently discard an active exception." +msgstr "该函数现在包含一个调试断言,用以确保不会静默地丢弃活动的异常。" + +#: ../../c-api/veryhigh.rst:364 +msgid "" +"This function changes the flags of the current evaluation frame, and returns" +" true on success, false on failure." +msgstr "此函数会修改当前求值帧的旗标,并在成功时返回真值,失败时返回假值。" + +#: ../../c-api/veryhigh.rst:372 +msgid "" +"The start symbol from the Python grammar for isolated expressions; for use " +"with :c:func:`Py_CompileString`." +msgstr "Python 语法中用于孤立表达式的起始符号;配合 :c:func:`Py_CompileString` 使用。" + +#: ../../c-api/veryhigh.rst:380 +msgid "" +"The start symbol from the Python grammar for sequences of statements as read" +" from a file or other source; for use with :c:func:`Py_CompileString`. This" +" is the symbol to use when compiling arbitrarily long Python source code." +msgstr "" +"Python 语法中用于从文件或其他源读取语句序列的起始符号;配合 :c:func:`Py_CompileString` 使用。 这是在编译任意长的 " +"Python 源代码时要使用的符号。" + +#: ../../c-api/veryhigh.rst:389 +msgid "" +"The start symbol from the Python grammar for a single statement; for use " +"with :c:func:`Py_CompileString`. This is the symbol used for the interactive" +" interpreter loop." +msgstr "" +"Python 语法中用于单独语句的起始符号;配合 :c:func:`Py_CompileString` 使用。 这是用于交互式解释器循环的符号。" + +#: ../../c-api/veryhigh.rst:396 +msgid "" +"This is the structure used to hold compiler flags. In cases where code is " +"only being compiled, it is passed as ``int flags``, and in cases where code " +"is being executed, it is passed as ``PyCompilerFlags *flags``. In this " +"case, ``from __future__ import`` can modify *flags*." +msgstr "" +"这是用来存放编译器旗标的结构体。 对于代码仅被编译的情况,它将作为 ``int flags`` 传入,而对于代码要被执行的情况,它将作为 " +"``PyCompilerFlags *flags`` 传入。 在这种情况下,``from __future__ import`` 可以修改 " +"*flags*。" + +#: ../../c-api/veryhigh.rst:401 +msgid "" +"Whenever ``PyCompilerFlags *flags`` is ``NULL``, :attr:`cf_flags` is treated" +" as equal to ``0``, and any modification due to ``from __future__ import`` " +"is discarded." +msgstr "" +"当 ``PyCompilerFlags *flags`` 为 ``NULL`` 时,:attr:`cf_flags` 将被当作等于 ``0`` " +"来处理,而任何 ``from __future__ import`` 所导致的修改都会被丢弃。" + +#: ../../c-api/veryhigh.rst:407 +msgid "Compiler flags." +msgstr "编译器旗标。" + +#: ../../c-api/veryhigh.rst:411 +msgid "" +"*cf_feature_version* is the minor Python version. It should be initialized " +"to ``PY_MINOR_VERSION``." +msgstr "*cf_feature_version* 是 Python 的小版本号。 它应当被初始化为 ``PY_MINOR_VERSION``。" + +#: ../../c-api/veryhigh.rst:414 +msgid "" +"The field is ignored by default, it is used if and only if ``PyCF_ONLY_AST``" +" flag is set in *cf_flags*." +msgstr "此字段默认会被忽略,当且仅当在 *cf_flags* 中设置了 ``PyCF_ONLY_AST`` 旗标它才会被使用。" + +#: ../../c-api/veryhigh.rst:417 +msgid "Added *cf_feature_version* field." +msgstr "增加了 *cf_feature_version* 字段。" + +#: ../../c-api/veryhigh.rst:423 +msgid "" +"This bit can be set in *flags* to cause division operator ``/`` to be " +"interpreted as \"true division\" according to :pep:`238`." +msgstr "这个标志位可在 *flags* 中设置以使得除法运算符 ``/`` 被解读为 :pep:`238` 所规定的“真除法”。" diff --git a/c-api/weakref.po b/c-api/weakref.po new file mode 100644 index 000000000..1e584efa5 --- /dev/null +++ b/c-api/weakref.po @@ -0,0 +1,104 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) 2001-2022, Python Software Foundation +# This file is distributed under the same license as the Python package. +# FIRST AUTHOR , YEAR. +# +# Translators: +# Siyuan Xu, 2019 +# Freesand Leo , 2021 +# +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: Python 3.9\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2022-11-04 14:34+0000\n" +"PO-Revision-Date: 2017-02-16 17:40+0000\n" +"Last-Translator: Freesand Leo , 2021\n" +"Language-Team: Chinese (China) (https://www.transifex.com/python-doc/teams/5390/zh_CN/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: zh_CN\n" +"Plural-Forms: nplurals=1; plural=0;\n" + +#: ../../c-api/weakref.rst:6 +msgid "Weak Reference Objects" +msgstr "弱引用对象" + +#: ../../c-api/weakref.rst:8 +msgid "" +"Python supports *weak references* as first-class objects. There are two " +"specific object types which directly implement weak references. The first " +"is a simple reference object, and the second acts as a proxy for the " +"original object as much as it can." +msgstr "" +"Python 支持 “弱引用” 作为一类对象。具体来说,有两种直接实现弱引用的对象。第一种就是简单的引用对象,第二种尽可能地作用为一个原对象的代理。" + +#: ../../c-api/weakref.rst:16 +msgid "" +"Return true if *ob* is either a reference or proxy object. This function " +"always succeeds." +msgstr "如果 *ob* 是一个引用或代理对象则返回真值。 此函数总是会成功执行。" + +#: ../../c-api/weakref.rst:22 +msgid "" +"Return true if *ob* is a reference object. This function always succeeds." +msgstr "如果 *ob* 是一个引用对象则返回真值。 此函数总是会成功执行。" + +#: ../../c-api/weakref.rst:27 +msgid "Return true if *ob* is a proxy object. This function always succeeds." +msgstr "如果 *ob* 是一个代理对象则返回真值。 此函数总是会成功执行。" + +#: ../../c-api/weakref.rst:32 +msgid "" +"Return a weak reference object for the object *ob*. This will always return" +" a new reference, but is not guaranteed to create a new object; an existing " +"reference object may be returned. The second parameter, *callback*, can be " +"a callable object that receives notification when *ob* is garbage collected;" +" it should accept a single parameter, which will be the weak reference " +"object itself. *callback* may also be ``None`` or ``NULL``. If *ob* is not " +"a weakly-referencable object, or if *callback* is not callable, ``None``, or" +" ``NULL``, this will return ``NULL`` and raise :exc:`TypeError`." +msgstr "" +"返回对象 *ob* 的一个弱引用对象。 该函数总是会返回一个新引用,但不保证创建一个新的对象;它有可能返回一个现有的引用对象。 第二个形参 " +"*callback* 为一个可调用对象,它会在 *ob* 被作为垃圾回收时接收通知;它应该接受一个单独形参,即弱引用对象本身。 *callback* " +"也可以为 ``None`` 或 ``NULL``。 如果 *ob* 不是一个弱引用对象,或者如果 *callback* 不是可调用对象,``None``" +" 或 ``NULL``,该函数将返回 ``NULL`` 并且引发 :exc:`TypeError`。" + +#: ../../c-api/weakref.rst:44 +msgid "" +"Return a weak reference proxy object for the object *ob*. This will always " +"return a new reference, but is not guaranteed to create a new object; an " +"existing proxy object may be returned. The second parameter, *callback*, " +"can be a callable object that receives notification when *ob* is garbage " +"collected; it should accept a single parameter, which will be the weak " +"reference object itself. *callback* may also be ``None`` or ``NULL``. If " +"*ob* is not a weakly-referencable object, or if *callback* is not callable, " +"``None``, or ``NULL``, this will return ``NULL`` and raise :exc:`TypeError`." +msgstr "" +"返回对象 *ob* 的一个弱引用代理对象。 该函数将总是返回一个新的引用,但不保证创建一个新的对象;它有可能返回一个现有的代理对象。 第二个形参 " +"*callback* 为一个可调用对象,它会在 *ob* 被作为垃圾回收时接收通知;它应该接受一个单独形参,即弱引用对象本身。 *callback* " +"也可以为 ``None`` 或 ``NULL``。 如果 *ob* 不是一个弱引用对象,或者如果 *callback* 不是可调用对象,``None``" +" 或 ``NULL``,该函数将返回 ``NULL`` 并且引发 :exc:`TypeError`。" + +#: ../../c-api/weakref.rst:56 +msgid "" +"Return the referenced object from a weak reference, *ref*. If the referent " +"is no longer live, returns :const:`Py_None`." +msgstr "返回弱引用对象 ref 的被引用对象。如果被引用对象不再存在,则返回 :const:`Py_None`。" + +#: ../../c-api/weakref.rst:61 +msgid "" +"This function returns a **borrowed reference** to the referenced object. " +"This means that you should always call :c:func:`Py_INCREF` on the object " +"except if you know that it cannot be destroyed while you are still using it." +msgstr "" +"该函数返回被引用对象的一个**借来的引用**。这意味着除非你很清楚在你使用期间这个对象不可能被销毁,否则你应该始终对该对象调用 " +":c:func:`Py_INCREF`。" + +#: ../../c-api/weakref.rst:69 +msgid "" +"Similar to :c:func:`PyWeakref_GetObject`, but implemented as a macro that " +"does no error checking." +msgstr "类似 :c:func:`PyWeakref_GetObject`,但实现为一个不做类型检查的宏。" diff --git a/contents.po b/contents.po new file mode 100644 index 000000000..e0c84f49c --- /dev/null +++ b/contents.po @@ -0,0 +1,26 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) 2001-2022, Python Software Foundation +# This file is distributed under the same license as the Python package. +# FIRST AUTHOR , YEAR. +# +# Translators: +# jsgang , 2017 +# +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: Python 3.9\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2022-11-04 14:34+0000\n" +"PO-Revision-Date: 2017-02-16 17:32+0000\n" +"Last-Translator: jsgang , 2017\n" +"Language-Team: Chinese (China) (https://www.transifex.com/python-doc/teams/5390/zh_CN/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: zh_CN\n" +"Plural-Forms: nplurals=1; plural=0;\n" + +#: ../../contents.rst:3 +msgid "Python Documentation contents" +msgstr "Python文档内容" diff --git a/copyright.po b/copyright.po new file mode 100644 index 000000000..8a188fe29 --- /dev/null +++ b/copyright.po @@ -0,0 +1,58 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) 2001-2022, Python Software Foundation +# This file is distributed under the same license as the Python package. +# FIRST AUTHOR , YEAR. +# +# Translators: +# jsgang , 2017 +# 汪心禾 , 2019 +# WH-2099 , 2022 +# +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: Python 3.9\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2022-11-04 14:34+0000\n" +"PO-Revision-Date: 2017-02-16 17:32+0000\n" +"Last-Translator: WH-2099 , 2022\n" +"Language-Team: Chinese (China) (https://www.transifex.com/python-doc/teams/5390/zh_CN/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: zh_CN\n" +"Plural-Forms: nplurals=1; plural=0;\n" + +#: ../../copyright.rst:3 +msgid "Copyright" +msgstr "版权" + +#: ../../copyright.rst:5 +msgid "Python and this documentation is:" +msgstr "Python 与这份文档:" + +#: ../../copyright.rst:7 +msgid "Copyright © 2001-2022 Python Software Foundation. All rights reserved." +msgstr "版权所有 © 2001-2022 Python 软件基金会。保留所有权利。" + +#: ../../copyright.rst:9 +msgid "Copyright © 2000 BeOpen.com. All rights reserved." +msgstr "版权所有 © 2000 BeOpen.com。保留所有权利。" + +#: ../../copyright.rst:11 +msgid "" +"Copyright © 1995-2000 Corporation for National Research Initiatives. All " +"rights reserved." +msgstr "" +"版权所有 © 1995-2000 Corporation for National Research Initiatives。保留所有权利。" + +#: ../../copyright.rst:14 +msgid "" +"Copyright © 1991-1995 Stichting Mathematisch Centrum. All rights reserved." +msgstr "版权所有 © 1991-1995 Stichting Mathematisch Centrum。保留所有权利。" + +#: ../../copyright.rst:18 +msgid "" +"See :ref:`history-and-license` for complete license and permissions " +"information." +msgstr "有关完整的许可证和许可信息,参见 :ref:`history-and-license`。" diff --git a/distributing/index.po b/distributing/index.po new file mode 100644 index 000000000..f253adf31 --- /dev/null +++ b/distributing/index.po @@ -0,0 +1,289 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) 2001-2022, Python Software Foundation +# This file is distributed under the same license as the Python package. +# FIRST AUTHOR , YEAR. +# +# Translators: +# cdarlint , 2017 +# ww song , 2018 +# 刘士 , 2018 +# Freesand Leo , 2021 +# Alpha Du , 2022 +# +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: Python 3.9\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2022-11-04 14:34+0000\n" +"PO-Revision-Date: 2017-02-16 17:40+0000\n" +"Last-Translator: Alpha Du , 2022\n" +"Language-Team: Chinese (China) (https://www.transifex.com/python-doc/teams/5390/zh_CN/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: zh_CN\n" +"Plural-Forms: nplurals=1; plural=0;\n" + +#: ../../distributing/index.rst:5 +msgid "Distributing Python Modules" +msgstr "分发 Python 模块" + +#: ../../distributing/index.rst:0 +msgid "Email" +msgstr "电子邮箱" + +#: ../../distributing/index.rst:7 +msgid "distutils-sig@python.org" +msgstr "distutils-sig@python.org" + +#: ../../distributing/index.rst:10 +msgid "" +"As a popular open source development project, Python has an active " +"supporting community of contributors and users that also make their software" +" available for other Python developers to use under open source license " +"terms." +msgstr "" +"作为一个流行的开源开发项目,Python拥有一个活跃的贡献者和用户支持社区,这些社区也可以让他们的软件可供其他Python开发人员在开源许可条款下使用。" + +#: ../../distributing/index.rst:14 +msgid "" +"This allows Python users to share and collaborate effectively, benefiting " +"from the solutions others have already created to common (and sometimes even" +" rare!) problems, as well as potentially contributing their own solutions to" +" the common pool." +msgstr "这允许Python用户有效地共享和协作,从其他人已经创建的解决方案中受益于常见(有时甚至是罕见的)问题,以及可以提供他们自己的解决方案。" + +#: ../../distributing/index.rst:19 +msgid "" +"This guide covers the distribution part of the process. For a guide to " +"installing other Python projects, refer to the :ref:`installation guide " +"`." +msgstr "本指南涵盖了分发部分的流程。有关安装其他Python项目的指南,请参阅 :ref:`安装指南`。" + +#: ../../distributing/index.rst:25 +msgid "" +"For corporate and other institutional users, be aware that many " +"organisations have their own policies around using and contributing to open " +"source software. Please take such policies into account when making use of " +"the distribution and installation tools provided with Python." +msgstr "对于企业和其他机构用户,请注意许多组织都有自己的政策来使用和贡献开源软件。在使用Python提供的分发和安装工具时,请考虑这些政策。" + +#: ../../distributing/index.rst:32 +msgid "Key terms" +msgstr "关键术语" + +#: ../../distributing/index.rst:34 +msgid "" +"the `Python Package Index `__ is a public repository of " +"open source licensed packages made available for use by other Python users" +msgstr "" +"`Python Package Index `__ 是一个开源许可的软件包公共存储库,可供所有 Python " +"用户使用。" + +#: ../../distributing/index.rst:37 +msgid "" +"the `Python Packaging Authority `__ are the group of " +"developers and documentation authors responsible for the maintenance and " +"evolution of the standard packaging tools and the associated metadata and " +"file format standards. They maintain a variety of tools, documentation and " +"issue trackers on both `GitHub `__ and `Bitbucket " +"`__." +msgstr "" +"`Python Packaging Authority `__ " +"是负责标准打包工具以及相关元数据和文件格式标准维护与改进的开发人员和文档作者团队。 他们基于 `GitHub " +"`__ 和 `Bitbucket `__ " +"这两个平台维护着各种工具、文档和问题追踪系统。" + +#: ../../distributing/index.rst:44 +msgid "" +":mod:`distutils` is the original build and distribution system first added " +"to the Python standard library in 1998. While direct use of :mod:`distutils`" +" is being phased out, it still laid the foundation for the current packaging" +" and distribution infrastructure, and it not only remains part of the " +"standard library, but its name lives on in other ways (such as the name of " +"the mailing list used to coordinate Python packaging standards development)." +msgstr "" +":mod:`distutils` 是 1998 年首次添加到 Python 标准库的原始构建和分发系统。 虽然直接使用 :mod:`distutils`" +" 正在逐步淘汰,但它仍然为当前的打包和分发基础架构奠定了基础它不仅仍然是标准库的一部分,而且它的名称还以其他方式存在(例如用于协调 Python " +"打包标准开发的邮件列表的名称)。" + +#: ../../distributing/index.rst:51 +msgid "" +"`setuptools`_ is a (largely) drop-in replacement for :mod:`distutils` first " +"published in 2004. Its most notable addition over the unmodified " +":mod:`distutils` tools was the ability to declare dependencies on other " +"packages. It is currently recommended as a more regularly updated " +"alternative to :mod:`distutils` that offers consistent support for more " +"recent packaging standards across a wide range of Python versions." +msgstr "" +"`setuptools`_ (在很大程度上)是作为 :mod:`distutils` 的取代者,于 2004 年首次发布。 它对未经修改的 " +":mod:`distutils` 工具最重要的补充是能够声明对其他包的依赖。 目前它被推荐用来替代 " +":mod:`distutils`,其更新更为频繁,在更为多样的 Python 版本之上为最新的打包标准提供持续支持。" + +#: ../../distributing/index.rst:57 +msgid "" +"`wheel`_ (in this context) is a project that adds the ``bdist_wheel`` " +"command to :mod:`distutils`/`setuptools`_. This produces a cross platform " +"binary packaging format (called \"wheels\" or \"wheel files\" and defined in" +" :pep:`427`) that allows Python libraries, even those including binary " +"extensions, to be installed on a system without needing to be built locally." +msgstr "" +"`wheel`_ (在此上下文中)是一个将 ``bdist_wheel`` 命令添加到 :mod:`distutils`/`setuptools`_ " +"的项目。这产生了一个跨平台的二进制打包格式(称为“轮子”或“轮子文件”,并在 :pep:`427` " +"中定义),它允许在系统上安装Python库,甚至包括二进制扩展的库,而不需在本地进行构建。" + +#: ../../distributing/index.rst:68 +msgid "Open source licensing and collaboration" +msgstr "开源许可与协作" + +#: ../../distributing/index.rst:70 +msgid "" +"In most parts of the world, software is automatically covered by copyright. " +"This means that other developers require explicit permission to copy, use, " +"modify and redistribute the software." +msgstr "在世界上大多数地方,软件自动受版权保护。这意味着其他开发人员需要明确的权限来复制,使用,修改和重新分发软件。" + +#: ../../distributing/index.rst:74 +msgid "" +"Open source licensing is a way of explicitly granting such permission in a " +"relatively consistent way, allowing developers to share and collaborate " +"efficiently by making common solutions to various problems freely available." +" This leaves many developers free to spend more time focusing on the " +"problems that are relatively unique to their specific situation." +msgstr "" +"开源许可是一种以相对一致的方式明确授予此类权限的方式,允许开发人员通过为各种问题免费提供通用解决方案来有效地共享和协作。这使得许多开发人员可以将更多时间用于关注他们特定情况相对独特的问题。" + +#: ../../distributing/index.rst:80 +msgid "" +"The distribution tools provided with Python are designed to make it " +"reasonably straightforward for developers to make their own contributions " +"back to that common pool of software if they choose to do so." +msgstr "Python提供的分发工具旨在使开发人员选择开源时,可以合理地直接将其自己的贡献回馈到该公共软件池。" + +#: ../../distributing/index.rst:84 +msgid "" +"The same distribution tools can also be used to distribute software within " +"an organisation, regardless of whether that software is published as open " +"source software or not." +msgstr "无论该软件是否作为开源软件发布,相同的分发工具也可用于在组织内分发软件。" + +#: ../../distributing/index.rst:90 +msgid "Installing the tools" +msgstr "安装相关工具" + +#: ../../distributing/index.rst:92 +msgid "" +"The standard library does not include build tools that support modern Python" +" packaging standards, as the core development team has found that it is " +"important to have standard tools that work consistently, even on older " +"versions of Python." +msgstr "" +"标准库不包括支持现代Python打包标准的构建工具,因为核心开发团队已经发现,即使在旧版本的Python上,使用一致工作的标准工具也很重要。" + +#: ../../distributing/index.rst:97 +msgid "" +"The currently recommended build and distribution tools can be installed by " +"invoking the ``pip`` module at the command line::" +msgstr "可以通过在命令行调用 ``pip`` 模块来安装当前推荐的构建和分发工具::" + +#: ../../distributing/index.rst:104 +msgid "" +"For POSIX users (including macOS and Linux users), these instructions assume" +" the use of a :term:`virtual environment`." +msgstr "" +"对于 POSIX 用户(包括 macOS 和 Linux 用户),这些说明假定使用了 :term:`virtual environment` 。" + +#: ../../distributing/index.rst:107 +msgid "" +"For Windows users, these instructions assume that the option to adjust the " +"system PATH environment variable was selected when installing Python." +msgstr "对于Windows用户,这些说明假定在安装Python时选择了调整系统PATH环境变量的选项。" + +#: ../../distributing/index.rst:111 +msgid "" +"The Python Packaging User Guide includes more details on the `currently " +"recommended tools`_." +msgstr "Python 打包用户指南包含有关 `当前推荐工具的`_ 的更多详细信息。" + +#: ../../distributing/index.rst:123 +msgid "Reading the Python Packaging User Guide" +msgstr "阅读 Python 打包用户指南" + +#: ../../distributing/index.rst:125 +msgid "" +"The Python Packaging User Guide covers the various key steps and elements " +"involved in creating and publishing a project:" +msgstr "“Python 打包用户指南”介绍了创建和发布项目所涉及的各个关键步骤和元素:" + +#: ../../distributing/index.rst:128 +msgid "`Project structure`_" +msgstr "`项目的结构`_" + +#: ../../distributing/index.rst:129 +msgid "`Building and packaging the project`_" +msgstr "`项目的构建与打包`_" + +#: ../../distributing/index.rst:130 +msgid "`Uploading the project to the Python Package Index`_" +msgstr "`Uploading the project to the Python Package Index`_" + +#: ../../distributing/index.rst:131 +msgid "`The .pypirc file`_" +msgstr "`The .pypirc file`_" + +#: ../../distributing/index.rst:144 +msgid "How do I...?" +msgstr "我该如何...?" + +#: ../../distributing/index.rst:146 +msgid "These are quick answers or links for some common tasks." +msgstr "这是一些常见任务的快速解答或相关链接。" + +#: ../../distributing/index.rst:149 +msgid "... choose a name for my project?" +msgstr "...为我的项目选择一个名字?" + +#: ../../distributing/index.rst:151 +msgid "This isn't an easy topic, but here are a few tips:" +msgstr "这不是一个简单的主题,但这里有一些提示:" + +#: ../../distributing/index.rst:153 +msgid "check the Python Package Index to see if the name is already in use" +msgstr "检查 Python Package Index 以查看该名称是否已被使用" + +#: ../../distributing/index.rst:154 +msgid "" +"check popular hosting sites like GitHub, Bitbucket, etc to see if there is " +"already a project with that name" +msgstr "检查流行的托管网站如 GitHub,Bitbucket 等等,看是否已有一个该名称的项目" + +#: ../../distributing/index.rst:156 +msgid "check what comes up in a web search for the name you're considering" +msgstr "检查您正在考虑的名称在网络搜索中出现的内容" + +#: ../../distributing/index.rst:157 +msgid "" +"avoid particularly common words, especially ones with multiple meanings, as " +"they can make it difficult for users to find your software when searching " +"for it" +msgstr "避免使用特别常见的单词,尤其是具有多重含义的单词,因为它们会使用户在搜索时难以找到您的软件" + +#: ../../distributing/index.rst:163 +msgid "... create and distribute binary extensions?" +msgstr "...创建和分发二进制扩展?" + +#: ../../distributing/index.rst:165 +msgid "" +"This is actually quite a complex topic, with a variety of alternatives " +"available depending on exactly what you're aiming to achieve. See the Python" +" Packaging User Guide for more information and recommendations." +msgstr "这实际上是一个非常复杂的主题,根据您的目标,可以提供各种替代方案。 有关更多信息和建议,请参阅 Python 打包用户指南。" + +#: ../../distributing/index.rst:171 +msgid "" +"`Python Packaging User Guide: Binary Extensions " +"`__" +msgstr "" +"`Python 打包用户指南:二进制扩展 `__" diff --git a/distutils/_setuptools_disclaimer.po b/distutils/_setuptools_disclaimer.po new file mode 100644 index 000000000..b1fe17deb --- /dev/null +++ b/distutils/_setuptools_disclaimer.po @@ -0,0 +1,32 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) 2001-2022, Python Software Foundation +# This file is distributed under the same license as the Python package. +# FIRST AUTHOR , YEAR. +# +# Translators: +# Kelly Hwong , 2019 +# +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: Python 3.9\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2022-11-04 14:34+0000\n" +"PO-Revision-Date: 2019-09-01 14:28+0000\n" +"Last-Translator: Kelly Hwong , 2019\n" +"Language-Team: Chinese (China) (https://www.transifex.com/python-doc/teams/5390/zh_CN/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: zh_CN\n" +"Plural-Forms: nplurals=1; plural=0;\n" + +#: ../../distutils/_setuptools_disclaimer.rst:3 +msgid "" +"This document is being retained solely until the ``setuptools`` " +"documentation at https://setuptools.readthedocs.io/en/latest/setuptools.html" +" independently covers all of the relevant information currently included " +"here." +msgstr "" +"这篇文档只有在 https://setuptools.readthedocs.io/en/latest/setuptools.html 上的 " +"``setuptools`` 文档独立涵盖此处包含的所有相关信息之前,才会单独保留。" diff --git a/distutils/apiref.po b/distutils/apiref.po new file mode 100644 index 000000000..d938bf734 --- /dev/null +++ b/distutils/apiref.po @@ -0,0 +1,2548 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) 2001-2024, Python Software Foundation +# This file is distributed under the same license as the Python package. +# FIRST AUTHOR , YEAR. +# +# Translators: +# 叶浚安 , 2019 +# sgqy , 2019 +# ppcfish , 2019 +# skylight , 2019 +# Kelly Hwong , 2019 +# Freesand Leo , 2023 +# Rafael Fontenelle , 2024 +# +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: Python 3.9\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2024-04-19 21:47+0000\n" +"PO-Revision-Date: 2017-02-16 17:40+0000\n" +"Last-Translator: Rafael Fontenelle , 2024\n" +"Language-Team: Chinese (China) (https://app.transifex.com/python-doc/teams/5390/zh_CN/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: zh_CN\n" +"Plural-Forms: nplurals=1; plural=0;\n" + +#: ../../distutils/apiref.rst:5 +msgid "API Reference" +msgstr "API参考引用" + +#: ../../distutils/apiref.rst:11 +msgid "`New and changed setup.py arguments in setuptools`_" +msgstr "`New and changed setup.py arguments in setuptools`_" + +#: ../../distutils/apiref.rst:10 +msgid "" +"The ``setuptools`` project adds new capabilities to the ``setup`` function " +"and other APIs, makes the API consistent across different Python versions, " +"and is hence recommended over using ``distutils`` directly." +msgstr "" +"``setuptools`` 项目为 ``setup`` 函数和其他 API 添加了新的功能,使得 API 在不同 Python " +"版本间保持一致,因此推荐以它来取代直接使用 ``distutils``。" + +#: ../../distutils/_setuptools_disclaimer.rst:3 +msgid "" +"This document is being retained solely until the ``setuptools`` " +"documentation at https://setuptools.readthedocs.io/en/latest/setuptools.html" +" independently covers all of the relevant information currently included " +"here." +msgstr "" +"这篇文档是历史遗留文档,在 https://setuptools.readthedocs.io/en/latest/setuptools.html 上的" +" ``setuptools`` 文档独立涵盖此处包含的所有相关信息之后,将不再单独作为正式文档保留。" + +#: ../../distutils/apiref.rst:19 +msgid ":mod:`distutils.core` --- Core Distutils functionality" +msgstr ":mod:`distutils.core` --- 分发包功能的核心" + +#: ../../distutils/apiref.rst:25 +msgid "" +"The :mod:`distutils.core` module is the only module that needs to be " +"installed to use the Distutils. It provides the :func:`setup` (which is " +"called from the setup script). Indirectly provides the " +":class:`distutils.dist.Distribution` and :class:`distutils.cmd.Command` " +"class." +msgstr "" +"The :mod:`distutils.core` 是为了使用 Distutils 工具唯一要安装的模块。它提供函数 :func:`setup` " +"(该函数被 setup 脚本调用)。间接提供了类 :class:`distutils.dist.Distribution` 和 " +":class:`distutils.cmd.Command`." + +#: ../../distutils/apiref.rst:33 +msgid "" +"The basic do-everything function that does most everything you could ever " +"ask for from a Distutils method." +msgstr "基本的包办一切的函数,它完成了您可以从Distutils方法中请求的大部分事情。" + +#: ../../distutils/apiref.rst:36 +msgid "" +"The setup function takes a large number of arguments. These are laid out in " +"the following table." +msgstr "setup函数接受大量参数。这些都列在下表中。" + +#: ../../distutils/apiref.rst:42 ../../distutils/apiref.rst:185 +msgid "argument name" +msgstr "参数名称" + +#: ../../distutils/apiref.rst:42 ../../distutils/apiref.rst:143 +#: ../../distutils/apiref.rst:185 +msgid "value" +msgstr "value" + +#: ../../distutils/apiref.rst:42 ../../distutils/apiref.rst:185 +msgid "type" +msgstr "type" + +#: ../../distutils/apiref.rst:44 ../../distutils/apiref.rst:187 +msgid "*name*" +msgstr "*name*" + +#: ../../distutils/apiref.rst:44 +msgid "The name of the package" +msgstr "包的名字" + +#: ../../distutils/apiref.rst:44 ../../distutils/apiref.rst:46 +#: ../../distutils/apiref.rst:50 ../../distutils/apiref.rst:53 +#: ../../distutils/apiref.rst:56 ../../distutils/apiref.rst:58 +#: ../../distutils/apiref.rst:61 ../../distutils/apiref.rst:68 +#: ../../distutils/apiref.rst:72 ../../distutils/apiref.rst:75 +#: ../../distutils/apiref.rst:96 ../../distutils/apiref.rst:106 +#: ../../distutils/apiref.rst:187 ../../distutils/apiref.rst:278 +msgid "a string" +msgstr "字符串" + +#: ../../distutils/apiref.rst:46 +msgid "*version*" +msgstr "*version*" + +#: ../../distutils/apiref.rst:46 +msgid "The version number of the package; see :mod:`distutils.version`" +msgstr "包的版本号;参见 :mod:`distutils.version`" + +#: ../../distutils/apiref.rst:50 +msgid "*description*" +msgstr "*description*" + +#: ../../distutils/apiref.rst:50 +msgid "A single line describing the package" +msgstr "单行的包的描述" + +#: ../../distutils/apiref.rst:53 +msgid "*long_description*" +msgstr "*long_description*" + +#: ../../distutils/apiref.rst:53 +msgid "Longer description of the package" +msgstr "更长的包描述" + +#: ../../distutils/apiref.rst:56 +msgid "*author*" +msgstr "*author*" + +#: ../../distutils/apiref.rst:56 +msgid "The name of the package author" +msgstr "包的作者" + +#: ../../distutils/apiref.rst:58 +msgid "*author_email*" +msgstr "*author_email*" + +#: ../../distutils/apiref.rst:58 +msgid "The email address of the package author" +msgstr "包的作者的电子邮件" + +#: ../../distutils/apiref.rst:61 +msgid "*maintainer*" +msgstr "*maintainer*" + +#: ../../distutils/apiref.rst:61 +msgid "" +"The name of the current maintainer, if different from the author. Note that " +"if the maintainer is provided, distutils will use it as the author in " +":file:`PKG-INFO`" +msgstr "" +"当前维护者的名字,如果与作者不同的话。 请注意,如果提供了维护者,distutils 将使用它作为 :file:`PKG-INFO` 中的作者。" + +#: ../../distutils/apiref.rst:68 +msgid "*maintainer_email*" +msgstr "*maintainer_email*" + +#: ../../distutils/apiref.rst:68 +msgid "" +"The email address of the current maintainer, if different from the author" +msgstr "当前维护者的电子邮件地址(如果与作者不同)" + +#: ../../distutils/apiref.rst:72 +msgid "*url*" +msgstr "*url*" + +#: ../../distutils/apiref.rst:72 +msgid "A URL for the package (homepage)" +msgstr "包的URL(主页)" + +#: ../../distutils/apiref.rst:75 +msgid "*download_url*" +msgstr "*download_url*" + +#: ../../distutils/apiref.rst:75 +msgid "A URL to download the package" +msgstr "包的下载地址" + +#: ../../distutils/apiref.rst:77 +msgid "*packages*" +msgstr "*packages*" + +#: ../../distutils/apiref.rst:77 +msgid "A list of Python packages that distutils will manipulate" +msgstr "distutils将操作的Python软件包的列表" + +#: ../../distutils/apiref.rst:77 ../../distutils/apiref.rst:80 +#: ../../distutils/apiref.rst:83 ../../distutils/apiref.rst:100 +#: ../../distutils/apiref.rst:193 ../../distutils/apiref.rst:207 +#: ../../distutils/apiref.rst:223 ../../distutils/apiref.rst:226 +#: ../../distutils/apiref.rst:230 ../../distutils/apiref.rst:234 +#: ../../distutils/apiref.rst:240 ../../distutils/apiref.rst:247 +#: ../../distutils/apiref.rst:258 ../../distutils/apiref.rst:267 +#: ../../distutils/apiref.rst:275 +msgid "a list of strings" +msgstr "字符串列表" + +#: ../../distutils/apiref.rst:80 +msgid "*py_modules*" +msgstr "*py_modules*" + +#: ../../distutils/apiref.rst:80 +msgid "A list of Python modules that distutils will manipulate" +msgstr "distutils 会操作的 Python 模块列表" + +#: ../../distutils/apiref.rst:83 +msgid "*scripts*" +msgstr "*scripts*" + +#: ../../distutils/apiref.rst:83 +msgid "A list of standalone script files to be built and installed" +msgstr "要构建和安装的独立脚本文件的列表" + +#: ../../distutils/apiref.rst:87 +msgid "*ext_modules*" +msgstr "*ext_modules*" + +#: ../../distutils/apiref.rst:87 +msgid "A list of Python extensions to be built" +msgstr "要构建的 Python 扩展的列表" + +#: ../../distutils/apiref.rst:87 +msgid "a list of instances of :class:`distutils.core.Extension`" +msgstr "类 :class:`distutils.core.Extension` 的实例的列表" + +#: ../../distutils/apiref.rst:90 +msgid "*classifiers*" +msgstr "*classifiers*" + +#: ../../distutils/apiref.rst:90 +msgid "A list of categories for the package" +msgstr "包的类别列表" + +#: ../../distutils/apiref.rst:90 +msgid "" +"a list of strings; valid classifiers are listed on `PyPI " +"`_." +msgstr "一个字符串列表;可用的分类器已在 `PyPI `_ 上列出。" + +#: ../../distutils/apiref.rst:93 +msgid "*distclass*" +msgstr "*distclass*" + +#: ../../distutils/apiref.rst:93 +msgid "the :class:`Distribution` class to use" +msgstr "要使用的类 :class:`Distribution` 类" + +#: ../../distutils/apiref.rst:93 +msgid "a subclass of :class:`distutils.core.Distribution`" +msgstr ":class:`distutils.core.Distribution` 的子类" + +#: ../../distutils/apiref.rst:96 +msgid "*script_name*" +msgstr "*script_name*" + +#: ../../distutils/apiref.rst:96 +msgid "The name of the setup.py script - defaults to ``sys.argv[0]``" +msgstr "setup.py 脚本名称 —— 默认为 ``sys.argv[0]``" + +#: ../../distutils/apiref.rst:100 +msgid "*script_args*" +msgstr "*script_args*" + +#: ../../distutils/apiref.rst:100 +msgid "Arguments to supply to the setup script" +msgstr "提供给安装脚本的参数" + +#: ../../distutils/apiref.rst:103 +msgid "*options*" +msgstr "*options*" + +#: ../../distutils/apiref.rst:103 +msgid "default options for the setup script" +msgstr "安装脚本的默认选项" + +#: ../../distutils/apiref.rst:103 ../../distutils/apiref.rst:113 +#: ../../distutils/apiref.rst:119 +msgid "a dictionary" +msgstr "字典" + +#: ../../distutils/apiref.rst:106 +msgid "*license*" +msgstr "*license*" + +#: ../../distutils/apiref.rst:106 +msgid "The license for the package" +msgstr "包的许可证" + +#: ../../distutils/apiref.rst:108 +msgid "*keywords*" +msgstr "*keywords*" + +#: ../../distutils/apiref.rst:108 +msgid "Descriptive meta-data, see :pep:`314`" +msgstr "描述性的元数据,参见 :pep:`314`" + +#: ../../distutils/apiref.rst:108 ../../distutils/apiref.rst:111 +msgid "a list of strings or a comma-separated string" +msgstr "字符串列表或逗号分隔的字符串" + +#: ../../distutils/apiref.rst:111 +msgid "*platforms*" +msgstr "*platforms*" + +#: ../../distutils/apiref.rst:113 +msgid "*cmdclass*" +msgstr "*cmdclass*" + +#: ../../distutils/apiref.rst:113 +msgid "A mapping of command names to :class:`Command` subclasses" +msgstr "一个从命令名称到 :class:`Command` 子类的映射" + +#: ../../distutils/apiref.rst:116 +msgid "*data_files*" +msgstr "*data_files*" + +#: ../../distutils/apiref.rst:116 +msgid "A list of data files to install" +msgstr "要安装的数据文件列表" + +#: ../../distutils/apiref.rst:116 +msgid "a list" +msgstr "列表" + +#: ../../distutils/apiref.rst:119 +msgid "*package_dir*" +msgstr "*package_dir*" + +#: ../../distutils/apiref.rst:119 +msgid "A mapping of package to directory names" +msgstr "包到目录名的映射" + +#: ../../distutils/apiref.rst:127 +msgid "" +"Run a setup script in a somewhat controlled environment, and return the " +":class:`distutils.dist.Distribution` instance that drives things. This is " +"useful if you need to find out the distribution meta-data (passed as " +"keyword args from *script* to :func:`setup`), or the contents of the config" +" files or command-line." +msgstr "" +"在某种程度上受控制的环境中运行一个安装脚本,并返回驱动程序的 :class:`distutils.dist.Distribution` 实例。 " +"如果你需要查找分发元数据 (作为关键字 args 从 *script* 传递到 :func:`setup`),或者配置文件或命令行的内容,这将非常有用。" + +#: ../../distutils/apiref.rst:133 +msgid "" +"*script_name* is a file that will be read and run with :func:`exec`. " +"``sys.argv[0]`` will be replaced with *script* for the duration of the call." +" *script_args* is a list of strings; if supplied, ``sys.argv[1:]`` will be " +"replaced by *script_args* for the duration of the call." +msgstr "" +"*script_name* 是一个将使用 :func:`exec` 读取和运行的文件。在调用期间,``sys.argv[0]`` 将被替换为 " +"*script*。 *script_args* 是一个字符串列表;如果提供了 ``sys.argv[1:]``,则在调用期间将被 " +"*script_args* 替换。" + +#: ../../distutils/apiref.rst:138 +msgid "" +"*stop_after* tells :func:`setup` when to stop processing; possible values:" +msgstr "*stop_after* 告诉 :func:`setup` 何时停止处理;可能的值有:" + +#: ../../distutils/apiref.rst:143 ../../distutils/apiref.rst:562 +#: ../../distutils/apiref.rst:1601 +msgid "description" +msgstr "description" + +#: ../../distutils/apiref.rst:145 +msgid "*init*" +msgstr "*init*" + +#: ../../distutils/apiref.rst:145 +msgid "" +"Stop after the :class:`Distribution` instance has been created and " +"populated with the keyword arguments to :func:`setup`" +msgstr "" + +#: ../../distutils/apiref.rst:149 +msgid "*config*" +msgstr "*config*" + +#: ../../distutils/apiref.rst:149 +msgid "" +"Stop after config files have been parsed (and their data stored in the " +":class:`Distribution` instance)" +msgstr "" + +#: ../../distutils/apiref.rst:153 +msgid "*commandline*" +msgstr "*commandline*" + +#: ../../distutils/apiref.rst:153 +msgid "" +"Stop after the command-line (``sys.argv[1:]`` or *script_args*) have been " +"parsed (and the data stored in the :class:`Distribution` instance.)" +msgstr "" + +#: ../../distutils/apiref.rst:158 +msgid "*run*" +msgstr "*run*" + +#: ../../distutils/apiref.rst:158 +msgid "" +"Stop after all commands have been run (the same as if :func:`setup` had " +"been called in the usual way). This is the default value." +msgstr "" + +#: ../../distutils/apiref.rst:164 +msgid "" +"In addition, the :mod:`distutils.core` module exposed a number of classes " +"that live elsewhere." +msgstr "" + +#: ../../distutils/apiref.rst:167 +msgid "" +":class:`~distutils.extension.Extension` from :mod:`distutils.extension`" +msgstr "" +"来自 :mod:`distutils.extension` 的 :class:`~distutils.extension.Extension`" + +#: ../../distutils/apiref.rst:169 +msgid ":class:`~distutils.cmd.Command` from :mod:`distutils.cmd`" +msgstr "来自 :mod:`distutils.cmd` 的 :class:`~distutils.cmd.Command`" + +#: ../../distutils/apiref.rst:171 +msgid ":class:`~distutils.dist.Distribution` from :mod:`distutils.dist`" +msgstr "" + +#: ../../distutils/apiref.rst:173 +msgid "" +"A short description of each of these follows, but see the relevant module " +"for the full reference." +msgstr "" + +#: ../../distutils/apiref.rst:179 +msgid "" +"The Extension class describes a single C or C++ extension module in a setup " +"script. It accepts the following keyword arguments in its constructor:" +msgstr "" + +#: ../../distutils/apiref.rst:187 +msgid "" +"the full name of the extension, including any packages --- ie. *not* a " +"filename or pathname, but Python dotted name" +msgstr "" + +#: ../../distutils/apiref.rst:193 +msgid "*sources*" +msgstr "*sources*" + +#: ../../distutils/apiref.rst:193 +msgid "" +"list of source filenames, relative to the distribution root (where the setup" +" script lives), in Unix form (slash-separated) for portability. Source files" +" may be C, C++, SWIG (.i), platform-specific resource files, or whatever " +"else is recognized by the :command:`build_ext` command as source for a " +"Python extension." +msgstr "" + +#: ../../distutils/apiref.rst:207 +msgid "*include_dirs*" +msgstr "*include_dirs*" + +#: ../../distutils/apiref.rst:207 +msgid "" +"list of directories to search for C/C++ header files (in Unix form for " +"portability)" +msgstr "" + +#: ../../distutils/apiref.rst:211 +msgid "*define_macros*" +msgstr "*define_macros*" + +#: ../../distutils/apiref.rst:211 +msgid "" +"list of macros to define; each macro is defined using a 2-tuple ``(name, " +"value)``, where *value* is either the string to define it to or ``None`` to " +"define it without a particular value (equivalent of ``#define FOO`` in " +"source or :option:`!-DFOO` on Unix C compiler command line)" +msgstr "" + +#: ../../distutils/apiref.rst:211 +msgid "a list of tuples" +msgstr "元组列表" + +#: ../../distutils/apiref.rst:223 +msgid "*undef_macros*" +msgstr "*undef_macros*" + +#: ../../distutils/apiref.rst:223 +msgid "list of macros to undefine explicitly" +msgstr "要明确取消定义的宏列表" + +#: ../../distutils/apiref.rst:226 +msgid "*library_dirs*" +msgstr "*library_dirs*" + +#: ../../distutils/apiref.rst:226 +msgid "list of directories to search for C/C++ libraries at link time" +msgstr "" + +#: ../../distutils/apiref.rst:230 +msgid "*libraries*" +msgstr "*libraries*" + +#: ../../distutils/apiref.rst:230 +msgid "list of library names (not filenames or paths) to link against" +msgstr "要链接的库名列表(不是文件名或路径)" + +#: ../../distutils/apiref.rst:234 +msgid "*runtime_library_dirs*" +msgstr "*runtime_library_dirs*" + +#: ../../distutils/apiref.rst:234 +msgid "" +"list of directories to search for C/C++ libraries at run time (for shared " +"extensions, this is when the extension is loaded)" +msgstr "" + +#: ../../distutils/apiref.rst:240 +msgid "*extra_objects*" +msgstr "*extra_objects*" + +#: ../../distutils/apiref.rst:240 +msgid "" +"list of extra files to link with (eg. object files not implied by 'sources'," +" static library that must be explicitly specified, binary resource files, " +"etc.)" +msgstr "" + +#: ../../distutils/apiref.rst:247 +msgid "*extra_compile_args*" +msgstr "*extra_compile_args*" + +#: ../../distutils/apiref.rst:247 +msgid "" +"any extra platform- and compiler-specific information to use when compiling " +"the source files in 'sources'. For platforms and compilers where a command " +"line makes sense, this is typically a list of command-line arguments, but " +"for other platforms it could be anything." +msgstr "" + +#: ../../distutils/apiref.rst:258 +msgid "*extra_link_args*" +msgstr "*extra_link_args*" + +#: ../../distutils/apiref.rst:258 +msgid "" +"any extra platform- and compiler-specific information to use when linking " +"object files together to create the extension (or to create a new static " +"Python interpreter). Similar interpretation as for 'extra_compile_args'." +msgstr "" + +#: ../../distutils/apiref.rst:267 +msgid "*export_symbols*" +msgstr "*export_symbols*" + +#: ../../distutils/apiref.rst:267 +msgid "" +"list of symbols to be exported from a shared extension. Not used on all " +"platforms, and not generally necessary for Python extensions, which " +"typically export exactly one symbol: ``init`` + extension_name." +msgstr "" + +#: ../../distutils/apiref.rst:275 +msgid "*depends*" +msgstr "*depends*" + +#: ../../distutils/apiref.rst:275 +msgid "list of files that the extension depends on" +msgstr "扩展名依赖的文件列表" + +#: ../../distutils/apiref.rst:278 +msgid "*language*" +msgstr "*language*" + +#: ../../distutils/apiref.rst:278 +msgid "" +"extension language (i.e. ``'c'``, ``'c++'``, ``'objc'``). Will be detected " +"from the source extensions if not provided." +msgstr "" + +#: ../../distutils/apiref.rst:284 +msgid "*optional*" +msgstr "*optional*" + +#: ../../distutils/apiref.rst:284 +msgid "" +"specifies that a build failure in the extension should not abort the build " +"process, but simply skip the extension." +msgstr "指定扩展中的构建失败不应中止构建过程,而只是跳过扩展。" + +#: ../../distutils/apiref.rst:284 +msgid "a boolean" +msgstr "布尔" + +#: ../../distutils/apiref.rst:292 +msgid "" +"On Unix, C extensions are no longer linked to libpython except on Android " +"and Cygwin." +msgstr "" + +#: ../../distutils/apiref.rst:298 +msgid "" +"A :class:`Distribution` describes how to build, install and package up a " +"Python software package." +msgstr "" + +#: ../../distutils/apiref.rst:301 +msgid "" +"See the :func:`setup` function for a list of keyword arguments accepted by " +"the Distribution constructor. :func:`setup` creates a Distribution instance." +msgstr "" + +#: ../../distutils/apiref.rst:304 +msgid "" +":class:`~distutils.core.Distribution` now warns if ``classifiers``, " +"``keywords`` and ``platforms`` fields are not specified as a list or a " +"string." +msgstr "" + +#: ../../distutils/apiref.rst:311 +msgid "" +"A :class:`Command` class (or rather, an instance of one of its subclasses) " +"implement a single distutils command." +msgstr "" + +#: ../../distutils/apiref.rst:316 +msgid ":mod:`distutils.ccompiler` --- CCompiler base class" +msgstr ":mod:`distutils.ccompiler` --- CCompiler基类" + +#: ../../distutils/apiref.rst:322 +msgid "" +"This module provides the abstract base class for the :class:`CCompiler` " +"classes. A :class:`CCompiler` instance can be used for all the compile and" +" link steps needed to build a single project. Methods are provided to set " +"options for the compiler --- macro definitions, include directories, link " +"path, libraries and the like." +msgstr "" + +#: ../../distutils/apiref.rst:328 +msgid "This module provides the following functions." +msgstr "" + +#: ../../distutils/apiref.rst:333 +msgid "" +"Generate linker options for searching library directories and linking with " +"specific libraries. *libraries* and *library_dirs* are, respectively, lists" +" of library names (not filenames!) and search directories. Returns a list " +"of command-line options suitable for use with some compiler (depending on " +"the two format strings passed in)." +msgstr "" + +#: ../../distutils/apiref.rst:342 +msgid "" +"Generate C pre-processor options (:option:`!-D`, :option:`!-U`, " +":option:`!-I`) as used by at least two types of compilers: the typical Unix " +"compiler and Visual C++. *macros* is the usual thing, a list of 1- or " +"2-tuples, where ``(name,)`` means undefine (:option:`!-U`) macro *name*, and" +" ``(name, value)`` means define (:option:`!-D`) macro *name* to *value*. " +"*include_dirs* is just a list of directory names to be added to the header " +"file search path (:option:`!-I`). Returns a list of command-line options " +"suitable for either Unix compilers or Visual C++." +msgstr "" + +#: ../../distutils/apiref.rst:354 +msgid "Determine the default compiler to use for the given platform." +msgstr "" + +#: ../../distutils/apiref.rst:356 +msgid "" +"*osname* should be one of the standard Python OS names (i.e. the ones " +"returned by ``os.name``) and *platform* the common value returned by " +"``sys.platform`` for the platform in question." +msgstr "" + +#: ../../distutils/apiref.rst:360 +msgid "" +"The default values are ``os.name`` and ``sys.platform`` in case the " +"parameters are not given." +msgstr "" + +#: ../../distutils/apiref.rst:366 +msgid "" +"Factory function to generate an instance of some CCompiler subclass for the " +"supplied platform/compiler combination. *plat* defaults to ``os.name`` (eg. " +"``'posix'``, ``'nt'``), and *compiler* defaults to the default compiler for" +" that platform. Currently only ``'posix'`` and ``'nt'`` are supported, and " +"the default compilers are \"traditional Unix interface\" " +"(:class:`UnixCCompiler` class) and Visual C++ (:class:`MSVCCompiler` class)." +" Note that it's perfectly possible to ask for a Unix compiler object under " +"Windows, and a Microsoft compiler object under Unix---if you supply a value " +"for *compiler*, *plat* is ignored." +msgstr "" + +#: ../../distutils/apiref.rst:382 +msgid "" +"Print list of available compilers (used by the :option:`!--help-compiler` " +"options to :command:`build`, :command:`build_ext`, :command:`build_clib`)." +msgstr "" + +#: ../../distutils/apiref.rst:388 +msgid "" +"The abstract base class :class:`CCompiler` defines the interface that must " +"be implemented by real compiler classes. The class also has some utility " +"methods used by several compiler classes." +msgstr "" + +#: ../../distutils/apiref.rst:392 +msgid "" +"The basic idea behind a compiler abstraction class is that each instance can" +" be used for all the compile/link steps in building a single project. Thus," +" attributes common to all of those compile and link steps --- include " +"directories, macros to define, libraries to link against, etc. --- are " +"attributes of the compiler instance. To allow for variability in how " +"individual files are treated, most of those attributes may be varied on a " +"per-compilation or per-link basis." +msgstr "" + +#: ../../distutils/apiref.rst:400 +msgid "" +"The constructor for each subclass creates an instance of the Compiler " +"object. Flags are *verbose* (show verbose output), *dry_run* (don't actually" +" execute the steps) and *force* (rebuild everything, regardless of " +"dependencies). All of these flags default to ``0`` (off). Note that you " +"probably don't want to instantiate :class:`CCompiler` or one of its " +"subclasses directly - use the :func:`distutils.CCompiler.new_compiler` " +"factory function instead." +msgstr "" + +#: ../../distutils/apiref.rst:407 +msgid "" +"The following methods allow you to manually alter compiler options for the " +"instance of the Compiler class." +msgstr "" + +#: ../../distutils/apiref.rst:413 +msgid "" +"Add *dir* to the list of directories that will be searched for header files." +" The compiler is instructed to search directories in the order in which they" +" are supplied by successive calls to :meth:`add_include_dir`." +msgstr "" + +#: ../../distutils/apiref.rst:420 +msgid "" +"Set the list of directories that will be searched to *dirs* (a list of " +"strings). Overrides any preceding calls to :meth:`add_include_dir`; " +"subsequent calls to :meth:`add_include_dir` add to the list passed to " +":meth:`set_include_dirs`. This does not affect any list of standard include " +"directories that the compiler may search by default." +msgstr "" + +#: ../../distutils/apiref.rst:429 +msgid "" +"Add *libname* to the list of libraries that will be included in all links " +"driven by this compiler object. Note that *libname* should \\*not\\* be the" +" name of a file containing a library, but the name of the library itself: " +"the actual filename will be inferred by the linker, the compiler, or the " +"compiler class (depending on the platform)." +msgstr "" + +#: ../../distutils/apiref.rst:435 +msgid "" +"The linker will be instructed to link against libraries in the order they " +"were supplied to :meth:`add_library` and/or :meth:`set_libraries`. It is " +"perfectly valid to duplicate library names; the linker will be instructed to" +" link against libraries as many times as they are mentioned." +msgstr "" + +#: ../../distutils/apiref.rst:443 +msgid "" +"Set the list of libraries to be included in all links driven by this " +"compiler object to *libnames* (a list of strings). This does not affect any" +" standard system libraries that the linker may include by default." +msgstr "" + +#: ../../distutils/apiref.rst:450 +msgid "" +"Add *dir* to the list of directories that will be searched for libraries " +"specified to :meth:`add_library` and :meth:`set_libraries`. The linker will" +" be instructed to search for libraries in the order they are supplied to " +":meth:`add_library_dir` and/or :meth:`set_library_dirs`." +msgstr "" + +#: ../../distutils/apiref.rst:458 +msgid "" +"Set the list of library search directories to *dirs* (a list of strings). " +"This does not affect any standard library search path that the linker may " +"search by default." +msgstr "" + +#: ../../distutils/apiref.rst:465 +msgid "" +"Add *dir* to the list of directories that will be searched for shared " +"libraries at runtime." +msgstr "" + +#: ../../distutils/apiref.rst:471 +msgid "" +"Set the list of directories to search for shared libraries at runtime to " +"*dirs* (a list of strings). This does not affect any standard search path " +"that the runtime linker may search by default." +msgstr "" + +#: ../../distutils/apiref.rst:478 +msgid "" +"Define a preprocessor macro for all compilations driven by this compiler " +"object. The optional parameter *value* should be a string; if it is not " +"supplied, then the macro will be defined without an explicit value and the " +"exact outcome depends on the compiler used." +msgstr "" + +#: ../../distutils/apiref.rst:488 +msgid "" +"Undefine a preprocessor macro for all compilations driven by this compiler " +"object. If the same macro is defined by :meth:`define_macro` and undefined " +"by :meth:`undefine_macro` the last call takes precedence (including multiple" +" redefinitions or undefinitions). If the macro is redefined/undefined on a " +"per-compilation basis (ie. in the call to :meth:`compile`), then that takes " +"precedence." +msgstr "" + +#: ../../distutils/apiref.rst:498 +msgid "" +"Add *object* to the list of object files (or analogues, such as explicitly " +"named library files or the output of \"resource compilers\") to be included " +"in every link driven by this compiler object." +msgstr "" + +#: ../../distutils/apiref.rst:505 +msgid "" +"Set the list of object files (or analogues) to be included in every link to " +"*objects*. This does not affect any standard object files that the linker " +"may include by default (such as system libraries)." +msgstr "" + +#: ../../distutils/apiref.rst:509 +msgid "" +"The following methods implement methods for autodetection of compiler " +"options, providing some functionality similar to GNU :program:`autoconf`." +msgstr "" + +#: ../../distutils/apiref.rst:515 +msgid "" +"Detect the language of a given file, or list of files. Uses the instance " +"attributes :attr:`language_map` (a dictionary), and :attr:`language_order` " +"(a list) to do the job." +msgstr "" + +#: ../../distutils/apiref.rst:522 +msgid "" +"Search the specified list of directories for a static or shared library file" +" *lib* and return the full path to that file. If *debug* is true, look for " +"a debugging version (if that makes sense on the current platform). Return " +"``None`` if *lib* wasn't found in any of the specified directories." +msgstr "" + +#: ../../distutils/apiref.rst:530 +msgid "" +"Return a boolean indicating whether *funcname* is supported on the current " +"platform. The optional arguments can be used to augment the compilation " +"environment by providing additional include files and paths and libraries " +"and paths." +msgstr "" + +#: ../../distutils/apiref.rst:538 +msgid "" +"Return the compiler option to add *dir* to the list of directories searched " +"for libraries." +msgstr "" + +#: ../../distutils/apiref.rst:544 +msgid "" +"Return the compiler option to add *lib* to the list of libraries linked into" +" the shared library or executable." +msgstr "" + +#: ../../distutils/apiref.rst:550 +msgid "" +"Return the compiler option to add *dir* to the list of directories searched " +"for runtime libraries." +msgstr "" + +#: ../../distutils/apiref.rst:556 +msgid "" +"Define the executables (and options for them) that will be run to perform " +"the various stages of compilation. The exact set of executables that may be" +" specified here depends on the compiler class (via the 'executables' class " +"attribute), but most will have:" +msgstr "" + +#: ../../distutils/apiref.rst:562 +msgid "attribute" +msgstr "attribute -- 属性" + +#: ../../distutils/apiref.rst:564 +msgid "*compiler*" +msgstr "*compiler*" + +#: ../../distutils/apiref.rst:564 +msgid "the C/C++ compiler" +msgstr "C/C++ 编译器" + +#: ../../distutils/apiref.rst:566 +msgid "*linker_so*" +msgstr "*linker_so*" + +#: ../../distutils/apiref.rst:566 +msgid "linker used to create shared objects and libraries" +msgstr "用于创建共享对象和库的链接器" + +#: ../../distutils/apiref.rst:569 +msgid "*linker_exe*" +msgstr "*linker_exe*" + +#: ../../distutils/apiref.rst:569 +msgid "linker used to create binary executables" +msgstr "用于创建二进制可执行文件的链接器" + +#: ../../distutils/apiref.rst:571 +msgid "*archiver*" +msgstr "*archiver*" + +#: ../../distutils/apiref.rst:571 +msgid "static library creator" +msgstr "静态库创建者" + +#: ../../distutils/apiref.rst:574 +msgid "" +"On platforms with a command-line (Unix, DOS/Windows), each of these is a " +"string that will be split into executable name and (optional) list of " +"arguments. (Splitting the string is done similarly to how Unix shells " +"operate: words are delimited by spaces, but quotes and backslashes can " +"override this. See :func:`distutils.util.split_quoted`.)" +msgstr "" + +#: ../../distutils/apiref.rst:580 +msgid "The following methods invoke stages in the build process." +msgstr "" + +#: ../../distutils/apiref.rst:585 +msgid "" +"Compile one or more source files. Generates object files (e.g. transforms a" +" :file:`.c` file to a :file:`.o` file.)" +msgstr "" + +#: ../../distutils/apiref.rst:588 +msgid "" +"*sources* must be a list of filenames, most likely C/C++ files, but in " +"reality anything that can be handled by a particular compiler and compiler " +"class (eg. :class:`MSVCCompiler` can handle resource files in *sources*). " +"Return a list of object filenames, one per source filename in *sources*. " +"Depending on the implementation, not all source files will necessarily be " +"compiled, but all corresponding object filenames will be returned." +msgstr "" + +#: ../../distutils/apiref.rst:595 +msgid "" +"If *output_dir* is given, object files will be put under it, while retaining" +" their original path component. That is, :file:`foo/bar.c` normally " +"compiles to :file:`foo/bar.o` (for a Unix implementation); if *output_dir* " +"is *build*, then it would compile to :file:`build/foo/bar.o`." +msgstr "" + +#: ../../distutils/apiref.rst:600 +msgid "" +"*macros*, if given, must be a list of macro definitions. A macro definition" +" is either a ``(name, value)`` 2-tuple or a ``(name,)`` 1-tuple. The former " +"defines a macro; if the value is ``None``, the macro is defined without an " +"explicit value. The 1-tuple case undefines a macro. Later " +"definitions/redefinitions/undefinitions take precedence." +msgstr "" + +#: ../../distutils/apiref.rst:606 +msgid "" +"*include_dirs*, if given, must be a list of strings, the directories to add " +"to the default include file search path for this compilation only." +msgstr "" + +#: ../../distutils/apiref.rst:609 +msgid "" +"*debug* is a boolean; if true, the compiler will be instructed to output " +"debug symbols in (or alongside) the object file(s)." +msgstr "" + +#: ../../distutils/apiref.rst:612 +msgid "" +"*extra_preargs* and *extra_postargs* are implementation-dependent. On " +"platforms that have the notion of a command-line (e.g. Unix, DOS/Windows), " +"they are most likely lists of strings: extra command-line arguments to " +"prepend/append to the compiler command line. On other platforms, consult " +"the implementation class documentation. In any event, they are intended as " +"an escape hatch for those occasions when the abstract compiler framework " +"doesn't cut the mustard." +msgstr "" + +#: ../../distutils/apiref.rst:619 +msgid "" +"*depends*, if given, is a list of filenames that all targets depend on. If " +"a source file is older than any file in depends, then the source file will " +"be recompiled. This supports dependency tracking, but only at a coarse " +"granularity." +msgstr "" + +#: ../../distutils/apiref.rst:624 +msgid "Raises :exc:`CompileError` on failure." +msgstr "" + +#: ../../distutils/apiref.rst:629 +msgid "" +"Link a bunch of stuff together to create a static library file. The \"bunch " +"of stuff\" consists of the list of object files supplied as *objects*, the " +"extra object files supplied to :meth:`add_link_object` and/or " +":meth:`set_link_objects`, the libraries supplied to :meth:`add_library` " +"and/or :meth:`set_libraries`, and the libraries supplied as *libraries* (if " +"any)." +msgstr "" + +#: ../../distutils/apiref.rst:635 +msgid "" +"*output_libname* should be a library name, not a filename; the filename will" +" be inferred from the library name. *output_dir* is the directory where the" +" library file will be put." +msgstr "" + +#: ../../distutils/apiref.rst:641 +msgid "" +"*debug* is a boolean; if true, debugging information will be included in the" +" library (note that on most platforms, it is the compile step where this " +"matters: the *debug* flag is included here just for consistency)." +msgstr "" + +#: ../../distutils/apiref.rst:645 ../../distutils/apiref.rst:687 +msgid "" +"*target_lang* is the target language for which the given objects are being " +"compiled. This allows specific linkage time treatment of certain languages." +msgstr "" + +#: ../../distutils/apiref.rst:648 +msgid "Raises :exc:`LibError` on failure." +msgstr "" + +#: ../../distutils/apiref.rst:653 +msgid "" +"Link a bunch of stuff together to create an executable or shared library " +"file." +msgstr "" + +#: ../../distutils/apiref.rst:655 +msgid "" +"The \"bunch of stuff\" consists of the list of object files supplied as " +"*objects*. *output_filename* should be a filename. If *output_dir* is " +"supplied, *output_filename* is relative to it (i.e. *output_filename* can " +"provide directory components if needed)." +msgstr "" + +#: ../../distutils/apiref.rst:660 +msgid "" +"*libraries* is a list of libraries to link against. These are library " +"names, not filenames, since they're translated into filenames in a platform-" +"specific way (eg. *foo* becomes :file:`libfoo.a` on Unix and :file:`foo.lib`" +" on DOS/Windows). However, they can include a directory component, which " +"means the linker will look in that specific directory rather than searching " +"all the normal locations." +msgstr "" + +#: ../../distutils/apiref.rst:667 +msgid "" +"*library_dirs*, if supplied, should be a list of directories to search for " +"libraries that were specified as bare library names (ie. no directory " +"component). These are on top of the system default and those supplied to " +":meth:`add_library_dir` and/or :meth:`set_library_dirs`. " +"*runtime_library_dirs* is a list of directories that will be embedded into " +"the shared library and used to search for other shared libraries that " +"\\*it\\* depends on at run-time. (This may only be relevant on Unix.)" +msgstr "" + +#: ../../distutils/apiref.rst:675 +msgid "" +"*export_symbols* is a list of symbols that the shared library will export. " +"(This appears to be relevant only on Windows.)" +msgstr "" + +#: ../../distutils/apiref.rst:678 +msgid "" +"*debug* is as for :meth:`compile` and :meth:`create_static_lib`, with the " +"slight distinction that it actually matters on most platforms (as opposed to" +" :meth:`create_static_lib`, which includes a *debug* flag mostly for form's " +"sake)." +msgstr "" + +#: ../../distutils/apiref.rst:683 +msgid "" +"*extra_preargs* and *extra_postargs* are as for :meth:`compile` (except of " +"course that they supply command-line arguments for the particular linker " +"being used)." +msgstr "" + +#: ../../distutils/apiref.rst:690 +msgid "Raises :exc:`LinkError` on failure." +msgstr "" + +#: ../../distutils/apiref.rst:695 +msgid "" +"Link an executable. *output_progname* is the name of the file executable, " +"while *objects* are a list of object filenames to link in. Other arguments " +"are as for the :meth:`link` method." +msgstr "" + +#: ../../distutils/apiref.rst:702 +msgid "" +"Link a shared library. *output_libname* is the name of the output library, " +"while *objects* is a list of object filenames to link in. Other arguments " +"are as for the :meth:`link` method." +msgstr "" + +#: ../../distutils/apiref.rst:709 +msgid "" +"Link a shared object. *output_filename* is the name of the shared object " +"that will be created, while *objects* is a list of object filenames to link" +" in. Other arguments are as for the :meth:`link` method." +msgstr "" + +#: ../../distutils/apiref.rst:716 +msgid "" +"Preprocess a single C/C++ source file, named in *source*. Output will be " +"written to file named *output_file*, or *stdout* if *output_file* not " +"supplied. *macros* is a list of macro definitions as for :meth:`compile`, " +"which will augment the macros set with :meth:`define_macro` and " +":meth:`undefine_macro`. *include_dirs* is a list of directory names that " +"will be added to the default list, in the same way as " +":meth:`add_include_dir`." +msgstr "" + +#: ../../distutils/apiref.rst:723 +msgid "Raises :exc:`PreprocessError` on failure." +msgstr "" + +#: ../../distutils/apiref.rst:725 +msgid "" +"The following utility methods are defined by the :class:`CCompiler` class, " +"for use by the various concrete subclasses." +msgstr "" + +#: ../../distutils/apiref.rst:731 +msgid "" +"Returns the filename of the executable for the given *basename*. Typically " +"for non-Windows platforms this is the same as the basename, while Windows " +"will get a :file:`.exe` added." +msgstr "" + +#: ../../distutils/apiref.rst:738 +msgid "" +"Returns the filename for the given library name on the current platform. On " +"Unix a library with *lib_type* of ``'static'`` will typically be of the " +"form :file:`liblibname.a`, while a *lib_type* of ``'dynamic'`` will be of " +"the form :file:`liblibname.so`." +msgstr "" + +#: ../../distutils/apiref.rst:746 +msgid "" +"Returns the name of the object files for the given source files. " +"*source_filenames* should be a list of filenames." +msgstr "" + +#: ../../distutils/apiref.rst:752 +msgid "" +"Returns the name of a shared object file for the given file name *basename*." +msgstr "" + +#: ../../distutils/apiref.rst:757 +msgid "" +"Invokes :func:`distutils.util.execute`. This method invokes a Python " +"function *func* with the given arguments *args*, after logging and taking " +"into account the *dry_run* flag." +msgstr "" + +#: ../../distutils/apiref.rst:764 +msgid "" +"Invokes :func:`distutils.util.spawn`. This invokes an external process to " +"run the given command." +msgstr "" + +#: ../../distutils/apiref.rst:770 +msgid "" +"Invokes :func:`distutils.dir_util.mkpath`. This creates a directory and any" +" missing ancestor directories." +msgstr "" + +#: ../../distutils/apiref.rst:776 +msgid "" +"Invokes :meth:`distutils.file_util.move_file`. Renames *src* to *dst*." +msgstr "" + +#: ../../distutils/apiref.rst:781 +msgid "Write a message using :func:`distutils.log.debug`." +msgstr "" + +#: ../../distutils/apiref.rst:786 +msgid "Write a warning message *msg* to standard error." +msgstr "" + +#: ../../distutils/apiref.rst:791 +msgid "" +"If the *debug* flag is set on this :class:`CCompiler` instance, print *msg*" +" to standard output, otherwise do nothing." +msgstr "" + +#: ../../distutils/apiref.rst:803 +msgid ":mod:`distutils.unixccompiler` --- Unix C Compiler" +msgstr "" + +#: ../../distutils/apiref.rst:809 +msgid "" +"This module provides the :class:`UnixCCompiler` class, a subclass of " +":class:`CCompiler` that handles the typical Unix-style command-line C " +"compiler:" +msgstr "" + +#: ../../distutils/apiref.rst:812 +msgid "macros defined with :option:`!-Dname[=value]`" +msgstr "通过 :option:`!-Dname[=value]` 定义的宏" + +#: ../../distutils/apiref.rst:814 +msgid "macros undefined with :option:`!-Uname`" +msgstr "通过 :option:`!-Uname` 取消定义的宏" + +#: ../../distutils/apiref.rst:816 +msgid "include search directories specified with :option:`!-Idir`" +msgstr "包括通过 :option:`!-Idir` 指定的搜索目录" + +#: ../../distutils/apiref.rst:818 +msgid "libraries specified with :option:`!-llib`" +msgstr "通过 :option:`!-llib` 指定的库" + +#: ../../distutils/apiref.rst:820 +msgid "library search directories specified with :option:`!-Ldir`" +msgstr "通过 :option:`!-Ldir` 指定的库搜索目录" + +#: ../../distutils/apiref.rst:822 +msgid "" +"compile handled by :program:`cc` (or similar) executable with :option:`!-c` " +"option: compiles :file:`.c` to :file:`.o`" +msgstr "" + +#: ../../distutils/apiref.rst:825 +msgid "" +"link static library handled by :program:`ar` command (possibly with " +":program:`ranlib`)" +msgstr "" + +#: ../../distutils/apiref.rst:828 +msgid "link shared library handled by :program:`cc` :option:`!-shared`" +msgstr "" + +#: ../../distutils/apiref.rst:832 +msgid ":mod:`distutils.msvccompiler` --- Microsoft Compiler" +msgstr "" + +#: ../../distutils/apiref.rst:839 +msgid "" +"This module provides :class:`MSVCCompiler`, an implementation of the " +"abstract :class:`CCompiler` class for Microsoft Visual Studio. Typically, " +"extension modules need to be compiled with the same compiler that was used " +"to compile Python. For Python 2.3 and earlier, the compiler was Visual " +"Studio 6. For Python 2.4 and 2.5, the compiler is Visual Studio .NET 2003." +msgstr "" + +#: ../../distutils/apiref.rst:845 +msgid "" +":class:`MSVCCompiler` will normally choose the right compiler, linker etc. " +"on its own. To override this choice, the environment variables " +"*DISTUTILS_USE_SDK* and *MSSdk* must be both set. *MSSdk* indicates that the" +" current environment has been setup by the SDK's ``SetEnv.Cmd`` script, or " +"that the environment variables had been registered when the SDK was " +"installed; *DISTUTILS_USE_SDK* indicates that the distutils user has made an" +" explicit choice to override the compiler selection by " +":class:`MSVCCompiler`." +msgstr "" + +#: ../../distutils/apiref.rst:855 +msgid ":mod:`distutils.bcppcompiler` --- Borland Compiler" +msgstr "" + +#: ../../distutils/apiref.rst:860 +msgid "" +"This module provides :class:`BorlandCCompiler`, a subclass of the abstract " +":class:`CCompiler` class for the Borland C++ compiler." +msgstr "" + +#: ../../distutils/apiref.rst:865 +msgid ":mod:`distutils.cygwincompiler` --- Cygwin Compiler" +msgstr "" + +#: ../../distutils/apiref.rst:870 +msgid "" +"This module provides the :class:`CygwinCCompiler` class, a subclass of " +":class:`UnixCCompiler` that handles the Cygwin port of the GNU C compiler to" +" Windows. It also contains the Mingw32CCompiler class which handles the " +"mingw32 port of GCC (same as cygwin in no-cygwin mode)." +msgstr "" + +#: ../../distutils/apiref.rst:877 +msgid ":mod:`distutils.archive_util` --- Archiving utilities" +msgstr "" + +#: ../../distutils/apiref.rst:883 +msgid "" +"This module provides a few functions for creating archive files, such as " +"tarballs or zipfiles." +msgstr "" + +#: ../../distutils/apiref.rst:889 +msgid "" +"Create an archive file (eg. ``zip`` or ``tar``). *base_name* is the name " +"of the file to create, minus any format-specific extension; *format* is the" +" archive format: one of ``zip``, ``tar``, ``gztar``, ``bztar``, ``xztar``, " +"or ``ztar``. *root_dir* is a directory that will be the root directory of " +"the archive; ie. we typically ``chdir`` into *root_dir* before creating the" +" archive. *base_dir* is the directory where we start archiving from; ie. " +"*base_dir* will be the common prefix of all files and directories in the " +"archive. *root_dir* and *base_dir* both default to the current directory. " +"Returns the name of the archive file." +msgstr "" + +#: ../../distutils/apiref.rst:899 +msgid "Added support for the ``xztar`` format." +msgstr "添加了对 ``xztar`` 格式的支持" + +#: ../../distutils/apiref.rst:905 +msgid "" +"'Create an (optional compressed) archive as a tar file from all files in and" +" under *base_dir*. *compress* must be ``'gzip'`` (the default), ``'bzip2'``," +" ``'xz'``, ``'compress'``, or ``None``. For the ``'compress'`` method the " +"compression utility named by :program:`compress` must be on the default " +"program search path, so this is probably Unix-specific. The output tar file" +" will be named :file:`base_dir.tar`, possibly plus the appropriate " +"compression extension (``.gz``, ``.bz2``, ``.xz`` or ``.Z``). Return the " +"output filename." +msgstr "" + +#: ../../distutils/apiref.rst:914 +msgid "Added support for the ``xz`` compression." +msgstr "" + +#: ../../distutils/apiref.rst:920 +msgid "" +"Create a zip file from all files in and under *base_dir*. The output zip " +"file will be named *base_name* + :file:`.zip`. Uses either the " +":mod:`zipfile` Python module (if available) or the InfoZIP :file:`zip` " +"utility (if installed and found on the default search path). If neither " +"tool is available, raises :exc:`DistutilsExecError`. Returns the name of " +"the output zip file." +msgstr "" + +#: ../../distutils/apiref.rst:928 +msgid ":mod:`distutils.dep_util` --- Dependency checking" +msgstr "" + +#: ../../distutils/apiref.rst:934 +msgid "" +"This module provides functions for performing simple, timestamp-based " +"dependency of files and groups of files; also, functions based entirely on " +"such timestamp dependency analysis." +msgstr "" + +#: ../../distutils/apiref.rst:941 +msgid "" +"Return true if *source* exists and is more recently modified than *target*, " +"or if *source* exists and *target* doesn't. Return false if both exist and " +"*target* is the same age or newer than *source*. Raise " +":exc:`DistutilsFileError` if *source* does not exist." +msgstr "" + +#: ../../distutils/apiref.rst:949 +msgid "" +"Walk two filename lists in parallel, testing if each source is newer than " +"its corresponding target. Return a pair of lists (*sources*, *targets*) " +"where source is newer than target, according to the semantics of " +":func:`newer`." +msgstr "" + +#: ../../distutils/apiref.rst:958 +msgid "" +"Return true if *target* is out-of-date with respect to any file listed in " +"*sources*. In other words, if *target* exists and is newer than every file " +"in *sources*, return false; otherwise return true. *missing* controls what " +"we do when a source file is missing; the default (``'error'``) is to blow up" +" with an :exc:`OSError` from inside :func:`os.stat`; if it is ``'ignore'``," +" we silently drop any missing source files; if it is ``'newer'``, any " +"missing source files make us assume that *target* is out-of-date (this is " +"handy in \"dry-run\" mode: it'll make you pretend to carry out commands that" +" wouldn't work because inputs are missing, but that doesn't matter because " +"you're not actually going to run the commands)." +msgstr "" + +#: ../../distutils/apiref.rst:971 +msgid ":mod:`distutils.dir_util` --- Directory tree operations" +msgstr "" + +#: ../../distutils/apiref.rst:977 +msgid "" +"This module provides functions for operating on directories and trees of " +"directories." +msgstr "" + +#: ../../distutils/apiref.rst:983 +msgid "" +"Create a directory and any missing ancestor directories. If the directory " +"already exists (or if *name* is the empty string, which means the current " +"directory, which of course exists), then do nothing. Raise " +":exc:`DistutilsFileError` if unable to create some directory along the way " +"(eg. some sub-path exists, but is a file rather than a directory). If " +"*verbose* is true, print a one-line summary of each mkdir to stdout. Return" +" the list of directories actually created." +msgstr "" + +#: ../../distutils/apiref.rst:994 +msgid "" +"Create all the empty directories under *base_dir* needed to put *files* " +"there. *base_dir* is just the name of a directory which doesn't necessarily " +"exist yet; *files* is a list of filenames to be interpreted relative to " +"*base_dir*. *base_dir* + the directory portion of every file in *files* will" +" be created if it doesn't already exist. *mode*, *verbose* and *dry_run* " +"flags are as for :func:`mkpath`." +msgstr "" + +#: ../../distutils/apiref.rst:1004 +msgid "" +"Copy an entire directory tree *src* to a new location *dst*. Both *src* and" +" *dst* must be directory names. If *src* is not a directory, raise " +":exc:`DistutilsFileError`. If *dst* does not exist, it is created with " +":func:`mkpath`. The end result of the copy is that every file in *src* is " +"copied to *dst*, and directories under *src* are recursively copied to " +"*dst*. Return the list of files that were copied or might have been copied, " +"using their output name. The return value is unaffected by *update* or " +"*dry_run*: it is simply the list of all files under *src*, with the names " +"changed to be under *dst*." +msgstr "" + +#: ../../distutils/apiref.rst:1014 +msgid "" +"*preserve_mode* and *preserve_times* are the same as for " +":func:`distutils.file_util.copy_file`; note that they only apply to regular " +"files, not to directories. If *preserve_symlinks* is true, symlinks will be" +" copied as symlinks (on platforms that support them!); otherwise (the " +"default), the destination of the symlink will be copied. *update* and " +"*verbose* are the same as for :func:`copy_file`." +msgstr "" + +#: ../../distutils/apiref.rst:1022 +msgid "" +"Files in *src* that begin with :file:`.nfs` are skipped (more information on" +" these files is available in answer D2 of the `NFS FAQ page " +"`_)." +msgstr "" + +#: ../../distutils/apiref.rst:1026 +msgid "NFS files are ignored." +msgstr "" + +#: ../../distutils/apiref.rst:1031 +msgid "" +"Recursively remove *directory* and all files and directories underneath it. " +"Any errors are ignored (apart from being reported to ``sys.stdout`` if " +"*verbose* is true)." +msgstr "" + +#: ../../distutils/apiref.rst:1037 +msgid ":mod:`distutils.file_util` --- Single file operations" +msgstr "" + +#: ../../distutils/apiref.rst:1043 +msgid "" +"This module contains some utility functions for operating on individual " +"files." +msgstr "" + +#: ../../distutils/apiref.rst:1048 +msgid "" +"Copy file *src* to *dst*. If *dst* is a directory, then *src* is copied " +"there with the same name; otherwise, it must be a filename. (If the file " +"exists, it will be ruthlessly clobbered.) If *preserve_mode* is true (the " +"default), the file's mode (type and permission bits, or whatever is " +"analogous on the current platform) is copied. If *preserve_times* is true " +"(the default), the last-modified and last-access times are copied as well. " +"If *update* is true, *src* will only be copied if *dst* does not exist, or " +"if *dst* does exist but is older than *src*." +msgstr "" + +#: ../../distutils/apiref.rst:1057 +msgid "" +"*link* allows you to make hard links (using :func:`os.link`) or symbolic " +"links (using :func:`os.symlink`) instead of copying: set it to ``'hard'`` or" +" ``'sym'``; if it is ``None`` (the default), files are copied. Don't set " +"*link* on systems that don't support it: :func:`copy_file` doesn't check if " +"hard or symbolic linking is available. It uses :func:`_copy_file_contents` " +"to copy file contents." +msgstr "" + +#: ../../distutils/apiref.rst:1064 +msgid "" +"Return a tuple ``(dest_name, copied)``: *dest_name* is the actual name of " +"the output file, and *copied* is true if the file was copied (or would have" +" been copied, if *dry_run* true)." +msgstr "" + +#: ../../distutils/apiref.rst:1078 +msgid "" +"Move file *src* to *dst*. If *dst* is a directory, the file will be moved " +"into it with the same name; otherwise, *src* is just renamed to *dst*. " +"Returns the new full name of the file." +msgstr "" + +#: ../../distutils/apiref.rst:1084 +msgid "" +"Handles cross-device moves on Unix using :func:`copy_file`. What about " +"other systems?" +msgstr "" + +#: ../../distutils/apiref.rst:1090 +msgid "" +"Create a file called *filename* and write *contents* (a sequence of strings " +"without line terminators) to it." +msgstr "" + +#: ../../distutils/apiref.rst:1095 +msgid ":mod:`distutils.util` --- Miscellaneous other utility functions" +msgstr "" + +#: ../../distutils/apiref.rst:1101 +msgid "" +"This module contains other assorted bits and pieces that don't fit into any" +" other utility module." +msgstr "" + +#: ../../distutils/apiref.rst:1107 +msgid "" +"Return a string that identifies the current platform. This is used mainly " +"to distinguish platform-specific build directories and platform-specific " +"built distributions. Typically includes the OS name and version and the " +"architecture (as supplied by 'os.uname()'), although the exact information " +"included depends on the OS; e.g., on Linux, the kernel version isn't " +"particularly important." +msgstr "" + +#: ../../distutils/apiref.rst:1114 +msgid "Examples of returned values:" +msgstr "返回值的示例:" + +#: ../../distutils/apiref.rst:1116 +msgid "``linux-i586``" +msgstr "``linux-i586``" + +#: ../../distutils/apiref.rst:1117 +msgid "``linux-alpha``" +msgstr "``linux-alpha``" + +#: ../../distutils/apiref.rst:1118 +msgid "``solaris-2.6-sun4u``" +msgstr "``solaris-2.6-sun4u``" + +#: ../../distutils/apiref.rst:1120 +msgid "For non-POSIX platforms, currently just returns ``sys.platform``." +msgstr "" + +#: ../../distutils/apiref.rst:1122 +msgid "" +"For macOS systems the OS version reflects the minimal version on which " +"binaries will run (that is, the value of ``MACOSX_DEPLOYMENT_TARGET`` during" +" the build of Python), not the OS version of the current system." +msgstr "" + +#: ../../distutils/apiref.rst:1126 +msgid "" +"For universal binary builds on macOS the architecture value reflects the " +"universal binary status instead of the architecture of the current " +"processor. For 32-bit universal binaries the architecture is ``fat``, for " +"64-bit universal binaries the architecture is ``fat64``, and for 4-way " +"universal binaries the architecture is ``universal``. Starting from Python " +"2.7 and Python 3.2 the architecture ``fat3`` is used for a 3-way universal " +"build (ppc, i386, x86_64) and ``intel`` is used for a universal build with " +"the i386 and x86_64 architectures" +msgstr "" + +#: ../../distutils/apiref.rst:1135 +msgid "Examples of returned values on macOS:" +msgstr "macOS 上的返回值示例:" + +#: ../../distutils/apiref.rst:1137 +msgid "``macosx-10.3-ppc``" +msgstr "``macosx-10.3-ppc``" + +#: ../../distutils/apiref.rst:1139 +msgid "``macosx-10.3-fat``" +msgstr "``macosx-10.3-fat``" + +#: ../../distutils/apiref.rst:1141 +msgid "``macosx-10.5-universal``" +msgstr "``macosx-10.5-universal``" + +#: ../../distutils/apiref.rst:1143 +msgid "``macosx-10.6-intel``" +msgstr "``macosx-10.6-intel``" + +#: ../../distutils/apiref.rst:1145 +msgid "" +"For AIX, Python 3.9 and later return a string starting with \"aix\", " +"followed by additional fields (separated by ``'-'``) that represent the " +"combined values of AIX Version, Release and Technology Level (first field), " +"Build Date (second field), and bit-size (third field). Python 3.8 and " +"earlier returned only a single additional field with the AIX Version and " +"Release." +msgstr "" + +#: ../../distutils/apiref.rst:1151 +msgid "Examples of returned values on AIX:" +msgstr "" + +#: ../../distutils/apiref.rst:1153 +msgid "" +"``aix-5307-0747-32`` # 32-bit build on AIX ``oslevel -s``: 5300-07-00-0000" +msgstr "" + +#: ../../distutils/apiref.rst:1155 +msgid "" +"``aix-7105-1731-64`` # 64-bit build on AIX ``oslevel -s``: 7100-05-01-1731" +msgstr "" + +#: ../../distutils/apiref.rst:1157 +msgid "``aix-7.2`` # Legacy form reported in Python 3.8 and earlier" +msgstr "" + +#: ../../distutils/apiref.rst:1159 +msgid "" +"The AIX platform string format now also includes the technology level, build" +" date, and ABI bit-size." +msgstr "" + +#: ../../distutils/apiref.rst:1166 +msgid "" +"Return 'pathname' as a name that will work on the native filesystem, i.e. " +"split it on '/' and put it back together again using the current directory " +"separator. Needed because filenames in the setup script are always supplied " +"in Unix style, and have to be converted to the local convention before we " +"can actually use them in the filesystem. Raises :exc:`ValueError` on non-" +"Unix-ish systems if *pathname* either starts or ends with a slash." +msgstr "" + +#: ../../distutils/apiref.rst:1176 +msgid "" +"Return *pathname* with *new_root* prepended. If *pathname* is relative, " +"this is equivalent to ``os.path.join(new_root,pathname)`` Otherwise, it " +"requires making *pathname* relative and then joining the two, which is " +"tricky on DOS/Windows." +msgstr "" + +#: ../../distutils/apiref.rst:1183 +msgid "" +"Ensure that 'os.environ' has all the environment variables we guarantee that" +" users can use in config files, command-line options, etc. Currently this " +"includes:" +msgstr "" + +#: ../../distutils/apiref.rst:1187 +msgid ":envvar:`HOME` - user's home directory (Unix only)" +msgstr "" + +#: ../../distutils/apiref.rst:1188 +msgid "" +":envvar:`PLAT` - description of the current platform, including hardware and" +" OS (see :func:`get_platform`)" +msgstr "" + +#: ../../distutils/apiref.rst:1194 +msgid "" +"Perform shell/Perl-style variable substitution on *s*. Every occurrence of " +"``$`` followed by a name is considered a variable, and variable is " +"substituted by the value found in the *local_vars* dictionary, or in " +"``os.environ`` if it's not in *local_vars*. *os.environ* is first " +"checked/augmented to guarantee that it contains certain values: see " +":func:`check_environ`. Raise :exc:`ValueError` for any variables not found " +"in either *local_vars* or ``os.environ``." +msgstr "" + +#: ../../distutils/apiref.rst:1201 +msgid "" +"Note that this is not a fully-fledged string interpolation function. A valid" +" ``$variable`` can consist only of upper and lower case letters, numbers and" +" an underscore. No { } or ( ) style quoting is available." +msgstr "" + +#: ../../distutils/apiref.rst:1208 +msgid "" +"Split a string up according to Unix shell-like rules for quotes and " +"backslashes. In short: words are delimited by spaces, as long as those " +"spaces are not escaped by a backslash, or inside a quoted string. Single and" +" double quotes are equivalent, and the quote characters can be backslash-" +"escaped. The backslash is stripped from any two-character escape sequence, " +"leaving only the escaped character. The quote characters are stripped from " +"any quoted string. Returns a list of words." +msgstr "" + +#: ../../distutils/apiref.rst:1221 +msgid "" +"Perform some action that affects the outside world (for instance, writing to" +" the filesystem). Such actions are special because they are disabled by the" +" *dry_run* flag. This method takes care of all that bureaucracy for you; " +"all you have to do is supply the function to call and an argument tuple for " +"it (to embody the \"external action\" being performed), and an optional " +"message to print." +msgstr "" + +#: ../../distutils/apiref.rst:1230 +msgid "Convert a string representation of truth to true (1) or false (0)." +msgstr "" + +#: ../../distutils/apiref.rst:1232 +msgid "" +"True values are ``y``, ``yes``, ``t``, ``true``, ``on`` and ``1``; false " +"values are ``n``, ``no``, ``f``, ``false``, ``off`` and ``0``. Raises " +":exc:`ValueError` if *val* is anything else." +msgstr "" + +#: ../../distutils/apiref.rst:1239 +msgid "" +"Byte-compile a collection of Python source files to :file:`.pyc` files in a " +":file:`__pycache__` subdirectory (see :pep:`3147` and :pep:`488`). " +"*py_files* is a list of files to compile; any files that don't end in " +":file:`.py` are silently skipped. *optimize* must be one of the following:" +msgstr "" + +#: ../../distutils/apiref.rst:1244 +msgid "``0`` - don't optimize" +msgstr "" + +#: ../../distutils/apiref.rst:1245 +msgid "``1`` - normal optimization (like ``python -O``)" +msgstr "" + +#: ../../distutils/apiref.rst:1246 +msgid "``2`` - extra optimization (like ``python -OO``)" +msgstr "" + +#: ../../distutils/apiref.rst:1248 +msgid "If *force* is true, all files are recompiled regardless of timestamps." +msgstr "" + +#: ../../distutils/apiref.rst:1250 +msgid "" +"The source filename encoded in each :term:`bytecode` file defaults to the " +"filenames listed in *py_files*; you can modify these with *prefix* and " +"*basedir*. *prefix* is a string that will be stripped off of each source " +"filename, and *base_dir* is a directory name that will be prepended (after " +"*prefix* is stripped). You can supply either or both (or neither) of " +"*prefix* and *base_dir*, as you wish." +msgstr "" + +#: ../../distutils/apiref.rst:1257 +msgid "" +"If *dry_run* is true, doesn't actually do anything that would affect the " +"filesystem." +msgstr "" + +#: ../../distutils/apiref.rst:1260 +msgid "" +"Byte-compilation is either done directly in this interpreter process with " +"the standard :mod:`py_compile` module, or indirectly by writing a temporary " +"script and executing it. Normally, you should let :func:`byte_compile` " +"figure out to use direct compilation or not (see the source for details). " +"The *direct* flag is used by the script generated in indirect mode; unless " +"you know what you're doing, leave it set to ``None``." +msgstr "" + +#: ../../distutils/apiref.rst:1267 +msgid "" +"Create ``.pyc`` files with an :func:`import magic tag ` in " +"their name, in a :file:`__pycache__` subdirectory instead of files without " +"tag in the current directory." +msgstr "" + +#: ../../distutils/apiref.rst:1272 +msgid "Create ``.pyc`` files according to :pep:`488`." +msgstr "" + +#: ../../distutils/apiref.rst:1278 +msgid "" +"Return a version of *header* escaped for inclusion in an :rfc:`822` header, " +"by ensuring there are 8 spaces space after each newline. Note that it does " +"no other modification of the string." +msgstr "" + +#: ../../distutils/apiref.rst:1288 +msgid ":mod:`distutils.dist` --- The Distribution class" +msgstr "" + +#: ../../distutils/apiref.rst:1295 +msgid "" +"This module provides the :class:`~distutils.core.Distribution` class, which " +"represents the module distribution being built/installed/distributed." +msgstr "" + +#: ../../distutils/apiref.rst:1300 +msgid ":mod:`distutils.extension` --- The Extension class" +msgstr "" + +#: ../../distutils/apiref.rst:1307 +msgid "" +"This module provides the :class:`Extension` class, used to describe C/C++ " +"extension modules in setup scripts." +msgstr "" + +#: ../../distutils/apiref.rst:1315 +msgid ":mod:`distutils.debug` --- Distutils debug mode" +msgstr "" + +#: ../../distutils/apiref.rst:1321 +msgid "This module provides the DEBUG flag." +msgstr "本模块提供DEBUG标识。" + +#: ../../distutils/apiref.rst:1325 +msgid ":mod:`distutils.errors` --- Distutils exceptions" +msgstr "" + +#: ../../distutils/apiref.rst:1331 +msgid "" +"Provides exceptions used by the Distutils modules. Note that Distutils " +"modules may raise standard exceptions; in particular, SystemExit is usually " +"raised for errors that are obviously the end-user's fault (eg. bad command-" +"line arguments)." +msgstr "" + +#: ../../distutils/apiref.rst:1335 +msgid "" +"This module is safe to use in ``from ... import *`` mode; it only exports " +"symbols whose names start with ``Distutils`` and end with ``Error``." +msgstr "" + +#: ../../distutils/apiref.rst:1340 +msgid "" +":mod:`distutils.fancy_getopt` --- Wrapper around the standard getopt module" +msgstr "" + +#: ../../distutils/apiref.rst:1346 +msgid "" +"This module provides a wrapper around the standard :mod:`getopt` module " +"that provides the following additional features:" +msgstr "" + +#: ../../distutils/apiref.rst:1349 +msgid "short and long options are tied together" +msgstr "" + +#: ../../distutils/apiref.rst:1351 +msgid "" +"options have help strings, so :func:`fancy_getopt` could potentially create" +" a complete usage summary" +msgstr "" + +#: ../../distutils/apiref.rst:1354 +msgid "options set attributes of a passed-in object" +msgstr "" + +#: ../../distutils/apiref.rst:1356 +msgid "" +"boolean options can have \"negative aliases\" --- eg. if :option:`!--quiet` " +"is the \"negative alias\" of :option:`!--verbose`, then :option:`!--quiet` " +"on the command line sets *verbose* to false." +msgstr "" + +#: ../../distutils/apiref.rst:1362 +msgid "" +"Wrapper function. *options* is a list of ``(long_option, short_option, " +"help_string)`` 3-tuples as described in the constructor for " +":class:`FancyGetopt`. *negative_opt* should be a dictionary mapping option " +"names to option names, both the key and value should be in the *options* " +"list. *object* is an object which will be used to store values (see the " +":meth:`getopt` method of the :class:`FancyGetopt` class). *args* is the " +"argument list. Will use ``sys.argv[1:]`` if you pass ``None`` as *args*." +msgstr "" + +#: ../../distutils/apiref.rst:1373 +msgid "Wraps *text* to less than *width* wide." +msgstr "" + +#: ../../distutils/apiref.rst:1378 +msgid "" +"The option_table is a list of 3-tuples: ``(long_option, short_option, " +"help_string)``" +msgstr "" + +#: ../../distutils/apiref.rst:1381 +msgid "" +"If an option takes an argument, its *long_option* should have ``'='`` " +"appended; *short_option* should just be a single character, no ``':'`` in " +"any case. *short_option* should be ``None`` if a *long_option* doesn't have" +" a corresponding *short_option*. All option tuples must have long options." +msgstr "" + +#: ../../distutils/apiref.rst:1386 +msgid "The :class:`FancyGetopt` class provides the following methods:" +msgstr "" + +#: ../../distutils/apiref.rst:1391 +msgid "Parse command-line options in args. Store as attributes on *object*." +msgstr "" + +#: ../../distutils/apiref.rst:1393 +msgid "" +"If *args* is ``None`` or not supplied, uses ``sys.argv[1:]``. If *object* " +"is ``None`` or not supplied, creates a new :class:`OptionDummy` instance, " +"stores option values there, and returns a tuple ``(args, object)``. If " +"*object* is supplied, it is modified in place and :func:`getopt` just " +"returns *args*; in both cases, the returned *args* is a modified copy of the" +" passed-in *args* list, which is left untouched." +msgstr "" + +#: ../../distutils/apiref.rst:1405 +msgid "" +"Returns the list of ``(option, value)`` tuples processed by the previous run" +" of :meth:`getopt` Raises :exc:`RuntimeError` if :meth:`getopt` hasn't been" +" called yet." +msgstr "" + +#: ../../distutils/apiref.rst:1412 +msgid "" +"Generate help text (a list of strings, one per suggested line of output) " +"from the option table for this :class:`FancyGetopt` object." +msgstr "" + +#: ../../distutils/apiref.rst:1415 +msgid "If supplied, prints the supplied *header* at the top of the help." +msgstr "" + +#: ../../distutils/apiref.rst:1419 +msgid ":mod:`distutils.filelist` --- The FileList class" +msgstr "" + +#: ../../distutils/apiref.rst:1426 +msgid "" +"This module provides the :class:`FileList` class, used for poking about the " +"filesystem and building lists of files." +msgstr "" + +#: ../../distutils/apiref.rst:1431 +msgid ":mod:`distutils.log` --- Simple :pep:`282`-style logging" +msgstr "" + +#: ../../distutils/apiref.rst:1438 +msgid ":mod:`distutils.spawn` --- Spawn a sub-process" +msgstr "" + +#: ../../distutils/apiref.rst:1444 +msgid "" +"This module provides the :func:`spawn` function, a front-end to various " +"platform-specific functions for launching another program in a sub-process." +" Also provides :func:`find_executable` to search the path for a given " +"executable name." +msgstr "" + +#: ../../distutils/apiref.rst:1451 +msgid ":mod:`distutils.sysconfig` --- System configuration information" +msgstr "" + +#: ../../distutils/apiref.rst:1460 +msgid "" +"The :mod:`distutils.sysconfig` module provides access to Python's low-level " +"configuration information. The specific configuration variables available " +"depend heavily on the platform and configuration. The specific variables " +"depend on the build process for the specific version of Python being run; " +"the variables are those found in the :file:`Makefile` and configuration " +"header that are installed with Python on Unix systems. The configuration " +"header is called :file:`pyconfig.h` for Python versions starting with 2.2, " +"and :file:`config.h` for earlier versions of Python." +msgstr "" + +#: ../../distutils/apiref.rst:1469 +msgid "" +"Some additional functions are provided which perform some useful " +"manipulations for other parts of the :mod:`distutils` package." +msgstr "" + +#: ../../distutils/apiref.rst:1475 +msgid "The result of ``os.path.normpath(sys.prefix)``." +msgstr "" + +#: ../../distutils/apiref.rst:1480 +msgid "The result of ``os.path.normpath(sys.exec_prefix)``." +msgstr "" + +#: ../../distutils/apiref.rst:1485 +msgid "" +"Return the value of a single variable. This is equivalent to " +"``get_config_vars().get(name)``." +msgstr "" + +#: ../../distutils/apiref.rst:1491 +msgid "" +"Return a set of variable definitions. If there are no arguments, this " +"returns a dictionary mapping names of configuration variables to values. If" +" arguments are provided, they should be strings, and the return value will " +"be a sequence giving the associated values. If a given name does not have a " +"corresponding value, ``None`` will be included for that variable." +msgstr "" + +#: ../../distutils/apiref.rst:1500 +msgid "" +"Return the full path name of the configuration header. For Unix, this will " +"be the header generated by the :program:`configure` script; for other " +"platforms the header will have been supplied directly by the Python source " +"distribution. The file is a platform-specific text file." +msgstr "" + +#: ../../distutils/apiref.rst:1508 +msgid "" +"Return the full path name of the :file:`Makefile` used to build Python. For" +" Unix, this will be a file generated by the :program:`configure` script; the" +" meaning for other platforms will vary. The file is a platform-specific " +"text file, if it exists. This function is only useful on POSIX platforms." +msgstr "" + +#: ../../distutils/apiref.rst:1516 +msgid "" +"Return the directory for either the general or platform-dependent C include " +"files. If *plat_specific* is true, the platform-dependent include directory" +" is returned; if false or omitted, the platform-independent directory is " +"returned. If *prefix* is given, it is used as either the prefix instead of " +":const:`PREFIX`, or as the exec-prefix instead of :const:`EXEC_PREFIX` if " +"*plat_specific* is true." +msgstr "" + +#: ../../distutils/apiref.rst:1526 +msgid "" +"Return the directory for either the general or platform-dependent library " +"installation. If *plat_specific* is true, the platform-dependent include " +"directory is returned; if false or omitted, the platform-independent " +"directory is returned. If *prefix* is given, it is used as either the " +"prefix instead of :const:`PREFIX`, or as the exec-prefix instead of " +":const:`EXEC_PREFIX` if *plat_specific* is true. If *standard_lib* is true," +" the directory for the standard library is returned rather than the " +"directory for the installation of third-party extensions." +msgstr "" + +#: ../../distutils/apiref.rst:1535 +msgid "" +"The following function is only intended for use within the :mod:`distutils` " +"package." +msgstr "" + +#: ../../distutils/apiref.rst:1541 +msgid "" +"Do any platform-specific customization of a " +":class:`distutils.ccompiler.CCompiler` instance." +msgstr "" + +#: ../../distutils/apiref.rst:1544 +msgid "" +"This function is only needed on Unix at this time, but should be called " +"consistently to support forward-compatibility. It inserts the information " +"that varies across Unix flavors and is stored in Python's :file:`Makefile`." +" This information includes the selected compiler, compiler and linker " +"options, and the extension used by the linker for shared objects." +msgstr "" + +#: ../../distutils/apiref.rst:1550 +msgid "" +"This function is even more special-purpose, and should only be used from " +"Python's own build procedures." +msgstr "" + +#: ../../distutils/apiref.rst:1556 +msgid "" +"Inform the :mod:`distutils.sysconfig` module that it is being used as part " +"of the build process for Python. This changes a lot of relative locations " +"for files, allowing them to be located in the build area rather than in an " +"installed Python." +msgstr "" + +#: ../../distutils/apiref.rst:1563 +msgid ":mod:`distutils.text_file` --- The TextFile class" +msgstr "" + +#: ../../distutils/apiref.rst:1569 +msgid "" +"This module provides the :class:`TextFile` class, which gives an interface " +"to text files that (optionally) takes care of stripping comments, ignoring " +"blank lines, and joining lines with backslashes." +msgstr "" + +#: ../../distutils/apiref.rst:1576 +msgid "" +"This class provides a file-like object that takes care of all the things " +"you commonly want to do when processing a text file that has some line-by-" +"line syntax: strip comments (as long as ``#`` is your comment character), " +"skip blank lines, join adjacent lines by escaping the newline (ie. backslash" +" at end of line), strip leading and/or trailing whitespace. All of these " +"are optional and independently controllable." +msgstr "" + +#: ../../distutils/apiref.rst:1583 +msgid "" +"The class provides a :meth:`warn` method so you can generate warning " +"messages that report physical line number, even if the logical line in " +"question spans multiple physical lines. Also provides :meth:`unreadline` " +"for implementing line-at-a-time lookahead." +msgstr "" + +#: ../../distutils/apiref.rst:1588 +msgid "" +":class:`TextFile` instances are create with either *filename*, *file*, or " +"both. :exc:`RuntimeError` is raised if both are ``None``. *filename* should " +"be a string, and *file* a file object (or something that provides " +":meth:`readline` and :meth:`close` methods). It is recommended that you " +"supply at least *filename*, so that :class:`TextFile` can include it in " +"warning messages. If *file* is not supplied, :class:`TextFile` creates its " +"own using the :func:`open` built-in function." +msgstr "" + +#: ../../distutils/apiref.rst:1596 +msgid "" +"The options are all boolean, and affect the values returned by " +":meth:`readline`" +msgstr "" + +#: ../../distutils/apiref.rst:1601 +msgid "option name" +msgstr "选项名称" + +#: ../../distutils/apiref.rst:1601 +msgid "default" +msgstr "默认值" + +#: ../../distutils/apiref.rst:1603 +msgid "*strip_comments*" +msgstr "*strip_comments*" + +#: ../../distutils/apiref.rst:1603 +msgid "" +"strip from ``'#'`` to end-of-line, as well as any whitespace leading up to " +"the ``'#'``\\ ---unless it is escaped by a backslash" +msgstr "" + +#: ../../distutils/apiref.rst:1603 ../../distutils/apiref.rst:1612 +#: ../../distutils/apiref.rst:1617 +msgid "true" +msgstr "true" + +#: ../../distutils/apiref.rst:1609 +msgid "*lstrip_ws*" +msgstr "*lstrip_ws*" + +#: ../../distutils/apiref.rst:1609 +msgid "strip leading whitespace from each line before returning it" +msgstr "" + +#: ../../distutils/apiref.rst:1609 ../../distutils/apiref.rst:1627 +#: ../../distutils/apiref.rst:1638 +msgid "false" +msgstr "false" + +#: ../../distutils/apiref.rst:1612 +msgid "*rstrip_ws*" +msgstr "*rstrip_ws*" + +#: ../../distutils/apiref.rst:1612 +msgid "" +"strip trailing whitespace (including line terminator!) from each line before" +" returning it." +msgstr "" + +#: ../../distutils/apiref.rst:1617 +msgid "*skip_blanks*" +msgstr "*skip_blanks*" + +#: ../../distutils/apiref.rst:1617 +msgid "" +"skip lines that are empty \\*after\\* stripping comments and whitespace. " +"(If both lstrip_ws and rstrip_ws are false, then some lines may consist of " +"solely whitespace: these will \\*not\\* be skipped, even if *skip_blanks* is" +" true.)" +msgstr "" + +#: ../../distutils/apiref.rst:1627 +msgid "*join_lines*" +msgstr "*join_lines*" + +#: ../../distutils/apiref.rst:1627 +msgid "" +"if a backslash is the last non-newline character on a line after stripping " +"comments and whitespace, join the following line to it to form one logical " +"line; if N consecutive lines end with a backslash, then N+1 physical lines " +"will be joined to form one logical line." +msgstr "" + +#: ../../distutils/apiref.rst:1638 +msgid "*collapse_join*" +msgstr "*collapse_join*" + +#: ../../distutils/apiref.rst:1638 +msgid "" +"strip leading whitespace from lines that are joined to their predecessor; " +"only matters if ``(join_lines and not lstrip_ws)``" +msgstr "" + +#: ../../distutils/apiref.rst:1645 +msgid "" +"Note that since *rstrip_ws* can strip the trailing newline, the semantics of" +" :meth:`readline` must differ from those of the built-in file object's " +":meth:`readline` method! In particular, :meth:`readline` returns ``None`` " +"for end-of-file: an empty string might just be a blank line (or an all-" +"whitespace line), if *rstrip_ws* is true but *skip_blanks* is not." +msgstr "" + +#: ../../distutils/apiref.rst:1654 +msgid "" +"Open a new file *filename*. This overrides any *file* or *filename* " +"constructor arguments." +msgstr "" + +#: ../../distutils/apiref.rst:1660 +msgid "" +"Close the current file and forget everything we know about it (including the" +" filename and the current line number)." +msgstr "" + +#: ../../distutils/apiref.rst:1666 +msgid "" +"Print (to stderr) a warning message tied to the current logical line in the " +"current file. If the current logical line in the file spans multiple " +"physical lines, the warning refers to the whole range, such as ``\"lines " +"3-5\"``. If *line* is supplied, it overrides the current line number; it " +"may be a list or tuple to indicate a range of physical lines, or an integer" +" for a single physical line." +msgstr "" + +#: ../../distutils/apiref.rst:1676 +msgid "" +"Read and return a single logical line from the current file (or from an " +"internal buffer if lines have previously been \"unread\" with " +":meth:`unreadline`). If the *join_lines* option is true, this may involve " +"reading multiple physical lines concatenated into a single string. Updates " +"the current line number, so calling :meth:`warn` after :meth:`readline` " +"emits a warning about the physical line(s) just read. Returns ``None`` on " +"end-of-file, since the empty string can occur if *rstrip_ws* is true but " +"*strip_blanks* is not." +msgstr "" + +#: ../../distutils/apiref.rst:1687 +msgid "" +"Read and return the list of all logical lines remaining in the current file." +" This updates the current line number to the last line of the file." +msgstr "" + +#: ../../distutils/apiref.rst:1693 +msgid "" +"Push *line* (a string) onto an internal buffer that will be checked by " +"future :meth:`readline` calls. Handy for implementing a parser with line-" +"at-a-time lookahead. Note that lines that are \"unread\" with " +":meth:`unreadline` are not subsequently re-cleansed (whitespace stripped, " +"or whatever) when read with :meth:`readline`. If multiple calls are made to " +":meth:`unreadline` before a call to :meth:`readline`, the lines will be " +"returned most in most recent first order." +msgstr "" + +#: ../../distutils/apiref.rst:1702 +msgid ":mod:`distutils.version` --- Version number classes" +msgstr "" + +#: ../../distutils/apiref.rst:1717 +msgid ":mod:`distutils.cmd` --- Abstract base class for Distutils commands" +msgstr "" + +#: ../../distutils/apiref.rst:1724 +msgid "This module supplies the abstract base class :class:`Command`." +msgstr "" + +#: ../../distutils/apiref.rst:1729 +msgid "" +"Abstract base class for defining command classes, the \"worker bees\" of the" +" Distutils. A useful analogy for command classes is to think of them as " +"subroutines with local variables called *options*. The options are declared" +" in :meth:`initialize_options` and defined (given their final values) in " +":meth:`finalize_options`, both of which must be defined by every command " +"class. The distinction between the two is necessary because option values " +"might come from the outside world (command line, config file, ...), and any " +"options dependent on other options must be computed after these outside " +"influences have been processed --- hence :meth:`finalize_options`. The body" +" of the subroutine, where it does all its work based on the values of its " +"options, is the :meth:`run` method, which must also be implemented by every " +"command class." +msgstr "" + +#: ../../distutils/apiref.rst:1742 +msgid "" +"The class constructor takes a single argument *dist*, a " +":class:`~distutils.core.Distribution` instance." +msgstr "" + +#: ../../distutils/apiref.rst:1747 +msgid "Creating a new Distutils command" +msgstr "" + +#: ../../distutils/apiref.rst:1749 +msgid "This section outlines the steps to create a new Distutils command." +msgstr "" + +#: ../../distutils/apiref.rst:1751 +msgid "" +"A new command lives in a module in the :mod:`distutils.command` package. " +"There is a sample template in that directory called " +":file:`command_template`. Copy this file to a new module with the same name" +" as the new command you're implementing. This module should implement a " +"class with the same name as the module (and the command). So, for instance," +" to create the command ``peel_banana`` (so that users can run ``setup.py " +"peel_banana``), you'd copy :file:`command_template` to " +":file:`distutils/command/peel_banana.py`, then edit it so that it's " +"implementing the class :class:`peel_banana`, a subclass of " +":class:`distutils.cmd.Command`." +msgstr "" + +#: ../../distutils/apiref.rst:1761 +msgid "Subclasses of :class:`Command` must define the following methods." +msgstr "" + +#: ../../distutils/apiref.rst:1765 +msgid "" +"Set default values for all the options that this command supports. Note " +"that these defaults may be overridden by other commands, by the setup " +"script, by config files, or by the command-line. Thus, this is not the " +"place to code dependencies between options; generally, " +":meth:`initialize_options` implementations are just a bunch of ``self.foo = " +"None`` assignments." +msgstr "" + +#: ../../distutils/apiref.rst:1774 +msgid "" +"Set final values for all the options that this command supports. This is " +"always called as late as possible, ie. after any option assignments from " +"the command-line or from other commands have been done. Thus, this is the " +"place to code option dependencies: if *foo* depends on *bar*, then it is " +"safe to set *foo* from *bar* as long as *foo* still has the same value it " +"was assigned in :meth:`initialize_options`." +msgstr "" + +#: ../../distutils/apiref.rst:1784 +msgid "" +"A command's raison d'etre: carry out the action it exists to perform, " +"controlled by the options initialized in :meth:`initialize_options`, " +"customized by other commands, the setup script, the command-line, and config" +" files, and finalized in :meth:`finalize_options`. All terminal output and " +"filesystem interaction should be done by :meth:`run`." +msgstr "" + +#: ../../distutils/apiref.rst:1793 +msgid "" +"*sub_commands* formalizes the notion of a \"family\" of commands, e.g. " +"``install`` as the parent with sub-commands ``install_lib``, " +"``install_headers``, etc. The parent of a family of commands defines " +"*sub_commands* as a class attribute; it's a list of 2-tuples " +"``(command_name, predicate)``, with *command_name* a string and *predicate* " +"a function, a string or ``None``. *predicate* is a method of the parent " +"command that determines whether the corresponding command is applicable in " +"the current situation. (E.g. ``install_headers`` is only applicable if we " +"have any C header files to install.) If *predicate* is ``None``, that " +"command is always applicable." +msgstr "" + +#: ../../distutils/apiref.rst:1804 +msgid "" +"*sub_commands* is usually defined at the *end* of a class, because " +"predicates can be methods of the class, so they must already have been " +"defined. The canonical example is the :command:`install` command." +msgstr "" + +#: ../../distutils/apiref.rst:1810 +msgid ":mod:`distutils.command` --- Individual Distutils commands" +msgstr "" + +#: ../../distutils/apiref.rst:1821 +msgid ":mod:`distutils.command.bdist` --- Build a binary installer" +msgstr "" + +#: ../../distutils/apiref.rst:1831 +msgid "" +":mod:`distutils.command.bdist_packager` --- Abstract base class for " +"packagers" +msgstr "" + +#: ../../distutils/apiref.rst:1841 +msgid ":mod:`distutils.command.bdist_dumb` --- Build a \"dumb\" installer" +msgstr "" + +#: ../../distutils/apiref.rst:1851 +msgid "" +":mod:`distutils.command.bdist_msi` --- Build a Microsoft Installer binary " +"package" +msgstr "" + +#: ../../distutils/apiref.rst:1858 ../../distutils/apiref.rst:1887 +msgid "Use bdist_wheel (wheel packages) instead." +msgstr "" + +#: ../../distutils/apiref.rst:1861 +msgid "Builds a `Windows Installer`_ (.msi) binary package." +msgstr "" + +#: ../../distutils/apiref.rst:1865 +msgid "" +"In most cases, the ``bdist_msi`` installer is a better choice than the " +"``bdist_wininst`` installer, because it provides better support for Win64 " +"platforms, allows administrators to perform non-interactive installations, " +"and allows installation through group policies." +msgstr "" + +#: ../../distutils/apiref.rst:1872 +msgid "" +":mod:`distutils.command.bdist_rpm` --- Build a binary distribution as a " +"Redhat RPM and SRPM" +msgstr "" + +#: ../../distutils/apiref.rst:1882 +msgid ":mod:`distutils.command.bdist_wininst` --- Build a Windows installer" +msgstr "" + +#: ../../distutils/apiref.rst:1895 +msgid ":mod:`distutils.command.sdist` --- Build a source distribution" +msgstr "" + +#: ../../distutils/apiref.rst:1905 +msgid ":mod:`distutils.command.build` --- Build all files of a package" +msgstr "" + +#: ../../distutils/apiref.rst:1915 +msgid "" +":mod:`distutils.command.build_clib` --- Build any C libraries in a package" +msgstr "" + +#: ../../distutils/apiref.rst:1925 +msgid "" +":mod:`distutils.command.build_ext` --- Build any extensions in a package" +msgstr "" + +#: ../../distutils/apiref.rst:1935 +msgid "" +":mod:`distutils.command.build_py` --- Build the .py/.pyc files of a package" +msgstr "" + +#: ../../distutils/apiref.rst:1945 +msgid "" +"Alternative implementation of build_py which also runs the 2to3 conversion " +"library on each .py file that is going to be installed. To use this in a " +"setup.py file for a distribution that is designed to run with both Python " +"2.x and 3.x, add::" +msgstr "" + +#: ../../distutils/apiref.rst:1955 +msgid "to your setup.py, and later::" +msgstr "" + +#: ../../distutils/apiref.rst:1959 +msgid "to the invocation of setup()." +msgstr "" + +#: ../../distutils/apiref.rst:1963 +msgid "" +":mod:`distutils.command.build_scripts` --- Build the scripts of a package" +msgstr "" + +#: ../../distutils/apiref.rst:1973 +msgid ":mod:`distutils.command.clean` --- Clean a package build area" +msgstr "" + +#: ../../distutils/apiref.rst:1978 +msgid "" +"This command removes the temporary files created by :command:`build` and its" +" subcommands, like intermediary compiled object files. With the ``--all`` " +"option, the complete build directory will be removed." +msgstr "" + +#: ../../distutils/apiref.rst:1982 +msgid "" +"Extension modules built :ref:`in place ` will " +"not be cleaned, as they are not in the build directory." +msgstr "" + +#: ../../distutils/apiref.rst:1987 +msgid ":mod:`distutils.command.config` --- Perform package configuration" +msgstr "" + +#: ../../distutils/apiref.rst:1997 +msgid ":mod:`distutils.command.install` --- Install a package" +msgstr "" + +#: ../../distutils/apiref.rst:2007 +msgid "" +":mod:`distutils.command.install_data` --- Install data files from a package" +msgstr "" + +#: ../../distutils/apiref.rst:2017 +msgid "" +":mod:`distutils.command.install_headers` --- Install C/C++ header files from" +" a package" +msgstr "" + +#: ../../distutils/apiref.rst:2027 +msgid "" +":mod:`distutils.command.install_lib` --- Install library files from a " +"package" +msgstr "" + +#: ../../distutils/apiref.rst:2037 +msgid "" +":mod:`distutils.command.install_scripts` --- Install script files from a " +"package" +msgstr "" + +#: ../../distutils/apiref.rst:2047 +msgid "" +":mod:`distutils.command.register` --- Register a module with the Python " +"Package Index" +msgstr "" + +#: ../../distutils/apiref.rst:2053 +msgid "" +"The ``register`` command registers the package with the Python Package " +"Index. This is described in more detail in :pep:`301`." +msgstr "" + +#: ../../distutils/apiref.rst:2060 +msgid ":mod:`distutils.command.check` --- Check the meta-data of a package" +msgstr "" + +#: ../../distutils/apiref.rst:2066 +msgid "" +"The ``check`` command performs some tests on the meta-data of a package. For" +" example, it verifies that all required meta-data are provided as the " +"arguments passed to the :func:`setup` function." +msgstr "" diff --git a/distutils/builtdist.po b/distutils/builtdist.po new file mode 100644 index 000000000..4d7e75d0f --- /dev/null +++ b/distutils/builtdist.po @@ -0,0 +1,915 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) 2001-2024, Python Software Foundation +# This file is distributed under the same license as the Python package. +# FIRST AUTHOR , YEAR. +# +# Translators: +# Fei Yin , 2018 +# 叶浚安 , 2019 +# ppcfish , 2019 +# meowmeowcat , 2021 +# Freesand Leo , 2022 +# Rafael Fontenelle , 2024 +# +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: Python 3.9\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2024-05-31 16:34+0000\n" +"PO-Revision-Date: 2017-02-16 17:40+0000\n" +"Last-Translator: Rafael Fontenelle , 2024\n" +"Language-Team: Chinese (China) (https://app.transifex.com/python-doc/teams/5390/zh_CN/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: zh_CN\n" +"Plural-Forms: nplurals=1; plural=0;\n" + +#: ../../distutils/builtdist.rst:5 +msgid "Creating Built Distributions" +msgstr "创建构建分发版" + +#: ../../distutils/_setuptools_disclaimer.rst:3 +msgid "" +"This document is being retained solely until the ``setuptools`` " +"documentation at https://setuptools.readthedocs.io/en/latest/setuptools.html" +" independently covers all of the relevant information currently included " +"here." +msgstr "" +"这篇文档是历史遗留文档,在 https://setuptools.readthedocs.io/en/latest/setuptools.html 上的" +" ``setuptools`` 文档独立涵盖此处包含的所有相关信息之后,将不再单独作为正式文档保留。" + +#: ../../distutils/builtdist.rst:9 +msgid "" +"A \"built distribution\" is what you're probably used to thinking of either " +"as a \"binary package\" or an \"installer\" (depending on your background)." +" It's not necessarily binary, though, because it might contain only Python " +"source code and/or byte-code; and we don't call it a package, because that " +"word is already spoken for in Python. (And \"installer\" is a term specific" +" to the world of mainstream desktop systems.)" +msgstr "" +"“构建分发版”即你通常所认为的“二进制包”或“安装程序”(取决于你的技术背景)。 但它并不一定是二进制的,因为它可能只包含 Python " +"源代码和/或字节码;并且我们也不将其称为包,因为这个词在 Python 中已经被使用。 (而“安装程序”是主流桌面系统领域的一个专有术语。)" + +#: ../../distutils/builtdist.rst:16 +msgid "" +"A built distribution is how you make life as easy as possible for installers" +" of your module distribution: for users of RPM-based Linux systems, it's a " +"binary RPM; for Windows users, it's an executable installer; for Debian-" +"based Linux users, it's a Debian package; and so forth. Obviously, no one " +"person will be able to create built distributions for every platform under " +"the sun, so the Distutils are designed to enable module developers to " +"concentrate on their specialty---writing code and creating source " +"distributions---while an intermediary species called *packagers* springs up " +"to turn source distributions into built distributions for as many platforms " +"as there are packagers." +msgstr "" +"分发版可以让你的模块分发安装器尽可能地方便易用:对于基于 RPM 的 Linux 系统的用户,它将为二进制 RPM;对于 Windows " +"的用户,它将为可执行文件安装器;对于基于 Debian 的 Linux 用户,它将为 Debian 安装包;诸如此类。 " +"显然,没有人能为世界上所有的系统平台都构建分发版,因此 Distutils 被设计用来让模块开发者能够专注于他们的专长 --- " +"编写代码并创建源代码分发版 --- 而让另一群作为中介的 *打包者* 负责在尽可能多的受支持系统平台上将源代码分发版转换为构建分发版。" + +#: ../../distutils/builtdist.rst:26 +msgid "" +"Of course, the module developer could be their own packager; or the packager" +" could be a volunteer \"out there\" somewhere who has access to a platform " +"which the original developer does not; or it could be software periodically " +"grabbing new source distributions and turning them into built distributions " +"for as many platforms as the software has access to. Regardless of who they" +" are, a packager uses the setup script and the :command:`bdist` command " +"family to generate built distributions." +msgstr "" +"当然,模块开发者可以是自己模块的打包者;或者打包者也可以是住在别处的“某一位”能够接触到原始开发者接触不到的特定系统平台的志愿者;或者还可以是一个定期抓取新的源代码分发版并在尽可能多的受支持系统平台上将其转换为构建分发版的软件。" +" 无论他们属于哪一种,打包者都会使用设置脚本和 :command:`bdist` 命令族来生成构建分发版。" + +#: ../../distutils/builtdist.rst:34 +msgid "" +"As a simple example, if I run the following command in the Distutils source " +"tree::" +msgstr "作为一个简单示例,如果我在 Distutils 源代码树中运行以下命令::" + +#: ../../distutils/builtdist.rst:39 +msgid "" +"then the Distutils builds my module distribution (the Distutils itself in " +"this case), does a \"fake\" installation (also in the :file:`build` " +"directory), and creates the default type of built distribution for my " +"platform. The default format for built distributions is a \"dumb\" tar file" +" on Unix, and a simple executable installer on Windows. (That tar file is " +"considered \"dumb\" because it has to be unpacked in a specific location to " +"work.)" +msgstr "" +"则 Distutils 将构建我的模块分发版(在此情况下即 Distutils 本身),执行“模拟”安装(同样是在 :file:`build` " +"目录中),并为我的系统平台创建默认类型的构建分发版。 构建分发版的默认格式在 Unix 上是一个“非自动” tar 文件,而在 Windows " +"上则是一个简单的可执行文件安装器。 (此 tar 文件被称为“非自动”是因为它必须在指定的位置上解包方可使用。)" + +#: ../../distutils/builtdist.rst:46 +msgid "" +"Thus, the above command on a Unix system creates " +":file:`Distutils-1.0.{plat}.tar.gz`; unpacking this tarball from the right " +"place installs the Distutils just as though you had downloaded the source " +"distribution and run ``python setup.py install``. (The \"right place\" is " +"either the root of the filesystem or Python's :file:`{prefix}` directory, " +"depending on the options given to the :command:`bdist_dumb` command; the " +"default is to make dumb distributions relative to :file:`{prefix}`.)" +msgstr "" +"这样,上述命令在 Unix 系统上将会创建 :file:`Distutils-1.0.{plat}.tar.gz`;在正确的位置上解包这个 tar " +"文件将会装好 Distutils,就像是你下载了源代码分发版并运行 ``python setup.py install`` 一样。 " +"(这个“正确的位置”可能是文件系统根目录或 Python 的 :file:`{prefix}` 目录,具体取决于提供给 " +":command:`bdist_dumb` 命令的选项;在默认情况下是相对于 :file:`{prefix}` 创建非自动颁发版。)" + +#: ../../distutils/builtdist.rst:54 +msgid "" +"Obviously, for pure Python distributions, this isn't any simpler than just " +"running ``python setup.py install``\\ ---but for non-pure distributions, " +"which include extensions that would need to be compiled, it can mean the " +"difference between someone being able to use your extensions or not. And " +"creating \"smart\" built distributions, such as an RPM package or an " +"executable installer for Windows, is far more convenient for users even if " +"your distribution doesn't include any extensions." +msgstr "" +"显然,对于纯粹的 Python 分发版来说,这并不比运行 ``python setup.py install`` 更简单 --- " +"但是对于包括需要被编译的扩展的非纯粹的分发版来说,就可能是有人能使用你的扩展而有人不能使用的差别。 而创建“自动”构建分发版,例如 RPM 包或 " +"Windows 的可执行文件安装器,对于用户来说就会更加方便,即使你的分发版不包括任何扩展。" + +#: ../../distutils/builtdist.rst:62 +msgid "" +"The :command:`bdist` command has a :option:`!--formats` option, similar to " +"the :command:`sdist` command, which you can use to select the types of built" +" distribution to generate: for example, ::" +msgstr "" +":command:`bdist` 命令有一个 :option:`!--formats` 选项,与 :command:`sdist` " +"命令类似,你可以用该选项来选择要生成的构建分发版类型:例如,::" + +#: ../../distutils/builtdist.rst:68 +msgid "" +"would, when run on a Unix system, create :file:`Distutils-1.0.{plat}.zip`\\ " +"---again, this archive would be unpacked from the root directory to install " +"the Distutils." +msgstr "" +"当在 Unix 系统上运行时,会再次创建 :file:`Distutils-1.0.{plat}.zip`,这个归档文件将从根目录被解包以安装 " +"Distutils。" + +#: ../../distutils/builtdist.rst:72 +msgid "The available formats for built distributions are:" +msgstr "构建分发版的可用格式有:" + +#: ../../distutils/builtdist.rst:75 +msgid "Format" +msgstr "格式" + +#: ../../distutils/builtdist.rst:75 +msgid "Description" +msgstr "描述" + +#: ../../distutils/builtdist.rst:75 +msgid "Notes" +msgstr "备注" + +#: ../../distutils/builtdist.rst:77 +msgid "``gztar``" +msgstr "``gztar``" + +#: ../../distutils/builtdist.rst:77 +msgid "gzipped tar file (:file:`.tar.gz`)" +msgstr "gzipped tar 文件 (:file:`.tar.gz`)" + +#: ../../distutils/builtdist.rst:77 +msgid "\\(1)" +msgstr "\\(1)" + +#: ../../distutils/builtdist.rst:80 +msgid "``bztar``" +msgstr "``bztar``" + +#: ../../distutils/builtdist.rst:80 +msgid "bzipped tar file (:file:`.tar.bz2`)" +msgstr "bzipped tar 文件 (:file:`.tar.bz2`)" + +#: ../../distutils/builtdist.rst:83 +msgid "``xztar``" +msgstr "``xztar``" + +#: ../../distutils/builtdist.rst:83 +msgid "xzipped tar file (:file:`.tar.xz`)" +msgstr "xzipped tar 文件 (:file:`.tar.xz`)" + +#: ../../distutils/builtdist.rst:86 +msgid "``ztar``" +msgstr "``ztar``" + +#: ../../distutils/builtdist.rst:86 +msgid "compressed tar file (:file:`.tar.Z`)" +msgstr "带压缩的 tar 文件 (:file:`.tar.Z`)" + +#: ../../distutils/builtdist.rst:86 +msgid "\\(3)" +msgstr "\\(3)" + +#: ../../distutils/builtdist.rst:89 +msgid "``tar``" +msgstr "``tar``" + +#: ../../distutils/builtdist.rst:89 +msgid "tar file (:file:`.tar`)" +msgstr "tar 文件 (:file:`.tar`)" + +#: ../../distutils/builtdist.rst:91 +msgid "``zip``" +msgstr "``zip``" + +#: ../../distutils/builtdist.rst:91 +msgid "zip file (:file:`.zip`)" +msgstr "zip 文件 (:file:`.zip`)" + +#: ../../distutils/builtdist.rst:91 +msgid "(2),(4)" +msgstr "(2),(4)" + +#: ../../distutils/builtdist.rst:93 +msgid "``rpm``" +msgstr "``rpm``" + +#: ../../distutils/builtdist.rst:93 +msgid "RPM" +msgstr "RPM" + +#: ../../distutils/builtdist.rst:93 +msgid "\\(5)" +msgstr "\\(5)" + +#: ../../distutils/builtdist.rst:95 +msgid "``pkgtool``" +msgstr "``pkgtool``" + +#: ../../distutils/builtdist.rst:95 +msgid "Solaris :program:`pkgtool`" +msgstr "Solaris :program:`pkgtool`" + +#: ../../distutils/builtdist.rst:97 +msgid "``sdux``" +msgstr "``sdux``" + +#: ../../distutils/builtdist.rst:97 +msgid "HP-UX :program:`swinstall`" +msgstr "HP-UX :program:`swinstall`" + +#: ../../distutils/builtdist.rst:99 +msgid "``wininst``" +msgstr "``wininst``" + +#: ../../distutils/builtdist.rst:99 +msgid "self-extracting ZIP file for Windows" +msgstr "Windows的自解压ZIP文件" + +#: ../../distutils/builtdist.rst:99 +msgid "\\(4)" +msgstr "\\(4)" + +#: ../../distutils/builtdist.rst:102 +msgid "``msi``" +msgstr "``msi``" + +#: ../../distutils/builtdist.rst:102 +msgid "Microsoft Installer." +msgstr "Microsoft安装程序。" + +#: ../../distutils/builtdist.rst:105 +msgid "Added support for the ``xztar`` format." +msgstr "添加了对 ``xztar`` 格式的支持" + +#: ../../distutils/builtdist.rst:109 +msgid "Notes:" +msgstr "注释:" + +#: ../../distutils/builtdist.rst:112 +msgid "default on Unix" +msgstr "默认 Unix" + +#: ../../distutils/builtdist.rst:115 +msgid "default on Windows" +msgstr "默认Windows" + +#: ../../distutils/builtdist.rst:118 +msgid "requires external :program:`compress` utility." +msgstr "需要外部 :program:`compress` 工具。" + +#: ../../distutils/builtdist.rst:121 +msgid "" +"requires either external :program:`zip` utility or :mod:`zipfile` module " +"(part of the standard Python library since Python 1.6)" +msgstr "" +"需要有外部 :program:`zip` 工具或 :mod:`zipfile` 模块(自 Python 1.6 起是标准 Python 库的一部分)" + +#: ../../distutils/builtdist.rst:125 +msgid "" +"requires external :program:`rpm` utility, version 3.0.4 or better (use ``rpm" +" --version`` to find out which version you have)" +msgstr "" +"需要有外部 :program:`rpm` 工具,版本号为 3.0.4 或以上(可使用 ``rpm --version`` 查看你所使用的版本)" + +#: ../../distutils/builtdist.rst:128 +msgid "" +"You don't have to use the :command:`bdist` command with the :option:`!--" +"formats` option; you can also use the command that directly implements the " +"format you're interested in. Some of these :command:`bdist` \"sub-" +"commands\" actually generate several similar formats; for instance, the " +":command:`bdist_dumb` command generates all the \"dumb\" archive formats " +"(``tar``, ``gztar``, ``bztar``, ``xztar``, ``ztar``, and ``zip``), and " +":command:`bdist_rpm` generates both binary and source RPMs. The " +":command:`bdist` sub-commands, and the formats generated by each, are:" +msgstr "" +"你不必附带 :option:`!--formats` 来使用 :command:`bdist` 命令;你还可以使用直接实现了你想要的特定格式的命令。 " +"某些这样的 :command:`bdist` \"子命令\" 实际上会生成几种相似的格式;例如,:command:`bdist_dumb` " +"命令将生成所有 \"非自动\" 归档格式 (``tar``, ``gztar``, ``bztar``, ``xztar``, ``ztar`` 和 " +"``zip``),而 :command:`bdist_rpm` 将同时生成二进制和源代码 RPM。 :command:`bdist` " +"子命令以及每个子命令所生成的格式如下:" + +#: ../../distutils/builtdist.rst:138 +msgid "Command" +msgstr "命令" + +#: ../../distutils/builtdist.rst:138 +msgid "Formats" +msgstr "格式" + +#: ../../distutils/builtdist.rst:140 +msgid ":command:`bdist_dumb`" +msgstr ":command:`bdist_dumb`" + +#: ../../distutils/builtdist.rst:140 +msgid "tar, gztar, bztar, xztar, ztar, zip" +msgstr "tar, gztar, bztar, xztar, ztar, zip" + +#: ../../distutils/builtdist.rst:142 +msgid ":command:`bdist_rpm`" +msgstr ":command:`bdist_rpm`" + +#: ../../distutils/builtdist.rst:142 +msgid "rpm, srpm" +msgstr "rpm, srpm" + +#: ../../distutils/builtdist.rst:144 +msgid ":command:`bdist_wininst`" +msgstr ":command:`bdist_wininst`" + +#: ../../distutils/builtdist.rst:144 +msgid "wininst" +msgstr "wininst" + +#: ../../distutils/builtdist.rst:146 +msgid ":command:`bdist_msi`" +msgstr ":command:`bdist_msi`" + +#: ../../distutils/builtdist.rst:146 +msgid "msi" +msgstr "msi" + +#: ../../distutils/builtdist.rst:150 ../../distutils/builtdist.rst:308 +#: ../../distutils/builtdist.rst:476 +msgid "bdist_wininst is deprecated since Python 3.8." +msgstr "从Python 3.8开始不推荐使用 bdist_wininst" + +#: ../../distutils/builtdist.rst:153 ../../distutils/builtdist.rst:311 +#: ../../distutils/builtdist.rst:479 +msgid "bdist_msi is deprecated since Python 3.9." +msgstr "bdist_msi 从 Python 3.9 起被弃用。" + +#: ../../distutils/builtdist.rst:155 +msgid "" +"The following sections give details on the individual :command:`bdist_\\*` " +"commands." +msgstr "以下小节提供了每个 :command:`bdist_\\*` 命令的详情。" + +#: ../../distutils/builtdist.rst:171 +msgid "Creating RPM packages" +msgstr "创建RPM软件包" + +#: ../../distutils/builtdist.rst:173 +msgid "" +"The RPM format is used by many popular Linux distributions, including Red " +"Hat, SuSE, and Mandrake. If one of these (or any of the other RPM-based " +"Linux distributions) is your usual environment, creating RPM packages for " +"other users of that same distribution is trivial. Depending on the " +"complexity of your module distribution and differences between Linux " +"distributions, you may also be able to create RPMs that work on different " +"RPM-based distributions." +msgstr "" +"RPM 格式被许多流行的 Linux 发行版所使用,包括 Red Hat, SuSE 和 Mandrake。 如果其中(或任何其他基于 RPM 的 " +"Linux 发行版)的某一个是你的常用环境,那么为相同发行版的其他用户创建 RPM 包是很容易的。 根据你的模块分发版的复杂度以及 Linux " +"发行版之间的差异性,你还可能创建适用于多个基于 RPM 的发行版的 RPM 包。" + +#: ../../distutils/builtdist.rst:180 +msgid "" +"The usual way to create an RPM of your module distribution is to run the " +":command:`bdist_rpm` command::" +msgstr "为你的模块分发版创建 RPM 的通常方式是运行 :command:`bdist_rpm` 命令::" + +#: ../../distutils/builtdist.rst:185 +msgid "or the :command:`bdist` command with the :option:`!--format` option::" +msgstr "或者 :command:`bdist` 命令附带 :option:`!--format` 选项::" + +#: ../../distutils/builtdist.rst:189 +msgid "" +"The former allows you to specify RPM-specific options; the latter allows " +"you to easily specify multiple formats in one run. If you need to do both, " +"you can explicitly specify multiple :command:`bdist_\\*` commands and their " +"options::" +msgstr "" +"前者允许你指定 RPM 专属的选项;后者允许你方便地一次性指定多种格式。 如果这两样你全都要,你可以显式地指定多个 " +":command:`bdist_\\*` 命令及其选项::" + +#: ../../distutils/builtdist.rst:196 +msgid "" +"Creating RPM packages is driven by a :file:`.spec` file, much as using the " +"Distutils is driven by the setup script. To make your life easier, the " +":command:`bdist_rpm` command normally creates a :file:`.spec` file based on " +"the information you supply in the setup script, on the command line, and in " +"any Distutils configuration files. Various options and sections in the " +":file:`.spec` file are derived from options in the setup script as follows:" +msgstr "" +"创建 RPM 包的操作是由 :file:`.spec` 文件驱动的,就像 Distutils 的使用是由 setup 脚本驱动的一样。 " +"为了让你更方便,:command:`bdist_rpm` 命令通常会根据你在 setup 脚本、命令行和任意 Distutils " +"配置文件中提供的信息创建一个 :file:`.spec` 文件。 :file:`.spec` 文件中的各种选项和小节从 setup " +"脚本中派生的情况如下:" + +#: ../../distutils/builtdist.rst:204 ../../distutils/builtdist.rst:228 +msgid "RPM :file:`.spec` file option or section" +msgstr "RPM :file:`.spec` 文件配置或选项" + +#: ../../distutils/builtdist.rst:204 +msgid "Distutils setup script option" +msgstr "Distutils安装脚本选项" + +#: ../../distutils/builtdist.rst:206 +msgid "Name" +msgstr "名称" + +#: ../../distutils/builtdist.rst:206 +msgid "``name``" +msgstr "``name``" + +#: ../../distutils/builtdist.rst:208 +msgid "Summary (in preamble)" +msgstr "摘要(在序言中)" + +#: ../../distutils/builtdist.rst:208 +msgid "``description``" +msgstr "``description``" + +#: ../../distutils/builtdist.rst:210 +msgid "Version" +msgstr "版本" + +#: ../../distutils/builtdist.rst:210 +msgid "``version``" +msgstr "``version``" + +#: ../../distutils/builtdist.rst:212 ../../distutils/builtdist.rst:235 +msgid "Vendor" +msgstr "供应商" + +#: ../../distutils/builtdist.rst:212 +msgid "" +"``author`` and ``author_email``, or --- & ``maintainer`` and " +"``maintainer_email``" +msgstr "" +"``author`` 和 ``author_email``, 或 --- & ``maintainer`` 和 ``maintainer_email``" + +#: ../../distutils/builtdist.rst:216 +msgid "Copyright" +msgstr "版权所有" + +#: ../../distutils/builtdist.rst:216 +msgid "``license``" +msgstr "``license``" + +#: ../../distutils/builtdist.rst:218 +msgid "Url" +msgstr "Url" + +#: ../../distutils/builtdist.rst:218 +msgid "``url``" +msgstr "``url``" + +#: ../../distutils/builtdist.rst:220 +msgid "%description (section)" +msgstr "%d描述(部分)" + +#: ../../distutils/builtdist.rst:220 +msgid "``long_description``" +msgstr "``long_description``" + +#: ../../distutils/builtdist.rst:223 +msgid "" +"Additionally, there are many options in :file:`.spec` files that don't have " +"corresponding options in the setup script. Most of these are handled " +"through options to the :command:`bdist_rpm` command as follows:" +msgstr "" +"此外,在 :file:`.spec` 文件中还有许多选项在 setup 脚本中没有对应的选项。 这些选项大多是通过传给 " +":command:`bdist_rpm` 命令的选项来处理的,如下所示:" + +#: ../../distutils/builtdist.rst:228 +msgid ":command:`bdist_rpm` option" +msgstr ":command:`bdist_rpm` 选项" + +#: ../../distutils/builtdist.rst:228 +msgid "default value" +msgstr "默认值" + +#: ../../distutils/builtdist.rst:231 +msgid "Release" +msgstr "发布版本" + +#: ../../distutils/builtdist.rst:231 +msgid "``release``" +msgstr "``release``" + +#: ../../distutils/builtdist.rst:231 +msgid "\"1\"" +msgstr "\"1\"" + +#: ../../distutils/builtdist.rst:233 +msgid "Group" +msgstr "组织" + +#: ../../distutils/builtdist.rst:233 +msgid "``group``" +msgstr "``group``" + +#: ../../distutils/builtdist.rst:233 +msgid "\"Development/Libraries\"" +msgstr "\"Development/Libraries\"" + +#: ../../distutils/builtdist.rst:235 +msgid "``vendor``" +msgstr "``vendor``" + +#: ../../distutils/builtdist.rst:235 +msgid "(see above)" +msgstr "(同上)" + +#: ../../distutils/builtdist.rst:237 +msgid "Packager" +msgstr "打包" + +#: ../../distutils/builtdist.rst:237 +msgid "``packager``" +msgstr "``packager``" + +#: ../../distutils/builtdist.rst:237 ../../distutils/builtdist.rst:239 +#: ../../distutils/builtdist.rst:241 ../../distutils/builtdist.rst:243 +#: ../../distutils/builtdist.rst:245 ../../distutils/builtdist.rst:247 +#: ../../distutils/builtdist.rst:249 ../../distutils/builtdist.rst:251 +msgid "(none)" +msgstr "(none)" + +#: ../../distutils/builtdist.rst:239 +msgid "Provides" +msgstr "提供" + +#: ../../distutils/builtdist.rst:239 +msgid "``provides``" +msgstr "``provides``" + +#: ../../distutils/builtdist.rst:241 +msgid "Requires" +msgstr "需求" + +#: ../../distutils/builtdist.rst:241 +msgid "``requires``" +msgstr "``requires``" + +#: ../../distutils/builtdist.rst:243 +msgid "Conflicts" +msgstr "冲突" + +#: ../../distutils/builtdist.rst:243 +msgid "``conflicts``" +msgstr "``conflicts``" + +#: ../../distutils/builtdist.rst:245 +msgid "Obsoletes" +msgstr "淘汰" + +#: ../../distutils/builtdist.rst:245 +msgid "``obsoletes``" +msgstr "``obsoletes``" + +#: ../../distutils/builtdist.rst:247 +msgid "Distribution" +msgstr " 发行" + +#: ../../distutils/builtdist.rst:247 +msgid "``distribution_name``" +msgstr "``distribution_name``" + +#: ../../distutils/builtdist.rst:249 +msgid "BuildRequires" +msgstr "构建要求" + +#: ../../distutils/builtdist.rst:249 +msgid "``build_requires``" +msgstr "``build_requires``" + +#: ../../distutils/builtdist.rst:251 +msgid "Icon" +msgstr "Icon" + +#: ../../distutils/builtdist.rst:251 +msgid "``icon``" +msgstr "``icon``" + +#: ../../distutils/builtdist.rst:254 +msgid "" +"Obviously, supplying even a few of these options on the command-line would " +"be tedious and error-prone, so it's usually best to put them in the setup " +"configuration file, :file:`setup.cfg`\\ ---see section :ref:`setup-config`." +" If you distribute or package many Python module distributions, you might " +"want to put options that apply to all of them in your personal Distutils " +"configuration file (:file:`~/.pydistutils.cfg`). If you want to temporarily" +" disable this file, you can pass the :option:`!--no-user-cfg` option to " +":file:`setup.py`." +msgstr "" +"显然,即使是在命令行中提供少量的此类选项也是很繁琐易出错的,因此通常最好是将它们放在 setup 配置文件 :file:`setup.cfg` 中,参见" +" :ref:`setup-config` 一节。 如果你要分发或打包许多 Python 模块分发版,你可能会需要将适用于所有这些分发版的选项放在你私人的" +" Distutils 配置文件中 (:file:`~/.pydistutils.cfg`)。 如果你想要临时禁用此文件,你可以将 :option:`!" +"--no-user-cfg` 选项传给 :file:`setup.py`。" + +#: ../../distutils/builtdist.rst:262 +msgid "" +"There are three steps to building a binary RPM package, all of which are " +"handled automatically by the Distutils:" +msgstr "构建一个二进制 RPM 包有三个步骤,它们全都是由 Distutils 自动处理的:" + +#: ../../distutils/builtdist.rst:265 +msgid "" +"create a :file:`.spec` file, which describes the package (analogous to the " +"Distutils setup script; in fact, much of the information in the setup " +"script winds up in the :file:`.spec` file)" +msgstr "" +"创建一个 :file:`.spec` 文件,该文件对包进行了描述(类似于 Distutils setup 脚本;实际上 setup " +"脚本中的许多信息都会出现在 :file:`.spec` 文件中)" + +#: ../../distutils/builtdist.rst:269 +msgid "create the source RPM" +msgstr "创建源 RPM" + +#: ../../distutils/builtdist.rst:271 +msgid "" +"create the \"binary\" RPM (which may or may not contain binary code, " +"depending on whether your module distribution contains Python extensions)" +msgstr "创建“二进制”RPM(其中可能包含二进制代码也可能不包含,具体取决于你的模块分发版是否包含 Python 扩展)" + +#: ../../distutils/builtdist.rst:274 +msgid "" +"Normally, RPM bundles the last two steps together; when you use the " +"Distutils, all three steps are typically bundled together." +msgstr "通常,RPM 会将后两个步骤捆绑在一起;当你使用 Distutils 时,三个步骤通常都会捆绑在一起。" + +#: ../../distutils/builtdist.rst:277 +msgid "" +"If you wish, you can separate these three steps. You can use the :option:`!" +"--spec-only` option to make :command:`bdist_rpm` just create the " +":file:`.spec` file and exit; in this case, the :file:`.spec` file will be " +"written to the \"distribution directory\"---normally :file:`dist/`, but " +"customizable with the :option:`!--dist-dir` option. (Normally, the " +":file:`.spec` file winds up deep in the \"build tree,\" in a temporary " +"directory created by :command:`bdist_rpm`.)" +msgstr "" +"如果你愿意,你也可以将这三个步骤分开。 你可以使用 :option:`!--spec-only` 选项来让 :command:`bdist_rpm` " +"只创建 :file:`.spec` 文件并退出;在这种情况下,:file:`.spec` 文件将被写到“分发目录” --- 通常为 " +":file:`dist/`,但可通过 :option:`!--dist-dir` 选项来自定义。 (通常,:file:`.spec` " +"文件会位于“构建树”的深处,在 :command:`bdist_rpm` 所创建的一个临时目录中。)" + +#: ../../distutils/builtdist.rst:305 +msgid "Creating Windows Installers" +msgstr "" + +#: ../../distutils/builtdist.rst:313 +msgid "" +"Executable installers are the natural format for binary distributions on " +"Windows. They display a nice graphical user interface, display some " +"information about the module distribution to be installed taken from the " +"metadata in the setup script, let the user select a few options, and start " +"or cancel the installation." +msgstr "" + +#: ../../distutils/builtdist.rst:319 +msgid "" +"Since the metadata is taken from the setup script, creating Windows " +"installers is usually as easy as running::" +msgstr "" + +#: ../../distutils/builtdist.rst:324 +msgid "or the :command:`bdist` command with the :option:`!--formats` option::" +msgstr "" + +#: ../../distutils/builtdist.rst:328 +msgid "" +"If you have a pure module distribution (only containing pure Python modules " +"and packages), the resulting installer will be version independent and have " +"a name like :file:`foo-1.0.win32.exe`. Note that creating ``wininst`` binary" +" distributions in only supported on Windows systems." +msgstr "" + +#: ../../distutils/builtdist.rst:333 +msgid "" +"If you have a non-pure distribution, the extensions can only be created on a" +" Windows platform, and will be Python version dependent. The installer " +"filename will reflect this and now has the form " +":file:`foo-1.0.win32-py2.0.exe`. You have to create a separate installer " +"for every Python version you want to support." +msgstr "" + +#: ../../distutils/builtdist.rst:339 +msgid "" +"The installer will try to compile pure modules into :term:`bytecode` after " +"installation on the target system in normal and optimizing mode. If you " +"don't want this to happen for some reason, you can run the " +":command:`bdist_wininst` command with the :option:`!--no-target-compile` " +"and/or the :option:`!--no-target-optimize` option." +msgstr "" + +#: ../../distutils/builtdist.rst:345 +msgid "" +"By default the installer will display the cool \"Python Powered\" logo when " +"it is run, but you can also supply your own 152x261 bitmap which must be a " +"Windows :file:`.bmp` file with the :option:`!--bitmap` option." +msgstr "" + +#: ../../distutils/builtdist.rst:349 +msgid "" +"The installer will also display a large title on the desktop background " +"window when it is run, which is constructed from the name of your " +"distribution and the version number. This can be changed to another text by" +" using the :option:`!--title` option." +msgstr "" + +#: ../../distutils/builtdist.rst:354 +msgid "" +"The installer file will be written to the \"distribution directory\" --- " +"normally :file:`dist/`, but customizable with the :option:`!--dist-dir` " +"option." +msgstr "" + +#: ../../distutils/builtdist.rst:360 +msgid "Cross-compiling on Windows" +msgstr "在 Windows 上的交叉编译" + +#: ../../distutils/builtdist.rst:362 +msgid "" +"Starting with Python 2.6, distutils is capable of cross-compiling between " +"Windows platforms. In practice, this means that with the correct tools " +"installed, you can use a 32bit version of Windows to create 64bit extensions" +" and vice-versa." +msgstr "" +"从 Python 2.6 开始,distutils 能够在不同 Windows 平台之间执行交叉编译。 实际上,这意味着只要安装了正确的工具,你可以使用" +" 32 位版 Windows 来创建 64 位的扩展或是反向操作。" + +#: ../../distutils/builtdist.rst:367 +msgid "" +"To build for an alternate platform, specify the :option:`!--plat-name` " +"option to the build command. Valid values are currently 'win32', and 'win-" +"amd64'. For example, on a 32bit version of Windows, you could execute::" +msgstr "" +"要针对替代平台进行编译,请为构建命令指定 :option:`!--plat-name` 选项。 目前的有效值为 'win32' 和d 'win-" +"amd64'。 例如,在 32 位版 Windows 上,你可以执行::" + +#: ../../distutils/builtdist.rst:373 +msgid "" +"to build a 64bit version of your extension. The Windows Installers also " +"support this option, so the command::" +msgstr "" + +#: ../../distutils/builtdist.rst:378 +msgid "" +"would create a 64bit installation executable on your 32bit version of " +"Windows." +msgstr "将在你的 32 位版 Windows 上创建一个 64 位版的安装程序可执行文件。" + +#: ../../distutils/builtdist.rst:380 +msgid "" +"To cross-compile, you must download the Python source code and cross-compile" +" Python itself for the platform you are targeting - it is not possible from " +"a binary installation of Python (as the .lib etc file for other platforms " +"are not included.) In practice, this means the user of a 32 bit operating " +"system will need to use Visual Studio 2008 to open the " +":file:`PCbuild/PCbuild.sln` solution in the Python source tree and build the" +" \"x64\" configuration of the 'pythoncore' project before cross-compiling " +"extensions is possible." +msgstr "" +"要进行交叉编译,你必须下载 Python 源代码并针对你的目标平台交叉编译 Python 本身 —— 使用 Python " +"的二进制安装版是无法做到的(因为其中不包括针对其他平台的 .lib 等文件。) 实际上,这意味着 32 位操作系统的用户将需要使用 Visual " +"Studio 2008 来打开 Python 源代码目录树下的 :file:`PCbuild/PCbuild.sln` 解决方案并构建 " +"'pythoncore' 项目的 \"x64\" 配置之后才能进行扩展的交叉编译。" + +#: ../../distutils/builtdist.rst:389 +msgid "" +"Note that by default, Visual Studio 2008 does not install 64bit compilers or" +" tools. You may need to reexecute the Visual Studio setup process and " +"select these tools (using Control Panel->[Add/Remove] Programs is a " +"convenient way to check or modify your existing install.)" +msgstr "" +"请注意在默认情况下,Visual Studio 2008 并不会安装 64 位编译器或工具。 你可能需要重新执行 Visual Studio " +"安装过程并选择这些工具(使用控制面板 -> [添加/移除] 程序是检查或修改你的现有安装的一个便捷方式。)" + +#: ../../distutils/builtdist.rst:397 +msgid "The Postinstallation script" +msgstr "安装后脚本" + +#: ../../distutils/builtdist.rst:399 +msgid "" +"Starting with Python 2.3, a postinstallation script can be specified with " +"the :option:`!--install-script` option. The basename of the script must be " +"specified, and the script filename must also be listed in the scripts " +"argument to the setup function." +msgstr "" +"从 Python 2.3 开始,可以通过 :option:`!--install-script` 选项指定一个安装后脚本。 " +"必须要指定脚本的主文件名,并且该脚本文件名还必须在传给 setup 函数的参数中列出。" + +#: ../../distutils/builtdist.rst:404 +msgid "" +"This script will be run at installation time on the target system after all " +"the files have been copied, with ``argv[1]`` set to :option:`!-install`, and" +" again at uninstallation time before the files are removed with ``argv[1]`` " +"set to :option:`!-remove`." +msgstr "" +"在安装时当所有文件拷贝完毕后该脚本将会在目标系统上运行,并将 ``argv[1]`` 设为 " +":option:`!-install`,而在卸载时当文件被移除前会再次运行并将 ``argv[1]`` 设为 :option:`!-remove`。" + +#: ../../distutils/builtdist.rst:409 +msgid "" +"The installation script runs embedded in the windows installer, every output" +" (``sys.stdout``, ``sys.stderr``) is redirected into a buffer and will be " +"displayed in the GUI after the script has finished." +msgstr "" +"安装脚本嵌入在 Windows 安装程序中运行,每个输出 (``sys.stdout``, ``sys.stderr``) " +"都会被重定向到一个缓冲区并将在脚本完成后显示到 GUI 中。" + +#: ../../distutils/builtdist.rst:413 +msgid "" +"Some functions especially useful in this context are available as additional" +" built-in functions in the installation script." +msgstr "一些在此上下文中特别有用的功能在安装脚本中作为附加内置函数被提供。" + +#: ../../distutils/builtdist.rst:420 +msgid "" +"These functions should be called when a directory or file is created by the " +"postinstall script at installation time. It will register *path* with the " +"uninstaller, so that it will be removed when the distribution is " +"uninstalled. To be safe, directories are only removed if they are empty." +msgstr "" +"这些函数应当在安装时的安装后脚本创建某个目录或文件时被调用。 它会将 *path* 注册到卸载程序,这样当分发版被卸载时它将被移除。 " +"安全起见,目录只有在为空时才会被移除。" + +#: ../../distutils/builtdist.rst:428 +msgid "" +"This function can be used to retrieve special folder locations on Windows " +"like the Start Menu or the Desktop. It returns the full path to the folder." +" *csidl_string* must be one of the following strings::" +msgstr "" +"此函数可被用来获取 Windows 中的特殊文件夹位置如 Start Menu 或 Desktop。 它将返回相应文件夹的完整路径。 " +"*csidl_string* 必须为下列字符串之一::" + +#: ../../distutils/builtdist.rst:448 +msgid "If the folder cannot be retrieved, :exc:`OSError` is raised." +msgstr "如果文件夹不能被检索到,会触发 :exc:`OSError` 。" + +#: ../../distutils/builtdist.rst:450 +msgid "" +"Which folders are available depends on the exact Windows version, and " +"probably also the configuration. For details refer to Microsoft's " +"documentation of the :c:func:`SHGetSpecialFolderPath` function." +msgstr "" +"有哪些可用的文件夹取决于的 Windows 的具体版本,并可能受特定配置的影响。 更多细节请参考 Microsoft 有关 " +":c:func:`SHGetSpecialFolderPath` 函数的文档。" + +#: ../../distutils/builtdist.rst:457 +msgid "" +"This function creates a shortcut. *target* is the path to the program to be " +"started by the shortcut. *description* is the description of the shortcut. " +"*filename* is the title of the shortcut that the user will see. *arguments* " +"specifies the command line arguments, if any. *workdir* is the working " +"directory for the program. *iconpath* is the file containing the icon for " +"the shortcut, and *iconindex* is the index of the icon in the file " +"*iconpath*. Again, for details consult the Microsoft documentation for the " +":class:`IShellLink` interface." +msgstr "" +"此函数会创建一个快捷方式。 *target* 是此快捷方式要启动的程序的路径。 *description* 是快捷方式的描述文本。 *filename*" +" 是用户将看到的快捷方式的标题。 *arguments* 指定命令行参数,如果有的话。 *workdir* 是程序的工作目录。 *iconpath* " +"是包含快捷方式的图标的文件,而 *iconindex* 是 *iconpath* 文件中图标的索引号。 同样地,更多细节请参考 Microsoft 有关" +" :class:`IShellLink` 接口的文档。" + +#: ../../distutils/builtdist.rst:468 +msgid "Vista User Access Control (UAC)" +msgstr "" + +#: ../../distutils/builtdist.rst:470 +msgid "" +"Starting with Python 2.6, bdist_wininst supports a :option:`!--user-access-" +"control` option. The default is 'none' (meaning no UAC handling is done), " +"and other valid values are 'auto' (meaning prompt for UAC elevation if " +"Python was installed for all users) and 'force' (meaning always prompt for " +"elevation)." +msgstr "" diff --git a/distutils/commandref.po b/distutils/commandref.po new file mode 100644 index 000000000..b3000e287 --- /dev/null +++ b/distutils/commandref.po @@ -0,0 +1,164 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) 2001-2022, Python Software Foundation +# This file is distributed under the same license as the Python package. +# FIRST AUTHOR , YEAR. +# +# Translators: +# Kelly Hwong , 2019 +# ppcfish , 2019 +# Freesand Leo , 2019 +# +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: Python 3.9\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2022-11-04 14:34+0000\n" +"PO-Revision-Date: 2017-02-16 17:40+0000\n" +"Last-Translator: Freesand Leo , 2019\n" +"Language-Team: Chinese (China) (https://www.transifex.com/python-doc/teams/5390/zh_CN/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: zh_CN\n" +"Plural-Forms: nplurals=1; plural=0;\n" + +#: ../../distutils/commandref.rst:5 +msgid "Command Reference" +msgstr "命令参考" + +#: ../../distutils/_setuptools_disclaimer.rst:3 +msgid "" +"This document is being retained solely until the ``setuptools`` " +"documentation at https://setuptools.readthedocs.io/en/latest/setuptools.html" +" independently covers all of the relevant information currently included " +"here." +msgstr "" +"这篇文档只有在 https://setuptools.readthedocs.io/en/latest/setuptools.html 上的 " +"``setuptools`` 文档独立涵盖此处包含的所有相关信息之前,才会单独保留。" + +#: ../../distutils/commandref.rst:24 +msgid "Installing modules: the :command:`install` command family" +msgstr "安装模块: :command:`install` 命令族" + +#: ../../distutils/commandref.rst:26 +msgid "" +"The install command ensures that the build commands have been run and then " +"runs the subcommands :command:`install_lib`, :command:`install_data` and " +":command:`install_scripts`." +msgstr "" +"install 命令会确保 build 命令已经运行,然后运行子命令 :command:`install_lib`, " +":command:`install_data` 和 :command:`install_scripts`。" + +#: ../../distutils/commandref.rst:37 +msgid ":command:`install_data`" +msgstr ":command:`install_data`" + +#: ../../distutils/commandref.rst:39 +msgid "This command installs all data files provided with the distribution." +msgstr "此命令会安装随发行包一同提供的所有数据文件。" + +#: ../../distutils/commandref.rst:45 +msgid ":command:`install_scripts`" +msgstr ":command:`install_scripts`" + +#: ../../distutils/commandref.rst:47 +msgid "This command installs all (Python) scripts in the distribution." +msgstr "此命令会安装发行包中的所有(Python)脚本。" + +#: ../../distutils/commandref.rst:56 +msgid "Creating a source distribution: the :command:`sdist` command" +msgstr "创建源码发行包: :command:`sdist` 命令" + +#: ../../distutils/commandref.rst:60 +msgid "The manifest template commands are:" +msgstr "列出的模板命令有:" + +#: ../../distutils/commandref.rst:63 +msgid "Command" +msgstr "命令" + +#: ../../distutils/commandref.rst:63 +msgid "Description" +msgstr "描述" + +#: ../../distutils/commandref.rst:65 +msgid ":command:`include pat1 pat2 ...`" +msgstr ":command:`include pat1 pat2 ...`" + +#: ../../distutils/commandref.rst:65 +msgid "include all files matching any of the listed patterns" +msgstr "包括与列出的模式匹配的所有文件" + +#: ../../distutils/commandref.rst:68 +msgid ":command:`exclude pat1 pat2 ...`" +msgstr ":command:`exclude pat1 pat2 ...`" + +#: ../../distutils/commandref.rst:68 +msgid "exclude all files matching any of the listed patterns" +msgstr "排除与列出的模式匹配的所有文件" + +#: ../../distutils/commandref.rst:71 +msgid ":command:`recursive-include dir pat1 pat2 ...`" +msgstr ":command:`recursive-include dir pat1 pat2 ...`" + +#: ../../distutils/commandref.rst:71 +msgid "include all files under *dir* matching any of the listed patterns" +msgstr "包括 *dir* 下与列出的模式匹配的所有文件" + +#: ../../distutils/commandref.rst:74 +msgid ":command:`recursive-exclude dir pat1 pat2 ...`" +msgstr ":command:`recursive-exclude dir pat1 pat2 ...`" + +#: ../../distutils/commandref.rst:74 +msgid "exclude all files under *dir* matching any of the listed patterns" +msgstr "排除 *dir* 下与列出的模式匹配的所有文件" + +#: ../../distutils/commandref.rst:77 +msgid ":command:`global-include pat1 pat2 ...`" +msgstr ":command:`global-include pat1 pat2 ...`" + +#: ../../distutils/commandref.rst:77 +msgid "" +"include all files anywhere in the source tree matching --- & any of the " +"listed patterns" +msgstr "包括与源树匹配的所有文件---和任何列出的模式" + +#: ../../distutils/commandref.rst:80 +msgid ":command:`global-exclude pat1 pat2 ...`" +msgstr ":command:`global-exclude pat1 pat2 ...`" + +#: ../../distutils/commandref.rst:80 +msgid "" +"exclude all files anywhere in the source tree matching --- & any of the " +"listed patterns" +msgstr "排除与源树匹配的所有文件---和任何列出的模式" + +#: ../../distutils/commandref.rst:83 +msgid ":command:`prune dir`" +msgstr ":command:`prune dir`" + +#: ../../distutils/commandref.rst:83 +msgid "exclude all files under *dir*" +msgstr "排除 *dir* 下的所有文件" + +#: ../../distutils/commandref.rst:85 +msgid ":command:`graft dir`" +msgstr ":command:`graft dir`" + +#: ../../distutils/commandref.rst:85 +msgid "include all files under *dir*" +msgstr "包括 *dir* 下的所有文件" + +#: ../../distutils/commandref.rst:88 +msgid "" +"The patterns here are Unix-style \"glob\" patterns: ``*`` matches any " +"sequence of regular filename characters, ``?`` matches any single regular " +"filename character, and ``[range]`` matches any of the characters in *range*" +" (e.g., ``a-z``, ``a-zA-Z``, ``a-f0-9_.``). The definition of \"regular " +"filename character\" is platform-specific: on Unix it is anything except " +"slash; on Windows anything except backslash or colon." +msgstr "" +"此处的模式是 Unix 风格的 \"glob\" 模式: ``*`` 匹配任意的常规文件名字符序列,``?`` 匹配任意单个常规文件名字符,而 " +"``[range]`` 匹配 *range* 范围内的任意字符 (例如 ``a-z``, ``a-zA-Z``, ``a-f0-9_.``)。 " +"“常规文件名字符”的定义取决于具体平台:在 Unix 上是指正斜杠以外的任何字符;在 Windows 则是指反斜杠或冒号以外的任何字符。" diff --git a/distutils/configfile.po b/distutils/configfile.po new file mode 100644 index 000000000..1686bbf7e --- /dev/null +++ b/distutils/configfile.po @@ -0,0 +1,197 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) 2001-2022, Python Software Foundation +# This file is distributed under the same license as the Python package. +# FIRST AUTHOR , YEAR. +# +# Translators: +# Jerry Chen , 2017 +# Kelly Hwong , 2019 +# Freesand Leo , 2020 +# +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: Python 3.9\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2022-11-04 14:34+0000\n" +"PO-Revision-Date: 2017-02-16 17:40+0000\n" +"Last-Translator: Freesand Leo , 2020\n" +"Language-Team: Chinese (China) (https://www.transifex.com/python-doc/teams/5390/zh_CN/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: zh_CN\n" +"Plural-Forms: nplurals=1; plural=0;\n" + +#: ../../distutils/configfile.rst:5 +msgid "Writing the Setup Configuration File" +msgstr "编写设置脚本的配置文件" + +#: ../../distutils/_setuptools_disclaimer.rst:3 +msgid "" +"This document is being retained solely until the ``setuptools`` " +"documentation at https://setuptools.readthedocs.io/en/latest/setuptools.html" +" independently covers all of the relevant information currently included " +"here." +msgstr "" +"这篇文档只有在 https://setuptools.readthedocs.io/en/latest/setuptools.html 上的 " +"``setuptools`` 文档独立涵盖此处包含的所有相关信息之前,才会单独保留。" + +#: ../../distutils/configfile.rst:9 +msgid "" +"Often, it's not possible to write down everything needed to build a " +"distribution *a priori*: you may need to get some information from the user," +" or from the user's system, in order to proceed. As long as that " +"information is fairly simple---a list of directories to search for C header " +"files or libraries, for example---then providing a configuration file, " +":file:`setup.cfg`, for users to edit is a cheap and easy way to solicit it." +" Configuration files also let you provide default values for any command " +"option, which the installer can then override either on the command-line or " +"by editing the config file." +msgstr "" +"通常,在 *事前* 就写出构建发布包所需的一切是不可能的:你可能需要从用户或者用户的系统获取一些信息,才能继续下去。 只要这些信息相当简单 —— " +"例如一个用于搜索 C 头文件或库的目录列表 —— 那么提供配置文件 :file:`setup.cfg` 供用户配置就是一个低成本且方便的解决方式。 " +"配置文件还允许你为任何命令选项提供默认值,而安装器可以通过命令行或编辑配置文件来覆盖这些默认值。" + +#: ../../distutils/configfile.rst:18 +msgid "" +"The setup configuration file is a useful middle-ground between the setup " +"script---which, ideally, would be opaque to installers [#]_---and the " +"command-line to the setup script, which is outside of your control and " +"entirely up to the installer. In fact, :file:`setup.cfg` (and any other " +"Distutils configuration files present on the target system) are processed " +"after the contents of the setup script, but before the command-line. This " +"has several useful consequences:" +msgstr "" +"安装配置文件是在安装脚本和安装脚本命令行之间一个适当的折衷方式 --- 安装脚本在理想情况下应当不受安装者的控制 [#]_ --- " +"而安装脚本命令行则在你的控制范围之外且完全取决于安装者的选择。 实际上,:file:`setup.cfg` (以及目标系统上的其他任何 " +"Distutils 配置文件) 是在配置脚本之后、命令行之前被处理。 这导致了几个有用的后果:" + +#: ../../distutils/configfile.rst:32 +msgid "" +"installers can override some of what you put in :file:`setup.py` by editing " +":file:`setup.cfg`" +msgstr "安装者可以通过编辑 :file:`setup.cfg` 来覆盖你放在 :file:`setup.py` 中的配置" + +#: ../../distutils/configfile.rst:35 +msgid "" +"you can provide non-standard defaults for options that are not easily set in" +" :file:`setup.py`" +msgstr "你可以为无法在 :file:`setup.py` 中方便设置的选项提供非标准的默认值" + +#: ../../distutils/configfile.rst:38 +msgid "" +"installers can override anything in :file:`setup.cfg` using the command-line" +" options to :file:`setup.py`" +msgstr "安装者可以使用 :file:`setup.py` 的命令行选项来覆盖 :file:`setup.cfg` 中的一切" + +#: ../../distutils/configfile.rst:41 +msgid "The basic syntax of the configuration file is simple:" +msgstr "配置文件的基本语法很简单:" + +#: ../../distutils/configfile.rst:49 +msgid "" +"where *command* is one of the Distutils commands (e.g. :command:`build_py`, " +":command:`install`), and *option* is one of the options that command " +"supports. Any number of options can be supplied for each command, and any " +"number of command sections can be included in the file. Blank lines are " +"ignored, as are comments, which run from a ``'#'`` character until the end " +"of the line. Long option values can be split across multiple lines simply " +"by indenting the continuation lines." +msgstr "" +"其中 *command* 是一个 Distutils 命令 (例如 :command:`build_py`, :command:`install`),而" +" *option* 是该命令所支持的某个选项。 可以为每个命令提供任意数量的选项,并且可以在文件中包括任意数量的命令组。 空白行会被忽略,以一个 " +"``'#'`` 开始的注释行也是如此。 长选项值可以简单地通过缩进后续行的方式被拆分为多行。" + +#: ../../distutils/configfile.rst:57 +msgid "" +"You can find out the list of options supported by a particular command with " +"the universal :option:`!--help` option, e.g." +msgstr "你可以用通用的 :option:`!--help` 选项找出特定命令所支持的选项列表,例如" + +#: ../../distutils/configfile.rst:75 +msgid "" +"Note that an option spelled :option:`!--foo-bar` on the command-line is " +"spelled ``foo_bar`` in configuration files." +msgstr "请注意在命令行中拼写为 :option:`!--foo-bar` 的选项在配置文件中会拼写为 ``foo_bar``。" + +#: ../../distutils/configfile.rst:80 +msgid "" +"For example, say you want your extensions to be built \"in-place\"---that " +"is, you have an extension :mod:`pkg.ext`, and you want the compiled " +"extension file (:file:`ext.so` on Unix, say) to be put in the same source " +"directory as your pure Python modules :mod:`pkg.mod1` and :mod:`pkg.mod2`. " +"You can always use the :option:`!--inplace` option on the command-line to " +"ensure this:" +msgstr "" +"例如,假设你希望你的扩展在“原地”构建 --- 就是说你有一个扩展 :mod:`pkg.ext`,你希望编译出的扩展文件 (例如在 Unix 上为 " +":file:`ext.so`) 放在与你的纯 Python 模块 :mod:`pkg.mod1` 和 :mod:`pkg.mod2` 相同的源目录中。 " +"你总是可以在命令行中使用 :option:`!--inplace` 选项来确保这一点:" + +#: ../../distutils/configfile.rst:90 +msgid "" +"But this requires that you always specify the :command:`build_ext` command " +"explicitly, and remember to provide :option:`!--inplace`. An easier way is " +"to \"set and forget\" this option, by encoding it in :file:`setup.cfg`, the " +"configuration file for this distribution:" +msgstr "" +"但是这要求你总是显式地指定 :command:`build_ext` 命令,并且记得提供 :option:`!--inplace`。 " +"一个更容易的方式是通过将其编码在此发布包的配置文件 :file:`setup.cfg` 中,“设置并忘记”该选项。" + +#: ../../distutils/configfile.rst:100 +msgid "" +"This will affect all builds of this module distribution, whether or not you " +"explicitly specify :command:`build_ext`. If you include :file:`setup.cfg` " +"in your source distribution, it will also affect end-user builds---which is " +"probably a bad idea for this option, since always building extensions in-" +"place would break installation of the module distribution. In certain " +"peculiar cases, though, modules are built right in their installation " +"directory, so this is conceivably a useful ability. (Distributing " +"extensions that expect to be built in their installation directory is almost" +" always a bad idea, though.)" +msgstr "" +"这将影响此模块发布包的所有构建,不论你是否显式指定 :command:`build_ext`。 如果你在你的源发布包中包括了 " +":file:`setup.cfg`,它还将影响最终用户的构建 --- 对此选项来说这可能不是个好主意,因为总是原地构建扩展会破坏模块发布包的安装。 " +"不过在某些特殊情况下,模块是在其安装目录中被构建的,因此这可能会是个有用的功能。 (但是,发布预期在其安装目录中被构建的扩展几乎总是一个坏主意。)" + +#: ../../distutils/configfile.rst:109 +msgid "" +"Another example: certain commands take a lot of options that don't change " +"from run to run; for example, :command:`bdist_rpm` needs to know everything " +"required to generate a \"spec\" file for creating an RPM distribution. Some" +" of this information comes from the setup script, and some is automatically " +"generated by the Distutils (such as the list of files installed). But some " +"of it has to be supplied as options to :command:`bdist_rpm`, which would be " +"very tedious to do on the command-line for every run. Hence, here is a " +"snippet from the Distutils' own :file:`setup.cfg`:" +msgstr "" +"另一个例子:特定的命令会接受许多在多次运行中都不发生变化的选项;例如,:command:`bdist_rpm` 需要知道为创建 RPM 发布包生成 " +"\"spec\" 文件所要求的所有信息。 这些信息有的来自安装脚本,有的由 Distutils 自动生成(例如已安装文件列表)。 但有的则必须作为 " +":command:`bdist_rpm` 的选项提供,每次运行时都在命令行中完成将会非常繁琐。 因此,这里提供 Distutils 本身的 " +":file:`setup.cfg` 中的一段代码:" + +#: ../../distutils/configfile.rst:129 +msgid "" +"Note that the ``doc_files`` option is simply a whitespace-separated string " +"split across multiple lines for readability." +msgstr "请注意 ``doc_files`` 选项只是一个空格分隔以提高可读性的多行字符串。" + +#: ../../distutils/configfile.rst:136 +msgid ":ref:`inst-config-syntax` in \"Installing Python Modules\"" +msgstr "\"安装 Python 模块\" 中的 :ref:`inst-config-syntax`" + +#: ../../distutils/configfile.rst:136 +msgid "" +"More information on the configuration files is available in the manual for " +"system administrators." +msgstr "有关配置文件的更多信息可在系统管理员手册中查看。" + +#: ../../distutils/configfile.rst:141 +msgid "Footnotes" +msgstr "脚注" + +#: ../../distutils/configfile.rst:142 +msgid "" +"This ideal probably won't be achieved until auto-configuration is fully " +"supported by the Distutils." +msgstr "在 Distutils 完全支持自动配置之前,这一理想可能是无法实现的。" diff --git a/distutils/examples.po b/distutils/examples.po new file mode 100644 index 000000000..0fbf9b86c --- /dev/null +++ b/distutils/examples.po @@ -0,0 +1,327 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) 2001-2022, Python Software Foundation +# This file is distributed under the same license as the Python package. +# FIRST AUTHOR , YEAR. +# +# Translators: +# Konge , 2019 +# Kelly Hwong , 2019 +# Freesand Leo , 2019 +# +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: Python 3.9\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2022-11-04 14:34+0000\n" +"PO-Revision-Date: 2017-02-16 17:41+0000\n" +"Last-Translator: Freesand Leo , 2019\n" +"Language-Team: Chinese (China) (https://www.transifex.com/python-doc/teams/5390/zh_CN/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: zh_CN\n" +"Plural-Forms: nplurals=1; plural=0;\n" + +#: ../../distutils/examples.rst:5 +msgid "Distutils Examples" +msgstr "Distutils 示例" + +#: ../../distutils/_setuptools_disclaimer.rst:3 +msgid "" +"This document is being retained solely until the ``setuptools`` " +"documentation at https://setuptools.readthedocs.io/en/latest/setuptools.html" +" independently covers all of the relevant information currently included " +"here." +msgstr "" +"这篇文档只有在 https://setuptools.readthedocs.io/en/latest/setuptools.html 上的 " +"``setuptools`` 文档独立涵盖此处包含的所有相关信息之前,才会单独保留。" + +#: ../../distutils/examples.rst:9 +msgid "" +"This chapter provides a number of basic examples to help get started with " +"distutils. Additional information about using distutils can be found in the" +" Distutils Cookbook." +msgstr "" +"本章节提供几个基础示例,来帮助用户入门 distutils。关于使用 distutils 的额外信息可以参考 Distutils Cookbook。" + +#: ../../distutils/examples.rst:16 +msgid "" +"`Distutils Cookbook `_" +msgstr "" +"`Distutils Cookbook `_" + +#: ../../distutils/examples.rst:17 +msgid "" +"Collection of recipes showing how to achieve more control over distutils." +msgstr "一套展示如何更好地控制和使用 distutils 的方法。" + +#: ../../distutils/examples.rst:23 +msgid "Pure Python distribution (by module)" +msgstr "纯 Python 分发(通过 module)" + +#: ../../distutils/examples.rst:25 +msgid "" +"If you're just distributing a couple of modules, especially if they don't " +"live in a particular package, you can specify them individually using the " +"``py_modules`` option in the setup script." +msgstr "如果你要分发一组模块,特别是它们不在特定的包中,你可以在配置脚本中使用 ``py_modules`` 选项单独指定它们。" + +#: ../../distutils/examples.rst:29 +msgid "" +"In the simplest case, you'll have two files to worry about: a setup script " +"and the single module you're distributing, :file:`foo.py` in this example::" +msgstr "最简单的情况下,你只用关心两个文件:一个配置脚本,和单个你要分发的模块,这个示例中的 :file:`foo.py`: :" + +#: ../../distutils/examples.rst:36 +msgid "" +"(In all diagrams in this section, ** will refer to the distribution " +"root directory.) A minimal setup script to describe this situation would " +"be::" +msgstr "(在本章节的所有图中,** 表示分发根目录。)这种情况下的一个最小配置脚本是:" + +#: ../../distutils/examples.rst:45 +msgid "" +"Note that the name of the distribution is specified independently with the " +"``name`` option, and there's no rule that says it has to be the same as the " +"name of the sole module in the distribution (although that's probably a good" +" convention to follow). However, the distribution name is used to generate " +"filenames, so you should stick to letters, digits, underscores, and hyphens." +msgstr "" +"注意分发的包名用 ``name`` " +"选项单独指定,没有规定它必须和包中单独的模块同名(虽然这也是个可以遵循的好习惯)。然而,分发名用来生成文件名,所以你应该坚持用字母、数字、下划线和连词号。" + +#: ../../distutils/examples.rst:51 +msgid "" +"Since ``py_modules`` is a list, you can of course specify multiple modules, " +"eg. if you're distributing modules :mod:`foo` and :mod:`bar`, your setup " +"might look like this::" +msgstr "" +"因为 ``py_modules`` 是个列表,你当然可以指定多个模块,比如,如果你要分发模块 :mod:`foo` 和 " +":mod:`bar`,你的配置可能是这样:" + +#: ../../distutils/examples.rst:60 +msgid "and the setup script might be ::" +msgstr "并且配置脚本是:" + +#: ../../distutils/examples.rst:68 +msgid "" +"You can put module source files into another directory, but if you have " +"enough modules to do that, it's probably easier to specify modules by " +"package rather than listing them individually." +msgstr "你可以把模块源文件放进另一个目录,但是如果你有足够的模块,也许用包指定模块更简单,而不是单独列出它们。" + +#: ../../distutils/examples.rst:76 +msgid "Pure Python distribution (by package)" +msgstr "纯 Python 分发(通过 包)" + +#: ../../distutils/examples.rst:78 +msgid "" +"If you have more than a couple of modules to distribute, especially if they " +"are in multiple packages, it's probably easier to specify whole packages " +"rather than individual modules. This works even if your modules are not in " +"a package; you can just tell the Distutils to process modules from the root " +"package, and that works the same as any other package (except that you don't" +" have to have an :file:`__init__.py` file)." +msgstr "" +"如果你有超过一组模块要分发,特别是它们在不同的包中,也许指定整个包更简单,而不是指定单独的模块。这样即使你的模块不在一个包中也有效;你可以直接令 " +"Distutils 来从根包来处理模块,并且这样对任何其他包也有效(除非你不需要 :file:`__init__.py` 文件)。" + +#: ../../distutils/examples.rst:85 +msgid "The setup script from the last example could also be written as ::" +msgstr "上一个示例的配置脚本也可以写成:" + +#: ../../distutils/examples.rst:93 +msgid "(The empty string stands for the root package.)" +msgstr "(空字符串表示根包。)" + +#: ../../distutils/examples.rst:95 +msgid "" +"If those two files are moved into a subdirectory, but remain in the root " +"package, e.g.::" +msgstr "如果两个文件移动到子目录,但是依然在根包中,如:" + +#: ../../distutils/examples.rst:103 +msgid "" +"then you would still specify the root package, but you have to tell the " +"Distutils where source files in the root package live::" +msgstr "那么你依然需要指定根包,但是你还需要告诉 Distutils 根包中的源文件在哪:" + +#: ../../distutils/examples.rst:113 +msgid "" +"More typically, though, you will want to distribute multiple modules in the " +"same package (or in sub-packages). For example, if the :mod:`foo` and " +":mod:`bar` modules belong in package :mod:`foobar`, one way to layout your " +"source tree is ::" +msgstr "" +"更一般地,你要分发多个在同一个包(或者子包)中的模块。举个例子,假设 :mod:`foo` 和 :mod:`bar` 模块属于 " +":mod:`foobar` 包,排布源文件树的一种方式是:" + +#: ../../distutils/examples.rst:125 +msgid "" +"This is in fact the default layout expected by the Distutils, and the one " +"that requires the least work to describe in your setup script::" +msgstr "这其实是 Distutils 默认的排布,也是你的配置脚本中需要的工作量最小的。" + +#: ../../distutils/examples.rst:134 +msgid "" +"If you want to put modules in directories not named for their package, then " +"you need to use the ``package_dir`` option again. For example, if the " +":file:`src` directory holds modules in the :mod:`foobar` package::" +msgstr "" +"如果你要把模块放到没有按照它们的包名命名的目录里,那你需要再次使用 ``package_dir`` 选项。比如,如果 :file:`src` 目录包含包" +" :mod:`foobar` 中的模块:" + +#: ../../distutils/examples.rst:145 +msgid "an appropriate setup script would be ::" +msgstr "一个合适的配置脚本可以是:" + +#: ../../distutils/examples.rst:154 +msgid "" +"Or, you might put modules from your main package right in the distribution " +"root::" +msgstr "或者,你可以把主包中的模块直接放到分发根目录:" + +#: ../../distutils/examples.rst:163 +msgid "in which case your setup script would be ::" +msgstr "这样你的配置文件是:" + +#: ../../distutils/examples.rst:172 +msgid "(The empty string also stands for the current directory.)" +msgstr "(空字符串同样表示当前目录。)" + +#: ../../distutils/examples.rst:174 +msgid "" +"If you have sub-packages, they must be explicitly listed in ``packages``, " +"but any entries in ``package_dir`` automatically extend to sub-packages. (In" +" other words, the Distutils does *not* scan your source tree, trying to " +"figure out which directories correspond to Python packages by looking for " +":file:`__init__.py` files.) Thus, if the default layout grows a sub-" +"package::" +msgstr "" +"如果你有子包,则它们必须显式列在 ``packages`` 中,但是 ``package_dir`` " +"中的任何条目会自动扩展到子包。(也就是说,Distutils *不会* 扫描你的源码树,而是尝试通过查找 :file:`__init__.py` " +"文件,来弄清哪些目录与 Python 包关联。)这样,如果默认排布产生一个子包:" + +#: ../../distutils/examples.rst:190 +msgid "then the corresponding setup script would be ::" +msgstr "则相应的配置脚本是:" + +#: ../../distutils/examples.rst:202 +msgid "Single extension module" +msgstr "单个扩展模块" + +#: ../../distutils/examples.rst:204 +msgid "" +"Extension modules are specified using the ``ext_modules`` option. " +"``package_dir`` has no effect on where extension source files are found; it " +"only affects the source for pure Python modules. The simplest case, a " +"single extension module in a single C source file, is::" +msgstr "" +"扩展模块用 ``ext_modules`` 选项指定。``package_dir`` 对在哪寻找扩展源文件无效;它只对纯 Python " +"模块的源文件有效。最简单的,一个用单个C源文件写的单扩展模块是:" + +#: ../../distutils/examples.rst:213 +msgid "" +"If the :mod:`foo` extension belongs in the root package, the setup script " +"for this could be ::" +msgstr "如果 :mod:`foo` 扩展属于根包,则配置脚本可以是:" + +#: ../../distutils/examples.rst:223 +msgid "" +"If the extension actually belongs in a package, say :mod:`foopkg`, then" +msgstr "如果扩展在包中,比如 :mod:`foopkg`,那么" + +#: ../../distutils/examples.rst:225 +msgid "" +"With exactly the same source tree layout, this extension can be put in the " +":mod:`foopkg` package simply by changing the name of the extension::" +msgstr "使用完全相同的源文件树排布,通过改变扩展的名字,这个扩展很容易放入 :mod:`foopkg` 包中:" + +#: ../../distutils/examples.rst:236 +msgid "Checking a package" +msgstr "检查一个包" + +#: ../../distutils/examples.rst:238 +msgid "" +"The ``check`` command allows you to verify if your package meta-data meet " +"the minimum requirements to build a distribution." +msgstr "``check`` 命令允许你校验你的包的元数据是否满足生成分发的最低要求。" + +#: ../../distutils/examples.rst:241 +msgid "" +"To run it, just call it using your :file:`setup.py` script. If something is " +"missing, ``check`` will display a warning." +msgstr "直接使用你的 :file:`setup.py` 脚本来运行它。如果缺了一些东西,``check`` 会显示警告。" + +#: ../../distutils/examples.rst:244 +msgid "Let's take an example with a simple script::" +msgstr "我们来用单个脚本举例:" + +#: ../../distutils/examples.rst:250 +msgid "Running the ``check`` command will display some warnings:" +msgstr "运行 ``check`` 命令会显示一些警告:" + +#: ../../distutils/examples.rst:261 +msgid "" +"If you use the reStructuredText syntax in the ``long_description`` field and" +" `docutils`_ is installed you can check if the syntax is fine with the " +"``check`` command, using the ``restructuredtext`` option." +msgstr "" +"如果你在 ``long_description`` 域中使用 reStructuredText 语法,并且安装了 `docutils`_ ,你可以用 " +"``check`` 命令,和 ``restructuredtext`` 选项检查语法是否正确。" + +#: ../../distutils/examples.rst:265 +msgid "For example, if the :file:`setup.py` script is changed like this::" +msgstr "比如,如果 :file:`setup.py` 脚本改成:" + +#: ../../distutils/examples.rst:280 +msgid "" +"Where the long description is broken, ``check`` will be able to detect it by" +" using the :mod:`docutils` parser:" +msgstr "长描述中有问题的地方,通过使用 :mod:`docutils` 解析器,``check`` 能进行删除:" + +#: ../../distutils/examples.rst:291 +msgid "Reading the metadata" +msgstr "读取元数据" + +#: ../../distutils/examples.rst:293 +msgid "" +"The :func:`distutils.core.setup` function provides a command-line interface " +"that allows you to query the metadata fields of a project through the " +"``setup.py`` script of a given project:" +msgstr "" +":func:`distutils.core.setup` 函数提供一个通过项目的 ``setup.py`` 脚本,来查询项目的元数据的域的命令行接口:" + +#: ../../distutils/examples.rst:302 +msgid "" +"This call reads the ``name`` metadata by running the " +":func:`distutils.core.setup` function. Although, when a source or binary " +"distribution is created with Distutils, the metadata fields are written in a" +" static file called :file:`PKG-INFO`. When a Distutils-based project is " +"installed in Python, the :file:`PKG-INFO` file is copied alongside the " +"modules and packages of the distribution under :file:`NAME-VERSION-" +"pyX.X.egg-info`, where ``NAME`` is the name of the project, ``VERSION`` its " +"version as defined in the Metadata, and ``pyX.X`` the major and minor " +"version of Python like ``2.7`` or ``3.2``." +msgstr "" +"这个调用通过运行 :func:`distutils.core.setup` 函数读取 ``name`` 元数据。然而,当源文件或者二进制分发用 " +"Distutils 创建时,元数据域写入一个名为 :file:`PKG-INFO` 的静态文件。当一个基于Distutils的项目安装在 Python " +"中时,:file:`PKG-INFO` 文件随着分发的模块和包一起复制到 :file:`NAME-VERSION-pyX.X.egg-info` " +"中,其中 ``NAME`` 是项目的名字,``VERSION`` 是元数据中定义的版本, ``pyX.X`` 则是 Python 的大版本和小版本,如 " +"``2.7`` 或者 ``3.2``。" + +#: ../../distutils/examples.rst:312 +msgid "" +"You can read back this static file, by using the " +":class:`distutils.dist.DistributionMetadata` class and its " +":func:`read_pkg_file` method::" +msgstr "" +"你可以读回静态文件,使用 :class:`distutils.dist.DistributionMetadata` 类和它的 " +":func:`read_pkg_file` 方法:" + +#: ../../distutils/examples.rst:326 +msgid "" +"Notice that the class can also be instantiated with a metadata file path to " +"loads its values::" +msgstr "注意类也可以用元数据文件载入值来实例化:" diff --git a/distutils/extending.po b/distutils/extending.po new file mode 100644 index 000000000..b1a73f9dc --- /dev/null +++ b/distutils/extending.po @@ -0,0 +1,165 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) 2001-2022, Python Software Foundation +# This file is distributed under the same license as the Python package. +# FIRST AUTHOR , YEAR. +# +# Translators: +# 刘士 , 2018 +# Kelly Hwong , 2019 +# Freesand Leo , 2019 +# +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: Python 3.9\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2022-11-04 14:34+0000\n" +"PO-Revision-Date: 2017-02-16 17:41+0000\n" +"Last-Translator: Freesand Leo , 2019\n" +"Language-Team: Chinese (China) (https://www.transifex.com/python-doc/teams/5390/zh_CN/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: zh_CN\n" +"Plural-Forms: nplurals=1; plural=0;\n" + +#: ../../distutils/extending.rst:5 +msgid "Extending Distutils" +msgstr "扩展 Distutils" + +#: ../../distutils/_setuptools_disclaimer.rst:3 +msgid "" +"This document is being retained solely until the ``setuptools`` " +"documentation at https://setuptools.readthedocs.io/en/latest/setuptools.html" +" independently covers all of the relevant information currently included " +"here." +msgstr "" +"这篇文档只有在 https://setuptools.readthedocs.io/en/latest/setuptools.html 上的 " +"``setuptools`` 文档独立涵盖此处包含的所有相关信息之前,才会单独保留。" + +#: ../../distutils/extending.rst:9 +msgid "" +"Distutils can be extended in various ways. Most extensions take the form of" +" new commands or replacements for existing commands. New commands may be " +"written to support new types of platform-specific packaging, for example, " +"while replacements for existing commands may be made to modify details of " +"how the command operates on a package." +msgstr "" +"Distutils 可以通过各种方式扩展。 大多数扩展都采用新命令或现有命令的替换形式。 " +"例如,可以编写新命令以支持新的特定于平台的包格式,但是可以修改现有命令的替换,以修改命令在包上的操作细节。" + +#: ../../distutils/extending.rst:15 +msgid "" +"Most extensions of the distutils are made within :file:`setup.py` scripts " +"that want to modify existing commands; many simply add a few file extensions" +" that should be copied into packages in addition to :file:`.py` files as a " +"convenience." +msgstr "" +"distutils 的大多数扩展都在想要修改现有命令的 :file:`setup.py` 脚本中编写;其中许多只是简单地在 :file:`.py` " +"文件以外添加了一些应当被拷贝到包中的文件后缀以便使用。" + +#: ../../distutils/extending.rst:20 +msgid "" +"Most distutils command implementations are subclasses of the " +":class:`distutils.cmd.Command` class. New commands may directly inherit " +"from :class:`Command`, while replacements often derive from :class:`Command`" +" indirectly, directly subclassing the command they are replacing. Commands " +"are required to derive from :class:`Command`." +msgstr "" +"大多部 distutils 命令的实现都是 :class:`distutils.cmd.Command` 类的子类。 新增命令可直接继承自 " +":class:`Command`,而替换命令往往间接派生自 :class:`Command`, 直接子类化它们所替换的命令。 所有命令都要求自 " +":class:`Command` 派生。" + +#: ../../distutils/extending.rst:35 +msgid "Integrating new commands" +msgstr "集成新的命令" + +#: ../../distutils/extending.rst:37 +msgid "" +"There are different ways to integrate new command implementations into " +"distutils. The most difficult is to lobby for the inclusion of the new " +"features in distutils itself, and wait for (and require) a version of Python" +" that provides that support. This is really hard for many reasons." +msgstr "" +"有多种方法可将新的命令实现集成到 distutils 中。 最困难的一种是鼓动在 distutils 自身内部包含新特性,并等待(以及要求)某个 " +"Python 版本提供该支持。 出于多种原因,这确实是相当难的。" + +#: ../../distutils/extending.rst:42 +msgid "" +"The most common, and possibly the most reasonable for most needs, is to " +"include the new implementations with your :file:`setup.py` script, and cause" +" the :func:`distutils.core.setup` function use them::" +msgstr "" +"对于大多数需求来说最为常见并且可能最为合理的一种则是通过你自己的 :file:`setup.py` 脚本来包含新的实现,然后让 " +":func:`distutils.core.setup` 函数使用它们::" + +#: ../../distutils/extending.rst:57 +msgid "" +"This approach is most valuable if the new implementations must be used to " +"use a particular package, as everyone interested in the package will need to" +" have the new command implementation." +msgstr "如果新的实现必须通过特定的包来使用则此方式最为适宜,因为每个对这个包感兴趣的人都将会需要有新的命令实现。" + +#: ../../distutils/extending.rst:61 +msgid "" +"Beginning with Python 2.4, a third option is available, intended to allow " +"new commands to be added which can support existing :file:`setup.py` scripts" +" without requiring modifications to the Python installation. This is " +"expected to allow third-party extensions to provide support for additional " +"packaging systems, but the commands can be used for anything distutils " +"commands can be used for. A new configuration option, ``command_packages`` " +"(command-line option :option:`!--command-packages`), can be used to specify " +"additional packages to be searched for modules implementing commands. Like " +"all distutils options, this can be specified on the command line or in a " +"configuration file. This option can only be set in the ``[global]`` section" +" of a configuration file, or before any commands on the command line. If " +"set in a configuration file, it can be overridden from the command line; " +"setting it to an empty string on the command line causes the default to be " +"used. This should never be set in a configuration file provided with a " +"package." +msgstr "" +"从 Python 2.4 开始,还有第三个选项可用,其目标是允许添加支持现有 :file:`setup.py` 脚本的新命令,而不需要修改 Python" +" 安装包。 这预计可允许第三方扩展提供对附加打包系统的支持,而相应命令又可用于任何 distutils 命令可被使用的地方。 新的配置选项 " +"``command_packages`` (命令行选项为 :option:`!--command-packages`) " +"可用来指定附加包,以在其中查找实现新增命令的模块。 像所有 distutils 选项一样,这可以通过命令行或配置文件来指定。 此选项只能在配置文件的 " +"``[global]`` 小节之中或在命令行的任何命令之前设置。 " +"如果是设置在配置文件中,则它可被命令行设置重载;如果在命令行中将其设为空字符串则将会使用默认值。 此选项绝不应当在随特定包提供的配置文件中设置。" + +#: ../../distutils/extending.rst:76 +msgid "" +"This new option can be used to add any number of packages to the list of " +"packages searched for command implementations; multiple package names should" +" be separated by commas. When not specified, the search is only performed " +"in the :mod:`distutils.command` package. When :file:`setup.py` is run with " +"the option ``--command-packages distcmds,buildcmds``, however, the packages " +":mod:`distutils.command`, :mod:`distcmds`, and :mod:`buildcmds` will be " +"searched in that order. New commands are expected to be implemented in " +"modules of the same name as the command by classes sharing the same name. " +"Given the example command line option above, the command " +":command:`bdist_openpkg` could be implemented by the class " +":class:`distcmds.bdist_openpkg.bdist_openpkg` or " +":class:`buildcmds.bdist_openpkg.bdist_openpkg`." +msgstr "" +"这个新选项可被用来添加任意数量的包到查找命令实现的包列表;多个包名应当以逗号分隔。 当未指明时,查找将只在 " +":mod:`distutils.command` 包中进行。 但是当 :file:`setup.py` 附带 ``--command-packages " +"distcmds,buildcmds`` 选项运行时,:mod:`distutils.command`, :mod:`distcmds` 和 " +":mod:`buildcmds` 包将按此顺序被查找。 新的命令应当在与命名同名的模块中由同名的类来实现。 给定上述示例命令行选项,则命令 " +":command:`bdist_openpkg` 可由类 :class:`distcmds.bdist_openpkg.bdist_openpkg` 或" +" :class:`buildcmds.bdist_openpkg.bdist_openpkg` 来实现。" + +#: ../../distutils/extending.rst:90 +msgid "Adding new distribution types" +msgstr "添加新的发布类型" + +#: ../../distutils/extending.rst:92 +msgid "" +"Commands that create distributions (files in the :file:`dist/` directory) " +"need to add ``(command, filename)`` pairs to " +"``self.distribution.dist_files`` so that :command:`upload` can upload it to " +"PyPI. The *filename* in the pair contains no path information, only the " +"name of the file itself. In dry-run mode, pairs should still be added to " +"represent what would have been created." +msgstr "" +"创建发布(在 :file:`dist/` 目录中的文件)的命令需要将 ``(command, filename)`` 二元组添加到 " +"``self.distribution.dist_files`` 以便 :command:`upload` 可以将其上传到 PyPI。 二元组中的 " +"*filename* 不包含路径信息而只有文件名本身。 在 dry-run 模式下,二元组仍然应当被添加以表示必须创建的内容。" diff --git a/distutils/index.po b/distutils/index.po new file mode 100644 index 000000000..030c10aab --- /dev/null +++ b/distutils/index.po @@ -0,0 +1,86 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) 2001-2022, Python Software Foundation +# This file is distributed under the same license as the Python package. +# FIRST AUTHOR , YEAR. +# +# Translators: +# cdarlint , 2017 +# Alpha Du , 2019 +# Kelly Hwong , 2019 +# Freesand Leo , 2019 +# +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: Python 3.9\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2022-11-04 14:34+0000\n" +"PO-Revision-Date: 2017-02-16 17:41+0000\n" +"Last-Translator: Freesand Leo , 2019\n" +"Language-Team: Chinese (China) (https://www.transifex.com/python-doc/teams/5390/zh_CN/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: zh_CN\n" +"Plural-Forms: nplurals=1; plural=0;\n" + +#: ../../distutils/index.rst:5 +msgid "Distributing Python Modules (Legacy version)" +msgstr "分发 Python 模块(遗留版本)" + +#: ../../distutils/index.rst:0 +msgid "Authors" +msgstr "作者" + +#: ../../distutils/index.rst:7 +msgid "Greg Ward, Anthony Baxter" +msgstr "Greg Ward , Anthony Baxter" + +#: ../../distutils/index.rst:0 +msgid "Email" +msgstr "电子邮箱" + +#: ../../distutils/index.rst:8 +msgid "distutils-sig@python.org" +msgstr "distutils-sig@python.org" + +#: ../../distutils/index.rst:12 +msgid ":ref:`distributing-index`" +msgstr ":ref:`distributing-index`" + +#: ../../distutils/index.rst:13 +msgid "The up to date module distribution documentations" +msgstr "最新的模块分发文档" + +#: ../../distutils/_setuptools_disclaimer.rst:3 +msgid "" +"This document is being retained solely until the ``setuptools`` " +"documentation at https://setuptools.readthedocs.io/en/latest/setuptools.html" +" independently covers all of the relevant information currently included " +"here." +msgstr "" +"这篇文档只有在 https://setuptools.readthedocs.io/en/latest/setuptools.html 上的 " +"``setuptools`` 文档独立涵盖此处包含的所有相关信息之前,才会单独保留。" + +#: ../../distutils/index.rst:19 +msgid "" +"This guide only covers the basic tools for building and distributing " +"extensions that are provided as part of this version of Python. Third party " +"tools offer easier to use and more secure alternatives. Refer to the `quick " +"recommendations section `__ in the Python Packaging User Guide for more " +"information." +msgstr "" +"本指南仅介绍构建和分发扩展的基本工具,这些扩展是作为此Python版本的一部分提供的。 第三方工具提供更易于使用和更安全的替代方案。有关详细信息,请参阅" +" Python 打包用户指南中的 `快速推荐部分 `__ 。" + +#: ../../distutils/index.rst:25 +msgid "" +"This document describes the Python Distribution Utilities (\"Distutils\") " +"from the module developer's point of view, describing the underlying " +"capabilities that ``setuptools`` builds on to allow Python developers to " +"make Python modules and extensions readily available to a wider audience." +msgstr "" +"本文档从模块开发人员的角度描述了 Python Distribution Utilities (\"Distutils\")。 描述了 " +"``setuptools`` 构建所依赖的下层功能,以允许 Python 开发者方便地为更广泛的受众编写 Python 模块和扩展。" diff --git a/distutils/introduction.po b/distutils/introduction.po new file mode 100644 index 000000000..629529918 --- /dev/null +++ b/distutils/introduction.po @@ -0,0 +1,392 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) 2001-2024, Python Software Foundation +# This file is distributed under the same license as the Python package. +# FIRST AUTHOR , YEAR. +# +# Translators: +# Shengjing Zhu , 2018 +# Harry Liu. , 2019 +# Leo Li , 2020 +# cdarlint , 2021 +# Dai Xu , 2021 +# Freesand Leo , 2021 +# Rafael Fontenelle , 2024 +# +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: Python 3.9\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2024-04-15 06:01+0000\n" +"PO-Revision-Date: 2017-02-16 17:41+0000\n" +"Last-Translator: Rafael Fontenelle , 2024\n" +"Language-Team: Chinese (China) (https://app.transifex.com/python-doc/teams/5390/zh_CN/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: zh_CN\n" +"Plural-Forms: nplurals=1; plural=0;\n" + +#: ../../distutils/introduction.rst:5 +msgid "An Introduction to Distutils" +msgstr "Distutils 模块介绍" + +#: ../../distutils/_setuptools_disclaimer.rst:3 +msgid "" +"This document is being retained solely until the ``setuptools`` " +"documentation at https://setuptools.readthedocs.io/en/latest/setuptools.html" +" independently covers all of the relevant information currently included " +"here." +msgstr "" +"这篇文档是历史遗留文档,在 https://setuptools.readthedocs.io/en/latest/setuptools.html 上的" +" ``setuptools`` 文档独立涵盖此处包含的所有相关信息之后,将不再单独作为正式文档保留。" + +#: ../../distutils/introduction.rst:9 +msgid "" +"This document covers using the Distutils to distribute your Python modules, " +"concentrating on the role of developer/distributor: if you're looking for " +"information on installing Python modules, you should refer to the " +":ref:`install-index` chapter." +msgstr "" +"本文档介绍了使用 Distutils 模块分发你的 Python 模块,主要是针对开发者/分发者的使用的——如果你想了解如何安装 Python " +"模块,你应该参考这个章节: :ref:`install-index`。" + +#: ../../distutils/introduction.rst:18 +msgid "Concepts & Terminology" +msgstr "概念和术语" + +#: ../../distutils/introduction.rst:20 +msgid "" +"Using the Distutils is quite simple, both for module developers and for " +"users/administrators installing third-party modules. As a developer, your " +"responsibilities (apart from writing solid, well-documented and well-tested " +"code, of course!) are:" +msgstr "" +"Distutils " +"用起来非常简单,对于模块开发者或安装第三方模块的用户/管理员均是如此。开发者的责任(当然还有编写可靠、良好文档和经过良好测试的代码!)就是:" + +#: ../../distutils/introduction.rst:25 +msgid "write a setup script (:file:`setup.py` by convention)" +msgstr "编写一个设置脚本 (:file:`setup.py` by convention)" + +#: ../../distutils/introduction.rst:27 +msgid "(optional) write a setup configuration file" +msgstr "(可选)编写设置脚本的配置文件" + +#: ../../distutils/introduction.rst:29 +msgid "create a source distribution" +msgstr "创建源码的发行版" + +#: ../../distutils/introduction.rst:31 +msgid "(optional) create one or more built (binary) distributions" +msgstr "(可选)创建一个或多个编译好(二进制)的发行版" + +#: ../../distutils/introduction.rst:33 +msgid "Each of these tasks is covered in this document." +msgstr "这些操作在此文档均有讲解。" + +#: ../../distutils/introduction.rst:35 +msgid "" +"Not all module developers have access to a multitude of platforms, so it's " +"not always feasible to expect them to create a multitude of built " +"distributions. It is hoped that a class of intermediaries, called " +"*packagers*, will arise to address this need. Packagers will take source " +"distributions released by module developers, build them on one or more " +"platforms, and release the resulting built distributions. Thus, users on " +"the most popular platforms will be able to install most popular Python " +"module distributions in the most natural way for their platform, without " +"having to run a single setup script or compile a line of code." +msgstr "" +"并非所有的模块开发者都能接触到众多的平台,所以期望他们创造众多的内置发行版不是总是可行的。最好是有一类名为 *打包者* " +"的中介,以满足这一需求。打包者将读取模块开发者发布的源代码,在一个或多个平台上进行编译,并发布构建出来的发行版。这样,最流行平台的用户就能以最自然的方式安装最流行的" +" Python 模块发行版,不必运行一段 setup 脚本或编译代码了。" + +#: ../../distutils/introduction.rst:49 +msgid "A Simple Example" +msgstr "一个简单的例子" + +#: ../../distutils/introduction.rst:51 +msgid "" +"The setup script is usually quite simple, although since it's written in " +"Python, there are no arbitrary limits to what you can do with it, though you" +" should be careful about putting arbitrarily expensive operations in your " +"setup script. Unlike, say, Autoconf-style configure scripts, the setup " +"script may be run multiple times in the course of building and installing " +"your module distribution." +msgstr "" +"setup 脚本通常很简单,尽管是用 Python 编写的,它能干的事情没有限制,当然应小心别在 setup 脚本中加入什么运行缓慢的操作。与 " +"Autoconf 风格的 configure 脚本不同,在构建和安装模块的过程中 setup 脚本可能会运行多次。" + +#: ../../distutils/introduction.rst:58 +msgid "" +"If all you want to do is distribute a module called :mod:`foo`, contained in" +" a file :file:`foo.py`, then your setup script can be as simple as this::" +msgstr "如果只想发布一个名为 :mod:`foo` 的模块,位于 :file:`foo.py` 文件中,那么 setup 脚本可以如此简单:" + +#: ../../distutils/introduction.rst:67 +msgid "Some observations:" +msgstr "注意要点:" + +#: ../../distutils/introduction.rst:69 +msgid "" +"most information that you supply to the Distutils is supplied as keyword " +"arguments to the :func:`setup` function" +msgstr "提供给 Distutils 的大部分信息将作为关键字参数发给 :func:`setup` 函数。" + +#: ../../distutils/introduction.rst:72 +msgid "" +"those keyword arguments fall into two categories: package metadata (name, " +"version number) and information about what's in the package (a list of pure " +"Python modules, in this case)" +msgstr "这些关键字参数分为两类:包的元数据(名称、版本号)和包中内容的描述信息(本例中是纯 Python 模块的列表)。" + +#: ../../distutils/introduction.rst:76 +msgid "" +"modules are specified by module name, not filename (the same will hold true " +"for packages and extensions)" +msgstr "模块由模块名指定,而不是文件名(包和扩展也是如此)。" + +#: ../../distutils/introduction.rst:79 +msgid "" +"it's recommended that you supply a little more metadata, in particular your " +"name, email address and a URL for the project (see section :ref:`setup-" +"script` for an example)" +msgstr "建议多提供一些元数据,特别是开发者姓名、电子邮件地址和项目的URL(参见 :ref:`setup-script` 中的例子)。" + +#: ../../distutils/introduction.rst:83 +msgid "" +"To create a source distribution for this module, you would create a setup " +"script, :file:`setup.py`, containing the above code, and run this command " +"from a terminal::" +msgstr "要为该模块创建一个源码发布版本,需要创建一段 setup 脚本 :file:`setup.py`,包含上述代码,然后从终端运行以下命令:" + +#: ../../distutils/introduction.rst:89 +msgid "" +"For Windows, open a command prompt window (:menuselection:`Start --> " +"Accessories`) and change the command to::" +msgstr "" +"对于 Windows 用户来说,打开命令行窗口(:menuselection:`Start --> Accessories`)并且写上如下命令::" + +#: ../../distutils/introduction.rst:94 +msgid "" +":command:`sdist` will create an archive file (e.g., tarball on Unix, ZIP " +"file on Windows) containing your setup script :file:`setup.py`, and your " +"module :file:`foo.py`. The archive file will be named :file:`foo-1.0.tar.gz`" +" (or :file:`.zip`), and will unpack into a directory :file:`foo-1.0`." +msgstr "" +":command:`sdist` 将创建一个归档文件(例如在 Unix 中为 tarball,在 Windows 中为 ZIP " +"文件),其中包含你的配置脚本 :file:`setup.py` 以及你的模块 :file:`foo.py`。 此归档文件将被命名为 " +":file:`foo-1.0.tar.gz` (或 :file:`.zip`),并将解包到目录 :file:`foo-1.0` 当中。" + +#: ../../distutils/introduction.rst:99 +msgid "" +"If an end-user wishes to install your :mod:`foo` module, all they have to do" +" is download :file:`foo-1.0.tar.gz` (or :file:`.zip`), unpack it, and---from" +" the :file:`foo-1.0` directory---run ::" +msgstr "" +"如果最终用户希望安装 :mod:`foo` 模块,只需下载 :file:`foo-1.0.tar.gz` (或 :file:`.zip` )并解压,进入" +" :file:`foo-1.0` 目录运行:" + +#: ../../distutils/introduction.rst:105 +msgid "" +"which will ultimately copy :file:`foo.py` to the appropriate directory for " +"third-party modules in their Python installation." +msgstr "这会把 :file:`foo.py` 复制到 Python 安装环境的第三方模块目录中。" + +#: ../../distutils/introduction.rst:108 +msgid "" +"This simple example demonstrates some fundamental concepts of the Distutils." +" First, both developers and installers have the same basic user interface, " +"i.e. the setup script. The difference is which Distutils *commands* they " +"use: the :command:`sdist` command is almost exclusively for module " +"developers, while :command:`install` is more often for installers (although " +"most developers will want to install their own code occasionally)." +msgstr "" +"上述简单例子展示了 Distutils 的一些基本概念。首先,开发者和安装者拥有相同的基本用户界面,即 setup 脚本。区别在于使用哪种 " +"Distutils *命令* : :command:`sdist` 命令几乎只适用于模块开发者,而 :command:`install` " +"则更适用于安装者(当然大多数开发者偶尔也想要安装自己的代码)。" + +#: ../../distutils/introduction.rst:115 +msgid "" +"If you want to make things really easy for your users, you can create one or" +" more built distributions for them. For instance, if you are running on a " +"Windows machine, and want to make things easy for other Windows users, you " +"can create an executable installer (the most appropriate type of built " +"distribution for this platform) with the :command:`bdist_wininst` command. " +"For example::" +msgstr "" + +#: ../../distutils/introduction.rst:123 +msgid "" +"will create an executable installer, :file:`foo-1.0.win32.exe`, in the " +"current directory." +msgstr "" + +#: ../../distutils/introduction.rst:126 +msgid "" +"Other useful built distribution formats are RPM, implemented by the " +":command:`bdist_rpm` command, Solaris :program:`pkgtool` " +"(:command:`bdist_pkgtool`), and HP-UX :program:`swinstall` " +"(:command:`bdist_sdux`). For example, the following command will create an " +"RPM file called :file:`foo-1.0.noarch.rpm`::" +msgstr "" +"其他有用的内置分发格式是 RPM,可由 :command:`bdist_rpm` 、Solaris " +":program:`pkgtool`(:command:`bdist_pkgtool`)和 HP-UX " +":program:`swinstall`(:command:`bdist_sdux`)实现。比如,以下命令将创建一个名为 " +":file:`foo-1.0.noarch.rpm` 的RPM文件:" + +#: ../../distutils/introduction.rst:134 +msgid "" +"(The :command:`bdist_rpm` command uses the :command:`rpm` executable, " +"therefore this has to be run on an RPM-based system such as Red Hat Linux, " +"SuSE Linux, or Mandrake Linux.)" +msgstr "" +"(:command:`bdist_rpm` 命令用到了 :command:`rpm` 可执行文件,因此必须运行在基于 RPM 的系统中,如 Red " +"Hat Linux 、 SuSE Linux 或 Mandrake Linux)。" + +#: ../../distutils/introduction.rst:138 +msgid "" +"You can find out what distribution formats are available at any time by " +"running ::" +msgstr "可以随时运行以下命令,以便了解当前可用的分发格式:" + +#: ../../distutils/introduction.rst:147 +msgid "General Python terminology" +msgstr "通用的 Python 术语" + +#: ../../distutils/introduction.rst:149 +msgid "" +"If you're reading this document, you probably have a good idea of what " +"modules, extensions, and so forth are. Nevertheless, just to be sure that " +"everyone is operating from a common starting point, we offer the following " +"glossary of common Python terms:" +msgstr "本文读者可能对模块、扩展等已有了很好的理解。但为确保所有人都站在同一起点上,下面提供了 Python 常用术语表:" + +#: ../../distutils/introduction.rst:157 +msgid "module" +msgstr "module" + +#: ../../distutils/introduction.rst:155 +msgid "" +"the basic unit of code reusability in Python: a block of code imported by " +"some other code. Three types of modules concern us here: pure Python " +"modules, extension modules, and packages." +msgstr "实现 Python 代码重用的基本单位:可被其他代码导入的一段代码。有三种类型的模块与本文有关:纯 Python 模块、扩展模块和包。" + +#: ../../distutils/introduction.rst:162 +msgid "pure Python module" +msgstr "纯 Python 模块" + +#: ../../distutils/introduction.rst:160 +msgid "" +"a module written in Python and contained in a single :file:`.py` file (and " +"possibly associated :file:`.pyc` files). Sometimes referred to as a \"pure " +"module.\"" +msgstr "" +"用 Python 编写的模块,包含在某 :file:`.py` 文件中(可能还会有相关的 :file:`.pyc` 文件)。有时被称为 \"纯模块\"。" + +#: ../../distutils/introduction.rst:170 +msgid "extension module" +msgstr "extension module -- 扩展模块" + +#: ../../distutils/introduction.rst:165 +msgid "" +"a module written in the low-level language of the Python implementation: " +"C/C++ for Python, Java for Jython. Typically contained in a single " +"dynamically loadable pre-compiled file, e.g. a shared object (:file:`.so`) " +"file for Python extensions on Unix, a DLL (given the :file:`.pyd` extension)" +" for Python extensions on Windows, or a Java class file for Jython " +"extensions. (Note that currently, the Distutils only handles C/C++ " +"extensions for Python.)" +msgstr "" +"用低级语言编写的 Python 模块。Python 用 C/C++ ,而 Jython 则用Java。通常包含在一个可动态加载的预编译文件中,比如 " +"Unix 中的 Python 扩展是一个共享对象(:file:`.so`)文件,Windows 中的 Python 扩展则是一个 DLL (扩展名为 " +":file:`.pyd` ),而 Jython 的扩展是个 Java class 文件。(注意,目前,Distutils 只处理 Python 的 " +"C/C++ 扩展。)" + +#: ../../distutils/introduction.rst:175 +msgid "package" +msgstr "包" + +#: ../../distutils/introduction.rst:173 +msgid "" +"a module that contains other modules; typically contained in a directory in " +"the filesystem and distinguished from other directories by the presence of a" +" file :file:`__init__.py`." +msgstr "包含其他模块的模块;通常位于文件系统的某个目录中,区别于其他目录的标记就是存在一个 :file:`__init__.py` 文件。" + +#: ../../distutils/introduction.rst:185 +msgid "root package" +msgstr "根包" + +#: ../../distutils/introduction.rst:178 +msgid "" +"the root of the hierarchy of packages. (This isn't really a package, since " +"it doesn't have an :file:`__init__.py` file. But we have to call it " +"something.) The vast majority of the standard library is in the root " +"package, as are many small, standalone third-party modules that don't belong" +" to a larger module collection. Unlike regular packages, modules in the root" +" package can be found in many directories: in fact, every directory listed " +"in ``sys.path`` contributes modules to the root package." +msgstr "" +"包的层次结构的根。(其并非一个真正的包,因为没有 :file:`__init__.py` 文件。但总得给它起个名字)。 " +"绝大多数标准库都在根包中,还有许多不属于任何大型模块的小型、独立的第三方模块。与普通的包不同,根包中的模块可能会在很多目录中出现:事实上,``sys.path``" +" 列出的每个目录都会为根包提供模块。" + +#: ../../distutils/introduction.rst:190 +msgid "Distutils-specific terminology" +msgstr "Distutils 特定的术语" + +#: ../../distutils/introduction.rst:192 +msgid "" +"The following terms apply more specifically to the domain of distributing " +"Python modules using the Distutils:" +msgstr "以下属于更加特别地用于 Distutils 发布 Python 模块。" + +#: ../../distutils/introduction.rst:201 +msgid "module distribution" +msgstr "模块发行版" + +#: ../../distutils/introduction.rst:196 +msgid "" +"a collection of Python modules distributed together as a single downloadable" +" resource and meant to be installed *en masse*. Examples of some well-known" +" module distributions are NumPy, SciPy, Pillow, or mxBase. (This would be " +"called a *package*, except that term is already taken in the Python context:" +" a single module distribution may contain zero, one, or many Python " +"packages.)" +msgstr "" +"一组 Python 模块,作为可下载的资源组团发布,以便 *大规模* 安装。模块发布版的著名例子是 NumPy 、 SciPy 、 Pillow 或 " +"mxBase。(这些会被称为 *package*,这个词在 Python 的语境中也使用过:一个模块发行版可能包含零个、一个或多个 Python 包。)" + +#: ../../distutils/introduction.rst:205 +msgid "pure module distribution" +msgstr "纯模块发行版" + +#: ../../distutils/introduction.rst:204 +msgid "" +"a module distribution that contains only pure Python modules and packages. " +"Sometimes referred to as a \"pure distribution.\"" +msgstr "只包含纯 Python 模块和软件包的模块发布版。有时被称为“纯发行版”。" + +#: ../../distutils/introduction.rst:209 +msgid "non-pure module distribution" +msgstr "非纯模块发行版" + +#: ../../distutils/introduction.rst:208 +msgid "" +"a module distribution that contains at least one extension module. " +"Sometimes referred to as a \"non-pure distribution.\"" +msgstr "至少包含一个扩展模块的模块发行版。 有时被称为“非纯发行版”。" + +#: ../../distutils/introduction.rst:213 +msgid "distribution root" +msgstr "根发行版" + +#: ../../distutils/introduction.rst:212 +msgid "" +"the top-level directory of your source tree (or source distribution); the " +"directory where :file:`setup.py` exists. Generally :file:`setup.py` will " +"be run from this directory." +msgstr "" +"源代码树(或源代码发行版)的顶级目录;即 :file:`setup.py` 所在的目录。 一般来说,:file:`setup.py` 会在该目录下运行。" diff --git a/distutils/packageindex.po b/distutils/packageindex.po new file mode 100644 index 000000000..c812655e2 --- /dev/null +++ b/distutils/packageindex.po @@ -0,0 +1,39 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) 2001-2022, Python Software Foundation +# This file is distributed under the same license as the Python package. +# FIRST AUTHOR , YEAR. +# +# Translators: +# Freesand Leo , 2019 +# +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: Python 3.9\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2022-11-04 14:34+0000\n" +"PO-Revision-Date: 2017-02-16 17:41+0000\n" +"Last-Translator: Freesand Leo , 2019\n" +"Language-Team: Chinese (China) (https://www.transifex.com/python-doc/teams/5390/zh_CN/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: zh_CN\n" +"Plural-Forms: nplurals=1; plural=0;\n" + +#: ../../distutils/packageindex.rst:7 +msgid "The Python Package Index (PyPI)" +msgstr "Python 包索引(PyPI)" + +#: ../../distutils/packageindex.rst:9 +msgid "" +"The `Python Package Index (PyPI)`_ stores metadata describing distributions " +"packaged with distutils and other publishing tools, as well the distribution" +" archives themselves." +msgstr "`Python 包索引 (PyPI)`_ 存储描述与 distutils 和其他发布工具一起打包的发行版的元数据,以及分发存档本身。" + +#: ../../distutils/packageindex.rst:13 +msgid "" +"References to up to date PyPI documentation can be found at " +":ref:`publishing-python-packages`." +msgstr "供参考的最新 PyPI 文档可以在 :ref:`publishing-python-packages` 找到。" diff --git a/distutils/setupscript.po b/distutils/setupscript.po new file mode 100644 index 000000000..bd2da2f85 --- /dev/null +++ b/distutils/setupscript.po @@ -0,0 +1,1175 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) 2001-2024, Python Software Foundation +# This file is distributed under the same license as the Python package. +# FIRST AUTHOR , YEAR. +# +# Translators: +# 叶浚安 , 2019 +# Zombie110year , 2019 +# ppcfish , 2019 +# Freesand Leo , 2023 +# Rafael Fontenelle , 2024 +# +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: Python 3.9\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2024-05-31 16:34+0000\n" +"PO-Revision-Date: 2017-02-16 17:41+0000\n" +"Last-Translator: Rafael Fontenelle , 2024\n" +"Language-Team: Chinese (China) (https://app.transifex.com/python-doc/teams/5390/zh_CN/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: zh_CN\n" +"Plural-Forms: nplurals=1; plural=0;\n" + +#: ../../distutils/setupscript.rst:5 +msgid "Writing the Setup Script" +msgstr "编写安装脚本" + +#: ../../distutils/_setuptools_disclaimer.rst:3 +msgid "" +"This document is being retained solely until the ``setuptools`` " +"documentation at https://setuptools.readthedocs.io/en/latest/setuptools.html" +" independently covers all of the relevant information currently included " +"here." +msgstr "" +"这篇文档是历史遗留文档,在 https://setuptools.readthedocs.io/en/latest/setuptools.html 上的" +" ``setuptools`` 文档独立涵盖此处包含的所有相关信息之后,将不再单独作为正式文档保留。" + +#: ../../distutils/setupscript.rst:9 +msgid "" +"The setup script is the centre of all activity in building, distributing, " +"and installing modules using the Distutils. The main purpose of the setup " +"script is to describe your module distribution to the Distutils, so that the" +" various commands that operate on your modules do the right thing. As we " +"saw in section :ref:`distutils-simple-example` above, the setup script " +"consists mainly of a call to :func:`setup`, and most information supplied to" +" the Distutils by the module developer is supplied as keyword arguments to " +":func:`setup`." +msgstr "" +"安装脚本是使用 Distutils 进行构建、分发和安装模块的的入口。设置脚本的主要目的是向 Distutils " +"描述如何分发您的模块,以便对您的模块进行操作的各种命令正确运行。正如我们在上面的 :ref:`distutils-simple-example` " +"部分中看到的,安装脚本主要包含对 :func:`setup` 的调用,并且模块开发人员提供给 Distutils 的大部分信息都通过关键字参数提供给 " +":func:`setup`。" + +#: ../../distutils/setupscript.rst:17 +msgid "" +"Here's a slightly more involved example, which we'll follow for the next " +"couple of sections: the Distutils' own setup script. (Keep in mind that " +"although the Distutils are included with Python 1.6 and later, they also " +"have an independent existence so that Python 1.5.2 users can use them to " +"install other module distributions. The Distutils' own setup script, shown " +"here, is used to install the package into Python 1.5.2.) ::" +msgstr "" +"这是一个略微复杂一点的例子,我们将在接下来的几节中继续追踪它:Distutils 本身的安装脚本。 (请记住,虽然 Distutils 被包括在 " +"Python 1.6 及之后的版本中,但它们也仍保存独立存在因此 Python 1.5.2 用户可以使用它们来安装其他模块分发版。 这里所演示的 " +"Distutils 本身的安装脚本,是用来将该软件包安装到 Python 1.5.2 中。) ::" + +#: ../../distutils/setupscript.rst:37 +msgid "" +"There are only two differences between this and the trivial one-file " +"distribution presented in section :ref:`distutils-simple-example`: more " +"metadata, and the specification of pure Python modules by package, rather " +"than by module. This is important since the Distutils consist of a couple " +"of dozen modules split into (so far) two packages; an explicit list of every" +" module would be tedious to generate and difficult to maintain. For more " +"information on the additional meta-data, see section :ref:`meta-data`." +msgstr "" +"这里与 :ref:`distutils-simple-example` 一节中介绍的最简版单文件分发包只有两处差异:更多的元数据,以及按包列出纯 " +"Python 模块,而非按模块列出。 这一点很重要因为 Distutils " +"是由(目前)分成两个包的几十个模块组成的;显式地列出每个模块将十分繁琐并且难以维护。 有关额外元数据的更多信息,请参阅 :ref:`meta-data`" +" 一节。" + +#: ../../distutils/setupscript.rst:45 +msgid "" +"Note that any pathnames (files or directories) supplied in the setup script " +"should be written using the Unix convention, i.e. slash-separated. The " +"Distutils will take care of converting this platform-neutral representation " +"into whatever is appropriate on your current platform before actually using " +"the pathname. This makes your setup script portable across operating " +"systems, which of course is one of the major goals of the Distutils. In " +"this spirit, all pathnames in this document are slash-separated." +msgstr "" +"请注意在 setup 脚本中提供的任何路径名称(文件或目录)都应当使用 Unix 约定来书写,即以斜杠分隔。 Distutils " +"会负责在实际使用该路径名称之前将这个与平台无关的表示形式转换为适用于你的当前平台的形式 。 这使得你的 setup " +"脚本可以在跨操作系统进行移植,这当然是 Distutils 的主要目标之一。 基于此精神,在本文档中的所有路径名称都是以斜杠分隔的。" + +#: ../../distutils/setupscript.rst:53 +msgid "" +"This, of course, only applies to pathnames given to Distutils functions. If" +" you, for example, use standard Python functions such as :func:`glob.glob` " +"or :func:`os.listdir` to specify files, you should be careful to write " +"portable code instead of hardcoding path separators::" +msgstr "" +"当然,这仅适用于提供给 Distutils 函数的路径名称。 举例来说,如果你使用标准 Python 函数例如 :func:`glob.glob` 或 " +":func:`os.listdir` 来指定文件,则你应当小心地编写可移植的代码而不是硬编码路径分隔符::" + +#: ../../distutils/setupscript.rst:65 +msgid "Listing whole packages" +msgstr "列出全部的包" + +#: ../../distutils/setupscript.rst:67 +msgid "" +"The ``packages`` option tells the Distutils to process (build, distribute, " +"install, etc.) all pure Python modules found in each package mentioned in " +"the ``packages`` list. In order to do this, of course, there has to be a " +"correspondence between package names and directories in the filesystem. The" +" default correspondence is the most obvious one, i.e. package " +":mod:`distutils` is found in the directory :file:`distutils` relative to the" +" distribution root. Thus, when you say ``packages = ['foo']`` in your setup " +"script, you are promising that the Distutils will find a file " +":file:`foo/__init__.py` (which might be spelled differently on your system, " +"but you get the idea) relative to the directory where your setup script " +"lives. If you break this promise, the Distutils will issue a warning but " +"still process the broken package anyway." +msgstr "" +"``packages`` 选项通知 Distutils 处理(构建、分发、安装等)在 ``packages`` 列表中提及的每个包中找到的所有纯 " +"Python 模块。 当然,为做到这一点,包名称和文件系统的目录之间必须保持对应关系。 默认的对应关系是很显然的,即 :mod:`distutils` " +"包即相对于分发包根目录的 :file:`distutils` 目录。 因此,当你在你的 setup 脚本中写 ``packages = " +"['foo']`` 时,你就承诺了 Distutils 将在相对于你的 setup 脚本所在目录下找到一个文件 " +":file:`foo/__init__.py` (在你的目录上可能会有不同的拼写形式,但意思已经很明白了)。 如果你违反此承诺,Distutils " +"将发出警告但无论如何仍会处理损坏的包。" + +#: ../../distutils/setupscript.rst:79 +msgid "" +"If you use a different convention to lay out your source directory, that's " +"no problem: you just have to supply the ``package_dir`` option to tell the " +"Distutils about your convention. For example, say you keep all Python " +"source under :file:`lib`, so that modules in the \"root package\" (i.e., not" +" in any package at all) are in :file:`lib`, modules in the :mod:`foo` " +"package are in :file:`lib/foo`, and so forth. Then you would put ::" +msgstr "" +"如果你使用不同的约定来布局你的源目录,那也没有问题:你只需提供 ``package_dir`` 选项来告知 Distutils 你的约定。 " +"例如,假设你将所有For example, say you keep all Python 源代码保存在 :file:`lib` " +"下,以便“根包”中的模块(即不属于任何包的模块)位于 :file:`lib` 中,:mod:`foo` 包中的模块位于 :file:`lib/foo` " +"中,依此类推。 那么你应当编写::" + +#: ../../distutils/setupscript.rst:88 +msgid "" +"in your setup script. The keys to this dictionary are package names, and an" +" empty package name stands for the root package. The values are directory " +"names relative to your distribution root. In this case, when you say " +"``packages = ['foo']``, you are promising that the file " +":file:`lib/foo/__init__.py` exists." +msgstr "" +"在你的 setup 脚本中。 这个字典的键是包名,空的包名代表根包。 字典的值是相对于你的发布包根目录的目录名。 在本例中,当你声明 " +"``packages = ['foo']`` 时,你将承诺存在 :file:`lib/foo/__init__.py` 这个文件。" + +#: ../../distutils/setupscript.rst:93 +msgid "" +"Another possible convention is to put the :mod:`foo` package right in " +":file:`lib`, the :mod:`foo.bar` package in :file:`lib/bar`, etc. This would" +" be written in the setup script as ::" +msgstr "" +"另一种可能的约定是将 :mod:`foo` 包直接放在 :file:`lib` 中,将 :mod:`foo.bar` 包放在 " +":file:`lib/bar` 中等等。 这可以在 setup 脚本中写为 ::" + +#: ../../distutils/setupscript.rst:99 +msgid "" +"A ``package: dir`` entry in the ``package_dir`` dictionary implicitly " +"applies to all packages below *package*, so the :mod:`foo.bar` case is " +"automatically handled here. In this example, having ``packages = ['foo', " +"'foo.bar']`` tells the Distutils to look for :file:`lib/__init__.py` and " +":file:`lib/bar/__init__.py`. (Keep in mind that although ``package_dir`` " +"applies recursively, you must explicitly list all packages in ``packages``: " +"the Distutils will *not* recursively scan your source tree looking for any " +"directory with an :file:`__init__.py` file.)" +msgstr "" +"``package_dir`` 字典中的 ``package: dir`` 条目隐式地应用于 *package* 以下的所有包,因而在这里 " +":mod:`foo.bar` 的情况会被自动地处理。 在这个示例中,使用 ``packages = ['foo', 'foo.bar']`` 告知 " +"Distutils 要查找 :file:`lib/__init__.py` 和 :file:`lib/bar/__init__.py`。 (请记住虽然 " +"``package_dir`` 会递归地应用,但你必须在 ``packages`` 中显式地列出所有的包:Distutils *不会* " +"递归地扫描你的源代码树来查找任何带有 :file:`__init__.py` 文件的目录。)" + +#: ../../distutils/setupscript.rst:112 +msgid "Listing individual modules" +msgstr "列出单独的模块" + +#: ../../distutils/setupscript.rst:114 +msgid "" +"For a small module distribution, you might prefer to list all modules rather" +" than listing packages---especially the case of a single module that goes in" +" the \"root package\" (i.e., no package at all). This simplest case was " +"shown in section :ref:`distutils-simple-example`; here is a slightly more " +"involved example::" +msgstr "" +"对于一个小型的模块分发包,你可能会倾向于列出所有的模块而不是只列出包 --- 特别是在“根包”中只有一个模块(即根本不存在包)的情况下。 " +"这种最简单的情况见 :ref:`distutils-simple-example` 一节;下面是一个稍微复杂一点的例子::" + +#: ../../distutils/setupscript.rst:121 +msgid "" +"This describes two modules, one of them in the \"root\" package, the other " +"in the :mod:`pkg` package. Again, the default package/directory layout " +"implies that these two modules can be found in :file:`mod1.py` and " +":file:`pkg/mod2.py`, and that :file:`pkg/__init__.py` exists as well. And " +"again, you can override the package/directory correspondence using the " +"``package_dir`` option." +msgstr "" +"这描述了两个模块,其中一个是在 \"root\" 包中,另一个是在 :mod:`pkg` 包中。 同样地,默认的包/目录布局表明这两个模块位于 " +":file:`mod1.py` 和 :file:`pkg/mod2.py` 中,并且也存在 :file:`pkg/__init__.py`。 " +"同样地,你可以使用 ``package_dir`` 选项来重载包/目录的对应关系。" + +#: ../../distutils/setupscript.rst:131 +msgid "Describing extension modules" +msgstr "描述扩展模块" + +#: ../../distutils/setupscript.rst:133 +msgid "" +"Just as writing Python extension modules is a bit more complicated than " +"writing pure Python modules, describing them to the Distutils is a bit more " +"complicated. Unlike pure modules, it's not enough just to list modules or " +"packages and expect the Distutils to go out and find the right files; you " +"have to specify the extension name, source file(s), and any compile/link " +"requirements (include directories, libraries to link with, etc.)." +msgstr "" +"正如编写Python扩展模块比编写纯Python模块要复杂一些一样,在Distutils中描述它们也要复杂一些。与纯模块不同,仅仅列出模块或包并期望Distutils出去找到正确的文件是不够的;您必须指定扩展名、源文件和任何编译/链接要求(包括要链接的目录、库等)。" + +#: ../../distutils/setupscript.rst:142 +msgid "" +"All of this is done through another keyword argument to :func:`setup`, the " +"``ext_modules`` option. ``ext_modules`` is just a list of " +":class:`~distutils.core.Extension` instances, each of which describes a " +"single extension module. Suppose your distribution includes a single " +"extension, called :mod:`foo` and implemented by :file:`foo.c`. If no " +"additional instructions to the compiler/linker are needed, describing this " +"extension is quite simple::" +msgstr "" +"所有这些都是通过 :func:`setup` 的另一个关键字参数 ``ext_modules`` 选项实现的。 ``ext_modules`` 是 由 " +":class:`~distutils.core.Extension` 实例组成的列表,每个实例描述一个扩展模块。 假设你的发行版包括一个扩展模块,名为 " +":mod:`foo` 并由 :file:`foo.c` 实现。 如果不需要编译器/链接器的额外指令,描述这个扩展很简单::" + +#: ../../distutils/setupscript.rst:152 +msgid "" +"The :class:`Extension` class can be imported from :mod:`distutils.core` " +"along with :func:`setup`. Thus, the setup script for a module distribution " +"that contains only this one extension and nothing else might be::" +msgstr "" +":class:`Extension` 类可以与 :func:`setup` 一起从 :mod:`distutils.core` 导入。 " +"因此,只包含这一个扩展而不包含其他扩展的模块分发版的安装脚本可能是::" + +#: ../../distutils/setupscript.rst:162 +msgid "" +"The :class:`Extension` class (actually, the underlying extension-building " +"machinery implemented by the :command:`build_ext` command) supports a great " +"deal of flexibility in describing Python extensions, which is explained in " +"the following sections." +msgstr "" +":class:`Extension` 类(实际上,由 :command:`build_ext` 命令实现的底层扩展构建机制)在描述 Python " +"扩展时支持很大的灵活性,这将在以下部分中进行解释。" + +#: ../../distutils/setupscript.rst:169 +msgid "Extension names and packages" +msgstr "扩展名和软件包" + +#: ../../distutils/setupscript.rst:171 +msgid "" +"The first argument to the :class:`~distutils.core.Extension` constructor is " +"always the name of the extension, including any package names. For example," +" ::" +msgstr ":class:`~distutils.core.Extension` 构造器的第一个参数始终是扩展的名称,包括任何包名称。 例如,::" + +#: ../../distutils/setupscript.rst:176 +msgid "describes an extension that lives in the root package, while ::" +msgstr "描述了根包中的一个扩展,而:::" + +#: ../../distutils/setupscript.rst:180 +msgid "" +"describes the same extension in the :mod:`pkg` package. The source files " +"and resulting object code are identical in both cases; the only difference " +"is where in the filesystem (and therefore where in Python's namespace " +"hierarchy) the resulting extension lives." +msgstr "" +"描述了 :mod:`pkg` 包中的相同扩展。 在这两种情况下,源文件和生成的目标代码是相同的;唯一的区别是所产生的扩展处在文件系统中的何处(相应地在 " +"Python 的命名空间层级结构中处在何处)。" + +#: ../../distutils/setupscript.rst:185 +msgid "" +"If you have a number of extensions all in the same package (or all under the" +" same base package), use the ``ext_package`` keyword argument to " +":func:`setup`. For example, ::" +msgstr "" +"如果在同一个包中(或在同一基本包下)有多个扩展,请使用 :func:`setup` 的关键字参数 ``ext_package``。 例如,::" + +#: ../../distutils/setupscript.rst:195 +msgid "" +"will compile :file:`foo.c` to the extension :mod:`pkg.foo`, and " +":file:`bar.c` to :mod:`pkg.subpkg.bar`." +msgstr "" +"将把 :file:`foo.c` 编译为扩展 :mod:`pkg.foo`,把 :file:`bar.c` 编译为 " +":mod:`pkg.subpkg.bar`。" + +#: ../../distutils/setupscript.rst:200 +msgid "Extension source files" +msgstr "扩展的源文件" + +#: ../../distutils/setupscript.rst:202 +msgid "" +"The second argument to the :class:`~distutils.core.Extension` constructor is" +" a list of source files. Since the Distutils currently only support C, C++," +" and Objective-C extensions, these are normally C/C++/Objective-C source " +"files. (Be sure to use appropriate extensions to distinguish C++ source " +"files: :file:`.cc` and :file:`.cpp` seem to be recognized by both Unix and " +"Windows compilers.)" +msgstr "" +":class:`~distutils.core.Extension` 构造器的第二个参数是源文件列表。 由于 Distutils 目前只支持 C、C++" +" 和 Objective-C 扩展,因此这些扩展通常是 C/C++/Objective-C 源文件。 (请确保使用适当的扩展名来区分 C++ 源文件: " +":file:`.cc` 和 :file:`.cpp` 看来能够同时被 Unix 和 Windows 编译器所识别。)" + +#: ../../distutils/setupscript.rst:209 +msgid "" +"However, you can also include SWIG interface (:file:`.i`) files in the list;" +" the :command:`build_ext` command knows how to deal with SWIG extensions: it" +" will run SWIG on the interface file and compile the resulting C/C++ file " +"into your extension." +msgstr "" +"但是,您也可以在列表中包括 SWIG 接口 (:file:`.i`) 文件;:command:`build_ext` 命令知道如何处理 SWIG " +"扩展:它将在接口文件上运行 SWIG,并将生成的 C/C++ 文件编译为你的扩展。" + +#: ../../distutils/setupscript.rst:216 +msgid "" +"This warning notwithstanding, options to SWIG can be currently passed like " +"this::" +msgstr "尽管有此警告,SWIG的选项目前可以这样传递 ::" + +#: ../../distutils/setupscript.rst:225 +msgid "Or on the commandline like this::" +msgstr "或者在命令行上,像这样 ::" + +#: ../../distutils/setupscript.rst:229 +msgid "" +"On some platforms, you can include non-source files that are processed by " +"the compiler and included in your extension. Currently, this just means " +"Windows message text (:file:`.mc`) files and resource definition " +"(:file:`.rc`) files for Visual C++. These will be compiled to binary " +"resource (:file:`.res`) files and linked into the executable." +msgstr "" +"在某些平台上,可以包含由编译器处理并包含在扩展中的非源文件。目前,这只是指Visual " +"C++的Windows消息文本(:file:`.mc`)文件和资源定义(:file:`.rc`)。这些文件将被编译为二进制资源(:file:`.res`)文件,并链接到可执行文件中。" + +#: ../../distutils/setupscript.rst:237 +msgid "Preprocessor options" +msgstr "预处理器选项" + +#: ../../distutils/setupscript.rst:239 +msgid "" +"Three optional arguments to :class:`~distutils.core.Extension` will help if " +"you need to specify include directories to search or preprocessor macros to " +"define/undefine: ``include_dirs``, ``define_macros``, and ``undef_macros``." +msgstr "" +"如果你需要指定要搜索的include目录或预处理器宏来define/undefine,那么::class:`~distutils.core.Extension`的三个可选参数将有所帮助:``include_dirs``、``define_macros``和``undef_macros``。" + +#: ../../distutils/setupscript.rst:243 +msgid "" +"For example, if your extension requires header files in the :file:`include` " +"directory under your distribution root, use the ``include_dirs`` option::" +msgstr "例如,如果你的扩展需要分发根目录下的 :file:`include` 目录中的头文件,请使用 ``include_dirs`` 选项::" + +#: ../../distutils/setupscript.rst:248 +msgid "" +"You can specify absolute directories there; if you know that your extension " +"will only be built on Unix systems with X11R6 installed to :file:`/usr`, you" +" can get away with ::" +msgstr "" +"你可以在那里指定绝对目录;如果你知道你的扩展只能在安装到 :file:`/usr` 的 X11R6 的 Unix 系统上构建,那么你就可以::" + +#: ../../distutils/setupscript.rst:254 +msgid "" +"You should avoid this sort of non-portable usage if you plan to distribute " +"your code: it's probably better to write C code like ::" +msgstr "如果你计划分发代码,应该避免这种不可移植的用法:最好像这样编写C代码 ::" + +#: ../../distutils/setupscript.rst:259 +msgid "" +"If you need to include header files from some other Python extension, you " +"can take advantage of the fact that header files are installed in a " +"consistent way by the Distutils :command:`install_headers` command. For " +"example, the Numerical Python header files are installed (on a standard Unix" +" installation) to :file:`/usr/local/include/python1.5/Numerical`. (The exact" +" location will differ according to your platform and Python installation.) " +"Since the Python include directory---\\ :file:`/usr/local/include/python1.5`" +" in this case---is always included in the search path when building Python " +"extensions, the best approach is to write C code like ::" +msgstr "" +"如果你需要包含来自其它 Python 扩展的头文件,你可以利用这样一个事实,即 Distutils :command:`install_headers`" +" 命令以一致的方式安装头文件。 例如,Numerical Python 头文件 (在标准 Unix 安装版上) 会安装到 " +":file:`/usr/local/include/python1.5/Numerical` (具体位置将根据你的平台和 Python " +"安装版而有所不同)。 由于在构建Python 扩展时,Python include 目录 --- 在本例中为 " +":file:`/usr/local/include/python1.5` --- 总是会包含在搜索路径中,因此最好的做法是像这样编写 C 代码::" + +#: ../../distutils/setupscript.rst:271 +msgid "" +"If you must put the :file:`Numerical` include directory right into your " +"header search path, though, you can find that directory using the Distutils " +":mod:`distutils.sysconfig` module::" +msgstr "" +"但是,如果必须将 :file:`Numerical` include 目录放在头文件搜索路径中,则可以使用 Distutils " +":mod:`distutils.sysconfig` 模块找到该目录::" + +#: ../../distutils/setupscript.rst:281 +msgid "" +"Even though this is quite portable---it will work on any Python " +"installation, regardless of platform---it's probably easier to just write " +"your C code in the sensible way." +msgstr "尽管这是非常可移植的——无论平台如何,它都可以在任何Python安装中工作——但以合理的方式编写C代码可能更容易。" + +#: ../../distutils/setupscript.rst:285 +msgid "" +"You can define and undefine pre-processor macros with the ``define_macros`` " +"and ``undef_macros`` options. ``define_macros`` takes a list of ``(name, " +"value)`` tuples, where ``name`` is the name of the macro to define (a " +"string) and ``value`` is its value: either a string or ``None``. (Defining " +"a macro ``FOO`` to ``None`` is the equivalent of a bare ``#define FOO`` in " +"your C source: with most compilers, this sets ``FOO`` to the string ``1``.)" +" ``undef_macros`` is just a list of macros to undefine." +msgstr "" +"您可以使用``define_macros``和``undef_macros``选项 define 和 undefine " +"预处理器宏。``define_macros``采用一个``(name, " +"value)``元组列表,其中``name``是要定义的宏的名称(字符串),``value``是其值:字符串或“``None``。(将宏``FOO``定义为``None``相当于C源代码中的空``#define" +" FOO``:对于大多数编译器,这会将``FOO``设置为字符串``1``。)``undef_macros``只是一个undefine的宏列表。" + +#: ../../distutils/setupscript.rst:293 +msgid "For example::" +msgstr "例如:" + +#: ../../distutils/setupscript.rst:300 +msgid "is the equivalent of having this at the top of every C source file::" +msgstr "相当于将其放在每个C源文件的顶部 ::" + +#: ../../distutils/setupscript.rst:309 +msgid "Library options" +msgstr "库选项" + +#: ../../distutils/setupscript.rst:311 +msgid "" +"You can also specify the libraries to link against when building your " +"extension, and the directories to search for those libraries. The " +"``libraries`` option is a list of libraries to link against, " +"``library_dirs`` is a list of directories to search for libraries at link-" +"time, and ``runtime_library_dirs`` is a list of directories to search for " +"shared (dynamically loaded) libraries at run-time." +msgstr "" +"你还可以指定在构建扩展时要链接的库,以及搜索这些库的目录。 ``libraries`` 选项是要链接的库列表,``library_dirs`` " +"是要在链接时搜索库的目录列表,``runtime_library_dirs`` 是要在运行时搜索共享(动态加载)库的目录的列表。" + +#: ../../distutils/setupscript.rst:317 +msgid "" +"For example, if you need to link against libraries known to be in the " +"standard library search path on target systems ::" +msgstr "例如,如果你需要链接到目标系统上标准库搜索路径中已知的库 ::" + +#: ../../distutils/setupscript.rst:323 +msgid "" +"If you need to link with libraries in a non-standard location, you'll have " +"to include the location in ``library_dirs``::" +msgstr "如果你需要链接到非标准位置的库,则必须将该位置包含在 ``library_dirs`` 中::" + +#: ../../distutils/setupscript.rst:330 +msgid "" +"(Again, this sort of non-portable construct should be avoided if you intend " +"to distribute your code.)" +msgstr "(同样,如果你打算分发代码,应该避免这种不可移植的构造。)" + +#: ../../distutils/setupscript.rst:337 +msgid "Other options" +msgstr "其它选项" + +#: ../../distutils/setupscript.rst:339 +msgid "" +"There are still some other options which can be used to handle special " +"cases." +msgstr "还有一些其它选项可以用于处理特殊情况。" + +#: ../../distutils/setupscript.rst:341 +msgid "" +"The ``optional`` option is a boolean; if it is true, a build failure in the " +"extension will not abort the build process, but instead simply not install " +"the failing extension." +msgstr "``optional`` 选项是一个布尔值;如果它为真值,则扩展中的生成失败不会中止生成过程,而是简单地不安装失败的扩展。" + +#: ../../distutils/setupscript.rst:345 +msgid "" +"The ``extra_objects`` option is a list of object files to be passed to the " +"linker. These files must not have extensions, as the default extension for " +"the compiler is used." +msgstr "``extra_objects`` 选项是要传递给链接器的对象文件列表。 这些文件不能有扩展名,因为使用的是编译器的默认扩展名。" + +#: ../../distutils/setupscript.rst:349 +msgid "" +"``extra_compile_args`` and ``extra_link_args`` can be used to specify " +"additional command line options for the respective compiler and linker " +"command lines." +msgstr "" +"``extra_compile_args`` 和 ``extra_link_args`` 可用于为相应的编译器和链接器命令行指定额外的命令行选项。" + +#: ../../distutils/setupscript.rst:353 +msgid "" +"``export_symbols`` is only useful on Windows. It can contain a list of " +"symbols (functions or variables) to be exported. This option is not needed " +"when building compiled extensions: Distutils will automatically add " +"``initmodule`` to the list of exported symbols." +msgstr "" +"``export_symbols`` 仅在 Windows 上适用。 它可以包含要导出的符号(函数或变量)列表。 " +"生成编译的扩展时不需要此选项:Distutils 会自动将 ``initmodule`` 添加到导出的符号列表中。" + +#: ../../distutils/setupscript.rst:358 +msgid "" +"The ``depends`` option is a list of files that the extension depends on (for" +" example header files). The build command will call the compiler on the " +"sources to rebuild extension if any on this files has been modified since " +"the previous build." +msgstr "" +"``depends`` 选项是扩展所依赖的文件列表(例如头文件)。 build " +"命令将调用源上的编译器以重新生成扩展(如果自上一次生成以来此文件上的任何扩展已被修改)。" + +#: ../../distutils/setupscript.rst:364 +msgid "Relationships between Distributions and Packages" +msgstr "分发和软件包之间的关系" + +#: ../../distutils/setupscript.rst:366 +msgid "A distribution may relate to packages in three specific ways:" +msgstr "一个分发可能以三种特定方式与软件包相关:" + +#: ../../distutils/setupscript.rst:368 +msgid "It can require packages or modules." +msgstr "它可能需要软件包或模块。" + +#: ../../distutils/setupscript.rst:370 +msgid "It can provide packages or modules." +msgstr "它可能提供软件包或模块。" + +#: ../../distutils/setupscript.rst:372 +msgid "It can obsolete packages or modules." +msgstr "它可能废弃软件包或模块。" + +#: ../../distutils/setupscript.rst:374 +msgid "" +"These relationships can be specified using keyword arguments to the " +":func:`distutils.core.setup` function." +msgstr "可以使用 :func:`distutils.core.setup` 函数的关键字参数来指定这些关系。" + +#: ../../distutils/setupscript.rst:377 +msgid "" +"Dependencies on other Python modules and packages can be specified by " +"supplying the *requires* keyword argument to :func:`setup`. The value must " +"be a list of strings. Each string specifies a package that is required, and" +" optionally what versions are sufficient." +msgstr "" +"可以通过将 *requires* 关键字参数提供给 :func:`setup` 来指定对其他 Python 模块和包的依赖关系。 其值必须是字符串列表。" +" 每个字符串都指定了所需的软件包,并可以选择哪些版本满足要求。" + +#: ../../distutils/setupscript.rst:382 +msgid "" +"To specify that any version of a module or package is required, the string " +"should consist entirely of the module or package name. Examples include " +"``'mymodule'`` and ``'xml.parsers.expat'``." +msgstr "" +"要指定需要模块或软件包的任何版本,字符串应该完全由模块或软件包的名称组成。 示例包括 ``'mymodule'`` 和 " +"``'xml.parsers.expat'``。" + +#: ../../distutils/setupscript.rst:386 +msgid "" +"If specific versions are required, a sequence of qualifiers can be supplied " +"in parentheses. Each qualifier may consist of a comparison operator and a " +"version number. The accepted comparison operators are::" +msgstr "如果需要特定的版本,可以在括号中提供一系列限定符。每个限定符可以由一个比较运算符和一个版本号组成。可接受的比较运算符为::" + +#: ../../distutils/setupscript.rst:393 +msgid "" +"These can be combined by using multiple qualifiers separated by commas (and " +"optional whitespace). In this case, all of the qualifiers must be matched; " +"a logical AND is used to combine the evaluations." +msgstr "这些可以通过使用逗号分隔的多个限定符(以及可选的空格)进行组合。在这种情况下,所有限定符都必须匹配;使用逻辑AND来组合评估。" + +#: ../../distutils/setupscript.rst:397 +msgid "Let's look at a bunch of examples:" +msgstr "让我们看一堆例子:" + +#: ../../distutils/setupscript.rst:400 +msgid "Requires Expression" +msgstr "Requires 表达式" + +#: ../../distutils/setupscript.rst:400 ../../distutils/setupscript.rst:418 +msgid "Explanation" +msgstr "说明" + +#: ../../distutils/setupscript.rst:402 +msgid "``==1.0``" +msgstr "``==1.0``" + +#: ../../distutils/setupscript.rst:402 +msgid "Only version ``1.0`` is compatible" +msgstr "只有``1.0``版本兼容" + +#: ../../distutils/setupscript.rst:404 +msgid "``>1.0, !=1.5.1, <2.0``" +msgstr "``>1.0, !=1.5.1, <2.0``" + +#: ../../distutils/setupscript.rst:404 +msgid "" +"Any version after ``1.0`` and before ``2.0`` is compatible, except ``1.5.1``" +msgstr "``1.0`` 之后和 ``2.0`` 之前的任何版本都是兼容的,``1.5.1`` 除外" + +#: ../../distutils/setupscript.rst:408 +msgid "" +"Now that we can specify dependencies, we also need to be able to specify " +"what we provide that other distributions can require. This is done using " +"the *provides* keyword argument to :func:`setup`. The value for this keyword" +" is a list of strings, each of which names a Python module or package, and " +"optionally identifies the version. If the version is not specified, it is " +"assumed to match that of the distribution." +msgstr "" +"既然我们可以指定依赖项,我们还需要能够指定我们提供的其它发行版可能需要的内容。这是通过将 *provides* 关键字参数用于 " +":func:`setup` 来完成的。 该关键字的值是一个字符串列表,每个字符串都命名一个Python模块或软件包,并可选择标识版本。 " +"如果未指定版本,则假定与该发行版的版本相匹配。" + +#: ../../distutils/setupscript.rst:415 +msgid "Some examples:" +msgstr "一些例子:" + +#: ../../distutils/setupscript.rst:418 +msgid "Provides Expression" +msgstr "Provides 表达式" + +#: ../../distutils/setupscript.rst:420 +msgid "``mypkg``" +msgstr "``mypkg``" + +#: ../../distutils/setupscript.rst:420 +msgid "Provide ``mypkg``, using the distribution version" +msgstr "Provide ``mypkg``, 使用该分发版的版本" + +#: ../../distutils/setupscript.rst:423 +msgid "``mypkg (1.1)``" +msgstr "``mypkg (1.1)``" + +#: ../../distutils/setupscript.rst:423 +msgid "Provide ``mypkg`` version 1.1, regardless of the distribution version" +msgstr "提供版本为 1.1的``mypkg``,不管分发版的版本" + +#: ../../distutils/setupscript.rst:427 +msgid "" +"A package can declare that it obsoletes other packages using the *obsoletes*" +" keyword argument. The value for this is similar to that of the *requires* " +"keyword: a list of strings giving module or package specifiers. Each " +"specifier consists of a module or package name optionally followed by one or" +" more version qualifiers. Version qualifiers are given in parentheses after" +" the module or package name." +msgstr "" +"一个软件包可以使用 *obsoletes* 关键字参数声明它已经废弃了其它软件包。它的值类似于 *requires* " +"关键字的值:一个给出模块或软件包说明符的字符串列表。每个说明符由一个模块或软件包名称组成,后面可选地跟有一个或多个版本限定符。版本限定符在模块或软件包名称后面的括号中给出。" + +#: ../../distutils/setupscript.rst:434 +msgid "" +"The versions identified by the qualifiers are those that are obsoleted by " +"the distribution being described. If no qualifiers are given, all versions " +"of the named module or package are understood to be obsoleted." +msgstr "限定符标识的版本是那些被所描述的分发版本废弃的版本。如果没有给出限定符,那么指定的模块或软件包的所有版本都被认为是废弃的。" + +#: ../../distutils/setupscript.rst:441 +msgid "Installing Scripts" +msgstr "安装脚本" + +#: ../../distutils/setupscript.rst:443 +msgid "" +"So far we have been dealing with pure and non-pure Python modules, which are" +" usually not run by themselves but imported by scripts." +msgstr "到目前为止,我们一直在处理纯Python模块和非纯Python模块,它们通常不是自己运行的,而是通过脚本导入的。" + +#: ../../distutils/setupscript.rst:446 +msgid "" +"Scripts are files containing Python source code, intended to be started from" +" the command line. Scripts don't require Distutils to do anything very " +"complicated. The only clever feature is that if the first line of the script" +" starts with ``#!`` and contains the word \"python\", the Distutils will " +"adjust the first line to refer to the current interpreter location. By " +"default, it is replaced with the current interpreter location. The " +":option:`!--executable` (or :option:`!-e`) option will allow the interpreter" +" path to be explicitly overridden." +msgstr "" +"脚本是包含Python源代码的文件,旨在从命令行启动。脚本不需要Distutils来做任何非常复杂的事情。唯一聪明的功能是,如果脚本的第一行以``#!``开头并且包含单词“python”,Distutils将调整第一行以引用当前解释器位置。默认情况下,它被替换为当前解释器位置。选项:option:`!" +"--executable`(或:option:`!-e`)将允许显式覆盖解释器路径。" + +#: ../../distutils/setupscript.rst:454 +msgid "" +"The ``scripts`` option simply is a list of files to be handled in this way." +" From the PyXML setup script::" +msgstr "``scripts`` 选项只是要以这种方式处理的文件列表。 从 PyXML 安装脚本 ::" + +#: ../../distutils/setupscript.rst:461 +msgid "" +"All the scripts will also be added to the ``MANIFEST`` file if no template " +"is provided. See :ref:`manifest`." +msgstr "如果没有提供模板,所有脚本也将被添加到 ``MANIFEST`` 文件中。请参见 :ref:`manifest`。" + +#: ../../distutils/setupscript.rst:469 +msgid "Installing Package Data" +msgstr "安装软件包数据" + +#: ../../distutils/setupscript.rst:471 +msgid "" +"Often, additional files need to be installed into a package. These files " +"are often data that's closely related to the package's implementation, or " +"text files containing documentation that might be of interest to programmers" +" using the package. These files are called :dfn:`package data`." +msgstr "" +"通常,需要将额外的文件安装到软件包中。这些文件通常是与软件包的实现密切相关的数据,或者是包含使用软件包的程序员可能感兴趣的文档的文本文件。这些文件被称为" +" :dfn:`package data`。" + +#: ../../distutils/setupscript.rst:476 +msgid "" +"Package data can be added to packages using the ``package_data`` keyword " +"argument to the :func:`setup` function. The value must be a mapping from " +"package name to a list of relative path names that should be copied into the" +" package. The paths are interpreted as relative to the directory containing" +" the package (information from the ``package_dir`` mapping is used if " +"appropriate); that is, the files are expected to be part of the package in " +"the source directories. They may contain glob patterns as well." +msgstr "" +"可以使用 :func:`setup` 函数的关键字参数 ``package_data`` 将软件包数据添加到软件包中。 " +"该值必须是从软件包名到应该复制到软件包中的相对路径名列表的映射。 路径被解释为相对于包含软件包的目录(如果合适,将使用来自 " +"``package_dir`` 映射的信息);也就是说,这些文件应该是软件包源目录中的一部分。 它们也可能包含 glob 模式。" + +#: ../../distutils/setupscript.rst:484 +msgid "" +"The path names may contain directory portions; any necessary directories " +"will be created in the installation." +msgstr "路径名称可以包含目录部分;任何必要的目录都将在安装过程中创建。" + +#: ../../distutils/setupscript.rst:487 +msgid "" +"For example, if a package should contain a subdirectory with several data " +"files, the files can be arranged like this in the source tree::" +msgstr "例如,如果一个软件包应该包含一个有多个数据文件的子目录,那么这些文件可以在源树中按如下方式排列 ::" + +#: ../../distutils/setupscript.rst:500 +msgid "The corresponding call to :func:`setup` might be::" +msgstr "对 :func:`setup` 的相应调用可能是 ::" + +#: ../../distutils/setupscript.rst:509 +msgid "" +"All the files that match ``package_data`` will be added to the ``MANIFEST`` " +"file if no template is provided. See :ref:`manifest`." +msgstr "" +"如果没有提供模板,则所有与 ``package_data`` 匹配的文件都将添加到 ``MANIFEST`` 文件中。 请参见 " +":ref:`manifest`。" + +#: ../../distutils/setupscript.rst:517 +msgid "Installing Additional Files" +msgstr "安装其它文件" + +#: ../../distutils/setupscript.rst:519 +msgid "" +"The ``data_files`` option can be used to specify additional files needed by " +"the module distribution: configuration files, message catalogs, data files, " +"anything which doesn't fit in the previous categories." +msgstr "``data_files`` 选项可用于指定模块分发所需的其它文件:配置文件、消息目录、数据文件,以及任何不属于前述类别的文件。" + +#: ../../distutils/setupscript.rst:523 +msgid "" +"``data_files`` specifies a sequence of (*directory*, *files*) pairs in the " +"following way::" +msgstr "``data_files`` 以如下方式指定 (*directory*, *files*) 对的序列::" + +#: ../../distutils/setupscript.rst:531 +msgid "" +"Each (*directory*, *files*) pair in the sequence specifies the installation " +"directory and the files to install there." +msgstr "序列中的每队(*directory*,*files*)指定安装目录和要在其中安装的文件。" + +#: ../../distutils/setupscript.rst:534 +msgid "" +"Each file name in *files* is interpreted relative to the :file:`setup.py` " +"script at the top of the package source distribution. Note that you can " +"specify the directory where the data files will be installed, but you cannot" +" rename the data files themselves." +msgstr "" +"*files* 中的每个文件名都是相对于软件包源发行版顶部的 :file:`setup.py` 脚本进行解释的。 " +"请注意,您可以指定安装数据文件的目录,但不能重命名数据文件本身。" + +#: ../../distutils/setupscript.rst:539 +msgid "" +"The *directory* should be a relative path. It is interpreted relative to the" +" installation prefix (Python's ``sys.prefix`` for system installations; " +"``site.USER_BASE`` for user installations). Distutils allows *directory* to " +"be an absolute installation path, but this is discouraged since it is " +"incompatible with the wheel packaging format. No directory information from " +"*files* is used to determine the final location of the installed file; only " +"the name of the file is used." +msgstr "" +"*directory* 应该是一个相对路径。它是相对于安装前缀来解释的(Python 的 ``sys.prefix`` " +"用于系统安装;``site.USER_BASE`` 用于用户安装)。 Distutils 允许将 *directory* " +"作为一个绝对的安装路径,但这是不鼓励的,因为它与 wheel 封装格式不兼容。不使用来自 *files* " +"的目录信息来确定已安装文件的最终位置;只使用文件的名称。" + +#: ../../distutils/setupscript.rst:547 +msgid "" +"You can specify the ``data_files`` options as a simple sequence of files " +"without specifying a target directory, but this is not recommended, and the " +":command:`install` command will print a warning in this case. To install " +"data files directly in the target directory, an empty string should be given" +" as the directory." +msgstr "" +"你可以将 ``data_files`` " +"选项指定为一个简单的文件序列,而无需指定目标目录,但不建议这样做,在这种情况下,:command:`install` 命令将打印警告。 " +"要将数据文件直接安装到目标目录中,应提供一个空字符串作为目录。" + +#: ../../distutils/setupscript.rst:553 +msgid "" +"All the files that match ``data_files`` will be added to the ``MANIFEST`` " +"file if no template is provided. See :ref:`manifest`." +msgstr "" +"如果没有提供模板,则所有与 ``data_files`` 匹配的文件都将添加到 ``MANIFEST`` 文件中。 请参见 " +":ref:`manifest`。" + +#: ../../distutils/setupscript.rst:561 +msgid "Additional meta-data" +msgstr "附加元数据" + +#: ../../distutils/setupscript.rst:563 +msgid "" +"The setup script may include additional meta-data beyond the name and " +"version. This information includes:" +msgstr "安装脚本可以包括除了名称和版本之外的附加元数据。这些信息包括:" + +#: ../../distutils/setupscript.rst:567 +msgid "Meta-Data" +msgstr "元数据" + +#: ../../distutils/setupscript.rst:567 +msgid "Description" +msgstr "描述" + +#: ../../distutils/setupscript.rst:567 +msgid "Value" +msgstr "值" + +#: ../../distutils/setupscript.rst:567 +msgid "Notes" +msgstr "备注" + +#: ../../distutils/setupscript.rst:569 +msgid "``name``" +msgstr "``name``" + +#: ../../distutils/setupscript.rst:569 +msgid "name of the package" +msgstr "包名称" + +#: ../../distutils/setupscript.rst:569 ../../distutils/setupscript.rst:571 +#: ../../distutils/setupscript.rst:573 ../../distutils/setupscript.rst:578 +#: ../../distutils/setupscript.rst:585 ../../distutils/setupscript.rst:601 +msgid "short string" +msgstr "短字符串" + +#: ../../distutils/setupscript.rst:569 ../../distutils/setupscript.rst:583 +msgid "\\(1)" +msgstr "\\(1)" + +#: ../../distutils/setupscript.rst:571 +msgid "``version``" +msgstr "``version``" + +#: ../../distutils/setupscript.rst:571 +msgid "version of this release" +msgstr "此发布的版本" + +#: ../../distutils/setupscript.rst:571 +msgid "(1)(2)" +msgstr "(1)(2)" + +#: ../../distutils/setupscript.rst:573 +msgid "``author``" +msgstr "``author``" + +#: ../../distutils/setupscript.rst:573 +msgid "package author's name" +msgstr "软件包作者的姓名" + +#: ../../distutils/setupscript.rst:573 ../../distutils/setupscript.rst:575 +#: ../../distutils/setupscript.rst:578 ../../distutils/setupscript.rst:580 +msgid "\\(3)" +msgstr "\\(3)" + +#: ../../distutils/setupscript.rst:575 +msgid "``author_email``" +msgstr "``author_email``" + +#: ../../distutils/setupscript.rst:575 +msgid "email address of the package author" +msgstr "软件包的作者的电子邮件地址" + +#: ../../distutils/setupscript.rst:575 ../../distutils/setupscript.rst:580 +msgid "email address" +msgstr "电子邮件地址" + +#: ../../distutils/setupscript.rst:578 +msgid "``maintainer``" +msgstr "``maintainer``" + +#: ../../distutils/setupscript.rst:578 +msgid "package maintainer's name" +msgstr "软件包维护者的名字" + +#: ../../distutils/setupscript.rst:580 +msgid "``maintainer_email``" +msgstr "``maintainer_email``" + +#: ../../distutils/setupscript.rst:580 +msgid "email address of the package maintainer" +msgstr "软件包维护者的电子邮件地址" + +#: ../../distutils/setupscript.rst:583 +msgid "``url``" +msgstr "``url``" + +#: ../../distutils/setupscript.rst:583 +msgid "home page for the package" +msgstr "软件包的网址" + +#: ../../distutils/setupscript.rst:583 ../../distutils/setupscript.rst:592 +msgid "URL" +msgstr "网址" + +#: ../../distutils/setupscript.rst:585 +msgid "``description``" +msgstr "``description``" + +#: ../../distutils/setupscript.rst:585 +msgid "short, summary description of the package" +msgstr "软件包的简短摘要说明" + +#: ../../distutils/setupscript.rst:589 +msgid "``long_description``" +msgstr "``long_description``" + +#: ../../distutils/setupscript.rst:589 +msgid "longer description of the package" +msgstr "软件包的详细说明" + +#: ../../distutils/setupscript.rst:589 +msgid "long string" +msgstr "长字符串" + +#: ../../distutils/setupscript.rst:589 +msgid "\\(4)" +msgstr "\\(4)" + +#: ../../distutils/setupscript.rst:592 +msgid "``download_url``" +msgstr "``download_url``" + +#: ../../distutils/setupscript.rst:592 +msgid "location where the package may be downloaded" +msgstr "可以下载软件包的网址" + +#: ../../distutils/setupscript.rst:595 +msgid "``classifiers``" +msgstr "``classifiers``" + +#: ../../distutils/setupscript.rst:595 +msgid "a list of classifiers" +msgstr "分类列表" + +#: ../../distutils/setupscript.rst:595 ../../distutils/setupscript.rst:597 +#: ../../distutils/setupscript.rst:599 +msgid "list of strings" +msgstr "字符串列表" + +#: ../../distutils/setupscript.rst:595 +msgid "(6)(7)" +msgstr "(6)(7)" + +#: ../../distutils/setupscript.rst:597 +msgid "``platforms``" +msgstr "``platforms``" + +#: ../../distutils/setupscript.rst:597 +msgid "a list of platforms" +msgstr "平台清单" + +#: ../../distutils/setupscript.rst:597 ../../distutils/setupscript.rst:599 +msgid "(6)(8)" +msgstr "(6)(8)" + +#: ../../distutils/setupscript.rst:599 +msgid "``keywords``" +msgstr "``keywords``" + +#: ../../distutils/setupscript.rst:599 +msgid "a list of keywords" +msgstr "关键字列表" + +#: ../../distutils/setupscript.rst:601 +msgid "``license``" +msgstr "``license``" + +#: ../../distutils/setupscript.rst:601 +msgid "license for the package" +msgstr "软件包许可证" + +#: ../../distutils/setupscript.rst:601 +msgid "\\(5)" +msgstr "\\(5)" + +#: ../../distutils/setupscript.rst:604 +msgid "Notes:" +msgstr "注释:" + +#: ../../distutils/setupscript.rst:607 +msgid "These fields are required." +msgstr "这些字段是必需的。" + +#: ../../distutils/setupscript.rst:610 +msgid "" +"It is recommended that versions take the form *major.minor[.patch[.sub]]*." +msgstr "建议版本采用 *major.minor[.patch[.sub]]* 的形式。" + +#: ../../distutils/setupscript.rst:613 +msgid "" +"Either the author or the maintainer must be identified. If maintainer is " +"provided, distutils lists it as the author in :file:`PKG-INFO`." +msgstr "必须确定作者或维护者。如果提供了维护者,distutils 会在 :file:`PKG-INFO` 中将其列为作者。" + +#: ../../distutils/setupscript.rst:617 +msgid "" +"The ``long_description`` field is used by PyPI when you publish a package, " +"to build its project page." +msgstr "PyPI在发布软件包时使用``long_description``字段来构建其项目页面。" + +#: ../../distutils/setupscript.rst:621 +msgid "" +"The ``license`` field is a text indicating the license covering the package " +"where the license is not a selection from the \"License\" Trove classifiers." +" See the ``Classifier`` field. Notice that there's a ``licence`` " +"distribution option which is deprecated but still acts as an alias for " +"``license``." +msgstr "" +"``license`` 字段是一个文本,指示软件包中的许可证,其中该许可证不是从 “license” Trove分类器中选择的。请参见 " +"``Classifier`` 字段。 请注意,有一个 ``licence`` 分发选项,该选项已被弃用,但仍充当 ``license`` 字段的别名。" + +#: ../../distutils/setupscript.rst:628 +msgid "This field must be a list." +msgstr "此字段必须是一个列表。" + +#: ../../distutils/setupscript.rst:631 +msgid "" +"The valid classifiers are listed on `PyPI `_." +msgstr "有效的分类器在 `PyPI `_ 上列出。" + +#: ../../distutils/setupscript.rst:635 +msgid "" +"To preserve backward compatibility, this field also accepts a string. If you" +" pass a comma-separated string ``'foo, bar'``, it will be converted to " +"``['foo', 'bar']``, Otherwise, it will be converted to a list of one string." +msgstr "" +"为了保持向后兼容性,此字段还接受一个字符串。如果传递逗号分隔的字符串``'foo, bar'``,它将被转换为``['foo', " +"'bar']``,否则,它将转换为一个字符串列表。" + +#: ../../distutils/setupscript.rst:641 +msgid "'short string'" +msgstr "'短字符串'" + +#: ../../distutils/setupscript.rst:641 +msgid "A single line of text, not more than 200 characters." +msgstr "一行文字,不超过200个字符。" + +#: ../../distutils/setupscript.rst:645 +msgid "'long string'" +msgstr "'长字符串'" + +#: ../../distutils/setupscript.rst:644 +msgid "" +"Multiple lines of plain text in reStructuredText format (see " +"http://docutils.sourceforge.net/)." +msgstr "" + +#: ../../distutils/setupscript.rst:648 +msgid "'list of strings'" +msgstr "'字符串列表'" + +#: ../../distutils/setupscript.rst:648 +msgid "See below." +msgstr "请参见下文。" + +#: ../../distutils/setupscript.rst:650 +msgid "" +"Encoding the version information is an art in itself. Python packages " +"generally adhere to the version format *major.minor[.patch][sub]*. The major" +" number is 0 for initial, experimental releases of software. It is " +"incremented for releases that represent major milestones in a package. The " +"minor number is incremented when important new features are added to the " +"package. The patch number increments when bug-fix releases are made. " +"Additional trailing version information is sometimes used to indicate sub-" +"releases. These are \"a1,a2,...,aN\" (for alpha releases, where " +"functionality and API may change), \"b1,b2,...,bN\" (for beta releases, " +"which only fix bugs) and \"pr1,pr2,...,prN\" (for final pre-release release " +"testing). Some examples:" +msgstr "" +"对版本信息进行编码本身就是一门艺术。Python包通常遵循版本格式 *major.minor[.patch][sub]* " +"。初始的、实验性的软件版本的主数字是0。对于表示包中主要里程碑的版本,主版本会递增。当重要的新特性添加到包中时,次版本编号会增加。当发布错误修复程序时,补丁编号会增加。附加的尾随版本信息有时用于指示子版本。这些是“a1,a2,…,aN”(对于alpha版本,功能和API可能会更改),“b1,b2,…,bN”(针对beta版本,它只修复了错误)和“pr1,pr2,……,prN”(用于最终的预发布测试)。一些例子:" + +#: ../../distutils/setupscript.rst:662 +msgid "0.1.0" +msgstr "0.1.0" + +#: ../../distutils/setupscript.rst:662 +msgid "the first, experimental release of a package" +msgstr "一个软件包的第一个实验性发布" + +#: ../../distutils/setupscript.rst:665 +msgid "1.0.1a2" +msgstr "1.0.1a2" + +#: ../../distutils/setupscript.rst:665 +msgid "the second alpha release of the first patch version of 1.0" +msgstr "1.0的第一个补丁版本的第二个alpha版本" + +#: ../../distutils/setupscript.rst:667 +msgid "``classifiers`` must be specified in a list::" +msgstr "``classifiers`` 必须在列表中指定 ::" + +#: ../../distutils/setupscript.rst:688 +msgid "" +":class:`~distutils.core.setup` now warns when ``classifiers``, ``keywords`` " +"or ``platforms`` fields are not specified as a list or a string." +msgstr "" +"现在 :class:`~distutils.core.setup` 在 ``classifiers``、``keywords`` 或 " +"``platforms`` 字段未指定为列表或字符串时发出警告。" + +#: ../../distutils/setupscript.rst:695 +msgid "Debugging the setup script" +msgstr "调试安装脚本" + +#: ../../distutils/setupscript.rst:697 +msgid "" +"Sometimes things go wrong, and the setup script doesn't do what the " +"developer wants." +msgstr "有时会出现问题,并且安装脚本不能执行开发人员想要的操作。" + +#: ../../distutils/setupscript.rst:700 +msgid "" +"Distutils catches any exceptions when running the setup script, and print a " +"simple error message before the script is terminated. The motivation for " +"this behaviour is to not confuse administrators who don't know much about " +"Python and are trying to install a package. If they get a big long " +"traceback from deep inside the guts of Distutils, they may think the package" +" or the Python installation is broken because they don't read all the way " +"down to the bottom and see that it's a permission problem." +msgstr "" +"Distutils在运行安装脚本时捕获任何异常,并在脚本终止前打印一条简单的错误消息。这种行为的动机是为了不让那些对Python不太了解并试图安装软件包的管理员感到困惑。如果他们从Distutils的内部深处得到了一个很长的追溯,他们可能会认为这个软件包或Python安装坏了,因为他们没有一直读到底部,看到这是一个权限问题。" + +#: ../../distutils/setupscript.rst:708 +msgid "" +"On the other hand, this doesn't help the developer to find the cause of the " +"failure. For this purpose, the :envvar:`DISTUTILS_DEBUG` environment " +"variable can be set to anything except an empty string, and distutils will " +"now print detailed information about what it is doing, dump the full " +"traceback when an exception occurs, and print the whole command line when an" +" external program (like a C compiler) fails." +msgstr "" +"另一方面,这并不能帮助开发人员找到失败的原因。 为此,:envvar:`DISTUTILS_DEBUG` " +"环境变量可以设置为除空字符串之外的任何值,distutils 现在将打印有关其正在执行的操作的详细信息,在发生异常时转储完整的回溯,并在外部程序(如 C" +" 编译器)失败时打印整个命令行。" diff --git a/distutils/sourcedist.po b/distutils/sourcedist.po new file mode 100644 index 000000000..916f94e40 --- /dev/null +++ b/distutils/sourcedist.po @@ -0,0 +1,506 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) 2001-2024, Python Software Foundation +# This file is distributed under the same license as the Python package. +# FIRST AUTHOR , YEAR. +# +# Translators: +# 叶浚安 , 2019 +# ppcfish , 2019 +# Freesand Leo , 2022 +# Rafael Fontenelle , 2024 +# +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: Python 3.9\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2024-05-31 16:34+0000\n" +"PO-Revision-Date: 2017-02-16 17:41+0000\n" +"Last-Translator: Rafael Fontenelle , 2024\n" +"Language-Team: Chinese (China) (https://app.transifex.com/python-doc/teams/5390/zh_CN/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: zh_CN\n" +"Plural-Forms: nplurals=1; plural=0;\n" + +#: ../../distutils/sourcedist.rst:5 +msgid "Creating a Source Distribution" +msgstr "创建源代码分发包" + +#: ../../distutils/_setuptools_disclaimer.rst:3 +msgid "" +"This document is being retained solely until the ``setuptools`` " +"documentation at https://setuptools.readthedocs.io/en/latest/setuptools.html" +" independently covers all of the relevant information currently included " +"here." +msgstr "" +"这篇文档是历史遗留文档,在 https://setuptools.readthedocs.io/en/latest/setuptools.html 上的" +" ``setuptools`` 文档独立涵盖此处包含的所有相关信息之后,将不再单独作为正式文档保留。" + +#: ../../distutils/sourcedist.rst:9 +msgid "" +"As shown in section :ref:`distutils-simple-example`, you use the " +":command:`sdist` command to create a source distribution. In the simplest " +"case, ::" +msgstr "" +"如 :ref:`distutils-simple-example` 一节所示,可以使用 :command:`sdist` 命令来创建一个源代码分发包。 " +"在最简单的场景下,::" + +#: ../../distutils/sourcedist.rst:14 +msgid "" +"(assuming you haven't specified any :command:`sdist` options in the setup " +"script or config file), :command:`sdist` creates the archive of the default " +"format for the current platform. The default format is a gzip'ed tar file " +"(:file:`.tar.gz`) on Unix, and ZIP file on Windows." +msgstr "" +"(假定你没有在设置脚本或配置文件中指定任何 :command:`sdist` 选项),:command:`sdist` " +"将创建基于当前平台的默认格式的归档。 在 Unix 上默认格式为 gzip 的 tar 文件,而在 Windows 上则为 ZIP 文件。" + +#: ../../distutils/sourcedist.rst:19 +msgid "" +"You can specify as many formats as you like using the :option:`!--formats` " +"option, for example::" +msgstr "你可以使用 :option:`!--formats` 选项来指定任何你想要的格式,例如::" + +#: ../../distutils/sourcedist.rst:24 +msgid "" +"to create a gzipped tarball and a zip file. The available formats are:" +msgstr "是创建一个 gzip 的 tar 文件和一个 zip 文件。 可用的格式有:" + +#: ../../distutils/sourcedist.rst:27 +msgid "Format" +msgstr "格式" + +#: ../../distutils/sourcedist.rst:27 +msgid "Description" +msgstr "描述" + +#: ../../distutils/sourcedist.rst:27 +msgid "Notes" +msgstr "备注" + +#: ../../distutils/sourcedist.rst:29 +msgid "``zip``" +msgstr "``zip``" + +#: ../../distutils/sourcedist.rst:29 +msgid "zip file (:file:`.zip`)" +msgstr "zip 文件 (:file:`.zip`)" + +#: ../../distutils/sourcedist.rst:29 +msgid "(1),(3)" +msgstr "(1),(3)" + +#: ../../distutils/sourcedist.rst:31 +msgid "``gztar``" +msgstr "``gztar``" + +#: ../../distutils/sourcedist.rst:31 +msgid "gzip'ed tar file (:file:`.tar.gz`)" +msgstr "gzip 的 tar 文件 (:file:`.tar.gz`)" + +#: ../../distutils/sourcedist.rst:31 +msgid "\\(2)" +msgstr "\\(2)" + +#: ../../distutils/sourcedist.rst:34 +msgid "``bztar``" +msgstr "``bztar``" + +#: ../../distutils/sourcedist.rst:34 +msgid "bzip2'ed tar file (:file:`.tar.bz2`)" +msgstr "bzip2 的 tar 文件 (:file:`.tar.bz2`)" + +#: ../../distutils/sourcedist.rst:34 ../../distutils/sourcedist.rst:37 +#: ../../distutils/sourcedist.rst:43 +msgid "\\(5)" +msgstr "\\(5)" + +#: ../../distutils/sourcedist.rst:37 +msgid "``xztar``" +msgstr "``xztar``" + +#: ../../distutils/sourcedist.rst:37 +msgid "xz'ed tar file (:file:`.tar.xz`)" +msgstr "xz 的 tar 文件 (:file:`.tar.xz`)" + +#: ../../distutils/sourcedist.rst:40 +msgid "``ztar``" +msgstr "``ztar``" + +#: ../../distutils/sourcedist.rst:40 +msgid "compressed tar file (:file:`.tar.Z`)" +msgstr "带压缩的 tar 文件 (:file:`.tar.Z`)" + +#: ../../distutils/sourcedist.rst:40 +msgid "(4),(5)" +msgstr "(4),(5)" + +#: ../../distutils/sourcedist.rst:43 +msgid "``tar``" +msgstr "``tar``" + +#: ../../distutils/sourcedist.rst:43 +msgid "tar file (:file:`.tar`)" +msgstr "tar 文件 (:file:`.tar`)" + +#: ../../distutils/sourcedist.rst:46 +msgid "Added support for the ``xztar`` format." +msgstr "添加了对 ``xztar`` 格式的支持" + +#: ../../distutils/sourcedist.rst:49 +msgid "Notes:" +msgstr "注释:" + +#: ../../distutils/sourcedist.rst:52 +msgid "default on Windows" +msgstr "默认Windows" + +#: ../../distutils/sourcedist.rst:55 +msgid "default on Unix" +msgstr "默认 Unix" + +#: ../../distutils/sourcedist.rst:58 +msgid "" +"requires either external :program:`zip` utility or :mod:`zipfile` module " +"(part of the standard Python library since Python 1.6)" +msgstr "" +"需要有外部 :program:`zip` 工具或 :mod:`zipfile` 模块(自 Python 1.6 起是标准 Python 库的一部分)" + +#: ../../distutils/sourcedist.rst:62 +msgid "" +"requires the :program:`compress` program. Notice that this format is now " +"pending for deprecation and will be removed in the future versions of " +"Python." +msgstr "需要有 :program:`compress` 程序。 请注意此格式计划要弃用并将在未来的 Python 版本中被移除。" + +#: ../../distutils/sourcedist.rst:65 +msgid "" +"deprecated by `PEP 527 `_; `PyPI " +"`_ only accepts ``.zip`` and ``.tar.gz`` files." +msgstr "" +"已被 `PEP 527 `_ 弃用; `PyPI " +"`_ 只接受 ``.zip`` 和 ``.tar.gz`` 文件。" + +#: ../../distutils/sourcedist.rst:68 +msgid "" +"When using any ``tar`` format (``gztar``, ``bztar``, ``xztar``, ``ztar`` or " +"``tar``), under Unix you can specify the ``owner`` and ``group`` names that " +"will be set for each member of the archive." +msgstr "" +"当使用任意 ``tar`` 格式 (``gztar``, ``bztar``, ``xztar``, ``ztar`` 或 ``tar``) 时,在 " +"Unix 中你可以指定将为每个归档成员设置的 ``owner`` 和 ``group`` 名称。" + +#: ../../distutils/sourcedist.rst:72 +msgid "" +"For example, if you want all files of the archive to be owned by root::" +msgstr "举例来说,如果你希望归档中的全部文件均为 root 所有::" + +#: ../../distutils/sourcedist.rst:80 +msgid "Specifying the files to distribute" +msgstr "指定要分发的文件" + +#: ../../distutils/sourcedist.rst:82 +msgid "" +"If you don't supply an explicit list of files (or instructions on how to " +"generate one), the :command:`sdist` command puts a minimal default set into " +"the source distribution:" +msgstr "如果你没有显式提供文件列表(或如何生成该列表的说明),则 :command:`sdist` 命令会将一个最小化默认集加入源代码分发版:" + +#: ../../distutils/sourcedist.rst:86 +msgid "" +"all Python source files implied by the ``py_modules`` and ``packages`` " +"options" +msgstr "通过 ``py_modules`` 和 ``packages`` 选项指明的所有 Python 源文件" + +#: ../../distutils/sourcedist.rst:89 +msgid "" +"all C source files mentioned in the ``ext_modules`` or ``libraries`` options" +msgstr "在 ``ext_modules`` 在 ``libraries`` 选项提及的所有 C 源代码文件" + +#: ../../distutils/sourcedist.rst:95 +msgid "" +"scripts identified by the ``scripts`` option See :ref:`distutils-installing-" +"scripts`." +msgstr "通过 ``scripts`` 选项标识的脚本,参见 :ref:`distutils-installing-scripts`。" + +#: ../../distutils/sourcedist.rst:98 +msgid "" +"anything that looks like a test script: :file:`test/test\\*.py` (currently, " +"the Distutils don't do anything with test scripts except include them in " +"source distributions, but in the future there will be a standard for testing" +" Python module distributions)" +msgstr "" +"任何看起来像是测试脚本的文件: :file:`test/test\\*.py` (目前,Distutils " +"不会对测试脚本做除了将它们包括到源代码分发版以外的任何操作,但是在未来将会有一个测试 Python 模块分发版的标准)" + +#: ../../distutils/sourcedist.rst:103 +msgid "" +"Any of the standard README files (:file:`README`, :file:`README.txt`, or " +":file:`README.rst`), :file:`setup.py` (or whatever you called your setup " +"script), and :file:`setup.cfg`." +msgstr "" +"任何标准的 README 文件 (:file:`README`, :file:`README.txt` 或 :file:`README.rst`), " +":file:`setup.py` (或任何你指定的安装脚本) 以及 :file:`setup.cfg`。" + +#: ../../distutils/sourcedist.rst:107 +msgid "" +"all files that matches the ``package_data`` metadata. See :ref:`distutils-" +"installing-package-data`." +msgstr "" +"所有匹配 ``package_data`` 元数据的文件。 参见 :ref:`distutils-installing-package-data`。" + +#: ../../distutils/sourcedist.rst:110 +msgid "" +"all files that matches the ``data_files`` metadata. See :ref:`distutils-" +"additional-files`." +msgstr "所有匹配 ``data_files`` 元数据的文件。 参见 :ref:`distutils-additional-files`。" + +#: ../../distutils/sourcedist.rst:113 +msgid "" +"Sometimes this is enough, but usually you will want to specify additional " +"files to distribute. The typical way to do this is to write a *manifest " +"template*, called :file:`MANIFEST.in` by default. The manifest template is " +"just a list of instructions for how to generate your manifest file, " +":file:`MANIFEST`, which is the exact list of files to include in your source" +" distribution. The :command:`sdist` command processes this template and " +"generates a manifest based on its instructions and what it finds in the " +"filesystem." +msgstr "" +"有时这就足够了,但通常你还会希望指定要分发的额外文件。 实现这一点的通常方式是编写一个 *声明模板*,默认名称为 " +":file:`MANIFEST.in`。 声明模板就是一个有关如何生成你的声明文件 :file:`MANIFEST` " +"的指令列表,也就是要实际包括在你的源代码分发版中的文件的列表。 :command:`sdist` " +"命令会处理这个模板并基于其指令及其在文件系统中的查找结果生成一个声明文件。" + +#: ../../distutils/sourcedist.rst:121 +msgid "" +"If you prefer to roll your own manifest file, the format is simple: one " +"filename per line, regular files (or symlinks to them) only. If you do " +"supply your own :file:`MANIFEST`, you must specify everything: the default " +"set of files described above does not apply in this case." +msgstr "" +"如果你想要制作你自己的声明文件,格式很简单:每行一个文件名,仅限常规文件。 如果你提供你自己的 " +":file:`MANIFEST`,你必须指明一切:上面描述的默认集将不适用于这种情况。" + +#: ../../distutils/sourcedist.rst:126 +msgid "" +"An existing generated :file:`MANIFEST` will be regenerated without " +":command:`sdist` comparing its modification time to the one of " +":file:`MANIFEST.in` or :file:`setup.py`." +msgstr "" +"现有的已生成 :file:`MANIFEST` 将被生成而无需 :command:`sdist` 来将其修改时间与 " +":file:`MANIFEST.in` 或 :file:`setup.py` 的修改时间进行比较。" + +#: ../../distutils/sourcedist.rst:131 +msgid "" +":file:`MANIFEST` files start with a comment indicating they are generated. " +"Files without this comment are not overwritten or removed." +msgstr ":file:`MANIFEST` 文件以一个表明它们已生成的注释开始。 没有这条注释的文件不会被覆盖或移除。" + +#: ../../distutils/sourcedist.rst:135 +msgid "" +":command:`sdist` will read a :file:`MANIFEST` file if no :file:`MANIFEST.in`" +" exists, like it used to do." +msgstr "" +":command:`sdist` 将在不存在 :file:`MANIFEST.in` 时读取一个 :file:`MANIFEST` " +"文件,如它以前所做的一样。" + +#: ../../distutils/sourcedist.rst:139 +msgid "" +":file:`README.rst` is now included in the list of distutils standard " +"READMEs." +msgstr ":file:`README.rst` 现在已被包括在 distutils 标准 README 列表中。" + +#: ../../distutils/sourcedist.rst:143 +msgid "" +"The manifest template has one command per line, where each command specifies" +" a set of files to include or exclude from the source distribution. For an " +"example, again we turn to the Distutils' own manifest template:" +msgstr "" +"声明模板每行都有一个命令,其中每个命令指定了一组源代码发布版中要包括或排除的文件。 举例来说,我们再次关注 Distutils 自己的声明模板:" + +#: ../../distutils/sourcedist.rst:153 +msgid "" +"The meanings should be fairly clear: include all files in the distribution " +"root matching :file:`\\*.txt`, all files anywhere under the :file:`examples`" +" directory matching :file:`\\*.txt` or :file:`\\*.py`, and exclude all " +"directories matching :file:`examples/sample?/build`. All of this is done " +"*after* the standard include set, so you can exclude files from the standard" +" set with explicit instructions in the manifest template. (Or, you can use " +"the :option:`!--no-defaults` option to disable the standard set entirely.) " +"There are several other commands available in the manifest template mini-" +"language; see section :ref:`sdist-cmd`." +msgstr "" +"其含义应当很清楚:包括发布在根目录中所有匹配 :file:`\\*.txt` 的文件,在 :file:`examples` 目录下任何位置上匹配 " +":file:`\\*.txt` 或 :file:`\\*.py` 的所有文件,并排除匹配 :file:`examples/sample?/build` " +"的所有目录。 所有这些操作都将在标准的包括集 *之后* 执行,因此你可以通过在声明模板中的显式指令来排除标准集中的文件。 (或者,你也可以使用 " +":option:`!--no-defaults` 选项来完全禁用标准集。) 在声明模板迷你语言中还有一些其他的可用命令;参见 :ref:`sdist-" +"cmd` 小节。" + +#: ../../distutils/sourcedist.rst:163 +msgid "" +"The order of commands in the manifest template matters: initially, we have " +"the list of default files as described above, and each command in the " +"template adds to or removes from that list of files. Once we have fully " +"processed the manifest template, we remove files that should not be included" +" in the source distribution:" +msgstr "" +"声明模板中命令的顺序是很重要的:在初始状态下,我们有如上所述的默认文件列表,而模板中的每个命令将在该文件列表中添加或移除条目。 " +"一旦我们完全处理好声明模板,我们将再移除不应包括在源代码发布版中的文件:" + +#: ../../distutils/sourcedist.rst:169 +msgid "all files in the Distutils \"build\" tree (default :file:`build/`)" +msgstr "Distutils \"构建\" 目录树中的所有文件 (默认值 :file:`build/`)" + +#: ../../distutils/sourcedist.rst:171 +msgid "" +"all files in directories named :file:`RCS`, :file:`CVS`, :file:`.svn`, " +":file:`.hg`, :file:`.git`, :file:`.bzr` or :file:`_darcs`" +msgstr "" +"目录中所有名为 :file:`RCS`, :file:`CVS`, :file:`.svn`, :file:`.hg`, :file:`.git`, " +":file:`.bzr` 或 :file:`_darcs` 的文件" + +#: ../../distutils/sourcedist.rst:174 +msgid "" +"Now we have our complete list of files, which is written to the manifest for" +" future reference, and then used to build the source distribution " +"archive(s)." +msgstr "现在我们有了完整的文件列表,它已被写入声明以供将来引用,并随后用于构建源代码分发压缩 包。" + +#: ../../distutils/sourcedist.rst:177 +msgid "" +"You can disable the default set of included files with the :option:`!--no-" +"defaults` option, and you can disable the standard exclude set with " +":option:`!--no-prune`." +msgstr "" +"你可以通过 :option:`!--no-defaults` 选项禁用默认的包括文件集,你还可以通过 :option:`!--no-prune` " +"禁用默认的排除文件集。" + +#: ../../distutils/sourcedist.rst:181 +msgid "" +"Following the Distutils' own manifest template, let's trace how the " +":command:`sdist` command builds the list of files to include in the " +"Distutils source distribution:" +msgstr "" +"跟随 Distutils 自己的声明模板,让我们追踪' own manifest template, let's trace how the " +":command:`sdist` 命令是如何构建要包括在 Distutils 源代码分发版中的文件列表的:" + +#: ../../distutils/sourcedist.rst:185 +msgid "" +"include all Python source files in the :file:`distutils` and " +":file:`distutils/command` subdirectories (because packages corresponding to " +"those two directories were mentioned in the ``packages`` option in the setup" +" script---see section :ref:`setup-script`)" +msgstr "" +"包括 :file:`distutils` 和 :file:`distutils/command` 子目录中的所有 Python " +"源代码文件(因为与这两个目录对应的包在 setup 脚本的 ``packages`` 选项中被提及 --- 参见 :ref:`setup-script`" +" 一节)" + +#: ../../distutils/sourcedist.rst:190 +msgid "" +"include :file:`README.txt`, :file:`setup.py`, and :file:`setup.cfg` " +"(standard files)" +msgstr "包括 :file:`README.txt`, :file:`setup.py` 和 :file:`setup.cfg` (标准文件)" + +#: ../../distutils/sourcedist.rst:193 +msgid "include :file:`test/test\\*.py` (standard files)" +msgstr "包括 :file:`test/test\\*.py` (标准文件)" + +#: ../../distutils/sourcedist.rst:195 +msgid "" +"include :file:`\\*.txt` in the distribution root (this will find " +":file:`README.txt` a second time, but such redundancies are weeded out " +"later)" +msgstr "包括分发根目录下的 :file:`\\*.txt` (这将第二次找到 :file:`README.txt`,但这样的冗余随后会被清除)" + +#: ../../distutils/sourcedist.rst:198 +msgid "" +"include anything matching :file:`\\*.txt` or :file:`\\*.py` in the sub-tree " +"under :file:`examples`," +msgstr "包括 :file:`examples` 下所有子目录树中匹配 :file:`\\*.txt` 或 :file:`\\*.py` 的任何文件," + +#: ../../distutils/sourcedist.rst:201 +msgid "" +"exclude all files in the sub-trees starting at directories matching " +":file:`examples/sample?/build`\\ ---this may exclude files included by the " +"previous two steps, so it's important that the ``prune`` command in the " +"manifest template comes after the ``recursive-include`` command" +msgstr "" +"排除从匹配 :file:`examples/sample?/build` 的目录开始的子目录树中的所有文件 --- " +"这可能会排除之前两个步骤所包括的文件,因此重要的一点是声明模板中的 ``prune`` 命令应放在 ``recursive-include`` 命令之后" + +#: ../../distutils/sourcedist.rst:206 +msgid "" +"exclude the entire :file:`build` tree, and any :file:`RCS`, :file:`CVS`, " +":file:`.svn`, :file:`.hg`, :file:`.git`, :file:`.bzr` and :file:`_darcs` " +"directories" +msgstr "" +"排除整个 :file:`build` 目录树,以及任何 :file:`RCS`, :file:`CVS`, :file:`.svn`, " +":file:`.hg`, :file:`.git`, :file:`.bzr` and :file:`_darcs` 目录" + +#: ../../distutils/sourcedist.rst:210 +msgid "" +"Just like in the setup script, file and directory names in the manifest " +"template should always be slash-separated; the Distutils will take care of " +"converting them to the standard representation on your platform. That way, " +"the manifest template is portable across operating systems." +msgstr "" +"就像在设置脚本中一样,声明模板中的文件和目录名应当总是以斜杠分隔;Distutils 将会负责把它们转化为你的系统平台上的标准表示形式。 " +"通过这种方式,声明模板将可跨操作系统移植。" + +#: ../../distutils/sourcedist.rst:219 +msgid "Manifest-related options" +msgstr "声明相关选项" + +#: ../../distutils/sourcedist.rst:221 +msgid "" +"The normal course of operations for the :command:`sdist` command is as " +"follows:" +msgstr "针对 :command:`sdist` 命令的正常操作过程如下:" + +#: ../../distutils/sourcedist.rst:223 +msgid "" +"if the manifest file (:file:`MANIFEST` by default) exists and the first line" +" does not have a comment indicating it is generated from " +":file:`MANIFEST.in`, then it is used as is, unaltered" +msgstr "" +"如果声明文件 (默认为 :file:`MANIFEST`) 存在且第一行不为表示它是由 :file:`MANIFEST.in` " +"生成的注释,则它会被不加修改地原样使用" + +#: ../../distutils/sourcedist.rst:227 +msgid "" +"if the manifest file doesn't exist or has been previously automatically " +"generated, read :file:`MANIFEST.in` and create the manifest" +msgstr "如果声明文件不存在或是在此之前被自动生成的,则读取 :file:`MANIFEST.in` 并创建声明文件" + +#: ../../distutils/sourcedist.rst:230 +msgid "" +"if neither :file:`MANIFEST` nor :file:`MANIFEST.in` exist, create a manifest" +" with just the default file set" +msgstr "如果 :file:`MANIFEST` 或 :file:`MANIFEST.in` 均不存在,则使用默认文件集创建声明文件" + +#: ../../distutils/sourcedist.rst:233 +msgid "" +"use the list of files now in :file:`MANIFEST` (either just generated or read" +" in) to create the source distribution archive(s)" +msgstr "使用当前 :file:`MANIFEST` (刚生成的或读入的) 中的文件列表创建源代码分发压缩包" + +#: ../../distutils/sourcedist.rst:236 +msgid "" +"There are a couple of options that modify this behaviour. First, use the " +":option:`!--no-defaults` and :option:`!--no-prune` to disable the standard " +"\"include\" and \"exclude\" sets." +msgstr "" +"有数个选项可以修改此行为。 首先,使用 :option:`!--no-defaults` 和 :option:`!--no-prune` 来禁用标准的 " +"\"包括\" 和 \"排除\" 集。" + +#: ../../distutils/sourcedist.rst:240 +msgid "" +"Second, you might just want to (re)generate the manifest, but not create a " +"source distribution::" +msgstr "第二,你可能只是想要(重)生成声明文件,但不想要创建源代码分发包::" + +#: ../../distutils/sourcedist.rst:245 +msgid ":option:`!-o` is a shortcut for :option:`!--manifest-only`." +msgstr ":option:`!-o` 是 :option:`!--manifest-only` 的缩写。" diff --git a/distutils/uploading.po b/distutils/uploading.po new file mode 100644 index 000000000..4b6e0376a --- /dev/null +++ b/distutils/uploading.po @@ -0,0 +1,33 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) 2001-2022, Python Software Foundation +# This file is distributed under the same license as the Python package. +# FIRST AUTHOR , YEAR. +# +# Translators: +# 刘士 , 2018 +# Freesand Leo , 2019 +# +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: Python 3.9\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2022-11-04 14:34+0000\n" +"PO-Revision-Date: 2017-02-16 17:41+0000\n" +"Last-Translator: Freesand Leo , 2019\n" +"Language-Team: Chinese (China) (https://www.transifex.com/python-doc/teams/5390/zh_CN/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: zh_CN\n" +"Plural-Forms: nplurals=1; plural=0;\n" + +#: ../../distutils/uploading.rst:5 +msgid "Uploading Packages to the Package Index" +msgstr "上传包到包索引" + +#: ../../distutils/uploading.rst:7 +msgid "" +"References to up to date PyPI documentation can be found at " +":ref:`publishing-python-packages`." +msgstr "供参考的最新 PyPI 文档可以在 :ref:`publishing-python-packages` 找到。" diff --git a/extending/building.po b/extending/building.po new file mode 100644 index 000000000..47c73268b --- /dev/null +++ b/extending/building.po @@ -0,0 +1,205 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) 2001-2022, Python Software Foundation +# This file is distributed under the same license as the Python package. +# FIRST AUTHOR , YEAR. +# +# Translators: +# Harry Liu. , 2019 +# Freesand Leo , 2019 +# +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: Python 3.9\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2022-11-04 14:34+0000\n" +"PO-Revision-Date: 2017-02-16 17:42+0000\n" +"Last-Translator: Freesand Leo , 2019\n" +"Language-Team: Chinese (China) (https://www.transifex.com/python-doc/teams/5390/zh_CN/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: zh_CN\n" +"Plural-Forms: nplurals=1; plural=0;\n" + +#: ../../extending/building.rst:7 +msgid "Building C and C++ Extensions" +msgstr "构建C/C++扩展" + +#: ../../extending/building.rst:9 +msgid "" +"A C extension for CPython is a shared library (e.g. a ``.so`` file on Linux," +" ``.pyd`` on Windows), which exports an *initialization function*." +msgstr "" +"一个CPython的C扩展是一个共享库(例如一个Linux上的 ``.so`` ,或者Windows上的 ``.pyd`` ),其会导出一个 " +"*初始化函数* 。" + +#: ../../extending/building.rst:12 +msgid "" +"To be importable, the shared library must be available on " +":envvar:`PYTHONPATH`, and must be named after the module name, with an " +"appropriate extension. When using distutils, the correct filename is " +"generated automatically." +msgstr "" +"为了可导入,共享库必须在 :envvar:`PYTHONPATH` " +"中有效,且必须命名遵循模块名字,通过适当的扩展。当使用distutils时,会自动生成正确的文件名。" + +#: ../../extending/building.rst:16 +msgid "The initialization function has the signature:" +msgstr "初始化函数的声明如下:" + +#: ../../extending/building.rst:20 +msgid "" +"It returns either a fully-initialized module, or a :c:type:`PyModuleDef` " +"instance. See :ref:`initializing-modules` for details." +msgstr "" +"该函数返回完整初始化过的模块,或一个 :c:type:`PyModuleDef` 实例。查看 :ref:`initializing-modules` " +"了解更多细节。" + +#: ../../extending/building.rst:25 +msgid "" +"For modules with ASCII-only names, the function must be named " +"``PyInit_``, with ```` replaced by the name of the " +"module. When using :ref:`multi-phase-initialization`, non-ASCII module names" +" are allowed. In this case, the initialization function name is " +"``PyInitU_``, with ```` encoded using Python's " +"*punycode* encoding with hyphens replaced by underscores. In Python::" +msgstr "" +"对于仅有ASCII编码的模块名,函数必须是 ``PyInit_`` ,将 ```` " +"替换为模块的名字。当使用 :ref:`multi-phase-initialization` " +"时,允许使用非ASCII编码的模块名。此时初始化函数的名字是 ``PyInitU_`` ,而 ```` " +"需要用Python的 *punycode* 编码,连字号需替换为下划线。在Python里::" + +#: ../../extending/building.rst:39 +msgid "" +"It is possible to export multiple modules from a single shared library by " +"defining multiple initialization functions. However, importing them requires" +" using symbolic links or a custom importer, because by default only the " +"function corresponding to the filename is found. See the *\"Multiple modules" +" in one library\"* section in :pep:`489` for details." +msgstr "" +"可以在一个动态库里导出多个模块,通过定义多个初始化函数。而导入他们需要符号链接或自定义导入器,因为缺省时只有对应了文件名的函数才会被发现。查看 " +"*\"一个库里的多模块\"* 章节,在 :pep:`489` 了解更多细节。" + +#: ../../extending/building.rst:49 +msgid "Building C and C++ Extensions with distutils" +msgstr "使用distutils构建C和C++扩展" + +#: ../../extending/building.rst:53 +msgid "" +"Extension modules can be built using distutils, which is included in " +"Python. Since distutils also supports creation of binary packages, users " +"don't necessarily need a compiler and distutils to install the extension." +msgstr "" +"扩展模块可以用distutils来构建,这是Python自带的。distutils也支持创建二进制包,用户无需编译器而distutils就能安装扩展。" + +#: ../../extending/building.rst:57 +msgid "" +"A distutils package contains a driver script, :file:`setup.py`. This is a " +"plain Python file, which, in the most simple case, could look like this:" +msgstr "一个distutils包包含了一个驱动脚本 :file:`setup.py` 。这是个纯Python文件,大多数时候也很简单,看起来如下:" + +#: ../../extending/building.rst:73 +msgid "With this :file:`setup.py`, and a file :file:`demo.c`, running ::" +msgstr "通过文件 :file:`setup.py` ,和文件 :file:`demo.c` ,运行如下 ::" + +#: ../../extending/building.rst:77 +msgid "" +"will compile :file:`demo.c`, and produce an extension module named ``demo`` " +"in the :file:`build` directory. Depending on the system, the module file " +"will end up in a subdirectory :file:`build/lib.system`, and may have a name " +"like :file:`demo.so` or :file:`demo.pyd`." +msgstr "" +"这会编译 :file:`demo.c` ,然后产生一个扩展模块叫做 ``demo`` 在目录 :file:`build` " +"里。依赖于系统,模块文件会放在某个子目录形如 :file:`build/lib.system` ,名字可能是 :file:`demo.so` 或 " +":file:`demo.pyd` 。" + +#: ../../extending/building.rst:82 +msgid "" +"In the :file:`setup.py`, all execution is performed by calling the ``setup``" +" function. This takes a variable number of keyword arguments, of which the " +"example above uses only a subset. Specifically, the example specifies meta-" +"information to build packages, and it specifies the contents of the package." +" Normally, a package will contain additional modules, like Python source " +"modules, documentation, subpackages, etc. Please refer to the distutils " +"documentation in :ref:`distutils-index` to learn more about the features of " +"distutils; this section explains building extension modules only." +msgstr "" +"在文件 :file:`setup.py` 里,所有动作的入口通过 ``setup`` " +"函数。该函数可以接受可变数量个关键字参数,上面的例子只使用了一个子集。特别需要注意的例子指定了构建包的元信息,以及指定了包内容。通常一个包会包括多个模块,就像Python的源码模块、文档、子包等。请参数distutils的文档,在" +" :ref:`distutils-index` 来了解更多distutils的特性;本章节只解释构建扩展模块的部分。" + +#: ../../extending/building.rst:91 +msgid "" +"It is common to pre-compute arguments to :func:`setup`, to better structure " +"the driver script. In the example above, the ``ext_modules`` argument to " +":func:`~distutils.core.setup` is a list of extension modules, each of which " +"is an instance of the :class:`~distutils.extension.Extension`. In the " +"example, the instance defines an extension named ``demo`` which is build by " +"compiling a single source file, :file:`demo.c`." +msgstr "" +"通常预计算参数给 :func:`setup` ,想要更好的结构化驱动脚本。有如如上例子函数 :func:`~distutils.core.setup` " +"的 ``ext_modules`` 参数是一列扩展模块,每个是一个 :class:`~distutils.extension.Extension` " +"类的实例。例子中的实例定义了扩展命名为 ``demo`` ,从单一源码文件构建 :file:`demo.c` 。" + +#: ../../extending/building.rst:99 +msgid "" +"In many cases, building an extension is more complex, since additional " +"preprocessor defines and libraries may be needed. This is demonstrated in " +"the example below." +msgstr "更多时候,构建一个扩展会复杂的多,需要额外的预处理器定义和库。如下例子展示了这些。" + +#: ../../extending/building.rst:127 +msgid "" +"In this example, :func:`~distutils.core.setup` is called with additional " +"meta-information, which is recommended when distribution packages have to be" +" built. For the extension itself, it specifies preprocessor defines, include" +" directories, library directories, and libraries. Depending on the compiler," +" distutils passes this information in different ways to the compiler. For " +"example, on Unix, this may result in the compilation commands ::" +msgstr "" +"例子中函数 :func:`~distutils.core.setup` " +"在调用时额外传递了元信息,是推荐发布包构建时的内容。对于这个扩展,其指定了预处理器定义,include目录,库目录,库。依赖于编译器,distutils还会用其他方式传递信息给编译器。例如在Unix上,结果是如下编译命令" +" ::" + +#: ../../extending/building.rst:139 +msgid "" +"These lines are for demonstration purposes only; distutils users should " +"trust that distutils gets the invocations right." +msgstr "这些行代码仅用于展示目的;distutils用户应该相信distutils能正确调用。" + +#: ../../extending/building.rst:146 +msgid "Distributing your extension modules" +msgstr "发布你的扩展模块" + +#: ../../extending/building.rst:148 +msgid "" +"When an extension has been successfully built, there are three ways to use " +"it." +msgstr "当一个扩展已经成功地被构建时,有三种方式来使用它。" + +#: ../../extending/building.rst:150 +msgid "" +"End-users will typically want to install the module, they do so by running " +"::" +msgstr "最终用户通常想要安装模块,可以这么运行 ::" + +#: ../../extending/building.rst:154 +msgid "" +"Module maintainers should produce source packages; to do so, they run ::" +msgstr "模块维护者应该制作源码包;要实现可以运行 ::" + +#: ../../extending/building.rst:158 +msgid "" +"In some cases, additional files need to be included in a source " +"distribution; this is done through a :file:`MANIFEST.in` file; see " +":ref:`manifest` for details." +msgstr "" +"有些情况下,需要在源码发布包里包含额外的文件;这通过 :file:`MANIFEST.in` 文件实现,查看 :ref:`manifest` 了解细节。" + +#: ../../extending/building.rst:161 +msgid "" +"If the source distribution has been built successfully, maintainers can also" +" create binary distributions. Depending on the platform, one of the " +"following commands can be used to do so. ::" +msgstr "如果源码发行包被成功地构建,维护者还可以创建二进制发行包。 取决于具体平台,以下命令中的一个可以用来完成此任务 ::" diff --git a/extending/embedding.po b/extending/embedding.po new file mode 100644 index 000000000..4f3985186 --- /dev/null +++ b/extending/embedding.po @@ -0,0 +1,386 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) 2001-2022, Python Software Foundation +# This file is distributed under the same license as the Python package. +# FIRST AUTHOR , YEAR. +# +# Translators: +# weihaipy, 2020 +# Dai Xu , 2021 +# +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: Python 3.9\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2022-11-04 14:34+0000\n" +"PO-Revision-Date: 2017-02-16 17:42+0000\n" +"Last-Translator: Dai Xu , 2021\n" +"Language-Team: Chinese (China) (https://www.transifex.com/python-doc/teams/5390/zh_CN/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: zh_CN\n" +"Plural-Forms: nplurals=1; plural=0;\n" + +#: ../../extending/embedding.rst:8 +msgid "Embedding Python in Another Application" +msgstr "在其它应用程序嵌入 Python" + +#: ../../extending/embedding.rst:10 +msgid "" +"The previous chapters discussed how to extend Python, that is, how to extend" +" the functionality of Python by attaching a library of C functions to it. " +"It is also possible to do it the other way around: enrich your C/C++ " +"application by embedding Python in it. Embedding provides your application " +"with the ability to implement some of the functionality of your application " +"in Python rather than C or C++. This can be used for many purposes; one " +"example would be to allow users to tailor the application to their needs by " +"writing some scripts in Python. You can also use it yourself if some of the" +" functionality can be written in Python more easily." +msgstr "" +"前几章讨论了如何对 Python 进行扩展,也就是如何用 C 函数库 扩展 Python 的功能。反过来也是可以的:将 Python 嵌入到 C/C++" +" 应用程序中丰富其功能。这种嵌入可以让应用程序用 Python 来实现某些功能,而不是用 C 或 C++ 。用途会有很多;比如允许用户用 Python " +"编写一些脚本,以便定制应用程序满足需求。如果某些功能用 Python 编写起来更为容易,那么开发人员自己也能这么干。" + +#: ../../extending/embedding.rst:20 +msgid "" +"Embedding Python is similar to extending it, but not quite. The difference " +"is that when you extend Python, the main program of the application is still" +" the Python interpreter, while if you embed Python, the main program may " +"have nothing to do with Python --- instead, some parts of the application " +"occasionally call the Python interpreter to run some Python code." +msgstr "" +"Python 的嵌入类似于扩展,但不完全相同。不同之处在于,扩展 Python 时应用程序的主程序仍然是 Python 解释器,而嵌入 Python " +"时的主程序可能与 Python 完全无关——而是应用程序的某些部分偶尔会调用 Python 解释器来运行一些 Python 代码。" + +#: ../../extending/embedding.rst:26 +msgid "" +"So if you are embedding Python, you are providing your own main program. " +"One of the things this main program has to do is initialize the Python " +"interpreter. At the very least, you have to call the function " +":c:func:`Py_Initialize`. There are optional calls to pass command line " +"arguments to Python. Then later you can call the interpreter from any part " +"of the application." +msgstr "" +"因此,若要嵌入 Python,就要提供自己的主程序。此主程序要做的事情之一就是初始化 Python 解释器。至少得调用函数 " +":c:func:`Py_Initialize`。还有些可选的调用可向 Python 传递命令行参数。之后即可从应用程序的任何地方调用解释器了。" + +#: ../../extending/embedding.rst:32 +msgid "" +"There are several different ways to call the interpreter: you can pass a " +"string containing Python statements to :c:func:`PyRun_SimpleString`, or you " +"can pass a stdio file pointer and a file name (for identification in error " +"messages only) to :c:func:`PyRun_SimpleFile`. You can also call the lower-" +"level operations described in the previous chapters to construct and use " +"Python objects." +msgstr "" +"调用解释器的方式有好几种:可向 :c:func:`PyRun_SimpleString` 传入一个包含 Python 语句的字符串,也可向 " +":c:func:`PyRun_SimpleFile` 传入一个 stdio " +"文件指针和一个文件名(仅在错误信息中起到识别作用)。还可以调用前面介绍过的底层操作来构造并使用 Python 对象。" + +#: ../../extending/embedding.rst:42 +msgid ":ref:`c-api-index`" +msgstr ":ref:`c-api-index`" + +#: ../../extending/embedding.rst:42 +msgid "" +"The details of Python's C interface are given in this manual. A great deal " +"of necessary information can be found here." +msgstr "本文详细介绍了 Python 的 C 接口。这里有大量必要的信息。" + +#: ../../extending/embedding.rst:49 +msgid "Very High Level Embedding" +msgstr "高层次的嵌入" + +#: ../../extending/embedding.rst:51 +msgid "" +"The simplest form of embedding Python is the use of the very high level " +"interface. This interface is intended to execute a Python script without " +"needing to interact with the application directly. This can for example be " +"used to perform some operation on a file. ::" +msgstr "" +"最简单的 Python 嵌入形式就是采用非常高层的接口。该接口的目标是只执行一段 Python " +"脚本,而无需与应用程序直接交互。比如以下代码可以用来对某个文件进行一些操作。" + +#: ../../extending/embedding.rst:78 +msgid "" +"The :c:func:`Py_SetProgramName` function should be called before " +":c:func:`Py_Initialize` to inform the interpreter about paths to Python run-" +"time libraries. Next, the Python interpreter is initialized with " +":c:func:`Py_Initialize`, followed by the execution of a hard-coded Python " +"script that prints the date and time. Afterwards, the " +":c:func:`Py_FinalizeEx` call shuts the interpreter down, followed by the end" +" of the program. In a real program, you may want to get the Python script " +"from another source, perhaps a text-editor routine, a file, or a database. " +"Getting the Python code from a file can better be done by using the " +":c:func:`PyRun_SimpleFile` function, which saves you the trouble of " +"allocating memory space and loading the file contents." +msgstr "" +"在 :c:func:`Py_Initialize` 之前,应该先调用 :c:func:`Py_SetProgramName` 函数,以便向解释器告知 " +"Python运行库的路径。接下来,:c:func:`Py_Initialize` 会初始化 Python 解释器,然后执行硬编码的 Python " +"脚本,打印出日期和时间。之后,调用 :c:func:`Py_FinalizeEx` 关闭解释器,程序结束。在真实的程序中,可能需要从其他来源获取 " +"Python 脚本,或许是从文本编辑器例程、文件,或者某个数据库。利用 :c:func:`PyRun_SimpleFile` 函数可以更好地从文件中获取" +" Python 代码,可省去分配内存空间和加载文件内容的麻烦。" + +#: ../../extending/embedding.rst:93 +msgid "Beyond Very High Level Embedding: An overview" +msgstr "突破高层次嵌入的限制:概述" + +#: ../../extending/embedding.rst:95 +msgid "" +"The high level interface gives you the ability to execute arbitrary pieces " +"of Python code from your application, but exchanging data values is quite " +"cumbersome to say the least. If you want that, you should use lower level " +"calls. At the cost of having to write more C code, you can achieve almost " +"anything." +msgstr "" +"高级接口能从应用程序中执行任何 Python " +"代码,但至少交换数据可说是相当麻烦的。如若需要交换数据,应使用较低级别的调用。几乎可以实现任何功能,代价是得写更多的 C 代码。" + +#: ../../extending/embedding.rst:100 +msgid "" +"It should be noted that extending Python and embedding Python is quite the " +"same activity, despite the different intent. Most topics discussed in the " +"previous chapters are still valid. To show this, consider what the extension" +" code from Python to C really does:" +msgstr "" +"应该注意,尽管意图不同,但扩展 Python 和嵌入 Python 的过程相当类似。前几章中讨论的大多数主题依然有效。为了说明这一点,不妨来看一下从 " +"Python 到 C 的扩展代码到底做了什么:" + +#: ../../extending/embedding.rst:105 +msgid "Convert data values from Python to C," +msgstr "转换 Python 的数据值到 C," + +#: ../../extending/embedding.rst:107 +msgid "Perform a function call to a C routine using the converted values, and" +msgstr "用转换后的数据执行 C 程序的函数调用,以及" + +#: ../../extending/embedding.rst:109 +msgid "Convert the data values from the call from C to Python." +msgstr "将调用返回的数据从 C 转换为 Python 格式。" + +#: ../../extending/embedding.rst:111 +msgid "When embedding Python, the interface code does:" +msgstr "嵌入 Python 时,接口代码会这样做:" + +#: ../../extending/embedding.rst:113 +msgid "Convert data values from C to Python," +msgstr "转换 C 的数据值到 Python," + +#: ../../extending/embedding.rst:115 +msgid "" +"Perform a function call to a Python interface routine using the converted " +"values, and" +msgstr "用转换后的数据执行对 Python 接口的函数调用," + +#: ../../extending/embedding.rst:118 +msgid "Convert the data values from the call from Python to C." +msgstr "将调用返回的数据从 Python 转换为 C 格式。" + +#: ../../extending/embedding.rst:120 +msgid "" +"As you can see, the data conversion steps are simply swapped to accommodate " +"the different direction of the cross-language transfer. The only difference " +"is the routine that you call between both data conversions. When extending, " +"you call a C routine, when embedding, you call a Python routine." +msgstr "" +"可见只是数据转换的步骤交换了一下顺序,以顺应跨语言的传输方向。唯一的区别是在两次数据转换之间调用的函数不同。在执行扩展时,调用一个 C " +"函数,而执行嵌入时调用的是个 Python 函数。" + +#: ../../extending/embedding.rst:125 +msgid "" +"This chapter will not discuss how to convert data from Python to C and vice " +"versa. Also, proper use of references and dealing with errors is assumed to" +" be understood. Since these aspects do not differ from extending the " +"interpreter, you can refer to earlier chapters for the required information." +msgstr "" +"本文不会讨论如何将数据从 Python 转换到 C " +"去,反之亦然。另外还假定读者能够正确使用引用并处理错误。由于这些地方与解释器的扩展没有区别,请参考前面的章节以获得所需的信息。" + +#: ../../extending/embedding.rst:134 +msgid "Pure Embedding" +msgstr "纯嵌入" + +#: ../../extending/embedding.rst:136 +msgid "" +"The first program aims to execute a function in a Python script. Like in the" +" section about the very high level interface, the Python interpreter does " +"not directly interact with the application (but that will change in the next" +" section)." +msgstr "" +"第一个程序的目标是执行 Python 脚本中的某个函数。就像高层次接口那样,Python 解释器并不会直接与应用程序进行交互(但下一节将改变这一点)。" + +#: ../../extending/embedding.rst:141 +msgid "The code to run a function defined in a Python script is:" +msgstr "要运行 Python 脚本中定义的函数,代码如下:" + +#: ../../extending/embedding.rst:146 +msgid "" +"This code loads a Python script using ``argv[1]``, and calls the function " +"named in ``argv[2]``. Its integer arguments are the other values of the " +"``argv`` array. If you :ref:`compile and link ` this program " +"(let's call the finished executable :program:`call`), and use it to execute " +"a Python script, such as:" +msgstr "" +"上述代码先利用 ``argv[1]`` 加载 Python 脚本,再调用 ``argv[2]`` 指定的函数。函数的整数参数是 ``argv`` " +"数组中的其余值。如果 :ref:`编译并链接` 该程序(此处将最终的可执行程序称作 :program:`call`), " +"并用它执行一个 Python 脚本,例如:" + +#: ../../extending/embedding.rst:161 +msgid "then the result should be:" +msgstr "然后结果应该是:" + +#: ../../extending/embedding.rst:169 +msgid "" +"Although the program is quite large for its functionality, most of the code " +"is for data conversion between Python and C, and for error reporting. The " +"interesting part with respect to embedding Python starts with ::" +msgstr "" +"尽管相对其功能而言,该程序体积相当庞大,但大部分代码是用于 Python 和 C 之间的数据转换,以及报告错误。嵌入 Python 的有趣部分从此开始:" + +#: ../../extending/embedding.rst:178 +msgid "" +"After initializing the interpreter, the script is loaded using " +":c:func:`PyImport_Import`. This routine needs a Python string as its " +"argument, which is constructed using the :c:func:`PyUnicode_FromString` data" +" conversion routine. ::" +msgstr "" +"初始化解释器之后,则用 :c:func:`PyImport_Import` 加载脚本。此函数的参数需是个 Python 字符串,一个用 " +":c:func:`PyUnicode_FromString` 数据转换函数构建的字符串。" + +#: ../../extending/embedding.rst:191 +msgid "" +"Once the script is loaded, the name we're looking for is retrieved using " +":c:func:`PyObject_GetAttrString`. If the name exists, and the object " +"returned is callable, you can safely assume that it is a function. The " +"program then proceeds by constructing a tuple of arguments as normal. The " +"call to the Python function is then made with::" +msgstr "" +"脚本一旦加载完毕,就会用 :c:func:`PyObject_GetAttrString` " +"查找属性名称。如果名称存在,并且返回的是可调用对象,即可安全地视其为函数。然后程序继续执行,照常构建由参数组成的元组。然后用以下方式调用 Python " +"函数:" + +#: ../../extending/embedding.rst:199 +msgid "" +"Upon return of the function, ``pValue`` is either ``NULL`` or it contains a " +"reference to the return value of the function. Be sure to release the " +"reference after examining the value." +msgstr "当函数返回时,``pValue`` 要么为 ``NULL``,要么包含对函数返回值的引用。请确保用完后释放该引用。" + +#: ../../extending/embedding.rst:207 +msgid "Extending Embedded Python" +msgstr "对嵌入 Python 功能进行扩展" + +#: ../../extending/embedding.rst:209 +msgid "" +"Until now, the embedded Python interpreter had no access to functionality " +"from the application itself. The Python API allows this by extending the " +"embedded interpreter. That is, the embedded interpreter gets extended with " +"routines provided by the application. While it sounds complex, it is not so " +"bad. Simply forget for a while that the application starts the Python " +"interpreter. Instead, consider the application to be a set of subroutines, " +"and write some glue code that gives Python access to those routines, just " +"like you would write a normal Python extension. For example::" +msgstr "" +"到目前为止,嵌入的 Python 解释器还不能访问应用程序本身的功能。Python API 通过扩展嵌入解释器实现了这一点。 " +"也就是说,用应用程序提供的函数对嵌入的解释器进行扩展。虽然听起来有些复杂,但也没那么糟糕。只要暂时忘记是应用程序启动了 Python " +"解释器。而把应用程序看作是一堆子程序,然后写一些胶水代码让 Python 访问这些子程序,就像编写普通的 Python 扩展程序一样。 例如:" + +#: ../../extending/embedding.rst:246 +msgid "" +"Insert the above code just above the :c:func:`main` function. Also, insert " +"the following two statements before the call to :c:func:`Py_Initialize`::" +msgstr "在 :c:func:`main` 函数之前插入上述代码。并在调用 :c:func:`Py_Initialize` 之前插入以下两条语句:" + +#: ../../extending/embedding.rst:252 +msgid "" +"These two lines initialize the ``numargs`` variable, and make the " +":func:`emb.numargs` function accessible to the embedded Python interpreter. " +"With these extensions, the Python script can do things like" +msgstr "" +"这两行代码初始化了 ``numargs`` 变量,并让 :func:`emb.numargs` 函数能被嵌入的 Python " +"解释器访问到。有了这些扩展,Python 脚本可以执行类似以下功能:" + +#: ../../extending/embedding.rst:261 +msgid "" +"In a real application, the methods will expose an API of the application to " +"Python." +msgstr "在真实的应用程序中,这种方法将把应用的 API 暴露给 Python 使用。" + +#: ../../extending/embedding.rst:271 +msgid "Embedding Python in C++" +msgstr "在 C++ 中嵌入 Python" + +#: ../../extending/embedding.rst:273 +msgid "" +"It is also possible to embed Python in a C++ program; precisely how this is " +"done will depend on the details of the C++ system used; in general you will " +"need to write the main program in C++, and use the C++ compiler to compile " +"and link your program. There is no need to recompile Python itself using " +"C++." +msgstr "" +"还可以将 Python 嵌入到 C++ 程序中去;确切地说,实现方式将取决于 C++ 系统的实现细节;一般需用 C++ 编写主程序,并用 C++ " +"编译器来编译和链接 程序。不需要用 C++ 重新编译 Python 本身。" + +#: ../../extending/embedding.rst:282 +msgid "Compiling and Linking under Unix-like systems" +msgstr "在类 Unix 系统中编译和链接 " + +#: ../../extending/embedding.rst:284 +msgid "" +"It is not necessarily trivial to find the right flags to pass to your " +"compiler (and linker) in order to embed the Python interpreter into your " +"application, particularly because Python needs to load library modules " +"implemented as C dynamic extensions (:file:`.so` files) linked against it." +msgstr "" +"为了将 Python 解释器嵌入应用程序,找到正确的编译参数传给编译器 (和链接器) 并非易事,特别是因为 Python 加载的库模块是以 C " +"动态扩展(:file:`.so` 文件)的形式实现的。" + +#: ../../extending/embedding.rst:290 +msgid "" +"To find out the required compiler and linker flags, you can execute the " +":file:`python{X.Y}-config` script which is generated as part of the " +"installation process (a :file:`python3-config` script may also be " +"available). This script has several options, of which the following will be" +" directly useful to you:" +msgstr "" +"为了得到所需的编译器和链接器参数,可执行 :file:`python{X.Y}-config` 脚本,它是在安装 Python 时生成的(也可能存在 " +":file:`python3-config` 脚本)。该脚本有几个参数,其中以下几个参数会直接有用:" + +#: ../../extending/embedding.rst:296 +msgid "" +"``pythonX.Y-config --cflags`` will give you the recommended flags when " +"compiling:" +msgstr "``pythonX.Y-config --cflags`` 将给出建议的编译参数。" + +#: ../../extending/embedding.rst:304 +msgid "" +"``pythonX.Y-config --ldflags`` will give you the recommended flags when " +"linking:" +msgstr "``pythonX.Y-config --ldflags`` 将给出建议的链接参数。" + +#: ../../extending/embedding.rst:313 +msgid "" +"To avoid confusion between several Python installations (and especially " +"between the system Python and your own compiled Python), it is recommended " +"that you use the absolute path to :file:`python{X.Y}-config`, as in the " +"above example." +msgstr "" +"为了避免多个 Python 安装版本引发混乱(特别是在系统安装版本和自己编译版本之间),建议用 :file:`python{X.Y}-config` " +"指定绝对路径,如上例所述。" + +#: ../../extending/embedding.rst:318 +msgid "" +"If this procedure doesn't work for you (it is not guaranteed to work for all" +" Unix-like platforms; however, we welcome :ref:`bug reports `) you will have to read your system's documentation about dynamic " +"linking and/or examine Python's :file:`Makefile` (use " +":func:`sysconfig.get_makefile_filename` to find its location) and " +"compilation options. In this case, the :mod:`sysconfig` module is a useful " +"tool to programmatically extract the configuration values that you will want" +" to combine together. For example:" +msgstr "" +"如果上述方案不起作用(不能保证对所有 Unix 类平台都生效;欢迎提出 :ref:`bug 报告`),就得阅读系统关于动态链接的文档,并检查 Python 的 :file:`Makefile` (用 " +":func:`sysconfig.get_makefile_filename` 找到所在位置)和编译参数。这时 :mod:`sysconfig` " +"模块会是个有用的工具,可用编程方式提取需组合在一起的配置值。比如:" diff --git a/extending/extending.po b/extending/extending.po new file mode 100644 index 000000000..faa88fdee --- /dev/null +++ b/extending/extending.po @@ -0,0 +1,1583 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) 2001-2025, Python Software Foundation +# This file is distributed under the same license as the Python package. +# FIRST AUTHOR , YEAR. +# +# Translators: +# ww song , 2018 +# Shengjing Zhu , 2019 +# Harry Liu. , 2020 +# Freesand Leo , 2024 +# Rafael Fontenelle , 2025 +# +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: Python 3.9\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2025-02-07 16:40+0000\n" +"PO-Revision-Date: 2017-02-16 17:42+0000\n" +"Last-Translator: Rafael Fontenelle , 2025\n" +"Language-Team: Chinese (China) (https://app.transifex.com/python-doc/teams/5390/zh_CN/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: zh_CN\n" +"Plural-Forms: nplurals=1; plural=0;\n" + +#: ../../extending/extending.rst:8 +msgid "Extending Python with C or C++" +msgstr "使用 C 或 C++ 扩展 Python" + +#: ../../extending/extending.rst:10 +msgid "" +"It is quite easy to add new built-in modules to Python, if you know how to " +"program in C. Such :dfn:`extension modules` can do two things that can't be" +" done directly in Python: they can implement new built-in object types, and " +"they can call C library functions and system calls." +msgstr "" +"如果你会用 C,添加新的 Python 内置模块会很简单。以下两件不能用 Python 直接做的事,可以通过 :dfn:`extension " +"modules` 来实现:实现新的内置对象类型;调用 C 的库函数和系统调用。" + +#: ../../extending/extending.rst:15 +msgid "" +"To support extensions, the Python API (Application Programmers Interface) " +"defines a set of functions, macros and variables that provide access to most" +" aspects of the Python run-time system. The Python API is incorporated in a" +" C source file by including the header ``\"Python.h\"``." +msgstr "" +"为了支持扩展,Python API(应用程序编程接口)定义了一系列函数、宏和变量,可以访问 Python 运行时系统的大部分内容。Python 的 " +"API 可以通过在一个 C 源文件中引用 ``\"Python.h\"`` 头文件来使用。" + +#: ../../extending/extending.rst:20 +msgid "" +"The compilation of an extension module depends on its intended use as well " +"as on your system setup; details are given in later chapters." +msgstr "扩展模块的编写方式取决与你的目的以及系统设置;下面章节会详细介绍。" + +#: ../../extending/extending.rst:25 +msgid "" +"The C extension interface is specific to CPython, and extension modules do " +"not work on other Python implementations. In many cases, it is possible to " +"avoid writing C extensions and preserve portability to other " +"implementations. For example, if your use case is calling C library " +"functions or system calls, you should consider using the :mod:`ctypes` " +"module or the `cffi `_ library rather than " +"writing custom C code. These modules let you write Python code to interface " +"with C code and are more portable between implementations of Python than " +"writing and compiling a C extension module." +msgstr "" +"C扩展接口特指CPython,扩展模块无法在其他Python实现上工作。在大多数情况下,应该避免写C扩展,来保持可移植性。举个例子,如果你的用例调用了C库或系统调用,你应该考虑使用" +" :mod:`ctypes` 模块或 `cffi `_ " +"库,而不是自己写C代码。这些模块允许你写Python代码来接口C代码,并且相较于编写和编译C扩展模块,该方法在不同Python实现之间具有更高的可移植性。" + +#: ../../extending/extending.rst:40 +msgid "A Simple Example" +msgstr "一个简单的例子" + +#: ../../extending/extending.rst:42 +msgid "" +"Let's create an extension module called ``spam`` (the favorite food of Monty" +" Python fans...) and let's say we want to create a Python interface to the C" +" library function :c:func:`system` [#]_. This function takes a null-" +"terminated character string as argument and returns an integer. We want " +"this function to be callable from Python as follows:" +msgstr "" +"让我们创建一个扩展模块 ``spam`` (Monty Python 粉丝最喜欢的食物...) 并且想要创建对应 C 库函数 " +":c:func:`system` [#]_ 的 Python 接口。 这个函数接受一个以 null 结尾的字符串参数并返回一个整数。 我们希望可以在 " +"Python 中以如下方式调用此函数:" + +#: ../../extending/extending.rst:53 +msgid "" +"Begin by creating a file :file:`spammodule.c`. (Historically, if a module " +"is called ``spam``, the C file containing its implementation is called " +":file:`spammodule.c`; if the module name is very long, like ``spammify``, " +"the module name can be just :file:`spammify.c`.)" +msgstr "" +"首先创建一个 :file:`spammodule.c` 文件。(传统上,如果一个模块叫 ``spam``,则对应实现它的 C 文件叫 " +":file:`spammodule.c`;如果这个模块名字非常长,比如 ``spammify``,则这个模块的文件可以直接叫 " +":file:`spammify.c`。)" + +#: ../../extending/extending.rst:58 +msgid "The first two lines of our file can be::" +msgstr "文件中开始的两行是:" + +#: ../../extending/extending.rst:63 +msgid "" +"which pulls in the Python API (you can add a comment describing the purpose " +"of the module and a copyright notice if you like)." +msgstr "这会导入 Python API(如果你喜欢,你可以在这里添加描述模块目标和版权信息的注释)。" + +#: ../../extending/extending.rst:68 +msgid "" +"Since Python may define some pre-processor definitions which affect the " +"standard headers on some systems, you *must* include :file:`Python.h` before" +" any standard headers are included." +msgstr "" +"由于 Python 可能会定义一些能在某些系统上影响标准头文件的预处理器定义,因此在包含任何标准头文件之前,你 *必须* 先包含 " +":file:`Python.h`。" + +#: ../../extending/extending.rst:72 +msgid "" +"It is recommended to always define ``PY_SSIZE_T_CLEAN`` before including " +"``Python.h``. See :ref:`parsetuple` for a description of this macro." +msgstr "" +"推荐总是在 ``Python.h`` 前定义 ``PY_SSIZE_T_CLEAN`` 。查看 :ref:`parsetuple` " +"来了解这个宏的更多内容。" + +#: ../../extending/extending.rst:75 +msgid "" +"All user-visible symbols defined by :file:`Python.h` have a prefix of ``Py``" +" or ``PY``, except those defined in standard header files. For convenience, " +"and since they are used extensively by the Python interpreter, " +"``\"Python.h\"`` includes a few standard header files: ````, " +"````, ````, and ````. If the latter header " +"file does not exist on your system, it declares the functions " +":c:func:`malloc`, :c:func:`free` and :c:func:`realloc` directly." +msgstr "" +"所有在 :file:`Python.h` 中定义的用户可见的符号都具有 ``Py`` 或 ``PY`` 前缀,已在标准头文件中定义的那些除外。 " +"考虑到便利性,也由于其在 Python 解释器中被广泛使用,``\"Python.h\"`` 还包含了一些标准头文件: " +"````,````,```` 和 ````。 " +"如果后面的头文件在你的系统上不存在,它还会直接声明函数 :c:func:`malloc`,:c:func:`free` 和 " +":c:func:`realloc`。" + +#: ../../extending/extending.rst:83 +msgid "" +"The next thing we add to our module file is the C function that will be " +"called when the Python expression ``spam.system(string)`` is evaluated " +"(we'll see shortly how it ends up being called)::" +msgstr "下面添加C函数到扩展模块,当调用 ``spam.system(string)`` 时会做出响应,(我们稍后会看到调用):" + +#: ../../extending/extending.rst:99 +msgid "" +"There is a straightforward translation from the argument list in Python (for" +" example, the single expression ``\"ls -l\"``) to the arguments passed to " +"the C function. The C function always has two arguments, conventionally " +"named *self* and *args*." +msgstr "" +"有个直接翻译参数列表的方法(举个例子,单独的 ``\"ls -l\"`` )到要传递给C函数的参数。C函数总是有两个参数,通常名字是 *self* 和 " +"*args* 。" + +#: ../../extending/extending.rst:104 +msgid "" +"The *self* argument points to the module object for module-level functions; " +"for a method it would point to the object instance." +msgstr "对模块级函数, *self* 参数指向模块对象;对于方法则指向对象实例。" + +#: ../../extending/extending.rst:107 +msgid "" +"The *args* argument will be a pointer to a Python tuple object containing " +"the arguments. Each item of the tuple corresponds to an argument in the " +"call's argument list. The arguments are Python objects --- in order to do " +"anything with them in our C function we have to convert them to C values. " +"The function :c:func:`PyArg_ParseTuple` in the Python API checks the " +"argument types and converts them to C values. It uses a template string to " +"determine the required types of the arguments as well as the types of the C " +"variables into which to store the converted values. More about this later." +msgstr "" +"*args* 参数是指向一个 Python 的 tuple 对象的指针,其中包含参数。 每个 tuple 项对应一个调用参数。 这些参数也全都是 " +"Python 对象 --- 要在我们的 C 函数中使用它们就需要先将其转换为 C 值。 Python API 中的函数 " +":c:func:`PyArg_ParseTuple` 会检查参数类型并将其转换为 C 值。 它使用模板字符串确定需要的参数类型以及存储被转换的值的 C " +"变量类型。 细节将稍后说明。" + +#: ../../extending/extending.rst:116 +msgid "" +":c:func:`PyArg_ParseTuple` returns true (nonzero) if all arguments have the " +"right type and its components have been stored in the variables whose " +"addresses are passed. It returns false (zero) if an invalid argument list " +"was passed. In the latter case it also raises an appropriate exception so " +"the calling function can return ``NULL`` immediately (as we saw in the " +"example)." +msgstr "" +":c:func:`PyArg_ParseTuple` " +"在所有参数都有正确类型且组成部分按顺序放在传递进来的地址里时,返回真(非零)。其在传入无效参数时返回假(零)。在后续例子里,还会抛出特定异常,使得调用的函数可以理解返回" +" ``NULL`` (也就是例子里所见)。" + +#: ../../extending/extending.rst:126 +msgid "Intermezzo: Errors and Exceptions" +msgstr "关于错误和异常" + +#: ../../extending/extending.rst:128 +msgid "" +"An important convention throughout the Python interpreter is the following: " +"when a function fails, it should set an exception condition and return an " +"error value (usually ``-1`` or a ``NULL`` pointer). Exception information " +"is stored in three members of the interpreter's thread state. These are " +"``NULL`` if there is no exception. Otherwise they are the C equivalents of " +"the members of the Python tuple returned by :meth:`sys.exc_info`. These are" +" the exception type, exception instance, and a traceback object. It is " +"important to know about them to understand how errors are passed around." +msgstr "" +"整个 Python 解释器系统有一个如下所述的重要惯例:当一个函数运行失败时,它应当设置一个异常条件并返回一个错误值(通常为 ``-1`` 或 " +"``NULL`` 指针)。 异常信息保存在解释器线程状态的三个成员中。 如果没有异常则它们的值为 ``NULL``。 在其他情况下它们是 " +":meth:`sys.exc_info` 所返回的 Python 元组的成员的 C 对应物。 它们分别是异常类型、异常实例和回溯对象。 " +"理解它们对于理解错误是如何被传递的非常重要。" + +#: ../../extending/extending.rst:137 +msgid "" +"The Python API defines a number of functions to set various types of " +"exceptions." +msgstr "Python API中定义了一些函数来设置这些变量。" + +#: ../../extending/extending.rst:139 +msgid "" +"The most common one is :c:func:`PyErr_SetString`. Its arguments are an " +"exception object and a C string. The exception object is usually a " +"predefined object like :c:data:`PyExc_ZeroDivisionError`. The C string " +"indicates the cause of the error and is converted to a Python string object " +"and stored as the \"associated value\" of the exception." +msgstr "" +"最常用的就是 :c:func:`PyErr_SetString`。 其参数是异常对象和 C 字符串。 异常对象一般是像 " +":c:data:`PyExc_ZeroDivisionError` 这样的预定义对象。 C 字符串指明异常原因,并被转换为一个 Python " +"字符串对象存储为异常的“关联值”。" + +#: ../../extending/extending.rst:145 +msgid "" +"Another useful function is :c:func:`PyErr_SetFromErrno`, which only takes an" +" exception argument and constructs the associated value by inspection of the" +" global variable :c:data:`errno`. The most general function is " +":c:func:`PyErr_SetObject`, which takes two object arguments, the exception " +"and its associated value. You don't need to :c:func:`Py_INCREF` the objects" +" passed to any of these functions." +msgstr "" +"另一个有用的函数是 :c:func:`PyErr_SetFromErrno` ,仅接受一个异常对象,异常描述包含在全局变量 " +":c:data:`errno` 中。最通用的函数还是 :c:func:`PyErr_SetObject` " +",包含两个参数,分别为异常对象和异常描述。你不需要使用 :c:func:`Py_INCREF` 来增加传递到其他函数的参数对象的引用计数。" + +#: ../../extending/extending.rst:152 +msgid "" +"You can test non-destructively whether an exception has been set with " +":c:func:`PyErr_Occurred`. This returns the current exception object, or " +"``NULL`` if no exception has occurred. You normally don't need to call " +":c:func:`PyErr_Occurred` to see whether an error occurred in a function " +"call, since you should be able to tell from the return value." +msgstr "" +"你可以通过 :c:func:`PyErr_Occurred` 在不造成破坏的情况下检测是否设置了异常。 这将返回当前异常对象,或者如果未发生异常则返回 " +"``NULL``。 你通常不需要调用 :c:func:`PyErr_Occurred` 来查看函数调用中是否发生了错误,因为你应该能从返回值中看出来。" + +#: ../../extending/extending.rst:158 +msgid "" +"When a function *f* that calls another function *g* detects that the latter " +"fails, *f* should itself return an error value (usually ``NULL`` or ``-1``)." +" It should *not* call one of the :c:func:`PyErr_\\*` functions --- one has " +"already been called by *g*. *f*'s caller is then supposed to also return an " +"error indication to *its* caller, again *without* calling " +":c:func:`PyErr_\\*`, and so on --- the most detailed cause of the error was " +"already reported by the function that first detected it. Once the error " +"reaches the Python interpreter's main loop, this aborts the currently " +"executing Python code and tries to find an exception handler specified by " +"the Python programmer." +msgstr "" +"当一个函数 *f* 调用另一个函数 *g* 时检测到后者出错了,*f* 应当自己返回一个错误值 (通常为 ``NULL`` 或 ``-1``)。 它 " +"*不应该* 调用某个 :c:func:`PyErr_\\*` 函数 --- 这类函数已经被 *g* 调用过了。 *f* " +"的调用者随后也应当返回一个错误来提示 *它的* 调用者,同样 *不应该* 调用 :c:func:`PyErr_\\*`,依此类推 --- " +"错误的最详细原因已经由首先检测到它的函数报告了。 一旦这个错误到达 Python 解释器的主循环,它会中止当前执行的 Python 代码并尝试找出由 " +"Python 程序员所指定的异常处理程序。" + +#: ../../extending/extending.rst:168 +msgid "" +"(There are situations where a module can actually give a more detailed error" +" message by calling another :c:func:`PyErr_\\*` function, and in such cases " +"it is fine to do so. As a general rule, however, this is not necessary, and" +" can cause information about the cause of the error to be lost: most " +"operations can fail for a variety of reasons.)" +msgstr "" +"(在某些情况下,当模块确实能够通过调用其它 :c:func:`PyErr_\\*` 函数给出更加详细的错误消息,并且在这些情况是可以这样做的。 " +"但是按照一般规则,这是不必要的,并可能导致有关错误原因的信息丢失:大多数操作会由于种种原因而失败。)" + +#: ../../extending/extending.rst:174 +msgid "" +"To ignore an exception set by a function call that failed, the exception " +"condition must be cleared explicitly by calling :c:func:`PyErr_Clear`. The " +"only time C code should call :c:func:`PyErr_Clear` is if it doesn't want to " +"pass the error on to the interpreter but wants to handle it completely by " +"itself (possibly by trying something else, or pretending nothing went " +"wrong)." +msgstr "" +"想要忽略由一个失败的函数调用所设置的异常,异常条件必须通过调用 :c:func:`PyErr_Clear` 显式地被清除。 C 代码应当调用 " +":c:func:`PyErr_Clear` 的唯一情况是如果它不想将错误传给解释器而是想完全由自己来处理它(可能是尝试其他方法,或是假装没有出错)。" + +#: ../../extending/extending.rst:180 +msgid "" +"Every failing :c:func:`malloc` call must be turned into an exception --- the" +" direct caller of :c:func:`malloc` (or :c:func:`realloc`) must call " +":c:func:`PyErr_NoMemory` and return a failure indicator itself. All the " +"object-creating functions (for example, :c:func:`PyLong_FromLong`) already " +"do this, so this note is only relevant to those who call :c:func:`malloc` " +"directly." +msgstr "" +"每次失败的 :c:func:`malloc` 调用必须转换为一个异常。 :c:func:`malloc` (或 :c:func:`realloc` " +")的直接调用者必须调用 :c:func:`PyErr_NoMemory` 来返回错误来提示。所有对象创建函数(例如 " +":c:func:`PyLong_FromLong` )已经这么做了,所以这个提示仅用于直接调用 :c:func:`malloc` 的情况。" + +#: ../../extending/extending.rst:186 +msgid "" +"Also note that, with the important exception of :c:func:`PyArg_ParseTuple` " +"and friends, functions that return an integer status usually return a " +"positive value or zero for success and ``-1`` for failure, like Unix system " +"calls." +msgstr "" +"还要注意的是,除了 :c:func:`PyArg_ParseTuple` 等重要的例外,返回整数状态码的函数通常都是返回正值或零来表示成功,而以 " +"``-1`` 表示失败,如同 Unix 系统调用一样。" + +#: ../../extending/extending.rst:190 +msgid "" +"Finally, be careful to clean up garbage (by making :c:func:`Py_XDECREF` or " +":c:func:`Py_DECREF` calls for objects you have already created) when you " +"return an error indicator!" +msgstr "" +"最后,当你返回一个错误指示器时要注意清理垃圾(通过为你已经创建的对象执行 :c:func:`Py_XDECREF` 或 " +":c:func:`Py_DECREF` 调用)!" + +#: ../../extending/extending.rst:194 +msgid "" +"The choice of which exception to raise is entirely yours. There are " +"predeclared C objects corresponding to all built-in Python exceptions, such " +"as :c:data:`PyExc_ZeroDivisionError`, which you can use directly. Of course," +" you should choose exceptions wisely --- don't use :c:data:`PyExc_TypeError`" +" to mean that a file couldn't be opened (that should probably be " +":c:data:`PyExc_IOError`). If something's wrong with the argument list, the " +":c:func:`PyArg_ParseTuple` function usually raises " +":c:data:`PyExc_TypeError`. If you have an argument whose value must be in a" +" particular range or must satisfy other conditions, " +":c:data:`PyExc_ValueError` is appropriate." +msgstr "" +"选择引发哪个异常完全取决于你的喜好。 所有内置的 Python 异常都有对应的预声明 C 对象,例如 " +":c:data:`PyExc_ZeroDivisionError`,你可以直接使用它们。 当然,你应当明智地选择异常 --- 不要使用 " +":c:data:`PyExc_TypeError` 来表示一个文件无法被打开 (那大概应该用 :c:data:`PyExc_IOError`)。 " +"如果参数列表有问题,:c:func:`PyArg_ParseTuple` 函数通常会引发 :c:data:`PyExc_TypeError`。 " +"如果你想要一个参数的值必须处于特定范围之内或必须满足其他条件,则适宜使用 :c:data:`PyExc_ValueError`。" + +#: ../../extending/extending.rst:204 +msgid "" +"You can also define a new exception that is unique to your module. For this," +" you usually declare a static object variable at the beginning of your " +"file::" +msgstr "你也可以为你的模块定义一个唯一的新异常。需要在文件前部声明一个静态对象变量,如:" + +#: ../../extending/extending.rst:209 +msgid "" +"and initialize it in your module's initialization function " +"(:c:func:`PyInit_spam`) with an exception object::" +msgstr "并且在你的模块的初始化函数 (:c:func:`PyInit_spam`) 中使用一个异常对象来初始化::" + +#: ../../extending/extending.rst:233 +msgid "" +"Note that the Python name for the exception object is :exc:`spam.error`. " +"The :c:func:`PyErr_NewException` function may create a class with the base " +"class being :exc:`Exception` (unless another class is passed in instead of " +"``NULL``), described in :ref:`bltin-exceptions`." +msgstr "" +"注意异常对象的Python名字是 :exc:`spam.error` 。而 :c:func:`PyErr_NewException` " +"函数可以创建一个类,其基类为 :exc:`Exception` (除非是另一个类传入以替换 ``NULL`` ), 细节参见 :ref:`bltin-" +"exceptions` 。" + +#: ../../extending/extending.rst:238 +msgid "" +"Note also that the :c:data:`SpamError` variable retains a reference to the " +"newly created exception class; this is intentional! Since the exception " +"could be removed from the module by external code, an owned reference to the" +" class is needed to ensure that it will not be discarded, causing " +":c:data:`SpamError` to become a dangling pointer. Should it become a " +"dangling pointer, C code which raises the exception could cause a core dump " +"or other unintended side effects." +msgstr "" +"同样注意的是创建类保存了 :c:data:`SpamError` 的一个引用,这是有意的。为了防止被垃圾回收掉,否则 " +":c:data:`SpamError` 随时会成为野指针。" + +#: ../../extending/extending.rst:245 +msgid "" +"We discuss the use of ``PyMODINIT_FUNC`` as a function return type later in " +"this sample." +msgstr "一会讨论 ``PyMODINIT_FUNC`` 作为函数返回类型的用法。" + +#: ../../extending/extending.rst:248 +msgid "" +"The :exc:`spam.error` exception can be raised in your extension module using" +" a call to :c:func:`PyErr_SetString` as shown below::" +msgstr ":exc:`spam.error` 异常可以在扩展模块中抛出,通过 :c:func:`PyErr_SetString` 函数调用,如下:" + +#: ../../extending/extending.rst:271 +msgid "Back to the Example" +msgstr "回到例子" + +#: ../../extending/extending.rst:273 +msgid "" +"Going back to our example function, you should now be able to understand " +"this statement::" +msgstr "回到前面的例子,你应该明白下面的代码:" + +#: ../../extending/extending.rst:279 +msgid "" +"It returns ``NULL`` (the error indicator for functions returning object " +"pointers) if an error is detected in the argument list, relying on the " +"exception set by :c:func:`PyArg_ParseTuple`. Otherwise the string value of " +"the argument has been copied to the local variable :c:data:`command`. This " +"is a pointer assignment and you are not supposed to modify the string to " +"which it points (so in Standard C, the variable :c:data:`command` should " +"properly be declared as ``const char *command``)." +msgstr "" +"如果在参数列表中检测到错误,它将返回 ``NULL`` (该值是返回对象指针的函数所使用的错误提示),这取决于 " +":c:func:`PyArg_ParseTuple` 设置的异常。 在其他情况下参数的字符串值会被拷贝到局部变量 :c:data:`command`。 " +"这是一个指针赋值并且你不应该修改它所指向的字符串 (因此在标准 C 中,变量 :c:data:`command` 应当被正确地声明为 ``const " +"char *command``)。" + +#: ../../extending/extending.rst:287 +msgid "" +"The next statement is a call to the Unix function :c:func:`system`, passing " +"it the string we just got from :c:func:`PyArg_ParseTuple`::" +msgstr "" +"下一个语句使用UNIX系统函数 :c:func:`system` ,传递给他的参数是刚才从 :c:func:`PyArg_ParseTuple` " +"取出的:" + +#: ../../extending/extending.rst:292 +msgid "" +"Our :func:`spam.system` function must return the value of :c:data:`sts` as a" +" Python object. This is done using the function :c:func:`PyLong_FromLong`. " +"::" +msgstr "" +"我们的 :func:`spam.system` 函数必须返回 :c:data:`sts` 的值作为Python对象。这通过使用函数 " +":c:func:`PyLong_FromLong` 来实现。" + +#: ../../extending/extending.rst:297 +msgid "" +"In this case, it will return an integer object. (Yes, even integers are " +"objects on the heap in Python!)" +msgstr "在这种情况下,会返回一个整数对象,(这个对象会在Python堆里面管理)。" + +#: ../../extending/extending.rst:300 +msgid "" +"If you have a C function that returns no useful argument (a function " +"returning :c:type:`void`), the corresponding Python function must return " +"``None``. You need this idiom to do so (which is implemented by the " +":c:macro:`Py_RETURN_NONE` macro)::" +msgstr "" +"如果你的 C 函数没有有用的返回值 (返回 :c:type:`void` 的函数),则对应的 Python 函数必须返回 ``None``。 " +"你必须使用这种写法(可以通过 :c:macro:`Py_RETURN_NONE` 宏来实现):" + +#: ../../extending/extending.rst:308 +msgid "" +":c:data:`Py_None` is the C name for the special Python object ``None``. It " +"is a genuine Python object rather than a ``NULL`` pointer, which means " +"\"error\" in most contexts, as we have seen." +msgstr "" +":c:data:`Py_None` 是特殊 Python 对象 ``None`` 所对应的 C 名称。 它是一个真正的 Python 对象而不是 " +"``NULL`` 指针,如我们所见,后者在大多数上下文中都意味着“错误”。" + +#: ../../extending/extending.rst:316 +msgid "The Module's Method Table and Initialization Function" +msgstr "模块方法表和初始化函数" + +#: ../../extending/extending.rst:318 +msgid "" +"I promised to show how :c:func:`spam_system` is called from Python programs." +" First, we need to list its name and address in a \"method table\"::" +msgstr "" +"为了展示 :c:func:`spam_system` 如何被Python程序调用。把函数声明为可以被Python调用,需要先定义一个方法表 " +"\"method table\" 。" + +#: ../../extending/extending.rst:329 +msgid "" +"Note the third entry (``METH_VARARGS``). This is a flag telling the " +"interpreter the calling convention to be used for the C function. It should" +" normally always be ``METH_VARARGS`` or ``METH_VARARGS | METH_KEYWORDS``; a " +"value of ``0`` means that an obsolete variant of :c:func:`PyArg_ParseTuple` " +"is used." +msgstr "" +"注意第三个参数 ( ``METH_VARARGS`` ) ,这个标志指定会使用C的调用惯例。可选值有 ``METH_VARARGS`` 、 " +"``METH_VARARGS | METH_KEYWORDS`` 。值 ``0`` 代表使用 :c:func:`PyArg_ParseTuple` " +"的陈旧变量。" + +#: ../../extending/extending.rst:334 +msgid "" +"When using only ``METH_VARARGS``, the function should expect the Python-" +"level parameters to be passed in as a tuple acceptable for parsing via " +":c:func:`PyArg_ParseTuple`; more information on this function is provided " +"below." +msgstr "" +"如果单独使用 ``METH_VARARGS`` ,函数会等待Python传来tuple格式的参数,并最终使用 " +":c:func:`PyArg_ParseTuple` 进行解析。" + +#: ../../extending/extending.rst:338 +msgid "" +"The :const:`METH_KEYWORDS` bit may be set in the third field if keyword " +"arguments should be passed to the function. In this case, the C function " +"should accept a third ``PyObject *`` parameter which will be a dictionary of" +" keywords. Use :c:func:`PyArg_ParseTupleAndKeywords` to parse the arguments " +"to such a function." +msgstr "" +":const:`METH_KEYWORDS` 值表示接受关键字参数。这种情况下C函数需要接受第三个 ``PyObject *`` " +"对象,表示字典参数,使用 :c:func:`PyArg_ParseTupleAndKeywords` 来解析出参数。" + +#: ../../extending/extending.rst:344 +msgid "" +"The method table must be referenced in the module definition structure::" +msgstr "这个方法表必须被模块定义结构所引用。" + +#: ../../extending/extending.rst:355 +msgid "" +"This structure, in turn, must be passed to the interpreter in the module's " +"initialization function. The initialization function must be named " +":c:func:`PyInit_name`, where *name* is the name of the module, and should be" +" the only non-\\ ``static`` item defined in the module file::" +msgstr "" +"这个结构体必须传递给解释器的模块初始化函数。初始化函数必须命名为 :c:func:`PyInit_name` ,其中 *name* " +"是模块的名字,并应该定义为非 ``static`` ,且在模块文件里:" + +#: ../../extending/extending.rst:366 +msgid "" +"Note that PyMODINIT_FUNC declares the function as ``PyObject *`` return " +"type, declares any special linkage declarations required by the platform, " +"and for C++ declares the function as ``extern \"C\"``." +msgstr "" +"注意 PyMODINIT_FUNC 将函数声明为 ``PyObject *`` 返回类型,声明了任何平台所要求的特殊链接声明,并针对 C++ " +"将函数声明为 ``extern \"C\"``。" + +#: ../../extending/extending.rst:370 +msgid "" +"When the Python program imports module :mod:`spam` for the first time, " +":c:func:`PyInit_spam` is called. (See below for comments about embedding " +"Python.) It calls :c:func:`PyModule_Create`, which returns a module object, " +"and inserts built-in function objects into the newly created module based " +"upon the table (an array of :c:type:`PyMethodDef` structures) found in the " +"module definition. :c:func:`PyModule_Create` returns a pointer to the module" +" object that it creates. It may abort with a fatal error for certain " +"errors, or return ``NULL`` if the module could not be initialized " +"satisfactorily. The init function must return the module object to its " +"caller, so that it then gets inserted into ``sys.modules``." +msgstr "" +"当 Python 程序首次导入 :mod:`spam` 模块时, :c:func:`PyInit_spam` 会被调用。 (有关嵌入 Python " +"的注释参见下文。) 它将调用 " +":c:func:`PyModule_Create`,该函数会返回一个模块对象,并基于在模块定义中找到的表将内置函数对象插入到新创建的模块中(该表是一个 " +":c:type:`PyMethodDef` 结构体的数组)。 :c:func:`PyModule_Create` 返回一个指向它所创建的模块对象的指针。" +" 它可能会因程度严重的特定错误而中止,或者在模块无法成功初始化时返回 ``NULL``。 初始化函数必须返回模块对象给其调用者,这样它就可以被插入到 " +"``sys.modules`` 中。" + +#: ../../extending/extending.rst:381 +msgid "" +"When embedding Python, the :c:func:`PyInit_spam` function is not called " +"automatically unless there's an entry in the :c:data:`PyImport_Inittab` " +"table. To add the module to the initialization table, use " +":c:func:`PyImport_AppendInittab`, optionally followed by an import of the " +"module::" +msgstr "" +"当嵌入Python时, :c:func:`PyInit_spam` 函数不会被自动调用,除非放在 :c:data:`PyImport_Inittab` " +"表里。要添加模块到初始化表,使用 :c:func:`PyImport_AppendInittab` ,可选的跟着一个模块的导入。" + +#: ../../extending/extending.rst:425 +msgid "" +"Removing entries from ``sys.modules`` or importing compiled modules into " +"multiple interpreters within a process (or following a :c:func:`fork` " +"without an intervening :c:func:`exec`) can create problems for some " +"extension modules. Extension module authors should exercise caution when " +"initializing internal data structures." +msgstr "" +"要从 ``sys.modules`` 删除实体或导入已编译模块到一个进程里的多个解释器(或使用 :c:func:`fork` 而没用 " +":c:func:`exec` )会在一些扩展模块上产生错误。扩展模块作者可以在初始化内部数据结构时给出警告。" + +#: ../../extending/extending.rst:431 +msgid "" +"A more substantial example module is included in the Python source " +"distribution as :file:`Modules/xxmodule.c`. This file may be used as a " +"template or simply read as an example." +msgstr "" +"更多关于模块的现实的例子包含在 Python 源码发布包的 :file:`Modules/xxmodule.c` 中。 " +"此文件可以被用作代码模板或是学习样例。" + +#: ../../extending/extending.rst:437 +msgid "" +"Unlike our ``spam`` example, ``xxmodule`` uses *multi-phase initialization* " +"(new in Python 3.5), where a PyModuleDef structure is returned from " +"``PyInit_spam``, and creation of the module is left to the import machinery." +" For details on multi-phase initialization, see :PEP:`489`." +msgstr "" +"不像我们的 ``spam`` 例子, ``xxmodule`` 使用了 *多阶段初始化* (Python3.5开始引入), " +"``PyInit_spam`` 会返回一个 PyModuleDef 结构体,然后创建的模块放到导入机制。细节参考 :PEP:`489` 的多阶段初始化。" + +#: ../../extending/extending.rst:446 +msgid "Compilation and Linkage" +msgstr "编译和链接" + +#: ../../extending/extending.rst:448 +msgid "" +"There are two more things to do before you can use your new extension: " +"compiling and linking it with the Python system. If you use dynamic " +"loading, the details may depend on the style of dynamic loading your system " +"uses; see the chapters about building extension modules (chapter " +":ref:`building`) and additional information that pertains only to building " +"on Windows (chapter :ref:`building-on-windows`) for more information about " +"this." +msgstr "" +"在你能使用你的新写的扩展之前,你还需要做两件事情:使用 Python " +"系统来编译和链接。如果你使用动态加载,这取决于你使用的操作系统的动态加载机制;更多信息请参考编译扩展模块的章节( :ref:`building` " +"章节),以及在 Windows 上编译需要的额外信息( :ref:`building-on-windows` 章节)。" + +#: ../../extending/extending.rst:455 +msgid "" +"If you can't use dynamic loading, or if you want to make your module a " +"permanent part of the Python interpreter, you will have to change the " +"configuration setup and rebuild the interpreter. Luckily, this is very " +"simple on Unix: just place your file (:file:`spammodule.c` for example) in " +"the :file:`Modules/` directory of an unpacked source distribution, add a " +"line to the file :file:`Modules/Setup.local` describing your file:" +msgstr "" +"如果你不使用动态加载,或者想要让模块永久性的作为Python解释器的一部分,就必须修改配置设置,并重新构建解释器。幸运的是在Unix上很简单,只需要把你的文件" +" ( :file:`spammodule.c` 为例) 放在解压缩源码发行包的 :file:`Modules/` 目录下,添加一行到 " +":file:`Modules/Setup.local` 来描述你的文件:" + +#: ../../extending/extending.rst:466 +msgid "" +"and rebuild the interpreter by running :program:`make` in the toplevel " +"directory. You can also run :program:`make` in the :file:`Modules/` " +"subdirectory, but then you must first rebuild :file:`Makefile` there by " +"running ':program:`make` Makefile'. (This is necessary each time you change" +" the :file:`Setup` file.)" +msgstr "" +"然后在顶层目录运行 :program:`make` 来重新构建解释器。你也可以在 :file:`Modules/` 子目录使用 " +":program:`make`,但是你必须先重建 :file:`Makefile` 文件,然后运行 ':program:`make` Makefile'" +" 命令。(你每次修改 :file:`Setup` 文件都需要这样操作。)" + +#: ../../extending/extending.rst:472 +msgid "" +"If your module requires additional libraries to link with, these can be " +"listed on the line in the configuration file as well, for instance:" +msgstr "如果你的模块需要额外的链接,这些内容可以列出在配置文件里,举个实例:" + +#: ../../extending/extending.rst:483 +msgid "Calling Python Functions from C" +msgstr "在C中调用Python函数" + +#: ../../extending/extending.rst:485 +msgid "" +"So far we have concentrated on making C functions callable from Python. The" +" reverse is also useful: calling Python functions from C. This is especially" +" the case for libraries that support so-called \"callback\" functions. If a" +" C interface makes use of callbacks, the equivalent Python often needs to " +"provide a callback mechanism to the Python programmer; the implementation " +"will require calling the Python callback functions from a C callback. Other" +" uses are also imaginable." +msgstr "" +"迄今为止,我们一直把注意力集中于让Python调用C函数,其实反过来也很有用,就是用C调用Python函数。这在回调函数中尤其有用。如果一个C接口使用回调,那么就要实现这个回调机制。" + +#: ../../extending/extending.rst:493 +msgid "" +"Fortunately, the Python interpreter is easily called recursively, and there " +"is a standard interface to call a Python function. (I won't dwell on how to" +" call the Python parser with a particular string as input --- if you're " +"interested, have a look at the implementation of the :option:`-c` command " +"line option in :file:`Modules/main.c` from the Python source code.)" +msgstr "" +"幸运的是,Python解释器是比较方便回调的,并给标准Python函数提供了标准接口。(这里就不再详述解析Python字符串作为输入的方式,如果有兴趣可以参考" +" :file:`Python/pythonmain.c` 中的 :option:`-c` 命令行代码。)" + +#: ../../extending/extending.rst:499 +msgid "" +"Calling a Python function is easy. First, the Python program must somehow " +"pass you the Python function object. You should provide a function (or some" +" other interface) to do this. When this function is called, save a pointer " +"to the Python function object (be careful to :c:func:`Py_INCREF` it!) in a " +"global variable --- or wherever you see fit. For example, the following " +"function might be part of a module definition::" +msgstr "" +"调用Python函数很简单,首先Python程序要传递Python函数对象。应该提供个函数(或其他接口)来实现。当调用这个函数时,用全局变量保存Python函数对象的指针,还要调用" +" (:c:func:`Py_INCREF`) 来增加引用计数,当然不用全局变量也没什么关系。举个例子,如下函数可能是模块定义的一部分:" + +#: ../../extending/extending.rst:529 +msgid "" +"This function must be registered with the interpreter using the " +":const:`METH_VARARGS` flag; this is described in section :ref:`methodtable`." +" The :c:func:`PyArg_ParseTuple` function and its arguments are documented " +"in section :ref:`parsetuple`." +msgstr "" +"这个函数必须使用 :const:`METH_VARARGS` 标志注册到解释器,这在 :ref:`methodtable` 章节会描述。 " +":c:func:`PyArg_ParseTuple` 函数及其参数的文档在 :ref:`parsetuple` 。" + +#: ../../extending/extending.rst:534 +msgid "" +"The macros :c:func:`Py_XINCREF` and :c:func:`Py_XDECREF` increment/decrement" +" the reference count of an object and are safe in the presence of ``NULL`` " +"pointers (but note that *temp* will not be ``NULL`` in this context). More" +" info on them in section :ref:`refcounts`." +msgstr "" +":c:func:`Py_XINCREF` 和 :c:func:`Py_XDECREF` 这两个宏可增加/减少一个对象的引用计数,并且当存在 " +"``NULL`` 指针时仍可保证安全 (但请注意在这个上下文中 *temp* 将不为 ``NULL``)。 更多相关信息请参考 " +":ref:`refcounts` 章节。" + +#: ../../extending/extending.rst:541 +msgid "" +"Later, when it is time to call the function, you call the C function " +":c:func:`PyObject_CallObject`. This function has two arguments, both " +"pointers to arbitrary Python objects: the Python function, and the argument " +"list. The argument list must always be a tuple object, whose length is the " +"number of arguments. To call the Python function with no arguments, pass in" +" ``NULL``, or an empty tuple; to call it with one argument, pass a singleton" +" tuple. :c:func:`Py_BuildValue` returns a tuple when its format string " +"consists of zero or more format codes between parentheses. For example::" +msgstr "" +"随后,当要调用此函数时,你将调用 C 函数 :c:func:`PyObject_CallObject`。 该函数有两个参数,它们都属于指针,指向任意 " +"Python 对象:即 Python 函数,及其参数列表。 参数列表必须总是一个元组对象,其长度即参数的个数量。 要不带参数地调用 Python " +"函数,则传入 ``NULL`` 或一个空元组;要带一个参数调用它,则传入一个单元组。 :c:func:`Py_BuildValue` " +"会在其格式字符串包含一对圆括号内的零个或多个格式代码时返回一个元组。 例如::" + +#: ../../extending/extending.rst:561 +msgid "" +":c:func:`PyObject_CallObject` returns a Python object pointer: this is the " +"return value of the Python function. :c:func:`PyObject_CallObject` is " +"\"reference-count-neutral\" with respect to its arguments. In the example a" +" new tuple was created to serve as the argument list, which is " +":c:func:`Py_DECREF`\\ -ed immediately after the " +":c:func:`PyObject_CallObject` call." +msgstr "" +":c:func:`PyObject_CallObject` 返回Python对象指针,这也是Python函数的返回值。 " +":c:func:`PyObject_CallObject` 是一个对其参数 \"引用计数无关\" 的函数。例子中新的元组创建用于参数列表,并且在 " +":c:func:`PyObject_CallObject` 之后立即使用了 :c:func:`Py_DECREF` 。" + +#: ../../extending/extending.rst:568 +msgid "" +"The return value of :c:func:`PyObject_CallObject` is \"new\": either it is a" +" brand new object, or it is an existing object whose reference count has " +"been incremented. So, unless you want to save it in a global variable, you " +"should somehow :c:func:`Py_DECREF` the result, even (especially!) if you are" +" not interested in its value." +msgstr "" +":c:func:`PyObject_CallObject` " +"的返回值总是“新”的:要么是一个新建的对象;要么是已有对象,但增加了引用计数。所以除非你想把结果保存在全局变量中,你需要对这个值使用 " +":c:func:`Py_DECREF`,即使你对里面的内容(特别!)不感兴趣。" + +#: ../../extending/extending.rst:574 +msgid "" +"Before you do this, however, it is important to check that the return value " +"isn't ``NULL``. If it is, the Python function terminated by raising an " +"exception. If the C code that called :c:func:`PyObject_CallObject` is called" +" from Python, it should now return an error indication to its Python caller," +" so the interpreter can print a stack trace, or the calling Python code can " +"handle the exception. If this is not possible or desirable, the exception " +"should be cleared by calling :c:func:`PyErr_Clear`. For example::" +msgstr "" +"但是在你这么做之前,很重要的一点是检查返回值不是 ``NULL``。 如果是的话,Python 函数会终止并引发异常。 如果调用 " +":c:func:`PyObject_CallObject` 的 C 代码是在 Python 中唤起的,它应当立即返回一个错误来告知其 Python " +"调用者,以便解释器能打印栈回溯信息,或者让调用方 Python 代码能处理该异常。 如果这无法做到或不合本意,则应当通过调用 " +":c:func:`PyErr_Clear` 来清除异常。 例如::" + +#: ../../extending/extending.rst:587 +msgid "" +"Depending on the desired interface to the Python callback function, you may " +"also have to provide an argument list to :c:func:`PyObject_CallObject`. In " +"some cases the argument list is also provided by the Python program, through" +" the same interface that specified the callback function. It can then be " +"saved and used in the same manner as the function object. In other cases, " +"you may have to construct a new tuple to pass as the argument list. The " +"simplest way to do this is to call :c:func:`Py_BuildValue`. For example, if" +" you want to pass an integral event code, you might use the following code::" +msgstr "" +"依赖于具体的回调函数,你还要提供一个参数列表到 :c:func:`PyObject_CallObject` " +"。在某些情况下参数列表是由Python程序提供的,通过接口再传到回调函数对象。这样就可以不改变形式直接传递。另外一些时候你要构造一个新的元组来传递参数。最简单的方法就是" +" :c:func:`Py_BuildValue` 函数构造tuple。举个例子,你要传递一个事件代码时可以用如下代码:" + +#: ../../extending/extending.rst:606 +msgid "" +"Note the placement of ``Py_DECREF(arglist)`` immediately after the call, " +"before the error check! Also note that strictly speaking this code is not " +"complete: :c:func:`Py_BuildValue` may run out of memory, and this should be " +"checked." +msgstr "" +"注意 ``Py_DECREF(arglist)`` 所在处会立即调用,在错误检查之前。当然还要注意一些常规的错误,比如 " +":c:func:`Py_BuildValue` 可能会遭遇内存不足等等。" + +#: ../../extending/extending.rst:610 +msgid "" +"You may also call a function with keyword arguments by using " +":c:func:`PyObject_Call`, which supports arguments and keyword arguments. As" +" in the above example, we use :c:func:`Py_BuildValue` to construct the " +"dictionary. ::" +msgstr "" +"当你调用函数时还需要注意,用关键字参数调用 :c:func:`PyObject_Call` ,需要支持普通参数和关键字参数。有如如上例子中,我们使用 " +":c:func:`Py_BuildValue` 来构造字典。" + +#: ../../extending/extending.rst:628 +msgid "Extracting Parameters in Extension Functions" +msgstr "提取扩展函数的参数" + +#: ../../extending/extending.rst:632 +msgid "The :c:func:`PyArg_ParseTuple` function is declared as follows::" +msgstr "函数 :c:func:`PyArg_ParseTuple` 的声明如下:" + +#: ../../extending/extending.rst:636 +msgid "" +"The *arg* argument must be a tuple object containing an argument list passed" +" from Python to a C function. The *format* argument must be a format " +"string, whose syntax is explained in :ref:`arg-parsing` in the Python/C API " +"Reference Manual. The remaining arguments must be addresses of variables " +"whose type is determined by the format string." +msgstr "" +"参数 *arg* 必须是一个元组对象,包含从 Python 传递给 C 函数的参数列表。*format* 参数必须是一个格式字符串,语法请参考 " +"Python C/API 手册中的 :ref:`arg-parsing`。剩余参数是各个变量的地址,类型要与格式字符串对应。" + +#: ../../extending/extending.rst:642 +msgid "" +"Note that while :c:func:`PyArg_ParseTuple` checks that the Python arguments " +"have the required types, it cannot check the validity of the addresses of C " +"variables passed to the call: if you make mistakes there, your code will " +"probably crash or at least overwrite random bits in memory. So be careful!" +msgstr "" +"注意 :c:func:`PyArg_ParseTuple` " +"会检测他需要的Python参数类型,却无法检测传递给他的C变量地址,如果这里出错了,可能会在内存中随机写入东西,小心。" + +#: ../../extending/extending.rst:647 +msgid "" +"Note that any Python object references which are provided to the caller are " +"*borrowed* references; do not decrement their reference count!" +msgstr "注意任何由调用者提供的 Python 对象引用是 *借来的* 引用;不要递减它们的引用计数!" + +#: ../../extending/extending.rst:650 +msgid "Some example calls::" +msgstr "一些调用的例子:" + +#: ../../extending/extending.rst:720 +msgid "Keyword Parameters for Extension Functions" +msgstr "给扩展函数的关键字参数" + +#: ../../extending/extending.rst:724 +msgid "" +"The :c:func:`PyArg_ParseTupleAndKeywords` function is declared as follows::" +msgstr "函数 :c:func:`PyArg_ParseTupleAndKeywords` 声明如下:" + +#: ../../extending/extending.rst:729 +msgid "" +"The *arg* and *format* parameters are identical to those of the " +":c:func:`PyArg_ParseTuple` function. The *kwdict* parameter is the " +"dictionary of keywords received as the third parameter from the Python " +"runtime. The *kwlist* parameter is a ``NULL``-terminated list of strings " +"which identify the parameters; the names are matched with the type " +"information from *format* from left to right. On success, " +":c:func:`PyArg_ParseTupleAndKeywords` returns true, otherwise it returns " +"false and raises an appropriate exception." +msgstr "" +"*arg* 与 *format* 形参与 :c:func:`PyArg_ParseTuple` 函数所定义的一致。 *kwdict* " +"形参是作为第三个参数从 Python 运行时接收的关键字字典。 *kwlist* 形参是以 ``NULL`` " +"结尾的字符串列表,它被用来标识形参;名称从左至右与来自 *format* 的类型信息相匹配。 " +"如果执行成功,:c:func:`PyArg_ParseTupleAndKeywords` 会返回真值,否则返回假值并引发一个适当的异常。" + +#: ../../extending/extending.rst:739 +msgid "" +"Nested tuples cannot be parsed when using keyword arguments! Keyword " +"parameters passed in which are not present in the *kwlist* will cause " +":exc:`TypeError` to be raised." +msgstr "嵌套的元组在使用关键字参数时无法生效,不在 *kwlist* 中的关键字参数会导致 :exc:`TypeError` 异常。" + +#: ../../extending/extending.rst:745 +msgid "" +"Here is an example module which uses keywords, based on an example by Geoff " +"Philbrick (philbrick@hks.com)::" +msgstr "如下例子是使用关键字参数的例子模块,作者是 Geoff Philbrick (philbrick@hks.com):" + +#: ../../extending/extending.rst:800 +msgid "Building Arbitrary Values" +msgstr "构造任意值" + +#: ../../extending/extending.rst:802 +msgid "" +"This function is the counterpart to :c:func:`PyArg_ParseTuple`. It is " +"declared as follows::" +msgstr "这个函数与 :c:func:`PyArg_ParseTuple` 很相似,声明如下:" + +#: ../../extending/extending.rst:807 +msgid "" +"It recognizes a set of format units similar to the ones recognized by " +":c:func:`PyArg_ParseTuple`, but the arguments (which are input to the " +"function, not output) must not be pointers, just values. It returns a new " +"Python object, suitable for returning from a C function called from Python." +msgstr "" +"接受一个格式字符串,与 :c:func:`PyArg_ParseTuple` " +"相同,但是参数必须是原变量的地址指针(输入给函数,而非输出)。最终返回一个Python对象适合于返回C函数调用给Python代码。" + +#: ../../extending/extending.rst:812 +msgid "" +"One difference with :c:func:`PyArg_ParseTuple`: while the latter requires " +"its first argument to be a tuple (since Python argument lists are always " +"represented as tuples internally), :c:func:`Py_BuildValue` does not always " +"build a tuple. It builds a tuple only if its format string contains two or " +"more format units. If the format string is empty, it returns ``None``; if it" +" contains exactly one format unit, it returns whatever object is described " +"by that format unit. To force it to return a tuple of size 0 or one, " +"parenthesize the format string." +msgstr "" +"一个与 :c:func:`PyArg_ParseTuple` " +"的不同是,后面可能需要的要求返回一个元组(Python参数里诶包总是在内部描述为元组),比如用于传递给其他Python函数以参数。 " +":c:func:`Py_BuildValue` 并不总是生成元组,在多于1个格式字符串时会生成元组,而如果格式字符串为空则返回 ``None`` " +",一个参数则直接返回该参数的对象。如果要求强制生成一个长度为0的元组,或包含一个元素的元组,需要在格式字符串中加上括号。" + +#: ../../extending/extending.rst:820 +msgid "" +"Examples (to the left the call, to the right the resulting Python value):" +msgstr "例子(左侧是调用,右侧是Python值结果):" + +#: ../../extending/extending.rst:846 +msgid "Reference Counts" +msgstr "引用计数" + +#: ../../extending/extending.rst:848 +msgid "" +"In languages like C or C++, the programmer is responsible for dynamic " +"allocation and deallocation of memory on the heap. In C, this is done using" +" the functions :c:func:`malloc` and :c:func:`free`. In C++, the operators " +"``new`` and ``delete`` are used with essentially the same meaning and we'll " +"restrict the following discussion to the C case." +msgstr "" +"在C/C++语言中,程序员负责动态分配和回收堆heap当中的内存。在C里,通过函数 :c:func:`malloc` 和 :c:func:`free` " +"来完成。在C++里是操作 ``new`` 和 ``delete`` 来实现相同的功能。" + +#: ../../extending/extending.rst:854 +msgid "" +"Every block of memory allocated with :c:func:`malloc` should eventually be " +"returned to the pool of available memory by exactly one call to " +":c:func:`free`. It is important to call :c:func:`free` at the right time. " +"If a block's address is forgotten but :c:func:`free` is not called for it, " +"the memory it occupies cannot be reused until the program terminates. This " +"is called a :dfn:`memory leak`. On the other hand, if a program calls " +":c:func:`free` for a block and then continues to use the block, it creates a" +" conflict with re-use of the block through another :c:func:`malloc` call. " +"This is called :dfn:`using freed memory`. It has the same bad consequences " +"as referencing uninitialized data --- core dumps, wrong results, mysterious " +"crashes." +msgstr "" +"每个由 :c:func:`malloc` 分配的内存块,最终都要由 :c:func:`free` 退回到可用内存池里面去。而调用 " +":c:func:`free` 的时机非常重要,如果一个内存块忘了 :c:func:`free` " +"则会导致内存泄漏,这块内存在程序结束前将无法重新使用。这叫做 :dfn:`内存泄漏` 。而如果对同一内存块 :c:func:`free` " +"了以后,另外一个指针再次访问,则再次使用 :c:func:`malloc` 复用这块内存会导致冲突。这叫做 :dfn:`野指针` " +"。等同于使用未初始化的数据,core dump,错误结果,神秘的崩溃等。" + +#: ../../extending/extending.rst:865 +msgid "" +"Common causes of memory leaks are unusual paths through the code. For " +"instance, a function may allocate a block of memory, do some calculation, " +"and then free the block again. Now a change in the requirements for the " +"function may add a test to the calculation that detects an error condition " +"and can return prematurely from the function. It's easy to forget to free " +"the allocated memory block when taking this premature exit, especially when " +"it is added later to the code. Such leaks, once introduced, often go " +"undetected for a long time: the error exit is taken only in a small fraction" +" of all calls, and most modern machines have plenty of virtual memory, so " +"the leak only becomes apparent in a long-running process that uses the " +"leaking function frequently. Therefore, it's important to prevent leaks " +"from happening by having a coding convention or strategy that minimizes this" +" kind of errors." +msgstr "" +"内存泄露往往发生在一些并不常见的代码流程上面。比如一个函数申请了内存以后,做了些计算,然后释放内存块。现在一些对函数的修改可能增加对计算的测试并检测错误条件,然后过早的从函数返回了。这很容易忘记在退出前释放内存,特别是后期修改的代码。这种内存泄漏,一旦引入,通常很长时间都难以检测到,错误退出被调用的频度较低,而现代电脑又有非常巨大的虚拟内存,所以泄漏仅在长期运行或频繁调用泄漏函数时才会变得明显。因此,有必要避免内存泄漏,通过代码规范会策略来最小化此类错误。" + +#: ../../extending/extending.rst:878 +msgid "" +"Since Python makes heavy use of :c:func:`malloc` and :c:func:`free`, it " +"needs a strategy to avoid memory leaks as well as the use of freed memory. " +"The chosen method is called :dfn:`reference counting`. The principle is " +"simple: every object contains a counter, which is incremented when a " +"reference to the object is stored somewhere, and which is decremented when a" +" reference to it is deleted. When the counter reaches zero, the last " +"reference to the object has been deleted and the object is freed." +msgstr "" +"Python通过 :c:func:`malloc` 和 :c:func:`free` " +"包含大量的内存分配和释放,同样需要避免内存泄漏和野指针。他选择的方法就是 :dfn:`引用计数` " +"。其原理比较简单:每个对象都包含一个计数器,计数器的增减与对象引用的增减直接相关,当引用计数为0时,表示对象已经没有存在的意义了,对象就可以删除了。" + +#: ../../extending/extending.rst:886 +msgid "" +"An alternative strategy is called :dfn:`automatic garbage collection`. " +"(Sometimes, reference counting is also referred to as a garbage collection " +"strategy, hence my use of \"automatic\" to distinguish the two.) The big " +"advantage of automatic garbage collection is that the user doesn't need to " +"call :c:func:`free` explicitly. (Another claimed advantage is an " +"improvement in speed or memory usage --- this is no hard fact however.) The" +" disadvantage is that for C, there is no truly portable automatic garbage " +"collector, while reference counting can be implemented portably (as long as " +"the functions :c:func:`malloc` and :c:func:`free` are available --- which " +"the C Standard guarantees). Maybe some day a sufficiently portable automatic" +" garbage collector will be available for C. Until then, we'll have to live " +"with reference counts." +msgstr "" +"另一个叫法是 :dfn:`自动垃圾回收` " +"。(有时引用计数也被看作是垃圾回收策略,于是这里的\"自动\"用以区分两者)。自动垃圾回收的优点是用户不需要明确的调用 :c:func:`free` " +"。(另一个优点是改善速度或内存使用,然而这并不难)。缺点是对C,没有可移植的自动垃圾回收器,而引用计数则可以可移植的实现(只要 " +":c:func:`malloc` 和 :c:func:`free` " +"函数是可用的,这也是C标准担保的)。也许以后有一天会出现可移植的自动垃圾回收器,但在此前我们必须与引用计数一起工作。" + +#: ../../extending/extending.rst:898 +msgid "" +"While Python uses the traditional reference counting implementation, it also" +" offers a cycle detector that works to detect reference cycles. This allows" +" applications to not worry about creating direct or indirect circular " +"references; these are the weakness of garbage collection implemented using " +"only reference counting. Reference cycles consist of objects which contain " +"(possibly indirect) references to themselves, so that each object in the " +"cycle has a reference count which is non-zero. Typical reference counting " +"implementations are not able to reclaim the memory belonging to any objects " +"in a reference cycle, or referenced from the objects in the cycle, even " +"though there are no further references to the cycle itself." +msgstr "" +"Python使用传统的引用计数实现,也提供了循环监测器,用以检测引用循环。这使得应用无需担心直接或间接的创建了循环引用,这是引用计数垃圾收集的一个弱点。引用循环是对象(可能直接)的引用了本身,所以循环中的每个对象的引用计数都不是0。典型的引用计数实现无法回收处于引用循环中的对象,或者被循环所引用的对象,哪怕没有循环以外的引用了。" + +#: ../../extending/extending.rst:909 +msgid "" +"The cycle detector is able to detect garbage cycles and can reclaim them. " +"The :mod:`gc` module exposes a way to run the detector (the " +":func:`~gc.collect` function), as well as configuration interfaces and the " +"ability to disable the detector at runtime. The cycle detector is " +"considered an optional component; though it is included by default, it can " +"be disabled at build time using the :option:`!--without-cycle-gc` option to " +"the :program:`configure` script on Unix platforms (including Mac OS X). If " +"the cycle detector is disabled in this way, the :mod:`gc` module will not be" +" available." +msgstr "" +"循环探测器可以检测垃圾循环并回收。 :mod:`gc` 模块提供了方法运行探测器 ( :func:`~gc.collect` 函数) " +",而且可以在运行时配置禁用探测器。循环探测器被当作可选组件,默认是包含的,也可以在构建时禁用,在Unix平台(包括Mac OS X)使用 " +":option:`!--without-cycle-gc` 选项到 :program:`configure` 脚本。如果循环探测器被禁用, " +":mod:`gc` 模块就不可用了。" + +#: ../../extending/extending.rst:923 +msgid "Reference Counting in Python" +msgstr "Python中的引用计数" + +#: ../../extending/extending.rst:925 +msgid "" +"There are two macros, ``Py_INCREF(x)`` and ``Py_DECREF(x)``, which handle " +"the incrementing and decrementing of the reference count. " +":c:func:`Py_DECREF` also frees the object when the count reaches zero. For " +"flexibility, it doesn't call :c:func:`free` directly --- rather, it makes a " +"call through a function pointer in the object's :dfn:`type object`. For " +"this purpose (and others), every object also contains a pointer to its type " +"object." +msgstr "" +"有两个宏 ``Py_INCREF(x)`` 和 ``Py_DECREF(x)`` ,会处理引用计数的增减。 :c:func:`Py_DECREF` " +"也会在引用计数到达0时释放对象。为了灵活,并不会直接调用 :c:func:`free` ,而是通过对象的 :dfn:`类型对象` " +"的函数指针来调用。为了这个目的(或其他的),每个对象同时包含一个指向自身类型对象的指针。" + +#: ../../extending/extending.rst:932 +msgid "" +"The big question now remains: when to use ``Py_INCREF(x)`` and " +"``Py_DECREF(x)``? Let's first introduce some terms. Nobody \"owns\" an " +"object; however, you can :dfn:`own a reference` to an object. An object's " +"reference count is now defined as the number of owned references to it. The" +" owner of a reference is responsible for calling :c:func:`Py_DECREF` when " +"the reference is no longer needed. Ownership of a reference can be " +"transferred. There are three ways to dispose of an owned reference: pass it" +" on, store it, or call :c:func:`Py_DECREF`. Forgetting to dispose of an " +"owned reference creates a memory leak." +msgstr "" +"最大的问题依旧:何时使用 ``Py_INCREF(x)`` 和 ``Py_DECREF(x)`` " +"?我们首先引入一些概念。没有人\"拥有\"一个对象,你可以 :dfn:`拥有一个引用` " +"到一个对象。一个对象的引用计数定义为拥有引用的数量。引用的拥有者有责任调用 :c:func:`Py_DECREF` " +",在引用不再需要时。引用的拥有关系可以被传递。有三种办法来处置拥有的引用:传递、存储、调用 :c:func:`Py_DECREF` " +"。忘记处置一个拥有的引用会导致内存泄漏。" + +#: ../../extending/extending.rst:941 +msgid "" +"It is also possible to :dfn:`borrow` [#]_ a reference to an object. The " +"borrower of a reference should not call :c:func:`Py_DECREF`. The borrower " +"must not hold on to the object longer than the owner from which it was " +"borrowed. Using a borrowed reference after the owner has disposed of it " +"risks using freed memory and should be avoided completely [#]_." +msgstr "" +"还可以 :dfn:`借用` [#]_ 一个对象的引用。借用的引用不应该调用 :c:func:`Py_DECREF` " +"。借用者必须确保不能持有对象超过拥有者借出的时间。在拥有者处置对象后使用借用的引用是有风险的,应该完全避免 [#]_ 。" + +#: ../../extending/extending.rst:947 +msgid "" +"The advantage of borrowing over owning a reference is that you don't need to" +" take care of disposing of the reference on all possible paths through the " +"code --- in other words, with a borrowed reference you don't run the risk of" +" leaking when a premature exit is taken. The disadvantage of borrowing over" +" owning is that there are some subtle situations where in seemingly correct " +"code a borrowed reference can be used after the owner from which it was " +"borrowed has in fact disposed of it." +msgstr "" +"借用相对于引用的优点是你无需担心整条路径上代码的引用,或者说,通过借用你无需担心内存泄漏的风险。借用的缺点是一些看起来正确代码上的借用可能会在拥有者处置后使用对象。" + +#: ../../extending/extending.rst:955 +msgid "" +"A borrowed reference can be changed into an owned reference by calling " +":c:func:`Py_INCREF`. This does not affect the status of the owner from " +"which the reference was borrowed --- it creates a new owned reference, and " +"gives full owner responsibilities (the new owner must dispose of the " +"reference properly, as well as the previous owner)." +msgstr "" +"借用可以变为拥有引用,通过调用 :c:func:`Py_INCREF`。 这不会影响已经借出的拥有者的状态。 " +"这会创建一个新的拥有引用,并给予完全的拥有者责任(新的拥有者必须恰当的处置引用,就像之前的拥有者那样)。" + +#: ../../extending/extending.rst:965 +msgid "Ownership Rules" +msgstr "拥有规则" + +#: ../../extending/extending.rst:967 +msgid "" +"Whenever an object reference is passed into or out of a function, it is part" +" of the function's interface specification whether ownership is transferred " +"with the reference or not." +msgstr "当一个对象引用传递进出一个函数时,函数的接口应该指定拥有关系的传递是否包含引用。" + +#: ../../extending/extending.rst:971 +msgid "" +"Most functions that return a reference to an object pass on ownership with " +"the reference. In particular, all functions whose function it is to create " +"a new object, such as :c:func:`PyLong_FromLong` and :c:func:`Py_BuildValue`," +" pass ownership to the receiver. Even if the object is not actually new, " +"you still receive ownership of a new reference to that object. For " +"instance, :c:func:`PyLong_FromLong` maintains a cache of popular values and " +"can return a reference to a cached item." +msgstr "" +"大多数函数返回一个对象的引用,并传递引用拥有关系。通常,所有创建对象的函数,例如 :c:func:`PyLong_FromLong` 和 " +":c:func:`Py_BuildValue` ,会传递拥有关系给接收者。即便是对象不是真正新的,你仍然可以获得对象的新引用。一个实例是 " +":c:func:`PyLong_FromLong` 维护了一个流行值的缓存,并可以返回已缓存项目的新引用。" + +#: ../../extending/extending.rst:979 +msgid "" +"Many functions that extract objects from other objects also transfer " +"ownership with the reference, for instance :c:func:`PyObject_GetAttrString`." +" The picture is less clear, here, however, since a few common routines are " +"exceptions: :c:func:`PyTuple_GetItem`, :c:func:`PyList_GetItem`, " +":c:func:`PyDict_GetItem`, and :c:func:`PyDict_GetItemString` all return " +"references that you borrow from the tuple, list or dictionary." +msgstr "" +"很多另一个对象提取对象的函数,也会传递引用关系,例如 :c:func:`PyObject_GetAttrString` " +"。这里的情况不够清晰,一些不太常用的例程是例外的 :c:func:`PyTuple_GetItem` , " +":c:func:`PyList_GetItem` , :c:func:`PyDict_GetItem` , " +":c:func:`PyDict_GetItemString` 都是返回从元组、列表、字典里借用的引用。" + +#: ../../extending/extending.rst:986 +msgid "" +"The function :c:func:`PyImport_AddModule` also returns a borrowed reference," +" even though it may actually create the object it returns: this is possible " +"because an owned reference to the object is stored in ``sys.modules``." +msgstr "" +"函数 :c:func:`PyImport_AddModule` 也会返回借用的引用,哪怕可能会返回创建的对象:这个可能因为一个拥有的引用对象是存储在 " +"``sys.modules`` 里。" + +#: ../../extending/extending.rst:990 +msgid "" +"When you pass an object reference into another function, in general, the " +"function borrows the reference from you --- if it needs to store it, it will" +" use :c:func:`Py_INCREF` to become an independent owner. There are exactly " +"two important exceptions to this rule: :c:func:`PyTuple_SetItem` and " +":c:func:`PyList_SetItem`. These functions take over ownership of the item " +"passed to them --- even if they fail! (Note that :c:func:`PyDict_SetItem` " +"and friends don't take over ownership --- they are \"normal.\")" +msgstr "" +"当你传递一个对象引用到另一个函数时,通常函数是借用出去的。如果需要存储,就使用 :c:func:`Py_INCREF` " +"来变成独立的拥有者。这个规则有两个重要的例外: :c:func:`PyTuple_SetItem` 和 :c:func:`PyList_SetItem`" +" 。这些函数接受传递来的引用关系,哪怕会失败!(注意 :c:func:`PyDict_SetItem` " +"及其同类不会接受引用关系,他们是\"正常的\")。" + +#: ../../extending/extending.rst:998 +msgid "" +"When a C function is called from Python, it borrows references to its " +"arguments from the caller. The caller owns a reference to the object, so " +"the borrowed reference's lifetime is guaranteed until the function returns." +" Only when such a borrowed reference must be stored or passed on, it must " +"be turned into an owned reference by calling :c:func:`Py_INCREF`." +msgstr "" +"当一个C函数被Python调用时,会从调用方传来的参数借用引用。调用者拥有对象的引用,所以借用的引用生命周期可以保证到函数返回。只要当借用的引用需要存储或传递时,就必须转换为拥有的引用,通过调用" +" :c:func:`Py_INCREF` 。" + +#: ../../extending/extending.rst:1004 +msgid "" +"The object reference returned from a C function that is called from Python " +"must be an owned reference --- ownership is transferred from the function to" +" its caller." +msgstr "Python调用从C函数返回的对象引用时必须是拥有的引用---拥有关系被从函数传递给调用者。" + +#: ../../extending/extending.rst:1012 +msgid "Thin Ice" +msgstr "危险的薄冰" + +#: ../../extending/extending.rst:1014 +msgid "" +"There are a few situations where seemingly harmless use of a borrowed " +"reference can lead to problems. These all have to do with implicit " +"invocations of the interpreter, which can cause the owner of a reference to " +"dispose of it." +msgstr "有少数情况下,借用的引用看起来无害,但却可能导致问题。这通常是因为解释器的隐式调用,并可能导致引用拥有者处置这个引用。" + +#: ../../extending/extending.rst:1018 +msgid "" +"The first and most important case to know about is using :c:func:`Py_DECREF`" +" on an unrelated object while borrowing a reference to a list item. For " +"instance::" +msgstr "首先需要特别注意的情况是使用 :c:func:`Py_DECREF` 到一个无关对象,而这个对象的引用是借用自一个列表的元素。举个实例:" + +#: ../../extending/extending.rst:1030 +msgid "" +"This function first borrows a reference to ``list[0]``, then replaces " +"``list[1]`` with the value ``0``, and finally prints the borrowed reference." +" Looks harmless, right? But it's not!" +msgstr "" +"这个函数首先借用一个引用 ``list[0]`` ,然后替换 ``list[1]`` 为值 ``0`` ,最后打印借用的引用。看起来无害是吧,但却不是。" + +#: ../../extending/extending.rst:1034 +msgid "" +"Let's follow the control flow into :c:func:`PyList_SetItem`. The list owns " +"references to all its items, so when item 1 is replaced, it has to dispose " +"of the original item 1. Now let's suppose the original item 1 was an " +"instance of a user-defined class, and let's further suppose that the class " +"defined a :meth:`__del__` method. If this class instance has a reference " +"count of 1, disposing of it will call its :meth:`__del__` method." +msgstr "" +"我们跟着控制流进入 :c:func:`PyList_SetItem` " +"。列表拥有者引用了其所有成员,所以当成员1被替换时,就必须处置原来的成员1。现在假设原来的成员1是用户定义类的实例,且假设这个类定义了 " +":meth:`__del__` 方法。如果这个类实例的引用计数是1,那么处置动作就会调用 :meth:`__del__` 方法。" + +#: ../../extending/extending.rst:1041 +msgid "" +"Since it is written in Python, the :meth:`__del__` method can execute " +"arbitrary Python code. Could it perhaps do something to invalidate the " +"reference to ``item`` in :c:func:`bug`? You bet! Assuming that the list " +"passed into :c:func:`bug` is accessible to the :meth:`__del__` method, it " +"could execute a statement to the effect of ``del list[0]``, and assuming " +"this was the last reference to that object, it would free the memory " +"associated with it, thereby invalidating ``item``." +msgstr "" +"既然是Python写的, :meth:`__del__` 方法可以执行任意Python代码。是否可能在 :c:func:`bug` 的 ``item``" +" 废止引用呢,是的。假设列表传递到 :c:func:`bug` 会被 :meth:`__del__` 方法所访问,就可以执行一个语句来实现 ``del " +"list[0]`` ,然后假设这是最后一个对对象的引用,就需要释放内存,从而使得 ``item`` 无效化。" + +#: ../../extending/extending.rst:1049 +msgid "" +"The solution, once you know the source of the problem, is easy: temporarily " +"increment the reference count. The correct version of the function reads::" +msgstr "解决方法是,当你知道了问题的根源,就容易了:临时增加引用计数。正确版本的函数代码如下:" + +#: ../../extending/extending.rst:1063 +msgid "" +"This is a true story. An older version of Python contained variants of this" +" bug and someone spent a considerable amount of time in a C debugger to " +"figure out why his :meth:`__del__` methods would fail..." +msgstr "" +"这是个真实的故事。一个旧版本的Python包含了这个bug的变种,而一些人花费了大量时间在C调试器上去寻找为什么 :meth:`__del__` " +"方法会失败。" + +#: ../../extending/extending.rst:1067 +msgid "" +"The second case of problems with a borrowed reference is a variant involving" +" threads. Normally, multiple threads in the Python interpreter can't get in" +" each other's way, because there is a global lock protecting Python's entire" +" object space. However, it is possible to temporarily release this lock " +"using the macro :c:macro:`Py_BEGIN_ALLOW_THREADS`, and to re-acquire it " +"using :c:macro:`Py_END_ALLOW_THREADS`. This is common around blocking I/O " +"calls, to let other threads use the processor while waiting for the I/O to " +"complete. Obviously, the following function has the same problem as the " +"previous one::" +msgstr "" +"这个问题的第二种情况是借用的引用涉及线程的变种。通常,Python解释器里多个线程无法进入对方的路径,因为有个全局锁保护着Python整个对象空间。但可以使用宏" +" :c:macro:`Py_BEGIN_ALLOW_THREADS` 来临时释放这个锁,重新获取锁用 " +":c:macro:`Py_END_ALLOW_THREADS` " +"。这通常围绕在阻塞I/O调用外,使得其他线程可以在等待I/O期间使用处理器。显然,如下函数会跟之前那个有一样的问题:" + +#: ../../extending/extending.rst:1090 +msgid "NULL Pointers" +msgstr "NULL指针" + +#: ../../extending/extending.rst:1092 +msgid "" +"In general, functions that take object references as arguments do not expect" +" you to pass them ``NULL`` pointers, and will dump core (or cause later core" +" dumps) if you do so. Functions that return object references generally " +"return ``NULL`` only to indicate that an exception occurred. The reason for" +" not testing for ``NULL`` arguments is that functions often pass the objects" +" they receive on to other function --- if each function were to test for " +"``NULL``, there would be a lot of redundant tests and the code would run " +"more slowly." +msgstr "" +"通常,接受对象引用作为参数的函数不希望你传给它们 ``NULL`` 指针,并且当你这样做时将会转储核心(或在以后导致核心转储)。 " +"返回对象引用的函数通常只在要指明发生了异常时才返回 ``NULL``。 不检测 ``NULL`` " +"参数的原因在于这些函数经常要将它们所接收的对象传给其他函数 --- 如果每个函数都检测 ``NULL``,将会导致大量的冗余检测而使代码运行得更缓慢。" + +#: ../../extending/extending.rst:1100 +msgid "" +"It is better to test for ``NULL`` only at the \"source:\" when a pointer " +"that may be ``NULL`` is received, for example, from :c:func:`malloc` or from" +" a function that may raise an exception." +msgstr "" +"更好的做法是仅在“源头”上检测 ``NULL``,即在接收到一个可能为 ``NULL`` 的指针,例如来自 :c:func:`malloc` " +"或是一个可能引发异常的函数的时候。" + +#: ../../extending/extending.rst:1104 +msgid "" +"The macros :c:func:`Py_INCREF` and :c:func:`Py_DECREF` do not check for " +"``NULL`` pointers --- however, their variants :c:func:`Py_XINCREF` and " +":c:func:`Py_XDECREF` do." +msgstr "" +":c:func:`Py_INCREF` 和 :c:func:`Py_DECREF` 等宏不会检测 ``NULL`` 指针 --- 但是,它们的变种 " +":c:func:`Py_XINCREF` 和 :c:func:`Py_XDECREF` 则会检测。" + +#: ../../extending/extending.rst:1108 +msgid "" +"The macros for checking for a particular object type (``Pytype_Check()``) " +"don't check for ``NULL`` pointers --- again, there is much code that calls " +"several of these in a row to test an object against various different " +"expected types, and this would generate redundant tests. There are no " +"variants with ``NULL`` checking." +msgstr "" +"用于检测特定对象类型的宏 (``Pytype_Check()``) 不会检测 ``NULL`` 指针 --- " +"同样地,有大量代码会连续调用这些宏来测试一个对象是否为几种不同预期类型之一,这将会生成冗余的测试。 不存在带有 ``NULL`` 检测的变体。" + +#: ../../extending/extending.rst:1114 +msgid "" +"The C function calling mechanism guarantees that the argument list passed to" +" C functions (``args`` in the examples) is never ``NULL`` --- in fact it " +"guarantees that it is always a tuple [#]_." +msgstr "" +"C 函数调用机制会保证传给 C 函数的参数列表 (本示例中为 ``args``) 绝不会为 ``NULL`` --- 实际上它会保证其总是为一个元组 " +"[#]_。" + +#: ../../extending/extending.rst:1118 +msgid "" +"It is a severe error to ever let a ``NULL`` pointer \"escape\" to the Python" +" user." +msgstr "任何时候将 ``NULL`` 指针“泄露”给 Python 用户都会是个严重的错误。" + +#: ../../extending/extending.rst:1129 +msgid "Writing Extensions in C++" +msgstr "在C++中编写扩展" + +#: ../../extending/extending.rst:1131 +msgid "" +"It is possible to write extension modules in C++. Some restrictions apply." +" If the main program (the Python interpreter) is compiled and linked by the" +" C compiler, global or static objects with constructors cannot be used. " +"This is not a problem if the main program is linked by the C++ compiler. " +"Functions that will be called by the Python interpreter (in particular, " +"module initialization functions) have to be declared using ``extern \"C\"``." +" It is unnecessary to enclose the Python header files in ``extern \"C\" " +"{...}`` --- they use this form already if the symbol ``__cplusplus`` is " +"defined (all recent C++ compilers define this symbol)." +msgstr "" +"还可以在C++中编写扩展模块,只是有些限制。如果主程序(Python解释器)是使用C编译器来编译和链接的,全局或静态对象的构造器就不能使用。而如果是C++编译器来链接的就没有这个问题。函数会被Python解释器调用(通常就是模块初始化函数)必须声明为" +" ``extern \"C\"`` 。而是否在 ``extern \"C\" {...}`` 里包含Python头文件则不是那么重要,因为如果定义了符号" +" ``__cplusplus`` 则已经是这么声明的了(所有现代C++编译器都会定义这个符号)。" + +#: ../../extending/extending.rst:1145 +msgid "Providing a C API for an Extension Module" +msgstr "给扩展模块提供C API" + +#: ../../extending/extending.rst:1150 +msgid "" +"Many extension modules just provide new functions and types to be used from " +"Python, but sometimes the code in an extension module can be useful for " +"other extension modules. For example, an extension module could implement a " +"type \"collection\" which works like lists without order. Just like the " +"standard Python list type has a C API which permits extension modules to " +"create and manipulate lists, this new collection type should have a set of C" +" functions for direct manipulation from other extension modules." +msgstr "" +"很多扩展模块提供了新的函数和类型供Python使用,但有时扩展模块里的代码也可以被其他扩展模块使用。例如,一个扩展模块可以实现一个类型 " +"\"collection\" 看起来是没有顺序的。就像是Python列表类型,拥有C " +"API允许扩展模块来创建和维护列表,这个新的集合类型可以有一堆C函数用于给其他扩展模块直接使用。" + +#: ../../extending/extending.rst:1158 +msgid "" +"At first sight this seems easy: just write the functions (without declaring " +"them ``static``, of course), provide an appropriate header file, and " +"document the C API. And in fact this would work if all extension modules " +"were always linked statically with the Python interpreter. When modules are " +"used as shared libraries, however, the symbols defined in one module may not" +" be visible to another module. The details of visibility depend on the " +"operating system; some systems use one global namespace for the Python " +"interpreter and all extension modules (Windows, for example), whereas others" +" require an explicit list of imported symbols at module link time (AIX is " +"one example), or offer a choice of different strategies (most Unices). And " +"even if symbols are globally visible, the module whose functions one wishes " +"to call might not have been loaded yet!" +msgstr "" +"开始看起来很简单:只需要编写函数(无需声明为 ``static`` ),提供恰当的头文件,以及C " +"API的文档。实际上在所有扩展模块都是静态链接到Python解释器时也是可以正常工作的。当模块以共享库链接时,一个模块中的符号定义对另一个模块不可见。可见的细节依赖于操作系统,一些系统的Python解释器使用全局命名空间(例如Windows),有些则在链接时需要一个严格的已导入符号列表(一个例子是AIX),或者提供可选的不同策略(如Unix系列)。即便是符号是全局可见的,你要调用的模块也可能尚未加载。" + +#: ../../extending/extending.rst:1170 +msgid "" +"Portability therefore requires not to make any assumptions about symbol " +"visibility. This means that all symbols in extension modules should be " +"declared ``static``, except for the module's initialization function, in " +"order to avoid name clashes with other extension modules (as discussed in " +"section :ref:`methodtable`). And it means that symbols that *should* be " +"accessible from other extension modules must be exported in a different way." +msgstr "" +"可移植性需要不能对符号可见性做任何假设。这意味着扩展模块里的所有符号都应该声明为 ``static`` " +",除了模块的初始化函数,来避免与其他扩展模块的命名冲突(在段落 :ref:`methodtable` 中讨论) 。这意味着符号应该 *必须* " +"通过其他导出方式来供其他扩展模块访问。" + +#: ../../extending/extending.rst:1177 +msgid "" +"Python provides a special mechanism to pass C-level information (pointers) " +"from one extension module to another one: Capsules. A Capsule is a Python " +"data type which stores a pointer (:c:type:`void \\*`). Capsules can only be" +" created and accessed via their C API, but they can be passed around like " +"any other Python object. In particular, they can be assigned to a name in " +"an extension module's namespace. Other extension modules can then import " +"this module, retrieve the value of this name, and then retrieve the pointer " +"from the Capsule." +msgstr "" +"Python提供了一个特别的机制来传递C级别信息(指针),从一个扩展模块到另一个:Capsules。一个Capsule是一个Python数据类型,会保存指针(" +" :c:type:`void \\*` )。Capsule只能通过其C " +"API来创建和访问,但可以像其他Python对象一样的传递。通常,我们可以指定一个扩展模块命名空间的名字。其他扩展模块可以导入这个模块,获取这个名字的值,然后从Capsule获取指针。" + +#: ../../extending/extending.rst:1185 +msgid "" +"There are many ways in which Capsules can be used to export the C API of an " +"extension module. Each function could get its own Capsule, or all C API " +"pointers could be stored in an array whose address is published in a " +"Capsule. And the various tasks of storing and retrieving the pointers can be" +" distributed in different ways between the module providing the code and the" +" client modules." +msgstr "" +"Capsule可以用多种方式导出C API给扩展模块。每个函数可以用自己的Capsule,或者所有C " +"API指针可以存储在一个数组里,数组地址再发布给Capsule。存储和获取指针也可以用多种方式,供客户端模块使用。" + +#: ../../extending/extending.rst:1191 +msgid "" +"Whichever method you choose, it's important to name your Capsules properly. " +"The function :c:func:`PyCapsule_New` takes a name parameter (:c:type:`const " +"char \\*`); you're permitted to pass in a ``NULL`` name, but we strongly " +"encourage you to specify a name. Properly named Capsules provide a degree " +"of runtime type-safety; there is no feasible way to tell one unnamed Capsule" +" from another." +msgstr "" +"无论你选择哪个方法,正确地为你的 Capsule 命名都很重要。 函数 :c:func:`PyCapsule_New` 接受一个名称形参 " +"(:c:type:`const char \\*`);允许你传入一个 ``NULL`` 作为名称,但我们强烈建议你指定一个名称。 正确地命名的 " +"Capsule 提供了一定程序的运行时类型安全;没有可行的方式能区分两个未命名的 Capsule。" + +#: ../../extending/extending.rst:1198 +msgid "" +"In particular, Capsules used to expose C APIs should be given a name " +"following this convention::" +msgstr "通常来说,Capsule用于暴露C API,其名字应该遵循如下规范:" + +#: ../../extending/extending.rst:1203 +msgid "" +"The convenience function :c:func:`PyCapsule_Import` makes it easy to load a " +"C API provided via a Capsule, but only if the Capsule's name matches this " +"convention. This behavior gives C API users a high degree of certainty that" +" the Capsule they load contains the correct C API." +msgstr "" +"便利函数 :c:func:`PyCapsule_Import` 可以方便的载入通过Capsule提供的C " +"API,仅在Capsule的名字匹配时。这个行为为C API用户提供了高度的确定性来载入正确的C API。" + +#: ../../extending/extending.rst:1208 +msgid "" +"The following example demonstrates an approach that puts most of the burden " +"on the writer of the exporting module, which is appropriate for commonly " +"used library modules. It stores all C API pointers (just one in the " +"example!) in an array of :c:type:`void` pointers which becomes the value of " +"a Capsule. The header file corresponding to the module provides a macro that" +" takes care of importing the module and retrieving its C API pointers; " +"client modules only have to call this macro before accessing the C API." +msgstr "" +"如下例子展示了将大部分负担交由导出模块作者的方法,适用于常用的库模块。其会存储所有C API指针(例子里只有一个)在 :c:type:`void` " +"指针的数组里,并使其值变为Capsule。对应的模块头文件提供了宏来管理导入模块和获取C API指针;客户端模块只需要在访问C API前调用这个宏即可。" + +#: ../../extending/extending.rst:1216 +msgid "" +"The exporting module is a modification of the :mod:`spam` module from " +"section :ref:`extending-simpleexample`. The function :func:`spam.system` " +"does not call the C library function :c:func:`system` directly, but a " +"function :c:func:`PySpam_System`, which would of course do something more " +"complicated in reality (such as adding \"spam\" to every command). This " +"function :c:func:`PySpam_System` is also exported to other extension " +"modules." +msgstr "" +"导出的模块修改自 :mod:`spam` 模块,来自 :ref:`extending-simpleexample` 段落。函数 " +":func:`spam.system` 不会直接调用C库函数 :c:func:`system` ,但一个函数 " +":c:func:`PySpam_System` 会负责调用,当然现实中会更复杂些(例如添加 \"spam\" 到每个命令)。函数 " +":c:func:`PySpam_System` 也会导出给其他扩展模块。" + +#: ../../extending/extending.rst:1223 +msgid "" +"The function :c:func:`PySpam_System` is a plain C function, declared " +"``static`` like everything else::" +msgstr "函数 :c:func:`PySpam_System` 是个纯C函数,声明 ``static`` 就像其他地方那样::" + +#: ../../extending/extending.rst:1232 +msgid "The function :c:func:`spam_system` is modified in a trivial way::" +msgstr "函数 :c:func:`spam_system` 按照如下方式修改::" + +#: ../../extending/extending.rst:1246 +msgid "In the beginning of the module, right after the line ::" +msgstr "在模块开头,在此行后::" + +#: ../../extending/extending.rst:1250 +msgid "two more lines must be added::" +msgstr "添加另外两行::" + +#: ../../extending/extending.rst:1255 +msgid "" +"The ``#define`` is used to tell the header file that it is being included in" +" the exporting module, not a client module. Finally, the module's " +"initialization function must take care of initializing the C API pointer " +"array::" +msgstr "``#define`` 用于告知头文件需要包含给导出的模块,而不是客户端模块。最终,模块的初始化函数必须负责初始化C API指针数组::" + +#: ../../extending/extending.rst:1285 +msgid "" +"Note that ``PySpam_API`` is declared ``static``; otherwise the pointer array" +" would disappear when :func:`PyInit_spam` terminates!" +msgstr "注意 ``PySpam_API`` 声明为 ``static`` ;此外指针数组会在 :func:`PyInit_spam` 结束后消失!" + +#: ../../extending/extending.rst:1288 +msgid "" +"The bulk of the work is in the header file :file:`spammodule.h`, which looks" +" like this::" +msgstr "头文件 :file:`spammodule.h` 里的一堆工作,看起来如下所示::" + +#: ../../extending/extending.rst:1339 +msgid "" +"All that a client module must do in order to have access to the function " +":c:func:`PySpam_System` is to call the function (or rather macro) " +":c:func:`import_spam` in its initialization function::" +msgstr "" +"客户端模块必须在其初始化函数里按顺序调用函数 :c:func:`import_spam` (或其他宏)才能访问函数 " +":c:func:`PySpam_System` 。" + +#: ../../extending/extending.rst:1357 +msgid "" +"The main disadvantage of this approach is that the file :file:`spammodule.h`" +" is rather complicated. However, the basic structure is the same for each " +"function that is exported, so it has to be learned only once." +msgstr "" +"这种方法的主要缺点是,文件 :file:`spammodule.h` 过于复杂。当然,对每个要导出的函数,基本结构是相似的,所以只需要学习一次。" + +#: ../../extending/extending.rst:1361 +msgid "" +"Finally it should be mentioned that Capsules offer additional functionality," +" which is especially useful for memory allocation and deallocation of the " +"pointer stored in a Capsule. The details are described in the Python/C API " +"Reference Manual in the section :ref:`capsules` and in the implementation of" +" Capsules (files :file:`Include/pycapsule.h` and :file:`Objects/pycapsule.c`" +" in the Python source code distribution)." +msgstr "" +"最后需要提醒的是Capsule提供了额外的功能,用于存储在Capsule里的指针的内存分配和释放。细节参考 Python/C API参考手册的章节 " +":ref:`capsules` 和Capsule的实现(在Python源码发行包的 :file:`Include/pycapsule.h` 和 " +":file:`Objects/pycapsule.c` )。" + +#: ../../extending/extending.rst:1369 +msgid "Footnotes" +msgstr "备注" + +#: ../../extending/extending.rst:1370 +msgid "" +"An interface for this function already exists in the standard module " +":mod:`os` --- it was chosen as a simple and straightforward example." +msgstr "这个函数的接口已经在标准模块 :mod:`os` 里了,这里作为一个简单而直接的例子。" + +#: ../../extending/extending.rst:1373 +msgid "" +"The metaphor of \"borrowing\" a reference is not completely correct: the " +"owner still has a copy of the reference." +msgstr "术语\"借用\"一个引用是不完全正确的:拥有者仍然有引用的拷贝。" + +#: ../../extending/extending.rst:1376 +msgid "" +"Checking that the reference count is at least 1 **does not work** --- the " +"reference count itself could be in freed memory and may thus be reused for " +"another object!" +msgstr "检查引用计数至少为1 **没有用** ,引用计数本身可以在已经释放的内存里,并有可能被其他对象所用。" + +#: ../../extending/extending.rst:1380 +msgid "" +"These guarantees don't hold when you use the \"old\" style calling " +"convention --- this is still found in much existing code." +msgstr "当你使用 \"旧式\" 风格调用约定时,这些保证不成立,尽管这依旧存在于很多旧代码中。" diff --git a/extending/index.po b/extending/index.po new file mode 100644 index 000000000..78f4a13d2 --- /dev/null +++ b/extending/index.po @@ -0,0 +1,121 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) 2001-2022, Python Software Foundation +# This file is distributed under the same license as the Python package. +# FIRST AUTHOR , YEAR. +# +# Translators: +# Freesand Leo , 2019 +# Alpha Du , 2019 +# +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: Python 3.9\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2022-11-04 14:34+0000\n" +"PO-Revision-Date: 2017-02-16 17:42+0000\n" +"Last-Translator: Alpha Du , 2019\n" +"Language-Team: Chinese (China) (https://www.transifex.com/python-doc/teams/5390/zh_CN/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: zh_CN\n" +"Plural-Forms: nplurals=1; plural=0;\n" + +#: ../../extending/index.rst:5 +msgid "Extending and Embedding the Python Interpreter" +msgstr "扩展和嵌入 Python 解释器" + +#: ../../extending/index.rst:7 +msgid "" +"This document describes how to write modules in C or C++ to extend the " +"Python interpreter with new modules. Those modules can not only define new " +"functions but also new object types and their methods. The document also " +"describes how to embed the Python interpreter in another application, for " +"use as an extension language. Finally, it shows how to compile and link " +"extension modules so that they can be loaded dynamically (at run time) into " +"the interpreter, if the underlying operating system supports this feature." +msgstr "" +"本文档描述了如何使用 C 或 C++ 编写模块以使用新模块来扩展 Python 解释器的功能。 " +"这些模块不仅可以定义新的函数,还可以定义新的对象类型及其方法。 该文档还描述了如何将 Python 解释器嵌入到另一个应用程序中,以用作扩展语言。 " +"最后,它展示了如何编译和链接扩展模块,以便它们可以动态地(在运行时)加载到解释器中,如果底层操作系统支持此特性的话。" + +#: ../../extending/index.rst:15 +msgid "" +"This document assumes basic knowledge about Python. For an informal " +"introduction to the language, see :ref:`tutorial-index`. :ref:`reference-" +"index` gives a more formal definition of the language. :ref:`library-index`" +" documents the existing object types, functions and modules (both built-in " +"and written in Python) that give the language its wide application range." +msgstr "" +"本文档假设你具备有关 Python 的基本知识。有关该语言的非正式介绍,请参阅 :ref:`tutorial-index` 。 " +":ref:`reference-index` 给出了更正式的语言定义。 :ref:`library-index` " +"包含现有的对象类型、函数和模块(内置和用 Python 编写)的文档,使语言具有广泛的应用范围。" + +#: ../../extending/index.rst:21 +msgid "" +"For a detailed description of the whole Python/C API, see the separate " +":ref:`c-api-index`." +msgstr "关于整个 Python/C API 的详细介绍,请参阅独立的 :ref:`c-api-index` 。" + +#: ../../extending/index.rst:26 +msgid "Recommended third party tools" +msgstr "推荐的第三方工具" + +#: ../../extending/index.rst:28 +msgid "" +"This guide only covers the basic tools for creating extensions provided as " +"part of this version of CPython. Third party tools like `Cython " +"`_, `cffi `_, `SWIG " +"`_ and `Numba `_ offer both " +"simpler and more sophisticated approaches to creating C and C++ extensions " +"for Python." +msgstr "" +"本指南仅介绍了作为此 CPython 版本的一部分提供的创建扩展的基本工具。 第三方工具,如 `Cython " +"`_ 、 `cffi `_ 、 `SWIG " +"`_ 和 `Numba `_ " +"提供了更简单和更复杂的方法来为 Python 创建 C 和 C ++ 扩展。" + +#: ../../extending/index.rst:40 +msgid "" +"`Python Packaging User Guide: Binary Extensions " +"`_" +msgstr "" +"`Python Packaging User Guide: Binary Extensions " +"`_" + +#: ../../extending/index.rst:38 +msgid "" +"The Python Packaging User Guide not only covers several available tools that" +" simplify the creation of binary extensions, but also discusses the various " +"reasons why creating an extension module may be desirable in the first " +"place." +msgstr "" +"“ Python Packaging User Guide ”不仅涵盖了几个简化二进制扩展创建的可用工具,还讨论了为什么首先创建扩展模块的各种原因。" + +#: ../../extending/index.rst:45 +msgid "Creating extensions without third party tools" +msgstr "不使用第三方工具创建扩展" + +#: ../../extending/index.rst:47 +msgid "" +"This section of the guide covers creating C and C++ extensions without " +"assistance from third party tools. It is intended primarily for creators of " +"those tools, rather than being a recommended way to create your own C " +"extensions." +msgstr "" +"本指南的这一部分包括在没有第三方工具帮助的情况下创建 C 和 C ++ 扩展。它主要用于这些工具的创建者,而不是建议你创建自己的 C 扩展的方法。" + +#: ../../extending/index.rst:63 +msgid "Embedding the CPython runtime in a larger application" +msgstr "在更大的应用程序中嵌入 CPython 运行时" + +#: ../../extending/index.rst:65 +msgid "" +"Sometimes, rather than creating an extension that runs inside the Python " +"interpreter as the main application, it is desirable to instead embed the " +"CPython runtime inside a larger application. This section covers some of the" +" details involved in doing that successfully." +msgstr "" +"有时,不是要创建在 Python 解释器中作为主应用程序运行的扩展,而是希望将 CPython 运行时嵌入到更大的应用程序中。 " +"本节介绍了成功完成此操作所涉及的一些细节。" diff --git a/extending/newtypes.po b/extending/newtypes.po new file mode 100644 index 000000000..5b34350a6 --- /dev/null +++ b/extending/newtypes.po @@ -0,0 +1,771 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) 2001-2025, Python Software Foundation +# This file is distributed under the same license as the Python package. +# FIRST AUTHOR , YEAR. +# +# Translators: +# 叶浚安 , 2019 +# Jiu Hong Jiang , 2019 +# Kevin Deng , 2020 +# Harry Liu. , 2020 +# Jiuh.star , 2021 +# Jing Li , 2022 +# Freesand Leo , 2024 +# Rafael Fontenelle , 2025 +# +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: Python 3.9\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2025-02-07 16:40+0000\n" +"PO-Revision-Date: 2017-02-16 17:42+0000\n" +"Last-Translator: Rafael Fontenelle , 2025\n" +"Language-Team: Chinese (China) (https://app.transifex.com/python-doc/teams/5390/zh_CN/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: zh_CN\n" +"Plural-Forms: nplurals=1; plural=0;\n" + +#: ../../extending/newtypes.rst:7 +msgid "Defining Extension Types: Assorted Topics" +msgstr "定义扩展类型:已分类主题" + +#: ../../extending/newtypes.rst:11 +msgid "" +"This section aims to give a quick fly-by on the various type methods you can" +" implement and what they do." +msgstr "本章节目标是提供一个各种你可以实现的类型方法及其功能的简短介绍。" + +#: ../../extending/newtypes.rst:14 +msgid "" +"Here is the definition of :c:type:`PyTypeObject`, with some fields only used" +" in debug builds omitted:" +msgstr "这是C类型 :c:type:`PyTypeObject` 的定义,省略了只用于调试构建的字段:" + +#: ../../extending/newtypes.rst:20 +msgid "" +"Now that's a *lot* of methods. Don't worry too much though -- if you have a" +" type you want to define, the chances are very good that you will only " +"implement a handful of these." +msgstr "这里有 *很多* 方法。但是不要太担心,如果你要定义一个类型,通常只需要实现少量的方法。" + +#: ../../extending/newtypes.rst:24 +msgid "" +"As you probably expect by now, we're going to go over this and give more " +"information about the various handlers. We won't go in the order they are " +"defined in the structure, because there is a lot of historical baggage that " +"impacts the ordering of the fields. It's often easiest to find an example " +"that includes the fields you need and then change the values to suit your " +"new type. ::" +msgstr "" +"正如你猜到的一样,我们正要一步一步详细介绍各种处理程序。因为有大量的历史包袱影响字段的排序,所以我们不会根据它们在结构体里定义的顺序讲解。通常非常容易找到一个包含你需要的字段的例子,然后改变值去适应你新的类型。" + +#: ../../extending/newtypes.rst:33 +msgid "" +"The name of the type -- as mentioned in the previous chapter, this will " +"appear in various places, almost entirely for diagnostic purposes. Try to " +"choose something that will be helpful in such a situation! ::" +msgstr "类型的名字 - 上一章提到过的,会出现在很多地方,几乎全部都是为了诊断目的。尝试选择一个好名字,对于诊断很有帮助。" + +#: ../../extending/newtypes.rst:39 +msgid "" +"These fields tell the runtime how much memory to allocate when new objects " +"of this type are created. Python has some built-in support for variable " +"length structures (think: strings, tuples) which is where the " +":c:member:`~PyTypeObject.tp_itemsize` field comes in. This will be dealt " +"with later. ::" +msgstr "" +"这些字段告诉运行时在创造这个类型的新对象时需要分配多少内存。Python为了可变长度的结构(想下:字符串,元组)有些内置支持,这是 " +":c:member:`~PyTypeObject.tp_itemsize` 字段存在的原由。这部分稍后解释。" + +#: ../../extending/newtypes.rst:46 +msgid "" +"Here you can put a string (or its address) that you want returned when the " +"Python script references ``obj.__doc__`` to retrieve the doc string." +msgstr "这里你可以放置一段字符串(或者它的地址),当你想在Python脚本引用 ``obj.__doc__`` 时返回这段文档字符串。" + +#: ../../extending/newtypes.rst:49 +msgid "" +"Now we come to the basic type methods -- the ones most extension types will " +"implement." +msgstr "现在我们来看一下基本类型方法 - 大多数扩展类型将实现的方法。" + +#: ../../extending/newtypes.rst:54 +msgid "Finalization and De-allocation" +msgstr "终结和内存释放" + +#: ../../extending/newtypes.rst:66 +msgid "" +"This function is called when the reference count of the instance of your " +"type is reduced to zero and the Python interpreter wants to reclaim it. If " +"your type has memory to free or other clean-up to perform, you can put it " +"here. The object itself needs to be freed here as well. Here is an example" +" of this function::" +msgstr "" +"当您的类型实例的引用计数减少为零并且Python解释器想要回收它时,将调用此函数。如果你的类型有内存可供释放或执行其他清理,你可以把它放在这里。 " +"对象本身也需要在这里释放。 以下是此函数的示例:" + +#: ../../extending/newtypes.rst:79 +msgid "" +"If your type supports garbage collection, the destructor should call " +":c:func:`PyObject_GC_UnTrack` before clearing any member fields::" +msgstr "如果你的类型支持垃圾回收,则析构器应当在清理任何成员字段之前调用 :c:func:`PyObject_GC_UnTrack`::" + +#: ../../extending/newtypes.rst:95 +msgid "" +"One important requirement of the deallocator function is that it leaves any " +"pending exceptions alone. This is important since deallocators are " +"frequently called as the interpreter unwinds the Python stack; when the " +"stack is unwound due to an exception (rather than normal returns), nothing " +"is done to protect the deallocators from seeing that an exception has " +"already been set. Any actions which a deallocator performs which may cause " +"additional Python code to be executed may detect that an exception has been " +"set. This can lead to misleading errors from the interpreter. The proper " +"way to protect against this is to save a pending exception before performing" +" the unsafe action, and restoring it when done. This can be done using the " +":c:func:`PyErr_Fetch` and :c:func:`PyErr_Restore` functions::" +msgstr "" +"一个重要的释放器函数实现要求是把所有未决异常放着不动。这很重要是因为释放器会被解释器频繁的调用,当栈异常退出时(而非正常返回),不会有任何办法保护释放器看到一个异常尚未被设置。此事释放器的任何行为都会导致额外增加的Python代码来检查异常是否被设置。这可能导致解释器的误导性错误。正确的保护方法是,在任何不安全的操作前,保存未决异常,然后在其完成后恢复。者可以通过" +" :c:func:`PyErr_Fetch` 和 :c:func:`PyErr_Restore` 函数来实现::" + +#: ../../extending/newtypes.rst:134 +msgid "" +"There are limitations to what you can safely do in a deallocator function. " +"First, if your type supports garbage collection (using " +":c:member:`~PyTypeObject.tp_traverse` and/or " +":c:member:`~PyTypeObject.tp_clear`), some of the object's members can have " +"been cleared or finalized by the time :c:member:`~PyTypeObject.tp_dealloc` " +"is called. Second, in :c:member:`~PyTypeObject.tp_dealloc`, your object is " +"in an unstable state: its reference count is equal to zero. Any call to a " +"non-trivial object or API (as in the example above) might end up calling " +":c:member:`~PyTypeObject.tp_dealloc` again, causing a double free and a " +"crash." +msgstr "" +"你能在释放器函数中安全执行的操作是有限的。 首先,如果你的类型支持垃圾回收 (使用 " +":c:member:`~PyTypeObject.tp_traverse` 和/或 " +":c:member:`~PyTypeObject.tp_clear`),对象的部分成员可以在调用 " +":c:member:`~PyTypeObject.tp_dealloc` 时被清空或终结。 其次,在 " +":c:member:`~PyTypeObject.tp_dealloc` 中,你的对象将处于不稳定状态:它的引用计数等于零。 任何对非琐碎对象或 API" +" 的调用 (如上面的示例所做的) 最终都可能会再次调用 " +":c:member:`~PyTypeObject.tp_dealloc`,导致双重释放并发生崩溃。" + +#: ../../extending/newtypes.rst:143 +msgid "" +"Starting with Python 3.4, it is recommended not to put any complex " +"finalization code in :c:member:`~PyTypeObject.tp_dealloc`, and instead use " +"the new :c:member:`~PyTypeObject.tp_finalize` type method." +msgstr "" +"从 Python 3.4 开始,推荐不要在 :c:member:`~PyTypeObject.tp_dealloc` 放复杂的终结代码,而是使用新的 " +":c:member:`~PyTypeObject.tp_finalize` 类型方法。" + +#: ../../extending/newtypes.rst:148 +msgid ":pep:`442` explains the new finalization scheme." +msgstr ":pep:`442` 解释了新的终结方案。" + +#: ../../extending/newtypes.rst:155 +msgid "Object Presentation" +msgstr "对象展示" + +#: ../../extending/newtypes.rst:157 +msgid "" +"In Python, there are two ways to generate a textual representation of an " +"object: the :func:`repr` function, and the :func:`str` function. (The " +":func:`print` function just calls :func:`str`.) These handlers are both " +"optional." +msgstr "" +"在 Python 中,有两种方式可以生成对象的文本表示: :func:`repr` 函数和 :func:`str` 函数。 (:func:`print`" +" 函数会直接调用 :func:`str`。) 这些处理程序都是可选的。" + +#: ../../extending/newtypes.rst:166 +msgid "" +"The :c:member:`~PyTypeObject.tp_repr` handler should return a string object " +"containing a representation of the instance for which it is called. Here is" +" a simple example::" +msgstr "" +":c:member:`~PyTypeObject.tp_repr` 处理程序应该返回一个字符串对象,其中包含调用它的实例的表示形式。 " +"下面是一个简单的例子::" + +#: ../../extending/newtypes.rst:177 +msgid "" +"If no :c:member:`~PyTypeObject.tp_repr` handler is specified, the " +"interpreter will supply a representation that uses the type's " +":c:member:`~PyTypeObject.tp_name` and a uniquely-identifying value for the " +"object." +msgstr "" +"如果没有指定 :c:member:`~PyTypeObject.tp_repr` 处理程序,解释器将提供一个使用 " +":c:member:`~PyTypeObject.tp_name` 的表示形式以及对象的惟一标识值。" + +#: ../../extending/newtypes.rst:181 +msgid "" +"The :c:member:`~PyTypeObject.tp_str` handler is to :func:`str` what the " +":c:member:`~PyTypeObject.tp_repr` handler described above is to " +":func:`repr`; that is, it is called when Python code calls :func:`str` on an" +" instance of your object. Its implementation is very similar to the " +":c:member:`~PyTypeObject.tp_repr` function, but the resulting string is " +"intended for human consumption. If :c:member:`~PyTypeObject.tp_str` is not " +"specified, the :c:member:`~PyTypeObject.tp_repr` handler is used instead." +msgstr "" +":c:member:`~PyTypeObject.tp_str` 处理器对于 :func:`str` 就如上述的 " +":c:member:`~PyTypeObject.tp_repr` 处理器对于 :func:`repr` 一样;也就是说,它会在当 Python " +"代码在你的对象的某个实例上调用 :func:`str` 时被调用。 它的实现与 :c:member:`~PyTypeObject.tp_repr` " +"函数非常相似,但其结果字符串是供人类查看的。 如果未指定 :c:member:`~PyTypeObject.tp_str`,则会使用 " +":c:member:`~PyTypeObject.tp_repr` 处理器来代替。" + +#: ../../extending/newtypes.rst:188 +msgid "Here is a simple example::" +msgstr "下面是一个简单的例子::" + +#: ../../extending/newtypes.rst:200 +msgid "Attribute Management" +msgstr "属性管理" + +#: ../../extending/newtypes.rst:202 +msgid "" +"For every object which can support attributes, the corresponding type must " +"provide the functions that control how the attributes are resolved. There " +"needs to be a function which can retrieve attributes (if any are defined), " +"and another to set attributes (if setting attributes is allowed). Removing " +"an attribute is a special case, for which the new value passed to the " +"handler is ``NULL``." +msgstr "" +"对于每个可支持属性操作的对象,相应的类型必须提供用于控制属性获取方式的函数。 " +"需要有一个能够检索属性的函数(如果定义了任何属性)还要有另一个函数负责设置属性(如果允许设置属性)。 " +"移除属性是一种特殊情况,在此情况下要传给处理器的新值为 ``NULL``。" + +#: ../../extending/newtypes.rst:208 +msgid "" +"Python supports two pairs of attribute handlers; a type that supports " +"attributes only needs to implement the functions for one pair. The " +"difference is that one pair takes the name of the attribute as a " +":c:type:`char\\*`, while the other accepts a :c:type:`PyObject\\*`. Each " +"type can use whichever pair makes more sense for the implementation's " +"convenience. ::" +msgstr "" +"Python 支持两对属性处理器;一个支持属性操作的类型只需要实现其中一对的函数。 两者的差别在于一对接受 :c:type:`char\\*` " +"作为属性名称,而另一对则接受 :c:type:`PyObject\\*`。 每种类型都可以选择使用对于实现的便利性来说更有意义的那一对。 ::" + +#: ../../extending/newtypes.rst:220 +msgid "" +"If accessing attributes of an object is always a simple operation (this will" +" be explained shortly), there are generic implementations which can be used " +"to provide the :c:type:`PyObject\\*` version of the attribute management " +"functions. The actual need for type-specific attribute handlers almost " +"completely disappeared starting with Python 2.2, though there are many " +"examples which have not been updated to use some of the new generic " +"mechanism that is available." +msgstr "" +"如果访问一个对象的属性总是属于简单操作(这将在下文进行解释),则有一些泛用实现可被用来提供 :c:type:`PyObject\\*` " +"版本的属性管理函数。 从 Python 2.2 " +"开始对于类型专属的属性处理器的实际需要几乎已完全消失,尽管还存在着许多尚未更新为使用某种新的可选泛用机制的例子。" + +#: ../../extending/newtypes.rst:231 +msgid "Generic Attribute Management" +msgstr "泛型属性管理" + +#: ../../extending/newtypes.rst:233 +msgid "" +"Most extension types only use *simple* attributes. So, what makes the " +"attributes simple? There are only a couple of conditions that must be met:" +msgstr "大多数扩展类型只使用 **简单** 属性,那么,是什么让属性变得“简单”呢?只需要满足下面几个条件:" + +#: ../../extending/newtypes.rst:236 +msgid "" +"The name of the attributes must be known when :c:func:`PyType_Ready` is " +"called." +msgstr "当调用 :c:func:`PyType_Ready` 时,必须知道属性的名称。" + +#: ../../extending/newtypes.rst:239 +msgid "" +"No special processing is needed to record that an attribute was looked up or" +" set, nor do actions need to be taken based on the value." +msgstr "不需要特殊的处理来记录属性是否被查找或设置,也不需要根据值采取操作。" + +#: ../../extending/newtypes.rst:242 +msgid "" +"Note that this list does not place any restrictions on the values of the " +"attributes, when the values are computed, or how relevant data is stored." +msgstr "请注意,此列表不对属性的值、值的计算时间或相关数据的存储方式施加任何限制。" + +#: ../../extending/newtypes.rst:245 +msgid "" +"When :c:func:`PyType_Ready` is called, it uses three tables referenced by " +"the type object to create :term:`descriptor`\\s which are placed in the " +"dictionary of the type object. Each descriptor controls access to one " +"attribute of the instance object. Each of the tables is optional; if all " +"three are ``NULL``, instances of the type will only have attributes that are" +" inherited from their base type, and should leave the " +":c:member:`~PyTypeObject.tp_getattro` and " +":c:member:`~PyTypeObject.tp_setattro` fields ``NULL`` as well, allowing the " +"base type to handle attributes." +msgstr "" +"当 :c:func:`PyType_Ready` 被调用时,它会使用由类型对象所引用的三个表来创建要放置到类型对象的字典中的 " +":term:`descriptor`。 每个描述器控制对实例对象的一个属性的访问。 每个表都是可选的;如果三个表全都为 " +"``NULL``,则该类型的实例将只有从它们的基础类型继承来的属性,并且还应当让 " +":c:member:`~PyTypeObject.tp_getattro` 和 " +":c:member:`~PyTypeObject.tp_setattro` 字段保持为 ``NULL``,以允许由基础类型处理这些属性。" + +#: ../../extending/newtypes.rst:253 +msgid "The tables are declared as three fields of the type object::" +msgstr "表被声明为object::类型的三个字段::" + +#: ../../extending/newtypes.rst:259 +msgid "" +"If :c:member:`~PyTypeObject.tp_methods` is not ``NULL``, it must refer to an" +" array of :c:type:`PyMethodDef` structures. Each entry in the table is an " +"instance of this structure::" +msgstr "" +"如果 :c:member:`~PyTypeObject.tp_methods` 不为 ``NULL``,则它必须指向一个由 " +":c:type:`PyMethodDef` 结构体组成的数组。 表中的每个条目都是该结构体的一个实例::" + +#: ../../extending/newtypes.rst:270 +msgid "" +"One entry should be defined for each method provided by the type; no entries" +" are needed for methods inherited from a base type. One additional entry is" +" needed at the end; it is a sentinel that marks the end of the array. The " +":attr:`ml_name` field of the sentinel must be ``NULL``." +msgstr "" +"应当为该类型所提供的每个方法都定义一个条目;从基础类型继承来的方法不需要条目。 还需要在末尾加一个额外的条目;它是一个标记数组结束的哨兵条目。 " +"该哨兵条目的 :attr:`ml_name` 字段必须为 ``NULL``。" + +#: ../../extending/newtypes.rst:275 +msgid "" +"The second table is used to define attributes which map directly to data " +"stored in the instance. A variety of primitive C types are supported, and " +"access may be read-only or read-write. The structures in the table are " +"defined as::" +msgstr "第二个表被用来定义要直接映射到实例中的数据的属性。 各种原始 C 类型均受到支持,并且访问方式可以为只读或读写。 表中的结构体被定义为::" + +#: ../../extending/newtypes.rst:287 +msgid "" +"For each entry in the table, a :term:`descriptor` will be constructed and " +"added to the type which will be able to extract a value from the instance " +"structure. The :attr:`type` field should contain one of the type codes " +"defined in the :file:`structmember.h` header; the value will be used to " +"determine how to convert Python values to and from C values. The " +":attr:`flags` field is used to store flags which control how the attribute " +"can be accessed." +msgstr "" +"对于表中的每个条目,将构建一个 :term:`descriptor` 并添加到类型中使其能够从实例结构体中提取值。 :attr:`type` " +"字段应当包含在 :file:`structmember.h` 头文件中定义的某个类型的代码;该值将被用来确定如何将 Python 值转换为 C " +"值或者反之。 :attr:`flags` 字段将被用来储存控制属性可以如何被访问的旗标。" + +#: ../../extending/newtypes.rst:294 +msgid "" +"The following flag constants are defined in :file:`structmember.h`; they may" +" be combined using bitwise-OR." +msgstr "以下标志常量定义在:file: ' structmember.h ';它们可以使用bitwise-OR组合。" + +#: ../../extending/newtypes.rst:298 +msgid "Constant" +msgstr "常量" + +#: ../../extending/newtypes.rst:298 +msgid "Meaning" +msgstr "含意" + +#: ../../extending/newtypes.rst:300 +msgid ":const:`READONLY`" +msgstr ":const:`READONLY`" + +#: ../../extending/newtypes.rst:300 +msgid "Never writable." +msgstr "没有可写的" + +#: ../../extending/newtypes.rst:302 +msgid ":const:`READ_RESTRICTED`" +msgstr ":const:`READ_RESTRICTED`" + +#: ../../extending/newtypes.rst:302 +msgid "Not readable in restricted mode." +msgstr "限制模式下不可写" + +#: ../../extending/newtypes.rst:304 +msgid ":const:`WRITE_RESTRICTED`" +msgstr ":const:`WRITE_RESTRICTED`" + +#: ../../extending/newtypes.rst:304 +msgid "Not writable in restricted mode." +msgstr "限制模式不可写" + +#: ../../extending/newtypes.rst:306 +msgid ":const:`RESTRICTED`" +msgstr ":const:`RESTRICTED`" + +#: ../../extending/newtypes.rst:306 +msgid "Not readable or writable in restricted mode." +msgstr "在受限模式下不可读,也不可写。" + +#: ../../extending/newtypes.rst:315 +msgid "" +"An interesting advantage of using the :c:member:`~PyTypeObject.tp_members` " +"table to build descriptors that are used at runtime is that any attribute " +"defined this way can have an associated doc string simply by providing the " +"text in the table. An application can use the introspection API to retrieve" +" the descriptor from the class object, and get the doc string using its " +":attr:`__doc__` attribute." +msgstr "" +"使用 :c:member:`~PyTypeObject.tp_members` " +"表来构建用于运行时的描述器还有一个有趣的优点是任何以这种方式定义的属性都可以简单地通过在表中提供文本来设置一个相关联的文档字符串。 " +"一个应用程序可以使用自省 API 从类对象获取描述器,并使用其 :attr:`__doc__` 属性来获取文档字符串。" + +#: ../../extending/newtypes.rst:321 +msgid "" +"As with the :c:member:`~PyTypeObject.tp_methods` table, a sentinel entry " +"with a :attr:`name` value of ``NULL`` is required." +msgstr "" +"与 :c:member:`~PyTypeObject.tp_methods` 表一样,需要有一个值为 ``NULL`` 的哨兵条目 " +":attr:`name`。" + +#: ../../extending/newtypes.rst:335 +msgid "Type-specific Attribute Management" +msgstr "类型专属的属性管理" + +#: ../../extending/newtypes.rst:337 +msgid "" +"For simplicity, only the :c:type:`char\\*` version will be demonstrated " +"here; the type of the name parameter is the only difference between the " +":c:type:`char\\*` and :c:type:`PyObject\\*` flavors of the interface. This " +"example effectively does the same thing as the generic example above, but " +"does not use the generic support added in Python 2.2. It explains how the " +"handler functions are called, so that if you do need to extend their " +"functionality, you'll understand what needs to be done." +msgstr "" +"为了简单起见,这里只演示 :c:type:`char\\*` 版本;name 形参的类型是 :c:type:`char\\*` 和 " +":c:type:`PyObject\\*` 风格接口之间的唯一区别。 这个示例实际上做了与上面的泛用示例相同的事情,但没有使用在 Python 2.2 " +"中增加的泛用支持。 它解释了处理器函数是如何被调用的,因此如果你确实需要扩展它们的功能,你就会明白有什么是需要做的。" + +#: ../../extending/newtypes.rst:345 +msgid "" +"The :c:member:`~PyTypeObject.tp_getattr` handler is called when the object " +"requires an attribute look-up. It is called in the same situations where " +"the :meth:`__getattr__` method of a class would be called." +msgstr "" +":c:member:`~PyTypeObject.tp_getattr` 处理器会在对象需要查找属性时被调用。 它被调用的情况与一个类的 " +":meth:`__getattr__` 方法要被调用的情况相同。" + +#: ../../extending/newtypes.rst:349 +msgid "Here is an example::" +msgstr "例如:" + +#: ../../extending/newtypes.rst:365 +msgid "" +"The :c:member:`~PyTypeObject.tp_setattr` handler is called when the " +":meth:`__setattr__` or :meth:`__delattr__` method of a class instance would " +"be called. When an attribute should be deleted, the third parameter will be" +" ``NULL``. Here is an example that simply raises an exception; if this were" +" really all you wanted, the :c:member:`~PyTypeObject.tp_setattr` handler " +"should be set to ``NULL``. ::" +msgstr "" +":c:member:`~PyTypeObject.tp_setattr` 处理器会在要调用一个类实例的 :meth:`__setattr__` 或 " +":meth:`__delattr__` 方法时被调用。 当一个属性应当被删除时,第三个形参将为 ``NULL``。 " +"下面是一个简单地引发异常的例子;如果这确实是你想要的,则 :c:member:`~PyTypeObject.tp_setattr` 处理器应当被设为 " +"``NULL``。 ::" + +#: ../../extending/newtypes.rst:379 +msgid "Object Comparison" +msgstr "对象比较" + +#: ../../extending/newtypes.rst:385 +msgid "" +"The :c:member:`~PyTypeObject.tp_richcompare` handler is called when " +"comparisons are needed. It is analogous to the :ref:`rich comparison " +"methods `, like :meth:`__lt__`, and also called by " +":c:func:`PyObject_RichCompare` and :c:func:`PyObject_RichCompareBool`." +msgstr "" +":c:member:`~PyTypeObject.tp_richcompare` 处理器会在需要进行比较时被调用。 它类似于 :ref:`富比较方法 " +"`,例如 :meth:`__lt__`,并会被 :c:func:`PyObject_RichCompare` 和 " +":c:func:`PyObject_RichCompareBool` 所调用。" + +#: ../../extending/newtypes.rst:390 +msgid "" +"This function is called with two Python objects and the operator as " +"arguments, where the operator is one of ``Py_EQ``, ``Py_NE``, ``Py_LE``, " +"``Py_GE``, ``Py_LT`` or ``Py_GT``. It should compare the two objects with " +"respect to the specified operator and return ``Py_True`` or ``Py_False`` if " +"the comparison is successful, ``Py_NotImplemented`` to indicate that " +"comparison is not implemented and the other object's comparison method " +"should be tried, or ``NULL`` if an exception was set." +msgstr "" +"此函数被调用时将传入两个 Python 对象和运算符作为参数,其中运算符为 ``Py_EQ``, ``Py_NE``, ``Py_LE``, " +"``Py_GE``, ``Py_LT`` 或 ``Py_GT`` 之一。 它应当使用指定的运算符来比较两个对象并在比较操作成功时返回 " +"``Py_True`` 或 ``Py_False``,如果比较操作未被实现并应尝试其他对象比较方法时则返回 " +"``Py_NotImplemented``,或者如果设置了异常则返回 ``NULL``。" + +#: ../../extending/newtypes.rst:398 +msgid "" +"Here is a sample implementation, for a datatype that is considered equal if " +"the size of an internal pointer is equal::" +msgstr "下面是一个示例实现,该数据类型如果内部指针的大小相等就认为是相等的::" + +#: ../../extending/newtypes.rst:428 +msgid "Abstract Protocol Support" +msgstr "抽象协议支持" + +#: ../../extending/newtypes.rst:430 +msgid "" +"Python supports a variety of *abstract* 'protocols;' the specific interfaces" +" provided to use these interfaces are documented in :ref:`abstract`." +msgstr "Python 支持多种 *抽象* '协议';被提供来使用这些接口的专门接口说明请在 :ref:`abstract` 中查看。" + +#: ../../extending/newtypes.rst:434 +msgid "" +"A number of these abstract interfaces were defined early in the development " +"of the Python implementation. In particular, the number, mapping, and " +"sequence protocols have been part of Python since the beginning. Other " +"protocols have been added over time. For protocols which depend on several " +"handler routines from the type implementation, the older protocols have been" +" defined as optional blocks of handlers referenced by the type object. For " +"newer protocols there are additional slots in the main type object, with a " +"flag bit being set to indicate that the slots are present and should be " +"checked by the interpreter. (The flag bit does not indicate that the slot " +"values are non-``NULL``. The flag may be set to indicate the presence of a " +"slot, but a slot may still be unfilled.) ::" +msgstr "" +"这些抽象接口很多都是在 Python 实现开发的早期被定义的。 特别地,数字、映射和序列协议从一开始就已经是 Python 的组成部分。 " +"其他协议则是后来添加的。 对于依赖某些来自类型实现的处理器例程的协议来说,较旧的协议被定义为类型对象所引用的处理器的可选块。 " +"对于较新的协议来说在主类型对象中还有额外的槽位,并带有一个预设旗标位来指明存在该槽位并应当由解释器来检查。 (此旗标位并不会指明槽位值非 " +"``NULL`` 的情况,可以设置该旗标来指明一个槽位的存在,但此本位仍可能保持未填充的状态。) ::" + +#: ../../extending/newtypes.rst:449 +msgid "" +"If you wish your object to be able to act like a number, a sequence, or a " +"mapping object, then you place the address of a structure that implements " +"the C type :c:type:`PyNumberMethods`, :c:type:`PySequenceMethods`, or " +":c:type:`PyMappingMethods`, respectively. It is up to you to fill in this " +"structure with appropriate values. You can find examples of the use of each " +"of these in the :file:`Objects` directory of the Python source distribution." +" ::" +msgstr "" +"如果你希望你的对象的行为类似一个数字、序列或映射对象,那么你就要分别放置一个实现了 C 类型 :c:type:`PyNumberMethods`, " +":c:type:`PySequenceMethods` 或 :c:type:`PyMappingMethods`, 的结构体的地址。 " +"你要负责将适当的值填入这些结构体。 你可以在 Python 源代码发布版的 :file:`Objects` 目录中找到这些对象各自的用法示例。 ::" + +#: ../../extending/newtypes.rst:458 +msgid "" +"This function, if you choose to provide it, should return a hash number for " +"an instance of your data type. Here is a simple example::" +msgstr "如果你选择提供此函数,则它应当为你的数据类型的实例返回一个哈希数值。 下面是一个简单的示例::" + +#: ../../extending/newtypes.rst:471 +msgid "" +":c:type:`Py_hash_t` is a signed integer type with a platform-varying width. " +"Returning ``-1`` from :c:member:`~PyTypeObject.tp_hash` indicates an error, " +"which is why you should be careful to avoid returning it when hash " +"computation is successful, as seen above." +msgstr "" +":c:type:`Py_hash_t` 是一个在宽度取决于具体平台的有符号整数类型。 从 " +":c:member:`~PyTypeObject.tp_hash` 返回 ``-1`` " +"表示发生了错误,这就是为什么你应当注意避免在哈希运算成功时返回它,如上面所演示的。" + +#: ../../extending/newtypes.rst:480 +msgid "" +"This function is called when an instance of your data type is \"called\", " +"for example, if ``obj1`` is an instance of your data type and the Python " +"script contains ``obj1('hello')``, the :c:member:`~PyTypeObject.tp_call` " +"handler is invoked." +msgstr "" +"此函数会在“调用”你的数据类型实例时被调用,举例来说,如果 ``obj1`` 是你的数据类型的实例而 Python 脚本包含了 " +"``obj1('hello')``,则将唤起 :c:member:`~PyTypeObject.tp_call` 处理器。" + +#: ../../extending/newtypes.rst:484 +msgid "This function takes three arguments:" +msgstr "此函数接受三个参数:" + +#: ../../extending/newtypes.rst:486 +msgid "" +"*self* is the instance of the data type which is the subject of the call. If" +" the call is ``obj1('hello')``, then *self* is ``obj1``." +msgstr "*self* 是作为调用目标的数据类型实例。 如果调用是 ``obj1('hello')``,则 *self* 为 ``obj1``。" + +#: ../../extending/newtypes.rst:489 +msgid "" +"*args* is a tuple containing the arguments to the call. You can use " +":c:func:`PyArg_ParseTuple` to extract the arguments." +msgstr "*args* 是包含调用参数的元组。 你可以使用 :c:func:`PyArg_ParseTuple` 来提取参数。" + +#: ../../extending/newtypes.rst:492 +msgid "" +"*kwds* is a dictionary of keyword arguments that were passed. If this is " +"non-``NULL`` and you support keyword arguments, use " +":c:func:`PyArg_ParseTupleAndKeywords` to extract the arguments. If you do " +"not want to support keyword arguments and this is non-``NULL``, raise a " +":exc:`TypeError` with a message saying that keyword arguments are not " +"supported." +msgstr "" +"*kwds* 是由传入的关键字参数组成的字典。 如果它不为 ``NULL`` 且你支持关键字参数,则可使用 " +":c:func:`PyArg_ParseTupleAndKeywords` 来提取参数。 如果你不想支持关键字参数而它为非 ``NULL`` " +"值,则会引发 :exc:`TypeError` 并附带一个提示不支持关键字参数的消息。" + +#: ../../extending/newtypes.rst:498 +msgid "Here is a toy ``tp_call`` implementation::" +msgstr "下面是一个演示性的 ``tp_call`` 实现::" + +#: ../../extending/newtypes.rst:524 +msgid "" +"These functions provide support for the iterator protocol. Both handlers " +"take exactly one parameter, the instance for which they are being called, " +"and return a new reference. In the case of an error, they should set an " +"exception and return ``NULL``. :c:member:`~PyTypeObject.tp_iter` " +"corresponds to the Python :meth:`__iter__` method, while " +":c:member:`~PyTypeObject.tp_iternext` corresponds to the Python " +":meth:`~iterator.__next__` method." +msgstr "" +"这些函数提供了对迭代器协议的支持。 两个处理器都只接受一个形参,即它们被调用时所使用的实例,并返回一个新的引用。 " +"当发生错误时,它们应当设置一个异常并返回 ``NULL``。 :c:member:`~PyTypeObject.tp_iter` 对应于 Python" +" :meth:`__iter__` 方法,而 :c:member:`~PyTypeObject.tp_iternext` 对应于 Python " +":meth:`~iterator.__next__` 方法。" + +#: ../../extending/newtypes.rst:531 +msgid "" +"Any :term:`iterable` object must implement the " +":c:member:`~PyTypeObject.tp_iter` handler, which must return an " +":term:`iterator` object. Here the same guidelines apply as for Python " +"classes:" +msgstr "" +"任何 :term:`iterable` 对象都必须实现 :c:member:`~PyTypeObject.tp_iter` 处理器,该处理器必须返回一个" +" :term:`iterator` 对象。 下面是与 Python 类所应用的同一个指导原则:" + +#: ../../extending/newtypes.rst:535 +msgid "" +"For collections (such as lists and tuples) which can support multiple " +"independent iterators, a new iterator should be created and returned by each" +" call to :c:member:`~PyTypeObject.tp_iter`." +msgstr "" +"对于可以支持多个独立迭代器的多项集(如列表和元组),则应当在每次调用 :c:member:`~PyTypeObject.tp_iter` " +"时创建并返回一个新的迭代器。" + +#: ../../extending/newtypes.rst:538 +msgid "" +"Objects which can only be iterated over once (usually due to side effects of" +" iteration, such as file objects) can implement " +":c:member:`~PyTypeObject.tp_iter` by returning a new reference to themselves" +" -- and should also therefore implement the " +":c:member:`~PyTypeObject.tp_iternext` handler." +msgstr "" +"只能被迭代一次的对象(通常是由于迭代操作的附带影响,例如文件对象)可以通过返回一个指向自身的新引用来实现 " +":c:member:`~PyTypeObject.tp_iter` -- 并且为此还应当实现 " +":c:member:`~PyTypeObject.tp_iternext` 处理器。" + +#: ../../extending/newtypes.rst:543 +msgid "" +"Any :term:`iterator` object should implement both " +":c:member:`~PyTypeObject.tp_iter` and :c:member:`~PyTypeObject.tp_iternext`." +" An iterator's :c:member:`~PyTypeObject.tp_iter` handler should return a " +"new reference to the iterator. Its :c:member:`~PyTypeObject.tp_iternext` " +"handler should return a new reference to the next object in the iteration, " +"if there is one. If the iteration has reached the end, " +":c:member:`~PyTypeObject.tp_iternext` may return ``NULL`` without setting an" +" exception, or it may set :exc:`StopIteration` *in addition* to returning " +"``NULL``; avoiding the exception can yield slightly better performance. If " +"an actual error occurs, :c:member:`~PyTypeObject.tp_iternext` should always " +"set an exception and return ``NULL``." +msgstr "" +"任何 :term:`iterator` 对象都应当同时实现 :c:member:`~PyTypeObject.tp_iter` 和 " +":c:member:`~PyTypeObject.tp_iternext`。 一个迭代器的 " +":c:member:`~PyTypeObject.tp_iter` 处理器应当返回一个指向该迭代器的新引用。 它的 " +":c:member:`~PyTypeObject.tp_iternext` 处理器应当返回一个指向迭代操作的下一个对象的新引用,如果还有下一个对象的话。" +" 如果迭代已到达末尾,则 :c:member:`~PyTypeObject.tp_iternext` 可以返回 ``NULL`` " +"而不设置异常,或者也可以在返回 ``NULL`` 的基础上 *额外* 设置 :exc:`StopIteration`;避免异常可以产生更好的性能。 " +"如果发生了实际的错误,则 :c:member:`~PyTypeObject.tp_iternext` 应当总是设置一个异常并返回 ``NULL``。" + +#: ../../extending/newtypes.rst:559 +msgid "Weak Reference Support" +msgstr "弱引用支持" + +#: ../../extending/newtypes.rst:561 +msgid "" +"One of the goals of Python's weak reference implementation is to allow any " +"type to participate in the weak reference mechanism without incurring the " +"overhead on performance-critical objects (such as numbers)." +msgstr "" +"One of the goals of Python 弱引用实现的目标之一是允许任意类型参与弱引用机制而不会在重视性能的对象(例如数字)上产生额外开销。" + +#: ../../extending/newtypes.rst:566 +msgid "Documentation for the :mod:`weakref` module." +msgstr ":mod:`weakref` 模块的文档。" + +#: ../../extending/newtypes.rst:568 +msgid "" +"For an object to be weakly referencable, the extension type must do two " +"things:" +msgstr "对于可弱引用的对象,扩展类型必须做两件事:" + +#: ../../extending/newtypes.rst:570 +msgid "" +"Include a :c:type:`PyObject\\*` field in the C object structure dedicated to" +" the weak reference mechanism. The object's constructor should leave it " +"``NULL`` (which is automatic when using the default " +":c:member:`~PyTypeObject.tp_alloc`)." +msgstr "" +"在 C 对象结构体中包括一个专门用于弱引用机制的 :c:type:`PyObject\\*` 字段。 该对象的构造器应当让它保持为 ``NULL`` " +"(当使用默认的 :c:member:`~PyTypeObject.tp_alloc` 时这将会自动设置)。" + +#: ../../extending/newtypes.rst:575 +msgid "" +"Set the :c:member:`~PyTypeObject.tp_weaklistoffset` type member to the " +"offset of the aforementioned field in the C object structure, so that the " +"interpreter knows how to access and modify that field." +msgstr "" +"将 :c:member:`~PyTypeObject.tp_weaklistoffset` 类型成员设置为 C " +"对象结构体中上述字段的偏移量,这样解释器就能知道如何访问和修改该字段。" + +#: ../../extending/newtypes.rst:579 +msgid "" +"Concretely, here is how a trivial object structure would be augmented with " +"the required field::" +msgstr "具体来说,下面是一个微小的对象结构体如何被增强为具有所需的字段::" + +#: ../../extending/newtypes.rst:587 +msgid "And the corresponding member in the statically-declared type object::" +msgstr "以及在静态声明的类型对象中的相应成员::" + +#: ../../extending/newtypes.rst:595 +msgid "" +"The only further addition is that ``tp_dealloc`` needs to clear any weak " +"references (by calling :c:func:`PyObject_ClearWeakRefs`) if the field is " +"non-``NULL``::" +msgstr "" +"唯一的额外补充是如果字段不为 ``NULL`` 则 ``tp_dealloc`` 需要清除任何弱引用 (通过调用 " +":c:func:`PyObject_ClearWeakRefs`)。::" + +#: ../../extending/newtypes.rst:611 +msgid "More Suggestions" +msgstr "更多建议" + +#: ../../extending/newtypes.rst:613 +msgid "" +"In order to learn how to implement any specific method for your new data " +"type, get the :term:`CPython` source code. Go to the :file:`Objects` " +"directory, then search the C source files for ``tp_`` plus the function you " +"want (for example, ``tp_richcompare``). You will find examples of the " +"function you want to implement." +msgstr "" +"为了学习如何为你的新数据类型实现任何特定方法,请获取 :term:`CPython` 源代码。 进入 :file:`Objects` 目录,然后在 C " +"源文件中搜索 ``tp_`` 加上你想要的函数 (例如,``tp_richcompare``)。 你将找到你想要实现的函数的例子。" + +#: ../../extending/newtypes.rst:619 +msgid "" +"When you need to verify that an object is a concrete instance of the type " +"you are implementing, use the :c:func:`PyObject_TypeCheck` function. A " +"sample of its use might be something like the following::" +msgstr "" +"当你需要验证一个对象是否为你实现的类型的具体实例时,请使用 :c:func:`PyObject_TypeCheck` 函数。 它的一个用法示例如下::" + +#: ../../extending/newtypes.rst:630 +msgid "Download CPython source releases." +msgstr "下载CPython源代码版本。" + +#: ../../extending/newtypes.rst:630 +msgid "https://www.python.org/downloads/source/" +msgstr "https://www.python.org/downloads/source/" + +#: ../../extending/newtypes.rst:632 +msgid "" +"The CPython project on GitHub, where the CPython source code is developed." +msgstr "GitHub上开发CPython源代码的CPython项目。" + +#: ../../extending/newtypes.rst:633 +msgid "https://github.com/python/cpython" +msgstr "https://github.com/python/cpython" diff --git a/extending/newtypes_tutorial.po b/extending/newtypes_tutorial.po new file mode 100644 index 000000000..896173efc --- /dev/null +++ b/extending/newtypes_tutorial.po @@ -0,0 +1,1028 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) 2001-2024, Python Software Foundation +# This file is distributed under the same license as the Python package. +# FIRST AUTHOR , YEAR. +# +# Translators: +# 刘士 , 2018 +# Harry Liu. , 2019 +# meowmeowcat , 2021 +# Jing Li , 2022 +# 高乐喆 , 2023 +# Rafael Fontenelle , 2023 +# Freesand Leo , 2024 +# +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: Python 3.9\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2024-04-26 21:29+0000\n" +"PO-Revision-Date: 2018-04-08 04:04+0000\n" +"Last-Translator: Freesand Leo , 2024\n" +"Language-Team: Chinese (China) (https://app.transifex.com/python-doc/teams/5390/zh_CN/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: zh_CN\n" +"Plural-Forms: nplurals=1; plural=0;\n" + +#: ../../extending/newtypes_tutorial.rst:7 +msgid "Defining Extension Types: Tutorial" +msgstr "自定义扩展类型:教程" + +#: ../../extending/newtypes_tutorial.rst:14 +msgid "" +"Python allows the writer of a C extension module to define new types that " +"can be manipulated from Python code, much like the built-in :class:`str` and" +" :class:`list` types. The code for all extension types follows a pattern, " +"but there are some details that you need to understand before you can get " +"started. This document is a gentle introduction to the topic." +msgstr "" +"Python 允许编写 C 扩展模块定义可以从 Python 代码中操纵的新类型,这很像内置的 :class:`str` 和 :class:`list`" +" 类型。所有扩展类型的代码都遵循一个模式,但是在您开始之前,您需要了解一些细节。这份文件是对这个主题介绍。" + +#: ../../extending/newtypes_tutorial.rst:24 +msgid "The Basics" +msgstr "基础" + +#: ../../extending/newtypes_tutorial.rst:26 +msgid "" +"The :term:`CPython` runtime sees all Python objects as variables of type " +":c:type:`PyObject\\*`, which serves as a \"base type\" for all Python " +"objects. The :c:type:`PyObject` structure itself only contains the object's " +":term:`reference count` and a pointer to the object's \"type object\". This " +"is where the action is; the type object determines which (C) functions get " +"called by the interpreter when, for instance, an attribute gets looked up on" +" an object, a method called, or it is multiplied by another object. These C" +" functions are called \"type methods\"." +msgstr "" +":term:`CPython` 运行时将所有 Python 对象都视为类型 :c:type:`PyObject\\*` 的变量,即所有 Python " +"对象的\"基础类型\"。 :c:type:`PyObject` 结构体本身包含了对象的 :term:`reference count` " +"和对象的\"类型对象\"。 类型对象确定解释器需要调用哪些 (C) 函数,例如一个属性查询一个对象,一个方法调用,或者与另一个对象相乘。 这些 C " +"函数被称为“类型方法”。" + +#: ../../extending/newtypes_tutorial.rst:35 +msgid "" +"So, if you want to define a new extension type, you need to create a new " +"type object." +msgstr "所以,如果你想要定义新的扩展类型,需要创建新的类型对象。" + +#: ../../extending/newtypes_tutorial.rst:38 +msgid "" +"This sort of thing can only be explained by example, so here's a minimal, " +"but complete, module that defines a new type named :class:`Custom` inside a " +"C extension module :mod:`custom`:" +msgstr "" +"这类事情只能用例子解释,这里用一个最小化但完整的的模块,定义了新的类型叫做 :class:`Custom` 在C扩展模块 :mod:`custom` " +"里。" + +#: ../../extending/newtypes_tutorial.rst:43 +msgid "" +"What we're showing here is the traditional way of defining *static* " +"extension types. It should be adequate for most uses. The C API also " +"allows defining heap-allocated extension types using the " +":c:func:`PyType_FromSpec` function, which isn't covered in this tutorial." +msgstr "" +"这里展示的方法是定义 *static* 扩展类型的传统方法。可以适合大部分用途。C API也可以定义在堆上分配的扩展类型,使用 " +":c:func:`PyType_FromSpec` 函数,但不在本入门里讨论。" + +#: ../../extending/newtypes_tutorial.rst:50 +msgid "" +"Now that's quite a bit to take in at once, but hopefully bits will seem " +"familiar from the previous chapter. This file defines three things:" +msgstr "这部分很容易理解,这是为了跟上一章能对接上。这个文件定义了三件事:" + +#: ../../extending/newtypes_tutorial.rst:53 +msgid "" +"What a :class:`Custom` **object** contains: this is the ``CustomObject`` " +"struct, which is allocated once for each :class:`Custom` instance." +msgstr "" +":class:`Custom` 类的对象 **object** 包含了: ``CustomObject`` 结构,这会为每个 " +":class:`Custom` 实例分配一次。" + +#: ../../extending/newtypes_tutorial.rst:55 +msgid "" +"How the :class:`Custom` **type** behaves: this is the ``CustomType`` struct," +" which defines a set of flags and function pointers that the interpreter " +"inspects when specific operations are requested." +msgstr "" +":class:`Custom` **type** 的行为:这是 ``CustomType`` " +"结构体,其定义了一堆标识和函数指针,会指向解释器里请求的操作。" + +#: ../../extending/newtypes_tutorial.rst:58 +msgid "" +"How to initialize the :mod:`custom` module: this is the ``PyInit_custom`` " +"function and the associated ``custommodule`` struct." +msgstr "初始化 :mod:`custom` 模块: ``PyInit_custom`` 函数和对应的 ``custommodule`` 结构体。" + +#: ../../extending/newtypes_tutorial.rst:61 +msgid "The first bit is::" +msgstr "结构的第一块是 ::" + +#: ../../extending/newtypes_tutorial.rst:67 +msgid "" +"This is what a Custom object will contain. ``PyObject_HEAD`` is mandatory " +"at the start of each object struct and defines a field called ``ob_base`` of" +" type :c:type:`PyObject`, containing a pointer to a type object and a " +"reference count (these can be accessed using the macros :c:macro:`Py_TYPE` " +"and :c:macro:`Py_REFCNT` respectively). The reason for the macro is to " +"abstract away the layout and to enable additional fields in debug builds." +msgstr "" + +#: ../../extending/newtypes_tutorial.rst:75 +msgid "" +"There is no semicolon above after the :c:macro:`PyObject_HEAD` macro. Be " +"wary of adding one by accident: some compilers will complain." +msgstr "注意在宏 :c:macro:`PyObject_HEAD` 后没有分号。意外添加分号会导致编译器提示出错。" + +#: ../../extending/newtypes_tutorial.rst:78 +msgid "" +"Of course, objects generally store additional data besides the standard " +"``PyObject_HEAD`` boilerplate; for example, here is the definition for " +"standard Python floats::" +msgstr "当然,对象除了在 ``PyObject_HEAD`` 存储数据外,还有额外数据;例如,如下定义了标准的Python浮点数::" + +#: ../../extending/newtypes_tutorial.rst:87 +msgid "The second bit is the definition of the type object. ::" +msgstr "第二个位是类型对象的定义::" + +#: ../../extending/newtypes_tutorial.rst:100 +msgid "" +"We recommend using C99-style designated initializers as above, to avoid " +"listing all the :c:type:`PyTypeObject` fields that you don't care about and " +"also to avoid caring about the fields' declaration order." +msgstr "" +"推荐使用如上C99风格的初始化,以避免列出所有的 :c:type:`PyTypeObject` " +"字段,其中很多是你不需要关心的,这样也可以避免关注字段的定义顺序。" + +#: ../../extending/newtypes_tutorial.rst:104 +msgid "" +"The actual definition of :c:type:`PyTypeObject` in :file:`object.h` has many" +" more :ref:`fields ` than the definition above. The remaining" +" fields will be filled with zeros by the C compiler, and it's common " +"practice to not specify them explicitly unless you need them." +msgstr "" +"在 :file:`object.h` 中实际定义的 :c:type:`PyTypeObject` 具有比如上定义更多的 :ref:`字段 `。 剩余的字段会由 C 编译器用零来填充,通常的做法是不显式地指定它们,除非你确实需要它们。" + +#: ../../extending/newtypes_tutorial.rst:109 +msgid "We're going to pick it apart, one field at a time::" +msgstr "我们先挑选一部分,每次一个字段::" + +#: ../../extending/newtypes_tutorial.rst:113 +msgid "" +"This line is mandatory boilerplate to initialize the ``ob_base`` field " +"mentioned above. ::" +msgstr "这一行是强制的样板,用以初始化如上提到的 ``ob_base`` 字段::" + +#: ../../extending/newtypes_tutorial.rst:118 +msgid "" +"The name of our type. This will appear in the default textual " +"representation of our objects and in some error messages, for example:" +msgstr "我们的类型的名称。 这将出现在我们的对象的默认文本表示形式和某些错误消息中,例如:" + +#: ../../extending/newtypes_tutorial.rst:128 +msgid "" +"Note that the name is a dotted name that includes both the module name and " +"the name of the type within the module. The module in this case is " +":mod:`custom` and the type is :class:`Custom`, so we set the type name to " +":class:`custom.Custom`. Using the real dotted import path is important to " +"make your type compatible with the :mod:`pydoc` and :mod:`pickle` modules. " +"::" +msgstr "" +"注意,名字是一个带点的名字,包括模块名称和模块中的类型名称。本例中的模块是 :mod:`custom`,类型是 " +":class:`Custom`,所以我们将类型名设为 :class:`custom.Custom`。使用真正的点状导入路径很重要,可以使你的类型与 " +":mod:`pydoc` 和 :mod:`pickle` 模块兼容。" + +#: ../../extending/newtypes_tutorial.rst:137 +msgid "" +"This is so that Python knows how much memory to allocate when creating new " +":class:`Custom` instances. :c:member:`~PyTypeObject.tp_itemsize` is only " +"used for variable-sized objects and should otherwise be zero." +msgstr "" +"这样能让 Python 知道当创建新的 :class:`Custom` 实例时需要分配多少内存。 " +":c:member:`~PyTypeObject.tp_itemsize` 仅用于可变大小的对象而在其他情况下都应为零。" + +#: ../../extending/newtypes_tutorial.rst:143 +msgid "" +"If you want your type to be subclassable from Python, and your type has the " +"same :c:member:`~PyTypeObject.tp_basicsize` as its base type, you may have " +"problems with multiple inheritance. A Python subclass of your type will " +"have to list your type first in its :attr:`~class.__bases__`, or else it " +"will not be able to call your type's :meth:`__new__` method without getting " +"an error. You can avoid this problem by ensuring that your type has a " +"larger value for :c:member:`~PyTypeObject.tp_basicsize` than its base type " +"does. Most of the time, this will be true anyway, because either your base " +"type will be :class:`object`, or else you will be adding data members to " +"your base type, and therefore increasing its size." +msgstr "" +"如果你希望你的类型可在 Python 中被子类化,并且你的类型具有与其基础类型相同的 " +":c:member:`~PyTypeObject.tp_basicsize`,那么你可能会遇到多重继承问题。 你的类型在 Python " +"中的子类将必须在其 :attr:`~class.__bases__` 中将你的类型列在最前面,否则它在调用你的类型的 :meth:`__new__` " +"方法时就会遇到错误。 你可以通过确保你的类型具有比其基础类型更大的 :c:member:`~PyTypeObject.tp_basicsize` " +"值来避免此问题。 在大多数时候,这都是可以的,因为或者你的基础类型为 " +":class:`object`,或者你会向你的基础类型增加数据成员,并因而增加其大小。" + +#: ../../extending/newtypes_tutorial.rst:153 +msgid "We set the class flags to :const:`Py_TPFLAGS_DEFAULT`. ::" +msgstr "我们将类旗标设为 :const:`Py_TPFLAGS_DEFAULT`。 ::" + +#: ../../extending/newtypes_tutorial.rst:157 +msgid "" +"All types should include this constant in their flags. It enables all of " +"the members defined until at least Python 3.3. If you need further members," +" you will need to OR the corresponding flags." +msgstr "" +"所有类型都应当在它们的旗标中包括此常量。 该常量将启用至少在 Python 3.3 之前定义的全部成员。 如果你需要更多的成员,你将需要对相应的旗标进行" +" OR 运算。" + +#: ../../extending/newtypes_tutorial.rst:161 +msgid "" +"We provide a doc string for the type in :c:member:`~PyTypeObject.tp_doc`. ::" +msgstr "我们为 :c:member:`~PyTypeObject.tp_doc` 类型提供一个文档字符串. ::" + +#: ../../extending/newtypes_tutorial.rst:165 +msgid "" +"To enable object creation, we have to provide a " +":c:member:`~PyTypeObject.tp_new` handler. This is the equivalent of the " +"Python method :meth:`__new__`, but has to be specified explicitly. In this " +"case, we can just use the default implementation provided by the API " +"function :c:func:`PyType_GenericNew`. ::" +msgstr "" +"要启用对象创建,我们需要提供一个 :c:member:`~PyTypeObject.tp_new` 处理器。 这等价于 Python 方法 " +":meth:`__new__`,但是必须显式地指定。 在这个场景中,我们可以直接使用 API 函数 " +":c:func:`PyType_GenericNew` 所提供的默认实现。 ::" + +#: ../../extending/newtypes_tutorial.rst:172 +msgid "" +"Everything else in the file should be familiar, except for some code in " +":c:func:`PyInit_custom`::" +msgstr "该文件的其他部分应该都很容易理解,除了 :c:func:`PyInit_custom` 中的某些代码::" + +#: ../../extending/newtypes_tutorial.rst:178 +msgid "" +"This initializes the :class:`Custom` type, filling in a number of members to" +" the appropriate default values, including :attr:`ob_type` that we initially" +" set to ``NULL``. ::" +msgstr "" +"这将初始化 :class:`Custom` 类型,为一部分成员填充适当的默认值,包括我们在初始时设为 ``NULL`` 的 " +":attr:`ob_type`。 ::" + +#: ../../extending/newtypes_tutorial.rst:189 +msgid "" +"This adds the type to the module dictionary. This allows us to create " +":class:`Custom` instances by calling the :class:`Custom` class:" +msgstr "这将把类型添加到模块字典。 这使我们能通过调用 :class:`Custom` 类来创建 :class:`Custom` 实例:" + +#: ../../extending/newtypes_tutorial.rst:197 +msgid "" +"That's it! All that remains is to build it; put the above code in a file " +"called :file:`custom.c` and:" +msgstr "好了! 接下来要做的就是编译它;将上述代码放到名为 :file:`custom.c` 的文件中然后:" + +#: ../../extending/newtypes_tutorial.rst:206 +msgid "in a file called :file:`setup.py`; then typing" +msgstr "在名为 :file:`setup.py` 的文件中;然后输入" + +#: ../../extending/newtypes_tutorial.rst:212 +msgid "" +"at a shell should produce a file :file:`custom.so` in a subdirectory; move " +"to that directory and fire up Python --- you should be able to ``import " +"custom`` and play around with Custom objects." +msgstr "" +"到 shell 中应当会在一个子目录中产生文件 :file:`custom.so`;进入该目录并运行 Python --- 你应当能够执行 " +"``import custom`` 并尝试使用 Custom 对象。" + +#: ../../extending/newtypes_tutorial.rst:216 +msgid "That wasn't so hard, was it?" +msgstr "这并不难,对吗?" + +#: ../../extending/newtypes_tutorial.rst:218 +msgid "" +"Of course, the current Custom type is pretty uninteresting. It has no data " +"and doesn't do anything. It can't even be subclassed." +msgstr "当然,当前的自定义类型非常无趣。它没有数据,也不做任何事情。它甚至不能被子类化。" + +#: ../../extending/newtypes_tutorial.rst:222 +msgid "" +"While this documentation showcases the standard :mod:`distutils` module for " +"building C extensions, it is recommended in real-world use cases to use the " +"newer and better-maintained ``setuptools`` library. Documentation on how to" +" do this is out of scope for this document and can be found in the `Python " +"Packaging User's Guide `_." +msgstr "" +"虽然本文档演示了用于构建 C 扩展的标准 :mod:`distutils` 模块,但在真实场景中还是推荐使用更新且维护得更好的 " +"``setuptools`` 库。 有关其用法的文档超出了本文档的范围,可以访问 `Python 打包用户指南 " +"`_ 来获取。" + +#: ../../extending/newtypes_tutorial.rst:230 +msgid "Adding data and methods to the Basic example" +msgstr "向基本示例添加数据和方法" + +#: ../../extending/newtypes_tutorial.rst:232 +msgid "" +"Let's extend the basic example to add some data and methods. Let's also " +"make the type usable as a base class. We'll create a new module, " +":mod:`custom2` that adds these capabilities:" +msgstr "" +"让我们通过添加一些数据和方法来扩展这个基本示例。 让我们再使原类型可以作为基类使用。 我们将创建一个新模块 :mod:`custom2` " +"来添加这些功能:" + +#: ../../extending/newtypes_tutorial.rst:239 +msgid "This version of the module has a number of changes." +msgstr "该模块的新版本包含多处修改。" + +#: ../../extending/newtypes_tutorial.rst:241 +msgid "We've added an extra include::" +msgstr "我们已经添加呢一个外部导入::" + +#: ../../extending/newtypes_tutorial.rst:245 +msgid "" +"This include provides declarations that we use to handle attributes, as " +"described a bit later." +msgstr "这包括提供被我们用来处理属性的声明,正如我们稍后所描述的。" + +#: ../../extending/newtypes_tutorial.rst:248 +msgid "" +"The :class:`Custom` type now has three data attributes in its C struct, " +"*first*, *last*, and *number*. The *first* and *last* variables are Python " +"strings containing first and last names. The *number* attribute is a C " +"integer." +msgstr "" +"现在 :class:`Custom` 类型的 C 结构体中有三个数据属性,*first*, *last* 和 *number*。 其中 *first* " +"和 *last* 变量是包含头一个和末一个名称的 Python 字符串。 *number* 属性是一个 C 整数。" + +#: ../../extending/newtypes_tutorial.rst:252 +msgid "The object structure is updated accordingly::" +msgstr "对象的结构将被相应地更新::" + +#: ../../extending/newtypes_tutorial.rst:261 +msgid "" +"Because we now have data to manage, we have to be more careful about object " +"allocation and deallocation. At a minimum, we need a deallocation method::" +msgstr "因为现在我们有数据需要管理,我们必须更加小心地处理对象的分配和释放。 至少,我们需要有一个释放方法::" + +#: ../../extending/newtypes_tutorial.rst:272 +msgid "which is assigned to the :c:member:`~PyTypeObject.tp_dealloc` member::" +msgstr "它会被赋值给 :c:member:`~PyTypeObject.tp_dealloc` 成员::" + +#: ../../extending/newtypes_tutorial.rst:276 +msgid "" +"This method first clears the reference counts of the two Python attributes. " +":c:func:`Py_XDECREF` correctly handles the case where its argument is " +"``NULL`` (which might happen here if ``tp_new`` failed midway). It then " +"calls the :c:member:`~PyTypeObject.tp_free` member of the object's type " +"(computed by ``Py_TYPE(self)``) to free the object's memory. Note that the " +"object's type might not be :class:`CustomType`, because the object may be an" +" instance of a subclass." +msgstr "" +"此方法会先清空两个 Python 属性的引用计数。 :c:func:`Py_XDECREF` 可正确地处理其参数为 ``NULL`` 的情况(这可能在 " +"``tp_new`` 中途失败时发生)。 随后它将调用对象类型的 :c:member:`~PyTypeObject.tp_free` 成员(通过 " +"``Py_TYPE(self)`` 获取对象类型)来释放对象的内存。 请注意对象类型可以不是 " +":class:`CustomType`,因为对象可能是一个子类的实例。" + +#: ../../extending/newtypes_tutorial.rst:285 +msgid "" +"The explicit cast to ``destructor`` above is needed because we defined " +"``Custom_dealloc`` to take a ``CustomObject *`` argument, but the " +"``tp_dealloc`` function pointer expects to receive a ``PyObject *`` " +"argument. Otherwise, the compiler will emit a warning. This is object-" +"oriented polymorphism, in C!" +msgstr "" +"上面需要强制转换 ``destructor`` 是因为我们定义了 ``Custom_dealloc`` 接受一个 ``CustomObject *`` " +"参数,但 ``tp_dealloc`` 函数指针预期接受一个 ``PyObject *`` 参数。 如果不这样做,编译器将发出警告。 这是 C " +"语言中面向对象的多态性!" + +#: ../../extending/newtypes_tutorial.rst:291 +msgid "" +"We want to make sure that the first and last names are initialized to empty " +"strings, so we provide a ``tp_new`` implementation::" +msgstr "我们希望确保头一个和末一个名称被初始化为空字符串,因此我们提供了一个 ``tp_new`` 实现::" + +#: ../../extending/newtypes_tutorial.rst:315 +msgid "and install it in the :c:member:`~PyTypeObject.tp_new` member::" +msgstr "并在 :c:member:`~PyTypeObject.tp_new` 成员中安装它::" + +#: ../../extending/newtypes_tutorial.rst:319 +msgid "" +"The ``tp_new`` handler is responsible for creating (as opposed to " +"initializing) objects of the type. It is exposed in Python as the " +":meth:`__new__` method. It is not required to define a ``tp_new`` member, " +"and indeed many extension types will simply reuse " +":c:func:`PyType_GenericNew` as done in the first version of the ``Custom`` " +"type above. In this case, we use the ``tp_new`` handler to initialize the " +"``first`` and ``last`` attributes to non-``NULL`` default values." +msgstr "" +"``tp_new`` 处理器负责创建(而不是初始化)该类型的对象。 它在 Python 中被暴露为 :meth:`__new__` 方法。 它不需要定义" +" ``tp_new`` 成员,实际上许多扩展类型会简单地重用 :c:func:`PyType_GenericNew`,就像上面第一版 " +"``Custom`` 类型所作的那样。 在此情况下,我们使用 ``tp_new`` 处理器来将 ``first`` 和 ``last`` 属性初始化为非" +" ``NULL`` 的默认值。" + +#: ../../extending/newtypes_tutorial.rst:327 +msgid "" +"``tp_new`` is passed the type being instantiated (not necessarily " +"``CustomType``, if a subclass is instantiated) and any arguments passed when" +" the type was called, and is expected to return the instance created. " +"``tp_new`` handlers always accept positional and keyword arguments, but they" +" often ignore the arguments, leaving the argument handling to initializer " +"(a.k.a. ``tp_init`` in C or ``__init__`` in Python) methods." +msgstr "" +"``tp_new`` 将接受被实例化的类型(不要求为 " +"``CustomType``,如果被实例化的是一个子类)以及在该类型被调用时传入的任何参数,并预期返回所创建的实例。 ``tp_new`` " +"处理器总是接受位置和关键字参数,但它们总是会忽略这些参数,而将参数处理留给初始化(即 C 中的 ``tp_init`` 或 Python 中的 " +"``__init__`` 函数)方法来执行。" + +#: ../../extending/newtypes_tutorial.rst:335 +msgid "" +"``tp_new`` shouldn't call ``tp_init`` explicitly, as the interpreter will do" +" it itself." +msgstr "``tp_new`` 不应显式地调用 ``tp_init``,因为解释器会自行调用它。" + +#: ../../extending/newtypes_tutorial.rst:338 +msgid "" +"The ``tp_new`` implementation calls the :c:member:`~PyTypeObject.tp_alloc` " +"slot to allocate memory::" +msgstr "``tp_new`` 实现会调用 :c:member:`~PyTypeObject.tp_alloc` 槽位来分配内存::" + +#: ../../extending/newtypes_tutorial.rst:343 +msgid "" +"Since memory allocation may fail, we must check the " +":c:member:`~PyTypeObject.tp_alloc` result against ``NULL`` before " +"proceeding." +msgstr "" +"由于内存分配可能会失败,我们必须在继续执行之前检查 :c:member:`~PyTypeObject.tp_alloc` 结果确认其不为 " +"``NULL``。" + +#: ../../extending/newtypes_tutorial.rst:347 +msgid "" +"We didn't fill the :c:member:`~PyTypeObject.tp_alloc` slot ourselves. Rather" +" :c:func:`PyType_Ready` fills it for us by inheriting it from our base " +"class, which is :class:`object` by default. Most types use the default " +"allocation strategy." +msgstr "" +"我们没有自行填充 :c:member:`~PyTypeObject.tp_alloc` 槽位。 而是由 :c:func:`PyType_Ready` " +"通过从我们的基类继承来替我们填充它,其中默认为 :class:`object`。 大部分类型都是使用默认的分配策略。" + +#: ../../extending/newtypes_tutorial.rst:353 +msgid "" +"If you are creating a co-operative :c:member:`~PyTypeObject.tp_new` (one " +"that calls a base type's :c:member:`~PyTypeObject.tp_new` or " +":meth:`__new__`), you must *not* try to determine what method to call using " +"method resolution order at runtime. Always statically determine what type " +"you are going to call, and call its :c:member:`~PyTypeObject.tp_new` " +"directly, or via ``type->tp_base->tp_new``. If you do not do this, Python " +"subclasses of your type that also inherit from other Python-defined classes " +"may not work correctly. (Specifically, you may not be able to create " +"instances of such subclasses without getting a :exc:`TypeError`.)" +msgstr "" +"如果你要创建一个协作 :c:member:`~PyTypeObject.tp_new` (它会调用基类型的 " +":c:member:`~PyTypeObject.tp_new` 或 :meth:`__new__`),那么你 *不能* " +"在运行时尝试使用方法解析顺序来确定要调用的方法。 必须总是静态地确定你要调用的类型,并直接调用它的 " +":c:member:`~PyTypeObject.tp_new`,或是通过 ``type->tp_base->tp_new``。 " +"如果你不这样做,你的类型的同样从其他 Python 定义的类继承的 Python 子类可能无法正确工作。 " +"(特别地,你可能无法创建这样的子类的实例而是会引发 :exc:`TypeError`。)" + +#: ../../extending/newtypes_tutorial.rst:363 +msgid "" +"We also define an initialization function which accepts arguments to provide" +" initial values for our instance::" +msgstr "我们还定义了一个接受参数来为我们的实例提供初始值的初始化函数::" + +#: ../../extending/newtypes_tutorial.rst:392 +msgid "by filling the :c:member:`~PyTypeObject.tp_init` slot. ::" +msgstr "通过填充 :c:member:`~PyTypeObject.tp_init` 槽位。 ::" + +#: ../../extending/newtypes_tutorial.rst:396 +msgid "" +"The :c:member:`~PyTypeObject.tp_init` slot is exposed in Python as the " +":meth:`__init__` method. It is used to initialize an object after it's " +"created. Initializers always accept positional and keyword arguments, and " +"they should return either ``0`` on success or ``-1`` on error." +msgstr "" +":c:member:`~PyTypeObject.tp_init` 槽位在 Python 中暴露为 :meth:`__init__` 方法。 " +"它被用来在对象被创建后初始化它。 初始化器总是接受位置和关键字参数,它们应当在成功时返回 ``0`` 而在出错时返回 ``-1``。" + +#: ../../extending/newtypes_tutorial.rst:401 +msgid "" +"Unlike the ``tp_new`` handler, there is no guarantee that ``tp_init`` is " +"called at all (for example, the :mod:`pickle` module by default doesn't call" +" :meth:`__init__` on unpickled instances). It can also be called multiple " +"times. Anyone can call the :meth:`__init__` method on our objects. For " +"this reason, we have to be extra careful when assigning the new attribute " +"values. We might be tempted, for example to assign the ``first`` member " +"like this::" +msgstr "" +"不同于 ``tp_new`` 处理器,``tp_init`` 不保证一定会被调用 (例如,在默认情况下 :mod:`pickle` " +"模块不会在被解封的实例上调用 :meth:`__init__`)。 它还可能被多次调用。 任何人都可以在我们的对象上调用 " +":meth:`__init__` 方法。 由于这个原因,我们在为属性赋新值时必须非常小心。 我们可能会被误导,例如像这样给 ``first`` " +"成员赋值::" + +#: ../../extending/newtypes_tutorial.rst:415 +msgid "" +"But this would be risky. Our type doesn't restrict the type of the " +"``first`` member, so it could be any kind of object. It could have a " +"destructor that causes code to be executed that tries to access the " +"``first`` member; or that destructor could release the :term:`Global " +"interpreter Lock ` and let arbitrary code run in other threads that " +"accesses and modifies our object." +msgstr "" +"但是这可能会有危险。 我们的类型没有限制 ``first`` 成员的类型,因此它可以是任何种类的对象。 它可以带有一个会执行尝试访问 ``first``" +" 成员的代码的析构器;或者该析构器可能会释放 :term:`全局解释器锁 ` 并让任意代码在其他线程中运行来访问和修改我们的对象。" + +#: ../../extending/newtypes_tutorial.rst:422 +msgid "" +"To be paranoid and protect ourselves against this possibility, we almost " +"always reassign members before decrementing their reference counts. When " +"don't we have to do this?" +msgstr "为了保持谨慎并使我们避免这种可能性,我们几乎总是要在减少成员的引用计数之前给它们重新赋值。 什么时候我们可以不必再这样做?" + +#: ../../extending/newtypes_tutorial.rst:426 +msgid "when we absolutely know that the reference count is greater than 1;" +msgstr "当我们明确知道引用计数大于 1 的时候;" + +#: ../../extending/newtypes_tutorial.rst:428 +msgid "" +"when we know that deallocation of the object [#]_ will neither release the " +":term:`GIL` nor cause any calls back into our type's code;" +msgstr "当我们知道对象的释放 [#]_ 既不会释放 :term:`GIL` 也不会导致任何对我们的类型的代码的回调的时候;" + +#: ../../extending/newtypes_tutorial.rst:431 +msgid "" +"when decrementing a reference count in a " +":c:member:`~PyTypeObject.tp_dealloc` handler on a type which doesn't support" +" cyclic garbage collection [#]_." +msgstr "" +"当减少一个 :c:member:`~PyTypeObject.tp_dealloc` 处理器内不支持循环垃圾回收的类型的引用计数的时候 [#]_." + +#: ../../extending/newtypes_tutorial.rst:434 +msgid "" +"We want to expose our instance variables as attributes. There are a number " +"of ways to do that. The simplest way is to define member definitions::" +msgstr "我们可能会想将我们的实例变量暴露为属性。 有几种方式可以做到这一点。 最简单的方式是定义成员的定义::" + +#: ../../extending/newtypes_tutorial.rst:447 +msgid "" +"and put the definitions in the :c:member:`~PyTypeObject.tp_members` slot::" +msgstr "并将定义放置到 :c:member:`~PyTypeObject.tp_members` 槽位中::" + +#: ../../extending/newtypes_tutorial.rst:451 +msgid "" +"Each member definition has a member name, type, offset, access flags and " +"documentation string. See the :ref:`Generic-Attribute-Management` section " +"below for details." +msgstr "" +"每个成员的定义都有成员名称、类型、偏移量、访问旗标和文档字符串。 请参阅下面的 :ref:`Generic-Attribute-Management` " +"小节来了解详情。section below for details." + +#: ../../extending/newtypes_tutorial.rst:455 +msgid "" +"A disadvantage of this approach is that it doesn't provide a way to restrict" +" the types of objects that can be assigned to the Python attributes. We " +"expect the first and last names to be strings, but any Python objects can be" +" assigned. Further, the attributes can be deleted, setting the C pointers to" +" ``NULL``. Even though we can make sure the members are initialized to " +"non-``NULL`` values, the members can be set to ``NULL`` if the attributes " +"are deleted." +msgstr "" +"此方式的缺点之一是它没有提供限制可被赋值给 Python 属性的对象类型的办法。 我们预期 first 和 last " +"的名称为字符串,但它们可以被赋值为任意 Python 对象。 此外,这些属性还可以被删除,并将 C 指针设为 ``NULL``。 " +"即使我们可以保证这些成员被初始化为非 ``NULL`` 值,如果这些属性被删除这些成员仍可被设为 ``NULL``。" + +#: ../../extending/newtypes_tutorial.rst:462 +msgid "" +"We define a single method, :meth:`Custom.name()`, that outputs the objects " +"name as the concatenation of the first and last names. ::" +msgstr "我们定义了一个单独的方法,:meth:`Custom.name()`,它将对象名称输出为 first 和 last 名称的拼接。 ::" + +#: ../../extending/newtypes_tutorial.rst:479 +msgid "" +"The method is implemented as a C function that takes a :class:`Custom` (or " +":class:`Custom` subclass) instance as the first argument. Methods always " +"take an instance as the first argument. Methods often take positional and " +"keyword arguments as well, but in this case we don't take any and don't need" +" to accept a positional argument tuple or keyword argument dictionary. This " +"method is equivalent to the Python method:" +msgstr "" +"该方法的实现形式是一个接受 :class:`Custom` (或 :class:`Custom` 的子类) 实例作为第一个参数的 C 函数。 " +"方法总是接受一个实例作为第一个参数。 方法也总是接受位置和关键字参数,但在本例中我们未接受任何参数也不需要接受位置参数元组或关键字参数字典。 " +"该方法等价于以下 Python 方法:" + +#: ../../extending/newtypes_tutorial.rst:491 +msgid "" +"Note that we have to check for the possibility that our :attr:`first` and " +":attr:`last` members are ``NULL``. This is because they can be deleted, in " +"which case they are set to ``NULL``. It would be better to prevent deletion" +" of these attributes and to restrict the attribute values to be strings. " +"We'll see how to do that in the next section." +msgstr "" +"请注意我们必须检查我们的 :attr:`first` 和 :attr:`last` 成员是否可能为 ``NULL``。 " +"这是因为它们可以被删除,在此情况下它们会被设为 ``NULL``。 更好的做法是防止删除这些属性并将属性的值限制为字符串。 " +"我们将在下一节了解如何做到这一点。" + +#: ../../extending/newtypes_tutorial.rst:497 +msgid "" +"Now that we've defined the method, we need to create an array of method " +"definitions::" +msgstr "现在我们已经定义好了方法,我们需要创建一个方法定义数组::" + +#: ../../extending/newtypes_tutorial.rst:507 +msgid "" +"(note that we used the :const:`METH_NOARGS` flag to indicate that the method" +" is expecting no arguments other than *self*)" +msgstr "(请注意我们使用 :const:`METH_NOARGS` 旗标来指明该方法不准备接受 *self* 以外的任何参数)" + +#: ../../extending/newtypes_tutorial.rst:510 +msgid "and assign it to the :c:member:`~PyTypeObject.tp_methods` slot::" +msgstr "并将其赋给 :c:member:`~PyTypeObject.tp_methods` 槽位::" + +#: ../../extending/newtypes_tutorial.rst:514 +msgid "" +"Finally, we'll make our type usable as a base class for subclassing. We've " +"written our methods carefully so far so that they don't make any assumptions" +" about the type of the object being created or used, so all we need to do is" +" to add the :const:`Py_TPFLAGS_BASETYPE` to our class flag definition::" +msgstr "" +"最后,我们将使我们的类型可被用作派生子类的基类。 我们精心地编写我们的方法以便它们不会随意假定被创建或使用的对象类型,所以我们需要做的就是将 " +":const:`Py_TPFLAGS_BASETYPE` 添加到我们的类旗标定义中::" + +#: ../../extending/newtypes_tutorial.rst:521 +msgid "" +"We rename :c:func:`PyInit_custom` to :c:func:`PyInit_custom2`, update the " +"module name in the :c:type:`PyModuleDef` struct, and update the full class " +"name in the :c:type:`PyTypeObject` struct." +msgstr "" +"我们将 :c:func:`PyInit_custom` 重命名为 :c:func:`PyInit_custom2`,更新 " +":c:type:`PyModuleDef` 结构体中的模块名,并更新 :c:type:`PyTypeObject` 结构体中的完整类名。" + +#: ../../extending/newtypes_tutorial.rst:525 +msgid "Finally, we update our :file:`setup.py` file to build the new module:" +msgstr "最后,我们更新我们的 :file:`setup.py` 文件来生成新的模块。" + +#: ../../extending/newtypes_tutorial.rst:538 +msgid "Providing finer control over data attributes" +msgstr "提供对于数据属性的更精细控制" + +#: ../../extending/newtypes_tutorial.rst:540 +msgid "" +"In this section, we'll provide finer control over how the :attr:`first` and " +":attr:`last` attributes are set in the :class:`Custom` example. In the " +"previous version of our module, the instance variables :attr:`first` and " +":attr:`last` could be set to non-string values or even deleted. We want to " +"make sure that these attributes always contain strings." +msgstr "" +"在本小节中,我们将对 :class:`Custom` 示例中 :attr:`first` 和 :attr:`last` 属性的设置提供更细致的控制。 " +"在我们上一版本的模块中,实例变量 :attr:`first` 和 :attr:`last` 可以被设为非字符串值甚至被删除。 " +"我们希望这些属性总是包含字符串。" + +#: ../../extending/newtypes_tutorial.rst:549 +msgid "" +"To provide greater control, over the :attr:`first` and :attr:`last` " +"attributes, we'll use custom getter and setter functions. Here are the " +"functions for getting and setting the :attr:`first` attribute::" +msgstr "" +"为了提供对于 :attr:`first` 和 :attr:`last` 属性更强的控制,我们将使用自定义的读取和设置函数。 下面就是用于读取和设置 " +":attr:`first` 属性的函数::" + +#: ../../extending/newtypes_tutorial.rst:580 +msgid "" +"The getter function is passed a :class:`Custom` object and a \"closure\", " +"which is a void pointer. In this case, the closure is ignored. (The " +"closure supports an advanced usage in which definition data is passed to the" +" getter and setter. This could, for example, be used to allow a single set " +"of getter and setter functions that decide the attribute to get or set based" +" on data in the closure.)" +msgstr "" +"读取函数接受一个 :class:`Custom` 对象和一个“闭包”,它是一个空指针。 在本例中,该闭包会被忽略。 " +"(该闭包支持将定义数据传给读取器和设置器的进阶用法。 例如,这可以被用来允许单组读取和设置函数根据闭包中的数据来决定要读取或设置的属性。)" + +#: ../../extending/newtypes_tutorial.rst:586 +msgid "" +"The setter function is passed the :class:`Custom` object, the new value, and" +" the closure. The new value may be ``NULL``, in which case the attribute is" +" being deleted. In our setter, we raise an error if the attribute is " +"deleted or if its new value is not a string." +msgstr "" +"设置器函数将接受 :class:`Custom` 对象、新值以及闭包。 新值可以为 ``NULL``,在此情况下属性将被删除。 " +"在我们的设置器中,如果属性被删除或者如果它的新值不是字符串则我们将引发一个错误。" + +#: ../../extending/newtypes_tutorial.rst:591 +msgid "We create an array of :c:type:`PyGetSetDef` structures::" +msgstr "我们创建一个 :c:type:`PyGetSetDef` 结构体的数组::" + +#: ../../extending/newtypes_tutorial.rst:601 +msgid "and register it in the :c:member:`~PyTypeObject.tp_getset` slot::" +msgstr "并在 :c:member:`~PyTypeObject.tp_getset` 槽位中注册它::" + +#: ../../extending/newtypes_tutorial.rst:605 +msgid "" +"The last item in a :c:type:`PyGetSetDef` structure is the \"closure\" " +"mentioned above. In this case, we aren't using a closure, so we just pass " +"``NULL``." +msgstr "" +"在 :c:type:`PyGetSetDef` 结构体中的最后一项是上面提到的“闭包”。 在本例中,我们没有使用闭包,因此我们只传入 ``NULL``。" + +#: ../../extending/newtypes_tutorial.rst:608 +msgid "We also remove the member definitions for these attributes::" +msgstr "我们还移除了这些属性的成员定义::" + +#: ../../extending/newtypes_tutorial.rst:616 +msgid "" +"We also need to update the :c:member:`~PyTypeObject.tp_init` handler to only" +" allow strings [#]_ to be passed::" +msgstr "我们还需要将 :c:member:`~PyTypeObject.tp_init` 处理器更新为只允许传入字符串 [#]_::" + +#: ../../extending/newtypes_tutorial.rst:645 +msgid "" +"With these changes, we can assure that the ``first`` and ``last`` members " +"are never ``NULL`` so we can remove checks for ``NULL`` values in almost all" +" cases. This means that most of the :c:func:`Py_XDECREF` calls can be " +"converted to :c:func:`Py_DECREF` calls. The only place we can't change " +"these calls is in the ``tp_dealloc`` implementation, where there is the " +"possibility that the initialization of these members failed in ``tp_new``." +msgstr "" +"通过这些更改,我们能够确保 ``first`` 和 ``last`` 成员一定不为 ``NULL`` 以便我们能在几乎所有情况下移除 ``NULL`` " +"值检查。 这意味着大部分 :c:func:`Py_XDECREF` 调用都可以被转换为 :c:func:`Py_DECREF` 调用。 " +"我们不能更改这些调用的唯一场合是在 ``tp_dealloc`` 实现中,那里这些成员的初始化有可能在 ``tp_new`` 中失败。" + +#: ../../extending/newtypes_tutorial.rst:652 +msgid "" +"We also rename the module initialization function and module name in the " +"initialization function, as we did before, and we add an extra definition to" +" the :file:`setup.py` file." +msgstr "" +"我们还重命名了模块初始化函数和初始化函数中的模块名称,就像我们之前所做的一样,我们还向 :file:`setup.py` 文件添加了一个额外的定义。" + +#: ../../extending/newtypes_tutorial.rst:658 +msgid "Supporting cyclic garbage collection" +msgstr "支持循环垃圾回收" + +#: ../../extending/newtypes_tutorial.rst:660 +msgid "" +"Python has a :term:`cyclic garbage collector (GC) ` that" +" can identify unneeded objects even when their reference counts are not " +"zero. This can happen when objects are involved in cycles. For example, " +"consider:" +msgstr "" +"Python 具有一个可以标识不再需要的对象的 :term:`循环垃圾回收器 (GC) ` " +"即使它们的引用计数并不为零。 这种情况会在对象被循环引用时发生。 例如,设想:" + +#: ../../extending/newtypes_tutorial.rst:670 +msgid "" +"In this example, we create a list that contains itself. When we delete it, " +"it still has a reference from itself. Its reference count doesn't drop to " +"zero. Fortunately, Python's cyclic garbage collector will eventually figure " +"out that the list is garbage and free it." +msgstr "" +"在这个例子中,我们创建了一个包含其自身的列表。 当我们删除它的时候,它将仍然具有一个来自其本身的引用。 它的引用计数并未降为零。 幸运的是,Python" +" 的循环垃圾回收器将最终发现该列表是无用的垃圾并释放它。" + +#: ../../extending/newtypes_tutorial.rst:675 +msgid "" +"In the second version of the :class:`Custom` example, we allowed any kind of" +" object to be stored in the :attr:`first` or :attr:`last` attributes [#]_. " +"Besides, in the second and third versions, we allowed subclassing " +":class:`Custom`, and subclasses may add arbitrary attributes. For any of " +"those two reasons, :class:`Custom` objects can participate in cycles:" +msgstr "" +"在 :class:`Custom` 示例的第二个版本中,我们允许任意各类的对象存储到 :attr:`first` 或 :attr:`last` 属性中 " +"[#]_。 此外,在第二个和第三个版本中,我们还允许子类化 :class:`Custom`,并且子类可以添加任意属性。 " +"出于这两个原因中的任何一个,:class:`Custom` 对象都可以加入循环:" + +#: ../../extending/newtypes_tutorial.rst:689 +msgid "" +"To allow a :class:`Custom` instance participating in a reference cycle to be" +" properly detected and collected by the cyclic GC, our :class:`Custom` type " +"needs to fill two additional slots and to enable a flag that enables these " +"slots:" +msgstr "" +"要允许一个参加引用循环的 :class:`Custom` 实例被循环 GC 正确地删除并回收,我们的 :class:`Custom` " +"类型需要填充两个额外槽位并增加启用这些槽位的旗标:" + +#: ../../extending/newtypes_tutorial.rst:696 +msgid "" +"First, the traversal method lets the cyclic GC know about subobjects that " +"could participate in cycles::" +msgstr "首先,遍历方法让循环 GC 知道能够参加循环的子对象::" + +#: ../../extending/newtypes_tutorial.rst:716 +msgid "" +"For each subobject that can participate in cycles, we need to call the " +":c:func:`visit` function, which is passed to the traversal method. The " +":c:func:`visit` function takes as arguments the subobject and the extra " +"argument *arg* passed to the traversal method. It returns an integer value " +"that must be returned if it is non-zero." +msgstr "" +"对于每个能够参加循环的子对象,我们需要调用 :c:func:`visit` 函数,向它传入该遍历方法。 :c:func:`visit` " +"函数接受该子对象作为参数并接受传给遍历方法的额外参数 *arg*。 它返回一个必须在非零时返回的整数值。" + +#: ../../extending/newtypes_tutorial.rst:722 +msgid "" +"Python provides a :c:func:`Py_VISIT` macro that automates calling visit " +"functions. With :c:func:`Py_VISIT`, we can minimize the amount of " +"boilerplate in ``Custom_traverse``::" +msgstr "" +"Python 提供了一个可自动调用 visit 函数的 :c:func:`Py_VISIT` 宏。 使用 " +":c:func:`Py_VISIT`,我们可以最小化 ``Custom_traverse`` 中的准备工作量::" + +#: ../../extending/newtypes_tutorial.rst:735 +msgid "" +"The :c:member:`~PyTypeObject.tp_traverse` implementation must name its " +"arguments exactly *visit* and *arg* in order to use :c:func:`Py_VISIT`." +msgstr "" +":c:member:`~PyTypeObject.tp_traverse` 实现必须将其参数准确命名为 *visit* 和 *arg* 以便使用 " +":c:func:`Py_VISIT`。" + +#: ../../extending/newtypes_tutorial.rst:738 +msgid "" +"Second, we need to provide a method for clearing any subobjects that can " +"participate in cycles::" +msgstr "第二,我们需要提供一个方法用来清除任何可以参加循环的子对象::" + +#: ../../extending/newtypes_tutorial.rst:749 +msgid "" +"Notice the use of the :c:func:`Py_CLEAR` macro. It is the recommended and " +"safe way to clear data attributes of arbitrary types while decrementing " +"their reference counts. If you were to call :c:func:`Py_XDECREF` instead on" +" the attribute before setting it to ``NULL``, there is a possibility that " +"the attribute's destructor would call back into code that reads the " +"attribute again (*especially* if there is a reference cycle)." +msgstr "" +"请注意 :c:func:`Py_CLEAR` 宏的使用。 它是清除任意类型的数据属性并减少其引用计数的推荐的且安全的方式。 如果你要选择在将属性设为 " +"``NULL`` 之间在属性上调用 :c:func:`Py_XDECREF`,则属性的析构器有可能会回调再次读取该属性的代码 (*特别是* " +"如果存在引用循环的话)。" + +#: ../../extending/newtypes_tutorial.rst:757 +msgid "You could emulate :c:func:`Py_CLEAR` by writing::" +msgstr "你可以通过以下写法来模拟 :c:func:`Py_CLEAR`::" + +#: ../../extending/newtypes_tutorial.rst:764 +msgid "" +"Nevertheless, it is much easier and less error-prone to always use " +":c:func:`Py_CLEAR` when deleting an attribute. Don't try to micro-optimize " +"at the expense of robustness!" +msgstr "" +"无论如何,在删除属性时始终使用Nevertheless, it is much easier and less error-prone to " +"always use :c:func:`Py_CLEAR` 都是更简单且更不易出错的。 请不要尝试以健壮性为代价的微小优化!" + +#: ../../extending/newtypes_tutorial.rst:768 +msgid "" +"The deallocator ``Custom_dealloc`` may call arbitrary code when clearing " +"attributes. It means the circular GC can be triggered inside the function. " +"Since the GC assumes reference count is not zero, we need to untrack the " +"object from the GC by calling :c:func:`PyObject_GC_UnTrack` before clearing " +"members. Here is our reimplemented deallocator using " +":c:func:`PyObject_GC_UnTrack` and ``Custom_clear``::" +msgstr "" +"释放器 ``Custom_dealloc`` 可能会在清除属性时调用任意代码。 这意味着循环 GC 可以在函数内部被触发。 由于 GC " +"预期引用计数不为零,我们需要通过调用 :c:func:`PyObject_GC_UnTrack` 来让 GC 停止追踪相关的对象。 下面是我们使用 " +":c:func:`PyObject_GC_UnTrack` 和 ``Custom_clear`` 重新实现的释放器::" + +#: ../../extending/newtypes_tutorial.rst:783 +msgid "" +"Finally, we add the :const:`Py_TPFLAGS_HAVE_GC` flag to the class flags::" +msgstr "最后,我们将 :const:`Py_TPFLAGS_HAVE_GC` 旗标添加到类旗标中::" + +#: ../../extending/newtypes_tutorial.rst:787 +msgid "" +"That's pretty much it. If we had written custom " +":c:member:`~PyTypeObject.tp_alloc` or :c:member:`~PyTypeObject.tp_free` " +"handlers, we'd need to modify them for cyclic garbage collection. Most " +"extensions will use the versions automatically provided." +msgstr "" +"这样就差不多了。 如果我们编写了自定义的 :c:member:`~PyTypeObject.tp_alloc` 或 " +":c:member:`~PyTypeObject.tp_free` 处理器,则我们需要针对循环垃圾回收来修改它。 大多数扩展都将使用自动提供的版本。" + +#: ../../extending/newtypes_tutorial.rst:793 +msgid "Subclassing other types" +msgstr "子类化其他类型" + +#: ../../extending/newtypes_tutorial.rst:795 +msgid "" +"It is possible to create new extension types that are derived from existing " +"types. It is easiest to inherit from the built in types, since an extension " +"can easily use the :c:type:`PyTypeObject` it needs. It can be difficult to " +"share these :c:type:`PyTypeObject` structures between extension modules." +msgstr "" +"创建派生自现有类型的新类型是有可能的。 最容易的做法是从内置类型继承,因为扩展可以方便地使用它所需要的 :c:type:`PyTypeObject`。 " +"在不同扩展模块之间共享这些 :c:type:`PyTypeObject` 结构体则是困难的。" + +#: ../../extending/newtypes_tutorial.rst:800 +msgid "" +"In this example we will create a :class:`SubList` type that inherits from " +"the built-in :class:`list` type. The new type will be completely compatible " +"with regular lists, but will have an additional :meth:`increment` method " +"that increases an internal counter:" +msgstr "" +"在这个例子中我们将创建一个继承自内置 :class:`list` 类型的 :class:`SubList` 类型。 " +"这个新类型将完全兼容常规列表,但将拥有一个额外的 :meth:`increment` 来增加内部计数器的值:" + +#: ../../extending/newtypes_tutorial.rst:820 +msgid "" +"As you can see, the source code closely resembles the :class:`Custom` " +"examples in previous sections. We will break down the main differences " +"between them. ::" +msgstr "如你所见,此源代码与之前小节中的 :class:`Custom` 示例非常相似。 我们将逐一讲解它们之间的主要区别。 ::" + +#: ../../extending/newtypes_tutorial.rst:828 +msgid "" +"The primary difference for derived type objects is that the base type's " +"object structure must be the first value. The base type will already " +"include the :c:func:`PyObject_HEAD` at the beginning of its structure." +msgstr "" +"派生类型对象的主要差异在于基类型的对象结构体必须是第一个值。 基类型将已经在其结构体的开头包括了 :c:func:`PyObject_HEAD`。" + +#: ../../extending/newtypes_tutorial.rst:832 +msgid "" +"When a Python object is a :class:`SubList` instance, its ``PyObject *`` " +"pointer can be safely cast to both ``PyListObject *`` and ``SubListObject " +"*``::" +msgstr "" +"当一个 Python 对象是 :class:`SubList` 的实例时,它的 ``PyObject *`` 指针可以被安全地强制转换为 " +"``PyListObject *`` 和 ``SubListObject *``::" + +#: ../../extending/newtypes_tutorial.rst:844 +msgid "" +"We see above how to call through to the :attr:`__init__` method of the base " +"type." +msgstr "我们可以在上面看到如何调用至基类型的 :attr:`__init__` 方法。" + +#: ../../extending/newtypes_tutorial.rst:847 +msgid "" +"This pattern is important when writing a type with custom " +":c:member:`~PyTypeObject.tp_new` and :c:member:`~PyTypeObject.tp_dealloc` " +"members. The :c:member:`~PyTypeObject.tp_new` handler should not actually " +"create the memory for the object with its " +":c:member:`~PyTypeObject.tp_alloc`, but let the base class handle it by " +"calling its own :c:member:`~PyTypeObject.tp_new`." +msgstr "" +"这个模式在编写具有自定义 :c:member:`~PyTypeObject.tp_new` 和 " +":c:member:`~PyTypeObject.tp_dealloc` 成员的类型时很重要。 " +":c:member:`~PyTypeObject.tp_new` 处理器不应为具有 :c:member:`~PyTypeObject.tp_alloc`" +" 的对象实际分配内存,而是让基类通过调用自己的 :c:member:`~PyTypeObject.tp_new` 来处理它。" + +#: ../../extending/newtypes_tutorial.rst:853 +msgid "" +"The :c:type:`PyTypeObject` struct supports a " +":c:member:`~PyTypeObject.tp_base` specifying the type's concrete base class." +" Due to cross-platform compiler issues, you can't fill that field directly " +"with a reference to :c:type:`PyList_Type`; it should be done later in the " +"module initialization function::" +msgstr "" +":c:type:`PyTypeObject` 支持用 :c:member:`~PyTypeObject.tp_base` 指定类型的实体基类。 " +"由于跨平台编译器问题,你无法使用对 :c:type:`PyList_Type` 的引用来直接填充该字段;它应当随后在模块初始化函数中完成::" + +#: ../../extending/newtypes_tutorial.rst:881 +msgid "" +"Before calling :c:func:`PyType_Ready`, the type structure must have the " +":c:member:`~PyTypeObject.tp_base` slot filled in. When we are deriving an " +"existing type, it is not necessary to fill out the " +":c:member:`~PyTypeObject.tp_alloc` slot with :c:func:`PyType_GenericNew` -- " +"the allocation function from the base type will be inherited." +msgstr "" +"在调用 :c:func:`PyType_Ready` 之前,类型结构体必须已经填充 :c:member:`~PyTypeObject.tp_base` " +"槽位。 当我们从现有类型派生时,它不需要将 :c:member:`~PyTypeObject.tp_alloc` 槽位填充为 " +":c:func:`PyType_GenericNew` -- 来自基类型的分配函数将会被继承。" + +#: ../../extending/newtypes_tutorial.rst:887 +msgid "" +"After that, calling :c:func:`PyType_Ready` and adding the type object to the" +" module is the same as with the basic :class:`Custom` examples." +msgstr "在那之后,调用 :c:func:`PyType_Ready` 并向模块添加类型对象是与基本的 :class:`Custom` 示例一样的。" + +#: ../../extending/newtypes_tutorial.rst:892 +msgid "Footnotes" +msgstr "备注" + +#: ../../extending/newtypes_tutorial.rst:893 +msgid "" +"This is true when we know that the object is a basic type, like a string or " +"a float." +msgstr "当我们知道该对象属于基本类型,如字符串或浮点数时情况就是如此。" + +#: ../../extending/newtypes_tutorial.rst:896 +msgid "" +"We relied on this in the :c:member:`~PyTypeObject.tp_dealloc` handler in " +"this example, because our type doesn't support garbage collection." +msgstr "" +"在本示例中我们需要 :c:member:`~PyTypeObject.tp_dealloc` 处理器中的这一机制,因为我们的类型不支持垃圾回收。" + +#: ../../extending/newtypes_tutorial.rst:899 +msgid "" +"We now know that the first and last members are strings, so perhaps we could" +" be less careful about decrementing their reference counts, however, we " +"accept instances of string subclasses. Even though deallocating normal " +"strings won't call back into our objects, we can't guarantee that " +"deallocating an instance of a string subclass won't call back into our " +"objects." +msgstr "" +"现在我们知道 first 和 last 成员都是字符串,因此也许我们可以对减少它们的引用计数不必太过小心,但是,我们还接受字符串子类的实例。 " +"即使释放普通字符串不会对我们的对象执行回调,我们也不能保证释放一个字符串子类的实例不会对我们的对象执行回调。" + +#: ../../extending/newtypes_tutorial.rst:905 +msgid "" +"Also, even with our attributes restricted to strings instances, the user " +"could pass arbitrary :class:`str` subclasses and therefore still create " +"reference cycles." +msgstr "而且,即使是将我们的属性限制为字符串实例,用户还是可以传入任意 :class:`str` 子类因而仍能造成引用循环。" diff --git a/extending/windows.po b/extending/windows.po new file mode 100644 index 000000000..df73375f8 --- /dev/null +++ b/extending/windows.po @@ -0,0 +1,237 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) 2001-2022, Python Software Foundation +# This file is distributed under the same license as the Python package. +# FIRST AUTHOR , YEAR. +# +# Translators: +# Freesand Leo , 2020 +# Alpha Du , 2022 +# +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: Python 3.9\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2022-11-04 14:34+0000\n" +"PO-Revision-Date: 2017-02-16 17:42+0000\n" +"Last-Translator: Alpha Du , 2022\n" +"Language-Team: Chinese (China) (https://www.transifex.com/python-doc/teams/5390/zh_CN/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: zh_CN\n" +"Plural-Forms: nplurals=1; plural=0;\n" + +#: ../../extending/windows.rst:8 +msgid "Building C and C++ Extensions on Windows" +msgstr "在 Windows 上构建 C 和 C++ 扩展" + +#: ../../extending/windows.rst:10 +msgid "" +"This chapter briefly explains how to create a Windows extension module for " +"Python using Microsoft Visual C++, and follows with more detailed background" +" information on how it works. The explanatory material is useful for both " +"the Windows programmer learning to build Python extensions and the Unix " +"programmer interested in producing software which can be successfully built " +"on both Unix and Windows." +msgstr "" +"这一章简要介绍了如何使用 Microsoft Visual C++ 创建 Python 的 Windows " +"扩展模块,然后再提供有关其工作机理的详细背景信息。 这些说明材料同时适用于 Windows 程序员学习构建 Python 扩展以及 Unix " +"程序员学习如何生成在 Unix 和 Windows 上均能成功构建的软件。" + +#: ../../extending/windows.rst:17 +msgid "" +"Module authors are encouraged to use the distutils approach for building " +"extension modules, instead of the one described in this section. You will " +"still need the C compiler that was used to build Python; typically Microsoft" +" Visual C++." +msgstr "" +"鼓励模块作者使用 distutils 方式来构建扩展模块,而不使用本节所描述的方式。 你仍将需要使用 C 编译器来构建 Python;通常为 " +"Microsoft Visual C++。" + +#: ../../extending/windows.rst:24 +msgid "" +"This chapter mentions a number of filenames that include an encoded Python " +"version number. These filenames are represented with the version number " +"shown as ``XY``; in practice, ``'X'`` will be the major version number and " +"``'Y'`` will be the minor version number of the Python release you're " +"working with. For example, if you are using Python 2.2.1, ``XY`` will " +"actually be ``22``." +msgstr "" +"这一章提及了多个包括已编码 Python 版本号的文件名。 这些文件名以显示为 ``XY`` 的版本号来代表;在实践中,``'X'`` 将为你所使用的 " +"Python 发布版的主版本号而 ``'Y'`` 将为次版本号。 例如,如果你所使用的是 Python 2.2.1,``XY`` 将为 ``22``。" + +#: ../../extending/windows.rst:34 +msgid "A Cookbook Approach" +msgstr "菜谱式说明" + +#: ../../extending/windows.rst:36 +msgid "" +"There are two approaches to building extension modules on Windows, just as " +"there are on Unix: use the :mod:`distutils` package to control the build " +"process, or do things manually. The distutils approach works well for most " +"extensions; documentation on using :mod:`distutils` to build and package " +"extension modules is available in :ref:`distutils-index`. If you find you " +"really need to do things manually, it may be instructive to study the " +"project file for the :source:`winsound ` standard " +"library module." +msgstr "" +"在 Windows 和 Unix 上构建扩展模块都有两种方式:使用 :mod:`distutils` 包来控制构建过程,或者全手动操作。 " +"distutils 方式适用于大多数扩展;使用 :mod:`distutils` 构建和打包扩展模块的文档见 :ref:`distutils-" +"index`。 如果你发现你确实需要手动操作,那么研究一下 :source:`winsound ` " +"标准库模块的项目文件可能会很有帮助。" + +#: ../../extending/windows.rst:48 +msgid "Differences Between Unix and Windows" +msgstr "Unix 和 Windows 之间的差异" + +#: ../../extending/windows.rst:53 +msgid "" +"Unix and Windows use completely different paradigms for run-time loading of " +"code. Before you try to build a module that can be dynamically loaded, be " +"aware of how your system works." +msgstr "" +"Unix 和 Windows 对于代码的运行时加载使用了完全不同的范式。 在你尝试构建可动态加载的模块之前,要先了解你所用系统是如何工作的。" + +#: ../../extending/windows.rst:57 +msgid "" +"In Unix, a shared object (:file:`.so`) file contains code to be used by the " +"program, and also the names of functions and data that it expects to find in" +" the program. When the file is joined to the program, all references to " +"those functions and data in the file's code are changed to point to the " +"actual locations in the program where the functions and data are placed in " +"memory. This is basically a link operation." +msgstr "" +"在 Unix 中,一个共享对象 (:file:`.so`) 文件中包含将由程序来使用的代码,也包含在程序中可被找到的函数名称和数据。 " +"当文件被合并到程序中时,对在文件代码中这些函数和数据的全部引用都会被改为指向程序中函数和数据在内存中所放置的实际位置。 这基本上是一个链接操作。" + +#: ../../extending/windows.rst:64 +msgid "" +"In Windows, a dynamic-link library (:file:`.dll`) file has no dangling " +"references. Instead, an access to functions or data goes through a lookup " +"table. So the DLL code does not have to be fixed up at runtime to refer to " +"the program's memory; instead, the code already uses the DLL's lookup table," +" and the lookup table is modified at runtime to point to the functions and " +"data." +msgstr "" +"在 Windows 中,一个动态链接库 (:file:`.dll`) 文件中没有悬挂的引用。 而是通过一个查找表执行对函数或数据的访问。 因此在运行时 " +"DLL 代码不必在运行时进行修改;相反地,代码已经使用了 DLL 的查找表,并且在运行时查找表会被修改以指向特定的函数和数据。" + +#: ../../extending/windows.rst:70 +msgid "" +"In Unix, there is only one type of library file (:file:`.a`) which contains " +"code from several object files (:file:`.o`). During the link step to create" +" a shared object file (:file:`.so`), the linker may find that it doesn't " +"know where an identifier is defined. The linker will look for it in the " +"object files in the libraries; if it finds it, it will include all the code " +"from that object file." +msgstr "" +"在 Unix 中,只存在一种库文件 (:file:`.a`),它包含来自多个对象文件 (:file:`.o`) 的代码。 在创建共享对象文件 " +"(:file:`.so`) 的链接阶段,链接器可能会发现它不知道某个标识符是在哪里定义的。 " +"链接器将在各个库的对象文件中查找它;如果找到了它,链接器将会包括来自该对象文件的所有代码。" + +#: ../../extending/windows.rst:76 +msgid "" +"In Windows, there are two types of library, a static library and an import " +"library (both called :file:`.lib`). A static library is like a Unix " +":file:`.a` file; it contains code to be included as necessary. An import " +"library is basically used only to reassure the linker that a certain " +"identifier is legal, and will be present in the program when the DLL is " +"loaded. So the linker uses the information from the import library to build" +" the lookup table for using identifiers that are not included in the DLL. " +"When an application or a DLL is linked, an import library may be generated, " +"which will need to be used for all future DLLs that depend on the symbols in" +" the application or DLL." +msgstr "" +"在 Windows 中,存在两种库类型,静态库和导入库 (扩展名都是 :file:`.lib`)。 静态库类似于 Unix 的 :file:`.a` " +"文件;它包含在必要时可被包括的代码。 导入库基本上仅用于让链接器能确保特定标识符是合法的,并且将在 DLL 被加载时出现于程序中。 " +"这样链接器可使用来自导入库的信息构建查找表以便使用未包括在 DLL 中的标识符。 当一个应用程序或 DLL " +"被链接时,可能会生成一个导入库,它将需要被用于应用程序或 DLL 中未来所有依赖于这些符号的 DLL。" + +#: ../../extending/windows.rst:86 +msgid "" +"Suppose you are building two dynamic-load modules, B and C, which should " +"share another block of code A. On Unix, you would *not* pass :file:`A.a` to" +" the linker for :file:`B.so` and :file:`C.so`; that would cause it to be " +"included twice, so that B and C would each have their own copy. In Windows," +" building :file:`A.dll` will also build :file:`A.lib`. You *do* pass " +":file:`A.lib` to the linker for B and C. :file:`A.lib` does not contain " +"code; it just contains information which will be used at runtime to access " +"A's code." +msgstr "" +"假设你正在编译两个动态加载模块 B 和 C,它们应当共享另一个代码块 A。 在 Unix 上,你 *不应* 将 :file:`A.a` 传给链接器作为 " +":file:`B.so` 和 :file:`C.so`;那会导致它被包括两次,这样 B 和 C 将分别拥有它们自己的副本。 在 Windows 上,编译" +" :file:`A.dll` 将同时编译 :file:`A.lib`。 你 *应当* 将 :file:`A.lib` 传给链接器用于 B 和 C。 " +":file:`A.lib` 并不包含代码;它只包含将在运行时被用于访问 A 的代码的信息。" + +#: ../../extending/windows.rst:94 +msgid "" +"In Windows, using an import library is sort of like using ``import spam``; " +"it gives you access to spam's names, but does not create a separate copy. " +"On Unix, linking with a library is more like ``from spam import *``; it does" +" create a separate copy." +msgstr "" +"在 Windows 上,使用导入库有点像是使用 ``import spam``;它让你可以访问 spam 中的名称,但并不会创建一个单独副本。 在 " +"Unix 上,链接到一个库更像是 ``from spam import *``;它会创建一个单独副本。" + +#: ../../extending/windows.rst:103 +msgid "Using DLLs in Practice" +msgstr "DLL 的实际使用" + +#: ../../extending/windows.rst:108 +msgid "" +"Windows Python is built in Microsoft Visual C++; using other compilers may " +"or may not work. The rest of this section is MSVC++ specific." +msgstr "" +"Windows Python 是在 Microsoft Visual C++ 中构建的;使用其他编译器可能会也可能不会工作。本节的其余部分是针对 " +"MSVC++ 的。" + +#: ../../extending/windows.rst:111 +msgid "" +"When creating DLLs in Windows, you must pass :file:`pythonXY.lib` to the " +"linker. To build two DLLs, spam and ni (which uses C functions found in " +"spam), you could use these commands::" +msgstr "" +"当在 Windows 中创建 DLL 时,你必须将 :file:`pythonXY.lib` 传给链接器。 要编译两个 DLL,spam 和 ni " +"(会使用 spam 中找到的 C 函数),你应当使用以下命令::" + +#: ../../extending/windows.rst:118 +msgid "" +"The first command created three files: :file:`spam.obj`, :file:`spam.dll` " +"and :file:`spam.lib`. :file:`Spam.dll` does not contain any Python " +"functions (such as :c:func:`PyArg_ParseTuple`), but it does know how to find" +" the Python code thanks to :file:`pythonXY.lib`." +msgstr "" +"第一条命令创建了三个文件: :file:`spam.obj`, :file:`spam.dll` 和 :file:`spam.lib`。 " +":file:`Spam.dll` 不包含任何 Python 函数 (例如 :c:func:`PyArg_ParseTuple`),但它通过 " +":file:`pythonXY.lib` 可以知道如何找到所需的 Python 代码。" + +#: ../../extending/windows.rst:123 +msgid "" +"The second command created :file:`ni.dll` (and :file:`.obj` and " +":file:`.lib`), which knows how to find the necessary functions from spam, " +"and also from the Python executable." +msgstr "" +"第二条命令创建了 :file:`ni.dll` (以及 :file:`.obj` 和 :file:`.lib`),它知道如何从 spam 以及 " +"Python 可执行文件中找到所需的函数。" + +#: ../../extending/windows.rst:127 +msgid "" +"Not every identifier is exported to the lookup table. If you want any other" +" modules (including Python) to be able to see your identifiers, you have to " +"say ``_declspec(dllexport)``, as in ``void _declspec(dllexport) " +"initspam(void)`` or ``PyObject _declspec(dllexport) *NiGetSpamData(void)``." +msgstr "" +"不是每个标识符都会被导出到查找表。 如果你想要任何其他模块(包括 Python)都能看到你的标识符,你必须写上 " +"``_declspec(dllexport)``,就如在 ``void _declspec(dllexport) initspam(void)`` 或 " +"``PyObject _declspec(dllexport) *NiGetSpamData(void)`` 中一样。" + +#: ../../extending/windows.rst:132 +msgid "" +"Developer Studio will throw in a lot of import libraries that you do not " +"really need, adding about 100K to your executable. To get rid of them, use " +"the Project Settings dialog, Link tab, to specify *ignore default " +"libraries*. Add the correct :file:`msvcrtxx.lib` to the list of libraries." +msgstr "" +"Developer Studio 将加入大量你并不真正需要的导入库,使你的可执行文件大小增加 100K。 " +"要摆脱它们,请使用项目设置对话框的链接选项卡指定 *忽略默认库*。 将正确的 :file:`msvcrtxx.lib` 添加到库列表中。" diff --git a/faq/design.po b/faq/design.po new file mode 100644 index 000000000..e40e07f1e --- /dev/null +++ b/faq/design.po @@ -0,0 +1,1131 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) 2001-2024, Python Software Foundation +# This file is distributed under the same license as the Python package. +# FIRST AUTHOR , YEAR. +# +# Translators: +# ww song , 2018 +# Shengjing Zhu , 2019 +# ppcfish , 2019 +# Alpha Du , 2022 +# Freesand Leo , 2024 +# Rafael Fontenelle , 2024 +# +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: Python 3.9\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2024-05-11 20:32+0000\n" +"PO-Revision-Date: 2017-02-16 17:42+0000\n" +"Last-Translator: Rafael Fontenelle , 2024\n" +"Language-Team: Chinese (China) (https://app.transifex.com/python-doc/teams/5390/zh_CN/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: zh_CN\n" +"Plural-Forms: nplurals=1; plural=0;\n" + +#: ../../faq/design.rst:3 +msgid "Design and History FAQ" +msgstr "设计和历史常见问题" + +#: ../../faq/design.rst:6 +msgid "Contents" +msgstr "目录" + +#: ../../faq/design.rst:11 +msgid "Why does Python use indentation for grouping of statements?" +msgstr "为什么 Python 使用缩进来分组语句?" + +#: ../../faq/design.rst:13 +msgid "" +"Guido van Rossum believes that using indentation for grouping is extremely " +"elegant and contributes a lot to the clarity of the average Python program. " +"Most people learn to love this feature after a while." +msgstr "" +"Guido van Rossum 认为使用缩进进行分组非常优雅,并且大大提高了普通 Python 程序的清晰度。 " +"大多数人在一段时间后就会喜欢上这个特性。" + +#: ../../faq/design.rst:17 +msgid "" +"Since there are no begin/end brackets there cannot be a disagreement between" +" grouping perceived by the parser and the human reader. Occasionally C " +"programmers will encounter a fragment of code like this::" +msgstr "由于没有开始/结束括号,因此解析器感知的分组与人类读者之间不会存在分歧。 偶尔 C 程序员会遇到像这样的代码片段::" + +#: ../../faq/design.rst:26 +msgid "" +"Only the ``x++`` statement is executed if the condition is true, but the " +"indentation leads many to believe otherwise. Even experienced C programmers" +" will sometimes stare at it a long time wondering as to why ``y`` is being " +"decremented even for ``x > y``." +msgstr "" +"如果条件为真,则只执行 ``x++`` 语句,但缩进会使你认为情况并非如此。 即使是经验丰富的 C 程序员有时也会长久地盯着它发呆,不明白为什么在 " +"``x > y`` 时 ``y`` 也会减少。" + +#: ../../faq/design.rst:31 +msgid "" +"Because there are no begin/end brackets, Python is much less prone to " +"coding-style conflicts. In C there are many different ways to place the " +"braces. After becoming used to reading and writing code using a particular " +"style, it is normal to feel somewhat uneasy when reading (or being required " +"to write) in a different one." +msgstr "" +"因为没有开始/结束花括号,所以 Python 更不容易发生代码风格冲突。 在 C 中有许多不同的放置花括号的方式。 " +"在习惯了阅读和编写某种特定风格的代码之后,当阅读(或被要求编写)另一种风格的代码时通常都会令人感觉有点不舒服)。" + +#: ../../faq/design.rst:38 +msgid "" +"Many coding styles place begin/end brackets on a line by themselves. This " +"makes programs considerably longer and wastes valuable screen space, making " +"it harder to get a good overview of a program. Ideally, a function should " +"fit on one screen (say, 20--30 lines). 20 lines of Python can do a lot more" +" work than 20 lines of C. This is not solely due to the lack of begin/end " +"brackets -- the lack of declarations and the high-level data types are also " +"responsible -- but the indentation-based syntax certainly helps." +msgstr "" +"许多编码风格将开始/结束括号单独放在一行上。这使得程序相当长,浪费了宝贵的屏幕空间,使得更难以对程序进行全面的了解。 " +"理想情况下,函数应该适合一个屏幕(例如,20--30行)。 20 行 Python 可以完成比 20 行 C 更多的工作。 " +"这不仅仅是由于没有开始/结束括号 -- 无需声明以及高层级的数据类型也是其中的原因 -- 但基于缩进的语法肯定有帮助。" + +#: ../../faq/design.rst:48 +msgid "Why am I getting strange results with simple arithmetic operations?" +msgstr "为什么简单的算术运算得到奇怪的结果?" + +#: ../../faq/design.rst:50 +msgid "See the next question." +msgstr "请看下一个问题。" + +#: ../../faq/design.rst:54 +msgid "Why are floating-point calculations so inaccurate?" +msgstr "为什么浮点计算不准确?" + +#: ../../faq/design.rst:56 +msgid "Users are often surprised by results like this::" +msgstr "用户经常对这样的结果感到惊讶::" + +#: ../../faq/design.rst:61 +msgid "" +"and think it is a bug in Python. It's not. This has little to do with " +"Python, and much more to do with how the underlying platform handles " +"floating-point numbers." +msgstr "并且认为这是 Python 中的一个 bug。其实不是这样。这与 Python 关系不大,而与底层平台如何处理浮点数字关系更大。" + +#: ../../faq/design.rst:65 +msgid "" +"The :class:`float` type in CPython uses a C ``double`` for storage. A " +":class:`float` object's value is stored in binary floating-point with a " +"fixed precision (typically 53 bits) and Python uses C operations, which in " +"turn rely on the hardware implementation in the processor, to perform " +"floating-point operations. This means that as far as floating-point " +"operations are concerned, Python behaves like many popular languages " +"including C and Java." +msgstr "" +"CPython 中的 :class:`float` 类型使用C语言的 ``double`` 类型进行存储。 :class:`float` " +"对象的值是以固定的精度(通常为 53 位)存储的二进制浮点数,由于 Python 使用 C 操作,而后者依赖于处理器中的硬件实现来执行浮点运算。 " +"这意味着就浮点运算而言,Python 的行为类似于许多流行的语言,包括 C 和 Java。" + +#: ../../faq/design.rst:72 +msgid "" +"Many numbers that can be written easily in decimal notation cannot be " +"expressed exactly in binary floating-point. For example, after::" +msgstr "许多可以轻松地用十进制表示的数字不能用二进制浮点表示。例如,在输入以下语句后::" + +#: ../../faq/design.rst:77 +msgid "" +"the value stored for ``x`` is a (very good) approximation to the decimal " +"value ``1.2``, but is not exactly equal to it. On a typical machine, the " +"actual stored value is::" +msgstr "为 ``x`` 存储的值是与十进制的值 ``1.2`` (非常接近) 的近似值,但不完全等于它。 在典型的机器上,实际存储的值是:" + +#: ../../faq/design.rst:83 +msgid "which is exactly::" +msgstr "它对应于十进制数值::" + +#: ../../faq/design.rst:87 +msgid "" +"The typical precision of 53 bits provides Python floats with 15--16 decimal " +"digits of accuracy." +msgstr "典型的 53 位精度为 Python 浮点数提供了 15-16 位小数的精度。" + +#: ../../faq/design.rst:90 +msgid "" +"For a fuller explanation, please see the :ref:`floating point arithmetic " +"` chapter in the Python tutorial." +msgstr "要获得更完整的解释,请参阅 Python 教程中的 :ref:`浮点算术 ` 一章。" + +#: ../../faq/design.rst:95 +msgid "Why are Python strings immutable?" +msgstr "为什么Python字符串是不可变的?" + +#: ../../faq/design.rst:97 +msgid "There are several advantages." +msgstr "有几个优点。" + +#: ../../faq/design.rst:99 +msgid "" +"One is performance: knowing that a string is immutable means we can allocate" +" space for it at creation time, and the storage requirements are fixed and " +"unchanging. This is also one of the reasons for the distinction between " +"tuples and lists." +msgstr "一个是性能:知道字符串是不可变的,意味着我们可以在创建时为它分配空间,并且存储需求是固定不变的。这也是元组和列表之间区别的原因之一。" + +#: ../../faq/design.rst:104 +msgid "" +"Another advantage is that strings in Python are considered as \"elemental\" " +"as numbers. No amount of activity will change the value 8 to anything else," +" and in Python, no amount of activity will change the string \"eight\" to " +"anything else." +msgstr "" +"另一个优点是,Python 中的字符串被视为与数字一样“基本”。 任何动作都不会将值 8 更改为其他值,在 Python 中,任何动作都不会将字符串 " +"\"8\" 更改为其他值。" + +#: ../../faq/design.rst:112 +msgid "Why must 'self' be used explicitly in method definitions and calls?" +msgstr "为什么必须在方法定义和调用中显式使用“self”?" + +#: ../../faq/design.rst:114 +msgid "" +"The idea was borrowed from Modula-3. It turns out to be very useful, for a " +"variety of reasons." +msgstr "这个想法借鉴了 Modula-3 语言。 出于多种原因它被证明是非常有用的。" + +#: ../../faq/design.rst:117 +msgid "" +"First, it's more obvious that you are using a method or instance attribute " +"instead of a local variable. Reading ``self.x`` or ``self.meth()`` makes it" +" absolutely clear that an instance variable or method is used even if you " +"don't know the class definition by heart. In C++, you can sort of tell by " +"the lack of a local variable declaration (assuming globals are rare or " +"easily recognizable) -- but in Python, there are no local variable " +"declarations, so you'd have to look up the class definition to be sure. " +"Some C++ and Java coding standards call for instance attributes to have an " +"``m_`` prefix, so this explicitness is still useful in those languages, too." +msgstr "" +"首先,更明显的显示出,使用的是方法或实例属性而不是局部变量。 阅读 ``self.x`` 或 ``self.meth()`` " +"可以清楚地表明,即使您不知道类的定义,也会使用实例变量或方法。在 C++ 中,可以通过缺少局部变量声明来判断(假设全局变量很少见或容易识别) —— " +"但是在 Python 中没有局部变量声明,所以必须查找类定义才能确定。 一些 C++ 和 Java 编码标准要求实例属性具有 ``m_`` " +"前缀,因此这种显式性在这些语言中仍然有用。" + +#: ../../faq/design.rst:127 +msgid "" +"Second, it means that no special syntax is necessary if you want to " +"explicitly reference or call the method from a particular class. In C++, if" +" you want to use a method from a base class which is overridden in a derived" +" class, you have to use the ``::`` operator -- in Python you can write " +"``baseclass.methodname(self, )``. This is particularly " +"useful for :meth:`__init__` methods, and in general in cases where a derived" +" class method wants to extend the base class method of the same name and " +"thus has to call the base class method somehow." +msgstr "" +"其次,这意味着如果要显式引用或从特定类调用该方法,不需要特殊语法。 在 C++ 中,如果你想使用在派生类中重写基类中的方法,你必须使用 ``::`` " +"运算符 -- 在 Python 中你可以编写 ``baseclass.methodname(self, )``。 这对于 " +":meth:`__init__` 方法非常有用,特别是在派生类方法想要扩展同名的基类方法,而必须以某种方式调用基类方法时。" + +#: ../../faq/design.rst:136 +msgid "" +"Finally, for instance variables it solves a syntactic problem with " +"assignment: since local variables in Python are (by definition!) those " +"variables to which a value is assigned in a function body (and that aren't " +"explicitly declared global), there has to be some way to tell the " +"interpreter that an assignment was meant to assign to an instance variable " +"instead of to a local variable, and it should preferably be syntactic (for " +"efficiency reasons). C++ does this through declarations, but Python doesn't" +" have declarations and it would be a pity having to introduce them just for " +"this purpose. Using the explicit ``self.var`` solves this nicely. " +"Similarly, for using instance variables, having to write ``self.var`` means " +"that references to unqualified names inside a method don't have to search " +"the instance's directories. To put it another way, local variables and " +"instance variables live in two different namespaces, and you need to tell " +"Python which namespace to use." +msgstr "" +"最后,它解决了变量赋值的语法问题:为了 Python " +"中的局部变量(根据定义!)在函数体中赋值的那些变量(并且没有明确声明为全局)赋值,就必须以某种方式告诉解释器一个赋值是为了分配一个实例变量而不是一个局部变量,它最好是通过语法实现的(出于效率原因)。" +" C++ 通过声明来做到这一点,但是 Python 没有声明,仅仅为了这个目的而引入它们会很可惜。 使用显式的 ``self.var`` " +"很好地解决了这个问题。 类似地,对于使用实例变量,必须编写 ``self.var`` 意味着对方法内部的非限定名称的引用不必搜索实例的目录。 " +"换句话说,局部变量和实例变量存在于两个不同的命名空间中,您需要告诉 Python 使用哪个命名空间。" + +#: ../../faq/design.rst:154 +msgid "Why can't I use an assignment in an expression?" +msgstr "为什么不能在表达式中赋值?" + +#: ../../faq/design.rst:156 +msgid "Starting in Python 3.8, you can!" +msgstr "自 Python 3.8 开始,你能做到的!" + +#: ../../faq/design.rst:158 +msgid "" +"Assignment expressions using the walrus operator `:=` assign a variable in " +"an expression::" +msgstr "赋值表达式使用海象运算符 `:=` 在表达式中为变量赋值::" + +#: ../../faq/design.rst:164 +msgid "See :pep:`572` for more information." +msgstr "请参阅 :pep:`572` 了解详情。" + +#: ../../faq/design.rst:169 +msgid "" +"Why does Python use methods for some functionality (e.g. list.index()) but " +"functions for other (e.g. len(list))?" +msgstr "为什么Python对某些功能(例如list.index())使用方法来实现,而其他功能(例如len(List))使用函数实现?" + +#: ../../faq/design.rst:171 +msgid "As Guido said:" +msgstr "正如Guido所说:" + +#: ../../faq/design.rst:173 +msgid "" +"(a) For some operations, prefix notation just reads better than postfix -- " +"prefix (and infix!) operations have a long tradition in mathematics which " +"likes notations where the visuals help the mathematician thinking about a " +"problem. Compare the easy with which we rewrite a formula like x*(a+b) into " +"x*a + x*b to the clumsiness of doing the same thing using a raw OO notation." +msgstr "" +"(a) 对于某些操作,前缀表示法比后缀更容易阅读 -- 前缀(和中缀!)运算在数学中有着悠久的传统,就像在视觉上帮助数学家思考问题的记法。比较一下我们将" +" x*(a+b) 这样的公式改写为 x*a+x*b 的容易程度,以及使用原始OO符号做相同事情的笨拙程度。" + +#: ../../faq/design.rst:180 +msgid "" +"(b) When I read code that says len(x) I *know* that it is asking for the " +"length of something. This tells me two things: the result is an integer, and" +" the argument is some kind of container. To the contrary, when I read " +"x.len(), I have to already know that x is some kind of container " +"implementing an interface or inheriting from a class that has a standard " +"len(). Witness the confusion we occasionally have when a class that is not " +"implementing a mapping has a get() or keys() method, or something that isn't" +" a file has a write() method." +msgstr "" +"(b) " +"当读到写有len(X)的代码时,就知道它要求的是某件东西的长度。这告诉我们两件事:结果是一个整数,参数是某种容器。相反,当阅读x.len()时,必须已经知道x是某种实现接口的容器,或者是从具有标准len()的类继承的容器。当没有实现映射的类有get()或key()方法,或者不是文件的类有write()方法时,我们偶尔会感到困惑。" + +#: ../../faq/design.rst:207 +msgid "" +"https://mail.python.org/pipermail/python-3000/2006-November/004643.html" +msgstr "" +"https://mail.python.org/pipermail/python-3000/2006-November/004643.html" + +#: ../../faq/design.rst:193 +msgid "Why is join() a string method instead of a list or tuple method?" +msgstr "为什么 join() 是一个字符串方法而不是列表或元组方法?" + +#: ../../faq/design.rst:195 +msgid "" +"Strings became much more like other standard types starting in Python 1.6, " +"when methods were added which give the same functionality that has always " +"been available using the functions of the string module. Most of these new " +"methods have been widely accepted, but the one which appears to make some " +"programmers feel uncomfortable is::" +msgstr "" +"从 Python 1.6 开始,字符串变得更像其他标准类型,当添加方法时,这些方法提供的功能与始终使用 String " +"模块的函数时提供的功能相同。这些新方法中的大多数已被广泛接受,但似乎让一些程序员感到不舒服的一种方法是:" + +#: ../../faq/design.rst:203 +msgid "which gives the result::" +msgstr "结果如下::" + +#: ../../faq/design.rst:207 +msgid "There are two common arguments against this usage." +msgstr "反对这种用法有两个常见的论点。" + +#: ../../faq/design.rst:209 +msgid "" +"The first runs along the lines of: \"It looks really ugly using a method of " +"a string literal (string constant)\", to which the answer is that it might, " +"but a string literal is just a fixed value. If the methods are to be allowed" +" on names bound to strings there is no logical reason to make them " +"unavailable on literals." +msgstr "" +"第一条是这样的:“使用字符串文本(String " +"Constant)的方法看起来真的很难看”,答案是也许吧,但是字符串文本只是一个固定值。如果在绑定到字符串的名称上允许使用这些方法,则没有逻辑上的理由使其在文字上不可用。" + +#: ../../faq/design.rst:215 +msgid "" +"The second objection is typically cast as: \"I am really telling a sequence " +"to join its members together with a string constant\". Sadly, you aren't. " +"For some reason there seems to be much less difficulty with having " +":meth:`~str.split` as a string method, since in that case it is easy to see " +"that ::" +msgstr "" +"第二个异议通常是这样的:“我实际上是在告诉序列使用字符串常量将其成员连接在一起”。遗憾的是并非如此。出于某种原因,把 " +":meth:`~str.split` 作为一个字符串方法似乎要容易得多,因为在这种情况下,很容易看到::" + +#: ../../faq/design.rst:222 +msgid "" +"is an instruction to a string literal to return the substrings delimited by " +"the given separator (or, by default, arbitrary runs of white space)." +msgstr "是对字符串文本的指令,用于返回由给定分隔符分隔的子字符串(或在默认情况下,返回任意空格)。" + +#: ../../faq/design.rst:225 +msgid "" +":meth:`~str.join` is a string method because in using it you are telling the" +" separator string to iterate over a sequence of strings and insert itself " +"between adjacent elements. This method can be used with any argument which " +"obeys the rules for sequence objects, including any new classes you might " +"define yourself. Similar methods exist for bytes and bytearray objects." +msgstr "" +":meth:`~str.join` " +"是字符串方法,因为在使用该方法时,您告诉分隔符字符串去迭代一个字符串序列,并在相邻元素之间插入自身。此方法的参数可以是任何遵循序列规则的对象,包括您自己定义的任何新的类。对于字节和字节数组对象也有类似的方法。" + +#: ../../faq/design.rst:233 +msgid "How fast are exceptions?" +msgstr "异常有多快?" + +#: ../../faq/design.rst:235 +msgid "" +"A try/except block is extremely efficient if no exceptions are raised. " +"Actually catching an exception is expensive. In versions of Python prior to" +" 2.0 it was common to use this idiom::" +msgstr "如果没有引发异常,则try/except块的效率极高。实际上捕获异常是昂贵的。在2.0之前的Python版本中,通常使用这个习惯用法::" + +#: ../../faq/design.rst:245 +msgid "" +"This only made sense when you expected the dict to have the key almost all " +"the time. If that wasn't the case, you coded it like this::" +msgstr "只有当你期望dict在任何时候都有key时,这才有意义。如果不是这样的话,你就是应该这样编码:" + +#: ../../faq/design.rst:253 +msgid "" +"For this specific case, you could also use ``value = dict.setdefault(key, " +"getvalue(key))``, but only if the ``getvalue()`` call is cheap enough " +"because it is evaluated in all cases." +msgstr "" +"对于这种特定的情况,您还可以使用 ``value = dict.setdefault(key, getvalue(key))``,但前提是调用 " +"``getvalue()`` 足够便宜,因为在所有情况下都会对其进行评估。" + +#: ../../faq/design.rst:259 +msgid "Why isn't there a switch or case statement in Python?" +msgstr "为什么Python中没有switch或case语句?" + +#: ../../faq/design.rst:261 +msgid "" +"You can do this easily enough with a sequence of ``if... elif... elif... " +"else``. There have been some proposals for switch statement syntax, but " +"there is no consensus (yet) on whether and how to do range tests. See " +":pep:`275` for complete details and the current status." +msgstr "" +"你可以通过一系列 ``if... elif... elif... " +"else``.轻松完成这项工作。对于switch语句语法已经有了一些建议,但尚未就是否以及如何进行范围测试达成共识。有关完整的详细信息和当前状态,请参阅" +" :pep:`275` 。 " + +#: ../../faq/design.rst:266 +msgid "" +"For cases where you need to choose from a very large number of " +"possibilities, you can create a dictionary mapping case values to functions " +"to call. For example::" +msgstr "对于需要从大量可能性中进行选择的情况,可以创建一个字典,将case 值映射到要调用的函数。例如:" + +#: ../../faq/design.rst:277 +msgid "" +"For calling methods on objects, you can simplify yet further by using the " +":func:`getattr` built-in to retrieve methods with a particular name::" +msgstr "对于对象调用方法,可以通过使用 :func:`getattr` 内置检索具有特定名称的方法来进一步简化:" + +#: ../../faq/design.rst:289 +msgid "" +"It's suggested that you use a prefix for the method names, such as " +"``visit_`` in this example. Without such a prefix, if values are coming " +"from an untrusted source, an attacker would be able to call any method on " +"your object." +msgstr "建议对方法名使用前缀,例如本例中的 ``visit_`` 。如果没有这样的前缀,如果值来自不受信任的源,攻击者将能够调用对象上的任何方法。" + +#: ../../faq/design.rst:295 +msgid "" +"Can't you emulate threads in the interpreter instead of relying on an OS-" +"specific thread implementation?" +msgstr "难道不能在解释器中模拟线程,而非得依赖特定于操作系统的线程实现吗?" + +#: ../../faq/design.rst:297 +msgid "" +"Answer 1: Unfortunately, the interpreter pushes at least one C stack frame " +"for each Python stack frame. Also, extensions can call back into Python at " +"almost random moments. Therefore, a complete threads implementation " +"requires thread support for C." +msgstr "" +"答案1: 不幸的是,解释器为每个Python堆栈帧推送至少一个C堆栈帧。此外,扩展可以随时回调Python。因此,一个完整的线程实现需要对C的线程支持。" + +#: ../../faq/design.rst:302 +msgid "" +"Answer 2: Fortunately, there is `Stackless Python " +"`_, which has a completely " +"redesigned interpreter loop that avoids the C stack." +msgstr "" +"答案2: 幸运的是, `Stackless Python `_ 有一个完全重新设计的解释器循环,可以避免C堆栈。" + +#: ../../faq/design.rst:307 +msgid "Why can't lambda expressions contain statements?" +msgstr "为什么lambda表达式不能包含语句?" + +#: ../../faq/design.rst:309 +msgid "" +"Python lambda expressions cannot contain statements because Python's " +"syntactic framework can't handle statements nested inside expressions. " +"However, in Python, this is not a serious problem. Unlike lambda forms in " +"other languages, where they add functionality, Python lambdas are only a " +"shorthand notation if you're too lazy to define a function." +msgstr "" +"Python 的 lambda 表达式不能包含语句,因为Python的语法框架不能处理嵌套在表达式内部的语句。然而,在 Python " +"中,这并不是一个严重的问题。 与其他语言中添加功能的 lambda 形式不同,Python 的 lambda 只是一种速记符号,如果您懒得定义函数的话。" + +#: ../../faq/design.rst:315 +msgid "" +"Functions are already first class objects in Python, and can be declared in " +"a local scope. Therefore the only advantage of using a lambda instead of a " +"locally-defined function is that you don't need to invent a name for the " +"function -- but that's just a local variable to which the function object " +"(which is exactly the same type of object that a lambda expression yields) " +"is assigned!" +msgstr "" +"函数已经是Python中的第一类对象,可以在本地范围内声明。 因此,使用lambda而不是本地定义的函数的唯一优点是你不需要为函数创建一个名称 -- " +"这只是一个分配了函数对象(与lambda表达式生成的对象类型完全相同)的局部变量!" + +#: ../../faq/design.rst:323 +msgid "Can Python be compiled to machine code, C or some other language?" +msgstr "可以将Python编译为机器代码,C或其他语言吗?" + +#: ../../faq/design.rst:325 +msgid "" +"`Cython `_ compiles a modified version of Python with " +"optional annotations into C extensions. `Nuitka `_ " +"is an up-and-coming compiler of Python into C++ code, aiming to support the " +"full Python language. For compiling to Java you can consider `VOC " +"`_." +msgstr "" +"`Cython `_ 将带有可选注释的Python修改版本编译到C扩展中。 `Nuitka " +"`_ 是一个将Python编译成 C++ " +"代码的新兴编译器,旨在支持完整的Python语言。要编译成Java,可以考虑 `VOC `_ 。" + +#: ../../faq/design.rst:333 +msgid "How does Python manage memory?" +msgstr "Python如何管理内存?" + +#: ../../faq/design.rst:335 +msgid "" +"The details of Python memory management depend on the implementation. The " +"standard implementation of Python, :term:`CPython`, uses reference counting " +"to detect inaccessible objects, and another mechanism to collect reference " +"cycles, periodically executing a cycle detection algorithm which looks for " +"inaccessible cycles and deletes the objects involved. The :mod:`gc` module " +"provides functions to perform a garbage collection, obtain debugging " +"statistics, and tune the collector's parameters." +msgstr "" +"Python 内存管理的细节取决于实现。 Python 的标准实现 :term:`CPython` " +"使用引用计数来检测不可访问的对象,并使用另一种机制来收集引用循环,定期执行循环检测算法来查找不可访问的循环并删除所涉及的对象。 :mod:`gc` " +"模块提供了执行垃圾回收、获取调试统计信息和优化收集器参数的函数。" + +#: ../../faq/design.rst:343 +msgid "" +"Other implementations (such as `Jython `_ or `PyPy " +"`_), however, can rely on a different mechanism such as" +" a full-blown garbage collector. This difference can cause some subtle " +"porting problems if your Python code depends on the behavior of the " +"reference counting implementation." +msgstr "" +"但是,其他实现(如 `Jython `_ 或 `PyPy " +"`_ " +"),)可以依赖不同的机制,如完全的垃圾回收器 。如果你的Python代码依赖于引用计数实现的行为,则这种差异可能会导致一些微妙的移植问题。" + +#: ../../faq/design.rst:349 +msgid "" +"In some Python implementations, the following code (which is fine in " +"CPython) will probably run out of file descriptors::" +msgstr "在一些Python实现中,以下代码(在CPython中工作的很好)可能会耗尽文件描述符::" + +#: ../../faq/design.rst:356 +msgid "" +"Indeed, using CPython's reference counting and destructor scheme, each new " +"assignment to *f* closes the previous file. With a traditional GC, however," +" those file objects will only get collected (and closed) at varying and " +"possibly long intervals." +msgstr "" +"实际上,使用CPython的引用计数和析构函数方案, 每个新赋值的 *f* " +"都会关闭前一个文件。然而,对于传统的GC,这些文件对象只能以不同的时间间隔(可能很长的时间间隔)被收集(和关闭)。" + +#: ../../faq/design.rst:361 +msgid "" +"If you want to write code that will work with any Python implementation, you" +" should explicitly close the file or use the :keyword:`with` statement; this" +" will work regardless of memory management scheme::" +msgstr "" +"如果要编写可用于任何python实现的代码,则应显式关闭该文件或使用 :keyword:`with` 语句;无论内存管理方案如何,这都有效:" + +#: ../../faq/design.rst:371 +msgid "Why doesn't CPython use a more traditional garbage collection scheme?" +msgstr "为什么CPython不使用更传统的垃圾回收方案?" + +#: ../../faq/design.rst:373 +msgid "" +"For one thing, this is not a C standard feature and hence it's not portable." +" (Yes, we know about the Boehm GC library. It has bits of assembler code " +"for *most* common platforms, not for all of them, and although it is mostly " +"transparent, it isn't completely transparent; patches are required to get " +"Python to work with it.)" +msgstr "" +"首先,这不是C标准特性,因此不能移植。(是的,我们知道Boehm GC库。它包含了 *大多数* " +"常见平台(但不是所有平台)的汇编代码,尽管它基本上是透明的,但也不是完全透明的; 要让Python使用它,需要使用补丁。)" + +#: ../../faq/design.rst:379 +msgid "" +"Traditional GC also becomes a problem when Python is embedded into other " +"applications. While in a standalone Python it's fine to replace the " +"standard malloc() and free() with versions provided by the GC library, an " +"application embedding Python may want to have its *own* substitute for " +"malloc() and free(), and may not want Python's. Right now, CPython works " +"with anything that implements malloc() and free() properly." +msgstr "" +"当Python嵌入到其他应用程序中时,传统的GC也成为一个问题。在独立的Python中,可以用GC库提供的版本替换标准的malloc()和free(),嵌入Python的应用程序可能希望用" +" *它自己* 替代malloc()和free(),而可能不需要Python的。现在,CPython可以正确地实现malloc()和free()。" + +#: ../../faq/design.rst:388 +msgid "Why isn't all memory freed when CPython exits?" +msgstr "CPython退出时为什么不释放所有内存?" + +#: ../../faq/design.rst:390 +msgid "" +"Objects referenced from the global namespaces of Python modules are not " +"always deallocated when Python exits. This may happen if there are circular" +" references. There are also certain bits of memory that are allocated by " +"the C library that are impossible to free (e.g. a tool like Purify will " +"complain about these). Python is, however, aggressive about cleaning up " +"memory on exit and does try to destroy every single object." +msgstr "" +"当Python退出时,从全局命名空间或Python模块引用的对象并不总是被释放。 如果存在循环引用,则可能发生这种情况 " +"C库分配的某些内存也是不可能释放的(例如像Purify这样的工具会抱怨这些内容)。 但是,Python在退出时清理内存并尝试销毁每个对象。" + +#: ../../faq/design.rst:397 +msgid "" +"If you want to force Python to delete certain things on deallocation use the" +" :mod:`atexit` module to run a function that will force those deletions." +msgstr "如果要强制 Python 在释放时删除某些内容,请使用 :mod:`atexit` 模块运行一个函数,强制删除这些内容。" + +#: ../../faq/design.rst:402 +msgid "Why are there separate tuple and list data types?" +msgstr "为什么有单独的元组和列表数据类型?" + +#: ../../faq/design.rst:404 +msgid "" +"Lists and tuples, while similar in many respects, are generally used in " +"fundamentally different ways. Tuples can be thought of as being similar to " +"Pascal records or C structs; they're small collections of related data which" +" may be of different types which are operated on as a group. For example, a" +" Cartesian coordinate is appropriately represented as a tuple of two or " +"three numbers." +msgstr "" +"虽然列表和元组在许多方面是相似的,但它们的使用方式通常是完全不同的。可以认为元组类似于Pascal记录或C结构;它们是相关数据的小集合,可以是不同类型的数据,可以作为一个组进行操作。例如,笛卡尔坐标适当地表示为两个或三个数字的元组。" + +#: ../../faq/design.rst:411 +msgid "" +"Lists, on the other hand, are more like arrays in other languages. They " +"tend to hold a varying number of objects all of which have the same type and" +" which are operated on one-by-one. For example, ``os.listdir('.')`` returns" +" a list of strings representing the files in the current directory. " +"Functions which operate on this output would generally not break if you " +"added another file or two to the directory." +msgstr "" +"另一方面,列表更像其他语言中的数组。它们倾向于持有不同数量的对象,所有对象都具有相同的类型,并且逐个操作。例如, ``os.listdir('.')``" +" 返回表示当前目录中的文件的字符串列表。如果向目录中添加了一两个文件,对此输出进行操作的函数通常不会中断。" + +#: ../../faq/design.rst:418 +msgid "" +"Tuples are immutable, meaning that once a tuple has been created, you can't " +"replace any of its elements with a new value. Lists are mutable, meaning " +"that you can always change a list's elements. Only immutable elements can " +"be used as dictionary keys, and hence only tuples and not lists can be used " +"as keys." +msgstr "" +"元组是不可变的,这意味着一旦创建了元组,就不能用新值替换它的任何元素。列表是可变的,这意味着您始终可以更改列表的元素。只有不变元素可以用作字典的key,因此只能将元组和非列表用作key。" + +#: ../../faq/design.rst:425 +msgid "How are lists implemented in CPython?" +msgstr "列表是如何在CPython中实现的?" + +#: ../../faq/design.rst:427 +msgid "" +"CPython's lists are really variable-length arrays, not Lisp-style linked " +"lists. The implementation uses a contiguous array of references to other " +"objects, and keeps a pointer to this array and the array's length in a list " +"head structure." +msgstr "" +"CPython的列表实际上是可变长度的数组,而不是lisp风格的链表。该实现使用对其他对象的引用的连续数组,并在列表头结构中保留指向该数组和数组长度的指针。" + +#: ../../faq/design.rst:431 +msgid "" +"This makes indexing a list ``a[i]`` an operation whose cost is independent " +"of the size of the list or the value of the index." +msgstr "这使得索引列表 ``a[i]`` 的操作成本与列表的大小或索引的值无关。" + +#: ../../faq/design.rst:434 +msgid "" +"When items are appended or inserted, the array of references is resized. " +"Some cleverness is applied to improve the performance of appending items " +"repeatedly; when the array must be grown, some extra space is allocated so " +"the next few times don't require an actual resize." +msgstr "" +"当添加或插入项时,将调整引用数组的大小。并采用了一些巧妙的方法来提高重复添加项的性能; " +"当数组必须增长时,会分配一些额外的空间,以便在接下来的几次中不需要实际调整大小。" + +#: ../../faq/design.rst:441 +msgid "How are dictionaries implemented in CPython?" +msgstr "字典是如何在CPython中实现的?" + +#: ../../faq/design.rst:443 +msgid "" +"CPython's dictionaries are implemented as resizable hash tables. Compared " +"to B-trees, this gives better performance for lookup (the most common " +"operation by far) under most circumstances, and the implementation is " +"simpler." +msgstr "CPython的字典实现为可调整大小的哈希表。与B-树相比,这在大多数情况下为查找(目前最常见的操作)提供了更好的性能,并且实现更简单。" + +#: ../../faq/design.rst:447 +msgid "" +"Dictionaries work by computing a hash code for each key stored in the " +"dictionary using the :func:`hash` built-in function. The hash code varies " +"widely depending on the key and a per-process seed; for example, \"Python\" " +"could hash to -539294296 while \"python\", a string that differs by a single" +" bit, could hash to 1142331976. The hash code is then used to calculate a " +"location in an internal array where the value will be stored. Assuming that" +" you're storing keys that all have different hash values, this means that " +"dictionaries take constant time -- O(1), in Big-O notation -- to retrieve a " +"key." +msgstr "" +"字典的工作方式是使用 :func:`hash` " +"内置函数计算字典中存储的每个键的hash代码。hash代码根据键和每个进程的种子而变化很大;例如,\"Python\" " +"的hash值为-539294296,而\"python\"(一个按位不同的字符串)的hash值为1142331976。然后,hash代码用于计算内部数组中将存储该值的位置。假设您存储的键都具有不同的hash值,这意味着字典需要恒定的时间" +" -- O(1),用Big-O表示法 -- 来检索一个键。" + +#: ../../faq/design.rst:458 +msgid "Why must dictionary keys be immutable?" +msgstr "为什么字典key必须是不可变的?" + +#: ../../faq/design.rst:460 +msgid "" +"The hash table implementation of dictionaries uses a hash value calculated " +"from the key value to find the key. If the key were a mutable object, its " +"value could change, and thus its hash could also change. But since whoever " +"changes the key object can't tell that it was being used as a dictionary " +"key, it can't move the entry around in the dictionary. Then, when you try " +"to look up the same object in the dictionary it won't be found because its " +"hash value is different. If you tried to look up the old value it wouldn't " +"be found either, because the value of the object found in that hash bin " +"would be different." +msgstr "" +"字典的哈希表实现使用从键值计算的哈希值来查找键。如果键是可变对象,则其值可能会发生变化,因此其哈希值也会发生变化。但是,由于无论谁更改键对象都无法判断它是否被用作字典键值,因此无法在字典中修改条目。然后,当你尝试在字典中查找相同的对象时,将无法找到它,因为其哈希值不同。如果你尝试查找旧值,也不会找到它,因为在该哈希表中找到的对象的值会有所不同。" + +#: ../../faq/design.rst:469 +msgid "" +"If you want a dictionary indexed with a list, simply convert the list to a " +"tuple first; the function ``tuple(L)`` creates a tuple with the same entries" +" as the list ``L``. Tuples are immutable and can therefore be used as " +"dictionary keys." +msgstr "" +"如果你想要一个用列表索引的字典,只需先将列表转换为元组;用函数 ``tuple(L)`` 创建一个元组,其条目与列表 ``L`` 相同。 " +"元组是不可变的,因此可以用作字典键。" + +#: ../../faq/design.rst:473 +msgid "Some unacceptable solutions that have been proposed:" +msgstr "已经提出的一些不可接受的解决方案:" + +#: ../../faq/design.rst:475 +msgid "" +"Hash lists by their address (object ID). This doesn't work because if you " +"construct a new list with the same value it won't be found; e.g.::" +msgstr "哈希按其地址(对象ID)列出。这不起作用,因为如果你构造一个具有相同值的新列表,它将无法找到;例如::" + +#: ../../faq/design.rst:481 +msgid "" +"would raise a :exc:`KeyError` exception because the id of the ``[1, 2]`` " +"used in the second line differs from that in the first line. In other " +"words, dictionary keys should be compared using ``==``, not using " +":keyword:`is`." +msgstr "" +"会引发一个 :exc:`KeyError` 异常,因为第二行中使用的 ``[1, 2]`` 的 id 与第一行中的 id 不同。换句话说,应该使用 " +"``==`` 来比较字典键,而不是使用 :keyword:`is` 。" + +#: ../../faq/design.rst:485 +msgid "" +"Make a copy when using a list as a key. This doesn't work because the list," +" being a mutable object, could contain a reference to itself, and then the " +"copying code would run into an infinite loop." +msgstr "使用列表作为键时进行复制。这没有用的,因为作为可变对象的列表可以包含对自身的引用,然后复制代码将进入无限循环。" + +#: ../../faq/design.rst:489 +msgid "" +"Allow lists as keys but tell the user not to modify them. This would allow " +"a class of hard-to-track bugs in programs when you forgot or modified a list" +" by accident. It also invalidates an important invariant of dictionaries: " +"every value in ``d.keys()`` is usable as a key of the dictionary." +msgstr "" +"允许列表作为键,但告诉用户不要修改它们。当你意外忘记或修改列表时,这将产生程序中的一类难以跟踪的错误。它还使一个重要的字典不变量无效: " +"``d.keys()`` 中的每个值都可用作字典的键。" + +#: ../../faq/design.rst:494 +msgid "" +"Mark lists as read-only once they are used as a dictionary key. The problem" +" is that it's not just the top-level object that could change its value; you" +" could use a tuple containing a list as a key. Entering anything as a key " +"into a dictionary would require marking all objects reachable from there as " +"read-only -- and again, self-referential objects could cause an infinite " +"loop." +msgstr "" +"将列表用作字典键后,应标记为其只读。问题是,它不仅仅是可以改变其值的顶级对象;你可以使用包含列表作为键的元组。将任何内容作为键关联到字典中都需要将从那里可到达的所有对象标记为只读" +" —— 并且自引用对象可能会导致无限循环。" + +#: ../../faq/design.rst:500 +msgid "" +"There is a trick to get around this if you need to, but use it at your own " +"risk: You can wrap a mutable structure inside a class instance which has " +"both a :meth:`__eq__` and a :meth:`__hash__` method. You must then make " +"sure that the hash value for all such wrapper objects that reside in a " +"dictionary (or other hash based structure), remain fixed while the object is" +" in the dictionary (or other structure). ::" +msgstr "" +"如果需要,可以使用以下方法来解决这个问题,但使用它需要你自担风险:你可以将一个可变结构包装在一个类实例中,该实例同时具有 :meth:`__eq__` " +"和 :meth:`__hash__` 方法。然后,你必须确保驻留在字典(或其他基于 hash " +"的结构)中的所有此类包装器对象的哈希值在对象位于字典(或其他结构)中时保持固定。::" + +#: ../../faq/design.rst:524 +msgid "" +"Note that the hash computation is complicated by the possibility that some " +"members of the list may be unhashable and also by the possibility of " +"arithmetic overflow." +msgstr "注意,哈希计算由于列表的某些成员可能不可用以及算术溢出的可能性而变得复杂。" + +#: ../../faq/design.rst:528 +msgid "" +"Furthermore it must always be the case that if ``o1 == o2`` (ie " +"``o1.__eq__(o2) is True``) then ``hash(o1) == hash(o2)`` (ie, " +"``o1.__hash__() == o2.__hash__()``), regardless of whether the object is in " +"a dictionary or not. If you fail to meet these restrictions dictionaries " +"and other hash based structures will misbehave." +msgstr "" +"此外,必须始终如此,如果 ``o1 == o2`` (即 ``o1.__eq__(o2) is True`` )则 ``hash(o1) == " +"hash(o2)`` (即 ``o1.__hash__() == o2.__hash__()`` ),无论对象是否在字典中。 " +"如果你不能满足这些限制,字典和其他基于 hash 的结构将会出错。" + +#: ../../faq/design.rst:533 +msgid "" +"In the case of ListWrapper, whenever the wrapper object is in a dictionary " +"the wrapped list must not change to avoid anomalies. Don't do this unless " +"you are prepared to think hard about the requirements and the consequences " +"of not meeting them correctly. Consider yourself warned." +msgstr "" +"对于 ListWrapper " +",只要包装器对象在字典中,包装列表就不能更改以避免异常。除非你准备好认真考虑需求以及不正确地满足这些需求的后果,否则不要这样做。请留意。" + +#: ../../faq/design.rst:540 +msgid "Why doesn't list.sort() return the sorted list?" +msgstr "为什么 list.sort() 没有返回排序列表?" + +#: ../../faq/design.rst:542 +msgid "" +"In situations where performance matters, making a copy of the list just to " +"sort it would be wasteful. Therefore, :meth:`list.sort` sorts the list in " +"place. In order to remind you of that fact, it does not return the sorted " +"list. This way, you won't be fooled into accidentally overwriting a list " +"when you need a sorted copy but also need to keep the unsorted version " +"around." +msgstr "" +"在性能很重要的情况下,仅仅为了排序而复制一份列表将是一种浪费。因此, :meth:`list.sort` " +"对列表进行了适当的排序。为了提醒您这一事实,它不会返回已排序的列表。这样,当您需要排序的副本,但也需要保留未排序的版本时,就不会意外地覆盖列表。" + +#: ../../faq/design.rst:548 +msgid "" +"If you want to return a new list, use the built-in :func:`sorted` function " +"instead. This function creates a new list from a provided iterable, sorts " +"it and returns it. For example, here's how to iterate over the keys of a " +"dictionary in sorted order::" +msgstr "" +"如果要返回新列表,请使用内置 :func:`sorted` " +"函数。此函数从提供的可迭代列表中创建新列表,对其进行排序并返回。例如,下面是如何迭代遍历字典并按keys排序::" + +#: ../../faq/design.rst:558 +msgid "How do you specify and enforce an interface spec in Python?" +msgstr "如何在Python中指定和实施接口规范?" + +#: ../../faq/design.rst:560 +msgid "" +"An interface specification for a module as provided by languages such as C++" +" and Java describes the prototypes for the methods and functions of the " +"module. Many feel that compile-time enforcement of interface specifications" +" helps in the construction of large programs." +msgstr "由C++和Java等语言提供的模块接口规范描述了模块的方法和函数的原型。许多人认为接口规范的编译时强制执行有助于构建大型程序。" + +#: ../../faq/design.rst:565 +msgid "" +"Python 2.6 adds an :mod:`abc` module that lets you define Abstract Base " +"Classes (ABCs). You can then use :func:`isinstance` and :func:`issubclass` " +"to check whether an instance or a class implements a particular ABC. The " +":mod:`collections.abc` module defines a set of useful ABCs such as " +":class:`~collections.abc.Iterable`, :class:`~collections.abc.Container`, and" +" :class:`~collections.abc.MutableMapping`." +msgstr "" +"Python 2.6添加了一个 :mod:`abc` 模块,允许定义抽象基类 (ABCs)。然后可以使用 :func:`isinstance` 和 " +":func:`issubclass` 来检查实例或类是否实现了特定的ABC。 :mod:`collections.abc` 模块定义了一组有用的ABCs" +" 例如 :class:`~collections.abc.Iterable` , :class:`~collections.abc.Container`" +" , 和 :class:`~collections.abc.MutableMapping`" + +#: ../../faq/design.rst:572 +msgid "" +"For Python, many of the advantages of interface specifications can be " +"obtained by an appropriate test discipline for components." +msgstr "对于 Python,接口规范的许多好处可以通过组件的适当测试规程来获得。" + +#: ../../faq/design.rst:575 +msgid "" +"A good test suite for a module can both provide a regression test and serve " +"as a module interface specification and a set of examples. Many Python " +"modules can be run as a script to provide a simple \"self test.\" Even " +"modules which use complex external interfaces can often be tested in " +"isolation using trivial \"stub\" emulations of the external interface. The " +":mod:`doctest` and :mod:`unittest` modules or third-party test frameworks " +"can be used to construct exhaustive test suites that exercise every line of " +"code in a module." +msgstr "" +"一个好的模块测试套件既可以提供回归测试,也可以作为模块接口规范和一组示例。许多Python模块可以作为脚本运行,以提供简单的“自我测试”。即使是使用复杂外部接口的模块,也常常可以使用外部接口的简单“桩代码(stub)”模拟进行隔离测试。可以使用" +" :mod:`doctest` 和 :mod:`unittest` 模块或第三方测试框架来构造详尽的测试套件,以运行模块中的每一行代码。" + +#: ../../faq/design.rst:583 +msgid "" +"An appropriate testing discipline can help build large complex applications " +"in Python as well as having interface specifications would. In fact, it can" +" be better because an interface specification cannot test certain properties" +" of a program. For example, the :meth:`append` method is expected to add " +"new elements to the end of some internal list; an interface specification " +"cannot test that your :meth:`append` implementation will actually do this " +"correctly, but it's trivial to check this property in a test suite." +msgstr "" +"适当的测试规程可以帮助在Python中构建大型的、复杂的应用程序以及接口规范。事实上,它可能会更好,因为接口规范不能测试程序的某些属性。例如, " +":meth:`append` 方法将向一些内部列表的末尾添加新元素;接口规范不能测试您的 :meth:`append` " +"实现是否能够正确执行此操作,但是在测试套件中检查这个属性是很简单的。" + +#: ../../faq/design.rst:591 +msgid "" +"Writing test suites is very helpful, and you might want to design your code " +"to make it easily tested. One increasingly popular technique, test-driven " +"development, calls for writing parts of the test suite first, before you " +"write any of the actual code. Of course Python allows you to be sloppy and " +"not write test cases at all." +msgstr "" +"编写测试套件非常有用,并且你可能希望将你的代码设计为易于测试。 " +"一种日益流行的技术是面向测试的开发,它要求在编写任何实际代码之前首先编写测试套件的各个部分。 当然 Python " +"也允许你采用更粗率的方式,不必编写任何测试用例。" + +#: ../../faq/design.rst:599 +msgid "Why is there no goto?" +msgstr "为什么没有goto?" + +#: ../../faq/design.rst:601 +msgid "" +"In the 1970s people realized that unrestricted goto could lead to messy " +"\"spaghetti\" code that was hard to understand and revise. In a high-level " +"language, it is also unneeded as long as there are ways to branch (in " +"Python, with ``if`` statements and ``or``, ``and``, and ``if-else`` " +"expressions) and loop (with ``while`` and ``for`` statements, possibly " +"containing ``continue`` and ``break``)." +msgstr "" +"在 1970 年代人们了解到不受限制的 goto 可能导致混乱得像“意大利面”那样难以理解和修改的代码。 在高级语言中,它也是不必要的,只需有实现分支 " +"(在 Python 中是使用 ``if`` 语句以及 ``or``, ``and`` 和 ``if-else`` 表达式) 和循环 (使用 " +"``while`` 和 ``for`` 语句,并可能包含 ``continue`` 和 ``break``) 的手段就足够了。" + +#: ../../faq/design.rst:608 +msgid "" +"One can also use exceptions to provide a \"structured goto\" that works even" +" across function calls. Many feel that exceptions can conveniently emulate " +"all reasonable uses of the \"go\" or \"goto\" constructs of C, Fortran, and " +"other languages. For example::" +msgstr "" +"人们还可以使用异常捕获来提供甚至能跨函数调用的“结构化 goto”。 许多人认为异常可以方便地模拟 C, Fortran " +"和其他语言中所有合理使用的“go”或“goto”构造。 例如::" + +#: ../../faq/design.rst:624 +msgid "" +"This doesn't allow you to jump into the middle of a loop, but that's usually" +" considered an abuse of goto anyway. Use sparingly." +msgstr "但是不允许你跳到循环的中间,这通常被认为是滥用goto。谨慎使用。" + +#: ../../faq/design.rst:629 +msgid "Why can't raw strings (r-strings) end with a backslash?" +msgstr "为什么原始字符串(r-strings)不能以反斜杠结尾?" + +#: ../../faq/design.rst:631 +msgid "" +"More precisely, they can't end with an odd number of backslashes: the " +"unpaired backslash at the end escapes the closing quote character, leaving " +"an unterminated string." +msgstr "更准确地说,它们不能以奇数个反斜杠结束:结尾处的不成对反斜杠会转义结束引号字符,留下未结束的字符串。" + +#: ../../faq/design.rst:635 +msgid "" +"Raw strings were designed to ease creating input for processors (chiefly " +"regular expression engines) that want to do their own backslash escape " +"processing. Such processors consider an unmatched trailing backslash to be " +"an error anyway, so raw strings disallow that. In return, they allow you to" +" pass on the string quote character by escaping it with a backslash. These " +"rules work well when r-strings are used for their intended purpose." +msgstr "" +"原始字符串的设计是为了方便想要执行自己的反斜杠转义处理的处理器(主要是正则表达式引擎)创建输入。此类处理器将不匹配的尾随反斜杠视为错误,因此原始字符串不允许这样做。反过来,允许通过使用引号字符转义反斜杠转义字符串。当r-" +"string用于它们的预期目的时,这些规则工作的很好。" + +#: ../../faq/design.rst:642 +msgid "" +"If you're trying to build Windows pathnames, note that all Windows system " +"calls accept forward slashes too::" +msgstr "如果您正在尝试构建Windows路径名,请注意所有Windows系统调用都使用正斜杠::" + +#: ../../faq/design.rst:647 +msgid "" +"If you're trying to build a pathname for a DOS command, try e.g. one of ::" +msgstr "如果您正在尝试为DOS命令构建路径名,请尝试以下示例 ::" + +#: ../../faq/design.rst:655 +msgid "Why doesn't Python have a \"with\" statement for attribute assignments?" +msgstr "为什么Python没有属性赋值的“with”语句?" + +#: ../../faq/design.rst:657 +msgid "" +"Python has a 'with' statement that wraps the execution of a block, calling " +"code on the entrance and exit from the block. Some languages have a " +"construct that looks like this::" +msgstr "Python 具有 'with' 语句,它能将一个代码块的执行包装起来,在进入和退出代码块时调用特定的代码。 有些语言具有这样的结构::" + +#: ../../faq/design.rst:665 +msgid "In Python, such a construct would be ambiguous." +msgstr "在Python中,这样的结构是不明确的。" + +#: ../../faq/design.rst:667 +msgid "" +"Other languages, such as Object Pascal, Delphi, and C++, use static types, " +"so it's possible to know, in an unambiguous way, what member is being " +"assigned to. This is the main point of static typing -- the compiler " +"*always* knows the scope of every variable at compile time." +msgstr "" +"其他语言,如ObjectPascal、Delphi和C++ 使用静态类型,因此可以毫不含糊地知道分配给什么成员。这是静态类型的要点 -- 编译器 " +"*总是* 在编译时知道每个变量的作用域。" + +#: ../../faq/design.rst:672 +msgid "" +"Python uses dynamic types. It is impossible to know in advance which " +"attribute will be referenced at runtime. Member attributes may be added or " +"removed from objects on the fly. This makes it impossible to know, from a " +"simple reading, what attribute is being referenced: a local one, a global " +"one, or a member attribute?" +msgstr "" +"Python使用动态类型。事先不可能知道在运行时引用哪个属性。可以动态地在对象中添加或删除成员属性。这使得无法通过简单的阅读就知道引用的是什么属性:局部属性、全局属性还是成员属性?" + +#: ../../faq/design.rst:678 +msgid "For instance, take the following incomplete snippet::" +msgstr "例如,采用以下不完整的代码段::" + +#: ../../faq/design.rst:684 +msgid "" +"The snippet assumes that \"a\" must have a member attribute called \"x\". " +"However, there is nothing in Python that tells the interpreter this. What " +"should happen if \"a\" is, let us say, an integer? If there is a global " +"variable named \"x\", will it be used inside the with block? As you see, " +"the dynamic nature of Python makes such choices much harder." +msgstr "" +"该代码段假设 \"a\" 必须有一个名为 \"x\" 的成员属性。然而,Python中并没有告诉解释器这一点。假设 \"a\" " +"是整数,会发生什么?如果有一个名为 \"x\" 的全局变量,它是否会在with块中使用?如您所见,Python的动态特性使得这样的选择更加困难。" + +#: ../../faq/design.rst:690 +msgid "" +"The primary benefit of \"with\" and similar language features (reduction of " +"code volume) can, however, easily be achieved in Python by assignment. " +"Instead of::" +msgstr "然而,Python 可以通过赋值轻松实现 \"with\" 和类似语言特性(减少代码量)的主要好处。代替::" + +#: ../../faq/design.rst:697 +msgid "write this::" +msgstr "写成这样::" + +#: ../../faq/design.rst:704 +msgid "" +"This also has the side-effect of increasing execution speed because name " +"bindings are resolved at run-time in Python, and the second version only " +"needs to perform the resolution once." +msgstr "这也具有提高执行速度的附带效果,因为 Python 在运行时解析名称绑定,而第二个版本只需要执行一次解析。" + +#: ../../faq/design.rst:710 +msgid "Why don't generators support the with statement?" +msgstr "生成器为什么不支持 with 语句?" + +#: ../../faq/design.rst:712 +msgid "" +"For technical reasons, a generator used directly as a context manager would " +"not work correctly. When, as is most common, a generator is used as an " +"iterator run to completion, no closing is needed. When it is, wrap it as " +"\"contextlib.closing(generator)\" in the 'with' statement." +msgstr "" +"由于技术原因,直接作为上下文管理器使用的生成器将无法正常工作。最常见的情况是,当生成器被用作迭代器运行到完成时,不需要手动关闭。如果需要,在 " +"'with' 语句中把它包装成 \"contextlib.closing(generator)\" 。" + +#: ../../faq/design.rst:719 +msgid "Why are colons required for the if/while/def/class statements?" +msgstr "为什么 if/while/def/class语句需要冒号?" + +#: ../../faq/design.rst:721 +msgid "" +"The colon is required primarily to enhance readability (one of the results " +"of the experimental ABC language). Consider this::" +msgstr "冒号主要用于增强可读性(ABC语言实验的结果之一)。考虑一下这个::" + +#: ../../faq/design.rst:727 +msgid "versus ::" +msgstr "与 ::" + +#: ../../faq/design.rst:732 +msgid "" +"Notice how the second one is slightly easier to read. Notice further how a " +"colon sets off the example in this FAQ answer; it's a standard usage in " +"English." +msgstr "注意第二种方法稍微容易一些。请进一步注意,在这个FAQ解答的示例中,冒号是如何设置的;这是英语中的标准用法。" + +#: ../../faq/design.rst:735 +msgid "" +"Another minor reason is that the colon makes it easier for editors with " +"syntax highlighting; they can look for colons to decide when indentation " +"needs to be increased instead of having to do a more elaborate parsing of " +"the program text." +msgstr "另一个次要原因是冒号使带有语法突出显示的编辑器更容易工作;他们可以寻找冒号来决定何时需要增加缩进,而不必对程序文本进行更精细的解析。" + +#: ../../faq/design.rst:741 +msgid "Why does Python allow commas at the end of lists and tuples?" +msgstr "为什么Python在列表和元组的末尾允许使用逗号?" + +#: ../../faq/design.rst:743 +msgid "" +"Python lets you add a trailing comma at the end of lists, tuples, and " +"dictionaries::" +msgstr "Python 允许您在列表,元组和字典的末尾添加一个尾随逗号::" + +#: ../../faq/design.rst:754 +msgid "There are several reasons to allow this." +msgstr "有几个理由允许这样做。" + +#: ../../faq/design.rst:756 +msgid "" +"When you have a literal value for a list, tuple, or dictionary spread across" +" multiple lines, it's easier to add more elements because you don't have to " +"remember to add a comma to the previous line. The lines can also be " +"reordered without creating a syntax error." +msgstr "如果列表,元组或字典的字面值分布在多行中,则更容易添加更多元素,因为不必记住在上一行中添加逗号。这些行也可以重新排序,而不会产生语法错误。" + +#: ../../faq/design.rst:761 +msgid "" +"Accidentally omitting the comma can lead to errors that are hard to " +"diagnose. For example::" +msgstr "不小心省略逗号会导致难以诊断的错误。例如::" + +#: ../../faq/design.rst:771 +msgid "" +"This list looks like it has four elements, but it actually contains three: " +"\"fee\", \"fiefoo\" and \"fum\". Always adding the comma avoids this source" +" of error." +msgstr "这个列表看起来有四个元素,但实际上包含三个 : \"fee\", \"fiefoo\" 和 \"fum\" 。总是加上逗号可以避免这个错误的来源。" + +#: ../../faq/design.rst:774 +msgid "" +"Allowing the trailing comma may also make programmatic code generation " +"easier." +msgstr "允许尾随逗号也可以使编程代码更容易生成。" diff --git a/faq/extending.po b/faq/extending.po new file mode 100644 index 000000000..54d4d8f7a --- /dev/null +++ b/faq/extending.po @@ -0,0 +1,423 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) 2001-2022, Python Software Foundation +# This file is distributed under the same license as the Python package. +# FIRST AUTHOR , YEAR. +# +# Translators: +# Freesand Leo , 2019 +# ppcfish , 2020 +# +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: Python 3.9\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2022-11-04 14:34+0000\n" +"PO-Revision-Date: 2017-02-16 17:43+0000\n" +"Last-Translator: ppcfish , 2020\n" +"Language-Team: Chinese (China) (https://www.transifex.com/python-doc/teams/5390/zh_CN/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: zh_CN\n" +"Plural-Forms: nplurals=1; plural=0;\n" + +#: ../../faq/extending.rst:3 +msgid "Extending/Embedding FAQ" +msgstr "扩展/嵌入常见问题" + +#: ../../faq/extending.rst:6 +msgid "Contents" +msgstr "目录" + +#: ../../faq/extending.rst:16 +msgid "Can I create my own functions in C?" +msgstr "可以使用 C 语言创建自己的函数吗?" + +#: ../../faq/extending.rst:18 +msgid "" +"Yes, you can create built-in modules containing functions, variables, " +"exceptions and even new types in C. This is explained in the document " +":ref:`extending-index`." +msgstr "是的,您可以在C中创建包含函数、变量、异常甚至新类型的内置模块。在文档 :ref:`extending-index` 中有说明。" + +#: ../../faq/extending.rst:22 +msgid "Most intermediate or advanced Python books will also cover this topic." +msgstr "大多数中级或高级的Python书籍也涵盖这个主题。" + +#: ../../faq/extending.rst:26 +msgid "Can I create my own functions in C++?" +msgstr "可以使用 C++ 语言创建自己的函数吗?" + +#: ../../faq/extending.rst:28 +msgid "" +"Yes, using the C compatibility features found in C++. Place ``extern \"C\" " +"{ ... }`` around the Python include files and put ``extern \"C\"`` before " +"each function that is going to be called by the Python interpreter. Global " +"or static C++ objects with constructors are probably not a good idea." +msgstr "" +"是的,可以使用C ++中兼容C的功能。 在Python include文件周围放置` `extern“C”{...}`` " +",并在Python解释器调用的每个函数之前放置 ``extern“C”`` 。 具有构造函数的全局或静态C ++对象可能不是一个好主意。" + +#: ../../faq/extending.rst:37 +msgid "Writing C is hard; are there any alternatives?" +msgstr "C很难写,有没有其他选择?" + +#: ../../faq/extending.rst:39 +msgid "" +"There are a number of alternatives to writing your own C extensions, " +"depending on what you're trying to do." +msgstr "编写自己的C扩展有很多选择,具体取决于您要做的事情。" + +#: ../../faq/extending.rst:44 +msgid "" +"`Cython `_ and its relative `Pyrex " +"`_ are compilers" +" that accept a slightly modified form of Python and generate the " +"corresponding C code. Cython and Pyrex make it possible to write an " +"extension without having to learn Python's C API." +msgstr "" +"`Cython `_ 及其相关的 `Pyrex " +"`_ " +"是接受稍微修改过的Python形式并生成相应C代码的编译器。 Cython和Pyrex可以编写扩展而无需学习Python的C API。" + +#: ../../faq/extending.rst:50 +msgid "" +"If you need to interface to some C or C++ library for which no Python " +"extension currently exists, you can try wrapping the library's data types " +"and functions with a tool such as `SWIG `_. `SIP " +"`__, `CXX " +"`_ `Boost " +"`_, or `Weave " +"`_ are also alternatives for wrapping C++ " +"libraries." +msgstr "" +"如果需要连接到某些当前不存在Python扩展的C或C ++库,可以尝试使用 `SWIG `_ " +"等工具包装库的数据类型和函数。 `SIP `__" +" , `CXX `_ `Boost " +"`_ , 或 `Weave " +"`_ 也是包装C ++库的替代方案。" + +#: ../../faq/extending.rst:61 +msgid "How can I execute arbitrary Python statements from C?" +msgstr "如何在 C 中执行任意 Python 语句?" + +#: ../../faq/extending.rst:63 +msgid "" +"The highest-level function to do this is :c:func:`PyRun_SimpleString` which " +"takes a single string argument to be executed in the context of the module " +"``__main__`` and returns ``0`` for success and ``-1`` when an exception " +"occurred (including :exc:`SyntaxError`). If you want more control, use " +":c:func:`PyRun_String`; see the source for :c:func:`PyRun_SimpleString` in " +"``Python/pythonrun.c``." +msgstr "" +"执行此操作的最高层级函数为 :c:func:`PyRun_SimpleString`,它接受单个字符串参数用于在模块 ``__main__`` " +"的上下文中执行并在成功时返回 ``0`` 而在发生异常 (包括 :exc:`SyntaxError`) 时返回 ``-1``。 " +"如果你想要更多可控性,可以使用 :c:func:`PyRun_String`;请在 ``Python/pythonrun.c`` 中查看 " +":c:func:`PyRun_SimpleString` 的源码。" + +#: ../../faq/extending.rst:72 +msgid "How can I evaluate an arbitrary Python expression from C?" +msgstr "如何在 C 中对任意 Python 表达式求值?" + +#: ../../faq/extending.rst:74 +msgid "" +"Call the function :c:func:`PyRun_String` from the previous question with the" +" start symbol :c:data:`Py_eval_input`; it parses an expression, evaluates it" +" and returns its value." +msgstr "" +"可以调用前一问题中介绍的函数 :c:func:`PyRun_String` 并附带起始标记符 " +":c:data:`Py_eval_input`;它会解析表达式,对其求值并返回结果值。" + +#: ../../faq/extending.rst:80 +msgid "How do I extract C values from a Python object?" +msgstr "如何从Python对象中提取C的值?" + +#: ../../faq/extending.rst:82 +msgid "" +"That depends on the object's type. If it's a tuple, :c:func:`PyTuple_Size` " +"returns its length and :c:func:`PyTuple_GetItem` returns the item at a " +"specified index. Lists have similar functions, :c:func:`PyListSize` and " +":c:func:`PyList_GetItem`." +msgstr "" +"这取决于对象的类型。 如果是元组,:c:func:`PyTuple_Size` 可返回其长度而 :c:func:`PyTuple_GetItem` " +"可返回指定序号上的项。 对于列表也有类似的函数 :c:func:`PyListSize` 和 :c:func:`PyList_GetItem`。" + +#: ../../faq/extending.rst:87 +msgid "" +"For bytes, :c:func:`PyBytes_Size` returns its length and " +":c:func:`PyBytes_AsStringAndSize` provides a pointer to its value and its " +"length. Note that Python bytes objects may contain null bytes so C's " +":c:func:`strlen` should not be used." +msgstr "" +"对于字节串,:c:func:`PyBytes_Size` 可返回其长度而 :c:func:`PyBytes_AsStringAndSize` " +"提供一个指向其值和长度的指针。 请注意 Python 字节串可能为空,因此 C 的 :c:func:`strlen` 不应被使用。" + +#: ../../faq/extending.rst:92 +msgid "" +"To test the type of an object, first make sure it isn't ``NULL``, and then " +"use :c:func:`PyBytes_Check`, :c:func:`PyTuple_Check`, " +":c:func:`PyList_Check`, etc." +msgstr "" +"要检测一个对象的类型,首先要确保它不为 ``NULL``,然后使用 :c:func:`PyBytes_Check`, " +":c:func:`PyTuple_Check`, :c:func:`PyList_Check` 等等。" + +#: ../../faq/extending.rst:95 +msgid "" +"There is also a high-level API to Python objects which is provided by the " +"so-called 'abstract' interface -- read ``Include/abstract.h`` for further " +"details. It allows interfacing with any kind of Python sequence using calls" +" like :c:func:`PySequence_Length`, :c:func:`PySequence_GetItem`, etc. as " +"well as many other useful protocols such as numbers " +"(:c:func:`PyNumber_Index` et al.) and mappings in the PyMapping APIs." +msgstr "" +"还有一个针对 Python 对象的高层级 API,通过所谓的‘抽象’接口提供 —— 请参阅 ``Include/abstract.h`` 了解详情。 " +"它允许使用 :c:func:`PySequence_Length`, :c:func:`PySequence_GetItem` 这样的调用来与任意种类的" +" Python 序列进行对接,此外还可使用许多其他有用的协议例如数字 (:c:func:`PyNumber_Index` 等) 以及 PyMapping" +" API 中的各种映射等等。" + +#: ../../faq/extending.rst:104 +msgid "How do I use Py_BuildValue() to create a tuple of arbitrary length?" +msgstr "如何使用Py_BuildValue()创建任意长度的元组?" + +#: ../../faq/extending.rst:106 +msgid "You can't. Use :c:func:`PyTuple_Pack` instead." +msgstr "不可以。应该使用 :c:func:`PyTuple_Pack` 。" + +#: ../../faq/extending.rst:110 +msgid "How do I call an object's method from C?" +msgstr "如何从C调用对象的方法?" + +#: ../../faq/extending.rst:112 +msgid "" +"The :c:func:`PyObject_CallMethod` function can be used to call an arbitrary " +"method of an object. The parameters are the object, the name of the method " +"to call, a format string like that used with :c:func:`Py_BuildValue`, and " +"the argument values::" +msgstr "" +"可以使用 :c:func:`PyObject_CallMethod` 函数来调用某个对象的任意方法。 形参为该对象、要调用的方法名、类似 " +":c:func:`Py_BuildValue` 所用的格式字符串以及要传给方法的参数值::" + +#: ../../faq/extending.rst:121 +msgid "" +"This works for any object that has methods -- whether built-in or user-" +"defined. You are responsible for eventually :c:func:`Py_DECREF`\\ 'ing the " +"return value." +msgstr "" +"这适用于任何具有方法的对象 —— 不论是内置方法还是用户自定义方法。 你需要负责对返回值进行最终的 :c:func:`Py_DECREF` 处理。" + +#: ../../faq/extending.rst:124 +msgid "" +"To call, e.g., a file object's \"seek\" method with arguments 10, 0 " +"(assuming the file object pointer is \"f\")::" +msgstr "例如调用某个文件对象的 \"seek\" 方法并传入参数 10, 0 (假定文件对象的指针为 \"f\")::" + +#: ../../faq/extending.rst:135 +msgid "" +"Note that since :c:func:`PyObject_CallObject` *always* wants a tuple for the" +" argument list, to call a function without arguments, pass \"()\" for the " +"format, and to call a function with one argument, surround the argument in " +"parentheses, e.g. \"(i)\"." +msgstr "" +"请注意由于 :c:func:`PyObject_CallObject` *总是* 接受一个元组作为参数列表,要调用不带参数的函数,则传入格式为 " +"\"()\",要调用只带一个参数的函数,则应将参数包含于圆括号中,例如 \"(i)\"。" + +#: ../../faq/extending.rst:142 +msgid "" +"How do I catch the output from PyErr_Print() (or anything that prints to " +"stdout/stderr)?" +msgstr "如何捕获PyErr_Print()(或打印到stdout / stderr的任何内容)的输出?" + +#: ../../faq/extending.rst:144 +msgid "" +"In Python code, define an object that supports the ``write()`` method. " +"Assign this object to :data:`sys.stdout` and :data:`sys.stderr`. Call " +"print_error, or just allow the standard traceback mechanism to work. Then, " +"the output will go wherever your ``write()`` method sends it." +msgstr "" +"在 Python 代码中,定义一个支持 ``write()`` 方法的对象。 将此对象赋值给 :data:`sys.stdout` 和 " +":data:`sys.stderr`。 调用 print_error 或者只是允许标准回溯机制生效。 在此之后,输出将转往你的 ``write()`` " +"方法所指向的任何地方。" + +#: ../../faq/extending.rst:149 +msgid "The easiest way to do this is to use the :class:`io.StringIO` class:" +msgstr "做到这一点的最简单方式是使用 :class:`io.StringIO` 类:" + +#: ../../faq/extending.rst:161 +msgid "A custom object to do the same would look like this:" +msgstr "实现同样效果的自定义对象看起来是这样的:" + +#: ../../faq/extending.rst:182 +msgid "How do I access a module written in Python from C?" +msgstr "如何从C访问用Python编写的模块?" + +#: ../../faq/extending.rst:184 +msgid "You can get a pointer to the module object as follows::" +msgstr "你可以通过如下方式获得一个指向模块对象的指针::" + +#: ../../faq/extending.rst:188 +msgid "" +"If the module hasn't been imported yet (i.e. it is not yet present in " +":data:`sys.modules`), this initializes the module; otherwise it simply " +"returns the value of ``sys.modules[\"\"]``. Note that it " +"doesn't enter the module into any namespace -- it only ensures it has been " +"initialized and is stored in :data:`sys.modules`." +msgstr "" +"如果模块尚未被导入(即它还不存在于 :data:`sys.modules` 中),这会初始化该模块;否则它只是简单地返回 " +"``sys.modules[\"\"]`` 的值。 请注意它并不会将模块加入任何命名空间 —— 它只是确保模块被初始化并存在于 " +":data:`sys.modules` 中。" + +#: ../../faq/extending.rst:194 +msgid "" +"You can then access the module's attributes (i.e. any name defined in the " +"module) as follows::" +msgstr "之后你就可以通过如下方式来访问模块的属性(即模块中定义的任何名称)::" + +#: ../../faq/extending.rst:199 +msgid "" +"Calling :c:func:`PyObject_SetAttrString` to assign to variables in the " +"module also works." +msgstr "调用 :c:func:`PyObject_SetAttrString` 为模块中的变量赋值也是可以的。" + +#: ../../faq/extending.rst:204 +msgid "How do I interface to C++ objects from Python?" +msgstr "如何在 Python 中对接 C ++ 对象?" + +#: ../../faq/extending.rst:206 +msgid "" +"Depending on your requirements, there are many approaches. To do this " +"manually, begin by reading :ref:`the \"Extending and Embedding\" document " +"`. Realize that for the Python run-time system, there " +"isn't a whole lot of difference between C and C++ -- so the strategy of " +"building a new Python type around a C structure (pointer) type will also " +"work for C++ objects." +msgstr "" +"根据你的需求,可以选择许多方式。 手动的实现方式请查阅 :ref:`\"扩展与嵌入\" 文档 ` 来入门。 " +"需要知道的是对于 Python 运行时系统来说,C 和 C++ 并不没有太大的区别 —— 因此围绕一个 C 结构(指针)类型构建新 Python " +"对象的策略同样适用于 C++ 对象。" + +#: ../../faq/extending.rst:212 +msgid "For C++ libraries, see :ref:`c-wrapper-software`." +msgstr "有关C ++库,请参阅 :ref:`c-wrapper-software` " + +#: ../../faq/extending.rst:216 +msgid "I added a module using the Setup file and the make fails; why?" +msgstr "我使用Setup文件添加了一个模块,为什么make失败了?" + +#: ../../faq/extending.rst:218 +msgid "" +"Setup must end in a newline, if there is no newline there, the build process" +" fails. (Fixing this requires some ugly shell script hackery, and this bug " +"is so minor that it doesn't seem worth the effort.)" +msgstr "" +"安装程序必须以换行符结束,如果没有换行符,则构建过程将失败。 " +"(修复这个需要一些丑陋的shell脚本编程,而且这个bug很小,看起来不值得花这么大力气。)" + +#: ../../faq/extending.rst:224 +msgid "How do I debug an extension?" +msgstr "如何调试扩展?" + +#: ../../faq/extending.rst:226 +msgid "" +"When using GDB with dynamically loaded extensions, you can't set a " +"breakpoint in your extension until your extension is loaded." +msgstr "将GDB与动态加载的扩展名一起使用时,在加载扩展名之前,不能在扩展名中设置断点。" + +#: ../../faq/extending.rst:229 +msgid "In your ``.gdbinit`` file (or interactively), add the command:" +msgstr "在您的 ``.gdbinit`` 文件中(或交互式)添加命令:" + +#: ../../faq/extending.rst:235 +msgid "Then, when you run GDB:" +msgstr "然后运行GDB:" + +#: ../../faq/extending.rst:247 +msgid "" +"I want to compile a Python module on my Linux system, but some files are " +"missing. Why?" +msgstr "我想在Linux系统上编译一个Python模块,但是缺少一些文件。为什么?" + +#: ../../faq/extending.rst:249 +msgid "" +"Most packaged versions of Python don't include the " +":file:`/usr/lib/python2.{x}/config/` directory, which contains various files" +" required for compiling Python extensions." +msgstr "" +"大多数打包的Python版本不包含 :file:`/usr/lib/python2.{x}/config/` " +"目录,该目录中包含编译Python扩展所需的各种文件。" + +#: ../../faq/extending.rst:253 +msgid "For Red Hat, install the python-devel RPM to get the necessary files." +msgstr "对于Red Hat,安装python-devel RPM以获取必要的文件。" + +#: ../../faq/extending.rst:255 +msgid "For Debian, run ``apt-get install python-dev``." +msgstr "对于Debian,运行 ``apt-get install python-dev`` 。" + +#: ../../faq/extending.rst:258 +msgid "How do I tell \"incomplete input\" from \"invalid input\"?" +msgstr "如何区分“输入不完整”和“输入无效”?" + +#: ../../faq/extending.rst:260 +msgid "" +"Sometimes you want to emulate the Python interactive interpreter's behavior," +" where it gives you a continuation prompt when the input is incomplete (e.g." +" you typed the start of an \"if\" statement or you didn't close your " +"parentheses or triple string quotes), but it gives you a syntax error " +"message immediately when the input is invalid." +msgstr "" +"有时,希望模仿Python交互式解释器的行为,在输入不完整时(例如,您键入了“if”语句的开头,或者没有关闭括号或三个字符串引号),给出一个延续提示,但当输入无效时,立即给出一条语法错误消息。" + +#: ../../faq/extending.rst:266 +msgid "" +"In Python you can use the :mod:`codeop` module, which approximates the " +"parser's behavior sufficiently. IDLE uses this, for example." +msgstr "在Python中,您可以使用 :mod:`codeop` 模块,该模块非常接近解析器的行为。例如,IDLE就使用了这个。" + +#: ../../faq/extending.rst:269 +msgid "" +"The easiest way to do it in C is to call :c:func:`PyRun_InteractiveLoop` " +"(perhaps in a separate thread) and let the Python interpreter handle the " +"input for you. You can also set the :c:func:`PyOS_ReadlineFunctionPointer` " +"to point at your custom input function. See ``Modules/readline.c`` and " +"``Parser/myreadline.c`` for more hints." +msgstr "" +"在C中执行此操作的最简单方法是调用 :c:func:`PyRun_InteractiveLoop` " +"(可能在单独的线程中)并让Python解释器为您处理输入。您还可以设置 :c:func:`PyOS_ReadlineFunctionPointer` " +"指向您的自定义输入函数。有关更多提示,请参阅 ``Modules/readline.c`` 和 ``Parser/myreadline.c`` 。" + +#: ../../faq/extending.rst:276 +msgid "How do I find undefined g++ symbols __builtin_new or __pure_virtual?" +msgstr "如何找到未定义的g++符号__builtin_new或__pure_virtual?" + +#: ../../faq/extending.rst:278 +msgid "" +"To dynamically load g++ extension modules, you must recompile Python, relink" +" it using g++ (change LINKCC in the Python Modules Makefile), and link your " +"extension module using g++ (e.g., ``g++ -shared -o mymodule.so " +"mymodule.o``)." +msgstr "" +"要动态加载g ++扩展模块,必须重新编译Python,要使用g ++重新链接(在Python Modules " +"Makefile中更改LINKCC),及链接扩展模块(例如: ``g++ -shared -o mymodule.so mymodule.o`` )。" + +#: ../../faq/extending.rst:284 +msgid "" +"Can I create an object class with some methods implemented in C and others " +"in Python (e.g. through inheritance)?" +msgstr "能否创建一个对象类,其中部分方法在C中实现,而其他方法在Python中实现(例如通过继承)?" + +#: ../../faq/extending.rst:286 +msgid "" +"Yes, you can inherit from built-in classes such as :class:`int`, " +":class:`list`, :class:`dict`, etc." +msgstr "是的,您可以继承内置类,例如 :class:`int` , :class:`list` , :class:`dict` 等。" + +#: ../../faq/extending.rst:289 +msgid "" +"The Boost Python Library (BPL, " +"http://www.boost.org/libs/python/doc/index.html) provides a way of doing " +"this from C++ (i.e. you can inherit from an extension class written in C++ " +"using the BPL)." +msgstr "" +"Boost Python库(BPL,http://www.boost.org/libs/python/doc/index.html)提供了一种从C " +"++执行此操作的方法(即,您可以使用BPL继承自C ++编写的扩展类 )。" diff --git a/faq/general.po b/faq/general.po new file mode 100644 index 000000000..d18e85ca9 --- /dev/null +++ b/faq/general.po @@ -0,0 +1,777 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) 2001-2022, Python Software Foundation +# This file is distributed under the same license as the Python package. +# FIRST AUTHOR , YEAR. +# +# Translators: +# Yinuo Huang , 2018 +# Konge , 2018 +# Freesand Leo , 2022 +# +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: Python 3.9\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2022-11-04 14:34+0000\n" +"PO-Revision-Date: 2017-02-16 17:43+0000\n" +"Last-Translator: Freesand Leo , 2022\n" +"Language-Team: Chinese (China) (https://www.transifex.com/python-doc/teams/5390/zh_CN/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: zh_CN\n" +"Plural-Forms: nplurals=1; plural=0;\n" + +#: ../../faq/general.rst:5 +msgid "General Python FAQ" +msgstr "Python常见问题" + +#: ../../faq/general.rst:8 +msgid "Contents" +msgstr "内容" + +#: ../../faq/general.rst:13 +msgid "General Information" +msgstr "一般信息" + +#: ../../faq/general.rst:16 +msgid "What is Python?" +msgstr "什么是 Python?" + +#: ../../faq/general.rst:18 +msgid "" +"Python is an interpreted, interactive, object-oriented programming language." +" It incorporates modules, exceptions, dynamic typing, very high level " +"dynamic data types, and classes. It supports multiple programming paradigms" +" beyond object-oriented programming, such as procedural and functional " +"programming. Python combines remarkable power with very clear syntax. It has" +" interfaces to many system calls and libraries, as well as to various window" +" systems, and is extensible in C or C++. It is also usable as an extension " +"language for applications that need a programmable interface. Finally, " +"Python is portable: it runs on many Unix variants including Linux and macOS," +" and on Windows." +msgstr "" +"Python 是一种解释型、交互式、面向对象的编程语言。 它包含了模块、异常、动态类型、高层级动态数据类型以及类等特性。 " +"在面向对象编程以外它还支持多种编程范式,例如过程式和函数式编程等。 Python 结合了超强的功能和极清晰的语法。 " +"它带有许多系统调用和库以及多种窗口系统的接口,并且能用 C 或 C++ 来进行扩展。 它还可用作需要可编程接口的应用程序的扩展语言。 最后,Python" +" 非常易于移植:它可以在包括 Linux 和 macOS 在内的许多 Unix 变种以及 Windows 上运行。" + +#: ../../faq/general.rst:28 +msgid "" +"To find out more, start with :ref:`tutorial-index`. The `Beginner's Guide " +"to Python `_ links to other " +"introductory tutorials and resources for learning Python." +msgstr "" +"要了解更多详情,请先查看 :ref:`tutorial-index`。 `Python 新手指南 " +"`_ 提供了学习 Python 的其他入门教程及资源的链接。" + +#: ../../faq/general.rst:34 +msgid "What is the Python Software Foundation?" +msgstr "什么是 Python 软件基金会?" + +#: ../../faq/general.rst:36 +msgid "" +"The Python Software Foundation is an independent non-profit organization " +"that holds the copyright on Python versions 2.1 and newer. The PSF's " +"mission is to advance open source technology related to the Python " +"programming language and to publicize the use of Python. The PSF's home " +"page is at https://www.python.org/psf/." +msgstr "" +"Python 软件基金会(Python Software Foundation,简称 PSF)是一个独立的非盈利组织,它拥有 Python 2.1 " +"及以上各版本的版权。 PSF 的使命是推进与 Python 编程语言相关的开源技术,并推广 Python 的使用。 PSF 的主页是 " +"https://www.python.org/psf/。" + +#: ../../faq/general.rst:42 +msgid "" +"Donations to the PSF are tax-exempt in the US. If you use Python and find " +"it helpful, please contribute via `the PSF donation page " +"`_." +msgstr "" +"向 PSF 提供捐助在美国是免税的。 如果你在使用 Python 并且感觉它对你很有帮助,可以通过 `PSF 捐助页 " +"`_ 进行捐助。" + +#: ../../faq/general.rst:48 +msgid "Are there copyright restrictions on the use of Python?" +msgstr "使用 Python 是否存在版权限制?" + +#: ../../faq/general.rst:50 +msgid "" +"You can do anything you want with the source, as long as you leave the " +"copyrights in and display those copyrights in any documentation about Python" +" that you produce. If you honor the copyright rules, it's OK to use Python " +"for commercial use, to sell copies of Python in source or binary form " +"(modified or unmodified), or to sell products that incorporate Python in " +"some form. We would still like to know about all commercial use of Python, " +"of course." +msgstr "" +"你可以任意使用源码,只要你保留版权信息并在你基于 Python 的产品文档中显示该版权信息。 如果你遵守此版权规则,就可以将 Python " +"用于商业领域,以源码或二进制码的形式(不论是否经过修改)销售 Python 的副本,或是以某种形式包含了 Python 的产品。 " +"当然,我们仍然希望获知所有对 Python 的商业使用。" + +#: ../../faq/general.rst:57 +msgid "" +"See `the PSF license page `_ to find " +"further explanations and a link to the full text of the license." +msgstr "" +"请参阅 `PSF 许可页 `_ " +"以查看进一步的说明以及许可的完整文本内容的链接。" + +#: ../../faq/general.rst:60 +msgid "" +"The Python logo is trademarked, and in certain cases permission is required " +"to use it. Consult `the Trademark Usage Policy " +"`__ for more information." +msgstr "" +"Python 的徽标是注册商标,在某些情况下需要获得允许方可使用。 请参阅 `商标使用政策 " +"`__ 了解详情。" + +#: ../../faq/general.rst:66 +msgid "Why was Python created in the first place?" +msgstr "创造 Python 的最初理由是什么?" + +#: ../../faq/general.rst:68 +msgid "" +"Here's a *very* brief summary of what started it all, written by Guido van " +"Rossum:" +msgstr "以下是有关最初缘起的一份 *非常* 简短的摘要,由 Guido van Rossum 本人撰写:" + +#: ../../faq/general.rst:71 +msgid "" +"I had extensive experience with implementing an interpreted language in the " +"ABC group at CWI, and from working with this group I had learned a lot about" +" language design. This is the origin of many Python features, including the" +" use of indentation for statement grouping and the inclusion of very-high-" +"level data types (although the details are all different in Python)." +msgstr "" +"我在 CWI 的 ABC 部门时在实现解释型语言方面积累了丰富经验,通过与这个部门成员的协同工作,我学到了大量有关语言设计的知识。 这是许多 " +"Python 特性的最初来源,包括使用缩进来组织语句以及包含非常高层级的数据结构(虽然在 Python 中具体的实现细节完全不同)。" + +#: ../../faq/general.rst:78 +msgid "" +"I had a number of gripes about the ABC language, but also liked many of its " +"features. It was impossible to extend the ABC language (or its " +"implementation) to remedy my complaints -- in fact its lack of extensibility" +" was one of its biggest problems. I had some experience with using " +"Modula-2+ and talked with the designers of Modula-3 and read the Modula-3 " +"report. Modula-3 is the origin of the syntax and semantics used for " +"exceptions, and some other Python features." +msgstr "" +"我对 ABC 语言有过许多抱怨,但同时也很喜欢它的许多特性。 没有可能通过扩展 ABC 语言(或它的实现)来弥补我的不满 —— " +"实际上缺乏可扩展性就是它最大的问题之一。 我也有一些使用 Modula-2+ 的经验,并曾与 Modula-3 的设计者进行交流,还阅读了 " +"Modula-3 的报告。 Modula-3 是 Python 中异常机制所用语法和语义,以及其他一些语言特性的最初来源。" + +#: ../../faq/general.rst:86 +msgid "" +"I was working in the Amoeba distributed operating system group at CWI. We " +"needed a better way to do system administration than by writing either C " +"programs or Bourne shell scripts, since Amoeba had its own system call " +"interface which wasn't easily accessible from the Bourne shell. My " +"experience with error handling in Amoeba made me acutely aware of the " +"importance of exceptions as a programming language feature." +msgstr "" +"我还曾在 CWI 的 Amoeba 分布式操作系统部门工作。 当时我们需要有一种比编写 C 程序或 Bash 脚本更好的方式来进行系统管理,因为 " +"Amoeba 有它自己的系统调用接口,并且无法方便地通过 Bash 来访问。 我在 Amoeba " +"中处理错误的经验令我深刻地意识到异常处理在编程语言特性当中的重要地位。" + +#: ../../faq/general.rst:93 +msgid "" +"It occurred to me that a scripting language with a syntax like ABC but with " +"access to the Amoeba system calls would fill the need. I realized that it " +"would be foolish to write an Amoeba-specific language, so I decided that I " +"needed a language that was generally extensible." +msgstr "" +"我发现,某种具有 ABC 式的语法而又能访问 Amoeba 系统调用的脚本语言将可满足需求。 我意识到编写一种 Amoeba " +"专属的语言是愚蠢的,所以我决定编写一种具有全面可扩展性的语言。" + +#: ../../faq/general.rst:98 +msgid "" +"During the 1989 Christmas holidays, I had a lot of time on my hand, so I " +"decided to give it a try. During the next year, while still mostly working " +"on it in my own time, Python was used in the Amoeba project with increasing " +"success, and the feedback from colleagues made me add many early " +"improvements." +msgstr "" +"在 1989 年的圣诞假期中,我手头的时间非常充裕,因此我决定开始尝试一下。 在接下来的一年里,虽然我仍然主要用我的业余时间来做这件事,但 Python" +" 在 Amoeba 项目中的使用获得了很大的成功,来自同事的反馈让我得以增加了许多早期的改进。" + +#: ../../faq/general.rst:104 +msgid "" +"In February 1991, after just over a year of development, I decided to post " +"to USENET. The rest is in the ``Misc/HISTORY`` file." +msgstr "" +"到 1991 年 2 月,经过一年多的开发,我决定将其发布到 USENET。 之后的事情就都可以在 ``Misc/HISTORY`` 文件里面看了。" + +#: ../../faq/general.rst:109 +msgid "What is Python good for?" +msgstr "Python 适合做什么?" + +#: ../../faq/general.rst:111 +msgid "" +"Python is a high-level general-purpose programming language that can be " +"applied to many different classes of problems." +msgstr "Python 是一种高层级的多用途编程语言,可用于解决许多不同门类的问题。" + +#: ../../faq/general.rst:114 +msgid "" +"The language comes with a large standard library that covers areas such as " +"string processing (regular expressions, Unicode, calculating differences " +"between files), Internet protocols (HTTP, FTP, SMTP, XML-RPC, POP, IMAP, CGI" +" programming), software engineering (unit testing, logging, profiling, " +"parsing Python code), and operating system interfaces (system calls, " +"filesystems, TCP/IP sockets). Look at the table of contents for " +":ref:`library-index` to get an idea of what's available. A wide variety of " +"third-party extensions are also available. Consult `the Python Package " +"Index `_ to find packages of interest to you." +msgstr "" +"该语言附带一个庞大的标准库,涵盖了字符串处理(正则表达式,Unicode,比较文件间的差异等),因特网协议(HTTP,FTP,SMTP,XML-" +"RPC,POP,IMAP,CGI 编程等),软件工程(单元测试,日志记录,性能分析,Python " +"代码解析等),以及操作系统接口(系统调用,文件系统,TCP/IP 套接字等)。 请查看 :ref:`library-index` " +"的目录以了解所有可用的内容。 此外还可以获取到各种各样的第三方扩展。 请访问 `Python 包索引 `_ " +"来查找你感兴趣的软件包。" + +#: ../../faq/general.rst:126 +msgid "How does the Python version numbering scheme work?" +msgstr "Python 版本的编号形式是怎样的?" + +#: ../../faq/general.rst:128 +msgid "" +"Python versions are numbered A.B.C or A.B. A is the major version number --" +" it is only incremented for really major changes in the language. B is the " +"minor version number, incremented for less earth-shattering changes. C is " +"the micro-level -- it is incremented for each bugfix release. See :pep:`6` " +"for more information about bugfix releases." +msgstr "" +"Python 版本的编号形式是 A.B.C 或 A.B。 A 称为大版本号 —— 它仅在对语言特性进行非常重大改变时才会递增。 B " +"称为小版本号,它会在语言特性发生较小改变时递增。 C 称为微版本号 —— 它会在每次发布问题修正时递增。 请参阅 :pep:`6` " +"了解有关问题修正发布版的详情。" + +#: ../../faq/general.rst:134 +msgid "" +"Not all releases are bugfix releases. In the run-up to a new major release," +" a series of development releases are made, denoted as alpha, beta, or " +"release candidate. Alphas are early releases in which interfaces aren't yet" +" finalized; it's not unexpected to see an interface change between two alpha" +" releases. Betas are more stable, preserving existing interfaces but " +"possibly adding new modules, and release candidates are frozen, making no " +"changes except as needed to fix critical bugs." +msgstr "" +"发布版本并非都是问题修正版本。 在新的主要发布版本开发过程中,还会发布一系列的开发版,它们以 alpha (a), beta (b) 或 release" +" candidate (rc) 来标示。 其中 alpha 版是早期发布的测试版,它的接口并未最终确定;在两个 alpha " +"发布版本间出现接口的改变并不意外。 而 beta 版更为稳定,它会保留现有的接口,但也可能增加新的模块,release candidate " +"版则会保持冻结状态不会再进行改变,除非有重大问题需要修正。" + +#: ../../faq/general.rst:142 +msgid "" +"Alpha, beta and release candidate versions have an additional suffix. The " +"suffix for an alpha version is \"aN\" for some small number N, the suffix " +"for a beta version is \"bN\" for some small number N, and the suffix for a " +"release candidate version is \"rcN\" for some small number N. In other " +"words, all versions labeled 2.0aN precede the versions labeled 2.0bN, which " +"precede versions labeled 2.0rcN, and *those* precede 2.0." +msgstr "" +"以上 alpha, beta 和 release candidate 版本会附加一个后缀。 用于 alpha 版本的后缀是带有一个小数字 N " +"的“aN”,beta 版本的后缀是带有一个小数字 N 的“bN”,而 release candidate 版本的后缀是带有一个小数字 N 的“rcN”。" +" 换句话说,所有标记为 2.0aN 的版本都早于标记为 2.0bN 的版本,后者又都早于标记为 2.0rcN 的版本,而 *它们* 全都早于 2.0。" + +#: ../../faq/general.rst:149 +msgid "" +"You may also find version numbers with a \"+\" suffix, e.g. \"2.2+\". These" +" are unreleased versions, built directly from the CPython development " +"repository. In practice, after a final minor release is made, the version " +"is incremented to the next minor version, which becomes the \"a0\" version, " +"e.g. \"2.4a0\"." +msgstr "" +"你还可能看到带有“+”后缀的版本号,例如“2.2+”。 这表示未发布版本,直接基于 CPython 开发代码仓库构建。 " +"在实际操作中,当一个小版本最终发布后,未发布版本号会递增到下一个小版本号,成为“a0”版本,例如“2.4a0”。" + +#: ../../faq/general.rst:154 +msgid "" +"See also the documentation for :data:`sys.version`, :data:`sys.hexversion`, " +"and :data:`sys.version_info`." +msgstr "" +"另请参阅 :data:`sys.version`, :data:`sys.hexversion` 以及 :data:`sys.version_info`" +" 的文档。" + +#: ../../faq/general.rst:159 +msgid "How do I obtain a copy of the Python source?" +msgstr "我应如何获取一份 Python 源代码的副本?" + +#: ../../faq/general.rst:161 +msgid "" +"The latest Python source distribution is always available from python.org, " +"at https://www.python.org/downloads/. The latest development sources can be" +" obtained at https://github.com/python/cpython/." +msgstr "" +"最新的 Python 发布版源代码总能从 python.org 获取,下载页链接为 https://www.python.org/downloads/。" +" 最新的开发版源代码可以在 https://github.com/python/cpython/ 获取。" + +#: ../../faq/general.rst:165 +msgid "" +"The source distribution is a gzipped tar file containing the complete C " +"source, Sphinx-formatted documentation, Python library modules, example " +"programs, and several useful pieces of freely distributable software. The " +"source will compile and run out of the box on most UNIX platforms." +msgstr "" +"发布版源代码是一个以 gzip 压缩的 tar 文件,其中包含完整的 C 源代码、Sphinx 格式的文档、Python " +"库模块、示例程序以及一些有用的自由分发软件。 该源代码将可在大多数 UNIX 类平台上直接编译并运行。" + +#: ../../faq/general.rst:170 +msgid "" +"Consult the `Getting Started section of the Python Developer's Guide " +"`__ for more information on getting the " +"source code and compiling it." +msgstr "" +"请参阅 `Python 开发者指南的初步上手部分 `__ " +"了解有关获取源代码并进行编译的更多信息。" + +#: ../../faq/general.rst:176 +msgid "How do I get documentation on Python?" +msgstr "我应如何获取 Python 的文档?" + +#: ../../faq/general.rst:180 +msgid "" +"The standard documentation for the current stable version of Python is " +"available at https://docs.python.org/3/. PDF, plain text, and downloadable " +"HTML versions are also available at https://docs.python.org/3/download.html." +msgstr "" +"当前的 Python 稳定版本的标准文档可在 https://docs.python.org/3/ 查看。 也可在 " +"https://docs.python.org/3/download.html 获取PDF、纯文本以及可下载的 HTML 版本。" + +#: ../../faq/general.rst:184 +msgid "" +"The documentation is written in reStructuredText and processed by `the " +"Sphinx documentation tool `__. The reStructuredText" +" source for the documentation is part of the Python source distribution." +msgstr "" +"文档以 reStructuredText 格式撰写,并使用 `Sphinx 文档工具 `__ 生成。 " +"文档的 reStructuredText 源文件是 Python 源代码发布版的一部分。" + +#: ../../faq/general.rst:190 +msgid "I've never programmed before. Is there a Python tutorial?" +msgstr "我之前从未接触过编程。 哪里有 Python 的教程?" + +#: ../../faq/general.rst:192 +msgid "" +"There are numerous tutorials and books available. The standard " +"documentation includes :ref:`tutorial-index`." +msgstr "有许多可选择的教程和书籍。 标准文档中也包含有 :ref:`tutorial-index`。" + +#: ../../faq/general.rst:195 +msgid "" +"Consult `the Beginner's Guide " +"`_ to find information for " +"beginning Python programmers, including lists of tutorials." +msgstr "" +"请参阅 `新手指南 `_ 以获取针对 Python " +"编程初学者的信息,包括教程的清单。" + +#: ../../faq/general.rst:200 +msgid "Is there a newsgroup or mailing list devoted to Python?" +msgstr "是否有专门针对 Python 的新闻组或邮件列表?" + +#: ../../faq/general.rst:202 +msgid "" +"There is a newsgroup, :newsgroup:`comp.lang.python`, and a mailing list, " +"`python-list `_. The " +"newsgroup and mailing list are gatewayed into each other -- if you can read " +"news it's unnecessary to subscribe to the mailing list. " +":newsgroup:`comp.lang.python` is high-traffic, receiving hundreds of " +"postings every day, and Usenet readers are often more able to cope with this" +" volume." +msgstr "" +"有一个新闻组 :newsgroup:`comp.lang.python` 和一个邮件列表 `python-list " +"`_。 新闻组和邮件列表是彼此互通的 —— " +"如果你可以阅读新闻就不必再订阅邮件列表。 :newsgroup:`comp.lang.python` 的流量很大,每天会收到数以百计的发帖,Usenet" +" 使用者通常更擅长处理这样大的流量。" + +#: ../../faq/general.rst:209 +msgid "" +"Announcements of new software releases and events can be found in " +"comp.lang.python.announce, a low-traffic moderated list that receives about " +"five postings per day. It's available as `the python-announce mailing list " +"`_." +msgstr "" +"有关新软件发布和活动的公告可以在 comp.lang.python.announce 中找到,这是个严格管理的低流量列表,每天会收到五个左右的发帖。 " +"可以在 `Python 公告邮件列表 `_ 页面进行订阅。" + +#: ../../faq/general.rst:214 +msgid "" +"More info about other mailing lists and newsgroups can be found at " +"https://www.python.org/community/lists/." +msgstr "有关其他邮件列表和新闻组的更多信息可以在 https://www.python.org/community/lists/ 找到。" + +#: ../../faq/general.rst:219 +msgid "How do I get a beta test version of Python?" +msgstr "我应如何获取 Python 的公开测试版本?" + +#: ../../faq/general.rst:221 +msgid "" +"Alpha and beta releases are available from " +"https://www.python.org/downloads/. All releases are announced on the " +"comp.lang.python and comp.lang.python.announce newsgroups and on the Python " +"home page at https://www.python.org/; an RSS feed of news is available." +msgstr "" +"可以从 https://www.python.org/downloads/ 下载 alpha 和 beta 发布版。 所有发布版都会在 " +"comp.lang.python 和 comp.lang.python.announce 新闻组以及 Python 主页 " +"https://www.python.org/ 上进行公告;并会推送到 RSS 新闻源。" + +#: ../../faq/general.rst:226 +msgid "" +"You can also access the development version of Python through Git. See `The" +" Python Developer's Guide `_ for details." +msgstr "" +"你还可以通过 Git 访问 Python 的开发版。 请参阅 `Python 开发者指南 " +"`_ 了解详情。" + +#: ../../faq/general.rst:231 +msgid "How do I submit bug reports and patches for Python?" +msgstr "我应如何为 Python 提交错误报告和补丁?" + +#: ../../faq/general.rst:233 +msgid "" +"To report a bug or submit a patch, please use the Roundup installation at " +"https://bugs.python.org/." +msgstr "要报告错误或提交补丁,请使用安装于 https://bugs.python.org/ 上的 Roundup。" + +#: ../../faq/general.rst:236 +msgid "" +"You must have a Roundup account to report bugs; this makes it possible for " +"us to contact you if we have follow-up questions. It will also enable " +"Roundup to send you updates as we act on your bug. If you had previously " +"used SourceForge to report bugs to Python, you can obtain your Roundup " +"password through Roundup's `password reset procedure " +"`_." +msgstr "" +"你必须拥有一个 Roundup 账号才能报告错误;这样我们就可以在有后续问题时与你联系。 这也使得 Roundup " +"能在我们处理所报告的错误时向你发送更新消息。 如果你之前使用过 SourceForge 向 Python 报告错误,你可以通过 Roundup 的 " +"`密码重置操作 `_ 来获取你的 Roundup " +"密码。" + +#: ../../faq/general.rst:242 +msgid "" +"For more information on how Python is developed, consult `the Python " +"Developer's Guide `_." +msgstr "" +"有关 Python 开发流程的更多信息,请参阅 `Python 开发者指南 `_。" + +#: ../../faq/general.rst:247 +msgid "Are there any published articles about Python that I can reference?" +msgstr "是否有任何公开发表的 Python 相关文章可以供我参考引用?" + +#: ../../faq/general.rst:249 +msgid "It's probably best to cite your favorite book about Python." +msgstr "可能作为参考文献的最好方式还是引用你喜欢的 Python 相关书籍。" + +#: ../../faq/general.rst:251 +msgid "" +"The very first article about Python was written in 1991 and is now quite " +"outdated." +msgstr "第一篇有关 Python 的文章写于 1991 年,现在其内容已经相当过时了。" + +#: ../../faq/general.rst:254 +msgid "" +"Guido van Rossum and Jelke de Boer, \"Interactively Testing Remote Servers " +"Using the Python Programming Language\", CWI Quarterly, Volume 4, Issue 4 " +"(December 1991), Amsterdam, pp 283--303." +msgstr "" +"Guido van Rossum 与 Jelke de Boer, \"使用 Python 编程语言交互式地测试远程服务器\", CWI 季刊, 第 4" +" 卷, 第 4 期 (1991 年 12 月), 阿姆斯特丹, 第 283--303 页。" + +#: ../../faq/general.rst:260 +msgid "Are there any books on Python?" +msgstr "是否有任何 Python 相关的书籍?" + +#: ../../faq/general.rst:262 +msgid "" +"Yes, there are many, and more are being published. See the python.org wiki " +"at https://wiki.python.org/moin/PythonBooks for a list." +msgstr "" +"是的,相关的书籍很多,还有更多即将发行。 请访问 python.org 的 wiki 页面 " +"https://wiki.python.org/moin/PythonBooks 获取一份清单。" + +#: ../../faq/general.rst:265 +msgid "" +"You can also search online bookstores for \"Python\" and filter out the " +"Monty Python references; or perhaps search for \"Python\" and \"language\"." +msgstr "" +"你也可以到各大在线书店搜索 \"Python\" 并过滤掉对 Monty Python 的引用;或者也可以搜索 \"Python\" 加 " +"\"language\"。" + +#: ../../faq/general.rst:270 +msgid "Where in the world is www.python.org located?" +msgstr "www.python.org 具体位于世界上的哪个地点?" + +#: ../../faq/general.rst:272 +msgid "" +"The Python project's infrastructure is located all over the world and is " +"managed by the Python Infrastructure Team. Details `here " +"`__." +msgstr "" +"Python 项目的基础架构分布于世界各地并由 Python 基础架构团队负责管理。 详情请访问 `这里 " +"`__。" + +#: ../../faq/general.rst:277 +msgid "Why is it called Python?" +msgstr "为何命名为 Python?" + +#: ../../faq/general.rst:279 +msgid "" +"When he began implementing Python, Guido van Rossum was also reading the " +"published scripts from `\"Monty Python's Flying Circus\" " +"`__, a BBC comedy series from " +"the 1970s. Van Rossum thought he needed a name that was short, unique, and " +"slightly mysterious, so he decided to call the language Python." +msgstr "" +"在着手编写 Python 实现的时候,Guido van Rossum 同时还阅读了刚出版的 `\"Monty Python 的飞行马戏团\" " +"`__ 剧本,这是一部自 1970 年代开始播出的 BBC " +"系列喜剧。 Van Rossum 觉得他需要选择一个简短、独特而又略显神秘的名字,于是他决定将这个新语言命名为 Python。" + +#: ../../faq/general.rst:287 +msgid "Do I have to like \"Monty Python's Flying Circus\"?" +msgstr "我必须喜欢 \"Monty Python 的飞行马戏团\" 吗?" + +#: ../../faq/general.rst:289 +msgid "No, but it helps. :)" +msgstr "不必,但这对学习会有帮助。 :)" + +#: ../../faq/general.rst:293 +msgid "Python in the real world" +msgstr "现实世界中的 Python" + +#: ../../faq/general.rst:296 +msgid "How stable is Python?" +msgstr "Python 有多稳定?" + +#: ../../faq/general.rst:298 +msgid "" +"Very stable. New, stable releases have been coming out roughly every 6 to " +"18 months since 1991, and this seems likely to continue. As of version 3.9," +" Python will have a major new release every 12 months (:pep:`602`)." +msgstr "" +"非常稳定。 自 1991 年起大约每隔 6 到 18 个月就会推出新的稳定发布版,这种状态看来还还持续。 从 3.9 版开始,Python 将会每隔 " +"12 个月推出一个新的主要发布版 (:pep:`602`)。" + +#: ../../faq/general.rst:302 +msgid "" +"The developers issue \"bugfix\" releases of older versions, so the stability" +" of existing releases gradually improves. Bugfix releases, indicated by a " +"third component of the version number (e.g. 3.5.3, 3.6.2), are managed for " +"stability; only fixes for known problems are included in a bugfix release, " +"and it's guaranteed that interfaces will remain the same throughout a series" +" of bugfix releases." +msgstr "" +"开发者也会推出旧版本的“问题修正”发布版,因此现有发布版的稳定性还会逐步提升。 问题修正发布版会以版本号第三部分的数字来标示(例如 3.5.3, " +"3.6.2),用于稳定性的管理;只有对已知问题的修正会包含在问题修正发布版中,同一系列的问题修正发布版中的接口确定将会始终保持一致。" + +#: ../../faq/general.rst:309 +msgid "" +"The latest stable releases can always be found on the `Python download page " +"`_. There are two production-ready " +"versions of Python: 2.x and 3.x. The recommended version is 3.x, which is " +"supported by most widely used libraries. Although 2.x is still widely used," +" `it is not maintained anymore " +"`_." +msgstr "" +"最后的稳定版本总是可以在 `Python 下载页 `_ 中找到。 " +"有两个生产环境可用的 Python 版本:2.x 和 3.x。 推荐的版本是 3.x,大多数被广泛使用的库都支持它。 虽然 2.x " +"也仍然被广泛使用,但是 `它已经停止维护 `_。" + +#: ../../faq/general.rst:316 +msgid "How many people are using Python?" +msgstr "有多少人在使用 Python?" + +#: ../../faq/general.rst:318 +msgid "" +"There are probably millions of users, though it's difficult to obtain an " +"exact count." +msgstr "使用者应该数以百万计,但很难获得一个精确的数字。" + +#: ../../faq/general.rst:321 +msgid "" +"Python is available for free download, so there are no sales figures, and " +"it's available from many different sites and packaged with many Linux " +"distributions, so download statistics don't tell the whole story either." +msgstr "" +"Python 可以免费下载,因此并不存在销量数据,此外它也可以从许多不同网站获取,并且包含于许多 Linux " +"发行版之中,因此下载量统计同样无法完全说明问题。" + +#: ../../faq/general.rst:325 +msgid "" +"The comp.lang.python newsgroup is very active, but not all Python users post" +" to the group or even read it." +msgstr "comp.lang.python 新闻组非常活跃,但不是所有 Python 用户都会在新闻组发帖,许多人甚至不会阅读新闻组。" + +#: ../../faq/general.rst:330 +msgid "Have any significant projects been done in Python?" +msgstr "有哪些重要的项目是用 Python 开发的?" + +#: ../../faq/general.rst:332 +msgid "" +"See https://www.python.org/about/success for a list of projects that use " +"Python. Consulting the proceedings for `past Python conferences " +"`_ will reveal contributions " +"from many different companies and organizations." +msgstr "" +"请访问 https://www.python.org/about/success 查看使用了 Python 的项目列表。 阅览 `历次 Python " +"会议 `_ 的日程纪要可以看到许多不同公司和组织所做的贡献。" + +#: ../../faq/general.rst:337 +msgid "" +"High-profile Python projects include `the Mailman mailing list manager " +"`_ and `the Zope application server " +"`_. Several Linux distributions, most notably `Red Hat" +" `_, have written part or all of their installer and" +" system administration software in Python. Companies that use Python " +"internally include Google, Yahoo, and Lucasfilm Ltd." +msgstr "" +"高水准的 Python 项目包括 `Mailman 邮件列表管理器 `_ 和 `Zope 应用服务器 " +"`_。 多个 Linux 发行版,其中最著名的有 `Red Hat " +"`_ 均已使用 Python 来编写部分或全部的安装程序和系统管理软件。 在内部使用 Python " +"的大公司包括了 Google, Yahoo 以及 Lucasfilm 等。" + +#: ../../faq/general.rst:346 +msgid "What new developments are expected for Python in the future?" +msgstr "在未来可以期待 Python 将有什么新进展?" + +#: ../../faq/general.rst:348 +msgid "" +"See https://www.python.org/dev/peps/ for the Python Enhancement Proposals " +"(PEPs). PEPs are design documents describing a suggested new feature for " +"Python, providing a concise technical specification and a rationale. Look " +"for a PEP titled \"Python X.Y Release Schedule\", where X.Y is a version " +"that hasn't been publicly released yet." +msgstr "" +"请访问 https://www.python.org/dev/peps/ 查看 Python 增强提议(PEP)。 PEP 是为 Python " +"加入某种新特性的提议进行描述的设计文档,其中会提供简明的技术规格说明与基本原理。 可以查找标题为“Python X.Y Release " +"Schedule”的 PEP,其中 X.Y 是某个尚未公开发布的版本。" + +#: ../../faq/general.rst:354 +msgid "" +"New development is discussed on `the python-dev mailing list " +"`_." +msgstr "" +"新版本的开发会在 `python-dev 邮件列表 `_ 中进行讨论。" + +#: ../../faq/general.rst:359 +msgid "Is it reasonable to propose incompatible changes to Python?" +msgstr "提议对 Python 加入不兼容的更改是否合理?" + +#: ../../faq/general.rst:361 +msgid "" +"In general, no. There are already millions of lines of Python code around " +"the world, so any change in the language that invalidates more than a very " +"small fraction of existing programs has to be frowned upon. Even if you can" +" provide a conversion program, there's still the problem of updating all " +"documentation; many books have been written about Python, and we don't want " +"to invalidate them all at a single stroke." +msgstr "" +"通常来说是不合理的。 世界上已存在的 Python 代码数以亿计,因此,任何对该语言的更改即便仅会使得现有程序中极少的一部分失效也是难以令人接受的。 " +"就算你可以提供一个转换程序,也仍然存在需要更新全部文档的问题;另外还有大量已出版的 Python 书籍,我们不希望让它们在一瞬间全部变成废纸。" + +#: ../../faq/general.rst:368 +msgid "" +"Providing a gradual upgrade path is necessary if a feature has to be " +"changed. :pep:`5` describes the procedure followed for introducing backward-" +"incompatible changes while minimizing disruption for users." +msgstr "如果必须更改某个特性,则应该提供渐进式的升级路径。 :pep:`5` 描述了引入向后不兼容的更改所需遵循的流程,以尽可能减少对用户的干扰。" + +#: ../../faq/general.rst:374 +msgid "Is Python a good language for beginning programmers?" +msgstr "Python 是一种对编程初学者友好的语言吗?" + +#: ../../faq/general.rst:376 +msgid "Yes." +msgstr "是的。" + +#: ../../faq/general.rst:378 +msgid "" +"It is still common to start students with a procedural and statically typed " +"language such as Pascal, C, or a subset of C++ or Java. Students may be " +"better served by learning Python as their first language. Python has a very" +" simple and consistent syntax and a large standard library and, most " +"importantly, using Python in a beginning programming course lets students " +"concentrate on important programming skills such as problem decomposition " +"and data type design. With Python, students can be quickly introduced to " +"basic concepts such as loops and procedures. They can probably even work " +"with user-defined objects in their very first course." +msgstr "" +"从过程式、静态类型的编程语言例如 Pascal, C 或者 C++ 以及 Java 的某一子集开始引导学生入门仍然是常见的做法。 但以 Python " +"作为第一种编程语言进行学习对学生可能更有利。Python 具有非常简单和一致的语法和庞大的标准库,而且最重要的是,在编程入门教学中使用 Python " +"可以让学生专注于更重要的编程技能,例如问题分解与数据类型设计。 使用 Python,可以快速向学生介绍基本概念例如循环与过程等。 " +"他们甚至有可能在第一次课里就开始接触用户自定义对象。" + +#: ../../faq/general.rst:388 +msgid "" +"For a student who has never programmed before, using a statically typed " +"language seems unnatural. It presents additional complexity that the " +"student must master and slows the pace of the course. The students are " +"trying to learn to think like a computer, decompose problems, design " +"consistent interfaces, and encapsulate data. While learning to use a " +"statically typed language is important in the long term, it is not " +"necessarily the best topic to address in the students' first programming " +"course." +msgstr "" +"对于之前从未接触过编程的学生来说,使用静态类型语言会感觉不够自然。 这会给学生带来必须掌握的额外复杂性,并减慢教学的进度。 " +"学生需要尝试像计算机一样思考,分解问题,设计一致的接口并封装数据。 " +"虽然从长远来看,学习和使用一种静态类型语言是很重要的,但这并不是最适宜在学生的第一次编程课上就进行探讨的主题。" + +#: ../../faq/general.rst:396 +msgid "" +"Many other aspects of Python make it a good first language. Like Java, " +"Python has a large standard library so that students can be assigned " +"programming projects very early in the course that *do* something. " +"Assignments aren't restricted to the standard four-function calculator and " +"check balancing programs. By using the standard library, students can gain " +"the satisfaction of working on realistic applications as they learn the " +"fundamentals of programming. Using the standard library also teaches " +"students about code reuse. Third-party modules such as PyGame are also " +"helpful in extending the students' reach." +msgstr "" +"还有许多其他方面的特点使得 Python 成为很好的入门语言。 像 Java 一样,Python " +"拥有一个庞大的标准库,因此可以在课程非常早期的阶段就给学生布置一些 *实用* 的编程项目。 编程作业不必仅限于标准四则运算和账目检查程序。 " +"通过使用标准库,学生可以在学习编程基础知识的同时开发真正的应用,从而获得更大的满足感。 使用标准库还能使学生了解代码重用的概念。 而像 PyGame " +"这样的第三方模块同样有助于扩大学生的接触领域。" + +#: ../../faq/general.rst:405 +msgid "" +"Python's interactive interpreter enables students to test language features " +"while they're programming. They can keep a window with the interpreter " +"running while they enter their program's source in another window. If they " +"can't remember the methods for a list, they can do something like this::" +msgstr "" +"Python 的解释器使学生能够在编程时测试语言特性。 他们可以在一个窗口中输入程序源代码的同时开启一个解释器运行窗口。 " +"如果他们不记得列表有哪些方法,他们这以这样做::" + +#: ../../faq/general.rst:434 +msgid "" +"With the interpreter, documentation is never far from the student as they " +"are programming." +msgstr "通过使用解释器,学生编写程序时参考文档总是能伴随在他们身边。" + +#: ../../faq/general.rst:437 +msgid "" +"There are also good IDEs for Python. IDLE is a cross-platform IDE for " +"Python that is written in Python using Tkinter. PythonWin is a Windows-" +"specific IDE. Emacs users will be happy to know that there is a very good " +"Python mode for Emacs. All of these programming environments provide syntax" +" highlighting, auto-indenting, and access to the interactive interpreter " +"while coding. Consult `the Python wiki " +"`_ for a full list of Python " +"editing environments." +msgstr "" +"Python 还拥有很好的 IDE。 IDLE 是一个跨平台的 Python IDE,它基于 Tkinter 库,使用 Python 语言编写。 " +"PythonWin 是一个 Windows 专属的 IDE。 Emacs 用户将高兴地了解到 Emacs 具有非常好的 Python 模式。 " +"所有这些编程环境都提供语法高亮,自动缩进以及在编写代码时使用交互式解释器等功能。 请访问 `Python wiki " +"`_ 查看 Python 编程环境的完整列表。" + +#: ../../faq/general.rst:445 +msgid "" +"If you want to discuss Python's use in education, you may be interested in " +"joining `the edu-sig mailing list " +"`_." +msgstr "" +"如果你想要讨论 Python 在教育中的使用,你可能会有兴趣加入 `edu-sig 邮件列表 " +"`_。" diff --git a/faq/gui.po b/faq/gui.po new file mode 100644 index 000000000..4ca9ec56d --- /dev/null +++ b/faq/gui.po @@ -0,0 +1,154 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) 2001-2022, Python Software Foundation +# This file is distributed under the same license as the Python package. +# FIRST AUTHOR , YEAR. +# +# Translators: +# dgy18787 , 2019 +# Azuk 443 , 2019 +# Kade For, 2019 +# Freesand Leo , 2021 +# Alpha Du , 2022 +# +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: Python 3.9\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2022-11-04 14:34+0000\n" +"PO-Revision-Date: 2017-02-16 17:43+0000\n" +"Last-Translator: Alpha Du , 2022\n" +"Language-Team: Chinese (China) (https://www.transifex.com/python-doc/teams/5390/zh_CN/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: zh_CN\n" +"Plural-Forms: nplurals=1; plural=0;\n" + +#: ../../faq/gui.rst:5 +msgid "Graphic User Interface FAQ" +msgstr "图形用户界面(GUI)常见问题" + +#: ../../faq/gui.rst:8 +msgid "Contents" +msgstr "目录" + +#: ../../faq/gui.rst:15 +msgid "General GUI Questions" +msgstr "图形界面常见问题" + +#: ../../faq/gui.rst:18 +msgid "What GUI toolkits exist for Python?" +msgstr "Python 有哪些 GUI 工具包?" + +#: ../../faq/gui.rst:20 +msgid "" +"Standard builds of Python include an object-oriented interface to the Tcl/Tk" +" widget set, called :ref:`tkinter `. This is probably the easiest " +"to install (since it comes included with most `binary distributions " +"`_ of Python) and use. For more info " +"about Tk, including pointers to the source, see the `Tcl/Tk home page " +"`_. Tcl/Tk is fully portable to the macOS, Windows, and" +" Unix platforms." +msgstr "" +"Python 的标准构建包括一个指向 Tcl/Tk 部件集的面向对象的接口,称为 :ref:`tkinter ` 。 " +"这可能是最容易安装(因为它包含在大多数 Python 的 `二进制发行版 `_ " +"中)和使用的。关于 Tk 的更多信息,包括指向源代码的信息,见 `Tcl/Tk 主页 `_ 。 Tcl/Tk " +"可以完全移植到 macOS 、 Windows 和 Unix 平台。" + +#: ../../faq/gui.rst:28 +msgid "" +"Depending on what platform(s) you are aiming at, there are also several " +"alternatives. A `list of cross-platform " +"`_ " +"and `platform-specific " +"`_" +" GUI frameworks can be found on the python wiki." +msgstr "" +"存在多种选项,具体取决于你的目标平台。 Python Wiki 上提供了一个 `跨平台 " +"`_ 和 " +"`平台专属 `_ 的 GUI 框架列表。" + +#: ../../faq/gui.rst:36 +msgid "Tkinter questions" +msgstr "有关Tkinter的问题" + +#: ../../faq/gui.rst:39 +msgid "How do I freeze Tkinter applications?" +msgstr "我怎样“冻结”Tkinter程序?" + +#: ../../faq/gui.rst:41 +msgid "" +"Freeze is a tool to create stand-alone applications. When freezing Tkinter " +"applications, the applications will not be truly stand-alone, as the " +"application will still need the Tcl and Tk libraries." +msgstr "" +"Freeze是一个用来创建独立应用程序的工具。 当冻结(freeze) " +"Tkinter程序时,程序并不是真的能够独立运行,因为程序仍然需要Tcl和Tk库。" + +#: ../../faq/gui.rst:45 +msgid "" +"One solution is to ship the application with the Tcl and Tk libraries, and " +"point to them at run-time using the :envvar:`TCL_LIBRARY` and " +":envvar:`TK_LIBRARY` environment variables." +msgstr "" +"一种解决方法是将程序与 Tcl 和 Tk 库一同发布,并且在运行时使用环境变量 :envvar:`TCL_LIBRARY` 和 " +":envvar:`TK_LIBRARY` 指向他们的位置。" + +#: ../../faq/gui.rst:49 +msgid "" +"To get truly stand-alone applications, the Tcl scripts that form the library" +" have to be integrated into the application as well. One tool supporting " +"that is SAM (stand-alone modules), which is part of the Tix distribution " +"(http://tix.sourceforge.net/)." +msgstr "" +"为了获得真正能独立运行的应用程序,来自库里的 Tcl 脚本也需要被整合进应用程序。 一个做这种事情的工具叫 SAM (stand-alone " +"modules,独立模块) ,它是 Tix distribution (http://tix.sourceforge.net/) 的一部分。" + +#: ../../faq/gui.rst:54 +msgid "" +"Build Tix with SAM enabled, perform the appropriate call to " +":c:func:`Tclsam_init`, etc. inside Python's :file:`Modules/tkappinit.c`, and" +" link with libtclsam and libtksam (you might include the Tix libraries as " +"well)." +msgstr "" +"在启用 SAM 时编译 Tix ,在 Python 文件 :file:`Modules/tkappinit.c` 中执行对 " +":c:func:`Tclsam_init` 等的适当调用,并且将程序与 libtclsam 和 libtksam 相链接(可能也要包括 Tix 的库)。" + +#: ../../faq/gui.rst:61 +msgid "Can I have Tk events handled while waiting for I/O?" +msgstr "在等待 I/O 操作时能够处理 Tk 事件吗?" + +#: ../../faq/gui.rst:63 +msgid "" +"On platforms other than Windows, yes, and you don't even need threads! But " +"you'll have to restructure your I/O code a bit. Tk has the equivalent of " +"Xt's :c:func:`XtAddInput()` call, which allows you to register a callback " +"function which will be called from the Tk mainloop when I/O is possible on a" +" file descriptor. See :ref:`tkinter-file-handlers`." +msgstr "" +"在 Windows 以外的其他平台上可以,你甚至不需要使用线程! 但是你必须稍微修改一下你的 I/O 代码。 Tk 有与 Xt 的 " +":c:func:`XtAddInput()` 对应的调用,它允许你注册一个回调函数,当一个文件描述符可以进行 I/O 操作的时候,Tk " +"主循环将会调用这个回调函数。 参见 :ref:`tkinter-file-handlers`。" + +#: ../../faq/gui.rst:71 +msgid "I can't get key bindings to work in Tkinter: why?" +msgstr "在Tkinter中键绑定不工作:为什么?" + +#: ../../faq/gui.rst:73 +msgid "" +"An often-heard complaint is that event handlers bound to events with the " +":meth:`bind` method don't get handled even when the appropriate key is " +"pressed." +msgstr "经常听到的抱怨是:已经通过 :meth:`bind` 方法绑定了事件的处理程序,但是,当按下相关的按键后,这个处理程序却没有执行。" + +#: ../../faq/gui.rst:76 +msgid "" +"The most common cause is that the widget to which the binding applies " +"doesn't have \"keyboard focus\". Check out the Tk documentation for the " +"focus command. Usually a widget is given the keyboard focus by clicking in " +"it (but not for labels; see the takefocus option)." +msgstr "" +"最常见的原因是,那个绑定的控件没有“键盘焦点”。请在 Tk 文档中查找 focus " +"指令。通常一个控件要获得“键盘焦点”,需要点击那个控件(而不是标签;请查看 takefocus 选项)。" diff --git a/faq/index.po b/faq/index.po new file mode 100644 index 000000000..28915894d --- /dev/null +++ b/faq/index.po @@ -0,0 +1,26 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) 2001-2022, Python Software Foundation +# This file is distributed under the same license as the Python package. +# FIRST AUTHOR , YEAR. +# +# Translators: +# Freesand Leo , 2019 +# +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: Python 3.9\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2022-11-04 14:34+0000\n" +"PO-Revision-Date: 2017-02-16 17:43+0000\n" +"Last-Translator: Freesand Leo , 2019\n" +"Language-Team: Chinese (China) (https://www.transifex.com/python-doc/teams/5390/zh_CN/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: zh_CN\n" +"Plural-Forms: nplurals=1; plural=0;\n" + +#: ../../faq/index.rst:5 +msgid "Python Frequently Asked Questions" +msgstr "Python 常见问题" diff --git a/faq/installed.po b/faq/installed.po new file mode 100644 index 000000000..ef5374e88 --- /dev/null +++ b/faq/installed.po @@ -0,0 +1,126 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) 2001-2022, Python Software Foundation +# This file is distributed under the same license as the Python package. +# FIRST AUTHOR , YEAR. +# +# Translators: +# Konge , 2019 +# Alpha Du , 2022 +# +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: Python 3.9\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2022-11-04 14:34+0000\n" +"PO-Revision-Date: 2017-02-16 17:43+0000\n" +"Last-Translator: Alpha Du , 2022\n" +"Language-Team: Chinese (China) (https://www.transifex.com/python-doc/teams/5390/zh_CN/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: zh_CN\n" +"Plural-Forms: nplurals=1; plural=0;\n" + +#: ../../faq/installed.rst:3 +msgid "\"Why is Python Installed on my Computer?\" FAQ" +msgstr "“为什么我的电脑上安装了 Python ?”" + +#: ../../faq/installed.rst:6 +msgid "What is Python?" +msgstr "什么是Python?" + +#: ../../faq/installed.rst:8 +msgid "" +"Python is a programming language. It's used for many different " +"applications. It's used in some high schools and colleges as an introductory" +" programming language because Python is easy to learn, but it's also used by" +" professional software developers at places such as Google, NASA, and " +"Lucasfilm Ltd." +msgstr "" +"Python 是一种程序语言,被许多应用程序使用。它不仅因易学而在许多高校用于编程入门,还被工作于 Google、NASA " +"和卢卡斯影业等公司的软件开发人员使用。" + +#: ../../faq/installed.rst:13 +msgid "" +"If you wish to learn more about Python, start with the `Beginner's Guide to " +"Python `_." +msgstr "" +"如果你想学习更多 Python,看看 `Beginner's Guide to Python " +"`_." + +#: ../../faq/installed.rst:18 +msgid "Why is Python installed on my machine?" +msgstr "为什么我的电脑上安装了 Python ?" + +#: ../../faq/installed.rst:20 +msgid "" +"If you find Python installed on your system but don't remember installing " +"it, there are several possible ways it could have gotten there." +msgstr "如果你不记得你曾主动安装过 Python,但它却出现在了你的电脑上,这里有一些可能的原因。" + +#: ../../faq/installed.rst:23 +msgid "" +"Perhaps another user on the computer wanted to learn programming and " +"installed it; you'll have to figure out who's been using the machine and " +"might have installed it." +msgstr "可能是这台电脑的其他用户因想学习编程而安装了它,你得琢磨一下谁用过这台电脑并安装了 Python。" + +#: ../../faq/installed.rst:26 +msgid "" +"A third-party application installed on the machine might have been written " +"in Python and included a Python installation. There are many such " +"applications, from GUI programs to network servers and administrative " +"scripts." +msgstr "" +"电脑上安装的第三方应用程序可能由 Python 写成并附带了一份 Python。这样的应用程序有很多,例如GUI程序、网络服务器、管理脚本等。" + +#: ../../faq/installed.rst:29 +msgid "" +"Some Windows machines also have Python installed. At this writing we're " +"aware of computers from Hewlett-Packard and Compaq that include Python. " +"Apparently some of HP/Compaq's administrative tools are written in Python." +msgstr "" +"一些 Windows 可能预装了 Python。在撰写本文时,我们了解到 Hewlett-Packard 和 Compaq " +"的计算机包含Python。显然,HP/Compaq 的一些管理工具是用 Python 编写的。" + +#: ../../faq/installed.rst:32 +msgid "" +"Many Unix-compatible operating systems, such as macOS and some Linux " +"distributions, have Python installed by default; it's included in the base " +"installation." +msgstr "许多与Unix兼容的操作系统,如macOS和一些Linux发行版,都默认安装了Python;它包含在基本安装中。" + +#: ../../faq/installed.rst:38 +msgid "Can I delete Python?" +msgstr "我能删除 Python 吗?" + +#: ../../faq/installed.rst:40 +msgid "That depends on where Python came from." +msgstr "这取决于所安装 Python 的来源" + +#: ../../faq/installed.rst:42 +msgid "" +"If someone installed it deliberately, you can remove it without hurting " +"anything. On Windows, use the Add/Remove Programs icon in the Control " +"Panel." +msgstr "" +"如果有人主动安装了 Python,你可以在不影响其它程序的情况下安全移除它。在 Windows 中,可使用“控制面板”中的“添加/删除程序”卸载。" + +#: ../../faq/installed.rst:45 +msgid "" +"If Python was installed by a third-party application, you can also remove " +"it, but that application will no longer work. You should use that " +"application's uninstaller rather than removing Python directly." +msgstr "" +"如果 Python 来源于第三方应用程序,你也能删除它,但那些程序将不能正常工作。你应该使用那些应用程序的卸载器而不是直接删除 Python。" + +#: ../../faq/installed.rst:49 +msgid "" +"If Python came with your operating system, removing it is not recommended. " +"If you remove it, whatever tools were written in Python will no longer run, " +"and some of them might be important to you. Reinstalling the whole system " +"would then be required to fix things again." +msgstr "" +"如果 Python 来自于你的操作系统,不推荐删除!如果删除了它,任何用 Python " +"写成的工具将无法工作,其中某些工具对于你来说可能十分重要。你甚至可能需要重装整个系统来修复因删除 Python 留下的烂摊子。" diff --git a/faq/library.po b/faq/library.po new file mode 100644 index 000000000..056ed6914 --- /dev/null +++ b/faq/library.po @@ -0,0 +1,959 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) 2001-2022, Python Software Foundation +# This file is distributed under the same license as the Python package. +# FIRST AUTHOR , YEAR. +# +# Translators: +# cissoid , 2018 +# ppcfish , 2019 +# Freesand Leo , 2021 +# Alpha Du , 2022 +# +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: Python 3.9\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2022-11-04 14:34+0000\n" +"PO-Revision-Date: 2017-02-16 17:43+0000\n" +"Last-Translator: Alpha Du , 2022\n" +"Language-Team: Chinese (China) (https://www.transifex.com/python-doc/teams/5390/zh_CN/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: zh_CN\n" +"Plural-Forms: nplurals=1; plural=0;\n" + +#: ../../faq/library.rst:5 +msgid "Library and Extension FAQ" +msgstr "代码库和插件 FAQ" + +#: ../../faq/library.rst:8 +msgid "Contents" +msgstr "目录" + +#: ../../faq/library.rst:12 +msgid "General Library Questions" +msgstr "通用的代码库问题" + +#: ../../faq/library.rst:15 +msgid "How do I find a module or application to perform task X?" +msgstr "如何找到可以用来做 XXX 的模块或应用?" + +#: ../../faq/library.rst:17 +msgid "" +"Check :ref:`the Library Reference ` to see if there's a " +"relevant standard library module. (Eventually you'll learn what's in the " +"standard library and will be able to skip this step.)" +msgstr "在 :ref:`代码库参考 ` 中查找是否有适合的标准库模块。(如果你已经了解标准库的内容,可以跳过这一步)" + +#: ../../faq/library.rst:21 +msgid "" +"For third-party packages, search the `Python Package Index " +"`_ or try `Google `_ or another " +"Web search engine. Searching for \"Python\" plus a keyword or two for your " +"topic of interest will usually find something helpful." +msgstr "" +"对于第三方软件包,请搜索 `Python Package Index `_ 或是 `Google " +"`_ 等其他搜索引擎。用“Python”加上一两个你需要的关键字通常会找到有用的东西。" + +#: ../../faq/library.rst:28 +msgid "Where is the math.py (socket.py, regex.py, etc.) source file?" +msgstr "math.py(socket.py,regex.py 等)的源文件在哪?" + +#: ../../faq/library.rst:30 +msgid "" +"If you can't find a source file for a module it may be a built-in or " +"dynamically loaded module implemented in C, C++ or other compiled language. " +"In this case you may not have the source file or it may be something like " +":file:`mathmodule.c`, somewhere in a C source directory (not on the Python " +"Path)." +msgstr "" +"如果找不到模块的源文件,可能它是一个内建的模块,或是使用 C,C++ 或其他编译型语言实现的动态加载模块。这种情况下可能是没有源码文件的,类似 " +":file:`mathmodule.c` 这样的文件会存放在 C 代码目录中(但不在 Python 目录中)。" + +#: ../../faq/library.rst:35 +msgid "There are (at least) three kinds of modules in Python:" +msgstr "Python 中(至少)有三类模块:" + +#: ../../faq/library.rst:37 +msgid "modules written in Python (.py);" +msgstr "使用 Python 编写的模块(.py);" + +#: ../../faq/library.rst:38 +msgid "" +"modules written in C and dynamically loaded (.dll, .pyd, .so, .sl, etc);" +msgstr "使用 C 编写的动态加载模块(.dll,.pyd,.so,.sl 等);" + +#: ../../faq/library.rst:39 +msgid "" +"modules written in C and linked with the interpreter; to get a list of " +"these, type::" +msgstr "使用 C 编写并链接到解释器的模块,要获取此列表,输入:" + +#: ../../faq/library.rst:47 +msgid "How do I make a Python script executable on Unix?" +msgstr "在 Unix 中怎样让 Python 脚本可执行?" + +#: ../../faq/library.rst:49 +msgid "" +"You need to do two things: the script file's mode must be executable and the" +" first line must begin with ``#!`` followed by the path of the Python " +"interpreter." +msgstr "你需要做两件事:文件必须是可执行的,并且第一行需要以 ``#!`` 开头,后面跟上 Python 解释器的路径。" + +#: ../../faq/library.rst:53 +msgid "" +"The first is done by executing ``chmod +x scriptfile`` or perhaps ``chmod " +"755 scriptfile``." +msgstr "第一点可以用执行 ``chmod +x scriptfile`` 或是 ``chmod 755 scriptfile`` 做到。" + +#: ../../faq/library.rst:56 +msgid "" +"The second can be done in a number of ways. The most straightforward way is" +" to write ::" +msgstr "第二点有很多种做法,最直接的方式是:" + +#: ../../faq/library.rst:61 +msgid "" +"as the very first line of your file, using the pathname for where the Python" +" interpreter is installed on your platform." +msgstr "在文件第一行,使用你所在平台上的 Python 解释器的路径。" + +#: ../../faq/library.rst:64 +msgid "" +"If you would like the script to be independent of where the Python " +"interpreter lives, you can use the :program:`env` program. Almost all Unix " +"variants support the following, assuming the Python interpreter is in a " +"directory on the user's :envvar:`PATH`::" +msgstr "" +"如果你希望脚本不依赖 Python 解释器的具体路径,你也可以使用 :program:`env` 程序。假设你的 Python " +"解释器所在目录已经添加到了 :envvar:`PATH` 环境变量中,几乎所有的类 Unix 系统都支持下面的写法:" + +#: ../../faq/library.rst:71 +msgid "" +"*Don't* do this for CGI scripts. The :envvar:`PATH` variable for CGI " +"scripts is often very minimal, so you need to use the actual absolute " +"pathname of the interpreter." +msgstr "" +"*不要* 在 CGI 脚本中这样做。CGI 脚本的 :envvar:`PATH` 环境变量通常会非常精简,所以你必须使用解释器的完整绝对路径。" + +#: ../../faq/library.rst:75 +msgid "" +"Occasionally, a user's environment is so full that the " +":program:`/usr/bin/env` program fails; or there's no env program at all. In" +" that case, you can try the following hack (due to Alex Rezinsky):" +msgstr "" +"有时候,用户的环境变量如果太长,可能会导致 :program:`/usr/bin/env` 执行失败;又或者甚至根本就不存在 env " +"程序。在这种情况下,你可以尝试使用下面的 hack 方法(来自 Alex Rezinsky):" + +#: ../../faq/library.rst:86 +msgid "" +"The minor disadvantage is that this defines the script's __doc__ string. " +"However, you can fix that by adding ::" +msgstr "这样做有一个小小的缺点,它会定义脚本的 __doc__ 字符串。不过可以这样修复:" + +#: ../../faq/library.rst:94 +msgid "Is there a curses/termcap package for Python?" +msgstr "Python 中有 curses/termcap 包吗?" + +#: ../../faq/library.rst:98 +msgid "" +"For Unix variants: The standard Python source distribution comes with a " +"curses module in the :source:`Modules` subdirectory, though it's not " +"compiled by default. (Note that this is not available in the Windows " +"distribution -- there is no curses module for Windows.)" +msgstr "" +"对于类 Unix 系统:标准 Python 源码发行版会在 :source:`Modules` 子目录中附带 curses " +"模块,但默认并不会编译。(注意:在 Windows 平台下不可用 —— Windows 中没有 curses 模块。)" + +#: ../../faq/library.rst:103 +msgid "" +"The :mod:`curses` module supports basic curses features as well as many " +"additional functions from ncurses and SYSV curses such as colour, " +"alternative character set support, pads, and mouse support. This means the " +"module isn't compatible with operating systems that only have BSD curses, " +"but there don't seem to be any currently maintained OSes that fall into this" +" category." +msgstr "" +":mod:`curses` 模块支持基本的 curses 特性,同时也支持 ncurses 和 SYSV curses " +"中的很多额外功能,比如颜色、不同的字符集支持、填充和鼠标支持。这意味着这个模块不兼容只有 BSD curses " +"模块的操作系统,但是目前仍在维护的系统应该都不会存在这种情况。" + +#: ../../faq/library.rst:111 +msgid "Is there an equivalent to C's onexit() in Python?" +msgstr "Python 中存在类似 C 的 onexit() 函数的东西吗?" + +#: ../../faq/library.rst:113 +msgid "" +"The :mod:`atexit` module provides a register function that is similar to C's" +" :c:func:`onexit`." +msgstr ":mod:`atexit` 模块提供了一个与 C 的 :c:func:`onexit` 函数类似的注册函数。" + +#: ../../faq/library.rst:118 +msgid "Why don't my signal handlers work?" +msgstr "为什么我的信号处理函数不能工作?" + +#: ../../faq/library.rst:120 +msgid "" +"The most common problem is that the signal handler is declared with the " +"wrong argument list. It is called as ::" +msgstr "最常见的问题是信号处理函数没有正确定义参数列表。它会被这样调用:" + +#: ../../faq/library.rst:125 +msgid "so it should be declared with two parameters::" +msgstr "因此它应当声明为带有两个形参::" + +#: ../../faq/library.rst:132 +msgid "Common tasks" +msgstr "通用任务" + +#: ../../faq/library.rst:135 +msgid "How do I test a Python program or component?" +msgstr "怎样测试 Python 程序或组件?" + +#: ../../faq/library.rst:137 +msgid "" +"Python comes with two testing frameworks. The :mod:`doctest` module finds " +"examples in the docstrings for a module and runs them, comparing the output " +"with the expected output given in the docstring." +msgstr "" +"Python 带有两个测试框架。:mod:`doctest` 模块从模块的 docstring 中寻找示例并执行,对比输出是否与 docstring " +"中给出的是否一致。" + +#: ../../faq/library.rst:141 +msgid "" +"The :mod:`unittest` module is a fancier testing framework modelled on Java " +"and Smalltalk testing frameworks." +msgstr ":mod:`unittest` 模块是一个模仿 Java 和 Smalltalk 测试框架的更棒的测试框架。" + +#: ../../faq/library.rst:144 +msgid "" +"To make testing easier, you should use good modular design in your program. " +"Your program should have almost all functionality encapsulated in either " +"functions or class methods -- and this sometimes has the surprising and " +"delightful effect of making the program run faster (because local variable " +"accesses are faster than global accesses). Furthermore the program should " +"avoid depending on mutating global variables, since this makes testing much " +"more difficult to do." +msgstr "" +"为了使测试更容易,你应该在程序中使用良好的模块化设计。程序中的绝大多数功能都应该用函数或类方法封装 —— " +"有时这样做会有额外惊喜,程序会运行得更快(因为局部变量比全局变量访问要快)。除此之外,程序应该避免依赖可变的局部变量,这会使得测试困难许多。" + +#: ../../faq/library.rst:152 +msgid "The \"global main logic\" of your program may be as simple as ::" +msgstr "程序的“全局主逻辑”应该尽量简单:" + +#: ../../faq/library.rst:157 +msgid "at the bottom of the main module of your program." +msgstr "并放置在程序主模块的最后面。" + +#: ../../faq/library.rst:159 +msgid "" +"Once your program is organized as a tractable collection of function and " +"class behaviours, you should write test functions that exercise the " +"behaviours. A test suite that automates a sequence of tests can be " +"associated with each module. This sounds like a lot of work, but since " +"Python is so terse and flexible it's surprisingly easy. You can make coding" +" much more pleasant and fun by writing your test functions in parallel with " +"the \"production code\", since this makes it easy to find bugs and even " +"design flaws earlier." +msgstr "" +"一旦你的程序已经组织为一个函数和类行为的有完整集合,你就应该编写测试函数来检测这些行为。 可以将自动执行一系列测试的测试集关联到每个模块。 " +"这听起来似乎需要大量的工作,但是由于 Python 是如此简洁灵活因此它会极其容易。 " +"你可以通过与“生产代码”同步编写测试函数使编程更为愉快和有趣,因为这将更容易并更早发现代码问题甚至设计缺陷。" + +#: ../../faq/library.rst:167 +msgid "" +"\"Support modules\" that are not intended to be the main module of a program" +" may include a self-test of the module. ::" +msgstr "程序主模块之外的其他“辅助模块”中可以增加自测试的入口。" + +#: ../../faq/library.rst:173 +msgid "" +"Even programs that interact with complex external interfaces may be tested " +"when the external interfaces are unavailable by using \"fake\" interfaces " +"implemented in Python." +msgstr "通过使用 Python 实现的“假”接口,即使是需要与复杂的外部接口交互的程序也可以在外部接口不可用时进行测试。" + +#: ../../faq/library.rst:179 +msgid "How do I create documentation from doc strings?" +msgstr "怎样用 docstring 创建文档?" + +#: ../../faq/library.rst:181 +msgid "" +"The :mod:`pydoc` module can create HTML from the doc strings in your Python " +"source code. An alternative for creating API documentation purely from " +"docstrings is `epydoc `_. `Sphinx " +"`_ can also include docstring content." +msgstr "" +":mod:`pydoc` 模块可以用 Python 源码中的 docstring 创建 HTML 文件。也可以使用 `epydoc " +"`_ 来只通过 docstring 创建 API 文档。`Sphinx " +"`_ 也可以引入 docstring 的内容。" + +#: ../../faq/library.rst:188 +msgid "How do I get a single keypress at a time?" +msgstr "怎样一次只获取一个按键?" + +#: ../../faq/library.rst:190 +msgid "" +"For Unix variants there are several solutions. It's straightforward to do " +"this using curses, but curses is a fairly large module to learn." +msgstr "在类 Unix 系统中有多种方案。最直接的方法是使用 curses,但是 curses 模块太大了,难以学习。" + +#: ../../faq/library.rst:234 +msgid "Threads" +msgstr "线程相关" + +#: ../../faq/library.rst:237 +msgid "How do I program using threads?" +msgstr "程序中怎样使用线程?" + +#: ../../faq/library.rst:239 +msgid "" +"Be sure to use the :mod:`threading` module and not the :mod:`_thread` " +"module. The :mod:`threading` module builds convenient abstractions on top of" +" the low-level primitives provided by the :mod:`_thread` module." +msgstr "" +"一定要使用 :mod:`threading` 模块,不要使用 :mod:`_thread` 模块。:mod:`threading` 模块对 " +":mod:`_thread` 模块提供的底层线程原语做了更易用的抽象。" + +#: ../../faq/library.rst:245 +msgid "None of my threads seem to run: why?" +msgstr "我的线程都没有运行,为什么?" + +#: ../../faq/library.rst:247 +msgid "" +"As soon as the main thread exits, all threads are killed. Your main thread " +"is running too quickly, giving the threads no time to do any work." +msgstr "一旦主线程退出,所有的子线程都会被杀掉。你的主线程运行得太快了,子线程还没来得及工作。" + +#: ../../faq/library.rst:250 +msgid "" +"A simple fix is to add a sleep to the end of the program that's long enough " +"for all the threads to finish::" +msgstr "简单的解决方法是在程序中加一个时间足够长的 sleep,让子线程能够完成运行。" + +#: ../../faq/library.rst:265 +msgid "" +"But now (on many platforms) the threads don't run in parallel, but appear to" +" run sequentially, one at a time! The reason is that the OS thread " +"scheduler doesn't start a new thread until the previous thread is blocked." +msgstr "但目前(在许多平台上)线程不是并行运行的,而是按顺序依次执行!原因是系统线程调度器在前一个线程阻塞之前不会启动新线程。" + +#: ../../faq/library.rst:269 +msgid "A simple fix is to add a tiny sleep to the start of the run function::" +msgstr "简单的解决方法是在运行函数的开始处加一个时间很短的 sleep。" + +#: ../../faq/library.rst:282 +msgid "" +"Instead of trying to guess a good delay value for :func:`time.sleep`, it's " +"better to use some kind of semaphore mechanism. One idea is to use the " +":mod:`queue` module to create a queue object, let each thread append a token" +" to the queue when it finishes, and let the main thread read as many tokens " +"from the queue as there are threads." +msgstr "" +"比起用 :func:`time.sleep` 猜一个合适的等待时间,使用信号量机制会更好些。有一个办法是使用 :mod:`queue` 模块创建一个 " +"queue 对象,让每一个线程在运行结束时 append 一个令牌到 queue 对象中,主线程中从 queue " +"对象中读取与线程数量一致的令牌数量即可。" + +#: ../../faq/library.rst:290 +msgid "How do I parcel out work among a bunch of worker threads?" +msgstr "如何将任务分配给多个工作线程?" + +#: ../../faq/library.rst:292 +msgid "" +"The easiest way is to use the :mod:`concurrent.futures` module, especially " +"the :mod:`~concurrent.futures.ThreadPoolExecutor` class." +msgstr "" +"最简单的方式是使用 :mod:`concurrent.futures` 模块,特别是其中的 " +":mod:`~concurrent.futures.ThreadPoolExecutor` 类。" + +#: ../../faq/library.rst:295 +msgid "" +"Or, if you want fine control over the dispatching algorithm, you can write " +"your own logic manually. Use the :mod:`queue` module to create a queue " +"containing a list of jobs. The :class:`~queue.Queue` class maintains a list" +" of objects and has a ``.put(obj)`` method that adds items to the queue and " +"a ``.get()`` method to return them. The class will take care of the locking" +" necessary to ensure that each job is handed out exactly once." +msgstr "" +"或者,如果你想更好地控制分发算法,你也可以自己写逻辑实现。使用 :mod:`queue` " +"模块来创建任务列表队列。:class:`~queue.Queue` 类维护一个了一个存有对象的列表,提供了 ``.put(obj)`` " +"方法添加元素,并且可以用 ``.get()`` 方法获取元素。这个类会使用必要的加锁操作,以此确保每个任务只会执行一次。" + +#: ../../faq/library.rst:302 +msgid "Here's a trivial example::" +msgstr "这是一个简单的例子:" + +#: ../../faq/library.rst:340 +msgid "When run, this will produce the following output:" +msgstr "运行时会产生如下输出:" + +#: ../../faq/library.rst:358 +msgid "" +"Consult the module's documentation for more details; the " +":class:`~queue.Queue` class provides a featureful interface." +msgstr "查看模块的文档以获取更多信息;:class:`~queue.Queue` 类提供了多种接口。" + +#: ../../faq/library.rst:363 +msgid "What kinds of global value mutation are thread-safe?" +msgstr "怎样修改全局变量是线程安全的?" + +#: ../../faq/library.rst:365 +msgid "" +"A :term:`global interpreter lock` (GIL) is used internally to ensure that " +"only one thread runs in the Python VM at a time. In general, Python offers " +"to switch among threads only between bytecode instructions; how frequently " +"it switches can be set via :func:`sys.setswitchinterval`. Each bytecode " +"instruction and therefore all the C implementation code reached from each " +"instruction is therefore atomic from the point of view of a Python program." +msgstr "" +"Python VM 内部会使用 :term:`global interpreter lock` (GIL)来确保同一时间只有一个线程运行。通常 " +"Python 只会在字节码指令之间切换线程;切换的频率可以通过设置 :func:`sys.setswitchinterval` 指定。从 Python " +"程序的角度来看,每一条字节码指令以及每一条指令对应的 C 代码实现都是原子的。" + +#: ../../faq/library.rst:372 +msgid "" +"In theory, this means an exact accounting requires an exact understanding of" +" the PVM bytecode implementation. In practice, it means that operations on " +"shared variables of built-in data types (ints, lists, dicts, etc) that " +"\"look atomic\" really are." +msgstr "" +"理论上说,具体的结果要看具体的 PVM 字节码实现对指令的解释。而实际上,对内建类型(int,list,dict " +"等)的共享变量的“类原子”操作都是原子的。" + +#: ../../faq/library.rst:377 +msgid "" +"For example, the following operations are all atomic (L, L1, L2 are lists, " +"D, D1, D2 are dicts, x, y are objects, i, j are ints)::" +msgstr "举例来说,下面的操作是原子的(L、L1、L2 是列表,D、D1、D2 是字典,x、y 是对象,i,j 是 int 变量):" + +#: ../../faq/library.rst:392 +msgid "These aren't::" +msgstr "这些不是原子的:" + +#: ../../faq/library.rst:399 +msgid "" +"Operations that replace other objects may invoke those other objects' " +":meth:`__del__` method when their reference count reaches zero, and that can" +" affect things. This is especially true for the mass updates to " +"dictionaries and lists. When in doubt, use a mutex!" +msgstr "" +"覆盖其他对象的操作会在其他对象的引用计数变成 0 时触发其 :meth:`__del__` " +"方法,这可能会产生一些影响。对字典和列表进行大量操作时尤其如此。如果有疑问的话,使用互斥锁!" + +#: ../../faq/library.rst:406 +msgid "Can't we get rid of the Global Interpreter Lock?" +msgstr "不能删除全局解释器锁吗?" + +#: ../../faq/library.rst:410 +msgid "" +"The :term:`global interpreter lock` (GIL) is often seen as a hindrance to " +"Python's deployment on high-end multiprocessor server machines, because a " +"multi-threaded Python program effectively only uses one CPU, due to the " +"insistence that (almost) all Python code can only run while the GIL is held." +msgstr "" +":term:`global interpreter lock` (GIL)通常被视为 Python 在高端多核服务器上开发时的阻力,因为(几乎)所有 " +"Python 代码只有在获取到 GIL 时才能运行,所以多线程的 Python 程序只能有效地使用一个 CPU。" + +#: ../../faq/library.rst:415 +msgid "" +"Back in the days of Python 1.5, Greg Stein actually implemented a " +"comprehensive patch set (the \"free threading\" patches) that removed the " +"GIL and replaced it with fine-grained locking. Adam Olsen recently did a " +"similar experiment in his `python-safethread " +"`_ project. " +"Unfortunately, both experiments exhibited a sharp drop in single-thread " +"performance (at least 30% slower), due to the amount of fine-grained locking" +" necessary to compensate for the removal of the GIL." +msgstr "" +"在 Python 1.5 时代,Greg Stein 开发了一个完整的补丁包(“free threadings” 补丁),移除了 " +"GIL,并用粒度更合适的锁来代替。Adam Olsen 最近也在他的 `python-safethread " +"`_ " +"项目里做了类似的实验。不幸的是,由于为了移除 GIL 而使用了大量细粒度的锁,这两个实验在单线程测试中的性能都有明显的下降(至少慢 30%)。" + +#: ../../faq/library.rst:423 +msgid "" +"This doesn't mean that you can't make good use of Python on multi-CPU " +"machines! You just have to be creative with dividing the work up between " +"multiple *processes* rather than multiple *threads*. The " +":class:`~concurrent.futures.ProcessPoolExecutor` class in the new " +":mod:`concurrent.futures` module provides an easy way of doing so; the " +":mod:`multiprocessing` module provides a lower-level API in case you want " +"more control over dispatching of tasks." +msgstr "" +"但这并意味着你不能在多核机器上很好地使用 Python!你只需将任务划分为多*进程*,而不是多*线程*。新的 " +":mod:`concurrent.futures` 模块中的 " +":class:`~concurrent.futures.ProcessPoolExecutor` " +"类提供了一个简单的方法;如果你想对任务分发做更多控制,可以使用 :mod:`multiprocessing` 模块提供的底层 API。" + +#: ../../faq/library.rst:431 +msgid "" +"Judicious use of C extensions will also help; if you use a C extension to " +"perform a time-consuming task, the extension can release the GIL while the " +"thread of execution is in the C code and allow other threads to get some " +"work done. Some standard library modules such as :mod:`zlib` and " +":mod:`hashlib` already do this." +msgstr "" +"恰当地使用 C 拓展也很有用;使用 C 拓展处理耗时较久的任务时,拓展可以在线程执行 C 代码时释放 GIL,让其他线程执行。:mod:`zlib` 和" +" :mod:`hashlib` 等标准库模块已经这样做了。" + +#: ../../faq/library.rst:437 +msgid "" +"It has been suggested that the GIL should be a per-interpreter-state lock " +"rather than truly global; interpreters then wouldn't be able to share " +"objects. Unfortunately, this isn't likely to happen either. It would be a " +"tremendous amount of work, because many object implementations currently " +"have global state. For example, small integers and short strings are cached;" +" these caches would have to be moved to the interpreter state. Other object" +" types have their own free list; these free lists would have to be moved to " +"the interpreter state. And so on." +msgstr "" +"也有建议说 GIL " +"应该是解释器状态锁,而不是完全的全局锁;解释器不应该共享对象。不幸的是,这也不可能发生。由于目前许多对象的实现都有全局的状态,因此这是一个艰巨的工作。举例来说,小整型数和短字符串会缓存起来,这些缓存将不得不移动到解释器状态中。其他对象类型都有自己的自由变量列表,这些自由变量列表也必须移动到解释器状态中。等等。" + +#: ../../faq/library.rst:446 +msgid "" +"And I doubt that it can even be done in finite time, because the same " +"problem exists for 3rd party extensions. It is likely that 3rd party " +"extensions are being written at a faster rate than you can convert them to " +"store all their global state in the interpreter state." +msgstr "" +"我甚至怀疑这些工作是否可能在有限的时间内完成,因为同样的问题在第三方拓展中也会存在。第三方拓展编写的速度可比你将它们转换为把全局状态存入解释器状态中的速度快得多。" + +#: ../../faq/library.rst:451 +msgid "" +"And finally, once you have multiple interpreters not sharing any state, what" +" have you gained over running each interpreter in a separate process?" +msgstr "最后,假设多个解释器不共享任何状态,那么这样做比每个进程一个解释器好在哪里呢?" + +#: ../../faq/library.rst:456 +msgid "Input and Output" +msgstr "输入输出" + +#: ../../faq/library.rst:459 +msgid "How do I delete a file? (And other file questions...)" +msgstr "怎样删除文件?(以及其他文件相关的问题……)" + +#: ../../faq/library.rst:461 +msgid "" +"Use ``os.remove(filename)`` or ``os.unlink(filename)``; for documentation, " +"see the :mod:`os` module. The two functions are identical; " +":func:`~os.unlink` is simply the name of the Unix system call for this " +"function." +msgstr "" +"使用 ``os.remove(filename)`` 或 ``os.unlink(filename)``。查看 :mod:`os` " +"模块以获取更多文档。这两个函数是一样的,:func:`~os.unlink` 是这个函数在 Unix 系统调用中的名字。" + +#: ../../faq/library.rst:465 +msgid "" +"To remove a directory, use :func:`os.rmdir`; use :func:`os.mkdir` to create " +"one. ``os.makedirs(path)`` will create any intermediate directories in " +"``path`` that don't exist. ``os.removedirs(path)`` will remove intermediate " +"directories as long as they're empty; if you want to delete an entire " +"directory tree and its contents, use :func:`shutil.rmtree`." +msgstr "" +"如果要删除目录,应该使用 :func:`os.rmdir`;使用 :func:`os.mkdir` 创建目录。``os.makedirs(path)``" +" 会创建 ``path`` 中任何不存在的目录。``os.removedirs(path)`` " +"则会删除其中的目录,只要它们都是空的;如果你想删除整个目录以及其中的内容,可以使用 :func:`shutil.rmtree`。" + +#: ../../faq/library.rst:471 +msgid "To rename a file, use ``os.rename(old_path, new_path)``." +msgstr "重命名文件可以使用 ``os.rename(old_path, new_path)``。" + +#: ../../faq/library.rst:473 +msgid "" +"To truncate a file, open it using ``f = open(filename, \"rb+\")``, and use " +"``f.truncate(offset)``; offset defaults to the current seek position. " +"There's also ``os.ftruncate(fd, offset)`` for files opened with " +":func:`os.open`, where *fd* is the file descriptor (a small integer)." +msgstr "" +"如果需要截断文件,使用 ``f = open(filename, \"rb+\")`` 打开文件,然后使用 " +"``f.truncate(offset)``;offset 默认是当前的搜索位置。也可以对使用 :func:`os.open` 打开的文件使用 " +"``os.ftruncate(fd, offset)``,其中 *fd* 是文件描述符(一个小的整型数)。" + +#: ../../faq/library.rst:478 +msgid "" +"The :mod:`shutil` module also contains a number of functions to work on " +"files including :func:`~shutil.copyfile`, :func:`~shutil.copytree`, and " +":func:`~shutil.rmtree`." +msgstr "" +":mod:`shutil` 模块也包含了一些处理文件的函数,包括 " +":func:`~shutil.copyfile`,:func:`~shutil.copytree` 和 :func:`~shutil.rmtree`。" + +#: ../../faq/library.rst:484 +msgid "How do I copy a file?" +msgstr "怎样复制文件?" + +#: ../../faq/library.rst:486 +msgid "" +"The :mod:`shutil` module contains a :func:`~shutil.copyfile` function. Note" +" that on MacOS 9 it doesn't copy the resource fork and Finder info." +msgstr "" +":mod:`shutil` 模块有一个 :func:`~shutil.copyfile` 函数。注意在 MacOS 9 中不会复制 resource " +"fork 和 Finder info。" + +#: ../../faq/library.rst:491 +msgid "How do I read (or write) binary data?" +msgstr "怎样读取(或写入)二进制数据?" + +#: ../../faq/library.rst:493 +msgid "" +"To read or write complex binary data formats, it's best to use the " +":mod:`struct` module. It allows you to take a string containing binary data" +" (usually numbers) and convert it to Python objects; and vice versa." +msgstr "" +"要读写复杂的二进制数据格式,最好使用 :mod:`struct` 模块。该模块可以读取包含二进制数据(通常是数字)的字符串并转换为 Python " +"对象,反之亦然。" + +#: ../../faq/library.rst:497 +msgid "" +"For example, the following code reads two 2-byte integers and one 4-byte " +"integer in big-endian format from a file::" +msgstr "举例来说,下面的代码会从文件中以大端序格式读取一个 2 字节的整型和一个 4 字节的整型:" + +#: ../../faq/library.rst:506 +msgid "" +"The '>' in the format string forces big-endian data; the letter 'h' reads " +"one \"short integer\" (2 bytes), and 'l' reads one \"long integer\" (4 " +"bytes) from the string." +msgstr "" +"格式字符串中的 ‘>’ 强制以大端序读取数据;字母 ‘h’ 从字符串中读取一个“短整型”(2 字节),字母 ‘l’ 读取一个“长整型”(4 字节)。" + +#: ../../faq/library.rst:510 +msgid "" +"For data that is more regular (e.g. a homogeneous list of ints or floats), " +"you can also use the :mod:`array` module." +msgstr "对于更常规的数据(例如整型或浮点类型的列表),你也可以使用 :mod:`array` 模块。" + +#: ../../faq/library.rst:515 +msgid "" +"To read and write binary data, it is mandatory to open the file in binary " +"mode (here, passing ``\"rb\"`` to :func:`open`). If you use ``\"r\"`` " +"instead (the default), the file will be open in text mode and ``f.read()`` " +"will return :class:`str` objects rather than :class:`bytes` objects." +msgstr "" +"要读写二进制数据的话,需要强制以二进制模式打开文件(这里为 :func:`open` 函数传入 ``\"rb\"``)。如果(默认)传入 " +"``\"r\"`` 的话,文件会以文本模式打开,``f.read()`` 会返回 :class:`str` 对象,而不是 :class:`bytes` " +"对象。" + +#: ../../faq/library.rst:523 +msgid "I can't seem to use os.read() on a pipe created with os.popen(); why?" +msgstr "似乎 os.popen() 创建的管道不能使用 os.read(),这是为什么?" + +#: ../../faq/library.rst:525 +msgid "" +":func:`os.read` is a low-level function which takes a file descriptor, a " +"small integer representing the opened file. :func:`os.popen` creates a " +"high-level file object, the same type returned by the built-in :func:`open` " +"function. Thus, to read *n* bytes from a pipe *p* created with " +":func:`os.popen`, you need to use ``p.read(n)``." +msgstr "" +":func:`os.read` 是一个底层函数,它接收的是文件描述符 —— 用小整型数表示的打开的文件。:func:`os.popen` " +"创建的是一个高级文件对象,和内建的 :func:`open` 方法返回的类型一样。因此,如果要从 :func:`os.popen` 创建的管道 *p* " +"中读取 *n* 个字节的话,你应该使用 ``p.read(n)``。" + +#: ../../faq/library.rst:612 +msgid "How do I access the serial (RS232) port?" +msgstr "怎样访问(RS232)串口?" + +#: ../../faq/library.rst:614 +msgid "For Win32, OSX, Linux, BSD, Jython, IronPython:" +msgstr "对于 Win32, OSX, Linux, BSD, Jython, IronPython:" + +#: ../../faq/library.rst:616 +msgid "https://pypi.org/project/pyserial/" +msgstr "https://pypi.org/project/pyserial/ " + +#: ../../faq/library.rst:618 +msgid "For Unix, see a Usenet post by Mitch Chapman:" +msgstr "对于 Unix,查看 Mitch Chapman 发布的帖子:" + +#: ../../faq/library.rst:620 +msgid "https://groups.google.com/groups?selm=34A04430.CF9@ohioee.com" +msgstr "https://groups.google.com/groups?selm=34A04430.CF9@ohioee.com" + +#: ../../faq/library.rst:624 +msgid "Why doesn't closing sys.stdout (stdin, stderr) really close it?" +msgstr "为什么关闭 sys.stdout(stdin,stderr)并不会真正关掉它?" + +#: ../../faq/library.rst:626 +msgid "" +"Python :term:`file objects ` are a high-level layer of " +"abstraction on low-level C file descriptors." +msgstr "Python :term:`文件对象 ` 是一个对底层 C 文件描述符的高层抽象。" + +#: ../../faq/library.rst:629 +msgid "" +"For most file objects you create in Python via the built-in :func:`open` " +"function, ``f.close()`` marks the Python file object as being closed from " +"Python's point of view, and also arranges to close the underlying C file " +"descriptor. This also happens automatically in ``f``'s destructor, when " +"``f`` becomes garbage." +msgstr "" +"对于在 Python 中通过内建的 :func:`open` 函数创建的多数文件对象来说,``f.close()`` 从 Python " +"的角度将其标记为已关闭,并且会关闭底层的 C 文件描述符。在 ``f`` 被垃圾回收的时候,析构函数中也会自动处理。" + +#: ../../faq/library.rst:635 +msgid "" +"But stdin, stdout and stderr are treated specially by Python, because of the" +" special status also given to them by C. Running ``sys.stdout.close()`` " +"marks the Python-level file object as being closed, but does *not* close the" +" associated C file descriptor." +msgstr "" +"但由于 stdin,stdout 和 stderr 在 C 中的特殊地位,在 Python 中也会对它们做特殊处理。运行 " +"``sys.stdout.close()`` 会将 Python 的文件对象标记为已关闭,但是*不会*关闭与之关联的文件描述符。" + +#: ../../faq/library.rst:640 +msgid "" +"To close the underlying C file descriptor for one of these three, you should" +" first be sure that's what you really want to do (e.g., you may confuse " +"extension modules trying to do I/O). If it is, use :func:`os.close`::" +msgstr "" +"要关闭这三者的 C 文件描述符的话,首先你应该确认确实需要关闭它(比如,这可能会影响到处理 I/O 的拓展)。如果确实需要这么做的话,使用 " +":func:`os.close`:" + +#: ../../faq/library.rst:648 +msgid "Or you can use the numeric constants 0, 1 and 2, respectively." +msgstr "或者也可以使用常量 0,1,2 代替。" + +#: ../../faq/library.rst:652 +msgid "Network/Internet Programming" +msgstr "网络 / Internet 编程" + +#: ../../faq/library.rst:655 +msgid "What WWW tools are there for Python?" +msgstr "Python 中的 WWW 工具是什么?" + +#: ../../faq/library.rst:657 +msgid "" +"See the chapters titled :ref:`internet` and :ref:`netdata` in the Library " +"Reference Manual. Python has many modules that will help you build server-" +"side and client-side web systems." +msgstr "" +"参阅代码库参考手册中 :ref:`internet` 和 :ref:`netdata` 这两章的内容。Python 有大量模块来帮助你构建服务端和客户端" +" web 系统。" + +#: ../../faq/library.rst:663 +msgid "" +"A summary of available frameworks is maintained by Paul Boddie at " +"https://wiki.python.org/moin/WebProgramming\\ ." +msgstr "" +"Paul Boddie 维护了一份可用框架的概览,见 https://wiki.python.org/moin/WebProgramming 。" + +#: ../../faq/library.rst:666 +msgid "" +"Cameron Laird maintains a useful set of pages about Python web technologies " +"at http://phaseit.net/claird/comp.lang.python/web_python." +msgstr "" +"Cameron Laird 维护了一份关于 Python web 技术的实用网页的集合,见 " +"http://phaseit.net/claird/comp.lang.python/web_python 。" + +#: ../../faq/library.rst:671 +msgid "How can I mimic CGI form submission (METHOD=POST)?" +msgstr "怎样模拟发送 CGI 表单(METHOD=POST)?" + +#: ../../faq/library.rst:673 +msgid "" +"I would like to retrieve web pages that are the result of POSTing a form. Is" +" there existing code that would let me do this easily?" +msgstr "我需要通过 POST 表单获取网页,有什么代码能简单做到吗?" + +#: ../../faq/library.rst:676 +msgid "Yes. Here's a simple example that uses :mod:`urllib.request`::" +msgstr "是的。 这里是一个使用 :mod:`urllib.request` 的简单例子::" + +#: ../../faq/library.rst:691 +msgid "" +"Note that in general for percent-encoded POST operations, query strings must" +" be quoted using :func:`urllib.parse.urlencode`. For example, to send " +"``name=Guy Steele, Jr.``::" +msgstr "" +"注意,通常在百分号编码的 POST 操作中,查询字符串必须使用 :func:`urllib.parse.urlencode` " +"处理一下。举个例子,如果要发送 ``name=Guy Steele, Jr.`` 的话:" + +#: ../../faq/library.rst:699 +msgid ":ref:`urllib-howto` for extensive examples." +msgstr "查看 :ref:`urllib-howto` 获取更多示例。" + +#: ../../faq/library.rst:703 +msgid "What module should I use to help with generating HTML?" +msgstr "生成 HTML 需要使用什么模块?" + +#: ../../faq/library.rst:707 +msgid "" +"You can find a collection of useful links on the `Web Programming wiki page " +"`_." +msgstr "" +"你可以在 `Web 编程 wiki 页面 `_ " +"找到许多有用的链接。" + +#: ../../faq/library.rst:712 +msgid "How do I send mail from a Python script?" +msgstr "怎样使用 Python 脚本发送邮件?" + +#: ../../faq/library.rst:714 +msgid "Use the standard library module :mod:`smtplib`." +msgstr "使用 :mod:`smtplib` 标准库模块。" + +#: ../../faq/library.rst:716 +msgid "" +"Here's a very simple interactive mail sender that uses it. This method will" +" work on any host that supports an SMTP listener. ::" +msgstr "下面是一个很简单的交互式发送邮件的代码。这个方法适用于任何支持 SMTP 协议的主机。" + +#: ../../faq/library.rst:736 +msgid "" +"A Unix-only alternative uses sendmail. The location of the sendmail program" +" varies between systems; sometimes it is ``/usr/lib/sendmail``, sometimes " +"``/usr/sbin/sendmail``. The sendmail manual page will help you out. Here's" +" some sample code::" +msgstr "" +"在 Unix 系统中还可以使用 sendmail。sendmail 程序的位置在不同系统中不一样,有时是在 " +"``/usr/lib/sendmail``,有时是在 ``/usr/sbin/sendmail``。sendmail " +"手册页面会对你有所帮助。以下是示例代码:" + +#: ../../faq/library.rst:756 +msgid "How do I avoid blocking in the connect() method of a socket?" +msgstr "socket 的 connect() 方法怎样避免阻塞?" + +#: ../../faq/library.rst:758 +msgid "" +"The :mod:`select` module is commonly used to help with asynchronous I/O on " +"sockets." +msgstr "通常会用 :mod:`select` 模块处理 socket 异步 I/O。" + +#: ../../faq/library.rst:761 +msgid "" +"To prevent the TCP connect from blocking, you can set the socket to non-" +"blocking mode. Then when you do the :meth:`socket.connect`, you will either" +" connect immediately (unlikely) or get an exception that contains the error " +"number as ``.errno``. ``errno.EINPROGRESS`` indicates that the connection is" +" in progress, but hasn't finished yet. Different OSes will return different" +" values, so you're going to have to check what's returned on your system." +msgstr "" +"要防止 TCP 连接发生阻塞,你可以将 socket 设为非阻塞模式。 这样当你执行 :meth:`socket.connect` " +"时,你将或是立即完成连接(不大可能)或是收到一个包含 ``.errno`` 错误码的异常。 ``errno.EINPROGRESS`` " +"表示连接正在进行但还没有完成。 不同的操作系统将返回不同的值,因此你需要确认你的系统会返回什么值。" + +#: ../../faq/library.rst:768 +msgid "" +"You can use the :meth:`socket.connect_ex` method to avoid creating an " +"exception. It will just return the errno value. To poll, you can call " +":meth:`socket.connect_ex` again later -- ``0`` or ``errno.EISCONN`` indicate" +" that you're connected -- or you can pass this socket to " +":meth:`select.select` to check if it's writable." +msgstr "" +"你可以使用 :meth:`socket.connect_ex` 方法来避免生成异常。 它将只返回 errno 值。 要进行轮询,你可以稍后再次调用 " +":meth:`socket.connect_ex` -- ``0`` 或 ``errno.EISCONN`` 表示连接已完成 -- 或者你也可以将此 " +"socket 传给 :meth:`select.select` 来检查它是否可写。" + +#: ../../faq/library.rst:774 +msgid "" +"The :mod:`asyncio` module provides a general purpose single-threaded and " +"concurrent asynchronous library, which can be used for writing non-blocking " +"network code. The third-party `Twisted `_ " +"library is a popular and feature-rich alternative." +msgstr "" +":mod:`asyncio` 模块提供了通用的单线程并发异步库,它可被用来编写非阻塞的网络代码。 第三方的 `Twisted " +"`_ 库是一个热门且功能丰富的替代选择。" + +#: ../../faq/library.rst:782 +msgid "Databases" +msgstr "数据库" + +#: ../../faq/library.rst:785 +msgid "Are there any interfaces to database packages in Python?" +msgstr "Python 中有数据库包的接口吗?" + +#: ../../faq/library.rst:787 +msgid "Yes." +msgstr "当然。" + +#: ../../faq/library.rst:789 +msgid "" +"Interfaces to disk-based hashes such as :mod:`DBM ` and :mod:`GDBM" +" ` are also included with standard Python. There is also the " +":mod:`sqlite3` module, which provides a lightweight disk-based relational " +"database." +msgstr "" +"标准 Python 还包含了基于磁盘的哈希接口例如 :mod:`DBM ` 和 :mod:`GDBM ` " +"。除此之外还有 :mod:`sqlite3` 模块,该模块提供了一个轻量级的基于磁盘的关系型数据库。" + +#: ../../faq/library.rst:794 +msgid "" +"Support for most relational databases is available. See the " +"`DatabaseProgramming wiki page " +"`_ for details." +msgstr "" +"大多数关系型数据库都已经支持。查看 `数据库编程 wiki 页面 " +"`_ 获取更多信息。" + +#: ../../faq/library.rst:800 +msgid "How do you implement persistent objects in Python?" +msgstr "在 Python 中如何实现持久化对象?" + +#: ../../faq/library.rst:802 +msgid "" +"The :mod:`pickle` library module solves this in a very general way (though " +"you still can't store things like open files, sockets or windows), and the " +":mod:`shelve` library module uses pickle and (g)dbm to create persistent " +"mappings containing arbitrary Python objects." +msgstr "" +":mod:`pickle` 库模块以一种非常通用的方式解决了这个问题(虽然你依然不能用它保存打开的文件、套接字或窗口之类的东西),此外 " +":mod:`shelve` 库模块可使用 pickle 和 (g)dbm 来创建包含任意 Python 对象的持久化映射。" + +#: ../../faq/library.rst:809 +msgid "Mathematics and Numerics" +msgstr "数学和数字" + +#: ../../faq/library.rst:812 +msgid "How do I generate random numbers in Python?" +msgstr "Python 中怎样生成随机数?" + +#: ../../faq/library.rst:814 +msgid "" +"The standard module :mod:`random` implements a random number generator. " +"Usage is simple::" +msgstr ":mod:`random` 标准库模块实现了随机数生成器,使用起来非常简单:" + +#: ../../faq/library.rst:820 +msgid "This returns a random floating point number in the range [0, 1)." +msgstr "这个函数会返回 [0, 1) 之间的随机浮点数。" + +#: ../../faq/library.rst:822 +msgid "" +"There are also many other specialized generators in this module, such as:" +msgstr "该模块中还有许多其他的专门的生成器,例如:" + +#: ../../faq/library.rst:824 +msgid "``randrange(a, b)`` chooses an integer in the range [a, b)." +msgstr "``randrange(a, b)`` 返回 [a, b) 区间内的一个整型数。" + +#: ../../faq/library.rst:825 +msgid "``uniform(a, b)`` chooses a floating point number in the range [a, b)." +msgstr "``uniform(a, b)`` 返回 [a, b) 区间之间的浮点数。" + +#: ../../faq/library.rst:826 +msgid "" +"``normalvariate(mean, sdev)`` samples the normal (Gaussian) distribution." +msgstr "``normalvariate(mean, sdev)`` 使用正态(高斯)分布采样。" + +#: ../../faq/library.rst:828 +msgid "Some higher-level functions operate on sequences directly, such as:" +msgstr "还有一些高级函数直接对序列进行操作,例如:" + +#: ../../faq/library.rst:830 +msgid "``choice(S)`` chooses a random element from a given sequence." +msgstr "``choice(S)`` 从给定的序列中随机选择一个元素。" + +#: ../../faq/library.rst:831 +msgid "``shuffle(L)`` shuffles a list in-place, i.e. permutes it randomly." +msgstr "``shuffle(L)`` 会对列表执行原地重排,即将其随机地打乱。" + +#: ../../faq/library.rst:833 +msgid "" +"There's also a ``Random`` class you can instantiate to create independent " +"multiple random number generators." +msgstr "还有 ``Random`` 类,你可以将其实例化,用来创建多个独立的随机数生成器。" diff --git a/faq/programming.po b/faq/programming.po new file mode 100644 index 000000000..5c18206eb --- /dev/null +++ b/faq/programming.po @@ -0,0 +1,2537 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) 2001-2024, Python Software Foundation +# This file is distributed under the same license as the Python package. +# FIRST AUTHOR , YEAR. +# +# Translators: +# eric R , 2018 +# ppcfish , 2019 +# Jiuh-star , 2021 +# Dai Xu , 2021 +# WH-2099 , 2021 +# Freesand Leo , 2022 +# Alpha Du , 2022 +# Rafael Fontenelle , 2024 +# +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: Python 3.9\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2024-01-12 22:01+0000\n" +"PO-Revision-Date: 2017-02-16 17:43+0000\n" +"Last-Translator: Rafael Fontenelle , 2024\n" +"Language-Team: Chinese (China) (https://app.transifex.com/python-doc/teams/5390/zh_CN/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: zh_CN\n" +"Plural-Forms: nplurals=1; plural=0;\n" + +#: ../../faq/programming.rst:5 +msgid "Programming FAQ" +msgstr "编程常见问题" + +#: ../../faq/programming.rst:8 +msgid "Contents" +msgstr "目录" + +#: ../../faq/programming.rst:12 +msgid "General Questions" +msgstr "一般问题" + +#: ../../faq/programming.rst:15 +msgid "" +"Is there a source code level debugger with breakpoints, single-stepping, " +"etc.?" +msgstr "Python 有没有提供带有断点、单步调试等功能的源码级调试器?" + +#: ../../faq/programming.rst:17 ../../faq/programming.rst:57 +msgid "Yes." +msgstr "有的。" + +#: ../../faq/programming.rst:19 +msgid "" +"Several debuggers for Python are described below, and the built-in function " +":func:`breakpoint` allows you to drop into any of them." +msgstr "以下介绍了一些 Python 的调试器,用内置函数 :func:`breakpoint` 即可切入这些调试器中。" + +#: ../../faq/programming.rst:22 +msgid "" +"The pdb module is a simple but adequate console-mode debugger for Python. It" +" is part of the standard Python library, and is :mod:`documented in the " +"Library Reference Manual `. You can also write your own debugger by " +"using the code for pdb as an example." +msgstr "" +"pdb 模块是一个简单但是够用的控制台模式 Python 调试器。 它是标准 Python 库的一部分,并且 :mod:`已收录于库参考手册 " +"`。 你也可以通过使用 pdb 代码作为样例来编写你自己的调试器。" + +#: ../../faq/programming.rst:27 +msgid "" +"The IDLE interactive development environment, which is part of the standard " +"Python distribution (normally available as Tools/scripts/idle), includes a " +"graphical debugger." +msgstr "作为标准 Python 发行版附带组件的 IDLE 交互式环境(通常位于 Tools/scripts/idle)中包含一个图形化的调试器。" + +#: ../../faq/programming.rst:31 +msgid "" +"PythonWin is a Python IDE that includes a GUI debugger based on pdb. The " +"PythonWin debugger colors breakpoints and has quite a few cool features such" +" as debugging non-PythonWin programs. PythonWin is available as part of " +"`pywin32 `_ project and as a part of " +"the `ActivePython `_ " +"distribution." +msgstr "" +"PythonWin 是一种 Python IDE,其中包含了一个基于 pdb 的 GUI 调试器。PythonWin " +"的调试器会为断点着色,并提供了相当多的超酷特性,例如调试非 PythonWin 程序等。PythonWin 是 `pywin32 " +"`_ 项目的组成部分,也是 `ActivePython " +"`_ 发行版的组成部分。" + +#: ../../faq/programming.rst:38 +msgid "" +"`Eric `_ is an IDE built on PyQt and " +"the Scintilla editing component." +msgstr "" +"`Eric `_ " +"是一个基于PyQt和Scintilla编辑组件构建的IDE。" + +#: ../../faq/programming.rst:41 +msgid "" +"`trepan3k `_ is a gdb-like " +"debugger." +msgstr "" +"`trepan3k `_ 是一个类似 gdb 的调试器。" + +#: ../../faq/programming.rst:43 +msgid "" +"`Visual Studio Code `_ is an IDE with " +"debugging tools that integrates with version-control software." +msgstr "" +"`Visual Studio Code `_ 是包含了调试工具的 " +"IDE,并集成了版本控制软件。" + +#: ../../faq/programming.rst:46 +msgid "" +"There are a number of commercial Python IDEs that include graphical " +"debuggers. They include:" +msgstr "有许多商业 Python IDE 都包含了图形化调试器。包括:" + +#: ../../faq/programming.rst:49 +msgid "`Wing IDE `_" +msgstr "`Wing IDE `_" + +#: ../../faq/programming.rst:50 +msgid "`Komodo IDE `_" +msgstr "`Komodo IDE `_" + +#: ../../faq/programming.rst:51 +msgid "`PyCharm `_" +msgstr "`PyCharm `_" + +#: ../../faq/programming.rst:55 +msgid "Are there tools to help find bugs or perform static analysis?" +msgstr "是否有能帮助寻找漏洞或执行静态分析的工具?" + +#: ../../faq/programming.rst:59 +msgid "" +"`Pylint `_ and `Pyflakes " +"`_ do basic checking that will help you " +"catch bugs sooner." +msgstr "" +"`Pylint `_ 和 `Pyflakes " +"`_ 可进行基本检查来帮助你尽早捕捉漏洞。" + +#: ../../faq/programming.rst:63 +msgid "" +"Static type checkers such as `Mypy `_, `Pyre " +"`_, and `Pytype " +"`_ can check type hints in Python source " +"code." +msgstr "" +"静态类型检查器,例如 `Mypy `_ 、 `Pyre `_ 和 `Pytype `_ " +"可以检查Python源代码中的类型提示。" + +#: ../../faq/programming.rst:72 +msgid "How can I create a stand-alone binary from a Python script?" +msgstr "如何由 Python 脚本创建能独立运行的二进制程序?" + +#: ../../faq/programming.rst:74 +msgid "" +"You don't need the ability to compile Python to C code if all you want is a " +"stand-alone program that users can download and run without having to " +"install the Python distribution first. There are a number of tools that " +"determine the set of modules required by a program and bind these modules " +"together with a Python binary to produce a single executable." +msgstr "" +"如果只是想要一个独立的程序,以便用户不必预先安装 Python 即可下载和运行它,则不需要将 Python 编译成 C " +"代码。有许多工具可以检测程序所需的模块,并将这些模块与 Python 二进制程序捆绑在一起生成单个可执行文件。" + +#: ../../faq/programming.rst:80 +msgid "" +"One is to use the freeze tool, which is included in the Python source tree " +"as ``Tools/freeze``. It converts Python byte code to C arrays; with a C " +"compiler you can embed all your modules into a new program, which is then " +"linked with the standard Python modules." +msgstr "" +"一种方案是使用 freeze 工具,它以 ``Tools/freeze`` 的形式包含在 Python 源代码树中。它将 Python 的字节码转换为 " +"C 语言的数组;用 C 语言编译器可以将你的所有模块嵌入到一个新的程序中,然后与标准的 Python 模块连接。" + +#: ../../faq/programming.rst:85 +msgid "" +"It works by scanning your source recursively for import statements (in both " +"forms) and looking for the modules in the standard Python path as well as in" +" the source directory (for built-in modules). It then turns the bytecode " +"for modules written in Python into C code (array initializers that can be " +"turned into code objects using the marshal module) and creates a custom-made" +" config file that only contains those built-in modules which are actually " +"used in the program. It then compiles the generated C code and links it " +"with the rest of the Python interpreter to form a self-contained binary " +"which acts exactly like your script." +msgstr "" +"它的工作原理是递归扫描源代码,获取两种格式的 import 语句,并在标准 Python 路径和源码目录(用于内置模块)检索这些模块。然后,把这些模块的" +" Python 字节码转换为 C 代码(可以利用 marshal " +"模块转换为代码对象的数组初始化器),并创建一个定制的配置文件,该文件仅包含程序实际用到的内置模块。然后,编译生成的 C 代码并将其与 Python " +"解释器的其余部分链接,形成一个自给自足的二进制文件,其功能与 Python 脚本代码完全相同。" + +#: ../../faq/programming.rst:94 +msgid "" +"The following packages can help with the creation of console and GUI " +"executables:" +msgstr "下列包可以用于帮助创建控制台和 GUI 的可执行文件:" + +#: ../../faq/programming.rst:97 +msgid "`Nuitka `_ (Cross-platform)" +msgstr "`Nuitka `_ (跨平台)" + +#: ../../faq/programming.rst:98 +msgid "`PyInstaller `_ (Cross-platform)" +msgstr "`PyInstaller `_ (跨平台)" + +#: ../../faq/programming.rst:99 +msgid "" +"`PyOxidizer `_ (Cross-" +"platform)" +msgstr "`PyOxidizer `_ (跨平台)" + +#: ../../faq/programming.rst:100 +msgid "" +"`cx_Freeze `_ (Cross-platform)" +msgstr "`cx_Freeze `_ (跨平台)" + +#: ../../faq/programming.rst:101 +msgid "`py2app `_ (macOS only)" +msgstr "`py2app `_ (仅限 macOS)" + +#: ../../faq/programming.rst:102 +msgid "`py2exe `_ (Windows only)" +msgstr "`py2exe `_ (仅限 Windows)" + +#: ../../faq/programming.rst:105 +msgid "Are there coding standards or a style guide for Python programs?" +msgstr "是否有 Python 编码标准或风格指南?" + +#: ../../faq/programming.rst:107 +msgid "" +"Yes. The coding style required for standard library modules is documented " +"as :pep:`8`." +msgstr "有的。 标准库模块所要求的编码风格记录于 :pep:`8` 之中。" + +#: ../../faq/programming.rst:112 +msgid "Core Language" +msgstr "语言核心内容" + +#: ../../faq/programming.rst:115 +msgid "Why am I getting an UnboundLocalError when the variable has a value?" +msgstr "变量明明有值,为什么还会出现 UnboundLocalError?" + +#: ../../faq/programming.rst:117 +msgid "" +"It can be a surprise to get the UnboundLocalError in previously working code" +" when it is modified by adding an assignment statement somewhere in the body" +" of a function." +msgstr "因为在函数内部某处添加了一条赋值语句,导致之前正常工作的代码报出 UnboundLocalError 错误,这可能是有点令人惊讶。" + +#: ../../faq/programming.rst:121 +msgid "This code:" +msgstr "以下代码:" + +#: ../../faq/programming.rst:129 +msgid "works, but this code:" +msgstr "正常工作,但是以下代码" + +#: ../../faq/programming.rst:136 +msgid "results in an UnboundLocalError:" +msgstr "会得到一个 UnboundLocalError :" + +#: ../../faq/programming.rst:143 +msgid "" +"This is because when you make an assignment to a variable in a scope, that " +"variable becomes local to that scope and shadows any similarly named " +"variable in the outer scope. Since the last statement in foo assigns a new " +"value to ``x``, the compiler recognizes it as a local variable. " +"Consequently when the earlier ``print(x)`` attempts to print the " +"uninitialized local variable and an error results." +msgstr "" +"原因就是,当对某作用域内的变量进行赋值时,该变量将成为该作用域内的局部变量,并覆盖外部作用域中的同名变量。由于 foo 的最后一条语句为 ``x`` " +"分配了一个新值,编译器会将其识别为局部变量。因此,前面的 ``print(x)`` 试图输出未初始化的局部变量,就会引发错误。" + +#: ../../faq/programming.rst:150 +msgid "" +"In the example above you can access the outer scope variable by declaring it" +" global:" +msgstr "在上面的示例中,可以将外部作用域的变量声明为全局变量以便访问:" + +#: ../../faq/programming.rst:161 +msgid "" +"This explicit declaration is required in order to remind you that (unlike " +"the superficially analogous situation with class and instance variables) you" +" are actually modifying the value of the variable in the outer scope:" +msgstr "与类和实例变量貌似但不一样,其实以上是在修改外部作用域的变量值,为了提示这一点,这里需要显式声明一下。" + +#: ../../faq/programming.rst:168 +msgid "" +"You can do a similar thing in a nested scope using the :keyword:`nonlocal` " +"keyword:" +msgstr "你可以使用 :keyword:`nonlocal` 关键字在嵌套作用域中执行类似的操作:" + +#: ../../faq/programming.rst:185 +msgid "What are the rules for local and global variables in Python?" +msgstr "Python 的局部变量和全局变量有哪些规则?" + +#: ../../faq/programming.rst:187 +msgid "" +"In Python, variables that are only referenced inside a function are " +"implicitly global. If a variable is assigned a value anywhere within the " +"function's body, it's assumed to be a local unless explicitly declared as " +"global." +msgstr "" +"函数内部只作引用的 Python 变量隐式视为全局变量。如果在函数内部任何位置为变量赋值,则除非明确声明为全局变量,否则均将其视为局部变量。" + +#: ../../faq/programming.rst:191 +msgid "" +"Though a bit surprising at first, a moment's consideration explains this. " +"On one hand, requiring :keyword:`global` for assigned variables provides a " +"bar against unintended side-effects. On the other hand, if ``global`` was " +"required for all global references, you'd be using ``global`` all the time." +" You'd have to declare as global every reference to a built-in function or " +"to a component of an imported module. This clutter would defeat the " +"usefulness of the ``global`` declaration for identifying side-effects." +msgstr "" +"起初尽管有点令人惊讶,不过考虑片刻即可释然。一方面,已分配的变量要求加上 :keyword:`global` " +"可以防止意外的副作用发生。另一方面,如果所有全局引用都要加上 ``global`` ,那处处都得用上 ``global`` " +"了。那么每次对内置函数或导入模块中的组件进行引用时,都得声明为全局变量。这种杂乱会破坏 ``global`` 声明用于警示副作用的有效性。" + +#: ../../faq/programming.rst:201 +msgid "" +"Why do lambdas defined in a loop with different values all return the same " +"result?" +msgstr "为什么在循环中定义的参数各异的 lambda 都返回相同的结果?" + +#: ../../faq/programming.rst:203 +msgid "" +"Assume you use a for loop to define a few different lambdas (or even plain " +"functions), e.g.::" +msgstr "假设用 for 循环来定义几个取值各异的 lambda(即便是普通函数也一样):" + +#: ../../faq/programming.rst:210 +msgid "" +"This gives you a list that contains 5 lambdas that calculate ``x**2``. You " +"might expect that, when called, they would return, respectively, ``0``, " +"``1``, ``4``, ``9``, and ``16``. However, when you actually try you will " +"see that they all return ``16``::" +msgstr "" +"以上会得到一个包含5个 lambda 函数的列表,这些函数将计算 ``x**2``。大家或许期望,调用这些函数会分别返回 ``0`` 、``1`` 、 " +"``4`` 、 ``9`` 和 ``16``。然而,真的试过就会发现,他们都会返回 ``16`` :" + +#: ../../faq/programming.rst:220 +msgid "" +"This happens because ``x`` is not local to the lambdas, but is defined in " +"the outer scope, and it is accessed when the lambda is called --- not when " +"it is defined. At the end of the loop, the value of ``x`` is ``4``, so all " +"the functions now return ``4**2``, i.e. ``16``. You can also verify this by" +" changing the value of ``x`` and see how the results of the lambdas change::" +msgstr "" +"这是因为 ``x`` 不是 lambda 函数的内部变量,而是定义于外部作用域中的,并且 ``x`` 是在调用 lambda " +"时访问的——而不是在定义时访问。循环结束时 ``x`` 的值是 ``4`` ,所以此时所有的函数都将返回 ``4**2`` ,即 ``16`` " +"。通过改变 ``x`` 的值并查看 lambda 的结果变化,也可以验证这一点。" + +#: ../../faq/programming.rst:230 +msgid "" +"In order to avoid this, you need to save the values in variables local to " +"the lambdas, so that they don't rely on the value of the global ``x``::" +msgstr "为了避免发生上述情况,需要将值保存在 lambda 局部变量,以使其不依赖于全局 ``x`` 的值:" + +#: ../../faq/programming.rst:237 +msgid "" +"Here, ``n=x`` creates a new variable ``n`` local to the lambda and computed " +"when the lambda is defined so that it has the same value that ``x`` had at " +"that point in the loop. This means that the value of ``n`` will be ``0`` in" +" the first lambda, ``1`` in the second, ``2`` in the third, and so on. " +"Therefore each lambda will now return the correct result::" +msgstr "" +"以上 ``n=x`` 创建了一个新的 lambda 本地变量 ``n``,并在定义 lambda 时计算其值,使其与循环当前时点的 ``x`` " +"值相同。这意味着 ``n`` 的值在第 1 个 lambda 中为 ``0`` ,在第 2 个 lambda 中为 ``1`` ,在第 3 个中为 " +"``2``,依此类推。因此现在每个 lambda 都会返回正确结果:" + +#: ../../faq/programming.rst:248 +msgid "" +"Note that this behaviour is not peculiar to lambdas, but applies to regular " +"functions too." +msgstr "请注意,上述表现并不是 lambda 所特有的,常规的函数也同样适用。" + +#: ../../faq/programming.rst:253 +msgid "How do I share global variables across modules?" +msgstr "如何跨模块共享全局变量?" + +#: ../../faq/programming.rst:255 +msgid "" +"The canonical way to share information across modules within a single " +"program is to create a special module (often called config or cfg). Just " +"import the config module in all modules of your application; the module then" +" becomes available as a global name. Because there is only one instance of " +"each module, any changes made to the module object get reflected everywhere." +" For example:" +msgstr "" +"在单个程序中跨模块共享信息的规范方法是创建一个特殊模块(通常称为 config 或 cfg)。只需在应用程序的所有模块中导入该 config " +"模块;然后该模块就可当作全局名称使用了。因为每个模块只有一个实例,所以对该模块对象所做的任何更改将会在所有地方得以体现。 例如:" + +#: ../../faq/programming.rst:261 +msgid "config.py::" +msgstr "config.py:" + +#: ../../faq/programming.rst:265 +msgid "mod.py::" +msgstr "mod.py:" + +#: ../../faq/programming.rst:270 +msgid "main.py::" +msgstr "main.py:" + +#: ../../faq/programming.rst:276 +msgid "" +"Note that using a module is also the basis for implementing the Singleton " +"design pattern, for the same reason." +msgstr "请注意,出于同样的原因,采用模块也是实现单例设计模式的基础。" + +#: ../../faq/programming.rst:281 +msgid "What are the \"best practices\" for using import in a module?" +msgstr "导入模块的“最佳实践”是什么?" + +#: ../../faq/programming.rst:283 +msgid "" +"In general, don't use ``from modulename import *``. Doing so clutters the " +"importer's namespace, and makes it much harder for linters to detect " +"undefined names." +msgstr "" +"通常请勿使用 ``from modulename import *`` 。因为这会扰乱 importer 的命名空间,且会造成未定义名称更难以被 " +"Linter 检查出来。" + +#: ../../faq/programming.rst:287 +msgid "" +"Import modules at the top of a file. Doing so makes it clear what other " +"modules your code requires and avoids questions of whether the module name " +"is in scope. Using one import per line makes it easy to add and delete " +"module imports, but using multiple imports per line uses less screen space." +msgstr "" +"请在代码文件的首部就导入模块。这样代码所需的模块就一目了然了,也不用考虑模块名是否在作用域内的问题。每行导入一个模块则增删起来会比较容易,每行导入多个模块则更节省屏幕空间。" + +#: ../../faq/programming.rst:292 +msgid "It's good practice if you import modules in the following order:" +msgstr "按如下顺序导入模块就是一种好做法:" + +#: ../../faq/programming.rst:294 +msgid "standard library modules -- e.g. ``sys``, ``os``, ``getopt``, ``re``" +msgstr "标准库模块——比如: ``sys`` 、 ``os`` 、 ``getopt`` 、 ``re`` 等。" + +#: ../../faq/programming.rst:295 +msgid "" +"third-party library modules (anything installed in Python's site-packages " +"directory) -- e.g. mx.DateTime, ZODB, PIL.Image, etc." +msgstr "" +"第三方库模块(安装于 Python site-packages 目录中的内容)——如 mx.DateTime、ZODB、PIL.Image 等。" + +#: ../../faq/programming.rst:297 +msgid "locally-developed modules" +msgstr "本地开发的模块" + +#: ../../faq/programming.rst:299 +msgid "" +"It is sometimes necessary to move imports to a function or class to avoid " +"problems with circular imports. Gordon McMillan says:" +msgstr "为了避免循环导入引发的问题,有时需要将模块导入语句移入函数或类的内部。Gordon McMillan 的说法如下:" + +#: ../../faq/programming.rst:302 +msgid "" +"Circular imports are fine where both modules use the \"import \" " +"form of import. They fail when the 2nd module wants to grab a name out of " +"the first (\"from module import name\") and the import is at the top level." +" That's because names in the 1st are not yet available, because the first " +"module is busy importing the 2nd." +msgstr "" +"当两个模块都采用 \"import \" 的导入形式时,循环导入是没有问题的。但如果第 2 个模块想从第 1 " +"个模块中取出一个名称(\"from module import name\")并且导入处于代码的最顶层,那导入就会失败。原因是第 1 " +"个模块中的名称还不可用,这时第 1 个模块正忙于导入第 2 个模块呢。" + +#: ../../faq/programming.rst:308 +msgid "" +"In this case, if the second module is only used in one function, then the " +"import can easily be moved into that function. By the time the import is " +"called, the first module will have finished initializing, and the second " +"module can do its import." +msgstr "" +"如果只是在一个函数中用到第 2 个模块,那这时将导入语句移入该函数内部即可。当调用到导入语句时,第 1 个模块将已经完成初始化,第 2 " +"个模块就可以进行导入了。" + +#: ../../faq/programming.rst:313 +msgid "" +"It may also be necessary to move imports out of the top level of code if " +"some of the modules are platform-specific. In that case, it may not even be" +" possible to import all of the modules at the top of the file. In this " +"case, importing the correct modules in the corresponding platform-specific " +"code is a good option." +msgstr "" +"如果某些模块是平台相关的,可能还需要把导入语句移出最顶级代码。这种情况下,甚至有可能无法导入文件首部的所有模块。于是在对应的平台相关代码中导入正确的模块,就是一种不错的选择。" + +#: ../../faq/programming.rst:318 +msgid "" +"Only move imports into a local scope, such as inside a function definition, " +"if it's necessary to solve a problem such as avoiding a circular import or " +"are trying to reduce the initialization time of a module. This technique is" +" especially helpful if many of the imports are unnecessary depending on how " +"the program executes. You may also want to move imports into a function if " +"the modules are only ever used in that function. Note that loading a module" +" the first time may be expensive because of the one time initialization of " +"the module, but loading a module multiple times is virtually free, costing " +"only a couple of dictionary lookups. Even if the module name has gone out " +"of scope, the module is probably available in :data:`sys.modules`." +msgstr "" +"只有为了避免循环导入问题,或有必要减少模块初始化时间时,才把导入语句移入类似函数定义内部的局部作用域。如果根据程序的执行方式,许多导入操作不是必需的,那么这种技术尤其有用。如果模块仅在某个函数中用到,可能还要将导入操作移入该函数内部。请注意,因为模块有一次初始化过程,所以第一次加载模块的代价可能会比较高,但多次加载几乎没有什么花费,代价只是进行几次字典检索而已。即使模块名超出了作用域,模块在" +" :data:`sys.modules` 中也是可用的。 " + +#: ../../faq/programming.rst:331 +msgid "Why are default values shared between objects?" +msgstr "为什么对象之间会共享默认值?" + +#: ../../faq/programming.rst:333 +msgid "" +"This type of bug commonly bites neophyte programmers. Consider this " +"function::" +msgstr "新手程序员常常中招这类 Bug。请看以下函数:" + +#: ../../faq/programming.rst:340 +msgid "" +"The first time you call this function, ``mydict`` contains a single item. " +"The second time, ``mydict`` contains two items because when ``foo()`` begins" +" executing, ``mydict`` starts out with an item already in it." +msgstr "" +"第一次调用此函数时, ``mydict`` 中只有一个数据项。第二次调用 ``mydict`` 则会包含两个数据项,因为 ``foo()`` " +"开始执行时, ``mydict`` 中已经带有一个数据项了。" + +#: ../../faq/programming.rst:344 +msgid "" +"It is often expected that a function call creates new objects for default " +"values. This is not what happens. Default values are created exactly once, " +"when the function is defined. If that object is changed, like the " +"dictionary in this example, subsequent calls to the function will refer to " +"this changed object." +msgstr "" +"大家往往希望,函数调用会为默认值创建新的对象。但事实并非如此。默认值只会在函数定义时创建一次。如果对象发生改变,就如上例中的字典那样,则后续调用该函数时将会引用这个改动的对象。" + +#: ../../faq/programming.rst:349 +msgid "" +"By definition, immutable objects such as numbers, strings, tuples, and " +"``None``, are safe from change. Changes to mutable objects such as " +"dictionaries, lists, and class instances can lead to confusion." +msgstr "" +"按照定义,不可变对象改动起来是安全的,诸如数字、字符串、元组和 ``None`` 之类。而可变对象的改动则可能引起困惑,例如字典、列表和类实例等。" + +#: ../../faq/programming.rst:353 +msgid "" +"Because of this feature, it is good programming practice to not use mutable " +"objects as default values. Instead, use ``None`` as the default value and " +"inside the function, check if the parameter is ``None`` and create a new " +"list/dictionary/whatever if it is. For example, don't write::" +msgstr "" +"因此,不把可变对象用作默认值是一种良好的编程做法。而应采用 ``None`` 作为默认值,然后在函数中检查参数是否为 ``None`` " +"并新建列表、字典或其他对象。例如,代码不应如下所示:" + +#: ../../faq/programming.rst:361 +msgid "but::" +msgstr "而应这么写:" + +#: ../../faq/programming.rst:367 +msgid "" +"This feature can be useful. When you have a function that's time-consuming " +"to compute, a common technique is to cache the parameters and the resulting " +"value of each call to the function, and return the cached value if the same " +"value is requested again. This is called \"memoizing\", and can be " +"implemented like this::" +msgstr "" +"参数默认值的特性有时会很有用处。 " +"如果有个函数的计算过程会比较耗时,有一种常见技巧是将每次函数调用的参数和结果缓存起来,并在同样的值被再次请求时返回缓存的值。这种技巧被称为“memoize”,实现代码可如下所示:" + +#: ../../faq/programming.rst:382 +msgid "" +"You could use a global variable containing a dictionary instead of the " +"default value; it's a matter of taste." +msgstr "也可以不用参数默认值来实现,而是采用全局的字典变量;这取决于个人偏好。" + +#: ../../faq/programming.rst:387 +msgid "" +"How can I pass optional or keyword parameters from one function to another?" +msgstr "如何将可选参数或关键字参数从一个函数传递到另一个函数?" + +#: ../../faq/programming.rst:389 +msgid "" +"Collect the arguments using the ``*`` and ``**`` specifiers in the " +"function's parameter list; this gives you the positional arguments as a " +"tuple and the keyword arguments as a dictionary. You can then pass these " +"arguments when calling another function by using ``*`` and ``**``::" +msgstr "" +"请利用函数参数列表中的标识符 ``*`` 和 ``**`` 归集实参;结果会是元组形式的位置实参和字典形式的关键字实参。然后就可利用 ``*`` 和 " +"``**`` 在调用其他函数时传入这些实参:" + +#: ../../faq/programming.rst:408 +msgid "What is the difference between arguments and parameters?" +msgstr "形参和实参之间有什么区别?" + +#: ../../faq/programming.rst:410 +msgid "" +":term:`Parameters ` are defined by the names that appear in a " +"function definition, whereas :term:`arguments ` are the values " +"actually passed to a function when calling it. Parameters define what types" +" of arguments a function can accept. For example, given the function " +"definition::" +msgstr "" +":term:`形参 ` 是指出现在函数定义中的名称,而 :term:`实参 ` 则是在调用函数时实际传入的值。" +" 形参定义了一个函数能接受何种类型的实参。 例如,对于以下函数定义::" + +#: ../../faq/programming.rst:418 +msgid "" +"*foo*, *bar* and *kwargs* are parameters of ``func``. However, when calling" +" ``func``, for example::" +msgstr "*foo* 、 *bar* 和 *kwargs* 是 ``func`` 的形参。 不过在调用 ``func`` 时,例如:" + +#: ../../faq/programming.rst:423 +msgid "the values ``42``, ``314``, and ``somevar`` are arguments." +msgstr "``42`` 、 ``314`` 和 ``somevar`` 则是实参。" + +#: ../../faq/programming.rst:427 +msgid "Why did changing list 'y' also change list 'x'?" +msgstr "为什么修改列表 'y' 也会更改列表 'x'?" + +#: ../../faq/programming.rst:429 +msgid "If you wrote code like::" +msgstr "如果代码编写如下:" + +#: ../../faq/programming.rst:439 +msgid "" +"you might be wondering why appending an element to ``y`` changed ``x`` too." +msgstr "或许大家很想知道,为什么在 y 中添加一个元素时, x 也会改变。" + +#: ../../faq/programming.rst:441 +msgid "There are two factors that produce this result:" +msgstr "产生这种结果有两个因素:" + +#: ../../faq/programming.rst:443 +msgid "" +"Variables are simply names that refer to objects. Doing ``y = x`` doesn't " +"create a copy of the list -- it creates a new variable ``y`` that refers to " +"the same object ``x`` refers to. This means that there is only one object " +"(the list), and both ``x`` and ``y`` refer to it." +msgstr "" +"变量只是指向对象的一个名称。执行 ``y = x`` 并不会创建列表的副本——而只是创建了一个新变量 ``y``,并指向 ``x`` " +"所指的同一对象。这就意味着只存在一个列表对象,``x`` 和 ``y`` 都是对它的引用。" + +#: ../../faq/programming.rst:447 +msgid "" +"Lists are :term:`mutable`, which means that you can change their content." +msgstr "列表属于 :term:`mutable` 对象,这意味着它的内容是可以修改的。" + +#: ../../faq/programming.rst:449 +msgid "" +"After the call to :meth:`~list.append`, the content of the mutable object " +"has changed from ``[]`` to ``[10]``. Since both the variables refer to the " +"same object, using either name accesses the modified value ``[10]``." +msgstr "" +"在调用 :meth:`~list.append` 之后,该可变对象的内容由 ``[]`` 变为 ``[10]``。由于 x 和 y " +"这两个变量引用了同一对象,因此用其中任意一个名称所访问到的都是修改后的值 ``[10]``。" + +#: ../../faq/programming.rst:453 +msgid "If we instead assign an immutable object to ``x``::" +msgstr "如果把赋给 ``x`` 的对象换成一个不可变对象:" + +#: ../../faq/programming.rst:463 +msgid "" +"we can see that in this case ``x`` and ``y`` are not equal anymore. This is" +" because integers are :term:`immutable`, and when we do ``x = x + 1`` we are" +" not mutating the int ``5`` by incrementing its value; instead, we are " +"creating a new object (the int ``6``) and assigning it to ``x`` (that is, " +"changing which object ``x`` refers to). After this assignment we have two " +"objects (the ints ``6`` and ``5``) and two variables that refer to them " +"(``x`` now refers to ``6`` but ``y`` still refers to ``5``)." +msgstr "" +"可见这时 ``x`` 和 ``y`` 就不再相等了。因为整数是 :term:`immutable` 对象,在执行 ``x = x + 1`` " +"时,并不会修改整数对象 ``5``,给它加上 1;而是创建了一个新的对象(整数对象 ``6`` )并将其赋给 ``x`` (也就是改变了 ``x`` " +"所指向的对象)。在赋值完成后,就有了两个对象(整数对象 ``6`` 和 ``5`` )和分别指向他俩的两个变量( ``x`` 现在指向 ``6`` 而 " +"``y`` 仍然指向 ``5`` )。" + +#: ../../faq/programming.rst:471 +msgid "" +"Some operations (for example ``y.append(10)`` and ``y.sort()``) mutate the " +"object, whereas superficially similar operations (for example ``y = y + " +"[10]`` and ``sorted(y)``) create a new object. In general in Python (and in" +" all cases in the standard library) a method that mutates an object will " +"return ``None`` to help avoid getting the two types of operations confused." +" So if you mistakenly write ``y.sort()`` thinking it will give you a sorted" +" copy of ``y``, you'll instead end up with ``None``, which will likely cause" +" your program to generate an easily diagnosed error." +msgstr "" +"某些操作(例如 ``y.append(10)`` 和 ``y.sort()`` )会直接修改原对象,而看上去相似的另一些操作(例如 ``y = y + " +"[10]`` 和 ``sorted(y)`` )则会创建新的对象。通常在 Python 中(以及所有标准库),直接修改原对象的方法将会返回 " +"``None`` ,以助避免混淆这两种不同类型的操作。因此如果误用了 ``y.sort()`` 并期望返回 ``y`` 的有序副本,则结果只会是 " +"``None`` ,这可能就能让程序引发一条容易诊断的错误。" + +#: ../../faq/programming.rst:480 +msgid "" +"However, there is one class of operations where the same operation sometimes" +" has different behaviors with different types: the augmented assignment " +"operators. For example, ``+=`` mutates lists but not tuples or ints " +"(``a_list += [1, 2, 3]`` is equivalent to ``a_list.extend([1, 2, 3])`` and " +"mutates ``a_list``, whereas ``some_tuple += (1, 2, 3)`` and ``some_int += " +"1`` create new objects)." +msgstr "" +"不过还存在一类操作,用不同的类型执行相同的操作有时会发生不同的行为:即增量赋值运算符。例如,``+=`` " +"会修改列表,但不会修改元组或整数(``a_list += [1, 2, 3]`` 与 ``a_list.extend([1, 2, 3])`` " +"同样都会改变 ``a_list``,而 ``some_tuple += (1, 2, 3)`` 和 ``some_int += 1`` " +"则会创建新的对象)。" + +#: ../../faq/programming.rst:487 +msgid "In other words:" +msgstr "换而言之:" + +#: ../../faq/programming.rst:489 +msgid "" +"If we have a mutable object (:class:`list`, :class:`dict`, :class:`set`, " +"etc.), we can use some specific operations to mutate it and all the " +"variables that refer to it will see the change." +msgstr "" +"对于一个可变对象( :class:`list` 、 :class:`dict` 、 :class:`set` " +"等等),可以利用某些特定的操作进行修改,所有引用它的变量都会反映出改动情况。" + +#: ../../faq/programming.rst:492 +msgid "" +"If we have an immutable object (:class:`str`, :class:`int`, :class:`tuple`, " +"etc.), all the variables that refer to it will always see the same value, " +"but operations that transform that value into a new value always return a " +"new object." +msgstr "" +"对于一个不可变对象( :class:`str` 、 :class:`int` 、 :class:`tuple` " +"等),所有引用它的变量都会给出相同的值,但所有改变其值的操作都将返回一个新的对象。" + +#: ../../faq/programming.rst:497 +msgid "" +"If you want to know if two variables refer to the same object or not, you " +"can use the :keyword:`is` operator, or the built-in function :func:`id`." +msgstr "如要知道两个变量是否指向同一个对象,可以利用 :keyword:`is` 运算符或内置函数 :func:`id`。" + +#: ../../faq/programming.rst:502 +msgid "How do I write a function with output parameters (call by reference)?" +msgstr "如何编写带有输出参数的函数(按照引用调用)?" + +#: ../../faq/programming.rst:504 +msgid "" +"Remember that arguments are passed by assignment in Python. Since " +"assignment just creates references to objects, there's no alias between an " +"argument name in the caller and callee, and so no call-by-reference per se." +" You can achieve the desired effect in a number of ways." +msgstr "" +"请记住,Python " +"中的实参是通过赋值传递的。由于赋值只是创建了对象的引用,所以调用方和被调用方的参数名都不存在别名,本质上也就不存在按引用调用的方式。通过以下几种方式,可以得到所需的效果。" + +#: ../../faq/programming.rst:509 +msgid "By returning a tuple of the results::" +msgstr "返回一个元组:" + +#: ../../faq/programming.rst:520 +msgid "This is almost always the clearest solution." +msgstr "这差不多是最明晰的解决方案了。" + +#: ../../faq/programming.rst:522 +msgid "" +"By using global variables. This isn't thread-safe, and is not recommended." +msgstr "使用全局变量。这不是线程安全的方案,不推荐使用。" + +#: ../../faq/programming.rst:524 +msgid "By passing a mutable (changeable in-place) object::" +msgstr "传递一个可变(即可原地修改的) 对象:" + +#: ../../faq/programming.rst:535 +msgid "By passing in a dictionary that gets mutated::" +msgstr "传入一个接收可变对象的字典::" + +#: ../../faq/programming.rst:546 +msgid "Or bundle up values in a class instance::" +msgstr "或者把值用类实例封装起来:" + +#: ../../faq/programming.rst:563 +msgid "There's almost never a good reason to get this complicated." +msgstr "没有什么理由要把问题搞得这么复杂。" + +#: ../../faq/programming.rst:565 +msgid "Your best choice is to return a tuple containing the multiple results." +msgstr "最佳选择就是返回一个包含多个结果值的元组。" + +#: ../../faq/programming.rst:569 +msgid "How do you make a higher order function in Python?" +msgstr "如何在 Python 中创建高阶函数?" + +#: ../../faq/programming.rst:571 +msgid "" +"You have two choices: you can use nested scopes or you can use callable " +"objects. For example, suppose you wanted to define ``linear(a,b)`` which " +"returns a function ``f(x)`` that computes the value ``a*x+b``. Using nested" +" scopes::" +msgstr "" +"有两种选择:嵌套作用域、可调用对象。假定需要定义 ``linear(a,b)`` ,其返回结果是一个计算出 ``a*x+b`` 的函数 " +"``f(x)``。 采用嵌套作用域的方案如下:" + +#: ../../faq/programming.rst:580 +msgid "Or using a callable object::" +msgstr "或者可采用可调用对象:" + +#: ../../faq/programming.rst:590 +msgid "In both cases, ::" +msgstr "采用这两种方案时:" + +#: ../../faq/programming.rst:594 +msgid "gives a callable object where ``taxes(10e6) == 0.3 * 10e6 + 2``." +msgstr "都会得到一个可调用对象,可实现 ``taxes(10e6) == 0.3 * 10e6 + 2`` 。" + +#: ../../faq/programming.rst:596 +msgid "" +"The callable object approach has the disadvantage that it is a bit slower " +"and results in slightly longer code. However, note that a collection of " +"callables can share their signature via inheritance::" +msgstr "可调用对象的方案有个缺点,就是速度稍慢且生成的代码略长。不过值得注意的是,同一组可调用对象能够通过继承来共享签名(类声明):" + +#: ../../faq/programming.rst:605 +msgid "Object can encapsulate state for several methods::" +msgstr "对象可以为多个方法的运行状态进行封装:" + +#: ../../faq/programming.rst:623 +msgid "" +"Here ``inc()``, ``dec()`` and ``reset()`` act like functions which share the" +" same counting variable." +msgstr "以上 ``inc()`` 、 ``dec()`` 和 ``reset()`` 的表现,就如同共享了同一计数变量一样。" + +#: ../../faq/programming.rst:628 +msgid "How do I copy an object in Python?" +msgstr "如何复制 Python 对象?" + +#: ../../faq/programming.rst:630 +msgid "" +"In general, try :func:`copy.copy` or :func:`copy.deepcopy` for the general " +"case. Not all objects can be copied, but most can." +msgstr "" +"一般情况下,用 :func:`copy.copy` 或 :func:`copy.deepcopy` " +"基本就可以了。并不是所有对象都支持复制,但多数是可以的。" + +#: ../../faq/programming.rst:633 +msgid "" +"Some objects can be copied more easily. Dictionaries have a " +":meth:`~dict.copy` method::" +msgstr "某些对象可以用更简便的方法进行复制。比如字典对象就提供了 :meth:`~dict.copy` 方法:" + +#: ../../faq/programming.rst:638 +msgid "Sequences can be copied by slicing::" +msgstr "序列可以用切片操作进行复制:" + +#: ../../faq/programming.rst:644 +msgid "How can I find the methods or attributes of an object?" +msgstr "如何找到对象的方法或属性?" + +#: ../../faq/programming.rst:646 +msgid "" +"For an instance x of a user-defined class, ``dir(x)`` returns an " +"alphabetized list of the names containing the instance attributes and " +"methods and attributes defined by its class." +msgstr "假定 x 是一个用户自定义类的实例,``dir(x)`` 将返回一个按字母排序的名称列表,其中包含了实例的属性及由类定义的方法和属性。 " + +#: ../../faq/programming.rst:652 +msgid "How can my code discover the name of an object?" +msgstr "如何用代码获取对象的名称?" + +#: ../../faq/programming.rst:654 +msgid "" +"Generally speaking, it can't, because objects don't really have names. " +"Essentially, assignment always binds a name to a value; the same is true of " +"``def`` and ``class`` statements, but in that case the value is a callable. " +"Consider the following code::" +msgstr "" +"一般而言这是无法实现的,因为对象并不存在真正的名称。赋值本质上是把某个名称绑定到某个值上;``def`` 和 ``class`` " +"语句同样如此,只是值换成了某个可调用对象。比如以下代码:" + +#: ../../faq/programming.rst:670 +msgid "" +"Arguably the class has a name: even though it is bound to two names and " +"invoked through the name B the created instance is still reported as an " +"instance of class A. However, it is impossible to say whether the " +"instance's name is a or b, since both names are bound to the same value." +msgstr "" +"可以不太严谨地说,上述类具有一个名称:即便它绑定了两个名称并通过名称 B 发起调用,可是创建出来的实例仍被视为是类 A 的实例。但无法说出实例的名称是 " +"a 还是 b,因为这两个名称都被绑定到同一个值上了。" + +#: ../../faq/programming.rst:675 +msgid "" +"Generally speaking it should not be necessary for your code to \"know the " +"names\" of particular values. Unless you are deliberately writing " +"introspective programs, this is usually an indication that a change of " +"approach might be beneficial." +msgstr "代码一般没有必要去“知晓”某个值的名称。通常这种需求预示着还是改变方案为好,除非真的是要编写内审程序。" + +#: ../../faq/programming.rst:680 +msgid "" +"In comp.lang.python, Fredrik Lundh once gave an excellent analogy in answer " +"to this question:" +msgstr "在 comp.lang.python 中,Fredrik Lundh 在回答这样的问题时曾经给出过一个绝佳的类比:" + +#: ../../faq/programming.rst:683 +msgid "" +"The same way as you get the name of that cat you found on your porch: the " +"cat (object) itself cannot tell you its name, and it doesn't really care -- " +"so the only way to find out what it's called is to ask all your neighbours " +"(namespaces) if it's their cat (object)..." +msgstr "" +"这就像要知道家门口的那只猫的名字一样:猫(对象)自己不会说出它的名字,它根本就不在乎自己叫什么——所以唯一方法就是问一遍你所有的邻居(命名空间),这是不是他们家的猫(对象)……" + +#: ../../faq/programming.rst:688 +msgid "" +"....and don't be surprised if you'll find that it's known by many names, or " +"no name at all!" +msgstr "……并且如果你发现它有很多名字或根本没有名字,那也不必惊讶!" + +#: ../../faq/programming.rst:693 +msgid "What's up with the comma operator's precedence?" +msgstr "逗号运算符的优先级是什么?" + +#: ../../faq/programming.rst:695 +msgid "Comma is not an operator in Python. Consider this session::" +msgstr "逗号不是 Python 的运算符。 请看以下例子:" + +#: ../../faq/programming.rst:700 +msgid "" +"Since the comma is not an operator, but a separator between expressions the " +"above is evaluated as if you had entered::" +msgstr "由于逗号不是运算符,而只是表达式之间的分隔符,因此上述代码就相当于:" + +#: ../../faq/programming.rst:705 +msgid "not::" +msgstr "而不是:" + +#: ../../faq/programming.rst:709 +msgid "" +"The same is true of the various assignment operators (``=``, ``+=`` etc). " +"They are not truly operators but syntactic delimiters in assignment " +"statements." +msgstr "对于各种赋值运算符( ``=`` 、 ``+=`` 等)来说同样如此。他们并不是真正的运算符,而只是赋值语句中的语法分隔符。" + +#: ../../faq/programming.rst:714 +msgid "Is there an equivalent of C's \"?:\" ternary operator?" +msgstr "是否提供等价于 C 语言 \"?:\" 三目运算符的东西?" + +#: ../../faq/programming.rst:716 +msgid "Yes, there is. The syntax is as follows::" +msgstr "有的。语法如下:" + +#: ../../faq/programming.rst:723 +msgid "" +"Before this syntax was introduced in Python 2.5, a common idiom was to use " +"logical operators::" +msgstr "在 Python 2.5 引入上述语法之前,通常的做法是使用逻辑运算符:" + +#: ../../faq/programming.rst:728 +msgid "" +"However, this idiom is unsafe, as it can give wrong results when *on_true* " +"has a false boolean value. Therefore, it is always better to use the ``... " +"if ... else ...`` form." +msgstr "" +"然而这种做法并不保险,因为当 *on_true* 为布尔值“假”时,结果将会出错。所以肯定还是采用 ``... if ... else ...`` " +"形式为妙。" + +#: ../../faq/programming.rst:734 +msgid "Is it possible to write obfuscated one-liners in Python?" +msgstr "是否可以用 Python 编写让人眼晕的单行程序?" + +#: ../../faq/programming.rst:736 +msgid "" +"Yes. Usually this is done by nesting :keyword:`lambda` within " +":keyword:`!lambda`. See the following three examples, due to Ulf Bartelt::" +msgstr "" +"可以。通常是在 :keyword:`lambda` 中嵌套 :keyword:`!lambda` 来实现的。请参阅以下三个来自 Ulf Bartelt " +"的示例代码:" + +#: ../../faq/programming.rst:763 +msgid "Don't try this at home, kids!" +msgstr "请不要在家里尝试,骚年!" + +#: ../../faq/programming.rst:769 +msgid "What does the slash(/) in the parameter list of a function mean?" +msgstr "函数形参列表中的斜杠(/)是什么意思?" + +#: ../../faq/programming.rst:771 +msgid "" +"A slash in the argument list of a function denotes that the parameters prior" +" to it are positional-only. Positional-only parameters are the ones without" +" an externally-usable name. Upon calling a function that accepts " +"positional-only parameters, arguments are mapped to parameters based solely " +"on their position. For example, :func:`divmod` is a function that accepts " +"positional-only parameters. Its documentation looks like this::" +msgstr "" +"函数参数列表中的斜杠表示在它之前的形参全都仅限位置形参。仅限位置形参没有可供外部使用的名称。在调用仅接受位置形参的函数时,实参只会根据位置映射到形参上。假定" +" :func:`divmod` 是一个仅接受位置形参的函数。 它的帮助文档如下所示:" + +#: ../../faq/programming.rst:784 +msgid "" +"The slash at the end of the parameter list means that both parameters are " +"positional-only. Thus, calling :func:`divmod` with keyword arguments would " +"lead to an error::" +msgstr "形参列表尾部的斜杠说明,两个形参都是仅限位置形参。因此,用关键字参数调用 :func:`divmod` 将会引发错误:" + +#: ../../faq/programming.rst:795 +msgid "Numbers and strings" +msgstr "数字和字符串" + +#: ../../faq/programming.rst:798 +msgid "How do I specify hexadecimal and octal integers?" +msgstr "如何给出十六进制和八进制整数?" + +#: ../../faq/programming.rst:800 +msgid "" +"To specify an octal digit, precede the octal value with a zero, and then a " +"lower or uppercase \"o\". For example, to set the variable \"a\" to the " +"octal value \"10\" (8 in decimal), type::" +msgstr "" +"要给出八进制数,需在八进制数值前面加上一个零和一个小写或大写字母 \"o\" 作为前缀。例如,要将变量 \"a\" 设为八进制的 \"10\" " +"(十进制的 8),写法如下:" + +#: ../../faq/programming.rst:808 +msgid "" +"Hexadecimal is just as easy. Simply precede the hexadecimal number with a " +"zero, and then a lower or uppercase \"x\". Hexadecimal digits can be " +"specified in lower or uppercase. For example, in the Python interpreter::" +msgstr "" +"十六进制数也很简单。只要在十六进制数前面加上一个零和一个小写或大写的字母 \"x\"。十六进制数中的字母可以为大写或小写。比如在 Python " +"解释器中输入:" + +#: ../../faq/programming.rst:821 +msgid "Why does -22 // 10 return -3?" +msgstr "为什么 -22 // 10 会返回 -3 ?" + +#: ../../faq/programming.rst:823 +msgid "" +"It's primarily driven by the desire that ``i % j`` have the same sign as " +"``j``. If you want that, and also want::" +msgstr "这主要是为了让 ``i % j`` 的正负与 ``j`` 一致,如果期望如此,且期望如下等式成立:" + +#: ../../faq/programming.rst:828 +msgid "" +"then integer division has to return the floor. C also requires that " +"identity to hold, and then compilers that truncate ``i // j`` need to make " +"``i % j`` have the same sign as ``i``." +msgstr "" +"那么整除就必须返回向下取整的结果。C 语言同样要求保持这种一致性,于是编译器在截断 ``i // j`` 的结果时需要让 ``i % j`` 的正负与 " +"``i`` 一致。" + +#: ../../faq/programming.rst:832 +msgid "" +"There are few real use cases for ``i % j`` when ``j`` is negative. When " +"``j`` is positive, there are many, and in virtually all of them it's more " +"useful for ``i % j`` to be ``>= 0``. If the clock says 10 now, what did it " +"say 200 hours ago? ``-190 % 12 == 2`` is useful; ``-190 % 12 == -10`` is a " +"bug waiting to bite." +msgstr "" +"对于 ``i % j`` 来说 ``j`` 为负值的应用场景实际上是非常少的。 而 ``j`` 为正值的情况则非常多,并且实际上在所有情况下让 ``i " +"% j`` 的结果为 ``>= 0`` 会更有用处。 如果现在时间为 10 时,那么 200 小时前应是几时? ``-190 % 12 == 2`` " +"是有用处的;``-190 % 12 == -10`` 则是会导致意外的漏洞。" + +#: ../../faq/programming.rst:840 +msgid "How do I get int literal attribute instead of SyntaxError?" +msgstr "我如何获得 int 字面属性而不是 SyntaxError ?" + +#: ../../faq/programming.rst:842 +msgid "" +"Trying to lookup an ``int`` literal attribute in the normal manner gives a " +"syntax error because the period is seen as a decimal point::" +msgstr "试图以正常方式查询一个 ``int`` 字头的属性,会出现语法错误,因为句号被看成是小数点::" + +#: ../../faq/programming.rst:851 +msgid "" +"The solution is to separate the literal from the period with either a space " +"or parentheses." +msgstr "解决办法是用空格或括号将字词与句号分开。" + +#: ../../faq/programming.rst:861 +msgid "How do I convert a string to a number?" +msgstr "如何将字符串转换为数字?" + +#: ../../faq/programming.rst:863 +msgid "" +"For integers, use the built-in :func:`int` type constructor, e.g. " +"``int('144') == 144``. Similarly, :func:`float` converts to floating-point," +" e.g. ``float('144') == 144.0``." +msgstr "" +"对于整数,可使用内置的 :func:`int` 类型构造器,例如 ``int('144') == 144``。 类似地,可使用 " +":func:`float` 转换为浮点数,例如 ``float('144') == 144.0``。" + +#: ../../faq/programming.rst:867 +msgid "" +"By default, these interpret the number as decimal, so that ``int('0144') == " +"144`` holds true, and ``int('0x144')`` raises :exc:`ValueError`. " +"``int(string, base)`` takes the base to convert from as a second optional " +"argument, so ``int( '0x144', 16) == 324``. If the base is specified as 0, " +"the number is interpreted using Python's rules: a leading '0o' indicates " +"octal, and '0x' indicates a hex number." +msgstr "" +"默认情况下,这些操作会将数字按十进制来解读,因此 ``int('0144') == 144`` 为真值,而 ``int('0x144')`` 会引发 " +":exc:`ValueError`。 ``int(string, base)`` 接受第二个可选参数指定转换的基数,例如 ``int( '0x144'," +" 16) == 324``。 如果指定基数为 0,则按 Python 规则解读数字:前缀 '0o' 表示八进制,而 '0x' 表示十六进制。" + +#: ../../faq/programming.rst:874 +msgid "" +"Do not use the built-in function :func:`eval` if all you need is to convert " +"strings to numbers. :func:`eval` will be significantly slower and it " +"presents a security risk: someone could pass you a Python expression that " +"might have unwanted side effects. For example, someone could pass " +"``__import__('os').system(\"rm -rf $HOME\")`` which would erase your home " +"directory." +msgstr "" +"如果只是想把字符串转为数字,请不要使用内置函数 :func:`eval`。 :func:`eval` " +"的速度慢很多且存在安全风险:别人可能会传入带有不良副作用的 Python 表达式。比如可能会传入 " +"``__import__('os').system(\"rm -rf $HOME\")`` ,这会把 home 目录给删了。" + +#: ../../faq/programming.rst:881 +msgid "" +":func:`eval` also has the effect of interpreting numbers as Python " +"expressions, so that e.g. ``eval('09')`` gives a syntax error because Python" +" does not allow leading '0' in a decimal number (except '0')." +msgstr "" +":func:`eval` 还有把数字解析为 Python 表达式的后果,因此如 ``eval('09')`` 将会导致语法错误,因为 Python " +"不允许十进制数带有前导 '0'('0' 除外)。" + +#: ../../faq/programming.rst:887 +msgid "How do I convert a number to a string?" +msgstr "如何将数字转换为字符串?" + +#: ../../faq/programming.rst:889 +msgid "" +"To convert, e.g., the number 144 to the string '144', use the built-in type " +"constructor :func:`str`. If you want a hexadecimal or octal representation," +" use the built-in functions :func:`hex` or :func:`oct`. For fancy " +"formatting, see the :ref:`f-strings` and :ref:`formatstrings` sections, e.g." +" ``\"{:04d}\".format(144)`` yields ``'0144'`` and " +"``\"{:.3f}\".format(1.0/3.0)`` yields ``'0.333'``." +msgstr "" +"比如要把数字 144 转换为字符串 '144',可使用内置类型构造器 :func:`str`。如果要表示为十六进制或八进制数格式,可使用内置函数 " +":func:`hex` 或 :func:`oct`。更复杂的格式化方法请参阅 :ref:`f-strings` 和 " +":ref:`formatstrings` 等章节,比如 ``\"{:04d}\".format(144)`` 会生成 ``'0144'`` , " +"``\"{:.3f}\".format(1.0/3.0)`` 则会生成 ``'0.333'``。" + +#: ../../faq/programming.rst:898 +msgid "How do I modify a string in place?" +msgstr "如何修改字符串?" + +#: ../../faq/programming.rst:900 +msgid "" +"You can't, because strings are immutable. In most situations, you should " +"simply construct a new string from the various parts you want to assemble it" +" from. However, if you need an object with the ability to modify in-place " +"unicode data, try using an :class:`io.StringIO` object or the :mod:`array` " +"module::" +msgstr "" +"无法修改,因为字符串是不可变对象。 在大多数情况下,只要将各个部分组合起来构造出一个新字符串即可。如果需要一个能原地修改 Unicode " +"数据的对象,可以试试 :class:`io.StringIO` 对象或 :mod:`array` 模块:" + +#: ../../faq/programming.rst:930 +msgid "How do I use strings to call functions/methods?" +msgstr "如何使用字符串调用函数/方法?" + +#: ../../faq/programming.rst:932 +msgid "There are various techniques." +msgstr "有多种技巧可供选择。" + +#: ../../faq/programming.rst:934 +msgid "" +"The best is to use a dictionary that maps strings to functions. The primary" +" advantage of this technique is that the strings do not need to match the " +"names of the functions. This is also the primary technique used to emulate " +"a case construct::" +msgstr "最好的做法是采用一个字典,将字符串映射为函数。其主要优势就是字符串不必与函数名一样。这也是用来模拟 case 结构的主要技巧:" + +#: ../../faq/programming.rst:949 +msgid "Use the built-in function :func:`getattr`::" +msgstr "利用内置函数 :func:`getattr` :" + +#: ../../faq/programming.rst:954 +msgid "" +"Note that :func:`getattr` works on any object, including classes, class " +"instances, modules, and so on." +msgstr "请注意 :func:`getattr` 可用于任何对象,包括类、类实例、模块等等。" + +#: ../../faq/programming.rst:957 +msgid "This is used in several places in the standard library, like this::" +msgstr "标准库就多次使用了这个技巧,例如:" + +#: ../../faq/programming.rst:970 +msgid "Use :func:`locals` to resolve the function name::" +msgstr "用 :func:`locals` 解析出函数名:" + +#: ../../faq/programming.rst:982 +msgid "" +"Is there an equivalent to Perl's chomp() for removing trailing newlines from" +" strings?" +msgstr "是否有与Perl 的chomp() 等效的方法,用于从字符串中删除尾随换行符?" + +#: ../../faq/programming.rst:984 +msgid "" +"You can use ``S.rstrip(\"\\r\\n\")`` to remove all occurrences of any line " +"terminator from the end of the string ``S`` without removing other trailing " +"whitespace. If the string ``S`` represents more than one line, with several" +" empty lines at the end, the line terminators for all the blank lines will " +"be removed::" +msgstr "" +"可以使用 ``S.rstrip(\"\\r\\n\")`` 从字符串 ``S`` 的末尾删除所有的换行符,而不删除其他尾随空格。如果字符串 ``S`` " +"表示多行,且末尾有几个空行,则将删除所有空行的换行符:" + +#: ../../faq/programming.rst:996 +msgid "" +"Since this is typically only desired when reading text one line at a time, " +"using ``S.rstrip()`` this way works well." +msgstr "由于通常只在一次读取一行文本时才需要这样做,所以使用 ``S.rstrip()`` 这种方式工作得很好。" + +#: ../../faq/programming.rst:1001 +msgid "Is there a scanf() or sscanf() equivalent?" +msgstr "是否有 scanf() 或 sscanf() 的等价函数?" + +#: ../../faq/programming.rst:1003 +msgid "Not as such." +msgstr "没有。" + +#: ../../faq/programming.rst:1005 +msgid "" +"For simple input parsing, the easiest approach is usually to split the line " +"into whitespace-delimited words using the :meth:`~str.split` method of " +"string objects and then convert decimal strings to numeric values using " +":func:`int` or :func:`float`. ``split()`` supports an optional \"sep\" " +"parameter which is useful if the line uses something other than whitespace " +"as a separator." +msgstr "" +"如果要对简单的输入进行解析,最容易的做法通常是利用字符串对象的 :meth:`~str.split` 方法将一行按空白符分隔拆分为多个单词,然后用 " +":func:`int` 或 :func:`float` 将十进制数字符串转换为数字值。 ``split()`` 支持可选的 \"sep\" " +"形参,适用于分隔符不用空白符的情况。" + +#: ../../faq/programming.rst:1011 +msgid "" +"For more complicated input parsing, regular expressions are more powerful " +"than C's :c:func:`sscanf` and better suited for the task." +msgstr "如果要对更复杂的输入进行解析,那么正则表达式要比 C 语言的 :c:func:`sscanf` 更强大,也更合适。" + +#: ../../faq/programming.rst:1016 +msgid "What does 'UnicodeDecodeError' or 'UnicodeEncodeError' error mean?" +msgstr "'UnicodeDecodeError' 或 'UnicodeEncodeError' 错误是什么意思?" + +#: ../../faq/programming.rst:1018 +msgid "See the :ref:`unicode-howto`." +msgstr "见 :ref:`unicode-howto`" + +#: ../../faq/programming.rst:1022 +msgid "Performance" +msgstr "性能" + +#: ../../faq/programming.rst:1025 +msgid "My program is too slow. How do I speed it up?" +msgstr "我的程序太慢了。该如何加快速度?" + +#: ../../faq/programming.rst:1027 +msgid "" +"That's a tough one, in general. First, here are a list of things to " +"remember before diving further:" +msgstr "总的来说,这是个棘手的问题。在进一步讨论之前,首先应该记住以下几件事:" + +#: ../../faq/programming.rst:1030 +msgid "" +"Performance characteristics vary across Python implementations. This FAQ " +"focuses on :term:`CPython`." +msgstr "不同的 Python 实现具有不同的性能特点。 本 FAQ 着重解答的是 :term:`CPython`。" + +#: ../../faq/programming.rst:1032 +msgid "" +"Behaviour can vary across operating systems, especially when talking about " +"I/O or multi-threading." +msgstr "不同操作系统可能会有不同表现,尤其是涉及 I/O 和多线程时。" + +#: ../../faq/programming.rst:1034 +msgid "" +"You should always find the hot spots in your program *before* attempting to " +"optimize any code (see the :mod:`profile` module)." +msgstr "在尝试优化代码 *之前* ,务必要先找出程序中的热点(请参阅 :mod:`profile` 模块)。" + +#: ../../faq/programming.rst:1036 +msgid "" +"Writing benchmark scripts will allow you to iterate quickly when searching " +"for improvements (see the :mod:`timeit` module)." +msgstr "编写基准测试脚本,在寻求性能提升的过程中就能实现快速迭代(请参阅 :mod:`timeit` 模块)。" + +#: ../../faq/programming.rst:1038 +msgid "" +"It is highly recommended to have good code coverage (through unit testing or" +" any other technique) before potentially introducing regressions hidden in " +"sophisticated optimizations." +msgstr "强烈建议首先要保证足够高的代码测试覆盖率(通过单元测试或其他技术),因为复杂的优化有可能会导致代码回退。" + +#: ../../faq/programming.rst:1042 +msgid "" +"That being said, there are many tricks to speed up Python code. Here are " +"some general principles which go a long way towards reaching acceptable " +"performance levels:" +msgstr "话虽如此,Python 代码的提速还是有很多技巧的。以下列出了一些普适性的原则,对于让性能达到可接受的水平会有很大帮助:" + +#: ../../faq/programming.rst:1046 +msgid "" +"Making your algorithms faster (or changing to faster ones) can yield much " +"larger benefits than trying to sprinkle micro-optimization tricks all over " +"your code." +msgstr "相较于试图对全部代码铺开做微观优化,优化算法(或换用更快的算法)可以产出更大的收益。" + +#: ../../faq/programming.rst:1050 +msgid "" +"Use the right data structures. Study documentation for the :ref:`bltin-" +"types` and the :mod:`collections` module." +msgstr "使用正确的数据结构。参考 :ref:`bltin-types` 和 :mod:`collections` 模块的文档。" + +#: ../../faq/programming.rst:1053 +msgid "" +"When the standard library provides a primitive for doing something, it is " +"likely (although not guaranteed) to be faster than any alternative you may " +"come up with. This is doubly true for primitives written in C, such as " +"builtins and some extension types. For example, be sure to use either the " +":meth:`list.sort` built-in method or the related :func:`sorted` function to " +"do sorting (and see the :ref:`sortinghowto` for examples of moderately " +"advanced usage)." +msgstr "" +"如果标准库已为某些操作提供了基础函数,则可能(当然不能保证)比所有自编的函数都要快。对于用 C " +"语言编写的基础函数则更是如此,比如内置函数和一些扩展类型。例如,一定要用内置方法 :meth:`list.sort` 或 :func:`sorted` " +"函数进行排序(某些高级用法的示例请参阅 :ref:`sortinghowto` )。" + +#: ../../faq/programming.rst:1061 +msgid "" +"Abstractions tend to create indirections and force the interpreter to work " +"more. If the levels of indirection outweigh the amount of useful work done," +" your program will be slower. You should avoid excessive abstraction, " +"especially under the form of tiny functions or methods (which are also often" +" detrimental to readability)." +msgstr "" +"抽象往往会造成中间层,并会迫使解释器执行更多的操作。如果抽象出来的中间层级太多,工作量超过了要完成的有效任务,那么程序就会被拖慢。应该避免过度的抽象,而且往往也会对可读性产生不利影响,特别是当函数或方法比较小的时候。" + +#: ../../faq/programming.rst:1067 +msgid "" +"If you have reached the limit of what pure Python can allow, there are tools" +" to take you further away. For example, `Cython `_ can " +"compile a slightly modified version of Python code into a C extension, and " +"can be used on many different platforms. Cython can take advantage of " +"compilation (and optional type annotations) to make your code significantly " +"faster than when interpreted. If you are confident in your C programming " +"skills, you can also :ref:`write a C extension module ` " +"yourself." +msgstr "" +"如果你已经达到纯 Python 允许的限制,那么有一些工具可以让你走得更远。 例如, `Cython `_ " +"可以将稍微修改的 Python 代码版本编译为 C 扩展,并且可以在许多不同的平台上使用。 Cython " +"可以利用编译(和可选的类型注释)来使代码明显快于解释运行时的速度。 如果您对 C 编程技能有信心,也可以自己 :ref:`编写 C 扩展模块 " +"` 。" + +#: ../../faq/programming.rst:1077 +msgid "" +"The wiki page devoted to `performance tips " +"`_." +msgstr "" +"专门介绍 `性能提示 `_ " +"的wiki页面。" + +#: ../../faq/programming.rst:1083 +msgid "What is the most efficient way to concatenate many strings together?" +msgstr "将多个字符串连接在一起的最有效方法是什么?" + +#: ../../faq/programming.rst:1085 +msgid "" +":class:`str` and :class:`bytes` objects are immutable, therefore " +"concatenating many strings together is inefficient as each concatenation " +"creates a new object. In the general case, the total runtime cost is " +"quadratic in the total string length." +msgstr "" +":class:`str` 和 :class:`bytes` " +"对象是不可变的,因此连接多个字符串的效率会很低,因为每次连接都会创建一个新的对象。一般情况下,总耗时与字符串总长是二次方的关系。" + +#: ../../faq/programming.rst:1090 +msgid "" +"To accumulate many :class:`str` objects, the recommended idiom is to place " +"them into a list and call :meth:`str.join` at the end::" +msgstr "如果要连接多个 :class:`str` 对象,通常推荐的方案是先全部放入列表,最后再调用 :meth:`str.join` :" + +#: ../../faq/programming.rst:1098 +msgid "(another reasonably efficient idiom is to use :class:`io.StringIO`)" +msgstr "(还有一种合理高效的习惯做法,就是利用 :class:`io.StringIO` )" + +#: ../../faq/programming.rst:1100 +msgid "" +"To accumulate many :class:`bytes` objects, the recommended idiom is to " +"extend a :class:`bytearray` object using in-place concatenation (the ``+=`` " +"operator)::" +msgstr "" +"如果要连接多个 :class:`bytes` 对象,推荐做法是用 :class:`bytearray` 对象的原地连接操作( ``+=`` " +"运算符)追加数据:" + +#: ../../faq/programming.rst:1109 +msgid "Sequences (Tuples/Lists)" +msgstr "序列(元组/列表)" + +#: ../../faq/programming.rst:1112 +msgid "How do I convert between tuples and lists?" +msgstr "如何在元组和列表之间进行转换?" + +#: ../../faq/programming.rst:1114 +msgid "" +"The type constructor ``tuple(seq)`` converts any sequence (actually, any " +"iterable) into a tuple with the same items in the same order." +msgstr "类型构造器 ``tuple(seq)`` 可将任意序列(实际上是任意可迭代对象)转换为数据项和顺序均不变的元组。" + +#: ../../faq/programming.rst:1117 +msgid "" +"For example, ``tuple([1, 2, 3])`` yields ``(1, 2, 3)`` and ``tuple('abc')`` " +"yields ``('a', 'b', 'c')``. If the argument is a tuple, it does not make a " +"copy but returns the same object, so it is cheap to call :func:`tuple` when " +"you aren't sure that an object is already a tuple." +msgstr "" +"例如,``tuple([1, 2, 3])`` 会生成 ``(1, 2, 3)`` , ``tuple('abc')`` 则会生成 ``('a', " +"'b', 'c')`` 。 如果参数就是元组,则不会创建副本而是返回同一对象,因此如果无法确定某个对象是否为元组时,直接调用 :func:`tuple`" +" 也没什么代价。" + +#: ../../faq/programming.rst:1122 +msgid "" +"The type constructor ``list(seq)`` converts any sequence or iterable into a " +"list with the same items in the same order. For example, ``list((1, 2, " +"3))`` yields ``[1, 2, 3]`` and ``list('abc')`` yields ``['a', 'b', 'c']``. " +"If the argument is a list, it makes a copy just like ``seq[:]`` would." +msgstr "" +"类型构造器 ``list(seq)`` 可将任意序列或可迭代对象转换为数据项和顺序均不变的列表。例如,``list((1, 2, 3))`` 会生成 " +"``[1, 2, 3]`` 而 ``list('abc')`` 则会生成 ``['a', 'b', 'c']``。如果参数即为列表,则会像 " +"``seq[:]`` 那样创建一个副本。" + +#: ../../faq/programming.rst:1129 +msgid "What's a negative index?" +msgstr "什么是负数索引?" + +#: ../../faq/programming.rst:1131 +msgid "" +"Python sequences are indexed with positive numbers and negative numbers. " +"For positive numbers 0 is the first index 1 is the second index and so " +"forth. For negative indices -1 is the last index and -2 is the penultimate " +"(next to last) index and so forth. Think of ``seq[-n]`` as the same as " +"``seq[len(seq)-n]``." +msgstr "" +"Python 序列的索引可以是正数或负数。索引为正数时,0 是第一个索引值, 1 为第二个,依此类推。索引为负数时,-1 为倒数第一个索引值,-2 " +"为倒数第二个,依此类推。可以认为 ``seq[-n]`` 就相当于 ``seq[len(seq)-n]``。" + +#: ../../faq/programming.rst:1136 +msgid "" +"Using negative indices can be very convenient. For example ``S[:-1]`` is " +"all of the string except for its last character, which is useful for " +"removing the trailing newline from a string." +msgstr "使用负数序号有时会很方便。 例如 ``S[:-1]`` 就是原字符串去掉最后一个字符,这可以用来移除某个字符串末尾的换行符。" + +#: ../../faq/programming.rst:1142 +msgid "How do I iterate over a sequence in reverse order?" +msgstr "序列如何以逆序遍历?" + +#: ../../faq/programming.rst:1144 +msgid "Use the :func:`reversed` built-in function::" +msgstr "使用内置函数 :func:`reversed` :" + +#: ../../faq/programming.rst:1149 +msgid "" +"This won't touch your original sequence, but build a new copy with reversed " +"order to iterate over." +msgstr "原序列不会变化,而是构建一个逆序的新副本以供遍历。" + +#: ../../faq/programming.rst:1154 +msgid "How do you remove duplicates from a list?" +msgstr "如何从列表中删除重复项?" + +#: ../../faq/programming.rst:1156 +msgid "See the Python Cookbook for a long discussion of many ways to do this:" +msgstr "许多完成此操作的的详细介绍,可参阅 Python Cookbook:" + +#: ../../faq/programming.rst:1158 +msgid "https://code.activestate.com/recipes/52560/" +msgstr "https://code.activestate.com/recipes/52560/" + +#: ../../faq/programming.rst:1160 +msgid "" +"If you don't mind reordering the list, sort it and then scan from the end of" +" the list, deleting duplicates as you go::" +msgstr "如果列表允许重新排序,不妨先对其排序,然后从列表末尾开始扫描,依次删除重复项:" + +#: ../../faq/programming.rst:1172 +msgid "" +"If all elements of the list may be used as set keys (i.e. they are all " +":term:`hashable`) this is often faster ::" +msgstr "如果列表的所有元素都能用作集合的键(即都是 :term:`hashable` ),以下做法速度往往更快:" + +#: ../../faq/programming.rst:1177 +msgid "" +"This converts the list into a set, thereby removing duplicates, and then " +"back into a list." +msgstr "以上操作会将列表转换为集合,从而删除重复项,然后返回成列表。" + +#: ../../faq/programming.rst:1182 +msgid "How do you remove multiple items from a list" +msgstr "如何从列表中删除多个项?" + +#: ../../faq/programming.rst:1184 +msgid "" +"As with removing duplicates, explicitly iterating in reverse with a delete " +"condition is one possibility. However, it is easier and faster to use slice" +" replacement with an implicit or explicit forward iteration. Here are three " +"variations.::" +msgstr "" +"类似于删除重复项,一种做法是反向遍历并根据条件删除。不过更简单快速的做法就是切片替换操作,采用隐式或显式的正向迭代遍历。以下是三种变体写法:" + +#: ../../faq/programming.rst:1193 +msgid "The list comprehension may be fastest." +msgstr "列表推导式可能是最快的。" + +#: ../../faq/programming.rst:1197 +msgid "How do you make an array in Python?" +msgstr "如何在 Python 中创建数组?" + +#: ../../faq/programming.rst:1199 +msgid "Use a list::" +msgstr "用列表:" + +#: ../../faq/programming.rst:1203 +msgid "" +"Lists are equivalent to C or Pascal arrays in their time complexity; the " +"primary difference is that a Python list can contain objects of many " +"different types." +msgstr "列表在时间复杂度方面相当于 C 或 Pascal 的数组;主要区别在于,Python 列表可以包含多种不同类型的对象。" + +#: ../../faq/programming.rst:1206 +msgid "" +"The ``array`` module also provides methods for creating arrays of fixed " +"types with compact representations, but they are slower to index than lists." +" Also note that NumPy and other third party packages define array-like " +"structures with various characteristics as well." +msgstr "" +"``array`` 模块也提供了一些创建具有紧凑格式的固定类型数组的方法,但其索引访问速度比列表慢。 并请注意 NumPy " +"和其他一些第三方包也定义了一些各具特色的数组类结构。" + +#: ../../faq/programming.rst:1211 +msgid "" +"To get Lisp-style linked lists, you can emulate cons cells using tuples::" +msgstr "若要得到 Lisp 风格的列表,可以用元组模拟 cons 元素:" + +#: ../../faq/programming.rst:1215 +msgid "" +"If mutability is desired, you could use lists instead of tuples. Here the " +"analogue of lisp car is ``lisp_list[0]`` and the analogue of cdr is " +"``lisp_list[1]``. Only do this if you're sure you really need to, because " +"it's usually a lot slower than using Python lists." +msgstr "" +"若要具备可变性,可以不用元组而是用列表。模拟 lisp car 函数的是 ``lisp_list[0]`` ,模拟 cdr 函数的是 " +"``lisp_list[1]`` 。仅当真正必要时才会这么用,因为通常这种用法要比 Python 列表慢得多。" + +#: ../../faq/programming.rst:1224 +msgid "How do I create a multidimensional list?" +msgstr "如何创建多维列表?" + +#: ../../faq/programming.rst:1226 +msgid "You probably tried to make a multidimensional array like this::" +msgstr "多维数组或许会用以下方式建立:" + +#: ../../faq/programming.rst:1230 +msgid "This looks correct if you print it:" +msgstr "打印出来貌似没错:" + +#: ../../faq/programming.rst:1241 +msgid "But when you assign a value, it shows up in multiple places:" +msgstr "但如果给某一项赋值,结果会同时在多个位置体现出来:" + +#: ../../faq/programming.rst:1253 +msgid "" +"The reason is that replicating a list with ``*`` doesn't create copies, it " +"only creates references to the existing objects. The ``*3`` creates a list " +"containing 3 references to the same list of length two. Changes to one row " +"will show in all rows, which is almost certainly not what you want." +msgstr "" +"原因在于用 ``*`` 对列表执行重复操作并不会创建副本,而只是创建现有对象的引用。 ``*3`` 创建的是包含 3 " +"个引用的列表,每个引用指向的是同一个长度为 2 的列表。1 处改动会体现在所有地方,这一定不是应有的方案。" + +#: ../../faq/programming.rst:1258 +msgid "" +"The suggested approach is to create a list of the desired length first and " +"then fill in each element with a newly created list::" +msgstr "推荐做法是先创建一个所需长度的列表,然后将每个元素都填充为一个新建列表。" + +#: ../../faq/programming.rst:1265 +msgid "" +"This generates a list containing 3 different lists of length two. You can " +"also use a list comprehension::" +msgstr "以上生成了一个包含 3 个列表的列表,每个子列表的长度为 2。也可以采用列表推导式:" + +#: ../../faq/programming.rst:1271 +msgid "" +"Or, you can use an extension that provides a matrix datatype; `NumPy " +"`_ is the best known." +msgstr "或者你还可以使用提供矩阵类型的扩展包;其中最著名的是 `NumPy `_。" + +#: ../../faq/programming.rst:1276 +msgid "How do I apply a method to a sequence of objects?" +msgstr "如何将方法应用于一系列对象?" + +#: ../../faq/programming.rst:1278 +msgid "Use a list comprehension::" +msgstr "可以使用列表推导式:" + +#: ../../faq/programming.rst:1285 +msgid "" +"Why does a_tuple[i] += ['item'] raise an exception when the addition works?" +msgstr "为什么 a_tuple[i] += ['item'] 会引发异常?" + +#: ../../faq/programming.rst:1287 +msgid "" +"This is because of a combination of the fact that augmented assignment " +"operators are *assignment* operators, and the difference between mutable and" +" immutable objects in Python." +msgstr "这是由两个因素共同导致的,一是增强赋值运算符属于 *赋值* 运算符,二是 Python 可变和不可变对象之间的差别。" + +#: ../../faq/programming.rst:1291 +msgid "" +"This discussion applies in general when augmented assignment operators are " +"applied to elements of a tuple that point to mutable objects, but we'll use " +"a ``list`` and ``+=`` as our exemplar." +msgstr "只要元组的元素指向可变对象,这时对元素进行增强赋值,那么这里介绍的内容都是适用的。在此只以 ``list`` 和 ``+=`` 举例。" + +#: ../../faq/programming.rst:1295 +msgid "If you wrote::" +msgstr "如果你写成这样::" + +#: ../../faq/programming.rst:1303 +msgid "" +"The reason for the exception should be immediately clear: ``1`` is added to " +"the object ``a_tuple[0]`` points to (``1``), producing the result object, " +"``2``, but when we attempt to assign the result of the computation, ``2``, " +"to element ``0`` of the tuple, we get an error because we can't change what " +"an element of a tuple points to." +msgstr "" +"触发异常的原因显而易见: ``1`` 会与指向(``1``)的对象 ``a_tuple[0]`` 相加,生成结果对象 ``2``,但在试图将运算结果 " +"``2`` 赋值给元组的 ``0`` 号元素时就会报错,因为元组元素的指向无法更改。" + +#: ../../faq/programming.rst:1309 +msgid "" +"Under the covers, what this augmented assignment statement is doing is " +"approximately this::" +msgstr "其实在幕后,上述增强赋值语句的执行过程大致如下:" + +#: ../../faq/programming.rst:1318 +msgid "" +"It is the assignment part of the operation that produces the error, since a " +"tuple is immutable." +msgstr "由于元组是不可变的,因此赋值这步会引发错误。" + +#: ../../faq/programming.rst:1321 +msgid "When you write something like::" +msgstr "如果写成以下这样:" + +#: ../../faq/programming.rst:1329 +msgid "" +"The exception is a bit more surprising, and even more surprising is the fact" +" that even though there was an error, the append worked::" +msgstr "这时触发异常会令人略感惊讶,更让人吃惊的是虽有报错,但加法操作却生效了:" + +#: ../../faq/programming.rst:1335 +msgid "" +"To see why this happens, you need to know that (a) if an object implements " +"an ``__iadd__`` magic method, it gets called when the ``+=`` augmented " +"assignment is executed, and its return value is what gets used in the " +"assignment statement; and (b) for lists, ``__iadd__`` is equivalent to " +"calling ``extend`` on the list and returning the list. That's why we say " +"that for lists, ``+=`` is a \"shorthand\" for ``list.extend``::" +msgstr "" +"要明白为何会这样,需要知道 (a) 如果一个对象实现了 ``__iadd__`` 魔法方法,在执行 ``+=`` " +"增强赋值时就会调用它,并采纳其返回值;(b) 对于列表而言,``__iadd__`` 相当于在列表上调用 ``extend`` " +"并返回该列表。因此对于列表可以说 ``+=`` 就是 ``list.extend`` 的“快捷方式”:" + +#: ../../faq/programming.rst:1347 +msgid "This is equivalent to::" +msgstr "这相当于:" + +#: ../../faq/programming.rst:1352 +msgid "" +"The object pointed to by a_list has been mutated, and the pointer to the " +"mutated object is assigned back to ``a_list``. The end result of the " +"assignment is a no-op, since it is a pointer to the same object that " +"``a_list`` was previously pointing to, but the assignment still happens." +msgstr "" +"a_list 所引用的对象已被修改,而引用被修改对象的指针又重新被赋值给 ``a_list``。 赋值的最终结果没有变化,因为它是引用 " +"``a_list`` 之前所引用的同一对象的指针,但仍然发生了赋值操作。" + +#: ../../faq/programming.rst:1357 +msgid "Thus, in our tuple example what is happening is equivalent to::" +msgstr "因此,在此元组示例中,发生的事情等同于:" + +#: ../../faq/programming.rst:1365 +msgid "" +"The ``__iadd__`` succeeds, and thus the list is extended, but even though " +"``result`` points to the same object that ``a_tuple[0]`` already points to, " +"that final assignment still results in an error, because tuples are " +"immutable." +msgstr "" +"``__iadd__`` 成功执行,因此列表得到了扩充,但是虽然 ``result`` 指向了 ``a_tuple[0]`` " +"已经指向的同一对象,最后的赋值仍然导致了报错,因为元组是不可变的。" + +#: ../../faq/programming.rst:1371 +msgid "" +"I want to do a complicated sort: can you do a Schwartzian Transform in " +"Python?" +msgstr "我想做一个复杂的排序:能用 Python 进行施瓦茨变换吗?" + +#: ../../faq/programming.rst:1373 +msgid "" +"The technique, attributed to Randal Schwartz of the Perl community, sorts " +"the elements of a list by a metric which maps each element to its \"sort " +"value\". In Python, use the ``key`` argument for the :meth:`list.sort` " +"method::" +msgstr "" +"归功于 Perl 社区的 Randal Schwartz,该技术根据度量值对列表进行排序,该度量值将每个元素映射为“顺序值”。在 Python " +"中,请利用 :meth:`list.sort` 方法的 ``key`` 参数:" + +#: ../../faq/programming.rst:1382 +msgid "How can I sort one list by values from another list?" +msgstr "如何根据另一个列表的值对某列表进行排序?" + +#: ../../faq/programming.rst:1384 +msgid "" +"Merge them into an iterator of tuples, sort the resulting list, and then " +"pick out the element you want. ::" +msgstr "将它们合并到元组的迭代器中,对结果列表进行排序,然后选择所需的元素。" + +#: ../../faq/programming.rst:1399 +msgid "Objects" +msgstr "对象" + +#: ../../faq/programming.rst:1402 +msgid "What is a class?" +msgstr "什么是类?" + +#: ../../faq/programming.rst:1404 +msgid "" +"A class is the particular object type created by executing a class " +"statement. Class objects are used as templates to create instance objects, " +"which embody both the data (attributes) and code (methods) specific to a " +"datatype." +msgstr "" +"类是通过执行 class 语句创建的某种对象的类型。创建实例对象时,用 Class " +"对象作为模板,实例对象既包含了数据(属性),又包含了数据类型特有的代码(方法)。" + +#: ../../faq/programming.rst:1408 +msgid "" +"A class can be based on one or more other classes, called its base " +"class(es). It then inherits the attributes and methods of its base classes. " +"This allows an object model to be successively refined by inheritance. You " +"might have a generic ``Mailbox`` class that provides basic accessor methods " +"for a mailbox, and subclasses such as ``MboxMailbox``, ``MaildirMailbox``, " +"``OutlookMailbox`` that handle various specific mailbox formats." +msgstr "" +"类可以基于一个或多个其他类(称之为基类)进行创建。基类的属性和方法都得以继承。这样对象模型就可以通过继承不断地进行细化。比如通用的 " +"``Mailbox`` 类提供了邮箱的基本访问方法.,它的子类 ``MboxMailbox``、 ``MaildirMailbox``、 " +"``OutlookMailbox`` 则能够处理各种特定的邮箱格式。" + +#: ../../faq/programming.rst:1417 +msgid "What is a method?" +msgstr "什么是方法?" + +#: ../../faq/programming.rst:1419 +msgid "" +"A method is a function on some object ``x`` that you normally call as " +"``x.name(arguments...)``. Methods are defined as functions inside the class" +" definition::" +msgstr "" +"方法是属于对象的函数,对于对象 ``x`` ,通常以 ``x.name(arguments...)`` " +"的形式调用。方法以函数的形式给出定义,位于类的定义内:" + +#: ../../faq/programming.rst:1429 +msgid "What is self?" +msgstr "什么是 self ?" + +#: ../../faq/programming.rst:1431 +msgid "" +"Self is merely a conventional name for the first argument of a method. A " +"method defined as ``meth(self, a, b, c)`` should be called as ``x.meth(a, b," +" c)`` for some instance ``x`` of the class in which the definition occurs; " +"the called method will think it is called as ``meth(x, a, b, c)``." +msgstr "" +"Self 只是方法的第一个参数的习惯性名称。假定某个类中有个方法定义为 ``meth(self, a, b, c)`` ,则其实例 ``x`` 应以 " +"``x.meth(a, b, c)`` 的形式进行调用;而被调用的方法则应视其为做了 ``meth(x, a, b, c)`` 形式的调用。" + +#: ../../faq/programming.rst:1436 +msgid "See also :ref:`why-self`." +msgstr "另请参阅 :ref:`why-self` 。" + +#: ../../faq/programming.rst:1440 +msgid "" +"How do I check if an object is an instance of a given class or of a subclass" +" of it?" +msgstr "如何检查对象是否为给定类或其子类的一个实例?" + +#: ../../faq/programming.rst:1442 +msgid "" +"Use the built-in function ``isinstance(obj, cls)``. You can check if an " +"object is an instance of any of a number of classes by providing a tuple " +"instead of a single class, e.g. ``isinstance(obj, (class1, class2, ...))``, " +"and can also check whether an object is one of Python's built-in types, e.g." +" ``isinstance(obj, str)`` or ``isinstance(obj, (int, float, complex))``." +msgstr "" +"可使用内置函数 ``isinstance(obj, cls)``。可以检测对象是否属于多个类中某一个的实例,只要把单个类换成元组即可,比如 " +"``isinstance(obj, (class1, class2, ...))``,还可以检查对象是否属于某个 Python 内置类型,例如 " +"``isinstance(obj, str)`` 或 ``isinstance(obj, (int, float, complex))``。" + +#: ../../faq/programming.rst:1448 +msgid "" +"Note that :func:`isinstance` also checks for virtual inheritance from an " +":term:`abstract base class`. So, the test will return ``True`` for a " +"registered class even if hasn't directly or indirectly inherited from it. " +"To test for \"true inheritance\", scan the :term:`MRO` of the class:" +msgstr "" +"请注意 :func:`isinstance` 还会检测派生自 :term:`abstract base class` 的虚继承。 " +"因此对于已注册的类,即便没有直接或间接继承自抽象基类,对抽象基类的检测都将返回 ``True`` 。要想检测“真正的继承”,请扫描类的 " +":term:`MRO`:" + +#: ../../faq/programming.rst:1483 +msgid "" +"Note that most programs do not use :func:`isinstance` on user-defined " +"classes very often. If you are developing the classes yourself, a more " +"proper object-oriented style is to define methods on the classes that " +"encapsulate a particular behaviour, instead of checking the object's class " +"and doing a different thing based on what class it is. For example, if you " +"have a function that does something::" +msgstr "" +"请注意,大多数程序不会经常用 :func:`isinstance` 对用户自定义类进行检测。 " +"如果是自已开发的类,更合适的面向对象编程风格应该是在类中定义多种方法,以封装特定的行为,而不是检查对象属于什么类再据此干不同的事。假定有如下执行某些操作的函数::" + +#: ../../faq/programming.rst:1497 +msgid "" +"A better approach is to define a ``search()`` method on all the classes and " +"just call it::" +msgstr "更好的方法是在所有类上定义一个 ``search()`` 方法,然后调用它:" + +#: ../../faq/programming.rst:1512 +msgid "What is delegation?" +msgstr "什么是委托?" + +#: ../../faq/programming.rst:1514 +msgid "" +"Delegation is an object oriented technique (also called a design pattern). " +"Let's say you have an object ``x`` and want to change the behaviour of just " +"one of its methods. You can create a new class that provides a new " +"implementation of the method you're interested in changing and delegates all" +" other methods to the corresponding method of ``x``." +msgstr "" +"委托是一种面向对象的技术(也称为设计模式)。假设对象 ``x`` " +"已经存在,现在想要改变其某个方法的行为。可以创建一个新类,其中提供了所需修改方法的新实现,而将所有其他方法都委托给 ``x`` 的对应方法。" + +#: ../../faq/programming.rst:1520 +msgid "" +"Python programmers can easily implement delegation. For example, the " +"following class implements a class that behaves like a file but converts all" +" written data to uppercase::" +msgstr "Python 程序员可以轻松实现委托。比如以下实现了一个类似于文件的类,只是会把所有写入的数据转换为大写:" + +#: ../../faq/programming.rst:1535 +msgid "" +"Here the ``UpperOut`` class redefines the ``write()`` method to convert the " +"argument string to uppercase before calling the underlying " +"``self._outfile.write()`` method. All other methods are delegated to the " +"underlying ``self._outfile`` object. The delegation is accomplished via the" +" ``__getattr__`` method; consult :ref:`the language reference ` for more information about controlling attribute access." +msgstr "" +"这里 ``UpperOut`` 类重新定义了 ``write()`` 方法,在调用下层的 ``self._outfile.write()`` " +"方法之前,会将参数字符串转换为大写。其他所有方法则都被委托给下层的 ``self._outfile`` 对象。委托是通过 ``__getattr__``" +" 方法完成的;请参阅 :ref:`语言参考 ` 了解有关控制属性访问的更多信息。" + +#: ../../faq/programming.rst:1542 +msgid "" +"Note that for more general cases delegation can get trickier. When " +"attributes must be set as well as retrieved, the class must define a " +":meth:`__setattr__` method too, and it must do so carefully. The basic " +"implementation of :meth:`__setattr__` is roughly equivalent to the " +"following::" +msgstr "" +"请注意,更常见情况下,委托可能会变得比较棘手。如果属性既需要写入又需要读取,那么类还必须定义 :meth:`__setattr__` " +"方法,而这时就必须十分的小心。基础的 :meth:`__setattr__` 实现代码大致如下:" + +#: ../../faq/programming.rst:1553 +msgid "" +"Most :meth:`__setattr__` implementations must modify ``self.__dict__`` to " +"store local state for self without causing an infinite recursion." +msgstr "" +"大多数 :meth:`__setattr__` 实现必须修改 ``self.__dict__`` 来为自身保存局部状态,而不至于引起无限递归。" + +#: ../../faq/programming.rst:1558 +msgid "" +"How do I call a method defined in a base class from a derived class that " +"overrides it?" +msgstr "如何在派生类中调用被重载的基类方法?" + +#: ../../faq/programming.rst:1560 +msgid "Use the built-in :func:`super` function::" +msgstr "使用内置的 :func:`super` 函数:" + +#: ../../faq/programming.rst:1566 +msgid "" +"For version prior to 3.0, you may be using classic classes: For a class " +"definition such as ``class Derived(Base): ...`` you can call method " +"``meth()`` defined in ``Base`` (or one of ``Base``'s base classes) as " +"``Base.meth(self, arguments...)``. Here, ``Base.meth`` is an unbound " +"method, so you need to provide the ``self`` argument." +msgstr "" +"如果是 Python 3.0 之前的版本,可能用的还是传统类:对于诸如 ``class Derived(Base): ...`` 之类的类定义,可以用 " +"``Base.meth(self, arguments...)`` 的形式调用 ``Base`` (或 ``Base`` 的某个基类)中定义的方法 " +"``meth()`` 。这里, ``Base.meth`` 是一个未绑定的方法,因此需要给出 ``self`` 参数。" + +#: ../../faq/programming.rst:1574 +msgid "How can I organize my code to make it easier to change the base class?" +msgstr "如何让代码更容易对基类进行修改?" + +#: ../../faq/programming.rst:1576 +msgid "" +"You could assign the base class to an alias and derive from the alias. Then" +" all you have to change is the value assigned to the alias. Incidentally, " +"this trick is also handy if you want to decide dynamically (e.g. depending " +"on availability of resources) which base class to use. Example::" +msgstr "" +"可以为基类赋一个别名并基于该别名进行派生。这样只要修改赋给该别名的值即可。顺便提一下,如要动态地确定(例如根据可用的资源)该使用哪个基类,这个技巧也非常方便。例如:" + +#: ../../faq/programming.rst:1591 +msgid "How do I create static class data and static class methods?" +msgstr "如何创建静态类数据和静态类方法?" + +#: ../../faq/programming.rst:1593 +msgid "" +"Both static data and static methods (in the sense of C++ or Java) are " +"supported in Python." +msgstr "Python 支持静态数据和静态方法(以 C++ 或 Java 的定义而言)。" + +#: ../../faq/programming.rst:1596 +msgid "" +"For static data, simply define a class attribute. To assign a new value to " +"the attribute, you have to explicitly use the class name in the assignment::" +msgstr "静态数据只需定义一个类属性即可。若要为属性赋新值,则必须在赋值时显式使用类名:" + +#: ../../faq/programming.rst:1608 +msgid "" +"``c.count`` also refers to ``C.count`` for any ``c`` such that " +"``isinstance(c, C)`` holds, unless overridden by ``c`` itself or by some " +"class on the base-class search path from ``c.__class__`` back to ``C``." +msgstr "" +"对于所有符合 ``isinstance(c, C)`` 的 ``c``, ``c.count`` 也同样指向 ``C.count`` ,除非被 " +"``c`` 自身或者被从 ``c.__class__`` 回溯到基类 ``C`` 的搜索路径上的某个类所覆盖。" + +#: ../../faq/programming.rst:1612 +msgid "" +"Caution: within a method of C, an assignment like ``self.count = 42`` " +"creates a new and unrelated instance named \"count\" in ``self``'s own dict." +" Rebinding of a class-static data name must always specify the class " +"whether inside a method or not::" +msgstr "" +"注意:在 C 的某个方法内部,像 ``self.count = 42`` 这样的赋值将在 ``self`` 自身的字典中新建一个名为 \"count\"" +" 的不相关实例。 想要重新绑定类静态数据名称就必须总是指明类名,无论是在方法内部还是外部::" + +#: ../../faq/programming.rst:1619 +msgid "Static methods are possible::" +msgstr "Python 支持静态方法:" + +#: ../../faq/programming.rst:1627 +msgid "" +"However, a far more straightforward way to get the effect of a static method" +" is via a simple module-level function::" +msgstr "不过为了获得静态方法的效果,还有一种做法直接得多,也即使用模块级函数即可:" + +#: ../../faq/programming.rst:1633 +msgid "" +"If your code is structured so as to define one class (or tightly related " +"class hierarchy) per module, this supplies the desired encapsulation." +msgstr "如果代码的结构化比较充分,每个模块只定义了一个类(或者多个类的层次关系密切相关),那就具备了应有的封装。" + +#: ../../faq/programming.rst:1638 +msgid "How can I overload constructors (or methods) in Python?" +msgstr "在 Python 中如何重载构造函数(或方法)?" + +#: ../../faq/programming.rst:1640 +msgid "" +"This answer actually applies to all methods, but the question usually comes " +"up first in the context of constructors." +msgstr "这个答案实际上适用于所有方法,但问题通常首先出现于构造函数的应用场景中。" + +#: ../../faq/programming.rst:1643 +msgid "In C++ you'd write" +msgstr "在 C++ 中,代码会如下所示:" + +#: ../../faq/programming.rst:1652 +msgid "" +"In Python you have to write a single constructor that catches all cases " +"using default arguments. For example::" +msgstr "在 Python 中,只能编写一个构造函数,并用默认参数捕获所有情况。例如:" + +#: ../../faq/programming.rst:1662 +msgid "This is not entirely equivalent, but close enough in practice." +msgstr "这不完全等同,但在实践中足够接近。" + +#: ../../faq/programming.rst:1664 +msgid "You could also try a variable-length argument list, e.g. ::" +msgstr "也可以试试采用变长参数列表,例如:" + +#: ../../faq/programming.rst:1669 +msgid "The same approach works for all method definitions." +msgstr "上述做法同样适用于所有方法定义。" + +#: ../../faq/programming.rst:1673 +msgid "I try to use __spam and I get an error about _SomeClassName__spam." +msgstr "在用 __spam 的时候得到一个类似 _SomeClassName__spam 的错误信息。" + +#: ../../faq/programming.rst:1675 +msgid "" +"Variable names with double leading underscores are \"mangled\" to provide a " +"simple but effective way to define class private variables. Any identifier " +"of the form ``__spam`` (at least two leading underscores, at most one " +"trailing underscore) is textually replaced with ``_classname__spam``, where " +"``classname`` is the current class name with any leading underscores " +"stripped." +msgstr "" +"以双下划线打头的变量名会被“破坏”,以便以一种简单高效的方式定义类私有变量。任何形式为 ``__spam`` " +"的标识符(至少前缀两个下划线,至多后缀一个下划线)文本均会被替换为 ``_classname__spam``,其中 ``classname`` " +"为去除了全部前缀下划线的当前类名称。" + +#: ../../faq/programming.rst:1681 +msgid "" +"This doesn't guarantee privacy: an outside user can still deliberately " +"access the \"_classname__spam\" attribute, and private values are visible in" +" the object's ``__dict__``. Many Python programmers never bother to use " +"private variable names at all." +msgstr "" +"这并不能保证私密性:外部用户仍然可以访问 \"_classname__spam\" 属性,私有变量值也在对象的 ``__dict__`` 中可见。 许多" +" Python 程序员根本不操心要去使用私有变量名。" + +#: ../../faq/programming.rst:1688 +msgid "" +"My class defines __del__ but it is not called when I delete the object." +msgstr "类定义了 __del__ 方法,但是删除对象时没有调用它。" + +#: ../../faq/programming.rst:1690 +msgid "There are several possible reasons for this." +msgstr "这有几个可能的原因。" + +#: ../../faq/programming.rst:1692 +msgid "" +"The del statement does not necessarily call :meth:`__del__` -- it simply " +"decrements the object's reference count, and if this reaches zero " +":meth:`__del__` is called." +msgstr "" +"del 语句不一定调用 :meth:`__del__` —— 它只是减少对象的引用计数,如果(引用计数)达到零,才会调用 " +":meth:`__del__`。" + +#: ../../faq/programming.rst:1696 +msgid "" +"If your data structures contain circular links (e.g. a tree where each child" +" has a parent reference and each parent has a list of children) the " +"reference counts will never go back to zero. Once in a while Python runs an" +" algorithm to detect such cycles, but the garbage collector might run some " +"time after the last reference to your data structure vanishes, so your " +":meth:`__del__` method may be called at an inconvenient and random time. " +"This is inconvenient if you're trying to reproduce a problem. Worse, the " +"order in which object's :meth:`__del__` methods are executed is arbitrary. " +"You can run :func:`gc.collect` to force a collection, but there *are* " +"pathological cases where objects will never be collected." +msgstr "" +"如果数据结构包含循环链接(比如树的每个子节点都带有父节点的引用,而每个父节点也带有子节点的列表),则引用计数永远不会回零。尽管 Python " +"偶尔会用某种算法检测这种循环引用,但在数据结构的最后一条引用消失之后,垃圾收集器可能还要过段时间才会运行,因此 :meth:`__del__` " +"方法可能会在不方便和随机的时刻被调用。这对于重现一个问题,是非常不方便的。更糟糕的是,各个对象的 :meth:`__del__` " +"方法是以随机顺序执行的。虽然可以运行 :func:`gc.collect` 来强制执行垃圾回收工作,但 *仍会存在* " +"一些对象永远不会被回收的失控情况。" + +#: ../../faq/programming.rst:1707 +msgid "" +"Despite the cycle collector, it's still a good idea to define an explicit " +"``close()`` method on objects to be called whenever you're done with them. " +"The ``close()`` method can then remove attributes that refer to subobjects." +" Don't call :meth:`__del__` directly -- :meth:`__del__` should call " +"``close()`` and ``close()`` should make sure that it can be called more than" +" once for the same object." +msgstr "" +"尽管有垃圾回收器的存在,但为对象定义显式的 ``close()`` 方法,只要一用完即可供调用,这依然是一个好主意。这样 ``close()`` " +"方法即可删除引用子对象的属性。请勿直接调用 :meth:`__del__` —— 而 :meth:`__del__` 应该调用 " +"``close()``,并且应能确保可以对同一对象多次调用 ``close()`` 。" + +#: ../../faq/programming.rst:1714 +msgid "" +"Another way to avoid cyclical references is to use the :mod:`weakref` " +"module, which allows you to point to objects without incrementing their " +"reference count. Tree data structures, for instance, should use weak " +"references for their parent and sibling references (if they need them!)." +msgstr "" +"另一种避免循环引用的做法是利用 :mod:`weakref` " +"模块,该模块允许指向对象但不增加其引用计数。例如,树状数据结构应该对父节点和同级节点使用弱引用(如果真要用的话!)" + +#: ../../faq/programming.rst:1727 +msgid "" +"Finally, if your :meth:`__del__` method raises an exception, a warning " +"message is printed to :data:`sys.stderr`." +msgstr "最后提一下,如果 :meth:`__del__` 方法引发了异常,会将警告消息打印到 :data:`sys.stderr` 。" + +#: ../../faq/programming.rst:1732 +msgid "How do I get a list of all instances of a given class?" +msgstr "如何获取给定类的所有实例的列表?" + +#: ../../faq/programming.rst:1734 +msgid "" +"Python does not keep track of all instances of a class (or of a built-in " +"type). You can program the class's constructor to keep track of all " +"instances by keeping a list of weak references to each instance." +msgstr "Python 不会记录类(或内置类型)的实例。可以在类的构造函数中编写代码,通过保留每个实例的弱引用列表来跟踪所有实例。" + +#: ../../faq/programming.rst:1740 +msgid "Why does the result of ``id()`` appear to be not unique?" +msgstr "为什么 ``id()`` 的结果看起来不是唯一的?" + +#: ../../faq/programming.rst:1742 +msgid "" +"The :func:`id` builtin returns an integer that is guaranteed to be unique " +"during the lifetime of the object. Since in CPython, this is the object's " +"memory address, it happens frequently that after an object is deleted from " +"memory, the next freshly created object is allocated at the same position in" +" memory. This is illustrated by this example:" +msgstr "" +":func:`id` 返回一个整数,该整数在对象的生命周期内保证是唯一的。 因为在 CPython " +"中,这是对象的内存地址,所以经常发生在从内存中删除对象之后,下一个新创建的对象被分配在内存中的相同位置。 这个例子说明了这一点:" + +#: ../../faq/programming.rst:1753 +msgid "" +"The two ids belong to different integer objects that are created before, and" +" deleted immediately after execution of the ``id()`` call. To be sure that " +"objects whose id you want to examine are still alive, create another " +"reference to the object:" +msgstr "" +"这两个 id 属于不同的整数对象,之前先创建了对象,执行 ``id()`` 调用后又立即被删除了。若要确保检测 id " +"时的对象仍处于活动状态,请再创建一个对该对象的引用:" + +#: ../../faq/programming.rst:1766 +msgid "When can I rely on identity tests with the *is* operator?" +msgstr "什么情况下可以依靠 *is* 运算符进行对象的身份相等性测试?" + +#: ../../faq/programming.rst:1768 +msgid "" +"The ``is`` operator tests for object identity. The test ``a is b`` is " +"equivalent to ``id(a) == id(b)``." +msgstr "``is`` 运算符可用于测试对象的身份相等性。``a is b`` 等价于 ``id(a) == id(b)``。" + +#: ../../faq/programming.rst:1771 +msgid "" +"The most important property of an identity test is that an object is always " +"identical to itself, ``a is a`` always returns ``True``. Identity tests are" +" usually faster than equality tests. And unlike equality tests, identity " +"tests are guaranteed to return a boolean ``True`` or ``False``." +msgstr "" +"身份相等性最重要的特性就是对象总是等同于自身,``a is a`` 一定返回 " +"``True``。身份相等性测试的速度通常比相等性测试要快。而且与相等性测试不一样,身份相等性测试会确保返回布尔值 ``True`` 或 " +"``False``。" + +#: ../../faq/programming.rst:1776 +msgid "" +"However, identity tests can *only* be substituted for equality tests when " +"object identity is assured. Generally, there are three circumstances where " +"identity is guaranteed:" +msgstr "但是,身份相等性测试 *只能* 在对象身份确定的场景下才可替代相等性测试。一般来说,有以下3种情况对象身份是可以确定的:" + +#: ../../faq/programming.rst:1780 +msgid "" +"1) Assignments create new names but do not change object identity. After " +"the assignment ``new = old``, it is guaranteed that ``new is old``." +msgstr "1) 赋值操作创建了新的名称但没有改变对象身份。 在赋值操作 ``new = old`` 之后,可以保证 ``new is old``。" + +#: ../../faq/programming.rst:1783 +msgid "" +"2) Putting an object in a container that stores object references does not " +"change object identity. After the list assignment ``s[0] = x``, it is " +"guaranteed that ``s[0] is x``." +msgstr "" +"2) 将对象置入存放对象引用的容器,对象身份不会改变。在列表赋值操作 ``s[0] = x`` 之后,可以保证 ``s[0] is x``。" + +#: ../../faq/programming.rst:1787 +msgid "" +"3) If an object is a singleton, it means that only one instance of that " +"object can exist. After the assignments ``a = None`` and ``b = None``, it " +"is guaranteed that ``a is b`` because ``None`` is a singleton." +msgstr "" +"3) 单例对象,也即该对象只能存在一个实例。在赋值操作 ``a = None`` 和 ``b = None`` 之后,可以保证 ``a is " +"b``,因为 ``None`` 是单例对象。" + +#: ../../faq/programming.rst:1791 +msgid "" +"In most other circumstances, identity tests are inadvisable and equality " +"tests are preferred. In particular, identity tests should not be used to " +"check constants such as :class:`int` and :class:`str` which aren't " +"guaranteed to be singletons::" +msgstr "" +"其他大多数情况下,都不建议使用身份相等性测试,而应采用相等性测试。尤其是不应将身份相等性测试用于检测常量值,例如 :class:`int` 和 " +":class:`str`,因为他们并不一定是单例对象:" + +#: ../../faq/programming.rst:1808 +msgid "Likewise, new instances of mutable containers are never identical::" +msgstr "同样地,可变容器的新实例,对象身份一定不同:" + +#: ../../faq/programming.rst:1815 +msgid "" +"In the standard library code, you will see several common patterns for " +"correctly using identity tests:" +msgstr "在标准库代码中,给出了一些正确使用对象身份测试的常见模式:" + +#: ../../faq/programming.rst:1818 +msgid "" +"1) As recommended by :pep:`8`, an identity test is the preferred way to " +"check for ``None``. This reads like plain English in code and avoids " +"confusion with other objects that may have boolean values that evaluate to " +"false." +msgstr "" +"1) 正如 :pep:`8` 所推荐的,对象身份测试是 ``None`` " +"值的推荐检测方式。这样的代码读起来就像自然的英文,并可以避免与其他可能为布尔值且计算结果为 False 的对象相混淆。" + +#: ../../faq/programming.rst:1822 +msgid "" +"2) Detecting optional arguments can be tricky when ``None`` is a valid input" +" value. In those situations, you can create a singleton sentinel object " +"guaranteed to be distinct from other objects. For example, here is how to " +"implement a method that behaves like :meth:`dict.pop`::" +msgstr "" +"2) 当 ``None`` 是一个有效的输入值时,检测可选参数可能很棘手。 在这些情况下,你可以创建一个单例哨兵对象,保证与其他对象不同。 " +"例如,这里是如何实现一个方法,其行为类似于 :meth:`dict.pop` :" + +#: ../../faq/programming.rst:1838 +msgid "" +"3) Container implementations sometimes need to augment equality tests with " +"identity tests. This prevents the code from being confused by objects such " +"as ``float('NaN')`` that are not equal to themselves." +msgstr "" +"3) 编写容器的实现代码时,有时需要用对象身份测试来加强相等性检测。这样代码就不会被 ``float('NaN')`` 这类与自身不相等的对象所干扰。" + +#: ../../faq/programming.rst:1842 +msgid "" +"For example, here is the implementation of " +":meth:`collections.abc.Sequence.__contains__`::" +msgstr "例如,以下是 :meth:`collections.abc.Sequence.__contains__` 的实现代码:" + +#: ../../faq/programming.rst:1853 +msgid "" +"How can a subclass control what data is stored in an immutable instance?" +msgstr "一个子类如何控制哪些数据被存储在一个不可变的实例中?" + +#: ../../faq/programming.rst:1855 +msgid "" +"When subclassing an immutable type, override the :meth:`__new__` method " +"instead of the :meth:`__init__` method. The latter only runs *after* an " +"instance is created, which is too late to alter data in an immutable " +"instance." +msgstr "" +"当子类化一个不可变的类型时,重写 :meth:`__new__` 方法,而不是 :meth:`__init__` 方法。 " +"后者只在一个实例被创建之后运行,这对于改变一个不可变的实例中的数据来说太晚了。" + +#: ../../faq/programming.rst:1860 +msgid "" +"All of these immutable classes have a different signature than their parent " +"class:" +msgstr "所有这些不可变的类都有一个与它们的父类不同的签名:" + +#: ../../faq/programming.rst:1886 +msgid "The classes can be used like this:" +msgstr "这些类可以这样使用:" + +#: ../../faq/programming.rst:1901 +msgid "Modules" +msgstr "模块" + +#: ../../faq/programming.rst:1904 +msgid "How do I create a .pyc file?" +msgstr "如何创建 .pyc 文件?" + +#: ../../faq/programming.rst:1906 +msgid "" +"When a module is imported for the first time (or when the source file has " +"changed since the current compiled file was created) a ``.pyc`` file " +"containing the compiled code should be created in a ``__pycache__`` " +"subdirectory of the directory containing the ``.py`` file. The ``.pyc`` " +"file will have a filename that starts with the same name as the ``.py`` " +"file, and ends with ``.pyc``, with a middle component that depends on the " +"particular ``python`` binary that created it. (See :pep:`3147` for " +"details.)" +msgstr "" +"当首次导入模块时(或当前已编译文件创建之后源文件发生了改动),在 ``.py`` 文件所在目录的 ``__pycache__`` " +"子目录下会创建一个包含已编译代码的 ``.pyc`` 文件。该 ``.pyc`` 文件的名称开头部分将与 ``.py`` 文件名相同,并以 " +"``.pyc`` 为后缀,中间部分则依据创建它的 ``python`` 版本而各不相同。(详见 :pep:`3147`。)" + +#: ../../faq/programming.rst:1914 +msgid "" +"One reason that a ``.pyc`` file may not be created is a permissions problem " +"with the directory containing the source file, meaning that the " +"``__pycache__`` subdirectory cannot be created. This can happen, for " +"example, if you develop as one user but run as another, such as if you are " +"testing with a web server." +msgstr "" +"``.pyc`` 文件有可能会无法创建,原因之一是源码文件所在的目录存在权限问题,这样就无法创建 ``__pycache__`` " +"子目录。假如以某个用户开发程序而以另一用户运行程序,就有可能发生权限问题,测试 Web 服务器就属于这种情况。" + +#: ../../faq/programming.rst:1919 +msgid "" +"Unless the :envvar:`PYTHONDONTWRITEBYTECODE` environment variable is set, " +"creation of a .pyc file is automatic if you're importing a module and Python" +" has the ability (permissions, free space, etc...) to create a " +"``__pycache__`` subdirectory and write the compiled module to that " +"subdirectory." +msgstr "" +"除非设置了 :envvar:`PYTHONDONTWRITEBYTECODE` 环境变量,否则导入模块并且 Python 能够创建 " +"``__pycache__`` 子目录并把已编译模块写入该子目录(权限、存储空间等等)时,.pyc 文件就将自动创建。" + +#: ../../faq/programming.rst:1924 +msgid "" +"Running Python on a top level script is not considered an import and no " +"``.pyc`` will be created. For example, if you have a top-level module " +"``foo.py`` that imports another module ``xyz.py``, when you run ``foo`` (by " +"typing ``python foo.py`` as a shell command), a ``.pyc`` will be created for" +" ``xyz`` because ``xyz`` is imported, but no ``.pyc`` file will be created " +"for ``foo`` since ``foo.py`` isn't being imported." +msgstr "" +"在最高层级运行的 Python 脚本不会被视为经过了导入操作,因此不会创建 ``.pyc`` 文件。假定有一个最高层级的模块文件 " +"``foo.py``,它导入了另一个模块 ``xyz.py``,当运行 ``foo`` 模块(通过输入 shell 命令 ``python " +"foo.py`` ),则会为 ``xyz`` 创建一个 ``.pyc``,因为 ``xyz`` 是被导入的,但不会为 ``foo`` 创建 " +"``.pyc`` 文件,因为 ``foo.py`` 不是被导入的。" + +#: ../../faq/programming.rst:1931 +msgid "" +"If you need to create a ``.pyc`` file for ``foo`` -- that is, to create a " +"``.pyc`` file for a module that is not imported -- you can, using the " +":mod:`py_compile` and :mod:`compileall` modules." +msgstr "" +"若要为 ``foo`` 创建 ``.pyc`` 文件 —— 即为未做导入的模块创建 ``.pyc`` 文件 —— 可以利用 " +":mod:`py_compile` 和 :mod:`compileall` 模块。" + +#: ../../faq/programming.rst:1935 +msgid "" +"The :mod:`py_compile` module can manually compile any module. One way is to" +" use the ``compile()`` function in that module interactively::" +msgstr ":mod:`py_compile` 模块能够手动编译任意模块。 一种做法是交互式地使用该模块中的 ``compile()`` 函数::" + +#: ../../faq/programming.rst:1941 +msgid "" +"This will write the ``.pyc`` to a ``__pycache__`` subdirectory in the same " +"location as ``foo.py`` (or you can override that with the optional parameter" +" ``cfile``)." +msgstr "" +"这将会将 ``.pyc`` 文件写入与 ``foo.py`` 相同位置下的 ``__pycache__`` 子目录(或者你也可以通过可选参数 " +"``cfile`` 来重写该行为)。" + +#: ../../faq/programming.rst:1945 +msgid "" +"You can also automatically compile all files in a directory or directories " +"using the :mod:`compileall` module. You can do it from the shell prompt by " +"running ``compileall.py`` and providing the path of a directory containing " +"Python files to compile::" +msgstr "" +"还可以用 :mod:`compileall` 模块自动编译一个或多个目录下的所有文件。只要在命令行提示符中运行 ``compileall.py`` " +"并给出要编译的 Python 文件所在目录路径即可:" + +#: ../../faq/programming.rst:1954 +msgid "How do I find the current module name?" +msgstr "如何找到当前模块名称?" + +#: ../../faq/programming.rst:1956 +msgid "" +"A module can find out its own module name by looking at the predefined " +"global variable ``__name__``. If this has the value ``'__main__'``, the " +"program is running as a script. Many modules that are usually used by " +"importing them also provide a command-line interface or a self-test, and " +"only execute this code after checking ``__name__``::" +msgstr "" +"模块可以查看预定义的全局变量 ``__name__`` 获悉自己的名称。如其值为 ``'__main__'`` " +",程序将作为脚本运行。通常,许多通过导入使用的模块同时也提供命令行接口或自检代码,这些代码只在检测到处于 ``__name__`` 之后才会执行:" + +#: ../../faq/programming.rst:1971 +msgid "How can I have modules that mutually import each other?" +msgstr "如何让模块相互导入?" + +#: ../../faq/programming.rst:1973 +msgid "Suppose you have the following modules:" +msgstr "假设有以下模块:" + +#: ../../faq/programming.rst:1975 +msgid "foo.py::" +msgstr "foo.py:" + +#: ../../faq/programming.rst:1980 +msgid "bar.py::" +msgstr "bar.py:" + +#: ../../faq/programming.rst:1985 +msgid "The problem is that the interpreter will perform the following steps:" +msgstr "问题是解释器将执行以下步骤:" + +#: ../../faq/programming.rst:1987 +msgid "main imports foo" +msgstr "首先导入foo" + +#: ../../faq/programming.rst:1988 +msgid "Empty globals for foo are created" +msgstr "创建用于foo的空全局变量" + +#: ../../faq/programming.rst:1989 +msgid "foo is compiled and starts executing" +msgstr "foo被编译并开始执行" + +#: ../../faq/programming.rst:1990 +msgid "foo imports bar" +msgstr "foo 导入 bar" + +#: ../../faq/programming.rst:1991 +msgid "Empty globals for bar are created" +msgstr "创建了用于bar 的空全局变量" + +#: ../../faq/programming.rst:1992 +msgid "bar is compiled and starts executing" +msgstr "bar被编译并开始执行" + +#: ../../faq/programming.rst:1993 +msgid "" +"bar imports foo (which is a no-op since there already is a module named foo)" +msgstr "bar 导入 foo(这是一个空操作,因为已经有一个名为 foo 的模块)。" + +#: ../../faq/programming.rst:1994 +msgid "bar.foo_var = foo.foo_var" +msgstr "bar.foo_var = foo.foo_var" + +#: ../../faq/programming.rst:1996 +msgid "" +"The last step fails, because Python isn't done with interpreting ``foo`` yet" +" and the global symbol dictionary for ``foo`` is still empty." +msgstr "最后一步失败了,因为 Python 还没有完成对 foo 的解释,foo 的全局符号字典仍然是空的。" + +#: ../../faq/programming.rst:1999 +msgid "" +"The same thing happens when you use ``import foo``, and then try to access " +"``foo.foo_var`` in global code." +msgstr "当你使用 ``import foo`` ,然后尝试在全局代码中访问 ``foo.foo_var`` 时,会发生同样的事情。" + +#: ../../faq/programming.rst:2002 +msgid "There are (at least) three possible workarounds for this problem." +msgstr "这个问题有(至少)三种可能的解决方法。" + +#: ../../faq/programming.rst:2004 +msgid "" +"Guido van Rossum recommends avoiding all uses of ``from import " +"...``, and placing all code inside functions. Initializations of global " +"variables and class variables should use constants or built-in functions " +"only. This means everything from an imported module is referenced as " +"``.``." +msgstr "" +"Guido van Rossum 建议完全避免使用 ``from import ...`` " +",并将所有代码放在函数中。全局变量和类变量的初始化只应使用常量或内置函数。这意味着导入模块中的所有内容都以 ``.`` " +"的形式引用。" + +#: ../../faq/programming.rst:2009 +msgid "" +"Jim Roskind suggests performing steps in the following order in each module:" +msgstr "Jim Roskind 建议每个模块都应遵循以下顺序:" + +#: ../../faq/programming.rst:2011 +msgid "" +"exports (globals, functions, and classes that don't need imported base " +"classes)" +msgstr "导出(全局变量、函数和不需要导入基类的类)" + +#: ../../faq/programming.rst:2013 +msgid "``import`` statements" +msgstr "``import`` 语句" + +#: ../../faq/programming.rst:2014 +msgid "" +"active code (including globals that are initialized from imported values)." +msgstr "本模块的功能代码(包括根据导入值进行初始化的全局变量)。" + +#: ../../faq/programming.rst:2016 +msgid "" +"Van Rossum doesn't like this approach much because the imports appear in a " +"strange place, but it does work." +msgstr "Van Rossum 不太喜欢这种方法,因为import出现在一个奇怪的地方,但它确实有效。" + +#: ../../faq/programming.rst:2019 +msgid "" +"Matthias Urlichs recommends restructuring your code so that the recursive " +"import is not necessary in the first place." +msgstr "Matthias Urlichs 建议对代码进行重构,使得递归导入根本就没必要发生。" + +#: ../../faq/programming.rst:2022 +msgid "These solutions are not mutually exclusive." +msgstr "这些解决方案并不相互排斥。" + +#: ../../faq/programming.rst:2026 +msgid "__import__('x.y.z') returns ; how do I get z?" +msgstr "__import__('x.y.z') 返回的是 ;该如何得到 z 呢?" + +#: ../../faq/programming.rst:2028 +msgid "" +"Consider using the convenience function :func:`~importlib.import_module` " +"from :mod:`importlib` instead::" +msgstr "不妨考虑换用 :mod:`importlib` 中的函数 :func:`~importlib.import_module` :" + +#: ../../faq/programming.rst:2035 +msgid "" +"When I edit an imported module and reimport it, the changes don't show up. " +"Why does this happen?" +msgstr "对已导入的模块进行了编辑并重新导入,但变动没有得以体现。这是为什么?" + +#: ../../faq/programming.rst:2037 +msgid "" +"For reasons of efficiency as well as consistency, Python only reads the " +"module file on the first time a module is imported. If it didn't, in a " +"program consisting of many modules where each one imports the same basic " +"module, the basic module would be parsed and re-parsed many times. To force" +" re-reading of a changed module, do this::" +msgstr "" +"出于效率和一致性的原因,Python " +"仅在第一次导入模块时读取模块文件。否则,在一个多模块的程序中,每个模块都会导入相同的基础模块,那么基础模块将会被一而再、再而三地解析。如果要强行重新读取已更改的模块,请执行以下操作:" + +#: ../../faq/programming.rst:2047 +msgid "" +"Warning: this technique is not 100% fool-proof. In particular, modules " +"containing statements like ::" +msgstr "警告:这种技术并非万无一失。尤其是模块包含了以下语句时:" + +#: ../../faq/programming.rst:2052 +msgid "" +"will continue to work with the old version of the imported objects. If the " +"module contains class definitions, existing class instances will *not* be " +"updated to use the new class definition. This can result in the following " +"paradoxical behaviour::" +msgstr "仍将继续使用前一版的导入对象。如果模块包含了类的定义,并 *不会* 用新的类定义更新现有的类实例。这样可能会导致以下矛盾的行为:" + +#: ../../faq/programming.rst:2065 +msgid "" +"The nature of the problem is made clear if you print out the \"identity\" of" +" the class objects::" +msgstr "只要把类对象的 id 打印出来,问题的性质就会一目了然:" diff --git a/faq/windows.po b/faq/windows.po new file mode 100644 index 000000000..1be073e1c --- /dev/null +++ b/faq/windows.po @@ -0,0 +1,418 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) 2001-2022, Python Software Foundation +# This file is distributed under the same license as the Python package. +# FIRST AUTHOR , YEAR. +# +# Translators: +# Yinuo Huang , 2018 +# Azuk 443 , 2019 +# musan cheng, 2019 +# Freesand Leo , 2021 +# Alpha Du , 2022 +# +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: Python 3.9\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2022-11-04 14:34+0000\n" +"PO-Revision-Date: 2017-02-16 17:43+0000\n" +"Last-Translator: Alpha Du , 2022\n" +"Language-Team: Chinese (China) (https://www.transifex.com/python-doc/teams/5390/zh_CN/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: zh_CN\n" +"Plural-Forms: nplurals=1; plural=0;\n" + +#: ../../faq/windows.rst:9 +msgid "Python on Windows FAQ" +msgstr "Python在Windows上的常见问题" + +#: ../../faq/windows.rst:12 +msgid "Contents" +msgstr "内容" + +#: ../../faq/windows.rst:22 +msgid "How do I run a Python program under Windows?" +msgstr "我怎样在Windows下运行一个Python程序?" + +#: ../../faq/windows.rst:24 +msgid "" +"This is not necessarily a straightforward question. If you are already " +"familiar with running programs from the Windows command line then everything" +" will seem obvious; otherwise, you might need a little more guidance." +msgstr "这不一定是一个简单的问题。如果你已经熟悉在Windows的命令行中运行程序的方法,一切都显而易见;不然的话,你也许需要额外获得些许指导。" + +#: ../../faq/windows.rst:28 +msgid "" +"Unless you use some sort of integrated development environment, you will end" +" up *typing* Windows commands into what is referred to as a \"Command prompt" +" window\". Usually you can create such a window from your search bar by " +"searching for ``cmd``. You should be able to recognize when you have " +"started such a window because you will see a Windows \"command prompt\", " +"which usually looks like this:" +msgstr "" +"除非你使用某种集成开发环境,否则你最终会在所谓的 \"命令提示窗口 \"中 *输入* Windows命令。 通常情况下,你可以在搜索栏中搜索 " +"``cmd`` 来创建这样一个窗口。你应该能够发现你已经启动了这样一个窗口,因为你会看到一个 Windows \"命令提示符\",它通常看起来像这样。" + +#: ../../faq/windows.rst:39 +msgid "" +"The letter may be different, and there might be other things after it, so " +"you might just as easily see something like:" +msgstr "前面的字母可能会不同,而且后面有可能会有其他东西,所以你也许会看到类似这样的东西:" + +#: ../../faq/windows.rst:46 +msgid "" +"depending on how your computer has been set up and what else you have " +"recently done with it. Once you have started such a window, you are well on" +" the way to running Python programs." +msgstr "出现的内容具体取决与你的电脑如何设置和你最近用它做的事。 当你启动了这样一个窗口后,就可以开始运行Python程序了。" + +#: ../../faq/windows.rst:50 +msgid "" +"You need to realize that your Python scripts have to be processed by another" +" program called the Python *interpreter*. The interpreter reads your " +"script, compiles it into bytecodes, and then executes the bytecodes to run " +"your program. So, how do you arrange for the interpreter to handle your " +"Python?" +msgstr "" +"Python 脚本需要被另外一个叫做 Python *解释器* 的程序来处理。 解释器读取脚本,把它编译成字节码,然后执行字节码来运行你的程序。 " +"所以怎样安排解释器来处理你的 Python 脚本呢?" + +#: ../../faq/windows.rst:55 +msgid "" +"First, you need to make sure that your command window recognises the word " +"\"py\" as an instruction to start the interpreter. If you have opened a " +"command window, you should try entering the command ``py`` and hitting " +"return:" +msgstr "首先,确保命令窗口能够将“py”识别为指令来开启解释器。 如果你打开过一个命令窗口, 尝试输入命令 ``py`` 然后按回车:" + +#: ../../faq/windows.rst:64 +msgid "You should then see something like:" +msgstr "然后你应当看见类似类似这样的东西:" + +#: ../../faq/windows.rst:72 +msgid "" +"You have started the interpreter in \"interactive mode\". That means you can" +" enter Python statements or expressions interactively and have them executed" +" or evaluated while you wait. This is one of Python's strongest features. " +"Check it by entering a few expressions of your choice and seeing the " +"results:" +msgstr "" +"解释器已经以“交互模式”打开。这意味着你可以交互输入Python语句或表达式,并在等待时执行或评估它们。这是Python最强大的功能之一。输入几个表达式并看看结果:" + +#: ../../faq/windows.rst:84 +msgid "" +"Many people use the interactive mode as a convenient yet highly programmable" +" calculator. When you want to end your interactive Python session, call the" +" :func:`exit` function or hold the :kbd:`Ctrl` key down while you enter a " +":kbd:`Z`, then hit the \":kbd:`Enter`\" key to get back to your Windows " +"command prompt." +msgstr "" +"许多人把交互模式当作方便和高度可编程的计算器。 想结束交互式Python会话时,调用 :func:`exit` 函数,或者按住 :kbd:`Ctrl` " +"键时输入 :kbd:`Z` ,之后按 :kbd:`Enter` 键返回Windows命令提示符。" + +#: ../../faq/windows.rst:90 +msgid "" +"You may also find that you have a Start-menu entry such as " +":menuselection:`Start --> Programs --> Python 3.x --> Python (command line)`" +" that results in you seeing the ``>>>`` prompt in a new window. If so, the " +"window will disappear after you call the :func:`exit` function or enter the " +":kbd:`Ctrl-Z` character; Windows is running a single \"python\" command in " +"the window, and closes it when you terminate the interpreter." +msgstr "" +"你可能发现在开始菜单有这样一个条目 :menuselection:`开始 --> 所有程序 --> Python 3.x --> Python " +"(命令行)`, 运行它后会出现一个有着 ``>>>`` 提示的新窗口。 在此之后,如果调用 :func:`exit` 函数或按 " +":kbd:`Ctrl-Z` 组合键后窗口将会消失。 Windows 会在这个窗口中运行一个“python”命令,并且在你终止解释器的时候关闭它。" + +#: ../../faq/windows.rst:97 +msgid "" +"Now that we know the ``py`` command is recognized, you can give your Python " +"script to it. You'll have to give either an absolute or a relative path to " +"the Python script. Let's say your Python script is located in your desktop " +"and is named ``hello.py``, and your command prompt is nicely opened in your " +"home directory so you're seeing something similar to::" +msgstr "" +"现在我们知道 ``py`` 命令已经被识别,可以输入 Python 脚本了。 你需要提供 Python 脚本的绝对路径或相对路径。 假设 Python " +"脚本位于桌面上并命名为 ``hello.py``,并且命令提示符在用户主目录打开,那么可以看到类似于这样的东西::" + +#: ../../faq/windows.rst:106 +msgid "" +"So now you'll ask the ``py`` command to give your script to Python by typing" +" ``py`` followed by your script path::" +msgstr "那么现在可以让``py``命令执行你的脚本,只需要输入``py`` 和脚本路径::" + +#: ../../faq/windows.rst:114 +msgid "How do I make Python scripts executable?" +msgstr "我怎么让 Python 脚本可执行?" + +#: ../../faq/windows.rst:116 +msgid "" +"On Windows, the standard Python installer already associates the .py " +"extension with a file type (Python.File) and gives that file type an open " +"command that runs the interpreter (``D:\\Program Files\\Python\\python.exe " +"\"%1\" %*``). This is enough to make scripts executable from the command " +"prompt as 'foo.py'. If you'd rather be able to execute the script by simple" +" typing 'foo' with no extension you need to add .py to the PATHEXT " +"environment variable." +msgstr "" +"在 Windows 上,标准 Python 安装程序已将 .py 扩展名与文件类型 (Python.File) " +"相关联,并为该文件类型提供运行解释器的打开命令 (``D:\\Program Files\\Python\\python.exe \"%1\" " +"%*``) 。 这足以使脚本在命令提示符下作为“foo.py”命令被执行。 如果希望通过简单地键入“foo”而无需输入文件扩展名来执行脚本,则需要将 " +".py 添加到 PATHEXT 环境变量中。" + +#: ../../faq/windows.rst:124 +msgid "Why does Python sometimes take so long to start?" +msgstr "为什么有时候 Python 程序会启动缓慢?" + +#: ../../faq/windows.rst:126 +msgid "" +"Usually Python starts very quickly on Windows, but occasionally there are " +"bug reports that Python suddenly begins to take a long time to start up. " +"This is made even more puzzling because Python will work fine on other " +"Windows systems which appear to be configured identically." +msgstr "" +"通常,Python 在 Windows 上启动得很快,但偶尔会有错误报告说 Python 突然需要很长时间才能启动。更令人费解的是,在其他配置相同的 " +"Windows 系统上,Python 却可以工作得很好。" + +#: ../../faq/windows.rst:131 +msgid "" +"The problem may be caused by a misconfiguration of virus checking software " +"on the problem machine. Some virus scanners have been known to introduce " +"startup overhead of two orders of magnitude when the scanner is configured " +"to monitor all reads from the filesystem. Try checking the configuration of" +" virus scanning software on your systems to ensure that they are indeed " +"configured identically. McAfee, when configured to scan all file system read" +" activity, is a particular offender." +msgstr "" +"该问题可能是由于计算机上的杀毒软件配置错误造成的。当将病毒扫描配置为监视文件系统中所有读取行为时,一些杀毒扫描程序会导致两个数量级的启动开销。请检查你系统安装的杀毒扫描程序的配置,确保两台机它们是同样的配置。已知的," +" McAfee 杀毒软件在将它设置为扫描所有文件系统访问时,会产生这个问题。" + +#: ../../faq/windows.rst:141 +msgid "How do I make an executable from a Python script?" +msgstr "我怎样使用 Python 脚本制作可执行文件?" + +#: ../../faq/windows.rst:143 +msgid "" +"See :ref:`faq-create-standalone-binary` for a list of tools that can be used" +" to make executables." +msgstr "请参阅 :ref:`faq-create-standalone-binary` 查看可用来生成可执行文件的工具清单。" + +#: ../../faq/windows.rst:148 +msgid "Is a ``*.pyd`` file the same as a DLL?" +msgstr "``*.pyd`` 文件和 DLL 文件相同吗?" + +#: ../../faq/windows.rst:150 +msgid "" +"Yes, .pyd files are dll's, but there are a few differences. If you have a " +"DLL named ``foo.pyd``, then it must have a function ``PyInit_foo()``. You " +"can then write Python \"import foo\", and Python will search for foo.pyd (as" +" well as foo.py, foo.pyc) and if it finds it, will attempt to call " +"``PyInit_foo()`` to initialize it. You do not link your .exe with foo.lib, " +"as that would cause Windows to require the DLL to be present." +msgstr "" +"是的, .pyd 文件也是 dll ,但有一些差异。如果你有一个名为 ``foo.pyd`` 的DLL,那么它必须有一个函数 " +"``PyInit_foo()`` 。 然后你可以编写 Python 代码 “import foo” ,Python 将搜索 foo.pyd (以及 " +"foo.py 、 foo.pyc )。如果找到它,将尝试调用 ``PyInit_foo()`` 来初始化它。你不应将 .exe 与 foo.lib " +"链接,因为这会导致 Windows 要求存在 DLL 。" + +#: ../../faq/windows.rst:157 +msgid "" +"Note that the search path for foo.pyd is PYTHONPATH, not the same as the " +"path that Windows uses to search for foo.dll. Also, foo.pyd need not be " +"present to run your program, whereas if you linked your program with a dll, " +"the dll is required. Of course, foo.pyd is required if you want to say " +"``import foo``. In a DLL, linkage is declared in the source code with " +"``__declspec(dllexport)``. In a .pyd, linkage is defined in a list of " +"available functions." +msgstr "" +"请注意, foo.pyd 的搜索路径是 PYTHONPATH ,与 Windows 用于搜索 foo.dll 的路径不同。此外, foo.pyd " +"不需要存在来运行你的程序,而如果你将程序与 dll 链接,则需要 dll 。 当然,如果你想 ``import foo`` ,则需要 foo.pyd " +"。在 DLL 中,链接在源代码中用 ``__declspec(dllexport)`` 声明。 在 .pyd 中,链接在可用函数列表中定义。" + +#: ../../faq/windows.rst:166 +msgid "How can I embed Python into a Windows application?" +msgstr "我怎样将 Python 嵌入一个 Windows 程序?" + +#: ../../faq/windows.rst:168 +msgid "" +"Embedding the Python interpreter in a Windows app can be summarized as " +"follows:" +msgstr "在 Windows 应用程序中嵌入 Python 解释器可以总结如下:" + +#: ../../faq/windows.rst:170 +msgid "" +"Do _not_ build Python into your .exe file directly. On Windows, Python must" +" be a DLL to handle importing modules that are themselves DLL's. (This is " +"the first key undocumented fact.) Instead, link to :file:`python{NN}.dll`; " +"it is typically installed in ``C:\\Windows\\System``. *NN* is the Python " +"version, a number such as \"33\" for Python 3.3." +msgstr "" +"请 _不要_ 直接在你的 .exe 文件中内置 Python 。在 Windows 上, Python 必须是一个 DLL " +",这样才可以处理导入的本身就是 DLL 的模块。(这是第一个未记录的关键事实。)相反,链接到 :file:`python{NN}.dll` " +";它通常安装在 ``C:\\Windows\\System`` 中。 *NN* 是 Python 版本,如数字“33”代表 Python 3.3 。" + +#: ../../faq/windows.rst:176 +msgid "" +"You can link to Python in two different ways. Load-time linking means " +"linking against :file:`python{NN}.lib`, while run-time linking means linking" +" against :file:`python{NN}.dll`. (General note: :file:`python{NN}.lib` is " +"the so-called \"import lib\" corresponding to :file:`python{NN}.dll`. It " +"merely defines symbols for the linker.)" +msgstr "" +"你可以通过两种不同的方式链接到 Python 。加载时链接意味着链接到 :file:`python{NN}.lib` ,而运行时链接意味着链接 " +":file:`python{NN}.dll` 。(一般说明: :file:`python {NN}.lib` 是所谓的“import lib”,对应于 " +":file:`python{NN}.dll` 。它只定义了链接器的符号。)" + +#: ../../faq/windows.rst:182 +msgid "" +"Run-time linking greatly simplifies link options; everything happens at run " +"time. Your code must load :file:`python{NN}.dll` using the Windows " +"``LoadLibraryEx()`` routine. The code must also use access routines and " +"data in :file:`python{NN}.dll` (that is, Python's C API's) using pointers " +"obtained by the Windows ``GetProcAddress()`` routine. Macros can make using" +" these pointers transparent to any C code that calls routines in Python's C " +"API." +msgstr "" +"运行时链接极大地简化了链接选项,一切都在运行时发生。你的代码必须使用 Windows 的 ``LoadLibraryEx()`` 程序加载 " +":file:`python{NN}.dll` 。代码还必须使用使用 Windows 的 ``GetProcAddress()`` 例程获得的指针访问 " +":file:`python{NN}.dll` 中程序和数据(即 Python 的 C API )。宏可以使这些指针对任何调用 Python C API " +"中的例程的 C 代码都是透明的。" + +#: ../../faq/windows.rst:191 +msgid "" +"If you use SWIG, it is easy to create a Python \"extension module\" that " +"will make the app's data and methods available to Python. SWIG will handle " +"just about all the grungy details for you. The result is C code that you " +"link *into* your .exe file (!) You do _not_ have to create a DLL file, and " +"this also simplifies linking." +msgstr "" +"如果你使用 SWIG ,很容易创建一个 Python “扩展模块”,它将使应用程序的数据和方法可供 Python " +"使用。SWIG将为你处理所有蹩脚的细节。结果是你将链接到 .exe 文件 *中* 的C代码 (!) 你不必创建 DLL 文件,这也简化了链接。" + +#: ../../faq/windows.rst:197 +msgid "" +"SWIG will create an init function (a C function) whose name depends on the " +"name of the extension module. For example, if the name of the module is " +"leo, the init function will be called initleo(). If you use SWIG shadow " +"classes, as you should, the init function will be called initleoc(). This " +"initializes a mostly hidden helper class used by the shadow class." +msgstr "" +"SWIG 将创建一个 init 函数(一个 C 函数),其名称取决于扩展模块的名称。例如,如果模块的名称是 leo ,则 init 函数将被称为 " +"initleo() 。 如果您使用 SWIG 阴影类,则 init 函数将被称为 initleoc() 。这初始化了一个由阴影类使用的隐藏辅助类。" + +#: ../../faq/windows.rst:203 +msgid "" +"The reason you can link the C code in step 2 into your .exe file is that " +"calling the initialization function is equivalent to importing the module " +"into Python! (This is the second key undocumented fact.)" +msgstr "" +"你可以将步骤 2 中的 C 代码链接到 .exe 文件的原因是调用初始化函数等同于将模块导入 Python ! (这是第二个关键的未记载事实。)" + +#: ../../faq/windows.rst:207 +msgid "" +"In short, you can use the following code to initialize the Python " +"interpreter with your extension module." +msgstr "简而言之,你可以用以下代码使用扩展模块初始化 Python 解释器。" + +#: ../../faq/windows.rst:218 +msgid "" +"There are two problems with Python's C API which will become apparent if you" +" use a compiler other than MSVC, the compiler used to build pythonNN.dll." +msgstr "Python C API 存在两个问题,如果你使用除 MSVC 之外的编译器用于构建 python.dll ,这将会变得明显。" + +#: ../../faq/windows.rst:221 +msgid "" +"Problem 1: The so-called \"Very High Level\" functions that take FILE * " +"arguments will not work in a multi-compiler environment because each " +"compiler's notion of a struct FILE will be different. From an " +"implementation standpoint these are very _low_ level functions." +msgstr "" +"问题1:采用 FILE* 参数的所谓“极高级”函数在多编译器环境中不起作用,因为每个编译器的FILE结构体概念都不同。从实现的角度来看,这些是非常 " +"_低_ 级的功能。" + +#: ../../faq/windows.rst:226 +msgid "" +"Problem 2: SWIG generates the following code when generating wrappers to " +"void functions:" +msgstr "问题2:在为 void 函数生成包装器时,SWIG 会生成以下代码:" + +#: ../../faq/windows.rst:235 +msgid "" +"Alas, Py_None is a macro that expands to a reference to a complex data " +"structure called _Py_NoneStruct inside pythonNN.dll. Again, this code will " +"fail in a mult-compiler environment. Replace such code by:" +msgstr "" +"Py_None 是一个宏,它扩展为对 pythonNN.dll 中名为 _Py_NoneStruct " +"的复杂数据结构的引用。同样,此代码将在多编译器环境中失败。将此类代码替换为:" + +#: ../../faq/windows.rst:243 +msgid "" +"It may be possible to use SWIG's ``%typemap`` command to make the change " +"automatically, though I have not been able to get this to work (I'm a " +"complete SWIG newbie)." +msgstr "有可能使用 SWIG 的 ``%typemap`` 命令自动进行更改,但我无法使其工作(我是一个完全的SWIG新手)。" + +#: ../../faq/windows.rst:247 +msgid "" +"Using a Python shell script to put up a Python interpreter window from " +"inside your Windows app is not a good idea; the resulting window will be " +"independent of your app's windowing system. Rather, you (or the " +"wxPythonWindow class) should create a \"native\" interpreter window. It is " +"easy to connect that window to the Python interpreter. You can redirect " +"Python's i/o to _any_ object that supports read and write, so all you need " +"is a Python object (defined in your extension module) that contains read() " +"and write() methods." +msgstr "" +"使用 Python shell 脚本从 Windows 应用程序内部建立 Python " +"解释器窗口并不是一个好主意;生成的窗口将独立于应用程序的窗口系统。相反,你(或 wxPythonWindow " +"类)应该创建一个“本机”解释器窗口。将该窗口连接到Python解释器很容易。你可以将 Python的 i/o 重定向到支持读写的 _任意_ " +"对象,因此你只需要一个包含 read() 和 write() 方法的 Python 对象(在扩展模块中定义)。" + +#: ../../faq/windows.rst:256 +msgid "How do I keep editors from inserting tabs into my Python source?" +msgstr "如何让编辑器不要在我的 Python 源代码中插入 tab ?" + +#: ../../faq/windows.rst:258 +msgid "" +"The FAQ does not recommend using tabs, and the Python style guide, :pep:`8`," +" recommends 4 spaces for distributed Python code; this is also the Emacs " +"python-mode default." +msgstr "" +"本 FAQ 不建议使用制表符, Python 样式指南 :pep:`8` ,为发行的 Python 代码推荐 4 个空格;这也是 Emacs " +"python-mode 默认值。" + +#: ../../faq/windows.rst:262 +msgid "" +"Under any editor, mixing tabs and spaces is a bad idea. MSVC is no " +"different in this respect, and is easily configured to use spaces: Take " +":menuselection:`Tools --> Options --> Tabs`, and for file type \"Default\" " +"set \"Tab size\" and \"Indent size\" to 4, and select the \"Insert spaces\" " +"radio button." +msgstr "" +"在任何编辑器下,混合制表符和空格都是一个坏主意。 MSVC 在这方面没有什么不同,并且很容易配置为使用空格: 点击 " +":menuselection:`Tools --> Options --> Tabs`,对于文件类型“Default”,设置“Tab " +"size”和“Indent size”为 4 ,并选择“插入空格”单选按钮。" + +#: ../../faq/windows.rst:267 +msgid "" +"Python raises :exc:`IndentationError` or :exc:`TabError` if mixed tabs and " +"spaces are causing problems in leading whitespace. You may also run the " +":mod:`tabnanny` module to check a directory tree in batch mode." +msgstr "" +"如果混合制表符和空格导致前导空格出现问题, Python 会引发 :exc:`IndentationError` 或 :exc:`TabError` " +"。你还可以运行 :mod:`tabnanny` 模块以批处理模式检查目录树。" + +#: ../../faq/windows.rst:274 +msgid "How do I check for a keypress without blocking?" +msgstr "如何在不阻塞的情况下检查按键?" + +#: ../../faq/windows.rst:276 +msgid "" +"Use the :mod:`msvcrt` module. This is a standard Windows-specific extension" +" module. It defines a function ``kbhit()`` which checks whether a keyboard " +"hit is present, and ``getch()`` which gets one character without echoing it." +msgstr "" +"使用 :mod:`msvcrt` 模块。 这是一个标准的 Windows 专属扩展模块。 它定义了一个函数 ``kbhit()`` " +"用于检查是否有键盘中的某个键被按下,以及 ``getch()`` 用于获取一个字符而不将其回显。" diff --git a/glossary.po b/glossary.po new file mode 100644 index 000000000..2433e95f0 --- /dev/null +++ b/glossary.po @@ -0,0 +1,2326 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) 2001-2024, Python Software Foundation +# This file is distributed under the same license as the Python package. +# FIRST AUTHOR , YEAR. +# +# Translators: +# Fred , 2018 +# df2dc1c92e792f7ae8417c51df43db8f_594d92a <0f49be28017426edb1db1a2ab6e67088_717605>, 2018 +# Shengjing Zhu , 2019 +# jaystone776 <1732865113@qq.com>, 2021 +# Freesand Leo , 2023 +# Rafael Fontenelle , 2024 +# +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: Python 3.9\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2024-07-19 16:36+0000\n" +"PO-Revision-Date: 2017-02-16 17:32+0000\n" +"Last-Translator: Rafael Fontenelle , 2024\n" +"Language-Team: Chinese (China) (https://app.transifex.com/python-doc/teams/5390/zh_CN/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: zh_CN\n" +"Plural-Forms: nplurals=1; plural=0;\n" + +#: ../../glossary.rst:5 +msgid "Glossary" +msgstr "术语对照表" + +#: ../../glossary.rst:10 +msgid "``>>>``" +msgstr "``>>>``" + +#: ../../glossary.rst:12 +msgid "" +"The default Python prompt of the interactive shell. Often seen for code " +"examples which can be executed interactively in the interpreter." +msgstr "Python 交互模式下的默认提示符。通常可以在能在解释器中交互执行的代码示例中看到。" + +#: ../../glossary.rst:14 +msgid "``...``" +msgstr "``...``" + +#: ../../glossary.rst:16 +msgid "Can refer to:" +msgstr "具有以下含义:" + +#: ../../glossary.rst:18 +msgid "" +"The default Python prompt of the interactive shell when entering the code " +"for an indented code block, when within a pair of matching left and right " +"delimiters (parentheses, square brackets, curly braces or triple quotes), or" +" after specifying a decorator." +msgstr "" +"当输入带缩进的代码块时,以及在一对匹配的左右分隔符(括号、方括号、大括号或三引号)内,或在指定装饰器之后,交互式 Python 的默认提示符。" + +#: ../../glossary.rst:23 +msgid "The :const:`Ellipsis` built-in constant." +msgstr ":const:`Ellipsis` 内置常量。" + +#: ../../glossary.rst:24 +msgid "2to3" +msgstr "2to3" + +#: ../../glossary.rst:26 +msgid "" +"A tool that tries to convert Python 2.x code to Python 3.x code by handling " +"most of the incompatibilities which can be detected by parsing the source " +"and traversing the parse tree." +msgstr "这是一个尝试将 Python 2.x 代码转换为 Python 3.x 代码的工具,通过解析源代码和遍历解析树来处理大部分不兼容问题。" + +#: ../../glossary.rst:30 +msgid "" +"2to3 is available in the standard library as :mod:`lib2to3`; a standalone " +"entry point is provided as :file:`Tools/scripts/2to3`. See " +":ref:`2to3-reference`." +msgstr "" +"2to3 的标准库为 :mod:`lib2to3`;独立入口点为 :file:`Tools/scripts/2to3`。 参见 " +":ref:`2to3-reference`。" + +#: ../../glossary.rst:33 +msgid "abstract base class" +msgstr "abstract base class -- 抽象基类" + +#: ../../glossary.rst:35 +msgid "" +"Abstract base classes complement :term:`duck-typing` by providing a way to " +"define interfaces when other techniques like :func:`hasattr` would be clumsy" +" or subtly wrong (for example with :ref:`magic methods `). " +"ABCs introduce virtual subclasses, which are classes that don't inherit from" +" a class but are still recognized by :func:`isinstance` and " +":func:`issubclass`; see the :mod:`abc` module documentation. Python comes " +"with many built-in ABCs for data structures (in the :mod:`collections.abc` " +"module), numbers (in the :mod:`numbers` module), streams (in the :mod:`io` " +"module), import finders and loaders (in the :mod:`importlib.abc` module). " +"You can create your own ABCs with the :mod:`abc` module." +msgstr "" +"抽象基类简称 ABC,是对 :term:`duck-typing` 的补充,它提供了一种定义接口的新方式,相比之下其他技巧例如 " +":func:`hasattr` 显得过于笨拙或有微妙错误(例如使用 :ref:`魔术方法 `)。ABC " +"引入了虚拟子类,这种类并非继承自其他类,但却仍能被 :func:`isinstance` 和 :func:`issubclass` 所认可;详见 " +":mod:`abc` 模块文档。Python 自带许多内置的 ABC 用于实现数据结构(在 :mod:`collections.abc` " +"模块中)、数字(在 :mod:`numbers` 模块中)、流(在 :mod:`io` 模块中)、导入查找器和加载器(在 " +":mod:`importlib.abc` 模块中)。你可以使用 :mod:`abc` 模块来创建自己的 ABC。" + +#: ../../glossary.rst:46 +msgid "annotation" +msgstr "annotation -- 标注" + +#: ../../glossary.rst:48 +msgid "" +"A label associated with a variable, a class attribute or a function " +"parameter or return value, used by convention as a :term:`type hint`." +msgstr "关联到某个变量、类属性、函数形参或返回值的标签,被约定作为 :term:`类型注解 ` 来使用。" + +#: ../../glossary.rst:52 +msgid "" +"Annotations of local variables cannot be accessed at runtime, but " +"annotations of global variables, class attributes, and functions are stored " +"in the :attr:`__annotations__` special attribute of modules, classes, and " +"functions, respectively." +msgstr "" +"局部变量的标注在运行时不可访问,但全局变量、类属性和函数的标注会分别存放模块、类和函数的 :attr:`__annotations__` 特殊属性中。" + +#: ../../glossary.rst:58 +msgid "" +"See :term:`variable annotation`, :term:`function annotation`, :pep:`484` and" +" :pep:`526`, which describe this functionality." +msgstr "" +"参见 :term:`variable annotation`、:term:`function annotation`、:pep:`484` 和 " +":pep:`526`,对此功能均有介绍。" + +#: ../../glossary.rst:60 +msgid "argument" +msgstr "argument -- 参数" + +#: ../../glossary.rst:62 +msgid "" +"A value passed to a :term:`function` (or :term:`method`) when calling the " +"function. There are two kinds of argument:" +msgstr "在调用函数时传给 :term:`function` (或 :term:`method` )的值。参数分为两种:" + +#: ../../glossary.rst:65 +msgid "" +":dfn:`keyword argument`: an argument preceded by an identifier (e.g. " +"``name=``) in a function call or passed as a value in a dictionary preceded " +"by ``**``. For example, ``3`` and ``5`` are both keyword arguments in the " +"following calls to :func:`complex`::" +msgstr "" +":dfn:`关键字参数`: 在函数调用中前面带有标识符(例如 ``name=``)或者作为包含在前面带有 ``**`` " +"的字典里的值传入。举例来说,``3`` 和 ``5`` 在以下对 :func:`complex` 的调用中均属于关键字参数::" + +#: ../../glossary.rst:73 +msgid "" +":dfn:`positional argument`: an argument that is not a keyword argument. " +"Positional arguments can appear at the beginning of an argument list and/or " +"be passed as elements of an :term:`iterable` preceded by ``*``. For example," +" ``3`` and ``5`` are both positional arguments in the following calls::" +msgstr "" +":dfn:`位置参数`: 不属于关键字参数的参数。位置参数可出现于参数列表的开头以及/或者作为前面带有 ``*`` 的 :term:`iterable`" +" 里的元素被传入。举例来说,``3`` 和 ``5`` 在以下调用中均属于位置参数::" + +#: ../../glossary.rst:82 +msgid "" +"Arguments are assigned to the named local variables in a function body. See " +"the :ref:`calls` section for the rules governing this assignment. " +"Syntactically, any expression can be used to represent an argument; the " +"evaluated value is assigned to the local variable." +msgstr "" +"参数会被赋值给函数体中对应的局部变量。有关赋值规则参见 :ref:`calls` " +"一节。根据语法,任何表达式都可用来表示一个参数;最终算出的值会被赋给对应的局部变量。" + +#: ../../glossary.rst:87 +msgid "" +"See also the :term:`parameter` glossary entry, the FAQ question on :ref:`the" +" difference between arguments and parameters `, " +"and :pep:`362`." +msgstr "" +"另参见 :term:`parameter` 术语表条目,常见问题中 :ref:`参数与形参的区别 ` 以及 :pep:`362`。" + +#: ../../glossary.rst:90 +msgid "asynchronous context manager" +msgstr "asynchronous context manager -- 异步上下文管理器" + +#: ../../glossary.rst:92 +msgid "" +"An object which controls the environment seen in an :keyword:`async with` " +"statement by defining :meth:`__aenter__` and :meth:`__aexit__` methods. " +"Introduced by :pep:`492`." +msgstr "" +"此种对象通过定义 :meth:`__aenter__` 和 :meth:`__aexit__` 方法来对 :keyword:`async with` " +"语句中的环境进行控制。由 :pep:`492` 引入。" + +#: ../../glossary.rst:95 +msgid "asynchronous generator" +msgstr "asynchronous generator -- 异步生成器" + +#: ../../glossary.rst:97 +msgid "" +"A function which returns an :term:`asynchronous generator iterator`. It " +"looks like a coroutine function defined with :keyword:`async def` except " +"that it contains :keyword:`yield` expressions for producing a series of " +"values usable in an :keyword:`async for` loop." +msgstr "" +"返回值为 :term:`asynchronous generator iterator` 的函数。它与使用 :keyword:`async def` " +"定义的协程函数很相似,不同之处在于它包含 :keyword:`yield` 表达式以产生一系列可在 :keyword:`async for` " +"循环中使用的值。" + +#: ../../glossary.rst:102 +msgid "" +"Usually refers to an asynchronous generator function, but may refer to an " +"*asynchronous generator iterator* in some contexts. In cases where the " +"intended meaning isn't clear, using the full terms avoids ambiguity." +msgstr "此术语通常是指异步生成器函数,但在某些情况下则可能是指 *异步生成器迭代器*。如果需要清楚表达具体含义,请使用全称以避免歧义。" + +#: ../../glossary.rst:106 +msgid "" +"An asynchronous generator function may contain :keyword:`await` expressions " +"as well as :keyword:`async for`, and :keyword:`async with` statements." +msgstr "" +"一个异步生成器函数可能包含 :keyword:`await` 表达式或者 :keyword:`async for` 以及 :keyword:`async" +" with` 语句。" + +#: ../../glossary.rst:109 +msgid "asynchronous generator iterator" +msgstr "asynchronous generator iterator -- 异步生成器迭代器" + +#: ../../glossary.rst:111 +msgid "An object created by a :term:`asynchronous generator` function." +msgstr ":term:`asynchronous generator` 函数所创建的对象。" + +#: ../../glossary.rst:113 +msgid "" +"This is an :term:`asynchronous iterator` which when called using the " +":meth:`__anext__` method returns an awaitable object which will execute the " +"body of the asynchronous generator function until the next :keyword:`yield` " +"expression." +msgstr "" +"此对象属于 :term:`asynchronous iterator`,当使用 :meth:`__anext__` " +"方法调用时会返回一个可等待对象来执行异步生成器函数的代码直到下一个 :keyword:`yield` 表达式。" + +#: ../../glossary.rst:118 +msgid "" +"Each :keyword:`yield` temporarily suspends processing, remembering the " +"location execution state (including local variables and pending try-" +"statements). When the *asynchronous generator iterator* effectively resumes" +" with another awaitable returned by :meth:`__anext__`, it picks up where it " +"left off. See :pep:`492` and :pep:`525`." +msgstr "" +"每个 :keyword:`yield` 会临时暂停处理,记住当前位置执行状态 (包括局部变量和挂起的 try 语句)。当该 *异步生成器迭代器* 与其他" +" :meth:`__anext__` 返回的可等待对象有效恢复时,它会从离开位置继续执行。参见 :pep:`492` 和 :pep:`525`。" + +#: ../../glossary.rst:123 +msgid "asynchronous iterable" +msgstr "asynchronous iterable -- 异步可迭代对象" + +#: ../../glossary.rst:125 +msgid "" +"An object, that can be used in an :keyword:`async for` statement. Must " +"return an :term:`asynchronous iterator` from its :meth:`__aiter__` method. " +"Introduced by :pep:`492`." +msgstr "" +"可在 :keyword:`async for` 语句中被使用的对象。必须通过它的 :meth:`__aiter__` 方法返回一个 " +":term:`asynchronous iterator`。由 :pep:`492` 引入。" + +#: ../../glossary.rst:128 +msgid "asynchronous iterator" +msgstr "asynchronous iterator -- 异步迭代器" + +#: ../../glossary.rst:130 +msgid "" +"An object that implements the :meth:`__aiter__` and :meth:`__anext__` " +"methods. ``__anext__`` must return an :term:`awaitable` object. " +":keyword:`async for` resolves the awaitables returned by an asynchronous " +"iterator's :meth:`__anext__` method until it raises a " +":exc:`StopAsyncIteration` exception. Introduced by :pep:`492`." +msgstr "" +"实现了 :meth:`__aiter__` 和 :meth:`__anext__` 方法的对象。``__anext__`` 必须返回一个 " +":term:`awaitable` 对象。:keyword:`async for` 会处理异步迭代器的 :meth:`__anext__` " +"方法所返回的可等待对象,直到其引发一个 :exc:`StopAsyncIteration` 异常。由 :pep:`492` 引入。" + +#: ../../glossary.rst:135 +msgid "attribute" +msgstr "attribute -- 属性" + +#: ../../glossary.rst:137 +msgid "" +"A value associated with an object which is referenced by name using dotted " +"expressions. For example, if an object *o* has an attribute *a* it would be" +" referenced as *o.a*." +msgstr "关联到一个对象的值,可以使用点号表达式通过其名称来引用。例如,如果一个对象 *o* 具有一个属性 *a*,就可以用 *o.a* 来引用它。" + +#: ../../glossary.rst:140 +msgid "awaitable" +msgstr "awaitable -- 可等待对象" + +#: ../../glossary.rst:142 +msgid "" +"An object that can be used in an :keyword:`await` expression. Can be a " +":term:`coroutine` or an object with an :meth:`__await__` method. See also " +":pep:`492`." +msgstr "" +"能在 :keyword:`await` 表达式中使用的对象。可以是 :term:`coroutine` 或是具有 :meth:`__await__` " +"方法的对象。参见 :pep:`492`。" + +#: ../../glossary.rst:145 +msgid "BDFL" +msgstr "BDFL" + +#: ../../glossary.rst:147 +msgid "" +"Benevolent Dictator For Life, a.k.a. `Guido van Rossum " +"`_, Python's creator." +msgstr "" +"“终身仁慈独裁者”的英文缩写,即 `Guido van Rossum `_,Python " +"的创造者。" + +#: ../../glossary.rst:149 +msgid "binary file" +msgstr "binary file -- 二进制文件" + +#: ../../glossary.rst:151 +msgid "" +"A :term:`file object` able to read and write :term:`bytes-like objects " +"`. Examples of binary files are files opened in binary " +"mode (``'rb'``, ``'wb'`` or ``'rb+'``), :data:`sys.stdin.buffer`, " +":data:`sys.stdout.buffer`, and instances of :class:`io.BytesIO` and " +":class:`gzip.GzipFile`." +msgstr "" +":term:`file object` 能够读写 :term:`字节类对象 `。二进制文件的例子包括以二进制模式(``'rb'``, ``'wb'`` or " +"``'rb+'``)打开的文件、:data:`sys.stdin.buffer`、:data:`sys.stdout.buffer` 以及 " +":class:`io.BytesIO` 和 :class:`gzip.GzipFile` 的实例。" + +#: ../../glossary.rst:158 +msgid "" +"See also :term:`text file` for a file object able to read and write " +":class:`str` objects." +msgstr "另请参见 :term:`text file` 了解能够读写 :class:`str` 对象的文件对象。" + +#: ../../glossary.rst:160 +msgid "bytes-like object" +msgstr "bytes-like object -- 字节型对象" + +#: ../../glossary.rst:162 +msgid "" +"An object that supports the :ref:`bufferobjects` and can export a " +"C-:term:`contiguous` buffer. This includes all :class:`bytes`, " +":class:`bytearray`, and :class:`array.array` objects, as well as many common" +" :class:`memoryview` objects. Bytes-like objects can be used for various " +"operations that work with binary data; these include compression, saving to " +"a binary file, and sending over a socket." +msgstr "" +"支持 :ref:`bufferobjects` 并且能导出 C-:term:`contiguous` 缓冲的对象。这包括所有 " +":class:`bytes`、:class:`bytearray` 和 :class:`array.array` 对象,以及许多普通 " +":class:`memoryview` 对象。 字节型对象可在多种二进制数据操作中使用;这些操作包括压缩、保存为二进制文件以及通过套接字发送等。" + +#: ../../glossary.rst:169 +msgid "" +"Some operations need the binary data to be mutable. The documentation often" +" refers to these as \"read-write bytes-like objects\". Example mutable " +"buffer objects include :class:`bytearray` and a :class:`memoryview` of a " +":class:`bytearray`. Other operations require the binary data to be stored in" +" immutable objects (\"read-only bytes-like objects\"); examples of these " +"include :class:`bytes` and a :class:`memoryview` of a :class:`bytes` object." +msgstr "" +"某些操作需要可变的二进制数据。这种对象在文档中常被称为“可读写字节类对象”。可变缓冲对象的例子包括 :class:`bytearray` 以及 " +":class:`bytearray` 的 :class:`memoryview`。其他操作要求二进制数据存放于不可变对象 " +"(\"只读字节类对象\");这种对象的例子包括 :class:`bytes` 以及 :class:`bytes` 对象的 " +":class:`memoryview`。" + +#: ../../glossary.rst:177 +msgid "bytecode" +msgstr "bytecode -- 字节码" + +#: ../../glossary.rst:179 +msgid "" +"Python source code is compiled into bytecode, the internal representation of" +" a Python program in the CPython interpreter. The bytecode is also cached " +"in ``.pyc`` files so that executing the same file is faster the second time " +"(recompilation from source to bytecode can be avoided). This \"intermediate" +" language\" is said to run on a :term:`virtual machine` that executes the " +"machine code corresponding to each bytecode. Do note that bytecodes are not " +"expected to work between different Python virtual machines, nor to be stable" +" between Python releases." +msgstr "" +"Python 源代码会被编译为字节码,即 CPython 解释器中表示 Python 程序的内部代码。字节码还会缓存在 ``.pyc`` " +"文件中,这样第二次执行同一文件时速度更快(可以免去将源码重新编译为字节码)。这种 \"中间语言\" 运行在根据字节码执行相应机器码的 " +":term:`virtual machine` 之上。请注意不同 Python 虚拟机上的字节码不一定通用,也不一定能在不同 Python 版本上兼容。" + +#: ../../glossary.rst:189 +msgid "" +"A list of bytecode instructions can be found in the documentation for " +":ref:`the dis module `." +msgstr "字节码指令列表可以在 :ref:`dis 模块 ` 的文档中查看。" + +#: ../../glossary.rst:191 +msgid "callback" +msgstr "callback -- 回调" + +#: ../../glossary.rst:193 +msgid "" +"A subroutine function which is passed as an argument to be executed at some " +"point in the future." +msgstr "一个作为参数被传入以用以在未来的某个时刻被调用的子例程函数。" + +#: ../../glossary.rst:195 +msgid "class" +msgstr "class" + +#: ../../glossary.rst:197 +msgid "" +"A template for creating user-defined objects. Class definitions normally " +"contain method definitions which operate on instances of the class." +msgstr "用来创建用户定义对象的模板。类定义通常包含对该类的实例进行操作的方法定义。" + +#: ../../glossary.rst:200 +msgid "class variable" +msgstr "class variable -- 类变量" + +#: ../../glossary.rst:202 +msgid "" +"A variable defined in a class and intended to be modified only at class " +"level (i.e., not in an instance of the class)." +msgstr "在类中定义的变量,并且仅限在类的层级上修改 (而不是在类的实例中修改)。" + +#: ../../glossary.rst:204 +msgid "coercion" +msgstr "coercion -- 强制类型转换" + +#: ../../glossary.rst:206 +msgid "" +"The implicit conversion of an instance of one type to another during an " +"operation which involves two arguments of the same type. For example, " +"``int(3.15)`` converts the floating point number to the integer ``3``, but " +"in ``3+4.5``, each argument is of a different type (one int, one float), and" +" both must be converted to the same type before they can be added or it will" +" raise a :exc:`TypeError`. Without coercion, all arguments of even " +"compatible types would have to be normalized to the same value by the " +"programmer, e.g., ``float(3)+4.5`` rather than just ``3+4.5``." +msgstr "" +"在包含两个相同类型参数的操作中,一种类型的实例隐式地转换为另一种类型。例如,``int(3.15)`` 是将原浮点数转换为整型数 ``3``,但在 " +"``3+4.5`` 中,参数的类型不一致(一个是 int, 一个是 float),两者必须转换为相同类型才能相加,否则将引发 " +":exc:`TypeError`。如果没有强制类型转换机制,程序员必须将所有可兼容参数归一化为相同类型,例如要写成 ``float(3)+4.5`` " +"而不是 ``3+4.5``。" + +#: ../../glossary.rst:214 +msgid "complex number" +msgstr "complex number -- 复数" + +#: ../../glossary.rst:216 +msgid "" +"An extension of the familiar real number system in which all numbers are " +"expressed as a sum of a real part and an imaginary part. Imaginary numbers " +"are real multiples of the imaginary unit (the square root of ``-1``), often " +"written ``i`` in mathematics or ``j`` in engineering. Python has built-in " +"support for complex numbers, which are written with this latter notation; " +"the imaginary part is written with a ``j`` suffix, e.g., ``3+1j``. To get " +"access to complex equivalents of the :mod:`math` module, use :mod:`cmath`. " +"Use of complex numbers is a fairly advanced mathematical feature. If you're" +" not aware of a need for them, it's almost certain you can safely ignore " +"them." +msgstr "" +"对普通实数系统的扩展,其中所有数字都被表示为一个实部和一个虚部的和。虚数是虚数单位(``-1`` 的平方根)的实倍数,通常在数学中写为 " +"``i``,在工程学中写为 ``j``。Python 内置了对复数的支持,采用工程学标记方式;虚部带有一个 ``j`` 后缀,例如 " +"``3+1j``。如果需要 :mod:`math` 模块内对象的对应复数版本,请使用 " +":mod:`cmath`,复数的使用是一个比较高级的数学特性。如果你感觉没有必要,忽略它们也几乎不会有任何问题。" + +#: ../../glossary.rst:226 +msgid "context manager" +msgstr "context manager -- 上下文管理器" + +#: ../../glossary.rst:228 +msgid "" +"An object which controls the environment seen in a :keyword:`with` statement" +" by defining :meth:`__enter__` and :meth:`__exit__` methods. See :pep:`343`." +msgstr "" +"在 :keyword:`with` 语句中使用,通过定义 :meth:`__enter__` 和 :meth:`__exit__` " +"方法来控制环境状态的对象。参见 :pep:`343`。" + +#: ../../glossary.rst:231 +msgid "context variable" +msgstr "context variable -- 上下文变量" + +#: ../../glossary.rst:233 +msgid "" +"A variable which can have different values depending on its context. This is" +" similar to Thread-Local Storage in which each execution thread may have a " +"different value for a variable. However, with context variables, there may " +"be several contexts in one execution thread and the main usage for context " +"variables is to keep track of variables in concurrent asynchronous tasks. " +"See :mod:`contextvars`." +msgstr "" +"一种根据其所属的上下文可以具有不同的值的变量。 这类似于在线程局部存储中每个执行线程可以具有不同的变量值。 " +"不过,对于上下文变量来说,一个执行线程中可能会有多个上下文,而上下文变量的主要用途是对并发异步任务中变量进行追踪。 参见 " +":mod:`contextvars`。" + +#: ../../glossary.rst:240 +msgid "contiguous" +msgstr "contiguous -- 连续" + +#: ../../glossary.rst:244 +msgid "" +"A buffer is considered contiguous exactly if it is either *C-contiguous* or " +"*Fortran contiguous*. Zero-dimensional buffers are C and Fortran " +"contiguous. In one-dimensional arrays, the items must be laid out in memory" +" next to each other, in order of increasing indexes starting from zero. In " +"multidimensional C-contiguous arrays, the last index varies the fastest when" +" visiting items in order of memory address. However, in Fortran contiguous " +"arrays, the first index varies the fastest." +msgstr "" +"一个缓冲如果是 *C 连续* 或 *Fortran 连续* 就会被认为是连续的。零维缓冲是 C 和 Fortran " +"连续的。在一维数组中,所有条目必须在内存中彼此相邻地排列,采用从零开始的递增索引顺序。在多维 " +"C-连续数组中,当按内存地址排列时用最后一个索引访问条目时速度最快。但是在 Fortran 连续数组中则是用第一个索引最快。" + +#: ../../glossary.rst:252 +msgid "coroutine" +msgstr "coroutine -- 协程" + +#: ../../glossary.rst:254 +msgid "" +"Coroutines are a more generalized form of subroutines. Subroutines are " +"entered at one point and exited at another point. Coroutines can be " +"entered, exited, and resumed at many different points. They can be " +"implemented with the :keyword:`async def` statement. See also :pep:`492`." +msgstr "" +"协程是子例程的更一般形式。 子例程可以在某一点进入并在另一点退出。 协程则可以在许多不同的点上进入、退出和恢复。 它们可通过 " +":keyword:`async def` 语句来实现。 参见 :pep:`492`。" + +#: ../../glossary.rst:259 +msgid "coroutine function" +msgstr "coroutine function -- 协程函数" + +#: ../../glossary.rst:261 +msgid "" +"A function which returns a :term:`coroutine` object. A coroutine function " +"may be defined with the :keyword:`async def` statement, and may contain " +":keyword:`await`, :keyword:`async for`, and :keyword:`async with` keywords." +" These were introduced by :pep:`492`." +msgstr "" +"返回一个 :term:`coroutine` 对象的函数。协程函数可通过 :keyword:`async def` 语句来定义,并可能包含 " +":keyword:`await`、:keyword:`async for` 和 :keyword:`async with` 关键字。这些特性是由 " +":pep:`492` 引入的。" + +#: ../../glossary.rst:266 +msgid "CPython" +msgstr "CPython" + +#: ../../glossary.rst:268 +msgid "" +"The canonical implementation of the Python programming language, as " +"distributed on `python.org `_. The term \"CPython\"" +" is used when necessary to distinguish this implementation from others such " +"as Jython or IronPython." +msgstr "" +"Python 编程语言的规范实现,在 `python.org `_ 上发布。\"CPython\" " +"一词用于在必要时将此实现与其他实现例如 Jython 或 IronPython 相区别。" + +#: ../../glossary.rst:272 +msgid "decorator" +msgstr "decorator -- 装饰器" + +#: ../../glossary.rst:274 +msgid "" +"A function returning another function, usually applied as a function " +"transformation using the ``@wrapper`` syntax. Common examples for " +"decorators are :func:`classmethod` and :func:`staticmethod`." +msgstr "" +"返回值为另一个函数的函数,通常使用 ``@wrapper`` 语法形式来进行函数变换。 装饰器的常见例子包括 :func:`classmethod` 和" +" :func:`staticmethod`。" + +#: ../../glossary.rst:278 +msgid "" +"The decorator syntax is merely syntactic sugar, the following two function " +"definitions are semantically equivalent::" +msgstr "装饰器语法只是一种语法糖,以下两个函数定义在语义上完全等价::" + +#: ../../glossary.rst:289 +msgid "" +"The same concept exists for classes, but is less commonly used there. See " +"the documentation for :ref:`function definitions ` and :ref:`class" +" definitions ` for more about decorators." +msgstr "" +"同样的概念也适用于类,但通常较少这样使用。有关装饰器的详情可参见 :ref:`函数定义 ` 和 :ref:`类定义 `" +" 的文档。" + +#: ../../glossary.rst:292 +msgid "descriptor" +msgstr "descriptor -- 描述器" + +#: ../../glossary.rst:294 +msgid "" +"Any object which defines the methods :meth:`__get__`, :meth:`__set__`, or " +":meth:`__delete__`. When a class attribute is a descriptor, its special " +"binding behavior is triggered upon attribute lookup. Normally, using *a.b* " +"to get, set or delete an attribute looks up the object named *b* in the " +"class dictionary for *a*, but if *b* is a descriptor, the respective " +"descriptor method gets called. Understanding descriptors is a key to a deep" +" understanding of Python because they are the basis for many features " +"including functions, methods, properties, class methods, static methods, and" +" reference to super classes." +msgstr "" +"任何定义了 :meth:`__get__`, :meth:`__set__` 或 :meth:`__delete__` " +"方法的对象。当一个类属性为描述器时,它的特殊绑定行为就会在属性查找时被触发。通常情况下,使用 *a.b* 来获取、设置或删除一个属性时会在 *a* " +"的类字典中查找名称为 *b* 的对象,但如果 *b* 是一个描述器,则会调用对应的描述器方法。理解描述器的概念是更深层次理解 Python " +"的关键,因为这是许多重要特性的基础,包括函数、方法、属性、类方法、静态方法以及对超类的引用等等。" + +#: ../../glossary.rst:304 +msgid "" +"For more information about descriptors' methods, see :ref:`descriptors` or " +"the :ref:`Descriptor How To Guide `." +msgstr "" +"有关描述器的方法的更多信息,请参阅 :ref:`descriptors` 或 :ref:`描述器使用指南 `。" + +#: ../../glossary.rst:306 +msgid "dictionary" +msgstr "dictionary -- 字典" + +#: ../../glossary.rst:308 +msgid "" +"An associative array, where arbitrary keys are mapped to values. The keys " +"can be any object with :meth:`__hash__` and :meth:`__eq__` methods. Called a" +" hash in Perl." +msgstr "" +"一个关联数组,其中的任意键都映射到相应的值。键可以是任何具有 :meth:`__hash__` 和 :meth:`__eq__` 方法的对象。在 " +"Perl 语言中称为 hash。" + +#: ../../glossary.rst:311 +msgid "dictionary comprehension" +msgstr "dictionary comprehension -- 字典推导式" + +#: ../../glossary.rst:313 +msgid "" +"A compact way to process all or part of the elements in an iterable and " +"return a dictionary with the results. ``results = {n: n ** 2 for n in " +"range(10)}`` generates a dictionary containing key ``n`` mapped to value ``n" +" ** 2``. See :ref:`comprehensions`." +msgstr "" +"处理一个可迭代对象中的所有或部分元素并返回结果字典的一种紧凑写法。 ``results = {n: n ** 2 for n in " +"range(10)}`` 将生成一个由键 ``n`` 到值 ``n ** 2`` 的映射构成的字典。 参见 :ref:`comprehensions`。" + +#: ../../glossary.rst:317 +msgid "dictionary view" +msgstr "dictionary view -- 字典视图" + +#: ../../glossary.rst:319 +msgid "" +"The objects returned from :meth:`dict.keys`, :meth:`dict.values`, and " +":meth:`dict.items` are called dictionary views. They provide a dynamic view " +"on the dictionary’s entries, which means that when the dictionary changes, " +"the view reflects these changes. To force the dictionary view to become a " +"full list use ``list(dictview)``. See :ref:`dict-views`." +msgstr "" +"从 :meth:`dict.keys`, :meth:`dict.values` 和 :meth:`dict.items` " +"返回的对象被称为字典视图。它们提供了字典条目的一个动态视图,这意味着当字典改变时,视图也会相应改变。要将字典视图强制转换为真正的列表,可使用 " +"``list(dictview)``。参见 :ref:`dict-views`。" + +#: ../../glossary.rst:325 +msgid "docstring" +msgstr "docstring -- 文档字符串" + +#: ../../glossary.rst:327 +msgid "" +"A string literal which appears as the first expression in a class, function " +"or module. While ignored when the suite is executed, it is recognized by " +"the compiler and put into the :attr:`__doc__` attribute of the enclosing " +"class, function or module. Since it is available via introspection, it is " +"the canonical place for documentation of the object." +msgstr "" +"作为类、函数或模块之内的第一个表达式出现的字符串字面值。它在代码执行时会被忽略,但会被解释器识别并放入所在类、函数或模块的 " +":attr:`__doc__` 属性中。由于它可用于代码内省,因此是对象存放文档的规范位置。" + +#: ../../glossary.rst:333 +msgid "duck-typing" +msgstr "duck-typing -- 鸭子类型" + +#: ../../glossary.rst:335 +msgid "" +"A programming style which does not look at an object's type to determine if " +"it has the right interface; instead, the method or attribute is simply " +"called or used (\"If it looks like a duck and quacks like a duck, it must be" +" a duck.\") By emphasizing interfaces rather than specific types, well-" +"designed code improves its flexibility by allowing polymorphic substitution." +" Duck-typing avoids tests using :func:`type` or :func:`isinstance`. (Note," +" however, that duck-typing can be complemented with :term:`abstract base " +"classes `.) Instead, it typically employs " +":func:`hasattr` tests or :term:`EAFP` programming." +msgstr "" +"指一种编程风格,它并不依靠查找对象类型来确定其是否具有正确的接口,而是直接调用或使用其方法或属性(“看起来像鸭子,叫起来也像鸭子,那么肯定就是鸭子。”)由于强调接口而非特定类型,设计良好的代码可通过允许多态替代来提升灵活性。鸭子类型避免使用" +" :func:`type` 或 :func:`isinstance` 检测。(但要注意鸭子类型可以使用 :term:`抽象基类 ` 作为补充。) 而往往会采用 :func:`hasattr` 检测或是 :term:`EAFP` 编程。" + +#: ../../glossary.rst:344 +msgid "EAFP" +msgstr "EAFP" + +#: ../../glossary.rst:346 +msgid "" +"Easier to ask for forgiveness than permission. This common Python coding " +"style assumes the existence of valid keys or attributes and catches " +"exceptions if the assumption proves false. This clean and fast style is " +"characterized by the presence of many :keyword:`try` and :keyword:`except` " +"statements. The technique contrasts with the :term:`LBYL` style common to " +"many other languages such as C." +msgstr "" +"“求原谅比求许可更容易”的英文缩写。这种 Python " +"常用代码编写风格会假定所需的键或属性存在,并在假定错误时捕获异常。这种简洁快速风格的特点就是大量运用 :keyword:`try` 和 " +":keyword:`except` 语句。于其相对的则是所谓 :term:`LBYL` 风格,常见于 C 等许多其他语言。" + +#: ../../glossary.rst:352 +msgid "expression" +msgstr "expression -- 表达式" + +#: ../../glossary.rst:354 +msgid "" +"A piece of syntax which can be evaluated to some value. In other words, an " +"expression is an accumulation of expression elements like literals, names, " +"attribute access, operators or function calls which all return a value. In " +"contrast to many other languages, not all language constructs are " +"expressions. There are also :term:`statement`\\s which cannot be used as " +"expressions, such as :keyword:`while`. Assignments are also statements, not" +" expressions." +msgstr "" +"可以求出某个值的语法单元。 换句话说,一个表达式就是表达元素例如字面值、名称、属性访问、运算符或函数调用的汇总,它们最终都会返回一个值。 " +"与许多其他语言不同,并非所有语言构件都是表达式。 还存在不能被用作表达式的 :term:`statement`,例如 :keyword:`while`。" +" 赋值也是属于语句而非表达式。" + +#: ../../glossary.rst:361 +msgid "extension module" +msgstr "extension module -- 扩展模块" + +#: ../../glossary.rst:363 +msgid "" +"A module written in C or C++, using Python's C API to interact with the core" +" and with user code." +msgstr "以 C 或 C++ 编写的模块,使用 Python 的 C API 来与语言核心以及用户代码进行交互。" + +#: ../../glossary.rst:365 +msgid "f-string" +msgstr "f-string -- f-字符串" + +#: ../../glossary.rst:367 +msgid "" +"String literals prefixed with ``'f'`` or ``'F'`` are commonly called " +"\"f-strings\" which is short for :ref:`formatted string literals " +"`. See also :pep:`498`." +msgstr "" +"带有 ``'f'`` 或 ``'F'`` 前缀的字符串字面值通常被称为“f-字符串”即 :ref:`格式化字符串字面值 ` " +"的简写。参见 :pep:`498`。" + +#: ../../glossary.rst:370 +msgid "file object" +msgstr "file object -- 文件对象" + +#: ../../glossary.rst:372 +msgid "" +"An object exposing a file-oriented API (with methods such as :meth:`read()` " +"or :meth:`write()`) to an underlying resource. Depending on the way it was " +"created, a file object can mediate access to a real on-disk file or to " +"another type of storage or communication device (for example standard " +"input/output, in-memory buffers, sockets, pipes, etc.). File objects are " +"also called :dfn:`file-like objects` or :dfn:`streams`." +msgstr "" +"对外提供面向文件 API 以使用下层资源的对象(带有 :meth:`read()` 或 :meth:`write()` " +"这样的方法)。根据其创建方式的不同,文件对象可以处理对真实磁盘文件,对其他类型存储,或是对通讯设备的访问(例如标准输入/输出、内存缓冲区、套接字、管道等等)。文件对象也被称为" +" :dfn:`文件类对象` 或 :dfn:`流`。" + +#: ../../glossary.rst:380 +msgid "" +"There are actually three categories of file objects: raw :term:`binary files" +" `, buffered :term:`binary files ` and :term:`text" +" files `. Their interfaces are defined in the :mod:`io` module. " +"The canonical way to create a file object is by using the :func:`open` " +"function." +msgstr "" +"实际上共有三种类别的文件对象: 原始 :term:`二进制文件 `, 缓冲 :term:`二进制文件 ` 以及 :term:`文本文件 `。它们的接口定义均在 :mod:`io` 模块中。 创建文件对象的规范方式是使用 " +":func:`open` 函数。" + +#: ../../glossary.rst:385 +msgid "file-like object" +msgstr "file-like object -- 文件型对象" + +#: ../../glossary.rst:387 +msgid "A synonym for :term:`file object`." +msgstr ":term:`file object` 的同义词。" + +#: ../../glossary.rst:388 +msgid "finder" +msgstr "finder -- 查找器" + +#: ../../glossary.rst:390 +msgid "" +"An object that tries to find the :term:`loader` for a module that is being " +"imported." +msgstr "一种会尝试查找被导入模块的 :term:`loader` 的对象。" + +#: ../../glossary.rst:393 +msgid "" +"Since Python 3.3, there are two types of finder: :term:`meta path finders " +"` for use with :data:`sys.meta_path`, and :term:`path " +"entry finders ` for use with :data:`sys.path_hooks`." +msgstr "" +"从 Python 3.3 起存在两种类型的查找器: :term:`元路径查找器 ` 配合 " +":data:`sys.meta_path` 使用,以及 :term:`path entry finders ` " +"配合 :data:`sys.path_hooks` 使用。" + +#: ../../glossary.rst:397 +msgid "See :pep:`302`, :pep:`420` and :pep:`451` for much more detail." +msgstr "更多详情可参见 :pep:`302`, :pep:`420` 和 :pep:`451`。" + +#: ../../glossary.rst:398 +msgid "floor division" +msgstr "floor division -- 向下取整除法" + +#: ../../glossary.rst:400 +msgid "" +"Mathematical division that rounds down to nearest integer. The floor " +"division operator is ``//``. For example, the expression ``11 // 4`` " +"evaluates to ``2`` in contrast to the ``2.75`` returned by float true " +"division. Note that ``(-11) // 4`` is ``-3`` because that is ``-2.75`` " +"rounded *downward*. See :pep:`238`." +msgstr "" +"向下舍入到最接近的整数的数学除法。向下取整除法的运算符是 ``//`` 。例如,表达式 ``11 // 4`` 的计算结果是 ``2`` " +",而与之相反的是浮点数的真正除法返回 ``2.75`` 。注意 ``(-11) // 4`` 会返回 ``-3`` 因为这是 ``-2.75`` " +"*向下* 舍入得到的结果。见 :pep:`238` 。" + +#: ../../glossary.rst:405 +msgid "function" +msgstr "function -- 函数" + +#: ../../glossary.rst:407 +msgid "" +"A series of statements which returns some value to a caller. It can also be " +"passed zero or more :term:`arguments ` which may be used in the " +"execution of the body. See also :term:`parameter`, :term:`method`, and the " +":ref:`function` section." +msgstr "" +"可以向调用者返回某个值的一组语句。还可以向其传入零个或多个 :term:`参数 ` 并在函数体执行中被使用。另见 " +":term:`parameter`, :term:`method` 和 :ref:`function` 等节。" + +#: ../../glossary.rst:411 +msgid "function annotation" +msgstr "function annotation -- 函数标注" + +#: ../../glossary.rst:413 +msgid "An :term:`annotation` of a function parameter or return value." +msgstr "即针对函数形参或返回值的 :term:`annotation` 。" + +#: ../../glossary.rst:415 +msgid "" +"Function annotations are usually used for :term:`type hints `: " +"for example, this function is expected to take two :class:`int` arguments " +"and is also expected to have an :class:`int` return value::" +msgstr "" +"函数标注通常用于 :term:`类型提示 `:例如以下函数预期接受两个 :class:`int` 参数并预期返回一个 " +":class:`int` 值::" + +#: ../../glossary.rst:423 +msgid "Function annotation syntax is explained in section :ref:`function`." +msgstr "函数标注语法的详解见 :ref:`function` 一节。" + +#: ../../glossary.rst:425 +msgid "" +"See :term:`variable annotation` and :pep:`484`, which describe this " +"functionality." +msgstr "请参看 :term:`variable annotation` 和 :pep:`484` 对此功能的描述。" + +#: ../../glossary.rst:427 +msgid "__future__" +msgstr "__future__" + +#: ../../glossary.rst:429 +msgid "" +"A :ref:`future statement `, ``from __future__ import ``, " +"directs the compiler to compile the current module using syntax or semantics" +" that will become standard in a future release of Python. The " +":mod:`__future__` module documents the possible values of *feature*. By " +"importing this module and evaluating its variables, you can see when a new " +"feature was first added to the language and when it will (or did) become the" +" default::" +msgstr "" +":ref:`future 语句 `, ``from __future__ import `` 指示编译器使用将在未来的" +" Python 发布版中成为标准的语法和语义来编译当前模块。 :mod:`__future__` 模块文档记录了可能 的 *feature* 取值。 " +"通过导入此模块并对其变量求值,你可以看到每项新特性在何时被首次加入到该语言中以及它将(或已)在何时成为默认::" + +#: ../../glossary.rst:440 +msgid "garbage collection" +msgstr "garbage collection -- 垃圾回收" + +#: ../../glossary.rst:442 +msgid "" +"The process of freeing memory when it is not used anymore. Python performs " +"garbage collection via reference counting and a cyclic garbage collector " +"that is able to detect and break reference cycles. The garbage collector " +"can be controlled using the :mod:`gc` module." +msgstr "" +"释放不再被使用的内存空间的过程。Python 是通过引用计数和一个能够检测和打破循环引用的循环垃圾回收器来执行垃圾回收的。可以使用 :mod:`gc` " +"模块来控制垃圾回收器。" + +#: ../../glossary.rst:448 +msgid "generator" +msgstr "generator -- 生成器" + +#: ../../glossary.rst:450 +msgid "" +"A function which returns a :term:`generator iterator`. It looks like a " +"normal function except that it contains :keyword:`yield` expressions for " +"producing a series of values usable in a for-loop or that can be retrieved " +"one at a time with the :func:`next` function." +msgstr "" +"返回一个 :term:`generator iterator` 的函数。它看起来很像普通函数,不同点在于其包含 :keyword:`yield` " +"表达式以便产生一系列值供给 for-循环使用或是通过 :func:`next` 函数逐一获取。" + +#: ../../glossary.rst:455 +msgid "" +"Usually refers to a generator function, but may refer to a *generator " +"iterator* in some contexts. In cases where the intended meaning isn't " +"clear, using the full terms avoids ambiguity." +msgstr "通常是指生成器函数,但在某些情况下也可能是指 *生成器迭代器*。如果需要清楚表达具体含义,请使用全称以避免歧义。" + +#: ../../glossary.rst:458 +msgid "generator iterator" +msgstr "generator iterator -- 生成器迭代器" + +#: ../../glossary.rst:460 +msgid "An object created by a :term:`generator` function." +msgstr ":term:`generator` 函数所创建的对象。" + +#: ../../glossary.rst:462 +msgid "" +"Each :keyword:`yield` temporarily suspends processing, remembering the " +"location execution state (including local variables and pending try-" +"statements). When the *generator iterator* resumes, it picks up where it " +"left off (in contrast to functions which start fresh on every invocation)." +msgstr "" +"每个 :keyword:`yield` 会临时暂停处理,记住当前位置执行状态(包括局部变量和挂起的 try 语句)。当该 *生成器迭代器* " +"恢复时,它会从离开位置继续执行(这与每次调用都从新开始的普通函数差别很大)。" + +#: ../../glossary.rst:469 +msgid "generator expression" +msgstr "generator expression -- 生成器表达式" + +#: ../../glossary.rst:471 +msgid "" +"An expression that returns an iterator. It looks like a normal expression " +"followed by a :keyword:`!for` clause defining a loop variable, range, and an" +" optional :keyword:`!if` clause. The combined expression generates values " +"for an enclosing function::" +msgstr "" +"返回迭代器的表达式。它看起来像一个普通表达式,后面跟着一个:keyword:`!for` " +"子句,定义了一个循环变量、范围和一个可选的:keyword:`!if` 子句。以下复合表达式会为外层函数生成一系列值:::" + +#: ../../glossary.rst:478 +msgid "generic function" +msgstr "generic function -- 泛型函数" + +#: ../../glossary.rst:480 +msgid "" +"A function composed of multiple functions implementing the same operation " +"for different types. Which implementation should be used during a call is " +"determined by the dispatch algorithm." +msgstr "为不同的类型实现相同操作的多个函数所组成的函数。在调用时会由调度算法来确定应该使用哪个实现。" + +#: ../../glossary.rst:484 +msgid "" +"See also the :term:`single dispatch` glossary entry, the " +":func:`functools.singledispatch` decorator, and :pep:`443`." +msgstr "" +"另请参见 :term:`single dispatch` 术语表条目、:func:`functools.singledispatch` 装饰器以及 " +":pep:`443`。" + +#: ../../glossary.rst:486 +msgid "generic type" +msgstr "generic type -- 泛型" + +#: ../../glossary.rst:488 +msgid "" +"A :term:`type` that can be parameterized; typically a :ref:`container " +"class` such as :class:`list` or :class:`dict`. Used for " +":term:`type hints ` and :term:`annotations `." +msgstr "" +"可参数化的 :term:`type`;通常为 :class:`list` 或 :class:`dict` 这样的 :ref:`容器类 " +"`。用于 :term:`类型提示 ` 和 :term:`注解 `。" + +#: ../../glossary.rst:493 +msgid "" +"For more details, see :ref:`generic alias types`, " +":pep:`483`, :pep:`484`, :pep:`585`, and the :mod:`typing` module." +msgstr "" +"更多细节参见 :ref:`泛型别名类型 `、:pep:`483`、:pep:`484`、:pep:`585` 和" +" :mod:`typing` 模块。" + +#: ../../glossary.rst:495 +msgid "GIL" +msgstr "GIL" + +#: ../../glossary.rst:497 +msgid "See :term:`global interpreter lock`." +msgstr "参见 :term:`global interpreter lock`。" + +#: ../../glossary.rst:498 +msgid "global interpreter lock" +msgstr "global interpreter lock -- 全局解释器锁" + +#: ../../glossary.rst:500 +msgid "" +"The mechanism used by the :term:`CPython` interpreter to assure that only " +"one thread executes Python :term:`bytecode` at a time. This simplifies the " +"CPython implementation by making the object model (including critical built-" +"in types such as :class:`dict`) implicitly safe against concurrent access. " +"Locking the entire interpreter makes it easier for the interpreter to be " +"multi-threaded, at the expense of much of the parallelism afforded by multi-" +"processor machines." +msgstr "" +":term:`CPython` 解释器所采用的一种机制,它确保同一时刻只有一个线程在执行 Python " +":term:`bytecode`。此机制通过设置对象模型(包括 :class:`dict` 等重要内置类型)针对并发访问的隐式安全简化了 CPython" +" 实现。给整个解释器加锁使得解释器多线程运行更方便,其代价则是牺牲了在多处理器上的并行性。" + +#: ../../glossary.rst:509 +msgid "" +"However, some extension modules, either standard or third-party, are " +"designed so as to release the GIL when doing computationally-intensive tasks" +" such as compression or hashing. Also, the GIL is always released when " +"doing I/O." +msgstr "" +"不过,某些标准库或第三方库的扩展模块被设计为在执行计算密集型任务如压缩或哈希时释放 GIL。此外,在执行 I/O 操作时也总是会释放 GIL。" + +#: ../../glossary.rst:514 +msgid "" +"Past efforts to create a \"free-threaded\" interpreter (one which locks " +"shared data at a much finer granularity) have not been successful because " +"performance suffered in the common single-processor case. It is believed " +"that overcoming this performance issue would make the implementation much " +"more complicated and therefore costlier to maintain." +msgstr "" +"以往的创建实现 “线程自由” " +"的解释器(能以更细的粒度锁定共享数据)的努力并不成功,因为在常见的单处理器中性能会受到影响。我们认为,克服性能问题会使实现过程变得更加复杂,从而增加维护成本。" + +#: ../../glossary.rst:520 +msgid "hash-based pyc" +msgstr "hash-based pyc -- 基于哈希的 pyc" + +#: ../../glossary.rst:522 +msgid "" +"A bytecode cache file that uses the hash rather than the last-modified time " +"of the corresponding source file to determine its validity. See :ref:`pyc-" +"invalidation`." +msgstr "使用对应源文件的哈希值而非最后修改时间来确定其有效性的字节码缓存文件。 参见 :ref:`pyc-invalidation`。" + +#: ../../glossary.rst:525 +msgid "hashable" +msgstr "hashable -- 可哈希" + +#: ../../glossary.rst:527 +msgid "" +"An object is *hashable* if it has a hash value which never changes during " +"its lifetime (it needs a :meth:`__hash__` method), and can be compared to " +"other objects (it needs an :meth:`__eq__` method). Hashable objects which " +"compare equal must have the same hash value." +msgstr "" +"一个对象的哈希值如果在其生命周期内绝不改变,就被称为 *可哈希* (它需要具有 :meth:`__hash__` " +"方法),并可以同其他对象进行比较(它需要具有 :meth:`__eq__` 方法)。可哈希对象必须具有相同的哈希值比较结果才会相同。" + +#: ../../glossary.rst:532 +msgid "" +"Hashability makes an object usable as a dictionary key and a set member, " +"because these data structures use the hash value internally." +msgstr "可哈希性使得对象能够作为字典键或集合成员使用,因为这些数据结构要在内部使用哈希值。" + +#: ../../glossary.rst:535 +msgid "" +"Most of Python's immutable built-in objects are hashable; mutable containers" +" (such as lists or dictionaries) are not; immutable containers (such as " +"tuples and frozensets) are only hashable if their elements are hashable. " +"Objects which are instances of user-defined classes are hashable by default." +" They all compare unequal (except with themselves), and their hash value is" +" derived from their :func:`id`." +msgstr "" +"大多数 Python 中的不可变内置对象都是可哈希的;可变容器(例如列表或字典)都不可哈希;不可变容器(例如元组和 " +"frozenset)仅当它们的元素均为可哈希时才是可哈希的。 用户定义类的实例对象默认是可哈希的。 " +"它们在比较时一定不相同(除非是与自己比较),它们的哈希值的生成是基于它们的 :func:`id`。" + +#: ../../glossary.rst:542 +msgid "IDLE" +msgstr "IDLE" + +#: ../../glossary.rst:544 +msgid "" +"An Integrated Development Environment for Python. IDLE is a basic editor " +"and interpreter environment which ships with the standard distribution of " +"Python." +msgstr "Python 的 IDE,“集成开发与学习环境”的英文缩写。是 Python 标准发行版附带的基本编辑器和解释器环境。" + +#: ../../glossary.rst:547 +msgid "immutable" +msgstr "immutable -- 不可变对象" + +#: ../../glossary.rst:549 +msgid "" +"An object with a fixed value. Immutable objects include numbers, strings " +"and tuples. Such an object cannot be altered. A new object has to be " +"created if a different value has to be stored. They play an important role " +"in places where a constant hash value is needed, for example as a key in a " +"dictionary." +msgstr "" +"具有固定值的对象。不可变对象包括数字、字符串和元组。这样的对象不能被改变。如果必须存储一个不同的值,则必须创建新的对象。它们在需要常量哈希值的地方起着重要作用,例如作为字典中的键。" + +#: ../../glossary.rst:554 +msgid "import path" +msgstr "import path -- 导入路径" + +#: ../../glossary.rst:556 +msgid "" +"A list of locations (or :term:`path entries `) that are searched" +" by the :term:`path based finder` for modules to import. During import, this" +" list of locations usually comes from :data:`sys.path`, but for subpackages " +"it may also come from the parent package's ``__path__`` attribute." +msgstr "" +"由多个位置(或 :term:`路径条目 `)组成的列表,会被模块的 :term:`path based finder` " +"用来查找导入目标。在导入时,此位置列表通常来自 :data:`sys.path`,但对次级包来说也可能来自上级包的 ``__path__`` 属性。" + +#: ../../glossary.rst:561 +msgid "importing" +msgstr "importing -- 导入" + +#: ../../glossary.rst:563 +msgid "" +"The process by which Python code in one module is made available to Python " +"code in another module." +msgstr "令一个模块中的 Python 代码能为另一个模块中的 Python 代码所使用的过程。" + +#: ../../glossary.rst:565 +msgid "importer" +msgstr "importer -- 导入器" + +#: ../../glossary.rst:567 +msgid "" +"An object that both finds and loads a module; both a :term:`finder` and " +":term:`loader` object." +msgstr "查找并加载模块的对象;此对象既属于 :term:`finder` 又属于 :term:`loader`。" + +#: ../../glossary.rst:569 +msgid "interactive" +msgstr "interactive -- 交互" + +#: ../../glossary.rst:571 +msgid "" +"Python has an interactive interpreter which means you can enter statements " +"and expressions at the interpreter prompt, immediately execute them and see " +"their results. Just launch ``python`` with no arguments (possibly by " +"selecting it from your computer's main menu). It is a very powerful way to " +"test out new ideas or inspect modules and packages (remember ``help(x)``)." +msgstr "" +"Python 有一个交互式解释器,这意味着你可以在解释器的提示符下输入语句和表达式,然后立即执行并查看结果。 只需在没有参数的情况下启动 " +"``python`` (如果有的话,还可以从计算机的主菜单中直接选择它来启动) 。这是测试新想法或检查模块和软件包的一种非常有效的方式 " +"(别忘了试试``help(x)``) 。" + +#: ../../glossary.rst:577 +msgid "interpreted" +msgstr "interpreted -- 解释型" + +#: ../../glossary.rst:579 +msgid "" +"Python is an interpreted language, as opposed to a compiled one, though the " +"distinction can be blurry because of the presence of the bytecode compiler." +" This means that source files can be run directly without explicitly " +"creating an executable which is then run. Interpreted languages typically " +"have a shorter development/debug cycle than compiled ones, though their " +"programs generally also run more slowly. See also :term:`interactive`." +msgstr "" +"Python " +"一是种解释型语言,与之相对的是编译型语言,虽然两者的区别由于字节码编译器的存在而会有所模糊。这意味着源文件可以直接运行而不必显式地创建可执行文件再运行。解释型语言通常具有比编译型语言更短的开发/调试周期,但是其程序往往运行得更慢。参见" +" :term:`interactive`。" + +#: ../../glossary.rst:586 +msgid "interpreter shutdown" +msgstr "interpreter shutdown -- 解释器关闭" + +#: ../../glossary.rst:588 +msgid "" +"When asked to shut down, the Python interpreter enters a special phase where" +" it gradually releases all allocated resources, such as modules and various " +"critical internal structures. It also makes several calls to the " +":term:`garbage collector `. This can trigger the " +"execution of code in user-defined destructors or weakref callbacks. Code " +"executed during the shutdown phase can encounter various exceptions as the " +"resources it relies on may not function anymore (common examples are library" +" modules or the warnings machinery)." +msgstr "" +"当被要求关闭时,Python 解释器将进入一个特殊运行阶段并逐步释放所有已分配资源,例如模块和各种关键内部结构等。它还会多次调用 " +":term:`垃圾回收器 `。这会触发用户定义析构器或弱引用回调中的代码执行。在关闭阶段执行的代码可能会遇到各种异常,因为其所依赖的资源已不再有效(常见的例子有库模块或警告机制等)。" + +#: ../../glossary.rst:597 +msgid "" +"The main reason for interpreter shutdown is that the ``__main__`` module or " +"the script being run has finished executing." +msgstr "解释器需要关闭的主要原因有 ``__main__`` 模块或所运行的脚本已完成执行。" + +#: ../../glossary.rst:599 +msgid "iterable" +msgstr "iterable -- 可迭代对象" + +#: ../../glossary.rst:601 +msgid "" +"An object capable of returning its members one at a time. Examples of " +"iterables include all sequence types (such as :class:`list`, :class:`str`, " +"and :class:`tuple`) and some non-sequence types like :class:`dict`, " +":term:`file objects `, and objects of any classes you define " +"with an :meth:`__iter__` method or with a :meth:`__getitem__` method that " +"implements :term:`Sequence ` semantics." +msgstr "" +"能够逐一返回其成员项的对象。 可迭代对象的例子包括所有序列类型 (例如 :class:`list`, :class:`str` 和 " +":class:`tuple`) 以及某些非序列类型例如 :class:`dict`, :term:`文件对象 ` 以及定义了 " +":meth:`__iter__` 方法或是实现了 :term:`序列 ` 语义的 :meth:`__getitem__` " +"方法的任意自定义类对象。" + +#: ../../glossary.rst:608 +msgid "" +"Iterables can be used in a :keyword:`for` loop and in many other places " +"where a sequence is needed (:func:`zip`, :func:`map`, ...). When an " +"iterable object is passed as an argument to the built-in function " +":func:`iter`, it returns an iterator for the object. This iterator is good " +"for one pass over the set of values. When using iterables, it is usually " +"not necessary to call :func:`iter` or deal with iterator objects yourself. " +"The ``for`` statement does that automatically for you, creating a temporary " +"unnamed variable to hold the iterator for the duration of the loop. See " +"also :term:`iterator`, :term:`sequence`, and :term:`generator`." +msgstr "" +"可迭代对象被可用于 :keyword:`for` 循环以及许多其他需要一个序列的地方(:func:`zip`、:func:`map` " +"...)。当一个可迭代对象作为参数传给内置函数 :func:`iter` " +"时,它会返回该对象的迭代器。这种迭代器适用于对值集合的一次性遍历。在使用可迭代对象时,你通常不需要调用 :func:`iter` " +"或者自己处理迭代器对象。``for`` 语句会为你自动处理那些操作,创建一个临时的未命名变量用来在循环期间保存迭代器。参见 " +":term:`iterator`、:term:`sequence` 以及 :term:`generator`。" + +#: ../../glossary.rst:618 +msgid "iterator" +msgstr "iterator -- 迭代器" + +#: ../../glossary.rst:620 +msgid "" +"An object representing a stream of data. Repeated calls to the iterator's " +":meth:`~iterator.__next__` method (or passing it to the built-in function " +":func:`next`) return successive items in the stream. When no more data are " +"available a :exc:`StopIteration` exception is raised instead. At this " +"point, the iterator object is exhausted and any further calls to its " +":meth:`__next__` method just raise :exc:`StopIteration` again. Iterators " +"are required to have an :meth:`__iter__` method that returns the iterator " +"object itself so every iterator is also iterable and may be used in most " +"places where other iterables are accepted. One notable exception is code " +"which attempts multiple iteration passes. A container object (such as a " +":class:`list`) produces a fresh new iterator each time you pass it to the " +":func:`iter` function or use it in a :keyword:`for` loop. Attempting this " +"with an iterator will just return the same exhausted iterator object used in" +" the previous iteration pass, making it appear like an empty container." +msgstr "" +"用来表示一连串数据流的对象。重复调用迭代器的 :meth:`~iterator.__next__` 方法(或将其传给内置函数 " +":func:`next`)将逐个返回流中的项。当没有数据可用时则将引发 :exc:`StopIteration` " +"异常。到这时迭代器对象中的数据项已耗尽,继续调用其 :meth:`__next__` 方法只会再次引发 :exc:`StopIteration` " +"异常。迭代器必须具有 :meth:`__iter__` " +"方法用来返回该迭代器对象自身,因此迭代器必定也是可迭代对象,可被用于其他可迭代对象适用的大部分场合。一个显著的例外是那些会多次重复访问迭代项的代码。容器对象(例如" +" :class:`list`)在你每次向其传入 :func:`iter` 函数或是在 :keyword:`for` " +"循环中使用它时都会产生一个新的迭代器。如果在此情况下你尝试用迭代器则会返回在之前迭代过程中被耗尽的同一迭代器对象,使其看起来就像是一个空容器。" + +#: ../../glossary.rst:635 +msgid "More information can be found in :ref:`typeiter`." +msgstr "更多信息可查看 :ref:`typeiter`。" + +#: ../../glossary.rst:636 +msgid "key function" +msgstr "key function -- 键函数" + +#: ../../glossary.rst:638 +msgid "" +"A key function or collation function is a callable that returns a value used" +" for sorting or ordering. For example, :func:`locale.strxfrm` is used to " +"produce a sort key that is aware of locale specific sort conventions." +msgstr "" +"键函数或称整理函数,是能够返回用于排序或排位的值的可调用对象。例如,:func:`locale.strxfrm` " +"可用于生成一个符合特定区域排序约定的排序键。" + +#: ../../glossary.rst:643 +msgid "" +"A number of tools in Python accept key functions to control how elements are" +" ordered or grouped. They include :func:`min`, :func:`max`, :func:`sorted`," +" :meth:`list.sort`, :func:`heapq.merge`, :func:`heapq.nsmallest`, " +":func:`heapq.nlargest`, and :func:`itertools.groupby`." +msgstr "" +"Python 中有许多工具都允许用键函数来控制元素的排位或分组方式。其中包括 :func:`min`, :func:`max`, " +":func:`sorted`, :meth:`list.sort`, :func:`heapq.merge`, " +":func:`heapq.nsmallest`, :func:`heapq.nlargest` 以及 " +":func:`itertools.groupby`。" + +#: ../../glossary.rst:649 +msgid "" +"There are several ways to create a key function. For example. the " +":meth:`str.lower` method can serve as a key function for case insensitive " +"sorts. Alternatively, a key function can be built from a :keyword:`lambda` " +"expression such as ``lambda r: (r[0], r[2])``. Also, the :mod:`operator` " +"module provides three key function constructors: " +":func:`~operator.attrgetter`, :func:`~operator.itemgetter`, and " +":func:`~operator.methodcaller`. See the :ref:`Sorting HOW TO " +"` for examples of how to create and use key functions." +msgstr "" +"要创建一个键函数有多种方式。例如,:meth:`str.lower` 方法可以用作忽略大小写排序的键函数。另外,键函数也可通过 " +":keyword:`lambda` 表达式来创建,例如 ``lambda r: (r[0], r[2])``。还有 :mod:`operator` " +"模块提供了三个键函数构造器::func:`~operator.attrgetter`、:func:`~operator.itemgetter` 和 " +":func:`~operator.methodcaller`。请查看 :ref:`如何排序 ` " +"一节以获取创建和使用键函数的示例。" + +#: ../../glossary.rst:657 +msgid "keyword argument" +msgstr "keyword argument -- 关键字参数" + +#: ../../glossary.rst:659 ../../glossary.rst:936 +msgid "See :term:`argument`." +msgstr "参见 :term:`argument`。" + +#: ../../glossary.rst:660 +msgid "lambda" +msgstr "lambda" + +#: ../../glossary.rst:662 +msgid "" +"An anonymous inline function consisting of a single :term:`expression` which" +" is evaluated when the function is called. The syntax to create a lambda " +"function is ``lambda [parameters]: expression``" +msgstr "" +"由一个单独 :term:`expression` 构成的匿名内联函数,表达式会在调用时被求值。创建 lambda 函数的句法为 ``lambda " +"[parameters]: expression``" + +#: ../../glossary.rst:665 +msgid "LBYL" +msgstr "LBYL" + +#: ../../glossary.rst:667 +msgid "" +"Look before you leap. This coding style explicitly tests for pre-conditions" +" before making calls or lookups. This style contrasts with the :term:`EAFP`" +" approach and is characterized by the presence of many :keyword:`if` " +"statements." +msgstr "" +"“先查看后跳跃”的英文缩写。这种代码编写风格会在进行调用或查找之前显式地检查前提条件。此风格与 :term:`EAFP` 方式恰成对比,其特点是大量使用" +" :keyword:`if` 语句。" + +#: ../../glossary.rst:672 +msgid "" +"In a multi-threaded environment, the LBYL approach can risk introducing a " +"race condition between \"the looking\" and \"the leaping\". For example, " +"the code, ``if key in mapping: return mapping[key]`` can fail if another " +"thread removes *key* from *mapping* after the test, but before the lookup. " +"This issue can be solved with locks or by using the EAFP approach." +msgstr "" +"在多线程环境中,LBYL 方式会导致“查看”和“跳跃”之间发生条件竞争风险。例如,以下代码 ``if key in mapping: return " +"mapping[key]`` 可能由于在检查操作之后其他线程从 *mapping* 中移除了 *key* 而出错。这种问题可通过加锁或使用 EAFP " +"方式来解决。" + +#: ../../glossary.rst:677 +msgid "list" +msgstr "list" + +#: ../../glossary.rst:679 +msgid "" +"A built-in Python :term:`sequence`. Despite its name it is more akin to an " +"array in other languages than to a linked list since access to elements is " +"O(1)." +msgstr "" +"Python 内置的一种 :term:`sequence`。虽然名为列表,但更类似于其他语言中的数组而非链接列表,因为访问元素的时间复杂度为 O(1)。" + +#: ../../glossary.rst:682 +msgid "list comprehension" +msgstr "list comprehension -- 列表推导式" + +#: ../../glossary.rst:684 +msgid "" +"A compact way to process all or part of the elements in a sequence and " +"return a list with the results. ``result = ['{:#04x}'.format(x) for x in " +"range(256) if x % 2 == 0]`` generates a list of strings containing even hex " +"numbers (0x..) in the range from 0 to 255. The :keyword:`if` clause is " +"optional. If omitted, all elements in ``range(256)`` are processed." +msgstr "" +"处理一个序列中的所有或部分元素并返回结果列表的一种紧凑写法。``result = ['{:#04x}'.format(x) for x in " +"range(256) if x % 2 == 0]`` 将生成一个 0 到 255 范围内的十六进制偶数对应字符串(0x..)的列表。其中 " +":keyword:`if` 子句是可选的,如果省略则 ``range(256)`` 中的所有元素都会被处理。" + +#: ../../glossary.rst:690 +msgid "loader" +msgstr "loader -- 加载器" + +#: ../../glossary.rst:692 +msgid "" +"An object that loads a module. It must define a method named " +":meth:`load_module`. A loader is typically returned by a :term:`finder`. See" +" :pep:`302` for details and :class:`importlib.abc.Loader` for an " +":term:`abstract base class`." +msgstr "" +"负责加载模块的对象。它必须定义名为 :meth:`load_module` 的方法。加载器通常由一个 :term:`finder` 返回。详情参见 " +":pep:`302`,对于 :term:`abstract base class` 可参见 :class:`importlib.abc.Loader`。" + +#: ../../glossary.rst:696 +msgid "magic method" +msgstr "magic method -- 魔术方法" + +#: ../../glossary.rst:700 +msgid "An informal synonym for :term:`special method`." +msgstr ":term:`special method` 的非正式同义词 。" + +#: ../../glossary.rst:701 +msgid "mapping" +msgstr "mapping -- 映射" + +#: ../../glossary.rst:703 +msgid "" +"A container object that supports arbitrary key lookups and implements the " +"methods specified in the :class:`~collections.abc.Mapping` or " +":class:`~collections.abc.MutableMapping` :ref:`abstract base classes " +"`. Examples include :class:`dict`, " +":class:`collections.defaultdict`, :class:`collections.OrderedDict` and " +":class:`collections.Counter`." +msgstr "" +"一种支持任意键查找并实现了 :class:`~collections.abc.Mapping` 或 " +":class:`~collections.abc.MutableMapping` :ref:`抽象基类 ` 中所规定方法的容器对象。 此类对象的例子包括 :class:`dict`, " +":class:`collections.defaultdict`, :class:`collections.OrderedDict` 以及 " +":class:`collections.Counter`。" + +#: ../../glossary.rst:709 +msgid "meta path finder" +msgstr "meta path finder -- 元路径查找器" + +#: ../../glossary.rst:711 +msgid "" +"A :term:`finder` returned by a search of :data:`sys.meta_path`. Meta path " +"finders are related to, but different from :term:`path entry finders `." +msgstr "" +":data:`sys.meta_path` 的搜索所返回的 :term:`finder`。元路径查找器与 :term:`path entry " +"finders ` 存在关联但并不相同。" + +#: ../../glossary.rst:715 +msgid "" +"See :class:`importlib.abc.MetaPathFinder` for the methods that meta path " +"finders implement." +msgstr "请查看 :class:`importlib.abc.MetaPathFinder` 了解元路径查找器所实现的方法。" + +#: ../../glossary.rst:717 +msgid "metaclass" +msgstr "metaclass -- 元类" + +#: ../../glossary.rst:719 +msgid "" +"The class of a class. Class definitions create a class name, a class " +"dictionary, and a list of base classes. The metaclass is responsible for " +"taking those three arguments and creating the class. Most object oriented " +"programming languages provide a default implementation. What makes Python " +"special is that it is possible to create custom metaclasses. Most users " +"never need this tool, but when the need arises, metaclasses can provide " +"powerful, elegant solutions. They have been used for logging attribute " +"access, adding thread-safety, tracking object creation, implementing " +"singletons, and many other tasks." +msgstr "" +"一种用于创建类的类。类定义包含类名、类字典和基类列表。元类负责接受上述三个参数并创建相应的类。大部分面向对象的编程语言都会提供一个默认实现。Python" +" " +"的特别之处在于可以创建自定义元类。大部分用户永远不需要这个工具,但当需要出现时,元类可提供强大而优雅的解决方案。它们已被用于记录属性访问日志、添加线程安全性、跟踪对象创建、实现单例,以及其他许多任务。" + +#: ../../glossary.rst:729 +msgid "More information can be found in :ref:`metaclasses`." +msgstr "更多详情参见 :ref:`metaclasses`。" + +#: ../../glossary.rst:730 +msgid "method" +msgstr "method -- 方法" + +#: ../../glossary.rst:732 +msgid "" +"A function which is defined inside a class body. If called as an attribute " +"of an instance of that class, the method will get the instance object as its" +" first :term:`argument` (which is usually called ``self``). See " +":term:`function` and :term:`nested scope`." +msgstr "" +"在类内部定义的函数。如果作为该类的实例的一个属性来调用,方法将会获取实例对象作为其第一个 :term:`argument` (通常命名为 " +"``self``)。参见 :term:`function` 和 :term:`nested scope`。" + +#: ../../glossary.rst:736 +msgid "method resolution order" +msgstr "method resolution order -- 方法解析顺序" + +#: ../../glossary.rst:738 +msgid "" +"Method Resolution Order is the order in which base classes are searched for " +"a member during lookup. See `The Python 2.3 Method Resolution Order " +"`_ for details of the " +"algorithm used by the Python interpreter since the 2.3 release." +msgstr "" +"方法解析顺序就是在查找成员时搜索全部基类所用的先后顺序。请查看 `Python 2.3 方法解析顺序 " +"`_ 了解自 2.3 版起 Python " +"解析器所用相关算法的详情。" + +#: ../../glossary.rst:742 +msgid "module" +msgstr "module" + +#: ../../glossary.rst:744 +msgid "" +"An object that serves as an organizational unit of Python code. Modules " +"have a namespace containing arbitrary Python objects. Modules are loaded " +"into Python by the process of :term:`importing`." +msgstr "" +"此对象是 Python 代码的一种组织单位。各模块具有独立的命名空间,可包含任意 Python 对象。模块可通过 :term:`importing` " +"操作被加载到 Python 中。" + +#: ../../glossary.rst:748 +msgid "See also :term:`package`." +msgstr "另见 :term:`package`。" + +#: ../../glossary.rst:749 +msgid "module spec" +msgstr "module spec -- 模块规格" + +#: ../../glossary.rst:751 +msgid "" +"A namespace containing the import-related information used to load a module." +" An instance of :class:`importlib.machinery.ModuleSpec`." +msgstr "" +"一个命名空间,其中包含用于加载模块的相关导入信息。是 :class:`importlib.machinery.ModuleSpec` 的实例。" + +#: ../../glossary.rst:753 +msgid "MRO" +msgstr "MRO" + +#: ../../glossary.rst:755 +msgid "See :term:`method resolution order`." +msgstr "参见 :term:`method resolution order`。" + +#: ../../glossary.rst:756 +msgid "mutable" +msgstr "mutable -- 可变对象" + +#: ../../glossary.rst:758 +msgid "" +"Mutable objects can change their value but keep their :func:`id`. See also " +":term:`immutable`." +msgstr "可变对象可以在其 :func:`id` 保持固定的情况下改变其取值。另请参见 :term:`immutable`。" + +#: ../../glossary.rst:760 +msgid "named tuple" +msgstr "named tuple -- 具名元组" + +#: ../../glossary.rst:762 +msgid "" +"The term \"named tuple\" applies to any type or class that inherits from " +"tuple and whose indexable elements are also accessible using named " +"attributes. The type or class may have other features as well." +msgstr "术语“具名元组”可用于任何继承自元组,并且其中的可索引元素还能使用名称属性来访问的类型或类。 这样的类型或类还可能拥有其他特性。" + +#: ../../glossary.rst:766 +msgid "" +"Several built-in types are named tuples, including the values returned by " +":func:`time.localtime` and :func:`os.stat`. Another example is " +":data:`sys.float_info`::" +msgstr "" +"有些内置类型属于具名元组,包括 :func:`time.localtime` 和 :func:`os.stat` 的返回值。 另一个例子是 " +":data:`sys.float_info`::" + +#: ../../glossary.rst:777 +msgid "" +"Some named tuples are built-in types (such as the above examples). " +"Alternatively, a named tuple can be created from a regular class definition " +"that inherits from :class:`tuple` and that defines named fields. Such a " +"class can be written by hand or it can be created with the factory function " +":func:`collections.namedtuple`. The latter technique also adds some extra " +"methods that may not be found in hand-written or built-in named tuples." +msgstr "" +"有些具名元组是内置类型(例如上面的例子)。 此外,具名元组还可通过常规类定义从 :class:`tuple` 继承并定义名称字段的方式来创建。 " +"这样的类可以手工编写,或者使用工厂函数 :func:`collections.namedtuple` 创建。 " +"后一种方式还会添加一些手工编写或内置具名元组所没有的额外方法。" + +#: ../../glossary.rst:784 +msgid "namespace" +msgstr "namespace -- 命名空间" + +#: ../../glossary.rst:786 +msgid "" +"The place where a variable is stored. Namespaces are implemented as " +"dictionaries. There are the local, global and built-in namespaces as well " +"as nested namespaces in objects (in methods). Namespaces support modularity" +" by preventing naming conflicts. For instance, the functions " +":func:`builtins.open <.open>` and :func:`os.open` are distinguished by their" +" namespaces. Namespaces also aid readability and maintainability by making " +"it clear which module implements a function. For instance, writing " +":func:`random.seed` or :func:`itertools.islice` makes it clear that those " +"functions are implemented by the :mod:`random` and :mod:`itertools` modules," +" respectively." +msgstr "" +"命名空间是存放变量的场所。命名空间有局部、全局和内置的,还有对象中的嵌套命名空间(在方法之内)。命名空间通过防止命名冲突来支持模块化。例如,函数 " +":func:`builtins.open <.open>` 与 :func:`os.open` " +"可通过各自的命名空间来区分。命名空间还通过明确哪个模块实现那个函数来帮助提高可读性和可维护性。例如,:func:`random.seed` 或 " +":func:`itertools.islice` 这种写法明确了这些函数是由 :mod:`random` 与 :mod:`itertools` " +"模块分别实现的。" + +#: ../../glossary.rst:796 +msgid "namespace package" +msgstr "namespace package -- 命名空间包" + +#: ../../glossary.rst:798 +msgid "" +"A :pep:`420` :term:`package` which serves only as a container for " +"subpackages. Namespace packages may have no physical representation, and " +"specifically are not like a :term:`regular package` because they have no " +"``__init__.py`` file." +msgstr "" +":pep:`420` 所引入的一种仅被用作子包的容器的 :term:`package`,命名空间包可以没有实体表示物,其描述方式与 " +":term:`regular package` 不同,因为它们没有 ``__init__.py`` 文件。" + +#: ../../glossary.rst:803 +msgid "See also :term:`module`." +msgstr "另可参见 :term:`module`。" + +#: ../../glossary.rst:804 +msgid "nested scope" +msgstr "nested scope -- 嵌套作用域" + +#: ../../glossary.rst:806 +msgid "" +"The ability to refer to a variable in an enclosing definition. For " +"instance, a function defined inside another function can refer to variables " +"in the outer function. Note that nested scopes by default work only for " +"reference and not for assignment. Local variables both read and write in " +"the innermost scope. Likewise, global variables read and write to the " +"global namespace. The :keyword:`nonlocal` allows writing to outer scopes." +msgstr "" +"在一个定义范围内引用变量的能力。例如,在另一函数之内定义的函数可以引用前者的变量。请注意嵌套作用域默认只对引用有效而对赋值无效。局部变量的读写都受限于最内层作用域。类似的,全局变量的读写则作用于全局命名空间。通过" +" :keyword:`nonlocal` 关键字可允许写入外层作用域。" + +#: ../../glossary.rst:813 +msgid "new-style class" +msgstr "new-style class -- 新式类" + +#: ../../glossary.rst:815 +msgid "" +"Old name for the flavor of classes now used for all class objects. In " +"earlier Python versions, only new-style classes could use Python's newer, " +"versatile features like :attr:`~object.__slots__`, descriptors, properties, " +":meth:`__getattribute__`, class methods, and static methods." +msgstr "" +"对于目前已被应于所有类对象的类形式的旧称谓。在早先的 Python 版本中,只有新式类能够使用 Python 新增的更灵活特性,例如 " +":attr:`~object.__slots__`、描述符、特征属性、:meth:`__getattribute__`、类方法和静态方法等。" + +#: ../../glossary.rst:819 +msgid "object" +msgstr "object -- 对象" + +#: ../../glossary.rst:821 +msgid "" +"Any data with state (attributes or value) and defined behavior (methods). " +"Also the ultimate base class of any :term:`new-style class`." +msgstr "" +"任何具有状态(属性或值)以及预定义行为(方法)的数据。object 也是任何 :term:`new-style class` 的最顶层基类名。" + +#: ../../glossary.rst:824 +msgid "package" +msgstr "包" + +#: ../../glossary.rst:826 +msgid "" +"A Python :term:`module` which can contain submodules or recursively, " +"subpackages. Technically, a package is a Python module with an ``__path__``" +" attribute." +msgstr "" +"一种可包含子模块或递归地包含子包的 Python :term:`module`。从技术上说,包是带有 ``__path__`` 属性的 Python " +"模块。" + +#: ../../glossary.rst:830 +msgid "See also :term:`regular package` and :term:`namespace package`." +msgstr "另参见 :term:`regular package` 和 :term:`namespace package`。" + +#: ../../glossary.rst:831 +msgid "parameter" +msgstr "parameter -- 形参" + +#: ../../glossary.rst:833 +msgid "" +"A named entity in a :term:`function` (or method) definition that specifies " +"an :term:`argument` (or in some cases, arguments) that the function can " +"accept. There are five kinds of parameter:" +msgstr "" +":term:`function` (或方法)定义中的命名实体,它指定函数可以接受的一个 :term:`argument` " +"(或在某些情况下,多个实参)。有五种形参:" + +#: ../../glossary.rst:837 +msgid "" +":dfn:`positional-or-keyword`: specifies an argument that can be passed " +"either :term:`positionally ` or as a :term:`keyword argument " +"`. This is the default kind of parameter, for example *foo* and " +"*bar* in the following::" +msgstr "" +":dfn:`positional-or-keyword`:位置或关键字,指定一个可以作为 :term:`位置参数 ` 传入也可以作为" +" :term:`关键字参数 ` 传入的实参。这是默认的形参类型,例如下面的 *foo* 和 *bar*::" + +#: ../../glossary.rst:846 +msgid "" +":dfn:`positional-only`: specifies an argument that can be supplied only by " +"position. Positional-only parameters can be defined by including a ``/`` " +"character in the parameter list of the function definition after them, for " +"example *posonly1* and *posonly2* in the following::" +msgstr "" +":dfn:`positional-only`:仅限位置,指定一个只能通过位置传入的参数。 仅限位置形参可通过在函数定义的形参列表中它们之后包含一个 " +"``/`` 字符来定义,例如下面的 *posonly1* 和 *posonly2*::" + +#: ../../glossary.rst:855 +msgid "" +":dfn:`keyword-only`: specifies an argument that can be supplied only by " +"keyword. Keyword-only parameters can be defined by including a single var-" +"positional parameter or bare ``*`` in the parameter list of the function " +"definition before them, for example *kw_only1* and *kw_only2* in the " +"following::" +msgstr "" +":dfn:`keyword-" +"only`:仅限关键字,指定一个只能通过关键字传入的参数。仅限关键字形参可通过在函数定义的形参列表中包含单个可变位置形参或者在多个可变位置形参之前放一个" +" ``*`` 来定义,例如下面的 *kw_only1* 和 *kw_only2*::" + +#: ../../glossary.rst:863 +msgid "" +":dfn:`var-positional`: specifies that an arbitrary sequence of positional " +"arguments can be provided (in addition to any positional arguments already " +"accepted by other parameters). Such a parameter can be defined by " +"prepending the parameter name with ``*``, for example *args* in the " +"following::" +msgstr "" +":dfn:`var-" +"positional`:可变位置,指定可以提供由一个任意数量的位置参数构成的序列(附加在其他形参已接受的位置参数之后)。这种形参可通过在形参名称前加缀 " +"``*`` 来定义,例如下面的 *args*::" + +#: ../../glossary.rst:871 +msgid "" +":dfn:`var-keyword`: specifies that arbitrarily many keyword arguments can be" +" provided (in addition to any keyword arguments already accepted by other " +"parameters). Such a parameter can be defined by prepending the parameter " +"name with ``**``, for example *kwargs* in the example above." +msgstr "" +":dfn:`var-" +"keyword`:可变关键字,指定可以提供任意数量的关键字参数(附加在其他形参已接受的关键字参数之后)。这种形参可通过在形参名称前加缀 ``**`` " +"来定义,例如上面的 *kwargs*。" + +#: ../../glossary.rst:877 +msgid "" +"Parameters can specify both optional and required arguments, as well as " +"default values for some optional arguments." +msgstr "形参可以同时指定可选和必选参数,也可以为某些可选参数指定默认值。" + +#: ../../glossary.rst:880 +msgid "" +"See also the :term:`argument` glossary entry, the FAQ question on :ref:`the " +"difference between arguments and parameters `, " +"the :class:`inspect.Parameter` class, the :ref:`function` section, and " +":pep:`362`." +msgstr "" +"另参见 :term:`argument` 术语表条目、:ref:`参数与形参的区别 ` " +"中的常见问题、:class:`inspect.Parameter` 类、:ref:`function` 一节以及 :pep:`362`。" + +#: ../../glossary.rst:884 +msgid "path entry" +msgstr "path entry -- 路径入口" + +#: ../../glossary.rst:886 +msgid "" +"A single location on the :term:`import path` which the :term:`path based " +"finder` consults to find modules for importing." +msgstr ":term:`import path` 中的一个单独位置,会被 :term:`path based finder` 用来查找要导入的模块。" + +#: ../../glossary.rst:888 +msgid "path entry finder" +msgstr "path entry finder -- 路径入口查找器" + +#: ../../glossary.rst:890 +msgid "" +"A :term:`finder` returned by a callable on :data:`sys.path_hooks` (i.e. a " +":term:`path entry hook`) which knows how to locate modules given a " +":term:`path entry`." +msgstr "" +"任一可调用对象使用 :data:`sys.path_hooks` (即 :term:`path entry hook`) 返回的 " +":term:`finder`,此种对象能通过 :term:`path entry` 来定位模块。" + +#: ../../glossary.rst:894 +msgid "" +"See :class:`importlib.abc.PathEntryFinder` for the methods that path entry " +"finders implement." +msgstr "请参看 :class:`importlib.abc.PathEntryFinder` 以了解路径入口查找器所实现的各个方法。" + +#: ../../glossary.rst:896 +msgid "path entry hook" +msgstr "path entry hook -- 路径入口钩子" + +#: ../../glossary.rst:898 +msgid "" +"A callable on the :data:`sys.path_hook` list which returns a :term:`path " +"entry finder` if it knows how to find modules on a specific :term:`path " +"entry`." +msgstr "" +"一种可调用对象,在知道如何查找特定 :term:`path entry` 中的模块的情况下能够使用 :data:`sys.path_hook` " +"列表返回一个 :term:`path entry finder`。" + +#: ../../glossary.rst:901 +msgid "path based finder" +msgstr "path based finder -- 基于路径的查找器" + +#: ../../glossary.rst:903 +msgid "" +"One of the default :term:`meta path finders ` which " +"searches an :term:`import path` for modules." +msgstr "" +"默认的一种 :term:`元路径查找器 `,可在一个 :term:`import path` 中查找模块。" + +#: ../../glossary.rst:905 +msgid "path-like object" +msgstr "path-like object -- 路径类对象" + +#: ../../glossary.rst:907 +msgid "" +"An object representing a file system path. A path-like object is either a " +":class:`str` or :class:`bytes` object representing a path, or an object " +"implementing the :class:`os.PathLike` protocol. An object that supports the " +":class:`os.PathLike` protocol can be converted to a :class:`str` or " +":class:`bytes` file system path by calling the :func:`os.fspath` function; " +":func:`os.fsdecode` and :func:`os.fsencode` can be used to guarantee a " +":class:`str` or :class:`bytes` result instead, respectively. Introduced by " +":pep:`519`." +msgstr "" +"代表一个文件系统路径的对象。路径类对象可以是一个表示路径的 :class:`str` 或者 :class:`bytes` 对象,还可以是一个实现了 " +":class:`os.PathLike` 协议的对象。一个支持 :class:`os.PathLike` 协议的对象可通过调用 " +":func:`os.fspath` 函数转换为 :class:`str` 或者 :class:`bytes` " +"类型的文件系统路径;:func:`os.fsdecode` 和 :func:`os.fsencode` 可被分别用来确保获得 :class:`str` " +"或 :class:`bytes` 类型的结果。此对象是由 :pep:`519` 引入的。" + +#: ../../glossary.rst:915 +msgid "PEP" +msgstr "PEP" + +#: ../../glossary.rst:917 +msgid "" +"Python Enhancement Proposal. A PEP is a design document providing " +"information to the Python community, or describing a new feature for Python " +"or its processes or environment. PEPs should provide a concise technical " +"specification and a rationale for proposed features." +msgstr "" +"“Python 增强提议”的英文缩写。一个 PEP 就是一份设计文档,用来向 Python 社区提供信息,或描述一个 Python " +"的新增特性及其进度或环境。PEP 应当提供精确的技术规格和所提议特性的原理说明。" + +#: ../../glossary.rst:923 +msgid "" +"PEPs are intended to be the primary mechanisms for proposing major new " +"features, for collecting community input on an issue, and for documenting " +"the design decisions that have gone into Python. The PEP author is " +"responsible for building consensus within the community and documenting " +"dissenting opinions." +msgstr "" +"PEP 应被作为提出主要新特性建议、收集社区对特定问题反馈以及为必须加入 Python 的设计决策编写文档的首选机制。PEP " +"的作者有责任在社区内部建立共识,并应将不同意见也记入文档。" + +#: ../../glossary.rst:929 +msgid "See :pep:`1`." +msgstr "参见 :pep:`1`。" + +#: ../../glossary.rst:930 +msgid "portion" +msgstr "portion -- 部分" + +#: ../../glossary.rst:932 +msgid "" +"A set of files in a single directory (possibly stored in a zip file) that " +"contribute to a namespace package, as defined in :pep:`420`." +msgstr "构成一个命名空间包的单个目录内文件集合(也可能存放于一个 zip 文件内),具体定义见 :pep:`420`。" + +#: ../../glossary.rst:934 +msgid "positional argument" +msgstr "positional argument -- 位置参数" + +#: ../../glossary.rst:937 +msgid "provisional API" +msgstr "provisional API -- 暂定 API" + +#: ../../glossary.rst:939 +msgid "" +"A provisional API is one which has been deliberately excluded from the " +"standard library's backwards compatibility guarantees. While major changes " +"to such interfaces are not expected, as long as they are marked provisional," +" backwards incompatible changes (up to and including removal of the " +"interface) may occur if deemed necessary by core developers. Such changes " +"will not be made gratuitously -- they will occur only if serious fundamental" +" flaws are uncovered that were missed prior to the inclusion of the API." +msgstr "" +"暂定 API " +"是指被有意排除在标准库的向后兼容性保证之外的应用编程接口。虽然此类接口通常不会再有重大改变,但只要其被标记为暂定,就可能在核心开发者确定有必要的情况下进行向后不兼容的更改(甚至包括移除该接口)。此种更改并不会随意进行" +" -- 仅在 API 被加入之前未考虑到的严重基础性缺陷被发现时才可能会这样做。" + +#: ../../glossary.rst:948 +msgid "" +"Even for provisional APIs, backwards incompatible changes are seen as a " +"\"solution of last resort\" - every attempt will still be made to find a " +"backwards compatible resolution to any identified problems." +msgstr "" +"即便是对暂定 API 来说,向后不兼容的更改也会被视为“最后的解决方案” —— 任何问题被确认时都会尽可能先尝试找到一种向后兼容的解决方案。" + +#: ../../glossary.rst:952 +msgid "" +"This process allows the standard library to continue to evolve over time, " +"without locking in problematic design errors for extended periods of time. " +"See :pep:`411` for more details." +msgstr "这种处理过程允许标准库持续不断地演进,不至于被有问题的长期性设计缺陷所困。详情见 :pep:`411`。" + +#: ../../glossary.rst:955 +msgid "provisional package" +msgstr "provisional package -- 暂定包" + +#: ../../glossary.rst:957 +msgid "See :term:`provisional API`." +msgstr "参见 :term:`provisional API`。" + +#: ../../glossary.rst:958 +msgid "Python 3000" +msgstr "Python 3000" + +#: ../../glossary.rst:960 +msgid "" +"Nickname for the Python 3.x release line (coined long ago when the release " +"of version 3 was something in the distant future.) This is also abbreviated" +" \"Py3k\"." +msgstr "Python 3.x 发布路线的昵称(这个名字在版本 3 的发布还遥遥无期的时候就已出现了)。有时也被缩写为“Py3k”。" + +#: ../../glossary.rst:963 +msgid "Pythonic" +msgstr "Pythonic" + +#: ../../glossary.rst:965 +msgid "" +"An idea or piece of code which closely follows the most common idioms of the" +" Python language, rather than implementing code using concepts common to " +"other languages. For example, a common idiom in Python is to loop over all " +"elements of an iterable using a :keyword:`for` statement. Many other " +"languages don't have this type of construct, so people unfamiliar with " +"Python sometimes use a numerical counter instead::" +msgstr "" +"指一个思路或一段代码紧密遵循了 Python 语言最常用的风格和理念,而不是使用其他语言中通用的概念来实现代码。例如,Python 的常用风格是使用 " +":keyword:`for` 语句循环来遍历一个可迭代对象中的所有元素。许多其他语言没有这样的结构,因此不熟悉 Python " +"的人有时会选择使用一个数字计数器::" + +#: ../../glossary.rst:975 +msgid "As opposed to the cleaner, Pythonic method::" +msgstr "而相应的更简洁更 Pythonic 的方法是这样的::" + +#: ../../glossary.rst:979 +msgid "qualified name" +msgstr "qualified name -- 限定名称" + +#: ../../glossary.rst:981 +msgid "" +"A dotted name showing the \"path\" from a module's global scope to a class, " +"function or method defined in that module, as defined in :pep:`3155`. For " +"top-level functions and classes, the qualified name is the same as the " +"object's name::" +msgstr "" +"一个以点号分隔的名称,显示从模块的全局作用域到该模块中定义的某个类、函数或方法的“路径”,相关定义见 " +":pep:`3155`。对于最高层级的函数和类,限定名称与对象名称一致::" + +#: ../../glossary.rst:998 +msgid "" +"When used to refer to modules, the *fully qualified name* means the entire " +"dotted path to the module, including any parent packages, e.g. " +"``email.mime.text``::" +msgstr "" +"当被用于引用模块时,*完整限定名称* 意为标示该模块的以点号分隔的整个路径,其中包含其所有的父包,例如 ``email.mime.text``::" + +#: ../../glossary.rst:1005 +msgid "reference count" +msgstr "reference count -- 引用计数" + +#: ../../glossary.rst:1007 +msgid "" +"The number of references to an object. When the reference count of an " +"object drops to zero, it is deallocated. Reference counting is generally " +"not visible to Python code, but it is a key element of the :term:`CPython` " +"implementation. The :mod:`sys` module defines a :func:`~sys.getrefcount` " +"function that programmers can call to return the reference count for a " +"particular object." +msgstr "" +"对特定对象的引用的数量。当一个对象的引用计数降为零时,所分配资源将被释放。引用计数对 Python 代码来说通常是不可见的,但它是 " +":term:`CPython` 实现的一个关键元素。:mod:`sys` 模块定义了一个 :func:`~sys.getrefcount` " +"函数,程序员可调用它来返回特定对象的引用计数。" + +#: ../../glossary.rst:1013 +msgid "regular package" +msgstr "regular package -- 常规包" + +#: ../../glossary.rst:1015 +msgid "" +"A traditional :term:`package`, such as a directory containing an " +"``__init__.py`` file." +msgstr "传统型的 :term:`package`,例如包含有一个 ``__init__.py`` 文件的目录。" + +#: ../../glossary.rst:1018 +msgid "See also :term:`namespace package`." +msgstr "另参见 :term:`namespace package`。" + +#: ../../glossary.rst:1019 +msgid "__slots__" +msgstr "__slots__" + +#: ../../glossary.rst:1021 +msgid "" +"A declaration inside a class that saves memory by pre-declaring space for " +"instance attributes and eliminating instance dictionaries. Though popular, " +"the technique is somewhat tricky to get right and is best reserved for rare " +"cases where there are large numbers of instances in a memory-critical " +"application." +msgstr "" +"一种写在类内部的声明,通过预先声明实例属性等对象并移除实例字典来节省内存。虽然这种技巧很流行,但想要用好却并不容易,最好是只保留在少数情况下采用,例如极耗内存的应用程序,并且其中包含大量实例。" + +#: ../../glossary.rst:1026 +msgid "sequence" +msgstr "sequence" + +#: ../../glossary.rst:1028 +msgid "" +"An :term:`iterable` which supports efficient element access using integer " +"indices via the :meth:`__getitem__` special method and defines a " +":meth:`__len__` method that returns the length of the sequence. Some built-" +"in sequence types are :class:`list`, :class:`str`, :class:`tuple`, and " +":class:`bytes`. Note that :class:`dict` also supports :meth:`__getitem__` " +"and :meth:`__len__`, but is considered a mapping rather than a sequence " +"because the lookups use arbitrary :term:`immutable` keys rather than " +"integers." +msgstr "" +"一种 :term:`iterable`,它支持通过 :meth:`__getitem__` " +"特殊方法来使用整数索引进行高效的元素访问,并定义了一个返回序列长度的 :meth:`__len__` 方法。内置的序列类型有 " +":class:`list`、:class:`str`、:class:`tuple` 和 :class:`bytes`。注意虽然 " +":class:`dict` 也支持 :meth:`__getitem__` 和 " +":meth:`__len__`,但它被认为属于映射而非序列,因为它查找时使用任意的 :term:`immutable` 键而非整数。" + +#: ../../glossary.rst:1037 +msgid "" +"The :class:`collections.abc.Sequence` abstract base class defines a much " +"richer interface that goes beyond just :meth:`__getitem__` and " +":meth:`__len__`, adding :meth:`count`, :meth:`index`, :meth:`__contains__`, " +"and :meth:`__reversed__`. Types that implement this expanded interface can " +"be registered explicitly using :func:`~abc.ABCMeta.register`." +msgstr "" +":class:`collections.abc.Sequence` 抽象基类定义了一个更丰富的接口,它在 :meth:`__getitem__` 和 " +":meth:`__len__` 之外又添加了 :meth:`count`, :meth:`index`, :meth:`__contains__` 和 " +":meth:`__reversed__`。 实现此扩展接口的类型可以使用 :func:`~abc.ABCMeta.register` 来显式地注册。" + +#: ../../glossary.rst:1044 +msgid "set comprehension" +msgstr "set comprehension -- 集合推导式" + +#: ../../glossary.rst:1046 +msgid "" +"A compact way to process all or part of the elements in an iterable and " +"return a set with the results. ``results = {c for c in 'abracadabra' if c " +"not in 'abc'}`` generates the set of strings ``{'r', 'd'}``. See " +":ref:`comprehensions`." +msgstr "" +"处理一个可迭代对象中的所有或部分元素并返回结果集合的一种紧凑写法。 ``results = {c for c in 'abracadabra' if c" +" not in 'abc'}`` 将生成字符串集合 ``{'r', 'd'}``。 参见 :ref:`comprehensions`。" + +#: ../../glossary.rst:1050 +msgid "single dispatch" +msgstr "single dispatch -- 单分派" + +#: ../../glossary.rst:1052 +msgid "" +"A form of :term:`generic function` dispatch where the implementation is " +"chosen based on the type of a single argument." +msgstr "一种 :term:`generic function` 分派形式,其实现是基于单个参数的类型来选择的。" + +#: ../../glossary.rst:1054 +msgid "slice" +msgstr "slice -- 切片" + +#: ../../glossary.rst:1056 +msgid "" +"An object usually containing a portion of a :term:`sequence`. A slice is " +"created using the subscript notation, ``[]`` with colons between numbers " +"when several are given, such as in ``variable_name[1:3:5]``. The bracket " +"(subscript) notation uses :class:`slice` objects internally." +msgstr "" +"通常只包含了特定 :term:`sequence` 的一部分的对象。切片是通过使用下标标记来创建的,在 ``[]`` 中给出几个以冒号分隔的数字,例如 " +"``variable_name[1:3:5]``。方括号(下标)标记在内部使用 :class:`slice` 对象。" + +#: ../../glossary.rst:1060 +msgid "special method" +msgstr "special method -- 特殊方法" + +#: ../../glossary.rst:1064 +msgid "" +"A method that is called implicitly by Python to execute a certain operation " +"on a type, such as addition. Such methods have names starting and ending " +"with double underscores. Special methods are documented in " +":ref:`specialnames`." +msgstr "" +"一种由 Python 隐式调用的方法,用来对某个类型执行特定操作例如相加等等。这种方法的名称的首尾都为双下划线。特殊方法的文档参见 " +":ref:`specialnames`。" + +#: ../../glossary.rst:1068 +msgid "statement" +msgstr "statement -- 语句" + +#: ../../glossary.rst:1070 +msgid "" +"A statement is part of a suite (a \"block\" of code). A statement is either" +" an :term:`expression` or one of several constructs with a keyword, such as " +":keyword:`if`, :keyword:`while` or :keyword:`for`." +msgstr "" +"语句是程序段(一个代码“块”)的组成单位。一条语句可以是一个 :term:`expression` 或某个带有关键字的结构,例如 " +":keyword:`if`、:keyword:`while` 或 :keyword:`for`。" + +#: ../../glossary.rst:1073 +msgid "text encoding" +msgstr "text encoding -- 文本编码格式" + +#: ../../glossary.rst:1075 +msgid "" +"A string in Python is a sequence of Unicode code points (in range " +"``U+0000``--``U+10FFFF``). To store or transfer a string, it needs to be " +"serialized as a sequence of bytes." +msgstr "" +"在Python中,一个字符串是一串 Unicode 代码点(范围为 ``U+0000``--``U+10FFFF``)。 " +"为了存储或传输一个字符串,它需要被序列化为一串字节。" + +#: ../../glossary.rst:1079 +msgid "" +"Serializing a string into a sequence of bytes is known as \"encoding\", and " +"recreating the string from the sequence of bytes is known as \"decoding\"." +msgstr "将一个字符串序列化为一个字节序列被称为“编码”,而从字节序列中重新创建字符串被称为“解码”。" + +#: ../../glossary.rst:1082 +msgid "" +"There are a variety of different text serialization :ref:`codecs `, which are collectively referred to as \"text encodings\"." +msgstr "有各种不同的文本序列化 :ref:`编码器 ` ,它们被统称为 \"文本编码格式\"。" + +#: ../../glossary.rst:1085 +msgid "text file" +msgstr "text file -- 文本文件" + +#: ../../glossary.rst:1087 +msgid "" +"A :term:`file object` able to read and write :class:`str` objects. Often, a " +"text file actually accesses a byte-oriented datastream and handles the " +":term:`text encoding` automatically. Examples of text files are files opened" +" in text mode (``'r'`` or ``'w'``), :data:`sys.stdin`, :data:`sys.stdout`, " +"and instances of :class:`io.StringIO`." +msgstr "" +"一种能够读写 :class:`str` 对象的 :term:`file object`。通常一个文本文件实际是访问一个面向字节的数据流并自动处理 " +":term:`text encoding`。文本文件的例子包括以文本模式(``'r'`` 或 " +"``'w'``)打开的文件、:data:`sys.stdin`、:data:`sys.stdout` 以及 :class:`io.StringIO` " +"的实例。" + +#: ../../glossary.rst:1094 +msgid "" +"See also :term:`binary file` for a file object able to read and write " +":term:`bytes-like objects `." +msgstr "" +"另请参看 :term:`binary file` 了解能够读写 :term:`字节型对象 ` 的文件对象。" + +#: ../../glossary.rst:1096 +msgid "triple-quoted string" +msgstr "triple-quoted string -- 三引号字符串" + +#: ../../glossary.rst:1098 +msgid "" +"A string which is bound by three instances of either a quotation mark (\") " +"or an apostrophe ('). While they don't provide any functionality not " +"available with single-quoted strings, they are useful for a number of " +"reasons. They allow you to include unescaped single and double quotes " +"within a string and they can span multiple lines without the use of the " +"continuation character, making them especially useful when writing " +"docstrings." +msgstr "" +"首尾各带三个连续双引号(\")或者单引号(')的字符串。它们在功能上与首尾各用一个引号标注的字符串没有什么不同,但是有多种用处。它们允许你在字符串内包含未经转义的单引号和双引号,并且可以跨越多行而无需使用连接符,在编写文档字符串时特别好用。" + +#: ../../glossary.rst:1105 +msgid "type" +msgstr "type" + +#: ../../glossary.rst:1107 +msgid "" +"The type of a Python object determines what kind of object it is; every " +"object has a type. An object's type is accessible as its " +":attr:`~instance.__class__` attribute or can be retrieved with " +"``type(obj)``." +msgstr "" +"类型决定一个 Python 对象属于什么种类;每个对象都具有一种类型。要知道对象的类型,可以访问它的 " +":attr:`~instance.__class__` 属性,或是通过 ``type(obj)`` 来获取。" + +#: ../../glossary.rst:1111 +msgid "type alias" +msgstr "type alias -- 类型别名" + +#: ../../glossary.rst:1113 +msgid "A synonym for a type, created by assigning the type to an identifier." +msgstr "一个类型的同义词,创建方式是把类型赋值给特定的标识符。" + +#: ../../glossary.rst:1115 +msgid "" +"Type aliases are useful for simplifying :term:`type hints `. For " +"example::" +msgstr "类型别名的作用是简化 :term:`类型注解 `。例如::" + +#: ../../glossary.rst:1122 +msgid "could be made more readable like this::" +msgstr "可以这样提高可读性::" + +#: ../../glossary.rst:1129 ../../glossary.rst:1143 +msgid "See :mod:`typing` and :pep:`484`, which describe this functionality." +msgstr "参见 :mod:`typing` 和 :pep:`484`,其中有对此功能的详细描述。" + +#: ../../glossary.rst:1130 +msgid "type hint" +msgstr "type hint -- 类型注解" + +#: ../../glossary.rst:1132 +msgid "" +"An :term:`annotation` that specifies the expected type for a variable, a " +"class attribute, or a function parameter or return value." +msgstr ":term:`annotation` 为变量、类属性、函数的形参或返回值指定预期的类型。" + +#: ../../glossary.rst:1135 +msgid "" +"Type hints are optional and are not enforced by Python but they are useful " +"to static type analysis tools, and aid IDEs with code completion and " +"refactoring." +msgstr "类型注解属于可选项,Python 不要求提供,但其可对静态类型分析工具起作用,并可协助 IDE 实现代码补全与重构。" + +#: ../../glossary.rst:1139 +msgid "" +"Type hints of global variables, class attributes, and functions, but not " +"local variables, can be accessed using :func:`typing.get_type_hints`." +msgstr "全局变量、类属性和函数的类型注解可以使用 :func:`typing.get_type_hints` 来访问,但局部变量则不可以。" + +#: ../../glossary.rst:1144 +msgid "universal newlines" +msgstr "universal newlines -- 通用换行" + +#: ../../glossary.rst:1146 +msgid "" +"A manner of interpreting text streams in which all of the following are " +"recognized as ending a line: the Unix end-of-line convention ``'\\n'``, the " +"Windows convention ``'\\r\\n'``, and the old Macintosh convention ``'\\r'``." +" See :pep:`278` and :pep:`3116`, as well as :func:`bytes.splitlines` for an" +" additional use." +msgstr "" +"一种解读文本流的方式,将以下所有符号都识别为行结束标志:Unix 的行结束约定 ``'\\n'``、Windows 的约定 ``'\\r\\n'`` " +"以及旧版 Macintosh 的约定 ``'\\r'``。参见 :pep:`278` 和 :pep:`3116` 和 " +":func:`bytes.splitlines` 了解更多用法说明。" + +#: ../../glossary.rst:1151 +msgid "variable annotation" +msgstr "variable annotation -- 变量标注" + +#: ../../glossary.rst:1153 +msgid "An :term:`annotation` of a variable or a class attribute." +msgstr "对变量或类属性的 :term:`annotation`。" + +#: ../../glossary.rst:1155 +msgid "" +"When annotating a variable or a class attribute, assignment is optional::" +msgstr "在标注变量或类属性时,还可选择为其赋值::" + +#: ../../glossary.rst:1160 +msgid "" +"Variable annotations are usually used for :term:`type hints `: " +"for example this variable is expected to take :class:`int` values::" +msgstr "变量标注通常被用作 :term:`类型提示 `:例如以下变量预期接受 :class:`int` 类型的值::" + +#: ../../glossary.rst:1166 +msgid "Variable annotation syntax is explained in section :ref:`annassign`." +msgstr "变量标注语法的详细解释见 :ref:`annassign` 一节。" + +#: ../../glossary.rst:1168 +msgid "" +"See :term:`function annotation`, :pep:`484` and :pep:`526`, which describe " +"this functionality." +msgstr "请参看 :term:`function annotation`、:pep:`484` 和 :pep:`526`,其中对此功能有详细描述。" + +#: ../../glossary.rst:1170 +msgid "virtual environment" +msgstr "virtual environment -- 虚拟环境" + +#: ../../glossary.rst:1172 +msgid "" +"A cooperatively isolated runtime environment that allows Python users and " +"applications to install and upgrade Python distribution packages without " +"interfering with the behaviour of other Python applications running on the " +"same system." +msgstr "" +"一种采用协作式隔离的运行时环境,允许 Python 用户和应用程序在安装和升级 Python 分发包时不会干扰到同一系统上运行的其他 Python " +"应用程序的行为。" + +#: ../../glossary.rst:1177 +msgid "See also :mod:`venv`." +msgstr "另参见 :mod:`venv`。" + +#: ../../glossary.rst:1178 +msgid "virtual machine" +msgstr "virtual machine -- 虚拟机" + +#: ../../glossary.rst:1180 +msgid "" +"A computer defined entirely in software. Python's virtual machine executes " +"the :term:`bytecode` emitted by the bytecode compiler." +msgstr "一台完全通过软件定义的计算机。Python 虚拟机可执行字节码编译器所生成的 :term:`bytecode`。" + +#: ../../glossary.rst:1182 +msgid "Zen of Python" +msgstr "Zen of Python -- Python 之禅" + +#: ../../glossary.rst:1184 +msgid "" +"Listing of Python design principles and philosophies that are helpful in " +"understanding and using the language. The listing can be found by typing " +"\"``import this``\" at the interactive prompt." +msgstr "列出 Python 设计的原则与哲学,有助于理解与使用这种语言。查看其具体内容可在交互模式提示符中输入 \"``import this``\"。" diff --git a/howto/argparse.po b/howto/argparse.po new file mode 100644 index 000000000..c1d7fb86c --- /dev/null +++ b/howto/argparse.po @@ -0,0 +1,539 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) 2001-2023, Python Software Foundation +# This file is distributed under the same license as the Python package. +# FIRST AUTHOR , YEAR. +# +# Translators: +# telnetning , 2018 +# Trim21 , 2019 +# 兴然 刘 , 2019 +# allenjuly7 , 2019 +# 汪心禾 , 2019 +# Freesand Leo , 2020 +# Siyuan Xu, 2020 +# Rafael Fontenelle , 2023 +# +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: Python 3.9\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2023-09-15 15:42+0000\n" +"PO-Revision-Date: 2017-02-16 17:44+0000\n" +"Last-Translator: Rafael Fontenelle , 2023\n" +"Language-Team: Chinese (China) (https://app.transifex.com/python-doc/teams/5390/zh_CN/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: zh_CN\n" +"Plural-Forms: nplurals=1; plural=0;\n" + +#: ../../howto/argparse.rst:3 +msgid "Argparse Tutorial" +msgstr "argparse 教程" + +#: ../../howto/argparse.rst:0 +msgid "author" +msgstr "作者" + +#: ../../howto/argparse.rst:5 +msgid "Tshepang Lekhonkhobe" +msgstr "Tshepang Lekhonkhobe" + +#: ../../howto/argparse.rst:9 +msgid "" +"This tutorial is intended to be a gentle introduction to :mod:`argparse`, " +"the recommended command-line parsing module in the Python standard library." +msgstr "这篇教程旨在作为 :mod:`argparse` 的入门介绍,此模块是 Python 标准库中推荐的命令行解析模块。" + +#: ../../howto/argparse.rst:14 +msgid "" +"There are two other modules that fulfill the same task, namely :mod:`getopt`" +" (an equivalent for :c:func:`getopt` from the C language) and the deprecated" +" :mod:`optparse`. Note also that :mod:`argparse` is based on " +":mod:`optparse`, and therefore very similar in terms of usage." +msgstr "" +"还有另外两个模块可以完成同样的任务,称为 :mod:`getopt` (对应于 C 语言中的 :c:func:`getopt` 函数) 和被弃用的 " +":mod:`optparse`。还要注意 :mod:`argparse` 是基于 :mod:`optparse` 的,因此用法与其非常相似。" + +#: ../../howto/argparse.rst:22 +msgid "Concepts" +msgstr "概念" + +#: ../../howto/argparse.rst:24 +msgid "" +"Let's show the sort of functionality that we are going to explore in this " +"introductory tutorial by making use of the :command:`ls` command:" +msgstr "让我们利用 :command:`ls` 命令来展示我们将要在这篇入门教程中探索的功能:" + +#: ../../howto/argparse.rst:46 +msgid "A few concepts we can learn from the four commands:" +msgstr "我们可以从这四个命令中学到几个概念:" + +#: ../../howto/argparse.rst:48 +msgid "" +"The :command:`ls` command is useful when run without any options at all. It " +"defaults to displaying the contents of the current directory." +msgstr ":command:`ls` 是一个即使在运行的时候没有提供任何选项,也非常有用的命令。在默认情况下他会输出当前文件夹包含的文件和文件夹。" + +#: ../../howto/argparse.rst:51 +msgid "" +"If we want beyond what it provides by default, we tell it a bit more. In " +"this case, we want it to display a different directory, ``pypy``. What we " +"did is specify what is known as a positional argument. It's named so because" +" the program should know what to do with the value, solely based on where it" +" appears on the command line. This concept is more relevant to a command " +"like :command:`cp`, whose most basic usage is ``cp SRC DEST``. The first " +"position is *what you want copied,* and the second position is *where you " +"want it copied to*." +msgstr "" +"如果我们想要使用比它默认提供的更多功能,我们需要告诉该命令更多信息。在这个例子里,我们想要查看一个不同的目录,``pypy``。我们所做的是指定所谓的位置参数。之所以这样命名,是因为程序应该如何处理该参数值,完全取决于它在命令行出现的位置。更能体现这个概念的命令如" +" :command:`cp`,它最基本的用法是 ``cp SRC " +"DEST``。第一个位置参数指的是*你想要复制的*,第二个位置参数指的是*你想要复制到的位置*。" + +#: ../../howto/argparse.rst:60 +msgid "" +"Now, say we want to change behaviour of the program. In our example, we " +"display more info for each file instead of just showing the file names. The " +"``-l`` in that case is known as an optional argument." +msgstr "" +"现在假设我们想要改变这个程序的行为。在我们的例子中,我们不仅仅只是输出每个文件的文件名,还输出了更多信息。在这个例子中,``-l`` 被称为可选参数。" + +#: ../../howto/argparse.rst:64 +msgid "" +"That's a snippet of the help text. It's very useful in that you can come " +"across a program you have never used before, and can figure out how it works" +" simply by reading its help text." +msgstr "这是一段帮助文档的文字。它是非常有用的,因为当你遇到一个你从未使用过的程序时,你可以通过阅读它的帮助文档来弄清楚它是如何运行的。" + +#: ../../howto/argparse.rst:70 +msgid "The basics" +msgstr "基础" + +#: ../../howto/argparse.rst:72 +msgid "Let us start with a very simple example which does (almost) nothing::" +msgstr "让我们从一个简单到(几乎)什么也做不了的例子开始:" + +#: ../../howto/argparse.rst:78 ../../howto/argparse.rst:186 +#: ../../howto/argparse.rst:207 +msgid "Following is a result of running the code:" +msgstr "以下是该代码的运行结果:" + +#: ../../howto/argparse.rst:95 ../../howto/argparse.rst:252 +#: ../../howto/argparse.rst:296 +msgid "Here is what is happening:" +msgstr "程序运行情况如下:" + +#: ../../howto/argparse.rst:97 +msgid "" +"Running the script without any options results in nothing displayed to " +"stdout. Not so useful." +msgstr "在没有任何选项的情况下运行脚本不会在标准输出显示任何内容。这没有什么用处。" + +#: ../../howto/argparse.rst:100 +msgid "" +"The second one starts to display the usefulness of the :mod:`argparse` " +"module. We have done almost nothing, but already we get a nice help message." +msgstr "第二行代码开始展现出 :mod:`argparse` 模块的作用。我们几乎什么也没有做,但已经得到一条很好的帮助信息。" + +#: ../../howto/argparse.rst:103 +msgid "" +"The ``--help`` option, which can also be shortened to ``-h``, is the only " +"option we get for free (i.e. no need to specify it). Specifying anything " +"else results in an error. But even then, we do get a useful usage message, " +"also for free." +msgstr "" +"``--help`` 选项,也可缩写为 " +"``-h``,是唯一一个可以直接使用的选项(即不需要指定该选项的内容)。指定任何内容都会导致错误。即便如此,我们也能直接得到一条有用的用法信息。" + +#: ../../howto/argparse.rst:110 +msgid "Introducing Positional arguments" +msgstr "位置参数介绍" + +#: ../../howto/argparse.rst:112 +msgid "An example::" +msgstr "举个例子:" + +#: ../../howto/argparse.rst:120 +msgid "And running the code:" +msgstr "运行此程序:" + +#: ../../howto/argparse.rst:138 +msgid "Here is what's happening:" +msgstr "程序运行情况如下:" + +#: ../../howto/argparse.rst:140 +msgid "" +"We've added the :meth:`add_argument` method, which is what we use to specify" +" which command-line options the program is willing to accept. In this case, " +"I've named it ``echo`` so that it's in line with its function." +msgstr "" +"我们增加了 :meth:`add_argument` 方法,该方法用于指定程序能够接受哪些命令行选项。在这个例子中,我将选项命名为 " +"``echo``,与其功能一致。" + +#: ../../howto/argparse.rst:144 +msgid "Calling our program now requires us to specify an option." +msgstr "现在调用我们的程序必须要指定一个选项。" + +#: ../../howto/argparse.rst:146 +msgid "" +"The :meth:`parse_args` method actually returns some data from the options " +"specified, in this case, ``echo``." +msgstr " :meth:`parse_args` 方法实际上返回所指定的选项中的一些信息,在这个例子中返回的是``echo``。" + +#: ../../howto/argparse.rst:149 +msgid "" +"The variable is some form of 'magic' that :mod:`argparse` performs for free " +"(i.e. no need to specify which variable that value is stored in). You will " +"also notice that its name matches the string argument given to the method, " +"``echo``." +msgstr "" +"这一变量是 :mod:`argparse` 免费施放的某种 " +"“魔法”(即是说,不需要指定哪个变量是存储哪个值的)。你也可以注意到,这一名称与传递给方法的字符串参数一致,都是 ``echo``。" + +#: ../../howto/argparse.rst:154 +msgid "" +"Note however that, although the help display looks nice and all, it " +"currently is not as helpful as it can be. For example we see that we got " +"``echo`` as a positional argument, but we don't know what it does, other " +"than by guessing or by reading the source code. So, let's make it a bit more" +" useful::" +msgstr "" +"然而请注意,尽管显示的帮助看起来清楚完整,但它可以比现在更有帮助。比如我们可以知道 ``echo`` " +"是一个位置参数,但我们除了靠猜或者看源代码,没法知道它是用来干什么的。所以,我们可以把它改造得更有用:" + +#: ../../howto/argparse.rst:165 +msgid "And we get:" +msgstr "然后我们得到:" + +#: ../../howto/argparse.rst:178 +msgid "Now, how about doing something even more useful::" +msgstr "现在,来做一些更有用的事情:" + +#: ../../howto/argparse.rst:196 +msgid "" +"That didn't go so well. That's because :mod:`argparse` treats the options we" +" give it as strings, unless we tell it otherwise. So, let's tell " +":mod:`argparse` to treat that input as an integer::" +msgstr "" +"进展不太顺利。那是因为 :mod:`argparse` 会把我们传递给它的选项视作为字符串,除非我们告诉它别这样。所以,让我们来告诉 " +":mod:`argparse` 来把这一输入视为整数:" + +#: ../../howto/argparse.rst:217 +msgid "" +"That went well. The program now even helpfully quits on bad illegal input " +"before proceeding." +msgstr "做得不错。当这个程序在收到错误的无效的输入时,它甚至能在执行计算之前先退出,还能显示很有帮助的错误信息。" + +#: ../../howto/argparse.rst:222 +msgid "Introducing Optional arguments" +msgstr "可选参数介绍" + +#: ../../howto/argparse.rst:224 +msgid "" +"So far we have been playing with positional arguments. Let us have a look on" +" how to add optional ones::" +msgstr "到目前为止,我们一直在研究位置参数。让我们看看如何添加可选的:" + +#: ../../howto/argparse.rst:234 ../../howto/argparse.rst:280 +#: ../../howto/argparse.rst:396 ../../howto/argparse.rst:430 +msgid "And the output:" +msgstr "和输出:" + +#: ../../howto/argparse.rst:254 +msgid "" +"The program is written so as to display something when ``--verbosity`` is " +"specified and display nothing when not." +msgstr "这一程序被设计为当指定 ``--verbosity`` 选项时显示某些东西,否则不显示。" + +#: ../../howto/argparse.rst:257 +msgid "" +"To show that the option is actually optional, there is no error when running" +" the program without it. Note that by default, if an optional argument isn't" +" used, the relevant variable, in this case :attr:`args.verbosity`, is given " +"``None`` as a value, which is the reason it fails the truth test of the " +":keyword:`if` statement." +msgstr "" +"不添加这一选项时程序没有提示任何错误而退出,表明这一选项确实是可选的。注意,如果一个可选参数没有被使用时,相关变量被赋值为 ``None``,在此例中是" +" :attr:`args.verbosity`,这也就是为什么它在 :keyword:`if` 语句中被当作逻辑假。" + +#: ../../howto/argparse.rst:263 +msgid "The help message is a bit different." +msgstr "帮助信息有点不同。" + +#: ../../howto/argparse.rst:265 +msgid "" +"When using the ``--verbosity`` option, one must also specify some value, any" +" value." +msgstr "使用 ``--verbosity`` 选项时,必须指定一个值,但可以是任何值。" + +#: ../../howto/argparse.rst:268 +msgid "" +"The above example accepts arbitrary integer values for ``--verbosity``, but " +"for our simple program, only two values are actually useful, ``True`` or " +"``False``. Let's modify the code accordingly::" +msgstr "" +"上述例子接受任何整数值作为 ``--verbosity`` 的参数,但对于我们的简单程序而言,只有两个值有实际意义:``True`` 或者 " +"``False``。让我们据此修改代码:" + +#: ../../howto/argparse.rst:298 +msgid "" +"The option is now more of a flag than something that requires a value. We " +"even changed the name of the option to match that idea. Note that we now " +"specify a new keyword, ``action``, and give it the value ``\"store_true\"``." +" This means that, if the option is specified, assign the value ``True`` to " +":data:`args.verbose`. Not specifying it implies ``False``." +msgstr "" +"现在,这一选项更多地是一个标志,而非需要接受一个值的什么东西。我们甚至改变了选项的名字来符合这一思路。注意我们现在指定了一个新的关键词 " +"``action``,并赋值为 ``\"store_true\"``。这意味着,当这一选项存在时,为 :data:`args.verbose` 赋值为 " +"``True``。没有指定时则隐含地赋值为 ``False``。" + +#: ../../howto/argparse.rst:305 +msgid "" +"It complains when you specify a value, in true spirit of what flags actually" +" are." +msgstr "当你为其指定一个值时,它会报错,符合作为标志的真正的精神。" + +#: ../../howto/argparse.rst:308 +msgid "Notice the different help text." +msgstr "留意不同的帮助文字。" + +#: ../../howto/argparse.rst:312 +msgid "Short options" +msgstr "短选项" + +#: ../../howto/argparse.rst:314 +msgid "" +"If you are familiar with command line usage, you will notice that I haven't " +"yet touched on the topic of short versions of the options. It's quite " +"simple::" +msgstr "如果你熟悉命令行的用法,你会发现我还没讲到这一选项的短版本。这也很简单:" + +#: ../../howto/argparse.rst:326 +msgid "And here goes:" +msgstr "效果就像这样:" + +#: ../../howto/argparse.rst:339 +msgid "Note that the new ability is also reflected in the help text." +msgstr "可以注意到,这一新的能力也反映在帮助文本里。" + +#: ../../howto/argparse.rst:343 +msgid "Combining Positional and Optional arguments" +msgstr "结合位置参数和可选参数" + +#: ../../howto/argparse.rst:345 +msgid "Our program keeps growing in complexity::" +msgstr "我们的程序变得越来越复杂了:" + +#: ../../howto/argparse.rst:360 +msgid "And now the output:" +msgstr "接着是输出:" + +#: ../../howto/argparse.rst:374 +msgid "We've brought back a positional argument, hence the complaint." +msgstr "我们带回了一个位置参数,结果发生了报错。" + +#: ../../howto/argparse.rst:376 +msgid "Note that the order does not matter." +msgstr "注意顺序无关紧要。" + +#: ../../howto/argparse.rst:378 +msgid "" +"How about we give this program of ours back the ability to have multiple " +"verbosity values, and actually get to use them::" +msgstr "给我们的程序加上接受多个冗长度的值,然后实际来用用:" + +#: ../../howto/argparse.rst:412 +msgid "" +"These all look good except the last one, which exposes a bug in our program." +" Let's fix it by restricting the values the ``--verbosity`` option can " +"accept::" +msgstr "" +"除了最后一个,看上去都不错。最后一个暴露了我们的程序中有一个 bug。我们可以通过限制 ``--verbosity`` 选项可以接受的值来修复它:" + +#: ../../howto/argparse.rst:448 +msgid "" +"Note that the change also reflects both in the error message as well as the " +"help string." +msgstr "注意这一改变同时反应在错误信息和帮助信息里。" + +#: ../../howto/argparse.rst:451 +msgid "" +"Now, let's use a different approach of playing with verbosity, which is " +"pretty common. It also matches the way the CPython executable handles its " +"own verbosity argument (check the output of ``python --help``)::" +msgstr "" +"现在,让我们使用另一种的方式来改变冗长度。这种方式更常见,也和 CPython 的可执行文件处理它自己的冗长度参数的方式一致(参考 ``python " +"--help`` 的输出):" + +#: ../../howto/argparse.rst:470 +msgid "" +"We have introduced another action, \"count\", to count the number of " +"occurrences of a specific optional arguments:" +msgstr "我们引入了另一种动作 ``count``,来数某一个可选参数出现了几次:" + +#: ../../howto/argparse.rst:498 +msgid "" +"Yes, it's now more of a flag (similar to ``action=\"store_true\"``) in the " +"previous version of our script. That should explain the complaint." +msgstr "是的,它现在比前一版本更像是一个标志(和 ``action=\"store_true\"`` 相似)。这能解释它为什么报错。" + +#: ../../howto/argparse.rst:501 +msgid "It also behaves similar to \"store_true\" action." +msgstr "它也表现得与 “store_true” 的行为相似。" + +#: ../../howto/argparse.rst:503 +msgid "" +"Now here's a demonstration of what the \"count\" action gives. You've " +"probably seen this sort of usage before." +msgstr "这给出了一个关于 ``count`` 动作的效果的演示。你之前很可能应该已经看过这种用法。" + +#: ../../howto/argparse.rst:506 +msgid "" +"And if you don't specify the ``-v`` flag, that flag is considered to have " +"``None`` value." +msgstr "如果你不添加 ``-v`` 标志,这一标志的值会是 ``None``。" + +#: ../../howto/argparse.rst:509 +msgid "" +"As should be expected, specifying the long form of the flag, we should get " +"the same output." +msgstr "如期望的那样,添加该标志的长形态能够获得相同的输出。" + +#: ../../howto/argparse.rst:512 +msgid "" +"Sadly, our help output isn't very informative on the new ability our script " +"has acquired, but that can always be fixed by improving the documentation " +"for our script (e.g. via the ``help`` keyword argument)." +msgstr "" +"可惜的是,对于我们的脚本获得的新能力,我们的帮助输出并没有提供很多信息,但我们总是可以通过改善文档来修复这一问题(比如通过 ``help`` " +"关键字参数)。" + +#: ../../howto/argparse.rst:516 +msgid "That last output exposes a bug in our program." +msgstr "最后一个输出暴露了我们程序中的一个 bug。" + +#: ../../howto/argparse.rst:519 +msgid "Let's fix::" +msgstr "让我们修复一下:" + +#: ../../howto/argparse.rst:538 +msgid "And this is what it gives:" +msgstr "这是它给我们的输出:" + +#: ../../howto/argparse.rst:553 +msgid "" +"First output went well, and fixes the bug we had before. That is, we want " +"any value >= 2 to be as verbose as possible." +msgstr "第一组输出很好,修复了之前的 bug。也就是说,我们希望任何 >= 2 的值尽可能详尽。" + +#: ../../howto/argparse.rst:556 +msgid "Third output not so good." +msgstr "第三组输出并不理想。" + +#: ../../howto/argparse.rst:558 +msgid "Let's fix that bug::" +msgstr "让我们修复那个 bug:" + +#: ../../howto/argparse.rst:575 +msgid "" +"We've just introduced yet another keyword, ``default``. We've set it to " +"``0`` in order to make it comparable to the other int values. Remember that " +"by default, if an optional argument isn't specified, it gets the ``None`` " +"value, and that cannot be compared to an int value (hence the " +":exc:`TypeError` exception)." +msgstr "" +"我们刚刚引入了又一个新的关键字 ``default``。我们把它设置为 ``0`` " +"来让它可以与其他整数值相互比较。记住,默认情况下如果一个可选参数没有被指定,它的值会是 ``None``,并且它不能和整数值相比较(所以产生了 " +":exc:`TypeError` 异常)。" + +#: ../../howto/argparse.rst:582 +msgid "And:" +msgstr "然后:" + +#: ../../howto/argparse.rst:589 +msgid "" +"You can go quite far just with what we've learned so far, and we have only " +"scratched the surface. The :mod:`argparse` module is very powerful, and " +"we'll explore a bit more of it before we end this tutorial." +msgstr "" +"凭借我们目前已学的东西你就可以做到许多事情,而我们还仅仅学了一些皮毛而已。 :mod:`argparse` " +"模块是非常强大的,在结束篇教程之前我们将再探索更多一些内容。" + +#: ../../howto/argparse.rst:596 +msgid "Getting a little more advanced" +msgstr "进行一些小小的改进" + +#: ../../howto/argparse.rst:598 +msgid "" +"What if we wanted to expand our tiny program to perform other powers, not " +"just squares::" +msgstr "如果我们想扩展我们的简短程序来执行其他幂次的运算,而不仅是乘方::" + +#: ../../howto/argparse.rst:615 ../../howto/argparse.rst:653 +msgid "Output:" +msgstr "输出:" + +#: ../../howto/argparse.rst:636 +msgid "" +"Notice that so far we've been using verbosity level to *change* the text " +"that gets displayed. The following example instead uses verbosity level to " +"display *more* text instead::" +msgstr "请注意到目前为止我们一直在使用详细级别来 *更改* 所显示的文本。 以下示例则使用详细级别来显示 *更多的* 文本::" + +#: ../../howto/argparse.rst:667 +msgid "Conflicting options" +msgstr "矛盾的选项" + +#: ../../howto/argparse.rst:669 +msgid "" +"So far, we have been working with two methods of an " +":class:`argparse.ArgumentParser` instance. Let's introduce a third one, " +":meth:`add_mutually_exclusive_group`. It allows for us to specify options " +"that conflict with each other. Let's also change the rest of the program so " +"that the new functionality makes more sense: we'll introduce the ``--quiet``" +" option, which will be the opposite of the ``--verbose`` one::" +msgstr "" +"到目前为止,我们一直在使用 :class:`argparse.ArgumentParser` 实例的两个方法。 让我们再介绍第三个方法 " +":meth:`add_mutually_exclusive_group`。 它允许我们指定彼此相互冲突的选项。 " +"让我们再更改程序的其余部分以便使用新功能更有意义:我们将引入 ``--quiet`` 选项,它将与 ``--verbose`` 正好相反::" + +#: ../../howto/argparse.rst:695 +msgid "" +"Our program is now simpler, and we've lost some functionality for the sake " +"of demonstration. Anyways, here's the output:" +msgstr "我们的程序现在变得更简洁了,我们出于演示需要略去了一些功能。 无论如何,输出是这样的:" + +#: ../../howto/argparse.rst:713 +msgid "" +"That should be easy to follow. I've added that last output so you can see " +"the sort of flexibility you get, i.e. mixing long form options with short " +"form ones." +msgstr "这应该很容易理解。 我添加了末尾的输出这样你就可以看到其所达到的灵活性,即混合使用长和短两种形式的选项。" + +#: ../../howto/argparse.rst:717 +msgid "" +"Before we conclude, you probably want to tell your users the main purpose of" +" your program, just in case they don't know::" +msgstr "在我们收尾之前,你也许希望告诉你的用户这个程序的主要目标,以免他们还不清楚::" + +#: ../../howto/argparse.rst:738 +msgid "" +"Note that slight difference in the usage text. Note the ``[-v | -q]``, which" +" tells us that we can either use ``-v`` or ``-q``, but not both at the same " +"time:" +msgstr "" +"请注意用法文本中有细微的差异。 注意 ``[-v | -q]``,它的意思是说我们可以使用 ``-v`` 或 ``-q``,但不能同时使用两者:" + +#: ../../howto/argparse.rst:760 +msgid "Conclusion" +msgstr "后记" + +#: ../../howto/argparse.rst:762 +msgid "" +"The :mod:`argparse` module offers a lot more than shown here. Its docs are " +"quite detailed and thorough, and full of examples. Having gone through this " +"tutorial, you should easily digest them without feeling overwhelmed." +msgstr "" +"除了这里显示的内容,:mod:`argparse` 模块还提供了更多功能。 它的文档相当详细和完整,包含大量示例。 " +"完成这个教程之后,你应该能毫不困难地阅读该文档。" diff --git a/howto/clinic.po b/howto/clinic.po new file mode 100644 index 000000000..ef2a57b90 --- /dev/null +++ b/howto/clinic.po @@ -0,0 +1,2738 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) 2001-2024, Python Software Foundation +# This file is distributed under the same license as the Python package. +# FIRST AUTHOR , YEAR. +# +# Translators: +# Shengjing Zhu , 2018 +# telnetning , 2018 +# df2dc1c92e792f7ae8417c51df43db8f_594d92a <0f49be28017426edb1db1a2ab6e67088_717605>, 2018 +# Alpha Du , 2019 +# ppcfish , 2019 +# Dai Xu , 2022 +# Freesand Leo , 2022 +# Rafael Fontenelle , 2024 +# +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: Python 3.9\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2024-05-31 16:34+0000\n" +"PO-Revision-Date: 2017-02-16 17:44+0000\n" +"Last-Translator: Rafael Fontenelle , 2024\n" +"Language-Team: Chinese (China) (https://app.transifex.com/python-doc/teams/5390/zh_CN/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: zh_CN\n" +"Plural-Forms: nplurals=1; plural=0;\n" + +#: ../../howto/clinic.rst:5 +msgid "Argument Clinic How-To" +msgstr "Argument Clinic 的用法" + +#: ../../howto/clinic.rst:0 +msgid "author" +msgstr "作者" + +#: ../../howto/clinic.rst:7 +msgid "Larry Hastings" +msgstr "Larry Hastings" + +#: ../../howto/clinic.rstNone +msgid "Abstract" +msgstr "摘要" + +#: ../../howto/clinic.rst:12 +msgid "" +"Argument Clinic is a preprocessor for CPython C files. Its purpose is to " +"automate all the boilerplate involved with writing argument parsing code for" +" \"builtins\". This document shows you how to convert your first C function " +"to work with Argument Clinic, and then introduces some advanced topics on " +"Argument Clinic usage." +msgstr "" +"Argument Clinic 是 CPython 的一个 C 文件预处理器。旨在自动处理所有与“内置”参数解析有关的代码。本文展示了将 C " +"函数转换为配合 Argument Clinic 工作的做法,还介绍了一些关于 Argument Clinic 用法的进阶内容。" + +#: ../../howto/clinic.rst:19 +msgid "" +"Currently Argument Clinic is considered internal-only for CPython. Its use " +"is not supported for files outside CPython, and no guarantees are made " +"regarding backwards compatibility for future versions. In other words: if " +"you maintain an external C extension for CPython, you're welcome to " +"experiment with Argument Clinic in your own code. But the version of " +"Argument Clinic that ships with the next version of CPython *could* be " +"totally incompatible and break all your code." +msgstr "" +"目前 Argument Clinic 视作仅供 CPython 内部使用。不支持在 CPython " +"之外的文件中使用,也不保证未来版本会向下兼容。换句话说:如果维护的是 CPython 的外部 C 语言扩展,欢迎在自己的代码中试用 Argument " +"Clinic。但 Argument Clinic 与新版 CPython 中的版本 *可能* 完全不兼容,且会打乱全部代码。" + +#: ../../howto/clinic.rst:29 +msgid "The Goals Of Argument Clinic" +msgstr "Argument Clinic 的设计目标" + +#: ../../howto/clinic.rst:31 +msgid "" +"Argument Clinic's primary goal is to take over responsibility for all " +"argument parsing code inside CPython. This means that, when you convert a " +"function to work with Argument Clinic, that function should no longer do any" +" of its own argument parsing—the code generated by Argument Clinic should be" +" a \"black box\" to you, where CPython calls in at the top, and your code " +"gets called at the bottom, with ``PyObject *args`` (and maybe ``PyObject " +"*kwargs``) magically converted into the C variables and types you need." +msgstr "" +"Argument Clinic 的主要目标,是接管 CPython 中的所有参数解析代码。这意味着,如果要把某个函数转换为配合 Argument " +"Clinic一起工作,则该函数不应再作任何参数解析工作——Argument Clinic 生成的代码应该是个“黑盒”,CPython " +"会在顶部发起调用,底部则调用自己的代码, ``PyObject *args`` (也许还有 ``PyObject *kwargs`` " +")会神奇地转换成所需的 C 变量和类型。" + +#: ../../howto/clinic.rst:41 +msgid "" +"In order for Argument Clinic to accomplish its primary goal, it must be easy" +" to use. Currently, working with CPython's argument parsing library is a " +"chore, requiring maintaining redundant information in a surprising number of" +" places. When you use Argument Clinic, you don't have to repeat yourself." +msgstr "" +"Argument Clinic 为了能完成主要目标,用起来必须方便。目前,使用 CPython " +"的参数解析库是一件苦差事,需要在很多地方维护冗余信息。如果使用 Argument Clinic,则不必再重复代码了。" + +#: ../../howto/clinic.rst:47 +msgid "" +"Obviously, no one would want to use Argument Clinic unless it's solving " +"their problem—and without creating new problems of its own. So it's " +"paramount that Argument Clinic generate correct code. It'd be nice if the " +"code was faster, too, but at the very least it should not introduce a major " +"speed regression. (Eventually Argument Clinic *should* make a major speedup" +" possible—we could rewrite its code generator to produce tailor-made " +"argument parsing code, rather than calling the general-purpose CPython " +"argument parsing library. That would make for the fastest argument parsing " +"possible!)" +msgstr "" +"显然,除非 Argument Clinic 解决了自身的问题,且没有产生新的问题,否则没有人会愿意用它。所以,Argument Clinic " +"最重要的事情就是生成正确的代码。如果能加速代码的运行当然更好,但至少不应引入明显的减速。(最终 Argument Clinic *应该* " +"可以实现较大的速度提升——代码生成器可以重写一下,以产生量身定做的参数解析代码,而不是调用通用的 CPython 参数解析库。 " +"这会让参数解析达到最佳速度!)" + +#: ../../howto/clinic.rst:59 +msgid "" +"Additionally, Argument Clinic must be flexible enough to work with any " +"approach to argument parsing. Python has some functions with some very " +"strange parsing behaviors; Argument Clinic's goal is to support all of them." +msgstr "" +"此外,Argument Clinic 必须足够灵活,能够与任何参数解析的方法一起工作。Python " +"有一些函数具备一些非常奇怪的解析行为;Argument Clinic 的目标是支持所有这些函数。" + +#: ../../howto/clinic.rst:64 +msgid "" +"Finally, the original motivation for Argument Clinic was to provide " +"introspection \"signatures\" for CPython builtins. It used to be, the " +"introspection query functions would throw an exception if you passed in a " +"builtin. With Argument Clinic, that's a thing of the past!" +msgstr "" +"最后,Argument Clinic 的初衷是为 CPython 内置程序提供内省“签名”。以前如果传入一个内置函数,内省查询函数会抛出异常。有了 " +"Argument Clinic,再不会发生这种问题了!" + +#: ../../howto/clinic.rst:70 +msgid "" +"One idea you should keep in mind, as you work with Argument Clinic: the more" +" information you give it, the better job it'll be able to do. Argument " +"Clinic is admittedly relatively simple right now. But as it evolves it will" +" get more sophisticated, and it should be able to do many interesting and " +"smart things with all the information you give it." +msgstr "" +"在与 Argument Clinic 合作时,应该牢记一个理念:给它的信息越多,它做得就会越好。诚然,Argument Clinic " +"现在还比较简单。但会演变得越来越复杂,应该能够利用给出的全部信息干很多聪明而有趣的事情。" + +#: ../../howto/clinic.rst:80 +msgid "Basic Concepts And Usage" +msgstr "基本概念和用法" + +#: ../../howto/clinic.rst:82 +msgid "" +"Argument Clinic ships with CPython; you'll find it in " +"``Tools/clinic/clinic.py``. If you run that script, specifying a C file as " +"an argument:" +msgstr "" +"Argument Clinic 与 CPython 一起提供,位于 ``Tools/clinic/clinic.py`` 。若要运行它,请指定一个 C " +"文件作为参数。" + +#: ../../howto/clinic.rst:89 +msgid "" +"Argument Clinic will scan over the file looking for lines that look exactly " +"like this:" +msgstr "Argument Clinic 会扫描 C 文件,精确查找以下代码:" + +#: ../../howto/clinic.rst:96 +msgid "" +"When it finds one, it reads everything up to a line that looks exactly like " +"this:" +msgstr "一旦找到一条后,就会读取所有内容,直至遇到以下代码:" + +#: ../../howto/clinic.rst:103 +msgid "" +"Everything in between these two lines is input for Argument Clinic. All of " +"these lines, including the beginning and ending comment lines, are " +"collectively called an Argument Clinic \"block\"." +msgstr "" +"这两行之间的所有内容都是 Argument Clinic 的输入。所有行,包括开始和结束的注释行,统称为 Argument Clinic “块”。" + +#: ../../howto/clinic.rst:107 +msgid "" +"When Argument Clinic parses one of these blocks, it generates output. This " +"output is rewritten into the C file immediately after the block, followed by" +" a comment containing a checksum. The Argument Clinic block now looks like " +"this:" +msgstr "" +"Argument Clinic 在解析某一块时,会生成输出信息。输出信息会紧跟着该块写入 C 文件中,后面还会跟着包含校验和的注释。现在 " +"Argument Clinic 块看起来应如下所示:" + +#: ../../howto/clinic.rst:120 +msgid "" +"If you run Argument Clinic on the same file a second time, Argument Clinic " +"will discard the old output and write out the new output with a fresh " +"checksum line. However, if the input hasn't changed, the output won't " +"change either." +msgstr "" +"如果对同一文件第二次运行 Argument " +"Clinic,则它会丢弃之前的输出信息,并写入带有新校验行的输出信息。不过如果输入没有变化,则输出也不会有变化。" + +#: ../../howto/clinic.rst:124 +msgid "" +"You should never modify the output portion of an Argument Clinic block. " +"Instead, change the input until it produces the output you want. (That's " +"the purpose of the checksum—to detect if someone changed the output, as " +"these edits would be lost the next time Argument Clinic writes out fresh " +"output.)" +msgstr "" +"不应去改动 Argument Clinic " +"块的输出部分。而应去修改输入,直到生成所需的输出信息。(这就是校验和的用途——检测是否有人改动了输出信息,因为在 Argument Clinic " +"下次写入新的输出时,这些改动都会丢失)。" + +#: ../../howto/clinic.rst:129 +msgid "" +"For the sake of clarity, here's the terminology we'll use with Argument " +"Clinic:" +msgstr "为了清晰起见,下面列出了 Argument Clinic 用到的术语:" + +#: ../../howto/clinic.rst:131 +msgid "" +"The first line of the comment (``/*[clinic input]``) is the *start line*." +msgstr "注释的第一行 ``/*[clinic input]`` 是 *起始行* 。" + +#: ../../howto/clinic.rst:132 +msgid "" +"The last line of the initial comment (``[clinic start generated code]*/``) " +"is the *end line*." +msgstr "注释(``[clinic start generated code]*/``)的最后一行是 *结束行*。" + +#: ../../howto/clinic.rst:133 +msgid "" +"The last line (``/*[clinic end generated code: checksum=...]*/``) is the " +"*checksum line*." +msgstr "最后一行(``/*[clinic end generated code: checksum=...]*/``)是 *校验和行* 。" + +#: ../../howto/clinic.rst:134 +msgid "In between the start line and the end line is the *input*." +msgstr "在起始行和结束行之间是 *输入数据*。" + +#: ../../howto/clinic.rst:135 +msgid "In between the end line and the checksum line is the *output*." +msgstr "在结束行和校验和行之间是 *输出数据* 。" + +#: ../../howto/clinic.rst:136 +msgid "" +"All the text collectively, from the start line to the checksum line " +"inclusively, is the *block*. (A block that hasn't been successfully " +"processed by Argument Clinic yet doesn't have output or a checksum line, but" +" it's still considered a block.)" +msgstr "从开始行到校验和行的所有文本,都是 *块*。(Argument Clinic 尚未处理成功的块,没有输出或校验和行,但仍视作一个块)。" + +#: ../../howto/clinic.rst:143 +msgid "Converting Your First Function" +msgstr "函数的转换" + +#: ../../howto/clinic.rst:145 +msgid "" +"The best way to get a sense of how Argument Clinic works is to convert a " +"function to work with it. Here, then, are the bare minimum steps you'd need" +" to follow to convert a function to work with Argument Clinic. Note that " +"for code you plan to check in to CPython, you really should take the " +"conversion farther, using some of the advanced concepts you'll see later on " +"in the document (like \"return converters\" and \"self converters\"). But " +"we'll keep it simple for this walkthrough so you can learn." +msgstr "" +"要想了解 Argument Clinic 是如何工作的,最好的方式就是转换一个函数与之合作。下面介绍需遵循的最基本步骤。请注意,若真的准备在 " +"CPython 中进行检查,则应进行更深入的转换,使用一些本文后续会介绍到的高级概念(比如 “返回转换” 和 " +"“自转换”)。但以下例子将维持简单,以供学习。" + +#: ../../howto/clinic.rst:154 +msgid "Let's dive in!" +msgstr "就此开始" + +#: ../../howto/clinic.rst:156 +msgid "" +"Make sure you're working with a freshly updated checkout of the CPython " +"trunk." +msgstr "请确保 CPython 是最新的已签出版本。" + +#: ../../howto/clinic.rst:159 +msgid "" +"Find a Python builtin that calls either :c:func:`PyArg_ParseTuple` or " +":c:func:`PyArg_ParseTupleAndKeywords`, and hasn't been converted to work " +"with Argument Clinic yet. For my example I'm using " +"``_pickle.Pickler.dump()``." +msgstr "" +"找到一个调用 :c:func:`PyArg_ParseTuple` 或 :c:func:`PyArg_ParseTupleAndKeywords` " +",且未被转换为采用 Argument Clinic 的 Python 内置程序。这里用了 ``_pickle.Pickler.dump()``。" + +#: ../../howto/clinic.rst:164 +msgid "" +"If the call to the ``PyArg_Parse`` function uses any of the following format" +" units:" +msgstr "如果对 ``PyArg_Parse`` 函数的调用采用了以下格式化单元:" + +#: ../../howto/clinic.rst:176 +msgid "" +"or if it has multiple calls to :c:func:`PyArg_ParseTuple`, you should choose" +" a different function. Argument Clinic *does* support all of these " +"scenarios. But these are advanced topics—let's do something simpler for " +"your first function." +msgstr "" +"或者多次调用 :c:func:`PyArg_ParseTuple`,则应再选一个函数。Argument Clinic *确实* 支持上述这些状况。 " +"但这些都是高阶内容——第一次就简单一些吧。" + +#: ../../howto/clinic.rst:181 +msgid "" +"Also, if the function has multiple calls to :c:func:`PyArg_ParseTuple` or " +":c:func:`PyArg_ParseTupleAndKeywords` where it supports different types for " +"the same argument, or if the function uses something besides PyArg_Parse " +"functions to parse its arguments, it probably isn't suitable for conversion " +"to Argument Clinic. Argument Clinic doesn't support generic functions or " +"polymorphic parameters." +msgstr "" +"此外,如果多次调用 :c:func:`PyArg_ParseTuple` 或 :c:func:`PyArg_ParseTupleAndKeywords`" +" 且同一参数需支持不同的类型,或者用到 PyArg_Parse 以外的函数来解析参数,则可能不适合转换为 Argument Clinic 形式。 " +"Argument Clinic 不支持通用函数或多态参数。" + +#: ../../howto/clinic.rst:188 +msgid "Add the following boilerplate above the function, creating our block::" +msgstr "在函数上方添加以下模板,创建块:" + +#: ../../howto/clinic.rst:193 +msgid "" +"Cut the docstring and paste it in between the ``[clinic]`` lines, removing " +"all the junk that makes it a properly quoted C string. When you're done you " +"should have just the text, based at the left margin, with no line wider than" +" 80 characters. (Argument Clinic will preserve indents inside the " +"docstring.)" +msgstr "" +"剪下文档字符串并粘贴到 ``[clinic]`` 行之间,去除所有的无用字符,使其成为一个正确引用的 C " +"字符串。最有应该只留下带有左侧缩进的文本,且行宽不大于 80 个字符。(参数 Clinic 将保留文档字符串中的缩进。)" + +#: ../../howto/clinic.rst:199 +msgid "" +"If the old docstring had a first line that looked like a function signature," +" throw that line away. (The docstring doesn't need it anymore—when you use " +"``help()`` on your builtin in the future, the first line will be built " +"automatically based on the function's signature.)" +msgstr "" +"如果文档字符串的第一行看起来像是函数的签名,就把这一行去掉吧。((文档串不再需要用到它——将来对内置函数调用 ``help()`` " +"时,第一行将根据函数的签名自动建立。)" + +#: ../../howto/clinic.rst:205 ../../howto/clinic.rst:226 +#: ../../howto/clinic.rst:250 ../../howto/clinic.rst:308 +#: ../../howto/clinic.rst:348 ../../howto/clinic.rst:375 +#: ../../howto/clinic.rst:481 ../../howto/clinic.rst:533 +msgid "Sample::" +msgstr "示例:" + +#: ../../howto/clinic.rst:211 +msgid "" +"If your docstring doesn't have a \"summary\" line, Argument Clinic will " +"complain. So let's make sure it has one. The \"summary\" line should be a " +"paragraph consisting of a single 80-column line at the beginning of the " +"docstring." +msgstr "" +"如果文档字符串中没有“摘要”行,Argument Clinic 会报错。所以应确保带有摘要行。 " +"“摘要”行应为在文档字符串开头的一个段落,由一个80列的单行构成。" + +#: ../../howto/clinic.rst:216 +msgid "" +"(Our example docstring consists solely of a summary line, so the sample code" +" doesn't have to change for this step.)" +msgstr "(示例的文档字符串只包括一个摘要行,所以示例代码这一步不需改动)。" + +#: ../../howto/clinic.rst:219 +msgid "" +"Above the docstring, enter the name of the function, followed by a blank " +"line. This should be the Python name of the function, and should be the " +"full dotted path to the function—it should start with the name of the " +"module, include any sub-modules, and if the function is a method on a class " +"it should include the class name too." +msgstr "" +"在文档字符串上方,输入函数的名称,后面是空行。这应是函数的 Python " +"名称,而且应是句点分隔的完整路径——以模块的名称开始,包含所有子模块名,若函数为类方法则还应包含类名。" + +#: ../../howto/clinic.rst:234 +msgid "" +"If this is the first time that module or class has been used with Argument " +"Clinic in this C file, you must declare the module and/or class. Proper " +"Argument Clinic hygiene prefers declaring these in a separate block " +"somewhere near the top of the C file, in the same way that include files and" +" statics go at the top. (In our sample code we'll just show the two blocks " +"next to each other.)" +msgstr "" +"如果是第一次在此 C 文件中用到 Argument Clinic 的模块或类,必须对其进行声明。清晰的 Argument Clinic 写法应于 C " +"文件顶部附近的某个单独块中声明这些,就像 include 文件和 statics 放在顶部一样。(在这里的示例代码中,将这两个块相邻给出。)" + +#: ../../howto/clinic.rst:242 +msgid "" +"The name of the class and module should be the same as the one seen by " +"Python. Check the name defined in the :c:type:`PyModuleDef` or " +":c:type:`PyTypeObject` as appropriate." +msgstr "" +"类和模块的名称应与暴露给 Python 的相同。请适时检查 :c:type:`PyModuleDef` 或 :c:type:`PyTypeObject`" +" 中定义的名称。" + +#: ../../howto/clinic.rst:246 +msgid "" +"When you declare a class, you must also specify two aspects of its type in " +"C: the type declaration you'd use for a pointer to an instance of this " +"class, and a pointer to the :c:type:`PyTypeObject` for this class." +msgstr "" +"在声明某个类时,还必须指定其 C 语言类型的两个部分:用于指向该类实例的指针的类型声明,和指向该类 :c:type:`PyTypeObject` " +"的指针。" + +#: ../../howto/clinic.rst:266 +msgid "" +"Declare each of the parameters to the function. Each parameter should get " +"its own line. All the parameter lines should be indented from the function " +"name and the docstring." +msgstr "声明函数的所有参数。每个参数都应另起一行。所有的参数行都应对齐函数名和文档字符串进行缩进。" + +#: ../../howto/clinic.rst:270 +msgid "The general form of these parameter lines is as follows:" +msgstr "这些参数行的常规形式如下:" + +#: ../../howto/clinic.rst:276 +msgid "If the parameter has a default value, add that after the converter:" +msgstr "如果参数带有缺省值,请加在转换器之后:" + +#: ../../howto/clinic.rst:283 +msgid "" +"Argument Clinic's support for \"default values\" is quite sophisticated; " +"please see :ref:`the section below on default values ` for " +"more information." +msgstr "" +"Argument Clinic 对 “缺省值” 的支持方式相当复杂;更多信息请参见 :ref:`关于缺省值的部分 ` 。" + +#: ../../howto/clinic.rst:287 +msgid "Add a blank line below the parameters." +msgstr "在参数行下面添加一个空行。" + +#: ../../howto/clinic.rst:289 +msgid "" +"What's a \"converter\"? It establishes both the type of the variable used " +"in C, and the method to convert the Python value into a C value at runtime. " +"For now you're going to use what's called a \"legacy converter\"—a " +"convenience syntax intended to make porting old code into Argument Clinic " +"easier." +msgstr "" +" “转换器”是什么?它既确定了 C 语言要采用的变量类型,又确定了运行时将 Python 值转换成 C " +"语言值的方法。现在需用到的是所谓“传统转换器”——快捷语法,旨在让旧代码更容易移植到 Argument Clinic。" + +#: ../../howto/clinic.rst:296 +msgid "" +"For each parameter, copy the \"format unit\" for that parameter from the " +"``PyArg_Parse()`` format argument and specify *that* as its converter, as a " +"quoted string. (\"format unit\" is the formal name for the one-to-three " +"character substring of the ``format`` parameter that tells the argument " +"parsing function what the type of the variable is and how to convert it. " +"For more on format units please see :ref:`arg-parsing`.)" +msgstr "" +"每个参数都要从``PyArg_Parse()`` 格式参数中复制其 “格式单元”,并以带引号字符串的形式指定其转换器。(“格式单元”是 " +"``format`` 参数的1-3个字符的正式名称,用于让参数解析函数知晓该变量的类型及转换方法。关于格式单位的更多信息,请参阅 :ref:`arg-" +"parsing` )。" + +#: ../../howto/clinic.rst:305 +msgid "" +"For multicharacter format units like ``z#``, use the entire two-or-three " +"character string." +msgstr "对于像 ``z#`` 这样的多字符格式单元,要使用2-3个字符组成的整个字符串。" + +#: ../../howto/clinic.rst:323 +msgid "" +"If your function has ``|`` in the format string, meaning some parameters " +"have default values, you can ignore it. Argument Clinic infers which " +"parameters are optional based on whether or not they have default values." +msgstr "" +"如果函数的格式字符串包含 ``|``,意味着有些参数带有缺省值,这可以忽略。Argument Clinic 根据参数是否有缺省值来推断哪些参数是可选的。" + +#: ../../howto/clinic.rst:328 +msgid "" +"If your function has ``$`` in the format string, meaning it takes keyword-" +"only arguments, specify ``*`` on a line by itself before the first keyword-" +"only argument, indented the same as the parameter lines." +msgstr "如果函数的格式字符串中包含 $,意味着只接受关键字参数,请在第一个关键字参数之前单独给出一行 ``*``,缩进与参数行对齐。" + +#: ../../howto/clinic.rst:333 +msgid "(``_pickle.Pickler.dump`` has neither, so our sample is unchanged.)" +msgstr "(``_pickle.Pickler.dump`` 两种格式字符串都没有,所以这里的示例不用改动。)" + +#: ../../howto/clinic.rst:336 +msgid "" +"If the existing C function calls :c:func:`PyArg_ParseTuple` (as opposed to " +":c:func:`PyArg_ParseTupleAndKeywords`), then all its arguments are " +"positional-only." +msgstr "" +"如果 C 函数调用的是 :c:func:`PyArg_ParseTuple` (而不是 " +":c:func:`PyArg_ParseTupleAndKeywords`),那么其所有参数均是仅限位置参数。" + +#: ../../howto/clinic.rst:340 +msgid "" +"To mark all parameters as positional-only in Argument Clinic, add a ``/`` on" +" a line by itself after the last parameter, indented the same as the " +"parameter lines." +msgstr "若要在 Argument Clinic 中把所有参数都标记为只认位置,请在最后一个参数后面一行加入一个 ``/``,缩进程度与参数行对齐。" + +#: ../../howto/clinic.rst:344 +msgid "" +"Currently this is all-or-nothing; either all parameters are positional-only," +" or none of them are. (In the future Argument Clinic may relax this " +"restriction.)" +msgstr "目前这个标记是全体生效;要么所有参数都是只认位置,要么都不是。(以后 Argument Clinic 可能会放宽这一限制。)" + +#: ../../howto/clinic.rst:364 +msgid "" +"It's helpful to write a per-parameter docstring for each parameter. But per-" +"parameter docstrings are optional; you can skip this step if you prefer." +msgstr "为每个参数都编写一个文档字符串,这很有意义。但这是可选项;可以跳过这一步。" + +#: ../../howto/clinic.rst:368 +msgid "" +"Here's how to add a per-parameter docstring. The first line of the per-" +"parameter docstring must be indented further than the parameter definition." +" The left margin of this first line establishes the left margin for the " +"whole per-parameter docstring; all the text you write will be outdented by " +"this amount. You can write as much text as you like, across multiple lines " +"if you wish." +msgstr "" +"下面介绍如何添加逐参数的文档字符串。逐参数文档字符串的第一行必须比参数定义多缩进一层。第一行的左边距即确定了所有逐参数文档字符串的左边距;所有文档字符串文本都要同等缩进。文本可以用多行编写。" + +#: ../../howto/clinic.rst:392 +msgid "" +"Save and close the file, then run ``Tools/clinic/clinic.py`` on it. With " +"luck everything worked---your block now has output, and a ``.c.h`` file has " +"been generated! Reopen the file in your text editor to see::" +msgstr "" +"保存并关闭该文件,然后运行 ``Tools/clinic/clinic.py`` 。 运气好的话就万事大吉——程序块现在有了输出信息,并且生成了一个 " +"``.c.h`` 文件!在文本编辑器中重新打开该文件,可以看到:" + +#: ../../howto/clinic.rst:411 +msgid "" +"Obviously, if Argument Clinic didn't produce any output, it's because it " +"found an error in your input. Keep fixing your errors and retrying until " +"Argument Clinic processes your file without complaint." +msgstr "" +"显然,如果 Argument Clinic 未产生任何输出,那是因为在输入信息中发现了错误。继续修正错误并重试,直至 Argument Clinic " +"正确地处理好文件。" + +#: ../../howto/clinic.rst:415 +msgid "" +"For readability, most of the glue code has been generated to a ``.c.h`` " +"file. You'll need to include that in your original ``.c`` file, typically " +"right after the clinic module block::" +msgstr "" +"为了便于阅读,大部分“胶水”代码已写入 ``.c.h`` 文件中。需在原 ``.c`` 文件中包含这个文件,通常是在 clinic 模块之后:" + +#: ../../howto/clinic.rst:421 +msgid "" +"Double-check that the argument-parsing code Argument Clinic generated looks " +"basically the same as the existing code." +msgstr "请仔细检查 Argument Clinic 生成的参数解析代码,是否与原有代码基本相同。" + +#: ../../howto/clinic.rst:424 +msgid "" +"First, ensure both places use the same argument-parsing function. The " +"existing code must call either :c:func:`PyArg_ParseTuple` or " +":c:func:`PyArg_ParseTupleAndKeywords`; ensure that the code generated by " +"Argument Clinic calls the *exact* same function." +msgstr "" +"首先,确保两种代码使用相同的参数解析函数。原有代码必须调用 :c:func:`PyArg_ParseTuple` 或 " +":c:func:`PyArg_ParseTupleAndKeywords` ;确保 Argument Clinic 生成的代码调用 *完全* " +"相同的函数。" + +#: ../../howto/clinic.rst:430 +msgid "" +"Second, the format string passed in to :c:func:`PyArg_ParseTuple` or " +":c:func:`PyArg_ParseTupleAndKeywords` should be *exactly* the same as the " +"hand-written one in the existing function, up to the colon or semi-colon." +msgstr "" +"其次,传给 :c:func:`PyArg_ParseTuple` 或 :c:func:`PyArg_ParseTupleAndKeywords` " +"的格式字符串应该 *完全* 与原有函数中的相同,直到冒号或分号为止。" + +#: ../../howto/clinic.rst:435 +msgid "" +"(Argument Clinic always generates its format strings with a ``:`` followed " +"by the name of the function. If the existing code's format string ends with" +" ``;``, to provide usage help, this change is harmless—don't worry about " +"it.)" +msgstr "" +"(Argument Clinic 生成的格式串一定是函数名后跟着 ``:``。如果现有代码的格式串以 ``;`` " +"结尾,这种改动不会影响使用,因此不必担心。)" + +#: ../../howto/clinic.rst:440 +msgid "" +"Third, for parameters whose format units require two arguments (like a " +"length variable, or an encoding string, or a pointer to a conversion " +"function), ensure that the second argument is *exactly* the same between the" +" two invocations." +msgstr "第三,如果格式单元需要指定两个参数(比如长度、编码字符串或指向转换函数的指针),请确保第二个参数在两次调用时 *完全* 相同。" + +#: ../../howto/clinic.rst:445 +msgid "" +"Fourth, inside the output portion of the block you'll find a preprocessor " +"macro defining the appropriate static :c:type:`PyMethodDef` structure for " +"this builtin::" +msgstr "第四,在输出部分会有一个预处理器宏,为该内置函数定义合适的静态 :c:type:`PyMethodDef` 结构:" + +#: ../../howto/clinic.rst:452 +msgid "" +"This static structure should be *exactly* the same as the existing static " +":c:type:`PyMethodDef` structure for this builtin." +msgstr "此静态结构应与本内置函数现有的静态结构 :c:type:`PyMethodDef` *完全* 相同。" + +#: ../../howto/clinic.rst:455 +msgid "" +"If any of these items differ in *any way*, adjust your Argument Clinic " +"function specification and rerun ``Tools/clinic/clinic.py`` until they *are*" +" the same." +msgstr "" +"只要上述这几点存在不一致,请调整 Argument Clinic 函数定义,并重新运行 ``Tools/clinic/clinic.py`` ,直至 " +"*完全* 相同。" + +#: ../../howto/clinic.rst:460 +msgid "" +"Notice that the last line of its output is the declaration of your \"impl\" " +"function. This is where the builtin's implementation goes. Delete the " +"existing prototype of the function you're modifying, but leave the opening " +"curly brace. Now delete its argument parsing code and the declarations of " +"all the variables it dumps the arguments into. Notice how the Python " +"arguments are now arguments to this impl function; if the implementation " +"used different names for these variables, fix it." +msgstr "" +"注意,输出部分的最后一行是“实现”函数的声明。也就是该内置函数的实现代码所在。删除需要修改的函数的现有原型,但保留开头的大括号。再删除其参数解析代码和输入变量的所有声明。注意现在" +" Python 所见的参数即为此实现函数的参数;如果实现代码给这些变量采用了不同的命名,请进行修正。" + +#: ../../howto/clinic.rst:468 +msgid "" +"Let's reiterate, just because it's kind of weird. Your code should now look" +" like this::" +msgstr "因为稍显怪异,所以还是重申一下。现在的代码应该如下所示:" + +#: ../../howto/clinic.rst:477 +msgid "" +"Argument Clinic generated the checksum line and the function prototype just " +"above it. You should write the opening (and closing) curly braces for the " +"function, and the implementation inside." +msgstr "上面是 Argument Clinic 生成的校验值和函数原型。函数应该带有闭合的大括号,实现代码位于其中。" + +#: ../../howto/clinic.rst:522 +msgid "" +"Remember the macro with the :c:type:`PyMethodDef` structure for this " +"function? Find the existing :c:type:`PyMethodDef` structure for this " +"function and replace it with a reference to the macro. (If the builtin is " +"at module scope, this will probably be very near the end of the file; if the" +" builtin is a class method, this will probably be below but relatively near " +"to the implementation.)" +msgstr "" +"还记得用到 :c:type:`PyMethodDef` 结构的宏吧?找到函数中已有的 :c:type:`PyMethodDef` " +"结构,并替换为宏的引用。(如果函数是模块级的,可能会在文件的末尾附近;如果函数是个类方法,则可能会在靠近实现代码的下方。)" + +#: ../../howto/clinic.rst:529 +msgid "" +"Note that the body of the macro contains a trailing comma. So when you " +"replace the existing static :c:type:`PyMethodDef` structure with the macro, " +"*don't* add a comma to the end." +msgstr "注意,宏尾部带有一个逗号。所以若用宏替换已有的静态结构 :c:type:`PyMethodDef` 时,*请勿* 在结尾添加逗号了。" + +#: ../../howto/clinic.rst:542 +msgid "" +"Compile, then run the relevant portions of the regression-test suite. This " +"change should not introduce any new compile-time warnings or errors, and " +"there should be no externally-visible change to Python's behavior." +msgstr "编译,然后运行回归测试套件中的有关测试程序。不应引入新的编译警告或错误,且对 Python 也不应有外部可见的变化。" + +#: ../../howto/clinic.rst:546 +msgid "" +"Well, except for one difference: ``inspect.signature()`` run on your " +"function should now provide a valid signature!" +msgstr "差别只有一个,即 ``inspect.signature()`` 运行于新的函数上,现在应该新提供一个有效的签名!" + +#: ../../howto/clinic.rst:549 +msgid "" +"Congratulations, you've ported your first function to work with Argument " +"Clinic!" +msgstr "祝贺你,现在已经用 Argument Clinic 移植了第一个函数。" + +#: ../../howto/clinic.rst:552 +msgid "Advanced Topics" +msgstr "进阶" + +#: ../../howto/clinic.rst:554 +msgid "" +"Now that you've had some experience working with Argument Clinic, it's time " +"for some advanced topics." +msgstr "现在 Argument Clinic 的使用经验已具备了一些,该介绍一些高级内容了。" + +#: ../../howto/clinic.rst:559 +msgid "Symbolic default values" +msgstr "符号化默认值" + +#: ../../howto/clinic.rst:561 +msgid "" +"The default value you provide for a parameter can't be any arbitrary " +"expression. Currently the following are explicitly supported:" +msgstr "提供给参数的默认值不能是表达式。目前明确支持以下形式:" + +#: ../../howto/clinic.rst:564 +msgid "Numeric constants (integer and float)" +msgstr "数值型常数(整数和浮点数)。" + +#: ../../howto/clinic.rst:565 +msgid "String constants" +msgstr "字符串常量" + +#: ../../howto/clinic.rst:566 +msgid "``True``, ``False``, and ``None``" +msgstr "``True`` 、 ``False`` 和 ``None`` 。" + +#: ../../howto/clinic.rst:567 +msgid "" +"Simple symbolic constants like ``sys.maxsize``, which must start with the " +"name of the module" +msgstr "以模块名开头的简单符号常量,如 ``sys.maxsize``。" + +#: ../../howto/clinic.rst:570 +msgid "" +"In case you're curious, this is implemented in ``from_builtin()`` in " +"``Lib/inspect.py``." +msgstr "如果你感到好奇,这是在 ``from_builtin()`` ( ``Lib/inspect.py``) 中实现的。" + +#: ../../howto/clinic.rst:573 +msgid "" +"(In the future, this may need to get even more elaborate, to allow full " +"expressions like ``CONSTANT - 1``.)" +msgstr "(未来可能需要加以细化,以便可以采用 ``CONSTANT - 1`` 之类的完整表达式。)" + +#: ../../howto/clinic.rst:578 +msgid "Renaming the C functions and variables generated by Argument Clinic" +msgstr "对 Argument Clinic 生成的 C 函数和变量进行重命名" + +#: ../../howto/clinic.rst:580 +msgid "" +"Argument Clinic automatically names the functions it generates for you. " +"Occasionally this may cause a problem, if the generated name collides with " +"the name of an existing C function. There's an easy solution: override the " +"names used for the C functions. Just add the keyword ``\"as\"`` to your " +"function declaration line, followed by the function name you wish to use. " +"Argument Clinic will use that function name for the base (generated) " +"function, then add ``\"_impl\"`` to the end and use that for the name of the" +" impl function." +msgstr "" +"Argument Clinic 会自动为其生成的函数命名。如果生成的名称与现有的 C 函数冲突,这偶尔可能会造成问题,有一个简单的解决方案:覆盖 C " +"函数的名称。只要在函数声明中加入关键字 ``\"as\"`` ,然后再加上要使用的函数名。Argument Clinic " +"将以该函数名为基础作为(生成的)函数名,然后在后面加上 ``\"_impl\"``,并用作实现函数的名称。" + +#: ../../howto/clinic.rst:588 +msgid "" +"For example, if we wanted to rename the C function names generated for " +"``pickle.Pickler.dump``, it'd look like this::" +msgstr "例如,若对 ``pickle.Pickler.dump`` 生成的 C 函数进行重命名,应如下所示:" + +#: ../../howto/clinic.rst:596 +msgid "" +"The base function would now be named ``pickler_dumper()``, and the impl " +"function would now be named ``pickler_dumper_impl()``." +msgstr "原函数会被命名为 ``pickler_dumper()``,而实现函数现在被命名为``pickler_dumper_impl()``。" + +#: ../../howto/clinic.rst:600 +msgid "" +"Similarly, you may have a problem where you want to give a parameter a " +"specific Python name, but that name may be inconvenient in C. Argument " +"Clinic allows you to give a parameter different names in Python and in C, " +"using the same ``\"as\"`` syntax::" +msgstr "" +"同样的问题依然会出现:想给某个参数取个 Python 用名,但在 C 语言中可能用不了。Argument Clinic 允许在 Python 和 C " +"中为同一个参数取不同的名字,依然是利用 ``\"as\"`` 语法:" + +#: ../../howto/clinic.rst:614 +msgid "" +"Here, the name used in Python (in the signature and the ``keywords`` array) " +"would be ``file``, but the C variable would be named ``file_obj``." +msgstr "" +"这里 Python(签名和 ``keywords`` 数组中)中用的名称是 ``file``,而 C 语言中的变量命名为 ``file_obj``。" + +#: ../../howto/clinic.rst:617 +msgid "You can use this to rename the ``self`` parameter too!" +msgstr "``self`` 参数也可以进行重命名。" + +#: ../../howto/clinic.rst:621 +msgid "Converting functions using PyArg_UnpackTuple" +msgstr "函数转换会用到 PyArg_UnpackTuple" + +#: ../../howto/clinic.rst:623 +msgid "" +"To convert a function parsing its arguments with " +":c:func:`PyArg_UnpackTuple`, simply write out all the arguments, specifying " +"each as an ``object``. You may specify the ``type`` argument to cast the " +"type as appropriate. All arguments should be marked positional-only (add a " +"``/`` on a line by itself after the last argument)." +msgstr "" +"若要将函数转换为采用 :c:func:`PyArg_UnpackTuple` 解析其参数,只需写出所有参数,并将每个参数定义为 " +"``object``。可以指定 ``type`` 参数,以便能转换为合适的类型。所有参数都应标记为只认位置(在最后一个参数后面加上 ``/``)。" + +#: ../../howto/clinic.rst:629 +msgid "" +"Currently the generated code will use :c:func:`PyArg_ParseTuple`, but this " +"will change soon." +msgstr "目前,所生成的代码将会用到 :c:func:`PyArg_ParseTuple` ,但很快会做出改动。" + +#: ../../howto/clinic.rst:633 +msgid "Optional Groups" +msgstr "可选参数组" + +#: ../../howto/clinic.rst:635 +msgid "" +"Some legacy functions have a tricky approach to parsing their arguments: " +"they count the number of positional arguments, then use a ``switch`` " +"statement to call one of several different :c:func:`PyArg_ParseTuple` calls " +"depending on how many positional arguments there are. (These functions " +"cannot accept keyword-only arguments.) This approach was used to simulate " +"optional arguments back before :c:func:`PyArg_ParseTupleAndKeywords` was " +"created." +msgstr "" +"有些过时的函数用到了一种让人头疼的函数解析方式:计算位置参数的数量,据此用 ``switch`` 语句进行各个不同的 " +":c:func:`PyArg_ParseTuple` 调用。(这些函数不能接受只认关键字的参数。)在没有 " +":c:func:`PyArg_ParseTupleAndKeywords` 之前,这种方式曾被用于模拟可选参数。" + +#: ../../howto/clinic.rst:642 +msgid "" +"While functions using this approach can often be converted to use " +":c:func:`PyArg_ParseTupleAndKeywords`, optional arguments, and default " +"values, it's not always possible. Some of these legacy functions have " +"behaviors :c:func:`PyArg_ParseTupleAndKeywords` doesn't directly support. " +"The most obvious example is the builtin function ``range()``, which has an " +"optional argument on the *left* side of its required argument! Another " +"example is ``curses.window.addch()``, which has a group of two arguments " +"that must always be specified together. (The arguments are called ``x`` and" +" ``y``; if you call the function passing in ``x``, you must also pass in " +"``y``—and if you don't pass in ``x`` you may not pass in ``y`` either.)" +msgstr "" +"虽然这种函数通常可以转换为采用 :c:func:`PyArg_ParseTupleAndKeywords` " +"、可选参数和默认值的方式,但并不是全都可以做到。这些过时函数中, :c:func:`PyArg_ParseTupleAndKeywords` " +"并不能直接支持某些功能。最明显的例子是内置函数 ``range()``,它的必需参数的 *左* 边存在一个可选参数!另一个例子是 " +"``curses.window.addch()``,它的两个参数是一组,必须同时指定。(参数名为 ``x`` 和 ``y``;如果调用函数时传入了 " +"``x``,则必须同时传入``y``;如果未传入 ``x`` ,则也不能传入 ``y``)。" + +#: ../../howto/clinic.rst:654 +msgid "" +"In any case, the goal of Argument Clinic is to support argument parsing for " +"all existing CPython builtins without changing their semantics. Therefore " +"Argument Clinic supports this alternate approach to parsing, using what are " +"called *optional groups*. Optional groups are groups of arguments that must " +"all be passed in together. They can be to the left or the right of the " +"required arguments. They can *only* be used with positional-only " +"parameters." +msgstr "" +"不管怎么说,Argument Clinic 的目标就是在不改变语义的情况下支持所有现有 CPython 内置参数的解析。因此,Argument " +"Clinic 采用所谓的 *可选组* 方案来支持这种解析方式。可选组是必须一起传入的参数组。他们可以在必需参数的左边或右边,*只能* " +"用于只认位置的参数。" + +#: ../../howto/clinic.rst:662 +msgid "" +"Optional groups are *only* intended for use when converting functions that " +"make multiple calls to :c:func:`PyArg_ParseTuple`! Functions that use *any* " +"other approach for parsing arguments should *almost never* be converted to " +"Argument Clinic using optional groups. Functions using optional groups " +"currently cannot have accurate signatures in Python, because Python just " +"doesn't understand the concept. Please avoid using optional groups wherever" +" possible." +msgstr "" +"可选组 *仅* 适用于多次调用 :c:func:`PyArg_ParseTuple` 的函数!采用 *任何* 其他方式解析参数的函数,应该 *几乎不* " +"采用可选组转换为 Argument Clinic 解析。目前,采用可选组的函数在 Python 中无法获得准确的签名,因为 Python " +"不能理解这个概念。请尽可能避免使用可选组。" + +#: ../../howto/clinic.rst:671 +msgid "" +"To specify an optional group, add a ``[`` on a line by itself before the " +"parameters you wish to group together, and a ``]`` on a line by itself after" +" these parameters. As an example, here's how ``curses.window.addch`` uses " +"optional groups to make the first two parameters and the last parameter " +"optional::" +msgstr "" +"若要定义可选组,可在要分组的参数前面加上 ``[``,在这些参数后加上``]`` ,要在同一行上。举个例子,下面是 " +"``curses.window.addch`` 采用可选组的用法,前两个参数和最后一个参数可选:" + +#: ../../howto/clinic.rst:700 +msgid "Notes:" +msgstr "注释:" + +#: ../../howto/clinic.rst:702 +msgid "" +"For every optional group, one additional parameter will be passed into the " +"impl function representing the group. The parameter will be an int named " +"``group_{direction}_{number}``, where ``{direction}`` is either ``right`` or" +" ``left`` depending on whether the group is before or after the required " +"parameters, and ``{number}`` is a monotonically increasing number (starting " +"at 1) indicating how far away the group is from the required parameters. " +"When the impl is called, this parameter will be set to zero if this group " +"was unused, and set to non-zero if this group was used. (By used or unused, " +"I mean whether or not the parameters received arguments in this invocation.)" +msgstr "" +"每一个可选组,都会额外传入一个代表分组的参数。 参数为 int 型,名为 ``group_{direction}_{number}``,其中 " +"``{direction}`` 取决于此参数组位于必需参数 ``right`` 还是 ``left``,而 ``{number}`` 是一个递增数字(从" +" 1 开始),表示此参数组与必需参数之间的距离。 在调用函数时,若未用到此参数组则此参数将设为零,若用到了参数组则该参数为非零。 " +"所谓的用到或未用到,是指在本次调用中形参是否收到了实参。" + +#: ../../howto/clinic.rst:713 +msgid "" +"If there are no required arguments, the optional groups will behave as if " +"they're to the right of the required arguments." +msgstr "如果不存在必需参数,可选组的行为等同于出现在必需参数的右侧。" + +#: ../../howto/clinic.rst:716 +msgid "" +"In the case of ambiguity, the argument parsing code favors parameters on the" +" left (before the required parameters)." +msgstr "在模棱两可的情况下,参数解析代码更倾向于参数左侧(在必需参数之前)。" + +#: ../../howto/clinic.rst:719 +msgid "Optional groups can only contain positional-only parameters." +msgstr "可选组只能包含只认位置的参数。" + +#: ../../howto/clinic.rst:721 +msgid "" +"Optional groups are *only* intended for legacy code. Please do not use " +"optional groups for new code." +msgstr "可选组 *仅限* 用于过时代码。请勿在新的代码中使用可选组。" + +#: ../../howto/clinic.rst:726 +msgid "Using real Argument Clinic converters, instead of \"legacy converters\"" +msgstr "采用真正的 Argument Clinic 转换器,而不是 “传统转换器”" + +#: ../../howto/clinic.rst:728 +msgid "" +"To save time, and to minimize how much you need to learn to achieve your " +"first port to Argument Clinic, the walkthrough above tells you to use " +"\"legacy converters\". \"Legacy converters\" are a convenience, designed " +"explicitly to make porting existing code to Argument Clinic easier. And to " +"be clear, their use is acceptable when porting code for Python 3.4." +msgstr "" +"为了节省时间,尽量减少要学习的内容,实现第一次适用 Argument Clinic " +"的移植,上述练习简述的是“传统转换器”的用法。“传统转换器”只是一种简便用法,目的就是更容易地让现有代码移植为适用于 Argument Clinic " +"。说白了,在移植 Python 3.4 的代码时,可以考虑采用。" + +#: ../../howto/clinic.rst:735 +msgid "" +"However, in the long term we probably want all our blocks to use Argument " +"Clinic's real syntax for converters. Why? A couple reasons:" +msgstr "不过从长远来看,可能希望所有代码块都采用真正的 Argument Clinic 转换器语法。原因如下:" + +#: ../../howto/clinic.rst:739 +msgid "" +"The proper converters are far easier to read and clearer in their intent." +msgstr "合适的转换器可读性更好,意图也更清晰。" + +#: ../../howto/clinic.rst:740 +msgid "" +"There are some format units that are unsupported as \"legacy converters\", " +"because they require arguments, and the legacy converter syntax doesn't " +"support specifying arguments." +msgstr "有些格式单元是“传统转换器”无法支持的,因为这些格式需要带上参数,而传统转换器的语法不支持指定参数。" + +#: ../../howto/clinic.rst:743 +msgid "" +"In the future we may have a new argument parsing library that isn't " +"restricted to what :c:func:`PyArg_ParseTuple` supports; this flexibility " +"won't be available to parameters using legacy converters." +msgstr "" +"后续可能会有新版的参数解析库,提供超过 :c:func:`PyArg_ParseTuple` 支持的功能;而这种灵活性将无法适用于传统转换器转换的参数。" + +#: ../../howto/clinic.rst:747 +msgid "" +"Therefore, if you don't mind a little extra effort, please use the normal " +"converters instead of legacy converters." +msgstr "因此,若是不介意多花一点精力,请使用正常的转换器,而不是传统转换器。" + +#: ../../howto/clinic.rst:750 +msgid "" +"In a nutshell, the syntax for Argument Clinic (non-legacy) converters looks " +"like a Python function call. However, if there are no explicit arguments to" +" the function (all functions take their default values), you may omit the " +"parentheses. Thus ``bool`` and ``bool()`` are exactly the same converters." +msgstr "" +"简而言之,Argument Clinic(非传统)转换器的语法看起来像是 Python " +"函数调用。但如果函数没有明确的参数(所有函数都取默认值),则可以省略括号。因此 ``bool`` 和 ``bool()`` 是完全相同的转换器。" + +#: ../../howto/clinic.rst:756 +msgid "" +"All arguments to Argument Clinic converters are keyword-only. All Argument " +"Clinic converters accept the following arguments:" +msgstr "Argument Clinic 转换器的所有参数都只认关键字。所有 Argument Clinic 转换器均可接受以下参数:" + +#: ../../howto/clinic.rst:764 ../../howto/clinic.rst:1252 +msgid "``c_default``" +msgstr "``c_default``" + +#: ../../howto/clinic.rst:760 +msgid "" +"The default value for this parameter when defined in C. Specifically, this " +"will be the initializer for the variable declared in the \"parse function\"." +" See :ref:`the section on default values ` for how to use " +"this. Specified as a string." +msgstr "" +"该参数在 C 语言中的默认值。具体来说,将是在“解析函数”中声明的变量的初始化器。用法参见 :ref:`the section on default " +"values ` 。定义为字符串。" + +#: ../../howto/clinic.rst:769 +msgid "``annotation``" +msgstr "``annotation``" + +#: ../../howto/clinic.rst:767 +msgid "" +"The annotation value for this parameter. Not currently supported, because " +":pep:`8` mandates that the Python library may not use annotations." +msgstr "参数的注解值。目前尚不支持,因为 :pep:`8` 规定 Python 库不得使用注解。" + +#: ../../howto/clinic.rst:771 +msgid "" +"In addition, some converters accept additional arguments. Here is a list of" +" these arguments, along with their meanings:" +msgstr "此外,某些转换器还可接受额外的参数。下面列出了这些额外参数及其含义:" + +#: ../../howto/clinic.rst:780 +msgid "``accept``" +msgstr "``accept``" + +#: ../../howto/clinic.rst:775 +msgid "" +"A set of Python types (and possibly pseudo-types); this restricts the " +"allowable Python argument to values of these types. (This is not a general-" +"purpose facility; as a rule it only supports specific lists of types as " +"shown in the legacy converter table.)" +msgstr "" +"一些 Python 类型的集合(可能还有伪类型);用于限制只接受这些类型的 Python 参数。(并非通用特性;只支持传统转换器列表中给出的类型)。" + +#: ../../howto/clinic.rst:780 +msgid "To accept ``None``, add ``NoneType`` to this set." +msgstr "若要能接受 ``None``,请在集合中添加 ``NoneType``。" + +#: ../../howto/clinic.rst:785 +msgid "``bitwise``" +msgstr "``bitwise``" + +#: ../../howto/clinic.rst:783 +msgid "" +"Only supported for unsigned integers. The native integer value of this " +"Python argument will be written to the parameter without any range checking," +" even for negative values." +msgstr "仅用于无符号整数。写入形参的将是 Python 实参的原生整数值,不做任何越界检查,即便是负值也一样。" + +#: ../../howto/clinic.rst:790 ../../howto/clinic.rst:1266 +msgid "``converter``" +msgstr "``converter``" + +#: ../../howto/clinic.rst:788 +msgid "" +"Only supported by the ``object`` converter. Specifies the name of a :ref:`C" +" \"converter function\" ` to use to convert this object to a " +"native type." +msgstr "仅用于 ``object`` 转换器。为某个 :ref:`C 转换函数 ` 指定名称,用于将对象转换为原生类型。" + +#: ../../howto/clinic.rst:795 +msgid "``encoding``" +msgstr "``encoding``" + +#: ../../howto/clinic.rst:793 +msgid "" +"Only supported for strings. Specifies the encoding to use when converting " +"this string from a Python str (Unicode) value into a C ``char *`` value." +msgstr "仅用于字符串。指定将 Python str(Unicode) 转换为 C 语言的 ``char *`` 时应该采用的编码。" + +#: ../../howto/clinic.rst:799 +msgid "``subclass_of``" +msgstr "``subclass_of``" + +#: ../../howto/clinic.rst:798 +msgid "" +"Only supported for the ``object`` converter. Requires that the Python value" +" be a subclass of a Python type, as expressed in C." +msgstr "仅用于 ``object`` 转换器。要求 Python 值是 Python 类型的子类,用 C 语言表示。" + +#: ../../howto/clinic.rst:804 ../../howto/clinic.rst:1238 +msgid "``type``" +msgstr "``type``" + +#: ../../howto/clinic.rst:802 +msgid "" +"Only supported for the ``object`` and ``self`` converters. Specifies the C " +"type that will be used to declare the variable. Default value is " +"``\"PyObject *\"``." +msgstr "仅用于 ``object`` 和 ``self`` 转换器。指定用于声明变量的 C 类型。 默认值是 ``\"PyObject *\"``。" + +#: ../../howto/clinic.rst:810 +msgid "``zeroes``" +msgstr "``zeroes``" + +#: ../../howto/clinic.rst:807 +msgid "" +"Only supported for strings. If true, embedded NUL bytes (``'\\\\0'``) are " +"permitted inside the value. The length of the string will be passed in to " +"the impl function, just after the string parameter, as a parameter named " +"``_length``." +msgstr "" +"仅用于字符串。如果为 True,则允许在值中嵌入 NUL 字节(``'\\\\0'``)。字符串的长度将通过名为 " +"``_length`` 的参数传入,跟在字符串参数的后面。" + +#: ../../howto/clinic.rst:812 +msgid "" +"Please note, not every possible combination of arguments will work. Usually " +"these arguments are implemented by specific ``PyArg_ParseTuple`` *format " +"units*, with specific behavior. For example, currently you cannot call " +"``unsigned_short`` without also specifying ``bitwise=True``. Although it's " +"perfectly reasonable to think this would work, these semantics don't map to " +"any existing format unit. So Argument Clinic doesn't support it. (Or, at " +"least, not yet.)" +msgstr "" +"请注意,并不是所有参数的组合都能正常生效。通常这些参数是由相应的 ``PyArg_ParseTuple`` *格式单元* " +"实现的,行为是固定的。比如目前不能不指定 ``bitwise=True`` 就去调用 " +"``unsigned_short``。虽然完全有理由认为这样可行,但这些语义并没有映射到任何现有的格式单元。所以 Argument Clinic " +"并不支持。(或者说,至少目前还不支持。)" + +#: ../../howto/clinic.rst:820 +msgid "" +"Below is a table showing the mapping of legacy converters into real Argument" +" Clinic converters. On the left is the legacy converter, on the right is " +"the text you'd replace it with." +msgstr "下表列出了传统转换器与真正的 Argument Clinic 转换器之间的映射关系。左边是传统的转换器,右边是应该换成的文本。" + +#: ../../howto/clinic.rst:825 +msgid "``'B'``" +msgstr "``'B'``" + +#: ../../howto/clinic.rst:825 +msgid "``unsigned_char(bitwise=True)``" +msgstr "``unsigned_char(bitwise=True)``" + +#: ../../howto/clinic.rst:826 +msgid "``'b'``" +msgstr "``'b'``" + +#: ../../howto/clinic.rst:826 +msgid "``unsigned_char``" +msgstr "``unsigned_char``" + +#: ../../howto/clinic.rst:827 +msgid "``'c'``" +msgstr "``'c'``" + +#: ../../howto/clinic.rst:827 +msgid "``char``" +msgstr "``char``" + +#: ../../howto/clinic.rst:828 +msgid "``'C'``" +msgstr "``'C'``" + +#: ../../howto/clinic.rst:828 +msgid "``int(accept={str})``" +msgstr "``int(accept={str})``" + +#: ../../howto/clinic.rst:829 +msgid "``'d'``" +msgstr "``'d'``" + +#: ../../howto/clinic.rst:829 +msgid "``double``" +msgstr "``double``" + +#: ../../howto/clinic.rst:830 +msgid "``'D'``" +msgstr "``'D'``" + +#: ../../howto/clinic.rst:830 +msgid "``Py_complex``" +msgstr "``Py_complex``" + +#: ../../howto/clinic.rst:831 +msgid "``'es'``" +msgstr "``'es'``" + +#: ../../howto/clinic.rst:831 +msgid "``str(encoding='name_of_encoding')``" +msgstr "``str(encoding='name_of_encoding')``" + +#: ../../howto/clinic.rst:832 +msgid "``'es#'``" +msgstr "``'es#'``" + +#: ../../howto/clinic.rst:832 +msgid "``str(encoding='name_of_encoding', zeroes=True)``" +msgstr "``str(encoding='name_of_encoding', zeroes=True)``" + +#: ../../howto/clinic.rst:833 +msgid "``'et'``" +msgstr "``'et'``" + +#: ../../howto/clinic.rst:833 +msgid "``str(encoding='name_of_encoding', accept={bytes, bytearray, str})``" +msgstr "``str(encoding='name_of_encoding', accept={bytes, bytearray, str})``" + +#: ../../howto/clinic.rst:834 +msgid "``'et#'``" +msgstr "``'et#'``" + +#: ../../howto/clinic.rst:834 +msgid "" +"``str(encoding='name_of_encoding', accept={bytes, bytearray, str}, " +"zeroes=True)``" +msgstr "" +"``str(encoding='name_of_encoding', accept={bytes, bytearray, str}, " +"zeroes=True)``" + +#: ../../howto/clinic.rst:835 +msgid "``'f'``" +msgstr "``'f'``" + +#: ../../howto/clinic.rst:835 +msgid "``float``" +msgstr "``float``" + +#: ../../howto/clinic.rst:836 +msgid "``'h'``" +msgstr "``'h'``" + +#: ../../howto/clinic.rst:836 +msgid "``short``" +msgstr "``short``" + +#: ../../howto/clinic.rst:837 +msgid "``'H'``" +msgstr "``'H'``" + +#: ../../howto/clinic.rst:837 +msgid "``unsigned_short(bitwise=True)``" +msgstr "``unsigned_short(bitwise=True)``" + +#: ../../howto/clinic.rst:838 +msgid "``'i'``" +msgstr "``'i'``" + +#: ../../howto/clinic.rst:838 +msgid "``int``" +msgstr "``int``" + +#: ../../howto/clinic.rst:839 +msgid "``'I'``" +msgstr "``'I'``" + +#: ../../howto/clinic.rst:839 +msgid "``unsigned_int(bitwise=True)``" +msgstr "``unsigned_int(bitwise=True)``" + +#: ../../howto/clinic.rst:840 +msgid "``'k'``" +msgstr "``'k'``" + +#: ../../howto/clinic.rst:840 +msgid "``unsigned_long(bitwise=True)``" +msgstr "``unsigned_long(bitwise=True)``" + +#: ../../howto/clinic.rst:841 +msgid "``'K'``" +msgstr "``'K'``" + +#: ../../howto/clinic.rst:841 +msgid "``unsigned_long_long(bitwise=True)``" +msgstr "``unsigned_long_long(bitwise=True)``" + +#: ../../howto/clinic.rst:842 +msgid "``'l'``" +msgstr "``'l'``" + +#: ../../howto/clinic.rst:842 +msgid "``long``" +msgstr "``long``" + +#: ../../howto/clinic.rst:843 +msgid "``'L'``" +msgstr "``'L'``" + +#: ../../howto/clinic.rst:843 +msgid "``long long``" +msgstr "``long long``" + +#: ../../howto/clinic.rst:844 +msgid "``'n'``" +msgstr "``'n'``" + +#: ../../howto/clinic.rst:844 +msgid "``Py_ssize_t``" +msgstr "``Py_ssize_t``" + +#: ../../howto/clinic.rst:845 +msgid "``'O'``" +msgstr "``'O'``" + +#: ../../howto/clinic.rst:845 +msgid "``object``" +msgstr "``object``" + +#: ../../howto/clinic.rst:846 +msgid "``'O!'``" +msgstr "``'O!'``" + +#: ../../howto/clinic.rst:846 +msgid "``object(subclass_of='&PySomething_Type')``" +msgstr "``object(subclass_of='&PySomething_Type')``" + +#: ../../howto/clinic.rst:847 +msgid "``'O&'``" +msgstr "``'O&'``" + +#: ../../howto/clinic.rst:847 +msgid "``object(converter='name_of_c_function')``" +msgstr "``object(converter='name_of_c_function')``" + +#: ../../howto/clinic.rst:848 +msgid "``'p'``" +msgstr "``'p'``" + +#: ../../howto/clinic.rst:848 +msgid "``bool``" +msgstr "``bool``" + +#: ../../howto/clinic.rst:849 +msgid "``'S'``" +msgstr "``'S'``" + +#: ../../howto/clinic.rst:849 +msgid "``PyBytesObject``" +msgstr "``PyBytesObject``" + +#: ../../howto/clinic.rst:850 +msgid "``'s'``" +msgstr "``'s'``" + +#: ../../howto/clinic.rst:850 +msgid "``str``" +msgstr "``str``" + +#: ../../howto/clinic.rst:851 +msgid "``'s#'``" +msgstr "``'s#'``" + +#: ../../howto/clinic.rst:851 +msgid "``str(zeroes=True)``" +msgstr "``str(zeroes=True)``" + +#: ../../howto/clinic.rst:852 +msgid "``'s*'``" +msgstr "``'s*'``" + +#: ../../howto/clinic.rst:852 +msgid "``Py_buffer(accept={buffer, str})``" +msgstr "``Py_buffer(accept={buffer, str})``" + +#: ../../howto/clinic.rst:853 +msgid "``'U'``" +msgstr "``'U'``" + +#: ../../howto/clinic.rst:853 +msgid "``unicode``" +msgstr "``unicode``" + +#: ../../howto/clinic.rst:854 +msgid "``'u'``" +msgstr "``'u'``" + +#: ../../howto/clinic.rst:854 +msgid "``Py_UNICODE``" +msgstr "``Py_UNICODE``" + +#: ../../howto/clinic.rst:855 +msgid "``'u#'``" +msgstr "``'u#'``" + +#: ../../howto/clinic.rst:855 +msgid "``Py_UNICODE(zeroes=True)``" +msgstr "``Py_UNICODE(zeroes=True)``" + +#: ../../howto/clinic.rst:856 +msgid "``'w*'``" +msgstr "``'w*'``" + +#: ../../howto/clinic.rst:856 +msgid "``Py_buffer(accept={rwbuffer})``" +msgstr "``Py_buffer(accept={rwbuffer})``" + +#: ../../howto/clinic.rst:857 +msgid "``'Y'``" +msgstr "``'Y'``" + +#: ../../howto/clinic.rst:857 +msgid "``PyByteArrayObject``" +msgstr "``PyByteArrayObject``" + +#: ../../howto/clinic.rst:858 +msgid "``'y'``" +msgstr "``'y'``" + +#: ../../howto/clinic.rst:858 +msgid "``str(accept={bytes})``" +msgstr "``str(accept={bytes})``" + +#: ../../howto/clinic.rst:859 +msgid "``'y#'``" +msgstr "``'y#'``" + +#: ../../howto/clinic.rst:859 +msgid "``str(accept={robuffer}, zeroes=True)``" +msgstr "``str(accept={robuffer}, zeroes=True)``" + +#: ../../howto/clinic.rst:860 +msgid "``'y*'``" +msgstr "``'y*'``" + +#: ../../howto/clinic.rst:860 +msgid "``Py_buffer``" +msgstr "``Py_buffer``" + +#: ../../howto/clinic.rst:861 +msgid "``'Z'``" +msgstr "``'Z'``" + +#: ../../howto/clinic.rst:861 +msgid "``Py_UNICODE(accept={str, NoneType})``" +msgstr "``Py_UNICODE(accept={str, NoneType})``" + +#: ../../howto/clinic.rst:862 +msgid "``'Z#'``" +msgstr "``'Z#'``" + +#: ../../howto/clinic.rst:862 +msgid "``Py_UNICODE(accept={str, NoneType}, zeroes=True)``" +msgstr "``Py_UNICODE(accept={str, NoneType}, zeroes=True)``" + +#: ../../howto/clinic.rst:863 +msgid "``'z'``" +msgstr "``'z'``" + +#: ../../howto/clinic.rst:863 +msgid "``str(accept={str, NoneType})``" +msgstr "``str(accept={str, NoneType})``" + +#: ../../howto/clinic.rst:864 +msgid "``'z#'``" +msgstr "``'z#'``" + +#: ../../howto/clinic.rst:864 +msgid "``str(accept={str, NoneType}, zeroes=True)``" +msgstr "``str(accept={str, NoneType}, zeroes=True)``" + +#: ../../howto/clinic.rst:865 +msgid "``'z*'``" +msgstr "``'z*'``" + +#: ../../howto/clinic.rst:865 +msgid "``Py_buffer(accept={buffer, str, NoneType})``" +msgstr "``Py_buffer(accept={buffer, str, NoneType})``" + +#: ../../howto/clinic.rst:868 +msgid "" +"As an example, here's our sample ``pickle.Pickler.dump`` using the proper " +"converter::" +msgstr "举个例子,下面是采用合适的转换器的例子 ``pickle.Pickler.dump``:" + +#: ../../howto/clinic.rst:881 +msgid "" +"One advantage of real converters is that they're more flexible than legacy " +"converters. For example, the ``unsigned_int`` converter (and all the " +"``unsigned_`` converters) can be specified without ``bitwise=True``. Their " +"default behavior performs range checking on the value, and they won't accept" +" negative numbers. You just can't do that with a legacy converter!" +msgstr "" +"真正的转换器有一个优点,就是比传统的转换器更加灵活。例如,``unsigned_int`` 转换器(以及所有 ``unsigned_`` " +"转换器)可以不设置 ``bitwise=True`` 。 他们默认会对数值进行范围检查,而且不会接受负数。 用传统转换器就做不到这一点。" + +#: ../../howto/clinic.rst:887 +msgid "" +"Argument Clinic will show you all the converters it has available. For each" +" converter it'll show you all the parameters it accepts, along with the " +"default value for each parameter. Just run ``Tools/clinic/clinic.py " +"--converters`` to see the full list." +msgstr "" +"Argument Clinic 会列明其全部转换器。每个转换器都会给出可接受的全部参数,以及每个参数的默认值。只要运行 " +"``Tools/clinic/clinic.py --converters`` 就能得到完整的列表。" + +#: ../../howto/clinic.rst:893 +msgid "Py_buffer" +msgstr "Py_buffer" + +#: ../../howto/clinic.rst:895 +msgid "" +"When using the ``Py_buffer`` converter (or the ``'s*'``, ``'w*'``, ``'*y'``," +" or ``'z*'`` legacy converters), you *must* not call " +":c:func:`PyBuffer_Release` on the provided buffer. Argument Clinic generates" +" code that does it for you (in the parsing function)." +msgstr "" +"在使用 ``Py_buffer`` 转换器(或者 ``'s*'``、``'w*'``、``'*y'`` 或 ``'z*'`` 传统转换器)时,*不可* " +"在所提供的缓冲区上调用 :c:func:`PyBuffer_Release`。 Argument Clinic " +"生成的代码会自动完成此操作(在解析函数中)。" + +#: ../../howto/clinic.rst:903 +msgid "Advanced converters" +msgstr "高级转换器" + +#: ../../howto/clinic.rst:905 +msgid "" +"Remember those format units you skipped for your first time because they " +"were advanced? Here's how to handle those too." +msgstr "还记得编写第一个函数时跳过的那些格式单元吗,因为他们是高级内容?下面就来介绍这些内容。" + +#: ../../howto/clinic.rst:908 +msgid "" +"The trick is, all those format units take arguments—either conversion " +"functions, or types, or strings specifying an encoding. (But \"legacy " +"converters\" don't support arguments. That's why we skipped them for your " +"first function.) The argument you specified to the format unit is now an " +"argument to the converter; this argument is either ``converter`` (for " +"``O&``), ``subclass_of`` (for ``O!``), or ``encoding`` (for all the format " +"units that start with ``e``)." +msgstr "" +"其实诀窍在于,这些格式单元都需要给出参数——要么是转换函数,要么是类型,要么是指定编码的字符串。(但 " +"“传统转换器”不支持参数。这就是为什么第一个函数要跳过这些内容)。为格式单元指定的参数于是就成了转换器的参数;参数可以是 " +"``converter``(对于 ``O&``)、``subclass_of``(对于 ``O!``),或者是 ``encoding`` (对于 " +"``e`` 开头的格式单元)。" + +#: ../../howto/clinic.rst:916 +msgid "" +"When using ``subclass_of``, you may also want to use the other custom " +"argument for ``object()``: ``type``, which lets you set the type actually " +"used for the parameter. For example, if you want to ensure that the object " +"is a subclass of ``PyUnicode_Type``, you probably want to use the converter " +"``object(type='PyUnicodeObject *', subclass_of='&PyUnicode_Type')``." +msgstr "" +"在使用 ``subclass_of`` 时,可能还需要用到 ``object()`` " +"的另一个自定义参数:``type``,用于设置参数的实际类型。例如,为了确保对象是 ``PyUnicode_Type`` 的子类,可能想采用转换器 " +"``object(type='PyUnicodeObject *', subclass_of='&PyUnicode_Type')``。" + +#: ../../howto/clinic.rst:922 +msgid "" +"One possible problem with using Argument Clinic: it takes away some possible" +" flexibility for the format units starting with ``e``. When writing a " +"``PyArg_Parse`` call by hand, you could theoretically decide at runtime what" +" encoding string to pass in to :c:func:`PyArg_ParseTuple`. But now this " +"string must be hard-coded at Argument-Clinic-preprocessing-time. This " +"limitation is deliberate; it made supporting this format unit much easier, " +"and may allow for future optimizations. This restriction doesn't seem " +"unreasonable; CPython itself always passes in static hard-coded encoding " +"strings for parameters whose format units start with ``e``." +msgstr "" +"Argument Clinic 用起来可能存在一个问题:丧失了 ``e`` 开头的格式单位的一些灵活性。在手工编写 ``PyArg_Parse`` " +"调用时,理论上可以在运行时决定传给 :c:func:`PyArg_ParseTuple` 的编码字符串。但现在这个字符串必须在 Argument-" +"Clinic 预处理时进行硬编码。这个限制是故意设置的;以便简化对这种格式单元的支持,并允许以后进行优化。这个限制似乎并不合理;CPython " +"本身总是为 ``e`` 开头的格式单位参数传入静态的硬编码字符串。" + +#: ../../howto/clinic.rst:935 +msgid "Parameter default values" +msgstr "参数的默认值" + +#: ../../howto/clinic.rst:937 +msgid "" +"Default values for parameters can be any of a number of values. At their " +"simplest, they can be string, int, or float literals:" +msgstr "参数的默认值可以是多个值中的一个。最简单的可以是字符串、int 或 float 字面量。" + +#: ../../howto/clinic.rst:946 +msgid "They can also use any of Python's built-in constants:" +msgstr "还可以使用 Python 的任何内置常量。" + +#: ../../howto/clinic.rst:954 +msgid "" +"There's also special support for a default value of ``NULL``, and for simple" +" expressions, documented in the following sections." +msgstr "对默认值 ``NULL`` 和简单表达式还提供特别的支持,下面将一一介绍。" + +#: ../../howto/clinic.rst:959 +msgid "The ``NULL`` default value" +msgstr "默认值 ``NULL``" + +#: ../../howto/clinic.rst:961 +msgid "" +"For string and object parameters, you can set them to ``None`` to indicate " +"that there's no default. However, that means the C variable will be " +"initialized to ``Py_None``. For convenience's sakes, there's a special " +"value called ``NULL`` for just this reason: from Python's perspective it " +"behaves like a default value of ``None``, but the C variable is initialized " +"with ``NULL``." +msgstr "" +"对于字符串和对象参数而言,可以设为 ``None``,表示没有默认值。但这意味着会将 C 变量初始化为 " +"``Py_None``。为了方便起见,提供了一个特殊值 ``NULL``,目的就是为了让 Python 认为默认值就是 ``None``,而 C " +"变量则会初始化为 ``NULL``。" + +#: ../../howto/clinic.rst:969 +msgid "Expressions specified as default values" +msgstr "设为默认值的表达式" + +#: ../../howto/clinic.rst:971 +msgid "" +"The default value for a parameter can be more than just a literal value. It " +"can be an entire expression, using math operators and looking up attributes " +"on objects. However, this support isn't exactly simple, because of some " +"non-obvious semantics." +msgstr "参数的默认值不仅可以是字面量。还可以是一个完整的表达式,可采用数学运算符及对象的属性。但这种支持并没有那么简单,因为存在一些不明显的语义。" + +#: ../../howto/clinic.rst:976 +msgid "Consider the following example:" +msgstr "请考虑以下例子:" + +#: ../../howto/clinic.rst:982 +msgid "" +"``sys.maxsize`` can have different values on different platforms. Therefore" +" Argument Clinic can't simply evaluate that expression locally and hard-code" +" it in C. So it stores the default in such a way that it will get evaluated" +" at runtime, when the user asks for the function's signature." +msgstr "" +"``sys.maxsize`` 在不同的系统平台可能有不同的值。因此,Argument Clinic 不能简单地在本底环境对表达式求值并用 C " +"语言硬编码。所以默认值将用表达式的方式存储下来,运行的时候在请求函数签名时会被求值。" + +#: ../../howto/clinic.rst:987 +msgid "" +"What namespace is available when the expression is evaluated? It's " +"evaluated in the context of the module the builtin came from. So, if your " +"module has an attribute called \"``max_widgets``\", you may simply use it:" +msgstr "" +"在对表达式进行求值时,可以使用什么命名空间呢?求值过程运行于内置模块的上下文中。 因此,如果模块带有名为 ``max_widgets`` " +"的属性,直接引用即可。" + +#: ../../howto/clinic.rst:995 +msgid "" +"If the symbol isn't found in the current module, it fails over to looking in" +" ``sys.modules``. That's how it can find ``sys.maxsize`` for example. " +"(Since you don't know in advance what modules the user will load into their " +"interpreter, it's best to restrict yourself to modules that are preloaded by" +" Python itself.)" +msgstr "" +"如果表达式不在当前模块中,就会去 ``sys.modules`` 查找。比如 ``sys.maxsize`` " +"就是如此找到的。(因为事先不知道用户会加载哪些模块到解释器中,所以最好只用到 Python 会预加载的模块。)" + +#: ../../howto/clinic.rst:1000 +msgid "" +"Evaluating default values only at runtime means Argument Clinic can't " +"compute the correct equivalent C default value. So you need to tell it " +"explicitly. When you use an expression, you must also specify the equivalent" +" expression in C, using the ``c_default`` parameter to the converter:" +msgstr "" +"仅当运行时才对缺省值求值,意味着 Argument Clinic 无法计算出正确的 C " +"缺省值。所以需显式给出。在使用表达式时,必须同时用转换器的``c_default`` 参数指定 C 语言中的等价表达式。" + +#: ../../howto/clinic.rst:1009 +msgid "" +"Another complication: Argument Clinic can't know in advance whether or not " +"the expression you supply is valid. It parses it to make sure it looks " +"legal, but it can't *actually* know. You must be very careful when using " +"expressions to specify values that are guaranteed to be valid at runtime!" +msgstr "" +"还有一个问题也比较复杂。Argument Clinic 无法事先知道表达式是否有效。 解析只能保证看起来是有效值,但无法 *实际* " +"知晓。在用表达式时须十分小心,确保在运行时能得到有效值。" + +#: ../../howto/clinic.rst:1014 +msgid "" +"Finally, because expressions must be representable as static C values, there" +" are many restrictions on legal expressions. Here's a list of Python " +"features you're not permitted to use:" +msgstr "最后一点,由于表达式必须能表示为静态的 C 语言值,所以存在许多限制。 以下列出了不得使用的 Python 特性:" + +#: ../../howto/clinic.rst:1018 +msgid "Function calls." +msgstr "功能" + +#: ../../howto/clinic.rst:1019 +msgid "Inline if statements (``3 if foo else 5``)." +msgstr "行内 if 语句(``3 if foo else 5`` )" + +#: ../../howto/clinic.rst:1020 +msgid "Automatic sequence unpacking (``*[1, 2, 3]``)." +msgstr "序列类自动解包(``*[1, 2, 3]``)" + +#: ../../howto/clinic.rst:1021 +msgid "List/set/dict comprehensions and generator expressions." +msgstr "列表、集合、字典的解析和生成器表达式。" + +#: ../../howto/clinic.rst:1022 +msgid "Tuple/list/set/dict literals." +msgstr "元组、列表、集合、字典的字面量" + +#: ../../howto/clinic.rst:1027 +msgid "Using a return converter" +msgstr "返回值转换器" + +#: ../../howto/clinic.rst:1029 +msgid "" +"By default the impl function Argument Clinic generates for you returns " +"``PyObject *``. But your C function often computes some C type, then " +"converts it into the ``PyObject *`` at the last moment. Argument Clinic " +"handles converting your inputs from Python types into native C types—why not" +" have it convert your return value from a native C type into a Python type " +"too?" +msgstr "" +"Argument Clinic 生成的植入函数默认会返回 ``PyObject *``。但是通常 C 函数的任务是要对某些 C " +"类型进行计算,然后将其转换为 ``PyObject *`` 作为结果。Argument Clinic 可以将输入参数由 Python 类型转换为本地 C" +" 类型——为什么不让它将返回值由本地 C 类型转换为 Python 类型呢?" + +#: ../../howto/clinic.rst:1035 +msgid "" +"That's what a \"return converter\" does. It changes your impl function to " +"return some C type, then adds code to the generated (non-impl) function to " +"handle converting that value into the appropriate ``PyObject *``." +msgstr "" +"这就是“返回值转换器”的用途。它将植入函数修改成返回某种 C 语言类型,然后在生成的(非植入)函数中添加代码,以便将 C 语言值转换为合适的 " +"``PyObject *``。" + +#: ../../howto/clinic.rst:1039 +msgid "" +"The syntax for return converters is similar to that of parameter converters." +" You specify the return converter like it was a return annotation on the " +"function itself. Return converters behave much the same as parameter " +"converters; they take arguments, the arguments are all keyword-only, and if " +"you're not changing any of the default arguments you can omit the " +"parentheses." +msgstr "" +"返回值转换器的语法与参数转换器的类似。返回值转换器的定义方式,类似于函数返回值的注解。返回值转换器的行为与参数转换器基本相同,接受参数,参数只认关键字,如果不修改默认参数则可省略括号。" + +#: ../../howto/clinic.rst:1045 +msgid "" +"(If you use both ``\"as\"`` *and* a return converter for your function, the " +"``\"as\"`` should come before the return converter.)" +msgstr "(如果函数同时用到了 ``\"as\"`` 和返回值转换器, ``\"as\"`` 应位于返回值转换器之前。)" + +#: ../../howto/clinic.rst:1048 +msgid "" +"There's one additional complication when using return converters: how do you" +" indicate an error has occurred? Normally, a function returns a valid " +"(non-``NULL``) pointer for success, and ``NULL`` for failure. But if you " +"use an integer return converter, all integers are valid. How can Argument " +"Clinic detect an error? Its solution: each return converter implicitly " +"looks for a special value that indicates an error. If you return that " +"value, and an error has been set (``PyErr_Occurred()`` returns a true " +"value), then the generated code will propagate the error. Otherwise it will" +" encode the value you return like normal." +msgstr "" +"返回值转换器还存在一个复杂的问题:出错信息如何表示?通常函数在执行成功时会返回一个有效(非 ``NULL``)指针,失败则返回 " +"``NULL``。但如果使用了整数的返回值转换器,所有整数都是有效值。Argument Clinic " +"怎么检测错误呢?解决方案是:返回值转换器会隐含寻找一个代表错误的特殊值。如果返回该特殊值,且设置了出错标记( ``PyErr_Occurred()`` " +"返回 True),那么生成的代码会传递该错误。否则,会对返回值进行正常编码。" + +#: ../../howto/clinic.rst:1057 +msgid "Currently Argument Clinic supports only a few return converters:" +msgstr "目前 Argument Clinic 只支持少数几种返回值转换器。" + +#: ../../howto/clinic.rst:1072 +msgid "" +"None of these take parameters. For the first three, return -1 to indicate " +"error. For ``DecodeFSDefault``, the return type is ``const char *``; return" +" a ``NULL`` pointer to indicate an error." +msgstr "" +"这些转换器都不需要参数。前3个转换器如果返回 -1 则表示出错。``DecodeFSDefault`` 的返回值类型是 ``const char " +"*``;若返回 ``NULL`` 指针则表示出错。" + +#: ../../howto/clinic.rst:1076 +msgid "" +"(There's also an experimental ``NoneType`` converter, which lets you return " +"``Py_None`` on success or ``NULL`` on failure, without having to increment " +"the reference count on ``Py_None``. I'm not sure it adds enough clarity to " +"be worth using.)" +msgstr "" +"(还有一个 ``NoneType`` 转换器是实验性质的,成功时返回 ``Py_None`` ,失败则返回 ``NULL``,且不会增加 " +"``Py_None`` 的引用计数。此转换器是否值得适用,尚不明确)。" + +#: ../../howto/clinic.rst:1081 +msgid "" +"To see all the return converters Argument Clinic supports, along with their " +"parameters (if any), just run ``Tools/clinic/clinic.py --converters`` for " +"the full list." +msgstr "" +"只要运行 ``Tools/clinic/clinic.py --converters`` ,即可查看 Argument Clinic " +"支持的所有返回值转换器,包括其参数。" + +#: ../../howto/clinic.rst:1087 +msgid "Cloning existing functions" +msgstr "克隆已有的函数" + +#: ../../howto/clinic.rst:1089 +msgid "" +"If you have a number of functions that look similar, you may be able to use " +"Clinic's \"clone\" feature. When you clone an existing function, you reuse:" +msgstr "如果已有一些函数比较相似,或许可以采用 Clinic 的“克隆”功能。 克隆之后能够复用以下内容:" + +#: ../../howto/clinic.rst:1093 +msgid "its parameters, including" +msgstr "参数,包括:" + +#: ../../howto/clinic.rst:1095 +msgid "their names," +msgstr "名称" + +#: ../../howto/clinic.rst:1097 +msgid "their converters, with all parameters," +msgstr "转换器(带有全部参数)" + +#: ../../howto/clinic.rst:1099 +msgid "their default values," +msgstr "默认值" + +#: ../../howto/clinic.rst:1101 +msgid "their per-parameter docstrings," +msgstr "参数前的文档字符串" + +#: ../../howto/clinic.rst:1103 +msgid "" +"their *kind* (whether they're positional only, positional or keyword, or " +"keyword only), and" +msgstr "*类别* (只认位置、位置或关键字、只认关键字)" + +#: ../../howto/clinic.rst:1106 +msgid "its return converter." +msgstr "返回值转换器" + +#: ../../howto/clinic.rst:1108 +msgid "" +"The only thing not copied from the original function is its docstring; the " +"syntax allows you to specify a new docstring." +msgstr "唯一不从原函数中复制的是文档字符串;这样就能指定一个新的文档串。" + +#: ../../howto/clinic.rst:1111 +msgid "Here's the syntax for cloning a function::" +msgstr "下面是函数的克隆方法:" + +#: ../../howto/clinic.rst:1119 +msgid "" +"(The functions can be in different modules or classes. I wrote " +"``module.class`` in the sample just to illustrate that you must use the full" +" path to *both* functions.)" +msgstr "(原函数可以位于不同的模块或类中。示例中的 ``module.class`` 只是为了说明,*两个* 函数都必须使用全路径)。" + +#: ../../howto/clinic.rst:1123 +msgid "" +"Sorry, there's no syntax for partially-cloning a function, or cloning a " +"function then modifying it. Cloning is an all-or nothing proposition." +msgstr "对不起,没有什么语法可对函数进行部分克隆或克隆后进行修改。克隆要么全有要么全无。" + +#: ../../howto/clinic.rst:1126 +msgid "" +"Also, the function you are cloning from must have been previously defined in" +" the current file." +msgstr "另外,要克隆的函数必须在当前文件中已有定义。" + +#: ../../howto/clinic.rst:1130 +msgid "Calling Python code" +msgstr "调用 Python 代码" + +#: ../../howto/clinic.rst:1132 +msgid "" +"The rest of the advanced topics require you to write Python code which lives" +" inside your C file and modifies Argument Clinic's runtime state. This is " +"simple: you simply define a Python block." +msgstr "" +"下面的高级内容需要编写 Python 代码,存于 C 文件中,并修改 Argument Clinic 的运行状态。其实很简单:只需定义一个 Python" +" 块。" + +#: ../../howto/clinic.rst:1136 +msgid "" +"A Python block uses different delimiter lines than an Argument Clinic " +"function block. It looks like this::" +msgstr "Python 块的分隔线与 Argument Clinic 函数块不同。如下所示:" + +#: ../../howto/clinic.rst:1143 +msgid "" +"All the code inside the Python block is executed at the time it's parsed. " +"All text written to stdout inside the block is redirected into the " +"\"output\" after the block." +msgstr "Python 块内的所有代码都会在解析时执行。块内写入 stdout 的所有文本都被重定向到块后的“输出”部分。" + +#: ../../howto/clinic.rst:1147 +msgid "" +"As an example, here's a Python block that adds a static integer variable to " +"the C code::" +msgstr "以下例子包含了 Python 块,用于在 C 代码中添加一个静态整数变量:" + +#: ../../howto/clinic.rst:1158 +msgid "Using a \"self converter\"" +msgstr "self 转换器的用法" + +#: ../../howto/clinic.rst:1160 +msgid "" +"Argument Clinic automatically adds a \"self\" parameter for you using a " +"default converter. It automatically sets the ``type`` of this parameter to " +"the \"pointer to an instance\" you specified when you declared the type. " +"However, you can override Argument Clinic's converter and specify one " +"yourself. Just add your own ``self`` parameter as the first parameter in a " +"block, and ensure that its converter is an instance of ``self_converter`` or" +" a subclass thereof." +msgstr "" +"Argument Clinic 用一个默认的转换器自动添加一个“self”参数。自动将 self 参数的 ``type`` " +"设为声明类型时指定的“指向实例的指针”。不过 Argument Clinic 的转换器可被覆盖,也即自己指定一个转换器。只要将自己的 ``self`` " +"参数作为块的第一个参数即可,并确保其转换器是 ``self_converter`` 的实例或其子类。" + +#: ../../howto/clinic.rst:1169 +msgid "" +"What's the point? This lets you override the type of ``self``, or give it a" +" different default name." +msgstr "这有什么用呢?可用于覆盖 ``self`` 的类型,或为其给个不同的默认名称。" + +#: ../../howto/clinic.rst:1172 +msgid "" +"How do you specify the custom type you want to cast ``self`` to? If you only" +" have one or two functions with the same type for ``self``, you can directly" +" use Argument Clinic's existing ``self`` converter, passing in the type you " +"want to use as the ``type`` parameter::" +msgstr "" +"如何指定 ``self`` 对应的自定义类型呢?如果只有 ``self`` 类型相同的一两个函数,可以直接使用 Argument Clinic 现有的 " +"``self`` 转换器,把要用的类型作为 ``type`` 参数传入:" + +#: ../../howto/clinic.rst:1188 +msgid "" +"On the other hand, if you have a lot of functions that will use the same " +"type for ``self``, it's best to create your own converter, subclassing " +"``self_converter`` but overwriting the ``type`` member::" +msgstr "" +"如果有很多函数将使用同一类型的 ``self``,则最好创建自己的转换器,继承自 ``self_converter`` 类但要覆盖其 ``type`` " +"成员:" + +#: ../../howto/clinic.rst:1211 +msgid "Writing a custom converter" +msgstr "编写自定义转换器" + +#: ../../howto/clinic.rst:1213 +msgid "" +"As we hinted at in the previous section... you can write your own " +"converters! A converter is simply a Python class that inherits from " +"``CConverter``. The main purpose of a custom converter is if you have a " +"parameter using the ``O&`` format unit—parsing this parameter means calling " +"a :c:func:`PyArg_ParseTuple` \"converter function\"." +msgstr "" +"上一节中已有提及……可以编写自己的转换器!转换器就是一个继承自``CConverter`` 的 Python 类。假如有个参数采用了 ``O&`` " +"格式,对此参数进行解析就会去调用某个“转换器函数” :c:func:`PyArg_ParseTuple` ,也就会用到自定义转换器。" + +#: ../../howto/clinic.rst:1219 +msgid "" +"Your converter class should be named ``*something*_converter``. If the name " +"follows this convention, then your converter class will be automatically " +"registered with Argument Clinic; its name will be the name of your class " +"with the ``_converter`` suffix stripped off. (This is accomplished with a " +"metaclass.)" +msgstr "" +"自定义转换器类应命名为 ``*something*_converter``。只要按此规则命名,自定义转换器类就会在 Argument Clinic " +"中自动注册;转换器的名称就是去除了 ``_converter`` 后缀的类名。(通过元类完成)。" + +#: ../../howto/clinic.rst:1225 +msgid "" +"You shouldn't subclass ``CConverter.__init__``. Instead, you should write a" +" ``converter_init()`` function. ``converter_init()`` always accepts a " +"``self`` parameter; after that, all additional parameters *must* be keyword-" +"only. Any arguments passed in to the converter in Argument Clinic will be " +"passed along to your ``converter_init()``." +msgstr "" +"不得由 ``CConverter.__init__`` 派生子类。而应编写一个 ``converter_init()`` " +"函数。``converter_init()`` 必须能接受一个 ``self`` 参数;所有后续的其他参数 *必须* 是只认关键字的参数。传给 " +"Argument Clinic 转换器的所有参数都会传入自定义 ``converter_init()`` 函数。" + +#: ../../howto/clinic.rst:1232 +msgid "" +"There are some additional members of ``CConverter`` you may wish to specify " +"in your subclass. Here's the current list:" +msgstr "``CConverter`` 的其他一些成员,可能需要在自定义子类中定义。下面列出了目前的成员:" + +#: ../../howto/clinic.rst:1236 +msgid "" +"The C type to use for this variable. ``type`` should be a Python string " +"specifying the type, e.g. ``int``. If this is a pointer type, the type " +"string should end with ``' *'``." +msgstr "" +"变量要采用的 C 语言数据类型。``type`` 应为 ``int`` 之类的 Python 字符串,用于指定变量的类型。若为指针类型,则字符串应以 " +"``' *'`` 结尾。" + +#: ../../howto/clinic.rst:1242 +msgid "``default``" +msgstr "``default``" + +#: ../../howto/clinic.rst:1241 +msgid "" +"The Python default value for this parameter, as a Python value. Or the magic" +" value ``unspecified`` if there is no default." +msgstr "该参数的缺省值,为 Python 数据类型。若无缺省值,则为 ``unspecified``。" + +#: ../../howto/clinic.rst:1247 +msgid "``py_default``" +msgstr "``py_default``" + +#: ../../howto/clinic.rst:1245 +msgid "" +"``default`` as it should appear in Python code, as a string. Or ``None`` if " +"there is no default." +msgstr "用 Python 代码表示的 ``default`` ,为字符串类型。若无缺省值,则为 ``None`` 。" + +#: ../../howto/clinic.rst:1250 +msgid "" +"``default`` as it should appear in C code, as a string. Or ``None`` if there" +" is no default." +msgstr "用 C 代码表示的 ``default``, 为字符串类型。若无缺省值,则为 ``None`` 。" + +#: ../../howto/clinic.rst:1263 +msgid "``c_ignored_default``" +msgstr "``c_ignored_default``" + +#: ../../howto/clinic.rst:1255 +msgid "" +"The default value used to initialize the C variable when there is no " +"default, but not specifying a default may result in an \"uninitialized " +"variable\" warning. This can easily happen when using option " +"groups—although properly-written code will never actually use this value, " +"the variable does get passed in to the impl, and the C compiler will " +"complain about the \"use\" of the uninitialized value. This value should " +"always be a non-empty string." +msgstr "" +"在无缺省值时用于初始化 C " +"变量的缺省值,因为不指定缺省值可能会引发“变量未初始化”的警告。在用到多组可选项的时候很容易发生这种情况,尽管好的代码实际不会用到这个值,但确实会给 " +"impl 传入本值,而 C 编译器则会认为“用到”了未初始化的值。应确保本值为非空字符串。" + +#: ../../howto/clinic.rst:1266 +msgid "The name of the C converter function, as a string." +msgstr "C 转换器的名称,字符串类型。" + +#: ../../howto/clinic.rst:1271 +msgid "``impl_by_reference``" +msgstr "``impl_by_reference``" + +#: ../../howto/clinic.rst:1269 +msgid "" +"A boolean value. If true, Argument Clinic will add a ``&`` in front of the " +"name of the variable when passing it into the impl function." +msgstr "布尔值。如果为 True,则 Argument Clinic 在将变量传入 impl 函数时,会在其名称前加上一个 ``&``。" + +#: ../../howto/clinic.rst:1277 +msgid "``parse_by_reference``" +msgstr "``parse_by_reference``" + +#: ../../howto/clinic.rst:1274 +msgid "" +"A boolean value. If true, Argument Clinic will add a ``&`` in front of the " +"name of the variable when passing it into :c:func:`PyArg_ParseTuple`." +msgstr "" +"一个布尔值。 如果为真,则 Argument Clinic 在将其传入 :c:func:`PyArg_ParseTuple` 时将在变量名之前添加一个 " +"``&``。" + +#: ../../howto/clinic.rst:1279 +msgid "" +"Here's the simplest example of a custom converter, from " +"``Modules/zlibmodule.c``::" +msgstr "下面是最简单的自定义转换器示例,取自 ``Modules/zlibmodule.c`` :" + +#: ../../howto/clinic.rst:1290 +msgid "" +"This block adds a converter to Argument Clinic named ``ssize_t``. " +"Parameters declared as ``ssize_t`` will be declared as type " +":c:type:`Py_ssize_t`, and will be parsed by the ``'O&'`` format unit, which " +"will call the ``ssize_t_converter`` converter function. ``ssize_t`` " +"variables automatically support default values." +msgstr "" +"这个代码块为 Argument Clinic 添加了一个名为 ``ssize_t`` 的转换器。 声明为 ``ssize_t`` 的形参将被声明为 " +":c:type:`Py_ssize_t` 类型,并将由 ``'O&'`` 格式单元来解析,它将调用 ``ssize_t_converter`` " +"转换器函数。 ``ssize_t`` 变量会自动支持默认值。" + +#: ../../howto/clinic.rst:1296 +msgid "" +"More sophisticated custom converters can insert custom C code to handle " +"initialization and cleanup. You can see more examples of custom converters " +"in the CPython source tree; grep the C files for the string ``CConverter``." +msgstr "" +"更复杂些的自定义转换器,可以插入自定义 C 代码来进行初始化和清理工作。可以在 CPython 源码中看到自定义转换器的更多例子;只要在 C " +"文件中搜索字符串 ``CConverter`` 即可。" + +#: ../../howto/clinic.rst:1302 +msgid "Writing a custom return converter" +msgstr "编写自定义的返回值转换器" + +#: ../../howto/clinic.rst:1304 +msgid "" +"Writing a custom return converter is much like writing a custom converter. " +"Except it's somewhat simpler, because return converters are themselves much " +"simpler." +msgstr "自定义的返回值转换器的写法,与自定义的转换器十分类似。因为返回值转换器本身就很简单,编写起来就简单一些。" + +#: ../../howto/clinic.rst:1308 +msgid "" +"Return converters must subclass ``CReturnConverter``. There are no examples " +"yet of custom return converters, because they are not widely used yet. If " +"you wish to write your own return converter, please read " +"``Tools/clinic/clinic.py``, specifically the implementation of " +"``CReturnConverter`` and all its subclasses." +msgstr "" +"返回值转换器必须是 ``CReturnConverter`` " +"的子类。因为自定义的返回值转换器还没有广泛应用,目前还没有示例。若要编写返回值转换器,请阅读``Tools/clinic/clinic.py`` " +",特别是 ``CReturnConverter`` 及其所有子类的实现代码。" + +#: ../../howto/clinic.rst:1316 +msgid "METH_O and METH_NOARGS" +msgstr "METH_O 和 METH_NOARGS" + +#: ../../howto/clinic.rst:1318 +msgid "" +"To convert a function using ``METH_O``, make sure the function's single " +"argument is using the ``object`` converter, and mark the arguments as " +"positional-only::" +msgstr "若要用 ``METH_O`` 对函数进行转换,请确保对该函数的单个参数使用 ``object`` 转换器,并将参数标为只认位置的:" + +#: ../../howto/clinic.rst:1330 +msgid "" +"To convert a function using ``METH_NOARGS``, just don't specify any " +"arguments." +msgstr "若要用 ``METH_NOARGS`` 对函数进行转换,只需不定义参数即可。" + +#: ../../howto/clinic.rst:1333 +msgid "" +"You can still use a self converter, a return converter, and specify a " +"``type`` argument to the object converter for ``METH_O``." +msgstr "依然可以采用一个 self 转换器、一个返回值转换器,并为 ``METH_O`` 的对象转换器指定一个 ``type`` 参数。" + +#: ../../howto/clinic.rst:1337 +msgid "tp_new and tp_init functions" +msgstr "tp_new 和 tp_init functions" + +#: ../../howto/clinic.rst:1339 +msgid "" +"You can convert ``tp_new`` and ``tp_init`` functions. Just name them " +"``__new__`` or ``__init__`` as appropriate. Notes:" +msgstr "" +"``tp_new`` 和 ``tp_init`` 函数也可以转换。只要命名为 ``__new__`` 或 ``__init__`` 即可。注意:" + +#: ../../howto/clinic.rst:1342 +msgid "" +"The function name generated for ``__new__`` doesn't end in ``__new__`` like " +"it would by default. It's just the name of the class, converted into a " +"valid C identifier." +msgstr "为转换 ``__new__`` 而生成的函数名不会以其默认名称结尾。只会是转换为合法 C 标识符的类名。" + +#: ../../howto/clinic.rst:1346 +msgid "No ``PyMethodDef`` ``#define`` is generated for these functions." +msgstr "转换这些函数不会生成 ``PyMethodDef`` 、``#define``。" + +#: ../../howto/clinic.rst:1348 +msgid "``__init__`` functions return ``int``, not ``PyObject *``." +msgstr "``__init__`` 函数将返回 ``int`` ,而不是 ``PyObject *`` 。" + +#: ../../howto/clinic.rst:1350 +msgid "Use the docstring as the class docstring." +msgstr "将文档字符串用作类文档字符串。" + +#: ../../howto/clinic.rst:1352 +msgid "" +"Although ``__new__`` and ``__init__`` functions must always accept both the " +"``args`` and ``kwargs`` objects, when converting you may specify any " +"signature for these functions that you like. (If your function doesn't " +"support keywords, the parsing function generated will throw an exception if " +"it receives any.)" +msgstr "" +"虽然 ``__new__`` 和 ``__init__`` 函数必须以 ``args`` 和 ``kwargs`` " +"对象作为参数,但在转换时可按个人喜好定义函数签名。(如果原函数不支持关键字参数,则生成的解析函数在收到关键字参数时会抛出异常)。" + +#: ../../howto/clinic.rst:1359 +msgid "Changing and redirecting Clinic's output" +msgstr "改变和重定向 Clinic 的输出" + +#: ../../howto/clinic.rst:1361 +msgid "" +"It can be inconvenient to have Clinic's output interspersed with your " +"conventional hand-edited C code. Luckily, Clinic is configurable: you can " +"buffer up its output for printing later (or earlier!), or write its output " +"to a separate file. You can also add a prefix or suffix to every line of " +"Clinic's generated output." +msgstr "" +"若是让 Clinic 的输出与传统的手写 C 代码交织在一起,可能会不方便阅读。 幸好可以对 Clinic " +"进行配置:可以将输出结果缓存起来以供输出,或将输出结果写入文件中。针对 Clinic 生成的输出结果,还可以为每一行都加上前缀或后缀。" + +#: ../../howto/clinic.rst:1367 +msgid "" +"While changing Clinic's output in this manner can be a boon to readability, " +"it may result in Clinic code using types before they are defined, or your " +"code attempting to use Clinic-generated code before it is defined. These " +"problems can be easily solved by rearranging the declarations in your file, " +"or moving where Clinic's generated code goes. (This is why the default " +"behavior of Clinic is to output everything into the current block; while " +"many people consider this hampers readability, it will never require " +"rearranging your code to fix definition-before-use problems.)" +msgstr "" +"虽然修改 Clinic 的输出提升了可读性,但可能会导致 Clinic 代码使用了未经定义的类型,或者会提前用到 Clinic " +"生成的代码。通过重新安排声明在代码文件的位置,或将 Clinic 生成的代码移个位置,即可轻松解决上述问题。(这就是 Clinic " +"默认是全部输出到当前代码块的原因;虽然许多人认为降低了可读性,但这样就根本不用重新编排代码来解决提前引用的问题)。" + +#: ../../howto/clinic.rst:1376 +msgid "Let's start with defining some terminology:" +msgstr "就从定义一些术语开始吧:" + +#: ../../howto/clinic.rst:1403 +msgid "*field*" +msgstr "** 区块(field)**" + +#: ../../howto/clinic.rst:1379 +msgid "" +"A field, in this context, is a subsection of Clinic's output. For example, " +"the ``#define`` for the ``PyMethodDef`` structure is a field, called " +"``methoddef_define``. Clinic has seven different fields it can output per " +"function definition:" +msgstr "" +"在当前上下文中,区块是指 Clinic 输出的一个小节。例如,``PyMethodDef`` 结构的 ``#define`` 是一个区块,名为 " +"``methoddef_define``。Clinic 可为每个函数定义输出7个区块。" + +#: ../../howto/clinic.rst:1394 +msgid "" +"All the names are of the form ``\"_\"``, where ``\"\"`` is the " +"semantic object represented (the parsing function, the impl function, the " +"docstring, or the methoddef structure) and ``\"\"`` represents what kind " +"of statement the field is. Field names that end in ``\"_prototype\"`` " +"represent forward declarations of that thing, without the actual body/data " +"of the thing; field names that end in ``\"_definition\"`` represent the " +"actual definition of the thing, with the body/data of the thing. " +"(``\"methoddef\"`` is special, it's the only one that ends with " +"``\"_define\"``, representing that it's a preprocessor #define.)" +msgstr "" +"区块均以 ``\"_\"`` 形式命名,其中 ``\"\"`` 是所代表的语义对象(解析函数、impl 函数、文档字符串或 " +"methoddef 结构),``\"\"`` 表示该区块的类别。以 ``\"_prototype\"`` " +"结尾的区块名表示这只是个前向声明,没有实际的函数体或数据;以 ``\"_definition\"`` " +"结尾的区块名则表示这是实际的函数定义,包含了函数体和数据。(``\"methoddef\"`` 比较特殊,是唯一一个以 ``\"_define\"`` " +"结尾的区块名,表明这是一个预处理器 #define。)" + +#: ../../howto/clinic.rst:1437 +msgid "*destination*" +msgstr "** 输出目标(destination)**" + +#: ../../howto/clinic.rst:1406 +msgid "" +"A destination is a place Clinic can write output to. There are five built-" +"in destinations:" +msgstr "输出目标是 Clinic 可以进行输出的地方。内置的输出目标有5种:" + +#: ../../howto/clinic.rst:1411 ../../howto/clinic.rst:1486 +#: ../../howto/clinic.rst:1564 +msgid "``block``" +msgstr "``block``" + +#: ../../howto/clinic.rst:1410 +msgid "" +"The default destination: printed in the output section of the current Clinic" +" block." +msgstr "默认的输出目标:在 Clinic 当前代码块的输出区域进行输出。" + +#: ../../howto/clinic.rst:1417 ../../howto/clinic.rst:1513 +#: ../../howto/clinic.rst:1567 +msgid "``buffer``" +msgstr "``buffer``" + +#: ../../howto/clinic.rst:1414 +msgid "" +"A text buffer where you can save text for later. Text sent here is appended" +" to the end of any existing text. It's an error to have any text left in " +"the buffer when Clinic finishes processing a file." +msgstr "文本缓冲区,可将文本保存起来以便后续使用。输出的文本会加入现有文本的末尾。如果 Clinic 处理完文件后缓冲区中还留有文本,则会报错。" + +#: ../../howto/clinic.rst:1428 ../../howto/clinic.rst:1499 +#: ../../howto/clinic.rst:1593 +msgid "``file``" +msgstr "``file``" + +#: ../../howto/clinic.rst:1420 +msgid "" +"A separate \"clinic file\" that will be created automatically by Clinic. The" +" filename chosen for the file is ``{basename}.clinic{extension}``, where " +"``basename`` and ``extension`` were assigned the output from " +"``os.path.splitext()`` run on the current file. (Example: the ``file`` " +"destination for ``_pickle.c`` would be written to ``_pickle.clinic.c``.)" +msgstr "" +"单独的 “Clinic 文件”,由 Clinic 自动创建。文件名会是``{basename}.clinic{extension}`` ,这里的 " +"``basename`` 和 ``extension`` 即为对当前文件运行 ``os.path.splitext()`` " +"后的结果。(比如:``_pickle.c`` 的 ``file`` 目的地将会是 ``_pickle.clinic.c``)。" + +#: ../../howto/clinic.rst:1427 +msgid "" +"**Important: When using a** ``file`` **destination, you** *must check in* " +"**the generated file!**" +msgstr "**重点:若要使用 ** ``file`` ** 作为输出目标,你 ** *必须签入* ** 生成的文件!**" + +#: ../../howto/clinic.rst:1433 ../../howto/clinic.rst:1526 +#: ../../howto/clinic.rst:1597 +msgid "``two-pass``" +msgstr "``two-pass``" + +#: ../../howto/clinic.rst:1431 +msgid "" +"A buffer like ``buffer``. However, a two-pass buffer can only be dumped " +"once, and it prints out all text sent to it during all processing, even from" +" Clinic blocks *after* the dumping point." +msgstr "" +"类似于 ``buffer`` 的缓冲区。不过 two-pass 缓冲区只能转储一次,将会输出处理过程中发送给它的所有文本,甚至包括转储点**之后**的 " +"Clinic 块。" + +#: ../../howto/clinic.rst:1437 ../../howto/clinic.rst:1560 +msgid "``suppress``" +msgstr "``suppress``" + +#: ../../howto/clinic.rst:1436 +msgid "The text is suppressed—thrown away." +msgstr "禁止输出文本——抛弃输出。" + +#: ../../howto/clinic.rst:1439 +msgid "" +"Clinic defines five new directives that let you reconfigure its output." +msgstr "Clinic 定义了5个新的指令,以便修改输出方式。" + +#: ../../howto/clinic.rst:1441 +msgid "The first new directive is ``dump``:" +msgstr "第一个新指令是 ``dump``:" + +#: ../../howto/clinic.rst:1447 +msgid "" +"This dumps the current contents of the named destination into the output of " +"the current block, and empties it. This only works with ``buffer`` and " +"``two-pass`` destinations." +msgstr "将指定输出目标的当前内容转储到当前块的输出中,并清空输出目标。仅适用于 ``buffer`` 和 ``two-pass`` 目标。" + +#: ../../howto/clinic.rst:1451 +msgid "" +"The second new directive is ``output``. The most basic form of ``output`` " +"is like this:" +msgstr "第二个新指令是 ``output``。``output`` 最简单的格式如下所示:" + +#: ../../howto/clinic.rst:1458 +msgid "" +"This tells Clinic to output *field* to *destination*. ``output`` also " +"supports a special meta-destination, called ``everything``, which tells " +"Clinic to output *all* fields to that *destination*." +msgstr "" +"这会通知 Clinic 将指定**field**输出到指定**destination**中去。``output`` 还支持一个特殊的元目标 " +"``everything``,通知 Clinic 将**所有**区块都输出到该**目标**。" + +#: ../../howto/clinic.rst:1462 +msgid "``output`` has a number of other functions:" +msgstr "``output`` 还包含一些函数:" + +#: ../../howto/clinic.rst:1471 +msgid "" +"``output push`` and ``output pop`` allow you to push and pop configurations " +"on an internal configuration stack, so that you can temporarily modify the " +"output configuration, then easily restore the previous configuration. " +"Simply push before your change to save the current configuration, then pop " +"when you wish to restore the previous configuration." +msgstr "" +"``output push`` 和 ``output pop`` " +"能在内部的配置栈中压入和弹出配置,这样就可以临时修改输出配置,然后再轻松恢复之前的配置。只需在修改前入栈保存当前配置,在恢复配置时再弹出即可。" + +#: ../../howto/clinic.rst:1478 +msgid "" +"``output preset`` sets Clinic's output to one of several built-in preset " +"configurations, as follows:" +msgstr "``output preset`` 将 Clinic 的输出目标设为内置预设目标之一,如下所示:" + +#: ../../howto/clinic.rst:1482 +msgid "" +"Clinic's original starting configuration. Writes everything immediately " +"after the input block." +msgstr "Clinic 的初始设置。输入块后面紧接着写入所有内容。" + +#: ../../howto/clinic.rst:1485 +msgid "" +"Suppress the ``parser_prototype`` and ``docstring_prototype``, write " +"everything else to ``block``." +msgstr "" +"关闭 ``parser_prototype`` 和 ``docstring_prototype``,并将其他所有内容写入 ``block``。" + +#: ../../howto/clinic.rst:1489 +msgid "" +"Designed to write everything to the \"clinic file\" that it can. You then " +"``#include`` this file near the top of your file. You may need to rearrange " +"your file to make this work, though usually this just means creating forward" +" declarations for various ``typedef`` and ``PyTypeObject`` definitions." +msgstr "" +"目的是全部输出至 “Clinic 文件”中。然后在文件顶部附近 ``#include`` 该文件。可能需要重新调整代码顺序才能正常运行,通常只要为 " +"``typedef``和``PyTypeObject`` 定义创建前向声明即可。" + +#: ../../howto/clinic.rst:1495 +msgid "" +"Suppress the ``parser_prototype`` and ``docstring_prototype``, write the " +"``impl_definition`` to ``block``, and write everything else to ``file``." +msgstr "" +"关闭 ``parser_prototype`` 和 ``docstring_prototype`` ,将 ``impl_definition`` 写入 " +"``block``,其他内容写入 ``file`` 。" + +#: ../../howto/clinic.rst:1499 +msgid "The default filename is ``\"{dirname}/clinic/{basename}.h\"``." +msgstr "默认文件名为 ``\"{dirname}/clinic/{basename}.h\"`` 。" + +#: ../../howto/clinic.rst:1502 +msgid "" +"Save up most of the output from Clinic, to be written into your file near " +"the end. For Python files implementing modules or builtin types, it's " +"recommended that you dump the buffer just above the static structures for " +"your module or builtin type; these are normally very near the end. Using " +"``buffer`` may require even more editing than ``file``, if your file has " +"static ``PyMethodDef`` arrays defined in the middle of the file." +msgstr "" +"将 Clinic 的大部分输出保存起来,在快结束时写入文件。如果 Python " +"文件存放的是编写模块或内置类型的代码,建议紧挨着模块或内置类型的静态结构之前对缓冲区进行转储;这些结构通常位于结尾附近。如果在文件的中间位置定义了静态 " +"``PyMethodDef`` 数组,采用 ``buffer`` 输出所需的代码编辑工作可能比用 ``file`` 要多些。" + +#: ../../howto/clinic.rst:1511 +msgid "" +"Suppress the ``parser_prototype``, ``impl_prototype``, and " +"``docstring_prototype``, write the ``impl_definition`` to ``block``, and " +"write everything else to ``file``." +msgstr "" +"关闭 ``parser_prototype`` 、``impl_prototype`` 和 ``docstring_prototype``,将 " +"``impl_definition`` 写入 ``block``,其他输出都写入 ``file``。" + +#: ../../howto/clinic.rst:1516 +msgid "" +"Similar to the ``buffer`` preset, but writes forward declarations to the " +"``two-pass`` buffer, and definitions to the ``buffer``. This is similar to " +"the ``buffer`` preset, but may require less editing than ``buffer``. Dump " +"the ``two-pass`` buffer near the top of your file, and dump the ``buffer`` " +"near the end just like you would when using the ``buffer`` preset." +msgstr "" +"类似于预设的 ``buffer`` 输出,但会把前向声明写入 ``two-pass`` 缓冲区,将函数定义写入 ``buffer``。这与预设的 " +"``buffer`` 类似,但所需的代码编辑工作可能会减少。将 ``two-pass`` 缓冲区转储到文件的顶部,将 ``buffer`` " +"转储到文件末尾,就像预设的 ``buffer`` 一样。" + +#: ../../howto/clinic.rst:1523 +msgid "" +"Suppresses the ``impl_prototype``, write the ``impl_definition`` to " +"``block``, write ``docstring_prototype``, ``methoddef_define``, and " +"``parser_prototype`` to ``two-pass``, write everything else to ``buffer``." +msgstr "" +"关闭 ``impl_prototype`` ,将 ``impl_definition`` 写入 ``block`` ,将 " +"``docstring_prototype`` 、 ``methoddef_define`` 和 ``parser_prototype`` 写入 " +"``two-pass``,其他输出都写入 ``buffer`` 。" + +#: ../../howto/clinic.rst:1537 +msgid "``partial-buffer``" +msgstr "``partial-buffer``" + +#: ../../howto/clinic.rst:1529 +msgid "" +"Similar to the ``buffer`` preset, but writes more things to ``block``, only " +"writing the really big chunks of generated code to ``buffer``. This avoids " +"the definition-before-use problem of ``buffer`` completely, at the small " +"cost of having slightly more stuff in the block's output. Dump the " +"``buffer`` near the end, just like you would when using the ``buffer`` " +"preset." +msgstr "" +"与预设的 ``buffer`` 类似,但会向 ``block`` 写入更多内容,而只向 ``buffer`` 写入真正大块的生成代码。这样能完全避免 " +"``buffer`` 的提前引用问题,代价是输出到代码块中的内容会稍有增加。在快结束时会转储 ``buffer``,就像采用预设的 ``buffer``" +" 配置一样。" + +#: ../../howto/clinic.rst:1536 +msgid "" +"Suppresses the ``impl_prototype``, write the ``docstring_definition`` and " +"``parser_definition`` to ``buffer``, write everything else to ``block``." +msgstr "" +"关闭 ``impl_prototype``,将 ``docstring_definition`` 和 ``parser_definition`` 写入 " +"``buffer``,其他输出都写入 ``block``。" + +#: ../../howto/clinic.rst:1539 +msgid "The third new directive is ``destination``:" +msgstr "第三个新指令是 ``destination``:" + +#: ../../howto/clinic.rst:1545 +msgid "This performs an operation on the destination named ``name``." +msgstr "向名为 ``name`` 的目标执行输出。" + +#: ../../howto/clinic.rst:1547 +msgid "There are two defined subcommands: ``new`` and ``clear``." +msgstr "定义了两个子命令:``new`` 和 ``clear``。" + +#: ../../howto/clinic.rst:1549 +msgid "The ``new`` subcommand works like this:" +msgstr "子命令 ``new`` 工作方式如下:" + +#: ../../howto/clinic.rst:1555 +msgid "" +"This creates a new destination with name ```` and type ````." +msgstr "新建一个目标,名称为 ````,类型为 ```` 。" + +#: ../../howto/clinic.rst:1557 +msgid "There are five destination types:" +msgstr "输出目标的类型有5种:" + +#: ../../howto/clinic.rst:1560 +msgid "Throws the text away." +msgstr "忽略文本。" + +#: ../../howto/clinic.rst:1563 +msgid "" +"Writes the text to the current block. This is what Clinic originally did." +msgstr "将文本写入当前代码块中。 这就是 Clinic 原来的做法。" + +#: ../../howto/clinic.rst:1567 +msgid "A simple text buffer, like the \"buffer\" builtin destination above." +msgstr "简单的文本缓冲区,就像上述的内置 “buffer” 目标。" + +#: ../../howto/clinic.rst:1570 +msgid "" +"A text file. The file destination takes an extra argument, a template to " +"use for building the filename, like so:" +msgstr "文本文件。文件目标多了一个参数,模板用于生成文件名,类似于:" + +#: ../../howto/clinic.rst:1573 +msgid "destination new " +msgstr "destination new " + +#: ../../howto/clinic.rst:1575 +msgid "" +"The template can use three strings internally that will be replaced by bits " +"of the filename:" +msgstr "模版可以引用3个内部字符串,将会用文件名的对应部分替代:" + +#: ../../howto/clinic.rst:1578 +msgid "{path}" +msgstr "{path}" + +#: ../../howto/clinic.rst:1579 +msgid "The full path to the file, including directory and full filename." +msgstr "文件的全路径,包含文件夹和完整的文件名。" + +#: ../../howto/clinic.rst:1580 +msgid "{dirname}" +msgstr "{dirname}" + +#: ../../howto/clinic.rst:1581 +msgid "The name of the directory the file is in." +msgstr "文件所在文件夹名。" + +#: ../../howto/clinic.rst:1582 +msgid "{basename}" +msgstr "{basename}" + +#: ../../howto/clinic.rst:1583 +msgid "Just the name of the file, not including the directory." +msgstr "只有文件名,不含文件夹。" + +#: ../../howto/clinic.rst:1585 +msgid "{basename_root}" +msgstr "{basename_root}" + +#: ../../howto/clinic.rst:1585 +msgid "" +"Basename with the extension clipped off (everything up to but not including " +"the last '.')." +msgstr "去除了扩展名后的文件名(不含最后一个“.”)。" + +#: ../../howto/clinic.rst:1589 +msgid "{basename_extension}" +msgstr "{basename_extension}" + +#: ../../howto/clinic.rst:1588 +msgid "" +"The last '.' and everything after it. If the basename does not contain a " +"period, this will be the empty string." +msgstr "包含最后一个“.”及后面的字符。如果文件名中不含句点,则为空字符串。" + +#: ../../howto/clinic.rst:1591 +msgid "" +"If there are no periods in the filename, {basename} and {filename} are the " +"same, and {extension} is empty. \"{basename}{extension}\" is always exactly" +" the same as \"{filename}\".\"" +msgstr "" +"如果文件名中不含句点符,{basename} 和 {basename_root} 是一样的,而 {basename_extension} " +"则为空。“{basename_root}{basename_extension}” 与“{basename}”一定是完全相同的。(英文原文貌似有误)" + +#: ../../howto/clinic.rst:1596 +msgid "A two-pass buffer, like the \"two-pass\" builtin destination above." +msgstr "two-pass 缓冲区,类似于上述的内置“two-pass”输出目标。" + +#: ../../howto/clinic.rst:1599 +msgid "The ``clear`` subcommand works like this:" +msgstr "子命令 ``clear`` 的工作方式如下:" + +#: ../../howto/clinic.rst:1605 +msgid "" +"It removes all the accumulated text up to this point in the destination. (I " +"don't know what you'd need this for, but I thought maybe it'd be useful " +"while someone's experimenting.)" +msgstr "清空输出目标中所有文本。(不知用途何在,但也许做实验时会有用吧。)" + +#: ../../howto/clinic.rst:1609 +msgid "The fourth new directive is ``set``:" +msgstr "第4个新指令是 ``set`` :" + +#: ../../howto/clinic.rst:1616 +msgid "" +"``set`` lets you set two internal variables in Clinic. ``line_prefix`` is a " +"string that will be prepended to every line of Clinic's output; " +"``line_suffix`` is a string that will be appended to every line of Clinic's " +"output." +msgstr "" +"`set' 能设置 Clinic 的两个内部变量值。``line_prefix`` 是 Clinic " +"每行输出的前缀字符串;``line_suffix`` 是 Clinic 每行输出的后缀字符串。" + +#: ../../howto/clinic.rst:1620 +msgid "Both of these support two format strings:" +msgstr "两者都支持两种格式字符串:" + +#: ../../howto/clinic.rst:1623 +msgid "``{block comment start}``" +msgstr "``{block comment start}``" + +#: ../../howto/clinic.rst:1623 +msgid "" +"Turns into the string ``/*``, the start-comment text sequence for C files." +msgstr "转成字符串 ``/*``,是 C 文件的注释起始标记。" + +#: ../../howto/clinic.rst:1626 +msgid "``{block comment end}``" +msgstr "``{block comment end}``" + +#: ../../howto/clinic.rst:1626 +msgid "" +"Turns into the string ``*/``, the end-comment text sequence for C files." +msgstr "转成字符串 ``*/``,是 C 文件的注释结束标记。" + +#: ../../howto/clinic.rst:1628 +msgid "" +"The final new directive is one you shouldn't need to use directly, called " +"``preserve``:" +msgstr "最后一个新指令是无需直接使用的 ``preserve``。" + +#: ../../howto/clinic.rst:1635 +msgid "" +"This tells Clinic that the current contents of the output should be kept, " +"unmodified. This is used internally by Clinic when dumping output into " +"``file`` files; wrapping it in a Clinic block lets Clinic use its existing " +"checksum functionality to ensure the file was not modified by hand before it" +" gets overwritten." +msgstr "" +"通知 Clinic 输出内容应保持原样。这是在转储至 ``file`` 文件中时,供 Clinic 内部使用的;以便 Clinic " +"能利用已有的校验函数,确保文件在被覆盖之前没进行人工修改过。" + +#: ../../howto/clinic.rst:1642 +msgid "The #ifdef trick" +msgstr "#ifdef 使用技巧" + +#: ../../howto/clinic.rst:1644 +msgid "" +"If you're converting a function that isn't available on all platforms, " +"there's a trick you can use to make life a little easier. The existing code" +" probably looks like this::" +msgstr "若要转换的函数并非通用于所有平台,可以采用一个技巧。当前代码可能如下所示:" + +#: ../../howto/clinic.rst:1655 +msgid "" +"And then in the ``PyMethodDef`` structure at the bottom the existing code " +"will have:" +msgstr "在底部的 ``PyMethodDef`` 结构中,当前代码如下:" + +#: ../../howto/clinic.rst:1664 +msgid "" +"In this scenario, you should enclose the body of your impl function inside " +"the ``#ifdef``, like so::" +msgstr "这时应将 impl 函数体用 ``#ifdef`` 包裹起来,如下所示:" + +#: ../../howto/clinic.rst:1678 +msgid "" +"Then, remove those three lines from the ``PyMethodDef`` structure, replacing" +" them with the macro Argument Clinic generated:" +msgstr "然后,从 ``PyMethodDef`` 结构中删除以下3行,替换成 Argument Clinic 生成的宏:" + +#: ../../howto/clinic.rst:1685 +msgid "" +"(You can find the real name for this macro inside the generated code. Or you" +" can calculate it yourself: it's the name of your function as defined on the" +" first line of your block, but with periods changed to underscores, " +"uppercased, and ``\"_METHODDEF\"`` added to the end.)" +msgstr "" +"(在生成的代码中可找到宏的真实名称。或者可以自行求一下值:块的第一行定义的函数名,句点改为下划线,全部大写,并在末尾加上 " +"``\"_METHODDEF\"`` )" + +#: ../../howto/clinic.rst:1690 +msgid "" +"Perhaps you're wondering: what if ``HAVE_FUNCTIONNAME`` isn't defined? The " +"``MODULE_FUNCTIONNAME_METHODDEF`` macro won't be defined either!" +msgstr "" +"如果 ``HAVE_FUNCTIONNAME`` 未定义怎么办? 那么 ``MODULE_FUNCTIONNAME_METHODDEF`` " +"宏也不会定义。" + +#: ../../howto/clinic.rst:1693 +msgid "" +"Here's where Argument Clinic gets very clever. It actually detects that the" +" Argument Clinic block might be deactivated by the ``#ifdef``. When that " +"happens, it generates a little extra code that looks like this::" +msgstr "" +"这正是 Argument Clinic 变聪明的地方。它其实能检测到 ``#ifdef`` 屏蔽了Argument Clinic " +"块。于是会额外生成一小段代码,如下所示:" + +#: ../../howto/clinic.rst:1701 +msgid "" +"That means the macro always works. If the function is defined, this turns " +"into the correct structure, including the trailing comma. If the function " +"is undefined, this turns into nothing." +msgstr "这样宏总是会生效。如果定义了函数,则会转换为正确的结构,包括尾部的逗号。如果函数未定义,就不做什么转换。" + +#: ../../howto/clinic.rst:1705 +msgid "" +"However, this causes one ticklish problem: where should Argument Clinic put " +"this extra code when using the \"block\" output preset? It can't go in the " +"output block, because that could be deactivated by the ``#ifdef``. (That's " +"the whole point!)" +msgstr "" +"不过,这导致了一个棘手的问题:当使用 \"block\" 输出预设时 Argument Clinic 应该把额外的代码放到哪里呢? " +"它不能放在输出代码块中,因为它可能会被 ``#ifdef`` 停用。 (它的作用就是这个!)" + +#: ../../howto/clinic.rst:1709 +msgid "" +"In this situation, Argument Clinic writes the extra code to the \"buffer\" " +"destination. This may mean that you get a complaint from Argument Clinic:" +msgstr "" +"在此情况下,Argument Clinic 会将额外的代码的写入目标设为 \"buffer\"。 这意味着你可能会收到来自 Argument " +"Clinic 的抱怨:" + +#: ../../howto/clinic.rst:1717 +msgid "" +"When this happens, just open your file, find the ``dump buffer`` block that " +"Argument Clinic added to your file (it'll be at the very bottom), then move " +"it above the ``PyMethodDef`` structure where that macro is used." +msgstr "" +"当发生这种问题时,只需打开你的文件,找到由 Argument Clinic 添加到你的文件的 ``dump buffer`` " +"代码块(它将位于文件末尾),并将其移到使用了那个宏的 ``PyMethodDef`` 结构体之上。" + +#: ../../howto/clinic.rst:1724 +msgid "Using Argument Clinic in Python files" +msgstr "在 Python 文件中使用 Argument Clinic" + +#: ../../howto/clinic.rst:1726 +msgid "" +"It's actually possible to use Argument Clinic to preprocess Python files. " +"There's no point to using Argument Clinic blocks, of course, as the output " +"wouldn't make any sense to the Python interpreter. But using Argument " +"Clinic to run Python blocks lets you use Python as a Python preprocessor!" +msgstr "" +"实际上使用 Argument Clinic 来预处理 Python 文件也是可行的。 当然使用 Argument Clinic " +"代码块并没有什么意义,因为其输出对于 Python 解释器来说是没有意义的。 但是使用 Argument Clinic 来运行 Python " +"代码块可以让你将 Python 当作 Python 预处理器来使用!" + +#: ../../howto/clinic.rst:1731 +msgid "" +"Since Python comments are different from C comments, Argument Clinic blocks " +"embedded in Python files look slightly different. They look like this:" +msgstr "" +"由于 Python 注释不同于 C 注释,嵌入到 Python 文件的 Argument Clinic 代码块看起来会有一点不同。 它们看起来像是这样:" diff --git a/howto/cporting.po b/howto/cporting.po new file mode 100644 index 000000000..f1276d0cf --- /dev/null +++ b/howto/cporting.po @@ -0,0 +1,58 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) 2001-2022, Python Software Foundation +# This file is distributed under the same license as the Python package. +# FIRST AUTHOR , YEAR. +# +# Translators: +# Alpha Du , 2019 +# Freesand Leo , 2019 +# +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: Python 3.9\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2022-11-04 14:34+0000\n" +"PO-Revision-Date: 2017-02-16 17:44+0000\n" +"Last-Translator: Freesand Leo , 2019\n" +"Language-Team: Chinese (China) (https://www.transifex.com/python-doc/teams/5390/zh_CN/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: zh_CN\n" +"Plural-Forms: nplurals=1; plural=0;\n" + +#: ../../howto/cporting.rst:7 +msgid "Porting Extension Modules to Python 3" +msgstr "将扩展模块移植到 Python 3" + +#: ../../howto/cporting.rst:9 +msgid "" +"We recommend the following resources for porting extension modules to Python" +" 3:" +msgstr "对于将扩展模块移植到 Python 3,我们推荐下列资源:" + +#: ../../howto/cporting.rst:11 +msgid "" +"The `Migrating C extensions`_ chapter from *Supporting Python 3: An in-depth" +" guide*, a book on moving from Python 2 to Python 3 in general, guides the " +"reader through porting an extension module." +msgstr "" +"*Supporting Python 3: An in-depth guide* 中的 `Migrating C extensions`_ " +"这一章,这本书介绍了如何从 Python 2 迁移到 Python 3,包括指导读者如何移植扩展模块。" + +#: ../../howto/cporting.rst:15 +msgid "" +"The `Porting guide`_ from the *py3c* project provides opinionated " +"suggestions with supporting code." +msgstr "*py3c* 项目中的 `Porting guide`_ 提供了有关支持代码的指导性建议。" + +#: ../../howto/cporting.rst:17 +msgid "" +"The `Cython`_ and `CFFI`_ libraries offer abstractions over Python's C API. " +"Extensions generally need to be re-written to use one of them, but the " +"library then handles differences between various Python versions and " +"implementations." +msgstr "" +"`Cython`_ 和 `CFFI`_ 库提供了对于 Python 的 C API 的抽象。 " +"扩展大都需要进行重写以使用两者中的一个,然后就可以通过库来处理各种 Python 版本和实现之间的差异。" diff --git a/howto/curses.po b/howto/curses.po new file mode 100644 index 000000000..7807dee12 --- /dev/null +++ b/howto/curses.po @@ -0,0 +1,884 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) 2001-2022, Python Software Foundation +# This file is distributed under the same license as the Python package. +# FIRST AUTHOR , YEAR. +# +# Translators: +# Fei Yin , 2018 +# df2dc1c92e792f7ae8417c51df43db8f_594d92a <0f49be28017426edb1db1a2ab6e67088_717605>, 2018 +# ppcfish , 2019 +# Siyuan Xu, 2020 +# Freesand Leo , 2022 +# +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: Python 3.9\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2022-11-04 14:34+0000\n" +"PO-Revision-Date: 2017-02-16 17:44+0000\n" +"Last-Translator: Freesand Leo , 2022\n" +"Language-Team: Chinese (China) (https://www.transifex.com/python-doc/teams/5390/zh_CN/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: zh_CN\n" +"Plural-Forms: nplurals=1; plural=0;\n" + +#: ../../howto/curses.rst:5 +msgid "Curses Programming with Python" +msgstr "用 Python 进行 Curses 编程" + +#: ../../howto/curses.rst:0 +msgid "Author" +msgstr "作者" + +#: ../../howto/curses.rst:7 +msgid "A.M. Kuchling, Eric S. Raymond" +msgstr "A.M. Kuchling, Eric S. Raymond" + +#: ../../howto/curses.rst:0 +msgid "Release" +msgstr "发布版本" + +#: ../../howto/curses.rst:8 +msgid "2.04" +msgstr "2.04" + +#: ../../howto/curses.rstNone +msgid "Abstract" +msgstr "摘要" + +#: ../../howto/curses.rst:13 +msgid "" +"This document describes how to use the :mod:`curses` extension module to " +"control text-mode displays." +msgstr "本文档介绍了如何使用 :mod:`curses` 扩展模块控制文本模式的显示。" + +#: ../../howto/curses.rst:18 +msgid "What is curses?" +msgstr "curses 是什么?" + +#: ../../howto/curses.rst:20 +msgid "" +"The curses library supplies a terminal-independent screen-painting and " +"keyboard-handling facility for text-based terminals; such terminals include " +"VT100s, the Linux console, and the simulated terminal provided by various " +"programs. Display terminals support various control codes to perform common" +" operations such as moving the cursor, scrolling the screen, and erasing " +"areas. Different terminals use widely differing codes, and often have their" +" own minor quirks." +msgstr "" +"curses 库为基于文本的终端提供了独立于终端的屏幕绘制和键盘处理功能;这些终端包括 VT100,Linux " +"控制台以及各种程序提供的模拟终端。显示终端支持各种控制代码以执行常见的操作,例如移动光标,滚动屏幕和擦除区域。不同的终端使用相差很大的代码,并且往往有自己的小怪癖。" + +#: ../../howto/curses.rst:28 +msgid "" +"In a world of graphical displays, one might ask \"why bother\"? It's true " +"that character-cell display terminals are an obsolete technology, but there " +"are niches in which being able to do fancy things with them are still " +"valuable. One niche is on small-footprint or embedded Unixes that don't run" +" an X server. Another is tools such as OS installers and kernel " +"configurators that may have to run before any graphical support is " +"available." +msgstr "" +"在普遍使用图形显示的世界中,人们可能会问“为什么自找要麻烦”?毕竟字符单元显示终端确实是一种过时的技术,但是在某些领域中,能够用它们做花哨的事情仍然很有价值。一个小众市场是在不运行" +" X server 的小型或嵌入式 Unix 上。另一个是在提供图形支持之前,可能需要运行的工具,例如操作系统安装程序和内核配置程序。" + +#: ../../howto/curses.rst:36 +msgid "" +"The curses library provides fairly basic functionality, providing the " +"programmer with an abstraction of a display containing multiple non-" +"overlapping windows of text. The contents of a window can be changed in " +"various ways---adding text, erasing it, changing its appearance---and the " +"curses library will figure out what control codes need to be sent to the " +"terminal to produce the right output. curses doesn't provide many user-" +"interface concepts such as buttons, checkboxes, or dialogs; if you need such" +" features, consider a user interface library such as `Urwid " +"`_." +msgstr "" +"curses 库提供了相当基础的功能,为程序员提供了包含多个非重叠文本窗口的显示的抽象。窗口的内容可以通过多种方式更改---" +"添加文本,擦除文本,更改其外观---以及curses库将确定需要向终端发送哪些控制代码以产生正确的输出。 " +"curses并没有提供诸多用户界面概念,例如按钮,复选框或对话框。如果需要这些功能,请考虑用户界面库,例如 `Urwid " +"`_ 。" + +#: ../../howto/curses.rst:46 +msgid "" +"The curses library was originally written for BSD Unix; the later System V " +"versions of Unix from AT&T added many enhancements and new functions. BSD " +"curses is no longer maintained, having been replaced by ncurses, which is an" +" open-source implementation of the AT&T interface. If you're using an open-" +"source Unix such as Linux or FreeBSD, your system almost certainly uses " +"ncurses. Since most current commercial Unix versions are based on System V " +"code, all the functions described here will probably be available. The " +"older versions of curses carried by some proprietary Unixes may not support " +"everything, though." +msgstr "" +"curses 库最初是为BSD Unix 编写的。 后来 AT&T 的Unix System V 版本加入了许多增强功能和新功能。如今BSD " +"curses已不再维护,被ncurses取代,ncurses是 AT&T 接口的开源实现。如果使用的是 Linux 或 FreeBSD " +"等开源Unix系统,则几乎肯定会使用ncurses。由于大多数当前的商业Unix版本都基于System " +"V代码,因此这里描述的所有功能可能都可用。但是,某些专有Unix所带来的较早版本的curses可能无法支持所有功能。" + +#: ../../howto/curses.rst:56 +msgid "" +"The Windows version of Python doesn't include the :mod:`curses` module. A " +"ported version called `UniCurses `_ is " +"available." +msgstr "" +"Python 的 Windows 版不包括 :mod:`curses` 模块。 一个可用的移植版本是 `UniCurses " +"`_。" + +#: ../../howto/curses.rst:62 +msgid "The Python curses module" +msgstr "Python 的 curses 模块" + +#: ../../howto/curses.rst:64 +msgid "" +"The Python module is a fairly simple wrapper over the C functions provided " +"by curses; if you're already familiar with curses programming in C, it's " +"really easy to transfer that knowledge to Python. The biggest difference is" +" that the Python interface makes things simpler by merging different C " +"functions such as :c:func:`addstr`, :c:func:`mvaddstr`, and " +":c:func:`mvwaddstr` into a single :meth:`~curses.window.addstr` method. " +"You'll see this covered in more detail later." +msgstr "" +"此 Python 模块相当简单地封装了 curses 提供的 C 函数;如果你已经熟悉在 C 语言中使用 curses 编程,把这些知识转移的 " +"Python 是非常容易的。最大的差异在于 Python 中的接口通过把不同的 C 函数合并来让事情变得更简单,比如 " +":c:func:`addstr`、:c:func:`mvaddstr` 和 :c:func:`mvwaddstr` 三个 C 函数被并入 " +":meth:`~curses.window.addstr` 这一个方法。下文中会描述更多的细节。" + +#: ../../howto/curses.rst:72 +msgid "" +"This HOWTO is an introduction to writing text-mode programs with curses and " +"Python. It doesn't attempt to be a complete guide to the curses API; for " +"that, see the Python library guide's section on ncurses, and the C manual " +"pages for ncurses. It will, however, give you the basic ideas." +msgstr "" +"本 HOWTO 是关于使用 curses 和 Python 编写文本模式程序的概述。它并不被设计为一个 curses API " +"的完整指南;如需完整指南,请参见 ncurses 的 Python 库指南章节和 ncurses 的 C 手册页。相对地,本 HOWTO " +"将会给你一些基本思路。" + +#: ../../howto/curses.rst:79 +msgid "Starting and ending a curses application" +msgstr "开始和结束 curses 应用程序" + +#: ../../howto/curses.rst:81 +msgid "" +"Before doing anything, curses must be initialized. This is done by calling " +"the :func:`~curses.initscr` function, which will determine the terminal " +"type, send any required setup codes to the terminal, and create various " +"internal data structures. If successful, :func:`initscr` returns a window " +"object representing the entire screen; this is usually called ``stdscr`` " +"after the name of the corresponding C variable. ::" +msgstr "" +"在做任何事情之前,curses 必须先被初始化。可以通过调用函数 :func:`~curses.initscr` " +"来实现,它将查明终端的类型,向终端发送任何必须的设置代码,并创建多种内部数据结构。如果此操作成功,:func:`initscr` " +"将会返回一个代表整个屏幕的窗口对象;它通常会遵循对应的 C 变量名被称作 ``stdscr``:" + +#: ../../howto/curses.rst:92 +msgid "" +"Usually curses applications turn off automatic echoing of keys to the " +"screen, in order to be able to read keys and only display them under certain" +" circumstances. This requires calling the :func:`~curses.noecho` function. " +"::" +msgstr "" +"使用 curses 的应用程序通常会关闭按键自动上屏,目的是读取按键并只在特定情况下展示它们。这需要调用函数 " +":func:`~curses.noecho`:" + +#: ../../howto/curses.rst:99 +msgid "" +"Applications will also commonly need to react to keys instantly, without " +"requiring the Enter key to be pressed; this is called cbreak mode, as " +"opposed to the usual buffered input mode. ::" +msgstr "应用程序也会广泛地需要立即响应按键,而不需要按下回车键;这被称为 “cbreak” 模式,与通常的缓冲输入模式相对:" + +#: ../../howto/curses.rst:105 +msgid "" +"Terminals usually return special keys, such as the cursor keys or navigation" +" keys such as Page Up and Home, as a multibyte escape sequence. While you " +"could write your application to expect such sequences and process them " +"accordingly, curses can do it for you, returning a special value such as " +":const:`curses.KEY_LEFT`. To get curses to do the job, you'll have to " +"enable keypad mode. ::" +msgstr "" +"终端通常会以多字节转义序列的形式返回特殊按键,比如光标键和导航键比如 Page Up 键和 Home " +"键。尽管你可以编写你的程序来应对这些序列,curses 能够代替你做到这件事,返回一个特殊值比如 " +":const:`curses.KEY_LEFT`。为了让 curses 做这项工作,你需要启用 keypad 模式:" + +#: ../../howto/curses.rst:114 +msgid "" +"Terminating a curses application is much easier than starting one. You'll " +"need to call::" +msgstr "终止一个 curses 应用程序比建立一个容易得多,你只需要调用:" + +#: ../../howto/curses.rst:121 +msgid "" +"to reverse the curses-friendly terminal settings. Then call the " +":func:`~curses.endwin` function to restore the terminal to its original " +"operating mode. ::" +msgstr "来还原对终端作出的 curses 友好设置。然后,调用函数 :func:`~curses.endwin` 来将终端还原到它的原始操作模式:" + +#: ../../howto/curses.rst:127 +msgid "" +"A common problem when debugging a curses application is to get your terminal" +" messed up when the application dies without restoring the terminal to its " +"previous state. In Python this commonly happens when your code is buggy and" +" raises an uncaught exception. Keys are no longer echoed to the screen when" +" you type them, for example, which makes using the shell difficult." +msgstr "" +"调试一个 curses 应用程序时常会发生,一个应用程序还未能还原终端到原本的状态就意外退出了,这会搅乱你的终端。在 Python " +"中这常常会发生在你的代码中有 bug 并引发了一个未捕获的异常。当你尝试输入时按键不会上屏,这使得使用终端变得困难。" + +#: ../../howto/curses.rst:133 +msgid "" +"In Python you can avoid these complications and make debugging much easier " +"by importing the :func:`curses.wrapper` function and using it like this::" +msgstr "" +"在 Python 中你可以避免这些复杂问题并让调试变得更简单,只需要导入 :func:`curses.wrapper` 函数并像这样使用它:" + +#: ../../howto/curses.rst:152 +msgid "" +"The :func:`~curses.wrapper` function takes a callable object and does the " +"initializations described above, also initializing colors if color support " +"is present. :func:`wrapper` then runs your provided callable. Once the " +"callable returns, :func:`wrapper` will restore the original state of the " +"terminal. The callable is called inside a :keyword:`try`...\\ " +":keyword:`except` that catches exceptions, restores the state of the " +"terminal, and then re-raises the exception. Therefore your terminal won't " +"be left in a funny state on exception and you'll be able to read the " +"exception's message and traceback." +msgstr "" +"函数 :func:`~curses.wrapper` 接受一个可调用对象并首先进行上述初始化过程,在终端支持着色时还会初始化颜色。接着 " +":func:`wrapper` 运行你提供的可调用对象。当该可调用对象返回时,:func:`wrapper` 会还原终端到初始状态。该可调用对象会在 " +":keyword:`try`...\\ :keyword:`except` " +"这样的结构内被调用,当它捕获到异常时,会先还原终端再重新引发这个异常。所以你的终端不会因为异常而被留在一个搞笑的状态,你也可以正常阅读异常消息和回溯信息。" + +#: ../../howto/curses.rst:164 +msgid "Windows and Pads" +msgstr "窗口和面板" + +#: ../../howto/curses.rst:166 +msgid "" +"Windows are the basic abstraction in curses. A window object represents a " +"rectangular area of the screen, and supports methods to display text, erase " +"it, allow the user to input strings, and so forth." +msgstr "窗口是 curses 中的基本抽象。一个窗口对象表示了屏幕上的一个矩形区域,并且提供方法来显示文本、擦除文本、允许用户输入字符串等等。" + +#: ../../howto/curses.rst:170 +msgid "" +"The ``stdscr`` object returned by the :func:`~curses.initscr` function is a " +"window object that covers the entire screen. Many programs may need only " +"this single window, but you might wish to divide the screen into smaller " +"windows, in order to redraw or clear them separately. The " +":func:`~curses.newwin` function creates a new window of a given size, " +"returning the new window object. ::" +msgstr "" +"函数 :func:`~curses.initscr` 返回的 ``stdscr`` " +"对象覆盖整个屏幕。许多程序可能只需要这一个窗口,但你可能希望把屏幕分割为多个更小的窗口,来分别重绘或者清除它们。函数 " +":func:`~curses.newwin` 根据给定的尺寸创建一个新窗口,并返回这个新的窗口对象:" + +#: ../../howto/curses.rst:181 +msgid "" +"Note that the coordinate system used in curses is unusual. Coordinates are " +"always passed in the order *y,x*, and the top-left corner of a window is " +"coordinate (0,0). This breaks the normal convention for handling " +"coordinates where the *x* coordinate comes first. This is an unfortunate " +"difference from most other computer applications, but it's been part of " +"curses since it was first written, and it's too late to change things now." +msgstr "" +"注意 curses 使用的坐标系统与寻常的不同。坐标始终是以 *y,x* 的顺序传递,并且左上角是坐标 (0,0)。这打破了正常的坐标处理约定,即 " +"*x* 坐标在前。这是一个与其他计算机应用程序糟糕的差异,但这从 curses 最初被编写出来就已是它的一部分,现在想要修改它已为时已晚。" + +#: ../../howto/curses.rst:189 +msgid "" +"Your application can determine the size of the screen by using the " +":data:`curses.LINES` and :data:`curses.COLS` variables to obtain the *y* and" +" *x* sizes. Legal coordinates will then extend from ``(0,0)`` to " +"``(curses.LINES - 1, curses.COLS - 1)``." +msgstr "" +"你的应用程序能够查明屏幕的尺寸,:data:`curses.LINES` 和 :data:`curses.COLS` 分别代表了 *y* 和 *x* " +"方向上的尺寸。合理的坐标应位于 ``(0,0)`` 到 ``(curses.LINES - 1, curses.COLS - 1)`` 范围内。" + +#: ../../howto/curses.rst:194 +msgid "" +"When you call a method to display or erase text, the effect doesn't " +"immediately show up on the display. Instead you must call the " +":meth:`~curses.window.refresh` method of window objects to update the " +"screen." +msgstr "" +"当你调用一个方法来显示或擦除文本时,效果并不会立即显示。相反,你必须调用窗口对象的 :meth:`~curses.window.refresh` " +"方法来更新屏幕。" + +#: ../../howto/curses.rst:199 +msgid "" +"This is because curses was originally written with slow 300-baud terminal " +"connections in mind; with these terminals, minimizing the time required to " +"redraw the screen was very important. Instead curses accumulates changes to" +" the screen and displays them in the most efficient manner when you call " +":meth:`refresh`. For example, if your program displays some text in a " +"window and then clears the window, there's no need to send the original text" +" because they're never visible." +msgstr "" +"这是因为 curses 最初是为 300 波特的龟速终端连接编写的;在这些终端上,压制重绘屏幕的时间就非常重要。相对地,当你调用 " +":meth:`refresh` 时,curses " +"会累积屏幕的修改并以效率最高的方式显示它们。打个比方,如果你的程序在一个窗口内显示一些文本然后清楚了这个窗口,那么这些原始文本不需要被发送,因为它们甚至不曾能被看见。" + +#: ../../howto/curses.rst:208 +msgid "" +"In practice, explicitly telling curses to redraw a window doesn't really " +"complicate programming with curses much. Most programs go into a flurry of " +"activity, and then pause waiting for a keypress or some other action on the " +"part of the user. All you have to do is to be sure that the screen has been" +" redrawn before pausing to wait for user input, by first calling " +"``stdscr.refresh()`` or the :meth:`refresh` method of some other relevant " +"window." +msgstr "" +"在实践中,显式地告诉 curses 来重绘一个窗口并不会太复杂化 curses " +"编程。大部分程序会显示一堆内容然后等待按键或者其他某些用户侧动作。你要做的事情就是,保证屏幕在暂停并等待用户输入前被重绘,只需要先调用 " +"``stdscr.refresh()`` 或者其他相关窗口的 :meth:`refresh` 方法。" + +#: ../../howto/curses.rst:216 +msgid "" +"A pad is a special case of a window; it can be larger than the actual " +"display screen, and only a portion of the pad displayed at a time. Creating " +"a pad requires the pad's height and width, while refreshing a pad requires " +"giving the coordinates of the on-screen area where a subsection of the pad " +"will be displayed. ::" +msgstr "" +"一个面板是一种特殊的窗口,它可以比实际的显示屏幕更大,并且能只显示它的一部分。创建面板需要指定面板的高度和宽度,但刷新一个面板需要给出屏幕坐标和面板的需要显示的局部。" + +#: ../../howto/curses.rst:237 +msgid "" +"The :meth:`refresh` call displays a section of the pad in the rectangle " +"extending from coordinate (5,5) to coordinate (20,75) on the screen; the " +"upper left corner of the displayed section is coordinate (0,0) on the pad. " +"Beyond that difference, pads are exactly like ordinary windows and support " +"the same methods." +msgstr "" +"此 :meth:`refresh` 调用会在屏幕坐标 (5,5) 到坐标 (20,75) 的矩形范围内显示面板的一个部分,被显示的部分在面板上的坐标是 " +"(0,0)。除了上述差异,面板与常规的窗口相同,也支持相同的方法。" + +#: ../../howto/curses.rst:243 +msgid "" +"If you have multiple windows and pads on screen there is a more efficient " +"way to update the screen and prevent annoying screen flicker as each part of" +" the screen gets updated. :meth:`refresh` actually does two things:" +msgstr "" +"如果你在屏幕上有多个窗口和面板,有一个更有效率的方法来更新窗口,避免每个部分单独更新时烦人的屏幕闪烁。:meth:`refresh` 实际上做了两件事:" + +#: ../../howto/curses.rst:248 +msgid "" +"Calls the :meth:`~curses.window.noutrefresh` method of each window to update" +" an underlying data structure representing the desired state of the screen." +msgstr "调用每个窗口的 :meth:`~curses.window.noutrefresh` 方法来更新一个表达屏幕期望状态的底层的数据结构。" + +#: ../../howto/curses.rst:251 +msgid "" +"Calls the function :func:`~curses.doupdate` function to change the physical " +"screen to match the desired state recorded in the data structure." +msgstr "调用函数 :func:`~curses.doupdate` 来改变物理屏幕来符合这个数据结构中记录的期望状态。" + +#: ../../howto/curses.rst:254 +msgid "" +"Instead you can call :meth:`noutrefresh` on a number of windows to update " +"the data structure, and then call :func:`doupdate` to update the screen." +msgstr "" +"你可以改为调用在多个窗口上 :meth:`noutrefresh` 方法来更新该数据结构,然后调用函数 :func:`doupdate` 来更新屏幕。" + +#: ../../howto/curses.rst:260 +msgid "Displaying Text" +msgstr "显示文字" + +#: ../../howto/curses.rst:262 +msgid "" +"From a C programmer's point of view, curses may sometimes look like a twisty" +" maze of functions, all subtly different. For example, :c:func:`addstr` " +"displays a string at the current cursor location in the ``stdscr`` window, " +"while :c:func:`mvaddstr` moves to a given y,x coordinate first before " +"displaying the string. :c:func:`waddstr` is just like :c:func:`addstr`, but " +"allows specifying a window to use instead of using ``stdscr`` by default. " +":c:func:`mvwaddstr` allows specifying both a window and a coordinate." +msgstr "" +"从一名 C 语言程序员的视角来看,curses 有时看起来就像是一堆略有差异的函数组成的扭曲迷宫。举个例子,:c:func:`addstr` 在 " +"``stdscr`` 窗口的当前光标位置显示一个字符串,而 :c:func:`mvaddstr` 则是先移动到一个给定的 y,x " +"坐标再显示字符串。:c:func:`waddstr` 与 :c:func:`addstr` 类似,但允许指定一个窗口而非默认的 " +"``stdscr``。:c:func:`mvwaddstr` 允许同时指定一个窗口和一个坐标。" + +#: ../../howto/curses.rst:271 +msgid "" +"Fortunately the Python interface hides all these details. ``stdscr`` is a " +"window object like any other, and methods such as " +":meth:`~curses.window.addstr` accept multiple argument forms. Usually there" +" are four different forms." +msgstr "" +"幸运的是,Python 接口隐藏了所有这些细节。``stdscr`` 和其他任何窗口一样是一个窗口对象,并且诸如 " +":meth:`~curses.window.addstr` 之类的方法接受多种参数形式。通常有四种形式。" + +#: ../../howto/curses.rst:277 +msgid "Form" +msgstr "形式" + +#: ../../howto/curses.rst:277 ../../howto/curses.rst:346 +msgid "Description" +msgstr "描述" + +#: ../../howto/curses.rst:279 +msgid "*str* or *ch*" +msgstr "*str* 或 *ch*" + +#: ../../howto/curses.rst:279 +msgid "Display the string *str* or character *ch* at the current position" +msgstr "在当前位置显示字符串 *str* 或字符 *ch*" + +#: ../../howto/curses.rst:282 +msgid "*str* or *ch*, *attr*" +msgstr "*str* 或 *ch*, *attr*" + +#: ../../howto/curses.rst:282 +msgid "" +"Display the string *str* or character *ch*, using attribute *attr* at the " +"current position" +msgstr "在当前位置使用 *attr* 属性显示字符串 *str* 或字符 *ch*" + +#: ../../howto/curses.rst:286 +msgid "*y*, *x*, *str* or *ch*" +msgstr "*y*, *x*, *str* 或 *ch*" + +#: ../../howto/curses.rst:286 +msgid "Move to position *y,x* within the window, and display *str* or *ch*" +msgstr "移动到窗口内的 *y,x* 位置,并显示 *str* 或 *ch*" + +#: ../../howto/curses.rst:289 +msgid "*y*, *x*, *str* or *ch*, *attr*" +msgstr "*y*, *x*, *str* 或 *ch*, *attr*" + +#: ../../howto/curses.rst:289 +msgid "" +"Move to position *y,x* within the window, and display *str* or *ch*, using " +"attribute *attr*" +msgstr "移至窗口内的 *y,x* 位置,并使用 *attr* 属性显示 *str* 或 *ch*" + +#: ../../howto/curses.rst:293 +msgid "" +"Attributes allow displaying text in highlighted forms such as boldface, " +"underline, reverse code, or in color. They'll be explained in more detail " +"in the next subsection." +msgstr "属性允许以突出显示形态显示文本,比如加粗、下划线、反相或添加颜色。这些属性将来下一小节细说。" + +#: ../../howto/curses.rst:298 +msgid "" +"The :meth:`~curses.window.addstr` method takes a Python string or bytestring" +" as the value to be displayed. The contents of bytestrings are sent to the " +"terminal as-is. Strings are encoded to bytes using the value of the " +"window's :attr:`encoding` attribute; this defaults to the default system " +"encoding as returned by :func:`locale.getpreferredencoding`." +msgstr "" +"方法 :meth:`~curses.window.addstr` 接受一个 Python " +"字符串或字节串作为用于显示的值。字节串的内容会被原样发送到终端。字符串会使用窗口的 :attr:`encoding` 属性值编码为字节,它默认为 " +":func:`locale.getpreferredencoding` 返回的系统默认编码。" + +#: ../../howto/curses.rst:305 +msgid "" +"The :meth:`~curses.window.addch` methods take a character, which can be " +"either a string of length 1, a bytestring of length 1, or an integer." +msgstr "" +"方法 :meth:`~curses.window.addch` 接受一个字符,可以是长度为 1 的字符串,长度为 1 的字节串或者一个整数。" + +#: ../../howto/curses.rst:308 +msgid "" +"Constants are provided for extension characters; these constants are " +"integers greater than 255. For example, :const:`ACS_PLMINUS` is a +/- " +"symbol, and :const:`ACS_ULCORNER` is the upper left corner of a box (handy " +"for drawing borders). You can also use the appropriate Unicode character." +msgstr "" +"对于特殊扩展字符有一些常量,这些常量是大于 255 的整数。比如,:const:`ACS_PLMINUS` 是一个 “加减” " +"符号,:const:`ACS_ULCORNER` 是一个框的左上角(方便绘制边界)。你也可以使用正确的 Unicode 字符。" + +#: ../../howto/curses.rst:314 +msgid "" +"Windows remember where the cursor was left after the last operation, so if " +"you leave out the *y,x* coordinates, the string or character will be " +"displayed wherever the last operation left off. You can also move the " +"cursor with the ``move(y,x)`` method. Because some terminals always display" +" a flashing cursor, you may want to ensure that the cursor is positioned in " +"some location where it won't be distracting; it can be confusing to have the" +" cursor blinking at some apparently random location." +msgstr "" +"窗口会记住上次操作之后光标所在位置,所以如果你忽略 *y,x* 坐标,字符串和字符会出现在上次操作结束的位置。你也可以通过 ``move(y,x)`` " +"的方法来移动光标。因为一些终端始终会显示一个闪烁的光标,你可能会想要保证光标处于一些不会让人感到分心的位置。在看似随机的位置出现一个闪烁的光标会令人非常迷惑。" + +#: ../../howto/curses.rst:322 +msgid "" +"If your application doesn't need a blinking cursor at all, you can call " +"``curs_set(False)`` to make it invisible. For compatibility with older " +"curses versions, there's a ``leaveok(bool)`` function that's a synonym for " +":func:`~curses.curs_set`. When *bool* is true, the curses library will " +"attempt to suppress the flashing cursor, and you won't need to worry about " +"leaving it in odd locations." +msgstr "" +"如果你的应用程序完全不需要一个闪烁的光标,你可以调用 ``curs_set(False)`` 来使它隐形。为与旧版本 curses " +"的兼容性的关系,有函数 ``leaveok(bool)`` 作为 :func:`~curses.curs_set` 的等价替换。如果 *bool* " +"是真值,curses 库会尝试移除闪烁光标,并且你也不必担心它会留在一些奇怪的位置。" + +#: ../../howto/curses.rst:331 +msgid "Attributes and Color" +msgstr "属性和颜色" + +#: ../../howto/curses.rst:333 +msgid "" +"Characters can be displayed in different ways. Status lines in a text-based" +" application are commonly shown in reverse video, or a text viewer may need " +"to highlight certain words. curses supports this by allowing you to specify" +" an attribute for each cell on the screen." +msgstr "" +"字符可以以不同的方式显示。基于文本的应用程序常常以反相显示状态行,一个文本查看器可能需要突出显示某些单词。为了支持这种用法,curses " +"允许你为屏幕上的每个单元指定一个属性值。" + +#: ../../howto/curses.rst:338 +msgid "" +"An attribute is an integer, each bit representing a different attribute. " +"You can try to display text with multiple attribute bits set, but curses " +"doesn't guarantee that all the possible combinations are available, or that " +"they're all visually distinct. That depends on the ability of the terminal " +"being used, so it's safest to stick to the most commonly available " +"attributes, listed here." +msgstr "" +"属性值是一个整数,它的每一个二进制位代表一个不同的属性。你可以尝试以多种不属性位组合来显示文本,但 curses " +"不保证所有的组合都是有效的,或者看上去有明显不同。这一点取决于用户终端的能力,所以最稳妥的方式是只采用最常见的有效属性,见下表。" + +#: ../../howto/curses.rst:346 +msgid "Attribute" +msgstr "属性" + +#: ../../howto/curses.rst:348 +msgid ":const:`A_BLINK`" +msgstr ":const:`A_BLINK`" + +#: ../../howto/curses.rst:348 +msgid "Blinking text" +msgstr "闪烁文本" + +#: ../../howto/curses.rst:350 +msgid ":const:`A_BOLD`" +msgstr ":const:`A_BOLD`" + +#: ../../howto/curses.rst:350 +msgid "Extra bright or bold text" +msgstr "超亮或粗体文本" + +#: ../../howto/curses.rst:352 +msgid ":const:`A_DIM`" +msgstr ":const:`A_DIM`" + +#: ../../howto/curses.rst:352 +msgid "Half bright text" +msgstr "半明亮文本" + +#: ../../howto/curses.rst:354 +msgid ":const:`A_REVERSE`" +msgstr ":const:`A_REVERSE`" + +#: ../../howto/curses.rst:354 +msgid "Reverse-video text" +msgstr "反相显示文本" + +#: ../../howto/curses.rst:356 +msgid ":const:`A_STANDOUT`" +msgstr ":const:`A_STANDOUT`" + +#: ../../howto/curses.rst:356 +msgid "The best highlighting mode available" +msgstr "可用的最佳突出显示模式" + +#: ../../howto/curses.rst:358 +msgid ":const:`A_UNDERLINE`" +msgstr ":const:`A_UNDERLINE`" + +#: ../../howto/curses.rst:358 +msgid "Underlined text" +msgstr "带下划线的文本" + +#: ../../howto/curses.rst:361 +msgid "" +"So, to display a reverse-video status line on the top line of the screen, " +"you could code::" +msgstr "所以,为了在屏幕顶部显示一个反相的状态行,你可以这么编写:" + +#: ../../howto/curses.rst:368 +msgid "" +"The curses library also supports color on those terminals that provide it. " +"The most common such terminal is probably the Linux console, followed by " +"color xterms." +msgstr "" +"curses 库还支持在提供了颜色功能的终端上显示颜色的功能。最常见的提供颜色的终端很可能是 Linux 控制台,采用了 xterms 配色方案。" + +#: ../../howto/curses.rst:372 +msgid "" +"To use color, you must call the :func:`~curses.start_color` function soon " +"after calling :func:`~curses.initscr`, to initialize the default color set " +"(the :func:`curses.wrapper` function does this automatically). Once that's " +"done, the :func:`~curses.has_colors` function returns TRUE if the terminal " +"in use can actually display color. (Note: curses uses the American spelling" +" 'color', instead of the Canadian/British spelling 'colour'. If you're used" +" to the British spelling, you'll have to resign yourself to misspelling it " +"for the sake of these functions.)" +msgstr "" +"为了使用颜色,你必须在调用完函数 :func:`~curses.initscr` 后尽快调用函数 " +":func:`~curses.start_color`,来初始化默认颜色集 (:func:`curses.wrapper` 函数自动完成了这一点)。 " +"当它完成后,如果使用中的终端支持显示颜色, :func:`~curses.has_colors` 会返回真值。 (注意:curses 使用美式拼写 " +"“color”,而不是英式/加拿大拼写 “colour”。如果你习惯了英式拼写,你需要避免自己在这些函数上拼写错误。)" + +#: ../../howto/curses.rst:382 +msgid "" +"The curses library maintains a finite number of color pairs, containing a " +"foreground (or text) color and a background color. You can get the " +"attribute value corresponding to a color pair with the " +":func:`~curses.color_pair` function; this can be bitwise-OR'ed with other " +"attributes such as :const:`A_REVERSE`, but again, such combinations are not " +"guaranteed to work on all terminals." +msgstr "" +"curses 库维护一个有限数量的颜色对,包括一个前景(文本)色和一个背景色。你可以使用函数 :func:`~curses.color_pair` " +"获得一个颜色对对应的属性值。它可以通过按位或运算与其他属性,比如 :const:`A_REVERSE` " +"组合。但再说明一遍,这种组合并不保证在所有终端上都有效。" + +#: ../../howto/curses.rst:389 +msgid "An example, which displays a line of text using color pair 1::" +msgstr "一个样例,用 1 号颜色对显示一行文本:" + +#: ../../howto/curses.rst:394 +msgid "" +"As I said before, a color pair consists of a foreground and background " +"color. The ``init_pair(n, f, b)`` function changes the definition of color " +"pair *n*, to foreground color f and background color b. Color pair 0 is " +"hard-wired to white on black, and cannot be changed." +msgstr "" +"如前所述, 颜色对由前景色和背景色组成。 ``init_pair(n, f, b)`` 函数可改变颜色对 *n* 的定义 为前景色 f 和背景色 b。" +" 颜色对 0 硬编码为黑底白字,不能改变。" + +#: ../../howto/curses.rst:399 +msgid "" +"Colors are numbered, and :func:`start_color` initializes 8 basic colors when" +" it activates color mode. They are: 0:black, 1:red, 2:green, 3:yellow, " +"4:blue, 5:magenta, 6:cyan, and 7:white. The :mod:`curses` module defines " +"named constants for each of these colors: :const:`curses.COLOR_BLACK`, " +":const:`curses.COLOR_RED`, and so forth." +msgstr "" +"颜色已经被编号,并且当其激活 color 模式时 :func:`start_color` 会初始化 8 种基本颜色。 它们是: 0:black, " +"1:red, 2:green, 3:yellow, 4:blue, 5:magenta, 6:cyan 和 7:white。 :mod:`curses`" +" 模块为这些颜色定义了相应的名称常量: :const:`curses.COLOR_BLACK`, :const:`curses.COLOR_RED` " +"等等。" + +#: ../../howto/curses.rst:405 +msgid "" +"Let's put all this together. To change color 1 to red text on a white " +"background, you would call::" +msgstr "让我们来做个综合练习。 要将颜色 1 改为红色文本白色背景,你应当调用::" + +#: ../../howto/curses.rst:410 +msgid "" +"When you change a color pair, any text already displayed using that color " +"pair will change to the new colors. You can also display new text in this " +"color with::" +msgstr "当你改变一个颜色对时,任何已经使用该颜色对来显示的文本将会更改为新的颜色。 你还可以这样来显示新颜色的文本::" + +#: ../../howto/curses.rst:416 +msgid "" +"Very fancy terminals can change the definitions of the actual colors to a " +"given RGB value. This lets you change color 1, which is usually red, to " +"purple or blue or any other color you like. Unfortunately, the Linux " +"console doesn't support this, so I'm unable to try it out, and can't provide" +" any examples. You can check if your terminal can do this by calling " +":func:`~curses.can_change_color`, which returns ``True`` if the capability " +"is there. If you're lucky enough to have such a talented terminal, consult " +"your system's man pages for more information." +msgstr "" +"某些非常花哨的终端可以将实际颜色定义修改为给定的 RGB 值。 这允许你将通常为红色的 1 号颜色改成紫色或蓝色或者任何你喜欢的颜色。 " +"不幸的是,Linux 控制台不支持此特性,所以我无法尝试它,也无法提供任何示例。 想要检查你的终端是否能做到你可以调用 " +":func:`~curses.can_change_color`,如果有此功能则它将返回 ``True``。 " +"如果你幸运地拥有一个如此优秀的终端,请查询你的系统的帮助页面来了解详情。" + +#: ../../howto/curses.rst:427 +msgid "User Input" +msgstr "用户输入" + +#: ../../howto/curses.rst:429 +msgid "" +"The C curses library offers only very simple input mechanisms. Python's " +":mod:`curses` module adds a basic text-input widget. (Other libraries such " +"as `Urwid `_ have more extensive " +"collections of widgets.)" +msgstr "" +"C curses 库提供了非常简单的输入机制。 Python 的 :mod:`curses` 模块添加了一个基本的文本输入控件。 (其他的库例如 " +"`Urwid `_ 拥有更丰富的控件集。)" + +#: ../../howto/curses.rst:434 +msgid "There are two methods for getting input from a window:" +msgstr "有两个方法可以从窗口获取输入:" + +#: ../../howto/curses.rst:436 +msgid "" +":meth:`~curses.window.getch` refreshes the screen and then waits for the " +"user to hit a key, displaying the key if :func:`~curses.echo` has been " +"called earlier. You can optionally specify a coordinate to which the cursor" +" should be moved before pausing." +msgstr "" +":meth:`~curses.window.getch` 会刷新屏幕然后等待用户按键,如果之前调用过 :func:`~curses.echo` " +"还会显示所按的键。 你还可以选择指定一个坐标以便在暂停之前让光标移动到那里。" + +#: ../../howto/curses.rst:441 +msgid "" +":meth:`~curses.window.getkey` does the same thing but converts the integer " +"to a string. Individual characters are returned as 1-character strings, and" +" special keys such as function keys return longer strings containing a key " +"name such as ``KEY_UP`` or ``^G``." +msgstr "" +":meth:`~curses.window.getkey` 将做同样的事但是会把整数转换为字符串。 每个字符将返回为长度为 1 " +"个字符的字符串,特殊键例如函数键将返回包含键名的较长字符串例如 ``KEY_UP`` 或 ``^G``。" + +#: ../../howto/curses.rst:446 +msgid "" +"It's possible to not wait for the user using the " +":meth:`~curses.window.nodelay` window method. After ``nodelay(True)``, " +":meth:`getch` and :meth:`getkey` for the window become non-blocking. To " +"signal that no input is ready, :meth:`getch` returns ``curses.ERR`` (a value" +" of -1) and :meth:`getkey` raises an exception. There's also a " +":func:`~curses.halfdelay` function, which can be used to (in effect) set a " +"timer on each :meth:`getch`; if no input becomes available within a " +"specified delay (measured in tenths of a second), curses raises an " +"exception." +msgstr "" +"使用 :meth:`~curses.window.nodelay` 窗口方法可以做到不等待用户。 在 ``nodelay(True)`` 之后,窗口的 " +":meth:`getch` 和 :meth:`getkey` 将成为非阻塞的。 为表明输入未就绪,:meth:`getch` 会返回 " +"``curses.ERR`` (值为 -1) 而 :meth:`getkey` 会引发异常。 此外还有 " +":func:`~curses.halfdelay` 函数,它可被用来(实际地)在每个 :meth:`getch` " +"上设置一个计时器;如果在指定的延迟内没有输入可用(以十分之一秒为单位),curses 将引发异常。" + +#: ../../howto/curses.rst:456 +msgid "" +"The :meth:`getch` method returns an integer; if it's between 0 and 255, it " +"represents the ASCII code of the key pressed. Values greater than 255 are " +"special keys such as Page Up, Home, or the cursor keys. You can compare the " +"value returned to constants such as :const:`curses.KEY_PPAGE`, " +":const:`curses.KEY_HOME`, or :const:`curses.KEY_LEFT`. The main loop of " +"your program may look something like this::" +msgstr "" +":meth:`getch` 方法返回一个整数;如果数值在 0 到 255 之间,它代表所按下键的 ASCII 码。 大于 255 的值为特殊键例如 " +"Page Up, Home 或方向键等。 你可以将返回的值与 :const:`curses.KEY_PPAGE`, " +":const:`curses.KEY_HOME` 或 :const:`curses.KEY_LEFT` 等常量做比较。 " +"你的程序主循环看起来可能是这样::" + +#: ../../howto/curses.rst:472 +msgid "" +"The :mod:`curses.ascii` module supplies ASCII class membership functions " +"that take either integer or 1-character string arguments; these may be " +"useful in writing more readable tests for such loops. It also supplies " +"conversion functions that take either integer or 1-character-string " +"arguments and return the same type. For example, :func:`curses.ascii.ctrl` " +"returns the control character corresponding to its argument." +msgstr "" +":mod:`curses.ascii` 模块提供了一些 ASCII 类成员函数,它们接受整数或长度为 1 " +"个字符的字符串参数;这些函数在为这样的循环编写更具可读性的测试时可能会很有用。 它还提供了一些转换函数,它们接受整数或长度为 1 " +"个字符的字符串参数并返回同样的类型。 例如,:func:`curses.ascii.ctrl` 返回与其参数相对应的控制字符。" + +#: ../../howto/curses.rst:479 +msgid "" +"There's also a method to retrieve an entire string, " +":meth:`~curses.window.getstr`. It isn't used very often, because its " +"functionality is quite limited; the only editing keys available are the " +"backspace key and the Enter key, which terminates the string. It can " +"optionally be limited to a fixed number of characters. ::" +msgstr "" +"还有一个可以提取整个字符串的方法 :meth:`~curses.window.getstr`。 它并不经常被使用,因为它的功能相当受限;可用的编辑键只有" +" Backspace 和 Enter 键,它们会结束字符串。 也可以选择限制为固定数量的字符。 ::" + +#: ../../howto/curses.rst:490 +msgid "" +"The :mod:`curses.textpad` module supplies a text box that supports an Emacs-" +"like set of keybindings. Various methods of the " +":class:`~curses.textpad.Textbox` class support editing with input validation" +" and gathering the edit results either with or without trailing spaces. " +"Here's an example::" +msgstr "" +":mod:`curses.textpad` 模块提供了一个文本框,它支持类似 Emacs 的键绑定集。 " +":class:`~curses.textpad.Textbox` 类的各种方法支持带输入验证的编辑及包含或不包含末尾空格地收集编辑结果。 " +"下面是一个例子::" + +#: ../../howto/curses.rst:514 +msgid "" +"See the library documentation on :mod:`curses.textpad` for more details." +msgstr "请查看 :mod:`curses.textpad` 的库文档了解更多细节。" + +#: ../../howto/curses.rst:518 +msgid "For More Information" +msgstr "更多的信息" + +#: ../../howto/curses.rst:520 +msgid "" +"This HOWTO doesn't cover some advanced topics, such as reading the contents " +"of the screen or capturing mouse events from an xterm instance, but the " +"Python library page for the :mod:`curses` module is now reasonably complete." +" You should browse it next." +msgstr "" +"本 HOWTO 没有涵盖一些进阶主题,例如读取屏幕的内容或从 xterm 实例捕获鼠标事件等,但是 :mod:`curses` 模块的 Python " +"库文档页面现在已相当完善。 接下来你应当去浏览一下其中的内容。" + +#: ../../howto/curses.rst:525 +msgid "" +"If you're in doubt about the detailed behavior of the curses functions, " +"consult the manual pages for your curses implementation, whether it's " +"ncurses or a proprietary Unix vendor's. The manual pages will document any " +"quirks, and provide complete lists of all the functions, attributes, and " +":const:`ACS_\\*` characters available to you." +msgstr "" +"如果你对 curses 函数的细节行为有疑问,请查看你的 curses 实现版本的说明页面,不论它是 ncurses 还是特定 Unix 厂商的版本。 " +"说明页面将记录任何具体问题,并提供所有函数、属性以及可用 :const:`ACS_\\*` 字符的完整列表。" + +#: ../../howto/curses.rst:532 +msgid "" +"Because the curses API is so large, some functions aren't supported in the " +"Python interface. Often this isn't because they're difficult to implement, " +"but because no one has needed them yet. Also, Python doesn't yet support " +"the menu library associated with ncurses. Patches adding support for these " +"would be welcome; see `the Python Developer's Guide " +"`_ to learn more about submitting patches to " +"Python." +msgstr "" +"由于 curses API 是如此的庞大,某些函数并不被 Python 接口所支持。 这往往不是因为它们难以实现,而是因为还没有人需要它们。 " +"此外,Python 尚不支持与 ncurses 相关联的菜单库。 欢迎提供添加这些功能的补丁;请参阅 `Python 开发者指南 " +"`_ 了解有关为 Python 提交补丁的详情。" + +#: ../../howto/curses.rst:540 +msgid "" +"`Writing Programs with NCURSES `_: a lengthy tutorial for C programmers." +msgstr "" +"`使用 NCURSES 编写程序 `_:" +" 一篇面向 C 程序员的详细教程。" + +#: ../../howto/curses.rst:542 +msgid "`The ncurses man page `_" +msgstr "ncurses 手册主页 `_" + +#: ../../howto/curses.rst:543 +msgid "" +"`The ncurses FAQ `_" +msgstr "ncurses 常见问题 `_" + +#: ../../howto/curses.rst:544 +msgid "" +"`\"Use curses... don't swear\" " +"`_: video of a PyCon 2013 talk " +"on controlling terminals using curses or Urwid." +msgstr "" +"`\"使用 curses... 请勿爆粗\" `_: " +"一场有关使用 curses 或 Urwid 来控制终端的 PyCon 2013 演讲的视频。" + +#: ../../howto/curses.rst:546 +msgid "" +"`\"Console Applications with Urwid\" " +"`_: video" +" of a PyCon CA 2012 talk demonstrating some applications written using " +"Urwid." +msgstr "" +"`\"使用 Urwid 的控制台应用程序\" `_: 一场演示使用 Urwid 编写应用程序的 PyCon CA 2012 演讲的视频。" diff --git a/howto/descriptor.po b/howto/descriptor.po new file mode 100644 index 000000000..d26db43f9 --- /dev/null +++ b/howto/descriptor.po @@ -0,0 +1,1164 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) 2001-2025, Python Software Foundation +# This file is distributed under the same license as the Python package. +# FIRST AUTHOR , YEAR. +# +# Translators: +# Fei Yin , 2018 +# df2dc1c92e792f7ae8417c51df43db8f_594d92a <0f49be28017426edb1db1a2ab6e67088_717605>, 2018 +# banxi , 2019 +# ppcfish , 2019 +# Freesand Leo , 2021 +# WH-2099 , 2022 +# Rafael Fontenelle , 2025 +# +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: Python 3.9\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2025-02-07 16:40+0000\n" +"PO-Revision-Date: 2017-02-16 17:44+0000\n" +"Last-Translator: Rafael Fontenelle , 2025\n" +"Language-Team: Chinese (China) (https://app.transifex.com/python-doc/teams/5390/zh_CN/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: zh_CN\n" +"Plural-Forms: nplurals=1; plural=0;\n" + +#: ../../howto/descriptor.rst:5 +msgid "Descriptor HowTo Guide" +msgstr "描述器使用指南" + +#: ../../howto/descriptor.rst:0 +msgid "Author" +msgstr "作者" + +#: ../../howto/descriptor.rst:7 +msgid "Raymond Hettinger" +msgstr "Raymond Hettinger(译者:wh2099 at outlook dot com)" + +#: ../../howto/descriptor.rst:0 +msgid "Contact" +msgstr "联系方式" + +#: ../../howto/descriptor.rst:8 +msgid "" +msgstr "" + +#: ../../howto/descriptor.rst:11 +msgid "Contents" +msgstr "目录" + +#: ../../howto/descriptor.rst:13 +msgid "" +":term:`Descriptors ` let objects customize attribute lookup, " +"storage, and deletion." +msgstr ":term:`描述器 ` 让对象能够自定义属性查找、存储和删除的操作。" + +#: ../../howto/descriptor.rst:16 +msgid "This guide has four major sections:" +msgstr "本指南主要分为四个部分:" + +#: ../../howto/descriptor.rst:18 +msgid "" +"The \"primer\" gives a basic overview, moving gently from simple examples, " +"adding one feature at a time. Start here if you're new to descriptors." +msgstr "“入门” 部分从简单的示例着手,逐步添加特性,从而给出基本的概述。如果你是刚接触到描述器,请从这里开始。" + +#: ../../howto/descriptor.rst:21 +msgid "" +"The second section shows a complete, practical descriptor example. If you " +"already know the basics, start there." +msgstr "第二部分展示了完整的、实用的描述器示例。如果您已经掌握了基础知识,请从此处开始。" + +#: ../../howto/descriptor.rst:24 +msgid "" +"The third section provides a more technical tutorial that goes into the " +"detailed mechanics of how descriptors work. Most people don't need this " +"level of detail." +msgstr "第三部分提供了更多技术教程,详细介绍了描述器如何工作。大多数人并不需要深入到这种程度。" + +#: ../../howto/descriptor.rst:28 +msgid "" +"The last section has pure Python equivalents for built-in descriptors that " +"are written in C. Read this if you're curious about how functions turn into" +" bound methods or about the implementation of common tools like " +":func:`classmethod`, :func:`staticmethod`, :func:`property`, and " +":term:`__slots__`." +msgstr "" +"最后一部分有对内置描述器(用 C 编写)的纯 Python 等价实现。如果您想了解函数如何变成绑定方法或对 :func:`classmethod`, " +":func:`staticmethod`,:func:`property` 和 :term:`__slots__` " +"这类常见工具的实现感兴趣,请阅读此部分。" + +#: ../../howto/descriptor.rst:36 +msgid "Primer" +msgstr "入门" + +#: ../../howto/descriptor.rst:38 +msgid "" +"In this primer, we start with the most basic possible example and then we'll" +" add new capabilities one by one." +msgstr "现在,让我们从最基本的示例开始,然后逐步添加新功能。" + +#: ../../howto/descriptor.rst:43 +msgid "Simple example: A descriptor that returns a constant" +msgstr "简单示例:返回常量的描述器" + +#: ../../howto/descriptor.rst:45 +msgid "" +"The :class:`Ten` class is a descriptor that always returns the constant " +"``10`` from its :meth:`__get__` method:" +msgstr "类 :class:`Ten` 是一个描述器,它的 :meth:`__get__` 方法总是返回常量 ``10``:" + +#: ../../howto/descriptor.rst:54 +msgid "" +"To use the descriptor, it must be stored as a class variable in another " +"class:" +msgstr "要使用描述器,它必须作为一个类变量存储在另一个类中:" + +#: ../../howto/descriptor.rst:62 +msgid "" +"An interactive session shows the difference between normal attribute lookup " +"and descriptor lookup:" +msgstr "用交互式会话查看普通属性查找和描述器查找之间的区别:" + +#: ../../howto/descriptor.rst:73 +msgid "" +"In the ``a.x`` attribute lookup, the dot operator finds the key ``x`` and " +"the value ``5`` in the class dictionary. In the ``a.y`` lookup, the dot " +"operator finds a descriptor instance, recognized by its ``__get__`` method, " +"and calls that method which returns ``10``." +msgstr "" +"在 ``a.x`` 属性查找中,点运算符会找到存储在类字典中的键 ``x`` 及对应的值 ``5`` 。 在 ``a.y`` " +"查找中,点运算符会根据描述器实例的 ``__get__`` 方法将其识别出来,调用该方法并返回 ``10`` 。" + +#: ../../howto/descriptor.rst:78 +msgid "" +"Note that the value ``10`` is not stored in either the class dictionary or " +"the instance dictionary. Instead, the value ``10`` is computed on demand." +msgstr "请注意,值 ``10`` 既不存储在类字典中也不存储在实例字典中。相反,值 ``10`` 是在调用时才取到的。" + +#: ../../howto/descriptor.rst:81 +msgid "" +"This example shows how a simple descriptor works, but it isn't very useful. " +"For retrieving constants, normal attribute lookup would be better." +msgstr "这个简单的例子展示了一个描述器是如何工作的,但它不是很有用。在查找常量时,用常规属性查找会更好。" + +#: ../../howto/descriptor.rst:84 +msgid "" +"In the next section, we'll create something more useful, a dynamic lookup." +msgstr "在下一节中,我们将创建更有用的东西,即动态查找。" + +#: ../../howto/descriptor.rst:88 +msgid "Dynamic lookups" +msgstr "动态查找" + +#: ../../howto/descriptor.rst:90 +msgid "" +"Interesting descriptors typically run computations instead of returning " +"constants:" +msgstr "有趣的描述器通常运行计算而不是返回常量:" + +#: ../../howto/descriptor.rst:109 +msgid "" +"An interactive session shows that the lookup is dynamic — it computes " +"different, updated answers each time::" +msgstr "交互式会话显示查找是动态的,每次都会计算不同的,经过更新的返回值::" + +#: ../../howto/descriptor.rst:122 +msgid "" +"Besides showing how descriptors can run computations, this example also " +"reveals the purpose of the parameters to :meth:`__get__`. The *self* " +"parameter is *size*, an instance of *DirectorySize*. The *obj* parameter is" +" either *g* or *s*, an instance of *Directory*. It is the *obj* parameter " +"that lets the :meth:`__get__` method learn the target directory. The " +"*objtype* parameter is the class *Directory*." +msgstr "" +"除了说明描述器如何运行计算,这个例子也揭示了 :meth:`__get__` 参数的目的。形参 *self* 接收的实参是 *size*,即 " +"*DirectorySize* 的一个实例。形参 *obj* 接收的实参是 *g* 或 *s*,即 *Directory* 的一个实例。而正是 " +"*obj* 让 :meth:`__get__` 方法获得了作为目标的目录。形参 *objtype* 接收的实参是 *Directory* 类。" + +#: ../../howto/descriptor.rst:131 +msgid "Managed attributes" +msgstr "托管属性" + +#: ../../howto/descriptor.rst:133 +msgid "" +"A popular use for descriptors is managing access to instance data. The " +"descriptor is assigned to a public attribute in the class dictionary while " +"the actual data is stored as a private attribute in the instance dictionary." +" The descriptor's :meth:`__get__` and :meth:`__set__` methods are triggered" +" when the public attribute is accessed." +msgstr "" +"描述器的一种流行用法是托管对实例数据的访问。描述器被分配给类字典中的公开属性,而实际数据作为私有属性存储在实例字典中。当访问公开属性时,会触发描述器的" +" :meth:`__get__` 和 :meth:`__set__` 方法。" + +#: ../../howto/descriptor.rst:139 +msgid "" +"In the following example, *age* is the public attribute and *_age* is the " +"private attribute. When the public attribute is accessed, the descriptor " +"logs the lookup or update:" +msgstr "在下面的例子中,*age* 是公开属性,*_age* 是私有属性。当访问公开属性时,描述器会记录下查找或更新的日志:" + +#: ../../howto/descriptor.rst:172 +msgid "" +"An interactive session shows that all access to the managed attribute *age* " +"is logged, but that the regular attribute *name* is not logged:" +msgstr "交互式会话展示中,对托管属性 *age* 的所有访问都被记录了下来,但常规属性 *name* 则未被记录:" + +#: ../../howto/descriptor.rst:206 +msgid "" +"One major issue with this example is that the private name *_age* is " +"hardwired in the *LoggedAgeAccess* class. That means that each instance can" +" only have one logged attribute and that its name is unchangeable. In the " +"next example, we'll fix that problem." +msgstr "" +"此示例的一个主要问题是私有名称 *_age* 在类 *LoggedAgeAccess* " +"中是硬耦合的。这意味着每个实例只能有一个用于记录的属性,并且其名称不可更改。" + +#: ../../howto/descriptor.rst:213 +msgid "Customized names" +msgstr "定制名称" + +#: ../../howto/descriptor.rst:215 +msgid "" +"When a class uses descriptors, it can inform each descriptor about which " +"variable name was used." +msgstr "当一个类使用描述器时,它可以告知每个描述器使用了什么变量名。" + +#: ../../howto/descriptor.rst:218 +msgid "" +"In this example, the :class:`Person` class has two descriptor instances, " +"*name* and *age*. When the :class:`Person` class is defined, it makes a " +"callback to :meth:`__set_name__` in *LoggedAccess* so that the field names " +"can be recorded, giving each descriptor its own *public_name* and " +"*private_name*:" +msgstr "" +"在此示例中, :class:`Person` 类具有两个描述器实例 *name* 和 *age*。当类 :class:`Person` " +"被定义的时候,他回调了 *LoggedAccess* 中的 :meth:`__set_name__` 来记录字段名称,让每个描述器拥有自己的 " +"*public_name* 和 *private_name*:" + +#: ../../howto/descriptor.rst:256 +msgid "" +"An interactive session shows that the :class:`Person` class has called " +":meth:`__set_name__` so that the field names would be recorded. Here we " +"call :func:`vars` to look up the descriptor without triggering it:" +msgstr "" +"交互交互式会话显示类 :class:`Person` 调用了 :meth:`__set_name__` 方法来记录字段的名称。在这里,我们调用 " +":func:`vars` 来查找描述器而不触发它:" + +#: ../../howto/descriptor.rst:267 +msgid "The new class now logs access to both *name* and *age*:" +msgstr "现在,新类会记录对 *name* 和 *age* 二者的访问:" + +#: ../../howto/descriptor.rst:284 +msgid "The two *Person* instances contain only the private names:" +msgstr "这两个 *Person* 实例仅包含私有名称:" + +#: ../../howto/descriptor.rst:295 +msgid "Closing thoughts" +msgstr "结束语" + +#: ../../howto/descriptor.rst:297 +msgid "" +"A :term:`descriptor` is what we call any object that defines " +":meth:`__get__`, :meth:`__set__`, or :meth:`__delete__`." +msgstr "" +":term:`descriptor` 就是任何一个定义了 :meth:`__get__`,:meth:`__set__` 或 " +":meth:`__delete__` 的对象。" + +#: ../../howto/descriptor.rst:300 +msgid "" +"Optionally, descriptors can have a :meth:`__set_name__` method. This is " +"only used in cases where a descriptor needs to know either the class where " +"it was created or the name of class variable it was assigned to. (This " +"method, if present, is called even if the class is not a descriptor.)" +msgstr "" +"可选地,描述器可以具有 :meth:`__set_name__` " +"方法。这仅在描述器需要知道创建它的类或分配给它的类变量名称时使用。(即使该类不是描述器,只要此方法存在就会调用。)" + +#: ../../howto/descriptor.rst:305 +msgid "" +"Descriptors get invoked by the dot \"operator\" during attribute lookup. If" +" a descriptor is accessed indirectly with " +"``vars(some_class)[descriptor_name]``, the descriptor instance is returned " +"without invoking it." +msgstr "" +"在属性查找期间,描述器由点运算符调用。如果使用 ``vars(some_class)[descriptor_name]`` " +"间接访问描述器,则返回描述器实例而不调用它。" + +#: ../../howto/descriptor.rst:309 +msgid "" +"Descriptors only work when used as class variables. When put in instances, " +"they have no effect." +msgstr "描述器仅在用作类变量时起作用。放入实例时,它们将失效。" + +#: ../../howto/descriptor.rst:312 +msgid "" +"The main motivation for descriptors is to provide a hook allowing objects " +"stored in class variables to control what happens during attribute lookup." +msgstr "描述器的主要目的是提供一个挂钩,允许存储在类变量中的对象控制在属性查找期间发生的情况。" + +#: ../../howto/descriptor.rst:315 +msgid "" +"Traditionally, the calling class controls what happens during lookup. " +"Descriptors invert that relationship and allow the data being looked-up to " +"have a say in the matter." +msgstr "传统上,调用类控制查找过程中发生的事情。描述器反转了这种关系,并允许正在被查询的数据对此进行干涉。" + +#: ../../howto/descriptor.rst:319 +msgid "" +"Descriptors are used throughout the language. It is how functions turn into" +" bound methods. Common tools like :func:`classmethod`, " +":func:`staticmethod`, :func:`property`, and " +":func:`functools.cached_property` are all implemented as descriptors." +msgstr "" +"描述器的使用贯穿了整个语言。就是它让函数变成绑定方法。常见工具诸如 :func:`classmethod`, " +":func:`staticmethod`,:func:`property` 和 :func:`functools.cached_property` " +"都作为描述器实现。" + +#: ../../howto/descriptor.rst:326 +msgid "Complete Practical Example" +msgstr "完整的实际例子" + +#: ../../howto/descriptor.rst:328 +msgid "" +"In this example, we create a practical and powerful tool for locating " +"notoriously hard to find data corruption bugs." +msgstr "在此示例中,我们创建了一个实用而强大的工具来查找难以发现的数据损坏错误。" + +#: ../../howto/descriptor.rst:333 +msgid "Validator class" +msgstr "验证器类" + +#: ../../howto/descriptor.rst:335 +msgid "" +"A validator is a descriptor for managed attribute access. Prior to storing " +"any data, it verifies that the new value meets various type and range " +"restrictions. If those restrictions aren't met, it raises an exception to " +"prevent data corruption at its source." +msgstr "" +"验证器是一个用于托管属性访问的描述器。在存储任何数据之前,它会验证新值是否满足各种类型和范围限制。如果不满足这些限制,它将引发异常,从源头上防止数据损坏。" + +#: ../../howto/descriptor.rst:340 +msgid "" +"This :class:`Validator` class is both an :term:`abstract base class` and a " +"managed attribute descriptor:" +msgstr "这个 :class:`Validator` 类既是一个 :term:`abstract base class` 也是一个托管属性描述器。" + +#: ../../howto/descriptor.rst:363 +msgid "" +"Custom validators need to inherit from :class:`Validator` and must supply a " +":meth:`validate` method to test various restrictions as needed." +msgstr "" +"自定义验证器需要从 :class:`Validator` 继承,并且必须提供 :meth:`validate` 方法以根据需要测试各种约束。" + +#: ../../howto/descriptor.rst:368 +msgid "Custom validators" +msgstr "自定义验证器" + +#: ../../howto/descriptor.rst:370 +msgid "Here are three practical data validation utilities:" +msgstr "这是三个实用的数据验证工具:" + +#: ../../howto/descriptor.rst:372 +msgid "" +":class:`OneOf` verifies that a value is one of a restricted set of options." +msgstr ":class:`OneOf` 验证值是一组受约束的选项之一。" + +#: ../../howto/descriptor.rst:374 +msgid "" +":class:`Number` verifies that a value is either an :class:`int` or " +":class:`float`. Optionally, it verifies that a value is between a given " +"minimum or maximum." +msgstr "" +":class:`Number` 验证值是否为 :class:`int` 或 " +":class:`float`。根据可选参数,它还可以验证值在给定的最小值或最大值之间。" + +#: ../../howto/descriptor.rst:378 +msgid "" +":class:`String` verifies that a value is a :class:`str`. Optionally, it " +"validates a given minimum or maximum length. It can validate a user-defined" +" `predicate `_" +" as well." +msgstr "" +":class:`String` 验证值是否为 :class:`str`。根据可选参数,它可以验证给定的最小或最大长度。它还可以验证用户定义的 " +"`predicate `_。" + +#: ../../howto/descriptor.rst:437 +msgid "Practical application" +msgstr "实际应用" + +#: ../../howto/descriptor.rst:439 +msgid "Here's how the data validators can be used in a real class:" +msgstr "这是在真实类中使用数据验证器的方法:" + +#: ../../howto/descriptor.rst:454 +msgid "The descriptors prevent invalid instances from being created:" +msgstr "描述器阻止无效实例的创建:" + +#: ../../howto/descriptor.rst:481 +msgid "Technical Tutorial" +msgstr "技术教程" + +#: ../../howto/descriptor.rst:483 +msgid "" +"What follows is a more technical tutorial for the mechanics and details of " +"how descriptors work." +msgstr "接下来是专业性更强的技术教程,以及描述器工作原理的详细信息。" + +#: ../../howto/descriptor.rst:488 +msgid "Abstract" +msgstr "摘要" + +#: ../../howto/descriptor.rst:490 +msgid "" +"Defines descriptors, summarizes the protocol, and shows how descriptors are " +"called. Provides an example showing how object relational mappings work." +msgstr "定义描述器,总结协议,并说明如何调用描述器。提供一个展示对象关系映射如何工作的示例。" + +#: ../../howto/descriptor.rst:493 +msgid "" +"Learning about descriptors not only provides access to a larger toolset, it " +"creates a deeper understanding of how Python works." +msgstr "学习描述器不仅能提供接触到更多工具集的途径,还能更深地理解 Python 工作的原理。" + +#: ../../howto/descriptor.rst:498 +msgid "Definition and introduction" +msgstr "定义与介绍" + +#: ../../howto/descriptor.rst:500 +msgid "" +"In general, a descriptor is an attribute value that has one of the methods " +"in the descriptor protocol. Those methods are :meth:`__get__`, " +":meth:`__set__`, and :meth:`__delete__`. If any of those methods are " +"defined for an attribute, it is said to be a :term:`descriptor`." +msgstr "" +"一般而言,描述器是一个包含了描述器协议中的方法的属性值。 这些方法有 :meth:`__get__`, :meth:`__set__` 和 " +":meth:`__delete__`。 如果为某个属性定义了这些方法中的任意一个,它就可以被称为 :term:`descriptor`。" + +#: ../../howto/descriptor.rst:505 +msgid "" +"The default behavior for attribute access is to get, set, or delete the " +"attribute from an object's dictionary. For instance, ``a.x`` has a lookup " +"chain starting with ``a.__dict__['x']``, then ``type(a).__dict__['x']``, and" +" continuing through the method resolution order of ``type(a)``. If the " +"looked-up value is an object defining one of the descriptor methods, then " +"Python may override the default behavior and invoke the descriptor method " +"instead. Where this occurs in the precedence chain depends on which " +"descriptor methods were defined." +msgstr "" +"属性访问的默认行为是从一个对象的字典中获取、设置或删除属性。对于实例来说,``a.x`` 的查找顺序会从 ``a.__dict__['x']`` " +"开始,然后是 ``type(a).__dict__['x']``,接下来依次查找 ``type(a)`` 的方法解析顺序(MRO)。 " +"如果找到的值是定义了某个描述器方法的对象,则 Python " +"可能会重写默认行为并转而唤起描述器方法。这具体发生在优先级链的哪个环节则要根据所定义的描述器方法及其被调用的方式来决定。" + +#: ../../howto/descriptor.rst:514 +msgid "" +"Descriptors are a powerful, general purpose protocol. They are the " +"mechanism behind properties, methods, static methods, class methods, and " +":func:`super()`. They are used throughout Python itself. Descriptors " +"simplify the underlying C code and offer a flexible set of new tools for " +"everyday Python programs." +msgstr "" +"描述器是一个强大而通用的协议。 它们是属性、方法、静态方法、类方法和 :func:`super()` 背后的实现机制。 它们在 Python " +"内部被广泛使用。 描述器简化了底层的 C 代码并为 Python 的日常程序提供了一组灵活的新工具。" + +#: ../../howto/descriptor.rst:522 +msgid "Descriptor protocol" +msgstr "描述器协议" + +#: ../../howto/descriptor.rst:524 +msgid "``descr.__get__(self, obj, type=None) -> value``" +msgstr "``descr.__get__(self, obj, type=None) -> value``" + +#: ../../howto/descriptor.rst:526 +msgid "``descr.__set__(self, obj, value) -> None``" +msgstr "``descr.__set__(self, obj, value) -> None``" + +#: ../../howto/descriptor.rst:528 +msgid "``descr.__delete__(self, obj) -> None``" +msgstr "``descr.__delete__(self, obj) -> None``" + +#: ../../howto/descriptor.rst:530 +msgid "" +"That is all there is to it. Define any of these methods and an object is " +"considered a descriptor and can override default behavior upon being looked " +"up as an attribute." +msgstr "描述器的方法就这些。一个对象只要定义了以上方法中的任何一个,就被视为描述器,并在被作为属性时覆盖其默认行为。" + +#: ../../howto/descriptor.rst:534 +msgid "" +"If an object defines :meth:`__set__` or :meth:`__delete__`, it is considered" +" a data descriptor. Descriptors that only define :meth:`__get__` are called" +" non-data descriptors (they are often used for methods but other uses are " +"possible)." +msgstr "" +"如果一个对象定义了 :meth:`__set__` 或 :meth:`__delete__`,则它会被视为数据描述器。 仅定义了 " +":meth:`__get__` 的描述器称为非数据描述器(它们经常被用于方法,但也可以有其他用途)。" + +#: ../../howto/descriptor.rst:539 +msgid "" +"Data and non-data descriptors differ in how overrides are calculated with " +"respect to entries in an instance's dictionary. If an instance's dictionary" +" has an entry with the same name as a data descriptor, the data descriptor " +"takes precedence. If an instance's dictionary has an entry with the same " +"name as a non-data descriptor, the dictionary entry takes precedence." +msgstr "" +"数据和非数据描述器的不同之处在于,如何计算实例字典中条目的替代值。如果实例的字典具有与数据描述器同名的条目,则数据描述器优先。如果实例的字典具有与非数据描述器同名的条目,则该字典条目优先。" + +#: ../../howto/descriptor.rst:545 +msgid "" +"To make a read-only data descriptor, define both :meth:`__get__` and " +":meth:`__set__` with the :meth:`__set__` raising an :exc:`AttributeError` " +"when called. Defining the :meth:`__set__` method with an exception raising " +"placeholder is enough to make it a data descriptor." +msgstr "" +"为了使数据描述器成为只读的,应该同时定义 :meth:`__get__` 和 :meth:`__set__` ,并在 :meth:`__set__` " +"中引发 :exc:`AttributeError` 。用引发异常的占位符定义 :meth:`__set__` 方法使其成为数据描述器。" + +#: ../../howto/descriptor.rst:552 +msgid "Overview of descriptor invocation" +msgstr "描述器调用概述" + +#: ../../howto/descriptor.rst:554 +msgid "" +"A descriptor can be called directly with ``desc.__get__(obj)`` or " +"``desc.__get__(None, cls)``." +msgstr "描述器可以通过 ``d.__get__(obj)`` 或 ``desc.__get__(None, cls)`` 直接调用。" + +#: ../../howto/descriptor.rst:557 +msgid "" +"But it is more common for a descriptor to be invoked automatically from " +"attribute access." +msgstr "但更常见的是通过属性访问自动调用描述器。" + +#: ../../howto/descriptor.rst:560 +msgid "" +"The expression ``obj.x`` looks up the attribute ``x`` in the chain of " +"namespaces for ``obj``. If the search finds a descriptor outside of the " +"instance ``__dict__``, its :meth:`__get__` method is invoked according to " +"the precedence rules listed below." +msgstr "" +"表达式 ``obj.x`` 在命名空间的链中查找 ``obj`` 的属性 ``x``。如果搜索在实例 ``__dict__`` " +"之外找到描述器,则根据下面列出的优先级规则调用其 :meth:`__get__` 方法。" + +#: ../../howto/descriptor.rst:565 +msgid "" +"The details of invocation depend on whether ``obj`` is an object, class, or " +"instance of super." +msgstr "调用的细节取决于 ``obj`` 是对象、类还是超类的实例。" + +#: ../../howto/descriptor.rst:570 +msgid "Invocation from an instance" +msgstr "通过实例调用" + +#: ../../howto/descriptor.rst:572 +msgid "" +"Instance lookup scans through a chain of namespaces giving data descriptors " +"the highest priority, followed by instance variables, then non-data " +"descriptors, then class variables, and lastly :meth:`__getattr__` if it is " +"provided." +msgstr "" +"实例查找通过命名空间链进行扫描,数据描述器的优先级最高,其次是实例变量、非数据描述器、类变量,最后是 :meth:`__getattr__` " +"(如果存在的话)。" + +#: ../../howto/descriptor.rst:577 +msgid "" +"If a descriptor is found for ``a.x``, then it is invoked with: " +"``desc.__get__(a, type(a))``." +msgstr "如果 ``a.x`` 找到了一个描述器,那么将通过 ``desc.__get__(a, type(a))`` 调用它。" + +#: ../../howto/descriptor.rst:580 +msgid "" +"The logic for a dotted lookup is in :meth:`object.__getattribute__`. Here " +"is a pure Python equivalent:" +msgstr "点运算符的查找逻辑在 :meth:`object.__getattribute__` 中。这里是一个等价的纯 Python 实现:" + +#: ../../howto/descriptor.rst:699 +msgid "" +"Note, there is no :meth:`__getattr__` hook in the :meth:`__getattribute__` " +"code. That is why calling :meth:`__getattribute__` directly or with " +"``super().__getattribute__`` will bypass :meth:`__getattr__` entirely." +msgstr "" +"请注意,在 :meth:`__getattribute__` 方法的代码中没有调用 :meth:`__getattr__` 的钩子。这就是直接调用 " +":meth:`__getattribute__` 或调用 ``super().__getattribute__`` 会彻底绕过 " +":meth:`__getattr__` 的原因。" + +#: ../../howto/descriptor.rst:703 +msgid "" +"Instead, it is the dot operator and the :func:`getattr` function that are " +"responsible for invoking :meth:`__getattr__` whenever " +":meth:`__getattribute__` raises an :exc:`AttributeError`. Their logic is " +"encapsulated in a helper function:" +msgstr "" +"相反,当 :meth:`__getattribute__` 引发 :exc:`AttributeError` 时,点运算符和 " +":func:`getattr` 函数负责调用 :meth:`__getattr__`。它们的逻辑封装在一个辅助函数中:" + +#: ../../howto/descriptor.rst:753 +msgid "Invocation from a class" +msgstr "通过类调用" + +#: ../../howto/descriptor.rst:755 +msgid "" +"The logic for a dotted lookup such as ``A.x`` is in " +":meth:`type.__getattribute__`. The steps are similar to those for " +":meth:`object.__getattribute__` but the instance dictionary lookup is " +"replaced by a search through the class's :term:`method resolution order`." +msgstr "" +"像 ``A.x`` 这样的点操作符查找的逻辑在 :meth:`type.__getattribute__` 中。步骤与 " +":meth:`object.__getattribute__` 相似,但是实例字典查找改为搜索类的 :term:`method resolution " +"order`。" + +#: ../../howto/descriptor.rst:760 +msgid "" +"If a descriptor is found, it is invoked with ``desc.__get__(None, A)``." +msgstr "如果找到了一个描述器,那么将通过 ``desc.__get__(None, A)`` 调用它。" + +#: ../../howto/descriptor.rst:762 +msgid "" +"The full C implementation can be found in :c:func:`type_getattro()` and " +":c:func:`_PyType_Lookup()` in :source:`Objects/typeobject.c`." +msgstr "" +"完整的 C 实现可在 :source:`Objects/typeobject.c` 中的 :c:func:`type_getattro()` 和 " +":c:func:`_PyType_Lookup()` 找到。" + +#: ../../howto/descriptor.rst:767 +msgid "Invocation from super" +msgstr "通过 super 调用" + +#: ../../howto/descriptor.rst:769 +msgid "" +"The logic for super's dotted lookup is in the :meth:`__getattribute__` " +"method for object returned by :class:`super()`." +msgstr "" +"super 的点操作符查找的逻辑在 :class:`super()` 返回的对象的 :meth:`__getattribute__` 方法中。" + +#: ../../howto/descriptor.rst:772 +msgid "" +"A dotted lookup such as ``super(A, obj).m`` searches " +"``obj.__class__.__mro__`` for the base class ``B`` immediately following " +"``A`` and then returns ``B.__dict__['m'].__get__(obj, A)``. If not a " +"descriptor, ``m`` is returned unchanged." +msgstr "" +"类似 ``super(A, obj).m`` 形式的点分查找将在 ``obj.__class__.__mro__`` 中搜索紧接在 ``A`` " +"之后的基类 ``B``,然后返回 ``B.__dict__['m'].__get__(obj, A)``。如果 ``m`` 不是描述器,则直接返回其值。" + +#: ../../howto/descriptor.rst:777 +msgid "" +"The full C implementation can be found in :c:func:`super_getattro()` in " +":source:`Objects/typeobject.c`. A pure Python equivalent can be found in " +"`Guido's Tutorial " +"`_." +msgstr "" +"完整的 C 实现可以在 :source:`Objects/typeobject.c` 的 :c:func:`super_getattro()` " +"中找到。纯 Python 等价实现可以在 `Guido's Tutorial " +"`_ " +"中找到。" + +#: ../../howto/descriptor.rst:784 +msgid "Summary of invocation logic" +msgstr "调用逻辑总结" + +#: ../../howto/descriptor.rst:786 +msgid "" +"The mechanism for descriptors is embedded in the :meth:`__getattribute__()` " +"methods for :class:`object`, :class:`type`, and :func:`super`." +msgstr "" +"描述器的机制嵌入在 :class:`object`,:class:`type` 和 :func:`super` 的 " +":meth:`__getattribute__()` 方法中。" + +#: ../../howto/descriptor.rst:789 +msgid "The important points to remember are:" +msgstr "要记住的重要点是:" + +#: ../../howto/descriptor.rst:791 +msgid "Descriptors are invoked by the :meth:`__getattribute__` method." +msgstr "描述器由 :meth:`__getattribute__` 方法调用。" + +#: ../../howto/descriptor.rst:793 +msgid "" +"Classes inherit this machinery from :class:`object`, :class:`type`, or " +":func:`super`." +msgstr "类从 :class:`object`,:class:`type` 或 :func:`super` 继承此机制。" + +#: ../../howto/descriptor.rst:796 +msgid "" +"Overriding :meth:`__getattribute__` prevents automatic descriptor calls " +"because all the descriptor logic is in that method." +msgstr "由于描述器的逻辑在 :meth:`__getattribute__` 中,因而重写该方法会阻止描述器的自动调用。" + +#: ../../howto/descriptor.rst:799 +msgid "" +":meth:`object.__getattribute__` and :meth:`type.__getattribute__` make " +"different calls to :meth:`__get__`. The first includes the instance and may" +" include the class. The second puts in ``None`` for the instance and always" +" includes the class." +msgstr "" +":meth:`object.__getattribute__` 和 :meth:`type.__getattribute__` 会用不同的方式调用 " +":meth:`__get__`。前一个会传入实例,也可以包括类。后一个传入的实例为 ``None`` ,并且总是包括类。" + +#: ../../howto/descriptor.rst:804 +msgid "Data descriptors always override instance dictionaries." +msgstr "数据描述器始终会覆盖实例字典。" + +#: ../../howto/descriptor.rst:806 +msgid "Non-data descriptors may be overridden by instance dictionaries." +msgstr "非数据描述器会被实例字典覆盖。" + +#: ../../howto/descriptor.rst:810 +msgid "Automatic name notification" +msgstr "自动名称通知" + +#: ../../howto/descriptor.rst:812 +msgid "" +"Sometimes it is desirable for a descriptor to know what class variable name " +"it was assigned to. When a new class is created, the :class:`type` " +"metaclass scans the dictionary of the new class. If any of the entries are " +"descriptors and if they define :meth:`__set_name__`, that method is called " +"with two arguments. The *owner* is the class where the descriptor is used, " +"and the *name* is the class variable the descriptor was assigned to." +msgstr "" +"有时,描述器想知道它分配到的具体类变量名。创建新类时,元类 :class:`type` 将扫描新类的字典。如果有描述器,并且它们定义了 " +":meth:`__set_name__`,则使用两个参数调用该方法。*owner* 是使用描述器的类,*name* 是分配给描述器的类变量名。" + +#: ../../howto/descriptor.rst:819 +msgid "" +"The implementation details are in :c:func:`type_new()` and " +":c:func:`set_names()` in :source:`Objects/typeobject.c`." +msgstr "" +"实现的细节在 :source:`Objects/typeobject.c` 中的 :c:func:`type_new()` 和 " +":c:func:`set_names()` 。" + +#: ../../howto/descriptor.rst:822 +msgid "" +"Since the update logic is in :meth:`type.__new__`, notifications only take " +"place at the time of class creation. If descriptors are added to the class " +"afterwards, :meth:`__set_name__` will need to be called manually." +msgstr "" +"由于更新逻辑在 :meth:`type.__new__` 中,因此通知仅在创建类时发生。之后如果将描述器添加到类中,则需要手动调用 " +":meth:`__set_name__` 。" + +#: ../../howto/descriptor.rst:828 +msgid "ORM example" +msgstr "ORM (对象关系映射)示例" + +#: ../../howto/descriptor.rst:830 +msgid "" +"The following code is simplified skeleton showing how data descriptors could" +" be used to implement an `object relational mapping " +"`_." +msgstr "" +"以下代码展示了如何使用数据描述器来实现简单 `object relational mapping " +"`_ 框架。" + +#: ../../howto/descriptor.rst:834 +msgid "" +"The essential idea is that the data is stored in an external database. The " +"Python instances only hold keys to the database's tables. Descriptors take " +"care of lookups or updates:" +msgstr "其核心思路是将数据存储在外部数据库中,Python 实例仅持有数据库表中对应的的键。描述器负责对值进行查找或更新:" + +#: ../../howto/descriptor.rst:853 +msgid "" +"We can use the :class:`Field` class to define `models " +"`_ that describe the schema " +"for each table in a database:" +msgstr "" +"我们可以用 :class:`Field` 类来定义描述了数据库中每张表的模式的 `models " +"`_。" + +#: ../../howto/descriptor.rst:878 +msgid "To use the models, first connect to the database::" +msgstr "要使用模型,首先要连接到数据库:" + +#: ../../howto/descriptor.rst:883 +msgid "" +"An interactive session shows how data is retrieved from the database and how" +" it can be updated:" +msgstr "交互式会话显示了如何从数据库中检索数据及如何对其进行更新:" + +#: ../../howto/descriptor.rst:928 +msgid "Pure Python Equivalents" +msgstr "纯 Python 等价实现" + +#: ../../howto/descriptor.rst:930 +msgid "" +"The descriptor protocol is simple and offers exciting possibilities. " +"Several use cases are so common that they have been prepackaged into built-" +"in tools. Properties, bound methods, static methods, class methods, and " +"\\_\\_slots\\_\\_ are all based on the descriptor protocol." +msgstr "" +"描述器协议很简单,但它提供了令人兴奋的可能性。有几个用例非常通用,以至于它们已预先打包到内置工具中。属性、绑定方法、静态方法、类方法和 " +"__slots__ 均基于描述器协议。" + +#: ../../howto/descriptor.rst:937 +msgid "Properties" +msgstr "属性" + +#: ../../howto/descriptor.rst:939 +msgid "" +"Calling :func:`property` is a succinct way of building a data descriptor " +"that triggers a function call upon access to an attribute. Its signature " +"is::" +msgstr "调用 :func:`property` 是构建数据描述器的简洁方式,该数据描述器在访问属性时触发函数调用。它的签名是:" + +#: ../../howto/descriptor.rst:944 +msgid "" +"The documentation shows a typical use to define a managed attribute ``x``:" +msgstr "该文档显示了定义托管属性 ``x`` 的典型用法:" + +#: ../../howto/descriptor.rst:968 +msgid "" +"To see how :func:`property` is implemented in terms of the descriptor " +"protocol, here is a pure Python equivalent:" +msgstr "要了解 :func:`property` 如何根据描述器协议实现,这里是一个纯 Python 的等价实现:" + +#: ../../howto/descriptor.rst:1061 +msgid "" +"The :func:`property` builtin helps whenever a user interface has granted " +"attribute access and then subsequent changes require the intervention of a " +"method." +msgstr "这个内置的 :func:`property` 每当用户访问属性时生效,随后的变化需要一个方法的参与。" + +#: ../../howto/descriptor.rst:1065 +msgid "" +"For instance, a spreadsheet class may grant access to a cell value through " +"``Cell('b10').value``. Subsequent improvements to the program require the " +"cell to be recalculated on every access; however, the programmer does not " +"want to affect existing client code accessing the attribute directly. The " +"solution is to wrap access to the value attribute in a property data " +"descriptor:" +msgstr "" +"例如,一个电子表格类可以通过 ``Cell('b10').value`` " +"授予对单元格值的访问权限。对程序的后续改进要求每次访问都要重新计算单元格;但是,程序员不希望影响直接访问该属性的现有客户端代码。解决方案是将对 " +"value 属性的访问包装在属性数据描述器中:" + +#: ../../howto/descriptor.rst:1082 +msgid "" +"Either the built-in :func:`property` or our :func:`Property` equivalent " +"would work in this example." +msgstr "在此示例中,内置的 :func:`property` 或我们实现的的 :func:`Property` 均适用。" + +#: ../../howto/descriptor.rst:1087 +msgid "Functions and methods" +msgstr "函数和方法" + +#: ../../howto/descriptor.rst:1089 +msgid "" +"Python's object oriented features are built upon a function based " +"environment. Using non-data descriptors, the two are merged seamlessly." +msgstr "Python 的面向对象功能是在基于函数的环境构建的。通过使用非数据描述器,这两方面完成了无缝融合。" + +#: ../../howto/descriptor.rst:1092 +msgid "" +"Functions stored in class dictionaries get turned into methods when invoked." +" Methods only differ from regular functions in that the object instance is " +"prepended to the other arguments. By convention, the instance is called " +"*self* but could be called *this* or any other variable name." +msgstr "" +"在调用时,存储在类词典中的函数将被转换为方法。方法与常规函数的不同之处仅在于对象实例被置于其他参数之前。方法与常规函数的不同之处仅在于第一个参数是为对象实例保留的。按照惯例,实例引用称为" +" *self* ,但也可以称为 *this* 或任何其他变量名称。" + +#: ../../howto/descriptor.rst:1097 +msgid "" +"Methods can be created manually with :class:`types.MethodType` which is " +"roughly equivalent to:" +msgstr "可以使用 :class:`types.MethodType` 手动创建方法,其行为基本等价于:" + +#: ../../howto/descriptor.rst:1114 +msgid "" +"To support automatic creation of methods, functions include the " +":meth:`__get__` method for binding methods during attribute access. This " +"means that functions are non-data descriptors that return bound methods " +"during dotted lookup from an instance. Here's how it works:" +msgstr "" +"为了支持自动创建方法,函数包含 :meth:`__get__` " +"方法以便在属性访问时绑定其为方法。这意味着函数其是非数据描述器,它在通过实例进行点查找时返回绑定方法,其运作方式如下:" + +#: ../../howto/descriptor.rst:1130 +msgid "" +"Running the following class in the interpreter shows how the function " +"descriptor works in practice:" +msgstr "在解释器中运行以下类,这显示了函数描述器的实际工作方式:" + +#: ../../howto/descriptor.rst:1139 +msgid "" +"The function has a :term:`qualified name` attribute to support " +"introspection:" +msgstr "该函数具有 :term:`qualified name` 属性以支持自省:" + +#: ../../howto/descriptor.rst:1146 +msgid "" +"Accessing the function through the class dictionary does not invoke " +":meth:`__get__`. Instead, it just returns the underlying function object::" +msgstr "通过类字典访问函数不会调用 :meth:`__get__`。相反,它只返回基础函数对象:" + +#: ../../howto/descriptor.rst:1152 +msgid "" +"Dotted access from a class calls :meth:`__get__` which just returns the " +"underlying function unchanged::" +msgstr "来自类的点运算符访问会调用 :meth:`__get__`,直接返回底层的函数。" + +#: ../../howto/descriptor.rst:1158 +msgid "" +"The interesting behavior occurs during dotted access from an instance. The " +"dotted lookup calls :meth:`__get__` which returns a bound method object::" +msgstr "有趣的行为发生在从实例进行点访问期间。点运算符查找调用 :meth:`__get__`,返回绑定的方法对象:" + +#: ../../howto/descriptor.rst:1165 +msgid "" +"Internally, the bound method stores the underlying function and the bound " +"instance::" +msgstr "绑定方法在内部存储了底层函数和绑定的实例:" + +#: ../../howto/descriptor.rst:1174 +msgid "" +"If you have ever wondered where *self* comes from in regular methods or " +"where *cls* comes from in class methods, this is it!" +msgstr "如果你曾好奇常规方法中的 *self* 或类方法中的 *cls* 是从什么地方来的,就是这里了!" + +#: ../../howto/descriptor.rst:1179 +msgid "Kinds of methods" +msgstr "方法的种类" + +#: ../../howto/descriptor.rst:1181 +msgid "" +"Non-data descriptors provide a simple mechanism for variations on the usual " +"patterns of binding functions into methods." +msgstr "非数据描述器为把函数绑定为方法的通常模式提供了一种简单的机制。" + +#: ../../howto/descriptor.rst:1184 +msgid "" +"To recap, functions have a :meth:`__get__` method so that they can be " +"converted to a method when accessed as attributes. The non-data descriptor " +"transforms an ``obj.f(*args)`` call into ``f(obj, *args)``. Calling " +"``cls.f(*args)`` becomes ``f(*args)``." +msgstr "" +"概括地说,函数对象具有 :meth:`__get__` 方法,以便在作为属性访问时可以将其转换为方法。非数据描述器将 ``obj.f(*args)`` " +"的调用会被转换为 ``f(obj, *args)`` 。调用 ``klass.f(*args)`` 因而变成 ``f(*args)`` 。" + +#: ../../howto/descriptor.rst:1189 +msgid "This chart summarizes the binding and its two most useful variants:" +msgstr "下表总结了绑定及其两个最有用的变体:" + +#: ../../howto/descriptor.rst:1192 +msgid "Transformation" +msgstr "转换形式" + +#: ../../howto/descriptor.rst:1192 +msgid "Called from an object" +msgstr "通过对象调用" + +#: ../../howto/descriptor.rst:1192 +msgid "Called from a class" +msgstr "通过类调用" + +#: ../../howto/descriptor.rst:1195 +msgid "function" +msgstr "function -- 函数" + +#: ../../howto/descriptor.rst:1195 +msgid "f(obj, \\*args)" +msgstr "f(obj, \\*args)" + +#: ../../howto/descriptor.rst:1195 ../../howto/descriptor.rst:1197 +#: ../../howto/descriptor.rst:1197 +msgid "f(\\*args)" +msgstr "f(\\*args)" + +#: ../../howto/descriptor.rst:1197 +msgid "staticmethod" +msgstr "静态方法" + +#: ../../howto/descriptor.rst:1199 +msgid "classmethod" +msgstr "类方法" + +#: ../../howto/descriptor.rst:1199 +msgid "f(type(obj), \\*args)" +msgstr "f(type(obj), \\*args)" + +#: ../../howto/descriptor.rst:1199 +msgid "f(cls, \\*args)" +msgstr "f(cls, \\*args)" + +#: ../../howto/descriptor.rst:1204 +msgid "Static methods" +msgstr "静态方法" + +#: ../../howto/descriptor.rst:1206 +msgid "" +"Static methods return the underlying function without changes. Calling " +"either ``c.f`` or ``C.f`` is the equivalent of a direct lookup into " +"``object.__getattribute__(c, \"f\")`` or ``object.__getattribute__(C, " +"\"f\")``. As a result, the function becomes identically accessible from " +"either an object or a class." +msgstr "" +"静态方法返回底层函数,不做任何更改。调用 ``c.f`` 或 ``C.f`` 等效于通过 ``object.__getattribute__(c, " +"\"f\")`` 或 ``object.__getattribute__(C, \"f\")`` 查找。这样该函数就可以从对象或类中进行相同的访问。" + +#: ../../howto/descriptor.rst:1212 +msgid "" +"Good candidates for static methods are methods that do not reference the " +"``self`` variable." +msgstr "适合作为静态方法的是那些不引用 ``self`` 变量的方法。" + +#: ../../howto/descriptor.rst:1215 +msgid "" +"For instance, a statistics package may include a container class for " +"experimental data. The class provides normal methods for computing the " +"average, mean, median, and other descriptive statistics that depend on the " +"data. However, there may be useful functions which are conceptually related " +"but do not depend on the data. For instance, ``erf(x)`` is handy conversion" +" routine that comes up in statistical work but does not directly depend on a" +" particular dataset. It can be called either from an object or the class: " +"``s.erf(1.5) --> .9332`` or ``Sample.erf(1.5) --> .9332``." +msgstr "" +"例如,一个统计用的包可能包含一个实验数据的容器类。该容器类提供了用于计算数据的平均值,均值,中位数和其他描述性统计信息的常规方法。但是,可能有在概念上相关但不依赖于数据的函数。例如," +" ``erf(x)`` 是在统计中的便捷转换,但并不直接依赖于特定的数据集。可以从对象或类中调用它: ``s.erf(1.5) --> .9332`` " +"或 ``Sample.erf(1.5) --> .9332``。" + +#: ../../howto/descriptor.rst:1224 +msgid "" +"Since static methods return the underlying function with no changes, the " +"example calls are unexciting:" +msgstr "由于静态方法返回的底层函数没有任何变化,因此示例调用也是意料之中:" + +#: ../../howto/descriptor.rst:1241 +msgid "" +"Using the non-data descriptor protocol, a pure Python version of " +":func:`staticmethod` would look like this:" +msgstr "使用非数据描述器,纯 Python 版本的 :func:`staticmethod` 如下所示:" + +#: ../../howto/descriptor.rst:1273 +msgid "Class methods" +msgstr "类方法" + +#: ../../howto/descriptor.rst:1275 +msgid "" +"Unlike static methods, class methods prepend the class reference to the " +"argument list before calling the function. This format is the same for " +"whether the caller is an object or a class:" +msgstr "与静态方法不同,类方法在调用函数之前将类引用放在参数列表的最前。无论调用方是对象还是类,此格式相同:" + +#: ../../howto/descriptor.rst:1293 +msgid "" +"This behavior is useful whenever the method only needs to have a class " +"reference and does not rely on data stored in a specific instance. One use " +"for class methods is to create alternate class constructors. For example, " +"the classmethod :func:`dict.fromkeys` creates a new dictionary from a list " +"of keys. The pure Python equivalent is:" +msgstr "" +"当方法仅需要具有类引用并且确实依赖于存储在特定实例中的数据时,此行为就很有用。类方法的一种用途是创建备用类构造函数。例如,类方法 " +":func:`dict.fromkeys` 从键列表创建一个新字典。纯 Python 的等价实现是:" + +#: ../../howto/descriptor.rst:1310 +msgid "Now a new dictionary of unique keys can be constructed like this:" +msgstr "现在可以这样构造一个新的唯一键字典:" + +#: ../../howto/descriptor.rst:1320 +msgid "" +"Using the non-data descriptor protocol, a pure Python version of " +":func:`classmethod` would look like this:" +msgstr "使用非数据描述器协议,纯 Python 版本的 :func:`classmethod` 如下:" + +#: ../../howto/descriptor.rst:1369 +msgid "" +"The code path for ``hasattr(type(self.f), '__get__')`` was added in Python " +"3.9 and makes it possible for :func:`classmethod` to support chained " +"decorators. For example, a classmethod and property could be chained " +"together:" +msgstr "" +"``hasattr(type(self.f), '__get__')`` 的代码路径在 Python 3.9 中被加入并让 " +":func:`classmethod` 可以支持链式装饰器。 例如,一个类方法和特征属性可以被链接在一起:" + +#: ../../howto/descriptor.rst:1389 +msgid "Member objects and __slots__" +msgstr "成员对象和 __slots__" + +#: ../../howto/descriptor.rst:1391 +msgid "" +"When a class defines ``__slots__``, it replaces instance dictionaries with a" +" fixed-length array of slot values. From a user point of view that has " +"several effects:" +msgstr "当一个类定义了 ``__slots__``,它会用一个固定长度的 slot 值数组来替换实例字典。 从用户的视角看,效果是这样的:" + +#: ../../howto/descriptor.rst:1395 +msgid "" +"1. Provides immediate detection of bugs due to misspelled attribute " +"assignments. Only attribute names specified in ``__slots__`` are allowed:" +msgstr "1. 提供对由错误拼写的属性赋值导致的程序缺陷的即时检测。只允许在 ``__slots__`` 中指定的属性名称:" + +#: ../../howto/descriptor.rst:1411 +msgid "" +"2. Helps create immutable objects where descriptors manage access to private" +" attributes stored in ``__slots__``:" +msgstr "2. 帮助创建由描述器来管理对保存在 ``__slots__`` 中的私有属性的访问的不可变对象:" + +#: ../../howto/descriptor.rst:1446 +msgid "" +"3. Saves memory. On a 64-bit Linux build, an instance with two attributes " +"takes 48 bytes with ``__slots__`` and 152 bytes without. This `flyweight " +"design pattern `_ likely " +"only matters when a large number of instances are going to be created." +msgstr "" +"3. 节省内存。 在 64 位 Linux 版本上,带有两个属性的实例如果使用 ``__slots__`` 会占用 48 个字节,如果不使用则会占用 " +"152 个字节。 这种 `flyweight design pattern " +"`_ 通常仅在要创建大量实例时才能显示效果。" + +#: ../../howto/descriptor.rst:1451 +msgid "" +"4. Blocks tools like :func:`functools.cached_property` which require an " +"instance dictionary to function correctly:" +msgstr "4. 阻止 :func:`functools.cached_property` 之类需要实例字典才能正常运作的工具:" + +#: ../../howto/descriptor.rst:1473 +msgid "" +"It is not possible to create an exact drop-in pure Python version of " +"``__slots__`` because it requires direct access to C structures and control " +"over object memory allocation. However, we can build a mostly faithful " +"simulation where the actual C structure for slots is emulated by a private " +"``_slotvalues`` list. Reads and writes to that private structure are " +"managed by member descriptors:" +msgstr "" +"要创建一个一模一样的纯 Python 版的 ``__slots__`` 是不可能的,因为它需要直接访问 C 结构体并控制对象内存分配。 " +"但是,我们可以构建一个非常相似的模拟版,其中作为 slot 的实际 C 结构体由一个私有的 ``_slotvalues`` 列表来模拟。 " +"对该私有结构体的读写操作将由成员描述器来管理:" + +#: ../../howto/descriptor.rst:1516 +msgid "" +"The :meth:`type.__new__` method takes care of adding member objects to class" +" variables:" +msgstr ":meth:`type.__new__` 方法负责将成员对象添加到类变量:" + +#: ../../howto/descriptor.rst:1532 +msgid "" +"The :meth:`object.__new__` method takes care of creating instances that have" +" slots instead of an instance dictionary. Here is a rough simulation in " +"pure Python:" +msgstr ":meth:`object.__new__` 方法负责创建具有 slot 而非实例字典的实例。 以下是一个纯 Python 的粗略模拟版:" + +#: ../../howto/descriptor.rst:1567 +msgid "" +"To use the simulation in a real class, just inherit from :class:`Object` and" +" set the :term:`metaclass` to :class:`Type`:" +msgstr "" +"要在真实的类中使用这个模拟版,只需从 :class:`Object` 继承并将 :term:`metaclass` 设为 :class:`Type`:" + +#: ../../howto/descriptor.rst:1581 +msgid "" +"At this point, the metaclass has loaded member objects for *x* and *y*::" +msgstr "这时,metaclass 已经为 *x* 和 *y* 加载了成员对象:" + +#: ../../howto/descriptor.rst:1602 +msgid "" +"When instances are created, they have a ``slot_values`` list where the " +"attributes are stored:" +msgstr "当实例被创建时,它们将拥有一个用于存放属性的 ``slot_values`` 列表:" + +#: ../../howto/descriptor.rst:1614 +msgid "Misspelled or unassigned attributes will raise an exception:" +msgstr "错误拼写或未赋值的属性将引发一个异常:" diff --git a/howto/functional.po b/howto/functional.po new file mode 100644 index 000000000..70622f18d --- /dev/null +++ b/howto/functional.po @@ -0,0 +1,1621 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) 2001-2022, Python Software Foundation +# This file is distributed under the same license as the Python package. +# FIRST AUTHOR , YEAR. +# +# Translators: +# Shengjing Zhu , 2018 +# Fei Yin , 2018 +# wi24rd, 2018 +# Kder , 2018 +# Konge , 2019 +# MuSheng Chen , 2019 +# chen_chao , 2019 +# Freesand Leo , 2020 +# Alpha Du , 2022 +# +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: Python 3.9\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2022-11-04 14:34+0000\n" +"PO-Revision-Date: 2017-02-16 17:44+0000\n" +"Last-Translator: Alpha Du , 2022\n" +"Language-Team: Chinese (China) (https://www.transifex.com/python-doc/teams/5390/zh_CN/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: zh_CN\n" +"Plural-Forms: nplurals=1; plural=0;\n" + +#: ../../howto/functional.rst:3 +msgid "Functional Programming HOWTO" +msgstr "函数式编程指引" + +#: ../../howto/functional.rst:0 +msgid "Author" +msgstr "作者" + +#: ../../howto/functional.rst:5 +msgid "A. M. Kuchling" +msgstr "A. M. Kuchling" + +#: ../../howto/functional.rst:0 +msgid "Release" +msgstr "发布版本" + +#: ../../howto/functional.rst:6 +msgid "0.32" +msgstr "0.32" + +#: ../../howto/functional.rst:8 +msgid "" +"In this document, we'll take a tour of Python's features suitable for " +"implementing programs in a functional style. After an introduction to the " +"concepts of functional programming, we'll look at language features such as " +":term:`iterator`\\s and :term:`generator`\\s and relevant library modules " +"such as :mod:`itertools` and :mod:`functools`." +msgstr "" +"本文档提供恰当的 Python 函数式编程范例,在函数式编程简单的介绍之后,将简单介绍Python中关于函数式编程的特性如 " +":term:`iterator` 和 :term:`generator` 以及相关库模块如 :mod:`itertools` 和 " +":mod:`functools` 等。" + +#: ../../howto/functional.rst:16 +msgid "Introduction" +msgstr "概述" + +#: ../../howto/functional.rst:18 +msgid "" +"This section explains the basic concept of functional programming; if you're" +" just interested in learning about Python language features, skip to the " +"next section on :ref:`functional-howto-iterators`." +msgstr "" +"本章介绍函数式编程的基本概念。如您仅想学习 Python 语言的特性,可跳过本章直接查看 :ref:`functional-howto-" +"iterators`." + +#: ../../howto/functional.rst:22 +msgid "" +"Programming languages support decomposing problems in several different " +"ways:" +msgstr "编程语言支持通过以下几种方式来解构具体问题:" + +#: ../../howto/functional.rst:24 +msgid "" +"Most programming languages are **procedural**: programs are lists of " +"instructions that tell the computer what to do with the program's input. C," +" Pascal, and even Unix shells are procedural languages." +msgstr "" +"大多数的编程语言都是 **过程式** 的,所谓程序就是一连串告诉计算机怎样处理程序输入的指令。C、Pascal 甚至 Unix shells " +"都是过程式语言。" + +#: ../../howto/functional.rst:28 +msgid "" +"In **declarative** languages, you write a specification that describes the " +"problem to be solved, and the language implementation figures out how to " +"perform the computation efficiently. SQL is the declarative language you're" +" most likely to be familiar with; a SQL query describes the data set you " +"want to retrieve, and the SQL engine decides whether to scan tables or use " +"indexes, which subclauses should be performed first, etc." +msgstr "" +"在 **声明式** 语言中,你编写一个用来描述待解决问题的说明,并且这个语言的具体实现会指明怎样高效的进行计算。 SQL 可能是你最熟悉的声明式语言了。" +" 一个 SQL 查询语句描述了你想要检索的数据集,并且 SQL 引擎会决定是扫描整张表还是使用索引,应该先执行哪些子句等等。" + +#: ../../howto/functional.rst:35 +msgid "" +"**Object-oriented** programs manipulate collections of objects. Objects " +"have internal state and support methods that query or modify this internal " +"state in some way. Smalltalk and Java are object-oriented languages. C++ " +"and Python are languages that support object-oriented programming, but don't" +" force the use of object-oriented features." +msgstr "" +"**面向对象** 程序会操作一组对象。 对象拥有内部状态,并能够以某种方式支持请求和修改这个内部状态的方法。Smalltalk 和 Java " +"都是面向对象的语言。 C++ 和 Python 支持面向对象编程,但并不强制使用面向对象特性。" + +#: ../../howto/functional.rst:41 +msgid "" +"**Functional** programming decomposes a problem into a set of functions. " +"Ideally, functions only take inputs and produce outputs, and don't have any " +"internal state that affects the output produced for a given input. Well-" +"known functional languages include the ML family (Standard ML, OCaml, and " +"other variants) and Haskell." +msgstr "" +"**函数式** 编程则将一个问题分解成一系列函数。 理想情况下,函数只接受输入并输出结果,对一个给定的输入也不会有影响输出的内部状态。 " +"著名的函数式语言有 ML 家族(Standard ML,Ocaml 以及其他变种)和 Haskell。" + +#: ../../howto/functional.rst:47 +msgid "" +"The designers of some computer languages choose to emphasize one particular " +"approach to programming. This often makes it difficult to write programs " +"that use a different approach. Other languages are multi-paradigm languages" +" that support several different approaches. Lisp, C++, and Python are multi-" +"paradigm; you can write programs or libraries that are largely procedural, " +"object-oriented, or functional in all of these languages. In a large " +"program, different sections might be written using different approaches; the" +" GUI might be object-oriented while the processing logic is procedural or " +"functional, for example." +msgstr "" +"一些语言的设计者选择强调一种特定的编程方式。 这通常会让以不同的方式来编写程序变得困难。其他多范式语言则支持几种不同的编程方式。Lisp,C++ 和 " +"Python " +"都是多范式语言;使用这些语言,你可以编写主要为过程式,面向对象或者函数式的程序和函数库。在大型程序中,不同的部分可能会采用不同的方式编写;比如 GUI " +"可能是面向对象的而处理逻辑则是过程式或者函数式。" + +#: ../../howto/functional.rst:58 +msgid "" +"In a functional program, input flows through a set of functions. Each " +"function operates on its input and produces some output. Functional style " +"discourages functions with side effects that modify internal state or make " +"other changes that aren't visible in the function's return value. Functions" +" that have no side effects at all are called **purely functional**. " +"Avoiding side effects means not using data structures that get updated as a " +"program runs; every function's output must only depend on its input." +msgstr "" +"在函数式程序里,输入会流经一系列函数。每个函数接受输入并输出结果。函数式风格反对使用带有副作用的函数,这些副作用会修改内部状态,或者引起一些无法体现在函数的返回值中的变化。完全不产生副作用的函数被称作“纯函数”。消除副作用意味着不能使用随程序运行而更新的数据结构;每个函数的输出必须只依赖于输入。" + +#: ../../howto/functional.rst:66 +msgid "" +"Some languages are very strict about purity and don't even have assignment " +"statements such as ``a=3`` or ``c = a + b``, but it's difficult to avoid all" +" side effects, such as printing to the screen or writing to a disk file. " +"Another example is a call to the :func:`print` or :func:`time.sleep` " +"function, neither of which returns a useful value. Both are called only for " +"their side effects of sending some text to the screen or pausing execution " +"for a second." +msgstr "" +"有些语言对纯洁性要求非常严格,甚至没有诸如``a=3``或``c = a + " +"b``之类的赋值语句,但很难避免所有的副作用,如打印到屏幕上或写到磁盘文件之类的副作用。另一个例子是调用 :func:`print` 或 " +":func:`time.sleep` 函数,它们都没有返回一个有用的值。这两个函数被调用只是为了它们的副作用,即向屏幕发送一些文本或暂停执行一秒钟。" + +#: ../../howto/functional.rst:73 +msgid "" +"Python programs written in functional style usually won't go to the extreme " +"of avoiding all I/O or all assignments; instead, they'll provide a " +"functional-appearing interface but will use non-functional features " +"internally. For example, the implementation of a function will still use " +"assignments to local variables, but won't modify global variables or have " +"other side effects." +msgstr "" +"函数式风格的 Python 程序并不会极端到消除所有 I/O " +"或者赋值的程度;相反,他们会提供像函数式一样的接口,但会在内部使用非函数式的特性。比如,函数的实现仍然会使用局部变量,但不会修改全局变量或者有其他副作用。" + +#: ../../howto/functional.rst:79 +msgid "" +"Functional programming can be considered the opposite of object-oriented " +"programming. Objects are little capsules containing some internal state " +"along with a collection of method calls that let you modify this state, and " +"programs consist of making the right set of state changes. Functional " +"programming wants to avoid state changes as much as possible and works with " +"data flowing between functions. In Python you might combine the two " +"approaches by writing functions that take and return instances representing " +"objects in your application (e-mail messages, transactions, etc.)." +msgstr "" +"函数式编程可以被认为是面向对象编程的对立面。对象就像是颗小胶囊,包裹着内部状态和随之而来的能让你修改这个内部状态的一组调用方法,以及由正确的状态变化所构成的程序。函数式编程希望尽可能地消除状态变化,只和流经函数的数据打交道。在" +" Python 里你可以把两种编程方式结合起来,在你的应用(电子邮件信息,事务处理)中编写接受和返回对象实例的函数。" + +#: ../../howto/functional.rst:88 +msgid "" +"Functional design may seem like an odd constraint to work under. Why should" +" you avoid objects and side effects? There are theoretical and practical " +"advantages to the functional style:" +msgstr "函数式设计在工作中看起来是个奇怪的约束。为什么你要消除对象和副作用呢?不过函数式风格有其理论和实践上的优点:" + +#: ../../howto/functional.rst:92 +msgid "Formal provability." +msgstr "形式证明。" + +#: ../../howto/functional.rst:93 +msgid "Modularity." +msgstr "模块化。" + +#: ../../howto/functional.rst:94 +msgid "Composability." +msgstr "组合性。" + +#: ../../howto/functional.rst:95 +msgid "Ease of debugging and testing." +msgstr "易于调试和测试。" + +#: ../../howto/functional.rst:99 +msgid "Formal provability" +msgstr "形式证明" + +#: ../../howto/functional.rst:101 +msgid "" +"A theoretical benefit is that it's easier to construct a mathematical proof " +"that a functional program is correct." +msgstr "一个理论上的优点是,构造数学证明来说明函数式程序是正确的相对更容易些。" + +#: ../../howto/functional.rst:104 +msgid "" +"For a long time researchers have been interested in finding ways to " +"mathematically prove programs correct. This is different from testing a " +"program on numerous inputs and concluding that its output is usually " +"correct, or reading a program's source code and concluding that the code " +"looks right; the goal is instead a rigorous proof that a program produces " +"the right result for all possible inputs." +msgstr "" +"很长时间,研究者们对寻找证明程序正确的数学方法都很感兴趣。这和通过大量输入来测试,并得出程序的输出基本正确,或者阅读一个程序的源代码然后得出代码看起来没问题不同;相反,这里的目标是一个严格的证明,证明程序对所有可能的输入都能给出正确的结果。" + +#: ../../howto/functional.rst:111 +msgid "" +"The technique used to prove programs correct is to write down " +"**invariants**, properties of the input data and of the program's variables " +"that are always true. For each line of code, you then show that if " +"invariants X and Y are true **before** the line is executed, the slightly " +"different invariants X' and Y' are true **after** the line is executed. " +"This continues until you reach the end of the program, at which point the " +"invariants should match the desired conditions on the program's output." +msgstr "" +"证明程序正确性所用到的技术是写出 **不变量**,也就是对于输入数据和程序中的变量永远为真的特性。然后对每行代码,你说明这行代码执行前的不变量 X 和 " +"Y 以及执行后稍有不同的不变量 X' 和 Y' 为真。如此一直到程序结束,这时候在程序的输出上,不变量应该会与期望的状态一致。" + +#: ../../howto/functional.rst:119 +msgid "" +"Functional programming's avoidance of assignments arose because assignments " +"are difficult to handle with this technique; assignments can break " +"invariants that were true before the assignment without producing any new " +"invariants that can be propagated onward." +msgstr "函数式编程之所以要消除赋值,是因为赋值在这个技术中难以处理;赋值可能会破坏赋值前为真的不变量,却并不产生任何可以传递下去的新的不变量。" + +#: ../../howto/functional.rst:124 +msgid "" +"Unfortunately, proving programs correct is largely impractical and not " +"relevant to Python software. Even trivial programs require proofs that are " +"several pages long; the proof of correctness for a moderately complicated " +"program would be enormous, and few or none of the programs you use daily " +"(the Python interpreter, your XML parser, your web browser) could be proven " +"correct. Even if you wrote down or generated a proof, there would then be " +"the question of verifying the proof; maybe there's an error in it, and you " +"wrongly believe you've proved the program correct." +msgstr "" +"不幸的是,证明程序的正确性很大程度上是经验性质的,而且和 Python " +"软件无关。即使是微不足道的程序都需要几页长的证明;一个中等复杂的程序的正确性证明会非常庞大,而且,极少甚至没有你日常所使用的程序(Python " +"解释器,XML " +"解析器,浏览器)的正确性能够被证明。即使你写出或者生成一个证明,验证证明也会是一个问题;里面可能出了差错,而你错误地相信你证明了程序的正确性。" + +#: ../../howto/functional.rst:135 +msgid "Modularity" +msgstr "模块化" + +#: ../../howto/functional.rst:137 +msgid "" +"A more practical benefit of functional programming is that it forces you to " +"break apart your problem into small pieces. Programs are more modular as a " +"result. It's easier to specify and write a small function that does one " +"thing than a large function that performs a complicated transformation. " +"Small functions are also easier to read and to check for errors." +msgstr "" +"函数式编程的一个更实用的优点是,它强制你把问题分解成小的方面。因此程序会更加模块化。相对于一个进行了复杂变换的大型函数,一个小的函数更明确,更易于编写," +" 也更易于阅读和检查错误。" + +#: ../../howto/functional.rst:145 +msgid "Ease of debugging and testing" +msgstr "易于调试和测试" + +#: ../../howto/functional.rst:147 +msgid "Testing and debugging a functional-style program is easier." +msgstr "测试和调试函数式程序相对来说更容易。" + +#: ../../howto/functional.rst:149 +msgid "" +"Debugging is simplified because functions are generally small and clearly " +"specified. When a program doesn't work, each function is an interface point" +" where you can check that the data are correct. You can look at the " +"intermediate inputs and outputs to quickly isolate the function that's " +"responsible for a bug." +msgstr "" +"调试很简单是因为函数通常都很小而且清晰明确。当程序无法工作的时候,每个函数都是一个可以检查数据是否正确的接入点。你可以通过查看中间输入和输出迅速找到出错的函数。" + +#: ../../howto/functional.rst:154 +msgid "" +"Testing is easier because each function is a potential subject for a unit " +"test. Functions don't depend on system state that needs to be replicated " +"before running a test; instead you only have to synthesize the right input " +"and then check that the output matches expectations." +msgstr "" +"测试更容易是因为每个函数都是单元测试的潜在目标。在执行测试前,函数并不依赖于需要重现的系统状态;相反,你只需要给出正确的输入,然后检查输出是否和期望的结果一致。" + +#: ../../howto/functional.rst:161 +msgid "Composability" +msgstr "组合性" + +#: ../../howto/functional.rst:163 +msgid "" +"As you work on a functional-style program, you'll write a number of " +"functions with varying inputs and outputs. Some of these functions will be " +"unavoidably specialized to a particular application, but others will be " +"useful in a wide variety of programs. For example, a function that takes a " +"directory path and returns all the XML files in the directory, or a function" +" that takes a filename and returns its contents, can be applied to many " +"different situations." +msgstr "" +"当你编写函数式风格的程序时,你会写出很多带有不同输入和输出的函数。其中一些不可避免地会局限于特定的应用,但其他的却可以广泛的用在程序中。举例来说,一个接受文件夹目录返回所有文件夹中的" +" XML 文件的函数; 或是一个接受文件名,然后返回文件内容的函数,都可以应用在很多不同的场合。" + +#: ../../howto/functional.rst:170 +msgid "" +"Over time you'll form a personal library of utilities. Often you'll " +"assemble new programs by arranging existing functions in a new configuration" +" and writing a few functions specialized for the current task." +msgstr "久而久之你会形成一个个人工具库。通常你可以重新组织已有的函数来组成新的程序,然后为当前的工作写一些特殊的函数。" + +#: ../../howto/functional.rst:178 +msgid "Iterators" +msgstr "迭代器" + +#: ../../howto/functional.rst:180 +msgid "" +"I'll start by looking at a Python language feature that's an important " +"foundation for writing functional-style programs: iterators." +msgstr "我会从 Python 的一个语言特性, 编写函数式风格程序的重要基石开始说起:迭代器。" + +#: ../../howto/functional.rst:183 +msgid "" +"An iterator is an object representing a stream of data; this object returns " +"the data one element at a time. A Python iterator must support a method " +"called :meth:`~iterator.__next__` that takes no arguments and always returns" +" the next element of the stream. If there are no more elements in the " +"stream, :meth:`~iterator.__next__` must raise the :exc:`StopIteration` " +"exception. Iterators don't have to be finite, though; it's perfectly " +"reasonable to write an iterator that produces an infinite stream of data." +msgstr "" +"迭代器是一个表示数据流的对象;这个对象每次只返回一个元素。Python 迭代器必须支持 :meth:`~iterator.__next__` " +"方法;这个方法不接受参数,并总是返回数据流中的下一个元素。如果数据流中没有元素,:meth:`~iterator.__next__` 会抛出 " +":exc:`StopIteration` 异常。迭代器未必是有限的;完全有理由构造一个输出无限数据流的迭代器。" + +#: ../../howto/functional.rst:191 +msgid "" +"The built-in :func:`iter` function takes an arbitrary object and tries to " +"return an iterator that will return the object's contents or elements, " +"raising :exc:`TypeError` if the object doesn't support iteration. Several " +"of Python's built-in data types support iteration, the most common being " +"lists and dictionaries. An object is called :term:`iterable` if you can get" +" an iterator for it." +msgstr "" +"内置的 :func:`iter` 函数接受任意对象并试图返回一个迭代器来输出对象的内容或元素,并会在对象不支持迭代的时候抛出 " +":exc:`TypeError` 异常。Python 有几种内置数据类型支持迭代,最常见的就是列表和字典。如果一个对象能生成迭代器,那么它就会被称作 " +":term:`iterable`。" + +#: ../../howto/functional.rst:198 +msgid "You can experiment with the iteration interface manually:" +msgstr "你可以手动试验迭代器的接口。" + +#: ../../howto/functional.rst:216 +msgid "" +"Python expects iterable objects in several different contexts, the most " +"important being the :keyword:`for` statement. In the statement ``for X in " +"Y``, Y must be an iterator or some object for which :func:`iter` can create " +"an iterator. These two statements are equivalent::" +msgstr "" +"Python 有不少要求使用可迭代的对象的地方,其中最重要的就是 :keyword:`for` 表达式。在表达式 ``for X in Y``,Y " +"要么自身是一个迭代器,要么能够由 :func:`iter` 创建一个迭代器。以下两种表达是等价的::" + +#: ../../howto/functional.rst:228 +msgid "" +"Iterators can be materialized as lists or tuples by using the :func:`list` " +"or :func:`tuple` constructor functions:" +msgstr "可以用 :func:`list` 或 :func:`tuple` 这样的构造函数把迭代器具体化成列表或元组:" + +#: ../../howto/functional.rst:237 +msgid "" +"Sequence unpacking also supports iterators: if you know an iterator will " +"return N elements, you can unpack them into an N-tuple:" +msgstr "序列的解压操作也支持迭代器:如果你知道一个迭代器能够返回 N 个元素,你可以把他们解压到有 N 个元素的元组:" + +#: ../../howto/functional.rst:246 +msgid "" +"Built-in functions such as :func:`max` and :func:`min` can take a single " +"iterator argument and will return the largest or smallest element. The " +"``\"in\"`` and ``\"not in\"`` operators also support iterators: ``X in " +"iterator`` is true if X is found in the stream returned by the iterator. " +"You'll run into obvious problems if the iterator is infinite; :func:`max`, " +":func:`min` will never return, and if the element X never appears in the " +"stream, the ``\"in\"`` and ``\"not in\"`` operators won't return either." +msgstr "" +"像 :func:`max` 和 :func:`min` 这样的内置函数可以接受单个迭代器参数,然后返回其中最大或者最小的元素。``\"in\"`` 和 " +"``\"not in\"`` 操作也支持迭代器:如果能够在迭代器 iterator 返回的数据流中找到 X 的话,则``X in iterator`` " +"为真。很显然,如果迭代器是无限的,这么做你就会遇到问题;:func:`max` 和 :func:`min` 永远也不会返回;如果元素 X " +"也不出现在数据流中,``\"in\"`` 和 ``\"not in\"`` 操作同样也永远不会返回。" + +#: ../../howto/functional.rst:254 +msgid "" +"Note that you can only go forward in an iterator; there's no way to get the " +"previous element, reset the iterator, or make a copy of it. Iterator " +"objects can optionally provide these additional capabilities, but the " +"iterator protocol only specifies the :meth:`~iterator.__next__` method. " +"Functions may therefore consume all of the iterator's output, and if you " +"need to do something different with the same stream, you'll have to create a" +" new iterator." +msgstr "" +"注意你只能在迭代器中顺序前进;没有获取前一个元素的方法,除非重置迭代器,或者重新复制一份。迭代器对象可以提供这些额外的功能,但迭代器协议只明确了 " +":meth:`~iterator.__next__` " +"方法。函数可能因此而耗尽迭代器的输出,如果你要对同样的数据流做不同的操作,你必须重新创建一个迭代器。" + +#: ../../howto/functional.rst:264 +msgid "Data Types That Support Iterators" +msgstr "支持迭代器的数据类型" + +#: ../../howto/functional.rst:266 +msgid "" +"We've already seen how lists and tuples support iterators. In fact, any " +"Python sequence type, such as strings, will automatically support creation " +"of an iterator." +msgstr "我们已经知道列表和元组支持迭代器。实际上,Python 中的任何序列类型,比如字符串,都自动支持创建迭代器。" + +#: ../../howto/functional.rst:270 +msgid "" +"Calling :func:`iter` on a dictionary returns an iterator that will loop over" +" the dictionary's keys::" +msgstr "对字典调用 :func:`iter` 会返回一个遍历字典的键的迭代器::" + +#: ../../howto/functional.rst:290 +msgid "" +"Note that starting with Python 3.7, dictionary iteration order is guaranteed" +" to be the same as the insertion order. In earlier versions, the behaviour " +"was unspecified and could vary between implementations." +msgstr "注意从 Python 3.7 开始,字典的遍历顺序一定和输入顺序一样。先前的版本并没有明确这一点,所以不同的实现可能不一致。" + +#: ../../howto/functional.rst:294 +msgid "" +"Applying :func:`iter` to a dictionary always loops over the keys, but " +"dictionaries have methods that return other iterators. If you want to " +"iterate over values or key/value pairs, you can explicitly call the " +":meth:`~dict.values` or :meth:`~dict.items` methods to get an appropriate " +"iterator." +msgstr "" +"对字典使用 :func:`iter` 总是会遍历键,但字典也有返回其他迭代器的方法。如果你只遍历值或者键/值对,你可以明确地调用 " +":meth:`~dict.values` 或 :meth:`~dict.items` 方法得到合适的迭代器。" + +#: ../../howto/functional.rst:300 +msgid "" +"The :func:`dict` constructor can accept an iterator that returns a finite " +"stream of ``(key, value)`` tuples:" +msgstr ":func:`dict` 构造函数可以接受一个迭代器,然后返回一个有限的 ``(key, value)`` 元组的数据流:" + +#: ../../howto/functional.rst:307 +msgid "" +"Files also support iteration by calling the :meth:`~io.TextIOBase.readline` " +"method until there are no more lines in the file. This means you can read " +"each line of a file like this::" +msgstr "" +"文件也可以通过调用 :meth:`~io.TextIOBase.readline` " +"来遍历,直到穷尽文件中所有的行。这意味着你可以像这样读取文件中的每一行::" + +#: ../../howto/functional.rst:315 +msgid "" +"Sets can take their contents from an iterable and let you iterate over the " +"set's elements::" +msgstr "集合可以从可遍历的对象获取内容,也可以让你遍历集合的元素::" + +#: ../../howto/functional.rst:325 +msgid "Generator expressions and list comprehensions" +msgstr "生成器表达式和列表推导式" + +#: ../../howto/functional.rst:327 +msgid "" +"Two common operations on an iterator's output are 1) performing some " +"operation for every element, 2) selecting a subset of elements that meet " +"some condition. For example, given a list of strings, you might want to " +"strip off trailing whitespace from each line or extract all the strings " +"containing a given substring." +msgstr "" +"迭代器的输出有两个很常见的使用方式,1) 对每一个元素执行操作,2) " +"选择一个符合条件的元素子集。比如,给定一个字符串列表,你可能想去掉每个字符串尾部的空白字符,或是选出所有包含给定子串的字符串。" + +#: ../../howto/functional.rst:333 +msgid "" +"List comprehensions and generator expressions (short form: \"listcomps\" and" +" \"genexps\") are a concise notation for such operations, borrowed from the " +"functional programming language Haskell (https://www.haskell.org/). You can" +" strip all the whitespace from a stream of strings with the following code::" +msgstr "" +"列表推导式和生成器表达时(简写:\"listcomps\" 和 \"genexps\")让这些操作更加简明,这个形式借鉴自函数式程序语言 " +"Haskell(https://www.haskell.org/)。你可以用以下代码去掉一个字符串流中的所有空白字符:" + +#: ../../howto/functional.rst:346 +msgid "You can select only certain elements by adding an ``\"if\"`` condition::" +msgstr "你可以加上条件语句 ``\"if\"`` 来选取特定的元素:" + +#: ../../howto/functional.rst:351 +msgid "" +"With a list comprehension, you get back a Python list; ``stripped_list`` is " +"a list containing the resulting lines, not an iterator. Generator " +"expressions return an iterator that computes the values as necessary, not " +"needing to materialize all the values at once. This means that list " +"comprehensions aren't useful if you're working with iterators that return an" +" infinite stream or a very large amount of data. Generator expressions are " +"preferable in these situations." +msgstr "" +"通过列表推导式,你会获得一个 Python 列表;``stripped_list`` 就是一个包含所有结果行的列表,并不是迭代器。 " +"生成器表达式会返回一个迭代器,它在必要的时候计算结果,避免一次性生成所有的值。 " +"这意味着,如果迭代器返回一个无限数据流或者大量的数据,列表推导式就不太好用了。 这种情况下生成器表达式会更受青睐。" + +#: ../../howto/functional.rst:358 +msgid "" +"Generator expressions are surrounded by parentheses (\"()\") and list " +"comprehensions are surrounded by square brackets (\"[]\"). Generator " +"expressions have the form::" +msgstr "生成器表达式两边使用圆括号 (\"()\") ,而列表推导式则使用方括号 (\"[]\")。生成器表达式的形式为::" + +#: ../../howto/functional.rst:371 +msgid "" +"Again, for a list comprehension only the outside brackets are different " +"(square brackets instead of parentheses)." +msgstr "再次说明,列表推导式只有两边的括号不一样(方括号而不是圆括号)。" + +#: ../../howto/functional.rst:374 +msgid "" +"The elements of the generated output will be the successive values of " +"``expression``. The ``if`` clauses are all optional; if present, " +"``expression`` is only evaluated and added to the result when ``condition`` " +"is true." +msgstr "" +"这些生成用于输出的元素会成为 ``expression`` 的后继值。其中 ``if`` 语句是可选的;如果给定的话 ``expression`` " +"只会在符合条件时计算并加入到结果中。" + +#: ../../howto/functional.rst:378 +msgid "" +"Generator expressions always have to be written inside parentheses, but the " +"parentheses signalling a function call also count. If you want to create an" +" iterator that will be immediately passed to a function you can write::" +msgstr "生成器表达式总是写在圆括号里面,不过也可以算上调用函数时用的括号。如果你想即时创建一个传递给函数的迭代器,可以这么写::" + +#: ../../howto/functional.rst:384 +msgid "" +"The ``for...in`` clauses contain the sequences to be iterated over. The " +"sequences do not have to be the same length, because they are iterated over " +"from left to right, **not** in parallel. For each element in ``sequence1``," +" ``sequence2`` is looped over from the beginning. ``sequence3`` is then " +"looped over for each resulting pair of elements from ``sequence1`` and " +"``sequence2``." +msgstr "" +"其中 ``for...in`` 语句包含了将要遍历的序列。这些序列并不必须同样长,因为它们会从左往右开始遍历,而 **不是** 同时执行。对每个 " +"``sequence1`` 中的元素,``sequence2`` 会从头开始遍历。``sequence3`` 会对每个 ``sequence1`` 和 " +"``sequence2`` 的元素对开始遍历。" + +#: ../../howto/functional.rst:390 +msgid "" +"To put it another way, a list comprehension or generator expression is " +"equivalent to the following Python code::" +msgstr "换句话说,列表推导式器是和下面的 Python 代码等价::" + +#: ../../howto/functional.rst:407 +msgid "" +"This means that when there are multiple ``for...in`` clauses but no ``if`` " +"clauses, the length of the resulting output will be equal to the product of " +"the lengths of all the sequences. If you have two lists of length 3, the " +"output list is 9 elements long:" +msgstr "" +"这说明,如果有多个 ``for...in`` 语句而没有 ``if`` " +"语句,输出结果的长度就是所有序列长度的乘积。如果你的两个列表长度为3,那么输出的列表长度就是9:" + +#: ../../howto/functional.rst:419 +msgid "" +"To avoid introducing an ambiguity into Python's grammar, if ``expression`` " +"is creating a tuple, it must be surrounded with parentheses. The first list" +" comprehension below is a syntax error, while the second one is correct::" +msgstr "" +"为了不让 Python 语法变得含糊,如果 ``expression`` " +"会生成元组,那这个元组必须要用括号括起来。下面第一个列表推导式语法错误,第二个则是正确的::" + +#: ../../howto/functional.rst:430 +msgid "Generators" +msgstr "生成器" + +#: ../../howto/functional.rst:432 +msgid "" +"Generators are a special class of functions that simplify the task of " +"writing iterators. Regular functions compute a value and return it, but " +"generators return an iterator that returns a stream of values." +msgstr "生成器是一类用来简化编写迭代器工作的特殊函数。普通的函数计算并返回一个值,而生成器返回一个能返回数据流的迭代器。" + +#: ../../howto/functional.rst:436 +msgid "" +"You're doubtless familiar with how regular function calls work in Python or " +"C. When you call a function, it gets a private namespace where its local " +"variables are created. When the function reaches a ``return`` statement, " +"the local variables are destroyed and the value is returned to the caller. " +"A later call to the same function creates a new private namespace and a " +"fresh set of local variables. But, what if the local variables weren't " +"thrown away on exiting a function? What if you could later resume the " +"function where it left off? This is what generators provide; they can be " +"thought of as resumable functions." +msgstr "" +"毫无疑问,你已经对如何在 Python 和 C 中调用普通函数很熟悉了,这时候函数会获得一个创建局部变量的私有命名空间。当函数到达 ``return``" +" " +"表达式时,局部变量会被销毁然后把返回给调用者。之后调用同样的函数时会创建一个新的私有命名空间和一组全新的局部变量。但是,如果在退出一个函数时不扔掉局部变量会如何呢?如果稍后你能够从退出函数的地方重新恢复又如何呢?这就是生成器所提供的;他们可以被看成可恢复的函数。" + +#: ../../howto/functional.rst:445 +msgid "Here's the simplest example of a generator function:" +msgstr "这里有简单的生成器函数示例::" + +#: ../../howto/functional.rst:451 +msgid "" +"Any function containing a :keyword:`yield` keyword is a generator function; " +"this is detected by Python's :term:`bytecode` compiler which compiles the " +"function specially as a result." +msgstr "" +"任何包含了 :keyword:`yield` 关键字的函数都是生成器函数;Python 的 :term:`bytecode` " +"编译器会在编译的时候检测到并因此而特殊处理。" + +#: ../../howto/functional.rst:455 +msgid "" +"When you call a generator function, it doesn't return a single value; " +"instead it returns a generator object that supports the iterator protocol. " +"On executing the ``yield`` expression, the generator outputs the value of " +"``i``, similar to a ``return`` statement. The big difference between " +"``yield`` and a ``return`` statement is that on reaching a ``yield`` the " +"generator's state of execution is suspended and local variables are " +"preserved. On the next call to the generator's :meth:`~generator.__next__` " +"method, the function will resume executing." +msgstr "" +"当你调用一个生成器函数,它并不会返回单独的值,而是返回一个支持生成器协议的生成器对象。当执行 ``yield`` 表达式时,生成器会输出 ``i`` " +"的值,就像 ``return`` 表达式一样。``yield`` 和 ``return`` 最大的区别在于,到达 ``yield`` " +"的时候生成器的执行状态会挂起并保留局部变量。在下一次调用生成器 :meth:`~generator.__next__` 方法的时候,函数会恢复执行。" + +#: ../../howto/functional.rst:464 +msgid "Here's a sample usage of the ``generate_ints()`` generator:" +msgstr "这里有一个 ``generate_ints()`` 生成器的示例:" + +#: ../../howto/functional.rst:481 +msgid "" +"You could equally write ``for i in generate_ints(5)``, or ``a, b, c = " +"generate_ints(3)``." +msgstr "" +"同样,你可以写出 ``for i in generate_ints(5)``,或者 ``a, b, c = generate_ints(3)``。" + +#: ../../howto/functional.rst:484 +msgid "" +"Inside a generator function, ``return value`` causes " +"``StopIteration(value)`` to be raised from the :meth:`~generator.__next__` " +"method. Once this happens, or the bottom of the function is reached, the " +"procession of values ends and the generator cannot yield any further values." +msgstr "" +"在生成器函数里面,``return value`` 会触发从 :meth:`~generator.__next__` 方法抛出 " +"``StopIteration(value)`` 异常。一旦抛出这个异常,或者函数结束,处理数据的过程就会停止,生成器也不会再生成新的值。" + +#: ../../howto/functional.rst:489 +msgid "" +"You could achieve the effect of generators manually by writing your own " +"class and storing all the local variables of the generator as instance " +"variables. For example, returning a list of integers could be done by " +"setting ``self.count`` to 0, and having the :meth:`~iterator.__next__` " +"method increment ``self.count`` and return it. However, for a moderately " +"complicated generator, writing a corresponding class can be much messier." +msgstr "" +"你可以手动编写自己的类来达到生成器的效果,把生成器的所有局部变量作为实例的成员变量存储起来。比如,可以这么返回一个整数列表:把 " +"``self.count`` 设为0,然后通过 :meth:`~iterator.__next__`方法增加并返回 " +"``self.count``。然而,对于一个中等复杂程度的生成器,写出一个相应的类可能会相当繁杂。" + +#: ../../howto/functional.rst:497 +msgid "" +"The test suite included with Python's library, " +":source:`Lib/test/test_generators.py`, contains a number of more interesting" +" examples. Here's one generator that implements an in-order traversal of a " +"tree using generators recursively. ::" +msgstr "" +"包含在 Python 库中的测试套件 :source:`Lib/test/test_generators.py` " +"里有很多非常有趣的例子。这里是一个用生成器实现树的递归中序遍历示例。::" + +#: ../../howto/functional.rst:513 +msgid "" +"Two other examples in ``test_generators.py`` produce solutions for the " +"N-Queens problem (placing N queens on an NxN chess board so that no queen " +"threatens another) and the Knight's Tour (finding a route that takes a " +"knight to every square of an NxN chessboard without visiting any square " +"twice)." +msgstr "" +"另外两个 ``test_generators.py`` 中的例子给出了 N 皇后问题(在 NxN 的棋盘上放置 N " +"个皇后,任何一个都不能吃掉另一个),以及马的遍历路线(在NxN 的棋盘上给马找出一条不重复的走过所有格子的路线)的解。" + +#: ../../howto/functional.rst:521 +msgid "Passing values into a generator" +msgstr "向生成器传递值" + +#: ../../howto/functional.rst:523 +msgid "" +"In Python 2.4 and earlier, generators only produced output. Once a " +"generator's code was invoked to create an iterator, there was no way to pass" +" any new information into the function when its execution is resumed. You " +"could hack together this ability by making the generator look at a global " +"variable or by passing in some mutable object that callers then modify, but " +"these approaches are messy." +msgstr "" +"在 Python 2.4 " +"及之前的版本中,生成器只产生输出。一旦调用生成器的代码创建一个迭代器,就没有办法在函数恢复执行的时候向它传递新的信息。你可以设法实现这个功能,让生成器引用一个全局变量或者一个调用者可以修改的可变对象,但是这些方法都很繁杂。" + +#: ../../howto/functional.rst:530 +msgid "" +"In Python 2.5 there's a simple way to pass values into a generator. " +":keyword:`yield` became an expression, returning a value that can be " +"assigned to a variable or otherwise operated on::" +msgstr "" +"在 Python 2.5 里有一个简单的将值传递给生成器的方法。:keyword:`yield` " +"变成了一个表达式,返回一个可以赋给变量或执行操作的值::" + +#: ../../howto/functional.rst:536 +msgid "" +"I recommend that you **always** put parentheses around a ``yield`` " +"expression when you're doing something with the returned value, as in the " +"above example. The parentheses aren't always necessary, but it's easier to " +"always add them instead of having to remember when they're needed." +msgstr "" +"我建议你在处理 ``yield`` 表达式返回值的时候, **总是** " +"两边写上括号,就像上面的例子一样。括号并不总是必须的,但是比起记住什么时候需要括号,写出来会更容易一点。" + +#: ../../howto/functional.rst:541 +msgid "" +"(:pep:`342` explains the exact rules, which are that a ``yield``-expression " +"must always be parenthesized except when it occurs at the top-level " +"expression on the right-hand side of an assignment. This means you can " +"write ``val = yield i`` but have to use parentheses when there's an " +"operation, as in ``val = (yield i) + 12``.)" +msgstr "" +"(:pep:`342` 解释了具体的规则,也就是 ``yield`` 表达式必须括起来,除非是出现在最顶级的赋值表达式的右边。这意味着你可以写 " +"``val = yield i``,但是必须在操作的时候加上括号,就像``val = (yield i) + 12``)" + +#: ../../howto/functional.rst:547 +msgid "" +"Values are sent into a generator by calling its :meth:`send(value) " +"` method. This method resumes the generator's code and the " +"``yield`` expression returns the specified value. If the regular " +":meth:`~generator.__next__` method is called, the ``yield`` returns " +"``None``." +msgstr "" +"可以调用 :meth:`send(value)` 方法向生成器发送值。这个方法会恢复执行生成器的代码,然后 " +"``yield`` 表达式返回特定的值。如果调用普通的 :meth:`~generator.__next__`方法,``yield`` 会返回 " +"``None``." + +#: ../../howto/functional.rst:552 +msgid "" +"Here's a simple counter that increments by 1 and allows changing the value " +"of the internal counter." +msgstr "这里有一个简单的每次加1的计数器,并允许改变内部计数器的值。" + +#: ../../howto/functional.rst:567 +msgid "And here's an example of changing the counter:" +msgstr "这是改变计数器的一个示例" + +#: ../../howto/functional.rst:584 +msgid "" +"Because ``yield`` will often be returning ``None``, you should always check " +"for this case. Don't just use its value in expressions unless you're sure " +"that the :meth:`~generator.send` method will be the only method used to " +"resume your generator function." +msgstr "" +"因为 ``yield`` 很多时候会返回 ``None``,所以你应该总是检查这个情况。不要在表达式中使用 ``yield`` 的值,除非你确定 " +":meth:`~generator.send` 是唯一的用来恢复你的生成器函数的方法。" + +#: ../../howto/functional.rst:589 +msgid "" +"In addition to :meth:`~generator.send`, there are two other methods on " +"generators:" +msgstr "除了 :meth:`~generator.send` 之外,生成器还有两个其他的方法:" + +#: ../../howto/functional.rst:592 +msgid "" +":meth:`throw(value) ` is used to raise an exception inside " +"the generator; the exception is raised by the ``yield`` expression where the" +" generator's execution is paused." +msgstr "" +":meth:`throw(value) ` 用于在生成器内部抛出异常;这个异常会在生成器暂停执行的时候由 " +"``yield`` 表达式抛出。" + +#: ../../howto/functional.rst:596 +msgid "" +":meth:`~generator.close` raises a :exc:`GeneratorExit` exception inside the " +"generator to terminate the iteration. On receiving this exception, the " +"generator's code must either raise :exc:`GeneratorExit` or " +":exc:`StopIteration`; catching the exception and doing anything else is " +"illegal and will trigger a :exc:`RuntimeError`. :meth:`~generator.close` " +"will also be called by Python's garbage collector when the generator is " +"garbage-collected." +msgstr "" +":meth:`generator.close` 会在生成器内部抛出 :exc:`GeneratorExit` " +"异常来结束迭代。当接收到这个异常时,生成器的代码会抛出 :exc:`GeneratorExit` 或者 " +":exc:`StopIteration`;捕捉这个异常作其他处理是非法的,并会出发 " +":exc:`RuntimeError`。:meth:`~generator.close` 也会在 Python 垃圾回收器回收生成器的时候调用。" + +#: ../../howto/functional.rst:604 +msgid "" +"If you need to run cleanup code when a :exc:`GeneratorExit` occurs, I " +"suggest using a ``try: ... finally:`` suite instead of catching " +":exc:`GeneratorExit`." +msgstr "" +"如果你要在 :exc:`GeneratorExit` 发生的时候清理代码,我建议使用 ``try: ... finally:`` 组合来代替 " +":exc:`GeneratorExit`。" + +#: ../../howto/functional.rst:607 +msgid "" +"The cumulative effect of these changes is to turn generators from one-way " +"producers of information into both producers and consumers." +msgstr "这些改变的累积效应是,让生成器从单向的信息生产者变成了既是生产者,又是消费者。" + +#: ../../howto/functional.rst:610 +msgid "" +"Generators also become **coroutines**, a more generalized form of " +"subroutines. Subroutines are entered at one point and exited at another " +"point (the top of the function, and a ``return`` statement), but coroutines " +"can be entered, exited, and resumed at many different points (the ``yield`` " +"statements)." +msgstr "" +"生成器也可以成为 **协程** ,一种更广义的子过程形式。子过程可以从一个地方进入,然后从另一个地方退出(从函数的顶端进入,从 ``return`` " +"语句退出),而协程可以进入,退出,然后在很多不同的地方恢复(``yield`` 语句)。" + +#: ../../howto/functional.rst:617 +msgid "Built-in functions" +msgstr "内置函数" + +#: ../../howto/functional.rst:619 +msgid "" +"Let's look in more detail at built-in functions often used with iterators." +msgstr "我们可以看看迭代器常常用到的函数的更多细节。" + +#: ../../howto/functional.rst:621 +msgid "" +"Two of Python's built-in functions, :func:`map` and :func:`filter` duplicate" +" the features of generator expressions:" +msgstr "Python 内置的两个函数 :func:`map` 和 :func:`filter` 复制了生成器表达式的两个特性:" + +#: ../../howto/functional.rst:633 +msgid "" +":func:`map(f, iterA, iterB, ...) ` returns an iterator over the " +"sequence" +msgstr ":func:`map(f, iterA, iterB, ...) ` 返回一个遍历序列的迭代器" + +#: ../../howto/functional.rst:625 +msgid "" +"``f(iterA[0], iterB[0]), f(iterA[1], iterB[1]), f(iterA[2], iterB[2]), " +"...``." +msgstr "" +"``f(iterA[0], iterB[0]), f(iterA[1], iterB[1]), f(iterA[2], iterB[2]), " +"...``." + +#: ../../howto/functional.rst:635 +msgid "You can of course achieve the same effect with a list comprehension." +msgstr "你当然也可以用列表推导式达到同样的效果。" + +#: ../../howto/functional.rst:637 +msgid "" +":func:`filter(predicate, iter) ` returns an iterator over all the " +"sequence elements that meet a certain condition, and is similarly duplicated" +" by list comprehensions. A **predicate** is a function that returns the " +"truth value of some condition; for use with :func:`filter`, the predicate " +"must take a single value." +msgstr "" +":func:`filter(predicate, iter) ` 返回一个遍历序列中满足指定条件的元素的迭代器,和列表推导式的功能相似。" +" **predicate** (谓词)是一个在特定条件下返回真值的函数;要使用函数 :func:`filter`,谓词函数必须只能接受一个参数。" + +#: ../../howto/functional.rst:650 +msgid "This can also be written as a list comprehension:" +msgstr "这也可以写成列表推导式:" + +#: ../../howto/functional.rst:656 +msgid "" +":func:`enumerate(iter, start=0) ` counts off the elements in the " +"iterable returning 2-tuples containing the count (from *start*) and each " +"element. ::" +msgstr "" +":func:`enumerate(iter, start=0) ` 计数可迭代对象中的元素,然后返回包含每个计数(从 " +"**start** 开始)和元素两个值的元组。::" + +#: ../../howto/functional.rst:666 +msgid "" +":func:`enumerate` is often used when looping through a list and recording " +"the indexes at which certain conditions are met::" +msgstr ":func:`enumerate` 常常用于遍历列表并记录达到特定条件时的下标::" + +#: ../../howto/functional.rst:674 +msgid "" +":func:`sorted(iterable, key=None, reverse=False) ` collects all the " +"elements of the iterable into a list, sorts the list, and returns the sorted" +" result. The *key* and *reverse* arguments are passed through to the " +"constructed list's :meth:`~list.sort` method. ::" +msgstr "" +":func:`sorted(iterable, key=None, reverse=False) ` 会将 iterable " +"中的元素收集到一个列表中,然后排序并返回结果。其中 *key* 和 *reverse* 参数会传递给所创建列表的 :meth:`~list.sort` " +"方法。::" + +#: ../../howto/functional.rst:689 +msgid "" +"(For a more detailed discussion of sorting, see the :ref:`sortinghowto`.)" +msgstr "(对排序更详细的讨论可参见 :ref:`sortinghowto`。)" + +#: ../../howto/functional.rst:692 +msgid "" +"The :func:`any(iter) ` and :func:`all(iter) ` built-ins look at " +"the truth values of an iterable's contents. :func:`any` returns ``True`` if" +" any element in the iterable is a true value, and :func:`all` returns " +"``True`` if all of the elements are true values:" +msgstr "" +"内置函数 :func:`any(iter) ` 和 :func:`all(iter) ` " +"会查看一个可迭代对象内容的逻辑值。:func:`any` 在可迭代对象中任意一个元素为真时返回 ``True``,而 :func:`all` " +"在所有元素为真时返回 ``True``:" + +#: ../../howto/functional.rst:711 +msgid "" +":func:`zip(iterA, iterB, ...) ` takes one element from each iterable " +"and returns them in a tuple::" +msgstr ":func:`zip(iterA, iterB, ...) ` 从每个可迭代对象中选取单个元素组成列表并返回::" + +#: ../../howto/functional.rst:717 +msgid "" +"It doesn't construct an in-memory list and exhaust all the input iterators " +"before returning; instead tuples are constructed and returned only if " +"they're requested. (The technical term for this behaviour is `lazy " +"evaluation `__.)" +msgstr "" +"它并不会在内存创建一个列表并因此在返回前而耗尽输入的迭代器;相反,只有在被请求的时候元组才会创建并返回。(这种行为的技术术语叫惰性计算,参见 `lazy" +" evaluation `__.)" + +#: ../../howto/functional.rst:722 +msgid "" +"This iterator is intended to be used with iterables that are all of the same" +" length. If the iterables are of different lengths, the resulting stream " +"will be the same length as the shortest iterable. ::" +msgstr "这个迭代器设计用于长度相同的可迭代对象。如果可迭代对象的长度不一致,返回的数据流的长度会和最短的可迭代对象相同" + +#: ../../howto/functional.rst:729 +msgid "" +"You should avoid doing this, though, because an element may be taken from " +"the longer iterators and discarded. This means you can't go on to use the " +"iterators further because you risk skipping a discarded element." +msgstr "然而,你应该避免这种情况,因为所有从更长的迭代器中取出的元素都会被丢弃。这意味着之后你也无法冒着跳过被丢弃元素的风险来继续使用这个迭代器。" + +#: ../../howto/functional.rst:735 +msgid "The itertools module" +msgstr "itertools 模块" + +#: ../../howto/functional.rst:737 +msgid "" +"The :mod:`itertools` module contains a number of commonly-used iterators as " +"well as functions for combining several iterators. This section will " +"introduce the module's contents by showing small examples." +msgstr ":mod:`itertools` 模块包含很多常用的迭代器以及用来组合迭代器的函数。本节会用些小的例子来介绍这个模块的内容。" + +#: ../../howto/functional.rst:741 +msgid "The module's functions fall into a few broad classes:" +msgstr "这个模块里的函数大致可以分为几类:" + +#: ../../howto/functional.rst:743 +msgid "Functions that create a new iterator based on an existing iterator." +msgstr "从已有的迭代器创建新的迭代器的函数。" + +#: ../../howto/functional.rst:744 +msgid "Functions for treating an iterator's elements as function arguments." +msgstr "接受迭代器元素作为参数的函数。" + +#: ../../howto/functional.rst:745 +msgid "Functions for selecting portions of an iterator's output." +msgstr "选取部分迭代器输出的函数。" + +#: ../../howto/functional.rst:746 +msgid "A function for grouping an iterator's output." +msgstr "给迭代器输出分组的函数。" + +#: ../../howto/functional.rst:749 +msgid "Creating new iterators" +msgstr "创建新的迭代器" + +#: ../../howto/functional.rst:751 +msgid "" +":func:`itertools.count(start, step) ` returns an infinite " +"stream of evenly spaced values. You can optionally supply the starting " +"number, which defaults to 0, and the interval between numbers, which " +"defaults to 1::" +msgstr "" +":func:`itertools.count(start, step) ` " +"返回一个等分的无限数据流。初始值默认为0,间隔默认为1,你也选择可以指定初始值和间隔::" + +#: ../../howto/functional.rst:762 +msgid "" +":func:`itertools.cycle(iter) ` saves a copy of the contents" +" of a provided iterable and returns a new iterator that returns its elements" +" from first to last. The new iterator will repeat these elements " +"infinitely. ::" +msgstr "" +":func:`itertools.cycle(iter) ` " +"保存一份所提供的可迭代对象的副本,并返回一个能产生整个可迭代对象序列的新迭代器。新迭代器会无限重复这些元素。::" + +#: ../../howto/functional.rst:769 +msgid "" +":func:`itertools.repeat(elem, [n]) ` returns the provided " +"element *n* times, or returns the element endlessly if *n* is not provided. " +"::" +msgstr "" +":func:`itertools.repeat(elem, [n]) ` 返回 *n* 次所提供的元素,当 *n* " +"不存在时,返回无数次所提供的元素。 ::" + +#: ../../howto/functional.rst:777 +msgid "" +":func:`itertools.chain(iterA, iterB, ...) ` takes an " +"arbitrary number of iterables as input, and returns all the elements of the " +"first iterator, then all the elements of the second, and so on, until all of" +" the iterables have been exhausted. ::" +msgstr "" +":func:`itertools.chain(iterA, iterB, ...) ` " +"接受任意数量的可迭代对象作为输入,首先返回第一个迭代器的所有元素,然后是第二个的所有元素,如此一直进行下去,直到消耗掉所有输入的可迭代对象。" + +#: ../../howto/functional.rst:785 +msgid "" +":func:`itertools.islice(iter, [start], stop, [step]) ` " +"returns a stream that's a slice of the iterator. With a single *stop* " +"argument, it will return the first *stop* elements. If you supply a " +"starting index, you'll get *stop-start* elements, and if you supply a value " +"for *step*, elements will be skipped accordingly. Unlike Python's string " +"and list slicing, you can't use negative values for *start*, *stop*, or " +"*step*. ::" +msgstr "" +":func:`itertools.islice(iter, [start], stop, [step]) ` " +"返回一个所输入的迭代器切片的数据流。如果只单独给定 *stop* 参数的话,它会返回从起始算起 *stop* 个数量的元素。如果你提供了起始下标 " +"*start*,你会得到 *stop-start* 个元素;如果你给定了 *step* 参数,数据流会跳过相应的元素。和 Python " +"里的字符串和列表切片不同,你不能在 *start*, *stop* 或者 *step* 这些参数中使用负数。::" + +#: ../../howto/functional.rst:799 +msgid "" +":func:`itertools.tee(iter, [n]) ` replicates an iterator; it " +"returns *n* independent iterators that will all return the contents of the " +"source iterator. If you don't supply a value for *n*, the default is 2. " +"Replicating iterators requires saving some of the contents of the source " +"iterator, so this can consume significant memory if the iterator is large " +"and one of the new iterators is consumed more than the others. ::" +msgstr "" +":func:`itertools.tee(iter, [n]) ` 可以复制一个迭代器;它返回 *n* " +"个能够返回源迭代器内容的独立迭代器。如果你不提供参数 *n*,默认值为 " +"2。复制迭代器需要保存源迭代器的一部分内容,因此在源迭代器比较大的时候会显著地占用内存;同时,在所有新迭代器中,有一个迭代器会比其他迭代器占用更多的内存。" + +#: ../../howto/functional.rst:818 +msgid "Calling functions on elements" +msgstr "对元素使用函数" + +#: ../../howto/functional.rst:820 +msgid "" +"The :mod:`operator` module contains a set of functions corresponding to " +"Python's operators. Some examples are :func:`operator.add(a, b) " +"` (adds two values), :func:`operator.ne(a, b) ` " +"(same as ``a != b``), and :func:`operator.attrgetter('id') " +"` (returns a callable that fetches the ``.id`` " +"attribute)." +msgstr "" +":mod:`operator` 模块包含一组对应于 Python 操作符的函数。比如 :func:`operator.add(a, b) " +"` (把两个数加起来),:func:`operator.ne(a, b) ` (和 ``a !=" +" b`` 相同),以及 :func:`operator.attrgetter('id') ` (返回获取 " +"``.id`` 属性的可调用对象)。" + +#: ../../howto/functional.rst:826 +msgid "" +":func:`itertools.starmap(func, iter) ` assumes that the " +"iterable will return a stream of tuples, and calls *func* using these tuples" +" as the arguments::" +msgstr "" +":func:`itertools.starmap(func, iter) ` " +"假定可迭代对象能够返回一个元组的流,并且利用这些元组作为参数来调用 *func*::" + +#: ../../howto/functional.rst:838 +msgid "Selecting elements" +msgstr "选择元素" + +#: ../../howto/functional.rst:840 +msgid "" +"Another group of functions chooses a subset of an iterator's elements based " +"on a predicate." +msgstr "另外一系列函数根据谓词选取一个迭代器中元素的子集。" + +#: ../../howto/functional.rst:843 +msgid "" +":func:`itertools.filterfalse(predicate, iter) ` is " +"the opposite of :func:`filter`, returning all elements for which the " +"predicate returns false::" +msgstr "" +":func:`itertools.filterfalse(predicate, iter) ` 和 " +":func:`filter` 相反,返回所有让 predicate 返回 false 的元素::" + +#: ../../howto/functional.rst:850 +msgid "" +":func:`itertools.takewhile(predicate, iter) ` returns " +"elements for as long as the predicate returns true. Once the predicate " +"returns false, the iterator will signal the end of its results. ::" +msgstr "" +":func:`itertools.takewhile(predicate, iter) ` 返回一直让 " +"predicate 返回 true 的元素。一旦 predicate 返回 false,迭代器就会发出终止结果的信号。::" + +#: ../../howto/functional.rst:863 +msgid "" +":func:`itertools.dropwhile(predicate, iter) ` discards " +"elements while the predicate returns true, and then returns the rest of the " +"iterable's results. ::" +msgstr "" +":func:`itertools.dropwhile(predicate, iter) ` 在 " +"predicate 返回 true 的时候丢弃元素,并且返回可迭代对象的剩余结果。::" + +#: ../../howto/functional.rst:873 +msgid "" +":func:`itertools.compress(data, selectors) ` takes two " +"iterators and returns only those elements of *data* for which the " +"corresponding element of *selectors* is true, stopping whenever either one " +"is exhausted::" +msgstr "" +":func:`itertools.compress(data, selectors) ` " +"接受两个迭代器,然后返回 *data* 中使相应地 *selector* 中的元素为真的元素;它会在任一个迭代器耗尽的时候停止::" + +#: ../../howto/functional.rst:882 +msgid "Combinatoric functions" +msgstr "组合函数" + +#: ../../howto/functional.rst:884 +msgid "" +"The :func:`itertools.combinations(iterable, r) ` " +"returns an iterator giving all possible *r*-tuple combinations of the " +"elements contained in *iterable*. ::" +msgstr "" +":func:`itertools.combinations(iterable, r) ` " +"返回一个迭代器,它能给出输入迭代器中所包含的元素的所有可能的 *r* 元元组的组合。::" + +#: ../../howto/functional.rst:899 +msgid "" +"The elements within each tuple remain in the same order as *iterable* " +"returned them. For example, the number 1 is always before 2, 3, 4, or 5 in " +"the examples above. A similar function, " +":func:`itertools.permutations(iterable, r=None) `, " +"removes this constraint on the order, returning all possible arrangements of" +" length *r*::" +msgstr "" +"每个元组中的元素保持着 *可迭代对象* 返回他们的顺序。例如,在上面的例子中数字 1 总是会在 2, 3, 4 或 5 " +"前面。一个类似的函数,:func:`itertools.permutations(iterable, r=None) " +"`,取消了保持顺序的限制,返回所有可能的长度为 *r* 的排列::" + +#: ../../howto/functional.rst:918 +msgid "" +"If you don't supply a value for *r* the length of the iterable is used, " +"meaning that all the elements are permuted." +msgstr "如果你不提供 *r* 参数的值,它会使用可迭代对象的长度,也就是说会排列所有的元素。" + +#: ../../howto/functional.rst:921 +msgid "" +"Note that these functions produce all of the possible combinations by " +"position and don't require that the contents of *iterable* are unique::" +msgstr "注意这些函数会输出所有可能的位置组合,并不要求 *可迭代对象* 的内容不重复::" + +#: ../../howto/functional.rst:928 +msgid "" +"The identical tuple ``('a', 'a', 'b')`` occurs twice, but the two 'a' " +"strings came from different positions." +msgstr "同一个元组 ``('a', 'a', 'b')`` 出现了两次,但是两个 'a' 字符来自不同的位置。" + +#: ../../howto/functional.rst:931 +msgid "" +"The :func:`itertools.combinations_with_replacement(iterable, r) " +"` function relaxes a different " +"constraint: elements can be repeated within a single tuple. Conceptually an" +" element is selected for the first position of each tuple and then is " +"replaced before the second element is selected. ::" +msgstr "" +":func:`itertools.combinations_with_replacement(iterable, r) " +"` " +"函数放松了一个不同的限制:元组中的元素可以重复。从概念讲,为每个元组第一个位置选取一个元素,然后在选择第二个元素前替换掉它。::" + +#: ../../howto/functional.rst:946 +msgid "Grouping elements" +msgstr "为元素分组" + +#: ../../howto/functional.rst:948 +msgid "" +"The last function I'll discuss, :func:`itertools.groupby(iter, " +"key_func=None) `, is the most complicated. " +"``key_func(elem)`` is a function that can compute a key value for each " +"element returned by the iterable. If you don't supply a key function, the " +"key is simply each element itself." +msgstr "" +"我要讨论的最后一个函数,:func:`itertools.groupby(iter,key_func=None) " +"`,是最复杂的函数。 ``key_func(elem)`` 是一个可以对迭代器返回的每个元素计算键值的函数。 " +"如果你不提供这个键值函数,它就会简化成每个元素自身。" + +#: ../../howto/functional.rst:953 +msgid "" +":func:`~itertools.groupby` collects all the consecutive elements from the " +"underlying iterable that have the same key value, and returns a stream of " +"2-tuples containing a key value and an iterator for the elements with that " +"key." +msgstr "" +":func:`~itertools.groupby` 从所依据的可迭代对象中连续地收集具有相同值的元素,然后返回一个长度为2的元组的数据流, " +"每个元组包含键值以及对应这个键值的元素所组成的迭代器。" + +#: ../../howto/functional.rst:981 +msgid "" +":func:`~itertools.groupby` assumes that the underlying iterable's contents " +"will already be sorted based on the key. Note that the returned iterators " +"also use the underlying iterable, so you have to consume the results of " +"iterator-1 before requesting iterator-2 and its corresponding key." +msgstr "" +":func:`~itertools.groupby` " +"假定了所依据的可迭代对象的内容已经根据键值排序。注意,返回的迭代器也会使用所依据的可迭代对象,所以在请求迭代器 2和相应的键之前你必须先消耗迭代器 1 " +"的结果。" + +#: ../../howto/functional.rst:988 +msgid "The functools module" +msgstr "functools 模块" + +#: ../../howto/functional.rst:990 +msgid "" +"The :mod:`functools` module in Python 2.5 contains some higher-order " +"functions. A **higher-order function** takes one or more functions as input " +"and returns a new function. The most useful tool in this module is the " +":func:`functools.partial` function." +msgstr "" +"Python 2.5 中的 :mod:`functools` 模块包含了一些高阶函数。 **高阶函数** 接受一个或多个函数作为输入,返回新的函数。 " +"这个模块中最有用的工具是 :func:`functools.partial` 函数。" + +#: ../../howto/functional.rst:995 +msgid "" +"For programs written in a functional style, you'll sometimes want to " +"construct variants of existing functions that have some of the parameters " +"filled in. Consider a Python function ``f(a, b, c)``; you may wish to create" +" a new function ``g(b, c)`` that's equivalent to ``f(1, b, c)``; you're " +"filling in a value for one of ``f()``'s parameters. This is called " +"\"partial function application\"." +msgstr "" +"对于用函数式风格编写的程序,有时你会希望通过给定部分参数,将已有的函数构变形称新的函数。考虑一个 Python 函数 ``f(a, b, " +"c)``;你希望创建一个和 ``f(1, b, c)`` 等价的新函数 ``g(b, c)``;也就是说你给定了 ``f()`` " +"的一个参数的值。这就是所谓的“部分函数应用”。" + +#: ../../howto/functional.rst:1001 +msgid "" +"The constructor for :func:`~functools.partial` takes the arguments " +"``(function, arg1, arg2, ..., kwarg1=value1, kwarg2=value2)``. The " +"resulting object is callable, so you can just call it to invoke ``function``" +" with the filled-in arguments." +msgstr "" +":func:`~functools.partial` 接受参数 ``(function, arg1, arg2, ..., kwarg1=value1," +" kwarg2=value2)``。它会返回一个可调用的对象,所以你能够直接调用这个结果以使用给定参数的 ``function``。" + +#: ../../howto/functional.rst:1006 +msgid "Here's a small but realistic example::" +msgstr "这里有一个很小但很现实的例子::" + +#: ../../howto/functional.rst:1018 +msgid "" +":func:`functools.reduce(func, iter, [initial_value]) ` " +"cumulatively performs an operation on all the iterable's elements and, " +"therefore, can't be applied to infinite iterables. *func* must be a function" +" that takes two elements and returns a single value. " +":func:`functools.reduce` takes the first two elements A and B returned by " +"the iterator and calculates ``func(A, B)``. It then requests the third " +"element, C, calculates ``func(func(A, B), C)``, combines this result with " +"the fourth element returned, and continues until the iterable is exhausted." +" If the iterable returns no values at all, a :exc:`TypeError` exception is " +"raised. If the initial value is supplied, it's used as a starting point and" +" ``func(initial_value, A)`` is the first calculation. ::" +msgstr "" +":func:`functools.reduce(func, iter, [initial_value]) ` " +"持续地在可迭代对象的所有元素上执行操作,因此它不能够用在无限的可迭代对象上。*func* " +"必须是一个接受两个元素并返回一个值的函数。:func:`functools.reduce` 接受迭代器返回的前两个元素 A 和 B 并计算 " +"``func(A, B)`` 。然后它会请求第三个元素,C,计算 ``func(func(A, B), " +"C)``,然后把这个结果再和第四个元素组合并返回,如此继续下去直到消耗整个可迭代对象。如果输入的可迭代对象完全不返回任何值,:exc:`TypeError`" +" 异常就会抛出。如果提供了初值(initial value),它会被用作起始值,也就是先计算 ``func(initial_value, A)`` " +"。::" + +#: ../../howto/functional.rst:1042 +msgid "" +"If you use :func:`operator.add` with :func:`functools.reduce`, you'll add up" +" all the elements of the iterable. This case is so common that there's a " +"special built-in called :func:`sum` to compute it:" +msgstr "" +"如果你在 :func:`functools.reduce` 中使用 " +":func:`operator.add`,你就会把可迭代对象中的所有元素加起来.这种情况非常常见, 所以 Python 有一个特殊的内置函数 " +":func:`sum`:" + +#: ../../howto/functional.rst:1054 +msgid "" +"For many uses of :func:`functools.reduce`, though, it can be clearer to just" +" write the obvious :keyword:`for` loop::" +msgstr "" +"不过, 对于很多使用 :func:`functools.reduce` 的情形, 使用明显的 :keyword:`for` 循环会更清晰::" + +#: ../../howto/functional.rst:1066 +msgid "" +"A related function is :func:`itertools.accumulate(iterable, " +"func=operator.add) `. It performs the same " +"calculation, but instead of returning only the final result, " +":func:`accumulate` returns an iterator that also yields each partial " +"result::" +msgstr "" +"一个相关的函数是 :func:`itertools.accumulate(iterable, func=operator.add) " +"` 。它执行同样的计算, 不过相对于只返回最终结果,:func:`accumulate` " +"会返回一个迭代器来输出所有中间结果::" + +#: ../../howto/functional.rst:1079 +msgid "The operator module" +msgstr "operator 模块" + +#: ../../howto/functional.rst:1081 +msgid "" +"The :mod:`operator` module was mentioned earlier. It contains a set of " +"functions corresponding to Python's operators. These functions are often " +"useful in functional-style code because they save you from writing trivial " +"functions that perform a single operation." +msgstr "" +"前面已经提到了 :mod:`operator` 模块。它包含一系列对应于 Python " +"操作符的函数。在函数式风格的代码中,这些函数通常很有用,可以帮你省下不少时间,避免写一些琐碎的仅仅执行一个简单操作的函数。" + +#: ../../howto/functional.rst:1086 +msgid "Some of the functions in this module are:" +msgstr "这个模块里的一些函数:" + +#: ../../howto/functional.rst:1088 +msgid "" +"Math operations: ``add()``, ``sub()``, ``mul()``, ``floordiv()``, ``abs()``," +" ..." +msgstr "数学运算: ``add()``,``sub()``,``mul()``,``floordiv()``,``abs()``, ..." + +#: ../../howto/functional.rst:1089 +msgid "Logical operations: ``not_()``, ``truth()``." +msgstr "逻辑运算: ``not_()``,``truth()``。" + +#: ../../howto/functional.rst:1090 +msgid "Bitwise operations: ``and_()``, ``or_()``, ``invert()``." +msgstr "位运算: ``and_()``,``or_()``,``invert()``。" + +#: ../../howto/functional.rst:1091 +msgid "" +"Comparisons: ``eq()``, ``ne()``, ``lt()``, ``le()``, ``gt()``, and ``ge()``." +msgstr "比较: ``eq()``,``ne()``,``lt()``,``le()``,``gt()``,和 ``ge()``。" + +#: ../../howto/functional.rst:1092 +msgid "Object identity: ``is_()``, ``is_not()``." +msgstr "确认对象: ``is_()``,``is_not()``。" + +#: ../../howto/functional.rst:1094 +msgid "Consult the operator module's documentation for a complete list." +msgstr "全部函数列表可以参考 operator 模块的文档。" + +#: ../../howto/functional.rst:1098 +msgid "Small functions and the lambda expression" +msgstr "小函数和 lambda 表达式" + +#: ../../howto/functional.rst:1100 +msgid "" +"When writing functional-style programs, you'll often need little functions " +"that act as predicates or that combine elements in some way." +msgstr "编写函数式风格程序时,你会经常需要很小的函数,作为谓词函数或者以某种方式来组合元素。" + +#: ../../howto/functional.rst:1103 +msgid "" +"If there's a Python built-in or a module function that's suitable, you don't" +" need to define a new function at all::" +msgstr "如果合适的 Python 内置的或者其他模块中的函数,你就一点也不需要定义新的函数::" + +#: ../../howto/functional.rst:1109 +msgid "" +"If the function you need doesn't exist, you need to write it. One way to " +"write small functions is to use the :keyword:`lambda` expression. " +"``lambda`` takes a number of parameters and an expression combining these " +"parameters, and creates an anonymous function that returns the value of the " +"expression::" +msgstr "" +"如果不存在你需要的函数,你就必须自己编写。一个编写小函数的方式是使用 :keyword:`lambda` 表达式。``lambda`` " +"接受一组参数以及组合这些参数的表达式,它会创建一个返回表达式值的匿名函数::" + +#: ../../howto/functional.rst:1118 +msgid "" +"An alternative is to just use the ``def`` statement and define a function in" +" the usual way::" +msgstr "另一种替代方案就是通常的使用 ``def`` 语句来定义函数::" + +#: ../../howto/functional.rst:1127 +msgid "" +"Which alternative is preferable? That's a style question; my usual course " +"is to avoid using ``lambda``." +msgstr "哪一种更受青睐呢?这是一个风格问题;我通常的做法是避免使用 ``lambda``。" + +#: ../../howto/functional.rst:1130 +msgid "" +"One reason for my preference is that ``lambda`` is quite limited in the " +"functions it can define. The result has to be computable as a single " +"expression, which means you can't have multiway ``if... elif... else`` " +"comparisons or ``try... except`` statements. If you try to do too much in a" +" ``lambda`` statement, you'll end up with an overly complicated expression " +"that's hard to read. Quick, what's the following code doing? ::" +msgstr "" +"我这么偏好的一个原因是,``lambda`` 能够定义的函数非常受限。函数的结果必须能够作为单独的表达式来计算,这意味着你不能使用多路 ``if... " +"elif... else`` 比较,或者 ``try... except`` 语句。如果你尝试在 ``lambda`` " +"语句中做太多事情,你最终会把表达式过于复杂以至于难以阅读。你能快速的说出下面的代码做了什么事情吗?::" + +#: ../../howto/functional.rst:1140 +msgid "" +"You can figure it out, but it takes time to disentangle the expression to " +"figure out what's going on. Using a short nested ``def`` statements makes " +"things a little bit better::" +msgstr "你可以弄明白,不过要花上时间来理清表达式来搞清楚发生了什么。使用一个简短的嵌套的 ``def`` 语句可以让情况变得更好::" + +#: ../../howto/functional.rst:1150 +msgid "But it would be best of all if I had simply used a ``for`` loop::" +msgstr "如果我仅仅使用一个 ``for`` 循环会更好::" + +#: ../../howto/functional.rst:1156 +msgid "Or the :func:`sum` built-in and a generator expression::" +msgstr "或者使用内置的 :func:`sum` 和一个生成器表达式::" + +#: ../../howto/functional.rst:1160 +msgid "" +"Many uses of :func:`functools.reduce` are clearer when written as ``for`` " +"loops." +msgstr "许多使用 :func:`functools.reduce` 的情形可以更清晰地写成 ``for`` 循环的形式。" + +#: ../../howto/functional.rst:1162 +msgid "" +"Fredrik Lundh once suggested the following set of rules for refactoring uses" +" of ``lambda``:" +msgstr "Fredrik Lundh 曾经建议以下一组规则来重构 ``lambda`` 的使用:" + +#: ../../howto/functional.rst:1165 +msgid "Write a lambda function." +msgstr "写一个 lambda 函数。" + +#: ../../howto/functional.rst:1166 +msgid "Write a comment explaining what the heck that lambda does." +msgstr "写一句注释来说明这个 lambda 究竟干了什么。" + +#: ../../howto/functional.rst:1167 +msgid "" +"Study the comment for a while, and think of a name that captures the essence" +" of the comment." +msgstr "研究一会这个注释,然后想出一个抓住注释本质的名字。" + +#: ../../howto/functional.rst:1169 +msgid "Convert the lambda to a def statement, using that name." +msgstr "用这个名字,把这个 lambda 改写成 def 语句。" + +#: ../../howto/functional.rst:1170 +msgid "Remove the comment." +msgstr "把注释去掉。" + +#: ../../howto/functional.rst:1172 +msgid "" +"I really like these rules, but you're free to disagree about whether this " +"lambda-free style is better." +msgstr "我非常喜欢这些规则,不过你完全有权利争辩这种消除 lambda 的风格是不是更好。" + +#: ../../howto/functional.rst:1177 +msgid "Revision History and Acknowledgements" +msgstr "修订记录和致谢" + +#: ../../howto/functional.rst:1179 +msgid "" +"The author would like to thank the following people for offering " +"suggestions, corrections and assistance with various drafts of this article:" +" Ian Bicking, Nick Coghlan, Nick Efford, Raymond Hettinger, Jim Jewett, Mike" +" Krell, Leandro Lameiro, Jussi Salmela, Collin Winter, Blake Winton." +msgstr "" +"作者要感谢以下人员对本文各种草稿给予的建议,更正和协助:Ian Bicking,Nick Coghlan, Nick Efford, Raymond " +"Hettinger, Jim Jewett, Mike Krell,Leandro Lameiro, Jussi Salmela, Collin " +"Winter, Blake Winton。" + +#: ../../howto/functional.rst:1184 +msgid "Version 0.1: posted June 30 2006." +msgstr "0.1 版: 2006 年 6 月 30 日发布。" + +#: ../../howto/functional.rst:1186 +msgid "Version 0.11: posted July 1 2006. Typo fixes." +msgstr "0.11 版: 2006 年 7 月 1 日发布。 修正拼写错误。" + +#: ../../howto/functional.rst:1188 +msgid "" +"Version 0.2: posted July 10 2006. Merged genexp and listcomp sections into " +"one. Typo fixes." +msgstr "0.2 版: 2006 年 7 月 10 日发布。 将 genexp 与 listcomp 两节合二为一。 修正拼写错误。" + +#: ../../howto/functional.rst:1191 +msgid "" +"Version 0.21: Added more references suggested on the tutor mailing list." +msgstr "0.21 版: 加入了 tutor 邮件列表中建议的更多参考文件。" + +#: ../../howto/functional.rst:1193 +msgid "" +"Version 0.30: Adds a section on the ``functional`` module written by Collin " +"Winter; adds short section on the operator module; a few other edits." +msgstr "" +"0.30 版: 添加了有关 ``functional`` 模块的小节,由 Collin Winter 撰写;添加了有关 operator " +"模块的简短小节;其他少量修改。" + +#: ../../howto/functional.rst:1198 +msgid "References" +msgstr "引用文献" + +#: ../../howto/functional.rst:1201 +msgid "General" +msgstr "通用文献" + +#: ../../howto/functional.rst:1203 +msgid "" +"**Structure and Interpretation of Computer Programs**, by Harold Abelson and" +" Gerald Jay Sussman with Julie Sussman. Full text at " +"https://mitpress.mit.edu/sicp/. In this classic textbook of computer " +"science, chapters 2 and 3 discuss the use of sequences and streams to " +"organize the data flow inside a program. The book uses Scheme for its " +"examples, but many of the design approaches described in these chapters are " +"applicable to functional-style Python code." +msgstr "" +"**Structure and Interpretation of Computer Programs**, Harold Abelson, " +"Gerald Jay Sussman 和 Julie Sussman 著。全文可见 https://mitpress.mit.edu/sicp/ " +"。在这部计算机科学的经典教科书中,第二和第三章讨论了使用序列和流来组织程序内部的数据传递。书中的示例采用 Scheme " +"语言,但其中这些章节中描述的很多设计方法同样适用于函数式风格的 Python 代码。" + +#: ../../howto/functional.rst:1211 +msgid "" +"http://www.defmacro.org/ramblings/fp.html: A general introduction to " +"functional programming that uses Java examples and has a lengthy historical " +"introduction." +msgstr "" +"http://www.defmacro.org/ramblings/fp.html: 一个使用 Java 示例的函数式编程的总体介绍,有很长的历史说明。" + +#: ../../howto/functional.rst:1214 +msgid "" +"https://en.wikipedia.org/wiki/Functional_programming: General Wikipedia " +"entry describing functional programming." +msgstr "" +"https://en.wikipedia.org/wiki/Functional_programming: 一般性的函数式编程的 Wikipedia " +"条目。" + +#: ../../howto/functional.rst:1217 +msgid "https://en.wikipedia.org/wiki/Coroutine: Entry for coroutines." +msgstr "https://en.wikipedia.org/wiki/Coroutine: 协程条目。" + +#: ../../howto/functional.rst:1219 +msgid "" +"https://en.wikipedia.org/wiki/Currying: Entry for the concept of currying." +msgstr "https://en.wikipedia.org/wiki/Currying: 函数柯里化条目。" + +#: ../../howto/functional.rst:1222 +msgid "Python-specific" +msgstr "Python 相关" + +#: ../../howto/functional.rst:1224 +msgid "" +"http://gnosis.cx/TPiP/: The first chapter of David Mertz's book :title-" +"reference:`Text Processing in Python` discusses functional programming for " +"text processing, in the section titled \"Utilizing Higher-Order Functions in" +" Text Processing\"." +msgstr "" +"http://gnosis.cx/TPiP/:David Mertz 书中的第一章 :title-reference:`Text Processing " +"in Python`,\\\"Utilizing Higher-Order Functions in Text Processing\\\" " +"标题部分讨论了文本处理的函数式编程。" + +#: ../../howto/functional.rst:1229 +msgid "" +"Mertz also wrote a 3-part series of articles on functional programming for " +"IBM's DeveloperWorks site; see `part 1 " +"`__, `part 2 " +"`__, and `part 3 " +"`__," +msgstr "" +"Mertz 还在 IBM 的 DeveloperWorks 站点上针对函数式编程撰写了一系列共 3 篇文章;参见 `part 1 " +"`__, `part 2 " +"`__ 和 `part 3 " +"`__," + +#: ../../howto/functional.rst:1237 +msgid "Python documentation" +msgstr "Python 文档" + +#: ../../howto/functional.rst:1239 +msgid "Documentation for the :mod:`itertools` module." +msgstr ":mod:`itertools` 模块文档。" + +#: ../../howto/functional.rst:1241 +msgid "Documentation for the :mod:`functools` module." +msgstr ":mod:`functools` 模块文档。" + +#: ../../howto/functional.rst:1243 +msgid "Documentation for the :mod:`operator` module." +msgstr ":mod:`operator` 模块文档。" + +#: ../../howto/functional.rst:1245 +msgid ":pep:`289`: \"Generator Expressions\"" +msgstr ":pep:`289`: \"Generator Expressions\"" + +#: ../../howto/functional.rst:1247 +msgid "" +":pep:`342`: \"Coroutines via Enhanced Generators\" describes the new " +"generator features in Python 2.5." +msgstr "" +":pep:`342`: \"Coroutines via Enhanced Generators\" 描述了 Python 2.5 中新的生成器特性。" diff --git a/howto/index.po b/howto/index.po new file mode 100644 index 000000000..21a7c6dcf --- /dev/null +++ b/howto/index.po @@ -0,0 +1,38 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) 2001-2024, Python Software Foundation +# This file is distributed under the same license as the Python package. +# FIRST AUTHOR , YEAR. +# +# Translators: +# Rafael Fontenelle , 2024 +# +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: Python 3.9\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2024-05-11 20:32+0000\n" +"PO-Revision-Date: 2017-02-16 17:45+0000\n" +"Last-Translator: Rafael Fontenelle , 2024\n" +"Language-Team: Chinese (China) (https://app.transifex.com/python-doc/teams/5390/zh_CN/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: zh_CN\n" +"Plural-Forms: nplurals=1; plural=0;\n" + +#: ../../howto/index.rst:3 +msgid "Python HOWTOs" +msgstr "Python 指南" + +#: ../../howto/index.rst:5 +msgid "" +"Python HOWTOs are documents that cover a single, specific topic, and attempt" +" to cover it fairly completely. Modelled on the Linux Documentation " +"Project's HOWTO collection, this collection is an effort to foster " +"documentation that's more detailed than the Python Library Reference." +msgstr "就像 Linux 文档项目的指南合集一样,每篇文章尝试完全覆盖一个单独、特定的主题并提供比 Python 库参考更详细的指南。" + +#: ../../howto/index.rst:11 +msgid "Currently, the HOWTOs are:" +msgstr "目前已有的指南如下:" diff --git a/howto/instrumentation.po b/howto/instrumentation.po new file mode 100644 index 000000000..2db860979 --- /dev/null +++ b/howto/instrumentation.po @@ -0,0 +1,364 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) 2001-2022, Python Software Foundation +# This file is distributed under the same license as the Python package. +# FIRST AUTHOR , YEAR. +# +# Translators: +# Fred , 2018 +# telnetning , 2018 +# 非法操作 , 2019 +# dogn he , 2019 +# Alpha Du , 2020 +# Freesand Leo , 2020 +# +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: Python 3.9\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2022-11-04 14:34+0000\n" +"PO-Revision-Date: 2017-02-16 17:45+0000\n" +"Last-Translator: Freesand Leo , 2020\n" +"Language-Team: Chinese (China) (https://www.transifex.com/python-doc/teams/5390/zh_CN/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: zh_CN\n" +"Plural-Forms: nplurals=1; plural=0;\n" + +#: ../../howto/instrumentation.rst:7 +msgid "Instrumenting CPython with DTrace and SystemTap" +msgstr "使用 DTrace 和 SystemTap 检测CPython" + +#: ../../howto/instrumentation.rst:0 ../../howto/instrumentation.rst:0 +msgid "author" +msgstr "作者" + +#: ../../howto/instrumentation.rst:9 +msgid "David Malcolm" +msgstr "David Malcolm" + +#: ../../howto/instrumentation.rst:10 +msgid "Łukasz Langa" +msgstr "Łukasz Langa" + +#: ../../howto/instrumentation.rst:12 +msgid "" +"DTrace and SystemTap are monitoring tools, each providing a way to inspect " +"what the processes on a computer system are doing. They both use domain-" +"specific languages allowing a user to write scripts which:" +msgstr "" +"DTrace和SystemTap是监控工具,它们都提供了一种检查计算机系统上的进程的方法。 它们都使用特定领域的语言,允许用户编写脚本,其中:" + +#: ../../howto/instrumentation.rst:16 +msgid "filter which processes are to be observed" +msgstr "进程监视的过滤器" + +#: ../../howto/instrumentation.rst:17 +msgid "gather data from the processes of interest" +msgstr "从感兴趣的进程中收集数据" + +#: ../../howto/instrumentation.rst:18 +msgid "generate reports on the data" +msgstr "生成有关数据的报告" + +#: ../../howto/instrumentation.rst:20 +msgid "" +"As of Python 3.6, CPython can be built with embedded \"markers\", also known" +" as \"probes\", that can be observed by a DTrace or SystemTap script, making" +" it easier to monitor what the CPython processes on a system are doing." +msgstr "" +"从Python " +"3.6开始,CPython可以使用嵌入式“标记”构建,也称为“探测器”,可以通过DTrace或SystemTap脚本观察,从而更容易监视系统上的CPython进程正在做什么。" + +#: ../../howto/instrumentation.rst:27 +msgid "" +"DTrace markers are implementation details of the CPython interpreter. No " +"guarantees are made about probe compatibility between versions of CPython. " +"DTrace scripts can stop working or work incorrectly without warning when " +"changing CPython versions." +msgstr "" +"DTrace标记是CPython解释器的实现细节。 不保证CPython版本之间的探针兼容性。 " +"更改CPython版本时,DTrace脚本可能会停止工作或无法正常工作而不会发出警告。" + +#: ../../howto/instrumentation.rst:34 +msgid "Enabling the static markers" +msgstr "启用静态标记" + +#: ../../howto/instrumentation.rst:36 +msgid "" +"macOS comes with built-in support for DTrace. On Linux, in order to build " +"CPython with the embedded markers for SystemTap, the SystemTap development " +"tools must be installed." +msgstr "" +"macOS内置了对DTrace的支持。 在Linux上,为了使用SystemTap的嵌入式标记构建CPython,必须安装SystemTap开发工具。" + +#: ../../howto/instrumentation.rst:40 +msgid "On a Linux machine, this can be done via::" +msgstr "在Linux机器上,这可以通过:" + +#: ../../howto/instrumentation.rst:44 +msgid "or::" +msgstr "或者:" + +#: ../../howto/instrumentation.rst:49 +msgid "CPython must then be configured ``--with-dtrace``:" +msgstr "然后必须将CPython配置为``--with-dtrace``:" + +#: ../../howto/instrumentation.rst:55 +msgid "" +"On macOS, you can list available DTrace probes by running a Python process " +"in the background and listing all probes made available by the Python " +"provider::" +msgstr "在macOS上,您可以通过在后台运行Python进程列出可用的DTrace探测器,并列出Python程序提供的所有探测器:" + +#: ../../howto/instrumentation.rst:72 +msgid "" +"On Linux, you can verify if the SystemTap static markers are present in the " +"built binary by seeing if it contains a \".note.stapsdt\" section." +msgstr "在Linux上,您可以通过查看是否包含“.note.stapsdt”部分来验证构建的二进制文件中是否存在SystemTap静态标记。" + +#: ../../howto/instrumentation.rst:80 +msgid "" +"If you've built Python as a shared library (with --enable-shared), you need " +"to look instead within the shared library. For example::" +msgstr "如果您已将Python构建为共享库(使用--enable-shared),则需要在共享库中查找。 例如:" + +#: ../../howto/instrumentation.rst:86 +msgid "Sufficiently modern readelf can print the metadata::" +msgstr "足够现代的readelf命令可以打印元数据:" + +#: ../../howto/instrumentation.rst:123 +msgid "" +"The above metadata contains information for SystemTap describing how it can " +"patch strategically-placed machine code instructions to enable the tracing " +"hooks used by a SystemTap script." +msgstr "上述元数据包含SystemTap的信息,描述如何修补策略性放置的机器代码指令以启用SystemTap脚本使用的跟踪钩子。" + +#: ../../howto/instrumentation.rst:129 +msgid "Static DTrace probes" +msgstr "静态DTrace探针" + +#: ../../howto/instrumentation.rst:131 +msgid "" +"The following example DTrace script can be used to show the call/return " +"hierarchy of a Python script, only tracing within the invocation of a " +"function called \"start\". In other words, import-time function invocations " +"are not going to be listed:" +msgstr "" +"下面的 DTrace 脚本示例可以用来显示一个 Python 脚本的调用/返回层次结构,只在调用名为 \"start\" " +"的函数内进行跟踪。换句话说,导入时的函数调用不会被列出。" + +#: ../../howto/instrumentation.rst:170 ../../howto/instrumentation.rst:228 +msgid "It can be invoked like this::" +msgstr "它可以这样调用::" + +#: ../../howto/instrumentation.rst:174 ../../howto/instrumentation.rst:234 +msgid "The output looks like this:" +msgstr "输出结果会像这样:" + +#: ../../howto/instrumentation.rst:199 +msgid "Static SystemTap markers" +msgstr "静态SystemTap标记" + +#: ../../howto/instrumentation.rst:201 +msgid "" +"The low-level way to use the SystemTap integration is to use the static " +"markers directly. This requires you to explicitly state the binary file " +"containing them." +msgstr "使用 SystemTap 集成的底层方法是直接使用静态标记。 这需要你显式地说明包含它们的二进制文件。" + +#: ../../howto/instrumentation.rst:205 +msgid "" +"For example, this SystemTap script can be used to show the call/return " +"hierarchy of a Python script:" +msgstr "例如,这个SystemTap脚本可以用来显示Python脚本的调用/返回层次结构:" + +#: ../../howto/instrumentation.rst:245 +msgid "where the columns are:" +msgstr "其中的列是:" + +#: ../../howto/instrumentation.rst:247 +msgid "time in microseconds since start of script" +msgstr "脚本开始后经过的微秒数" + +#: ../../howto/instrumentation.rst:249 +msgid "name of executable" +msgstr "可执行文件的名字" + +#: ../../howto/instrumentation.rst:251 +msgid "PID of process" +msgstr "进程的PID" + +#: ../../howto/instrumentation.rst:253 +msgid "" +"and the remainder indicates the call/return hierarchy as the script " +"executes." +msgstr "其余部分则表示脚本执行时的调用/返回层次结构。" + +#: ../../howto/instrumentation.rst:255 +msgid "" +"For a `--enable-shared` build of CPython, the markers are contained within " +"the libpython shared library, and the probe's dotted path needs to reflect " +"this. For example, this line from the above example:" +msgstr "" +"对于 `--enable-shared` " +"构建的CPython来说,这些标记是包含在libpython共享库中的,探针的点状路径需要反映这一点。比如上面例子中的这一行:" + +#: ../../howto/instrumentation.rst:263 +msgid "should instead read:" +msgstr "应改为:" + +#: ../../howto/instrumentation.rst:269 +msgid "(assuming a debug build of CPython 3.6)" +msgstr "(假设是 CPython 3.6 的调试构建)" + +#: ../../howto/instrumentation.rst:273 +msgid "Available static markers" +msgstr "可用的静态标记" + +#: ../../howto/instrumentation.rst:277 +msgid "" +"This marker indicates that execution of a Python function has begun. It is " +"only triggered for pure-Python (bytecode) functions." +msgstr "这个标记表示一个Python函数的执行已经开始。它只对纯 Python (字节码)函数触发。" + +#: ../../howto/instrumentation.rst:280 +msgid "" +"The filename, function name, and line number are provided back to the " +"tracing script as positional arguments, which must be accessed using " +"``$arg1``, ``$arg2``, ``$arg3``:" +msgstr "文件名、函数名和行号作为位置参数提供给跟踪脚本,必须使用 ``$arg1``, ``$arg2``, ``$arg3`` 访问:" + +#: ../../howto/instrumentation.rst:284 +msgid "" +"``$arg1`` : ``(const char *)`` filename, accessible using " +"``user_string($arg1)``" +msgstr "``$arg1`` : ``(const char *)`` 文件名,使用 ``user_string($arg1)`` 访问" + +#: ../../howto/instrumentation.rst:286 +msgid "" +"``$arg2`` : ``(const char *)`` function name, accessible using " +"``user_string($arg2)``" +msgstr "``$arg2`` : ``(const char *)`` 函数名,使用 ``user_string($arg2)`` 访问" + +#: ../../howto/instrumentation.rst:289 +msgid "``$arg3`` : ``int`` line number" +msgstr "``$arg3`` : ``int`` 行号" + +#: ../../howto/instrumentation.rst:293 +msgid "" +"This marker is the converse of :c:func:`function__entry`, and indicates that" +" execution of a Python function has ended (either via ``return``, or via an " +"exception). It is only triggered for pure-Python (bytecode) functions." +msgstr "" +"这个标记与 :c:func:`function__entry` 相反,表示Python函数的执行已经结束 (通过 ``return`` 或者异常)。 " +"它只对纯Python (字节码) 函数触发。" + +#: ../../howto/instrumentation.rst:297 +msgid "The arguments are the same as for :c:func:`function__entry`" +msgstr "参数和 :c:func:`function__entry` 相同" + +#: ../../howto/instrumentation.rst:301 +msgid "" +"This marker indicates a Python line is about to be executed. It is the " +"equivalent of line-by-line tracing with a Python profiler. It is not " +"triggered within C functions." +msgstr "这个标记表示一个 Python 行即将被执行。它相当于用 Python 分析器逐行追踪。它不会在C函数中触发。" + +#: ../../howto/instrumentation.rst:305 +msgid "The arguments are the same as for :c:func:`function__entry`." +msgstr "参数和 :c:func:`function__entry` 相同" + +#: ../../howto/instrumentation.rst:309 +msgid "" +"Fires when the Python interpreter starts a garbage collection cycle. " +"``arg0`` is the generation to scan, like :func:`gc.collect()`." +msgstr "当Python解释器启动一个垃圾回收循环时被触发。 ``arg0`` 是要扫描的生成器,如 :func:`gc.collect()`。" + +#: ../../howto/instrumentation.rst:314 +msgid "" +"Fires when the Python interpreter finishes a garbage collection cycle. " +"``arg0`` is the number of collected objects." +msgstr "当Python解释器完成一个垃圾回收循环时被触发。``arg0`` 是收集到的对象的数量。" + +#: ../../howto/instrumentation.rst:319 +msgid "" +"Fires before :mod:`importlib` attempts to find and load the module. ``arg0``" +" is the module name." +msgstr "在 :mod:`importlib` 试图查找并加载模块之前被触发。``arg0`` 是模块名称。" + +#: ../../howto/instrumentation.rst:326 +msgid "" +"Fires after :mod:`importlib`'s find_and_load function is called. ``arg0`` is" +" the module name, ``arg1`` indicates if module was successfully loaded." +msgstr "" +"在 :mod:`importlib` 的 find_and_load 函数被调用后被触发。 ``arg0`` 是模块名称, ``arg1`` " +"表示模块是否成功加载。" + +#: ../../howto/instrumentation.rst:335 +msgid "" +"Fires when :func:`sys.audit` or :c:func:`PySys_Audit` is called. ``arg0`` is" +" the event name as C string, ``arg1`` is a :c:type:`PyObject` pointer to a " +"tuple object." +msgstr "" +"当 :func:`sys.audit` 或 :c:func:`PySys_Audit` 被调用时启动。 ``arg0`` 是事件名称的 C " +"字符串,``arg1`` 是一个指向元组对象的 :c:type:`PyObject` 指针。" + +#: ../../howto/instrumentation.rst:343 +msgid "SystemTap Tapsets" +msgstr "SystemTap Tapsets" + +#: ../../howto/instrumentation.rst:345 +msgid "" +"The higher-level way to use the SystemTap integration is to use a " +"\"tapset\": SystemTap's equivalent of a library, which hides some of the " +"lower-level details of the static markers." +msgstr "使用SystemTap集成的更高层次的方法是使用 \"tapset\" 。SystemTap 的等效库,它隐藏了静态标记的一些底层细节。" + +#: ../../howto/instrumentation.rst:349 +msgid "Here is a tapset file, based on a non-shared build of CPython:" +msgstr "这里是一个基于 CPython 的非共享构建的 tapset 文件。" + +#: ../../howto/instrumentation.rst:372 +msgid "" +"If this file is installed in SystemTap's tapset directory (e.g. " +"``/usr/share/systemtap/tapset``), then these additional probepoints become " +"available:" +msgstr "" +"如果这个文件安装在 SystemTap 的 tapset 目录下(例如``/usr/share/systemtap/tapset`` " +"),那么这些额外的探测点就会变得可用。" + +#: ../../howto/instrumentation.rst:378 +msgid "" +"This probe point indicates that execution of a Python function has begun. It" +" is only triggered for pure-Python (bytecode) functions." +msgstr "这个探针点表示一个Python函数的执行已经开始。它只对纯Python (字节码)函数触发。" + +#: ../../howto/instrumentation.rst:383 +msgid "" +"This probe point is the converse of ``python.function.return``, and " +"indicates that execution of a Python function has ended (either via " +"``return``, or via an exception). It is only triggered for pure-Python " +"(bytecode) functions." +msgstr "" +"这个探针点是 ``python.function.return`` 的反义操作,表示一个 Python 函数的执行已经结束(或是通过 " +"``return``,或是通过异常)。 它只会针对纯 Python(字节码)函数触发。" + +#: ../../howto/instrumentation.rst:390 +msgid "Examples" +msgstr "示例" + +#: ../../howto/instrumentation.rst:391 +msgid "" +"This SystemTap script uses the tapset above to more cleanly implement the " +"example given above of tracing the Python function-call hierarchy, without " +"needing to directly name the static markers:" +msgstr "这个SystemTap脚本使用上面的tapset来更清晰地实现上面给出的跟踪Python函数调用层次结构的例子,而不需要直接命名静态标记。" + +#: ../../howto/instrumentation.rst:410 +msgid "" +"The following script uses the tapset above to provide a top-like view of all" +" running CPython code, showing the top 20 most frequently-entered bytecode " +"frames, each second, across the whole system:" +msgstr "下面的脚本使用上面的tapset提供了所有运行中的CPython代码的顶部视图,显示了整个系统中每一秒钟最频繁输入的前20个字节码帧。" diff --git a/howto/ipaddress.po b/howto/ipaddress.po new file mode 100644 index 000000000..7c5da1b30 --- /dev/null +++ b/howto/ipaddress.po @@ -0,0 +1,351 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) 2001-2022, Python Software Foundation +# This file is distributed under the same license as the Python package. +# FIRST AUTHOR , YEAR. +# +# Translators: +# telnetning , 2018 +# Freesand Leo , 2019 +# Alpha Du , 2019 +# +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: Python 3.9\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2022-11-04 14:34+0000\n" +"PO-Revision-Date: 2017-02-16 17:45+0000\n" +"Last-Translator: Alpha Du , 2019\n" +"Language-Team: Chinese (China) (https://www.transifex.com/python-doc/teams/5390/zh_CN/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: zh_CN\n" +"Plural-Forms: nplurals=1; plural=0;\n" + +#: ../../howto/ipaddress.rst:9 +msgid "An introduction to the ipaddress module" +msgstr "ipaddress模块介绍" + +#: ../../howto/ipaddress.rst:0 ../../howto/ipaddress.rst:0 +msgid "author" +msgstr "作者" + +#: ../../howto/ipaddress.rst:11 +msgid "Peter Moody" +msgstr "Peter Moody" + +#: ../../howto/ipaddress.rst:12 +msgid "Nick Coghlan" +msgstr "Nick Coghlan" + +#: ../../howto/ipaddress.rstNone +msgid "Overview" +msgstr "概述" + +#: ../../howto/ipaddress.rst:16 +msgid "" +"This document aims to provide a gentle introduction to the :mod:`ipaddress` " +"module. It is aimed primarily at users that aren't already familiar with IP " +"networking terminology, but may also be useful to network engineers wanting " +"an overview of how :mod:`ipaddress` represents IP network addressing " +"concepts." +msgstr "" +"本文档旨在简要介绍 :mod:`ipaddress` 模块。 它主要针对那些不熟悉 IP 网络术语的用户,但也可能对想要速览 " +":mod:`ipaddress` 如何代表IP网络寻址概念的网络工程师有用。" + +#: ../../howto/ipaddress.rst:24 +msgid "Creating Address/Network/Interface objects" +msgstr "创建 Address/Network/Interface 对象" + +#: ../../howto/ipaddress.rst:26 +msgid "" +"Since :mod:`ipaddress` is a module for inspecting and manipulating IP " +"addresses, the first thing you'll want to do is create some objects. You " +"can use :mod:`ipaddress` to create objects from strings and integers." +msgstr "" +"因为 :mod:`ipaddress` 是一个用于检查和操作 IP 地址的模块,你要做的第一件事就是创建一些对象。 您可以使用 " +":mod:`ipaddress` 从字符串和整数创建对象。" + +#: ../../howto/ipaddress.rst:32 +msgid "A Note on IP Versions" +msgstr "关于IP版本的说明" + +#: ../../howto/ipaddress.rst:34 +msgid "" +"For readers that aren't particularly familiar with IP addressing, it's " +"important to know that the Internet Protocol is currently in the process of " +"moving from version 4 of the protocol to version 6. This transition is " +"occurring largely because version 4 of the protocol doesn't provide enough " +"addresses to handle the needs of the whole world, especially given the " +"increasing number of devices with direct connections to the internet." +msgstr "" +"对于不太熟悉 IP 寻址的读者,重要的是要知道 Internet " +"协议当前正在从协议的版本4转移到版本6。转换很大程度上是因为协议的版本4没有提供足够的地址来满足整个世界的需求,特别是考虑到越来越多的设备直接连接到互联网。" + +#: ../../howto/ipaddress.rst:41 +msgid "" +"Explaining the details of the differences between the two versions of the " +"protocol is beyond the scope of this introduction, but readers need to at " +"least be aware that these two versions exist, and it will sometimes be " +"necessary to force the use of one version or the other." +msgstr "解释协议的两个版本之间的差异的细节超出了本介绍的范围,但读者需要至少知道存在这两个版本,并且有时需要强制使用一个版本或其他版本。" + +#: ../../howto/ipaddress.rst:48 +msgid "IP Host Addresses" +msgstr "IP主机地址" + +#: ../../howto/ipaddress.rst:50 +msgid "" +"Addresses, often referred to as \"host addresses\" are the most basic unit " +"when working with IP addressing. The simplest way to create addresses is to " +"use the :func:`ipaddress.ip_address` factory function, which automatically " +"determines whether to create an IPv4 or IPv6 address based on the passed in " +"value:" +msgstr "" +"通常称为“主机地址”的地址是使用IP寻址时最基本的单元。 创建地址的最简单方法是使用 :func:`ipaddress.ip_address` " +"工厂函数,该函数根据传入的值自动确定是创建 IPv4 还是 IPv6 地址:" + +#: ../../howto/ipaddress.rst:61 +msgid "" +"Addresses can also be created directly from integers. Values that will fit " +"within 32 bits are assumed to be IPv4 addresses::" +msgstr "地址也可以直接从整数创建,适配32位的值并假定为IPv4地址::" + +#: ../../howto/ipaddress.rst:69 +msgid "" +"To force the use of IPv4 or IPv6 addresses, the relevant classes can be " +"invoked directly. This is particularly useful to force creation of IPv6 " +"addresses for small integers::" +msgstr "要强制使用IPv4或IPv6地址,可以直接调用相关的类。 这对于强制为小整数创建IPv6地址特别有用::" + +#: ../../howto/ipaddress.rst:82 +msgid "Defining Networks" +msgstr "定义网络" + +#: ../../howto/ipaddress.rst:84 +msgid "" +"Host addresses are usually grouped together into IP networks, so " +":mod:`ipaddress` provides a way to create, inspect and manipulate network " +"definitions. IP network objects are constructed from strings that define the" +" range of host addresses that are part of that network. The simplest form " +"for that information is a \"network address/network prefix\" pair, where the" +" prefix defines the number of leading bits that are compared to determine " +"whether or not an address is part of the network and the network address " +"defines the expected value of those bits." +msgstr "" +"主机地址通常组合在一起形成IP网络,因此 :mod:`ipaddress` 提供了一种创建、检查和操作网络定义的方法。 " +"IP网络对象由字符串构成,这些字符串定义作为该网络一部分的主机地址范围。 " +"该信息的最简单形式是“网络地址/网络前缀”对,其中前缀定义了比较的前导比特数,以确定地址是否是网络的一部分,并且网络地址定义了那些位的预期值。" + +#: ../../howto/ipaddress.rst:93 +msgid "" +"As for addresses, a factory function is provided that determines the correct" +" IP version automatically::" +msgstr "对于地址,提供了一个自动确定正确IP版本的工厂函数::" + +#: ../../howto/ipaddress.rst:101 +msgid "" +"Network objects cannot have any host bits set. The practical effect of this" +" is that ``192.0.2.1/24`` does not describe a network. Such definitions are" +" referred to as interface objects since the ip-on-a-network notation is " +"commonly used to describe network interfaces of a computer on a given " +"network and are described further in the next section." +msgstr "" +"网络对象不能设置任何主机位。 这样做的实际效果是``192.0.2.1/24``没有描述网络。 " +"这种定义被称为接口对象,因为网络上IP表示法通常用于描述给定网络上的计算机的网络接口,并在下一节中进一步描述。" + +#: ../../howto/ipaddress.rst:107 +msgid "" +"By default, attempting to create a network object with host bits set will " +"result in :exc:`ValueError` being raised. To request that the additional " +"bits instead be coerced to zero, the flag ``strict=False`` can be passed to " +"the constructor::" +msgstr "" +"默认情况下,尝试创建一个设置了主机位的网络对象将导致 :exc:`ValueError` 被引发。 " +"要请求将附加位强制为零,可以将标志``strict=False`` 传递给构造函数::" + +#: ../../howto/ipaddress.rst:119 +msgid "" +"While the string form offers significantly more flexibility, networks can " +"also be defined with integers, just like host addresses. In this case, the " +"network is considered to contain only the single address identified by the " +"integer, so the network prefix includes the entire network address::" +msgstr "" +"虽然字符串形式提供了更大的灵活性,但网络也可以用整数定义,就像主机地址一样。 " +"在这种情况下,网络被认为只包含由整数标识的单个地址,因此网络前缀包括整个网络地址::" + +#: ../../howto/ipaddress.rst:129 +msgid "" +"As with addresses, creation of a particular kind of network can be forced by" +" calling the class constructor directly instead of using the factory " +"function." +msgstr "与地址一样,可以通过直接调用类构造函数而不是使用工厂函数来强制创建特定类型的网络。" + +#: ../../howto/ipaddress.rst:135 +msgid "Host Interfaces" +msgstr "主机接口" + +#: ../../howto/ipaddress.rst:137 +msgid "" +"As mentioned just above, if you need to describe an address on a particular " +"network, neither the address nor the network classes are sufficient. " +"Notation like ``192.0.2.1/24`` is commonly used by network engineers and the" +" people who write tools for firewalls and routers as shorthand for \"the " +"host ``192.0.2.1`` on the network ``192.0.2.0/24``\", Accordingly, " +":mod:`ipaddress` provides a set of hybrid classes that associate an address " +"with a particular network. The interface for creation is identical to that " +"for defining network objects, except that the address portion isn't " +"constrained to being a network address." +msgstr "" +"如上所述,如果您需要描述特定网络上的地址,则地址和网络类都不够。 像 ``192.0.2.1/24`` " +"这样的表示法通常被网络工程师和为防火墙和路由器编写工具的人用作“ ``192.0.2.0/24`` 网络上的主机 ``192.0.2.1`` " +"”的简写。因此,:mod:`ipaddress` " +"提供了一组将地址与特定网络相关联的混合类。用于创建的接口与用于定义网络对象的接口相同,除了地址部分不限于是网络地址。" + +#: ../../howto/ipaddress.rst:152 +msgid "" +"Integer inputs are accepted (as with networks), and use of a particular IP " +"version can be forced by calling the relevant constructor directly." +msgstr "接受整数输入(与网络一样),并且可以通过直接调用相关构造函数来强制使用特定IP版本。" + +#: ../../howto/ipaddress.rst:157 +msgid "Inspecting Address/Network/Interface Objects" +msgstr "审查 Address/Network/Interface 对象" + +#: ../../howto/ipaddress.rst:159 +msgid "" +"You've gone to the trouble of creating an " +"IPv(4|6)(Address|Network|Interface) object, so you probably want to get " +"information about it. :mod:`ipaddress` tries to make doing this easy and " +"intuitive." +msgstr "" +"你已经遇到了创建IPv(4|6)(Address|Network|Interface) 对象的麻烦,因此你可能希望获得有关它的信息。 " +":mod:`ipaddress` 试图让这个过程变得简单直观。" + +#: ../../howto/ipaddress.rst:163 +msgid "Extracting the IP version::" +msgstr "提取 IP 版本::" + +#: ../../howto/ipaddress.rst:172 +msgid "Obtaining the network from an interface::" +msgstr "从接口获取网络::" + +#: ../../howto/ipaddress.rst:181 +msgid "Finding out how many individual addresses are in a network::" +msgstr "找出网络中有多少独立地址::" + +#: ../../howto/ipaddress.rst:190 +msgid "Iterating through the \"usable\" addresses on a network::" +msgstr "迭代网络上的“可用”地址::" + +#: ../../howto/ipaddress.rst:205 +msgid "" +"Obtaining the netmask (i.e. set bits corresponding to the network prefix) or" +" the hostmask (any bits that are not part of the netmask):" +msgstr "获取网络掩码(即对应于网络前缀的设置位)或主机掩码(不属于网络掩码的任何位):" + +#: ../../howto/ipaddress.rst:220 +msgid "Exploding or compressing the address::" +msgstr "展开或压缩地址::" + +#: ../../howto/ipaddress.rst:231 +msgid "" +"While IPv4 doesn't support explosion or compression, the associated objects " +"still provide the relevant properties so that version neutral code can " +"easily ensure the most concise or most verbose form is used for IPv6 " +"addresses while still correctly handling IPv4 addresses." +msgstr "" +"虽然IPv4不支持展开或压缩,但关联对象仍提供相关属性,因此版本中性代码可以轻松确保最简洁或最详细的形式用于IPv6地址,同时仍能正确处理IPv4地址。" + +#: ../../howto/ipaddress.rst:238 +msgid "Networks as lists of Addresses" +msgstr "Network 作为 Address 列表" + +#: ../../howto/ipaddress.rst:240 +msgid "" +"It's sometimes useful to treat networks as lists. This means it is possible" +" to index them like this::" +msgstr "将网络视为列表有时很有用。 这意味着它可以像这样索引它们::" + +#: ../../howto/ipaddress.rst:253 +msgid "" +"It also means that network objects lend themselves to using the list " +"membership test syntax like this::" +msgstr "它还意味着网络对象可以使用像这样的列表成员测试语法::" + +#: ../../howto/ipaddress.rst:259 +msgid "Containment testing is done efficiently based on the network prefix::" +msgstr "根据网络前缀有效地完成包含性测试::" + +#: ../../howto/ipaddress.rst:269 +msgid "Comparisons" +msgstr "比较" + +#: ../../howto/ipaddress.rst:271 +msgid "" +":mod:`ipaddress` provides some simple, hopefully intuitive ways to compare " +"objects, where it makes sense::" +msgstr ":mod:`ipaddress` 有意义地提供了一些简单、希望直观的比较对象的方法::" + +#: ../../howto/ipaddress.rst:277 +msgid "" +"A :exc:`TypeError` exception is raised if you try to compare objects of " +"different versions or different types." +msgstr "如果你尝试比较不同版本或不同类型的对象,则会引发 :exc:`TypeError` 异常。" + +#: ../../howto/ipaddress.rst:282 +msgid "Using IP Addresses with other modules" +msgstr "将IP地址与其他模块一起使用" + +#: ../../howto/ipaddress.rst:284 +msgid "" +"Other modules that use IP addresses (such as :mod:`socket`) usually won't " +"accept objects from this module directly. Instead, they must be coerced to " +"an integer or string that the other module will accept::" +msgstr "" +"其他使用IP地址的模块(例如 :mod:`socket` )通常不会直接接受来自该模块的对象。 " +"相反,它们必须被强制转换为另一个模块可接受的整数或字符串::" + +#: ../../howto/ipaddress.rst:296 +msgid "Getting more detail when instance creation fails" +msgstr "实例创建失败时获取更多详细信息" + +#: ../../howto/ipaddress.rst:298 +msgid "" +"When creating address/network/interface objects using the version-agnostic " +"factory functions, any errors will be reported as :exc:`ValueError` with a " +"generic error message that simply says the passed in value was not " +"recognized as an object of that type. The lack of a specific error is " +"because it's necessary to know whether the value is *supposed* to be IPv4 or" +" IPv6 in order to provide more detail on why it has been rejected." +msgstr "" +"使用与版本无关的工厂函数创建 address/network/interface 对象时,任何错误都将报告为 :exc:`ValueError` " +",带有一般错误消息,只是说传入的值未被识别为该类型的对象。 " +"缺少特定错误是因为有必要知道该值是*假设*是IPv4还是IPv6,以便提供有关其被拒绝原因的更多详细信息。" + +#: ../../howto/ipaddress.rst:305 +msgid "" +"To support use cases where it is useful to have access to this additional " +"detail, the individual class constructors actually raise the " +":exc:`ValueError` subclasses :exc:`ipaddress.AddressValueError` and " +":exc:`ipaddress.NetmaskValueError` to indicate exactly which part of the " +"definition failed to parse correctly." +msgstr "" +"为了支持访问这些额外细节的用例,各个类构造函数实际上引发了 :exc:`ValueError` 子类 " +":exc:`ipaddress.AddressValueError` 和 :exc:`ipaddress.NetmaskValueError` " +"以准确指示定义的哪一部分无法正确解析。" + +#: ../../howto/ipaddress.rst:311 +msgid "" +"The error messages are significantly more detailed when using the class " +"constructors directly. For example::" +msgstr "直接使用类构造函数时,错误消息更加详细。 例如::" + +#: ../../howto/ipaddress.rst:332 +msgid "" +"However, both of the module specific exceptions have :exc:`ValueError` as " +"their parent class, so if you're not concerned with the particular type of " +"error, you can still write code like the following::" +msgstr "" +"但是,两个模块特定的异常都有 :exc:`ValueError` 作为它们的父类,所以如果你不关心特定类型的错误,你仍然可以编写如下代码::" diff --git a/howto/logging-cookbook.po b/howto/logging-cookbook.po new file mode 100644 index 000000000..ff23d30ed --- /dev/null +++ b/howto/logging-cookbook.po @@ -0,0 +1,1969 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) 2001-2024, Python Software Foundation +# This file is distributed under the same license as the Python package. +# FIRST AUTHOR , YEAR. +# +# Translators: +# Fei Yin , 2018 +# 欢 王 , 2018 +# 非法操作 , 2019 +# 浩听 王 , 2019 +# Alpha Du , 2020 +# Dai Xu , 2021 +# WH-2099 , 2022 +# Rafael Fontenelle , 2024 +# Freesand Leo , 2024 +# +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: Python 3.9\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2024-04-26 21:29+0000\n" +"PO-Revision-Date: 2017-02-16 17:45+0000\n" +"Last-Translator: Freesand Leo , 2024\n" +"Language-Team: Chinese (China) (https://app.transifex.com/python-doc/teams/5390/zh_CN/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: zh_CN\n" +"Plural-Forms: nplurals=1; plural=0;\n" + +#: ../../howto/logging-cookbook.rst:5 +msgid "Logging Cookbook" +msgstr "日志专题手册" + +#: ../../howto/logging-cookbook.rst:0 +msgid "Author" +msgstr "作者" + +#: ../../howto/logging-cookbook.rst:7 +msgid "Vinay Sajip " +msgstr "Vinay Sajip " + +#: ../../howto/logging-cookbook.rst:9 +msgid "" +"This page contains a number of recipes related to logging, which have been " +"found useful in the past." +msgstr "本页包含了许多日志记录相关的概念,这些概念在过去一直被认为很有用。" + +#: ../../howto/logging-cookbook.rst:15 +msgid "Using logging in multiple modules" +msgstr "在多模块中使用日志" + +#: ../../howto/logging-cookbook.rst:17 +msgid "" +"Multiple calls to ``logging.getLogger('someLogger')`` return a reference to " +"the same logger object. This is true not only within the same module, but " +"also across modules as long as it is in the same Python interpreter process." +" It is true for references to the same object; additionally, application " +"code can define and configure a parent logger in one module and create (but " +"not configure) a child logger in a separate module, and all logger calls to " +"the child will pass up to the parent. Here is a main module::" +msgstr "" +"无论对 ``logging.getLogger('someLogger')`` 进行多少次调用,都会返回同一个 logger " +"对象的引用。不仅在同一个模块内如此,只要是在同一个 Python " +"解释器进程中,跨模块调用也是一样。同样是引用同一个对象,应用程序也可以在一个模块中定义和配置一个父 " +"logger,而在另一个单独的模块中创建(但不配置)子 logger,对于子 logger 的所有调用都会传给父 logger。以下是主模块:" + +#: ../../howto/logging-cookbook.rst:55 +msgid "Here is the auxiliary module::" +msgstr "以下是辅助模块:" + +#: ../../howto/logging-cookbook.rst:75 +msgid "The output looks like this:" +msgstr "输出结果会像这样:" + +#: ../../howto/logging-cookbook.rst:101 +msgid "Logging from multiple threads" +msgstr "在多个线程中记录日志" + +#: ../../howto/logging-cookbook.rst:103 +msgid "" +"Logging from multiple threads requires no special effort. The following " +"example shows logging from the main (initial) thread and another thread::" +msgstr "多线程记录日志并不需要特殊处理,以下示例演示了在主线程(起始线程)和其他线程中记录日志的过程:" + +#: ../../howto/logging-cookbook.rst:132 +msgid "When run, the script should print something like the following:" +msgstr "脚本会运行输出类似下面的内容:" + +#: ../../howto/logging-cookbook.rst:154 +msgid "" +"This shows the logging output interspersed as one might expect. This " +"approach works for more threads than shown here, of course." +msgstr "以上如期显示了不同线程的日志是交替输出的。当然更多的线程也会如此。" + +#: ../../howto/logging-cookbook.rst:158 +msgid "Multiple handlers and formatters" +msgstr "多个 handler 和多种 formatter" + +#: ../../howto/logging-cookbook.rst:160 +msgid "" +"Loggers are plain Python objects. The :meth:`~Logger.addHandler` method has" +" no minimum or maximum quota for the number of handlers you may add. " +"Sometimes it will be beneficial for an application to log all messages of " +"all severities to a text file while simultaneously logging errors or above " +"to the console. To set this up, simply configure the appropriate handlers." +" The logging calls in the application code will remain unchanged. Here is " +"a slight modification to the previous simple module-based configuration " +"example::" +msgstr "" +"日志是个普通的 Python 对象。 :meth:`~Logger.addHandler` 方法可加入不限数量的日志 " +"handler。有时候,应用程序需把严重错误信息记入文本文件,而将一般错误或其他级别的信息输出到控制台。若要进行这样的设定,只需多配置几个日志 " +"handler 即可,应用程序的日志调用代码可以保持不变。下面对之前的分模块日志示例略做修改:" + +#: ../../howto/logging-cookbook.rst:193 +msgid "" +"Notice that the 'application' code does not care about multiple handlers. " +"All that changed was the addition and configuration of a new handler named " +"*fh*." +msgstr "" +"需要注意的是,“应用程序”内的代码并不关心是否存在多个日志 handler。示例中所做的改变,只是新加入并配置了一个名为 *fh* 的 handler。" + +#: ../../howto/logging-cookbook.rst:196 +msgid "" +"The ability to create new handlers with higher- or lower-severity filters " +"can be very helpful when writing and testing an application. Instead of " +"using many ``print`` statements for debugging, use ``logger.debug``: Unlike " +"the print statements, which you will have to delete or comment out later, " +"the logger.debug statements can remain intact in the source code and remain " +"dormant until you need them again. At that time, the only change that needs" +" to happen is to modify the severity level of the logger and/or handler to " +"debug." +msgstr "" +"在编写和测试应用程序时,若能创建日志 handler 对不同严重级别的日志信息进行过滤,这将十分有用。调试时无需用多条 ``print`` " +"语句,而是采用 ``logger.debug`` :print 语句以后还得注释或删掉,而 logger.debug " +"语句可以原样留在源码中保持静默。当需要再次调试时,只要改变日志对象或 handler 的严重级别即可。" + +#: ../../howto/logging-cookbook.rst:207 +msgid "Logging to multiple destinations" +msgstr "在多个地方记录日志" + +#: ../../howto/logging-cookbook.rst:209 +msgid "" +"Let's say you want to log to console and file with different message formats" +" and in differing circumstances. Say you want to log messages with levels of" +" DEBUG and higher to file, and those messages at level INFO and higher to " +"the console. Let's also assume that the file should contain timestamps, but " +"the console messages should not. Here's how you can achieve this::" +msgstr "" +"假定要根据不同的情况将日志以不同的格式写入控制台和文件。比如把 DEBUG 以上级别的日志信息写于文件,并且把 INFO " +"以上的日志信息输出到控制台。再假设日志文件需要包含时间戳,控制台信息则不需要。以下演示了做法:" + +#: ../../howto/logging-cookbook.rst:247 +msgid "When you run this, on the console you will see" +msgstr "当运行后,你会看到控制台如下所示" + +#: ../../howto/logging-cookbook.rst:256 +msgid "and in the file you will see something like" +msgstr "而日志文件将如下所示:" + +#: ../../howto/logging-cookbook.rst:266 +msgid "" +"As you can see, the DEBUG message only shows up in the file. The other " +"messages are sent to both destinations." +msgstr "如您所见,DEBUG 级别的日志信息只出现在了文件中,而其他信息则两个地方都会输出。" + +#: ../../howto/logging-cookbook.rst:269 +msgid "" +"This example uses console and file handlers, but you can use any number and " +"combination of handlers you choose." +msgstr "上述示例只用到了控制台和文件 handler,当然还可以自由组合任意数量的日志 handler。" + +#: ../../howto/logging-cookbook.rst:274 +msgid "Configuration server example" +msgstr "日志配置服务器示例" + +#: ../../howto/logging-cookbook.rst:276 +msgid "" +"Here is an example of a module using the logging configuration server::" +msgstr "以下是一个用到了日志配置服务器的模块示例:" + +#: ../../howto/logging-cookbook.rst:307 +msgid "" +"And here is a script that takes a filename and sends that file to the " +"server, properly preceded with the binary-encoded length, as the new logging" +" configuration::" +msgstr "以下脚本将接受文件名作为参数,然后将此文件发送到服务器,前面加上文件的二进制编码长度,做为新的日志配置:" + +#: ../../howto/logging-cookbook.rst:330 +msgid "Dealing with handlers that block" +msgstr "处理日志 handler 的阻塞" + +#: ../../howto/logging-cookbook.rst:334 +msgid "" +"Sometimes you have to get your logging handlers to do their work without " +"blocking the thread you're logging from. This is common in Web applications," +" though of course it also occurs in other scenarios." +msgstr "有时需让日志 handler 不要阻塞当前的线程。这在 Web 应用程序中比较常见,当然在其他场景中也会发生。" + +#: ../../howto/logging-cookbook.rst:338 +msgid "" +"A common culprit which demonstrates sluggish behaviour is the " +":class:`SMTPHandler`: sending emails can take a long time, for a number of " +"reasons outside the developer's control (for example, a poorly performing " +"mail or network infrastructure). But almost any network-based handler can " +"block: Even a :class:`SocketHandler` operation may do a DNS query under the " +"hood which is too slow (and this query can be deep in the socket library " +"code, below the Python layer, and outside your control)." +msgstr "" +"有一种原因往往会让程序表现迟钝,这就是 " +":class:`SMTPHandler`:由于很多因素是开发人员无法控制的(例如邮件或网络基础设施的性能不佳),发送电子邮件可能需要很长时间。不过几乎所有网络" +" handler 都可能会发生阻塞:即使是 :class:`SocketHandler` 操作也可能在后台执行 DNS " +"查询,而这种查询实在太慢了(并且 DNS 查询还可能在很底层的套接字库代码中,位于 Python 层之下,超出了可控范围)。" + +#: ../../howto/logging-cookbook.rst:346 +msgid "" +"One solution is to use a two-part approach. For the first part, attach only " +"a :class:`QueueHandler` to those loggers which are accessed from " +"performance-critical threads. They simply write to their queue, which can be" +" sized to a large enough capacity or initialized with no upper bound to " +"their size. The write to the queue will typically be accepted quickly, " +"though you will probably need to catch the :exc:`queue.Full` exception as a " +"precaution in your code. If you are a library developer who has performance-" +"critical threads in their code, be sure to document this (together with a " +"suggestion to attach only ``QueueHandlers`` to your loggers) for the benefit" +" of other developers who will use your code." +msgstr "" +"有一种解决方案是分成两部分实现。第一部分,针对那些对性能有要求的关键线程,只为日志对象连接一个 " +":class:`QueueHandler`。日志对象只需简单地写入队列即可,可为队列设置足够大的容量,或者可以在初始化时不设置容量上限。尽管为以防万一,可能需要在代码中捕获" +" :exc:`queue.Full` " +"异常,不过队列写入操作通常会很快得以处理。如果要开发库代码,包含性能要求较高的线程,为了让使用该库的开发人员受益,请务必在开发文档中进行标明(包括建议仅连接" +" ``QueueHandlers`` )。" + +#: ../../howto/logging-cookbook.rst:357 +msgid "" +"The second part of the solution is :class:`QueueListener`, which has been " +"designed as the counterpart to :class:`QueueHandler`. A " +":class:`QueueListener` is very simple: it's passed a queue and some " +"handlers, and it fires up an internal thread which listens to its queue for " +"LogRecords sent from ``QueueHandlers`` (or any other source of " +"``LogRecords``, for that matter). The ``LogRecords`` are removed from the " +"queue and passed to the handlers for processing." +msgstr "" +"解决方案的另一部分就是 :class:`QueueListener`,它被设计为 :class:`QueueHandler` " +"的对应部分。:class:`QueueListener` 非常简单:传入一个队列和一些 handler,并启动一个内部线程,用于侦听 " +"``QueueHandlers`` (或其他 ``LogRecords`` 源)发送的 LogRecord 队列。``LogRecords`` " +"会从队列中移除并传给 handler 处理。" + +#: ../../howto/logging-cookbook.rst:365 +msgid "" +"The advantage of having a separate :class:`QueueListener` class is that you " +"can use the same instance to service multiple ``QueueHandlers``. This is " +"more resource-friendly than, say, having threaded versions of the existing " +"handler classes, which would eat up one thread per handler for no particular" +" benefit." +msgstr "" +":class:`QueueListener` 作为单独的类,好处就是可以用同一个实例为多个 ``QueueHandlers`` 服务。这比把现有 " +"handler 类线程化更加资源友好,后者会每个 handler 会占用一个线程,却没有特别的好处。" + +#: ../../howto/logging-cookbook.rst:370 +msgid "An example of using these two classes follows (imports omitted)::" +msgstr "以下是这两个类的运用示例(省略了 import 语句):" + +#: ../../howto/logging-cookbook.rst:388 +msgid "which, when run, will produce:" +msgstr "在运行后会产生:" + +#: ../../howto/logging-cookbook.rst:394 +msgid "" +"Prior to Python 3.5, the :class:`QueueListener` always passed every message " +"received from the queue to every handler it was initialized with. (This was " +"because it was assumed that level filtering was all done on the other side, " +"where the queue is filled.) From 3.5 onwards, this behaviour can be changed " +"by passing a keyword argument ``respect_handler_level=True`` to the " +"listener's constructor. When this is done, the listener compares the level " +"of each message with the handler's level, and only passes a message to a " +"handler if it's appropriate to do so." +msgstr "" +"在 Python 3.5 之前,:class:`QueueListener` " +"总会把由队列接收到的每条信息都传递给已初始化的每个处理程序。(因为这里假定级别过滤操作已在写入队列时完成了。)从 3.5 " +"版开始,可以修改这种处理方式,只要将关键字参数 ``respect_handler_level=True`` " +"传给侦听器的构造函数即可。这样侦听器将会把每条信息的级别与 handler 的级别进行比较,只在适配时才会将信息传给 handler 。" + +#: ../../howto/logging-cookbook.rst:407 +msgid "Sending and receiving logging events across a network" +msgstr "通过网络收发日志事件" + +#: ../../howto/logging-cookbook.rst:409 +msgid "" +"Let's say you want to send logging events across a network, and handle them " +"at the receiving end. A simple way of doing this is attaching a " +":class:`SocketHandler` instance to the root logger at the sending end::" +msgstr "" +"假定现在要通过网络发送日志事件,并在接收端进行处理。有一种简单的方案,就是在发送端的根日志对象连接一个 :class:`SocketHandler` " +"实例:" + +#: ../../howto/logging-cookbook.rst:437 +msgid "" +"At the receiving end, you can set up a receiver using the " +":mod:`socketserver` module. Here is a basic working example::" +msgstr "在接收端,可以用 :mod:`socketserver` 模块设置一个接收器。简要示例如下:" + +#: ../../howto/logging-cookbook.rst:525 +msgid "" +"First run the server, and then the client. On the client side, nothing is " +"printed on the console; on the server side, you should see something like:" +msgstr "先运行服务端,再运行客户端。客户端控制台不会显示什么信息;在服务端应该会看到如下内容:" + +#: ../../howto/logging-cookbook.rst:537 +msgid "" +"Note that there are some security issues with pickle in some scenarios. If " +"these affect you, you can use an alternative serialization scheme by " +"overriding the :meth:`~handlers.SocketHandler.makePickle` method and " +"implementing your alternative there, as well as adapting the above script to" +" use your alternative serialization." +msgstr "" +"请注意,某些时候 pickle 会存在一些安全问题。若有问题可换用自己的序列化方案,只要覆盖 " +":meth:`~handlers.SocketHandler.makePickle` 方法即可,并调整上述脚本以采用自己的序列化方案。" + +#: ../../howto/logging-cookbook.rst:545 +msgid "Running a logging socket listener in production" +msgstr "在生产中运行日志套接字侦听器" + +#: ../../howto/logging-cookbook.rst:547 +msgid "" +"To run a logging listener in production, you may need to use a process-" +"management tool such as `Supervisor `_. `Here " +"`_ is a " +"Gist which provides the bare-bones files to run the above functionality " +"using Supervisor: you will need to change the `/path/to/` parts in the Gist " +"to reflect the actual paths you want to use." +msgstr "" +"要在生产环境中运行日志记录监听器,你可能需要使用一个进程管理工具例如 `Supervisor `_。 " +"`这里 `_ " +"是一个提供使用 Supervisor 来运行上述功能的基本框架文件的 Gist:你将需要修改 Gist 中的 `/path/to/` " +"以反映你想要使用的实际路径。" + +#: ../../howto/logging-cookbook.rst:558 +msgid "Adding contextual information to your logging output" +msgstr "在自己的输出日志中添加上下文信息" + +#: ../../howto/logging-cookbook.rst:560 +msgid "" +"Sometimes you want logging output to contain contextual information in " +"addition to the parameters passed to the logging call. For example, in a " +"networked application, it may be desirable to log client-specific " +"information in the log (e.g. remote client's username, or IP address). " +"Although you could use the *extra* parameter to achieve this, it's not " +"always convenient to pass the information in this way. While it might be " +"tempting to create :class:`Logger` instances on a per-connection basis, this" +" is not a good idea because these instances are not garbage collected. While" +" this is not a problem in practice, when the number of :class:`Logger` " +"instances is dependent on the level of granularity you want to use in " +"logging an application, it could be hard to manage if the number of " +":class:`Logger` instances becomes effectively unbounded." +msgstr "" +"有时,除了调用日志对象时传入的参数之外,还希望日志输出中能包含上下文信息。 " +"比如在网络应用程序中,可能需要在日志中记录某客户端的信息(如远程客户端的用户名或 IP 地址)。 这虽然可以用 *extra* " +"参数实现,但传递起来并不总是很方便。 虽然为每个网络连接都创建 :class:`Logger` " +"实例貌似不错,但并不是个好主意,因为这些实例不会被垃圾回收。 虽然在实践中不是问题,但当 :class:`Logger` " +"实例的数量取决于应用程序要采用的日志粒度时,如果 :class:`Logger` 实例的数量实际上是无限的,则有可能难以管理。" + +#: ../../howto/logging-cookbook.rst:575 +msgid "Using LoggerAdapters to impart contextual information" +msgstr "利用 LoggerAdapter 传递上下文信息" + +#: ../../howto/logging-cookbook.rst:577 +msgid "" +"An easy way in which you can pass contextual information to be output along " +"with logging event information is to use the :class:`LoggerAdapter` class. " +"This class is designed to look like a :class:`Logger`, so that you can call " +":meth:`debug`, :meth:`info`, :meth:`warning`, :meth:`error`, " +":meth:`exception`, :meth:`critical` and :meth:`log`. These methods have the " +"same signatures as their counterparts in :class:`Logger`, so you can use the" +" two types of instances interchangeably." +msgstr "" +"要传递上下文信息和日志事件信息,有一种简单方案是利用 :class:`LoggerAdapter` 类。这个类设计得类似 " +":class:`Logger`,所以可以直接调用 :meth:`debug`、:meth:`info`、 :meth:`warning`、 " +":meth:`error`、:meth:`exception`、 :meth:`critical` 和 :meth:`log`。这些方法的签名与 " +":class:`Logger` 对应的方法相同,所以这两类实例可以交换使用。" + +#: ../../howto/logging-cookbook.rst:585 +msgid "" +"When you create an instance of :class:`LoggerAdapter`, you pass it a " +":class:`Logger` instance and a dict-like object which contains your " +"contextual information. When you call one of the logging methods on an " +"instance of :class:`LoggerAdapter`, it delegates the call to the underlying " +"instance of :class:`Logger` passed to its constructor, and arranges to pass " +"the contextual information in the delegated call. Here's a snippet from the " +"code of :class:`LoggerAdapter`::" +msgstr "" +"当你创建一个 :class:`LoggerAdapter` 的实例时,你会传入一个 :class:`Logger` " +"的实例和一个包含了上下文信息的字典对象。当你调用一个 :class:`LoggerAdapter` 实例的方法时,它会把调用委托给内部的 " +":class:`Logger` 的实例,并为其整理相关的上下文信息。这是 :class:`LoggerAdapter` 的一个代码片段::" + +#: ../../howto/logging-cookbook.rst:601 +msgid "" +"The :meth:`~LoggerAdapter.process` method of :class:`LoggerAdapter` is where" +" the contextual information is added to the logging output. It's passed the " +"message and keyword arguments of the logging call, and it passes back " +"(potentially) modified versions of these to use in the call to the " +"underlying logger. The default implementation of this method leaves the " +"message alone, but inserts an 'extra' key in the keyword argument whose " +"value is the dict-like object passed to the constructor. Of course, if you " +"had passed an 'extra' keyword argument in the call to the adapter, it will " +"be silently overwritten." +msgstr "" +":class:`LoggerAdapter` 的 :meth:`~LoggerAdapter.process` 方法是将上下文信息添加到日志的输出中。 " +"它传入日志消息和日志调用的关键字参数,并传回(隐式的)这些修改后的内容去调用底层的日志记录器。此方法的默认参数只是一个消息字段,但留有一个 " +"'extra' 的字段作为关键字参数传给构造器。当然,如果你在调用适配器时传入了一个 'extra' 字段的参数,它会被静默覆盖。" + +#: ../../howto/logging-cookbook.rst:610 +msgid "" +"The advantage of using 'extra' is that the values in the dict-like object " +"are merged into the :class:`LogRecord` instance's __dict__, allowing you to " +"use customized strings with your :class:`Formatter` instances which know " +"about the keys of the dict-like object. If you need a different method, e.g." +" if you want to prepend or append the contextual information to the message " +"string, you just need to subclass :class:`LoggerAdapter` and override " +":meth:`~LoggerAdapter.process` to do what you need. Here is a simple " +"example::" +msgstr "" +"使用 'extra' 的优点是这些键值对会被传入 :class:`LogRecord` 实例的 __dict__ 中,让你通过 " +":class:`Formatter` 的实例直接使用定制的字符串,实例能找到这个字典类对象的键。 " +"如果你需要一个其他的方法,比如说,想要在消息字符串前后增加上下文信息,你只需要创建一个 :class:`LoggerAdapter` 的子类,并覆盖它的" +" :meth:`~LoggerAdapter.process` 方法来做你想做的事情,以下是一个简单的示例::" + +#: ../../howto/logging-cookbook.rst:626 +msgid "which you can use like this::" +msgstr "你可以这样使用::" + +#: ../../howto/logging-cookbook.rst:631 +msgid "" +"Then any events that you log to the adapter will have the value of " +"``some_conn_id`` prepended to the log messages." +msgstr "然后,你记录在适配器中的任何事件消息前将添加 ``some_conn_id`` 的值。" + +#: ../../howto/logging-cookbook.rst:635 +msgid "Using objects other than dicts to pass contextual information" +msgstr "使用除字典之外的其它对象传递上下文信息" + +#: ../../howto/logging-cookbook.rst:637 +msgid "" +"You don't need to pass an actual dict to a :class:`LoggerAdapter` - you " +"could pass an instance of a class which implements ``__getitem__`` and " +"``__iter__`` so that it looks like a dict to logging. This would be useful " +"if you want to generate values dynamically (whereas the values in a dict " +"would be constant)." +msgstr "" +"你不需要将一个实际的字典传递给 :class:`LoggerAdapter`-你可以传入一个实现了 ``__getitem__`` 和 " +"``__iter__`` 的类的实例,这样它就像是一个字典。这对于你想动态生成值(而字典中的值往往是常量)将很有帮助。" + +#: ../../howto/logging-cookbook.rst:646 +msgid "Using Filters to impart contextual information" +msgstr "使用过滤器传递上下文信息" + +#: ../../howto/logging-cookbook.rst:648 +msgid "" +"You can also add contextual information to log output using a user-defined " +":class:`Filter`. ``Filter`` instances are allowed to modify the " +"``LogRecords`` passed to them, including adding additional attributes which " +"can then be output using a suitable format string, or if needed a custom " +":class:`Formatter`." +msgstr "" +"你也可以使用一个用户定义的类 :class:`Filter` 在日志输出中添加上下文信息。``Filter`` 的实例是被允许修改传入的 " +"``LogRecords``,包括添加其他的属性,然后可以使用合适的格式化字符串输出,或者可以使用一个自定义的类 :class:`Formatter`。" + +#: ../../howto/logging-cookbook.rst:653 +msgid "" +"For example in a web application, the request being processed (or at least, " +"the interesting parts of it) can be stored in a threadlocal " +"(:class:`threading.local`) variable, and then accessed from a ``Filter`` to " +"add, say, information from the request - say, the remote IP address and " +"remote user's username - to the ``LogRecord``, using the attribute names " +"'ip' and 'user' as in the ``LoggerAdapter`` example above. In that case, the" +" same format string can be used to get similar output to that shown above. " +"Here's an example script::" +msgstr "" +"例如,在一个web应用程序中,正在处理的请求(或者至少是请求的一部分),可以存储在一个线程本地 (:class:`threading.local`) " +"变量中,然后从 ``Filter`` 中去访问。请求中的信息,如IP地址和用户名将被存储在 ``LogRecord`` 中,使用上例 " +"``LoggerAdapter`` 中的 'ip' 和 'user' " +"属性名。在这种情况下,可以使用相同的格式化字符串来得到上例中类似的输出结果。这是一段示例代码::" + +#: ../../howto/logging-cookbook.rst:699 +msgid "which, when run, produces something like:" +msgstr "在运行时,产生如下内容:" + +#: ../../howto/logging-cookbook.rst:720 +msgid "Logging to a single file from multiple processes" +msgstr "从多个进程记录至单个文件" + +#: ../../howto/logging-cookbook.rst:722 +msgid "" +"Although logging is thread-safe, and logging to a single file from multiple " +"threads in a single process *is* supported, logging to a single file from " +"*multiple processes* is *not* supported, because there is no standard way to" +" serialize access to a single file across multiple processes in Python. If " +"you need to log to a single file from multiple processes, one way of doing " +"this is to have all the processes log to a :class:`~handlers.SocketHandler`," +" and have a separate process which implements a socket server which reads " +"from the socket and logs to file. (If you prefer, you can dedicate one " +"thread in one of the existing processes to perform this function.) " +":ref:`This section ` documents this approach in more detail" +" and includes a working socket receiver which can be used as a starting " +"point for you to adapt in your own applications." +msgstr "" +"尽管 logging 是线程安全的,将单个进程中的多个线程日志记录至单个文件也 *是* 受支持的,但将 *多个进程* 中的日志记录至单个文件则 *不是*" +" 受支持的,因为在 Python 中并没有在多个进程中实现对单个文件访问的序列化的标准方案。 " +"如果你需要将多个进程中的日志记录至单个文件,有一个方案是让所有进程都将日志记录至一个 " +":class:`~handlers.SocketHandler`,然后用一个实现了套接字服务器的单独进程一边从套接字中读取一边将日志记录至文件。 " +"(如果愿意的话,你可以在一个现有进程中专门开一个线程来执行此项功能。) :ref:`这一部分 ` " +"文档对此方式有更详细的介绍,并包含一个可用的套接字接收器,你自己的应用可以在此基础上进行适配。" + +#: ../../howto/logging-cookbook.rst:735 +msgid "" +"You could also write your own handler which uses the " +":class:`~multiprocessing.Lock` class from the :mod:`multiprocessing` module " +"to serialize access to the file from your processes. The existing " +":class:`FileHandler` and subclasses do not make use of " +":mod:`multiprocessing` at present, though they may do so in the future. Note" +" that at present, the :mod:`multiprocessing` module does not provide working" +" lock functionality on all platforms (see " +"https://bugs.python.org/issue3770)." +msgstr "" +"你也可以编写你自己的处理程序,让其使用 :mod:`multiprocessing` 模块中的 " +":class:`~multiprocessing.Lock` 类来顺序访问你的多个进程中的文件。 现有的 :class:`FileHandler` " +"及其子类目前并不使用 :mod:`multiprocessing`,尽管它们将来可能会这样做。 " +"请注意在目前,:mod:`multiprocessing` 模块并未在所有平台上都提供可用的锁功能 (参见 " +"https://bugs.python.org/issue3770)。" + +#: ../../howto/logging-cookbook.rst:745 +msgid "" +"Alternatively, you can use a ``Queue`` and a :class:`QueueHandler` to send " +"all logging events to one of the processes in your multi-process " +"application. The following example script demonstrates how you can do this; " +"in the example a separate listener process listens for events sent by other " +"processes and logs them according to its own logging configuration. Although" +" the example only demonstrates one way of doing it (for example, you may " +"want to use a listener thread rather than a separate listener process -- the" +" implementation would be analogous) it does allow for completely different " +"logging configurations for the listener and the other processes in your " +"application, and can be used as the basis for code meeting your own specific" +" requirements::" +msgstr "" +"或者,你也可以使用 ``Queue`` 和 :class:`QueueHandler` 将所有的日志事件发送至你的多进程应用的一个进程中。 " +"以下示例脚本演示了如何执行此操作。 在示例中,一个单独的监听进程负责监听其他进程的日志事件,并根据自己的配置记录。 " +"尽管示例只演示了这种方法(例如你可能希望使用单独的监听线程而非监听进程 —— " +"它们的实现是类似的),但你也可以在应用程序的监听进程和其他进程使用不同的配置,它可以作为满足你特定需求的一个基础::" + +#: ../../howto/logging-cookbook.rst:861 +msgid "" +"A variant of the above script keeps the logging in the main process, in a " +"separate thread::" +msgstr "上面脚本的一个变种,仍然在主进程中记录日志,但使用一个单独的线程::" + +#: ../../howto/logging-cookbook.rst:956 +msgid "" +"This variant shows how you can e.g. apply configuration for particular " +"loggers - e.g. the ``foo`` logger has a special handler which stores all " +"events in the ``foo`` subsystem in a file ``mplog-foo.log``. This will be " +"used by the logging machinery in the main process (even though the logging " +"events are generated in the worker processes) to direct the messages to the " +"appropriate destinations." +msgstr "" +"这段变种的代码展示了如何使用特定的日志记录配置 - 例如 ``foo`` 记录器使用了特殊的处理程序,将 ``foo`` " +"子系统中所有的事件记录至一个文件 ``mplog-foo.log`` " +"。在主进程(即使是在工作进程中产生的日志事件)的日志记录机制中将直接使用恰当的配置。" + +#: ../../howto/logging-cookbook.rst:963 +msgid "Using concurrent.futures.ProcessPoolExecutor" +msgstr "concurrent.futures.ProcessPoolExecutor 的用法" + +#: ../../howto/logging-cookbook.rst:965 +msgid "" +"If you want to use :class:`concurrent.futures.ProcessPoolExecutor` to start " +"your worker processes, you need to create the queue slightly differently. " +"Instead of" +msgstr "" +"若要利用 :class:`concurrent.futures.ProcessPoolExecutor` " +"启动工作进程,创建队列的方式应稍有不同。不能是:" + +#: ../../howto/logging-cookbook.rst:973 +msgid "you should use" +msgstr "而应是:" + +#: ../../howto/logging-cookbook.rst:979 +msgid "and you can then replace the worker creation from this::" +msgstr "然后就可以将以下工作进程的创建过程:" + +#: ../../howto/logging-cookbook.rst:990 +msgid "to this (remembering to first import :mod:`concurrent.futures`)::" +msgstr "改为 (记得要先导入 :mod:`concurrent.futures`)::" + +#: ../../howto/logging-cookbook.rst:997 +msgid "Deploying Web applications using Gunicorn and uWSGI" +msgstr "使用 Gunicorn 和 uWSGI 来部署 Web 应用程序" + +#: ../../howto/logging-cookbook.rst:999 +msgid "" +"When deploying Web applications using `Gunicorn `_ or" +" `uWSGI `_ (or similar), " +"multiple worker processes are created to handle client requests. In such " +"environments, avoid creating file-based handlers directly in your web " +"application. Instead, use a :class:`SocketHandler` to log from the web " +"application to a listener in a separate process. This can be set up using a " +"process management tool such as Supervisor - see `Running a logging socket " +"listener in production`_ for more details." +msgstr "" +"当使用 `Gunicorn `_ 或 `uWSGI `_ (或其他类似工具) 来部署 Web 应用时,会创建多个工作进程来处理客户端请求。 " +"在这种环境下,要避免在你的 Web 应用中直接创建基于文件的处理器。 而应改为使用一个 :class:`SocketHandler` 将来自 Web " +"应用的日志发送到在单独进程中运行的监听器。 这可以通过使用一个进程管理工具例如 Supervisor 来进行设置 —— 请参阅 `Running a " +"logging socket listener in production`_ 了解详情。" + +#: ../../howto/logging-cookbook.rst:1009 +msgid "Using file rotation" +msgstr "轮换日志文件" + +#: ../../howto/logging-cookbook.rst:1014 +msgid "" +"Sometimes you want to let a log file grow to a certain size, then open a new" +" file and log to that. You may want to keep a certain number of these files," +" and when that many files have been created, rotate the files so that the " +"number of files and the size of the files both remain bounded. For this " +"usage pattern, the logging package provides a " +":class:`~handlers.RotatingFileHandler`::" +msgstr "" +"有时,你希望当日志文件不断记录增长至一定大小时,打开一个新的文件接着记录。 " +"你可能希望只保留一定数量的日志文件,当不断的创建文件到达该数量时,又覆盖掉最开始的文件形成循环。 对于这种使用场景,日志包提供了 " +":class:`~handlers.RotatingFileHandler`::" + +#: ../../howto/logging-cookbook.rst:1046 +msgid "" +"The result should be 6 separate files, each with part of the log history for" +" the application:" +msgstr "结果应该是6个单独的文件,每个文件都包含了应用程序的部分历史日志:" + +#: ../../howto/logging-cookbook.rst:1058 +msgid "" +"The most current file is always :file:`logging_rotatingfile_example.out`, " +"and each time it reaches the size limit it is renamed with the suffix " +"``.1``. Each of the existing backup files is renamed to increment the suffix" +" (``.1`` becomes ``.2``, etc.) and the ``.6`` file is erased." +msgstr "" +"最新的文件始终是 :file:`logging_rotatingfile_example.out`,每次到达大小限制时,都会使用后缀 ``.1`` " +"重命名。每个现有的备份文件都会被重命名并增加其后缀(例如 ``.1`` 变为 ``.2`` ),而 ``.6`` 文件会被删除掉。" + +#: ../../howto/logging-cookbook.rst:1063 +msgid "" +"Obviously this example sets the log length much too small as an extreme " +"example. You would want to set *maxBytes* to an appropriate value." +msgstr "显然,这个例子将日志长度设置得太小,这是一个极端的例子。 你可能希望将 *maxBytes* 设置为一个合适的值。" + +#: ../../howto/logging-cookbook.rst:1069 +msgid "Use of alternative formatting styles" +msgstr "使用其他日志格式化方式" + +#: ../../howto/logging-cookbook.rst:1071 +msgid "" +"When logging was added to the Python standard library, the only way of " +"formatting messages with variable content was to use the %-formatting " +"method. Since then, Python has gained two new formatting approaches: " +":class:`string.Template` (added in Python 2.4) and :meth:`str.format` (added" +" in Python 2.6)." +msgstr "" +"当日志模块被添加至 Python 标准库时,只有一种格式化消息内容的方法即 %-formatting。 在那之后,Python 又增加了两种格式化方法:" +" :class:`string.Template` (在 Python 2.4 中新增) 和 :meth:`str.format` (在 Python " +"2.6 中新增)。" + +#: ../../howto/logging-cookbook.rst:1077 +msgid "" +"Logging (as of 3.2) provides improved support for these two additional " +"formatting styles. The :class:`Formatter` class been enhanced to take an " +"additional, optional keyword parameter named ``style``. This defaults to " +"``'%'``, but other possible values are ``'{'`` and ``'$'``, which correspond" +" to the other two formatting styles. Backwards compatibility is maintained " +"by default (as you would expect), but by explicitly specifying a style " +"parameter, you get the ability to specify format strings which work with " +":meth:`str.format` or :class:`string.Template`. Here's an example console " +"session to show the possibilities:" +msgstr "" +"日志(从 3.2 开始)为这两种格式化方式提供了更多支持。:class:`Formatter` 类可以添加一个额外的可选关键字参数 " +"``style``。它的默认值是 ``'%'``,其他的值 ``'{'`` 和 ``'$'`` " +"也支持,对应了其他两种格式化样式。其保持了向后兼容(如您所愿),但通过显示指定样式参数,你可以指定格式化字符串的方式是使用 " +":meth:`str.format` 或 :class:`string.Template`。 这里是一个控制台会话的示例,展示了这些方式:" + +#: ../../howto/logging-cookbook.rst:1111 +msgid "" +"Note that the formatting of logging messages for final output to logs is " +"completely independent of how an individual logging message is constructed. " +"That can still use %-formatting, as shown here::" +msgstr "请注意最终输出到日志的消息格式完全独立于单条日志消息的构造方式。 它仍然可以使用 %-formatting,如下所示::" + +#: ../../howto/logging-cookbook.rst:1119 +msgid "" +"Logging calls (``logger.debug()``, ``logger.info()`` etc.) only take " +"positional parameters for the actual logging message itself, with keyword " +"parameters used only for determining options for how to handle the actual " +"logging call (e.g. the ``exc_info`` keyword parameter to indicate that " +"traceback information should be logged, or the ``extra`` keyword parameter " +"to indicate additional contextual information to be added to the log). So " +"you cannot directly make logging calls using :meth:`str.format` or " +":class:`string.Template` syntax, because internally the logging package uses" +" %-formatting to merge the format string and the variable arguments. There " +"would be no changing this while preserving backward compatibility, since all" +" logging calls which are out there in existing code will be using %-format " +"strings." +msgstr "" +"日志调用(``logger.debug()`` 、``logger.info()`` " +"等)接受的位置参数只会用于日志信息本身,而关键字参数仅用于日志调用的可选处理参数(如关键字参数 ``exc_info`` 表示应记录跟踪信息, " +"``extra`` 则标识了需要加入日志的额外上下文信息)。所以不能直接用 :meth:`str.format` 或 " +":class:`string.Template` 语法进行日志调用,因为日志包在内部使用 %-f " +"格式来合并格式串和参数变量。在保持向下兼容性时,这一点不会改变,因为已有代码中的所有日志调用都会使用%-f 格式串。" + +#: ../../howto/logging-cookbook.rst:1132 +msgid "" +"There is, however, a way that you can use {}- and $- formatting to construct" +" your individual log messages. Recall that for a message you can use an " +"arbitrary object as a message format string, and that the logging package " +"will call ``str()`` on that object to get the actual format string. Consider" +" the following two classes::" +msgstr "" +"还有一种方法可以构建自己的日志信息,就是利用 {}- 和 $- 格式。回想一下,任意对象都可用为日志信息的格式串,日志包将会调用该对象的 " +"``str()`` 方法,以获取最终的格式串。不妨看下一下两个类:" + +#: ../../howto/logging-cookbook.rst:1156 +msgid "" +"Either of these can be used in place of a format string, to allow {}- or " +"$-formatting to be used to build the actual \"message\" part which appears " +"in the formatted log output in place of \"%(message)s\" or \"{message}\" or " +"\"$message\". It's a little unwieldy to use the class names whenever you " +"want to log something, but it's quite palatable if you use an alias such as " +"__ (double underscore --- not to be confused with _, the single underscore " +"used as a synonym/alias for :func:`gettext.gettext` or its brethren)." +msgstr "" +"上述两个类均可代替格式串,使得能用 {}- 或 $-formatting 构建最终的“日志信息”部分,这些信息将出现在格式化后的日志输出中,替换 " +"%(message)s 或“{message}”或“$message”。每次写入日志时都要使用类名,有点不大实用,但如果用上 __ " +"之类的别名就相当合适了(双下划线 --- 不要与 _ 混淆,单下划线用作 :func:`gettext.gettext` 或相关函数的同义词/别名 )。" + +#: ../../howto/logging-cookbook.rst:1164 +msgid "" +"The above classes are not included in Python, though they're easy enough to " +"copy and paste into your own code. They can be used as follows (assuming " +"that they're declared in a module called ``wherever``):" +msgstr "Python 并没有上述两个类,当然复制粘贴到自己的代码中也很容易。用法可如下所示(假定在名为 ``wherever`` 的模块中声明):" + +#: ../../howto/logging-cookbook.rst:1186 +msgid "" +"While the above examples use ``print()`` to show how the formatting works, " +"you would of course use ``logger.debug()`` or similar to actually log using " +"this approach." +msgstr "" +"上述示例用了 ``print()`` 演示格式化输出的过程,实际记录日志时当然会用类似 ``logger.debug()`` 的方法来应用。" + +#: ../../howto/logging-cookbook.rst:1190 +msgid "" +"One thing to note is that you pay no significant performance penalty with " +"this approach: the actual formatting happens not when you make the logging " +"call, but when (and if) the logged message is actually about to be output to" +" a log by a handler. So the only slightly unusual thing which might trip you" +" up is that the parentheses go around the format string and the arguments, " +"not just the format string. That's because the __ notation is just syntax " +"sugar for a constructor call to one of the XXXMessage classes." +msgstr "" +"值得注意的是,上述做法对性能并没什么影响:格式化过程其实不是在日志记录调用时发生的,而是在日志信息即将由 handler " +"输出到日志时发生。因此,唯一可能让人困惑的稍不寻常的地方,就是包裹在格式串和参数外面的括号,而不是格式串。因为 __ 符号只是对 XXXMessage " +"类的构造函数调用的语法糖。" + +#: ../../howto/logging-cookbook.rst:1198 +msgid "" +"If you prefer, you can use a :class:`LoggerAdapter` to achieve a similar " +"effect to the above, as in the following example::" +msgstr "只要愿意,上述类似的效果即可用 :class:`LoggerAdapter` 实现,如下例所示:" + +#: ../../howto/logging-cookbook.rst:1229 +msgid "" +"The above script should log the message ``Hello, world!`` when run with " +"Python 3.2 or later." +msgstr "在用 Python 3.2 以上版本运行时,上述代码应该会把 ``Hello, world!`` 写入日志。" + +#: ../../howto/logging-cookbook.rst:1238 +msgid "Customizing ``LogRecord``" +msgstr "自定义 ``LogRecord``" + +#: ../../howto/logging-cookbook.rst:1240 +msgid "" +"Every logging event is represented by a :class:`LogRecord` instance. When an" +" event is logged and not filtered out by a logger's level, a " +":class:`LogRecord` is created, populated with information about the event " +"and then passed to the handlers for that logger (and its ancestors, up to " +"and including the logger where further propagation up the hierarchy is " +"disabled). Before Python 3.2, there were only two places where this creation" +" was done:" +msgstr "" +"每条日志事件都由一个 :class:`LogRecord` 实例表示。当某事件要记入日志并且没有被某级别过滤掉时,就会创建一个 " +":class:`LogRecord` 对象,并将有关事件的信息填入,传给该日志对象的 handler(及其祖先,直至对象禁止向上传播为止)。在 " +"Python 3.2 之前,只有两个地方会进行事件的创建:" + +#: ../../howto/logging-cookbook.rst:1247 +msgid "" +":meth:`Logger.makeRecord`, which is called in the normal process of logging " +"an event. This invoked :class:`LogRecord` directly to create an instance." +msgstr "" +":meth:`Logger.makeRecord`,在事件正常记入日志的过程中调用。这会直接调用 :class:`LogRecord` 来创建一个实例。" + +#: ../../howto/logging-cookbook.rst:1250 +msgid "" +":func:`makeLogRecord`, which is called with a dictionary containing " +"attributes to be added to the LogRecord. This is typically invoked when a " +"suitable dictionary has been received over the network (e.g. in pickle form " +"via a :class:`~handlers.SocketHandler`, or in JSON form via an " +":class:`~handlers.HTTPHandler`)." +msgstr "" +":func:`makeLogRecord`,调用时会带上一个字典参数,其中存放着要加入 LogRecord " +"的属性。这通常在通过网络接收到合适的字典时调用(如通过 :class:`~handlers.SocketHandler` 以 pickle 形式,或通过" +" :class:`~handlers.HTTPHandler` 以 JSON 形式)。" + +#: ../../howto/logging-cookbook.rst:1256 +msgid "" +"This has usually meant that if you need to do anything special with a " +":class:`LogRecord`, you've had to do one of the following." +msgstr "于是这意味着若要对 :class:`LogRecord` 进行定制,必须进行下述某种操作。" + +#: ../../howto/logging-cookbook.rst:1259 +msgid "" +"Create your own :class:`Logger` subclass, which overrides " +":meth:`Logger.makeRecord`, and set it using :func:`~logging.setLoggerClass` " +"before any loggers that you care about are instantiated." +msgstr "" +"创建 :class:`Logger`  自定义子类,重写 :meth:`Logger.makeRecord`,并在实例化所需日志对象之前用 " +":func:`~logging.setLoggerClass` 进行设置。" + +#: ../../howto/logging-cookbook.rst:1262 +msgid "" +"Add a :class:`Filter` to a logger or handler, which does the necessary " +"special manipulation you need when its :meth:`~Filter.filter` method is " +"called." +msgstr "" +"为日志对象添加 :class:`Filter` 或 handler,当其 :meth:`~Filter.filter` " +"方法被调用时,会执行必要的定制操作。" + +#: ../../howto/logging-cookbook.rst:1266 +msgid "" +"The first approach would be a little unwieldy in the scenario where (say) " +"several different libraries wanted to do different things. Each would " +"attempt to set its own :class:`Logger` subclass, and the one which did this " +"last would win." +msgstr "" +"比如说在有多个不同库要完成不同操作的场景下,第一种方式会有点笨拙。 每次都要尝试设置自己的 :class:`Logger` " +"子类,而起作用的是最后一次尝试。" + +#: ../../howto/logging-cookbook.rst:1271 +msgid "" +"The second approach works reasonably well for many cases, but does not allow" +" you to e.g. use a specialized subclass of :class:`LogRecord`. Library " +"developers can set a suitable filter on their loggers, but they would have " +"to remember to do this every time they introduced a new logger (which they " +"would do simply by adding new packages or modules and doing ::" +msgstr "" +"第二种方式在多数情况下效果都比较良好,但不允许你使用特殊化的 :class:`LogRecord` 子类。 " +"库开发者可以为他们的日志记录器设置合适的过滤器,但他们应当要记得每次引入新的日志记录器时都需如此(他们只需通过添加新的包或模块并执行以下操作即可)::" + +#: ../../howto/logging-cookbook.rst:1279 +msgid "" +"at module level). It's probably one too many things to think about. " +"Developers could also add the filter to a :class:`~logging.NullHandler` " +"attached to their top-level logger, but this would not be invoked if an " +"application developer attached a handler to a lower-level library logger ---" +" so output from that handler would not reflect the intentions of the library" +" developer." +msgstr "" +"或许这样要顾及太多事情。开发人员还可以将过滤器附加到其顶级日志对象的 :class:`~logging.NullHandler` " +"中,但如果应用程序开发人员将 handler 附加到较底层库的日志对象,则不会调用该过滤器 --- 所以 handler " +"输出的内容不会符合库开发人员的预期。" + +#: ../../howto/logging-cookbook.rst:1285 +msgid "" +"In Python 3.2 and later, :class:`~logging.LogRecord` creation is done " +"through a factory, which you can specify. The factory is just a callable you" +" can set with :func:`~logging.setLogRecordFactory`, and interrogate with " +":func:`~logging.getLogRecordFactory`. The factory is invoked with the same " +"signature as the :class:`~logging.LogRecord` constructor, as " +":class:`LogRecord` is the default setting for the factory." +msgstr "" +"在 Python 3.2 以上版本中,:class:`~logging.LogRecord` " +"的创建是通过工厂对象完成的,工厂对象可以指定。工厂对象只是一个可调用对象,可以用 " +":func:`~logging.setLogRecordFactory` 进行设置,并用 " +":func:`~logging.getLogRecordFactory` 进行查询。工厂对象的调用参数与 " +":class:`~logging.LogRecord` 的构造函数相同,因为 :class:`LogRecord` 是工厂对象的默认设置。" + +#: ../../howto/logging-cookbook.rst:1292 +msgid "" +"This approach allows a custom factory to control all aspects of LogRecord " +"creation. For example, you could return a subclass, or just add some " +"additional attributes to the record once created, using a pattern similar to" +" this::" +msgstr "" +"这种方式可以让自定义工厂对象完全控制 LogRecord 的创建过程。比如可以返回一个子类,或者在创建的日志对象中加入一些额外的属性,使用方式如下所示:" + +#: ../../howto/logging-cookbook.rst:1305 +msgid "" +"This pattern allows different libraries to chain factories together, and as " +"long as they don't overwrite each other's attributes or unintentionally " +"overwrite the attributes provided as standard, there should be no surprises." +" However, it should be borne in mind that each link in the chain adds run-" +"time overhead to all logging operations, and the technique should only be " +"used when the use of a :class:`Filter` does not provide the desired result." +msgstr "" +"这种模式允许不同的库将多个工厂对象链在一起,只要不会覆盖彼此的属性或标准属性,就不会出现意外。但应记住,工厂链中的每个节点都会增加日志操作的运行开销,本技术仅在采用" +" :class:`Filter` 无法达到目标时才应使用。" + +#: ../../howto/logging-cookbook.rst:1316 +msgid "Subclassing QueueHandler - a ZeroMQ example" +msgstr "子类化 QueueHandler - ZeroMQ 示例" + +#: ../../howto/logging-cookbook.rst:1318 +msgid "" +"You can use a :class:`QueueHandler` subclass to send messages to other kinds" +" of queues, for example a ZeroMQ 'publish' socket. In the example below,the " +"socket is created separately and passed to the handler (as its 'queue')::" +msgstr "" +"你可以使用 :class:`QueueHandler` 子类将消息发送给其他类型的队列 ,比如 ZeroMQ 'publish' 套接字。 " +"在以下示例中,套接字将单独创建并传给处理器 (作为它的 'queue')::" + +#: ../../howto/logging-cookbook.rst:1337 +msgid "" +"Of course there are other ways of organizing this, for example passing in " +"the data needed by the handler to create the socket::" +msgstr "当然还有其他方案,比如通过 hander 传入所需数据,以创建 socket:" + +#: ../../howto/logging-cookbook.rst:1355 +msgid "Subclassing QueueListener - a ZeroMQ example" +msgstr "子类化 QueueListener —— ZeroMQ 示例" + +#: ../../howto/logging-cookbook.rst:1357 +msgid "" +"You can also subclass :class:`QueueListener` to get messages from other " +"kinds of queues, for example a ZeroMQ 'subscribe' socket. Here's an " +"example::" +msgstr "" +"你还可以子类化 :class:`QueueListener` 来从其他类型的队列中获取消息,比如从 ZeroMQ 'subscribe' 套接字。 " +"下面是一个例子::" + +#: ../../howto/logging-cookbook.rst:1376 +msgid "Module :mod:`logging`" +msgstr "模块 :mod:`logging`" + +#: ../../howto/logging-cookbook.rst:1376 +msgid "API reference for the logging module." +msgstr "日志记录模块的 API 参考。" + +#: ../../howto/logging-cookbook.rst:1379 +msgid "Module :mod:`logging.config`" +msgstr ":mod:`logging.config` 模块" + +#: ../../howto/logging-cookbook.rst:1379 +msgid "Configuration API for the logging module." +msgstr "日志记录模块的配置 API 。" + +#: ../../howto/logging-cookbook.rst:1382 +msgid "Module :mod:`logging.handlers`" +msgstr ":mod:`logging.handlers` 模块" + +#: ../../howto/logging-cookbook.rst:1382 +msgid "Useful handlers included with the logging module." +msgstr "日志记录模块附带的有用处理器。" + +#: ../../howto/logging-cookbook.rst:1384 +msgid ":ref:`A basic logging tutorial `" +msgstr ":ref:`日志操作基础教程 `" + +#: ../../howto/logging-cookbook.rst:1386 +msgid ":ref:`A more advanced logging tutorial `" +msgstr ":ref:`日志操作的高级教程 `" + +#: ../../howto/logging-cookbook.rst:1390 +msgid "An example dictionary-based configuration" +msgstr "基于字典进行日志配置的示例" + +#: ../../howto/logging-cookbook.rst:1392 +msgid "" +"Below is an example of a logging configuration dictionary - it's taken from " +"the `documentation on the Django project " +"`_. This dictionary is passed to :func:`~config.dictConfig` to put " +"the configuration into effect::" +msgstr "" +"以下是日志配置字典的一个示例——它取自 Django " +"项目的`文档`_。此字典将被传给 :func:`~config.dictConfig` 以使配置生效:: " + +#: ../../howto/logging-cookbook.rst:1448 +msgid "" +"For more information about this configuration, you can see the `relevant " +"section " +"`_ of the Django documentation." +msgstr "" +"有关本配置的更多信息,请参阅 Django 文档的 `有关章节 " +"`_ 。" + +#: ../../howto/logging-cookbook.rst:1455 +msgid "Using a rotator and namer to customize log rotation processing" +msgstr "利用 rotator 和 namer 自定义日志轮换操作" + +#: ../../howto/logging-cookbook.rst:1457 +msgid "" +"An example of how you can define a namer and rotator is given in the " +"following snippet, which shows zlib-based compression of the log file::" +msgstr "以下代码给出了定义 namer 和 rotator 的示例,其中演示了基于 zlib 的日志文件压缩过程:" + +#: ../../howto/logging-cookbook.rst:1475 +msgid "" +"These are not \"true\" .gz files, as they are bare compressed data, with no " +"\"container\" such as you’d find in an actual gzip file. This snippet is " +"just for illustration purposes." +msgstr "这些不是“真正的” .gz 文件,因为他们只是纯压缩数据,缺少真正 gzip 文件中的“容器”。此段代码只是用于演示。 " + +#: ../../howto/logging-cookbook.rst:1480 +msgid "A more elaborate multiprocessing example" +msgstr "更加详细的多道处理示例" + +#: ../../howto/logging-cookbook.rst:1482 +msgid "" +"The following working example shows how logging can be used with " +"multiprocessing using configuration files. The configurations are fairly " +"simple, but serve to illustrate how more complex ones could be implemented " +"in a real multiprocessing scenario." +msgstr "以下可运行的示例显示了如何利用配置文件在多进程中应用日志。这些配置相当简单,但足以说明如何在真实的多进程场景中实现较为复杂的配置。" + +#: ../../howto/logging-cookbook.rst:1487 +msgid "" +"In the example, the main process spawns a listener process and some worker " +"processes. Each of the main process, the listener and the workers have three" +" separate configurations (the workers all share the same configuration). We " +"can see logging in the main process, how the workers log to a QueueHandler " +"and how the listener implements a QueueListener and a more complex logging " +"configuration, and arranges to dispatch events received via the queue to the" +" handlers specified in the configuration. Note that these configurations are" +" purely illustrative, but you should be able to adapt this example to your " +"own scenario." +msgstr "" +"上述示例中,主进程产生一个侦听器进程和一些工作进程。每个主进程、侦听器进程和工作进程都有三种独立的日志配置(工作进程共享同一套配置)。大家可以看到主进程的日志记录过程、工作线程向" +" QueueHandler 写入日志的过程,以及侦听器实现 QueueListener 和较为复杂的日志配置,如何将由队列接收到的事件分发给配置指定的 " +"handler。请注意,这些配置纯粹用于演示,但应该能调整代码以适用于自己的场景。" + +#: ../../howto/logging-cookbook.rst:1497 +msgid "" +"Here's the script - the docstrings and the comments hopefully explain how it" +" works::" +msgstr "以下是代码——但愿文档字符串和注释能有助于理解其工作原理:" + +#: ../../howto/logging-cookbook.rst:1709 +msgid "Inserting a BOM into messages sent to a SysLogHandler" +msgstr "在发送给 SysLogHandler 的信息中插入一个 BOM。" + +#: ../../howto/logging-cookbook.rst:1711 +msgid "" +":rfc:`5424` requires that a Unicode message be sent to a syslog daemon as a " +"set of bytes which have the following structure: an optional pure-ASCII " +"component, followed by a UTF-8 Byte Order Mark (BOM), followed by Unicode " +"encoded using UTF-8. (See the :rfc:`relevant section of the specification " +"<5424#section-6>`.)" +msgstr "" +":rfc:`5424` 要求,Unicode 信息应采用字节流形式发送到系统 syslog 守护程序,字节流结构如下所示:可选的纯 ASCII部分,后跟" +" UTF-8 字节序标记(BOM),然后是采用 UTF-8 编码的 Unicode。(参见 :rfc:`相关规范<5424#section-6>` 。)" + +#: ../../howto/logging-cookbook.rst:1717 +msgid "" +"In Python 3.1, code was added to :class:`~logging.handlers.SysLogHandler` to" +" insert a BOM into the message, but unfortunately, it was implemented " +"incorrectly, with the BOM appearing at the beginning of the message and " +"hence not allowing any pure-ASCII component to appear before it." +msgstr "" +"在 Python 3.1 的 :class:`~logging.handlers.SysLogHandler` 中,已加入了在日志信息中插入 BOM " +"的代码,但不幸的是,代码并不正确,BOM 出现在了日志信息的开头,因此在它之前就不允许出现纯 ASCII 内容了。" + +#: ../../howto/logging-cookbook.rst:1723 +msgid "" +"As this behaviour is broken, the incorrect BOM insertion code is being " +"removed from Python 3.2.4 and later. However, it is not being replaced, and " +"if you want to produce :rfc:`5424`-compliant messages which include a BOM, " +"an optional pure-ASCII sequence before it and arbitrary Unicode after it, " +"encoded using UTF-8, then you need to do the following:" +msgstr "" +"由于无法正常工作, Python 3.2.4 以上版本已删除了出错的插入 BOM 代码。但已有版本的代码不会被替换,若要生成与 :rfc:`5424` " +"兼容的日志信息,包括一个 BOM 符,前面有可选的纯 ASCII 字节流,后面为 UTF-8 编码的任意 Unicode,那么 需要执行以下操作:" + +#: ../../howto/logging-cookbook.rst:1729 +msgid "" +"Attach a :class:`~logging.Formatter` instance to your " +":class:`~logging.handlers.SysLogHandler` instance, with a format string such" +" as::" +msgstr "" +"为 :class:`~logging.handlers.SysLogHandler` 实例串上一个 " +":class:`~logging.Formatter` 实例,格式串可如下:" + +#: ../../howto/logging-cookbook.rst:1735 +msgid "" +"The Unicode code point U+FEFF, when encoded using UTF-8, will be encoded as " +"a UTF-8 BOM -- the byte-string ``b'\\xef\\xbb\\xbf'``." +msgstr "用 UTF-8 编码时,Unicode 码位 U+FEFF 将会编码为 UTF-8 BOM——字节串 ``b'\\xef\\xbb\\xbf'`` 。" + +#: ../../howto/logging-cookbook.rst:1738 +msgid "" +"Replace the ASCII section with whatever placeholders you like, but make sure" +" that the data that appears in there after substitution is always ASCII " +"(that way, it will remain unchanged after UTF-8 encoding)." +msgstr "用任意占位符替换 ASCII 部分,但要保证替换之后的数据一定是 ASCII 码(这样在 UTF-8 编码后就会维持不变)。" + +#: ../../howto/logging-cookbook.rst:1742 +msgid "" +"Replace the Unicode section with whatever placeholders you like; if the data" +" which appears there after substitution contains characters outside the " +"ASCII range, that's fine -- it will be encoded using UTF-8." +msgstr "用任意占位符替换 Unicode 部分;如果替换后的数据包含超出 ASCII 范围的字符,没问题——他们将用 UTF-8 进行编码。" + +#: ../../howto/logging-cookbook.rst:1746 +msgid "" +"The formatted message *will* be encoded using UTF-8 encoding by " +"``SysLogHandler``. If you follow the above rules, you should be able to " +"produce :rfc:`5424`-compliant messages. If you don't, logging may not " +"complain, but your messages will not be RFC 5424-compliant, and your syslog " +"daemon may complain." +msgstr "" +"``SysLogHandler`` *将* 对格式化后的日志信息进行 UTF-8 编码。如果遵循上述规则,应能生成符合 :rfc:`5424` " +"的日志信息。否则,日志记录过程可能不会有什么反馈,但日志信息将不与 RFC 5424 兼容,syslog 守护程序可能会有出错反应。" + +#: ../../howto/logging-cookbook.rst:1753 +msgid "Implementing structured logging" +msgstr "结构化日志的实现代码" + +#: ../../howto/logging-cookbook.rst:1755 +msgid "" +"Although most logging messages are intended for reading by humans, and thus " +"not readily machine-parseable, there might be circumstances where you want " +"to output messages in a structured format which *is* capable of being parsed" +" by a program (without needing complex regular expressions to parse the log " +"message). This is straightforward to achieve using the logging package. " +"There are a number of ways in which this could be achieved, but the " +"following is a simple approach which uses JSON to serialise the event in a " +"machine-parseable manner::" +msgstr "" +"大多数日志信息是供人阅读的,所以机器解析起来并不容易,但某些时候可能希望以结构化的格式输出,以 *能够* " +"被程序解析(无需用到复杂的正则表达式)。这可以直接用 logging 包实现。实现方式有很多,以下是一种比较简单的方案,利用 JSON " +"以机器可解析的方式对事件信息进行序列化:" + +#: ../../howto/logging-cookbook.rst:1779 +msgid "If the above script is run, it prints:" +msgstr "上述代码运行后的结果是:" + +#: ../../howto/logging-cookbook.rst:1785 ../../howto/logging-cookbook.rst:1834 +msgid "" +"Note that the order of items might be different according to the version of " +"Python used." +msgstr "请注意,根据 Python 版本的不同,各项数据的输出顺序可能会不一样。" + +#: ../../howto/logging-cookbook.rst:1788 +msgid "" +"If you need more specialised processing, you can use a custom JSON encoder, " +"as in the following complete example::" +msgstr "若需进行更为定制化的处理,可以使用自定义 JSON 编码对象,下面给出完整示例:" + +#: ../../howto/logging-cookbook.rst:1828 +msgid "When the above script is run, it prints:" +msgstr "上述代码运行后的结果是:" + +#: ../../howto/logging-cookbook.rst:1843 +msgid "Customizing handlers with :func:`dictConfig`" +msgstr "利用 :func:`dictConfig` 自定义 handler" + +#: ../../howto/logging-cookbook.rst:1845 +msgid "" +"There are times when you want to customize logging handlers in particular " +"ways, and if you use :func:`dictConfig` you may be able to do this without " +"subclassing. As an example, consider that you may want to set the ownership " +"of a log file. On POSIX, this is easily done using :func:`shutil.chown`, but" +" the file handlers in the stdlib don't offer built-in support. You can " +"customize handler creation using a plain function such as::" +msgstr "" +"有时需要以特定方式自定义日志 handler,如果采用 :func:`dictConfig`,可能无需生成子类就可以做到。比如要设置日志文件的所有权。在" +" POSIX 上,可以利用 :func:`shutil.chown` 轻松完成,但 stdlib 中的文件 handler " +"并不提供内置支持。于是可以用普通函数自定义 handler 的创建,例如:" + +#: ../../howto/logging-cookbook.rst:1859 +msgid "" +"You can then specify, in a logging configuration passed to " +":func:`dictConfig`, that a logging handler be created by calling this " +"function::" +msgstr "然后,你可以在传给 :func:`dictConfig` 的日志配置中指定通过调用此函数来创建日志处理程序::" + +#: ../../howto/logging-cookbook.rst:1892 +msgid "" +"In this example I am setting the ownership using the ``pulse`` user and " +"group, just for the purposes of illustration. Putting it together into a " +"working script, ``chowntest.py``::" +msgstr "出于演示目的,以下示例设置用户和用户组为 ``pulse``。代码置于一个可运行的脚本文件 ``chowntest.py`` 中:" + +#: ../../howto/logging-cookbook.rst:1939 +msgid "To run this, you will probably need to run as ``root``:" +msgstr "可能需要 ``root`` 权限才能运行:" + +#: ../../howto/logging-cookbook.rst:1949 +msgid "" +"Note that this example uses Python 3.3 because that's where " +":func:`shutil.chown` makes an appearance. This approach should work with any" +" Python version that supports :func:`dictConfig` - namely, Python 2.7, 3.2 " +"or later. With pre-3.3 versions, you would need to implement the actual " +"ownership change using e.g. :func:`os.chown`." +msgstr "" +"请注意此示例用的是 Python 3.3,因为 :func:`shutil.chown` 是从此版本开始出现的。 此方式应当适用于任何支持 " +":func:`dictConfig` 的 Python 版本 —— 例如 Python 2.7, 3.2 或更新的版本。 对于 3.3 " +"之前的版本,你应当使用 :func:`os.chown` 之类的函数来实现实际的所有权修改。" + +#: ../../howto/logging-cookbook.rst:1955 +msgid "" +"In practice, the handler-creating function may be in a utility module " +"somewhere in your project. Instead of the line in the configuration::" +msgstr "实际应用中,handler 的创建函数可能位于项目的工具模块中。以下配置:" + +#: ../../howto/logging-cookbook.rst:1960 +msgid "you could use e.g.::" +msgstr "应使用:" + +#: ../../howto/logging-cookbook.rst:1964 +msgid "" +"where ``project.util`` can be replaced with the actual name of the package " +"where the function resides. In the above working script, using " +"``'ext://__main__.owned_file_handler'`` should work. Here, the actual " +"callable is resolved by :func:`dictConfig` from the ``ext://`` " +"specification." +msgstr "" +"这里的 ``project.util`` 可以换成函数所在包的实际名称。 在上述的可用脚本中,应该可以使用 " +"``'ext://__main__.owned_file_handler'``。 在这里,实际的可调用对象是由 :func:`dictConfig` 从" +" ``ext://`` 说明中解析出来的。" + +#: ../../howto/logging-cookbook.rst:1969 +msgid "" +"This example hopefully also points the way to how you could implement other " +"types of file change - e.g. setting specific POSIX permission bits - in the " +"same way, using :func:`os.chmod`." +msgstr "上述示例还指明了其他的文件修改类型的实现方案 —— 比如同样利用 :func:`os.chmod` 设置 POSIX 访问权限位。" + +#: ../../howto/logging-cookbook.rst:1973 +msgid "" +"Of course, the approach could also be extended to types of handler other " +"than a :class:`~logging.FileHandler` - for example, one of the rotating file" +" handlers, or a different type of handler altogether." +msgstr "" +"当然,以上做法也可以扩展到 :class:`~logging.FileHandler` 之外的其他类型的 handler ——比如某个轮换文件 " +"handler,或类型完全不同的其他 handler。" + +#: ../../howto/logging-cookbook.rst:1983 +msgid "Using particular formatting styles throughout your application" +msgstr "生效于整个应用程序的格式化样式" + +#: ../../howto/logging-cookbook.rst:1985 +msgid "" +"In Python 3.2, the :class:`~logging.Formatter` gained a ``style`` keyword " +"parameter which, while defaulting to ``%`` for backward compatibility, " +"allowed the specification of ``{`` or ``$`` to support the formatting " +"approaches supported by :meth:`str.format` and :class:`string.Template`. " +"Note that this governs the formatting of logging messages for final output " +"to logs, and is completely orthogonal to how an individual logging message " +"is constructed." +msgstr "" +"在 Python 3.2 中,:class:`~logging.Formatter` 增加了一个 ``style`` 关键字形参,它默认为 ``%`` " +"以便向下兼容,但是允许采用 ``{`` 或 ``$`` 来支持 :meth:`str.format` 和 " +":class:`string.Template` 所支持的格式化方式。 " +"请注意此形参控制着用用于最终输出到日志的日志消息格式,并且与单独日志消息的构造方式完全无关。" + +#: ../../howto/logging-cookbook.rst:1992 +msgid "" +"Logging calls (:meth:`~Logger.debug`, :meth:`~Logger.info` etc.) only take " +"positional parameters for the actual logging message itself, with keyword " +"parameters used only for determining options for how to handle the logging " +"call (e.g. the ``exc_info`` keyword parameter to indicate that traceback " +"information should be logged, or the ``extra`` keyword parameter to indicate" +" additional contextual information to be added to the log). So you cannot " +"directly make logging calls using :meth:`str.format` or " +":class:`string.Template` syntax, because internally the logging package uses" +" %-formatting to merge the format string and the variable arguments. There " +"would no changing this while preserving backward compatibility, since all " +"logging calls which are out there in existing code will be using %-format " +"strings." +msgstr "" +"日志函数(:meth:`~Logger.debug`, :meth:`~Logger.info` " +"等)只会读取位置参数获取日志信息本身,而关键字参数仅用于确定日志函数的工作选项(比如关键字参数 ``exc_info`` " +"表示应将跟踪信息记入日志,关键字参数 ``extra`` 则给出了需加入日志的额外上下文信息)。所以不能直接使用 :meth:`str.format` " +"或 :class:`string.Template` 这种语法进行日志调用,因为日志包在内部使用 %-f " +"格式来合并格式串和可变参数。因为尚需保持向下兼容,这一点不会改变,已有代码中的所有日志调用都将采用 %-f 格式串。" + +#: ../../howto/logging-cookbook.rst:2004 +msgid "" +"There have been suggestions to associate format styles with specific " +"loggers, but that approach also runs into backward compatibility problems " +"because any existing code could be using a given logger name and using " +"%-formatting." +msgstr "有人建议将格式化样式与特定的日志对象进行关联,但其实也会遇到向下兼容的问题,因为已有代码可能用到了某日志对象并采用了 %-f 格式串。" + +#: ../../howto/logging-cookbook.rst:2008 +msgid "" +"For logging to work interoperably between any third-party libraries and your" +" code, decisions about formatting need to be made at the level of the " +"individual logging call. This opens up a couple of ways in which alternative" +" formatting styles can be accommodated." +msgstr "为了让第三方库和自编代码都能够交互使用日志功能,需要决定在单次日志记录调用级别采用什么格式。于是就出现了其他几种格式化样式方案。" + +#: ../../howto/logging-cookbook.rst:2015 +msgid "Using LogRecord factories" +msgstr "LogRecord 工厂的用法" + +#: ../../howto/logging-cookbook.rst:2017 +msgid "" +"In Python 3.2, along with the :class:`~logging.Formatter` changes mentioned " +"above, the logging package gained the ability to allow users to set their " +"own :class:`LogRecord` subclasses, using the :func:`setLogRecordFactory` " +"function. You can use this to set your own subclass of :class:`LogRecord`, " +"which does the Right Thing by overriding the :meth:`~LogRecord.getMessage` " +"method. The base class implementation of this method is where the ``msg % " +"args`` formatting happens, and where you can substitute your alternate " +"formatting; however, you should be careful to support all formatting styles " +"and allow %-formatting as the default, to ensure interoperability with other" +" code. Care should also be taken to call ``str(self.msg)``, just as the base" +" implementation does." +msgstr "" +"在 Python 3.2 中,伴随着 :class:`~logging.Formatter` 的上述变化,logging 包增加了允许用户使用 " +":func:`setLogRecordFactory` 函数来。设置自己的 :class:`LogRecord` 子类的功能。 " +"你可以使用此功能来设置自己的 :class:`LogRecord` 子类,它会通过重写 :meth:`~LogRecord.getMessage` " +"方法来完成适当的操作。 ``msg % args`` " +"格式化是在此方法的基类实现中进行的,你可以在那里用你自己的格式化操作来替换;但是,你应当注意要支持全部的格式化样式并允许将 %-formatting " +"作为默认样式,以确保与其他代码进行配合。 还应当注意调用 ``str(self.msg)``,正如基类实现所做的一样。" + +#: ../../howto/logging-cookbook.rst:2028 +msgid "" +"Refer to the reference documentation on :func:`setLogRecordFactory` and " +":class:`LogRecord` for more information." +msgstr "更多信息请参阅 :func:`setLogRecordFactory` 和 :class:`LogRecord` 的参考文档。" + +#: ../../howto/logging-cookbook.rst:2033 +msgid "Using custom message objects" +msgstr "自定义信息对象的使用" + +#: ../../howto/logging-cookbook.rst:2035 +msgid "" +"There is another, perhaps simpler way that you can use {}- and $- formatting" +" to construct your individual log messages. You may recall (from " +":ref:`arbitrary-object-messages`) that when logging you can use an arbitrary" +" object as a message format string, and that the logging package will call " +":func:`str` on that object to get the actual format string. Consider the " +"following two classes::" +msgstr "" +"另一种方案可能更为简单,可以利用 {}- 和 $- 格式构建自己的日志消息。大家或许还记得(来自 :ref:`arbitrary-object-" +"messages`),可以用任意对象作为日志信息的格式串,日志包将调用该对象上 :func:`str` 获取实际的格式串。看下以下两个类:" + +#: ../../howto/logging-cookbook.rst:2060 +msgid "" +"Either of these can be used in place of a format string, to allow {}- or " +"$-formatting to be used to build the actual \"message\" part which appears " +"in the formatted log output in place of “%(message)s” or “{message}” or " +"“$message”. If you find it a little unwieldy to use the class names whenever" +" you want to log something, you can make it more palatable if you use an " +"alias such as ``M`` or ``_`` for the message (or perhaps ``__``, if you are " +"using ``_`` for localization)." +msgstr "" +"以上两个类均都可用于替代格式串,以便用 {}- 或 $-formatting 构建实际的“日志信息”部分,此部分将出现在格式化后的日志输出中,替换 " +"%(message)s 、“{message}”或“$message”。每次要写入日志时都使用类名,如果觉得使用不便,可以采用 ``M`` 或 " +"``_`` 之类的别名(如果将 ``_`` 用于本地化操作,则可用 ``__``)。" + +#: ../../howto/logging-cookbook.rst:2068 +msgid "" +"Examples of this approach are given below. Firstly, formatting with " +":meth:`str.format`::" +msgstr "下面给出示例。 首先用 :meth:`str.format` 进行格式化:" + +#: ../../howto/logging-cookbook.rst:2082 +msgid "Secondly, formatting with :class:`string.Template`::" +msgstr "然后,用 :class:`string.Template` 格式化:" + +#: ../../howto/logging-cookbook.rst:2089 +msgid "" +"One thing to note is that you pay no significant performance penalty with " +"this approach: the actual formatting happens not when you make the logging " +"call, but when (and if) the logged message is actually about to be output to" +" a log by a handler. So the only slightly unusual thing which might trip you" +" up is that the parentheses go around the format string and the arguments, " +"not just the format string. That’s because the __ notation is just syntax " +"sugar for a constructor call to one of the ``XXXMessage`` classes shown " +"above." +msgstr "" +"值得注意的是,上述做法对性能并没什么影响:格式化过程其实不是在日志调用时发生的,而是在日志信息即将由 handler " +"输出到日志时发生。因此,唯一可能让人困惑的稍不寻常的地方,就是包裹在格式串和参数外面的括号,而不是格式串。因为 __ 符号只是对 " +"``XXXMessage`` 类的构造函数调用的语法糖。" + +#: ../../howto/logging-cookbook.rst:2103 +msgid "Configuring filters with :func:`dictConfig`" +msgstr "利用 :func:`dictConfig` 定义过滤器" + +#: ../../howto/logging-cookbook.rst:2105 +msgid "" +"You *can* configure filters using :func:`~logging.config.dictConfig`, though" +" it might not be obvious at first glance how to do it (hence this recipe). " +"Since :class:`~logging.Filter` is the only filter class included in the " +"standard library, and it is unlikely to cater to many requirements (it's " +"only there as a base class), you will typically need to define your own " +":class:`~logging.Filter` subclass with an overridden " +":meth:`~logging.Filter.filter` method. To do this, specify the ``()`` key in" +" the configuration dictionary for the filter, specifying a callable which " +"will be used to create the filter (a class is the most obvious, but you can " +"provide any callable which returns a :class:`~logging.Filter` instance). " +"Here is a complete example::" +msgstr "" +"用 :func:`~logging.config.dictConfig` *可以* 对日志过滤器进行设置,尽管乍一看做法并不明显(所以才需要本秘籍)。 " +"由于 :class:`~logging.Filter` 是标准库中唯一的日志过滤器类,不太可能满足众多的要求(它只是作为基类存在),通常需要定义自己的 " +":class:`~logging.Filter` 子类,并重写 :meth:`~logging.Filter.filter` " +"方法。为此,请在过滤器的配置字典中设置 ``()`` " +"键,指定要用于创建过滤器的可调用对象(最明显可用的就是给出一个类,但也可以提供任何一个可调用对象,只要能返回 " +":class:`~logging.Filter` 实例即可)。下面是一个完整的例子:" + +#: ../../howto/logging-cookbook.rst:2158 +msgid "" +"This example shows how you can pass configuration data to the callable which" +" constructs the instance, in the form of keyword parameters. When run, the " +"above script will print:" +msgstr "以上示例展示了将配置数据传给构造实例的可调用对象,形式是关键字参数。运行后将会输出:" + +#: ../../howto/logging-cookbook.rst:2166 +msgid "which shows that the filter is working as configured." +msgstr "这说明过滤器按照配置的参数生效了。" + +#: ../../howto/logging-cookbook.rst:2168 +msgid "A couple of extra points to note:" +msgstr "需要额外注意的地方:" + +#: ../../howto/logging-cookbook.rst:2170 +msgid "" +"If you can't refer to the callable directly in the configuration (e.g. if it" +" lives in a different module, and you can't import it directly where the " +"configuration dictionary is), you can use the form ``ext://...`` as " +"described in :ref:`logging-config-dict-externalobj`. For example, you could " +"have used the text ``'ext://__main__.MyFilter'`` instead of ``MyFilter`` in " +"the above example." +msgstr "" +"如果在配置中无法直接引用可调用对象(比如位于不同的模块中,并且不能在配置字典所在的位置直接导入),则可以采用 ``ext://...`` 的形式,正如 " +":ref:`logging-config-dict-externalobj` 所述。例如,在上述示例中可以使用文本 " +"``'ext://__main__.MyFilter'`` 而不是 ``MyFilter`` 对象。" + +#: ../../howto/logging-cookbook.rst:2177 +msgid "" +"As well as for filters, this technique can also be used to configure custom " +"handlers and formatters. See :ref:`logging-config-dict-userdef` for more " +"information on how logging supports using user-defined objects in its " +"configuration, and see the other cookbook recipe :ref:`custom-handlers` " +"above." +msgstr "" +"与过滤器一样,上述技术还可用于配置自定义 handler 和格式化对象。有关如何在日志配置中使用用户自定义对象的更多信息,请参阅 " +":ref:`logging-config-dict-userdef`,以及上述 :ref:`custom-handlers` 的其他指南。" + +#: ../../howto/logging-cookbook.rst:2186 +msgid "Customized exception formatting" +msgstr "异常信息的自定义格式化" + +#: ../../howto/logging-cookbook.rst:2188 +msgid "" +"There might be times when you want to do customized exception formatting - " +"for argument's sake, let's say you want exactly one line per logged event, " +"even when exception information is present. You can do this with a custom " +"formatter class, as shown in the following example::" +msgstr "" +"有时可能需要设置自定义的异常信息格式——考虑到会用到参数,假定要让每条日志事件只占一行,即便存在异常信息也一样。这可以用自定义格式化类来实现,如下所示:" + +#: ../../howto/logging-cookbook.rst:2229 +msgid "When run, this produces a file with exactly two lines:" +msgstr "运行后将会生成只有两行信息的文件:" + +#: ../../howto/logging-cookbook.rst:2236 +msgid "" +"While the above treatment is simplistic, it points the way to how exception " +"information can be formatted to your liking. The :mod:`traceback` module may" +" be helpful for more specialized needs." +msgstr "虽然上述处理方式很简单,但也给出了根据喜好对异常信息进行格式化输出的方案。或许 :mod:`traceback` 模块能满足更专门的需求。" + +#: ../../howto/logging-cookbook.rst:2243 +msgid "Speaking logging messages" +msgstr "语音播报日志信息" + +#: ../../howto/logging-cookbook.rst:2245 +msgid "" +"There might be situations when it is desirable to have logging messages " +"rendered in an audible rather than a visible format. This is easy to do if " +"you have text-to-speech (TTS) functionality available in your system, even " +"if it doesn't have a Python binding. Most TTS systems have a command line " +"program you can run, and this can be invoked from a handler using " +":mod:`subprocess`. It's assumed here that TTS command line programs won't " +"expect to interact with users or take a long time to complete, and that the " +"frequency of logged messages will be not so high as to swamp the user with " +"messages, and that it's acceptable to have the messages spoken one at a time" +" rather than concurrently, The example implementation below waits for one " +"message to be spoken before the next is processed, and this might cause " +"other handlers to be kept waiting. Here is a short example showing the " +"approach, which assumes that the ``espeak`` TTS package is available::" +msgstr "" +"有时可能需要以声音的形式呈现日志消息。如果系统自带了文本转语音 (TTS)功能,即便没与 Python 关联也很容易做到。大多数 TTS " +"系统都有一个可运行的命令行程序,在 handler 中可以用 :mod:`subprocess` 进行调用。这里假定 TTS " +"命令行程序不会与用户交互,或需要很长时间才会执行完毕,写入日志的信息也不会多到影响用户查看,并且可以接受每次播报一条信息,以下示例实现了等一条信息播完再处理下一条,可能会导致其他" +" handler 的等待。这个简短示例仅供演示,假定 ``espeak`` TTS 包已就绪:" + +#: ../../howto/logging-cookbook.rst:2287 +msgid "" +"When run, this script should say \"Hello\" and then \"Goodbye\" in a female " +"voice." +msgstr "运行后将会以女声播报“Hello”和“Goodbye”。" + +#: ../../howto/logging-cookbook.rst:2289 +msgid "" +"The above approach can, of course, be adapted to other TTS systems and even " +"other systems altogether which can process messages via external programs " +"run from a command line." +msgstr "当然,上述方案也适用于其他 TTS 系统,甚至可以通过利用命令行运行的外部程序来处理消息。" + +#: ../../howto/logging-cookbook.rst:2297 +msgid "Buffering logging messages and outputting them conditionally" +msgstr "缓冲日志消息并有条件地输出它们" + +#: ../../howto/logging-cookbook.rst:2299 +msgid "" +"There might be situations where you want to log messages in a temporary area" +" and only output them if a certain condition occurs. For example, you may " +"want to start logging debug events in a function, and if the function " +"completes without errors, you don't want to clutter the log with the " +"collected debug information, but if there is an error, you want all the " +"debug information to be output as well as the error." +msgstr "" +"在某些情况下,你可能希望在临时区域中记录日志消息,并且只在发生某种特定的情况下才输出它们。 " +"例如,你可能希望起始在函数中记录调试事件,如果函数执行完成且没有错误,你不希望输出收集的调试信息以避免造成日志混乱,但如果出现错误,那么你希望所有调试以及错误消息被输出。" + +#: ../../howto/logging-cookbook.rst:2306 +msgid "" +"Here is an example which shows how you could do this using a decorator for " +"your functions where you want logging to behave this way. It makes use of " +"the :class:`logging.handlers.MemoryHandler`, which allows buffering of " +"logged events until some condition occurs, at which point the buffered " +"events are ``flushed`` - passed to another handler (the ``target`` handler) " +"for processing. By default, the ``MemoryHandler`` flushed when its buffer " +"gets filled up or an event whose level is greater than or equal to a " +"specified threshold is seen. You can use this recipe with a more specialised" +" subclass of ``MemoryHandler`` if you want custom flushing behavior." +msgstr "" +"下面是一个示例,展示如何在你的日志记录函数上使用装饰器以实现这一功能。该示例使用 " +":class:`logging.handlers.MemoryHandler` " +",它允许缓冲已记录的事件直到某些条件发生,缓冲的事件才会被刷新(``flushed``) - 传递给另一个处理程序( ``target`` " +"handler)进行处理。 默认情况下, ``MemoryHandler`` 在其缓冲区被填满时被刷新,或者看到一个级别大于或等于指定阈值的事件。 " +"如果想要自定义刷新行为,你可以通过更专业的 ``MemoryHandler`` 子类来使用这个秘诀。" + +#: ../../howto/logging-cookbook.rst:2316 +msgid "" +"The example script has a simple function, ``foo``, which just cycles through" +" all the logging levels, writing to ``sys.stderr`` to say what level it's " +"about to log at, and then actually logging a message at that level. You can " +"pass a parameter to ``foo`` which, if true, will log at ERROR and CRITICAL " +"levels - otherwise, it only logs at DEBUG, INFO and WARNING levels." +msgstr "" +"这个示例脚本有一个简单的函数 ``foo`` ,它只是在所有的日志级别中循环运行,写到 ``sys.stderr`` " +",说明它要记录在哪个级别上,然后在这个级别上实际记录一个消息。你可以给 ``foo`` 传递一个参数,如果为 true " +",它将在ERROR和CRITICAL级别记录,否则,它只在DEBUG、INFO和WARNING级别记录。" + +#: ../../howto/logging-cookbook.rst:2322 +msgid "" +"The script just arranges to decorate ``foo`` with a decorator which will do " +"the conditional logging that's required. The decorator takes a logger as a " +"parameter and attaches a memory handler for the duration of the call to the " +"decorated function. The decorator can be additionally parameterised using a " +"target handler, a level at which flushing should occur, and a capacity for " +"the buffer (number of records buffered). These default to a " +":class:`~logging.StreamHandler` which writes to ``sys.stderr``, " +"``logging.ERROR`` and ``100`` respectively." +msgstr "" +"脚本只是使用了一个装饰器来装饰 " +"``foo``,这个装饰器将记录执行所需的条件。装饰器使用一个记录器作为参数,并在调用被装饰的函数期间附加一个内存处理程序。装饰器可以使用目标处理程序、记录级别和缓冲区的容量(缓冲记录的数量)来附加参数。这些参数分别默认为写入" +" ``sys.stderr`` 的 :class:`~logging.StreamHandler` , ``logging.ERROR`` 和 " +"``100``。" + +#: ../../howto/logging-cookbook.rst:2330 +msgid "Here's the script::" +msgstr "以下是脚本:" + +#: ../../howto/logging-cookbook.rst:2393 +msgid "When this script is run, the following output should be observed:" +msgstr "运行此脚本时,应看到以下输出:" + +#: ../../howto/logging-cookbook.rst:2423 +msgid "" +"As you can see, actual logging output only occurs when an event is logged " +"whose severity is ERROR or greater, but in that case, any previous events at" +" lower severities are also logged." +msgstr "如你所见,实际日志记录输出仅在消息等级为ERROR或更高的事件时发生,但在这种情况下,任何之前较低消息等级的事件还会被记录。" + +#: ../../howto/logging-cookbook.rst:2427 +msgid "You can of course use the conventional means of decoration::" +msgstr "你当然可以使用传统的装饰方法::" + +#: ../../howto/logging-cookbook.rst:2437 +msgid "Formatting times using UTC (GMT) via configuration" +msgstr "通过配置使用UTC (GMT) 格式化时间" + +#: ../../howto/logging-cookbook.rst:2439 +msgid "" +"Sometimes you want to format times using UTC, which can be done using a " +"class such as `UTCFormatter`, shown below::" +msgstr "有时需要将时间格式化为 UTC 格式,可以用类似 `UTCFormatter` 的类来完成,如下所示:" + +#: ../../howto/logging-cookbook.rst:2448 +msgid "" +"and you can then use the ``UTCFormatter`` in your code instead of " +":class:`~logging.Formatter`. If you want to do that via configuration, you " +"can use the :func:`~logging.config.dictConfig` API with an approach " +"illustrated by the following complete example::" +msgstr "" +"然后你可以在你的代码中使用 ``UTCFormatter``,而不是 :class:`~logging.Formatter`。 " +"如果你想通过配置来实现这一功能,你可以使用 :func:`~logging.config.dictConfig` API " +"来完成,该方法在以下完整示例中展示::" + +#: ../../howto/logging-cookbook.rst:2491 +msgid "When this script is run, it should print something like:" +msgstr "脚本会运行输出类似下面的内容:" + +#: ../../howto/logging-cookbook.rst:2498 +msgid "" +"showing how the time is formatted both as local time and UTC, one for each " +"handler." +msgstr "展示了如何将时间格式化为本地时间和UTC两种形式,其中每种形式对应一个日志处理器 。" + +#: ../../howto/logging-cookbook.rst:2505 +msgid "Using a context manager for selective logging" +msgstr "使用上下文管理器的可选的日志记录" + +#: ../../howto/logging-cookbook.rst:2507 +msgid "" +"There are times when it would be useful to temporarily change the logging " +"configuration and revert it back after doing something. For this, a context " +"manager is the most obvious way of saving and restoring the logging context." +" Here is a simple example of such a context manager, which allows you to " +"optionally change the logging level and add a logging handler purely in the " +"scope of the context manager::" +msgstr "" +"有时候,我们需要暂时更改日志配置,并在执行某些操作后将其还原。为此,上下文管理器是实现保存和恢复日志上下文的最明显的方式。这是一个关于上下文管理器的简单例子,它允许你在上下文管理器的作用域内更改日志记录等级以及增加日志处理器:" + +#: ../../howto/logging-cookbook.rst:2540 +msgid "" +"If you specify a level value, the logger's level is set to that value in the" +" scope of the with block covered by the context manager. If you specify a " +"handler, it is added to the logger on entry to the block and removed on exit" +" from the block. You can also ask the manager to close the handler for you " +"on block exit - you could do this if you don't need the handler any more." +msgstr "" +"如果指定上下文管理器的日志记录等级属性,则在上下文管理器的with语句所涵盖的代码中,日志记录器的记录等级将临时设置为上下文管理器所配置的日志记录等级。" +" 如果指定上下文管理的日志处理器属性,则该句柄在进入上下文管理器的上下文时添加到记录器中,并在退出时被删除。 " +"如果你再也不需要该日志处理器时,你可以让上下文管理器在退出上下文管理器的上下文时关闭它。" + +#: ../../howto/logging-cookbook.rst:2546 +msgid "" +"To illustrate how it works, we can add the following block of code to the " +"above::" +msgstr "为了说明它是如何工作的,我们可以在上面添加以下代码块::" + +#: ../../howto/logging-cookbook.rst:2564 +msgid "" +"We initially set the logger's level to ``INFO``, so message #1 appears and " +"message #2 doesn't. We then change the level to ``DEBUG`` temporarily in the" +" following ``with`` block, and so message #3 appears. After the block exits," +" the logger's level is restored to ``INFO`` and so message #4 doesn't " +"appear. In the next ``with`` block, we set the level to ``DEBUG`` again but " +"also add a handler writing to ``sys.stdout``. Thus, message #5 appears twice" +" on the console (once via ``stderr`` and once via ``stdout``). After the " +"``with`` statement's completion, the status is as it was before so message " +"#6 appears (like message #1) whereas message #7 doesn't (just like message " +"#2)." +msgstr "" +"我们最初设置日志记录器的消息等级为 ``INFO`` ,因此消息#1出现,消息#2没有出现。在接下来的 ``with`` " +"代码块中我们暂时将消息等级变更为 ``DEBUG`` ,从而消息 #3 出现。在这一代码块退出后,日志记录器的消息等级恢复为 ``INFO`` " +",从而消息 #4 没有出现。在下一个 ``with`` 代码块中,我们再一次将设置消息等级设置为 ``DEBUG`` ,同时添加一个将消息写入 " +"``sys.stdout`` 的日志处理器。因此,消息#5在控制台出现两次 (分别通过 ``stderr`` 和 ``stdout`` )。在 " +"``with`` 语句完成后,状态与之前一样,因此消息 #6 出现(类似消息 #1),而消息 #7 没有出现(类似消息 #2)。" + +#: ../../howto/logging-cookbook.rst:2574 +msgid "If we run the resulting script, the result is as follows:" +msgstr "如果我们运行生成的脚本,结果如下:" + +#: ../../howto/logging-cookbook.rst:2585 +msgid "" +"If we run it again, but pipe ``stderr`` to ``/dev/null``, we see the " +"following, which is the only message written to ``stdout``:" +msgstr "" +"我们将 ``stderr`` 标准错误重定向到 ``/dev/null`` ,我再次运行生成的脚步,唯一被写入 ``stdout`` " +"标准输出的消息,即我们所能看见的消息,如下:" + +#: ../../howto/logging-cookbook.rst:2593 +msgid "Once again, but piping ``stdout`` to ``/dev/null``, we get:" +msgstr "再一次,将 ``stdout`` 标准输出重定向到 ``/dev/null``,我获得如下结果:" + +#: ../../howto/logging-cookbook.rst:2603 +msgid "" +"In this case, the message #5 printed to ``stdout`` doesn't appear, as " +"expected." +msgstr "在这种情况下,与预期一致,打印到 ``stdout`` 标准输出的消息#5不会出现。" + +#: ../../howto/logging-cookbook.rst:2605 +msgid "" +"Of course, the approach described here can be generalised, for example to " +"attach logging filters temporarily. Note that the above code works in Python" +" 2 as well as Python 3." +msgstr "当然,这里描述的方法可以被推广,例如临时附加日志记录过滤器。 请注意,上面的代码适用于Python 2以及Python 3。" + +#: ../../howto/logging-cookbook.rst:2613 +msgid "A CLI application starter template" +msgstr "命令行日志应用起步" + +#: ../../howto/logging-cookbook.rst:2615 +msgid "Here's an example which shows how you can:" +msgstr "下面的示例提供了如下功能:" + +#: ../../howto/logging-cookbook.rst:2617 +msgid "Use a logging level based on command-line arguments" +msgstr "根据命令行参数确定日志级别" + +#: ../../howto/logging-cookbook.rst:2618 +msgid "" +"Dispatch to multiple subcommands in separate files, all logging at the same " +"level in a consistent way" +msgstr "在单独的文件中分发多条子命令,同一级别的子命令均以一致的方式记录。" + +#: ../../howto/logging-cookbook.rst:2620 +msgid "Make use of simple, minimal configuration" +msgstr "最简单的配置用法" + +#: ../../howto/logging-cookbook.rst:2622 +msgid "" +"Suppose we have a command-line application whose job is to stop, start or " +"restart some services. This could be organised for the purposes of " +"illustration as a file ``app.py`` that is the main script for the " +"application, with individual commands implemented in ``start.py``, " +"``stop.py`` and ``restart.py``. Suppose further that we want to control the " +"verbosity of the application via a command-line argument, defaulting to " +"``logging.INFO``. Here's one way that ``app.py`` could be written::" +msgstr "" +"假定有一个命令行应用程序,用于停止、启动或重新启动某些服务。为了便于演示,不妨将 ``app.py`` 作为应用程序的主代码文件,并在 " +"``start.py`` 、 ``stop.py`` 和 ``restart.py`` " +"中实现单独的命令。再假定要通过命令行参数控制应用程序的日志粒度,默认为 ``logging.INFO`` 。以下是 ``app.py`` 的一个示例:" + +#: ../../howto/logging-cookbook.rst:2671 +msgid "" +"And the ``start``, ``stop`` and ``restart`` commands can be implemented in " +"separate modules, like so for starting::" +msgstr "``start``、``stop`` 和 ``restart`` 命令可以在单独的模块中实现,启动命令的代码可如下:" + +#: ../../howto/logging-cookbook.rst:2684 +msgid "and thus for stopping::" +msgstr "然后是停止命令的代码:" + +#: ../../howto/logging-cookbook.rst:2705 +msgid "and similarly for restarting::" +msgstr "重启命令类似:" + +#: ../../howto/logging-cookbook.rst:2726 +msgid "" +"If we run this application with the default log level, we get output like " +"this:" +msgstr "如果以默认日志级别运行该程序,会得到以下结果:" + +#: ../../howto/logging-cookbook.rst:2739 +msgid "" +"The first word is the logging level, and the second word is the module or " +"package name of the place where the event was logged." +msgstr "第一个单词是日志级别,第二个单词是日志事件所在的模块或包的名称。" + +#: ../../howto/logging-cookbook.rst:2742 +msgid "" +"If we change the logging level, then we can change the information sent to " +"the log. For example, if we want more information:" +msgstr "如果修改了日志级别,发送给日志的信息就能得以改变。如要显示更多信息,则可:" + +#: ../../howto/logging-cookbook.rst:2759 +msgid "And if we want less:" +msgstr "若要显示的信息少一些,则:" + +#: ../../howto/logging-cookbook.rst:2767 +msgid "" +"In this case, the commands don't print anything to the console, since " +"nothing at ``WARNING`` level or above is logged by them." +msgstr "这里的命令不会向控制台输出任何信息,因为没有记录 ``WARNING`` 以上级别的日志。" + +#: ../../howto/logging-cookbook.rst:2773 +msgid "A Qt GUI for logging" +msgstr "Qt GUI 日志示例" + +#: ../../howto/logging-cookbook.rst:2775 +msgid "" +"A question that comes up from time to time is about how to log to a GUI " +"application. The `Qt `_ framework is a popular cross-" +"platform UI framework with Python bindings using `PySide2 " +"`_ or `PyQt5 " +"`_ libraries." +msgstr "" +"GUI 应用程序如何记录日志,这是个常见的问题。 `Qt `_ 框架是一个流行的跨平台 UI 框架,采用的是 " +"`PySide2 `_ 或 `PyQt5 " +"`_ 库。" + +#: ../../howto/logging-cookbook.rst:2781 +msgid "" +"The following example shows how to log to a Qt GUI. This introduces a simple" +" ``QtHandler`` class which takes a callable, which should be a slot in the " +"main thread that does GUI updates. A worker thread is also created to show " +"how you can log to the GUI from both the UI itself (via a button for manual " +"logging) as well as a worker thread doing work in the background (here, just" +" logging messages at random levels with random short delays in between)." +msgstr "" +"下面的例子演示了将日志写入 Qt GUI 程序的过程。这里引入了一个简单的 ``QtHandler`` " +"类,参数是一个可调用对象,其应为嵌入主线程某个“槽位”中运行的,因为GUI 的更新由主线程完成。这里还创建了一个工作线程,以便演示由 " +"UI(通过人工点击日志按钮)和后台工作线程(此处只是记录级别和时间间隔均随机生成的日志信息)将日志写入 GUI 的过程。" + +#: ../../howto/logging-cookbook.rst:2788 +msgid "" +"The worker thread is implemented using Qt's ``QThread`` class rather than " +"the :mod:`threading` module, as there are circumstances where one has to use" +" ``QThread``, which offers better integration with other ``Qt`` components." +msgstr "" +"该工作线程是用 Qt 的 ``QThread`` 类实现的,而不是 :mod:`threading` 模块,因为某些情况下只能采用 " +"```QThread``,它与其他 ``Qt`` 组件的集成性更好一些。" + +#: ../../howto/logging-cookbook.rst:2792 +msgid "" +"The code should work with recent releases of either ``PySide2`` or " +"``PyQt5``. You should be able to adapt the approach to earlier versions of " +"Qt. Please refer to the comments in the code snippet for more detailed " +"information." +msgstr "以下代码应能适用于最新版的 ``PySide2`` 或 ``PyQt5``。对于低版本的 Qt 应该也能适用。更多详情,请参阅代码注释。" + +#: ../../howto/logging-cookbook.rst:3009 +msgid "Patterns to avoid" +msgstr "理应避免的用法" + +#: ../../howto/logging-cookbook.rst:3011 +msgid "" +"Although the preceding sections have described ways of doing things you " +"might need to do or deal with, it is worth mentioning some usage patterns " +"which are *unhelpful*, and which should therefore be avoided in most cases. " +"The following sections are in no particular order." +msgstr "" +"前几节虽介绍了几种方案,描述了可能需要处理的操作,但值得一提的是,有些用法是 *没有好处* 的,大多数情况下应该避免使用。下面几节的顺序不分先后。" + +#: ../../howto/logging-cookbook.rst:3018 +msgid "Opening the same log file multiple times" +msgstr "多次打开同一个日志文件" + +#: ../../howto/logging-cookbook.rst:3020 +msgid "" +"On Windows, you will generally not be able to open the same file multiple " +"times as this will lead to a \"file is in use by another process\" error. " +"However, on POSIX platforms you'll not get any errors if you open the same " +"file multiple times. This could be done accidentally, for example by:" +msgstr "" +"因会导致 \"文件被其他进程占用 \"错误,所以在 Windows 中一般无法多次打开同一个文件。但在 POSIX " +"平台中,多次打开同一个文件不会报任何错误。这种操作可能是意外发生的,比如:" + +#: ../../howto/logging-cookbook.rst:3025 +msgid "" +"Adding a file handler more than once which references the same file (e.g. by" +" a copy/paste/forget-to-change error)." +msgstr "多次添加指向同一文件的 handler(比如通过复制/粘贴,或忘记修改)。" + +#: ../../howto/logging-cookbook.rst:3028 +msgid "" +"Opening two files that look different, as they have different names, but are" +" the same because one is a symbolic link to the other." +msgstr "打开两个貌似不同(文件名不一样)的文件,但一个是另一个的符号链接,所以其实是同一个文件。" + +#: ../../howto/logging-cookbook.rst:3031 +msgid "" +"Forking a process, following which both parent and child have a reference to" +" the same file. This might be through use of the :mod:`multiprocessing` " +"module, for example." +msgstr "" +"进程 fork,然后父进程和子进程都有对同一文件的引用。 例如,这可能是通过使用 :mod:`multiprocessing` 模块实现的。" + +#: ../../howto/logging-cookbook.rst:3035 +msgid "" +"Opening a file multiple times might *appear* to work most of the time, but " +"can lead to a number of problems in practice:" +msgstr "在大多数情况下,多次打开同一个文件 *貌似* 一切正常,但实际会导致很多问题。" + +#: ../../howto/logging-cookbook.rst:3038 +msgid "" +"Logging output can be garbled because multiple threads or processes try to " +"write to the same file. Although logging guards against concurrent use of " +"the same handler instance by multiple threads, there is no such protection " +"if concurrent writes are attempted by two different threads using two " +"different handler instances which happen to point to the same file." +msgstr "" +"由于多个线程或进程会尝试写入同一个文件,日志输出可能会出现乱码。尽管日志对象可以防止多个线程同时使用同一个 handler " +"实例,但如果两个不同的线程使用不同的 handler 实例同时写入文件,而这两个 handler 又恰好指向同一个文件,那么就失去了这种防护。" + +#: ../../howto/logging-cookbook.rst:3044 +msgid "" +"An attempt to delete a file (e.g. during file rotation) silently fails, " +"because there is another reference pointing to it. This can lead to " +"confusion and wasted debugging time - log entries end up in unexpected " +"places, or are lost altogether." +msgstr "" +"删除文件(例如在轮换日志文件时)会静默失败,因为有另一个引用指向这个文件。这可能导致混乱并浪费调试时间——日志项最后会出现在意想不到的地方,或者干脆丢失。" + +#: ../../howto/logging-cookbook.rst:3049 +msgid "" +"Use the techniques outlined in :ref:`multiple-processes` to circumvent such " +"issues." +msgstr "请用 :ref:`multiple-processes` 中介绍的技术来避免上述问题。" + +#: ../../howto/logging-cookbook.rst:3053 +msgid "Using loggers as attributes in a class or passing them as parameters" +msgstr "将日志对象用作属性或传递参数" + +#: ../../howto/logging-cookbook.rst:3055 +msgid "" +"While there might be unusual cases where you'll need to do this, in general " +"there is no point because loggers are singletons. Code can always access a " +"given logger instance by name using ``logging.getLogger(name)``, so passing " +"instances around and holding them as instance attributes is pointless. Note " +"that in other languages such as Java and C#, loggers are often static class " +"attributes. However, this pattern doesn't make sense in Python, where the " +"module (and not the class) is the unit of software decomposition." +msgstr "" +"虽然特殊情况下可能有必要如此,但一般来说没有意义,因为日志是单实例对象。代码总是可以通过 ``logging.getLogger(name)`` " +"用名称访问一个已有的日志对象实例,因此将实例作为参数来传递,或作为属性留存,都是毫无意义的。请注意,在其他语言中,如 Java 和 " +"C#,日志对象通常是静态类属性。但在 Python 中是没有意义的,因为软件拆分的单位是模块(而不是类)。" + +#: ../../howto/logging-cookbook.rst:3065 +msgid "" +"Adding handlers other than :class:`NullHandler` to a logger in a library" +msgstr "给日志库代码添加 :class:`NullHandler` 之外的其他 handler" + +#: ../../howto/logging-cookbook.rst:3067 +msgid "" +"Configuring logging by adding handlers, formatters and filters is the " +"responsibility of the application developer, not the library developer. If " +"you are maintaining a library, ensure that you don't add handlers to any of " +"your loggers other than a :class:`~logging.NullHandler` instance." +msgstr "" +"通过添加 handler、formatter 和 filter " +"来配置日志,这是应用程序开发人员的责任,而不是库开发人员该做的。如果正在维护一个库,请确保不要向任何日志对象添加 " +":class:`~logging.NullHandler` 实例以外的 handler。" + +#: ../../howto/logging-cookbook.rst:3074 +msgid "Creating a lot of loggers" +msgstr "创建大量的日志对象" + +#: ../../howto/logging-cookbook.rst:3076 +msgid "" +"Loggers are singletons that are never freed during a script execution, and " +"so creating lots of loggers will use up memory which can't then be freed. " +"Rather than create a logger per e.g. file processed or network connection " +"made, use the :ref:`existing mechanisms ` for passing " +"contextual information into your logs and restrict the loggers created to " +"those describing areas within your application (generally modules, but " +"occasionally slightly more fine-grained than that)." +msgstr "" +"日志是单实例对象,在代码执行过程中不会被释放,因此创建大量的日志对象会占用很多内存,而这些内存又不能被释放。与其为每个文件或网络连接创建一个日志,还不如利用" +" :ref:`已有机制 ` " +"将上下文信息传给自定义日志对象,并将创建的日志对象限制在应用程序内的指定区域(通常是模块,但偶尔会再精细些)使用。" diff --git a/howto/logging.po b/howto/logging.po new file mode 100644 index 000000000..20d9c6cc6 --- /dev/null +++ b/howto/logging.po @@ -0,0 +1,1651 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) 2001-2024, Python Software Foundation +# This file is distributed under the same license as the Python package. +# FIRST AUTHOR , YEAR. +# +# Translators: +# Natasha Li , 2017 +# cdarlint , 2017 +# Fei Yin , 2018 +# 欢 王 , 2018 +# Yan Gao , 2018 +# Freesand Leo , 2019 +# Alpha Du , 2019 +# ppcfish , 2019 +# WH-2099 , 2021 +# Rafael Fontenelle , 2024 +# +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: Python 3.9\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2024-01-12 22:01+0000\n" +"PO-Revision-Date: 2017-02-16 17:45+0000\n" +"Last-Translator: Rafael Fontenelle , 2024\n" +"Language-Team: Chinese (China) (https://app.transifex.com/python-doc/teams/5390/zh_CN/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: zh_CN\n" +"Plural-Forms: nplurals=1; plural=0;\n" + +#: ../../howto/logging.rst:3 +msgid "Logging HOWTO" +msgstr "日志指南" + +#: ../../howto/logging.rst:0 +msgid "Author" +msgstr "作者" + +#: ../../howto/logging.rst:5 +msgid "Vinay Sajip " +msgstr "Vinay Sajip " + +#: ../../howto/logging.rst:12 +msgid "Basic Logging Tutorial" +msgstr "日志基础教程" + +#: ../../howto/logging.rst:14 +msgid "" +"Logging is a means of tracking events that happen when some software runs. " +"The software's developer adds logging calls to their code to indicate that " +"certain events have occurred. An event is described by a descriptive message" +" which can optionally contain variable data (i.e. data that is potentially " +"different for each occurrence of the event). Events also have an importance " +"which the developer ascribes to the event; the importance can also be called" +" the *level* or *severity*." +msgstr "" +"日志是对软件执行时所发生事件的一种追踪方式。软件开发人员对他们的代码添加日志调用,借此来指示某事件的发生。一个事件通过一些包含变量数据的描述信息来描述(比如:每个事件发生时的数据都是不同的)。开发者还会区分事件的重要性,重要性也被称为" +" *等级* 或 *严重性*。" + +#: ../../howto/logging.rst:23 +msgid "When to use logging" +msgstr "什么时候使用日志" + +#: ../../howto/logging.rst:25 +msgid "" +"Logging provides a set of convenience functions for simple logging usage. " +"These are :func:`debug`, :func:`info`, :func:`warning`, :func:`error` and " +":func:`critical`. To determine when to use logging, see the table below, " +"which states, for each of a set of common tasks, the best tool to use for " +"it." +msgstr "" +"对于简单的日志使用来说日志功能提供了一系列便利的函数。它们是 " +":func:`debug`,:func:`info`,:func:`warning`,:func:`error` 和 " +":func:`critical`。想要决定何时使用日志,请看下表,其中显示了对于每个通用任务集合来说最好的工具。" + +#: ../../howto/logging.rst:31 +msgid "Task you want to perform" +msgstr "你想要执行的任务" + +#: ../../howto/logging.rst:31 +msgid "The best tool for the task" +msgstr "此任务最好的工具" + +#: ../../howto/logging.rst:33 +msgid "" +"Display console output for ordinary usage of a command line script or " +"program" +msgstr "对于命令行或程序的应用,结果显示在控制台。" + +#: ../../howto/logging.rst:33 +msgid ":func:`print`" +msgstr ":func:`print`" + +#: ../../howto/logging.rst:37 +msgid "" +"Report events that occur during normal operation of a program (e.g. for " +"status monitoring or fault investigation)" +msgstr "在对程序的普通操作发生时提交事件报告(比如:状态监控和错误调查)" + +#: ../../howto/logging.rst:37 +msgid "" +":func:`logging.info` (or :func:`logging.debug` for very detailed output for " +"diagnostic purposes)" +msgstr ":func:`logging.info` 函数(当有诊断目的需要详细输出信息时使用 :func:`logging.debug` 函数)" + +#: ../../howto/logging.rst:42 +msgid "Issue a warning regarding a particular runtime event" +msgstr "提出一个警告信息基于一个特殊的运行时事件" + +#: ../../howto/logging.rst:42 +msgid "" +":func:`warnings.warn` in library code if the issue is avoidable and the " +"client application should be modified to eliminate the warning" +msgstr ":func:`warnings.warn` 位于代码库中,该事件是可以避免的,需要修改客户端应用以消除告警" + +#: ../../howto/logging.rst:47 +msgid "" +":func:`logging.warning` if there is nothing the client application can do " +"about the situation, but the event should still be noted" +msgstr ":func:`logging.warning` 不需要修改客户端应用,但是该事件还是需要引起关注" + +#: ../../howto/logging.rst:52 +msgid "Report an error regarding a particular runtime event" +msgstr "对一个特殊的运行时事件报告错误" + +#: ../../howto/logging.rst:52 +msgid "Raise an exception" +msgstr "引发异常" + +#: ../../howto/logging.rst:55 +msgid "" +"Report suppression of an error without raising an exception (e.g. error " +"handler in a long-running server process)" +msgstr "报告错误而不引发异常(如在长时间运行中的服务端进程的错误处理)" + +#: ../../howto/logging.rst:55 +msgid "" +":func:`logging.error`, :func:`logging.exception` or :func:`logging.critical`" +" as appropriate for the specific error and application domain" +msgstr "" +":func:`logging.error`, :func:`logging.exception` 或 :func:`logging.critical` " +"分别适用于特定的错误及应用领域" + +#: ../../howto/logging.rst:62 +msgid "" +"The logging functions are named after the level or severity of the events " +"they are used to track. The standard levels and their applicability are " +"described below (in increasing order of severity):" +msgstr "日志功能应以所追踪事件级别或严重性而定。各级别适用性如下(以严重性递增):" + +#: ../../howto/logging.rst:69 ../../howto/logging.rst:855 +msgid "Level" +msgstr "级别" + +#: ../../howto/logging.rst:69 +msgid "When it's used" +msgstr "何时使用" + +#: ../../howto/logging.rst:71 ../../howto/logging.rst:865 +msgid "``DEBUG``" +msgstr "``DEBUG``" + +#: ../../howto/logging.rst:71 +msgid "" +"Detailed information, typically of interest only when diagnosing problems." +msgstr "细节信息,仅当诊断问题时适用。" + +#: ../../howto/logging.rst:74 ../../howto/logging.rst:863 +msgid "``INFO``" +msgstr "``INFO``" + +#: ../../howto/logging.rst:74 +msgid "Confirmation that things are working as expected." +msgstr "确认程序按预期运行。" + +#: ../../howto/logging.rst:77 ../../howto/logging.rst:861 +msgid "``WARNING``" +msgstr "``WARNING``" + +#: ../../howto/logging.rst:77 +msgid "" +"An indication that something unexpected happened, or indicative of some " +"problem in the near future (e.g. 'disk space low'). The software is still " +"working as expected." +msgstr "表明有已经或即将发生的意外(例如:磁盘空间不足)。程序仍按预期进行。" + +#: ../../howto/logging.rst:82 ../../howto/logging.rst:859 +msgid "``ERROR``" +msgstr "``ERROR``" + +#: ../../howto/logging.rst:82 +msgid "" +"Due to a more serious problem, the software has not been able to perform " +"some function." +msgstr "由于严重的问题,程序的某些功能已经不能正常执行" + +#: ../../howto/logging.rst:85 ../../howto/logging.rst:857 +msgid "``CRITICAL``" +msgstr "``CRITICAL``" + +#: ../../howto/logging.rst:85 +msgid "" +"A serious error, indicating that the program itself may be unable to " +"continue running." +msgstr "严重的错误,表明程序已不能继续执行" + +#: ../../howto/logging.rst:89 +msgid "" +"The default level is ``WARNING``, which means that only events of this level" +" and above will be tracked, unless the logging package is configured to do " +"otherwise." +msgstr "默认的级别是 ``WARNING``,意味着只会追踪该级别及以上的事件,除非更改日志配置。" + +#: ../../howto/logging.rst:93 +msgid "" +"Events that are tracked can be handled in different ways. The simplest way " +"of handling tracked events is to print them to the console. Another common " +"way is to write them to a disk file." +msgstr "所追踪事件可以以不同形式处理。最简单的方式是输出到控制台。另一种常用的方式是写入磁盘文件。" + +#: ../../howto/logging.rst:101 +msgid "A simple example" +msgstr "一个简单的例子" + +#: ../../howto/logging.rst:103 +msgid "A very simple example is::" +msgstr "一个非常简单的例子::" + +#: ../../howto/logging.rst:109 +msgid "If you type these lines into a script and run it, you'll see:" +msgstr "如果你在命令行中输入这些代码并运行,你将会看到:" + +#: ../../howto/logging.rst:115 +msgid "" +"printed out on the console. The ``INFO`` message doesn't appear because the " +"default level is ``WARNING``. The printed message includes the indication of" +" the level and the description of the event provided in the logging call, " +"i.e. 'Watch out!'. Don't worry about the 'root' part for now: it will be " +"explained later. The actual output can be formatted quite flexibly if you " +"need that; formatting options will also be explained later." +msgstr "" +"输出到命令行。``INFO`` 消息并没有出现,因为默认级别是 ``WARNING`` 。打印的信息包含事件的级别以及在日志调用中的对于事件的描述,例如" +" “Watch out!”。暂时不用担心 “root” 部分:之后会作出解释。输出格式可按需要进行调整,格式化选项同样会在之后作出解释。" + +#: ../../howto/logging.rst:124 +msgid "Logging to a file" +msgstr "记录日志到文件" + +#: ../../howto/logging.rst:126 +msgid "" +"A very common situation is that of recording logging events in a file, so " +"let's look at that next. Be sure to try the following in a newly-started " +"Python interpreter, and don't just continue from the session described " +"above::" +msgstr "一种非常常见的情况是将日志事件记录到文件,让我们继续往下看。请确认启动新的Python 解释器,不要在上一个环境中继续操作::" + +#: ../../howto/logging.rst:137 +msgid "" +"The *encoding* argument was added. In earlier Python versions, or if not " +"specified, the encoding used is the default value used by :func:`open`. " +"While not shown in the above example, an *errors* argument can also now be " +"passed, which determines how encoding errors are handled. For available " +"values and the default, see the documentation for :func:`open`." +msgstr "" +"增加了 *encoding* 参数。在更早的 Python 版本中或没有指定时,编码会用 :func:`open` " +"使用的默认值。尽管在上面的例子中没有展示,但也可以传入一个决定如何处理编码错误的 *errors* 参数。可使用的值和默认值,请参照 " +":func:`open` 的文档。" + +#: ../../howto/logging.rst:144 +msgid "" +"And now if we open the file and look at what we have, we should find the log" +" messages:" +msgstr "现在,如果我们打开日志文件,我们应当能看到日志信息:" + +#: ../../howto/logging.rst:154 +msgid "" +"This example also shows how you can set the logging level which acts as the " +"threshold for tracking. In this case, because we set the threshold to " +"``DEBUG``, all of the messages were printed." +msgstr "该示例同样展示了如何设置日志追踪级别的阈值。该示例中,由于我们设置的阈值是 ``DEBUG``,所有信息都将被打印。" + +#: ../../howto/logging.rst:158 +msgid "" +"If you want to set the logging level from a command-line option such as:" +msgstr "如果你想从命令行设置日志级别,例如:" + +#: ../../howto/logging.rst:164 +msgid "" +"and you have the value of the parameter passed for ``--log`` in some " +"variable *loglevel*, you can use::" +msgstr "并且你将 ``--log`` 命令的参数存进了变量 *loglevel*,你可以用:" + +#: ../../howto/logging.rst:169 +msgid "" +"to get the value which you'll pass to :func:`basicConfig` via the *level* " +"argument. You may want to error check any user input value, perhaps as in " +"the following example::" +msgstr "获取要通过 *level* 参数传给 :func:`basicConfig` 的值。可如下对用户输入值进行错误检查:" + +#: ../../howto/logging.rst:181 +msgid "" +"The call to :func:`basicConfig` should come *before* any calls to " +":func:`debug`, :func:`info` etc. As it's intended as a one-off simple " +"configuration facility, only the first call will actually do anything: " +"subsequent calls are effectively no-ops." +msgstr "" +"对 :func:`basicConfig` 的调用应该在 :func:`debug` , :func:`info` " +"等的前面。因为它被设计为一次性的配置,只有第一次调用会进行操作,随后的调用不会产生有效操作。" + +#: ../../howto/logging.rst:186 +msgid "" +"If you run the above script several times, the messages from successive runs" +" are appended to the file *example.log*. If you want each run to start " +"afresh, not remembering the messages from earlier runs, you can specify the " +"*filemode* argument, by changing the call in the above example to::" +msgstr "" +"如果多次运行上述脚本,则连续运行的消息将追加到文件 *example.log* 。 " +"如果你希望每次运行重新开始,而不是记住先前运行的消息,则可以通过将上例中的调用更改为来指定 *filemode* 参数::" + +#: ../../howto/logging.rst:193 +msgid "" +"The output will be the same as before, but the log file is no longer " +"appended to, so the messages from earlier runs are lost." +msgstr "输出将与之前相同,但不再追加进日志文件,因此早期运行的消息将丢失。" + +#: ../../howto/logging.rst:198 +msgid "Logging from multiple modules" +msgstr "从多个模块记录日志" + +#: ../../howto/logging.rst:200 +msgid "" +"If your program consists of multiple modules, here's an example of how you " +"could organize logging in it::" +msgstr "如果你的程序包含多个模块,这里有一个如何组织日志记录的示例::" + +#: ../../howto/logging.rst:224 +msgid "If you run *myapp.py*, you should see this in *myapp.log*:" +msgstr "如果你运行 *myapp.py* ,你应该在 *myapp.log* 中看到:" + +#: ../../howto/logging.rst:232 +msgid "" +"which is hopefully what you were expecting to see. You can generalize this " +"to multiple modules, using the pattern in *mylib.py*. Note that for this " +"simple usage pattern, you won't know, by looking in the log file, *where* in" +" your application your messages came from, apart from looking at the event " +"description. If you want to track the location of your messages, you'll need" +" to refer to the documentation beyond the tutorial level -- see " +":ref:`logging-advanced-tutorial`." +msgstr "" +"这是你期待看到的。 你可以使用 *mylib.py* 中的模式将此概括为多个模块。 " +"请注意,对于这种简单的使用模式,除了查看事件描述之外,你不能通过查看日志文件来了解应用程序中消息的 *来源* 。 " +"如果要跟踪消息的位置,则需要参考教程级别以外的文档 —— 请参阅 :ref:`logging-advanced-tutorial` 。" + +#: ../../howto/logging.rst:242 +msgid "Logging variable data" +msgstr "记录变量数据" + +#: ../../howto/logging.rst:244 +msgid "" +"To log variable data, use a format string for the event description message " +"and append the variable data as arguments. For example::" +msgstr "要记录变量数据,请使用格式字符串作为事件描述消息,并附加传入变量数据作为参数。 例如::" + +#: ../../howto/logging.rst:250 +msgid "will display:" +msgstr "将显示:" + +#: ../../howto/logging.rst:256 +msgid "" +"As you can see, merging of variable data into the event description message " +"uses the old, %-style of string formatting. This is for backwards " +"compatibility: the logging package pre-dates newer formatting options such " +"as :meth:`str.format` and :class:`string.Template`. These newer formatting " +"options *are* supported, but exploring them is outside the scope of this " +"tutorial: see :ref:`formatting-styles` for more information." +msgstr "" +"如你所见,将可变数据合并到事件描述消息中使用旧的 %-s形式的字符串格式化。 这是为了向后兼容:logging 包的出现时间早于较新的格式化选项例如 " +":meth:`str.format` 和 :class:`string.Template`。 这些较新格式化选项 *是* " +"受支持的,但探索它们超出了本教程的范围:有关详细信息,请参阅 :ref:`formatting-styles`。" + +#: ../../howto/logging.rst:265 +msgid "Changing the format of displayed messages" +msgstr "更改显示消息的格式" + +#: ../../howto/logging.rst:267 +msgid "" +"To change the format which is used to display messages, you need to specify " +"the format you want to use::" +msgstr "要更改用于显示消息的格式,你需要指定要使用的格式::" + +#: ../../howto/logging.rst:276 +msgid "which would print:" +msgstr "这将输出:" + +#: ../../howto/logging.rst:284 +msgid "" +"Notice that the 'root' which appeared in earlier examples has disappeared. " +"For a full set of things that can appear in format strings, you can refer to" +" the documentation for :ref:`logrecord-attributes`, but for simple usage, " +"you just need the *levelname* (severity), *message* (event description, " +"including variable data) and perhaps to display when the event occurred. " +"This is described in the next section." +msgstr "" +"注意在前面例子中出现的 “root” 已消失。文档 :ref:`logrecord-attributes` " +"列出了可在格式字符串中出现的所有内容,但在简单的使用场景中,你只需要 *levelname* (严重性)、*message* " +"(事件描述,包含可变的数据)或许再加上事件发生的时间。 这将在下一节中介绍。" + +#: ../../howto/logging.rst:293 +msgid "Displaying the date/time in messages" +msgstr "在消息中显示日期/时间" + +#: ../../howto/logging.rst:295 +msgid "" +"To display the date and time of an event, you would place '%(asctime)s' in " +"your format string::" +msgstr "要显示事件的日期和时间,你可以在格式字符串中放置 '%(asctime)s' ::" + +#: ../../howto/logging.rst:302 +msgid "which should print something like this:" +msgstr "应该打印这样的东西:" + +#: ../../howto/logging.rst:308 +msgid "" +"The default format for date/time display (shown above) is like ISO8601 or " +":rfc:`3339`. If you need more control over the formatting of the date/time, " +"provide a *datefmt* argument to ``basicConfig``, as in this example::" +msgstr "" +"日期/时间显示的默认格式(如上所示)类似于 ISO8601 或 :rfc:`3339` 。 如果你需要更多地控制日期/时间的格式,请为 " +"``basicConfig`` 提供 *datefmt* 参数,如下例所示::" + +#: ../../howto/logging.rst:316 +msgid "which would display something like this:" +msgstr "这会显示如下内容:" + +#: ../../howto/logging.rst:322 +msgid "" +"The format of the *datefmt* argument is the same as supported by " +":func:`time.strftime`." +msgstr "*datefmt* 参数的格式与 :func:`time.strftime` 支持的格式相同。" + +#: ../../howto/logging.rst:327 +msgid "Next Steps" +msgstr "后续步骤" + +#: ../../howto/logging.rst:329 +msgid "" +"That concludes the basic tutorial. It should be enough to get you up and " +"running with logging. There's a lot more that the logging package offers, " +"but to get the best out of it, you'll need to invest a little more of your " +"time in reading the following sections. If you're ready for that, grab some " +"of your favourite beverage and carry on." +msgstr "" +"基本教程到此结束。 它应该足以让你启动并运行日志记录。 logging 包提供了更多功能,但为了充分利用它,你需要花更多的时间来阅读以下部分。 " +"如果你准备好了,可以拿一些你最喜欢的饮料然后继续。" + +#: ../../howto/logging.rst:335 +msgid "" +"If your logging needs are simple, then use the above examples to incorporate" +" logging into your own scripts, and if you run into problems or don't " +"understand something, please post a question on the comp.lang.python Usenet " +"group (available at " +"https://groups.google.com/forum/#!forum/comp.lang.python) and you should " +"receive help before too long." +msgstr "" +"如果你的日志记录需求很简单,那么使用上面的示例将日志记录合并到你自己的脚本中,如果你遇到问题或者不理解某些内容,请在 comp.lang.python " +"Usenet 组上发布一个问题(在 https://groups.google.com/forum/#!forum/comp.lang.python )" +" ,你将在短时间内得到帮助。" + +#: ../../howto/logging.rst:341 +msgid "" +"Still here? You can carry on reading the next few sections, which provide a " +"slightly more advanced/in-depth tutorial than the basic one above. After " +"that, you can take a look at the :ref:`logging-cookbook`." +msgstr "" +"还不够? 你可以继续阅读接下来的几个部分,这些部分提供了比上面基本部分更高级或深入的教程。 之后,你可以看一下 :ref:`logging-" +"cookbook` 。" + +#: ../../howto/logging.rst:349 +msgid "Advanced Logging Tutorial" +msgstr "进阶日志教程" + +#: ../../howto/logging.rst:351 +msgid "" +"The logging library takes a modular approach and offers several categories " +"of components: loggers, handlers, filters, and formatters." +msgstr "日志库采用模块化方法,并提供几类组件:记录器、处理器、过滤器和格式器。" + +#: ../../howto/logging.rst:354 +msgid "Loggers expose the interface that application code directly uses." +msgstr "记录器暴露了应用程序代码直接使用的接口。" + +#: ../../howto/logging.rst:355 +msgid "" +"Handlers send the log records (created by loggers) to the appropriate " +"destination." +msgstr "处理器将日志记录(由记录器创建)发送到适当的目标。" + +#: ../../howto/logging.rst:357 +msgid "" +"Filters provide a finer grained facility for determining which log records " +"to output." +msgstr "过滤器提供了更细粒度的功能,用于确定要输出的日志记录。" + +#: ../../howto/logging.rst:359 +msgid "Formatters specify the layout of log records in the final output." +msgstr "格式器指定最终输出中日志记录的样式。" + +#: ../../howto/logging.rst:361 +msgid "" +"Log event information is passed between loggers, handlers, filters and " +"formatters in a :class:`LogRecord` instance." +msgstr "日志事件信息在 :class:`LogRecord` 实例中的记录器、处理器、过滤器和格式器之间传递。" + +#: ../../howto/logging.rst:364 +msgid "" +"Logging is performed by calling methods on instances of the :class:`Logger` " +"class (hereafter called :dfn:`loggers`). Each instance has a name, and they " +"are conceptually arranged in a namespace hierarchy using dots (periods) as " +"separators. For example, a logger named 'scan' is the parent of loggers " +"'scan.text', 'scan.html' and 'scan.pdf'. Logger names can be anything you " +"want, and indicate the area of an application in which a logged message " +"originates." +msgstr "" +"通过调用 :class:`Logger` 类(以下称为 :dfn:`loggers` , 记录器)的实例来执行日志记录。 " +"每个实例都有一个名称,它们在概念上以点(句点)作为分隔符排列在命名空间的层次结构中。 例如,名为 'scan' 的记录器是记录器 'scan.text'" +" ,'scan.html' 和 'scan.pdf' 的父级。 记录器名称可以是你想要的任何名称,并指示记录消息源自的应用程序区域。" + +#: ../../howto/logging.rst:371 +msgid "" +"A good convention to use when naming loggers is to use a module-level " +"logger, in each module which uses logging, named as follows::" +msgstr "在命名记录器时使用的一个好习惯是在每个使用日志记录的模块中使用模块级记录器,命名如下::" + +#: ../../howto/logging.rst:376 +msgid "" +"This means that logger names track the package/module hierarchy, and it's " +"intuitively obvious where events are logged just from the logger name." +msgstr "这意味着记录器名称跟踪包或模块的层次结构,并且直观地从记录器名称显示记录事件的位置。" + +#: ../../howto/logging.rst:379 +msgid "" +"The root of the hierarchy of loggers is called the root logger. That's the " +"logger used by the functions :func:`debug`, :func:`info`, :func:`warning`, " +":func:`error` and :func:`critical`, which just call the same-named method of" +" the root logger. The functions and the methods have the same signatures. " +"The root logger's name is printed as 'root' in the logged output." +msgstr "" +"记录器层次结构的根称为根记录器。 这是函数 :func:`debug` 、 :func:`info` 、 :func:`warning` 、 " +":func:`error` 和 :func:`critical` 使用的记录器,它们就是调用了根记录器的同名方法。 函数和方法具有相同的签名。 " +"根记录器的名称在输出中打印为 'root' 。" + +#: ../../howto/logging.rst:385 +msgid "" +"It is, of course, possible to log messages to different destinations. " +"Support is included in the package for writing log messages to files, HTTP " +"GET/POST locations, email via SMTP, generic sockets, queues, or OS-specific " +"logging mechanisms such as syslog or the Windows NT event log. Destinations " +"are served by :dfn:`handler` classes. You can create your own log " +"destination class if you have special requirements not met by any of the " +"built-in handler classes." +msgstr "" +"当然,可以将消息记录到不同的地方。 软件包中的支持包含,用于将日志消息写入文件、 HTTP GET/POST 位置、通过 SMTP " +"发送电子邮件、通用套接字、队列或特定于操作系统的日志记录机制(如 syslog 或 Windows NT 事件日志)。 目标由 " +":dfn:`handler` 类提供。 如果你有任何内置处理器类未满足的特殊要求,则可以创建自己的日志目标类。" + +#: ../../howto/logging.rst:392 +msgid "" +"By default, no destination is set for any logging messages. You can specify " +"a destination (such as console or file) by using :func:`basicConfig` as in " +"the tutorial examples. If you call the functions :func:`debug`, " +":func:`info`, :func:`warning`, :func:`error` and :func:`critical`, they will" +" check to see if no destination is set; and if one is not set, they will set" +" a destination of the console (``sys.stderr``) and a default format for the " +"displayed message before delegating to the root logger to do the actual " +"message output." +msgstr "" +"默认情况下,没有为任何日志消息设置目标。 你可以使用 :func:`basicConfig` 指定目标(例如控制台或文件),如教程示例中所示。 " +"如果你调用函数 :func:`debug` 、 :func:`info` 、 :func:`warning` 、 :func:`error` 和 " +":func:`critical` ,它们将检查是否有设置目标;如果没有设置,将在委托给根记录器进行实际的消息输出之前设置目标为控制台( " +"``sys.stderr`` )并设置显示消息的默认格式。" + +#: ../../howto/logging.rst:400 +msgid "The default format set by :func:`basicConfig` for messages is:" +msgstr "由 :func:`basicConfig` 设置的消息默认格式为:" + +#: ../../howto/logging.rst:406 +msgid "" +"You can change this by passing a format string to :func:`basicConfig` with " +"the *format* keyword argument. For all options regarding how a format string" +" is constructed, see :ref:`formatter-objects`." +msgstr "" +"你可以通过使用 *format* 参数将格式字符串传递给 :func:`basicConfig` 来更改此设置。有关如何构造格式字符串的所有选项,请参阅" +" :ref:`formatter-objects` 。" + +#: ../../howto/logging.rst:411 +msgid "Logging Flow" +msgstr "记录流程" + +#: ../../howto/logging.rst:413 +msgid "" +"The flow of log event information in loggers and handlers is illustrated in " +"the following diagram." +msgstr "记录器和处理器中的日志事件信息流程如下图所示。" + +#: ../../howto/logging.rst:419 +msgid "Loggers" +msgstr "记录器" + +#: ../../howto/logging.rst:421 +msgid "" +":class:`Logger` objects have a threefold job. First, they expose several " +"methods to application code so that applications can log messages at " +"runtime. Second, logger objects determine which log messages to act upon " +"based upon severity (the default filtering facility) or filter objects. " +"Third, logger objects pass along relevant log messages to all interested log" +" handlers." +msgstr "" +":class:`Logger` " +"对象有三重任务。首先,它们向应用程序代码公开了几种方法,以便应用程序可以在运行时记录消息。其次,记录器对象根据严重性(默认过滤工具)或过滤器对象确定要处理的日志消息。第三,记录器对象将相关的日志消息传递给所有感兴趣的日志处理器。" + +#: ../../howto/logging.rst:427 +msgid "" +"The most widely used methods on logger objects fall into two categories: " +"configuration and message sending." +msgstr "记录器对象上使用最广泛的方法分为两类:配置和消息发送。" + +#: ../../howto/logging.rst:430 +msgid "These are the most common configuration methods:" +msgstr "这些是最常见的配置方法:" + +#: ../../howto/logging.rst:432 +msgid "" +":meth:`Logger.setLevel` specifies the lowest-severity log message a logger " +"will handle, where debug is the lowest built-in severity level and critical " +"is the highest built-in severity. For example, if the severity level is " +"INFO, the logger will handle only INFO, WARNING, ERROR, and CRITICAL " +"messages and will ignore DEBUG messages." +msgstr "" +":meth:`Logger.setLevel` 指定记录器将处理的最低严重性日志消息,其中 debug 是最低内置严重性级别, critical " +"是最高内置严重性级别。 例如,如果严重性级别为 INFO ,则记录器将仅处理 INFO 、 WARNING 、 ERROR 和 CRITICAL " +"消息,并将忽略 DEBUG 消息。" + +#: ../../howto/logging.rst:438 +msgid "" +":meth:`Logger.addHandler` and :meth:`Logger.removeHandler` add and remove " +"handler objects from the logger object. Handlers are covered in more detail" +" in :ref:`handler-basic`." +msgstr "" +":meth:`Logger.addHandler` 和 :meth:`Logger.removeHandler` " +"从记录器对象中添加和删除处理器对象。处理器在以下内容中有更详细的介绍 :ref:`handler-basic` 。" + +#: ../../howto/logging.rst:442 +msgid "" +":meth:`Logger.addFilter` and :meth:`Logger.removeFilter` add and remove " +"filter objects from the logger object. Filters are covered in more detail " +"in :ref:`filter`." +msgstr "" +":meth:`Logger.addFilter` 和 :meth:`Logger.removeFilter` 可以添加或移除记录器对象中的过滤器。 " +":ref:`filter` 包含更多的过滤器细节。" + +#: ../../howto/logging.rst:446 +msgid "" +"You don't need to always call these methods on every logger you create. See " +"the last two paragraphs in this section." +msgstr "你不需要总是在你创建的每个记录器上都调用这些方法。 请参阅本节的最后两段。" + +#: ../../howto/logging.rst:449 +msgid "" +"With the logger object configured, the following methods create log " +"messages:" +msgstr "配置记录器对象后,以下方法将创建日志消息:" + +#: ../../howto/logging.rst:451 +msgid "" +":meth:`Logger.debug`, :meth:`Logger.info`, :meth:`Logger.warning`, " +":meth:`Logger.error`, and :meth:`Logger.critical` all create log records " +"with a message and a level that corresponds to their respective method " +"names. The message is actually a format string, which may contain the " +"standard string substitution syntax of ``%s``, ``%d``, ``%f``, and so on. " +"The rest of their arguments is a list of objects that correspond with the " +"substitution fields in the message. With regard to ``**kwargs``, the " +"logging methods care only about a keyword of ``exc_info`` and use it to " +"determine whether to log exception information." +msgstr "" +":meth:`Logger.debug` 、 :meth:`Logger.info` 、 :meth:`Logger.warning` 、 " +":meth:`Logger.error` 和 :meth:`Logger.critical` " +"都创建日志记录,包含消息和与其各自方法名称对应的级别。该消息实际上是一个格式化字符串,它可能包含标题字符串替换语法 ``%s`` 、 ``%d`` 、 " +"``%f`` 等等。其余参数是与消息中的替换字段对应的对象列表。关于 ``**kwargs`` ,日志记录方法只关注 ``exc_info`` " +"的关键字,并用它来确定是否记录异常信息。" + +#: ../../howto/logging.rst:461 +msgid "" +":meth:`Logger.exception` creates a log message similar to " +":meth:`Logger.error`. The difference is that :meth:`Logger.exception` dumps" +" a stack trace along with it. Call this method only from an exception " +"handler." +msgstr "" +":meth:`Logger.exception` 创建与 :meth:`Logger.error` 相似的日志信息。 不同之处是, " +":meth:`Logger.exception` 同时还记录当前的堆栈追踪。仅从异常处理程序调用此方法。" + +#: ../../howto/logging.rst:465 +msgid "" +":meth:`Logger.log` takes a log level as an explicit argument. This is a " +"little more verbose for logging messages than using the log level " +"convenience methods listed above, but this is how to log at custom log " +"levels." +msgstr "" +":meth:`Logger.log` " +"将日志级别作为显式参数。对于记录消息而言,这比使用上面列出的日志级别便利方法更加冗长,但这是使用自定义日志级别的方法。" + +#: ../../howto/logging.rst:469 +msgid "" +":func:`getLogger` returns a reference to a logger instance with the " +"specified name if it is provided, or ``root`` if not. The names are period-" +"separated hierarchical structures. Multiple calls to :func:`getLogger` with" +" the same name will return a reference to the same logger object. Loggers " +"that are further down in the hierarchical list are children of loggers " +"higher up in the list. For example, given a logger with a name of ``foo``, " +"loggers with names of ``foo.bar``, ``foo.bar.baz``, and ``foo.bam`` are all " +"descendants of ``foo``." +msgstr "" +":func:`getLogger` 返回对具有指定名称的记录器实例的引用(如果已提供),或者如果没有则返回 ``root`` " +"。名称是以句点分隔的层次结构。多次调用 :func:`getLogger` " +"具有相同的名称将返回对同一记录器对象的引用。在分层列表中较低的记录器是列表中较高的记录器的子项。例如,给定一个名为 ``foo`` 的记录器,名称为 " +"``foo.bar`` 、 ``foo.bar.baz`` 和 ``foo.bam`` 的记录器都是 ``foo`` 子项。" + +#: ../../howto/logging.rst:477 +msgid "" +"Loggers have a concept of *effective level*. If a level is not explicitly " +"set on a logger, the level of its parent is used instead as its effective " +"level. If the parent has no explicit level set, *its* parent is examined, " +"and so on - all ancestors are searched until an explicitly set level is " +"found. The root logger always has an explicit level set (``WARNING`` by " +"default). When deciding whether to process an event, the effective level of " +"the logger is used to determine whether the event is passed to the logger's " +"handlers." +msgstr "" +"记录器具有 *有效等级* 的概念。如果未在记录器上显式设置级别,则使用其父记录器的级别作为其有效级别。如果父记录器没有明确的级别设置,则检查 *其* " +"父级。依此类推,搜索所有上级元素,直到找到明确设置的级别。根记录器始终具有明确的级别配置(默认情况下为 ``WARNING`` " +")。在决定是否处理事件时,记录器的有效级别用于确定事件是否传递给记录器相关的处理器。" + +#: ../../howto/logging.rst:485 +msgid "" +"Child loggers propagate messages up to the handlers associated with their " +"ancestor loggers. Because of this, it is unnecessary to define and configure" +" handlers for all the loggers an application uses. It is sufficient to " +"configure handlers for a top-level logger and create child loggers as " +"needed. (You can, however, turn off propagation by setting the *propagate* " +"attribute of a logger to ``False``.)" +msgstr "" +"子记录器将消息传播到与其父级记录器关联的处理器。因此,不必为应用程序使用的所有记录器定义和配置处理器。一般为顶级记录器配置处理器,再根据需要创建子记录器就足够了。(但是,你可以通过将记录器的" +" *propagate* 属性设置为 ``False`` 来关闭传播。)" + +#: ../../howto/logging.rst:496 +msgid "Handlers" +msgstr "处理器" + +#: ../../howto/logging.rst:498 +msgid "" +":class:`~logging.Handler` objects are responsible for dispatching the " +"appropriate log messages (based on the log messages' severity) to the " +"handler's specified destination. :class:`Logger` objects can add zero or " +"more handler objects to themselves with an :meth:`~Logger.addHandler` " +"method. As an example scenario, an application may want to send all log " +"messages to a log file, all log messages of error or higher to stdout, and " +"all messages of critical to an email address. This scenario requires three " +"individual handlers where each handler is responsible for sending messages " +"of a specific severity to a specific location." +msgstr "" +":class:`~logging.Handler` 对象负责将适当的日志消息(基于日志消息的严重性)分派给处理器的指定目标。 " +":class:`Logger` 对象可以使用 :meth:`~Logger.addHandler` " +"方法向自己添加零个或多个处理器对象。作为示例场景,应用程序可能希望将所有日志消息发送到日志文件,将错误或更高的所有日志消息发送到标准输出,以及将所有关键消息发送至一个邮件地址。" +" 此方案需要三个单独的处理器,其中每个处理器负责将特定严重性的消息发送到特定位置。" + +#: ../../howto/logging.rst:508 +msgid "" +"The standard library includes quite a few handler types (see :ref:`useful-" +"handlers`); the tutorials use mainly :class:`StreamHandler` and " +":class:`FileHandler` in its examples." +msgstr "" +"标准库包含很多处理器类型(参见 :ref:`useful-handlers` );教程主要使用 :class:`StreamHandler` 和 " +":class:`FileHandler` 。" + +#: ../../howto/logging.rst:512 +msgid "" +"There are very few methods in a handler for application developers to " +"concern themselves with. The only handler methods that seem relevant for " +"application developers who are using the built-in handler objects (that is, " +"not creating custom handlers) are the following configuration methods:" +msgstr "处理器中很少有方法可供应用程序开发人员使用。使用内置处理器对象(即不创建自定义处理器)的应用程序开发人员能用到的仅有以下配置方法:" + +#: ../../howto/logging.rst:517 +msgid "" +"The :meth:`~Handler.setLevel` method, just as in logger objects, specifies " +"the lowest severity that will be dispatched to the appropriate destination." +" Why are there two :func:`setLevel` methods? The level set in the logger " +"determines which severity of messages it will pass to its handlers. The " +"level set in each handler determines which messages that handler will send " +"on." +msgstr "" +":meth:`~handler.setLevel` 方法,就像在记录器对象中一样,指定将被分派到适当目标的最低严重性。为什么有两个 " +":func:`setLevel` 方法?记录器中设置的级别确定将传递给其处理器的消息的严重性。每个处理器中设置的级别确定该处理器将发送哪些消息。" + +#: ../../howto/logging.rst:523 +msgid "" +":meth:`~Handler.setFormatter` selects a Formatter object for this handler to" +" use." +msgstr ":meth:`~Handler.setFormatter` 选择一个该处理器使用的 Formatter 对象。" + +#: ../../howto/logging.rst:526 +msgid "" +":meth:`~Handler.addFilter` and :meth:`~Handler.removeFilter` respectively " +"configure and deconfigure filter objects on handlers." +msgstr "" +":meth:`~Handler.addFilter` 和 :meth:`~Handler.removeFilter` " +"分别在处理器上配置和取消配置过滤器对象。" + +#: ../../howto/logging.rst:529 +msgid "" +"Application code should not directly instantiate and use instances of " +":class:`Handler`. Instead, the :class:`Handler` class is a base class that " +"defines the interface that all handlers should have and establishes some " +"default behavior that child classes can use (or override)." +msgstr "" +"应用程序代码不应直接实例化并使用 :class:`Handler` 的实例。 相反, :class:`Handler` " +"类是一个基类,它定义了所有处理器应该具有的接口,并建立了子类可以使用(或覆盖)的一些默认行为。" + +#: ../../howto/logging.rst:536 +msgid "Formatters" +msgstr "格式器" + +#: ../../howto/logging.rst:538 +msgid "" +"Formatter objects configure the final order, structure, and contents of the " +"log message. Unlike the base :class:`logging.Handler` class, application " +"code may instantiate formatter classes, although you could likely subclass " +"the formatter if your application needs special behavior. The constructor " +"takes three optional arguments -- a message format string, a date format " +"string and a style indicator." +msgstr "" +"格式化器对象配置日志消息的最终顺序、结构和内容。 与 :class:`logging.Handler` " +"类不同,应用程序代码可以实例化格式器类,但如果应用程序需要特殊行为,则可能会对格式化器进行子类化定制。构造函数有三个可选参数 —— " +"消息格式字符串、日期格式字符串和样式指示符。" + +#: ../../howto/logging.rst:547 +msgid "" +"If there is no message format string, the default is to use the raw message." +" If there is no date format string, the default date format is:" +msgstr "如果没有消息格式字符串,则默认使用原始消息。如果没有日期格式字符串,则默认日期格式为:" + +#: ../../howto/logging.rst:554 +msgid "" +"with the milliseconds tacked on at the end. The ``style`` is one of `%`, '{'" +" or '$'. If one of these is not specified, then '%' will be used." +msgstr "最后加上毫秒数。 ``style`` 是 `%`,'{ ' 或 '$' 之一。 如果未指定,则将使用 '%'。" + +#: ../../howto/logging.rst:557 +msgid "" +"If the ``style`` is '%', the message format string uses ``%()s`` styled string substitution; the possible keys are documented in " +":ref:`logrecord-attributes`. If the style is '{', the message format string " +"is assumed to be compatible with :meth:`str.format` (using keyword " +"arguments), while if the style is '$' then the message format string should " +"conform to what is expected by :meth:`string.Template.substitute`." +msgstr "" +"如果 ``style`` 是 '%',则消息格式字符串使用 ``%()s`` 样式字符串替换;可能的键值在 " +":ref:`logrecord-attributes` 中。 如果样式为 '{',则假定消息格式字符串与 :meth:`str.format` " +"(使用关键字参数)兼容,而如果样式为 '$' ,则消息格式字符串应符合 :meth:`string.Template.substitute` 。" + +#: ../../howto/logging.rst:564 +msgid "Added the ``style`` parameter." +msgstr "添加 ``style`` 形参。" + +#: ../../howto/logging.rst:567 +msgid "" +"The following message format string will log the time in a human-readable " +"format, the severity of the message, and the contents of the message, in " +"that order::" +msgstr "以下消息格式字符串将以人类可读的格式记录时间、消息的严重性以及消息的内容,按此顺序::" + +#: ../../howto/logging.rst:573 +msgid "" +"Formatters use a user-configurable function to convert the creation time of " +"a record to a tuple. By default, :func:`time.localtime` is used; to change " +"this for a particular formatter instance, set the ``converter`` attribute of" +" the instance to a function with the same signature as " +":func:`time.localtime` or :func:`time.gmtime`. To change it for all " +"formatters, for example if you want all logging times to be shown in GMT, " +"set the ``converter`` attribute in the Formatter class (to ``time.gmtime`` " +"for GMT display)." +msgstr "" +"格式器通过用户可配置的函数将记录的创建时间转换为元组。 默认情况下,使用 :func:`time.localtime` " +";要为特定格式器实例更改此项,请将实例的 ``converter`` 属性设置为与 :func:`time.localtime` 或 " +":func:`time.gmtime` 具有相同签名的函数。 要为所有格式器更改它,例如,如果你希望所有记录时间都以 GMT 显示,请在格式器类中设置 " +"``converter`` 属性(对于 GMT 显示,设置为 ``time.gmtime`` )。" + +#: ../../howto/logging.rst:583 +msgid "Configuring Logging" +msgstr "配置日志记录" + +#: ../../howto/logging.rst:587 +msgid "Programmers can configure logging in three ways:" +msgstr "开发者可以通过三种方式配置日志记录:" + +#: ../../howto/logging.rst:589 +msgid "" +"Creating loggers, handlers, and formatters explicitly using Python code that" +" calls the configuration methods listed above." +msgstr "使用调用上面列出的配置方法的 Python 代码显式创建记录器、处理器和格式器。" + +#: ../../howto/logging.rst:591 +msgid "" +"Creating a logging config file and reading it using the :func:`fileConfig` " +"function." +msgstr "创建日志配置文件并使用 :func:`fileConfig` 函数读取它。" + +#: ../../howto/logging.rst:593 +msgid "" +"Creating a dictionary of configuration information and passing it to the " +":func:`dictConfig` function." +msgstr "创建配置信息字典并将其传递给 :func:`dictConfig` 函数。" + +#: ../../howto/logging.rst:596 +msgid "" +"For the reference documentation on the last two options, see :ref:`logging-" +"config-api`. The following example configures a very simple logger, a " +"console handler, and a simple formatter using Python code::" +msgstr "" +"有关最后两个选项的参考文档,请参阅 :ref:`logging-config-api` 。 以下示例使用 Python " +"代码配置一个非常简单的记录器、一个控制台处理器和一个简单的格式器::" + +#: ../../howto/logging.rst:626 +msgid "" +"Running this module from the command line produces the following output:" +msgstr "从命令行运行此模块将生成以下输出:" + +#: ../../howto/logging.rst:637 +msgid "" +"The following Python module creates a logger, handler, and formatter nearly " +"identical to those in the example listed above, with the only difference " +"being the names of the objects::" +msgstr "以下 Python 模块创建的记录器、处理器和格式器几乎与上面列出的示例中的相同,唯一的区别是对象的名称::" + +#: ../../howto/logging.rst:656 +msgid "Here is the logging.conf file:" +msgstr "这是 logging.conf 文件:" + +#: ../../howto/logging.rst:689 +msgid "" +"The output is nearly identical to that of the non-config-file-based example:" +msgstr "其输出与不基于配置文件的示例几乎相同:" + +#: ../../howto/logging.rst:700 +msgid "" +"You can see that the config file approach has a few advantages over the " +"Python code approach, mainly separation of configuration and code and the " +"ability of noncoders to easily modify the logging properties." +msgstr "你可以看到配置文件方法相较于 Python 代码方法有一些优势,主要是配置和代码的分离以及非开发者轻松修改日志记录属性的能力。" + +#: ../../howto/logging.rst:704 +msgid "" +"The :func:`fileConfig` function takes a default parameter, " +"``disable_existing_loggers``, which defaults to ``True`` for reasons of " +"backward compatibility. This may or may not be what you want, since it will " +"cause any non-root loggers existing before the :func:`fileConfig` call to be" +" disabled unless they (or an ancestor) are explicitly named in the " +"configuration. Please refer to the reference documentation for more " +"information, and specify ``False`` for this parameter if you wish." +msgstr "" +":func:`fileConfig` 函数接受一个默认参数 ``disable_existing_loggers`` ,出于向后兼容的原因,默认为 " +"``True`` 。这可能与您的期望不同,因为除非在配置中明确命名它们(或其父级),否则它将导致在 :func:`fileConfig` " +"调用之前存在的任何非 root 记录器被禁用。有关更多信息,请参阅参考文档,如果需要,请将此参数指定为 ``False`` 。" + +#: ../../howto/logging.rst:712 +msgid "" +"The dictionary passed to :func:`dictConfig` can also specify a Boolean value" +" with key ``disable_existing_loggers``, which if not specified explicitly in" +" the dictionary also defaults to being interpreted as ``True``. This leads " +"to the logger-disabling behaviour described above, which may not be what you" +" want - in which case, provide the key explicitly with a value of ``False``." +msgstr "" +"传递给 :func:`dictConfig` 的字典也可以用键 ``disable_existing_loggers`` " +"指定一个布尔值,如果没有在字典中明确指定,也默认被解释为 ``True`` " +"。这会导致上面描述的记录器禁用行为,这可能与你的期望不同——在这种情况下,请明确地为其提供 ``False`` 值。" + +#: ../../howto/logging.rst:722 +msgid "" +"Note that the class names referenced in config files need to be either " +"relative to the logging module, or absolute values which can be resolved " +"using normal import mechanisms. Thus, you could use either " +":class:`~logging.handlers.WatchedFileHandler` (relative to the logging " +"module) or ``mypackage.mymodule.MyHandler`` (for a class defined in package " +"``mypackage`` and module ``mymodule``, where ``mypackage`` is available on " +"the Python import path)." +msgstr "" +"请注意,配置文件中引用的类名称需要相对于日志记录模块,或者可以使用常规导入机制解析的绝对值。因此,你可以使用 " +":class:`~logging.handlers.WatchedFileHandler` (相对于日志记录模块)或 " +"``mypackage.mymodule.MyHandler`` (对于在 ``mypackage`` 包中定义的类和模块 ``mymodule`` " +",其中 ``mypackage`` 在 Python 导入路径上可用)。" + +#: ../../howto/logging.rst:730 +msgid "" +"In Python 3.2, a new means of configuring logging has been introduced, using" +" dictionaries to hold configuration information. This provides a superset of" +" the functionality of the config-file-based approach outlined above, and is " +"the recommended configuration method for new applications and deployments. " +"Because a Python dictionary is used to hold configuration information, and " +"since you can populate that dictionary using different means, you have more " +"options for configuration. For example, you can use a configuration file in " +"JSON format, or, if you have access to YAML processing functionality, a file" +" in YAML format, to populate the configuration dictionary. Or, of course, " +"you can construct the dictionary in Python code, receive it in pickled form " +"over a socket, or use whatever approach makes sense for your application." +msgstr "" +"在 Python 3.2 中,引入了一种新的配置日志记录的方法,使用字典来保存配置信息。 " +"这提供了上述基于配置文件方法的功能的超集,并且是新应用程序和部署的推荐配置方法。 因为 Python " +"字典用于保存配置信息,并且由于你可以使用不同的方式填充该字典,因此你有更多的配置选项。 例如,你可以使用 JSON 格式的配置文件,或者如果你有权访问 " +"YAML 处理功能,则可以使用 YAML 格式的文件来填充配置字典。当然,你可以在 Python 代码中构造字典,通过套接字以 pickle " +"形式接收它,或者使用对你的应用程序合理的任何方法。" + +#: ../../howto/logging.rst:742 +msgid "" +"Here's an example of the same configuration as above, in YAML format for the" +" new dictionary-based approach:" +msgstr "以下是与上述相同配置的示例,采用 YAML 格式,用于新的基于字典的方法:" + +#: ../../howto/logging.rst:766 +msgid "" +"For more information about logging using a dictionary, see :ref:`logging-" +"config-api`." +msgstr "有关使用字典进行日志记录的更多信息,请参阅 :ref:`logging-config-api`。" + +#: ../../howto/logging.rst:770 +msgid "What happens if no configuration is provided" +msgstr "如果没有提供配置会发生什么" + +#: ../../howto/logging.rst:772 +msgid "" +"If no logging configuration is provided, it is possible to have a situation " +"where a logging event needs to be output, but no handlers can be found to " +"output the event. The behaviour of the logging package in these " +"circumstances is dependent on the Python version." +msgstr "" +"如果未提供日志记录配置,则可能出现需要输出日志记录事件但无法找到输出事件的处理器的情况。 在这些情况下,logging 包的行为取决于 Python " +"版本。" + +#: ../../howto/logging.rst:777 +msgid "For versions of Python prior to 3.2, the behaviour is as follows:" +msgstr "对于 3.2 之前的 Python 版本,行为如下:" + +#: ../../howto/logging.rst:779 +msgid "" +"If *logging.raiseExceptions* is ``False`` (production mode), the event is " +"silently dropped." +msgstr "如果 *logging.raiseExceptions* 为 ``False`` (生产模式),则会以静默方式丢弃该事件。" + +#: ../../howto/logging.rst:782 +msgid "" +"If *logging.raiseExceptions* is ``True`` (development mode), a message 'No " +"handlers could be found for logger X.Y.Z' is printed once." +msgstr "" +"如果 *logging.raiseExceptions* 为 ``True`` (开发模式),则会打印一条消息 'No handlers could " +"be found for logger X.Y.Z'。" + +#: ../../howto/logging.rst:785 +msgid "In Python 3.2 and later, the behaviour is as follows:" +msgstr "在 Python 3.2 及更高版本中,行为如下:" + +#: ../../howto/logging.rst:787 +msgid "" +"The event is output using a 'handler of last resort', stored in " +"``logging.lastResort``. This internal handler is not associated with any " +"logger, and acts like a :class:`~logging.StreamHandler` which writes the " +"event description message to the current value of ``sys.stderr`` (therefore " +"respecting any redirections which may be in effect). No formatting is done " +"on the message - just the bare event description message is printed. The " +"handler's level is set to ``WARNING``, so all events at this and greater " +"severities will be output." +msgstr "" +"事件使用 “最后的处理器” 输出,存储在 ``logging.lastResort`` 中。 这个内部处理器与任何记录器都没有关联,它的作用类似于 " +":class:`~logging.StreamHandler` ,它将事件描述消息写入 ``sys.stderr`` " +"的当前值(因此服从任何可能的重定向影响)。 没有对消息进行格式化——只打印裸事件描述消息。处理器的级别设置为 " +"``WARNING``,因此将输出此级别和更高级别的所有事件。" + +#: ../../howto/logging.rst:796 +msgid "" +"To obtain the pre-3.2 behaviour, ``logging.lastResort`` can be set to " +"``None``." +msgstr "要获得 3.2 之前的行为,可以设置 ``logging.lastResort`` 为 ``None``。" + +#: ../../howto/logging.rst:801 +msgid "Configuring Logging for a Library" +msgstr "为库配置日志" + +#: ../../howto/logging.rst:803 +msgid "" +"When developing a library which uses logging, you should take care to " +"document how the library uses logging - for example, the names of loggers " +"used. Some consideration also needs to be given to its logging " +"configuration. If the using application does not use logging, and library " +"code makes logging calls, then (as described in the previous section) events" +" of severity ``WARNING`` and greater will be printed to ``sys.stderr``. This" +" is regarded as the best default behaviour." +msgstr "" +"在开发带日志的库时,你应该在文档中详细说明,你的库会如何使用日志——例如,使用的记录器的名称。还需要考虑其日志配置。如果使用库的应用程序不使用日志,且库代码调用日志进行记录,那么(如上一节所述)严重性为" +" ``WARNING`` 和更高级别的事件将被打印到 ``sys.stderr``。这被认为是最好的默认行为。" + +#: ../../howto/logging.rst:811 +msgid "" +"If for some reason you *don't* want these messages printed in the absence of" +" any logging configuration, you can attach a do-nothing handler to the top-" +"level logger for your library. This avoids the message being printed, since " +"a handler will always be found for the library's events: it just doesn't " +"produce any output. If the library user configures logging for application " +"use, presumably that configuration will add some handlers, and if levels are" +" suitably configured then logging calls made in library code will send " +"output to those handlers, as normal." +msgstr "" +"如果由于某种原因,你 *不* " +"希望在没有任何日志记录配置的情况下打印这些消息,则可以将无操作处理器附加到库的顶级记录器。这样可以避免打印消息,因为将始终为库的事件找到处理器:它不会产生任何输出。如果库用户配置应用程序使用的日志记录,可能是配置将添加一些处理器,如果级别已适当配置,则在库代码中进行的日志记录调用将正常地将输出发送给这些处理器。" + +#: ../../howto/logging.rst:820 +msgid "" +"A do-nothing handler is included in the logging package: " +":class:`~logging.NullHandler` (since Python 3.1). An instance of this " +"handler could be added to the top-level logger of the logging namespace used" +" by the library (*if* you want to prevent your library's logged events being" +" output to ``sys.stderr`` in the absence of logging configuration). If all " +"logging by a library *foo* is done using loggers with names matching " +"'foo.x', 'foo.x.y', etc. then the code::" +msgstr "" +"日志包中包含一个不做任何事情的处理器: :class:`~logging.NullHandler` (自 Python 3.1 " +"起)。可以将此处理器的实例添加到库使用的日志记录命名空间的顶级记录器中( *如果* 你希望在没有日志记录配置的情况下阻止库的记录事件输出到 " +"``sys.stderr`` )。如果库 *foo* 的所有日志记录都是使用名称匹配 'foo.x' , 'foo.x.y' " +"等的记录器完成的,那么代码::" + +#: ../../howto/logging.rst:831 +msgid "" +"should have the desired effect. If an organisation produces a number of " +"libraries, then the logger name specified can be 'orgname.foo' rather than " +"just 'foo'." +msgstr "应该有预计的效果。如果一个组织生成了许多库,则指定的记录器名称可以是 “orgname.foo” 而不仅仅是 “foo” 。" + +#: ../../howto/logging.rst:835 +msgid "" +"It is strongly advised that you *do not add any handlers other than* " +":class:`~logging.NullHandler` *to your library's loggers*. This is because " +"the configuration of handlers is the prerogative of the application " +"developer who uses your library. The application developer knows their " +"target audience and what handlers are most appropriate for their " +"application: if you add handlers 'under the hood', you might well interfere " +"with their ability to carry out unit tests and deliver logs which suit their" +" requirements." +msgstr "" +"强烈建议你 *不要将* :class:`~logging.NullHandler` *以外的任何处理器添加到库的记录器中* " +"。这是因为处理器的配置是使用你的库的应用程序开发人员的权利。应用程序开发人员了解他们的目标受众以及哪些处理器最适合他们的应用程序:如果你在“底层”添加处理器,则可能会干扰他们执行单元测试和提供符合其要求的日志的能力。" + +#: ../../howto/logging.rst:846 +msgid "Logging Levels" +msgstr "日志级别" + +#: ../../howto/logging.rst:848 +msgid "" +"The numeric values of logging levels are given in the following table. These" +" are primarily of interest if you want to define your own levels, and need " +"them to have specific values relative to the predefined levels. If you " +"define a level with the same numeric value, it overwrites the predefined " +"value; the predefined name is lost." +msgstr "" +"日志记录级别的数值在下表中给出。如果你想要定义自己的级别,并且需要它们具有相对于预定义级别的特定值,那么这你可能对以下内容感兴趣。如果你定义具有相同数值的级别,它将覆盖预定义的值;预定义的名称将失效。" + +#: ../../howto/logging.rst:855 +msgid "Numeric value" +msgstr "数值" + +#: ../../howto/logging.rst:857 +msgid "50" +msgstr "50" + +#: ../../howto/logging.rst:859 +msgid "40" +msgstr "40" + +#: ../../howto/logging.rst:861 +msgid "30" +msgstr "30" + +#: ../../howto/logging.rst:863 +msgid "20" +msgstr "20" + +#: ../../howto/logging.rst:865 +msgid "10" +msgstr "10" + +#: ../../howto/logging.rst:867 +msgid "``NOTSET``" +msgstr "``NOTSET``" + +#: ../../howto/logging.rst:867 +msgid "0" +msgstr "0" + +#: ../../howto/logging.rst:870 +msgid "" +"Levels can also be associated with loggers, being set either by the " +"developer or through loading a saved logging configuration. When a logging " +"method is called on a logger, the logger compares its own level with the " +"level associated with the method call. If the logger's level is higher than " +"the method call's, no logging message is actually generated. This is the " +"basic mechanism controlling the verbosity of logging output." +msgstr "" +"级别也可以与记录器关联,可以由开发人员设置,也可以通过加载保存的日志配置来设置。在记录器上调用记录方法时,记录器会将自己的级别与调用的方法的级别进行比较。如果记录器的级别高于调用的方法的级别,则实际上不会生成任何记录消息。这是控制日志记录输出详细程度的基本机制。" + +#: ../../howto/logging.rst:877 +msgid "" +"Logging messages are encoded as instances of the :class:`~logging.LogRecord`" +" class. When a logger decides to actually log an event, a " +":class:`~logging.LogRecord` instance is created from the logging message." +msgstr "" +"日志消息被编码为 :class:`~logging.LogRecord` 类的实例。当记录器决定实际记录一个事件时,将从记录消息创建一个 " +":class:`~logging.LogRecord` 实例。" + +#: ../../howto/logging.rst:881 +msgid "" +"Logging messages are subjected to a dispatch mechanism through the use of " +":dfn:`handlers`, which are instances of subclasses of the :class:`Handler` " +"class. Handlers are responsible for ensuring that a logged message (in the " +"form of a :class:`LogRecord`) ends up in a particular location (or set of " +"locations) which is useful for the target audience for that message (such as" +" end users, support desk staff, system administrators, developers). Handlers" +" are passed :class:`LogRecord` instances intended for particular " +"destinations. Each logger can have zero, one or more handlers associated " +"with it (via the :meth:`~Logger.addHandler` method of :class:`Logger`). In " +"addition to any handlers directly associated with a logger, *all handlers " +"associated with all ancestors of the logger* are called to dispatch the " +"message (unless the *propagate* flag for a logger is set to a false value, " +"at which point the passing to ancestor handlers stops)." +msgstr "" +"使用 :class:`Handler` 类的子例的实例 :dfn:`handlers`,可以为日志消息建立分派机制。处理器负责确保记录的消息(以 " +":class:`LogRecord` " +"的形式)最终到达对该消息的目标受众(如最终用户、技术支持员工、系统管理员或开发人员)有用的一个或多个位置上。想要去到特定目标的 " +":class:`LogRecord` 实例会被传给相应的处理器。每个记录器可以有零、一或多个与之相关联的处理器(通过 :class:`Logger` 的" +" :meth:`~Logger.addHandler` 方法)。除了与记录器直接关联的所有处理器之外,还会将消息分派给 " +"*记录器的所有祖先关联的各个处理器*(除非某个记录器的 *propagate* 旗标被设为假值,这将使向祖先的传递在其处终止)。" + +#: ../../howto/logging.rst:895 +msgid "" +"Just as for loggers, handlers can have levels associated with them. A " +"handler's level acts as a filter in the same way as a logger's level does. " +"If a handler decides to actually dispatch an event, the " +":meth:`~Handler.emit` method is used to send the message to its destination." +" Most user-defined subclasses of :class:`Handler` will need to override this" +" :meth:`~Handler.emit`." +msgstr "" +"就像记录器一样,处理器可以具有与它们相关联的级别。处理器的级别作为过滤器,其方式与记录器级别相同。如果处理器决定调度一个事件,则使用 " +":meth:`~handler.emit` 方法将消息发送到其目标。大多数用户定义的 :class:`Handler` 子类都需要重写 " +":meth:`~handler.emit`。" + +#: ../../howto/logging.rst:904 +msgid "Custom Levels" +msgstr "自定义级别" + +#: ../../howto/logging.rst:906 +msgid "" +"Defining your own levels is possible, but should not be necessary, as the " +"existing levels have been chosen on the basis of practical experience. " +"However, if you are convinced that you need custom levels, great care should" +" be exercised when doing this, and it is possibly *a very bad idea to define" +" custom levels if you are developing a library*. That's because if multiple " +"library authors all define their own custom levels, there is a chance that " +"the logging output from such multiple libraries used together will be " +"difficult for the using developer to control and/or interpret, because a " +"given numeric value might mean different things for different libraries." +msgstr "" +"定义你自己的级别是可能的,但不一定是必要的,因为现有级别是根据实践经验选择的。但是,如果你确信需要自定义级别,那么在执行此操作时应特别小心,如果你正在开发库,则" +" *定义自定义级别可能是一个非常糟糕的主意* 。 " +"这是因为如果多个库作者都定义了他们自己的自定义级别,那么使用开发人员很难控制和解释这些多个库的日志记录输出,因为给定的数值对于不同的库可能意味着不同的东西。" + +#: ../../howto/logging.rst:919 +msgid "Useful Handlers" +msgstr "有用的处理器" + +#: ../../howto/logging.rst:921 +msgid "" +"In addition to the base :class:`Handler` class, many useful subclasses are " +"provided:" +msgstr "作为 :class:`Handler` 基类的补充,提供了很多有用的子类:" + +#: ../../howto/logging.rst:924 +msgid "" +":class:`StreamHandler` instances send messages to streams (file-like " +"objects)." +msgstr ":class:`StreamHandler` 实例发送消息到流(类似文件对象)。" + +#: ../../howto/logging.rst:927 +msgid ":class:`FileHandler` instances send messages to disk files." +msgstr ":class:`FileHandler` 实例将消息发送到硬盘文件。" + +#: ../../howto/logging.rst:929 +msgid "" +":class:`~handlers.BaseRotatingHandler` is the base class for handlers that " +"rotate log files at a certain point. It is not meant to be instantiated " +"directly. Instead, use :class:`~handlers.RotatingFileHandler` or " +":class:`~handlers.TimedRotatingFileHandler`." +msgstr "" +":class:`~handlers.BaseRotatingHandler` 是轮换日志文件的处理器的基类。它并不应该直接实例化。而应该使用 " +":class:`~handlers.RotatingFileHandler` 或 " +":class:`~handlers.TimedRotatingFileHandler` 代替它。" + +#: ../../howto/logging.rst:934 +msgid "" +":class:`~handlers.RotatingFileHandler` instances send messages to disk " +"files, with support for maximum log file sizes and log file rotation." +msgstr "" +":class:`~handlers.RotatingFileHandler` 实例将消息发送到硬盘文件,支持最大日志文件大小和日志文件轮换。" + +#: ../../howto/logging.rst:937 +msgid "" +":class:`~handlers.TimedRotatingFileHandler` instances send messages to disk " +"files, rotating the log file at certain timed intervals." +msgstr "" +":class:`~handlers.TimedRotatingFileHandler` 实例将消息发送到硬盘文件,以特定的时间间隔轮换日志文件。" + +#: ../../howto/logging.rst:940 +msgid "" +":class:`~handlers.SocketHandler` instances send messages to TCP/IP sockets. " +"Since 3.4, Unix domain sockets are also supported." +msgstr "" +":class:`~handlers.SocketHandler` 实例将消息发送到 TCP/IP 套接字。从 3.4 开始,也支持 Unix 域套接字。" + +#: ../../howto/logging.rst:943 +msgid "" +":class:`~handlers.DatagramHandler` instances send messages to UDP sockets. " +"Since 3.4, Unix domain sockets are also supported." +msgstr "" +":class:`~handlers.DatagramHandler` 实例将消息发送到 UDP 套接字。从 3.4 开始,也支持 Unix 域套接字。" + +#: ../../howto/logging.rst:946 +msgid "" +":class:`~handlers.SMTPHandler` instances send messages to a designated email" +" address." +msgstr ":class:`~handlers.SMTPHandler` 实例将消息发送到指定的电子邮件地址。" + +#: ../../howto/logging.rst:949 +msgid "" +":class:`~handlers.SysLogHandler` instances send messages to a Unix syslog " +"daemon, possibly on a remote machine." +msgstr ":class:`~handlers.SysLogHandler` 实例将消息发送到 Unix syslog 守护程序,可能在远程计算机上。" + +#: ../../howto/logging.rst:952 +msgid "" +":class:`~handlers.NTEventLogHandler` instances send messages to a Windows " +"NT/2000/XP event log." +msgstr "" +":class:`~handlers.NTEventLogHandler` 实例将消息发送到 Windows NT/2000/XP 事件日志。" + +#: ../../howto/logging.rst:955 +msgid "" +":class:`~handlers.MemoryHandler` instances send messages to a buffer in " +"memory, which is flushed whenever specific criteria are met." +msgstr ":class:`~handlers.MemoryHandler` 实例将消息发送到内存中的缓冲区,只要满足特定条件,缓冲区就会刷新。" + +#: ../../howto/logging.rst:958 +msgid "" +":class:`~handlers.HTTPHandler` instances send messages to an HTTP server " +"using either ``GET`` or ``POST`` semantics." +msgstr "" +":class:`~handlers.HTTPHandler` 实例使用 ``GET`` 或 ``POST`` 方法将消息发送到 HTTP 服务器。" + +#: ../../howto/logging.rst:961 +msgid "" +":class:`~handlers.WatchedFileHandler` instances watch the file they are " +"logging to. If the file changes, it is closed and reopened using the file " +"name. This handler is only useful on Unix-like systems; Windows does not " +"support the underlying mechanism used." +msgstr "" +":class:`~handlers.WatchedFileHandler` " +"实例会监视他们要写入日志的文件。如果文件发生更改,则会关闭该文件并使用文件名重新打开。此处理器仅在类 Unix 系统上有用; Windows " +"不支持依赖的基础机制。" + +#: ../../howto/logging.rst:966 +msgid "" +":class:`~handlers.QueueHandler` instances send messages to a queue, such as " +"those implemented in the :mod:`queue` or :mod:`multiprocessing` modules." +msgstr "" +":class:`~handlers.QueueHandler` 实例将消息发送到队列,例如在 :mod:`queue` 或 " +":mod:`multiprocessing` 模块中实现的队列。" + +#: ../../howto/logging.rst:969 +msgid "" +":class:`NullHandler` instances do nothing with error messages. They are used" +" by library developers who want to use logging, but want to avoid the 'No " +"handlers could be found for logger XXX' message which can be displayed if " +"the library user has not configured logging. See :ref:`library-config` for " +"more information." +msgstr "" +":class:`NullHandler` " +"实例对错误消息不执行任何操作。它们由想要使用日志记录的库开发人员使用,但是想要避免如果库用户没有配置日志记录,则显示 'No handlers " +"could be found for logger XXX' 消息的情况。更多有关信息,请参阅 :ref:`library-config` 。" + +#: ../../howto/logging.rst:975 +msgid "The :class:`NullHandler` class." +msgstr ":class:`NullHandler` 类。" + +#: ../../howto/logging.rst:978 +msgid "The :class:`~handlers.QueueHandler` class." +msgstr ":class:`~handlers.QueueHandler` 类。" + +#: ../../howto/logging.rst:981 +msgid "" +"The :class:`NullHandler`, :class:`StreamHandler` and :class:`FileHandler` " +"classes are defined in the core logging package. The other handlers are " +"defined in a sub-module, :mod:`logging.handlers`. (There is also another " +"sub-module, :mod:`logging.config`, for configuration functionality.)" +msgstr "" +"The :class:`NullHandler` 、 :class:`StreamHandler` 和 :class:`FileHandler` " +"类在核心日志包中定义。其他处理器定义在 :mod:`logging.handlers` 中。(还有另一个子模块 " +":mod:`logging.config` ,用于配置功能)" + +#: ../../howto/logging.rst:986 +msgid "" +"Logged messages are formatted for presentation through instances of the " +":class:`Formatter` class. They are initialized with a format string suitable" +" for use with the % operator and a dictionary." +msgstr "" +"记录的消息通过 :class:`Formatter` 类的实例进行格式化后呈现。 它们使用能与 % 运算符一起使用的格式字符串和字典进行初始化。" + +#: ../../howto/logging.rst:990 +msgid "" +"For formatting multiple messages in a batch, instances of " +":class:`~handlers.BufferingFormatter` can be used. In addition to the format" +" string (which is applied to each message in the batch), there is provision " +"for header and trailer format strings." +msgstr "" +"要批量格式化多个消息,可以使用 :class:`~handlers.BufferingFormatter` " +"的实例。除了格式字符串(应用于批处理中的每个消息)之外,还提供了标题和尾部格式字符串。" + +#: ../../howto/logging.rst:995 +msgid "" +"When filtering based on logger level and/or handler level is not enough, " +"instances of :class:`Filter` can be added to both :class:`Logger` and " +":class:`Handler` instances (through their :meth:`~Handler.addFilter` " +"method). Before deciding to process a message further, both loggers and " +"handlers consult all their filters for permission. If any filter returns a " +"false value, the message is not processed further." +msgstr "" +"当基于记录器级别和处理器级别的过滤不够时,可以将 :class:`Filter` 的实例添加到 :class:`Logger` 和 " +":class:`Handler` 实例(通过它们的 :meth:`~Handler.addFilter` " +"方法)。在决定进一步处理消息之前,记录器和处理器都会查询其所有过滤器以获得许可。如果任何过滤器返回 false 值,则不会进一步处理该消息。" + +#: ../../howto/logging.rst:1002 +msgid "" +"The basic :class:`Filter` functionality allows filtering by specific logger " +"name. If this feature is used, messages sent to the named logger and its " +"children are allowed through the filter, and all others dropped." +msgstr "" +"基本 :class:`Filter` " +"的功能允许按特定的记录器名称进行过滤。如果使用此功能,则允许通过过滤器发送到指定记录器及其子项的消息,并丢弃其他所有消息。" + +#: ../../howto/logging.rst:1010 +msgid "Exceptions raised during logging" +msgstr "记录日志时引发的异常" + +#: ../../howto/logging.rst:1012 +msgid "" +"The logging package is designed to swallow exceptions which occur while " +"logging in production. This is so that errors which occur while handling " +"logging events - such as logging misconfiguration, network or other similar " +"errors - do not cause the application using logging to terminate " +"prematurely." +msgstr "" +"logging " +"包被设计为,当在生产环境下使用时,忽略记录日志时发生的异常。这样,处理与日志相关的事件时发生的错误(例如日志配置错误、网络或其它类似错误)不会导致使用日志的应用程序终止。" + +#: ../../howto/logging.rst:1017 +msgid "" +":class:`SystemExit` and :class:`KeyboardInterrupt` exceptions are never " +"swallowed. Other exceptions which occur during the :meth:`~Handler.emit` " +"method of a :class:`Handler` subclass are passed to its " +":meth:`~Handler.handleError` method." +msgstr "" +":class:`SystemExit` 和 :class:`KeyboardInterrupt` 异常永远不会被忽略。在 " +":class:`Handler` 的子类的 :meth:`~handler.emit` 方法中发生的其它异常将被传递给其 " +":meth:`~handler.handleError` 方法。" + +#: ../../howto/logging.rst:1022 +msgid "" +"The default implementation of :meth:`~Handler.handleError` in " +":class:`Handler` checks to see if a module-level variable, " +":data:`raiseExceptions`, is set. If set, a traceback is printed to " +":data:`sys.stderr`. If not set, the exception is swallowed." +msgstr "" +":class:`Handler` 中的 :meth:`~handler.handleError` 的默认实现是检查是否设置了模块级变量 " +":data:`raiseExceptions`。如有设置,则会将回溯打印到 :data:`sys.stderr`。如果未设置,则忽略异常。" + +#: ../../howto/logging.rst:1027 +msgid "" +"The default value of :data:`raiseExceptions` is ``True``. This is because " +"during development, you typically want to be notified of any exceptions that" +" occur. It's advised that you set :data:`raiseExceptions` to ``False`` for " +"production usage." +msgstr "" +":data:`raiseExceptions` 的默认值是 ``True``。这是因为在开发期间,你通常想要在发生异常时收到通知。建议你将 " +":data:`raiseExceptions` 设为 ``False`` 供生产环境下使用。" + +#: ../../howto/logging.rst:1037 +msgid "Using arbitrary objects as messages" +msgstr "使用任意对象作为消息" + +#: ../../howto/logging.rst:1039 +msgid "" +"In the preceding sections and examples, it has been assumed that the message" +" passed when logging the event is a string. However, this is not the only " +"possibility. You can pass an arbitrary object as a message, and its " +":meth:`~object.__str__` method will be called when the logging system needs " +"to convert it to a string representation. In fact, if you want to, you can " +"avoid computing a string representation altogether - for example, the " +":class:`~handlers.SocketHandler` emits an event by pickling it and sending " +"it over the wire." +msgstr "" +"在前面的部分和示例中,都假设记录事件时传递的消息是字符串。 " +"但是,这不是唯一的可能性。你可以将任意对象作为消息传递,并且当日志记录系统需要将其转换为字符串表示时,将调用其 :meth:`~object .__ " +"str__` 方法。实际上,如果你愿意,你可以完全避免计算字符串表示。例如, :class:`~handlers.SocketHandler` 用 " +"pickle 处理事件后,通过网络发送。" + +#: ../../howto/logging.rst:1050 +msgid "Optimization" +msgstr "优化" + +#: ../../howto/logging.rst:1052 +msgid "" +"Formatting of message arguments is deferred until it cannot be avoided. " +"However, computing the arguments passed to the logging method can also be " +"expensive, and you may want to avoid doing it if the logger will just throw " +"away your event. To decide what to do, you can call the " +":meth:`~Logger.isEnabledFor` method which takes a level argument and returns" +" true if the event would be created by the Logger for that level of call. " +"You can write code like this::" +msgstr "" +"消息参数的格式化将被推迟,直到无法避免。但是,计算传递给日志记录方法的参数也可能很消耗资源,如果记录器只是丢弃你的事件,你可能希望避免这样做。要决定做什么,可以调用" +" :meth:`~Logger.isEnabledFor` 方法,该方法接受一个 level 参数,如果记录器为该级别的调用创建了该事件,则返回 " +"true 。 你可以写这样的代码::" + +#: ../../howto/logging.rst:1064 +msgid "" +"so that if the logger's threshold is set above ``DEBUG``, the calls to " +":func:`expensive_func1` and :func:`expensive_func2` are never made." +msgstr "" +"因此,如果记录器的阈值设置在“DEBUG”以上,则永远不会调用 :func:`expensive_func1` 和 " +":func:`expensive_func2` 。" + +#: ../../howto/logging.rst:1067 +msgid "" +"In some cases, :meth:`~Logger.isEnabledFor` can itself be more expensive " +"than you'd like (e.g. for deeply nested loggers where an explicit level is " +"only set high up in the logger hierarchy). In such cases (or if you want to " +"avoid calling a method in tight loops), you can cache the result of a call " +"to :meth:`~Logger.isEnabledFor` in a local or instance variable, and use " +"that instead of calling the method each time. Such a cached value would only" +" need to be recomputed when the logging configuration changes dynamically " +"while the application is running (which is not all that common)." +msgstr "" +"在某些情况下, :meth:`~Logger.isEnabledFor` " +"本身可能比你想要的更消耗资源(例如,对于深度嵌套的记录器,其中仅在记录器层次结构中设置了显式级别)。在这种情况下(或者如果你想避免在紧密循环中调用方法),你可以在本地或实例变量中将调用的结果缓存到" +" :meth:`~Logger.isEnabledFor` " +",并使用它而不是每次调用方法。在日志记录配置在应用程序运行时动态更改(这不常见)时,只需要重新计算这样的缓存值即可。" + +#: ../../howto/logging.rst:1076 +msgid "" +"There are other optimizations which can be made for specific applications " +"which need more precise control over what logging information is collected. " +"Here's a list of things you can do to avoid processing during logging which " +"you don't need:" +msgstr "对于需要对收集的日志信息进行更精确控制的特定应用程序,还可以进行其他优化。以下列出了在日志记录过程中您可以避免的非必须处理操作:" + +#: ../../howto/logging.rst:1082 +msgid "What you don't want to collect" +msgstr "你不想收集的内容" + +#: ../../howto/logging.rst:1082 +msgid "How to avoid collecting it" +msgstr "如何避免收集它" + +#: ../../howto/logging.rst:1084 +msgid "Information about where calls were made from." +msgstr "有关调用来源的信息" + +#: ../../howto/logging.rst:1084 +msgid "" +"Set ``logging._srcfile`` to ``None``. This avoids calling " +":func:`sys._getframe`, which may help to speed up your code in environments " +"like PyPy (which can't speed up code that uses :func:`sys._getframe`)." +msgstr "" +"将 ``logging._srcfile`` 设置为 ``None`` 。这避免了调用 :func:`sys._getframe` ,如果 PyPy " +"支持 Python 3.x ,这可能有助于加速 PyPy (无法加速使用 :func:`sys._getframe` 的代码)等环境中的代码。" + +#: ../../howto/logging.rst:1091 +msgid "Threading information." +msgstr "线程信息" + +#: ../../howto/logging.rst:1091 +msgid "Set ``logging.logThreads`` to ``0``." +msgstr "将 ``logging.logThreads`` 置为 ``0`` 。" + +#: ../../howto/logging.rst:1093 +msgid "Process information." +msgstr "进程信息" + +#: ../../howto/logging.rst:1093 +msgid "Set ``logging.logProcesses`` to ``0``." +msgstr "将 ``logging.logProcesses`` 置为 ``0`` 。" + +#: ../../howto/logging.rst:1096 +msgid "" +"Also note that the core logging module only includes the basic handlers. If " +"you don't import :mod:`logging.handlers` and :mod:`logging.config`, they " +"won't take up any memory." +msgstr "" +"另请注意,核心日志记录模块仅包含基本处理器。如果你不导入 :mod:`logging.handlers` 和 :mod:`logging.config`" +" ,它们将不会占用任何内存。" + +#: ../../howto/logging.rst:1103 +msgid "Module :mod:`logging`" +msgstr "模块 :mod:`logging`" + +#: ../../howto/logging.rst:1103 +msgid "API reference for the logging module." +msgstr "日志记录模块的 API 参考。" + +#: ../../howto/logging.rst:1106 +msgid "Module :mod:`logging.config`" +msgstr ":mod:`logging.config` 模块" + +#: ../../howto/logging.rst:1106 +msgid "Configuration API for the logging module." +msgstr "日志记录模块的配置 API 。" + +#: ../../howto/logging.rst:1109 +msgid "Module :mod:`logging.handlers`" +msgstr ":mod:`logging.handlers` 模块" + +#: ../../howto/logging.rst:1109 +msgid "Useful handlers included with the logging module." +msgstr "日志记录模块附带的有用处理器。" + +#: ../../howto/logging.rst:1111 +msgid ":ref:`A logging cookbook `" +msgstr ":ref:`日志操作手册 `" diff --git a/howto/pyporting.po b/howto/pyporting.po new file mode 100644 index 000000000..164dc9c08 --- /dev/null +++ b/howto/pyporting.po @@ -0,0 +1,779 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) 2001-2022, Python Software Foundation +# This file is distributed under the same license as the Python package. +# FIRST AUTHOR , YEAR. +# +# Translators: +# telnetning , 2018 +# df2dc1c92e792f7ae8417c51df43db8f_594d92a <0f49be28017426edb1db1a2ab6e67088_717605>, 2018 +# Sonny <758896823@qq.com>, 2019 +# Shengjing Zhu , 2019 +# ppcfish , 2019 +# Alpha Du , 2021 +# Freesand Leo , 2021 +# +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: Python 3.9\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2022-11-04 14:34+0000\n" +"PO-Revision-Date: 2017-02-16 17:45+0000\n" +"Last-Translator: Freesand Leo , 2021\n" +"Language-Team: Chinese (China) (https://www.transifex.com/python-doc/teams/5390/zh_CN/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: zh_CN\n" +"Plural-Forms: nplurals=1; plural=0;\n" + +#: ../../howto/pyporting.rst:5 +msgid "Porting Python 2 Code to Python 3" +msgstr "将 Python 2 代码迁移到 Python 3" + +#: ../../howto/pyporting.rst:0 +msgid "author" +msgstr "作者" + +#: ../../howto/pyporting.rst:7 +msgid "Brett Cannon" +msgstr "Brett Cannon" + +#: ../../howto/pyporting.rstNone +msgid "Abstract" +msgstr "摘要" + +#: ../../howto/pyporting.rst:11 +msgid "" +"With Python 3 being the future of Python while Python 2 is still in active " +"use, it is good to have your project available for both major releases of " +"Python. This guide is meant to help you figure out how best to support both " +"Python 2 & 3 simultaneously." +msgstr "" +"Python 3 是 Python 的未来,但 Python 2 仍处于活跃使用阶段,最好让您的项目在两个主要版本的Python " +"上都可用。本指南旨在帮助您了解如何最好地同时支持 Python 2 和 3。" + +#: ../../howto/pyporting.rst:16 +msgid "" +"If you are looking to port an extension module instead of pure Python code, " +"please see :ref:`cporting-howto`." +msgstr "如果您希望迁移扩展模块而不是纯 Python 代码,请参阅 :ref:`cporting-howto`。" + +#: ../../howto/pyporting.rst:19 +msgid "" +"If you would like to read one core Python developer's take on why Python 3 " +"came into existence, you can read Nick Coghlan's `Python 3 Q & A`_ or Brett " +"Cannon's `Why Python 3 exists`_." +msgstr "" +"如果你想了解核心 Python 开发者对于 Python 3 的出现有何看法,你可以阅读 Nick Coghlan 的 `Python 3 Q & " +"A`_ 或 Brett Cannon 的 `为什么要有 Python 3`_." + +#: ../../howto/pyporting.rst:24 +msgid "" +"For help with porting, you can view the archived python-porting_ mailing " +"list." +msgstr "关于迁移的帮助,你可以查看存档的 python-porting_ 邮件列表。" + +#: ../../howto/pyporting.rst:27 +msgid "The Short Explanation" +msgstr "简要说明" + +#: ../../howto/pyporting.rst:29 +msgid "" +"To make your project be single-source Python 2/3 compatible, the basic steps" +" are:" +msgstr "为了使你的项目与单源Python 2/3兼容,基本步骤如下:" + +#: ../../howto/pyporting.rst:32 +msgid "Only worry about supporting Python 2.7" +msgstr "只担心支持Python 2.7的问题" + +#: ../../howto/pyporting.rst:33 +msgid "" +"Make sure you have good test coverage (coverage.py_ can help; ``python -m " +"pip install coverage``)" +msgstr "确保你有良好的测试覆盖率(可以用 coverage.py_;``python -m pip install coverage``)。" + +#: ../../howto/pyporting.rst:35 ../../howto/pyporting.rst:122 +msgid "Learn the differences between Python 2 & 3" +msgstr "了解Python 2 和 3之间的区别" + +#: ../../howto/pyporting.rst:36 +msgid "" +"Use Futurize_ (or Modernize_) to update your code (e.g. ``python -m pip " +"install future``)" +msgstr "" +"使用 Futurize_ (或Modernize_) 来更新你的代码 (例如``python -m pip install future``)。" + +#: ../../howto/pyporting.rst:37 +msgid "" +"Use Pylint_ to help make sure you don't regress on your Python 3 support " +"(``python -m pip install pylint``)" +msgstr "使用 Pylint_ 来帮助确保你在Python 3支持上不倒退(``python -m pip install pylint``)" + +#: ../../howto/pyporting.rst:39 +msgid "" +"Use caniusepython3_ to find out which of your dependencies are blocking your" +" use of Python 3 (``python -m pip install caniusepython3``)" +msgstr "" +"使用 caniusepython3_ 来找出你的哪些依赖关系阻碍了你对 Python 3 的使用 (``python -m pip install " +"caniusepython3``)" + +#: ../../howto/pyporting.rst:41 +msgid "" +"Once your dependencies are no longer blocking you, use continuous " +"integration to make sure you stay compatible with Python 2 & 3 (tox_ can " +"help test against multiple versions of Python; ``python -m pip install " +"tox``)" +msgstr "" +"一旦你的依赖性不再阻碍你,使用持续集成来确保你与 Python 2 和 3 保持兼容 (tox_ 可以帮助对多个版本的 Python " +"进行测试;``python -m pip install tox``)" + +#: ../../howto/pyporting.rst:44 +msgid "" +"Consider using optional static type checking to make sure your type usage " +"works in both Python 2 & 3 (e.g. use mypy_ to check your typing under both " +"Python 2 & Python 3; ``python -m pip install mypy``)." +msgstr "" +"考虑使用可选的静态类型检查,以确保你的类型用法在 Python 2 和 3 中都适用 (例如,使用 mypy_ 来检查你在 Python 2 和 " +"Python 3 中的类型;``python -m pip install mypy``)。" + +#: ../../howto/pyporting.rst:50 +msgid "" +"Note: Using ``python -m pip install`` guarantees that the ``pip`` you invoke" +" is the one installed for the Python currently in use, whether it be a " +"system-wide ``pip`` or one installed within a :ref:`virtual environment " +"`." +msgstr "" +"注意:使用 ``python -m pip install`` 来确保你发起调用的 ``pip`` 就是当前使用的 Python " +"所安装的那一个,无论它是系统级的 ``pip`` 还是安装在 :ref:`虚拟环境 ` 中的。" + +#: ../../howto/pyporting.rst:56 +msgid "Details" +msgstr "详情" + +#: ../../howto/pyporting.rst:58 +msgid "" +"A key point about supporting Python 2 & 3 simultaneously is that you can " +"start **today**! Even if your dependencies are not supporting Python 3 yet " +"that does not mean you can't modernize your code **now** to support Python " +"3. Most changes required to support Python 3 lead to cleaner code using " +"newer practices even in Python 2 code." +msgstr "" +"同时支持Python 2和3的一个关键点是,你可以从**今天**开始!即使你的依赖关系还不支持Python " +"3,也不意味着你不能现在就对你的代码进行现代化改造以支持Python 3。支持Python 3所需的大多数变化都会使代码更干净,甚至在Python " +"2的代码中也会使用更新的做法。" + +#: ../../howto/pyporting.rst:64 +msgid "" +"Another key point is that modernizing your Python 2 code to also support " +"Python 3 is largely automated for you. While you might have to make some API" +" decisions thanks to Python 3 clarifying text data versus binary data, the " +"lower-level work is now mostly done for you and thus can at least benefit " +"from the automated changes immediately." +msgstr "" +"另一个关键点是,使你的Python 2代码现代化以支持Python 3在很大程度上是为你自动化的。虽然由于Python " +"3清晰区分了文本数据与二进制数据,你可能必须做出一些API决定。但现在已经为你完成了大部分低级别的工作,因此至少可以立即从自动化变化中受益。" + +#: ../../howto/pyporting.rst:70 +msgid "" +"Keep those key points in mind while you read on about the details of porting" +" your code to support Python 2 & 3 simultaneously." +msgstr "当你继续阅读关于迁移你的代码以同时支持Python 2和3的细节时,请牢记这些关键点。" + +#: ../../howto/pyporting.rst:75 +msgid "Drop support for Python 2.6 and older" +msgstr "删除对Python 2.6及更早版本的支持" + +#: ../../howto/pyporting.rst:77 +msgid "" +"While you can make Python 2.5 work with Python 3, it is **much** easier if " +"you only have to work with Python 2.7. If dropping Python 2.5 is not an " +"option then the six_ project can help you support Python 2.5 & 3 " +"simultaneously (``python -m pip install six``). Do realize, though, that " +"nearly all the projects listed in this HOWTO will not be available to you." +msgstr "" +"虽然你可以让 Python 2.5 与 Python 3 一起工作,但如果你只需要与 Python 2.7 一起工作,那就会 **更加容易**。 " +"如果放弃 Python 2.5 不是一种选择,那么 six_ 项目可以帮助你同时支持 Python 2.5 和 3 (``python -m pip " +"install six``)。 不过请注意,本 HOWTO 中列出的几乎所有项目都有可能会不再可用。" + +#: ../../howto/pyporting.rst:83 +msgid "" +"If you are able to skip Python 2.5 and older, then the required changes to " +"your code should continue to look and feel like idiomatic Python code. At " +"worst you will have to use a function instead of a method in some instances " +"or have to import a function instead of using a built-in one, but otherwise " +"the overall transformation should not feel foreign to you." +msgstr "" +"如果你能够跳过Python " +"2.5和更早的版本,那么对你的代码所做的必要修改应该看起来和感觉上都是你已经习惯的Python代码。在最坏的情况下,你将不得不使用一个函数而不是一个实例方法,或者不得不导入一个函数而不是使用一个内置的函数,但除此之外,整体的转变应该不会让你感到陌生。" + +#: ../../howto/pyporting.rst:89 +msgid "" +"But you should aim for only supporting Python 2.7. Python 2.6 is no longer " +"freely supported and thus is not receiving bugfixes. This means **you** will" +" have to work around any issues you come across with Python 2.6. There are " +"also some tools mentioned in this HOWTO which do not support Python 2.6 " +"(e.g., Pylint_), and this will become more commonplace as time goes on. It " +"will simply be easier for you if you only support the versions of Python " +"that you have to support." +msgstr "" +"但你的目标应该是只支持 Python 2.7。Python 2.6 不再被免费支持,因此也就没有得到错误修复。这意味着**你**必须解决你在Python" +" 2.6上遇到的任何问题。本HOWTO中提到的一些工具也不支持Python 2.6 " +"(例如,Pylint_),随着时间的推移,这将变得越来越普遍。如果你只支持你必须支持的Python版本,那么对你来说会更容易。" + +#: ../../howto/pyporting.rst:98 +msgid "" +"Make sure you specify the proper version support in your ``setup.py`` file" +msgstr "确保你在你的``setup.py``文件中指定适当的版本支持" + +#: ../../howto/pyporting.rst:100 +msgid "" +"In your ``setup.py`` file you should have the proper `trove classifier`_ " +"specifying what versions of Python you support. As your project does not " +"support Python 3 yet you should at least have ``Programming Language :: " +"Python :: 2 :: Only`` specified. Ideally you should also specify each " +"major/minor version of Python that you do support, e.g. ``Programming " +"Language :: Python :: 2.7``." +msgstr "" +"在你的``setup.py``文件中,你应该有适当的 `trove classifier`_ 指定你支持哪些版本的 Python。由于你的项目还不支持 " +"Python 3,你至少应该指定``Programming Language :: Python :: 2 :: " +"Only``。理想情况下,你还应该指定你所支持的Python的每个主要/次要版本,例如:``Programming Language :: Python" +" :: 2.7``。." + +#: ../../howto/pyporting.rst:109 +msgid "Have good test coverage" +msgstr "良好的测试覆盖率" + +#: ../../howto/pyporting.rst:111 +msgid "" +"Once you have your code supporting the oldest version of Python 2 you want " +"it to, you will want to make sure your test suite has good coverage. A good " +"rule of thumb is that if you want to be confident enough in your test suite " +"that any failures that appear after having tools rewrite your code are " +"actual bugs in the tools and not in your code. If you want a number to aim " +"for, try to get over 80% coverage (and don't feel bad if you find it hard to" +" get better than 90% coverage). If you don't already have a tool to measure " +"test coverage then coverage.py_ is recommended." +msgstr "" +"一旦你的代码支持了你希望的Python " +"2的最老版本,你将希望确保你的测试套件有良好的覆盖率。一个好的经验法则是,如果你想对你的测试套件有足够的信心,在让工具重写你的代码后出现的任何故障都是工具中的实际错误,而不是你的代码中的错误。如果你想要一个目标数字,试着获得超过80%的覆盖率(如果你发现很难获得好于90%的覆盖率,也不要感到遗憾)。如果你还没有一个测量测试覆盖率的工具,那么推荐使用coverage.py_。" + +#: ../../howto/pyporting.rst:124 +msgid "" +"Once you have your code well-tested you are ready to begin porting your code" +" to Python 3! But to fully understand how your code is going to change and " +"what you want to look out for while you code, you will want to learn what " +"changes Python 3 makes in terms of Python 2. Typically the two best ways of " +"doing that is reading the :ref:`\"What's New\" ` doc for " +"each release of Python 3 and the `Porting to Python 3`_ book (which is free " +"online). There is also a handy `cheat sheet`_ from the Python-Future " +"project." +msgstr "" +"一旦你的代码经过了很好的测试,你就可以开始把你的代码移植到 Python 3 上了! " +"但是为了充分了解你的代码将发生怎样的变化,以及你在编码时要注意什么,你将会想要了解 Python 3 相比 Python 2 的变化。 " +"通常来说,两个最好的方法是阅读 Python 3 每个版本的 :ref:`\"What's New\" ` 文档和 " +"`Porting to Python 3`_ 书(在线免费版本)。还有一个来自 Python-Future 项目的便利 `cheat sheet`_。" + +#: ../../howto/pyporting.rst:134 +msgid "Update your code" +msgstr "更新代码" + +#: ../../howto/pyporting.rst:136 +msgid "" +"Once you feel like you know what is different in Python 3 compared to Python" +" 2, it's time to update your code! You have a choice between two tools in " +"porting your code automatically: Futurize_ and Modernize_. Which tool you " +"choose will depend on how much like Python 3 you want your code to be. " +"Futurize_ does its best to make Python 3 idioms and practices exist in " +"Python 2, e.g. backporting the ``bytes`` type from Python 3 so that you have" +" semantic parity between the major versions of Python. Modernize_, on the " +"other hand, is more conservative and targets a Python 2/3 subset of Python, " +"directly relying on six_ to help provide compatibility. As Python 3 is the " +"future, it might be best to consider Futurize to begin adjusting to any new " +"practices that Python 3 introduces which you are not accustomed to yet." +msgstr "" +"一旦你觉得你知道了 Python 3 与 Python 2 相比有什么不同,就是时候更新你的代码了! 你可以选择两种工具来自动移植你的代码: " +"Futurize_ 和 Modernize_。 你选择哪个工具将取决于你希望你的代码有多像 Python 3。 Futurize_ 尽力使 Python" +" 3 的习性和做法在 Python 2 中存在,例如,从 Python 3 中回传 ``bytes`` 类型,这样你就可以在 Python " +"的主要版本之间实现语义上的平等。 另一方面,Modernize_ 更加保守,它针对的是 Python 2/3 的子集,直接依靠 six_ " +"来帮助提供兼容性。 由于 Python 3 是未来,最好考虑 Futurize,以开始适应 Python 3 所引入的、你还不习惯的任何新做法。" + +#: ../../howto/pyporting.rst:148 +msgid "" +"Regardless of which tool you choose, they will update your code to run under" +" Python 3 while staying compatible with the version of Python 2 you started " +"with. Depending on how conservative you want to be, you may want to run the " +"tool over your test suite first and visually inspect the diff to make sure " +"the transformation is accurate. After you have transformed your test suite " +"and verified that all the tests still pass as expected, then you can " +"transform your application code knowing that any tests which fail is a " +"translation failure." +msgstr "" +"无论你选择哪种工具,它们都会更新你的代码,使之在Python 3下运行,同时与你开始使用的Python " +"2版本保持兼容。根据你想要的保守程度,你可能想先在你的测试套件上运行该工具,并目测差异以确保转换的准确性。在你转换了你的测试套件并验证了所有的测试仍然如期通过后,你就可以转换你的应用程序代码了,因为你知道任何测试失败都是转译的错误。" + +#: ../../howto/pyporting.rst:156 +msgid "" +"Unfortunately the tools can't automate everything to make your code work " +"under Python 3 and so there are a handful of things you will need to update " +"manually to get full Python 3 support (which of these steps are necessary " +"vary between the tools). Read the documentation for the tool you choose to " +"use to see what it fixes by default and what it can do optionally to know " +"what will (not) be fixed for you and what you may have to fix on your own " +"(e.g. using ``io.open()`` over the built-in ``open()`` function is off by " +"default in Modernize). Luckily, though, there are only a couple of things to" +" watch out for which can be considered large issues that may be hard to " +"debug if not watched for." +msgstr "" +"不幸的是,这些工具不能自动地使你的代码在Python 3下工作,因此有一些东西你需要手动更新以获得对Python " +"3的完全支持(这些步骤在不同的工具中是必要的)。阅读你选择使用的工具的文档,看看它默认修复了什么,以及它可以选择做什么,以了解哪些将(不)为你修复,哪些你可能必须自己修复(例如,在Modernize中使用``io.open()``覆写内置的``open()``函数默认是关闭的)。不过幸运的是,只有几件需要注意的事情,可以说是大问题,如果不注意的话,可能很难调试。" + +#: ../../howto/pyporting.rst:168 +msgid "Division" +msgstr "除法" + +#: ../../howto/pyporting.rst:170 +msgid "" +"In Python 3, ``5 / 2 == 2.5`` and not ``2``; all division between ``int`` " +"values result in a ``float``. This change has actually been planned since " +"Python 2.2 which was released in 2002. Since then users have been encouraged" +" to add ``from __future__ import division`` to any and all files which use " +"the ``/`` and ``//`` operators or to be running the interpreter with the " +"``-Q`` flag. If you have not been doing this then you will need to go " +"through your code and do two things:" +msgstr "" +"在Python 3中,``5 / 2 == " +"2.5``而不是``2``;所有``int``数值之间的除法都会产生一个``float``、这个变化实际上从2002年发布的Python " +"2.2开始就已经计划好了。从那时起,我们就鼓励用户在所有使用``/``和``//``运算符的文件中添加``from __future__ import " +"division``,或者在运行解释器时使用``-Q``标志。如果你没有这样做,那么你需要检查你的代码并做两件事。" + +#: ../../howto/pyporting.rst:178 +msgid "Add ``from __future__ import division`` to your files" +msgstr "添加 ``from __future__ import division`` 到你的文件。" + +#: ../../howto/pyporting.rst:179 +msgid "" +"Update any division operator as necessary to either use ``//`` to use floor " +"division or continue using ``/`` and expect a float" +msgstr "根据需要更新任何除法运算符,要么使用 ``//`` 来使用向下取整除法,要么继续使用 ``/`` 并得到一个浮点数" + +#: ../../howto/pyporting.rst:182 +msgid "" +"The reason that ``/`` isn't simply translated to ``//`` automatically is " +"that if an object defines a ``__truediv__`` method but not ``__floordiv__`` " +"then your code would begin to fail (e.g. a user-defined class that uses " +"``/`` to signify some operation but not ``//`` for the same thing or at " +"all)." +msgstr "" +"之所以没有简单地将 ``/`` 自动翻译成 ``//``,是因为如果一个对象定义了一个 ``__truediv__`` 方法,但没有定义 " +"``__floordiv__``,那么你的代码就会运行失败(例如,一个用户定义的类用 ``/`` 来表示一些操作,但没有用 ``//`` " +"来表示同样的事情或根本没有定义)。" + +#: ../../howto/pyporting.rst:189 +msgid "Text versus binary data" +msgstr "文本与二进制数据" + +#: ../../howto/pyporting.rst:191 +msgid "" +"In Python 2 you could use the ``str`` type for both text and binary data. " +"Unfortunately this confluence of two different concepts could lead to " +"brittle code which sometimes worked for either kind of data, sometimes not. " +"It also could lead to confusing APIs if people didn't explicitly state that " +"something that accepted ``str`` accepted either text or binary data instead " +"of one specific type. This complicated the situation especially for anyone " +"supporting multiple languages as APIs wouldn't bother explicitly supporting " +"``unicode`` when they claimed text data support." +msgstr "" +"在Python " +"2中,你可以对文本和二进制数据都使用``str``类型。不幸的是,这两个不同概念的融合可能会导致脆弱的代码,有时对任何一种数据都有效,有时则无效。如果人们没有明确说明某种接受``str``东西可以接受文本或二进制数据,而不是一种特定的类型,这也会导致API的混乱。这使情况变得复杂,特别是对于任何支持多种语言的人来说,因为API在声称支持文本数据时不会显式支持``unicode``。" + +#: ../../howto/pyporting.rst:200 +msgid "" +"To make the distinction between text and binary data clearer and more " +"pronounced, Python 3 did what most languages created in the age of the " +"internet have done and made text and binary data distinct types that cannot " +"blindly be mixed together (Python predates widespread access to the " +"internet). For any code that deals only with text or only binary data, this " +"separation doesn't pose an issue. But for code that has to deal with both, " +"it does mean you might have to now care about when you are using text " +"compared to binary data, which is why this cannot be entirely automated." +msgstr "" +"为了使文本和二进制数据之间的区别更加清晰和明显,Python " +"3做了大多数在互联网时代创建的语言所做的事情,使文本和二进制数据成为不能盲目混合在一起的不同类型(Python早于互联网的广泛使用)。对于任何只处理文本或只处理二进制数据的代码,这种分离并不构成问题。但是对于必须处理这两种数据的代码来说,这确实意味着你现在可能必须关心你何时使用文本或二进制数据,这就是为什么这不能完全自动化迁移。" + +#: ../../howto/pyporting.rst:209 +msgid "" +"To start, you will need to decide which APIs take text and which take binary" +" (it is **highly** recommended you don't design APIs that can take both due " +"to the difficulty of keeping the code working; as stated earlier it is " +"difficult to do well). In Python 2 this means making sure the APIs that take" +" text can work with ``unicode`` and those that work with binary data work " +"with the ``bytes`` type from Python 3 (which is a subset of ``str`` in " +"Python 2 and acts as an alias for ``bytes`` type in Python 2). Usually the " +"biggest issue is realizing which methods exist on which types in Python 2 & " +"3 simultaneously (for text that's ``unicode`` in Python 2 and ``str`` in " +"Python 3, for binary that's ``str``/``bytes`` in Python 2 and ``bytes`` in " +"Python 3). The following table lists the **unique** methods of each data " +"type across Python 2 & 3 (e.g., the ``decode()`` method is usable on the " +"equivalent binary data type in either Python 2 or 3, but it can't be used by" +" the textual data type consistently between Python 2 and 3 because ``str`` " +"in Python 3 doesn't have the method). Do note that as of Python 3.5 the " +"``__mod__`` method was added to the bytes type." +msgstr "" +"首先,你需要决定哪些 API 接受文本,哪些接受二进制(由于保持代码工作的难度,**强烈** 建议你不要设计同时接受两种数据的 " +"API;如前所述,这很难做得好)。在 Python 2 中,这意味着要确保处理文本的 API 能够与 ``unicode`` " +"一起工作,而处理二进制数据的 API 能够与 Python 3 中的 ``bytes`` 类型一起工作(在 Python 2 中是 ``str`` " +"的一个子集,在 Python 2 中作为 ``bytes`` 类型的别名)。通常最大的问题是意识到哪些方法同时存在于 Python 2 和 3 " +"的哪些类型上 (对于文本来说,Python 2 中是 ``unicode``,Python 3 中是 ``str``,对于二进制来说,Python 2 " +"中是 ``str``/``bytes``,Python 3 中是``bytes``)。 下表列出了每个数据类型在 Python 2 和 3 中的 " +"**独特** 的方法 (例如,``decode()`` 方法在 Python 2 或 3 中的等价二进制数据类型上是可用的,但是它不能在 Python " +"2 和 3 之间被文本数据类型一致使用,因为 Python 3 中的 ``str`` 没有这个方法)。 请注意,从 Python 3.5 " +"开始,``__mod__`` 方法被添加到 bytes 类型中。" + +#: ../../howto/pyporting.rst:226 +msgid "**Text data**" +msgstr "**文本数据**" + +#: ../../howto/pyporting.rst:226 +msgid "**Binary data**" +msgstr "**二进制数据**" + +#: ../../howto/pyporting.rst:228 +msgid "\\" +msgstr "\\" + +#: ../../howto/pyporting.rst:228 +msgid "decode" +msgstr "decode" + +#: ../../howto/pyporting.rst:230 +msgid "encode" +msgstr "encode" + +#: ../../howto/pyporting.rst:232 +msgid "format" +msgstr "format" + +#: ../../howto/pyporting.rst:234 +msgid "isdecimal" +msgstr "isdecimal" + +#: ../../howto/pyporting.rst:236 +msgid "isnumeric" +msgstr "isnumeric" + +#: ../../howto/pyporting.rst:239 +msgid "" +"Making the distinction easier to handle can be accomplished by encoding and " +"decoding between binary data and text at the edge of your code. This means " +"that when you receive text in binary data, you should immediately decode it." +" And if your code needs to send text as binary data then encode it as late " +"as possible. This allows your code to work with only text internally and " +"thus eliminates having to keep track of what type of data you are working " +"with." +msgstr "" +"通过在你的代码边缘对二进制数据和文本进行编码和解码,可以使这种区分更容易处理。这意味着,当你收到二进制数据的文本时,你应该立即对其进行解码。而如果你的代码需要将文本作为二进制数据发送,那么就尽可能晚地对其进行编码。这使得你的代码在内部只与文本打交道,从而不必再去跟踪你所处理的数据类型。" + +#: ../../howto/pyporting.rst:246 +msgid "" +"The next issue is making sure you know whether the string literals in your " +"code represent text or binary data. You should add a ``b`` prefix to any " +"literal that presents binary data. For text you should add a ``u`` prefix to" +" the text literal. (there is a :mod:`__future__` import to force all " +"unspecified literals to be Unicode, but usage has shown it isn't as " +"effective as adding a ``b`` or ``u`` prefix to all literals explicitly)" +msgstr "" +"下一个问题是确保你知道你的代码中的字符串字头是代表文本还是二进制数据。你应该给任何呈现二进制数据的字面符号添加一个``b``前缀。对于文本,你应该给文本字面添加一个``u``前缀。(有一个" +" :mod:`__future__` " +"导入来强制所有未指定的字头为Unicode,但实际使用情况表明它并不像给所有字头显式添加一个``b``或``u``前缀那样有效)" + +#: ../../howto/pyporting.rst:253 +msgid "" +"As part of this dichotomy you also need to be careful about opening files. " +"Unless you have been working on Windows, there is a chance you have not " +"always bothered to add the ``b`` mode when opening a binary file (e.g., " +"``rb`` for binary reading). Under Python 3, binary files and text files are" +" clearly distinct and mutually incompatible; see the :mod:`io` module for " +"details. Therefore, you **must** make a decision of whether a file will be " +"used for binary access (allowing binary data to be read and/or written) or " +"textual access (allowing text data to be read and/or written). You should " +"also use :func:`io.open` for opening files instead of the built-in " +":func:`open` function as the :mod:`io` module is consistent from Python 2 to" +" 3 while the built-in :func:`open` function is not (in Python 3 it's " +"actually :func:`io.open`). Do not bother with the outdated practice of using" +" :func:`codecs.open` as that's only necessary for keeping compatibility with" +" Python 2.5." +msgstr "" +"作为这种二分法的一部分,你还需要小心打开文件。除非你一直在 Windows 上工作,否则你有可能在打开二进制文件时没有一直费心地添加``b``模式 " +"(例如,用``rb``进行二进制读取)。 在 Python 3 下,二进制文件和文本文件显然是不同的,而且是相互不兼容的;详见 :mod:`io` " +"模块。因此,你必须**决定**一个文件是用于二进制访问(允许读取和/或写入二进制数据)还是文本访问(允许读取和/或写入文本数据)。你还应该使用 " +":func:`io.open` 来打开文件,而不是内置的 :func:`open` 函数,因为 :mod:`io` 模块从 Python 2 到 3 " +"是一致的,而内置的 :func:`open` 函数则不是 (在 Python 3 中它实际上是 :func:`io.open`)。不要理会使用 " +":func:`codecs.open` 的过时做法,因为这只是为了保持与 Python 2.5 的兼容性。" + +#: ../../howto/pyporting.rst:267 +msgid "" +"The constructors of both ``str`` and ``bytes`` have different semantics for " +"the same arguments between Python 2 & 3. Passing an integer to ``bytes`` in " +"Python 2 will give you the string representation of the integer: ``bytes(3) " +"== '3'``. But in Python 3, an integer argument to ``bytes`` will give you a " +"bytes object as long as the integer specified, filled with null bytes: " +"``bytes(3) == b'\\x00\\x00\\x00'``. A similar worry is necessary when " +"passing a bytes object to ``str``. In Python 2 you just get the bytes object" +" back: ``str(b'3') == b'3'``. But in Python 3 you get the string " +"representation of the bytes object: ``str(b'3') == \"b'3'\"``." +msgstr "" +"在Python 2和3中,``str``和``bytes``的构造函数对相同的参数有不同的语义。在Python " +"2中,传递一个整数给``bytes``,你将得到整数的字符串表示:``bytes(3) == '3'``。但是在Python " +"3中,一个整数参数传递给``bytes``将给你一个与指定的整数一样长的bytes对象,其中充满了空字节:``bytes(3) == " +"b'\\x00\\x00\\x00'``。当把bytes对象传给``str``时,类似的担心是必要的。 在Python " +"2中,你只是又得到了该bytes对象:``str(b'3') == b'3'``。但是在Python " +"3中,你得到bytes对象的字符串表示:``str(b'3') == \"b'3'\"``。" + +#: ../../howto/pyporting.rst:277 +msgid "" +"Finally, the indexing of binary data requires careful handling (slicing does" +" **not** require any special handling). In Python 2, ``b'123'[1] == b'2'`` " +"while in Python 3 ``b'123'[1] == 50``. Because binary data is simply a " +"collection of binary numbers, Python 3 returns the integer value for the " +"byte you index on. But in Python 2 because ``bytes == str``, indexing " +"returns a one-item slice of bytes. The six_ project has a function named " +"``six.indexbytes()`` which will return an integer like in Python 3: " +"``six.indexbytes(b'123', 1)``." +msgstr "" +"最后,二进制数据的索引需要仔细处理(切片 **不需要** 任何特殊处理)。在 Python 2 中 ``b'123'[1] == b'2'``,而在 " +"Python 3 中``b'123'[1] == 50``。 因为二进制数据只是二进制数的集合,Python 3 会返回你索引的字节的整数值。 但是在 " +"Python 2 中,因为 ``bytes == str``,索引会返回一个单项的字节片断。 six_ 项目有一个名为 " +"``six.indexbytes()`` 的函数,它将像在 Python 3 中一样返回一个整数: ``six.indexbytes(b'123', " +"1)``。" + +#: ../../howto/pyporting.rst:286 +msgid "To summarize:" +msgstr "总结一下:" + +#: ../../howto/pyporting.rst:288 +msgid "Decide which of your APIs take text and which take binary data" +msgstr "决定你的API中哪些采用文本,哪些采用二进制数据" + +#: ../../howto/pyporting.rst:289 +msgid "" +"Make sure that your code that works with text also works with ``unicode`` " +"and code for binary data works with ``bytes`` in Python 2 (see the table " +"above for what methods you cannot use for each type)" +msgstr "" +"确保你对文本工作的代码也能对``unicode``工作,对二进制数据的代码在Python " +"2中能对``bytes``工作(关于每种类型不能使用的方法,见上表)。" + +#: ../../howto/pyporting.rst:292 +msgid "" +"Mark all binary literals with a ``b`` prefix, textual literals with a ``u`` " +"prefix" +msgstr "用``b``前缀标记所有二进制字词,用``u``前缀标记文本字词" + +#: ../../howto/pyporting.rst:294 +msgid "" +"Decode binary data to text as soon as possible, encode text as binary data " +"as late as possible" +msgstr "尽快将二进制数据解码为文本,尽可能晚地将文本编码为二进制数据" + +#: ../../howto/pyporting.rst:296 +msgid "" +"Open files using :func:`io.open` and make sure to specify the ``b`` mode " +"when appropriate" +msgstr "使用 :func:`io.open` 打开文件,并确保在适当时候指定 ``b`` 模式。" + +#: ../../howto/pyporting.rst:298 +msgid "Be careful when indexing into binary data" +msgstr "在对二进制数据进行索引时要小心" + +#: ../../howto/pyporting.rst:302 +msgid "Use feature detection instead of version detection" +msgstr "使用特征检测而不是版本检测" + +#: ../../howto/pyporting.rst:304 +msgid "" +"Inevitably you will have code that has to choose what to do based on what " +"version of Python is running. The best way to do this is with feature " +"detection of whether the version of Python you're running under supports " +"what you need. If for some reason that doesn't work then you should make the" +" version check be against Python 2 and not Python 3. To help explain this, " +"let's look at an example." +msgstr "" +"你不可避免地会有一些代码需要根据运行的 Python 版本来选择要做什么。做到这一点的最好方法是对你运行的 Python " +"版本是否支持你所需要的东西进行特征检测。如果由于某种原因这不起作用,那么你应该让版本检测针对 Python 2 而不是 Python " +"3。为了帮助解释这个问题,让我们看一个例子。" + +#: ../../howto/pyporting.rst:311 +msgid "" +"Let's pretend that you need access to a feature of :mod:`importlib` that is " +"available in Python's standard library since Python 3.3 and available for " +"Python 2 through importlib2_ on PyPI. You might be tempted to write code to " +"access e.g. the :mod:`importlib.abc` module by doing the following::" +msgstr "" +"假设你需要访问 :mod:`importlib` 的一个功能,该功能自Python 3.3开始在Python的标准库中提供,并且通过PyPI上的 " +"importlib2_ 提供给Python 2。你可能会想写代码来访问例如 :mod:`importlib.abc` 模块,方法如下::" + +#: ../../howto/pyporting.rst:323 +msgid "" +"The problem with this code is what happens when Python 4 comes out? It would" +" be better to treat Python 2 as the exceptional case instead of Python 3 and" +" assume that future Python versions will be more compatible with Python 3 " +"than Python 2::" +msgstr "" +"这段代码的问题是,当Python 4出来的时候会发生什么?最好是将Python 2作为例外情况,而不是Python " +"3,并假设未来的Python版本与Python 3的兼容性比Python 2更强::" + +#: ../../howto/pyporting.rst:335 +msgid "" +"The best solution, though, is to do no version detection at all and instead " +"rely on feature detection. That avoids any potential issues of getting the " +"version detection wrong and helps keep you future-compatible::" +msgstr "不过,最好的解决办法是根本不做版本检测,而是依靠特征检测。这就避免了任何潜在的版本检测错误的问题,并有助于保持你对未来的兼容::" + +#: ../../howto/pyporting.rst:346 +msgid "Prevent compatibility regressions" +msgstr "防止兼容性退步" + +#: ../../howto/pyporting.rst:348 +msgid "" +"Once you have fully translated your code to be compatible with Python 3, you" +" will want to make sure your code doesn't regress and stop working under " +"Python 3. This is especially true if you have a dependency which is blocking" +" you from actually running under Python 3 at the moment." +msgstr "" +"一旦你完全翻译了你的代码,使之与 Python 3 兼容,你将希望确保你的代码不会退步,不会在 Python " +"3上停止工作。如果你有一个依赖关系阻碍了你目前在Python 3上的实际运行,那就更是如此了。" + +#: ../../howto/pyporting.rst:353 +msgid "" +"To help with staying compatible, any new modules you create should have at " +"least the following block of code at the top of it::" +msgstr "为了帮助保持兼容,你创建的任何新模块都应该在其顶部至少有以下代码块::" + +#: ../../howto/pyporting.rst:360 +msgid "" +"You can also run Python 2 with the ``-3`` flag to be warned about various " +"compatibility issues your code triggers during execution. If you turn " +"warnings into errors with ``-Werror`` then you can make sure that you don't " +"accidentally miss a warning." +msgstr "" +"你也可以在运行Python " +"2时使用``-3``标志,对你的代码在执行过程中引发的各种兼容性问题进行警告。如果你用``-Werror``把警告变成错误,那么你可以确保你不会意外地错过一个警告。" + +#: ../../howto/pyporting.rst:365 +msgid "" +"You can also use the Pylint_ project and its ``--py3k`` flag to lint your " +"code to receive warnings when your code begins to deviate from Python 3 " +"compatibility. This also prevents you from having to run Modernize_ or " +"Futurize_ over your code regularly to catch compatibility regressions. This " +"does require you only support Python 2.7 and Python 3.4 or newer as that is " +"Pylint's minimum Python version support." +msgstr "" +"你也可以使用 Pylint_ 项目和它的``--py3k``标志来提示你的代码,当你的代码开始偏离 Python 3 " +"的兼容性时,就会收到警告。这也避免了你不得不定期在你的代码上运行 Modernize_ 或 Futurize_ " +"来捕捉兼容性的退步。这确实要求你只支持Python 2.7和Python 3.4或更新的版本,因为这是Pylint支持的最小Python版本。" + +#: ../../howto/pyporting.rst:374 +msgid "Check which dependencies block your transition" +msgstr "检查哪些依赖性会阻碍你的过渡" + +#: ../../howto/pyporting.rst:376 +msgid "" +"**After** you have made your code compatible with Python 3 you should begin " +"to care about whether your dependencies have also been ported. The " +"caniusepython3_ project was created to help you determine which projects -- " +"directly or indirectly -- are blocking you from supporting Python 3. There " +"is both a command-line tool as well as a web interface at " +"https://caniusepython3.com." +msgstr "" +"在你使你的代码与 Python 3 兼容**之后**,你应该开始关心你的依赖关系是否也被移植了。 caniusepython3_ " +"项目的建立是为了帮助你确定哪些项目——直接或间接地——阻碍了你对Python " +"3的支持。它既有一个命令行工具,也有一个在https://caniusepython3.com的网页界面。" + +#: ../../howto/pyporting.rst:383 +msgid "" +"The project also provides code which you can integrate into your test suite " +"so that you will have a failing test when you no longer have dependencies " +"blocking you from using Python 3. This allows you to avoid having to " +"manually check your dependencies and to be notified quickly when you can " +"start running on Python 3." +msgstr "" +"该项目还提供了一些代码,你可以将其集成到你的测试套件中,这样,当你不再有依赖关系阻碍你使用Python " +"3时,你将有一个失败的测试。这使你不必手动检查你的依赖性,并在你可以开始在Python 3上运行时迅速得到通知。" + +#: ../../howto/pyporting.rst:390 +msgid "Update your ``setup.py`` file to denote Python 3 compatibility" +msgstr "更新你的``setup.py``文件以表示对Python 3的兼容" + +#: ../../howto/pyporting.rst:392 +msgid "" +"Once your code works under Python 3, you should update the classifiers in " +"your ``setup.py`` to contain ``Programming Language :: Python :: 3`` and to " +"not specify sole Python 2 support. This will tell anyone using your code " +"that you support Python 2 **and** 3. Ideally you will also want to add " +"classifiers for each major/minor version of Python you now support." +msgstr "" +"一旦你的代码在 Python 3 下工作,你应该更新你``setup.py``中的分类器,使其包含``Programming Language :: " +"Python :: 3``并不指定单独的 Python 2 支持。这将告诉使用你的代码的人,你支持Python 2 **和** " +"3。理想情况下,你也希望为你现在支持的Python的每个主要/次要版本添加分类器。" + +#: ../../howto/pyporting.rst:400 +msgid "Use continuous integration to stay compatible" +msgstr "使用持续集成以保持兼容" + +#: ../../howto/pyporting.rst:402 +msgid "" +"Once you are able to fully run under Python 3 you will want to make sure " +"your code always works under both Python 2 & 3. Probably the best tool for " +"running your tests under multiple Python interpreters is tox_. You can then " +"integrate tox with your continuous integration system so that you never " +"accidentally break Python 2 or 3 support." +msgstr "" +"一旦你能够完全在Python 3下运行,你将希望确保你的代码总是在Python 2和3下工作。在多个Python解释器下运行测试的最好工具可能是 " +"tox_ 。然后你可以将 tox 与你的持续集成系统集成,这样你就不会意外地破坏对 Python 2 或 3 的支持。" + +#: ../../howto/pyporting.rst:408 +msgid "" +"You may also want to use the ``-bb`` flag with the Python 3 interpreter to " +"trigger an exception when you are comparing bytes to strings or bytes to an " +"int (the latter is available starting in Python 3.5). By default type-" +"differing comparisons simply return ``False``, but if you made a mistake in " +"your separation of text/binary data handling or indexing on bytes you " +"wouldn't easily find the mistake. This flag will raise an exception when " +"these kinds of comparisons occur, making the mistake much easier to track " +"down." +msgstr "" +"你可能还想在 Python 3 解释器中使用``-bb``标志,以便在你将bytes与string或bytes与int进行比较时触发一个异常(后者从 " +"Python 3.5 " +"开始可用)。默认情况下,类型不同的比较只是简单地返回``False``,但是如果你在文本/二进制数据处理或字节的索引分离中犯了一个错误,你就不容易发现这个错误。当这些类型的比较发生时,这个标志会触发一个异常,使错误更容易被发现。" + +#: ../../howto/pyporting.rst:416 +msgid "" +"And that's mostly it! At this point your code base is compatible with both " +"Python 2 and 3 simultaneously. Your testing will also be set up so that you " +"don't accidentally break Python 2 or 3 compatibility regardless of which " +"version you typically run your tests under while developing." +msgstr "" +"基本上就是这样了! 在这一点上,你的代码库同时与 Python 2 和 3 兼容。你的测试也将被设置为不会意外地破坏 Python 2 或 3 " +"的兼容性,无论你在开发时通常在哪个版本下运行测试。" + +#: ../../howto/pyporting.rst:423 +msgid "Consider using optional static type checking" +msgstr "考虑使用可选的静态类型检查" + +#: ../../howto/pyporting.rst:425 +msgid "" +"Another way to help port your code is to use a static type checker like " +"mypy_ or pytype_ on your code. These tools can be used to analyze your code " +"as if it's being run under Python 2, then you can run the tool a second time" +" as if your code is running under Python 3. By running a static type checker" +" twice like this you can discover if you're e.g. misusing binary data type " +"in one version of Python compared to another. If you add optional type hints" +" to your code you can also explicitly state whether your APIs use textual or" +" binary data, helping to make sure everything functions as expected in both " +"versions of Python." +msgstr "" +"另一个帮助移植你的代码的方法是在你的代码上使用静态类型检查器,如 mypy_ 或 pytype_。这些工具可以用来分析你的代码,就像它在Python " +"2下运行一样,然后你可以第二次运行这个工具,就像你的代码在Python " +"3下运行一样。通过像这样两次运行静态类型检查器,你可以发现你是否错误地使用了二进制数据类型,例如在Python的一个版本中与另一个版本相比。如果你在你的代码中添加了可选的类型提示,你也可以明确说明你的API是使用文本数据还是二进制数据,这有助于确保在两个版本的Python中所有的功能都符合预期。" diff --git a/howto/regex.po b/howto/regex.po new file mode 100644 index 000000000..9a84eb68c --- /dev/null +++ b/howto/regex.po @@ -0,0 +1,2155 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) 2001-2024, Python Software Foundation +# This file is distributed under the same license as the Python package. +# FIRST AUTHOR , YEAR. +# +# Translators: +# 操旭 , 2017 +# Fei Yin , 2018 +# df2dc1c92e792f7ae8417c51df43db8f_594d92a <0f49be28017426edb1db1a2ab6e67088_717605>, 2018 +# dannyvi , 2018 +# Alpha Du , 2019 +# Konge , 2019 +# Freesand Leo , 2022 +# Rafael Fontenelle , 2024 +# +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: Python 3.9\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2024-11-01 16:08+0000\n" +"PO-Revision-Date: 2017-02-16 17:45+0000\n" +"Last-Translator: Rafael Fontenelle , 2024\n" +"Language-Team: Chinese (China) (https://app.transifex.com/python-doc/teams/5390/zh_CN/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: zh_CN\n" +"Plural-Forms: nplurals=1; plural=0;\n" + +#: ../../howto/regex.rst:5 +msgid "Regular Expression HOWTO" +msgstr "正则表达式指南" + +#: ../../howto/regex.rst:0 +msgid "Author" +msgstr "作者" + +#: ../../howto/regex.rst:7 +msgid "A.M. Kuchling " +msgstr "A.M. Kuchling " + +#: ../../howto/regex.rstNone +msgid "Abstract" +msgstr "摘要" + +#: ../../howto/regex.rst:18 +msgid "" +"This document is an introductory tutorial to using regular expressions in " +"Python with the :mod:`re` module. It provides a gentler introduction than " +"the corresponding section in the Library Reference." +msgstr "本文是关于在 Python 中通过 :mod:`re` 模块使用正则表达式的入门教程。它提供了比“标准库参考”的相关章节更平易的介绍。" + +#: ../../howto/regex.rst:24 +msgid "Introduction" +msgstr "概述" + +#: ../../howto/regex.rst:26 +msgid "" +"Regular expressions (called REs, or regexes, or regex patterns) are " +"essentially a tiny, highly specialized programming language embedded inside " +"Python and made available through the :mod:`re` module. Using this little " +"language, you specify the rules for the set of possible strings that you " +"want to match; this set might contain English sentences, or e-mail " +"addresses, or TeX commands, or anything you like. You can then ask " +"questions such as \"Does this string match the pattern?\", or \"Is there a " +"match for the pattern anywhere in this string?\". You can also use REs to " +"modify a string or to split it apart in various ways." +msgstr "" +"正则表达式(Regular expressions,也叫 REs、 regexs 或 regex patterns),本质上是嵌入 Python " +"内部并通过 :mod:`re` " +"模块提供的一种微小的、高度专业化的编程语言。使用这种小语言,你可以为想要匹配的可能字符串编写规则;这些字符串可能是英文句子、邮箱地址、TeX " +"命令或任何你喜欢的内容。然后,你可以提出诸如“此字符串是否与表达式匹配?”、“字符串中是否存在表达式的匹配项?”之类的问题。你还可以用正则来修改字符串,或以各种方式将其拆分。" + +#: ../../howto/regex.rst:35 +msgid "" +"Regular expression patterns are compiled into a series of bytecodes which " +"are then executed by a matching engine written in C. For advanced use, it " +"may be necessary to pay careful attention to how the engine will execute a " +"given RE, and write the RE in a certain way in order to produce bytecode " +"that runs faster. Optimization isn't covered in this document, because it " +"requires that you have a good understanding of the matching engine's " +"internals." +msgstr "" +"正则表达式会被编译成一系列字节码,然后由 C " +"语言编写的匹配引擎执行。对于高级用途,可能有必要特别注意引擎将如何执行一个给定的正则,并以某种方式写入正则,以生成运行更快的字节码。本文不涉及优化问题,因为这要求你对正则引擎的匹配过程有很好的了解。" + +#: ../../howto/regex.rst:42 +msgid "" +"The regular expression language is relatively small and restricted, so not " +"all possible string processing tasks can be done using regular expressions." +" There are also tasks that *can* be done with regular expressions, but the " +"expressions turn out to be very complicated. In these cases, you may be " +"better off writing Python code to do the processing; while Python code will " +"be slower than an elaborate regular expression, it will also probably be " +"more understandable." +msgstr "" +"正则表达式语言相对较小且受限,因此并非所有可能的字符串处理任务都可以使用正则表达式完成。有些任务尽管 *可以* " +"用正则表达式来完成,但表达式会变得非常复杂。 这些情况下,最好通过编写 Python 代码来进行处理。 也许 Python " +"代码会比精心设计的正则表达式慢,但它可能更容易理解。" + +#: ../../howto/regex.rst:51 +msgid "Simple Patterns" +msgstr "简单正则" + +#: ../../howto/regex.rst:53 +msgid "" +"We'll start by learning about the simplest possible regular expressions. " +"Since regular expressions are used to operate on strings, we'll begin with " +"the most common task: matching characters." +msgstr "让我们从最简单的正则表达式开始吧。由于正则表达式是用来操作字符串的,我们将从最常见的任务开始:匹配字符。" + +#: ../../howto/regex.rst:57 +msgid "" +"For a detailed explanation of the computer science underlying regular " +"expressions (deterministic and non-deterministic finite automata), you can " +"refer to almost any textbook on writing compilers." +msgstr "关于正则表达式背后的计算机科学的详细解释(确定性和非确定性有限自动机),你可以参考几乎所有关于编写编译器的教科书。" + +#: ../../howto/regex.rst:63 +msgid "Matching Characters" +msgstr "匹配字符" + +#: ../../howto/regex.rst:65 +msgid "" +"Most letters and characters will simply match themselves. For example, the " +"regular expression ``test`` will match the string ``test`` exactly. (You " +"can enable a case-insensitive mode that would let this RE match ``Test`` or " +"``TEST`` as well; more about this later.)" +msgstr "" +"大多数字母和符号都会简单地匹配自身。例如,正则表达式 ``test`` 将会精确地匹配到 ``test`` " +"。(你可以启用不区分大小写模式,让这个正则也匹配 ``Test`` 或 ``TEST`` ,稍后会详细介绍。)" + +#: ../../howto/regex.rst:70 +msgid "" +"There are exceptions to this rule; some characters are special " +":dfn:`metacharacters`, and don't match themselves. Instead, they signal " +"that some out-of-the-ordinary thing should be matched, or they affect other " +"portions of the RE by repeating them or changing their meaning. Much of " +"this document is devoted to discussing various metacharacters and what they " +"do." +msgstr "" +"但该规则有例外。有些字符是特殊的 " +":dfn:`元字符(metacharacters)`,并不匹配自身。事实上,它们表示匹配一些非常规的内容,或者通过重复它们或改变它们的含义来影响正则的其他部分。本文的大部分内容都致力于讨论各种元字符及其作用。" + +#: ../../howto/regex.rst:76 +msgid "" +"Here's a complete list of the metacharacters; their meanings will be " +"discussed in the rest of this HOWTO." +msgstr "这是元字符的完整列表。它们的含义将在本 HOWTO 的其余部分进行讨论。" + +#: ../../howto/regex.rst:83 +msgid "" +"The first metacharacters we'll look at are ``[`` and ``]``. They're used for" +" specifying a character class, which is a set of characters that you wish to" +" match. Characters can be listed individually, or a range of characters can" +" be indicated by giving two characters and separating them by a ``'-'``. " +"For example, ``[abc]`` will match any of the characters ``a``, ``b``, or " +"``c``; this is the same as ``[a-c]``, which uses a range to express the same" +" set of characters. If you wanted to match only lowercase letters, your RE " +"would be ``[a-z]``." +msgstr "" +"首先介绍的元字符是 ``[`` 和 ``]`` " +"。这两个元字符用于指定一个字符类,也就是你希望匹配的字符的一个集合。这些字符可以单独地列出,也可以用字符范围来表示(给出两个字符并用 ``'-'`` " +"分隔)。例如,``[abc]`` 将匹配 ``a``、``b``、``c`` 之中的任意一个字符;这与 ``[a-c]`` " +"相同,后者使用一个范围来表达相同的字符集合。如果只想匹配小写字母,则正则表达式将是 ``[a-z]`` 。" + +#: ../../howto/regex.rst:92 +msgid "" +"Metacharacters (except ``\\``) are not active inside classes. For example, " +"``[akm$]`` will match any of the characters ``'a'``, ``'k'``, ``'m'``, or " +"``'$'``; ``'$'`` is usually a metacharacter, but inside a character class " +"it's stripped of its special nature." +msgstr "" +"元字符 (除了 ``\\``) 在字符类中是不起作用的。 例如,``[akm$]`` 将会匹配以下任一字符 ``'a'``, ``'k'``, " +"``'m'`` 或 ``'$'``;``'$'`` 通常是一个元字符,但在一个字符类中它的特殊性被消除了。" + +#: ../../howto/regex.rst:97 +msgid "" +"You can match the characters not listed within the class by " +":dfn:`complementing` the set. This is indicated by including a ``'^'`` as " +"the first character of the class. For example, ``[^5]`` will match any " +"character except ``'5'``. If the caret appears elsewhere in a character " +"class, it does not have special meaning. For example: ``[5^]`` will match " +"either a ``'5'`` or a ``'^'``." +msgstr "" +"你可以通过对集合 :dfn:`取反` 来匹配字符类中未列出的字符。方法是把 ``'^'`` 放在字符类的最开头。 例如,``[^5]`` 将匹配除 " +"``'5'`` 之外的任何字符。 如果插入符出现在字符类的其他位置,则它没有特殊含义。 例如:``[5^]`` 将匹配 ``'5'`` 或 " +"``'^'``。" + +#: ../../howto/regex.rst:103 +msgid "" +"Perhaps the most important metacharacter is the backslash, ``\\``. As in " +"Python string literals, the backslash can be followed by various characters " +"to signal various special sequences. It's also used to escape all the " +"metacharacters so you can still match them in patterns; for example, if you " +"need to match a ``[`` or ``\\``, you can precede them with a backslash to " +"remove their special meaning: ``\\[`` or ``\\\\``." +msgstr "" +"也许最重要的元字符是反斜杠,``\\`` 。 与 Python " +"字符串字面量一样,反斜杠后面可以跟各种字符来表示各种特殊序列。它还用于转义元字符,以便可以在表达式中匹配元字符本身。例如,如果需要匹配一个 ``[`` " +"或 ``\\`` ,可以在其前面加上一个反斜杠来消除它们的特殊含义:``\\[`` 或 ``\\\\`` 。" + +#: ../../howto/regex.rst:110 +msgid "" +"Some of the special sequences beginning with ``'\\'`` represent predefined " +"sets of characters that are often useful, such as the set of digits, the set" +" of letters, or the set of anything that isn't whitespace." +msgstr "一些以 ``'\\'`` 开头的特殊序列表示预定义的字符集合,这些字符集通常很有用,例如数字集合、字母集合或非空白字符集合。" + +#: ../../howto/regex.rst:115 +msgid "" +"Let's take an example: ``\\w`` matches any alphanumeric character. If the " +"regex pattern is expressed in bytes, this is equivalent to the class " +"``[a-zA-Z0-9_]``. If the regex pattern is a string, ``\\w`` will match all " +"the characters marked as letters in the Unicode database provided by the " +":mod:`unicodedata` module. You can use the more restricted definition of " +"``\\w`` in a string pattern by supplying the :const:`re.ASCII` flag when " +"compiling the regular expression." +msgstr "" +"让我们举一个例子:``\\w`` 匹配任何字母数字字符。 如果正则表达式以 bytes 类型表示,``\\w`` 相当于字符类 " +"``[a-zA-Z0-9_]`` 。如果正则表达式是 str 类型,``\\w`` 将匹配由 :mod:`unicodedata` 模块提供的 " +"Unicode 数据库中标记为字母的所有字符。 通过在编译正则表达式时提供 :const:`re.ASCII` 标志,可以在 str " +"表达式中使用较为狭窄的 ``\\w`` 定义。" + +#: ../../howto/regex.rst:123 +msgid "" +"The following list of special sequences isn't complete. For a complete list " +"of sequences and expanded class definitions for Unicode string patterns, see" +" the last part of :ref:`Regular Expression Syntax ` in the " +"Standard Library reference. In general, the Unicode versions match any " +"character that's in the appropriate category in the Unicode database." +msgstr "" +"以下为特殊序列的不完全列表。 有关 Unicode 字符串正则表达式的序列和扩展类定义的完整列表,参见标准库参考中 :ref:`正则表达式语法 ` 的最后一部分 。通常,Unicode 版本的字符类会匹配 Unicode 数据库的相应类别中的任何字符。" + +#: ../../howto/regex.rst:131 +msgid "``\\d``" +msgstr "``\\d``" + +#: ../../howto/regex.rst:131 +msgid "Matches any decimal digit; this is equivalent to the class ``[0-9]``." +msgstr "匹配任何十进制数字,等价于字符类 ``[0-9]`` 。" + +#: ../../howto/regex.rst:134 +msgid "``\\D``" +msgstr "``\\D``" + +#: ../../howto/regex.rst:134 +msgid "" +"Matches any non-digit character; this is equivalent to the class ``[^0-9]``." +msgstr "匹配任何非数字字符,等价于字符类 ``[^0-9]`` 。" + +#: ../../howto/regex.rst:138 +msgid "``\\s``" +msgstr "``\\s``" + +#: ../../howto/regex.rst:137 +msgid "" +"Matches any whitespace character; this is equivalent to the class ``[ " +"\\t\\n\\r\\f\\v]``." +msgstr "匹配任何空白字符,等价于字符类 ``[ \\t\\n\\r\\f\\v]`` 。" + +#: ../../howto/regex.rst:142 +msgid "``\\S``" +msgstr "``\\S``" + +#: ../../howto/regex.rst:141 +msgid "" +"Matches any non-whitespace character; this is equivalent to the class ``[^ " +"\\t\\n\\r\\f\\v]``." +msgstr "匹配任何非空白字符,等价于字符类 ``[^ \\t\\n\\r\\f\\v]`` 。" + +#: ../../howto/regex.rst:146 +msgid "``\\w``" +msgstr "``\\w``" + +#: ../../howto/regex.rst:145 +msgid "" +"Matches any alphanumeric character; this is equivalent to the class " +"``[a-zA-Z0-9_]``." +msgstr "匹配任何字母与数字字符,等价于字符类 ``[a-zA-Z0-9_]`` 。" + +#: ../../howto/regex.rst:150 +msgid "``\\W``" +msgstr "``\\W``" + +#: ../../howto/regex.rst:149 +msgid "" +"Matches any non-alphanumeric character; this is equivalent to the class " +"``[^a-zA-Z0-9_]``." +msgstr "匹配任何非字母与数字字符,等价于字符类 ``[^a-zA-Z0-9_]`` 。" + +#: ../../howto/regex.rst:152 +msgid "" +"These sequences can be included inside a character class. For example, " +"``[\\s,.]`` is a character class that will match any whitespace character, " +"or ``','`` or ``'.'``." +msgstr "这些序列可以包含在字符类中。 例如,``[\\s,.]`` 是一个匹配任何空白字符、``','`` 或 ``'.'`` 的字符类。" + +#: ../../howto/regex.rst:156 +msgid "" +"The final metacharacter in this section is ``.``. It matches anything " +"except a newline character, and there's an alternate mode " +"(:const:`re.DOTALL`) where it will match even a newline. ``.`` is often " +"used where you want to match \"any character\"." +msgstr "" +"本节的最后一个元字符是 ``.`` 。 它匹配除换行符之外的任何字符,并且有一个可选模式( :const:`re.DOTALL` " +"),在该模式下它甚至可以匹配换行符。 ``.`` 通常用于你想匹配“任何字符”的场景。" + +#: ../../howto/regex.rst:163 +msgid "Repeating Things" +msgstr "重复" + +#: ../../howto/regex.rst:165 +msgid "" +"Being able to match varying sets of characters is the first thing regular " +"expressions can do that isn't already possible with the methods available on" +" strings. However, if that was the only additional capability of regexes, " +"they wouldn't be much of an advance. Another capability is that you can " +"specify that portions of the RE must be repeated a certain number of times." +msgstr "" +"能够匹配各种各样的字符集合是正则表达式可以做到的第一件事,而这是字符串方法所不能做到的。但是,如果正则表达式就只有这么一个附加功能,它很难说的上有多大优势。另一个功能是,你可以指定正则的某部分必须重复一定的次数。" + +#: ../../howto/regex.rst:171 +msgid "" +"The first metacharacter for repeating things that we'll look at is ``*``. " +"``*`` doesn't match the literal character ``'*'``; instead, it specifies " +"that the previous character can be matched zero or more times, instead of " +"exactly once." +msgstr "" +"我们先来说说重复元字符 ``*`` 。 ``*`` 并不是匹配一个字面字符 ``'*'`` " +"。实际上,它指定前一个字符可以匹配零次或更多次,而不是只匹配一次。" + +#: ../../howto/regex.rst:175 +msgid "" +"For example, ``ca*t`` will match ``'ct'`` (0 ``'a'`` characters), ``'cat'`` " +"(1 ``'a'``), ``'caaat'`` (3 ``'a'`` characters), and so forth." +msgstr "" +"例如,``ca*t`` 将匹配 ``'ct'`` ( 0 个 ``'a'`` )、``'cat'`` ( 1 个 ``'a'`` )、 " +"``'caaat'`` ( 3 个 ``'a'`` )等等。" + +#: ../../howto/regex.rst:178 +msgid "" +"Repetitions such as ``*`` are :dfn:`greedy`; when repeating a RE, the " +"matching engine will try to repeat it as many times as possible. If later " +"portions of the pattern don't match, the matching engine will then back up " +"and try again with fewer repetitions." +msgstr "" +"类似 ``*`` 这样的重复是 :dfn:`贪婪的` 。当重复正则时,匹配引擎将尝试重复尽可能多的次数。 " +"如果表达式的后续部分不匹配,则匹配引擎将回退并以较少的重复次数再次尝试。" + +#: ../../howto/regex.rst:183 +msgid "" +"A step-by-step example will make this more obvious. Let's consider the " +"expression ``a[bcd]*b``. This matches the letter ``'a'``, zero or more " +"letters from the class ``[bcd]``, and finally ends with a ``'b'``. Now " +"imagine matching this RE against the string ``'abcbd'``." +msgstr "" +"通过一个逐步示例更容易理解这一点。让我们分析一下表达式 ``a[bcd]*b`` 。 该表达式首先匹配一个字母 ``'a'`` ,接着匹配字符类 " +"``[bcd]`` 中的零个或更多个字母,最后以一个 ``'b'`` 结尾。 现在想象一下用这个正则来匹配字符串 ``'abcbd'`` 。" + +#: ../../howto/regex.rst:189 +msgid "Step" +msgstr "步骤" + +#: ../../howto/regex.rst:189 +msgid "Matched" +msgstr "匹配" + +#: ../../howto/regex.rst:189 +msgid "Explanation" +msgstr "说明" + +#: ../../howto/regex.rst:191 +msgid "1" +msgstr "1" + +#: ../../howto/regex.rst:191 +msgid "``a``" +msgstr "``a``" + +#: ../../howto/regex.rst:191 +msgid "The ``a`` in the RE matches." +msgstr "正则中的 ``a`` 匹配成功。" + +#: ../../howto/regex.rst:193 +msgid "2" +msgstr "2" + +#: ../../howto/regex.rst:193 +msgid "``abcbd``" +msgstr "``abcbd``" + +#: ../../howto/regex.rst:193 +msgid "" +"The engine matches ``[bcd]*``, going as far as it can, which is to the end " +"of the string." +msgstr "引擎尽可能多地匹配 ``[bcd]*`` ,直至字符串末尾。" + +#: ../../howto/regex.rst:197 +msgid "3" +msgstr "3" + +#: ../../howto/regex.rst:197 ../../howto/regex.rst:205 +msgid "*Failure*" +msgstr "*失败*" + +#: ../../howto/regex.rst:197 +msgid "" +"The engine tries to match ``b``, but the current position is at the end of " +"the string, so it fails." +msgstr "引擎尝试匹配 ``b`` ,但是当前位置位于字符串末尾,所以匹配失败。" + +#: ../../howto/regex.rst:202 +msgid "4" +msgstr "4" + +#: ../../howto/regex.rst:202 ../../howto/regex.rst:213 +msgid "``abcb``" +msgstr "``abcb``" + +#: ../../howto/regex.rst:202 +msgid "Back up, so that ``[bcd]*`` matches one less character." +msgstr "回退,让 ``[bcd]*`` 少匹配一个字符。" + +#: ../../howto/regex.rst:205 +msgid "5" +msgstr "5" + +#: ../../howto/regex.rst:205 +msgid "" +"Try ``b`` again, but the current position is at the last character, which is" +" a ``'d'``." +msgstr "再次尝试匹配 ``b`` , 但是当前位置上的字符是最后一个字符 ``'d'`` 。" + +#: ../../howto/regex.rst:209 ../../howto/regex.rst:213 +msgid "6" +msgstr "6" + +#: ../../howto/regex.rst:209 +msgid "``abc``" +msgstr "``abc``" + +#: ../../howto/regex.rst:209 +msgid "Back up again, so that ``[bcd]*`` is only matching ``bc``." +msgstr "再次回退,让 ``[bcd]*`` 只匹配 ``bc`` 。" + +#: ../../howto/regex.rst:213 +msgid "" +"Try ``b`` again. This time the character at the current position is " +"``'b'``, so it succeeds." +msgstr "再次尝试匹配 ``b`` 。 这一次当前位置的字符是 ``'b'`` ,所以它成功了。" + +#: ../../howto/regex.rst:219 +msgid "" +"The end of the RE has now been reached, and it has matched ``'abcb'``. This" +" demonstrates how the matching engine goes as far as it can at first, and if" +" no match is found it will then progressively back up and retry the rest of " +"the RE again and again. It will back up until it has tried zero matches for" +" ``[bcd]*``, and if that subsequently fails, the engine will conclude that " +"the string doesn't match the RE at all." +msgstr "" +"此时正则表达式已经到达了尽头,并且匹配到了 ``'abcb'`` 。 " +"这个例子演示了匹配引擎一开始会尽其所能地进行匹配,如果没有找到匹配,它将逐步回退并重试正则的剩余部分,如此往复,直至 ``[bcd]*`` " +"只匹配零次。如果随后的匹配还是失败了,那么引擎会宣告整个正则表达式与字符串匹配失败。" + +#: ../../howto/regex.rst:226 +msgid "" +"Another repeating metacharacter is ``+``, which matches one or more times. " +"Pay careful attention to the difference between ``*`` and ``+``; ``*`` " +"matches *zero* or more times, so whatever's being repeated may not be " +"present at all, while ``+`` requires at least *one* occurrence. To use a " +"similar example, ``ca+t`` will match ``'cat'`` (1 ``'a'``), ``'caaat'`` (3 " +"``'a'``\\ s), but won't match ``'ct'``." +msgstr "" +"另一个重复元字符是 ``+`` ,表示匹配一次或更多次。请注意 ``*`` 与 ``+`` 之间的差别。 ``*`` 表示匹配 *零次* " +"或更多次,也就是说它所重复的内容是可以完全不出现的。而 ``+`` 则要求至少出现一次。举一个类似的例子, ``ca+t`` 可以匹配 " +"``'cat'`` ( 1 个 ``'a'`` )或 ``'caaat'`` ( 3 个 ``'a'``),但不能匹配 ``'ct'`` 。" + +#: ../../howto/regex.rst:233 +msgid "" +"There are two more repeating qualifiers. The question mark character, " +"``?``, matches either once or zero times; you can think of it as marking " +"something as being optional. For example, ``home-?brew`` matches either " +"``'homebrew'`` or ``'home-brew'``." +msgstr "" +"还有两个重复限定符。 问号 ``?`` 表示匹配一次或零次。你可以认为它把内容变成了可选的。例如,``home-?brew`` 可以 匹配 " +"``'homebrew'`` 或 ``'home-brew'``。" + +#: ../../howto/regex.rst:238 +msgid "" +"The most complicated repeated qualifier is ``{m,n}``, where *m* and *n* are " +"decimal integers. This qualifier means there must be at least *m* " +"repetitions, and at most *n*. For example, ``a/{1,3}b`` will match " +"``'a/b'``, ``'a//b'``, and ``'a///b'``. It won't match ``'ab'``, which has " +"no slashes, or ``'a////b'``, which has four." +msgstr "" +"最复杂的重复限定符是 ``{m,n}``,其中 *m* 和 *n* 是十进制整数。 该限定符意味着必须至少重复 *m* 次,最多重复 *n* 次。 " +"例如,``a/{1,3}b`` 可以匹配 ``'a/b'``、``'a//b'`` 或者 ``'a///b'`` ,但不能匹配中间没有斜杆的 " +"``'ab'``,或者四个斜杆的 ``'a////b'`` 。" + +#: ../../howto/regex.rst:244 +msgid "" +"You can omit either *m* or *n*; in that case, a reasonable value is assumed " +"for the missing value. Omitting *m* is interpreted as a lower limit of 0, " +"while omitting *n* results in an upper bound of infinity." +msgstr "" +"*m* 和 *n* 不是必填的,缺失的情况下会设定为默认值。缺失 *m* 会解释为最少重复 0 次 ,缺失 *n* 则解释为最多重复无限次。" + +#: ../../howto/regex.rst:248 +msgid "" +"Readers of a reductionist bent may notice that the three other qualifiers " +"can all be expressed using this notation. ``{0,}`` is the same as ``*``, " +"``{1,}`` is equivalent to ``+``, and ``{0,1}`` is the same as ``?``. It's " +"better to use ``*``, ``+``, or ``?`` when you can, simply because they're " +"shorter and easier to read." +msgstr "" +"细心的读者也许注意到了,前面的三个重复限定符都可以用这种标记法来表示。 ``{0,}`` 等同于 ``*`` ,``{1,}`` 等同于 ``+`` " +",``{0,1}`` 等同于 ``?`` 。 如果可以的话,最好使用 ``*`` 、``+`` 、或 ``?`` ,因为后者更简洁易读。" + +#: ../../howto/regex.rst:256 +msgid "Using Regular Expressions" +msgstr "使用正则表达式" + +#: ../../howto/regex.rst:258 +msgid "" +"Now that we've looked at some simple regular expressions, how do we actually" +" use them in Python? The :mod:`re` module provides an interface to the " +"regular expression engine, allowing you to compile REs into objects and then" +" perform matches with them." +msgstr "" +"现在我们已经了解了一些简单的正则表达式,那么我们如何在 Python 中实际使用它们呢? :mod:`re` " +"模块提供了正则表达式引擎的接口,可以让你将正则编译为对象,然后用它们来进行匹配。" + +#: ../../howto/regex.rst:265 +msgid "Compiling Regular Expressions" +msgstr "编译正则表达式" + +#: ../../howto/regex.rst:267 +msgid "" +"Regular expressions are compiled into pattern objects, which have methods " +"for various operations such as searching for pattern matches or performing " +"string substitutions. ::" +msgstr "正则表达式被编译成模式对象,模式对象具有各种操作的方法,例如搜索模式匹配或执行字符串替换。::" + +#: ../../howto/regex.rst:276 +msgid "" +":func:`re.compile` also accepts an optional *flags* argument, used to enable" +" various special features and syntax variations. We'll go over the " +"available settings later, but for now a single example will do::" +msgstr "" +":func:`re.compile` 也接受一个可选的 *flags* 参数,用于启用各种特殊功能和语法变体。 " +"我们稍后将介绍可用的设置,但现在只需一个例子 ::" + +#: ../../howto/regex.rst:282 +msgid "" +"The RE is passed to :func:`re.compile` as a string. REs are handled as " +"strings because regular expressions aren't part of the core Python language," +" and no special syntax was created for expressing them. (There are " +"applications that don't need REs at all, so there's no need to bloat the " +"language specification by including them.) Instead, the :mod:`re` module is " +"simply a C extension module included with Python, just like the " +":mod:`socket` or :mod:`zlib` modules." +msgstr "" +"正则作为字符串传递给 :func:`re.compile` 。 " +"正则被处理为字符串,因为正则表达式不是核心Python语言的一部分,并且没有创建用于表达它们的特殊语法。 " +"(有些应用程序根本不需要正则,因此不需要通过包含它们来扩展语言规范。)相反,:mod:`re` 模块只是Python附带的C扩展模块,就类似于 " +":mod:`socket` 或 :mod:`zlib` 模块。" + +#: ../../howto/regex.rst:289 +msgid "" +"Putting REs in strings keeps the Python language simpler, but has one " +"disadvantage which is the topic of the next section." +msgstr "将正则放在字符串中可以使 Python 语言更简单,但有一个缺点是下一节的主题。" + +#: ../../howto/regex.rst:296 +msgid "The Backslash Plague" +msgstr "反斜杠灾难" + +#: ../../howto/regex.rst:298 +msgid "" +"As stated earlier, regular expressions use the backslash character " +"(``'\\'``) to indicate special forms or to allow special characters to be " +"used without invoking their special meaning. This conflicts with Python's " +"usage of the same character for the same purpose in string literals." +msgstr "" +"如前所述,正则表达式使用反斜杠字符 (``'\\'``) 来表示特殊形式或允许使用特殊字符而不调用它们的特殊含义。 这与 Python " +"在字符串文字中用于相同目的的相同字符的使用相冲突。" + +#: ../../howto/regex.rst:303 +msgid "" +"Let's say you want to write a RE that matches the string ``\\section``, " +"which might be found in a LaTeX file. To figure out what to write in the " +"program code, start with the desired string to be matched. Next, you must " +"escape any backslashes and other metacharacters by preceding them with a " +"backslash, resulting in the string ``\\\\section``. The resulting string " +"that must be passed to :func:`re.compile` must be ``\\\\section``. However," +" to express this as a Python string literal, both backslashes must be " +"escaped *again*." +msgstr "" +"假设你想要编写一个与字符串 ``\\section`` 相匹配的正则,它可以在 LaTeX 文件中找到。 " +"要找出在程序代码中写入的内容,请从要匹配的字符串开始。 接下来,您必须通过在反斜杠前面添加反斜杠和其他元字符,从而产生字符串 " +"``\\\\section``。 必须传递给 :func:`re.compile` 的结果字符串必须是 ``\\\\section``。 " +"但是,要将其表示为 Python 字符串文字,必须 *再次* 转义两个反斜杠。" + +#: ../../howto/regex.rst:312 +msgid "Characters" +msgstr "字符" + +#: ../../howto/regex.rst:312 +msgid "Stage" +msgstr "阶段" + +#: ../../howto/regex.rst:314 +msgid "``\\section``" +msgstr "``\\section``" + +#: ../../howto/regex.rst:314 +msgid "Text string to be matched" +msgstr "被匹配的字符串" + +#: ../../howto/regex.rst:316 +msgid "``\\\\section``" +msgstr "``\\\\section``" + +#: ../../howto/regex.rst:316 +msgid "Escaped backslash for :func:`re.compile`" +msgstr "为 :func:`re.compile` 转义的反斜杠" + +#: ../../howto/regex.rst:318 ../../howto/regex.rst:345 +msgid "``\"\\\\\\\\section\"``" +msgstr "``\"\\\\\\\\section\"``" + +#: ../../howto/regex.rst:318 +msgid "Escaped backslashes for a string literal" +msgstr "为字符串字面转义的反斜杠" + +#: ../../howto/regex.rst:321 +msgid "" +"In short, to match a literal backslash, one has to write ``'\\\\\\\\'`` as " +"the RE string, because the regular expression must be ``\\\\``, and each " +"backslash must be expressed as ``\\\\`` inside a regular Python string " +"literal. In REs that feature backslashes repeatedly, this leads to lots of " +"repeated backslashes and makes the resulting strings difficult to " +"understand." +msgstr "" +"简而言之,要匹配文字反斜杠,必须将 ``'\\\\\\\\'`` 写为正则字符串,因为正则表达式必须是 ``\\\\``,并且每个反斜杠必须表示为 " +"``\\\\`` 在常规Python字符串字面中。 在反复使用反斜杠的正则中,这会导致大量重复的反斜杠,并使得生成的字符串难以理解。" + +#: ../../howto/regex.rst:327 +msgid "" +"The solution is to use Python's raw string notation for regular expressions;" +" backslashes are not handled in any special way in a string literal prefixed" +" with ``'r'``, so ``r\"\\n\"`` is a two-character string containing ``'\\'``" +" and ``'n'``, while ``\"\\n\"`` is a one-character string containing a " +"newline. Regular expressions will often be written in Python code using this" +" raw string notation." +msgstr "" +"解决方案是使用 Python 的原始字符串表示法来表示正则表达式;反斜杠不以任何特殊的方式处理前缀为 ``'r'`` 的字符串字面,因此 " +"``r\"\\n\"`` 是一个包含 ``'\\'`` 和 ``'n'`` 的双字符字符串,而 ``\"\\n\"`` 是一个包含换行符的单字符字符串。" +" 正则表达式通常使用这种原始字符串表示法用 Python 代码编写。" + +#: ../../howto/regex.rst:333 +msgid "" +"In addition, special escape sequences that are valid in regular expressions," +" but not valid as Python string literals, now result in a " +":exc:`DeprecationWarning` and will eventually become a :exc:`SyntaxError`, " +"which means the sequences will be invalid if raw string notation or escaping" +" the backslashes isn't used." +msgstr "" +"此外,在正则表达式中有效但在 Python 字符串文字中无效的特殊转义序列现在导致 :exc:`DeprecationWarning` 并最终变为 " +":exc:`SyntaxError`。 这意味着如果未使用原始字符串表示法或转义反斜杠,序列将无效。" + +#: ../../howto/regex.rst:341 +msgid "Regular String" +msgstr "常规字符串" + +#: ../../howto/regex.rst:341 +msgid "Raw string" +msgstr "原始字符串" + +#: ../../howto/regex.rst:343 +msgid "``\"ab*\"``" +msgstr "``\"ab*\"``" + +#: ../../howto/regex.rst:343 +msgid "``r\"ab*\"``" +msgstr "``r\"ab*\"``" + +#: ../../howto/regex.rst:345 +msgid "``r\"\\\\section\"``" +msgstr "``r\"\\\\section\"``" + +#: ../../howto/regex.rst:347 +msgid "``\"\\\\w+\\\\s+\\\\1\"``" +msgstr "``\"\\\\w+\\\\s+\\\\1\"``" + +#: ../../howto/regex.rst:347 +msgid "``r\"\\w+\\s+\\1\"``" +msgstr "``r\"\\w+\\s+\\1\"``" + +#: ../../howto/regex.rst:352 +msgid "Performing Matches" +msgstr "应用匹配" + +#: ../../howto/regex.rst:354 +msgid "" +"Once you have an object representing a compiled regular expression, what do " +"you do with it? Pattern objects have several methods and attributes. Only " +"the most significant ones will be covered here; consult the :mod:`re` docs " +"for a complete listing." +msgstr "" +"一旦你有一个表示编译正则表达式的对象,你用它做什么? 模式对象有几种方法和属性。 这里只介绍最重要的内容;请参阅 :mod:`re` 文档获取完整列表。" + +#: ../../howto/regex.rst:360 ../../howto/regex.rst:418 +#: ../../howto/regex.rst:1064 +msgid "Method/Attribute" +msgstr "方法 / 属性" + +#: ../../howto/regex.rst:360 ../../howto/regex.rst:418 +#: ../../howto/regex.rst:1064 +msgid "Purpose" +msgstr "目的" + +#: ../../howto/regex.rst:362 +msgid "``match()``" +msgstr "``match()``" + +#: ../../howto/regex.rst:362 +msgid "Determine if the RE matches at the beginning of the string." +msgstr "确定正则是否从字符串的开头匹配。" + +#: ../../howto/regex.rst:365 +msgid "``search()``" +msgstr "``search()``" + +#: ../../howto/regex.rst:365 +msgid "Scan through a string, looking for any location where this RE matches." +msgstr "扫描字符串,查找此正则匹配的任何位置。" + +#: ../../howto/regex.rst:368 +msgid "``findall()``" +msgstr "``findall()``" + +#: ../../howto/regex.rst:368 +msgid "Find all substrings where the RE matches, and returns them as a list." +msgstr "找到正则匹配的所有子字符串,并将它们作为列表返回。" + +#: ../../howto/regex.rst:371 +msgid "``finditer()``" +msgstr "``finditer()``" + +#: ../../howto/regex.rst:371 +msgid "" +"Find all substrings where the RE matches, and returns them as an " +":term:`iterator`." +msgstr "找到正则匹配的所有子字符串,并将它们返回为一个 :term:`iterator`。" + +#: ../../howto/regex.rst:375 +msgid "" +":meth:`~re.Pattern.match` and :meth:`~re.Pattern.search` return ``None`` if " +"no match can be found. If they're successful, a :ref:`match object ` instance is returned, containing information about the match: " +"where it starts and ends, the substring it matched, and more." +msgstr "" +"如果没有找到匹配, :meth:`~re.Pattern.match` 和 :meth:`~re.Pattern.search` 返回 ``None``" +" 。如果它们成功, 一个 :ref:`匹配对象 ` 实例将被返回,包含匹配相关的信息:起始和终结位置、匹配的子串以及其它。" + +#: ../../howto/regex.rst:380 +msgid "" +"You can learn about this by interactively experimenting with the :mod:`re` " +"module. If you have :mod:`tkinter` available, you may also want to look at " +":source:`Tools/demo/redemo.py`, a demonstration program included with the " +"Python distribution. It allows you to enter REs and strings, and displays " +"whether the RE matches or fails. :file:`redemo.py` can be quite useful when " +"trying to debug a complicated RE." +msgstr "" +"你可以通过与 :mod:`re` 模块进行交互式的试验来学习这个。 如果你有 :mod:`tkinter`,你也可以看看 " +":source:`Tools/demo/redemo.py`,这是一个 Python 发行版自带的演示程序。 " +"它允许你输入正则和字符串,并显示正则是匹配还是失败。 :file:`redemo.py` 在调试复杂的正则时非常有用。" + +#: ../../howto/regex.rst:387 +msgid "" +"This HOWTO uses the standard Python interpreter for its examples. First, run" +" the Python interpreter, import the :mod:`re` module, and compile a RE::" +msgstr "" +"本 HOWTO 使用标准 Python 解释器作为示例。 首先,运行 Python 解释器,导入 :mod:`re` 模块,然后编译一个正则 ::" + +#: ../../howto/regex.rst:395 +msgid "" +"Now, you can try matching various strings against the RE ``[a-z]+``. An " +"empty string shouldn't match at all, since ``+`` means 'one or more " +"repetitions'. :meth:`~re.Pattern.match` should return ``None`` in this case," +" which will cause the interpreter to print no output. You can explicitly " +"print the result of :meth:`!match` to make this clear. ::" +msgstr "" +"现在,你可以尝试匹配正则 ``[a-z]+`` 的各种字符串。 空字符串根本不匹配,因为 ``+`` 表示“一次或多次重复”。 " +":meth:`~re.Pattern.match` 在这种情况下应返回 ``None``,这将导致解释器不打印输出。 你可以显式打印 " +":meth:`!match` 的结果,使其清晰。::" + +#: ../../howto/regex.rst:405 +msgid "" +"Now, let's try it on a string that it should match, such as ``tempo``. In " +"this case, :meth:`~re.Pattern.match` will return a :ref:`match object " +"`, so you should store the result in a variable for later " +"use. ::" +msgstr "" +"现在,让我们尝试一下它应该匹配的字符串,例如 ``tempo``。在这个例子中 :meth:`~re.Pattern.match` 将返回一个 " +":ref:`匹配对象 `,因此你应该将结果储存到一个变量中以供稍后使用。 ::" + +#: ../../howto/regex.rst:413 +msgid "" +"Now you can query the :ref:`match object ` for information " +"about the matching string. Match object instances also have several methods" +" and attributes; the most important ones are:" +msgstr "" +"现在你可以检查 :ref:`匹配对象 ` 以获取有关匹配字符串的信息。 匹配对象实例也有几个方法和属性;最重要的是:" + +#: ../../howto/regex.rst:420 +msgid "``group()``" +msgstr "``group()``" + +#: ../../howto/regex.rst:420 +msgid "Return the string matched by the RE" +msgstr "返回正则匹配的字符串" + +#: ../../howto/regex.rst:422 +msgid "``start()``" +msgstr "``start()``" + +#: ../../howto/regex.rst:422 +msgid "Return the starting position of the match" +msgstr "返回匹配的开始位置" + +#: ../../howto/regex.rst:424 +msgid "``end()``" +msgstr "``end()``" + +#: ../../howto/regex.rst:424 +msgid "Return the ending position of the match" +msgstr "返回匹配的结束位置" + +#: ../../howto/regex.rst:426 +msgid "``span()``" +msgstr "``span()``" + +#: ../../howto/regex.rst:426 +msgid "Return a tuple containing the (start, end) positions of the match" +msgstr "返回包含匹配 (start, end) 位置的元组" + +#: ../../howto/regex.rst:430 +msgid "Trying these methods will soon clarify their meaning::" +msgstr "尝试这些方法很快就会清楚它们的含义::" + +#: ../../howto/regex.rst:439 +msgid "" +":meth:`~re.Match.group` returns the substring that was matched by the RE. " +":meth:`~re.Match.start` and :meth:`~re.Match.end` return the starting and " +"ending index of the match. :meth:`~re.Match.span` returns both start and end" +" indexes in a single tuple. Since the :meth:`~re.Pattern.match` method only" +" checks if the RE matches at the start of a string, :meth:`!start` will " +"always be zero. However, the :meth:`~re.Pattern.search` method of patterns " +"scans through the string, so the match may not start at zero in that case. " +"::" +msgstr "" +":meth:`~re.Match.group` 返回正则匹配的子字符串。 :meth:`~re.Match.start` 和 " +":meth:`~re.Match.end` 返回匹配的起始和结束索引。 :meth:`~re.Match.span` 在单个元组中返回开始和结束索引。 " +"由于 :meth:`~re.Pattern.match` 方法只检查正则是否在字符串的开头匹配,所以 :meth:`!start` 将始终为零。 " +"但是,模式的 :meth:`~re.Pattern.search` 方法会扫描字符串,因此在这种情况下匹配可能不会从零开始。::" + +#: ../../howto/regex.rst:456 +msgid "" +"In actual programs, the most common style is to store the :ref:`match object" +" ` in a variable, and then check if it was ``None``. This " +"usually looks like::" +msgstr "" +"在实际程序中,最常见的样式是在变量中存储 :ref:`匹配对象 `,然后检查它是否为 ``None``。 " +"这通常看起来像::" + +#: ../../howto/regex.rst:467 +msgid "" +"Two pattern methods return all of the matches for a pattern. " +":meth:`~re.Pattern.findall` returns a list of matching strings::" +msgstr "两种模式方法返回模式的所有匹配项。 :meth:`~re.Pattern.findall` 返回匹配字符串的列表::" + +#: ../../howto/regex.rst:474 +msgid "" +"The ``r`` prefix, making the literal a raw string literal, is needed in this" +" example because escape sequences in a normal \"cooked\" string literal that" +" are not recognized by Python, as opposed to regular expressions, now result" +" in a :exc:`DeprecationWarning` and will eventually become a " +":exc:`SyntaxError`. See :ref:`the-backslash-plague`." +msgstr "" +"在这个例子中需要 ``r`` 前缀,使字面为原始字符串字面,因为普通的“加工”字符串字面中的转义序列不能被 Python 识别为正则表达式,导致 " +":exc:`DeprecationWarning` 并最终产生 :exc:`SyntaxError`。 请参阅 :ref:`the-backslash-" +"plague`。" + +#: ../../howto/regex.rst:480 +msgid "" +":meth:`~re.Pattern.findall` has to create the entire list before it can be " +"returned as the result. The :meth:`~re.Pattern.finditer` method returns a " +"sequence of :ref:`match object ` instances as an " +":term:`iterator`::" +msgstr "" +":meth:`~re.Pattern.findall` 必须先创建整个列表才能返回结果。 :meth:`~re.Pattern.finditer` " +"方法将一个 :ref:`匹配对象 ` 的序列返回为一个 :term:`iterator` ::" + +#: ../../howto/regex.rst:496 +msgid "Module-Level Functions" +msgstr "模块级函数" + +#: ../../howto/regex.rst:498 +msgid "" +"You don't have to create a pattern object and call its methods; the " +":mod:`re` module also provides top-level functions called :func:`~re.match`," +" :func:`~re.search`, :func:`~re.findall`, :func:`~re.sub`, and so forth. " +"These functions take the same arguments as the corresponding pattern method " +"with the RE string added as the first argument, and still return either " +"``None`` or a :ref:`match object ` instance. ::" +msgstr "" +"你不必创建模式对象并调用其方法;:mod:`re` 模块还提供了顶级函数 " +":func:`~re.match`,:func:`~re.search`,:func:`~re.findall`,:func:`~re.sub` 等等。" +" 这些函数采用与相应模式方法相同的参数,并将正则字符串作为第一个参数添加,并仍然返回 ``None`` 或 :ref:`匹配对象 ` 实例。::" + +#: ../../howto/regex.rst:510 +msgid "" +"Under the hood, these functions simply create a pattern object for you and " +"call the appropriate method on it. They also store the compiled object in a" +" cache, so future calls using the same RE won't need to parse the pattern " +"again and again." +msgstr "" +"本质上,这些函数只是为你创建一个模式对象,并在其上调用适当的方法。 它们还将编译对象存储在缓存中,因此使用相同的未来调用将不需要一次又一次地解析该模式。" + +#: ../../howto/regex.rst:515 +msgid "" +"Should you use these module-level functions, or should you get the pattern " +"and call its methods yourself? If you're accessing a regex within a loop, " +"pre-compiling it will save a few function calls. Outside of loops, there's " +"not much difference thanks to the internal cache." +msgstr "" +"你是否应该使用这些模块级函数,还是应该自己获取模式并调用其方法? 如果你正在循环中访问正则表达式,预编译它将节省一些函数调用。 " +"在循环之外,由于有内部缓存,没有太大区别。" + +#: ../../howto/regex.rst:523 +msgid "Compilation Flags" +msgstr "编译标志" + +#: ../../howto/regex.rst:525 +msgid "" +"Compilation flags let you modify some aspects of how regular expressions " +"work. Flags are available in the :mod:`re` module under two names, a long " +"name such as :const:`IGNORECASE` and a short, one-letter form such as " +":const:`I`. (If you're familiar with Perl's pattern modifiers, the one-" +"letter forms use the same letters; the short form of :const:`re.VERBOSE` is " +":const:`re.X`, for example.) Multiple flags can be specified by bitwise OR-" +"ing them; ``re.I | re.M`` sets both the :const:`I` and :const:`M` flags, for" +" example." +msgstr "" +"编译标志允许你修改正则表达式的工作方式。 标志在 :mod:`re` 模块中有两个名称,长名称如 :const:`IGNORECASE` " +"和一个简短的单字母形式,例如 :const:`I`。 (如果你熟悉 Perl 的模式修饰符,则单字母形式使用和其相同的字母;例如, " +":const:`re.VERBOSE` 的缩写形式为 :const:`re.X`。)多个标志可以 通过按位或运算来指定它们;例如,``re.I | " +"re.M`` 设置 :const:`I` 和 :const:`M` 标志。" + +#: ../../howto/regex.rst:533 +msgid "" +"Here's a table of the available flags, followed by a more detailed " +"explanation of each one." +msgstr "这是一个可用标志表,以及每个标志的更详细说明。" + +#: ../../howto/regex.rst:537 +msgid "Flag" +msgstr "标志位" + +#: ../../howto/regex.rst:537 +msgid "Meaning" +msgstr "含意" + +#: ../../howto/regex.rst:539 +msgid ":const:`ASCII`, :const:`A`" +msgstr ":const:`ASCII`, :const:`A`" + +#: ../../howto/regex.rst:539 +msgid "" +"Makes several escapes like ``\\w``, ``\\b``, ``\\s`` and ``\\d`` match only " +"on ASCII characters with the respective property." +msgstr "使几个转义如 ``\\w``、``\\b``、``\\s`` 和 ``\\d`` 匹配仅与具有相应特征属性的 ASCII 字符匹配。" + +#: ../../howto/regex.rst:543 +msgid ":const:`DOTALL`, :const:`S`" +msgstr ":const:`DOTALL`, :const:`S`" + +#: ../../howto/regex.rst:543 +msgid "Make ``.`` match any character, including newlines." +msgstr "使 ``.`` 匹配任何字符,包括换行符。" + +#: ../../howto/regex.rst:546 +msgid ":const:`IGNORECASE`, :const:`I`" +msgstr ":const:`IGNORECASE`, :const:`I`" + +#: ../../howto/regex.rst:546 +msgid "Do case-insensitive matches." +msgstr "进行大小写不敏感匹配。" + +#: ../../howto/regex.rst:548 +msgid ":const:`LOCALE`, :const:`L`" +msgstr ":const:`LOCALE`, :const:`L`" + +#: ../../howto/regex.rst:548 +msgid "Do a locale-aware match." +msgstr "进行区域设置感知匹配。" + +#: ../../howto/regex.rst:550 +msgid ":const:`MULTILINE`, :const:`M`" +msgstr ":const:`MULTILINE`, :const:`M`" + +#: ../../howto/regex.rst:550 +msgid "Multi-line matching, affecting ``^`` and ``$``." +msgstr "多行匹配,影响 ``^`` 和 ``$``。" + +#: ../../howto/regex.rst:553 +msgid ":const:`VERBOSE`, :const:`X` (for 'extended')" +msgstr ":const:`VERBOSE`, :const:`X` (为 '扩展')" + +#: ../../howto/regex.rst:553 +msgid "" +"Enable verbose REs, which can be organized more cleanly and understandably." +msgstr "启用详细的正则,可以更清晰,更容易理解。" + +#: ../../howto/regex.rst:562 +msgid "" +"Perform case-insensitive matching; character class and literal strings will " +"match letters by ignoring case. For example, ``[A-Z]`` will match lowercase" +" letters, too. Full Unicode matching also works unless the :const:`ASCII` " +"flag is used to disable non-ASCII matches. When the Unicode patterns " +"``[a-z]`` or ``[A-Z]`` are used in combination with the :const:`IGNORECASE` " +"flag, they will match the 52 ASCII letters and 4 additional non-ASCII " +"letters: 'İ' (U+0130, Latin capital letter I with dot above), 'ı' (U+0131, " +"Latin small letter dotless i), 'ſ' (U+017F, Latin small letter long s) and " +"'K' (U+212A, Kelvin sign). ``Spam`` will match ``'Spam'``, ``'spam'``, " +"``'spAM'``, or ``'ſpam'`` (the latter is matched only in Unicode mode). This" +" lowercasing doesn't take the current locale into account; it will if you " +"also set the :const:`LOCALE` flag." +msgstr "" +"执行不区分大小写的匹配;字符类和字面字符串将通过忽略大小写来匹配字母。 例如,``[A-Z]`` 也匹配小写字母。 除非使用 " +":const:`ASCII` 标志来禁用非ASCII匹配,否则完全 Unicode 匹配也有效。 当 Unicode 模式 ``[a-z]`` 或 " +"``[A-Z]`` 与 :const:`IGNORECASE` 标志结合使用时,它们将匹配 52 个 ASCII 字母和 4 个额外的非 ASCII " +"字母:'İ' (U+0130,拉丁大写字母 I,带上面的点),'ı' (U+0131,拉丁文小写字母无点 i),'s' (U+017F,拉丁文小写字母长" +" s) 和'K' (U+212A,开尔文符号)。 ``Spam`` 将匹配 ``'Spam'``,``'spam'``,``'spAM'`` 或 " +"``'ſpam'`` (后者仅在 Unicode 模式下匹配)。 此小写不考虑当前区域设置;如果你还设置了 :const:`LOCALE` " +"标志,则将考虑。" + +#: ../../howto/regex.rst:580 +msgid "" +"Make ``\\w``, ``\\W``, ``\\b``, ``\\B`` and case-insensitive matching " +"dependent on the current locale instead of the Unicode database." +msgstr "使 ``\\w``、``\\W``、``\\b``、``\\B`` 和大小写敏感匹配依赖于当前区域而不是 Unicode 数据库。" + +#: ../../howto/regex.rst:583 +msgid "" +"Locales are a feature of the C library intended to help in writing programs " +"that take account of language differences. For example, if you're " +"processing encoded French text, you'd want to be able to write ``\\w+`` to " +"match words, but ``\\w`` only matches the character class ``[A-Za-z]`` in " +"bytes patterns; it won't match bytes corresponding to ``é`` or ``ç``. If " +"your system is configured properly and a French locale is selected, certain " +"C functions will tell the program that the byte corresponding to ``é`` " +"should also be considered a letter. Setting the :const:`LOCALE` flag when " +"compiling a regular expression will cause the resulting compiled object to " +"use these C functions for ``\\w``; this is slower, but also enables ``\\w+``" +" to match French words as you'd expect. The use of this flag is discouraged " +"in Python 3 as the locale mechanism is very unreliable, it only handles one " +"\"culture\" at a time, and it only works with 8-bit locales. Unicode " +"matching is already enabled by default in Python 3 for Unicode (str) " +"patterns, and it is able to handle different locales/languages." +msgstr "" +"区域设置是 C 库的一个功能,旨在帮助编写考虑到语言差异的程序。例如,如果你正在处理编码的法语文本,那么你希望能够编写 ``\\w+`` 来匹配单词,但" +" ``\\w`` 只匹配字符类 ``[A-Za-z]`` 字节模式;它不会匹配对应于 ``é`` 或 ``ç`` " +"的字节。如果你的系统配置正确并且选择了法语区域设置,某些C函数将告诉程序对应于 ``é`` 的字节也应该被视为字母。在编译正则表达式时设置 " +":const:`LOCALE` 标志将导致生成的编译对象将这些C函数用于 ``\\w``;这比较慢,但也可以使 ``\\w+`` " +"匹配你所期望的法语单词。在 Python 3 中不鼓励使用此标志,因为语言环境机制非常不可靠,它一次只处理一个“文化”,它只适用于 8 " +"位语言环境。默认情况下,Python 3 中已经为 Unicode(str)模式启用了 Unicode 匹配,并且它能够处理不同的区域/语言。" + +#: ../../howto/regex.rst:605 +msgid "" +"(``^`` and ``$`` haven't been explained yet; they'll be introduced in " +"section :ref:`more-metacharacters`.)" +msgstr "(``^`` 和 ``$`` 还没有解释;它们将在以下部分介绍 :ref:`more-metacharacters`。)" + +#: ../../howto/regex.rst:608 +msgid "" +"Usually ``^`` matches only at the beginning of the string, and ``$`` matches" +" only at the end of the string and immediately before the newline (if any) " +"at the end of the string. When this flag is specified, ``^`` matches at the " +"beginning of the string and at the beginning of each line within the string," +" immediately following each newline. Similarly, the ``$`` metacharacter " +"matches either at the end of the string and at the end of each line " +"(immediately preceding each newline)." +msgstr "" +"通常 ``^`` 只匹配字符串的开头,而 ``$`` 只匹配字符串的结尾,紧接在字符串末尾的换行符(如果有的话)之前。 当指定了这个标志时,``^`` " +"匹配字符串的开头和字符串中每一行的开头,紧跟在每个换行符之后。 类似地,``$`` 元字符匹配字符串的结尾和每行的结尾(紧接在每个换行符之前)。" + +#: ../../howto/regex.rst:621 +msgid "" +"Makes the ``'.'`` special character match any character at all, including a " +"newline; without this flag, ``'.'`` will match anything *except* a newline." +msgstr "使 ``'.'`` 特殊字符匹配任何字符,包括换行符;没有这个标志,``'.'`` 将匹配任何字符 *除了* 换行符。" + +#: ../../howto/regex.rst:629 +msgid "" +"Make ``\\w``, ``\\W``, ``\\b``, ``\\B``, ``\\s`` and ``\\S`` perform ASCII-" +"only matching instead of full Unicode matching. This is only meaningful for " +"Unicode patterns, and is ignored for byte patterns." +msgstr "" +"使 ``\\w``、``\\W``、``\\b``、``\\B``、``\\s`` 和 ``\\S`` 执行仅 ASCII 匹配而不是完整匹配 " +"Unicode 匹配。 这仅对 Unicode 模式有意义,并且对于字节模式将被忽略。" + +#: ../../howto/regex.rst:638 +msgid "" +"This flag allows you to write regular expressions that are more readable by " +"granting you more flexibility in how you can format them. When this flag " +"has been specified, whitespace within the RE string is ignored, except when " +"the whitespace is in a character class or preceded by an unescaped " +"backslash; this lets you organize and indent the RE more clearly. This flag" +" also lets you put comments within a RE that will be ignored by the engine; " +"comments are marked by a ``'#'`` that's neither in a character class or " +"preceded by an unescaped backslash." +msgstr "" +"此标志允许你编写更易读的正则表达式,方法是为您提供更灵活的格式化方式。 " +"指定此标志后,将忽略正则字符串中的空格,除非空格位于字符类中或前面带有未转义的反斜杠;这使你可以更清楚地组织和缩进正则。 " +"此标志还允许你将注释放在正则中,引擎将忽略该注释;注释标记为 ``'#'`` 既不是在字符类中,也不是在未转义的反斜杠之前。" + +#: ../../howto/regex.rst:647 +msgid "" +"For example, here's a RE that uses :const:`re.VERBOSE`; see how much easier " +"it is to read? ::" +msgstr "例如,这里的正则使用 :const:`re.VERBOSE`;看看阅读有多容易?::" + +#: ../../howto/regex.rst:660 +msgid "Without the verbose setting, the RE would look like this::" +msgstr "如果没有详细设置,正则将如下所示::" + +#: ../../howto/regex.rst:666 +msgid "" +"In the above example, Python's automatic concatenation of string literals " +"has been used to break up the RE into smaller pieces, but it's still more " +"difficult to understand than the version using :const:`re.VERBOSE`." +msgstr "" +"在上面的例子中,Python的字符串文字的自动连接已被用于将正则分解为更小的部分,但它仍然比以下使用 :const:`re.VERBOSE` " +"版本更难理解。" + +#: ../../howto/regex.rst:672 +msgid "More Pattern Power" +msgstr "更多模式能力" + +#: ../../howto/regex.rst:674 +msgid "" +"So far we've only covered a part of the features of regular expressions. In" +" this section, we'll cover some new metacharacters, and how to use groups to" +" retrieve portions of the text that was matched." +msgstr "到目前为止,我们只介绍了正则表达式的一部分功能。 在本节中,我们将介绍一些新的元字符,以及如何使用组来检索匹配的文本部分。" + +#: ../../howto/regex.rst:682 +msgid "More Metacharacters" +msgstr "更多元字符" + +#: ../../howto/regex.rst:684 +msgid "" +"There are some metacharacters that we haven't covered yet. Most of them " +"will be covered in this section." +msgstr "我们还没有涉及到一些元字符。 其中大部分内容将在本节中介绍。" + +#: ../../howto/regex.rst:687 +msgid "" +"Some of the remaining metacharacters to be discussed are :dfn:`zero-width " +"assertions`. They don't cause the engine to advance through the string; " +"instead, they consume no characters at all, and simply succeed or fail. For" +" example, ``\\b`` is an assertion that the current position is located at a " +"word boundary; the position isn't changed by the ``\\b`` at all. This means" +" that zero-width assertions should never be repeated, because if they match " +"once at a given location, they can obviously be matched an infinite number " +"of times." +msgstr "" +"要讨论的其余一些元字符是 :dfn:`零宽度断言` 。 " +"它们不会使解析引擎在字符串中前进一个字符;相反,它们根本不占用任何字符,只是成功或失败。例如,``\\b`` " +"是一个断言,指明当前位置位于字边界;这个位置根本不会被 ``\\b`` " +"改变。这意味着永远不应重复零宽度断言,因为如果它们在给定位置匹配一次,它们显然可以无限次匹配。" + +#: ../../howto/regex.rst:703 +msgid "``|``" +msgstr "``|``" + +#: ../../howto/regex.rst:696 +msgid "" +"Alternation, or the \"or\" operator. If *A* and *B* are regular " +"expressions, ``A|B`` will match any string that matches either *A* or *B*. " +"``|`` has very low precedence in order to make it work reasonably when " +"you're alternating multi-character strings. ``Crow|Servo`` will match either" +" ``'Crow'`` or ``'Servo'``, not ``'Cro'``, a ``'w'`` or an ``'S'``, and " +"``'ervo'``." +msgstr "" +"或者“or”运算符。 如果 *A* 和 *B* 是正则表达式,``A|B`` 将匹配任何与 *A* 或 *B* 匹配的字符串。 ``|`` " +"具有非常低的优先级,以便在交替使用多字符字符串时使其合理地工作。 ``Crow|Servo`` 将匹配 ``'Crow'`` 或 " +"``'Servo'``,而不是 ``'Cro'``、``'w'`` 或 ``'S'`` 和 ``'ervo'``。" + +#: ../../howto/regex.rst:702 +msgid "" +"To match a literal ``'|'``, use ``\\|``, or enclose it inside a character " +"class, as in ``[|]``." +msgstr "要匹配字面 ``'|'``,请使用 ``\\|``,或将其括在字符类中,如 ``[|]``。" + +#: ../../howto/regex.rst:718 +msgid "``^``" +msgstr "``^``" + +#: ../../howto/regex.rst:706 +msgid "" +"Matches at the beginning of lines. Unless the :const:`MULTILINE` flag has " +"been set, this will only match at the beginning of the string. In " +":const:`MULTILINE` mode, this also matches immediately after each newline " +"within the string." +msgstr "" +"在行的开头匹配。 除非设置了 :const:`MULTILINE` 标志,否则只会在字符串的开头匹配。 在 :const:`MULTILINE` " +"模式下,这也在字符串中的每个换行符后立即匹配。" + +#: ../../howto/regex.rst:710 +msgid "" +"For example, if you wish to match the word ``From`` only at the beginning of" +" a line, the RE to use is ``^From``. ::" +msgstr "例如,如果你希望仅在行的开头匹配单词 ``From``,则要使用的正则 ``^From``。::" + +#: ../../howto/regex.rst:718 +msgid "To match a literal ``'^'``, use ``\\^``." +msgstr "要匹配字面 ``'^'``,使用 ``\\^``。" + +#: ../../howto/regex.rst:732 +msgid "``$``" +msgstr "``$``" + +#: ../../howto/regex.rst:721 +msgid "" +"Matches at the end of a line, which is defined as either the end of the " +"string, or any location followed by a newline character. ::" +msgstr "匹配行的末尾,定义为字符串的结尾,或者后跟换行符的任何位置。::" + +#: ../../howto/regex.rst:731 +msgid "" +"To match a literal ``'$'``, use ``\\$`` or enclose it inside a character " +"class, as in ``[$]``." +msgstr "以匹配字面 ``'$'``,使用 ``\\$`` 或者将其包裹在一个字符类中,例如 ``[$]``。" + +#: ../../howto/regex.rst:738 +msgid "``\\A``" +msgstr "``\\A``" + +#: ../../howto/regex.rst:735 +msgid "" +"Matches only at the start of the string. When not in :const:`MULTILINE` " +"mode, ``\\A`` and ``^`` are effectively the same. In :const:`MULTILINE` " +"mode, they're different: ``\\A`` still matches only at the beginning of the " +"string, but ``^`` may match at any location inside the string that follows a" +" newline character." +msgstr "" +"仅匹配字符串的开头。 当不在 :const:`MULTILINE` 模式时,``\\A`` 和 ``^`` 实际上是相同的。 在 " +":const:`MULTILINE` 模式中,它们是不同的: ``\\A`` 仍然只在字符串的开头匹配,但 ``^`` " +"可以匹配在换行符之后的字符串内的任何位置。" + +#: ../../howto/regex.rst:741 +msgid "``\\Z``" +msgstr "``\\Z``" + +#: ../../howto/regex.rst:741 +msgid "Matches only at the end of the string." +msgstr "只匹配字符串尾。" + +#: ../../howto/regex.rst:776 +msgid "``\\b``" +msgstr "``\\b``" + +#: ../../howto/regex.rst:744 +msgid "" +"Word boundary. This is a zero-width assertion that matches only at the " +"beginning or end of a word. A word is defined as a sequence of alphanumeric" +" characters, so the end of a word is indicated by whitespace or a non-" +"alphanumeric character." +msgstr "字边界。 这是一个零宽度断言,仅在单词的开头或结尾处匹配。 单词被定义为一个字母数字字符序列,因此单词的结尾由空格或非字母数字字符表示。" + +#: ../../howto/regex.rst:749 +msgid "" +"The following example matches ``class`` only when it's a complete word; it " +"won't match when it's contained inside another word. ::" +msgstr "以下示例仅当它是一个完整的单词时匹配 ``class``;当它包含在另一个单词中时将不会匹配。 ::" + +#: ../../howto/regex.rst:760 +msgid "" +"There are two subtleties you should remember when using this special " +"sequence. First, this is the worst collision between Python's string " +"literals and regular expression sequences. In Python's string literals, " +"``\\b`` is the backspace character, ASCII value 8. If you're not using raw " +"strings, then Python will convert the ``\\b`` to a backspace, and your RE " +"won't match as you expect it to. The following example looks the same as our" +" previous RE, but omits the ``'r'`` in front of the RE string. ::" +msgstr "" +"使用这个特殊序列时,你应该记住两个细微之处。 首先,这是 Python 的字符串文字和正则表达式序列之间最严重的冲突。 在 Python " +"的字符串文字中,``\\b`` 是退格字符,ASCII 值为8。 如果你没有使用原始字符串,那么 Python 会将 ``\\b`` " +"转换为退格,你的正则不会按照你的预期匹配。 以下示例与我们之前的正则看起来相同,但省略了正则字符串前面的 ``'r'``。::" + +#: ../../howto/regex.rst:774 +msgid "" +"Second, inside a character class, where there's no use for this assertion, " +"``\\b`` represents the backspace character, for compatibility with Python's " +"string literals." +msgstr "其次,在一个字符类中,这个断言没有用处,``\\b`` 表示退格字符,以便与 Python 的字符串文字兼容。" + +#: ../../howto/regex.rst:781 +msgid "``\\B``" +msgstr "``\\B``" + +#: ../../howto/regex.rst:779 +msgid "" +"Another zero-width assertion, this is the opposite of ``\\b``, only matching" +" when the current position is not at a word boundary." +msgstr "另一个零宽度断言,这与 ``\\b`` 相反,仅在当前位置不在字边界时才匹配。" + +#: ../../howto/regex.rst:784 +msgid "Grouping" +msgstr "分组" + +#: ../../howto/regex.rst:786 +msgid "" +"Frequently you need to obtain more information than just whether the RE " +"matched or not. Regular expressions are often used to dissect strings by " +"writing a RE divided into several subgroups which match different components" +" of interest. For example, an RFC-822 header line is divided into a header " +"name and a value, separated by a ``':'``, like this:" +msgstr "" +"通常,你需要获取更多信息,而不仅仅是正则是否匹配。 正则表达式通常用于通过将正则分成几个子组来解析字符串,这些子组匹配不同的感兴趣组件。 " +"例如,RFC-822 标题行分为标题名称和值,用 ``':'`` 分隔,如下所示:" + +#: ../../howto/regex.rst:799 +msgid "" +"This can be handled by writing a regular expression which matches an entire " +"header line, and has one group which matches the header name, and another " +"group which matches the header's value." +msgstr "这可以通过编写与整个标题行匹配的正则表达式来处理,并且具有与标题名称匹配的一个组,以及与标题的值匹配的另一个组。" + +#: ../../howto/regex.rst:803 +msgid "" +"Groups are marked by the ``'('``, ``')'`` metacharacters. ``'('`` and " +"``')'`` have much the same meaning as they do in mathematical expressions; " +"they group together the expressions contained inside them, and you can " +"repeat the contents of a group with a repeating qualifier, such as ``*``, " +"``+``, ``?``, or ``{m,n}``. For example, ``(ab)*`` will match zero or more " +"repetitions of ``ab``. ::" +msgstr "" +"组由 ``'('``,``')'`` 元字符标记。 ``'('`` 和 ``')'`` " +"与数学表达式的含义大致相同;它们将包含在其中的表达式组合在一起,你可以使用重复限定符重复组的内容,例如 ``*``,``+``,``?`` 或 " +"``{m,n}``。 例如,``(ab)*`` 将匹配 ``ab`` 的零次或多次重复。::" + +#: ../../howto/regex.rst:814 +msgid "" +"Groups indicated with ``'('``, ``')'`` also capture the starting and ending " +"index of the text that they match; this can be retrieved by passing an " +"argument to :meth:`~re.Match.group`, :meth:`~re.Match.start`, " +":meth:`~re.Match.end`, and :meth:`~re.Match.span`. Groups are numbered " +"starting with 0. Group 0 is always present; it's the whole RE, so " +":ref:`match object ` methods all have group 0 as their " +"default argument. Later we'll see how to express groups that don't capture " +"the span of text that they match. ::" +msgstr "" +"用 ``'('``,``')'`` 表示的组也捕获它们匹配的文本的起始和结束索引;这可以通过将参数传递给 " +":meth:`~re.Match.group`、:meth:`~re.Match.start`、:meth:`~re.Match.end` 以及 " +":meth:`~re.Match.span`。 组从 0 开始编号。组 0 始终存在;它表示整个正则,所以 :ref:`匹配对象 ` 方法都将组 0 作为默认参数。 稍后我们将看到如何表达不捕获它们匹配的文本范围的组。::" + +#: ../../howto/regex.rst:830 +msgid "" +"Subgroups are numbered from left to right, from 1 upward. Groups can be " +"nested; to determine the number, just count the opening parenthesis " +"characters, going from left to right. ::" +msgstr "子组从左到右编号,从 1 向上编号。 组可以嵌套;要确定编号,只需计算从左到右的左括号字符。::" + +#: ../../howto/regex.rst:843 +msgid "" +":meth:`~re.Match.group` can be passed multiple group numbers at a time, in " +"which case it will return a tuple containing the corresponding values for " +"those groups. ::" +msgstr ":meth:`~re.Match.group` 可以一次传递多个组号,在这种情况下,它将返回一个包含这些组的相应值的元组。::" + +#: ../../howto/regex.rst:849 +msgid "" +"The :meth:`~re.Match.groups` method returns a tuple containing the strings " +"for all the subgroups, from 1 up to however many there are. ::" +msgstr ":meth:`~re.Match.groups` 方法返回一个元组,其中包含所有子组的字符串,从1到最后一个子组。::" + +#: ../../howto/regex.rst:855 +msgid "" +"Backreferences in a pattern allow you to specify that the contents of an " +"earlier capturing group must also be found at the current location in the " +"string. For example, ``\\1`` will succeed if the exact contents of group 1 " +"can be found at the current position, and fails otherwise. Remember that " +"Python's string literals also use a backslash followed by numbers to allow " +"including arbitrary characters in a string, so be sure to use a raw string " +"when incorporating backreferences in a RE." +msgstr "" +"模式中的后向引用允许你指定还必须在字符串中的当前位置找到先前捕获组的内容。 例如,如果可以在当前位置找到组 1 的确切内容,则 ``\\1`` " +"将成功,否则将失败。 请记住,Python 的字符串文字也使用反斜杠后跟数字以允许在字符串中包含任意字符,因此正则中引入反向引用时务必使用原始字符串。" + +#: ../../howto/regex.rst:863 +msgid "For example, the following RE detects doubled words in a string. ::" +msgstr "例如,以下正则检测字符串中重复的单词。::" + +#: ../../howto/regex.rst:869 +msgid "" +"Backreferences like this aren't often useful for just searching through a " +"string --- there are few text formats which repeat data in this way --- but " +"you'll soon find out that they're *very* useful when performing string " +"substitutions." +msgstr "" +"像这样的后向引用通常不仅仅用于搜索字符串 —— 很少有文本格式以这种方式重复数据 —— 但是你很快就会发现它们在执行字符串替换时 *非常* 有用。" + +#: ../../howto/regex.rst:875 +msgid "Non-capturing and Named Groups" +msgstr "非捕获和命名组" + +#: ../../howto/regex.rst:877 +msgid "" +"Elaborate REs may use many groups, both to capture substrings of interest, " +"and to group and structure the RE itself. In complex REs, it becomes " +"difficult to keep track of the group numbers. There are two features which " +"help with this problem. Both of them use a common syntax for regular " +"expression extensions, so we'll look at that first." +msgstr "" +"精心设计的正则可以使用许多组,既可以捕获感兴趣的子串,也可以对正则本身进行分组和构建。 在复杂的正则中,很难跟踪组号。 有两个功能可以帮助解决这个问题。" +" 它们都使用常用语法进行正则表达式扩展,因此我们首先看一下。" + +#: ../../howto/regex.rst:883 +msgid "" +"Perl 5 is well known for its powerful additions to standard regular " +"expressions. For these new features the Perl developers couldn't choose new " +"single-keystroke metacharacters or new special sequences beginning with " +"``\\`` without making Perl's regular expressions confusingly different from " +"standard REs. If they chose ``&`` as a new metacharacter, for example, old " +"expressions would be assuming that ``&`` was a regular character and " +"wouldn't have escaped it by writing ``\\&`` or ``[&]``." +msgstr "" +"Perl 5 以其对标准正则表达式的强大补充而闻名。 对于这些新功能,Perl 开发人员无法选择新的单键击元字符或以 ``\\`` " +"开头的新特殊序列,否则 Perl 的正则表达式与标准正则容易混淆。 例如,如果他们选择 ``&`` 作为一个新的元字符,旧的表达式将假设 ``&`` " +"是一个普通字符,并且不会编写 ``\\&`` 或 ``[&]``。" + +#: ../../howto/regex.rst:890 +msgid "" +"The solution chosen by the Perl developers was to use ``(?...)`` as the " +"extension syntax. ``?`` immediately after a parenthesis was a syntax error " +"because the ``?`` would have nothing to repeat, so this didn't introduce any" +" compatibility problems. The characters immediately after the ``?`` " +"indicate what extension is being used, so ``(?=foo)`` is one thing (a " +"positive lookahead assertion) and ``(?:foo)`` is something else (a non-" +"capturing group containing the subexpression ``foo``)." +msgstr "" +"Perl 开发人员选择的解决方案是使用 ``(?...)`` 作为扩展语法。 括号后面紧跟 ``?`` 是一个语法错误,因为 ``?`` " +"没有什么可重复的,所以这样并不会带来任何兼容性问题。 紧跟在 ``?`` 之后的字符表示正在使用的扩展语法,所以 ``(?=foo)`` " +"是一种语法(一个前视断言)和 ``(?:foo)`` 是另一种语法( 包含子表达式 ``foo`` 的非捕获组)。" + +#: ../../howto/regex.rst:898 +msgid "" +"Python supports several of Perl's extensions and adds an extension syntax to" +" Perl's extension syntax. If the first character after the question mark is" +" a ``P``, you know that it's an extension that's specific to Python." +msgstr "" +"Python 支持一些 Perl 的扩展,并增加了新的扩展语法用于 Perl 的扩展语法。 如果在问号之后的第一个字符为 ``P``,即表明其为 " +"Python 专属的扩展。" + +#: ../../howto/regex.rst:903 +msgid "" +"Now that we've looked at the general extension syntax, we can return to the " +"features that simplify working with groups in complex REs." +msgstr "现在我们已经了解了一般的扩展语法,我们可以回到简化复杂正则中组处理的功能。" + +#: ../../howto/regex.rst:906 +msgid "" +"Sometimes you'll want to use a group to denote a part of a regular " +"expression, but aren't interested in retrieving the group's contents. You " +"can make this fact explicit by using a non-capturing group: ``(?:...)``, " +"where you can replace the ``...`` with any other regular expression. ::" +msgstr "" +"有时你会想要使用组来表示正则表达式的一部分,但是对检索组的内容不感兴趣。 你可以通过使用非捕获组来显式表达这个事实: " +"``(?:...)``,你可以用任何其他正则表达式替换 ``...``。::" + +#: ../../howto/regex.rst:918 +msgid "" +"Except for the fact that you can't retrieve the contents of what the group " +"matched, a non-capturing group behaves exactly the same as a capturing " +"group; you can put anything inside it, repeat it with a repetition " +"metacharacter such as ``*``, and nest it within other groups (capturing or " +"non-capturing). ``(?:...)`` is particularly useful when modifying an " +"existing pattern, since you can add new groups without changing how all the " +"other groups are numbered. It should be mentioned that there's no " +"performance difference in searching between capturing and non-capturing " +"groups; neither form is any faster than the other." +msgstr "" +"除了你无法检索组匹配内容的事实外,非捕获组的行为与捕获组完全相同;你可以在里面放任何东西,用重复元字符重复它,比如 " +"``*``,然后把它嵌入其他组(捕获或不捕获)。 ``(?:...)`` 在修改现有模式时特别有用,因为你可以添加新组而不更改所有其他组的编号方式。 " +"值得一提的是,捕获和非捕获组之间的搜索没有性能差异;两种形式没有一种更快。" + +#: ../../howto/regex.rst:927 +msgid "" +"A more significant feature is named groups: instead of referring to them by " +"numbers, groups can be referenced by a name." +msgstr "更重要的功能是命名组:不是通过数字引用它们,而是可以通过名称引用组。" + +#: ../../howto/regex.rst:930 +msgid "" +"The syntax for a named group is one of the Python-specific extensions: " +"``(?P...)``. *name* is, obviously, the name of the group. Named " +"groups behave exactly like capturing groups, and additionally associate a " +"name with a group. The :ref:`match object ` methods that " +"deal with capturing groups all accept either integers that refer to the " +"group by number or strings that contain the desired group's name. Named " +"groups are still given numbers, so you can retrieve information about a " +"group in two ways::" +msgstr "" +"命名组的语法是Python特定的扩展之一: ``(?P...)``。 *name* 显然是该组的名称。 " +"命名组的行为与捕获组完全相同,并且还将名称与组关联。 处理捕获组的 :ref:`匹配对象 ` " +"方法都接受按编号引用组的整数或包含所需组名的字符串。 命名组仍然是给定的数字,因此你可以通过两种方式检索有关组的信息::" + +#: ../../howto/regex.rst:945 +msgid "" +"Additionally, you can retrieve named groups as a dictionary with " +":meth:`~re.Match.groupdict`::" +msgstr "此外,你可以通过 :meth:`~re.Match.groupdict` 将命名分组提取为一个字典::" + +#: ../../howto/regex.rst:952 +msgid "" +"Named groups are handy because they let you use easily-remembered names, " +"instead of having to remember numbers. Here's an example RE from the " +":mod:`imaplib` module::" +msgstr "命名组很有用,因为它们允许你使用容易记住的名称,而不必记住数字。 这是来自 :mod:`imaplib` 模块的示例正则 ::" + +#: ../../howto/regex.rst:963 +msgid "" +"It's obviously much easier to retrieve ``m.group('zonem')``, instead of " +"having to remember to retrieve group 9." +msgstr "检索 ``m.group('zonem')`` 显然要容易得多,而不必记住检索第 9 组。" + +#: ../../howto/regex.rst:966 +msgid "" +"The syntax for backreferences in an expression such as ``(...)\\1`` refers " +"to the number of the group. There's naturally a variant that uses the group" +" name instead of the number. This is another Python extension: ``(?P=name)``" +" indicates that the contents of the group called *name* should again be " +"matched at the current point. The regular expression for finding doubled " +"words, ``\\b(\\w+)\\s+\\1\\b`` can also be written as " +"``\\b(?P\\w+)\\s+(?P=word)\\b``::" +msgstr "" +"表达式中的后向引用语法,例如 ``(...)\\1``,指的是组的编号。 当然有一种变体使用组名而不是数字。 这是另一个 Python 扩展: " +"``(?P=name)`` 表示在当前点再次匹配名为 *name* 的组的内容。 " +"用于查找重复单词的正则表达式,``\\b(\\w+)\\s+\\1\\b`` 也可以写为 " +"``\\b(?P\\w+)\\s+(?P=word)\\b``::" + +#: ../../howto/regex.rst:979 +msgid "Lookahead Assertions" +msgstr "前视断言" + +#: ../../howto/regex.rst:981 +msgid "" +"Another zero-width assertion is the lookahead assertion. Lookahead " +"assertions are available in both positive and negative form, and look like " +"this:" +msgstr "另一个零宽断言是前视断言。 前视断言有肯定型和否定型两种形式,如下所示:" + +#: ../../howto/regex.rst:989 +msgid "``(?=...)``" +msgstr "``(?=…)``" + +#: ../../howto/regex.rst:985 +msgid "" +"Positive lookahead assertion. This succeeds if the contained regular " +"expression, represented here by ``...``, successfully matches at the current" +" location, and fails otherwise. But, once the contained expression has been " +"tried, the matching engine doesn't advance at all; the rest of the pattern " +"is tried right where the assertion started." +msgstr "" +"肯定型前视断言。如果内部的表达式(这里用 ``...`` 来表示)在当前位置可以匹配,则匹配成功,否则匹配失败。 " +"但是,内部表达式尝试匹配之后,正则引擎并不会向前推进;正则表达式的其余部分依然会在断言开始的地方尝试匹配。" + +#: ../../howto/regex.rst:994 +msgid "``(?!...)``" +msgstr "``(?!…)``" + +#: ../../howto/regex.rst:992 +msgid "" +"Negative lookahead assertion. This is the opposite of the positive " +"assertion; it succeeds if the contained expression *doesn't* match at the " +"current position in the string." +msgstr "否定型前视断言。 与肯定型断言正好相反,如果内部表达式在字符串中的当前位置 **不** 匹配,则成功。" + +#: ../../howto/regex.rst:996 +msgid "" +"To make this concrete, let's look at a case where a lookahead is useful. " +"Consider a simple pattern to match a filename and split it apart into a base" +" name and an extension, separated by a ``.``. For example, in ``news.rc``, " +"``news`` is the base name, and ``rc`` is the filename's extension." +msgstr "" +"更具体一些,来看一个前视的实用案例。 考虑用一个简单的表达式来匹配文件名并将其拆分为基本名称和扩展名,以 ``.`` 分隔。 例如,在 " +"``news.rc`` 中,``news`` 是基本名称,``rc`` 是文件名的扩展名。" + +#: ../../howto/regex.rst:1001 +msgid "The pattern to match this is quite simple:" +msgstr "与此匹配的模式非常简单:" + +#: ../../howto/regex.rst:1003 +msgid "``.*[.].*$``" +msgstr "``.*[.].*$``" + +#: ../../howto/regex.rst:1005 +msgid "" +"Notice that the ``.`` needs to be treated specially because it's a " +"metacharacter, so it's inside a character class to only match that specific " +"character. Also notice the trailing ``$``; this is added to ensure that all" +" the rest of the string must be included in the extension. This regular " +"expression matches ``foo.bar`` and ``autoexec.bat`` and ``sendmail.cf`` and " +"``printers.conf``." +msgstr "" +"请注意,``.`` 需要特别处理,因为它是元字符,所以它在字符类中只能匹配特定字符。 还要注意尾随的 " +"``$``;添加此项以确保扩展名中的所有其余字符串都必须包含在扩展名中。 这个正则表达式匹配 " +"``foo.bar``、``autoexec.bat``、``sendmail.cf`` 和 ``printers.conf``。" + +#: ../../howto/regex.rst:1012 +msgid "" +"Now, consider complicating the problem a bit; what if you want to match " +"filenames where the extension is not ``bat``? Some incorrect attempts:" +msgstr "现在,考虑使更复杂一点的问题;如果你想匹配扩展名不是 ``bat`` 的文件名怎么办? 一些错误的尝试:" + +#: ../../howto/regex.rst:1015 +msgid "" +"``.*[.][^b].*$`` The first attempt above tries to exclude ``bat`` by " +"requiring that the first character of the extension is not a ``b``. This is" +" wrong, because the pattern also doesn't match ``foo.bar``." +msgstr "" +"``.*[.][^b].*$`` 上面的第一次尝试试图通过要求扩展名的第一个字符不是 ``b`` 来排除 ``bat``。 这是错误的,因为模式也与 " +"``foo.bar`` 不匹配。" + +#: ../../howto/regex.rst:1019 +msgid "``.*[.]([^b]..|.[^a].|..[^t])$``" +msgstr "``.*[.]([^b]..|.[^a].|..[^t])$``" + +#: ../../howto/regex.rst:1021 +msgid "" +"The expression gets messier when you try to patch up the first solution by " +"requiring one of the following cases to match: the first character of the " +"extension isn't ``b``; the second character isn't ``a``; or the third " +"character isn't ``t``. This accepts ``foo.bar`` and rejects " +"``autoexec.bat``, but it requires a three-letter extension and won't accept " +"a filename with a two-letter extension such as ``sendmail.cf``. We'll " +"complicate the pattern again in an effort to fix it." +msgstr "" +"当你尝试通过要求以下一种情况匹配来修补第一个解决方案时,表达式变得更加混乱:扩展的第一个字符不是 ``b``。 第二个字符不 " +"``a``;或者第三个字符不是 ``t``。 这接受 ``foo.bar`` 并拒绝 " +"``autoexec.bat``,但它需要三个字母的扩展名,并且不接受带有两个字母扩展名的文件名,例如 ``sendmail.cf``。 " +"为了解决这个问题,我们会再次使模式复杂化。" + +#: ../../howto/regex.rst:1029 +msgid "``.*[.]([^b].?.?|.[^a]?.?|..?[^t]?)$``" +msgstr "``.*[.]([^b].?.?|.[^a]?.?|..?[^t]?)$``" + +#: ../../howto/regex.rst:1031 +msgid "" +"In the third attempt, the second and third letters are all made optional in " +"order to allow matching extensions shorter than three characters, such as " +"``sendmail.cf``." +msgstr "在第三次尝试中,第二个和第三个字母都是可选的,以便允许匹配的扩展名短于三个字符,例如 ``sendmail.cf``。" + +#: ../../howto/regex.rst:1035 +msgid "" +"The pattern's getting really complicated now, which makes it hard to read " +"and understand. Worse, if the problem changes and you want to exclude both " +"``bat`` and ``exe`` as extensions, the pattern would get even more " +"complicated and confusing." +msgstr "" +"模式现在变得非常复杂,这使得它难以阅读和理解。 更糟糕的是,如果问题发生变化并且你想要将 ``bat`` 和 ``exe`` " +"排除为扩展,那么该模式将变得更加复杂和混乱。" + +#: ../../howto/regex.rst:1040 +msgid "A negative lookahead cuts through all this confusion:" +msgstr "否定型前视可以解决所有这些困扰:" + +#: ../../howto/regex.rst:1042 +msgid "" +"``.*[.](?!bat$)[^.]*$`` The negative lookahead means: if the expression " +"``bat`` doesn't match at this point, try the rest of the pattern; if " +"``bat$`` does match, the whole pattern will fail. The trailing ``$`` is " +"required to ensure that something like ``sample.batch``, where the extension" +" only starts with ``bat``, will be allowed. The ``[^.]*`` makes sure that " +"the pattern works when there are multiple dots in the filename." +msgstr "" +"``.*[.](?!bat$)[^.]*$`` 否定型前视意味着:如果表达式 ``bat`` " +"在当前位置不能匹配,则可以接着尝试正则表达式的其余部分;如果 ``bat$`` 能匹配,则整个正则表达式将匹配失败。尾随的 ``$`` " +"是必需的,以确保可以匹配到像 ``sample.batch`` 这样以 ``bat`` 开头的文件名。当文件名中有多个点号时, ``[^.]*`` " +"可以确保表达式依然有效。" + +#: ../../howto/regex.rst:1049 +msgid "" +"Excluding another filename extension is now easy; simply add it as an " +"alternative inside the assertion. The following pattern excludes filenames " +"that end in either ``bat`` or ``exe``:" +msgstr "现在很容易排除另一个文件扩展名;只需在断言中添加它作为替代。 以下模块排除以 ``bat`` 或 ``exe``:" + +#: ../../howto/regex.rst:1053 +msgid "``.*[.](?!bat$|exe$)[^.]*$``" +msgstr "``.*[.](?!bat$|exe$)[^.]*$``" + +#: ../../howto/regex.rst:1057 +msgid "Modifying Strings" +msgstr "修改字符串" + +#: ../../howto/regex.rst:1059 +msgid "" +"Up to this point, we've simply performed searches against a static string. " +"Regular expressions are also commonly used to modify strings in various " +"ways, using the following pattern methods:" +msgstr "到目前为止,我们只是针对静态字符串执行搜索。 正则表达式通常也用于以各种方式修改字符串,使用以下模式方法:" + +#: ../../howto/regex.rst:1066 +msgid "``split()``" +msgstr "``split()``" + +#: ../../howto/regex.rst:1066 +msgid "Split the string into a list, splitting it wherever the RE matches" +msgstr "将字符串拆分为一个列表,在正则匹配的任何地方将其拆分" + +#: ../../howto/regex.rst:1069 +msgid "``sub()``" +msgstr "``sub()``" + +#: ../../howto/regex.rst:1069 +msgid "" +"Find all substrings where the RE matches, and replace them with a different " +"string" +msgstr "找到正则匹配的所有子字符串,并用不同的字符串替换它们" + +#: ../../howto/regex.rst:1072 +msgid "``subn()``" +msgstr "``subn()``" + +#: ../../howto/regex.rst:1072 +msgid "" +"Does the same thing as :meth:`!sub`, but returns the new string and the " +"number of replacements" +msgstr "与 :meth:`!sub` 相同,但返回新字符串和替换次数" + +#: ../../howto/regex.rst:1079 +msgid "Splitting Strings" +msgstr "分割字符串" + +#: ../../howto/regex.rst:1081 +msgid "" +"The :meth:`~re.Pattern.split` method of a pattern splits a string apart " +"wherever the RE matches, returning a list of the pieces. It's similar to the" +" :meth:`~str.split` method of strings but provides much more generality in " +"the delimiters that you can split by; string :meth:`!split` only supports " +"splitting by whitespace or by a fixed string. As you'd expect, there's a " +"module-level :func:`re.split` function, too." +msgstr "" +"模式的 :meth:`~re.Pattern.split` 方法在正则匹配的任何地方拆分字符串,返回一个片段列表。 它类似于 " +":meth:`~str.split` 字符串方法,但在分隔符的分隔符中提供了更多的通用性;字符串的 :meth:`!split` " +"仅支持按空格或固定字符串进行拆分。 正如你所期望的那样,还有一个模块级 :func:`re.split` 函数。" + +#: ../../howto/regex.rst:1092 +msgid "" +"Split *string* by the matches of the regular expression. If capturing " +"parentheses are used in the RE, then their contents will also be returned as" +" part of the resulting list. If *maxsplit* is nonzero, at most *maxsplit* " +"splits are performed." +msgstr "" +"通过正则表达式的匹配拆分 *字符串*。 如果在正则中使用捕获括号,则它们的内容也将作为结果列表的一部分返回。 如果 *maxsplit* " +"非零,则最多执行 *maxsplit* 次拆分。" + +#: ../../howto/regex.rst:1097 +msgid "" +"You can limit the number of splits made, by passing a value for *maxsplit*. " +"When *maxsplit* is nonzero, at most *maxsplit* splits will be made, and the " +"remainder of the string is returned as the final element of the list. In " +"the following example, the delimiter is any sequence of non-alphanumeric " +"characters. ::" +msgstr "" +"你可以通过传递 *maxsplit* 的值来限制分割的数量。 当 *maxsplit* 非零时,将最多进行 *maxsplit* " +"次拆分,并且字符串的其余部分将作为列表的最后一个元素返回。 在以下示例中,分隔符是任何非字母数字字符序列。::" + +#: ../../howto/regex.rst:1109 +msgid "" +"Sometimes you're not only interested in what the text between delimiters is," +" but also need to know what the delimiter was. If capturing parentheses are" +" used in the RE, then their values are also returned as part of the list. " +"Compare the following calls::" +msgstr "" +"有时你不仅对分隔符之间的文本感兴趣,而且还需要知道分隔符是什么。 如果在正则中使用捕获括号,则它们的值也将作为列表的一部分返回。 比较以下调用::" + +#: ../../howto/regex.rst:1121 +msgid "" +"The module-level function :func:`re.split` adds the RE to be used as the " +"first argument, but is otherwise the same. ::" +msgstr "模块级函数 :func:`re.split` 添加要正则作为第一个参数,但在其他方面是相同的。::" + +#: ../../howto/regex.rst:1133 +msgid "Search and Replace" +msgstr "搜索和替换" + +#: ../../howto/regex.rst:1135 +msgid "" +"Another common task is to find all the matches for a pattern, and replace " +"them with a different string. The :meth:`~re.Pattern.sub` method takes a " +"replacement value, which can be either a string or a function, and the " +"string to be processed." +msgstr "" +"另一个常见任务是找到模式的所有匹配项,并用不同的字符串替换它们。 :meth:`~re.Pattern.sub` " +"方法接受一个替换值,可以是字符串或函数,也可以是要处理的字符串。" + +#: ../../howto/regex.rst:1142 +msgid "" +"Returns the string obtained by replacing the leftmost non-overlapping " +"occurrences of the RE in *string* by the replacement *replacement*. If the " +"pattern isn't found, *string* is returned unchanged." +msgstr "" +"返回通过替换 *replacement* 替换 *string* 中正则的最左边非重叠出现而获得的字符串。 如果未找到模式,则 *string* " +"将保持不变。" + +#: ../../howto/regex.rst:1146 +msgid "" +"The optional argument *count* is the maximum number of pattern occurrences " +"to be replaced; *count* must be a non-negative integer. The default value " +"of 0 means to replace all occurrences." +msgstr "可选参数 *count* 是要替换的模式最大的出现次数;*count* 必须是非负整数。 默认值 0 表示替换所有。" + +#: ../../howto/regex.rst:1150 +msgid "" +"Here's a simple example of using the :meth:`~re.Pattern.sub` method. It " +"replaces colour names with the word ``colour``::" +msgstr "这是一个使用 :meth:`~re.Pattern.sub` 方法的简单示例。 它用 ``colour`` 这个词取代颜色名称::" + +#: ../../howto/regex.rst:1159 +msgid "" +"The :meth:`~re.Pattern.subn` method does the same work, but returns a " +"2-tuple containing the new string value and the number of replacements that" +" were performed::" +msgstr ":meth:`~re.Pattern.subn` 方法完成相同的工作,但返回一个包含新字符串值和已执行的替换次数的 2 元组::" + +#: ../../howto/regex.rst:1168 +msgid "" +"Empty matches are replaced only when they're not adjacent to a previous " +"empty match. ::" +msgstr "仅当空匹配与前一个空匹配不相邻时,才会替换空匹配。::" + +#: ../../howto/regex.rst:1175 +msgid "" +"If *replacement* is a string, any backslash escapes in it are processed. " +"That is, ``\\n`` is converted to a single newline character, ``\\r`` is " +"converted to a carriage return, and so forth. Unknown escapes such as " +"``\\&`` are left alone. Backreferences, such as ``\\6``, are replaced with " +"the substring matched by the corresponding group in the RE. This lets you " +"incorporate portions of the original text in the resulting replacement " +"string." +msgstr "" +"如果 *replacement* 是一个字符串,则处理其中的任何反斜杠转义。 也就是说,``\\n`` 被转换为单个换行符,``\\r`` " +"被转换为回车符,依此类推。 诸如 ``\\&`` 之类的未知转义是孤立的。 后向引用,例如 ``\\6``,被替换为正则中相应组匹配的子字符串。 " +"这使你可以在生成的替换字符串中合并原始文本的部分内容。" + +#: ../../howto/regex.rst:1182 +msgid "" +"This example matches the word ``section`` followed by a string enclosed in " +"``{``, ``}``, and changes ``section`` to ``subsection``::" +msgstr "" +"这个例子匹配单词 ``section`` 后跟一个用 ``{``,``}`` 括起来的字符串,并将 ``section`` 改为 " +"``subsection`` ::" + +#: ../../howto/regex.rst:1189 +msgid "" +"There's also a syntax for referring to named groups as defined by the " +"``(?P...)`` syntax. ``\\g`` will use the substring matched by " +"the group named ``name``, and ``\\g`` uses the corresponding group" +" number. ``\\g<2>`` is therefore equivalent to ``\\2``, but isn't ambiguous" +" in a replacement string such as ``\\g<2>0``. (``\\20`` would be " +"interpreted as a reference to group 20, not a reference to group 2 followed " +"by the literal character ``'0'``.) The following substitutions are all " +"equivalent, but use all three variations of the replacement string. ::" +msgstr "" +"还有一种语法用于引用由 ``(?P...)`` 语法定义的命名组。 ``\\g`` 将使用名为 ``name`` " +"的组匹配的子字符串,``\\g`` 使用相应的组号。 因此 ``\\g<2>`` 等同于 ``\\2``,但在诸如 " +"``\\g<2>0`` 之类的替换字符串中并不模糊。 (``\\20`` 将被解释为对组 20 的引用,而不是对组 2 的引用,后跟字面字符 " +"``'0'``。) 以下替换都是等效的,但使用所有三种变体替换字符串。::" + +#: ../../howto/regex.rst:1206 +msgid "" +"*replacement* can also be a function, which gives you even more control. If" +" *replacement* is a function, the function is called for every non-" +"overlapping occurrence of *pattern*. On each call, the function is passed a" +" :ref:`match object ` argument for the match and can use this" +" information to compute the desired replacement string and return it." +msgstr "" +"*replacement* 也可以是一个函数,它可以为你提供更多控制。 如果 *replacement* 是一个函数,则为 *pattern* " +"的每次非重叠出现将调用该函数。 在每次调用时,函数都会传递一个匹配的 :ref:`匹配对象 ` " +"参数,并可以使用此信息计算所需的替换字符串并将其返回。" + +#: ../../howto/regex.rst:1212 +msgid "" +"In the following example, the replacement function translates decimals into " +"hexadecimal::" +msgstr "在以下示例中,替换函数将小数转换为十六进制::" + +#: ../../howto/regex.rst:1224 +msgid "" +"When using the module-level :func:`re.sub` function, the pattern is passed " +"as the first argument. The pattern may be provided as an object or as a " +"string; if you need to specify regular expression flags, you must either use" +" a pattern object as the first parameter, or use embedded modifiers in the " +"pattern string, e.g. ``sub(\"(?i)b+\", \"x\", \"bbbb BBBB\")`` returns ``'x " +"x'``." +msgstr "" +"使用模块级别 :func:`re.sub` 函数时,模式作为第一个参数传递。 " +"模式可以是对象或字符串;如果需要指定正则表达式标志,则必须使用模式对象作为第一个参数,或者在模式字符串中使用嵌入式修饰符,例如: " +"``sub(\"(?i)b+\", \"x\", \"bbbb BBBB\")`` 返回 ``'x x'``。" + +#: ../../howto/regex.rst:1232 +msgid "Common Problems" +msgstr "常见问题" + +#: ../../howto/regex.rst:1234 +msgid "" +"Regular expressions are a powerful tool for some applications, but in some " +"ways their behaviour isn't intuitive and at times they don't behave the way " +"you may expect them to. This section will point out some of the most common" +" pitfalls." +msgstr "" +"正则表达式对于某些应用程序来说是一个强大的工具,但在某些方面,它们的行为并不直观,有时它们的行为方式与你的预期不同。 本节将指出一些最常见的陷阱。" + +#: ../../howto/regex.rst:1240 +msgid "Use String Methods" +msgstr "使用字符串方法" + +#: ../../howto/regex.rst:1242 +msgid "" +"Sometimes using the :mod:`re` module is a mistake. If you're matching a " +"fixed string, or a single character class, and you're not using any " +":mod:`re` features such as the :const:`~re.IGNORECASE` flag, then the full " +"power of regular expressions may not be required. Strings have several " +"methods for performing operations with fixed strings and they're usually " +"much faster, because the implementation is a single small C loop that's been" +" optimized for the purpose, instead of the large, more generalized regular " +"expression engine." +msgstr "" +"有时使用 :mod:`re` 模块是一个错误。 如果你匹配固定字符串或单个字符类,并且你没有使用任何 :mod:`re` 功能,例如 " +":const:`~re.IGNORECASE` 标志,那么正则表达式的全部功能可能不是必需的。 " +"字符串有几种方法可以使用固定字符串执行操作,它们通常要快得多,因为实现是一个针对此目的而优化的单个小 C 循环,而不是大型、更通用的正则表达式引擎。" + +#: ../../howto/regex.rst:1250 +msgid "" +"One example might be replacing a single fixed string with another one; for " +"example, you might replace ``word`` with ``deed``. :func:`re.sub` seems " +"like the function to use for this, but consider the :meth:`~str.replace` " +"method. Note that :meth:`!replace` will also replace ``word`` inside words," +" turning ``swordfish`` into ``sdeedfish``, but the naive RE ``word`` would " +"have done that, too. (To avoid performing the substitution on parts of " +"words, the pattern would have to be ``\\bword\\b``, in order to require that" +" ``word`` have a word boundary on either side. This takes the job beyond " +":meth:`!replace`'s abilities.)" +msgstr "" +"一个例子可能是用另一个固定字符串替换一个固定字符串;例如,你可以用 ``deed`` 替换 ``word`` 。 :func:`re.sub` " +"看起来像是用于此的函数,但请考虑 :meth:`~str.replace` 方法。 注意 :meth:`!replace` 也会替换单词里面的 " +"``word`` ,把 ``swordfish`` 变成 ``sdeedfish`` ,但简单的正则 ``word`` 也会这样做。 " +"(为了避免对单词的部分进行替换,模式必须是 ``\\bword\\b``,以便要求 ``word`` 在任何一方都有一个单词边界。这使得工作超出了 " +":meth:`!replace` 的能力。)" + +#: ../../howto/regex.rst:1259 +msgid "" +"Another common task is deleting every occurrence of a single character from " +"a string or replacing it with another single character. You might do this " +"with something like ``re.sub('\\n', ' ', S)``, but :meth:`~str.translate` is" +" capable of doing both tasks and will be faster than any regular expression " +"operation can be." +msgstr "" +"另一个常见任务是从字符串中删除单个字符的每个匹配项或将其替换为另一个字符。 你可以用 ``re.sub('\\n', ' ', S)`` " +"之类的东西来做这件事,但是 :meth:`~str.translate` 能够完成这两项任务,并且比任何正则表达式都快。" + +#: ../../howto/regex.rst:1265 +msgid "" +"In short, before turning to the :mod:`re` module, consider whether your " +"problem can be solved with a faster and simpler string method." +msgstr "简而言之,在转向 :mod:`re` 模块之前,请考虑是否可以使用更快更简单的字符串方法解决问题。" + +#: ../../howto/regex.rst:1270 +msgid "match() versus search()" +msgstr "match() 和 search()" + +#: ../../howto/regex.rst:1272 +msgid "" +"The :func:`~re.match` function only checks if the RE matches at the " +"beginning of the string while :func:`~re.search` will scan forward through " +"the string for a match. It's important to keep this distinction in mind. " +"Remember, :func:`!match` will only report a successful match which will " +"start at 0; if the match wouldn't start at zero, :func:`!match` will *not* " +"report it. ::" +msgstr "" +" :func:`~re.match` 函数只检查正则能否在字符串起始位置上找到匹配项,而 :func:`~re.search` " +"将向前扫描整个字符串的所有位置查找匹配项。 记住这一区别非常重要。 记住, :func:`!match` " +"仅会返回起始于位置0的匹配项;如果匹配不是起始于位置0,则 :func:`!match` *不会* 返回。::" + +#: ../../howto/regex.rst:1283 +msgid "" +"On the other hand, :func:`~re.search` will scan forward through the string, " +"reporting the first match it finds. ::" +msgstr "另一方面, :func:`~re.search` 将向前扫描字符串,报告它找到的第一个匹配项。::" + +#: ../../howto/regex.rst:1291 +msgid "" +"Sometimes you'll be tempted to keep using :func:`re.match`, and just add " +"``.*`` to the front of your RE. Resist this temptation and use " +":func:`re.search` instead. The regular expression compiler does some " +"analysis of REs in order to speed up the process of looking for a match. " +"One such analysis figures out what the first character of a match must be; " +"for example, a pattern starting with ``Crow`` must match starting with a " +"``'C'``. The analysis lets the engine quickly scan through the string " +"looking for the starting character, only trying the full match if a ``'C'`` " +"is found." +msgstr "" +"有时你会被诱惑继续使用 :func:`re.match` ,只需在你的正则前面添加 ``.*`` 。抵制这种诱惑并使用 " +":func:`re.search` 代替。 正则表达式编译器对正则进行一些分析,以加快寻找匹配的过程。 " +"其中一个分析可以确定匹配的第一个特征必须是什么;例如,以 ``Crow`` 开头的模式必须与 ``'C'`` 匹配。 " +"分析让引擎快速扫描字符串,寻找起始字符,只在找到 ``'C'`` 时尝试完全匹配。" + +#: ../../howto/regex.rst:1300 +msgid "" +"Adding ``.*`` defeats this optimization, requiring scanning to the end of " +"the string and then backtracking to find a match for the rest of the RE. " +"Use :func:`re.search` instead." +msgstr "" +"添加 ``.*`` 会使这个优化失效,需要扫描到字符串的末尾,然后回溯以找到正则的其余部分的匹配。 使用 :func:`re.search` 代替。" + +#: ../../howto/regex.rst:1306 +msgid "Greedy versus Non-Greedy" +msgstr "贪婪与非贪婪" + +#: ../../howto/regex.rst:1308 +msgid "" +"When repeating a regular expression, as in ``a*``, the resulting action is " +"to consume as much of the pattern as possible. This fact often bites you " +"when you're trying to match a pair of balanced delimiters, such as the angle" +" brackets surrounding an HTML tag. The naive pattern for matching a single " +"HTML tag doesn't work because of the greedy nature of ``.*``. ::" +msgstr "" +"当重复一个正则表达式时,就像在 ``a*`` 中一样,最终的动作就是消耗尽可能多的模式。 当你尝试匹配一对对称分隔符,例如 HTML " +"标记周围的尖括号时,这个事实经常会让你感到困惑。因为 ``.*`` 的贪婪性质, 用于匹配单个 HTML 标记的简单模式不起作用。 ::" + +#: ../../howto/regex.rst:1322 +msgid "" +"The RE matches the ``'<'`` in ``''``, and the ``.*`` consumes the rest" +" of the string. There's still more left in the RE, though, and the ``>`` " +"can't match at the end of the string, so the regular expression engine has " +"to backtrack character by character until it finds a match for the ``>``. " +"The final match extends from the ``'<'`` in ``''`` to the ``'>'`` in " +"``''``, which isn't what you want." +msgstr "" +"正则匹配 ``'<'`` 中的 ``''`` 和 ``.*`` 消耗字符串的其余部分。 正则中还有更多的剩余东西,并且 ``>`` " +"在字符串的末尾不能匹配,所以正则表达式引擎必须逐个字符地回溯,直到它找到匹配 ``>`` 。最终匹配从 ``''`` 中的 ``'<'`` " +"扩展到 ``''`` 中的 ``'>'`` ,而这并不是你想要的结果。" + +#: ../../howto/regex.rst:1329 +msgid "" +"In this case, the solution is to use the non-greedy qualifiers ``*?``, " +"``+?``, ``??``, or ``{m,n}?``, which match as *little* text as possible. In" +" the above example, the ``'>'`` is tried immediately after the first ``'<'``" +" matches, and when it fails, the engine advances a character at a time, " +"retrying the ``'>'`` at every step. This produces just the right result::" +msgstr "" +"在这种情况下,解决方案是使用非贪婪的限定符 ``*?`` 、 ``+?`` 、 ``??`` 或 ``{m,n}?`` ,匹配为尽可能 *少* 的文字。" +" 在上面的例子中,在第一次 ``'<'`` 匹配后立即尝试 ``'>'`` ,当它失败时,引擎一次前进一个字符,每一步都重试 ``'>'`` 。 " +"这产生了正确的结果::" + +#: ../../howto/regex.rst:1338 +msgid "" +"(Note that parsing HTML or XML with regular expressions is painful. Quick-" +"and-dirty patterns will handle common cases, but HTML and XML have special " +"cases that will break the obvious regular expression; by the time you've " +"written a regular expression that handles all of the possible cases, the " +"patterns will be *very* complicated. Use an HTML or XML parser module for " +"such tasks.)" +msgstr "" +"(请注意,使用正则表达式解析 HTML 或 XML 很痛苦。快而脏的模式将处理常见情况,但 HTML 和 XML " +"有特殊情况会破坏明显的正则表达式;当你编写正则表达式处理所有可能的情况时,模式将非常复杂。使用 HTML 或 XML 解析器模块来执行此类任务。)" + +#: ../../howto/regex.rst:1346 +msgid "Using re.VERBOSE" +msgstr "使用 re.VERBOSE" + +#: ../../howto/regex.rst:1348 +msgid "" +"By now you've probably noticed that regular expressions are a very compact " +"notation, but they're not terribly readable. REs of moderate complexity can" +" become lengthy collections of backslashes, parentheses, and metacharacters," +" making them difficult to read and understand." +msgstr "" +"到目前为止,你可能已经注意到正则表达式是一种非常紧凑的表示法,但它们并不是非常易读。 " +"具有中等复杂度的正则可能会成为反斜杠、括号和元字符的冗长集合,使其难以阅读和理解。" + +#: ../../howto/regex.rst:1353 +msgid "" +"For such REs, specifying the :const:`re.VERBOSE` flag when compiling the " +"regular expression can be helpful, because it allows you to format the " +"regular expression more clearly." +msgstr "对于这样的正则,在编译正则表达式时指定 :const:`re.VERBOSE` 标志可能会有所帮助,因为它允许你更清楚地格式化正则表达式。" + +#: ../../howto/regex.rst:1357 +msgid "" +"The ``re.VERBOSE`` flag has several effects. Whitespace in the regular " +"expression that *isn't* inside a character class is ignored. This means " +"that an expression such as ``dog | cat`` is equivalent to the less readable " +"``dog|cat``, but ``[a b]`` will still match the characters ``'a'``, ``'b'``," +" or a space. In addition, you can also put comments inside a RE; comments " +"extend from a ``#`` character to the next newline. When used with triple-" +"quoted strings, this enables REs to be formatted more neatly::" +msgstr "" +"``re.VERBOSE`` 标志有几种效果。 正则表达式中的 *不是* 在字符类中的空格将被忽略。 这意味着表达式如 ``dog | cat`` " +"等同于不太可读的 ``dog|cat`` ,但 ``[a b]`` 仍将匹配字符 ``'a'`` 、 ``'b'`` 或空格。 " +"此外,你还可以在正则中放置注释;注释从 ``#`` 字符扩展到下一个换行符。 当与三引号字符串一起使用时,这使正则的格式更加整齐::" + +#: ../../howto/regex.rst:1374 +msgid "This is far more readable than::" +msgstr "这更具有可读性::" + +#: ../../howto/regex.rst:1380 +msgid "Feedback" +msgstr "反馈" + +#: ../../howto/regex.rst:1382 +msgid "" +"Regular expressions are a complicated topic. Did this document help you " +"understand them? Were there parts that were unclear, or Problems you " +"encountered that weren't covered here? If so, please send suggestions for " +"improvements to the author." +msgstr "" +"正则表达式是一个复杂的主题。 这份文档是否有助于你理解它们? 是否存在不清楚的部分,或者你遇到的问题未在此处涉及? 如果是,请向作者发送改进建议。" + +#: ../../howto/regex.rst:1387 +msgid "" +"The most complete book on regular expressions is almost certainly Jeffrey " +"Friedl's Mastering Regular Expressions, published by O'Reilly. " +"Unfortunately, it exclusively concentrates on Perl and Java's flavours of " +"regular expressions, and doesn't contain any Python material at all, so it " +"won't be useful as a reference for programming in Python. (The first " +"edition covered Python's now-removed :mod:`!regex` module, which won't help " +"you much.) Consider checking it out from your library." +msgstr "" +"关于正则表达式的最完整的书几乎肯定是由 O'Reilly 出版的 Jeffrey Friedl 的 Mastering Regular " +"Expressions 。 不幸的是,它专注于 Perl 和 Java 的正则表达式,并且根本不包含任何 Python 材料,因此它不能用作 " +"Python 编程的参考。 (第一版涵盖了 Python 现在删除的 :mod:`!regex` 模块,这对你没有多大帮助。)考虑从你的图书馆中查找它。" diff --git a/howto/sockets.po b/howto/sockets.po new file mode 100644 index 000000000..fbe8de201 --- /dev/null +++ b/howto/sockets.po @@ -0,0 +1,589 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) 2001-2022, Python Software Foundation +# This file is distributed under the same license as the Python package. +# FIRST AUTHOR , YEAR. +# +# Translators: +# Fei Yin , 2018 +# df2dc1c92e792f7ae8417c51df43db8f_594d92a <0f49be28017426edb1db1a2ab6e67088_717605>, 2018 +# ww song , 2018 +# kily zhou , 2019 +# Alpha Du , 2019 +# Freesand Leo , 2020 +# +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: Python 3.9\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2022-11-04 14:34+0000\n" +"PO-Revision-Date: 2017-02-16 17:46+0000\n" +"Last-Translator: Freesand Leo , 2020\n" +"Language-Team: Chinese (China) (https://www.transifex.com/python-doc/teams/5390/zh_CN/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: zh_CN\n" +"Plural-Forms: nplurals=1; plural=0;\n" + +#: ../../howto/sockets.rst:5 +msgid "Socket Programming HOWTO" +msgstr "套接字编程指南" + +#: ../../howto/sockets.rst:0 +msgid "Author" +msgstr "作者" + +#: ../../howto/sockets.rst:7 +msgid "Gordon McMillan" +msgstr "Gordon McMillan" + +#: ../../howto/sockets.rstNone +msgid "Abstract" +msgstr "摘要" + +#: ../../howto/sockets.rst:12 +msgid "" +"Sockets are used nearly everywhere, but are one of the most severely " +"misunderstood technologies around. This is a 10,000 foot overview of " +"sockets. It's not really a tutorial - you'll still have work to do in " +"getting things operational. It doesn't cover the fine points (and there are " +"a lot of them), but I hope it will give you enough background to begin using" +" them decently." +msgstr "" +"套接字几乎无处不在,但是它却是被误解最严重的技术之一。这是一篇简单的套接字概述。并不是一篇真正的教程 —— " +"你需要做更多的事情才能让它工作起来。其中也并没有涵盖细节(细节会有很多),但是我希望它能提供足够的背景知识,让你像模像样的开始使用套接字" + +#: ../../howto/sockets.rst:20 +msgid "Sockets" +msgstr "套接字" + +#: ../../howto/sockets.rst:22 +msgid "" +"I'm only going to talk about INET (i.e. IPv4) sockets, but they account for " +"at least 99% of the sockets in use. And I'll only talk about STREAM (i.e. " +"TCP) sockets - unless you really know what you're doing (in which case this " +"HOWTO isn't for you!), you'll get better behavior and performance from a " +"STREAM socket than anything else. I will try to clear up the mystery of what" +" a socket is, as well as some hints on how to work with blocking and non-" +"blocking sockets. But I'll start by talking about blocking sockets. You'll " +"need to know how they work before dealing with non-blocking sockets." +msgstr "" +"我将只讨论关于 INET(比如:IPv4 地址族)的套接字,但是它将覆盖几乎 99% 的套接字使用场景。并且我将仅讨论 " +"STREAM(比如:TCP)类型的套接字 - 除非你真的知道你在做什么(那么这篇 HOWTO 可能并不适合你),使用 STREAM " +"类型的套接字将会得到比其它类型更好的表现与性能。我将尝试揭开套接字的神秘面纱,也会讲到一些阻塞与非阻塞套接字的使用。但是我将以阻塞套接字为起点开始讨论。只有你了解它是如何工作的以后才能处理非阻塞套接字。" + +#: ../../howto/sockets.rst:31 +msgid "" +"Part of the trouble with understanding these things is that \"socket\" can " +"mean a number of subtly different things, depending on context. So first, " +"let's make a distinction between a \"client\" socket - an endpoint of a " +"conversation, and a \"server\" socket, which is more like a switchboard " +"operator. The client application (your browser, for example) uses \"client\"" +" sockets exclusively; the web server it's talking to uses both \"server\" " +"sockets and \"client\" sockets." +msgstr "" +"理解这些东西的难点之一在于「套接字」可以表示很多微妙差异的东西,这取决于上下文。所以首先,让我们先分清楚「客户端」套接字和「服务端」套接字之间的不同,客户端套接字表示对话的一端,服务端套接字更像是总机接线员。客户端程序只能(比如:你的浏览器)使用「客户端」套接字;网络服务器则可以使用「服务端」套接字和「客户端」套接字来会话" + +#: ../../howto/sockets.rst:40 +msgid "History" +msgstr "历史" + +#: ../../howto/sockets.rst:42 +msgid "" +"Of the various forms of :abbr:`IPC (Inter Process Communication)`, sockets " +"are by far the most popular. On any given platform, there are likely to be " +"other forms of IPC that are faster, but for cross-platform communication, " +"sockets are about the only game in town." +msgstr "" +"目前为止,在各种形式的 :abbr:`IPC (进程间通信)` 中,套接字是最流行的。在任何指定的平台上,可能会有其它更快的 IPC " +"形式,但是就跨平台通信来说,套接字大概是唯一的玩法" + +#: ../../howto/sockets.rst:47 +msgid "" +"They were invented in Berkeley as part of the BSD flavor of Unix. They " +"spread like wildfire with the Internet. With good reason --- the combination" +" of sockets with INET makes talking to arbitrary machines around the world " +"unbelievably easy (at least compared to other schemes)." +msgstr "" +"套接字做为 BSD Unix 操作系统的一部分在伯克利诞生,像野火一样在因特网传播。有一个很好的原因 —— 套接字与 INET " +"的结合使得与世界各地的任意机器间通信变得令人难以置信的简单(至少对比与其他方案来说)" + +#: ../../howto/sockets.rst:54 +msgid "Creating a Socket" +msgstr "创建套接字" + +#: ../../howto/sockets.rst:56 +msgid "" +"Roughly speaking, when you clicked on the link that brought you to this " +"page, your browser did something like the following::" +msgstr "简略地说,当你点击带你来到这个页面的链接时,你的浏览器就已经做了下面这几件事情::" + +#: ../../howto/sockets.rst:64 +msgid "" +"When the ``connect`` completes, the socket ``s`` can be used to send in a " +"request for the text of the page. The same socket will read the reply, and " +"then be destroyed. That's right, destroyed. Client sockets are normally only" +" used for one exchange (or a small set of sequential exchanges)." +msgstr "" +"当连接完成,套接字可以用来发送请求来接收页面上显示的文字。同样是这个套接字也会用来读取响应,最后再被销毁。是的,被销毁了。客户端套接字通常用来做一次交换(或者说一小组序列的交换)。" + +#: ../../howto/sockets.rst:70 +msgid "" +"What happens in the web server is a bit more complex. First, the web server " +"creates a \"server socket\"::" +msgstr "网络服务器发生了什么这个问题就有点复杂了。首页,服务器创建一个「服务端套接字」::" + +#: ../../howto/sockets.rst:80 +msgid "" +"A couple things to notice: we used ``socket.gethostname()`` so that the " +"socket would be visible to the outside world. If we had used " +"``s.bind(('localhost', 80))`` or ``s.bind(('127.0.0.1', 80))`` we would " +"still have a \"server\" socket, but one that was only visible within the " +"same machine. ``s.bind(('', 80))`` specifies that the socket is reachable " +"by any address the machine happens to have." +msgstr "" +"有几件事需要注意:我们使用了 ``socket.gethostname()``,所以套接字将外网可见。如果我们使用的是 " +"``s.bind(('localhost', 80))`` 或者 ``s.bind(('127.0.0.1', " +"80))``,也会得到一个「服务端」套接字,但是后者只在同一机器上可见。``s.bind(('', " +"80))`` 则指定套接字可以被机器上的任何地址碰巧连接" + +#: ../../howto/sockets.rst:87 +msgid "" +"A second thing to note: low number ports are usually reserved for \"well " +"known\" services (HTTP, SNMP etc). If you're playing around, use a nice high" +" number (4 digits)." +msgstr "" +"第二个需要注点是:低端口号通常被一些「常用的」服务(HTTP, SNMP 等)所保留。如果你想把程序跑起来,最好使用一个高位端口号(通常是4位的数字)。" + +#: ../../howto/sockets.rst:91 +msgid "" +"Finally, the argument to ``listen`` tells the socket library that we want it" +" to queue up as many as 5 connect requests (the normal max) before refusing " +"outside connections. If the rest of the code is written properly, that " +"should be plenty." +msgstr "" +"最后,``listen`` 方法的参数会告诉套接字库,我们希望在队列中累积多达 5 个(通常的最大值)连接请求后再拒绝外部连接。 " +"如果所有其他代码都准确无误,这个队列长度应该是足够的。" + +#: ../../howto/sockets.rst:95 +msgid "" +"Now that we have a \"server\" socket, listening on port 80, we can enter the" +" mainloop of the web server::" +msgstr "现在我们已经有一个「服务端」套接字,监听了 80 端口,我们可以进入网络服务器的主循环了::" + +#: ../../howto/sockets.rst:106 +msgid "" +"There's actually 3 general ways in which this loop could work - dispatching " +"a thread to handle ``clientsocket``, create a new process to handle " +"``clientsocket``, or restructure this app to use non-blocking sockets, and " +"multiplex between our \"server\" socket and any active ``clientsocket``\\ s " +"using ``select``. More about that later. The important thing to understand " +"now is this: this is *all* a \"server\" socket does. It doesn't send any " +"data. It doesn't receive any data. It just produces \"client\" sockets. Each" +" ``clientsocket`` is created in response to some *other* \"client\" socket " +"doing a ``connect()`` to the host and port we're bound to. As soon as we've " +"created that ``clientsocket``, we go back to listening for more connections." +" The two \"clients\" are free to chat it up - they are using some " +"dynamically allocated port which will be recycled when the conversation " +"ends." +msgstr "" +"事际上,通常有 3 种方法可以让这个循环工作起来 - 调度一个线程来处理 ``客户端套接字``,或者把这个应用改成使用非阻塞模式套接字,亦或是使用 " +"``select`` 库来实现「服务端」套接字与任意活动 ``客户端套接字`` 之间的多路复用。稍后会详细介绍。现在最重要的是理解:这就是一个 " +"*服务端* 套接字做的 *所有* 事情。它并没有发送任何数据。也没有接收任何数据。它只创建「客户端」套接字。每个 ``客户端套接字`` " +"都是为了响应某些其它客户端套接字 ``connect()`` 到我们绑定的主机。一旦创建 ``客户端套接字`` " +"完成,就会返回并监听更多的连接请求。现个客户端可以随意通信 - 它们使用了一些动态分配的端口,会话结束时端口才会被回收" + +#: ../../howto/sockets.rst:121 +msgid "IPC" +msgstr "进程间通信" + +#: ../../howto/sockets.rst:123 +msgid "" +"If you need fast IPC between two processes on one machine, you should look " +"into pipes or shared memory. If you do decide to use AF_INET sockets, bind " +"the \"server\" socket to ``'localhost'``. On most platforms, this will take " +"a shortcut around a couple of layers of network code and be quite a bit " +"faster." +msgstr "" +"如果你需要在同一台机器上进行两个进程间的快速 IPC 通信,你应该了解管道或者共享内存。如果你决定使用 AF_INET " +"类型的套接字,绑定「服务端」套接字到 ``'localhost'`` " +"。在大多数平台,这将会使用一个许多网络层间的通用快捷方式(本地回环地址)并且速度会快很多" + +#: ../../howto/sockets.rst:129 +msgid "" +"The :mod:`multiprocessing` integrates cross-platform IPC into a higher-level" +" API." +msgstr ":mod:`multiprocessing` 模块使跨平台 IPC 通信成为一个高层的 API" + +#: ../../howto/sockets.rst:134 +msgid "Using a Socket" +msgstr "使用一个套接字" + +#: ../../howto/sockets.rst:136 +msgid "" +"The first thing to note, is that the web browser's \"client\" socket and the" +" web server's \"client\" socket are identical beasts. That is, this is a " +"\"peer to peer\" conversation. Or to put it another way, *as the designer, " +"you will have to decide what the rules of etiquette are for a conversation*." +" Normally, the ``connect``\\ ing socket starts the conversation, by sending " +"in a request, or perhaps a signon. But that's a design decision - it's not a" +" rule of sockets." +msgstr "" +"首先需要注意,浏览器的「客户端」套接字和网络服务器的「客户端」套接字是极为相似的。即这种会话是「点对点」的。或者也可以说 " +"*你作为设计师需要自行决定会话的规则和礼节* 。通常情况下,``连接`` " +"套接字通过发送一个请求或者信号来开始一次会话。但这属于设计决定,并不是套接字规则。" + +#: ../../howto/sockets.rst:143 +msgid "" +"Now there are two sets of verbs to use for communication. You can use " +"``send`` and ``recv``, or you can transform your client socket into a file-" +"like beast and use ``read`` and ``write``. The latter is the way Java " +"presents its sockets. I'm not going to talk about it here, except to warn " +"you that you need to use ``flush`` on sockets. These are buffered \"files\"," +" and a common mistake is to ``write`` something, and then ``read`` for a " +"reply. Without a ``flush`` in there, you may wait forever for the reply, " +"because the request may still be in your output buffer." +msgstr "" +"现在有两组用于通信的动词。你可以使用 ``send`` 和 ``recv`` ,或者你可以把客户端套接字改成文件类型的形式来使用 ``read`` 和" +" ``write`` 方法。后者是 Java 语言中表示套接字的方法,我将不会在这儿讨论这个,但是要提醒你需要调用套接字的 ``flush`` " +"方法。这些是“缓冲”的文件,一个经常出现的错误是 ``write`` 一些东西,然后就直接开始 ``read`` 一个响应。如果不调用 " +"``flush`` ,你可能会一直等待这个响应,因为请求可能还在你的输出缓冲中。" + +#: ../../howto/sockets.rst:152 +msgid "" +"Now we come to the major stumbling block of sockets - ``send`` and ``recv`` " +"operate on the network buffers. They do not necessarily handle all the bytes" +" you hand them (or expect from them), because their major focus is handling " +"the network buffers. In general, they return when the associated network " +"buffers have been filled (``send``) or emptied (``recv``). They then tell " +"you how many bytes they handled. It is *your* responsibility to call them " +"again until your message has been completely dealt with." +msgstr "" +"现在我来到了套接字的两个主要的绊脚石 - ``send`` 和 ``recv`` " +"操作网络缓冲区。它们并不一定可以处理所有你想要(期望)的字节,因为它们主要关注点是处理网络缓冲。通常,它们在关联的网络缓冲区 ``send`` 或者清空" +" ``recv`` 时返回。然后告诉你处理了多少个字节。*你* 的责任是一直调用它们直到你所有的消息处理完成。" + +#: ../../howto/sockets.rst:160 +msgid "" +"When a ``recv`` returns 0 bytes, it means the other side has closed (or is " +"in the process of closing) the connection. You will not receive any more " +"data on this connection. Ever. You may be able to send data successfully; " +"I'll talk more about this later." +msgstr "" +"当 ``recv`` 方法返回 0 " +"字节时,就表示另一端已经关闭(或者它所在的进程关闭)了连接。你再也不能从这个连接上获取到任何数据了。你可以成功的发送数据;我将在后面讨论这一点。" + +#: ../../howto/sockets.rst:165 +msgid "" +"A protocol like HTTP uses a socket for only one transfer. The client sends a" +" request, then reads a reply. That's it. The socket is discarded. This " +"means that a client can detect the end of the reply by receiving 0 bytes." +msgstr "" +"像 HTTP 这样的协议只使用一个套接字进行一次传输。客户端发送一个请求,然后读取响应。就这么简单。套接字会被销毁。 表示客户端可以通过接收 0 " +"字节序列表示检测到响应的结束。" + +#: ../../howto/sockets.rst:169 +msgid "" +"But if you plan to reuse your socket for further transfers, you need to " +"realize that *there is no* :abbr:`EOT (End of Transfer)` *on a socket.* I " +"repeat: if a socket ``send`` or ``recv`` returns after handling 0 bytes, the" +" connection has been broken. If the connection has *not* been broken, you " +"may wait on a ``recv`` forever, because the socket will *not* tell you that " +"there's nothing more to read (for now). Now if you think about that a bit, " +"you'll come to realize a fundamental truth of sockets: *messages must either" +" be fixed length* (yuck), *or be delimited* (shrug), *or indicate how long " +"they are* (much better), *or end by shutting down the connection*. The " +"choice is entirely yours, (but some ways are righter than others)." +msgstr "" +"但是如果你打算在随后来的传输中复用套接字的话,你需要明白 *套接字里面是不存在 :abbr:`EOT (传输结束)`* 的。重复一下:套接字 " +"``send`` 或者 ``recv`` 完 0 字节后返回,连接会中断。如果连接没有被断开,你可能会永远处于等待 ``recv`` " +"的状态,因为(就目前来说)套接字 *不会* " +"告诉你不用再读取了。现在如果你细心一点,你可能会意识到套接字基本事实:*消息必须要么具有固定长度,要么可以界定,要么指定了长度(比较好的做法),要么以关闭连接为结束*。选择完全由你而定(这比让别人定更合理)。" + +#: ../../howto/sockets.rst:180 +msgid "" +"Assuming you don't want to end the connection, the simplest solution is a " +"fixed length message::" +msgstr "假定你不希望结束连接,那么最简单的解决方案就是使用定长消息::" + +#: ../../howto/sockets.rst:217 +msgid "" +"The sending code here is usable for almost any messaging scheme - in Python " +"you send strings, and you can use ``len()`` to determine its length (even if" +" it has embedded ``\\0`` characters). It's mostly the receiving code that " +"gets more complex. (And in C, it's not much worse, except you can't use " +"``strlen`` if the message has embedded ``\\0``\\ s.)" +msgstr "" +"发送分部代码几乎可用于任何消息传递方案 —— 在 Python 中你发送字符串,可以使用 ``len()`` 方法来确定它的长度(即使它嵌入了 " +"``\\0`` 字符),主要是接收代码变得更复杂。(在 C 语言中,并没有更糟糕,除非消息嵌入了 ``\\0`` 字符而且你又无法使用 " +"``strlen`` )" + +#: ../../howto/sockets.rst:223 +msgid "" +"The easiest enhancement is to make the first character of the message an " +"indicator of message type, and have the type determine the length. Now you " +"have two ``recv``\\ s - the first to get (at least) that first character so " +"you can look up the length, and the second in a loop to get the rest. If you" +" decide to go the delimited route, you'll be receiving in some arbitrary " +"chunk size, (4096 or 8192 is frequently a good match for network buffer " +"sizes), and scanning what you've received for a delimiter." +msgstr "" +"最简单的改进是让消息的第一个字符表示消息类型,由类型决定长度。现在你需要两次 ``recv``\\ - " +"第一次取(至少)第一个字符来知晓长度,第二次在循环中获取剩余所有的消息。如果你决定到分界线,你将收到一些任意大小的块,(4096 或者 8192 " +"通常是比较合适的网络缓冲区大小),扫描你接收到的分界符" + +#: ../../howto/sockets.rst:231 +msgid "" +"One complication to be aware of: if your conversational protocol allows " +"multiple messages to be sent back to back (without some kind of reply), and " +"you pass ``recv`` an arbitrary chunk size, you may end up reading the start " +"of a following message. You'll need to put that aside and hold onto it, " +"until it's needed." +msgstr "" +"一个需要意识到的复杂情况是:如果你的会话协议允许多个消息被发送回来(没有响应),调用 ``recv`` " +"传入任意大小的块,你可能会因为读到后续接收的消息而停止读取。你需要将它放在一边并保存,直到它需要为止。" + +#: ../../howto/sockets.rst:237 +msgid "" +"Prefixing the message with its length (say, as 5 numeric characters) gets " +"more complex, because (believe it or not), you may not get all 5 characters " +"in one ``recv``. In playing around, you'll get away with it; but in high " +"network loads, your code will very quickly break unless you use two ``recv``" +" loops - the first to determine the length, the second to get the data part " +"of the message. Nasty. This is also when you'll discover that ``send`` does " +"not always manage to get rid of everything in one pass. And despite having " +"read this, you will eventually get bit by it!" +msgstr "" +"以其长度(例如,作为5个数字字符)作为消息前缀时会变得更复杂,因为(信不信由你)你可能无法在一个 ``recv`` " +"中获得所有5个字符。在一般使用时,你会侥幸避免该状况;但是在高网络负载中,除非你使用两个 ``recv`` 循环,否则你的代码将很快中断 —— " +"第一个用于确定长度,第二个用于获取消息的数据部分。这很讨厌。当你发现 ``send`` 并不总是设法在支持搞定一切时,你也会有这种感觉。 " +"尽管已经阅读过这篇文章,但最终还是会有所了解!" + +#: ../../howto/sockets.rst:246 +msgid "" +"In the interests of space, building your character, (and preserving my " +"competitive position), these enhancements are left as an exercise for the " +"reader. Lets move on to cleaning up." +msgstr "限于篇幅,建立你的角色,(保持与我的竞争位置),这些改进将留给读者做为练习。现在让我们继续。" + +#: ../../howto/sockets.rst:252 +msgid "Binary Data" +msgstr "二进制数据" + +#: ../../howto/sockets.rst:254 +msgid "" +"It is perfectly possible to send binary data over a socket. The major " +"problem is that not all machines use the same formats for binary data. For " +"example, a Motorola chip will represent a 16 bit integer with the value 1 as" +" the two hex bytes 00 01. Intel and DEC, however, are byte-reversed - that " +"same 1 is 01 00. Socket libraries have calls for converting 16 and 32 bit " +"integers - ``ntohl, htonl, ntohs, htons`` where \"n\" means *network* and " +"\"h\" means *host*, \"s\" means *short* and \"l\" means *long*. Where " +"network order is host order, these do nothing, but where the machine is " +"byte-reversed, these swap the bytes around appropriately." +msgstr "" +"通过套接字传送二进制数据是可行的。主要问题在于并非所有机器都用同样的二进制数据格式。比如 Motorola 芯片用两个十六进制字节 00 01 " +"来表示一个 16 位整数值 1。而 Intel 和 DEC 则会做字节反转 —— 即用 01 00 来表示 1。套接字库要求转换 16 位和 32 " +"位整数 —— ``ntohl, htonl, ntohs, htons`` 其中的「n」表示 *network*,「h」表示 *host*,「s」表示 " +"*short*,「l」表示 *long*。在网络序列就是主机序列时它们什么都不做,但是如果机器是字节反转的则会适当地交换字节序。" + +#: ../../howto/sockets.rst:264 +msgid "" +"In these days of 32 bit machines, the ascii representation of binary data is" +" frequently smaller than the binary representation. That's because a " +"surprising amount of the time, all those longs have the value 0, or maybe 1." +" The string \"0\" would be two bytes, while binary is four. Of course, this " +"doesn't fit well with fixed-length messages. Decisions, decisions." +msgstr "" +"在现今的 32 位机器中,二进制数据的 ascii 表示往往比二进制表示要小。这是因为在非常多的时候所有 long 的值均为 0 或者 1。字符串形式的" +" \"0\" 为两个字节,而二进制形式则为四个。当然这不适用于固定长度的信息。自行决定,请自行决定。" + +#: ../../howto/sockets.rst:272 +msgid "Disconnecting" +msgstr "断开连接" + +#: ../../howto/sockets.rst:274 +msgid "" +"Strictly speaking, you're supposed to use ``shutdown`` on a socket before " +"you ``close`` it. The ``shutdown`` is an advisory to the socket at the " +"other end. Depending on the argument you pass it, it can mean \"I'm not " +"going to send anymore, but I'll still listen\", or \"I'm not listening, good" +" riddance!\". Most socket libraries, however, are so used to programmers " +"neglecting to use this piece of etiquette that normally a ``close`` is the " +"same as ``shutdown(); close()``. So in most situations, an explicit " +"``shutdown`` is not needed." +msgstr "" +"严格地讲,你应该在 ``close`` 它之前将套接字 ``shutdown`` 。 ``shutdown`` " +"是发送给套接字另一端的一种建议。调用时参数不同意义也不一样,它可能意味着「我不会再发送了,但我仍然会监听」,或者「我没有监听了,真棒!」。然而,大多数套接字库或者程序员都习惯了忽略使用这种礼节,因为通常情况下" +" ``close`` 与 ``shutdown(); close()`` 是一样的。所以在大多数情况下,不需要显式的 ``shutdown`` 。" + +#: ../../howto/sockets.rst:282 +msgid "" +"One way to use ``shutdown`` effectively is in an HTTP-like exchange. The " +"client sends a request and then does a ``shutdown(1)``. This tells the " +"server \"This client is done sending, but can still receive.\" The server " +"can detect \"EOF\" by a receive of 0 bytes. It can assume it has the " +"complete request. The server sends a reply. If the ``send`` completes " +"successfully then, indeed, the client was still receiving." +msgstr "" +"高效使用 ``shutdown`` 的一种方法是在类似 HTTP 的交换中。客户端发送请求,然后执行 ``shutdown(1)`` 。 " +"这告诉服务器“此客户端已完成发送,但仍可以接收”。服务器可以通过接收 0 字节来检测 “EOF” 。它可以假设它有完整的请求。服务器发送回复。如果 " +"``send`` 成功完成,那么客户端仍在接收。" + +#: ../../howto/sockets.rst:289 +msgid "" +"Python takes the automatic shutdown a step further, and says that when a " +"socket is garbage collected, it will automatically do a ``close`` if it's " +"needed. But relying on this is a very bad habit. If your socket just " +"disappears without doing a ``close``, the socket at the other end may hang " +"indefinitely, thinking you're just being slow. *Please* ``close`` your " +"sockets when you're done." +msgstr "" +"Python 进一步自动关闭,并说当一个套接字被垃圾收集时,如果需要它会自动执行 ``close`` " +"。但依靠这个机制是一个非常坏的习惯。如果你的套接字在没有 ``close`` " +"的情况下就消失了,那么另一端的套接字可能会无限期地挂起,以为你只是慢了一步。完成后 *请* ``close`` 你的套接字。" + +#: ../../howto/sockets.rst:297 +msgid "When Sockets Die" +msgstr "套接字何时销毁" + +#: ../../howto/sockets.rst:299 +msgid "" +"Probably the worst thing about using blocking sockets is what happens when " +"the other side comes down hard (without doing a ``close``). Your socket is " +"likely to hang. TCP is a reliable protocol, and it will wait a long, long " +"time before giving up on a connection. If you're using threads, the entire " +"thread is essentially dead. There's not much you can do about it. As long as" +" you aren't doing something dumb, like holding a lock while doing a blocking" +" read, the thread isn't really consuming much in the way of resources. Do " +"*not* try to kill the thread - part of the reason that threads are more " +"efficient than processes is that they avoid the overhead associated with the" +" automatic recycling of resources. In other words, if you do manage to kill " +"the thread, your whole process is likely to be screwed up." +msgstr "" +"使用阻塞套接字最糟糕的事情可能就是当另一边下线时(没有 ``close`` )会发生什么。你的套接字可能会挂起。 TCP " +"是一种可靠的协议,它会在放弃连接之前等待很长时间。如果你正在使用线程,那么整个线程基本上已经死了。你无能为力。只要你没有做一些愚蠢的事情,比如在进行阻塞读取时持有一个锁,那么线程并没有真正消耗掉资源。" +" *不要* 尝试杀死线程 —— 线程比进程更有效的部分原因是它们避免了与自动回收资源相关的开销。换句话说,如果你设法杀死线程,你的整个进程很可能被搞坏。" + +#: ../../howto/sockets.rst:313 +msgid "Non-blocking Sockets" +msgstr "非阻塞的套接字" + +#: ../../howto/sockets.rst:315 +msgid "" +"If you've understood the preceding, you already know most of what you need " +"to know about the mechanics of using sockets. You'll still use the same " +"calls, in much the same ways. It's just that, if you do it right, your app " +"will be almost inside-out." +msgstr "" +"如果你已理解上述内容,那么你已经了解了使用套接字的机制所需了解的大部分内容。你仍将以相同的方式使用相同的函数调用。 " +"只是,如果你做得对,你的应用程序几乎是由内到外的。" + +#: ../../howto/sockets.rst:320 +msgid "" +"In Python, you use ``socket.setblocking(False)`` to make it non-blocking. In" +" C, it's more complex, (for one thing, you'll need to choose between the BSD" +" flavor ``O_NONBLOCK`` and the almost indistinguishable POSIX flavor " +"``O_NDELAY``, which is completely different from ``TCP_NODELAY``), but it's " +"the exact same idea. You do this after creating the socket, but before using" +" it. (Actually, if you're nuts, you can switch back and forth.)" +msgstr "" +"在 Python 中是使用 ``socket.setblocking(False)`` 来设置非阻塞。 在 C 中的做法更为复杂(例如,你需要在 BSD" +" 风格的 ``O_NONBLOCK`` 和几乎无区别的 POSIX 风格的 ``O_NDELAY`` 之间作出选择,这与 ``TCP_NODELAY``" +" 完全不一样),但其思路实际上是相同的。 你要在创建套接字之后但在使用它之前执行此操作。 (实际上,如果你是疯子的话也可以反复进行切换。)" + +#: ../../howto/sockets.rst:327 +msgid "" +"The major mechanical difference is that ``send``, ``recv``, ``connect`` and " +"``accept`` can return without having done anything. You have (of course) a " +"number of choices. You can check return code and error codes and generally " +"drive yourself crazy. If you don't believe me, try it sometime. Your app " +"will grow large, buggy and suck CPU. So let's skip the brain-dead solutions " +"and do it right." +msgstr "" +"主要的机制差异是 ``send`` 、 ``recv`` 、 ``connect`` 和 ``accept`` 可以在没有做任何事情的情况下返回。 " +"你(当然)有很多选择。你可以检查返回代码和错误代码,通常会让自己发疯。如果你不相信我,请尝试一下。你的应用程序将变得越来越大、越来越 Bug 、吸干 " +"CPU。因此,让我们跳过脑死亡的解决方案并做正确的事。" + +#: ../../howto/sockets.rst:334 +msgid "Use ``select``." +msgstr "使用 ``select`` 库" + +#: ../../howto/sockets.rst:336 +msgid "" +"In C, coding ``select`` is fairly complex. In Python, it's a piece of cake, " +"but it's close enough to the C version that if you understand ``select`` in " +"Python, you'll have little trouble with it in C::" +msgstr "" +"在 C 中,编码 ``select`` 相当复杂。 在 Python 中,它是很简单,但它与 C 版本足够接近,如果你在 Python 中理解 " +"``select`` ,那么在 C 中你会几乎不会遇到麻烦::" + +#: ../../howto/sockets.rst:347 +msgid "" +"You pass ``select`` three lists: the first contains all sockets that you " +"might want to try reading; the second all the sockets you might want to try " +"writing to, and the last (normally left empty) those that you want to check " +"for errors. You should note that a socket can go into more than one list. " +"The ``select`` call is blocking, but you can give it a timeout. This is " +"generally a sensible thing to do - give it a nice long timeout (say a " +"minute) unless you have good reason to do otherwise." +msgstr "" +"你传递给 ``select`` " +"三个列表:第一个包含你可能想要尝试读取的所有套接字;第二个是你可能想要尝试写入的所有套接字,以及要检查错误的最后一个(通常为空)。你应该注意,套接字可以进入多个列表。" +" ``select`` 调用是阻塞的,但你可以给它一个超时。这通常是一件明智的事情 —— 给它一个很长的超时(比如一分钟),除非你有充分的理由不这样做。" + +#: ../../howto/sockets.rst:355 +msgid "" +"In return, you will get three lists. They contain the sockets that are " +"actually readable, writable and in error. Each of these lists is a subset " +"(possibly empty) of the corresponding list you passed in." +msgstr "作为返回,你将获得三个列表。它们包含实际可读、可写和有错误的套接字。 这些列表中的每一个都是你传入的相应列表的子集(可能为空)。" + +#: ../../howto/sockets.rst:359 +msgid "" +"If a socket is in the output readable list, you can be as-close-to-certain-" +"as-we-ever-get-in-this-business that a ``recv`` on that socket will return " +"*something*. Same idea for the writable list. You'll be able to send " +"*something*. Maybe not all you want to, but *something* is better than " +"nothing. (Actually, any reasonably healthy socket will return as writable -" +" it just means outbound network buffer space is available.)" +msgstr "" +"如果一个套接字在输出可读列表中,那么你可以像我们一样接近这个业务,那个套接字上的 ``recv`` 将返回 *一些内容* " +"。可写列表的也相同,你将能够发送 *一些内容* 。 也许不是你想要的全部,但 *有些东西* 比没有东西更好。 " +"(实际上,任何合理健康的套接字都将以可写方式返回 —— 它只是意味着出站网络缓冲区空间可用。)" + +#: ../../howto/sockets.rst:366 +msgid "" +"If you have a \"server\" socket, put it in the potential_readers list. If it" +" comes out in the readable list, your ``accept`` will (almost certainly) " +"work. If you have created a new socket to ``connect`` to someone else, put " +"it in the potential_writers list. If it shows up in the writable list, you " +"have a decent chance that it has connected." +msgstr "" +"如果你有一个“服务器”套接字,请将其放在 potential_readers 列表中。如果它出现在可读列表中,那么你的 ``accept`` " +"(几乎肯定)会起作用。如果你已经创建了一个新的套接字 ``connect`` 其他人,请将它放在 potential_writers " +"列表中。如果它出现在可写列表中,那么它有可能已连接。" + +#: ../../howto/sockets.rst:372 +msgid "" +"Actually, ``select`` can be handy even with blocking sockets. It's one way " +"of determining whether you will block - the socket returns as readable when " +"there's something in the buffers. However, this still doesn't help with the" +" problem of determining whether the other end is done, or just busy with " +"something else." +msgstr "" +"实际上,即使使用阻塞套接字, ``select`` 也很方便。这是确定是否阻塞的一种方法 —— " +"当缓冲区中存在某些内容时,套接字返回为可读。然而,这仍然无助于确定另一端是否完成或者只是忙于其他事情的问题。" + +#: ../../howto/sockets.rst:377 +msgid "" +"**Portability alert**: On Unix, ``select`` works both with the sockets and " +"files. Don't try this on Windows. On Windows, ``select`` works with sockets " +"only. Also note that in C, many of the more advanced socket options are done" +" differently on Windows. In fact, on Windows I usually use threads (which " +"work very, very well) with my sockets." +msgstr "" +"**可移植性警告** :在 Unix 上, ``select`` 适用于套接字和文件。 不要在 Windows 上尝试。在 Windows 上, " +"``select`` 仅适用于套接字。另请注意,在 C 中,许多更高级的套接字选项在 Windows 上的执行方式不同。事实上,在 Windows " +"上我通常在使用我的套接字使用线程(非常非常好)。" diff --git a/howto/sorting.po b/howto/sorting.po new file mode 100644 index 000000000..a230375e8 --- /dev/null +++ b/howto/sorting.po @@ -0,0 +1,376 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) 2001-2024, Python Software Foundation +# This file is distributed under the same license as the Python package. +# FIRST AUTHOR , YEAR. +# +# Translators: +# Fei Yin , 2018 +# df2dc1c92e792f7ae8417c51df43db8f_594d92a <0f49be28017426edb1db1a2ab6e67088_717605>, 2018 +# Alpha Du , 2019 +# Shengjing Zhu , 2019 +# Freesand Leo , 2022 +# Rafael Fontenelle , 2024 +# +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: Python 3.9\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2024-06-14 15:38+0000\n" +"PO-Revision-Date: 2017-02-16 17:46+0000\n" +"Last-Translator: Rafael Fontenelle , 2024\n" +"Language-Team: Chinese (China) (https://app.transifex.com/python-doc/teams/5390/zh_CN/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: zh_CN\n" +"Plural-Forms: nplurals=1; plural=0;\n" + +#: ../../howto/sorting.rst:4 +msgid "Sorting HOW TO" +msgstr "排序指南" + +#: ../../howto/sorting.rst:0 +msgid "Author" +msgstr "作者" + +#: ../../howto/sorting.rst:6 +msgid "Andrew Dalke and Raymond Hettinger" +msgstr "Andrew Dalke 与 Raymond Hettinger" + +#: ../../howto/sorting.rst:0 +msgid "Release" +msgstr "发布版本" + +#: ../../howto/sorting.rst:7 +msgid "0.1" +msgstr "0.1" + +#: ../../howto/sorting.rst:10 +msgid "" +"Python lists have a built-in :meth:`list.sort` method that modifies the list" +" in-place. There is also a :func:`sorted` built-in function that builds a " +"new sorted list from an iterable." +msgstr "内置列表方法 :meth:`list.sort` 原地修改列表,而内置函数 :func:`sorted` 由可迭代对象新建有序列表。" + +#: ../../howto/sorting.rst:14 +msgid "" +"In this document, we explore the various techniques for sorting data using " +"Python." +msgstr "在本文档中,我们将探索使用 Python 对数据进行排序的各种技术。" + +#: ../../howto/sorting.rst:18 +msgid "Sorting Basics" +msgstr "排序的基础知识" + +#: ../../howto/sorting.rst:20 +msgid "" +"A simple ascending sort is very easy: just call the :func:`sorted` function." +" It returns a new sorted list::" +msgstr "简单的升序排序非常简单:只需调用 :func:`sorted` 函数即可。它会返回一个新的已排序列表。" + +#: ../../howto/sorting.rst:26 +msgid "" +"You can also use the :meth:`list.sort` method. It modifies the list in-place" +" (and returns ``None`` to avoid confusion). Usually it's less convenient " +"than :func:`sorted` - but if you don't need the original list, it's slightly" +" more efficient." +msgstr "" +"亦可用 :meth:`list.sort` 方法。它原地修改原列表(并返回 ``None`` 以避免混淆)。往往不如 :func:`sorted` " +"方便——但若不需原列表,用它会略高效些。" + +#: ../../howto/sorting.rst:36 +msgid "" +"Another difference is that the :meth:`list.sort` method is only defined for " +"lists. In contrast, the :func:`sorted` function accepts any iterable." +msgstr "另一个区别是 :meth:`list.sort` 方法只为列表定义,而 :func:`sorted` 函数接受任何可迭代对象。" + +#: ../../howto/sorting.rst:43 +msgid "Key Functions" +msgstr "键函数" + +#: ../../howto/sorting.rst:45 +msgid "" +"Both :meth:`list.sort` and :func:`sorted` have a *key* parameter to specify " +"a function (or other callable) to be called on each list element prior to " +"making comparisons." +msgstr "" +":meth:`list.sort` 和 :func:`sorted` 皆有 *key* " +"形参用以指定在比较前要对每个列表元素调用的函数(或其它可调用对象)。" + +#: ../../howto/sorting.rst:49 +msgid "For example, here's a case-insensitive string comparison:" +msgstr "例如,这是个不区分大小写的字符串比较:" + +#: ../../howto/sorting.rst:54 +msgid "" +"The value of the *key* parameter should be a function (or other callable) " +"that takes a single argument and returns a key to use for sorting purposes. " +"This technique is fast because the key function is called exactly once for " +"each input record." +msgstr "*key* 形参的值需为一元函数(或其它可调用对象),其返回值用于排序。这很快,因为键函数只需在输入的每个记录上调用恰好一次。" + +#: ../../howto/sorting.rst:59 +msgid "" +"A common pattern is to sort complex objects using some of the object's " +"indices as keys. For example:" +msgstr "常见的模式是用对象的某一些索引作为键对复杂对象排序。例如:" + +#: ../../howto/sorting.rst:70 +msgid "" +"The same technique works for objects with named attributes. For example:" +msgstr "同样的方法对于有具名属性的对象也适用。例如:" + +#: ../../howto/sorting.rst:89 +msgid "Operator Module Functions" +msgstr "Operator 模块函数" + +#: ../../howto/sorting.rst:91 +msgid "" +"The key-function patterns shown above are very common, so Python provides " +"convenience functions to make accessor functions easier and faster. The " +":mod:`operator` module has :func:`~operator.itemgetter`, " +":func:`~operator.attrgetter`, and a :func:`~operator.methodcaller` function." +msgstr "" +"上面显示的键函数模式非常常见,因此 Python 提供了便利功能,使访问器功能更容易,更快捷。 :mod:`operator` 模块有 " +":func:`~operator.itemgetter` 、 :func:`~operator.attrgetter` 和 " +":func:`~operator.methodcaller` 函数。" + +#: ../../howto/sorting.rst:96 +msgid "Using those functions, the above examples become simpler and faster:" +msgstr "用了那些函数之后,前面的示例变得更简单,运行起来也更快:" + +#: ../../howto/sorting.rst:106 +msgid "" +"The operator module functions allow multiple levels of sorting. For example," +" to sort by *grade* then by *age*:" +msgstr "运算符模块的函数可以用来作多级排序。例如,按 *grade* 排序,然后按 *age* 排序:" + +#: ../../howto/sorting.rst:116 +msgid "Ascending and Descending" +msgstr "升序与降序" + +#: ../../howto/sorting.rst:118 +msgid "" +"Both :meth:`list.sort` and :func:`sorted` accept a *reverse* parameter with " +"a boolean value. This is used to flag descending sorts. For example, to get " +"the student data in reverse *age* order:" +msgstr "" +":meth:`list.sort` 和 :func:`sorted` 接受布尔形参 *reverse* 用于标记降序排序。例如,将学生数据按 *age*" +" 倒序排序:" + +#: ../../howto/sorting.rst:129 +msgid "Sort Stability and Complex Sorts" +msgstr "排序稳定性与复杂排序" + +#: ../../howto/sorting.rst:131 +msgid "" +"Sorts are guaranteed to be `stable " +"`_\\. That means " +"that when multiple records have the same key, their original order is " +"preserved." +msgstr "" +"排序保证 `稳定 " +"`_:等键记录保持原始顺序。" + +#: ../../howto/sorting.rst:139 +msgid "" +"Notice how the two records for *blue* retain their original order so that " +"``('blue', 1)`` is guaranteed to precede ``('blue', 2)``." +msgstr "注意 *blue* 的两个记录是如何保序的:``('blue', 1)`` 保证先于 ``('blue', 2)``。" + +#: ../../howto/sorting.rst:142 +msgid "" +"This wonderful property lets you build complex sorts in a series of sorting " +"steps. For example, to sort the student data by descending *grade* and then " +"ascending *age*, do the *age* sort first and then sort again using *grade*:" +msgstr "" +"这个了不起的特性使得借助一系列排序步骤构建出复杂排序成为可能。例如,要按 *grade* 降序后 *age* 升序排序学生数据,只需先用 *age* " +"排序再用 *grade* 排序即可:" + +#: ../../howto/sorting.rst:150 +msgid "" +"This can be abstracted out into a wrapper function that can take a list and " +"tuples of field and order to sort them on multiple passes." +msgstr "可抽象为包装函数,依据接收的一些字段序的元组对接收的列表做多趟排序。" + +#: ../../howto/sorting.rst:161 +msgid "" +"The `Timsort `_ algorithm used in " +"Python does multiple sorts efficiently because it can take advantage of any " +"ordering already present in a dataset." +msgstr "" +"Python 中曾用的 `Timsort `_ " +"算法借助数据集中任何已有的有序性来高效进行多种排序。" + +#: ../../howto/sorting.rst:166 +msgid "The Old Way Using Decorate-Sort-Undecorate" +msgstr "使用装饰-排序-去装饰的旧方法" + +#: ../../howto/sorting.rst:168 +msgid "This idiom is called Decorate-Sort-Undecorate after its three steps:" +msgstr "装饰-排序-去装饰 (Decorate-Sort-Undecorate) 得名于它的三个步骤:" + +#: ../../howto/sorting.rst:170 +msgid "" +"First, the initial list is decorated with new values that control the sort " +"order." +msgstr "首先,用控制排序顺序的新值装饰初始列表。" + +#: ../../howto/sorting.rst:172 +msgid "Second, the decorated list is sorted." +msgstr "其次,排序装饰后的列表。" + +#: ../../howto/sorting.rst:174 +msgid "" +"Finally, the decorations are removed, creating a list that contains only the" +" initial values in the new order." +msgstr "最后,去除装饰即得按新顺序排列的初始值的列表。" + +#: ../../howto/sorting.rst:177 +msgid "" +"For example, to sort the student data by *grade* using the DSU approach:" +msgstr "例如,用 DSU 方法按 *grade* 排序学生数据:" + +#: ../../howto/sorting.rst:184 +msgid "" +"This idiom works because tuples are compared lexicographically; the first " +"items are compared; if they are the same then the second items are compared," +" and so on." +msgstr "这方法语有效是因为元组按字典顺序进行比较,先比较第一项;如果它们相同则比较第二个项目,依此类推。" + +#: ../../howto/sorting.rst:188 +msgid "" +"It is not strictly necessary in all cases to include the index *i* in the " +"decorated list, but including it gives two benefits:" +msgstr "不一定在所有情况下都要在装饰列表中包含索引 *i* ,但包含它有两个好处:" + +#: ../../howto/sorting.rst:191 +msgid "" +"The sort is stable -- if two items have the same key, their order will be " +"preserved in the sorted list." +msgstr "排序是稳定的——如果两个项具有相同的键,它们的顺序将保留在排序列表中。" + +#: ../../howto/sorting.rst:194 +msgid "" +"The original items do not have to be comparable because the ordering of the " +"decorated tuples will be determined by at most the first two items. So for " +"example the original list could contain complex numbers which cannot be " +"sorted directly." +msgstr "原始项目不必具有可比性,因为装饰元组的排序最多由前两项决定。 因此,例如原始列表可能包含无法直接排序的复数。" + +#: ../../howto/sorting.rst:199 +msgid "" +"Another name for this idiom is `Schwartzian transform " +"`_\\, after Randal L. " +"Schwartz, who popularized it among Perl programmers." +msgstr "" +"这个方法的另一个名字是 Randal L. Schwartz 在 Perl 程序员中推广的 `Schwartzian transform " +"`_\\ 。" + +#: ../../howto/sorting.rst:203 +msgid "" +"Now that Python sorting provides key-functions, this technique is not often " +"needed." +msgstr "既然 Python 排序提供了键函数,那么通常不需要这种技术。" + +#: ../../howto/sorting.rst:207 +msgid "The Old Way Using the *cmp* Parameter" +msgstr "使用 *cmp* 参数的旧方法" + +#: ../../howto/sorting.rst:209 +msgid "" +"Many constructs given in this HOWTO assume Python 2.4 or later. Before that," +" there was no :func:`sorted` builtin and :meth:`list.sort` took no keyword " +"arguments. Instead, all of the Py2.x versions supported a *cmp* parameter to" +" handle user specified comparison functions." +msgstr "" +"本 HOWTO 中给出的许多结构都假定为 Python 2.4 或更高版本。在此之前,没有内置 :func:`sorted` , " +":meth:`list.sort` 也没有关键字参数。相反,所有 Py2.x 版本都支持 *cmp* 参数来处理用户指定的比较函数。" + +#: ../../howto/sorting.rst:214 +msgid "" +"In Py3.0, the *cmp* parameter was removed entirely (as part of a larger " +"effort to simplify and unify the language, eliminating the conflict between " +"rich comparisons and the :meth:`__cmp__` magic method)." +msgstr "" +"在 Py3.0 中, *cmp* 参数被完全删除(作为简化和统一语言努力的一部分,消除了丰富的比较与 :meth:`__cmp__` " +"魔术方法之间的冲突)。" + +#: ../../howto/sorting.rst:218 +msgid "" +"In Py2.x, sort allowed an optional function which can be called for doing " +"the comparisons. That function should take two arguments to be compared and " +"then return a negative value for less-than, return zero if they are equal, " +"or return a positive value for greater-than. For example, we can do:" +msgstr "" +"在 Py2.x 中, sort " +"允许一个可选函数,可以调用它来进行比较。该函数应该采用两个参数进行比较,然后返回负值为小于,如果它们相等则返回零,或者返回大于大于的正值。例如,我们可以这样做:" + +#: ../../howto/sorting.rst:228 +msgid "Or you can reverse the order of comparison with:" +msgstr "或者你可反转比较的顺序:" + +#: ../../howto/sorting.rst:235 +msgid "" +"When porting code from Python 2.x to 3.x, the situation can arise when you " +"have the user supplying a comparison function and you need to convert that " +"to a key function. The following wrapper makes that easy to do::" +msgstr "" +"将代码从 Python 2.x 移植到 3.x 时,如果用户提供比较功能并且需要将其转换为键函数,则会出现这种情况。 以下包装器使这很容易:" + +#: ../../howto/sorting.rst:258 +msgid "To convert to a key function, just wrap the old comparison function:" +msgstr "要转换为键函数,只需包装旧的比较函数:" + +#: ../../howto/sorting.rst:269 +msgid "" +"In Python 3.2, the :func:`functools.cmp_to_key` function was added to the " +":mod:`functools` module in the standard library." +msgstr "" +"在 Python 3.2 中, :func:`functools.cmp_to_key` 函数被添加到标准库中的 :mod:`functools` " +"模块中。" + +#: ../../howto/sorting.rst:273 +msgid "Odd and Ends" +msgstr "其它" + +#: ../../howto/sorting.rst:275 +msgid "" +"For locale aware sorting, use :func:`locale.strxfrm` for a key function or " +":func:`locale.strcoll` for a comparison function." +msgstr "" +"对于区域相关的排序,请使用 :func:`locale.strxfrm` 作为键函数,或者 :func:`locale.strcoll` 作为比较函数。" + +#: ../../howto/sorting.rst:278 +msgid "" +"The *reverse* parameter still maintains sort stability (so that records with" +" equal keys retain the original order). Interestingly, that effect can be " +"simulated without the parameter by using the builtin :func:`reversed` " +"function twice:" +msgstr "" +"*reverse* 参数仍然保持排序稳定性(因此具有相等键的记录保留原始顺序)。 有趣的是,通过使用内置的 :func:`reversed` " +"函数两次,可以在没有参数的情况下模拟该效果:" + +#: ../../howto/sorting.rst:290 +msgid "" +"The sort routines use ``<`` when making comparisons between two objects. So," +" it is easy to add a standard sort order to a class by defining an " +":meth:`__lt__` method::" +msgstr "" + +#: ../../howto/sorting.rst:298 +msgid "" +"However, note that ``<`` can fall back to using :meth:`__gt__` if " +":meth:`__lt__` is not implemented (see :func:`object.__lt__`)." +msgstr "" +"然而,请注意,如果 :meth:`__gt__` 没有实现,``<`` 可以退回到使用 :meth:`__lt__` (见 " +":func:`object.__lt__` )。" + +#: ../../howto/sorting.rst:301 +msgid "" +"Key functions need not depend directly on the objects being sorted. A key " +"function can also access external resources. For instance, if the student " +"grades are stored in a dictionary, they can be used to sort a separate list " +"of student names:" +msgstr "键函数不需要直接依赖于被排序的对象。键函数还可以访问外部资源。例如,如果学生成绩存储在字典中,则可以使用它们对单独的学生姓名列表进行排序:" diff --git a/howto/unicode.po b/howto/unicode.po new file mode 100644 index 000000000..c95317140 --- /dev/null +++ b/howto/unicode.po @@ -0,0 +1,1062 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) 2001-2022, Python Software Foundation +# This file is distributed under the same license as the Python package. +# FIRST AUTHOR , YEAR. +# +# Translators: +# Fei Yin , 2018 +# Konge , 2018 +# allenjuly7 , 2019 +# Siyuan Xu, 2019 +# ppcfish , 2019 +# Dai Xu , 2021 +# meowmeowcat , 2021 +# Freesand Leo , 2021 +# +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: Python 3.9\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2022-11-04 14:34+0000\n" +"PO-Revision-Date: 2017-02-16 17:46+0000\n" +"Last-Translator: Freesand Leo , 2021\n" +"Language-Team: Chinese (China) (https://www.transifex.com/python-doc/teams/5390/zh_CN/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: zh_CN\n" +"Plural-Forms: nplurals=1; plural=0;\n" + +#: ../../howto/unicode.rst:5 +msgid "Unicode HOWTO" +msgstr "Unicode 指南" + +#: ../../howto/unicode.rst:0 +msgid "Release" +msgstr "发布版本" + +#: ../../howto/unicode.rst:7 +msgid "1.12" +msgstr "1.12" + +#: ../../howto/unicode.rst:9 +msgid "" +"This HOWTO discusses Python's support for the Unicode specification for " +"representing textual data, and explains various problems that people " +"commonly encounter when trying to work with Unicode." +msgstr "本文介绍了 Python 对表示文本数据的 Unicode 规范的支持,并对各种 Unicode 常见使用问题做了解释。" + +#: ../../howto/unicode.rst:15 +msgid "Introduction to Unicode" +msgstr "Unicode 概述" + +#: ../../howto/unicode.rst:18 +msgid "Definitions" +msgstr "定义" + +#: ../../howto/unicode.rst:20 +msgid "" +"Today's programs need to be able to handle a wide variety of characters. " +"Applications are often internationalized to display messages and output in a" +" variety of user-selectable languages; the same program might need to output" +" an error message in English, French, Japanese, Hebrew, or Russian. Web " +"content can be written in any of these languages and can also include a " +"variety of emoji symbols. Python's string type uses the Unicode Standard for" +" representing characters, which lets Python programs work with all these " +"different possible characters." +msgstr "" +"如今的程序需要能够处理各种各样的字符。应用程序通常做了国际化处理,用户可以选择不同的语言显示信息和输出数据。同一个程序可能需要以英语、法语、日语、希伯来语或俄语输出错误信息。网页内容可能由这些语言书写,并且可能包含不同的表情符号。Python" +" 的字符串类型采用 Unicode 标准来表示字符,使得 Python 程序能够正常处理所有这些不同的字符。" + +#: ../../howto/unicode.rst:30 +msgid "" +"Unicode (https://www.unicode.org/) is a specification that aims to list " +"every character used by human languages and give each character its own " +"unique code. The Unicode specifications are continually revised and updated" +" to add new languages and symbols." +msgstr "" +"Unicode " +"规范(https://www.unicode.org/)旨在罗列人类语言所用到的所有字符,并赋予每个字符唯一的编码。该规范一直在进行修订和更新,不断加入新的语种和符号。" + +#: ../../howto/unicode.rst:35 +msgid "" +"A **character** is the smallest possible component of a text. 'A', 'B', " +"'C', etc., are all different characters. So are 'È' and 'Í'. Characters " +"vary depending on the language or context you're talking about. For " +"example, there's a character for \"Roman Numeral One\", 'Ⅰ', that's separate" +" from the uppercase letter 'I'. They'll usually look the same, but these " +"are two different characters that have different meanings." +msgstr "" +"一个 **字符** 是文本的最小组件。‘A’、‘B’、‘C’ 等都是不同的字符。‘È’ 和 ‘Í’ " +"也一样。字符会随着语言或者上下文的变化而变化。比如,‘Ⅰ’ 是一个表示 “罗马数字 1” 的字符,它与大写字母 ‘I’ " +"不同。他们往往看起来相同,但这是两个有着不同含义的字符。" + +#: ../../howto/unicode.rst:42 +msgid "" +"The Unicode standard describes how characters are represented by **code " +"points**. A code point value is an integer in the range 0 to 0x10FFFF " +"(about 1.1 million values, the `actual number assigned " +"`_ is less than that). In " +"the standard and in this document, a code point is written using the " +"notation ``U+265E`` to mean the character with value ``0x265e`` (9,822 in " +"decimal)." +msgstr "" +"Unicode 标准描述了字符是如何用 **码位(code point)** 表示的。码位的取值范围是 0 到 0x10FFFF 的整数(大约 110 " +"万个值,`实际分配的数字 `_ 没有那么多)。在 " +"Unicode 标准和本文中,码位采用 ``U+265E`` 的形式,表示值为 ``0x265e`` 的字符(十进制为 9822)。" + +#: ../../howto/unicode.rst:50 +msgid "" +"The Unicode standard contains a lot of tables listing characters and their " +"corresponding code points:" +msgstr "Unicode 标准中包含了许多表格,列出了很多字符及其对应的码位。" + +#: ../../howto/unicode.rst:71 +msgid "" +"Strictly, these definitions imply that it's meaningless to say 'this is " +"character ``U+265E``'. ``U+265E`` is a code point, which represents some " +"particular character; in this case, it represents the character 'BLACK CHESS" +" KNIGHT', '♞'. In informal contexts, this distinction between code points " +"and characters will sometimes be forgotten." +msgstr "" +"严格地说,上述定义暗示了以下说法是没有意义的:“这是字符 ``U+265E``”。``U+265E`` " +"只是一个码位,代表某个特定的字符;这里它代表了字符 “国际象棋黑骑士” '♞'。在非正式的上下文中,有时会忽略码位和字符的区别。" + +#: ../../howto/unicode.rst:78 +msgid "" +"A character is represented on a screen or on paper by a set of graphical " +"elements that's called a **glyph**. The glyph for an uppercase A, for " +"example, is two diagonal strokes and a horizontal stroke, though the exact " +"details will depend on the font being used. Most Python code doesn't need " +"to worry about glyphs; figuring out the correct glyph to display is " +"generally the job of a GUI toolkit or a terminal's font renderer." +msgstr "" +"一个字符在屏幕或纸上被表示为一组图形元素,被称为 **字形(glyph)** 。比如,大写字母 A " +"的字形,是两笔斜线和一笔横线,而具体的细节取决于所使用的字体。大部分 Python 代码不必担心字形,找到正确的显示字形通常是交给 GUI " +"工具包或终端的字体渲染程序来完成。" + +#: ../../howto/unicode.rst:87 +msgid "Encodings" +msgstr "编码" + +#: ../../howto/unicode.rst:89 +msgid "" +"To summarize the previous section: a Unicode string is a sequence of code " +"points, which are numbers from 0 through ``0x10FFFF`` (1,114,111 decimal). " +"This sequence of code points needs to be represented in memory as a set of " +"**code units**, and **code units** are then mapped to 8-bit bytes. The " +"rules for translating a Unicode string into a sequence of bytes are called a" +" **character encoding**, or just an **encoding**." +msgstr "" +"上一段可以归结为:一个 Unicode 字符串是一系列码位(从 0 到 ``0x10FFFF`` 或者说十进制的 1,114,111 " +"的数字)组成的序列。这一序列在内存中需被表示为一组 **码元(code unit)** , **码元** 会映射成包含八个二进制位的字节。将 " +"Unicode 字符串翻译成字节序列的规则称为 **字符编码** ,或者 **编码** 。" + +#: ../../howto/unicode.rst:97 +msgid "" +"The first encoding you might think of is using 32-bit integers as the code " +"unit, and then using the CPU's representation of 32-bit integers. In this " +"representation, the string \"Python\" might look like this:" +msgstr "" +"大家首先会想到的编码可能是用 32 位的整数作为代码位,然后采用 CPU 对 32 位整数的表示法。字符串 “Python” " +"用这种表示法可能会如下所示:" + +#: ../../howto/unicode.rst:107 +msgid "" +"This representation is straightforward but using it presents a number of " +"problems." +msgstr "这种表示法非常直白,但也存在 一些问题。" + +#: ../../howto/unicode.rst:110 +msgid "It's not portable; different processors order the bytes differently." +msgstr "不具可移植性;不同的处理器的字节序不同。" + +#: ../../howto/unicode.rst:112 +msgid "" +"It's very wasteful of space. In most texts, the majority of the code points" +" are less than 127, or less than 255, so a lot of space is occupied by " +"``0x00`` bytes. The above string takes 24 bytes compared to the 6 bytes " +"needed for an ASCII representation. Increased RAM usage doesn't matter too " +"much (desktop computers have gigabytes of RAM, and strings aren't usually " +"that large), but expanding our usage of disk and network bandwidth by a " +"factor of 4 is intolerable." +msgstr "" +"非常浪费空间。 在大多数文本中,大部分码位都小于 127 或 255,因此字节 ``0x00`` 占用了大量空间。相较于 ASCII 表示法所需的 6 " +"个字节,以上字符串需要占用 24 个字节。RAM 用量的增加没那么要紧(台式计算机有成 GB 的 " +"RAM,而字符串通常不会有那么大),但要把磁盘和网络带宽的用量增加 4 倍是无法忍受的。" + +#: ../../howto/unicode.rst:120 +msgid "" +"It's not compatible with existing C functions such as ``strlen()``, so a new" +" family of wide string functions would need to be used." +msgstr "与现有的 C 函数(如 ``strlen()`` )不兼容,因此需要采用一套新的宽字符串函数。 " + +#: ../../howto/unicode.rst:123 +msgid "" +"Therefore this encoding isn't used very much, and people instead choose " +"other encodings that are more efficient and convenient, such as UTF-8." +msgstr "因此这种编码用得不多,人们转而选择其他更高效、更方便的编码,比如 UTF-8。 " + +#: ../../howto/unicode.rst:126 +msgid "" +"UTF-8 is one of the most commonly used encodings, and Python often defaults " +"to using it. UTF stands for \"Unicode Transformation Format\", and the '8' " +"means that 8-bit values are used in the encoding. (There are also UTF-16 " +"and UTF-32 encodings, but they are less frequently used than UTF-8.) UTF-8 " +"uses the following rules:" +msgstr "" +"UTF-8 是最常用的编码之一,Python 往往默认会采用它。UTF 代表“Unicode Transformation Format”,'8' " +"表示编码采用 8 位数。(UTF-16 和 UTF-32 编码也是存在的,但其使用频率不如 UTF-8。)UTF-8 的规则如下: " + +#: ../../howto/unicode.rst:132 +msgid "" +"If the code point is < 128, it's represented by the corresponding byte " +"value." +msgstr "如果码位 < 128,则直接用对应的字节值表示。" + +#: ../../howto/unicode.rst:133 +msgid "" +"If the code point is >= 128, it's turned into a sequence of two, three, or " +"four bytes, where each byte of the sequence is between 128 and 255." +msgstr "如果码位 >= 128,则转换为 2、3、4 个字节的序列,每个字节值都位于 128 和 255 之间。" + +#: ../../howto/unicode.rst:136 +msgid "UTF-8 has several convenient properties:" +msgstr "UTF-8 有几个很方便的特性:" + +#: ../../howto/unicode.rst:138 +msgid "It can handle any Unicode code point." +msgstr "可以处理任何 Unicode 码位。" + +#: ../../howto/unicode.rst:139 +msgid "" +"A Unicode string is turned into a sequence of bytes that contains embedded " +"zero bytes only where they represent the null character (U+0000). This means" +" that UTF-8 strings can be processed by C functions such as ``strcpy()`` and" +" sent through protocols that can't handle zero bytes for anything other than" +" end-of-string markers." +msgstr "" +"Unicode 字符串被转换为一个字节序列,仅在表示空(null )字符(U+0000)时才会包含零值的字节。这意味着 ``strcpy()`` " +"之类的C 函数可以处理 UTF-8 字符串,而且用那些不能处理字符串结束符之外的零值字节的协议也能发送。 " + +#: ../../howto/unicode.rst:144 +msgid "A string of ASCII text is also valid UTF-8 text." +msgstr "ASCII 字符串也是也是也是合法的 UTF-8 文本。" + +#: ../../howto/unicode.rst:145 +msgid "" +"UTF-8 is fairly compact; the majority of commonly used characters can be " +"represented with one or two bytes." +msgstr "UTF-8 相当紧凑;大多数常用字符均可用一两个字节表示。" + +#: ../../howto/unicode.rst:147 +msgid "" +"If bytes are corrupted or lost, it's possible to determine the start of the " +"next UTF-8-encoded code point and resynchronize. It's also unlikely that " +"random 8-bit data will look like valid UTF-8." +msgstr "" +"如果字节数据被损坏或丢失,则可以找出下一个 UTF-8 码点的开始位置并重新开始同步。随机的 8 位数据也不太可能像是有效的 UTF-8 编码。" + +#: ../../howto/unicode.rst:150 +msgid "" +"UTF-8 is a byte oriented encoding. The encoding specifies that each " +"character is represented by a specific sequence of one or more bytes. This " +"avoids the byte-ordering issues that can occur with integer and word " +"oriented encodings, like UTF-16 and UTF-32, where the sequence of bytes " +"varies depending on the hardware on which the string was encoded." +msgstr "" +"UTF-8 是一种面向字节的编码。编码规定了每个字符由一个或多个字节的序列表示。这避免了整数和双字节编码(如 UTF-16 和 " +"UTF-32)可能出现的字节顺序问题,那时的字节序列会因执行编码的硬件而异。" + +#: ../../howto/unicode.rst:158 ../../howto/unicode.rst:514 +#: ../../howto/unicode.rst:735 +msgid "References" +msgstr "引用文献" + +#: ../../howto/unicode.rst:160 +msgid "" +"The `Unicode Consortium site `_ has character " +"charts, a glossary, and PDF versions of the Unicode specification. Be " +"prepared for some difficult reading. `A chronology " +"`_ of the origin and development of " +"Unicode is also available on the site." +msgstr "" +"`Unicode Consortium 站点 `_ 包含 Unicode 规范的字符图表、词汇表和 " +"PDF 版本。请做好准备,有些内容读起来有点难度。该网站上还提供了 Unicode 起源和发展的`年表 " +"`_ 。" + +#: ../../howto/unicode.rst:165 +msgid "" +"On the Computerphile Youtube channel, Tom Scott briefly `discusses the " +"history of Unicode and UTF-8 `_" +" (9 minutes 36 seconds)." +msgstr "" +"在 Computerphile 的 Youtube 频道上,Tom Scott 简要地`讨论了 Unicode 和 UTF-8 " +"`_(9 分 36 秒)的历史。" + +#: ../../howto/unicode.rst:169 +msgid "" +"To help understand the standard, Jukka Korpela has written `an introductory " +"guide `_ to reading the Unicode " +"character tables." +msgstr "" +"为了帮助理解该标准,Jukka Korpela 编写了阅读 Unicode 字符表的`介绍性指南 " +"`_ 。" + +#: ../../howto/unicode.rst:173 +msgid "" +"Another `good introductory article " +"`_ was written by Joel Spolsky. If this " +"introduction didn't make things clear to you, you should try reading this " +"alternate article before continuing." +msgstr "" +"Joel Spolsky 撰写了另一篇不错的介绍性文章 `_ " +"。如果本文没让您弄清楚,那应在继续之前先试着读读这篇文章。" + +#: ../../howto/unicode.rst:178 +msgid "" +"Wikipedia entries are often helpful; see the entries for \"`character " +"encoding `_\" and `UTF-8 " +"`_, for example." +msgstr "" +"Wikipedia 条目通常也有帮助;请参阅“`字符编码 " +"`_”和 `UTF-8 " +"`_ 的条目,例如:" + +#: ../../howto/unicode.rst:184 +msgid "Python's Unicode Support" +msgstr "Python对Unicode的支持" + +#: ../../howto/unicode.rst:186 +msgid "" +"Now that you've learned the rudiments of Unicode, we can look at Python's " +"Unicode features." +msgstr "现在您已经了解了 Unicode 的基础知识,可以看下 Python 的 Unicode 特性。" + +#: ../../howto/unicode.rst:190 +msgid "The String Type" +msgstr "字符串类型" + +#: ../../howto/unicode.rst:192 +msgid "" +"Since Python 3.0, the language's :class:`str` type contains Unicode " +"characters, meaning any string created using ``\"unicode rocks!\"``, " +"``'unicode rocks!'``, or the triple-quoted string syntax is stored as " +"Unicode." +msgstr "" +"从 Python 3.0 开始, :class:`str` 类型包含了 Unicode 字符,这意味着用``\"unicode " +"rocks!\"``、``'unicode rocks!'`` 或三重引号字符串语法创建的任何字符串都会存储为 Unicode。 " + +#: ../../howto/unicode.rst:196 +msgid "" +"The default encoding for Python source code is UTF-8, so you can simply " +"include a Unicode character in a string literal::" +msgstr "Python 源代码的默认编码是 UTF-8,因此可以直接在字符串中包含 Unicode 字符: " + +#: ../../howto/unicode.rst:206 +msgid "" +"Side note: Python 3 also supports using Unicode characters in identifiers::" +msgstr "旁注:Python 3 还支持在标识符中使用 Unicode 字符:" + +#: ../../howto/unicode.rst:212 +msgid "" +"If you can't enter a particular character in your editor or want to keep the" +" source code ASCII-only for some reason, you can also use escape sequences " +"in string literals. (Depending on your system, you may see the actual " +"capital-delta glyph instead of a \\u escape.) ::" +msgstr "" +"如果无法在编辑器中输入某个字符,或出于某种原因想只保留 ASCII 编码的源代码,则还可以在字符串中使用转义序列。(根据系统的不同,可能会看到真的大写 " +"Delta 字体而不是 \\u 转义符。): " + +#: ../../howto/unicode.rst:224 +msgid "" +"In addition, one can create a string using the :func:`~bytes.decode` method " +"of :class:`bytes`. This method takes an *encoding* argument, such as " +"``UTF-8``, and optionally an *errors* argument." +msgstr "" +"此外,可以用 :class:`bytes` 的 :func:`~bytes.decode` 方法创建一个字符串。 该方法可以接受 *encoding* " +"参数,比如可以为 ``UTF-8`` ,以及可选的 *errors* 参数。 " + +#: ../../howto/unicode.rst:228 +msgid "" +"The *errors* argument specifies the response when the input string can't be " +"converted according to the encoding's rules. Legal values for this argument" +" are ``'strict'`` (raise a :exc:`UnicodeDecodeError` exception), " +"``'replace'`` (use ``U+FFFD``, ``REPLACEMENT CHARACTER``), ``'ignore'`` " +"(just leave the character out of the Unicode result), or " +"``'backslashreplace'`` (inserts a ``\\xNN`` escape sequence). The following " +"examples show the differences::" +msgstr "" +"若无法根据编码规则对输入字符串进行编码,*errors* 参数指定了响应策略。 该参数的合法值可以是 ``'strict'`` (触发 " +":exc:`UnicodeDecodeError` 异常)、``'replace'`` (用 ``U+FFFD``、``REPLACEMENT " +"CHARACTER``)、``'ignore'`` (只是将字符从 Unicode 结果中去掉),或 ``'backslashreplace'`` " +"(插入一个 ``\\xNN`` 转义序列)。 以下示例演示了这些不同的参数::" + +#: ../../howto/unicode.rst:248 +msgid "" +"Encodings are specified as strings containing the encoding's name. Python " +"comes with roughly 100 different encodings; see the Python Library Reference" +" at :ref:`standard-encodings` for a list. Some encodings have multiple " +"names; for example, ``'latin-1'``, ``'iso_8859_1'`` and ``'8859``' are all " +"synonyms for the same encoding." +msgstr "" +"编码格式以包含编码格式名称的字符串来指明。 Python 有大约 100 种不同的编码格式;清单详见 Python 库参考文档 " +":ref:`standard-encodings`。 一些编码格式有多个名称,比如 ``'latin-1'``、``'iso_8859_1'`` 和 " +"``'8859`` 都是指同一种编码。" + +#: ../../howto/unicode.rst:254 +msgid "" +"One-character Unicode strings can also be created with the :func:`chr` " +"built-in function, which takes integers and returns a Unicode string of " +"length 1 that contains the corresponding code point. The reverse operation " +"is the built-in :func:`ord` function that takes a one-character Unicode " +"string and returns the code point value::" +msgstr "" +"利用内置函数 :func:`chr` 还可以创建单字符的 Unicode 字符串,该函数可接受整数参数,并返回包含对应码位的长度为 1 的 " +"Unicode 字符串。内置函数 :func:`ord` 是其逆操作,参数为单个字符的 Unicode 字符串,并返回码位值:" + +#: ../../howto/unicode.rst:266 +msgid "Converting to Bytes" +msgstr "转换为字节" + +#: ../../howto/unicode.rst:268 +msgid "" +"The opposite method of :meth:`bytes.decode` is :meth:`str.encode`, which " +"returns a :class:`bytes` representation of the Unicode string, encoded in " +"the requested *encoding*." +msgstr "" +":meth:`bytes.decode` 的逆方法是 :meth:`str.encode` ,它会返回 Unicode 字符串的 " +":class:`bytes` 形式,已按要求的 *encoding* 进行了编码。 " + +#: ../../howto/unicode.rst:272 +msgid "" +"The *errors* parameter is the same as the parameter of the " +":meth:`~bytes.decode` method but supports a few more possible handlers. As " +"well as ``'strict'``, ``'ignore'``, and ``'replace'`` (which in this case " +"inserts a question mark instead of the unencodable character), there is also" +" ``'xmlcharrefreplace'`` (inserts an XML character reference), " +"``backslashreplace`` (inserts a ``\\uNNNN`` escape sequence) and " +"``namereplace`` (inserts a ``\\N{...}`` escape sequence)." +msgstr "" +"参数 *errors* 的意义与 :meth:`~bytes.decode` 方法相同,但支持更多可能的handler。除了 ``'strict'`` " +"、 ``'ignore'`` 和 ``'replace'`` (这时会插入问号替换掉无法编码的字符),还有 " +"``'xmlcharrefreplace'`` (插入一个 XML 字符引用)、 ``backslashreplace`` (插入一个 " +"``\\uNNNN`` 转义序列)和 ``namereplace`` (插入一个 ``\\N{...}`` 转义序列 )。" + +#: ../../howto/unicode.rst:280 +msgid "The following example shows the different results::" +msgstr "以下例子演示了各种不同的结果:" + +#: ../../howto/unicode.rst:301 +msgid "" +"The low-level routines for registering and accessing the available encodings" +" are found in the :mod:`codecs` module. Implementing new encodings also " +"requires understanding the :mod:`codecs` module. However, the encoding and " +"decoding functions returned by this module are usually more low-level than " +"is comfortable, and writing new encodings is a specialized task, so the " +"module won't be covered in this HOWTO." +msgstr "" +"用于注册和访问可用编码格式的底层函数,位于 :mod:`codecs` 模块中。 若要实现新的编码格式,则还需要了解 :mod:`codecs` 模块。" +" 不过该模块返回的编码和解码函数通常更为底层一些,不大好用,编写新的编码格式是一项专业的任务,因此本文不会涉及该模块。 " + +#: ../../howto/unicode.rst:310 +msgid "Unicode Literals in Python Source Code" +msgstr "Python 源代码中的 Unicode 文字" + +#: ../../howto/unicode.rst:312 +msgid "" +"In Python source code, specific Unicode code points can be written using the" +" ``\\u`` escape sequence, which is followed by four hex digits giving the " +"code point. The ``\\U`` escape sequence is similar, but expects eight hex " +"digits, not four::" +msgstr "" +"在 Python 源代码中,可以用 ``\\u`` 转义序列书写特定的 Unicode 码位,该序列后跟 4 个代表码位的十六进制数字。``\\U`` " +"转义序列用法类似,但要用8 个十六进制数字,而不是 4 个:" + +#: ../../howto/unicode.rst:324 +msgid "" +"Using escape sequences for code points greater than 127 is fine in small " +"doses, but becomes an annoyance if you're using many accented characters, as" +" you would in a program with messages in French or some other accent-using " +"language. You can also assemble strings using the :func:`chr` built-in " +"function, but this is even more tedious." +msgstr "" +"对大于 127 " +"的码位使用转义序列,数量不多时没什么问题,但如果要用到很多重音字符,这会变得很烦人,类似于程序中的信息是用法语或其他使用重音的语言写的。也可以用内置函数" +" :func:`chr` 拼装字符串,但会更加乏味。" + +#: ../../howto/unicode.rst:330 +msgid "" +"Ideally, you'd want to be able to write literals in your language's natural " +"encoding. You could then edit Python source code with your favorite editor " +"which would display the accented characters naturally, and have the right " +"characters used at runtime." +msgstr "" +"理想情况下,都希望能用母语的编码书写文本。还能用喜好的编辑器编辑 Python 源代码,编辑器要能自然地显示重音符,并在运行时使用正确的字符。" + +#: ../../howto/unicode.rst:335 +msgid "" +"Python supports writing source code in UTF-8 by default, but you can use " +"almost any encoding if you declare the encoding being used. This is done by" +" including a special comment as either the first or second line of the " +"source file::" +msgstr "" +"默认情况下,Python 支持以 UTF-8 " +"格式编写源代码,但如果声明要用的编码,则几乎可以使用任何编码。只要在源文件的第一行或第二行包含一个特殊注释即可: " + +#: ../../howto/unicode.rst:345 +msgid "" +"The syntax is inspired by Emacs's notation for specifying variables local to" +" a file. Emacs supports many different variables, but Python only supports " +"'coding'. The ``-*-`` symbols indicate to Emacs that the comment is " +"special; they have no significance to Python but are a convention. Python " +"looks for ``coding: name`` or ``coding=name`` in the comment." +msgstr "" +"上述语法的灵感来自于 Emacs 用于指定文件局部变量的符号。Emacs 支持许多不同的变量,但 Python 仅支持“编码”。 ``-*-`` 符号向" +" Emacs 标明该注释是特殊的;这对 Python 没有什么意义,只是一种约定。Python 会在注释中查找 ``coding: name`` 或 " +"``coding=name`` 。 " + +#: ../../howto/unicode.rst:351 +msgid "" +"If you don't include such a comment, the default encoding used will be UTF-8" +" as already mentioned. See also :pep:`263` for more information." +msgstr "如果没有这种注释,则默认编码将会是前面提到的 UTF-8。更多信息请参阅 :pep:`263` 。 " + +#: ../../howto/unicode.rst:356 +msgid "Unicode Properties" +msgstr "Unicode属性" + +#: ../../howto/unicode.rst:358 +msgid "" +"The Unicode specification includes a database of information about code " +"points. For each defined code point, the information includes the " +"character's name, its category, the numeric value if applicable (for " +"characters representing numeric concepts such as the Roman numerals, " +"fractions such as one-third and four-fifths, etc.). There are also display-" +"related properties, such as how to use the code point in bidirectional text." +msgstr "" +"Unicode " +"规范包含了一个码位信息数据库。对于定义的每一个码位,都包含了字符的名称、类别、数值(对于表示数字概念的字符,如罗马数字、分数如三分之一和五分之四等)。还有有关显示的属性,比如如何在双向文本中使用码位。" +" " + +#: ../../howto/unicode.rst:366 +msgid "" +"The following program displays some information about several characters, " +"and prints the numeric value of one particular character::" +msgstr "以下程序显示了几个字符的信息,并打印一个字符的数值:" + +#: ../../howto/unicode.rst:380 +msgid "When run, this prints:" +msgstr "当运行时,这将打印出:" + +#: ../../howto/unicode.rst:391 +msgid "" +"The category codes are abbreviations describing the nature of the character." +" These are grouped into categories such as \"Letter\", \"Number\", " +"\"Punctuation\", or \"Symbol\", which in turn are broken up into " +"subcategories. To take the codes from the above output, ``'Ll'`` means " +"'Letter, lowercase', ``'No'`` means \"Number, other\", ``'Mn'`` is \"Mark, " +"nonspacing\", and ``'So'`` is \"Symbol, other\". See `the General Category " +"Values section of the Unicode Character Database documentation " +"`_ for a list" +" of category codes." +msgstr "" +"类别代码是描述字符性质的一个缩写。分为“字母”、“数字”、“标点符号”或“符号”等类别,而这些类别又分为子类别。就以上输出的代码而言,``'Ll'`` " +"表示“字母,小写”,``'No'`` 表示“数字,其他”,``'Mn'`` 表示“标记,非空白符” , ``'So'`` " +"是“符号,其他”。有关类别代码的清单,请参阅 Unicode 字符库文档 " +"`_ " +"的“通用类别值”部分。" + +#: ../../howto/unicode.rst:402 +msgid "Comparing Strings" +msgstr "字符串比较" + +#: ../../howto/unicode.rst:404 +msgid "" +"Unicode adds some complication to comparing strings, because the same set of" +" characters can be represented by different sequences of code points. For " +"example, a letter like 'ê' can be represented as a single code point U+00EA," +" or as U+0065 U+0302, which is the code point for 'e' followed by a code " +"point for 'COMBINING CIRCUMFLEX ACCENT'. These will produce the same output" +" when printed, but one is a string of length 1 and the other is of length 2." +msgstr "" +"Unicode 让字符串的比较变得复杂了一些,因为同一组字符可能由不同的码位序列组成。例如,像“ê”这样的字母可以表示为单码位 U+00EA,或是 " +"U+0065 U+0302,即“e”的码位后跟“COMBINING CIRCUMFLEX " +"ACCENT”的码位。虽然在打印时会产生同样的输出,但一个是长度为 1 的字符串,另一个是长度为 2 的字符串。" + +#: ../../howto/unicode.rst:412 +msgid "" +"One tool for a case-insensitive comparison is the :meth:`~str.casefold` " +"string method that converts a string to a case-insensitive form following an" +" algorithm described by the Unicode Standard. This algorithm has special " +"handling for characters such as the German letter 'ß' (code point U+00DF), " +"which becomes the pair of lowercase letters 'ss'." +msgstr "" +"一种不区分大小写比较的工具是字符串方法 :meth:`~str.casefold` ,将按照 Unicode " +"标准描述的算法将字符串转换为不区分大小写的形式。该算法对诸如德语字母“ß”(代码点 U+00DF)之类的字符进行了特殊处理,变为一对小写字母“ss”。" + +#: ../../howto/unicode.rst:425 +msgid "" +"A second tool is the :mod:`unicodedata` module's " +":func:`~unicodedata.normalize` function that converts strings to one of " +"several normal forms, where letters followed by a combining character are " +"replaced with single characters. :func:`normalize` can be used to perform " +"string comparisons that won't falsely report inequality if two strings use " +"combining characters differently:" +msgstr "" +"第二个工具是 :mod:`unicodedata` 模块的 :func:`~unicodedata.normalize` " +"函数,将字符串转换为几种规范化形式之一,其中后跟组合字符的字母将被替换为单个字符。 :func:`normalize` " +"可用于执行字符串比较,即便两个字符串采用不同的字符组合,也不会错误地报告两者不相等:" + +#: ../../howto/unicode.rst:448 +msgid "When run, this outputs:" +msgstr "当运行时,这将输出:" + +#: ../../howto/unicode.rst:457 +msgid "" +"The first argument to the :func:`~unicodedata.normalize` function is a " +"string giving the desired normalization form, which can be one of 'NFC', " +"'NFKC', 'NFD', and 'NFKD'." +msgstr "" +":func:`~unicodedata.normalize` " +"函数的第一个参数是个字符串,给出所需的规范化形式,可以是“NFC”、“NFKC”、“NFD”和“NFKD”之一。" + +#: ../../howto/unicode.rst:461 +msgid "The Unicode Standard also specifies how to do caseless comparisons::" +msgstr "Unicode 标准还设定了如何进行不区分大小写的比较:" + +#: ../../howto/unicode.rst:477 +msgid "" +"This will print ``True``. (Why is :func:`NFD` invoked twice? Because there" +" are a few characters that make :meth:`casefold` return a non-normalized " +"string, so the result needs to be normalized again. See section 3.13 of the " +"Unicode Standard for a discussion and an example.)" +msgstr "" +"这将打印 ``True`` 。(为什么 :func:`NFD` 会被调用两次?因为有几个字符让 :meth:`casefold` " +"返回非规范化的字符串,所以结果需要再次进行规范化。参见 Unicode 标准的 3.13 节 的一个讨论和示例。) " + +#: ../../howto/unicode.rst:484 +msgid "Unicode Regular Expressions" +msgstr "Unicode 正则表达式" + +#: ../../howto/unicode.rst:486 +msgid "" +"The regular expressions supported by the :mod:`re` module can be provided " +"either as bytes or strings. Some of the special character sequences such as" +" ``\\d`` and ``\\w`` have different meanings depending on whether the " +"pattern is supplied as bytes or a string. For example, ``\\d`` will match " +"the characters ``[0-9]`` in bytes but in strings will match any character " +"that's in the ``'Nd'`` category." +msgstr "" +":mod:`re` 模块支持的正则表达式可以用字节串或字符串的形式提供。有一些特殊字符序列,比如 ``\\d`` 和 ``\\w`` " +"具有不同的含义,具体取决于匹配模式是以字节串还是字符串形式提供的。例如,``\\d`` 将匹配字节串中的字符 ``[0-9]`` ,但对于字符串将会匹配" +" ``'Nd'`` 类别中的任何字符。 " + +#: ../../howto/unicode.rst:493 +msgid "" +"The string in this example has the number 57 written in both Thai and Arabic" +" numerals::" +msgstr "上述示例中的字符串包含了泰语和阿拉伯数字书写的数字 57:" + +#: ../../howto/unicode.rst:503 +msgid "" +"When executed, ``\\d+`` will match the Thai numerals and print them out. If" +" you supply the :const:`re.ASCII` flag to :func:`~re.compile`, ``\\d+`` will" +" match the substring \"57\" instead." +msgstr "" +"执行时,``\\d+`` 将匹配上泰语数字并打印出来。如果向 :func:`~re.compile` 提供的是 :const:`re.ASCII` " +"标志,``\\d+`` 则会匹配子串 \"57\"。" + +#: ../../howto/unicode.rst:507 +msgid "" +"Similarly, ``\\w`` matches a wide variety of Unicode characters but only " +"``[a-zA-Z0-9_]`` in bytes or if :const:`re.ASCII` is supplied, and ``\\s`` " +"will match either Unicode whitespace characters or ``[ \\t\\n\\r\\f\\v]``." +msgstr "" +"类似地,``\\w`` 将匹配多种 Unicode 字符,但对于字节串则只会匹配 ``[a-zA-Z0-9_]`` ,如果指定 " +":const:`re.ASCII`, ``\\s `` 将匹配 Unicode 空白符或 ``[ \\t\\n\\r\\f\\v]``。" + +#: ../../howto/unicode.rst:518 +msgid "Some good alternative discussions of Python's Unicode support are:" +msgstr "关于 Python 的 Unicode 支持,其他还有一些很好的讨论:" + +#: ../../howto/unicode.rst:520 +msgid "" +"`Processing Text Files in Python 3 `_, " +"by Nick Coghlan." +msgstr "" +"`用 Python 3 处理文本文件 `_ " +",作者 Nick Coghlan。" + +#: ../../howto/unicode.rst:521 +msgid "" +"`Pragmatic Unicode `_, a PyCon " +"2012 presentation by Ned Batchelder." +msgstr "" +"`实用的 Unicode `_,Ned Batchelder " +"在 PyCon 2012 上的演示。" + +#: ../../howto/unicode.rst:523 +msgid "" +"The :class:`str` type is described in the Python library reference at " +":ref:`textseq`." +msgstr ":class:`str` 类型在 Python 库参考文档 :ref:`textseq` 中有介绍。 " + +#: ../../howto/unicode.rst:526 +msgid "The documentation for the :mod:`unicodedata` module." +msgstr ":mod:`unicodedata` 模块的文档" + +#: ../../howto/unicode.rst:528 +msgid "The documentation for the :mod:`codecs` module." +msgstr ":mod:`codecs` 模块的文档" + +#: ../../howto/unicode.rst:530 +msgid "" +"Marc-André Lemburg gave `a presentation titled \"Python and Unicode\" (PDF " +"slides) `_ at " +"EuroPython 2002. The slides are an excellent overview of the design of " +"Python 2's Unicode features (where the Unicode string type is called " +"``unicode`` and literals start with ``u``)." +msgstr "" +"Marc-André Lemburg 在 EuroPython 2002 上做了一个题为“Python 和 Unicode”(PDF " +"幻灯片)`_ " +"的演示文稿。该幻灯片很好地概括了 Python 2 的 Unicode 功能设计(其中 Unicode 字符串类型称为 ``unicode``,文字以 " +"``u`` 开头)。" + +#: ../../howto/unicode.rst:538 +msgid "Reading and Writing Unicode Data" +msgstr "Unicode 数据的读写" + +#: ../../howto/unicode.rst:540 +msgid "" +"Once you've written some code that works with Unicode data, the next problem" +" is input/output. How do you get Unicode strings into your program, and how" +" do you convert Unicode into a form suitable for storage or transmission?" +msgstr "" +"既然处理 Unicode 数据的代码写好了,下一个问题就是输入/输出了。如何将 Unicode 字符串读入程序,如何将 Unicode " +"转换为适于存储或传输的形式呢?" + +#: ../../howto/unicode.rst:544 +msgid "" +"It's possible that you may not need to do anything depending on your input " +"sources and output destinations; you should check whether the libraries used" +" in your application support Unicode natively. XML parsers often return " +"Unicode data, for example. Many relational databases also support Unicode-" +"valued columns and can return Unicode values from an SQL query." +msgstr "" +"根据输入源和输出目标的不同,或许什么都不用干;请检查一下应用程序用到的库是否原生支持 Unicode。例如,XML 解析器往往会返回 Unicode " +"数据。许多关系数据库的字段也支持 Unicode 值,并且 SQL 查询也能返回 Unicode 值。" + +#: ../../howto/unicode.rst:550 +msgid "" +"Unicode data is usually converted to a particular encoding before it gets " +"written to disk or sent over a socket. It's possible to do all the work " +"yourself: open a file, read an 8-bit bytes object from it, and convert the " +"bytes with ``bytes.decode(encoding)``. However, the manual approach is not " +"recommended." +msgstr "" +"在写入磁盘或通过套接字发送之前,Unicode 数据通常要转换为特定的编码。可以自己完成所有工作:打开一个文件,从中读取一个 8 位字节对象,然后用 " +"``bytes.decode(encoding)`` 对字节串进行转换。但是,不推荐采用这种全人工的方案。 " + +#: ../../howto/unicode.rst:555 +msgid "" +"One problem is the multi-byte nature of encodings; one Unicode character can" +" be represented by several bytes. If you want to read the file in " +"arbitrary-sized chunks (say, 1024 or 4096 bytes), you need to write error-" +"handling code to catch the case where only part of the bytes encoding a " +"single Unicode character are read at the end of a chunk. One solution would" +" be to read the entire file into memory and then perform the decoding, but " +"that prevents you from working with files that are extremely large; if you " +"need to read a 2 GiB file, you need 2 GiB of RAM. (More, really, since for " +"at least a moment you'd need to have both the encoded string and its Unicode" +" version in memory.)" +msgstr "" +"编码的多字节特性就是一个难题; 一个 Unicode 字符可以用几个字节表示。 如果要以任意大小的块(例如 1024 或 4096 " +"字节)读取文件,那么在块的末尾可能只读到某个 Unicode 字符的部分字节,这就需要编写错误处理代码。 " +"有一种解决方案是将整个文件读入内存,然后进行解码,但这样就没法处理很大的文件了;若要读取 2 GB 的文件,就需要 2 GB 的 " +"RAM。(其实需要的内存会更多些,因为至少有一段时间需要在内存中同时存放已编码字符串及其 Unicode 版本。)" + +#: ../../howto/unicode.rst:565 +msgid "" +"The solution would be to use the low-level decoding interface to catch the " +"case of partial coding sequences. The work of implementing this has already" +" been done for you: the built-in :func:`open` function can return a file-" +"like object that assumes the file's contents are in a specified encoding and" +" accepts Unicode parameters for methods such as :meth:`~io.TextIOBase.read` " +"and :meth:`~io.TextIOBase.write`. This works through :func:`open`\\'s " +"*encoding* and *errors* parameters which are interpreted just like those in " +":meth:`str.encode` and :meth:`bytes.decode`." +msgstr "" +"解决方案是利用底层解码接口去捕获编码序列不完整的情况。这部分代码已经是现成的:内置函数 :func:`open` " +"可以返回一个文件类的对象,该对象认为文件的内容采用指定的编码,:meth:`~io.TextIOBase.read` 和 " +":meth:`~io.TextIOBase.write` 等方法接受 Unicode 参数。只要用 :func:`open` 的 *encoding* " +"和 *errors* 参数即可,参数释义同 :meth:`str.encode` 和 :meth:`bytes.decode` 。 " + +#: ../../howto/unicode.rst:574 +msgid "Reading Unicode from a file is therefore simple::" +msgstr "因此从文件读取 Unicode 就比较简单了:" + +#: ../../howto/unicode.rst:580 +msgid "" +"It's also possible to open files in update mode, allowing both reading and " +"writing::" +msgstr "也可以在更新模式下打开文件,以便同时读取和写入:" + +#: ../../howto/unicode.rst:588 +msgid "" +"The Unicode character ``U+FEFF`` is used as a byte-order mark (BOM), and is " +"often written as the first character of a file in order to assist with " +"autodetection of the file's byte ordering. Some encodings, such as UTF-16, " +"expect a BOM to be present at the start of a file; when such an encoding is " +"used, the BOM will be automatically written as the first character and will " +"be silently dropped when the file is read. There are variants of these " +"encodings, such as 'utf-16-le' and 'utf-16-be' for little-endian and big-" +"endian encodings, that specify one particular byte ordering and don't skip " +"the BOM." +msgstr "" +"Unicode 字符 ``U+FEFF`` 用作字节顺序标记(BOM),通常作为文件的第一个字符写入,以帮助自动检测文件的字节顺序。某些编码(例如 " +"UTF-16)期望在文件开头出现 BOM;当采用这种编码时,BOM 将自动作为第一个字符写入,并在读取文件时会静默删除。这些编码有多种变体,例如用于 " +"little-endian 和 big-endian 编码的 “utf-16-le” 和 “utf-16-be”,会指定一种特定的字节顺序并且不会忽略 " +"BOM。" + +#: ../../howto/unicode.rst:597 +msgid "" +"In some areas, it is also convention to use a \"BOM\" at the start of UTF-8 " +"encoded files; the name is misleading since UTF-8 is not byte-order " +"dependent. The mark simply announces that the file is encoded in UTF-8. For" +" reading such files, use the 'utf-8-sig' codec to automatically skip the " +"mark if present." +msgstr "" +"在某些地区,习惯在 UTF-8 编码文件的开头用上“BOM”;此名称具有误导性,因为 UTF-8 与字节顺序无关。此标记只是声明该文件以 UTF-8 " +"编码。要读取此类文件,请使用“utf-8-sig”编解码器自动忽略此标记。" + +#: ../../howto/unicode.rst:604 +msgid "Unicode filenames" +msgstr "Unicode 文件名" + +#: ../../howto/unicode.rst:606 +msgid "" +"Most of the operating systems in common use today support filenames that " +"contain arbitrary Unicode characters. Usually this is implemented by " +"converting the Unicode string into some encoding that varies depending on " +"the system. Today Python is converging on using UTF-8: Python on MacOS has " +"used UTF-8 for several versions, and Python 3.6 switched to using UTF-8 on " +"Windows as well. On Unix systems, there will only be a filesystem encoding " +"if you've set the ``LANG`` or ``LC_CTYPE`` environment variables; if you " +"haven't, the default encoding is again UTF-8." +msgstr "" +"当今大多数操作系统的文件名都支持包含任意 Unicode 字符。通常这是通过将 Unicode 字符串转换为某系统的编码来实现的。如今的 Python " +"趋向于采用 UTF-8 编码:MacOS 上的 Python 已经在多个版本中采用了 UTF-8,而 Python 3.6 在 Windows " +"上也改用了 UTF-8。在 Unix 系统中,只有设置了 ``LANG`` 或 ``LC_CTYPE`` " +"环境变量,才会采用某个文件系统编码;否则默认编码还是 UTF-8。" + +#: ../../howto/unicode.rst:616 +msgid "" +"The :func:`sys.getfilesystemencoding` function returns the encoding to use " +"on your current system, in case you want to do the encoding manually, but " +"there's not much reason to bother. When opening a file for reading or " +"writing, you can usually just provide the Unicode string as the filename, " +"and it will be automatically converted to the right encoding for you::" +msgstr "" +":func:`sys.getfilesystemencoding` " +"函数将返回要在当前系统采用的编码,若想手动进行编码时即可用到,但无需多虑。在打开文件进行读写时,通常只需提供 Unicode " +"字符串作为文件名,会自动转换为合适的编码格式:" + +#: ../../howto/unicode.rst:626 +msgid "" +"Functions in the :mod:`os` module such as :func:`os.stat` will also accept " +"Unicode filenames." +msgstr ":mod:`os` 模块中的函数也能接受 Unicode 文件名,如 :func:`os.stat` 。 " + +#: ../../howto/unicode.rst:629 +msgid "" +"The :func:`os.listdir` function returns filenames, which raises an issue: " +"should it return the Unicode version of filenames, or should it return bytes" +" containing the encoded versions? :func:`os.listdir` can do both, depending" +" on whether you provided the directory path as bytes or a Unicode string. " +"If you pass a Unicode string as the path, filenames will be decoded using " +"the filesystem's encoding and a list of Unicode strings will be returned, " +"while passing a byte path will return the filenames as bytes. For example, " +"assuming the default filesystem encoding is UTF-8, running the following " +"program::" +msgstr "" +":func:`os.listdir` 函数将返回文件名,这会引发一个难题:到底应返回文件名的 Unicode " +"版本,还是应返回已编码的字节串呢?这两种操作 :func:`os.listdir` 均可执行,具体取决于给出的目录路径是字节串形式还是 Unicode " +"字符串。若传入一个 Unicode 字符串作为路径,文件名将用当前文件系统的编码进行解码并返回一个 Unicode " +"字符串列表,而若传入一个字节串路径则会返回字节串格式的文件名。以下假定默认文件系统编码为 UTF-8,运行以下程序:" + +#: ../../howto/unicode.rst:647 +msgid "will produce the following output:" +msgstr "将产生以下输出:" + +#: ../../howto/unicode.rst:655 +msgid "" +"The first list contains UTF-8-encoded filenames, and the second list " +"contains the Unicode versions." +msgstr "第一个列表包含 UTF-8 编码的文件名,第二个列表则包含 Unicode 版本的。 " + +#: ../../howto/unicode.rst:658 +msgid "" +"Note that on most occasions, you should can just stick with using Unicode " +"with these APIs. The bytes APIs should only be used on systems where " +"undecodable file names can be present; that's pretty much only Unix systems " +"now." +msgstr "" +"请注意,大多时候应该坚持用这些 API 处理 Unicode。字节串 API 应该仅用于可能存在不可解码文件名的系统;现在几乎仅剩 Unix 系统了。" + +#: ../../howto/unicode.rst:665 +msgid "Tips for Writing Unicode-aware Programs" +msgstr "识别 Unicode 的编程技巧 " + +#: ../../howto/unicode.rst:667 +msgid "" +"This section provides some suggestions on writing software that deals with " +"Unicode." +msgstr "本节提供了一些关于编写 Unicode 处理软件的建议。 " + +#: ../../howto/unicode.rst:670 +msgid "The most important tip is:" +msgstr "最重要的技巧如下:" + +#: ../../howto/unicode.rst:672 +msgid "" +"Software should only work with Unicode strings internally, decoding the " +"input data as soon as possible and encoding the output only at the end." +msgstr "程序应只在内部处理 Unicode 字符串,尽快对输入数据进行解码,并只在最后对输出进行编码。" + +#: ../../howto/unicode.rst:675 +msgid "" +"If you attempt to write processing functions that accept both Unicode and " +"byte strings, you will find your program vulnerable to bugs wherever you " +"combine the two different kinds of strings. There is no automatic encoding " +"or decoding: if you do e.g. ``str + bytes``, a :exc:`TypeError` will be " +"raised." +msgstr "" +"如果尝试编写的处理函数对 Unicode " +"和字节串形式的字符串都能接受,就会发现组合使用两种不同类型的字符串时,容易产生差错。没办法做到自动编码或解码:如果执行 ``str + " +"bytes``,则会触发 :exc:`TypeError`。" + +#: ../../howto/unicode.rst:680 +msgid "" +"When using data coming from a web browser or some other untrusted source, a " +"common technique is to check for illegal characters in a string before using" +" the string in a generated command line or storing it in a database. If " +"you're doing this, be careful to check the decoded string, not the encoded " +"bytes data; some encodings may have interesting properties, such as not " +"being bijective or not being fully ASCII-compatible. This is especially " +"true if the input data also specifies the encoding, since the attacker can " +"then choose a clever way to hide malicious text in the encoded bytestream." +msgstr "" +"当要使用的数据来自 Web " +"浏览器或其他不受信来源时,常用技术是在用该字符串生成命令行之前,或要存入数据库之前,先检查字符串中是否包含非法字符。请仔细检查解码后的字符串,而不是编码格式的字节串数据;有些编码可能具备一些有趣的特性,例如与" +" ASCII 不是一一对应或不完全兼容。如果输入数据还指定了编码格式,则尤其如此,因为攻击者可以选择一种巧妙的方式将恶意文本隐藏在经过编码的字节流中。" + +#: ../../howto/unicode.rst:691 +msgid "Converting Between File Encodings" +msgstr "在文件编码格式之间进行转换" + +#: ../../howto/unicode.rst:693 +msgid "" +"The :class:`~codecs.StreamRecoder` class can transparently convert between " +"encodings, taking a stream that returns data in encoding #1 and behaving " +"like a stream returning data in encoding #2." +msgstr "" +":class:`~codecs.StreamRecoder` 类可以在两种编码之间透明地进行转换,参数为编码格式为 #1 " +"的数据流,表现行为则是编码格式为 #2 的数据流。" + +#: ../../howto/unicode.rst:697 +msgid "" +"For example, if you have an input file *f* that's in Latin-1, you can wrap " +"it with a :class:`~codecs.StreamRecoder` to return bytes encoded in UTF-8::" +msgstr "" +"假设输入文件 *f* 采用 Latin-1 编码格式,即可用 :class:`~codecs.StreamRecoder` 包装后返回 UTF-8 " +"编码的字节串:" + +#: ../../howto/unicode.rst:711 +msgid "Files in an Unknown Encoding" +msgstr "编码格式未知的文件" + +#: ../../howto/unicode.rst:713 +msgid "" +"What can you do if you need to make a change to a file, but don't know the " +"file's encoding? If you know the encoding is ASCII-compatible and only want" +" to examine or modify the ASCII parts, you can open the file with the " +"``surrogateescape`` error handler::" +msgstr "" +"若需对文件进行修改,但不知道文件的编码,那该怎么办呢?如果已知编码格式与 ASCII 兼容,并且只想查看或修改 ASCII 部分,则可利用 " +"``surrogateescape`` 错误处理 handler 打开文件:" + +#: ../../howto/unicode.rst:727 +msgid "" +"The ``surrogateescape`` error handler will decode any non-ASCII bytes as " +"code points in a special range running from U+DC80 to U+DCFF. These code " +"points will then turn back into the same bytes when the ``surrogateescape`` " +"error handler is used to encode the data and write it back out." +msgstr "" +"``surrogateescape`` 错误处理 handler 会把所有非 ASCII 字节解码为 U+DC80 至 U+DCFF " +"这一特殊范围的码位。当 ``surrogateescape`` 错误处理 handler用于数据编码并回写时,这些码位将转换回原样。 " + +#: ../../howto/unicode.rst:737 +msgid "" +"One section of `Mastering Python 3 Input/Output " +"`_, a PyCon" +" 2010 talk by David Beazley, discusses text processing and binary data " +"handling." +msgstr "" +"David Beazley 在 PyCon 2010 上的演讲 `掌握 Python 3 输入/输出 " +"`_ " +"中,有一节讨论了文本和二进制数据的处理。" + +#: ../../howto/unicode.rst:741 +msgid "" +"The `PDF slides for Marc-André Lemburg's presentation \"Writing Unicode-" +"aware Applications in Python\" " +"`_ discuss questions of character encodings as " +"well as how to internationalize and localize an application. These slides " +"cover Python 2.x only." +msgstr "" +"`Marc-André Lemburg 演示的PDF 幻灯片“在 Python 中编写支持 Unicode 的应用程序” " +"`_ ,讨论了字符编码问题以及如何国际化和本地化应用程序。这些幻灯片仅涵盖 Python 2.x。" + +#: ../../howto/unicode.rst:747 +msgid "" +"`The Guts of Unicode in Python `_ is a PyCon 2013 talk by Benjamin Peterson that " +"discusses the internal Unicode representation in Python 3.3." +msgstr "" +"`Python Unicode 实质 `_ 是 Benjamin Peterson 在 PyCon 2013 上的演讲,讨论了 Unicode 在 Python 3.3 " +"中的内部表示。" + +#: ../../howto/unicode.rst:754 +msgid "Acknowledgements" +msgstr "致谢" + +#: ../../howto/unicode.rst:756 +msgid "" +"The initial draft of this document was written by Andrew Kuchling. It has " +"since been revised further by Alexander Belopolsky, Georg Brandl, Andrew " +"Kuchling, and Ezio Melotti." +msgstr "" +"本文初稿由 Andrew Kuchling 撰写。此后,Alexander Belopolsky、Georg Brandl、Andrew " +"Kuchling 和 Ezio Melotti 作了进一步修订。" + +#: ../../howto/unicode.rst:760 +msgid "" +"Thanks to the following people who have noted errors or offered suggestions " +"on this article: Éric Araujo, Nicholas Bastin, Nick Coghlan, Marius " +"Gedminas, Kent Johnson, Ken Krugler, Marc-André Lemburg, Martin von Löwis, " +"Terry J. Reedy, Serhiy Storchaka, Eryk Sun, Chad Whitacre, Graham Wideman." +msgstr "" +"感谢以下各位指出本文错误或提出建议:Éric Araujo、Nicholas Bastin、Nick Coghlan、Marius " +"Gedminas、Kent Johnson、Ken Krugler、Marc-André Lemburg、Martin von Löwis、Terry " +"J. Reedy、Serhiy Storchaka , Eryk Sun, Chad Whitacre, Graham Wideman。" diff --git a/howto/urllib2.po b/howto/urllib2.po new file mode 100644 index 000000000..1b5486770 --- /dev/null +++ b/howto/urllib2.po @@ -0,0 +1,715 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) 2001-2022, Python Software Foundation +# This file is distributed under the same license as the Python package. +# FIRST AUTHOR , YEAR. +# +# Translators: +# Jerry Chen , 2017 +# Fei Yin , 2018 +# Kade For, 2019 +# 钢 彭 , 2019 +# 汪心禾 , 2019 +# Yi Cao <1783250036@qq.com>, 2019 +# Jiuh-star , 2021 +# Dai Xu , 2021 +# Freesand Leo , 2021 +# +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: Python 3.9\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2022-11-04 14:34+0000\n" +"PO-Revision-Date: 2017-02-16 17:46+0000\n" +"Last-Translator: Freesand Leo , 2021\n" +"Language-Team: Chinese (China) (https://www.transifex.com/python-doc/teams/5390/zh_CN/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: zh_CN\n" +"Plural-Forms: nplurals=1; plural=0;\n" + +#: ../../howto/urllib2.rst:5 +msgid "HOWTO Fetch Internet Resources Using The urllib Package" +msgstr "如何利用 urllib 包获取网络资源" + +#: ../../howto/urllib2.rst:0 +msgid "Author" +msgstr "作者" + +#: ../../howto/urllib2.rst:7 +msgid "`Michael Foord `_" +msgstr "`Michael Foord `_" + +#: ../../howto/urllib2.rst:11 +msgid "" +"There is a French translation of an earlier revision of this HOWTO, " +"available at `urllib2 - Le Manuel manquant " +"`_." +msgstr "" +"这份 HOWTO 文档的早期版本有一份法语的译文,可在 `urllib2 - Le Manuel manquant " +"`_ 处查阅。" + +#: ../../howto/urllib2.rst:18 +msgid "Introduction" +msgstr "概述" + +#: ../../howto/urllib2.rst:22 +msgid "" +"You may also find useful the following article on fetching web resources " +"with Python:" +msgstr "关于如何用 Python 获取 web 资源,以下文章或许也很有用:" + +#: ../../howto/urllib2.rst:25 +msgid "" +"`Basic Authentication " +"`_" +msgstr "" +"`基础的身份认证 " +"`_" + +#: ../../howto/urllib2.rst:27 +msgid "A tutorial on *Basic Authentication*, with examples in Python." +msgstr "*基本认证* 的教程,带有一些 Python 示例。" + +#: ../../howto/urllib2.rst:29 +msgid "" +"**urllib.request** is a Python module for fetching URLs (Uniform Resource " +"Locators). It offers a very simple interface, in the form of the *urlopen* " +"function. This is capable of fetching URLs using a variety of different " +"protocols. It also offers a slightly more complex interface for handling " +"common situations - like basic authentication, cookies, proxies and so on. " +"These are provided by objects called handlers and openers." +msgstr "" +"**urllib.request** 是用于获取 URL (统一资源定位符)的 Python 模块。它以 *urlopen* " +"函数的形式提供了一个非常简单的接口,能用不同的协议获取 " +"URL。同时它还为处理各种常见情形提供了一个稍微复杂一些的接口——比如:基础身份认证、cookies、代理等等。这些功能是由名为 handlers 和 " +"opener 的对象提供的。" + +#: ../../howto/urllib2.rst:36 +msgid "" +"urllib.request supports fetching URLs for many \"URL schemes\" (identified " +"by the string before the ``\":\"`` in URL - for example ``\"ftp\"`` is the " +"URL scheme of ``\"ftp://python.org/\"``) using their associated network " +"protocols (e.g. FTP, HTTP). This tutorial focuses on the most common case, " +"HTTP." +msgstr "" +"urllib.request 支持多种 \"URL 方案\" (通过 URL中 ``\":\"`` 之前的字符串加以区分——如 " +"``\"ftp://python.org/\"` 中的 ``\"ftp\"```)即为采用其关联网络协议(FTP、HTTP 之类)的 URL 方案 " +"。本教程重点关注最常用的 HTTP 场景。" + +#: ../../howto/urllib2.rst:41 +msgid "" +"For straightforward situations *urlopen* is very easy to use. But as soon as" +" you encounter errors or non-trivial cases when opening HTTP URLs, you will " +"need some understanding of the HyperText Transfer Protocol. The most " +"comprehensive and authoritative reference to HTTP is :rfc:`2616`. This is a " +"technical document and not intended to be easy to read. This HOWTO aims to " +"illustrate using *urllib*, with enough detail about HTTP to help you " +"through. It is not intended to replace the :mod:`urllib.request` docs, but " +"is supplementary to them." +msgstr "" +"对于简单场景而言, *urlopen* 用起来十分容易。但只要在打开 HTTP URL " +"时遇到错误或非常情况,就需要对超文本传输协议有所了解才行。最全面、最权威的 HTTP 参考是 :rfc:`2616` " +"。那是一份技术文档,并没有追求可读性。本 文旨在说明 *urllib* 的用法,为了便于阅读也附带了足够详细的 HTTP 信息。本文并不是为了替代 " +":mod:`urllib.request` 文档,只是其补充说明而已。 " + +#: ../../howto/urllib2.rst:51 +msgid "Fetching URLs" +msgstr "获取 URL 资源" + +#: ../../howto/urllib2.rst:53 +msgid "The simplest way to use urllib.request is as follows::" +msgstr "urllib.request 最简单的使用方式如下所示:" + +#: ../../howto/urllib2.rst:59 +msgid "" +"If you wish to retrieve a resource via URL and store it in a temporary " +"location, you can do so via the :func:`shutil.copyfileobj` and " +":func:`tempfile.NamedTemporaryFile` functions::" +msgstr "" +"如果想通过 URL 获取资源并临时存储一下,可以采用 :func:`shutil.copyfileobj` 和 " +":func:`tempfile.NamedTemporaryFile` 函数:" + +#: ../../howto/urllib2.rst:74 +msgid "" +"Many uses of urllib will be that simple (note that instead of an 'http:' URL" +" we could have used a URL starting with 'ftp:', 'file:', etc.). However, " +"it's the purpose of this tutorial to explain the more complicated cases, " +"concentrating on HTTP." +msgstr "" +"urllib 的很多用法就是这么简单(注意 URL 不仅可以 http: 开头,还可以是 ftp: 、file: " +"等)。不过本教程的目的是介绍更加复杂的应用场景,重点还是关注 HTTP。" + +#: ../../howto/urllib2.rst:79 +msgid "" +"HTTP is based on requests and responses - the client makes requests and " +"servers send responses. urllib.request mirrors this with a ``Request`` " +"object which represents the HTTP request you are making. In its simplest " +"form you create a Request object that specifies the URL you want to fetch. " +"Calling ``urlopen`` with this Request object returns a response object for " +"the URL requested. This response is a file-like object, which means you can " +"for example call ``.read()`` on the response::" +msgstr "" +"HTTP 以请求和响应为基础——客户端生成请求,服务器发送响应。urllib.request 用 ``Request`` 对象来表示要生成的 HTTP " +"请求。最简单的形式就是创建一个 Request 对象,指定了想要获取的 URL。用这个 Request 对象作为参数调用``urlopen`` " +",将会返回该 URL 的响应对象。响应对象类似于文件对象,就是说可以对其调用 ``.read()`` 之类的命令:" + +#: ../../howto/urllib2.rst:93 +msgid "" +"Note that urllib.request makes use of the same Request interface to handle " +"all URL schemes. For example, you can make an FTP request like so::" +msgstr "请注意,urllib.request 用同一个 Request 接口处理所有 URL 方案。比如可生成 FTP 请求如下:" + +#: ../../howto/urllib2.rst:98 +msgid "" +"In the case of HTTP, there are two extra things that Request objects allow " +"you to do: First, you can pass data to be sent to the server. Second, you " +"can pass extra information (\"metadata\") *about* the data or about the " +"request itself, to the server - this information is sent as HTTP " +"\"headers\". Let's look at each of these in turn." +msgstr "" +"就 HTTP 而言,Request 对象能够做两件额外的事情:首先可以把数据传给服务器。其次,可以将 *有关* " +"数据或请求本身的额外信息(metadata)传给服务器——这些信息将会作为 HTTP “头部”数据发送。下面依次看下。" + +#: ../../howto/urllib2.rst:105 +msgid "Data" +msgstr "数据" + +#: ../../howto/urllib2.rst:107 +msgid "" +"Sometimes you want to send data to a URL (often the URL will refer to a CGI " +"(Common Gateway Interface) script or other web application). With HTTP, this" +" is often done using what's known as a **POST** request. This is often what " +"your browser does when you submit a HTML form that you filled in on the web." +" Not all POSTs have to come from forms: you can use a POST to transmit " +"arbitrary data to your own application. In the common case of HTML forms, " +"the data needs to be encoded in a standard way, and then passed to the " +"Request object as the ``data`` argument. The encoding is done using a " +"function from the :mod:`urllib.parse` library. ::" +msgstr "" +"有时需要向某个 URL 发送数据,通常此 URL 会指向某个CGI(通用网关接口)脚本或其他 web 应用。对于 HTTP 而言,这通常会用所谓的 " +"**POST** 请求来完成。当要把 Web 页填写的 HTML 表单提交时,浏览器通常会执行此操作。但并不是所有的 POST 都来自表单:可以用 " +"POST 方式传输任何数据到自己的应用上。对于通常的 HTML 表单,数据需要以标准的方式编码,然后作为 ``data`` 参数传给 Request " +"对象。编码过程是用 :mod:`urllib.parse` 库的函数完成的:" + +#: ../../howto/urllib2.rst:131 +msgid "" +"Note that other encodings are sometimes required (e.g. for file upload from " +"HTML forms - see `HTML Specification, Form Submission " +"`_ for more " +"details)." +msgstr "" +"请注意,有时还需要采用其他编码,比如由 HTML 表单上传文件——更多细节请参见 `HTML 规范,提交表单 " +"`_ 。 " + +#: ../../howto/urllib2.rst:136 +msgid "" +"If you do not pass the ``data`` argument, urllib uses a **GET** request. One" +" way in which GET and POST requests differ is that POST requests often have " +"\"side-effects\": they change the state of the system in some way (for " +"example by placing an order with the website for a hundredweight of tinned " +"spam to be delivered to your door). Though the HTTP standard makes it clear" +" that POSTs are intended to *always* cause side-effects, and GET requests " +"*never* to cause side-effects, nothing prevents a GET request from having " +"side-effects, nor a POST requests from having no side-effects. Data can also" +" be passed in an HTTP GET request by encoding it in the URL itself." +msgstr "" +"如果不传递 ``data`` 参数,urllib 将采用 **GET** 请求。GET 和 POST 请求有一点不同,POST " +"请求往往具有“副作用”,他们会以某种方式改变系统的状态。例如,从网站下一个订单,购买一大堆罐装垃圾并运送到家。 尽管 HTTP 标准明确指出 POST " +"*总是* 要导致副作用,而 GET 请求 *从来不会* 导致副作用。但没有什么办法能阻止 GET 和 POST 请求的副作用。数据也可以在 HTTP " +"GET 请求中传递,只要把数据编码到 URL 中即可。 " + +#: ../../howto/urllib2.rst:146 +msgid "This is done as follows::" +msgstr "做法如下所示:" + +#: ../../howto/urllib2.rst:161 +msgid "" +"Notice that the full URL is created by adding a ``?`` to the URL, followed " +"by the encoded values." +msgstr "请注意,完整的 URL 是通过在其中添加 ``?`` 创建的,后面跟着经过编码的数据。" + +#: ../../howto/urllib2.rst:165 +msgid "Headers" +msgstr "HTTP 头部信息" + +#: ../../howto/urllib2.rst:167 +msgid "" +"We'll discuss here one particular HTTP header, to illustrate how to add " +"headers to your HTTP request." +msgstr "下面介绍一个具体的 HTTP 头部信息,以此说明如何在 HTTP 请求加入头部信息。 " + +#: ../../howto/urllib2.rst:170 +msgid "" +"Some websites [#]_ dislike being browsed by programs, or send different " +"versions to different browsers [#]_. By default urllib identifies itself as " +"``Python-urllib/x.y`` (where ``x`` and ``y`` are the major and minor version" +" numbers of the Python release, e.g. ``Python-urllib/2.5``), which may " +"confuse the site, or just plain not work. The way a browser identifies " +"itself is through the ``User-Agent`` header [#]_. When you create a Request " +"object you can pass a dictionary of headers in. The following example makes " +"the same request as above, but identifies itself as a version of Internet " +"Explorer [#]_. ::" +msgstr "" +"有些网站 [#]_ 不愿被程序浏览到,或者要向不同的浏览器发送不同版本 [#]_ 的网页。默认情况下,urllib 将自身标识为“Python-" +"urllib/xy”(其中 ``x`` 、 ``y`` 是 Python 版本的主、次版本号,例如 ``Python-" +"urllib/2.5``),这可能会让网站不知所措,或者干脆就使其无法正常工作。浏览器是通过头部信息 ``User-Agent`` [#]_ " +"来标识自己的。在创建 Request 对象时,可以传入字典形式的头部信息。以下示例将生成与之前相同的请求,只是将自身标识为某个版本的 Internet " +"Explorer [#]_ :" + +#: ../../howto/urllib2.rst:197 +msgid "" +"The response also has two useful methods. See the section on `info and " +"geturl`_ which comes after we have a look at what happens when things go " +"wrong." +msgstr "响应对象也有两个很有用的方法。请参阅有关 `info 和 geturl`_ 部分,了解出现问题时会发生什么。 " + +#: ../../howto/urllib2.rst:202 +msgid "Handling Exceptions" +msgstr "异常的处理" + +#: ../../howto/urllib2.rst:204 +msgid "" +"*urlopen* raises :exc:`URLError` when it cannot handle a response (though as" +" usual with Python APIs, built-in exceptions such as :exc:`ValueError`, " +":exc:`TypeError` etc. may also be raised)." +msgstr "" +"如果 *urlopen* 无法处理响应信息,就会触发 :exc:`URLError` 。尽管与通常的 Python API 一样,也可能触发 " +":exc:`ValueError` 、 :exc:`TypeError` 等内置异常。" + +#: ../../howto/urllib2.rst:208 +msgid "" +":exc:`HTTPError` is the subclass of :exc:`URLError` raised in the specific " +"case of HTTP URLs." +msgstr ":exc:`HTTPError` 是 :exc:`URLError` 的子类,当 URL 是 HTTP 的情况时将会触发。" + +#: ../../howto/urllib2.rst:211 +msgid "" +"The exception classes are exported from the :mod:`urllib.error` module." +msgstr "上述异常类是从 :mod:`urllib.error` 模块中导出的。" + +#: ../../howto/urllib2.rst:214 +msgid "URLError" +msgstr "URLError" + +#: ../../howto/urllib2.rst:216 +msgid "" +"Often, URLError is raised because there is no network connection (no route " +"to the specified server), or the specified server doesn't exist. In this " +"case, the exception raised will have a 'reason' attribute, which is a tuple " +"containing an error code and a text error message." +msgstr "" +"触发 URLError 的原因,通常是网络不通(或者没有到指定服务器的路由),或者指定的服务器不存在。这时触发的异常会带有一个 reason " +"属性,是一个包含错误代码和文本错误信息的元组。" + +#: ../../howto/urllib2.rst:221 +msgid "e.g. ::" +msgstr "例如:" + +#: ../../howto/urllib2.rst:232 +msgid "HTTPError" +msgstr "HTTPError" + +#: ../../howto/urllib2.rst:234 +msgid "" +"Every HTTP response from the server contains a numeric \"status code\". " +"Sometimes the status code indicates that the server is unable to fulfil the " +"request. The default handlers will handle some of these responses for you " +"(for example, if the response is a \"redirection\" that requests the client " +"fetch the document from a different URL, urllib will handle that for you). " +"For those it can't handle, urlopen will raise an :exc:`HTTPError`. Typical " +"errors include '404' (page not found), '403' (request forbidden), and '401' " +"(authentication required)." +msgstr "" +"从服务器返回的每个 HTTP 响应都包含一个数字的 " +"“状态码”。有时该状态码表明服务器无法完成该请求。默认的处理函数将会处理这其中的一部分响应。如若响应是“redirection”,这是要求客户端从另一 " +"URL 处获取数据,urllib 将会自行处理。对于那些无法处理的状况,urlopen 将会引发 :exc:`HTTPError` " +"。典型的错误包括:“404”(页面无法找到)、“403”(请求遭拒绝)和“401”(需要身份认证)。" + +#: ../../howto/urllib2.rst:242 +msgid "" +"See section 10 of :rfc:`2616` for a reference on all the HTTP error codes." +msgstr "全部的 HTTP 错误码请参阅 :rfc:`2616` 。" + +#: ../../howto/urllib2.rst:244 +msgid "" +"The :exc:`HTTPError` instance raised will have an integer 'code' attribute, " +"which corresponds to the error sent by the server." +msgstr ":exc:`HTTPError` 实例将包含一个整数型的“code”属性,对应于服务器发来的错误。" + +#: ../../howto/urllib2.rst:248 +msgid "Error Codes" +msgstr "错误代码" + +#: ../../howto/urllib2.rst:250 +msgid "" +"Because the default handlers handle redirects (codes in the 300 range), and " +"codes in the 100--299 range indicate success, you will usually only see " +"error codes in the 400--599 range." +msgstr "" +"由于默认处理函数会自行处理重定向(300 以内的错误码),而且 100--299 的状态码表示成功,因此通常只会出现 400--599 的错误码。 " + +#: ../../howto/urllib2.rst:254 +msgid "" +":attr:`http.server.BaseHTTPRequestHandler.responses` is a useful dictionary " +"of response codes in that shows all the response codes used by :rfc:`2616`. " +"The dictionary is reproduced here for convenience ::" +msgstr "" +":attr:`http.server.BaseHTTPRequestHandler.responses` 是很有用的响应码字典,其中给出了 " +":rfc:`2616` 用到的所有响应代码。为方便起见,将此字典转载如下:" + +#: ../../howto/urllib2.rst:326 +msgid "" +"When an error is raised the server responds by returning an HTTP error code " +"*and* an error page. You can use the :exc:`HTTPError` instance as a response" +" on the page returned. This means that as well as the code attribute, it " +"also has read, geturl, and info, methods as returned by the " +"``urllib.response`` module::" +msgstr "" +"当触发错误时,服务器通过返回 HTTP 错误码 *和* 错误页面进行响应。可以将 :exc:`HTTPError` 实例用作返回页面的响应。这意味着除了" +" code 属性之外,错误对象还像 ``urllib.response`` 模块返回的那样具有 read、geturl 和 info 方法: " + +#: ../../howto/urllib2.rst:346 +msgid "Wrapping it Up" +msgstr "总之" + +#: ../../howto/urllib2.rst:348 +msgid "" +"So if you want to be prepared for :exc:`HTTPError` *or* :exc:`URLError` " +"there are two basic approaches. I prefer the second approach." +msgstr "若要准备处理 :exc:`HTTPError`  *或* :exc:`URLError` ,有两种简单的方案。推荐使用第二种方案。" + +#: ../../howto/urllib2.rst:352 +msgid "Number 1" +msgstr "第一种方案" + +#: ../../howto/urllib2.rst:374 +msgid "" +"The ``except HTTPError`` *must* come first, otherwise ``except URLError`` " +"will *also* catch an :exc:`HTTPError`." +msgstr "" +"``except HTTPError`` *必须* 首先处理,否则 ``except URLError`` 将会 *同时* 捕获 " +":exc:`HTTPError` 。" + +#: ../../howto/urllib2.rst:378 +msgid "Number 2" +msgstr "第二种方案" + +#: ../../howto/urllib2.rst:399 +msgid "info and geturl" +msgstr "info 和 geturl 方法" + +#: ../../howto/urllib2.rst:401 +msgid "" +"The response returned by urlopen (or the :exc:`HTTPError` instance) has two " +"useful methods :meth:`info` and :meth:`geturl` and is defined in the module " +":mod:`urllib.response`.." +msgstr "" +"由 urlopen (或者 :exc:`HTTPError` 实例)所返回的响应包含两个有用的方法: :meth:`info` 和 " +":meth:`geturl`,该响应由模块 :mod:`urllib.response` 定义。" + +#: ../../howto/urllib2.rst:405 +msgid "" +"**geturl** - this returns the real URL of the page fetched. This is useful " +"because ``urlopen`` (or the opener object used) may have followed a " +"redirect. The URL of the page fetched may not be the same as the URL " +"requested." +msgstr "" +"**geturl** ——返回所获取页面的真实 URL。该方法很有用,因为 ``urlopen`` (或 opener " +"对象)可能已经经过了一次重定向。已获取页面的 URL 未必就是所请求的 URL 。" + +#: ../../howto/urllib2.rst:409 +msgid "" +"**info** - this returns a dictionary-like object that describes the page " +"fetched, particularly the headers sent by the server. It is currently an " +":class:`http.client.HTTPMessage` instance." +msgstr "" +"**info** - 该方法返回一个类似字典的对象,描述了所获取的页面,特别是由服务器送出的头部信息(headers) 。目前它是一个 " +":class:`http.client.HTTPMessage` 实例。" + +#: ../../howto/urllib2.rst:413 +msgid "" +"Typical headers include 'Content-length', 'Content-type', and so on. See the" +" `Quick Reference to HTTP Headers `_ for a " +"useful listing of HTTP headers with brief explanations of their meaning and " +"use." +msgstr "" +"典型的 HTTP 头部信息包括“Content-length”、“Content-type”等。有关 HTTP " +"头部信息的清单,包括含义和用途的简要说明,请参阅 `HTTP Header 快速参考 `_ " +"。 " + +#: ../../howto/urllib2.rst:420 +msgid "Openers and Handlers" +msgstr "Opener 和 Handler" + +#: ../../howto/urllib2.rst:422 +msgid "" +"When you fetch a URL you use an opener (an instance of the perhaps " +"confusingly-named :class:`urllib.request.OpenerDirector`). Normally we have " +"been using the default opener - via ``urlopen`` - but you can create custom " +"openers. Openers use handlers. All the \"heavy lifting\" is done by the " +"handlers. Each handler knows how to open URLs for a particular URL scheme " +"(http, ftp, etc.), or how to handle an aspect of URL opening, for example " +"HTTP redirections or HTTP cookies." +msgstr "" +"当获取 URL 时,会用到了一个 opener(一个类名可能经过混淆的 :class:`urllib.request.OpenerDirector` " +"的实例)。通常一直会用默认的 opener ——通过 ``urlopen`` ——但也可以创建自定义的 opener 。opener 会用到 " +"handler。所有的“繁重工作”都由 handler 完成。每种 handler 知道某种 URL 方案(http、ftp 等)的 URL " +"的打开方式,或是某方面 URL 的打开方式,例如 HTTP 重定向或 HTTP cookie。 " + +#: ../../howto/urllib2.rst:430 +msgid "" +"You will want to create openers if you want to fetch URLs with specific " +"handlers installed, for example to get an opener that handles cookies, or to" +" get an opener that does not handle redirections." +msgstr "" +"若要用已安装的某个 handler 获取 URL,需要创建一个 opener 对象,例如处理 cookie 的 opener,或对重定向不做处理的 " +"opener。" + +#: ../../howto/urllib2.rst:434 +msgid "" +"To create an opener, instantiate an ``OpenerDirector``, and then call " +"``.add_handler(some_handler_instance)`` repeatedly." +msgstr "" +"若要创建 opener,请实例化一个 ``OpenerDirector`` ,然后重复调用 " +"``.add_handler(some_handler_instance)`` 。 " + +#: ../../howto/urllib2.rst:437 +msgid "" +"Alternatively, you can use ``build_opener``, which is a convenience function" +" for creating opener objects with a single function call. ``build_opener`` " +"adds several handlers by default, but provides a quick way to add more " +"and/or override the default handlers." +msgstr "" +"或者也可以用 ``build_opener`` ,这是个用单次调用创建 opener 对象的便捷函数。``build_opener`` 默认会添加几个" +" handler,不过还提供了一种快速添加和/或覆盖默认 handler 的方法。" + +#: ../../howto/urllib2.rst:442 +msgid "" +"Other sorts of handlers you might want to can handle proxies, " +"authentication, and other common but slightly specialised situations." +msgstr "可能还需要其他类型的 handler,以便处理代理、身份认证和其他常见但稍微特殊的情况。" + +#: ../../howto/urllib2.rst:445 +msgid "" +"``install_opener`` can be used to make an ``opener`` object the (global) " +"default opener. This means that calls to ``urlopen`` will use the opener you" +" have installed." +msgstr "" +"``install_opener`` 可用于让 ``opener`` 对象成为(全局)默认 opener。这意味着调用 ``urlopen`` " +"时会采用已安装的 opener。 " + +#: ../../howto/urllib2.rst:449 +msgid "" +"Opener objects have an ``open`` method, which can be called directly to " +"fetch urls in the same way as the ``urlopen`` function: there's no need to " +"call ``install_opener``, except as a convenience." +msgstr "" +"opener 对象带有一个 ```open`` 方法,可供直接调用以获取 url,方式与 ``urlopen`` " +"函数相同。除非是为了调用方便,否则没必要去调用 ``install_opener`` 。" + +#: ../../howto/urllib2.rst:455 +msgid "Basic Authentication" +msgstr "基本认证" + +#: ../../howto/urllib2.rst:457 +msgid "" +"To illustrate creating and installing a handler we will use the " +"``HTTPBasicAuthHandler``. For a more detailed discussion of this subject -- " +"including an explanation of how Basic Authentication works - see the `Basic " +"Authentication Tutorial " +"`_." +msgstr "" +"为了说明 handler 的创建和安装过程,会用到 ``HTTPBasicAuthHandler`` " +"。有关该主题的更详细的介绍——包括基本身份认证的工作原理——请参阅 `Basic Authentication Tutorial " +"`_ 。" + +#: ../../howto/urllib2.rst:463 +msgid "" +"When authentication is required, the server sends a header (as well as the " +"401 error code) requesting authentication. This specifies the " +"authentication scheme and a 'realm'. The header looks like: ``WWW-" +"Authenticate: SCHEME realm=\"REALM\"``." +msgstr "" +"如果需要身份认证,服务器会发送一条请求身份认证的头部信息(以及 401 " +"错误代码)。这条信息中指明了身份认证方式和“安全区域(realm)”。格式如下所示:``WWW-Authenticate: SCHEME " +"realm=\"REALM\"`` 。 " + +#: ../../howto/urllib2.rst:468 +msgid "e.g." +msgstr "例如" + +#: ../../howto/urllib2.rst:475 +msgid "" +"The client should then retry the request with the appropriate name and " +"password for the realm included as a header in the request. This is 'basic " +"authentication'. In order to simplify this process we can create an instance" +" of ``HTTPBasicAuthHandler`` and an opener to use this handler." +msgstr "" +"然后,客户端应重试发起请求,请求数据中的头部信息应包含安全区域对应的用户名和密码。这就是“基本身份认证”。为了简化此过程,可以创建 " +"``HTTPBasicAuthHandler`` 的一个实例及使用它的 opener。" + +#: ../../howto/urllib2.rst:480 +msgid "" +"The ``HTTPBasicAuthHandler`` uses an object called a password manager to " +"handle the mapping of URLs and realms to passwords and usernames. If you " +"know what the realm is (from the authentication header sent by the server), " +"then you can use a ``HTTPPasswordMgr``. Frequently one doesn't care what the" +" realm is. In that case, it is convenient to use " +"``HTTPPasswordMgrWithDefaultRealm``. This allows you to specify a default " +"username and password for a URL. This will be supplied in the absence of you" +" providing an alternative combination for a specific realm. We indicate this" +" by providing ``None`` as the realm argument to the ``add_password`` method." +msgstr "" +"``HTTPBasicAuthHandler`` 用一个名为密码管理器的对象来管理 " +"URL、安全区域与密码、用户名之间的映射关系。如果知道确切的安全区域(来自服务器发送的身份认证头部信息),那就可以用到 " +"``HTTPPasswordMgr`` 。通常人们并不关心安全区域是什么,这时用``HTTPPasswordMgrWithDefaultRealm`` " +"就很方便,允许为 URL 指定默认的用户名和密码。当没有为某个安全区域提供用户名和密码时,就会用到默认值。下面用 ``None`` 作为 " +"``add_password`` 方法的安全区域参数,表明采用默认用户名和密码。" + +#: ../../howto/urllib2.rst:490 +msgid "" +"The top-level URL is the first URL that requires authentication. URLs " +"\"deeper\" than the URL you pass to .add_password() will also match. ::" +msgstr "首先需要身份认证的是顶级 URL。比传给 .add_password() 的 URL 级别“更深”的 URL 也会得以匹配:" + +#: ../../howto/urllib2.rst:515 +msgid "" +"In the above example we only supplied our ``HTTPBasicAuthHandler`` to " +"``build_opener``. By default openers have the handlers for normal situations" +" -- ``ProxyHandler`` (if a proxy setting such as an :envvar:`http_proxy` " +"environment variable is set), ``UnknownHandler``, ``HTTPHandler``, " +"``HTTPDefaultErrorHandler``, ``HTTPRedirectHandler``, ``FTPHandler``, " +"``FileHandler``, ``DataHandler``, ``HTTPErrorProcessor``." +msgstr "" +"在以上例子中,只向 ``build_opener`` 给出了 ``HTTPBasicAuthHandler`` 。默认情况下,opener " +"会有用于处理常见状况的 handler ——``ProxyHandler`` (如果设置代理的话,比如设置了环境变量 " +":envvar:`http_proxy` ),``UnknownHandler`` 、``HTTPHandler`` 、 " +"``HTTPDefaultErrorHandler`` 、 ``HTTPRedirectHandler`` 、 ``FTPHandler`` 、 " +"``FileHandler`` 、 ``DataHandler`` 、 ``HTTPErrorProcessor`` 。" + +#: ../../howto/urllib2.rst:522 +msgid "" +"``top_level_url`` is in fact *either* a full URL (including the 'http:' " +"scheme component and the hostname and optionally the port number) e.g. " +"``\"http://example.com/\"`` *or* an \"authority\" (i.e. the hostname, " +"optionally including the port number) e.g. ``\"example.com\"`` or " +"``\"example.com:8080\"`` (the latter example includes a port number). The " +"authority, if present, must NOT contain the \"userinfo\" component - for " +"example ``\"joe:password@example.com\"`` is not correct." +msgstr "" +"``top_level_url`` 其实 *要么* 是一条完整的 URL(包括 “http:” 部分和主机名及可选的端口号),比如 " +"``\"http://example.com/\"`` , *要么* 是一条“访问权限”(即主机名,及可选的端口号),比如 " +"``\"example.com\"`` 或 ``\"example.com:8080\"`` (后一个示例包含了端口号)。访问权限 **不得** " +"包含“用户信息”部分——比如 ``\"joe:password@example.com\"`` 就不正确。 " + +#: ../../howto/urllib2.rst:532 +msgid "Proxies" +msgstr "代理" + +#: ../../howto/urllib2.rst:534 +msgid "" +"**urllib** will auto-detect your proxy settings and use those. This is " +"through the ``ProxyHandler``, which is part of the normal handler chain when" +" a proxy setting is detected. Normally that's a good thing, but there are " +"occasions when it may not be helpful [#]_. One way to do this is to setup " +"our own ``ProxyHandler``, with no proxies defined. This is done using " +"similar steps to setting up a `Basic Authentication`_ handler: ::" +msgstr "" +"**urllib** 将自动检测并使用代理设置。 这是通过 ``ProxyHandler`` 实现的,当检测到代理设置时,是正常 handler " +"链中的一部分。通常这是一件好事,但有时也可能会无效 [#]_。 一种方案是配置自己的 ``ProxyHandler`` ,不要定义代理。 设置的步骤与 " +"`Basic Authentication`_ handler 类似: ::" + +#: ../../howto/urllib2.rst:547 +msgid "" +"Currently ``urllib.request`` *does not* support fetching of ``https`` " +"locations through a proxy. However, this can be enabled by extending " +"urllib.request as shown in the recipe [#]_." +msgstr "" +"目前 ``urllib.request`` *尚不* 支持通过代理抓取 ``https`` 链接地址。 但此功能可以通过扩展 " +"urllib.request 来启用,如以下例程所示 [#]_。" + +#: ../../howto/urllib2.rst:553 +msgid "" +"``HTTP_PROXY`` will be ignored if a variable ``REQUEST_METHOD`` is set; see " +"the documentation on :func:`~urllib.request.getproxies`." +msgstr "" +"如果设置了 ``REQUEST_METHOD`` 变量,则会忽略 ``HTTP_PROXY`` ;参阅 " +":func:`~urllib.request.getproxies` 文档。" + +#: ../../howto/urllib2.rst:558 +msgid "Sockets and Layers" +msgstr "套接字与分层" + +#: ../../howto/urllib2.rst:560 +msgid "" +"The Python support for fetching resources from the web is layered. urllib " +"uses the :mod:`http.client` library, which in turn uses the socket library." +msgstr "Python 获取 Web 资源的能力是分层的。urllib 用到的是 :mod:`http.client` 库,而后者又用到了套接字库。" + +#: ../../howto/urllib2.rst:563 +msgid "" +"As of Python 2.3 you can specify how long a socket should wait for a " +"response before timing out. This can be useful in applications which have to" +" fetch web pages. By default the socket module has *no timeout* and can " +"hang. Currently, the socket timeout is not exposed at the http.client or " +"urllib.request levels. However, you can set the default timeout globally for" +" all sockets using ::" +msgstr "" +"从 Python 2.3 开始,可以指定套接字等待响应的超时时间。这对必须要读到网页数据的应用程序会很有用。默认情况下,套接字模块 *不会超时* " +"并且可以挂起。目前,套接字超时机制未暴露给 http.client 或 urllib.request " +"层使用。不过可以为所有套接字应用设置默认的全局超时。" + +#: ../../howto/urllib2.rst:586 +msgid "Footnotes" +msgstr "脚注" + +#: ../../howto/urllib2.rst:588 +msgid "This document was reviewed and revised by John Lee." +msgstr "这篇文档由 John Lee 审订。" + +#: ../../howto/urllib2.rst:590 +msgid "Google for example." +msgstr "例如 Google。" + +#: ../../howto/urllib2.rst:591 +msgid "" +"Browser sniffing is a very bad practice for website design - building sites " +"using web standards is much more sensible. Unfortunately a lot of sites " +"still send different versions to different browsers." +msgstr "" +"对于网站设计而言,探测不同的浏览器是非常糟糕的做法——更为明智的做法是采用 web " +"标准构建网站。不幸的是,很多网站依然向不同的浏览器发送不同版本的网页。" + +#: ../../howto/urllib2.rst:594 +msgid "" +"The user agent for MSIE 6 is *'Mozilla/4.0 (compatible; MSIE 6.0; Windows NT" +" 5.1; SV1; .NET CLR 1.1.4322)'*" +msgstr "" +"MSIE 6 的 user-agent 信息是 *“Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1;" +" SV1; .NET CLR 1.1.4322)”*" + +#: ../../howto/urllib2.rst:596 +msgid "" +"For details of more HTTP request headers, see `Quick Reference to HTTP " +"Headers`_." +msgstr "有关 HTTP 请求的头部信息,详情请参阅 `Quick Reference to HTTP Headers`_。" + +#: ../../howto/urllib2.rst:598 +msgid "" +"In my case I have to use a proxy to access the internet at work. If you " +"attempt to fetch *localhost* URLs through this proxy it blocks them. IE is " +"set to use the proxy, which urllib picks up on. In order to test scripts " +"with a localhost server, I have to prevent urllib from using the proxy." +msgstr "" +"本人必须使用代理才能在工作中访问互联网。如果尝试通过代理获取 *localhost* URL,将会遭到阻止。IE 设置为代理模式,urllib " +"就会获取到配置信息。为了用 localhost 服务器测试脚本,我必须阻止 urllib 使用代理。" + +#: ../../howto/urllib2.rst:603 +msgid "" +"urllib opener for SSL proxy (CONNECT method): `ASPN Cookbook Recipe " +"`_." +msgstr "" +"urllib 的 SSL 代理 opener(CONNECT  方法): `ASPN Cookbook Recipe " +"`_ 。" diff --git a/install/index.po b/install/index.po new file mode 100644 index 000000000..c02ae1c65 --- /dev/null +++ b/install/index.po @@ -0,0 +1,1515 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) 2001-2024, Python Software Foundation +# This file is distributed under the same license as the Python package. +# FIRST AUTHOR , YEAR. +# +# Translators: +# Fei Yin , 2018 +# ww song , 2018 +# 叶浚安 , 2019 +# Alpha Du , 2019 +# ppcfish , 2019 +# Vincent , 2020 +# Edward Ji , 2021 +# Trim21 , 2021 +# Yifan Sun, 2022 +# Freesand Leo , 2023 +# Rafael Fontenelle , 2024 +# +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: Python 3.9\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2024-05-31 16:34+0000\n" +"PO-Revision-Date: 2017-02-16 17:46+0000\n" +"Last-Translator: Rafael Fontenelle , 2024\n" +"Language-Team: Chinese (China) (https://app.transifex.com/python-doc/teams/5390/zh_CN/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: zh_CN\n" +"Plural-Forms: nplurals=1; plural=0;\n" + +#: ../../install/index.rst:7 +msgid "Installing Python Modules (Legacy version)" +msgstr "安装Python模块(旧版)" + +#: ../../install/index.rst:0 +msgid "Author" +msgstr "作者" + +#: ../../install/index.rst:9 +msgid "Greg Ward" +msgstr "Greg Ward" + +#: ../../install/index.rst:16 +msgid ":ref:`installing-index`" +msgstr ":ref:`installing-index`" + +#: ../../install/index.rst:16 +msgid "" +"The up to date module installation documentation. For regular Python usage, " +"you almost certainly want that document rather than this one." +msgstr "最新的模块安装文档。对于常规Python使用,你几乎肯定像使用该文档而非这个。" + +#: ../../distutils/_setuptools_disclaimer.rst:3 +msgid "" +"This document is being retained solely until the ``setuptools`` " +"documentation at https://setuptools.readthedocs.io/en/latest/setuptools.html" +" independently covers all of the relevant information currently included " +"here." +msgstr "" +"这篇文档是历史遗留文档,在 https://setuptools.readthedocs.io/en/latest/setuptools.html 上的" +" ``setuptools`` 文档独立涵盖此处包含的所有相关信息之后,将不再单独作为正式文档保留。" + +#: ../../install/index.rst:23 +msgid "" +"This guide only covers the basic tools for building and distributing " +"extensions that are provided as part of this version of Python. Third party " +"tools offer easier to use and more secure alternatives. Refer to the `quick " +"recommendations section `__ in the Python Packaging User Guide for more " +"information." +msgstr "" +"本指南仅介绍构建和分发扩展的基本工具,这些扩展是作为此Python版本的一部分提供的。 第三方工具提供更易于使用和更安全的替代方案。有关详细信息,请参阅" +" Python 打包用户指南中的 `快速推荐部分 `__ 。" + +#: ../../install/index.rst:34 +msgid "Introduction" +msgstr "概述" + +#: ../../install/index.rst:36 +msgid "" +"In Python 2.0, the ``distutils`` API was first added to the standard " +"library. This provided Linux distro maintainers with a standard way of " +"converting Python projects into Linux distro packages, and system " +"administrators with a standard way of installing them directly onto target " +"systems." +msgstr "" +"在Python 2.0中,``distutils`` API " +"首次被添加到标准库中。这向Linux发行版维护者提供了一个将Python项目转换为发行版软件包的标准方法,以及向系统管理员们提供了直接将这些软件包安装到目标系统的标准方法。" + +#: ../../install/index.rst:41 +msgid "" +"In the many years since Python 2.0 was released, tightly coupling the build " +"system and package installer to the language runtime release cycle has " +"turned out to be problematic, and it is now recommended that projects use " +"the ``pip`` package installer and the ``setuptools`` build system, rather " +"than using ``distutils`` directly." +msgstr "" +"自从很多年前 Python 2.0 发布,将构建系统和包安装器与语言运行时的释放循环紧密连接在一起产生了很多问题。现在推荐做法是在项目中使用 " +"``pip`` 包安装器和 ``setuptools`` 构建系统,而不是直接使用 ``distutils``。" + +#: ../../install/index.rst:47 +msgid "" +"See :ref:`installing-index` and :ref:`distributing-index` for more details." +msgstr "请参阅 :ref:`installing-index` 和 :ref:`distributing-index` 了解更多细节。" + +#: ../../install/index.rst:49 +msgid "" +"This legacy documentation is being retained only until we're confident that " +"the ``setuptools`` documentation covers everything needed." +msgstr "这个旧文档将被保留,至到我们相信 ``setuptools`` 覆盖了所有内容。" + +#: ../../install/index.rst:55 +msgid "Distutils based source distributions" +msgstr "基于 ``distutils`` 的源代码分发" + +#: ../../install/index.rst:57 +msgid "" +"If you download a module source distribution, you can tell pretty quickly if" +" it was packaged and distributed in the standard way, i.e. using the " +"Distutils. First, the distribution's name and version number will be " +"featured prominently in the name of the downloaded archive, e.g. " +":file:`foo-1.0.tar.gz` or :file:`widget-0.9.7.zip`. Next, the archive will " +"unpack into a similarly-named directory: :file:`foo-1.0` or " +":file:`widget-0.9.7`. Additionally, the distribution will contain a setup " +"script :file:`setup.py`, and a file named :file:`README.txt` or possibly " +"just :file:`README`, which should explain that building and installing the " +"module distribution is a simple matter of running one command from a " +"terminal::" +msgstr "" + +#: ../../install/index.rst:70 +msgid "" +"For Windows, this command should be run from a command prompt window " +"(:menuselection:`Start --> Accessories`)::" +msgstr "Windows 用户应该使用命令提示符来运行命令(:menuselection:`Start --> Accessories`)::" + +#: ../../install/index.rst:75 +msgid "" +"If all these things are true, then you already know how to build and install" +" the modules you've just downloaded: Run the command above. Unless you need" +" to install things in a non-standard way or customize the build process, you" +" don't really need this manual. Or rather, the above command is everything " +"you need to get out of this manual." +msgstr "" +"如果这些事情都属实,那么您已经了解了如何构建和安装您已经下载的模块:只需运行如上的命令。除非您需要以非常规方式安装或者定制构建过程,您其实不需要本文档。更进一步说,以上命令就是您可以从文档中获得的全部。" + +#: ../../install/index.rst:85 +msgid "Standard Build and Install" +msgstr "标准构建及安装" + +#: ../../install/index.rst:87 +msgid "" +"As described in section :ref:`inst-new-standard`, building and installing a " +"module distribution using the Distutils is usually one simple command to run" +" from a terminal::" +msgstr "" +"正如 :ref:`inst-new-standard` 中所描述的那样,通过 Distutils " +"构建和安装发行的模块常常只需要在终端执行一个简单的命令。" + +#: ../../install/index.rst:97 +msgid "Platform variations" +msgstr "平台差异" + +#: ../../install/index.rst:99 +msgid "" +"You should always run the setup command from the distribution root " +"directory, i.e. the top-level subdirectory that the module source " +"distribution unpacks into. For example, if you've just downloaded a module " +"source distribution :file:`foo-1.0.tar.gz` onto a Unix system, the normal " +"thing to do is::" +msgstr "" +"您应当总是在分发文件的根目录处运行设置的命令,比如,模块分发的源代码最高的子目录。例如,如果您刚刚在 Unix " +"操作系统上下载了一个模块分发的源代码,您需要做的事:" + +#: ../../install/index.rst:108 +msgid "" +"On Windows, you'd probably download :file:`foo-1.0.zip`. If you downloaded " +"the archive file to :file:`C:\\\\Temp`, then it would unpack into " +":file:`C:\\\\Temp\\\\foo-1.0`; you can use either an archive manipulator " +"with a graphical user interface (such as WinZip) or a command-line tool " +"(such as :program:`unzip` or :program:`pkunzip`) to unpack the archive. " +"Then, open a command prompt window and run::" +msgstr "" +"在 Windows 上,你下载到的可能是 :file:`foo-1.0.zip`。 如果你将归档文件下载到 " +":file:`C:\\\\Temp`,则它将被解包至 " +":file:`C:\\\\Temp\\\\foo-1.0`;你可以使用带有图形用户界面的归档管理器(如 WinZip)或命令行工具(如 " +":program:`unzip` 或 :program:`pkunzip` 等)来解包归档文件。 然后,打开一个命令行提示符窗口并运行::" + +#: ../../install/index.rst:122 +msgid "Splitting the job up" +msgstr "拆分任务" + +#: ../../install/index.rst:124 +msgid "" +"Running ``setup.py install`` builds and installs all modules in one run. If" +" you prefer to work incrementally---especially useful if you want to " +"customize the build process, or if things are going wrong---you can use the " +"setup script to do one thing at a time. This is particularly helpful when " +"the build and install will be done by different users---for example, you " +"might want to build a module distribution and hand it off to a system " +"administrator for installation (or do it yourself, with super-user " +"privileges)." +msgstr "" + +#: ../../install/index.rst:132 +msgid "" +"For example, you can build everything in one step, and then install " +"everything in a second step, by invoking the setup script twice::" +msgstr "" + +#: ../../install/index.rst:138 +msgid "" +"If you do this, you will notice that running the :command:`install` command " +"first runs the :command:`build` command, which---in this case---quickly " +"notices that it has nothing to do, since everything in the :file:`build` " +"directory is up-to-date." +msgstr "" + +#: ../../install/index.rst:143 +msgid "" +"You may not need this ability to break things down often if all you do is " +"install modules downloaded off the 'net, but it's very handy for more " +"advanced tasks. If you get into distributing your own Python modules and " +"extensions, you'll run lots of individual Distutils commands on their own." +msgstr "" + +#: ../../install/index.rst:152 +msgid "How building works" +msgstr "" + +#: ../../install/index.rst:154 +msgid "" +"As implied above, the :command:`build` command is responsible for putting " +"the files to install into a *build directory*. By default, this is " +":file:`build` under the distribution root; if you're excessively concerned " +"with speed, or want to keep the source tree pristine, you can change the " +"build directory with the :option:`!--build-base` option. For example::" +msgstr "" + +#: ../../install/index.rst:162 +msgid "" +"(Or you could do this permanently with a directive in your system or " +"personal Distutils configuration file; see section :ref:`inst-config-" +"files`.) Normally, this isn't necessary." +msgstr "" + +#: ../../install/index.rst:166 +msgid "The default layout for the build tree is as follows::" +msgstr "" + +#: ../../install/index.rst:173 +msgid "" +"where ```` expands to a brief description of the current OS/hardware " +"platform and Python version. The first form, with just a :file:`lib` " +"directory, is used for \"pure module distributions\"---that is, module " +"distributions that include only pure Python modules. If a module " +"distribution contains any extensions (modules written in C/C++), then the " +"second form, with two ```` directories, is used. In that case, the " +":file:`temp.{plat}` directory holds temporary files generated by the " +"compile/link process that don't actually get installed. In either case, the" +" :file:`lib` (or :file:`lib.{plat}`) directory contains all Python modules " +"(pure Python and extensions) that will be installed." +msgstr "" + +#: ../../install/index.rst:183 +msgid "" +"In the future, more directories will be added to handle Python scripts, " +"documentation, binary executables, and whatever else is needed to handle the" +" job of installing Python modules and applications." +msgstr "" + +#: ../../install/index.rst:191 +msgid "How installation works" +msgstr "" + +#: ../../install/index.rst:193 +msgid "" +"After the :command:`build` command runs (whether you run it explicitly, or " +"the :command:`install` command does it for you), the work of the " +":command:`install` command is relatively simple: all it has to do is copy " +"everything under :file:`build/lib` (or :file:`build/lib.{plat}`) to your " +"chosen installation directory." +msgstr "" + +#: ../../install/index.rst:199 +msgid "" +"If you don't choose an installation directory---i.e., if you just run " +"``setup.py install``\\ ---then the :command:`install` command installs to " +"the standard location for third-party Python modules. This location varies " +"by platform and by how you built/installed Python itself. On Unix (and " +"macOS, which is also Unix-based), it also depends on whether the module " +"distribution being installed is pure Python or contains extensions (\"non-" +"pure\"):" +msgstr "" + +#: ../../install/index.rst:209 +msgid "Platform" +msgstr "平台" + +#: ../../install/index.rst:209 +msgid "Standard installation location" +msgstr "标准安装位置" + +#: ../../install/index.rst:209 +msgid "Default value" +msgstr "默认值" + +#: ../../install/index.rst:209 ../../install/index.rst:735 +#: ../../install/index.rst:747 +msgid "Notes" +msgstr "备注" + +#: ../../install/index.rst:211 +msgid "Unix (pure)" +msgstr "(单一)Unix" + +#: ../../install/index.rst:211 ../../install/index.rst:424 +msgid ":file:`{prefix}/lib/python{X.Y}/site-packages`" +msgstr ":file:`{prefix}/lib/python{X.Y}/site-packages`" + +#: ../../install/index.rst:211 ../../install/index.rst:213 +msgid ":file:`/usr/local/lib/python{X.Y}/site-packages`" +msgstr ":file:`/usr/local/lib/python{X.Y}/site-packages`" + +#: ../../install/index.rst:211 ../../install/index.rst:213 +#: ../../install/index.rst:737 +msgid "\\(1)" +msgstr "\\(1)" + +#: ../../install/index.rst:213 +msgid "Unix (non-pure)" +msgstr "(类)Unix" + +#: ../../install/index.rst:213 ../../install/index.rst:425 +msgid ":file:`{exec-prefix}/lib/python{X.Y}/site-packages`" +msgstr ":file:`{exec-prefix}/lib/python{X.Y}/site-packages`" + +#: ../../install/index.rst:215 +msgid "Windows" +msgstr "Windows" + +#: ../../install/index.rst:215 ../../install/index.rst:476 +msgid ":file:`{prefix}\\\\Lib\\\\site-packages`" +msgstr ":file:`{prefix}\\\\Lib\\\\site-packages`" + +#: ../../install/index.rst:215 +msgid ":file:`C:\\\\Python{XY}\\\\Lib\\\\site-packages`" +msgstr ":file:`C:\\\\Python{XY}\\\\Lib\\\\site-packages`" + +#: ../../install/index.rst:215 ../../install/index.rst:739 +msgid "\\(2)" +msgstr "\\(2)" + +#: ../../install/index.rst:218 ../../install/index.rst:759 +msgid "Notes:" +msgstr "注释:" + +#: ../../install/index.rst:221 +msgid "" +"Most Linux distributions include Python as a standard part of the system, so" +" :file:`{prefix}` and :file:`{exec-prefix}` are usually both :file:`/usr` on" +" Linux. If you build Python yourself on Linux (or any Unix-like system), " +"the default :file:`{prefix}` and :file:`{exec-prefix}` are " +":file:`/usr/local`." +msgstr "" + +#: ../../install/index.rst:227 +msgid "" +"The default installation directory on Windows was :file:`C:\\\\Program " +"Files\\\\Python` under Python 1.6a1, 1.5.2, and earlier." +msgstr "" + +#: ../../install/index.rst:230 +msgid "" +":file:`{prefix}` and :file:`{exec-prefix}` stand for the directories that " +"Python is installed to, and where it finds its libraries at run-time. They " +"are always the same under Windows, and very often the same under Unix and " +"macOS. You can find out what your Python installation uses for " +":file:`{prefix}` and :file:`{exec-prefix}` by running Python in interactive " +"mode and typing a few simple commands. Under Unix, just type ``python`` at " +"the shell prompt. Under Windows, choose :menuselection:`Start --> Programs " +"--> Python X.Y --> Python (command line)`. Once the interpreter is " +"started, you type Python code at the prompt. For example, on my Linux " +"system, I type the three Python statements shown below, and get the output " +"as shown, to find out my :file:`{prefix}` and :file:`{exec-prefix}`:" +msgstr "" + +#: ../../install/index.rst:252 +msgid "" +"A few other placeholders are used in this document: :file:`{X.Y}` stands for" +" the version of Python, for example ``3.2``; :file:`{abiflags}` will be " +"replaced by the value of :data:`sys.abiflags` or the empty string for " +"platforms which don't define ABI flags; :file:`{distname}` will be replaced " +"by the name of the module distribution being installed. Dots and " +"capitalization are important in the paths; for example, a value that uses " +"``python3.2`` on UNIX will typically use ``Python32`` on Windows." +msgstr "" + +#: ../../install/index.rst:260 +msgid "" +"If you don't want to install modules to the standard location, or if you " +"don't have permission to write there, then you need to read about alternate " +"installations in section :ref:`inst-alt-install`. If you want to customize " +"your installation directories more heavily, see section :ref:`inst-custom-" +"install` on custom installations." +msgstr "" + +#: ../../install/index.rst:270 +msgid "Alternate Installation" +msgstr "可选安装形式" + +#: ../../install/index.rst:272 +msgid "" +"Often, it is necessary or desirable to install modules to a location other " +"than the standard location for third-party Python modules. For example, on " +"a Unix system you might not have permission to write to the standard third-" +"party module directory. Or you might wish to try out a module before making" +" it a standard part of your local Python installation. This is especially " +"true when upgrading a distribution already present: you want to make sure " +"your existing base of scripts still works with the new version before " +"actually upgrading." +msgstr "" + +#: ../../install/index.rst:280 +msgid "" +"The Distutils :command:`install` command is designed to make installing " +"module distributions to an alternate location simple and painless. The " +"basic idea is that you supply a base directory for the installation, and the" +" :command:`install` command picks a set of directories (called an " +"*installation scheme*) under this base directory in which to install files." +" The details differ across platforms, so read whichever of the following " +"sections applies to you." +msgstr "" + +#: ../../install/index.rst:288 +msgid "" +"Note that the various alternate installation schemes are mutually exclusive:" +" you can pass ``--user``, or ``--home``, or ``--prefix`` and ``--exec-" +"prefix``, or ``--install-base`` and ``--install-platbase``, but you can't " +"mix from these groups." +msgstr "" + +#: ../../install/index.rst:297 +msgid "Alternate installation: the user scheme" +msgstr "可选安装形式:用户方案" + +#: ../../install/index.rst:299 +msgid "" +"This scheme is designed to be the most convenient solution for users that " +"don't have write permission to the global site-packages directory or don't " +"want to install into it. It is enabled with a simple option::" +msgstr "" +"此方案被设计为针对没有全局 site-packages 目录写入权限或不想安装到该目录的用户的最便捷解决方案。 它可以通过一个简单的选项来启用::" + +#: ../../install/index.rst:305 +msgid "" +"Files will be installed into subdirectories of :data:`site.USER_BASE` " +"(written as :file:`{userbase}` hereafter). This scheme installs pure Python" +" modules and extension modules in the same location (also known as " +":data:`site.USER_SITE`). Here are the values for UNIX, including macOS:" +msgstr "" + +#: ../../install/index.rst:311 ../../install/index.rst:322 +#: ../../install/index.rst:373 ../../install/index.rst:422 +#: ../../install/index.rst:474 ../../install/index.rst:499 +#: ../../install/index.rst:735 ../../install/index.rst:747 +msgid "Type of file" +msgstr "文件类型" + +#: ../../install/index.rst:311 ../../install/index.rst:322 +#: ../../install/index.rst:373 ../../install/index.rst:422 +#: ../../install/index.rst:474 +msgid "Installation directory" +msgstr "安装目录" + +#: ../../install/index.rst:313 ../../install/index.rst:324 +#: ../../install/index.rst:375 ../../install/index.rst:476 +msgid "modules" +msgstr "模块" + +#: ../../install/index.rst:313 +msgid ":file:`{userbase}/lib/python{X.Y}/site-packages`" +msgstr ":file:`{userbase}/lib/python{X.Y}/site-packages`" + +#: ../../install/index.rst:314 ../../install/index.rst:325 +#: ../../install/index.rst:376 ../../install/index.rst:426 +#: ../../install/index.rst:477 ../../install/index.rst:504 +msgid "scripts" +msgstr "脚本" + +#: ../../install/index.rst:314 +msgid ":file:`{userbase}/bin`" +msgstr ":file:`{userbase}/bin`" + +#: ../../install/index.rst:315 ../../install/index.rst:326 +#: ../../install/index.rst:377 ../../install/index.rst:427 +#: ../../install/index.rst:478 ../../install/index.rst:505 +msgid "data" +msgstr "数据" + +#: ../../install/index.rst:315 ../../install/index.rst:326 +msgid ":file:`{userbase}`" +msgstr ":file:`{userbase}`" + +#: ../../install/index.rst:316 ../../install/index.rst:327 +#: ../../install/index.rst:378 ../../install/index.rst:428 +#: ../../install/index.rst:479 ../../install/index.rst:506 +msgid "C headers" +msgstr "C 头文件" + +#: ../../install/index.rst:316 +msgid ":file:`{userbase}/include/python{X.Y}{abiflags}/{distname}`" +msgstr ":file:`{userbase}/include/python{X.Y}{abiflags}/{distname}`" + +#: ../../install/index.rst:319 +msgid "And here are the values used on Windows:" +msgstr "以下是Windows上使用的值:" + +#: ../../install/index.rst:324 +msgid ":file:`{userbase}\\\\Python{XY}\\\\site-packages`" +msgstr ":file:`{userbase}\\\\Python{XY}\\\\site-packages`" + +#: ../../install/index.rst:325 +msgid ":file:`{userbase}\\\\Python{XY}\\\\Scripts`" +msgstr ":file:`{userbase}\\\\Python{XY}\\\\Scripts`" + +#: ../../install/index.rst:327 +msgid ":file:`{userbase}\\\\Python{XY}\\\\Include\\\\{distname}`" +msgstr ":file:`{userbase}\\\\Python{XY}\\\\Include\\\\{distname}`" + +#: ../../install/index.rst:330 +msgid "" +"The advantage of using this scheme compared to the other ones described " +"below is that the user site-packages directory is under normal conditions " +"always included in :data:`sys.path` (see :mod:`site` for more information), " +"which means that there is no additional step to perform after running the " +":file:`setup.py` script to finalize the installation." +msgstr "" + +#: ../../install/index.rst:336 +msgid "" +"The :command:`build_ext` command also has a ``--user`` option to add " +":file:`{userbase}/include` to the compiler search path for header files and " +":file:`{userbase}/lib` to the compiler search path for libraries as well as " +"to the runtime search path for shared C libraries (rpath)." +msgstr "" + +#: ../../install/index.rst:345 +msgid "Alternate installation: the home scheme" +msgstr "可选安装形式:家目录方案" + +#: ../../install/index.rst:347 +msgid "" +"The idea behind the \"home scheme\" is that you build and maintain a " +"personal stash of Python modules. This scheme's name is derived from the " +"idea of a \"home\" directory on Unix, since it's not unusual for a Unix user" +" to make their home directory have a layout similar to :file:`/usr/` or " +":file:`/usr/local/`. This scheme can be used by anyone, regardless of the " +"operating system they are installing for." +msgstr "" +"“主方案”背后的理念是你可以构建并维护个人的 Python 模块集。 该方案的名称源自 Unix 上“主目录”的概念,因为通常 Unix " +"用户会将其主目录的布局设置为与 :file:`/usr/` 或 :file:`/usr/local/` 相似。 " +"任何人都可以使用该方案,无论其安装的操作系统是什么。" + +#: ../../install/index.rst:354 +msgid "Installing a new module distribution is as simple as ::" +msgstr "" + +#: ../../install/index.rst:358 +msgid "" +"where you can supply any directory you like for the :option:`!--home` " +"option. On Unix, lazy typists can just type a tilde (``~``); the " +":command:`install` command will expand this to your home directory::" +msgstr "" + +#: ../../install/index.rst:364 +msgid "" +"To make Python find the distributions installed with this scheme, you may " +"have to :ref:`modify Python's search path ` or edit " +":mod:`sitecustomize` (see :mod:`site`) to call :func:`site.addsitedir` or " +"edit :data:`sys.path`." +msgstr "" + +#: ../../install/index.rst:369 +msgid "" +"The :option:`!--home` option defines the installation base directory. Files" +" are installed to the following directories under the installation base as " +"follows:" +msgstr "" + +#: ../../install/index.rst:375 +msgid ":file:`{home}/lib/python`" +msgstr ":file:`{home}/lib/python`" + +#: ../../install/index.rst:376 +msgid ":file:`{home}/bin`" +msgstr ":file:`{home}/bin`" + +#: ../../install/index.rst:377 +msgid ":file:`{home}`" +msgstr ":file:`{home}`" + +#: ../../install/index.rst:378 +msgid ":file:`{home}/include/python/{distname}`" +msgstr ":file:`{home}/include/python/{distname}`" + +#: ../../install/index.rst:381 +msgid "(Mentally replace slashes with backslashes if you're on Windows.)" +msgstr "(如果你是使用 Windows 请将斜杠替换为反斜杠。)" + +#: ../../install/index.rst:387 +msgid "Alternate installation: Unix (the prefix scheme)" +msgstr "可选安装形式:Unix(前缀方案)" + +#: ../../install/index.rst:389 +msgid "" +"The \"prefix scheme\" is useful when you wish to use one Python installation" +" to perform the build/install (i.e., to run the setup script), but install " +"modules into the third-party module directory of a different Python " +"installation (or something that looks like a different Python installation)." +" If this sounds a trifle unusual, it is---that's why the user and home " +"schemes come before. However, there are at least two known cases where the " +"prefix scheme will be useful." +msgstr "" +"“前缀方案”适用于当你希望使用一个 Python 安装程序来执行构建/安装(即运行 setup 脚本),但需要将模块安装到另一个 Python " +"安装版(或看起来类似于另一个 Python 安装版)的第三方模块目录中的情况。 如果这听起来有点不寻常,确实如此 --- " +"这就是为什么要先介绍用户和主目录方案的原因。 然而,至少有两种已知的情况会用到前缀方案。" + +#: ../../install/index.rst:396 +msgid "" +"First, consider that many Linux distributions put Python in :file:`/usr`, " +"rather than the more traditional :file:`/usr/local`. This is entirely " +"appropriate, since in those cases Python is part of \"the system\" rather " +"than a local add-on. However, if you are installing Python modules from " +"source, you probably want them to go in :file:`/usr/local/lib/python2.{X}` " +"rather than :file:`/usr/lib/python2.{X}`. This can be done with ::" +msgstr "" + +#: ../../install/index.rst:405 +msgid "" +"Another possibility is a network filesystem where the name used to write to " +"a remote directory is different from the name used to read it: for example, " +"the Python interpreter accessed as :file:`/usr/local/bin/python` might " +"search for modules in :file:`/usr/local/lib/python2.{X}`, but those modules " +"would have to be installed to, say, " +":file:`/mnt/{@server}/export/lib/python2.{X}`. This could be done with ::" +msgstr "" + +#: ../../install/index.rst:414 +msgid "" +"In either case, the :option:`!--prefix` option defines the installation " +"base, and the :option:`!--exec-prefix` option defines the platform-specific " +"installation base, which is used for platform-specific files. (Currently, " +"this just means non-pure module distributions, but could be expanded to C " +"libraries, binary executables, etc.) If :option:`!--exec-prefix` is not " +"supplied, it defaults to :option:`!--prefix`. Files are installed as " +"follows:" +msgstr "" + +#: ../../install/index.rst:424 ../../install/index.rst:501 +msgid "Python modules" +msgstr "Python 模块" + +#: ../../install/index.rst:425 ../../install/index.rst:502 +msgid "extension modules" +msgstr "扩展模块" + +#: ../../install/index.rst:426 +msgid ":file:`{prefix}/bin`" +msgstr ":file:`{prefix}/bin`" + +#: ../../install/index.rst:427 ../../install/index.rst:478 +msgid ":file:`{prefix}`" +msgstr ":file:`{prefix}`" + +#: ../../install/index.rst:428 +msgid ":file:`{prefix}/include/python{X.Y}{abiflags}/{distname}`" +msgstr ":file:`{prefix}/include/python{X.Y}{abiflags}/{distname}`" + +#: ../../install/index.rst:431 +msgid "" +"There is no requirement that :option:`!--prefix` or :option:`!--exec-prefix`" +" actually point to an alternate Python installation; if the directories " +"listed above do not already exist, they are created at installation time." +msgstr "" + +#: ../../install/index.rst:435 +msgid "" +"Incidentally, the real reason the prefix scheme is important is simply that " +"a standard Unix installation uses the prefix scheme, but with :option:`!--" +"prefix` and :option:`!--exec-prefix` supplied by Python itself as " +"``sys.prefix`` and ``sys.exec_prefix``. Thus, you might think you'll never " +"use the prefix scheme, but every time you run ``python setup.py install`` " +"without any other options, you're using it." +msgstr "" + +#: ../../install/index.rst:442 +msgid "" +"Note that installing extensions to an alternate Python installation has no " +"effect on how those extensions are built: in particular, the Python header " +"files (:file:`Python.h` and friends) installed with the Python interpreter " +"used to run the setup script will be used in compiling extensions. It is " +"your responsibility to ensure that the interpreter used to run extensions " +"installed in this way is compatible with the interpreter used to build them." +" The best way to do this is to ensure that the two interpreters are the " +"same version of Python (possibly different builds, or possibly copies of the" +" same build). (Of course, if your :option:`!--prefix` and :option:`!--exec-" +"prefix` don't even point to an alternate Python installation, this is " +"immaterial.)" +msgstr "" + +#: ../../install/index.rst:457 +msgid "Alternate installation: Windows (the prefix scheme)" +msgstr "" + +#: ../../install/index.rst:459 +msgid "" +"Windows has no concept of a user's home directory, and since the standard " +"Python installation under Windows is simpler than under Unix, the :option:`!" +"--prefix` option has traditionally been used to install additional packages " +"in separate locations on Windows. ::" +msgstr "" + +#: ../../install/index.rst:466 +msgid "" +"to install modules to the :file:`\\\\Temp\\\\Python` directory on the " +"current drive." +msgstr "" + +#: ../../install/index.rst:468 +msgid "" +"The installation base is defined by the :option:`!--prefix` option; the " +":option:`!--exec-prefix` option is not supported under Windows, which means " +"that pure Python modules and extension modules are installed into the same " +"location. Files are installed as follows:" +msgstr "" + +#: ../../install/index.rst:477 +msgid ":file:`{prefix}\\\\Scripts`" +msgstr ":file:`{prefix}\\\\Scripts`" + +#: ../../install/index.rst:479 +msgid ":file:`{prefix}\\\\Include\\\\{distname}`" +msgstr ":file:`{prefix}\\\\Include\\\\{distname}`" + +#: ../../install/index.rst:486 +msgid "Custom Installation" +msgstr "自定义安装" + +#: ../../install/index.rst:488 +msgid "" +"Sometimes, the alternate installation schemes described in section " +":ref:`inst-alt-install` just don't do what you want. You might want to " +"tweak just one or two directories while keeping everything under the same " +"base directory, or you might want to completely redefine the installation " +"scheme. In either case, you're creating a *custom installation scheme*." +msgstr "" + +#: ../../install/index.rst:494 +msgid "" +"To create a custom installation scheme, you start with one of the alternate " +"schemes and override some of the installation directories used for the " +"various types of files, using these options:" +msgstr "" + +#: ../../install/index.rst:499 +msgid "Override option" +msgstr "覆盖选项" + +#: ../../install/index.rst:501 +msgid "``--install-purelib``" +msgstr "``--install-purelib``" + +#: ../../install/index.rst:502 +msgid "``--install-platlib``" +msgstr "``--install-platlib``" + +#: ../../install/index.rst:503 +msgid "all modules" +msgstr "所有模块" + +#: ../../install/index.rst:503 +msgid "``--install-lib``" +msgstr "``--install-lib``" + +#: ../../install/index.rst:504 +msgid "``--install-scripts``" +msgstr "``--install-scripts``" + +#: ../../install/index.rst:505 +msgid "``--install-data``" +msgstr "``--install-data``" + +#: ../../install/index.rst:506 +msgid "``--install-headers``" +msgstr "``--install-headers``" + +#: ../../install/index.rst:509 +msgid "" +"These override options can be relative, absolute, or explicitly defined in " +"terms of one of the installation base directories. (There are two " +"installation base directories, and they are normally the same---they only " +"differ when you use the Unix \"prefix scheme\" and supply different " +"``--prefix`` and ``--exec-prefix`` options; using ``--install-lib`` will " +"override values computed or given for ``--install-purelib`` and ``--install-" +"platlib``, and is recommended for schemes that don't make a difference " +"between Python and extension modules.)" +msgstr "" + +#: ../../install/index.rst:518 +msgid "" +"For example, say you're installing a module distribution to your home " +"directory under Unix---but you want scripts to go in :file:`~/scripts` " +"rather than :file:`~/bin`. As you might expect, you can override this " +"directory with the :option:`!--install-scripts` option; in this case, it " +"makes most sense to supply a relative path, which will be interpreted " +"relative to the installation base directory (your home directory, in this " +"case)::" +msgstr "" + +#: ../../install/index.rst:527 +msgid "" +"Another Unix example: suppose your Python installation was built and " +"installed with a prefix of :file:`/usr/local/python`, so under a standard " +"installation scripts will wind up in :file:`/usr/local/python/bin`. If you " +"want them in :file:`/usr/local/bin` instead, you would supply this absolute " +"directory for the :option:`!--install-scripts` option::" +msgstr "" + +#: ../../install/index.rst:535 +msgid "" +"(This performs an installation using the \"prefix scheme\", where the prefix" +" is whatever your Python interpreter was installed with--- " +":file:`/usr/local/python` in this case.)" +msgstr "" + +#: ../../install/index.rst:539 +msgid "" +"If you maintain Python on Windows, you might want third-party modules to " +"live in a subdirectory of :file:`{prefix}`, rather than right in " +":file:`{prefix}` itself. This is almost as easy as customizing the script " +"installation directory---you just have to remember that there are two types " +"of modules to worry about, Python and extension modules, which can " +"conveniently be both controlled by one option::" +msgstr "" + +#: ../../install/index.rst:548 +msgid "" +"The specified installation directory is relative to :file:`{prefix}`. Of " +"course, you also have to ensure that this directory is in Python's module " +"search path, such as by putting a :file:`.pth` file in a site directory (see" +" :mod:`site`). See section :ref:`inst-search-path` to find out how to " +"modify Python's search path." +msgstr "" + +#: ../../install/index.rst:554 +msgid "" +"If you want to define an entire installation scheme, you just have to supply" +" all of the installation directory options. The recommended way to do this " +"is to supply relative paths; for example, if you want to maintain all Python" +" module-related files under :file:`python` in your home directory, and you " +"want a separate directory for each platform that you use your home directory" +" from, you might define the following installation scheme::" +msgstr "" + +#: ../../install/index.rst:567 +msgid "or, equivalently, ::" +msgstr "或者,等价于 ::" + +#: ../../install/index.rst:575 +msgid "" +"``$PLAT`` is not (necessarily) an environment variable---it will be expanded" +" by the Distutils as it parses your command line options, just as it does " +"when parsing your configuration file(s)." +msgstr "" + +#: ../../install/index.rst:579 +msgid "" +"Obviously, specifying the entire installation scheme every time you install " +"a new module distribution would be very tedious. Thus, you can put these " +"options into your Distutils config file (see section :ref:`inst-config-" +"files`):" +msgstr "" + +#: ../../install/index.rst:592 +msgid "or, equivalently," +msgstr "或者,等价于," + +#: ../../install/index.rst:603 +msgid "" +"Note that these two are *not* equivalent if you supply a different " +"installation base directory when you run the setup script. For example, ::" +msgstr "" + +#: ../../install/index.rst:608 +msgid "" +"would install pure modules to :file:`/tmp/python/lib` in the first case, and" +" to :file:`/tmp/lib` in the second case. (For the second case, you probably" +" want to supply an installation base of :file:`/tmp/python`.)" +msgstr "" + +#: ../../install/index.rst:612 +msgid "" +"You probably noticed the use of ``$HOME`` and ``$PLAT`` in the sample " +"configuration file input. These are Distutils configuration variables, " +"which bear a strong resemblance to environment variables. In fact, you can " +"use environment variables in config files on platforms that have such a " +"notion but the Distutils additionally define a few extra variables that may " +"not be in your environment, such as ``$PLAT``. (And of course, on systems " +"that don't have environment variables, such as Mac OS 9, the configuration " +"variables supplied by the Distutils are the only ones you can use.) See " +"section :ref:`inst-config-files` for details." +msgstr "" + +#: ../../install/index.rst:622 +msgid "" +"When a :ref:`virtual environment ` is activated, any options that " +"change the installation path will be ignored from all distutils " +"configuration files to prevent inadvertently installing projects outside of " +"the virtual environment." +msgstr "" + +#: ../../install/index.rst:636 +msgid "Modifying Python's Search Path" +msgstr "修改 Python 的搜索路径" + +#: ../../install/index.rst:638 +msgid "" +"When the Python interpreter executes an :keyword:`import` statement, it " +"searches for both Python code and extension modules along a search path. A " +"default value for the path is configured into the Python binary when the " +"interpreter is built. You can determine the path by importing the :mod:`sys`" +" module and printing the value of ``sys.path``. ::" +msgstr "" + +#: ../../install/index.rst:655 +msgid "" +"The null string in ``sys.path`` represents the current working directory." +msgstr "" + +#: ../../install/index.rst:657 +msgid "" +"The expected convention for locally installed packages is to put them in the" +" :file:`{...}/site-packages/` directory, but you may want to install Python " +"modules into some arbitrary directory. For example, your site may have a " +"convention of keeping all software related to the web server under " +":file:`/www`. Add-on Python modules might then belong in " +":file:`/www/python`, and in order to import them, this directory must be " +"added to ``sys.path``. There are several different ways to add the " +"directory." +msgstr "" + +#: ../../install/index.rst:665 +msgid "" +"The most convenient way is to add a path configuration file to a directory " +"that's already on Python's path, usually to the :file:`.../site-packages/` " +"directory. Path configuration files have an extension of :file:`.pth`, and " +"each line must contain a single path that will be appended to ``sys.path``." +" (Because the new paths are appended to ``sys.path``, modules in the added " +"directories will not override standard modules. This means you can't use " +"this mechanism for installing fixed versions of standard modules.)" +msgstr "" + +#: ../../install/index.rst:673 +msgid "" +"Paths can be absolute or relative, in which case they're relative to the " +"directory containing the :file:`.pth` file. See the documentation of the " +":mod:`site` module for more information." +msgstr "" + +#: ../../install/index.rst:677 +msgid "" +"A slightly less convenient way is to edit the :file:`site.py` file in " +"Python's standard library, and modify ``sys.path``. :file:`site.py` is " +"automatically imported when the Python interpreter is executed, unless the " +":option:`-S` switch is supplied to suppress this behaviour. So you could " +"simply edit :file:`site.py` and add two lines to it:" +msgstr "" + +#: ../../install/index.rst:688 +msgid "" +"However, if you reinstall the same major version of Python (perhaps when " +"upgrading from 2.2 to 2.2.2, for example) :file:`site.py` will be " +"overwritten by the stock version. You'd have to remember that it was " +"modified and save a copy before doing the installation." +msgstr "" + +#: ../../install/index.rst:693 +msgid "" +"There are two environment variables that can modify ``sys.path``. " +":envvar:`PYTHONHOME` sets an alternate value for the prefix of the Python " +"installation. For example, if :envvar:`PYTHONHOME` is set to " +"``/www/python``, the search path will be set to ``['', " +"'/www/python/lib/pythonX.Y/', '/www/python/lib/pythonX.Y/plat-linux2', " +"...]``." +msgstr "" + +#: ../../install/index.rst:699 +msgid "" +"The :envvar:`PYTHONPATH` variable can be set to a list of paths that will be" +" added to the beginning of ``sys.path``. For example, if " +":envvar:`PYTHONPATH` is set to ``/www/python:/opt/py``, the search path will" +" begin with ``['/www/python', '/opt/py']``. (Note that directories must " +"exist in order to be added to ``sys.path``; the :mod:`site` module removes " +"paths that don't exist.)" +msgstr "" + +#: ../../install/index.rst:706 +msgid "" +"Finally, ``sys.path`` is just a regular Python list, so any Python " +"application can modify it by adding or removing entries." +msgstr "" + +#: ../../install/index.rst:713 +msgid "Distutils Configuration Files" +msgstr "Distutils 配置文件Configuration Files" + +#: ../../install/index.rst:715 +msgid "" +"As mentioned above, you can use Distutils configuration files to record " +"personal or site preferences for any Distutils options. That is, any option" +" to any command can be stored in one of two or three (depending on your " +"platform) configuration files, which will be consulted before the command-" +"line is parsed. This means that configuration files will override default " +"values, and the command-line will in turn override configuration files. " +"Furthermore, if multiple configuration files apply, values from \"earlier\" " +"files are overridden by \"later\" files." +msgstr "" + +#: ../../install/index.rst:728 +msgid "Location and names of config files" +msgstr "" + +#: ../../install/index.rst:730 +msgid "" +"The names and locations of the configuration files vary slightly across " +"platforms. On Unix and macOS, the three configuration files (in the order " +"they are processed) are:" +msgstr "" + +#: ../../install/index.rst:735 ../../install/index.rst:747 +msgid "Location and filename" +msgstr "位置和文件名" + +#: ../../install/index.rst:737 ../../install/index.rst:749 +msgid "system" +msgstr "system" + +#: ../../install/index.rst:737 +msgid ":file:`{prefix}/lib/python{ver}/distutils/distutils.cfg`" +msgstr ":file:`{prefix}/lib/python{ver}/distutils/distutils.cfg`" + +#: ../../install/index.rst:739 ../../install/index.rst:751 +msgid "personal" +msgstr "personal" + +#: ../../install/index.rst:739 +msgid ":file:`$HOME/.pydistutils.cfg`" +msgstr ":file:`$HOME/.pydistutils.cfg`" + +#: ../../install/index.rst:741 ../../install/index.rst:753 +msgid "local" +msgstr "local" + +#: ../../install/index.rst:741 ../../install/index.rst:753 +msgid ":file:`setup.cfg`" +msgstr ":file:`setup.cfg`" + +#: ../../install/index.rst:741 ../../install/index.rst:753 +msgid "\\(3)" +msgstr "\\(3)" + +#: ../../install/index.rst:744 +msgid "And on Windows, the configuration files are:" +msgstr "而在 Windows 中,配置文件为:" + +#: ../../install/index.rst:749 +msgid ":file:`{prefix}\\\\Lib\\\\distutils\\\\distutils.cfg`" +msgstr ":file:`{prefix}\\\\Lib\\\\distutils\\\\distutils.cfg`" + +#: ../../install/index.rst:749 +msgid "\\(4)" +msgstr "\\(4)" + +#: ../../install/index.rst:751 +msgid ":file:`%HOME%\\\\pydistutils.cfg`" +msgstr ":file:`%HOME%\\\\pydistutils.cfg`" + +#: ../../install/index.rst:751 +msgid "\\(5)" +msgstr "\\(5)" + +#: ../../install/index.rst:756 +msgid "" +"On all platforms, the \"personal\" file can be temporarily disabled by " +"passing the `--no-user-cfg` option." +msgstr "" + +#: ../../install/index.rst:762 +msgid "" +"Strictly speaking, the system-wide configuration file lives in the directory" +" where the Distutils are installed; under Python 1.6 and later on Unix, this" +" is as shown. For Python 1.5.2, the Distutils will normally be installed to " +":file:`{prefix}/lib/python1.5/site-packages/distutils`, so the system " +"configuration file should be put there under Python 1.5.2." +msgstr "" + +#: ../../install/index.rst:769 +msgid "" +"On Unix, if the :envvar:`HOME` environment variable is not defined, the " +"user's home directory will be determined with the :func:`getpwuid` function " +"from the standard :mod:`pwd` module. This is done by the " +":func:`os.path.expanduser` function used by Distutils." +msgstr "" + +#: ../../install/index.rst:775 +msgid "" +"I.e., in the current directory (usually the location of the setup script)." +msgstr "" + +#: ../../install/index.rst:778 +msgid "" +"(See also note (1).) Under Python 1.6 and later, Python's default " +"\"installation prefix\" is :file:`C:\\\\Python`, so the system configuration" +" file is normally :file:`C:\\\\Python\\\\Lib\\\\distutils\\\\distutils.cfg`." +" Under Python 1.5.2, the default prefix was :file:`C:\\\\Program " +"Files\\\\Python`, and the Distutils were not part of the standard library---" +"so the system configuration file would be :file:`C:\\\\Program " +"Files\\\\Python\\\\distutils\\\\distutils.cfg` in a standard Python 1.5.2 " +"installation under Windows." +msgstr "" + +#: ../../install/index.rst:787 +msgid "" +"On Windows, if the :envvar:`HOME` environment variable is not defined, " +":envvar:`USERPROFILE` then :envvar:`HOMEDRIVE` and :envvar:`HOMEPATH` will " +"be tried. This is done by the :func:`os.path.expanduser` function used by " +"Distutils." +msgstr "" + +#: ../../install/index.rst:796 +msgid "Syntax of config files" +msgstr "" + +#: ../../install/index.rst:798 +msgid "" +"The Distutils configuration files all have the same syntax. The config " +"files are grouped into sections. There is one section for each Distutils " +"command, plus a ``global`` section for global options that affect every " +"command. Each section consists of one option per line, specified as " +"``option=value``." +msgstr "" + +#: ../../install/index.rst:803 +msgid "" +"For example, the following is a complete config file that just forces all " +"commands to run quietly by default:" +msgstr "" + +#: ../../install/index.rst:811 +msgid "" +"If this is installed as the system config file, it will affect all " +"processing of any Python module distribution by any user on the current " +"system. If it is installed as your personal config file (on systems that " +"support them), it will affect only module distributions processed by you. " +"And if it is used as the :file:`setup.cfg` for a particular module " +"distribution, it affects only that distribution." +msgstr "" + +#: ../../install/index.rst:818 +msgid "" +"You could override the default \"build base\" directory and make the " +":command:`build\\*` commands always forcibly rebuild all files with the " +"following:" +msgstr "" + +#: ../../install/index.rst:828 +msgid "which corresponds to the command-line arguments ::" +msgstr "" + +#: ../../install/index.rst:832 +msgid "" +"except that including the :command:`build` command on the command-line means" +" that command will be run. Including a particular command in config files " +"has no such implication; it only means that if the command is run, the " +"options in the config file will apply. (Or if other commands that derive " +"values from it are run, they will use the values in the config file.)" +msgstr "" + +#: ../../install/index.rst:838 +msgid "" +"You can find out the complete list of options for any command using the " +":option:`!--help` option, e.g.::" +msgstr "" + +#: ../../install/index.rst:843 +msgid "" +"and you can find out the complete list of global options by using :option:`!" +"--help` without a command::" +msgstr "" + +#: ../../install/index.rst:848 +msgid "" +"See also the \"Reference\" section of the \"Distributing Python Modules\" " +"manual." +msgstr "" + +#: ../../install/index.rst:854 +msgid "Building Extensions: Tips and Tricks" +msgstr "" + +#: ../../install/index.rst:856 +msgid "" +"Whenever possible, the Distutils try to use the configuration information " +"made available by the Python interpreter used to run the :file:`setup.py` " +"script. For example, the same compiler and linker flags used to compile " +"Python will also be used for compiling extensions. Usually this will work " +"well, but in complicated situations this might be inappropriate. This " +"section discusses how to override the usual Distutils behaviour." +msgstr "" + +#: ../../install/index.rst:867 +msgid "Tweaking compiler/linker flags" +msgstr "" + +#: ../../install/index.rst:869 +msgid "" +"Compiling a Python extension written in C or C++ will sometimes require " +"specifying custom flags for the compiler and linker in order to use a " +"particular library or produce a special kind of object code. This is " +"especially true if the extension hasn't been tested on your platform, or if " +"you're trying to cross-compile Python." +msgstr "" + +#: ../../install/index.rst:875 +msgid "" +"In the most general case, the extension author might have foreseen that " +"compiling the extensions would be complicated, and provided a :file:`Setup` " +"file for you to edit. This will likely only be done if the module " +"distribution contains many separate extension modules, or if they often " +"require elaborate sets of compiler flags in order to work." +msgstr "" + +#: ../../install/index.rst:881 +msgid "" +"A :file:`Setup` file, if present, is parsed in order to get a list of " +"extensions to build. Each line in a :file:`Setup` describes a single " +"module. Lines have the following structure::" +msgstr "" + +#: ../../install/index.rst:888 +msgid "Let's examine each of the fields in turn." +msgstr "" + +#: ../../install/index.rst:890 +msgid "" +"*module* is the name of the extension module to be built, and should be a " +"valid Python identifier. You can't just change this in order to rename a " +"module (edits to the source code would also be needed), so this should be " +"left alone." +msgstr "" + +#: ../../install/index.rst:894 +msgid "" +"*sourcefile* is anything that's likely to be a source code file, at least " +"judging by the filename. Filenames ending in :file:`.c` are assumed to be " +"written in C, filenames ending in :file:`.C`, :file:`.cc`, and :file:`.c++` " +"are assumed to be C++, and filenames ending in :file:`.m` or :file:`.mm` are" +" assumed to be in Objective C." +msgstr "" + +#: ../../install/index.rst:900 +msgid "" +"*cpparg* is an argument for the C preprocessor, and is anything starting " +"with :option:`!-I`, :option:`!-D`, :option:`!-U` or :option:`!-C`." +msgstr "" + +#: ../../install/index.rst:903 +msgid "" +"*library* is anything ending in :file:`.a` or beginning with :option:`!-l` " +"or :option:`!-L`." +msgstr "" + +#: ../../install/index.rst:906 +msgid "" +"If a particular platform requires a special library on your platform, you " +"can add it by editing the :file:`Setup` file and running ``python setup.py " +"build``. For example, if the module defined by the line ::" +msgstr "" + +#: ../../install/index.rst:912 +msgid "" +"must be linked with the math library :file:`libm.a` on your platform, simply" +" add :option:`!-lm` to the line::" +msgstr "" + +#: ../../install/index.rst:917 +msgid "" +"Arbitrary switches intended for the compiler or the linker can be supplied " +"with the :option:`!-Xcompiler` *arg* and :option:`!-Xlinker` *arg* options::" +msgstr "" + +#: ../../install/index.rst:922 +msgid "" +"The next option after :option:`!-Xcompiler` and :option:`!-Xlinker` will be " +"appended to the proper command line, so in the above example the compiler " +"will be passed the :option:`!-o32` option, and the linker will be passed " +":option:`!-shared`. If a compiler option requires an argument, you'll have " +"to supply multiple :option:`!-Xcompiler` options; for example, to pass ``-x " +"c++`` the :file:`Setup` file would have to contain ``-Xcompiler -x " +"-Xcompiler c++``." +msgstr "" + +#: ../../install/index.rst:929 +msgid "" +"Compiler flags can also be supplied through setting the :envvar:`CFLAGS` " +"environment variable. If set, the contents of :envvar:`CFLAGS` will be " +"added to the compiler flags specified in the :file:`Setup` file." +msgstr "" + +#: ../../install/index.rst:937 +msgid "Using non-Microsoft compilers on Windows" +msgstr "在 Windows 上使用非 Microsoft 编辑器" + +#: ../../install/index.rst:944 +msgid "Borland/CodeGear C++" +msgstr "Borland/CodeGear C++" + +#: ../../install/index.rst:946 +msgid "" +"This subsection describes the necessary steps to use Distutils with the " +"Borland C++ compiler version 5.5. First you have to know that Borland's " +"object file format (OMF) is different from the format used by the Python " +"version you can download from the Python or ActiveState Web site. (Python " +"is built with Microsoft Visual C++, which uses COFF as the object file " +"format.) For this reason you have to convert Python's library " +":file:`python25.lib` into the Borland format. You can do this as follows:" +msgstr "" + +#: ../../install/index.rst:961 +msgid "" +"The :file:`coff2omf` program comes with the Borland compiler. The file " +":file:`python25.lib` is in the :file:`Libs` directory of your Python " +"installation. If your extension uses other libraries (zlib, ...) you have " +"to convert them too." +msgstr "" + +#: ../../install/index.rst:966 +msgid "" +"The converted files have to reside in the same directories as the normal " +"libraries." +msgstr "" + +#: ../../install/index.rst:969 +msgid "" +"How does Distutils manage to use these libraries with their changed names? " +"If the extension needs a library (eg. :file:`foo`) Distutils checks first if" +" it finds a library with suffix :file:`_bcpp` (eg. :file:`foo_bcpp.lib`) and" +" then uses this library. In the case it doesn't find such a special library" +" it uses the default name (:file:`foo.lib`.) [#]_" +msgstr "" + +#: ../../install/index.rst:975 +msgid "" +"To let Distutils compile your extension with Borland C++ you now have to " +"type::" +msgstr "" + +#: ../../install/index.rst:979 +msgid "" +"If you want to use the Borland C++ compiler as the default, you could " +"specify this in your personal or system-wide configuration file for " +"Distutils (see section :ref:`inst-config-files`.)" +msgstr "" + +#: ../../install/index.rst:988 +msgid "`C++Builder Compiler `_" +msgstr "`C++Builder Compiler `_" + +#: ../../install/index.rst:987 +msgid "" +"Information about the free C++ compiler from Borland, including links to the" +" download pages." +msgstr "有关 Borland 发布的免费 C++ 编译器的信息,包括下载页面的链接。" + +#: ../../install/index.rst:991 +msgid "" +"`Creating Python Extensions Using Borland's Free Compiler " +"`_" +msgstr "" +"`Creating Python Extensions Using Borland's Free Compiler " +"`_" + +#: ../../install/index.rst:991 +msgid "" +"Document describing how to use Borland's free command-line C++ compiler to " +"build Python." +msgstr "介绍如何使用 Borland 发布的免费命令行方式 C++ 编译器构建 Python 的文档。" + +#: ../../install/index.rst:996 +msgid "GNU C / Cygwin / MinGW" +msgstr "GNU C / Cygwin / MinGW" + +#: ../../install/index.rst:998 +msgid "" +"This section describes the necessary steps to use Distutils with the GNU " +"C/C++ compilers in their Cygwin and MinGW distributions. [#]_ For a Python " +"interpreter that was built with Cygwin, everything should work without any " +"of these following steps." +msgstr "" + +#: ../../install/index.rst:1003 +msgid "" +"Not all extensions can be built with MinGW or Cygwin, but many can. " +"Extensions most likely to not work are those that use C++ or depend on " +"Microsoft Visual C extensions." +msgstr "" + +#: ../../install/index.rst:1007 +msgid "To let Distutils compile your extension with Cygwin you have to type::" +msgstr "" + +#: ../../install/index.rst:1011 +msgid "and for Cygwin in no-cygwin mode [#]_ or for MinGW type::" +msgstr "" + +#: ../../install/index.rst:1015 +msgid "" +"If you want to use any of these options/compilers as default, you should " +"consider writing it in your personal or system-wide configuration file for " +"Distutils (see section :ref:`inst-config-files`.)" +msgstr "" + +#: ../../install/index.rst:1020 +msgid "Older Versions of Python and MinGW" +msgstr "旧版 Python 和 MinGW" + +#: ../../install/index.rst:1021 +msgid "" +"The following instructions only apply if you're using a version of Python " +"inferior to 2.4.1 with a MinGW inferior to 3.0.0 (with " +"binutils-2.13.90-20030111-1)." +msgstr "" + +#: ../../install/index.rst:1025 +msgid "" +"These compilers require some special libraries. This task is more complex " +"than for Borland's C++, because there is no program to convert the library." +" First you have to create a list of symbols which the Python DLL exports. " +"(You can find a good program for this task at " +"https://sourceforge.net/projects/mingw/files/MinGW/Extension/pexports/)." +msgstr "" + +#: ../../install/index.rst:1038 +msgid "" +"The location of an installed :file:`python25.dll` will depend on the " +"installation options and the version and language of Windows. In a \"just " +"for me\" installation, it will appear in the root of the installation " +"directory. In a shared installation, it will be located in the system " +"directory." +msgstr "" + +#: ../../install/index.rst:1043 +msgid "" +"Then you can create from these information an import library for gcc. ::" +msgstr "" + +#: ../../install/index.rst:1047 +msgid "" +"The resulting library has to be placed in the same directory as " +":file:`python25.lib`. (Should be the :file:`libs` directory under your " +"Python installation directory.)" +msgstr "" + +#: ../../install/index.rst:1051 +msgid "" +"If your extension uses other libraries (zlib,...) you might have to convert" +" them too. The converted files have to reside in the same directories as the" +" normal libraries do." +msgstr "" + +#: ../../install/index.rst:1058 +msgid "" +"`Building Python modules on MS Windows platform with MinGW " +"`_" +msgstr "" + +#: ../../install/index.rst:1059 +msgid "" +"Information about building the required libraries for the MinGW environment." +msgstr "针对 MinGW 环境生成必要的库的相关信息" + +#: ../../install/index.rst:1063 +msgid "Footnotes" +msgstr "备注" + +#: ../../install/index.rst:1064 +msgid "" +"This also means you could replace all existing COFF-libraries with OMF-" +"libraries of the same name." +msgstr "这也意味着你可以将现有的全部 COFF 库替换为同名的 OMF 库。" + +#: ../../install/index.rst:1067 +msgid "Check https://www.sourceware.org/cygwin/ for more information" +msgstr "请查看 https://www.sourceware.org/cygwin/ 了解更多信息" + +#: ../../install/index.rst:1069 +msgid "" +"Then you have no POSIX emulation available, but you also don't need " +":file:`cygwin1.dll`." +msgstr "你将没有可用的 POSIX 模拟,但你也将不再需要 :file:`cygwin1.dll`。" diff --git a/installing/index.po b/installing/index.po new file mode 100644 index 000000000..e2e08a955 --- /dev/null +++ b/installing/index.po @@ -0,0 +1,391 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) 2001-2022, Python Software Foundation +# This file is distributed under the same license as the Python package. +# FIRST AUTHOR , YEAR. +# +# Translators: +# cdarlint , 2017 +# ww song , 2018 +# 刘士 , 2018 +# Freesand Leo , 2021 +# Alpha Du , 2022 +# +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: Python 3.9\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2022-11-04 14:34+0000\n" +"PO-Revision-Date: 2017-02-16 17:46+0000\n" +"Last-Translator: Alpha Du , 2022\n" +"Language-Team: Chinese (China) (https://www.transifex.com/python-doc/teams/5390/zh_CN/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: zh_CN\n" +"Plural-Forms: nplurals=1; plural=0;\n" + +#: ../../installing/index.rst:7 +msgid "Installing Python Modules" +msgstr "安装 Python 模块" + +#: ../../installing/index.rst:0 +msgid "Email" +msgstr "电子邮箱" + +#: ../../installing/index.rst:9 +msgid "distutils-sig@python.org" +msgstr "distutils-sig@python.org" + +#: ../../installing/index.rst:11 +msgid "" +"As a popular open source development project, Python has an active " +"supporting community of contributors and users that also make their software" +" available for other Python developers to use under open source license " +"terms." +msgstr "" +"作为一个流行的开源开发项目,Python拥有一个活跃的贡献者和用户支持社区,这些社区也可以让他们的软件可供其他Python开发人员在开源许可条款下使用。" + +#: ../../installing/index.rst:15 +msgid "" +"This allows Python users to share and collaborate effectively, benefiting " +"from the solutions others have already created to common (and sometimes even" +" rare!) problems, as well as potentially contributing their own solutions to" +" the common pool." +msgstr "这允许Python用户有效地共享和协作,从其他人已经创建的解决方案中受益于常见(有时甚至是罕见的)问题,以及可以提供他们自己的解决方案。" + +#: ../../installing/index.rst:20 +msgid "" +"This guide covers the installation part of the process. For a guide to " +"creating and sharing your own Python projects, refer to the " +":ref:`distribution guide `." +msgstr "本指南涵盖了分发部分的流程。有关安装其他Python项目的指南,请参阅 :ref:`安装指南`。" + +#: ../../installing/index.rst:26 +msgid "" +"For corporate and other institutional users, be aware that many " +"organisations have their own policies around using and contributing to open " +"source software. Please take such policies into account when making use of " +"the distribution and installation tools provided with Python." +msgstr "对于企业和其他机构用户,请注意许多组织都有自己的政策来使用和贡献开源软件。在使用Python提供的分发和安装工具时,请考虑这些政策。" + +#: ../../installing/index.rst:33 +msgid "Key terms" +msgstr "关键术语" + +#: ../../installing/index.rst:35 +msgid "" +"``pip`` is the preferred installer program. Starting with Python 3.4, it is " +"included by default with the Python binary installers." +msgstr "``pip`` 是首选的安装程序。从Python 3.4开始,它默认包含在Python二进制安装程序中。" + +#: ../../installing/index.rst:37 +msgid "" +"A *virtual environment* is a semi-isolated Python environment that allows " +"packages to be installed for use by a particular application, rather than " +"being installed system wide." +msgstr "*virtual environment* 是一种半隔离的 Python 环境,允许为特定的应用安装各自的包,而不是安装到整个系统。" + +#: ../../installing/index.rst:40 +msgid "" +"``venv`` is the standard tool for creating virtual environments, and has " +"been part of Python since Python 3.3. Starting with Python 3.4, it defaults " +"to installing ``pip`` into all created virtual environments." +msgstr "" +"``venv`` 是创建虚拟环境的标准工具,从 Python 3.3 开始成为 Python 的组成部分。 从 Python 3.4 开始,它会默认安装" +" ``pip`` 到所创建的全部虚拟环境。" + +#: ../../installing/index.rst:43 +msgid "" +"``virtualenv`` is a third party alternative (and predecessor) to ``venv``. " +"It allows virtual environments to be used on versions of Python prior to " +"3.4, which either don't provide ``venv`` at all, or aren't able to " +"automatically install ``pip`` into created environments." +msgstr "" +"``virtualenv`` 是 ``venv`` 的第三方替代(及其前身)。 它允许在 Python 3.4 " +"之前的版本中使用虚拟环境,那些版本或是完全不提供 ``venv``,或是不会自动安装 ``pip`` 到所创建的虚拟环境。" + +#: ../../installing/index.rst:47 +msgid "" +"The `Python Package Index `__ is a public repository of " +"open source licensed packages made available for use by other Python users." +msgstr "" +"`Python Package Index `__ 是一个开源许可的软件包公共存储库,可供所有 Python " +"用户使用。" + +#: ../../installing/index.rst:50 +msgid "" +"the `Python Packaging Authority `__ is the group of " +"developers and documentation authors responsible for the maintenance and " +"evolution of the standard packaging tools and the associated metadata and " +"file format standards. They maintain a variety of tools, documentation, and " +"issue trackers on both `GitHub `__ and `Bitbucket " +"`__." +msgstr "" +"`Python Packaging Authority `__ " +"是负责标准打包工具以及相关元数据和文件格式标准维护与改进的开发人员和文档作者团队。 他们基于 `GitHub " +"`__ 和 `Bitbucket `__ " +"这两个平台维护着各种工具、文档和问题追踪系统。" + +#: ../../installing/index.rst:57 +msgid "" +"``distutils`` is the original build and distribution system first added to " +"the Python standard library in 1998. While direct use of ``distutils`` is " +"being phased out, it still laid the foundation for the current packaging and" +" distribution infrastructure, and it not only remains part of the standard " +"library, but its name lives on in other ways (such as the name of the " +"mailing list used to coordinate Python packaging standards development)." +msgstr "" +"``distutils`` 是最初的构建和分发系统,于 1998 年首次加入 Python 标准库。 虽然直接使用 ``distutils`` " +"的方式已被淘汰,它仍然是当前打包和分发架构的基础,而且它不仅仍然是标准库的一部分,这个名称还以其他方式存在(例如用于协调 Python " +"打包标准开发流程的邮件列表就以此命名)。" + +#: ../../installing/index.rst:65 +msgid "" +"The use of ``venv`` is now recommended for creating virtual environments." +msgstr "现在推荐使用 ``venv`` 来创建虚拟环境。" + +#: ../../installing/index.rst:70 +msgid "" +"`Python Packaging User Guide: Creating and using virtual environments " +"`__" +msgstr "" +"`Python 软件包用户指南:创建和使用虚拟环境 " +"`__" + +#: ../../installing/index.rst:75 +msgid "Basic usage" +msgstr "基本使用" + +#: ../../installing/index.rst:77 +msgid "" +"The standard packaging tools are all designed to be used from the command " +"line." +msgstr "标准打包工具完全是针对命令行使用方式来设计的。" + +#: ../../installing/index.rst:80 +msgid "" +"The following command will install the latest version of a module and its " +"dependencies from the Python Package Index::" +msgstr "以下命令将从 Python Package Index 安装一个模块的最新版本及其依赖项::" + +#: ../../installing/index.rst:87 +msgid "" +"For POSIX users (including macOS and Linux users), the examples in this " +"guide assume the use of a :term:`virtual environment`." +msgstr "" +"对于 POSIX 用户(包括 macOS 和 Linux 用户)本指南中的示例假定使用了 :term:`virtual environment`。" + +#: ../../installing/index.rst:90 +msgid "" +"For Windows users, the examples in this guide assume that the option to " +"adjust the system PATH environment variable was selected when installing " +"Python." +msgstr "对于 Windows 用户,本指南中的示例假定在安装 Python 时选择了修改系统 PATH 环境变量。" + +#: ../../installing/index.rst:94 +msgid "" +"It's also possible to specify an exact or minimum version directly on the " +"command line. When using comparator operators such as ``>``, ``<`` or some " +"other special character which get interpreted by shell, the package name and" +" the version should be enclosed within double quotes::" +msgstr "" +"在命令行中指定一个准确或最小版本也是可以的。 当使用比较运算符例如 ``>``, ``<`` " +"或其他某些可以被终端所解析的特殊字符时,包名称与版本号应当用双引号括起来::" + +#: ../../installing/index.rst:102 +msgid "" +"Normally, if a suitable module is already installed, attempting to install " +"it again will have no effect. Upgrading existing modules must be requested " +"explicitly::" +msgstr "通常,如果一个匹配的模块已安装,尝试再次安装将不会有任何效果。 要升级现有模块必须显式地发出请求::" + +#: ../../installing/index.rst:108 +msgid "" +"More information and resources regarding ``pip`` and its capabilities can be" +" found in the `Python Packaging User Guide " +"`__." +msgstr "" +"更多有关 ``pip`` 及其功能的信息和资源可以在 `Python 软件包用户指南 `__" +" 中找到。" + +#: ../../installing/index.rst:111 +msgid "" +"Creation of virtual environments is done through the :mod:`venv` module. " +"Installing packages into an active virtual environment uses the commands " +"shown above." +msgstr "虚拟环境的创建可使用 :mod:`venv` 模块来完成。 向已激活虚拟环境安装软件包可使用上文所介绍的命令。" + +#: ../../installing/index.rst:117 +msgid "" +"`Python Packaging User Guide: Installing Python Distribution Packages " +"`__" +msgstr "" +"`Python 软件包用户指南:安装 Python 分发包 `__" + +#: ../../installing/index.rst:122 +msgid "How do I ...?" +msgstr "我应如何 ...?" + +#: ../../installing/index.rst:124 +msgid "These are quick answers or links for some common tasks." +msgstr "这是一些常见任务的快速解答或相关链接。" + +#: ../../installing/index.rst:127 +msgid "... install ``pip`` in versions of Python prior to Python 3.4?" +msgstr "... 在 Python 3.4 之前的 Python 版本中安装 ``pip`` ?" + +#: ../../installing/index.rst:129 +msgid "" +"Python only started bundling ``pip`` with Python 3.4. For earlier versions, " +"``pip`` needs to be \"bootstrapped\" as described in the Python Packaging " +"User Guide." +msgstr "" +"Python 捆绑 ``pip`` 是从 Python 3.4 才开始的。 对于更早的版本,``pip`` 需要“引导安装”,具体说明参见 Python" +" 软件包用户指南。" + +#: ../../installing/index.rst:135 +msgid "" +"`Python Packaging User Guide: Requirements for Installing Packages " +"`__" +msgstr "" +"`Python 软件包用户指南:安装软件包的前提要求 " +"`__" + +#: ../../installing/index.rst:142 +msgid "... install packages just for the current user?" +msgstr "... 只为当前用户安装软件包?" + +#: ../../installing/index.rst:144 +msgid "" +"Passing the ``--user`` option to ``python -m pip install`` will install a " +"package just for the current user, rather than for all users of the system." +msgstr "将 ``--user`` 选项传入 ``python -m pip install`` 将只为当前用户而非为系统中的所有用户安装软件包。" + +#: ../../installing/index.rst:149 +msgid "... install scientific Python packages?" +msgstr "... 安装科学计算类 Python 软件包?" + +#: ../../installing/index.rst:151 +msgid "" +"A number of scientific Python packages have complex binary dependencies, and" +" aren't currently easy to install using ``pip`` directly. At this point in " +"time, it will often be easier for users to install these packages by `other " +"means `__ rather than attempting to " +"install them with ``pip``." +msgstr "" +"许多科学计算类 Python 软件包都有复杂的二进制编译文件依赖,直接使用 ``pip`` 安装目前并不太容易。 在当前情况下,通过 `其他方式 " +"`__ 而非尝试用 ``pip`` 安装这些软件包对用户来说通常会更容易。" + +#: ../../installing/index.rst:159 +msgid "" +"`Python Packaging User Guide: Installing Scientific Packages " +"`__" +msgstr "`Python 软件包用户指南:安装科学计算类软件包 `__" + +#: ../../installing/index.rst:164 +msgid "... work with multiple versions of Python installed in parallel?" +msgstr "... 使用并行安装的多个 Python 版本?" + +#: ../../installing/index.rst:166 +msgid "" +"On Linux, macOS, and other POSIX systems, use the versioned Python commands " +"in combination with the ``-m`` switch to run the appropriate copy of " +"``pip``::" +msgstr "" +"在 Linux, macOS 以及其他 POSIX 系统中,使用带版本号的 Python 命令配合 ``-m`` 开关选项来运行特定版本的 " +"``pip``::" + +#: ../../installing/index.rst:175 +msgid "Appropriately versioned ``pip`` commands may also be available." +msgstr "也可以使用带特定版本号的 ``pip`` 命令。" + +#: ../../installing/index.rst:177 +msgid "" +"On Windows, use the ``py`` Python launcher in combination with the ``-m`` " +"switch::" +msgstr "在 Windows 中,使用 ``py`` Python 启动器命令配合 ``-m`` 开关选项::" + +#: ../../installing/index.rst:194 +msgid "Common installation issues" +msgstr "常见的安装问题" + +#: ../../installing/index.rst:197 +msgid "Installing into the system Python on Linux" +msgstr "在 Linux 的系统 Python 版本上安装" + +#: ../../installing/index.rst:199 +msgid "" +"On Linux systems, a Python installation will typically be included as part " +"of the distribution. Installing into this Python installation requires root " +"access to the system, and may interfere with the operation of the system " +"package manager and other components of the system if a component is " +"unexpectedly upgraded using ``pip``." +msgstr "" +"Linux 系统通常会将某个 Python 版本作为发行版的一部分包含在内。 将软件包安装到这个 Python 版本上需要系统 root " +"权限,并可能会干扰到系统包管理器和其他系统组件的运作,如果这些组件在使用 ``pip`` 时被意外升级的话。" + +#: ../../installing/index.rst:205 +msgid "" +"On such systems, it is often better to use a virtual environment or a per-" +"user installation when installing packages with ``pip``." +msgstr "在这样的系统上,通过 ``pip`` 安装软件包通常最好是使用虚拟环境或分用户安装。" + +#: ../../installing/index.rst:210 +msgid "Pip not installed" +msgstr "未安装 pip" + +#: ../../installing/index.rst:212 +msgid "" +"It is possible that ``pip`` does not get installed by default. One potential" +" fix is::" +msgstr "默认情况下可能未安装 ``pip``,一种可选解决方案是::" + +#: ../../installing/index.rst:216 +msgid "" +"There are also additional resources for `installing pip. " +"`__" +msgstr "" +"还有其他资源可用来 `安装 pip `__" + +#: ../../installing/index.rst:221 +msgid "Installing binary extensions" +msgstr "安装二进制编译扩展" + +#: ../../installing/index.rst:223 +msgid "" +"Python has typically relied heavily on source based distribution, with end " +"users being expected to compile extension modules from source as part of the" +" installation process." +msgstr "Python 通常非常依赖基于源代码的发布方式,也就是期望最终用户在安装过程中使用源码来编译生成扩展模块。" + +#: ../../installing/index.rst:227 +msgid "" +"With the introduction of support for the binary ``wheel`` format, and the " +"ability to publish wheels for at least Windows and macOS through the Python " +"Package Index, this problem is expected to diminish over time, as users are " +"more regularly able to install pre-built extensions rather than needing to " +"build them themselves." +msgstr "" +"随着对二进制码 ``wheel`` 格式支持的引入,以及通过 Python Package Index 至少发布 Windows 和 macOS 版的 " +"wheel 文件,预计此问题将逐步得到解决,因为用户将能够更频繁地安装预编译扩展,而不再需要自己编译它们。" + +#: ../../installing/index.rst:233 +msgid "" +"Some of the solutions for installing `scientific software " +"`__ that are not yet available as " +"pre-built ``wheel`` files may also help with obtaining other binary " +"extensions without needing to build them locally." +msgstr "" +"某些用来安装 `科学计算类软件包 `__ 的解决方案对于尚未提供预编译 " +"``wheel`` 文件的那些扩展模块来说,也有助于用户在无需进行本机编译的情况下获取二进制码扩展模块。" + +#: ../../installing/index.rst:240 +msgid "" +"`Python Packaging User Guide: Binary Extensions " +"`__" +msgstr "`Python 软件包用户指南:二进制码扩展 `__" diff --git a/library/2to3.po b/library/2to3.po new file mode 100644 index 000000000..7d1b739dd --- /dev/null +++ b/library/2to3.po @@ -0,0 +1,716 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) 2001-2022, Python Software Foundation +# This file is distributed under the same license as the Python package. +# FIRST AUTHOR , YEAR. +# +# Translators: +# cissoid , 2018 +# Freesand Leo , 2022 +# +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: Python 3.9\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2022-11-04 14:34+0000\n" +"PO-Revision-Date: 2017-02-16 17:46+0000\n" +"Last-Translator: Freesand Leo , 2022\n" +"Language-Team: Chinese (China) (https://www.transifex.com/python-doc/teams/5390/zh_CN/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: zh_CN\n" +"Plural-Forms: nplurals=1; plural=0;\n" + +#: ../../library/2to3.rst:4 +msgid "2to3 - Automated Python 2 to 3 code translation" +msgstr "2to3 - 自动将 Python 2 代码转为 Python 3 代码" + +#: ../../library/2to3.rst:8 +msgid "" +"2to3 is a Python program that reads Python 2.x source code and applies a " +"series of *fixers* to transform it into valid Python 3.x code. The standard" +" library contains a rich set of fixers that will handle almost all code. " +"2to3 supporting library :mod:`lib2to3` is, however, a flexible and generic " +"library, so it is possible to write your own fixers for 2to3." +msgstr "" +"2to3 是一个 Python 程序,它可以读取 Python 2.x 的源代码并使用一系列的 *修复器* 来将其转换为合法的 Python 3.x " +"代码。 标准库已包含了丰富的修复器,这足以处理几乎所有代码。 不过 2to3 的支持库 :mod:`lib2to3` " +"是一个很灵活通用的库,所以还可以编写你自己的 2to3 修复器。" + +#: ../../library/2to3.rst:18 +msgid "Using 2to3" +msgstr "使用 2to3" + +#: ../../library/2to3.rst:20 +msgid "" +"2to3 will usually be installed with the Python interpreter as a script. It " +"is also located in the :file:`Tools/scripts` directory of the Python root." +msgstr "" +"2to3 通常会作为脚本和 Python 解释器一起安装,你可以在 Python 根目录的 :file:`Tools/scripts` 文件夹下找到它。" + +#: ../../library/2to3.rst:23 +msgid "" +"2to3's basic arguments are a list of files or directories to transform. The" +" directories are recursively traversed for Python sources." +msgstr "2to3 的基本调用参数是一个需要转换的文件或目录列表。对于目录,会递归地寻找其中的 Python 源码。" + +#: ../../library/2to3.rst:26 +msgid "Here is a sample Python 2.x source file, :file:`example.py`::" +msgstr "这里有一个 Python 2.x 的源码文件,:file:`example.py`:" + +#: ../../library/2to3.rst:34 +msgid "It can be converted to Python 3.x code via 2to3 on the command line:" +msgstr "它可以在命令行中使用 2to3 转换成 Python 3.x 版本的代码:" + +#: ../../library/2to3.rst:40 +msgid "" +"A diff against the original source file is printed. 2to3 can also write the" +" needed modifications right back to the source file. (A backup of the " +"original file is made unless :option:`!-n` is also given.) Writing the " +"changes back is enabled with the :option:`!-w` flag:" +msgstr "" +"这个命令会打印出和源文件的区别。通过传入 :option:`!-w` 参数,2to3 也可以把需要的修改写回到原文件中(除非传入了 " +":option:`!-n` 参数,否则会为原始文件创建一个副本):" + +#: ../../library/2to3.rst:49 +msgid "After transformation, :file:`example.py` looks like this::" +msgstr "在转换完成后,:file:`example.py` 看起来像是这样:" + +#: ../../library/2to3.rst:57 +msgid "" +"Comments and exact indentation are preserved throughout the translation " +"process." +msgstr "注释和缩进都会在转换过程中保持不变。" + +#: ../../library/2to3.rst:59 +msgid "" +"By default, 2to3 runs a set of :ref:`predefined fixers <2to3-fixers>`. The " +":option:`!-l` flag lists all available fixers. An explicit set of fixers to" +" run can be given with :option:`!-f`. Likewise the :option:`!-x` explicitly" +" disables a fixer. The following example runs only the ``imports`` and " +"``has_key`` fixers:" +msgstr "" +"默认情况下,2to3 会执行 :ref:`预定义修复器 <2to3-fixers>` 的集合。使用 :option:`!-l` " +"参数可以列出所有可用的修复器。使用 :option:`!-f` 参数可以明确指定需要使用的修复器集合。而使用 :option:`!-x` " +"参数则可以明确指定不使用的修复器。下面的例子会只使用 ``imports`` 和 ``has_key`` 修复器运行:" + +#: ../../library/2to3.rst:68 +msgid "This command runs every fixer except the ``apply`` fixer:" +msgstr "这个命令会执行除了 ``apply`` 之外的所有修复器:" + +#: ../../library/2to3.rst:74 +msgid "" +"Some fixers are *explicit*, meaning they aren't run by default and must be " +"listed on the command line to be run. Here, in addition to the default " +"fixers, the ``idioms`` fixer is run:" +msgstr "" +"有一些修复器是需要 *显式指定* 的,它们默认不会执行,必须在命令行中列出才会执行。比如下面的例子,除了默认的修复器以外,还会执行 ``idioms``" +" 修复器:" + +#: ../../library/2to3.rst:82 +msgid "Notice how passing ``all`` enables all default fixers." +msgstr "注意这里使用 ``all`` 来启用所有默认的修复器。" + +#: ../../library/2to3.rst:84 +msgid "" +"Sometimes 2to3 will find a place in your source code that needs to be " +"changed, but 2to3 cannot fix automatically. In this case, 2to3 will print a" +" warning beneath the diff for a file. You should address the warning in " +"order to have compliant 3.x code." +msgstr "" +"有些情况下 2to3 会找到源码中有一些需要修改,但是无法自动处理的代码。在这种情况下,2to3 " +"会在差异处下面打印一个警告信息。你应该定位到相应的代码并对其进行修改,以使其兼容 Python 3.x。" + +#: ../../library/2to3.rst:89 +msgid "" +"2to3 can also refactor doctests. To enable this mode, use the :option:`!-d`" +" flag. Note that *only* doctests will be refactored. This also doesn't " +"require the module to be valid Python. For example, doctest like examples " +"in a reST document could also be refactored with this option." +msgstr "" +"2to3 也可以重构 doctests。使用 :option:`!-d` 开启这个模式。需要注意*只有* doctests " +"会被重构。这种模式下不需要文件是合法的 Python 代码。举例来说,reST 文档中类似 doctests 的示例也可以使用这个选项进行重构。" + +#: ../../library/2to3.rst:94 +msgid "" +"The :option:`!-v` option enables output of more information on the " +"translation process." +msgstr ":option:`!-v` 选项可以输出更多转换程序的详细信息。" + +#: ../../library/2to3.rst:97 +msgid "" +"Since some print statements can be parsed as function calls or statements, " +"2to3 cannot always read files containing the print function. When 2to3 " +"detects the presence of the ``from __future__ import print_function`` " +"compiler directive, it modifies its internal grammar to interpret " +":func:`print` as a function. This change can also be enabled manually with " +"the :option:`!-p` flag. Use :option:`!-p` to run fixers on code that " +"already has had its print statements converted. Also :option:`!-e` can be " +"used to make :func:`exec` a function." +msgstr "" +"由于某些 print 语句可被解读为函数调用或是语句,2to3 并不总能读取包含 print 函数的文件。 当 2to3 检测到存在 ``from " +"__future__ import print_function`` 编译器指令时,会修改其内部语法将 :func:`print` 解读为函数。 " +"这一变动也可以使用 :option:`!-p` 旗标手动开启。 使用 :option:`!-p` 来为已转换过 print 语句的代码运行修复器。 " +"也可以使用 :option:`!-e` 将 :func:`exec` 解读为函数。" + +#: ../../library/2to3.rst:105 +msgid "" +"The :option:`!-o` or :option:`!--output-dir` option allows specification of " +"an alternate directory for processed output files to be written to. The " +":option:`!-n` flag is required when using this as backup files do not make " +"sense when not overwriting the input files." +msgstr "" +":option:`!-o` 或 :option:`!--output-dir` " +"选项可以指定将转换后的文件写入其他目录中。由于这种情况下不会覆写原始文件,所以创建副本文件毫无意义,因此也需要使用 :option:`!-n` " +"选项来禁用创建副本。" + +#: ../../library/2to3.rst:110 +msgid "The :option:`!-o` option was added." +msgstr "增加了 :option:`!-o` 选项。" + +#: ../../library/2to3.rst:113 +msgid "" +"The :option:`!-W` or :option:`!--write-unchanged-files` flag tells 2to3 to " +"always write output files even if no changes were required to the file. " +"This is most useful with :option:`!-o` so that an entire Python source tree " +"is copied with translation from one directory to another. This option " +"implies the :option:`!-w` flag as it would not make sense otherwise." +msgstr "" +":option:`!-W` 或 :option:`!--write-unchanged-files` 选项用来告诉 2to3 " +"始终需要输出文件,即使没有任何改动。这在使用 :option:`!-o` 参数时十分有用,这样就可以将整个 Python " +"源码包完整地转换到另一个目录。这个选项隐含了 :option:`!-w` 选项,否则等于没有作用。" + +#: ../../library/2to3.rst:119 +msgid "The :option:`!-W` flag was added." +msgstr "增加了 :option:`!-W` 选项。" + +#: ../../library/2to3.rst:122 +msgid "" +"The :option:`!--add-suffix` option specifies a string to append to all " +"output filenames. The :option:`!-n` flag is required when specifying this " +"as backups are not necessary when writing to different filenames. Example:" +msgstr "" +":option:`!--add-suffix` " +"选项接受一个字符串,用来作为后缀附加在输出文件名后面的后面。由于写入的文件名与原始文件不同,所以没有必要创建副本,因此 :option:`!-n` " +"选项也是必要的。举个例子:" + +#: ../../library/2to3.rst:130 +msgid "Will cause a converted file named ``example.py3`` to be written." +msgstr "这样会把转换后的文件写入 ``example.py3`` 文件。" + +#: ../../library/2to3.rst:132 +msgid "The :option:`!--add-suffix` option was added." +msgstr "增加了 :option:`!--add-suffix` 选项。" + +#: ../../library/2to3.rst:135 +msgid "To translate an entire project from one directory tree to another use:" +msgstr "将整个项目从一个目录转换到另一个目录可以用这样的命令:" + +#: ../../library/2to3.rst:145 +msgid "Fixers" +msgstr "修复器" + +#: ../../library/2to3.rst:147 +msgid "" +"Each step of transforming code is encapsulated in a fixer. The command " +"``2to3 -l`` lists them. As :ref:`documented above <2to3-using>`, each can " +"be turned on and off individually. They are described here in more detail." +msgstr "" +"转换代码的每一个步骤都封装在修复器中。可以使用 ``2to3 -l`` 来列出可用的修复器。:ref:`之前已经提到 " +"<2to3-using>`,每个修复器都可以独立地打开或是关闭。下面会对各个修复器做更详细的描述。" + +#: ../../library/2to3.rst:154 +msgid "" +"Removes usage of :func:`apply`. For example ``apply(function, *args, " +"**kwargs)`` is converted to ``function(*args, **kwargs)``." +msgstr "" +"移除对 :func:`apply` 的使用,举例来说,``apply(function, *args, **kwargs)`` 会被转换成 " +"``function(*args, **kwargs)``。" + +#: ../../library/2to3.rst:159 +msgid "" +"Replaces deprecated :mod:`unittest` method names with the correct ones." +msgstr "将已弃用的 :mod:`unittest` 方法替换为正确的。" + +#: ../../library/2to3.rst:162 ../../library/2to3.rst:351 +msgid "From" +msgstr "Python 2.x" + +#: ../../library/2to3.rst:162 ../../library/2to3.rst:351 +msgid "To" +msgstr "Python 3.x" + +#: ../../library/2to3.rst:164 +msgid "``failUnlessEqual(a, b)``" +msgstr "``failUnlessEqual(a, b)``" + +#: ../../library/2to3.rst:164 ../../library/2to3.rst:166 +msgid ":meth:`assertEqual(a, b) `" +msgstr ":meth:`assertEqual(a, b) `" + +#: ../../library/2to3.rst:166 +msgid "``assertEquals(a, b)``" +msgstr "``assertEquals(a, b)``" + +#: ../../library/2to3.rst:168 +msgid "``failIfEqual(a, b)``" +msgstr "``failIfEqual(a, b)``" + +#: ../../library/2to3.rst:168 ../../library/2to3.rst:170 +msgid ":meth:`assertNotEqual(a, b) `" +msgstr ":meth:`assertNotEqual(a, b) `" + +#: ../../library/2to3.rst:170 +msgid "``assertNotEquals(a, b)``" +msgstr "``assertNotEquals(a, b)``" + +#: ../../library/2to3.rst:172 +msgid "``failUnless(a)``" +msgstr "``failUnless(a)``" + +#: ../../library/2to3.rst:172 ../../library/2to3.rst:174 +msgid ":meth:`assertTrue(a) `" +msgstr ":meth:`assertTrue(a) `" + +#: ../../library/2to3.rst:174 +msgid "``assert_(a)``" +msgstr "``assert_(a)``" + +#: ../../library/2to3.rst:176 +msgid "``failIf(a)``" +msgstr "``failIf(a)``" + +#: ../../library/2to3.rst:176 +msgid ":meth:`assertFalse(a) `" +msgstr ":meth:`assertFalse(a) `" + +#: ../../library/2to3.rst:178 +msgid "``failUnlessRaises(exc, cal)``" +msgstr "``failUnlessRaises(exc, cal)``" + +#: ../../library/2to3.rst:178 +msgid ":meth:`assertRaises(exc, cal) `" +msgstr ":meth:`assertRaises(exc, cal) `" + +#: ../../library/2to3.rst:180 +msgid "``failUnlessAlmostEqual(a, b)``" +msgstr "``failUnlessAlmostEqual(a, b)``" + +#: ../../library/2to3.rst:180 ../../library/2to3.rst:182 +msgid ":meth:`assertAlmostEqual(a, b) `" +msgstr ":meth:`assertAlmostEqual(a, b) `" + +#: ../../library/2to3.rst:182 +msgid "``assertAlmostEquals(a, b)``" +msgstr "``assertAlmostEquals(a, b)``" + +#: ../../library/2to3.rst:184 +msgid "``failIfAlmostEqual(a, b)``" +msgstr "``failIfAlmostEqual(a, b)``" + +#: ../../library/2to3.rst:184 ../../library/2to3.rst:186 +msgid "" +":meth:`assertNotAlmostEqual(a, b) `" +msgstr "" +":meth:`assertNotAlmostEqual(a, b) `" + +#: ../../library/2to3.rst:186 +msgid "``assertNotAlmostEquals(a, b)``" +msgstr "``assertNotAlmostEquals(a, b)``" + +#: ../../library/2to3.rst:192 +msgid "Converts :class:`basestring` to :class:`str`." +msgstr "将 :class:`basestring` 转换为 :class:`str`。" + +#: ../../library/2to3.rst:196 +msgid "" +"Converts :class:`buffer` to :class:`memoryview`. This fixer is optional " +"because the :class:`memoryview` API is similar but not exactly the same as " +"that of :class:`buffer`." +msgstr "" +"将 :class:`buffer` 转换为 :class:`memoryview`。这个修复器是可选的,因为 :class:`memoryview` " +"API 和 :class:`buffer` 很相似,但不完全一样。" + +#: ../../library/2to3.rst:202 +msgid "" +"Fixes dictionary iteration methods. :meth:`dict.iteritems` is converted to " +":meth:`dict.items`, :meth:`dict.iterkeys` to :meth:`dict.keys`, and " +":meth:`dict.itervalues` to :meth:`dict.values`. Similarly, " +":meth:`dict.viewitems`, :meth:`dict.viewkeys` and :meth:`dict.viewvalues` " +"are converted respectively to :meth:`dict.items`, :meth:`dict.keys` and " +":meth:`dict.values`. It also wraps existing usages of :meth:`dict.items`, " +":meth:`dict.keys`, and :meth:`dict.values` in a call to :class:`list`." +msgstr "" +"修复字典迭代方法。:meth:`dict.iteritems` 会转换成 " +":meth:`dict.items`,:meth:`dict.iterkeys` 会转换成 " +":meth:`dict.keys`,:meth:`dict.itervalues` 会转换成 " +":meth:`dict.values`。类似的,:meth:`dict.viewitems`,:meth:`dict.viewkeys` 和 " +":meth:`dict.viewvalues` 会分别转换成 :meth:`dict.items`,:meth:`dict.keys` 和 " +":meth:`dict.values`。另外也会将原有的 :meth:`dict.items`,:meth:`dict.keys` 和 " +":meth:`dict.values` 方法调用用 :class:`list` 包装一层。" + +#: ../../library/2to3.rst:212 +msgid "Converts ``except X, T`` to ``except X as T``." +msgstr "将 ``except X, T`` 转换为 ``except X as T``。" + +#: ../../library/2to3.rst:216 +msgid "Converts the ``exec`` statement to the :func:`exec` function." +msgstr "将 ``exec`` 语句转换为 :func:`exec` 函数调用。" + +#: ../../library/2to3.rst:220 +msgid "" +"Removes usage of :func:`execfile`. The argument to :func:`execfile` is " +"wrapped in calls to :func:`open`, :func:`compile`, and :func:`exec`." +msgstr "" +"移除 :func:`execfile` 的使用。:func:`execfile` 的实参会使用 :func:`open`,:func:`compile`" +" 和 :func:`exec` 包装。" + +#: ../../library/2to3.rst:225 +msgid "" +"Changes assignment of :attr:`sys.exitfunc` to use of the :mod:`atexit` " +"module." +msgstr "将对 :attr:`sys.exitfunc` 的赋值改为使用 :mod:`atexit` 模块代替。" + +#: ../../library/2to3.rst:230 +msgid "Wraps :func:`filter` usage in a :class:`list` call." +msgstr "将 :func:`filter` 函数用 :class:`list` 包装一层。" + +#: ../../library/2to3.rst:234 +msgid "" +"Fixes function attributes that have been renamed. For example, " +"``my_function.func_closure`` is converted to ``my_function.__closure__``." +msgstr "" +"修复已经重命名的函数属性。比如 ``my_function.func_closure`` 会被转换为 " +"``my_function.__closure__``。" + +#: ../../library/2to3.rst:239 +msgid "Removes ``from __future__ import new_feature`` statements." +msgstr "移除 ``from __future__ import new_feature`` 语句。" + +#: ../../library/2to3.rst:243 +msgid "Renames :func:`os.getcwdu` to :func:`os.getcwd`." +msgstr "将 :func:`os.getcwdu` 重命名为 :func:`os.getcwd`。" + +#: ../../library/2to3.rst:247 +msgid "Changes ``dict.has_key(key)`` to ``key in dict``." +msgstr "将 ``dict.has_key(key)`` 转换为 ``key in dict``。" + +#: ../../library/2to3.rst:251 +msgid "" +"This optional fixer performs several transformations that make Python code " +"more idiomatic. Type comparisons like ``type(x) is SomeClass`` and " +"``type(x) == SomeClass`` are converted to ``isinstance(x, SomeClass)``. " +"``while 1`` becomes ``while True``. This fixer also tries to make use of " +":func:`sorted` in appropriate places. For example, this block ::" +msgstr "" +"这是一个可选的修复器,会进行多种转换,将 Python 代码变成更加常见的写法。类似 ``type(x) is SomeClass`` 和 " +"``type(x) == SomeClass`` 的类型对比会被转换成 ``isinstance(x, SomeClass)``。``while 1``" +" 转换成 ``while True``。这个修复器还会在合适的地方使用 :func:`sorted` 函数。举个例子,这样的代码块:" + +#: ../../library/2to3.rst:260 +msgid "is changed to ::" +msgstr "会被转换为:" + +#: ../../library/2to3.rst:266 +msgid "Detects sibling imports and converts them to relative imports." +msgstr "检测 sibling imports,并将其转换成相对 import。" + +#: ../../library/2to3.rst:270 +msgid "Handles module renames in the standard library." +msgstr "处理标准库模块的重命名。" + +#: ../../library/2to3.rst:274 +msgid "" +"Handles other modules renames in the standard library. It is separate from " +"the :2to3fixer:`imports` fixer only because of technical limitations." +msgstr "处理标准库中其他模块的重命名。这个修复器由于一些技术上的限制,因此和 :2to3fixer:`imports` 拆分开了。" + +#: ../../library/2to3.rst:279 +msgid "Converts ``input(prompt)`` to ``eval(input(prompt))``." +msgstr "将 ``input(prompt)`` 转换为 ``eval(input(prompt))``。" + +#: ../../library/2to3.rst:283 +msgid "Converts :func:`intern` to :func:`sys.intern`." +msgstr "将 :func:`intern` 转换为 :func:`sys.intern`。" + +#: ../../library/2to3.rst:287 +msgid "" +"Fixes duplicate types in the second argument of :func:`isinstance`. For " +"example, ``isinstance(x, (int, int))`` is converted to ``isinstance(x, " +"int)`` and ``isinstance(x, (int, float, int))`` is converted to " +"``isinstance(x, (int, float))``." +msgstr "" +"修复 :func:`isinstance` 函数第二个实参中重复的类型。举例来说,``isinstance(x, (int, int))`` 会转换为 " +"``isinstance(x, int)``, ``isinstance(x, (int, float, int))`` 会转换为 " +"``isinstance(x, (int, float))``。" + +#: ../../library/2to3.rst:294 +msgid "" +"Removes imports of :func:`itertools.ifilter`, :func:`itertools.izip`, and " +":func:`itertools.imap`. Imports of :func:`itertools.ifilterfalse` are also " +"changed to :func:`itertools.filterfalse`." +msgstr "" +"移除 :func:`itertools.ifilter`,:func:`itertools.izip` 以及 " +":func:`itertools.imap` 的 import。对 :func:`itertools.ifilterfalse` 的 import " +"也会替换成 :func:`itertools.filterfalse`。" + +#: ../../library/2to3.rst:300 +msgid "" +"Changes usage of :func:`itertools.ifilter`, :func:`itertools.izip`, and " +":func:`itertools.imap` to their built-in equivalents. " +":func:`itertools.ifilterfalse` is changed to :func:`itertools.filterfalse`." +msgstr "" +"修改 :func:`itertools.ifilter`,:func:`itertools.izip` 和 :func:`itertools.imap`" +" 的调用为对应的内建实现。:func:`itertools.ifilterfalse` 会替换成 " +":func:`itertools.filterfalse`。" + +#: ../../library/2to3.rst:306 +msgid "Renames :class:`long` to :class:`int`." +msgstr "将 :class:`long` 重命名为 :class:`int`。" + +#: ../../library/2to3.rst:310 +msgid "" +"Wraps :func:`map` in a :class:`list` call. It also changes ``map(None, x)``" +" to ``list(x)``. Using ``from future_builtins import map`` disables this " +"fixer." +msgstr "" +"用 :class:`list` 包装 :func:`map`。同时也会将 ``map(None, x)`` 替换为 ``list(x)``。使用 " +"``from future_builtins import map`` 禁用这个修复器。" + +#: ../../library/2to3.rst:316 +msgid "" +"Converts the old metaclass syntax (``__metaclass__ = Meta`` in the class " +"body) to the new (``class X(metaclass=Meta)``)." +msgstr "" +"将老的元类语法(类体中的 ``__metaclass__ = Meta``)替换为新的(``class X(metaclass=Meta)``)。" + +#: ../../library/2to3.rst:321 +msgid "" +"Fixes old method attribute names. For example, ``meth.im_func`` is " +"converted to ``meth.__func__``." +msgstr "修复老的方法属性名。例如 ``meth.im_func`` 会被转换为 ``meth.__func__``。" + +#: ../../library/2to3.rst:326 +msgid "Converts the old not-equal syntax, ``<>``, to ``!=``." +msgstr "转换老的不等语法,将 ``<>`` 转为 ``!=``。" + +#: ../../library/2to3.rst:330 +msgid "" +"Converts the use of iterator's :meth:`~iterator.next` methods to the " +":func:`next` function. It also renames :meth:`next` methods to " +":meth:`~iterator.__next__`." +msgstr "" +"将迭代器的 :meth:`~iterator.next` 方法调用转为 :func:`next` 函数。也会将 :meth:`next` 方法重命名为 " +":meth:`~iterator.__next__`。" + +#: ../../library/2to3.rst:336 +msgid "" +"Renames definitions of methods called :meth:`__nonzero__` to " +":meth:`~object.__bool__`." +msgstr "将被调用的方法定义 :meth:`__nonzero__` 改名为 :meth:`~object.__bool__`。" + +#: ../../library/2to3.rst:341 +msgid "Converts octal literals into the new syntax." +msgstr "将八进制字面量转为新的语法。" + +#: ../../library/2to3.rst:345 +msgid "" +"Converts calls to various functions in the :mod:`operator` module to other, " +"but equivalent, function calls. When needed, the appropriate ``import`` " +"statements are added, e.g. ``import collections.abc``. The following " +"mapping are made:" +msgstr "" +"将 :mod:`operator` 模块中的许多方法调用转为其他的等效函数调用。如果有需要,会添加适当的 ``import`` 语句,比如 " +"``import collections.abc``。有以下转换映射:" + +#: ../../library/2to3.rst:353 +msgid "``operator.isCallable(obj)``" +msgstr "``operator.isCallable(obj)``" + +#: ../../library/2to3.rst:353 +msgid "``callable(obj)``" +msgstr "``callable(obj)``" + +#: ../../library/2to3.rst:354 +msgid "``operator.sequenceIncludes(obj)``" +msgstr "``operator.sequenceIncludes(obj)``" + +#: ../../library/2to3.rst:354 +msgid "``operator.contains(obj)``" +msgstr "``operator.contains(obj)``" + +#: ../../library/2to3.rst:355 +msgid "``operator.isSequenceType(obj)``" +msgstr "``operator.isSequenceType(obj)``" + +#: ../../library/2to3.rst:355 +msgid "``isinstance(obj, collections.abc.Sequence)``" +msgstr "``isinstance(obj, collections.abc.Sequence)``" + +#: ../../library/2to3.rst:356 +msgid "``operator.isMappingType(obj)``" +msgstr "``operator.isMappingType(obj)``" + +#: ../../library/2to3.rst:356 +msgid "``isinstance(obj, collections.abc.Mapping)``" +msgstr "``isinstance(obj, collections.abc.Mapping)``" + +#: ../../library/2to3.rst:357 +msgid "``operator.isNumberType(obj)``" +msgstr "``operator.isNumberType(obj)``" + +#: ../../library/2to3.rst:357 +msgid "``isinstance(obj, numbers.Number)``" +msgstr "``isinstance(obj, numbers.Number)``" + +#: ../../library/2to3.rst:358 +msgid "``operator.repeat(obj, n)``" +msgstr "``operator.repeat(obj, n)``" + +#: ../../library/2to3.rst:358 +msgid "``operator.mul(obj, n)``" +msgstr "``operator.mul(obj, n)``" + +#: ../../library/2to3.rst:359 +msgid "``operator.irepeat(obj, n)``" +msgstr "``operator.irepeat(obj, n)``" + +#: ../../library/2to3.rst:359 +msgid "``operator.imul(obj, n)``" +msgstr "``operator.imul(obj, n)``" + +#: ../../library/2to3.rst:364 +msgid "" +"Add extra parenthesis where they are required in list comprehensions. For " +"example, ``[x for x in 1, 2]`` becomes ``[x for x in (1, 2)]``." +msgstr "在列表生成式中增加必须的括号。例如将 ``[x for x in 1, 2]`` 转换为 ``[x for x in (1, 2)]``。" + +#: ../../library/2to3.rst:369 +msgid "Converts the ``print`` statement to the :func:`print` function." +msgstr "将 ``print`` 语句转换为 :func:`print` 函数。" + +#: ../../library/2to3.rst:373 +msgid "" +"Converts ``raise E, V`` to ``raise E(V)``, and ``raise E, V, T`` to ``raise " +"E(V).with_traceback(T)``. If ``E`` is a tuple, the translation will be " +"incorrect because substituting tuples for exceptions has been removed in " +"3.0." +msgstr "" +"将 ``raise E, V`` 转换为 ``raise E(V)``,将 ``raise E, V, T`` 转换为 ``raise " +"E(V).with_traceback(T)``。如果 ``E`` 是元组,这样的转换是不正确的,因为用元组代替异常的做法在 3.0 中已经移除了。" + +#: ../../library/2to3.rst:379 +msgid "Converts :func:`raw_input` to :func:`input`." +msgstr "将 :func:`raw_input` 转换为 :func:`input`。" + +#: ../../library/2to3.rst:383 +msgid "Handles the move of :func:`reduce` to :func:`functools.reduce`." +msgstr "将 :func:`reduce` 转换为 :func:`functools.reduce`。" + +#: ../../library/2to3.rst:387 +msgid "Converts :func:`reload` to :func:`importlib.reload`." +msgstr "将 :func:`reload` 转换为 :func:`importlib.reload`。" + +#: ../../library/2to3.rst:391 +msgid "Changes :data:`sys.maxint` to :data:`sys.maxsize`." +msgstr "将 :data:`sys.maxint` 转换为 :data:`sys.maxsize`。" + +#: ../../library/2to3.rst:395 +msgid "Replaces backtick repr with the :func:`repr` function." +msgstr "将反引号 repr 表达式替换为 :func:`repr` 函数。" + +#: ../../library/2to3.rst:399 +msgid "" +"Replaces use of the :class:`set` constructor with set literals. This fixer " +"is optional." +msgstr "将 :class:`set` 构造函数替换为 set literals 写法。这个修复器是可选的。" + +#: ../../library/2to3.rst:404 +msgid "Renames :exc:`StandardError` to :exc:`Exception`." +msgstr "将 :exc:`StandardError` 重命名为 :exc:`Exception`。" + +#: ../../library/2to3.rst:408 +msgid "" +"Changes the deprecated :data:`sys.exc_value`, :data:`sys.exc_type`, " +":data:`sys.exc_traceback` to use :func:`sys.exc_info`." +msgstr "" +"将弃用的 :data:`sys.exc_value`,:data:`sys.exc_type`,:data:`sys.exc_traceback` " +"替换为 :func:`sys.exc_info` 的用法。" + +#: ../../library/2to3.rst:413 +msgid "Fixes the API change in generator's :meth:`throw` method." +msgstr "修复生成器的 :meth:`throw` 方法的 API 变更。" + +#: ../../library/2to3.rst:417 +msgid "" +"Removes implicit tuple parameter unpacking. This fixer inserts temporary " +"variables." +msgstr "移除隐式的元组参数解包。这个修复器会插入临时变量。" + +#: ../../library/2to3.rst:422 +msgid "" +"Fixes code broken from the removal of some members in the :mod:`types` " +"module." +msgstr "修复 :mod:`type` 模块中一些成员的移除引起的代码问题。" + +#: ../../library/2to3.rst:427 +msgid "Renames :class:`unicode` to :class:`str`." +msgstr "将 :class:`unicode` 重命名为 :class:`str`。" + +#: ../../library/2to3.rst:431 +msgid "" +"Handles the rename of :mod:`urllib` and :mod:`urllib2` to the :mod:`urllib` " +"package." +msgstr "将 :mod:`urllib` 和 :mod:`urllib2` 重命名为 :mod:`urllib` 包。" + +#: ../../library/2to3.rst:436 +msgid "" +"Removes excess whitespace from comma separated items. This fixer is " +"optional." +msgstr "移除逗号分隔的元素之间多余的空白。这个修复器是可选的。" + +#: ../../library/2to3.rst:441 +msgid "" +"Renames :func:`xrange` to :func:`range` and wraps existing :func:`range` " +"calls with :class:`list`." +msgstr "" +"将 :func:`xrange` 重命名为 :func:`range`,并用 :class:`list` 包装原有的 :func:`range`。" + +#: ../../library/2to3.rst:446 +msgid "Changes ``for x in file.xreadlines()`` to ``for x in file``." +msgstr "将 ``for x in file.xreadlines()`` 转换为 ``for x in file``。" + +#: ../../library/2to3.rst:450 +msgid "" +"Wraps :func:`zip` usage in a :class:`list` call. This is disabled when " +"``from future_builtins import zip`` appears." +msgstr "" +"用 :class:`list` 包装 :func:`zip`。如果使用了 ``from future_builtins import zip`` " +"的话会禁用。" + +#: ../../library/2to3.rst:455 +msgid ":mod:`lib2to3` - 2to3's library" +msgstr ":mod:`lib2to3` —— 2to3 支持库" + +#: ../../library/2to3.rst:464 +msgid "**Source code:** :source:`Lib/lib2to3/`" +msgstr "**源代码:** :source:`Lib/lib2to3/`" + +#: ../../library/2to3.rst:468 +msgid "" +"Python 3.9 will switch to a PEG parser (see :pep:`617`), and Python 3.10 may" +" include new language syntax that is not parsable by lib2to3's LL(1) parser." +" The ``lib2to3`` module may be removed from the standard library in a future" +" Python version. Consider third-party alternatives such as `LibCST`_ or " +"`parso`_." +msgstr "" +"Python 3.9 将切换到 PEG 解析器 (参见 :pep:`617`),Python 3.10 可能会包含 lib2to3 的 LL(1) " +"解析器所不能解析的新语法。 ``lib2to3`` 模块可能会在未来的 Python 版本中被移出标准库。 请考虑使用第三方替代例如 `LibCST`_" +" 或 `parso`_。" + +#: ../../library/2to3.rst:477 +msgid "" +"The :mod:`lib2to3` API should be considered unstable and may change " +"drastically in the future." +msgstr ":mod:`lib2to3` API 并不稳定,并可能在未来大幅修改。" diff --git a/library/__future__.po b/library/__future__.po new file mode 100644 index 000000000..cab8f1bae --- /dev/null +++ b/library/__future__.po @@ -0,0 +1,294 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) 2001-2022, Python Software Foundation +# This file is distributed under the same license as the Python package. +# FIRST AUTHOR , YEAR. +# +# Translators: +# cissoid , 2018 +# Alpha Du , 2022 +# +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: Python 3.9\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2022-11-04 14:34+0000\n" +"PO-Revision-Date: 2017-02-16 17:47+0000\n" +"Last-Translator: Alpha Du , 2022\n" +"Language-Team: Chinese (China) (https://www.transifex.com/python-doc/teams/5390/zh_CN/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: zh_CN\n" +"Plural-Forms: nplurals=1; plural=0;\n" + +#: ../../library/__future__.rst:2 +msgid ":mod:`__future__` --- Future statement definitions" +msgstr ":mod:`__future__` --- Future 语句定义" + +#: ../../library/__future__.rst:7 +msgid "**Source code:** :source:`Lib/__future__.py`" +msgstr "**源代码:** :source:`Lib/__future__.py`" + +#: ../../library/__future__.rst:11 +msgid ":mod:`__future__` is a real module, and serves three purposes:" +msgstr ":mod:`__future__` 是一个真正的模块,这主要有 3 个原因:" + +#: ../../library/__future__.rst:13 +msgid "" +"To avoid confusing existing tools that analyze import statements and expect " +"to find the modules they're importing." +msgstr "避免混淆已有的分析 import 语句并查找 import 的模块的工具。" + +#: ../../library/__future__.rst:16 +msgid "" +"To ensure that :ref:`future statements ` run under releases prior to" +" 2.1 at least yield runtime exceptions (the import of :mod:`__future__` will" +" fail, because there was no module of that name prior to 2.1)." +msgstr "" +"确保 :ref:`future 语句 ` 在 2.1 之前的版本运行时至少能抛出 runtime 异常(import " +":mod:`__future__` 会失败,因为 2.1 版本之前没有这个模块)。" + +#: ../../library/__future__.rst:20 +msgid "" +"To document when incompatible changes were introduced, and when they will be" +" --- or were --- made mandatory. This is a form of executable " +"documentation, and can be inspected programmatically via importing " +":mod:`__future__` and examining its contents." +msgstr "" +"当引入不兼容的修改时,可以记录其引入的时间以及强制使用的时间。这是一种可执行的文档,并且可以通过 import :mod:`__future__` " +"来做程序性的检查。" + +#: ../../library/__future__.rst:25 +msgid "Each statement in :file:`__future__.py` is of the form::" +msgstr ":file:`__future__.py` 中的每一条语句都是以下格式的:" + +#: ../../library/__future__.rst:31 +msgid "" +"where, normally, *OptionalRelease* is less than *MandatoryRelease*, and both" +" are 5-tuples of the same form as :data:`sys.version_info`::" +msgstr "" +"通常 *OptionalRelease* 要比 *MandatoryRelease* 小,并且都是和 :data:`sys.version_info` " +"格式一致的 5 元素元组。" + +#: ../../library/__future__.rst:41 +msgid "" +"*OptionalRelease* records the first release in which the feature was " +"accepted." +msgstr "*OptionalRelease* 记录了一个特性首次发布时的 Python 版本。" + +#: ../../library/__future__.rst:43 +msgid "" +"In the case of a *MandatoryRelease* that has not yet occurred, " +"*MandatoryRelease* predicts the release in which the feature will become " +"part of the language." +msgstr "在 *MandatoryRelases* 还没有发布时,*MandatoryRelease* 表示该特性会变成语言的一部分的预测时间。" + +#: ../../library/__future__.rst:47 +msgid "" +"Else *MandatoryRelease* records when the feature became part of the " +"language; in releases at or after that, modules no longer need a future " +"statement to use the feature in question, but may continue to use such " +"imports." +msgstr "" +"其他情况下,*MandatoryRelease* 用来记录这个特性是何时成为语言的一部分的。从该版本往后,使用该特性将不需要 future " +"语句,不过很多人还是会加上对应的 import。" + +#: ../../library/__future__.rst:51 +msgid "" +"*MandatoryRelease* may also be ``None``, meaning that a planned feature got " +"dropped." +msgstr "*MandatoryRelease* 也可能是 ``None``, 表示这个特性已经被撤销。" + +#: ../../library/__future__.rst:54 +msgid "" +"Instances of class :class:`_Feature` have two corresponding methods, " +":meth:`getOptionalRelease` and :meth:`getMandatoryRelease`." +msgstr "" +":class:`_Feature` 类的实例有两个对应的方法,:meth:`getOptionalRelease` 和 " +":meth:`getMandatoryRelease`。" + +#: ../../library/__future__.rst:57 +msgid "" +"*CompilerFlag* is the (bitfield) flag that should be passed in the fourth " +"argument to the built-in function :func:`compile` to enable the feature in " +"dynamically compiled code. This flag is stored in the :attr:`compiler_flag`" +" attribute on :class:`_Feature` instances." +msgstr "" +"*CompilerFlag* 是一个(位)标记,对于动态编译的代码,需要将这个标记作为第四个参数传入内建函数 :func:`compile` " +"中以开启对应的特性。这个标记存储在 :class:`_Feature` 类实例的 :attr:`compiler_flag` 属性中。" + +#: ../../library/__future__.rst:62 +msgid "" +"No feature description will ever be deleted from :mod:`__future__`. Since " +"its introduction in Python 2.1 the following features have found their way " +"into the language using this mechanism:" +msgstr ":mod:`__future__` 中不会删除特性的描述。从 Python 2.1 中首次加入以来,通过这种方式引入了以下特性:" + +#: ../../library/__future__.rst:67 +msgid "feature" +msgstr "特性" + +#: ../../library/__future__.rst:67 +msgid "optional in" +msgstr "可选版本" + +#: ../../library/__future__.rst:67 +msgid "mandatory in" +msgstr "强制加入版本" + +#: ../../library/__future__.rst:67 +msgid "effect" +msgstr "效果" + +#: ../../library/__future__.rst:69 +msgid "nested_scopes" +msgstr "nested_scopes" + +#: ../../library/__future__.rst:69 +msgid "2.1.0b1" +msgstr "2.1.0b1" + +#: ../../library/__future__.rst:69 +msgid "2.2" +msgstr "2.2" + +#: ../../library/__future__.rst:69 +msgid ":pep:`227`: *Statically Nested Scopes*" +msgstr ":pep:`227`: *Statically Nested Scopes*" + +#: ../../library/__future__.rst:72 +msgid "generators" +msgstr "generators" + +#: ../../library/__future__.rst:72 +msgid "2.2.0a1" +msgstr "2.2.0a1" + +#: ../../library/__future__.rst:72 +msgid "2.3" +msgstr "2.3" + +#: ../../library/__future__.rst:72 +msgid ":pep:`255`: *Simple Generators*" +msgstr ":pep:`255`: *Simple Generators*" + +#: ../../library/__future__.rst:75 +msgid "division" +msgstr "division" + +#: ../../library/__future__.rst:75 +msgid "2.2.0a2" +msgstr "2.2.0a2" + +#: ../../library/__future__.rst:75 ../../library/__future__.rst:78 +#: ../../library/__future__.rst:84 ../../library/__future__.rst:87 +msgid "3.0" +msgstr "3.0" + +#: ../../library/__future__.rst:75 +msgid ":pep:`238`: *Changing the Division Operator*" +msgstr ":pep:`238`: *Changing the Division Operator*" + +#: ../../library/__future__.rst:78 +msgid "absolute_import" +msgstr "absolute_import" + +#: ../../library/__future__.rst:78 ../../library/__future__.rst:81 +msgid "2.5.0a1" +msgstr "2.5.0a1" + +#: ../../library/__future__.rst:78 +msgid ":pep:`328`: *Imports: Multi-Line and Absolute/Relative*" +msgstr ":pep:`328`: *Imports: Multi-Line and Absolute/Relative*" + +#: ../../library/__future__.rst:81 +msgid "with_statement" +msgstr "with_statement" + +#: ../../library/__future__.rst:81 +msgid "2.6" +msgstr "2.6" + +#: ../../library/__future__.rst:81 +msgid ":pep:`343`: *The \"with\" Statement*" +msgstr ":pep:`343`: *The \"with\" Statement*" + +#: ../../library/__future__.rst:84 +msgid "print_function" +msgstr "print_function" + +#: ../../library/__future__.rst:84 ../../library/__future__.rst:87 +msgid "2.6.0a2" +msgstr "2.6.0a2" + +#: ../../library/__future__.rst:84 +msgid ":pep:`3105`: *Make print a function*" +msgstr ":pep:`3105`: *Make print a function*" + +#: ../../library/__future__.rst:87 +msgid "unicode_literals" +msgstr "unicode_literals" + +#: ../../library/__future__.rst:87 +msgid ":pep:`3112`: *Bytes literals in Python 3000*" +msgstr ":pep:`3112`: *Bytes literals in Python 3000*" + +#: ../../library/__future__.rst:90 +msgid "generator_stop" +msgstr "generator_stop" + +#: ../../library/__future__.rst:90 +msgid "3.5.0b1" +msgstr "3.5.0b1" + +#: ../../library/__future__.rst:90 +msgid "3.7" +msgstr "3.7" + +#: ../../library/__future__.rst:90 +msgid ":pep:`479`: *StopIteration handling inside generators*" +msgstr ":pep:`479`: *StopIteration handling inside generators*" + +#: ../../library/__future__.rst:93 +msgid "annotations" +msgstr "annotations" + +#: ../../library/__future__.rst:93 +msgid "3.7.0b1" +msgstr "3.7.0b1" + +#: ../../library/__future__.rst:93 +msgid "TBD [1]_" +msgstr "TBD [1]_" + +#: ../../library/__future__.rst:93 +msgid ":pep:`563`: *Postponed evaluation of annotations*" +msgstr ":pep:`563`: *Postponed evaluation of annotations*" + +#: ../../library/__future__.rst:100 +msgid "" +"``from __future__ import annotations`` was previously scheduled to become " +"mandatory in Python 3.10, but the Python Steering Council twice decided to " +"delay the change (`announcement for Python 3.10 " +"`__; `announcement " +"for Python 3.11 `__). No final " +"decision has been made yet. See also :pep:`563` and :pep:`649`." +msgstr "" +"先前计划在 Python 3.10 中强制使用 ``from __future__ import annotations`` " +",但Python指导委员会两次决定推迟这一改变( `Python 3.10 的公告 " +"`__ ; `Python 3.11 " +"的公告 `__ " +")。目前还没有做出最终决定。参见 :pep:`563` 和 :pep:`649` 。" + +#: ../../library/__future__.rst:110 +msgid ":ref:`future`" +msgstr ":ref:`future`" + +#: ../../library/__future__.rst:111 +msgid "How the compiler treats future imports." +msgstr "编译器怎样处理 future import。" diff --git a/library/__main__.po b/library/__main__.po new file mode 100644 index 000000000..176a87074 --- /dev/null +++ b/library/__main__.po @@ -0,0 +1,53 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) 2001-2022, Python Software Foundation +# This file is distributed under the same license as the Python package. +# FIRST AUTHOR , YEAR. +# +# Translators: +# cissoid , 2018 +# Alpha Du , 2019 +# +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: Python 3.9\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2022-11-04 14:34+0000\n" +"PO-Revision-Date: 2017-02-16 17:47+0000\n" +"Last-Translator: Alpha Du , 2019\n" +"Language-Team: Chinese (China) (https://www.transifex.com/python-doc/teams/5390/zh_CN/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: zh_CN\n" +"Plural-Forms: nplurals=1; plural=0;\n" + +#: ../../library/__main__.rst:3 +msgid ":mod:`__main__` --- Top-level script environment" +msgstr ":mod:`__main__` --- 顶层脚本环境" + +#: ../../library/__main__.rst:10 +msgid "" +"``'__main__'`` is the name of the scope in which top-level code executes. A " +"module's __name__ is set equal to ``'__main__'`` when read from standard " +"input, a script, or from an interactive prompt." +msgstr "" +"``'__main__'`` 是顶层代码执行的作用域的名称。模块的 __name__ 在通过标准输入、脚本文件或是交互式命令读入的时候会等于 " +"``'__main__'``。" + +#: ../../library/__main__.rst:14 +msgid "" +"A module can discover whether or not it is running in the main scope by " +"checking its own ``__name__``, which allows a common idiom for conditionally" +" executing code in a module when it is run as a script or with ``python -m``" +" but not when it is imported::" +msgstr "" +"模块可以通过检查自己的 ``__name__`` 来得知是否运行在 main 作用域中,这使得模块可以在作为脚本或是通过 ``python -m`` " +"运行时条件性地执行一些代码,而在被 import 时不会执行。" + +#: ../../library/__main__.rst:23 +msgid "" +"For a package, the same effect can be achieved by including a " +"``__main__.py`` module, the contents of which will be executed when the " +"module is run with ``-m``." +msgstr "对软件包来说,通过加入 ``__main__.py`` 模块可以达到同样的效果,当使用 ``-m`` 运行模块时,其中的代码会被执行。" diff --git a/library/_dummy_thread.po b/library/_dummy_thread.po new file mode 100644 index 000000000..57cecc904 --- /dev/null +++ b/library/_dummy_thread.po @@ -0,0 +1,53 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) 2001-2020, Python Software Foundation +# This file is distributed under the same license as the Python package. +# FIRST AUTHOR , YEAR. +# +# Translators: +# cissoid , 2018 +# Freesand Leo , 2018 +# Meng Du , 2019 +# +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: Python 3.8\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2020-02-09 12:40+0000\n" +"PO-Revision-Date: 2017-02-16 17:47+0000\n" +"Last-Translator: Meng Du , 2019\n" +"Language-Team: Chinese (China) (https://www.transifex.com/python-doc/teams/5390/zh_CN/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: zh_CN\n" +"Plural-Forms: nplurals=1; plural=0;\n" + +#: ../../library/_dummy_thread.rst:2 +msgid "" +":mod:`_dummy_thread` --- Drop-in replacement for the :mod:`_thread` module" +msgstr ":mod:`_dummy_thread` --- :mod:`_thread` 的替代模块" + +#: ../../library/_dummy_thread.rst:7 +msgid "**Source code:** :source:`Lib/_dummy_thread.py`" +msgstr "**源代码:** :source:`Lib/_dummy_thread.py`" + +#: ../../library/_dummy_thread.rst:9 +msgid "" +"Python now always has threading enabled. Please use :mod:`_thread` (or, " +"better, :mod:`threading`) instead." +msgstr "Python 现在总是会启用多线程。请改用 :mod:`_thread` (或者用 :mod:`threading` 更好)。" + +#: ../../library/_dummy_thread.rst:15 +msgid "" +"This module provides a duplicate interface to the :mod:`_thread` module. It " +"was meant to be imported when the :mod:`_thread` module was not provided on " +"a platform." +msgstr "这个模块提供与 :mod:`_thread` 相同的接口。它主要用于在没有提供 :mod:`_thread` 模块的平台上被导入。" + +#: ../../library/_dummy_thread.rst:19 +msgid "" +"Be careful to not use this module where deadlock might occur from a thread " +"being created that blocks waiting for another thread to be created. This " +"often occurs with blocking I/O." +msgstr "如果线程需要阻塞等待另一个线程被创建的话,可能会造成死锁,这通常是由于阻塞 I/O 引起的。这种场景下请不要使用这个模块。" diff --git a/library/_thread.po b/library/_thread.po new file mode 100644 index 000000000..eb80e2673 --- /dev/null +++ b/library/_thread.po @@ -0,0 +1,299 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) 2001-2024, Python Software Foundation +# This file is distributed under the same license as the Python package. +# FIRST AUTHOR , YEAR. +# +# Translators: +# cissoid , 2018 +# Alpha Du , 2019 +# Freesand Leo , 2019 +# Rafael Fontenelle , 2024 +# +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: Python 3.9\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2024-04-15 06:01+0000\n" +"PO-Revision-Date: 2017-02-16 17:47+0000\n" +"Last-Translator: Rafael Fontenelle , 2024\n" +"Language-Team: Chinese (China) (https://app.transifex.com/python-doc/teams/5390/zh_CN/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: zh_CN\n" +"Plural-Forms: nplurals=1; plural=0;\n" + +#: ../../library/_thread.rst:2 +msgid ":mod:`_thread` --- Low-level threading API" +msgstr ":mod:`_thread` --- 底层多线程 API" + +#: ../../library/_thread.rst:15 +msgid "" +"This module provides low-level primitives for working with multiple threads " +"(also called :dfn:`light-weight processes` or :dfn:`tasks`) --- multiple " +"threads of control sharing their global data space. For synchronization, " +"simple locks (also called :dfn:`mutexes` or :dfn:`binary semaphores`) are " +"provided. The :mod:`threading` module provides an easier to use and higher-" +"level threading API built on top of this module." +msgstr "" +"该模块提供了操作多个线程(也被称为 :dfn:`轻量级进程` 或 :dfn:`任务`)的底层原语 —— " +"多个控制线程共享全局数据空间。为了处理同步问题,也提供了简单的锁机制(也称为 :dfn:`互斥锁` 或 " +":dfn:`二进制信号`)。:mod:`threading` 模块基于该模块提供了更易用的高级多线程 API。" + +#: ../../library/_thread.rst:26 +msgid "This module used to be optional, it is now always available." +msgstr "这个模块曾经为可选项,但现在总是可用。" + +#: ../../library/_thread.rst:29 +msgid "This module defines the following constants and functions:" +msgstr "这个模块定义了以下常量和函数:" + +#: ../../library/_thread.rst:33 +msgid "Raised on thread-specific errors." +msgstr "发生线程相关错误时抛出。" + +#: ../../library/_thread.rst:35 +msgid "This is now a synonym of the built-in :exc:`RuntimeError`." +msgstr "现在是内建异常 :exc:`RuntimeError` 的别名。" + +#: ../../library/_thread.rst:41 +msgid "This is the type of lock objects." +msgstr "锁对象的类型。" + +#: ../../library/_thread.rst:46 +msgid "" +"Start a new thread and return its identifier. The thread executes the " +"function *function* with the argument list *args* (which must be a tuple). " +"The optional *kwargs* argument specifies a dictionary of keyword arguments." +msgstr "" +"开启一个新线程并返回其标识。 线程执行函数 *function* 并附带参数列表 *args* (必须是元组)。 可选的 *kwargs* " +"参数指定一个关键字参数字典。" + +#: ../../library/_thread.rst:50 +msgid "When the function returns, the thread silently exits." +msgstr "当函数返回时,线程会静默地退出。" + +#: ../../library/_thread.rst:52 +msgid "" +"When the function terminates with an unhandled exception, " +":func:`sys.unraisablehook` is called to handle the exception. The *object* " +"attribute of the hook argument is *function*. By default, a stack trace is " +"printed and then the thread exits (but other threads continue to run)." +msgstr "" +"当函数因某个未处理异常而终结时,:func:`sys.unraisablehook` 会被调用以处理异常。 钩子参数的 *object* 属性为 " +"*function*。 在默认情况下,会打印堆栈回溯然后该线程将退出(但其他线程会继续运行)。" + +#: ../../library/_thread.rst:57 +msgid "" +"When the function raises a :exc:`SystemExit` exception, it is silently " +"ignored." +msgstr "当函数引发 :exc:`SystemExit` 异常时,它会被静默地忽略。" + +#: ../../library/_thread.rst:60 +msgid ":func:`sys.unraisablehook` is now used to handle unhandled exceptions." +msgstr "现在会使用 :func:`sys.unraisablehook` 来处理未处理的异常。" + +#: ../../library/_thread.rst:66 +msgid "" +"Simulate the effect of a :data:`signal.SIGINT` signal arriving in the main " +"thread. A thread can use this function to interrupt the main thread." +msgstr "模拟一个 :data:`signal.SIGINT` 信号到达主线程的效果。 线程可以使用这个函数来中断主线程。" + +#: ../../library/_thread.rst:69 +msgid "" +"If :data:`signal.SIGINT` isn't handled by Python (it was set to " +":data:`signal.SIG_DFL` or :data:`signal.SIG_IGN`), this function does " +"nothing." +msgstr "" +"如果 Python 没有处理 :data:`signal.SIGINT` (将它设为 :data:`signal.SIG_DFL` 或 " +":data:`signal.SIG_IGN`),此函数将不做任何事。" + +#: ../../library/_thread.rst:76 +msgid "" +"Raise the :exc:`SystemExit` exception. When not caught, this will cause the" +" thread to exit silently." +msgstr "抛出 :exc:`SystemExit` 异常。如果没有捕获的话,这个异常会使线程退出。" + +#: ../../library/_thread.rst:90 +msgid "" +"Return a new lock object. Methods of locks are described below. The lock " +"is initially unlocked." +msgstr "返回一个新的锁对象。锁中的方法在后面描述。初始情况下锁处于解锁状态。" + +#: ../../library/_thread.rst:96 +msgid "" +"Return the 'thread identifier' of the current thread. This is a nonzero " +"integer. Its value has no direct meaning; it is intended as a magic cookie " +"to be used e.g. to index a dictionary of thread-specific data. Thread " +"identifiers may be recycled when a thread exits and another thread is " +"created." +msgstr "" +"返回当前线程的 “线程标识符”。它是一个非零的整数。它的值没有直接含义,主要是用作 magic " +"cookie,比如作为含有线程相关数据的字典的索引。线程标识符可能会在线程退出,新线程创建时被复用。" + +#: ../../library/_thread.rst:104 +msgid "" +"Return the native integral Thread ID of the current thread assigned by the " +"kernel. This is a non-negative integer. Its value may be used to uniquely " +"identify this particular thread system-wide (until the thread terminates, " +"after which the value may be recycled by the OS)." +msgstr "" +"返回内核分配给当前线程的原生集成线程 ID。 这是一个非负整数。 它的值可被用来在整个系统中唯一地标识这个特定线程(直到线程终结,在那之后该值可能会被 " +"OS 回收再利用)。" + +#: ../../library/_thread.rst:110 +msgid "" +":ref:`Availability `: Windows, FreeBSD, Linux, macOS, OpenBSD," +" NetBSD, AIX." +msgstr "" +":ref:`可用性 `: Windows, FreeBSD, Linux, macOS, OpenBSD, NetBSD, " +"AIX。" + +#: ../../library/_thread.rst:116 +msgid "" +"Return the thread stack size used when creating new threads. The optional " +"*size* argument specifies the stack size to be used for subsequently created" +" threads, and must be 0 (use platform or configured default) or a positive " +"integer value of at least 32,768 (32 KiB). If *size* is not specified, 0 is " +"used. If changing the thread stack size is unsupported, a " +":exc:`RuntimeError` is raised. If the specified stack size is invalid, a " +":exc:`ValueError` is raised and the stack size is unmodified. 32 KiB is " +"currently the minimum supported stack size value to guarantee sufficient " +"stack space for the interpreter itself. Note that some platforms may have " +"particular restrictions on values for the stack size, such as requiring a " +"minimum stack size > 32 KiB or requiring allocation in multiples of the " +"system memory page size - platform documentation should be referred to for " +"more information (4 KiB pages are common; using multiples of 4096 for the " +"stack size is the suggested approach in the absence of more specific " +"information)." +msgstr "" +"返回创建线程时使用的堆栈大小。可选参数 *size* " +"指定之后新建的线程的堆栈大小,而且一定要是0(根据平台或者默认配置)或者最小是32,768(32KiB)的一个正整数。如果 *size* " +"没有指定,默认是0。如果不支持改变线程堆栈大小,会抛出 :exc:`RuntimeError` 错误。如果指定的堆栈大小不合法,会抛出 " +":exc:`ValueError` " +"错误并且不会修改堆栈大小。32KiB是当前最小的能保证解释器有足够堆栈空间的堆栈大小。需要注意的是部分平台对于堆栈大小会有特定的限制,例如要求大于32KiB的堆栈大小或者需要根据系统内存页面的整数倍进行分配" +" - 应当查阅平台文档有关详细信息(4KiB页面比较普遍,在没有更具体信息的情况下,建议的方法是使用4096的倍数作为堆栈大小)。" + +#: ../../library/_thread.rst:131 +msgid "" +":ref:`Availability `: Windows, systems with POSIX threads." +msgstr ":ref:`适用于 `: Windows,具有 POSIX 线程的系统。" + +#: ../../library/_thread.rst:136 +msgid "" +"The maximum value allowed for the *timeout* parameter of " +":meth:`Lock.acquire`. Specifying a timeout greater than this value will " +"raise an :exc:`OverflowError`." +msgstr "" +":meth:`Lock.acquire` 方法中 *timeout* 参数允许的最大值。传入超过这个值的 timeout 会抛出 " +":exc:`OverflowError` 异常。" + +#: ../../library/_thread.rst:143 +msgid "Lock objects have the following methods:" +msgstr "锁对象有以下方法:" + +#: ../../library/_thread.rst:148 +msgid "" +"Without any optional argument, this method acquires the lock " +"unconditionally, if necessary waiting until it is released by another thread" +" (only one thread at a time can acquire a lock --- that's their reason for " +"existence)." +msgstr "没有任何可选参数时,该方法无条件申请获得锁,有必要的话会等待其他线程释放锁(同时只有一个线程能获得锁 —— 这正是锁存在的原因)。" + +#: ../../library/_thread.rst:152 +msgid "" +"If the integer *waitflag* argument is present, the action depends on its " +"value: if it is zero, the lock is only acquired if it can be acquired " +"immediately without waiting, while if it is nonzero, the lock is acquired " +"unconditionally as above." +msgstr "" +"如果传入了整型参数 *waitflag*,具体的行为取决于传入的值:如果是 0 " +"的话,只会在能够立刻获取到锁时才获取,不会等待,如果是非零的话,会像之前提到的一样,无条件获取锁。" + +#: ../../library/_thread.rst:157 +msgid "" +"If the floating-point *timeout* argument is present and positive, it " +"specifies the maximum wait time in seconds before returning. A negative " +"*timeout* argument specifies an unbounded wait. You cannot specify a " +"*timeout* if *waitflag* is zero." +msgstr "" +"如果传入正浮点数参数 *timeout*,相当于指定了返回之前等待得最大秒数。如果传入负的 *timeout*,相当于无限期等待。如果 " +"*waitflag* 是 0 的话,不能指定 *timeout*。" + +#: ../../library/_thread.rst:162 +msgid "" +"The return value is ``True`` if the lock is acquired successfully, ``False``" +" if not." +msgstr "如果成功获取到所会返回 ``True``,否则返回 ``False``。" + +#: ../../library/_thread.rst:165 +msgid "The *timeout* parameter is new." +msgstr "新的 *timeout* 形参。" + +#: ../../library/_thread.rst:168 +msgid "Lock acquires can now be interrupted by signals on POSIX." +msgstr "现在获取锁的操作可以被 POSIX 信号中断。" + +#: ../../library/_thread.rst:174 +msgid "" +"Releases the lock. The lock must have been acquired earlier, but not " +"necessarily by the same thread." +msgstr "释放锁。锁必须已经被获取过,但不一定是同一个线程获取的。" + +#: ../../library/_thread.rst:180 +msgid "" +"Return the status of the lock: ``True`` if it has been acquired by some " +"thread, ``False`` if not." +msgstr "返回锁的状态:如果已被某个线程获取,返回 ``True``,否则返回 ``False``。" + +#: ../../library/_thread.rst:183 +msgid "" +"In addition to these methods, lock objects can also be used via the " +":keyword:`with` statement, e.g.::" +msgstr "除了这些方法之外,锁对象也可以通过 :keyword:`with` 语句使用,例如:" + +#: ../../library/_thread.rst:193 +msgid "**Caveats:**" +msgstr "**注意事项:**" + +#: ../../library/_thread.rst:197 +msgid "" +"Threads interact strangely with interrupts: the :exc:`KeyboardInterrupt` " +"exception will be received by an arbitrary thread. (When the :mod:`signal` " +"module is available, interrupts always go to the main thread.)" +msgstr "" +"线程与中断奇怪地交互::exc:`KeyboardInterrupt` 异常可能会被任意一个线程捕获。(如果 :mod:`signal` " +"模块可用的话,中断总是会进入主线程。)" + +#: ../../library/_thread.rst:201 +msgid "" +"Calling :func:`sys.exit` or raising the :exc:`SystemExit` exception is " +"equivalent to calling :func:`_thread.exit`." +msgstr "" +"调用 :func:`sys.exit` 或是抛出 :exc:`SystemExit` 异常等效于调用 :func:`_thread.exit`。" + +#: ../../library/_thread.rst:204 +msgid "" +"It is not possible to interrupt the :meth:`acquire` method on a lock --- the" +" :exc:`KeyboardInterrupt` exception will happen after the lock has been " +"acquired." +msgstr "不可能中断锁的 :meth:`acquire` 方法 —— :exc:`KeyboardInterrupt` 一场会在锁获取到之后发生。" + +#: ../../library/_thread.rst:207 +msgid "" +"When the main thread exits, it is system defined whether the other threads " +"survive. On most systems, they are killed without executing :keyword:`try` " +"... :keyword:`finally` clauses or executing object destructors." +msgstr "" +"当主线程退出时,由系统决定其他线程是否存活。在大多数系统中,这些线程会直接被杀掉,不会执行 :keyword:`try` ... " +":keyword:`finally` 语句,也不会执行对象析构函数。" + +#: ../../library/_thread.rst:212 +msgid "" +"When the main thread exits, it does not do any of its usual cleanup (except " +"that :keyword:`try` ... :keyword:`finally` clauses are honored), and the " +"standard I/O files are not flushed." +msgstr "" +"当主线程退出时,不会进行正常的清理工作(除非使用了 :keyword:`try` ... :keyword:`finally` 语句),标准 I/O " +"文件也不会刷新。" diff --git a/library/abc.po b/library/abc.po new file mode 100644 index 000000000..ae7f4b74c --- /dev/null +++ b/library/abc.po @@ -0,0 +1,364 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) 2001-2024, Python Software Foundation +# This file is distributed under the same license as the Python package. +# FIRST AUTHOR , YEAR. +# +# Translators: +# cissoid , 2018 +# Jarry Shaw , 2018 +# wenhui , 2019 +# Alpha Du , 2019 +# Freesand Leo , 2020 +# Rafael Fontenelle , 2024 +# +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: Python 3.9\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2024-01-12 22:01+0000\n" +"PO-Revision-Date: 2017-02-16 17:47+0000\n" +"Last-Translator: Rafael Fontenelle , 2024\n" +"Language-Team: Chinese (China) (https://app.transifex.com/python-doc/teams/5390/zh_CN/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: zh_CN\n" +"Plural-Forms: nplurals=1; plural=0;\n" + +#: ../../library/abc.rst:2 +msgid ":mod:`abc` --- Abstract Base Classes" +msgstr ":mod:`abc` --- 抽象基类" + +#: ../../library/abc.rst:11 +msgid "**Source code:** :source:`Lib/abc.py`" +msgstr "**源代码:** :source:`Lib/abc.py`" + +#: ../../library/abc.rst:15 +msgid "" +"This module provides the infrastructure for defining :term:`abstract base " +"classes ` (ABCs) in Python, as outlined in :pep:`3119`;" +" see the PEP for why this was added to Python. (See also :pep:`3141` and the" +" :mod:`numbers` module regarding a type hierarchy for numbers based on " +"ABCs.)" +msgstr "" +"该模块提供了在 Python 中定义 :term:`抽象基类 ` (ABC) 的组件,在 " +":pep:`3119` 中已有概述。查看 PEP 文档了解为什么需要在 Python 中增加这个模块。(也可查看 :pep:`3141` 以及 " +":mod:`numbers` 模块了解基于 ABC 的数字类型继承关系。)" + +#: ../../library/abc.rst:20 +msgid "" +"The :mod:`collections` module has some concrete classes that derive from " +"ABCs; these can, of course, be further derived. In addition, the " +":mod:`collections.abc` submodule has some ABCs that can be used to test " +"whether a class or instance provides a particular interface, for example, if" +" it is hashable or if it is a mapping." +msgstr "" +":mod:`collections` 模块中有一些派生自 ABC " +"的具体类;当然这些类还可以进一步被派生。此外,:mod:`collections.abc` 子模块中有一些 ABC " +"可被用于测试一个类或实例是否提供特定的接口,例如它是否可哈希或它是否为映射等。" + +#: ../../library/abc.rst:27 +msgid "" +"This module provides the metaclass :class:`ABCMeta` for defining ABCs and a " +"helper class :class:`ABC` to alternatively define ABCs through inheritance:" +msgstr "" +"该模块提供了一个元类 :class:`ABCMeta`,可以用来定义抽象类,另外还提供一个工具类 " +":class:`ABC`,可以用它以继承的方式定义抽象基类。" + +#: ../../library/abc.rst:32 +msgid "" +"A helper class that has :class:`ABCMeta` as its metaclass. With this class," +" an abstract base class can be created by simply deriving from :class:`ABC` " +"avoiding sometimes confusing metaclass usage, for example::" +msgstr "" +"一个使用 :class:`ABCMeta` 作为元类的工具类。抽象基类可以通过从 :class:`ABC` " +"派生来简单地创建,这就避免了在某些情况下会令人混淆的元类用法,例如:" + +#: ../../library/abc.rst:41 +msgid "" +"Note that the type of :class:`ABC` is still :class:`ABCMeta`, therefore " +"inheriting from :class:`ABC` requires the usual precautions regarding " +"metaclass usage, as multiple inheritance may lead to metaclass conflicts. " +"One may also define an abstract base class by passing the metaclass keyword " +"and using :class:`ABCMeta` directly, for example::" +msgstr "" +"注意 :class:`ABC` 的类型仍然是 :class:`ABCMeta`,因此继承 :class:`ABC` " +"仍然需要关注元类使用中的注意事项,比如可能会导致元类冲突的多重继承。当然你也可以直接使用 :class:`ABCMeta` " +"作为元类来定义抽象基类,例如:" + +#: ../../library/abc.rst:57 +msgid "Metaclass for defining Abstract Base Classes (ABCs)." +msgstr "用于定义抽象基类(ABC)的元类。" + +#: ../../library/abc.rst:59 +msgid "" +"Use this metaclass to create an ABC. An ABC can be subclassed directly, and" +" then acts as a mix-in class. You can also register unrelated concrete " +"classes (even built-in classes) and unrelated ABCs as \"virtual subclasses\"" +" -- these and their descendants will be considered subclasses of the " +"registering ABC by the built-in :func:`issubclass` function, but the " +"registering ABC won't show up in their MRO (Method Resolution Order) nor " +"will method implementations defined by the registering ABC be callable (not " +"even via :func:`super`). [#]_" +msgstr "" +"使用该元类以创建抽象基类。抽象基类可以像 mix-in 类一样直接被子类继承。你也可以将不相关的具体类(包括内建类)和抽象基类注册为“抽象子类” —— " +"这些类以及它们的子类会被内建函数 :func:`issubclass` 识别为对应的抽象基类的子类,但是该抽象基类不会出现在其 MRO(Method " +"Resolution Order,方法解析顺序)中,抽象基类中实现的方法也不可调用(即使通过 :func:`super` 调用也不行)。[#]_" + +#: ../../library/abc.rst:68 +msgid "" +"Classes created with a metaclass of :class:`ABCMeta` have the following " +"method:" +msgstr "使用 :class:`ABCMeta` 作为元类创建的类含有如下方法:" + +#: ../../library/abc.rst:72 +msgid "Register *subclass* as a \"virtual subclass\" of this ABC. For example::" +msgstr "将 *subclass* 注册为该 ABC 的“虚拟子类”。 例如::" + +#: ../../library/abc.rst:85 +msgid "Returns the registered subclass, to allow usage as a class decorator." +msgstr "返回注册的子类,使其能够作为类装饰器。" + +#: ../../library/abc.rst:88 +msgid "" +"To detect calls to :meth:`register`, you can use the :func:`get_cache_token`" +" function." +msgstr "你可以使用 :func:`get_cache_token` 函数来检测对 :meth:`register` 的调用。" + +#: ../../library/abc.rst:92 +msgid "You can also override this method in an abstract base class:" +msgstr "你也可以在虚基类中重写这个方法。" + +#: ../../library/abc.rst:96 +msgid "(Must be defined as a class method.)" +msgstr "(必须定义为类方法。)" + +#: ../../library/abc.rst:98 +msgid "" +"Check whether *subclass* is considered a subclass of this ABC. This means " +"that you can customize the behavior of ``issubclass`` further without the " +"need to call :meth:`register` on every class you want to consider a subclass" +" of the ABC. (This class method is called from the " +":meth:`__subclasscheck__` method of the ABC.)" +msgstr "" +"检查 *subclass* 是否是该抽象基类的子类。也就是说对于那些你希望定义为该抽象基类的子类的类,你不用对每个类都调用 " +":meth:`register` 方法了,而是可以直接自定义 ``issubclass`` 的行为。(这个类方法是在抽象基类的 " +":meth:`__subclasscheck__` 方法中调用的。)" + +#: ../../library/abc.rst:104 +msgid "" +"This method should return ``True``, ``False`` or ``NotImplemented``. If it " +"returns ``True``, the *subclass* is considered a subclass of this ABC. If it" +" returns ``False``, the *subclass* is not considered a subclass of this ABC," +" even if it would normally be one. If it returns ``NotImplemented``, the " +"subclass check is continued with the usual mechanism." +msgstr "" +"该方法必须返回 ``True``, ``False`` 或是 ``NotImplemented``。如果返回 ``True``,*subclass* " +"就会被认为是这个抽象基类的子类。如果返回 ``False``,无论正常情况是否应该认为是其子类,统一视为不是。如果返回 " +"``NotImplemented``,子类检查会按照正常机制继续执行。" + +#: ../../library/abc.rst:114 +msgid "" +"For a demonstration of these concepts, look at this example ABC definition::" +msgstr "为了对这些概念做一演示,请看以下定义 ABC 的示例:" + +#: ../../library/abc.rst:143 +msgid "" +"The ABC ``MyIterable`` defines the standard iterable method, " +":meth:`~iterator.__iter__`, as an abstract method. The implementation given" +" here can still be called from subclasses. The :meth:`get_iterator` method " +"is also part of the ``MyIterable`` abstract base class, but it does not have" +" to be overridden in non-abstract derived classes." +msgstr "" +"ABC ``MyIterable`` 定义了标准的迭代方法 :meth:`~iterator.__iter__` " +"作为一个抽象方法。这里给出的实现仍可在子类中被调用。:meth:`get_iterator` 方法也是 ``MyIterable`` " +"抽象基类的一部分,但它并非必须被非抽象派生类所重载。" + +#: ../../library/abc.rst:149 +msgid "" +"The :meth:`__subclasshook__` class method defined here says that any class " +"that has an :meth:`~iterator.__iter__` method in its " +":attr:`~object.__dict__` (or in that of one of its base classes, accessed " +"via the :attr:`~class.__mro__` list) is considered a ``MyIterable`` too." +msgstr "" +"这里定义的 :meth:`__subclasshook__` 类方法指明了任何在其 :attr:`~object.__dict__` (或在其通过 " +":attr:`~class.__mro__` 列表访问的基类) 中具有 :meth:`~iterator.__iter__` 方法的类也都会被视为 " +"``MyIterable``。" + +#: ../../library/abc.rst:154 +msgid "" +"Finally, the last line makes ``Foo`` a virtual subclass of ``MyIterable``, " +"even though it does not define an :meth:`~iterator.__iter__` method (it uses" +" the old-style iterable protocol, defined in terms of :meth:`__len__` and " +":meth:`__getitem__`). Note that this will not make ``get_iterator`` " +"available as a method of ``Foo``, so it is provided separately." +msgstr "" +"最后,末尾行使得 ``Foo`` 成为 ``MyIterable`` 的一个虚子类,即便它并没有定义 " +":meth:`~iterator.__iter__` 方法(它使用了以 :meth:`__len__` 和 :meth:`__getitem__` " +"术语定义的旧式可迭代对象协议)。注意这将不会使 ``get_iterator`` 成为对 ``Foo`` 来说可用的方法,所以也另外提供了一个它。" + +#: ../../library/abc.rst:163 +msgid "The :mod:`abc` module also provides the following decorator:" +msgstr "此外,:mod:`abc` 模块还提供了这些装饰器:" + +#: ../../library/abc.rst:167 +msgid "A decorator indicating abstract methods." +msgstr "用于声明抽象方法的装饰器。" + +#: ../../library/abc.rst:169 +msgid "" +"Using this decorator requires that the class's metaclass is :class:`ABCMeta`" +" or is derived from it. A class that has a metaclass derived from " +":class:`ABCMeta` cannot be instantiated unless all of its abstract methods " +"and properties are overridden. The abstract methods can be called using any" +" of the normal 'super' call mechanisms. :func:`abstractmethod` may be used " +"to declare abstract methods for properties and descriptors." +msgstr "" +"使用此装饰器要求类的元类是 :class:`ABCMeta` 或是从该类派生。一个具有派生自 :class:`ABCMeta` " +"的元类的类不可以被实例化,除非它全部的抽象方法和特征属性均已被重载。抽象方法可通过任何普通的“super”调用机制来调用。 " +":func:`abstractmethod` 可被用于声明特性属性和描述器的抽象方法。" + +#: ../../library/abc.rst:176 +msgid "" +"Dynamically adding abstract methods to a class, or attempting to modify the " +"abstraction status of a method or class once it is created, are not " +"supported. The :func:`abstractmethod` only affects subclasses derived using" +" regular inheritance; \"virtual subclasses\" registered with the ABC's " +":meth:`register` method are not affected." +msgstr "" +"不支持动态添加抽象方法到一个类,或试图在方法或类被创建后修改其抽象状态等操作。 :func:`abstractmethod` " +"只会影响使用常规继承所派生的子类;通过 ABC 的 :meth:`register` 方法注册的“虚子类”不会受到影响。" + +#: ../../library/abc.rst:182 +msgid "" +"When :func:`abstractmethod` is applied in combination with other method " +"descriptors, it should be applied as the innermost decorator, as shown in " +"the following usage examples::" +msgstr "当 :func:`abstractmethod` 与其他方法描述符配合应用时,它应当被应用为最内层的装饰器,如以下用法示例所示::" + +#: ../../library/abc.rst:216 +msgid "" +"In order to correctly interoperate with the abstract base class machinery, " +"the descriptor must identify itself as abstract using " +":attr:`__isabstractmethod__`. In general, this attribute should be ``True`` " +"if any of the methods used to compose the descriptor are abstract. For " +"example, Python's built-in :class:`property` does the equivalent of::" +msgstr "" +"为了正确地与抽象基类机制互操作,描述器必须使用 :attr:`__isabstractmethod__` " +"将自身标为抽象的。通常,如果组成描述器的任一方法是抽象的,那么此属性就应为 ``True``。例如,Python 内置的 " +":class:`property` 所做的就等价于:" + +#: ../../library/abc.rst:231 +msgid "" +"Unlike Java abstract methods, these abstract methods may have an " +"implementation. This implementation can be called via the :func:`super` " +"mechanism from the class that overrides it. This could be useful as an end-" +"point for a super-call in a framework that uses cooperative multiple-" +"inheritance." +msgstr "" +"不同于 Java 抽象方法,这些抽象方法可能具有一个实现。 这个实现可在重写它的类上通过 :func:`super` 机制来调用。 " +"这在使用协作多重继承的框架中可以被用作 super 调用的一个终点。" + +#: ../../library/abc.rst:239 +msgid "The :mod:`abc` module also supports the following legacy decorators:" +msgstr ":mod:`abc` 模块还支持下列旧式装饰器:" + +#: ../../library/abc.rst:244 +msgid "" +"It is now possible to use :class:`classmethod` with :func:`abstractmethod`, " +"making this decorator redundant." +msgstr "现在可以让 :class:`classmethod` 配合 :func:`abstractmethod` 使用,使得此装饰器变得冗余。" + +#: ../../library/abc.rst:248 +msgid "" +"A subclass of the built-in :func:`classmethod`, indicating an abstract " +"classmethod. Otherwise it is similar to :func:`abstractmethod`." +msgstr "" +"内置 :func:`classmethod` 的子类,指明一个抽象类方法。 在其他方面它都类似于 :func:`abstractmethod`。" + +#: ../../library/abc.rst:251 +msgid "" +"This special case is deprecated, as the :func:`classmethod` decorator is now" +" correctly identified as abstract when applied to an abstract method::" +msgstr "这个特例已被弃用,因为现在当 :func:`classmethod` 装饰器应用于抽象方法时它会被正确地标识为抽象的::" + +#: ../../library/abc.rst:265 +msgid "" +"It is now possible to use :class:`staticmethod` with :func:`abstractmethod`," +" making this decorator redundant." +msgstr "现在可以让 :class:`staticmethod` 配合 :func:`abstractmethod` 使用,使得此装饰器变得冗余。" + +#: ../../library/abc.rst:269 +msgid "" +"A subclass of the built-in :func:`staticmethod`, indicating an abstract " +"staticmethod. Otherwise it is similar to :func:`abstractmethod`." +msgstr "" +"内置 :func:`staticmethod` 的子类,指明一个抽象静态方法。 在其他方面它都类似于 :func:`abstractmethod`。" + +#: ../../library/abc.rst:272 +msgid "" +"This special case is deprecated, as the :func:`staticmethod` decorator is " +"now correctly identified as abstract when applied to an abstract method::" +msgstr "这个特例已被弃用,因为现在当 :func:`staticmethod` 装饰器应用于抽象方法时它会被正确地标识为抽象的::" + +#: ../../library/abc.rst:285 +msgid "" +"It is now possible to use :class:`property`, :meth:`property.getter`, " +":meth:`property.setter` and :meth:`property.deleter` with " +":func:`abstractmethod`, making this decorator redundant." +msgstr "" +"现在可以让 :class:`property`, :meth:`property.getter`, :meth:`property.setter` 和 " +":meth:`property.deleter` 配合 :func:`abstractmethod` 使用,使得此装饰器变得冗余。" + +#: ../../library/abc.rst:290 +msgid "" +"A subclass of the built-in :func:`property`, indicating an abstract " +"property." +msgstr "内置 :func:`property` 的子类,指明一个抽象特性属性。" + +#: ../../library/abc.rst:293 +msgid "" +"This special case is deprecated, as the :func:`property` decorator is now " +"correctly identified as abstract when applied to an abstract method::" +msgstr "这个特例已被弃用,因为现在当 :func:`property` 装饰器应用于抽象方法时它会被正确地标识为抽象的::" + +#: ../../library/abc.rst:303 +msgid "" +"The above example defines a read-only property; you can also define a read-" +"write abstract property by appropriately marking one or more of the " +"underlying methods as abstract::" +msgstr "上面的例子定义了一个只读特征属性;你也可以通过适当地将一个或多个下层方法标记为抽象的来定义可读写的抽象特征属性::" + +#: ../../library/abc.rst:317 +msgid "" +"If only some components are abstract, only those components need to be " +"updated to create a concrete property in a subclass::" +msgstr "如果只有某些组件是抽象的,则只需更新那些组件即可在子类中创建具体的特征属性::" + +#: ../../library/abc.rst:326 +msgid "The :mod:`abc` module also provides the following functions:" +msgstr ":mod:`abc` 模块还提供了这些函数:" + +#: ../../library/abc.rst:330 +msgid "Returns the current abstract base class cache token." +msgstr "返回当前抽象基类的缓存令牌" + +#: ../../library/abc.rst:332 +msgid "" +"The token is an opaque object (that supports equality testing) identifying " +"the current version of the abstract base class cache for virtual subclasses." +" The token changes with every call to :meth:`ABCMeta.register` on any ABC." +msgstr "" +"此令牌是一个不透明对象(支持相等性测试),用于为虚子类标识抽象基类缓存的当前版本。 此令牌会在任何 ABC 上每次调用 " +":meth:`ABCMeta.register` 时发生更改。" + +#: ../../library/abc.rst:340 +msgid "Footnotes" +msgstr "备注" + +#: ../../library/abc.rst:341 +msgid "" +"C++ programmers should note that Python's virtual base class concept is not " +"the same as C++'s." +msgstr "C++ 程序员需要注意:Python 中虚基类的概念和 C++ 中的并不相同。" diff --git a/library/aifc.po b/library/aifc.po new file mode 100644 index 000000000..60b8c9617 --- /dev/null +++ b/library/aifc.po @@ -0,0 +1,292 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) 2001-2023, Python Software Foundation +# This file is distributed under the same license as the Python package. +# FIRST AUTHOR , YEAR. +# +# Translators: +# Arisaka97 , 2020 +# Freesand Leo , 2020 +# Rafael Fontenelle , 2023 +# +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: Python 3.9\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2023-09-01 15:40+0000\n" +"PO-Revision-Date: 2017-02-16 17:47+0000\n" +"Last-Translator: Rafael Fontenelle , 2023\n" +"Language-Team: Chinese (China) (https://app.transifex.com/python-doc/teams/5390/zh_CN/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: zh_CN\n" +"Plural-Forms: nplurals=1; plural=0;\n" + +#: ../../library/aifc.rst:2 +msgid ":mod:`aifc` --- Read and write AIFF and AIFC files" +msgstr ":mod:`aifc` --- 读写 AIFF 和 AIFC 文件" + +#: ../../library/aifc.rst:8 +msgid "**Source code:** :source:`Lib/aifc.py`" +msgstr "**源代码:** :source:`Lib/aifc.py`" + +#: ../../library/aifc.rst:16 +msgid "" +"The :mod:`aifc` module is deprecated (see :pep:`PEP 594 <594#aifc>` for " +"details)." +msgstr ":mod:`aifc` 模块已被弃用(详见 :pep:`PEP 594 <594#aifc>`)" + +#: ../../library/aifc.rst:22 +msgid "" +"This module provides support for reading and writing AIFF and AIFF-C files. " +"AIFF is Audio Interchange File Format, a format for storing digital audio " +"samples in a file. AIFF-C is a newer version of the format that includes " +"the ability to compress the audio data." +msgstr "" +"本模块为读写 AIFF 和 AIFF-C 文件提供支持。AIFF 是音频交换文件格式 (Audio Interchange File " +"Format),一种用于在文件中存储数字音频采样的格式。AIFF-C 是该格式的新版本,包含了压缩音频数据的功能。" + +#: ../../library/aifc.rst:27 +msgid "" +"Audio files have a number of parameters that describe the audio data. The " +"sampling rate or frame rate is the number of times per second the sound is " +"sampled. The number of channels indicate if the audio is mono, stereo, or " +"quadro. Each frame consists of one sample per channel. The sample size is " +"the size in bytes of each sample. Thus a frame consists of ``nchannels * " +"samplesize`` bytes, and a second's worth of audio consists of ``nchannels * " +"samplesize * framerate`` bytes." +msgstr "" +"音频文件内有许多参数,用于描述音频数据。采样率或帧率是每秒对声音采样的次数。通道数表示音频是单声道,双声道还是四声道。每个通道的每个帧包含一次采样。采样大小是以字节表示的每次采样的大小。因此,一帧由" +" ``nchannels * samplesize`` (通道数*采样大小)字节组成,而一秒钟的音频包含 ``nchannels * " +"samplesize * framerate`` (通道数*采样大小*帧率)字节。" + +#: ../../library/aifc.rst:35 +msgid "" +"For example, CD quality audio has a sample size of two bytes (16 bits), uses" +" two channels (stereo) and has a frame rate of 44,100 frames/second. This " +"gives a frame size of 4 bytes (2\\*2), and a second's worth occupies " +"2\\*2\\*44100 bytes (176,400 bytes)." +msgstr "" +"例如,CD 质量的音频采样大小为 2 字节(16位),使用 2 个声道(立体声),且帧速率为 44,100 帧/秒。这表示帧大小为 4 字节 " +"(2\\*2),一秒钟占用 2\\*2\\*44100 字节(176,400 字节)。" + +#: ../../library/aifc.rst:40 +msgid "Module :mod:`aifc` defines the following function:" +msgstr ":mod:`aifc` 模块定义了以下函数:" + +#: ../../library/aifc.rst:45 +msgid "" +"Open an AIFF or AIFF-C file and return an object instance with methods that " +"are described below. The argument *file* is either a string naming a file " +"or a :term:`file object`. *mode* must be ``'r'`` or ``'rb'`` when the file " +"must be opened for reading, or ``'w'`` or ``'wb'`` when the file must be " +"opened for writing. If omitted, ``file.mode`` is used if it exists, " +"otherwise ``'rb'`` is used. When used for writing, the file object should " +"be seekable, unless you know ahead of time how many samples you are going to" +" write in total and use :meth:`writeframesraw` and :meth:`setnframes`. The " +":func:`.open` function may be used in a :keyword:`with` statement. When the" +" :keyword:`!with` block completes, the :meth:`~aifc.close` method is called." +msgstr "" +"打开一个 AIFF 或 AIFF-C 文件并返回一个对象实例,该实例具有下方描述的方法。参数 *file* 是文件名称字符串或 :term:`文件对象 " +"`。当打开文件用于读取时,*mode* 必须为 ``'r'`` 或 ``'rb'``,当打开文件用于写入时,*mode* " +"必须为 ``'w'`` 或 ``'wb'``。如果该参数省略,则使用 ``file.mode`` 的值(如果有),否则使用 " +"``'rb'``。当文件用于写入时,文件对象应该支持 seek 操作,除非提前获知写入的采样总数,并使用 :meth:`writeframesraw` " +"和 :meth:`setnframes`。:func:`.open` 函数可以在 :keyword:`with` 语句中使用。当 " +":keyword:`!with` 块执行完毕,将调用 :meth:`~aifc.close` 方法。" + +#: ../../library/aifc.rst:56 +msgid "Support for the :keyword:`with` statement was added." +msgstr "添加了对 :keyword:`with` 语句的支持。" + +#: ../../library/aifc.rst:59 +msgid "" +"Objects returned by :func:`.open` when a file is opened for reading have the" +" following methods:" +msgstr "当打开文件用于读取时,由 :func:`.open` 返回的对象具有以下几种方法:" + +#: ../../library/aifc.rst:65 +msgid "Return the number of audio channels (1 for mono, 2 for stereo)." +msgstr "返回音频的通道数(单声道为 1,立体声为 2)。" + +#: ../../library/aifc.rst:70 +msgid "Return the size in bytes of individual samples." +msgstr "返回以字节表示的单个采样的大小。" + +#: ../../library/aifc.rst:75 +msgid "Return the sampling rate (number of audio frames per second)." +msgstr "返回采样率(每秒的音频帧数)。" + +#: ../../library/aifc.rst:80 +msgid "Return the number of audio frames in the file." +msgstr "返回文件中的音频帧总数。" + +#: ../../library/aifc.rst:85 +msgid "" +"Return a bytes array of length 4 describing the type of compression used in " +"the audio file. For AIFF files, the returned value is ``b'NONE'``." +msgstr "返回一个长度为 4 的字节数组,描述了音频文件中使用的压缩类型。对于 AIFF 文件,返回值为 ``b'NONE'``。" + +#: ../../library/aifc.rst:92 +msgid "" +"Return a bytes array convertible to a human-readable description of the type" +" of compression used in the audio file. For AIFF files, the returned value " +"is ``b'not compressed'``." +msgstr "" +"返回一个字节数组,可转换为人类可读的描述,描述的是音频文件中使用的压缩类型。对于 AIFF 文件,返回值为 ``b'not compressed'``。" + +#: ../../library/aifc.rst:99 +msgid "" +"Returns a :func:`~collections.namedtuple` ``(nchannels, sampwidth, " +"framerate, nframes, comptype, compname)``, equivalent to output of the " +":meth:`get\\*` methods." +msgstr "" +"返回一个 :func:`~collections.namedtuple` ``(nchannels, sampwidth, framerate, " +"nframes, comptype, compname)``,与 :meth:`get\\*` 方法的输出相同。" + +#: ../../library/aifc.rst:106 +msgid "" +"Return a list of markers in the audio file. A marker consists of a tuple of" +" three elements. The first is the mark ID (an integer), the second is the " +"mark position in frames from the beginning of the data (an integer), the " +"third is the name of the mark (a string)." +msgstr "" +"返回一个列表,包含音频文件中的所有标记。标记由一个 3 元素的元组组成。第一个元素是标记 " +"ID(整数),第二个是标记位置,从数据开头算起的帧数(整数),第三个是标记的名称(字符串)。" + +#: ../../library/aifc.rst:114 +msgid "" +"Return the tuple as described in :meth:`getmarkers` for the mark with the " +"given *id*." +msgstr "根据传入的标记 *id* 返回元组,元组与 :meth:`getmarkers` 中描述的一致。" + +#: ../../library/aifc.rst:120 +msgid "" +"Read and return the next *nframes* frames from the audio file. The returned" +" data is a string containing for each frame the uncompressed samples of all " +"channels." +msgstr "从音频文件读取并返回后续 *nframes* 个帧。返回的数据是一个字符串,包含每个帧所有通道的未压缩采样值。" + +#: ../../library/aifc.rst:127 +msgid "" +"Rewind the read pointer. The next :meth:`readframes` will start from the " +"beginning." +msgstr "倒回读取指针。下一次 :meth:`readframes` 将从头开始。" + +#: ../../library/aifc.rst:133 +msgid "Seek to the specified frame number." +msgstr "移动读取指针到指定的帧上。" + +#: ../../library/aifc.rst:138 +msgid "Return the current frame number." +msgstr "返回当前的帧号。" + +#: ../../library/aifc.rst:143 +msgid "" +"Close the AIFF file. After calling this method, the object can no longer be" +" used." +msgstr "关闭 AIFF 文件。调用此方法后,对象将无法再使用。" + +#: ../../library/aifc.rst:146 +msgid "" +"Objects returned by :func:`.open` when a file is opened for writing have all" +" the above methods, except for :meth:`readframes` and :meth:`setpos`. In " +"addition the following methods exist. The :meth:`get\\*` methods can only " +"be called after the corresponding :meth:`set\\*` methods have been called. " +"Before the first :meth:`writeframes` or :meth:`writeframesraw`, all " +"parameters except for the number of frames must be filled in." +msgstr "" +"打开文件用于写入时,:func:`.open` 返回的对象具有上述所有方法,但 :meth:`readframes` 和 :meth:`setpos` " +"除外,并额外具备了以下方法。只有调用了 :meth:`set\\*` 方法之后,才能调用相应的 :meth:`get\\*` 方法。在首次调用 " +":meth:`writeframes` 或 :meth:`writeframesraw` 之前,必须填写除帧数以外的所有参数。" + +#: ../../library/aifc.rst:156 +msgid "" +"Create an AIFF file. The default is that an AIFF-C file is created, unless " +"the name of the file ends in ``'.aiff'`` in which case the default is an " +"AIFF file." +msgstr "创建一个 AIFF 文件,默认创建 AIFF-C 文件,除非文件名以 ``'.aiff'`` 为后缀,在此情况下默认创建 AIFF 文件。" + +#: ../../library/aifc.rst:162 +msgid "" +"Create an AIFF-C file. The default is that an AIFF-C file is created, " +"unless the name of the file ends in ``'.aiff'`` in which case the default is" +" an AIFF file." +msgstr "" +"创建一个 AIFF-C 文件。 默认创建 AIFF-C 文件,除非文件名以 ``'.aiff'`` 为后缀,在此情况下默认创建 AIFF 文件。" + +#: ../../library/aifc.rst:169 +msgid "Specify the number of channels in the audio file." +msgstr "指明音频文件中的通道数。" + +#: ../../library/aifc.rst:174 +msgid "Specify the size in bytes of audio samples." +msgstr "指明以字节为单位的音频采样大小。" + +#: ../../library/aifc.rst:179 +msgid "Specify the sampling frequency in frames per second." +msgstr "指明以每秒帧数表示的采样频率。" + +#: ../../library/aifc.rst:184 +msgid "" +"Specify the number of frames that are to be written to the audio file. If " +"this parameter is not set, or not set correctly, the file needs to support " +"seeking." +msgstr "指明要写入到音频文件的帧数。 如果未设定此形参或者未正确设定,则文件需要支持位置查找。" + +#: ../../library/aifc.rst:195 +msgid "" +"Specify the compression type. If not specified, the audio data will not be " +"compressed. In AIFF files, compression is not possible. The name parameter " +"should be a human-readable description of the compression type as a bytes " +"array, the type parameter should be a bytes array of length 4. Currently " +"the following compression types are supported: ``b'NONE'``, ``b'ULAW'``, " +"``b'ALAW'``, ``b'G722'``." +msgstr "" +"指明压缩类型。 如果未指明,则音频数据将不会被压缩。 在 AIFF 文件中,压缩是无法实现的。 name " +"形参应当为以字节数组表示的人类可读的压缩类型描述,type 形参应当为长度为 4 的字节数组。 目前支持的压缩类型如下: ``b'NONE'``, " +"``b'ULAW'``, ``b'ALAW'``, ``b'G722'``。" + +#: ../../library/aifc.rst:205 +msgid "" +"Set all the above parameters at once. The argument is a tuple consisting of" +" the various parameters. This means that it is possible to use the result " +"of a :meth:`getparams` call as argument to :meth:`setparams`." +msgstr "" +"一次性设置上述所有参数。 该参数是由多个形参组成的元组。 这意味着可以使用 :meth:`getparams` 调用的结果作为 " +":meth:`setparams` 的参数。" + +#: ../../library/aifc.rst:212 +msgid "" +"Add a mark with the given id (larger than 0), and the given name at the " +"given position. This method can be called at any time before :meth:`close`." +msgstr "添加具有给定 id (大于 0),以及在给定位置上给定名称的标记。 此方法可在 :meth:`close` 之前的任何时候被调用。" + +#: ../../library/aifc.rst:219 +msgid "" +"Return the current write position in the output file. Useful in combination" +" with :meth:`setmark`." +msgstr "返回输出文件中的当前写入位置。 适用于与 :meth:`setmark` 进行协同配合。" + +#: ../../library/aifc.rst:225 +msgid "" +"Write data to the output file. This method can only be called after the " +"audio file parameters have been set." +msgstr "将数据写入到输出文件。 此方法只能在设置了音频文件形参之后被调用。" + +#: ../../library/aifc.rst:228 ../../library/aifc.rst:237 +msgid "Any :term:`bytes-like object` is now accepted." +msgstr "现在可接受任意 :term:`bytes-like object`。" + +#: ../../library/aifc.rst:234 +msgid "" +"Like :meth:`writeframes`, except that the header of the audio file is not " +"updated." +msgstr "类似于 :meth:`writeframes`,不同之处在于音频文件的标头不会被更新。" + +#: ../../library/aifc.rst:244 +msgid "" +"Close the AIFF file. The header of the file is updated to reflect the " +"actual size of the audio data. After calling this method, the object can no " +"longer be used." +msgstr "关闭 AIFF 文件。 文件的标头会被更新以反映音频数据的实际大小。 在调用此方法之后,对象将无法再被使用。" diff --git a/library/allos.po b/library/allos.po new file mode 100644 index 000000000..fb881eb06 --- /dev/null +++ b/library/allos.po @@ -0,0 +1,37 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) 2001-2022, Python Software Foundation +# This file is distributed under the same license as the Python package. +# FIRST AUTHOR , YEAR. +# +# Translators: +# Kaizhao Zhang , 2018 +# +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: Python 3.9\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2022-11-04 14:34+0000\n" +"PO-Revision-Date: 2017-02-16 17:47+0000\n" +"Last-Translator: Kaizhao Zhang , 2018\n" +"Language-Team: Chinese (China) (https://www.transifex.com/python-doc/teams/5390/zh_CN/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: zh_CN\n" +"Plural-Forms: nplurals=1; plural=0;\n" + +#: ../../library/allos.rst:5 +msgid "Generic Operating System Services" +msgstr "通用操作系统服务" + +#: ../../library/allos.rst:7 +msgid "" +"The modules described in this chapter provide interfaces to operating system" +" features that are available on (almost) all operating systems, such as " +"files and a clock. The interfaces are generally modeled after the Unix or C" +" interfaces, but they are available on most other systems as well. Here's " +"an overview:" +msgstr "" +"本章中描述的各模块提供了在(几乎)所有的操作系统上可用的操作系统特性的接口,例如文件和时钟。这些接口通常以 Unix 或 C " +"接口为参照对象设计,不过在大多数其他系统上也可用。这里有一个概述:" diff --git a/library/archiving.po b/library/archiving.po new file mode 100644 index 000000000..2aad2a4ff --- /dev/null +++ b/library/archiving.po @@ -0,0 +1,37 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) 2001-2022, Python Software Foundation +# This file is distributed under the same license as the Python package. +# FIRST AUTHOR , YEAR. +# +# Translators: +# 刘士 , 2018 +# Dingyuan Wang , 2019 +# +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: Python 3.9\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2022-11-04 14:34+0000\n" +"PO-Revision-Date: 2017-02-16 17:47+0000\n" +"Last-Translator: Dingyuan Wang , 2019\n" +"Language-Team: Chinese (China) (https://www.transifex.com/python-doc/teams/5390/zh_CN/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: zh_CN\n" +"Plural-Forms: nplurals=1; plural=0;\n" + +#: ../../library/archiving.rst:5 +msgid "Data Compression and Archiving" +msgstr "数据压缩和存档" + +#: ../../library/archiving.rst:7 +msgid "" +"The modules described in this chapter support data compression with the " +"zlib, gzip, bzip2 and lzma algorithms, and the creation of ZIP- and tar-" +"format archives. See also :ref:`archiving-operations` provided by the " +":mod:`shutil` module." +msgstr "" +"本章中描述的模块支持 zlib、gzip、bzip2 和 lzma 数据压缩算法,以及创建 ZIP 和 tar 格式的归档文件。参见由 " +":mod:`shutil` 模块提供的 :ref:`archiving-operations` 。" diff --git a/library/argparse.po b/library/argparse.po new file mode 100644 index 000000000..ac2186055 --- /dev/null +++ b/library/argparse.po @@ -0,0 +1,2152 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) 2001-2025, Python Software Foundation +# This file is distributed under the same license as the Python package. +# FIRST AUTHOR , YEAR. +# +# Translators: +# 操旭 , 2017 +# Menghua Xiao , 2018 +# ppcfish , 2019 +# Dingyuan Wang , 2019 +# Zombie110year , 2019 +# 汪心禾 , 2019 +# stone jing , 2019 +# Freesand Leo , 2022 +# Rafael Fontenelle , 2025 +# +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: Python 3.9\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2025-02-07 16:40+0000\n" +"PO-Revision-Date: 2017-02-16 17:48+0000\n" +"Last-Translator: Rafael Fontenelle , 2025\n" +"Language-Team: Chinese (China) (https://app.transifex.com/python-doc/teams/5390/zh_CN/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: zh_CN\n" +"Plural-Forms: nplurals=1; plural=0;\n" + +#: ../../library/argparse.rst:2 +msgid "" +":mod:`argparse` --- Parser for command-line options, arguments and sub-" +"commands" +msgstr ":mod:`argparse` --- 命令行选项、参数和子命令解析器" + +#: ../../library/argparse.rst:12 +msgid "**Source code:** :source:`Lib/argparse.py`" +msgstr "**源代码:** :source:`Lib/argparse.py`" + +#: ../../library/argparse.rstNone +msgid "Tutorial" +msgstr "教程" + +#: ../../library/argparse.rst:18 +msgid "" +"This page contains the API reference information. For a more gentle " +"introduction to Python command-line parsing, have a look at the " +":ref:`argparse tutorial `." +msgstr "" +"此页面包含该 API 的参考信息。有关 Python 命令行解析更细致的介绍,请参阅 :ref:`argparse 教程 `。" + +#: ../../library/argparse.rst:22 +msgid "" +"The :mod:`argparse` module makes it easy to write user-friendly command-line" +" interfaces. The program defines what arguments it requires, and " +":mod:`argparse` will figure out how to parse those out of :data:`sys.argv`." +" The :mod:`argparse` module also automatically generates help and usage " +"messages and issues errors when users give the program invalid arguments." +msgstr "" +":mod:`argparse` 模块可以让人轻松编写用户友好的命令行接口。程序定义它需要的参数,然后 :mod:`argparse` 将弄清如何从 " +":data:`sys.argv` 解析出那些参数。 :mod:`argparse` " +"模块还会自动生成帮助和使用手册,并在用户给程序传入无效参数时报出错误信息。" + +#: ../../library/argparse.rst:30 +msgid "Example" +msgstr "示例" + +#: ../../library/argparse.rst:32 +msgid "" +"The following code is a Python program that takes a list of integers and " +"produces either the sum or the max::" +msgstr "以下代码是一个 Python 程序,它获取一个整数列表并计算总和或者最大值:" + +#: ../../library/argparse.rst:47 +msgid "" +"Assuming the Python code above is saved into a file called ``prog.py``, it " +"can be run at the command line and provides useful help messages:" +msgstr "假设上面的 Python 代码保存在名为 ``prog.py`` 的文件中,它可以在命令行运行并提供有用的帮助信息:" + +#: ../../library/argparse.rst:64 +msgid "" +"When run with the appropriate arguments, it prints either the sum or the max" +" of the command-line integers:" +msgstr "当使用适当的参数运行时,它会输出命令行传入整数的总和或者最大值:" + +#: ../../library/argparse.rst:75 +msgid "If invalid arguments are passed in, it will issue an error:" +msgstr "如果传入无效参数,则会报出错误:" + +#: ../../library/argparse.rst:83 +msgid "The following sections walk you through this example." +msgstr "以下部分将引导你完成这个示例。" + +#: ../../library/argparse.rst:87 +msgid "Creating a parser" +msgstr "创建一个解析器" + +#: ../../library/argparse.rst:89 +msgid "" +"The first step in using the :mod:`argparse` is creating an " +":class:`ArgumentParser` object::" +msgstr "使用 :mod:`argparse` 的第一步是创建一个 :class:`ArgumentParser` 对象:" + +#: ../../library/argparse.rst:94 +msgid "" +"The :class:`ArgumentParser` object will hold all the information necessary " +"to parse the command line into Python data types." +msgstr ":class:`ArgumentParser` 对象包含将命令行解析成 Python 数据类型所需的全部信息。" + +#: ../../library/argparse.rst:99 +msgid "Adding arguments" +msgstr "添加参数" + +#: ../../library/argparse.rst:101 +msgid "" +"Filling an :class:`ArgumentParser` with information about program arguments " +"is done by making calls to the :meth:`~ArgumentParser.add_argument` method. " +"Generally, these calls tell the :class:`ArgumentParser` how to take the " +"strings on the command line and turn them into objects. This information is" +" stored and used when :meth:`~ArgumentParser.parse_args` is called. For " +"example::" +msgstr "" +"给一个 :class:`ArgumentParser` 添加程序参数信息是通过调用 " +":meth:`~ArgumentParser.add_argument` 方法完成的。通常,这些调用指定 :class:`ArgumentParser`" +" 如何获取命令行字符串并将其转换为对象。这些信息在 :meth:`~ArgumentParser.parse_args` 调用时被存储和使用。例如:" + +#: ../../library/argparse.rst:113 +msgid "" +"Later, calling :meth:`~ArgumentParser.parse_args` will return an object with" +" two attributes, ``integers`` and ``accumulate``. The ``integers`` " +"attribute will be a list of one or more ints, and the ``accumulate`` " +"attribute will be either the :func:`sum` function, if ``--sum`` was " +"specified at the command line, or the :func:`max` function if it was not." +msgstr "" +"然后,调用 :meth:`~ArgumentParser.parse_args` 将返回一个具有 ``integers`` 和 " +"``accumulate`` 两个属性的对象。``integers`` 属性将是一个包含一个或多个整数的列表,而 ``accumulate`` " +"属性当命令行中指定了 ``--sum`` 参数时将是 :func:`sum` 函数,否则则是 :func:`max` 函数。" + +#: ../../library/argparse.rst:121 +msgid "Parsing arguments" +msgstr "解析参数" + +#: ../../library/argparse.rst:123 +msgid "" +":class:`ArgumentParser` parses arguments through the " +":meth:`~ArgumentParser.parse_args` method. This will inspect the command " +"line, convert each argument to the appropriate type and then invoke the " +"appropriate action. In most cases, this means a simple :class:`Namespace` " +"object will be built up from attributes parsed out of the command line::" +msgstr "" +":class:`ArgumentParser` 通过 :meth:`~ArgumentParser.parse_args` " +"方法解析参数。它将检查命令行,把每个参数转换为适当的类型然后调用相应的操作。在大多数情况下,这意味着一个简单的 :class:`Namespace` " +"对象将从命令行解析出的属性构建:" + +#: ../../library/argparse.rst:132 +msgid "" +"In a script, :meth:`~ArgumentParser.parse_args` will typically be called " +"with no arguments, and the :class:`ArgumentParser` will automatically " +"determine the command-line arguments from :data:`sys.argv`." +msgstr "" +"在脚本中,通常 :meth:`~ArgumentParser.parse_args` 会被不带参数调用,而 " +":class:`ArgumentParser` 将自动从 :data:`sys.argv` 中确定命令行参数。" + +#: ../../library/argparse.rst:138 +msgid "ArgumentParser objects" +msgstr "ArgumentParser 对象" + +#: ../../library/argparse.rst:147 +msgid "" +"Create a new :class:`ArgumentParser` object. All parameters should be passed" +" as keyword arguments. Each parameter has its own more detailed description " +"below, but in short they are:" +msgstr "" +"创建一个新的 :class:`ArgumentParser` " +"对象。所有的参数都应当作为关键字参数传入。每个参数在下面都有它更详细的描述,但简而言之,它们是:" + +#: ../../library/argparse.rst:151 +msgid "prog_ - The name of the program (default: ``sys.argv[0]``)" +msgstr "prog_ - 程序的名称(默认:``sys.argv[0]``)" + +#: ../../library/argparse.rst:153 +msgid "" +"usage_ - The string describing the program usage (default: generated from " +"arguments added to parser)" +msgstr "usage_ - 描述程序用途的字符串(默认值:从添加到解析器的参数生成)" + +#: ../../library/argparse.rst:156 +msgid "" +"description_ - Text to display before the argument help (default: none)" +msgstr "description_ - 在参数帮助文档之前显示的文本(默认值:无)" + +#: ../../library/argparse.rst:158 +msgid "epilog_ - Text to display after the argument help (default: none)" +msgstr "epilog_ - 在参数帮助文档之后显示的文本(默认值:无)" + +#: ../../library/argparse.rst:160 +msgid "" +"parents_ - A list of :class:`ArgumentParser` objects whose arguments should " +"also be included" +msgstr "parents_ - 一个 :class:`ArgumentParser` 对象的列表,它们的参数也应包含在内" + +#: ../../library/argparse.rst:163 +msgid "formatter_class_ - A class for customizing the help output" +msgstr "formatter_class_ - 用于自定义帮助文档输出格式的类" + +#: ../../library/argparse.rst:165 +msgid "" +"prefix_chars_ - The set of characters that prefix optional arguments " +"(default: '-')" +msgstr "prefix_chars_ - 可选参数的前缀字符集合(默认值: '-')" + +#: ../../library/argparse.rst:168 +msgid "" +"fromfile_prefix_chars_ - The set of characters that prefix files from which " +"additional arguments should be read (default: ``None``)" +msgstr "fromfile_prefix_chars_ - 当需要从文件中读取其他参数时,用于标识文件名的前缀字符集合(默认值: ``None``)" + +#: ../../library/argparse.rst:171 +msgid "" +"argument_default_ - The global default value for arguments (default: " +"``None``)" +msgstr "argument_default_ - 参数的全局默认值(默认值: ``None``)" + +#: ../../library/argparse.rst:174 +msgid "" +"conflict_handler_ - The strategy for resolving conflicting optionals " +"(usually unnecessary)" +msgstr "conflict_handler_ - 解决冲突选项的策略(通常是不必要的)" + +#: ../../library/argparse.rst:177 +msgid "" +"add_help_ - Add a ``-h/--help`` option to the parser (default: ``True``)" +msgstr "add_help_ - 为解析器添加一个 ``-h/--help`` 选项(默认值: ``True``)" + +#: ../../library/argparse.rst:179 +msgid "" +"allow_abbrev_ - Allows long options to be abbreviated if the abbreviation is" +" unambiguous. (default: ``True``)" +msgstr "allow_abbrev_ - 如果缩写是无歧义的,则允许缩写长选项 (默认值:``True``)" + +#: ../../library/argparse.rst:182 +msgid "" +"exit_on_error_ - Determines whether or not ArgumentParser exits with error " +"info when an error occurs. (default: ``True``)" +msgstr "exit_on_error_ - 决定当错误发生时是否让 ArgumentParser 附带错误信息退出。 (默认值: ``True``)" + +#: ../../library/argparse.rst:185 +msgid "*allow_abbrev* parameter was added." +msgstr "增加了 *allow_abbrev* 参数。" + +#: ../../library/argparse.rst:188 +msgid "" +"In previous versions, *allow_abbrev* also disabled grouping of short flags " +"such as ``-vv`` to mean ``-v -v``." +msgstr "在之前的版本中,*allow_abbrev* 还会禁用短旗标分组,例如 ``-vv`` 表示为 ``-v -v``。" + +#: ../../library/argparse.rst:192 +msgid "*exit_on_error* parameter was added." +msgstr "添加了 *exit_on_error* 形参。" + +#: ../../library/argparse.rst:195 ../../library/argparse.rst:715 +msgid "The following sections describe how each of these are used." +msgstr "以下部分描述这些参数如何使用。" + +#: ../../library/argparse.rst:199 +msgid "prog" +msgstr "prog" + +#: ../../library/argparse.rst:201 +msgid "" +"By default, :class:`ArgumentParser` objects use ``sys.argv[0]`` to determine" +" how to display the name of the program in help messages. This default is " +"almost always desirable because it will make the help messages match how the" +" program was invoked on the command line. For example, consider a file " +"named ``myprogram.py`` with the following code::" +msgstr "" +"默认情况下,:class:`ArgumentParser` 对象使用 ``sys.argv[0]`` " +"来确定如何在帮助消息中显示程序名称。这一默认值几乎总是可取的,因为它将使帮助消息与从命令行调用此程序的方式相匹配。例如,对于有如下代码的名为 " +"``myprogram.py`` 的文件:" + +#: ../../library/argparse.rst:212 +msgid "" +"The help for this program will display ``myprogram.py`` as the program name " +"(regardless of where the program was invoked from):" +msgstr "该程序的帮助信息将显示 ``myprogram.py`` 作为程序名称(无论程序从何处被调用):" + +#: ../../library/argparse.rst:231 +msgid "" +"To change this default behavior, another value can be supplied using the " +"``prog=`` argument to :class:`ArgumentParser`::" +msgstr "要更改这样的默认行为,可以使用 ``prog=`` 参数为 :class:`ArgumentParser` 指定另一个值:" + +#: ../../library/argparse.rst:241 +msgid "" +"Note that the program name, whether determined from ``sys.argv[0]`` or from " +"the ``prog=`` argument, is available to help messages using the ``%(prog)s``" +" format specifier." +msgstr "" +"需要注意的是,无论是从 ``sys.argv[0]`` 或是从 ``prog=`` 参数确定的程序名称,都可以在帮助消息里通过 ``%(prog)s``" +" 格式说明符来引用。" + +#: ../../library/argparse.rst:258 +msgid "usage" +msgstr "usage(用法)" + +#: ../../library/argparse.rst:260 +msgid "" +"By default, :class:`ArgumentParser` calculates the usage message from the " +"arguments it contains::" +msgstr "默认情况下,:class:`ArgumentParser` 根据它包含的参数来构建用法消息:" + +#: ../../library/argparse.rst:276 +msgid "" +"The default message can be overridden with the ``usage=`` keyword argument::" +msgstr "可以通过 ``usage=`` 关键字参数覆盖这一默认消息:" + +#: ../../library/argparse.rst:291 +msgid "" +"The ``%(prog)s`` format specifier is available to fill in the program name " +"in your usage messages." +msgstr "在用法消息中可以使用 ``%(prog)s`` 格式说明符来填入程序名称。" + +#: ../../library/argparse.rst:296 +msgid "description" +msgstr "description" + +#: ../../library/argparse.rst:298 +msgid "" +"Most calls to the :class:`ArgumentParser` constructor will use the " +"``description=`` keyword argument. This argument gives a brief description " +"of what the program does and how it works. In help messages, the " +"description is displayed between the command-line usage string and the help " +"messages for the various arguments::" +msgstr "" +"大多数对 :class:`ArgumentParser` 构造方法的调用都会使用 ``description=`` 关键字参数。 " +"这个参数简要描述这个程序做什么以及怎么做。 在帮助消息中,这个描述会显示在命令行用法字符串和各种参数的帮助消息之间::" + +#: ../../library/argparse.rst:313 +msgid "" +"By default, the description will be line-wrapped so that it fits within the " +"given space. To change this behavior, see the formatter_class_ argument." +msgstr "在默认情况下,description 将被换行以便适应给定的空间。如果想改变这种行为,见 formatter_class_ 参数。" + +#: ../../library/argparse.rst:318 +msgid "epilog" +msgstr "epilog" + +#: ../../library/argparse.rst:320 +msgid "" +"Some programs like to display additional description of the program after " +"the description of the arguments. Such text can be specified using the " +"``epilog=`` argument to :class:`ArgumentParser`::" +msgstr "" +"一些程序喜欢在 description 参数后显示额外的对程序的描述。这种文字能够通过给 :class:`ArgumentParser`:: 提供 " +"``epilog=`` 参数而被指定。" + +#: ../../library/argparse.rst:337 +msgid "" +"As with the description_ argument, the ``epilog=`` text is by default line-" +"wrapped, but this behavior can be adjusted with the formatter_class_ " +"argument to :class:`ArgumentParser`." +msgstr "" +"和 description_ 参数一样,``epilog=`` text 在默认情况下会换行,但是这种行为能够被调整通过提供 " +"formatter_class_ 参数给 :class:`ArgumentParse`." + +#: ../../library/argparse.rst:343 +msgid "parents" +msgstr "parents" + +#: ../../library/argparse.rst:345 +msgid "" +"Sometimes, several parsers share a common set of arguments. Rather than " +"repeating the definitions of these arguments, a single parser with all the " +"shared arguments and passed to ``parents=`` argument to " +":class:`ArgumentParser` can be used. The ``parents=`` argument takes a list" +" of :class:`ArgumentParser` objects, collects all the positional and " +"optional actions from them, and adds these actions to the " +":class:`ArgumentParser` object being constructed::" +msgstr "" +"有些时候,少数解析器会使用同一系列参数。 单个解析器能够通过提供 ``parents=`` 参数给 :class:`ArgumentParser` " +"而使用相同的参数而不是重复这些参数的定义。``parents=`` 参数使用 :class:`ArgumentParser` " +"对象的列表,从它们那里收集所有的位置和可选的行为,然后将这写行为加到正在构建的 :class:`ArgumentParser` 对象。" + +#: ../../library/argparse.rst:365 +msgid "" +"Note that most parent parsers will specify ``add_help=False``. Otherwise, " +"the :class:`ArgumentParser` will see two ``-h/--help`` options (one in the " +"parent and one in the child) and raise an error." +msgstr "" +"请注意大多数父解析器会指定 ``add_help=False`` . 否则, :class:`ArgumentParse` 将会看到两个 " +"``-h/--help`` 选项(一个在父参数中一个在子参数中)并且产生一个错误。" + +#: ../../library/argparse.rst:370 +msgid "" +"You must fully initialize the parsers before passing them via ``parents=``. " +"If you change the parent parsers after the child parser, those changes will " +"not be reflected in the child." +msgstr "你在通过 ``parents=`` 传递解析器之前必须完全初始化它们。 如果你在子解析器之后改变父解析器,这些改变将不会反映在子解析器上。" + +#: ../../library/argparse.rst:376 +msgid "formatter_class" +msgstr "formatter_class" + +#: ../../library/argparse.rst:378 +msgid "" +":class:`ArgumentParser` objects allow the help formatting to be customized " +"by specifying an alternate formatting class. Currently, there are four such" +" classes:" +msgstr ":class:`ArgumentParser` 对象允许通过指定备用格式化类来自定义帮助格式。目前,有四种这样的类。" + +#: ../../library/argparse.rst:387 +msgid "" +":class:`RawDescriptionHelpFormatter` and :class:`RawTextHelpFormatter` give " +"more control over how textual descriptions are displayed. By default, " +":class:`ArgumentParser` objects line-wrap the description_ and epilog_ texts" +" in command-line help messages::" +msgstr "" +":class:`RawDescriptionHelpFormatter` 和 :class:`RawTextHelpFormatter` " +"在正文的描述和展示上给与了更多的控制。:class:`ArgumentParser` 对象会将 description_ 和 epilog_ " +"的文字在命令行中自动换行。" + +#: ../../library/argparse.rst:412 +msgid "" +"Passing :class:`RawDescriptionHelpFormatter` as ``formatter_class=`` " +"indicates that description_ and epilog_ are already correctly formatted and " +"should not be line-wrapped::" +msgstr "" +"传 :class:`RawDescriptionHelpFormatter` 给 ``formatter_class=`` 表示 " +"description_ 和 epilog_ 已经被正确的格式化了,不能在命令行中被自动换行::" + +#: ../../library/argparse.rst:438 +msgid "" +":class:`RawTextHelpFormatter` maintains whitespace for all sorts of help " +"text, including argument descriptions. However, multiple new lines are " +"replaced with one. If you wish to preserve multiple blank lines, add spaces " +"between the newlines." +msgstr "" +":class:`RawTextHelpFormatter` " +"保留所有种类文字的空格,包括参数的描述。然而,多重的新行会被替换成一行。如果你想保留多重的空白行,可以在新行之间加空格。" + +#: ../../library/argparse.rst:443 +msgid "" +":class:`ArgumentDefaultsHelpFormatter` automatically adds information about " +"default values to each of the argument help messages::" +msgstr ":class:`ArgumentDefaultsHelpFormatter` 自动添加默认的值的信息到每一个帮助信息的参数中::" + +#: ../../library/argparse.rst:461 +msgid "" +":class:`MetavarTypeHelpFormatter` uses the name of the type_ argument for " +"each argument as the display name for its values (rather than using the " +"dest_ as the regular formatter does)::" +msgstr "" +":class:`MetavarTypeHelpFormatter` 为它的值在每一个参数中使用 type_ 的参数名当作它的显示名(而不是使用通常的格式" +" dest_ )::" + +#: ../../library/argparse.rst:482 +msgid "prefix_chars" +msgstr "prefix_chars" + +#: ../../library/argparse.rst:484 +msgid "" +"Most command-line options will use ``-`` as the prefix, e.g. ``-f/--foo``. " +"Parsers that need to support different or additional prefix characters, e.g." +" for options like ``+f`` or ``/foo``, may specify them using the " +"``prefix_chars=`` argument to the ArgumentParser constructor::" +msgstr "" +"许多命令行会使用 ``-`` 当作前缀,比如 ``-f/--foo``。如果解析器需要支持不同的或者额外的字符,比如像 ``+f`` 或者 " +"``/foo`` 的选项,可以在参数解析构建器中使用 ``prefix_chars=`` 参数。" + +#: ../../library/argparse.rst:496 +msgid "" +"The ``prefix_chars=`` argument defaults to ``'-'``. Supplying a set of " +"characters that does not include ``-`` will cause ``-f/--foo`` options to be" +" disallowed." +msgstr "" +"``prefix_chars=`` 参数默认使用 ``'-'``。 提供一组不包括 ``-`` 的字符将导致 ``-f/--foo`` 选项不被允许。" + +#: ../../library/argparse.rst:502 +msgid "fromfile_prefix_chars" +msgstr "fromfile_prefix_chars" + +#: ../../library/argparse.rst:504 +msgid "" +"Sometimes, for example when dealing with a particularly long argument list, " +"it may make sense to keep the list of arguments in a file rather than typing" +" it out at the command line. If the ``fromfile_prefix_chars=`` argument is " +"given to the :class:`ArgumentParser` constructor, then arguments that start " +"with any of the specified characters will be treated as files, and will be " +"replaced by the arguments they contain. For example::" +msgstr "" +"在某些时候,例如在处理一个特别长的参数列表的时候,把参数列表存入一个文件中而不是在命令行中打印出来会更有意义。 如果提供 " +"``fromfile_prefix_chars=`` 参数给 :class:`ArgumentParser` " +"构造器,则任何以指定字符打头的参数都将被当作文件来处理,并将被它们包含的参数所替代。 举例来说::" + +#: ../../library/argparse.rst:518 +msgid "" +"Arguments read from a file must by default be one per line (but see also " +":meth:`~ArgumentParser.convert_arg_line_to_args`) and are treated as if they" +" were in the same place as the original file referencing argument on the " +"command line. So in the example above, the expression ``['-f', 'foo', " +"'@args.txt']`` is considered equivalent to the expression ``['-f', 'foo', " +"'-f', 'bar']``." +msgstr "" +"从文件读取的参数在默认情况下必须一个一行(但是可参见 " +":meth:`~ArgumentParser.convert_arg_line_to_args`)并且它们被视为与命令行上的原始文件引用参数位于同一位置。所以在以上例子中,``['-f'," +" 'foo', '@args.txt']`` 的表示和 ``['-f', 'foo', '-f', 'bar']`` 的表示相同。" + +#: ../../library/argparse.rst:524 +msgid "" +"The ``fromfile_prefix_chars=`` argument defaults to ``None``, meaning that " +"arguments will never be treated as file references." +msgstr "``fromfile_prefix_chars=`` 参数默认为 ``None``,意味着参数不会被当作文件对待。" + +#: ../../library/argparse.rst:529 +msgid "argument_default" +msgstr "argument_default" + +#: ../../library/argparse.rst:531 +msgid "" +"Generally, argument defaults are specified either by passing a default to " +":meth:`~ArgumentParser.add_argument` or by calling the " +":meth:`~ArgumentParser.set_defaults` methods with a specific set of name-" +"value pairs. Sometimes however, it may be useful to specify a single " +"parser-wide default for arguments. This can be accomplished by passing the " +"``argument_default=`` keyword argument to :class:`ArgumentParser`. For " +"example, to globally suppress attribute creation on " +":meth:`~ArgumentParser.parse_args` calls, we supply " +"``argument_default=SUPPRESS``::" +msgstr "" +"一般情况下,参数默认会通过设置一个默认到 :meth:`~ArgumentParser.add_argument` 或者调用带一组指定键值对的 " +":meth:`ArgumentParser.set_defaults` 方法。但是有些时候,为参数指定一个普遍适用的解析器会更有用。这能够通过传输 " +"``argument_default=`` 关键词参数给 :class:`ArgumentParser` 来完成。举个栗子,要全局禁止在 " +":meth:`~ArgumentParser.parse_args` 中创建属性,我们提供 " +"``argument_default=SUPPRESS``::" + +#: ../../library/argparse.rst:551 +msgid "allow_abbrev" +msgstr "allow_abbrev" + +#: ../../library/argparse.rst:553 +msgid "" +"Normally, when you pass an argument list to the " +":meth:`~ArgumentParser.parse_args` method of an :class:`ArgumentParser`, it " +":ref:`recognizes abbreviations ` of long options." +msgstr "" +"正常情况下,当你向 :class:`ArgumentParser` 的 :meth:`~ArgumentParser.parse_args` " +"方法传入一个参数列表时,它会 :ref:`recognizes abbreviations `。" + +#: ../../library/argparse.rst:557 +msgid "" +"This feature can be disabled by setting ``allow_abbrev`` to ``False``::" +msgstr "这个特性可以设置 ``allow_abbrev`` 为 ``False`` 来关闭::" + +#: ../../library/argparse.rst:570 +msgid "conflict_handler" +msgstr "conflict_handler" + +#: ../../library/argparse.rst:572 +msgid "" +":class:`ArgumentParser` objects do not allow two actions with the same " +"option string. By default, :class:`ArgumentParser` objects raise an " +"exception if an attempt is made to create an argument with an option string " +"that is already in use::" +msgstr "" +":class:`ArgumentParser` 对象不允许在相同选项字符串下有两种行为。默认情况下, :class:`ArgumentParser` " +"对象会产生一个异常如果去创建一个正在使用的选项字符串参数。" + +#: ../../library/argparse.rst:584 +msgid "" +"Sometimes (e.g. when using parents_) it may be useful to simply override any" +" older arguments with the same option string. To get this behavior, the " +"value ``'resolve'`` can be supplied to the ``conflict_handler=`` argument of" +" :class:`ArgumentParser`::" +msgstr "" +"有些时候(例如:使用 parents_),重写旧的有相同选项字符串的参数会更有用。为了产生这种行为, ``'resolve'`` 值可以提供给 " +":class:`ArgumentParser` 的 ``conflict_handler=`` 参数::" + +#: ../../library/argparse.rst:600 +msgid "" +"Note that :class:`ArgumentParser` objects only remove an action if all of " +"its option strings are overridden. So, in the example above, the old " +"``-f/--foo`` action is retained as the ``-f`` action, because only the " +"``--foo`` option string was overridden." +msgstr "" +"注意 :class:`ArgumentParser` 对象只能移除一个行为如果它所有的选项字符串都被重写。所以,在上面的例子中,旧的 " +"``-f/--foo`` 行为 回合 ``-f`` 行为保持一样, 因为只有 ``--foo`` 选项字符串被重写。" + +#: ../../library/argparse.rst:607 +msgid "add_help" +msgstr "add_help" + +#: ../../library/argparse.rst:609 +msgid "" +"By default, ArgumentParser objects add an option which simply displays the " +"parser's help message. For example, consider a file named ``myprogram.py`` " +"containing the following code::" +msgstr "" +"默认情况下,ArgumentParser 对象添加一个简单的显示解析器帮助信息的选项。举个栗子,考虑一个名为 ``myprogram.py`` " +"的文件包含如下代码::" + +#: ../../library/argparse.rst:618 +msgid "" +"If ``-h`` or ``--help`` is supplied at the command line, the ArgumentParser " +"help will be printed:" +msgstr "如果 ``-h`` or ``--help`` 在命令行中被提供, 参数解析器帮助信息会打印::" + +#: ../../library/argparse.rst:630 +msgid "" +"Occasionally, it may be useful to disable the addition of this help option. " +"This can be achieved by passing ``False`` as the ``add_help=`` argument to " +":class:`ArgumentParser`::" +msgstr "" +"有时候可能会需要关闭额外的帮助信息。这可以通过在 :class:`ArgumentParser` 中设置 ``add_help=`` 参数为 " +"``False`` 来实现。" + +#: ../../library/argparse.rst:642 +msgid "" +"The help option is typically ``-h/--help``. The exception to this is if the " +"``prefix_chars=`` is specified and does not include ``-``, in which case " +"``-h`` and ``--help`` are not valid options. In this case, the first " +"character in ``prefix_chars`` is used to prefix the help options::" +msgstr "" +"帮助选项一般为 ``-h/--help``。如果 ``prefix_chars=`` 被指定并且没有包含 ``-`` 字符,在这种情况下, ``-h``" +" ``--help`` 不是有效的选项。此时, ``prefix_chars`` 的第一个字符将用作帮助选项的前缀。" + +#: ../../library/argparse.rst:657 +msgid "exit_on_error" +msgstr "exit_on_error" + +#: ../../library/argparse.rst:659 +msgid "" +"Normally, when you pass an invalid argument list to the " +":meth:`~ArgumentParser.parse_args` method of an :class:`ArgumentParser`, it " +"will exit with error info." +msgstr "" +"正常情况下,当你向 :class:`ArgumentParser` 的 :meth:`~ArgumentParser.parse_args` " +"方法传入一个无效的参数列表时,它将会退出并发出错误信息。" + +#: ../../library/argparse.rst:662 +msgid "" +"If the user would like to catch errors manually, the feature can be enabled " +"by setting ``exit_on_error`` to ``False``::" +msgstr "如果用户想要手动捕获错误,可通过将 ``exit_on_error`` 设为 ``False`` 来启用该特性::" + +#: ../../library/argparse.rst:679 +msgid "The add_argument() method" +msgstr "add_argument() 方法" + +#: ../../library/argparse.rst:685 +msgid "" +"Define how a single command-line argument should be parsed. Each parameter " +"has its own more detailed description below, but in short they are:" +msgstr "定义单个的命令行参数应当如何解析。每个形参都在下面有它自己更多的描述,长话短说有:" + +#: ../../library/argparse.rst:688 +msgid "" +"`name or flags`_ - Either a name or a list of option strings, e.g. ``foo`` " +"or ``-f, --foo``." +msgstr "`name or flags`_ - 一个命名或者一个选项字符串的列表,例如 ``foo`` 或 ``-f, --foo``。" + +#: ../../library/argparse.rst:691 +msgid "" +"action_ - The basic type of action to be taken when this argument is " +"encountered at the command line." +msgstr "action_ - 当参数在命令行中出现时使用的动作基本类型。" + +#: ../../library/argparse.rst:694 +msgid "nargs_ - The number of command-line arguments that should be consumed." +msgstr "nargs_ - 命令行参数应当消耗的数目。" + +#: ../../library/argparse.rst:696 +msgid "" +"const_ - A constant value required by some action_ and nargs_ selections." +msgstr "const_ - 被一些 action_ 和 nargs_ 选择所需求的常数。" + +#: ../../library/argparse.rst:698 +msgid "" +"default_ - The value produced if the argument is absent from the command " +"line and if it is absent from the namespace object." +msgstr "default_ - 当参数未在命令行中出现并且也不存在于命名空间对象时所产生的值。" + +#: ../../library/argparse.rst:701 +msgid "" +"type_ - The type to which the command-line argument should be converted." +msgstr "type_ - 命令行参数应当被转换成的类型。" + +#: ../../library/argparse.rst:703 +msgid "choices_ - A container of the allowable values for the argument." +msgstr "choices_ - 可用的参数的容器。" + +#: ../../library/argparse.rst:705 +msgid "" +"required_ - Whether or not the command-line option may be omitted (optionals" +" only)." +msgstr "required_ - 此命令行选项是否可省略 (仅选项可用)。" + +#: ../../library/argparse.rst:708 +msgid "help_ - A brief description of what the argument does." +msgstr "help_ - 一个此选项作用的简单描述。" + +#: ../../library/argparse.rst:710 +msgid "metavar_ - A name for the argument in usage messages." +msgstr "metavar_ - 在使用方法消息中使用的参数值示例。" + +#: ../../library/argparse.rst:712 +msgid "" +"dest_ - The name of the attribute to be added to the object returned by " +":meth:`parse_args`." +msgstr "dest_ - 被添加到 :meth:`parse_args` 所返回对象上的属性名。" + +#: ../../library/argparse.rst:719 +msgid "name or flags" +msgstr "name or flags" + +#: ../../library/argparse.rst:721 +msgid "" +"The :meth:`~ArgumentParser.add_argument` method must know whether an " +"optional argument, like ``-f`` or ``--foo``, or a positional argument, like " +"a list of filenames, is expected. The first arguments passed to " +":meth:`~ArgumentParser.add_argument` must therefore be either a series of " +"flags, or a simple argument name. For example, an optional argument could " +"be created like::" +msgstr "" +":meth:`~ArgumentParser.add_argument` 方法必须知道它是否是一个选项,例如 ``-f`` 或 " +"``--foo``,或是一个位置参数,例如一组文件名。 第一个传递给 :meth:`~ArgumentParser.add_argument` " +"的参数必须是一系列旗标或者是一个简单的参数名。例如,可选参数可以被这样创建::" + +#: ../../library/argparse.rst:730 +msgid "while a positional argument could be created like::" +msgstr "而位置参数可以这么创建::" + +#: ../../library/argparse.rst:734 +msgid "" +"When :meth:`~ArgumentParser.parse_args` is called, optional arguments will " +"be identified by the ``-`` prefix, and the remaining arguments will be " +"assumed to be positional::" +msgstr "" +"当 :meth:`~ArgumentParser.parse_args` 被调用,选项会以 ``-`` 前缀识别,剩下的参数则会被假定为位置参数::" + +#: ../../library/argparse.rst:751 +msgid "action" +msgstr "action" + +#: ../../library/argparse.rst:753 +msgid "" +":class:`ArgumentParser` objects associate command-line arguments with " +"actions. These actions can do just about anything with the command-line " +"arguments associated with them, though most actions simply add an attribute " +"to the object returned by :meth:`~ArgumentParser.parse_args`. The " +"``action`` keyword argument specifies how the command-line arguments should " +"be handled. The supplied actions are:" +msgstr "" +":class:`ArgumentParser` 对象将命令行参数与动作相关联。这些动作可以做与它们相关联的命令行参数的任何事,尽管大多数动作只是简单的向" +" :meth:`~ArgumentParser.parse_args` 返回的对象上添加属性。``action`` " +"命名参数指定了这个命令行参数应当如何处理。供应的动作有:" + +#: ../../library/argparse.rst:759 +msgid "" +"``'store'`` - This just stores the argument's value. This is the default " +"action. For example::" +msgstr "``'store'`` - 存储参数的值。这是默认的动作。例如::" + +#: ../../library/argparse.rst:767 +msgid "" +"``'store_const'`` - This stores the value specified by the const_ keyword " +"argument. The ``'store_const'`` action is most commonly used with optional " +"arguments that specify some sort of flag. For example::" +msgstr "" +"``'store_const'`` - 存储被 const_ 命名参数指定的值。 ``'store_const'`` " +"动作通常用在选项中来指定一些标志。例如::" + +#: ../../library/argparse.rst:776 +msgid "" +"``'store_true'`` and ``'store_false'`` - These are special cases of " +"``'store_const'`` used for storing the values ``True`` and ``False`` " +"respectively. In addition, they create default values of ``False`` and " +"``True`` respectively. For example::" +msgstr "" +"``'store_true'`` and ``'store_false'`` - 这些是 ``'store_const'`` 分别用作存储 " +"``True`` 和 ``False`` 值的特殊用例。另外,它们的默认值分别为 ``False`` 和 ``True``。例如::" + +#: ../../library/argparse.rst:788 +msgid "" +"``'append'`` - This stores a list, and appends each argument value to the " +"list. This is useful to allow an option to be specified multiple times. " +"Example usage::" +msgstr "``'append'`` - 存储一个列表,并且将每个参数值追加到列表中。在允许多次使用选项时很有用。例如::" + +#: ../../library/argparse.rst:797 +msgid "" +"``'append_const'`` - This stores a list, and appends the value specified by " +"the const_ keyword argument to the list. (Note that the const_ keyword " +"argument defaults to ``None``.) The ``'append_const'`` action is typically " +"useful when multiple arguments need to store constants to the same list. For" +" example::" +msgstr "" +"``'append_const'`` - 这存储一个列表,并将 const_ 命名参数指定的值追加到列表中。(注意 const_ 命名参数默认为 " +"``None``。)``'append_const'`` 动作一般在多个参数需要在同一列表中存储常数时会有用。例如::" + +#: ../../library/argparse.rst:809 +msgid "" +"``'count'`` - This counts the number of times a keyword argument occurs. For" +" example, this is useful for increasing verbosity levels::" +msgstr "``'count'`` - 计算一个关键字参数出现的数目或次数。例如,对于一个增长的详情等级来说有用::" + +#: ../../library/argparse.rst:817 +msgid "Note, the *default* will be ``None`` unless explicitly set to *0*." +msgstr "请注意,*default* 将为 ``None``,除非显式地设为 *0*。" + +#: ../../library/argparse.rst:819 +msgid "" +"``'help'`` - This prints a complete help message for all the options in the " +"current parser and then exits. By default a help action is automatically " +"added to the parser. See :class:`ArgumentParser` for details of how the " +"output is created." +msgstr "" +"``'help'`` - 打印所有当前解析器中的选项和参数的完整帮助信息,然后退出。默认情况下,一个 help " +"动作会被自动加入解析器。关于输出是如何创建的,参与 :class:`ArgumentParser`。" + +#: ../../library/argparse.rst:824 +msgid "" +"``'version'`` - This expects a ``version=`` keyword argument in the " +":meth:`~ArgumentParser.add_argument` call, and prints version information " +"and exits when invoked::" +msgstr "" +"``'version'`` - 期望有一个 ``version=`` 命名参数在 " +":meth:`~ArgumentParser.add_argument` 调用中,并打印版本信息并在调用后退出::" + +#: ../../library/argparse.rst:834 +msgid "" +"``'extend'`` - This stores a list, and extends each argument value to the " +"list. Example usage::" +msgstr "``'extend'`` - 这会存储一个列表,并将每个参数值加入到列表中。 示例用法::" + +#: ../../library/argparse.rst:845 +msgid "" +"You may also specify an arbitrary action by passing an Action subclass or " +"other object that implements the same interface. The " +"``BooleanOptionalAction`` is available in ``argparse`` and adds support for " +"boolean actions such as ``--foo`` and ``--no-foo``::" +msgstr "" +"你还可以通过传递一个 Action 子类或实现相同接口的其他对象来指定任意操作。 ``BooleanOptionalAction`` 在 " +"``argparse`` 中可用并会添加对布尔型操作例如 ``--foo`` 和 ``--no-foo`` 的支持::" + +#: ../../library/argparse.rst:858 +msgid "" +"The recommended way to create a custom action is to extend :class:`Action`, " +"overriding the ``__call__`` method and optionally the ``__init__`` and " +"``format_usage`` methods." +msgstr "" +"创建自定义动作的推荐方式是扩展 :class:`Action`,重写 ``__call__`` 方法以及可选的 ``__init__`` 和 " +"``format_usage`` 方法。" + +#: ../../library/argparse.rst:862 +msgid "An example of a custom action::" +msgstr "一个自定义动作的例子::" + +#: ../../library/argparse.rst:882 +msgid "For more details, see :class:`Action`." +msgstr "更多描述,见 :class:`Action`。" + +#: ../../library/argparse.rst:885 +msgid "nargs" +msgstr "nargs" + +#: ../../library/argparse.rst:887 +msgid "" +"ArgumentParser objects usually associate a single command-line argument with" +" a single action to be taken. The ``nargs`` keyword argument associates a " +"different number of command-line arguments with a single action. The " +"supported values are:" +msgstr "" +"ArgumentParser 对象通常关联一个单独的命令行参数到一个单独的被执行的动作。 ``nargs`` " +"命名参数关联不同数目的命令行参数到单一动作。支持的值有:" + +#: ../../library/argparse.rst:892 +msgid "" +"``N`` (an integer). ``N`` arguments from the command line will be gathered " +"together into a list. For example::" +msgstr "``N`` (一个整数)。命令行中的 ``N`` 个参数会被聚集到一个列表中。 例如::" + +#: ../../library/argparse.rst:901 +msgid "" +"Note that ``nargs=1`` produces a list of one item. This is different from " +"the default, in which the item is produced by itself." +msgstr "注意 ``nargs=1`` 会产生一个单元素列表。这和默认的元素本身是不同的。" + +#: ../../library/argparse.rst:906 +msgid "" +"``'?'``. One argument will be consumed from the command line if possible, " +"and produced as a single item. If no command-line argument is present, the " +"value from default_ will be produced. Note that for optional arguments, " +"there is an additional case - the option string is present but not followed " +"by a command-line argument. In this case the value from const_ will be " +"produced. Some examples to illustrate this::" +msgstr "" +"``'?'``。 如果可能的话,会从命令行中消耗一个参数,并产生一个单独项。 如果当前没有命令行参数,将会产生 default_ 值。 " +"注意对于可选参数来说,还有一个额外情况 —— 出现了选项字符串但没有跟随命令行参数,在此情况下将会产生 const_ 值。 " +"一些说明这种情况的例子如下::" + +#: ../../library/argparse.rst:923 +msgid "" +"One of the more common uses of ``nargs='?'`` is to allow optional input and " +"output files::" +msgstr "``nargs='?'`` 的一个更普遍用法是允许可选的输入或输出文件::" + +#: ../../library/argparse.rst:940 +msgid "" +"``'*'``. All command-line arguments present are gathered into a list. Note" +" that it generally doesn't make much sense to have more than one positional " +"argument with ``nargs='*'``, but multiple optional arguments with " +"``nargs='*'`` is possible. For example::" +msgstr "" +"``'*'``。所有当前命令行参数被聚集到一个列表中。注意通过 ``nargs='*'`` " +"来实现多个位置参数通常没有意义,但是多个选项是可能的。例如::" + +#: ../../library/argparse.rst:954 +msgid "" +"``'+'``. Just like ``'*'``, all command-line args present are gathered into " +"a list. Additionally, an error message will be generated if there wasn't at" +" least one command-line argument present. For example::" +msgstr "" +"``'+'``。和 ``'*'`` 类似,所有当前命令行参数被聚集到一个列表中。另外,当前没有至少一个命令行参数时会产生一个错误信息。例如::" + +#: ../../library/argparse.rst:966 +msgid "" +"If the ``nargs`` keyword argument is not provided, the number of arguments " +"consumed is determined by the action_. Generally this means a single " +"command-line argument will be consumed and a single item (not a list) will " +"be produced." +msgstr "如果不提供 ``nargs`` 命名参数,则消耗参数的数目将被 action_ 决定。通常这意味着单一项目(非列表)消耗单一命令行参数。" + +#: ../../library/argparse.rst:972 +msgid "const" +msgstr "const" + +#: ../../library/argparse.rst:974 +msgid "" +"The ``const`` argument of :meth:`~ArgumentParser.add_argument` is used to " +"hold constant values that are not read from the command line but are " +"required for the various :class:`ArgumentParser` actions. The two most " +"common uses of it are:" +msgstr "" +":meth:`~ArgumentParser.add_argument` 的 ``const`` 参数用于保存不从命令行中读取但被各种 " +":class:`ArgumentParser` 动作需求的常数值。最常用的两例为:" + +#: ../../library/argparse.rst:978 +msgid "" +"When :meth:`~ArgumentParser.add_argument` is called with " +"``action='store_const'`` or ``action='append_const'``. These actions add " +"the ``const`` value to one of the attributes of the object returned by " +":meth:`~ArgumentParser.parse_args`. See the action_ description for " +"examples." +msgstr "" +"当 :meth:`~ArgumentParser.add_argument` 通过 ``action='store_const'`` 或 " +"``action='append_const`` 调用时。这些动作将 ``const`` 值添加到 " +":meth:`~ArgumentParser.parse_args` 返回的对象的属性中。在 action_ 的描述中查看案例。" + +#: ../../library/argparse.rst:983 +msgid "" +"When :meth:`~ArgumentParser.add_argument` is called with option strings " +"(like ``-f`` or ``--foo``) and ``nargs='?'``. This creates an optional " +"argument that can be followed by zero or one command-line arguments. When " +"parsing the command line, if the option string is encountered with no " +"command-line argument following it, the value of ``const`` will be assumed " +"instead. See the nargs_ description for examples." +msgstr "" +"当 :meth:`~ArgumentParser.add_argument` 通过选项(例如 ``-f`` 或 ``--foo``)调用并且 " +"``nargs='?'`` 时。这会创建一个可以跟随零个或一个命令行参数的选项。当解析命令行时,如果选项后没有参数,则将用 ``const`` 代替。在" +" nargs_ 描述中查看案例。" + +#: ../../library/argparse.rst:990 +msgid "" +"With the ``'store_const'`` and ``'append_const'`` actions, the ``const`` " +"keyword argument must be given. For other actions, it defaults to ``None``." +msgstr "" +"对 ``'store_const'`` 和 ``'append_const'`` 动作, ``const`` 命名参数必须给出。对其他动作,默认为 " +"``None``。" + +#: ../../library/argparse.rst:995 +msgid "default" +msgstr "默认值" + +#: ../../library/argparse.rst:997 +msgid "" +"All optional arguments and some positional arguments may be omitted at the " +"command line. The ``default`` keyword argument of " +":meth:`~ArgumentParser.add_argument`, whose value defaults to ``None``, " +"specifies what value should be used if the command-line argument is not " +"present. For optional arguments, the ``default`` value is used when the " +"option string was not present at the command line::" +msgstr "" +"所有选项和一些位置参数可能在命令行中被忽略。:meth:`~ArgumentParser.add_argument` 的命名参数 " +"``default``,默认值为 ``None``,指定了在命令行参数未出现时应当使用的值。对于选项, ``default`` " +"值在选项未在命令行中出现时使用::" + +#: ../../library/argparse.rst:1011 +msgid "" +"If the target namespace already has an attribute set, the action *default* " +"will not over write it::" +msgstr "如果目标命名空间已经有一个属性集,则 *default* 动作不会覆盖它::" + +#: ../../library/argparse.rst:1019 +msgid "" +"If the ``default`` value is a string, the parser parses the value as if it " +"were a command-line argument. In particular, the parser applies any type_ " +"conversion argument, if provided, before setting the attribute on the " +":class:`Namespace` return value. Otherwise, the parser uses the value as " +"is::" +msgstr "" +"如果 ``default`` 值是一个字符串,解析器解析此值就像一个命令行参数。特别是,在将属性设置在 :class:`Namespace` " +"的返回值之前,解析器应用任何提供的 type_ 转换参数。否则解析器使用原值::" + +#: ../../library/argparse.rst:1030 +msgid "" +"For positional arguments with nargs_ equal to ``?`` or ``*``, the " +"``default`` value is used when no command-line argument was present::" +msgstr "对于 nargs_ 等于 ``?`` 或 ``*`` 的位置参数, ``default`` 值在没有命令行参数出现时使用。" + +#: ../../library/argparse.rst:1041 +msgid "" +"Providing ``default=argparse.SUPPRESS`` causes no attribute to be added if " +"the command-line argument was not present::" +msgstr "提供 ``default=argparse.SUPPRESS`` 导致命令行参数未出现时没有属性被添加::" + +#: ../../library/argparse.rst:1053 +msgid "type" +msgstr "type" + +#: ../../library/argparse.rst:1055 +msgid "" +"By default, the parser reads command-line arguments in as simple strings. " +"However, quite often the command-line string should instead be interpreted " +"as another type, such as a :class:`float` or :class:`int`. The ``type`` " +"keyword for :meth:`~ArgumentParser.add_argument` allows any necessary type-" +"checking and type conversions to be performed." +msgstr "" +"默认情况下,解析器会将命令行参数当作简单字符串读入。 然而,命令行字符串经常应当被解读为其他类型,例如 :class:`float` 或 " +":class:`int`。 :meth:`~ArgumentParser.add_argument` 的 ``type`` " +"关键字允许执行任何必要的类型检查和类型转换。" + +#: ../../library/argparse.rst:1061 +msgid "" +"If the type_ keyword is used with the default_ keyword, the type converter " +"is only applied if the default is a string." +msgstr "如果 type_ 关键字使用了 default_ 关键字,则类型转换器仅会在默认值为字符串时被应用。" + +#: ../../library/argparse.rst:1064 +msgid "" +"The argument to ``type`` can be any callable that accepts a single string. " +"If the function raises :exc:`ArgumentTypeError`, :exc:`TypeError`, or " +":exc:`ValueError`, the exception is caught and a nicely formatted error " +"message is displayed. No other exception types are handled." +msgstr "" +"传给 ``type`` 的参数可以是任何接受单个字符串的可调用对象。 如果函数引发了 :exc:`ArgumentTypeError`, " +":exc:`TypeError` 或 :exc:`ValueError`,异常会被捕获并显示经过良好格式化的错误消息。 其他异常类型则不会被处理。" + +#: ../../library/argparse.rst:1069 +msgid "Common built-in types and functions can be used as type converters:" +msgstr "普通内置类型和函数可被用作类型转换器:" + +#: ../../library/argparse.rst:1085 +msgid "User defined functions can be used as well:" +msgstr "用户自定义的函数也可以被使用:" + +#: ../../library/argparse.rst:1097 +msgid "" +"The :func:`bool` function is not recommended as a type converter. All it " +"does is convert empty strings to ``False`` and non-empty strings to " +"``True``. This is usually not what is desired." +msgstr "" +"不建议将 :func:`bool` 函数用作类型转换器。 它所做的只是将空字符串转为 ``False`` 而将非空字符串转为 ``True``。 " +"这通常不是用户所想要的。" + +#: ../../library/argparse.rst:1101 +msgid "" +"In general, the ``type`` keyword is a convenience that should only be used " +"for simple conversions that can only raise one of the three supported " +"exceptions. Anything with more interesting error-handling or resource " +"management should be done downstream after the arguments are parsed." +msgstr "" +"通常,``type`` 关键字是仅应被用于只会引发上述三种被支持的异常的简单转换的便捷选项。 " +"任何具有更复杂错误处理或资源管理的转换都应当在参数被解析后由下游代码来完成。" + +#: ../../library/argparse.rst:1106 +msgid "" +"For example, JSON or YAML conversions have complex error cases that require " +"better reporting than can be given by the ``type`` keyword. A " +":exc:`~json.JSONDecodeError` would not be well formatted and a " +":exc:`FileNotFound` exception would not be handled at all." +msgstr "" +"例如,JSON 或 YAML 转换具有复杂的错误情况,要求给出比 ``type`` 关键字所能给出的更好的报告。 " +":exc:`~json.JSONDecodeError` 将不会被良好地格式化而 :exc:`FileNotFound` 异常则完全不会被处理。" + +#: ../../library/argparse.rst:1111 +msgid "" +"Even :class:`~argparse.FileType` has its limitations for use with the " +"``type`` keyword. If one argument uses *FileType* and then a subsequent " +"argument fails, an error is reported but the file is not automatically " +"closed. In this case, it would be better to wait until after the parser has" +" run and then use the :keyword:`with`-statement to manage the files." +msgstr "" +"即使 :class:`~argparse.FileType` 在用于 ``type`` 关键字时也存在限制。 如果一个参数使用了 *FileType* " +"并且有一个后续参数出错,则将报告一个错误但文件并不会被自动关闭。 在此情况下,更好的做法是等待直到解析器运行完毕再使用 :keyword:`with` " +"语句来管理文件。" + +#: ../../library/argparse.rst:1117 +msgid "" +"For type checkers that simply check against a fixed set of values, consider " +"using the choices_ keyword instead." +msgstr "对于简单地检查一组固定值的类型检查器,请考虑改用 choices_ 关键字。" + +#: ../../library/argparse.rst:1122 +msgid "choices" +msgstr "choices" + +#: ../../library/argparse.rst:1124 +msgid "" +"Some command-line arguments should be selected from a restricted set of " +"values. These can be handled by passing a container object as the *choices* " +"keyword argument to :meth:`~ArgumentParser.add_argument`. When the command " +"line is parsed, argument values will be checked, and an error message will " +"be displayed if the argument was not one of the acceptable values::" +msgstr "" +"某些命令行参数应当从一组受限值中选择。 这可通过将一个容器对象作为 *choices* 关键字参数传给 " +":meth:`~ArgumentParser.add_argument` 来处理。 " +"当执行命令行解析时,参数值将被检查,如果参数不是可接受的值之一就将显示错误消息::" + +#: ../../library/argparse.rst:1139 +msgid "" +"Note that inclusion in the *choices* container is checked after any type_ " +"conversions have been performed, so the type of the objects in the *choices*" +" container should match the type_ specified::" +msgstr "" +"请注意 *choices* 容器包含的内容会在执行任意 type_ 转换之后被检查,因此 *choices* 容器中对象的类型应当与指定的 type_ " +"相匹配::" + +#: ../../library/argparse.rst:1151 +msgid "" +"Any container can be passed as the *choices* value, so :class:`list` " +"objects, :class:`set` objects, and custom containers are all supported." +msgstr "" +"任何容器都可作为 *choices* 值传入,因此 :class:`list` 对象,:class:`set` 对象以及自定义容器都是受支持的。" + +#: ../../library/argparse.rst:1154 +msgid "" +"Use of :class:`enum.Enum` is not recommended because it is difficult to " +"control its appearance in usage, help, and error messages." +msgstr "不建议使用 :class:`enum.Enum`,因为要控制其在用法、帮助和错误消息中的外观是很困难的。" + +#: ../../library/argparse.rst:1157 +msgid "" +"Formatted choices overrides the default *metavar* which is normally derived " +"from *dest*. This is usually what you want because the user never sees the " +"*dest* parameter. If this display isn't desirable (perhaps because there " +"are many choices), just specify an explicit metavar_." +msgstr "" +"已格式化的选项会覆盖默认的 *metavar*,该值一般是派生自 *dest*。 这通常就是你所需要的,因为用户永远不会看到 *dest* 形参。 " +"如果不想要这样的显示(或许因为有很多选择),只需指定一个显式的 metavar_。" + +#: ../../library/argparse.rst:1164 +msgid "required" +msgstr "required" + +#: ../../library/argparse.rst:1166 +msgid "" +"In general, the :mod:`argparse` module assumes that flags like ``-f`` and " +"``--bar`` indicate *optional* arguments, which can always be omitted at the " +"command line. To make an option *required*, ``True`` can be specified for " +"the ``required=`` keyword argument to :meth:`~ArgumentParser.add_argument`::" +msgstr "" +"通常,:mod:`argparse` 模块会认为 ``-f`` 和 ``--bar`` 等旗标是指明 *可选的* 参数,它们总是可以在命令行中被忽略。 " +"要让一个选项成为 *必需的*,则可以将 ``True`` 作为 ``required=`` 关键字参数传给 " +":meth:`~ArgumentParser.add_argument`::" + +#: ../../library/argparse.rst:1179 +msgid "" +"As the example shows, if an option is marked as ``required``, " +":meth:`~ArgumentParser.parse_args` will report an error if that option is " +"not present at the command line." +msgstr "" +"如这个例子所示,如果一个选项被标记为 " +"``required``,则当该选项未在命令行中出现时,:meth:`~ArgumentParser.parse_args` 将会报告一个错误。" + +#: ../../library/argparse.rst:1185 +msgid "" +"Required options are generally considered bad form because users expect " +"*options* to be *optional*, and thus they should be avoided when possible." +msgstr "必需的选项通常被认为是不适宜的,因为用户会预期 *options* 都是 *可选的*,因此在可能的情况下应当避免使用它们。" + +#: ../../library/argparse.rst:1190 +msgid "help" +msgstr "help" + +#: ../../library/argparse.rst:1192 +msgid "" +"The ``help`` value is a string containing a brief description of the " +"argument. When a user requests help (usually by using ``-h`` or ``--help`` " +"at the command line), these ``help`` descriptions will be displayed with " +"each argument::" +msgstr "" +"``help`` 值是一个包含参数简短描述的字符串。 当用户请求帮助时(一般是通过在命令行中使用 ``-h`` 或 ``--help`` 的方式),这些" +" ``help`` 描述将随每个参数一同显示::" + +#: ../../library/argparse.rst:1212 +msgid "" +"The ``help`` strings can include various format specifiers to avoid " +"repetition of things like the program name or the argument default_. The " +"available specifiers include the program name, ``%(prog)s`` and most keyword" +" arguments to :meth:`~ArgumentParser.add_argument`, e.g. ``%(default)s``, " +"``%(type)s``, etc.::" +msgstr "" +"``help`` 字符串可包括各种格式描述符以避免重复使用程序名称或参数 default_ 等文本。 有效的描述符包括程序名称 ``%(prog)s``" +" 和传给 :meth:`~ArgumentParser.add_argument` 的大部分关键字参数,例如 ``%(default)s``, " +"``%(type)s`` 等等::" + +#: ../../library/argparse.rst:1229 +msgid "" +"As the help string supports %-formatting, if you want a literal ``%`` to " +"appear in the help string, you must escape it as ``%%``." +msgstr "由于帮助字符串支持 %-formatting,如果你希望在帮助字符串中显示 ``%`` 字面值,你必须将其转义为 ``%%``。" + +#: ../../library/argparse.rst:1232 +msgid "" +":mod:`argparse` supports silencing the help entry for certain options, by " +"setting the ``help`` value to ``argparse.SUPPRESS``::" +msgstr "" +":mod:`argparse` 支持静默特定选项的帮助,具体做法是将 ``help`` 的值设为 ``argparse.SUPPRESS``::" + +#: ../../library/argparse.rst:1245 +msgid "metavar" +msgstr "metavar" + +#: ../../library/argparse.rst:1247 +msgid "" +"When :class:`ArgumentParser` generates help messages, it needs some way to " +"refer to each expected argument. By default, ArgumentParser objects use the" +" dest_ value as the \"name\" of each object. By default, for positional " +"argument actions, the dest_ value is used directly, and for optional " +"argument actions, the dest_ value is uppercased. So, a single positional " +"argument with ``dest='bar'`` will be referred to as ``bar``. A single " +"optional argument ``--foo`` that should be followed by a single command-line" +" argument will be referred to as ``FOO``. An example::" +msgstr "" +"当 :class:`ArgumentParser` 生成帮助消息时,它需要用某种方式来引用每个预期的参数。 默认情况下,ArgumentParser " +"对象使用 dest_ 值作为每个对象的 \"name\"。 默认情况下,对于位置参数动作,dest_ 值将被直接使用,而对于可选参数动作,dest_ " +"值将被转为大写形式。 因此,一个位置参数 ``dest='bar'`` 的引用形式将为 ``bar``。 一个带有单独命令行参数的可选参数 " +"``--foo`` 的引用形式将为 ``FOO``。 示例如下::" + +#: ../../library/argparse.rst:1271 +msgid "An alternative name can be specified with ``metavar``::" +msgstr "可以使用 ``metavar`` 来指定一个替代名称::" + +#: ../../library/argparse.rst:1288 +msgid "" +"Note that ``metavar`` only changes the *displayed* name - the name of the " +"attribute on the :meth:`~ArgumentParser.parse_args` object is still " +"determined by the dest_ value." +msgstr "" +"请注意 ``metavar`` 仅改变 *显示的* 名称 - :meth:`~ArgumentParser.parse_args` " +"对象的属性名称仍然会由 dest_ 值确定。" + +#: ../../library/argparse.rst:1292 +msgid "" +"Different values of ``nargs`` may cause the metavar to be used multiple " +"times. Providing a tuple to ``metavar`` specifies a different display for " +"each of the arguments::" +msgstr "" +"不同的 ``nargs`` 值可能导致 metavar 被多次使用。 提供一个元组给 ``metavar`` 即为每个参数指定不同的显示信息::" + +#: ../../library/argparse.rst:1309 +msgid "dest" +msgstr "dest" + +#: ../../library/argparse.rst:1311 +msgid "" +"Most :class:`ArgumentParser` actions add some value as an attribute of the " +"object returned by :meth:`~ArgumentParser.parse_args`. The name of this " +"attribute is determined by the ``dest`` keyword argument of " +":meth:`~ArgumentParser.add_argument`. For positional argument actions, " +"``dest`` is normally supplied as the first argument to " +":meth:`~ArgumentParser.add_argument`::" +msgstr "" +"大多数 :class:`ArgumentParser` 动作会添加一些值作为 :meth:`~ArgumentParser.parse_args` " +"所返回对象的一个属性。 该属性的名称由 :meth:`~ArgumentParser.add_argument` 的 ``dest`` 关键字参数确定。" +" 对于位置参数动作,``dest`` 通常会作为 :meth:`~ArgumentParser.add_argument` 的第一个参数提供::" + +#: ../../library/argparse.rst:1323 +msgid "" +"For optional argument actions, the value of ``dest`` is normally inferred " +"from the option strings. :class:`ArgumentParser` generates the value of " +"``dest`` by taking the first long option string and stripping away the " +"initial ``--`` string. If no long option strings were supplied, ``dest`` " +"will be derived from the first short option string by stripping the initial " +"``-`` character. Any internal ``-`` characters will be converted to ``_`` " +"characters to make sure the string is a valid attribute name. The examples " +"below illustrate this behavior::" +msgstr "" +"对于可选参数动作,``dest`` 的值通常取自选项字符串。 :class:`ArgumentParser` 会通过接受第一个长选项字符串并去掉开头的 " +"``--`` 字符串来生成 ``dest`` 的值。 如果没有提供长选项字符串,则 ``dest`` 将通过接受第一个短选项字符串并去掉开头的 " +"``-`` 字符来获得。 任何内部的 ``-`` 字符都将被转换为 ``_`` 字符以确保字符串是有效的属性名称。 下面的例子显示了这种行为::" + +#: ../../library/argparse.rst:1340 +msgid "``dest`` allows a custom attribute name to be provided::" +msgstr "``dest`` 允许提供自定义属性名称::" + +#: ../../library/argparse.rst:1348 +msgid "Action classes" +msgstr "Action 类" + +#: ../../library/argparse.rst:1350 +msgid "" +"Action classes implement the Action API, a callable which returns a callable" +" which processes arguments from the command-line. Any object which follows " +"this API may be passed as the ``action`` parameter to :meth:`add_argument`." +msgstr "" +"Action 类实现了 Action API,它是一个返回可调用对象的可调用对象,返回的可调用对象可处理来自命令行的参数。 任何遵循此 API " +"的对象均可作为 ``action`` 形参传给 :meth:`add_argument`。" + +#: ../../library/argparse.rst:1359 +msgid "" +"Action objects are used by an ArgumentParser to represent the information " +"needed to parse a single argument from one or more strings from the command " +"line. The Action class must accept the two positional arguments plus any " +"keyword arguments passed to :meth:`ArgumentParser.add_argument` except for " +"the ``action`` itself." +msgstr "" +"Action 对象会被 ArgumentParser 用来表示解析从命令行中的一个或多个字符串中解析出单个参数所必须的信息。 Action " +"类必须接受两个位置参数以及传给 :meth:`ArgumentParser.add_argument` 的任何关键字参数,除了 ``action`` " +"本身。" + +#: ../../library/argparse.rst:1365 +msgid "" +"Instances of Action (or return value of any callable to the ``action`` " +"parameter) should have attributes \"dest\", \"option_strings\", \"default\"," +" \"type\", \"required\", \"help\", etc. defined. The easiest way to ensure " +"these attributes are defined is to call ``Action.__init__``." +msgstr "" +"Action 的实例(或作为or return value of any callable to the ``action`` " +"形参的任何可调用对象的返回值)应当定义 \"dest\", \"option_strings\", \"default\", \"type\", " +"\"required\", \"help\" 等属性。 确保这些属性被定义的最容易方式是调用 ``Action.__init__``。" + +#: ../../library/argparse.rst:1370 +msgid "" +"Action instances should be callable, so subclasses must override the " +"``__call__`` method, which should accept four parameters:" +msgstr "Action 的实例应当为可调用对象,因此所有子类都必须重写 ``__call__`` 方法,该方法应当接受四个形参:" + +#: ../../library/argparse.rst:1373 +msgid "``parser`` - The ArgumentParser object which contains this action." +msgstr "``parser`` - 包含此动作的 ArgumentParser 对象。" + +#: ../../library/argparse.rst:1375 +msgid "" +"``namespace`` - The :class:`Namespace` object that will be returned by " +":meth:`~ArgumentParser.parse_args`. Most actions add an attribute to this " +"object using :func:`setattr`." +msgstr "" +"``namespace`` - 将由 :meth:`~ArgumentParser.parse_args` 返回的 :class:`Namespace`" +" 对象。 大多数动作会使用 :func:`setattr` 为此对象添加属性。" + +#: ../../library/argparse.rst:1379 +msgid "" +"``values`` - The associated command-line arguments, with any type " +"conversions applied. Type conversions are specified with the type_ keyword " +"argument to :meth:`~ArgumentParser.add_argument`." +msgstr "" +"``values`` - 已关联的命令行参数,并提供相应的类型转换。 类型转换由 " +":meth:`~ArgumentParser.add_argument` 的 type_ 关键字参数来指定。" + +#: ../../library/argparse.rst:1383 +msgid "" +"``option_string`` - The option string that was used to invoke this action. " +"The ``option_string`` argument is optional, and will be absent if the action" +" is associated with a positional argument." +msgstr "" +"``option_string`` - 被用来发起调用此动作的选项字符串。 ``option_string`` " +"参数是可选的,且此参数在动作关联到位置参数时将被略去。" + +#: ../../library/argparse.rst:1387 +msgid "" +"The ``__call__`` method may perform arbitrary actions, but will typically " +"set attributes on the ``namespace`` based on ``dest`` and ``values``." +msgstr "" +"``__call__`` 方法可以执行任意动作,但通常将基于 ``dest`` 和 ``values`` 来设置 ``namespace`` 的属性。" + +#: ../../library/argparse.rst:1390 +msgid "" +"Action subclasses can define a ``format_usage`` method that takes no " +"argument and return a string which will be used when printing the usage of " +"the program. If such method is not provided, a sensible default will be " +"used." +msgstr "" +"动作子类可定义 ``format_usage`` 方法,该方法不带参数,所返回的字符串将被用于打印程序的用法说明。 " +"如果未提供此方法,则将使用适当的默认值。" + +#: ../../library/argparse.rst:1395 +msgid "The parse_args() method" +msgstr "parse_args() 方法" + +#: ../../library/argparse.rst:1399 +msgid "" +"Convert argument strings to objects and assign them as attributes of the " +"namespace. Return the populated namespace." +msgstr "将参数字符串转换为对象并将其设为命名空间的属性。 返回带有成员的命名空间。" + +#: ../../library/argparse.rst:1402 +msgid "" +"Previous calls to :meth:`add_argument` determine exactly what objects are " +"created and how they are assigned. See the documentation for " +":meth:`add_argument` for details." +msgstr "" +"之前对 :meth:`add_argument` 的调用决定了哪些对象被创建以及它们如何被赋值。 请参阅 :meth:`add_argument` " +"的文档了解详情。" + +#: ../../library/argparse.rst:1406 +msgid "" +"args_ - List of strings to parse. The default is taken from " +":data:`sys.argv`." +msgstr "args_ - 要解析的字符串列表。 默认值是从 :data:`sys.argv` 获取。" + +#: ../../library/argparse.rst:1409 +msgid "" +"namespace_ - An object to take the attributes. The default is a new empty " +":class:`Namespace` object." +msgstr "namespace_ - 用于获取属性的对象。 默认值是一个新的空 :class:`Namespace` 对象。" + +#: ../../library/argparse.rst:1414 +msgid "Option value syntax" +msgstr "选项值语法" + +#: ../../library/argparse.rst:1416 +msgid "" +"The :meth:`~ArgumentParser.parse_args` method supports several ways of " +"specifying the value of an option (if it takes one). In the simplest case, " +"the option and its value are passed as two separate arguments::" +msgstr "" +":meth:`~ArgumentParser.parse_args` 方法支持多种指定选项值的方式(如果它接受选项的话)。 " +"在最简单的情况下,选项和它的值是作为两个单独参数传入的::" + +#: ../../library/argparse.rst:1428 +msgid "" +"For long options (options with names longer than a single character), the " +"option and value can also be passed as a single command-line argument, using" +" ``=`` to separate them::" +msgstr "对于长选项(名称长度超过一个字符的选项),选项和值也可以作为单个命令行参数传入,使用 ``=`` 分隔它们即可::" + +#: ../../library/argparse.rst:1435 +msgid "" +"For short options (options only one character long), the option and its " +"value can be concatenated::" +msgstr "对于短选项(长度只有一个字符的选项),选项和它的值可以拼接在一起::" + +#: ../../library/argparse.rst:1441 +msgid "" +"Several short options can be joined together, using only a single ``-`` " +"prefix, as long as only the last option (or none of them) requires a value::" +msgstr "有些短选项可以使用单个 ``-`` 前缀来进行合并,如果仅有最后一个选项(或没有任何选项)需要值的话::" + +#: ../../library/argparse.rst:1453 +msgid "Invalid arguments" +msgstr "无效的参数" + +#: ../../library/argparse.rst:1455 +msgid "" +"While parsing the command line, :meth:`~ArgumentParser.parse_args` checks " +"for a variety of errors, including ambiguous options, invalid types, invalid" +" options, wrong number of positional arguments, etc. When it encounters " +"such an error, it exits and prints the error along with a usage message::" +msgstr "" +"在解析命令行时,:meth:`~ArgumentParser.parse_args` " +"会检测多种错误,包括有歧义的选项、无效的类型、无效的选项、错误的位置参数个数等等。 当遇到这种错误时,它将退出并打印出错误文本同时附带用法消息::" + +#: ../../library/argparse.rst:1481 +msgid "Arguments containing ``-``" +msgstr "包含 ``-`` 的参数" + +#: ../../library/argparse.rst:1483 +msgid "" +"The :meth:`~ArgumentParser.parse_args` method attempts to give errors " +"whenever the user has clearly made a mistake, but some situations are " +"inherently ambiguous. For example, the command-line argument ``-1`` could " +"either be an attempt to specify an option or an attempt to provide a " +"positional argument. The :meth:`~ArgumentParser.parse_args` method is " +"cautious here: positional arguments may only begin with ``-`` if they look " +"like negative numbers and there are no options in the parser that look like " +"negative numbers::" +msgstr "" +":meth:`~ArgumentParser.parse_args` 方法会在用户明显出错时尝试给出错误信息,但某些情况本身就存在歧义。 " +"例如,命令行参数 ``-1`` 可能是尝试指定一个选项也可能是尝试提供一个位置参数。 " +":meth:`~ArgumentParser.parse_args` " +"方法在此会谨慎行事:位置参数只有在它们看起来像负数并且解析器中没有任何选项看起来像负数时才能以 ``-`` 打头。::" + +#: ../../library/argparse.rst:1521 +msgid "" +"If you have positional arguments that must begin with ``-`` and don't look " +"like negative numbers, you can insert the pseudo-argument ``'--'`` which " +"tells :meth:`~ArgumentParser.parse_args` that everything after that is a " +"positional argument::" +msgstr "" +"如果你有必须以 ``-`` 打头的位置参数并且看起来不像负数,你可以插入伪参数 ``'--'`` 以告诉 " +":meth:`~ArgumentParser.parse_args` 在那之后的内容是一个位置参数::" + +#: ../../library/argparse.rst:1532 +msgid "Argument abbreviations (prefix matching)" +msgstr "参数缩写(前缀匹配)" + +#: ../../library/argparse.rst:1534 +msgid "" +"The :meth:`~ArgumentParser.parse_args` method :ref:`by default " +"` allows long options to be abbreviated to a prefix, if the " +"abbreviation is unambiguous (the prefix matches a unique option)::" +msgstr "" +":meth:`~ArgumentParser.parse_args` 方法 :ref:`在默认情况下 ` " +"允许将长选项缩写为前缀,如果缩写无歧义(即前缀与一个特定选项相匹配)的话::" + +#: ../../library/argparse.rst:1549 +msgid "" +"An error is produced for arguments that could produce more than one options." +" This feature can be disabled by setting :ref:`allow_abbrev` to ``False``." +msgstr "可产生一个以上选项的参数会引发错误。 此特定可通过将 :ref:`allow_abbrev` 设为 ``False`` 来禁用。" + +#: ../../library/argparse.rst:1555 +msgid "Beyond ``sys.argv``" +msgstr "在 ``sys.argv`` 以外" + +#: ../../library/argparse.rst:1557 +msgid "" +"Sometimes it may be useful to have an ArgumentParser parse arguments other " +"than those of :data:`sys.argv`. This can be accomplished by passing a list " +"of strings to :meth:`~ArgumentParser.parse_args`. This is useful for " +"testing at the interactive prompt::" +msgstr "" +"有时在 :data:`sys.argv` 以外用 ArgumentParser 解析参数也是有用的。 这可以通过将一个字符串列表传给 " +":meth:`~ArgumentParser.parse_args` 来实现。 它适用于在交互提示符下进行检测::" + +#: ../../library/argparse.rst:1577 +msgid "The Namespace object" +msgstr "命名空间对象" + +#: ../../library/argparse.rst:1581 +msgid "" +"Simple class used by default by :meth:`~ArgumentParser.parse_args` to create" +" an object holding attributes and return it." +msgstr "由 :meth:`~ArgumentParser.parse_args` 默认使用的简单类,可创建一个存放属性的对象并将其返回。" + +#: ../../library/argparse.rst:1584 +msgid "" +"This class is deliberately simple, just an :class:`object` subclass with a " +"readable string representation. If you prefer to have dict-like view of the " +"attributes, you can use the standard Python idiom, :func:`vars`::" +msgstr "" +"这个类被有意做得很简单,只是一个具有可读字符串表示形式的 :class:`object`。 如果你更喜欢类似字典的属性视图,你可以使用标准 Python" +" 中惯常的 :func:`vars`::" + +#: ../../library/argparse.rst:1594 +msgid "" +"It may also be useful to have an :class:`ArgumentParser` assign attributes " +"to an already existing object, rather than a new :class:`Namespace` object." +" This can be achieved by specifying the ``namespace=`` keyword argument::" +msgstr "" +"另一个用处是让 :class:`ArgumentParser` 为一个已存在对象而不是为一个新的 :class:`Namespace` 对象的属性赋值。" +" 这可以通过指定 ``namespace=`` 关键字参数来实现::" + +#: ../../library/argparse.rst:1610 +msgid "Other utilities" +msgstr "其它实用工具" + +#: ../../library/argparse.rst:1613 +msgid "Sub-commands" +msgstr "子命令" + +#: ../../library/argparse.rst:1620 +msgid "" +"Many programs split up their functionality into a number of sub-commands, " +"for example, the ``svn`` program can invoke sub-commands like ``svn " +"checkout``, ``svn update``, and ``svn commit``. Splitting up functionality " +"this way can be a particularly good idea when a program performs several " +"different functions which require different kinds of command-line arguments." +" :class:`ArgumentParser` supports the creation of such sub-commands with the" +" :meth:`add_subparsers` method. The :meth:`add_subparsers` method is " +"normally called with no arguments and returns a special action object. This" +" object has a single method, :meth:`~ArgumentParser.add_parser`, which takes" +" a command name and any :class:`ArgumentParser` constructor arguments, and " +"returns an :class:`ArgumentParser` object that can be modified as usual." +msgstr "" +"许多程序都会将其功能拆分为一系列子命令,例如,``svn`` 程序包含的子命令有 ``svn checkout``, ``svn update`` 和 " +"``svn commit``。 当一个程序能执行需要多组不同种类命令行参数时这种拆分功能的方式是一个非常好的主意。 " +":class:`ArgumentParser` 通过 :meth:`add_subparsers` 方法支持创建这样的子命令。 " +":meth:`add_subparsers` 方法通常不带参数地调用并返回一个特殊的动作对象。 这种对象只有一个方法 " +":meth:`~ArgumentParser.add_parser`,它接受一个命令名称和任意多个 :class:`ArgumentParser` " +"构造器参数,并返回一个可以通常方式进行修改的 :class:`ArgumentParser` 对象。" + +#: ../../library/argparse.rst:1632 +msgid "Description of parameters:" +msgstr "形参的描述" + +#: ../../library/argparse.rst:1634 +msgid "" +"title - title for the sub-parser group in help output; by default " +"\"subcommands\" if description is provided, otherwise uses title for " +"positional arguments" +msgstr "title - 输出帮助的子解析器分组的标题;如果提供了描述则默认为 \"subcommands\",否则使用位置参数的标题" + +#: ../../library/argparse.rst:1638 +msgid "" +"description - description for the sub-parser group in help output, by " +"default ``None``" +msgstr "description - 输出帮助中对子解析器的描述,默认为 ``None``" + +#: ../../library/argparse.rst:1641 +msgid "" +"prog - usage information that will be displayed with sub-command help, by " +"default the name of the program and any positional arguments before the " +"subparser argument" +msgstr "prog - 将与子命令帮助一同显示的用法信息,默认为程序名称和子解析器参数之前的任何位置参数。" + +#: ../../library/argparse.rst:1645 +msgid "" +"parser_class - class which will be used to create sub-parser instances, by " +"default the class of the current parser (e.g. ArgumentParser)" +msgstr "parser_class - 将被用于创建子解析器实例的类,默认为当前解析器类(例如 ArgumentParser)" + +#: ../../library/argparse.rst:1648 +msgid "" +"action_ - the basic type of action to be taken when this argument is " +"encountered at the command line" +msgstr "action_ - 当此参数在命令行中出现时要执行动作的基本类型" + +#: ../../library/argparse.rst:1651 +msgid "" +"dest_ - name of the attribute under which sub-command name will be stored; " +"by default ``None`` and no value is stored" +msgstr "dest_ - 将被用于保存子命令名称的属性名;默认为 ``None`` 即不保存任何值" + +#: ../../library/argparse.rst:1654 +msgid "" +"required_ - Whether or not a subcommand must be provided, by default " +"``False`` (added in 3.7)" +msgstr "required_ - 是否必须要提供子命令,默认为 ``False`` (在 3.7 中新增)" + +#: ../../library/argparse.rst:1657 +msgid "help_ - help for sub-parser group in help output, by default ``None``" +msgstr "help_ - 在输出帮助中的子解析器分组帮助信息,默认为 ``None``" + +#: ../../library/argparse.rst:1659 +msgid "" +"metavar_ - string presenting available sub-commands in help; by default it " +"is ``None`` and presents sub-commands in form {cmd1, cmd2, ..}" +msgstr "metavar_ - 帮助信息中表示可用子命令的字符串;默认为 ``None`` 并以 {cmd1, cmd2, ..} 的形式表示子命令" + +#: ../../library/argparse.rst:1662 +msgid "Some example usage::" +msgstr "一些使用示例::" + +#: ../../library/argparse.rst:1683 +msgid "" +"Note that the object returned by :meth:`parse_args` will only contain " +"attributes for the main parser and the subparser that was selected by the " +"command line (and not any other subparsers). So in the example above, when " +"the ``a`` command is specified, only the ``foo`` and ``bar`` attributes are " +"present, and when the ``b`` command is specified, only the ``foo`` and " +"``baz`` attributes are present." +msgstr "" +"请注意 :meth:`parse_args` 返回的对象将只包含主解析器和由命令行所选择的子解析器的属性(而没有任何其他子解析器)。 " +"因此在上面的例子中,当指定了 ``a`` 命令时,将只存在 ``foo`` 和 ``bar`` 属性,而当指定了 ``b`` 命令时,则只存在 " +"``foo`` 和 ``baz`` 属性。" + +#: ../../library/argparse.rst:1690 +msgid "" +"Similarly, when a help message is requested from a subparser, only the help " +"for that particular parser will be printed. The help message will not " +"include parent parser or sibling parser messages. (A help message for each " +"subparser command, however, can be given by supplying the ``help=`` argument" +" to :meth:`add_parser` as above.)" +msgstr "" +"类似地,当从一个子解析器请求帮助消息时,只有该特定解析器的帮助消息会被打印出来。 帮助消息将不包括父解析器或同级解析器的消息。 " +"(每个子解析器命令一条帮助消息,但是,也可以像上面那样通过提供 ``help=`` 参数给 :meth:`add_parser` 来给出。)" + +#: ../../library/argparse.rst:1726 +msgid "" +"The :meth:`add_subparsers` method also supports ``title`` and " +"``description`` keyword arguments. When either is present, the subparser's " +"commands will appear in their own group in the help output. For example::" +msgstr "" +":meth:`add_subparsers` 方法也支持 ``title`` 和 ``description`` 关键字参数。 " +"当两者都存在时,子解析器的命令将出现在输出帮助消息中它们自己的分组内。 例如::" + +#: ../../library/argparse.rst:1747 +msgid "" +"Furthermore, ``add_parser`` supports an additional ``aliases`` argument, " +"which allows multiple strings to refer to the same subparser. This example, " +"like ``svn``, aliases ``co`` as a shorthand for ``checkout``::" +msgstr "" +"此外,``add_parser`` 还支持额外的``aliases`` 参数,允许多个字符串引用同一个子解析器。以下例子,与``svn`` " +"一样,将``co`` 作为``checkout`` 的别名::" + +#: ../../library/argparse.rst:1758 +msgid "" +"One particularly effective way of handling sub-commands is to combine the " +"use of the :meth:`add_subparsers` method with calls to :meth:`set_defaults` " +"so that each subparser knows which Python function it should execute. For " +"example::" +msgstr "" +"一个特别有效的处理子命令的方式是将 :meth:`add_subparsers` 方法与对 :meth:`set_defaults` " +"的调用结合起来使用,这样每个子解析器就能知道应当执行哪个 Python 函数。 例如::" + +#: ../../library/argparse.rst:1795 +msgid "" +"This way, you can let :meth:`parse_args` do the job of calling the " +"appropriate function after argument parsing is complete. Associating " +"functions with actions like this is typically the easiest way to handle the " +"different actions for each of your subparsers. However, if it is necessary " +"to check the name of the subparser that was invoked, the ``dest`` keyword " +"argument to the :meth:`add_subparsers` call will work::" +msgstr "" +"通过这种方式,你可以在参数解析结束后让 :meth:`parse_args` 执行调用适当函数的任务。 " +"像这样将函数关联到动作通常是你处理每个子解析器的不同动作的最简便方式。 但是,如果有必要检查被唤起的子解析器的名称,则 " +":meth:`add_subparsers` 调用的 ``dest`` 关键字参数将可实现::" + +#: ../../library/argparse.rst:1811 +msgid "New *required* keyword argument." +msgstr "新增 *required* 关键字参数。" + +#: ../../library/argparse.rst:1816 +msgid "FileType objects" +msgstr "FileType 对象" + +#: ../../library/argparse.rst:1820 +msgid "" +"The :class:`FileType` factory creates objects that can be passed to the type" +" argument of :meth:`ArgumentParser.add_argument`. Arguments that have " +":class:`FileType` objects as their type will open command-line arguments as " +"files with the requested modes, buffer sizes, encodings and error handling " +"(see the :func:`open` function for more details)::" +msgstr "" +":class:`FileType` 工厂类用于创建可作为 :meth:`ArgumentParser.add_argument` 的 type " +"参数传入的对象。 以 :class:`FileType` " +"对象作为其类型的参数将使用命令行参数以所请求模式、缓冲区大小、编码格式和错误处理方式打开文件(请参阅 :func:`open` 函数了解详情)::" + +#: ../../library/argparse.rst:1832 +msgid "" +"FileType objects understand the pseudo-argument ``'-'`` and automatically " +"convert this into ``sys.stdin`` for readable :class:`FileType` objects and " +"``sys.stdout`` for writable :class:`FileType` objects::" +msgstr "" +"FileType 对象能理解伪参数 ``'-'`` 并会自动将其转换为 ``sys.stdin`` 用于可读的 :class:`FileType` " +"对象,或是 ``sys.stdout`` 用于可写的 :class:`FileType` 对象::" + +#: ../../library/argparse.rst:1841 +msgid "The *encodings* and *errors* keyword arguments." +msgstr "*encodings* 和 *errors* 关键字参数。" + +#: ../../library/argparse.rst:1846 +msgid "Argument groups" +msgstr "参数组" + +#: ../../library/argparse.rst:1850 +msgid "" +"By default, :class:`ArgumentParser` groups command-line arguments into " +"\"positional arguments\" and \"optional arguments\" when displaying help " +"messages. When there is a better conceptual grouping of arguments than this " +"default one, appropriate groups can be created using the " +":meth:`add_argument_group` method::" +msgstr "" +"在默认情况下,:class:`ArgumentParser` 会在显示帮助消息时将命令行参数分为“位置参数”和“可选参数”两组。 " +"当存在比默认更好的参数分组概念时,可以使用 :meth:`add_argument_group` 方法来创建适当的分组::" + +#: ../../library/argparse.rst:1867 +msgid "" +"The :meth:`add_argument_group` method returns an argument group object which" +" has an :meth:`~ArgumentParser.add_argument` method just like a regular " +":class:`ArgumentParser`. When an argument is added to the group, the parser" +" treats it just like a normal argument, but displays the argument in a " +"separate group for help messages. The :meth:`add_argument_group` method " +"accepts *title* and *description* arguments which can be used to customize " +"this display::" +msgstr "" +":meth:`add_argument_group` 方法返回一个具有 :meth:`~ArgumentParser.add_argument` " +"方法的参数分组对象,这与常规的 :class:`ArgumentParser` 一样。 " +"当一个参数被加入分组时,解析器会将它视为一个正常的参数,但是会在不同的帮助消息分组中显示该参数。 :meth:`add_argument_group` " +"方法接受 *title* 和 *description* 参数,它们可被用来定制显示内容::" + +#: ../../library/argparse.rst:1893 +msgid "" +"Note that any arguments not in your user-defined groups will end up back in " +"the usual \"positional arguments\" and \"optional arguments\" sections." +msgstr "请注意任意不在你的自定义分组中的参数最终都将回到通常的“位置参数”和“可选参数”分组中。" + +#: ../../library/argparse.rst:1898 +msgid "Mutual exclusion" +msgstr "互斥" + +#: ../../library/argparse.rst:1902 +msgid "" +"Create a mutually exclusive group. :mod:`argparse` will make sure that only " +"one of the arguments in the mutually exclusive group was present on the " +"command line::" +msgstr "创建一个互斥组。 :mod:`argparse` 将会确保互斥组中只有一个参数在命令行中可用::" + +#: ../../library/argparse.rst:1918 +msgid "" +"The :meth:`add_mutually_exclusive_group` method also accepts a *required* " +"argument, to indicate that at least one of the mutually exclusive arguments " +"is required::" +msgstr "" +":meth:`add_mutually_exclusive_group` 方法也接受一个 *required* " +"参数,表示在互斥组中至少有一个参数是需要的::" + +#: ../../library/argparse.rst:1930 +msgid "" +"Note that currently mutually exclusive argument groups do not support the " +"*title* and *description* arguments of " +":meth:`~ArgumentParser.add_argument_group`." +msgstr "" +"注意,目前互斥参数组不支持 :meth:`~ArgumentParser.add_argument_group` 的 *title* 和 " +"*description* 参数。" + +#: ../../library/argparse.rst:1936 +msgid "Parser defaults" +msgstr "解析器默认值" + +#: ../../library/argparse.rst:1940 +msgid "" +"Most of the time, the attributes of the object returned by " +":meth:`parse_args` will be fully determined by inspecting the command-line " +"arguments and the argument actions. :meth:`set_defaults` allows some " +"additional attributes that are determined without any inspection of the " +"command line to be added::" +msgstr "" +"在大多数时候,:meth:`parse_args` 所返回对象的属性将完全通过检查命令行参数和参数动作来确定。 :meth:`set_defaults`" +" 则允许加入一些无须任何命令行检查的额外属性::" + +#: ../../library/argparse.rst:1952 +msgid "" +"Note that parser-level defaults always override argument-level defaults::" +msgstr "请注意解析器层级的默认值总是会覆盖参数层级的默认值::" + +#: ../../library/argparse.rst:1960 +msgid "" +"Parser-level defaults can be particularly useful when working with multiple " +"parsers. See the :meth:`~ArgumentParser.add_subparsers` method for an " +"example of this type." +msgstr "" +"解析器层级默认值在需要多解析器时会特别有用。 请参阅 :meth:`~ArgumentParser.add_subparsers` " +"方法了解此类型的一个示例。" + +#: ../../library/argparse.rst:1966 +msgid "" +"Get the default value for a namespace attribute, as set by either " +":meth:`~ArgumentParser.add_argument` or by " +":meth:`~ArgumentParser.set_defaults`::" +msgstr "" +"获取一个命名空间属性的默认值,该值是由 :meth:`~ArgumentParser.add_argument` 或 " +":meth:`~ArgumentParser.set_defaults` 设置的::" + +#: ../../library/argparse.rst:1977 +msgid "Printing help" +msgstr "打印帮助" + +#: ../../library/argparse.rst:1979 +msgid "" +"In most typical applications, :meth:`~ArgumentParser.parse_args` will take " +"care of formatting and printing any usage or error messages. However, " +"several formatting methods are available:" +msgstr "" +"在大多数典型应用中,:meth:`~ArgumentParser.parse_args` 将负责任何用法和错误消息的格式化和打印。 " +"但是,也可使用某些其他格式化方法:" + +#: ../../library/argparse.rst:1985 +msgid "" +"Print a brief description of how the :class:`ArgumentParser` should be " +"invoked on the command line. If *file* is ``None``, :data:`sys.stdout` is " +"assumed." +msgstr "" +"打印一段简短描述,说明应当如何在命令行中唤起 :class:`ArgumentParser`。 如果 *file* 为 ``None``,则默认使用 " +":data:`sys.stdout`。" + +#: ../../library/argparse.rst:1991 +msgid "" +"Print a help message, including the program usage and information about the " +"arguments registered with the :class:`ArgumentParser`. If *file* is " +"``None``, :data:`sys.stdout` is assumed." +msgstr "" +"打印一条帮助消息,包括程序用法和通过 :class:`ArgumentParser` 注册的相关参数信息。 如果 *file* 为 " +"``None``,则默认使用 :data:`sys.stdout`。" + +#: ../../library/argparse.rst:1995 +msgid "" +"There are also variants of these methods that simply return a string instead" +" of printing it:" +msgstr "还存在这些方法的几个变化形式,它们只返回字符串而不打印消息:" + +#: ../../library/argparse.rst:2000 +msgid "" +"Return a string containing a brief description of how the " +":class:`ArgumentParser` should be invoked on the command line." +msgstr "返回一个包含简短描述的字符串,说明应当如何在命令行中唤起 :class:`ArgumentParser`。" + +#: ../../library/argparse.rst:2005 +msgid "" +"Return a string containing a help message, including the program usage and " +"information about the arguments registered with the :class:`ArgumentParser`." +msgstr "反回一个包含帮助消息的字符串,包括程序用法和通过 :class:`ArgumentParser` 注册的相关参数信息。" + +#: ../../library/argparse.rst:2010 +msgid "Partial parsing" +msgstr "部分解析" + +#: ../../library/argparse.rst:2014 +msgid "" +"Sometimes a script may only parse a few of the command-line arguments, " +"passing the remaining arguments on to another script or program. In these " +"cases, the :meth:`~ArgumentParser.parse_known_args` method can be useful. " +"It works much like :meth:`~ArgumentParser.parse_args` except that it does " +"not produce an error when extra arguments are present. Instead, it returns " +"a two item tuple containing the populated namespace and the list of " +"remaining argument strings." +msgstr "" +"有时一个脚本可能只解析部分命令行参数,而将其余的参数继续传递给另一个脚本或程序。 " +"在这种情况下,:meth:`~ArgumentParser.parse_known_args` 方法会很有用处。 它的作用方式很类似 " +":meth:`~ArgumentParser.parse_args` 但区别在于当存在额外参数时它不会产生错误。 " +"而是会返回一个由两个条目构成的元组,其中包含带成员的命名空间和剩余参数字符串的列表。" + +#: ../../library/argparse.rst:2030 +msgid "" +":ref:`Prefix matching ` rules apply to " +":meth:`parse_known_args`. The parser may consume an option even if it's just" +" a prefix of one of its known options, instead of leaving it in the " +"remaining arguments list." +msgstr "" +":ref:`前缀匹配 ` 规则应用于 :meth:`parse_known_args`。 " +"一个选项即使只是已知选项的前缀部分解析器也能识别该选项,不会将其放入剩余参数列表。" + +#: ../../library/argparse.rst:2037 +msgid "Customizing file parsing" +msgstr "自定义文件解析" + +#: ../../library/argparse.rst:2041 +msgid "" +"Arguments that are read from a file (see the *fromfile_prefix_chars* keyword" +" argument to the :class:`ArgumentParser` constructor) are read one argument " +"per line. :meth:`convert_arg_line_to_args` can be overridden for fancier " +"reading." +msgstr "" +"从文件读取的参数(见 :class:`ArgumentParser` 的 *fromfile_prefix_chars* " +"关键字参数)将是一行读取一个参数。 :meth:`convert_arg_line_to_args` 可被重写以使用更复杂的读取方式。" + +#: ../../library/argparse.rst:2046 +msgid "" +"This method takes a single argument *arg_line* which is a string read from " +"the argument file. It returns a list of arguments parsed from this string. " +"The method is called once per line read from the argument file, in order." +msgstr "" +"此方法接受从参数文件读取的字符串形式的单个参数 *arg_line*。 它返回从该字符串解析出的参数列表。 " +"此方法将在每次按顺序从参数文件读取一行时被调用一次。" + +#: ../../library/argparse.rst:2050 +msgid "" +"A useful override of this method is one that treats each space-separated " +"word as an argument. The following example demonstrates how to do this::" +msgstr "此方法的一个有用的重写是将每个以空格分隔的单词视为一个参数。 下面的例子演示了如何实现这一点::" + +#: ../../library/argparse.rst:2059 +msgid "Exiting methods" +msgstr "退出方法" + +#: ../../library/argparse.rst:2063 +msgid "" +"This method terminates the program, exiting with the specified *status* and," +" if given, it prints a *message* before that. The user can override this " +"method to handle these steps differently::" +msgstr "" +"此方法将终结程序,退出时附带指定的 *status*,并且如果给出了 *message* 则会在退出前将其打印输出。 " +"用户可重写此方法以不同方式来处理这些步骤::" + +#: ../../library/argparse.rst:2075 +msgid "" +"This method prints a usage message including the *message* to the standard " +"error and terminates the program with a status code of 2." +msgstr "此方法将向标准错误打印包括 *message* 的用法消息并附带状态码 2 终结程序。" + +#: ../../library/argparse.rst:2080 +msgid "Intermixed parsing" +msgstr "混合解析" + +#: ../../library/argparse.rst:2085 +msgid "" +"A number of Unix commands allow the user to intermix optional arguments with" +" positional arguments. The :meth:`~ArgumentParser.parse_intermixed_args` " +"and :meth:`~ArgumentParser.parse_known_intermixed_args` methods support this" +" parsing style." +msgstr "" +"许多 Unix 命令允许用户混用可选参数与位置参数。 :meth:`~ArgumentParser.parse_intermixed_args` 和 " +":meth:`~ArgumentParser.parse_known_intermixed_args` 方法均支持这种解析风格。" + +#: ../../library/argparse.rst:2090 +msgid "" +"These parsers do not support all the argparse features, and will raise " +"exceptions if unsupported features are used. In particular, subparsers, " +"``argparse.REMAINDER``, and mutually exclusive groups that include both " +"optionals and positionals are not supported." +msgstr "" +"这些解析器并不支持所有的 argparse 特性,并且当未支持的特性被使用时将会引发异常。 " +"特别地,子解析器,``argparse.REMAINDER`` 以及同时包括可选与位置参数的互斥分组是不受支持的。" + +#: ../../library/argparse.rst:2095 +msgid "" +"The following example shows the difference between " +":meth:`~ArgumentParser.parse_known_args` and " +":meth:`~ArgumentParser.parse_intermixed_args`: the former returns ``['2', " +"'3']`` as unparsed arguments, while the latter collects all the positionals " +"into ``rest``. ::" +msgstr "" +"下面的例子显示了 :meth:`~ArgumentParser.parse_known_args` 与 " +":meth:`~ArgumentParser.parse_intermixed_args` 之间的差异:前者会将 ``['2', '3']`` " +"返回为未解析的参数,而后者会将所有位置参数收集至 ``rest`` 中。 ::" + +#: ../../library/argparse.rst:2110 +msgid "" +":meth:`~ArgumentParser.parse_known_intermixed_args` returns a two item tuple" +" containing the populated namespace and the list of remaining argument " +"strings. :meth:`~ArgumentParser.parse_intermixed_args` raises an error if " +"there are any remaining unparsed argument strings." +msgstr "" +":meth:`~ArgumentParser.parse_known_intermixed_args` " +"返回由两个条目组成的元组,其中包含带成员的命名空间以及剩余参数字符串列表。 当存在任何剩余的未解析参数字符串时 " +":meth:`~ArgumentParser.parse_intermixed_args` 将引发一个错误。" + +#: ../../library/argparse.rst:2120 +msgid "Upgrading optparse code" +msgstr "升级 optparse 代码" + +#: ../../library/argparse.rst:2122 +msgid "" +"Originally, the :mod:`argparse` module had attempted to maintain " +"compatibility with :mod:`optparse`. However, :mod:`optparse` was difficult " +"to extend transparently, particularly with the changes required to support " +"the new ``nargs=`` specifiers and better usage messages. When most " +"everything in :mod:`optparse` had either been copy-pasted over or monkey-" +"patched, it no longer seemed practical to try to maintain the backwards " +"compatibility." +msgstr "" +"起初,:mod:`argparse` 曾经尝试通过 :mod:`optparse` 来维持兼容性。 但是,:mod:`optparse` " +"很难透明地扩展,特别是那些为支持新的 ``nargs=`` 描述方式和更好的用法消息所需的修改。当When most everything in " +":mod:`optparse` 中几乎所有内容都已被复制粘贴或打上补丁时,维持向下兼容看来已是不切实际的。" + +#: ../../library/argparse.rst:2129 +msgid "" +"The :mod:`argparse` module improves on the standard library :mod:`optparse` " +"module in a number of ways including:" +msgstr ":mod:`argparse` 模块在许多方面对标准库的 :mod:`optparse` 模块进行了增强,包括:" + +#: ../../library/argparse.rst:2132 +msgid "Handling positional arguments." +msgstr "处理位置参数。" + +#: ../../library/argparse.rst:2133 +msgid "Supporting sub-commands." +msgstr "支持子命令。" + +#: ../../library/argparse.rst:2134 +msgid "Allowing alternative option prefixes like ``+`` and ``/``." +msgstr "允许替代选项前缀例如 ``+`` 和 ``/``。" + +#: ../../library/argparse.rst:2135 +msgid "Handling zero-or-more and one-or-more style arguments." +msgstr "处理零个或多个以及一个或多个风格的参数。" + +#: ../../library/argparse.rst:2136 +msgid "Producing more informative usage messages." +msgstr "生成更具信息量的用法消息。" + +#: ../../library/argparse.rst:2137 +msgid "Providing a much simpler interface for custom ``type`` and ``action``." +msgstr "提供用于定制 ``type`` 和 ``action`` 的更为简单的接口。" + +#: ../../library/argparse.rst:2139 +msgid "A partial upgrade path from :mod:`optparse` to :mod:`argparse`:" +msgstr "从 :mod:`optparse` 到 :mod:`argparse` 的部分升级路径:" + +#: ../../library/argparse.rst:2141 +msgid "" +"Replace all :meth:`optparse.OptionParser.add_option` calls with " +":meth:`ArgumentParser.add_argument` calls." +msgstr "" +"将所有 :meth:`optparse.OptionParser.add_option` 调用替换为 " +":meth:`ArgumentParser.add_argument` 调用。" + +#: ../../library/argparse.rst:2144 +msgid "" +"Replace ``(options, args) = parser.parse_args()`` with ``args = " +"parser.parse_args()`` and add additional :meth:`ArgumentParser.add_argument`" +" calls for the positional arguments. Keep in mind that what was previously " +"called ``options``, now in the :mod:`argparse` context is called ``args``." +msgstr "" +"将 ``(options, args) = parser.parse_args()`` 替换为 ``args = " +"parser.parse_args()`` 并为位置参数添加额外的 :meth:`ArgumentParser.add_argument` 调用。 " +"请注意之前所谓的 ``options`` 在 :mod:`argparse` 上下文中被称为 ``args``。" + +#: ../../library/argparse.rst:2149 +msgid "" +"Replace :meth:`optparse.OptionParser.disable_interspersed_args` by using " +":meth:`~ArgumentParser.parse_intermixed_args` instead of " +":meth:`~ArgumentParser.parse_args`." +msgstr "" +"通过使用 :meth:`~ArgumentParser.parse_intermixed_args` 而非 " +":meth:`~ArgumentParser.parse_args` 来替换 " +":meth:`optparse.OptionParser.disable_interspersed_args`。" + +#: ../../library/argparse.rst:2153 +msgid "" +"Replace callback actions and the ``callback_*`` keyword arguments with " +"``type`` or ``action`` arguments." +msgstr "将回调动作和 ``callback_*`` 关键字参数替换为 ``type`` 或 ``action`` 参数。" + +#: ../../library/argparse.rst:2156 +msgid "" +"Replace string names for ``type`` keyword arguments with the corresponding " +"type objects (e.g. int, float, complex, etc)." +msgstr "将 ``type`` 关键字参数字符串名称替换为相应的类型对象(例如 int, float, complex 等)。" + +#: ../../library/argparse.rst:2159 +msgid "" +"Replace :class:`optparse.Values` with :class:`Namespace` and " +":exc:`optparse.OptionError` and :exc:`optparse.OptionValueError` with " +":exc:`ArgumentError`." +msgstr "" +"将 :class:`optparse.Values` 替换为 :class:`Namespace` 并将 " +":exc:`optparse.OptionError` 和 :exc:`optparse.OptionValueError` 替换为 " +":exc:`ArgumentError`。" + +#: ../../library/argparse.rst:2163 +msgid "" +"Replace strings with implicit arguments such as ``%default`` or ``%prog`` " +"with the standard Python syntax to use dictionaries to format strings, that " +"is, ``%(default)s`` and ``%(prog)s``." +msgstr "" +"将隐式参数字符串例如使用标准 Python 字典语法的 ``%default`` 或 ``%prog`` 替换为格式字符串,即 " +"``%(default)s`` 和 ``%(prog)s``。" + +#: ../../library/argparse.rst:2167 +msgid "" +"Replace the OptionParser constructor ``version`` argument with a call to " +"``parser.add_argument('--version', action='version', version='')``." +msgstr "" +"将 OptionParser 构造器 ``version`` 参数替换为对 ``parser.add_argument('--version', " +"action='version', version='')`` 的调用。" diff --git a/library/array.po b/library/array.po new file mode 100644 index 000000000..a9f2dbdb5 --- /dev/null +++ b/library/array.po @@ -0,0 +1,479 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) 2001-2024, Python Software Foundation +# This file is distributed under the same license as the Python package. +# FIRST AUTHOR , YEAR. +# +# Translators: +# Shengjing Zhu , 2018 +# 叶浚安 , 2019 +# Alpha Du , 2019 +# ppcfish , 2019 +# Freesand Leo , 2022 +# Rafael Fontenelle , 2024 +# +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: Python 3.9\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2024-09-06 19:48+0000\n" +"PO-Revision-Date: 2017-02-16 17:48+0000\n" +"Last-Translator: Rafael Fontenelle , 2024\n" +"Language-Team: Chinese (China) (https://app.transifex.com/python-doc/teams/5390/zh_CN/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: zh_CN\n" +"Plural-Forms: nplurals=1; plural=0;\n" + +#: ../../library/array.rst:2 +msgid ":mod:`array` --- Efficient arrays of numeric values" +msgstr ":mod:`array` --- 高效的数字数组" + +#: ../../library/array.rst:11 +msgid "" +"This module defines an object type which can compactly represent an array of" +" basic values: characters, integers, floating point numbers. Arrays are " +"sequence types and behave very much like lists, except that the type of " +"objects stored in them is constrained. The type is specified at object " +"creation time by using a :dfn:`type code`, which is a single character. The" +" following type codes are defined:" +msgstr "" +"此模块定义了一种对象类型,可以紧凑地表示由基本值(字符、整数、浮点数)组成的数组。数组是序列类型,其行为与列表非常相似,不同之处在于其中存储的对象类型是受限的,在数组对象创建时用单个字符的" +" :dfn:`类型码` 来指定。已定义的类型码如下:" + +#: ../../library/array.rst:19 +msgid "Type code" +msgstr "类型码" + +#: ../../library/array.rst:19 +msgid "C Type" +msgstr "C 类型" + +#: ../../library/array.rst:19 +msgid "Python Type" +msgstr "Python 类型" + +#: ../../library/array.rst:19 +msgid "Minimum size in bytes" +msgstr "最小字节数" + +#: ../../library/array.rst:19 +msgid "Notes" +msgstr "备注" + +#: ../../library/array.rst:21 +msgid "``'b'``" +msgstr "``'b'``" + +#: ../../library/array.rst:21 +msgid "signed char" +msgstr "signed char" + +#: ../../library/array.rst:21 ../../library/array.rst:23 +#: ../../library/array.rst:27 ../../library/array.rst:29 +#: ../../library/array.rst:31 ../../library/array.rst:33 +#: ../../library/array.rst:35 ../../library/array.rst:37 +#: ../../library/array.rst:39 ../../library/array.rst:41 +msgid "int" +msgstr "int" + +#: ../../library/array.rst:21 ../../library/array.rst:23 +msgid "1" +msgstr "1" + +#: ../../library/array.rst:23 +msgid "``'B'``" +msgstr "``'B'``" + +#: ../../library/array.rst:23 +msgid "unsigned char" +msgstr "unsigned char" + +#: ../../library/array.rst:25 +msgid "``'u'``" +msgstr "``'u'``" + +#: ../../library/array.rst:25 +msgid "wchar_t" +msgstr "wchar_t" + +#: ../../library/array.rst:25 +msgid "Unicode character" +msgstr "Unicode 字符" + +#: ../../library/array.rst:25 ../../library/array.rst:27 +#: ../../library/array.rst:29 ../../library/array.rst:31 +#: ../../library/array.rst:33 +msgid "2" +msgstr "2" + +#: ../../library/array.rst:25 +msgid "\\(1)" +msgstr "\\(1)" + +#: ../../library/array.rst:27 +msgid "``'h'``" +msgstr "``'h'``" + +#: ../../library/array.rst:27 +msgid "signed short" +msgstr "signed short" + +#: ../../library/array.rst:29 +msgid "``'H'``" +msgstr "``'H'``" + +#: ../../library/array.rst:29 +msgid "unsigned short" +msgstr "unsigned short" + +#: ../../library/array.rst:31 +msgid "``'i'``" +msgstr "``'i'``" + +#: ../../library/array.rst:31 +msgid "signed int" +msgstr "signed int" + +#: ../../library/array.rst:33 +msgid "``'I'``" +msgstr "``'I'``" + +#: ../../library/array.rst:33 +msgid "unsigned int" +msgstr "unsigned int" + +#: ../../library/array.rst:35 +msgid "``'l'``" +msgstr "``'l'``" + +#: ../../library/array.rst:35 +msgid "signed long" +msgstr "signed long" + +#: ../../library/array.rst:35 ../../library/array.rst:37 +#: ../../library/array.rst:43 +msgid "4" +msgstr "4" + +#: ../../library/array.rst:37 +msgid "``'L'``" +msgstr "``'L'``" + +#: ../../library/array.rst:37 +msgid "unsigned long" +msgstr "unsigned long" + +#: ../../library/array.rst:39 +msgid "``'q'``" +msgstr "``'q'``" + +#: ../../library/array.rst:39 +msgid "signed long long" +msgstr "signed long long" + +#: ../../library/array.rst:39 ../../library/array.rst:41 +#: ../../library/array.rst:45 +msgid "8" +msgstr "8" + +#: ../../library/array.rst:41 +msgid "``'Q'``" +msgstr "``'Q'``" + +#: ../../library/array.rst:41 +msgid "unsigned long long" +msgstr "unsigned long long" + +#: ../../library/array.rst:43 +msgid "``'f'``" +msgstr "``'f'``" + +#: ../../library/array.rst:43 ../../library/array.rst:43 +#: ../../library/array.rst:45 +msgid "float" +msgstr "float" + +#: ../../library/array.rst:45 +msgid "``'d'``" +msgstr "``'d'``" + +#: ../../library/array.rst:45 +msgid "double" +msgstr "double" + +#: ../../library/array.rst:48 +msgid "Notes:" +msgstr "注释:" + +#: ../../library/array.rst:51 +msgid "It can be 16 bits or 32 bits depending on the platform." +msgstr "可能为 16 位或 32 位,取决于具体的平台。" + +#: ../../library/array.rst:53 +msgid "" +"``array('u')`` now uses ``wchar_t`` as C type instead of deprecated " +"``Py_UNICODE``. This change doesn't affect to its behavior because " +"``Py_UNICODE`` is alias of ``wchar_t`` since Python 3.3." +msgstr "" +"``array('u')`` 现在使用 ``wchar_t`` 作为 C 类型而不再是已弃用的 ``Py_UNICODE``。 " +"这个改变不会影响其行为,因为 ``Py_UNICODE`` 自 Python 3.3 起就是 ``wchar_t`` 的别名。" + +#: ../../library/array.rst:61 +msgid "" +"The actual representation of values is determined by the machine " +"architecture (strictly speaking, by the C implementation). The actual size " +"can be accessed through the :attr:`itemsize` attribute." +msgstr "值的实际表示会由机器的架构决定(严格地说是由 C 实现决定)。 实际大小可通过 :attr:`itemsize` 属性来获取。" + +#: ../../library/array.rst:65 +msgid "The module defines the following type:" +msgstr "此模块定义了以下类型:" + +#: ../../library/array.rst:70 +msgid "" +"A new array whose items are restricted by *typecode*, and initialized from " +"the optional *initializer* value, which must be a list, a :term:`bytes-like " +"object`, or iterable over elements of the appropriate type." +msgstr "" +"一个由 *typecode* 限定类型的新数组,可由可选的 *initializer* 初始化。*initializer* " +"必须为一个列表、:term:`bytes-like object` 或在合适类型元素上迭代的可迭代对象。" + +#: ../../library/array.rst:75 +msgid "" +"If given a list or string, the initializer is passed to the new array's " +":meth:`fromlist`, :meth:`frombytes`, or :meth:`fromunicode` method (see " +"below) to add initial items to the array. Otherwise, the iterable " +"initializer is passed to the :meth:`extend` method." +msgstr "" +"如果是一个列表或字符串,该 initializer 会被传给新数组的 :meth:`fromlist`,:meth:`frombytes` 或 " +":meth:`fromunicode` 方法(见下)以将初始项添加到数组中。其它将可迭代对象将被传给 :meth:`extend` 方法。" + +#: ../../library/array.rst:80 +msgid "" +"Raises an :ref:`auditing event ` ``array.__new__`` with arguments " +"``typecode``, ``initializer``." +msgstr "" +"引发一个 :ref:`审计事件 ` ``array.__new__`` 并附带参数 ``typecode``, " +"``initializer``。" + +#: ../../library/array.rst:84 +msgid "A string with all available type codes." +msgstr "一个由所有可用的类型码组成的字符串。" + +#: ../../library/array.rst:86 +msgid "" +"Array objects support the ordinary sequence operations of indexing, slicing," +" concatenation, and multiplication. When using slice assignment, the " +"assigned value must be an array object with the same type code; in all other" +" cases, :exc:`TypeError` is raised. Array objects also implement the buffer " +"interface, and may be used wherever :term:`bytes-like objects ` are supported." +msgstr "" +"数组对象支持普通的序列操作如索引、切片、拼接和重复等。当使用切片赋值时,所赋的值必须为具有相同类型码的数组对象;所有其他情况都将引发 " +":exc:`TypeError`。数组对象也实现了缓冲区接口,可以用于所有支持 :term:`类字节对象 ` " +"的场合。" + +#: ../../library/array.rst:92 +msgid "The following data items and methods are also supported:" +msgstr "以下数据项和方法也受到支持:" + +#: ../../library/array.rst:96 +msgid "The typecode character used to create the array." +msgstr "在创建数组时使用的类型码字符。" + +#: ../../library/array.rst:101 +msgid "The length in bytes of one array item in the internal representation." +msgstr "内部表示中,单个数组项的长度。单位为字节。" + +#: ../../library/array.rst:106 +msgid "Append a new item with value *x* to the end of the array." +msgstr "添加一个值为 *x* 的新项到数组末尾。" + +#: ../../library/array.rst:111 +msgid "" +"Return a tuple ``(address, length)`` giving the current memory address and " +"the length in elements of the buffer used to hold array's contents. The " +"size of the memory buffer in bytes can be computed as " +"``array.buffer_info()[1] * array.itemsize``. This is occasionally useful " +"when working with low-level (and inherently unsafe) I/O interfaces that " +"require memory addresses, such as certain :c:func:`ioctl` operations. The " +"returned numbers are valid as long as the array exists and no length-" +"changing operations are applied to it." +msgstr "" +"返回一个元组 ``(address, length)`` 以给出用于存放数组内容的缓冲区元素的当前内存地址和长度。 以字节表示的内存缓冲区大小可通过 " +"``array.buffer_info()[1] * array.itemsize`` 来计算。 这在使用需要内存地址的低层级(因此不够安全) I/O " +"接口时会很有用,例如某些 :c:func:`ioctl` 操作。 只要数组存在并且没有应用改变长度的操作,返回数值就是有效的。" + +#: ../../library/array.rst:121 +msgid "" +"When using array objects from code written in C or C++ (the only way to " +"effectively make use of this information), it makes more sense to use the " +"buffer interface supported by array objects. This method is maintained for " +"backward compatibility and should be avoided in new code. The buffer " +"interface is documented in :ref:`bufferobjects`." +msgstr "" +"只有在使用以 C 或 C++ " +"编写的代码中的数组对象时,才能有效利用该信息,但此时,更合理的是,使用数组对象支持的缓冲区接口。因此,该方法的存在仅仅是为了向后兼容性,应避免在新代码中使用。缓冲区接口的文档参见" +" :ref:`bufferobjects`。" + +#: ../../library/array.rst:130 +msgid "" +"\"Byteswap\" all items of the array. This is only supported for values " +"which are 1, 2, 4, or 8 bytes in size; for other types of values, " +":exc:`RuntimeError` is raised. It is useful when reading data from a file " +"written on a machine with a different byte order." +msgstr "" +"“字节对调”所有数组项。此方法只支持大小为 1, 2, 4 或 8 字节的值;对于其它类型的值将引发 " +":exc:`RuntimeError`。当要从另一种字节顺序的机器生成的文件中读取数据时,它很有用。" + +#: ../../library/array.rst:138 +msgid "Return the number of occurrences of *x* in the array." +msgstr "返回 *x* 在数组中的出现次数。" + +#: ../../library/array.rst:143 +msgid "" +"Append items from *iterable* to the end of the array. If *iterable* is " +"another array, it must have *exactly* the same type code; if not, " +":exc:`TypeError` will be raised. If *iterable* is not an array, it must be " +"iterable and its elements must be the right type to be appended to the " +"array." +msgstr "" +"将来自 *iterable* 的项添加到数组末尾。如果 *iterable* 是另一个数组,它必须具有 *完全* 相同的类型码;否则将引发 " +":exc:`TypeError`。如果 *iterable* 不是一个数组,则它必须为可迭代对象且其元素的类型须为可添加到数组的适当类型。" + +#: ../../library/array.rst:151 +msgid "" +"Appends items from the string, interpreting the string as an array of " +"machine values (as if it had been read from a file using the " +":meth:`fromfile` method)." +msgstr "将来自字节串的项添加到数组末尾,字节串被视为由机器值组成的数组(就像用 :meth:`fromfile` 方法从文件中读取数据一样)。" + +#: ../../library/array.rst:154 +msgid ":meth:`fromstring` is renamed to :meth:`frombytes` for clarity." +msgstr ":meth:`fromstring` 重命名为 :meth:`frombytes` 以使其含义更清晰。" + +#: ../../library/array.rst:160 +msgid "" +"Read *n* items (as machine values) from the :term:`file object` *f* and " +"append them to the end of the array. If less than *n* items are available, " +":exc:`EOFError` is raised, but the items that were available are still " +"inserted into the array." +msgstr "" +"从 :term:`file object` *f* 中读取 *n* 项(视为机器值)并将它们添加到数组末尾。如果可用的项少于 *n* 项,则会引发 " +":exc:`EOFError`,但可用的项仍然会被加进数组。" + +#: ../../library/array.rst:168 +msgid "" +"Append items from the list. This is equivalent to ``for x in list: " +"a.append(x)`` except that if there is a type error, the array is unchanged." +msgstr "" +"将来自列表的项添加到数组末尾。等价于 ``for x in list: a.append(x)``,而不同之处在于,若发生类型错误,数组则不会被改变。" + +#: ../../library/array.rst:174 +msgid "" +"Extends this array with data from the given unicode string. The array must " +"be a type ``'u'`` array; otherwise a :exc:`ValueError` is raised. Use " +"``array.frombytes(unicodestring.encode(enc))`` to append Unicode data to an " +"array of some other type." +msgstr "" +"将来自 Unicode 字符串的项添加到数组末尾。数组必须是类型为 ``'u'`` 的数组;否则将引发 :exc:`ValueError`。请用 " +"``array.frombytes(unicodestring.encode(enc))`` 来将 Unicode 数据添加到其它类型的数组。" + +#: ../../library/array.rst:182 +msgid "" +"Return the smallest *i* such that *i* is the index of the first occurrence " +"of *x* in the array." +msgstr "返回最小的 *i* 使得 *i* 为 *x* 在数组中首次出现的序号。" + +#: ../../library/array.rst:188 +msgid "" +"Insert a new item with value *x* in the array before position *i*. Negative " +"values are treated as being relative to the end of the array." +msgstr "在数组的位置 *i* 之前插入一个值为 *x* 的新项。负值被视为相对于数组末尾的位置。" + +#: ../../library/array.rst:194 +msgid "" +"Removes the item with the index *i* from the array and returns it. The " +"optional argument defaults to ``-1``, so that by default the last item is " +"removed and returned." +msgstr "从数组中移除下标为 *i* 的项并将其返回。参数默认值为 ``-1``,因此默认移除并返回末项。" + +#: ../../library/array.rst:201 +msgid "Remove the first occurrence of *x* from the array." +msgstr "从数组中移除第一个出现的 *x*。" + +#: ../../library/array.rst:206 +msgid "Reverse the order of the items in the array." +msgstr "反转数组中各项的顺序。" + +#: ../../library/array.rst:211 +msgid "" +"Convert the array to an array of machine values and return the bytes " +"representation (the same sequence of bytes that would be written to a file " +"by the :meth:`tofile` method.)" +msgstr "将数组转换为一个由机器值组成的数组并返回其字节表示(和用 :meth:`tofile` 方法写入文件的字节序列相同)。" + +#: ../../library/array.rst:215 +msgid ":meth:`tostring` is renamed to :meth:`tobytes` for clarity." +msgstr ":meth:`tostring` 被重命名为 :meth:`tobytes` 以使其含义更清晰。" + +#: ../../library/array.rst:221 +msgid "Write all items (as machine values) to the :term:`file object` *f*." +msgstr "将所有项(作为机器值)写入 :term:`file object` *f*。" + +#: ../../library/array.rst:226 +msgid "Convert the array to an ordinary list with the same items." +msgstr "将数组转换为由相同的项组成的普通列表。" + +#: ../../library/array.rst:231 +msgid "" +"Convert the array to a unicode string. The array must be a type ``'u'`` " +"array; otherwise a :exc:`ValueError` is raised. Use " +"``array.tobytes().decode(enc)`` to obtain a unicode string from an array of " +"some other type." +msgstr "" +"将数组转换为一个 Unicode 字符串。数组必须是类型为 ``'u'`` 的数组;否则将引发 :exc:`ValueError`。请用 " +"``array.tobytes().decode(enc)`` 来将其它类型的数组转换为 Unicode 字符串。" + +#: ../../library/array.rst:236 +msgid "" +"When an array object is printed or converted to a string, it is represented " +"as ``array(typecode, initializer)``. The *initializer* is omitted if the " +"array is empty, otherwise it is a string if the *typecode* is ``'u'``, " +"otherwise it is a list of numbers. The string is guaranteed to be able to " +"be converted back to an array with the same type and value using " +":func:`eval`, so long as the :class:`~array.array` class has been imported " +"using ``from array import array``. Examples::" +msgstr "" +"数组对象被打印或转换为字符串时,会被表示为 ``array(typecode, initializer)``。*initializer* " +"在数组为空时会被省略,在数组的 *typecode* 为 ``'u'`` 时是一个字符串,其它时候是一个数字列表。只要 " +":class:`~array.array` 类已用 ``from array import array`` 引入,该字符串保证能被 " +":func:`eval` 转换回具有相同类型和值的数组。例:" + +#: ../../library/array.rst:253 +msgid "Module :mod:`struct`" +msgstr ":mod:`struct` 模块" + +#: ../../library/array.rst:253 +msgid "Packing and unpacking of heterogeneous binary data." +msgstr "打包和解包异构二进制数据。" + +#: ../../library/array.rst:257 +msgid "Module :mod:`xdrlib`" +msgstr ":mod:`xdrlib` 模块" + +#: ../../library/array.rst:256 +msgid "" +"Packing and unpacking of External Data Representation (XDR) data as used in " +"some remote procedure call systems." +msgstr "对某些远程过程调用系统中使用的外部数据表示(XDR)数据进行打包和解包 。" + +#: ../../library/array.rst:259 +msgid "`NumPy `_" +msgstr "`NumPy `_" + +#: ../../library/array.rst:260 +msgid "The NumPy package defines another array type." +msgstr "NumPy 包定义了另一数组类型。" diff --git a/library/ast.po b/library/ast.po new file mode 100644 index 000000000..08e5b1eb2 --- /dev/null +++ b/library/ast.po @@ -0,0 +1,1403 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) 2001-2024, Python Software Foundation +# This file is distributed under the same license as the Python package. +# FIRST AUTHOR , YEAR. +# +# Translators: +# Jarry Shaw , 2018 +# thautwarm , 2019 +# nick <2330458484@qq.com>, 2019 +# xixi zhao , 2019 +# Fred , 2020 +# Dai Xu , 2021 +# Alpha Du , 2021 +# ProgramRipper, 2022 +# Rafael Fontenelle , 2023 +# Freesand Leo , 2024 +# +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: Python 3.9\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2024-12-06 16:45+0000\n" +"PO-Revision-Date: 2017-02-16 17:48+0000\n" +"Last-Translator: Freesand Leo , 2024\n" +"Language-Team: Chinese (China) (https://app.transifex.com/python-doc/teams/5390/zh_CN/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: zh_CN\n" +"Plural-Forms: nplurals=1; plural=0;\n" + +#: ../../library/ast.rst:2 +msgid ":mod:`ast` --- Abstract Syntax Trees" +msgstr ":mod:`ast` --- 抽象语法树" + +#: ../../library/ast.rst:14 +msgid "**Source code:** :source:`Lib/ast.py`" +msgstr "**源代码:** :source:`Lib/ast.py`" + +#: ../../library/ast.rst:18 +msgid "" +"The :mod:`ast` module helps Python applications to process trees of the " +"Python abstract syntax grammar. The abstract syntax itself might change " +"with each Python release; this module helps to find out programmatically " +"what the current grammar looks like." +msgstr "" +":mod:`ast` 模块帮助 Python 程序处理 Python 语法的抽象语法树。抽象语法或许会随着 Python " +"的更新版发行而改变;该模块能够帮助理解当前语法在编程层面的样貌。" + +#: ../../library/ast.rst:23 +msgid "" +"An abstract syntax tree can be generated by passing " +":data:`ast.PyCF_ONLY_AST` as a flag to the :func:`compile` built-in " +"function, or using the :func:`parse` helper provided in this module. The " +"result will be a tree of objects whose classes all inherit from " +":class:`ast.AST`. An abstract syntax tree can be compiled into a Python " +"code object using the built-in :func:`compile` function." +msgstr "" +"抽象语法树可通过将 :data:`ast.PyCF_ONLY_AST` 作为旗标传递给 :func:`compile` " +"内置函数来生成,或是使用此模块中提供的 :func:`parse` 辅助函数。返回结果将是一个由许多对象构成的树,这些对象所属的类都继承自 " +":class:`ast.AST`。抽象语法树可被内置的 :func:`compile` 函数编译为一个 Python 代码对象。" + +#: ../../library/ast.rst:33 +msgid "Abstract Grammar" +msgstr "抽象文法" + +#: ../../library/ast.rst:35 +msgid "The abstract grammar is currently defined as follows:" +msgstr "抽象文法目前定义如下" + +#: ../../library/ast.rst:42 +msgid "Node classes" +msgstr "节点类" + +#: ../../library/ast.rst:46 +msgid "" +"This is the base of all AST node classes. The actual node classes are " +"derived from the :file:`Parser/Python.asdl` file, which is reproduced " +":ref:`below `. They are defined in the :mod:`_ast` C " +"module and re-exported in :mod:`ast`." +msgstr "" +"这是所有 AST 节点类的基类。实际上,这些节点类派生自 :file:`Parser/Python.asdl` 文件,其中定义的语法树示例 " +":ref:`如下 `。它们在 C 语言模块 :mod:`_ast` 中定义,并被导出至 :mod:`ast` 模块。" + +#: ../../library/ast.rst:51 +msgid "" +"There is one class defined for each left-hand side symbol in the abstract " +"grammar (for example, :class:`ast.stmt` or :class:`ast.expr`). In addition," +" there is one class defined for each constructor on the right-hand side; " +"these classes inherit from the classes for the left-hand side trees. For " +"example, :class:`ast.BinOp` inherits from :class:`ast.expr`. For production" +" rules with alternatives (aka \"sums\"), the left-hand side class is " +"abstract: only instances of specific constructor nodes are ever created." +msgstr "" +"抽象文法中的每个等号左边的符号(比方说, :class:`ast.stmt` 或者 " +":class:`ast.expr`)定义了一个类。另外,在等号右边,对每一个构造器也定义了一个类;这些类继承自等号左边的类。比如,:class:`ast.BinOp`" +" 继承自 :class:`ast.expr`。对于多分支产生式(也就是含有“ | ”的产生式),左边的类是抽象的;只有具体构造器类的实例能够被 " +"compile 函数构造。" + +#: ../../library/ast.rst:64 +msgid "" +"Each concrete class has an attribute :attr:`_fields` which gives the names " +"of all child nodes." +msgstr "每个具体类都有属性 :attr:`_fields`,用来给出所有子节点的名字。" + +#: ../../library/ast.rst:67 +msgid "" +"Each instance of a concrete class has one attribute for each child node, of " +"the type as defined in the grammar. For example, :class:`ast.BinOp` " +"instances have an attribute :attr:`left` of type :class:`ast.expr`." +msgstr "" +"每个具体类的实例为自己的每个子节点都准备了一个属性来引用该子节点,属性的类型就是文法中所定义的。比如,:class:`ast.BinOp` " +"的实例有个属性 :attr:`left`,类型是 :class:`ast.expr`。" + +#: ../../library/ast.rst:71 +msgid "" +"If these attributes are marked as optional in the grammar (using a question " +"mark), the value might be ``None``. If the attributes can have zero-or-more" +" values (marked with an asterisk), the values are represented as Python " +"lists. All possible attributes must be present and have valid values when " +"compiling an AST with :func:`compile`." +msgstr "" +"如果这些属性在文法中标记为可选(用问号标记),对应值可能会是 " +"``None``。如果这些属性可有零或多个值(用星号标记),对应值会用Python的列表来表示。在用 :func:`compile` " +"将AST编译为可执行代码时,所有的属性必须已经被赋值为有效的值。" + +#: ../../library/ast.rst:82 +msgid "" +"Instances of :class:`ast.expr` and :class:`ast.stmt` subclasses have " +":attr:`lineno`, :attr:`col_offset`, :attr:`end_lineno`, and " +":attr:`end_col_offset` attributes. The :attr:`lineno` and " +":attr:`end_lineno` are the first and last line numbers of the source text " +"span (1-indexed so the first line is line 1), and the :attr:`col_offset` and" +" :attr:`end_col_offset` are the corresponding UTF-8 byte offsets of the " +"first and last tokens that generated the node. The UTF-8 offset is recorded " +"because the parser uses UTF-8 internally." +msgstr "" + +#: ../../library/ast.rst:91 +msgid "" +"Note that the end positions are not required by the compiler and are " +"therefore optional. The end offset is *after* the last symbol, for example " +"one can get the source segment of a one-line expression node using " +"``source_line[node.col_offset : node.end_col_offset]``." +msgstr "" +"注意编译器不需要结束位置,所以结束位置是可选的。结束偏移在最后一个符号 *之后* ,例如你可以通过 " +"``source_line[node.col_offset : node.end_col_offset]`` 获得一个单行表达式节点的源码片段。" + +#: ../../library/ast.rst:96 +msgid "" +"The constructor of a class :class:`ast.T` parses its arguments as follows:" +msgstr ":class:`ast.T` 类的构造器像下面这样解析它的参数:" + +#: ../../library/ast.rst:98 +msgid "" +"If there are positional arguments, there must be as many as there are items " +"in :attr:`T._fields`; they will be assigned as attributes of these names." +msgstr "如果只用位置参数,参数的数量必须和 :attr:`T._fields` 中的项一样多;它们会按顺序赋值到这些属性上。" + +#: ../../library/ast.rst:100 +msgid "" +"If there are keyword arguments, they will set the attributes of the same " +"names to the given values." +msgstr "如果有关键字参数,它们会为与其关键字同名的属性赋值。" + +#: ../../library/ast.rst:103 +msgid "" +"For example, to create and populate an :class:`ast.UnaryOp` node, you could " +"use ::" +msgstr "比方说,要创建和填充节点 :class:`ast.UnaryOp`,你得用 ::" + +#: ../../library/ast.rst:115 +msgid "or the more compact ::" +msgstr "或者更紧凑点 ::" + +#: ../../library/ast.rst:122 +msgid "Class :class:`ast.Constant` is now used for all constants." +msgstr ":class:`ast.Constant` 类现在用于所有常量。" + +#: ../../library/ast.rst:126 +msgid "" +"Simple indices are represented by their value, extended slices are " +"represented as tuples." +msgstr "简单索引由它们的值表示,扩展切片表示为元组。" + +#: ../../library/ast.rst:131 +msgid "" +"Old classes :class:`ast.Num`, :class:`ast.Str`, :class:`ast.Bytes`, " +":class:`ast.NameConstant` and :class:`ast.Ellipsis` are still available, but" +" they will be removed in future Python releases. In the meantime, " +"instantiating them will return an instance of a different class." +msgstr "" +"旧的类 :class:`ast.Num`、:class:`ast.Str`、 " +":class:`ast.Bytes`、:class:`ast.NameConstant` 和 :class:`ast.Ellipsis` " +"仍然有效,但是它们会在未来的 Python 版本中被移除。同时,实例化它们会返回一个不同类的实例。" + +#: ../../library/ast.rst:138 +msgid "" +"Old classes :class:`ast.Index` and :class:`ast.ExtSlice` are still " +"available, but they will be removed in future Python releases. In the " +"meantime, instantiating them will return an instance of a different class." +msgstr "" +"旧的类 :class:`ast.Index` 和 :class:`ast.ExtSlice` 仍然有效,但是它们会在未来的 Python " +"版本中被移除。同时,实例化它们会返回一个不同类的实例。" + +#: ../../library/ast.rst:144 +msgid "" +"The descriptions of the specific node classes displayed here were initially " +"adapted from the fantastic `Green Tree Snakes " +"`__ project and all its " +"contributors." +msgstr "" +"在此显示的特定节点类的描述最初是改编自杰出的 `Green Tree Snakes " +"`__ 项目及其所有贡献者。" + +#: ../../library/ast.rst:150 +msgid "Literals" +msgstr "字面值" + +#: ../../library/ast.rst:154 +msgid "" +"A constant value. The ``value`` attribute of the ``Constant`` literal " +"contains the Python object it represents. The values represented can be " +"simple types such as a number, string or ``None``, but also immutable " +"container types (tuples and frozensets) if all of their elements are " +"constant." +msgstr "" +"一个常量。 ``Constant`` 字面值的 ``value`` 属性即为其代表的 Python 对象。它可以代表简单的数字,字符串或者 " +"``None`` 对象,但是也可以代表所有元素都是常量的不可变容器(例如元组或冻结集合)。" + +#: ../../library/ast.rst:168 +msgid "" +"Node representing a single formatting field in an f-string. If the string " +"contains a single formatting field and nothing else the node can be isolated" +" otherwise it appears in :class:`JoinedStr`." +msgstr "" +"节点是以一个 f-字符串形式的格式化字段来代表的。 如果该字符串只包含单个格式化字段而没有任何其他内容则节点可以被隔离,否则它将在 " +":class:`JoinedStr` 中出现。" + +#: ../../library/ast.rst:172 +msgid "" +"``value`` is any expression node (such as a literal, a variable, or a " +"function call)." +msgstr "``value`` 为任意的表达式节点(如一个字面值、变量或函数调用)。" + +#: ../../library/ast.rst:174 +msgid "``conversion`` is an integer:" +msgstr "``conversion`` 是一个整数:" + +#: ../../library/ast.rst:176 +msgid "-1: no formatting" +msgstr "-1: 无格式化" + +#: ../../library/ast.rst:177 +msgid "115: ``!s`` string formatting" +msgstr "115: ``!s`` 字符串格式化" + +#: ../../library/ast.rst:178 +msgid "114: ``!r`` repr formatting" +msgstr "114: ``!r`` repr 格式化" + +#: ../../library/ast.rst:179 +msgid "97: ``!a`` ascii formatting" +msgstr "97: ``!a`` ascii 格式化" + +#: ../../library/ast.rst:181 +msgid "" +"``format_spec`` is a :class:`JoinedStr` node representing the formatting of " +"the value, or ``None`` if no format was specified. Both ``conversion`` and " +"``format_spec`` can be set at the same time." +msgstr "" +"``format_spec`` 是一个代表值的格式化的 :class:`JoinedStr` 节点,或者如果未指定格式则为 ``None``。 " +"``conversion`` 和 ``format_spec`` 可以被同时设置。" + +#: ../../library/ast.rst:188 +msgid "" +"An f-string, comprising a series of :class:`FormattedValue` and " +":class:`Constant` nodes." +msgstr "一个 f-字符串,由一系列 :class:`FormattedValue` 和 :class:`Constant` 节点组成。" + +#: ../../library/ast.rst:217 +msgid "" +"A list or tuple. ``elts`` holds a list of nodes representing the elements. " +"``ctx`` is :class:`Store` if the container is an assignment target (i.e. " +"``(x,y)=something``), and :class:`Load` otherwise." +msgstr "" +"一个列表或元组。 ``elts`` 保存一个代表元素的节点的列表。 ``ctx`` 在容器为赋值的目标时 (如 ``(x,y)=something``)" +" 是 :class:`Store`,否则是 :class:`Load`。" + +#: ../../library/ast.rst:243 +msgid "A set. ``elts`` holds a list of nodes representing the set's elements." +msgstr "一个集合。 ``elts`` 保存一个代表集合的元组的节点的列表。" + +#: ../../library/ast.rst:258 +msgid "" +"A dictionary. ``keys`` and ``values`` hold lists of nodes representing the " +"keys and the values respectively, in matching order (what would be returned " +"when calling :code:`dictionary.keys()` and :code:`dictionary.values()`)." +msgstr "" +"一个字典。 ``keys`` 和 ``values`` 保存分别代表键和值的节点的列表,按照匹配的顺序(即当调用 " +":code:`dictionary.keys()` 和 :code:`dictionary.values()` 时将返回的结果)。" + +#: ../../library/ast.rst:262 +msgid "" +"When doing dictionary unpacking using dictionary literals the expression to " +"be expanded goes in the ``values`` list, with a ``None`` at the " +"corresponding position in ``keys``." +msgstr "" +"当使用字典字面值进行字典解包操作时要扩展的表达式放入 ``values`` 列表,并将 ``None`` 放入 ``keys`` 的对应位置。" + +#: ../../library/ast.rst:280 +msgid "Variables" +msgstr "变量" + +#: ../../library/ast.rst:284 +msgid "" +"A variable name. ``id`` holds the name as a string, and ``ctx`` is one of " +"the following types." +msgstr "一个变量名。 ``id`` 将名称保存为字符串,而 ``ctx`` 为下列类型之一。" + +#: ../../library/ast.rst:292 +msgid "" +"Variable references can be used to load the value of a variable, to assign a" +" new value to it, or to delete it. Variable references are given a context " +"to distinguish these cases." +msgstr "变量引用可被用来载入一个变量的值,为其赋一个新值,或是将其删除。 变量引用会给出一个上下文来区分这几种情况。" + +#: ../../library/ast.rst:325 +msgid "" +"A ``*var`` variable reference. ``value`` holds the variable, typically a " +":class:`Name` node. This type must be used when building a :class:`Call` " +"node with ``*args``." +msgstr "" +"一个 ``*var`` 变量引用。 ``value`` 保存变量,通常为一个 :class:`Name` 节点。 此类型必须在构建 " +":class:`Call` 节点并传入 ``*args`` 时被使用。" + +#: ../../library/ast.rst:348 +msgid "Expressions" +msgstr "表达式" + +#: ../../library/ast.rst:352 +msgid "" +"When an expression, such as a function call, appears as a statement by " +"itself with its return value not used or stored, it is wrapped in this " +"container. ``value`` holds one of the other nodes in this section, a " +":class:`Constant`, a :class:`Name`, a :class:`Lambda`, a :class:`Yield` or " +":class:`YieldFrom` node." +msgstr "" +"当一个表达式,例如函数调用,本身作为一个语句出现并且其返回值未被使用或存储时,它会被包装在此容器中。 ``value`` 保存本节中的其他节点之一,一个" +" :class:`Constant`, :class:`Name`, :class:`Lambda`, :class:`Yield` 或者 " +":class:`YieldFrom` 节点。" + +#: ../../library/ast.rst:371 +msgid "" +"A unary operation. ``op`` is the operator, and ``operand`` any expression " +"node." +msgstr "一个单目运算。 ``op`` 是运算符,而 ``operand`` 是任意表达式节点。" + +#: ../../library/ast.rst:380 +msgid "" +"Unary operator tokens. :class:`Not` is the ``not`` keyword, :class:`Invert` " +"is the ``~`` operator." +msgstr "单目运算符对应的形符。 :class:`Not` 是 ``not`` 关键字,:class:`Invert` 是 ``~`` 运算符。" + +#: ../../library/ast.rst:394 +msgid "" +"A binary operation (like addition or division). ``op`` is the operator, and " +"``left`` and ``right`` are any expression nodes." +msgstr "一个双目运算(如相加或相减)。 ``op`` 是运算符,而 ``left`` 和 ``right`` 是任意表达式节点。" + +#: ../../library/ast.rst:421 +msgid "Binary operator tokens." +msgstr "双目运算符对应的形符。" + +#: ../../library/ast.rst:426 +msgid "" +"A boolean operation, 'or' or 'and'. ``op`` is :class:`Or` or :class:`And`. " +"``values`` are the values involved. Consecutive operations with the same " +"operator, such as ``a or b or c``, are collapsed into one node with several " +"values." +msgstr "" +"一个布尔运算,'or' 或者 'and'。 ``op`` 是 :class:`Or` 或者 :class:`And`。 ``values`` " +"是参与运算的值。 具有相同运算符的连续运算,如 ``a or b or c``,会被折叠为具有多个值的单个节点。" + +#: ../../library/ast.rst:431 +msgid "This doesn't include ``not``, which is a :class:`UnaryOp`." +msgstr "这不包括 ``not``,它属于 :class:`UnaryOp`。" + +#: ../../library/ast.rst:447 +msgid "Boolean operator tokens." +msgstr "布尔运算符对应的形符。" + +#: ../../library/ast.rst:452 +msgid "" +"A comparison of two or more values. ``left`` is the first value in the " +"comparison, ``ops`` the list of operators, and ``comparators`` the list of " +"values after the first element in the comparison." +msgstr "" +"两个或更多值之间的比较运算。 ``left`` 是参加比较的第一个值,``ops`` 是由运算符组成的列表,而 ``comparators`` " +"是由参加比较的第一个元素之后的值组成的列表。" + +#: ../../library/ast.rst:481 +msgid "Comparison operator tokens." +msgstr "比较运算符对应的形符。" + +#: ../../library/ast.rst:486 +msgid "" +"A function call. ``func`` is the function, which will often be a " +":class:`Name` or :class:`Attribute` object. Of the arguments:" +msgstr "" +"一个函数调用。 ``func`` 是函数,它通常是一个 :class:`Name` 或 :class:`Attribute` 对象。 对于其参数:" + +#: ../../library/ast.rst:489 +msgid "``args`` holds a list of the arguments passed by position." +msgstr "``args`` 保存由按位置传入的参数组成的列表。" + +#: ../../library/ast.rst:490 +msgid "" +"``keywords`` holds a list of :class:`keyword` objects representing arguments" +" passed by keyword." +msgstr "``keywords`` 保存了一个代表以关键字传入的参数的 :class:`keyword` 对象的列表。" + +#: ../../library/ast.rst:493 +msgid "" +"When creating a ``Call`` node, ``args`` and ``keywords`` are required, but " +"they can be empty lists. ``starargs`` and ``kwargs`` are optional." +msgstr "" +"当创建一个 ``Call`` 节点时,需要有 ``args`` 和 ``keywords``,但它们可以为空列表。 ``starargs`` 和 " +"``kwargs`` 是可选的。" + +#: ../../library/ast.rst:517 +msgid "" +"A keyword argument to a function call or class definition. ``arg`` is a raw " +"string of the parameter name, ``value`` is a node to pass in." +msgstr "传给函数调用或类定义的关键字参数。 ``arg`` 是形参名称对应的原始字符串,``value`` 是要传入的节点。" + +#: ../../library/ast.rst:523 +msgid "" +"An expression such as ``a if b else c``. Each field holds a single node, so " +"in the following example, all three are :class:`Name` nodes." +msgstr "" +"一个表达式例如 ``a if b else c``。 每个字段保存一个单独节点,因而在下面的示例中,三个节点均为 :class:`Name` 节点。" + +#: ../../library/ast.rst:538 +msgid "" +"Attribute access, e.g. ``d.keys``. ``value`` is a node, typically a " +":class:`Name`. ``attr`` is a bare string giving the name of the attribute, " +"and ``ctx`` is :class:`Load`, :class:`Store` or :class:`Del` according to " +"how the attribute is acted on." +msgstr "" +"属性访问,例如 ``d.keys``。 ``value`` 是一个节点,通常为 :class:`Name`。 ``attr`` " +"是一个给出属性名称的纯字符串,而 ``ctx`` 根据属性操作的方式可以为 :class:`Load`, :class:`Store` 或 " +":class:`Del`。" + +#: ../../library/ast.rst:555 +msgid "" +"A named expression. This AST node is produced by the assignment expressions " +"operator (also known as the walrus operator). As opposed to the " +":class:`Assign` node in which the first argument can be multiple nodes, in " +"this case both ``target`` and ``value`` must be single nodes." +msgstr "" +"一个带名称的表达式。 此 AST 节点是由赋值表达式运算符(或称海象运算符)产生的。 与第一个参数可以有多个节点的 :class:`Assign` " +"节点不同,在此情况下 ``target`` 和 ``value`` 都必须为单独节点。" + +#: ../../library/ast.rst:570 +msgid "Subscripting" +msgstr "抽取" + +#: ../../library/ast.rst:574 +msgid "" +"A subscript, such as ``l[1]``. ``value`` is the subscripted object (usually " +"sequence or mapping). ``slice`` is an index, slice or key. It can be a " +":class:`Tuple` and contain a :class:`Slice`. ``ctx`` is :class:`Load`, " +":class:`Store` or :class:`Del` according to the action performed with the " +"subscript." +msgstr "" +"抽取操作,如 ``l[1]``。 ``value`` 是被抽取的对象(通常为序列或映射)。 ``slice`` 是索引号、切片或键。 它可以是一个包含 " +":class:`Slice` 的 :class:`Tuple`。 ``ctx`` 根据抽取所执行的操作可以为 :class:`Load`, " +":class:`Store` 或 :class:`Del`。" + +#: ../../library/ast.rst:598 +msgid "" +"Regular slicing (on the form ``lower:upper`` or ``lower:upper:step``). Can " +"occur only inside the *slice* field of :class:`Subscript`, either directly " +"or as an element of :class:`Tuple`." +msgstr "" +"常规切片 (形式如 ``lower:upper`` 或 ``lower:upper:step``)。 只能在 :class:`Subscript` 的 " +"*slice* 字段内部出现,可以是直接切片对象或是作为 :class:`Tuple` 的元素。" + +#: ../../library/ast.rst:615 +msgid "Comprehensions" +msgstr "推导式" + +#: ../../library/ast.rst:622 +msgid "" +"List and set comprehensions, generator expressions, and dictionary " +"comprehensions. ``elt`` (or ``key`` and ``value``) is a single node " +"representing the part that will be evaluated for each item." +msgstr "" +"列表和集合推导式、生成器表达式以及字典推导式。 ``elt`` (或 ``key`` 和 ``value``) " +"是一个代表将针对每个条目被求值的部分的单独节点。" + +#: ../../library/ast.rst:626 +msgid "``generators`` is a list of :class:`comprehension` nodes." +msgstr "``generators`` 是一个由 :class:`comprehension` 节点组成的列表。" + +#: ../../library/ast.rst:668 +msgid "" +"One ``for`` clause in a comprehension. ``target`` is the reference to use " +"for each element - typically a :class:`Name` or :class:`Tuple` node. " +"``iter`` is the object to iterate over. ``ifs`` is a list of test " +"expressions: each ``for`` clause can have multiple ``ifs``." +msgstr "" +"推导式中的一个 ``for`` 子句。 ``target`` 是针对每个元素使用的引用 —— 通常为一个 :class:`Name` 或 " +":class:`Tuple` 节点。 ``iter`` 是要执行迭代的对象。 ``ifs`` 是一个由测试表达式组成的列表:每个 ``for`` " +"子句都可以拥有多个 ``ifs``。" + +#: ../../library/ast.rst:673 +msgid "" +"``is_async`` indicates a comprehension is asynchronous (using an ``async " +"for`` instead of ``for``). The value is an integer (0 or 1)." +msgstr "" +"``is_async`` 表明推导式是异步的 (使用 ``async for`` 而不是 ``for``)。 它的值是一个整数 (0 或 1)。" + +#: ../../library/ast.rst:739 +msgid "Statements" +msgstr "语句" + +#: ../../library/ast.rst:743 +msgid "" +"An assignment. ``targets`` is a list of nodes, and ``value`` is a single " +"node." +msgstr "一次赋值。 ``targets`` 是一个由节点组成的列表,而 ``value`` 是一个单独节点。" + +#: ../../library/ast.rst:745 +msgid "" +"Multiple nodes in ``targets`` represents assigning the same value to each. " +"Unpacking is represented by putting a :class:`Tuple` or :class:`List` within" +" ``targets``." +msgstr "" +"``targets`` 中有多个节点表示将同一个值赋给多个目标。 解包操作是通过在 ``targets`` 中放入一个 :class:`Tuple` 或" +" :class:`List` 来表示的。" + +#: ../../library/ast.rst:751 ../../library/ast.rst:1038 +#: ../../library/ast.rst:1211 ../../library/ast.rst:1264 +msgid "" +"``type_comment`` is an optional string with the type annotation as a " +"comment." +msgstr "``type_comment`` 是带有以注释表示的类型标注的可选的字符串。" + +#: ../../library/ast.rst:781 +msgid "" +"An assignment with a type annotation. ``target`` is a single node and can be" +" a :class:`Name`, a :class:`Attribute` or a :class:`Subscript`. " +"``annotation`` is the annotation, such as a :class:`Constant` or " +":class:`Name` node. ``value`` is a single optional node. ``simple`` is a " +"boolean integer set to True for a :class:`Name` node in ``target`` that do " +"not appear in between parenthesis and are hence pure names and not " +"expressions." +msgstr "" +"一次带有类型标注的赋值。 ``target`` 为单独节点并可以是 :class:`Name`, :class:`Attribute` 或 " +":class:`Subscript` 之一。 ``annotation`` 为标注,例如一个 :class:`Constant` 或 " +":class:`Name` 节点。 ``value`` 为可选的单独节点。 ``simple`` 为一个布尔整数,其值对于 ``target`` " +"中不出现在括号之内因而是纯名称而非表达式的 :class:`Name` 节点将为 True。" + +#: ../../library/ast.rst:836 +msgid "" +"Augmented assignment, such as ``a += 1``. In the following example, " +"``target`` is a :class:`Name` node for ``x`` (with the :class:`Store` " +"context), ``op`` is :class:`Add`, and ``value`` is a :class:`Constant` with " +"value for 1." +msgstr "" +"增强赋值,如 ``a += 1``。 在下面的例子中,``target`` 是一个针对 ``x`` (带有 :class:`Store` 上下文) 的 " +":class:`Name` 节点,``op`` 为 :class:`Add`,而 ``value`` 是一个值为 1 的 " +":class:`Constant`。" + +#: ../../library/ast.rst:841 +msgid "" +"The ``target`` attribute connot be of class :class:`Tuple` or :class:`List`," +" unlike the targets of :class:`Assign`." +msgstr "" + +#: ../../library/ast.rst:858 +msgid "" +"A ``raise`` statement. ``exc`` is the exception object to be raised, " +"normally a :class:`Call` or :class:`Name`, or ``None`` for a standalone " +"``raise``. ``cause`` is the optional part for ``y`` in ``raise x from y``." +msgstr "" +"一条 ``raise`` 语句。 ``exc`` 是要引发的异常,对于一个单独的 ``raise`` 通常为 :class:`Call` 或 " +":class:`Name`,或者为 ``None``。 ``cause`` 是针对 ``raise x from y`` 中 ``y`` 的可选部分。" + +#: ../../library/ast.rst:875 +msgid "" +"An assertion. ``test`` holds the condition, such as a :class:`Compare` node." +" ``msg`` holds the failure message." +msgstr "一条断言。 ``test`` 保存条件,例如为一个 :class:`Compare` 节点。 ``msg`` 保存失败消息。" + +#: ../../library/ast.rst:891 +msgid "" +"Represents a ``del`` statement. ``targets`` is a list of nodes, such as " +":class:`Name`, :class:`Attribute` or :class:`Subscript` nodes." +msgstr "" +"代表一条 ``del`` 语句。 ``targets`` 是一个由节点组成的列表,例如 :class:`Name`, " +":class:`Attribute` 或 :class:`Subscript` 节点。" + +#: ../../library/ast.rst:909 +msgid "A ``pass`` statement." +msgstr "一条 ``pass`` 语句。" + +#: ../../library/ast.rst:920 +msgid "" +"Other statements which are only applicable inside functions or loops are " +"described in other sections." +msgstr "其他仅在函数或循环内部可用的语句将在其他小节中描述。" + +#: ../../library/ast.rst:924 +msgid "Imports" +msgstr "导入" + +#: ../../library/ast.rst:928 +msgid "An import statement. ``names`` is a list of :class:`alias` nodes." +msgstr "一条导入语句。 ``names`` 是一个由 :class:`alias` 节点组成的列表。" + +#: ../../library/ast.rst:945 +msgid "" +"Represents ``from x import y``. ``module`` is a raw string of the 'from' " +"name, without any leading dots, or ``None`` for statements such as ``from . " +"import foo``. ``level`` is an integer holding the level of the relative " +"import (0 means absolute import)." +msgstr "" +"代表 ``from x import y``。 ``module`` 是一个 'from' 名称的原始字符串,不带任何前导点号,或者为 ``None``" +" 表示 ``from . import foo`` 这样的语句。 ``level`` 是一个保存相对导入层级的整数(0 表示绝对导入)。" + +#: ../../library/ast.rst:967 +msgid "" +"Both parameters are raw strings of the names. ``asname`` can be ``None`` if " +"the regular name is to be used." +msgstr "两个形参均为名称的原始字符串。 如果要使用常规名称则 ``asname`` 可以为 ``None``。" + +#: ../../library/ast.rst:984 +msgid "Control flow" +msgstr "控制流" + +#: ../../library/ast.rst:987 +msgid "" +"Optional clauses such as ``else`` are stored as an empty list if they're not" +" present." +msgstr "可选的子句如 ``else`` 如果不存在则会被存储为一个空列表。" + +#: ../../library/ast.rst:992 +msgid "" +"An ``if`` statement. ``test`` holds a single node, such as a " +":class:`Compare` node. ``body`` and ``orelse`` each hold a list of nodes." +msgstr "" +"一条 ``if`` 语句。 ``test`` 保存一个单独节点,如一个 :class:`Compare` 节点。 ``body`` 和 " +"``orelse`` 各自保存一个节点列表。" + +#: ../../library/ast.rst:995 +msgid "" +"``elif`` clauses don't have a special representation in the AST, but rather " +"appear as extra :class:`If` nodes within the ``orelse`` section of the " +"previous one." +msgstr "" +"``elif`` 子句在 AST 中没有特别的表示形式,而是作为上文介绍的 ``orelse`` 部分之内的一个额外 :class:`If` 节点出现。" + +#: ../../library/ast.rst:1030 +msgid "" +"A ``for`` loop. ``target`` holds the variable(s) the loop assigns to, as a " +"single :class:`Name`, :class:`Tuple` or :class:`List` node. ``iter`` holds " +"the item to be looped over, again as a single node. ``body`` and ``orelse`` " +"contain lists of nodes to execute. Those in ``orelse`` are executed if the " +"loop finishes normally, rather than via a ``break`` statement." +msgstr "" +"一个 ``for`` 循环。 ``target`` 保存循环赋值的变量,是一个单独 :class:`Name`, :class:`Tuple` 或 " +":class:`List` 节点。 ``iter`` 保存要被循环的条目,同样也是一个单独节点。 ``body`` 和 ``orelse`` " +"包含要执行的节点列表。 ``orelse`` 中的会在循环正常结束而不是通过 ``break`` 语句结束时被执行。" + +#: ../../library/ast.rst:1064 +msgid "" +"A ``while`` loop. ``test`` holds the condition, such as a :class:`Compare` " +"node." +msgstr "一个 ``while`` 循环。 ``test`` 保存条件,如一个 :class:`Compare` 节点。" + +#: ../../library/ast.rst:1091 +msgid "The ``break`` and ``continue`` statements." +msgstr "``break`` 和 ``continue`` 语句。" + +#: ../../library/ast.rst:1126 +msgid "" +"``try`` blocks. All attributes are list of nodes to execute, except for " +"``handlers``, which is a list of :class:`ExceptHandler` nodes." +msgstr "" +"``try`` 代码块。 所有属性都是要执行的节点列表,除了 ``handlers``,它是一个 :class:`ExceptHandler` " +"节点列表。" + +#: ../../library/ast.rst:1172 +msgid "" +"A single ``except`` clause. ``type`` is the exception type it will match, " +"typically a :class:`Name` node (or ``None`` for a catch-all ``except:`` " +"clause). ``name`` is a raw string for the name to hold the exception, or " +"``None`` if the clause doesn't have ``as foo``. ``body`` is a list of nodes." +msgstr "" +"一个单独的 ``except`` 子句。 ``type`` 是它将匹配的异常,通常为一个 :class:`Name` 节点(或 ``None`` " +"表示捕获全部的 ``except:`` 子句)。 ``name`` 是一个用于存放异常的别名的原始字符串,或者如果子句没有 ``as foo`` 则为 " +"``None``。 ``body`` 为一个节点列表。" + +#: ../../library/ast.rst:1206 +msgid "" +"A ``with`` block. ``items`` is a list of :class:`withitem` nodes " +"representing the context managers, and ``body`` is the indented block inside" +" the context." +msgstr "" +"一个 ``with`` 代码块。 ``items`` 是一个代表上下文管理器的 :class:`withitem` 节点列表,而 ``body`` " +"是该上下文中的缩进代码块。" + +#: ../../library/ast.rst:1216 +msgid "" +"A single context manager in a ``with`` block. ``context_expr`` is the " +"context manager, often a :class:`Call` node. ``optional_vars`` is a " +":class:`Name`, :class:`Tuple` or :class:`List` for the ``as foo`` part, or " +"``None`` if that isn't used." +msgstr "" +"一个 ``with`` 代码块中单独的上下文管理器。 ``context_expr`` 为上下文管理器,通常为一个 :class:`Call` 节点。 " +"``optional_vars`` 为一个针对 ``as foo`` 部分的 :class:`Name`, :class:`Tuple` 或 " +":class:`List`,或者如果未使用别名则为 ``None``。" + +#: ../../library/ast.rst:1249 +msgid "Function and class definitions" +msgstr "函数与类定义" + +#: ../../library/ast.rst:1253 +msgid "A function definition." +msgstr "一个函数定义。" + +#: ../../library/ast.rst:1255 +msgid "``name`` is a raw string of the function name." +msgstr "``name`` 是函数名称的原始字符串。" + +#: ../../library/ast.rst:1256 +msgid "``args`` is an :class:`arguments` node." +msgstr "``args`` 是一个 :class:`arguments` 节点。" + +#: ../../library/ast.rst:1257 +msgid "``body`` is the list of nodes inside the function." +msgstr "``body`` 是函数内部的节点列表。" + +#: ../../library/ast.rst:1258 +msgid "" +"``decorator_list`` is the list of decorators to be applied, stored outermost" +" first (i.e. the first in the list will be applied last)." +msgstr "``decorator_list`` 是要应用的装饰器列表,最外层的最先保存(即列表中的第一项将最后被应用)。" + +#: ../../library/ast.rst:1260 +msgid "``returns`` is the return annotation." +msgstr "``returns`` 是返回标注。" + +#: ../../library/ast.rst:1269 +msgid "" +"``lambda`` is a minimal function definition that can be used inside an " +"expression. Unlike :class:`FunctionDef`, ``body`` holds a single node." +msgstr "" +"``lambda`` 是可在表达式内部使用的最小化函数定义。 不同于 :class:`FunctionDef`,``body`` 是保存一个单独节点。" + +#: ../../library/ast.rst:1293 +msgid "The arguments for a function." +msgstr "函数的参数。" + +#: ../../library/ast.rst:1295 +msgid "" +"``posonlyargs``, ``args`` and ``kwonlyargs`` are lists of :class:`arg` " +"nodes." +msgstr "``posonlyargs``, ``args`` 和 ``kwonlyargs`` 均为 :class:`arg` 节点的列表。" + +#: ../../library/ast.rst:1296 +msgid "" +"``vararg`` and ``kwarg`` are single :class:`arg` nodes, referring to the " +"``*args, **kwargs`` parameters." +msgstr "" +"``vararg`` 和 ``kwarg`` 均为单独的 :class:`arg` 节点,指向 ``*args, **kwargs`` 形参。" + +#: ../../library/ast.rst:1298 +msgid "" +"``kw_defaults`` is a list of default values for keyword-only arguments. If " +"one is ``None``, the corresponding argument is required." +msgstr "``kw_defaults`` 是一个由仅限关键字参数默认值组成的列表。 如果有一个为 ``None``,则对应的参数为必须的参数。" + +#: ../../library/ast.rst:1300 +msgid "" +"``defaults`` is a list of default values for arguments that can be passed " +"positionally. If there are fewer defaults, they correspond to the last n " +"arguments." +msgstr "``defaults`` 是一个由可按位置传入的参数的默认值组成的列表。 如果默认值个数少于参数个数,则它们将对应最后 n 个参数。" + +#: ../../library/ast.rst:1307 +msgid "" +"A single argument in a list. ``arg`` is a raw string of the argument name, " +"``annotation`` is its annotation, such as a :class:`Str` or :class:`Name` " +"node." +msgstr "" +"列表中的一个单独参数。 ``arg`` 为参数名称原始字符串,``annotation`` 为其标注,如一个 :class:`Str` 或 " +":class:`Name` 节点。" + +#: ../../library/ast.rst:1313 +msgid "" +"``type_comment`` is an optional string with the type annotation as a comment" +msgstr "``type_comment`` 是一个可选的将注释用作类型标注的字符串。" + +#: ../../library/ast.rst:1357 +msgid "A ``return`` statement." +msgstr "一条 ``return`` 语句。" + +#: ../../library/ast.rst:1372 +msgid "" +"A ``yield`` or ``yield from`` expression. Because these are expressions, " +"they must be wrapped in a :class:`Expr` node if the value sent back is not " +"used." +msgstr "" +"一个 ``yield`` 或 ``yield from`` 表达式。 因为这些属于表达式,所以如果发回的值未被使用则必须将它们包装在 " +":class:`Expr` 节点中。" + +#: ../../library/ast.rst:1397 +msgid "" +"``global`` and ``nonlocal`` statements. ``names`` is a list of raw strings." +msgstr "``global`` 和 ``nonlocal`` 语句。 ``names`` 为一个由原始字符串组成的列表。" + +#: ../../library/ast.rst:1424 +msgid "A class definition." +msgstr "一个类定义。" + +#: ../../library/ast.rst:1426 +msgid "``name`` is a raw string for the class name" +msgstr "``name`` 为类名称的原始字符串。" + +#: ../../library/ast.rst:1427 +msgid "``bases`` is a list of nodes for explicitly specified base classes." +msgstr "``bases`` 为一个由显式指明的基类节点组成的列表。" + +#: ../../library/ast.rst:1428 +msgid "" +"``keywords`` is a list of :class:`keyword` nodes, principally for " +"'metaclass'. Other keywords will be passed to the metaclass, as per " +"`PEP-3115 `_." +msgstr "" +"``keywords`` 为一个由 :class:`keyword` 节点组成的列表,主要用于‘元类’。 其他关键字将被传给这个元类,参见 " +"`PEP-3115 `_。" + +#: ../../library/ast.rst:1431 +msgid "" +"``starargs`` and ``kwargs`` are each a single node, as in a function call. " +"starargs will be expanded to join the list of base classes, and kwargs will " +"be passed to the metaclass." +msgstr "" +"``starargs`` 和 ``kwargs`` 各为一个单独的节点,与在函数调用中的一致。 starargs 将被展开加入到基类的列表中,而 " +"kwargs 将被传给元类。" + +#: ../../library/ast.rst:1434 +msgid "" +"``body`` is a list of nodes representing the code within the class " +"definition." +msgstr "``body`` 是一个由代表类定义内部代码的节点组成的列表。" + +#: ../../library/ast.rst:1436 +msgid "``decorator_list`` is a list of nodes, as in :class:`FunctionDef`." +msgstr "``decorator_list`` 是一个节点的列表,与 :class:`FunctionDef` 中的一致。" + +#: ../../library/ast.rst:1465 +msgid "Async and await" +msgstr "async 与 await" + +#: ../../library/ast.rst:1469 +msgid "" +"An ``async def`` function definition. Has the same fields as " +":class:`FunctionDef`." +msgstr "一个 ``async def`` 函数定义。 具有与 :class:`FunctionDef` 相同的字段。" + +#: ../../library/ast.rst:1475 +msgid "" +"An ``await`` expression. ``value`` is what it waits for. Only valid in the " +"body of an :class:`AsyncFunctionDef`." +msgstr "" +"一个 ``await`` 表达式。 ``value`` 是它所等待的值。 仅在 :class:`AsyncFunctionDef` 的函数体内可用。" + +#: ../../library/ast.rst:1508 +msgid "" +"``async for`` loops and ``async with`` context managers. They have the same " +"fields as :class:`For` and :class:`With`, respectively. Only valid in the " +"body of an :class:`AsyncFunctionDef`." +msgstr "" +"``async for`` 循环和 ``async with`` 上下文管理器。 它们分别具有与 :class:`For` 和 " +":class:`With` 相同的字段。 仅在 :class:`AsyncFunctionDef` 的函数体内可用。" + +#: ../../library/ast.rst:1513 +msgid "" +"When a string is parsed by :func:`ast.parse`, operator nodes (subclasses of " +":class:`ast.operator`, :class:`ast.unaryop`, :class:`ast.cmpop`, " +":class:`ast.boolop` and :class:`ast.expr_context`) on the returned tree will" +" be singletons. Changes to one will be reflected in all other occurrences of" +" the same value (e.g. :class:`ast.Add`)." +msgstr "" +"当一个字符串由 :func:`ast.parse` 来解析时,所返回的树中的运算符节点 (为 :class:`ast.operator`, " +":class:`ast.unaryop`, :class:`ast.cmpop`, :class:`ast.boolop` 和 " +":class:`ast.expr_context` 的子类) 将均为单例对象。 对其中某一个 (例如 :class:`ast.Add`) " +"的修改将反映到同一个值所出现的其他位置上。" + +#: ../../library/ast.rst:1521 +msgid ":mod:`ast` Helpers" +msgstr ":mod:`ast` 中的辅助函数" + +#: ../../library/ast.rst:1523 +msgid "" +"Apart from the node classes, the :mod:`ast` module defines these utility " +"functions and classes for traversing abstract syntax trees:" +msgstr "除了节点类, :mod:`ast` 模块里为遍历抽象语法树定义了这些工具函数和类:" + +#: ../../library/ast.rst:1528 +msgid "" +"Parse the source into an AST node. Equivalent to ``compile(source, " +"filename, mode, ast.PyCF_ONLY_AST)``." +msgstr "" +"把源码解析为AST节点。和 ``compile(source, filename, mode,ast.PyCF_ONLY_AST)`` 等价。" + +#: ../../library/ast.rst:1531 +msgid "" +"If ``type_comments=True`` is given, the parser is modified to check and " +"return type comments as specified by :pep:`484` and :pep:`526`. This is " +"equivalent to adding :data:`ast.PyCF_TYPE_COMMENTS` to the flags passed to " +":func:`compile()`. This will report syntax errors for misplaced type " +"comments. Without this flag, type comments will be ignored, and the " +"``type_comment`` field on selected AST nodes will always be ``None``. In " +"addition, the locations of ``# type: ignore`` comments will be returned as " +"the ``type_ignores`` attribute of :class:`Module` (otherwise it is always an" +" empty list)." +msgstr "" +"如果给出 ``type_comments=True``,解析器会被修改以检查并返回 :pep:`484` 和 :pep:`526` 所描述的类型注释。 " +"这相当于将 :data:`ast.PyCF_TYPE_COMMENTS` 添加到传给 :func:`compile()` 的旗标中。 " +"这将报告针对未在正确放置类型注释的语法错误。 没有这个旗标,类型注释将被忽略,而指定 AST 节点上的 ``type_comment`` 字段将总是为" +" ``None``。 此外,``# type: ignore`` 注释的位置将作为 :class:`Module` 的 ``type_ignores``" +" 属性被返回(在其他情况下则总是为空列表)。" + +#: ../../library/ast.rst:1541 +msgid "" +"In addition, if ``mode`` is ``'func_type'``, the input syntax is modified to" +" correspond to :pep:`484` \"signature type comments\", e.g. ``(str, int) -> " +"List[str]``." +msgstr "" +"并且,如果 ``mode`` 为 ``'func_type'``,则输入语法会进行与 :pep:`484` \"签名类型注释\" 对应的修改,例如 " +"``(str, int) -> List[str]``。" + +#: ../../library/ast.rst:1545 +msgid "" +"Also, setting ``feature_version`` to a tuple ``(major, minor)`` will attempt" +" to parse using that Python version's grammar. Currently ``major`` must " +"equal to ``3``. For example, setting ``feature_version=(3, 4)`` will allow " +"the use of ``async`` and ``await`` as variable names. The lowest supported " +"version is ``(3, 4)``; the highest is ``sys.version_info[0:2]``." +msgstr "" +"此外,将 ``feature_version`` 设为元组 ``(major, minor)`` 将会尝试使用该will attempt to " +"parse using that Python 版本的语法来进行解析。 目前 ``major`` 必须等于 ``3``。 例如,设置 " +"``feature_version=(3, 4)`` 将允许使用 ``async`` 和 ``await`` 作为变量名。 最低受支持版本为 ``(3," +" 4)``;最高则为 ``sys.version_info[0:2]``。" + +#: ../../library/ast.rst:1552 +msgid "" +"If source contains a null character ('\\0'), :exc:`ValueError` is raised." +msgstr "如果源包含一个空字符 ('\\0'),则会引发 :exc:`ValueError`。" + +#: ../../library/ast.rst:1555 +msgid "" +"Note that successfully parsing source code into an AST object doesn't " +"guarantee that the source code provided is valid Python code that can be " +"executed as the compilation step can raise further :exc:`SyntaxError` " +"exceptions. For instance, the source ``return 42`` generates a valid AST " +"node for a return statement, but it cannot be compiled alone (it needs to be" +" inside a function node)." +msgstr "" +"请注意成功将源代码解析为 AST 对象并不能保证该源代码提供了可被执行的有效 Python 代码,因为编译步骤还可能引发其他的 " +":exc:`SyntaxError` 异常。 例如,对于源代码 ``return 42`` 可以生成一条有效的 return 语句 AST " +"节点,但它不能被单独编译(它必须位于一个函数节点之内)。" + +#: ../../library/ast.rst:1562 +msgid "" +"In particular, :func:`ast.parse` won't do any scoping checks, which the " +"compilation step does." +msgstr "特别地,:func:`ast.parse` 不会执行任何作用域检查,这是由编译步骤来做的。" + +#: ../../library/ast.rst:1566 +msgid "" +"It is possible to crash the Python interpreter with a sufficiently " +"large/complex string due to stack depth limitations in Python's AST " +"compiler." +msgstr "足够复杂或是巨大的字符串可能导致Python解释器的崩溃,因为Python的AST编译器是有栈深限制的。" + +#: ../../library/ast.rst:1570 +msgid "Added ``type_comments``, ``mode='func_type'`` and ``feature_version``." +msgstr "增加了 ``type_comments``, ``mode='func_type'`` 和 ``feature_version``。" + +#: ../../library/ast.rst:1576 +msgid "" +"Unparse an :class:`ast.AST` object and generate a string with code that " +"would produce an equivalent :class:`ast.AST` object if parsed back with " +":func:`ast.parse`." +msgstr "" +"反向解析一个 :class:`ast.AST` 对象并生成一个包含当再次使用 :func:`ast.parse` 解析时将产生同样的 " +":class:`ast.AST` 对象的代码的字符串。" + +#: ../../library/ast.rst:1581 +msgid "" +"The produced code string will not necessarily be equal to the original code " +"that generated the :class:`ast.AST` object (without any compiler " +"optimizations, such as constant tuples/frozensets)." +msgstr "" +"所产生的代码字符串将不一定与生成 :class:`ast.AST` 对象的原始代码完全一致(不带任何编译器优化,例如常量元组/冻结集合等)。" + +#: ../../library/ast.rst:1586 +msgid "" +"Trying to unparse a highly complex expression would result with " +":exc:`RecursionError`." +msgstr "尝试反向解析一个高度复杂的表达式可能会导致 :exc:`RecursionError`。" + +#: ../../library/ast.rst:1594 +msgid "" +"Evaluate an expression node or a string containing only a Python literal or " +"container display. The string or node provided may only consist of the " +"following Python literal structures: strings, bytes, numbers, tuples, lists," +" dicts, sets, booleans, and ``None``." +msgstr "" + +#: ../../library/ast.rst:1599 +msgid "" +"This can be used for evaluating strings containing Python values without the" +" need to parse the values oneself. It is not capable of evaluating " +"arbitrarily complex expressions, for example involving operators or " +"indexing." +msgstr "" +"这可被用于对包含 Python 值的字符串进行求值而不必解析这些值本身。 它不能对任意的复杂表达式进行求值,例如涉及运算符或索引操作的表达式。" + +#: ../../library/ast.rst:1604 +msgid "" +"This function had been documented as \"safe\" in the past without defining " +"what that meant. That was misleading. This is specifically designed not to " +"execute Python code, unlike the more general :func:`eval`. There is no " +"namespace, no name lookups, or ability to call out. But it is not free from " +"attack: A relatively small input can lead to memory exhaustion or to C stack" +" exhaustion, crashing the process. There is also the possibility for " +"excessive CPU consumption denial of service on some inputs. Calling it on " +"untrusted data is thus not recommended." +msgstr "" +"此函数过去曾被描述为“安全”但并未定义其含义。 这是存在误导性的。 此函数被专门设计为不执行 Python 代码,这与更通用的 :func:`eval`" +" 不同。 它没有命名空间、没有名称查找或执行外部调用的能力。 但是它并不能完全避免攻击:一个相对较小的输入有可能导致内存耗尽或 C " +"栈耗尽,使得进程崩溃。 还可能在某些输入上出现过度消耗 CPU 的拒绝服务问题。 因此不建议在未被信任的数据上调用它。" + +#: ../../library/ast.rst:1614 +msgid "" +"It is possible to crash the Python interpreter due to stack depth " +"limitations in Python's AST compiler." +msgstr "有可能由于 Python 的 AST 编译器中的栈深度限制而导致 Python 解释器的崩溃。" + +#: ../../library/ast.rst:1617 +msgid "Now allows bytes and set literals." +msgstr "目前支持字节和集合。" + +#: ../../library/ast.rst:1620 +msgid "Now supports creating empty sets with ``'set()'``." +msgstr "现在支持通过 ``'set()'`` 创建空集合。" + +#: ../../library/ast.rst:1626 +msgid "" +"Return the docstring of the given *node* (which must be a " +":class:`FunctionDef`, :class:`AsyncFunctionDef`, :class:`ClassDef`, or " +":class:`Module` node), or ``None`` if it has no docstring. If *clean* is " +"true, clean up the docstring's indentation with :func:`inspect.cleandoc`." +msgstr "" +"返回给定 *node* (必须为 :class:`FunctionDef`, :class:`AsyncFunctionDef`, " +":class:`ClassDef` 或 :class:`Module` 节点) 的文档字符串,或者如果没有文档字符串则返回 ``None``。 如果 " +"*clean* 为真值,则通过 :func:`inspect.cleandoc` 清除文档字符串的缩进。" + +#: ../../library/ast.rst:1632 +msgid ":class:`AsyncFunctionDef` is now supported." +msgstr "目前支持 :class:`AsyncFunctionDef`" + +#: ../../library/ast.rst:1638 +msgid "" +"Get source code segment of the *source* that generated *node*. If some " +"location information (:attr:`lineno`, :attr:`end_lineno`, " +":attr:`col_offset`, or :attr:`end_col_offset`) is missing, return ``None``." +msgstr "" +"获取生成 *node* 的 *source* 的源代码段。 如果丢失了某些位置信息 (:attr:`lineno`, " +":attr:`end_lineno`, :attr:`col_offset` 或 :attr:`end_col_offset`),则返回 " +"``None``。" + +#: ../../library/ast.rst:1642 +msgid "" +"If *padded* is ``True``, the first line of a multi-line statement will be " +"padded with spaces to match its original position." +msgstr "如果 *padded* 为 ``True``,则多行语句的第一行将以与其初始位置相匹配的空格填充。" + +#: ../../library/ast.rst:1650 +msgid "" +"When you compile a node tree with :func:`compile`, the compiler expects " +":attr:`lineno` and :attr:`col_offset` attributes for every node that " +"supports them. This is rather tedious to fill in for generated nodes, so " +"this helper adds these attributes recursively where not already set, by " +"setting them to the values of the parent node. It works recursively " +"starting at *node*." +msgstr "" +"当你通过 :func:`compile` 来编译节点树时,编译器会准备接受每个支持 :attr:`lineno` 和 " +":attr:`col_offset` 属性的节点的相应信息。 " +"对已生成节点来说这是相当繁琐的,因此这个辅助工具会递归地为尚未设置这些属性的节点添加它们,具体做法是将其设为父节点的对应值。 它将从 *node* " +"开始递归地执行。" + +#: ../../library/ast.rst:1659 +msgid "" +"Increment the line number and end line number of each node in the tree " +"starting at *node* by *n*. This is useful to \"move code\" to a different " +"location in a file." +msgstr "从 *node* 开始按 *n* 递增节点树中每个节点的行号和结束行号。 这在“移动代码”到文件中的不同位置时很有用处。" + +#: ../../library/ast.rst:1666 +msgid "" +"Copy source location (:attr:`lineno`, :attr:`col_offset`, " +":attr:`end_lineno`, and :attr:`end_col_offset`) from *old_node* to " +"*new_node* if possible, and return *new_node*." +msgstr "" +"在可能的情况下将源位置 (:attr:`lineno`, :attr:`col_offset`, :attr:`end_lineno` 和 " +":attr:`end_col_offset`) 从 *old_node* 拷贝到 *new_node*,并返回 *new_node*。" + +#: ../../library/ast.rst:1673 +msgid "" +"Yield a tuple of ``(fieldname, value)`` for each field in ``node._fields`` " +"that is present on *node*." +msgstr "" +"针对于 *node* 上在 ``node._fields`` 中出现的每个字段产生一个 ``(fieldname, value)`` 元组。" + +#: ../../library/ast.rst:1679 +msgid "" +"Yield all direct child nodes of *node*, that is, all fields that are nodes " +"and all items of fields that are lists of nodes." +msgstr "产生 *node* 所有的直接子节点,也就是说,所有为节点的字段所有为节点列表的字段条目。" + +#: ../../library/ast.rst:1685 +msgid "" +"Recursively yield all descendant nodes in the tree starting at *node* " +"(including *node* itself), in no specified order. This is useful if you " +"only want to modify nodes in place and don't care about the context." +msgstr "" +"递归地产生节点树中从 *node* 开始(包括 *node* 本身)的所有下级节点,没有确定的排序方式。 " +"这在你仅想要原地修改节点而不关心具体上下文时很有用处。" + +#: ../../library/ast.rst:1692 +msgid "" +"A node visitor base class that walks the abstract syntax tree and calls a " +"visitor function for every node found. This function may return a value " +"which is forwarded by the :meth:`visit` method." +msgstr "" +"一个遍历抽象语法树并针对所找到的每个节点调用访问器函数的节点访问器基类。 该函数可能会返回一个由 :meth:`visit` 方法所提供的值。" + +#: ../../library/ast.rst:1696 +msgid "" +"This class is meant to be subclassed, with the subclass adding visitor " +"methods." +msgstr "这个类应当被子类化,并由子类来添加访问器方法。" + +#: ../../library/ast.rst:1701 +msgid "" +"Visit a node. The default implementation calls the method called " +":samp:`self.visit_{classname}` where *classname* is the name of the node " +"class, or :meth:`generic_visit` if that method doesn't exist." +msgstr "" +"访问一个节点。 默认实现会调用名为 :samp:`self.visit_{classname}` 的方法其中 *classname* " +"为节点类的名称,或者如果该方法不存在则为 :meth:`generic_visit`。" + +#: ../../library/ast.rst:1707 +msgid "This visitor calls :meth:`visit` on all children of the node." +msgstr "该访问器会在节点的所有子节点上调用 :meth:`visit`。" + +#: ../../library/ast.rst:1709 +msgid "" +"Note that child nodes of nodes that have a custom visitor method won't be " +"visited unless the visitor calls :meth:`generic_visit` or visits them " +"itself." +msgstr "请注意所有包含自定义访问器方法的节点的子节点将不会被访问除非访问器调用了 :meth:`generic_visit` 或是自行访问它们。" + +#: ../../library/ast.rst:1713 +msgid "" +"Don't use the :class:`NodeVisitor` if you want to apply changes to nodes " +"during traversal. For this a special visitor exists " +"(:class:`NodeTransformer`) that allows modifications." +msgstr "" +"如果你想在遍历期间应用对节点的修改则请不要使用 :class:`NodeVisitor`。 对此目的可使用一个允许修改的特殊访问器 " +"(:class:`NodeTransformer`)。" + +#: ../../library/ast.rst:1719 +msgid "" +"Methods :meth:`visit_Num`, :meth:`visit_Str`, :meth:`visit_Bytes`, " +":meth:`visit_NameConstant` and :meth:`visit_Ellipsis` are deprecated now and" +" will not be called in future Python versions. Add the " +":meth:`visit_Constant` method to handle all constant nodes." +msgstr "" +":meth:`visit_Num`, :meth:`visit_Str`, :meth:`visit_Bytes`, " +":meth:`visit_NameConstant` 和 :meth:`visit_Ellipsis` 等方法现在已被弃用且在未来的 Python " +"版本中将不会再被调用。 请添加 :meth:`visit_Constant` 方法来处理所有常量节点。" + +#: ../../library/ast.rst:1727 +msgid "" +"A :class:`NodeVisitor` subclass that walks the abstract syntax tree and " +"allows modification of nodes." +msgstr "子类 :class:`NodeVisitor` 用于遍历抽象语法树,并允许修改节点。" + +#: ../../library/ast.rst:1730 +msgid "" +"The :class:`NodeTransformer` will walk the AST and use the return value of " +"the visitor methods to replace or remove the old node. If the return value " +"of the visitor method is ``None``, the node will be removed from its " +"location, otherwise it is replaced with the return value. The return value " +"may be the original node in which case no replacement takes place." +msgstr "" +":class:`NodeTransformer` 将遍历抽象语法树并使用visitor方法的返回值去替换或移除旧节点。如果visitor方法的返回值为 " +"``None`` , 则该节点将从其位置移除,否则将替换为返回值。当返回值是原始节点时,无需替换。" + +#: ../../library/ast.rst:1736 +msgid "" +"Here is an example transformer that rewrites all occurrences of name lookups" +" (``foo``) to ``data['foo']``::" +msgstr "如下是一个转换器示例,它将所有出现的名称 (``foo``) 重写为 ``data['foo']``::" + +#: ../../library/ast.rst:1748 +msgid "" +"Keep in mind that if the node you're operating on has child nodes you must " +"either transform the child nodes yourself or call the :meth:`generic_visit` " +"method for the node first." +msgstr "请记住,如果您正在操作的节点具有子节点,则必须先转换其子节点或为该节点调用 :meth:`generic_visit` 方法。" + +#: ../../library/ast.rst:1752 +msgid "" +"For nodes that were part of a collection of statements (that applies to all " +"statement nodes), the visitor may also return a list of nodes rather than " +"just a single node." +msgstr "对于属于语句集合(适用于所有语句节点)的节点,访问者还可以返回节点列表而不仅仅是单个节点。" + +#: ../../library/ast.rst:1756 +msgid "" +"If :class:`NodeTransformer` introduces new nodes (that weren't part of " +"original tree) without giving them location information (such as " +":attr:`lineno`), :func:`fix_missing_locations` should be called with the new" +" sub-tree to recalculate the location information::" +msgstr "" +"如果 :class:`NodeTransformer` 引入了新的(不属于原节点树一部分的)节点而没有给出它们的位置信息(如 " +":attr:`lineno` 等),则应当调用 :func:`fix_missing_locations` 并传入新的子节点树来重新计算位置信息::" + +#: ../../library/ast.rst:1764 +msgid "Usually you use the transformer like this::" +msgstr "通常你可以像这样使用转换器::" + +#: ../../library/ast.rst:1771 +msgid "" +"Return a formatted dump of the tree in *node*. This is mainly useful for " +"debugging purposes. If *annotate_fields* is true (by default), the returned" +" string will show the names and the values for fields. If *annotate_fields* " +"is false, the result string will be more compact by omitting unambiguous " +"field names. Attributes such as line numbers and column offsets are not " +"dumped by default. If this is wanted, *include_attributes* can be set to " +"true." +msgstr "" +"返回 *node* 中树结构的格式化转储。 这主要适用于调试目的。 如果 *annotate_fields* " +"为真值(默认),返回的字符串将显示字段的名称和值。 如果 *annotate_fields* 为假值,结果字符串将通过省略无歧义的字段名称变得更为紧凑。" +" 默认情况下不会转储行号和列偏移等属性。 如果需要,可将 *include_attributes* 设为真值。" + +#: ../../library/ast.rst:1779 +msgid "" +"If *indent* is a non-negative integer or string, then the tree will be " +"pretty-printed with that indent level. An indent level of 0, negative, or " +"``\"\"`` will only insert newlines. ``None`` (the default) selects the " +"single line representation. Using a positive integer indent indents that " +"many spaces per level. If *indent* is a string (such as ``\"\\t\"``), that " +"string is used to indent each level." +msgstr "" +"如果 *indent* 是一个非负整数或者字符串,那么节点树将被美化输出为指定的缩进级别。 如果缩进级别为 0、负数或者 ``\"\"`` " +"则将只插入换行符。 ``None`` (默认) 将选择最紧凑的表示形式。 使用一个正整数将让每个级别缩进相应数量的空格。 如果 *indent* " +"是一个字符串 (如 ``\"\\t\"``),该字符串会被用于缩进每个级别。" + +#: ../../library/ast.rst:1786 +msgid "Added the *indent* option." +msgstr "添加了 *indent* 选项。" + +#: ../../library/ast.rst:1793 +msgid "Compiler Flags" +msgstr "编译器旗标" + +#: ../../library/ast.rst:1795 +msgid "" +"The following flags may be passed to :func:`compile` in order to change " +"effects on the compilation of a program:" +msgstr "下列旗标可被传给 :func:`compile` 用来改变程序编译的效果:" + +#: ../../library/ast.rst:1800 +msgid "" +"Enables support for top-level ``await``, ``async for``, ``async with`` and " +"async comprehensions." +msgstr "启用对最高层级 ``await``, ``async for``, ``async with`` 以及异步推导式的支持。" + +#: ../../library/ast.rst:1807 +msgid "" +"Generates and returns an abstract syntax tree instead of returning a " +"compiled code object." +msgstr "生成并返回一个抽象语法树而不是返回一个已编译的代码对象。" + +#: ../../library/ast.rst:1812 +msgid "" +"Enables support for :pep:`484` and :pep:`526` style type comments (``# type:" +" ``, ``# type: ignore ``)." +msgstr "" +"启用对 :pep:`484` 和 :pep:`526` 风格的类型注释的支持 (``# type: ``, ``# type: ignore" +" ``)。" + +#: ../../library/ast.rst:1821 +msgid "Command-Line Usage" +msgstr "命令行用法" + +#: ../../library/ast.rst:1825 +msgid "" +"The :mod:`ast` module can be executed as a script from the command line. It " +"is as simple as:" +msgstr ":mod:`ast` 模块可以在命令行下作为脚本来执行。 具体做法非常简单:" + +#: ../../library/ast.rst:1832 +msgid "The following options are accepted:" +msgstr "可以接受以下选项:" + +#: ../../library/ast.rst:1838 +msgid "Show the help message and exit." +msgstr "显示帮助信息并退出。" + +#: ../../library/ast.rst:1843 +msgid "" +"Specify what kind of code must be compiled, like the *mode* argument in " +":func:`parse`." +msgstr "指明哪种代码必须被编译,相当于 :func:`parse` 中的 *mode* 参数。" + +#: ../../library/ast.rst:1848 +msgid "Don't parse type comments." +msgstr "不要解析类型注释。" + +#: ../../library/ast.rst:1852 +msgid "Include attributes such as line numbers and column offsets." +msgstr "包括属性如行号和列偏移。" + +#: ../../library/ast.rst:1857 +msgid "Indentation of nodes in AST (number of spaces)." +msgstr "AST 中节点的缩进(空格数)。" + +#: ../../library/ast.rst:1859 +msgid "" +"If :file:`infile` is specified its contents are parsed to AST and dumped to " +"stdout. Otherwise, the content is read from stdin." +msgstr "如果指定了 :file:`infile` 则其内容将被解析为 AST 并转储至 stdout。 在其他情况下,将从 stdin 读取内容。" + +#: ../../library/ast.rst:1865 +msgid "" +"`Green Tree Snakes `_, an external " +"documentation resource, has good details on working with Python ASTs." +msgstr "" +"`Green Tree Snakes `_,一个外部文档资源,包含处理" +" Python AST 的完整细节。" + +#: ../../library/ast.rst:1868 +msgid "" +"`ASTTokens `_ " +"annotates Python ASTs with the positions of tokens and text in the source " +"code that generated them. This is helpful for tools that make source code " +"transformations." +msgstr "" +"`ASTTokens `_ 会为" +" Python AST 标注生成它们的源代码中的形符和文本的位置。 这对执行源代码转换的工具很有帮助。" + +#: ../../library/ast.rst:1873 +msgid "" +"`leoAst.py `_ unifies the " +"token-based and parse-tree-based views of python programs by inserting two-" +"way links between tokens and ast nodes." +msgstr "" +"`leoAst.py `_ 通过在形符和 ast " +"节点之间插入双向链接统一了 Python 程序基于形符的和基于解析树的视图。" + +#: ../../library/ast.rst:1877 +msgid "" +"`LibCST `_ parses code as a Concrete Syntax " +"Tree that looks like an ast tree and keeps all formatting details. It's " +"useful for building automated refactoring (codemod) applications and " +"linters." +msgstr "" +"`LibCST `_ 将代码解析为一个实体语法树(Concrete Syntax " +"Tree),它看起来像是 ast 树而又保留了所有格式化细节。 它对构建自动化重构(codemod)应用和代码质量检查工具很有用处。" + +#: ../../library/ast.rst:1882 +msgid "" +"`Parso `_ is a Python parser that supports " +"error recovery and round-trip parsing for different Python versions (in " +"multiple Python versions). Parso is also able to list multiple syntax errors" +" in your python file." +msgstr "" +"`Parso `_ 是一个支持错误恢复和不同 Python 版本的(在多个 Python " +"版本中)往返解析的 Python 解析器。 Parso 还能列出你的 Python 文件中的许多语法错误。" diff --git a/library/asynchat.po b/library/asynchat.po new file mode 100644 index 000000000..a2ca88deb --- /dev/null +++ b/library/asynchat.po @@ -0,0 +1,276 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) 2001-2022, Python Software Foundation +# This file is distributed under the same license as the Python package. +# FIRST AUTHOR , YEAR. +# +# Translators: +# Alpha Du , 2019 +# ppcfish , 2019 +# Freesand Leo , 2022 +# +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: Python 3.9\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2022-11-04 14:34+0000\n" +"PO-Revision-Date: 2017-02-16 17:48+0000\n" +"Last-Translator: Freesand Leo , 2022\n" +"Language-Team: Chinese (China) (https://www.transifex.com/python-doc/teams/5390/zh_CN/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: zh_CN\n" +"Plural-Forms: nplurals=1; plural=0;\n" + +#: ../../library/asynchat.rst:2 +msgid ":mod:`asynchat` --- Asynchronous socket command/response handler" +msgstr ":mod:`asynchat` --- 异步套接字指令/响应处理程序" + +#: ../../library/asynchat.rst:11 +msgid "**Source code:** :source:`Lib/asynchat.py`" +msgstr "**源代码:** :source:`Lib/asynchat.py`" + +#: ../../library/asynchat.rst:13 +msgid "" +":mod:`asynchat` will be removed in Python 3.12 (see :pep:`PEP 594 " +"<594#asynchat>` for details). Please use :mod:`asyncio` instead." +msgstr "" +":mod:`asynchat` 将在 Python 3.12 版被移除(请参阅 :pep:`PEP 594 <594#asynchat>` 了解详情)。" +" 请改用 :mod:`asyncio`。" + +#: ../../library/asynchat.rst:22 +msgid "" +"This module exists for backwards compatibility only. For new code we " +"recommend using :mod:`asyncio`." +msgstr "该模块仅为提供向后兼容。我们推荐在新代码中使用 :mod:`asyncio` 。" + +#: ../../library/asynchat.rst:25 +msgid "" +"This module builds on the :mod:`asyncore` infrastructure, simplifying " +"asynchronous clients and servers and making it easier to handle protocols " +"whose elements are terminated by arbitrary strings, or are of variable " +"length. :mod:`asynchat` defines the abstract class :class:`async_chat` that " +"you subclass, providing implementations of the :meth:`collect_incoming_data`" +" and :meth:`found_terminator` methods. It uses the same asynchronous loop as" +" :mod:`asyncore`, and the two types of channel, :class:`asyncore.dispatcher`" +" and :class:`asynchat.async_chat`, can freely be mixed in the channel map. " +"Typically an :class:`asyncore.dispatcher` server channel generates new " +":class:`asynchat.async_chat` channel objects as it receives incoming " +"connection requests." +msgstr "" +"此模块在 :mod:`asyncore` 框架之上构建,简化了异步客户端和服务器并使得处理元素为以任意字符串结束或者为可变长度的协议更加容易。 " +":mod:`asynchat` 定义了一个可以由你来子类化的抽象类 :class:`async_chat`,提供了 " +":meth:`collect_incoming_data` 和 :meth:`found_terminator` 等方法的实现。 它使用与 " +":mod:`asyncore` 相同的异步循环,并且可以在通道映射中自由地混合 :class:`asyncore.dispatcher` 和 " +":class:`asynchat.async_chat` 这两种类型的通道。 一般来说 :class:`asyncore.dispatcher` " +"服务器通道在接收到传入的连接请求时会生成新的 :class:`asynchat.async_chat` 通道对象。" + +#: ../../library/asynchat.rst:40 +msgid "" +"This class is an abstract subclass of :class:`asyncore.dispatcher`. To make " +"practical use of the code you must subclass :class:`async_chat`, providing " +"meaningful :meth:`collect_incoming_data` and :meth:`found_terminator` " +"methods. The :class:`asyncore.dispatcher` methods can be used, although not " +"all make sense in a message/response context." +msgstr "" +"这个类是 :class:`asyncore.dispatcher` 的抽象子类。 对于实际使用的代码你必须子类化 " +":class:`async_chat`,提供有意义的 :meth:`collect_incoming_data` 和 " +":meth:`found_terminator` 方法。 :class:`asyncore.dispatcher` " +"的方法也可以被使用,但它们在消息/响应上下文中并不是全都有意义。" + +#: ../../library/asynchat.rst:47 +msgid "" +"Like :class:`asyncore.dispatcher`, :class:`async_chat` defines a set of " +"events that are generated by an analysis of socket conditions after a " +":c:func:`select` call. Once the polling loop has been started the " +":class:`async_chat` object's methods are called by the event-processing " +"framework with no action on the part of the programmer." +msgstr "" +"与 :class:`asyncore.dispatcher` 类似,:class:`async_chat` 也定义了一组通过对 " +":c:func:`select` 调用之后的套接字条件进行分析所生成的事件。 一旦启动轮询循环 :class:`async_chat` " +"对象的方法就会被事件处理框架调用而无须程序员方面做任何操作。" + +#: ../../library/asynchat.rst:53 +msgid "" +"Two class attributes can be modified, to improve performance, or possibly " +"even to conserve memory." +msgstr "两个可被修改的类属性,用以提升性能,甚至也可能会节省内存。" + +#: ../../library/asynchat.rst:59 +msgid "The asynchronous input buffer size (default ``4096``)." +msgstr "异步输入缓冲区大小 (默认为 ``4096``)。" + +#: ../../library/asynchat.rst:64 +msgid "The asynchronous output buffer size (default ``4096``)." +msgstr "异步输出缓冲区大小 (默认为 ``4096``)。" + +#: ../../library/asynchat.rst:66 +msgid "" +"Unlike :class:`asyncore.dispatcher`, :class:`async_chat` allows you to " +"define a :abbr:`FIFO (first-in, first-out)` queue of *producers*. A producer" +" need have only one method, :meth:`more`, which should return data to be " +"transmitted on the channel. The producer indicates exhaustion (*i.e.* that " +"it contains no more data) by having its :meth:`more` method return the empty" +" bytes object. At this point the :class:`async_chat` object removes the " +"producer from the queue and starts using the next producer, if any. When the" +" producer queue is empty the :meth:`handle_write` method does nothing. You " +"use the channel object's :meth:`set_terminator` method to describe how to " +"recognize the end of, or an important breakpoint in, an incoming " +"transmission from the remote endpoint." +msgstr "" +"与 :class:`asyncore.dispatcher` 不同,:class:`async_chat` 允许你定义一个 :abbr:`FIFO " +"(先进先出)` 队列 *producers*。 其中的生产者只需要一个方法 :meth:`more`,该方法应当返回要在通道上传输的数据。 " +"生产者通过让其 :meth:`more` 方法返回空字节串对象来表明其处于耗尽状态 (*意即* 它已不再包含数据)。 此时 " +":class:`async_chat` 对象会将该生产者从队列中移除并开始使用下一个生产者,如果有下一个的话。 当生产者队列为空时 " +":meth:`handle_write` 方法将不执行任何操作。 你要使用通道对象的 :meth:`set_terminator` " +"方法来描述如何识别来自远程端点的入站传输的结束或是重要的中断点。" + +#: ../../library/asynchat.rst:79 +msgid "" +"To build a functioning :class:`async_chat` subclass your input methods " +":meth:`collect_incoming_data` and :meth:`found_terminator` must handle the " +"data that the channel receives asynchronously. The methods are described " +"below." +msgstr "" +"要构建一个可用的 :class:`async_chat` 子类,你的输入方法 :meth:`collect_incoming_data` 和 " +":meth:`found_terminator` 必须要处理通道异步接收的数据。 这些参数的描述见下文。" + +#: ../../library/asynchat.rst:87 +msgid "" +"Pushes a ``None`` on to the producer queue. When this producer is popped off" +" the queue it causes the channel to be closed." +msgstr "将 ``None`` 推入生产者队列。 当此生产者被弹出队列时它将导致通道被关闭。" + +#: ../../library/asynchat.rst:93 +msgid "" +"Called with *data* holding an arbitrary amount of received data. The " +"default method, which must be overridden, raises a " +":exc:`NotImplementedError` exception." +msgstr "" +"调用时附带 *data*,其中包含任意数量的已接收数据。 必须被重载的默认方法将引发一个 :exc:`NotImplementedError` 异常。" + +#: ../../library/asynchat.rst:100 +msgid "" +"In emergencies this method will discard any data held in the input and/or " +"output buffers and the producer queue." +msgstr "在紧急情况下此方法将丢弃输入和/或输出缓冲区以及生产者队列中的任何数据。" + +#: ../../library/asynchat.rst:106 +msgid "" +"Called when the incoming data stream matches the termination condition set " +"by :meth:`set_terminator`. The default method, which must be overridden, " +"raises a :exc:`NotImplementedError` exception. The buffered input data " +"should be available via an instance attribute." +msgstr "" +"当输入数据流能匹配 :meth:`set_terminator` 所设定的终结条件时会被调用。 必须被重载的默认方法将引发一个 " +":exc:`NotImplementedError` 异常。 被缓冲的输入数据应当可以通过实例属性来获取。" + +#: ../../library/asynchat.rst:114 +msgid "Returns the current terminator for the channel." +msgstr "返回通道的当前终结器。" + +#: ../../library/asynchat.rst:119 +msgid "" +"Pushes data on to the channel's queue to ensure its transmission. This is " +"all you need to do to have the channel write the data out to the network, " +"although it is possible to use your own producers in more complex schemes to" +" implement encryption and chunking, for example." +msgstr "" +"将数据推入通道的队列以确保其被传输。 " +"要让通道将数据写到网络中你只需要这样做就足够了,虽然以更复杂的方式使用你自己的生产者也是有可能的,例如为了实现加密和分块。" + +#: ../../library/asynchat.rst:127 +msgid "" +"Takes a producer object and adds it to the producer queue associated with " +"the channel. When all currently-pushed producers have been exhausted the " +"channel will consume this producer's data by calling its :meth:`more` method" +" and send the data to the remote endpoint." +msgstr "" +"获取一个生产者对象并将其加入到与通道相关联的生产者队列中。 当所有当前已推入的生产者都已被耗尽时通道将通过调用其 :meth:`more` " +"方法来耗用此生产者的数据并将数据发送至远程端点。" + +#: ../../library/asynchat.rst:135 +msgid "" +"Sets the terminating condition to be recognized on the channel. ``term`` " +"may be any of three types of value, corresponding to three different ways to" +" handle incoming protocol data." +msgstr "设置可在通道上被识别的终结条件。 ``term`` 可以是三种类型值中的任意一种 ,对应于处理入站协议数据的三种不同方式。" + +#: ../../library/asynchat.rst:140 +msgid "term" +msgstr "term" + +#: ../../library/asynchat.rst:140 +msgid "Description" +msgstr "描述" + +#: ../../library/asynchat.rst:142 +msgid "*string*" +msgstr "*string*" + +#: ../../library/asynchat.rst:142 +msgid "" +"Will call :meth:`found_terminator` when the string is found in the input " +"stream" +msgstr "当在输入流中发现该字符串时将会调用 :meth:`found_terminator`" + +#: ../../library/asynchat.rst:145 +msgid "*integer*" +msgstr "*integer*" + +#: ../../library/asynchat.rst:145 +msgid "" +"Will call :meth:`found_terminator` when the indicated number of characters " +"have been received" +msgstr "当接收到指定数量的字符时将会调用 :meth:`found_terminator`" + +#: ../../library/asynchat.rst:149 +msgid "``None``" +msgstr "``None``" + +#: ../../library/asynchat.rst:149 +msgid "The channel continues to collect data forever" +msgstr "通道会不断地持续收集数据" + +#: ../../library/asynchat.rst:153 +msgid "" +"Note that any data following the terminator will be available for reading by" +" the channel after :meth:`found_terminator` is called." +msgstr "请注意终结器之后的任何数据将可在 :meth:`found_terminator` 被调用后由通道来读取。" + +#: ../../library/asynchat.rst:160 +msgid "asynchat Example" +msgstr "asynchat 示例" + +#: ../../library/asynchat.rst:162 +msgid "" +"The following partial example shows how HTTP requests can be read with " +":class:`async_chat`. A web server might create an " +":class:`http_request_handler` object for each incoming client connection. " +"Notice that initially the channel terminator is set to match the blank line " +"at the end of the HTTP headers, and a flag indicates that the headers are " +"being read." +msgstr "" +"下面的例子片段显示了如何通过 :class:`async_chat` 来读取 HTTP 请求。 Web 服务器可以为每个入站的客户端连接创建 " +":class:`http_request_handler` 对象。 请注意在初始时通道终结器会被设置为匹配 HTTP " +"标头末尾的空行,并且会用一个旗标来指明标头正在被读取。" + +#: ../../library/asynchat.rst:169 +msgid "" +"Once the headers have been read, if the request is of type POST (indicating " +"that further data are present in the input stream) then the ``Content-" +"Length:`` header is used to set a numeric terminator to read the right " +"amount of data from the channel." +msgstr "" +"一旦完成了标头的读取,如果请求类型为 POST (表明输入流中存在更多的数据) 则会使用 ``Content-Length:`` " +"标头来设置一个数值终结器以从通道读取适当数量的数据。" + +#: ../../library/asynchat.rst:174 +msgid "" +"The :meth:`handle_request` method is called once all relevant input has been" +" marshalled, after setting the channel terminator to ``None`` to ensure that" +" any extraneous data sent by the web client are ignored. ::" +msgstr "" +"一旦完成了对所有相关输入的处理,将会在设置通道终结器为 ``None`` 以确保忽略掉 Web 客户端所发送的任何无关数据之后调用 " +":meth:`handle_request` 方法。 ::" diff --git a/library/asyncio-api-index.po b/library/asyncio-api-index.po new file mode 100644 index 000000000..f92c5fe5d --- /dev/null +++ b/library/asyncio-api-index.po @@ -0,0 +1,417 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) 2001-2022, Python Software Foundation +# This file is distributed under the same license as the Python package. +# FIRST AUTHOR , YEAR. +# +# Translators: +# Fred , 2018 +# ww song , 2018 +# walkinrain , 2019 +# Freesand Leo , 2020 +# +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: Python 3.9\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2022-11-04 14:34+0000\n" +"PO-Revision-Date: 2018-09-18 00:23+0000\n" +"Last-Translator: Freesand Leo , 2020\n" +"Language-Team: Chinese (China) (https://www.transifex.com/python-doc/teams/5390/zh_CN/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: zh_CN\n" +"Plural-Forms: nplurals=1; plural=0;\n" + +#: ../../library/asyncio-api-index.rst:6 +msgid "High-level API Index" +msgstr "高层级 API 索引" + +#: ../../library/asyncio-api-index.rst:8 +msgid "This page lists all high-level async/await enabled asyncio APIs." +msgstr "这个页面列举了所有能用于 async/wait 的高层级asyncio API 集。" + +#: ../../library/asyncio-api-index.rst:12 +msgid "Tasks" +msgstr "Tasks" + +#: ../../library/asyncio-api-index.rst:14 +msgid "" +"Utilities to run asyncio programs, create Tasks, and await on multiple " +"things with timeouts." +msgstr "运行异步程序,创建Task对象,等待多件事运行超时的公共集。" + +#: ../../library/asyncio-api-index.rst:21 +msgid ":func:`run`" +msgstr ":func:`run`" + +#: ../../library/asyncio-api-index.rst:22 +msgid "Create event loop, run a coroutine, close the loop." +msgstr "创建事件循环,运行一个协程,关闭事件循环。" + +#: ../../library/asyncio-api-index.rst:24 +msgid ":func:`create_task`" +msgstr ":func:`create_task`" + +#: ../../library/asyncio-api-index.rst:25 +msgid "Start an asyncio Task." +msgstr "启动一个asyncio的Task对象。" + +#: ../../library/asyncio-api-index.rst:27 +msgid "``await`` :func:`sleep`" +msgstr "``await`` :func:`sleep`" + +#: ../../library/asyncio-api-index.rst:28 +msgid "Sleep for a number of seconds." +msgstr "休眠几秒。" + +#: ../../library/asyncio-api-index.rst:30 +msgid "``await`` :func:`gather`" +msgstr "``await`` :func:`gather`" + +#: ../../library/asyncio-api-index.rst:31 +msgid "Schedule and wait for things concurrently." +msgstr "并发执行所有事件的调度和等待。" + +#: ../../library/asyncio-api-index.rst:33 +msgid "``await`` :func:`wait_for`" +msgstr "``await`` :func:`wait_for`" + +#: ../../library/asyncio-api-index.rst:34 +msgid "Run with a timeout." +msgstr "有超时控制的运行。" + +#: ../../library/asyncio-api-index.rst:36 +msgid "``await`` :func:`shield`" +msgstr "``await`` :func:`shield`" + +#: ../../library/asyncio-api-index.rst:37 +msgid "Shield from cancellation." +msgstr "屏蔽取消操作" + +#: ../../library/asyncio-api-index.rst:39 +msgid "``await`` :func:`wait`" +msgstr "``await`` :func:`wait`" + +#: ../../library/asyncio-api-index.rst:40 +msgid "Monitor for completion." +msgstr "完成情况的监控器" + +#: ../../library/asyncio-api-index.rst:42 +msgid ":func:`current_task`" +msgstr ":func:`current_task`" + +#: ../../library/asyncio-api-index.rst:43 +msgid "Return the current Task." +msgstr "返回当前Task对象" + +#: ../../library/asyncio-api-index.rst:45 +msgid ":func:`all_tasks`" +msgstr ":func:`all_tasks`" + +#: ../../library/asyncio-api-index.rst:46 +msgid "Return all tasks for an event loop." +msgstr "返回事件循环中所有的task对象。" + +#: ../../library/asyncio-api-index.rst:48 +msgid ":class:`Task`" +msgstr ":class:`Task`" + +#: ../../library/asyncio-api-index.rst:49 +msgid "Task object." +msgstr "Task对象" + +#: ../../library/asyncio-api-index.rst:51 +msgid ":func:`to_thread`" +msgstr ":func:`to_thread`" + +#: ../../library/asyncio-api-index.rst:52 +msgid "Asychronously run a function in a separate OS thread." +msgstr "在不同的 OS 线程中异步地运行一个函数。" + +#: ../../library/asyncio-api-index.rst:54 +msgid ":func:`run_coroutine_threadsafe`" +msgstr ":func:`run_coroutine_threadsafe`" + +#: ../../library/asyncio-api-index.rst:55 +msgid "Schedule a coroutine from another OS thread." +msgstr "从其他OS线程中调度一个协程。" + +#: ../../library/asyncio-api-index.rst:57 +msgid "``for in`` :func:`as_completed`" +msgstr "``for in`` :func:`as_completed`" + +#: ../../library/asyncio-api-index.rst:58 +msgid "Monitor for completion with a ``for`` loop." +msgstr "用 ``for`` 循环监控完成情况。" + +#: ../../library/asyncio-api-index.rst:62 +#: ../../library/asyncio-api-index.rst:98 +#: ../../library/asyncio-api-index.rst:122 +#: ../../library/asyncio-api-index.rst:158 +#: ../../library/asyncio-api-index.rst:191 +#: ../../library/asyncio-api-index.rst:216 +msgid "Examples" +msgstr "示例" + +#: ../../library/asyncio-api-index.rst:63 +msgid "" +":ref:`Using asyncio.gather() to run things in parallel " +"`." +msgstr ":ref:`使用 asyncio.gather() 并行运行 `." + +#: ../../library/asyncio-api-index.rst:66 +msgid "" +":ref:`Using asyncio.wait_for() to enforce a timeout " +"`." +msgstr ":ref:`使用 asyncio.wait_for() 强制超时 `." + +#: ../../library/asyncio-api-index.rst:69 +msgid ":ref:`Cancellation `." +msgstr ":ref:`撤销协程 `." + +#: ../../library/asyncio-api-index.rst:71 +msgid ":ref:`Using asyncio.sleep() `." +msgstr ":ref:`asyncio.sleep() 的用法 `." + +#: ../../library/asyncio-api-index.rst:73 +msgid "See also the main :ref:`Tasks documentation page `." +msgstr "请主要参阅 :ref:`协程与任务文档 `." + +#: ../../library/asyncio-api-index.rst:77 +msgid "Queues" +msgstr "队列集" + +#: ../../library/asyncio-api-index.rst:79 +msgid "" +"Queues should be used to distribute work amongst multiple asyncio Tasks, " +"implement connection pools, and pub/sub patterns." +msgstr "队列集被用于多个异步Task对象的运行调度,实现连接池以及发布/订阅模式。" + +#: ../../library/asyncio-api-index.rst:87 +msgid ":class:`Queue`" +msgstr ":class:`Queue`" + +#: ../../library/asyncio-api-index.rst:88 +msgid "A FIFO queue." +msgstr "先进先出队列" + +#: ../../library/asyncio-api-index.rst:90 +msgid ":class:`PriorityQueue`" +msgstr ":class:`PriorityQueue`" + +#: ../../library/asyncio-api-index.rst:91 +msgid "A priority queue." +msgstr "优先级队列。" + +#: ../../library/asyncio-api-index.rst:93 +msgid ":class:`LifoQueue`" +msgstr ":class:`LifoQueue`" + +#: ../../library/asyncio-api-index.rst:94 +msgid "A LIFO queue." +msgstr "后进先出队列。" + +#: ../../library/asyncio-api-index.rst:99 +msgid "" +":ref:`Using asyncio.Queue to distribute workload between several Tasks " +"`." +msgstr ":ref:`使用 asyncio.Queue 在多个并发任务间分配工作量 `." + +#: ../../library/asyncio-api-index.rst:102 +msgid "See also the :ref:`Queues documentation page `." +msgstr "请参阅 :ref:`队列集文档 `." + +#: ../../library/asyncio-api-index.rst:106 +msgid "Subprocesses" +msgstr "子进程集" + +#: ../../library/asyncio-api-index.rst:108 +msgid "Utilities to spawn subprocesses and run shell commands." +msgstr "用于生成子进程和运行shell命令的工具包。" + +#: ../../library/asyncio-api-index.rst:114 +msgid "``await`` :func:`create_subprocess_exec`" +msgstr "``await`` :func:`create_subprocess_exec`" + +#: ../../library/asyncio-api-index.rst:115 +msgid "Create a subprocess." +msgstr "创建一个子进程。" + +#: ../../library/asyncio-api-index.rst:117 +msgid "``await`` :func:`create_subprocess_shell`" +msgstr "``await`` :func:`create_subprocess_shell`" + +#: ../../library/asyncio-api-index.rst:118 +msgid "Run a shell command." +msgstr "运行一个shell命令。" + +#: ../../library/asyncio-api-index.rst:123 +msgid ":ref:`Executing a shell command `." +msgstr ":ref:`执行一个shell命令 `." + +#: ../../library/asyncio-api-index.rst:125 +msgid "" +"See also the :ref:`subprocess APIs ` documentation." +msgstr "请参阅 :ref:`子进程 APIs ` 相关文档." + +#: ../../library/asyncio-api-index.rst:130 +msgid "Streams" +msgstr "流" + +#: ../../library/asyncio-api-index.rst:132 +msgid "High-level APIs to work with network IO." +msgstr "用于网络IO处理的高级API集。" + +#: ../../library/asyncio-api-index.rst:138 +msgid "``await`` :func:`open_connection`" +msgstr "``await`` :func:`open_connection`" + +#: ../../library/asyncio-api-index.rst:139 +msgid "Establish a TCP connection." +msgstr "建立一个TCP连接。" + +#: ../../library/asyncio-api-index.rst:141 +msgid "``await`` :func:`open_unix_connection`" +msgstr "``await`` :func:`open_unix_connection`" + +#: ../../library/asyncio-api-index.rst:142 +msgid "Establish a Unix socket connection." +msgstr "建立一个Unix socket连接。" + +#: ../../library/asyncio-api-index.rst:144 +msgid "``await`` :func:`start_server`" +msgstr "``await`` :func:`start_server`" + +#: ../../library/asyncio-api-index.rst:145 +msgid "Start a TCP server." +msgstr "启动TCP服务。" + +#: ../../library/asyncio-api-index.rst:147 +msgid "``await`` :func:`start_unix_server`" +msgstr "``await`` :func:`start_unix_server`" + +#: ../../library/asyncio-api-index.rst:148 +msgid "Start a Unix socket server." +msgstr "启动一个Unix socket服务。" + +#: ../../library/asyncio-api-index.rst:150 +msgid ":class:`StreamReader`" +msgstr ":class:`StreamReader`" + +#: ../../library/asyncio-api-index.rst:151 +msgid "High-level async/await object to receive network data." +msgstr "接收网络数据的高级async/await对象。" + +#: ../../library/asyncio-api-index.rst:153 +msgid ":class:`StreamWriter`" +msgstr ":class:`StreamWriter`" + +#: ../../library/asyncio-api-index.rst:154 +msgid "High-level async/await object to send network data." +msgstr "发送网络数据的高级async/await对象。" + +#: ../../library/asyncio-api-index.rst:159 +msgid ":ref:`Example TCP client `." +msgstr ":ref:`TCP 客户端样例 `." + +#: ../../library/asyncio-api-index.rst:161 +msgid "See also the :ref:`streams APIs ` documentation." +msgstr "请参阅 :ref:`streams APIs ` 文档。" + +#: ../../library/asyncio-api-index.rst:166 +msgid "Synchronization" +msgstr "同步" + +#: ../../library/asyncio-api-index.rst:168 +msgid "Threading-like synchronization primitives that can be used in Tasks." +msgstr "能被用于Task对象集的,类似线程的同步基元组件。" + +#: ../../library/asyncio-api-index.rst:174 +msgid ":class:`Lock`" +msgstr ":class:`Lock`" + +#: ../../library/asyncio-api-index.rst:175 +msgid "A mutex lock." +msgstr "互斥锁。" + +#: ../../library/asyncio-api-index.rst:177 +msgid ":class:`Event`" +msgstr ":class:`Event`" + +#: ../../library/asyncio-api-index.rst:178 +msgid "An event object." +msgstr "事件对象。" + +#: ../../library/asyncio-api-index.rst:180 +msgid ":class:`Condition`" +msgstr ":class:`Condition`" + +#: ../../library/asyncio-api-index.rst:181 +msgid "A condition object." +msgstr "条件对象" + +#: ../../library/asyncio-api-index.rst:183 +msgid ":class:`Semaphore`" +msgstr ":class:`Semaphore`" + +#: ../../library/asyncio-api-index.rst:184 +msgid "A semaphore." +msgstr "信号量" + +#: ../../library/asyncio-api-index.rst:186 +msgid ":class:`BoundedSemaphore`" +msgstr ":class:`BoundedSemaphore`" + +#: ../../library/asyncio-api-index.rst:187 +msgid "A bounded semaphore." +msgstr "有界的信号量。" + +#: ../../library/asyncio-api-index.rst:192 +msgid ":ref:`Using asyncio.Event `." +msgstr ":ref:`asyncio.Event 的用法 `." + +#: ../../library/asyncio-api-index.rst:194 +msgid "" +"See also the documentation of asyncio :ref:`synchronization primitives " +"`." +msgstr "请参阅asyncio文档 :ref:`synchronization primitives `." + +#: ../../library/asyncio-api-index.rst:199 +msgid "Exceptions" +msgstr "异常" + +#: ../../library/asyncio-api-index.rst:206 +msgid ":exc:`asyncio.TimeoutError`" +msgstr ":exc:`asyncio.TimeoutError`" + +#: ../../library/asyncio-api-index.rst:207 +msgid "" +"Raised on timeout by functions like :func:`wait_for`. Keep in mind that " +"``asyncio.TimeoutError`` is **unrelated** to the built-in " +":exc:`TimeoutError` exception." +msgstr "" +"类似 :func:`wait_for` 等函数在超时时候被引发。请注意 ``asyncio.TimeoutError`` 与内建异常 " +":exc:`TimeoutError` 无关。" + +#: ../../library/asyncio-api-index.rst:211 +msgid ":exc:`asyncio.CancelledError`" +msgstr ":exc:`asyncio.CancelledError`" + +#: ../../library/asyncio-api-index.rst:212 +msgid "Raised when a Task is cancelled. See also :meth:`Task.cancel`." +msgstr "当一个Task对象被取消的时候被引发。请参阅 :meth:`Task.cancel`。" + +#: ../../library/asyncio-api-index.rst:217 +msgid "" +":ref:`Handling CancelledError to run code on cancellation request " +"`." +msgstr "" +":ref:`在取消请求发生的运行代码中如何处理CancelledError异常 `." + +#: ../../library/asyncio-api-index.rst:220 +msgid "" +"See also the full list of :ref:`asyncio-specific exceptions `." +msgstr "请参阅完整的 :ref:`asyncio 专用异常 ` 列表." diff --git a/library/asyncio-dev.po b/library/asyncio-dev.po new file mode 100644 index 000000000..8a983f5f9 --- /dev/null +++ b/library/asyncio-dev.po @@ -0,0 +1,297 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) 2001-2022, Python Software Foundation +# This file is distributed under the same license as the Python package. +# FIRST AUTHOR , YEAR. +# +# Translators: +# ww song , 2018 +# Pan Felix , 2019 +# kevin wong , 2019 +# cdarlint , 2019 +# 钢 彭 , 2019 +# Freesand Leo , 2020 +# +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: Python 3.9\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2022-11-04 14:34+0000\n" +"PO-Revision-Date: 2017-02-16 17:48+0000\n" +"Last-Translator: Freesand Leo , 2020\n" +"Language-Team: Chinese (China) (https://www.transifex.com/python-doc/teams/5390/zh_CN/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: zh_CN\n" +"Plural-Forms: nplurals=1; plural=0;\n" + +#: ../../library/asyncio-dev.rst:7 +msgid "Developing with asyncio" +msgstr "用 asyncio 开发" + +#: ../../library/asyncio-dev.rst:9 +msgid "" +"Asynchronous programming is different from classic \"sequential\" " +"programming." +msgstr "异步编程与传统的“顺序”编程不同。" + +#: ../../library/asyncio-dev.rst:12 +msgid "" +"This page lists common mistakes and traps and explains how to avoid them." +msgstr "本页列出常见的错误和陷阱,并解释如何避免它们。" + +#: ../../library/asyncio-dev.rst:19 +msgid "Debug Mode" +msgstr "Debug 模式" + +#: ../../library/asyncio-dev.rst:21 +msgid "" +"By default asyncio runs in production mode. In order to ease the " +"development asyncio has a *debug mode*." +msgstr "默认情况下,asyncio以生产模式运行。为了简化开发,asyncio还有一种*debug 模式* 。" + +#: ../../library/asyncio-dev.rst:24 +msgid "There are several ways to enable asyncio debug mode:" +msgstr "有几种方法可以启用异步调试模式:" + +#: ../../library/asyncio-dev.rst:26 +msgid "" +"Setting the :envvar:`PYTHONASYNCIODEBUG` environment variable to ``1``." +msgstr "将 :envvar:`PYTHONASYNCIODEBUG` 环境变量设置为 ``1`` 。" + +#: ../../library/asyncio-dev.rst:28 +msgid "Using the :ref:`Python Development Mode `." +msgstr "使用 :ref:`Python 开发模式 `。" + +#: ../../library/asyncio-dev.rst:30 +msgid "Passing ``debug=True`` to :func:`asyncio.run`." +msgstr "将 ``debug=True`` 传递给 :func:`asyncio.run` 。" + +#: ../../library/asyncio-dev.rst:32 +msgid "Calling :meth:`loop.set_debug`." +msgstr "调用 :meth:`loop.set_debug` 。" + +#: ../../library/asyncio-dev.rst:34 +msgid "In addition to enabling the debug mode, consider also:" +msgstr "除了启用调试模式外,还要考虑:" + +#: ../../library/asyncio-dev.rst:36 +msgid "" +"setting the log level of the :ref:`asyncio logger ` to " +":py:data:`logging.DEBUG`, for example the following snippet of code can be " +"run at startup of the application::" +msgstr "" +"将 :ref:`asyncio logger ` 的日志级别设置为 " +":py:data:`logging.DEBUG`,例如,下面的代码片段可以在应用程序启动时运行::" + +#: ../../library/asyncio-dev.rst:42 +msgid "" +"configuring the :mod:`warnings` module to display :exc:`ResourceWarning` " +"warnings. One way of doing that is by using the :option:`-W` ``default`` " +"command line option." +msgstr "" +"配置 :mod:`warnings` 模块以显示 :exc:`ResourceWarning` 警告。一种方法是使用 :option:`-W` " +"``default`` 命令行选项。" + +#: ../../library/asyncio-dev.rst:47 +msgid "When the debug mode is enabled:" +msgstr "启用调试模式时:" + +#: ../../library/asyncio-dev.rst:49 +msgid "" +"asyncio checks for :ref:`coroutines that were not awaited ` and logs them; this mitigates the \"forgotten " +"await\" pitfall." +msgstr "" +"asyncio 检查 :ref:`未被等待的协程 ` " +"并记录他们;这将消除“被遗忘的等待”问题。" + +#: ../../library/asyncio-dev.rst:53 +msgid "" +"Many non-threadsafe asyncio APIs (such as :meth:`loop.call_soon` and " +":meth:`loop.call_at` methods) raise an exception if they are called from a " +"wrong thread." +msgstr "" +"许多非线程安全的异步 APIs (例如 :meth:`loop.call_soon` 和 :meth:`loop.call_at` " +"方法),如果从错误的线程调用,则会引发异常。" + +#: ../../library/asyncio-dev.rst:57 +msgid "" +"The execution time of the I/O selector is logged if it takes too long to " +"perform an I/O operation." +msgstr "如果执行I/O操作花费的时间太长,则记录I/O选择器的执行时间。" + +#: ../../library/asyncio-dev.rst:60 +msgid "" +"Callbacks taking longer than 100ms are logged. The " +":attr:`loop.slow_callback_duration` attribute can be used to set the minimum" +" execution duration in seconds that is considered \"slow\"." +msgstr "" +"执行时间超过100毫秒的回调将会载入日志。 属性 :attr:`loop.slow_callback_duration` " +"可用于设置以秒为单位的最小执行持续时间,这被视为“缓慢”。" + +#: ../../library/asyncio-dev.rst:68 +msgid "Concurrency and Multithreading" +msgstr "并发性和多线程" + +#: ../../library/asyncio-dev.rst:70 +msgid "" +"An event loop runs in a thread (typically the main thread) and executes all " +"callbacks and Tasks in its thread. While a Task is running in the event " +"loop, no other Tasks can run in the same thread. When a Task executes an " +"``await`` expression, the running Task gets suspended, and the event loop " +"executes the next Task." +msgstr "" +"事件循环在线程中运行(通常是主线程),并在其线程中执行所有回调和任务。当一个任务在事件循环中运行时,没有其他任务可以在同一个线程中运行。当一个任务执行一个" +" ``await`` 表达式时,正在运行的任务被挂起,事件循环执行下一个任务。" + +#: ../../library/asyncio-dev.rst:76 +msgid "" +"To schedule a :term:`callback` from another OS thread, the " +":meth:`loop.call_soon_threadsafe` method should be used. Example::" +msgstr "" +"要调度来自另一 OS 线程的 :term:`callback`,应该使用 :meth:`loop.call_soon_threadsafe` 方法。 " +"例如::" + +#: ../../library/asyncio-dev.rst:81 +msgid "" +"Almost all asyncio objects are not thread safe, which is typically not a " +"problem unless there is code that works with them from outside of a Task or " +"a callback. If there's a need for such code to call a low-level asyncio " +"API, the :meth:`loop.call_soon_threadsafe` method should be used, e.g.::" +msgstr "" +"几乎所有异步对象都不是线程安全的,这通常不是问题,除非在任务或回调函数之外有代码可以使用它们。如果需要这样的代码来调用低级异步API,应该使用 " +":meth:`loop.call_soon_threadsafe` 方法,例如::" + +#: ../../library/asyncio-dev.rst:89 +msgid "" +"To schedule a coroutine object from a different OS thread, the " +":func:`run_coroutine_threadsafe` function should be used. It returns a " +":class:`concurrent.futures.Future` to access the result::" +msgstr "" +"要从不同的OS线程调度一个协程对象,应该使用 :func:`run_coroutine_threadsafe` 函数。它返回一个 " +":class:`concurrent.futures.Future` 。查询结果::" + +#: ../../library/asyncio-dev.rst:102 +msgid "" +"To handle signals and to execute subprocesses, the event loop must be run in" +" the main thread." +msgstr "为了能够处理信号和执行子进程,事件循环必须运行于主线程中。" + +#: ../../library/asyncio-dev.rst:105 +msgid "" +"The :meth:`loop.run_in_executor` method can be used with a " +":class:`concurrent.futures.ThreadPoolExecutor` to execute blocking code in a" +" different OS thread without blocking the OS thread that the event loop runs" +" in." +msgstr "" +"方法 :meth:`loop.run_in_executor` 可以和 " +":class:`concurrent.futures.ThreadPoolExecutor` " +"一起使用,用于在一个不同的操作系统线程中执行阻塞代码,并避免阻塞运行事件循环的那个操作系统线程。" + +#: ../../library/asyncio-dev.rst:110 +msgid "" +"There is currently no way to schedule coroutines or callbacks directly from " +"a different process (such as one started with :mod:`multiprocessing`). The " +":ref:`Event Loop Methods ` section lists APIs that can " +"read from pipes and watch file descriptors without blocking the event loop. " +"In addition, asyncio's :ref:`Subprocess ` APIs provide a" +" way to start a process and communicate with it from the event loop. Lastly," +" the aforementioned :meth:`loop.run_in_executor` method can also be used " +"with a :class:`concurrent.futures.ProcessPoolExecutor` to execute code in a " +"different process." +msgstr "" +"目前没有什么办法能直接从另一个进程 (例如通过 :mod:`multiprocessing` 启动的进程) 安排协程或回调。 :ref:`事件循环方法 " +"` 小节列出了可以从管道读取并监视文件描述符而不会阻塞事件循环的 API。 此外,asyncio 的 " +":ref:`子进程 ` API 提供了一种启动进程并从事件循环与其通信的办法。 最后,之前提到的 " +":meth:`loop.run_in_executor` 方法也可配合 " +":class:`concurrent.futures.ProcessPoolExecutor` 使用以在另一个进程中执行代码。" + +#: ../../library/asyncio-dev.rst:124 +msgid "Running Blocking Code" +msgstr "运行阻塞的代码" + +#: ../../library/asyncio-dev.rst:126 +msgid "" +"Blocking (CPU-bound) code should not be called directly. For example, if a " +"function performs a CPU-intensive calculation for 1 second, all concurrent " +"asyncio Tasks and IO operations would be delayed by 1 second." +msgstr "" +"不应该直接调用阻塞( CPU 绑定)代码。例如,如果一个函数执行1秒的 CPU 密集型计算,那么所有并发异步任务和 IO 操作都将延迟1秒。" + +#: ../../library/asyncio-dev.rst:131 +msgid "" +"An executor can be used to run a task in a different thread or even in a " +"different process to avoid blocking the OS thread with the event loop. See " +"the :meth:`loop.run_in_executor` method for more details." +msgstr "" +"可以用执行器在不同的线程甚至不同的进程中运行任务,以避免使用事件循环阻塞 OS 线程。 请参阅 :meth:`loop.run_in_executor`" +" 方法了解详情。" + +#: ../../library/asyncio-dev.rst:140 +msgid "Logging" +msgstr "日志" + +#: ../../library/asyncio-dev.rst:142 +msgid "" +"asyncio uses the :mod:`logging` module and all logging is performed via the " +"``\"asyncio\"`` logger." +msgstr "asyncio使用 :mod:`logging` 模块,所有日志记录都是通过 ``\"asyncio\"`` logger执行的。" + +#: ../../library/asyncio-dev.rst:145 +msgid "" +"The default log level is :py:data:`logging.INFO`, which can be easily " +"adjusted::" +msgstr "默认日志级别是 :py:data:`logging.INFO` 。可以很容易地调整::" + +#: ../../library/asyncio-dev.rst:154 +msgid "Detect never-awaited coroutines" +msgstr "检测 never-awaited 协同程序" + +#: ../../library/asyncio-dev.rst:156 +msgid "" +"When a coroutine function is called, but not awaited (e.g. ``coro()`` " +"instead of ``await coro()``) or the coroutine is not scheduled with " +":meth:`asyncio.create_task`, asyncio will emit a :exc:`RuntimeWarning`::" +msgstr "" +"当协程函数被调用而不是被等待时 (即执行 ``coro()`` 而不是 ``await coro()``) 或者协程没有通过 " +":meth:`asyncio.create_task` 被排入计划日程,asyncio 将会发出一条 :exc:`RuntimeWarning`::" + +#: ../../library/asyncio-dev.rst:171 ../../library/asyncio-dev.rst:216 +msgid "Output::" +msgstr "输出::" + +#: ../../library/asyncio-dev.rst:176 ../../library/asyncio-dev.rst:232 +msgid "Output in debug mode::" +msgstr "调试模式的输出::" + +#: ../../library/asyncio-dev.rst:189 +msgid "" +"The usual fix is to either await the coroutine or call the " +":meth:`asyncio.create_task` function::" +msgstr "通常的修复方法是等待协程或者调用 :meth:`asyncio.create_task` 函数::" + +#: ../../library/asyncio-dev.rst:197 +msgid "Detect never-retrieved exceptions" +msgstr "检测就再也没异常" + +#: ../../library/asyncio-dev.rst:199 +msgid "" +"If a :meth:`Future.set_exception` is called but the Future object is never " +"awaited on, the exception would never be propagated to the user code. In " +"this case, asyncio would emit a log message when the Future object is " +"garbage collected." +msgstr "" +"如果调用 :meth:`Future.set_exception` ,但不等待 Future 对象,将异常传播到用户代码。在这种情况下,当 Future" +" 对象被垃圾收集时,asyncio将发出一条日志消息。" + +#: ../../library/asyncio-dev.rst:204 +msgid "Example of an unhandled exception::" +msgstr "未处理异常的例子::" + +#: ../../library/asyncio-dev.rst:227 +msgid "" +":ref:`Enable the debug mode ` to get the traceback where" +" the task was created::" +msgstr ":ref:`激活调试模式 ` 以获取任务创建处的跟踪信息::" diff --git a/library/asyncio-eventloop.po b/library/asyncio-eventloop.po new file mode 100644 index 000000000..f9c6533ef --- /dev/null +++ b/library/asyncio-eventloop.po @@ -0,0 +1,2267 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) 2001-2025, Python Software Foundation +# This file is distributed under the same license as the Python package. +# FIRST AUTHOR , YEAR. +# +# Translators: +# Pan Felix , 2019 +# Shengjing Zhu , 2019 +# cdarlint , 2019 +# walkinrain , 2019 +# 林行众 , 2019 +# Alpha Du , 2022 +# Freesand Leo , 2022 +# MuSheng Chen , 2022 +# Rafael Fontenelle , 2025 +# +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: Python 3.9\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2025-02-07 16:40+0000\n" +"PO-Revision-Date: 2017-02-16 17:48+0000\n" +"Last-Translator: Rafael Fontenelle , 2025\n" +"Language-Team: Chinese (China) (https://app.transifex.com/python-doc/teams/5390/zh_CN/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: zh_CN\n" +"Plural-Forms: nplurals=1; plural=0;\n" + +#: ../../library/asyncio-eventloop.rst:6 +msgid "Event Loop" +msgstr "事件循环" + +#: ../../library/asyncio-eventloop.rst:8 +msgid "" +"**Source code:** :source:`Lib/asyncio/events.py`, " +":source:`Lib/asyncio/base_events.py`" +msgstr "" +"**源代码:** :source:`Lib/asyncio/events.py`, " +":source:`Lib/asyncio/base_events.py`" + +#: ../../library/asyncio-eventloop.rst:14 +msgid "Preface" +msgstr "前言" + +#: ../../library/asyncio-eventloop.rst:15 +msgid "" +"The event loop is the core of every asyncio application. Event loops run " +"asynchronous tasks and callbacks, perform network IO operations, and run " +"subprocesses." +msgstr "事件循环是每个 asyncio 应用的核心。 事件循环会运行异步任务和回调,执行网络 IO 操作,以及运行子进程。" + +#: ../../library/asyncio-eventloop.rst:19 +msgid "" +"Application developers should typically use the high-level asyncio " +"functions, such as :func:`asyncio.run`, and should rarely need to reference " +"the loop object or call its methods. This section is intended mostly for " +"authors of lower-level code, libraries, and frameworks, who need finer " +"control over the event loop behavior." +msgstr "" +"应用开发者通常应当使用高层级的 asyncio 函数,例如 :func:`asyncio.run`,应当很少有必要引用循环对象或调用其方法。 " +"本节所针对的主要是低层级代码、库和框架的编写者,他们需要更细致地控制事件循环行为。" + +#: ../../library/asyncio-eventloop.rst:26 +msgid "Obtaining the Event Loop" +msgstr "获取事件循环" + +#: ../../library/asyncio-eventloop.rst:27 +msgid "" +"The following low-level functions can be used to get, set, or create an " +"event loop:" +msgstr "以下低层级函数可被用于获取、设置或创建事件循环:" + +#: ../../library/asyncio-eventloop.rst:32 +msgid "Return the running event loop in the current OS thread." +msgstr "返回当前 OS 线程中正在运行的事件循环。" + +#: ../../library/asyncio-eventloop.rst:34 +msgid "" +"If there is no running event loop a :exc:`RuntimeError` is raised. This " +"function can only be called from a coroutine or a callback." +msgstr "如果没有正在运行的事件循环则会引发 :exc:`RuntimeError`。 此函数只能由协程或回调来调用。" + +#: ../../library/asyncio-eventloop.rst:41 +msgid "Get the current event loop." +msgstr "获取当前事件循环。" + +#: ../../library/asyncio-eventloop.rst:43 +msgid "" +"If there is no current event loop set in the current OS thread, the OS " +"thread is main, and :func:`set_event_loop` has not yet been called, asyncio " +"will create a new event loop and set it as the current one." +msgstr "" +"如果当前 OS 线程没有设置当前事件循环,该 OS 线程为主线程,并且 :func:`set_event_loop` 还没有被调用,则 asyncio " +"将创建一个新的事件循环并将其设为当前事件循环。" + +#: ../../library/asyncio-eventloop.rst:48 +msgid "" +"Because this function has rather complex behavior (especially when custom " +"event loop policies are in use), using the :func:`get_running_loop` function" +" is preferred to :func:`get_event_loop` in coroutines and callbacks." +msgstr "" +"由于此函数具有相当复杂的行为(特别是在使用了自定义事件循环策略的时候),更推荐在协程和回调中使用 :func:`get_running_loop` " +"函数而非 :func:`get_event_loop`。" + +#: ../../library/asyncio-eventloop.rst:53 +msgid "" +"Consider also using the :func:`asyncio.run` function instead of using lower " +"level functions to manually create and close an event loop." +msgstr "应该考虑使用 :func:`asyncio.run` 函数而非使用低层级函数来手动创建和关闭事件循环。" + +#: ../../library/asyncio-eventloop.rst:58 +msgid "Set *loop* as a current event loop for the current OS thread." +msgstr "将 *loop* 设置为当前 OS 线程的当前事件循环。" + +#: ../../library/asyncio-eventloop.rst:62 +msgid "Create and return a new event loop object." +msgstr "创建并返回一个新的事件循环对象。" + +#: ../../library/asyncio-eventloop.rst:64 +msgid "" +"Note that the behaviour of :func:`get_event_loop`, :func:`set_event_loop`, " +"and :func:`new_event_loop` functions can be altered by :ref:`setting a " +"custom event loop policy `." +msgstr "" +"请注意 :func:`get_event_loop`, :func:`set_event_loop` 以及 :func:`new_event_loop`" +" 函数的行为可以通过 :ref:`设置自定义事件循环策略 ` 来改变。" + +#: ../../library/asyncio-eventloop.rst:70 +msgid "Contents" +msgstr "目录" + +#: ../../library/asyncio-eventloop.rst:71 +msgid "This documentation page contains the following sections:" +msgstr "本文档包含下列小节:" + +#: ../../library/asyncio-eventloop.rst:73 +msgid "" +"The `Event Loop Methods`_ section is the reference documentation of the " +"event loop APIs;" +msgstr "`事件循环方法集`_ 章节是事件循环APIs的参考文档;" + +#: ../../library/asyncio-eventloop.rst:76 +msgid "" +"The `Callback Handles`_ section documents the :class:`Handle` and " +":class:`TimerHandle` instances which are returned from scheduling methods " +"such as :meth:`loop.call_soon` and :meth:`loop.call_later`;" +msgstr "" +"`回调处理`_ 章节是从调度方法 例如 :meth:`loop.call_soon` 和 :meth:`loop.call_later` 中返回 " +":class:`Handle` 和 :class:`TimerHandle` 实例的文档。" + +#: ../../library/asyncio-eventloop.rst:80 +msgid "" +"The `Server Objects`_ section documents types returned from event loop " +"methods like :meth:`loop.create_server`;" +msgstr "`Server Objects`_ 章节记录了从事件循环方法返回的类型,比如 :meth:`loop.create_server` ;" + +#: ../../library/asyncio-eventloop.rst:83 +msgid "" +"The `Event Loop Implementations`_ section documents the " +":class:`SelectorEventLoop` and :class:`ProactorEventLoop` classes;" +msgstr "" +"`Event Loop Implementations`_ 章节记录了 :class:`SelectorEventLoop` 和 " +":class:`ProactorEventLoop` 类;" + +#: ../../library/asyncio-eventloop.rst:86 +msgid "" +"The `Examples`_ section showcases how to work with some event loop APIs." +msgstr "`Examples`_ 章节展示了如何使用某些事件循环API。" + +#: ../../library/asyncio-eventloop.rst:93 +msgid "Event Loop Methods" +msgstr "事件循环方法集" + +#: ../../library/asyncio-eventloop.rst:95 +msgid "Event loops have **low-level** APIs for the following:" +msgstr "事件循环有下列 **低级** APIs:" + +#: ../../library/asyncio-eventloop.rst:103 +msgid "Running and stopping the loop" +msgstr "运行和停止循环" + +#: ../../library/asyncio-eventloop.rst:107 +msgid "Run until the *future* (an instance of :class:`Future`) has completed." +msgstr "运行直到 *future* ( :class:`Future` 的实例 ) 被完成。" + +#: ../../library/asyncio-eventloop.rst:110 +msgid "" +"If the argument is a :ref:`coroutine object ` it is implicitly " +"scheduled to run as a :class:`asyncio.Task`." +msgstr "" +"如果参数是 :ref:`coroutine object ` ,将被隐式调度为 :class:`asyncio.Task` " +"来运行。" + +#: ../../library/asyncio-eventloop.rst:113 +msgid "Return the Future's result or raise its exception." +msgstr "返回 Future 的结果 或者引发相关异常。" + +#: ../../library/asyncio-eventloop.rst:117 +msgid "Run the event loop until :meth:`stop` is called." +msgstr "运行事件循环直到 :meth:`stop` 被调用。" + +#: ../../library/asyncio-eventloop.rst:119 +msgid "" +"If :meth:`stop` is called before :meth:`run_forever()` is called, the loop " +"will poll the I/O selector once with a timeout of zero, run all callbacks " +"scheduled in response to I/O events (and those that were already scheduled)," +" and then exit." +msgstr "" +"如果 :meth:`stop` 在调用 :meth:`run_forever()` 之前被调用,循环将轮询一次 I/O " +"选择器并设置超时为零,再运行所有已加入计划任务的回调来响应 I/O 事件(以及已加入计划任务的事件),然后退出。" + +#: ../../library/asyncio-eventloop.rst:124 +msgid "" +"If :meth:`stop` is called while :meth:`run_forever` is running, the loop " +"will run the current batch of callbacks and then exit. Note that new " +"callbacks scheduled by callbacks will not run in this case; instead, they " +"will run the next time :meth:`run_forever` or :meth:`run_until_complete` is " +"called." +msgstr "" +"如果 :meth:`stop` 在 :meth:`run_forever` 运行期间被调用,循环将运行当前批次的回调然后退出。 " +"请注意在此情况下由回调加入计划任务的新回调将不会运行;它们将会在下次 :meth:`run_forever` 或 " +":meth:`run_until_complete` 被调用时运行。" + +#: ../../library/asyncio-eventloop.rst:132 +msgid "Stop the event loop." +msgstr "停止事件循环。" + +#: ../../library/asyncio-eventloop.rst:136 +msgid "Return ``True`` if the event loop is currently running." +msgstr "返回 ``True`` 如果事件循环当前正在运行。" + +#: ../../library/asyncio-eventloop.rst:140 +msgid "Return ``True`` if the event loop was closed." +msgstr "如果事件循环已经被关闭,返回 ``True`` 。" + +#: ../../library/asyncio-eventloop.rst:144 +msgid "Close the event loop." +msgstr "关闭事件循环。" + +#: ../../library/asyncio-eventloop.rst:146 +msgid "" +"The loop must not be running when this function is called. Any pending " +"callbacks will be discarded." +msgstr "当这个函数被调用的时候,循环必须处于非运行状态。pending状态的回调将被丢弃。" + +#: ../../library/asyncio-eventloop.rst:149 +msgid "" +"This method clears all queues and shuts down the executor, but does not wait" +" for the executor to finish." +msgstr "此方法清除所有的队列并立即关闭执行器,不会等待执行器完成。" + +#: ../../library/asyncio-eventloop.rst:152 +msgid "" +"This method is idempotent and irreversible. No other methods should be " +"called after the event loop is closed." +msgstr "这个方法是幂等的和不可逆的。事件循环关闭后,不应调用其他方法。" + +#: ../../library/asyncio-eventloop.rst:157 +msgid "" +"Schedule all currently open :term:`asynchronous generator` objects to close " +"with an :meth:`~agen.aclose()` call. After calling this method, the event " +"loop will issue a warning if a new asynchronous generator is iterated. This " +"should be used to reliably finalize all scheduled asynchronous generators." +msgstr "" +"安排所有当前打开的 :term:`asynchronous generator` 对象通过 :meth:`~agen.aclose()` 调用来关闭。 " +"在调用此方法后,如果有新的异步生成器被迭代事件循环将会发出警告。 这应当被用来可靠地完成所有已加入计划任务的异步生成器。" + +#: ../../library/asyncio-eventloop.rst:163 +#: ../../library/asyncio-eventloop.rst:183 +msgid "" +"Note that there is no need to call this function when :func:`asyncio.run` is" +" used." +msgstr "请注意当使用 :func:`asyncio.run` 时不必调用此函数。" + +#: ../../library/asyncio-eventloop.rst:166 +#: ../../library/asyncio-eventloop.rst:1083 +#: ../../library/asyncio-eventloop.rst:1469 +msgid "Example::" +msgstr "示例::" + +#: ../../library/asyncio-eventloop.rst:178 +msgid "" +"Schedule the closure of the default executor and wait for it to join all of " +"the threads in the :class:`ThreadPoolExecutor`. After calling this method, a" +" :exc:`RuntimeError` will be raised if :meth:`loop.run_in_executor` is " +"called while using the default executor." +msgstr "" +"安排默认执行器的关闭并等待它合并 :class:`ThreadPoolExecutor` 中的所有线程。 在调用此方法后,如果在使用默认执行器期间调用了" +" :meth:`loop.run_in_executor` 则将会引发 :exc:`RuntimeError`。" + +#: ../../library/asyncio-eventloop.rst:190 +msgid "Scheduling callbacks" +msgstr "安排回调" + +#: ../../library/asyncio-eventloop.rst:194 +msgid "" +"Schedule the *callback* :term:`callback` to be called with *args* arguments " +"at the next iteration of the event loop." +msgstr "安排 *callback* :term:`callback` 在事件循环的下一次迭代时附带 *args* 参数被调用。" + +#: ../../library/asyncio-eventloop.rst:197 +msgid "" +"Callbacks are called in the order in which they are registered. Each " +"callback will be called exactly once." +msgstr "回调按其注册顺序被调用。每个回调仅被调用一次。" + +#: ../../library/asyncio-eventloop.rst:200 +#: ../../library/asyncio-eventloop.rst:267 +msgid "" +"An optional keyword-only *context* argument allows specifying a custom " +":class:`contextvars.Context` for the *callback* to run in. The current " +"context is used when no *context* is provided." +msgstr "" +"可选键值类的参数 *context* 允许 *callback* 运行在一个指定的自定义 :class:`contextvars.Context` " +"对象中。如果没有提供 *context* ,则使用当前上下文。" + +#: ../../library/asyncio-eventloop.rst:204 +msgid "" +"An instance of :class:`asyncio.Handle` is returned, which can be used later " +"to cancel the callback." +msgstr "返回一个能用来取消回调的 :class:`asyncio.Handle` 实例。" + +#: ../../library/asyncio-eventloop.rst:207 +msgid "This method is not thread-safe." +msgstr "这个方法不是线程安全的。" + +#: ../../library/asyncio-eventloop.rst:211 +msgid "" +"A thread-safe variant of :meth:`call_soon`. Must be used to schedule " +"callbacks *from another thread*." +msgstr ":meth:`call_soon` 的线程安全变体。必须被用于安排 *来自其他线程* 的回调。" + +#: ../../library/asyncio-eventloop.rst:214 +msgid "" +"Raises :exc:`RuntimeError` if called on a loop that's been closed. This can " +"happen on a secondary thread when the main application is shutting down." +msgstr "如果在已被关闭的循环上调用则会引发 :exc:`RuntimeError`。 这可能会在主应用程序被关闭时在二级线程上发生。" + +#: ../../library/asyncio-eventloop.rst:218 +msgid "" +"See the :ref:`concurrency and multithreading ` " +"section of the documentation." +msgstr "" +"参见 :ref:`concurrency and multithreading ` 部分的文档。" + +#: ../../library/asyncio-eventloop.rst:221 +#: ../../library/asyncio-eventloop.rst:271 +#: ../../library/asyncio-eventloop.rst:291 +msgid "" +"The *context* keyword-only parameter was added. See :pep:`567` for more " +"details." +msgstr "加入键值类形参 *context*。请参阅 :pep:`567` 查看更多细节。" + +#: ../../library/asyncio-eventloop.rst:229 +msgid "" +"Most :mod:`asyncio` scheduling functions don't allow passing keyword " +"arguments. To do that, use :func:`functools.partial`::" +msgstr "大多数 :mod:`asyncio` 的调度函数不让传递关键字参数。为此,请使用 :func:`functools.partial` :" + +#: ../../library/asyncio-eventloop.rst:236 +msgid "" +"Using partial objects is usually more convenient than using lambdas, as " +"asyncio can render partial objects better in debug and error messages." +msgstr "使用 partial 对象通常比使用lambda更方便,asyncio 在调试和错误消息中能更好的呈现 partial 对象。" + +#: ../../library/asyncio-eventloop.rst:244 +msgid "Scheduling delayed callbacks" +msgstr "调度延迟回调" + +#: ../../library/asyncio-eventloop.rst:246 +msgid "" +"Event loop provides mechanisms to schedule callback functions to be called " +"at some point in the future. Event loop uses monotonic clocks to track " +"time." +msgstr "事件循环提供安排调度函数在将来某个时刻调用的机制。事件循环使用单调时钟来跟踪时间。" + +#: ../../library/asyncio-eventloop.rst:253 +msgid "" +"Schedule *callback* to be called after the given *delay* number of seconds " +"(can be either an int or a float)." +msgstr "安排 *callback* 在给定的 *delay* 秒(可以是 int 或者 float)后被调用。" + +#: ../../library/asyncio-eventloop.rst:256 +#: ../../library/asyncio-eventloop.rst:288 +msgid "" +"An instance of :class:`asyncio.TimerHandle` is returned which can be used to" +" cancel the callback." +msgstr "返回一个 :class:`asyncio.TimerHandle` 实例,该实例能用于取消回调。" + +#: ../../library/asyncio-eventloop.rst:259 +msgid "" +"*callback* will be called exactly once. If two callbacks are scheduled for " +"exactly the same time, the order in which they are called is undefined." +msgstr "*callback* 只被调用一次。如果两个回调被安排在同样的时间点,执行顺序未限定。" + +#: ../../library/asyncio-eventloop.rst:263 +msgid "" +"The optional positional *args* will be passed to the callback when it is " +"called. If you want the callback to be called with keyword arguments use " +":func:`functools.partial`." +msgstr "" +"可选的位置参数 *args* 在被调用的时候传递给 *callback*  。 如果你想把关键字参数传递给 *callback* ,请使用 " +":func:`functools.partial` 。" + +#: ../../library/asyncio-eventloop.rst:275 +msgid "" +"In Python 3.7 and earlier with the default event loop implementation, the " +"*delay* could not exceed one day. This has been fixed in Python 3.8." +msgstr "在 Python 3.7 和更早版本的默认事件循环实现中, *delay* 不能超过一天。 这在 Python 3.8 中已被修复。" + +#: ../../library/asyncio-eventloop.rst:282 +msgid "" +"Schedule *callback* to be called at the given absolute timestamp *when* (an " +"int or a float), using the same time reference as :meth:`loop.time`." +msgstr "" +"安排 *callback* 在给定的绝对时间戳 *when* (int 或 float) 被调用,使用与 :meth:`loop.time` " +"同样的时间参考。" + +#: ../../library/asyncio-eventloop.rst:286 +msgid "This method's behavior is the same as :meth:`call_later`." +msgstr "本方法的行为和 :meth:`call_later` 方法相同。" + +#: ../../library/asyncio-eventloop.rst:295 +msgid "" +"In Python 3.7 and earlier with the default event loop implementation, the " +"difference between *when* and the current time could not exceed one day. " +"This has been fixed in Python 3.8." +msgstr "" +"在 Python 3.7 和更早版本的默认事件循环实现中,*when* 和当前时间相差不能超过一天。 在这 Python 3.8 中已被修复。" + +#: ../../library/asyncio-eventloop.rst:302 +msgid "" +"Return the current time, as a :class:`float` value, according to the event " +"loop's internal monotonic clock." +msgstr "根据时间循环内部的单调时钟,返回当前时间为一个 :class:`float` 值。" + +#: ../../library/asyncio-eventloop.rst:306 +msgid "" +"In Python 3.7 and earlier timeouts (relative *delay* or absolute *when*) " +"should not exceed one day. This has been fixed in Python 3.8." +msgstr "" +"在 Python 3.7 和更早版本中超时 (相对的 *delay* 或绝对的 *when*) 不能超过一天。 这在 Python 3.8 中已被修复。" + +#: ../../library/asyncio-eventloop.rst:312 +msgid "The :func:`asyncio.sleep` function." +msgstr ":func:`asyncio.sleep` 函数。" + +#: ../../library/asyncio-eventloop.rst:316 +msgid "Creating Futures and Tasks" +msgstr "创建 Future 和 Task" + +#: ../../library/asyncio-eventloop.rst:320 +msgid "Create an :class:`asyncio.Future` object attached to the event loop." +msgstr "创建一个附加到事件循环中的 :class:`asyncio.Future` 对象。" + +#: ../../library/asyncio-eventloop.rst:322 +msgid "" +"This is the preferred way to create Futures in asyncio. This lets third-" +"party event loops provide alternative implementations of the Future object " +"(with better performance or instrumentation)." +msgstr "这是在asyncio中创建Futures的首选方式。这让第三方事件循环可以提供Future 对象的替代实现(更好的性能或者功能)。" + +#: ../../library/asyncio-eventloop.rst:330 +msgid "" +"Schedule the execution of a :ref:`coroutine`. Return a :class:`Task` object." +msgstr "安排一个 :ref:`coroutine` 的执行。返回一个 :class:`Task` 对象。" + +#: ../../library/asyncio-eventloop.rst:333 +msgid "" +"Third-party event loops can use their own subclass of :class:`Task` for " +"interoperability. In this case, the result type is a subclass of " +":class:`Task`." +msgstr "" +"第三方的事件循环可以使用它们自己的 :class:`Task` 子类来满足互操作性。这种情况下结果类型是一个 :class:`Task` 的子类。" + +#: ../../library/asyncio-eventloop.rst:337 +msgid "" +"If the *name* argument is provided and not ``None``, it is set as the name " +"of the task using :meth:`Task.set_name`." +msgstr "如果提供了 *name* 参数且不为 ``None``,它会使用 :meth:`Task.set_name` 来设为任务的名称。" + +#: ../../library/asyncio-eventloop.rst:340 +msgid "Added the ``name`` parameter." +msgstr "添加了 ``name`` 形参。" + +#: ../../library/asyncio-eventloop.rst:345 +msgid "Set a task factory that will be used by :meth:`loop.create_task`." +msgstr "设置一个任务工厂,它将由 :meth:`loop.create_task` 来使用。" + +#: ../../library/asyncio-eventloop.rst:348 +msgid "" +"If *factory* is ``None`` the default task factory will be set. Otherwise, " +"*factory* must be a *callable* with the signature matching ``(loop, coro)``," +" where *loop* is a reference to the active event loop, and *coro* is a " +"coroutine object. The callable must return a " +":class:`asyncio.Future`-compatible object." +msgstr "" +"如果 *factory* 为 ``None`` 则将设置默认的任务工厂。 在其他情况下,*factory* 必须为一个 *可调用对象* 且签名匹配 " +"``(loop, coro)``,其中 *loop* 是对活动事件循环的引用,而 *coro* 是一个协程对象。 该可调用对象必须返回一个兼容 " +":class:`asyncio.Future` 的对象。" + +#: ../../library/asyncio-eventloop.rst:356 +msgid "Return a task factory or ``None`` if the default one is in use." +msgstr "返回一个任务工厂,或者如果是使用默认值则返回 ``None``。" + +#: ../../library/asyncio-eventloop.rst:360 +msgid "Opening network connections" +msgstr "打开网络连接" + +#: ../../library/asyncio-eventloop.rst:369 +msgid "" +"Open a streaming transport connection to a given address specified by *host*" +" and *port*." +msgstr "打开一个流式传输连接,连接到由 *host* 和 *port* 指定的地址。" + +#: ../../library/asyncio-eventloop.rst:372 +msgid "" +"The socket family can be either :py:data:`~socket.AF_INET` or " +":py:data:`~socket.AF_INET6` depending on *host* (or the *family* argument, " +"if provided)." +msgstr "" +"套接字族可以是 :py:data:`~socket.AF_INET` 或 :py:data:`~socket.AF_INET6`,具体取决于 " +"*host* (或 *family* 参数,如果有提供的话)。" + +#: ../../library/asyncio-eventloop.rst:376 +msgid "The socket type will be :py:data:`~socket.SOCK_STREAM`." +msgstr "套接字类型将为 :py:data:`~socket.SOCK_STREAM`。" + +#: ../../library/asyncio-eventloop.rst:378 +#: ../../library/asyncio-eventloop.rst:999 +#: ../../library/asyncio-eventloop.rst:1015 +msgid "" +"*protocol_factory* must be a callable returning an :ref:`asyncio protocol " +"` implementation." +msgstr "" +"*protocol_factory* 必须为一个返回 :ref:`asyncio 协议 ` 实现的可调用对象。" + +#: ../../library/asyncio-eventloop.rst:381 +msgid "" +"This method will try to establish the connection in the background. When " +"successful, it returns a ``(transport, protocol)`` pair." +msgstr "这个方法会尝试在后台创建连接。当创建成功,返回 ``(transport, protocol)`` 组合。" + +#: ../../library/asyncio-eventloop.rst:384 +msgid "The chronological synopsis of the underlying operation is as follows:" +msgstr "底层操作的大致的执行顺序是这样的:" + +#: ../../library/asyncio-eventloop.rst:386 +msgid "" +"The connection is established and a :ref:`transport ` is " +"created for it." +msgstr "创建连接并为其创建一个 :ref:`传输 `。" + +#: ../../library/asyncio-eventloop.rst:389 +msgid "" +"*protocol_factory* is called without arguments and is expected to return a " +":ref:`protocol ` instance." +msgstr "不带参数地调用 *protocol_factory* 并预期返回一个 :ref:`协议 ` 实例。" + +#: ../../library/asyncio-eventloop.rst:392 +msgid "" +"The protocol instance is coupled with the transport by calling its " +":meth:`~BaseProtocol.connection_made` method." +msgstr "协议实例通过调用其 :meth:`~BaseProtocol.connection_made` 方法与传输进行配对。" + +#: ../../library/asyncio-eventloop.rst:395 +msgid "A ``(transport, protocol)`` tuple is returned on success." +msgstr "成功时返回一个 ``(transport, protocol)`` 元组。" + +#: ../../library/asyncio-eventloop.rst:397 +msgid "" +"The created transport is an implementation-dependent bidirectional stream." +msgstr "创建的传输是一个具体实现相关的双向流。" + +#: ../../library/asyncio-eventloop.rst:400 +#: ../../library/asyncio-eventloop.rst:522 +msgid "Other arguments:" +msgstr "其他参数:" + +#: ../../library/asyncio-eventloop.rst:402 +msgid "" +"*ssl*: if given and not false, a SSL/TLS transport is created (by default a " +"plain TCP transport is created). If *ssl* is a :class:`ssl.SSLContext` " +"object, this context is used to create the transport; if *ssl* is " +":const:`True`, a default context returned from " +":func:`ssl.create_default_context` is used." +msgstr "" +"*ssl*: 如果给定该参数且不为假值,则会创建一个 SSL/TLS 传输(默认创建一个纯 TCP 传输)。 如果 *ssl* 是一个 " +":class:`ssl.SSLContext` 对象,则会使用此上下文来创建传输对象;如果 *ssl* 为 :const:`True`,则会使用从 " +":func:`ssl.create_default_context` 返回的默认上下文。" + +#: ../../library/asyncio-eventloop.rst:408 +msgid ":ref:`SSL/TLS security considerations `" +msgstr ":ref:`SSL/TLS security considerations `" + +#: ../../library/asyncio-eventloop.rst:410 +msgid "" +"*server_hostname* sets or overrides the hostname that the target server's " +"certificate will be matched against. Should only be passed if *ssl* is not " +"``None``. By default the value of the *host* argument is used. If *host* " +"is empty, there is no default and you must pass a value for " +"*server_hostname*. If *server_hostname* is an empty string, hostname " +"matching is disabled (which is a serious security risk, allowing for " +"potential man-in-the-middle attacks)." +msgstr "" +"*server_hostname* 设置或覆盖目标服务器的证书将要匹配的主机名。 应当只在 *ssl* 不为 ``None`` 时传入。 " +"默认情况下会使用 *host* 参数的值。 如果 *host* 为空那就没有默认值,你必须为 *server_hostname* 传入一个值。 如果 " +"*server_hostname* 为空字符串,则主机名匹配会被禁用(这是一个严重的安全风险,使得潜在的中间人攻击成为可能)。" + +#: ../../library/asyncio-eventloop.rst:418 +msgid "" +"*family*, *proto*, *flags* are the optional address family, protocol and " +"flags to be passed through to getaddrinfo() for *host* resolution. If given," +" these should all be integers from the corresponding :mod:`socket` module " +"constants." +msgstr "" +"*family*, *proto*, *flags* 是可选的地址族、协议和标志,它们会被传递给 getaddrinfo() 来对 *host* " +"进行解析。如果要指定的话,这些都应该是来自于 :mod:`socket` 模块的对应常量。" + +#: ../../library/asyncio-eventloop.rst:423 +msgid "" +"*happy_eyeballs_delay*, if given, enables Happy Eyeballs for this " +"connection. It should be a floating-point number representing the amount of " +"time in seconds to wait for a connection attempt to complete, before " +"starting the next attempt in parallel. This is the \"Connection Attempt " +"Delay\" as defined in :rfc:`8305`. A sensible default value recommended by " +"the RFC is ``0.25`` (250 milliseconds)." +msgstr "" +"如果给出 *happy_eyeballs_delay*,它将为此链接启用 Happy Eyeballs。 " +"该函数应当为一个表示在开始下一个并行尝试之前要等待连接尝试完成的秒数的浮点数。 这也就是在 :rfc:`8305` 中定义的 \"连接尝试延迟\"。 该" +" RFC 所推荐的合理默认值为 ``0.25`` (250 毫秒)。" + +#: ../../library/asyncio-eventloop.rst:431 +msgid "" +"*interleave* controls address reordering when a host name resolves to " +"multiple IP addresses. If ``0`` or unspecified, no reordering is done, and " +"addresses are tried in the order returned by :meth:`getaddrinfo`. If a " +"positive integer is specified, the addresses are interleaved by address " +"family, and the given integer is interpreted as \"First Address Family " +"Count\" as defined in :rfc:`8305`. The default is ``0`` if " +"*happy_eyeballs_delay* is not specified, and ``1`` if it is." +msgstr "" +"*interleave* 控制当主机名解析为多个 IP 地址时的地址重排序。 如果该参数为 ``0`` 或未指定,则不会进行重排序,这些地址会按 " +":meth:`getaddrinfo` 所返回的顺序进行尝试。 如果指定了一个正整数,这些地址会按地址族交错排列,而指定的整数会被解读为 " +":rfc:`8305` 所定义的 \"首个地址族计数\"。 如果 *happy_eyeballs_delay* 未指定则默认值为 ``0``,否则为 " +"``1``。" + +#: ../../library/asyncio-eventloop.rst:440 +msgid "" +"*sock*, if given, should be an existing, already connected " +":class:`socket.socket` object to be used by the transport. If *sock* is " +"given, none of *host*, *port*, *family*, *proto*, *flags*, " +"*happy_eyeballs_delay*, *interleave* and *local_addr* should be specified." +msgstr "" +"如果给出 *sock*,它应当是一个已存在、已连接并将被传输所使用的 :class:`socket.socket` 对象。 如果给出了 *sock*,则" +" *host*, *port*, *family*, *proto*, *flags*, *happy_eyeballs_delay*, " +"*interleave* 和 *local_addr* 都不应当被指定。" + +#: ../../library/asyncio-eventloop.rst:446 +msgid "" +"*local_addr*, if given, is a ``(local_host, local_port)`` tuple used to bind" +" the socket locally. The *local_host* and *local_port* are looked up using " +"``getaddrinfo()``, similarly to *host* and *port*." +msgstr "" +"如果给出 *local_addr*,它应当是一个用来在本地绑定套接字的 ``(local_host, local_port)`` 元组。 " +"*local_host* 和 *local_port* 会使用 ``getaddrinfo()`` 来查找,这与 *host* 和 *port* 类似。" + +#: ../../library/asyncio-eventloop.rst:450 +#: ../../library/asyncio-eventloop.rst:808 +msgid "" +"*ssl_handshake_timeout* is (for a TLS connection) the time in seconds to " +"wait for the TLS handshake to complete before aborting the connection. " +"``60.0`` seconds if ``None`` (default)." +msgstr "" +"*ssl_handshake_timeout* 是(用于 TLS 连接的)在放弃连接之前要等待 TLS 握手完成的秒数。 如果参数为 ``None`` " +"则使用 (默认的) ``60.0``。" + +#: ../../library/asyncio-eventloop.rst:456 +msgid "Added the *happy_eyeballs_delay* and *interleave* parameters." +msgstr "增加了 *happy_eyeballs_delay* 和 *interleave* 形参。" + +#: ../../library/asyncio-eventloop.rst:458 +msgid "" +"Happy Eyeballs Algorithm: Success with Dual-Stack Hosts. When a server's " +"IPv4 path and protocol are working, but the server's IPv6 path and protocol " +"are not working, a dual-stack client application experiences significant " +"connection delay compared to an IPv4-only client. This is undesirable " +"because it causes the dual- stack client to have a worse user experience. " +"This document specifies requirements for algorithms that reduce this user-" +"visible delay and provides an algorithm." +msgstr "" +"Happy Eyeballs 算法:成功使用双栈主机。 当服务器的 IPv4 路径和协议工作正常,但服务器的 IPv6 " +"路径和协议工作不正常时,双栈客户端应用程序相比单独 IPv4 客户端会感受到明显的连接延迟。 这是不可接受的因为它会导致双栈客户端糟糕的用户体验。 " +"此文档指明了减少这种用户可见延迟的算法要求并提供了具体的算法。" + +#: ../../library/asyncio-eventloop.rst:467 +msgid "For more information: https://tools.ietf.org/html/rfc6555" +msgstr "详情参见: https://tools.ietf.org/html/rfc6555" + +#: ../../library/asyncio-eventloop.rst:471 +#: ../../library/asyncio-eventloop.rst:588 +#: ../../library/asyncio-eventloop.rst:746 +msgid "The *ssl_handshake_timeout* parameter." +msgstr "*ssl_handshake_timeout* 形参。" + +#: ../../library/asyncio-eventloop.rst:475 +#: ../../library/asyncio-eventloop.rst:676 +msgid "" +"The socket option :py:data:`~socket.TCP_NODELAY` is set by default for all " +"TCP connections." +msgstr "套接字选项 :py:data:`~socket.TCP_NODELAY` 默认已为所有 TCP 连接进行了设置。" + +#: ../../library/asyncio-eventloop.rst:480 +#: ../../library/asyncio-eventloop.rst:681 +msgid "Added support for SSL/TLS in :class:`ProactorEventLoop`." +msgstr ":class:`ProactorEventLoop` 类中添加 SSL/TLS 支持。" + +#: ../../library/asyncio-eventloop.rst:484 +msgid "" +"The :func:`open_connection` function is a high-level alternative API. It " +"returns a pair of (:class:`StreamReader`, :class:`StreamWriter`) that can be" +" used directly in async/await code." +msgstr "" +":func:`open_connection` 函数是一个高层级的替代 API。 它返回一对 (:class:`StreamReader`, " +":class:`StreamWriter`),可在 async/await 代码中直接使用。" + +#: ../../library/asyncio-eventloop.rst:495 +msgid "" +"The parameter *reuse_address* is no longer supported, as using " +":py:data:`~sockets.SO_REUSEADDR` poses a significant security concern for " +"UDP. Explicitly passing ``reuse_address=True`` will raise an exception." +msgstr "" +"形参 *reuse_address* 已不再受支持,因为使用 :py:data:`~sockets.SO_REUSEADDR` 会对 UDP " +"造成显著的安全问题。 显式地传入 ``reuse_address=True`` 将会引发异常。" + +#: ../../library/asyncio-eventloop.rst:499 +msgid "" +"When multiple processes with differing UIDs assign sockets to an identical " +"UDP socket address with ``SO_REUSEADDR``, incoming packets can become " +"randomly distributed among the sockets." +msgstr "" +"当具有不同 UID 的多个进程将套接字赋给具有 ``SO_REUSEADDR`` 的相同 UDP 套接字地址时,传入的数据包可能会在套接字间随机分配。" + +#: ../../library/asyncio-eventloop.rst:503 +msgid "" +"For supported platforms, *reuse_port* can be used as a replacement for " +"similar functionality. With *reuse_port*, :py:data:`~sockets.SO_REUSEPORT` " +"is used instead, which specifically prevents processes with differing UIDs " +"from assigning sockets to the same socket address." +msgstr "" +"对于受支持的平台,*reuse_port* 可以被用作类似功能的替代。 通过 *reuse_port* 将改用 " +":py:data:`~sockets.SO_REUSEPORT`,它能够防止具有不同 UID 的进程将套接字赋给相同的套接字地址。" + +#: ../../library/asyncio-eventloop.rst:509 +msgid "Create a datagram connection." +msgstr "创建一个数据报连接。" + +#: ../../library/asyncio-eventloop.rst:511 +msgid "" +"The socket family can be either :py:data:`~socket.AF_INET`, " +":py:data:`~socket.AF_INET6`, or :py:data:`~socket.AF_UNIX`, depending on " +"*host* (or the *family* argument, if provided)." +msgstr "" +"套接字族可以是 :py:data:`~socket.AF_INET`, :py:data:`~socket.AF_INET6` 或 " +":py:data:`~socket.AF_UNIX`,具体取决于 *host* (或 *family* 参数,如果有提供的话)。" + +#: ../../library/asyncio-eventloop.rst:515 +msgid "The socket type will be :py:data:`~socket.SOCK_DGRAM`." +msgstr "socket类型将是 :py:data:`~socket.SOCK_DGRAM` 。" + +#: ../../library/asyncio-eventloop.rst:517 +#: ../../library/asyncio-eventloop.rst:613 +#: ../../library/asyncio-eventloop.rst:729 +msgid "" +"*protocol_factory* must be a callable returning a :ref:`protocol ` implementation." +msgstr "*protocol_factory* 必须为一个返回 :ref:`协议 ` 实现的可调用对象。" + +#: ../../library/asyncio-eventloop.rst:520 +#: ../../library/asyncio-eventloop.rst:574 +msgid "A tuple of ``(transport, protocol)`` is returned on success." +msgstr "成功时返回一个 ``(transport, protocol)`` 元组。" + +#: ../../library/asyncio-eventloop.rst:524 +msgid "" +"*local_addr*, if given, is a ``(local_host, local_port)`` tuple used to bind" +" the socket locally. The *local_host* and *local_port* are looked up using " +":meth:`getaddrinfo`." +msgstr "" +"如果给出 *local_addr*,它应当是一个用来在本地绑定套接字的 ``(local_host, local_port)`` 元组。 " +"*local_host* 和 *local_port* 是使用 :meth:`getaddrinfo` 来查找的。" + +#: ../../library/asyncio-eventloop.rst:528 +msgid "" +"*remote_addr*, if given, is a ``(remote_host, remote_port)`` tuple used to " +"connect the socket to a remote address. The *remote_host* and *remote_port*" +" are looked up using :meth:`getaddrinfo`." +msgstr "" +"*remote_addr*,如果指定的话,就是一个 ``(remote_host, remote_port)`` " +"元组,用于同一个远程地址连接。*remote_host* 和 *remote_port* 是使用 :meth:`getaddrinfo` 来查找的。" + +#: ../../library/asyncio-eventloop.rst:532 +msgid "" +"*family*, *proto*, *flags* are the optional address family, protocol and " +"flags to be passed through to :meth:`getaddrinfo` for *host* resolution. If " +"given, these should all be integers from the corresponding :mod:`socket` " +"module constants." +msgstr "" +"*family*, *proto*, *flags* 是可选的地址族,协议和标志,其会被传递给 :meth:`getaddrinfo` 来完成 " +"*host* 的解析。如果要指定的话,这些都应该是来自于 :mod:`socket` 模块的对应常量。" + +#: ../../library/asyncio-eventloop.rst:537 +msgid "" +"*reuse_port* tells the kernel to allow this endpoint to be bound to the same" +" port as other existing endpoints are bound to, so long as they all set this" +" flag when being created. This option is not supported on Windows and some " +"Unixes. If the :py:data:`~socket.SO_REUSEPORT` constant is not defined then " +"this capability is unsupported." +msgstr "" +"*reuse_port* 告知内核,只要在创建时都设置了这个旗标,就允许此端点绑定到其他现有端点所绑定的相同端口上。 这个选项在 Windows 和某些" +" Unix 上不受支持。 如果 :py:data:`~socket.SO_REUSEPORT` 常量未定义则此功能就是不受支持的。" + +#: ../../library/asyncio-eventloop.rst:543 +msgid "" +"*allow_broadcast* tells the kernel to allow this endpoint to send messages " +"to the broadcast address." +msgstr "*allow_broadcast* 告知内核允许此端点向广播地址发送消息。" + +#: ../../library/asyncio-eventloop.rst:546 +msgid "" +"*sock* can optionally be specified in order to use a preexisting, already " +"connected, :class:`socket.socket` object to be used by the transport. If " +"specified, *local_addr* and *remote_addr* should be omitted (must be " +":const:`None`)." +msgstr "" +"*sock* 可选择通过指定此值用于使用一个预先存在的,已经处于连接状态的 :class:`socket.socket` " +"对象,并将其提供给此传输对象使用。如果指定了这个值, *local_addr* 和 *remote_addr* 就应该被忽略 (必须为 " +":const:`None`)。" + +#: ../../library/asyncio-eventloop.rst:551 +msgid "" +"See :ref:`UDP echo client protocol ` and " +":ref:`UDP echo server protocol ` examples." +msgstr "" +"参见 :ref:`UDP echo 客户端协议 ` 和 :ref:`UDP " +"echo 服务端协议 ` 的例子。" + +#: ../../library/asyncio-eventloop.rst:554 +msgid "" +"The *family*, *proto*, *flags*, *reuse_address*, *reuse_port, " +"*allow_broadcast*, and *sock* parameters were added." +msgstr "" +"添加了 *family*, *proto*, *flags*, *reuse_address*, *reuse_port*, " +"*allow_broadcast* 和 *sock* 等参数。" + +#: ../../library/asyncio-eventloop.rst:558 +msgid "" +"The *reuse_address* parameter is no longer supported due to security " +"concerns." +msgstr "出于安全考虑,*reuse_address* 形参已不再受支持。" + +#: ../../library/asyncio-eventloop.rst:562 +msgid "Added support for Windows." +msgstr "添加WIndows的支持。" + +#: ../../library/asyncio-eventloop.rst:569 +msgid "Create a Unix connection." +msgstr "创建Unix 连接" + +#: ../../library/asyncio-eventloop.rst:571 +msgid "" +"The socket family will be :py:data:`~socket.AF_UNIX`; socket type will be " +":py:data:`~socket.SOCK_STREAM`." +msgstr "" +"套接字族将为 :py:data:`~socket.AF_UNIX`;套接字类型将为 :py:data:`~socket.SOCK_STREAM`。" + +#: ../../library/asyncio-eventloop.rst:576 +msgid "" +"*path* is the name of a Unix domain socket and is required, unless a *sock* " +"parameter is specified. Abstract Unix sockets, :class:`str`, " +":class:`bytes`, and :class:`~pathlib.Path` paths are supported." +msgstr "" +"*path* 是所要求的 Unix 域套接字的名字,除非指定了 *sock* 形参。 抽象的 Unix 套接字, :class:`str`, " +":class:`bytes` 和 :class:`~pathlib.Path` 路径都是受支持的。" + +#: ../../library/asyncio-eventloop.rst:581 +msgid "" +"See the documentation of the :meth:`loop.create_connection` method for " +"information about arguments to this method." +msgstr "请查看 :meth:`loop.create_connection` 方法的文档了解有关此方法的参数的信息。" + +#: ../../library/asyncio-eventloop.rst:585 +#: ../../library/asyncio-eventloop.rst:710 +#: ../../library/asyncio-eventloop.rst:1066 +msgid ":ref:`Availability `: Unix." +msgstr ":ref:`可用性 `: Unix。" + +#: ../../library/asyncio-eventloop.rst:592 +msgid "The *path* parameter can now be a :term:`path-like object`." +msgstr "*path* 形参现在可以是 :term:`path-like object` 对象。" + +#: ../../library/asyncio-eventloop.rst:596 +msgid "Creating network servers" +msgstr "创建网络服务" + +#: ../../library/asyncio-eventloop.rst:606 +msgid "" +"Create a TCP server (socket type :data:`~socket.SOCK_STREAM`) listening on " +"*port* of the *host* address." +msgstr "" +"创建TCP服务 (socket 类型 :data:`~socket.SOCK_STREAM` ) 监听 *host* 地址的 *port* 端口。" + +#: ../../library/asyncio-eventloop.rst:609 +msgid "Returns a :class:`Server` object." +msgstr "返回一个 :class:`Server` 对象。" + +#: ../../library/asyncio-eventloop.rst:611 +msgid "Arguments:" +msgstr "参数:" + +#: ../../library/asyncio-eventloop.rst:616 +msgid "" +"The *host* parameter can be set to several types which determine where the " +"server would be listening:" +msgstr "*host* 形参可被设为几种类型,它确定了服务器所应监听的位置:" + +#: ../../library/asyncio-eventloop.rst:619 +msgid "" +"If *host* is a string, the TCP server is bound to a single network interface" +" specified by *host*." +msgstr "如果 *host* 是一个字符串,则 TCP 服务器会被绑定到 *host* 所指明的单一网络接口。" + +#: ../../library/asyncio-eventloop.rst:622 +msgid "" +"If *host* is a sequence of strings, the TCP server is bound to all network " +"interfaces specified by the sequence." +msgstr "如果 *host* 是一个字符串序列,则 TCP 服务器会被绑定到序列所指明的所有网络接口。" + +#: ../../library/asyncio-eventloop.rst:625 +msgid "" +"If *host* is an empty string or ``None``, all interfaces are assumed and a " +"list of multiple sockets will be returned (most likely one for IPv4 and " +"another one for IPv6)." +msgstr "" +"如果 *host* 是一个空字符串或 ``None``,则会应用所有接口并将返回包含多个套接字的列表(通常是一个 IPv4 的加一个 IPv6 的)。" + +#: ../../library/asyncio-eventloop.rst:629 +msgid "" +"The *port* parameter can be set to specify which port the server should " +"listen on. If ``0`` or ``None`` (the default), a random unused port will be " +"selected (note that if *host* resolves to multiple network interfaces, a " +"different random port will be selected for each interface)." +msgstr "" +"可以设置 *port* 参数来指定服务器应该监听哪个端口。如果为 ``0`` 或者 ``None`` (默认),将选择一个随机的未使用的端口(注意,如果" +" *host* 解析到多个网络接口,将为每个接口选择一个不同的随机端口)。" + +#: ../../library/asyncio-eventloop.rst:634 +msgid "" +"*family* can be set to either :data:`socket.AF_INET` or " +":data:`~socket.AF_INET6` to force the socket to use IPv4 or IPv6. If not " +"set, the *family* will be determined from host name (defaults to " +":data:`~socket.AF_UNSPEC`)." +msgstr "" +"*family* 可被设为 :data:`socket.AF_INET` 或 :data:`~socket.AF_INET6` 以强制此套接字使用 " +"IPv4 或 IPv6。 如果未设定,则 *family* 将通过主机名称来确定 (默认为 :data:`~socket.AF_UNSPEC`)。" + +#: ../../library/asyncio-eventloop.rst:639 +msgid "*flags* is a bitmask for :meth:`getaddrinfo`." +msgstr "*flags* 是用于 :meth:`getaddrinfo` 的位掩码。" + +#: ../../library/asyncio-eventloop.rst:641 +msgid "" +"*sock* can optionally be specified in order to use a preexisting socket " +"object. If specified, *host* and *port* must not be specified." +msgstr "可以选择指定 *sock* 以便使用预先存在的套接字对象。 如果指定了此参数,则不可再指定 *host* 和 *port*。" + +#: ../../library/asyncio-eventloop.rst:644 +msgid "" +"*backlog* is the maximum number of queued connections passed to " +":meth:`~socket.socket.listen` (defaults to 100)." +msgstr "*backlog* 是传递给 :meth:`~socket.socket.listen` 的最大排队连接的数量(默认为100)。" + +#: ../../library/asyncio-eventloop.rst:647 +msgid "" +"*ssl* can be set to an :class:`~ssl.SSLContext` instance to enable TLS over " +"the accepted connections." +msgstr "*ssl* 可被设置为一个 :class:`~ssl.SSLContext` 实例以在所接受的连接上启用 TLS。" + +#: ../../library/asyncio-eventloop.rst:650 +msgid "" +"*reuse_address* tells the kernel to reuse a local socket in ``TIME_WAIT`` " +"state, without waiting for its natural timeout to expire. If not specified " +"will automatically be set to ``True`` on Unix." +msgstr "" +"*reuse_address* 告知内核要重用一个处于 ``TIME_WAIT`` 状态的本地套接字,而不是等待其自然超时失效。 如果未指定此参数则在 " +"Unix 上将自动设置为 ``True``。" + +#: ../../library/asyncio-eventloop.rst:655 +msgid "" +"*reuse_port* tells the kernel to allow this endpoint to be bound to the same" +" port as other existing endpoints are bound to, so long as they all set this" +" flag when being created. This option is not supported on Windows." +msgstr "" +"*reuse_port* 告知内核,只要在创建的时候都设置了这个标志,就允许此端点绑定到其它端点列表所绑定的同样的端口上。这个选项在 Windows " +"上是不支持的。" + +#: ../../library/asyncio-eventloop.rst:660 +msgid "" +"*ssl_handshake_timeout* is (for a TLS server) the time in seconds to wait " +"for the TLS handshake to complete before aborting the connection. ``60.0`` " +"seconds if ``None`` (default)." +msgstr "" +"*ssl_handshake_timeout* 是(用于 TLS 服务器的)在放弃连接之前要等待 TLS 握手完成的秒数。 如果参数为 (默认值) " +"``None`` 则为 ``60.0`` 秒。" + +#: ../../library/asyncio-eventloop.rst:664 +msgid "" +"*start_serving* set to ``True`` (the default) causes the created server to " +"start accepting connections immediately. When set to ``False``, the user " +"should await on :meth:`Server.start_serving` or :meth:`Server.serve_forever`" +" to make the server to start accepting connections." +msgstr "" +"*start_serving* 设置成 ``True`` (默认值) 会导致创建server并立即开始接受连接。设置成 ``False`` " +",用户需要等待 :meth:`Server.start_serving` 或者 :meth:`Server.serve_forever` " +"以使server开始接受连接。" + +#: ../../library/asyncio-eventloop.rst:672 +msgid "Added *ssl_handshake_timeout* and *start_serving* parameters." +msgstr "增加了 *ssl_handshake_timeout* 和 *start_serving* 形参。" + +#: ../../library/asyncio-eventloop.rst:685 +msgid "The *host* parameter can be a sequence of strings." +msgstr "*host* 形参可以是一个字符串的序列。" + +#: ../../library/asyncio-eventloop.rst:689 +msgid "" +"The :func:`start_server` function is a higher-level alternative API that " +"returns a pair of :class:`StreamReader` and :class:`StreamWriter` that can " +"be used in an async/await code." +msgstr "" +":func:`start_server` 函数是一个高层级的替代 API,它返回一对 :class:`StreamReader` 和 " +":class:`StreamWriter`,可在 async/await 代码中使用。" + +#: ../../library/asyncio-eventloop.rst:698 +msgid "" +"Similar to :meth:`loop.create_server` but works with the " +":py:data:`~socket.AF_UNIX` socket family." +msgstr "与 :meth:`loop.create_server` 类似但是专用于 :py:data:`~socket.AF_UNIX` 套接字族。" + +#: ../../library/asyncio-eventloop.rst:701 +msgid "" +"*path* is the name of a Unix domain socket, and is required, unless a *sock*" +" argument is provided. Abstract Unix sockets, :class:`str`, :class:`bytes`," +" and :class:`~pathlib.Path` paths are supported." +msgstr "" +"*path* 是必要的 Unix 域套接字名称,除非提供了 *sock* 参数。 抽象的 Unix 套接字, :class:`str`, " +":class:`bytes` 和 :class:`~pathlib.Path` 路径都是受支持的。" + +#: ../../library/asyncio-eventloop.rst:706 +msgid "" +"See the documentation of the :meth:`loop.create_server` method for " +"information about arguments to this method." +msgstr "请查看 :meth:`loop.create_server` 方法的文档了解有关此方法的参数的信息。" + +#: ../../library/asyncio-eventloop.rst:713 +msgid "The *ssl_handshake_timeout* and *start_serving* parameters." +msgstr " *ssl_handshake_timeout* 和 *start_serving* 形参。" + +#: ../../library/asyncio-eventloop.rst:717 +msgid "The *path* parameter can now be a :class:`~pathlib.Path` object." +msgstr "*path* 形参现在可以是 :class:`~pathlib.Path` 对象。" + +#: ../../library/asyncio-eventloop.rst:722 +msgid "Wrap an already accepted connection into a transport/protocol pair." +msgstr "将已被接受的连接包装成一个传输/协议对。" + +#: ../../library/asyncio-eventloop.rst:724 +msgid "" +"This method can be used by servers that accept connections outside of " +"asyncio but that use asyncio to handle them." +msgstr "此方法可被服务器用来接受 asyncio 以外的连接,但是使用 asyncio 来处理它们。" + +#: ../../library/asyncio-eventloop.rst:727 +#: ../../library/asyncio-eventloop.rst:794 +msgid "Parameters:" +msgstr "参数:" + +#: ../../library/asyncio-eventloop.rst:732 +msgid "" +"*sock* is a preexisting socket object returned from :meth:`socket.accept " +"`." +msgstr "" +"*sock* 是一个预先存在的套接字对象,它是由 :meth:`socket.accept ` 返回的。" + +#: ../../library/asyncio-eventloop.rst:735 +msgid "" +"*ssl* can be set to an :class:`~ssl.SSLContext` to enable SSL over the " +"accepted connections." +msgstr "*ssl* 可被设置为一个 :class:`~ssl.SSLContext` 以在接受的连接上启用 SSL。" + +#: ../../library/asyncio-eventloop.rst:738 +msgid "" +"*ssl_handshake_timeout* is (for an SSL connection) the time in seconds to " +"wait for the SSL handshake to complete before aborting the connection. " +"``60.0`` seconds if ``None`` (default)." +msgstr "" +"*ssl_handshake_timeout* 是(为一个SSL连接)在中止连接前,等待SSL握手完成的时间【单位秒】。如果为 ``None`` " +"(缺省) 则是 ``60.0`` 秒。" + +#: ../../library/asyncio-eventloop.rst:742 +msgid "Returns a ``(transport, protocol)`` pair." +msgstr "返回一个 ``(transport, protocol)`` 对。" + +#: ../../library/asyncio-eventloop.rst:752 +msgid "Transferring files" +msgstr "传输文件" + +#: ../../library/asyncio-eventloop.rst:757 +msgid "" +"Send a *file* over a *transport*. Return the total number of bytes sent." +msgstr "将 *file* 通过 *transport* 发送。 返回所发送的字节总数。" + +#: ../../library/asyncio-eventloop.rst:760 +msgid "The method uses high-performance :meth:`os.sendfile` if available." +msgstr "如果可用的话,该方法将使用高性能的 :meth:`os.sendfile`。" + +#: ../../library/asyncio-eventloop.rst:762 +msgid "*file* must be a regular file object opened in binary mode." +msgstr "*file* 必须是个二进制模式打开的常规文件对象。" + +#: ../../library/asyncio-eventloop.rst:764 +#: ../../library/asyncio-eventloop.rst:954 +msgid "" +"*offset* tells from where to start reading the file. If specified, *count* " +"is the total number of bytes to transmit as opposed to sending the file " +"until EOF is reached. File position is always updated, even when this method" +" raises an error, and :meth:`file.tell() ` can be used to " +"obtain the actual number of bytes sent." +msgstr "" +"*offset* 指明从何处开始读取文件。 如果指定了 *count*,它是要传输的字节总数而不再一直发送文件直至抵达 EOF。 " +"文件位置总是会被更新,即使此方法引发了错误,并可以使用 :meth:`file.tell() ` " +"来获取实际发送的字节总数。" + +#: ../../library/asyncio-eventloop.rst:771 +msgid "" +"*fallback* set to ``True`` makes asyncio to manually read and send the file " +"when the platform does not support the sendfile system call (e.g. Windows or" +" SSL socket on Unix)." +msgstr "" +"*fallback* 设为 ``True`` 会使得 asyncio 在平台不支持 sendfile 系统调用时手动读取并发送文件(例如 Windows" +" 或 Unix 上的 SSL 套接字)。" + +#: ../../library/asyncio-eventloop.rst:775 +msgid "" +"Raise :exc:`SendfileNotAvailableError` if the system does not support the " +"*sendfile* syscall and *fallback* is ``False``." +msgstr "" +"如果系统不支持 *sendfile* 系统调用且 *fallback* 为 ``False`` 则会引发 " +":exc:`SendfileNotAvailableError`。" + +#: ../../library/asyncio-eventloop.rst:782 +msgid "TLS Upgrade" +msgstr "TLS 升级" + +#: ../../library/asyncio-eventloop.rst:788 +msgid "Upgrade an existing transport-based connection to TLS." +msgstr "将现有基于传输的连接升级到 TLS。" + +#: ../../library/asyncio-eventloop.rst:790 +msgid "" +"Return a new transport instance, that the *protocol* must start using " +"immediately after the *await*. The *transport* instance passed to the " +"*start_tls* method should never be used again." +msgstr "" +"返回一个新的传输实例,其中 *protocol* 必须在 *await* 之后立即开始使用。 传给 *start_tls* 方法的 " +"*transport* 实例应永远不会被再次使用。" + +#: ../../library/asyncio-eventloop.rst:796 +msgid "" +"*transport* and *protocol* instances that methods like " +":meth:`~loop.create_server` and :meth:`~loop.create_connection` return." +msgstr "" +"*transport* 和 *protocol* 实例的方法与 :meth:`~loop.create_server` 和 " +":meth:`~loop.create_connection` 所返回的类似。" + +#: ../../library/asyncio-eventloop.rst:800 +msgid "*sslcontext*: a configured instance of :class:`~ssl.SSLContext`." +msgstr "*sslcontext* :一个已经配置好的 :class:`~ssl.SSLContext` 实例。" + +#: ../../library/asyncio-eventloop.rst:802 +msgid "" +"*server_side* pass ``True`` when a server-side connection is being upgraded " +"(like the one created by :meth:`~loop.create_server`)." +msgstr "" +"当服务端连接已升级时 (如 :meth:`~loop.create_server` 所创建的对象) *server_side* 会传入 " +"``True``。" + +#: ../../library/asyncio-eventloop.rst:805 +msgid "" +"*server_hostname*: sets or overrides the host name that the target server's " +"certificate will be matched against." +msgstr "*server_hostname* :设置或者覆盖目标服务器证书中相对应的主机名。" + +#: ../../library/asyncio-eventloop.rst:816 +msgid "Watching file descriptors" +msgstr "监控文件描述符" + +#: ../../library/asyncio-eventloop.rst:820 +msgid "" +"Start monitoring the *fd* file descriptor for read availability and invoke " +"*callback* with the specified arguments once *fd* is available for reading." +msgstr "开始监视 *fd* 文件描述符以获取读取的可用性,一旦 *fd* 可用于读取,使用指定的参数调用 *callback* 。" + +#: ../../library/asyncio-eventloop.rst:826 +msgid "Stop monitoring the *fd* file descriptor for read availability." +msgstr "停止对文件描述符 *fd* 读取可用性的监视。" + +#: ../../library/asyncio-eventloop.rst:830 +msgid "" +"Start monitoring the *fd* file descriptor for write availability and invoke " +"*callback* with the specified arguments once *fd* is available for writing." +msgstr "开始监视 *fd* 文件描述符的写入可用性,一旦 *fd* 可用于写入,使用指定的参数调用 *callback* 。" + +#: ../../library/asyncio-eventloop.rst:834 +#: ../../library/asyncio-eventloop.rst:1053 +msgid "" +"Use :func:`functools.partial` :ref:`to pass keyword arguments ` to *callback*." +msgstr "" +"使用 :func:`functools.partial` :ref:`传递关键字参数 ` 给 " +"*callback*." + +#: ../../library/asyncio-eventloop.rst:839 +msgid "Stop monitoring the *fd* file descriptor for write availability." +msgstr "停止对文件描述符 *fd* 的写入可用性监视。" + +#: ../../library/asyncio-eventloop.rst:841 +msgid "" +"See also :ref:`Platform Support ` section for some" +" limitations of these methods." +msgstr "另请查看 :ref:`平台支持 ` 一节了解以上方法的某些限制。" + +#: ../../library/asyncio-eventloop.rst:846 +msgid "Working with socket objects directly" +msgstr "直接使用 socket 对象" + +#: ../../library/asyncio-eventloop.rst:848 +msgid "" +"In general, protocol implementations that use transport-based APIs such as " +":meth:`loop.create_connection` and :meth:`loop.create_server` are faster " +"than implementations that work with sockets directly. However, there are " +"some use cases when performance is not critical, and working with " +":class:`~socket.socket` objects directly is more convenient." +msgstr "" +"通常,使用基于传输的 API 的协议实现,例如 :meth:`loop.create_connection` 和 " +":meth:`loop.create_server` 比直接使用套接字的实现更快。 但是,在某些应用场景下性能并不非常重要,直接使用 " +":class:`~socket.socket` 对象会更方便。" + +#: ../../library/asyncio-eventloop.rst:857 +msgid "" +"Receive up to *nbytes* from *sock*. Asynchronous version of " +":meth:`socket.recv() `." +msgstr "" +"从 *sock* 接收至多 *nbytes*。 :meth:`socket.recv() ` 的异步版本。" + +#: ../../library/asyncio-eventloop.rst:860 +msgid "Return the received data as a bytes object." +msgstr "返回接收到的数据【bytes对象类型】。" + +#: ../../library/asyncio-eventloop.rst:862 +#: ../../library/asyncio-eventloop.rst:876 +#: ../../library/asyncio-eventloop.rst:891 +#: ../../library/asyncio-eventloop.rst:904 +#: ../../library/asyncio-eventloop.rst:930 +#: ../../library/asyncio-eventloop.rst:968 +msgid "*sock* must be a non-blocking socket." +msgstr "*sock* 必须是个非阻塞socket。" + +#: ../../library/asyncio-eventloop.rst:864 +msgid "" +"Even though this method was always documented as a coroutine method, " +"releases before Python 3.7 returned a :class:`Future`. Since Python 3.7 this" +" is an ``async def`` method." +msgstr "" +"虽然这个方法总是被记录为协程方法,但它在 Python 3.7 之前的发行版中会返回一个 :class:`Future`。 从 Python 3.7 " +"开始它则是一个 ``async def`` 方法。" + +#: ../../library/asyncio-eventloop.rst:871 +msgid "" +"Receive data from *sock* into the *buf* buffer. Modeled after the blocking " +":meth:`socket.recv_into() ` method." +msgstr "" +"从 *sock* 接收数据放入 *buf* 缓冲区。 模仿了阻塞型的 :meth:`socket.recv_into() " +"` 方法。" + +#: ../../library/asyncio-eventloop.rst:874 +msgid "Return the number of bytes written to the buffer." +msgstr "返回写入缓冲区的字节数。" + +#: ../../library/asyncio-eventloop.rst:882 +msgid "" +"Send *data* to the *sock* socket. Asynchronous version of " +":meth:`socket.sendall() `." +msgstr "" +"将 *data* 发送到 *sock* 套接字。 :meth:`socket.sendall() ` " +"的异步版本。" + +#: ../../library/asyncio-eventloop.rst:885 +msgid "" +"This method continues to send to the socket until either all data in *data* " +"has been sent or an error occurs. ``None`` is returned on success. On " +"error, an exception is raised. Additionally, there is no way to determine " +"how much data, if any, was successfully processed by the receiving end of " +"the connection." +msgstr "" +"此方法会持续发送数据到套接字直至 *data* 中的所有数据发送完毕或是有错误发生。 当成功时会返回 ``None``。 当发生错误时,会引发一个异常。" +" 此外,没有办法能确定有多少数据或是否有数据被连接的接收方成功处理。" + +#: ../../library/asyncio-eventloop.rst:893 +msgid "" +"Even though the method was always documented as a coroutine method, before " +"Python 3.7 it returned an :class:`Future`. Since Python 3.7, this is an " +"``async def`` method." +msgstr "" +"虽然这个方法一直被标记为协程方法。但是,Python 3.7 之前,该方法返回 :class:`Future` ,从Python 3.7 " +"开始,这个方法是 ``async def`` 方法。" + +#: ../../library/asyncio-eventloop.rst:900 +msgid "Connect *sock* to a remote socket at *address*." +msgstr "将 *sock* 连接到位于 *address* 的远程套接字。" + +#: ../../library/asyncio-eventloop.rst:902 +msgid "" +"Asynchronous version of :meth:`socket.connect() `." +msgstr ":meth:`socket.connect() ` 的异步版本。" + +#: ../../library/asyncio-eventloop.rst:906 +msgid "" +"``address`` no longer needs to be resolved. ``sock_connect`` will try to " +"check if the *address* is already resolved by calling " +":func:`socket.inet_pton`. If not, :meth:`loop.getaddrinfo` will be used to " +"resolve the *address*." +msgstr "" +"``address`` 不再需要被解析。 ``sock_connect`` 将尝试检查 *address* 是否已通过调用 " +":func:`socket.inet_pton` 被解析。 如果没有,则将使用 :meth:`loop.getaddrinfo` 来解析 " +"*address*。" + +#: ../../library/asyncio-eventloop.rst:915 +msgid "" +":meth:`loop.create_connection` and :func:`asyncio.open_connection() " +"`." +msgstr "" +":meth:`loop.create_connection` 和 :func:`asyncio.open_connection() " +"` 。" + +#: ../../library/asyncio-eventloop.rst:921 +msgid "" +"Accept a connection. Modeled after the blocking :meth:`socket.accept() " +"` method." +msgstr "接受一个连接。 模仿了阻塞型的 :meth:`socket.accept() ` 方法。" + +#: ../../library/asyncio-eventloop.rst:924 +msgid "" +"The socket must be bound to an address and listening for connections. The " +"return value is a pair ``(conn, address)`` where *conn* is a *new* socket " +"object usable to send and receive data on the connection, and *address* is " +"the address bound to the socket on the other end of the connection." +msgstr "" +"此 *scoket* 必须绑定到一个地址上并且监听连接。返回值是一个 ``(conn, address)`` 对,其中 *conn* 是一个 " +"*新*的套接字对象,用于在此连接上收发数据,*address* 是连接的另一端的套接字所绑定的地址。" + +#: ../../library/asyncio-eventloop.rst:932 +msgid "" +"Even though the method was always documented as a coroutine method, before " +"Python 3.7 it returned a :class:`Future`. Since Python 3.7, this is an " +"``async def`` method." +msgstr "" +"虽然这个方法一直被标记为协程方法。但是,Python 3.7 之前,该方法返回 :class:`Future` ,从Python 3.7 " +"开始,这个方法是 ``async def`` 方法。" + +#: ../../library/asyncio-eventloop.rst:939 +msgid ":meth:`loop.create_server` and :func:`start_server`." +msgstr ":meth:`loop.create_server` 和 :func:`start_server`。" + +#: ../../library/asyncio-eventloop.rst:944 +msgid "" +"Send a file using high-performance :mod:`os.sendfile` if possible. Return " +"the total number of bytes sent." +msgstr "在可能的情况下使用高性能的 :mod:`os.sendfile` 发送文件。 返回所发送的字节总数。" + +#: ../../library/asyncio-eventloop.rst:947 +msgid "" +"Asynchronous version of :meth:`socket.sendfile() `." +msgstr ":meth:`socket.sendfile() ` 的异步版本。" + +#: ../../library/asyncio-eventloop.rst:949 +msgid "" +"*sock* must be a non-blocking :const:`socket.SOCK_STREAM` " +":class:`~socket.socket`." +msgstr "*sock* 必须为非阻塞型的 :const:`socket.SOCK_STREAM` :class:`~socket.socket`。" + +#: ../../library/asyncio-eventloop.rst:952 +msgid "*file* must be a regular file object open in binary mode." +msgstr "*file* 必须是个用二进制方式打开的常规文件对象。" + +#: ../../library/asyncio-eventloop.rst:961 +msgid "" +"*fallback*, when set to ``True``, makes asyncio manually read and send the " +"file when the platform does not support the sendfile syscall (e.g. Windows " +"or SSL socket on Unix)." +msgstr "" +"当 *fallback* 被设为 ``True`` 时,会使用 asyncio 在平台不支持 sendfile 系统调用时手动读取并发送文件(例如 " +"Windows 或 Unix 上的 SSL 套接字)。" + +#: ../../library/asyncio-eventloop.rst:965 +msgid "" +"Raise :exc:`SendfileNotAvailableError` if the system does not support " +"*sendfile* syscall and *fallback* is ``False``." +msgstr "" +"如果系统不支持 *sendfile* 并且 *fallback* 为 ``False`` ,引发 " +":exc:`SendfileNotAvailableError` 异常。" + +#: ../../library/asyncio-eventloop.rst:974 +msgid "DNS" +msgstr "DNS" + +#: ../../library/asyncio-eventloop.rst:979 +msgid "Asynchronous version of :meth:`socket.getaddrinfo`." +msgstr "异步版的 :meth:`socket.getaddrinfo` 。" + +#: ../../library/asyncio-eventloop.rst:983 +msgid "Asynchronous version of :meth:`socket.getnameinfo`." +msgstr "异步版的 :meth:`socket.getnameinfo` 。" + +#: ../../library/asyncio-eventloop.rst:985 +msgid "" +"Both *getaddrinfo* and *getnameinfo* methods were always documented to " +"return a coroutine, but prior to Python 3.7 they were, in fact, returning " +":class:`asyncio.Future` objects. Starting with Python 3.7 both methods are " +"coroutines." +msgstr "" +"*getaddrinfo* 和 *getnameinfo* 方法一直被标记返回一个协程,但是Python 3.7之前,实际返回的是 " +":class:`asyncio.Future` 对象。从Python 3.7 开始,这两个方法是协程。" + +#: ../../library/asyncio-eventloop.rst:993 +msgid "Working with pipes" +msgstr "使用管道" + +#: ../../library/asyncio-eventloop.rst:997 +msgid "Register the read end of *pipe* in the event loop." +msgstr "在事件循环中注册 *pipe* 的读取端。" + +#: ../../library/asyncio-eventloop.rst:1002 +msgid "*pipe* is a :term:`file-like object `." +msgstr "*pipe* 是个 :term:`类似文件型对象 `." + +#: ../../library/asyncio-eventloop.rst:1004 +msgid "" +"Return pair ``(transport, protocol)``, where *transport* supports the " +":class:`ReadTransport` interface and *protocol* is an object instantiated by" +" the *protocol_factory*." +msgstr "" +"返回一对 ``(transport, protocol)``,其中 *transport* 支持 :class:`ReadTransport` 接口而 " +"*protocol* 是由 *protocol_factory* 所实例化的对象。" + +#: ../../library/asyncio-eventloop.rst:1008 +#: ../../library/asyncio-eventloop.rst:1024 +msgid "" +"With :class:`SelectorEventLoop` event loop, the *pipe* is set to non-" +"blocking mode." +msgstr "使用 :class:`SelectorEventLoop` 事件循环, *pipe* 被设置为非阻塞模式。" + +#: ../../library/asyncio-eventloop.rst:1013 +msgid "Register the write end of *pipe* in the event loop." +msgstr "在事件循环中注册 *pipe* 的写入端。" + +#: ../../library/asyncio-eventloop.rst:1018 +msgid "*pipe* is :term:`file-like object `." +msgstr "*pipe* 是个 :term:`类似文件型对象 `." + +#: ../../library/asyncio-eventloop.rst:1020 +msgid "" +"Return pair ``(transport, protocol)``, where *transport* supports " +":class:`WriteTransport` interface and *protocol* is an object instantiated " +"by the *protocol_factory*." +msgstr "" +"返回一对 ``(transport, protocol)``,其中 *transport* 支持 :class:`WriteTransport` 接口而" +" *protocol* 是由 *protocol_factory* 所实例化的对象。" + +#: ../../library/asyncio-eventloop.rst:1029 +msgid "" +":class:`SelectorEventLoop` does not support the above methods on Windows. " +"Use :class:`ProactorEventLoop` instead for Windows." +msgstr "" +"在 Windows 中 :class:`SelectorEventLoop` 不支持上述方法。 对于 Windows 请改用 " +":class:`ProactorEventLoop`。" + +#: ../../library/asyncio-eventloop.rst:1034 +msgid "" +"The :meth:`loop.subprocess_exec` and :meth:`loop.subprocess_shell` methods." +msgstr ":meth:`loop.subprocess_exec` 和 :meth:`loop.subprocess_shell` 方法。" + +#: ../../library/asyncio-eventloop.rst:1039 +msgid "Unix signals" +msgstr "Unix 信号" + +#: ../../library/asyncio-eventloop.rst:1043 +msgid "Set *callback* as the handler for the *signum* signal." +msgstr "设置 *callback* 作为 *signum* 信号的处理程序。" + +#: ../../library/asyncio-eventloop.rst:1045 +msgid "" +"The callback will be invoked by *loop*, along with other queued callbacks " +"and runnable coroutines of that event loop. Unlike signal handlers " +"registered using :func:`signal.signal`, a callback registered with this " +"function is allowed to interact with the event loop." +msgstr "" +"此回调将与该事件循环中其他加入队列的回调和可运行协程一起由 *loop* 唤起。 不同与使用 :func:`signal.signal` " +"注册的信号处理程序,使用此函数注册的回调可以与事件循环进行交互。" + +#: ../../library/asyncio-eventloop.rst:1050 +msgid "" +"Raise :exc:`ValueError` if the signal number is invalid or uncatchable. " +"Raise :exc:`RuntimeError` if there is a problem setting up the handler." +msgstr "" +"如果信号数字非法或者不可捕获,就抛出一个 :exc:`ValueError` 。如果建立处理器的过程中出现问题,会抛出一个 " +":exc:`RuntimeError` 。" + +#: ../../library/asyncio-eventloop.rst:1056 +msgid "" +"Like :func:`signal.signal`, this function must be invoked in the main " +"thread." +msgstr "和 :func:`signal.signal` 一样,这个函数只能在主线程中调用。" + +#: ../../library/asyncio-eventloop.rst:1061 +msgid "Remove the handler for the *sig* signal." +msgstr "移除 *sig* 信号的处理程序。" + +#: ../../library/asyncio-eventloop.rst:1063 +msgid "" +"Return ``True`` if the signal handler was removed, or ``False`` if no " +"handler was set for the given signal." +msgstr "如果信号处理程序被移除则返回 ``True``,否则如果给定信号未设置处理程序则返回 ``False``。" + +#: ../../library/asyncio-eventloop.rst:1070 +msgid "The :mod:`signal` module." +msgstr ":mod:`signal` 模块。" + +#: ../../library/asyncio-eventloop.rst:1074 +msgid "Executing code in thread or process pools" +msgstr "在线程或者进程池中执行代码。" + +#: ../../library/asyncio-eventloop.rst:1078 +msgid "Arrange for *func* to be called in the specified executor." +msgstr "安排在指定的执行器中调用 *func* 。" + +#: ../../library/asyncio-eventloop.rst:1080 +msgid "" +"The *executor* argument should be an :class:`concurrent.futures.Executor` " +"instance. The default executor is used if *executor* is ``None``." +msgstr "" +" *executor* 参数应该是个 :class:`concurrent.futures.Executor` 实例。如果 *executor* 为 " +"``None`` ,则使用默认的executor。" + +#: ../../library/asyncio-eventloop.rst:1124 +msgid "This method returns a :class:`asyncio.Future` object." +msgstr "这个方法返回一个 :class:`asyncio.Future` 对象。" + +#: ../../library/asyncio-eventloop.rst:1126 +msgid "" +"Use :func:`functools.partial` :ref:`to pass keyword arguments ` to *func*." +msgstr "" +"使用 :func:`functools.partial` :ref:`传递关键字参数 ` 给 " +"*func* 。" + +#: ../../library/asyncio-eventloop.rst:1129 +msgid "" +":meth:`loop.run_in_executor` no longer configures the ``max_workers`` of the" +" thread pool executor it creates, instead leaving it up to the thread pool " +"executor (:class:`~concurrent.futures.ThreadPoolExecutor`) to set the " +"default." +msgstr "" +":meth:`loop.run_in_executor` 不会再配置它所创建的线程池执行器的 ``max_workers``,而是将其留给线程池执行器 " +"(:class:`~concurrent.futures.ThreadPoolExecutor`) 来设置默认值。" + +#: ../../library/asyncio-eventloop.rst:1138 +msgid "" +"Set *executor* as the default executor used by :meth:`run_in_executor`. " +"*executor* should be an instance of " +":class:`~concurrent.futures.ThreadPoolExecutor`." +msgstr "" +"将 *executor* 设为 :meth:`run_in_executor` 所使用的默认执行器。 *executor* 应当是 " +":class:`~concurrent.futures.ThreadPoolExecutor` 的实例。" + +#: ../../library/asyncio-eventloop.rst:1142 +msgid "" +"Using an executor that is not an instance of " +":class:`~concurrent.futures.ThreadPoolExecutor` is deprecated and will " +"trigger an error in Python 3.9." +msgstr "" +"使用不是Using an executor that is not an instance of " +":class:`~concurrent.futures.ThreadPoolExecutor` 实例的执行器的做法已被弃用并将在 Python 3.9 " +"中引起错误。" + +#: ../../library/asyncio-eventloop.rst:1147 +msgid "" +"*executor* must be an instance of " +":class:`concurrent.futures.ThreadPoolExecutor`." +msgstr "*executor* 必须是个 :class:`concurrent.futures.ThreadPoolExecutor` 的实例。" + +#: ../../library/asyncio-eventloop.rst:1152 +msgid "Error Handling API" +msgstr "错误处理API" + +#: ../../library/asyncio-eventloop.rst:1154 +msgid "Allows customizing how exceptions are handled in the event loop." +msgstr "允许自定义事件循环中如何去处理异常。" + +#: ../../library/asyncio-eventloop.rst:1158 +msgid "Set *handler* as the new event loop exception handler." +msgstr "将 *handler* 设置为新的事件循环异常处理器。" + +#: ../../library/asyncio-eventloop.rst:1160 +msgid "" +"If *handler* is ``None``, the default exception handler will be set. " +"Otherwise, *handler* must be a callable with the signature matching ``(loop," +" context)``, where ``loop`` is a reference to the active event loop, and " +"``context`` is a ``dict`` object containing the details of the exception " +"(see :meth:`call_exception_handler` documentation for details about " +"context)." +msgstr "" +"如果 *handler* 为 ``None``,将设置默认的异常处理程序。 在其他情况下,*handler* 必须是一个可调用对象且签名匹配 " +"``(loop, context)``,其中 ``loop`` 是对活动事件循环的引用,而 ``context`` 是一个包含异常详情的 " +"``dict`` (请查看 :meth:`call_exception_handler` 文档来获取关于上下文的更多信息)。" + +#: ../../library/asyncio-eventloop.rst:1170 +msgid "" +"Return the current exception handler, or ``None`` if no custom exception " +"handler was set." +msgstr "返回当前的异常处理器,如果没有设置异常处理器,则返回 ``None`` 。" + +#: ../../library/asyncio-eventloop.rst:1177 +msgid "Default exception handler." +msgstr "默认的异常处理器。" + +#: ../../library/asyncio-eventloop.rst:1179 +msgid "" +"This is called when an exception occurs and no exception handler is set. " +"This can be called by a custom exception handler that wants to defer to the " +"default handler behavior." +msgstr "此方法会在发生异常且未设置异常处理程序时被调用。 此方法也可以由想要具有不同于默认处理程序的行为的自定义异常处理程序来调用。" + +#: ../../library/asyncio-eventloop.rst:1183 +msgid "" +"*context* parameter has the same meaning as in " +":meth:`call_exception_handler`." +msgstr "*context* 参数和 :meth:`call_exception_handler` 中的同名参数完全相同。" + +#: ../../library/asyncio-eventloop.rst:1188 +msgid "Call the current event loop exception handler." +msgstr "调用当前事件循环的异常处理器。" + +#: ../../library/asyncio-eventloop.rst:1190 +msgid "" +"*context* is a ``dict`` object containing the following keys (new keys may " +"be introduced in future Python versions):" +msgstr "*context* 是个包含下列键的 ``dict`` 对象(未来版本的Python可能会引入新键):" + +#: ../../library/asyncio-eventloop.rst:1193 +msgid "'message': Error message;" +msgstr "'message': 错误消息;" + +#: ../../library/asyncio-eventloop.rst:1194 +msgid "'exception' (optional): Exception object;" +msgstr "'exception' (可选): 异常对象;" + +#: ../../library/asyncio-eventloop.rst:1195 +msgid "'future' (optional): :class:`asyncio.Future` instance;" +msgstr "'future' (可选): :class:`asyncio.Future` 实例;" + +#: ../../library/asyncio-eventloop.rst:1196 +msgid "'task' (optional): :class:`asyncio.Task` instance;" +msgstr "'task' (可选): :class:`asyncio.Task` 实例;" + +#: ../../library/asyncio-eventloop.rst:1197 +msgid "'handle' (optional): :class:`asyncio.Handle` instance;" +msgstr "'handle' (可选): :class:`asyncio.Handle` 实例;" + +#: ../../library/asyncio-eventloop.rst:1198 +msgid "'protocol' (optional): :ref:`Protocol ` instance;" +msgstr "'protocol' (可选): :ref:`Protocol ` 实例;" + +#: ../../library/asyncio-eventloop.rst:1199 +msgid "'transport' (optional): :ref:`Transport ` instance;" +msgstr "'transport' (可选): :ref:`Transport ` 实例;" + +#: ../../library/asyncio-eventloop.rst:1200 +msgid "'socket' (optional): :class:`socket.socket` instance;" +msgstr "'socket' (可选): :class:`socket.socket` 实例;" + +#: ../../library/asyncio-eventloop.rst:1202 +msgid "'asyncgen' (optional): Asynchronous generator that caused" +msgstr "'asyncgen' (可选): 异步生成器,它导致了" + +#: ../../library/asyncio-eventloop.rst:1202 +msgid "the exception." +msgstr "这个异常" + +#: ../../library/asyncio-eventloop.rst:1206 +msgid "" +"This method should not be overloaded in subclassed event loops. For custom " +"exception handling, use the :meth:`set_exception_handler()` method." +msgstr "" +"此方法不应在子类化的事件循环中被重载。 对于自定义的异常处理,请使用 :meth:`set_exception_handler()` 方法。" + +#: ../../library/asyncio-eventloop.rst:1211 +msgid "Enabling debug mode" +msgstr "开启调试模式" + +#: ../../library/asyncio-eventloop.rst:1215 +msgid "Get the debug mode (:class:`bool`) of the event loop." +msgstr "获取事件循环调试模式设置(:class:`bool`)。" + +#: ../../library/asyncio-eventloop.rst:1217 +msgid "" +"The default value is ``True`` if the environment variable " +":envvar:`PYTHONASYNCIODEBUG` is set to a non-empty string, ``False`` " +"otherwise." +msgstr "" +"如果环境变量 :envvar:`PYTHONASYNCIODEBUG` 是一个非空字符串,就返回 ``True`` ,否则就返回 ``False`` 。" + +#: ../../library/asyncio-eventloop.rst:1223 +msgid "Set the debug mode of the event loop." +msgstr "设置事件循环的调试模式。" + +#: ../../library/asyncio-eventloop.rst:1227 +msgid "" +"The new :ref:`Python Development Mode ` can now also be used to " +"enable the debug mode." +msgstr "现在也可以通过新的 :ref:`Python 开发模式 ` 来启用调试模式。" + +#: ../../library/asyncio-eventloop.rst:1232 +msgid "The :ref:`debug mode of asyncio `." +msgstr ":ref:`debug mode of asyncio `." + +#: ../../library/asyncio-eventloop.rst:1236 +msgid "Running Subprocesses" +msgstr "运行子进程" + +#: ../../library/asyncio-eventloop.rst:1238 +msgid "" +"Methods described in this subsections are low-level. In regular async/await" +" code consider using the high-level :func:`asyncio.create_subprocess_shell` " +"and :func:`asyncio.create_subprocess_exec` convenience functions instead." +msgstr "" +"本小节所描述的方法都是低层级的。 在常规 async/await 代码中请考虑改用高层级的 " +":func:`asyncio.create_subprocess_shell` 和 " +":func:`asyncio.create_subprocess_exec` 便捷函数。" + +#: ../../library/asyncio-eventloop.rst:1245 +msgid "" +"On Windows, the default event loop :class:`ProactorEventLoop` supports " +"subprocesses, whereas :class:`SelectorEventLoop` does not. See " +":ref:`Subprocess Support on Windows ` for " +"details." +msgstr "" +"在 Windows 中,默认的事件循环 :class:`ProactorEventLoop` 支持子进程,而 " +":class:`SelectorEventLoop` 不支持。参见 :ref:`Windows 中的子进程支持 ` 。" + +#: ../../library/asyncio-eventloop.rst:1254 +msgid "" +"Create a subprocess from one or more string arguments specified by *args*." +msgstr "用 *args* 指定的一个或者多个字符串型参数创建一个子进程。" + +#: ../../library/asyncio-eventloop.rst:1257 +msgid "*args* must be a list of strings represented by:" +msgstr "*args* 必须是个由下列形式的字符串组成的列表:" + +#: ../../library/asyncio-eventloop.rst:1259 +msgid ":class:`str`;" +msgstr ":class:`str`;" + +#: ../../library/asyncio-eventloop.rst:1260 +msgid "" +"or :class:`bytes`, encoded to the :ref:`filesystem encoding `." +msgstr "或者由 :ref:`文件系统编码格式 ` 编码的 :class:`bytes`。" + +#: ../../library/asyncio-eventloop.rst:1263 +msgid "" +"The first string specifies the program executable, and the remaining strings" +" specify the arguments. Together, string arguments form the ``argv`` of the" +" program." +msgstr "第一个字符串指定可执行程序,其余的字符串指定其参数。 所有字符串参数共同组成了程序的 ``argv``。" + +#: ../../library/asyncio-eventloop.rst:1267 +msgid "" +"This is similar to the standard library :class:`subprocess.Popen` class " +"called with ``shell=False`` and the list of strings passed as the first " +"argument; however, where :class:`~subprocess.Popen` takes a single argument " +"which is list of strings, *subprocess_exec* takes multiple string arguments." +msgstr "" +"此方法类似于调用标准库 :class:`subprocess.Popen` 类,设置 ``shell=False`` " +"并将字符串列表作为第一个参数传入;但是,:class:`~subprocess.Popen` 只接受一个单独的字符串列表参数,而 " +"*subprocess_exec* 接受多个字符串参数。" + +#: ../../library/asyncio-eventloop.rst:1273 +msgid "" +"The *protocol_factory* must be a callable returning a subclass of the " +":class:`asyncio.SubprocessProtocol` class." +msgstr "" +"*protocol_factory* 必须为一个返回 :class:`asyncio.SubprocessProtocol` 类的子类的可调用对象。" + +#: ../../library/asyncio-eventloop.rst:1276 +msgid "Other parameters:" +msgstr "其他参数:" + +#: ../../library/asyncio-eventloop.rst:1278 +msgid "*stdin* can be any of these:" +msgstr "*stdin* 可以是以下对象之一:" + +#: ../../library/asyncio-eventloop.rst:1280 +msgid "" +"a file-like object representing a pipe to be connected to the subprocess's " +"standard input stream using :meth:`~loop.connect_write_pipe`" +msgstr "一个文件型对象,表示要使用 :meth:`~loop.connect_write_pipe` 连接到子进程的标准输入流的管道" + +#: ../../library/asyncio-eventloop.rst:1283 +#: ../../library/asyncio-eventloop.rst:1295 +#: ../../library/asyncio-eventloop.rst:1307 +msgid "" +"the :const:`subprocess.PIPE` constant (default) which will create a new pipe" +" and connect it," +msgstr ":const:`subprocess.PIPE` 常量(默认),将创建并连接一个新的管道。" + +#: ../../library/asyncio-eventloop.rst:1285 +#: ../../library/asyncio-eventloop.rst:1297 +#: ../../library/asyncio-eventloop.rst:1309 +msgid "" +"the value ``None`` which will make the subprocess inherit the file " +"descriptor from this process" +msgstr "``None`` 值,这将使得子进程继承来自此进程的文件描述符" + +#: ../../library/asyncio-eventloop.rst:1287 +#: ../../library/asyncio-eventloop.rst:1299 +#: ../../library/asyncio-eventloop.rst:1311 +msgid "" +"the :const:`subprocess.DEVNULL` constant which indicates that the special " +":data:`os.devnull` file will be used" +msgstr ":const:`subprocess.DEVNULL` 常量,这表示将使用特殊的 :data:`os.devnull` 文件" + +#: ../../library/asyncio-eventloop.rst:1290 +msgid "*stdout* can be any of these:" +msgstr "*stdout* 可以是以下对象之一:" + +#: ../../library/asyncio-eventloop.rst:1292 +msgid "" +"a file-like object representing a pipe to be connected to the subprocess's " +"standard output stream using :meth:`~loop.connect_write_pipe`" +msgstr "一个文件型对象,表示要使用 :meth:`~loop.connect_write_pipe` 连接到子进程的标准输出流的管道" + +#: ../../library/asyncio-eventloop.rst:1302 +msgid "*stderr* can be any of these:" +msgstr "*stderr* 可以是以下对象之一:" + +#: ../../library/asyncio-eventloop.rst:1304 +msgid "" +"a file-like object representing a pipe to be connected to the subprocess's " +"standard error stream using :meth:`~loop.connect_write_pipe`" +msgstr "一个文件型对象,表示要使用 :meth:`~loop.connect_write_pipe` 连接到子进程的标准错误流的管道" + +#: ../../library/asyncio-eventloop.rst:1313 +msgid "" +"the :const:`subprocess.STDOUT` constant which will connect the standard " +"error stream to the process' standard output stream" +msgstr ":const:`subprocess.STDOUT` 常量,将把标准错误流连接到进程的标准输出流" + +#: ../../library/asyncio-eventloop.rst:1316 +msgid "" +"All other keyword arguments are passed to :class:`subprocess.Popen` without " +"interpretation, except for *bufsize*, *universal_newlines*, *shell*, *text*," +" *encoding* and *errors*, which should not be specified at all." +msgstr "" +"所有其他关键字参数会被不加解释地传给 :class:`subprocess.Popen`,除了 *bufsize*, " +"*universal_newlines*, *shell*, *text*, *encoding* 和 *errors*,它们都不应当被指定。" + +#: ../../library/asyncio-eventloop.rst:1321 +msgid "" +"The ``asyncio`` subprocess API does not support decoding the streams as " +"text. :func:`bytes.decode` can be used to convert the bytes returned from " +"the stream to text." +msgstr "" +"``asyncio`` 子进程 API 不支持将流解码为文本。 可以使用 :func:`bytes.decode` 来将从流返回的字节串转换为文本。" + +#: ../../library/asyncio-eventloop.rst:1325 +msgid "" +"See the constructor of the :class:`subprocess.Popen` class for documentation" +" on other arguments." +msgstr "其他参数的文档,请参阅 :class:`subprocess.Popen` 类的构造函数。" + +#: ../../library/asyncio-eventloop.rst:1328 +msgid "" +"Returns a pair of ``(transport, protocol)``, where *transport* conforms to " +"the :class:`asyncio.SubprocessTransport` base class and *protocol* is an " +"object instantiated by the *protocol_factory*." +msgstr "" +"返回一对 ``(transport, protocol)``,其中 *transport* 来自 " +":class:`asyncio.SubprocessTransport` 基类而 *protocol* 是由 *protocol_factory* " +"所实例化的对象。" + +#: ../../library/asyncio-eventloop.rst:1336 +msgid "" +"Create a subprocess from *cmd*, which can be a :class:`str` or a " +":class:`bytes` string encoded to the :ref:`filesystem encoding `, using the platform's \"shell\" syntax." +msgstr "" +"基于 *cmd* 创建一个子进程,该参数可以是一个 :class:`str` 或者按 :ref:`文件系统编码格式 ` 编码得到的 :class:`bytes` ,使用平台的 \"shell\" 语法。" + +#: ../../library/asyncio-eventloop.rst:1341 +msgid "" +"This is similar to the standard library :class:`subprocess.Popen` class " +"called with ``shell=True``." +msgstr "这类似与用 ``shell=True`` 调用标准库的 :class:`subprocess.Popen` 类。" + +#: ../../library/asyncio-eventloop.rst:1344 +msgid "" +"The *protocol_factory* must be a callable returning a subclass of the " +":class:`SubprocessProtocol` class." +msgstr "*protocol_factory* 必须为一个返回 :class:`SubprocessProtocol` 类的子类的可调用对象。" + +#: ../../library/asyncio-eventloop.rst:1347 +msgid "" +"See :meth:`~loop.subprocess_exec` for more details about the remaining " +"arguments." +msgstr "请参阅 :meth:`~loop.subprocess_exec` 了解有关其余参数的详情。" + +#: ../../library/asyncio-eventloop.rst:1350 +msgid "" +"Returns a pair of ``(transport, protocol)``, where *transport* conforms to " +"the :class:`SubprocessTransport` base class and *protocol* is an object " +"instantiated by the *protocol_factory*." +msgstr "" +"返回一对 ``(transport, protocol)``,其中 *transport* 来自 " +":class:`SubprocessTransport` 基类而 *protocol* 是由 *protocol_factory* 所实例化的对象。" + +#: ../../library/asyncio-eventloop.rst:1355 +msgid "" +"It is the application's responsibility to ensure that all whitespace and " +"special characters are quoted appropriately to avoid `shell injection " +"`_ " +"vulnerabilities. The :func:`shlex.quote` function can be used to properly " +"escape whitespace and special characters in strings that are going to be " +"used to construct shell commands." +msgstr "" +"应用程序要负责确保正确地转义所有空白字符和特殊字符以防止 `shell 注入 " +"`_ 漏洞。 " +":func:`shlex.quote` 函数可以被用来正确地转义字符串中可能被用来构造 shell 命令的空白字符和特殊字符。" + +#: ../../library/asyncio-eventloop.rst:1364 +msgid "Callback Handles" +msgstr "回调处理" + +#: ../../library/asyncio-eventloop.rst:1368 +msgid "" +"A callback wrapper object returned by :meth:`loop.call_soon`, " +":meth:`loop.call_soon_threadsafe`." +msgstr "" +"由 :meth:`loop.call_soon`, :meth:`loop.call_soon_threadsafe` 所返回的回调包装器对象。" + +#: ../../library/asyncio-eventloop.rst:1373 +msgid "" +"Cancel the callback. If the callback has already been canceled or executed," +" this method has no effect." +msgstr "取消回调。 如果此回调已被取消或已被执行,此方法将没有任何效果。" + +#: ../../library/asyncio-eventloop.rst:1378 +msgid "Return ``True`` if the callback was cancelled." +msgstr "如果此回调已被取消则返回 ``True``。" + +#: ../../library/asyncio-eventloop.rst:1384 +msgid "" +"A callback wrapper object returned by :meth:`loop.call_later`, and " +":meth:`loop.call_at`." +msgstr "由 :meth:`loop.call_later` 和 :meth:`loop.call_at` 所返回的回调包装器对象。" + +#: ../../library/asyncio-eventloop.rst:1387 +msgid "This class is a subclass of :class:`Handle`." +msgstr "这个类是 :class:`Handle` 的子类。" + +#: ../../library/asyncio-eventloop.rst:1391 +msgid "Return a scheduled callback time as :class:`float` seconds." +msgstr "返回加入计划任务的回调时间,以 :class:`float` 值表示的秒数。" + +#: ../../library/asyncio-eventloop.rst:1393 +msgid "" +"The time is an absolute timestamp, using the same time reference as " +":meth:`loop.time`." +msgstr "时间值是一个绝对时间戳,使用与 :meth:`loop.time` 相同的时间引用。" + +#: ../../library/asyncio-eventloop.rst:1400 +msgid "Server Objects" +msgstr "Server 对象" + +#: ../../library/asyncio-eventloop.rst:1402 +msgid "" +"Server objects are created by :meth:`loop.create_server`, " +":meth:`loop.create_unix_server`, :func:`start_server`, and " +":func:`start_unix_server` functions." +msgstr "" +"Server 对象可使用 :meth:`loop.create_server`, :meth:`loop.create_unix_server`, " +":func:`start_server` 和 :func:`start_unix_server` 等函数来创建。" + +#: ../../library/asyncio-eventloop.rst:1406 +msgid "Do not instantiate the class directly." +msgstr "请不要直接实例化该类。" + +#: ../../library/asyncio-eventloop.rst:1410 +msgid "" +"*Server* objects are asynchronous context managers. When used in an ``async" +" with`` statement, it's guaranteed that the Server object is closed and not " +"accepting new connections when the ``async with`` statement is completed::" +msgstr "" +"*Server* 对象是异步上下文管理器。当用于 ``async with`` 语句时,异步上下文管理器可以确保 Server 对象被关闭,并且在 " +"``async with`` 语句完成后,不接受新的连接。" + +#: ../../library/asyncio-eventloop.rst:1423 +msgid "Server object is an asynchronous context manager since Python 3.7." +msgstr "Python3.7 开始,Server 对象是一个异步上下文管理器。" + +#: ../../library/asyncio-eventloop.rst:1428 +msgid "" +"Stop serving: close listening sockets and set the :attr:`sockets` attribute " +"to ``None``." +msgstr "停止服务:关闭监听的套接字并且设置 :attr:`sockets` 属性为 ``None`` 。" + +#: ../../library/asyncio-eventloop.rst:1431 +msgid "" +"The sockets that represent existing incoming client connections are left " +"open." +msgstr "用于表示已经连进来的客户端连接会保持打开的状态。" + +#: ../../library/asyncio-eventloop.rst:1434 +msgid "" +"The server is closed asynchronously, use the :meth:`wait_closed` coroutine " +"to wait until the server is closed." +msgstr "服务器是被异步关闭的,使用 :meth:`wait_closed` 协程来等待服务器关闭。" + +#: ../../library/asyncio-eventloop.rst:1439 +msgid "Return the event loop associated with the server object." +msgstr "返回与服务器对象相关联的事件循环。" + +#: ../../library/asyncio-eventloop.rst:1445 +msgid "Start accepting connections." +msgstr "开始接受连接。" + +#: ../../library/asyncio-eventloop.rst:1447 +msgid "" +"This method is idempotent, so it can be called when the server is already " +"being serving." +msgstr "这个方法是幂等的【相同参数重复执行,能获得相同的结果】,所以此方法能在服务已经运行的时候调用。" + +#: ../../library/asyncio-eventloop.rst:1450 +msgid "" +"The *start_serving* keyword-only parameter to :meth:`loop.create_server` and" +" :meth:`asyncio.start_server` allows creating a Server object that is not " +"accepting connections initially. In this case ``Server.start_serving()``, " +"or :meth:`Server.serve_forever` can be used to make the Server start " +"accepting connections." +msgstr "" +"传给 :meth:`loop.create_server` 和 :meth:`asyncio.start_server` 的 " +"*start_serving* 仅限关键字形参允许创建不接受初始连接的 Server 对象。 在此情况下可以使用 " +"``Server.start_serving()`` 或 :meth:`Server.serve_forever` 让 Server 对象开始接受连接。" + +#: ../../library/asyncio-eventloop.rst:1461 +msgid "" +"Start accepting connections until the coroutine is cancelled. Cancellation " +"of ``serve_forever`` task causes the server to be closed." +msgstr "开始接受连接,直到协程被取消。 ``serve_forever`` 任务的取消将导致服务器被关闭。" + +#: ../../library/asyncio-eventloop.rst:1465 +msgid "" +"This method can be called if the server is already accepting connections. " +"Only one ``serve_forever`` task can exist per one *Server* object." +msgstr "如果服务器已经在接受连接了,这个方法可以被调用。每个 *Server* 对象,仅能有一个 ``serve_forever`` 任务。" + +#: ../../library/asyncio-eventloop.rst:1487 +msgid "Return ``True`` if the server is accepting new connections." +msgstr "如果服务器正在接受新连接的状态,返回 ``True`` 。" + +#: ../../library/asyncio-eventloop.rst:1493 +msgid "Wait until the :meth:`close` method completes." +msgstr "等待 :meth:`close` 方法执行完毕。" + +#: ../../library/asyncio-eventloop.rst:1497 +msgid "List of :class:`socket.socket` objects the server is listening on." +msgstr "服务器监听的 :class:`socket.socket` 对象列表。" + +#: ../../library/asyncio-eventloop.rst:1499 +msgid "" +"Prior to Python 3.7 ``Server.sockets`` used to return an internal list of " +"server sockets directly. In 3.7 a copy of that list is returned." +msgstr "" +"在 Python 3.7 之前 ``Server.sockets`` 会直接返回内部的服务器套接字列表。 在 3.7 版则会返回该列表的副本。" + +#: ../../library/asyncio-eventloop.rst:1508 +msgid "Event Loop Implementations" +msgstr "事件循环实现" + +#: ../../library/asyncio-eventloop.rst:1510 +msgid "" +"asyncio ships with two different event loop implementations: " +":class:`SelectorEventLoop` and :class:`ProactorEventLoop`." +msgstr "" +"asyncio 带有两种不同的事件循环实现: :class:`SelectorEventLoop` 和 " +":class:`ProactorEventLoop`。" + +#: ../../library/asyncio-eventloop.rst:1513 +msgid "" +"By default asyncio is configured to use :class:`SelectorEventLoop` on Unix " +"and :class:`ProactorEventLoop` on Windows." +msgstr "" +"默认情况下 asyncio 被配置为在 Unix 上使用 :class:`SelectorEventLoop` 而在 Windows 上使用 " +":class:`ProactorEventLoop`。" + +#: ../../library/asyncio-eventloop.rst:1519 +msgid "An event loop based on the :mod:`selectors` module." +msgstr "基于 :mod:`selectors` 模块的事件循环。" + +#: ../../library/asyncio-eventloop.rst:1521 +msgid "" +"Uses the most efficient *selector* available for the given platform. It is " +"also possible to manually configure the exact selector implementation to be " +"used::" +msgstr "使用给定平台中最高效的可用 *selector*。 也可以手动配置要使用的特定 selector::" + +#: ../../library/asyncio-eventloop.rst:1533 +msgid ":ref:`Availability `: Unix, Windows." +msgstr ":ref:`可用性 `: Unix, Windows。" + +#: ../../library/asyncio-eventloop.rst:1538 +msgid "An event loop for Windows that uses \"I/O Completion Ports\" (IOCP)." +msgstr "用 \"I/O Completion Ports\" (IOCP) 构建的专为Windows 的事件循环。" + +#: ../../library/asyncio-eventloop.rst:1541 +msgid ":ref:`Availability `: Windows." +msgstr ":ref:`可用性 `: Windows。" + +#: ../../library/asyncio-eventloop.rst:1544 +msgid "" +"`MSDN documentation on I/O Completion Ports `_." +msgstr "" +"`有关 I/O 完成端口的 MSDN 文档 `_。" + +#: ../../library/asyncio-eventloop.rst:1550 +msgid "Abstract base class for asyncio-compliant event loops." +msgstr "asyncio 兼容事件循环的抽象基类。" + +#: ../../library/asyncio-eventloop.rst:1552 +msgid "" +"The :ref:`Event Loop Methods ` section lists all methods" +" that an alternative implementation of ``AbstractEventLoop`` should have " +"defined." +msgstr "" +":ref:`事件循环方法 ` 一节列出了 ``AbstractEventLoop`` " +"的替代实现应当定义的所有方法。" + +#: ../../library/asyncio-eventloop.rst:1558 +msgid "Examples" +msgstr "例子" + +#: ../../library/asyncio-eventloop.rst:1560 +msgid "" +"Note that all examples in this section **purposefully** show how to use the " +"low-level event loop APIs, such as :meth:`loop.run_forever` and " +":meth:`loop.call_soon`. Modern asyncio applications rarely need to be " +"written this way; consider using the high-level functions like " +":func:`asyncio.run`." +msgstr "" +"请注意本节中的所有示例都 **有意地** 演示了如何使用低层级的事件循环 API,例如 :meth:`loop.run_forever` 和 " +":meth:`loop.call_soon`。 现代的 asyncio 应用很少需要以这样的方式编写;请考虑使用高层级的函数例如 " +":func:`asyncio.run`。" + +#: ../../library/asyncio-eventloop.rst:1570 +msgid "Hello World with call_soon()" +msgstr "call_soon() 的 Hello World 示例。" + +#: ../../library/asyncio-eventloop.rst:1572 +msgid "" +"An example using the :meth:`loop.call_soon` method to schedule a callback. " +"The callback displays ``\"Hello World\"`` and then stops the event loop::" +msgstr "" +"一个使用 :meth:`loop.call_soon` 方法来安排回调的示例。 回调会显示 ``\"Hello World\"`` 然后停止事件循环::" + +#: ../../library/asyncio-eventloop.rst:1596 +msgid "" +"A similar :ref:`Hello World ` example created with a coroutine " +"and the :func:`run` function." +msgstr "一个类似的 :ref:`Hello World ` 示例,使用协程和 :func:`run` 函数创建。" + +#: ../../library/asyncio-eventloop.rst:1603 +msgid "Display the current date with call_later()" +msgstr "使用 call_later() 来展示当前的日期" + +#: ../../library/asyncio-eventloop.rst:1605 +msgid "" +"An example of a callback displaying the current date every second. The " +"callback uses the :meth:`loop.call_later` method to reschedule itself after " +"5 seconds, and then stops the event loop::" +msgstr "" +"一个每秒刷新显示当前日期的示例。 回调使用 :meth:`loop.call_later` 方法在 5 秒后将自身重新加入计划日程,然后停止事件循环::" + +#: ../../library/asyncio-eventloop.rst:1633 +msgid "" +"A similar :ref:`current date ` example created with a" +" coroutine and the :func:`run` function." +msgstr "" +"一个类似的 :ref:`current date ` 示例,使用协程和 :func:`run` 函数创建。" + +#: ../../library/asyncio-eventloop.rst:1640 +msgid "Watch a file descriptor for read events" +msgstr "监控一个文件描述符的读事件" + +#: ../../library/asyncio-eventloop.rst:1642 +msgid "" +"Wait until a file descriptor received some data using the " +":meth:`loop.add_reader` method and then close the event loop::" +msgstr "使用 :meth:`loop.add_reader` 方法,等到文件描述符收到一些数据,然后关闭事件循环:" + +#: ../../library/asyncio-eventloop.rst:1680 +msgid "" +"A similar :ref:`example ` using " +"transports, protocols, and the :meth:`loop.create_connection` method." +msgstr "" +"一个类似的 :ref:`示例 `,使用传输、协议和 " +":meth:`loop.create_connection` 方法创建。" + +#: ../../library/asyncio-eventloop.rst:1684 +msgid "" +"Another similar :ref:`example ` " +"using the high-level :func:`asyncio.open_connection` function and streams." +msgstr "" +"另一个类似的 :ref:`示例 `,使用了高层级的 " +":func:`asyncio.open_connection` 函数和流。" + +#: ../../library/asyncio-eventloop.rst:1692 +msgid "Set signal handlers for SIGINT and SIGTERM" +msgstr "为SIGINT和SIGTERM设置信号处理器" + +#: ../../library/asyncio-eventloop.rst:1694 +msgid "(This ``signals`` example only works on Unix.)" +msgstr "(这个 ``signals`` 示例只适用于 Unix。)" + +#: ../../library/asyncio-eventloop.rst:1696 +msgid "" +"Register handlers for signals :py:data:`SIGINT` and :py:data:`SIGTERM` using" +" the :meth:`loop.add_signal_handler` method::" +msgstr "" +"使用 :meth:`loop.add_signal_handler` 方法为信号 :py:data:`SIGINT` 和 " +":py:data:`SIGTERM` 注册处理程序::" diff --git a/library/asyncio-exceptions.po b/library/asyncio-exceptions.po new file mode 100644 index 000000000..e2a88764e --- /dev/null +++ b/library/asyncio-exceptions.po @@ -0,0 +1,106 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) 2001-2022, Python Software Foundation +# This file is distributed under the same license as the Python package. +# FIRST AUTHOR , YEAR. +# +# Translators: +# ww song , 2018 +# ppcfish , 2019 +# Freesand Leo , 2019 +# +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: Python 3.9\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2022-11-04 14:34+0000\n" +"PO-Revision-Date: 2018-09-18 00:23+0000\n" +"Last-Translator: Freesand Leo , 2019\n" +"Language-Team: Chinese (China) (https://www.transifex.com/python-doc/teams/5390/zh_CN/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: zh_CN\n" +"Plural-Forms: nplurals=1; plural=0;\n" + +#: ../../library/asyncio-exceptions.rst:8 +msgid "Exceptions" +msgstr "异常" + +#: ../../library/asyncio-exceptions.rst:10 +msgid "**Source code:** :source:`Lib/asyncio/exceptions.py`" +msgstr "**源代码:** :source:`Lib/asyncio/exceptions.py`" + +#: ../../library/asyncio-exceptions.rst:16 +msgid "The operation has exceeded the given deadline." +msgstr "该操作已超过规定的截止日期。" + +#: ../../library/asyncio-exceptions.rst:19 +msgid "" +"This exception is different from the builtin :exc:`TimeoutError` exception." +msgstr "这个异常与内置 :exc:`TimeoutError` 异常不同。" + +#: ../../library/asyncio-exceptions.rst:25 +msgid "The operation has been cancelled." +msgstr "该操作已被取消。" + +#: ../../library/asyncio-exceptions.rst:27 +msgid "" +"This exception can be caught to perform custom operations when asyncio Tasks" +" are cancelled. In almost all situations the exception must be re-raised." +msgstr "取消asyncio任务时,可以捕获此异常以执行自定义操作。在几乎所有情况下,都必须重新引发异常。" + +#: ../../library/asyncio-exceptions.rst:33 +msgid ":exc:`CancelledError` is now a subclass of :class:`BaseException`." +msgstr ":exc:`CancelledError` 现在是 :class:`BaseException` 的子类。" + +#: ../../library/asyncio-exceptions.rst:38 +msgid "Invalid internal state of :class:`Task` or :class:`Future`." +msgstr ":class:`Task` 或 :class:`Future` 的内部状态无效。" + +#: ../../library/asyncio-exceptions.rst:40 +msgid "" +"Can be raised in situations like setting a result value for a *Future* " +"object that already has a result value set." +msgstr "在为已设置结果值的未来对象设置结果值等情况下,可以引发此问题。" + +#: ../../library/asyncio-exceptions.rst:46 +msgid "" +"The \"sendfile\" syscall is not available for the given socket or file type." +msgstr "\"sendfile\" 系统调用不适用于给定的套接字或文件类型。" + +#: ../../library/asyncio-exceptions.rst:49 +msgid "A subclass of :exc:`RuntimeError`." +msgstr "子类 :exc:`RuntimeError` 。" + +#: ../../library/asyncio-exceptions.rst:54 +msgid "The requested read operation did not complete fully." +msgstr "请求的读取操作未完全完成。" + +#: ../../library/asyncio-exceptions.rst:56 +msgid "Raised by the :ref:`asyncio stream APIs`." +msgstr "由 :ref:`asyncio stream APIs` 提出" + +#: ../../library/asyncio-exceptions.rst:58 +msgid "This exception is a subclass of :exc:`EOFError`." +msgstr "此异常是 :exc:`EOFError` 的子类。" + +#: ../../library/asyncio-exceptions.rst:62 +msgid "The total number (:class:`int`) of expected bytes." +msgstr "预期字节的总数( :class:`int` )。" + +#: ../../library/asyncio-exceptions.rst:66 +msgid "A string of :class:`bytes` read before the end of stream was reached." +msgstr "到达流结束之前读取的 :class:`bytes` 字符串。" + +#: ../../library/asyncio-exceptions.rst:71 +msgid "Reached the buffer size limit while looking for a separator." +msgstr "在查找分隔符时达到缓冲区大小限制。" + +#: ../../library/asyncio-exceptions.rst:73 +msgid "Raised by the :ref:`asyncio stream APIs `." +msgstr "由 :ref:`asyncio stream APIs ` 提出" + +#: ../../library/asyncio-exceptions.rst:77 +msgid "The total number of to be consumed bytes." +msgstr "要消耗的字节总数。" diff --git a/library/asyncio-future.po b/library/asyncio-future.po new file mode 100644 index 000000000..192946c23 --- /dev/null +++ b/library/asyncio-future.po @@ -0,0 +1,361 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) 2001-2022, Python Software Foundation +# This file is distributed under the same license as the Python package. +# FIRST AUTHOR , YEAR. +# +# Translators: +# MuSheng Chen , 2019 +# Woko , 2019 +# Freesand Leo , 2022 +# +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: Python 3.9\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2022-11-04 14:34+0000\n" +"PO-Revision-Date: 2018-09-18 00:23+0000\n" +"Last-Translator: Freesand Leo , 2022\n" +"Language-Team: Chinese (China) (https://www.transifex.com/python-doc/teams/5390/zh_CN/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: zh_CN\n" +"Plural-Forms: nplurals=1; plural=0;\n" + +#: ../../library/asyncio-future.rst:8 +msgid "Futures" +msgstr "Futures" + +#: ../../library/asyncio-future.rst:10 +msgid "" +"**Source code:** :source:`Lib/asyncio/futures.py`, " +":source:`Lib/asyncio/base_futures.py`" +msgstr "" +"**源代码:** :source:`Lib/asyncio/futures.py`, " +":source:`Lib/asyncio/base_futures.py`" + +#: ../../library/asyncio-future.rst:15 +msgid "" +"*Future* objects are used to bridge **low-level callback-based code** with " +"high-level async/await code." +msgstr "*Future* 对象用来链接 **底层回调式代码** 和高层异步/等待式代码。" + +#: ../../library/asyncio-future.rst:20 +msgid "Future Functions" +msgstr "Future 函数" + +#: ../../library/asyncio-future.rst:24 +msgid "Return ``True`` if *obj* is either of:" +msgstr "如果 *obj* 为下面任意对象,返回 ``True``:" + +#: ../../library/asyncio-future.rst:26 +msgid "an instance of :class:`asyncio.Future`," +msgstr "一个 :class:`asyncio.Future` 类的实例," + +#: ../../library/asyncio-future.rst:27 +msgid "an instance of :class:`asyncio.Task`," +msgstr "一个 :class:`asyncio.Task` 类的实例," + +#: ../../library/asyncio-future.rst:28 +msgid "a Future-like object with a ``_asyncio_future_blocking`` attribute." +msgstr "带有 ``_asyncio_future_blocking`` 属性的类似 Future 的对象。" + +#: ../../library/asyncio-future.rst:36 +msgid "Return:" +msgstr "返回:" + +#: ../../library/asyncio-future.rst:38 +msgid "" +"*obj* argument as is, if *obj* is a :class:`Future`, a :class:`Task`, or a " +"Future-like object (:func:`isfuture` is used for the test.)" +msgstr "" +"*obj* 参数会是保持原样,如果 *obj* 是 :class:`Future`、 :class:`Task` 或 类似 Future 的对象( " +":func:`isfuture` 用于测试。)" + +#: ../../library/asyncio-future.rst:42 +msgid "" +"a :class:`Task` object wrapping *obj*, if *obj* is a coroutine " +"(:func:`iscoroutine` is used for the test); in this case the coroutine will " +"be scheduled by ``ensure_future()``." +msgstr "" +"封装了 *obj* 的 :class:`Task` 对象,如果 *obj* 是一个协程 (使用 :func:`iscoroutine` " +"进行检测);在此情况下该协程将通过 ``ensure_future()`` 加入执行计划。" + +#: ../../library/asyncio-future.rst:47 +msgid "" +"a :class:`Task` object that would await on *obj*, if *obj* is an awaitable " +"(:func:`inspect.isawaitable` is used for the test.)" +msgstr "" +"等待 *obj* 的 :class:`Task` 对象,如果 *obj* 是一个可等待对象( :func:`inspect.isawaitable` " +"用于测试)" + +#: ../../library/asyncio-future.rst:50 +msgid "If *obj* is neither of the above a :exc:`TypeError` is raised." +msgstr "如果 *obj* 不是上述对象会引发一个 :exc:`TypeError` 异常。" + +#: ../../library/asyncio-future.rst:54 +msgid "" +"See also the :func:`create_task` function which is the preferred way for " +"creating new Tasks." +msgstr "查看 :func:`create_task` 函数,它是创建新任务的首选途径。" + +#: ../../library/asyncio-future.rst:57 +msgid "" +"Save a reference to the result of this function, to avoid a task " +"disappearing mid execution." +msgstr "保存一个指向此函数的结果的引用,以避免任务在执行期间消失。" + +#: ../../library/asyncio-future.rst:60 +msgid "The function accepts any :term:`awaitable` object." +msgstr "这个函数接受任意 :term:`awaitable` 对象。" + +#: ../../library/asyncio-future.rst:66 +msgid "" +"Wrap a :class:`concurrent.futures.Future` object in a " +":class:`asyncio.Future` object." +msgstr "" +"将一个 :class:`concurrent.futures.Future` 对象封装到 :class:`asyncio.Future` 对象中。" + +#: ../../library/asyncio-future.rst:71 +msgid "Future Object" +msgstr "Future 对象" + +#: ../../library/asyncio-future.rst:75 +msgid "" +"A Future represents an eventual result of an asynchronous operation. Not " +"thread-safe." +msgstr "一个 Future 代表一个异步运算的最终结果。线程不安全。" + +#: ../../library/asyncio-future.rst:78 +msgid "" +"Future is an :term:`awaitable` object. Coroutines can await on Future " +"objects until they either have a result or an exception set, or until they " +"are cancelled." +msgstr "Future 是一个 :term:`awaitable` 对象。协程可以等待 Future 对象直到它们有结果或异常集合或被取消。" + +#: ../../library/asyncio-future.rst:82 +msgid "" +"Typically Futures are used to enable low-level callback-based code (e.g. in " +"protocols implemented using asyncio :ref:`transports `) to interoperate with high-level async/await code." +msgstr "" +"通常 Future 用于支持底层回调式代码(例如在协议实现中使用asyncio :ref:`transports`) 与高层异步/等待式代码交互。" + +#: ../../library/asyncio-future.rst:87 +msgid "" +"The rule of thumb is to never expose Future objects in user-facing APIs, and" +" the recommended way to create a Future object is to call " +":meth:`loop.create_future`. This way alternative event loop implementations" +" can inject their own optimized implementations of a Future object." +msgstr "" +"经验告诉我们永远不要面向用户的接口暴露 Future 对象,同时建议使用 :meth:`loop.create_future` 来创建 Future " +"对象。这种方法可以让 Future 对象使用其它的事件循环实现,它可以注入自己的优化实现。" + +#: ../../library/asyncio-future.rst:93 +msgid "Added support for the :mod:`contextvars` module." +msgstr "加入对 :mod:`contextvars` 模块的支持。" + +#: ../../library/asyncio-future.rst:98 +msgid "Return the result of the Future." +msgstr "返回 Future 的结果。" + +#: ../../library/asyncio-future.rst:100 +msgid "" +"If the Future is *done* and has a result set by the :meth:`set_result` " +"method, the result value is returned." +msgstr "如果 Future 状态为 *完成* ,并由 :meth:`set_result` 方法设置一个结果,则返回这个结果。" + +#: ../../library/asyncio-future.rst:103 +msgid "" +"If the Future is *done* and has an exception set by the " +":meth:`set_exception` method, this method raises the exception." +msgstr "如果 Future 状态为 *完成* ,并由 :meth:`set_exception` 方法设置一个异常,那么这个方法会引发异常。" + +#: ../../library/asyncio-future.rst:106 ../../library/asyncio-future.rst:194 +msgid "" +"If the Future has been *cancelled*, this method raises a " +":exc:`CancelledError` exception." +msgstr "如果 Future 已 *取消*,方法会引发一个 :exc:`CancelledError` 异常。" + +#: ../../library/asyncio-future.rst:109 +msgid "" +"If the Future's result isn't yet available, this method raises a " +":exc:`InvalidStateError` exception." +msgstr "如果 Future 的结果还不可用,此方法会引发一个 :exc:`InvalidStateError` 异常。" + +#: ../../library/asyncio-future.rst:114 +msgid "Mark the Future as *done* and set its result." +msgstr "将 Future 标记为 *完成* 并设置结果。" + +#: ../../library/asyncio-future.rst:116 ../../library/asyncio-future.rst:123 +msgid "" +"Raises a :exc:`InvalidStateError` error if the Future is already *done*." +msgstr "如果 Future 已经 *完成* 则抛出一个 :exc:`InvalidStateError` 错误。" + +#: ../../library/asyncio-future.rst:121 +msgid "Mark the Future as *done* and set an exception." +msgstr "将 Future 标记为 *完成* 并设置一个异常。" + +#: ../../library/asyncio-future.rst:128 +msgid "Return ``True`` if the Future is *done*." +msgstr "如果 Future 为已 *完成* 则返回 ``True`` 。" + +#: ../../library/asyncio-future.rst:130 +msgid "" +"A Future is *done* if it was *cancelled* or if it has a result or an " +"exception set with :meth:`set_result` or :meth:`set_exception` calls." +msgstr "" +"如果 Future 为 *取消* 或调用 :meth:`set_result` 设置了结果或调用 :meth:`set_exception` " +"设置了异常,那么它就是 *完成* 。" + +#: ../../library/asyncio-future.rst:136 +msgid "Return ``True`` if the Future was *cancelled*." +msgstr "如果 Future 已 *取消* 则返回 ``True`` " + +#: ../../library/asyncio-future.rst:138 +msgid "" +"The method is usually used to check if a Future is not *cancelled* before " +"setting a result or an exception for it::" +msgstr "这个方法通常在设置结果或异常前用来检查 Future 是否已 *取消* 。" + +#: ../../library/asyncio-future.rst:146 +msgid "Add a callback to be run when the Future is *done*." +msgstr "添加一个在 Future *完成* 时运行的回调函数。" + +#: ../../library/asyncio-future.rst:148 +msgid "The *callback* is called with the Future object as its only argument." +msgstr "调用 *callback* 时,Future 对象是它的唯一参数。" + +#: ../../library/asyncio-future.rst:151 +msgid "" +"If the Future is already *done* when this method is called, the callback is " +"scheduled with :meth:`loop.call_soon`." +msgstr "如果调用这个方法时 Future 已经 *完成*,回调函数会被 :meth:`loop.call_soon` 调度。" + +#: ../../library/asyncio-future.rst:154 +msgid "" +"An optional keyword-only *context* argument allows specifying a custom " +":class:`contextvars.Context` for the *callback* to run in. The current " +"context is used when no *context* is provided." +msgstr "" +"可选键值类的参数 *context* 允许 *callback* 运行在一个指定的自定义 :class:`contextvars.Context` " +"对象中。如果没有提供 *context* ,则使用当前上下文。" + +#: ../../library/asyncio-future.rst:158 +msgid "" +":func:`functools.partial` can be used to pass parameters to the callback, " +"e.g.::" +msgstr "可以用 :func:`functools.partial` 给回调函数传递参数,例如::" + +#: ../../library/asyncio-future.rst:165 +msgid "" +"The *context* keyword-only parameter was added. See :pep:`567` for more " +"details." +msgstr "加入键值类形参 *context*。请参阅 :pep:`567` 查看更多细节。" + +#: ../../library/asyncio-future.rst:171 +msgid "Remove *callback* from the callbacks list." +msgstr "从回调列表中移除 *callback* 。" + +#: ../../library/asyncio-future.rst:173 +msgid "" +"Returns the number of callbacks removed, which is typically 1, unless a " +"callback was added more than once." +msgstr "返回被移除的回调函数的数量,通常为1,除非一个回调函数被添加多次。" + +#: ../../library/asyncio-future.rst:178 +msgid "Cancel the Future and schedule callbacks." +msgstr "取消 Future 并调度回调函数。" + +#: ../../library/asyncio-future.rst:180 +msgid "" +"If the Future is already *done* or *cancelled*, return ``False``. Otherwise," +" change the Future's state to *cancelled*, schedule the callbacks, and " +"return ``True``." +msgstr "" +"如果 Future 已经 *完成* 或 *取消* ,返回 ``False`` 。否则将 Future 状态改为 *取消* 并在调度回调函数后返回 " +"``True`` 。" + +#: ../../library/asyncio-future.rst:184 +msgid "Added the ``msg`` parameter." +msgstr "增加了 ``msg`` 形参。" + +#: ../../library/asyncio-future.rst:189 +msgid "Return the exception that was set on this Future." +msgstr "返回 Future 已设置的异常。" + +#: ../../library/asyncio-future.rst:191 +msgid "" +"The exception (or ``None`` if no exception was set) is returned only if the " +"Future is *done*." +msgstr "只有 Future 在 *完成* 时才返回异常(或者 ``None`` ,如果没有设置异常)。" + +#: ../../library/asyncio-future.rst:197 +msgid "" +"If the Future isn't *done* yet, this method raises an " +":exc:`InvalidStateError` exception." +msgstr "如果 Future 还没 *完成* ,这个方法会引发一个 :exc:`InvalidStateError` 异常。" + +#: ../../library/asyncio-future.rst:202 +msgid "Return the event loop the Future object is bound to." +msgstr "返回 Future 对象已绑定的事件循环。" + +#: ../../library/asyncio-future.rst:209 +msgid "" +"This example creates a Future object, creates and schedules an asynchronous " +"Task to set result for the Future, and waits until the Future has a result::" +msgstr "这个例子创建一个 Future 对象,创建和调度一个异步任务去设置 Future 结果,然后等待其结果::" + +#: ../../library/asyncio-future.rst:244 +msgid "" +"The Future object was designed to mimic :class:`concurrent.futures.Future`." +" Key differences include:" +msgstr "该 Future 对象是为了模仿 :class:`concurrent.futures.Future` 类。主要差异包含:" + +#: ../../library/asyncio-future.rst:247 +msgid "" +"unlike asyncio Futures, :class:`concurrent.futures.Future` instances cannot " +"be awaited." +msgstr "与 asyncio 的 Future 不同,:class:`concurrent.futures.Future` 实例不是可等待对象。" + +#: ../../library/asyncio-future.rst:250 +msgid "" +":meth:`asyncio.Future.result` and :meth:`asyncio.Future.exception` do not " +"accept the *timeout* argument." +msgstr "" +":meth:`asyncio.Future.result` 和 :meth:`asyncio.Future.exception` 不接受 " +"*timeout* 参数。" + +#: ../../library/asyncio-future.rst:253 +msgid "" +":meth:`asyncio.Future.result` and :meth:`asyncio.Future.exception` raise an " +":exc:`InvalidStateError` exception when the Future is not *done*." +msgstr "" +"Future 没有 *完成* 时 :meth:`asyncio.Future.result` 和 " +":meth:`asyncio.Future.exception` 抛出一个 :exc:`InvalidStateError` 异常。" + +#: ../../library/asyncio-future.rst:257 +msgid "" +"Callbacks registered with :meth:`asyncio.Future.add_done_callback` are not " +"called immediately. They are scheduled with :meth:`loop.call_soon` instead." +msgstr "" +"使用 :meth:`asyncio.Future.add_done_callback` 注册的回调函数不会立即调用,而是被 " +":meth:`loop.call_soon` 调度。" + +#: ../../library/asyncio-future.rst:261 +msgid "" +"asyncio Future is not compatible with the :func:`concurrent.futures.wait` " +"and :func:`concurrent.futures.as_completed` functions." +msgstr "" +"asyncio Future 不能兼容 :func:`concurrent.futures.wait` 和 " +":func:`concurrent.futures.as_completed` 函数。" + +#: ../../library/asyncio-future.rst:265 +msgid "" +":meth:`asyncio.Future.cancel` accepts an optional ``msg`` argument, but " +":func:`concurrent.futures.cancel` does not." +msgstr "" +":meth:`asyncio.Future.cancel` 接受一个可选的 ``msg`` 参数,但 " +":func:`concurrent.futures.cancel` 无此参数。" diff --git a/library/asyncio-llapi-index.po b/library/asyncio-llapi-index.po new file mode 100644 index 000000000..b3a57b9eb --- /dev/null +++ b/library/asyncio-llapi-index.po @@ -0,0 +1,1033 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) 2001-2022, Python Software Foundation +# This file is distributed under the same license as the Python package. +# FIRST AUTHOR , YEAR. +# +# Translators: +# Jerry Chen , 2018 +# Fred , 2018 +# kily zhou , 2018 +# Pan Felix , 2019 +# walkinrain , 2019 +# MuSheng Chen , 2019 +# Makdon , 2019 +# Freesand Leo , 2020 +# +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: Python 3.9\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2022-11-04 14:34+0000\n" +"PO-Revision-Date: 2018-09-18 00:23+0000\n" +"Last-Translator: Freesand Leo , 2020\n" +"Language-Team: Chinese (China) (https://www.transifex.com/python-doc/teams/5390/zh_CN/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: zh_CN\n" +"Plural-Forms: nplurals=1; plural=0;\n" + +#: ../../library/asyncio-llapi-index.rst:6 +msgid "Low-level API Index" +msgstr "低层级 API 索引" + +#: ../../library/asyncio-llapi-index.rst:8 +msgid "This page lists all low-level asyncio APIs." +msgstr "本页列出所有低层级的 asyncio API。" + +#: ../../library/asyncio-llapi-index.rst:12 +msgid "Obtaining the Event Loop" +msgstr "获取事件循环" + +#: ../../library/asyncio-llapi-index.rst:18 +msgid ":func:`asyncio.get_running_loop`" +msgstr ":func:`asyncio.get_running_loop`" + +#: ../../library/asyncio-llapi-index.rst:19 +msgid "The **preferred** function to get the running event loop." +msgstr "获取当前运行的事件循环 **首选** 函数。" + +#: ../../library/asyncio-llapi-index.rst:21 +msgid ":func:`asyncio.get_event_loop`" +msgstr ":func:`asyncio.get_event_loop`" + +#: ../../library/asyncio-llapi-index.rst:22 +msgid "Get an event loop instance (current or via the policy)." +msgstr "获得一个事件循环实例(当前或通过策略)。" + +#: ../../library/asyncio-llapi-index.rst:24 +msgid ":func:`asyncio.set_event_loop`" +msgstr ":func:`asyncio.set_event_loop`" + +#: ../../library/asyncio-llapi-index.rst:25 +msgid "Set the event loop as current via the current policy." +msgstr "通过当前策略将事件循环设置当前事件循环。" + +#: ../../library/asyncio-llapi-index.rst:27 +msgid ":func:`asyncio.new_event_loop`" +msgstr ":func:`asyncio.new_event_loop`" + +#: ../../library/asyncio-llapi-index.rst:28 +msgid "Create a new event loop." +msgstr "创建一个新的事件循环。" + +#: ../../library/asyncio-llapi-index.rst:32 +#: ../../library/asyncio-llapi-index.rst:260 +msgid "Examples" +msgstr "示例" + +#: ../../library/asyncio-llapi-index.rst:33 +msgid ":ref:`Using asyncio.get_running_loop() `." +msgstr ":ref:`使用asyncio.get_running_loop() `。" + +#: ../../library/asyncio-llapi-index.rst:37 +msgid "Event Loop Methods" +msgstr "事件循环方法集" + +#: ../../library/asyncio-llapi-index.rst:39 +msgid "" +"See also the main documentation section about the :ref:`event loop methods " +"`." +msgstr "查阅 :ref:`事件循环方法 ` 相关的主要文档段落 。" + +#: ../../library/asyncio-llapi-index.rst:42 +msgid "Lifecycle" +msgstr "生命周期" + +#: ../../library/asyncio-llapi-index.rst:47 +msgid ":meth:`loop.run_until_complete`" +msgstr ":meth:`loop.run_until_complete`" + +#: ../../library/asyncio-llapi-index.rst:48 +msgid "Run a Future/Task/awaitable until complete." +msgstr "运行一个期程/任务/可等待对象直到完成。" + +#: ../../library/asyncio-llapi-index.rst:50 +msgid ":meth:`loop.run_forever`" +msgstr ":meth:`loop.run_forever`" + +#: ../../library/asyncio-llapi-index.rst:51 +msgid "Run the event loop forever." +msgstr "一直运行事件循环。" + +#: ../../library/asyncio-llapi-index.rst:53 +msgid ":meth:`loop.stop`" +msgstr ":meth:`loop.stop`" + +#: ../../library/asyncio-llapi-index.rst:54 +msgid "Stop the event loop." +msgstr "停止事件循环。" + +#: ../../library/asyncio-llapi-index.rst:56 +msgid ":meth:`loop.close`" +msgstr ":meth:`loop.close`" + +#: ../../library/asyncio-llapi-index.rst:57 +msgid "Close the event loop." +msgstr "关闭事件循环。" + +#: ../../library/asyncio-llapi-index.rst:59 +msgid ":meth:`loop.is_running()`" +msgstr ":meth:`loop.is_running()`" + +#: ../../library/asyncio-llapi-index.rst:60 +msgid "Return ``True`` if the event loop is running." +msgstr "返回 ``True`` , 如果事件循环正在运行。" + +#: ../../library/asyncio-llapi-index.rst:62 +msgid ":meth:`loop.is_closed()`" +msgstr ":meth:`loop.is_closed()`" + +#: ../../library/asyncio-llapi-index.rst:63 +msgid "Return ``True`` if the event loop is closed." +msgstr "返回 ``True`` ,如果事件循环已经被关闭 。" + +#: ../../library/asyncio-llapi-index.rst:65 +msgid "``await`` :meth:`loop.shutdown_asyncgens`" +msgstr "``await`` :meth:`loop.shutdown_asyncgens`" + +#: ../../library/asyncio-llapi-index.rst:66 +msgid "Close asynchronous generators." +msgstr "关闭异步生成器。" + +#: ../../library/asyncio-llapi-index.rst:69 +msgid "Debugging" +msgstr "调试" + +#: ../../library/asyncio-llapi-index.rst:74 +msgid ":meth:`loop.set_debug`" +msgstr ":meth:`loop.set_debug`" + +#: ../../library/asyncio-llapi-index.rst:75 +msgid "Enable or disable the debug mode." +msgstr "开启或禁用调试模式。" + +#: ../../library/asyncio-llapi-index.rst:77 +msgid ":meth:`loop.get_debug`" +msgstr ":meth:`loop.get_debug`" + +#: ../../library/asyncio-llapi-index.rst:78 +msgid "Get the current debug mode." +msgstr "获取当前测试模式。" + +#: ../../library/asyncio-llapi-index.rst:81 +msgid "Scheduling Callbacks" +msgstr "调度回调函数" + +#: ../../library/asyncio-llapi-index.rst:86 +msgid ":meth:`loop.call_soon`" +msgstr ":meth:`loop.call_soon`" + +#: ../../library/asyncio-llapi-index.rst:87 +msgid "Invoke a callback soon." +msgstr "尽快调用回调。" + +#: ../../library/asyncio-llapi-index.rst:89 +msgid ":meth:`loop.call_soon_threadsafe`" +msgstr ":meth:`loop.call_soon_threadsafe`" + +#: ../../library/asyncio-llapi-index.rst:90 +msgid "A thread-safe variant of :meth:`loop.call_soon`." +msgstr ":meth:`loop.call_soon` 方法线程安全的变体。" + +#: ../../library/asyncio-llapi-index.rst:92 +msgid ":meth:`loop.call_later`" +msgstr ":meth:`loop.call_later`" + +#: ../../library/asyncio-llapi-index.rst:93 +msgid "Invoke a callback *after* the given time." +msgstr "在给定时间 *之后* 调用回调函数。" + +#: ../../library/asyncio-llapi-index.rst:95 +msgid ":meth:`loop.call_at`" +msgstr ":meth:`loop.call_at`" + +#: ../../library/asyncio-llapi-index.rst:96 +msgid "Invoke a callback *at* the given time." +msgstr "在 *指定* 时间调用回调函数。" + +#: ../../library/asyncio-llapi-index.rst:99 +msgid "Thread/Process Pool" +msgstr "线程/进程池" + +#: ../../library/asyncio-llapi-index.rst:104 +msgid "``await`` :meth:`loop.run_in_executor`" +msgstr "``await`` :meth:`loop.run_in_executor`" + +#: ../../library/asyncio-llapi-index.rst:105 +msgid "" +"Run a CPU-bound or other blocking function in a :mod:`concurrent.futures` " +"executor." +msgstr "在 :mod:`concurrent.futures` 执行器中运行一个独占CPU或其它阻塞函数。" + +#: ../../library/asyncio-llapi-index.rst:108 +msgid ":meth:`loop.set_default_executor`" +msgstr ":meth:`loop.set_default_executor`" + +#: ../../library/asyncio-llapi-index.rst:109 +msgid "Set the default executor for :meth:`loop.run_in_executor`." +msgstr "设置 :meth:`loop.run_in_executor` 默认执行器。" + +#: ../../library/asyncio-llapi-index.rst:112 +msgid "Tasks and Futures" +msgstr "任务与期程" + +#: ../../library/asyncio-llapi-index.rst:117 +msgid ":meth:`loop.create_future`" +msgstr ":meth:`loop.create_future`" + +#: ../../library/asyncio-llapi-index.rst:118 +msgid "Create a :class:`Future` object." +msgstr "创建一个 :class:`Future` 对象。 " + +#: ../../library/asyncio-llapi-index.rst:120 +msgid ":meth:`loop.create_task`" +msgstr ":meth:`loop.create_task`" + +#: ../../library/asyncio-llapi-index.rst:121 +msgid "Schedule coroutine as a :class:`Task`." +msgstr "将协程当作 :class:`Task` 一样调度。" + +#: ../../library/asyncio-llapi-index.rst:123 +msgid ":meth:`loop.set_task_factory`" +msgstr ":meth:`loop.set_task_factory`" + +#: ../../library/asyncio-llapi-index.rst:124 +msgid "" +"Set a factory used by :meth:`loop.create_task` to create :class:`Tasks " +"`." +msgstr "设置 :meth:`loop.create_task` 使用的工厂,它将用来创建 :class:`Tasks ` 。" + +#: ../../library/asyncio-llapi-index.rst:127 +msgid ":meth:`loop.get_task_factory`" +msgstr ":meth:`loop.get_task_factory`" + +#: ../../library/asyncio-llapi-index.rst:128 +msgid "" +"Get the factory :meth:`loop.create_task` uses to create :class:`Tasks " +"`." +msgstr "获取 :meth:`loop.create_task` 使用的工厂,它用来创建 :class:`Tasks ` 。" + +#: ../../library/asyncio-llapi-index.rst:132 +msgid "DNS" +msgstr "DNS" + +#: ../../library/asyncio-llapi-index.rst:137 +msgid "``await`` :meth:`loop.getaddrinfo`" +msgstr "``await`` :meth:`loop.getaddrinfo`" + +#: ../../library/asyncio-llapi-index.rst:138 +msgid "Asynchronous version of :meth:`socket.getaddrinfo`." +msgstr "异步版的 :meth:`socket.getaddrinfo` 。" + +#: ../../library/asyncio-llapi-index.rst:140 +msgid "``await`` :meth:`loop.getnameinfo`" +msgstr "``await`` :meth:`loop.getnameinfo`" + +#: ../../library/asyncio-llapi-index.rst:141 +msgid "Asynchronous version of :meth:`socket.getnameinfo`." +msgstr "异步版的 :meth:`socket.getnameinfo` 。" + +#: ../../library/asyncio-llapi-index.rst:144 +msgid "Networking and IPC" +msgstr "网络和IPC" + +#: ../../library/asyncio-llapi-index.rst:149 +msgid "``await`` :meth:`loop.create_connection`" +msgstr "``await`` :meth:`loop.create_connection`" + +#: ../../library/asyncio-llapi-index.rst:150 +msgid "Open a TCP connection." +msgstr "打开一个TCP链接。" + +#: ../../library/asyncio-llapi-index.rst:152 +msgid "``await`` :meth:`loop.create_server`" +msgstr "``await`` :meth:`loop.create_server`" + +#: ../../library/asyncio-llapi-index.rst:153 +msgid "Create a TCP server." +msgstr "创建一个TCP服务。" + +#: ../../library/asyncio-llapi-index.rst:155 +msgid "``await`` :meth:`loop.create_unix_connection`" +msgstr "``await`` :meth:`loop.create_unix_connection`" + +#: ../../library/asyncio-llapi-index.rst:156 +msgid "Open a Unix socket connection." +msgstr "打开一个Unix socket连接。" + +#: ../../library/asyncio-llapi-index.rst:158 +msgid "``await`` :meth:`loop.create_unix_server`" +msgstr "``await`` :meth:`loop.create_unix_server`" + +#: ../../library/asyncio-llapi-index.rst:159 +msgid "Create a Unix socket server." +msgstr "创建一个Unix socket服务。" + +#: ../../library/asyncio-llapi-index.rst:161 +msgid "``await`` :meth:`loop.connect_accepted_socket`" +msgstr "``await`` :meth:`loop.connect_accepted_socket`" + +#: ../../library/asyncio-llapi-index.rst:162 +msgid "Wrap a :class:`~socket.socket` into a ``(transport, protocol)`` pair." +msgstr "将 :class:`~socket.socket` 包装成 ``(transport, protocol)`` 对。" + +#: ../../library/asyncio-llapi-index.rst:165 +msgid "``await`` :meth:`loop.create_datagram_endpoint`" +msgstr "``await`` :meth:`loop.create_datagram_endpoint`" + +#: ../../library/asyncio-llapi-index.rst:166 +msgid "Open a datagram (UDP) connection." +msgstr "打开一个数据报(UDP)连接。" + +#: ../../library/asyncio-llapi-index.rst:168 +msgid "``await`` :meth:`loop.sendfile`" +msgstr "``await`` :meth:`loop.sendfile`" + +#: ../../library/asyncio-llapi-index.rst:169 +msgid "Send a file over a transport." +msgstr "通过传输通道发送一个文件。" + +#: ../../library/asyncio-llapi-index.rst:171 +msgid "``await`` :meth:`loop.start_tls`" +msgstr "``await`` :meth:`loop.start_tls`" + +#: ../../library/asyncio-llapi-index.rst:172 +msgid "Upgrade an existing connection to TLS." +msgstr "将一个已建立的链接升级到TLS。" + +#: ../../library/asyncio-llapi-index.rst:174 +msgid "``await`` :meth:`loop.connect_read_pipe`" +msgstr "``await`` :meth:`loop.connect_read_pipe`" + +#: ../../library/asyncio-llapi-index.rst:175 +msgid "Wrap a read end of a pipe into a ``(transport, protocol)`` pair." +msgstr "将管道读取端包装成 ``(transport, protocol)`` 对。" + +#: ../../library/asyncio-llapi-index.rst:177 +msgid "``await`` :meth:`loop.connect_write_pipe`" +msgstr "``await`` :meth:`loop.connect_write_pipe`" + +#: ../../library/asyncio-llapi-index.rst:178 +msgid "Wrap a write end of a pipe into a ``(transport, protocol)`` pair." +msgstr "将管道写入端包装成 ``(transport, protocol)`` 对。" + +#: ../../library/asyncio-llapi-index.rst:181 +msgid "Sockets" +msgstr "套接字" + +#: ../../library/asyncio-llapi-index.rst:186 +msgid "``await`` :meth:`loop.sock_recv`" +msgstr "``await`` :meth:`loop.sock_recv`" + +#: ../../library/asyncio-llapi-index.rst:187 +msgid "Receive data from the :class:`~socket.socket`." +msgstr "从 :class:`~socket.socket` 接收数据。" + +#: ../../library/asyncio-llapi-index.rst:189 +msgid "``await`` :meth:`loop.sock_recv_into`" +msgstr "``await`` :meth:`loop.sock_recv_into`" + +#: ../../library/asyncio-llapi-index.rst:190 +msgid "Receive data from the :class:`~socket.socket` into a buffer." +msgstr "从 :class:`~socket.socket` 接收数据到一个缓冲区中。" + +#: ../../library/asyncio-llapi-index.rst:192 +msgid "``await`` :meth:`loop.sock_sendall`" +msgstr "``await`` :meth:`loop.sock_sendall`" + +#: ../../library/asyncio-llapi-index.rst:193 +msgid "Send data to the :class:`~socket.socket`." +msgstr "发送数据到 :class:`~socket.socket` 。" + +#: ../../library/asyncio-llapi-index.rst:195 +msgid "``await`` :meth:`loop.sock_connect`" +msgstr "``await`` :meth:`loop.sock_connect`" + +#: ../../library/asyncio-llapi-index.rst:196 +msgid "Connect the :class:`~socket.socket`." +msgstr "链接 ``await`` :meth:`loop.sock_connect` 。" + +#: ../../library/asyncio-llapi-index.rst:198 +msgid "``await`` :meth:`loop.sock_accept`" +msgstr "``await`` :meth:`loop.sock_accept`" + +#: ../../library/asyncio-llapi-index.rst:199 +msgid "Accept a :class:`~socket.socket` connection." +msgstr "接受一个 :class:`~socket.socket` 链接。" + +#: ../../library/asyncio-llapi-index.rst:201 +msgid "``await`` :meth:`loop.sock_sendfile`" +msgstr "``await`` :meth:`loop.sock_sendfile`" + +#: ../../library/asyncio-llapi-index.rst:202 +msgid "Send a file over the :class:`~socket.socket`." +msgstr "利用 :class:`~socket.socket` 发送一个文件。" + +#: ../../library/asyncio-llapi-index.rst:204 +msgid ":meth:`loop.add_reader`" +msgstr ":meth:`loop.add_reader`" + +#: ../../library/asyncio-llapi-index.rst:205 +msgid "Start watching a file descriptor for read availability." +msgstr "开始对一个文件描述符的可读性的监视。" + +#: ../../library/asyncio-llapi-index.rst:207 +msgid ":meth:`loop.remove_reader`" +msgstr ":meth:`loop.remove_reader`" + +#: ../../library/asyncio-llapi-index.rst:208 +msgid "Stop watching a file descriptor for read availability." +msgstr "停止对一个文件描述符的可读性的监视。" + +#: ../../library/asyncio-llapi-index.rst:210 +msgid ":meth:`loop.add_writer`" +msgstr ":meth:`loop.add_writer`" + +#: ../../library/asyncio-llapi-index.rst:211 +msgid "Start watching a file descriptor for write availability." +msgstr "开始对一个文件描述符的可写性的监视。" + +#: ../../library/asyncio-llapi-index.rst:213 +msgid ":meth:`loop.remove_writer`" +msgstr ":meth:`loop.remove_writer`" + +#: ../../library/asyncio-llapi-index.rst:214 +msgid "Stop watching a file descriptor for write availability." +msgstr "停止对一个文件描述符的可写性的监视。" + +#: ../../library/asyncio-llapi-index.rst:217 +msgid "Unix Signals" +msgstr "Unix信号" + +#: ../../library/asyncio-llapi-index.rst:222 +msgid ":meth:`loop.add_signal_handler`" +msgstr ":meth:`loop.add_signal_handler`" + +#: ../../library/asyncio-llapi-index.rst:223 +msgid "Add a handler for a :mod:`signal`." +msgstr "给 :mod:`signal` 添加一个处理回调函数。 " + +#: ../../library/asyncio-llapi-index.rst:225 +msgid ":meth:`loop.remove_signal_handler`" +msgstr ":meth:`loop.remove_signal_handler`" + +#: ../../library/asyncio-llapi-index.rst:226 +msgid "Remove a handler for a :mod:`signal`." +msgstr "删除 :mod:`signal` 的处理回调函数。 " + +#: ../../library/asyncio-llapi-index.rst:229 +msgid "Subprocesses" +msgstr "子进程" + +#: ../../library/asyncio-llapi-index.rst:234 +msgid ":meth:`loop.subprocess_exec`" +msgstr ":meth:`loop.subprocess_exec`" + +#: ../../library/asyncio-llapi-index.rst:235 +msgid "Spawn a subprocess." +msgstr "衍生一个子进程" + +#: ../../library/asyncio-llapi-index.rst:237 +msgid ":meth:`loop.subprocess_shell`" +msgstr ":meth:`loop.subprocess_shell`" + +#: ../../library/asyncio-llapi-index.rst:238 +msgid "Spawn a subprocess from a shell command." +msgstr "从终端命令衍生一个子进程。" + +#: ../../library/asyncio-llapi-index.rst:241 +msgid "Error Handling" +msgstr "错误处理" + +#: ../../library/asyncio-llapi-index.rst:246 +msgid ":meth:`loop.call_exception_handler`" +msgstr ":meth:`loop.call_exception_handler`" + +#: ../../library/asyncio-llapi-index.rst:247 +msgid "Call the exception handler." +msgstr "调用异常处理器。" + +#: ../../library/asyncio-llapi-index.rst:249 +msgid ":meth:`loop.set_exception_handler`" +msgstr ":meth:`loop.set_exception_handler`" + +#: ../../library/asyncio-llapi-index.rst:250 +msgid "Set a new exception handler." +msgstr "设置一个新的异常处理器。" + +#: ../../library/asyncio-llapi-index.rst:252 +msgid ":meth:`loop.get_exception_handler`" +msgstr ":meth:`loop.get_exception_handler`" + +#: ../../library/asyncio-llapi-index.rst:253 +msgid "Get the current exception handler." +msgstr "获取当前异常处理器。" + +#: ../../library/asyncio-llapi-index.rst:255 +msgid ":meth:`loop.default_exception_handler`" +msgstr ":meth:`loop.default_exception_handler`" + +#: ../../library/asyncio-llapi-index.rst:256 +msgid "The default exception handler implementation." +msgstr "默认异常处理器实现。" + +#: ../../library/asyncio-llapi-index.rst:261 +msgid "" +":ref:`Using asyncio.get_event_loop() and loop.run_forever() " +"`." +msgstr "" +":ref:`使用 asyncio.get_event_loop() 和 loop.run_forever() " +"`." + +#: ../../library/asyncio-llapi-index.rst:264 +msgid ":ref:`Using loop.call_later() `." +msgstr ":ref:`使用 loop.call_later() `." + +#: ../../library/asyncio-llapi-index.rst:266 +msgid "" +"Using ``loop.create_connection()`` to implement :ref:`an echo-client " +"`." +msgstr "" +"使用 ``loop.create_connection()`` 实现 :ref:`echo客户端 " +"`." + +#: ../../library/asyncio-llapi-index.rst:269 +msgid "" +"Using ``loop.create_connection()`` to :ref:`connect a socket " +"`." +msgstr "" +"使用 ``loop.create_connection()`` 去 :ref:`链接socket " +"`." + +#: ../../library/asyncio-llapi-index.rst:272 +msgid "" +":ref:`Using add_reader() to watch an FD for read events " +"`." +msgstr ":ref:`使用add_reader()监听FD(文件描述符)的读取事件 `." + +#: ../../library/asyncio-llapi-index.rst:275 +msgid ":ref:`Using loop.add_signal_handler() `." +msgstr ":ref:`使用loop.add_signal_handler() `." + +#: ../../library/asyncio-llapi-index.rst:277 +msgid "" +":ref:`Using loop.subprocess_exec() `." +msgstr "" +":ref:`使用loop.add_signal_handler() `。" + +#: ../../library/asyncio-llapi-index.rst:281 +msgid "Transports" +msgstr "传输" + +#: ../../library/asyncio-llapi-index.rst:283 +msgid "All transports implement the following methods:" +msgstr "所有传输都实现以下方法:" + +#: ../../library/asyncio-llapi-index.rst:289 +msgid ":meth:`transport.close() `" +msgstr ":meth:`transport.close() `" + +#: ../../library/asyncio-llapi-index.rst:290 +msgid "Close the transport." +msgstr "关闭传输。" + +#: ../../library/asyncio-llapi-index.rst:292 +msgid ":meth:`transport.is_closing() `" +msgstr ":meth:`transport.is_closing() `" + +#: ../../library/asyncio-llapi-index.rst:293 +msgid "Return ``True`` if the transport is closing or is closed." +msgstr "返回 ``True`` ,如果传输正在关闭或已经关闭。" + +#: ../../library/asyncio-llapi-index.rst:295 +msgid ":meth:`transport.get_extra_info() `" +msgstr ":meth:`transport.get_extra_info() `" + +#: ../../library/asyncio-llapi-index.rst:296 +msgid "Request for information about the transport." +msgstr "请求传输的相关信息。" + +#: ../../library/asyncio-llapi-index.rst:298 +msgid ":meth:`transport.set_protocol() `" +msgstr ":meth:`transport.set_protocol() `" + +#: ../../library/asyncio-llapi-index.rst:299 +msgid "Set a new protocol." +msgstr "设置一个新协议。" + +#: ../../library/asyncio-llapi-index.rst:301 +msgid ":meth:`transport.get_protocol() `" +msgstr ":meth:`transport.get_protocol() `" + +#: ../../library/asyncio-llapi-index.rst:302 +msgid "Return the current protocol." +msgstr "返回当前协议。" + +#: ../../library/asyncio-llapi-index.rst:305 +msgid "" +"Transports that can receive data (TCP and Unix connections, pipes, etc). " +"Returned from methods like :meth:`loop.create_connection`, " +":meth:`loop.create_unix_connection`, :meth:`loop.connect_read_pipe`, etc:" +msgstr "" +"传输可以接收数据(TCP和Unix链接,管道等)。它通过 :meth:`loop.create_connection`, " +":meth:`loop.create_unix_connection`, :meth:`loop.connect_read_pipe` 等方法返回。" + +#: ../../library/asyncio-llapi-index.rst:310 +msgid "Read Transports" +msgstr "读取传输" + +#: ../../library/asyncio-llapi-index.rst:315 +msgid ":meth:`transport.is_reading() `" +msgstr ":meth:`transport.is_reading() `" + +#: ../../library/asyncio-llapi-index.rst:316 +msgid "Return ``True`` if the transport is receiving." +msgstr "返回 ``True`` ,如果传输正在接收。" + +#: ../../library/asyncio-llapi-index.rst:318 +msgid ":meth:`transport.pause_reading() `" +msgstr ":meth:`transport.pause_reading() `" + +#: ../../library/asyncio-llapi-index.rst:319 +msgid "Pause receiving." +msgstr "暂停接收。" + +#: ../../library/asyncio-llapi-index.rst:321 +msgid ":meth:`transport.resume_reading() `" +msgstr ":meth:`transport.resume_reading() `" + +#: ../../library/asyncio-llapi-index.rst:322 +msgid "Resume receiving." +msgstr "继续接收。" + +#: ../../library/asyncio-llapi-index.rst:325 +msgid "" +"Transports that can Send data (TCP and Unix connections, pipes, etc). " +"Returned from methods like :meth:`loop.create_connection`, " +":meth:`loop.create_unix_connection`, :meth:`loop.connect_write_pipe`, etc:" +msgstr "" +"传输可以发送数据(TCP和Unix链接,管道等)。它通过 :meth:`loop.create_connection`, " +":meth:`loop.create_unix_connection`, :meth:`loop.connect_write_pipe` 等方法返回。" + +#: ../../library/asyncio-llapi-index.rst:330 +msgid "Write Transports" +msgstr "写入传输" + +#: ../../library/asyncio-llapi-index.rst:335 +msgid ":meth:`transport.write() `" +msgstr ":meth:`transport.write() `" + +#: ../../library/asyncio-llapi-index.rst:336 +msgid "Write data to the transport." +msgstr "向传输写入数据。" + +#: ../../library/asyncio-llapi-index.rst:338 +msgid ":meth:`transport.writelines() `" +msgstr ":meth:`transport.write() `" + +#: ../../library/asyncio-llapi-index.rst:339 +msgid "Write buffers to the transport." +msgstr "向传输写入缓冲。" + +#: ../../library/asyncio-llapi-index.rst:341 +msgid ":meth:`transport.can_write_eof() `" +msgstr ":meth:`transport.can_write_eof() `" + +#: ../../library/asyncio-llapi-index.rst:342 +msgid "Return :const:`True` if the transport supports sending EOF." +msgstr "返回 :const:`True` ,如果传输支持发送 EOF。" + +#: ../../library/asyncio-llapi-index.rst:344 +msgid ":meth:`transport.write_eof() `" +msgstr ":meth:`transport.write_eof() `" + +#: ../../library/asyncio-llapi-index.rst:345 +msgid "Close and send EOF after flushing buffered data." +msgstr "在冲洗已缓冲的数据后关闭传输和发送EOF。" + +#: ../../library/asyncio-llapi-index.rst:347 +msgid ":meth:`transport.abort() `" +msgstr ":meth:`transport.abort() `" + +#: ../../library/asyncio-llapi-index.rst:348 +#: ../../library/asyncio-llapi-index.rst:370 +msgid "Close the transport immediately." +msgstr "立即关闭传输。" + +#: ../../library/asyncio-llapi-index.rst:350 +msgid "" +":meth:`transport.get_write_buffer_size() " +"`" +msgstr "" +":meth:`transport.get_write_buffer_size() " +"`" + +#: ../../library/asyncio-llapi-index.rst:352 +msgid "Return high and low water marks for write flow control." +msgstr "返回写入流控制的高位标记位和低位标记位。" + +#: ../../library/asyncio-llapi-index.rst:354 +msgid "" +":meth:`transport.set_write_buffer_limits() " +"`" +msgstr "" +":meth:`transport.set_write_buffer_limits() " +"`" + +#: ../../library/asyncio-llapi-index.rst:356 +msgid "Set new high and low water marks for write flow control." +msgstr "设置新的写入流控制的高位标记位和低位标记位。" + +#: ../../library/asyncio-llapi-index.rst:359 +msgid "Transports returned by :meth:`loop.create_datagram_endpoint`:" +msgstr "由 :meth:`loop.create_datagram_endpoint` 返回的传输:" + +#: ../../library/asyncio-llapi-index.rst:361 +msgid "Datagram Transports" +msgstr "数据报传输" + +#: ../../library/asyncio-llapi-index.rst:366 +msgid ":meth:`transport.sendto() `" +msgstr ":meth:`transport.sendto() `" + +#: ../../library/asyncio-llapi-index.rst:367 +msgid "Send data to the remote peer." +msgstr "发送数据到远程链接端。" + +#: ../../library/asyncio-llapi-index.rst:369 +msgid ":meth:`transport.abort() `" +msgstr ":meth:`transport.abort() `" + +#: ../../library/asyncio-llapi-index.rst:373 +msgid "" +"Low-level transport abstraction over subprocesses. Returned by " +":meth:`loop.subprocess_exec` and :meth:`loop.subprocess_shell`:" +msgstr "" +"基于子进程的底层抽象传输,它由 :meth:`loop.subprocess_exec` 和 :meth:`loop.subprocess_shell`" +" 返回:" + +#: ../../library/asyncio-llapi-index.rst:377 +msgid "Subprocess Transports" +msgstr "子进程传输" + +#: ../../library/asyncio-llapi-index.rst:382 +msgid ":meth:`transport.get_pid() `" +msgstr ":meth:`transport.get_pid() `" + +#: ../../library/asyncio-llapi-index.rst:383 +msgid "Return the subprocess process id." +msgstr "返回子进程的进程ID。" + +#: ../../library/asyncio-llapi-index.rst:385 +msgid "" +":meth:`transport.get_pipe_transport() " +"`" +msgstr "" +":meth:`transport.get_pipe_transport() " +"`" + +#: ../../library/asyncio-llapi-index.rst:387 +msgid "" +"Return the transport for the requested communication pipe (*stdin*, " +"*stdout*, or *stderr*)." +msgstr "返回请求通信管道 (*stdin*, *stdout*, 或 *stderr*)的传输。" + +#: ../../library/asyncio-llapi-index.rst:390 +msgid "" +":meth:`transport.get_returncode() `" +msgstr "" +":meth:`transport.get_returncode() `" + +#: ../../library/asyncio-llapi-index.rst:391 +msgid "Return the subprocess return code." +msgstr "返回子进程的返回代号。" + +#: ../../library/asyncio-llapi-index.rst:393 +msgid ":meth:`transport.kill() `" +msgstr ":meth:`transport.kill() `" + +#: ../../library/asyncio-llapi-index.rst:394 +msgid "Kill the subprocess." +msgstr "杀死子进程。" + +#: ../../library/asyncio-llapi-index.rst:396 +msgid ":meth:`transport.send_signal() `" +msgstr ":meth:`transport.send_signal() `" + +#: ../../library/asyncio-llapi-index.rst:397 +msgid "Send a signal to the subprocess." +msgstr "发送一个信号到子进程。" + +#: ../../library/asyncio-llapi-index.rst:399 +msgid ":meth:`transport.terminate() `" +msgstr ":meth:`transport.terminate() `" + +#: ../../library/asyncio-llapi-index.rst:400 +msgid "Stop the subprocess." +msgstr "停止子进程。" + +#: ../../library/asyncio-llapi-index.rst:402 +msgid ":meth:`transport.close() `" +msgstr ":meth:`transport.close() `" + +#: ../../library/asyncio-llapi-index.rst:403 +msgid "Kill the subprocess and close all pipes." +msgstr "杀死子进程并关闭所有管道。" + +#: ../../library/asyncio-llapi-index.rst:407 +msgid "Protocols" +msgstr "协议" + +#: ../../library/asyncio-llapi-index.rst:409 +msgid "Protocol classes can implement the following **callback methods**:" +msgstr "协议类可以由下面 **回调方法** 实现:" + +#: ../../library/asyncio-llapi-index.rst:415 +msgid "``callback`` :meth:`connection_made() `" +msgstr "``callback`` :meth:`connection_made() `" + +#: ../../library/asyncio-llapi-index.rst:416 +msgid "Called when a connection is made." +msgstr "链接建立时被调用。" + +#: ../../library/asyncio-llapi-index.rst:418 +msgid "``callback`` :meth:`connection_lost() `" +msgstr "``callback`` :meth:`connection_lost() `" + +#: ../../library/asyncio-llapi-index.rst:419 +msgid "Called when the connection is lost or closed." +msgstr "链接丢失或关闭时被调用。" + +#: ../../library/asyncio-llapi-index.rst:421 +msgid "``callback`` :meth:`pause_writing() `" +msgstr "``callback`` :meth:`pause_writing() `" + +#: ../../library/asyncio-llapi-index.rst:422 +msgid "Called when the transport's buffer goes over the high water mark." +msgstr "传输的缓冲区超过高位标记位时被调用。" + +#: ../../library/asyncio-llapi-index.rst:424 +msgid "``callback`` :meth:`resume_writing() `" +msgstr "``callback`` :meth:`resume_writing() `" + +#: ../../library/asyncio-llapi-index.rst:425 +msgid "Called when the transport's buffer drains below the low water mark." +msgstr "传输的缓冲区传送到低位标记位时被调用。" + +#: ../../library/asyncio-llapi-index.rst:428 +msgid "Streaming Protocols (TCP, Unix Sockets, Pipes)" +msgstr "流协议 (TCP, Unix 套接字, 管道)" + +#: ../../library/asyncio-llapi-index.rst:433 +msgid "``callback`` :meth:`data_received() `" +msgstr "``callback`` :meth:`data_received() `" + +#: ../../library/asyncio-llapi-index.rst:434 +msgid "Called when some data is received." +msgstr "接收到数据时被调用。" + +#: ../../library/asyncio-llapi-index.rst:436 +msgid "``callback`` :meth:`eof_received() `" +msgstr "``callback`` :meth:`eof_received() `" + +#: ../../library/asyncio-llapi-index.rst:437 +#: ../../library/asyncio-llapi-index.rst:452 +msgid "Called when an EOF is received." +msgstr "接收到EOF时被调用。" + +#: ../../library/asyncio-llapi-index.rst:440 +msgid "Buffered Streaming Protocols" +msgstr "缓冲流协议" + +#: ../../library/asyncio-llapi-index.rst:445 +msgid "``callback`` :meth:`get_buffer() `" +msgstr "``callback`` :meth:`get_buffer() `" + +#: ../../library/asyncio-llapi-index.rst:446 +msgid "Called to allocate a new receive buffer." +msgstr "调用后会分配新的接收缓冲区。" + +#: ../../library/asyncio-llapi-index.rst:448 +msgid "" +"``callback`` :meth:`buffer_updated() `" +msgstr "" +"``callback`` :meth:`buffer_updated() `" + +#: ../../library/asyncio-llapi-index.rst:449 +msgid "Called when the buffer was updated with the received data." +msgstr "用接收的数据更新缓冲区时被调用。" + +#: ../../library/asyncio-llapi-index.rst:451 +msgid "``callback`` :meth:`eof_received() `" +msgstr "``callback`` :meth:`eof_received() `" + +#: ../../library/asyncio-llapi-index.rst:455 +msgid "Datagram Protocols" +msgstr "数据报协议" + +#: ../../library/asyncio-llapi-index.rst:460 +msgid "" +"``callback`` :meth:`datagram_received() " +"`" +msgstr "" +"``callback`` :meth:`datagram_received() " +"`" + +#: ../../library/asyncio-llapi-index.rst:462 +msgid "Called when a datagram is received." +msgstr "接收到数据报时被调用。" + +#: ../../library/asyncio-llapi-index.rst:464 +msgid "" +"``callback`` :meth:`error_received() `" +msgstr "" +"``callback`` :meth:`error_received() `" + +#: ../../library/asyncio-llapi-index.rst:465 +msgid "" +"Called when a previous send or receive operation raises an :class:`OSError`." +msgstr "前一个发送或接收操作引发 :class:`OSError` 时被调用。" + +#: ../../library/asyncio-llapi-index.rst:469 +msgid "Subprocess Protocols" +msgstr "子进程协议" + +#: ../../library/asyncio-llapi-index.rst:474 +msgid "" +"``callback`` :meth:`pipe_data_received() " +"`" +msgstr "" +"``callback`` :meth:`pipe_data_received() " +"`" + +#: ../../library/asyncio-llapi-index.rst:476 +msgid "" +"Called when the child process writes data into its *stdout* or *stderr* " +"pipe." +msgstr "子进程向 *stdout* 或 *stderr* 管道写入数据时被调用。" + +#: ../../library/asyncio-llapi-index.rst:479 +msgid "" +"``callback`` :meth:`pipe_connection_lost() " +"`" +msgstr "" +"``callback`` :meth:`pipe_connection_lost() " +"`" + +#: ../../library/asyncio-llapi-index.rst:481 +msgid "" +"Called when one of the pipes communicating with the child process is closed." +msgstr "与子进程通信的其中一个管道关闭时被调用。" + +#: ../../library/asyncio-llapi-index.rst:484 +msgid "" +"``callback`` :meth:`process_exited() `" +msgstr "" +"``callback`` :meth:`process_exited() `" + +#: ../../library/asyncio-llapi-index.rst:486 +msgid "Called when the child process has exited." +msgstr "子进程退出时被调用。" + +#: ../../library/asyncio-llapi-index.rst:490 +msgid "Event Loop Policies" +msgstr "事件循环策略" + +#: ../../library/asyncio-llapi-index.rst:492 +msgid "" +"Policies is a low-level mechanism to alter the behavior of functions like " +":func:`asyncio.get_event_loop`. See also the main :ref:`policies section " +"` for more details." +msgstr "" +"策略是改变 :func:`asyncio.get_event_loop` 这类函数行为的一个底层机制。更多细节可以查阅 :ref:`策略部分 " +"`。 " + +#: ../../library/asyncio-llapi-index.rst:498 +msgid "Accessing Policies" +msgstr "访问策略" + +#: ../../library/asyncio-llapi-index.rst:503 +msgid ":meth:`asyncio.get_event_loop_policy`" +msgstr ":meth:`asyncio.get_event_loop_policy`" + +#: ../../library/asyncio-llapi-index.rst:504 +msgid "Return the current process-wide policy." +msgstr "返回当前进程域的策略。" + +#: ../../library/asyncio-llapi-index.rst:506 +msgid ":meth:`asyncio.set_event_loop_policy`" +msgstr ":meth:`asyncio.set_event_loop_policy`" + +#: ../../library/asyncio-llapi-index.rst:507 +msgid "Set a new process-wide policy." +msgstr "设置一个新的进程域策略。" + +#: ../../library/asyncio-llapi-index.rst:509 +msgid ":class:`AbstractEventLoopPolicy`" +msgstr ":class:`AbstractEventLoopPolicy`" + +#: ../../library/asyncio-llapi-index.rst:510 +msgid "Base class for policy objects." +msgstr "策略对象的基类。" diff --git a/library/asyncio-platforms.po b/library/asyncio-platforms.po new file mode 100644 index 000000000..476c57798 --- /dev/null +++ b/library/asyncio-platforms.po @@ -0,0 +1,187 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) 2001-2022, Python Software Foundation +# This file is distributed under the same license as the Python package. +# FIRST AUTHOR , YEAR. +# +# Translators: +# ww song , 2018 +# MuSheng Chen , 2019 +# Freesand Leo , 2019 +# +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: Python 3.9\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2022-11-04 14:34+0000\n" +"PO-Revision-Date: 2018-09-18 00:23+0000\n" +"Last-Translator: Freesand Leo , 2019\n" +"Language-Team: Chinese (China) (https://www.transifex.com/python-doc/teams/5390/zh_CN/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: zh_CN\n" +"Plural-Forms: nplurals=1; plural=0;\n" + +#: ../../library/asyncio-platforms.rst:9 +msgid "Platform Support" +msgstr "平台支持" + +#: ../../library/asyncio-platforms.rst:11 +msgid "" +"The :mod:`asyncio` module is designed to be portable, but some platforms " +"have subtle differences and limitations due to the platforms' underlying " +"architecture and capabilities." +msgstr ":mod:`asyncio` 模块被设计为可移植的,但由于平台的底层架构和功能,一些平台存在细微的差异和限制。" + +#: ../../library/asyncio-platforms.rst:17 +msgid "All Platforms" +msgstr "所有平台" + +#: ../../library/asyncio-platforms.rst:19 +msgid "" +":meth:`loop.add_reader` and :meth:`loop.add_writer` cannot be used to " +"monitor file I/O." +msgstr ":meth:`loop.add_reader` 和 :meth:`loop.add_writer` 不能用来监视文件I/O。" + +#: ../../library/asyncio-platforms.rst:24 +msgid "Windows" +msgstr "Windows" + +#: ../../library/asyncio-platforms.rst:26 +msgid "" +"**Source code:** :source:`Lib/asyncio/proactor_events.py`, " +":source:`Lib/asyncio/windows_events.py`, " +":source:`Lib/asyncio/windows_utils.py`" +msgstr "" +"**源代码:** :source:`Lib/asyncio/proactor_events.py`, " +":source:`Lib/asyncio/windows_events.py`, " +":source:`Lib/asyncio/windows_utils.py`" + +#: ../../library/asyncio-platforms.rst:34 +msgid "On Windows, :class:`ProactorEventLoop` is now the default event loop." +msgstr "在 Windows 上,:class:`ProactorEventLoop` 现在是默认的事件循环。" + +#: ../../library/asyncio-platforms.rst:36 +msgid "All event loops on Windows do not support the following methods:" +msgstr "Windows上的所有事件循环都不支持以下方法:" + +#: ../../library/asyncio-platforms.rst:38 +msgid "" +":meth:`loop.create_unix_connection` and :meth:`loop.create_unix_server` are " +"not supported. The :data:`socket.AF_UNIX` socket family is specific to Unix." +msgstr "" +"不支持 :meth:`loop.create_unix_connection` 和 :meth:`loop.create_unix_server` 。 " +":data:`socket.AF_UNIX` 套接字相关参数仅限于Unix。" + +#: ../../library/asyncio-platforms.rst:42 +msgid "" +":meth:`loop.add_signal_handler` and :meth:`loop.remove_signal_handler` are " +"not supported." +msgstr "" +"不支持 :meth:`loop.add_signal_handler` 和 :meth:`loop.remove_signal_handler` 。" + +#: ../../library/asyncio-platforms.rst:45 +msgid ":class:`SelectorEventLoop` has the following limitations:" +msgstr ":class:`SelectorEventLoop` 有下列限制:" + +#: ../../library/asyncio-platforms.rst:47 +msgid "" +":class:`~selectors.SelectSelector` is used to wait on socket events: it " +"supports sockets and is limited to 512 sockets." +msgstr ":class:`~selectors.SelectSelector` 只被用于等待套接字事件:它支持套接字且最多支持512个套接字。" + +#: ../../library/asyncio-platforms.rst:50 +msgid "" +":meth:`loop.add_reader` and :meth:`loop.add_writer` only accept socket " +"handles (e.g. pipe file descriptors are not supported)." +msgstr "" +":meth:`loop.add_reader` 和 :meth:`loop.add_writer` " +"只接受套接字处理回调函数(如管道、文件描述符等都不支持)。" + +#: ../../library/asyncio-platforms.rst:53 +msgid "" +"Pipes are not supported, so the :meth:`loop.connect_read_pipe` and " +":meth:`loop.connect_write_pipe` methods are not implemented." +msgstr "" +"因为不支持管道,所以 :meth:`loop.connect_read_pipe` 和 :meth:`loop.connect_write_pipe`" +" 方法没有实现。" + +#: ../../library/asyncio-platforms.rst:56 +msgid "" +":ref:`Subprocesses ` are not supported, i.e. " +":meth:`loop.subprocess_exec` and :meth:`loop.subprocess_shell` methods are " +"not implemented." +msgstr "" +"不支持 :ref:`Subprocesses ` ,也就是 " +":meth:`loop.subprocess_exec` 和 :meth:`loop.subprocess_shell` 方法没有实现。" + +#: ../../library/asyncio-platforms.rst:60 +msgid ":class:`ProactorEventLoop` has the following limitations:" +msgstr ":class:`ProactorEventLoop` 有下列限制:" + +#: ../../library/asyncio-platforms.rst:62 +msgid "" +"The :meth:`loop.add_reader` and :meth:`loop.add_writer` methods are not " +"supported." +msgstr "不支持 :meth:`loop.add_reader` 和 :meth:`loop.add_writer` 方法。" + +#: ../../library/asyncio-platforms.rst:65 +msgid "" +"The resolution of the monotonic clock on Windows is usually around 15.6 " +"msec. The best resolution is 0.5 msec. The resolution depends on the " +"hardware (availability of `HPET " +"`_) and on the " +"Windows configuration." +msgstr "" +"Windows上单调时钟的分辨率大约为 15.6 毫秒。最佳的分辨率是 0.5 毫秒。分辨率依赖于具体的硬件(`HPET " +"`_)和Windows的设置。" + +#: ../../library/asyncio-platforms.rst:75 +msgid "Subprocess Support on Windows" +msgstr "Windows的子进程支持" + +#: ../../library/asyncio-platforms.rst:77 +msgid "" +"On Windows, the default event loop :class:`ProactorEventLoop` supports " +"subprocesses, whereas :class:`SelectorEventLoop` does not." +msgstr "" +"在 Windows 上,默认的事件循环 :class:`ProactorEventLoop` 支持子进程,而 " +":class:`SelectorEventLoop` 则不支持。" + +#: ../../library/asyncio-platforms.rst:80 +msgid "" +"The :meth:`policy.set_child_watcher() " +"` function is also not supported," +" as :class:`ProactorEventLoop` has a different mechanism to watch child " +"processes." +msgstr "" +"也不支持 :meth:`policy.set_child_watcher() " +"` 函数,:class:`ProactorEventLoop` " +"有不同的机制来监视子进程。" + +#: ../../library/asyncio-platforms.rst:87 +msgid "macOS" +msgstr "macOS" + +#: ../../library/asyncio-platforms.rst:89 +msgid "Modern macOS versions are fully supported." +msgstr "完整支持流行的macOS版本。" + +#: ../../library/asyncio-platforms.rst:92 +msgid "macOS <= 10.8" +msgstr "macOS <= 10.8" + +#: ../../library/asyncio-platforms.rst:93 +msgid "" +"On macOS 10.6, 10.7 and 10.8, the default event loop uses " +":class:`selectors.KqueueSelector`, which does not support character devices " +"on these versions. The :class:`SelectorEventLoop` can be manually " +"configured to use :class:`~selectors.SelectSelector` or " +":class:`~selectors.PollSelector` to support character devices on these older" +" versions of macOS. Example::" +msgstr "" +"在 macOS 10.6, 10.7 和 10.8 上,默认的事件循环使用 " +":class:`selectors.KqueueSelector`,在这些版本上它并不支持字符设备。 可以手工配置 " +":class:`SelectorEventLoop` 来使用 :class:`~selectors.SelectSelector` 或 " +":class:`~selectors.PollSelector` 以在这些较老版本的 macOS 上支持字符设备。 例如::" diff --git a/library/asyncio-policy.po b/library/asyncio-policy.po new file mode 100644 index 000000000..a5aef2d91 --- /dev/null +++ b/library/asyncio-policy.po @@ -0,0 +1,404 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) 2001-2022, Python Software Foundation +# This file is distributed under the same license as the Python package. +# FIRST AUTHOR , YEAR. +# +# Translators: +# Pan Felix , 2019 +# cdarlint , 2019 +# MuSheng Chen , 2019 +# Freesand Leo , 2021 +# +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: Python 3.9\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2022-11-04 14:34+0000\n" +"PO-Revision-Date: 2018-09-18 00:23+0000\n" +"Last-Translator: Freesand Leo , 2021\n" +"Language-Team: Chinese (China) (https://www.transifex.com/python-doc/teams/5390/zh_CN/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: zh_CN\n" +"Plural-Forms: nplurals=1; plural=0;\n" + +#: ../../library/asyncio-policy.rst:8 +msgid "Policies" +msgstr "策略" + +#: ../../library/asyncio-policy.rst:10 +msgid "" +"An event loop policy is a global per-process object that controls the " +"management of the event loop. Each event loop has a default policy, which " +"can be changed and customized using the policy API." +msgstr "事件循环策略是各个进程的全局对象 ,它控制事件循环的管理。每个事件循环都有一个默认策略,可以使用策略API更改和定制该策略。" + +#: ../../library/asyncio-policy.rst:14 +msgid "" +"A policy defines the notion of *context* and manages a separate event loop " +"per context. The default policy defines *context* to be the current thread." +msgstr "策略定义了“上下文”的概念,每个上下文管理一个单独的事件循环。默认策略将*context*定义为当前线程。" + +#: ../../library/asyncio-policy.rst:18 +msgid "" +"By using a custom event loop policy, the behavior of :func:`get_event_loop`," +" :func:`set_event_loop`, and :func:`new_event_loop` functions can be " +"customized." +msgstr "" +"通过使用自定义事件循环策略,可以自定义 :func:`get_event_loop` 、 :func:`set_event_loop` 和 " +":func:`new_event_loop` 函数的行为。" + +#: ../../library/asyncio-policy.rst:22 +msgid "" +"Policy objects should implement the APIs defined in the " +":class:`AbstractEventLoopPolicy` abstract base class." +msgstr "策略对象应该实现 :class:`AbstractEventLoopPolicy` 抽象基类中定义的API。" + +#: ../../library/asyncio-policy.rst:27 +msgid "Getting and Setting the Policy" +msgstr "获取和设置策略" + +#: ../../library/asyncio-policy.rst:29 +msgid "" +"The following functions can be used to get and set the policy for the " +"current process:" +msgstr "可以使用下面函数获取和设置当前进程的策略:" + +#: ../../library/asyncio-policy.rst:34 +msgid "Return the current process-wide policy." +msgstr "返回当前进程域的策略。" + +#: ../../library/asyncio-policy.rst:38 +msgid "Set the current process-wide policy to *policy*." +msgstr "将 *policy* 设置为当前进程域策略。" + +#: ../../library/asyncio-policy.rst:40 +msgid "If *policy* is set to ``None``, the default policy is restored." +msgstr "如果 *policy* 设为 ``None`` 将恢复默认策略。" + +#: ../../library/asyncio-policy.rst:44 +msgid "Policy Objects" +msgstr "策略对象" + +#: ../../library/asyncio-policy.rst:46 +msgid "The abstract event loop policy base class is defined as follows:" +msgstr "抽象事件循环策略基类定义如下:" + +#: ../../library/asyncio-policy.rst:50 +msgid "An abstract base class for asyncio policies." +msgstr "异步策略的抽象基类。" + +#: ../../library/asyncio-policy.rst:54 +msgid "Get the event loop for the current context." +msgstr "为当前上下文获取事件循环。" + +#: ../../library/asyncio-policy.rst:56 +msgid "" +"Return an event loop object implementing the :class:`AbstractEventLoop` " +"interface." +msgstr "返回一个实现 :class:`AbstractEventLoop` 接口的事件循环对象。" + +#: ../../library/asyncio-policy.rst:59 ../../library/asyncio-policy.rst:71 +msgid "This method should never return ``None``." +msgstr "该方法永远不应返回 ``None``。" + +#: ../../library/asyncio-policy.rst:65 +msgid "Set the event loop for the current context to *loop*." +msgstr "将当前上下文的事件循环设置为 *loop* 。" + +#: ../../library/asyncio-policy.rst:69 +msgid "Create and return a new event loop object." +msgstr "创建并返回一个新的事件循环对象。" + +#: ../../library/asyncio-policy.rst:75 +msgid "Get a child process watcher object." +msgstr "获取子进程监视器对象。" + +#: ../../library/asyncio-policy.rst:77 +msgid "" +"Return a watcher object implementing the :class:`AbstractChildWatcher` " +"interface." +msgstr "返回一个实现 :class:`AbstractChildWatcher` 接口的监视器对象。" + +#: ../../library/asyncio-policy.rst:80 ../../library/asyncio-policy.rst:86 +msgid "This function is Unix specific." +msgstr "该函数仅支持Unix。" + +#: ../../library/asyncio-policy.rst:84 +msgid "Set the current child process watcher to *watcher*." +msgstr "将当前子进程监视器设置为 *watcher* 。" + +#: ../../library/asyncio-policy.rst:89 +msgid "asyncio ships with the following built-in policies:" +msgstr "asyncio附带下列内置策略:" + +#: ../../library/asyncio-policy.rst:94 +msgid "" +"The default asyncio policy. Uses :class:`SelectorEventLoop` on Unix and " +":class:`ProactorEventLoop` on Windows." +msgstr "" +"默认的 asyncio 策略。 在 Unix 上使用 :class:`SelectorEventLoop` 而在 Windows 上使用 " +":class:`ProactorEventLoop`。" + +#: ../../library/asyncio-policy.rst:97 +msgid "" +"There is no need to install the default policy manually. asyncio is " +"configured to use the default policy automatically." +msgstr "不需要手动安装默认策略。asyncio已配置成自动使用默认策略。" + +#: ../../library/asyncio-policy.rst:102 +msgid "On Windows, :class:`ProactorEventLoop` is now used by default." +msgstr "在 Windows 上,现在默认会使用 :class:`ProactorEventLoop`。" + +#: ../../library/asyncio-policy.rst:107 +msgid "" +"An alternative event loop policy that uses the :class:`SelectorEventLoop` " +"event loop implementation." +msgstr "一个使用 :class:`SelectorEventLoop` 事件循环实现的替代事件循环策略。" + +#: ../../library/asyncio-policy.rst:110 ../../library/asyncio-policy.rst:118 +msgid ":ref:`Availability `: Windows." +msgstr ":ref:`可用性 `: Windows。" + +#: ../../library/asyncio-policy.rst:115 +msgid "" +"An alternative event loop policy that uses the :class:`ProactorEventLoop` " +"event loop implementation." +msgstr "使用 :class:`ProactorEventLoop` 事件循环实现的另一种事件循环策略。" + +#: ../../library/asyncio-policy.rst:123 +msgid "Process Watchers" +msgstr "进程监视器" + +#: ../../library/asyncio-policy.rst:125 +msgid "" +"A process watcher allows customization of how an event loop monitors child " +"processes on Unix. Specifically, the event loop needs to know when a child " +"process has exited." +msgstr "进程监视器允许定制事件循环如何监视Unix子进程。具体来说,事件循环需要知道子进程何时退出。" + +#: ../../library/asyncio-policy.rst:129 +msgid "" +"In asyncio, child processes are created with :func:`create_subprocess_exec` " +"and :meth:`loop.subprocess_exec` functions." +msgstr "" +"在asyncio中子进程由 :func:`create_subprocess_exec` 和 :meth:`loop.subprocess_exec`" +" 函数创建。" + +#: ../../library/asyncio-policy.rst:133 +msgid "" +"asyncio defines the :class:`AbstractChildWatcher` abstract base class, which" +" child watchers should implement, and has four different implementations: " +":class:`ThreadedChildWatcher` (configured to be used by default), " +":class:`MultiLoopChildWatcher`, :class:`SafeChildWatcher`, and " +":class:`FastChildWatcher`." +msgstr "" +"asyncio 定义了 :class:`AbstractChildWatcher` 抽象基类,子监视器必须要实现它,并具有四种不同实现: " +":class:`ThreadedChildWatcher` (已配置为默认使用), :class:`MultiLoopChildWatcher`, " +":class:`SafeChildWatcher` 和 :class:`FastChildWatcher`。" + +#: ../../library/asyncio-policy.rst:139 +msgid "" +"See also the :ref:`Subprocess and Threads ` " +"section." +msgstr "请参阅 :ref:`子进程和线程 ` 部分。" + +#: ../../library/asyncio-policy.rst:142 +msgid "" +"The following two functions can be used to customize the child process " +"watcher implementation used by the asyncio event loop:" +msgstr "以下两个函数可用于自定义子进程监视器实现,它将被asyncio事件循环使用:" + +#: ../../library/asyncio-policy.rst:147 +msgid "Return the current child watcher for the current policy." +msgstr "返回当前策略的当前子监视器。" + +#: ../../library/asyncio-policy.rst:151 +msgid "" +"Set the current child watcher to *watcher* for the current policy. " +"*watcher* must implement methods defined in the " +":class:`AbstractChildWatcher` base class." +msgstr "" +"将当前策略的子监视器设置为 *watcher* 。*watcher* 必须实现 :class:`AbstractChildWatcher` " +"基类定义的方法。" + +#: ../../library/asyncio-policy.rst:156 +msgid "" +"Third-party event loops implementations might not support custom child " +"watchers. For such event loops, using :func:`set_child_watcher` might be " +"prohibited or have no effect." +msgstr "第三方事件循环实现可能不支持自定义子监视器。对于这样的事件循环,禁止使用 :func:`set_child_watcher` 或不起作用。" + +#: ../../library/asyncio-policy.rst:164 +msgid "Register a new child handler." +msgstr "注册一个新的子处理回调函数。" + +#: ../../library/asyncio-policy.rst:166 +msgid "" +"Arrange for ``callback(pid, returncode, *args)`` to be called when a process" +" with PID equal to *pid* terminates. Specifying another callback for the " +"same process replaces the previous handler." +msgstr "" +"安排 ``callback(pid, returncode, *args)`` 在进程的PID与 *pid* " +"相等时调用。指定另一个同进程的回调函数替换之前的回调处理函数。" + +#: ../../library/asyncio-policy.rst:171 +msgid "The *callback* callable must be thread-safe." +msgstr "回调函数 *callback* 必须是线程安全。" + +#: ../../library/asyncio-policy.rst:175 +msgid "Removes the handler for process with PID equal to *pid*." +msgstr "删除进程PID与 *pid* 相等的进程的处理函数。" + +#: ../../library/asyncio-policy.rst:177 +msgid "" +"The function returns ``True`` if the handler was successfully removed, " +"``False`` if there was nothing to remove." +msgstr "处理函数成功删除时返回 ``True`` ,没有删除时返回 ``False`` 。" + +#: ../../library/asyncio-policy.rst:182 +msgid "Attach the watcher to an event loop." +msgstr "给一个事件循环绑定监视器。" + +#: ../../library/asyncio-policy.rst:184 +msgid "" +"If the watcher was previously attached to an event loop, then it is first " +"detached before attaching to the new loop." +msgstr "如果监视器之前已绑定另一个事件循环,那么在绑定新循环前会先解绑原来的事件循环。" + +#: ../../library/asyncio-policy.rst:187 +msgid "Note: loop may be ``None``." +msgstr "注意:循环有可能是 ``None`` 。" + +#: ../../library/asyncio-policy.rst:191 +msgid "Return ``True`` if the watcher is ready to use." +msgstr "如果监视器已准备好使用则返回 ``True``。" + +#: ../../library/asyncio-policy.rst:193 +msgid "" +"Spawning a subprocess with *inactive* current child watcher raises " +":exc:`RuntimeError`." +msgstr "使用 *不活动的* 当前子监视器生成子进程将引发 :exc:`RuntimeError`。" + +#: ../../library/asyncio-policy.rst:200 +msgid "Close the watcher." +msgstr "关闭监视器。" + +#: ../../library/asyncio-policy.rst:202 +msgid "" +"This method has to be called to ensure that underlying resources are " +"cleaned-up." +msgstr "必须调用这个方法以确保相关资源会被清理。" + +#: ../../library/asyncio-policy.rst:207 +msgid "" +"This implementation starts a new waiting thread for every subprocess spawn." +msgstr "此实现会为每个生成的子进程启动一具新的等待线程。" + +#: ../../library/asyncio-policy.rst:209 +msgid "" +"It works reliably even when the asyncio event loop is run in a non-main OS " +"thread." +msgstr "即使是当 asyncio 事件循环运行在非主 OS 线程上时它也能可靠地工作。" + +#: ../../library/asyncio-policy.rst:211 +msgid "" +"There is no noticeable overhead when handling a big number of children " +"(*O(1)* each time a child terminates), but starting a thread per process " +"requires extra memory." +msgstr "当处理大量子进程时不存在显著的开销 (每次子进程结束时为 *O(1)*),但当每个进程启动一个线程时则需要额外的内存。" + +#: ../../library/asyncio-policy.rst:214 +msgid "This watcher is used by default." +msgstr "此监视器会默认被使用。" + +#: ../../library/asyncio-policy.rst:220 +msgid "" +"This implementation registers a :py:data:`SIGCHLD` signal handler on " +"instantiation. That can break third-party code that installs a custom " +"handler for :py:data:`SIGCHLD` signal." +msgstr "" +"此实现会在实例化时注册一个 :py:data:`SIGCHLD` 信号处理程序。 这可能会破坏为 :py:data:`SIGCHLD` " +"信号安装自定义处理程序的第三方代码。" + +#: ../../library/asyncio-policy.rst:224 ../../library/asyncio-policy.rst:242 +msgid "" +"The watcher avoids disrupting other code spawning processes by polling every" +" process explicitly on a :py:data:`SIGCHLD` signal." +msgstr "此监视器会在收到 :py:data:`SIGCHLD` 信号时通过显式地轮询每个进程来避免干扰其他代码生成的进程。" + +#: ../../library/asyncio-policy.rst:227 +msgid "" +"There is no limitation for running subprocesses from different threads once " +"the watcher is installed." +msgstr "该监视器一旦被安装就不会限制从不同线程运行子进程。" + +#: ../../library/asyncio-policy.rst:230 +msgid "" +"The solution is safe but it has a significant overhead when handling a big " +"number of processes (*O(n)* each time a :py:data:`SIGCHLD` is received)." +msgstr "该解决方案是安全的,但在处理大量进程时会有显著的开销 (每收到一个 :py:data:`SIGCHLD` 时为 *O(n)*)。" + +#: ../../library/asyncio-policy.rst:238 +msgid "" +"This implementation uses active event loop from the main thread to handle " +":py:data:`SIGCHLD` signal. If the main thread has no running event loop " +"another thread cannot spawn a subprocess (:exc:`RuntimeError` is raised)." +msgstr "" +"该实现会使用主线程中的活动事件循环来处理 :py:data:`SIGCHLD` 信号。 如果主线程没有正在运行的事件循环,则其他线程无法生成子进程 " +"(会引发 :exc:`RuntimeError`)。" + +#: ../../library/asyncio-policy.rst:245 +msgid "" +"This solution is as safe as :class:`MultiLoopChildWatcher` and has the same " +"*O(N)* complexity but requires a running event loop in the main thread to " +"work." +msgstr "" +"该解决方案与 :class:`MultiLoopChildWatcher` 同样安全并同样具有 *O(N)* " +"复杂度,但需要主线程有正在运行的事件循环才能工作。" + +#: ../../library/asyncio-policy.rst:250 +msgid "" +"This implementation reaps every terminated processes by calling " +"``os.waitpid(-1)`` directly, possibly breaking other code spawning processes" +" and waiting for their termination." +msgstr "这种实现直接调用 ``os.waitpid(-1)`` 来获取所有已结束的进程,可能会中断其它代码洐生进程并等待它们结束。" + +#: ../../library/asyncio-policy.rst:254 +msgid "" +"There is no noticeable overhead when handling a big number of children " +"(*O(1)* each time a child terminates)." +msgstr "在处理大量子监视器时没有明显的开销( *O(1)* 每次子监视器结束)。" + +#: ../../library/asyncio-policy.rst:257 +msgid "" +"This solution requires a running event loop in the main thread to work, as " +":class:`SafeChildWatcher`." +msgstr "该解决方案需要主线程有正在运行的事件循环才能工作,这与 :class:`SafeChildWatcher` 一样。" + +#: ../../library/asyncio-policy.rst:262 +msgid "" +"This implementation polls process file descriptors (pidfds) to await child " +"process termination. In some respects, :class:`PidfdChildWatcher` is a " +"\"Goldilocks\" child watcher implementation. It doesn't require signals or " +"threads, doesn't interfere with any processes launched outside the event " +"loop, and scales linearly with the number of subprocesses launched by the " +"event loop. The main disadvantage is that pidfds are specific to Linux, and " +"only work on recent (5.3+) kernels." +msgstr "" +"这个实现会轮询处理文件描述符 (pidfds) 以等待子进程终结。 在某些方面,:class:`PidfdChildWatcher` " +"是一个“理想的”子进程监视器实现。 它不需要使用信号或线程,不会介入任何在事件循环以外发起的进程,并能随事件循环发起的子进程数量进行线性伸缩。 " +"其主要缺点在于 pidfds 是 Linux 专属的,并且仅在较近版本的核心(5.3+)上可用。" + +#: ../../library/asyncio-policy.rst:274 +msgid "Custom Policies" +msgstr "自定义策略" + +#: ../../library/asyncio-policy.rst:276 +msgid "" +"To implement a new event loop policy, it is recommended to subclass " +":class:`DefaultEventLoopPolicy` and override the methods for which custom " +"behavior is wanted, e.g.::" +msgstr "要实现一个新的事件循环策略,建议子类化 :class:`DefaultEventLoopPolicy` 并重写需要定制行为的方法,例如::" diff --git a/library/asyncio-protocol.po b/library/asyncio-protocol.po new file mode 100644 index 000000000..2648ed84e --- /dev/null +++ b/library/asyncio-protocol.po @@ -0,0 +1,1148 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) 2001-2022, Python Software Foundation +# This file is distributed under the same license as the Python package. +# FIRST AUTHOR , YEAR. +# +# Translators: +# Yinuo Huang , 2018 +# Fred , 2018 +# ww song , 2018 +# MuSheng Chen , 2019 +# Pan Felix , 2019 +# Freesand Leo , 2022 +# +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: Python 3.9\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2022-11-04 14:34+0000\n" +"PO-Revision-Date: 2017-02-16 17:49+0000\n" +"Last-Translator: Freesand Leo , 2022\n" +"Language-Team: Chinese (China) (https://www.transifex.com/python-doc/teams/5390/zh_CN/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: zh_CN\n" +"Plural-Forms: nplurals=1; plural=0;\n" + +#: ../../library/asyncio-protocol.rst:9 +msgid "Transports and Protocols" +msgstr "传输和协议" + +#: ../../library/asyncio-protocol.rst:12 +msgid "Preface" +msgstr "前言" + +#: ../../library/asyncio-protocol.rst:13 +msgid "" +"Transports and Protocols are used by the **low-level** event loop APIs such " +"as :meth:`loop.create_connection`. They use callback-based programming " +"style and enable high-performance implementations of network or IPC " +"protocols (e.g. HTTP)." +msgstr "" +"传输和协议会被像 :meth:`loop.create_connection` 这类 **底层** " +"事件循环接口使用。它们使用基于回调的编程风格支持网络或IPC协议(如HTTP)的高性能实现。" + +#: ../../library/asyncio-protocol.rst:18 +msgid "" +"Essentially, transports and protocols should only be used in libraries and " +"frameworks and never in high-level asyncio applications." +msgstr "基本上,传输和协议应只在库和框架上使用,而不应该在高层的异步应用中使用它们。" + +#: ../../library/asyncio-protocol.rst:22 +msgid "This documentation page covers both `Transports`_ and `Protocols`_." +msgstr "本文档包含 `Transports`_ 和 `Protocols`_ 。" + +#: ../../library/asyncio-protocol.rst:25 +msgid "Introduction" +msgstr "概述" + +#: ../../library/asyncio-protocol.rst:26 +msgid "" +"At the highest level, the transport is concerned with *how* bytes are " +"transmitted, while the protocol determines *which* bytes to transmit (and to" +" some extent when)." +msgstr "在最顶层,传输只关心 **怎样** 传送字节内容,而协议决定传送 **哪些** 字节内容(还要在一定程度上考虑何时)。" + +#: ../../library/asyncio-protocol.rst:30 +msgid "" +"A different way of saying the same thing: a transport is an abstraction for " +"a socket (or similar I/O endpoint) while a protocol is an abstraction for an" +" application, from the transport's point of view." +msgstr "也可以这样说:从传输的角度来看,传输是套接字(或类似的I/O终端)的抽象,而协议是应用程序的抽象。" + +#: ../../library/asyncio-protocol.rst:35 +msgid "" +"Yet another view is the transport and protocol interfaces together define an" +" abstract interface for using network I/O and interprocess I/O." +msgstr "换另一种说法,传输和协议一起定义网络I/0和进程间I/O的抽象接口。" + +#: ../../library/asyncio-protocol.rst:39 +msgid "" +"There is always a 1:1 relationship between transport and protocol objects: " +"the protocol calls transport methods to send data, while the transport calls" +" protocol methods to pass it data that has been received." +msgstr "传输对象和协议对象总是一对一关系:协议调用传输方法来发送数据,而传输在接收到数据时调用协议方法传递数据。" + +#: ../../library/asyncio-protocol.rst:44 +msgid "" +"Most of connection oriented event loop methods (such as " +":meth:`loop.create_connection`) usually accept a *protocol_factory* argument" +" used to create a *Protocol* object for an accepted connection, represented " +"by a *Transport* object. Such methods usually return a tuple of " +"``(transport, protocol)``." +msgstr "" +"大部分面向连接的事件循环方法(如 :meth:`loop.create_connection` ) 通常接受 *protocol_factory* " +"参数为接收到的链接创建 *协议* 对象,并用 *传输* 对象来表示。这些方法一般会返回 ``(transport, protocol)`` 元组。" + +#: ../../library/asyncio-protocol.rst:51 +msgid "Contents" +msgstr "内容" + +#: ../../library/asyncio-protocol.rst:52 +msgid "This documentation page contains the following sections:" +msgstr "本文档包含下列小节:" + +#: ../../library/asyncio-protocol.rst:54 +msgid "" +"The `Transports`_ section documents asyncio :class:`BaseTransport`, " +":class:`ReadTransport`, :class:`WriteTransport`, :class:`Transport`, " +":class:`DatagramTransport`, and :class:`SubprocessTransport` classes." +msgstr "" +"`传输`_ 部分记载异步IO :class:`BaseTransport` 、 :class:`ReadTransport` 、 " +":class:`WriteTransport` 、 :class:`Transport` 、 :class:`DatagramTransport` 和 " +":class:`SubprocessTransport` 等类。" + +#: ../../library/asyncio-protocol.rst:59 +msgid "" +"The `Protocols`_ section documents asyncio :class:`BaseProtocol`, " +":class:`Protocol`, :class:`BufferedProtocol`, :class:`DatagramProtocol`, and" +" :class:`SubprocessProtocol` classes." +msgstr "" +" `协议`_ 部分记载异步IO :class:`BaseProtocol` 、 :class:`Protocol` 、 " +":class:`BufferedProtocol` 、 :class:`DatagramProtocol` 和 " +":class:`SubprocessProtocol` 等类。" + +#: ../../library/asyncio-protocol.rst:63 +msgid "" +"The `Examples`_ section showcases how to work with transports, protocols, " +"and low-level event loop APIs." +msgstr "`例子`_ 部分展示怎样使用传输、协议和底层事件循环接口。" + +#: ../../library/asyncio-protocol.rst:70 +msgid "Transports" +msgstr "传输" + +#: ../../library/asyncio-protocol.rst:72 +msgid "**Source code:** :source:`Lib/asyncio/transports.py`" +msgstr "**源码:** :source:`Lib/asyncio/transports.py`" + +#: ../../library/asyncio-protocol.rst:76 +msgid "" +"Transports are classes provided by :mod:`asyncio` in order to abstract " +"various kinds of communication channels." +msgstr "传输属于 :mod:`asyncio` 模块中的类,用来抽象各种通信通道。" + +#: ../../library/asyncio-protocol.rst:79 +msgid "" +"Transport objects are always instantiated by an :ref:`asyncio event loop " +"`." +msgstr "传输对象总是由 :ref:`异步IO事件循环 ` 实例化。" + +#: ../../library/asyncio-protocol.rst:82 +msgid "" +"asyncio implements transports for TCP, UDP, SSL, and subprocess pipes. The " +"methods available on a transport depend on the transport's kind." +msgstr "异步IO实现TCP、UDP、SSL和子进程管道的传输。传输上可用的方法由传输的类型决定。" + +#: ../../library/asyncio-protocol.rst:85 +msgid "" +"The transport classes are :ref:`not thread safe `." +msgstr "传输类属于 :ref:`线程不安全` 。" + +#: ../../library/asyncio-protocol.rst:89 +msgid "Transports Hierarchy" +msgstr "传输层级" + +#: ../../library/asyncio-protocol.rst:93 +msgid "" +"Base class for all transports. Contains methods that all asyncio transports" +" share." +msgstr "所有传输的基类。包含所有异步IO传输共用的方法。" + +#: ../../library/asyncio-protocol.rst:98 +msgid "A base transport for write-only connections." +msgstr "只写链接的基础传输。" + +#: ../../library/asyncio-protocol.rst:100 +msgid "" +"Instances of the *WriteTransport* class are returned from the " +":meth:`loop.connect_write_pipe` event loop method and are also used by " +"subprocess-related methods like :meth:`loop.subprocess_exec`." +msgstr "" +"*WriteTransport* 类的实例由 :meth:`loop.connect_write_pipe` 事件循环方法返回,也被子进程相关的方法如 " +":meth:`loop.subprocess_exec` 使用。" + +#: ../../library/asyncio-protocol.rst:107 +msgid "A base transport for read-only connections." +msgstr "只读链接的基础传输。" + +#: ../../library/asyncio-protocol.rst:109 +msgid "" +"Instances of the *ReadTransport* class are returned from the " +":meth:`loop.connect_read_pipe` event loop method and are also used by " +"subprocess-related methods like :meth:`loop.subprocess_exec`." +msgstr "" +"*ReadTransport* 类的实例由 :meth:`loop.connect_read_pipe` 事件循环方法返回,也被子进程相关的方法如 " +":meth:`loop.subprocess_exec` 使用。" + +#: ../../library/asyncio-protocol.rst:116 +msgid "" +"Interface representing a bidirectional transport, such as a TCP connection." +msgstr "接口代表一个双向传输,如TCP链接。" + +#: ../../library/asyncio-protocol.rst:119 +msgid "" +"The user does not instantiate a transport directly; they call a utility " +"function, passing it a protocol factory and other information necessary to " +"create the transport and protocol." +msgstr "用户不用直接实例化传输;调用一个功能函数,给它传递协议工厂和其它需要的信息就可以创建传输和协议。" + +#: ../../library/asyncio-protocol.rst:123 +msgid "" +"Instances of the *Transport* class are returned from or used by event loop " +"methods like :meth:`loop.create_connection`, " +":meth:`loop.create_unix_connection`, :meth:`loop.create_server`, " +":meth:`loop.sendfile`, etc." +msgstr "" +"*传输* 类实例由如 :meth:`loop.create_connection` 、 " +":meth:`loop.create_unix_connection` 、 :meth:`loop.create_server` 、 " +":meth:`loop.sendfile` 等这类事件循环方法使用或返回。" + +#: ../../library/asyncio-protocol.rst:131 +msgid "A transport for datagram (UDP) connections." +msgstr "数据报(UDP)传输链接。" + +#: ../../library/asyncio-protocol.rst:133 +msgid "" +"Instances of the *DatagramTransport* class are returned from the " +":meth:`loop.create_datagram_endpoint` event loop method." +msgstr "" +"*DatagramTransport* 类实例由事件循环方法 :meth:`loop.create_datagram_endpoint` 返回。" + +#: ../../library/asyncio-protocol.rst:139 +msgid "" +"An abstraction to represent a connection between a parent and its child OS " +"process." +msgstr "表示父进程和子进程之间连接的抽象。" + +#: ../../library/asyncio-protocol.rst:142 +msgid "" +"Instances of the *SubprocessTransport* class are returned from event loop " +"methods :meth:`loop.subprocess_shell` and :meth:`loop.subprocess_exec`." +msgstr "" +"*SubprocessTransport* 类的实例由事件循环方法 :meth:`loop.subprocess_shell` 和 " +":meth:`loop.subprocess_exec` 返回。" + +#: ../../library/asyncio-protocol.rst:148 +msgid "Base Transport" +msgstr "基础传输" + +#: ../../library/asyncio-protocol.rst:152 +msgid "Close the transport." +msgstr "关闭传输。" + +#: ../../library/asyncio-protocol.rst:154 +msgid "" +"If the transport has a buffer for outgoing data, buffered data will be " +"flushed asynchronously. No more data will be received. After all buffered " +"data is flushed, the protocol's :meth:`protocol.connection_lost() " +"` method will be called with :const:`None` as " +"its argument." +msgstr "" +"如果传输具有发送数据缓冲区,将会异步发送已缓存的数据。在所有已缓存的数据都已处理后,就会将 :const:`None` 作为协议 " +":meth:`protocol.connection_lost() ` " +"方法的参数并进行调用。在这之后,传输不再接收任何数据。" + +#: ../../library/asyncio-protocol.rst:163 +msgid "Return ``True`` if the transport is closing or is closed." +msgstr "返回 ``True`` ,如果传输正在关闭或已经关闭。。" + +#: ../../library/asyncio-protocol.rst:167 +msgid "" +"Return information about the transport or underlying resources it uses." +msgstr "返回 传输或它使用的相关资源信息。" + +#: ../../library/asyncio-protocol.rst:170 +msgid "" +"*name* is a string representing the piece of transport-specific information " +"to get." +msgstr "*name* 是表示要获取传输特定信息的字符串。" + +#: ../../library/asyncio-protocol.rst:173 +msgid "" +"*default* is the value to return if the information is not available, or if " +"the transport does not support querying it with the given third-party event " +"loop implementation or on the current platform." +msgstr "*default* 是在信息不可用或传输不支持第三方事件循环实现或当前平台查询时返回的值。" + +#: ../../library/asyncio-protocol.rst:178 +msgid "" +"For example, the following code attempts to get the underlying socket object" +" of the transport::" +msgstr "例如下面代码尝试获取传输相关套接字对象::" + +#: ../../library/asyncio-protocol.rst:185 +msgid "Categories of information that can be queried on some transports:" +msgstr "传输可查询信息类别:" + +#: ../../library/asyncio-protocol.rst:187 +msgid "socket:" +msgstr "套接字:" + +#: ../../library/asyncio-protocol.rst:189 +msgid "" +"``'peername'``: the remote address to which the socket is connected, result " +"of :meth:`socket.socket.getpeername` (``None`` on error)" +msgstr "" +"``'peername'``: 套接字链接时的远端地址,:meth:`socket.socket.getpeername` 方法的结果 (出错时为 " +"``None`` )" + +#: ../../library/asyncio-protocol.rst:193 +msgid "``'socket'``: :class:`socket.socket` instance" +msgstr "``'socket'``: :class:`socket.socket` 实例" + +#: ../../library/asyncio-protocol.rst:195 +msgid "" +"``'sockname'``: the socket's own address, result of " +":meth:`socket.socket.getsockname`" +msgstr "``'sockname'``: 套接字本地地址, :meth:`socket.socket.getsockname` 方法的结果" + +#: ../../library/asyncio-protocol.rst:198 +msgid "SSL socket:" +msgstr "SSL套接字" + +#: ../../library/asyncio-protocol.rst:200 +msgid "" +"``'compression'``: the compression algorithm being used as a string, or " +"``None`` if the connection isn't compressed; result of " +":meth:`ssl.SSLSocket.compression`" +msgstr "" +"``'compression'``: 用字符串指定压缩算法,或者链接没有压缩时为 ``None`` " +";:meth:`ssl.SSLSocket.compression` 的结果。" + +#: ../../library/asyncio-protocol.rst:204 +msgid "" +"``'cipher'``: a three-value tuple containing the name of the cipher being " +"used, the version of the SSL protocol that defines its use, and the number " +"of secret bits being used; result of :meth:`ssl.SSLSocket.cipher`" +msgstr "" +"``'cipher'``: 一个三值的元组,包含使用密码的名称,定义使用的SSL协议的版本,使用的加密位数。 " +":meth:`ssl.SSLSocket.cipher` 的结果。" + +#: ../../library/asyncio-protocol.rst:209 +msgid "" +"``'peercert'``: peer certificate; result of " +":meth:`ssl.SSLSocket.getpeercert`" +msgstr "``'peercert'``: 远端凭证; :meth:`ssl.SSLSocket.getpeercert` 结果。" + +#: ../../library/asyncio-protocol.rst:212 +msgid "``'sslcontext'``: :class:`ssl.SSLContext` instance" +msgstr "``'sslcontext'``: :class:`ssl.SSLContext` 实例" + +#: ../../library/asyncio-protocol.rst:214 +msgid "" +"``'ssl_object'``: :class:`ssl.SSLObject` or :class:`ssl.SSLSocket` instance" +msgstr "``'ssl_object'``: :class:`ssl.SSLObject` 或 :class:`ssl.SSLSocket` 实例" + +#: ../../library/asyncio-protocol.rst:217 +msgid "pipe:" +msgstr "管道:" + +#: ../../library/asyncio-protocol.rst:219 +msgid "``'pipe'``: pipe object" +msgstr "``'pipe'``: 管道对象" + +#: ../../library/asyncio-protocol.rst:221 +msgid "subprocess:" +msgstr "子进程:" + +#: ../../library/asyncio-protocol.rst:223 +msgid "``'subprocess'``: :class:`subprocess.Popen` instance" +msgstr "``'subprocess'``: :class:`subprocess.Popen` 实例" + +#: ../../library/asyncio-protocol.rst:227 +msgid "Set a new protocol." +msgstr "设置一个新协议。" + +#: ../../library/asyncio-protocol.rst:229 +msgid "" +"Switching protocol should only be done when both protocols are documented to" +" support the switch." +msgstr "只有两种协议都写明支持切换才能完成切换协议。" + +#: ../../library/asyncio-protocol.rst:234 +msgid "Return the current protocol." +msgstr "返回当前协议。" + +#: ../../library/asyncio-protocol.rst:238 +msgid "Read-only Transports" +msgstr "只读传输" + +#: ../../library/asyncio-protocol.rst:242 +msgid "Return ``True`` if the transport is receiving new data." +msgstr "如果传输接收到新数据时返回 ``True`` 。" + +#: ../../library/asyncio-protocol.rst:248 +msgid "" +"Pause the receiving end of the transport. No data will be passed to the " +"protocol's :meth:`protocol.data_received() ` method " +"until :meth:`resume_reading` is called." +msgstr "" +"暂停传输的接收端。:meth:`protocol.data_received() ` " +"方法将不会收到数据,除非 :meth:`resume_reading`  被调用。" + +#: ../../library/asyncio-protocol.rst:252 +msgid "" +"The method is idempotent, i.e. it can be called when the transport is " +"already paused or closed." +msgstr "这个方法幂等的, 它可以在传输已经暂停或关闭时调用。" + +#: ../../library/asyncio-protocol.rst:258 +msgid "" +"Resume the receiving end. The protocol's :meth:`protocol.data_received() " +"` method will be called once again if some data is " +"available for reading." +msgstr "" +"恢复接收端。如果有数据可读取时,协议方法 :meth:`protocol.data_received() " +"` 将再次被调用。" + +#: ../../library/asyncio-protocol.rst:262 +msgid "" +"The method is idempotent, i.e. it can be called when the transport is " +"already reading." +msgstr "这个方法幂等的, 它可以在传输已经准备好读取数据时调用。" + +#: ../../library/asyncio-protocol.rst:268 +msgid "Write-only Transports" +msgstr "只写传输" + +#: ../../library/asyncio-protocol.rst:272 +msgid "" +"Close the transport immediately, without waiting for pending operations to " +"complete. Buffered data will be lost. No more data will be received. The " +"protocol's :meth:`protocol.connection_lost() `" +" method will eventually be called with :const:`None` as its argument." +msgstr "" +"立即关闭传输,不会等待已提交的操作处理完毕。已缓存的数据将会丢失。不会接收更多数据。 最终 :const:`None` 将作为协议的 " +":meth:`protocol.connection_lost() ` 方法的参数被调用。" + +#: ../../library/asyncio-protocol.rst:280 +msgid "" +"Return :const:`True` if the transport supports " +":meth:`~WriteTransport.write_eof`, :const:`False` if not." +msgstr "" +"如果传输支持 :meth:`~WriteTransport.write_eof` 返回 :const:`True` 否则返回 " +":const:`False` 。" + +#: ../../library/asyncio-protocol.rst:285 +msgid "Return the current size of the output buffer used by the transport." +msgstr "返回传输使用输出缓冲区的当前大小。" + +#: ../../library/asyncio-protocol.rst:289 +msgid "" +"Get the *high* and *low* watermarks for write flow control. Return a tuple " +"``(low, high)`` where *low* and *high* are positive number of bytes." +msgstr "" +"获取写入流控制 *high* 和 *low* 高低标记位。返回元组 ``(low, high)`` , *low* 和 *high* 为正字节数。" + +#: ../../library/asyncio-protocol.rst:293 +msgid "Use :meth:`set_write_buffer_limits` to set the limits." +msgstr "使用 :meth:`set_write_buffer_limits` 设置限制。" + +#: ../../library/asyncio-protocol.rst:299 +msgid "Set the *high* and *low* watermarks for write flow control." +msgstr "设置写入流控制 *high* 和 *low* 高低标记位。" + +#: ../../library/asyncio-protocol.rst:301 +msgid "" +"These two values (measured in number of bytes) control when the protocol's " +":meth:`protocol.pause_writing() ` and " +":meth:`protocol.resume_writing() ` methods are " +"called. If specified, the low watermark must be less than or equal to the " +"high watermark. Neither *high* nor *low* can be negative." +msgstr "" +"这两个值(以字节数表示)控制何时调用协议的 :meth:`protocol.pause_writing() " +"` 和 :meth:`protocol.resume_writing() " +"` 方法。 如果指明,则低水位必须小于或等于高水位。 *high* 和 *low* " +"都不能为负值。" + +#: ../../library/asyncio-protocol.rst:309 +msgid "" +":meth:`~BaseProtocol.pause_writing` is called when the buffer size becomes " +"greater than or equal to the *high* value. If writing has been paused, " +":meth:`~BaseProtocol.resume_writing` is called when the buffer size becomes " +"less than or equal to the *low* value." +msgstr "" +":meth:`~BaseProtocol.pause_writing` 会在缓冲区尺寸大于或等于 *high* 值时被调用。 " +"如果写入已经被暂停,:meth:`~BaseProtocol.resume_writing` 会在缓冲区尺寸小于或等于 *low* 值时被调用。" + +#: ../../library/asyncio-protocol.rst:314 +msgid "" +"The defaults are implementation-specific. If only the high watermark is " +"given, the low watermark defaults to an implementation-specific value less " +"than or equal to the high watermark. Setting *high* to zero forces *low* to" +" zero as well, and causes :meth:`~BaseProtocol.pause_writing` to be called " +"whenever the buffer becomes non-empty. Setting *low* to zero causes " +":meth:`~BaseProtocol.resume_writing` to be called only once the buffer is " +"empty. Use of zero for either limit is generally sub-optimal as it reduces " +"opportunities for doing I/O and computation concurrently." +msgstr "" +"默认值是实现专属的。 如果只给出了高水位值,则低水位值默认为一个小于或等于高水位值的实现传属值。 将 *high* 设为零会强制将 *low* " +"也设为零,并使得 :meth:`~BaseProtocol.pause_writing` 在缓冲区变为非空的任何时刻被调用。 将 *low* " +"设为零会使得 :meth:`~BaseProtocol.resume_writing` 在缓冲区为空时只被调用一次。 " +"对于上下限都使用零值通常是不够优化的,因为它减少了并发执行 I/O 和计算的机会。" + +#: ../../library/asyncio-protocol.rst:325 +msgid "Use :meth:`~WriteTransport.get_write_buffer_limits` to get the limits." +msgstr "可使用 :meth:`~WriteTransport.get_write_buffer_limits` 来获取上下限值。" + +#: ../../library/asyncio-protocol.rst:330 +msgid "Write some *data* bytes to the transport." +msgstr "将一些 *data* 字节串写入传输。" + +#: ../../library/asyncio-protocol.rst:332 +#: ../../library/asyncio-protocol.rst:361 +msgid "" +"This method does not block; it buffers the data and arranges for it to be " +"sent out asynchronously." +msgstr "此方法不会阻塞;它会缓冲数据并安排其被异步地发出。" + +#: ../../library/asyncio-protocol.rst:337 +msgid "" +"Write a list (or any iterable) of data bytes to the transport. This is " +"functionally equivalent to calling :meth:`write` on each element yielded by " +"the iterable, but may be implemented more efficiently." +msgstr "" +"将数据字节串的列表(或任意可迭代对象)写入传输。 这在功能上等价于在可迭代对象产生的每个元素上调用 :meth:`write`,但其实现可能更为高效。" + +#: ../../library/asyncio-protocol.rst:344 +msgid "" +"Close the write end of the transport after flushing all buffered data. Data " +"may still be received." +msgstr "在刷新所有已缓冲数据之后关闭传输的写入端。 数据仍可以被接收。" + +#: ../../library/asyncio-protocol.rst:347 +msgid "" +"This method can raise :exc:`NotImplementedError` if the transport (e.g. SSL)" +" doesn't support half-closed connections." +msgstr "如果传输(例如 SSL)不支持半关闭的连接,此方法会引发 :exc:`NotImplementedError`。" + +#: ../../library/asyncio-protocol.rst:352 +msgid "Datagram Transports" +msgstr "数据报传输" + +#: ../../library/asyncio-protocol.rst:356 +msgid "" +"Send the *data* bytes to the remote peer given by *addr* (a transport-" +"dependent target address). If *addr* is :const:`None`, the data is sent to " +"the target address given on transport creation." +msgstr "" +"将 *data* 字节串发送到 *addr* (基于传输的目标地址) 所给定的远端对等方。 如果 *addr* 为 " +":const:`None`,则将数据发送到传输创建时给定的目标地址。" + +#: ../../library/asyncio-protocol.rst:366 +msgid "" +"Close the transport immediately, without waiting for pending operations to " +"complete. Buffered data will be lost. No more data will be received. The " +"protocol's :meth:`protocol.connection_lost() `" +" method will eventually be called with :const:`None` as its argument." +msgstr "" +"立即关闭传输,不会等待已提交的操作执行完毕。 已缓存的数据将会丢失。 不会接收更多的数据。 协议的 " +":meth:`protocol.connection_lost() ` 方法最终将附带 " +":const:`None` 作为参数被调用。" + +#: ../../library/asyncio-protocol.rst:376 +msgid "Subprocess Transports" +msgstr "子进程传输" + +#: ../../library/asyncio-protocol.rst:380 +msgid "Return the subprocess process id as an integer." +msgstr "将子进程的进程 ID 以整数形式返回。" + +#: ../../library/asyncio-protocol.rst:384 +msgid "" +"Return the transport for the communication pipe corresponding to the integer" +" file descriptor *fd*:" +msgstr "返回对应于整数文件描述符 *fd* 的通信管道的传输:" + +#: ../../library/asyncio-protocol.rst:387 +msgid "" +"``0``: readable streaming transport of the standard input (*stdin*), or " +":const:`None` if the subprocess was not created with ``stdin=PIPE``" +msgstr "" +"``0``: 标准输入 (*stdin*) 的可读流式传输,如果子进程创建时未设置 ``stdin=PIPE`` 则为 :const:`None`" + +#: ../../library/asyncio-protocol.rst:389 +msgid "" +"``1``: writable streaming transport of the standard output (*stdout*), or " +":const:`None` if the subprocess was not created with ``stdout=PIPE``" +msgstr "" +"``1``: 标准输出 (*stdout*) 的可写流式传输,如果子进程创建时未设置 ``stdout=PIPE`` 则为 :const:`None`" + +#: ../../library/asyncio-protocol.rst:391 +msgid "" +"``2``: writable streaming transport of the standard error (*stderr*), or " +":const:`None` if the subprocess was not created with ``stderr=PIPE``" +msgstr "" +"``2``: 标准错误 (*stderr*) 的可写流式传输,如果子进程创建时未设置 ``stderr=PIPE`` 则为 :const:`None`" + +#: ../../library/asyncio-protocol.rst:393 +msgid "other *fd*: :const:`None`" +msgstr "其他 *fd*: :const:`None`" + +#: ../../library/asyncio-protocol.rst:397 +msgid "" +"Return the subprocess return code as an integer or :const:`None` if it " +"hasn't returned, which is similar to the :attr:`subprocess.Popen.returncode`" +" attribute." +msgstr "" +"返回整数形式的进程返回码,或者如果还未返回则为 :const:`None`,这类似于 " +":attr:`subprocess.Popen.returncode` 属性。" + +#: ../../library/asyncio-protocol.rst:403 +msgid "Kill the subprocess." +msgstr "杀死子进程。" + +#: ../../library/asyncio-protocol.rst:405 +msgid "" +"On POSIX systems, the function sends SIGKILL to the subprocess. On Windows, " +"this method is an alias for :meth:`terminate`." +msgstr "" +"在 POSIX 系统中,函数会发送 SIGKILL 到子进程。 在 Windows 中,此方法是 :meth:`terminate` 的别名。" + +#: ../../library/asyncio-protocol.rst:408 +msgid "See also :meth:`subprocess.Popen.kill`." +msgstr "另请参见 :meth:`subprocess.Popen.kill`。" + +#: ../../library/asyncio-protocol.rst:412 +msgid "" +"Send the *signal* number to the subprocess, as in " +":meth:`subprocess.Popen.send_signal`." +msgstr "发送 *signal* 编号到子进程,与 :meth:`subprocess.Popen.send_signal` 一样。" + +#: ../../library/asyncio-protocol.rst:417 +msgid "Stop the subprocess." +msgstr "停止子进程。" + +#: ../../library/asyncio-protocol.rst:419 +msgid "" +"On POSIX systems, this method sends SIGTERM to the subprocess. On Windows, " +"the Windows API function TerminateProcess() is called to stop the " +"subprocess." +msgstr "" +"在 POSIX 系统中,此方法会发送 SIGTERM 到子进程。 在 Windows 中,则会调用 Windows API 函数 " +"TerminateProcess() 来停止子进程。" + +#: ../../library/asyncio-protocol.rst:423 +msgid "See also :meth:`subprocess.Popen.terminate`." +msgstr "另请参见 :meth:`subprocess.Popen.terminate`。" + +#: ../../library/asyncio-protocol.rst:427 +msgid "Kill the subprocess by calling the :meth:`kill` method." +msgstr "通过调用 :meth:`kill` 方法来杀死子进程。" + +#: ../../library/asyncio-protocol.rst:429 +msgid "" +"If the subprocess hasn't returned yet, and close transports of *stdin*, " +"*stdout*, and *stderr* pipes." +msgstr "如果子进程尚未返回,并关闭 *stdin*, *stdout* 和 *stderr* 管道的传输。" + +#: ../../library/asyncio-protocol.rst:436 +msgid "Protocols" +msgstr "协议" + +#: ../../library/asyncio-protocol.rst:438 +msgid "**Source code:** :source:`Lib/asyncio/protocols.py`" +msgstr "**源码:** :source:`Lib/asyncio/protocols.py`" + +#: ../../library/asyncio-protocol.rst:442 +msgid "" +"asyncio provides a set of abstract base classes that should be used to " +"implement network protocols. Those classes are meant to be used together " +"with :ref:`transports `." +msgstr "" +"asyncio 提供了一组抽象基类,它们应当被用于实现网络协议。 这些类被设计为与 :ref:`传输 ` " +"配合使用。" + +#: ../../library/asyncio-protocol.rst:446 +msgid "" +"Subclasses of abstract base protocol classes may implement some or all " +"methods. All these methods are callbacks: they are called by transports on " +"certain events, for example when some data is received. A base protocol " +"method should be called by the corresponding transport." +msgstr "" +"抽象基础协议类的子类可以实现其中的部分或全部方法。 所有这些方法都是回调:它们由传输或特定事件调用,例如当数据被接收的时候。 " +"基础协议方法应当由相应的传输来调用。" + +#: ../../library/asyncio-protocol.rst:453 +msgid "Base Protocols" +msgstr "基础协议" + +#: ../../library/asyncio-protocol.rst:457 +msgid "Base protocol with methods that all protocols share." +msgstr "带有所有协议的共享方法的基础协议。" + +#: ../../library/asyncio-protocol.rst:461 +msgid "" +"The base class for implementing streaming protocols (TCP, Unix sockets, " +"etc)." +msgstr "用于实现流式协议(TCP, Unix 套接字等等)的基类。" + +#: ../../library/asyncio-protocol.rst:466 +msgid "" +"A base class for implementing streaming protocols with manual control of the" +" receive buffer." +msgstr "用于实现可对接收缓冲区进行手动控制的流式协议的基类。" + +#: ../../library/asyncio-protocol.rst:471 +msgid "The base class for implementing datagram (UDP) protocols." +msgstr "用于实现数据报(UDP)协议的基类。" + +#: ../../library/asyncio-protocol.rst:475 +msgid "" +"The base class for implementing protocols communicating with child processes" +" (unidirectional pipes)." +msgstr "用于实现与子进程通信(单向管道)的协议的基类。" + +#: ../../library/asyncio-protocol.rst:480 +msgid "Base Protocol" +msgstr "基础协议" + +#: ../../library/asyncio-protocol.rst:482 +msgid "All asyncio protocols can implement Base Protocol callbacks." +msgstr "所有 asyncio 协议均可实现基础协议回调。" + +#: ../../library/asyncio-protocol.rst:485 +msgid "Connection Callbacks" +msgstr "连接回调" + +#: ../../library/asyncio-protocol.rst:486 +msgid "" +"Connection callbacks are called on all protocols, exactly once per a " +"successful connection. All other protocol callbacks can only be called " +"between those two methods." +msgstr "连接回调会在所有协议上被调用,每个成功的连接将恰好调用一次。 所有其他协议回调只能在以下两个方法之间被调用。" + +#: ../../library/asyncio-protocol.rst:492 +msgid "Called when a connection is made." +msgstr "连接建立时被调用。" + +#: ../../library/asyncio-protocol.rst:494 +msgid "" +"The *transport* argument is the transport representing the connection. The " +"protocol is responsible for storing the reference to its transport." +msgstr "*transport* 参数是代表连接的传输。 此协议负责将引用保存至对应的传输。" + +#: ../../library/asyncio-protocol.rst:500 +msgid "Called when the connection is lost or closed." +msgstr "连接丢失或关闭时将被调用。" + +#: ../../library/asyncio-protocol.rst:502 +msgid "" +"The argument is either an exception object or :const:`None`. The latter " +"means a regular EOF is received, or the connection was aborted or closed by " +"this side of the connection." +msgstr "方法的参数是一个异常对象或为 :const:`None`。 后者意味着收到了常规的 EOF,或者连接被连接的一端取消或关闭。" + +#: ../../library/asyncio-protocol.rst:508 +msgid "Flow Control Callbacks" +msgstr "流程控制回调" + +#: ../../library/asyncio-protocol.rst:509 +msgid "" +"Flow control callbacks can be called by transports to pause or resume " +"writing performed by the protocol." +msgstr "流程控制回调可由传输来调用以暂停或恢复协议所执行的写入操作。" + +#: ../../library/asyncio-protocol.rst:512 +msgid "" +"See the documentation of the :meth:`~WriteTransport.set_write_buffer_limits`" +" method for more details." +msgstr "请查看 :meth:`~WriteTransport.set_write_buffer_limits` 方法的文档了解详情。" + +#: ../../library/asyncio-protocol.rst:517 +msgid "Called when the transport's buffer goes over the high watermark." +msgstr "当传输的缓冲区升至高水位以上时将被调用。" + +#: ../../library/asyncio-protocol.rst:521 +msgid "Called when the transport's buffer drains below the low watermark." +msgstr "当传输的缓冲区降到低水位以下时将被调用。" + +#: ../../library/asyncio-protocol.rst:523 +msgid "" +"If the buffer size equals the high watermark, " +":meth:`~BaseProtocol.pause_writing` is not called: the buffer size must go " +"strictly over." +msgstr "" +"如果缓冲区大小等于高水位值,则 :meth:`~BaseProtocol.pause_writing` 不会被调用:缓冲区大小必须要高于该值。" + +#: ../../library/asyncio-protocol.rst:527 +msgid "" +"Conversely, :meth:`~BaseProtocol.resume_writing` is called when the buffer " +"size is equal or lower than the low watermark. These end conditions are " +"important to ensure that things go as expected when either mark is zero." +msgstr "" +"相反地,:meth:`~BaseProtocol.resume_writing` 会在缓冲区大小等于或小于低水位值时被调用。 " +"这些结束条件对于当两个水位取零值时也能确保符合预期的行为是很重要的。" + +#: ../../library/asyncio-protocol.rst:534 +msgid "Streaming Protocols" +msgstr "流式协议" + +#: ../../library/asyncio-protocol.rst:536 +msgid "" +"Event methods, such as :meth:`loop.create_server`, " +":meth:`loop.create_unix_server`, :meth:`loop.create_connection`, " +":meth:`loop.create_unix_connection`, :meth:`loop.connect_accepted_socket`, " +":meth:`loop.connect_read_pipe`, and :meth:`loop.connect_write_pipe` accept " +"factories that return streaming protocols." +msgstr "" +"事件方法,例如 :meth:`loop.create_server`, :meth:`loop.create_unix_server`, " +":meth:`loop.create_connection`, :meth:`loop.create_unix_connection`, " +":meth:`loop.connect_accepted_socket`, :meth:`loop.connect_read_pipe` 和 " +":meth:`loop.connect_write_pipe` 都接受返回流式协议的工厂。" + +#: ../../library/asyncio-protocol.rst:544 +msgid "" +"Called when some data is received. *data* is a non-empty bytes object " +"containing the incoming data." +msgstr "当收到数据时被调用。 *data* 为包含入站数据的非空字节串对象。" + +#: ../../library/asyncio-protocol.rst:547 +msgid "" +"Whether the data is buffered, chunked or reassembled depends on the " +"transport. In general, you shouldn't rely on specific semantics and instead" +" make your parsing generic and flexible. However, data is always received in" +" the correct order." +msgstr "" +"数据是否会被缓冲、分块或重组取决于具体传输。 通常,你不应依赖于特定的语义而应使你的解析具有通用性和灵活性。 但是,数据总是要以正确的顺序被接收。" + +#: ../../library/asyncio-protocol.rst:552 +msgid "" +"The method can be called an arbitrary number of times while a connection is " +"open." +msgstr "此方法在连接打开期间可以被调用任意次数。" + +#: ../../library/asyncio-protocol.rst:555 +msgid "" +"However, :meth:`protocol.eof_received() ` is called " +"at most once. Once `eof_received()` is called, ``data_received()`` is not " +"called anymore." +msgstr "" +"但是,:meth:`protocol.eof_received() ` 最多只会被调用一次。 一旦 " +"`eof_received()` 被调用,``data_received()`` 就不会再被调用。" + +#: ../../library/asyncio-protocol.rst:561 +msgid "" +"Called when the other end signals it won't send any more data (for example " +"by calling :meth:`transport.write_eof() `, if the " +"other end also uses asyncio)." +msgstr "" +"当发出信号的另一端不再继续发送数据时(例如通过调用 :meth:`transport.write_eof() " +"`,如果另一端也使用 asyncio 的话)被调用。" + +#: ../../library/asyncio-protocol.rst:566 +msgid "" +"This method may return a false value (including ``None``), in which case the" +" transport will close itself. Conversely, if this method returns a true " +"value, the protocol used determines whether to close the transport. Since " +"the default implementation returns ``None``, it implicitly closes the " +"connection." +msgstr "" +"此方法可能返回假值 (包括 ``None``),在此情况下传输将会自行关闭。 相反地,如果此方法返回真值,将以所用的协议来确定是否要关闭传输。 " +"由于默认实现是返回 ``None``,因此它会隐式地关闭连接。" + +#: ../../library/asyncio-protocol.rst:572 +msgid "" +"Some transports, including SSL, don't support half-closed connections, in " +"which case returning true from this method will result in the connection " +"being closed." +msgstr "某些传输,包括 SSL 在内,并不支持半关闭的连接,在此情况下从该方法返回真值将导致连接被关闭。" + +#: ../../library/asyncio-protocol.rst:577 +#: ../../library/asyncio-protocol.rst:635 +msgid "State machine:" +msgstr "状态机:" + +#: ../../library/asyncio-protocol.rst:588 +msgid "Buffered Streaming Protocols" +msgstr "缓冲流协议" + +#: ../../library/asyncio-protocol.rst:592 +msgid "" +"Buffered Protocols can be used with any event loop method that supports " +"`Streaming Protocols`_." +msgstr "带缓冲的协议可与任何支持 `流式协议`_ 的事件循环方法配合使用。" + +#: ../../library/asyncio-protocol.rst:595 +msgid "" +"``BufferedProtocol`` implementations allow explicit manual allocation and " +"control of the receive buffer. Event loops can then use the buffer provided" +" by the protocol to avoid unnecessary data copies. This can result in " +"noticeable performance improvement for protocols that receive big amounts of" +" data. Sophisticated protocol implementations can significantly reduce the " +"number of buffer allocations." +msgstr "" +"``BufferedProtocol`` 实现允许显式手动分配和控制接收缓冲区。 随后事件循环可以使用协议提供的缓冲区来避免不必要的数据复制。 " +"这对于接收大量数据的协议来说会有明显的性能提升。 复杂的协议实现能显著地减少缓冲区分配的数量。" + +#: ../../library/asyncio-protocol.rst:602 +msgid "" +"The following callbacks are called on :class:`BufferedProtocol` instances:" +msgstr "以下回调是在 :class:`BufferedProtocol` 实例上被调用的:" + +#: ../../library/asyncio-protocol.rst:607 +msgid "Called to allocate a new receive buffer." +msgstr "调用后会分配新的接收缓冲区。" + +#: ../../library/asyncio-protocol.rst:609 +msgid "" +"*sizehint* is the recommended minimum size for the returned buffer. It is " +"acceptable to return smaller or larger buffers than what *sizehint* " +"suggests. When set to -1, the buffer size can be arbitrary. It is an error " +"to return a buffer with a zero size." +msgstr "" +"*sizehint* 是推荐的返回缓冲区最小尺寸。 返回小于或大于 *sizehint* 推荐尺寸的缓冲区也是可接受的。 当设为 -1 " +"时,缓冲区尺寸可以是任意的。 返回尺寸为零的缓冲区则是错误的。" + +#: ../../library/asyncio-protocol.rst:614 +msgid "" +"``get_buffer()`` must return an object implementing the :ref:`buffer " +"protocol `." +msgstr "``get_buffer()`` 必须返回一个实现了 :ref:`缓冲区协议 ` 的对象。" + +#: ../../library/asyncio-protocol.rst:619 +msgid "Called when the buffer was updated with the received data." +msgstr "用接收的数据更新缓冲区时被调用。" + +#: ../../library/asyncio-protocol.rst:621 +msgid "*nbytes* is the total number of bytes that were written to the buffer." +msgstr "*nbytes* 是被写入到缓冲区的字节总数。" + +#: ../../library/asyncio-protocol.rst:625 +msgid "" +"See the documentation of the :meth:`protocol.eof_received() " +"` method." +msgstr "请查看 :meth:`protocol.eof_received() ` 方法的文档。" + +#: ../../library/asyncio-protocol.rst:629 +msgid "" +":meth:`~BufferedProtocol.get_buffer` can be called an arbitrary number of " +"times during a connection. However, :meth:`protocol.eof_received() " +"` is called at most once and, if called, " +":meth:`~BufferedProtocol.get_buffer` and " +":meth:`~BufferedProtocol.buffer_updated` won't be called after it." +msgstr "" +"在连接期间 :meth:`~BufferedProtocol.get_buffer` 可以被调用任意次数。 " +"但是,:meth:`protocol.eof_received() ` " +"最多只能被调用一次,如果被调用,则在此之后 :meth:`~BufferedProtocol.get_buffer` 和 " +":meth:`~BufferedProtocol.buffer_updated` 不能再被调用。" + +#: ../../library/asyncio-protocol.rst:648 +msgid "Datagram Protocols" +msgstr "数据报协议" + +#: ../../library/asyncio-protocol.rst:650 +msgid "" +"Datagram Protocol instances should be constructed by protocol factories " +"passed to the :meth:`loop.create_datagram_endpoint` method." +msgstr "数据报协议实例应当由传递给 :meth:`loop.create_datagram_endpoint` 方法的协议工厂来构造。" + +#: ../../library/asyncio-protocol.rst:655 +msgid "" +"Called when a datagram is received. *data* is a bytes object containing the" +" incoming data. *addr* is the address of the peer sending the data; the " +"exact format depends on the transport." +msgstr "当接收到数据报时被调用。 *data* 是包含传入数据的字节串对象。 *addr* 是发送数据的对等端地址;实际的格式取决于具体传输。" + +#: ../../library/asyncio-protocol.rst:661 +msgid "" +"Called when a previous send or receive operation raises an :class:`OSError`." +" *exc* is the :class:`OSError` instance." +msgstr "当前一个发送或接收操作引发 :class:`OSError` 时被调用。 *exc* 是 :class:`OSError` 的实例。" + +#: ../../library/asyncio-protocol.rst:664 +msgid "" +"This method is called in rare conditions, when the transport (e.g. UDP) " +"detects that a datagram could not be delivered to its recipient. In many " +"conditions though, undeliverable datagrams will be silently dropped." +msgstr "此方法会在当传输(例如UDP)检测到无法将数据报传给接收方等极少数情况下被调用。 而在大多数情况下,无法送达的数据报将被静默地丢弃。" + +#: ../../library/asyncio-protocol.rst:671 +msgid "" +"On BSD systems (macOS, FreeBSD, etc.) flow control is not supported for " +"datagram protocols, because there is no reliable way to detect send failures" +" caused by writing too many packets." +msgstr "在 BSD 系统(macOS, FreeBSD 等等)上,数据报协议不支持流控制,因为没有可靠的方式来检测因写入多过包所导致的发送失败。" + +#: ../../library/asyncio-protocol.rst:675 +msgid "" +"The socket always appears 'ready' and excess packets are dropped. An " +":class:`OSError` with ``errno`` set to :const:`errno.ENOBUFS` may or may not" +" be raised; if it is raised, it will be reported to " +":meth:`DatagramProtocol.error_received` but otherwise ignored." +msgstr "" +"套接字总是显示为 'ready' 且多余的包会被丢弃。 有一定的可能性会引发 :class:`OSError` 并设置 ``errno`` 为 " +":const:`errno.ENOBUFS`;如果此异常被引发,它将被报告给 " +":meth:`DatagramProtocol.error_received`,在其他情况下则会被忽略。" + +#: ../../library/asyncio-protocol.rst:684 +msgid "Subprocess Protocols" +msgstr "子进程协议" + +#: ../../library/asyncio-protocol.rst:686 +msgid "" +"Subprocess Protocol instances should be constructed by protocol factories " +"passed to the :meth:`loop.subprocess_exec` and :meth:`loop.subprocess_shell`" +" methods." +msgstr "" +"子进程协议实例应当由传递给 :meth:`loop.subprocess_exec` 和 :meth:`loop.subprocess_shell` " +"方法的协议工厂函数来构造。" + +#: ../../library/asyncio-protocol.rst:692 +msgid "" +"Called when the child process writes data into its stdout or stderr pipe." +msgstr "当子进程向其 stdout 或 stderr 管道写入数据时被调用。" + +#: ../../library/asyncio-protocol.rst:695 +msgid "*fd* is the integer file descriptor of the pipe." +msgstr "*fd* 是以整数表示的管道文件描述符。" + +#: ../../library/asyncio-protocol.rst:697 +msgid "*data* is a non-empty bytes object containing the received data." +msgstr "*data* 是包含已接收数据的非空字节串对象。" + +#: ../../library/asyncio-protocol.rst:701 +msgid "" +"Called when one of the pipes communicating with the child process is closed." +msgstr "与子进程通信的其中一个管道关闭时被调用。" + +#: ../../library/asyncio-protocol.rst:704 +msgid "*fd* is the integer file descriptor that was closed." +msgstr "*fd* 以整数表示的已关闭文件描述符。" + +#: ../../library/asyncio-protocol.rst:708 +msgid "Called when the child process has exited." +msgstr "子进程退出时被调用。" + +#: ../../library/asyncio-protocol.rst:712 +msgid "Examples" +msgstr "示例" + +#: ../../library/asyncio-protocol.rst:717 +msgid "TCP Echo Server" +msgstr "TCP 回显服务器" + +#: ../../library/asyncio-protocol.rst:719 +msgid "" +"Create a TCP echo server using the :meth:`loop.create_server` method, send " +"back received data, and close the connection::" +msgstr "使用 :meth:`loop.create_server` 方法创建 TCP 回显服务器,发回已接收的数据,并关闭连接::" + +#: ../../library/asyncio-protocol.rst:760 +msgid "" +"The :ref:`TCP echo server using streams ` " +"example uses the high-level :func:`asyncio.start_server` function." +msgstr "" +":ref:`使用流的 TCP 回显服务器 ` 示例,使用了高层级的 " +":func:`asyncio.start_server` 函数。" + +#: ../../library/asyncio-protocol.rst:766 +msgid "TCP Echo Client" +msgstr "TCP 回显客户端" + +#: ../../library/asyncio-protocol.rst:768 +msgid "" +"A TCP echo client using the :meth:`loop.create_connection` method, sends " +"data, and waits until the connection is closed::" +msgstr "使用 :meth:`loop.create_connection` 方法的 TCP 回显客户端,发送数据并等待,直到连接被关闭::" + +#: ../../library/asyncio-protocol.rst:816 +msgid "" +"The :ref:`TCP echo client using streams ` " +"example uses the high-level :func:`asyncio.open_connection` function." +msgstr "" +":ref:`使用流的 TCP 回显客户端 ` 示例,使用了高层级的 " +":func:`asyncio.open_connection` 函数。" + +#: ../../library/asyncio-protocol.rst:823 +msgid "UDP Echo Server" +msgstr "UDP 回显服务器" + +#: ../../library/asyncio-protocol.rst:825 +msgid "" +"A UDP echo server, using the :meth:`loop.create_datagram_endpoint` method, " +"sends back received data::" +msgstr "使用 :meth:`loop.create_datagram_endpoint` 方法的 UDP 回显服务器,发回已接收的数据::" + +#: ../../library/asyncio-protocol.rst:867 +msgid "UDP Echo Client" +msgstr "UDP 回显客户端" + +#: ../../library/asyncio-protocol.rst:869 +msgid "" +"A UDP echo client, using the :meth:`loop.create_datagram_endpoint` method, " +"sends data and closes the transport when it receives the answer::" +msgstr "" +"使用 :meth:`loop.create_datagram_endpoint` 方法的 UDP 回显客户端,发送数据并在收到回应时关闭传输::" + +#: ../../library/asyncio-protocol.rst:924 +msgid "Connecting Existing Sockets" +msgstr "链接已存在的套接字" + +#: ../../library/asyncio-protocol.rst:926 +msgid "" +"Wait until a socket receives data using the :meth:`loop.create_connection` " +"method with a protocol::" +msgstr "附带一个协议使用 :meth:`loop.create_connection` 方法,等待直到套接字接收数据::" + +#: ../../library/asyncio-protocol.rst:980 +msgid "" +"The :ref:`watch a file descriptor for read events " +"` example uses the low-level " +":meth:`loop.add_reader` method to register an FD." +msgstr "" +"使用低层级的 :meth:`loop.add_reader` 方法来注册一个 FD 的 :ref:`监视文件描述符以读取事件 " +"` 示例。" + +#: ../../library/asyncio-protocol.rst:984 +msgid "" +"The :ref:`register an open socket to wait for data using streams " +"` example uses high-level streams" +" created by the :func:`open_connection` function in a coroutine." +msgstr "" +"使用在协程中通过 :func:`open_connection` 函数创建的高层级流的 :ref:`注册一个打开的套接字以等待使用流的数据 " +"` 示例。" + +#: ../../library/asyncio-protocol.rst:991 +msgid "loop.subprocess_exec() and SubprocessProtocol" +msgstr "loop.subprocess_exec() 与 SubprocessProtocol" + +#: ../../library/asyncio-protocol.rst:993 +msgid "" +"An example of a subprocess protocol used to get the output of a subprocess " +"and to wait for the subprocess exit." +msgstr "一个使用子进程协议来获取子进程的输出并等待子进程退出的示例。" + +#: ../../library/asyncio-protocol.rst:996 +msgid "The subprocess is created by the :meth:`loop.subprocess_exec` method::" +msgstr "这个子进程是由 :meth:`loop.subprocess_exec` 方法创建的::" + +#: ../../library/asyncio-protocol.rst:1042 +msgid "" +"See also the :ref:`same example ` " +"written using high-level APIs." +msgstr "" +"另请参阅使用高层级 API 编写的 :ref:`相同示例 `。" diff --git a/library/asyncio-queue.po b/library/asyncio-queue.po new file mode 100644 index 000000000..c3126c655 --- /dev/null +++ b/library/asyncio-queue.po @@ -0,0 +1,227 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) 2001-2022, Python Software Foundation +# This file is distributed under the same license as the Python package. +# FIRST AUTHOR , YEAR. +# +# Translators: +# Shengjing Zhu , 2018 +# ww song , 2018 +# Fred , 2018 +# kevin wong , 2019 +# walkinrain , 2019 +# Alpha Du , 2019 +# Freesand Leo , 2019 +# +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: Python 3.9\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2022-11-04 14:34+0000\n" +"PO-Revision-Date: 2017-02-16 17:49+0000\n" +"Last-Translator: Freesand Leo , 2019\n" +"Language-Team: Chinese (China) (https://www.transifex.com/python-doc/teams/5390/zh_CN/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: zh_CN\n" +"Plural-Forms: nplurals=1; plural=0;\n" + +#: ../../library/asyncio-queue.rst:7 +msgid "Queues" +msgstr "队列集" + +#: ../../library/asyncio-queue.rst:9 +msgid "**Source code:** :source:`Lib/asyncio/queues.py`" +msgstr "**源代码:** :source:`Lib/asyncio/queues.py`" + +#: ../../library/asyncio-queue.rst:13 +msgid "" +"asyncio queues are designed to be similar to classes of the :mod:`queue` " +"module. Although asyncio queues are not thread-safe, they are designed to " +"be used specifically in async/await code." +msgstr "" +"asyncio 队列被设计成与 :mod:`queue` 模块类似。尽管 asyncio队列不是线程安全的,但是他们是被设计专用于 " +"async/await 代码。" + +#: ../../library/asyncio-queue.rst:17 +msgid "" +"Note that methods of asyncio queues don't have a *timeout* parameter; use " +":func:`asyncio.wait_for` function to do queue operations with a timeout." +msgstr "" +"注意asyncio 的队列没有 *timeout* 形参;请使用 :func:`asyncio.wait_for` 函数为队列添加超时操作。" + +#: ../../library/asyncio-queue.rst:21 +msgid "See also the `Examples`_ section below." +msgstr "参见下面的 `Examples`_ 部分" + +#: ../../library/asyncio-queue.rst:24 +msgid "Queue" +msgstr "队列" + +#: ../../library/asyncio-queue.rst:28 +msgid "A first in, first out (FIFO) queue." +msgstr "先进,先出(FIFO)队列" + +#: ../../library/asyncio-queue.rst:30 +msgid "" +"If *maxsize* is less than or equal to zero, the queue size is infinite. If " +"it is an integer greater than ``0``, then ``await put()`` blocks when the " +"queue reaches *maxsize* until an item is removed by :meth:`get`." +msgstr "" +"如果 *maxsize* 小于等于零,则队列尺寸是无限的。如果是大于 ``0`` 的整数,则当队列达到 *maxsize* 时, ``await " +"put()`` 将阻塞至某个元素被 :meth:`get` 取出。" + +#: ../../library/asyncio-queue.rst:35 +msgid "" +"Unlike the standard library threading :mod:`queue`, the size of the queue is" +" always known and can be returned by calling the :meth:`qsize` method." +msgstr "不像标准库中的并发型 :mod:`queue` ,队列的尺寸一直是已知的,可以通过调用 :meth:`qsize` 方法返回。" + +#: ../../library/asyncio-queue.rst:42 +msgid "The *loop* parameter." +msgstr "*loop* 形参。" + +#: ../../library/asyncio-queue.rst:43 +msgid "This class is :ref:`not thread safe `." +msgstr "这个类 :ref:`不是线程安全的 `。" + +#: ../../library/asyncio-queue.rst:47 +msgid "Number of items allowed in the queue." +msgstr "队列中可存放的元素数量。" + +#: ../../library/asyncio-queue.rst:51 +msgid "Return ``True`` if the queue is empty, ``False`` otherwise." +msgstr "如果队列为空返回 ``True`` ,否则返回 ``False`` 。" + +#: ../../library/asyncio-queue.rst:55 +msgid "Return ``True`` if there are :attr:`maxsize` items in the queue." +msgstr "如果有 :attr:`maxsize` 个条目在队列中,则返回 ``True`` 。" + +#: ../../library/asyncio-queue.rst:57 +msgid "" +"If the queue was initialized with ``maxsize=0`` (the default), then " +":meth:`full()` never returns ``True``." +msgstr "如果队列用 ``maxsize=0`` (默认)初始化,则 :meth:`full()` 永远不会返回 ``True`` 。" + +#: ../../library/asyncio-queue.rst:62 +msgid "" +"Remove and return an item from the queue. If queue is empty, wait until an " +"item is available." +msgstr "从队列中删除并返回一个元素。如果队列为空,则等待,直到队列中有元素。" + +#: ../../library/asyncio-queue.rst:67 +msgid "" +"Return an item if one is immediately available, else raise " +":exc:`QueueEmpty`." +msgstr "立即返回一个队列中的元素,如果队列内有值,否则引发异常 :exc:`QueueEmpty` 。" + +#: ../../library/asyncio-queue.rst:72 +msgid "Block until all items in the queue have been received and processed." +msgstr "阻塞至队列中所有的元素都被接收和处理完毕。" + +#: ../../library/asyncio-queue.rst:74 +msgid "" +"The count of unfinished tasks goes up whenever an item is added to the " +"queue. The count goes down whenever a consumer coroutine calls " +":meth:`task_done` to indicate that the item was retrieved and all work on it" +" is complete. When the count of unfinished tasks drops to zero, " +":meth:`join` unblocks." +msgstr "" +"当条目添加到队列的时候,未完成任务的计数就会增加。每当消费协程调用 :meth:`task_done` " +"表示这个条目已经被回收,该条目所有工作已经完成,未完成计数就会减少。当未完成计数降到零的时候, :meth:`join` 阻塞被解除。" + +#: ../../library/asyncio-queue.rst:82 +msgid "" +"Put an item into the queue. If the queue is full, wait until a free slot is " +"available before adding the item." +msgstr "添加一个元素进队列。如果队列满了,在添加元素之前,会一直等待空闲插槽可用。" + +#: ../../library/asyncio-queue.rst:87 +msgid "Put an item into the queue without blocking." +msgstr "不阻塞的放一个元素入队列。" + +#: ../../library/asyncio-queue.rst:89 +msgid "If no free slot is immediately available, raise :exc:`QueueFull`." +msgstr "如果没有立即可用的空闲槽,引发 :exc:`QueueFull` 异常。" + +#: ../../library/asyncio-queue.rst:93 +msgid "Return the number of items in the queue." +msgstr "返回队列用的元素数量。" + +#: ../../library/asyncio-queue.rst:97 +msgid "Indicate that a formerly enqueued task is complete." +msgstr "表明前面排队的任务已经完成,即get出来的元素相关操作已经完成。" + +#: ../../library/asyncio-queue.rst:99 +msgid "" +"Used by queue consumers. For each :meth:`~Queue.get` used to fetch a task, a" +" subsequent call to :meth:`task_done` tells the queue that the processing on" +" the task is complete." +msgstr "" +"由队列使用者控制。每个 :meth:`~Queue.get` 用于获取一个任务,任务最后调用 :meth:`task_done` " +"告诉队列,这个任务已经完成。" + +#: ../../library/asyncio-queue.rst:103 +msgid "" +"If a :meth:`join` is currently blocking, it will resume when all items have " +"been processed (meaning that a :meth:`task_done` call was received for every" +" item that had been :meth:`~Queue.put` into the queue)." +msgstr "" +"如果 :meth:`join` 当前正在阻塞,在所有条目都被处理后,将解除阻塞(意味着每个 :meth:`~Queue.put` 进队列的条目的 " +":meth:`task_done` 都被收到)。" + +#: ../../library/asyncio-queue.rst:108 +msgid "" +"Raises :exc:`ValueError` if called more times than there were items placed " +"in the queue." +msgstr "如果被调用的次数多于放入队列中的项目数量,将引发 :exc:`ValueError` 。" + +#: ../../library/asyncio-queue.rst:113 +msgid "Priority Queue" +msgstr "优先级队列" + +#: ../../library/asyncio-queue.rst:117 +msgid "" +"A variant of :class:`Queue`; retrieves entries in priority order (lowest " +"first)." +msgstr ":class:`Queue` 的变体;按优先级顺序取出条目 (最小的先取出)。" + +#: ../../library/asyncio-queue.rst:120 +msgid "Entries are typically tuples of the form ``(priority_number, data)``." +msgstr "条目通常是 ``(priority_number, data)`` 形式的元组。" + +#: ../../library/asyncio-queue.rst:125 +msgid "LIFO Queue" +msgstr "后进先出队列" + +#: ../../library/asyncio-queue.rst:129 +msgid "" +"A variant of :class:`Queue` that retrieves most recently added entries first" +" (last in, first out)." +msgstr ":class:`Queue` 的变体,先取出最近添加的条目(后进,先出)。" + +#: ../../library/asyncio-queue.rst:134 +msgid "Exceptions" +msgstr "异常" + +#: ../../library/asyncio-queue.rst:138 +msgid "" +"This exception is raised when the :meth:`~Queue.get_nowait` method is called" +" on an empty queue." +msgstr "当队列为空的时候,调用 :meth:`~Queue.get_nowait` 方法而引发这个异常。" + +#: ../../library/asyncio-queue.rst:144 +msgid "" +"Exception raised when the :meth:`~Queue.put_nowait` method is called on a " +"queue that has reached its *maxsize*." +msgstr "当队列中条目数量已经达到它的 *maxsize* 的时候,调用 :meth:`~Queue.put_nowait` 方法而引发的异常。" + +#: ../../library/asyncio-queue.rst:149 +msgid "Examples" +msgstr "示例" + +#: ../../library/asyncio-queue.rst:153 +msgid "" +"Queues can be used to distribute workload between several concurrent tasks::" +msgstr "队列能被用于多个的并发任务的工作量分配:" diff --git a/library/asyncio-stream.po b/library/asyncio-stream.po new file mode 100644 index 000000000..e24d7da34 --- /dev/null +++ b/library/asyncio-stream.po @@ -0,0 +1,452 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) 2001-2022, Python Software Foundation +# This file is distributed under the same license as the Python package. +# FIRST AUTHOR , YEAR. +# +# Translators: +# Fred , 2018 +# kevin wong , 2019 +# walkinrain , 2019 +# li beite , 2020 +# Freesand Leo , 2022 +# +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: Python 3.9\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2022-11-04 14:34+0000\n" +"PO-Revision-Date: 2017-02-16 17:49+0000\n" +"Last-Translator: Freesand Leo , 2022\n" +"Language-Team: Chinese (China) (https://www.transifex.com/python-doc/teams/5390/zh_CN/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: zh_CN\n" +"Plural-Forms: nplurals=1; plural=0;\n" + +#: ../../library/asyncio-stream.rst:7 +msgid "Streams" +msgstr "流" + +#: ../../library/asyncio-stream.rst:9 +msgid "**Source code:** :source:`Lib/asyncio/streams.py`" +msgstr "**源码:** :source:`Lib/asyncio/streams.py`" + +#: ../../library/asyncio-stream.rst:13 +msgid "" +"Streams are high-level async/await-ready primitives to work with network " +"connections. Streams allow sending and receiving data without using " +"callbacks or low-level protocols and transports." +msgstr "流是用于处理网络连接的支持 async/await 的高层级原语。 流允许发送和接收数据,而不需要使用回调或低级协议和传输。" + +#: ../../library/asyncio-stream.rst:19 +msgid "" +"Here is an example of a TCP echo client written using asyncio streams::" +msgstr "下面是一个使用 asyncio streams 编写的 TCP echo 客户端示例::" + +#: ../../library/asyncio-stream.rst:42 +msgid "See also the `Examples`_ section below." +msgstr "参见下面的 `Examples`_ 部分。" + +#: ../../library/asyncio-stream.rst:46 +msgid "Stream Functions" +msgstr "Stream 函数" + +#: ../../library/asyncio-stream.rst:47 +msgid "" +"The following top-level asyncio functions can be used to create and work " +"with streams:" +msgstr "下面的高级 asyncio 函数可以用来创建和处理流:" + +#: ../../library/asyncio-stream.rst:57 +msgid "" +"Establish a network connection and return a pair of ``(reader, writer)`` " +"objects." +msgstr "建立网络连接并返回一对 ``(reader, writer)`` 对象。" + +#: ../../library/asyncio-stream.rst:60 +msgid "" +"The returned *reader* and *writer* objects are instances of " +":class:`StreamReader` and :class:`StreamWriter` classes." +msgstr "" +"返回的 *reader* 和 *writer* 对象是 :class:`StreamReader` 和 :class:`StreamWriter` " +"类的实例。" + +#: ../../library/asyncio-stream.rst:63 +msgid "" +"The *loop* argument is optional and can always be determined automatically " +"when this function is awaited from a coroutine." +msgstr "*loop* 参数是可选的,当从协程中等待该函数时,总是可以自动确定。" + +#: ../../library/asyncio-stream.rst:66 ../../library/asyncio-stream.rst:103 +msgid "" +"*limit* determines the buffer size limit used by the returned " +":class:`StreamReader` instance. By default the *limit* is set to 64 KiB." +msgstr "" +"*limit* 确定返回的 :class:`StreamReader` 实例使用的缓冲区大小限制。默认情况下,*limit* 设置为 64 KiB 。" + +#: ../../library/asyncio-stream.rst:70 +msgid "" +"The rest of the arguments are passed directly to " +":meth:`loop.create_connection`." +msgstr "其余的参数直接传递到 :meth:`loop.create_connection` 。" + +#: ../../library/asyncio-stream.rst:75 ../../library/asyncio-stream.rst:132 +msgid "The *ssl_handshake_timeout* parameter." +msgstr "*ssl_handshake_timeout* 形参。" + +#: ../../library/asyncio-stream.rst:79 +msgid "Added *happy_eyeballs_delay* and *interleave* parameters." +msgstr "增加了 *happy_eyeballs_delay* 和 *interleave* 形参。" + +#: ../../library/asyncio-stream.rst:89 +msgid "Start a socket server." +msgstr "启动套接字服务。" + +#: ../../library/asyncio-stream.rst:91 +msgid "" +"The *client_connected_cb* callback is called whenever a new client " +"connection is established. It receives a ``(reader, writer)`` pair as two " +"arguments, instances of the :class:`StreamReader` and :class:`StreamWriter` " +"classes." +msgstr "" +"当一个新的客户端连接被建立时,回调函数 *client_connected_cb* 会被调用。该函数会接收到一对参数 ``(reader, " +"writer)`` ,reader是类 :class:`StreamReader` 的实例,而writer是类 " +":class:`StreamWriter` 的实例。" + +#: ../../library/asyncio-stream.rst:96 +msgid "" +"*client_connected_cb* can be a plain callable or a :ref:`coroutine function " +"`; if it is a coroutine function, it will be automatically " +"scheduled as a :class:`Task`." +msgstr "" +"*client_connected_cb* 即可以是普通的可调用对象也可以是一个 :ref:`协程函数 `; " +"如果它是一个协程函数,它将自动作为 :class:`Task` 被调度。" + +#: ../../library/asyncio-stream.rst:100 +msgid "" +"The *loop* argument is optional and can always be determined automatically " +"when this method is awaited from a coroutine." +msgstr "*loop* 参数是可选的。当在一个协程中await该方法时,该参数始终可以自动确定。" + +#: ../../library/asyncio-stream.rst:107 +msgid "" +"The rest of the arguments are passed directly to :meth:`loop.create_server`." +msgstr "余下的参数将会直接传递给 :meth:`loop.create_server`." + +#: ../../library/asyncio-stream.rst:112 ../../library/asyncio-stream.rst:154 +msgid "The *ssl_handshake_timeout* and *start_serving* parameters." +msgstr " *ssl_handshake_timeout* 和 *start_serving* 形参。" + +#: ../../library/asyncio-stream.rst:116 +msgid "Unix Sockets" +msgstr "Unix 套接字" + +#: ../../library/asyncio-stream.rst:121 +msgid "" +"Establish a Unix socket connection and return a pair of ``(reader, " +"writer)``." +msgstr "建立一个 Unix 套接字连接并返回 ``(reader, writer)`` 这对返回值。" + +#: ../../library/asyncio-stream.rst:124 +msgid "Similar to :func:`open_connection` but operates on Unix sockets." +msgstr "与 :func:`open_connection` 相似,但是是在 Unix 套接字上的操作。" + +#: ../../library/asyncio-stream.rst:126 +msgid "See also the documentation of :meth:`loop.create_unix_connection`." +msgstr "请看文档 :meth:`loop.create_unix_connection`." + +#: ../../library/asyncio-stream.rst:129 ../../library/asyncio-stream.rst:151 +msgid ":ref:`Availability `: Unix." +msgstr ":ref:`可用性 `: Unix。" + +#: ../../library/asyncio-stream.rst:136 +msgid "The *path* parameter can now be a :term:`path-like object`" +msgstr "*path* 现在是一个 :term:`path-like object`" + +#: ../../library/asyncio-stream.rst:144 +msgid "Start a Unix socket server." +msgstr "启动一个 Unix 套接字服务。" + +#: ../../library/asyncio-stream.rst:146 +msgid "Similar to :func:`start_server` but works with Unix sockets." +msgstr "与 :func:`start_server` 相似,但是是在 Unix 套接字上的操作。" + +#: ../../library/asyncio-stream.rst:148 +msgid "See also the documentation of :meth:`loop.create_unix_server`." +msgstr "请看文档 :meth:`loop.create_unix_server`." + +#: ../../library/asyncio-stream.rst:158 +msgid "The *path* parameter can now be a :term:`path-like object`." +msgstr "*path* 形参现在可以是 :term:`path-like object` 对象。" + +#: ../../library/asyncio-stream.rst:162 +msgid "StreamReader" +msgstr "StreamReader" + +#: ../../library/asyncio-stream.rst:166 +msgid "" +"Represents a reader object that provides APIs to read data from the IO " +"stream." +msgstr "这个类表示一个读取器对象,该对象提供api以便于从IO流中读取数据。" + +#: ../../library/asyncio-stream.rst:169 +msgid "" +"It is not recommended to instantiate *StreamReader* objects directly; use " +":func:`open_connection` and :func:`start_server` instead." +msgstr "" +"不推荐直接实例化 *StreamReader* 对象,建议使用 :func:`open_connection` 和 " +":func:`start_server` 来获取 *StreamReader* 实例。" + +#: ../../library/asyncio-stream.rst:175 +msgid "" +"Read up to *n* bytes. If *n* is not provided, or set to ``-1``, read until " +"EOF and return all read bytes." +msgstr "" +"至多读取 *n* 个byte。 如果没有设置 *n* , 则自动置为 ``-1`` , -1时表示读至 EOF 并返回所有读取的byte。" + +#: ../../library/asyncio-stream.rst:178 +msgid "" +"If EOF was received and the internal buffer is empty, return an empty " +"``bytes`` object." +msgstr "如果读到EOF,且内部缓冲区为空,则返回一个空的 ``bytes`` 对象。" + +#: ../../library/asyncio-stream.rst:183 +msgid "Read one line, where \"line\" is a sequence of bytes ending with ``\\n``." +msgstr "读取一行,其中“行”指的是以 ``\\n`` 结尾的字节序列。" + +#: ../../library/asyncio-stream.rst:186 +msgid "" +"If EOF is received and ``\\n`` was not found, the method returns partially " +"read data." +msgstr "如果读到EOF而没有找到 ``\\n`` ,该方法返回部分读取的数据。" + +#: ../../library/asyncio-stream.rst:189 +msgid "" +"If EOF is received and the internal buffer is empty, return an empty " +"``bytes`` object." +msgstr "如果读到EOF,且内部缓冲区为空,则返回一个空的 ``bytes`` 对象。" + +#: ../../library/asyncio-stream.rst:194 +msgid "Read exactly *n* bytes." +msgstr "精确读取 *n* 个 bytes,不会超过也不能少于。" + +#: ../../library/asyncio-stream.rst:196 +msgid "" +"Raise an :exc:`IncompleteReadError` if EOF is reached before *n* can be " +"read. Use the :attr:`IncompleteReadError.partial` attribute to get the " +"partially read data." +msgstr "" +"如果在读取完 *n* 个byte之前读取到EOF,则会引发 :exc:`IncompleteReadError` 异常。使用 " +":attr:`IncompleteReadError.partial` 属性来获取到达流结束之前读取的 bytes 字符串。" + +#: ../../library/asyncio-stream.rst:202 +msgid "Read data from the stream until *separator* is found." +msgstr "从流中读取数据直至遇到 *separator* " + +#: ../../library/asyncio-stream.rst:204 +msgid "" +"On success, the data and separator will be removed from the internal buffer " +"(consumed). Returned data will include the separator at the end." +msgstr "成功后,数据和指定的separator将从内部缓冲区中删除(或者说被消费掉)。返回的数据将包括在末尾的指定separator。" + +#: ../../library/asyncio-stream.rst:208 +msgid "" +"If the amount of data read exceeds the configured stream limit, a " +":exc:`LimitOverrunError` exception is raised, and the data is left in the " +"internal buffer and can be read again." +msgstr "如果读取的数据量超过了配置的流限制,将引发 :exc:`LimitOverrunError` 异常,数据将留在内部缓冲区中并可以再次读取。" + +#: ../../library/asyncio-stream.rst:212 +msgid "" +"If EOF is reached before the complete separator is found, an " +":exc:`IncompleteReadError` exception is raised, and the internal buffer is " +"reset. The :attr:`IncompleteReadError.partial` attribute may contain a " +"portion of the separator." +msgstr "" +"如果在找到完整的separator之前到达EOF,则会引发 :exc:`IncompleteReadError` 异常,并重置内部缓冲区。 " +":attr:`IncompleteReadError.partial` 属性可能包含指定separator的一部分。" + +#: ../../library/asyncio-stream.rst:221 +msgid "" +"Return ``True`` if the buffer is empty and :meth:`feed_eof` was called." +msgstr "如果缓冲区为空并且 :meth:`feed_eof` 被调用,则返回 ``True`` 。 " + +#: ../../library/asyncio-stream.rst:226 +msgid "StreamWriter" +msgstr "StreamWriter" + +#: ../../library/asyncio-stream.rst:230 +msgid "" +"Represents a writer object that provides APIs to write data to the IO " +"stream." +msgstr "这个类表示一个写入器对象,该对象提供api以便于写数据至IO流中。" + +#: ../../library/asyncio-stream.rst:233 +msgid "" +"It is not recommended to instantiate *StreamWriter* objects directly; use " +":func:`open_connection` and :func:`start_server` instead." +msgstr "" +"不建议直接实例化 *StreamWriter*;而应改用 :func:`open_connection` 和 :func:`start_server`。" + +#: ../../library/asyncio-stream.rst:239 +msgid "" +"The method attempts to write the *data* to the underlying socket " +"immediately. If that fails, the data is queued in an internal write buffer " +"until it can be sent." +msgstr "此方法会尝试立即将 *data* 写入到下层的套接字。 如果写入失败,数据会被排入内部写缓冲队列直到可以被发送。" + +#: ../../library/asyncio-stream.rst:243 ../../library/asyncio-stream.rst:255 +msgid "The method should be used along with the ``drain()`` method::" +msgstr "此方法应当与 ``drain()`` 方法一起使用::" + +#: ../../library/asyncio-stream.rst:250 +msgid "" +"The method writes a list (or any iterable) of bytes to the underlying socket" +" immediately. If that fails, the data is queued in an internal write buffer " +"until it can be sent." +msgstr "此方法会立即尝试将一个字节串列表(或任何可迭代对象)写入到下层的套接字。 如果写入失败,数据会被排入内部写缓冲队列直到可以被发送。" + +#: ../../library/asyncio-stream.rst:262 +msgid "The method closes the stream and the underlying socket." +msgstr "此方法会关闭流以及下层的套接字。" + +#: ../../library/asyncio-stream.rst:264 +msgid "The method should be used along with the ``wait_closed()`` method::" +msgstr "此方法应与 ``wait_closed()`` 方法一起使用::" + +#: ../../library/asyncio-stream.rst:271 +msgid "" +"Return ``True`` if the underlying transport supports the :meth:`write_eof` " +"method, ``False`` otherwise." +msgstr "如果下层的传输支持 :meth:`write_eof` 方法则返回``True``,否则返回 ``False``。" + +#: ../../library/asyncio-stream.rst:276 +msgid "" +"Close the write end of the stream after the buffered write data is flushed." +msgstr "在已缓冲的写入数据被刷新后关闭流的写入端。" + +#: ../../library/asyncio-stream.rst:281 +msgid "Return the underlying asyncio transport." +msgstr "返回下层的 asyncio 传输。" + +#: ../../library/asyncio-stream.rst:285 +msgid "" +"Access optional transport information; see " +":meth:`BaseTransport.get_extra_info` for details." +msgstr "访问可选的传输信息;详情参见 :meth:`BaseTransport.get_extra_info`。" + +#: ../../library/asyncio-stream.rst:290 +msgid "" +"Wait until it is appropriate to resume writing to the stream. Example::" +msgstr "等待直到可以适当地恢复写入到流。 示例::" + +#: ../../library/asyncio-stream.rst:296 +msgid "" +"This is a flow control method that interacts with the underlying IO write " +"buffer. When the size of the buffer reaches the high watermark, *drain()* " +"blocks until the size of the buffer is drained down to the low watermark and" +" writing can be resumed. When there is nothing to wait for, the " +":meth:`drain` returns immediately." +msgstr "" +"这是一个与下层的 IO 写缓冲区进行交互的流程控制方法。 当缓冲区大小达到最高水位(最大上限)时,*drain()* " +"会阻塞直到缓冲区大小减少至最低水位以便恢复写入。 当没有要等待的数据时,:meth:`drain` 会立即返回。" + +#: ../../library/asyncio-stream.rst:305 +msgid "" +"Return ``True`` if the stream is closed or in the process of being closed." +msgstr "如果流已被关闭或正在被关闭则返回 ``True``。" + +#: ../../library/asyncio-stream.rst:312 +msgid "Wait until the stream is closed." +msgstr "等待直到流被关闭。" + +#: ../../library/asyncio-stream.rst:314 +msgid "" +"Should be called after :meth:`close` to wait until the underlying connection" +" is closed." +msgstr "应当在 :meth:`close` 之后被调用以便等待直到下层的连接被关闭。" + +#: ../../library/asyncio-stream.rst:321 +msgid "Examples" +msgstr "示例" + +#: ../../library/asyncio-stream.rst:326 +msgid "TCP echo client using streams" +msgstr "使用流的 TCP 回显客户端" + +#: ../../library/asyncio-stream.rst:328 +msgid "TCP echo client using the :func:`asyncio.open_connection` function::" +msgstr "使用 :func:`asyncio.open_connection` 函数的 TCP 回显客户端::" + +#: ../../library/asyncio-stream.rst:350 +msgid "" +"The :ref:`TCP echo client protocol " +"` example uses the low-level " +":meth:`loop.create_connection` method." +msgstr "" +"使用低层级 :meth:`loop.create_connection` 方法的 :ref:`TCP 回显客户端协议 " +"` 示例。" + +#: ../../library/asyncio-stream.rst:357 +msgid "TCP echo server using streams" +msgstr "使用流的 TCP 回显服务器" + +#: ../../library/asyncio-stream.rst:359 +msgid "TCP echo server using the :func:`asyncio.start_server` function::" +msgstr "TCP 回显服务器使用 :func:`asyncio.start_server` 函数::" + +#: ../../library/asyncio-stream.rst:392 +msgid "" +"The :ref:`TCP echo server protocol " +"` example uses the " +":meth:`loop.create_server` method." +msgstr "" +"使用 :meth:`loop.create_server` 方法的 :ref:`TCP 回显服务器协议 " +"` 示例。" + +#: ../../library/asyncio-stream.rst:397 +msgid "Get HTTP headers" +msgstr "获取 HTTP 标头" + +#: ../../library/asyncio-stream.rst:399 +msgid "" +"Simple example querying HTTP headers of the URL passed on the command line::" +msgstr "查询命令行传入 URL 的 HTTP 标头的简单示例::" + +#: ../../library/asyncio-stream.rst:437 +msgid "Usage::" +msgstr "用法::" + +#: ../../library/asyncio-stream.rst:441 +msgid "or with HTTPS::" +msgstr "或使用 HTTPS::" + +#: ../../library/asyncio-stream.rst:449 +msgid "Register an open socket to wait for data using streams" +msgstr "注册一个打开的套接字以等待使用流的数据" + +#: ../../library/asyncio-stream.rst:451 +msgid "" +"Coroutine waiting until a socket receives data using the " +":func:`open_connection` function::" +msgstr "使用 :func:`open_connection` 函数实现等待直到套接字接收到数据的协程::" + +#: ../../library/asyncio-stream.rst:485 +msgid "" +"The :ref:`register an open socket to wait for data using a protocol " +"` example uses a low-level protocol and " +"the :meth:`loop.create_connection` method." +msgstr "" +"使用低层级协议以及 :meth:`loop.create_connection` 方法的 :ref:`注册一个打开的套接字以等待使用协议的数据 " +"` 示例。" + +#: ../../library/asyncio-stream.rst:489 +msgid "" +"The :ref:`watch a file descriptor for read events " +"` example uses the low-level " +":meth:`loop.add_reader` method to watch a file descriptor." +msgstr "" +"使用低层级的 :meth:`loop.add_reader` 方法来监视文件描述符的 :ref:`监视文件描述符以读取事件 " +"` 示例。" diff --git a/library/asyncio-subprocess.po b/library/asyncio-subprocess.po new file mode 100644 index 000000000..7393e1441 --- /dev/null +++ b/library/asyncio-subprocess.po @@ -0,0 +1,503 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) 2001-2022, Python Software Foundation +# This file is distributed under the same license as the Python package. +# FIRST AUTHOR , YEAR. +# +# Translators: +# Shengjing Zhu , 2018 +# Fred , 2018 +# Zombie110year , 2019 +# focusheart , 2019 +# walkinrain , 2019 +# MuSheng Chen , 2019 +# Freesand Leo , 2022 +# +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: Python 3.9\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2022-11-04 14:34+0000\n" +"PO-Revision-Date: 2017-02-16 17:49+0000\n" +"Last-Translator: Freesand Leo , 2022\n" +"Language-Team: Chinese (China) (https://www.transifex.com/python-doc/teams/5390/zh_CN/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: zh_CN\n" +"Plural-Forms: nplurals=1; plural=0;\n" + +#: ../../library/asyncio-subprocess.rst:7 +msgid "Subprocesses" +msgstr "子进程" + +#: ../../library/asyncio-subprocess.rst:9 +msgid "" +"**Source code:** :source:`Lib/asyncio/subprocess.py`, " +":source:`Lib/asyncio/base_subprocess.py`" +msgstr "" +"**源代码:** :source:`Lib/asyncio/subprocess.py`, " +":source:`Lib/asyncio/base_subprocess.py`" + +#: ../../library/asyncio-subprocess.rst:14 +msgid "" +"This section describes high-level async/await asyncio APIs to create and " +"manage subprocesses." +msgstr "本节介绍了用于创建和管理子进程的高层级 async/await asyncio API。" + +#: ../../library/asyncio-subprocess.rst:19 +msgid "" +"Here's an example of how asyncio can run a shell command and obtain its " +"result::" +msgstr "下面的例子演示了如何用 asyncio 运行一个 shell 命令并获取其结果::" + +#: ../../library/asyncio-subprocess.rst:40 +msgid "will print::" +msgstr "将打印::" + +#: ../../library/asyncio-subprocess.rst:46 +msgid "" +"Because all asyncio subprocess functions are asynchronous and asyncio " +"provides many tools to work with such functions, it is easy to execute and " +"monitor multiple subprocesses in parallel. It is indeed trivial to modify " +"the above example to run several commands simultaneously::" +msgstr "" +"由于所有 asyncio 子进程函数都是异步的并且 asyncio 提供了许多工具用来配合这些函数使用,因此并行地执行和监视多个子进程十分容易。 " +"要修改上面的例子来同时运行多个命令确实是非常简单的::" + +#: ../../library/asyncio-subprocess.rst:58 +msgid "See also the `Examples`_ subsection." +msgstr "另请参阅 `Examples`_ 小节。" + +#: ../../library/asyncio-subprocess.rst:62 +msgid "Creating Subprocesses" +msgstr "创建子进程" + +#: ../../library/asyncio-subprocess.rst:68 +msgid "Create a subprocess." +msgstr "创建一个子进程。" + +#: ../../library/asyncio-subprocess.rst:70 +#: ../../library/asyncio-subprocess.rst:89 +msgid "" +"The *limit* argument sets the buffer limit for :class:`StreamReader` " +"wrappers for :attr:`Process.stdout` and :attr:`Process.stderr` (if " +":attr:`subprocess.PIPE` is passed to *stdout* and *stderr* arguments)." +msgstr "" +"*limit* 参数为 :attr:`Process.stdout` 和 :attr:`Process.stderr` 设置 " +":class:`StreamReader` 包装器的缓冲区上限(如果将 :attr:`subprocess.PIPE` 传给了 *stdout* 和 " +"*stderr* 参数)。" + +#: ../../library/asyncio-subprocess.rst:74 +#: ../../library/asyncio-subprocess.rst:93 +msgid "Return a :class:`~asyncio.subprocess.Process` instance." +msgstr "返回一个 :class:`~asyncio.subprocess.Process` 实例。" + +#: ../../library/asyncio-subprocess.rst:76 +msgid "" +"See the documentation of :meth:`loop.subprocess_exec` for other parameters." +msgstr "有关其他形参的说明请查阅 :meth:`loop.subprocess_exec` 的文档。" + +#: ../../library/asyncio-subprocess.rst:81 +#: ../../library/asyncio-subprocess.rst:109 +msgid "The *loop* parameter." +msgstr "*loop* 形参。" + +#: ../../library/asyncio-subprocess.rst:87 +msgid "Run the *cmd* shell command." +msgstr "运行 *cmd* shell 命令。" + +#: ../../library/asyncio-subprocess.rst:95 +msgid "" +"See the documentation of :meth:`loop.subprocess_shell` for other parameters." +msgstr "有关其他形参的说明请查阅 :meth:`loop.subprocess_shell` 的文档。" + +#: ../../library/asyncio-subprocess.rst:100 +msgid "" +"It is the application's responsibility to ensure that all whitespace and " +"special characters are quoted appropriately to avoid `shell injection " +"`_ " +"vulnerabilities. The :func:`shlex.quote` function can be used to properly " +"escape whitespace and special shell characters in strings that are going to " +"be used to construct shell commands." +msgstr "" +"应用程序要负责确保正确地转义所有空白字符和特殊字符以防止 `shell 注入 " +"`_ 漏洞。 " +":func:`shlex.quote` 函数可以被用来正确地转义字符串中可以被用来构造 shell 命令的空白字符和特殊 shell 字符。" + +#: ../../library/asyncio-subprocess.rst:113 +msgid "" +"Subprocesses are available for Windows if a :class:`ProactorEventLoop` is " +"used. See :ref:`Subprocess Support on Windows ` " +"for details." +msgstr "" +"如果使用了 :class:`ProactorEventLoop` 则子进程将在 Windows 中可用。 详情参见 :ref:`Windows " +"上的子进程支持 `。" + +#: ../../library/asyncio-subprocess.rst:119 +msgid "" +"asyncio also has the following *low-level* APIs to work with subprocesses: " +":meth:`loop.subprocess_exec`, :meth:`loop.subprocess_shell`, " +":meth:`loop.connect_read_pipe`, :meth:`loop.connect_write_pipe`, as well as " +"the :ref:`Subprocess Transports ` and " +":ref:`Subprocess Protocols `." +msgstr "" +"asyncio 还有下列 *低层级* API 可配合子进程使用: :meth:`loop.subprocess_exec`, " +":meth:`loop.subprocess_shell`, :meth:`loop.connect_read_pipe`, " +":meth:`loop.connect_write_pipe` 以及 :ref:`子进程传输 ` 和 :ref:`子进程协议 `。" + +#: ../../library/asyncio-subprocess.rst:127 +msgid "Constants" +msgstr "常数" + +#: ../../library/asyncio-subprocess.rst:132 +msgid "Can be passed to the *stdin*, *stdout* or *stderr* parameters." +msgstr "可以被传递给 *stdin*, *stdout* 或 *stderr* 形参。" + +#: ../../library/asyncio-subprocess.rst:134 +msgid "" +"If *PIPE* is passed to *stdin* argument, the :attr:`Process.stdin " +"` attribute will point to a " +":class:`StreamWriter` instance." +msgstr "" +"如果 *PIPE* 被传递给 *stdin* 参数,则 :attr:`Process.stdin " +"` 属性将会指向一个 :class:`StreamWriter` 实例。" + +#: ../../library/asyncio-subprocess.rst:138 +msgid "" +"If *PIPE* is passed to *stdout* or *stderr* arguments, the " +":attr:`Process.stdout ` and " +":attr:`Process.stderr ` attributes will " +"point to :class:`StreamReader` instances." +msgstr "" +"如果 *PIPE* 被传递给 *stdout* 或 *stderr* 参数,则 :attr:`Process.stdout " +"` 和 :attr:`Process.stderr " +"` 属性将会指向 :class:`StreamReader` 实例。" + +#: ../../library/asyncio-subprocess.rst:146 +msgid "" +"Special value that can be used as the *stderr* argument and indicates that " +"standard error should be redirected into standard output." +msgstr "可以用作 *stderr* 参数的特殊值,表示标准错误应当被重定向到标准输出。" + +#: ../../library/asyncio-subprocess.rst:152 +msgid "" +"Special value that can be used as the *stdin*, *stdout* or *stderr* argument" +" to process creation functions. It indicates that the special file " +":data:`os.devnull` will be used for the corresponding subprocess stream." +msgstr "" +"可以用作 *stdin*, *stdout* 或 *stderr* 参数来处理创建函数的特殊值。 它表示将为相应的子进程流使用特殊文件 " +":data:`os.devnull`。" + +#: ../../library/asyncio-subprocess.rst:158 +msgid "Interacting with Subprocesses" +msgstr "与子进程交互" + +#: ../../library/asyncio-subprocess.rst:160 +msgid "" +"Both :func:`create_subprocess_exec` and :func:`create_subprocess_shell` " +"functions return instances of the *Process* class. *Process* is a high-" +"level wrapper that allows communicating with subprocesses and watching for " +"their completion." +msgstr "" +":func:`create_subprocess_exec` 和 :func:`create_subprocess_shell` 函数都返回 " +"*Process* 类的实例。 *Process* 是一个高层级包装器,它允许与子进程通信并监视其完成情况。" + +#: ../../library/asyncio-subprocess.rst:168 +msgid "" +"An object that wraps OS processes created by the " +":func:`create_subprocess_exec` and :func:`create_subprocess_shell` " +"functions." +msgstr "" +"一个用于包装 :func:`create_subprocess_exec` and :func:`create_subprocess_shell` " +"函数创建的 OS 进程的对象。" + +#: ../../library/asyncio-subprocess.rst:172 +msgid "" +"This class is designed to have a similar API to the " +":class:`subprocess.Popen` class, but there are some notable differences:" +msgstr "这个类被设计为具有与 :class:`subprocess.Popen` 类相似的 API,但两者有一些重要的差异:" + +#: ../../library/asyncio-subprocess.rst:176 +msgid "" +"unlike Popen, Process instances do not have an equivalent to the " +":meth:`~subprocess.Popen.poll` method;" +msgstr "不同于 Popen,Process 实例没有与 :meth:`~subprocess.Popen.poll` 方法等价的方法;" + +#: ../../library/asyncio-subprocess.rst:179 +msgid "" +"the :meth:`~asyncio.subprocess.Process.communicate` and " +":meth:`~asyncio.subprocess.Process.wait` methods don't have a *timeout* " +"parameter: use the :func:`wait_for` function;" +msgstr "" +":meth:`~asyncio.subprocess.Process.communicate` 和 " +":meth:`~asyncio.subprocess.Process.wait` 方法没有 *timeout* 形参;要使用 " +":func:`wait_for` 函数;" + +#: ../../library/asyncio-subprocess.rst:183 +msgid "" +"the :meth:`Process.wait() ` method is " +"asynchronous, whereas :meth:`subprocess.Popen.wait` method is implemented as" +" a blocking busy loop;" +msgstr "" +":meth:`Process.wait() ` 方法是异步的,而 " +":meth:`subprocess.Popen.wait` 方法则被实现为阻塞型忙循环;" + +#: ../../library/asyncio-subprocess.rst:187 +msgid "the *universal_newlines* parameter is not supported." +msgstr "*universal_newlines* 形参不被支持。" + +#: ../../library/asyncio-subprocess.rst:189 +msgid "This class is :ref:`not thread safe `." +msgstr "这个类 :ref:`不是线程安全的 `。" + +#: ../../library/asyncio-subprocess.rst:191 +msgid "" +"See also the :ref:`Subprocess and Threads ` " +"section." +msgstr "请参阅 :ref:`子进程和线程 ` 部分。" + +#: ../../library/asyncio-subprocess.rst:196 +msgid "Wait for the child process to terminate." +msgstr "等待子进程终结。" + +#: ../../library/asyncio-subprocess.rst:198 +msgid "Set and return the :attr:`returncode` attribute." +msgstr "设置并返回 :attr:`returncode` 属性。" + +#: ../../library/asyncio-subprocess.rst:202 +msgid "" +"This method can deadlock when using ``stdout=PIPE`` or ``stderr=PIPE`` and " +"the child process generates so much output that it blocks waiting for the OS" +" pipe buffer to accept more data. Use the :meth:`communicate` method when " +"using pipes to avoid this condition." +msgstr "" +"当使用 ``stdout=PIPE`` 或 ``stderr=PIPE`` 并且子进程产生了足以阻塞 OS " +"管道缓冲区等待接收更多的数据的输出时,此方法会发生死锁。 当使用管道时请使用 :meth:`communicate` 方法来避免这种情况。" + +#: ../../library/asyncio-subprocess.rst:210 +msgid "Interact with process:" +msgstr "与进程交互:" + +#: ../../library/asyncio-subprocess.rst:212 +msgid "send data to *stdin* (if *input* is not ``None``);" +msgstr "发送数据到 *stdin* (如果 *input* 不为 ``None``);" + +#: ../../library/asyncio-subprocess.rst:213 +msgid "read data from *stdout* and *stderr*, until EOF is reached;" +msgstr "从 *stdout* 和 *stderr* 读取数据,直至到达 EOF;" + +#: ../../library/asyncio-subprocess.rst:214 +msgid "wait for process to terminate." +msgstr "等待进程终结。" + +#: ../../library/asyncio-subprocess.rst:216 +msgid "" +"The optional *input* argument is the data (:class:`bytes` object) that will " +"be sent to the child process." +msgstr "可选的 *input* 参数为将被发送到子进程的数据 (:class:`bytes` 对象)。" + +#: ../../library/asyncio-subprocess.rst:219 +msgid "Return a tuple ``(stdout_data, stderr_data)``." +msgstr "返回一个元组 ``(stdout_data, stderr_data)``。" + +#: ../../library/asyncio-subprocess.rst:221 +msgid "" +"If either :exc:`BrokenPipeError` or :exc:`ConnectionResetError` exception is" +" raised when writing *input* into *stdin*, the exception is ignored. This " +"condition occurs when the process exits before all data are written into " +"*stdin*." +msgstr "" +"如果在将 *input* 写入到 *stdin* 时引发了 :exc:`BrokenPipeError` 或 " +":exc:`ConnectionResetError` 异常,异常会被忽略。 此条件会在进程先于所有数据被写入到 *stdin* 之前退出时发生。" + +#: ../../library/asyncio-subprocess.rst:226 +msgid "" +"If it is desired to send data to the process' *stdin*, the process needs to " +"be created with ``stdin=PIPE``. Similarly, to get anything other than " +"``None`` in the result tuple, the process has to be created with " +"``stdout=PIPE`` and/or ``stderr=PIPE`` arguments." +msgstr "" +"如果想要将数据发送到进程的 *stdin*,则创建进程时必须使用 ``stdin=PIPE``。 类似地,要在结果元组中获得任何不为 ``None`` " +"的值,则创建进程时必须使用 ``stdout=PIPE`` 和/或 ``stderr=PIPE`` 参数。" + +#: ../../library/asyncio-subprocess.rst:232 +msgid "" +"Note, that the data read is buffered in memory, so do not use this method if" +" the data size is large or unlimited." +msgstr "注意,数据读取在内存中是带缓冲的,因此如果数据量过大或不受则不要使用此方法。" + +#: ../../library/asyncio-subprocess.rst:237 +msgid "Sends the signal *signal* to the child process." +msgstr "将信号 *signal* 发送给子进程。" + +#: ../../library/asyncio-subprocess.rst:241 +msgid "" +"On Windows, :py:data:`SIGTERM` is an alias for :meth:`terminate`. " +"``CTRL_C_EVENT`` and ``CTRL_BREAK_EVENT`` can be sent to processes started " +"with a *creationflags* parameter which includes " +"``CREATE_NEW_PROCESS_GROUP``." +msgstr "" +"在 Windows 上,:py:data:`SIGTERM` 是 :meth:`terminate` 的别名。 ``CTRL_C_EVENT`` 和 " +"``CTRL_BREAK_EVENT`` 可被发送给创建时设置了 *creationflags* 形参且其中包括 " +"``CREATE_NEW_PROCESS_GROUP`` 的进程。" + +#: ../../library/asyncio-subprocess.rst:248 +msgid "Stop the child process." +msgstr "停止子进程。" + +#: ../../library/asyncio-subprocess.rst:250 +msgid "" +"On POSIX systems this method sends :py:data:`signal.SIGTERM` to the child " +"process." +msgstr "在 POSIX 系统中此方法会发送 :py:data:`signal.SIGTERM` 给子进程。" + +#: ../../library/asyncio-subprocess.rst:253 +msgid "" +"On Windows the Win32 API function :c:func:`TerminateProcess` is called to " +"stop the child process." +msgstr "在 Windows 上会调用 Win32 API 函数 :c:func:`TerminateProcess` 以停止子进程。" + +#: ../../library/asyncio-subprocess.rst:258 +msgid "Kill the child process." +msgstr "杀掉子进程。" + +#: ../../library/asyncio-subprocess.rst:260 +msgid "" +"On POSIX systems this method sends :py:data:`SIGKILL` to the child process." +msgstr "在 POSIX 系统中此方法会发送 :py:data:`SIGKILL` 给子进程。" + +#: ../../library/asyncio-subprocess.rst:263 +msgid "On Windows this method is an alias for :meth:`terminate`." +msgstr "在 Windows 上此方法是 :meth:`terminate` 的别名。" + +#: ../../library/asyncio-subprocess.rst:267 +msgid "" +"Standard input stream (:class:`StreamWriter`) or ``None`` if the process was" +" created with ``stdin=None``." +msgstr "" +"标准输入流 (:class:`StreamWriter`) 或者如果进程创建时设置了 ``stdin=None`` 则为 ``None``。" + +#: ../../library/asyncio-subprocess.rst:272 +msgid "" +"Standard output stream (:class:`StreamReader`) or ``None`` if the process " +"was created with ``stdout=None``." +msgstr "" +"标准输出流 (:class:`StreamReader`) 或者如果进程创建时设置了 ``stdout=None`` 则为 ``None``。" + +#: ../../library/asyncio-subprocess.rst:277 +msgid "" +"Standard error stream (:class:`StreamReader`) or ``None`` if the process was" +" created with ``stderr=None``." +msgstr "" +"标准错误流 (:class:`StreamReader`) 或者如果进程创建时设置了 ``stderr=None`` 则为 ``None``。" + +#: ../../library/asyncio-subprocess.rst:282 +msgid "" +"Use the :meth:`communicate` method rather than :attr:`process.stdin.write() " +"`, :attr:`await process.stdout.read() ` or :attr:`await " +"process.stderr.read() `. This avoids deadlocks due to streams " +"pausing reading or writing and blocking the child process." +msgstr "" +"使用 :meth:`communicate` 方法而非 :attr:`process.stdin.write() `, " +":attr:`await process.stdout.read() ` 或 :attr:`await " +"process.stderr.read() `。 这可以避免由于流暂停读取或写入并阻塞子进程而导致的死锁。" + +#: ../../library/asyncio-subprocess.rst:291 +msgid "Process identification number (PID)." +msgstr "进程标识号(PID)。" + +#: ../../library/asyncio-subprocess.rst:293 +msgid "" +"Note that for processes created by the :func:`create_subprocess_shell` " +"function, this attribute is the PID of the spawned shell." +msgstr "" +"注意对于由Note that for processes created by the :func:`create_subprocess_shell` " +"函数所创建的进程,这个属性将是所生成的 shell 的 PID。" + +#: ../../library/asyncio-subprocess.rst:298 +msgid "Return code of the process when it exits." +msgstr "当进程退出时返回其代号。" + +#: ../../library/asyncio-subprocess.rst:300 +msgid "A ``None`` value indicates that the process has not terminated yet." +msgstr "``None`` 值表示进程尚未终止。" + +#: ../../library/asyncio-subprocess.rst:302 +msgid "" +"A negative value ``-N`` indicates that the child was terminated by signal " +"``N`` (POSIX only)." +msgstr "一个负值 ``-N`` 表示子进程被信号 ``N`` 中断 (仅 POSIX)." + +#: ../../library/asyncio-subprocess.rst:309 +msgid "Subprocess and Threads" +msgstr "子进程和线程" + +#: ../../library/asyncio-subprocess.rst:311 +msgid "" +"Standard asyncio event loop supports running subprocesses from different " +"threads by default." +msgstr "标准 asyncio 事件循环默认支持从不同线程中运行子进程。" + +#: ../../library/asyncio-subprocess.rst:314 +msgid "" +"On Windows subprocesses are provided by :class:`ProactorEventLoop` only " +"(default), :class:`SelectorEventLoop` has no subprocess support." +msgstr "" +"在 Windows 上子进程(默认)只由 :class:`ProactorEventLoop` " +"提供,:class:`SelectorEventLoop` 没有子进程支持。" + +#: ../../library/asyncio-subprocess.rst:317 +msgid "" +"On UNIX *child watchers* are used for subprocess finish waiting, see " +":ref:`asyncio-watchers` for more info." +msgstr "在 UNIX 上会使用 *child watchers* 来让子进程结束等待,详情请参阅 :ref:`asyncio-watchers`。" + +#: ../../library/asyncio-subprocess.rst:323 +msgid "" +"UNIX switched to use :class:`ThreadedChildWatcher` for spawning subprocesses" +" from different threads without any limitation." +msgstr "UNIX 对于从不同线程中无限制地生成子进程会切换为使用 :class:`ThreadedChildWatcher`。" + +#: ../../library/asyncio-subprocess.rst:326 +msgid "" +"Spawning a subprocess with *inactive* current child watcher raises " +":exc:`RuntimeError`." +msgstr "使用 *不活动的* 当前子监视器生成子进程将引发 :exc:`RuntimeError`。" + +#: ../../library/asyncio-subprocess.rst:329 +msgid "" +"Note that alternative event loop implementations might have own limitations;" +" please refer to their documentation." +msgstr "请注意其他的事件循环实现可能有其本身的限制;请查看它们各自的文档。" + +#: ../../library/asyncio-subprocess.rst:334 +msgid "" +"The :ref:`Concurrency and multithreading in asyncio ` section." +msgstr ":ref:`asyncio 中的并发和多线程 ` 章节。" + +#: ../../library/asyncio-subprocess.rst:339 +msgid "Examples" +msgstr "示例" + +#: ../../library/asyncio-subprocess.rst:341 +msgid "" +"An example using the :class:`~asyncio.subprocess.Process` class to control a" +" subprocess and the :class:`StreamReader` class to read from its standard " +"output." +msgstr "" +"一个使用 :class:`~asyncio.subprocess.Process` 类来控制子进程并用 :class:`StreamReader` " +"类来从其标准输出读取信息的示例。" + +#: ../../library/asyncio-subprocess.rst:347 +msgid "" +"The subprocess is created by the :func:`create_subprocess_exec` function::" +msgstr "这个子进程是由 :func:`create_subprocess_exec` 函数创建的::" + +#: ../../library/asyncio-subprocess.rst:374 +msgid "" +"See also the :ref:`same example ` written " +"using low-level APIs." +msgstr "另请参阅使用低层级 API 编写的 :ref:`相同示例 `。" diff --git a/library/asyncio-sync.po b/library/asyncio-sync.po new file mode 100644 index 000000000..1715d753d --- /dev/null +++ b/library/asyncio-sync.po @@ -0,0 +1,405 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) 2001-2025, Python Software Foundation +# This file is distributed under the same license as the Python package. +# FIRST AUTHOR , YEAR. +# +# Translators: +# TX Lee , 2019 +# walkinrain , 2019 +# Freesand Leo , 2020 +# Rafael Fontenelle , 2025 +# +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: Python 3.9\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2025-02-07 16:40+0000\n" +"PO-Revision-Date: 2017-02-16 17:49+0000\n" +"Last-Translator: Rafael Fontenelle , 2025\n" +"Language-Team: Chinese (China) (https://app.transifex.com/python-doc/teams/5390/zh_CN/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: zh_CN\n" +"Plural-Forms: nplurals=1; plural=0;\n" + +#: ../../library/asyncio-sync.rst:7 +msgid "Synchronization Primitives" +msgstr "同步原语" + +#: ../../library/asyncio-sync.rst:9 +msgid "**Source code:** :source:`Lib/asyncio/locks.py`" +msgstr "**源代码:** :source:`Lib/asyncio/locks.py`" + +#: ../../library/asyncio-sync.rst:13 +msgid "" +"asyncio synchronization primitives are designed to be similar to those of " +"the :mod:`threading` module with two important caveats:" +msgstr "asyncio 同步原语被设计为与 :mod:`threading` 模块的类似,但有两个关键注意事项:" + +#: ../../library/asyncio-sync.rst:16 +msgid "" +"asyncio primitives are not thread-safe, therefore they should not be used " +"for OS thread synchronization (use :mod:`threading` for that);" +msgstr "asyncio 原语不是线程安全的,因此它们不应被用于 OS 线程同步 (而应当使用 :mod:`threading`);" + +#: ../../library/asyncio-sync.rst:20 +msgid "" +"methods of these synchronization primitives do not accept the *timeout* " +"argument; use the :func:`asyncio.wait_for` function to perform operations " +"with timeouts." +msgstr "这些同步原语的方法不接受 *timeout* 参数;请使用 :func:`asyncio.wait_for` 函数来执行带有超时的操作。" + +#: ../../library/asyncio-sync.rst:24 +msgid "asyncio has the following basic synchronization primitives:" +msgstr "asyncio 具有下列基本同步原语:" + +#: ../../library/asyncio-sync.rst:26 +msgid ":class:`Lock`" +msgstr ":class:`Lock`" + +#: ../../library/asyncio-sync.rst:27 +msgid ":class:`Event`" +msgstr ":class:`Event`" + +#: ../../library/asyncio-sync.rst:28 +msgid ":class:`Condition`" +msgstr ":class:`Condition`" + +#: ../../library/asyncio-sync.rst:29 +msgid ":class:`Semaphore`" +msgstr ":class:`Semaphore`" + +#: ../../library/asyncio-sync.rst:30 +msgid ":class:`BoundedSemaphore`" +msgstr ":class:`BoundedSemaphore`" + +#: ../../library/asyncio-sync.rst:37 +msgid "Lock" +msgstr "Lock" + +#: ../../library/asyncio-sync.rst:41 +msgid "Implements a mutex lock for asyncio tasks. Not thread-safe." +msgstr "实现一个用于 asyncio 任务的互斥锁。 非线程安全。" + +#: ../../library/asyncio-sync.rst:43 +msgid "" +"An asyncio lock can be used to guarantee exclusive access to a shared " +"resource." +msgstr "asyncio 锁可被用来保证对共享资源的独占访问。" + +#: ../../library/asyncio-sync.rst:46 +msgid "" +"The preferred way to use a Lock is an :keyword:`async with` statement::" +msgstr "使用 Lock 的推荐方式是通过 :keyword:`async with` 语句::" + +#: ../../library/asyncio-sync.rst:55 ../../library/asyncio-sync.rst:200 +#: ../../library/asyncio-sync.rst:300 +msgid "which is equivalent to::" +msgstr "这等价于::" + +#: ../../library/asyncio-sync.rst:68 ../../library/asyncio-sync.rst:114 +#: ../../library/asyncio-sync.rst:190 ../../library/asyncio-sync.rst:290 +#: ../../library/asyncio-sync.rst:345 +msgid "The *loop* parameter." +msgstr "*loop* 形参。" + +#: ../../library/asyncio-sync.rst:71 +msgid "Acquire the lock." +msgstr "获取锁。" + +#: ../../library/asyncio-sync.rst:73 +msgid "" +"This method waits until the lock is *unlocked*, sets it to *locked* and " +"returns ``True``." +msgstr "此方法会等待直至锁为 *unlocked*,将其设为 *locked* 并返回 ``True``。" + +#: ../../library/asyncio-sync.rst:76 +msgid "" +"When more than one coroutine is blocked in :meth:`acquire` waiting for the " +"lock to be unlocked, only one coroutine eventually proceeds." +msgstr "当有一个以上的协程在 :meth:`acquire` 中被阻塞则会等待解锁,最终只有一个协程会被执行。" + +#: ../../library/asyncio-sync.rst:80 +msgid "" +"Acquiring a lock is *fair*: the coroutine that proceeds will be the first " +"coroutine that started waiting on the lock." +msgstr "锁的获取是 *公平的*: 被执行的协程将是第一个开始等待锁的协程。" + +#: ../../library/asyncio-sync.rst:85 +msgid "Release the lock." +msgstr "释放锁。" + +#: ../../library/asyncio-sync.rst:87 +msgid "When the lock is *locked*, reset it to *unlocked* and return." +msgstr "当锁为 *locked* 时,将其设为 *unlocked* 并返回。" + +#: ../../library/asyncio-sync.rst:89 +msgid "If the lock is *unlocked*, a :exc:`RuntimeError` is raised." +msgstr "如果锁为 *unlocked*,则会引发 :exc:`RuntimeError`。" + +#: ../../library/asyncio-sync.rst:93 +msgid "Return ``True`` if the lock is *locked*." +msgstr "如果锁为 *locked* 则返回 ``True``。" + +#: ../../library/asyncio-sync.rst:97 +msgid "Event" +msgstr "事件" + +#: ../../library/asyncio-sync.rst:101 +msgid "An event object. Not thread-safe." +msgstr "事件对象。 该对象不是线程安全的。" + +#: ../../library/asyncio-sync.rst:103 +msgid "" +"An asyncio event can be used to notify multiple asyncio tasks that some " +"event has happened." +msgstr "asyncio 事件可被用来通知多个 asyncio 任务已经有事件发生。" + +#: ../../library/asyncio-sync.rst:106 +msgid "" +"An Event object manages an internal flag that can be set to *true* with the " +":meth:`~Event.set` method and reset to *false* with the :meth:`clear` " +"method. The :meth:`~Event.wait` method blocks until the flag is set to " +"*true*. The flag is set to *false* initially." +msgstr "" +"Event 对象会管理一个内部旗标,可通过 :meth:`~Event.set` 方法将其设为 *true* 并通过 :meth:`clear` " +"方法将其重设为 *false*。 :meth:`~Event.wait` 方法会阻塞直至该旗标被设为 *true*。 该旗标初始时会被设为 " +"*false*。" + +#: ../../library/asyncio-sync.rst:117 +msgid "Example::" +msgstr "示例::" + +#: ../../library/asyncio-sync.rst:142 +msgid "Wait until the event is set." +msgstr "等待直至事件被设置。" + +#: ../../library/asyncio-sync.rst:144 +msgid "" +"If the event is set, return ``True`` immediately. Otherwise block until " +"another task calls :meth:`~Event.set`." +msgstr "如果事件已被设置,则立即返回 ``True``。 否则将阻塞直至另一个任务调用 :meth:`~Event.set`。" + +#: ../../library/asyncio-sync.rst:149 +msgid "Set the event." +msgstr "设置事件。" + +#: ../../library/asyncio-sync.rst:151 +msgid "All tasks waiting for event to be set will be immediately awakened." +msgstr "所有等待事件被设置的任务将被立即唤醒。" + +#: ../../library/asyncio-sync.rst:156 +msgid "Clear (unset) the event." +msgstr "清空(取消设置)事件。" + +#: ../../library/asyncio-sync.rst:158 +msgid "" +"Tasks awaiting on :meth:`~Event.wait` will now block until the " +":meth:`~Event.set` method is called again." +msgstr "通过 :meth:`~Event.wait` 进行等待的任务现在将会阻塞直至 :meth:`~Event.set` 方法被再次调用。" + +#: ../../library/asyncio-sync.rst:163 +msgid "Return ``True`` if the event is set." +msgstr "如果事件已被设置则返回 ``True``。" + +#: ../../library/asyncio-sync.rst:167 +msgid "Condition" +msgstr "Condition" + +#: ../../library/asyncio-sync.rst:171 +msgid "A Condition object. Not thread-safe." +msgstr "条件对象。 该对象不是线程安全的。" + +#: ../../library/asyncio-sync.rst:173 +msgid "" +"An asyncio condition primitive can be used by a task to wait for some event " +"to happen and then get exclusive access to a shared resource." +msgstr "asyncio 条件原语可被任务用于等待某个事件发生,然后获取对共享资源的独占访问。" + +#: ../../library/asyncio-sync.rst:177 +msgid "" +"In essence, a Condition object combines the functionality of an " +":class:`Event` and a :class:`Lock`. It is possible to have multiple " +"Condition objects share one Lock, which allows coordinating exclusive access" +" to a shared resource between different tasks interested in particular " +"states of that shared resource." +msgstr "" +"在本质上,Condition 对象合并了 :class:`Event` 和 :class:`Lock` 的功能。 多个 Condition " +"对象有可能共享一个 Lock,这允许关注于共享资源的特定状态的不同任务实现对共享资源的协同独占访问。" + +#: ../../library/asyncio-sync.rst:183 +msgid "" +"The optional *lock* argument must be a :class:`Lock` object or ``None``. In" +" the latter case a new Lock object is created automatically." +msgstr "" +"可选的 *lock* 参数必须为 :class:`Lock` 对象或 ``None``。 在后一种情况下会自动创建一个新的 Lock 对象。" + +#: ../../library/asyncio-sync.rst:191 +msgid "" +"The preferred way to use a Condition is an :keyword:`async with` statement::" +msgstr "使用 Condition 的推荐方式是通过 :keyword:`async with` 语句::" + +#: ../../library/asyncio-sync.rst:213 +msgid "Acquire the underlying lock." +msgstr "获取下层的锁。" + +#: ../../library/asyncio-sync.rst:215 +msgid "" +"This method waits until the underlying lock is *unlocked*, sets it to " +"*locked* and returns ``True``." +msgstr "此方法会等待直至下层的锁为 *unlocked*,将其设为 *locked* 并返回 returns ``True``。" + +#: ../../library/asyncio-sync.rst:220 +msgid "" +"Wake up at most *n* tasks (1 by default) waiting on this condition. The " +"method is no-op if no tasks are waiting." +msgstr "唤醒最多 *n* 个正在等待此条件的任务(默认为 1 个)。 如果没有任务正在等待则此方法为空操作。" + +#: ../../library/asyncio-sync.rst:223 ../../library/asyncio-sync.rst:238 +msgid "" +"The lock must be acquired before this method is called and released shortly " +"after. If called with an *unlocked* lock a :exc:`RuntimeError` error is " +"raised." +msgstr "" +"锁必须在此方法被调用前被获取并在随后被快速释放。 如果通过一个 *unlocked* 锁调用则会引发 :exc:`RuntimeError`。" + +#: ../../library/asyncio-sync.rst:229 +msgid "Return ``True`` if the underlying lock is acquired." +msgstr "如果下层的锁已被获取则返回 ``True``。" + +#: ../../library/asyncio-sync.rst:233 +msgid "Wake up all tasks waiting on this condition." +msgstr "唤醒所有正在等待此条件的任务。" + +#: ../../library/asyncio-sync.rst:235 +msgid "This method acts like :meth:`notify`, but wakes up all waiting tasks." +msgstr "此方法的行为类似于 :meth:`notify`,但会唤醒所有正在等待的任务。" + +#: ../../library/asyncio-sync.rst:244 +msgid "Release the underlying lock." +msgstr "释放下层的锁。" + +#: ../../library/asyncio-sync.rst:246 +msgid "When invoked on an unlocked lock, a :exc:`RuntimeError` is raised." +msgstr "当在未锁定的锁上唤起时,会引发 :exc:`RuntimeError`。" + +#: ../../library/asyncio-sync.rst:251 +msgid "Wait until notified." +msgstr "等待直至收到通知。" + +#: ../../library/asyncio-sync.rst:253 +msgid "" +"If the calling task has not acquired the lock when this method is called, a " +":exc:`RuntimeError` is raised." +msgstr "当此方法被调用时如果调用方任务未获得锁,则会引发 :exc:`RuntimeError`。" + +#: ../../library/asyncio-sync.rst:256 +msgid "" +"This method releases the underlying lock, and then blocks until it is " +"awakened by a :meth:`notify` or :meth:`notify_all` call. Once awakened, the " +"Condition re-acquires its lock and this method returns ``True``." +msgstr "" +"这个方法会释放下层的锁,然后保持阻塞直到被 :meth:`notify` 或 :meth:`notify_all` 调用所唤醒。 " +"一旦被唤醒,Condition 会重新获取它的锁并且此方法将返回 ``True``。" + +#: ../../library/asyncio-sync.rst:263 +msgid "Wait until a predicate becomes *true*." +msgstr "等待直到目标值变为 *true*。" + +#: ../../library/asyncio-sync.rst:265 +msgid "" +"The predicate must be a callable which result will be interpreted as a " +"boolean value. The final value is the return value." +msgstr "目标必须为一个可调用对象,其结果将被解读为一个布尔值。 最终的值将为返回值。" + +#: ../../library/asyncio-sync.rst:271 +msgid "Semaphore" +msgstr "Semaphore" + +#: ../../library/asyncio-sync.rst:275 +msgid "A Semaphore object. Not thread-safe." +msgstr "信号量对象。 该对象不是线程安全的。" + +#: ../../library/asyncio-sync.rst:277 +msgid "" +"A semaphore manages an internal counter which is decremented by each " +":meth:`acquire` call and incremented by each :meth:`release` call. The " +"counter can never go below zero; when :meth:`acquire` finds that it is zero," +" it blocks, waiting until some task calls :meth:`release`." +msgstr "" +"信号量会管理一个内部计数器,该计数器会随每次 :meth:`acquire` 调用递减并随每次 :meth:`release` 调用递增。 " +"计数器的值永远不会降到零以下;当 :meth:`acquire` 发现其值为零时,它将保持阻塞直到有某个任务调用了 :meth:`release`。" + +#: ../../library/asyncio-sync.rst:283 +msgid "" +"The optional *value* argument gives the initial value for the internal " +"counter (``1`` by default). If the given value is less than ``0`` a " +":exc:`ValueError` is raised." +msgstr "" +"可选的 *value* 参数用来为内部计数器赋初始值 (默认值为 ``1``)。 如果给定的值小于 ``0`` 则会引发 " +":exc:`ValueError`。" + +#: ../../library/asyncio-sync.rst:291 +msgid "" +"The preferred way to use a Semaphore is an :keyword:`async with` statement::" +msgstr "使用 Semaphore 的推荐方式是通过 :keyword:`async with` 语句。::" + +#: ../../library/asyncio-sync.rst:313 +msgid "Acquire a semaphore." +msgstr "获取一个信号量。" + +#: ../../library/asyncio-sync.rst:315 +msgid "" +"If the internal counter is greater than zero, decrement it by one and return" +" ``True`` immediately. If it is zero, wait until a :meth:`release` is " +"called and return ``True``." +msgstr "" +"如果内部计数器的值大于零,则将其减一并立即返回 ``True``。 如果其值为零,则会等待直到 :meth:`release` 并调用并返回 " +"``True``。" + +#: ../../library/asyncio-sync.rst:321 +msgid "Returns ``True`` if semaphore can not be acquired immediately." +msgstr "如果信号量对象无法被立即获取则返回 ``True``。" + +#: ../../library/asyncio-sync.rst:325 +msgid "" +"Release a semaphore, incrementing the internal counter by one. Can wake up a" +" task waiting to acquire the semaphore." +msgstr "释放一个信号量对象,将内部计数器的值加一。 可以唤醒一个正在等待获取信号量对象的任务。" + +#: ../../library/asyncio-sync.rst:328 +msgid "" +"Unlike :class:`BoundedSemaphore`, :class:`Semaphore` allows making more " +"``release()`` calls than ``acquire()`` calls." +msgstr "" +"不同于 :class:`BoundedSemaphore`,:class:`Semaphore` 允许执行的 ``release()`` 调用多于 " +"``acquire()`` 调用。" + +#: ../../library/asyncio-sync.rst:333 +msgid "BoundedSemaphore" +msgstr "BoundedSemaphore" + +#: ../../library/asyncio-sync.rst:337 +msgid "A bounded semaphore object. Not thread-safe." +msgstr "绑定的信号量对象。 该对象不是线程安全的。" + +#: ../../library/asyncio-sync.rst:339 +msgid "" +"Bounded Semaphore is a version of :class:`Semaphore` that raises a " +":exc:`ValueError` in :meth:`~Semaphore.release` if it increases the internal" +" counter above the initial *value*." +msgstr "" +"BoundedSemaphore 是特殊版本的 :class:`Semaphore`,如果在 :meth:`~Semaphore.release` " +"中内部计数器值增加到初始 *value* 以上它将引发一个 :exc:`ValueError`。" + +#: ../../library/asyncio-sync.rst:352 +msgid "" +"Acquiring a lock using ``await lock`` or ``yield from lock`` and/or " +":keyword:`with` statement (``with await lock``, ``with (yield from lock)``) " +"was removed. Use ``async with lock`` instead." +msgstr "" +"使用 ``await lock`` 或 ``yield from lock`` 以及/或者 :keyword:`with` 语句 (``with " +"await lock``, ``with (yield from lock)``) 来获取锁的操作已被移除。 请改用 ``async with " +"lock``。" diff --git a/library/asyncio-task.po b/library/asyncio-task.po new file mode 100644 index 000000000..d16e6d874 --- /dev/null +++ b/library/asyncio-task.po @@ -0,0 +1,1074 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) 2001-2024, Python Software Foundation +# This file is distributed under the same license as the Python package. +# FIRST AUTHOR , YEAR. +# +# Translators: +# walkinrain , 2019 +# techmoe , 2021 +# Freesand Leo , 2024 +# Rafael Fontenelle , 2024 +# +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: Python 3.9\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2024-12-06 16:45+0000\n" +"PO-Revision-Date: 2017-02-16 17:49+0000\n" +"Last-Translator: Rafael Fontenelle , 2024\n" +"Language-Team: Chinese (China) (https://app.transifex.com/python-doc/teams/5390/zh_CN/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: zh_CN\n" +"Plural-Forms: nplurals=1; plural=0;\n" + +#: ../../library/asyncio-task.rst:6 +msgid "Coroutines and Tasks" +msgstr "协程与任务" + +#: ../../library/asyncio-task.rst:8 +msgid "" +"This section outlines high-level asyncio APIs to work with coroutines and " +"Tasks." +msgstr "本节将简述用于协程与任务的高层级 API。" + +#: ../../library/asyncio-task.rst:19 ../../library/asyncio-task.rst:121 +msgid "Coroutines" +msgstr "协程" + +#: ../../library/asyncio-task.rst:21 +msgid "" +":term:`Coroutines ` declared with the async/await syntax is the " +"preferred way of writing asyncio applications. For example, the following " +"snippet of code prints \"hello\", waits 1 second, and then prints " +"\"world\"::" +msgstr "" +"通过 async/await 语法来声明 :term:`协程 ` 是编写 asyncio 应用的推荐方式。 例如,以下代码段会打印" +" \"hello\",等待 1 秒,再打印 \"world\"::" + +#: ../../library/asyncio-task.rst:37 +msgid "" +"Note that simply calling a coroutine will not schedule it to be executed::" +msgstr "注意:简单地调用一个协程并不会使其被调度执行" + +#: ../../library/asyncio-task.rst:43 +msgid "To actually run a coroutine, asyncio provides three main mechanisms:" +msgstr "要实际运行协程,asyncio 提供了三种主要机制:" + +#: ../../library/asyncio-task.rst:45 +msgid "" +"The :func:`asyncio.run` function to run the top-level entry point \"main()\"" +" function (see the above example.)" +msgstr ":func:`asyncio.run` 函数用来运行最高层级的入口点 \"main()\" 函数 (参见上面的示例。)" + +#: ../../library/asyncio-task.rst:48 +msgid "" +"Awaiting on a coroutine. The following snippet of code will print \"hello\"" +" after waiting for 1 second, and then print \"world\" after waiting for " +"*another* 2 seconds::" +msgstr "对协程执行 await。以下代码段会在等待 1 秒后打印 \"hello\",然后 *再次* 等待 2 秒后打印 \"world\"::" + +#: ../../library/asyncio-task.rst:69 +msgid "Expected output::" +msgstr "预期的输出::" + +#: ../../library/asyncio-task.rst:76 +msgid "" +"The :func:`asyncio.create_task` function to run coroutines concurrently as " +"asyncio :class:`Tasks `." +msgstr "" +":func:`asyncio.create_task` 函数用来并发运行作为 asyncio :class:`任务 ` 的多个协程。" + +#: ../../library/asyncio-task.rst:79 +msgid "" +"Let's modify the above example and run two ``say_after`` coroutines " +"*concurrently*::" +msgstr "让我们修改以上示例,*并发* 运行两个 ``say_after`` 协程::" + +#: ../../library/asyncio-task.rst:98 +msgid "" +"Note that expected output now shows that the snippet runs 1 second faster " +"than before::" +msgstr "注意,预期的输出显示代码段的运行时间比之前快了 1 秒::" + +#: ../../library/asyncio-task.rst:110 +msgid "Awaitables" +msgstr "可等待对象" + +#: ../../library/asyncio-task.rst:112 +msgid "" +"We say that an object is an **awaitable** object if it can be used in an " +":keyword:`await` expression. Many asyncio APIs are designed to accept " +"awaitables." +msgstr "" +"如果一个对象可以在 :keyword:`await` 语句中使用,那么它就是 **可等待** 对象。许多 asyncio API " +"都被设计为接受可等待对象。" + +#: ../../library/asyncio-task.rst:116 +msgid "" +"There are three main types of *awaitable* objects: **coroutines**, " +"**Tasks**, and **Futures**." +msgstr "*可等待* 对象有三种主要类型: **协程**, **任务** 和 **Future**." + +#: ../../library/asyncio-task.rst:122 +msgid "" +"Python coroutines are *awaitables* and therefore can be awaited from other " +"coroutines::" +msgstr "Python 协程属于 *可等待* 对象,因此可以在其他协程中被等待::" + +#: ../../library/asyncio-task.rst:143 +msgid "" +"In this documentation the term \"coroutine\" can be used for two closely " +"related concepts:" +msgstr "在本文档中 \"协程\" 可用来表示两个紧密关联的概念:" + +#: ../../library/asyncio-task.rst:146 +msgid "a *coroutine function*: an :keyword:`async def` function;" +msgstr "*协程函数*: 定义形式为 :keyword:`async def` 的函数;" + +#: ../../library/asyncio-task.rst:148 +msgid "" +"a *coroutine object*: an object returned by calling a *coroutine function*." +msgstr "*协程对象*: 调用 *协程函数* 所返回的对象。" + +#: ../../library/asyncio-task.rst:151 +msgid "" +"asyncio also supports legacy :ref:`generator-based " +"` coroutines." +msgstr "asyncio 也支持旧式的 :ref:`基于生成器的 ` 协程。" + +#: ../../library/asyncio-task.rst:156 +msgid "Tasks" +msgstr "任务" + +#: ../../library/asyncio-task.rst:157 +msgid "*Tasks* are used to schedule coroutines *concurrently*." +msgstr "*任务* 被用来“并行的”调度协程" + +#: ../../library/asyncio-task.rst:159 +msgid "" +"When a coroutine is wrapped into a *Task* with functions like " +":func:`asyncio.create_task` the coroutine is automatically scheduled to run " +"soon::" +msgstr "当一个协程通过 :func:`asyncio.create_task` 等函数被封装为一个 *任务*,该协程会被自动调度执行::" + +#: ../../library/asyncio-task.rst:181 +msgid "Futures" +msgstr "Futures" + +#: ../../library/asyncio-task.rst:182 +msgid "" +"A :class:`Future` is a special **low-level** awaitable object that " +"represents an **eventual result** of an asynchronous operation." +msgstr ":class:`Future` 是一种特殊的 **低层级** 可等待对象,表示一个异步操作的 **最终结果**。" + +#: ../../library/asyncio-task.rst:185 +msgid "" +"When a Future object is *awaited* it means that the coroutine will wait " +"until the Future is resolved in some other place." +msgstr "当一个 Future 对象 *被等待*,这意味着协程将保持等待直到该 Future 对象在其他地方操作完毕。" + +#: ../../library/asyncio-task.rst:188 +msgid "" +"Future objects in asyncio are needed to allow callback-based code to be used" +" with async/await." +msgstr "在 asyncio 中需要 Future 对象以便允许通过 async/await 使用基于回调的代码。" + +#: ../../library/asyncio-task.rst:191 +msgid "" +"Normally **there is no need** to create Future objects at the application " +"level code." +msgstr "通常情况下 **没有必要** 在应用层级的代码中创建 Future 对象。" + +#: ../../library/asyncio-task.rst:194 +msgid "" +"Future objects, sometimes exposed by libraries and some asyncio APIs, can be" +" awaited::" +msgstr "Future 对象有时会由库和某些 asyncio API 暴露给用户,用作可等待对象::" + +#: ../../library/asyncio-task.rst:206 +msgid "" +"A good example of a low-level function that returns a Future object is " +":meth:`loop.run_in_executor`." +msgstr "一个很好的返回对象的低层级函数的示例是 :meth:`loop.run_in_executor`。" + +#: ../../library/asyncio-task.rst:211 +msgid "Running an asyncio Program" +msgstr "运行 asyncio 程序" + +#: ../../library/asyncio-task.rst:215 +msgid "Execute the :term:`coroutine` *coro* and return the result." +msgstr "执行 :term:`coroutine` *coro* 并返回结果。" + +#: ../../library/asyncio-task.rst:217 +msgid "" +"This function runs the passed coroutine, taking care of managing the asyncio" +" event loop, *finalizing asynchronous generators*, and closing the " +"threadpool." +msgstr "此函数会运行传入的协程,负责管理 asyncio 事件循环,*终结异步生成器*,并关闭线程池。" + +#: ../../library/asyncio-task.rst:221 +msgid "" +"This function cannot be called when another asyncio event loop is running in" +" the same thread." +msgstr "当有其他 asyncio 事件循环在同一线程中运行时,此函数不能被调用。" + +#: ../../library/asyncio-task.rst:224 +msgid "If *debug* is ``True``, the event loop will be run in debug mode." +msgstr "如果 *debug* 为 ``True``,事件循环将以调试模式运行。" + +#: ../../library/asyncio-task.rst:226 +msgid "" +"This function always creates a new event loop and closes it at the end. It " +"should be used as a main entry point for asyncio programs, and should " +"ideally only be called once." +msgstr "此函数总是会创建一个新的事件循环并在结束时关闭之。它应当被用作 asyncio 程序的主入口点,理想情况下应当只被调用一次。" + +#: ../../library/asyncio-task.rst:230 ../../library/asyncio-task.rst:350 +#: ../../library/asyncio-task.rst:471 ../../library/asyncio-task.rst:603 +msgid "Example::" +msgstr "示例::" + +#: ../../library/asyncio-task.rst:240 +msgid "Updated to use :meth:`loop.shutdown_default_executor`." +msgstr "更新为使用 :meth:`loop.shutdown_default_executor`。" + +#: ../../library/asyncio-task.rst:244 +msgid "" +"The source code for ``asyncio.run()`` can be found in " +":source:`Lib/asyncio/runners.py`." +msgstr "``asyncio.run()`` 的源代码可以在 :source:`Lib/asyncio/runners.py` 中找到。" + +#: ../../library/asyncio-task.rst:248 +msgid "Creating Tasks" +msgstr "创建任务" + +#: ../../library/asyncio-task.rst:252 +msgid "" +"Wrap the *coro* :ref:`coroutine ` into a :class:`Task` and " +"schedule its execution. Return the Task object." +msgstr "将 *coro* :ref:`协程 ` 封装为一个 :class:`Task` 并调度其执行。返回 Task 对象。" + +#: ../../library/asyncio-task.rst:255 +msgid "" +"If *name* is not ``None``, it is set as the name of the task using " +":meth:`Task.set_name`." +msgstr "*name* 不为 ``None``,它将使用 :meth:`Task.set_name` 来设为任务的名称。" + +#: ../../library/asyncio-task.rst:258 +msgid "" +"The task is executed in the loop returned by :func:`get_running_loop`, " +":exc:`RuntimeError` is raised if there is no running loop in current thread." +msgstr "" +"该任务会在 :func:`get_running_loop` 返回的循环中执行,如果当前线程没有在运行的循环则会引发 " +":exc:`RuntimeError`。" + +#: ../../library/asyncio-task.rst:264 +msgid "" +"Save a reference to the result of this function, to avoid a task " +"disappearing mid execution." +msgstr "保存一个指向此函数的结果的引用,以避免任务在执行期间消失。" + +#: ../../library/asyncio-task.rst:269 ../../library/asyncio-task.rst:785 +msgid "Added the ``name`` parameter." +msgstr "添加了 ``name`` 形参。" + +#: ../../library/asyncio-task.rst:274 +msgid "Sleeping" +msgstr "休眠" + +#: ../../library/asyncio-task.rst:278 +msgid "Block for *delay* seconds." +msgstr "阻塞 *delay* 指定的秒数。" + +#: ../../library/asyncio-task.rst:280 +msgid "" +"If *result* is provided, it is returned to the caller when the coroutine " +"completes." +msgstr "如果指定了 *result*,则当协程完成时将其返回给调用者。" + +#: ../../library/asyncio-task.rst:283 +msgid "" +"``sleep()`` always suspends the current task, allowing other tasks to run." +msgstr "``sleep()`` 总是会挂起当前任务,以允许其他任务运行。" + +#: ../../library/asyncio-task.rst:286 +msgid "" +"Setting the delay to 0 provides an optimized path to allow other tasks to " +"run. This can be used by long-running functions to avoid blocking the event " +"loop for the full duration of the function call." +msgstr "将 delay 设为 0 将提供一个经优化的路径以允许其他任务运行。 这可供长期间运行的函数使用以避免在函数调用的全过程中阻塞事件循环。" + +#: ../../library/asyncio-task.rst:292 ../../library/asyncio-task.rst:347 +#: ../../library/asyncio-task.rst:437 ../../library/asyncio-task.rst:468 +#: ../../library/asyncio-task.rst:555 ../../library/asyncio-task.rst:602 +#: ../../library/asyncio-task.rst:790 +msgid "The *loop* parameter." +msgstr "*loop* 形参。" + +#: ../../library/asyncio-task.rst:295 +msgid "" +"Example of coroutine displaying the current date every second for 5 " +"seconds::" +msgstr "以下协程示例运行 5 秒,每秒显示一次当前日期::" + +#: ../../library/asyncio-task.rst:314 +msgid "Running Tasks Concurrently" +msgstr "并发运行任务" + +#: ../../library/asyncio-task.rst:318 +msgid "" +"Run :ref:`awaitable objects ` in the *aws* sequence " +"*concurrently*." +msgstr "*并发* 运行 *aws* 序列中的 :ref:`可等待对象 `。" + +#: ../../library/asyncio-task.rst:321 +msgid "" +"If any awaitable in *aws* is a coroutine, it is automatically scheduled as a" +" Task." +msgstr "如果 *aws* 中的某个可等待对象为协程,它将自动被作为一个任务调度。" + +#: ../../library/asyncio-task.rst:324 +msgid "" +"If all awaitables are completed successfully, the result is an aggregate " +"list of returned values. The order of result values corresponds to the " +"order of awaitables in *aws*." +msgstr "如果所有可等待对象都成功完成,结果将是一个由所有返回值聚合而成的列表。结果值的顺序与 *aws* 中可等待对象的顺序一致。" + +#: ../../library/asyncio-task.rst:328 +msgid "" +"If *return_exceptions* is ``False`` (default), the first raised exception is" +" immediately propagated to the task that awaits on ``gather()``. Other " +"awaitables in the *aws* sequence **won't be cancelled** and will continue to" +" run." +msgstr "" +"如果 *return_exceptions* 为 ``False`` (默认),所引发的首个异常会立即传播给等待 ``gather()`` " +"的任务。*aws* 序列中的其他可等待对象 **不会被取消** 并将继续运行。" + +#: ../../library/asyncio-task.rst:333 +msgid "" +"If *return_exceptions* is ``True``, exceptions are treated the same as " +"successful results, and aggregated in the result list." +msgstr "如果 *return_exceptions* 为 ``True``,异常会和成功的结果一样处理,并聚合至结果列表。" + +#: ../../library/asyncio-task.rst:336 +msgid "" +"If ``gather()`` is *cancelled*, all submitted awaitables (that have not " +"completed yet) are also *cancelled*." +msgstr "如果 ``gather()`` *被取消*,所有被提交 (尚未完成) 的可等待对象也会 *被取消*。" + +#: ../../library/asyncio-task.rst:339 +msgid "" +"If any Task or Future from the *aws* sequence is *cancelled*, it is treated " +"as if it raised :exc:`CancelledError` -- the ``gather()`` call is **not** " +"cancelled in this case. This is to prevent the cancellation of one " +"submitted Task/Future to cause other Tasks/Futures to be cancelled." +msgstr "" +"如果 *aws* 序列中的任一 Task 或 Future 对象 *被取消*,它将被当作引发了 :exc:`CancelledError` 一样处理 " +"-- 在此情况下 ``gather()`` 调用 **不会** 被取消。这是为了防止一个已提交的 Task/Future 被取消导致其他 " +"Tasks/Future 也被取消。" + +#: ../../library/asyncio-task.rst:388 +msgid "" +"If *return_exceptions* is False, cancelling gather() after it has been " +"marked done won't cancel any submitted awaitables. For instance, gather can " +"be marked done after propagating an exception to the caller, therefore, " +"calling ``gather.cancel()`` after catching an exception (raised by one of " +"the awaitables) from gather won't cancel any other awaitables." +msgstr "" +"如果 *return_exceptions* 为 False,则在 gather() 被标记为已完成后取消它将不会取消任何已提交的可等待对象。 " +"例如,在将一个异常传播给调用者之后,gather 可被标记为已完成,因此,在从 gather 捕获一个(由可等待对象所引发的)异常之后调用 " +"``gather.cancel()`` 将不会取消任何其他可等待对象。" + +#: ../../library/asyncio-task.rst:395 +msgid "" +"If the *gather* itself is cancelled, the cancellation is propagated " +"regardless of *return_exceptions*." +msgstr "如果 *gather* 本身被取消,则无论 *return_exceptions* 取值为何,消息都会被传播。" + +#: ../../library/asyncio-task.rst:401 +msgid "Shielding From Cancellation" +msgstr "屏蔽取消操作" + +#: ../../library/asyncio-task.rst:405 +msgid "" +"Protect an :ref:`awaitable object ` from being " +":meth:`cancelled `." +msgstr "保护一个 :ref:`可等待对象 ` 防止其被 :meth:`取消 `。" + +#: ../../library/asyncio-task.rst:408 ../../library/asyncio-task.rst:448 +msgid "If *aw* is a coroutine it is automatically scheduled as a Task." +msgstr "如果 *aw* 是一个协程,它将自动被作为任务调度。" + +#: ../../library/asyncio-task.rst:410 +msgid "The statement::" +msgstr "以下语句::" + +#: ../../library/asyncio-task.rst:414 +msgid "is equivalent to::" +msgstr "相当于::" + +#: ../../library/asyncio-task.rst:418 +msgid "" +"*except* that if the coroutine containing it is cancelled, the Task running " +"in ``something()`` is not cancelled. From the point of view of " +"``something()``, the cancellation did not happen. Although its caller is " +"still cancelled, so the \"await\" expression still raises a " +":exc:`CancelledError`." +msgstr "" +"*不同之处* 在于如果包含它的协程被取消,在 ``something()`` 中运行的任务不会被取消。从 ``something()`` " +"的角度看来,取消操作并没有发生。然而其调用者已被取消,因此 \"await\" 表达式仍然会引发 :exc:`CancelledError`。" + +#: ../../library/asyncio-task.rst:424 +msgid "" +"If ``something()`` is cancelled by other means (i.e. from within itself) " +"that would also cancel ``shield()``." +msgstr "如果通过其他方式取消 ``something()`` (例如在其内部操作) 则 ``shield()`` 也会取消。" + +#: ../../library/asyncio-task.rst:427 +msgid "" +"If it is desired to completely ignore cancellation (not recommended) the " +"``shield()`` function should be combined with a try/except clause, as " +"follows::" +msgstr "如果希望完全忽略取消操作 (不推荐) 则 ``shield()`` 函数需要配合一个 try/except 代码段,如下所示::" + +#: ../../library/asyncio-task.rst:441 +msgid "Timeouts" +msgstr "超时" + +#: ../../library/asyncio-task.rst:445 +msgid "" +"Wait for the *aw* :ref:`awaitable ` to complete with a " +"timeout." +msgstr "等待 *aw* :ref:`可等待对象 ` 完成,指定 timeout 秒数后超时。" + +#: ../../library/asyncio-task.rst:450 +msgid "" +"*timeout* can either be ``None`` or a float or int number of seconds to wait" +" for. If *timeout* is ``None``, block until the future completes." +msgstr "" +"*timeout* 可以为 ``None``,也可以为 float 或 int 型数值表示的等待秒数。如果 *timeout* 为 " +"``None``,则等待直到完成。" + +#: ../../library/asyncio-task.rst:454 +msgid "" +"If a timeout occurs, it cancels the task and raises " +":exc:`asyncio.TimeoutError`." +msgstr "如果发生超时,任务将取消并引发 :exc:`asyncio.TimeoutError`." + +#: ../../library/asyncio-task.rst:457 +msgid "" +"To avoid the task :meth:`cancellation `, wrap it in " +":func:`shield`." +msgstr "要避免任务 :meth:`取消 `,可以加上 :func:`shield`。" + +#: ../../library/asyncio-task.rst:460 +msgid "" +"The function will wait until the future is actually cancelled, so the total " +"wait time may exceed the *timeout*. If an exception happens during " +"cancellation, it is propagated." +msgstr "此函数将等待直到 Future 确实被取消,所以总等待时间可能超过 *timeout*。 如果在取消期间发生了异常,异常将会被传播。" + +#: ../../library/asyncio-task.rst:464 +msgid "If the wait is cancelled, the future *aw* is also cancelled." +msgstr "如果等待被取消,则 *aw* 指定的对象也会被取消。" + +#: ../../library/asyncio-task.rst:491 +msgid "" +"When *aw* is cancelled due to a timeout, ``wait_for`` waits for *aw* to be " +"cancelled. Previously, it raised :exc:`asyncio.TimeoutError` immediately." +msgstr "" +"当 *aw* 因超时被取消,``wait_for`` 会等待 *aw* 被取消。之前版本则将立即引发 " +":exc:`asyncio.TimeoutError`。" + +#: ../../library/asyncio-task.rst:498 +msgid "Waiting Primitives" +msgstr "简单等待" + +#: ../../library/asyncio-task.rst:503 +msgid "" +"Run :ref:`awaitable objects ` in the *aws* iterable " +"concurrently and block until the condition specified by *return_when*." +msgstr "" +"并发地运行 *aws* 可迭代对象中的 :ref:`可等待对象 ` 并进入阻塞状态直到满足 " +"*return_when* 所指定的条件。" + +#: ../../library/asyncio-task.rst:507 +msgid "The *aws* iterable must not be empty." +msgstr "*aws* 可迭代对象必须不为空。" + +#: ../../library/asyncio-task.rst:509 +msgid "Returns two sets of Tasks/Futures: ``(done, pending)``." +msgstr "返回两个 Task/Future 集合: ``(done, pending)``。" + +#: ../../library/asyncio-task.rst:511 +msgid "Usage::" +msgstr "用法:" + +#: ../../library/asyncio-task.rst:515 +msgid "" +"*timeout* (a float or int), if specified, can be used to control the maximum" +" number of seconds to wait before returning." +msgstr "如指定 *timeout* (float 或 int 类型) 则它将被用于控制返回之前等待的最长秒数。" + +#: ../../library/asyncio-task.rst:518 +msgid "" +"Note that this function does not raise :exc:`asyncio.TimeoutError`. Futures " +"or Tasks that aren't done when the timeout occurs are simply returned in the" +" second set." +msgstr "" +"请注意此函数不会引发 :exc:`asyncio.TimeoutError`。当超时发生时,未完成的 Future 或 Task 将在指定秒数后被返回。" + +#: ../../library/asyncio-task.rst:522 +msgid "" +"*return_when* indicates when this function should return. It must be one of" +" the following constants:" +msgstr "*return_when* 指定此函数应在何时返回。它必须为以下常数之一:" + +#: ../../library/asyncio-task.rst:528 +msgid "Constant" +msgstr "常量" + +#: ../../library/asyncio-task.rst:528 +msgid "Description" +msgstr "描述" + +#: ../../library/asyncio-task.rst:530 +msgid ":const:`FIRST_COMPLETED`" +msgstr ":const:`FIRST_COMPLETED`" + +#: ../../library/asyncio-task.rst:530 +msgid "The function will return when any future finishes or is cancelled." +msgstr "函数将在任意可等待对象结束或取消时返回。" + +#: ../../library/asyncio-task.rst:533 +msgid ":const:`FIRST_EXCEPTION`" +msgstr ":const:`FIRST_EXCEPTION`" + +#: ../../library/asyncio-task.rst:533 +msgid "" +"The function will return when any future finishes by raising an exception. " +"If no future raises an exception then it is equivalent to " +":const:`ALL_COMPLETED`." +msgstr "函数将在任意可等待对象因引发异常而结束时返回。当没有引发任何异常时它就相当于 :const:`ALL_COMPLETED`。" + +#: ../../library/asyncio-task.rst:539 +msgid ":const:`ALL_COMPLETED`" +msgstr ":const:`ALL_COMPLETED`" + +#: ../../library/asyncio-task.rst:539 +msgid "The function will return when all futures finish or are cancelled." +msgstr "函数将在所有可等待对象结束或取消时返回。" + +#: ../../library/asyncio-task.rst:543 +msgid "" +"Unlike :func:`~asyncio.wait_for`, ``wait()`` does not cancel the futures " +"when a timeout occurs." +msgstr "与 :func:`~asyncio.wait_for` 不同,``wait()`` 在超时发生时不会取消可等待对象。" + +#: ../../library/asyncio-task.rst:548 +msgid "" +"If any awaitable in *aws* is a coroutine, it is automatically scheduled as a" +" Task. Passing coroutines objects to ``wait()`` directly is deprecated as " +"it leads to :ref:`confusing behavior `." +msgstr "" +"如果 *aws* 中的某个可等待对象为协程,它将自动被作为任务调度。直接向 ``wait()`` 传入协程对象已弃用,因为这会导致 " +":ref:`令人迷惑的行为 `。" + +#: ../../library/asyncio-task.rst:560 +msgid "" +"``wait()`` schedules coroutines as Tasks automatically and later returns " +"those implicitly created Task objects in ``(done, pending)`` sets. " +"Therefore the following code won't work as expected::" +msgstr "" +"``wait()`` 会自动以任务的形式调度协程,之后将以 ``(done, pending)`` " +"集合形式返回显式创建的任务对象。因此以下代码并不会有预期的行为::" + +#: ../../library/asyncio-task.rst:573 +msgid "Here is how the above snippet can be fixed::" +msgstr "以上代码段的修正方法如下::" + +#: ../../library/asyncio-task.rst:586 +msgid "Passing coroutine objects to ``wait()`` directly is deprecated." +msgstr "直接向 ``wait()`` 传入协程对象的方式已弃用。" + +#: ../../library/asyncio-task.rst:592 +msgid "" +"Run :ref:`awaitable objects ` in the *aws* iterable " +"concurrently. Return an iterator of coroutines. Each coroutine returned can" +" be awaited to get the earliest next result from the iterable of the " +"remaining awaitables." +msgstr "" +"并发地运行 *aws* 可迭代对象中的 :ref:`可等待对象 `。 返回一个协程的迭代器。 " +"所返回的每个协程可被等待以从剩余的可等待对象的可迭代对象中获得最早的下一个结果。" + +#: ../../library/asyncio-task.rst:597 +msgid "" +"Raises :exc:`asyncio.TimeoutError` if the timeout occurs before all Futures " +"are done." +msgstr "如果在所有 Future 对象完成前发生超时则将引发 :exc:`asyncio.TimeoutError`。" + +#: ../../library/asyncio-task.rst:611 +msgid "Running in Threads" +msgstr "在线程中运行" + +#: ../../library/asyncio-task.rst:615 +msgid "Asynchronously run function *func* in a separate thread." +msgstr "在不同的线程中异步地运行函数 *func*。" + +#: ../../library/asyncio-task.rst:617 +msgid "" +"Any \\*args and \\*\\*kwargs supplied for this function are directly passed " +"to *func*. Also, the current :class:`contextvars.Context` is propagated, " +"allowing context variables from the event loop thread to be accessed in the " +"separate thread." +msgstr "" +"向此函数提供的任何 \\*args 和 \\*\\*kwargs 会被直接传给 *func*。 并且,当前 " +":class:`contextvars.Context` 会被传播,允许在不同的线程中访问来自事件循环的上下文变量。" + +#: ../../library/asyncio-task.rst:622 +msgid "" +"Return a coroutine that can be awaited to get the eventual result of *func*." +msgstr "返回一个可被等待以获取 *func* 的最终结果的协程。" + +#: ../../library/asyncio-task.rst:624 +msgid "" +"This coroutine function is primarily intended to be used for executing IO-" +"bound functions/methods that would otherwise block the event loop if they " +"were ran in the main thread. For example::" +msgstr "这个协程函数主要是用于执行在其他情况下会阻塞事件循环的 IO 密集型函数/方法。 例如::" + +#: ../../library/asyncio-task.rst:654 +msgid "" +"Directly calling `blocking_io()` in any coroutine would block the event loop" +" for its duration, resulting in an additional 1 second of run time. Instead," +" by using `asyncio.to_thread()`, we can run it in a separate thread without " +"blocking the event loop." +msgstr "" +"在任何协程中直接调用 `blocking_io()` 将会在调用期间阻塞事件循环,导致额外的 1 秒运行时间。 而通过改用 " +"`asyncio.to_thread()`,我们可以在不同的线程中运行它从而不会阻塞事件循环。" + +#: ../../library/asyncio-task.rst:661 +msgid "" +"Due to the :term:`GIL`, `asyncio.to_thread()` can typically only be used to " +"make IO-bound functions non-blocking. However, for extension modules that " +"release the GIL or alternative Python implementations that don't have one, " +"`asyncio.to_thread()` can also be used for CPU-bound functions." +msgstr "" +"由于 :term:`GIL` 的存在,`asyncio.to_thread()` 通常只能被用来将 IO 密集型函数变为非阻塞的。 但是,对于会释放 " +"GIL 的扩展模块或无此限制的替代性 Python 实现来说,`asyncio.to_thread()` 也可被用于 CPU 密集型函数。" + +#: ../../library/asyncio-task.rst:670 +msgid "Scheduling From Other Threads" +msgstr "跨线程调度" + +#: ../../library/asyncio-task.rst:674 +msgid "Submit a coroutine to the given event loop. Thread-safe." +msgstr "向指定事件循环提交一个协程。(线程安全)" + +#: ../../library/asyncio-task.rst:676 +msgid "" +"Return a :class:`concurrent.futures.Future` to wait for the result from " +"another OS thread." +msgstr "返回一个 :class:`concurrent.futures.Future` 以等待来自其他 OS 线程的结果。" + +#: ../../library/asyncio-task.rst:679 +msgid "" +"This function is meant to be called from a different OS thread than the one " +"where the event loop is running. Example::" +msgstr "此函数应该从另一个 OS 线程中调用,而非事件循环运行所在线程。示例::" + +#: ../../library/asyncio-task.rst:691 +msgid "" +"If an exception is raised in the coroutine, the returned Future will be " +"notified. It can also be used to cancel the task in the event loop::" +msgstr "如果在协程内产生了异常,将会通知返回的 Future 对象。它也可被用来取消事件循环中的任务::" + +#: ../../library/asyncio-task.rst:705 +msgid "" +"See the :ref:`concurrency and multithreading ` " +"section of the documentation." +msgstr "" +"参见 :ref:`concurrency and multithreading ` 部分的文档。" + +#: ../../library/asyncio-task.rst:708 +msgid "" +"Unlike other asyncio functions this function requires the *loop* argument to" +" be passed explicitly." +msgstr "不同于其他 asyncio 函数,此函数要求显式地传入 *loop* 参数。" + +#: ../../library/asyncio-task.rst:715 +msgid "Introspection" +msgstr "内省" + +#: ../../library/asyncio-task.rst:720 +msgid "" +"Return the currently running :class:`Task` instance, or ``None`` if no task " +"is running." +msgstr "返回当前运行的 :class:`Task` 实例,如果没有正在运行的任务则返回 ``None``。" + +#: ../../library/asyncio-task.rst:723 +msgid "" +"If *loop* is ``None`` :func:`get_running_loop` is used to get the current " +"loop." +msgstr "如果 *loop* 为 ``None`` 则会使用 :func:`get_running_loop` 获取当前事件循环。" + +#: ../../library/asyncio-task.rst:731 +msgid "" +"Return a set of not yet finished :class:`Task` objects run by the loop." +msgstr "返回事件循环所运行的未完成的 :class:`Task` 对象的集合。" + +#: ../../library/asyncio-task.rst:734 +msgid "" +"If *loop* is ``None``, :func:`get_running_loop` is used for getting current " +"loop." +msgstr "如果 *loop* 为 ``None``,则会使用 :func:`get_running_loop` 获取当前事件循环。" + +#: ../../library/asyncio-task.rst:741 +msgid "Task Object" +msgstr "Task 对象" + +#: ../../library/asyncio-task.rst:745 +msgid "" +"A :class:`Future-like ` object that runs a Python :ref:`coroutine " +"`. Not thread-safe." +msgstr "" +"一个与 :class:`Future 类似 ` 的对象,可运行 Python :ref:`协程 `。非线程安全。" + +#: ../../library/asyncio-task.rst:748 +msgid "" +"Tasks are used to run coroutines in event loops. If a coroutine awaits on a " +"Future, the Task suspends the execution of the coroutine and waits for the " +"completion of the Future. When the Future is *done*, the execution of the " +"wrapped coroutine resumes." +msgstr "" +"Task 对象被用来在事件循环中运行协程。如果一个协程在等待一个 Future 对象,Task 对象会挂起该协程的执行并等待该 Future " +"对象完成。当该 Future 对象 *完成*,被打包的协程将恢复执行。" + +#: ../../library/asyncio-task.rst:754 +msgid "" +"Event loops use cooperative scheduling: an event loop runs one Task at a " +"time. While a Task awaits for the completion of a Future, the event loop " +"runs other Tasks, callbacks, or performs IO operations." +msgstr "" +"事件循环使用协同日程调度: 一个事件循环每次运行一个 Task 对象。而一个 Task 对象会等待一个 Future 对象完成,该事件循环会运行其他 " +"Task、回调或执行 IO 操作。" + +#: ../../library/asyncio-task.rst:759 +msgid "" +"Use the high-level :func:`asyncio.create_task` function to create Tasks, or " +"the low-level :meth:`loop.create_task` or :func:`ensure_future` functions. " +"Manual instantiation of Tasks is discouraged." +msgstr "" +"使用高层级的 :func:`asyncio.create_task` 函数来创建 Task 对象,也可用低层级的 " +":meth:`loop.create_task` 或 :func:`ensure_future` 函数。不建议手动实例化 Task 对象。" + +#: ../../library/asyncio-task.rst:764 +msgid "" +"To cancel a running Task use the :meth:`cancel` method. Calling it will " +"cause the Task to throw a :exc:`CancelledError` exception into the wrapped " +"coroutine. If a coroutine is awaiting on a Future object during " +"cancellation, the Future object will be cancelled." +msgstr "" +"要取消一个正在运行的 Task 对象可使用 :meth:`cancel` 方法。调用此方法将使该 Task 对象抛出一个 " +":exc:`CancelledError` 异常给打包的协程。如果取消期间一个协程正在对 Future 对象执行 await,该 Future " +"对象也将被取消。" + +#: ../../library/asyncio-task.rst:769 +msgid "" +":meth:`cancelled` can be used to check if the Task was cancelled. The method" +" returns ``True`` if the wrapped coroutine did not suppress the " +":exc:`CancelledError` exception and was actually cancelled." +msgstr "" +":meth:`cancelled` 可被用来检测 Task 对象是否被取消。如果打包的协程没有抑制 :exc:`CancelledError` " +"异常并且确实被取消,该方法将返回 ``True``。" + +#: ../../library/asyncio-task.rst:774 +msgid "" +":class:`asyncio.Task` inherits from :class:`Future` all of its APIs except " +":meth:`Future.set_result` and :meth:`Future.set_exception`." +msgstr "" +":class:`asyncio.Task` 从 :class:`Future` 继承了其除 :meth:`Future.set_result` 和 " +":meth:`Future.set_exception` 以外的所有 API。" + +#: ../../library/asyncio-task.rst:778 +msgid "" +"Tasks support the :mod:`contextvars` module. When a Task is created it " +"copies the current context and later runs its coroutine in the copied " +"context." +msgstr "" +"Task 对象支持 :mod:`contextvars` 模块。当一个 Task 对象被创建,它将复制当前上下文,然后在复制的上下文中运行其协程。" + +#: ../../library/asyncio-task.rst:782 +msgid "Added support for the :mod:`contextvars` module." +msgstr "加入对 :mod:`contextvars` 模块的支持。" + +#: ../../library/asyncio-task.rst:793 +msgid "Request the Task to be cancelled." +msgstr "请求取消 Task 对象。" + +#: ../../library/asyncio-task.rst:795 +msgid "" +"This arranges for a :exc:`CancelledError` exception to be thrown into the " +"wrapped coroutine on the next cycle of the event loop." +msgstr "这将安排在下一轮事件循环中抛出一个 :exc:`CancelledError` 异常给被封包的协程。" + +#: ../../library/asyncio-task.rst:798 +msgid "" +"The coroutine then has a chance to clean up or even deny the request by " +"suppressing the exception with a :keyword:`try` ... ... ``except " +"CancelledError`` ... :keyword:`finally` block. Therefore, unlike " +":meth:`Future.cancel`, :meth:`Task.cancel` does not guarantee that the Task " +"will be cancelled, although suppressing cancellation completely is not " +"common and is actively discouraged." +msgstr "" +"协程在之后有机会进行清理甚至使用 :keyword:`try` ... ... ``except CancelledError`` ... " +":keyword:`finally` 代码块抑制异常来拒绝请求。不同于 " +":meth:`Future.cancel`,:meth:`Task.cancel` 不保证 Task " +"会被取消,虽然抑制完全取消并不常见,也很不鼓励这样做。" + +#: ../../library/asyncio-task.rst:806 +msgid "Added the ``msg`` parameter." +msgstr "增加了 ``msg`` 形参。" + +#: ../../library/asyncio-task.rst:811 +msgid "" +"The following example illustrates how coroutines can intercept the " +"cancellation request::" +msgstr "以下示例演示了协程是如何侦听取消请求的::" + +#: ../../library/asyncio-task.rst:850 +msgid "Return ``True`` if the Task is *cancelled*." +msgstr "如果 Task 对象 *被取消* 则返回 ``True``。" + +#: ../../library/asyncio-task.rst:852 +msgid "" +"The Task is *cancelled* when the cancellation was requested with " +":meth:`cancel` and the wrapped coroutine propagated the " +":exc:`CancelledError` exception thrown into it." +msgstr "" +"当使用 :meth:`cancel` 发出取消请求时 Task 会被 *取消*,其封包的协程将传播被抛入的 :exc:`CancelledError` " +"异常。" + +#: ../../library/asyncio-task.rst:858 +msgid "Return ``True`` if the Task is *done*." +msgstr "如果 Task 对象 *已完成* 则返回 ``True``。" + +#: ../../library/asyncio-task.rst:860 +msgid "" +"A Task is *done* when the wrapped coroutine either returned a value, raised " +"an exception, or the Task was cancelled." +msgstr "当 Task 所封包的协程返回一个值、引发一个异常或 Task 本身被取消时,则会被认为 *已完成*。" + +#: ../../library/asyncio-task.rst:865 +msgid "Return the result of the Task." +msgstr "返回 Task 的结果。" + +#: ../../library/asyncio-task.rst:867 +msgid "" +"If the Task is *done*, the result of the wrapped coroutine is returned (or " +"if the coroutine raised an exception, that exception is re-raised.)" +msgstr "如果 Task 对象 *已完成*,其封包的协程的结果会被返回 (或者当协程引发异常时,该异常会被重新引发。)" + +#: ../../library/asyncio-task.rst:871 ../../library/asyncio-task.rst:885 +msgid "" +"If the Task has been *cancelled*, this method raises a :exc:`CancelledError`" +" exception." +msgstr "如果 Task 对象 *被取消*,此方法会引发一个 :exc:`CancelledError` 异常。" + +#: ../../library/asyncio-task.rst:874 +msgid "" +"If the Task's result isn't yet available, this method raises a " +":exc:`InvalidStateError` exception." +msgstr "如果 Task 对象的结果还不可用,此方法会引发一个 :exc:`InvalidStateError` 异常。" + +#: ../../library/asyncio-task.rst:879 +msgid "Return the exception of the Task." +msgstr "返回 Task 对象的异常。" + +#: ../../library/asyncio-task.rst:881 +msgid "" +"If the wrapped coroutine raised an exception that exception is returned. If" +" the wrapped coroutine returned normally this method returns ``None``." +msgstr "如果所封包的协程引发了一个异常,该异常将被返回。如果所封包的协程正常返回则该方法将返回 ``None``。" + +#: ../../library/asyncio-task.rst:888 +msgid "" +"If the Task isn't *done* yet, this method raises an :exc:`InvalidStateError`" +" exception." +msgstr "如果 Task 对象尚未 *完成*,此方法将引发一个 :exc:`InvalidStateError` 异常。" + +#: ../../library/asyncio-task.rst:893 +msgid "Add a callback to be run when the Task is *done*." +msgstr "添加一个回调,将在 Task 对象 *完成* 时被运行。" + +#: ../../library/asyncio-task.rst:895 ../../library/asyncio-task.rst:904 +msgid "This method should only be used in low-level callback-based code." +msgstr "此方法应该仅在低层级的基于回调的代码中使用。" + +#: ../../library/asyncio-task.rst:897 +msgid "" +"See the documentation of :meth:`Future.add_done_callback` for more details." +msgstr "要了解更多细节请查看 :meth:`Future.add_done_callback` 的文档。" + +#: ../../library/asyncio-task.rst:902 +msgid "Remove *callback* from the callbacks list." +msgstr "从回调列表中移除 *callback* 。" + +#: ../../library/asyncio-task.rst:906 +msgid "" +"See the documentation of :meth:`Future.remove_done_callback` for more " +"details." +msgstr "要了解更多细节请查看 :meth:`Future.remove_done_callback` 的文档。" + +#: ../../library/asyncio-task.rst:911 +msgid "Return the list of stack frames for this Task." +msgstr "返回此 Task 对象的栈框架列表。" + +#: ../../library/asyncio-task.rst:913 +msgid "" +"If the wrapped coroutine is not done, this returns the stack where it is " +"suspended. If the coroutine has completed successfully or was cancelled, " +"this returns an empty list. If the coroutine was terminated by an exception," +" this returns the list of traceback frames." +msgstr "" +"如果所封包的协程未完成,这将返回其挂起所在的栈。如果协程已成功完成或被取消,这将返回一个空列表。如果协程被一个异常终止,这将返回回溯框架列表。" + +#: ../../library/asyncio-task.rst:919 +msgid "The frames are always ordered from oldest to newest." +msgstr "框架总是从按从旧到新排序。" + +#: ../../library/asyncio-task.rst:921 +msgid "Only one stack frame is returned for a suspended coroutine." +msgstr "每个被挂起的协程只返回一个栈框架。" + +#: ../../library/asyncio-task.rst:923 +msgid "" +"The optional *limit* argument sets the maximum number of frames to return; " +"by default all available frames are returned. The ordering of the returned " +"list differs depending on whether a stack or a traceback is returned: the " +"newest frames of a stack are returned, but the oldest frames of a traceback " +"are returned. (This matches the behavior of the traceback module.)" +msgstr "" +"可选的 *limit* " +"参数指定返回框架的数量上限;默认返回所有框架。返回列表的顺序要看是返回一个栈还是一个回溯:栈返回最新的框架,回溯返回最旧的框架。(这与 " +"traceback 模块的行为保持一致。)" + +#: ../../library/asyncio-task.rst:932 +msgid "Print the stack or traceback for this Task." +msgstr "打印此 Task 对象的栈或回溯。" + +#: ../../library/asyncio-task.rst:934 +msgid "" +"This produces output similar to that of the traceback module for the frames " +"retrieved by :meth:`get_stack`." +msgstr "此方法产生的输出类似于 traceback 模块通过 :meth:`get_stack` 所获取的框架。" + +#: ../../library/asyncio-task.rst:937 +msgid "The *limit* argument is passed to :meth:`get_stack` directly." +msgstr "*limit* 参数会直接传递给 :meth:`get_stack`。" + +#: ../../library/asyncio-task.rst:939 +msgid "" +"The *file* argument is an I/O stream to which the output is written; by " +"default output is written to :data:`sys.stderr`." +msgstr "*file* 参数是输出所写入的 I/O 流;默认情况下输出会写入 :data:`sys.stderr`。" + +#: ../../library/asyncio-task.rst:944 +msgid "Return the coroutine object wrapped by the :class:`Task`." +msgstr "返回由 :class:`Task` 包装的协程对象。" + +#: ../../library/asyncio-task.rst:950 +msgid "Return the name of the Task." +msgstr "返回 Task 的名称。" + +#: ../../library/asyncio-task.rst:952 +msgid "" +"If no name has been explicitly assigned to the Task, the default asyncio " +"Task implementation generates a default name during instantiation." +msgstr "如果没有一个 Task 名称被显式地赋值,默认的 asyncio Task 实现会在实例化期间生成一个默认名称。" + +#: ../../library/asyncio-task.rst:960 +msgid "Set the name of the Task." +msgstr "设置 Task 的名称。" + +#: ../../library/asyncio-task.rst:962 +msgid "" +"The *value* argument can be any object, which is then converted to a string." +msgstr "*value* 参数可以为任意对象,它随后会被转换为字符串。" + +#: ../../library/asyncio-task.rst:965 +msgid "" +"In the default Task implementation, the name will be visible in the " +":func:`repr` output of a task object." +msgstr "在默认的 Task 实现中,名称将在任务对象的 :func:`repr` 输出中可见。" + +#: ../../library/asyncio-task.rst:974 +msgid "Generator-based Coroutines" +msgstr "基于生成器的协程" + +#: ../../library/asyncio-task.rst:978 +msgid "" +"Support for generator-based coroutines is **deprecated** and is removed in " +"Python 3.11." +msgstr "对基于生成器的协程的支持已被 **弃用** 并将在 Python 3.11 中被移除。" + +#: ../../library/asyncio-task.rst:981 +msgid "" +"Generator-based coroutines predate async/await syntax. They are Python " +"generators that use ``yield from`` expressions to await on Futures and other" +" coroutines." +msgstr "" +"基于生成器的协程是 async/await 语法的前身。它们是使用 ``yield from`` 语句创建的 Python 生成器,可以等待 " +"Future 和其他协程。" + +#: ../../library/asyncio-task.rst:985 +msgid "" +"Generator-based coroutines should be decorated with " +":func:`@asyncio.coroutine `, although this is not " +"enforced." +msgstr "" +"基于生成器的协程应该使用 :func:`@asyncio.coroutine ` 装饰,虽然这并非强制。" + +#: ../../library/asyncio-task.rst:992 +msgid "Decorator to mark generator-based coroutines." +msgstr "用来标记基于生成器的协程的装饰器。" + +#: ../../library/asyncio-task.rst:994 +msgid "" +"This decorator enables legacy generator-based coroutines to be compatible " +"with async/await code::" +msgstr "此装饰器使得旧式的基于生成器的协程能与 async/await 代码相兼容::" + +#: ../../library/asyncio-task.rst:1004 +msgid "This decorator should not be used for :keyword:`async def` coroutines." +msgstr "此装饰器不应该被用于 :keyword:`async def` 协程。" + +#: ../../library/asyncio-task.rst:1009 +msgid "Use :keyword:`async def` instead." +msgstr "请改用 :keyword:`async def`。" + +#: ../../library/asyncio-task.rst:1013 +msgid "Return ``True`` if *obj* is a :ref:`coroutine object `." +msgstr "如果 *obj* 是一个 :ref:`协程对象 ` 则返回 ``True``。" + +#: ../../library/asyncio-task.rst:1015 +msgid "" +"This method is different from :func:`inspect.iscoroutine` because it returns" +" ``True`` for generator-based coroutines." +msgstr "此方法不同于 :func:`inspect.iscoroutine` 因为它对基于生成器的协程返回 ``True``。" + +#: ../../library/asyncio-task.rst:1020 +msgid "Return ``True`` if *func* is a :ref:`coroutine function `." +msgstr "如果 *func* 是一个 :ref:`协程函数 ` 则返回 ``True``。" + +#: ../../library/asyncio-task.rst:1023 +msgid "" +"This method is different from :func:`inspect.iscoroutinefunction` because it" +" returns ``True`` for generator-based coroutine functions decorated with " +":func:`@coroutine `." +msgstr "" +"此方法不同于 :func:`inspect.iscoroutinefunction` 因为它对以 :func:`@coroutine " +"` 装饰的基于生成器的协程函数返回 ``True``。" diff --git a/library/asyncio.po b/library/asyncio.po new file mode 100644 index 000000000..058fe0df6 --- /dev/null +++ b/library/asyncio.po @@ -0,0 +1,143 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) 2001-2024, Python Software Foundation +# This file is distributed under the same license as the Python package. +# FIRST AUTHOR , YEAR. +# +# Translators: +# Freesand Leo , 2024 +# Rafael Fontenelle , 2024 +# +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: Python 3.9\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2024-08-30 16:51+0000\n" +"PO-Revision-Date: 2017-02-16 17:49+0000\n" +"Last-Translator: Rafael Fontenelle , 2024\n" +"Language-Team: Chinese (China) (https://app.transifex.com/python-doc/teams/5390/zh_CN/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: zh_CN\n" +"Plural-Forms: nplurals=1; plural=0;\n" + +#: ../../library/asyncio.rst:85 ../../library/asyncio.rst:85 +msgid "High-level APIs" +msgstr "高层级 API" + +#: ../../library/asyncio.rst:96 ../../library/asyncio.rst:96 +msgid "Low-level APIs" +msgstr "低层级 API" + +#: ../../library/asyncio.rst:106 ../../library/asyncio.rst:106 +msgid "Guides and Tutorials" +msgstr "指南与教程" + +#: ../../library/asyncio.rst:2 +msgid ":mod:`asyncio` --- Asynchronous I/O" +msgstr ":mod:`asyncio` --- 异步 I/O" + +#: ../../library/asyncio.rstNone +msgid "Hello World!" +msgstr "Hello World!" + +#: ../../library/asyncio.rst:22 +msgid "" +"asyncio is a library to write **concurrent** code using the **async/await** " +"syntax." +msgstr "asyncio 是用来编写 **并发** 代码的库,使用 **async/await** 语法。" + +#: ../../library/asyncio.rst:25 +msgid "" +"asyncio is used as a foundation for multiple Python asynchronous frameworks " +"that provide high-performance network and web-servers, database connection " +"libraries, distributed task queues, etc." +msgstr "asyncio 被用作多个提供高性能 Python 异步框架的基础,包括网络和网站服务,数据库连接库,分布式任务队列等等。" + +#: ../../library/asyncio.rst:29 +msgid "" +"asyncio is often a perfect fit for IO-bound and high-level **structured** " +"network code." +msgstr "asyncio 往往是构建 IO 密集型和高层级 **结构化** 网络代码的最佳选择。" + +#: ../../library/asyncio.rst:32 +msgid "asyncio provides a set of **high-level** APIs to:" +msgstr "asyncio 提供一组 **高层级** API 用于:" + +#: ../../library/asyncio.rst:34 +msgid "" +":ref:`run Python coroutines ` concurrently and have full control " +"over their execution;" +msgstr "并发地 :ref:`运行 Python 协程 ` 并对其执行过程实现完全控制;" + +#: ../../library/asyncio.rst:37 +msgid "perform :ref:`network IO and IPC `;" +msgstr "执行 :ref:`网络 IO 和 IPC `;" + +#: ../../library/asyncio.rst:39 +msgid "control :ref:`subprocesses `;" +msgstr "控制 :ref:`子进程 `;" + +#: ../../library/asyncio.rst:41 +msgid "distribute tasks via :ref:`queues `;" +msgstr "通过 :ref:`队列 ` 实现分布式任务;" + +#: ../../library/asyncio.rst:43 +msgid ":ref:`synchronize ` concurrent code;" +msgstr ":ref:`同步 ` 并发代码;" + +#: ../../library/asyncio.rst:45 +msgid "" +"Additionally, there are **low-level** APIs for *library and framework " +"developers* to:" +msgstr "此外,还有一些 **低层级** API 以支持 *库和框架的开发者* 实现:" + +#: ../../library/asyncio.rst:48 +msgid "" +"create and manage :ref:`event loops `, which provide " +"asynchronous APIs for :meth:`networking `, running " +":meth:`subprocesses `, handling :meth:`OS signals " +"`, etc;" +msgstr "" +"创建和管理 :ref:`事件循环 `,以提供异步 API 用于 :meth:`网络化 " +"`, 运行 :meth:`子进程 `,处理 :meth:`OS 信号" +" ` 等等;" + +#: ../../library/asyncio.rst:53 +msgid "" +"implement efficient protocols using :ref:`transports `;" +msgstr "使用 :ref:`transports ` 实现高效率协议;" + +#: ../../library/asyncio.rst:56 +msgid "" +":ref:`bridge ` callback-based libraries and code with " +"async/await syntax." +msgstr "通过 async/await 语法 :ref:`桥接 ` 基于回调的库和代码。" + +#: ../../library/asyncio.rst:62 +msgid "asyncio REPL" +msgstr "asyncio REPL" + +#: ../../library/asyncio.rst:63 +msgid "You can experiment with an ``asyncio`` concurrent context in the REPL:" +msgstr "你可以在 REPL 中尝试使用 ``asyncio`` 并发上下文:" + +#: ../../library/asyncio.rst:75 +msgid "" +"Raises an :ref:`auditing event ` ``cpython.run_stdin`` with no " +"arguments." +msgstr "引发一个不带参数的 :ref:`审计事件 ` ``cpython.run_stdin``。" + +#: ../../library/asyncio.rst:77 +msgid "(also 3.8.20) Emits audit events." +msgstr "" + +#: ../../library/asyncio.rst:84 +msgid "Reference" +msgstr "参考" + +#: ../../library/asyncio.rst:115 +msgid "The source code for asyncio can be found in :source:`Lib/asyncio/`." +msgstr "asyncio 的源代码可以在 :source:`Lib/asyncio/` 中找到。" diff --git a/library/asyncore.po b/library/asyncore.po new file mode 100644 index 000000000..cd2536f65 --- /dev/null +++ b/library/asyncore.po @@ -0,0 +1,423 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) 2001-2024, Python Software Foundation +# This file is distributed under the same license as the Python package. +# FIRST AUTHOR , YEAR. +# +# Translators: +# Alpha Du , 2019 +# Freesand Leo , 2022 +# Rafael Fontenelle , 2024 +# +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: Python 3.9\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2024-04-19 21:47+0000\n" +"PO-Revision-Date: 2017-02-16 17:50+0000\n" +"Last-Translator: Rafael Fontenelle , 2024\n" +"Language-Team: Chinese (China) (https://app.transifex.com/python-doc/teams/5390/zh_CN/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: zh_CN\n" +"Plural-Forms: nplurals=1; plural=0;\n" + +#: ../../library/asyncore.rst:2 +msgid ":mod:`asyncore` --- Asynchronous socket handler" +msgstr ":mod:`asyncore` --- 异步套接字处理器" + +#: ../../library/asyncore.rst:14 +msgid "**Source code:** :source:`Lib/asyncore.py`" +msgstr "**源码:** :source:`Lib/asyncore.py`" + +#: ../../library/asyncore.rst:16 +msgid "" +":mod:`asyncore` will be removed in Python 3.12 (see :pep:`PEP 594 " +"<594#asyncore>` for details). Please use :mod:`asyncio` instead." +msgstr "" +":mod:`asyncore` 将在 Python 3.12 版被移除(请参阅 :pep:`PEP 594 <594#asyncore>` 了解详情)。" +" 请改用 :mod:`asyncio`。" + +#: ../../library/asyncore.rst:25 +msgid "" +"This module exists for backwards compatibility only. For new code we " +"recommend using :mod:`asyncio`." +msgstr "该模块仅为提供向后兼容。我们推荐在新代码中使用 :mod:`asyncio` 。" + +#: ../../library/asyncore.rst:28 +msgid "" +"This module provides the basic infrastructure for writing asynchronous " +"socket service clients and servers." +msgstr "该模块提供用于编写异步套接字服务客户端与服务端的基础构件。" + +#: ../../library/asyncore.rst:31 +msgid "" +"There are only two ways to have a program on a single processor do \"more " +"than one thing at a time.\" Multi-threaded programming is the simplest and " +"most popular way to do it, but there is another very different technique, " +"that lets you have nearly all the advantages of multi-threading, without " +"actually using multiple threads. It's really only practical if your " +"program is largely I/O bound. If your program is processor bound, then pre-" +"emptive scheduled threads are probably what you really need. Network " +"servers are rarely processor bound, however." +msgstr "" +"只有两种方法让单个处理器上的程序“同一时间完成不止一件事”。 " +"多线程编程是最简单和最流行的方法,但是还有另一种非常不同的技术,它可以让你拥有多线程的几乎所有优点,而无需实际使用多线程。 它仅仅在你的程序主要受 " +"I/O 限制时有用,那么。 如果你的程序受处理器限制,那么先发制人的预定线程可能就是你真正需要的。 但是,网络服务器很少受处理器限制。" + +#: ../../library/asyncore.rst:40 +msgid "" +"If your operating system supports the :c:func:`select` system call in its " +"I/O library (and nearly all do), then you can use it to juggle multiple " +"communication channels at once; doing other work while your I/O is taking " +"place in the \"background.\" Although this strategy can seem strange and " +"complex, especially at first, it is in many ways easier to understand and " +"control than multi-threaded programming. The :mod:`asyncore` module solves " +"many of the difficult problems for you, making the task of building " +"sophisticated high-performance network servers and clients a snap. For " +"\"conversational\" applications and protocols the companion :mod:`asynchat` " +"module is invaluable." +msgstr "" +"如果你的操作系统在其 I/O 库中支持 :c:func:`select` 系统调用(几乎所有操作系统),那么你可以使用它来同时处理多个通信通道;在 " +"I/O 正在“后台”时进行其他工作。 虽然这种策略看起来很奇怪和复杂,特别是起初,它在很多方面比多线程编程更容易理解和控制。 " +":mod:`asyncore` 模块为您解决了许多难题,使得构建复杂的高性能网络服务器和客户端的任务变得轻而易举。 对于“会话”应用程序和协议,伴侣 " +":mod:`asynchat` 模块是非常宝贵的。" + +#: ../../library/asyncore.rst:51 +msgid "" +"The basic idea behind both modules is to create one or more network " +"*channels*, instances of class :class:`asyncore.dispatcher` and " +":class:`asynchat.async_chat`. Creating the channels adds them to a global " +"map, used by the :func:`loop` function if you do not provide it with your " +"own *map*." +msgstr "" +"这两个模块背后的基本思想是创建一个或多个网络 *通道* ,类的实例 :class:`asyncore.dispatcher` 和 " +":class:`asynchat.async_chat` 。 创建通道会将它们添加到全局映射中,如果你不为它提供自己的 *映射* ,则由 " +":func:`loop` 函数使用。" + +#: ../../library/asyncore.rst:57 +msgid "" +"Once the initial channel(s) is(are) created, calling the :func:`loop` " +"function activates channel service, which continues until the last channel " +"(including any that have been added to the map during asynchronous service) " +"is closed." +msgstr "" +"一旦创建了初始通道,调用 :func:`loop` " +"函数将激活通道服务,该服务将一直持续到最后一个通道(包括在异步服务期间已添加到映射中的任何通道)关闭。" + +#: ../../library/asyncore.rst:64 +msgid "" +"Enter a polling loop that terminates after count passes or all open channels" +" have been closed. All arguments are optional. The *count* parameter " +"defaults to ``None``, resulting in the loop terminating only when all " +"channels have been closed. The *timeout* argument sets the timeout " +"parameter for the appropriate :func:`~select.select` or :func:`~select.poll`" +" call, measured in seconds; the default is 30 seconds. The *use_poll* " +"parameter, if true, indicates that :func:`~select.poll` should be used in " +"preference to :func:`~select.select` (the default is ``False``)." +msgstr "" +"进入一个轮询循环,其在循环计数超出或所有打开的通道关闭后终止。 所有参数都是可选的。 *count* 形参默认为 ``None`` " +",导致循环仅在所有通道关闭时终止。 *timeout* 形参为适当的 :func:`~select.select` 或 " +":func:`~select.poll` 调用设置超时参数,以秒为单位; 默认值为30秒。 *use_poll* 形参,如果为 True ,则表示 " +":func:`~select.poll` 应优先使用 :func:`~select.select` (默认为 ``False``)。" + +#: ../../library/asyncore.rst:73 +msgid "" +"The *map* parameter is a dictionary whose items are the channels to watch. " +"As channels are closed they are deleted from their map. If *map* is " +"omitted, a global map is used. Channels (instances of " +":class:`asyncore.dispatcher`, :class:`asynchat.async_chat` and subclasses " +"thereof) can freely be mixed in the map." +msgstr "" +"*map* 形参是一个条目为所监视通道的字典。 当通道关闭时它们会被从映射中删除。 如果省略 *map*,则会使用一个全局映射。 通道 " +"(:class:`asyncore.dispatcher`, :class:`asynchat.async_chat` 及其子类的实例) " +"可以在映射中任意混合。" + +#: ../../library/asyncore.rst:82 +msgid "" +"The :class:`dispatcher` class is a thin wrapper around a low-level socket " +"object. To make it more useful, it has a few methods for event-handling " +"which are called from the asynchronous loop. Otherwise, it can be treated " +"as a normal non-blocking socket object." +msgstr "" +":class:`dispatcher` 类是对低层级套接字对象的轻量包装器。 要让它更有用处,可以从异步循环调用一些事件处理方法。 " +"在其他方面,它可以被当作是普通的非阻塞型套接字对象。" + +#: ../../library/asyncore.rst:87 +msgid "" +"The firing of low-level events at certain times or in certain connection " +"states tells the asynchronous loop that certain higher-level events have " +"taken place. For example, if we have asked for a socket to connect to " +"another host, we know that the connection has been made when the socket " +"becomes writable for the first time (at this point you know that you may " +"write to it with the expectation of success). The implied higher-level " +"events are:" +msgstr "" +"在特定时间或特定连接状态下触发的低层级事件可通知异步循环发生了特定的高层级事件。 " +"例如,如果我们请求了一个套接字以连接到另一台主机,我们会在套接字首次变得可写时得知连接已建立(在此刻你将知道可以向其写入并预期能够成功)。 " +"包含的高层级事件有:" + +#: ../../library/asyncore.rst:96 +msgid "Event" +msgstr "事件" + +#: ../../library/asyncore.rst:96 +msgid "Description" +msgstr "描述" + +#: ../../library/asyncore.rst:98 +msgid "``handle_connect()``" +msgstr "``handle_connect()``" + +#: ../../library/asyncore.rst:98 +msgid "Implied by the first read or write event" +msgstr "由首个读取或写入事件引起" + +#: ../../library/asyncore.rst:101 +msgid "``handle_close()``" +msgstr "``handle_close()``" + +#: ../../library/asyncore.rst:101 +msgid "Implied by a read event with no data available" +msgstr "由不带可用数据的读取事件引起" + +#: ../../library/asyncore.rst:104 +msgid "``handle_accepted()``" +msgstr "``handle_accepted()``" + +#: ../../library/asyncore.rst:104 +msgid "Implied by a read event on a listening socket" +msgstr "由在监听套接字上的读取事件引起" + +#: ../../library/asyncore.rst:108 +msgid "" +"During asynchronous processing, each mapped channel's :meth:`readable` and " +":meth:`writable` methods are used to determine whether the channel's socket " +"should be added to the list of channels :c:func:`select`\\ ed or " +":c:func:`poll`\\ ed for read and write events." +msgstr "" +"在异步处理过程中,每个已映射通道的 :meth:`readable` 和 :meth:`writable` " +"方法会被用来确定是否要将通道的套接字添加到已执行 :c:func:`select` 或 :c:func:`poll` 用于读取和写入事件的通道列表中。" + +#: ../../library/asyncore.rst:113 +msgid "" +"Thus, the set of channel events is larger than the basic socket events. The" +" full set of methods that can be overridden in your subclass follows:" +msgstr "因此,通道事件的集合要大于基本套接字事件。 可以在你的子类中被重载的全部方法集合如下:" + +#: ../../library/asyncore.rst:119 +msgid "" +"Called when the asynchronous loop detects that a :meth:`read` call on the " +"channel's socket will succeed." +msgstr "当异步循环检测到通道的套接字上的 :meth:`read` 调用将要成功时会被调用。" + +#: ../../library/asyncore.rst:125 +msgid "" +"Called when the asynchronous loop detects that a writable socket can be " +"written. Often this method will implement the necessary buffering for " +"performance. For example::" +msgstr "当异步循环检测到一个可写套接字可以被写入时会被调用。 通常此方法将实现必要的缓冲机制以保证运行效率。 例如::" + +#: ../../library/asyncore.rst:136 +msgid "" +"Called when there is out of band (OOB) data for a socket connection. This " +"will almost never happen, as OOB is tenuously supported and rarely used." +msgstr "当一个套接字连接存在带外(OOB)数据时会被调用。 这几乎从来不会发生,因为 OOB 虽然受支持但很少被使用。" + +#: ../../library/asyncore.rst:142 +msgid "" +"Called when the active opener's socket actually makes a connection. Might " +"send a \"welcome\" banner, or initiate a protocol negotiation with the " +"remote endpoint, for example." +msgstr "当活动打开方的套接字实际建立连接时会被调用。 可能会发送一条“欢迎”消息,或者向远程端点发起协议协商等。" + +#: ../../library/asyncore.rst:149 +msgid "Called when the socket is closed." +msgstr "当套接字关闭时会被调用。" + +#: ../../library/asyncore.rst:154 +msgid "" +"Called when an exception is raised and not otherwise handled. The default " +"version prints a condensed traceback." +msgstr "当一个异常被引发并且未获得其他处理时会被调用。 默认版本将打印精简的回溯信息。" + +#: ../../library/asyncore.rst:160 +msgid "" +"Called on listening channels (passive openers) when a connection can be " +"established with a new remote endpoint that has issued a :meth:`connect` " +"call for the local endpoint. Deprecated in version 3.2; use " +":meth:`handle_accepted` instead." +msgstr "" +"当可以与发起对本地端点的 :meth:`connect` 调用的新远程端点建立连接时会在侦听通道(被动打开方)上被调用。 在 3.2 " +"版中已被弃用;请改用 :meth:`handle_accepted`。" + +#: ../../library/asyncore.rst:170 +msgid "" +"Called on listening channels (passive openers) when a connection has been " +"established with a new remote endpoint that has issued a :meth:`connect` " +"call for the local endpoint. *sock* is a *new* socket object usable to send" +" and receive data on the connection, and *addr* is the address bound to the " +"socket on the other end of the connection." +msgstr "" +"当与发起对本地端点的 :meth:`connect` 调用的新远程端点已建立连接时会在侦听通道(被动打开方)上被调用。 *sock* " +"是可被用于在连接上发送和接收数据的 *新建* 套接字对象,而 *addr* 是绑定到连接另一端的套接字的地址。" + +#: ../../library/asyncore.rst:181 +msgid "" +"Called each time around the asynchronous loop to determine whether a " +"channel's socket should be added to the list on which read events can occur." +" The default method simply returns ``True``, indicating that by default, " +"all channels will be interested in read events." +msgstr "" +"每次在异步循环之外被调用以确定是否应当将一个通道的套接字添加到可能在其上发生读取事件的列表中。 默认方法会简单地返回 " +"``True``,表示在默认情况下,所有通道都希望能读取事件。" + +#: ../../library/asyncore.rst:189 +msgid "" +"Called each time around the asynchronous loop to determine whether a " +"channel's socket should be added to the list on which write events can " +"occur. The default method simply returns ``True``, indicating that by " +"default, all channels will be interested in write events." +msgstr "" +"每次在异步循环之外被调用以确定是否应当将一个通道的套接字添加到可能在其上发生写入事件的列表中。 默认方法会简单地返回 " +"``True``,表示在默认情况下,所有通道都希望能写入事件。" + +#: ../../library/asyncore.rst:195 +msgid "" +"In addition, each channel delegates or extends many of the socket methods. " +"Most of these are nearly identical to their socket partners." +msgstr "此外,每个通道都委托或扩展了许多套接字方法。 它们大部分都与其套接字的对应方法几乎一样。" + +#: ../../library/asyncore.rst:201 +msgid "" +"This is identical to the creation of a normal socket, and will use the same " +"options for creation. Refer to the :mod:`socket` documentation for " +"information on creating sockets." +msgstr "这与普通套接字的创建相同,并会使用同样的创建选项。 请参阅 :mod:`socket` 文档了解有关创建套接字的信息。" + +#: ../../library/asyncore.rst:205 +msgid "*family* and *type* arguments can be omitted." +msgstr "*family* 和 *type* 参数可以被省略。" + +#: ../../library/asyncore.rst:211 +msgid "" +"As with the normal socket object, *address* is a tuple with the first " +"element the host to connect to, and the second the port number." +msgstr "与普通套接字对象一样,*address* 是一个元组,它的第一个元素是要连接的主机,第二个元素是端口号。" + +#: ../../library/asyncore.rst:217 +msgid "Send *data* to the remote end-point of the socket." +msgstr "将 *data* 发送到套接字的远程端点。" + +#: ../../library/asyncore.rst:222 +msgid "" +"Read at most *buffer_size* bytes from the socket's remote end-point. An " +"empty bytes object implies that the channel has been closed from the other " +"end." +msgstr "从套接字的远程端点读取至多 *buffer_size* 个字节。 读到空字节串表明通道已从另一端被关闭。" + +#: ../../library/asyncore.rst:226 +msgid "" +"Note that :meth:`recv` may raise :exc:`BlockingIOError` , even though " +":func:`select.select` or :func:`select.poll` has reported the socket ready " +"for reading." +msgstr "" +"请注意 :meth:`recv` 可能会引发 :exc:`BlockingIOError`,即使 :func:`select.select` 或 " +":func:`select.poll` 报告套接字已准备好被读取。" + +#: ../../library/asyncore.rst:233 +msgid "" +"Listen for connections made to the socket. The *backlog* argument specifies" +" the maximum number of queued connections and should be at least 1; the " +"maximum value is system-dependent (usually 5)." +msgstr "侦听与套接字的连接。 *backlog* 参数指明排入连接队列的最大数量且至少应为 1;最大值取决于具体系统(通常为 5)。" + +#: ../../library/asyncore.rst:240 +msgid "" +"Bind the socket to *address*. The socket must not already be bound. (The " +"format of *address* depends on the address family --- refer to the " +":mod:`socket` documentation for more information.) To mark the socket as " +"re-usable (setting the :const:`SO_REUSEADDR` option), call the " +":class:`dispatcher` object's :meth:`set_reuse_addr` method." +msgstr "" +"将套接字绑定到 *address*。 套接字必须尚未被绑定。 (*address* 的格式取决于具体的地址族 --- 请参阅 " +":mod:`socket` 文档了解更多信息。) 要将套接字标记为可重用的 (设置 :const:`SO_REUSEADDR` 选项),请调用 " +":class:`dispatcher` 对象的 :meth:`set_reuse_addr` 方法。" + +#: ../../library/asyncore.rst:249 +msgid "" +"Accept a connection. The socket must be bound to an address and listening " +"for connections. The return value can be either ``None`` or a pair ``(conn," +" address)`` where *conn* is a *new* socket object usable to send and receive" +" data on the connection, and *address* is the address bound to the socket on" +" the other end of the connection. When ``None`` is returned it means the " +"connection didn't take place, in which case the server should just ignore " +"this event and keep listening for further incoming connections." +msgstr "" +"接受一个连接。 此套接字必须绑定到一个地址上并且侦听连接。 返回值可以是 ``None`` 或一个 ``(conn, address)`` 对,其中 " +"*conn* 是一个可用来在此连接上发送和接收数据的 *新的* 套接字对象,而 *address* 是绑定到连接另一端套接字的地址。 当返回 " +"``None`` 时意味着连接没有建立,在此情况下服务器应当忽略此事件并继续侦听后续的入站连接。" + +#: ../../library/asyncore.rst:261 +msgid "" +"Close the socket. All future operations on the socket object will fail. The" +" remote end-point will receive no more data (after queued data is flushed)." +" Sockets are automatically closed when they are garbage-collected." +msgstr "" +"关闭套接字。 在此套接字对象上的后续操作都将失败。 远程端点将不再接收任何数据(在排入队列的数据被清空之后)。 当套接字被垃圾回收时会自动关闭。" + +#: ../../library/asyncore.rst:269 +msgid "" +"A :class:`dispatcher` subclass which adds simple buffered output capability," +" useful for simple clients. For more sophisticated usage use " +":class:`asynchat.async_chat`." +msgstr "" +":class:`dispatcher` 的一个添加了简单缓冲输出功能的子类,适用于简单客户端。 对于更复杂的用法请使用 " +":class:`asynchat.async_chat`。" + +#: ../../library/asyncore.rst:275 +msgid "" +"A file_dispatcher takes a file descriptor or :term:`file object` along with " +"an optional map argument and wraps it for use with the :c:func:`poll` or " +":c:func:`loop` functions. If provided a file object or anything with a " +":c:func:`fileno` method, that method will be called and passed to the " +":class:`file_wrapper` constructor." +msgstr "" +"file_dispatcher 接受一个文件描述符或 :term:`file object` 以及一个可选的 map 参数,并对其进行包装以配合 " +":c:func:`poll` 或 :c:func:`loop` 函数使用。 如果提供一个文件对象或任何具有 :c:func:`fileno` " +"方法的对象,其方法将被调用并传递给 :class:`file_wrapper` 构造器。" + +#: ../../library/asyncore.rst:281 ../../library/asyncore.rst:290 +msgid ":ref:`Availability `: Unix." +msgstr ":ref:`可用性 `: Unix。" + +#: ../../library/asyncore.rst:285 +msgid "" +"A file_wrapper takes an integer file descriptor and calls :func:`os.dup` to " +"duplicate the handle so that the original handle may be closed independently" +" of the file_wrapper. This class implements sufficient methods to emulate a" +" socket for use by the :class:`file_dispatcher` class." +msgstr "" +"file_wrapper 接受一个整数形式的文件描述符并调用 :func:`os.dup` 来复制其句柄,以便原始句柄可以独立于 " +"file_wrapper 被关闭。 这个类实现了足够的方法来模拟套接字以供 :class:`file_dispatcher` 类使用。" + +#: ../../library/asyncore.rst:296 +msgid "asyncore Example basic HTTP client" +msgstr "asyncore 示例基本 HTTP 客户端" + +#: ../../library/asyncore.rst:298 +msgid "" +"Here is a very basic HTTP client that uses the :class:`dispatcher` class to " +"implement its socket handling::" +msgstr "下面是一个非常基本的 HTTP 客户端,它使用了 :class:`dispatcher` 类来实现套接字处理::" + +#: ../../library/asyncore.rst:335 +msgid "asyncore Example basic echo server" +msgstr "asyncore 示例基本回显服务器" + +#: ../../library/asyncore.rst:337 +msgid "" +"Here is a basic echo server that uses the :class:`dispatcher` class to " +"accept connections and dispatches the incoming connections to a handler::" +msgstr "下面是一个基本的回显服务器,它使用了 :class:`dispatcher` 类来接受连接并将入站连接发送给处理程序::" diff --git a/library/atexit.po b/library/atexit.po new file mode 100644 index 000000000..b1b8e24f2 --- /dev/null +++ b/library/atexit.po @@ -0,0 +1,143 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) 2001-2024, Python Software Foundation +# This file is distributed under the same license as the Python package. +# FIRST AUTHOR , YEAR. +# +# Translators: +# cissoid , 2018 +# Kade For, 2019 +# Freesand Leo , 2024 +# +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: Python 3.9\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2024-04-26 21:29+0000\n" +"PO-Revision-Date: 2017-02-16 17:50+0000\n" +"Last-Translator: Freesand Leo , 2024\n" +"Language-Team: Chinese (China) (https://app.transifex.com/python-doc/teams/5390/zh_CN/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: zh_CN\n" +"Plural-Forms: nplurals=1; plural=0;\n" + +#: ../../library/atexit.rst:2 +msgid ":mod:`atexit` --- Exit handlers" +msgstr ":mod:`atexit` --- 退出处理器" + +#: ../../library/atexit.rst:12 +msgid "" +"The :mod:`atexit` module defines functions to register and unregister " +"cleanup functions. Functions thus registered are automatically executed " +"upon normal interpreter termination. :mod:`atexit` runs these functions in " +"the *reverse* order in which they were registered; if you register ``A``, " +"``B``, and ``C``, at interpreter termination time they will be run in the " +"order ``C``, ``B``, ``A``." +msgstr "" +":mod:`atexit` 模块定义了清理函数的注册和反注册函数. 被注册的函数会在解释器正常终止时执行. :mod:`atexit` " +"会按照注册顺序的*逆序*执行; 如果你注册了 ``A``, ``B`` 和 ``C``, 那么在解释器终止时会依序执行 ``C``, ``B``, " +"``A``." + +#: ../../library/atexit.rst:19 +msgid "" +"**Note:** The functions registered via this module are not called when the " +"program is killed by a signal not handled by Python, when a Python fatal " +"internal error is detected, or when :func:`os._exit` is called." +msgstr "" +"**注意:** 通过该模块注册的函数, 在程序被未被 Python 捕获的信号杀死时并不会执行, 在检测到 Python 内部致命错误以及调用了 " +":func:`os._exit` 时也不会执行." + +#: ../../library/atexit.rst:23 +msgid "" +"When used with C-API subinterpreters, registered functions are local to the " +"interpreter they were registered in." +msgstr "当配合 C-API 子解释器使用时,已注册函数是它们所注册解释器中的局部对象。" + +#: ../../library/atexit.rst:29 +msgid "" +"Register *func* as a function to be executed at termination. Any optional " +"arguments that are to be passed to *func* must be passed as arguments to " +":func:`register`. It is possible to register the same function and " +"arguments more than once." +msgstr "" +"将 *func* 注册为终止时执行的函数. 任何传给 *func* 的可选的参数都应当作为参数传给 :func:`register`. " +"可以多次注册同样的函数及参数." + +#: ../../library/atexit.rst:34 +msgid "" +"At normal program termination (for instance, if :func:`sys.exit` is called " +"or the main module's execution completes), all functions registered are " +"called in last in, first out order. The assumption is that lower level " +"modules will normally be imported before higher level modules and thus must " +"be cleaned up later." +msgstr "" +"在正常的程序终止时 (举例来说, 当调用了 :func:`sys.exit` 或是主模块的执行完成时), 所有注册过的函数都会以后进先出的顺序执行. " +"这样做是假定更底层的模块通常会比高层模块更早引入, 因此需要更晚清理." + +#: ../../library/atexit.rst:40 +msgid "" +"If an exception is raised during execution of the exit handlers, a traceback" +" is printed (unless :exc:`SystemExit` is raised) and the exception " +"information is saved. After all exit handlers have had a chance to run, the" +" last exception to be raised is re-raised." +msgstr "" +"如果在 exit 处理器执行期间引发了异常,将会打印回溯信息 (除非引发的是 :exc:`SystemExit`) 并且异常信息会被保存。 在所有 " +"exit 处理器都获得运行机会之后,所引发的最后一个异常会被重新引发。" + +#: ../../library/atexit.rst:45 +msgid "" +"This function returns *func*, which makes it possible to use it as a " +"decorator." +msgstr "这个函数返回 *func* 对象,可以把它当作装饰器使用。" + +#: ../../library/atexit.rst:51 +msgid "" +"Remove *func* from the list of functions to be run at interpreter shutdown. " +":func:`unregister` silently does nothing if *func* was not previously " +"registered. If *func* has been registered more than once, every occurrence " +"of that function in the :mod:`atexit` call stack will be removed. Equality " +"comparisons (``==``) are used internally during unregistration, so function " +"references do not need to have matching identities." +msgstr "" +"将 *func* 移出当解释器关闭时要运行的函数列表。 如果 *func* 之前未被注册则 :func:`unregister` 将静默地不做任何事。 " +"如果 *func* 已被注册一次以上,则该函数每次在 :mod:`atexit` 调用栈中的出现都将被移除。 当取消注册时会在内部使用相等性比较 " +"(``==``),因而函数引用不需要具有匹配的标识号。" + +#: ../../library/atexit.rst:62 +msgid "Module :mod:`readline`" +msgstr "模块 :mod:`readline`" + +#: ../../library/atexit.rst:62 +msgid "" +"Useful example of :mod:`atexit` to read and write :mod:`readline` history " +"files." +msgstr "使用 :mod:`atexit` 读写 :mod:`readline` 历史文件的有用的例子。" + +#: ../../library/atexit.rst:69 +msgid ":mod:`atexit` Example" +msgstr ":mod:`atexit` 示例" + +#: ../../library/atexit.rst:71 +msgid "" +"The following simple example demonstrates how a module can initialize a " +"counter from a file when it is imported and save the counter's updated value" +" automatically when the program terminates without relying on the " +"application making an explicit call into this module at termination. ::" +msgstr "" +"以下简单例子演示了一个模块在被导入时如何从文件初始化一个计数器,并在程序终结时自动保存计数器的更新值,此操作不依赖于应用在终结时对此模块进行显式调用。::" + +#: ../../library/atexit.rst:94 +msgid "" +"Positional and keyword arguments may also be passed to :func:`register` to " +"be passed along to the registered function when it is called::" +msgstr "位置和关键字参数也可传入 :func:`register` 以便传递给被调用的已注册函数::" + +#: ../../library/atexit.rst:106 +msgid "Usage as a :term:`decorator`::" +msgstr "作为 :term:`decorator`: 使用:" + +#: ../../library/atexit.rst:114 +msgid "This only works with functions that can be called without arguments." +msgstr "只有在函数不需要任何参数调用时才能工作." diff --git a/library/audioop.po b/library/audioop.po new file mode 100644 index 000000000..e87b8a751 --- /dev/null +++ b/library/audioop.po @@ -0,0 +1,358 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) 2001-2022, Python Software Foundation +# This file is distributed under the same license as the Python package. +# FIRST AUTHOR , YEAR. +# +# Translators: +# Arisaka97 , 2020 +# Freesand Leo , 2022 +# +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: Python 3.9\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2022-11-04 14:34+0000\n" +"PO-Revision-Date: 2017-02-16 17:50+0000\n" +"Last-Translator: Freesand Leo , 2022\n" +"Language-Team: Chinese (China) (https://www.transifex.com/python-doc/teams/5390/zh_CN/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: zh_CN\n" +"Plural-Forms: nplurals=1; plural=0;\n" + +#: ../../library/audioop.rst:2 +msgid ":mod:`audioop` --- Manipulate raw audio data" +msgstr ":mod:`audioop` --- 处理原始音频数据" + +#: ../../library/audioop.rst:8 +msgid "" +"The :mod:`audioop` module is deprecated (see :pep:`PEP 594 <594#audioop>` " +"for details)." +msgstr ":mod:`audioop` 模块已被弃用(请参阅 :pep:`PEP 594 <594#audioop>` 了解详情)。" + +#: ../../library/audioop.rst:14 +msgid "" +"The :mod:`audioop` module contains some useful operations on sound " +"fragments. It operates on sound fragments consisting of signed integer " +"samples 8, 16, 24 or 32 bits wide, stored in :term:`bytes-like objects " +"`. All scalar items are integers, unless specified " +"otherwise." +msgstr "" +":mod:`audioop` 模块包含针对声音片段的一些有用操作。它操作的声音片段由 8、16、24 或 32 位宽的有符号整型采样值组成,存储在 " +":term:`类字节串对象 ` 中。除非特别说明,否则所有标量项目均为整数。" + +#: ../../library/audioop.rst:19 +msgid "" +"Support for 24-bit samples was added. All functions now accept any " +":term:`bytes-like object`. String input now results in an immediate error." +msgstr "" +"增加了对 24 位采样的支持。现在,所有函数都接受任何 :term:`类字节串对象 `。而传入字符串会立即导致错误。" + +#: ../../library/audioop.rst:30 +msgid "" +"This module provides support for a-LAW, u-LAW and Intel/DVI ADPCM encodings." +msgstr "本模块提供对 a-LAW、u-LAW 和 Intel/DVI ADPCM 编码的支持。" + +#: ../../library/audioop.rst:34 +msgid "" +"A few of the more complicated operations only take 16-bit samples, otherwise" +" the sample size (in bytes) is always a parameter of the operation." +msgstr "部分更复杂的操作仅接受 16 位采样,而其他操作始终需要采样大小(以字节为单位)作为该操作的参数。" + +#: ../../library/audioop.rst:37 +msgid "The module defines the following variables and functions:" +msgstr "此模块定义了下列变量和函数:" + +#: ../../library/audioop.rst:42 +msgid "" +"This exception is raised on all errors, such as unknown number of bytes per " +"sample, etc." +msgstr "所有错误都会抛出此异常,比如采样值的字节数未知等等。" + +#: ../../library/audioop.rst:48 +msgid "" +"Return a fragment which is the addition of the two samples passed as " +"parameters. *width* is the sample width in bytes, either ``1``, ``2``, ``3``" +" or ``4``. Both fragments should have the same length. Samples are " +"truncated in case of overflow." +msgstr "" +"两个采样作为参数传入,返回一个片段,该片段是两个采样的和。*width* 是采样位宽(以字节为单位),可以取 ``1``, ``2``, ``3`` 或" +" ``4``。两个片段的长度应相同。如果发生溢出,较长的采样将被截断。" + +#: ../../library/audioop.rst:55 +msgid "" +"Decode an Intel/DVI ADPCM coded fragment to a linear fragment. See the " +"description of :func:`lin2adpcm` for details on ADPCM coding. Return a tuple" +" ``(sample, newstate)`` where the sample has the width specified in *width*." +msgstr "" +"将 Intel/DVI ADPCM 编码的片段解码为线性片段。关于 ADPCM 编码的详情请参阅 :func:`lin2adpcm` " +"的描述。返回一个元组 ``(sample, newstate)``,其中 sample 的位宽由 *width* 指定。" + +#: ../../library/audioop.rst:62 +msgid "" +"Convert sound fragments in a-LAW encoding to linearly encoded sound " +"fragments. a-LAW encoding always uses 8 bits samples, so *width* refers only" +" to the sample width of the output fragment here." +msgstr "" +"将 a-LAW 编码的声音片段转换为线性编码声音片段。由于 a-LAW 编码采样值始终为 8 位,因此这里的 *width* 仅指输出片段的采样位宽。" + +#: ../../library/audioop.rst:69 +msgid "Return the average over all samples in the fragment." +msgstr "返回片段中所有采样值的平均值。" + +#: ../../library/audioop.rst:74 +msgid "" +"Return the average peak-peak value over all samples in the fragment. No " +"filtering is done, so the usefulness of this routine is questionable." +msgstr "返回片段中所有采样值的平均峰峰值。由于没有进行过滤,因此该例程的实用性尚存疑。" + +#: ../../library/audioop.rst:80 +msgid "" +"Return a fragment that is the original fragment with a bias added to each " +"sample. Samples wrap around in case of overflow." +msgstr "返回一个片段,该片段由原始片段中的每个采样值加上偏差组成。在溢出时采样值会回卷 (wrap around)。" + +#: ../../library/audioop.rst:86 +msgid "" +"\"Byteswap\" all samples in a fragment and returns the modified fragment. " +"Converts big-endian samples to little-endian and vice versa." +msgstr "“按字节交换”片段中的所有采样值,返回修改后的片段。将大端序采样转换为小端序采样,反之亦然。" + +#: ../../library/audioop.rst:94 +msgid "" +"Return the number of zero crossings in the fragment passed as an argument." +msgstr "将片段作为参数传入,返回其中过零点的数量。" + +#: ../../library/audioop.rst:99 +msgid "" +"Return a factor *F* such that ``rms(add(fragment, mul(reference, -F)))`` is " +"minimal, i.e., return the factor with which you should multiply *reference* " +"to make it match as well as possible to *fragment*. The fragments should " +"both contain 2-byte samples." +msgstr "" +"返回一个系数 *F* 使得 ``rms(add(fragment, mul(reference, -F)))`` 最小,即返回的系数乘以 " +"*reference* 后与 *fragment* 最匹配。两个片段都应包含 2 字节宽的采样。" + +#: ../../library/audioop.rst:104 +msgid "The time taken by this routine is proportional to ``len(fragment)``." +msgstr "本例程所需的时间与 ``len(fragment)`` 成正比。" + +#: ../../library/audioop.rst:109 +msgid "" +"Try to match *reference* as well as possible to a portion of *fragment* " +"(which should be the longer fragment). This is (conceptually) done by " +"taking slices out of *fragment*, using :func:`findfactor` to compute the " +"best match, and minimizing the result. The fragments should both contain " +"2-byte samples. Return a tuple ``(offset, factor)`` where *offset* is the " +"(integer) offset into *fragment* where the optimal match started and " +"*factor* is the (floating-point) factor as per :func:`findfactor`." +msgstr "" +"尽可能尝试让 *reference* 匹配 *fragment* 的一部分(*fragment* 应较长)。从概念上讲,完成这些靠从 " +"*fragment* 中取出切片,使用 :func:`findfactor` 计算最佳匹配,并最小化结果。两个片段都应包含 2 " +"字节宽的采样。返回一个元组 ``(offset, factor)``,其中 *offset* 是在 *fragment* " +"中的偏移量(整数),表示从此处开始最佳匹配,而 *factor* 是由 :func:`findfactor` 定义的因数(浮点数)。" + +#: ../../library/audioop.rst:120 +msgid "" +"Search *fragment* for a slice of length *length* samples (not bytes!) with " +"maximum energy, i.e., return *i* for which " +"``rms(fragment[i*2:(i+length)*2])`` is maximal. The fragments should both " +"contain 2-byte samples." +msgstr "" +"在 *fragment* 中搜索所有长度为 *length* 的采样切片(不是字节!)中,能量最大的那一个切片,即返回 *i* 使得 " +"``rms(fragment[i*2:(i+length)*2])`` 最大。两个片段都应包含 2 字节宽的采样。" + +#: ../../library/audioop.rst:124 +msgid "The routine takes time proportional to ``len(fragment)``." +msgstr "本例程所需的时间与 ``len(fragment)`` 成正比。" + +#: ../../library/audioop.rst:129 +msgid "Return the value of sample *index* from the fragment." +msgstr "返回片段中采样值索引 *index* 的值。" + +#: ../../library/audioop.rst:134 +msgid "" +"Convert samples to 4 bit Intel/DVI ADPCM encoding. ADPCM coding is an " +"adaptive coding scheme, whereby each 4 bit number is the difference between " +"one sample and the next, divided by a (varying) step. The Intel/DVI ADPCM " +"algorithm has been selected for use by the IMA, so it may well become a " +"standard." +msgstr "" +"将采样转换为 4 位 Intel/DVI ADPCM 编码。ADPCM 编码是一种自适应编码方案,其中每个 4 " +"比特数字是一个采样值与下一个采样值之间的差除以(不定的)步长。IMA 已选择使用 Intel/DVI ADPCM 算法,因此它很可能成为标准。" + +#: ../../library/audioop.rst:139 +msgid "" +"*state* is a tuple containing the state of the coder. The coder returns a " +"tuple ``(adpcmfrag, newstate)``, and the *newstate* should be passed to the " +"next call of :func:`lin2adpcm`. In the initial call, ``None`` can be passed" +" as the state. *adpcmfrag* is the ADPCM coded fragment packed 2 4-bit values" +" per byte." +msgstr "" +"*state* 是一个表示编码器状态的元组。编码器返回一个元组 ``(adpcmfrag, newstate)``,而 *newstate* " +"要在下一次调用 :func:`lin2adpcm` 时传入。在初始调用中,可以将 ``None`` 作为 state 传递。*adpcmfrag* 是 " +"ADPCM 编码的片段,每个字节打包了 2 个 4 比特值。" + +#: ../../library/audioop.rst:147 +msgid "" +"Convert samples in the audio fragment to a-LAW encoding and return this as a" +" bytes object. a-LAW is an audio encoding format whereby you get a dynamic " +"range of about 13 bits using only 8 bit samples. It is used by the Sun " +"audio hardware, among others." +msgstr "" +"将音频片段中的采样值转换为 a-LAW 编码,并将其作为字节对象返回。a-LAW 是一种音频编码格式,仅使用 8 位采样即可获得大约 13 " +"位的动态范围。Sun 音频硬件等使用该编码。" + +#: ../../library/audioop.rst:155 +msgid "Convert samples between 1-, 2-, 3- and 4-byte formats." +msgstr "将采样在 1、2、3 和 4 字节格式之间转换。" + +#: ../../library/audioop.rst:159 +msgid "" +"In some audio formats, such as .WAV files, 16, 24 and 32 bit samples are " +"signed, but 8 bit samples are unsigned. So when converting to 8 bit wide " +"samples for these formats, you need to also add 128 to the result::" +msgstr "" +"在某些音频格式(如 .WAV 文件)中,16、24 和 32 位采样是有符号的,但 8 位采样是无符号的。因此,当将这些格式转换为 8 " +"位宽采样时,还需使结果加上 128::" + +#: ../../library/audioop.rst:166 +msgid "" +"The same, in reverse, has to be applied when converting from 8 to 16, 24 or " +"32 bit width samples." +msgstr "反之,将 8 位宽的采样转换为 16、24 或 32 位时,必须采用相同的处理。" + +#: ../../library/audioop.rst:172 +msgid "" +"Convert samples in the audio fragment to u-LAW encoding and return this as a" +" bytes object. u-LAW is an audio encoding format whereby you get a dynamic " +"range of about 14 bits using only 8 bit samples. It is used by the Sun " +"audio hardware, among others." +msgstr "" +"将音频片段中的采样值转换为 u-LAW 编码,并将其作为字节对象返回。u-LAW 是一种音频编码格式,仅使用 8 位采样即可获得大约 14 " +"位的动态范围。Sun 音频硬件等使用该编码。" + +#: ../../library/audioop.rst:180 +msgid "" +"Return the maximum of the *absolute value* of all samples in a fragment." +msgstr "返回片段中所有采样值的最大 *绝对值*。" + +#: ../../library/audioop.rst:185 +msgid "Return the maximum peak-peak value in the sound fragment." +msgstr "返回声音片段中的最大峰峰值。" + +#: ../../library/audioop.rst:190 +msgid "" +"Return a tuple consisting of the minimum and maximum values of all samples " +"in the sound fragment." +msgstr "返回声音片段中所有采样值的最小值和最大值组成的元组。" + +#: ../../library/audioop.rst:196 +msgid "" +"Return a fragment that has all samples in the original fragment multiplied " +"by the floating-point value *factor*. Samples are truncated in case of " +"overflow." +msgstr "返回一个片段,该片段由原始片段中的每个采样值乘以浮点值 *factor* 组成。如果发生溢出,采样将被截断。" + +#: ../../library/audioop.rst:202 +msgid "Convert the frame rate of the input fragment." +msgstr "转换输入片段的帧速率。" + +#: ../../library/audioop.rst:204 +msgid "" +"*state* is a tuple containing the state of the converter. The converter " +"returns a tuple ``(newfragment, newstate)``, and *newstate* should be passed" +" to the next call of :func:`ratecv`. The initial call should pass ``None`` " +"as the state." +msgstr "" +"*state* 是一个表示转换器状态的元组。转换器返回一个元组 ``(newfragment, newstate)``,而 *newstate* " +"要在下一次调用 :func:`ratecv` 时传入。初始调用应传入 ``None`` 作为 state。" + +#: ../../library/audioop.rst:208 +msgid "" +"The *weightA* and *weightB* arguments are parameters for a simple digital " +"filter and default to ``1`` and ``0`` respectively." +msgstr "参数 *weightA* 和 *weightB* 是简单数字滤波器的参数,默认分别为 ``1`` 和 ``0``。" + +#: ../../library/audioop.rst:214 +msgid "Reverse the samples in a fragment and returns the modified fragment." +msgstr "将片段中的采样值反转,返回修改后的片段。" + +#: ../../library/audioop.rst:219 +msgid "" +"Return the root-mean-square of the fragment, i.e. ``sqrt(sum(S_i^2)/n)``." +msgstr "返回片段的均方根值,即 ``sqrt(sum(S_i^2)/n)``。" + +#: ../../library/audioop.rst:221 +msgid "This is a measure of the power in an audio signal." +msgstr "测量音频信号的能量。" + +#: ../../library/audioop.rst:226 +msgid "" +"Convert a stereo fragment to a mono fragment. The left channel is " +"multiplied by *lfactor* and the right channel by *rfactor* before adding the" +" two channels to give a mono signal." +msgstr "将立体声片段转换为单声道片段。左通道乘以 *lfactor*,右通道乘以 *rfactor*,然后两个通道相加得到单声道信号。" + +#: ../../library/audioop.rst:233 +msgid "" +"Generate a stereo fragment from a mono fragment. Each pair of samples in " +"the stereo fragment are computed from the mono sample, whereby left channel " +"samples are multiplied by *lfactor* and right channel samples by *rfactor*." +msgstr "" +"由单声道片段生成立体声片段。立体声片段中的两对采样都是从单声道计算而来的,即左声道是乘以 *lfactor*,右声道是乘以 *rfactor*。" + +#: ../../library/audioop.rst:240 +msgid "" +"Convert sound fragments in u-LAW encoding to linearly encoded sound " +"fragments. u-LAW encoding always uses 8 bits samples, so *width* refers only" +" to the sample width of the output fragment here." +msgstr "" +"将 u-LAW 编码的声音片段转换为线性编码声音片段。由于 u-LAW 编码采样值始终为 8 位,因此这里的 *width* 仅指输出片段的采样位宽。" + +#: ../../library/audioop.rst:244 +msgid "" +"Note that operations such as :func:`.mul` or :func:`.max` make no " +"distinction between mono and stereo fragments, i.e. all samples are treated " +"equal. If this is a problem the stereo fragment should be split into two " +"mono fragments first and recombined later. Here is an example of how to do " +"that::" +msgstr "" +"请注意,诸如 :func:`.mul` 或 :func:`.max` " +"之类的操作在单声道和立体声间没有区别,即所有采样都作相同处理。如果出现问题,应先将立体声片段拆分为两个单声道片段,之后再重组。以下是如何进行该操作的示例::" + +#: ../../library/audioop.rst:258 +msgid "" +"If you use the ADPCM coder to build network packets and you want your " +"protocol to be stateless (i.e. to be able to tolerate packet loss) you " +"should not only transmit the data but also the state. Note that you should " +"send the *initial* state (the one you passed to :func:`lin2adpcm`) along to " +"the decoder, not the final state (as returned by the coder). If you want to" +" use :class:`struct.Struct` to store the state in binary you can code the " +"first element (the predicted value) in 16 bits and the second (the delta " +"index) in 8." +msgstr "" +"如果使用 ADPCM " +"编码器构造网络数据包,并且希望协议是无状态的(即能够容忍数据包丢失),则不仅需要传输数据,还应该传输状态。请注意,必须将*初始*状态(传入 " +":func:`lin2adpcm` 的状态)发送给解码器,不能发送最终状态(编码器返回的状态)。如果要使用 :class:`struct.Struct`" +" 以二进制保存状态,可以将第一个元素(预测值)用 16 位编码,将第二个元素(增量索引)用 8 位编码。" + +#: ../../library/audioop.rst:266 +msgid "" +"The ADPCM coders have never been tried against other ADPCM coders, only " +"against themselves. It could well be that I misinterpreted the standards in" +" which case they will not be interoperable with the respective standards." +msgstr "本 ADPCM 编码器从不与其他 ADPCM 编码器对立,仅针对自身。本开发者可能会误读标准,这种情况下它们将无法与相应标准互操作。" + +#: ../../library/audioop.rst:270 +msgid "" +"The :func:`find\\*` routines might look a bit funny at first sight. They are" +" primarily meant to do echo cancellation. A reasonably fast way to do this " +"is to pick the most energetic piece of the output sample, locate that in the" +" input sample and subtract the whole output sample from the input sample::" +msgstr "" +"乍看之下 :func:`find\\*` " +"例程可能有些可笑。它们主要是用于回声消除,一种快速有效的方法是选取输出样本中能量最高的片段,在输入样本中定位该片段,然后从输入样本中减去整个输出样本::" diff --git a/library/audit_events.po b/library/audit_events.po new file mode 100644 index 000000000..d8542d2d6 --- /dev/null +++ b/library/audit_events.po @@ -0,0 +1,130 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) 2001-2022, Python Software Foundation +# This file is distributed under the same license as the Python package. +# FIRST AUTHOR , YEAR. +# +# Translators: +# ppcfish , 2020 +# Shengjing Zhu , 2020 +# zc Jin , 2020 +# Freesand Leo , 2021 +# +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: Python 3.9\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2022-11-04 14:34+0000\n" +"PO-Revision-Date: 2019-09-01 14:38+0000\n" +"Last-Translator: Freesand Leo , 2021\n" +"Language-Team: Chinese (China) (https://www.transifex.com/python-doc/teams/5390/zh_CN/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: zh_CN\n" +"Plural-Forms: nplurals=1; plural=0;\n" + +#: ../../library/audit_events.rst:6 +msgid "Audit events table" +msgstr "审计事件表" + +#: ../../library/audit_events.rst:8 +msgid "" +"This table contains all events raised by :func:`sys.audit` or " +":c:func:`PySys_Audit` calls throughout the CPython runtime and the standard " +"library. These calls were added in 3.8.0 or later (see :pep:`578`)." +msgstr "" +"下表包含了在整个 CPython 运行时和标准库中由 :func:`sys.audit` 或 :c:func:`PySys_Audit` " +"调用所引发的全部事件。 这些调用是在 3.8.0 或更高版本中添加了 (参见 :pep:`578`)。" + +#: ../../library/audit_events.rst:12 +msgid "" +"See :func:`sys.addaudithook` and :c:func:`PySys_AddAuditHook` for " +"information on handling these events." +msgstr "" +"请参阅 :func:`sys.addaudithook` 和 :c:func:`PySys_AddAuditHook` 了解有关处理这些事件的详细信息。" + +#: ../../library/audit_events.rst:17 +msgid "" +"This table is generated from the CPython documentation, and may not " +"represent events raised by other implementations. See your runtime specific " +"documentation for actual events raised." +msgstr "此表是根据 CPython 文档生成的,可能无法表示其他实现所引发的事件。 请参阅你的运行时专属的文档了解实际引发的事件。" + +#: ../../library/audit_events.rst:23 +msgid "" +"The following events are raised internally and do not correspond to any " +"public API of CPython:" +msgstr "下列事件只在内部被引发,而不会回应任何 CPython 公共 API:" + +#: ../../library/audit_events.rst:27 +msgid "Audit event" +msgstr "审计事件" + +#: ../../library/audit_events.rst:27 +msgid "Arguments" +msgstr "实参" + +#: ../../library/audit_events.rst:29 +msgid "_winapi.CreateFile" +msgstr "_winapi.CreateFile" + +#: ../../library/audit_events.rst:29 +msgid "" +"``file_name``, ``desired_access``, ``share_mode``, ``creation_disposition``," +" ``flags_and_attributes``" +msgstr "" +"``file_name``, ``desired_access``, ``share_mode``, ``creation_disposition``," +" ``flags_and_attributes``" + +#: ../../library/audit_events.rst:33 +msgid "_winapi.CreateJunction" +msgstr "_winapi.CreateJunction" + +#: ../../library/audit_events.rst:33 +msgid "``src_path``, ``dst_path``" +msgstr "``src_path``, ``dst_path``" + +#: ../../library/audit_events.rst:35 +msgid "_winapi.CreateNamedPipe" +msgstr "_winapi.CreateNamedPipe" + +#: ../../library/audit_events.rst:35 +msgid "``name``, ``open_mode``, ``pipe_mode``" +msgstr "``name``, ``open_mode``, ``pipe_mode``" + +#: ../../library/audit_events.rst:37 +msgid "_winapi.CreatePipe" +msgstr "_winapi.CreatePipe" + +#: ../../library/audit_events.rst:39 +msgid "_winapi.CreateProcess" +msgstr "_winapi.CreateProcess" + +#: ../../library/audit_events.rst:39 +msgid "``application_name``, ``command_line``, ``current_directory``" +msgstr "``application_name``, ``command_line``, ``current_directory``" + +#: ../../library/audit_events.rst:42 +msgid "_winapi.OpenProcess" +msgstr "_winapi.OpenProcess" + +#: ../../library/audit_events.rst:42 +msgid "``process_id``, ``desired_access``" +msgstr "``process_id``, ``desired_access``" + +#: ../../library/audit_events.rst:44 +msgid "_winapi.TerminateProcess" +msgstr "_winapi.TerminateProcess" + +#: ../../library/audit_events.rst:44 +msgid "``handle``, ``exit_code``" +msgstr "``handle``, ``exit_code``" + +#: ../../library/audit_events.rst:46 +msgid "ctypes.PyObj_FromPtr" +msgstr "ctypes.PyObj_FromPtr" + +#: ../../library/audit_events.rst:46 +msgid "``obj``" +msgstr "``obj``" diff --git a/library/base64.po b/library/base64.po new file mode 100644 index 000000000..7b64dc790 --- /dev/null +++ b/library/base64.po @@ -0,0 +1,405 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) 2001-2022, Python Software Foundation +# This file is distributed under the same license as the Python package. +# FIRST AUTHOR , YEAR. +# +# Translators: +# Zombie110year , 2018 +# Saiyang Gou , 2019 +# walkinrain , 2019 +# ppcfish , 2019 +# Freesand Leo , 2020 +# +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: Python 3.9\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2022-11-04 14:34+0000\n" +"PO-Revision-Date: 2017-02-16 18:42+0000\n" +"Last-Translator: Freesand Leo , 2020\n" +"Language-Team: Chinese (China) (https://www.transifex.com/python-doc/teams/5390/zh_CN/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: zh_CN\n" +"Plural-Forms: nplurals=1; plural=0;\n" + +#: ../../library/base64.rst:2 +msgid ":mod:`base64` --- Base16, Base32, Base64, Base85 Data Encodings" +msgstr ":mod:`base64` --- Base16, Base32, Base64, Base85 数据编码" + +#: ../../library/base64.rst:8 +msgid "**Source code:** :source:`Lib/base64.py`" +msgstr "**源代码:** :source:`Lib/base64.py`" + +#: ../../library/base64.rst:16 +msgid "" +"This module provides functions for encoding binary data to printable ASCII " +"characters and decoding such encodings back to binary data. It provides " +"encoding and decoding functions for the encodings specified in :rfc:`3548`, " +"which defines the Base16, Base32, and Base64 algorithms, and for the de-" +"facto standard Ascii85 and Base85 encodings." +msgstr "" +"此模块提供了将二进制数据编码为可打印的 ASCII 字符以及将这些编码解码回二进制数据的函数。它为 :rfc:`3548` 指定的 Base16, " +"Base32 和 Base64 编码以及已被广泛接受的 Ascii85 和 Base85 编码提供了编码和解码函数。" + +#: ../../library/base64.rst:22 +msgid "" +"The :rfc:`3548` encodings are suitable for encoding binary data so that it " +"can safely sent by email, used as parts of URLs, or included as part of an " +"HTTP POST request. The encoding algorithm is not the same as the " +":program:`uuencode` program." +msgstr "" +":rfc:`3548` 编码的目的是使得二进制数据可以作为电子邮件的内容正确地发送,用作 URL 的一部分,或者作为 HTTP POST " +"请求的一部分。其中的编码算法和 :program:`uuencode` 程序是不同的。" + +#: ../../library/base64.rst:27 +msgid "" +"There are two interfaces provided by this module. The modern interface " +"supports encoding :term:`bytes-like objects ` to ASCII " +":class:`bytes`, and decoding :term:`bytes-like objects ` " +"or strings containing ASCII to :class:`bytes`. Both base-64 alphabets " +"defined in :rfc:`3548` (normal, and URL- and filesystem-safe) are supported." +msgstr "" +"此模块提供了两个接口。新的接口提供了从 :term:`类字节对象 ` 到 ASCII 字节 " +":class:`bytes` 的编码,以及将 ASCII 的 :term:`类字节对象 ` 或字符串解码到 " +":class:`bytes` 的操作。此模块支持定义在 :rfc:`3548` 中的所有 base-64 字母表 (普通的、URL " +"安全的和文件系统安全的)。" + +#: ../../library/base64.rst:33 +msgid "" +"The legacy interface does not support decoding from strings, but it does " +"provide functions for encoding and decoding to and from :term:`file objects " +"`. It only supports the Base64 standard alphabet, and it adds " +"newlines every 76 characters as per :rfc:`2045`. Note that if you are " +"looking for :rfc:`2045` support you probably want to be looking at the " +":mod:`email` package instead." +msgstr "" +"旧的接口不提供从字符串的解码操作,但提供了操作 :term:`文件对象 ` 的编码和解码函数。旧接口只支持标准的 Base64" +" 字母表,并且按照 :rfc:`2045` 的规范每 76 个字符增加一个换行符。注意:如果你需要支持 :rfc:`2045`,那么使用 " +":mod:`email` 模块可能更加合适。" + +#: ../../library/base64.rst:41 +msgid "" +"ASCII-only Unicode strings are now accepted by the decoding functions of the" +" modern interface." +msgstr "新的接口提供的解码函数现在已经支持只包含 ASCII 的 Unicode 字符串。" + +#: ../../library/base64.rst:45 +msgid "" +"Any :term:`bytes-like objects ` are now accepted by all " +"encoding and decoding functions in this module. Ascii85/Base85 support " +"added." +msgstr "" +"所有 :term:`类字节对象 ` 现在已经被所有编码和解码函数接受。添加了对 Ascii85/Base85 " +"的支持。" + +#: ../../library/base64.rst:49 +msgid "The modern interface provides:" +msgstr "新的接口提供:" + +#: ../../library/base64.rst:53 +msgid "" +"Encode the :term:`bytes-like object` *s* using Base64 and return the encoded" +" :class:`bytes`." +msgstr "对 :term:`bytes-like object` *s* 进行 Base64 编码,并返回编码后的 :class:`bytes`。" + +#: ../../library/base64.rst:56 +msgid "" +"Optional *altchars* must be a :term:`bytes-like object` of at least length 2" +" (additional characters are ignored) which specifies an alternative alphabet" +" for the ``+`` and ``/`` characters. This allows an application to e.g. " +"generate URL or filesystem safe Base64 strings. The default is ``None``, " +"for which the standard Base64 alphabet is used." +msgstr "" +"可选项 *altchars* 必须是一个长 2 字节的 :term:`bytes-like object`,它指定了用于替换 ``+`` 和 ``/``" +" 的字符。这允许应用程序生成 URL 或文件系统安全的 Base64 字符串。默认值是 ``None``,使用标准 Base64 字母表。" + +#: ../../library/base64.rst:65 +msgid "" +"Decode the Base64 encoded :term:`bytes-like object` or ASCII string *s* and " +"return the decoded :class:`bytes`." +msgstr "" +"解码 Base64 编码过的 :term:`bytes-like object` 或 ASCII 字符串 *s* 并返回解码过的 " +":class:`bytes`。" + +#: ../../library/base64.rst:68 +msgid "" +"Optional *altchars* must be a :term:`bytes-like object` or ASCII string of " +"at least length 2 (additional characters are ignored) which specifies the " +"alternative alphabet used instead of the ``+`` and ``/`` characters." +msgstr "" +"可选项 *altchars* 必须是一个长 2 字节的 :term:`bytes-like object`,它指定了用于替换 ``+`` 和 ``/``" +" 的字符。" + +#: ../../library/base64.rst:72 +msgid "" +"A :exc:`binascii.Error` exception is raised if *s* is incorrectly padded." +msgstr "如果 *s* 被不正确地填写,一个 :exc:`binascii.Error` 错误将被抛出。" + +#: ../../library/base64.rst:75 +msgid "" +"If *validate* is ``False`` (the default), characters that are neither in the" +" normal base-64 alphabet nor the alternative alphabet are discarded prior to" +" the padding check. If *validate* is ``True``, these non-alphabet " +"characters in the input result in a :exc:`binascii.Error`." +msgstr "" +"如果 *validate* 值为 ``False`` (默认情况),则在填充检查前,将丢弃既不在标准 base-64 " +"字母表之中也不在备用字母表中的字符。如果 *validate* 为 ``True``,这些非 base64 字符将导致 " +":exc:`binascii.Error`。" + +#: ../../library/base64.rst:84 +msgid "" +"Encode :term:`bytes-like object` *s* using the standard Base64 alphabet and " +"return the encoded :class:`bytes`." +msgstr "" +"编码 :term:`bytes-like object` *s*,使用标准 Base64 字母表并返回编码过的 :class:`bytes`。" + +#: ../../library/base64.rst:90 +msgid "" +"Decode :term:`bytes-like object` or ASCII string *s* using the standard " +"Base64 alphabet and return the decoded :class:`bytes`." +msgstr "" +"解码 :term:`bytes-like object` 或 ASCII 字符串 *s*,使用标准 Base64 字母表并返回编码过的 " +":class:`bytes`。" + +#: ../../library/base64.rst:96 +msgid "" +"Encode :term:`bytes-like object` *s* using the URL- and filesystem-safe " +"alphabet, which substitutes ``-`` instead of ``+`` and ``_`` instead of " +"``/`` in the standard Base64 alphabet, and return the encoded " +":class:`bytes`. The result can still contain ``=``." +msgstr "" +"编码 :term:`bytes-like object` *s*,使用 URL 与文件系统安全的字母表,使用 ``-`` 以及 ``_`` 代替标准 " +"Base64 字母表中的 ``+`` 和 ``/``。返回编码过的 :class:`bytes`。结果中可能包含 ``=``。" + +#: ../../library/base64.rst:105 +msgid "" +"Decode :term:`bytes-like object` or ASCII string *s* using the URL- and " +"filesystem-safe alphabet, which substitutes ``-`` instead of ``+`` and ``_``" +" instead of ``/`` in the standard Base64 alphabet, and return the decoded " +":class:`bytes`." +msgstr "" +"解码 :term:`bytes-like object` 或 ASCII 字符串 *s*,使用 URL 与文件系统安全的字母表,使用 ``-`` 以及 " +"``_`` 代替标准 Base64 字母表中的 ``+`` 和 ``/``。返回解码过的 :class:`bytes`" + +#: ../../library/base64.rst:114 +msgid "" +"Encode the :term:`bytes-like object` *s* using Base32 and return the encoded" +" :class:`bytes`." +msgstr "用 Base32 编码 :term:`bytes-like object` *s* 并返回编码过的 :class:`bytes`" + +#: ../../library/base64.rst:120 +msgid "" +"Decode the Base32 encoded :term:`bytes-like object` or ASCII string *s* and " +"return the decoded :class:`bytes`." +msgstr "" +"解码 Base32 编码过的 :term:`bytes-like object` 或 ASCII 字符串 *s* 并返回解码过的 " +":class:`bytes`。" + +#: ../../library/base64.rst:123 ../../library/base64.rst:150 +msgid "" +"Optional *casefold* is a flag specifying whether a lowercase alphabet is " +"acceptable as input. For security purposes, the default is ``False``." +msgstr "可选的 *casefold* 是一个指定小写字幕是否可接受为输入的标志。为了安全考虑,默认值为 ``False``。" + +#: ../../library/base64.rst:127 +msgid "" +":rfc:`3548` allows for optional mapping of the digit 0 (zero) to the letter " +"O (oh), and for optional mapping of the digit 1 (one) to either the letter I" +" (eye) or letter L (el). The optional argument *map01* when not ``None``, " +"specifies which letter the digit 1 should be mapped to (when *map01* is not " +"``None``, the digit 0 is always mapped to the letter O). For security " +"purposes the default is ``None``, so that 0 and 1 are not allowed in the " +"input." +msgstr "" +":rfc:`3548` 允许将字母 0(zero) 映射为字母 O(oh),并可以选择是否将字母 1(one) 映射为 I(eye) 或 " +"L(el)。可选参数 *map01* 不是 ``None`` 时,它的值指定 1 的映射目标 (I 或 l),当 *map01* 非 ``None`` " +"时, 0 总是被映射为 O。为了安全考虑,默认值被设为 ``None``,如果是这样, 0 和 1 不允许被作为输入。" + +#: ../../library/base64.rst:134 ../../library/base64.rst:154 +msgid "" +"A :exc:`binascii.Error` is raised if *s* is incorrectly padded or if there " +"are non-alphabet characters present in the input." +msgstr "如果 *s* 被错误地填写或输入中存在字母表之外的字符,将抛出 :exc:`binascii.Error`。" + +#: ../../library/base64.rst:141 +msgid "" +"Encode the :term:`bytes-like object` *s* using Base16 and return the encoded" +" :class:`bytes`." +msgstr "用 Base16 编码 :term:`bytes-like object` *s* 并返回编码过的 :class:`bytes`" + +#: ../../library/base64.rst:147 +msgid "" +"Decode the Base16 encoded :term:`bytes-like object` or ASCII string *s* and " +"return the decoded :class:`bytes`." +msgstr "" +"解码 Base16 编码过的 :term:`bytes-like object` 或 ASCII 字符串 *s* 并返回解码过的 " +":class:`bytes`。" + +#: ../../library/base64.rst:161 +msgid "" +"Encode the :term:`bytes-like object` *b* using Ascii85 and return the " +"encoded :class:`bytes`." +msgstr "用 Ascii85 编码 :term:`bytes-like object` *s* 并返回编码过的 :class:`bytes`" + +#: ../../library/base64.rst:164 +msgid "" +"*foldspaces* is an optional flag that uses the special short sequence 'y' " +"instead of 4 consecutive spaces (ASCII 0x20) as supported by 'btoa'. This " +"feature is not supported by the \"standard\" Ascii85 encoding." +msgstr "" +"*foldspaces* 是一个可选的标志,使用特殊的短序列 'y' 代替 'btoa' 提供的 4 个连续空格 (ASCII 0x20)。这个特性不被" +" \"标准\" Ascii85 编码支持。" + +#: ../../library/base64.rst:168 +msgid "" +"*wrapcol* controls whether the output should have newline (``b'\\n'``) " +"characters added to it. If this is non-zero, each output line will be at " +"most this many characters long." +msgstr "*wrapcol* 控制了输出是否包含换行符 (``b'\\n'``). 如果该值非零, 则每一行只有该值所限制的字符长度." + +#: ../../library/base64.rst:172 +msgid "" +"*pad* controls whether the input is padded to a multiple of 4 before " +"encoding. Note that the ``btoa`` implementation always pads." +msgstr "*pad* 控制在编码之前输入是否填充为4的倍数。请注意,``btoa`` 实现总是填充。" + +#: ../../library/base64.rst:175 +msgid "" +"*adobe* controls whether the encoded byte sequence is framed with ``<~`` and" +" ``~>``, which is used by the Adobe implementation." +msgstr "*adobe* 控制编码后的字节序列是否要加上 ``<~`` 和 ``~>``,这是 Adobe 实现所使用的。" + +#: ../../library/base64.rst:183 +msgid "" +"Decode the Ascii85 encoded :term:`bytes-like object` or ASCII string *b* and" +" return the decoded :class:`bytes`." +msgstr "" +"解码 Ascii85 编码过的 :term:`bytes-like object` 或 ASCII 字符串 *s* 并返回解码过的 " +":class:`bytes`。" + +#: ../../library/base64.rst:186 +msgid "" +"*foldspaces* is a flag that specifies whether the 'y' short sequence should " +"be accepted as shorthand for 4 consecutive spaces (ASCII 0x20). This feature" +" is not supported by the \"standard\" Ascii85 encoding." +msgstr "" +"*foldspaces* 旗标指明是否应接受 'y' 短序列作为 4 个连续空格 (ASCII 0x20) 的快捷方式。 此特性不被 \"标准\" " +"Ascii85 编码格式所支持。" + +#: ../../library/base64.rst:190 +msgid "" +"*adobe* controls whether the input sequence is in Adobe Ascii85 format (i.e." +" is framed with <~ and ~>)." +msgstr "*adobe* 控制输入序列是否为 Adobe Ascii85 格式 (即附加 <~ 和 ~>)。" + +#: ../../library/base64.rst:193 +msgid "" +"*ignorechars* should be a :term:`bytes-like object` or ASCII string " +"containing characters to ignore from the input. This should only contain " +"whitespace characters, and by default contains all whitespace characters in " +"ASCII." +msgstr "" +"*ignorechars* 应当是一个 :term:`bytes-like object` 或 ASCII 字符串,其中包含要从输入中忽略的字符。 " +"这应当只包含空白字符,并且默认包含 ASCII 中所有的空白字符。" + +#: ../../library/base64.rst:203 +msgid "" +"Encode the :term:`bytes-like object` *b* using base85 (as used in e.g. git-" +"style binary diffs) and return the encoded :class:`bytes`." +msgstr "" +"用 base85(如 git 风格的二进制 diff 数据所用格式)编码 :term:`bytes-like object` *b* 并返回编码后的 " +":class:`bytes`。" + +#: ../../library/base64.rst:206 +msgid "" +"If *pad* is true, the input is padded with ``b'\\0'`` so its length is a " +"multiple of 4 bytes before encoding." +msgstr "如果 *pad* 为真值,输入将以 ``b'\\0'`` 填充以使其编码前长度为 4 字节的倍数。" + +#: ../../library/base64.rst:214 +msgid "" +"Decode the base85-encoded :term:`bytes-like object` or ASCII string *b* and " +"return the decoded :class:`bytes`. Padding is implicitly removed, if " +"necessary." +msgstr "" +"解码 base85 编码过的 :term:`bytes-like object` 或 ASCII 字符串 *b* 并返回解码过的 " +":class:`bytes`。 如有必要,填充会被隐式地移除。" + +#: ../../library/base64.rst:221 +msgid "The legacy interface:" +msgstr "旧式接口:" + +#: ../../library/base64.rst:225 +msgid "" +"Decode the contents of the binary *input* file and write the resulting " +"binary data to the *output* file. *input* and *output* must be :term:`file " +"objects `. *input* will be read until ``input.readline()`` " +"returns an empty bytes object." +msgstr "" +"解码二进制 *input* 文件的内容并将结果二进制数据写入 *output* 文件。 *input* 和 *output* 必须为 " +":term:`文件对象 `. *input* 将被读取直至 ``input.readline()`` 返回空字节串对象。" + +#: ../../library/base64.rst:233 +msgid "" +"Decode the :term:`bytes-like object` *s*, which must contain one or more " +"lines of base64 encoded data, and return the decoded :class:`bytes`." +msgstr "" +"解码 :term:`bytes-like object` *s*,该对象必须包含一行或多行 base64 编码的数据,并返回已解码的 " +":class:`bytes`。" + +#: ../../library/base64.rst:241 +msgid "" +"Encode the contents of the binary *input* file and write the resulting " +"base64 encoded data to the *output* file. *input* and *output* must be " +":term:`file objects `. *input* will be read until " +"``input.read()`` returns an empty bytes object. :func:`encode` inserts a " +"newline character (``b'\\n'``) after every 76 bytes of the output, as well " +"as ensuring that the output always ends with a newline, as per :rfc:`2045` " +"(MIME)." +msgstr "" +"编码二进制 *input* 文件的内容并将经 base64 编码的数据写入 *output* 文件。 *input* 和 *output* 必须为 " +":term:`文件对象 `。 *input* 将被读取直到 ``input.read()`` 返回空字节串对象。 " +":func:`encode` 会在每输出 76 个字节之后插入一个换行符 (``b'\\n'``),并会确保输出总是以换行符来结束,如 " +":rfc:`2045` (MIME) 所规定的那样。" + +#: ../../library/base64.rst:251 +msgid "" +"Encode the :term:`bytes-like object` *s*, which can contain arbitrary binary" +" data, and return :class:`bytes` containing the base64-encoded data, with " +"newlines (``b'\\n'``) inserted after every 76 bytes of output, and ensuring " +"that there is a trailing newline, as per :rfc:`2045` (MIME)." +msgstr "" +"编码 :term:`bytes-like object` *s*,其中可以包含任意二进制数据,并返回包含经 base64 编码数据的 " +":class:`bytes`,每输出 76 个字节之后将带一个换行符 (``b'\\n'``),并会确保在末尾也有一个换行符,如 :rfc:`2045`" +" (MIME) 所规定的那样。" + +#: ../../library/base64.rst:259 +msgid "An example usage of the module:" +msgstr "此模块的一个使用示例:" + +#: ../../library/base64.rst:273 +msgid "Module :mod:`binascii`" +msgstr "模块 :mod:`binascii`" + +#: ../../library/base64.rst:273 +msgid "" +"Support module containing ASCII-to-binary and binary-to-ASCII conversions." +msgstr "支持模块,包含ASCII到二进制和二进制到ASCII转换。" + +#: ../../library/base64.rst:276 +msgid "" +":rfc:`1521` - MIME (Multipurpose Internet Mail Extensions) Part One: " +"Mechanisms for Specifying and Describing the Format of Internet Message " +"Bodies" +msgstr "" +":rfc:`1521` - MIME (Multipurpose Internet Mail Extensions) " +"第一部分:规定并描述因特网消息体的格式的机制。" + +#: ../../library/base64.rst:276 +msgid "" +"Section 5.2, \"Base64 Content-Transfer-Encoding,\" provides the definition " +"of the base64 encoding." +msgstr "第 5.2 节,“Base64 内容转换编码格式” 提供了 base64 编码格式的定义。" diff --git a/library/bdb.po b/library/bdb.po new file mode 100644 index 000000000..ca1df2663 --- /dev/null +++ b/library/bdb.po @@ -0,0 +1,573 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) 2001-2024, Python Software Foundation +# This file is distributed under the same license as the Python package. +# FIRST AUTHOR , YEAR. +# +# Translators: +# 汇民 王 , 2019 +# Arisaka97 , 2020 +# Freesand Leo , 2022 +# Rafael Fontenelle , 2024 +# +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: Python 3.9\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2024-01-12 22:01+0000\n" +"PO-Revision-Date: 2017-02-16 18:42+0000\n" +"Last-Translator: Rafael Fontenelle , 2024\n" +"Language-Team: Chinese (China) (https://app.transifex.com/python-doc/teams/5390/zh_CN/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: zh_CN\n" +"Plural-Forms: nplurals=1; plural=0;\n" + +#: ../../library/bdb.rst:2 +msgid ":mod:`bdb` --- Debugger framework" +msgstr ":mod:`bdb` --- 调试器框架" + +#: ../../library/bdb.rst:7 +msgid "**Source code:** :source:`Lib/bdb.py`" +msgstr "**源代码:** :source:`Lib/bdb.py`" + +#: ../../library/bdb.rst:11 +msgid "" +"The :mod:`bdb` module handles basic debugger functions, like setting " +"breakpoints or managing execution via the debugger." +msgstr ":mod:`bdb` 模块处理基本的调试器函数,例如设置中断点或通过调试器来管理执行。" + +#: ../../library/bdb.rst:14 +msgid "The following exception is defined:" +msgstr "定义了以下异常:" + +#: ../../library/bdb.rst:18 +msgid "Exception raised by the :class:`Bdb` class for quitting the debugger." +msgstr "由 :class:`Bdb` 类引发用于退出调试器的异常。" + +#: ../../library/bdb.rst:21 +msgid "The :mod:`bdb` module also defines two classes:" +msgstr ":mod:`bdb` 模块还定义了两个类:" + +#: ../../library/bdb.rst:25 +msgid "" +"This class implements temporary breakpoints, ignore counts, disabling and " +"(re-)enabling, and conditionals." +msgstr "这个类实现了临时性中断点、忽略计数、禁用与(重新)启用,以及条件设置等。" + +#: ../../library/bdb.rst:28 +msgid "" +"Breakpoints are indexed by number through a list called :attr:`bpbynumber` " +"and by ``(file, line)`` pairs through :attr:`bplist`. The former points to " +"a single instance of class :class:`Breakpoint`. The latter points to a list" +" of such instances since there may be more than one breakpoint per line." +msgstr "" +"中断点通过一个名为 :attr:`bpbynumber` 的列表基于数字并通过 :attr:`bplist` 基于 ``(file, line)`` " +"对进行索引。 前者指向一个 :class:`Breakpoint` 类的单独实例。 后者指向一个由这种实例组成的列表,因为在每一行中可能存在多个中断点。" + +#: ../../library/bdb.rst:33 +msgid "" +"When creating a breakpoint, its associated filename should be in canonical " +"form. If a *funcname* is defined, a breakpoint hit will be counted when the" +" first line of that function is executed. A conditional breakpoint always " +"counts a hit." +msgstr "" +"当创建一个中断点时,它所关联的文件名应当为规范的形式。 如果定义了 *funcname*,则当该函数的第一行被执行时将增加一次中断点命中计数。 " +"带条件的中断点将总被增加一次计数。" + +#: ../../library/bdb.rst:38 +msgid ":class:`Breakpoint` instances have the following methods:" +msgstr ":class:`Breakpoint` 的实例具有下列方法:" + +#: ../../library/bdb.rst:42 +msgid "" +"Delete the breakpoint from the list associated to a file/line. If it is the" +" last breakpoint in that position, it also deletes the entry for the " +"file/line." +msgstr "从关联到文件/行的列表中删除此中断点。 如果它是该位置上的最后一个中断点,还将删除相应的文件/行条目。" + +#: ../../library/bdb.rst:49 +msgid "Mark the breakpoint as enabled." +msgstr "将此中断点标记为启用。" + +#: ../../library/bdb.rst:54 +msgid "Mark the breakpoint as disabled." +msgstr "将此中断点标记为禁用。" + +#: ../../library/bdb.rst:59 +msgid "" +"Return a string with all the information about the breakpoint, nicely " +"formatted:" +msgstr "返回一个带有关于此中断点的所有信息的,格式良好的字符串:" + +#: ../../library/bdb.rst:62 +msgid "The breakpoint number." +msgstr "此中断点的编号。" + +#: ../../library/bdb.rst:63 +msgid "If it is temporary or not." +msgstr "它是否为临时性的。" + +#: ../../library/bdb.rst:64 +msgid "Its file,line position." +msgstr "它的 file,line 位置。" + +#: ../../library/bdb.rst:65 +msgid "The condition that causes a break." +msgstr "导致中断的条件。" + +#: ../../library/bdb.rst:66 +msgid "If it must be ignored the next N times." +msgstr "它是否必须在此后被忽略 N 次。" + +#: ../../library/bdb.rst:67 +msgid "The breakpoint hit count." +msgstr "此中断点的命中计数。" + +#: ../../library/bdb.rst:73 +msgid "" +"Print the output of :meth:`bpformat` to the file *out*, or if it is " +"``None``, to standard output." +msgstr "" +"将 :meth:`bpformat` 的输出打印到文件 *out*,或者如果为 ``None`` 则打印到标准输出。, to standard " +"output." + +#: ../../library/bdb.rst:79 +msgid "The :class:`Bdb` class acts as a generic Python debugger base class." +msgstr ":class:`Bdb` 类是作为通用的 Python 调试器基类。" + +#: ../../library/bdb.rst:81 +msgid "" +"This class takes care of the details of the trace facility; a derived class " +"should implement user interaction. The standard debugger class " +"(:class:`pdb.Pdb`) is an example." +msgstr "这个类负责追踪工具的细节;所派生的类应当实现用户交互。 标准调试器类 (:class:`pdb.Pdb`) 就是一个例子。" + +#: ../../library/bdb.rst:85 +msgid "" +"The *skip* argument, if given, must be an iterable of glob-style module name" +" patterns. The debugger will not step into frames that originate in a " +"module that matches one of these patterns. Whether a frame is considered to " +"originate in a certain module is determined by the ``__name__`` in the frame" +" globals." +msgstr "" +"如果给出了 *skip* 参数,它必须是一个包含 glob 风格的模块名称模式的可迭代对象。 调试器将不会步进到来自与这些模式相匹配的模块的帧。 " +"一个帧是否会被视为来自特定的模块是由帧的 ``__name__`` 全局变量来确定的。" + +#: ../../library/bdb.rst:91 +msgid "The *skip* argument." +msgstr "*skip* 参数。" + +#: ../../library/bdb.rst:94 +msgid "" +"The following methods of :class:`Bdb` normally don't need to be overridden." +msgstr ":class:`Bdb` 的以下方法通常不需要被重写。" + +#: ../../library/bdb.rst:98 +msgid "" +"Auxiliary method for getting a filename in a canonical form, that is, as a " +"case-normalized (on case-insensitive filesystems) absolute path, stripped of" +" surrounding angle brackets." +msgstr "用于获取规范形式文件名的辅助方法,也就是大小写规范的(在大小写不敏感文件系统上)绝对路径,并去除两边的尖括号。" + +#: ../../library/bdb.rst:104 +msgid "" +"Set the :attr:`botframe`, :attr:`stopframe`, :attr:`returnframe` and " +":attr:`quitting` attributes with values ready to start debugging." +msgstr "" +"将 :attr:`botframe`, :attr:`stopframe`, :attr:`returnframe` 和 " +":attr:`quitting` 属性设置为准备开始调试的值。" + +#: ../../library/bdb.rst:109 +msgid "" +"This function is installed as the trace function of debugged frames. Its " +"return value is the new trace function (in most cases, that is, itself)." +msgstr "此函数被安装为被调试帧的追踪函数。 它的返回值是新的追踪函数(在大多数情况下就是它自身)。" + +#: ../../library/bdb.rst:112 +msgid "" +"The default implementation decides how to dispatch a frame, depending on the" +" type of event (passed as a string) that is about to be executed. *event* " +"can be one of the following:" +msgstr "默认实现会决定如何分派帧,这取决于即将被执行的事件的类型(作为字符串传入)。 *event* 可以是下列值之一:" + +#: ../../library/bdb.rst:116 +msgid "``\"line\"``: A new line of code is going to be executed." +msgstr "``\"line\"``: 一个新的代码行即将被执行。" + +#: ../../library/bdb.rst:117 +msgid "" +"``\"call\"``: A function is about to be called, or another code block " +"entered." +msgstr "``\"call\"``: 一个函数即将被调用,或者进入了另一个代码块。" + +#: ../../library/bdb.rst:119 +msgid "``\"return\"``: A function or other code block is about to return." +msgstr "``\"return\"``: 一个函数或其他代码块即将返回。" + +#: ../../library/bdb.rst:120 +msgid "``\"exception\"``: An exception has occurred." +msgstr "``\"exception\"``: 一个异常已发生。" + +#: ../../library/bdb.rst:121 +msgid "``\"c_call\"``: A C function is about to be called." +msgstr "``\"c_call\"``: 一个 C 函数即将被调用。" + +#: ../../library/bdb.rst:122 +msgid "``\"c_return\"``: A C function has returned." +msgstr "``\"c_return\"``: 一个 C 函数已返回。" + +#: ../../library/bdb.rst:123 +msgid "``\"c_exception\"``: A C function has raised an exception." +msgstr "``\"c_exception\"``: 一个 C 函数引发了异常。" + +#: ../../library/bdb.rst:125 +msgid "" +"For the Python events, specialized functions (see below) are called. For " +"the C events, no action is taken." +msgstr "对于 Python 事件,调用了专门的函数(见下文)。 对于 C 事件,不执行任何操作。" + +#: ../../library/bdb.rst:128 +msgid "The *arg* parameter depends on the previous event." +msgstr "*arg* 形参取决于之前的事件。" + +#: ../../library/bdb.rst:130 +msgid "" +"See the documentation for :func:`sys.settrace` for more information on the " +"trace function. For more information on code and frame objects, refer to " +":ref:`types`." +msgstr "" +"请参阅 :func:`sys.settrace` 的文档了解追踪函数的更多信息。 对于代码和帧对象的详情,请参考 :ref:`types`。" + +#: ../../library/bdb.rst:136 +msgid "" +"If the debugger should stop on the current line, invoke the " +":meth:`user_line` method (which should be overridden in subclasses). Raise a" +" :exc:`BdbQuit` exception if the :attr:`Bdb.quitting` flag is set (which can" +" be set from :meth:`user_line`). Return a reference to the " +":meth:`trace_dispatch` method for further tracing in that scope." +msgstr "" +"如果调试器应当在当前行上停止,则发起调用 :meth:`user_line` 方法(该方法应当在子类中被重写)。 如果设置了 " +":attr:`Bdb.quitting` 旗标(可以通过 :meth:`user_line` 设置)则将引发 :exc:`BdbQuit` 异常。 " +"返回一个对 :meth:`trace_dispatch` 方法的引用以便在该作用域内进一步地追踪。" + +#: ../../library/bdb.rst:144 +msgid "" +"If the debugger should stop on this function call, invoke the " +":meth:`user_call` method (which should be overridden in subclasses). Raise a" +" :exc:`BdbQuit` exception if the :attr:`Bdb.quitting` flag is set (which can" +" be set from :meth:`user_call`). Return a reference to the " +":meth:`trace_dispatch` method for further tracing in that scope." +msgstr "" +"如果调试器应当在此函数调用上停止,则发起调用 :meth:`user_call` 方法(该方法应当在子类中被重写)。 如果设置了 " +":attr:`Bdb.quitting` 旗标(可以通过 :meth:`user_call` 设置)则将引发 :exc:`BdbQuit` 异常。 " +"返回一个对 :meth:`trace_dispatch` 方法的引用以便在该作用域内进一步地追踪。" + +#: ../../library/bdb.rst:152 +msgid "" +"If the debugger should stop on this function return, invoke the " +":meth:`user_return` method (which should be overridden in subclasses). Raise" +" a :exc:`BdbQuit` exception if the :attr:`Bdb.quitting` flag is set (which " +"can be set from :meth:`user_return`). Return a reference to the " +":meth:`trace_dispatch` method for further tracing in that scope." +msgstr "" +"如果调试器应当在此函数返回时停止,则发起调用 :meth:`user_return` 方法(该方法应当在子类中被重写)。 如果设置了 " +":attr:`Bdb.quitting` 旗标(可以通过 :meth:`user_return` 设置)则将引发 :exc:`BdbQuit` 异常。 " +"返回一个对 :meth:`trace_dispatch` 方法的引用以便在该作用域内进一步地追踪。" + +#: ../../library/bdb.rst:160 +msgid "" +"If the debugger should stop at this exception, invokes the " +":meth:`user_exception` method (which should be overridden in subclasses). " +"Raise a :exc:`BdbQuit` exception if the :attr:`Bdb.quitting` flag is set " +"(which can be set from :meth:`user_exception`). Return a reference to the " +":meth:`trace_dispatch` method for further tracing in that scope." +msgstr "" +"如果调试器应当在此异常上停止,则发起调用 :meth:`user_exception` 方法(该方法应当在子类中被重写)。 如果设置了 " +":attr:`Bdb.quitting` 旗标(可以通过 :meth:`user_exception` 设置)则将引发 :exc:`BdbQuit` " +"异常。 返回一个对 :meth:`trace_dispatch` 方法的引用以便在该作用域内进一步地追踪。" + +#: ../../library/bdb.rst:166 +msgid "" +"Normally derived classes don't override the following methods, but they may " +"if they want to redefine the definition of stopping and breakpoints." +msgstr "通常情况下派生的类不会重写下列方法,但是如果想要重新定义停止和中断点的定义则可能会重写它们。" + +#: ../../library/bdb.rst:171 +msgid "" +"This method checks if the *frame* is somewhere below :attr:`botframe` in the" +" call stack. :attr:`botframe` is the frame in which debugging started." +msgstr "" +"此方法将检查调用栈中 *frame* 是否位于 :attr:`botframe` 的下方。 :attr:`botframe` 是调试开始所在的帧。" + +#: ../../library/bdb.rst:176 +msgid "" +"This method checks if there is a breakpoint in the filename and line " +"belonging to *frame* or, at least, in the current function. If the " +"breakpoint is a temporary one, this method deletes it." +msgstr "此方法将检查 *frame* 所属的文件名和行,或者至少当前函数中是否存在中断点。 如果中断点是临时性的,此方法将删除它。" + +#: ../../library/bdb.rst:182 +msgid "" +"This method checks if there is a breakpoint in the filename of the current " +"frame." +msgstr "此方法将检查当前帧的文件名中是否存在中断点。" + +#: ../../library/bdb.rst:185 +msgid "" +"Derived classes should override these methods to gain control over debugger " +"operation." +msgstr "派生的类应当重写这些方法以获取调试器操作的控制权。" + +#: ../../library/bdb.rst:190 +msgid "" +"This method is called from :meth:`dispatch_call` when there is the " +"possibility that a break might be necessary anywhere inside the called " +"function." +msgstr "当有可能在被调用函数内部的任何地方需要一个中断时此方法将从 :meth:`dispatch_call` 被调用。" + +#: ../../library/bdb.rst:196 +msgid "" +"This method is called from :meth:`dispatch_line` when either " +":meth:`stop_here` or :meth:`break_here` yields ``True``." +msgstr "" +"当 :meth:`stop_here` 或 :meth:`break_here` 产生 ``True`` 时此方法将从 " +":meth:`dispatch_line` 被调用。" + +#: ../../library/bdb.rst:201 +msgid "" +"This method is called from :meth:`dispatch_return` when :meth:`stop_here` " +"yields ``True``." +msgstr "当 :meth:`stop_here` 产生 ``True`` 时此方法将从 :meth:`dispatch_return` 被调用。" + +#: ../../library/bdb.rst:206 +msgid "" +"This method is called from :meth:`dispatch_exception` when :meth:`stop_here`" +" yields ``True``." +msgstr "" +"当 :meth:`stop_here` 产生 ``True`` 时此方法将从 :meth:`dispatch_exception` 被调用。" + +#: ../../library/bdb.rst:211 +msgid "Handle how a breakpoint must be removed when it is a temporary one." +msgstr "处理当一个中断点属于临时性中断点时是否必须要移除它。" + +#: ../../library/bdb.rst:213 +msgid "This method must be implemented by derived classes." +msgstr "此方法必须由派生类来实现。" + +#: ../../library/bdb.rst:216 +msgid "" +"Derived classes and clients can call the following methods to affect the " +"stepping state." +msgstr "派生类与客户端可以调用以下方法来影响步进状态。" + +#: ../../library/bdb.rst:221 +msgid "Stop after one line of code." +msgstr "在一行代码之后停止。" + +#: ../../library/bdb.rst:225 +msgid "Stop on the next line in or below the given frame." +msgstr "在给定的帧以内或以下的下一行停止。" + +#: ../../library/bdb.rst:229 +msgid "Stop when returning from the given frame." +msgstr "当从给定的帧返回时停止。" + +#: ../../library/bdb.rst:233 +msgid "" +"Stop when the line with the line no greater than the current one is reached " +"or when returning from current frame." +msgstr "当到达不大于当前行的行或当从当前帧返回时停止。" + +#: ../../library/bdb.rst:238 +msgid "" +"Start debugging from *frame*. If *frame* is not specified, debugging starts" +" from caller's frame." +msgstr "从 *frame* 开始调试。 如果未指定 *frame*,则从调用者的帧开始调试。" + +#: ../../library/bdb.rst:243 +msgid "" +"Stop only at breakpoints or when finished. If there are no breakpoints, set" +" the system trace function to ``None``." +msgstr "仅在中断点上或是当结束时停止。 如果不存在中断点,则将系统追踪函数设为 ``None``。" + +#: ../../library/bdb.rst:248 +msgid "" +"Set the :attr:`quitting` attribute to ``True``. This raises :exc:`BdbQuit` " +"in the next call to one of the :meth:`dispatch_\\*` methods." +msgstr "" +"将 :attr:`quitting` 属性设为 ``True``。 这将在对某个 :meth:`dispatch_\\*` 方法的下一次调用中引发 " +":exc:`BdbQuit`。" + +#: ../../library/bdb.rst:252 +msgid "" +"Derived classes and clients can call the following methods to manipulate " +"breakpoints. These methods return a string containing an error message if " +"something went wrong, or ``None`` if all is well." +msgstr "" +"派生的类和客户端可以调用下列方法来操纵中断点。 如果出现错误则这些方法将返回一个包含错误消息的字符串,或者如果一切正常则返回 ``None``。" + +#: ../../library/bdb.rst:258 +msgid "" +"Set a new breakpoint. If the *lineno* line doesn't exist for the *filename*" +" passed as argument, return an error message. The *filename* should be in " +"canonical form, as described in the :meth:`canonic` method." +msgstr "" +"设置一个新的中断点。 如果对于作为参数传入的 *filename* 不存在 *lineno*,则返回一条错误消息。 *filename* " +"应为规范的形式,如在 :meth:`canonic` 方法中描述的。" + +#: ../../library/bdb.rst:264 +msgid "" +"Delete the breakpoints in *filename* and *lineno*. If none were set, an " +"error message is returned." +msgstr "删除位于 *filename* 中 *lineno* 上的中断点。 如果未设置过中断点。 则将返回一条错误消息。" + +#: ../../library/bdb.rst:269 +msgid "" +"Delete the breakpoint which has the index *arg* in the " +":attr:`Breakpoint.bpbynumber`. If *arg* is not numeric or out of range, " +"return an error message." +msgstr "" +"删除 :attr:`Breakpoint.bpbynumber` 中索引号为 *arg* 的中断点。 如果 *arg* " +"不是数字或超出范围,则返回一条错误消息。" + +#: ../../library/bdb.rst:275 +msgid "" +"Delete all breakpoints in *filename*. If none were set, an error message is" +" returned." +msgstr "删除 *filename* 中的所有中断点。 如果未设置任何中断点,则返回一条错误消息。" + +#: ../../library/bdb.rst:280 +msgid "Delete all existing breakpoints." +msgstr "删除全部现有的中断点。" + +#: ../../library/bdb.rst:284 +msgid "" +"Return a breakpoint specified by the given number. If *arg* is a string, it" +" will be converted to a number. If *arg* is a non-numeric string, if the " +"given breakpoint never existed or has been deleted, a :exc:`ValueError` is " +"raised." +msgstr "" +"返回由指定数字所指明的中断点。 如果 *arg* 是一个字符串,它将被转换为一个数字。 如果 *arg* " +"不是一个表示数字的字符串,如果给定的中断点不存在或者已被删除,则会引发 :exc:`ValueError`。" + +#: ../../library/bdb.rst:293 +msgid "Check if there is a breakpoint for *lineno* of *filename*." +msgstr "检查 *filename* 中在 *lineno* 上是否有中断点。" + +#: ../../library/bdb.rst:297 +msgid "" +"Return all breakpoints for *lineno* in *filename*, or an empty list if none " +"are set." +msgstr "返回 *filename* 中在 *lineno* 上的所有中断点,或者如果未设置任何中断点则返回一个空列表。" + +#: ../../library/bdb.rst:302 +msgid "" +"Return all breakpoints in *filename*, or an empty list if none are set." +msgstr "返回 *filename* 中的所有中断点,或者如果未设置任何中断点则返回一个空列表。" + +#: ../../library/bdb.rst:306 +msgid "Return all breakpoints that are set." +msgstr "返回已设置的所有中断点。" + +#: ../../library/bdb.rst:309 +msgid "" +"Derived classes and clients can call the following methods to get a data " +"structure representing a stack trace." +msgstr "派生类与客户端可以调用以下方法来获取一个代表栈回溯信息的数组结构。" + +#: ../../library/bdb.rst:314 +msgid "" +"Get a list of records for a frame and all higher (calling) and lower frames," +" and the size of the higher part." +msgstr "获取一个帧及其所有上级(调用方)和下级帧的记录列表,以及上级部分的大小。" + +#: ../../library/bdb.rst:319 +msgid "" +"Return a string with information about a stack entry, identified by a " +"``(frame, lineno)`` tuple:" +msgstr "返回一个包含有关栈条目信息的字符串,由一个 ``(frame, lineno)`` 元组来标识:" + +#: ../../library/bdb.rst:322 +msgid "The canonical form of the filename which contains the frame." +msgstr "包含帧的规范形式的文件名。" + +#: ../../library/bdb.rst:323 +msgid "The function name, or ``\"\"``." +msgstr "函数名称,或者 ``\"\"``。" + +#: ../../library/bdb.rst:324 +msgid "The input arguments." +msgstr "输入参数。" + +#: ../../library/bdb.rst:325 +msgid "The return value." +msgstr "返回值。" + +#: ../../library/bdb.rst:326 +msgid "The line of code (if it exists)." +msgstr "代码的行(如果存在)。" + +#: ../../library/bdb.rst:329 +msgid "" +"The following two methods can be called by clients to use a debugger to " +"debug a :term:`statement`, given as a string." +msgstr "以下两个方法可由客户端调用以使用一个调试器来调试一条以字符串形式给出的 :term:`statement`。" + +#: ../../library/bdb.rst:334 +msgid "" +"Debug a statement executed via the :func:`exec` function. *globals* " +"defaults to :attr:`__main__.__dict__`, *locals* defaults to *globals*." +msgstr "" +"调试一条通过 :func:`exec` 函数执行的语句。 *globals* 默认为 " +":attr:`__main__.__dict__`,*locals* 默认为 *globals*。" + +#: ../../library/bdb.rst:339 +msgid "" +"Debug an expression executed via the :func:`eval` function. *globals* and " +"*locals* have the same meaning as in :meth:`run`." +msgstr "" +"调试一条通过 :func:`eval` 函数执行的表达式。 *globals* 和 *locals* 的含义与在 :meth:`run` 中的相同。" + +#: ../../library/bdb.rst:344 +msgid "For backwards compatibility. Calls the :meth:`run` method." +msgstr "为了保证向下兼容性。 调用 :meth:`run` 方法。" + +#: ../../library/bdb.rst:348 +msgid "Debug a single function call, and return its result." +msgstr "调试一个单独的函数调用,并返回其结果。" + +#: ../../library/bdb.rst:351 +msgid "Finally, the module defines the following functions:" +msgstr "最后,这个模块定义了以下函数:" + +#: ../../library/bdb.rst:355 +msgid "" +"Check whether we should break here, depending on the way the breakpoint *b* " +"was set." +msgstr "检查是否应当在此中断,根据中断点 *b* 的设置方式。" + +#: ../../library/bdb.rst:358 +msgid "" +"If it was set via line number, it checks if ``b.line`` is the same as the " +"one in the frame also passed as argument. If the breakpoint was set via " +"function name, we have to check we are in the right frame (the right " +"function) and if we are in its first executable line." +msgstr "" +"如果是通过行号设置的,它将检查 ``b.line`` 是否与同样作为参数传入的帧中的行号一致。 " +"如果中断点是通过函数名称设置的,则必须检查是否位于正确的帧(正确的函数)以及是否位于其中第一个可执行的行。" + +#: ../../library/bdb.rst:365 +msgid "" +"Determine if there is an effective (active) breakpoint at this line of code." +" Return a tuple of the breakpoint and a boolean that indicates if it is ok " +"to delete a temporary breakpoint. Return ``(None, None)`` if there is no " +"matching breakpoint." +msgstr "" +"确定在这一行代码中是否存在有效的(激活的)中断点。 返回一个包含中断点和表示是否可以删除临时中断点的布尔值的元组。 如果没有匹配的中断点则返回 " +"``(None, None)``。" + +#: ../../library/bdb.rst:372 +msgid "Start debugging with a :class:`Bdb` instance from caller's frame." +msgstr "使用一个来自调用方的帧的 :class:`Bdb` 实例开始调试。" diff --git a/library/binary.po b/library/binary.po new file mode 100644 index 000000000..38d82d012 --- /dev/null +++ b/library/binary.po @@ -0,0 +1,50 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) 2001-2022, Python Software Foundation +# This file is distributed under the same license as the Python package. +# FIRST AUTHOR , YEAR. +# +# Translators: +# Alpha Du , 2019 +# +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: Python 3.9\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2022-11-04 14:34+0000\n" +"PO-Revision-Date: 2017-02-16 18:42+0000\n" +"Last-Translator: Alpha Du , 2019\n" +"Language-Team: Chinese (China) (https://www.transifex.com/python-doc/teams/5390/zh_CN/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: zh_CN\n" +"Plural-Forms: nplurals=1; plural=0;\n" + +#: ../../library/binary.rst:5 +msgid "Binary Data Services" +msgstr "二进制数据服务" + +#: ../../library/binary.rst:7 +msgid "" +"The modules described in this chapter provide some basic services operations" +" for manipulation of binary data. Other operations on binary data, " +"specifically in relation to file formats and network protocols, are " +"described in the relevant sections." +msgstr "" +"本章介绍的模块提供了一些操作二进制数据的基本服务操作。 有关二进制数据的其他操作,特别是与文件格式和网络协议有关的操作,将在相关章节中介绍。" + +#: ../../library/binary.rst:12 +msgid "" +"Some libraries described under :ref:`textservices` also work with either " +"ASCII-compatible binary formats (for example, :mod:`re`) or all binary data " +"(for example, :mod:`difflib`)." +msgstr "" +"下面描述的一些库 :ref:`textservices` 也可以使用 ASCII 兼容的二进制格式(例如 :mod:`re` )或所有二进制数据(例如 " +":mod:`difflib` )。" + +#: ../../library/binary.rst:16 +msgid "" +"In addition, see the documentation for Python's built-in binary data types " +"in :ref:`binaryseq`." +msgstr "另外,请参阅 Python 的内置二进制数据类型的文档 :ref:`binaryseq` 。" diff --git a/library/binascii.po b/library/binascii.po new file mode 100644 index 000000000..6d2909f6a --- /dev/null +++ b/library/binascii.po @@ -0,0 +1,282 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) 2001-2024, Python Software Foundation +# This file is distributed under the same license as the Python package. +# FIRST AUTHOR , YEAR. +# +# Translators: +# walkinrain , 2019 +# 开 方 , 2019 +# Freesand Leo , 2022 +# Rafael Fontenelle , 2024 +# +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: Python 3.9\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2024-07-19 16:36+0000\n" +"PO-Revision-Date: 2017-02-16 18:42+0000\n" +"Last-Translator: Rafael Fontenelle , 2024\n" +"Language-Team: Chinese (China) (https://app.transifex.com/python-doc/teams/5390/zh_CN/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: zh_CN\n" +"Plural-Forms: nplurals=1; plural=0;\n" + +#: ../../library/binascii.rst:2 +msgid ":mod:`binascii` --- Convert between binary and ASCII" +msgstr ":mod:`binascii` --- 二进制和 ASCII 码互转 " + +#: ../../library/binascii.rst:15 +msgid "" +"The :mod:`binascii` module contains a number of methods to convert between " +"binary and various ASCII-encoded binary representations. Normally, you will " +"not use these functions directly but use wrapper modules like :mod:`uu`, " +":mod:`base64`, or :mod:`binhex` instead. The :mod:`binascii` module contains" +" low-level functions written in C for greater speed that are used by the " +"higher-level modules." +msgstr "" +":mod:`binascii` 模块包含很多在二进制和二进制表示的各种ASCII码之间转换的方法。 通常情况不会直接使用这些函数,而是使用像 " +":mod:`uu` , :mod:`base64` ,或 :mod:`binhex` 这样的封装模块。 为了执行效率高,:mod:`binascii` " +"模块含有许多用 C 写的低级函数,这些底层函数被一些高级模块所使用。" + +#: ../../library/binascii.rst:24 +msgid "" +"``a2b_*`` functions accept Unicode strings containing only ASCII characters." +" Other functions only accept :term:`bytes-like objects ` " +"(such as :class:`bytes`, :class:`bytearray` and other objects that support " +"the buffer protocol)." +msgstr "" +"``a2b_*`` 函数接受只含有 ASCII 码的Unicode 字符串。其他函数只接受 :term:`字节类对象 ` (例如 :class:`bytes`,:class:`bytearray` 和其他支持缓冲区协议的对象)。" + +#: ../../library/binascii.rst:29 +msgid "" +"ASCII-only unicode strings are now accepted by the ``a2b_*`` functions." +msgstr " ``a2b_*`` 函数支持只包含 ASCII 的 Unicode 字符串。" + +#: ../../library/binascii.rst:33 +msgid "The :mod:`binascii` module defines the following functions:" +msgstr ":mod:`binascii` 模块定义了以下函数:" + +#: ../../library/binascii.rst:38 +msgid "" +"Convert a single line of uuencoded data back to binary and return the binary" +" data. Lines normally contain 45 (binary) bytes, except for the last line. " +"Line data may be followed by whitespace." +msgstr "将单行 uu 编码数据转换成二进制数据并返回。uu 编码每行的数据通常包含45 个(二进制)字节,最后一行除外。每行数据后面可能跟有空格。" + +#: ../../library/binascii.rst:45 +msgid "" +"Convert binary data to a line of ASCII characters, the return value is the " +"converted line, including a newline char. The length of *data* should be at " +"most 45. If *backtick* is true, zeros are represented by ``'`'`` instead of " +"spaces." +msgstr "" +"将二进制数据转换为 ASCII 编码字符,返回值是转换后的行数据,包括换行符。 *data* 的长度最多为45。如果 *backtick* " +"为ture,则零由 ``'`'`` 而不是空格表示。" + +#: ../../library/binascii.rst:49 +msgid "Added the *backtick* parameter." +msgstr "增加 *backtick* 形参。" + +#: ../../library/binascii.rst:55 +msgid "" +"Convert a block of base64 data back to binary and return the binary data. " +"More than one line may be passed at a time." +msgstr "将 base64 数据块转换成二进制并以二进制数据形式返回。一次可以传递多行数据。" + +#: ../../library/binascii.rst:61 +msgid "" +"Convert binary data to a line of ASCII characters in base64 coding. The " +"return value is the converted line, including a newline char if *newline* is" +" true. The output of this function conforms to :rfc:`3548`." +msgstr "" +"将二进制数据转换为一行用 base64 编码的ASCII字符串。返回值是转换后的行数据,如果 *newline* " +"为true,则返回值包括换行符。该函数的输出符合:rfc:`3548`。" + +#: ../../library/binascii.rst:65 +msgid "Added the *newline* parameter." +msgstr "增加 *newline* 形参。" + +#: ../../library/binascii.rst:71 +msgid "" +"Convert a block of quoted-printable data back to binary and return the " +"binary data. More than one line may be passed at a time. If the optional " +"argument *header* is present and true, underscores will be decoded as " +"spaces." +msgstr "" +"将一个引号可打印的数据块转换成二进制数据并返回。一次可以转换多行。如果可选参数 *header* 存在且为true,则数据中的下划线将被解码成空格。" + +#: ../../library/binascii.rst:78 +msgid "" +"Convert binary data to a line(s) of ASCII characters in quoted-printable " +"encoding. The return value is the converted line(s). If the optional " +"argument *quotetabs* is present and true, all tabs and spaces will be " +"encoded. If the optional argument *istext* is present and true, newlines " +"are not encoded but trailing whitespace will be encoded. If the optional " +"argument *header* is present and true, spaces will be encoded as underscores" +" per :rfc:`1522`. If the optional argument *header* is present and false, " +"newline characters will be encoded as well; otherwise linefeed conversion " +"might corrupt the binary data stream." +msgstr "" +"将二进制数据转换为一行或多行带引号可打印编码的ASCII字符串。返回值是转换后的行数据。如果可选参数 *quotetabs* " +"存在且为真值,则对所有制表符和空格进行编码。如果可选参数 *istext* 存在且为真值,则不对新行进行编码,但将对尾随空格进行编码。如果可选参数 " +"*header* 存在且为true,则空格将被编码为下划线 :rfc:`1522`。如果可选参数 *header* " +"存在且为假值,则也会对换行符进行编码;不进行换行转换编码可能会破坏二进制数据流。" + +#: ../../library/binascii.rst:91 +msgid "" +"Convert binhex4 formatted ASCII data to binary, without doing RLE-" +"decompression. The string should contain a complete number of binary bytes, " +"or (in case of the last portion of the binhex4 data) have the remaining bits" +" zero." +msgstr "" +"将 binhex4 格式的 ASCII 数据不进行 RLE 解压缩直接转换为二进制数据。该字符串应包含完整数量的二进制字节,或者(在binhex4 " +"数据最后部分)剩余位为零。" + +#: ../../library/binascii.rst:100 +msgid "" +"Perform RLE-decompression on the data, as per the binhex4 standard. The " +"algorithm uses ``0x90`` after a byte as a repeat indicator, followed by a " +"count. A count of ``0`` specifies a byte value of ``0x90``. The routine " +"returns the decompressed data, unless data input data ends in an orphaned " +"repeat indicator, in which case the :exc:`Incomplete` exception is raised." +msgstr "" +"根据 binhex4 标准对数据执行 RLE 解压缩。该算法在一个字节的数据后使用 ``0x90`` 作为重复指示符,然后计数。计数 ``0`` " +"指定字节值 ``0x90`` 。该例程返回解压缩的数据,输入数据以孤立的重复指示符结束的情况下,将引发 :exc:`Incomplete` 异常。" + +#: ../../library/binascii.rst:106 +msgid "Accept only bytestring or bytearray objects as input." +msgstr "仅接受 bytestring 或 bytearray 对象作为输入。" + +#: ../../library/binascii.rst:114 +msgid "Perform binhex4 style RLE-compression on *data* and return the result." +msgstr "在 *data* 上执行 binhex4 游程编码压缩并返回结果。" + +#: ../../library/binascii.rst:121 +msgid "" +"Perform hexbin4 binary-to-ASCII translation and return the resulting string." +" The argument should already be RLE-coded, and have a length divisible by 3 " +"(except possibly the last fragment)." +msgstr "" +"执行 hexbin4 类型二进制到 ASCII 码的转换并返回结果字符串。输入数据应经过 RLE 编码,且数据长度可被3整除(除了最后一个片段)。" + +#: ../../library/binascii.rst:130 +msgid "" +"Compute a 16-bit CRC value of *data*, starting with *value* as the initial " +"CRC, and return the result. This uses the CRC-CCITT polynomial *x*:sup:`16`" +" + *x*:sup:`12` + *x*:sup:`5` + 1, often represented as 0x1021. This CRC is" +" used in the binhex4 format." +msgstr "" +"以 *value* 作为初始 CRC 计算 *data* 的16位 CRC 值,返回其结果。这里使用 CRC-CCITT 生成多项式 " +"*x*:sup:`16` + *x*:sup:`12` + *x*:sup:`5` + 1 ,通常表示为0x1021。该 CRC 被用于 binhex4" +" 格式。" + +#: ../../library/binascii.rst:138 +msgid "" +"Compute CRC-32, the unsigned 32-bit checksum of *data*, starting with an " +"initial CRC of *value*. The default initial CRC is zero. The algorithm is " +"consistent with the ZIP file checksum. Since the algorithm is designed for " +"use as a checksum algorithm, it is not suitable for use as a general hash " +"algorithm. Use as follows::" +msgstr "" +"计算 CRC-32,即 *data* 的无符号 32 位校验和,初始 CRC 值为 *value*。 默认的初始 CRC 值为零。 该算法与 ZIP " +"文件校验和算法一致。 由于该算法被设计用作校验和算法,因此不适合用作通用哈希算法。 使用方式如下::" + +#: ../../library/binascii.rst:150 +msgid "" +"The result is always unsigned. To generate the same numeric value when using" +" Python 2 or earlier, use ``crc32(data) & 0xffffffff``." +msgstr "" +"结果值将始终为无符号类型。 要在使用 Python 2 或更早版本时生成同样的数值,请使用 ``crc32(data) & 0xffffffff``。" + +#: ../../library/binascii.rst:158 +msgid "" +"Return the hexadecimal representation of the binary *data*. Every byte of " +"*data* is converted into the corresponding 2-digit hex representation. The " +"returned bytes object is therefore twice as long as the length of *data*." +msgstr "" +"返回二进制数据 *data* 的十六进制表示形式。 *data* 的每个字节都被转换为相应的2位十六进制表示形式。因此返回的字节对象的长度是 " +"*data* 的两倍。" + +#: ../../library/binascii.rst:162 +msgid "" +"Similar functionality (but returning a text string) is also conveniently " +"accessible using the :meth:`bytes.hex` method." +msgstr "使用::meth:`bytes.hex` 方法也可以方便地实现相似的功能(但仅返回文本字符串)。" + +#: ../../library/binascii.rst:165 +msgid "" +"If *sep* is specified, it must be a single character str or bytes object. It" +" will be inserted in the output after every *bytes_per_sep* input bytes. " +"Separator placement is counted from the right end of the output by default, " +"if you wish to count from the left, supply a negative *bytes_per_sep* value." +msgstr "" +"如果指定了 *sep*,它必须为单字符 str 或 bytes 对象。 它将被插入每个 *bytes_per_sep* 输入字节之后。 " +"分隔符位置默认从输出的右端开始计数,如果你希望从左端开始计数,请提供一个负的 *bytes_per_sep* 值。" + +#: ../../library/binascii.rst:180 +msgid "The *sep* and *bytes_per_sep* parameters were added." +msgstr "添加了 *sep* 和 *bytes_per_sep* 形参。" + +#: ../../library/binascii.rst:186 +msgid "" +"Return the binary data represented by the hexadecimal string *hexstr*. This" +" function is the inverse of :func:`b2a_hex`. *hexstr* must contain an even " +"number of hexadecimal digits (which can be upper or lower case), otherwise " +"an :exc:`Error` exception is raised." +msgstr "" +"返回由十六进制字符串 *hexstr* 表示的二进制数据。此函数功能与 :func:`b2a_hex` 相反。 *hexstr* " +"必须包含偶数个十六进制数字(可以是大写或小写),否则会引发 :exc:`Error` 异常。" + +#: ../../library/binascii.rst:191 +msgid "" +"Similar functionality (accepting only text string arguments, but more " +"liberal towards whitespace) is also accessible using the " +":meth:`bytes.fromhex` class method." +msgstr "使用::meth:`bytes.fromhex` 类方法也实现相似的功能(仅接受文本字符串参数,不限制其中的空白字符)。" + +#: ../../library/binascii.rst:197 +msgid "Exception raised on errors. These are usually programming errors." +msgstr "通常是因为编程错误引发的异常。" + +#: ../../library/binascii.rst:202 +msgid "" +"Exception raised on incomplete data. These are usually not programming " +"errors, but may be handled by reading a little more data and trying again." +msgstr "数据不完整引发的异常。通常不是编程错误导致的,可以通过读取更多的数据并再次尝试来处理该异常。" + +#: ../../library/binascii.rst:210 +msgid "Module :mod:`base64`" +msgstr "模块 :mod:`base64`" + +#: ../../library/binascii.rst:209 +msgid "" +"Support for RFC compliant base64-style encoding in base 16, 32, 64, and 85." +msgstr "支持在16,32,64,85进制中进行符合 RFC 协议的 base64 样式编码。" + +#: ../../library/binascii.rst:213 +msgid "Module :mod:`binhex`" +msgstr "模块 :mod:`binhex`" + +#: ../../library/binascii.rst:213 +msgid "Support for the binhex format used on the Macintosh." +msgstr "支持在 Macintosh 上使用的 binhex 格式。" + +#: ../../library/binascii.rst:216 +msgid "Module :mod:`uu`" +msgstr "模块 :mod:`uu`" + +#: ../../library/binascii.rst:216 +msgid "Support for UU encoding used on Unix." +msgstr "支持 Unix 使用的 UU 编码。" + +#: ../../library/binascii.rst:218 +msgid "Module :mod:`quopri`" +msgstr "模块 :mod:`quopri`" + +#: ../../library/binascii.rst:219 +msgid "Support for quoted-printable encoding used in MIME email messages." +msgstr "支持在 MIME 版本电子邮件中使用引号可打印编码。" diff --git a/library/binhex.po b/library/binhex.po new file mode 100644 index 000000000..8a2155c4f --- /dev/null +++ b/library/binhex.po @@ -0,0 +1,98 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) 2001-2022, Python Software Foundation +# This file is distributed under the same license as the Python package. +# FIRST AUTHOR , YEAR. +# +# Translators: +# Freesand Leo , 2018 +# walkinrain , 2019 +# ppcfish , 2019 +# +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: Python 3.9\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2022-11-04 14:34+0000\n" +"PO-Revision-Date: 2017-02-16 18:42+0000\n" +"Last-Translator: ppcfish , 2019\n" +"Language-Team: Chinese (China) (https://www.transifex.com/python-doc/teams/5390/zh_CN/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: zh_CN\n" +"Plural-Forms: nplurals=1; plural=0;\n" + +#: ../../library/binhex.rst:2 +msgid ":mod:`binhex` --- Encode and decode binhex4 files" +msgstr ":mod:`binhex` --- 对binhex4文件进行编码和解码" + +#: ../../library/binhex.rst:7 +msgid "**Source code:** :source:`Lib/binhex.py`" +msgstr "**源代码:** :source:`Lib/binhex.py`" + +#: ../../library/binhex.rst:13 +msgid "" +"This module encodes and decodes files in binhex4 format, a format allowing " +"representation of Macintosh files in ASCII. Only the data fork is handled." +msgstr "此模块以binhe4格式对文件进行编码和解码,该格式允许Macintosh文件以ASCII格式表示。仅处理数据分支。" + +#: ../../library/binhex.rst:16 +msgid "The :mod:`binhex` module defines the following functions:" +msgstr ":mod:`binhex` 模块定义了以下功能:" + +#: ../../library/binhex.rst:21 +msgid "" +"Convert a binary file with filename *input* to binhex file *output*. The " +"*output* parameter can either be a filename or a file-like object (any " +"object supporting a :meth:`write` and :meth:`close` method)." +msgstr "" +"将带有文件名 *输入* 的二进制文件转换为binhex文件 *输出* 。输出参数可以是文件名或类文件对象( :meth:`write` 和 " +":meth:`close` 方法的任何对象)。" + +#: ../../library/binhex.rst:28 +msgid "" +"Decode a binhex file *input*. *input* may be a filename or a file-like " +"object supporting :meth:`read` and :meth:`close` methods. The resulting file" +" is written to a file named *output*, unless the argument is ``None`` in " +"which case the output filename is read from the binhex file." +msgstr "" +"解码binhex文件输入。 *输入* 可以是支持 :meth:`read` 和 :meth:`close` " +"方法的文件名或类文件对象。生成的文件将写入名为 *output* 的文件,除非参数为 ``None`` " +",在这种情况下,从binhex文件中读取输出文件名。" + +#: ../../library/binhex.rst:33 +msgid "The following exception is also defined:" +msgstr "还定义了以下异常:" + +#: ../../library/binhex.rst:38 +msgid "" +"Exception raised when something can't be encoded using the binhex format " +"(for example, a filename is too long to fit in the filename field), or when " +"input is not properly encoded binhex data." +msgstr "当无法使用binhex格式编码某些内容时(例如,文件名太长而无法放入文件名字段中),或者输入未正确编码的binhex数据时,会引发异常。" + +#: ../../library/binhex.rst:45 +msgid "Module :mod:`binascii`" +msgstr "模块 :mod:`binascii`" + +#: ../../library/binhex.rst:46 +msgid "" +"Support module containing ASCII-to-binary and binary-to-ASCII conversions." +msgstr "支持模块,包含ASCII到二进制和二进制到ASCII转换。" + +#: ../../library/binhex.rst:52 +msgid "Notes" +msgstr "注释" + +#: ../../library/binhex.rst:54 +msgid "" +"There is an alternative, more powerful interface to the coder and decoder, " +"see the source for details." +msgstr "还有一个替代的、功能更强大的编码器和解码器接口,详细信息请参见源代码。" + +#: ../../library/binhex.rst:57 +msgid "" +"If you code or decode textfiles on non-Macintosh platforms they will still " +"use the old Macintosh newline convention (carriage-return as end of line)." +msgstr "如果您在非Macintosh平台上编码或解码文本文件,它们仍将使用旧的Macintosh换行符约定(回车符作为行尾)。" diff --git a/library/bisect.po b/library/bisect.po new file mode 100644 index 000000000..f708fef42 --- /dev/null +++ b/library/bisect.po @@ -0,0 +1,159 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) 2001-2022, Python Software Foundation +# This file is distributed under the same license as the Python package. +# FIRST AUTHOR , YEAR. +# +# Translators: +# iceyasha , 2019 +# Woko , 2019 +# +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: Python 3.9\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2022-11-04 14:34+0000\n" +"PO-Revision-Date: 2017-02-16 18:42+0000\n" +"Last-Translator: Woko , 2019\n" +"Language-Team: Chinese (China) (https://www.transifex.com/python-doc/teams/5390/zh_CN/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: zh_CN\n" +"Plural-Forms: nplurals=1; plural=0;\n" + +#: ../../library/bisect.rst:2 +msgid ":mod:`bisect` --- Array bisection algorithm" +msgstr ":mod:`bisect` --- 数组二分查找算法" + +#: ../../library/bisect.rst:10 +msgid "**Source code:** :source:`Lib/bisect.py`" +msgstr "**源代码:** :source:`Lib/bisect.py`" + +#: ../../library/bisect.rst:14 +msgid "" +"This module provides support for maintaining a list in sorted order without " +"having to sort the list after each insertion. For long lists of items with " +"expensive comparison operations, this can be an improvement over the more " +"common approach. The module is called :mod:`bisect` because it uses a basic" +" bisection algorithm to do its work. The source code may be most useful as " +"a working example of the algorithm (the boundary conditions are already " +"right!)." +msgstr "" +"这个模块对有序列表提供了支持,使得他们可以在插入新数据仍然保持有序。对于长列表,如果其包含元素的比较操作十分昂贵的话,这可以是对更常见方法的改进。这个模块叫做" +" :mod:`bisect` 因为其使用了基本的二分(bisection)算法。源代码也可以作为很棒的算法示例(边界判断也做好啦!)" + +#: ../../library/bisect.rst:21 +msgid "The following functions are provided:" +msgstr "定义了以下函数:" + +#: ../../library/bisect.rst:26 +msgid "" +"Locate the insertion point for *x* in *a* to maintain sorted order. The " +"parameters *lo* and *hi* may be used to specify a subset of the list which " +"should be considered; by default the entire list is used. If *x* is already" +" present in *a*, the insertion point will be before (to the left of) any " +"existing entries. The return value is suitable for use as the first " +"parameter to ``list.insert()`` assuming that *a* is already sorted." +msgstr "" +"在 *a* 中找到 *x* 合适的插入点以维持有序。参数 *lo* 和 *hi* 可以被用于确定需要考虑的子集;默认情况下整个列表都会被使用。如果 " +"*x* 已经在 *a* 里存在,那么插入点会在已存在元素之前(也就是左边)。如果 *a* 是列表(list)的话,返回值是可以被放在 " +"``list.insert()`` 的第一个参数的。" + +#: ../../library/bisect.rst:33 +msgid "" +"The returned insertion point *i* partitions the array *a* into two halves so" +" that ``all(val < x for val in a[lo:i])`` for the left side and ``all(val >=" +" x for val in a[i:hi])`` for the right side." +msgstr "" +"返回的插入点 *i* 可以将数组 *a* 分成两部分。左侧是 ``all(val < x for val in a[lo:i])`` ,右侧是 " +"``all(val >= x for val in a[i:hi])`` 。" + +#: ../../library/bisect.rst:40 +msgid "" +"Similar to :func:`bisect_left`, but returns an insertion point which comes " +"after (to the right of) any existing entries of *x* in *a*." +msgstr "类似于 :func:`bisect_left`,但是返回的插入点是 *a* 中已存在元素 *x* 的右侧。" + +#: ../../library/bisect.rst:43 +msgid "" +"The returned insertion point *i* partitions the array *a* into two halves so" +" that ``all(val <= x for val in a[lo:i])`` for the left side and ``all(val >" +" x for val in a[i:hi])`` for the right side." +msgstr "" +"返回的插入点 *i* 可以将数组 *a* 分成两部分。左侧是 ``all(val <= x for val in a[lo:i])``,右侧是 " +"``all(val > x for val in a[i:hi])`` for the right side。" + +#: ../../library/bisect.rst:49 +msgid "" +"Insert *x* in *a* in sorted order. This is equivalent to " +"``a.insert(bisect.bisect_left(a, x, lo, hi), x)`` assuming that *a* is " +"already sorted. Keep in mind that the O(log n) search is dominated by the " +"slow O(n) insertion step." +msgstr "" +"将 *x* 插入到一个有序序列 *a* 里,并维持其有序。如果 *a* 有序的话,这相当于 " +"``a.insert(bisect.bisect_left(a, x, lo, hi), x)``。要注意搜索是 O(log n) 的,插入却是 " +"O(n) 的。" + +#: ../../library/bisect.rst:57 +msgid "" +"Similar to :func:`insort_left`, but inserting *x* in *a* after any existing " +"entries of *x*." +msgstr "类似于 :func:`insort_left`,但是把 *x* 插入到 *a* 中已存在元素 *x* 的右侧。" + +#: ../../library/bisect.rst:62 +msgid "" +"`SortedCollection recipe " +"`_ that uses " +"bisect to build a full-featured collection class with straight-forward " +"search methods and support for a key-function. The keys are precomputed to " +"save unnecessary calls to the key function during searches." +msgstr "" +"`SortedCollection recipe " +"`_ 使用 bisect " +"构造了一个功能完整的集合类,提供了直接的搜索方法和对用于搜索的 key 方法的支持。所有用于搜索的键都是预先计算的,以避免在搜索时对 key " +"方法的不必要调用。" + +#: ../../library/bisect.rst:70 +msgid "Searching Sorted Lists" +msgstr "搜索有序列表" + +#: ../../library/bisect.rst:72 +msgid "" +"The above :func:`bisect` functions are useful for finding insertion points " +"but can be tricky or awkward to use for common searching tasks. The " +"following five functions show how to transform them into the standard " +"lookups for sorted lists::" +msgstr "" +"上面的 :func:`bisect` 函数对于找到插入点是有用的,但在一般的搜索任务中可能会有点尴尬。下面 5 " +"个函数展示了如何将其转变成有序列表中的标准查找函数 ::" + +#: ../../library/bisect.rst:114 +msgid "Other Examples" +msgstr "其他示例" + +#: ../../library/bisect.rst:118 +msgid "" +"The :func:`bisect` function can be useful for numeric table lookups. This " +"example uses :func:`bisect` to look up a letter grade for an exam score " +"(say) based on a set of ordered numeric breakpoints: 90 and up is an 'A', 80" +" to 89 is a 'B', and so on::" +msgstr "" +"函数 :func:`bisect` 还可以用于数字表查询。这个例子是使用 :func:`bisect` " +"从一个给定的考试成绩集合里,通过一个有序数字表,查出其对应的字母等级:90 分及以上是 'A',80 到 89 是 'B',以此类推 ::" + +#: ../../library/bisect.rst:130 +msgid "" +"Unlike the :func:`sorted` function, it does not make sense for the " +":func:`bisect` functions to have *key* or *reversed* arguments because that " +"would lead to an inefficient design (successive calls to bisect functions " +"would not \"remember\" all of the previous key lookups)." +msgstr "" +"与 :func:`sorted` 函数不同,对于 :func:`bisect` 函数来说,*key* 或者 *reversed* " +"参数并没有什么意义。因为这会导致设计效率低下(连续调用 bisect 函数时,是不会 \"记住\" 过去查找过的键的)。" + +#: ../../library/bisect.rst:135 +msgid "" +"Instead, it is better to search a list of precomputed keys to find the index" +" of the record in question::" +msgstr "正相反,最好去搜索预先计算好的键列表,来查找相关记录的索引。" diff --git a/library/builtins.po b/library/builtins.po new file mode 100644 index 000000000..2fb463a15 --- /dev/null +++ b/library/builtins.po @@ -0,0 +1,60 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) 2001-2022, Python Software Foundation +# This file is distributed under the same license as the Python package. +# FIRST AUTHOR , YEAR. +# +# Translators: +# ww song , 2018 +# Freesand Leo , 2020 +# +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: Python 3.9\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2022-11-04 14:34+0000\n" +"PO-Revision-Date: 2017-02-16 19:36+0000\n" +"Last-Translator: Freesand Leo , 2020\n" +"Language-Team: Chinese (China) (https://www.transifex.com/python-doc/teams/5390/zh_CN/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: zh_CN\n" +"Plural-Forms: nplurals=1; plural=0;\n" + +#: ../../library/builtins.rst:2 +msgid ":mod:`builtins` --- Built-in objects" +msgstr ":mod:`builtins` --- 内建对象" + +#: ../../library/builtins.rst:9 +msgid "" +"This module provides direct access to all 'built-in' identifiers of Python; " +"for example, ``builtins.open`` is the full name for the built-in function " +":func:`open`. See :ref:`built-in-funcs` and :ref:`built-in-consts` for " +"documentation." +msgstr "" +"该模块提供对Python的所有“内置”标识符的直接访问;例如,``builtins.open`` 是内置函数的全名 :func:`open` 。请参阅 " +":ref:`built-in-funcs` 和 :ref:`built-in-consts` 的文档。" + +#: ../../library/builtins.rst:15 +msgid "" +"This module is not normally accessed explicitly by most applications, but " +"can be useful in modules that provide objects with the same name as a built-" +"in value, but in which the built-in of that name is also needed. For " +"example, in a module that wants to implement an :func:`open` function that " +"wraps the built-in :func:`open`, this module can be used directly::" +msgstr "" +"大多数应用程序通常不会显式访问此模块,但在提供与内置值同名的对象的模块中可能很有用,但其中还需要内置该名称。例如,在一个想要实现 " +":func:`open` 函数的模块中,它包装了内置的 :func:`open` ,这个模块可以直接使用::" + +#: ../../library/builtins.rst:38 +msgid "" +"As an implementation detail, most modules have the name ``__builtins__`` " +"made available as part of their globals. The value of ``__builtins__`` is " +"normally either this module or the value of this module's " +":attr:`~object.__dict__` attribute. Since this is an implementation detail, " +"it may not be used by alternate implementations of Python." +msgstr "" +"作为一个实现细节,大多数模块都将名称 ``__builtins__`` 作为其全局变量的一部分提供。 ``__builtins__`` " +"的值通常是这个模块或者这个模块的值 :attr:`~object.__dict__` 属性。由于这是一个实现细节,因此 Python " +"的替代实现可能不会使用它。" diff --git a/library/bz2.po b/library/bz2.po new file mode 100644 index 000000000..931704e53 --- /dev/null +++ b/library/bz2.po @@ -0,0 +1,426 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) 2001-2022, Python Software Foundation +# This file is distributed under the same license as the Python package. +# FIRST AUTHOR , YEAR. +# +# Translators: +# Zombie110year , 2019 +# Dingyuan Wang , 2019 +# sgqy , 2019 +# Freesand Leo , 2020 +# +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: Python 3.9\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2022-11-04 14:34+0000\n" +"PO-Revision-Date: 2017-02-16 19:36+0000\n" +"Last-Translator: Freesand Leo , 2020\n" +"Language-Team: Chinese (China) (https://www.transifex.com/python-doc/teams/5390/zh_CN/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: zh_CN\n" +"Plural-Forms: nplurals=1; plural=0;\n" + +#: ../../library/bz2.rst:2 +msgid ":mod:`bz2` --- Support for :program:`bzip2` compression" +msgstr ":mod:`bz2` --- 对 :program:`bzip2` 压缩算法的支持" + +#: ../../library/bz2.rst:12 +msgid "**Source code:** :source:`Lib/bz2.py`" +msgstr "**源代码:** :source:`Lib/bz2.py`" + +#: ../../library/bz2.rst:16 +msgid "" +"This module provides a comprehensive interface for compressing and " +"decompressing data using the bzip2 compression algorithm." +msgstr "此模块提供了使用 bzip2 压缩算法压缩和解压数据的一套完整的接口。" + +#: ../../library/bz2.rst:19 +msgid "The :mod:`bz2` module contains:" +msgstr ":mod:`bz2` 模块包含:" + +#: ../../library/bz2.rst:21 +msgid "" +"The :func:`.open` function and :class:`BZ2File` class for reading and " +"writing compressed files." +msgstr "用于读写压缩文件的 :func:`.open` 函数和 :class:`BZ2File` 类。" + +#: ../../library/bz2.rst:23 +msgid "" +"The :class:`BZ2Compressor` and :class:`BZ2Decompressor` classes for " +"incremental (de)compression." +msgstr "用于增量压缩和解压的 :class:`BZ2Compressor` 和 :class:`BZ2Decompressor` 类。" + +#: ../../library/bz2.rst:25 +msgid "" +"The :func:`compress` and :func:`decompress` functions for one-shot " +"(de)compression." +msgstr "用于一次性压缩和解压的 :func:`compress` 和 :func:`decompress` 函数。" + +#: ../../library/bz2.rst:28 +msgid "" +"All of the classes in this module may safely be accessed from multiple " +"threads." +msgstr "此模块中的所有类都能安全地从多个线程访问。" + +#: ../../library/bz2.rst:32 +msgid "(De)compression of files" +msgstr "文件压缩和解压" + +#: ../../library/bz2.rst:36 +msgid "" +"Open a bzip2-compressed file in binary or text mode, returning a :term:`file" +" object`." +msgstr "以二进制或文本模式打开 bzip2 压缩文件,返回一个 :term:`file object`。" + +#: ../../library/bz2.rst:39 +msgid "" +"As with the constructor for :class:`BZ2File`, the *filename* argument can be" +" an actual filename (a :class:`str` or :class:`bytes` object), or an " +"existing file object to read from or write to." +msgstr "" +"和 :class:`BZ2File` 的构造函数类似,*filename* 参数可以是一个实际的文件名(:class:`str` 或 " +":class:`bytes` 对象),或是已有的可供读取或写入的文件对象。" + +#: ../../library/bz2.rst:43 +msgid "" +"The *mode* argument can be any of ``'r'``, ``'rb'``, ``'w'``, ``'wb'``, " +"``'x'``, ``'xb'``, ``'a'`` or ``'ab'`` for binary mode, or ``'rt'``, " +"``'wt'``, ``'xt'``, or ``'at'`` for text mode. The default is ``'rb'``." +msgstr "" +"*mode* 参数可设为二进制模式的 " +"``'r'``、``'rb'``、``'w'``、``'wb'``、``'x'``、``'xb'``、``'a'`` 或 " +"``'ab'``,或者文本模式的 ``'rt'``、``'wt'``、``'xt'`` 或 ``'at'``。默认是 ``'rb'``。" + +#: ../../library/bz2.rst:47 +msgid "" +"The *compresslevel* argument is an integer from 1 to 9, as for the " +":class:`BZ2File` constructor." +msgstr "*compresslevel* 参数是 1 到 9 的整数,和 :class:`BZ2File` 的构造函数一样。" + +#: ../../library/bz2.rst:50 +msgid "" +"For binary mode, this function is equivalent to the :class:`BZ2File` " +"constructor: ``BZ2File(filename, mode, compresslevel=compresslevel)``. In " +"this case, the *encoding*, *errors* and *newline* arguments must not be " +"provided." +msgstr "" +"对于二进制模式,这个函数等价于 :class:`BZ2File` 构造器: ``BZ2File(filename, mode, " +"compresslevel=compresslevel)``。 在这种情况下,不可提供 *encoding*, *errors* 和 *newline*" +" 参数。" + +#: ../../library/bz2.rst:55 +msgid "" +"For text mode, a :class:`BZ2File` object is created, and wrapped in an " +":class:`io.TextIOWrapper` instance with the specified encoding, error " +"handling behavior, and line ending(s)." +msgstr "" +"对于文本模式,将会创建一个 :class:`BZ2File` 对象,并将它包装到一个 :class:`io.TextIOWrapper` " +"实例中,此实例带有指定的编码格式、错误处理行为和行结束符。" + +#: ../../library/bz2.rst:61 ../../library/bz2.rst:126 +msgid "The ``'x'`` (exclusive creation) mode was added." +msgstr "添加了 ``'x'`` (单独创建) 模式。" + +#: ../../library/bz2.rst:64 ../../library/bz2.rst:133 +msgid "Accepts a :term:`path-like object`." +msgstr "接受一个 :term:`类路径对象 `。" + +#: ../../library/bz2.rst:70 +msgid "Open a bzip2-compressed file in binary mode." +msgstr "用二进制模式打开 bzip2 压缩文件。" + +#: ../../library/bz2.rst:72 +msgid "" +"If *filename* is a :class:`str` or :class:`bytes` object, open the named " +"file directly. Otherwise, *filename* should be a :term:`file object`, which " +"will be used to read or write the compressed data." +msgstr "" +"如果 *filename* 是一个 :class:`str` 或 :class:`bytes` 对象,则打开名称对应的文件目录。 " +"否则的话,*filename* 应当是一个 :term:`file object`,它将被用来读取或写入压缩数据。" + +#: ../../library/bz2.rst:76 +msgid "" +"The *mode* argument can be either ``'r'`` for reading (default), ``'w'`` for" +" overwriting, ``'x'`` for exclusive creation, or ``'a'`` for appending. " +"These can equivalently be given as ``'rb'``, ``'wb'``, ``'xb'`` and ``'ab'``" +" respectively." +msgstr "" +"*mode* 参数可以是表示读取的 ``'r'`` (默认值),表示覆写的 ``'w'``,表示单独创建的 ``'x'``,或表示添加的 " +"``'a'``。 这些模式还可分别以 ``'rb'``, ``'wb'``, ``'xb'`` 和 ``'ab'`` 的等价形式给出。" + +#: ../../library/bz2.rst:81 +msgid "" +"If *filename* is a file object (rather than an actual file name), a mode of " +"``'w'`` does not truncate the file, and is instead equivalent to ``'a'``." +msgstr "如果 *filename* 是一个文件对象(而不是实际的文件名),则 ``'w'`` 模式并不会截断文件,而是会等价于 ``'a'``。" + +#: ../../library/bz2.rst:84 +msgid "" +"If *mode* is ``'w'`` or ``'a'``, *compresslevel* can be an integer between " +"``1`` and ``9`` specifying the level of compression: ``1`` produces the " +"least compression, and ``9`` (default) produces the most compression." +msgstr "" +"如果 *mode* 为 ``'w'`` 或 ``'a'``,则 *compresslevel* 可以是 ``1`` 到 ``9`` " +"之间的整数,用于指定压缩等级: ``1`` 产生最低压缩率,而 ``9`` (默认值) 产生最高压缩率。" + +#: ../../library/bz2.rst:88 +msgid "" +"If *mode* is ``'r'``, the input file may be the concatenation of multiple " +"compressed streams." +msgstr "如果 *mode* 为 ``'r'``,则输入文件可以为多个压缩流的拼接。" + +#: ../../library/bz2.rst:91 +msgid "" +":class:`BZ2File` provides all of the members specified by the " +":class:`io.BufferedIOBase`, except for :meth:`detach` and :meth:`truncate`. " +"Iteration and the :keyword:`with` statement are supported." +msgstr "" +":class:`BZ2File` 提供了 :class:`io.BufferedIOBase` 所指定的所有成员,但 :meth:`detach` 和 " +":meth:`truncate` 除外。 并支持迭代和 :keyword:`with` 语句。" + +#: ../../library/bz2.rst:95 +msgid ":class:`BZ2File` also provides the following method:" +msgstr ":class:`BZ2File` 还提供了以下方法:" + +#: ../../library/bz2.rst:99 +msgid "" +"Return buffered data without advancing the file position. At least one byte " +"of data will be returned (unless at EOF). The exact number of bytes returned" +" is unspecified." +msgstr "返回缓冲的数据而不前移文件位置。 至少将返回一个字节的数据(除非为 EOF)。 实际返回的字节数不确定。" + +#: ../../library/bz2.rst:103 +msgid "" +"While calling :meth:`peek` does not change the file position of the " +":class:`BZ2File`, it may change the position of the underlying file object " +"(e.g. if the :class:`BZ2File` was constructed by passing a file object for " +"*filename*)." +msgstr "" +"虽然调用 :meth:`peek` 不会改变 :class:`BZ2File` 的文件位置,但它可能改变下层文件对象的位置(举例来说如果 " +":class:`BZ2File` 是通过传入一个文件对象作为 *filename* 的话)。" + +#: ../../library/bz2.rst:111 +msgid "Support for the :keyword:`with` statement was added." +msgstr "添加了对 :keyword:`with` 语句的支持。" + +#: ../../library/bz2.rst:114 +msgid "" +"The :meth:`fileno`, :meth:`readable`, :meth:`seekable`, :meth:`writable`, " +":meth:`read1` and :meth:`readinto` methods were added." +msgstr "" +"添加了 :meth:`fileno`, :meth:`readable`, :meth:`seekable`, :meth:`writable`, " +":meth:`read1` 和 :meth:`readinto` 方法。" + +#: ../../library/bz2.rst:118 +msgid "" +"Support was added for *filename* being a :term:`file object` instead of an " +"actual filename." +msgstr "添加了对 *filename* 使用 :term:`file object` 而非实际文件名的支持。" + +#: ../../library/bz2.rst:122 +msgid "" +"The ``'a'`` (append) mode was added, along with support for reading multi-" +"stream files." +msgstr "添加了 ``'a'`` (append) 模式,以及对读取多数据流文件的支持。" + +#: ../../library/bz2.rst:129 +msgid "" +"The :meth:`~io.BufferedIOBase.read` method now accepts an argument of " +"``None``." +msgstr ":meth:`~io.BufferedIOBase.read` 方法现在接受 ``None`` 作为参数。" + +#: ../../library/bz2.rst:136 +msgid "" +"The *buffering* parameter has been removed. It was ignored and deprecated " +"since Python 3.0. Pass an open file object to control how the file is " +"opened." +msgstr "*buffering* 形参已被移除。 它自 Python 3.0 起即被忽略并弃用。 请传入一个打开文件对象来控制文件的打开方式。" + +#: ../../library/bz2.rst:141 +msgid "The *compresslevel* parameter became keyword-only." +msgstr "*compresslevel* 形参成为仅限关键字参数。" + +#: ../../library/bz2.rst:145 +msgid "Incremental (de)compression" +msgstr "增量压缩和解压" + +#: ../../library/bz2.rst:149 +msgid "" +"Create a new compressor object. This object may be used to compress data " +"incrementally. For one-shot compression, use the :func:`compress` function " +"instead." +msgstr "创建一个新的压缩器对象。 此对象可被用来执行增量数据压缩。 对于一次性压缩,请改用 :func:`compress` 函数。" + +#: ../../library/bz2.rst:153 ../../library/bz2.rst:241 +msgid "" +"*compresslevel*, if given, must be an integer between ``1`` and ``9``. The " +"default is ``9``." +msgstr "如果给定 *compresslevel*,它必须为 ``1`` 至 ``9`` 之间的整数。 默认值为 ``9``。" + +#: ../../library/bz2.rst:158 +msgid "" +"Provide data to the compressor object. Returns a chunk of compressed data if" +" possible, or an empty byte string otherwise." +msgstr "向压缩器对象提供数据。 在可能的情况下返回一段已压缩数据,否则返回空字节串。" + +#: ../../library/bz2.rst:161 +msgid "" +"When you have finished providing data to the compressor, call the " +":meth:`flush` method to finish the compression process." +msgstr "当你已结束向压缩器提供数据时,请调用 :meth:`flush` 方法来完成压缩进程。" + +#: ../../library/bz2.rst:167 +msgid "" +"Finish the compression process. Returns the compressed data left in internal" +" buffers." +msgstr "结束压缩进程,返回内部缓冲中剩余的压缩完成的数据。" + +#: ../../library/bz2.rst:170 +msgid "" +"The compressor object may not be used after this method has been called." +msgstr "调用此方法之后压缩器对象将不可再被使用。" + +#: ../../library/bz2.rst:175 +msgid "" +"Create a new decompressor object. This object may be used to decompress data" +" incrementally. For one-shot compression, use the :func:`decompress` " +"function instead." +msgstr "创建一个新的解压缩器对象。 此对象可被用来执行增量数据解压缩。 对于一次性解压缩,请改用 :func:`decompress` 函数。" + +#: ../../library/bz2.rst:180 +msgid "" +"This class does not transparently handle inputs containing multiple " +"compressed streams, unlike :func:`decompress` and :class:`BZ2File`. If you " +"need to decompress a multi-stream input with :class:`BZ2Decompressor`, you " +"must use a new decompressor for each stream." +msgstr "" +"这个类不会透明地处理包含多个已压缩数据流的输入,这不同于 :func:`decompress` 和 :class:`BZ2File`。 如果你需要通过 " +":class:`BZ2Decompressor` 来解压缩多个数据流输入,你必须为每个数据流都使用新的解压缩器。" + +#: ../../library/bz2.rst:187 +msgid "" +"Decompress *data* (a :term:`bytes-like object`), returning uncompressed data" +" as bytes. Some of *data* may be buffered internally, for use in later calls" +" to :meth:`decompress`. The returned data should be concatenated with the " +"output of any previous calls to :meth:`decompress`." +msgstr "" +"解压缩 *data* (一个 :term:`bytes-like object`),返回字节串形式的解压缩数据。 某些 *data* " +"可以在内部被缓冲,以便用于后续的 :meth:`decompress` 调用。 返回的数据应当与之前任何 :meth:`decompress` " +"调用的输出进行拼接。" + +#: ../../library/bz2.rst:193 +msgid "" +"If *max_length* is nonnegative, returns at most *max_length* bytes of " +"decompressed data. If this limit is reached and further output can be " +"produced, the :attr:`~.needs_input` attribute will be set to ``False``. In " +"this case, the next call to :meth:`~.decompress` may provide *data* as " +"``b''`` to obtain more of the output." +msgstr "" +"如果 *max_length* 为非负数,将返回至多 *max_length* 个字节的解压缩数据。 如果达到此限制并且可以产生后续输出,则 " +":attr:`~.needs_input` 属性将被设为 ``False``。 在这种情况下,下一次 :meth:`~.decompress` " +"调用提供的 *data* 可以为 ``b''`` 以获取更多的输出。" + +#: ../../library/bz2.rst:200 +msgid "" +"If all of the input data was decompressed and returned (either because this " +"was less than *max_length* bytes, or because *max_length* was negative), the" +" :attr:`~.needs_input` attribute will be set to ``True``." +msgstr "" +"如果所有输入数据都已被解压缩并返回(或是因为它少于 *max_length* 个字节,或是因为 *max_length* 为负数),则 " +":attr:`~.needs_input` 属性将被设为 ``True``。" + +#: ../../library/bz2.rst:205 +msgid "" +"Attempting to decompress data after the end of stream is reached raises an " +"`EOFError`. Any data found after the end of the stream is ignored and saved" +" in the :attr:`~.unused_data` attribute." +msgstr "" +"在到达数据流末尾之后再尝试解压缩数据会引发 `EOFError`。 在数据流末尾之后获取的任何数据都会被忽略并存储至 " +":attr:`~.unused_data` 属性。" + +#: ../../library/bz2.rst:209 +msgid "Added the *max_length* parameter." +msgstr "添加了 *max_length* 形参。" + +#: ../../library/bz2.rst:214 +msgid "``True`` if the end-of-stream marker has been reached." +msgstr "若达到了数据流的末尾标记则为 ``True``。" + +#: ../../library/bz2.rst:221 +msgid "Data found after the end of the compressed stream." +msgstr "在压缩数据流的末尾之后获取的数据。" + +#: ../../library/bz2.rst:223 +msgid "" +"If this attribute is accessed before the end of the stream has been reached," +" its value will be ``b''``." +msgstr "如果在达到数据流末尾之前访问此属性,其值将为 ``b''``。" + +#: ../../library/bz2.rst:228 +msgid "" +"``False`` if the :meth:`.decompress` method can provide more decompressed " +"data before requiring new uncompressed input." +msgstr "如果在要求新的未解压缩输入之前 :meth:`.decompress` 方法可以提供更多的解压缩数据则为 ``False``。" + +#: ../../library/bz2.rst:235 +msgid "One-shot (de)compression" +msgstr "一次性压缩或解压缩" + +#: ../../library/bz2.rst:239 +msgid "Compress *data*, a :term:`bytes-like object `." +msgstr "压缩 *data*,此参数为一个 :term:`字节类对象 `。" + +#: ../../library/bz2.rst:244 +msgid "For incremental compression, use a :class:`BZ2Compressor` instead." +msgstr "对于增量压缩,请改用 :class:`BZ2Compressor`。" + +#: ../../library/bz2.rst:249 +msgid "Decompress *data*, a :term:`bytes-like object `." +msgstr "解压缩 *data*,此参数为一个 :term:`字节类对象 `。" + +#: ../../library/bz2.rst:251 +msgid "" +"If *data* is the concatenation of multiple compressed streams, decompress " +"all of the streams." +msgstr "如果 *data* 是多个压缩数据流的拼接,则解压缩所有数据流。" + +#: ../../library/bz2.rst:254 +msgid "For incremental decompression, use a :class:`BZ2Decompressor` instead." +msgstr "对于增量解压缩,请改用 :class:`BZ2Decompressor`。" + +#: ../../library/bz2.rst:256 +msgid "Support for multi-stream inputs was added." +msgstr "支持了多数据流的输入。" + +#: ../../library/bz2.rst:262 +msgid "Examples of usage" +msgstr "用法示例" + +#: ../../library/bz2.rst:264 +msgid "Below are some examples of typical usage of the :mod:`bz2` module." +msgstr "以下是 :mod:`bz2` 模块典型用法的一些示例。" + +#: ../../library/bz2.rst:266 +msgid "" +"Using :func:`compress` and :func:`decompress` to demonstrate round-trip " +"compression:" +msgstr "使用 :func:`compress` 和 :func:`decompress` 来显示往复式的压缩:" + +#: ../../library/bz2.rst:284 +msgid "Using :class:`BZ2Compressor` for incremental compression:" +msgstr "使用 :class:`BZ2Compressor` 进行增量压缩:" + +#: ../../library/bz2.rst:302 +msgid "" +"The example above uses a very \"nonrandom\" stream of data (a stream of " +"`b\"z\"` chunks). Random data tends to compress poorly, while ordered, " +"repetitive data usually yields a high compression ratio." +msgstr "上面的示例使用了十分“非随机”的数据流(即 `b\"z\"` 块数据流)。 随机数据的压缩率通常很差,而有序、重复的数据通常会产生很高的压缩率。" + +#: ../../library/bz2.rst:306 +msgid "Writing and reading a bzip2-compressed file in binary mode:" +msgstr "用二进制模式写入和读取 bzip2 压缩文件:" diff --git a/library/calendar.po b/library/calendar.po new file mode 100644 index 000000000..e2a8e9203 --- /dev/null +++ b/library/calendar.po @@ -0,0 +1,505 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) 2001-2024, Python Software Foundation +# This file is distributed under the same license as the Python package. +# FIRST AUTHOR , YEAR. +# +# Translators: +# Trim21 , 2019 +# walkinrain , 2019 +# nick <2330458484@qq.com>, 2019 +# 1lin24 <1lin24@sina.com>, 2019 +# Naisen Xu <723648649@qq.com>, 2019 +# Freesand Leo , 2022 +# Rafael Fontenelle , 2024 +# +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: Python 3.9\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2024-01-12 22:01+0000\n" +"PO-Revision-Date: 2017-02-16 19:36+0000\n" +"Last-Translator: Rafael Fontenelle , 2024\n" +"Language-Team: Chinese (China) (https://app.transifex.com/python-doc/teams/5390/zh_CN/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: zh_CN\n" +"Plural-Forms: nplurals=1; plural=0;\n" + +#: ../../library/calendar.rst:2 +msgid ":mod:`calendar` --- General calendar-related functions" +msgstr ":mod:`calendar` --- 日历相关函数" + +#: ../../library/calendar.rst:10 +msgid "**Source code:** :source:`Lib/calendar.py`" +msgstr "**源代码:** :source:`Lib/calendar.py`" + +#: ../../library/calendar.rst:14 +msgid "" +"This module allows you to output calendars like the Unix :program:`cal` " +"program, and provides additional useful functions related to the calendar. " +"By default, these calendars have Monday as the first day of the week, and " +"Sunday as the last (the European convention). Use :func:`setfirstweekday` to" +" set the first day of the week to Sunday (6) or to any other weekday. " +"Parameters that specify dates are given as integers. For related " +"functionality, see also the :mod:`datetime` and :mod:`time` modules." +msgstr "" +"这个模块让你可以输出像 Unix :program:`cal` 那样的日历,它还提供了其它与日历相关的实用函数。 " +"默认情况下,这些日历把星期一作为一周的第一天,星期天作为一周的最后一天(这是欧洲惯例)。可以使用 :func:`setfirstweekday` " +"方法设置一周的第一天为星期天 (6) 或者其它任意一天。函数全部接收整数类型的参数用来指定日期。其它相关功能参见 :mod:`datetime` 和 " +":mod:`time` 模块。" + +#: ../../library/calendar.rst:22 +msgid "" +"The functions and classes defined in this module use an idealized calendar, " +"the current Gregorian calendar extended indefinitely in both directions. " +"This matches the definition of the \"proleptic Gregorian\" calendar in " +"Dershowitz and Reingold's book \"Calendrical Calculations\", where it's the " +"base calendar for all computations. Zero and negative years are interpreted" +" as prescribed by the ISO 8601 standard. Year 0 is 1 BC, year -1 is 2 BC, " +"and so on." +msgstr "" +"在这个模块中定义的函数和类都基于一个理想化的日历——向过去和未来两个方向无限扩展的现行公历。这与 Dershowitz 和 Reingold " +"的书“历法计算”中所有计算的基本日历 \"proleptic Gregorian\" 历的定义相符。0 和负数年份按照 ISO 8601 标准解释:0 " +"年指公元前 1 年,-1 年指公元前 2 年,依此类推。" + +#: ../../library/calendar.rst:33 +msgid "" +"Creates a :class:`Calendar` object. *firstweekday* is an integer specifying " +"the first day of the week. ``0`` is Monday (the default), ``6`` is Sunday." +msgstr "" +"创建一个 :class:`Calendar` 对象。 *firstweekday* 是一个整数,用于指定一周的第一天。 ``0`` " +"是星期一(默认值),``6`` 是星期天。" + +#: ../../library/calendar.rst:36 +msgid "" +"A :class:`Calendar` object provides several methods that can be used for " +"preparing the calendar data for formatting. This class doesn't do any " +"formatting itself. This is the job of subclasses." +msgstr "" +":class:`Calendar` 对象提供了一些可用于对日历数据进行格式化的准备的方法。这个类本身不执行任何格式化操作。 这部分任务应由子类来完成。" + +#: ../../library/calendar.rst:41 +msgid ":class:`Calendar` instances have the following methods:" +msgstr ":class:`Calendar` 实例有下列方法:" + +#: ../../library/calendar.rst:45 +msgid "" +"Return an iterator for the week day numbers that will be used for one week." +" The first value from the iterator will be the same as the value of the " +":attr:`firstweekday` property." +msgstr "返回一个迭代器,迭代器的内容为一周里每天的星期值。迭代器的第一个值与 :attr:`firstweekday` 属性的值一致。" + +#: ../../library/calendar.rst:52 +msgid "" +"Return an iterator for the month *month* (1--12) in the year *year*. This " +"iterator will return all days (as :class:`datetime.date` objects) for the " +"month and all days before the start of the month or after the end of the " +"month that are required to get a complete week." +msgstr "" +"为 *year* 年 *month* 月 (1-12) 返回一个迭代器。这个迭代器返回当月的所有日期(使用 :class:`datetime.date`" +" 对象),日期包含了本月头尾用于组成完整一周的日期。" + +#: ../../library/calendar.rst:60 +msgid "" +"Return an iterator for the month *month* in the year *year* similar to " +":meth:`itermonthdates`, but not restricted by the :class:`datetime.date` " +"range. Days returned will simply be day of the month numbers. For the days " +"outside of the specified month, the day number is ``0``." +msgstr "" +"为 *year* 年 *month* 月返回一个与 :meth:`itermonthdates` 类似的迭代器,但不会受 " +":class:`datetime.date` 范围的限制。返回的为每一天的日期相对于当月 1 日过去的天数。对于不在当月的日期,返回数字 ``0``。" + +#: ../../library/calendar.rst:68 +msgid "" +"Return an iterator for the month *month* in the year *year* similar to " +":meth:`itermonthdates`, but not restricted by the :class:`datetime.date` " +"range. Days returned will be tuples consisting of a day of the month number " +"and a week day number." +msgstr "" +"为 *year* 年 *month* 月返回一个与 :meth:`itermonthdates` 类似的迭代器,但不会受 " +":class:`datetime.date` 范围的限制。迭代器中的每一个元素为由日数和代表星期几的数字组成的元组。" + +#: ../../library/calendar.rst:76 +msgid "" +"Return an iterator for the month *month* in the year *year* similar to " +":meth:`itermonthdates`, but not restricted by the :class:`datetime.date` " +"range. Days returned will be tuples consisting of a year, a month and a day " +"of the month numbers." +msgstr "" +"为 *year* 年 *month* 月返回一个与 :meth:`itermonthdates` 类似的迭代器,但不会受 " +":class:`datetime.date` 范围的限制。迭代器的元素为一个由年、月、日组成的元组。" + +#: ../../library/calendar.rst:86 +msgid "" +"Return an iterator for the month *month* in the year *year* similar to " +":meth:`itermonthdates`, but not restricted by the :class:`datetime.date` " +"range. Days returned will be tuples consisting of a year, a month, a day of " +"the month, and a day of the week numbers." +msgstr "" +"为 *year* 年 *month* 月返回一个与 :meth:`itermonthdates` 类似的迭代器,但不会受 " +":class:`datetime.date` 范围的限制。迭代器的元素为一个由年、月、日和代表星期几的数字组成的元组。" + +#: ../../library/calendar.rst:96 +msgid "" +"Return a list of the weeks in the month *month* of the *year* as full weeks." +" Weeks are lists of seven :class:`datetime.date` objects." +msgstr "" +"返回 *year* 年 *month* 月的周组成的列表。列表中的每一个周是由七个 :class:`datetime.date` 对象组成的列表。" + +#: ../../library/calendar.rst:102 +msgid "" +"Return a list of the weeks in the month *month* of the *year* as full weeks." +" Weeks are lists of seven tuples of day numbers and weekday numbers." +msgstr "返回 *year* 年 *month* 月的周组成的列表。列表中的每一个周是七个由日数和代表星期几的数字组成的元组的列表。" + +#: ../../library/calendar.rst:109 +msgid "" +"Return a list of the weeks in the month *month* of the *year* as full weeks." +" Weeks are lists of seven day numbers." +msgstr "返回 *year* 年 *month* 月的周组成的列表。列表中的每一个周是由七个日数组成的列表。" + +#: ../../library/calendar.rst:115 +msgid "" +"Return the data for the specified year ready for formatting. The return " +"value is a list of month rows. Each month row contains up to *width* months " +"(defaulting to 3). Each month contains between 4 and 6 weeks and each week " +"contains 1--7 days. Days are :class:`datetime.date` objects." +msgstr "" +"返回可以用来格式化的指定年月的数据。返回的值是一个列表,列表是月份组成的行。每一行包含了最多 *width* " +"个月(默认为3)。每个月包含了4到6周,每周包含1--7天。每一天使用 :class:`datetime.date` 对象。" + +#: ../../library/calendar.rst:123 +msgid "" +"Return the data for the specified year ready for formatting (similar to " +":meth:`yeardatescalendar`). Entries in the week lists are tuples of day " +"numbers and weekday numbers. Day numbers outside this month are zero." +msgstr "" +"返回可以用来模式化的指定年月的数据(与 :meth:`yeardatescalendar` " +"类似)。周列表的元素是由表示日期的数字和表示星期几的数字组成的元组。不在这个月的日子为0。" + +#: ../../library/calendar.rst:130 +msgid "" +"Return the data for the specified year ready for formatting (similar to " +":meth:`yeardatescalendar`). Entries in the week lists are day numbers. Day " +"numbers outside this month are zero." +msgstr "" +"返回可以用来模式化的指定年月的数据(与 :meth:`yeardatescalendar` 类似)。周列表的元素是表示日期的数字。不在这个月的日子为0。" + +#: ../../library/calendar.rst:137 +msgid "This class can be used to generate plain text calendars." +msgstr "可以使用这个类生成纯文本日历。" + +#: ../../library/calendar.rst:139 +msgid ":class:`TextCalendar` instances have the following methods:" +msgstr ":class:`TextCalendar` 实例有以下方法:" + +#: ../../library/calendar.rst:143 +msgid "" +"Return a month's calendar in a multi-line string. If *w* is provided, it " +"specifies the width of the date columns, which are centered. If *l* is " +"given, it specifies the number of lines that each week will use. Depends on " +"the first weekday as specified in the constructor or set by the " +":meth:`setfirstweekday` method." +msgstr "" +"返回指定月的用多行字符串表示的月历。*w* 为日期列的宽度,日期列居中打印。*l* 指定了周与周之间的行距。返回的日历还依赖于构造器或者 " +":meth:`setfirstweekday` 方法指定的每周的第一天是哪一天。" + +#: ../../library/calendar.rst:152 +msgid "Print a month's calendar as returned by :meth:`formatmonth`." +msgstr "调用 :meth:`formatmonth` 方法并打印返回的月历。" + +#: ../../library/calendar.rst:157 +msgid "" +"Return a *m*-column calendar for an entire year as a multi-line string. " +"Optional parameters *w*, *l*, and *c* are for date column width, lines per " +"week, and number of spaces between month columns, respectively. Depends on " +"the first weekday as specified in the constructor or set by the " +":meth:`setfirstweekday` method. The earliest year for which a calendar can " +"be generated is platform-dependent." +msgstr "" +"返回指定年的用多行字符串表示的 *m* 列年历。可选参数 *w*、*l* 和 *c* " +"分别表示日期列宽,周的行距,和月与月之间的纵向间隔。同样依赖于构造器或者 :meth:`setfirstweekday` " +"方法指定的每周的第一天是哪一天。可以生成年历的最早的年是哪一年依赖于使用的平台。" + +#: ../../library/calendar.rst:167 +msgid "" +"Print the calendar for an entire year as returned by :meth:`formatyear`." +msgstr "调用 :meth:`formatyear` 方法并打印返回的年历。" + +#: ../../library/calendar.rst:172 +msgid "This class can be used to generate HTML calendars." +msgstr "可以使用这个类生成 HTML 日历。" + +#: ../../library/calendar.rst:175 +msgid ":class:`!HTMLCalendar` instances have the following methods:" +msgstr ":class:`!HTMLCalendar` 实例有以下方法:" + +#: ../../library/calendar.rst:179 +msgid "" +"Return a month's calendar as an HTML table. If *withyear* is true the year " +"will be included in the header, otherwise just the month name will be used." +msgstr "返回一个 HTML 表格作为指定年月的日历。 *withyear* 为真,则年份将会包含在表头,否则只显示月份。" + +#: ../../library/calendar.rst:186 +msgid "" +"Return a year's calendar as an HTML table. *width* (defaulting to 3) " +"specifies the number of months per row." +msgstr "返回一个 HTML 表格作为指定年份的日历。 *width* (默认为3) 用于规定每一行显示月份的数量。" + +#: ../../library/calendar.rst:192 +msgid "" +"Return a year's calendar as a complete HTML page. *width* (defaulting to 3) " +"specifies the number of months per row. *css* is the name for the cascading " +"style sheet to be used. :const:`None` can be passed if no style sheet should" +" be used. *encoding* specifies the encoding to be used for the output " +"(defaulting to the system default encoding)." +msgstr "" +"返回一个完整的 HTML 页面作为指定年份的日历。 *width*(默认为3) 用于规定每一行显示的月份数量。 *css* " +"为层叠样式表的名字。如果不使用任何层叠样式表,可以使用 :const:`None` 。 *encoding* 为输出页面的编码 " +"(默认为系统的默认编码)。" + +#: ../../library/calendar.rst:199 +msgid "" +":class:`!HTMLCalendar` has the following attributes you can override to " +"customize the CSS classes used by the calendar:" +msgstr ":class:`!HTMLCalendar` 有以下属性,你可以重写它们来自定义应用日历的样式。" + +#: ../../library/calendar.rst:204 +msgid "" +"A list of CSS classes used for each weekday. The default class list is::" +msgstr "一个对应星期一到星期天的 CSS class 列表。默认列表为 ::" + +#: ../../library/calendar.rst:208 +msgid "more styles can be added for each day::" +msgstr "可以向每天加入其它样式 ::" + +#: ../../library/calendar.rst:212 +msgid "Note that the length of this list must be seven items." +msgstr "需要注意的是,列表的长度必须为7。" + +#: ../../library/calendar.rst:217 +msgid "The CSS class for a weekday occurring in the previous or coming month." +msgstr "工作日的 CSS 类在上个月或下个月发生。" + +#: ../../library/calendar.rst:224 +msgid "" +"A list of CSS classes used for weekday names in the header row. The default " +"is the same as :attr:`cssclasses`." +msgstr "用于标题行中的工作日名称的 CSS 类 列表。默认值与 :attr:`cssclasses` 相同。" + +#: ../../library/calendar.rst:232 +msgid "" +"The month's head CSS class (used by :meth:`formatmonthname`). The default " +"value is ``\"month\"``." +msgstr "月份的头 CSS 类(由 :meth:`formatmonthname` 使用)。默认值为 ``\"month\"`` 。" + +#: ../../library/calendar.rst:240 +msgid "" +"The CSS class for the whole month's table (used by :meth:`formatmonth`). The" +" default value is ``\"month\"``." +msgstr "某个月的月历的 CSS 类(由 :meth:`formatmonth` 使用)。默认值为 ``\"month\"`` 。" + +#: ../../library/calendar.rst:248 +msgid "" +"The CSS class for the whole year's table of tables (used by " +":meth:`formatyear`). The default value is ``\"year\"``." +msgstr "某年的年历的 CSS 类(由 :meth:`formatyear` 使用)。默认值为 ``\"year\"`` 。" + +#: ../../library/calendar.rst:256 +msgid "" +"The CSS class for the table head for the whole year (used by " +":meth:`formatyear`). The default value is ``\"year\"``." +msgstr "年历的·表头 CSS 类(由 :meth:`formatyear` 使用)。默认值为 ``\"year\"`` 。" + +#: ../../library/calendar.rst:262 +msgid "" +"Note that although the naming for the above described class attributes is " +"singular (e.g. ``cssclass_month`` ``cssclass_noday``), one can replace the " +"single CSS class with a space separated list of CSS classes, for example::" +msgstr "" +"需要注意的是,尽管上面命名的样式类都是单独出现的(如: ``cssclass_month`` ``cssclass_noday``), " +"但我们可以使用空格将样式类列表中的多个元素分隔开,例如:" + +#: ../../library/calendar.rst:268 +msgid "Here is an example how :class:`!HTMLCalendar` can be customized::" +msgstr "下面是一个如何自定义 :class:`!HTMLCalendar` 的示例 ::" + +#: ../../library/calendar.rst:280 +msgid "" +"This subclass of :class:`TextCalendar` can be passed a locale name in the " +"constructor and will return month and weekday names in the specified locale." +" If this locale includes an encoding all strings containing month and " +"weekday names will be returned as unicode." +msgstr "" +"这个子类 :class:`TextCalendar` " +"可以在构造函数中传递一个语言环境名称,并且返回月份和星期几的名称在特定语言环境中。如果此语言环境包含编码,则包含月份和工作日名称的所有字符串将作为 " +"unicode 返回。" + +#: ../../library/calendar.rst:288 +msgid "" +"This subclass of :class:`HTMLCalendar` can be passed a locale name in the " +"constructor and will return month and weekday names in the specified locale." +" If this locale includes an encoding all strings containing month and " +"weekday names will be returned as unicode." +msgstr "" +" :class:`HTMLCalendar` " +"的子类可以在构造函数传递一个语言环境名称并且返回月份和星期几的名称在特定语言环境中。如果此语言环境包含编码,则包含月份和工作日名称的所有字符串将作为 " +"unicode 返回。" + +#: ../../library/calendar.rst:295 +msgid "" +"The :meth:`formatweekday` and :meth:`formatmonthname` methods of these two " +"classes temporarily change the current locale to the given *locale*. " +"Because the current locale is a process-wide setting, they are not thread-" +"safe." +msgstr "" +"这两个类的 :meth:`formatweekday` 和 :meth:`formatmonthname` 方法临时更改dang当前区域至给定 " +"*locale* 。由于当前的区域设置是进程范围的设置,因此它们不是线程安全的。" + +#: ../../library/calendar.rst:300 +msgid "" +"For simple text calendars this module provides the following functions." +msgstr "这个模块为简单的文本日历提供了下列函数。" + +#: ../../library/calendar.rst:304 +msgid "" +"Sets the weekday (``0`` is Monday, ``6`` is Sunday) to start each week. The " +"values :const:`MONDAY`, :const:`TUESDAY`, :const:`WEDNESDAY`, " +":const:`THURSDAY`, :const:`FRIDAY`, :const:`SATURDAY`, and :const:`SUNDAY` " +"are provided for convenience. For example, to set the first weekday to " +"Sunday::" +msgstr "" +"设置每一周的开始(``0`` 表示星期一,``6`` 表示星期天)。提供了 " +":const:`MONDAY`、:const:`TUESDAY`、:const:`WEDNESDAY`、:const:`THURSDAY`、:const:`FRIDAY`、:const:`SATURDAY`" +" 和 :const:`SUNDAY` 几个常量值作为方便。例如,设置每周的第一天为星期天:" + +#: ../../library/calendar.rst:315 +msgid "Returns the current setting for the weekday to start each week." +msgstr "返回当前设置的每星期的第一天的数值。" + +#: ../../library/calendar.rst:320 +msgid "" +"Returns :const:`True` if *year* is a leap year, otherwise :const:`False`." +msgstr "如果 *year* 是闰年则返回 :const:`True` ,否则返回 :const:`False`。" + +#: ../../library/calendar.rst:325 +msgid "" +"Returns the number of leap years in the range from *y1* to *y2* (exclusive)," +" where *y1* and *y2* are years." +msgstr "返回在范围 *y1* 至 *y2* (不包括 y2)之间的闰年的年数,其中 *y1* 和 *y2* 是年份。" + +#: ../../library/calendar.rst:328 +msgid "This function works for ranges spanning a century change." +msgstr "此函数对于跨越世纪初的范围也适用。" + +#: ../../library/calendar.rst:333 +msgid "" +"Returns the day of the week (``0`` is Monday) for *year* (``1970``--...), " +"*month* (``1``--``12``), *day* (``1``--``31``)." +msgstr "" +"返回某年( ``1970`` -- ...),某月( ``1`` -- ``12`` ),某日( ``1`` -- ``31`` )是星期几( " +"``0`` 是星期一)。" + +#: ../../library/calendar.rst:339 +msgid "" +"Return a header containing abbreviated weekday names. *n* specifies the " +"width in characters for one weekday." +msgstr "返回一个包含星期几的缩写名的头。 *n* 指定星期几缩写的字符宽度。" + +#: ../../library/calendar.rst:345 +msgid "" +"Returns weekday of first day of the month and number of days in month, for " +"the specified *year* and *month*." +msgstr "返回指定 *年份* 的指定 *月份* 的第一天是星期几和这个月的天数。" + +#: ../../library/calendar.rst:351 +msgid "" +"Returns a matrix representing a month's calendar. Each row represents a " +"week; days outside of the month are represented by zeros. Each week begins " +"with Monday unless set by :func:`setfirstweekday`." +msgstr "" +"返回表示一个月的日历的矩阵。 每一行代表一周;此月份外的日子由零表示。 每周从周一开始,除非使用 :func:`setfirstweekday` " +"改变设置。" + +#: ../../library/calendar.rst:358 +msgid "Prints a month's calendar as returned by :func:`month`." +msgstr "打印由 :func:`month` 返回的一个月的日历。" + +#: ../../library/calendar.rst:363 +msgid "" +"Returns a month's calendar in a multi-line string using the " +":meth:`formatmonth` of the :class:`TextCalendar` class." +msgstr "使用 :class:`TextCalendar` 类的 :meth:`formatmonth` 以多行字符串形式返回月份日历。" + +#: ../../library/calendar.rst:369 +msgid "" +"Prints the calendar for an entire year as returned by :func:`calendar`." +msgstr "打印由 :func:`calendar` 返回的整年的日历。" + +#: ../../library/calendar.rst:374 +msgid "" +"Returns a 3-column calendar for an entire year as a multi-line string using " +"the :meth:`formatyear` of the :class:`TextCalendar` class." +msgstr "使用 :class:`TextCalendar` 类的 :meth:`formatyear` 返回整年的3列的日历以多行字符串的形式。" + +#: ../../library/calendar.rst:380 +msgid "" +"An unrelated but handy function that takes a time tuple such as returned by " +"the :func:`~time.gmtime` function in the :mod:`time` module, and returns the" +" corresponding Unix timestamp value, assuming an epoch of 1970, and the " +"POSIX encoding. In fact, :func:`time.gmtime` and :func:`timegm` are each " +"others' inverse." +msgstr "" +"一个不相关但很好用的函数,它接受一个时间元组例如 :mod:`time` 模块中的 :func:`~time.gmtime` 函数的返回并返回相应的 " +"Unix 时间戳值,假定 1970 年开始计数, POSIX 编码。实际上, :func:`time.gmtime` 和 :func:`timegm` " +"是彼此相反的。" + +#: ../../library/calendar.rst:387 +msgid "The :mod:`calendar` module exports the following data attributes:" +msgstr ":mod:`calendar` 模块导出以下数据属性:" + +#: ../../library/calendar.rst:391 +msgid "An array that represents the days of the week in the current locale." +msgstr "在当前语言环境下表示星期几的数组。" + +#: ../../library/calendar.rst:396 +msgid "" +"An array that represents the abbreviated days of the week in the current " +"locale." +msgstr "在当前语言环境下表示星期几缩写的数组。" + +#: ../../library/calendar.rst:401 +msgid "" +"An array that represents the months of the year in the current locale. This" +" follows normal convention of January being month number 1, so it has a " +"length of 13 and ``month_name[0]`` is the empty string." +msgstr "" +"在当前语言环境下表示一年中月份的数组。这遵循一月的月号为 1 的通常惯例,所以它的长度为 13 且 ``month_name[0]`` 是空字符串。" + +#: ../../library/calendar.rst:408 +msgid "" +"An array that represents the abbreviated months of the year in the current " +"locale. This follows normal convention of January being month number 1, so " +"it has a length of 13 and ``month_abbr[0]`` is the empty string." +msgstr "" +"在当前语言环境下表示月份简写的数组。这遵循一月的月号为 1 的通常惯例,所以它的长度为 13 且 ``month_abbr[0]`` 是空字符串。" + +#: ../../library/calendar.rst:417 +msgid "Module :mod:`datetime`" +msgstr "模块 :mod:`datetime`" + +#: ../../library/calendar.rst:416 +msgid "" +"Object-oriented interface to dates and times with similar functionality to " +"the :mod:`time` module." +msgstr "为日期和时间提供与 :mod:`time` 模块相似功能的面向对象接口。" + +#: ../../library/calendar.rst:419 +msgid "Module :mod:`time`" +msgstr "模块 :mod:`time`" + +#: ../../library/calendar.rst:420 +msgid "Low-level time related functions." +msgstr "底层时间相关函数。" diff --git a/library/cgi.po b/library/cgi.po new file mode 100644 index 000000000..98a5403d9 --- /dev/null +++ b/library/cgi.po @@ -0,0 +1,758 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) 2001-2024, Python Software Foundation +# This file is distributed under the same license as the Python package. +# FIRST AUTHOR , YEAR. +# +# Translators: +# Fei Yin , 2018 +# Alpha Du , 2019 +# nick <2330458484@qq.com>, 2019 +# Dai Xu , 2021 +# Rafael Fontenelle , 2023 +# Freesand Leo , 2024 +# +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: Python 3.9\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2024-04-26 21:29+0000\n" +"PO-Revision-Date: 2017-02-16 19:36+0000\n" +"Last-Translator: Freesand Leo , 2024\n" +"Language-Team: Chinese (China) (https://app.transifex.com/python-doc/teams/5390/zh_CN/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: zh_CN\n" +"Plural-Forms: nplurals=1; plural=0;\n" + +#: ../../library/cgi.rst:2 +msgid ":mod:`cgi` --- Common Gateway Interface support" +msgstr ":mod:`cgi` --- 通用网关接口支持" + +#: ../../library/cgi.rst:8 +msgid "**Source code:** :source:`Lib/cgi.py`" +msgstr "**源代码:** :source:`Lib/cgi.py`" + +#: ../../library/cgi.rst:18 +msgid "" +"The :mod:`cgi` module is deprecated (see :pep:`PEP 594 <594#cgi>` for " +"details and alternatives)." +msgstr ":mod:`cgi` 模块已被弃用(请参阅 :pep:`PEP 594 <594#cgi>` 了解详情及其替代品)。" + +#: ../../library/cgi.rst:24 +msgid "Support module for Common Gateway Interface (CGI) scripts." +msgstr "通用网关接口 (CGI) 脚本的支持模块" + +#: ../../library/cgi.rst:26 +msgid "" +"This module defines a number of utilities for use by CGI scripts written in " +"Python." +msgstr "本模块定义了一些工具供以 Python 编写的 CGI 脚本使用。" + +#: ../../library/cgi.rst:31 +msgid "Introduction" +msgstr "概述" + +#: ../../library/cgi.rst:35 +msgid "" +"A CGI script is invoked by an HTTP server, usually to process user input " +"submitted through an HTML ``
`` or ```` element." +msgstr "" +"CGI 脚本是由 HTTP 服务器发起调用,通常用来处理通过 HTML ```` 或 ```` 元素提交的用户输入。" + +#: ../../library/cgi.rst:38 +msgid "" +"Most often, CGI scripts live in the server's special :file:`cgi-bin` " +"directory. The HTTP server places all sorts of information about the request" +" (such as the client's hostname, the requested URL, the query string, and " +"lots of other goodies) in the script's shell environment, executes the " +"script, and sends the script's output back to the client." +msgstr "" +"在大多数情况下,CGI 脚本存放在服务器的 :file:`cgi-bin` 特殊目录下。 HTTP " +"服务器将有关请求的各种信息(例如客户端的主机名、所请求的 URL、查询字符串以及许多其他内容)放在脚本的 shell " +"环境中,然后执行脚本,并将脚本的输出发回到客户端。" + +#: ../../library/cgi.rst:44 +msgid "" +"The script's input is connected to the client too, and sometimes the form " +"data is read this way; at other times the form data is passed via the " +"\"query string\" part of the URL. This module is intended to take care of " +"the different cases and provide a simpler interface to the Python script. " +"It also provides a number of utilities that help in debugging scripts, and " +"the latest addition is support for file uploads from a form (if your browser" +" supports it)." +msgstr "" +"脚本的输入也会被连接到客户端,并且有时表单数据也会以此方式来读取;在其他时候表单数据会通过 URL 的“查询字符串”部分来传递。 " +"本模块的目标是处理不同的应用场景并向 Python 脚本提供一个更为简单的接口。 " +"它还提供了一些工具为脚本调试提供帮助,而最近增加的还有对通过表单上传文件的支持(如果你的浏览器支持该功能的话)。" + +#: ../../library/cgi.rst:51 +msgid "" +"The output of a CGI script should consist of two sections, separated by a " +"blank line. The first section contains a number of headers, telling the " +"client what kind of data is following. Python code to generate a minimal " +"header section looks like this::" +msgstr "" +"CGI 脚本的输出应当由两部分组成,并由一个空行分隔。 前一部分包含一些标头,它们告诉客户端后面会提供何种数据。 生成一个最小化标头部分的 Python" +" 代码如下所示::" + +#: ../../library/cgi.rst:59 +msgid "" +"The second section is usually HTML, which allows the client software to " +"display nicely formatted text with header, in-line images, etc. Here's " +"Python code that prints a simple piece of HTML::" +msgstr "" +"后一部分通常为 HTML,提供给客户端软件来显示格式良好包含标题的文本、内联图片等内容。 下面是打印一段简单 HTML 的 Python 代码::" + +#: ../../library/cgi.rst:71 +msgid "Using the cgi module" +msgstr "使用 cgi 模块" + +#: ../../library/cgi.rst:73 +msgid "Begin by writing ``import cgi``." +msgstr "先在开头添加 ``import cgi``。" + +#: ../../library/cgi.rst:75 +msgid "When you write a new script, consider adding these lines::" +msgstr "当你在编写一个新脚本时,请考虑加上这些语句::" + +#: ../../library/cgi.rst:80 +msgid "" +"This activates a special exception handler that will display detailed " +"reports in the Web browser if any errors occur. If you'd rather not show " +"the guts of your program to users of your script, you can have the reports " +"saved to files instead, with code like this::" +msgstr "" +"这会激活一个特殊的异常处理器,它将在发生任何错误时将详细错误报告显示到 Web 浏览器中。 如果你不希望向你的脚本 " +"的用户显示你的程序的内部细节,你可以改为将报告保存到文件中,使用这样的代码即可::" + +#: ../../library/cgi.rst:88 +msgid "" +"It's very helpful to use this feature during script development. The reports" +" produced by :mod:`cgitb` provide information that can save you a lot of " +"time in tracking down bugs. You can always remove the ``cgitb`` line later " +"when you have tested your script and are confident that it works correctly." +msgstr "" +"在脚本开发期间使用此特性会很有帮助。 :mod:`cgitb` 所产生的报告提供了在追踪程序问题时能为你节省大量时间的信息。 " +"你可以在完成测试你的脚本并确信它能正确工作之后再移除 ``cgitb`` 行。" + +#: ../../library/cgi.rst:93 +msgid "" +"To get at submitted form data, use the :class:`FieldStorage` class. If the " +"form contains non-ASCII characters, use the *encoding* keyword parameter set" +" to the value of the encoding defined for the document. It is usually " +"contained in the META tag in the HEAD section of the HTML document or by the" +" :mailheader:`Content-Type` header. This reads the form contents from the " +"standard input or the environment (depending on the value of various " +"environment variables set according to the CGI standard). Since it may " +"consume standard input, it should be instantiated only once." +msgstr "" +"要获取提交的表单数据,请使用 :class:`FieldStorage` 类。 如果表单包含非 ASCII 字符,请使用 *encoding* " +"关键字参数并设置为文档所定义的编码格式值。 它通常包含在 HTML 文档的 HEAD 部分的 META 标记中或者由 " +":mailheader:`Content-Type` 标头所指明。 这会从标准输入或环境读取表单内容(取决于根据 CGI 标准设置的多个环境变量的值)。" +" 由于它可能会消耗标准输入,它应当只被实例化一次。" + +#: ../../library/cgi.rst:102 +msgid "" +"The :class:`FieldStorage` instance can be indexed like a Python dictionary. " +"It allows membership testing with the :keyword:`in` operator, and also " +"supports the standard dictionary method :meth:`~dict.keys` and the built-in " +"function :func:`len`. Form fields containing empty strings are ignored and " +"do not appear in the dictionary; to keep such values, provide a true value " +"for the optional *keep_blank_values* keyword parameter when creating the " +":class:`FieldStorage` instance." +msgstr "" +":class:`FieldStorage` 实例可以像 Python 字典一样来检索。 它允许通过 :keyword:`in` " +"运算符进行成员检测,也支持标准字典方法 :meth:`~dict.keys` 和内置函数 :func:`len`。 " +"包含空字符串的表单字段会被忽略而不会出现在字典中;要保留这样的值,请在创建 :class:`FieldStorage` 实例时为可选的 " +"*keep_blank_values* 关键字形参提供一个真值。" + +#: ../../library/cgi.rst:110 +msgid "" +"For instance, the following code (which assumes that the " +":mailheader:`Content-Type` header and blank line have already been printed) " +"checks that the fields ``name`` and ``addr`` are both set to a non-empty " +"string::" +msgstr "" +"举例来说,下面的代码(假定 :mailheader:`Content-Type` 标头和空行已经被打印)会检查字段 ``name`` 和 " +"``addr`` 是否均被设为非空字符串::" + +#: ../../library/cgi.rst:124 +msgid "" +"Here the fields, accessed through ``form[key]``, are themselves instances of" +" :class:`FieldStorage` (or :class:`MiniFieldStorage`, depending on the form " +"encoding). The :attr:`~FieldStorage.value` attribute of the instance yields " +"the string value of the field. The :meth:`~FieldStorage.getvalue` method " +"returns this string value directly; it also accepts an optional second " +"argument as a default to return if the requested key is not present." +msgstr "" +"在这里的字段通过 ``form[key]`` 来访问,它们本身就是 :class:`FieldStorage` (或 " +":class:`MiniFieldStorage`,取决于表单的编码格式) 的实例。 实例的 :attr:`~FieldStorage.value` " +"属性会产生字段的字符串值。 :meth:`~FieldStorage.getvalue` " +"方法直接返回这个字符串;它还接受可选的第二个参数作为当请求的键不存在时要返回的默认值。" + +#: ../../library/cgi.rst:131 +msgid "" +"If the submitted form data contains more than one field with the same name, " +"the object retrieved by ``form[key]`` is not a :class:`FieldStorage` or " +":class:`MiniFieldStorage` instance but a list of such instances. Similarly," +" in this situation, ``form.getvalue(key)`` would return a list of strings. " +"If you expect this possibility (when your HTML form contains multiple fields" +" with the same name), use the :meth:`~FieldStorage.getlist` method, which " +"always returns a list of values (so that you do not need to special-case the" +" single item case). For example, this code concatenates any number of " +"username fields, separated by commas::" +msgstr "" +"如果提交的表单数据包含一个以上的同名字段,由 ``form[key]`` 所提取的对象将不是一个 :class:`FieldStorage` 或 " +":class:`MiniFieldStorage` 实例而是由这种实例组成的列表。 类似地,在这种情况下,``form.getvalue(key)`` " +"将会返回一个字符串列表。 如果你预计到这种可能性(当你的 HTML 表单包含多个同名字段时),请使用 " +":meth:`~FieldStorage.getlist` 方法,它总是返回一个值的列表(这样你就不需要对只有单个项的情况进行特别处理)。 " +"例如,这段代码拼接了任意数量的 username 字段,以逗号进行分隔::" + +#: ../../library/cgi.rst:144 +msgid "" +"If a field represents an uploaded file, accessing the value via the " +":attr:`~FieldStorage.value` attribute or the :meth:`~FieldStorage.getvalue` " +"method reads the entire file in memory as bytes. This may not be what you " +"want. You can test for an uploaded file by testing either the " +":attr:`~FieldStorage.filename` attribute or the :attr:`~FieldStorage.file` " +"attribute. You can then read the data from the :attr:`!file` attribute " +"before it is automatically closed as part of the garbage collection of the " +":class:`FieldStorage` instance (the :func:`~io.RawIOBase.read` and " +":func:`~io.IOBase.readline` methods will return bytes)::" +msgstr "" +"如果一个字段是代表上传的文件,请通过 :attr:`~FieldStorage.value` 属性访问该值或是通过 " +":meth:`~FieldStorage.getvalue` 方法以字节形式将整个文件读入内存。 这可能不是你想要的结果。 你可以通过测试 " +":attr:`~FieldStorage.filename` 属性或 :attr:`~FieldStorage.file` 属性来检测上传的文件。 " +"然后你可以从 :attr:`!file` 属性读取数据,直到它作为 :class:`FieldStorage` 实例的垃圾回收的一部分被自动关闭 " +"(:func:`~io.RawIOBase.read` 和 :func:`~io.IOBase.readline` 方法将返回字节数据)::" + +#: ../../library/cgi.rst:164 +msgid "" +":class:`FieldStorage` objects also support being used in a :keyword:`with` " +"statement, which will automatically close them when done." +msgstr ":class:`FieldStorage` 对象还支持在 :keyword:`with` 语句中使用,该语句结束时将自动关闭它们。" + +#: ../../library/cgi.rst:167 +msgid "" +"If an error is encountered when obtaining the contents of an uploaded file " +"(for example, when the user interrupts the form submission by clicking on a " +"Back or Cancel button) the :attr:`~FieldStorage.done` attribute of the " +"object for the field will be set to the value -1." +msgstr "" +"如果在获取上传文件的内容时遇到错误(例如,当用户点击回退或取消按钮中断表单提交时)该字段中对象的 :attr:`~FieldStorage.done` " +"属性值将被设为 -1。" + +#: ../../library/cgi.rst:172 +msgid "" +"The file upload draft standard entertains the possibility of uploading " +"multiple files from one field (using a recursive :mimetype:`multipart/\\*` " +"encoding). When this occurs, the item will be a dictionary-like " +":class:`FieldStorage` item. This can be determined by testing its " +":attr:`!type` attribute, which should be :mimetype:`multipart/form-data` (or" +" perhaps another MIME type matching :mimetype:`multipart/\\*`). In this " +"case, it can be iterated over recursively just like the top-level form " +"object." +msgstr "" +"文件上传标准草案考虑到了从一个字段上传多个文件的可能性(使用递归的 :mimetype:`multipart/\\*` 编码格式)。 " +"当这种情况发生时,该条目将是一个类似字典的 :class:`FieldStorage` 条目。 这可以通过检测它的 :attr:`!type` " +"属性来确定,该属性应当是 :mimetype:`multipart/form-data` (或者可能是匹配 " +":mimetype:`multipart/\\*` 的其他 MIME 类型)。 在这种情况下,它可以像最高层级的表单对象一样被递归地迭代处理。" + +#: ../../library/cgi.rst:180 +msgid "" +"When a form is submitted in the \"old\" format (as the query string or as a " +"single data part of type :mimetype:`application/x-www-form-urlencoded`), the" +" items will actually be instances of the class :class:`MiniFieldStorage`. " +"In this case, the :attr:`!list`, :attr:`!file`, and :attr:`filename` " +"attributes are always ``None``." +msgstr "" +"当一个表单按“旧”格式提交时(即以查询字符串或是单个 :mimetype:`application/x-www-form-urlencoded` " +"类型的数据部分的形式),这些条目实际上将是 :class:`MiniFieldStorage` 类的实例。 在这种情况下,:attr:`!list`, " +":attr:`!file` 和 :attr:`filename` 属性将总是为 ``None``。" + +#: ../../library/cgi.rst:185 +msgid "" +"A form submitted via POST that also has a query string will contain both " +":class:`FieldStorage` and :class:`MiniFieldStorage` items." +msgstr "" +"通过 POST 方式提交并且也带有查询字符串的表单将同时包含 :class:`FieldStorage` 和 " +":class:`MiniFieldStorage` 条目。" + +#: ../../library/cgi.rst:188 +msgid "" +"The :attr:`~FieldStorage.file` attribute is automatically closed upon the " +"garbage collection of the creating :class:`FieldStorage` instance." +msgstr "" +":attr:`~FieldStorage.file` 属性会在创建 :class:`FieldStorage` 实例的垃圾回收操作中被自动关闭。" + +#: ../../library/cgi.rst:192 +msgid "" +"Added support for the context management protocol to the " +":class:`FieldStorage` class." +msgstr "为 :class:`FieldStorage` 类增加了上下文管理协议支持。" + +#: ../../library/cgi.rst:198 +msgid "Higher Level Interface" +msgstr "更高层级的接口" + +#: ../../library/cgi.rst:200 +msgid "" +"The previous section explains how to read CGI form data using the " +":class:`FieldStorage` class. This section describes a higher level " +"interface which was added to this class to allow one to do it in a more " +"readable and intuitive way. The interface doesn't make the techniques " +"described in previous sections obsolete --- they are still useful to process" +" file uploads efficiently, for example." +msgstr "" +"前面的部分解释了如何使用 :class:`FieldStorage` 类来读取 CGI 表单数据。 " +"本部分则会描述一个更高层级的接口,它被添加到此类中以允许人们以更为可读和自然的方式行事。 这个接口并不会完全取代前面的部分所描述的技巧 --- " +"例如它们在高效处理文件上传时仍然很有用处。" + +#: ../../library/cgi.rst:209 +msgid "" +"The interface consists of two simple methods. Using the methods you can " +"process form data in a generic way, without the need to worry whether only " +"one or more values were posted under one name." +msgstr "此接口由两个简单的方法组成。 你可以使用这两个方法以通用的方式处理表单数据,而无需担心在一个名称下提交的值是只有一个还是有多个。" + +#: ../../library/cgi.rst:213 +msgid "" +"In the previous section, you learned to write following code anytime you " +"expected a user to post more than one value under one name::" +msgstr "在前面的部分中,你已学会当你预期用户在一个名称下提交超过一个值的时候编写以下代码::" + +#: ../../library/cgi.rst:222 +msgid "" +"This situation is common for example when a form contains a group of " +"multiple checkboxes with the same name::" +msgstr "这种情况很常见,例如当一个表单包含具有相同名称的一组复选框的时候::" + +#: ../../library/cgi.rst:228 +msgid "" +"In most situations, however, there's only one form control with a particular" +" name in a form and then you expect and need only one value associated with " +"this name. So you write a script containing for example this code::" +msgstr "但是在多数情况下,一个表单中的一个特定名称只对应一个表单控件。 因此你可能会编写包含以下代码的脚本::" + +#: ../../library/cgi.rst:234 +msgid "" +"The problem with the code is that you should never expect that a client will" +" provide valid input to your scripts. For example, if a curious user " +"appends another ``user=foo`` pair to the query string, then the script would" +" crash, because in this situation the ``getvalue(\"user\")`` method call " +"returns a list instead of a string. Calling the :meth:`~str.upper` method " +"on a list is not valid (since lists do not have a method of this name) and " +"results in an :exc:`AttributeError` exception." +msgstr "" +"这段代码的问题在于你绝不能预期客户端会向你的脚本提供合法的输入。 举例来说,如果一个好奇的用户向查询字符串添加了另一个 ``user=foo`` " +"对,则该脚本将会崩溃,因为在这种情况下 ``getvalue(\"user\")`` 方法调用将返回一个列表而不是字符串。 在一个列表上调用 " +":meth:`~str.upper` 方法是不合法的(因为列表并没有这个方法)因而会引发 :exc:`AttributeError` 异常。" + +#: ../../library/cgi.rst:242 +msgid "" +"Therefore, the appropriate way to read form data values was to always use " +"the code which checks whether the obtained value is a single value or a list" +" of values. That's annoying and leads to less readable scripts." +msgstr "因此,读取表单数据值的正确方式应当总是使用检查所获取的值是单一值还是值列表的代码。 这很麻烦并且会使脚本缺乏可读性。" + +#: ../../library/cgi.rst:246 +msgid "" +"A more convenient approach is to use the methods " +":meth:`~FieldStorage.getfirst` and :meth:`~FieldStorage.getlist` provided by" +" this higher level interface." +msgstr "" +"一种更便捷的方式是使用这个更高层级接口所提供的 :meth:`~FieldStorage.getfirst` 和 " +":meth:`~FieldStorage.getlist` 方法。" + +#: ../../library/cgi.rst:252 +msgid "" +"This method always returns only one value associated with form field *name*." +" The method returns only the first value in case that more values were " +"posted under such name. Please note that the order in which the values are " +"received may vary from browser to browser and should not be counted on. [#]_" +" If no such form field or value exists then the method returns the value " +"specified by the optional parameter *default*. This parameter defaults to " +"``None`` if not specified." +msgstr "" +"此方法总是只返回与表单字段 *name* 相关联的单一值。 此方法在同一名称下提交了多个值的情况下将仅返回第一个值。 " +"请注意所接收的值顺序在不同浏览器上可能发生变化因而是不确定的。 [#]_ 如果指定的表单字段或值不存在则此方法将返回可选形参 *default* " +"所指定的值。 如果未指定此形参则默认值为 ``None``。" + +#: ../../library/cgi.rst:263 +msgid "" +"This method always returns a list of values associated with form field " +"*name*. The method returns an empty list if no such form field or value " +"exists for *name*. It returns a list consisting of one item if only one " +"such value exists." +msgstr "" +"此方法总是返回与表单字段 *name* 相关联的值列表。 如果 *name* 指定的表单字段或值不存在则此方法将返回一个空列表。 " +"如果指定的表单字段只包含一个值则它将返回只有一项的列表。" + +#: ../../library/cgi.rst:267 +msgid "Using these methods you can write nice compact code::" +msgstr "使用这两个方法你将能写出优雅简洁的代码::" + +#: ../../library/cgi.rst:279 +msgid "Functions" +msgstr "函数" + +#: ../../library/cgi.rst:281 +msgid "" +"These are useful if you want more control, or if you want to employ some of " +"the algorithms implemented in this module in other circumstances." +msgstr "这些函数在你想要更多控制,或者如果你想要应用一些此模块中在其他场景下实现的算法时很有用处。" + +#: ../../library/cgi.rst:287 +msgid "" +"Parse a query in the environment or from a file (the file defaults to " +"``sys.stdin``). The *keep_blank_values*, *strict_parsing* and *separator* " +"parameters are passed to :func:`urllib.parse.parse_qs` unchanged." +msgstr "" +"在环境中或从某个文件中解析一个查询 (文件默认为 ``sys.stdin``)。 *keep_blank_values*, " +"*strict_parsing* 和 *separator* 形参会被原样传给 :func:`urllib.parse.parse_qs`。" + +#: ../../library/cgi.rst:294 +msgid "" +"Parse input of type :mimetype:`multipart/form-data` (for file uploads). " +"Arguments are *fp* for the input file, *pdict* for a dictionary containing " +"other parameters in the :mailheader:`Content-Type` header, and *encoding*, " +"the request encoding." +msgstr "" +"解析 :mimetype:`multipart/form-data` 类型(用于文件上传)的输入。 参数中 *fp* 为输入文件,*pdict* 为包含" +" :mailheader:`Content-Type` 标头中的其他形参的字典,*encoding* 为请求的编码格式。" + +#: ../../library/cgi.rst:299 +msgid "" +"Returns a dictionary just like :func:`urllib.parse.parse_qs`: keys are the " +"field names, each value is a list of values for that field. For non-file " +"fields, the value is a list of strings." +msgstr "" +"像 :func:`urllib.parse.parse_qs` 那样返回一个字典:其中的键为字段名称,值为对应字段的值列表。 " +"对于非文件字段,其值均为字符串列表。" + +#: ../../library/cgi.rst:303 +msgid "" +"This is easy to use but not much good if you are expecting megabytes to be " +"uploaded --- in that case, use the :class:`FieldStorage` class instead which" +" is much more flexible." +msgstr "" +"这很容易使用,但如果你预期要上传巨量字节数据时就不太适合了 --- 在这种情况下,请改用更为灵活的 :class:`FieldStorage` 类。" + +#: ../../library/cgi.rst:307 +msgid "" +"Added the *encoding* and *errors* parameters. For non-file fields, the " +"value is now a list of strings, not bytes." +msgstr "增加了 *encoding* 和 *errors* 形参。 对于非文件字段,其值现在为字符串列表而非字节串列表。" + +#: ../../library/cgi.rst:311 +msgid "Added the *separator* parameter." +msgstr "增加了 *separator* 形参。" + +#: ../../library/cgi.rst:317 +msgid "" +"Parse a MIME header (such as :mailheader:`Content-Type`) into a main value " +"and a dictionary of parameters." +msgstr "将一个 MIME 标头 (例如 :mailheader:`Content-Type`) 解析为一个主值和一个参数字典。" + +#: ../../library/cgi.rst:323 +msgid "" +"Robust test CGI script, usable as main program. Writes minimal HTTP headers " +"and formats all information provided to the script in HTML format." +msgstr "对 CGI 执行健壮性检测,适于作为主程序。 写入最小化的 HTTP 标头并以 HTML 格式来格式化提供给脚本的所有信息。" + +#: ../../library/cgi.rst:329 +msgid "Format the shell environment in HTML." +msgstr "以 HTML 格式来格式化 shell 环境。" + +#: ../../library/cgi.rst:334 +msgid "Format a form in HTML." +msgstr "以 HTML 格式来格式化表单。" + +#: ../../library/cgi.rst:339 +msgid "Format the current directory in HTML." +msgstr "以 HTML 格式来格式化当前目录。" + +#: ../../library/cgi.rst:344 +msgid "Print a list of useful (used by CGI) environment variables in HTML." +msgstr "以 HTML 格式打印有用的环境变量列表(供 CGI 使用)。" + +#: ../../library/cgi.rst:350 +msgid "Caring about security" +msgstr "对于安全性的关注" + +#: ../../library/cgi.rst:354 +msgid "" +"There's one important rule: if you invoke an external program (via " +":func:`os.system`, :func:`os.popen` or other functions with similar " +"functionality), make very sure you don't pass arbitrary strings received " +"from the client to the shell. This is a well-known security hole whereby " +"clever hackers anywhere on the Web can exploit a gullible CGI script to " +"invoke arbitrary shell commands. Even parts of the URL or field names " +"cannot be trusted, since the request doesn't have to come from your form!" +msgstr "" +"有一条重要的规则:如果你发起调用一个外部程序(通过 :func:`os.system`, :func:`os.popen` " +"或其他具有类似功能的函数),需要非常确定你不会把从客户端接收的任意字符串直接传给 shell。 " +"这是一个著名的安全漏洞,网络中聪明的黑客可以通过它来利用容易上当的 CGI 脚本发起调用任何 shell 命令。 即使 URL " +"的一部分或字段名称也是不可信任的,因为请求并不一定是来自你的表单!" + +#: ../../library/cgi.rst:362 +msgid "" +"To be on the safe side, if you must pass a string gotten from a form to a " +"shell command, you should make sure the string contains only alphanumeric " +"characters, dashes, underscores, and periods." +msgstr "为了安全起见,如果你必须将从表单获取的字符串传给 shell 命令,你应当确保该字符串仅包含字母数字类字符、连字符、下划线和句点。" + +#: ../../library/cgi.rst:368 +msgid "Installing your CGI script on a Unix system" +msgstr "在 Unix 系统上安装你的 CGI 脚本" + +#: ../../library/cgi.rst:370 +msgid "" +"Read the documentation for your HTTP server and check with your local system" +" administrator to find the directory where CGI scripts should be installed; " +"usually this is in a directory :file:`cgi-bin` in the server tree." +msgstr "" +"请阅读你的 HTTP 服务器的文档并咨询你所用系统的管理员来找到 CGI 脚本应当安装到哪个目录;通常是服务器目录树中的 :file:`cgi-bin`" +" 目录。" + +#: ../../library/cgi.rst:374 +msgid "" +"Make sure that your script is readable and executable by \"others\"; the " +"Unix file mode should be ``0o755`` octal (use ``chmod 0755 filename``). " +"Make sure that the first line of the script contains ``#!`` starting in " +"column 1 followed by the pathname of the Python interpreter, for instance::" +msgstr "" +"请确保你的脚本可被“其他人”读取和执行;Unix 文件模式应为八进制数 ``0o755`` (使用 ``chmod 0755 filename``)。 " +"请确保脚本的第一行包含 ``#!`` 且位置是从第 1 列开始,后面带有 Python 解释器的路径名,例如::" + +#: ../../library/cgi.rst:381 +msgid "Make sure the Python interpreter exists and is executable by \"others\"." +msgstr "请确保该 Python 解释器存在并且可被“其他人”执行。" + +#: ../../library/cgi.rst:383 +msgid "" +"Make sure that any files your script needs to read or write are readable or " +"writable, respectively, by \"others\" --- their mode should be ``0o644`` for" +" readable and ``0o666`` for writable. This is because, for security " +"reasons, the HTTP server executes your script as user \"nobody\", without " +"any special privileges. It can only read (write, execute) files that " +"everybody can read (write, execute). The current directory at execution " +"time is also different (it is usually the server's cgi-bin directory) and " +"the set of environment variables is also different from what you get when " +"you log in. In particular, don't count on the shell's search path for " +"executables (:envvar:`PATH`) or the Python module search path " +"(:envvar:`PYTHONPATH`) to be set to anything interesting." +msgstr "" +"请确保你的脚本需要读取或写入的任何文件都分别是“其他人”可读取或可写入的 --- 它们的模式应为可读取 ``0o644`` 或可写入 " +"``0o666``。 这是因为出于安全理由,HTTP 服务器是作为没有任何特殊权限的 \"nobody\" 用户来运行脚本的。 " +"它只能读取(写入、执行)任何人都能读取(写入、执行)的文件。 执行时的当前目录(通常为服务器的 cgi-bin " +"目录)和环境变量集合也与你在登录时所得到的不同。 特别地,不可依赖于 shell 的可执行文件搜索路径 (:envvar:`PATH`) 或 " +"Python 模块搜索路径 (:envvar:`PYTHONPATH`) 的任何相关设置。" + +#: ../../library/cgi.rst:394 +msgid "" +"If you need to load modules from a directory which is not on Python's " +"default module search path, you can change the path in your script, before " +"importing other modules. For example::" +msgstr "如果你需要从 Python 的默认模块搜索路径之外的目录载入模块,你可以在导入其他模块之前在你的脚本中改变路径。 例如::" + +#: ../../library/cgi.rst:402 +msgid "(This way, the directory inserted last will be searched first!)" +msgstr "(在此方式下,最后插入的目录将最先被搜索!)" + +#: ../../library/cgi.rst:404 +msgid "" +"Instructions for non-Unix systems will vary; check your HTTP server's " +"documentation (it will usually have a section on CGI scripts)." +msgstr "针对非 Unix 系统的指导会有所变化;请查看你的 HTTP 服务器的文档(通常会有关于 CGI 脚本的部分)。" + +#: ../../library/cgi.rst:409 +msgid "Testing your CGI script" +msgstr "测试你的 CGI 脚本" + +#: ../../library/cgi.rst:411 +msgid "" +"Unfortunately, a CGI script will generally not run when you try it from the " +"command line, and a script that works perfectly from the command line may " +"fail mysteriously when run from the server. There's one reason why you " +"should still test your script from the command line: if it contains a syntax" +" error, the Python interpreter won't execute it at all, and the HTTP server " +"will most likely send a cryptic error to the client." +msgstr "" +"很不幸,当你在命令行中尝试 CGI 脚本时它通常会无法运行,而能在命令行中完美运行的脚本则可能会在运行于服务器时神秘地失败。 " +"但有一个理由使你仍然应当在命令行中测试你的脚本:如果它包含语法错误,Python 解释器将根本不会执行它,而 HTTP " +"服务器将很可能向客户端发送令人费解的错误信息。" + +#: ../../library/cgi.rst:418 +msgid "" +"Assuming your script has no syntax errors, yet it does not work, you have no" +" choice but to read the next section." +msgstr "假定你的脚本没有语法错误,但它仍然无法起作用,你将别无选择,只能继续阅读下一节。" + +#: ../../library/cgi.rst:423 +msgid "Debugging CGI scripts" +msgstr "调试 CGI 脚本" + +#: ../../library/cgi.rst:427 +msgid "" +"First of all, check for trivial installation errors --- reading the section " +"above on installing your CGI script carefully can save you a lot of time. " +"If you wonder whether you have understood the installation procedure " +"correctly, try installing a copy of this module file (:file:`cgi.py`) as a " +"CGI script. When invoked as a script, the file will dump its environment " +"and the contents of the form in HTML format. Give it the right mode etc., " +"and send it a request. If it's installed in the standard :file:`cgi-bin` " +"directory, it should be possible to send it a request by entering a URL into" +" your browser of the form:" +msgstr "" +"首先,请检查是否有安装上的小错误 --- 仔细阅读上面关于安装 CGI 脚本的部分可以使你节省大量时间。 " +"如果你不确定你是否正确理解了安装过程,请尝试将此模块 (:file:`cgi.py`) 的副本作为 CGI 脚本安装。 " +"当作为脚本被发起调用时,该文件将以 HTML 格式转储其环境和表单内容。 请给它赋予正确的模式等,并向它发送一个请求。 如果它是安装在标准的 " +":file:`cgi-bin` 目录下,应该可以通过在你的浏览器中输入表单的 URL 来向它发送请求。" + +#: ../../library/cgi.rst:440 +msgid "" +"If this gives an error of type 404, the server cannot find the script -- " +"perhaps you need to install it in a different directory. If it gives " +"another error, there's an installation problem that you should fix before " +"trying to go any further. If you get a nicely formatted listing of the " +"environment and form content (in this example, the fields should be listed " +"as \"addr\" with value \"At Home\" and \"name\" with value \"Joe Blow\"), " +"the :file:`cgi.py` script has been installed correctly. If you follow the " +"same procedure for your own script, you should now be able to debug it." +msgstr "" +"如果此操作给出类型为 404 的错误,说明服务器找不到此脚本 -- 也许你需要将它安装到不同的目录。 " +"如果它给出另一种错误,说明存在安装问题,你应当解决此问题才能继续操作。 如果你得到一个格式良好的环境和表单内容清单(在这个例子中,应当会列出的有字段 " +"\"addr\" 值为 \"At Home\" 以及 \"name\" 值为 \"Joe Blow\"),则说明 :file:`cgi.py` " +"脚本已正确安装。 如果你为自己的脚本执行了同样的过程,现在你应该能够调试它了。" + +#: ../../library/cgi.rst:449 +msgid "" +"The next step could be to call the :mod:`cgi` module's :func:`test` function" +" from your script: replace its main code with the single statement ::" +msgstr "下一步骤可以是在你的脚本中调用 :mod:`cgi` 模块的 :func:`test` 函数:用这一条语句替换它的主代码 ::" + +#: ../../library/cgi.rst:454 +msgid "" +"This should produce the same results as those gotten from installing the " +":file:`cgi.py` file itself." +msgstr "这将产生从安装 :file:`cgi.py` 文件本身所得到的相同结果。" + +#: ../../library/cgi.rst:457 +msgid "" +"When an ordinary Python script raises an unhandled exception (for whatever " +"reason: of a typo in a module name, a file that can't be opened, etc.), the " +"Python interpreter prints a nice traceback and exits. While the Python " +"interpreter will still do this when your CGI script raises an exception, " +"most likely the traceback will end up in one of the HTTP server's log files," +" or be discarded altogether." +msgstr "" +"当某个常规 Python 脚本触发了未处理的异常,(无论出于什么原因:模块名称出错、文件无法打开等),Python " +"解释器就会打印出一条完整的跟踪信息并退出。在 CGI 脚本触发异常时,Python 解释器依然会如此,但最有可能的是,跟踪信息只会停留在某个 HTTP " +"服务日志文件中,或者被完全丢弃。" + +#: ../../library/cgi.rst:464 +msgid "" +"Fortunately, once you have managed to get your script to execute *some* " +"code, you can easily send tracebacks to the Web browser using the " +":mod:`cgitb` module. If you haven't done so already, just add the lines::" +msgstr "" +"幸运的是,只要执行 *某些* 代码,就可以利用 :mod:`cgitb` 模块将跟踪信息发送给浏览器。 如果你还没有这样做过,只需添加以下几行代码::" + +#: ../../library/cgi.rst:471 +msgid "" +"to the top of your script. Then try running it again; when a problem " +"occurs, you should see a detailed report that will likely make apparent the " +"cause of the crash." +msgstr "然后再运行一下看;发生问题时应能看到详细的报告,或许能让崩溃的原因更清晰一些。" + +#: ../../library/cgi.rst:475 +msgid "" +"If you suspect that there may be a problem in importing the :mod:`cgitb` " +"module, you can use an even more robust approach (which only uses built-in " +"modules)::" +msgstr "如果怀疑是 :mod:`cgitb` 模块导入的问题,可以采用一个功能更强的方法(只用到内置模块):" + +#: ../../library/cgi.rst:484 +msgid "" +"This relies on the Python interpreter to print the traceback. The content " +"type of the output is set to plain text, which disables all HTML processing." +" If your script works, the raw HTML will be displayed by your client. If " +"it raises an exception, most likely after the first two lines have been " +"printed, a traceback will be displayed. Because no HTML interpretation is " +"going on, the traceback will be readable." +msgstr "" +"这得靠 Python 解释器来打印跟踪信息。输出的类型为纯文本,不经过任何 HTML 处理。如果代码正常,则客户端会显示原有的 " +"HTML。如果触发了异常,很可能在输出前两行后会显示一条跟踪信息。因为不会继续进行 HTML 解析,所以跟踪信息肯定能被读到。" + +#: ../../library/cgi.rst:493 +msgid "Common problems and solutions" +msgstr "常见问题和解决方案" + +#: ../../library/cgi.rst:495 +msgid "" +"Most HTTP servers buffer the output from CGI scripts until the script is " +"completed. This means that it is not possible to display a progress report " +"on the client's display while the script is running." +msgstr "" +"大部分 HTTP 服务器会对 CGI 脚本的输出进行缓存,等脚本执行完毕再行输出。这意味着在脚本运行时,不可能在客户端屏幕上显示出进度情况。" + +#: ../../library/cgi.rst:499 +msgid "Check the installation instructions above." +msgstr "请查看上述安装说明。" + +#: ../../library/cgi.rst:501 +msgid "" +"Check the HTTP server's log files. (``tail -f logfile`` in a separate " +"window may be useful!)" +msgstr "请查看 HTTP 服务器的日志文件。(在另一个单独窗口中执行 ``tail -f logfile`` 可能会很有用!)" + +#: ../../library/cgi.rst:504 +msgid "" +"Always check a script for syntax errors first, by doing something like " +"``python script.py``." +msgstr "一定要先检查脚本是否有语法错误,做法类似:``python script.py`` 。" + +#: ../../library/cgi.rst:507 +msgid "" +"If your script does not have any syntax errors, try adding ``import cgitb; " +"cgitb.enable()`` to the top of the script." +msgstr "如果脚本没有语法错误,试着在脚本的顶部添加 ``import cgitb; cgitb.enable()``。" + +#: ../../library/cgi.rst:510 +msgid "" +"When invoking external programs, make sure they can be found. Usually, this " +"means using absolute path names --- :envvar:`PATH` is usually not set to a " +"very useful value in a CGI script." +msgstr "" +"当调用外部程序时,要确保其可被读取。通常这意味着采用绝对路径名------ 在 CGI 脚本中, :envvar:`PATH` 的值通常没什么用。" + +#: ../../library/cgi.rst:514 +msgid "" +"When reading or writing external files, make sure they can be read or " +"written by the userid under which your CGI script will be running: this is " +"typically the userid under which the web server is running, or some " +"explicitly specified userid for a web server's ``suexec`` feature." +msgstr "" +"在读写外部文件时,要确保其能被 CGI 脚本归属的用户读写:通常是运行网络服务的用户,或由网络服务的 ``suexec`` 功能明确指定的一些用户。" + +#: ../../library/cgi.rst:519 +msgid "" +"Don't try to give a CGI script a set-uid mode. This doesn't work on most " +"systems, and is a security liability as well." +msgstr "不要试图给 CGI 脚本赋予 set-uid 模式。这在大多数系统上都行不通,出于安全考虑也不应如此。" + +#: ../../library/cgi.rst:523 +msgid "Footnotes" +msgstr "备注" + +#: ../../library/cgi.rst:524 +msgid "" +"Note that some recent versions of the HTML specification do state what order" +" the field values should be supplied in, but knowing whether a request was " +"received from a conforming browser, or even from a browser at all, is " +"tedious and error-prone." +msgstr "" +"请注意,新版的 HTML 规范确实注明了请求字段的顺序,但判断请求是否合法非常繁琐和容易出错,可能来自不符合要求的浏览器,甚至不是来自浏览器。" diff --git a/library/cgitb.po b/library/cgitb.po new file mode 100644 index 000000000..b3eb54d33 --- /dev/null +++ b/library/cgitb.po @@ -0,0 +1,127 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) 2001-2022, Python Software Foundation +# This file is distributed under the same license as the Python package. +# FIRST AUTHOR , YEAR. +# +# Translators: +# Freesand Leo , 2022 +# +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: Python 3.9\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2022-11-04 14:34+0000\n" +"PO-Revision-Date: 2017-02-16 19:37+0000\n" +"Last-Translator: Freesand Leo , 2022\n" +"Language-Team: Chinese (China) (https://www.transifex.com/python-doc/teams/5390/zh_CN/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: zh_CN\n" +"Plural-Forms: nplurals=1; plural=0;\n" + +#: ../../library/cgitb.rst:2 +msgid ":mod:`cgitb` --- Traceback manager for CGI scripts" +msgstr ":mod:`cgitb` --- 用于 CGI 脚本的回溯管理器" + +#: ../../library/cgitb.rst:11 +msgid "**Source code:** :source:`Lib/cgitb.py`" +msgstr "**源代码:** :source:`Lib/cgitb.py`" + +#: ../../library/cgitb.rst:19 +msgid "" +"The :mod:`cgitb` module is deprecated (see :pep:`PEP 594 <594#cgitb>` for " +"details)." +msgstr ":mod:`cgitb` 模块已被弃用(请参阅 :pep:`PEP 594 <594#cgitb>` 了解详情)。" + +#: ../../library/cgitb.rst:25 +msgid "" +"The :mod:`cgitb` module provides a special exception handler for Python " +"scripts. (Its name is a bit misleading. It was originally designed to " +"display extensive traceback information in HTML for CGI scripts. It was " +"later generalized to also display this information in plain text.) After " +"this module is activated, if an uncaught exception occurs, a detailed, " +"formatted report will be displayed. The report includes a traceback showing" +" excerpts of the source code for each level, as well as the values of the " +"arguments and local variables to currently running functions, to help you " +"debug the problem. Optionally, you can save this information to a file " +"instead of sending it to the browser." +msgstr "" +":mod:`cgitb` 模块提供了用于 Python 脚本的特殊异常处理程序。 (这个名称有一点误导性。 它最初是设计用来显示 HTML 格式的 " +"CGI 脚本详细回溯信息。 但后来被一般化为也可显示纯文本格式的回溯信息。) 激活这个模块之后,如果发生了未被捕获的异常,将会显示详细的已格式化的报告。" +" 报告显示内容包括每个层级的源代码摘录,还有当前正在运行的函数的参数和局部变量值,以帮助你调试问题。 " +"你也可以选择将此信息保存至文件而不是将其发送至浏览器。" + +#: ../../library/cgitb.rst:35 +msgid "" +"To enable this feature, simply add this to the top of your CGI script::" +msgstr "要启用此特性,只需简单地将此代码添加到你的 CGI 脚本的最顶端::" + +#: ../../library/cgitb.rst:40 +msgid "" +"The options to the :func:`enable` function control whether the report is " +"displayed in the browser and whether the report is logged to a file for " +"later analysis." +msgstr ":func:`enable` 函数的选项可以控制是将报告显示在浏览器中,还是将报告记录到文件供以后进行分析。" + +#: ../../library/cgitb.rst:49 +msgid "" +"This function causes the :mod:`cgitb` module to take over the interpreter's " +"default handling for exceptions by setting the value of " +":attr:`sys.excepthook`." +msgstr "此函数可通过设置 :attr:`sys.excepthook` 的值以使 :mod:`cgitb` 模块接管解释器默认的异常处理机制。" + +#: ../../library/cgitb.rst:52 +msgid "" +"The optional argument *display* defaults to ``1`` and can be set to ``0`` to" +" suppress sending the traceback to the browser. If the argument *logdir* is " +"present, the traceback reports are written to files. The value of *logdir* " +"should be a directory where these files will be placed. The optional " +"argument *context* is the number of lines of context to display around the " +"current line of source code in the traceback; this defaults to ``5``. If the" +" optional argument *format* is ``\"html\"``, the output is formatted as " +"HTML. Any other value forces plain text output. The default value is " +"``\"html\"``." +msgstr "" +"可选参数 *display* 默认为 ``1`` 并可被设为 ``0`` 来停止将回溯发送至浏览器。 如果给出了参数 " +"*logdir*,则回溯会被写入文件。 *logdir* 的值应当是一个用于存放所写入文件的目录。 可选参数 *context* " +"是要在回溯中的当前源代码行前后显示的上下文行数;默认为 ``5``。 如果可选参数 *format* 为 ``\"html\"``,输出将为 HTML " +"格式。 任何其它值都会强制启用纯文本输出。 默认取值为 ``\"html\"``。" + +#: ../../library/cgitb.rst:64 +msgid "" +"This function handles the exception described by *info* (a 3-tuple " +"containing the result of :func:`sys.exc_info`), formatting its traceback as " +"text and returning the result as a string. The optional argument *context* " +"is the number of lines of context to display around the current line of " +"source code in the traceback; this defaults to ``5``." +msgstr "" +"此函数用于处理 *info* (一个包含 :func:`sys.exc_info` 返回结果的 3 元组) " +"所描述的异常,将其回溯格式化为文本并将结果作为字符串返回。 可选参数 *context* 是要在回溯中的当前源码行前后显示的上下文行数;默认为 " +"``5``。" + +#: ../../library/cgitb.rst:73 +msgid "" +"This function handles the exception described by *info* (a 3-tuple " +"containing the result of :func:`sys.exc_info`), formatting its traceback as " +"HTML and returning the result as a string. The optional argument *context* " +"is the number of lines of context to display around the current line of " +"source code in the traceback; this defaults to ``5``." +msgstr "" +"此函数用于处理 *info* (一个包含 :func:`sys.exc_info` 返回结果的 3 元组) 所描述的异常,将其回溯格式化为 HTML " +"并将结果作为字符串返回。 可选参数 *context* 是要在回溯中的当前源码行前后显示的上下文行数;默认为 ``5``。" + +#: ../../library/cgitb.rst:82 +msgid "" +"This function handles an exception using the default settings (that is, show" +" a report in the browser, but don't log to a file). This can be used when " +"you've caught an exception and want to report it using :mod:`cgitb`. The " +"optional *info* argument should be a 3-tuple containing an exception type, " +"exception value, and traceback object, exactly like the tuple returned by " +":func:`sys.exc_info`. If the *info* argument is not supplied, the current " +"exception is obtained from :func:`sys.exc_info`." +msgstr "" +"此函数使用默认设置处理异常(即在浏览器中显示报告,但不记录到文件)。 当你捕获了一个异常并希望使用 :mod:`cgitb` 来报告它时可以使用此函数。" +" 可选的 *info* 参数应为一个包含异常类型,异常值和回溯对象的 3 元组,与 :func:`sys.exc_info` 所返回的元组完全一致。 " +"如果未提供 *info* 参数,则会从 :func:`sys.exc_info` 获取当前异常。" diff --git a/library/chunk.po b/library/chunk.po new file mode 100644 index 000000000..840c69ac5 --- /dev/null +++ b/library/chunk.po @@ -0,0 +1,232 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) 2001-2024, Python Software Foundation +# This file is distributed under the same license as the Python package. +# FIRST AUTHOR , YEAR. +# +# Translators: +# Yinuo Huang , 2017 +# Alpha Du , 2019 +# walkinrain , 2019 +# ppcfish , 2019 +# Freesand Leo , 2022 +# Rafael Fontenelle , 2024 +# +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: Python 3.9\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2024-02-16 21:12+0000\n" +"PO-Revision-Date: 2017-02-16 19:37+0000\n" +"Last-Translator: Rafael Fontenelle , 2024\n" +"Language-Team: Chinese (China) (https://app.transifex.com/python-doc/teams/5390/zh_CN/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: zh_CN\n" +"Plural-Forms: nplurals=1; plural=0;\n" + +#: ../../library/chunk.rst:2 +msgid ":mod:`chunk` --- Read IFF chunked data" +msgstr ":mod:`chunk` --- 读取 IFF 分块数据" + +#: ../../library/chunk.rst:11 +msgid "**Source code:** :source:`Lib/chunk.py`" +msgstr "**源代码:** :source:`Lib/chunk.py`" + +#: ../../library/chunk.rst:20 +msgid "" +"The :mod:`chunk` module is deprecated (see :pep:`PEP 594 <594#chunk>` for " +"details)." +msgstr ":mod:`chunk` 模块已被弃用(请参阅 :pep:`PEP 594 <594#chunk>` 了解详情)。" + +#: ../../library/chunk.rst:26 +msgid "" +"This module provides an interface for reading files that use EA IFF 85 " +"chunks. [#]_ This format is used in at least the Audio Interchange File " +"Format (AIFF/AIFF-C) and the Real Media File Format (RMFF). The WAVE audio " +"file format is closely related and can also be read using this module." +msgstr "" +"本模块提供了一个读取使用 EA IFF 85 分块的数据的接口chunks. [#]_ 这种格式使用的场合有 Audio Interchange " +"File Format (AIFF/AIFF-C) 和 Real Media File Format (RMFF) 等。 与它们密切相关的 WAVE " +"音频文件也可使用此模块来读取。" + +#: ../../library/chunk.rst:31 +msgid "A chunk has the following structure:" +msgstr "一个分块具有以下结构:" + +#: ../../library/chunk.rst:34 +msgid "Offset" +msgstr "偏移" + +#: ../../library/chunk.rst:34 +msgid "Length" +msgstr "长度" + +#: ../../library/chunk.rst:34 +msgid "Contents" +msgstr "目录" + +#: ../../library/chunk.rst:36 +msgid "0" +msgstr "0" + +#: ../../library/chunk.rst:36 ../../library/chunk.rst:38 +#: ../../library/chunk.rst:38 +msgid "4" +msgstr "4" + +#: ../../library/chunk.rst:36 +msgid "Chunk ID" +msgstr "区块ID" + +#: ../../library/chunk.rst:38 +msgid "Size of chunk in big-endian byte order, not including the header" +msgstr "大端字节顺序的块大小,不包括头" + +#: ../../library/chunk.rst:42 +msgid "8" +msgstr "8" + +#: ../../library/chunk.rst:42 +msgid "*n*" +msgstr "*n*" + +#: ../../library/chunk.rst:42 +msgid "Data bytes, where *n* is the size given in the preceding field" +msgstr "数据字节,其中 *n* 是前一字段中给出的大小" + +#: ../../library/chunk.rst:46 +msgid "8 + *n*" +msgstr "8 + *n*" + +#: ../../library/chunk.rst:46 +msgid "0 or 1" +msgstr "0 或 1" + +#: ../../library/chunk.rst:46 +msgid "Pad byte needed if *n* is odd and chunk alignment is used" +msgstr "如果 *n* 为奇数且使用块对齐,则需要填充字节" + +#: ../../library/chunk.rst:50 +msgid "The ID is a 4-byte string which identifies the type of chunk." +msgstr "ID是一个4字节的字符串,用于标识块的类型。" + +#: ../../library/chunk.rst:52 +msgid "" +"The size field (a 32-bit value, encoded using big-endian byte order) gives " +"the size of the chunk data, not including the 8-byte header." +msgstr "大小字段(32 位的值,使用大端字节序编码)给出分块数据的大小,不包括 8 字节的标头。" + +#: ../../library/chunk.rst:55 +msgid "" +"Usually an IFF-type file consists of one or more chunks. The proposed usage" +" of the :class:`Chunk` class defined here is to instantiate an instance at " +"the start of each chunk and read from the instance until it reaches the end," +" after which a new instance can be instantiated. At the end of the file, " +"creating a new instance will fail with an :exc:`EOFError` exception." +msgstr "" +"使用由一个或更多分块组成的 IFF 类型文件。 此处定义的 :class:`Chunk` " +"类的建议使用方式是在每个分块开始时实例化一个实例并从实例读取直到其末尾,在那之后可以再实例化新的实例。 到达文件末尾时,创建新实例将会失败并引发 " +":exc:`EOFError` 异常。" + +#: ../../library/chunk.rst:64 +msgid "" +"Class which represents a chunk. The *file* argument is expected to be a " +"file-like object. An instance of this class is specifically allowed. The " +"only method that is needed is :meth:`~io.IOBase.read`. If the methods " +":meth:`~io.IOBase.seek` and :meth:`~io.IOBase.tell` are present and don't " +"raise an exception, they are also used. If these methods are present and " +"raise an exception, they are expected to not have altered the object. If " +"the optional argument *align* is true, chunks are assumed to be aligned on " +"2-byte boundaries. If *align* is false, no alignment is assumed. The " +"default value is true. If the optional argument *bigendian* is false, the " +"chunk size is assumed to be in little-endian order. This is needed for WAVE " +"audio files. The default value is true. If the optional argument " +"*inclheader* is true, the size given in the chunk header includes the size " +"of the header. The default value is false." +msgstr "" +"代表一个分块的类。 *file* 参数预期为一个文件型对象。 特别地也允许该类的实例。 唯一必需的方法是 " +":meth:`~io.IOBase.read`。 如果存在 :meth:`~io.IOBase.seek` 和 " +":meth:`~io.IOBase.tell` 方法并且没有引发异常,它们也会被使用。 如果存在这些方法并且引发了异常,则它们不应改变目标对象。 " +"如果可选参数 *align* 为真值,则分块应当以 2 字节边界对齐。 如果 *align* 为假值,则不使用对齐。 此参数默认为真值。 如果可选参数 " +"*bigendian* 为假值,分块大小应当为小端序。 这对于 WAVE 音频文件是必须的。 此参数默认为真值。 如果可选参数 *inclheader*" +" 为真值,则分块标头中给出的大小将包括标头的大小。 此参数默认为假值。" + +#: ../../library/chunk.rst:78 +msgid "A :class:`Chunk` object supports the following methods:" +msgstr ":class:`Chunk` 对象支持下列方法:" + +#: ../../library/chunk.rst:83 +msgid "" +"Returns the name (ID) of the chunk. This is the first 4 bytes of the chunk." +msgstr "返回分块的名称(ID)。 这是分块的头 4 个字节。" + +#: ../../library/chunk.rst:89 +msgid "Returns the size of the chunk." +msgstr "返回分块的大小。" + +#: ../../library/chunk.rst:94 +msgid "" +"Close and skip to the end of the chunk. This does not close the underlying " +"file." +msgstr "关闭并跳转到分块的末尾。 这不会关闭下层的文件。" + +#: ../../library/chunk.rst:97 +msgid "" +"The remaining methods will raise :exc:`OSError` if called after the " +":meth:`close` method has been called. Before Python 3.3, they used to raise" +" :exc:`IOError`, now an alias of :exc:`OSError`." +msgstr "" +"在 :meth:`close` 方法已被调用后其余方法将会引发 :exc:`OSError`。 在 Python 3.3 之前,它们曾会引发 " +":exc:`IOError`,现在这是 :exc:`OSError` 的一个别名。" + +#: ../../library/chunk.rst:104 +msgid "Returns ``False``." +msgstr "返回 ``False``。" + +#: ../../library/chunk.rst:109 +msgid "" +"Set the chunk's current position. The *whence* argument is optional and " +"defaults to ``0`` (absolute file positioning); other values are ``1`` (seek " +"relative to the current position) and ``2`` (seek relative to the file's " +"end). There is no return value. If the underlying file does not allow seek," +" only forward seeks are allowed." +msgstr "" +"设置分块的当前位置。 *whence* 参数为可选项并且默认为 ``0`` (绝对文件定位);其他值还有 ``1`` (相对当前位置查找) 和 " +"``2`` (相对文件末尾查找)。 没有返回值。 如果下层文件不支持查找,则只允许向前查找。" + +#: ../../library/chunk.rst:118 +msgid "Return the current position into the chunk." +msgstr "将当前位置返回到分块。" + +#: ../../library/chunk.rst:123 +msgid "" +"Read at most *size* bytes from the chunk (less if the read hits the end of " +"the chunk before obtaining *size* bytes). If the *size* argument is " +"negative or omitted, read all data until the end of the chunk. An empty " +"bytes object is returned when the end of the chunk is encountered " +"immediately." +msgstr "" +"从分块读取至多 *size* 个字节(如果在获得 *size* 个字节之前已到达分块末尾则读取的字节会少于此数量)。 如果 *size* " +"参数为负值或被省略,则读取所有字节直到分块末尾。 当立即遇到分块末尾则返回空字节串对象。" + +#: ../../library/chunk.rst:132 +msgid "" +"Skip to the end of the chunk. All further calls to :meth:`read` for the " +"chunk will return ``b''``. If you are not interested in the contents of the" +" chunk, this method should be called so that the file points to the start of" +" the next chunk." +msgstr "" +"跳到分块末尾。此后对分块再次调用 :meth:`read` 将返回 ``b''``。 " +"如果你对分块的内容不感兴趣,则应当调用此方法以使文件指向下一分块的开头。" + +#: ../../library/chunk.rst:139 +msgid "Footnotes" +msgstr "备注" + +#: ../../library/chunk.rst:140 +msgid "" +"\"EA IFF 85\" Standard for Interchange Format Files, Jerry Morrison, " +"Electronic Arts, January 1985." +msgstr "\"EA IFF 85\" 交换格式文件标准, Jerry Morrison, Electronic Arts, 1985 年 1 月。" diff --git a/library/cmath.po b/library/cmath.po new file mode 100644 index 000000000..1a89e9d9b --- /dev/null +++ b/library/cmath.po @@ -0,0 +1,385 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) 2001-2022, Python Software Foundation +# This file is distributed under the same license as the Python package. +# FIRST AUTHOR , YEAR. +# +# Translators: +# focusheart , 2019 +# Dingyuan Wang , 2019 +# Alpha Du , 2019 +# 赵天畅 , 2019 +# Naisen Xu <723648649@qq.com>, 2019 +# Arisaka97 , 2019 +# Freesand Leo , 2020 +# +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: Python 3.9\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2022-11-04 14:34+0000\n" +"PO-Revision-Date: 2017-02-16 23:02+0000\n" +"Last-Translator: Freesand Leo , 2020\n" +"Language-Team: Chinese (China) (https://www.transifex.com/python-doc/teams/5390/zh_CN/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: zh_CN\n" +"Plural-Forms: nplurals=1; plural=0;\n" + +#: ../../library/cmath.rst:2 +msgid ":mod:`cmath` --- Mathematical functions for complex numbers" +msgstr ":mod:`cmath` --- 关于复数的数学函数" + +#: ../../library/cmath.rst:9 +msgid "" +"This module provides access to mathematical functions for complex numbers. " +"The functions in this module accept integers, floating-point numbers or " +"complex numbers as arguments. They will also accept any Python object that " +"has either a :meth:`__complex__` or a :meth:`__float__` method: these " +"methods are used to convert the object to a complex or floating-point " +"number, respectively, and the function is then applied to the result of the " +"conversion." +msgstr "" +"这一模块提供了一些关于复数的数学函数。 该模块的函数的参数为整数、浮点数或复数。 这些函数的参数也可为一个拥有 :meth:`__complex__` " +"或 :meth:`__float__` 方法的 Python 对象,这些方法分别用于将对象转换为复数和浮点数,这些函数作用于转换后的结果。" + +#: ../../library/cmath.rst:18 +msgid "" +"On platforms with hardware and system-level support for signed zeros, " +"functions involving branch cuts are continuous on *both* sides of the branch" +" cut: the sign of the zero distinguishes one side of the branch cut from the" +" other. On platforms that do not support signed zeros the continuity is as " +"specified below." +msgstr "" +"在具有对于有符号零的硬件和系统级支持的平台上,涉及支割线的函数在支割线的 *两侧* 都是连续的:零的符号可用来区别支割线的一侧和另一侧。 " +"在不支持有符号零的平台上,连续性的规则见下文。" + +#: ../../library/cmath.rst:26 +msgid "Conversions to and from polar coordinates" +msgstr "到极坐标和从极坐标的转换" + +#: ../../library/cmath.rst:28 +msgid "" +"A Python complex number ``z`` is stored internally using *rectangular* or " +"*Cartesian* coordinates. It is completely determined by its *real part* " +"``z.real`` and its *imaginary part* ``z.imag``. In other words::" +msgstr "" +"使用 *矩形坐标* 或 *笛卡尔坐标* 在内部存储 Python 复数 ``z``。 这完全取决于它的 *实部* ``z.real`` 和 *虚部* " +"``z.imag``。 换句话说::" + +#: ../../library/cmath.rst:35 +msgid "" +"*Polar coordinates* give an alternative way to represent a complex number. " +"In polar coordinates, a complex number *z* is defined by the modulus *r* and" +" the phase angle *phi*. The modulus *r* is the distance from *z* to the " +"origin, while the phase *phi* is the counterclockwise angle, measured in " +"radians, from the positive x-axis to the line segment that joins the origin " +"to *z*." +msgstr "" +"*极坐标* 提供了另一种复数的表示方法。在极坐标中,一个复数 *z* 由模量 *r* 和相位角 *phi* 来定义。模量 *r* 是从 *z* " +"到坐标原点的距离,而相位角 *phi* 是以弧度为单位的,逆时针的,从正X轴到连接原点和 *z* 的线段间夹角的角度。" + +#: ../../library/cmath.rst:42 +msgid "" +"The following functions can be used to convert from the native rectangular " +"coordinates to polar coordinates and back." +msgstr "下面的函数可用于原生直角坐标与极坐标的相互转换。" + +#: ../../library/cmath.rst:47 +msgid "" +"Return the phase of *x* (also known as the *argument* of *x*), as a float. " +"``phase(x)`` is equivalent to ``math.atan2(x.imag, x.real)``. The result " +"lies in the range [-\\ *π*, *π*], and the branch cut for this operation lies" +" along the negative real axis, continuous from above. On systems with " +"support for signed zeros (which includes most systems in current use), this " +"means that the sign of the result is the same as the sign of ``x.imag``, " +"even when ``x.imag`` is zero::" +msgstr "" +"将 *x* 的相位 (也称为 *x* 的 *参数*) 返回为一个浮点数。``phase(x)`` 相当于 ``math.atan2(x.imag, " +"x.real)``。 结果处于 [-\\ *π*, *π*] 之间,以及这个操作的分支切断处于负实轴上,从上方连续。 " +"在支持有符号零的系统上(这包涵大多数当前的常用系统),这意味着结果的符号与 ``x.imag`` 的符号相同,即使 ``x.imag`` 的值是 0::" + +#: ../../library/cmath.rst:64 +msgid "" +"The modulus (absolute value) of a complex number *x* can be computed using " +"the built-in :func:`abs` function. There is no separate :mod:`cmath` module" +" function for this operation." +msgstr "" +"一个复数 *x* 的模数(绝对值)可以通过内置函数 :func:`abs` 计算。没有单独的 :mod:`cmath` 模块函数用于这个操作。" + +#: ../../library/cmath.rst:71 +msgid "" +"Return the representation of *x* in polar coordinates. Returns a pair ``(r," +" phi)`` where *r* is the modulus of *x* and phi is the phase of *x*. " +"``polar(x)`` is equivalent to ``(abs(x), phase(x))``." +msgstr "" +"在极坐标中返回 *x* 的表达方式。返回一个数对 ``(r, phi)``,*r* 是 *x* 的模数,*phi* 是 *x* 的相位角。 " +"``polar(x)`` 相当于 ``(abs(x), phase(x))``。" + +#: ../../library/cmath.rst:79 +msgid "" +"Return the complex number *x* with polar coordinates *r* and *phi*. " +"Equivalent to ``r * (math.cos(phi) + math.sin(phi)*1j)``." +msgstr "" +"通过极坐标的 *r* 和 *phi* 返回复数 *x*。相当于 ``r * (math.cos(phi) + math.sin(phi)*1j)``。" + +#: ../../library/cmath.rst:84 +msgid "Power and logarithmic functions" +msgstr "幂函数与对数函数" + +#: ../../library/cmath.rst:88 +msgid "" +"Return *e* raised to the power *x*, where *e* is the base of natural " +"logarithms." +msgstr "返回 *e* 的 *x* 次方,*e* 是自然对数的底数。" + +#: ../../library/cmath.rst:94 +msgid "" +"Returns the logarithm of *x* to the given *base*. If the *base* is not " +"specified, returns the natural logarithm of *x*. There is one branch cut, " +"from 0 along the negative real axis to -∞, continuous from above." +msgstr "" +"返回给定 *base* 的 *x* 的对数。如果没有给定 *base*,返回 *x* 的自然对数。 从 0 到 -∞ 存在一条支割线,沿负实轴之上连续。" + +#: ../../library/cmath.rst:101 +msgid "" +"Return the base-10 logarithm of *x*. This has the same branch cut as " +":func:`log`." +msgstr "返回底数为 10 的 *x* 的对数。它具有与 :func:`log` 相同的支割线。" + +#: ../../library/cmath.rst:107 +msgid "" +"Return the square root of *x*. This has the same branch cut as :func:`log`." +msgstr "返回 *x* 的平方根。 它具有与 :func:`log` 相同的支割线。" + +#: ../../library/cmath.rst:111 +msgid "Trigonometric functions" +msgstr "三角函数" + +#: ../../library/cmath.rst:115 +msgid "" +"Return the arc cosine of *x*. There are two branch cuts: One extends right " +"from 1 along the real axis to ∞, continuous from below. The other extends " +"left from -1 along the real axis to -∞, continuous from above." +msgstr "" +"返回 *x* 的反余弦。这里有两条支割线:一条沿着实轴从 1 向右延伸到 ∞,从下面连续延伸。另外一条沿着实轴从 -1 向左延伸到 " +"-∞,从上面连续延伸。" + +#: ../../library/cmath.rst:122 +msgid "" +"Return the arc sine of *x*. This has the same branch cuts as :func:`acos`." +msgstr "返回 *x* 的反正弦。它与 :func:`acos` 有相同的支割线。" + +#: ../../library/cmath.rst:127 +msgid "" +"Return the arc tangent of *x*. There are two branch cuts: One extends from " +"``1j`` along the imaginary axis to ``∞j``, continuous from the right. The " +"other extends from ``-1j`` along the imaginary axis to ``-∞j``, continuous " +"from the left." +msgstr "" +"返回 *x* 的反正切。它具有两条支割线:一条沿着虚轴从 ``1j`` 延伸到 ``∞j``,向右持续延伸。另一条是沿着虚轴从 ``-1j`` 延伸到" +" ``-∞j`` ,向左持续延伸。" + +#: ../../library/cmath.rst:135 +msgid "Return the cosine of *x*." +msgstr "返回 *x* 的余弦。" + +#: ../../library/cmath.rst:140 +msgid "Return the sine of *x*." +msgstr "返回 *x* 的正弦。" + +#: ../../library/cmath.rst:145 +msgid "Return the tangent of *x*." +msgstr "返回 *x* 的正切。" + +#: ../../library/cmath.rst:149 +msgid "Hyperbolic functions" +msgstr "双曲函数" + +#: ../../library/cmath.rst:153 +msgid "" +"Return the inverse hyperbolic cosine of *x*. There is one branch cut, " +"extending left from 1 along the real axis to -∞, continuous from above." +msgstr "返回 *x* 的反双曲余弦。它有一条支割线沿着实轴从 1 到 -∞ 向左延伸,从上方持续延伸。" + +#: ../../library/cmath.rst:159 +msgid "" +"Return the inverse hyperbolic sine of *x*. There are two branch cuts: One " +"extends from ``1j`` along the imaginary axis to ``∞j``, continuous from the " +"right. The other extends from ``-1j`` along the imaginary axis to ``-∞j``, " +"continuous from the left." +msgstr "" +"返回 *x* 的反双曲正弦。它有两条支割线:一条沿着虚轴从 ``1j`` 向右持续延伸到 ``∞j``。另一条是沿着虚轴从 ``-1j`` " +"向左持续延伸到 ``-∞j``。" + +#: ../../library/cmath.rst:167 +msgid "" +"Return the inverse hyperbolic tangent of *x*. There are two branch cuts: One" +" extends from ``1`` along the real axis to ``∞``, continuous from below. The" +" other extends from ``-1`` along the real axis to ``-∞``, continuous from " +"above." +msgstr "" +"返回 *x* 的反双曲正切。它有两条支割线:一条是沿着实轴从 ``1`` 延展到 ``∞``,从下面持续延展。另一条是沿着实轴从 ``-1`` 延展到 " +"``-∞``,从上面持续延展。" + +#: ../../library/cmath.rst:175 +msgid "Return the hyperbolic cosine of *x*." +msgstr "返回 *x* 的双曲余弦值。" + +#: ../../library/cmath.rst:180 +msgid "Return the hyperbolic sine of *x*." +msgstr "返回 *x* 的双曲正弦值。" + +#: ../../library/cmath.rst:185 +msgid "Return the hyperbolic tangent of *x*." +msgstr "返回 *x* 的双曲正切值。" + +#: ../../library/cmath.rst:189 +msgid "Classification functions" +msgstr "分类函数" + +#: ../../library/cmath.rst:193 +msgid "" +"Return ``True`` if both the real and imaginary parts of *x* are finite, and " +"``False`` otherwise." +msgstr "如果 *x* 的实部和虚部都是有限的,则返回 ``True``,否则返回 ``False``。" + +#: ../../library/cmath.rst:201 +msgid "" +"Return ``True`` if either the real or the imaginary part of *x* is an " +"infinity, and ``False`` otherwise." +msgstr "如果 *x* 的实部或者虚部是无穷大的,则返回 ``True``,否则返回 ``False``。" + +#: ../../library/cmath.rst:207 +msgid "" +"Return ``True`` if either the real or the imaginary part of *x* is a NaN, " +"and ``False`` otherwise." +msgstr "如果 *x* 的实部或者虚部是 NaN,则返回 ``True`` ,否则返回 ``False``。" + +#: ../../library/cmath.rst:213 +msgid "" +"Return ``True`` if the values *a* and *b* are close to each other and " +"``False`` otherwise." +msgstr "若 *a* 和 *b* 的值比较接近则返回 ``True``,否则返回 ``False``。" + +#: ../../library/cmath.rst:216 +msgid "" +"Whether or not two values are considered close is determined according to " +"given absolute and relative tolerances." +msgstr "根据给定的绝对和相对容差确定两个值是否被认为是接近的。" + +#: ../../library/cmath.rst:219 +msgid "" +"*rel_tol* is the relative tolerance -- it is the maximum allowed difference " +"between *a* and *b*, relative to the larger absolute value of *a* or *b*. " +"For example, to set a tolerance of 5%, pass ``rel_tol=0.05``. The default " +"tolerance is ``1e-09``, which assures that the two values are the same " +"within about 9 decimal digits. *rel_tol* must be greater than zero." +msgstr "" +"*rel_tol* 是相对容差 —— 它是 *a* 和 *b* 之间允许的最大差值,相对于 *a* 或 *b* " +"的较大绝对值。例如,要设置5%的容差,请传递 ``rel_tol=0.05`` 。默认容差为 ``1e-09``,确保两个值在大约9位十进制数字内相同。" +" *rel_tol* 必须大于零。" + +#: ../../library/cmath.rst:225 +msgid "" +"*abs_tol* is the minimum absolute tolerance -- useful for comparisons near " +"zero. *abs_tol* must be at least zero." +msgstr "*abs_tol* 是最小绝对容差 —— 对于接近零的比较很有用。 *abs_tol* 必须至少为零。" + +#: ../../library/cmath.rst:228 +msgid "" +"If no errors occur, the result will be: ``abs(a-b) <= max(rel_tol * " +"max(abs(a), abs(b)), abs_tol)``." +msgstr "" +"如果没有错误发生,结果将是: ``abs(a-b) <= max(rel_tol * max(abs(a), abs(b)), abs_tol)`` 。" + +#: ../../library/cmath.rst:231 +msgid "" +"The IEEE 754 special values of ``NaN``, ``inf``, and ``-inf`` will be " +"handled according to IEEE rules. Specifically, ``NaN`` is not considered " +"close to any other value, including ``NaN``. ``inf`` and ``-inf`` are only " +"considered close to themselves." +msgstr "" +"IEEE 754特殊值 ``NaN`` , ``inf`` 和` `-inf`` 将根据IEEE规则处理。具体来说, ``NaN`` " +"不被认为接近任何其他值,包括 ``NaN`` 。 ``inf`` 和 ``-inf`` 只被认为接近自己。" + +#: ../../library/cmath.rst:240 +msgid ":pep:`485` -- A function for testing approximate equality" +msgstr ":pep:`485` —— 用于测试近似相等的函数" + +#: ../../library/cmath.rst:244 +msgid "Constants" +msgstr "常数" + +#: ../../library/cmath.rst:248 +msgid "The mathematical constant *π*, as a float." +msgstr "数学常数 *π* ,作为一个浮点数。" + +#: ../../library/cmath.rst:253 +msgid "The mathematical constant *e*, as a float." +msgstr "数学常数 *e* ,作为一个浮点数。" + +#: ../../library/cmath.rst:258 +msgid "The mathematical constant *τ*, as a float." +msgstr "数学常数 *τ* ,作为一个浮点数。" + +#: ../../library/cmath.rst:265 +msgid "Floating-point positive infinity. Equivalent to ``float('inf')``." +msgstr "浮点正无穷大。相当于 ``float('inf')``。" + +#: ../../library/cmath.rst:272 +msgid "" +"Complex number with zero real part and positive infinity imaginary part. " +"Equivalent to ``complex(0.0, float('inf'))``." +msgstr "具有零实部和正无穷虚部的复数。相当于 ``complex(0.0, float('inf'))``。" + +#: ../../library/cmath.rst:280 +msgid "" +"A floating-point \"not a number\" (NaN) value. Equivalent to " +"``float('nan')``." +msgstr "浮点“非数字”(NaN)值。相当于 ``float('nan')``。" + +#: ../../library/cmath.rst:288 +msgid "" +"Complex number with zero real part and NaN imaginary part. Equivalent to " +"``complex(0.0, float('nan'))``." +msgstr "具有零实部和 NaN 虚部的复数。相当于 ``complex(0.0, float('nan'))``。" + +#: ../../library/cmath.rst:296 +msgid "" +"Note that the selection of functions is similar, but not identical, to that " +"in module :mod:`math`. The reason for having two modules is that some users" +" aren't interested in complex numbers, and perhaps don't even know what they" +" are. They would rather have ``math.sqrt(-1)`` raise an exception than " +"return a complex number. Also note that the functions defined in " +":mod:`cmath` always return a complex number, even if the answer can be " +"expressed as a real number (in which case the complex number has an " +"imaginary part of zero)." +msgstr "" +"请注意,函数的选择与模块 :mod:`math` 中的函数选择相似,但不完全相同。 " +"拥有两个模块的原因是因为有些用户对复数不感兴趣,甚至根本不知道它们是什么。它们宁愿 ``math.sqrt(-1)`` 引发异常,也不想返回一个复数。 " +"另请注意,被 :mod:`cmath` 定义的函数始终会返回一个复数,尽管答案可以表示为一个实数(在这种情况下,复数的虚数部分为零)。" + +#: ../../library/cmath.rst:304 +msgid "" +"A note on branch cuts: They are curves along which the given function fails " +"to be continuous. They are a necessary feature of many complex functions. " +"It is assumed that if you need to compute with complex functions, you will " +"understand about branch cuts. Consult almost any (not too elementary) book " +"on complex variables for enlightenment. For information of the proper " +"choice of branch cuts for numerical purposes, a good reference should be the" +" following:" +msgstr "" +"关于支割线的注释:它们是沿着给定函数无法连续的曲线。它们是许多复变函数的必要特征。 假设您需要使用复变函数进行计算,您将会了解支割线的概念。 " +"请参阅几乎所有关于复变函数的(不太基本)的书来获得启发。 对于如何正确地基于数值目的来选择支割线的相关信息,一个良好的参考如下:" + +#: ../../library/cmath.rst:314 +msgid "" +"Kahan, W: Branch cuts for complex elementary functions; or, Much ado about " +"nothing's sign bit. In Iserles, A., and Powell, M. (eds.), The state of the" +" art in numerical analysis. Clarendon Press (1987) pp165--211." +msgstr "" +"Kahan, W: Branch cuts for complex elementary functions; or, Much ado about " +"nothing's sign bit. In Iserles, A., and Powell, M. (eds.), The state of the " +"art in numerical analysis. Clarendon Press (1987) pp165--211." diff --git a/library/cmd.po b/library/cmd.po new file mode 100644 index 000000000..165c64fd7 --- /dev/null +++ b/library/cmd.po @@ -0,0 +1,360 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) 2001-2022, Python Software Foundation +# This file is distributed under the same license as the Python package. +# FIRST AUTHOR , YEAR. +# +# Translators: +# walkinrain , 2019 +# YIZHU LIN <897735626@qq.com>, 2019 +# Alpha Du , 2019 +# Naisen Xu <723648649@qq.com>, 2019 +# Freesand Leo , 2021 +# +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: Python 3.9\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2022-11-04 14:34+0000\n" +"PO-Revision-Date: 2017-02-16 23:02+0000\n" +"Last-Translator: Freesand Leo , 2021\n" +"Language-Team: Chinese (China) (https://www.transifex.com/python-doc/teams/5390/zh_CN/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: zh_CN\n" +"Plural-Forms: nplurals=1; plural=0;\n" + +#: ../../library/cmd.rst:2 +msgid ":mod:`cmd` --- Support for line-oriented command interpreters" +msgstr ":mod:`cmd` --- 支持面向行的命令解释器" + +#: ../../library/cmd.rst:9 +msgid "**Source code:** :source:`Lib/cmd.py`" +msgstr "**源代码:** :source:`Lib/cmd.py`" + +#: ../../library/cmd.rst:13 +msgid "" +"The :class:`Cmd` class provides a simple framework for writing line-oriented" +" command interpreters. These are often useful for test harnesses, " +"administrative tools, and prototypes that will later be wrapped in a more " +"sophisticated interface." +msgstr "" +":class:`Cmd` 类提供简单框架用于编写面向行的命令解释器。 这些通常对测试工具,管理工具和原型有用,这些工具随后将被包含在更复杂的接口中。" + +#: ../../library/cmd.rst:20 +msgid "" +"A :class:`Cmd` instance or subclass instance is a line-oriented interpreter " +"framework. There is no good reason to instantiate :class:`Cmd` itself; " +"rather, it's useful as a superclass of an interpreter class you define " +"yourself in order to inherit :class:`Cmd`'s methods and encapsulate action " +"methods." +msgstr "" +"一个 :class:`Cmd` 实例或子类实例是面向行的解释器框架结构。 实例化 :class:`Cmd` 本身是没有充分理由的, " +"它作为自定义解释器类的超类是非常有用的为了继承 :class:`Cmd` 的方法并且封装动作方法。" + +#: ../../library/cmd.rst:25 +msgid "" +"The optional argument *completekey* is the :mod:`readline` name of a " +"completion key; it defaults to :kbd:`Tab`. If *completekey* is not " +":const:`None` and :mod:`readline` is available, command completion is done " +"automatically." +msgstr "" +"可选参数 *completekey* 是完成键的 :mod:`readline` 名称;默认是 :kbd:`Tab` 。如果 *completekey*" +" 不是 :const:`None` 并且 :mod:`readline` 是可用的, 命令完成会自动完成。" + +#: ../../library/cmd.rst:29 +msgid "" +"The optional arguments *stdin* and *stdout* specify the input and output " +"file objects that the Cmd instance or subclass instance will use for input " +"and output. If not specified, they will default to :data:`sys.stdin` and " +":data:`sys.stdout`." +msgstr "" +"可选参数 *stdin* 和 *stdout* 指定了Cmd实例或子类实例将用于输入和输出的输入和输出文件对象。如果没有指定,他们将默认为 " +":data:`sys.stdin` 和 :data:`sys.stdout` 。" + +#: ../../library/cmd.rst:34 +msgid "" +"If you want a given *stdin* to be used, make sure to set the instance's " +":attr:`use_rawinput` attribute to ``False``, otherwise *stdin* will be " +"ignored." +msgstr "" +"如果你想要使用一个给定的 *stdin* ,确保将实例的 :attr:`use_rawinput` 属性设置为 ``False`` ,否则 " +"*stdin* 将被忽略。" + +#: ../../library/cmd.rst:42 +msgid "Cmd Objects" +msgstr "Cmd 对象" + +#: ../../library/cmd.rst:44 +msgid "A :class:`Cmd` instance has the following methods:" +msgstr ":class:`Cmd` 实例有下列方法:" + +#: ../../library/cmd.rst:49 +msgid "" +"Repeatedly issue a prompt, accept input, parse an initial prefix off the " +"received input, and dispatch to action methods, passing them the remainder " +"of the line as argument." +msgstr "反复发出提示,接受输入,从收到的输入中解析出一个初始前缀,并分派给操作方法,将其余的行作为参数传递给它们。" + +#: ../../library/cmd.rst:53 +msgid "" +"The optional argument is a banner or intro string to be issued before the " +"first prompt (this overrides the :attr:`intro` class attribute)." +msgstr "可选参数是在第一个提示之前发布的横幅或介绍字符串(这将覆盖 :attr:`intro` 类属性)。" + +#: ../../library/cmd.rst:56 +msgid "" +"If the :mod:`readline` module is loaded, input will automatically inherit " +":program:`bash`\\ -like history-list editing (e.g. :kbd:`Control-P` scrolls " +"back to the last command, :kbd:`Control-N` forward to the next one, " +":kbd:`Control-F` moves the cursor to the right non-destructively, " +":kbd:`Control-B` moves the cursor to the left non-destructively, etc.)." +msgstr "" +"如果 :mod:`readline` 继承模块被加载,输入将自动继承类似 :program:`bash`\\ 的历史列表编辑(例如, " +":kbd:`Control-P` 滚动回到最后一个命令, :kbd:`Control-N` 转到下一个命令,以 :kbd:`Control-F` " +"非破坏性的方式向右 :kbd:`Control-B` 移动光标,破坏性地等)。" + +#: ../../library/cmd.rst:62 +msgid "An end-of-file on input is passed back as the string ``'EOF'``." +msgstr "输入的文件结束符被作为字符串传回 ``'EOF'`` 。" + +#: ../../library/cmd.rst:68 +msgid "" +"An interpreter instance will recognize a command name ``foo`` if and only if" +" it has a method :meth:`do_foo`. As a special case, a line beginning with " +"the character ``'?'`` is dispatched to the method :meth:`do_help`. As " +"another special case, a line beginning with the character ``'!'`` is " +"dispatched to the method :meth:`do_shell` (if such a method is defined)." +msgstr "" +"解释器实例将会识别命令名称 ``foo`` 当且仅当它有方法 :meth:`do_foo` 。有一个特殊情况,分派始于字符 ``'?'`` 的行到方法 " +":meth:`do_help` 。另一种特殊情况,分派始于字符 ``'!'`` 的行到方法 :meth:`do_shell` (如果定义了这个方法)" + +#: ../../library/cmd.rst:74 +msgid "" +"This method will return when the :meth:`postcmd` method returns a true " +"value. The *stop* argument to :meth:`postcmd` is the return value from the " +"command's corresponding :meth:`do_\\*` method." +msgstr "" +"这个方法将返回当 :meth:`postcmd` 方法返回一个真值 。参数 *stop* 到 :meth:`postcmd` 是命令对应的返回值 " +":meth:`do_\\*` 的方法。" + +#: ../../library/cmd.rst:78 +msgid "" +"If completion is enabled, completing commands will be done automatically, " +"and completing of commands args is done by calling :meth:`complete_foo` with" +" arguments *text*, *line*, *begidx*, and *endidx*. *text* is the string " +"prefix we are attempting to match: all returned matches must begin with it. " +"*line* is the current input line with leading whitespace removed, *begidx* " +"and *endidx* are the beginning and ending indexes of the prefix text, which " +"could be used to provide different completion depending upon which position " +"the argument is in." +msgstr "" +"如果激活了完成,全部命令将会自动完成,并且通过调用 :meth:`complete_foo` 参数 *text* , *line*, *begidx* " +",和 *endidx* 完成全部命令参数。 *text* 是我们试图匹配的字符串前缀,所有返回的匹配项必须以它为开头。 *line* " +"是删除了前导空格的当前的输入行, *begidx* 和 *endidx* 是前缀文本的开始和结束索引。,可以用于根据参数位置提供不同的完成。" + +#: ../../library/cmd.rst:86 +msgid "" +"All subclasses of :class:`Cmd` inherit a predefined :meth:`do_help`. This " +"method, called with an argument ``'bar'``, invokes the corresponding method " +":meth:`help_bar`, and if that is not present, prints the docstring of " +":meth:`do_bar`, if available. With no argument, :meth:`do_help` lists all " +"available help topics (that is, all commands with corresponding " +":meth:`help_\\*` methods or commands that have docstrings), and also lists " +"any undocumented commands." +msgstr "" +"所有 :class:`Cmd` 的子类继承一个预定义 :meth:`do_help` 。 这个方法使用参数 ``'bar'`` 调用, 调用对应的方法 " +":meth:`help_bar` ,如果不存在,打印 :meth:`do_bar` 的文档字符串,如果可用。没有参数的情况下, " +":meth:`do_help` 方法会列出所有可用的帮助主题 (即所有具有相应的 :meth:`help_\\*` 方法或命令的 " +"文档字符串),也会列举所有未被记录的命令。" + +#: ../../library/cmd.rst:97 +msgid "" +"Interpret the argument as though it had been typed in response to the " +"prompt. This may be overridden, but should not normally need to be; see the " +":meth:`precmd` and :meth:`postcmd` methods for useful execution hooks. The " +"return value is a flag indicating whether interpretation of commands by the " +"interpreter should stop. If there is a :meth:`do_\\*` method for the " +"command *str*, the return value of that method is returned, otherwise the " +"return value from the :meth:`default` method is returned." +msgstr "" +"解释该参数,就好像它是为响应提示而键入的一样。 这可能会被覆盖,但通常不应该被覆盖; 请参阅: :meth:`precmd` 和 " +":meth:`postcmd` 方法,用于执行有用的挂钩。 返回值是一个标志,指示解释器对命令的解释是否应该停止。 如果命令 *str* 有一个 " +":meth:`do_\\*` 方法,则返回该方法的返回值,否则返回 :meth:`default` 方法的返回值。" + +#: ../../library/cmd.rst:108 +msgid "" +"Method called when an empty line is entered in response to the prompt. If " +"this method is not overridden, it repeats the last nonempty command entered." +msgstr "在响应提示输入空行时调用的方法。如果此方法未被覆盖,则重复输入的最后一个非空命令。" + +#: ../../library/cmd.rst:114 +msgid "" +"Method called on an input line when the command prefix is not recognized. If" +" this method is not overridden, it prints an error message and returns." +msgstr "当命令前缀不能被识别的时候在输入行调用的方法。如果此方法未被覆盖,它将输出一个错误信息并返回。" + +#: ../../library/cmd.rst:120 +msgid "" +"Method called to complete an input line when no command-specific " +":meth:`complete_\\*` method is available. By default, it returns an empty " +"list." +msgstr "当没有特定于命令的 :meth:`complete_\\*` 方法可用时,调用此方法完成输入行。默认情况下,它返回一个空列表。" + +#: ../../library/cmd.rst:126 +msgid "" +"Hook method executed just before the command line *line* is interpreted, but" +" after the input prompt is generated and issued. This method is a stub in " +":class:`Cmd`; it exists to be overridden by subclasses. The return value is" +" used as the command which will be executed by the :meth:`onecmd` method; " +"the :meth:`precmd` implementation may re-write the command or simply return " +"*line* unchanged." +msgstr "" +"钩方法在命令行 *line* 被解释之前执行,但是在输入提示被生成和发出后。这个方法是一个在 :class:`Cmd` " +"中的存根;它的存在是为了被子类覆盖。返回值被用作 :meth:`onecmd` 方法执行的命令; :meth:`precmd` " +"的实现或许会重写命令或者简单的返回 *line* 不变。" + +#: ../../library/cmd.rst:136 +msgid "" +"Hook method executed just after a command dispatch is finished. This method" +" is a stub in :class:`Cmd`; it exists to be overridden by subclasses. " +"*line* is the command line which was executed, and *stop* is a flag which " +"indicates whether execution will be terminated after the call to " +":meth:`postcmd`; this will be the return value of the :meth:`onecmd` method." +" The return value of this method will be used as the new value for the " +"internal flag which corresponds to *stop*; returning false will cause " +"interpretation to continue." +msgstr "" +"钩方法只在命令调度完成后执行。这个方法是一个在 :class:`Cmd` 中的存根;它的存在是为了子类被覆盖。 *line* 是被执行的命令行, " +"*stop* 是一个表示在调用 :meth:`postcmd` 之后是否终止执行的标志;这将作为 :meth:`onecmd` " +"方法的返回值。这个方法的返回值被用作与 *stop* 相关联的内部标志的新值;返回 false 将导致解释继续。" + +#: ../../library/cmd.rst:147 +msgid "" +"Hook method executed once when :meth:`cmdloop` is called. This method is a " +"stub in :class:`Cmd`; it exists to be overridden by subclasses." +msgstr "钩方法当 :meth:`cmdloop` 被调用时执行一次。方法是一个在 :class:`Cmd` 中的存根;它的存在是为了被子类覆盖。" + +#: ../../library/cmd.rst:153 +msgid "" +"Hook method executed once when :meth:`cmdloop` is about to return. This " +"method is a stub in :class:`Cmd`; it exists to be overridden by subclasses." +msgstr "" +"钩方法在 :meth:`cmdloop` 即将返回时执行一次。这个方法是一个在 :class:`Cmd` 中的存根;它的存在是为了被子类覆盖。" + +#: ../../library/cmd.rst:157 +msgid "" +"Instances of :class:`Cmd` subclasses have some public instance variables:" +msgstr " :class:`Cmd` 的子类的实例有一些公共实例变量:" + +#: ../../library/cmd.rst:161 +msgid "The prompt issued to solicit input." +msgstr "发出提示以请求输入。" + +#: ../../library/cmd.rst:166 +msgid "The string of characters accepted for the command prefix." +msgstr "接受命令前缀的字符串。" + +#: ../../library/cmd.rst:171 +msgid "The last nonempty command prefix seen." +msgstr "看到最后一个非空命令前缀。" + +#: ../../library/cmd.rst:176 +msgid "" +"A list of queued input lines. The cmdqueue list is checked in " +":meth:`cmdloop` when new input is needed; if it is nonempty, its elements " +"will be processed in order, as if entered at the prompt." +msgstr "" +"排队的输入行列表。当需要新的输入时,在 :meth:`cmdloop` 中检查 cmdqueue " +"列表;如果它不是空的,它的元素将被按顺序处理,就像在提示符处输入一样。" + +#: ../../library/cmd.rst:183 +msgid "" +"A string to issue as an intro or banner. May be overridden by giving the " +":meth:`cmdloop` method an argument." +msgstr "要作为简介或横幅发出的字符串。 可以通过给 :meth:`cmdloop` 方法一个参数来覆盖它。" + +#: ../../library/cmd.rst:189 +msgid "" +"The header to issue if the help output has a section for documented " +"commands." +msgstr "如果帮助输出具有记录命令的段落,则发出头文件。" + +#: ../../library/cmd.rst:194 +msgid "" +"The header to issue if the help output has a section for miscellaneous help" +" topics (that is, there are :meth:`help_\\*` methods without corresponding " +":meth:`do_\\*` methods)." +msgstr "如果帮助输出其他帮助主题的部分(即与 :meth:`do_\\*` 方法没有关联的 :meth:`help_\\*` 方法),则发出头文件。" + +#: ../../library/cmd.rst:201 +msgid "" +"The header to issue if the help output has a section for undocumented " +"commands (that is, there are :meth:`do_\\*` methods without corresponding " +":meth:`help_\\*` methods)." +msgstr "如果帮助输出未被记录命令的部分(即与 :meth:`help_\\*` 方法没有关联的 :meth:`do_\\*` 方法),则发出头文件。" + +#: ../../library/cmd.rst:208 +msgid "" +"The character used to draw separator lines under the help-message headers. " +"If empty, no ruler line is drawn. It defaults to ``'='``." +msgstr "用于在帮助信息标题的下方绘制分隔符的字符,如果为空,则不绘制标尺线。 这个字符默认是 ``'='`` 。" + +#: ../../library/cmd.rst:214 +msgid "" +"A flag, defaulting to true. If true, :meth:`cmdloop` uses :func:`input` to " +"display a prompt and read the next command; if false, " +":meth:`sys.stdout.write` and :meth:`sys.stdin.readline` are used. (This " +"means that by importing :mod:`readline`, on systems that support it, the " +"interpreter will automatically support :program:`Emacs`\\ -like line editing" +" and command-history keystrokes.)" +msgstr "" +"这是一个标志,默认为 true 。如果为 true ,, :meth:`cmdloop` 使用 :func:`input` " +"先是提示并且阅读下一个命令;如果为 false , :meth:`sys.stdout.write` 和 " +":meth:`sys.stdin.readline` 被使用。(这意味着解释器将会自动支持类似于 :program:`Emacs`\\ " +"的行编辑和命令历史记录按键操作,通过导入 :mod:`readline` 在支持它的系统上。)" + +#: ../../library/cmd.rst:224 +msgid "Cmd Example" +msgstr "Cmd 例子" + +#: ../../library/cmd.rst:228 +msgid "" +"The :mod:`cmd` module is mainly useful for building custom shells that let a" +" user work with a program interactively." +msgstr " :mod:`cmd` 模块主要被用于构建自定义 shell 让用户以交互的方式使用一个程序。" + +#: ../../library/cmd.rst:231 +msgid "" +"This section presents a simple example of how to build a shell around a few " +"of the commands in the :mod:`turtle` module." +msgstr "这部分提供了一个简单的例子来介绍如何使用一部分在 :mod:`turtle` 模块中的命令构建一个 shell 。" + +#: ../../library/cmd.rst:234 +msgid "" +"Basic turtle commands such as :meth:`~turtle.forward` are added to a " +":class:`Cmd` subclass with method named :meth:`do_forward`. The argument is" +" converted to a number and dispatched to the turtle module. The docstring " +"is used in the help utility provided by the shell." +msgstr "" +"基础的 turtle 命令比如 :meth:`~turtle.forward` 被添加进一个 :class:`Cmd` 子类,方法名为 " +":meth:`do_forward` 。参数被转换成数字并且分发至 turtle 模组中。 docstring 是 shell 提供的帮助实用程序。" + +#: ../../library/cmd.rst:239 +msgid "" +"The example also includes a basic record and playback facility implemented " +"with the :meth:`~Cmd.precmd` method which is responsible for converting the " +"input to lowercase and writing the commands to a file. The " +":meth:`do_playback` method reads the file and adds the recorded commands to " +"the :attr:`cmdqueue` for immediate playback::" +msgstr "" +"例子也包含使用 :meth:`~Cmd.precmd` 方法实现基础的记录和回放的功能,这个方法负责将输入转换为小写并且将命令写入文件。 " +":meth:`do_playback` 方法读取文件并添加记录命令至 :attr:`cmdqueue` 用于即时回放::" + +#: ../../library/cmd.rst:320 +msgid "" +"Here is a sample session with the turtle shell showing the help functions, " +"using blank lines to repeat commands, and the simple record and playback " +"facility:" +msgstr "这是一个示例会话,其中 turtle shell 显示帮助功能,使用空行重复命令,以及简单的记录和回放功能:" diff --git a/library/code.po b/library/code.po new file mode 100644 index 000000000..626abeab3 --- /dev/null +++ b/library/code.po @@ -0,0 +1,289 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) 2001-2024, Python Software Foundation +# This file is distributed under the same license as the Python package. +# FIRST AUTHOR , YEAR. +# +# Translators: +# nick <2330458484@qq.com>, 2019 +# jacky , 2019 +# Shengjing Zhu , 2019 +# Freesand Leo , 2020 +# Rafael Fontenelle , 2024 +# +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: Python 3.9\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2024-01-12 22:01+0000\n" +"PO-Revision-Date: 2017-02-16 23:02+0000\n" +"Last-Translator: Rafael Fontenelle , 2024\n" +"Language-Team: Chinese (China) (https://app.transifex.com/python-doc/teams/5390/zh_CN/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: zh_CN\n" +"Plural-Forms: nplurals=1; plural=0;\n" + +#: ../../library/code.rst:2 +msgid ":mod:`code` --- Interpreter base classes" +msgstr ":mod:`code` --- 解释器基类" + +#: ../../library/code.rst:7 +msgid "**Source code:** :source:`Lib/code.py`" +msgstr "**源代码:** :source:`Lib/code.py`" + +#: ../../library/code.rst:11 +msgid "" +"The ``code`` module provides facilities to implement read-eval-print loops " +"in Python. Two classes and convenience functions are included which can be " +"used to build applications which provide an interactive interpreter prompt." +msgstr "" +"``code`` 模块提供了在 Python 中实现 read-eval-print " +"循环的功能。它包含两个类和一些快捷功能,可用于构建提供交互式解释器的应用程序。" + +#: ../../library/code.rst:18 +msgid "" +"This class deals with parsing and interpreter state (the user's namespace); " +"it does not deal with input buffering or prompting or input file naming (the" +" filename is always passed in explicitly). The optional *locals* argument " +"specifies the dictionary in which code will be executed; it defaults to a " +"newly created dictionary with key ``'__name__'`` set to ``'__console__'`` " +"and key ``'__doc__'`` set to ``None``." +msgstr "" +"这个类处理解析器和解释器状态(用户命名空间的);它不处理缓冲器、终端提示区或着输入文件名(文件名总是显示地传递)。可选的 *locals* " +"参数指定一个字典,字典里面包含将在此类执行的代码;它默认创建新的字典,其键 ``'__name__'`` 设置为 ``'__console__'`` " +",键 ``'__doc__'`` 设置为 ``None`` 。" + +#: ../../library/code.rst:28 +msgid "" +"Closely emulate the behavior of the interactive Python interpreter. This " +"class builds on :class:`InteractiveInterpreter` and adds prompting using the" +" familiar ``sys.ps1`` and ``sys.ps2``, and input buffering." +msgstr "" +"尽可能模拟交互式 Python 解释器的行为。此类建立在 :class:`InteractiveInterpreter` 的基础上,使用熟悉的 " +"``sys.ps1`` 和 ``sys.ps2`` 作为输入提示符,并有输入缓冲。" + +#: ../../library/code.rst:35 +msgid "" +"Convenience function to run a read-eval-print loop. This creates a new " +"instance of :class:`InteractiveConsole` and sets *readfunc* to be used as " +"the :meth:`InteractiveConsole.raw_input` method, if provided. If *local* is" +" provided, it is passed to the :class:`InteractiveConsole` constructor for " +"use as the default namespace for the interpreter loop. The :meth:`interact`" +" method of the instance is then run with *banner* and *exitmsg* passed as " +"the banner and exit message to use, if provided. The console object is " +"discarded after use." +msgstr "" +"运行一个 read-eval-print 循环的便捷函数。这会创建一个新的 :class:`InteractiveConsole` 实例。如果提供了 " +"*readfunc* ,会设置为 :meth:`InteractiveConsole.raw_input` 方法。如果提供了 *local* " +",则将其传递给 :class:`InteractiveConsole` 的构造函数,以用作解释器循环的默认命名空间。然后,如果提供了 *banner* " +"和 *exitmsg* ,实例的 :meth:`interact` 方法会以此为标题和退出消息。控制台对象在使用后将被丢弃。" + +#: ../../library/code.rst:44 +msgid "Added *exitmsg* parameter." +msgstr "加入 *exitmsg* 参数。" + +#: ../../library/code.rst:50 +msgid "" +"This function is useful for programs that want to emulate Python's " +"interpreter main loop (a.k.a. the read-eval-print loop). The tricky part is" +" to determine when the user has entered an incomplete command that can be " +"completed by entering more text (as opposed to a complete command or a " +"syntax error). This function *almost* always makes the same decision as the" +" real interpreter main loop." +msgstr "" +"这个函数主要用来模拟 Python 解释器的主循环(即 read-eval-print " +"循环)。难点的部分是当用户输入不完整命令时,判断能否通过之后的输入来完成(要么成为完整的命令,要么语法错误)。该函数 *几乎* " +"和实际的解释器主循环的判断是相同的。" + +#: ../../library/code.rst:57 +msgid "" +"*source* is the source string; *filename* is the optional filename from " +"which source was read, defaulting to ``''``; and *symbol* is the " +"optional grammar start symbol, which should be ``'single'`` (the default), " +"``'eval'`` or ``'exec'``." +msgstr "" +"*source* 是源字符串;*filename* 是可选的用作读取源的文件名,默认为 ``''``;*symbol* " +"是可选的语法开启符号,应为 ``'single'`` (默认), ``'eval'`` 或 ``'exec'``。" + +#: ../../library/code.rst:62 +msgid "" +"Returns a code object (the same as ``compile(source, filename, symbol)``) if" +" the command is complete and valid; ``None`` if the command is incomplete; " +"raises :exc:`SyntaxError` if the command is complete and contains a syntax " +"error, or raises :exc:`OverflowError` or :exc:`ValueError` if the command " +"contains an invalid literal." +msgstr "" +"如果命令完整且有效则返回一个代码对象 (等价于 ``compile(source, filename, symbol)``);如果命令不完整则返回 " +"``None``;如果命令完整但包含语法错误则会引发 :exc:`SyntaxError` 或 :exc:`OverflowError` " +"而如果命令包含无效字面值则将引发 :exc:`ValueError`。" + +#: ../../library/code.rst:72 +msgid "Interactive Interpreter Objects" +msgstr "交互解释器对象" + +#: ../../library/code.rst:77 +msgid "" +"Compile and run some source in the interpreter. Arguments are the same as " +"for :func:`compile_command`; the default for *filename* is ``''``, " +"and for *symbol* is ``'single'``. One of several things can happen:" +msgstr "" +"在解释器中编译并运行一段源码。 所用参数与 :func:`compile_command` 一样;*filename* 的默认值为 " +"``''``,*symbol* 则为 ``'single'``。 可能发生以下情况之一:" + +#: ../../library/code.rst:81 +msgid "" +"The input is incorrect; :func:`compile_command` raised an exception " +"(:exc:`SyntaxError` or :exc:`OverflowError`). A syntax traceback will be " +"printed by calling the :meth:`showsyntaxerror` method. :meth:`runsource` " +"returns ``False``." +msgstr "" +"输入不正确;:func:`compile_command` 引发了一个异常 (:exc:`SyntaxError` 或 " +":exc:`OverflowError`)。 将通过调用 :meth:`showsyntaxerror` 方法打印语法回溯信息。 " +":meth:`runsource` 返回 ``False``。" + +#: ../../library/code.rst:86 +msgid "" +"The input is incomplete, and more input is required; :func:`compile_command`" +" returned ``None``. :meth:`runsource` returns ``True``." +msgstr "" +"输入不完整,需要更多输入;函数 :func:`compile_command` 返回 ``None`` 。方法 :meth:`runsource` 返回" +" ``True`` 。" + +#: ../../library/code.rst:89 +msgid "" +"The input is complete; :func:`compile_command` returned a code object. The " +"code is executed by calling the :meth:`runcode` (which also handles run-time" +" exceptions, except for :exc:`SystemExit`). :meth:`runsource` returns " +"``False``." +msgstr "" +"输入完整;:func:`compile_command` 返回了一个代码对象。 将通过调用 :meth:`runcode` " +"执行代码(该方法也会处理运行时异常,:exc:`SystemExit` 除外)。 :meth:`runsource` 返回 ``False``。" + +#: ../../library/code.rst:93 +msgid "" +"The return value can be used to decide whether to use ``sys.ps1`` or " +"``sys.ps2`` to prompt the next line." +msgstr "该返回值用于决定使用 ``sys.ps1`` 还是 ``sys.ps2`` 来作为下一行的输入提示符。" + +#: ../../library/code.rst:99 +msgid "" +"Execute a code object. When an exception occurs, :meth:`showtraceback` is " +"called to display a traceback. All exceptions are caught except " +":exc:`SystemExit`, which is allowed to propagate." +msgstr "" +"执行一个代码对象。当发生异常时,调用 :meth:`showtraceback` 来显示回溯。除 :exc:`SystemExit` " +"(允许传播)以外的所有异常都会被捕获。" + +#: ../../library/code.rst:103 +msgid "" +"A note about :exc:`KeyboardInterrupt`: this exception may occur elsewhere in" +" this code, and may not always be caught. The caller should be prepared to " +"deal with it." +msgstr "" +"有关 :exc:`KeyboardInterrupt` 的说明,该异常可能发生于此代码的其他位置,并且并不总能被捕获。 调用者应当准备好处理它。" + +#: ../../library/code.rst:110 +msgid "" +"Display the syntax error that just occurred. This does not display a stack " +"trace because there isn't one for syntax errors. If *filename* is given, it " +"is stuffed into the exception instead of the default filename provided by " +"Python's parser, because it always uses ``''`` when reading from a " +"string. The output is written by the :meth:`write` method." +msgstr "" +"显示刚发生的语法错误。 这不会显示堆栈回溯因为语法错误并无此种信息。 如果给出了 *filename*,它会被放入异常来替代 Python " +"解析器所提供的默认文件名,因为它在从一个字符串读取时总是会使用 ``''``。 输出将由 :meth:`write` 方法来写入。" + +#: ../../library/code.rst:119 +msgid "" +"Display the exception that just occurred. We remove the first stack item " +"because it is within the interpreter object implementation. The output is " +"written by the :meth:`write` method." +msgstr "显示刚发生的异常。 我们移除了第一个堆栈条目因为它从属于解释器对象的实现。 输出将由 :meth:`write` 方法来写入。" + +#: ../../library/code.rst:123 +msgid "" +"The full chained traceback is displayed instead of just the primary " +"traceback." +msgstr "将显示完整的链式回溯,而不只是主回溯。" + +#: ../../library/code.rst:129 +msgid "" +"Write a string to the standard error stream (``sys.stderr``). Derived " +"classes should override this to provide the appropriate output handling as " +"needed." +msgstr "将一个字符串写入到标准错误流 (``sys.stderr``)。 所有派生类都应重写此方法以提供必要的正确输出处理。" + +#: ../../library/code.rst:136 +msgid "Interactive Console Objects" +msgstr "交互式控制台对象" + +#: ../../library/code.rst:138 +msgid "" +"The :class:`InteractiveConsole` class is a subclass of " +":class:`InteractiveInterpreter`, and so offers all the methods of the " +"interpreter objects as well as the following additions." +msgstr "" +":class:`InteractiveConsole` 类是 :class:`InteractiveInterpreter` " +"的子类,因此它提供了解释器对象的所有方法,还有以下的额外方法。" + +#: ../../library/code.rst:145 +msgid "" +"Closely emulate the interactive Python console. The optional *banner* " +"argument specify the banner to print before the first interaction; by " +"default it prints a banner similar to the one printed by the standard Python" +" interpreter, followed by the class name of the console object in " +"parentheses (so as not to confuse this with the real interpreter -- since " +"it's so close!)." +msgstr "" +"近似地模拟交互式 Python 终端。 可选的 *banner* 参数指定要在第一次交互前打印的条幅;默认情况下会类似于标准 Python " +"解释器所打印的内容,并附上外加圆括号的终端对象类名(这样就不会与真正的解释器混淆 —— 因为确实太像了!)" + +#: ../../library/code.rst:151 +msgid "" +"The optional *exitmsg* argument specifies an exit message printed when " +"exiting. Pass the empty string to suppress the exit message. If *exitmsg* is" +" not given or ``None``, a default message is printed." +msgstr "" +"可选的 *exitmsg* 参数指定要在退出时打印的退出消息。 传入空字符串可以屏蔽退出消息。 如果 *exitmsg* 未给出或为 " +"``None``,则将打印默认消息。" + +#: ../../library/code.rst:155 +msgid "To suppress printing any banner, pass an empty string." +msgstr "要禁止打印任何条幅消息,请传递一个空字符串。" + +#: ../../library/code.rst:158 +msgid "Print an exit message when exiting." +msgstr "退出时打印退出消息。" + +#: ../../library/code.rst:164 +msgid "" +"Push a line of source text to the interpreter. The line should not have a " +"trailing newline; it may have internal newlines. The line is appended to a " +"buffer and the interpreter's :meth:`runsource` method is called with the " +"concatenated contents of the buffer as source. If this indicates that the " +"command was executed or invalid, the buffer is reset; otherwise, the command" +" is incomplete, and the buffer is left as it was after the line was " +"appended. The return value is ``True`` if more input is required, ``False``" +" if the line was dealt with in some way (this is the same as " +":meth:`runsource`)." +msgstr "" +"将一行源文本推入解释器。 行内容不应带有末尾换行符;它可以有内部换行符。 行内容会被添加到一个缓冲区并且会调用解释器的 " +":meth:`runsource` 方法,附带缓冲区内容的拼接结果作为源文本。 " +"如果显示命令已执行或不合法,缓冲区将被重置;否则,则命令尚未结束,缓冲区将在添加行后保持原样。 如果要求更多输入则返回值为 " +"``True``,如果行已按某种方式被处理则返回值为 ``False`` (这与 :meth:`runsource` 相同)。" + +#: ../../library/code.rst:176 +msgid "Remove any unhandled source text from the input buffer." +msgstr "从输入缓冲区中删除所有未处理的内容。" + +#: ../../library/code.rst:181 +msgid "" +"Write a prompt and read a line. The returned line does not include the " +"trailing newline. When the user enters the EOF key sequence, " +":exc:`EOFError` is raised. The base implementation reads from ``sys.stdin``;" +" a subclass may replace this with a different implementation." +msgstr "" +"输出提示并读取一行。返回的行不包含末尾的换行符。当用户输入 EOF 键序列时,会引发 :exc:`EOFError` 异常。默认实现是从 " +"``sys.stdin`` 读取;子类可以用其他实现代替。" diff --git a/library/codecs.po b/library/codecs.po new file mode 100644 index 000000000..f95dba237 --- /dev/null +++ b/library/codecs.po @@ -0,0 +1,2932 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) 2001-2024, Python Software Foundation +# This file is distributed under the same license as the Python package. +# FIRST AUTHOR , YEAR. +# +# Translators: +# Zombie110year , 2019 +# nick <2330458484@qq.com>, 2019 +# ppcfish , 2019 +# Rafael Fontenelle , 2024 +# Freesand Leo , 2024 +# +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: Python 3.9\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2024-04-26 21:29+0000\n" +"PO-Revision-Date: 2017-02-16 23:02+0000\n" +"Last-Translator: Freesand Leo , 2024\n" +"Language-Team: Chinese (China) (https://app.transifex.com/python-doc/teams/5390/zh_CN/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: zh_CN\n" +"Plural-Forms: nplurals=1; plural=0;\n" + +#: ../../library/codecs.rst:2 +msgid ":mod:`codecs` --- Codec registry and base classes" +msgstr ":mod:`codecs` --- 编解码器注册和相关基类" + +#: ../../library/codecs.rst:11 +msgid "**Source code:** :source:`Lib/codecs.py`" +msgstr "**源代码:** :source:`Lib/codecs.py`" + +#: ../../library/codecs.rst:23 +msgid "" +"This module defines base classes for standard Python codecs (encoders and " +"decoders) and provides access to the internal Python codec registry, which " +"manages the codec and error handling lookup process. Most standard codecs " +"are :term:`text encodings `, which encode text to bytes (and " +"decode bytes to text), but there are also codecs provided that encode text " +"to text, and bytes to bytes. Custom codecs may encode and decode between " +"arbitrary types, but some module features are restricted to be used " +"specifically with :term:`text encodings ` or with codecs that" +" encode to :class:`bytes`." +msgstr "" +"这个模块定义了标准 Python 编解码器(编码器和解码器)的基类并提供对内部 Python " +"编解码器注册表的访问,该注册表负责管理编解码器和错误处理的查找过程。 大多数标准编解码器都属于 :term:`文本编码格式 `,它们可将文本编码为字节串(以及将字节串解码为文本),但也提供了一些将文本编码为文本,以及将字节串编码为字节串的编解码器。 " +"自定义编解码器可以在任意类型间进行编码和解码,但某些模块特性被限制为仅适用于 :term:`文本编码格式 ` " +"或将数据编码为 :class:`bytes` 的编解码器。" + +#: ../../library/codecs.rst:33 +msgid "" +"The module defines the following functions for encoding and decoding with " +"any codec:" +msgstr "该模块定义了以下用于使用任何编解码器进行编码和解码的函数:" + +#: ../../library/codecs.rst:38 +msgid "Encodes *obj* using the codec registered for *encoding*." +msgstr "使用为 *encoding* 注册的编解码器对 *obj* 进行编码。" + +#: ../../library/codecs.rst:40 +msgid "" +"*Errors* may be given to set the desired error handling scheme. The default " +"error handler is ``'strict'`` meaning that encoding errors raise " +":exc:`ValueError` (or a more codec specific subclass, such as " +":exc:`UnicodeEncodeError`). Refer to :ref:`codec-base-classes` for more " +"information on codec error handling." +msgstr "" +"可以给定 *Errors* 以设置所需要的错误处理方案。 默认的错误处理方案 ``'strict'`` 表示编码错误将引发 " +":exc:`ValueError` (或更特定编解码器相关的子类,例如 :exc:`UnicodeEncodeError`)。 请参阅 " +":ref:`codec-base-classes` 了解有关编解码器错误处理的更多信息。" + +#: ../../library/codecs.rst:48 +msgid "Decodes *obj* using the codec registered for *encoding*." +msgstr "使用为 *encoding* 注册的编解码器对 *obj* 进行解码。" + +#: ../../library/codecs.rst:50 +msgid "" +"*Errors* may be given to set the desired error handling scheme. The default " +"error handler is ``'strict'`` meaning that decoding errors raise " +":exc:`ValueError` (or a more codec specific subclass, such as " +":exc:`UnicodeDecodeError`). Refer to :ref:`codec-base-classes` for more " +"information on codec error handling." +msgstr "" +"可以给定 *Errors* 以设置所需要的错误处理方案。 默认的错误处理方案 ``'strict'`` 表示编码错误将引发 " +":exc:`ValueError` (或更特定编解码器相关的子类,例如 :exc:`UnicodeDecodeError`)。 请参阅 " +":ref:`codec-base-classes` 了解有关编解码器错误处理的更多信息。" + +#: ../../library/codecs.rst:56 +msgid "The full details for each codec can also be looked up directly:" +msgstr "每种编解码器的完整细节也可以直接查找获取:" + +#: ../../library/codecs.rst:60 +msgid "" +"Looks up the codec info in the Python codec registry and returns a " +":class:`CodecInfo` object as defined below." +msgstr "在 Python 编解码器注册表中查找编解码器信息,并返回一个 :class:`CodecInfo` 对象,其定义见下文。" + +#: ../../library/codecs.rst:63 +msgid "" +"Encodings are first looked up in the registry's cache. If not found, the " +"list of registered search functions is scanned. If no :class:`CodecInfo` " +"object is found, a :exc:`LookupError` is raised. Otherwise, the " +":class:`CodecInfo` object is stored in the cache and returned to the caller." +msgstr "" +"首先将会在注册表缓存中查找编码,如果未找到,则会扫描注册的搜索函数列表。 如果没有找到 :class:`CodecInfo` 对象,则将引发 " +":exc:`LookupError`。 否则,:class:`CodecInfo` 对象将被存入缓存并返回给调用者。" + +#: ../../library/codecs.rst:70 +msgid "" +"Codec details when looking up the codec registry. The constructor arguments " +"are stored in attributes of the same name:" +msgstr "查找编解码器注册表所得到的编解码器细节信息。 构造器参数将保存为同名的属性:" + +#: ../../library/codecs.rst:76 +msgid "The name of the encoding." +msgstr "编码名称" + +#: ../../library/codecs.rst:82 +msgid "" +"The stateless encoding and decoding functions. These must be functions or " +"methods which have the same interface as the :meth:`~Codec.encode` and " +":meth:`~Codec.decode` methods of Codec instances (see :ref:`Codec Interface " +"`). The functions or methods are expected to work in a " +"stateless mode." +msgstr "" +"无状态的编码和解码函数。 它们必须是具有与 Codec 的 :meth:`~Codec.encode` 和 :meth:`~Codec.decode` " +"方法相同接口的函数或方法 (参见 :ref:`Codec 接口 `)。 这些函数或方法应当工作于无状态的模式。" + +#: ../../library/codecs.rst:92 +msgid "" +"Incremental encoder and decoder classes or factory functions. These have to " +"provide the interface defined by the base classes " +":class:`IncrementalEncoder` and :class:`IncrementalDecoder`, respectively. " +"Incremental codecs can maintain state." +msgstr "" +"增量式的编码器和解码器类或工厂函数。 这些函数必须分别提供由基类 :class:`IncrementalEncoder` 和 " +":class:`IncrementalDecoder` 所定义的接口。 增量式编解码器可以保持状态。" + +#: ../../library/codecs.rst:101 +msgid "" +"Stream writer and reader classes or factory functions. These have to provide" +" the interface defined by the base classes :class:`StreamWriter` and " +":class:`StreamReader`, respectively. Stream codecs can maintain state." +msgstr "" +"流式写入器和读取器类或工厂函数。 这些函数必须分别提供由基类 :class:`StreamWriter` 和 :class:`StreamReader`" +" 所定义的接口。 流式编解码器可以保持状态。" + +#: ../../library/codecs.rst:106 +msgid "" +"To simplify access to the various codec components, the module provides " +"these additional functions which use :func:`lookup` for the codec lookup:" +msgstr "为了简化对各种编解码器组件的访问,本模块提供了以下附加函数,它们使用 :func:`lookup` 来执行编解码器查找:" + +#: ../../library/codecs.rst:111 +msgid "" +"Look up the codec for the given encoding and return its encoder function." +msgstr "查找给定编码的编解码器并返回其编码器函数。" + +#: ../../library/codecs.rst:113 ../../library/codecs.rst:120 +#: ../../library/codecs.rst:146 ../../library/codecs.rst:154 +msgid "Raises a :exc:`LookupError` in case the encoding cannot be found." +msgstr "在编码无法找到时将引发 :exc:`LookupError`。" + +#: ../../library/codecs.rst:118 +msgid "" +"Look up the codec for the given encoding and return its decoder function." +msgstr "查找给定编码的编解码器并返回其解码器函数。" + +#: ../../library/codecs.rst:125 +msgid "" +"Look up the codec for the given encoding and return its incremental encoder " +"class or factory function." +msgstr "查找给定编码的编解码器并返回其增量式编码器类或工厂函数。" + +#: ../../library/codecs.rst:128 +msgid "" +"Raises a :exc:`LookupError` in case the encoding cannot be found or the " +"codec doesn't support an incremental encoder." +msgstr "在编码无法找到或编解码器不支持增量式编码器时将引发 :exc:`LookupError`。" + +#: ../../library/codecs.rst:134 +msgid "" +"Look up the codec for the given encoding and return its incremental decoder " +"class or factory function." +msgstr "查找给定编码的编解码器并返回其增量式解码器类或工厂函数。" + +#: ../../library/codecs.rst:137 +msgid "" +"Raises a :exc:`LookupError` in case the encoding cannot be found or the " +"codec doesn't support an incremental decoder." +msgstr "在编码无法找到或编解码器不支持增量式解码器时将引发 :exc:`LookupError`。" + +#: ../../library/codecs.rst:143 +msgid "" +"Look up the codec for the given encoding and return its " +":class:`StreamReader` class or factory function." +msgstr "查找给定编码的编解码器并返回其 :class:`StreamReader` 类或工厂函数。" + +#: ../../library/codecs.rst:151 +msgid "" +"Look up the codec for the given encoding and return its " +":class:`StreamWriter` class or factory function." +msgstr "查找给定编码的编解码器并返回其 :class:`StreamWriter` 类或工厂函数。" + +#: ../../library/codecs.rst:156 +msgid "" +"Custom codecs are made available by registering a suitable codec search " +"function:" +msgstr "自定义编解码器的启用是通过注册适当的编解码器搜索函数:" + +#: ../../library/codecs.rst:161 +msgid "" +"Register a codec search function. Search functions are expected to take one " +"argument, being the encoding name in all lower case letters with hyphens and" +" spaces converted to underscores, and return a :class:`CodecInfo` object. In" +" case a search function cannot find a given encoding, it should return " +"``None``." +msgstr "" +"注册一个编解码器搜索函数。 搜索函数预期接收一个参数,即全部以小写字母表示的编码格式名称,其中中连字符和空格会被转换为下划线,并返回一个 " +":class:`CodecInfo` 对象。 在搜索函数无法找到给定编码格式的情况下,它应当返回 ``None``。" + +#: ../../library/codecs.rst:167 +msgid "Hyphens and spaces are converted to underscore." +msgstr "连字符和空格会被转换为下划线。" + +#: ../../library/codecs.rst:172 +msgid "" +"Search function registration is not currently reversible, which may cause " +"problems in some cases, such as unit testing or module reloading." +msgstr "搜索函数的注册目前是不可逆的,这在某些情况下可能导致问题,例如单元测试或模块重载等。" + +#: ../../library/codecs.rst:176 +msgid "" +"While the builtin :func:`open` and the associated :mod:`io` module are the " +"recommended approach for working with encoded text files, this module " +"provides additional utility functions and classes that allow the use of a " +"wider range of codecs when working with binary files:" +msgstr "" +"虽然内置的 :func:`open` 和相关联的 :mod:`io` " +"模块是操作已编码文本文件的推荐方式,但本模块也提供了额外的工具函数和类,允许在操作二进制文件时使用更多种类的编解码器:" + +#: ../../library/codecs.rst:183 +msgid "" +"Open an encoded file using the given *mode* and return an instance of " +":class:`StreamReaderWriter`, providing transparent encoding/decoding. The " +"default file mode is ``'r'``, meaning to open the file in read mode." +msgstr "" +"使用给定的 *mode* 打开已编码的文件并返回一个 :class:`StreamReaderWriter` 的实例,提供透明的编码/解码。 " +"默认的文件模式为 ``'r'``,表示以读取模式打开文件。" + +#: ../../library/codecs.rst:189 +msgid "" +"Underlying encoded files are always opened in binary mode. No automatic " +"conversion of ``'\\n'`` is done on reading and writing. The *mode* argument " +"may be any binary mode acceptable to the built-in :func:`open` function; the" +" ``'b'`` is automatically added." +msgstr "" +"下层的已编码文件总是以二进制模式打开。 在读取和写入时不会自动执行 ``'\\n'`` 的转换。 *mode* 参数可以是内置 :func:`open`" +" 函数所接受的任意二进制模式;``'b'`` 会被自动添加。" + +#: ../../library/codecs.rst:194 +msgid "" +"*encoding* specifies the encoding which is to be used for the file. Any " +"encoding that encodes to and decodes from bytes is allowed, and the data " +"types supported by the file methods depend on the codec used." +msgstr "" +"*encoding* 指定文件所要使用的编码格式。 允许任何编码为字节串或从字节串解码的编码格式,而文件方法所支持的数据类型则取决于所使用的编解码器。" + +#: ../../library/codecs.rst:198 +msgid "" +"*errors* may be given to define the error handling. It defaults to " +"``'strict'`` which causes a :exc:`ValueError` to be raised in case an " +"encoding error occurs." +msgstr "" +"可以指定 *errors* 来定义错误处理方案。 默认值 ``'strict'`` 表示在出现编码错误时引发 :exc:`ValueError`。" + +#: ../../library/codecs.rst:201 +msgid "" +"*buffering* has the same meaning as for the built-in :func:`open` function. " +"It defaults to -1 which means that the default buffer size will be used." +msgstr "*buffering* 的含义与内置 :func:`open` 函数中的相同。 默认值 -1 表示将使用默认的缓冲区大小。" + +#: ../../library/codecs.rst:207 +msgid "" +"Return a :class:`StreamRecoder` instance, a wrapped version of *file* which " +"provides transparent transcoding. The original file is closed when the " +"wrapped version is closed." +msgstr "" +"返回一个 :class:`StreamRecoder` 实例,它提供了 *file* 的透明转码包装版本。 当包装版本被关闭时原始文件也会被关闭。" + +#: ../../library/codecs.rst:211 +msgid "" +"Data written to the wrapped file is decoded according to the given " +"*data_encoding* and then written to the original file as bytes using " +"*file_encoding*. Bytes read from the original file are decoded according to " +"*file_encoding*, and the result is encoded using *data_encoding*." +msgstr "" +"写入已包装文件的数据会根据给定的 *data_encoding* 解码,然后以使用 *file_encoding* 的字节形式写入原始文件。 " +"从原始文件读取的字节串将根据 *file_encoding* 解码,其结果将使用 *data_encoding* 进行编码。" + +#: ../../library/codecs.rst:217 +msgid "If *file_encoding* is not given, it defaults to *data_encoding*." +msgstr "如果 *file_encoding* 未给定,则默认为 *data_encoding*。" + +#: ../../library/codecs.rst:219 +msgid "" +"*errors* may be given to define the error handling. It defaults to " +"``'strict'``, which causes :exc:`ValueError` to be raised in case an " +"encoding error occurs." +msgstr "" +"可以指定 *errors* 来定义错误处理方案。 默认值 ``'strict'`` 表示在出现编码错误时引发 :exc:`ValueError`。" + +#: ../../library/codecs.rst:226 +msgid "" +"Uses an incremental encoder to iteratively encode the input provided by " +"*iterator*. This function is a :term:`generator`. The *errors* argument (as " +"well as any other keyword argument) is passed through to the incremental " +"encoder." +msgstr "" +"使用增量式编码器通过迭代来编码由 *iterator* 所提供的输入。 此函数属于 :term:`generator`。 *errors* " +"参数(以及任何其他关键字参数)会被传递给增量式编码器。" + +#: ../../library/codecs.rst:231 +msgid "" +"This function requires that the codec accept text :class:`str` objects to " +"encode. Therefore it does not support bytes-to-bytes encoders such as " +"``base64_codec``." +msgstr "" +"此函数要求编解码器接受 :class:`str` 对象形式的文本进行编码。 因此它不支持字节到字节的编码器,例如 ``base64_codec``。" + +#: ../../library/codecs.rst:238 +msgid "" +"Uses an incremental decoder to iteratively decode the input provided by " +"*iterator*. This function is a :term:`generator`. The *errors* argument (as " +"well as any other keyword argument) is passed through to the incremental " +"decoder." +msgstr "" +"使用增量式解码器通过迭代来解码由 *iterator* 所提供的输入。 此函数属于 :term:`generator`。 *errors* " +"参数(以及任何其他关键字参数)会被传递给增量式解码器。" + +#: ../../library/codecs.rst:243 +msgid "" +"This function requires that the codec accept :class:`bytes` objects to " +"decode. Therefore it does not support text-to-text encoders such as " +"``rot_13``, although ``rot_13`` may be used equivalently with " +":func:`iterencode`." +msgstr "" +"此函数要求编解码器接受 :class:`bytes` 对象进行解码。 因此它不支持文本到文本的编码器,例如 ``rot_13``,但是 " +"``rot_13`` 可以通过同样效果的 :func:`iterencode` 来使用。" + +#: ../../library/codecs.rst:249 +msgid "" +"The module also provides the following constants which are useful for " +"reading and writing to platform dependent files:" +msgstr "本模块还提供了以下常量,适用于读取和写入依赖于平台的文件:" + +#: ../../library/codecs.rst:264 +msgid "" +"These constants define various byte sequences, being Unicode byte order " +"marks (BOMs) for several encodings. They are used in UTF-16 and UTF-32 data " +"streams to indicate the byte order used, and in UTF-8 as a Unicode " +"signature. :const:`BOM_UTF16` is either :const:`BOM_UTF16_BE` or " +":const:`BOM_UTF16_LE` depending on the platform's native byte order, " +":const:`BOM` is an alias for :const:`BOM_UTF16`, :const:`BOM_LE` for " +":const:`BOM_UTF16_LE` and :const:`BOM_BE` for :const:`BOM_UTF16_BE`. The " +"others represent the BOM in UTF-8 and UTF-32 encodings." +msgstr "" +"这些常量定义了多种字节序列,即一些编码格式的 Unicode 字节顺序标记(BOM)。 它们在 UTF-16 和 UTF-32 " +"数据流中被用以指明所使用的字节顺序,并在 UTF-8 中被用作 Unicode 签名。 :const:`BOM_UTF16` 是 " +":const:`BOM_UTF16_BE` 或 :const:`BOM_UTF16_LE`,具体取决于平台的本机字节顺序,:const:`BOM` 是 " +":const:`BOM_UTF16` 的别名, :const:`BOM_LE` 是 :const:`BOM_UTF16_LE` " +"的别名,:const:`BOM_BE` 是 :const:`BOM_UTF16_BE` 的别名。 其他序列则表示 UTF-8 和 UTF-32 " +"编码格式中的 BOM。" + +#: ../../library/codecs.rst:278 +msgid "Codec Base Classes" +msgstr "编解码器基类" + +#: ../../library/codecs.rst:280 +msgid "" +"The :mod:`codecs` module defines a set of base classes which define the " +"interfaces for working with codec objects, and can also be used as the basis" +" for custom codec implementations." +msgstr ":mod:`codecs` 模块定义了一系列基类用来定义配合编解码器对象进行工作的接口,并且也可用作定制编解码器实现的基础。" + +#: ../../library/codecs.rst:284 +msgid "" +"Each codec has to define four interfaces to make it usable as codec in " +"Python: stateless encoder, stateless decoder, stream reader and stream " +"writer. The stream reader and writers typically reuse the stateless " +"encoder/decoder to implement the file protocols. Codec authors also need to " +"define how the codec will handle encoding and decoding errors." +msgstr "" +"每种编解码器必须定义四个接口以便用作 Python 中的编解码器:无状态编码器、无状态解码器、流读取器和流写入器。 " +"流读取器和写入器通常会重用无状态编码器/解码器来实现文件协议。 编解码器作者还需要定义编解码器将如何处理编码和解码错误。" + +#: ../../library/codecs.rst:295 +msgid "Error Handlers" +msgstr "错误处理方案" + +#: ../../library/codecs.rst:297 +msgid "" +"To simplify and standardize error handling, codecs may implement different " +"error handling schemes by accepting the *errors* string argument:" +msgstr "为了简化和标准化错误处理,编解码器可以通过接受 *errors* 字符串参数来实现不同的错误处理方案:" + +#: ../../library/codecs.rst:317 +msgid "" +"The following error handlers can be used with all Python :ref:`standard-" +"encodings` codecs:" +msgstr "以下错误处理器可以用于所有的 Python :ref:`standard-encodings` 编解码器:" + +#: ../../library/codecs.rst:323 ../../library/codecs.rst:365 +#: ../../library/codecs.rst:384 +msgid "Value" +msgstr "值" + +#: ../../library/codecs.rst:323 ../../library/codecs.rst:365 +#: ../../library/codecs.rst:384 ../../library/codecs.rst:1317 +#: ../../library/codecs.rst:1384 ../../library/codecs.rst:1439 +msgid "Meaning" +msgstr "含意" + +#: ../../library/codecs.rst:325 +msgid "``'strict'``" +msgstr "``'strict'``" + +#: ../../library/codecs.rst:325 +msgid "" +"Raise :exc:`UnicodeError` (or a subclass), this is the default. Implemented " +"in :func:`strict_errors`." +msgstr "引发 :exc:`UnicodeError` (或其子类),这是默认的方案。 在 :func:`strict_errors` 中实现。" + +#: ../../library/codecs.rst:329 +msgid "``'ignore'``" +msgstr "``'ignore'``" + +#: ../../library/codecs.rst:329 +msgid "" +"Ignore the malformed data and continue without further notice. Implemented " +"in :func:`ignore_errors`." +msgstr "忽略错误格式的数据并且不加进一步通知就继续执行。 在 :func:`ignore_errors` 中实现。" + +#: ../../library/codecs.rst:333 +msgid "``'replace'``" +msgstr "``'replace'``" + +#: ../../library/codecs.rst:333 +msgid "" +"Replace with a replacement marker. On encoding, use ``?`` (ASCII character)." +" On decoding, use ``�`` (U+FFFD, the official REPLACEMENT CHARACTER). " +"Implemented in :func:`replace_errors`." +msgstr "" +"用一个替代标记来替换。 在编码时,使用 ``?`` (ASCII 字符)。 在解码时,使用 ``�`` (U+FFFD,官方的 REPLACEMENT " +"CHARACTER)。 在 :func:`replace_errors` 中实现。" + +#: ../../library/codecs.rst:339 +msgid "``'backslashreplace'``" +msgstr "``'backslashreplace'``" + +#: ../../library/codecs.rst:339 +msgid "" +"Replace with backslashed escape sequences. On encoding, use hexadecimal form" +" of Unicode code point with formats ``\\xhh`` ``\\uxxxx`` ``\\Uxxxxxxxx``. " +"On decoding, use hexadecimal form of byte value with format ``\\xhh``. " +"Implemented in :func:`backslashreplace_errors`." +msgstr "" +"用反斜杠转义序列来替换。 在编码时,使用格式为 ``\\xhh`` ``\\uxxxx`` ``\\Uxxxxxxxx`` 的 Unicode " +"码位十六进制表示形式。 在解码时,使用格式为 ``\\xhh`` 的字节值十六进制表示形式。 在 " +":func:`backslashreplace_errors` 中实现。" + +#: ../../library/codecs.rst:347 +msgid "``'surrogateescape'``" +msgstr "``'surrogateescape'``" + +#: ../../library/codecs.rst:347 +msgid "" +"On decoding, replace byte with individual surrogate code ranging from " +"``U+DC80`` to ``U+DCFF``. This code will then be turned back into the same " +"byte when the ``'surrogateescape'`` error handler is used when encoding the " +"data. (See :pep:`383` for more.)" +msgstr "" +"在解码时,将字节替换为 ``U+DC80`` 至 ``U+DCFF`` 范围内的单个代理代码。 当在编码数据时使用 " +"``'surrogateescape'`` 错误处理方案时,此代理将被转换回相同的字节。 (请参阅 :pep:`383` 了解详情。)" + +#: ../../library/codecs.rst:361 +msgid "" +"The following error handlers are only applicable to encoding (within " +":term:`text encodings `):" +msgstr "下列错误处理器仅在编码时适用(在 :term:`文本编码格式 ` 类别以内):" + +#: ../../library/codecs.rst:367 +msgid "``'xmlcharrefreplace'``" +msgstr "``'xmlcharrefreplace'``" + +#: ../../library/codecs.rst:367 +msgid "" +"Replace with XML/HTML numeric character reference, which is a decimal form " +"of Unicode code point with format ``&#num;`` Implemented in " +":func:`xmlcharrefreplace_errors`." +msgstr "" +"用 XML/HTML 数字字符引用来替换,即格式为 ``&#num;`` 的 Unicode 码位十进制表达形式。 在 " +":func:`xmlcharrefreplace_errors` 中实现。" + +#: ../../library/codecs.rst:372 +msgid "``'namereplace'``" +msgstr "``'namereplace'``" + +#: ../../library/codecs.rst:372 +msgid "" +"Replace with ``\\N{...}`` escape sequences, what appears in the braces is " +"the Name property from Unicode Character Database. Implemented in " +":func:`namereplace_errors`." +msgstr "" +"用 ``\\N{...}`` 转义序列来替换,出现在花括号中的是来自 Unicode 字符数据库的 Name 属性。 在 " +":func:`namereplace_errors` 中实现。" + +#: ../../library/codecs.rst:381 +msgid "" +"In addition, the following error handler is specific to the given codecs:" +msgstr "此外,以下错误处理方案被专门用于指定的编解码器:" + +#: ../../library/codecs.rst:384 +msgid "Codecs" +msgstr "编解码器" + +#: ../../library/codecs.rst:386 +msgid "``'surrogatepass'``" +msgstr "``'surrogatepass'``" + +#: ../../library/codecs.rst:386 +msgid "utf-8, utf-16, utf-32, utf-16-be, utf-16-le, utf-32-be, utf-32-le" +msgstr "utf-8, utf-16, utf-32, utf-16-be, utf-16-le, utf-32-be, utf-32-le" + +#: ../../library/codecs.rst:386 +msgid "" +"Allow encoding and decoding surrogate code point (``U+D800`` - ``U+DFFF``) " +"as normal code point. Otherwise these codecs treat the presence of surrogate" +" code point in :class:`str` as an error." +msgstr "" +"允许将代理码位 (``U+D800`` - ``U+DFFF``) 作为正常码位来编码和解码。 否则这些编解码器会将 :class:`str` " +"中出现的代理码位视为错误。" + +#: ../../library/codecs.rst:393 +msgid "The ``'surrogateescape'`` and ``'surrogatepass'`` error handlers." +msgstr "``'surrogateescape'`` 和 ``'surrogatepass'`` 错误处理方案。" + +#: ../../library/codecs.rst:396 +msgid "" +"The ``'surrogatepass'`` error handler now works with utf-16\\* and utf-32\\*" +" codecs." +msgstr "``'surrogatepass'`` 错误处理器现在可适用于 utf-16\\* 和 utf-32\\* 编解码器。" + +#: ../../library/codecs.rst:400 +msgid "The ``'namereplace'`` error handler." +msgstr "``'namereplace'`` 错误处理方案。" + +#: ../../library/codecs.rst:403 +msgid "" +"The ``'backslashreplace'`` error handler now works with decoding and " +"translating." +msgstr "``'backslashreplace'`` 错误处理器现在可适用于解码和转码。" + +#: ../../library/codecs.rst:407 +msgid "" +"The set of allowed values can be extended by registering a new named error " +"handler:" +msgstr "允许的值集合可以通过注册新命名的错误处理方案来扩展:" + +#: ../../library/codecs.rst:412 +msgid "" +"Register the error handling function *error_handler* under the name *name*. " +"The *error_handler* argument will be called during encoding and decoding in " +"case of an error, when *name* is specified as the errors parameter." +msgstr "" +"在名称 *name* 之下注册错误处理函数 *error_handler*。 当 *name* 被指定为错误形参时,*error_handler* " +"参数所指定的对象将在编码和解码期间发生错误的情况下被调用," + +#: ../../library/codecs.rst:416 +msgid "" +"For encoding, *error_handler* will be called with a " +":exc:`UnicodeEncodeError` instance, which contains information about the " +"location of the error. The error handler must either raise this or a " +"different exception, or return a tuple with a replacement for the " +"unencodable part of the input and a position where encoding should continue." +" The replacement may be either :class:`str` or :class:`bytes`. If the " +"replacement is bytes, the encoder will simply copy them into the output " +"buffer. If the replacement is a string, the encoder will encode the " +"replacement. Encoding continues on original input at the specified position." +" Negative position values will be treated as being relative to the end of " +"the input string. If the resulting position is out of bound an " +":exc:`IndexError` will be raised." +msgstr "" +"对于编码操作,将会调用 *error_handler* 并传入一个 :exc:`UnicodeEncodeError` " +"实例,其中包含有关错误位置的信息。 " +"错误处理程序必须引发此异常或别的异常,或者也可以返回一个元组,其中包含输入的不可编码部分的替换对象,以及应当继续进行编码的位置。 替换对象可以为 " +":class:`str` 或 :class:`bytes` 类型。 如果替换对象为字节串,编码器将简单地将其复制到输出缓冲区。 " +"如果替换对象为字符串,编码器将对替换对象进行编码。 对原始输入的编码操作会在指定位置继续进行。 负的位置值将被视为相对于输入字符串的末尾。 " +"如果结果位置超出范围则将引发 :exc:`IndexError`。" + +#: ../../library/codecs.rst:428 +msgid "" +"Decoding and translating works similarly, except :exc:`UnicodeDecodeError` " +"or :exc:`UnicodeTranslateError` will be passed to the handler and that the " +"replacement from the error handler will be put into the output directly." +msgstr "" +"解码和转换的做法很相似,不同之处在于将把 :exc:`UnicodeDecodeError` 或 " +":exc:`UnicodeTranslateError` 传给处理程序,并且来自错误处理程序的替换对象将被直接放入输出。" + +#: ../../library/codecs.rst:433 +msgid "" +"Previously registered error handlers (including the standard error handlers)" +" can be looked up by name:" +msgstr "之前注册的错误处理方案(包括标准错误处理方案)可通过名称进行查找:" + +#: ../../library/codecs.rst:438 +msgid "Return the error handler previously registered under the name *name*." +msgstr "返回之前在名称 *name* 之下注册的错误处理方案。" + +#: ../../library/codecs.rst:440 +msgid "Raises a :exc:`LookupError` in case the handler cannot be found." +msgstr "在处理方案无法找到时将引发 :exc:`LookupError`。" + +#: ../../library/codecs.rst:442 +msgid "" +"The following standard error handlers are also made available as module " +"level functions:" +msgstr "以下标准错误处理方案也可通过模块层级函数的方式来使用:" + +#: ../../library/codecs.rst:447 +msgid "Implements the ``'strict'`` error handling." +msgstr "实现了 ``'strict'`` 错误处理。" + +#: ../../library/codecs.rst:449 +msgid "Each encoding or decoding error raises a :exc:`UnicodeError`." +msgstr "每个编码或解码错误都将引发 :exc:`UnicodeError`。" + +#: ../../library/codecs.rst:454 +msgid "Implements the ``'ignore'`` error handling." +msgstr "实现了 ``'ignore'`` 错误处理。" + +#: ../../library/codecs.rst:456 +msgid "" +"Malformed data is ignored; encoding or decoding is continued without further" +" notice." +msgstr "错误格式的数据会被忽略;编码或解码将继续执行而不再通知。" + +#: ../../library/codecs.rst:462 +msgid "Implements the ``'replace'`` error handling." +msgstr "实现了 ``'replace'`` 错误处理。" + +#: ../../library/codecs.rst:464 +msgid "" +"Substitutes ``?`` (ASCII character) for encoding errors or ``�`` (U+FFFD, " +"the official REPLACEMENT CHARACTER) for decoding errors." +msgstr "" +"替换 ``?`` (ASCII 字符) 表示编码错误或者 ``�`` (U+FFFD,官方的 REPLACEMENT CHARACTER) " +"表示解码错误。" + +#: ../../library/codecs.rst:470 +msgid "Implements the ``'backslashreplace'`` error handling." +msgstr "实现了 ``'backslashreplace'`` 错误处理。" + +#: ../../library/codecs.rst:472 +msgid "" +"Malformed data is replaced by a backslashed escape sequence. On encoding, " +"use the hexadecimal form of Unicode code point with formats ``\\xhh`` " +"``\\uxxxx`` ``\\Uxxxxxxxx``. On decoding, use the hexadecimal form of byte " +"value with format ``\\xhh``." +msgstr "" +"错误格式的数据会用反斜杠转义序列来替换。 在编码时,使用格式为 ``\\xhh`` ``\\uxxxx`` ``\\Uxxxxxxxx`` 的 " +"Unicode 码位十六进制表示形式。 在解码时,使用格式为 ``\\xhh`` 的字节值十六进制表示形式。" + +#: ../../library/codecs.rst:477 +msgid "Works with decoding and translating." +msgstr "适用于解码和转码。" + +#: ../../library/codecs.rst:483 +msgid "" +"Implements the ``'xmlcharrefreplace'`` error handling (for encoding within " +":term:`text encoding` only)." +msgstr "实现 ``'xmlcharrefreplace'`` 错误处理(仅限 :term:`text encoding` 范围内的编码操作)。" + +#: ../../library/codecs.rst:486 +msgid "" +"The unencodable character is replaced by an appropriate XML/HTML numeric " +"character reference, which is a decimal form of Unicode code point with " +"format ``&#num;`` ." +msgstr "不可编码的字符会被替换为适当的 XML/HTML 数值字符引用,即格式为 ``&#num;`` 的十进制形式 Unicode 码位。" + +#: ../../library/codecs.rst:493 +msgid "" +"Implements the ``'namereplace'`` error handling (for encoding within " +":term:`text encoding` only)." +msgstr "实现 ``'namereplace'`` 错误处理(仅限 :term:`text encoding` 范围内的编码操作)。" + +#: ../../library/codecs.rst:496 +msgid "" +"The unencodable character is replaced by a ``\\N{...}`` escape sequence. The" +" set of characters that appear in the braces is the Name property from " +"Unicode Character Database. For example, the German lowercase letter ``'ß'``" +" will be converted to byte sequence ``\\N{LATIN SMALL LETTER SHARP S}`` ." +msgstr "" +"不可编码的字符会被替换为 ``\\N{...}`` 转义序列。 出现在花括号内的字符集合是来自于 Unicode 字符数据库的 Name 属性。 " +"例如,德语小写字母 ``'ß'`` 将被转换为字符序列 ``\\N{LATIN SMALL LETTER SHARP S}``。" + +#: ../../library/codecs.rst:507 +msgid "Stateless Encoding and Decoding" +msgstr "无状态的编码和解码" + +#: ../../library/codecs.rst:509 +msgid "" +"The base :class:`Codec` class defines these methods which also define the " +"function interfaces of the stateless encoder and decoder:" +msgstr "基本 :class:`Codec` 类定义了这些方法,同时还定义了无状态编码器和解码器的函数接口:" + +#: ../../library/codecs.rst:515 +msgid "" +"Encodes the object *input* and returns a tuple (output object, length " +"consumed). For instance, :term:`text encoding` converts a string object to a" +" bytes object using a particular character set encoding (e.g., ``cp1252`` or" +" ``iso-8859-1``)." +msgstr "" +"编码 *input* 对象并返回一个元组 (输出对象, 消耗长度)。 例如,:term:`text encoding` 会使用特定的字符集编码格式 " +"(例如 ``cp1252`` 或 ``iso-8859-1``) 将字符串转换为字节串对象。" + +#: ../../library/codecs.rst:520 ../../library/codecs.rst:542 +msgid "" +"The *errors* argument defines the error handling to apply. It defaults to " +"``'strict'`` handling." +msgstr "*errors* 参数定义了要应用的错误处理方案。 默认为 ``'strict'`` 处理方案。" + +#: ../../library/codecs.rst:523 +msgid "" +"The method may not store state in the :class:`Codec` instance. Use " +":class:`StreamWriter` for codecs which have to keep state in order to make " +"encoding efficient." +msgstr "" +"此方法不一定会在 :class:`Codec` 实例中保存状态。 可使用必须保存状态的 :class:`StreamWriter` " +"作为编解码器以便高效地进行编码。" + +#: ../../library/codecs.rst:527 +msgid "" +"The encoder must be able to handle zero length input and return an empty " +"object of the output object type in this situation." +msgstr "编码器必须能够处理零长度的输入并在此情况下返回输出对象类型的空对象。" + +#: ../../library/codecs.rst:533 +msgid "" +"Decodes the object *input* and returns a tuple (output object, length " +"consumed). For instance, for a :term:`text encoding`, decoding converts a " +"bytes object encoded using a particular character set encoding to a string " +"object." +msgstr "" +"解码 *input* 对象并返回一个元组 (输出对象, 消耗长度)。 例如,:term:`text encoding` " +"的解码操作会使用特定的字符集编码格式将字节串对象转换为字符串对象。" + +#: ../../library/codecs.rst:538 +msgid "" +"For text encodings and bytes-to-bytes codecs, *input* must be a bytes object" +" or one which provides the read-only buffer interface -- for example, buffer" +" objects and memory mapped files." +msgstr "" +"对于文本编码格式和字节到字节编解码器,*input* 必须为一个字节串对象或提供了只读缓冲区接口的对象 -- 例如,缓冲区对象和映射到内存的文件。" + +#: ../../library/codecs.rst:545 +msgid "" +"The method may not store state in the :class:`Codec` instance. Use " +":class:`StreamReader` for codecs which have to keep state in order to make " +"decoding efficient." +msgstr "" +"此方法不一定会在 :class:`Codec` 实例中保存状态。 可使用必须保存状态的 :class:`StreamReader` " +"作为编解码器以便高效地进行解码。" + +#: ../../library/codecs.rst:549 +msgid "" +"The decoder must be able to handle zero length input and return an empty " +"object of the output object type in this situation." +msgstr "解码器必须能够处理零长度的输入并在此情况下返回输出对象类型的空对象。" + +#: ../../library/codecs.rst:554 +msgid "Incremental Encoding and Decoding" +msgstr "增量式的编码和解码" + +#: ../../library/codecs.rst:556 +msgid "" +"The :class:`IncrementalEncoder` and :class:`IncrementalDecoder` classes " +"provide the basic interface for incremental encoding and decoding. " +"Encoding/decoding the input isn't done with one call to the stateless " +"encoder/decoder function, but with multiple calls to the " +":meth:`~IncrementalEncoder.encode`/:meth:`~IncrementalDecoder.decode` method" +" of the incremental encoder/decoder. The incremental encoder/decoder keeps " +"track of the encoding/decoding process during method calls." +msgstr "" +":class:`IncrementalEncoder` 和 :class:`IncrementalDecoder` 类提供了增量式编码和解码的基本接口。" +" 对输入的编码/解码不是通过对无状态编码器/解码器的一次调用,而是通过对增量式编码器/解码器的 " +":meth:`~IncrementalEncoder.encode`/:meth:`~IncrementalDecoder.decode` " +"方法的多次调用。 增量式编码器/解码器会在方法调用期间跟踪编码/解码过程。" + +#: ../../library/codecs.rst:564 +msgid "" +"The joined output of calls to the " +":meth:`~IncrementalEncoder.encode`/:meth:`~IncrementalDecoder.decode` method" +" is the same as if all the single inputs were joined into one, and this " +"input was encoded/decoded with the stateless encoder/decoder." +msgstr "" +"调用 :meth:`~IncrementalEncoder.encode`/:meth:`~IncrementalDecoder.decode` " +"方法后的全部输出相当于将所有通过无状态编码器/解码器进行编码/解码的单个输入连接在一起所得到的输出。" + +#: ../../library/codecs.rst:573 +msgid "IncrementalEncoder Objects" +msgstr "IncrementalEncoder 对象" + +#: ../../library/codecs.rst:575 +msgid "" +"The :class:`IncrementalEncoder` class is used for encoding an input in " +"multiple steps. It defines the following methods which every incremental " +"encoder must define in order to be compatible with the Python codec " +"registry." +msgstr "" +":class:`IncrementalEncoder` 类用来对一个输入进行分步编码。 它定义了以下方法,每个增量式编码器都必须定义这些方法以便与 " +"Python 编解码器注册表相兼容。" + +#: ../../library/codecs.rst:582 +msgid "Constructor for an :class:`IncrementalEncoder` instance." +msgstr ":class:`IncrementalEncoder` 实例的构造器。" + +#: ../../library/codecs.rst:584 +msgid "" +"All incremental encoders must provide this constructor interface. They are " +"free to add additional keyword arguments, but only the ones defined here are" +" used by the Python codec registry." +msgstr "" +"所有增量式编码器必须提供此构造器接口。 它们可以自由地添加额外的关键字参数,但只有在这里定义的参数才会被 Python 编解码器注册表所使用。" + +#: ../../library/codecs.rst:588 +msgid "" +"The :class:`IncrementalEncoder` may implement different error handling " +"schemes by providing the *errors* keyword argument. See :ref:`error-" +"handlers` for possible values." +msgstr "" +":class:`IncrementalEncoder` 可以通过提供 *errors* 关键字参数来实现不同的错误处理方案。 可用的值请参阅 " +":ref:`error-handlers`。" + +#: ../../library/codecs.rst:592 +msgid "" +"The *errors* argument will be assigned to an attribute of the same name. " +"Assigning to this attribute makes it possible to switch between different " +"error handling strategies during the lifetime of the " +":class:`IncrementalEncoder` object." +msgstr "" +"*errors* 参数将被赋值给一个同名的属性。 通过对此属性赋值就可以在 :class:`IncrementalEncoder` " +"对象的生命期内在不同的错误处理策略之间进行切换。" + +#: ../../library/codecs.rst:600 +msgid "" +"Encodes *object* (taking the current state of the encoder into account) and " +"returns the resulting encoded object. If this is the last call to " +":meth:`encode` *final* must be true (the default is false)." +msgstr "" +"编码 *object* (会将编码器的当前状态纳入考虑) 并返回已编码的结果对象。 如果这是对 :meth:`encode` 的最终调用则 " +"*final* 必须为真值(默认为假值)。" + +#: ../../library/codecs.rst:607 +msgid "" +"Reset the encoder to the initial state. The output is discarded: call " +"``.encode(object, final=True)``, passing an empty byte or text string if " +"necessary, to reset the encoder and to get the output." +msgstr "" +"将编码器重置为初始状态。 输出将被丢弃:调用 ``.encode(object, " +"final=True)``,在必要时传入一个空字节串或字符串,重置编码器并得到输出。" + +#: ../../library/codecs.rst:614 +msgid "" +"Return the current state of the encoder which must be an integer. The " +"implementation should make sure that ``0`` is the most common state. (States" +" that are more complicated than integers can be converted into an integer by" +" marshaling/pickling the state and encoding the bytes of the resulting " +"string into an integer.)" +msgstr "" +"返回编码器的当前状态,该值必须为一个整数。 实现应当确保 ``0`` 是最常见的状态。 " +"(比整数更复杂的状态表示可以通过编组/选择状态并将结果字符串的字节数据编码为整数来转换为一个整数值)。" + +#: ../../library/codecs.rst:623 +msgid "" +"Set the state of the encoder to *state*. *state* must be an encoder state " +"returned by :meth:`getstate`." +msgstr "将编码器的状态设为 *state*。 *state* 必须为 :meth:`getstate` 所返回的一个编码器状态。" + +#: ../../library/codecs.rst:630 +msgid "IncrementalDecoder Objects" +msgstr "IncrementalDecoder 对象" + +#: ../../library/codecs.rst:632 +msgid "" +"The :class:`IncrementalDecoder` class is used for decoding an input in " +"multiple steps. It defines the following methods which every incremental " +"decoder must define in order to be compatible with the Python codec " +"registry." +msgstr "" +":class:`IncrementalDecoder` 类用来对一个输入进行分步解码。 它定义了以下方法,每个增量式解码器都必须定义这些方法以便与 " +"Python 编解码器注册表相兼容。" + +#: ../../library/codecs.rst:639 +msgid "Constructor for an :class:`IncrementalDecoder` instance." +msgstr ":class:`IncrementalDecoder` 实例的构造器。" + +#: ../../library/codecs.rst:641 +msgid "" +"All incremental decoders must provide this constructor interface. They are " +"free to add additional keyword arguments, but only the ones defined here are" +" used by the Python codec registry." +msgstr "" +"所有增量式解码器必须提供此构造器接口。 它们可以自由地添加额外的关键字参数,但只有在这里定义的参数才会被 Python 编解码器注册表所使用。" + +#: ../../library/codecs.rst:645 +msgid "" +"The :class:`IncrementalDecoder` may implement different error handling " +"schemes by providing the *errors* keyword argument. See :ref:`error-" +"handlers` for possible values." +msgstr "" +":class:`IncrementalDecoder` 可以通过提供 *errors* 关键字参数来实现不同的错误处理方案。 可用的值请参阅 " +":ref:`error-handlers`。" + +#: ../../library/codecs.rst:649 +msgid "" +"The *errors* argument will be assigned to an attribute of the same name. " +"Assigning to this attribute makes it possible to switch between different " +"error handling strategies during the lifetime of the " +":class:`IncrementalDecoder` object." +msgstr "" +"*errors* 参数将被赋值给一个同名的属性。 通过对此属性赋值就可以在 :class:`IncrementalDecoder` " +"对象的生命期内在不同的错误处理策略之间进行切换。" + +#: ../../library/codecs.rst:657 +msgid "" +"Decodes *object* (taking the current state of the decoder into account) and " +"returns the resulting decoded object. If this is the last call to " +":meth:`decode` *final* must be true (the default is false). If *final* is " +"true the decoder must decode the input completely and must flush all " +"buffers. If this isn't possible (e.g. because of incomplete byte sequences " +"at the end of the input) it must initiate error handling just like in the " +"stateless case (which might raise an exception)." +msgstr "" +"解码 *object* (会将解码器的当前状态纳入考虑) 并返回已解码的结果对象。 如果这是对 :meth:`decode` 的最终调用则 " +"*final* 必须为真值(默认为假值)。 如果 *final* 为真值则解码器必须对输入进行完全解码并且必须 刷新所有缓冲区。 " +"如果这无法做到(例如由于在输入结束时字节串序列不完整)则它必须像在无状态的情况下那样初始化错误处理(这可能引发一个异常)。" + +#: ../../library/codecs.rst:668 +msgid "Reset the decoder to the initial state." +msgstr "将解码器重置为初始状态。" + +#: ../../library/codecs.rst:673 +msgid "" +"Return the current state of the decoder. This must be a tuple with two " +"items, the first must be the buffer containing the still undecoded input. " +"The second must be an integer and can be additional state info. (The " +"implementation should make sure that ``0`` is the most common additional " +"state info.) If this additional state info is ``0`` it must be possible to " +"set the decoder to the state which has no input buffered and ``0`` as the " +"additional state info, so that feeding the previously buffered input to the " +"decoder returns it to the previous state without producing any output. " +"(Additional state info that is more complicated than integers can be " +"converted into an integer by marshaling/pickling the info and encoding the " +"bytes of the resulting string into an integer.)" +msgstr "" +"返回解码器的当前状态。 这必须为一个二元组,第一项必须是包含尚未解码的输入的缓冲区。 第二项必须为一个整数,可以表示附加状态信息。 (实现应当确保 " +"``0`` 是最常见的附加状态信息。) 如果此附加状态信息为 ``0`` 则必须可以将解码器设为没有已缓冲输入并且以 ``0`` " +"作为附加状态信息,以便将先前已缓冲的输入馈送到解码器使其返回到先前的状态而不产生任何输出。 " +"(比整数更复杂的附加状态信息可以通过编组/选择状态信息并将结果字符串的字节数据编码为整数来转换为一个整数值。)" + +#: ../../library/codecs.rst:688 +msgid "" +"Set the state of the decoder to *state*. *state* must be a decoder state " +"returned by :meth:`getstate`." +msgstr "将解码器的状态设为 *state*。 *state* 必须为 :meth:`getstate` 所返回的一个解码器状态。" + +#: ../../library/codecs.rst:693 +msgid "Stream Encoding and Decoding" +msgstr "流式的编码和解码" + +#: ../../library/codecs.rst:696 +msgid "" +"The :class:`StreamWriter` and :class:`StreamReader` classes provide generic " +"working interfaces which can be used to implement new encoding submodules " +"very easily. See :mod:`encodings.utf_8` for an example of how this is done." +msgstr "" +":class:`StreamWriter` 和 :class:`StreamReader` " +"类提供了一些泛用工作接口,可被用来非常方便地实现新的编码格式子模块。 请参阅 :mod:`encodings.utf_8` 中的示例了解如何做到这一点。" + +#: ../../library/codecs.rst:704 +msgid "StreamWriter Objects" +msgstr "StreamWriter 对象" + +#: ../../library/codecs.rst:706 +msgid "" +"The :class:`StreamWriter` class is a subclass of :class:`Codec` and defines " +"the following methods which every stream writer must define in order to be " +"compatible with the Python codec registry." +msgstr "" +":class:`StreamWriter` 类是 :class:`Codec` 的子类,它定义了以下方法,每个流式写入器都必须定义这些方法以便与 " +"Python 编解码器注册表相兼容。" + +#: ../../library/codecs.rst:713 +msgid "Constructor for a :class:`StreamWriter` instance." +msgstr ":class:`StreamWriter` 实例的构造器。" + +#: ../../library/codecs.rst:715 +msgid "" +"All stream writers must provide this constructor interface. They are free to" +" add additional keyword arguments, but only the ones defined here are used " +"by the Python codec registry." +msgstr "" +"所有流式写入器必须提供此构造器接口。 它们可以自由地添加额外的关键字参数,但只有在这里定义的参数才会被 Python 编解码器注册表所使用。" + +#: ../../library/codecs.rst:719 +msgid "" +"The *stream* argument must be a file-like object open for writing text or " +"binary data, as appropriate for the specific codec." +msgstr "*stream* 参数必须为一个基于特定编解码器打开用于写入文本或二进制数据的文件型对象。" + +#: ../../library/codecs.rst:722 +msgid "" +"The :class:`StreamWriter` may implement different error handling schemes by " +"providing the *errors* keyword argument. See :ref:`error-handlers` for the " +"standard error handlers the underlying stream codec may support." +msgstr "" +":class:`StreamWriter` 可以通过提供 *errors* 关键字参数来实现不同的错误处理方案。 请参阅 :ref:`error-" +"handlers` 了解下层的流式编解码器可支持的标准错误处理方案。" + +#: ../../library/codecs.rst:726 +msgid "" +"The *errors* argument will be assigned to an attribute of the same name. " +"Assigning to this attribute makes it possible to switch between different " +"error handling strategies during the lifetime of the :class:`StreamWriter` " +"object." +msgstr "" +"*errors* 参数将被赋值给一个同名的属性。 通过对此属性赋值就可以在 :class:`StreamWriter` " +"对象的生命期内在不同的错误处理策略之间进行切换。" + +#: ../../library/codecs.rst:732 +msgid "Writes the object's contents encoded to the stream." +msgstr "将编码后的对象内容写入到流。" + +#: ../../library/codecs.rst:737 +msgid "" +"Writes the concatenated iterable of strings to the stream (possibly by " +"reusing the :meth:`write` method). Infinite or very large iterables are not " +"supported. The standard bytes-to-bytes codecs do not support this method." +msgstr "" +"将拼接后的字符串可迭代对象写入到流(可能通过重用 :meth:`write` 方法)。 无限长或非常大的可迭代对象不受支持。 " +"标准的字节到字节编解码器不支持此方法。" + +#: ../../library/codecs.rst:745 ../../library/codecs.rst:840 +msgid "Resets the codec buffers used for keeping internal state." +msgstr "重置用于保持内部状态的编解码器缓冲区。" + +#: ../../library/codecs.rst:747 +msgid "" +"Calling this method should ensure that the data on the output is put into a " +"clean state that allows appending of new fresh data without having to rescan" +" the whole stream to recover state." +msgstr "调用此方法应当确保在干净的状态下放入输出数据,以允许直接添加新的干净数据而无须重新扫描整个流来恢复状态。" + +#: ../../library/codecs.rst:752 +msgid "" +"In addition to the above methods, the :class:`StreamWriter` must also " +"inherit all other methods and attributes from the underlying stream." +msgstr "除了上述的方法,:class:`StreamWriter` 还必须继承来自下层流的所有其他方法和属性。" + +#: ../../library/codecs.rst:759 +msgid "StreamReader Objects" +msgstr "StreamReader 对象" + +#: ../../library/codecs.rst:761 +msgid "" +"The :class:`StreamReader` class is a subclass of :class:`Codec` and defines " +"the following methods which every stream reader must define in order to be " +"compatible with the Python codec registry." +msgstr "" +":class:`StreamReader` 类是 :class:`Codec` 的子类,它定义了以下方法,每个流式读取器都必须定义这些方法以便与 " +"Python 编解码器注册表相兼容。" + +#: ../../library/codecs.rst:768 +msgid "Constructor for a :class:`StreamReader` instance." +msgstr ":class:`StreamReader` 实例的构造器。" + +#: ../../library/codecs.rst:770 +msgid "" +"All stream readers must provide this constructor interface. They are free to" +" add additional keyword arguments, but only the ones defined here are used " +"by the Python codec registry." +msgstr "" +"所有流式读取器必须提供此构造器接口。 它们可以自由地添加额外的关键字参数,但只有在这里定义的参数才会被 Python 编解码器注册表所使用。" + +#: ../../library/codecs.rst:774 +msgid "" +"The *stream* argument must be a file-like object open for reading text or " +"binary data, as appropriate for the specific codec." +msgstr "*stream* 参数必须为一个基于特定编解码器打开用于读取文本或二进制数据的文件型对象。" + +#: ../../library/codecs.rst:777 +msgid "" +"The :class:`StreamReader` may implement different error handling schemes by " +"providing the *errors* keyword argument. See :ref:`error-handlers` for the " +"standard error handlers the underlying stream codec may support." +msgstr "" +":class:`StreamReader` 可以通过提供 *errors* 关键字参数来实现不同的错误处理方案。 请参阅 :ref:`error-" +"handlers` 了解下层的流式编解码器可支持的标准错误处理方案。" + +#: ../../library/codecs.rst:781 +msgid "" +"The *errors* argument will be assigned to an attribute of the same name. " +"Assigning to this attribute makes it possible to switch between different " +"error handling strategies during the lifetime of the :class:`StreamReader` " +"object." +msgstr "" +"*errors* 参数将被赋值给一个同名的属性。 通过对此属性赋值就可以在 :class:`StreamReader` " +"对象的生命期内在不同的错误处理策略之间进行切换。" + +#: ../../library/codecs.rst:785 +msgid "" +"The set of allowed values for the *errors* argument can be extended with " +":func:`register_error`." +msgstr "*errors* 参数所允许的值集合可以使用 :func:`register_error` 来扩展。" + +#: ../../library/codecs.rst:791 +msgid "Decodes data from the stream and returns the resulting object." +msgstr "解码来自流的数据并返回结果对象。" + +#: ../../library/codecs.rst:793 +msgid "" +"The *chars* argument indicates the number of decoded code points or bytes to" +" return. The :func:`read` method will never return more data than requested," +" but it might return less, if there is not enough available." +msgstr "" +"*chars* 参数指明要返回的解码后码位或字节数量。 :func:`read` " +"方法绝不会返回超出请求数量的数据,但如果可用数量不足,它可能返回少于请求数量的数据。" + +#: ../../library/codecs.rst:798 +msgid "" +"The *size* argument indicates the approximate maximum number of encoded " +"bytes or code points to read for decoding. The decoder can modify this " +"setting as appropriate. The default value -1 indicates to read and decode as" +" much as possible. This parameter is intended to prevent having to decode " +"huge files in one step." +msgstr "" +"*size* 参数指明要读取并解码的已编码字节或码位的最大数量近似值。 解码器可以适当地修改此设置。 默认值 -1 表示尽可能多地读取并解码。 " +"此形参的目的是防止一次性解码过于巨大的文件。" + +#: ../../library/codecs.rst:805 +msgid "" +"The *firstline* flag indicates that it would be sufficient to only return " +"the first line, if there are decoding errors on later lines." +msgstr "*firstline* 旗标指明如果在后续行发生解码错误,则仅返回第一行就足够了。" + +#: ../../library/codecs.rst:809 +msgid "" +"The method should use a greedy read strategy meaning that it should read as " +"much data as is allowed within the definition of the encoding and the given " +"size, e.g. if optional encoding endings or state markers are available on " +"the stream, these should be read too." +msgstr "" +"此方法应当使用“贪婪”读取策略,这意味着它应当在编码格式定义和给定大小所允许的情况下尽可能多地读取数据,例如,如果在流上存在可选的编码结束或状态标记,这些内容也应当被读取。" + +#: ../../library/codecs.rst:817 +msgid "Read one line from the input stream and return the decoded data." +msgstr "从输入流读取一行并返回解码后的数据。" + +#: ../../library/codecs.rst:819 +msgid "" +"*size*, if given, is passed as size argument to the stream's :meth:`read` " +"method." +msgstr "如果给定了 *size*,则将其作为 size 参数传递给流的 :meth:`read` 方法。" + +#: ../../library/codecs.rst:822 +msgid "" +"If *keepends* is false line-endings will be stripped from the lines " +"returned." +msgstr "如果 *keepends* 为假值,则行结束符将从返回的行中去除。" + +#: ../../library/codecs.rst:828 +msgid "" +"Read all lines available on the input stream and return them as a list of " +"lines." +msgstr "从输入流读取所有行并将其作为一个行列表返回。" + +#: ../../library/codecs.rst:831 +msgid "" +"Line-endings are implemented using the codec's :meth:`decode` method and are" +" included in the list entries if *keepends* is true." +msgstr "行结束符会使用编解码器的 :meth:`decode` 方法来实现,并且如果 *keepends* 为真值则会将其包含在列表条目中。" + +#: ../../library/codecs.rst:834 +msgid "" +"*sizehint*, if given, is passed as the *size* argument to the stream's " +":meth:`read` method." +msgstr "如果给定了 *sizehint*,则将其作为 *size* 参数传递给流的 :meth:`read` 方法。" + +#: ../../library/codecs.rst:842 +msgid "" +"Note that no stream repositioning should take place. This method is " +"primarily intended to be able to recover from decoding errors." +msgstr "请注意不应当对流进行重定位。 使用此方法的主要目的是为了能够从解码错误中恢复。" + +#: ../../library/codecs.rst:846 +msgid "" +"In addition to the above methods, the :class:`StreamReader` must also " +"inherit all other methods and attributes from the underlying stream." +msgstr "除了上述的方法,:class:`StreamReader` 还必须继承来自下层流的所有其他方法和属性。" + +#: ../../library/codecs.rst:852 +msgid "StreamReaderWriter Objects" +msgstr "StreamReaderWriter 对象" + +#: ../../library/codecs.rst:854 +msgid "" +"The :class:`StreamReaderWriter` is a convenience class that allows wrapping " +"streams which work in both read and write modes." +msgstr ":class:`StreamReaderWriter` 是一个方便的类,允许对同时工作于读取和写入模式的流进行包装。" + +#: ../../library/codecs.rst:857 ../../library/codecs.rst:881 +msgid "" +"The design is such that one can use the factory functions returned by the " +":func:`lookup` function to construct the instance." +msgstr "其设计使得开发者可以使用 :func:`lookup` 函数所返回的工厂函数来构造实例。" + +#: ../../library/codecs.rst:863 +msgid "" +"Creates a :class:`StreamReaderWriter` instance. *stream* must be a file-like" +" object. *Reader* and *Writer* must be factory functions or classes " +"providing the :class:`StreamReader` and :class:`StreamWriter` interface " +"resp. Error handling is done in the same way as defined for the stream " +"readers and writers." +msgstr "" +"创建一个 :class:`StreamReaderWriter` 实例。 *stream* 必须为一个文件型对象。 *Reader* 和 " +"*Writer* 必须为分别提供了 :class:`StreamReader` 和 :class:`StreamWriter` 接口的工厂函数或类。 " +"错误处理通过与流式读取器和写入器所定义的相同方式来完成。" + +#: ../../library/codecs.rst:868 +msgid "" +":class:`StreamReaderWriter` instances define the combined interfaces of " +":class:`StreamReader` and :class:`StreamWriter` classes. They inherit all " +"other methods and attributes from the underlying stream." +msgstr "" +":class:`StreamReaderWriter` 实例定义了 :class:`StreamReader` 和 " +":class:`StreamWriter` 类的组合接口。 它们还继承了来自下层流的所有其他方法和属性。" + +#: ../../library/codecs.rst:876 +msgid "StreamRecoder Objects" +msgstr "StreamRecoder 对象" + +#: ../../library/codecs.rst:878 +msgid "" +"The :class:`StreamRecoder` translates data from one encoding to another, " +"which is sometimes useful when dealing with different encoding environments." +msgstr ":class:`StreamRecoder` 将数据从一种编码格式转换为另一种,这对于处理不同编码环境的情况有时会很有用。" + +#: ../../library/codecs.rst:887 +msgid "" +"Creates a :class:`StreamRecoder` instance which implements a two-way " +"conversion: *encode* and *decode* work on the frontend — the data visible to" +" code calling :meth:`read` and :meth:`write`, while *Reader* and *Writer* " +"work on the backend — the data in *stream*." +msgstr "" +"创建一个实现了双向转换的 :class:`StreamRecoder` 实例: *encode* 和 *decode* 工作于前端 — " +"对代码可见的数据调用 :meth:`read` 和 :meth:`write`,而 *Reader* 和 *Writer* 工作于后端 — " +"*stream* 中的数据。" + +#: ../../library/codecs.rst:892 +msgid "" +"You can use these objects to do transparent transcodings, e.g., from Latin-1" +" to UTF-8 and back." +msgstr "你可以使用这些对象来进行透明转码,例如从 Latin-1 转为 UTF-8 以及反向转换。" + +#: ../../library/codecs.rst:895 +msgid "The *stream* argument must be a file-like object." +msgstr "*stream* 参数必须为一个文件型对象。" + +#: ../../library/codecs.rst:897 +msgid "" +"The *encode* and *decode* arguments must adhere to the :class:`Codec` " +"interface. *Reader* and *Writer* must be factory functions or classes " +"providing objects of the :class:`StreamReader` and :class:`StreamWriter` " +"interface respectively." +msgstr "" +"*encode* 和 *decode* 参数必须遵循 :class:`Codec` 接口。 *Reader* 和 *Writer* 必须为分别提供了 " +":class:`StreamReader` 和 :class:`StreamWriter` 接口对象的工厂函数或类。" + +#: ../../library/codecs.rst:902 +msgid "" +"Error handling is done in the same way as defined for the stream readers and" +" writers." +msgstr "错误处理通过与流式读取器和写入器所定义的相同方式来完成。" + +#: ../../library/codecs.rst:906 +msgid "" +":class:`StreamRecoder` instances define the combined interfaces of " +":class:`StreamReader` and :class:`StreamWriter` classes. They inherit all " +"other methods and attributes from the underlying stream." +msgstr "" +":class:`StreamRecoder` 实例定义了 :class:`StreamReader` 和 :class:`StreamWriter` " +"类的组合接口。 它们还继承了来自下层流的所有其他方法和属性。" + +#: ../../library/codecs.rst:914 +msgid "Encodings and Unicode" +msgstr "编码格式与 Unicode" + +#: ../../library/codecs.rst:916 +msgid "" +"Strings are stored internally as sequences of code points in range " +"``U+0000``--``U+10FFFF``. (See :pep:`393` for more details about the " +"implementation.) Once a string object is used outside of CPU and memory, " +"endianness and how these arrays are stored as bytes become an issue. As with" +" other codecs, serialising a string into a sequence of bytes is known as " +"*encoding*, and recreating the string from the sequence of bytes is known as" +" *decoding*. There are a variety of different text serialisation codecs, " +"which are collectivity referred to as :term:`text encodings `." +msgstr "" +"字符串在系统内部存储为 ``U+0000``--``U+10FFFF`` 范围内的码位序列。 (请参阅 :pep:`393` 了解有关实现的详情。) " +"一旦字符串对象要在 CPU 和内存以外使用,字节的大小端顺序和字节数组的存储方式就成为一个影响因素。 " +"如同使用其他编解码器一样,将字符串序列化为字节序列被称为 *编码*,而从字节序列重建字符串被称为 *解码*。 " +"存在许多不同的文本序列化编解码器,它们被统称为 :term:`文本编码格式 `。" + +#: ../../library/codecs.rst:926 +msgid "" +"The simplest text encoding (called ``'latin-1'`` or ``'iso-8859-1'``) maps " +"the code points 0--255 to the bytes ``0x0``--``0xff``, which means that a " +"string object that contains code points above ``U+00FF`` can't be encoded " +"with this codec. Doing so will raise a :exc:`UnicodeEncodeError` that looks " +"like the following (although the details of the error message may differ): " +"``UnicodeEncodeError: 'latin-1' codec can't encode character '\\u1234' in " +"position 3: ordinal not in range(256)``." +msgstr "" +"最简单的文本编码格式 (称为 ``'latin-1'`` 或 ``'iso-8859-1'``) 将码位 0--255 映射为字节值 " +"``0x0``--``0xff``,这意味着包含 ``U+00FF`` 以上码位的字符串对象无法使用此编解码器进行编码。 这样做将引发 " +":exc:`UnicodeEncodeError`,其形式类似下面这样(不过详细的错误信息可能会有所不同): ``UnicodeEncodeError:" +" 'latin-1' codec can't encode character '\\u1234' in position 3: ordinal not" +" in range(256)``。" + +#: ../../library/codecs.rst:934 +msgid "" +"There's another group of encodings (the so called charmap encodings) that " +"choose a different subset of all Unicode code points and how these code " +"points are mapped to the bytes ``0x0``--``0xff``. To see how this is done " +"simply open e.g. :file:`encodings/cp1252.py` (which is an encoding that is " +"used primarily on Windows). There's a string constant with 256 characters " +"that shows you which character is mapped to which byte value." +msgstr "" +"还有另外一组编码格式(所谓的字符映射编码)会选择全部 Unicode 码位的不同子集并设定如何将这些码位映射为字节值 " +"``0x0``--``0xff``。 要查看这是如何实现的,只需简单地打开相应源码例如 :file:`encodings/cp1252.py` " +"(这是一个主要在 Windows 上使用的编码格式)。 其中会有一个包含 256 个字符的字符串常量,指明每个字符所映射的字节值。" + +#: ../../library/codecs.rst:941 +msgid "" +"All of these encodings can only encode 256 of the 1114112 code points " +"defined in Unicode. A simple and straightforward way that can store each " +"Unicode code point, is to store each code point as four consecutive bytes. " +"There are two possibilities: store the bytes in big endian or in little " +"endian order. These two encodings are called ``UTF-32-BE`` and ``UTF-32-LE``" +" respectively. Their disadvantage is that if e.g. you use ``UTF-32-BE`` on a" +" little endian machine you will always have to swap bytes on encoding and " +"decoding. ``UTF-32`` avoids this problem: bytes will always be in natural " +"endianness. When these bytes are read by a CPU with a different endianness, " +"then bytes have to be swapped though. To be able to detect the endianness of" +" a ``UTF-16`` or ``UTF-32`` byte sequence, there's the so called BOM (\"Byte" +" Order Mark\"). This is the Unicode character ``U+FEFF``. This character can" +" be prepended to every ``UTF-16`` or ``UTF-32`` byte sequence. The byte " +"swapped version of this character (``0xFFFE``) is an illegal character that " +"may not appear in a Unicode text. So when the first character in a " +"``UTF-16`` or ``UTF-32`` byte sequence appears to be a ``U+FFFE`` the bytes " +"have to be swapped on decoding. Unfortunately the character ``U+FEFF`` had a" +" second purpose as a ``ZERO WIDTH NO-BREAK SPACE``: a character that has no " +"width and doesn't allow a word to be split. It can e.g. be used to give " +"hints to a ligature algorithm. With Unicode 4.0 using ``U+FEFF`` as a ``ZERO" +" WIDTH NO-BREAK SPACE`` has been deprecated (with ``U+2060`` (``WORD " +"JOINER``) assuming this role). Nevertheless Unicode software still must be " +"able to handle ``U+FEFF`` in both roles: as a BOM it's a device to determine" +" the storage layout of the encoded bytes, and vanishes once the byte " +"sequence has been decoded into a string; as a ``ZERO WIDTH NO-BREAK SPACE`` " +"it's a normal character that will be decoded like any other." +msgstr "" +"所有这些编码格式只能对 Unicode 所定义的 1114112 个码位中的 256 个进行编码。 一种能够存储每个 Unicode " +"码位的简单而直接的办法就是将每个友们存储为四个连续的字节。 存在两种不同的可能性:以大端序存储或以小端序存储。 这两种编码格式分别被称为 " +"``UTF-32-BE`` 和 ``UTF-32-LE``。 他们共有的缺点可以举例说明:如果你在一台小端序的机器上使用 ``UTF-32-BE`` " +"则你必须在编码和解码时翻转字节。 ``UTF-32`` 避免了这个问题:字节的排列将总是使用自然端序。 当这些字节被具有不同端序的 CPU " +"读取时,则必须进行字节翻转。 为了能够检测 ``UTF-16`` 或 ``UTF-32`` 字节序列的大小端序,可以使用所谓的 BOM " +"(\"字节顺序标记\")。 这对应于 Unicode 字符 ``U+FEFF``。 此字符可被添加到每个 ``UTF-16`` 或 ``UTF-32``" +" 字节序列的开头。 此字符的字节翻转版本 (``0xFFFE``) 是一个不可出现于 Unicode 文本中的非法字符。 因此当发现一个 " +"``UTF-16`` 或 ``UTF-32`` 字节序列的首个字符是 ``U+FFFE`` 时,就必须在解码时进行字节翻转。 不幸的是字符 " +"``U+FEFF`` 还有第二个含义 ``ZERO WIDTH NO-BREAK SPACE``: 即宽度为零并且不允许用来拆分单词的字符。 " +"它可以被用来为语言分析算法提供提示。 在 Unicode 4.0 中使用 ``U+FEFF`` 表示 ``ZERO WIDTH NO-BREAK " +"SPACE`` 已被弃用 (改用 ``U+2060`` (``WORD JOINER``) 负责此任务)。 然而 Unicode 软件仍然必须能够处理 " +"``U+FEFF`` 的两个含义:作为 BOM 它被用来确定已编码字节的存储布局,并在字节序列被解码为字符串后将其去除;作为 ``ZERO WIDTH " +"NO-BREAK SPACE`` 它是一个普通字符,将像其他字符一样被解码。" + +#: ../../library/codecs.rst:967 +msgid "" +"There's another encoding that is able to encode the full range of Unicode " +"characters: UTF-8. UTF-8 is an 8-bit encoding, which means there are no " +"issues with byte order in UTF-8. Each byte in a UTF-8 byte sequence consists" +" of two parts: marker bits (the most significant bits) and payload bits. The" +" marker bits are a sequence of zero to four ``1`` bits followed by a ``0`` " +"bit. Unicode characters are encoded like this (with x being payload bits, " +"which when concatenated give the Unicode character):" +msgstr "" +"还有另一种编码格式能够对所有 Unicode 字符进行编码:UTF-8。 UTF-8 是一种 8 位编码,这意味着在 UTF-8 中没有字节顺序问题。 " +"UTF-8 字节序列中的每个字节由两部分组成:标志位(最重要的位)和内容位。 标志位是由零至四个值为 ``1`` 的二进制位加一个值为 ``0`` " +"的二进制位构成的序列。 Unicode 字符会按以下形式进行编码(其中 x 为内容位,当拼接为一体时将给出对应的 Unicode 字符):" + +#: ../../library/codecs.rst:976 +msgid "Range" +msgstr "范围" + +#: ../../library/codecs.rst:976 +msgid "Encoding" +msgstr "编码" + +#: ../../library/codecs.rst:978 +msgid "``U-00000000`` ... ``U-0000007F``" +msgstr "``U-00000000`` ... ``U-0000007F``" + +#: ../../library/codecs.rst:978 +msgid "0xxxxxxx" +msgstr "0xxxxxxx" + +#: ../../library/codecs.rst:980 +msgid "``U-00000080`` ... ``U-000007FF``" +msgstr "``U-00000080`` ... ``U-000007FF``" + +#: ../../library/codecs.rst:980 +msgid "110xxxxx 10xxxxxx" +msgstr "110xxxxx 10xxxxxx" + +#: ../../library/codecs.rst:982 +msgid "``U-00000800`` ... ``U-0000FFFF``" +msgstr "``U-00000800`` ... ``U-0000FFFF``" + +#: ../../library/codecs.rst:982 +msgid "1110xxxx 10xxxxxx 10xxxxxx" +msgstr "1110xxxx 10xxxxxx 10xxxxxx" + +#: ../../library/codecs.rst:984 +msgid "``U-00010000`` ... ``U-0010FFFF``" +msgstr "``U-00010000`` ... ``U-0010FFFF``" + +#: ../../library/codecs.rst:984 +msgid "11110xxx 10xxxxxx 10xxxxxx 10xxxxxx" +msgstr "11110xxx 10xxxxxx 10xxxxxx 10xxxxxx" + +#: ../../library/codecs.rst:987 +msgid "" +"The least significant bit of the Unicode character is the rightmost x bit." +msgstr "Unicode 字符最不重要的一个位就是最右侧的二进制位 x。" + +#: ../../library/codecs.rst:989 +msgid "" +"As UTF-8 is an 8-bit encoding no BOM is required and any ``U+FEFF`` " +"character in the decoded string (even if it's the first character) is " +"treated as a ``ZERO WIDTH NO-BREAK SPACE``." +msgstr "" +"由于 UTF-8 是一种 8 位编码格式,因此 BOM 是不必要的,并且已编码字符串中的任何 ``U+FEFF`` " +"字符(即使是作为第一个字符)都会被视为是 ``ZERO WIDTH NO-BREAK SPACE``。" + +#: ../../library/codecs.rst:993 +msgid "" +"Without external information it's impossible to reliably determine which " +"encoding was used for encoding a string. Each charmap encoding can decode " +"any random byte sequence. However that's not possible with UTF-8, as UTF-8 " +"byte sequences have a structure that doesn't allow arbitrary byte sequences." +" To increase the reliability with which a UTF-8 encoding can be detected, " +"Microsoft invented a variant of UTF-8 (that Python calls ``\"utf-8-sig\"``) " +"for its Notepad program: Before any of the Unicode characters is written to " +"the file, a UTF-8 encoded BOM (which looks like this as a byte sequence: " +"``0xef``, ``0xbb``, ``0xbf``) is written. As it's rather improbable that any" +" charmap encoded file starts with these byte values (which would e.g. map to" +msgstr "" +"在没有外部信息的情况下将不可能毫无疑义地确定一个字符串使用了何种编码格式。 每种字符映射编码格式都可以解码任意的随机字节序列。 然而对 UTF-8 " +"来说这却是不可能的,因为 UTF-8 字节序列具有不允许任意字节序列的特别结构。 为了提升 UTF-8 编码格式检测的可靠性,Microsoft " +"发明了一种 UTF-8 的变体形式 (Python 称之为 ``\"utf-8-sig\"``) 专门用于其 Notepad 程序:在任何 " +"Unicode 字节被写入文件之前,会先写入一个 UTF-8 编码的 BOM (它看起来是这样一个字节序列: ``0xef``, ``0xbb``, " +"``0xbf``)。 由于任何字符映射编码后的文件都不大可能以这些字节值开头 (例如它们会映射为" + +#: ../../library/codecs.rst:0 +msgid "LATIN SMALL LETTER I WITH DIAERESIS" +msgstr "LATIN SMALL LETTER I WITH DIAERESIS" + +#: ../../library/codecs.rst:0 +msgid "RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK" +msgstr "RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK" + +#: ../../library/codecs.rst:0 +msgid "INVERTED QUESTION MARK" +msgstr "INVERTED QUESTION MARK" + +#: ../../library/codecs.rst:1009 +msgid "" +"in iso-8859-1), this increases the probability that a ``utf-8-sig`` encoding" +" can be correctly guessed from the byte sequence. So here the BOM is not " +"used to be able to determine the byte order used for generating the byte " +"sequence, but as a signature that helps in guessing the encoding. On " +"encoding the utf-8-sig codec will write ``0xef``, ``0xbb``, ``0xbf`` as the " +"first three bytes to the file. On decoding ``utf-8-sig`` will skip those " +"three bytes if they appear as the first three bytes in the file. In UTF-8, " +"the use of the BOM is discouraged and should generally be avoided." +msgstr "" +"对于 iso-8859-1 编码格式来说),这提升了根据字节序列来正确猜测 ``utf-8-sig`` 编码格式的成功率。 所以在这里 BOM " +"的作用并不是帮助确定生成字节序列所使用的字节顺序,而是作为帮助猜测编码格式的记号。 在进行编码时 utf-8-sig 编解码器将把 ``0xef``, " +"``0xbb``, ``0xbf`` 作为头三个字节写入文件。 在进行解码时 ``utf-8-sig`` " +"将跳过这三个字节,如果它们作为文件的头三个字节出现的话。 在 UTF-8 中并不推荐使用 BOM,通常应当避免它们的出现。" + +#: ../../library/codecs.rst:1022 +msgid "Standard Encodings" +msgstr "标准编码" + +#: ../../library/codecs.rst:1024 +msgid "" +"Python comes with a number of codecs built-in, either implemented as C " +"functions or with dictionaries as mapping tables. The following table lists " +"the codecs by name, together with a few common aliases, and the languages " +"for which the encoding is likely used. Neither the list of aliases nor the " +"list of languages is meant to be exhaustive. Notice that spelling " +"alternatives that only differ in case or use a hyphen instead of an " +"underscore are also valid aliases; therefore, e.g. ``'utf-8'`` is a valid " +"alias for the ``'utf_8'`` codec." +msgstr "" +"Python 自带了许多内置的编解码器,它们的实现或者是通过 C 函数,或者是通过映射表。 " +"以下表格是按名称排序的编解码器列表,并提供了一些常见别名以及编码格式通常针对的语言。 别名和语言列表都不是详尽无遗的。 " +"请注意仅有大小写区别或使用连字符替代下划线的拼写形式也都是有效的别名;因此,``'utf-8'`` 是 ``'utf_8'`` 编解码器的有效别名。" + +#: ../../library/codecs.rst:1034 +msgid "" +"Some common encodings can bypass the codecs lookup machinery to improve " +"performance. These optimization opportunities are only recognized by CPython" +" for a limited set of (case insensitive) aliases: utf-8, utf8, latin-1, " +"latin1, iso-8859-1, iso8859-1, mbcs (Windows only), ascii, us-ascii, utf-16," +" utf16, utf-32, utf32, and the same using underscores instead of dashes. " +"Using alternative aliases for these encodings may result in slower " +"execution." +msgstr "" +"有些常见编码格式可以绕过编解码器查找机制来提升性能。 这些优化机会对于 CPython 来说仅能通过一组有限的别名(大小写不敏感)来识别:utf-8, " +"utf8, latin-1, latin1, iso-8859-1, iso8859-1, mbcs (Windows 专属), ascii, us-" +"ascii, utf-16, utf16, utf-32, utf32, 也包括使用下划线替代连字符的的形式。 " +"使用这些编码格式的其他别名可能会导致更慢的执行速度。" + +#: ../../library/codecs.rst:1042 +msgid "Optimization opportunity recognized for us-ascii." +msgstr "可识别针对 us-ascii 的优化机会。" + +#: ../../library/codecs.rst:1045 +msgid "" +"Many of the character sets support the same languages. They vary in " +"individual characters (e.g. whether the EURO SIGN is supported or not), and " +"in the assignment of characters to code positions. For the European " +"languages in particular, the following variants typically exist:" +msgstr "" +"许多字符集都支持相同的语言。 它们在个别字符(例如是否支持 EURO SIGN 等)以及给字符所分配的码位方面存在差异。 " +"特别是对于欧洲语言来说,通常存在以下几种变体:" + +#: ../../library/codecs.rst:1050 +msgid "an ISO 8859 codeset" +msgstr "某个 ISO 8859 编码集" + +#: ../../library/codecs.rst:1052 +msgid "" +"a Microsoft Windows code page, which is typically derived from an 8859 " +"codeset, but replaces control characters with additional graphic characters" +msgstr "某个 Microsoft Windows 编码页,通常是派生自某个 8859 编码集,但会用附加的图形字符来替换控制字符。" + +#: ../../library/codecs.rst:1055 +msgid "an IBM EBCDIC code page" +msgstr "某个 IBM EBCDIC 编码页" + +#: ../../library/codecs.rst:1057 +msgid "an IBM PC code page, which is ASCII compatible" +msgstr "某个 IBM PC 编码页,通常会兼容 ASCII" + +#: ../../library/codecs.rst:1062 ../../library/codecs.rst:1317 +#: ../../library/codecs.rst:1384 ../../library/codecs.rst:1439 +msgid "Codec" +msgstr "编码" + +#: ../../library/codecs.rst:1062 ../../library/codecs.rst:1317 +#: ../../library/codecs.rst:1384 ../../library/codecs.rst:1439 +msgid "Aliases" +msgstr "别名" + +#: ../../library/codecs.rst:1062 +msgid "Languages" +msgstr "语言" + +#: ../../library/codecs.rst:1064 +msgid "ascii" +msgstr "ascii" + +#: ../../library/codecs.rst:1064 +msgid "646, us-ascii" +msgstr "646, us-ascii" + +#: ../../library/codecs.rst:1064 ../../library/codecs.rst:1070 +#: ../../library/codecs.rst:1078 +msgid "English" +msgstr "英语" + +#: ../../library/codecs.rst:1066 +msgid "big5" +msgstr "big5" + +#: ../../library/codecs.rst:1066 +msgid "big5-tw, csbig5" +msgstr "big5-tw, csbig5" + +#: ../../library/codecs.rst:1066 ../../library/codecs.rst:1068 +#: ../../library/codecs.rst:1126 +msgid "Traditional Chinese" +msgstr "繁体中文" + +#: ../../library/codecs.rst:1068 +msgid "big5hkscs" +msgstr "big5hkscs" + +#: ../../library/codecs.rst:1068 +msgid "big5-hkscs, hkscs" +msgstr "big5-hkscs, hkscs" + +#: ../../library/codecs.rst:1070 +msgid "cp037" +msgstr "cp037" + +#: ../../library/codecs.rst:1070 +msgid "IBM037, IBM039" +msgstr "IBM037, IBM039" + +#: ../../library/codecs.rst:1072 +msgid "cp273" +msgstr "cp273" + +#: ../../library/codecs.rst:1072 +msgid "273, IBM273, csIBM273" +msgstr "273, IBM273, csIBM273" + +#: ../../library/codecs.rst:1072 +msgid "German" +msgstr "德语" + +#: ../../library/codecs.rst:1076 +msgid "cp424" +msgstr "cp424" + +#: ../../library/codecs.rst:1076 +msgid "EBCDIC-CP-HE, IBM424" +msgstr "EBCDIC-CP-HE, IBM424" + +#: ../../library/codecs.rst:1076 ../../library/codecs.rst:1096 +#: ../../library/codecs.rst:1106 ../../library/codecs.rst:1149 +#: ../../library/codecs.rst:1212 +msgid "Hebrew" +msgstr "希伯来语" + +#: ../../library/codecs.rst:1078 +msgid "cp437" +msgstr "cp437" + +#: ../../library/codecs.rst:1078 +msgid "437, IBM437" +msgstr "437, IBM437" + +#: ../../library/codecs.rst:1080 +msgid "cp500" +msgstr "cp500" + +#: ../../library/codecs.rst:1080 +msgid "EBCDIC-CP-BE, EBCDIC-CP-CH, IBM500" +msgstr "EBCDIC-CP-BE, EBCDIC-CP-CH, IBM500" + +#: ../../library/codecs.rst:1080 ../../library/codecs.rst:1089 +#: ../../library/codecs.rst:1100 ../../library/codecs.rst:1136 +#: ../../library/codecs.rst:1143 ../../library/codecs.rst:1196 +#: ../../library/codecs.rst:1224 ../../library/codecs.rst:1252 +msgid "Western Europe" +msgstr "西欧" + +#: ../../library/codecs.rst:1083 +msgid "cp720" +msgstr "cp720" + +#: ../../library/codecs.rst:1083 ../../library/codecs.rst:1110 +#: ../../library/codecs.rst:1151 ../../library/codecs.rst:1208 +msgid "Arabic" +msgstr "阿拉伯语" + +#: ../../library/codecs.rst:1085 +msgid "cp737" +msgstr "cp737" + +#: ../../library/codecs.rst:1085 ../../library/codecs.rst:1116 +#: ../../library/codecs.rst:1120 ../../library/codecs.rst:1145 +#: ../../library/codecs.rst:1210 ../../library/codecs.rst:1245 +msgid "Greek" +msgstr "希腊语" + +#: ../../library/codecs.rst:1087 +msgid "cp775" +msgstr "cp775" + +#: ../../library/codecs.rst:1087 +msgid "IBM775" +msgstr "IBM775" + +#: ../../library/codecs.rst:1087 ../../library/codecs.rst:1153 +#: ../../library/codecs.rst:1203 ../../library/codecs.rst:1220 +msgid "Baltic languages" +msgstr "波罗的海语言" + +#: ../../library/codecs.rst:1089 +msgid "cp850" +msgstr "cp850" + +#: ../../library/codecs.rst:1089 +msgid "850, IBM850" +msgstr "850, IBM850" + +#: ../../library/codecs.rst:1091 +msgid "cp852" +msgstr "cp852" + +#: ../../library/codecs.rst:1091 +msgid "852, IBM852" +msgstr "852, IBM852" + +#: ../../library/codecs.rst:1091 ../../library/codecs.rst:1138 +#: ../../library/codecs.rst:1199 ../../library/codecs.rst:1249 +msgid "Central and Eastern Europe" +msgstr "中欧和东欧" + +#: ../../library/codecs.rst:1093 +msgid "cp855" +msgstr "cp855" + +#: ../../library/codecs.rst:1093 +msgid "855, IBM855" +msgstr "855, IBM855" + +#: ../../library/codecs.rst:1093 ../../library/codecs.rst:1140 +#: ../../library/codecs.rst:1205 ../../library/codecs.rst:1242 +msgid "Bulgarian, Byelorussian, Macedonian, Russian, Serbian" +msgstr "保加利亚语,白俄罗斯语,马其顿语,俄语,塞尔维亚语" + +#: ../../library/codecs.rst:1096 +msgid "cp856" +msgstr "cp856" + +#: ../../library/codecs.rst:1098 +msgid "cp857" +msgstr "cp857" + +#: ../../library/codecs.rst:1098 +msgid "857, IBM857" +msgstr "857, IBM857" + +#: ../../library/codecs.rst:1098 ../../library/codecs.rst:1130 +#: ../../library/codecs.rst:1147 ../../library/codecs.rst:1214 +#: ../../library/codecs.rst:1254 +msgid "Turkish" +msgstr "土耳其语" + +#: ../../library/codecs.rst:1100 +msgid "cp858" +msgstr "cp858" + +#: ../../library/codecs.rst:1100 +msgid "858, IBM858" +msgstr "858, IBM858" + +#: ../../library/codecs.rst:1102 +msgid "cp860" +msgstr "cp860" + +#: ../../library/codecs.rst:1102 +msgid "860, IBM860" +msgstr "860, IBM860" + +#: ../../library/codecs.rst:1102 +msgid "Portuguese" +msgstr "葡萄牙语" + +#: ../../library/codecs.rst:1104 +msgid "cp861" +msgstr "cp861" + +#: ../../library/codecs.rst:1104 +msgid "861, CP-IS, IBM861" +msgstr "861, CP-IS, IBM861" + +#: ../../library/codecs.rst:1104 ../../library/codecs.rst:1247 +msgid "Icelandic" +msgstr "冰岛语" + +#: ../../library/codecs.rst:1106 +msgid "cp862" +msgstr "cp862" + +#: ../../library/codecs.rst:1106 +msgid "862, IBM862" +msgstr "862, IBM862" + +#: ../../library/codecs.rst:1108 +msgid "cp863" +msgstr "cp863" + +#: ../../library/codecs.rst:1108 +msgid "863, IBM863" +msgstr "863, IBM863" + +#: ../../library/codecs.rst:1108 +msgid "Canadian" +msgstr "加拿大语" + +#: ../../library/codecs.rst:1110 +msgid "cp864" +msgstr "cp864" + +#: ../../library/codecs.rst:1110 +msgid "IBM864" +msgstr "IBM864" + +#: ../../library/codecs.rst:1112 +msgid "cp865" +msgstr "cp865" + +#: ../../library/codecs.rst:1112 +msgid "865, IBM865" +msgstr "865, IBM865" + +#: ../../library/codecs.rst:1112 +msgid "Danish, Norwegian" +msgstr "丹麦语/挪威语" + +#: ../../library/codecs.rst:1114 +msgid "cp866" +msgstr "cp866" + +#: ../../library/codecs.rst:1114 +msgid "866, IBM866" +msgstr "866, IBM866" + +#: ../../library/codecs.rst:1114 ../../library/codecs.rst:1230 +msgid "Russian" +msgstr "俄语" + +#: ../../library/codecs.rst:1116 +msgid "cp869" +msgstr "cp869" + +#: ../../library/codecs.rst:1116 +msgid "869, CP-GR, IBM869" +msgstr "869, CP-GR, IBM869" + +#: ../../library/codecs.rst:1118 +msgid "cp874" +msgstr "cp874" + +#: ../../library/codecs.rst:1118 +msgid "Thai" +msgstr "泰语" + +#: ../../library/codecs.rst:1120 +msgid "cp875" +msgstr "cp875" + +#: ../../library/codecs.rst:1122 +msgid "cp932" +msgstr "cp932" + +#: ../../library/codecs.rst:1122 +msgid "932, ms932, mskanji, ms-kanji" +msgstr "932, ms932, mskanji, ms-kanji" + +#: ../../library/codecs.rst:1122 ../../library/codecs.rst:1157 +#: ../../library/codecs.rst:1159 ../../library/codecs.rst:1161 +#: ../../library/codecs.rst:1178 ../../library/codecs.rst:1181 +#: ../../library/codecs.rst:1186 ../../library/codecs.rst:1189 +#: ../../library/codecs.rst:1191 ../../library/codecs.rst:1259 +#: ../../library/codecs.rst:1262 ../../library/codecs.rst:1265 +msgid "Japanese" +msgstr "日语" + +#: ../../library/codecs.rst:1124 +msgid "cp949" +msgstr "cp949" + +#: ../../library/codecs.rst:1124 +msgid "949, ms949, uhc" +msgstr "949, ms949, uhc" + +#: ../../library/codecs.rst:1124 ../../library/codecs.rst:1163 +#: ../../library/codecs.rst:1193 ../../library/codecs.rst:1228 +msgid "Korean" +msgstr "韩语" + +#: ../../library/codecs.rst:1126 +msgid "cp950" +msgstr "cp950" + +#: ../../library/codecs.rst:1126 +msgid "950, ms950" +msgstr "950, ms950" + +#: ../../library/codecs.rst:1128 +msgid "cp1006" +msgstr "cp1006" + +#: ../../library/codecs.rst:1128 +msgid "Urdu" +msgstr "乌尔都语" + +#: ../../library/codecs.rst:1130 +msgid "cp1026" +msgstr "cp1026" + +#: ../../library/codecs.rst:1130 +msgid "ibm1026" +msgstr "ibm1026" + +#: ../../library/codecs.rst:1132 +msgid "cp1125" +msgstr "cp1125" + +#: ../../library/codecs.rst:1132 +msgid "1125, ibm1125, cp866u, ruscii" +msgstr "1125, ibm1125, cp866u, ruscii" + +#: ../../library/codecs.rst:1132 ../../library/codecs.rst:1236 +msgid "Ukrainian" +msgstr "乌克兰语" + +#: ../../library/codecs.rst:1136 +msgid "cp1140" +msgstr "cp1140" + +#: ../../library/codecs.rst:1136 +msgid "ibm1140" +msgstr "ibm1140" + +#: ../../library/codecs.rst:1138 +msgid "cp1250" +msgstr "cp1250" + +#: ../../library/codecs.rst:1138 +msgid "windows-1250" +msgstr "windows-1250" + +#: ../../library/codecs.rst:1140 +msgid "cp1251" +msgstr "cp1251" + +#: ../../library/codecs.rst:1140 +msgid "windows-1251" +msgstr "windows-1251" + +#: ../../library/codecs.rst:1143 +msgid "cp1252" +msgstr "cp1252" + +#: ../../library/codecs.rst:1143 +msgid "windows-1252" +msgstr "windows-1252" + +#: ../../library/codecs.rst:1145 +msgid "cp1253" +msgstr "cp1253" + +#: ../../library/codecs.rst:1145 +msgid "windows-1253" +msgstr "windows-1253" + +#: ../../library/codecs.rst:1147 +msgid "cp1254" +msgstr "cp1254" + +#: ../../library/codecs.rst:1147 +msgid "windows-1254" +msgstr "windows-1254" + +#: ../../library/codecs.rst:1149 +msgid "cp1255" +msgstr "cp1255" + +#: ../../library/codecs.rst:1149 +msgid "windows-1255" +msgstr "windows-1255" + +#: ../../library/codecs.rst:1151 +msgid "cp1256" +msgstr "cp1256" + +#: ../../library/codecs.rst:1151 +msgid "windows-1256" +msgstr "windows-1256" + +#: ../../library/codecs.rst:1153 +msgid "cp1257" +msgstr "cp1257" + +#: ../../library/codecs.rst:1153 +msgid "windows-1257" +msgstr "windows-1257" + +#: ../../library/codecs.rst:1155 +msgid "cp1258" +msgstr "cp1258" + +#: ../../library/codecs.rst:1155 +msgid "windows-1258" +msgstr "windows-1258" + +#: ../../library/codecs.rst:1155 +msgid "Vietnamese" +msgstr "越南语" + +#: ../../library/codecs.rst:1157 +msgid "euc_jp" +msgstr "euc_jp" + +#: ../../library/codecs.rst:1157 +msgid "eucjp, ujis, u-jis" +msgstr "eucjp, ujis, u-jis" + +#: ../../library/codecs.rst:1159 +msgid "euc_jis_2004" +msgstr "euc_jis_2004" + +#: ../../library/codecs.rst:1159 +msgid "jisx0213, eucjis2004" +msgstr "jisx0213, eucjis2004" + +#: ../../library/codecs.rst:1161 +msgid "euc_jisx0213" +msgstr "euc_jisx0213" + +#: ../../library/codecs.rst:1161 +msgid "eucjisx0213" +msgstr "eucjisx0213" + +#: ../../library/codecs.rst:1163 +msgid "euc_kr" +msgstr "euc_kr" + +#: ../../library/codecs.rst:1163 +msgid "euckr, korean, ksc5601, ks_c-5601, ks_c-5601-1987, ksx1001, ks_x-1001" +msgstr "euckr, korean, ksc5601, ks_c-5601, ks_c-5601-1987, ksx1001, ks_x-1001" + +#: ../../library/codecs.rst:1167 +msgid "gb2312" +msgstr "gb2312" + +#: ../../library/codecs.rst:1167 +msgid "" +"chinese, csiso58gb231280, euc-cn, euccn, eucgb2312-cn, gb2312-1980, " +"gb2312-80, iso-ir-58" +msgstr "" +"chinese, csiso58gb231280, euc-cn, euccn, eucgb2312-cn, gb2312-1980, " +"gb2312-80, iso-ir-58" + +#: ../../library/codecs.rst:1167 ../../library/codecs.rst:1176 +msgid "Simplified Chinese" +msgstr "简体中文" + +#: ../../library/codecs.rst:1172 +msgid "gbk" +msgstr "gbk" + +#: ../../library/codecs.rst:1172 +msgid "936, cp936, ms936" +msgstr "936, cp936, ms936" + +#: ../../library/codecs.rst:1172 ../../library/codecs.rst:1174 +msgid "Unified Chinese" +msgstr "统一汉语" + +#: ../../library/codecs.rst:1174 +msgid "gb18030" +msgstr "gb18030" + +#: ../../library/codecs.rst:1174 +msgid "gb18030-2000" +msgstr "gb18030-2000" + +#: ../../library/codecs.rst:1176 +msgid "hz" +msgstr "hz" + +#: ../../library/codecs.rst:1176 +msgid "hzgb, hz-gb, hz-gb-2312" +msgstr "hzgb, hz-gb, hz-gb-2312" + +#: ../../library/codecs.rst:1178 +msgid "iso2022_jp" +msgstr "iso2022_jp" + +#: ../../library/codecs.rst:1178 +msgid "csiso2022jp, iso2022jp, iso-2022-jp" +msgstr "csiso2022jp, iso2022jp, iso-2022-jp" + +#: ../../library/codecs.rst:1181 +msgid "iso2022_jp_1" +msgstr "iso2022_jp_1" + +#: ../../library/codecs.rst:1181 +msgid "iso2022jp-1, iso-2022-jp-1" +msgstr "iso2022jp-1, iso-2022-jp-1" + +#: ../../library/codecs.rst:1183 +msgid "iso2022_jp_2" +msgstr "iso2022_jp_2" + +#: ../../library/codecs.rst:1183 +msgid "iso2022jp-2, iso-2022-jp-2" +msgstr "iso2022jp-2, iso-2022-jp-2" + +#: ../../library/codecs.rst:1183 +msgid "Japanese, Korean, Simplified Chinese, Western Europe, Greek" +msgstr "日语,韩语,简体中文,西欧,希腊语" + +#: ../../library/codecs.rst:1186 +msgid "iso2022_jp_2004" +msgstr "iso2022_jp_2004" + +#: ../../library/codecs.rst:1186 +msgid "iso2022jp-2004, iso-2022-jp-2004" +msgstr "iso2022jp-2004, iso-2022-jp-2004" + +#: ../../library/codecs.rst:1189 +msgid "iso2022_jp_3" +msgstr "iso2022_jp_3" + +#: ../../library/codecs.rst:1189 +msgid "iso2022jp-3, iso-2022-jp-3" +msgstr "iso2022jp-3, iso-2022-jp-3" + +#: ../../library/codecs.rst:1191 +msgid "iso2022_jp_ext" +msgstr "iso2022_jp_ext" + +#: ../../library/codecs.rst:1191 +msgid "iso2022jp-ext, iso-2022-jp-ext" +msgstr "iso2022jp-ext, iso-2022-jp-ext" + +#: ../../library/codecs.rst:1193 +msgid "iso2022_kr" +msgstr "iso2022_kr" + +#: ../../library/codecs.rst:1193 +msgid "csiso2022kr, iso2022kr, iso-2022-kr" +msgstr "csiso2022kr, iso2022kr, iso-2022-kr" + +#: ../../library/codecs.rst:1196 +msgid "latin_1" +msgstr "latin_1" + +#: ../../library/codecs.rst:1196 +msgid "iso-8859-1, iso8859-1, 8859, cp819, latin, latin1, L1" +msgstr "iso-8859-1, iso8859-1, 8859, cp819, latin, latin1, L1" + +#: ../../library/codecs.rst:1199 +msgid "iso8859_2" +msgstr "iso8859_2" + +#: ../../library/codecs.rst:1199 +msgid "iso-8859-2, latin2, L2" +msgstr "iso-8859-2, latin2, L2" + +#: ../../library/codecs.rst:1201 +msgid "iso8859_3" +msgstr "iso8859_3" + +#: ../../library/codecs.rst:1201 +msgid "iso-8859-3, latin3, L3" +msgstr "iso-8859-3, latin3, L3" + +#: ../../library/codecs.rst:1201 +msgid "Esperanto, Maltese" +msgstr "世界语,马耳他语" + +#: ../../library/codecs.rst:1203 +msgid "iso8859_4" +msgstr "iso8859_4" + +#: ../../library/codecs.rst:1203 +msgid "iso-8859-4, latin4, L4" +msgstr "iso-8859-4, latin4, L4" + +#: ../../library/codecs.rst:1205 +msgid "iso8859_5" +msgstr "iso8859_5" + +#: ../../library/codecs.rst:1205 +msgid "iso-8859-5, cyrillic" +msgstr "iso-8859-5, cyrillic" + +#: ../../library/codecs.rst:1208 +msgid "iso8859_6" +msgstr "iso8859_6" + +#: ../../library/codecs.rst:1208 +msgid "iso-8859-6, arabic" +msgstr "iso-8859-6, arabic" + +#: ../../library/codecs.rst:1210 +msgid "iso8859_7" +msgstr "iso8859_7" + +#: ../../library/codecs.rst:1210 +msgid "iso-8859-7, greek, greek8" +msgstr "iso-8859-7, greek, greek8" + +#: ../../library/codecs.rst:1212 +msgid "iso8859_8" +msgstr "iso8859_8" + +#: ../../library/codecs.rst:1212 +msgid "iso-8859-8, hebrew" +msgstr "iso-8859-8, hebrew" + +#: ../../library/codecs.rst:1214 +msgid "iso8859_9" +msgstr "iso8859_9" + +#: ../../library/codecs.rst:1214 +msgid "iso-8859-9, latin5, L5" +msgstr "iso-8859-9, latin5, L5" + +#: ../../library/codecs.rst:1216 +msgid "iso8859_10" +msgstr "iso8859_10" + +#: ../../library/codecs.rst:1216 +msgid "iso-8859-10, latin6, L6" +msgstr "iso-8859-10, latin6, L6" + +#: ../../library/codecs.rst:1216 +msgid "Nordic languages" +msgstr "北欧语言" + +#: ../../library/codecs.rst:1218 +msgid "iso8859_11" +msgstr "iso8859_11" + +#: ../../library/codecs.rst:1218 +msgid "iso-8859-11, thai" +msgstr "iso-8859-11, thai" + +#: ../../library/codecs.rst:1218 +msgid "Thai languages" +msgstr "泰语" + +#: ../../library/codecs.rst:1220 +msgid "iso8859_13" +msgstr "iso8859_13" + +#: ../../library/codecs.rst:1220 +msgid "iso-8859-13, latin7, L7" +msgstr "iso-8859-13, latin7, L7" + +#: ../../library/codecs.rst:1222 +msgid "iso8859_14" +msgstr "iso8859_14" + +#: ../../library/codecs.rst:1222 +msgid "iso-8859-14, latin8, L8" +msgstr "iso-8859-14, latin8, L8" + +#: ../../library/codecs.rst:1222 +msgid "Celtic languages" +msgstr "凯尔特语" + +#: ../../library/codecs.rst:1224 +msgid "iso8859_15" +msgstr "iso8859_15" + +#: ../../library/codecs.rst:1224 +msgid "iso-8859-15, latin9, L9" +msgstr "iso-8859-15, latin9, L9" + +#: ../../library/codecs.rst:1226 +msgid "iso8859_16" +msgstr "iso8859_16" + +#: ../../library/codecs.rst:1226 +msgid "iso-8859-16, latin10, L10" +msgstr "iso-8859-16, latin10, L10" + +#: ../../library/codecs.rst:1226 +msgid "South-Eastern Europe" +msgstr "东南欧" + +#: ../../library/codecs.rst:1228 +msgid "johab" +msgstr "johab" + +#: ../../library/codecs.rst:1228 +msgid "cp1361, ms1361" +msgstr "cp1361, ms1361" + +#: ../../library/codecs.rst:1230 +msgid "koi8_r" +msgstr "koi8_r" + +#: ../../library/codecs.rst:1232 +msgid "koi8_t" +msgstr "koi8_t" + +#: ../../library/codecs.rst:1232 +msgid "Tajik" +msgstr "塔吉克" + +#: ../../library/codecs.rst:1236 +msgid "koi8_u" +msgstr "koi8_u" + +#: ../../library/codecs.rst:1238 +msgid "kz1048" +msgstr "kz1048" + +#: ../../library/codecs.rst:1238 +msgid "kz_1048, strk1048_2002, rk1048" +msgstr "kz_1048, strk1048_2002, rk1048" + +#: ../../library/codecs.rst:1238 ../../library/codecs.rst:1256 +msgid "Kazakh" +msgstr "哈萨克语" + +#: ../../library/codecs.rst:1242 +msgid "mac_cyrillic" +msgstr "mac_cyrillic" + +#: ../../library/codecs.rst:1242 +msgid "maccyrillic" +msgstr "maccyrillic" + +#: ../../library/codecs.rst:1245 +msgid "mac_greek" +msgstr "mac_greek" + +#: ../../library/codecs.rst:1245 +msgid "macgreek" +msgstr "macgreek" + +#: ../../library/codecs.rst:1247 +msgid "mac_iceland" +msgstr "mac_iceland" + +#: ../../library/codecs.rst:1247 +msgid "maciceland" +msgstr "maciceland" + +#: ../../library/codecs.rst:1249 +msgid "mac_latin2" +msgstr "mac_latin2" + +#: ../../library/codecs.rst:1249 +msgid "maclatin2, maccentraleurope, mac_centeuro" +msgstr "maclatin2, maccentraleurope, mac_centeuro" + +#: ../../library/codecs.rst:1252 +msgid "mac_roman" +msgstr "mac_roman" + +#: ../../library/codecs.rst:1252 +msgid "macroman, macintosh" +msgstr "macroman, macintosh" + +#: ../../library/codecs.rst:1254 +msgid "mac_turkish" +msgstr "mac_turkish" + +#: ../../library/codecs.rst:1254 +msgid "macturkish" +msgstr "macturkish" + +#: ../../library/codecs.rst:1256 +msgid "ptcp154" +msgstr "ptcp154" + +#: ../../library/codecs.rst:1256 +msgid "csptcp154, pt154, cp154, cyrillic-asian" +msgstr "csptcp154, pt154, cp154, cyrillic-asian" + +#: ../../library/codecs.rst:1259 +msgid "shift_jis" +msgstr "shift_jis" + +#: ../../library/codecs.rst:1259 +msgid "csshiftjis, shiftjis, sjis, s_jis" +msgstr "csshiftjis, shiftjis, sjis, s_jis" + +#: ../../library/codecs.rst:1262 +msgid "shift_jis_2004" +msgstr "shift_jis_2004" + +#: ../../library/codecs.rst:1262 +msgid "shiftjis2004, sjis_2004, sjis2004" +msgstr "shiftjis2004, sjis_2004, sjis2004" + +#: ../../library/codecs.rst:1265 +msgid "shift_jisx0213" +msgstr "shift_jisx0213" + +#: ../../library/codecs.rst:1265 +msgid "shiftjisx0213, sjisx0213, s_jisx0213" +msgstr "shiftjisx0213, sjisx0213, s_jisx0213" + +#: ../../library/codecs.rst:1268 +msgid "utf_32" +msgstr "utf_32" + +#: ../../library/codecs.rst:1268 +msgid "U32, utf32" +msgstr "U32, utf32" + +#: ../../library/codecs.rst:1268 ../../library/codecs.rst:1270 +#: ../../library/codecs.rst:1272 ../../library/codecs.rst:1274 +#: ../../library/codecs.rst:1276 ../../library/codecs.rst:1278 +#: ../../library/codecs.rst:1280 ../../library/codecs.rst:1282 +#: ../../library/codecs.rst:1284 +msgid "all languages" +msgstr "所有语言" + +#: ../../library/codecs.rst:1270 +msgid "utf_32_be" +msgstr "utf_32_be" + +#: ../../library/codecs.rst:1270 +msgid "UTF-32BE" +msgstr "UTF-32BE" + +#: ../../library/codecs.rst:1272 +msgid "utf_32_le" +msgstr "utf_32_le" + +#: ../../library/codecs.rst:1272 +msgid "UTF-32LE" +msgstr "UTF-32LE" + +#: ../../library/codecs.rst:1274 +msgid "utf_16" +msgstr "utf_16" + +#: ../../library/codecs.rst:1274 +msgid "U16, utf16" +msgstr "U16, utf16" + +#: ../../library/codecs.rst:1276 +msgid "utf_16_be" +msgstr "utf_16_be" + +#: ../../library/codecs.rst:1276 +msgid "UTF-16BE" +msgstr "UTF-16BE" + +#: ../../library/codecs.rst:1278 +msgid "utf_16_le" +msgstr "utf_16_le" + +#: ../../library/codecs.rst:1278 +msgid "UTF-16LE" +msgstr "UTF-16LE" + +#: ../../library/codecs.rst:1280 +msgid "utf_7" +msgstr "utf_7" + +#: ../../library/codecs.rst:1280 +msgid "U7, unicode-1-1-utf-7" +msgstr "U7, unicode-1-1-utf-7" + +#: ../../library/codecs.rst:1282 +msgid "utf_8" +msgstr "utf_8" + +#: ../../library/codecs.rst:1282 +msgid "U8, UTF, utf8, cp65001" +msgstr "U8, UTF, utf8, cp65001" + +#: ../../library/codecs.rst:1284 +msgid "utf_8_sig" +msgstr "utf_8_sig" + +#: ../../library/codecs.rst:1287 +msgid "" +"The utf-16\\* and utf-32\\* encoders no longer allow surrogate code points " +"(``U+D800``--``U+DFFF``) to be encoded. The utf-32\\* decoders no longer " +"decode byte sequences that correspond to surrogate code points." +msgstr "" +"utf-16\\* 和 utf-32\\* 编码器将不再允许编码代理码位 (``U+D800``--``U+DFFF``)。 utf-32\\* " +"解码器将不再解码与代理码位相对应的字节序列。" + +#: ../../library/codecs.rst:1293 +msgid "``cp65001`` is now an alias to ``utf_8``." +msgstr "``cp65001`` 现在是 ``utf_8`` 的一个别名。" + +#: ../../library/codecs.rst:1298 +msgid "Python Specific Encodings" +msgstr "Python 专属的编码格式" + +#: ../../library/codecs.rst:1300 +msgid "" +"A number of predefined codecs are specific to Python, so their codec names " +"have no meaning outside Python. These are listed in the tables below based " +"on the expected input and output types (note that while text encodings are " +"the most common use case for codecs, the underlying codec infrastructure " +"supports arbitrary data transforms rather than just text encodings). For " +"asymmetric codecs, the stated meaning describes the encoding direction." +msgstr "" +"有一些预定义编解码器是 Python 专属的,因此它们在 Python 之外没有意义。 " +"这些编解码器按其所预期的输入和输出类型在下表中列出(请注意虽然文本编码是编解码器最常见的使用场景,但下层的编解码器架构支持任意数据转换而不仅是文本编码)。" +" 对于非对称编解码器,该列描述的含义是编码方向。" + +#: ../../library/codecs.rst:1308 +msgid "Text Encodings" +msgstr "文字编码" + +#: ../../library/codecs.rst:1310 +msgid "" +"The following codecs provide :class:`str` to :class:`bytes` encoding and " +":term:`bytes-like object` to :class:`str` decoding, similar to the Unicode " +"text encodings." +msgstr "" +"以下编解码器提供了 :class:`str` 到 :class:`bytes` 的编码和 :term:`bytes-like object` 到 " +":class:`str` 的解码,类似于 Unicode 文本编码。" + +#: ../../library/codecs.rst:1319 +msgid "idna" +msgstr "idna" + +#: ../../library/codecs.rst:1319 +msgid "" +"Implement :rfc:`3490`, see also :mod:`encodings.idna`. Only " +"``errors='strict'`` is supported." +msgstr "实现 :rfc:`3490`,另请参阅 :mod:`encodings.idna` 。仅支持 ``errors='strict'`` 。" + +#: ../../library/codecs.rst:1325 +msgid "mbcs" +msgstr "mbcs" + +#: ../../library/codecs.rst:1325 +msgid "ansi, dbcs" +msgstr "ansi, dbcs" + +#: ../../library/codecs.rst:1325 +msgid "" +"Windows only: Encode the operand according to the ANSI codepage (CP_ACP)." +msgstr "Windows 专属:根据 ANSI 代码页(CP_ACP)对操作数进行编码。" + +#: ../../library/codecs.rst:1329 +msgid "oem" +msgstr "oem" + +#: ../../library/codecs.rst:1329 +msgid "" +"Windows only: Encode the operand according to the OEM codepage (CP_OEMCP)." +msgstr "Windows 专属:根据 OEM 代码页(CP_OEMCP)对操作数进行编码。" + +#: ../../library/codecs.rst:1335 +msgid "palmos" +msgstr "palmos" + +#: ../../library/codecs.rst:1335 +msgid "Encoding of PalmOS 3.5." +msgstr "PalmOS 3.5 的编码格式" + +#: ../../library/codecs.rst:1337 +msgid "punycode" +msgstr "punycode" + +#: ../../library/codecs.rst:1337 +msgid "Implement :rfc:`3492`. Stateful codecs are not supported." +msgstr "实现 :rfc:`3492`。 不支持有状态编解码器。" + +#: ../../library/codecs.rst:1341 +msgid "raw_unicode_escape" +msgstr "raw_unicode_escape" + +#: ../../library/codecs.rst:1341 +msgid "" +"Latin-1 encoding with ``\\uXXXX`` and ``\\UXXXXXXXX`` for other code points." +" Existing backslashes are not escaped in any way. It is used in the Python " +"pickle protocol." +msgstr "" +"Latin-1 编码格式附带对其他码位以 ``\\uXXXX`` 和 ``\\UXXXXXXXX`` 进行编码。 现有反斜杠不会以任何方式转义。 " +"它被用于 Python 的 pickle 协议。" + +#: ../../library/codecs.rst:1350 +msgid "undefined" +msgstr "undefined" + +#: ../../library/codecs.rst:1350 +msgid "" +"Raise an exception for all conversions, even empty strings. The error " +"handler is ignored." +msgstr "所有转换都将引发异常,甚至对空字符串也不例外。 错误处理方案会被忽略。" + +#: ../../library/codecs.rst:1355 +msgid "unicode_escape" +msgstr "unicode_escape" + +#: ../../library/codecs.rst:1355 +msgid "" +"Encoding suitable as the contents of a Unicode literal in ASCII-encoded " +"Python source code, except that quotes are not escaped. Decode from Latin-1 " +"source code. Beware that Python source code actually uses UTF-8 by default." +msgstr "" +"适合用于以 ASCII 编码的 Python 源代码中的 Unicode 字面值内容的编码格式,但引号不会被转义。 对 Latin-1 源代码进行解码。" +" 请注意 Python 源代码实际上默认使用 UTF-8。" + +#: ../../library/codecs.rst:1367 +msgid "\"unicode_internal\" codec is removed." +msgstr "\"unicode_internal\" 编解码器已被移除。" + +#: ../../library/codecs.rst:1374 +msgid "Binary Transforms" +msgstr "二进制转换" + +#: ../../library/codecs.rst:1376 +msgid "" +"The following codecs provide binary transforms: :term:`bytes-like object` to" +" :class:`bytes` mappings. They are not supported by :meth:`bytes.decode` " +"(which only produces :class:`str` output)." +msgstr "" +"以下编解码器提供了二进制转换: :term:`bytes-like object` 到 :class:`bytes` 的映射。 它们不被 " +":meth:`bytes.decode` 所支持(该方法只生成 :class:`str` 类型的输出)。" + +#: ../../library/codecs.rst:1384 +msgid "Encoder / decoder" +msgstr "编码器/解码器" + +#: ../../library/codecs.rst:1386 +msgid "base64_codec [#b64]_" +msgstr "base64_codec [#b64]_" + +#: ../../library/codecs.rst:1386 +msgid "base64, base_64" +msgstr "base64, base_64" + +#: ../../library/codecs.rst:1386 +msgid "" +"Convert the operand to multiline MIME base64 (the result always includes a " +"trailing ``'\\n'``)." +msgstr "将操作数转换为多行 MIME base64 (结果总是包含一个末尾的 ``'\\n'``)" + +#: ../../library/codecs.rst:1391 +msgid "" +"accepts any :term:`bytes-like object` as input for encoding and decoding" +msgstr "接受任意 :term:`bytes-like object` 作为输入用于编码和解码" + +#: ../../library/codecs.rst:1386 +msgid ":meth:`base64.encodebytes` / :meth:`base64.decodebytes`" +msgstr ":meth:`base64.encodebytes` / :meth:`base64.decodebytes`" + +#: ../../library/codecs.rst:1397 +msgid "bz2_codec" +msgstr "bz2_codec" + +#: ../../library/codecs.rst:1397 +msgid "bz2" +msgstr "bz2" + +#: ../../library/codecs.rst:1397 +msgid "Compress the operand using bz2." +msgstr "使用bz2压缩操作数" + +#: ../../library/codecs.rst:1397 +msgid ":meth:`bz2.compress` / :meth:`bz2.decompress`" +msgstr ":meth:`bz2.compress` / :meth:`bz2.decompress`" + +#: ../../library/codecs.rst:1400 +msgid "hex_codec" +msgstr "hex_codec" + +#: ../../library/codecs.rst:1400 +msgid "hex" +msgstr "hex" + +#: ../../library/codecs.rst:1400 +msgid "" +"Convert the operand to hexadecimal representation, with two digits per byte." +msgstr "将操作数转换为十六进制表示,每个字节有两位数" + +#: ../../library/codecs.rst:1400 +msgid ":meth:`binascii.b2a_hex` / :meth:`binascii.a2b_hex`" +msgstr ":meth:`binascii.b2a_hex` / :meth:`binascii.a2b_hex`" + +#: ../../library/codecs.rst:1405 +msgid "quopri_codec" +msgstr "quopri_codec" + +#: ../../library/codecs.rst:1405 +msgid "quopri, quotedprintable, quoted_printable" +msgstr "quopri, quotedprintable, quoted_printable" + +#: ../../library/codecs.rst:1405 +msgid "Convert the operand to MIME quoted printable." +msgstr "将操作数转换为 MIME 带引号的可打印数据" + +#: ../../library/codecs.rst:1405 +msgid ":meth:`quopri.encode` with ``quotetabs=True`` / :meth:`quopri.decode`" +msgstr ":meth:`quopri.encode` 且 ``quotetabs=True`` / :meth:`quopri.decode`" + +#: ../../library/codecs.rst:1409 +msgid "uu_codec" +msgstr "uu_codec" + +#: ../../library/codecs.rst:1409 +msgid "uu" +msgstr "uu" + +#: ../../library/codecs.rst:1409 +msgid "Convert the operand using uuencode." +msgstr "使用uuencode转换操作数" + +#: ../../library/codecs.rst:1409 +msgid ":meth:`uu.encode` / :meth:`uu.decode`" +msgstr ":meth:`uu.encode` / :meth:`uu.decode`" + +#: ../../library/codecs.rst:1412 +msgid "zlib_codec" +msgstr "zlib_codec" + +#: ../../library/codecs.rst:1412 +msgid "zip, zlib" +msgstr "zip, zlib" + +#: ../../library/codecs.rst:1412 +msgid "Compress the operand using gzip." +msgstr "使用gzip压缩操作数" + +#: ../../library/codecs.rst:1412 +msgid ":meth:`zlib.compress` / :meth:`zlib.decompress`" +msgstr ":meth:`zlib.compress` / :meth:`zlib.decompress`" + +#: ../../library/codecs.rst:1416 +msgid "" +"In addition to :term:`bytes-like objects `, " +"``'base64_codec'`` also accepts ASCII-only instances of :class:`str` for " +"decoding" +msgstr "" +"除了 :term:`字节类对象 `,``'base64_codec'`` 也接受仅包含 ASCII 的 " +":class:`str` 实例用于解码" + +#: ../../library/codecs.rst:1420 +msgid "Restoration of the binary transforms." +msgstr "恢复二进制转换。" + +#: ../../library/codecs.rst:1423 +msgid "Restoration of the aliases for the binary transforms." +msgstr "恢复二进制转换的别名。" + +#: ../../library/codecs.rst:1430 +msgid "Text Transforms" +msgstr "文字转换" + +#: ../../library/codecs.rst:1432 +msgid "" +"The following codec provides a text transform: a :class:`str` to " +":class:`str` mapping. It is not supported by :meth:`str.encode` (which only " +"produces :class:`bytes` output)." +msgstr "" +"以下编解码器提供了文本转换: :class:`str` 到 :class:`str` 的映射。 它不被 :meth:`str.encode` " +"所支持(该方法只生成 :class:`bytes` 类型的输出)。" + +#: ../../library/codecs.rst:1441 +msgid "rot_13" +msgstr "rot_13" + +#: ../../library/codecs.rst:1441 +msgid "rot13" +msgstr "rot13" + +#: ../../library/codecs.rst:1441 +msgid "Return the Caesar-cypher encryption of the operand." +msgstr "返回操作数的凯撒密码加密结果" + +#: ../../library/codecs.rst:1446 +msgid "Restoration of the ``rot_13`` text transform." +msgstr "恢复 ``rot_13`` 文本转换。" + +#: ../../library/codecs.rst:1449 +msgid "Restoration of the ``rot13`` alias." +msgstr "恢复 ``rot13`` 别名。" + +#: ../../library/codecs.rst:1454 +msgid "" +":mod:`encodings.idna` --- Internationalized Domain Names in Applications" +msgstr ":mod:`encodings.idna` --- 应用程序中的国际化域名" + +#: ../../library/codecs.rst:1460 +msgid "" +"This module implements :rfc:`3490` (Internationalized Domain Names in " +"Applications) and :rfc:`3492` (Nameprep: A Stringprep Profile for " +"Internationalized Domain Names (IDN)). It builds upon the ``punycode`` " +"encoding and :mod:`stringprep`." +msgstr "" +"此模块实现了 :rfc:`3490` (应用程序中的国际化域名) 和 :rfc:`3492` (Nameprep: 用于国际化域名 (IDN) 的 " +"Stringprep 配置文件)。 它是在 ``punycode`` 编码格式和 :mod:`stringprep` 的基础上构建的。" + +#: ../../library/codecs.rst:1465 +msgid "" +"If you need the IDNA 2008 standard from :rfc:`5891` and :rfc:`5895`, use the" +" third-party `idna module `_." +msgstr "" +"如果你需要来自 :rfc:`5891` 和 :rfc:`5895` 的 IDNA 2008 标准,请使用第三方 `idna 模块 " +"`_。" + +#: ../../library/codecs.rst:1468 +msgid "" +"These RFCs together define a protocol to support non-ASCII characters in " +"domain names. A domain name containing non-ASCII characters (such as " +"``www.Alliancefrançaise.nu``) is converted into an ASCII-compatible encoding" +" (ACE, such as ``www.xn--alliancefranaise-npb.nu``). The ACE form of the " +"domain name is then used in all places where arbitrary characters are not " +"allowed by the protocol, such as DNS queries, HTTP :mailheader:`Host` " +"fields, and so on. This conversion is carried out in the application; if " +"possible invisible to the user: The application should transparently convert" +" Unicode domain labels to IDNA on the wire, and convert back ACE labels to " +"Unicode before presenting them to the user." +msgstr "" +"这些 RFC 共同定义了一个在域名中支持非 ASCII 字符的协议。 一个包含非 ASCII 字符的域名 (例如 " +"``www.Alliancefrançaise.nu``) 会被转换为兼容 ASCII 的编码格式 (简称 ACE,例如 ``www.xn--" +"alliancefranaise-npb.nu``)。 随后此域名的 ACE 形式可以用于所有由于特定协议而不允许使用任意字符的场合,例如 DNS " +"查询,HTTP :mailheader:`Host` 字段等等。 此转换是在应用中进行的;如有可能将对用户可见:应用应当透明地将 Unicode " +"域名标签转换为线上的 IDNA,并在 ACE 标签被呈现给用户之前将其转换回 Unicode。" + +#: ../../library/codecs.rst:1479 +msgid "" +"Python supports this conversion in several ways: the ``idna`` codec " +"performs conversion between Unicode and ACE, separating an input string into" +" labels based on the separator characters defined in :rfc:`section 3.1 of " +"RFC 3490 <3490#section-3.1>` and converting each label to ACE as required, " +"and conversely separating an input byte string into labels based on the " +"``.`` separator and converting any ACE labels found into unicode. " +"Furthermore, the :mod:`socket` module transparently converts Unicode host " +"names to ACE, so that applications need not be concerned about converting " +"host names themselves when they pass them to the socket module. On top of " +"that, modules that have host names as function parameters, such as " +":mod:`http.client` and :mod:`ftplib`, accept Unicode host names " +"(:mod:`http.client` then also transparently sends an IDNA hostname in the " +":mailheader:`Host` field if it sends that field at all)." +msgstr "" +"Python 以多种方式支持这种转换: ``idna`` 编解码器执行 Unicode 和 ACE 之间的转换,基于在 :rfc:`section " +"3.1 of RFC 3490 <3490#section-3.1>` 中定义的分隔字符将输入字符串拆分为标签,再根据需要将每个标签转换为 " +"ACE,相反地又会基于 ``.`` 分隔符将输入字节串拆分为标签,再将找到的任何 ACE 标签转换为 Unicode。 此外,:mod:`socket`" +" 模块可透明地将 Unicode 主机名转换为 ACE,以便应用在将它们传给 socket 模块时无须自行转换主机名。 " +"除此之外,许多包含以主机名作为函数参数的模块例如 :mod:`http.client` 和 :mod:`ftplib` 都接受 Unicode " +"主机名(并且 :mod:`http.client` 也会在 :mailheader:`Host` 字段中透明地发送 IDNA " +"主机名,如果它需要发送该字段的话)。" + +#: ../../library/codecs.rst:1492 +msgid "" +"When receiving host names from the wire (such as in reverse name lookup), no" +" automatic conversion to Unicode is performed: applications wishing to " +"present such host names to the user should decode them to Unicode." +msgstr "" +"当从线路接收主机名时(例如反向名称查找),到 Unicode 的转换不会自动被执行:希望向用户提供此种主机名的应用应当将它们解码为 Unicode。" + +#: ../../library/codecs.rst:1496 +msgid "" +"The module :mod:`encodings.idna` also implements the nameprep procedure, " +"which performs certain normalizations on host names, to achieve case-" +"insensitivity of international domain names, and to unify similar " +"characters. The nameprep functions can be used directly if desired." +msgstr "" +":mod:`encodings.idna` 模块还实现了 nameprep " +"过程,该过程会对主机名执行特定的规范化操作,以实现国际域名的大小写不敏感特性与合并相似的字符。 如果有需要可以直接使用 nameprep 函数。" + +#: ../../library/codecs.rst:1504 +msgid "" +"Return the nameprepped version of *label*. The implementation currently " +"assumes query strings, so ``AllowUnassigned`` is true." +msgstr "返回 *label* 经过名称处理操作的版本。 该实现目前基于查询字符串,因此 ``AllowUnassigned`` 为真值。" + +#: ../../library/codecs.rst:1510 +msgid "" +"Convert a label to ASCII, as specified in :rfc:`3490`. ``UseSTD3ASCIIRules``" +" is assumed to be false." +msgstr "将标签转换为 ASCII,规则定义见 :rfc:`3490`。 ``UseSTD3ASCIIRules`` 预设为假值。" + +#: ../../library/codecs.rst:1516 +msgid "Convert a label to Unicode, as specified in :rfc:`3490`." +msgstr "将标签转换为 Unicode,规则定义见 :rfc:`3490`。" + +#: ../../library/codecs.rst:1520 +msgid ":mod:`encodings.mbcs` --- Windows ANSI codepage" +msgstr ":mod:`encodings.mbcs` --- Windows ANSI代码页" + +#: ../../library/codecs.rst:1525 +msgid "This module implements the ANSI codepage (CP_ACP)." +msgstr "此模块实现ANSI代码页(CP_ACP)。" + +#: ../../library/codecs.rst:1528 +msgid ":ref:`Availability `: Windows only." +msgstr ":ref:`Availability `: 仅Windows可用" + +#: ../../library/codecs.rst:1529 +msgid "Support any error handler." +msgstr "支持任何错误处理" + +#: ../../library/codecs.rst:1532 +msgid "" +"Before 3.2, the *errors* argument was ignored; ``'replace'`` was always used" +" to encode, and ``'ignore'`` to decode." +msgstr "" +"在 3.2 版之前, *errors* 参数会被忽略;总是会使用 ``'replace'`` 进行编码,并使用 ``'ignore'`` 进行解码。" + +#: ../../library/codecs.rst:1538 +msgid ":mod:`encodings.utf_8_sig` --- UTF-8 codec with BOM signature" +msgstr ":mod:`encodings.utf_8_sig` --- 带BOM签名的UTF-8编解码器" + +#: ../../library/codecs.rst:1544 +msgid "" +"This module implements a variant of the UTF-8 codec. On encoding, a UTF-8 " +"encoded BOM will be prepended to the UTF-8 encoded bytes. For the stateful " +"encoder this is only done once (on the first write to the byte stream). On " +"decoding, an optional UTF-8 encoded BOM at the start of the data will be " +"skipped." +msgstr "" +"此模块实现了 UTF-8 编解码器的一个变种:在编码时将把 UTF-8 已编码 BOM 添加到 UTF-8 编码字节数据的开头。 " +"对于有状态编码器此操作只执行一次(当首次写入字节流时)。 在解码时将跳过数据开头作为可选项的 UTF-8 已编码 BOM。" diff --git a/library/codeop.po b/library/codeop.po new file mode 100644 index 000000000..234a266ba --- /dev/null +++ b/library/codeop.po @@ -0,0 +1,132 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) 2001-2022, Python Software Foundation +# This file is distributed under the same license as the Python package. +# FIRST AUTHOR , YEAR. +# +# Translators: +# nick <2330458484@qq.com>, 2019 +# Freesand Leo , 2020 +# +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: Python 3.9\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2022-11-04 14:34+0000\n" +"PO-Revision-Date: 2017-02-16 23:02+0000\n" +"Last-Translator: Freesand Leo , 2020\n" +"Language-Team: Chinese (China) (https://www.transifex.com/python-doc/teams/5390/zh_CN/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: zh_CN\n" +"Plural-Forms: nplurals=1; plural=0;\n" + +#: ../../library/codeop.rst:2 +msgid ":mod:`codeop` --- Compile Python code" +msgstr ":mod:`codeop` --- 编译Python代码" + +#: ../../library/codeop.rst:10 +msgid "**Source code:** :source:`Lib/codeop.py`" +msgstr "**源代码:** :source:`Lib/codeop.py`" + +#: ../../library/codeop.rst:14 +msgid "" +"The :mod:`codeop` module provides utilities upon which the Python read-eval-" +"print loop can be emulated, as is done in the :mod:`code` module. As a " +"result, you probably don't want to use the module directly; if you want to " +"include such a loop in your program you probably want to use the :mod:`code`" +" module instead." +msgstr "" +":mod:`codeop` 模块提供了可以模拟Python读取-执行-打印循环的实用程序,就像在 :mod:`code` " +"模块中一样。因此,您可能不希望直接使用该模块;如果你想在程序中包含这样一个循环,你可能需要使用 :mod:`code` 模块。" + +#: ../../library/codeop.rst:20 +msgid "There are two parts to this job:" +msgstr "这个任务有两个部分:" + +#: ../../library/codeop.rst:22 +msgid "" +"Being able to tell if a line of input completes a Python statement: in " +"short, telling whether to print '``>>>``' or '``...``' next." +msgstr "能够判断一行输入是否完成了一个Python语句:简而言之,告诉我们是否要打印'\">>>\"'或'\"...\"'。" + +#: ../../library/codeop.rst:25 +msgid "" +"Remembering which future statements the user has entered, so subsequent " +"input can be compiled with these in effect." +msgstr "记住用户已输入了哪些 future 语句,这样后续的输入可以在这些语句被启用的状态下被编译。" + +#: ../../library/codeop.rst:28 +msgid "" +"The :mod:`codeop` module provides a way of doing each of these things, and a" +" way of doing them both." +msgstr ":mod:`codeop` 模块提供了分别以及同时执行这两个部分的方式。" + +#: ../../library/codeop.rst:31 +msgid "To do just the former:" +msgstr "只执行前一部分:" + +#: ../../library/codeop.rst:35 +msgid "" +"Tries to compile *source*, which should be a string of Python code and " +"return a code object if *source* is valid Python code. In that case, the " +"filename attribute of the code object will be *filename*, which defaults to " +"``''``. Returns ``None`` if *source* is *not* valid Python code, but " +"is a prefix of valid Python code." +msgstr "" +"尝试编译 *source*,这应当是一个 Python 代码字符串,并且在 *source* 是有效的 Python 代码时返回一个代码对象。 " +"在此情况下,代码对象的 filename 属性将为 *filename*,其默认值为 ``''``。 如果 *source* *不是* " +"有效的 Python 代码而是有效的 Python 代码的一个前缀时将返回 ``None``。" + +#: ../../library/codeop.rst:41 +msgid "" +"If there is a problem with *source*, an exception will be raised. " +":exc:`SyntaxError` is raised if there is invalid Python syntax, and " +":exc:`OverflowError` or :exc:`ValueError` if there is an invalid literal." +msgstr "" +"如果 *source* 存在问题,将引发异常。 如果存在无效的 Python 语法将引发 " +":exc:`SyntaxError`,而如果存在无效的字面值则将引发 :exc:`OverflowError` 或 :exc:`ValueError`。" + +#: ../../library/codeop.rst:45 +msgid "" +"The *symbol* argument determines whether *source* is compiled as a statement" +" (``'single'``, the default), as a sequence of statements (``'exec'``) or as" +" an :term:`expression` (``'eval'``). Any other value will cause " +":exc:`ValueError` to be raised." +msgstr "" +"*symbol* 参数确定 *source* 是作为一条语句 (对应默认值 ``'single'``),作为一系列语句 (``'exec'``) " +"还是作为一个 :term:`expression` (``'eval'``) 进行编译。 任何其他值都将导致引发 :exc:`ValueError`。" + +#: ../../library/codeop.rst:52 +msgid "" +"It is possible (but not likely) that the parser stops parsing with a " +"successful outcome before reaching the end of the source; in this case, " +"trailing symbols may be ignored instead of causing an error. For example, a" +" backslash followed by two newlines may be followed by arbitrary garbage. " +"This will be fixed once the API for the parser is better." +msgstr "" +"解析器有可能(但很不常见)会在到达源码结尾之前停止解析并成功输出结果;在这种情况下,末尾的符号可能会被忽略而不是引发错误。 " +"例如,一个反斜杠加两个换行符之后可以跟随任何无意义的符号。 一旦解析器 API 得到改进将修正这个问题。" + +#: ../../library/codeop.rst:61 +msgid "" +"Instances of this class have :meth:`__call__` methods identical in signature" +" to the built-in function :func:`compile`, but with the difference that if " +"the instance compiles program text containing a :mod:`__future__` statement," +" the instance 'remembers' and compiles all subsequent program texts with the" +" statement in force." +msgstr "" +"这个类的实例具有 :meth:`__call__` 方法,其签名与内置函数 :func:`compile` 相似,区别在于如果该实例编译了包含 " +":mod:`__future__` 语句的程序文本,则实例会‘记住’并使用已生效的语句编译所有后续程序文本。" + +#: ../../library/codeop.rst:70 +msgid "" +"Instances of this class have :meth:`__call__` methods identical in signature" +" to :func:`compile_command`; the difference is that if the instance compiles" +" program text containing a ``__future__`` statement, the instance " +"'remembers' and compiles all subsequent program texts with the statement in " +"force." +msgstr "" +"这个类的实例具有 :meth:`__call__` 方法,其签名与 :func:`compile_command` 相似;区别在于如果该实例编译了包含 " +"``__future__`` 语句的程序文本,则实例会‘记住’并使用已生效的语句编译编译所有后续程序文本。" diff --git a/library/collections.abc.po b/library/collections.abc.po new file mode 100644 index 000000000..03efca974 --- /dev/null +++ b/library/collections.abc.po @@ -0,0 +1,585 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) 2001-2022, Python Software Foundation +# This file is distributed under the same license as the Python package. +# FIRST AUTHOR , YEAR. +# +# Translators: +# Jarry Shaw , 2018 +# walkinrain , 2019 +# Woko , 2019 +# Hissy , 2020 +# Freesand Leo , 2022 +# +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: Python 3.9\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2022-11-04 14:34+0000\n" +"PO-Revision-Date: 2017-02-16 23:03+0000\n" +"Last-Translator: Freesand Leo , 2022\n" +"Language-Team: Chinese (China) (https://www.transifex.com/python-doc/teams/5390/zh_CN/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: zh_CN\n" +"Plural-Forms: nplurals=1; plural=0;\n" + +#: ../../library/collections.abc.rst:2 +msgid ":mod:`collections.abc` --- Abstract Base Classes for Containers" +msgstr ":mod:`collections.abc` --- 容器的抽象基类" + +#: ../../library/collections.abc.rst:10 +msgid "Formerly, this module was part of the :mod:`collections` module." +msgstr "该模块曾是 :mod:`collections` 模块的组成部分。" + +#: ../../library/collections.abc.rst:13 +msgid "**Source code:** :source:`Lib/_collections_abc.py`" +msgstr "**源代码:** :source:`Lib/_collections_abc.py`" + +#: ../../library/collections.abc.rst:23 +msgid "" +"This module provides :term:`abstract base classes ` " +"that can be used to test whether a class provides a particular interface; " +"for example, whether it is hashable or whether it is a mapping." +msgstr "" +"该模块定义了一些 :term:`抽象基类 `,它们可用于判断一个具体类是否具有某一特定的接口;例如,这个类是否可哈希,或其是否为映射类。" + +#: ../../library/collections.abc.rst:27 +msgid "" +"These abstract classes now support ``[]``. See :ref:`types-genericalias` and" +" :pep:`585`." +msgstr "这些抽象类现在都支持 ``[]``。 参见 :ref:`types-genericalias` 和 :pep:`585`。" + +#: ../../library/collections.abc.rst:34 +msgid "Collections Abstract Base Classes" +msgstr "容器抽象基类" + +#: ../../library/collections.abc.rst:36 +msgid "" +"The collections module offers the following :term:`ABCs `:" +msgstr "这个容器模块提供了以下 :term:`ABCs `:" + +#: ../../library/collections.abc.rst:41 +msgid "ABC" +msgstr "抽象基类" + +#: ../../library/collections.abc.rst:41 +msgid "Inherits from" +msgstr "继承自" + +#: ../../library/collections.abc.rst:41 +msgid "Abstract Methods" +msgstr "抽象方法" + +#: ../../library/collections.abc.rst:41 +msgid "Mixin Methods" +msgstr "Mixin 方法" + +#: ../../library/collections.abc.rst:43 +msgid ":class:`Container`" +msgstr ":class:`Container`" + +#: ../../library/collections.abc.rst:43 +msgid "``__contains__``" +msgstr "``__contains__``" + +#: ../../library/collections.abc.rst:44 +msgid ":class:`Hashable`" +msgstr ":class:`Hashable`" + +#: ../../library/collections.abc.rst:44 +msgid "``__hash__``" +msgstr "``__hash__``" + +#: ../../library/collections.abc.rst:45 ../../library/collections.abc.rst:46 +#: ../../library/collections.abc.rst:47 +msgid ":class:`Iterable`" +msgstr ":class:`Iterable`" + +#: ../../library/collections.abc.rst:45 ../../library/collections.abc.rst:46 +msgid "``__iter__``" +msgstr "``__iter__``" + +#: ../../library/collections.abc.rst:46 ../../library/collections.abc.rst:48 +msgid ":class:`Iterator`" +msgstr ":class:`Iterator`" + +#: ../../library/collections.abc.rst:46 +msgid "``__next__``" +msgstr "``__next__``" + +#: ../../library/collections.abc.rst:47 +msgid ":class:`Reversible`" +msgstr ":class:`Reversible`" + +#: ../../library/collections.abc.rst:47 +msgid "``__reversed__``" +msgstr "``__reversed__``" + +#: ../../library/collections.abc.rst:48 +msgid ":class:`Generator`" +msgstr ":class:`Generator`" + +#: ../../library/collections.abc.rst:48 ../../library/collections.abc.rst:96 +msgid "``send``, ``throw``" +msgstr "``send``, ``throw``" + +#: ../../library/collections.abc.rst:48 +msgid "``close``, ``__iter__``, ``__next__``" +msgstr "``close``, ``__iter__``, ``__next__``" + +#: ../../library/collections.abc.rst:49 ../../library/collections.abc.rst:88 +msgid ":class:`Sized`" +msgstr ":class:`Sized`" + +#: ../../library/collections.abc.rst:49 ../../library/collections.abc.rst:88 +msgid "``__len__``" +msgstr "``__len__``" + +#: ../../library/collections.abc.rst:50 +msgid ":class:`Callable`" +msgstr ":class:`Callable`" + +#: ../../library/collections.abc.rst:50 +msgid "``__call__``" +msgstr "``__call__``" + +#: ../../library/collections.abc.rst:51 ../../library/collections.abc.rst:67 +#: ../../library/collections.abc.rst:77 +msgid ":class:`Collection`" +msgstr ":class:`Collection`" + +#: ../../library/collections.abc.rst:51 +msgid ":class:`Sized`, :class:`Iterable`, :class:`Container`" +msgstr ":class:`Sized`, :class:`Iterable`, :class:`Container`" + +#: ../../library/collections.abc.rst:51 ../../library/collections.abc.rst:67 +msgid "``__contains__``, ``__iter__``, ``__len__``" +msgstr "``__contains__``, ``__iter__``, ``__len__``" + +#: ../../library/collections.abc.rst:55 ../../library/collections.abc.rst:58 +#: ../../library/collections.abc.rst:64 +msgid ":class:`Sequence`" +msgstr ":class:`Sequence`" + +#: ../../library/collections.abc.rst:55 +msgid ":class:`Reversible`, :class:`Collection`" +msgstr ":class:`Reversible`, :class:`Collection`" + +#: ../../library/collections.abc.rst:55 ../../library/collections.abc.rst:64 +msgid "``__getitem__``, ``__len__``" +msgstr "``__getitem__``, ``__len__``" + +#: ../../library/collections.abc.rst:55 +msgid "" +"``__contains__``, ``__iter__``, ``__reversed__``, ``index``, and ``count``" +msgstr "" +"``__contains__``, ``__iter__``, ``__reversed__``, ``index``, and ``count``" + +#: ../../library/collections.abc.rst:58 +msgid ":class:`MutableSequence`" +msgstr ":class:`MutableSequence`" + +#: ../../library/collections.abc.rst:58 +msgid "" +"``__getitem__``, ``__setitem__``, ``__delitem__``, ``__len__``, ``insert``" +msgstr "" +"``__getitem__``, ``__setitem__``, ``__delitem__``, ``__len__``, ``insert``" + +#: ../../library/collections.abc.rst:58 +msgid "" +"Inherited :class:`Sequence` methods and ``append``, ``reverse``, ``extend``," +" ``pop``, ``remove``, and ``__iadd__``" +msgstr "" +"继承自 :class:`Sequence` 的方法,以及 ``append``, ``reverse``, ``extend``, ``pop``, " +"``remove``,和 ``__iadd__``" + +#: ../../library/collections.abc.rst:64 +msgid ":class:`ByteString`" +msgstr ":class:`ByteString`" + +#: ../../library/collections.abc.rst:64 +msgid "Inherited :class:`Sequence` methods" +msgstr "继承自 :class:`Sequence` 的方法" + +#: ../../library/collections.abc.rst:67 ../../library/collections.abc.rst:71 +msgid ":class:`Set`" +msgstr ":class:`Set`" + +#: ../../library/collections.abc.rst:67 +msgid "" +"``__le__``, ``__lt__``, ``__eq__``, ``__ne__``, ``__gt__``, ``__ge__``, " +"``__and__``, ``__or__``, ``__sub__``, ``__xor__``, and ``isdisjoint``" +msgstr "" +"``__le__``, ``__lt__``, ``__eq__``, ``__ne__``, ``__gt__``, ``__ge__``, " +"``__and__``, ``__or__``, ``__sub__``, ``__xor__``, and ``isdisjoint``" + +#: ../../library/collections.abc.rst:71 +msgid ":class:`MutableSet`" +msgstr ":class:`MutableSet`" + +#: ../../library/collections.abc.rst:71 +msgid "``__contains__``, ``__iter__``, ``__len__``, ``add``, ``discard``" +msgstr "``__contains__``, ``__iter__``, ``__len__``, ``add``, ``discard``" + +#: ../../library/collections.abc.rst:71 +msgid "" +"Inherited :class:`Set` methods and ``clear``, ``pop``, ``remove``, " +"``__ior__``, ``__iand__``, ``__ixor__``, and ``__isub__``" +msgstr "" +"继承自 :class:`Set` 的方法以及 ``clear``, ``pop``, ``remove``, ``__ior__``, " +"``__iand__``, ``__ixor__``,和 ``__isub__``" + +#: ../../library/collections.abc.rst:77 ../../library/collections.abc.rst:81 +msgid ":class:`Mapping`" +msgstr ":class:`Mapping`" + +#: ../../library/collections.abc.rst:77 +msgid "``__getitem__``, ``__iter__``, ``__len__``" +msgstr "``__getitem__``, ``__iter__``, ``__len__``" + +#: ../../library/collections.abc.rst:77 +msgid "" +"``__contains__``, ``keys``, ``items``, ``values``, ``get``, ``__eq__``, and " +"``__ne__``" +msgstr "" +"``__contains__``, ``keys``, ``items``, ``values``, ``get``, ``__eq__``, and " +"``__ne__``" + +#: ../../library/collections.abc.rst:81 +msgid ":class:`MutableMapping`" +msgstr ":class:`MutableMapping`" + +#: ../../library/collections.abc.rst:81 +msgid "" +"``__getitem__``, ``__setitem__``, ``__delitem__``, ``__iter__``, ``__len__``" +msgstr "" +"``__getitem__``, ``__setitem__``, ``__delitem__``, ``__iter__``, ``__len__``" + +#: ../../library/collections.abc.rst:81 +msgid "" +"Inherited :class:`Mapping` methods and ``pop``, ``popitem``, ``clear``, " +"``update``, and ``setdefault``" +msgstr "" +"继承自 :class:`Mapping` 的方法以及 ``pop``, ``popitem``, ``clear``, ``update``,和 " +"``setdefault``" + +#: ../../library/collections.abc.rst:88 +msgid ":class:`MappingView`" +msgstr ":class:`MappingView`" + +#: ../../library/collections.abc.rst:89 +msgid ":class:`ItemsView`" +msgstr ":class:`ItemsView`" + +#: ../../library/collections.abc.rst:89 ../../library/collections.abc.rst:91 +msgid ":class:`MappingView`, :class:`Set`" +msgstr ":class:`MappingView`, :class:`Set`" + +#: ../../library/collections.abc.rst:89 ../../library/collections.abc.rst:91 +#: ../../library/collections.abc.rst:93 +msgid "``__contains__``, ``__iter__``" +msgstr "``__contains__``, ``__iter__``" + +#: ../../library/collections.abc.rst:91 +msgid ":class:`KeysView`" +msgstr ":class:`KeysView`" + +#: ../../library/collections.abc.rst:93 +msgid ":class:`ValuesView`" +msgstr ":class:`ValuesView`" + +#: ../../library/collections.abc.rst:93 +msgid ":class:`MappingView`, :class:`Collection`" +msgstr ":class:`MappingView`, :class:`Collection`" + +#: ../../library/collections.abc.rst:95 ../../library/collections.abc.rst:96 +msgid ":class:`Awaitable`" +msgstr ":class:`Awaitable`" + +#: ../../library/collections.abc.rst:95 +msgid "``__await__``" +msgstr "``__await__``" + +#: ../../library/collections.abc.rst:96 +msgid ":class:`Coroutine`" +msgstr ":class:`Coroutine`" + +#: ../../library/collections.abc.rst:96 +msgid "``close``" +msgstr "``close``" + +#: ../../library/collections.abc.rst:97 ../../library/collections.abc.rst:98 +msgid ":class:`AsyncIterable`" +msgstr ":class:`AsyncIterable`" + +#: ../../library/collections.abc.rst:97 ../../library/collections.abc.rst:98 +msgid "``__aiter__``" +msgstr "``__aiter__``" + +#: ../../library/collections.abc.rst:98 ../../library/collections.abc.rst:99 +msgid ":class:`AsyncIterator`" +msgstr ":class:`AsyncIterator`" + +#: ../../library/collections.abc.rst:98 +msgid "``__anext__``" +msgstr "``__anext__``" + +#: ../../library/collections.abc.rst:99 +msgid ":class:`AsyncGenerator`" +msgstr ":class:`AsyncGenerator`" + +#: ../../library/collections.abc.rst:99 +msgid "``asend``, ``athrow``" +msgstr "``asend``, ``athrow``" + +#: ../../library/collections.abc.rst:99 +msgid "``aclose``, ``__aiter__``, ``__anext__``" +msgstr "``aclose``, ``__aiter__``, ``__anext__``" + +#: ../../library/collections.abc.rst:105 +msgid "ABC for classes that provide the :meth:`__contains__` method." +msgstr "提供了 :meth:`__contains__` 方法的抽象基类。" + +#: ../../library/collections.abc.rst:109 +msgid "ABC for classes that provide the :meth:`__hash__` method." +msgstr "提供了 :meth:`__hash__` 方法的抽象基类。" + +#: ../../library/collections.abc.rst:113 +msgid "ABC for classes that provide the :meth:`__len__` method." +msgstr "提供了 :meth:`__len__` 方法的抽象基类。" + +#: ../../library/collections.abc.rst:117 +msgid "ABC for classes that provide the :meth:`__call__` method." +msgstr "提供了 :meth:`__call__` 方法的抽象基类。" + +#: ../../library/collections.abc.rst:121 +msgid "ABC for classes that provide the :meth:`__iter__` method." +msgstr "提供了 :meth:`__iter__` 方法的抽象基类。" + +#: ../../library/collections.abc.rst:123 +msgid "" +"Checking ``isinstance(obj, Iterable)`` detects classes that are registered " +"as :class:`Iterable` or that have an :meth:`__iter__` method, but it does " +"not detect classes that iterate with the :meth:`__getitem__` method. The " +"only reliable way to determine whether an object is :term:`iterable` is to " +"call ``iter(obj)``." +msgstr "" +"使用 ``isinstance(obj, Iterable)`` 可以检测一个类是否已经注册到了 :class:`Iterable` 或者实现了 " +":meth:`__iter__` 函数,但是无法检测这个类是否能够使用 :meth:`__getitem__` 方法进行迭代。检测一个对象是否是 " +":term:`iterable` 的唯一可信赖的方法是调用 ``iter(obj)``。" + +#: ../../library/collections.abc.rst:131 +msgid "ABC for sized iterable container classes." +msgstr "集合了 Sized 和 Iterable 类的抽象基类。" + +#: ../../library/collections.abc.rst:137 +msgid "" +"ABC for classes that provide the :meth:`~iterator.__iter__` and " +":meth:`~iterator.__next__` methods. See also the definition of " +":term:`iterator`." +msgstr "" +"提供了 :meth:`~iterator.__iter__` 和 :meth:`~iterator.__next__` 方法的抽象基类。参见 " +":term:`iterator` 的定义。" + +#: ../../library/collections.abc.rst:143 +msgid "" +"ABC for iterable classes that also provide the :meth:`__reversed__` method." +msgstr "为可迭代类提供了 :meth:`__reversed__` 方法的抽象基类。" + +#: ../../library/collections.abc.rst:150 +msgid "" +"ABC for generator classes that implement the protocol defined in :pep:`342` " +"that extends iterators with the :meth:`~generator.send`, " +":meth:`~generator.throw` and :meth:`~generator.close` methods. See also the " +"definition of :term:`generator`." +msgstr "" +"生成器类,实现了 :pep:`342` 中定义的协议,继承并扩展了迭代器,提供了 :meth:`~generator.send`, " +":meth:`~generator.throw` 和 :meth:`~generator.close` 方法。参见 :term:`generator` " +"的定义。" + +#: ../../library/collections.abc.rst:161 +msgid "ABCs for read-only and mutable :term:`sequences `." +msgstr "只读且可变的序列 :term:`sequences ` 的抽象基类。" + +#: ../../library/collections.abc.rst:163 +msgid "" +"Implementation note: Some of the mixin methods, such as :meth:`__iter__`, " +":meth:`__reversed__` and :meth:`index`, make repeated calls to the " +"underlying :meth:`__getitem__` method. Consequently, if :meth:`__getitem__` " +"is implemented with constant access speed, the mixin methods will have " +"linear performance; however, if the underlying method is linear (as it would" +" be with a linked list), the mixins will have quadratic performance and will" +" likely need to be overridden." +msgstr "" +"实现笔记:一些混入(Maxin)方法比如 :meth:`__iter__`, :meth:`__reversed__` 和 :meth:`index` " +"会重复调用底层的 :meth:`__getitem__` 方法。因此,如果实现的 :meth:`__getitem__` " +"是常数级访问速度,那么相应的混入方法会有一个线性的表现;然而,如果底层方法是线性实现(例如链表),那么混入方法将会是平方级的表现,这也许就需要被重构了。" + +#: ../../library/collections.abc.rst:172 +msgid "The index() method added support for *stop* and *start* arguments." +msgstr "index() 方法支持 *stop* 和 *start* 参数。" + +#: ../../library/collections.abc.rst:179 +msgid "ABCs for read-only and mutable sets." +msgstr "只读且可变的集合的抽象基类。" + +#: ../../library/collections.abc.rst:184 +msgid "ABCs for read-only and mutable :term:`mappings `." +msgstr "只读且可变的映射 :term:`mappings ` 的抽象基类。" + +#: ../../library/collections.abc.rst:191 +msgid "" +"ABCs for mapping, items, keys, and values :term:`views `." +msgstr "映射及其键和值的视图 :term:`views ` 的抽象基类。" + +#: ../../library/collections.abc.rst:195 +msgid "" +"ABC for :term:`awaitable` objects, which can be used in :keyword:`await` " +"expressions. Custom implementations must provide the :meth:`__await__` " +"method." +msgstr "" +"为可等待对象 :term:`awaitable` 提供的类,可以被用于 :keyword:`await` 表达式中。习惯上必须实现 " +":meth:`__await__` 方法。" + +#: ../../library/collections.abc.rst:199 +msgid "" +":term:`Coroutine ` objects and instances of the " +":class:`~collections.abc.Coroutine` ABC are all instances of this ABC." +msgstr "" +":term:`协程 ` 对象和 :class:`~collections.abc.Coroutine` ABC 的实例都是这个 " +"ABC 的实例。" + +#: ../../library/collections.abc.rst:203 +msgid "" +"In CPython, generator-based coroutines (generators decorated with " +":func:`types.coroutine` or :func:`asyncio.coroutine`) are *awaitables*, even" +" though they do not have an :meth:`__await__` method. Using " +"``isinstance(gencoro, Awaitable)`` for them will return ``False``. Use " +":func:`inspect.isawaitable` to detect them." +msgstr "" +"在 CPython 里,基于生成器的协程(使用 :func:`types.coroutine` 或 :func:`asyncio.coroutine` " +"包装的生成器)都是 *可等待对象*,即使他们不含有 :meth:`__await__` 方法。使用 ``isinstance(gencoro, " +"Awaitable)`` 来检测他们会返回 ``False``。要使用 :func:`inspect.isawaitable` 来检测他们。" + +#: ../../library/collections.abc.rst:213 +msgid "" +"ABC for coroutine compatible classes. These implement the following " +"methods, defined in :ref:`coroutine-objects`: :meth:`~coroutine.send`, " +":meth:`~coroutine.throw`, and :meth:`~coroutine.close`. Custom " +"implementations must also implement :meth:`__await__`. All " +":class:`Coroutine` instances are also instances of :class:`Awaitable`. See " +"also the definition of :term:`coroutine`." +msgstr "" +"用于协程兼容类的抽象基类。实现了如下定义在 :ref:`coroutine-objects`: 里的方法: " +":meth:`~coroutine.send`,:meth:`~coroutine.throw` 和 " +":meth:`~coroutine.close`。通常的实现里还需要实现 :meth:`__await__` 方法。所有的 " +":class:`Coroutine` 实例都必须是 :class:`Awaitable` 实例。参见 :term:`coroutine` 的定义。" + +#: ../../library/collections.abc.rst:221 +msgid "" +"In CPython, generator-based coroutines (generators decorated with " +":func:`types.coroutine` or :func:`asyncio.coroutine`) are *awaitables*, even" +" though they do not have an :meth:`__await__` method. Using " +"``isinstance(gencoro, Coroutine)`` for them will return ``False``. Use " +":func:`inspect.isawaitable` to detect them." +msgstr "" +"在 CPython 里,基于生成器的协程(使用 :func:`types.coroutine` 或 :func:`asyncio.coroutine` " +"包装的生成器)都是 *可等待对象*,即使他们不含有 :meth:`__await__` 方法。使用 ``isinstance(gencoro, " +"Coroutine)`` 来检测他们会返回 ``False``。要使用 :func:`inspect.isawaitable` 来检测他们。" + +#: ../../library/collections.abc.rst:231 +msgid "" +"ABC for classes that provide ``__aiter__`` method. See also the definition " +"of :term:`asynchronous iterable`." +msgstr "提供了 ``__aiter__`` 方法的抽象基类。参见 :term:`asynchronous iterable` 的定义。" + +#: ../../library/collections.abc.rst:238 +msgid "" +"ABC for classes that provide ``__aiter__`` and ``__anext__`` methods. See " +"also the definition of :term:`asynchronous iterator`." +msgstr "" +"提供了 ``__aiter__`` 和 ``__anext__`` 方法的抽象基类。参见 :term:`asynchronous iterator` " +"的定义。" + +#: ../../library/collections.abc.rst:245 +msgid "" +"ABC for asynchronous generator classes that implement the protocol defined " +"in :pep:`525` and :pep:`492`." +msgstr "为异步生成器类提供的抽象基类,这些类实现了定义在 :pep:`525` 和 :pep:`492` 里的协议。" + +#: ../../library/collections.abc.rst:251 +msgid "" +"These ABCs allow us to ask classes or instances if they provide particular " +"functionality, for example::" +msgstr "这些抽象基类让我们可以确定类和示例拥有某些特定的函数,例如:" + +#: ../../library/collections.abc.rst:258 +msgid "" +"Several of the ABCs are also useful as mixins that make it easier to develop" +" classes supporting container APIs. For example, to write a class " +"supporting the full :class:`Set` API, it is only necessary to supply the " +"three underlying abstract methods: :meth:`__contains__`, :meth:`__iter__`, " +"and :meth:`__len__`. The ABC supplies the remaining methods such as " +":meth:`__and__` and :meth:`isdisjoint`::" +msgstr "" +"有些抽象基类也可以用作混入类(mixin),这可以更容易地开发支持容器 API 的类。例如,要写一个支持完整 :class:`Set` API " +"的类,只需要提供下面这三个方法: :meth:`__contains__`, :meth:`__iter__` 和 " +":meth:`__len__`。抽象基类会补充上其余的方法,比如 :meth:`__and__` 和 :meth:`isdisjoint`::" + +#: ../../library/collections.abc.rst:287 +msgid "Notes on using :class:`Set` and :class:`MutableSet` as a mixin:" +msgstr "当把 :class:`Set` 和 :class:`MutableSet` 用作混入类时需注意:" + +#: ../../library/collections.abc.rst:290 +msgid "" +"Since some set operations create new sets, the default mixin methods need a " +"way to create new instances from an iterable. The class constructor is " +"assumed to have a signature in the form ``ClassName(iterable)``. That " +"assumption is factored-out to an internal classmethod called " +":meth:`_from_iterable` which calls ``cls(iterable)`` to produce a new set. " +"If the :class:`Set` mixin is being used in a class with a different " +"constructor signature, you will need to override :meth:`_from_iterable` with" +" a classmethod or regular method that can construct new instances from an " +"iterable argument." +msgstr "" +"由于某些集合操作会创建新集合,默认的混入方法需要一种从可迭代对象里创建新实例的方式。 假定类构造器具有 ``ClassName(iterable)`` " +"形式的签名。 这样它将执行一个名为 :meth:`_from_iterable` 的内部类方法,该方法会调用 ``cls(iterable)`` " +"来产生一个新集合。 如果 :class:`Set` 混入类在具有不同构造器签名的类中被使用,你将需要通过类方法或常规方法来重载 " +":meth:`_from_iterable`,以便基于可迭代对象参数来构造新的实例。" + +#: ../../library/collections.abc.rst:301 +msgid "" +"To override the comparisons (presumably for speed, as the semantics are " +"fixed), redefine :meth:`__le__` and :meth:`__ge__`, then the other " +"operations will automatically follow suit." +msgstr "" +"重载比较符时时(想必是为了速度,因为其语义都是固定的),只需要重定义 :meth:`__le__` 和 :meth:`__ge__` " +"函数,然后其他的操作会自动跟进。" + +#: ../../library/collections.abc.rst:306 +msgid "" +"The :class:`Set` mixin provides a :meth:`_hash` method to compute a hash " +"value for the set; however, :meth:`__hash__` is not defined because not all " +"sets are hashable or immutable. To add set hashability using mixins, " +"inherit from both :meth:`Set` and :meth:`Hashable`, then define ``__hash__ =" +" Set._hash``." +msgstr "" +"混入集合类 :class:`Set` 提供了一个 :meth:`_hash` 方法为集合计算哈希值,然而, :meth:`__hash__` " +"函数却没有被定义,因为并不是所有集合都是可哈希并且不可变的。为了使用混入类为集合添加哈希能力,可以同时继承 :meth:`Set` 和 " +":meth:`Hashable` 类,然后定义 ``__hash__ = Set._hash``。" + +#: ../../library/collections.abc.rst:314 +msgid "" +"`OrderedSet recipe `_ for an " +"example built on :class:`MutableSet`." +msgstr "" +"`OrderedSet recipe `_ 是基于 " +":class:`MutableSet` 构建的一个示例。" + +#: ../../library/collections.abc.rst:317 +msgid "For more about ABCs, see the :mod:`abc` module and :pep:`3119`." +msgstr "对于抽象基类,参见 :mod:`abc` 模块和 :pep:`3119`。" diff --git a/library/collections.po b/library/collections.po new file mode 100644 index 000000000..77edfb6eb --- /dev/null +++ b/library/collections.po @@ -0,0 +1,1440 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) 2001-2024, Python Software Foundation +# This file is distributed under the same license as the Python package. +# FIRST AUTHOR , YEAR. +# +# Translators: +# 叶浚安 , 2019 +# Shengjing Zhu , 2019 +# Alpha Du , 2019 +# dannyvi , 2019 +# Arisaka97 , 2020 +# Jian Aijun , 2020 +# Freesand Leo , 2022 +# Rafael Fontenelle , 2024 +# +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: Python 3.9\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2024-01-12 22:01+0000\n" +"PO-Revision-Date: 2017-02-16 23:03+0000\n" +"Last-Translator: Rafael Fontenelle , 2024\n" +"Language-Team: Chinese (China) (https://app.transifex.com/python-doc/teams/5390/zh_CN/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: zh_CN\n" +"Plural-Forms: nplurals=1; plural=0;\n" + +#: ../../library/collections.rst:2 +msgid ":mod:`collections` --- Container datatypes" +msgstr ":mod:`collections` --- 容器数据类型" + +#: ../../library/collections.rst:10 +msgid "**Source code:** :source:`Lib/collections/__init__.py`" +msgstr "**源代码:** :source:`Lib/collections/__init__.py`" + +#: ../../library/collections.rst:20 +msgid "" +"This module implements specialized container datatypes providing " +"alternatives to Python's general purpose built-in containers, :class:`dict`," +" :class:`list`, :class:`set`, and :class:`tuple`." +msgstr "" +"这个模块实现了一些专门化的容器,提供了对 Python 的通用内建容器 :class:`dict`、:class:`list`、:class:`set`" +" 和 :class:`tuple` 的补充。" + +#: ../../library/collections.rst:25 +msgid ":func:`namedtuple`" +msgstr ":func:`namedtuple`" + +#: ../../library/collections.rst:25 +msgid "factory function for creating tuple subclasses with named fields" +msgstr "一个工厂函数,用来创建元组的子类,子类的字段是有名称的。" + +#: ../../library/collections.rst:26 +msgid ":class:`deque`" +msgstr ":class:`deque`" + +#: ../../library/collections.rst:26 +msgid "list-like container with fast appends and pops on either end" +msgstr "类似列表的容器,但 append 和 pop 在其两端的速度都很快。" + +#: ../../library/collections.rst:27 +msgid ":class:`ChainMap`" +msgstr ":class:`ChainMap`" + +#: ../../library/collections.rst:27 +msgid "dict-like class for creating a single view of multiple mappings" +msgstr "类似字典的类,用于创建包含多个映射的单个视图。" + +#: ../../library/collections.rst:28 +msgid ":class:`Counter`" +msgstr ":class:`Counter`" + +#: ../../library/collections.rst:28 +msgid "dict subclass for counting hashable objects" +msgstr "字典的子类,提供了可哈希对象的计数功能" + +#: ../../library/collections.rst:29 +msgid ":class:`OrderedDict`" +msgstr ":class:`OrderedDict`" + +#: ../../library/collections.rst:29 +msgid "dict subclass that remembers the order entries were added" +msgstr "字典的子类,能记住条目被添加进去的顺序。" + +#: ../../library/collections.rst:30 +msgid ":class:`defaultdict`" +msgstr ":class:`defaultdict`" + +#: ../../library/collections.rst:30 +msgid "dict subclass that calls a factory function to supply missing values" +msgstr "字典的子类,通过调用用户指定的工厂函数,为键提供默认值。" + +#: ../../library/collections.rst:31 +msgid ":class:`UserDict`" +msgstr ":class:`UserDict`" + +#: ../../library/collections.rst:31 +msgid "wrapper around dictionary objects for easier dict subclassing" +msgstr "封装了字典对象,简化了字典子类化" + +#: ../../library/collections.rst:32 +msgid ":class:`UserList`" +msgstr ":class:`UserList`" + +#: ../../library/collections.rst:32 +msgid "wrapper around list objects for easier list subclassing" +msgstr "封装了列表对象,简化了列表子类化" + +#: ../../library/collections.rst:33 +msgid ":class:`UserString`" +msgstr ":class:`UserString`" + +#: ../../library/collections.rst:33 +msgid "wrapper around string objects for easier string subclassing" +msgstr "封装了字符串对象,简化了字符串子类化" + +#: ../../library/collections.rst:41 +msgid "" +"Moved :ref:`collections-abstract-base-classes` to the :mod:`collections.abc`" +" module. For backwards compatibility, they continue to be visible in this " +"module through Python 3.9." +msgstr "" +"已将 :ref:`collections-abstract-base-classes` 移至 :mod:`collections.abc` 模块。 " +"为了保持向下兼容性,它们在 Python 3.9 版的这个模块中仍然存在。" + +#: ../../library/collections.rst:43 +msgid ":class:`ChainMap` objects" +msgstr ":class:`ChainMap` 对象" + +#: ../../library/collections.rst:47 +msgid "" +"A :class:`ChainMap` class is provided for quickly linking a number of " +"mappings so they can be treated as a single unit. It is often much faster " +"than creating a new dictionary and running multiple :meth:`~dict.update` " +"calls." +msgstr "" +":class:`ChainMap` 类将多个映射迅速地链到一起,这样它们就可以作为一个单元处理。这通常比创建一个新字典再重复地使用 " +":meth:`~dict.update` 要快得多。" + +#: ../../library/collections.rst:51 +msgid "" +"The class can be used to simulate nested scopes and is useful in templating." +msgstr "这个类可以用于模拟嵌套作用域,并且对模版化有用。" + +#: ../../library/collections.rst:55 +msgid "" +"A :class:`ChainMap` groups multiple dicts or other mappings together to " +"create a single, updateable view. If no *maps* are specified, a single " +"empty dictionary is provided so that a new chain always has at least one " +"mapping." +msgstr "" +"一个 :class:`ChainMap` 将多个字典或者其他映射组合在一起,创建一个单独的可更新的视图。 如果没有指定任何 " +"*maps*,一个空字典会被作为 *maps*。这样,每个新链至少包含一个映射。" + +#: ../../library/collections.rst:59 +msgid "" +"The underlying mappings are stored in a list. That list is public and can " +"be accessed or updated using the *maps* attribute. There is no other state." +msgstr "底层映射被存储在一个列表中。这个列表是公开的,可以通过 *maps* 属性存取和更新。没有其他的状态。" + +#: ../../library/collections.rst:62 +msgid "" +"Lookups search the underlying mappings successively until a key is found. " +"In contrast, writes, updates, and deletions only operate on the first " +"mapping." +msgstr "搜索查询底层映射,直到一个键被找到。不同的是,写,更新和删除只操作第一个映射。" + +#: ../../library/collections.rst:65 +msgid "" +"A :class:`ChainMap` incorporates the underlying mappings by reference. So, " +"if one of the underlying mappings gets updated, those changes will be " +"reflected in :class:`ChainMap`." +msgstr "" +"一个 :class:`ChainMap` 通过引用合并底层映射。 所以,如果一个底层映射更新了,这些更改会反映到 :class:`ChainMap` 。" + +#: ../../library/collections.rst:69 +msgid "" +"All of the usual dictionary methods are supported. In addition, there is a " +"*maps* attribute, a method for creating new subcontexts, and a property for " +"accessing all but the first mapping:" +msgstr "" +"支持所有常用字典方法。另外还有一个 *maps* 属性(attribute),一个创建子上下文的方法(method), " +"一个存取它们首个映射的属性(property):" + +#: ../../library/collections.rst:75 +msgid "" +"A user updateable list of mappings. The list is ordered from first-searched" +" to last-searched. It is the only stored state and can be modified to " +"change which mappings are searched. The list should always contain at least" +" one mapping." +msgstr "一个可以更新的映射列表。这个列表是按照第一次搜索到最后一次搜索的顺序组织的。它是仅有的存储状态,可以被修改。列表最少包含一个映射。" + +#: ../../library/collections.rst:82 +msgid "" +"Returns a new :class:`ChainMap` containing a new map followed by all of the " +"maps in the current instance. If ``m`` is specified, it becomes the new map" +" at the front of the list of mappings; if not specified, an empty dict is " +"used, so that a call to ``d.new_child()`` is equivalent to: ``ChainMap({}, " +"*d.maps)``. This method is used for creating subcontexts that can be " +"updated without altering values in any of the parent mappings." +msgstr "" +"返回一个新的 :class:`ChainMap` 类,包含了一个新映射(map),后面跟随当前实例的全部映射(map)。如果 ``m`` " +"被指定,它就成为不同新的实例,就是在所有映射前加上 m,如果没有指定,就加上一个空字典,这样的话一个 ``d.new_child()`` 调用等价于 " +"``ChainMap({}, *d.maps)`` 。这个方法用于创建子上下文,不改变任何父映射的值。" + +#: ../../library/collections.rst:90 +msgid "The optional ``m`` parameter was added." +msgstr "添加了可选的 ``m`` 形参。" + +#: ../../library/collections.rst:95 +msgid "" +"Property returning a new :class:`ChainMap` containing all of the maps in the" +" current instance except the first one. This is useful for skipping the " +"first map in the search. Use cases are similar to those for the " +":keyword:`nonlocal` keyword used in :term:`nested scopes `. " +"The use cases also parallel those for the built-in :func:`super` function. " +"A reference to ``d.parents`` is equivalent to: ``ChainMap(*d.maps[1:])``." +msgstr "" +"属性返回一个新的 :class:`ChainMap` 包含所有的当前实例的映射,除了第一个。这样可以在搜索的时候跳过第一个映射。 使用的场景类似在 " +":term:`nested scopes ` 嵌套作用域中使用 :keyword:`nonlocal` " +"关键词。用例也可以类比内建函数 :func:`super` 。一个 ``d.parents`` 的引用等价于 " +"``ChainMap(*d.maps[1:])`` 。" + +#: ../../library/collections.rst:103 +msgid "" +"Note, the iteration order of a :class:`ChainMap()` is determined by scanning" +" the mappings last to first::" +msgstr "注意,一个 :class:`ChainMap()` 的迭代顺序是通过从后往前扫描所有映射来确定的::" + +#: ../../library/collections.rst:111 +msgid "" +"This gives the same ordering as a series of :meth:`dict.update` calls " +"starting with the last mapping::" +msgstr "使得顺序与从最后一个映射开始调用一系列 :meth:`dict.update` 得到的字典的迭代顺序相同:" + +#: ../../library/collections.rst:119 +msgid "Added support for ``|`` and ``|=`` operators, specified in :pep:`584`." +msgstr "增加了对 ``|`` 和 ``|=`` 运算符的支持,相关说明见 :pep:`584`。" + +#: ../../library/collections.rst:124 +msgid "" +"The `MultiContext class " +"`_" +" in the Enthought `CodeTools package " +"`_ has options to support writing to" +" any mapping in the chain." +msgstr "" +"`MultiContext class " +"`_" +" 在 Enthought `CodeTools package `_ " +"有支持写映射的选项。" + +#: ../../library/collections.rst:130 +msgid "" +"Django's `Context class " +"`_ " +"for templating is a read-only chain of mappings. It also features pushing " +"and popping of contexts similar to the " +":meth:`~collections.ChainMap.new_child` method and the " +":attr:`~collections.ChainMap.parents` property." +msgstr "" +"Django 中用于模板的 `Context class " +"`_ " +"是只读的映射链。 它还具有上下文推送和弹出特性,类似于 :meth:`~collections.ChainMap.new_child` 方法和 " +":attr:`~collections.ChainMap.parents` 特征属性。" + +#: ../../library/collections.rst:137 +msgid "" +"The `Nested Contexts recipe `_" +" has options to control whether writes and other mutations apply only to the" +" first mapping or to any mapping in the chain." +msgstr "" +"`Nested Contexts recipe `_ " +"提供了是否对第一个映射或其他映射进行写和其他修改的选项。" + +#: ../../library/collections.rst:142 +msgid "" +"A `greatly simplified read-only version of Chainmap " +"`_." +msgstr "一个 `极简的只读版 Chainmap `_." + +#: ../../library/collections.rst:147 +msgid ":class:`ChainMap` Examples and Recipes" +msgstr ":class:`ChainMap` 例子和方法" + +#: ../../library/collections.rst:149 +msgid "This section shows various approaches to working with chained maps." +msgstr "这一节提供了多个使用链映射的案例。" + +#: ../../library/collections.rst:152 +msgid "Example of simulating Python's internal lookup chain::" +msgstr "模拟Python内部lookup链的例子 ::" + +#: ../../library/collections.rst:157 +msgid "" +"Example of letting user specified command-line arguments take precedence " +"over environment variables which in turn take precedence over default " +"values::" +msgstr "让用户指定的命令行参数优先于环境变量,优先于默认值的例子 ::" + +#: ../../library/collections.rst:174 +msgid "" +"Example patterns for using the :class:`ChainMap` class to simulate nested " +"contexts::" +msgstr "用 :class:`ChainMap` 类模拟嵌套上下文的例子 ::" + +#: ../../library/collections.rst:193 +msgid "" +"The :class:`ChainMap` class only makes updates (writes and deletions) to the" +" first mapping in the chain while lookups will search the full chain. " +"However, if deep writes and deletions are desired, it is easy to make a " +"subclass that updates keys found deeper in the chain::" +msgstr "" +":class:`ChainMap` 类只更新链中的第一个映射,但lookup会搜索整个链。 " +"然而,如果需要深度写和删除,也可以很容易的通过定义一个子类来实现它 ::" + +#: ../../library/collections.rst:224 +msgid ":class:`Counter` objects" +msgstr ":class:`Counter` 对象" + +#: ../../library/collections.rst:226 +msgid "" +"A counter tool is provided to support convenient and rapid tallies. For " +"example::" +msgstr "一个计数器工具,为的是可以方便快速地计账。例如:" + +#: ../../library/collections.rst:245 +msgid "" +"A :class:`Counter` is a :class:`dict` subclass for counting hashable " +"objects. It is a collection where elements are stored as dictionary keys and" +" their counts are stored as dictionary values. Counts are allowed to be any" +" integer value including zero or negative counts. The :class:`Counter` " +"class is similar to bags or multisets in other languages." +msgstr "" +"一个 :class:`Counter` 是一个 :class:`dict` " +"的子类,用于计数可哈希对象。它是一个集合,元素像字典键(key)一样存储,它们的计数存储为值。计数可以是任何整数值,包括0和负数。 " +":class:`Counter` 类有点像其他语言中的 bags或multisets。" + +#: ../../library/collections.rst:251 +msgid "" +"Elements are counted from an *iterable* or initialized from another " +"*mapping* (or counter):" +msgstr "它可以通过计数一个 *iterable* 中的元素来初始化,或用其它 *mapping* (包括 counter) 初始化:" + +#: ../../library/collections.rst:259 +msgid "" +"Counter objects have a dictionary interface except that they return a zero " +"count for missing items instead of raising a :exc:`KeyError`:" +msgstr "" +"Counter 对象的接口类似于字典,不同的是,如果查询的键不在 Counter 中,它会返回一个 0 而不是引发一个 :exc:`KeyError`:" + +#: ../../library/collections.rst:266 +msgid "" +"Setting a count to zero does not remove an element from a counter. Use " +"``del`` to remove it entirely:" +msgstr "设置一个计数为0不会从计数器中移去一个元素。使用 ``del`` 来删除它:" + +#: ../../library/collections.rst:274 +msgid "" +"As a :class:`dict` subclass, :class:`Counter` Inherited the capability to " +"remember insertion order. Math operations on *Counter* objects also " +"preserve order. Results are ordered according to when an element is first " +"encountered in the left operand and then by the order encountered in the " +"right operand." +msgstr "" +"作为 :class:`dict` 的子类,:class:`Counter` 继承了记住插入顺序的功能。 *Counter* " +"对象进行数学运算时同样会保持顺序。 结果会先按每个元素在运算符左边的出现时间排序,然后再按其在运算符右边的出现时间排序。" + +#: ../../library/collections.rst:280 +msgid "" +"Counter objects support additional methods beyond those available for all " +"dictionaries:" +msgstr "Counter 对象在对所有字典可用的方法以外还支持一些附加方法:" + +#: ../../library/collections.rst:285 +msgid "" +"Return an iterator over elements repeating each as many times as its count." +" Elements are returned in the order first encountered. If an element's " +"count is less than one, :meth:`elements` will ignore it." +msgstr "" +"返回一个迭代器,其中每个元素将重复出现计数值所指定次。 元素会按首次出现的顺序返回。 如果一个元素的计数值小于一,:meth:`elements` " +"将会忽略它。" + +#: ../../library/collections.rst:295 +msgid "" +"Return a list of the *n* most common elements and their counts from the most" +" common to the least. If *n* is omitted or ``None``, :meth:`most_common` " +"returns *all* elements in the counter. Elements with equal counts are " +"ordered in the order first encountered:" +msgstr "" +"返回一个列表,其中包含 *n* 个最常见的元素及出现次数,按常见程度由高到低排序。 如果 *n* 被省略或为 " +"``None``,:meth:`most_common` 将返回计数器中的 *所有* 元素。 计数值相等的元素按首次出现的顺序排序:" + +#: ../../library/collections.rst:305 +msgid "" +"Elements are subtracted from an *iterable* or from another *mapping* (or " +"counter). Like :meth:`dict.update` but subtracts counts instead of " +"replacing them. Both inputs and outputs may be zero or negative." +msgstr "" +"减去一个 *可迭代对象* 或 *映射对象* (或 counter) 中的元素。类似于 :meth:`dict.update` " +"但是是减去而非替换。输入和输出都可以是 0 或负数。" + +#: ../../library/collections.rst:317 +msgid "" +"The usual dictionary methods are available for :class:`Counter` objects " +"except for two which work differently for counters." +msgstr "通常字典方法都可用于 :class:`Counter` 对象,除了有两个方法工作方式与字典并不相同。" + +#: ../../library/collections.rst:322 +msgid "This class method is not implemented for :class:`Counter` objects." +msgstr "这个类方法没有在 :class:`Counter` 中实现。" + +#: ../../library/collections.rst:326 +msgid "" +"Elements are counted from an *iterable* or added-in from another *mapping* " +"(or counter). Like :meth:`dict.update` but adds counts instead of replacing" +" them. Also, the *iterable* is expected to be a sequence of elements, not a" +" sequence of ``(key, value)`` pairs." +msgstr "" +"加上一个 *可迭代对象* 或 *映射对象* (或 counter) 中的元素。类似于 :meth:`dict.update` " +"但是是加上而非替换。另外,*可迭代对象* 应当是一个元素序列,而不是一个 ``(key, value)`` 对的序列。" + +#: ../../library/collections.rst:331 +msgid "Common patterns for working with :class:`Counter` objects::" +msgstr ":class:`Counter` 对象的常用案例 ::" + +#: ../../library/collections.rst:343 +msgid "" +"Several mathematical operations are provided for combining :class:`Counter` " +"objects to produce multisets (counters that have counts greater than zero). " +"Addition and subtraction combine counters by adding or subtracting the " +"counts of corresponding elements. Intersection and union return the minimum" +" and maximum of corresponding counts. Each operation can accept inputs with" +" signed counts, but the output will exclude results with counts of zero or " +"less." +msgstr "" +"提供了几个数学操作,可以结合 :class:`Counter` 对象,以生产 multisets (计数器中大于0的元素)。 " +"加和减,结合计数器,通过加上或者减去元素的相应计数。交集和并集返回相应计数的最小或最大值。每种操作都可以接受带符号的计数,但是输出会忽略掉结果为零或者小于零的计数。" + +#: ../../library/collections.rst:361 +msgid "" +"Unary addition and subtraction are shortcuts for adding an empty counter or " +"subtracting from an empty counter." +msgstr "单目加和减(一元操作符)意思是从空计数器加或者减去。" + +#: ../../library/collections.rst:370 +msgid "" +"Added support for unary plus, unary minus, and in-place multiset operations." +msgstr "添加了对一元加,一元减和位置集合操作的支持。" + +#: ../../library/collections.rst:375 +msgid "" +"Counters were primarily designed to work with positive integers to represent" +" running counts; however, care was taken to not unnecessarily preclude use " +"cases needing other types or negative values. To help with those use cases," +" this section documents the minimum range and type restrictions." +msgstr "计数器主要是为了表达运行的正的计数而设计;但是,小心不要预先排除负数或者其他类型。为了帮助这些用例,这一节记录了最小范围和类型限制。" + +#: ../../library/collections.rst:380 +msgid "" +"The :class:`Counter` class itself is a dictionary subclass with no " +"restrictions on its keys and values. The values are intended to be numbers " +"representing counts, but you *could* store anything in the value field." +msgstr ":class:`Counter` 类是一个字典的子类,不限制键和值。值用于表示计数,但你实际上 *可以* 存储任何其他值。" + +#: ../../library/collections.rst:384 +msgid "" +"The :meth:`~Counter.most_common` method requires only that the values be " +"orderable." +msgstr ":meth:`~Counter.most_common` 方法在值需要排序的时候用。" + +#: ../../library/collections.rst:386 +msgid "" +"For in-place operations such as ``c[key] += 1``, the value type need only " +"support addition and subtraction. So fractions, floats, and decimals would " +"work and negative values are supported. The same is also true for " +":meth:`~Counter.update` and :meth:`~Counter.subtract` which allow negative " +"and zero values for both inputs and outputs." +msgstr "" +"参与原地操作如 ``c[key] += 1`` 的值的类型只需要支持加和减,所以分数、小数和 decimals " +"都可以用,也支持负数。:meth:`~Counter.update` 和 :meth:`~Counter.subtract` " +"当然也一样,输入和输出都支持 0 和 负数。" + +#: ../../library/collections.rst:392 +msgid "" +"The multiset methods are designed only for use cases with positive values. " +"The inputs may be negative or zero, but only outputs with positive values " +"are created. There are no type restrictions, but the value type needs to " +"support addition, subtraction, and comparison." +msgstr "多集方法是专为只会遇到正值的使用情况设计的。输入可以是 0 或负数,但只输出计数为正的值。没有类型限制,但值的类型需支持加、减和比较操作。" + +#: ../../library/collections.rst:397 +msgid "" +"The :meth:`~Counter.elements` method requires integer counts. It ignores " +"zero and negative counts." +msgstr ":meth:`~Counter.elements` 方法要求正整数计数。忽略0和负数计数。" + +#: ../../library/collections.rst:402 +msgid "" +"`Bag class `_ in Smalltalk." +msgstr "" +"`Bag class `_ 在 Smalltalk。" + +#: ../../library/collections.rst:405 +msgid "" +"Wikipedia entry for `Multisets `_." +msgstr "Wikipedia 链接 `Multisets `_." + +#: ../../library/collections.rst:407 +msgid "" +"`C++ multisets `_ tutorial with examples." +msgstr "" +"`C++ multisets `_ 教程和例子。" + +#: ../../library/collections.rst:410 +msgid "" +"For mathematical operations on multisets and their use cases, see *Knuth, " +"Donald. The Art of Computer Programming Volume II, Section 4.6.3, Exercise " +"19*." +msgstr "" +"数学操作和多集合用例,参考 *Knuth, Donald. The Art of Computer Programming Volume II, " +"Section 4.6.3, Exercise 19* 。" + +#: ../../library/collections.rst:414 +msgid "" +"To enumerate all distinct multisets of a given size over a given set of " +"elements, see :func:`itertools.combinations_with_replacement`::" +msgstr "" +"在给定数量和集合元素枚举所有不同的多集合,参考 :func:`itertools.combinations_with_replacement` ::" + +#: ../../library/collections.rst:421 +msgid ":class:`deque` objects" +msgstr ":class:`deque` 对象" + +#: ../../library/collections.rst:425 +msgid "" +"Returns a new deque object initialized left-to-right (using :meth:`append`) " +"with data from *iterable*. If *iterable* is not specified, the new deque is" +" empty." +msgstr "" +"返回一个新的双向队列对象,从左到右初始化(用方法 :meth:`append`) ,从 *iterable* (迭代对象) 数据创建。如果 " +"*iterable* 没有指定,新队列为空。" + +#: ../../library/collections.rst:428 +msgid "" +"Deques are a generalization of stacks and queues (the name is pronounced " +"\"deck\" and is short for \"double-ended queue\"). Deques support thread-" +"safe, memory efficient appends and pops from either side of the deque with " +"approximately the same O(1) performance in either direction." +msgstr "" +"Deque队列是由栈或者queue队列生成的(发音是 “deck”,”double-ended queue”的简称)。Deque " +"支持线程安全,内存高效添加(append)和弹出(pop),从两端都可以,两个方向的大概开销都是 O(1) 复杂度。" + +#: ../../library/collections.rst:433 +msgid "" +"Though :class:`list` objects support similar operations, they are optimized " +"for fast fixed-length operations and incur O(n) memory movement costs for " +"``pop(0)`` and ``insert(0, v)`` operations which change both the size and " +"position of the underlying data representation." +msgstr "" +"虽然 :class:`list` 对象也支持类似的操作,但它们优化的是定长操作,而 ``pop(0)`` 和 ``insert(0, v)`` " +"将改变底层数据的大小和位置,引起 O(n) 的内存移动开销。" + +#: ../../library/collections.rst:439 +msgid "" +"If *maxlen* is not specified or is ``None``, deques may grow to an arbitrary" +" length. Otherwise, the deque is bounded to the specified maximum length. " +"Once a bounded length deque is full, when new items are added, a " +"corresponding number of items are discarded from the opposite end. Bounded " +"length deques provide functionality similar to the ``tail`` filter in Unix. " +"They are also useful for tracking transactions and other pools of data where" +" only the most recent activity is of interest." +msgstr "" +"如果 *maxlen* 没有指定或者是 ``None`` ,deques " +"可以增长到任意长度。否则,deque就限定到指定最大长度。一旦限定长度的deque满了,当新项加入时,同样数量的项就从另一端弹出。限定长度deque提供类似Unix" +" filter ``tail`` 的功能。它们同样可以用与追踪最近的交换和其他数据池活动。" + +#: ../../library/collections.rst:448 +msgid "Deque objects support the following methods:" +msgstr "双向队列(deque)对象支持以下方法:" + +#: ../../library/collections.rst:452 +msgid "Add *x* to the right side of the deque." +msgstr "添加 *x* 到右端。" + +#: ../../library/collections.rst:457 +msgid "Add *x* to the left side of the deque." +msgstr "添加 *x* 到左端。" + +#: ../../library/collections.rst:462 +msgid "Remove all elements from the deque leaving it with length 0." +msgstr "移除所有元素,使其长度为0." + +#: ../../library/collections.rst:467 +msgid "Create a shallow copy of the deque." +msgstr "创建一份浅拷贝。" + +#: ../../library/collections.rst:474 +msgid "Count the number of deque elements equal to *x*." +msgstr "计算 deque 中元素等于 *x* 的个数。" + +#: ../../library/collections.rst:481 +msgid "" +"Extend the right side of the deque by appending elements from the iterable " +"argument." +msgstr "扩展deque的右侧,通过添加iterable参数中的元素。" + +#: ../../library/collections.rst:487 +msgid "" +"Extend the left side of the deque by appending elements from *iterable*. " +"Note, the series of left appends results in reversing the order of elements " +"in the iterable argument." +msgstr "扩展deque的左侧,通过添加iterable参数中的元素。注意,左添加时,在结果中iterable参数中的顺序将被反过来添加。" + +#: ../../library/collections.rst:494 +msgid "" +"Return the position of *x* in the deque (at or after index *start* and " +"before index *stop*). Returns the first match or raises :exc:`ValueError` " +"if not found." +msgstr "" +"返回 *x* 在 deque 中的位置(在索引 *start* 之后,索引 *stop* 之前)。 返回第一个匹配项,如果未找到则引发 " +":exc:`ValueError`。" + +#: ../../library/collections.rst:503 +msgid "Insert *x* into the deque at position *i*." +msgstr "在位置 *i* 插入 *x* 。" + +#: ../../library/collections.rst:505 +msgid "" +"If the insertion would cause a bounded deque to grow beyond *maxlen*, an " +":exc:`IndexError` is raised." +msgstr "如果插入会导致一个限长 deque 超出长度 *maxlen* 的话,就引发一个 :exc:`IndexError`。" + +#: ../../library/collections.rst:513 +msgid "" +"Remove and return an element from the right side of the deque. If no " +"elements are present, raises an :exc:`IndexError`." +msgstr "移去并且返回一个元素,deque 最右侧的那一个。 如果没有元素的话,就引发一个 :exc:`IndexError`。" + +#: ../../library/collections.rst:519 +msgid "" +"Remove and return an element from the left side of the deque. If no elements" +" are present, raises an :exc:`IndexError`." +msgstr "移去并且返回一个元素,deque 最左侧的那一个。 如果没有元素的话,就引发 :exc:`IndexError`。" + +#: ../../library/collections.rst:525 +msgid "" +"Remove the first occurrence of *value*. If not found, raises a " +":exc:`ValueError`." +msgstr "移除找到的第一个 *value*。 如果没有的话就引发 :exc:`ValueError`。" + +#: ../../library/collections.rst:531 +msgid "Reverse the elements of the deque in-place and then return ``None``." +msgstr "将deque逆序排列。返回 ``None`` 。" + +#: ../../library/collections.rst:538 +msgid "" +"Rotate the deque *n* steps to the right. If *n* is negative, rotate to the " +"left." +msgstr "向右循环移动 *n* 步。 如果 *n* 是负数,就向左循环。" + +#: ../../library/collections.rst:541 +msgid "" +"When the deque is not empty, rotating one step to the right is equivalent to" +" ``d.appendleft(d.pop())``, and rotating one step to the left is equivalent " +"to ``d.append(d.popleft())``." +msgstr "" +"如果deque不是空的,向右循环移动一步就等价于 ``d.appendleft(d.pop())`` , 向左循环一步就等价于 " +"``d.append(d.popleft())`` 。" + +#: ../../library/collections.rst:546 +msgid "Deque objects also provide one read-only attribute:" +msgstr "Deque对象同样提供了一个只读属性:" + +#: ../../library/collections.rst:550 +msgid "Maximum size of a deque or ``None`` if unbounded." +msgstr "Deque的最大尺寸,如果没有限定的话就是 ``None`` 。" + +#: ../../library/collections.rst:555 +msgid "" +"In addition to the above, deques support iteration, pickling, ``len(d)``, " +"``reversed(d)``, ``copy.copy(d)``, ``copy.deepcopy(d)``, membership testing " +"with the :keyword:`in` operator, and subscript references such as ``d[0]`` " +"to access the first element. Indexed access is O(1) at both ends but slows " +"to O(n) in the middle. For fast random access, use lists instead." +msgstr "" +"除了以上操作,deque " +"还支持迭代、封存、``len(d)``、``reversed(d)``、``copy.copy(d)``、``copy.deepcopy(d)``、成员检测运算符" +" :keyword:`in` 以及下标引用例如通过 ``d[0]`` 访问首个元素等。 索引访问在两端的复杂度均为 O(1) 但在中间则会低至 " +"O(n)。 如需快速随机访问,请改用列表。" + +#: ../../library/collections.rst:561 +msgid "" +"Starting in version 3.5, deques support ``__add__()``, ``__mul__()``, and " +"``__imul__()``." +msgstr "Deque从版本3.5开始支持 ``__add__()``, ``__mul__()``, 和 ``__imul__()`` 。" + +#: ../../library/collections.rst:564 +msgid "Example:" +msgstr "示例:" + +#: ../../library/collections.rst:621 +msgid ":class:`deque` Recipes" +msgstr ":class:`deque` 用法" + +#: ../../library/collections.rst:623 +msgid "This section shows various approaches to working with deques." +msgstr "这一节展示了deque的多种用法。" + +#: ../../library/collections.rst:625 +msgid "" +"Bounded length deques provide functionality similar to the ``tail`` filter " +"in Unix::" +msgstr "限长deque提供了类似Unix ``tail`` 过滤功能 ::" + +#: ../../library/collections.rst:633 +msgid "" +"Another approach to using deques is to maintain a sequence of recently added" +" elements by appending to the right and popping to the left::" +msgstr "另一个用法是维护一个近期添加元素的序列,通过从右边添加和从左边弹出 ::" + +#: ../../library/collections.rst:648 +msgid "" +"A `round-robin scheduler `_ can be implemented with input iterators stored in a " +":class:`deque`. Values are yielded from the active iterator in position " +"zero. If that iterator is exhausted, it can be removed with " +":meth:`~deque.popleft`; otherwise, it can be cycled back to the end with the" +" :meth:`~deque.rotate` method::" +msgstr "" +"一个 `轮询调度器 `_ 可以通过在 " +":class:`deque` 中放入迭代器来实现。值从当前迭代器的位置0被取出并暂存(yield)。 如果这个迭代器消耗完毕,就用 " +":meth:`~deque.popleft` 将其从对列中移去;否则,就通过 :meth:`~deque.rotate` 将它移到队列的末尾 ::" + +#: ../../library/collections.rst:667 +msgid "" +"The :meth:`~deque.rotate` method provides a way to implement :class:`deque` " +"slicing and deletion. For example, a pure Python implementation of ``del " +"d[n]`` relies on the ``rotate()`` method to position elements to be popped::" +msgstr "" +":meth:`~deque.rotate` 方法提供了一种方式来实现 :class:`deque` 切片和删除。 例如, 一个纯的Python " +"``del d[n]`` 实现依赖于 ``rotate()`` 来定位要弹出的元素 ::" + +#: ../../library/collections.rst:676 +msgid "" +"To implement :class:`deque` slicing, use a similar approach applying " +":meth:`~deque.rotate` to bring a target element to the left side of the " +"deque. Remove old entries with :meth:`~deque.popleft`, add new entries with " +":meth:`~deque.extend`, and then reverse the rotation. With minor variations " +"on that approach, it is easy to implement Forth style stack manipulations " +"such as ``dup``, ``drop``, ``swap``, ``over``, ``pick``, ``rot``, and " +"``roll``." +msgstr "" +"要实现 :class:`deque` 切片, 使用一个类似的方法,应用 :meth:`~deque.rotate` 将目标元素放到左边。通过 " +":meth:`~deque.popleft` 移去老的条目(entries),通过 :meth:`~deque.extend` 添加新的条目, 然后反向" +" rotate。这个方法可以最小代价实现命令式的栈操作,诸如 ``dup``, ``drop``, ``swap``, ``over``, " +"``pick``, ``rot``, 和 ``roll`` 。" + +#: ../../library/collections.rst:686 +msgid ":class:`defaultdict` objects" +msgstr ":class:`defaultdict` 对象" + +#: ../../library/collections.rst:690 +msgid "" +"Return a new dictionary-like object. :class:`defaultdict` is a subclass of " +"the built-in :class:`dict` class. It overrides one method and adds one " +"writable instance variable. The remaining functionality is the same as for " +"the :class:`dict` class and is not documented here." +msgstr "" +"返回一个新的类似字典的对象。 :class:`defaultdict` 是内置 :class:`dict` 类的子类。 " +"它重写了一个方法并添加了一个可写的实例变量。 其余的功能与 :class:`dict` 类相同因而不在此文档中写明。" + +#: ../../library/collections.rst:695 +msgid "" +"The first argument provides the initial value for the " +":attr:`default_factory` attribute; it defaults to ``None``. All remaining " +"arguments are treated the same as if they were passed to the :class:`dict` " +"constructor, including keyword arguments." +msgstr "" +"本对象包含一个名为 :attr:`default_factory` 的属性,构造时,第一个参数用于为该属性提供初始值,默认为 " +"``None``。所有其他参数(包括关键字参数)都相当于传递给 :class:`dict` 的构造函数。" + +#: ../../library/collections.rst:701 +msgid "" +":class:`defaultdict` objects support the following method in addition to the" +" standard :class:`dict` operations:" +msgstr ":class:`defaultdict` 对象除了支持标准 :class:`dict` 的操作,还支持以下方法作为扩展:" + +#: ../../library/collections.rst:706 +msgid "" +"If the :attr:`default_factory` attribute is ``None``, this raises a " +":exc:`KeyError` exception with the *key* as argument." +msgstr "" +"如果 :attr:`default_factory` 属性为 ``None``,则调用本方法会抛出 :exc:`KeyError` 异常,附带参数 " +"*key*。" + +#: ../../library/collections.rst:709 +msgid "" +"If :attr:`default_factory` is not ``None``, it is called without arguments " +"to provide a default value for the given *key*, this value is inserted in " +"the dictionary for the *key*, and returned." +msgstr "" +"如果 :attr:`default_factory` 不为 ``None``,则它会被(不带参数地)调用来为 *key* 提供一个默认值,这个值和 " +"*key* 作为一对键值对被插入到字典中,并作为本方法的返回值返回。" + +#: ../../library/collections.rst:713 +msgid "" +"If calling :attr:`default_factory` raises an exception this exception is " +"propagated unchanged." +msgstr "如果调用 :attr:`default_factory` 时抛出了异常,这个异常会原封不动地向外层传递。" + +#: ../../library/collections.rst:716 +msgid "" +"This method is called by the :meth:`__getitem__` method of the :class:`dict`" +" class when the requested key is not found; whatever it returns or raises is" +" then returned or raised by :meth:`__getitem__`." +msgstr "" +"在无法找到所需键值时,本方法会被 :class:`dict` 中的 :meth:`__getitem__` " +"方法调用。无论本方法返回了值还是抛出了异常,都会被 :meth:`__getitem__` 传递。" + +#: ../../library/collections.rst:720 +msgid "" +"Note that :meth:`__missing__` is *not* called for any operations besides " +":meth:`__getitem__`. This means that :meth:`get` will, like normal " +"dictionaries, return ``None`` as a default rather than using " +":attr:`default_factory`." +msgstr "" +"注意,:meth:`__missing__` *不会* 被 :meth:`__getitem__` 以外的其他方法调用。意味着 :meth:`get` " +"会像正常的 dict 那样返回 ``None``,而不是使用 :attr:`default_factory`。" + +#: ../../library/collections.rst:726 +msgid ":class:`defaultdict` objects support the following instance variable:" +msgstr ":class:`defaultdict` 对象支持以下实例变量:" + +#: ../../library/collections.rst:731 +msgid "" +"This attribute is used by the :meth:`__missing__` method; it is initialized " +"from the first argument to the constructor, if present, or to ``None``, if " +"absent." +msgstr "" +"本属性由 :meth:`__missing__` " +"方法来调用。如果构造对象时提供了第一个参数,则本属性会被初始化成那个参数,如果未提供第一个参数,则本属性为 ``None``。" + +#: ../../library/collections.rst:735 ../../library/collections.rst:1132 +msgid "" +"Added merge (``|``) and update (``|=``) operators, specified in :pep:`584`." +msgstr "增加了合并 (``|``) 与更新 (``|=``) 运算符,相关说明见 :pep:`584`。" + +#: ../../library/collections.rst:741 +msgid ":class:`defaultdict` Examples" +msgstr ":class:`defaultdict` 例子" + +#: ../../library/collections.rst:743 +msgid "" +"Using :class:`list` as the :attr:`~defaultdict.default_factory`, it is easy " +"to group a sequence of key-value pairs into a dictionary of lists:" +msgstr "" +"使用 :class:`list` 作为 " +":attr:`~defaultdict.default_factory`,很轻松地将(键-值对组成的)序列转换为(键-列表组成的)字典:" + +#: ../../library/collections.rst:754 +msgid "" +"When each key is encountered for the first time, it is not already in the " +"mapping; so an entry is automatically created using the " +":attr:`~defaultdict.default_factory` function which returns an empty " +":class:`list`. The :meth:`list.append` operation then attaches the value to" +" the new list. When keys are encountered again, the look-up proceeds " +"normally (returning the list for that key) and the :meth:`list.append` " +"operation adds another value to the list. This technique is simpler and " +"faster than an equivalent technique using :meth:`dict.setdefault`:" +msgstr "" +"当每个键第一次遇见时,它还没有在字典里面,所以自动创建该条目,即调用 :attr:`~defaultdict.default_factory` " +"方法,返回一个空的 :class:`list`。 :meth:`list.append` " +"操作添加值到这个新的列表里。当再次存取该键时,就正常操作,:meth:`list.append` 添加另一个值到列表中。这个计数比它的等价方法 " +":meth:`dict.setdefault` 要快速和简单:" + +#: ../../library/collections.rst:769 +msgid "" +"Setting the :attr:`~defaultdict.default_factory` to :class:`int` makes the " +":class:`defaultdict` useful for counting (like a bag or multiset in other " +"languages):" +msgstr "" +"设置 :attr:`~defaultdict.default_factory` 为 :class:`int`,使 " +":class:`defaultdict` 用于计数(类似其他语言中的 bag 或 multiset):" + +#: ../../library/collections.rst:781 +msgid "" +"When a letter is first encountered, it is missing from the mapping, so the " +":attr:`~defaultdict.default_factory` function calls :func:`int` to supply a " +"default count of zero. The increment operation then builds up the count for" +" each letter." +msgstr "" +"当一个字母首次遇到时,它会查询失败,则 :attr:`~defaultdict.default_factory` 会调用 :func:`int` " +"来提供一个整数 0 作为默认值。后续的自增操作建立起对每个字母的计数。" + +#: ../../library/collections.rst:785 +msgid "" +"The function :func:`int` which always returns zero is just a special case of" +" constant functions. A faster and more flexible way to create constant " +"functions is to use a lambda function which can supply any constant value " +"(not just zero):" +msgstr "" +"函数 :func:`int` 总是返回 0,这是常数函数的特殊情况。一个更快和灵活的方法是使用 lambda 函数,可以提供任何常量值(不只是0):" + +#: ../../library/collections.rst:797 +msgid "" +"Setting the :attr:`~defaultdict.default_factory` to :class:`set` makes the " +":class:`defaultdict` useful for building a dictionary of sets:" +msgstr "" +"设置 :attr:`~defaultdict.default_factory` 为 :class:`set` 使 " +":class:`defaultdict` 用于构建 set 集合:" + +#: ../../library/collections.rst:810 +msgid ":func:`namedtuple` Factory Function for Tuples with Named Fields" +msgstr ":func:`namedtuple` 命名元组的工厂函数" + +#: ../../library/collections.rst:812 +msgid "" +"Named tuples assign meaning to each position in a tuple and allow for more " +"readable, self-documenting code. They can be used wherever regular tuples " +"are used, and they add the ability to access fields by name instead of " +"position index." +msgstr "命名元组赋予每个位置一个含义,提供可读性和自文档性。它们可以用于任何普通元组,并添加了通过名字获取值的能力,通过索引值也是可以的。" + +#: ../../library/collections.rst:818 +msgid "" +"Returns a new tuple subclass named *typename*. The new subclass is used to " +"create tuple-like objects that have fields accessible by attribute lookup as" +" well as being indexable and iterable. Instances of the subclass also have " +"a helpful docstring (with typename and field_names) and a helpful " +":meth:`__repr__` method which lists the tuple contents in a ``name=value`` " +"format." +msgstr "" +"返回一个新的元组子类,名为 *typename* " +"。这个新的子类用于创建类元组的对象,可以通过字段名来获取属性值,同样也可以通过索引和迭代获取值。子类实例同样有文档字符串(类名和字段名)另外一个有用的 " +":meth:`__repr__` 方法,以 ``name=value`` 格式列明了元组内容。" + +#: ../../library/collections.rst:824 +msgid "" +"The *field_names* are a sequence of strings such as ``['x', 'y']``. " +"Alternatively, *field_names* can be a single string with each fieldname " +"separated by whitespace and/or commas, for example ``'x y'`` or ``'x, y'``." +msgstr "" +"*field_names* 是一个像 ``[‘x’, ‘y’]`` 一样的字符串序列。另外 *field_names* " +"可以是一个纯字符串,用空白或逗号分隔开元素名,比如 ``'x y'`` 或者 ``'x, y'`` 。" + +#: ../../library/collections.rst:828 +msgid "" +"Any valid Python identifier may be used for a fieldname except for names " +"starting with an underscore. Valid identifiers consist of letters, digits, " +"and underscores but do not start with a digit or underscore and cannot be a " +":mod:`keyword` such as *class*, *for*, *return*, *global*, *pass*, or " +"*raise*." +msgstr "" +"任何有效的Python 标识符都可以作为字段名,除了下划线开头的那些。有效标识符由字母,数字,下划线组成,但首字母不能是数字或下划线,另外不能是关键词 " +":mod:`keyword` 比如 *class*, *for*, *return*, *global*, *pass*, 或 *raise* 。" + +#: ../../library/collections.rst:834 +msgid "" +"If *rename* is true, invalid fieldnames are automatically replaced with " +"positional names. For example, ``['abc', 'def', 'ghi', 'abc']`` is " +"converted to ``['abc', '_1', 'ghi', '_3']``, eliminating the keyword ``def``" +" and the duplicate fieldname ``abc``." +msgstr "" +"如果 *rename* 为真, 无效字段名会自动转换成位置名。比如 ``['abc', 'def', 'ghi', 'abc']`` 转换成 " +"``['abc', '_1', 'ghi', '_3']`` , 消除关键词 ``def`` 和重复字段名 ``abc`` 。" + +#: ../../library/collections.rst:839 +msgid "" +"*defaults* can be ``None`` or an :term:`iterable` of default values. Since " +"fields with a default value must come after any fields without a default, " +"the *defaults* are applied to the rightmost parameters. For example, if the" +" fieldnames are ``['x', 'y', 'z']`` and the defaults are ``(1, 2)``, then " +"``x`` will be a required argument, ``y`` will default to ``1``, and ``z`` " +"will default to ``2``." +msgstr "" +"*defaults* 可以为 ``None`` 或者是一个默认值的 :term:`iterable` " +"。如果一个默认值域必须跟其他没有默认值的域在一起出现,*defaults* 就应用到最右边的参数。比如如果域名 ``['x', 'y', 'z']`` " +"和默认值 ``(1, 2)`` ,那么 ``x`` 就必须指定一个参数值 ,``y`` 默认值 ``1`` , ``z`` 默认值 ``2`` 。" + +#: ../../library/collections.rst:846 +msgid "" +"If *module* is defined, the ``__module__`` attribute of the named tuple is " +"set to that value." +msgstr "如果 *module* 值有定义,命名元组的 ``__module__`` 属性值就被设置。" + +#: ../../library/collections.rst:849 +msgid "" +"Named tuple instances do not have per-instance dictionaries, so they are " +"lightweight and require no more memory than regular tuples." +msgstr "具名元组实例毋需字典来保存每个实例的不同属性,所以它们轻量,占用的内存和普通元组一样。" + +#: ../../library/collections.rst:852 +msgid "" +"To support pickling, the named tuple class should be assigned to a variable " +"that matches *typename*." +msgstr "要支持封存操作,应当将命名元组类赋值给一个匹配 *typename* 的变量。" + +#: ../../library/collections.rst:855 +msgid "Added support for *rename*." +msgstr "添加了对 *rename* 的支持。" + +#: ../../library/collections.rst:858 +msgid "" +"The *verbose* and *rename* parameters became :ref:`keyword-only arguments " +"`." +msgstr "*verbose* 和 *rename* 参数成为 :ref:`仅限关键字参数 `." + +#: ../../library/collections.rst:862 +msgid "Added the *module* parameter." +msgstr "添加了 *module* 参数。" + +#: ../../library/collections.rst:865 +msgid "Removed the *verbose* parameter and the :attr:`_source` attribute." +msgstr "移除了 *verbose* 形参和 :attr:`_source` 属性。" + +#: ../../library/collections.rst:868 +msgid "" +"Added the *defaults* parameter and the :attr:`_field_defaults` attribute." +msgstr "添加了 *defaults* 参数和 :attr:`_field_defaults` 属性。" + +#: ../../library/collections.rst:888 +msgid "" +"Named tuples are especially useful for assigning field names to result " +"tuples returned by the :mod:`csv` or :mod:`sqlite3` modules::" +msgstr "命名元组尤其有用于赋值 :mod:`csv` :mod:`sqlite3` 模块返回的元组 ::" + +#: ../../library/collections.rst:904 +msgid "" +"In addition to the methods inherited from tuples, named tuples support three" +" additional methods and two attributes. To prevent conflicts with field " +"names, the method and attribute names start with an underscore." +msgstr "除了继承元组的方法,命名元组还支持三个额外的方法和两个属性。为了防止字段名冲突,方法和属性以下划线开始。" + +#: ../../library/collections.rst:910 +msgid "" +"Class method that makes a new instance from an existing sequence or " +"iterable." +msgstr "类方法从存在的序列或迭代实例创建一个新实例。" + +#: ../../library/collections.rst:920 +msgid "" +"Return a new :class:`dict` which maps field names to their corresponding " +"values:" +msgstr "返回一个新的 :class:`dict` ,它将字段名称映射到它们对应的值:" + +#: ../../library/collections.rst:929 +msgid "Returns an :class:`OrderedDict` instead of a regular :class:`dict`." +msgstr "返回一个 :class:`OrderedDict` 而不是 :class:`dict` 。" + +#: ../../library/collections.rst:932 +msgid "" +"Returns a regular :class:`dict` instead of an :class:`OrderedDict`. As of " +"Python 3.7, regular dicts are guaranteed to be ordered. If the extra " +"features of :class:`OrderedDict` are required, the suggested remediation is " +"to cast the result to the desired type: ``OrderedDict(nt._asdict())``." +msgstr "" +"返回一个常规 :class:`dict` 而不是 :class:`OrderedDict`。 因为自 Python 3.7 起,常规字典已经保证有序。 " +"如果需要 :class:`OrderedDict` 的额外特性,推荐的解决方案是将结果转换为需要的类型: " +"``OrderedDict(nt._asdict())``。" + +#: ../../library/collections.rst:941 +msgid "" +"Return a new instance of the named tuple replacing specified fields with new" +" values::" +msgstr "返回一个新的命名元组实例,并将指定域替换为新的值 ::" + +#: ../../library/collections.rst:953 +msgid "" +"Tuple of strings listing the field names. Useful for introspection and for " +"creating new named tuple types from existing named tuples." +msgstr "字符串元组列出了字段名。用于提醒和从现有元组创建一个新的命名元组类型。" + +#: ../../library/collections.rst:968 +msgid "Dictionary mapping field names to default values." +msgstr "字典将字段名称映射到默认值。" + +#: ../../library/collections.rst:978 +msgid "" +"To retrieve a field whose name is stored in a string, use the " +":func:`getattr` function:" +msgstr "要获取这个名字域的值,使用 :func:`getattr` 函数 :" + +#: ../../library/collections.rst:984 +msgid "" +"To convert a dictionary to a named tuple, use the double-star-operator (as " +"described in :ref:`tut-unpacking-arguments`):" +msgstr "转换一个字典到命名元组,使用 ** 两星操作符 (所述如 :ref:`tut-unpacking-arguments`):" + +#: ../../library/collections.rst:991 +msgid "" +"Since a named tuple is a regular Python class, it is easy to add or change " +"functionality with a subclass. Here is how to add a calculated field and a " +"fixed-width print format:" +msgstr "因为一个命名元组是一个正常的Python类,它可以很容易的通过子类更改功能。这里是如何添加一个计算域和定宽输出打印格式:" + +#: ../../library/collections.rst:1010 +msgid "" +"The subclass shown above sets ``__slots__`` to an empty tuple. This helps " +"keep memory requirements low by preventing the creation of instance " +"dictionaries." +msgstr "上面的子类设置 ``__slots__`` 为一个空元组。通过阻止创建实例字典保持了较低的内存开销。" + +#: ../../library/collections.rst:1013 +msgid "" +"Subclassing is not useful for adding new, stored fields. Instead, simply " +"create a new named tuple type from the :attr:`~somenamedtuple._fields` " +"attribute:" +msgstr "" +"子类化对于添加和存储新的名字域是无效的。应当通过 :attr:`~somenamedtuple._fields` 创建一个新的命名元组来实现它:" + +#: ../../library/collections.rst:1018 +msgid "" +"Docstrings can be customized by making direct assignments to the ``__doc__``" +" fields:" +msgstr "文档字符串可以自定义,通过直接赋值给 ``__doc__`` 属性:" + +#: ../../library/collections.rst:1027 +msgid "Property docstrings became writeable." +msgstr "文档字符串属性变成可写。" + +#: ../../library/collections.rst:1032 +msgid "" +"See :class:`typing.NamedTuple` for a way to add type hints for named tuples." +" It also provides an elegant notation using the :keyword:`class` keyword::" +msgstr "" +"请参阅 :class:`typing.NamedTuple` ,以获取为命名元组添加类型提示的方法。 它还使用 :keyword:`class` " +"关键字提供了一种优雅的符号::" + +#: ../../library/collections.rst:1041 +msgid "" +"See :meth:`types.SimpleNamespace` for a mutable namespace based on an " +"underlying dictionary instead of a tuple." +msgstr "对于以字典为底层的可变域名, 参考 :meth:`types.SimpleNamespace` 。" + +#: ../../library/collections.rst:1044 +msgid "" +"The :mod:`dataclasses` module provides a decorator and functions for " +"automatically adding generated special methods to user-defined classes." +msgstr ":mod:`dataclasses` 模块提供了一个装饰器和一些函数,用于自动将生成的特殊方法添加到用户定义的类中。" + +#: ../../library/collections.rst:1049 +msgid ":class:`OrderedDict` objects" +msgstr ":class:`OrderedDict` 对象" + +#: ../../library/collections.rst:1051 +msgid "" +"Ordered dictionaries are just like regular dictionaries but have some extra " +"capabilities relating to ordering operations. They have become less " +"important now that the built-in :class:`dict` class gained the ability to " +"remember insertion order (this new behavior became guaranteed in Python " +"3.7)." +msgstr "" +"有序词典就像常规词典一样,但有一些与排序操作相关的额外功能。由于内置的 :class:`dict` 类获得了记住插入顺序的能力(在 Python 3.7" +" 中保证了这种新行为),它们变得不那么重要了。" + +#: ../../library/collections.rst:1057 +msgid "Some differences from :class:`dict` still remain:" +msgstr "一些与 :class:`dict` 的不同仍然存在:" + +#: ../../library/collections.rst:1059 +msgid "" +"The regular :class:`dict` was designed to be very good at mapping " +"operations. Tracking insertion order was secondary." +msgstr "常规的 :class:`dict` 被设计为非常擅长映射操作。 跟踪插入顺序是次要的。" + +#: ../../library/collections.rst:1062 +msgid "" +"The :class:`OrderedDict` was designed to be good at reordering operations. " +"Space efficiency, iteration speed, and the performance of update operations " +"were secondary." +msgstr ":class:`OrderedDict` 旨在擅长重新排序操作。 空间效率、迭代速度和更新操作的性能是次要的。" + +#: ../../library/collections.rst:1066 +msgid "" +"Algorithmically, :class:`OrderedDict` can handle frequent reordering " +"operations better than :class:`dict`. This makes it suitable for tracking " +"recent accesses (for example in an `LRU cache " +"`_)." +msgstr "" +"算法上, :class:`OrderedDict` 可以比 :class:`dict` 更好地处理频繁的重新排序操作。 " +"这使其适用于跟踪最近的访问(例如在 `LRU cache `_ 中)。" + +#: ../../library/collections.rst:1071 +msgid "" +"The equality operation for :class:`OrderedDict` checks for matching order." +msgstr "对于 :class:`OrderedDict` ,相等操作检查匹配顺序。" + +#: ../../library/collections.rst:1073 +msgid "" +"The :meth:`popitem` method of :class:`OrderedDict` has a different " +"signature. It accepts an optional argument to specify which item is popped." +msgstr ":class:`OrderedDict` 类的 :meth:`popitem` 方法有不同的签名。它接受一个可选参数来指定弹出哪个元素。" + +#: ../../library/collections.rst:1076 +msgid "" +":class:`OrderedDict` has a :meth:`move_to_end` method to efficiently " +"reposition an element to an endpoint." +msgstr ":class:`OrderedDict` 类有一个 :meth:`move_to_end` 方法,可以有效地将元素移动到任一端。" + +#: ../../library/collections.rst:1079 +msgid "Until Python 3.8, :class:`dict` lacked a :meth:`__reversed__` method." +msgstr "Python 3.8之前, :class:`dict` 缺少 :meth:`__reversed__` 方法。" + +#: ../../library/collections.rst:1084 +msgid "" +"Return an instance of a :class:`dict` subclass that has methods specialized " +"for rearranging dictionary order." +msgstr "返回一个 :class:`dict` 子类的实例,它具有专门用于重新排列字典顺序的方法。" + +#: ../../library/collections.rst:1091 +msgid "" +"The :meth:`popitem` method for ordered dictionaries returns and removes a " +"(key, value) pair. The pairs are returned in :abbr:`LIFO (last-in, first-" +"out)` order if *last* is true or :abbr:`FIFO (first-in, first-out)` order if" +" false." +msgstr "" +"有序字典的 :meth:`popitem` 方法移除并返回一个 (key, value) 键值对。 如果 *last* 值为真,则按 " +":abbr:`LIFO (last-in, first-out)` 后进先出的顺序返回键值对,否则就按 :abbr:`FIFO (first-in, " +"first-out)` 先进先出的顺序返回键值对。" + +#: ../../library/collections.rst:1098 +msgid "" +"Move an existing *key* to either end of an ordered dictionary. The item is " +"moved to the right end if *last* is true (the default) or to the beginning " +"if *last* is false. Raises :exc:`KeyError` if the *key* does not exist::" +msgstr "" +"将现有 *key* 移动到有序字典的任一端。 如果 *last* 为真值(默认)则将元素移至末尾;如果 *last* 为假值则将元素移至开头。如果 " +"*key* 不存在则会触发 :exc:`KeyError`::" + +#: ../../library/collections.rst:1113 +msgid "" +"In addition to the usual mapping methods, ordered dictionaries also support " +"reverse iteration using :func:`reversed`." +msgstr "相对于通常的映射方法,有序字典还另外提供了逆序迭代的支持,通过 :func:`reversed` 。" + +#: ../../library/collections.rst:1116 +msgid "" +"Equality tests between :class:`OrderedDict` objects are order-sensitive and " +"are implemented as ``list(od1.items())==list(od2.items())``. Equality tests " +"between :class:`OrderedDict` objects and other " +":class:`~collections.abc.Mapping` objects are order-insensitive like regular" +" dictionaries. This allows :class:`OrderedDict` objects to be substituted " +"anywhere a regular dictionary is used." +msgstr "" +":class:`OrderedDict` 之间的相等测试是顺序敏感的,实现为 " +"``list(od1.items())==list(od2.items())`` 。 :class:`OrderedDict` 对象和其他的 " +":class:`~collections.abc.Mapping` 的相等测试,是顺序敏感的字典测试。这允许 :class:`OrderedDict` " +"替换为任何字典可以使用的场所。" + +#: ../../library/collections.rst:1123 +msgid "" +"The items, keys, and values :term:`views ` of " +":class:`OrderedDict` now support reverse iteration using :func:`reversed`." +msgstr "" +":class:`OrderedDict` 的项(item),键(key)和值(value) :term:`视图 ` " +"现在支持逆序迭代,通过 :func:`reversed` 。" + +#: ../../library/collections.rst:1127 +msgid "" +"With the acceptance of :pep:`468`, order is retained for keyword arguments " +"passed to the :class:`OrderedDict` constructor and its :meth:`update` " +"method." +msgstr "" +":pep:`468` 赞成将关键词参数的顺序保留, 通过传递给 :class:`OrderedDict` 构造器和它的 :meth:`update` " +"方法。" + +#: ../../library/collections.rst:1137 +msgid ":class:`OrderedDict` Examples and Recipes" +msgstr ":class:`OrderedDict` 例子和用法" + +#: ../../library/collections.rst:1139 +msgid "" +"It is straightforward to create an ordered dictionary variant that remembers" +" the order the keys were *last* inserted. If a new entry overwrites an " +"existing entry, the original insertion position is changed and moved to the " +"end::" +msgstr "创建记住键值 *最后* 插入顺序的有序字典变体很简单。 如果新条目覆盖现有条目,则原始插入位置将更改并移至末尾::" + +#: ../../library/collections.rst:1151 +msgid "" +"An :class:`OrderedDict` would also be useful for implementing variants of " +":func:`functools.lru_cache`:" +msgstr "一个 :class:`OrderedDict` 对于实现 :func:`functools.lru_cache` 的变体也很有用:" + +#: ../../library/collections.rst:1192 +msgid ":class:`UserDict` objects" +msgstr ":class:`UserDict` 对象" + +#: ../../library/collections.rst:1194 +msgid "" +"The class, :class:`UserDict` acts as a wrapper around dictionary objects. " +"The need for this class has been partially supplanted by the ability to " +"subclass directly from :class:`dict`; however, this class can be easier to " +"work with because the underlying dictionary is accessible as an attribute." +msgstr "" +":class:`UserDict` 类是用作字典对象的外包装。对这个类的需求已部分由直接创建 :class:`dict` " +"的子类的功能所替代;不过,这个类处理起来更容易,因为底层的字典可以作为属性来访问。" + +#: ../../library/collections.rst:1202 +msgid "" +"Class that simulates a dictionary. The instance's contents are kept in a " +"regular dictionary, which is accessible via the :attr:`data` attribute of " +":class:`UserDict` instances. If *initialdata* is provided, :attr:`data` is " +"initialized with its contents; note that a reference to *initialdata* will " +"not be kept, allowing it to be used for other purposes." +msgstr "" +"模拟字典的类。 这个实例的内容保存在一个常规字典中,它可以通过 :class:`UserDict` 实例的 :attr:`data` 属性来访问。 " +"如果提供了 *initialdata*,则 :attr:`data` 会用其内容来初始化;请注意对 *initialdata* " +"的引用将不会被保留,以允许它被用于其他目的。" + +#: ../../library/collections.rst:1208 +msgid "" +"In addition to supporting the methods and operations of mappings, " +":class:`UserDict` instances provide the following attribute:" +msgstr ":class:`UserDict` 实例提供了以下属性作为扩展方法和操作的支持:" + +#: ../../library/collections.rst:1213 +msgid "" +"A real dictionary used to store the contents of the :class:`UserDict` class." +msgstr "一个真实的字典,用于保存 :class:`UserDict` 类的内容。" + +#: ../../library/collections.rst:1219 +msgid ":class:`UserList` objects" +msgstr ":class:`UserList` 对象" + +#: ../../library/collections.rst:1221 +msgid "" +"This class acts as a wrapper around list objects. It is a useful base class" +" for your own list-like classes which can inherit from them and override " +"existing methods or add new ones. In this way, one can add new behaviors to" +" lists." +msgstr "" +"这个类封装了列表对象。它是一个有用的基础类,对于你想自定义的类似列表的类,可以继承和覆盖现有的方法,也可以添加新的方法。这样我们可以对列表添加新的行为。" + +#: ../../library/collections.rst:1226 +msgid "" +"The need for this class has been partially supplanted by the ability to " +"subclass directly from :class:`list`; however, this class can be easier to " +"work with because the underlying list is accessible as an attribute." +msgstr "" +"对这个类的需求已部分由直接创建 :class:`list` 的子类的功能所替代;不过,这个类处理起来更容易,因为底层的列表可以作为属性来访问。" + +#: ../../library/collections.rst:1232 +msgid "" +"Class that simulates a list. The instance's contents are kept in a regular " +"list, which is accessible via the :attr:`data` attribute of " +":class:`UserList` instances. The instance's contents are initially set to a" +" copy of *list*, defaulting to the empty list ``[]``. *list* can be any " +"iterable, for example a real Python list or a :class:`UserList` object." +msgstr "" +"模拟一个列表。这个实例的内容被保存为一个正常列表,通过 :class:`UserList` 的 :attr:`data` " +"属性存取。实例内容被初始化为一个 *list* 的copy,默认为 ``[]`` 空列表。 *list* " +"可以是迭代对象,比如一个Python列表,或者一个 :class:`UserList` 对象。" + +#: ../../library/collections.rst:1238 +msgid "" +"In addition to supporting the methods and operations of mutable sequences, " +":class:`UserList` instances provide the following attribute:" +msgstr ":class:`UserList` 提供了以下属性作为可变序列的方法和操作的扩展:" + +#: ../../library/collections.rst:1243 +msgid "" +"A real :class:`list` object used to store the contents of the " +":class:`UserList` class." +msgstr "一个 :class:`list` 对象用于存储 :class:`UserList` 的内容。" + +#: ../../library/collections.rst:1246 +msgid "" +"**Subclassing requirements:** Subclasses of :class:`UserList` are expected " +"to offer a constructor which can be called with either no arguments or one " +"argument. List operations which return a new sequence attempt to create an " +"instance of the actual implementation class. To do so, it assumes that the " +"constructor can be called with a single parameter, which is a sequence " +"object used as a data source." +msgstr "" +"**子类化的要求:** :class:`UserList` " +"的子类需要提供一个构造器,可以无参数调用,或者一个参数调用。返回一个新序列的列表操作需要创建一个实现类的实例。它假定了构造器可以以一个参数进行调用,这个参数是一个序列对象,作为数据源。" + +#: ../../library/collections.rst:1253 +msgid "" +"If a derived class does not wish to comply with this requirement, all of the" +" special methods supported by this class will need to be overridden; please " +"consult the sources for information about the methods which need to be " +"provided in that case." +msgstr "如果一个分离的类不希望依照这个需求,所有的特殊方法就必须重写;请参照源代码进行修改。" + +#: ../../library/collections.rst:1259 +msgid ":class:`UserString` objects" +msgstr ":class:`UserString` 对象" + +#: ../../library/collections.rst:1261 +msgid "" +"The class, :class:`UserString` acts as a wrapper around string objects. The " +"need for this class has been partially supplanted by the ability to subclass" +" directly from :class:`str`; however, this class can be easier to work with " +"because the underlying string is accessible as an attribute." +msgstr "" +":class:`UserString` 类是用作字符串对象的外包装。对这个类的需求已部分由直接创建 :class:`str` " +"的子类的功能所替代;不过,这个类处理起来更容易,因为底层的字符串可以作为属性来访问。" + +#: ../../library/collections.rst:1269 +msgid "" +"Class that simulates a string object. The instance's content is kept in a " +"regular string object, which is accessible via the :attr:`data` attribute of" +" :class:`UserString` instances. The instance's contents are initially set " +"to a copy of *seq*. The *seq* argument can be any object which can be " +"converted into a string using the built-in :func:`str` function." +msgstr "" +"模拟一个字符串对象。这个实例对象的内容保存为一个正常字符串,通过 :class:`UserString` 的 :attr:`data` " +"属性存取。实例内容初始化设置为 *seq* 的copy。*seq* 参数可以是任何可通过内建 :func:`str` 函数转换为字符串的对象。" + +#: ../../library/collections.rst:1276 +msgid "" +"In addition to supporting the methods and operations of strings, " +":class:`UserString` instances provide the following attribute:" +msgstr ":class:`UserString` 提供了以下属性作为字符串方法和操作的额外支持:" + +#: ../../library/collections.rst:1281 +msgid "" +"A real :class:`str` object used to store the contents of the " +":class:`UserString` class." +msgstr "一个真正的 :class:`str` 对象用来存放 :class:`UserString` 类的内容。" + +#: ../../library/collections.rst:1284 +msgid "" +"New methods ``__getnewargs__``, ``__rmod__``, ``casefold``, ``format_map``, " +"``isprintable``, and ``maketrans``." +msgstr "" +"新方法 ``__getnewargs__``, ``__rmod__``, ``casefold``, ``format_map``, " +"``isprintable``, 和 ``maketrans``。" diff --git a/library/colorsys.po b/library/colorsys.po new file mode 100644 index 000000000..696e508cc --- /dev/null +++ b/library/colorsys.po @@ -0,0 +1,87 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) 2001-2022, Python Software Foundation +# This file is distributed under the same license as the Python package. +# FIRST AUTHOR , YEAR. +# +# Translators: +# nick <2330458484@qq.com>, 2019 +# Freesand Leo , 2020 +# +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: Python 3.9\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2022-11-04 14:34+0000\n" +"PO-Revision-Date: 2017-02-16 23:03+0000\n" +"Last-Translator: Freesand Leo , 2020\n" +"Language-Team: Chinese (China) (https://www.transifex.com/python-doc/teams/5390/zh_CN/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: zh_CN\n" +"Plural-Forms: nplurals=1; plural=0;\n" + +#: ../../library/colorsys.rst:2 +msgid ":mod:`colorsys` --- Conversions between color systems" +msgstr ":mod:`colorsys` --- 颜色系统间的转换" + +#: ../../library/colorsys.rst:9 +msgid "**Source code:** :source:`Lib/colorsys.py`" +msgstr "**源代码:** :source:`Lib/colorsys.py`" + +#: ../../library/colorsys.rst:13 +msgid "" +"The :mod:`colorsys` module defines bidirectional conversions of color values" +" between colors expressed in the RGB (Red Green Blue) color space used in " +"computer monitors and three other coordinate systems: YIQ, HLS (Hue " +"Lightness Saturation) and HSV (Hue Saturation Value). Coordinates in all of" +" these color spaces are floating point values. In the YIQ space, the Y " +"coordinate is between 0 and 1, but the I and Q coordinates can be positive " +"or negative. In all other spaces, the coordinates are all between 0 and 1." +msgstr "" +":mod:`colorsys` 模块定义了计算机显示器所用的 RGB (Red Green Blue) 色彩空间与三种其他色彩坐标系统 YIQ, HLS" +" (Hue Lightness Saturation) 和 HSV (Hue Saturation Value) 表示的颜色值之间的双向转换。 " +"所有这些色彩空间的坐标都使用浮点数值来表示。 在 YIQ 空间中,Y 坐标取值为 0 和 1 之间,而 I 和 Q 坐标均可以为正数或负数。 " +"在所有其他空间中,坐标取值均为 0 和 1 之间。" + +#: ../../library/colorsys.rst:23 +msgid "" +"More information about color spaces can be found at " +"https://poynton.ca/ColorFAQ.html and " +"https://www.cambridgeincolour.com/tutorials/color-spaces.htm." +msgstr "" +"有关色彩空间的更多信息可访问 https://poynton.ca/ColorFAQ.html 和 " +"https://www.cambridgeincolour.com/tutorials/color-spaces.htm。" + +#: ../../library/colorsys.rst:27 +msgid "The :mod:`colorsys` module defines the following functions:" +msgstr ":mod:`colorsys` 模块定义了如下函数:" + +#: ../../library/colorsys.rst:32 +msgid "Convert the color from RGB coordinates to YIQ coordinates." +msgstr "把颜色从RGB值转为YIQ值。" + +#: ../../library/colorsys.rst:37 +msgid "Convert the color from YIQ coordinates to RGB coordinates." +msgstr "把颜色从YIQ值转为RGB值。" + +#: ../../library/colorsys.rst:42 +msgid "Convert the color from RGB coordinates to HLS coordinates." +msgstr "把颜色从RGB值转为HLS值。" + +#: ../../library/colorsys.rst:47 +msgid "Convert the color from HLS coordinates to RGB coordinates." +msgstr "把颜色从HLS值转为RGB值。" + +#: ../../library/colorsys.rst:52 +msgid "Convert the color from RGB coordinates to HSV coordinates." +msgstr "把颜色从RGB值转为HSV值。" + +#: ../../library/colorsys.rst:57 +msgid "Convert the color from HSV coordinates to RGB coordinates." +msgstr "把颜色从HSV值转为RGB值。" + +#: ../../library/colorsys.rst:59 +msgid "Example::" +msgstr "示例::" diff --git a/library/compileall.po b/library/compileall.po new file mode 100644 index 000000000..2099ce5f1 --- /dev/null +++ b/library/compileall.po @@ -0,0 +1,441 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) 2001-2022, Python Software Foundation +# This file is distributed under the same license as the Python package. +# FIRST AUTHOR , YEAR. +# +# Translators: +# walkinrain , 2019 +# Zombie110year , 2019 +# Freesand Leo , 2022 +# +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: Python 3.9\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2022-11-04 14:34+0000\n" +"PO-Revision-Date: 2017-02-16 23:03+0000\n" +"Last-Translator: Freesand Leo , 2022\n" +"Language-Team: Chinese (China) (https://www.transifex.com/python-doc/teams/5390/zh_CN/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: zh_CN\n" +"Plural-Forms: nplurals=1; plural=0;\n" + +#: ../../library/compileall.rst:2 +msgid ":mod:`compileall` --- Byte-compile Python libraries" +msgstr ":mod:`compileall` --- 字节编译 Python 库" + +#: ../../library/compileall.rst:7 +msgid "**Source code:** :source:`Lib/compileall.py`" +msgstr "**源代码:** :source:`Lib/compileall.py`" + +#: ../../library/compileall.rst:11 +msgid "" +"This module provides some utility functions to support installing Python " +"libraries. These functions compile Python source files in a directory tree." +" This module can be used to create the cached byte-code files at library " +"installation time, which makes them available for use even by users who " +"don't have write permission to the library directories." +msgstr "" +"这个模块提供了一些工具函数来支持安装 Python 库。 这些函数可以编译一个目录树中的 Python 源文件。 " +"这个模块可被用来在安装库时创建缓存的字节码文件,这使得它们对于没有库目录写入权限的用户来说也是可用的。" + +#: ../../library/compileall.rst:19 +msgid "Command-line use" +msgstr "使用命令行" + +#: ../../library/compileall.rst:21 +msgid "" +"This module can work as a script (using :program:`python -m compileall`) to " +"compile Python sources." +msgstr "此模块可以作为脚本运行 (使用 :program:`python -m compileall`) 来编译 Python 源代码。" + +#: ../../library/compileall.rst:29 +msgid "" +"Positional arguments are files to compile or directories that contain source" +" files, traversed recursively. If no argument is given, behave as if the " +"command line was ``-l ``." +msgstr "" +"位置参数是要编译的文件或包含源文件的目录,目录将被递归地遍历。 如果没有给出参数,则其行为如同使用了命令行 ``-l ``。" + +#: ../../library/compileall.rst:35 +msgid "" +"Do not recurse into subdirectories, only compile source code files directly " +"contained in the named or implied directories." +msgstr "不要递归到子目录,只编译直接包含在指明或隐含的目录中的源代码文件。" + +#: ../../library/compileall.rst:40 +msgid "Force rebuild even if timestamps are up-to-date." +msgstr "强制重新构建即使时间戳是最新的。" + +#: ../../library/compileall.rst:44 +msgid "" +"Do not print the list of files compiled. If passed once, error messages will" +" still be printed. If passed twice (``-qq``), all output is suppressed." +msgstr "不要打印已编译文件的列表。 如果传入一次,则错误消息仍将被打印。 如果传入两次 (``-qq``),所有输出都会被屏蔽。" + +#: ../../library/compileall.rst:49 +msgid "" +"Directory prepended to the path to each file being compiled. This will " +"appear in compilation time tracebacks, and is also compiled in to the byte-" +"code file, where it will be used in tracebacks and other messages in cases " +"where the source file does not exist at the time the byte-code file is " +"executed." +msgstr "" +"要附加到每个被编译文件的路径之前的目录。 " +"这将出现在编译时回溯信息中,并且还会被编译到字节码文件中,届时它将在字节码文件被执行而源文件已不存在的情况下被用于回溯和其他消息。" + +#: ../../library/compileall.rst:58 +msgid "" +"Remove (``-s``) or append (``-p``) the given prefix of paths recorded in the" +" ``.pyc`` files. Cannot be combined with ``-d``." +msgstr "移除 (``-s``) 或添加 (``-p``) 记录在 ``.pyc`` 文件中的给定路径前缀。 不可与 ``-d`` 一同使用。" + +#: ../../library/compileall.rst:64 +msgid "" +"regex is used to search the full path to each file considered for " +"compilation, and if the regex produces a match, the file is skipped." +msgstr "regex 会被用于搜索每个要执行编译的文件的完整路径,而如果 regex 产生了一个匹配,则相应文件会被跳过。" + +#: ../../library/compileall.rst:69 +msgid "" +"Read the file ``list`` and add each line that it contains to the list of " +"files and directories to compile. If ``list`` is ``-``, read lines from " +"``stdin``." +msgstr "" +"读取文件 ``list`` 并将其包含的每一行添加到要编译的文件和目录列表中。 如果 ``list`` 为 ``-``,则从 ``stdin`` " +"读取行。" + +#: ../../library/compileall.rst:75 +msgid "" +"Write the byte-code files to their legacy locations and names, which may " +"overwrite byte-code files created by another version of Python. The default" +" is to write files to their :pep:`3147` locations and names, which allows " +"byte-code files from multiple versions of Python to coexist." +msgstr "" +"将字节码写入到它们的传统位置和名称,这可能会覆盖由另一版本的 Python 所创建的字节码文件。 默认是将文件写入到它们的 :pep:`3147` " +"位置和名称,这允许来自多个版本的 Python 字节码文件共存。" + +#: ../../library/compileall.rst:82 +msgid "" +"Control the maximum recursion level for subdirectories. If this is given, " +"then ``-l`` option will not be taken into account. :program:`python -m " +"compileall -r 0` is equivalent to :program:`python -m compileall" +" -l`." +msgstr "" +"控制子目录的最大递归层级。 如果给出此选项,则 ``-l`` 选项将不会被考虑。 :program:`python -m compileall " +" -r 0` 等价于 :program:`python -m compileall -l`。" + +#: ../../library/compileall.rst:89 +msgid "" +"Use *N* workers to compile the files within the given directory. If ``0`` is" +" used, then the result of :func:`os.cpu_count()` will be used." +msgstr "使用 *N* 个工作者来编译给定目录中的文件。 如果使用 ``0``,则将使用 :func:`os.cpu_count()` 的结果。" + +#: ../../library/compileall.rst:95 +msgid "" +"Control how the generated byte-code files are invalidated at runtime. The " +"``timestamp`` value, means that ``.pyc`` files with the source timestamp and" +" size embedded will be generated. The ``checked-hash`` and ``unchecked-" +"hash`` values cause hash-based pycs to be generated. Hash-based pycs embed a" +" hash of the source file contents rather than a timestamp. See :ref:`pyc-" +"invalidation` for more information on how Python validates bytecode cache " +"files at runtime. The default is ``timestamp`` if the " +":envvar:`SOURCE_DATE_EPOCH` environment variable is not set, and ``checked-" +"hash`` if the ``SOURCE_DATE_EPOCH`` environment variable is set." +msgstr "" +"控制生成的字节码文件在运行时的失效规则。 值为``timestamp``,意味着将生成嵌入了源时间戳和大小的 ``.pyc`` 文件。 " +"``checked-hash`` 和 ``unchecked-hash`` 等值将导致生成基于哈希的 pyc。 基于哈希的 pyc " +"嵌入了源文件内容的哈希值而不是时间戳。 请参阅 :ref:`pyc-invalidation` 了解有关 Python " +"在运行时如何验证字节码缓存文件的更多信息。 如果未设置 :envvar:`SOURCE_DATE_EPOCH` 环境变量则默认值为 " +"``timestamp``,而如果设置了 ``SOURCE_DATE_EPOCH`` 则为 ``checked-hash``。" + +#: ../../library/compileall.rst:108 +msgid "" +"Compile with the given optimization level. May be used multiple times to " +"compile for multiple levels at a time (for example, ``compileall -o 1 -o " +"2``)." +msgstr "使用给定的优化级别进行编译。 可以多次使用来一次性地针对多个级别进行编译 (例如,``compileall -o 1 -o 2``)。" + +#: ../../library/compileall.rst:114 +msgid "Ignore symlinks pointing outside the given directory." +msgstr "忽略指向给定目录之外的符号链接。" + +#: ../../library/compileall.rst:118 +msgid "" +"If two ``.pyc`` files with different optimization level have the same " +"content, use hard links to consolidate duplicate files." +msgstr "如果两个不同优化级别的 ``.pyc`` 文件具有相同的内容,则使用硬链接来合并重复的文件。" + +#: ../../library/compileall.rst:121 +msgid "Added the ``-i``, ``-b`` and ``-h`` options." +msgstr "增加了 ``-i``, ``-b`` 和 ``-h`` 选项。" + +#: ../../library/compileall.rst:124 +msgid "" +"Added the ``-j``, ``-r``, and ``-qq`` options. ``-q`` option was changed " +"to a multilevel value. ``-b`` will always produce a byte-code file ending " +"in ``.pyc``, never ``.pyo``." +msgstr "" +"增加了 ``-j``, ``-r`` 和 ``-qq`` 选项。 ``-q`` 选项改为多级别值。 ``-b`` 将总是产生以 ``.pyc`` " +"为后缀的字节码文件,而不是 ``.pyo``。" + +#: ../../library/compileall.rst:129 +msgid "Added the ``--invalidation-mode`` option." +msgstr "增加了 ``--invalidation-mode`` 选项。" + +#: ../../library/compileall.rst:132 +msgid "" +"Added the ``-s``, ``-p``, ``-e`` and ``--hardlink-dupes`` options. Raised " +"the default recursion limit from 10 to :py:func:`sys.getrecursionlimit()`. " +"Added the possibility to specify the ``-o`` option multiple times." +msgstr "" +"增加了 ``-s``, ``-p``, ``-e`` 和 ``--hardlink-dupes`` 选项。 将默认的递归限制从 10 提高到 " +":py:func:`sys.getrecursionlimit()`。 增加允许多次指定 ``-o`` 选项。" + +#: ../../library/compileall.rst:139 +msgid "" +"There is no command-line option to control the optimization level used by " +"the :func:`compile` function, because the Python interpreter itself already " +"provides the option: :program:`python -O -m compileall`." +msgstr "" +"没有可以控制 :func:`compile` 函数所使用的优化级别的命令行选项,因为 Python 解释器本身已经提供了该选项: " +":program:`python -O -m compileall`。" + +#: ../../library/compileall.rst:143 +msgid "" +"Similarly, the :func:`compile` function respects the " +":attr:`sys.pycache_prefix` setting. The generated bytecode cache will only " +"be useful if :func:`compile` is run with the same :attr:`sys.pycache_prefix`" +" (if any) that will be used at runtime." +msgstr "" +"类似地,:func:`compile` 函数会遵循 :attr:`sys.pycache_prefix` 设置。 所生成的字节码缓存将仅当 " +":func:`compile` 附带与将在运行时使用的相同 :attr:`sys.pycache_prefix` 时可用(如果存在该设置)。" + +#: ../../library/compileall.rst:149 +msgid "Public functions" +msgstr "公有函数" + +#: ../../library/compileall.rst:153 +msgid "" +"Recursively descend the directory tree named by *dir*, compiling all " +":file:`.py` files along the way. Return a true value if all the files " +"compiled successfully, and a false value otherwise." +msgstr "递归地深入名为 *dir* 的目录树,在途中编译所有 :file:`.py` 文件。 如果所有文件都编译成功则返回真值,否则返回假值。" + +#: ../../library/compileall.rst:157 +msgid "" +"The *maxlevels* parameter is used to limit the depth of the recursion; it " +"defaults to ``sys.getrecursionlimit()``." +msgstr "*maxlevels* 形参被用来限制递归深度;它默认为 ``sys.getrecursionlimit()``。" + +#: ../../library/compileall.rst:160 +msgid "" +"If *ddir* is given, it is prepended to the path to each file being compiled " +"for use in compilation time tracebacks, and is also compiled in to the byte-" +"code file, where it will be used in tracebacks and other messages in cases " +"where the source file does not exist at the time the byte-code file is " +"executed." +msgstr "" +"如果给出了 " +"*ddir*,它会被附加到每个被编译的文件的路径之前以便在编译时回溯中使用,同时还会被编译到字节码文件中,届时它将在字节码文件被执行而源文件已不存在的情况下被用于回溯和其他消息中。" + +#: ../../library/compileall.rst:166 +msgid "" +"If *force* is true, modules are re-compiled even if the timestamps are up to" +" date." +msgstr "如果 *force* 为真值,则即使时间戳为最新模块也会被重新编译。" + +#: ../../library/compileall.rst:169 +msgid "" +"If *rx* is given, its ``search`` method is called on the complete path to " +"each file considered for compilation, and if it returns a true value, the " +"file is skipped. This can be used to exclude files matching a regular " +"expression, given as a :ref:`re.Pattern ` object." +msgstr "" +"如果给出了 *rx*,则它的 ``search`` 方法会在准备编译的每个文件的完整路径上被调用,并且如果它返回真值,则该文件会被跳过。 " +"这可被用来排除与一个正则表达式相匹配的文件,正则表达式将以 :ref:`re.Pattern ` 对象的形式给出。" + +#: ../../library/compileall.rst:174 ../../library/compileall.rst:251 +msgid "" +"If *quiet* is ``False`` or ``0`` (the default), the filenames and other " +"information are printed to standard out. Set to ``1``, only errors are " +"printed. Set to ``2``, all output is suppressed." +msgstr "" +"如果 *quiet* 为 ``False`` 或 ``0`` (默认值),则文件名和其他信息将被打印到标准输出。 如果设为 ``1``,则只打印错误。 " +"如果设为 ``2``,则屏蔽所有输出。" + +#: ../../library/compileall.rst:178 ../../library/compileall.rst:255 +msgid "" +"If *legacy* is true, byte-code files are written to their legacy locations " +"and names, which may overwrite byte-code files created by another version of" +" Python. The default is to write files to their :pep:`3147` locations and " +"names, which allows byte-code files from multiple versions of Python to " +"coexist." +msgstr "" +"如果 *legacy* 为真值,则将字节码文件写入到它们的传统位置和名称,这可能会覆盖由另一版本的 Python 所创建的字节码文件。 " +"默认是将文件写入到它们的 :pep:`3147` 位置和名称,这允许来自多个版本的 Python 字节码文件共存。" + +#: ../../library/compileall.rst:184 ../../library/compileall.rst:261 +msgid "" +"*optimize* specifies the optimization level for the compiler. It is passed " +"to the built-in :func:`compile` function. Accepts also a sequence of " +"optimization levels which lead to multiple compilations of one :file:`.py` " +"file in one call." +msgstr "" +"*optimize* 指明编译器的优化级别。 它会被传给内置 :func:`compile` 函数。 还接受一个优化层别列表这将在单次调用中多次编译一个" +" :file:`.py` 文件。" + +#: ../../library/compileall.rst:188 +msgid "" +"The argument *workers* specifies how many workers are used to compile files " +"in parallel. The default is to not use multiple workers. If the platform " +"can't use multiple workers and *workers* argument is given, then sequential " +"compilation will be used as a fallback. If *workers* is 0, the number of " +"cores in the system is used. If *workers* is lower than ``0``, a " +":exc:`ValueError` will be raised." +msgstr "" +"参数 *workers* 指明要使用多少个工作进程来并行编译文件。 默认设置不使用多个工作进程。 如果平台不能使用多个工作进程而又给出了 " +"*workers* 参数,则将回退为使用顺序编译。 如果 *workers* 为 0,则会使用系统的核心数量。 如果 *workers* 小于 " +"``0``,则会引发 :exc:`ValueError`。" + +#: ../../library/compileall.rst:195 ../../library/compileall.rst:265 +msgid "" +"*invalidation_mode* should be a member of the " +":class:`py_compile.PycInvalidationMode` enum and controls how the generated " +"pycs are invalidated at runtime." +msgstr "" +"*invalidation_mode* 应为 :class:`py_compile.PycInvalidationMode` " +"枚举的成员之一并将控制所生成的 pyc 在运行时以何种方式验证是否失效。" + +#: ../../library/compileall.rst:199 ../../library/compileall.rst:269 +msgid "" +"The *stripdir*, *prependdir* and *limit_sl_dest* arguments correspond to the" +" ``-s``, ``-p`` and ``-e`` options described above. They may be specified as" +" ``str``, ``bytes`` or :py:class:`os.PathLike`." +msgstr "" +"*stripdir*, *prependdir* 和 *limit_sl_dest* 参数分别对应上述的 ``-s``, ``-p`` 和 ``-e``" +" 选项。 它们可以指定为 ``str``, ``bytes`` 或 :py:class:`os.PathLike`。" + +#: ../../library/compileall.rst:203 ../../library/compileall.rst:273 +msgid "" +"If *hardlink_dupes* is true and two ``.pyc`` files with different " +"optimization level have the same content, use hard links to consolidate " +"duplicate files." +msgstr "" +"如果 *hardlink_dupes* 为真值且两个使用不同优化级别的 ``.pyc`` 文件具有相同的内容,则会使用硬链接来合并重复的文件。" + +#: ../../library/compileall.rst:206 ../../library/compileall.rst:304 +msgid "Added the *legacy* and *optimize* parameter." +msgstr "增加了 *legacy* 和 *optimize* 形参。" + +#: ../../library/compileall.rst:209 +msgid "Added the *workers* parameter." +msgstr "增加了 *workers* 形参。" + +#: ../../library/compileall.rst:212 ../../library/compileall.rst:278 +#: ../../library/compileall.rst:307 +msgid "*quiet* parameter was changed to a multilevel value." +msgstr "*quiet* 形参已改为多级别值。" + +#: ../../library/compileall.rst:215 ../../library/compileall.rst:281 +#: ../../library/compileall.rst:310 +msgid "" +"The *legacy* parameter only writes out ``.pyc`` files, not ``.pyo`` files no" +" matter what the value of *optimize* is." +msgstr "*legacy* 形参将只写入 ``.pyc`` 文件而非 ``.pyo`` 文件,无论 *optimize* 的值是什么。" + +#: ../../library/compileall.rst:219 +msgid "Accepts a :term:`path-like object`." +msgstr "接受一个 :term:`类路径对象 `。" + +#: ../../library/compileall.rst:222 ../../library/compileall.rst:285 +#: ../../library/compileall.rst:314 +msgid "The *invalidation_mode* parameter was added." +msgstr "增加了 *invalidation_mode* 形参。" + +#: ../../library/compileall.rst:225 ../../library/compileall.rst:288 +#: ../../library/compileall.rst:317 +msgid "The *invalidation_mode* parameter's default value is updated to None." +msgstr "*invalidation_mode* 形参的默认值更新为 None。" + +#: ../../library/compileall.rst:228 +msgid "Setting *workers* to 0 now chooses the optimal number of cores." +msgstr "将 *workers* 设为 0 现在将会选择最优核心数量。" + +#: ../../library/compileall.rst:231 +msgid "" +"Added *stripdir*, *prependdir*, *limit_sl_dest* and *hardlink_dupes* " +"arguments. Default value of *maxlevels* was changed from ``10`` to " +"``sys.getrecursionlimit()``" +msgstr "" +"增加了 *stripdir*, *prependdir*, *limit_sl_dest* 和 *hardlink_dupes* 参数。 " +"*maxlevels* 的默认值从 ``10`` 改为 ``sys.getrecursionlimit()``" + +#: ../../library/compileall.rst:237 +msgid "" +"Compile the file with path *fullname*. Return a true value if the file " +"compiled successfully, and a false value otherwise." +msgstr "编译路径为 *fullname* 的文件。 如果文件编译成功则返回真值,否则返回假值。" + +#: ../../library/compileall.rst:240 +msgid "" +"If *ddir* is given, it is prepended to the path to the file being compiled " +"for use in compilation time tracebacks, and is also compiled in to the byte-" +"code file, where it will be used in tracebacks and other messages in cases " +"where the source file does not exist at the time the byte-code file is " +"executed." +msgstr "" +"如果给出了 " +"*ddir*,它会被附加到被编译的文件的路径之前以便在编译时回溯中使用,同时还会被编译到字节码文件中,届时它将在字节码文件被执行而源文件已不存在的情况下被用于回溯和其他消息中。" + +#: ../../library/compileall.rst:246 +msgid "" +"If *rx* is given, its ``search`` method is passed the full path name to the " +"file being compiled, and if it returns a true value, the file is not " +"compiled and ``True`` is returned. This can be used to exclude files " +"matching a regular expression, given as a :ref:`re.Pattern ` " +"object." +msgstr "" +"如果给出了 *rx*,则会向它的 ``search`` 方法传入准备编译的文件的完整路径,并且如果它返回真值,则不编译该文件并返回 ``True``。 " +"这可被用来排除与一个正则表达式相匹配的文件,正则表达式将以 :ref:`re.Pattern ` 对象的形式给出。" + +#: ../../library/compileall.rst:291 +msgid "" +"Added *stripdir*, *prependdir*, *limit_sl_dest* and *hardlink_dupes* " +"arguments." +msgstr "增加了 *stripdir*, *prependdir*, *limit_sl_dest* 和 *hardlink_dupes* 参数。" + +#: ../../library/compileall.rst:296 +msgid "" +"Byte-compile all the :file:`.py` files found along ``sys.path``. Return a " +"true value if all the files compiled successfully, and a false value " +"otherwise." +msgstr "将在 ``sys.path`` 中找到的所有 :file:`.py` 文件编译为字节码。 如果所有文件编译成功则返回真值,否则返回假值。" + +#: ../../library/compileall.rst:299 +msgid "" +"If *skip_curdir* is true (the default), the current directory is not " +"included in the search. All other parameters are passed to the " +":func:`compile_dir` function. Note that unlike the other compile functions," +" ``maxlevels`` defaults to ``0``." +msgstr "" +"如果 *skip_curdir* 为真值(默认),则当前目录不会被包括在搜索中。 所有其他形参将被传递给 :func:`compile_dir` 函数。" +" 请注意不同于其他编译函数,``maxlevels`` 默认为 ``0``。" + +#: ../../library/compileall.rst:320 +msgid "" +"To force a recompile of all the :file:`.py` files in the :file:`Lib/` " +"subdirectory and all its subdirectories::" +msgstr "强制重新编译 :file:`Lib/` 子目录及其所有子目录下的全部 :file:`.py` 文件::" + +#: ../../library/compileall.rst:337 +msgid "Module :mod:`py_compile`" +msgstr "模块 :mod:`py_compile`" + +#: ../../library/compileall.rst:338 +msgid "Byte-compile a single source file." +msgstr "将单个源文件编译为字节码。" diff --git a/library/concurrency.po b/library/concurrency.po new file mode 100644 index 000000000..de7037169 --- /dev/null +++ b/library/concurrency.po @@ -0,0 +1,41 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) 2001-2022, Python Software Foundation +# This file is distributed under the same license as the Python package. +# FIRST AUTHOR , YEAR. +# +# Translators: +# Alpha Du , 2019 +# +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: Python 3.9\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2022-11-04 14:34+0000\n" +"PO-Revision-Date: 2017-02-16 23:03+0000\n" +"Last-Translator: Alpha Du , 2019\n" +"Language-Team: Chinese (China) (https://www.transifex.com/python-doc/teams/5390/zh_CN/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: zh_CN\n" +"Plural-Forms: nplurals=1; plural=0;\n" + +#: ../../library/concurrency.rst:5 +msgid "Concurrent Execution" +msgstr "并发执行" + +#: ../../library/concurrency.rst:7 +msgid "" +"The modules described in this chapter provide support for concurrent " +"execution of code. The appropriate choice of tool will depend on the task to" +" be executed (CPU bound vs IO bound) and preferred style of development " +"(event driven cooperative multitasking vs preemptive multitasking). Here's " +"an overview:" +msgstr "" +"本章中描述的模块支持并发执行代码。 " +"适当的工具选择取决于要执行的任务(CPU密集型或IO密集型)和偏好的开发风格(事件驱动的协作式多任务或抢占式多任务处理)。 这是一个概述:" + +#: ../../library/concurrency.rst:27 +msgid "The following are support modules for some of the above services:" +msgstr "以下是上述某些服务的支持模块:" diff --git a/library/concurrent.futures.po b/library/concurrent.futures.po new file mode 100644 index 000000000..bb99db81b --- /dev/null +++ b/library/concurrent.futures.po @@ -0,0 +1,673 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) 2001-2024, Python Software Foundation +# This file is distributed under the same license as the Python package. +# FIRST AUTHOR , YEAR. +# +# Translators: +# walkinrain , 2019 +# MuSheng Chen , 2019 +# Sean Chao , 2020 +# Freesand Leo , 2023 +# Rafael Fontenelle , 2024 +# +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: Python 3.9\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2024-04-19 21:47+0000\n" +"PO-Revision-Date: 2017-02-16 23:03+0000\n" +"Last-Translator: Rafael Fontenelle , 2024\n" +"Language-Team: Chinese (China) (https://app.transifex.com/python-doc/teams/5390/zh_CN/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: zh_CN\n" +"Plural-Forms: nplurals=1; plural=0;\n" + +#: ../../library/concurrent.futures.rst:2 +msgid ":mod:`concurrent.futures` --- Launching parallel tasks" +msgstr ":mod:`concurrent.futures` --- 启动并行任务" + +#: ../../library/concurrent.futures.rst:9 +msgid "" +"**Source code:** :source:`Lib/concurrent/futures/thread.py` and " +":source:`Lib/concurrent/futures/process.py`" +msgstr "" +"**源码:** :source:`Lib/concurrent/futures/thread.py` 和 " +":source:`Lib/concurrent/futures/process.py`" + +#: ../../library/concurrent.futures.rst:14 +msgid "" +"The :mod:`concurrent.futures` module provides a high-level interface for " +"asynchronously executing callables." +msgstr ":mod:`concurrent.futures` 模块提供异步执行可调用对象高层接口。" + +#: ../../library/concurrent.futures.rst:17 +msgid "" +"The asynchronous execution can be performed with threads, using " +":class:`ThreadPoolExecutor`, or separate processes, using " +":class:`ProcessPoolExecutor`. Both implement the same interface, which is " +"defined by the abstract :class:`Executor` class." +msgstr "" +"异步执行可以由 :class:`ThreadPoolExecutor` 使用线程或由 :class:`ProcessPoolExecutor` " +"使用单独的进程来实现。 两者都是实现抽象类 :class:`Executor` 定义的接口。" + +#: ../../library/concurrent.futures.rst:24 +msgid "Executor Objects" +msgstr "Executor 对象" + +#: ../../library/concurrent.futures.rst:28 +msgid "" +"An abstract class that provides methods to execute calls asynchronously. It" +" should not be used directly, but through its concrete subclasses." +msgstr "抽象类提供异步执行调用方法。要通过它的子类调用,而不是直接调用。" + +#: ../../library/concurrent.futures.rst:33 +msgid "" +"Schedules the callable, *fn*, to be executed as ``fn(*args, **kwargs)`` and " +"returns a :class:`Future` object representing the execution of the callable." +" ::" +msgstr "" +"调度可调用对象 *fn*,以 ``fn(*args, **kwargs)`` 方式执行并返回一个代表该可调用对象的执行的 :class:`Future`" +" 对象。 ::" + +#: ../../library/concurrent.futures.rst:43 +msgid "Similar to :func:`map(func, *iterables) ` except:" +msgstr "类似于 :func:`map(func, *iterables) ` 函数,除了以下两点:" + +#: ../../library/concurrent.futures.rst:45 +msgid "the *iterables* are collected immediately rather than lazily;" +msgstr "*iterables* 是立即执行而不是延迟执行的;" + +#: ../../library/concurrent.futures.rst:47 +msgid "" +"*func* is executed asynchronously and several calls to *func* may be made " +"concurrently." +msgstr "*func* 是异步执行的,对 *func* 的多个调用可以并发执行。" + +#: ../../library/concurrent.futures.rst:50 +msgid "" +"The returned iterator raises a :exc:`concurrent.futures.TimeoutError` if " +":meth:`~iterator.__next__` is called and the result isn't available after " +"*timeout* seconds from the original call to :meth:`Executor.map`. *timeout* " +"can be an int or a float. If *timeout* is not specified or ``None``, there " +"is no limit to the wait time." +msgstr "" +"如果从原始调用到 :meth:`Executor.map` 经过 *timeout* 秒后, :meth:`~iterator.__next__` " +"已被调用且返回的结果还不可用,那么已返回的迭代器将触发 :exc:`concurrent.futures.TimeoutError` 。 " +"*timeout* 可以是整数或浮点数。如果 *timeout* 没有指定或为 ``None`` ,则没有超时限制。" + +#: ../../library/concurrent.futures.rst:56 +msgid "" +"If a *func* call raises an exception, then that exception will be raised " +"when its value is retrieved from the iterator." +msgstr "如果 *func* 调用引发一个异常,当从迭代器中取回它的值时这个异常将被引发。" + +#: ../../library/concurrent.futures.rst:59 +msgid "" +"When using :class:`ProcessPoolExecutor`, this method chops *iterables* into " +"a number of chunks which it submits to the pool as separate tasks. The " +"(approximate) size of these chunks can be specified by setting *chunksize* " +"to a positive integer. For very long iterables, using a large value for " +"*chunksize* can significantly improve performance compared to the default " +"size of 1. With :class:`ThreadPoolExecutor`, *chunksize* has no effect." +msgstr "" +"使用 :class:`ProcessPoolExecutor` 时,这个方法会将 *iterables* " +"分割任务块并作为独立的任务并提交到执行池中。这些块的大概数量可以由 *chunksize* 指定正整数设置。 对很长的迭代器来说,使用大的 " +"*chunksize* 值比默认值 1 能显著地提高性能。 *chunksize* 对 :class:`ThreadPoolExecutor` " +"没有效果。" + +#: ../../library/concurrent.futures.rst:67 +msgid "Added the *chunksize* argument." +msgstr "加入 *chunksize* 参数。" + +#: ../../library/concurrent.futures.rst:72 +msgid "" +"Signal the executor that it should free any resources that it is using when " +"the currently pending futures are done executing. Calls to " +":meth:`Executor.submit` and :meth:`Executor.map` made after shutdown will " +"raise :exc:`RuntimeError`." +msgstr "" +"当待执行的 future 对象完成执行后向执行者发送信号,它就会释放正在使用的任何资源。 在关闭后调用 :meth:`Executor.submit` " +"和 :meth:`Executor.map` 将会引发 :exc:`RuntimeError`。" + +#: ../../library/concurrent.futures.rst:77 +msgid "" +"If *wait* is ``True`` then this method will not return until all the pending" +" futures are done executing and the resources associated with the executor " +"have been freed. If *wait* is ``False`` then this method will return " +"immediately and the resources associated with the executor will be freed " +"when all pending futures are done executing. Regardless of the value of " +"*wait*, the entire Python program will not exit until all pending futures " +"are done executing." +msgstr "" +"如果 *wait* 为 ``True`` 则此方法只有在所有待执行的 future 对象完成执行且释放已分配的资源后才会返回。 如果 *wait* 为 " +"``False``,方法立即返回,所有待执行的 future 对象完成执行后会释放已分配的资源。 不管 *wait* 的值是什么,整个 Python " +"程序将等到所有待执行的 future 对象完成执行后才退出。" + +#: ../../library/concurrent.futures.rst:85 +msgid "" +"If *cancel_futures* is ``True``, this method will cancel all pending futures" +" that the executor has not started running. Any futures that are completed " +"or running won't be cancelled, regardless of the value of *cancel_futures*." +msgstr "" +"如果 *cancel_futures* 为 ``True``,此方法将取消所有执行器还未开始运行的挂起的 Future。无论 " +"*cancel_futures* 的值是什么,任何已完成或正在运行的 Future 都不会被取消。" + +#: ../../library/concurrent.futures.rst:90 +msgid "" +"If both *cancel_futures* and *wait* are ``True``, all futures that the " +"executor has started running will be completed prior to this method " +"returning. The remaining futures are cancelled." +msgstr "" +"如果 *cancel_futures* 和 *wait* 均为 ``True``,则执行器已开始运行的所有 Future 将在此方法返回之前完成。 " +"其余的 Future 会被取消。" + +#: ../../library/concurrent.futures.rst:94 +msgid "" +"You can avoid having to call this method explicitly if you use the " +":keyword:`with` statement, which will shutdown the :class:`Executor` " +"(waiting as if :meth:`Executor.shutdown` were called with *wait* set to " +"``True``)::" +msgstr "" +"如果使用 :keyword:`with` 语句,你就可以避免显式调用这个方法,它将会停止 :class:`Executor` (就好像 " +":meth:`Executor.shutdown` 调用时 *wait* 设为 ``True`` 一样等待)::" + +#: ../../library/concurrent.futures.rst:106 +msgid "Added *cancel_futures*." +msgstr "增加了 *cancel_futures*。" + +#: ../../library/concurrent.futures.rst:111 +msgid "ThreadPoolExecutor" +msgstr "ThreadPoolExecutor" + +#: ../../library/concurrent.futures.rst:113 +msgid "" +":class:`ThreadPoolExecutor` is an :class:`Executor` subclass that uses a " +"pool of threads to execute calls asynchronously." +msgstr ":class:`ThreadPoolExecutor` 是 :class:`Executor` 的子类,它使用线程池来异步执行调用。" + +#: ../../library/concurrent.futures.rst:116 +msgid "" +"Deadlocks can occur when the callable associated with a :class:`Future` " +"waits on the results of another :class:`Future`. For example::" +msgstr "" +"当可调用对象已关联了一个 :class:`Future` 然后在等待另一个 :class:`Future` 的结果时就会导致死锁情况。例如::" + +#: ../../library/concurrent.futures.rst:135 +msgid "And::" +msgstr "与::" + +#: ../../library/concurrent.futures.rst:149 +msgid "" +"An :class:`Executor` subclass that uses a pool of at most *max_workers* " +"threads to execute calls asynchronously." +msgstr ":class:`Executor` 子类使用最多 *max_workers* 个线程的线程池来异步执行调用。" + +#: ../../library/concurrent.futures.rst:152 +msgid "" +"*initializer* is an optional callable that is called at the start of each " +"worker thread; *initargs* is a tuple of arguments passed to the initializer." +" Should *initializer* raise an exception, all currently pending jobs will " +"raise a :exc:`~concurrent.futures.thread.BrokenThreadPool`, as well as any " +"attempt to submit more jobs to the pool." +msgstr "" +"*initializer* 是在每个工作者线程开始处调用的一个可选可调用对象。 *initargs* " +"是传递给初始化器的元组参数。任何向池提交更多工作的尝试, *initializer* 都将引发一个异常,当前所有等待的工作都会引发一个 " +":exc:`~concurrent.futures.thread.BrokenThreadPool`。" + +#: ../../library/concurrent.futures.rst:158 +msgid "" +"If *max_workers* is ``None`` or not given, it will default to the number of " +"processors on the machine, multiplied by ``5``, assuming that " +":class:`ThreadPoolExecutor` is often used to overlap I/O instead of CPU work" +" and the number of workers should be higher than the number of workers for " +":class:`ProcessPoolExecutor`." +msgstr "" +"如果 *max_workers* 为 ``None`` 或没有指定,将默认为机器处理器的个数,假如 " +":class:`ThreadPoolExecutor` 侧重于I/O操作而不是CPU运算,那么可以乘以 ``5`` ,同时工作线程的数量可以比 " +":class:`ProcessPoolExecutor` 的数量高。" + +#: ../../library/concurrent.futures.rst:166 +msgid "" +"The *thread_name_prefix* argument was added to allow users to control the " +":class:`threading.Thread` names for worker threads created by the pool for " +"easier debugging." +msgstr "" +"添加 *thread_name_prefix* 参数允许用户控制由线程池创建的 :class:`threading.Thread` " +"工作线程名称以方便调试。" + +#: ../../library/concurrent.futures.rst:171 +#: ../../library/concurrent.futures.rst:265 +msgid "Added the *initializer* and *initargs* arguments." +msgstr "加入 *initializer* 和*initargs* 参数。" + +#: ../../library/concurrent.futures.rst:174 +msgid "" +"Default value of *max_workers* is changed to ``min(32, os.cpu_count() + " +"4)``. This default value preserves at least 5 workers for I/O bound tasks. " +"It utilizes at most 32 CPU cores for CPU bound tasks which release the GIL. " +"And it avoids using very large resources implicitly on many-core machines." +msgstr "" +"*max_workers* 的默认值已改为 ``min(32, os.cpu_count() + 4)``。 这个默认值会保留至少 5 个工作线程用于 " +"I/O 密集型任务。 对于那些释放了 GIL 的 CPU 密集型任务,它最多会使用 32 个 CPU " +"核心。这样能够避免在多核机器上不知不觉地使用大量资源。" + +#: ../../library/concurrent.futures.rst:180 +msgid "" +"ThreadPoolExecutor now reuses idle worker threads before starting " +"*max_workers* worker threads too." +msgstr "现在 ThreadPoolExecutor 在启动 *max_workers* 个工作线程之前也会重用空闲的工作线程。" + +#: ../../library/concurrent.futures.rst:187 +msgid "ThreadPoolExecutor Example" +msgstr "ThreadPoolExecutor 例子" + +#: ../../library/concurrent.futures.rst:219 +msgid "ProcessPoolExecutor" +msgstr "ProcessPoolExecutor" + +#: ../../library/concurrent.futures.rst:221 +msgid "" +"The :class:`ProcessPoolExecutor` class is an :class:`Executor` subclass that" +" uses a pool of processes to execute calls asynchronously. " +":class:`ProcessPoolExecutor` uses the :mod:`multiprocessing` module, which " +"allows it to side-step the :term:`Global Interpreter Lock ` but also means that only picklable objects can be " +"executed and returned." +msgstr "" +":class:`ProcessPoolExecutor` 类是 :class:`Executor` 的子类,它使用进程池来异步地执行调用。 " +":class:`ProcessPoolExecutor` 会使用 :mod:`multiprocessing` 模块,这允许它绕过 " +":term:`全局解释器锁 ` 但也意味着只可以处理和返回可封存的对象。" + +#: ../../library/concurrent.futures.rst:228 +msgid "" +"The ``__main__`` module must be importable by worker subprocesses. This " +"means that :class:`ProcessPoolExecutor` will not work in the interactive " +"interpreter." +msgstr "" +"``__main__`` 模块必须可以被工作者子进程导入。这意味着 :class:`ProcessPoolExecutor` " +"不可以工作在交互式解释器中。" + +#: ../../library/concurrent.futures.rst:231 +msgid "" +"Calling :class:`Executor` or :class:`Future` methods from a callable " +"submitted to a :class:`ProcessPoolExecutor` will result in deadlock." +msgstr "" +"从可调用对象中调用 :class:`Executor` 或 :class:`Future` 的方法提交给 " +":class:`ProcessPoolExecutor` 会导致死锁。" + +#: ../../library/concurrent.futures.rst:236 +msgid "" +"An :class:`Executor` subclass that executes calls asynchronously using a " +"pool of at most *max_workers* processes. If *max_workers* is ``None`` or " +"not given, it will default to the number of processors on the machine. If " +"*max_workers* is less than or equal to ``0``, then a :exc:`ValueError` will " +"be raised. On Windows, *max_workers* must be less than or equal to ``61``. " +"If it is not then :exc:`ValueError` will be raised. If *max_workers* is " +"``None``, then the default chosen will be at most ``61``, even if more " +"processors are available. *mp_context* can be a multiprocessing context or " +"None. It will be used to launch the workers. If *mp_context* is ``None`` or " +"not given, the default multiprocessing context is used." +msgstr "" +"一个 :class:`Executor` 子类使用最多由 *max_workers* 个进程组成的进程池异步执行调用。 如果 " +"*max_workers* 是 ``None`` 或未给出,则默认为机器上的处理器数量。如果 *max_workers* 小于或等于 ``0`` " +",则会引发 :exc:`ValueError` 。在 Windows 系统中,*max_workers* 必须小于或等于 ``61`` ,否则会引发 " +":exc:`ValueError` 。如果 *max_workers* 为 ``None`` ,则默认情况下最大为 ``61`` " +",即使有更多的处理器可用。*mp_context* 可以是多进程上下文,也可以是 None。它将用于启动工作者。如果 *mp_context* " +"为``None`` 或未给出,则使用默认的多进程上下文。" + +#: ../../library/concurrent.futures.rst:249 +msgid "" +"*initializer* is an optional callable that is called at the start of each " +"worker process; *initargs* is a tuple of arguments passed to the " +"initializer. Should *initializer* raise an exception, all currently pending" +" jobs will raise a :exc:`~concurrent.futures.process.BrokenProcessPool`, as " +"well as any attempt to submit more jobs to the pool." +msgstr "" +"*initializer* 是一个可选的可调用对象,它会在每个工作进程启动时被调用;*initargs* 是传给 initializer 的参数元组。 " +"如果 *initializer* 引发了异常,则所有当前在等待的任务以及任何向进程池提交更多任务的尝试都将引发 " +":exc:`~concurrent.futures.process.BrokenProcessPool`。" + +#: ../../library/concurrent.futures.rst:255 +msgid "" +"When one of the worker processes terminates abruptly, a " +":exc:`BrokenProcessPool` error is now raised. Previously, behaviour was " +"undefined but operations on the executor or its futures would often freeze " +"or deadlock." +msgstr "" +"如果其中一个工作进程被突然终止,:exc:`BrokenProcessPool` 就会马上触发。 可预计的行为没有定义,但执行器上的操作或它的 " +"future 对象会被冻结或死锁。" + +#: ../../library/concurrent.futures.rst:261 +msgid "" +"The *mp_context* argument was added to allow users to control the " +"start_method for worker processes created by the pool." +msgstr "添加 *mp_context* 参数允许用户控制由进程池创建给工作者进程的开始方法 。" + +#: ../../library/concurrent.futures.rst:271 +msgid "ProcessPoolExecutor Example" +msgstr "ProcessPoolExecutor 例子" + +#: ../../library/concurrent.futures.rst:309 +msgid "Future Objects" +msgstr "Future 对象" + +#: ../../library/concurrent.futures.rst:311 +msgid "" +"The :class:`Future` class encapsulates the asynchronous execution of a " +"callable. :class:`Future` instances are created by :meth:`Executor.submit`." +msgstr "" +":class:`Future` 类将可调用对象封装为异步执行。:class:`Future` 实例由 :meth:`Executor.submit` " +"创建。" + +#: ../../library/concurrent.futures.rst:316 +msgid "" +"Encapsulates the asynchronous execution of a callable. :class:`Future` " +"instances are created by :meth:`Executor.submit` and should not be created " +"directly except for testing." +msgstr "" +"将可调用对象封装为异步执行。:class:`Future` 实例由 :meth:`Executor.submit` 创建,除非测试,不应直接创建。" + +#: ../../library/concurrent.futures.rst:322 +msgid "" +"Attempt to cancel the call. If the call is currently being executed or " +"finished running and cannot be cancelled then the method will return " +"``False``, otherwise the call will be cancelled and the method will return " +"``True``." +msgstr "" +"尝试取消调用。 如果调用正在执行或已结束运行不能被取消则该方法将返回 ``False``,否则调用会被取消并且该方法将返回 ``True``。" + +#: ../../library/concurrent.futures.rst:329 +msgid "Return ``True`` if the call was successfully cancelled." +msgstr "如果调用成功取消返回 ``True``。" + +#: ../../library/concurrent.futures.rst:333 +msgid "" +"Return ``True`` if the call is currently being executed and cannot be " +"cancelled." +msgstr "如果调用正在执行而且不能被取消那么返回 ``True`` 。" + +#: ../../library/concurrent.futures.rst:338 +msgid "" +"Return ``True`` if the call was successfully cancelled or finished running." +msgstr "如果调用已被取消或正常结束那么返回 ``True``。" + +#: ../../library/concurrent.futures.rst:343 +msgid "" +"Return the value returned by the call. If the call hasn't yet completed then" +" this method will wait up to *timeout* seconds. If the call hasn't " +"completed in *timeout* seconds, then a " +":exc:`concurrent.futures.TimeoutError` will be raised. *timeout* can be an " +"int or float. If *timeout* is not specified or ``None``, there is no limit " +"to the wait time." +msgstr "" +"返回调用返回的值。如果调用还没完成那么这个方法将等待 *timeout* 秒。如果在 *timeout* " +"秒内没有执行完成,:exc:`concurrent.futures.TimeoutError` 将会被触发。*timeout* 可以是整数或浮点数。如果" +" *timeout* 没有指定或为 ``None``,那么等待时间就没有限制。" + +#: ../../library/concurrent.futures.rst:350 +#: ../../library/concurrent.futures.rst:364 +msgid "" +"If the future is cancelled before completing then :exc:`.CancelledError` " +"will be raised." +msgstr "如果 future 在完成前被取消则 :exc:`.CancelledError` 将被触发。" + +#: ../../library/concurrent.futures.rst:353 +msgid "" +"If the call raised an exception, this method will raise the same exception." +msgstr "如果调用引发了一个异常,这个方法也会引发同样的异常。" + +#: ../../library/concurrent.futures.rst:357 +msgid "" +"Return the exception raised by the call. If the call hasn't yet completed " +"then this method will wait up to *timeout* seconds. If the call hasn't " +"completed in *timeout* seconds, then a " +":exc:`concurrent.futures.TimeoutError` will be raised. *timeout* can be an " +"int or float. If *timeout* is not specified or ``None``, there is no limit " +"to the wait time." +msgstr "" +"返回由调用引发的异常。如果调用还没完成那么这个方法将等待 *timeout* 秒。如果在 *timeout* " +"秒内没有执行完成,:exc:`concurrent.futures.TimeoutError` 将会被触发。*timeout* 可以是整数或浮点数。如果" +" *timeout* 没有指定或为 ``None``,那么等待时间就没有限制。" + +#: ../../library/concurrent.futures.rst:367 +msgid "If the call completed without raising, ``None`` is returned." +msgstr "如果调用正常完成那么返回 ``None``。" + +#: ../../library/concurrent.futures.rst:371 +msgid "" +"Attaches the callable *fn* to the future. *fn* will be called, with the " +"future as its only argument, when the future is cancelled or finishes " +"running." +msgstr "" +"附加可调用 *fn* 到 future 对象。当 future 对象被取消或完成运行时,将会调用 *fn*,而这个 future " +"对象将作为它唯一的参数。" + +#: ../../library/concurrent.futures.rst:375 +msgid "" +"Added callables are called in the order that they were added and are always " +"called in a thread belonging to the process that added them. If the " +"callable raises an :exc:`Exception` subclass, it will be logged and ignored." +" If the callable raises a :exc:`BaseException` subclass, the behavior is " +"undefined." +msgstr "" +"加入的可调用对象总被属于添加它们的进程中的线程按加入的顺序调用。如果可调用对象引发一个 :exc:`Exception` " +"子类,它会被记录下来并被忽略掉。如果可调用对象引发一个 :exc:`BaseException` 子类,这个行为没有定义。" + +#: ../../library/concurrent.futures.rst:381 +msgid "" +"If the future has already completed or been cancelled, *fn* will be called " +"immediately." +msgstr "如果 future 对象已经完成或已取消,*fn* 会被立即调用。" + +#: ../../library/concurrent.futures.rst:384 +msgid "" +"The following :class:`Future` methods are meant for use in unit tests and " +":class:`Executor` implementations." +msgstr "下面这些 :class:`Future` 方法用于单元测试和 :class:`Executor` 实现。" + +#: ../../library/concurrent.futures.rst:389 +msgid "" +"This method should only be called by :class:`Executor` implementations " +"before executing the work associated with the :class:`Future` and by unit " +"tests." +msgstr "这个方法只可以在执行关联 :class:`Future` 工作之前由 :class:`Executor` 实现调用或由单测试调用。" + +#: ../../library/concurrent.futures.rst:393 +msgid "" +"If the method returns ``False`` then the :class:`Future` was cancelled, i.e." +" :meth:`Future.cancel` was called and returned `True`. Any threads waiting " +"on the :class:`Future` completing (i.e. through :func:`as_completed` or " +":func:`wait`) will be woken up." +msgstr "" +"如果这个方法返回 ``False`` 那么 :class:`Future` 已被取消,即 :meth:`Future.cancel` 已被调用并返回 " +"``True`` 。等待 :class:`Future` 完成 (即通过 :func:`as_completed` 或 :func:`wait`) " +"的线程将被唤醒。" + +#: ../../library/concurrent.futures.rst:398 +msgid "" +"If the method returns ``True`` then the :class:`Future` was not cancelled " +"and has been put in the running state, i.e. calls to :meth:`Future.running` " +"will return `True`." +msgstr "" +"如果这个方法返回 ``True`` 那么 :class:`Future` 不会被取消并已将它变为正在运行状态,也就是说调用 " +":meth:`Future.running` 时将返回 `True`。" + +#: ../../library/concurrent.futures.rst:402 +msgid "" +"This method can only be called once and cannot be called after " +":meth:`Future.set_result` or :meth:`Future.set_exception` have been called." +msgstr "" +"这个方法只可以被调用一次并且不能在调用 :meth:`Future.set_result` 或 :meth:`Future.set_exception`" +" 之后再调用。" + +#: ../../library/concurrent.futures.rst:408 +msgid "" +"Sets the result of the work associated with the :class:`Future` to *result*." +msgstr "设置将 :class:`Future` 关联工作的结果给 *result* 。" + +#: ../../library/concurrent.futures.rst:411 +#: ../../library/concurrent.futures.rst:424 +msgid "" +"This method should only be used by :class:`Executor` implementations and " +"unit tests." +msgstr "这个方法只可以由 :class:`Executor` 实现和单元测试使用。" + +#: ../../library/concurrent.futures.rst:414 +#: ../../library/concurrent.futures.rst:427 +msgid "" +"This method raises :exc:`concurrent.futures.InvalidStateError` if the " +":class:`Future` is already done." +msgstr "" +"如果 :class:`Future` 已经完成则此方法会引发 :exc:`concurrent.futures.InvalidStateError`。" + +#: ../../library/concurrent.futures.rst:421 +msgid "" +"Sets the result of the work associated with the :class:`Future` to the " +":class:`Exception` *exception*." +msgstr "设置 :class:`Future` 关联工作的结果给 :class:`Exception` *exception* 。" + +#: ../../library/concurrent.futures.rst:433 +msgid "Module Functions" +msgstr "模块函数" + +#: ../../library/concurrent.futures.rst:437 +msgid "" +"Wait for the :class:`Future` instances (possibly created by different " +":class:`Executor` instances) given by *fs* to complete. Duplicate futures " +"given to *fs* are removed and will be returned only once. Returns a named " +"2-tuple of sets. The first set, named ``done``, contains the futures that " +"completed (finished or cancelled futures) before the wait completed. The " +"second set, named ``not_done``, contains the futures that did not complete " +"(pending or running futures)." +msgstr "" +"等待由 *fs* 指定的 :class:`Future` 实例(可能由不同的 :class:`Executor` 实例创建)完成。 重复传给 *fs* " +"的 future 会被移除并将只返回一次。 返回一个由集合组成的具名 2 元组。 第一个集合的名称为 ``done``,包含在等待完成之前已完成的 " +"future(包括正常结束或被取消的 future)。 第二个集合的名称为 ``not_done``,包含未完成的 future(包括挂起的或正在运行的" +" future)。" + +#: ../../library/concurrent.futures.rst:445 +msgid "" +"*timeout* can be used to control the maximum number of seconds to wait " +"before returning. *timeout* can be an int or float. If *timeout* is not " +"specified or ``None``, there is no limit to the wait time." +msgstr "" +"*timeout* 可以用来控制返回前最大的等待秒数。 *timeout* 可以为 int 或 float 类型。 如果 *timeout* 未指定或为" +" ``None`` ,则不限制等待时间。" + +#: ../../library/concurrent.futures.rst:449 +msgid "" +"*return_when* indicates when this function should return. It must be one of" +" the following constants:" +msgstr "*return_when* 指定此函数应在何时返回。它必须为以下常数之一:" + +#: ../../library/concurrent.futures.rst:455 +msgid "Constant" +msgstr "常量" + +#: ../../library/concurrent.futures.rst:455 +msgid "Description" +msgstr "描述" + +#: ../../library/concurrent.futures.rst:457 +msgid ":const:`FIRST_COMPLETED`" +msgstr ":const:`FIRST_COMPLETED`" + +#: ../../library/concurrent.futures.rst:457 +msgid "The function will return when any future finishes or is cancelled." +msgstr "函数将在任意可等待对象结束或取消时返回。" + +#: ../../library/concurrent.futures.rst:460 +msgid ":const:`FIRST_EXCEPTION`" +msgstr ":const:`FIRST_EXCEPTION`" + +#: ../../library/concurrent.futures.rst:460 +msgid "" +"The function will return when any future finishes by raising an exception. " +"If no future raises an exception then it is equivalent to " +":const:`ALL_COMPLETED`." +msgstr "函数将在任意可等待对象因引发异常而结束时返回。当没有引发任何异常时它就相当于 :const:`ALL_COMPLETED`。" + +#: ../../library/concurrent.futures.rst:466 +msgid ":const:`ALL_COMPLETED`" +msgstr ":const:`ALL_COMPLETED`" + +#: ../../library/concurrent.futures.rst:466 +msgid "The function will return when all futures finish or are cancelled." +msgstr "函数将在所有可等待对象结束或取消时返回。" + +#: ../../library/concurrent.futures.rst:472 +msgid "" +"Returns an iterator over the :class:`Future` instances (possibly created by " +"different :class:`Executor` instances) given by *fs* that yields futures as " +"they complete (finished or cancelled futures). Any futures given by *fs* " +"that are duplicated will be returned once. Any futures that completed before" +" :func:`as_completed` is called will be yielded first. The returned " +"iterator raises a :exc:`concurrent.futures.TimeoutError` if " +":meth:`~iterator.__next__` is called and the result isn't available after " +"*timeout* seconds from the original call to :func:`as_completed`. *timeout*" +" can be an int or float. If *timeout* is not specified or ``None``, there is" +" no limit to the wait time." +msgstr "" +"返回一个包含 *fs* 所指定的 :class:`Future` 实例(可能由不同的 :class:`Executor` " +"实例创建)的迭代器,这些实例会在完成时生成 future 对象(包括正常结束或被取消的 future 对象)。 任何由 *fs* 所指定的重复 " +"future 对象将只被返回一次。 任何在 :func:`as_completed` 被调用之前完成的 future 对象将优先被生成。 如果 " +":meth:`~iterator.__next__` 被调用并且在对 :func:`as_completed` 的原始调用 *timeout* " +"秒之后结果仍不可用,则返回的迭代器将引发 :exc:`concurrent.futures.TimeoutError`。 *timeout* " +"可以为整数或浮点数。 如果 *timeout* 未指定或为 ``None``,则不限制等待时间。" + +#: ../../library/concurrent.futures.rst:486 +msgid ":pep:`3148` -- futures - execute computations asynchronously" +msgstr ":pep:`3148` -- future 对象 - 异步执行指令。" + +#: ../../library/concurrent.futures.rst:486 +msgid "" +"The proposal which described this feature for inclusion in the Python " +"standard library." +msgstr "该提案描述了Python标准库中包含的这个特性。" + +#: ../../library/concurrent.futures.rst:491 +msgid "Exception classes" +msgstr "Exception 类" + +#: ../../library/concurrent.futures.rst:497 +msgid "Raised when a future is cancelled." +msgstr "future 对象被取消时会触发。" + +#: ../../library/concurrent.futures.rst:501 +msgid "Raised when a future operation exceeds the given timeout." +msgstr "future 对象执行超出给定的超时数值时引发。" + +#: ../../library/concurrent.futures.rst:505 +msgid "" +"Derived from :exc:`RuntimeError`, this exception class is raised when an " +"executor is broken for some reason, and cannot be used to submit or execute " +"new tasks." +msgstr "当执行器被某些原因中断而且不能用来提交或执行新任务时就会被引发派生于 :exc:`RuntimeError` 的异常类。" + +#: ../../library/concurrent.futures.rst:513 +msgid "" +"Raised when an operation is performed on a future that is not allowed in the" +" current state." +msgstr "当某个操作在一个当前状态所不允许的 future 上执行时将被引发。" + +#: ../../library/concurrent.futures.rst:522 +msgid "" +"Derived from :exc:`~concurrent.futures.BrokenExecutor`, this exception class" +" is raised when one of the workers of a :class:`ThreadPoolExecutor` has " +"failed initializing." +msgstr "" +"当 :class:`ThreadPoolExecutor` 中的其中一个工作者初始化失败时会引发派生于 " +":exc:`~concurrent.futures.BrokenExecutor` 的异常类。" + +#: ../../library/concurrent.futures.rst:532 +msgid "" +"Derived from :exc:`~concurrent.futures.BrokenExecutor` (formerly " +":exc:`RuntimeError`), this exception class is raised when one of the workers" +" of a :class:`ProcessPoolExecutor` has terminated in a non-clean fashion " +"(for example, if it was killed from the outside)." +msgstr "" +"当 :class:`ThreadPoolExecutor` 中的其中一个工作者不完整终止时(比如,被外部杀死)会引发派生于 " +":exc:`~concurrent.futures.BrokenExecutor` ( 原名 :exc:`RuntimeError` ) 的异常类。" diff --git a/library/concurrent.po b/library/concurrent.po new file mode 100644 index 000000000..f9474522a --- /dev/null +++ b/library/concurrent.po @@ -0,0 +1,34 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) 2001-2022, Python Software Foundation +# This file is distributed under the same license as the Python package. +# FIRST AUTHOR , YEAR. +# +# Translators: +# Alpha Du , 2019 +# +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: Python 3.9\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2022-11-04 14:34+0000\n" +"PO-Revision-Date: 2017-02-16 23:03+0000\n" +"Last-Translator: Alpha Du , 2019\n" +"Language-Team: Chinese (China) (https://www.transifex.com/python-doc/teams/5390/zh_CN/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: zh_CN\n" +"Plural-Forms: nplurals=1; plural=0;\n" + +#: ../../library/concurrent.rst:2 +msgid "The :mod:`concurrent` package" +msgstr ":mod:`concurrent` 包" + +#: ../../library/concurrent.rst:4 +msgid "Currently, there is only one module in this package:" +msgstr "目前,此包中只有一个模块:" + +#: ../../library/concurrent.rst:6 +msgid ":mod:`concurrent.futures` -- Launching parallel tasks" +msgstr ":mod:`concurrent.futures` —— 启动并行任务" diff --git a/library/configparser.po b/library/configparser.po new file mode 100644 index 000000000..f8ab99fb6 --- /dev/null +++ b/library/configparser.po @@ -0,0 +1,1370 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) 2001-2025, Python Software Foundation +# This file is distributed under the same license as the Python package. +# FIRST AUTHOR , YEAR. +# +# Translators: +# ww song , 2018 +# walkinrain , 2019 +# Freesand Leo , 2022 +# Rafael Fontenelle , 2025 +# +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: Python 3.9\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2025-02-07 16:40+0000\n" +"PO-Revision-Date: 2017-02-16 23:04+0000\n" +"Last-Translator: Rafael Fontenelle , 2025\n" +"Language-Team: Chinese (China) (https://app.transifex.com/python-doc/teams/5390/zh_CN/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: zh_CN\n" +"Plural-Forms: nplurals=1; plural=0;\n" + +#: ../../library/configparser.rst:2 +msgid ":mod:`configparser` --- Configuration file parser" +msgstr ":mod:`configparser` --- 配置文件解析器" + +#: ../../library/configparser.rst:14 +msgid "**Source code:** :source:`Lib/configparser.py`" +msgstr "**源代码:** :source:`Lib/configparser.py`" + +#: ../../library/configparser.rst:24 +msgid "" +"This module provides the :class:`ConfigParser` class which implements a " +"basic configuration language which provides a structure similar to what's " +"found in Microsoft Windows INI files. You can use this to write Python " +"programs which can be customized by end users easily." +msgstr "" +"此模块提供了它实现一种基本配置语言 :class:`ConfigParser` 类,这种语言所提供的结构与 Microsoft Windows INI " +"文件的类似。 你可以使用这种语言来编写能够由最终用户来自定义的 Python 程序。" + +#: ../../library/configparser.rst:31 +msgid "" +"This library does *not* interpret or write the value-type prefixes used in " +"the Windows Registry extended version of INI syntax." +msgstr "这个库 *并不* 能够解析或写入在 Windows Registry 扩展版本 INI 语法中所使用的值-类型前缀。" + +#: ../../library/configparser.rst:38 +msgid "Module :mod:`shlex`" +msgstr "模块 :mod:`shlex`" + +#: ../../library/configparser.rst:37 +msgid "" +"Support for creating Unix shell-like mini-languages which can be used as an " +"alternate format for application configuration files." +msgstr "支持创建可被用作应用配置文件的替代的 Unix 终端式微语言。" + +#: ../../library/configparser.rst:41 +msgid "Module :mod:`json`" +msgstr "模块 :mod:`json`" + +#: ../../library/configparser.rst:41 +msgid "" +"The json module implements a subset of JavaScript syntax which can also be " +"used for this purpose." +msgstr "json 模块实现了一个 JavaScript 语法的子集,它也可被用于这种目的。" + +#: ../../library/configparser.rst:56 +msgid "Quick Start" +msgstr "快速起步" + +#: ../../library/configparser.rst:58 +msgid "Let's take a very basic configuration file that looks like this:" +msgstr "让我们准备一个非常基本的配置文件,它看起来是这样的:" + +#: ../../library/configparser.rst:75 +msgid "" +"The structure of INI files is described `in the following section " +"<#supported-ini-file-structure>`_. Essentially, the file consists of " +"sections, each of which contains keys with values. :mod:`configparser` " +"classes can read and write such files. Let's start by creating the above " +"configuration file programmatically." +msgstr "" +"INI 文件的结构描述见 `以下章节 <#supported-ini-file-structure>`_。 " +"总的来说,这种文件由多个节组成,每个节包含多个带有值的键。 :mod:`configparser` 类可以读取和写入这种文件。 " +"让我们先通过程序方式来创建上述的配置文件。" + +#: ../../library/configparser.rst:99 +msgid "" +"As you can see, we can treat a config parser much like a dictionary. There " +"are differences, `outlined later <#mapping-protocol-access>`_, but the " +"behavior is very close to what you would expect from a dictionary." +msgstr "" +"如你所见,我们可以把配置解析器当作一个字典来处理。 两者确实存在差异,`将在后文说明 <#mapping-protocol-" +"access>`_,但是其行为非常接近于字典所具有一般行为。" + +#: ../../library/configparser.rst:103 +msgid "" +"Now that we have created and saved a configuration file, let's read it back " +"and explore the data it holds." +msgstr "现在我们已经创建并保存了一个配置文件,让我们再将它读取出来并探究其中包含的数据。" + +#: ../../library/configparser.rst:138 +msgid "" +"As we can see above, the API is pretty straightforward. The only bit of " +"magic involves the ``DEFAULT`` section which provides default values for all" +" other sections [1]_. Note also that keys in sections are case-insensitive " +"and stored in lowercase [1]_." +msgstr "" +"正如我们在上面所看到的,相关的 API 相当直观。 唯一有些神奇的地方是 ``DEFAULT`` 小节,它为所有其他小节提供了默认值 [1]_。 " +"还要注意小节中的键大小写不敏感并且会存储为小写形式 [1]_。" + +#: ../../library/configparser.rst:145 +msgid "Supported Datatypes" +msgstr "支持的数据类型" + +#: ../../library/configparser.rst:147 +msgid "" +"Config parsers do not guess datatypes of values in configuration files, " +"always storing them internally as strings. This means that if you need " +"other datatypes, you should convert on your own:" +msgstr "配置解析器并不会猜测配置文件中值的类型,而总是将它们在内部存储为字符串。 这意味着如果你需要其他数据类型,你应当自己来转换:" + +#: ../../library/configparser.rst:158 +msgid "" +"Since this task is so common, config parsers provide a range of handy getter" +" methods to handle integers, floats and booleans. The last one is the most " +"interesting because simply passing the value to ``bool()`` would do no good " +"since ``bool('False')`` is still ``True``. This is why config parsers also " +"provide :meth:`~ConfigParser.getboolean`. This method is case-insensitive " +"and recognizes Boolean values from ``'yes'``/``'no'``, ``'on'``/``'off'``, " +"``'true'``/``'false'`` and ``'1'``/``'0'`` [1]_. For example:" +msgstr "" +"由于这种任务十分常用,配置解析器提供了一系列便捷的获取方法来处理整数、浮点数和布尔值。 最后一个类型的处理最为有趣,因为简单地将值传给 " +"``bool()`` 是没有用的,``bool('False')`` 仍然会是 ``True``。 为解决这个问题配置解析器还提供了 " +":meth:`~ConfigParser.getboolean`。 这个方法对大小写不敏感并可识别 ``'yes'``/``'no'``, " +"``'on'``/``'off'``, ``'true'``/``'false'`` 和 ``'1'``/``'0'`` [1]_ 等布尔值。 例如:" + +#: ../../library/configparser.rst:175 +msgid "" +"Apart from :meth:`~ConfigParser.getboolean`, config parsers also provide " +"equivalent :meth:`~ConfigParser.getint` and :meth:`~ConfigParser.getfloat` " +"methods. You can register your own converters and customize the provided " +"ones. [1]_" +msgstr "" +"除了 :meth:`~ConfigParser.getboolean`,配置解析器还提供了同类的 " +":meth:`~ConfigParser.getint` 和 :meth:`~ConfigParser.getfloat` 方法。 " +"你可以注册你自己的转换器并或是定制已提供的转换器。 [1]_" + +#: ../../library/configparser.rst:181 +msgid "Fallback Values" +msgstr "回退值" + +#: ../../library/configparser.rst:183 +msgid "" +"As with a dictionary, you can use a section's :meth:`get` method to provide " +"fallback values:" +msgstr "与字典类似,你可以使用某个小节的 :meth:`get` 方法来提供回退值:" + +#: ../../library/configparser.rst:196 +msgid "" +"Please note that default values have precedence over fallback values. For " +"instance, in our example the ``'CompressionLevel'`` key was specified only " +"in the ``'DEFAULT'`` section. If we try to get it from the section " +"``'topsecret.server.com'``, we will always get the default, even if we " +"specify a fallback:" +msgstr "" +"请注意默认值会优先于回退值。 例如,在我们的示例中 ``'CompressionLevel'`` 键仅在 ``'DEFAULT'`` 小节被指定。 " +"如果你尝试在 ``'topsecret.server.com'`` 小节获取它,我们将总是获取到默认值,即使我们指定了一个回退值:" + +#: ../../library/configparser.rst:207 +msgid "" +"One more thing to be aware of is that the parser-level :meth:`get` method " +"provides a custom, more complex interface, maintained for backwards " +"compatibility. When using this method, a fallback value can be provided via" +" the ``fallback`` keyword-only argument:" +msgstr "" +"还需要注意的一点是解析器层级的 :meth:`get` 方法提供了自定义的更复杂接口,它被维护用于向下兼容。 当使用此方法时,回退值可以通过 " +"``fallback`` 仅限关键字参数来提供:" + +#: ../../library/configparser.rst:218 +msgid "" +"The same ``fallback`` argument can be used with the " +":meth:`~ConfigParser.getint`, :meth:`~ConfigParser.getfloat` and " +":meth:`~ConfigParser.getboolean` methods, for example:" +msgstr "" +"同样的 ``fallback`` 参数也可在 :meth:`~ConfigParser.getint`, " +":meth:`~ConfigParser.getfloat` 和 :meth:`~ConfigParser.getboolean` 方法中使用,例如:" + +#: ../../library/configparser.rst:234 +msgid "Supported INI File Structure" +msgstr "受支持的 INI 文件结构" + +#: ../../library/configparser.rst:236 +msgid "" +"A configuration file consists of sections, each led by a ``[section]`` " +"header, followed by key/value entries separated by a specific string (``=`` " +"or ``:`` by default [1]_). By default, section names are case sensitive but" +" keys are not [1]_. Leading and trailing whitespace is removed from keys " +"and values. Values can be omitted if the parser is configured to allow it " +"[1]_, in which case the key/value delimiter may also be left out. Values " +"can also span multiple lines, as long as they are indented deeper than the " +"first line of the value. Depending on the parser's mode, blank lines may be" +" treated as parts of multiline values or ignored." +msgstr "" +"配置文件是由小节组成的,每个小节都有一个 ``[section]`` 标头,加上多个由特定字符串 (默认为 ``=`` 或 ``:`` [1]_) " +"分隔的键/值条目。 在默认情况下,小节名对大小写敏感而键对大小写不敏感 [1]_。 键和值开头和末尾的空格会被移除。 在解释器配置允许时值可以被省略 " +"[1]_,在此情况下键/值分隔符也可以被省略。 值还可以跨越多行,只要值的其他行带有比第一行更深的缩进。 " +"依据解析器的具体模式,空白行可能会被视为多行值的组成部分或是被忽略。" + +#: ../../library/configparser.rst:246 +msgid "" +"By default, a valid section name can be any string that does not contain " +"'\\\\n' or ']'. To change this, see :attr:`ConfigParser.SECTCRE`." +msgstr "" +"在默认情况下,有效的节名称可以是不包含 '\\\\n' 或 ']' 的任意字符串。 要改变此设定,请参阅 " +":attr:`ConfigParser.SECTCRE`。" + +#: ../../library/configparser.rst:249 +msgid "" +"Configuration files may include comments, prefixed by specific characters " +"(``#`` and ``;`` by default [1]_). Comments may appear on their own on an " +"otherwise empty line, possibly indented. [1]_" +msgstr "" +"配置文件可以包含注释,要带有指定字符前缀 (默认为 ``#`` 和 ``;`` [1]_)。 注释可以单独出现于原本的空白行,并可使用缩进。 [1]_" + +#: ../../library/configparser.rst:253 ../../library/configparser.rst:316 +msgid "For example:" +msgstr "例如:" + +#: ../../library/configparser.rst:301 +msgid "Interpolation of values" +msgstr "值的插值" + +#: ../../library/configparser.rst:303 +msgid "" +"On top of the core functionality, :class:`ConfigParser` supports " +"interpolation. This means values can be preprocessed before returning them " +"from ``get()`` calls." +msgstr "在核心功能之上,:class:`ConfigParser` 还支持插值。 这意味着值可以在被 ``get()`` 调用返回之前进行预处理。" + +#: ../../library/configparser.rst:311 +msgid "" +"The default implementation used by :class:`ConfigParser`. It enables values" +" to contain format strings which refer to other values in the same section, " +"or values in the special default section [1]_. Additional default values " +"can be provided on initialization." +msgstr "" +"默认实现由 :class:`ConfigParser` 来使用。 它允许值包含引用了相同小节中其他值或者特殊的默认小节中的值的格式字符串 [1]_。 " +"额外的默认值可以在初始化时提供。" + +#: ../../library/configparser.rst:329 +msgid "" +"In the example above, :class:`ConfigParser` with *interpolation* set to " +"``BasicInterpolation()`` would resolve ``%(home_dir)s`` to the value of " +"``home_dir`` (``/Users`` in this case). ``%(my_dir)s`` in effect would " +"resolve to ``/Users/lumberjack``. All interpolations are done on demand so " +"keys used in the chain of references do not have to be specified in any " +"specific order in the configuration file." +msgstr "" +"在上面的例子里,:class:`ConfigParser` 的 *interpolation* 设为 " +"``BasicInterpolation()``,这会将 ``%(home_dir)s`` 求解为 ``home_dir`` 的值 (在这里是 " +"``/Users``)。 ``%(my_dir)s`` 的将被实际求解为 ``/Users/lumberjack``。 " +"所有插值都是按需进行的,这样引用链中使用的键不必以任何特定顺序在配置文件中指明。" + +#: ../../library/configparser.rst:336 +msgid "" +"With ``interpolation`` set to ``None``, the parser would simply return " +"``%(my_dir)s/Pictures`` as the value of ``my_pictures`` and " +"``%(home_dir)s/lumberjack`` as the value of ``my_dir``." +msgstr "" +"当 ``interpolation`` 设为 ``None`` 时,解析器会简单地返回 ``%(my_dir)s/Pictures`` 作为 " +"``my_pictures`` 的值,并返回 ``%(home_dir)s/lumberjack`` 作为 ``my_dir`` 的值。" + +#: ../../library/configparser.rst:344 +msgid "" +"An alternative handler for interpolation which implements a more advanced " +"syntax, used for instance in ``zc.buildout``. Extended interpolation is " +"using ``${section:option}`` to denote a value from a foreign section. " +"Interpolation can span multiple levels. For convenience, if the " +"``section:`` part is omitted, interpolation defaults to the current section " +"(and possibly the default values from the special section)." +msgstr "" +"一个用于插值的替代处理程序实现了更高级的语法,它被用于 ``zc.buildout`` 中的实例。 扩展插值使用 " +"``${section:option}`` 来表示来自外部小节的值。 插值可以跨越多个层级。 为了方便使用,``section:`` " +"部分可被省略,插值会默认作用于当前小节(可能会从特殊小节获取默认值)。" + +#: ../../library/configparser.rst:351 +msgid "" +"For example, the configuration specified above with basic interpolation, " +"would look like this with extended interpolation:" +msgstr "例如,上面使用基本插值描述的配置,使用扩展插值将是这个样子:" + +#: ../../library/configparser.rst:365 +msgid "Values from other sections can be fetched as well:" +msgstr "来自其他小节的值也可以被获取:" + +#: ../../library/configparser.rst:387 +msgid "Mapping Protocol Access" +msgstr "映射协议访问" + +#: ../../library/configparser.rst:391 +msgid "" +"Mapping protocol access is a generic name for functionality that enables " +"using custom objects as if they were dictionaries. In case of " +":mod:`configparser`, the mapping interface implementation is using the " +"``parser['section']['option']`` notation." +msgstr "" +"映射协议访问这个通用名称是指允许以字典的方式来使用自定义对象的功能。 在 :mod:`configparser` 中,映射接口的实现使用了 " +"``parser['section']['option']`` 标记法。" + +#: ../../library/configparser.rst:396 +msgid "" +"``parser['section']`` in particular returns a proxy for the section's data " +"in the parser. This means that the values are not copied but they are taken" +" from the original parser on demand. What's even more important is that " +"when values are changed on a section proxy, they are actually mutated in the" +" original parser." +msgstr "" +"``parser['section']`` 专门为解析器中的小节数据返回一个代理。 这意味着其中的值不会被拷贝,而是在需要时从原始解析器中获取。 " +"更为重要的是,当值在小节代理上被修改时,它们其实是在原始解析器中发生了改变。" + +#: ../../library/configparser.rst:402 +msgid "" +":mod:`configparser` objects behave as close to actual dictionaries as " +"possible. The mapping interface is complete and adheres to the " +":class:`~collections.abc.MutableMapping` ABC. However, there are a few " +"differences that should be taken into account:" +msgstr "" +":mod:`configparser` 对象的行为会尽可能地接近真正的字典。 映射接口是完整而且遵循 " +":class:`~collections.abc.MutableMapping` ABC 规范的。 但是,还是有一些差异应当被纳入考虑:" + +#: ../../library/configparser.rst:407 +msgid "" +"By default, all keys in sections are accessible in a case-insensitive manner" +" [1]_. E.g. ``for option in parser[\"section\"]`` yields only " +"``optionxform``'ed option key names. This means lowercased keys by default." +" At the same time, for a section that holds the key ``'a'``, both " +"expressions return ``True``::" +msgstr "" +"默认情况下,小节中的所有键是以大小写不敏感的方式来访问的 [1]_。 例如 ``for option in parser[\"section\"]`` " +"只会产生 ``optionxform`` 形式的选项键名称。 也就是说默认使用小写字母键名。 与此同时,对于一个包含键 ``'a'`` " +"的小节,以下两个表达式均将返回 ``True``::" + +#: ../../library/configparser.rst:415 +msgid "" +"All sections include ``DEFAULTSECT`` values as well which means that " +"``.clear()`` on a section may not leave the section visibly empty. This is " +"because default values cannot be deleted from the section (because " +"technically they are not there). If they are overridden in the section, " +"deleting causes the default value to be visible again. Trying to delete a " +"default value causes a :exc:`KeyError`." +msgstr "" +"所有小节也包括 ``DEFAULTSECT``,这意味着对一个小节执行 ``.clear()`` 可能无法使得该小节显示为空。 " +"这是因为默认值是无法从小节中被删除的(因为从技术上说它们并不在那里)。 如果它们在小节中被覆盖,删除将导致默认值重新变为可见。 尝试删除默认值将会引发 " +":exc:`KeyError`。" + +#: ../../library/configparser.rst:422 +msgid "``DEFAULTSECT`` cannot be removed from the parser:" +msgstr "``DEFAULTSECT`` 无法从解析器中被移除:" + +#: ../../library/configparser.rst:424 +msgid "trying to delete it raises :exc:`ValueError`," +msgstr "尝试删除将引发 :exc:`ValueError`," + +#: ../../library/configparser.rst:426 +msgid "``parser.clear()`` leaves it intact," +msgstr "``parser.clear()`` 会保留其原状," + +#: ../../library/configparser.rst:428 +msgid "``parser.popitem()`` never returns it." +msgstr "``parser.popitem()`` 绝不会将其返回。" + +#: ../../library/configparser.rst:430 +msgid "" +"``parser.get(section, option, **kwargs)`` - the second argument is **not** a" +" fallback value. Note however that the section-level ``get()`` methods are " +"compatible both with the mapping protocol and the classic configparser API." +msgstr "" +"``parser.get(section, option, **kwargs)`` - 第二个参数 **并非** 回退值。 但是请注意小节层级的 " +"``get()`` 方法可同时兼容映射协议和经典配置解析器 API。" + +#: ../../library/configparser.rst:434 +msgid "" +"``parser.items()`` is compatible with the mapping protocol (returns a list " +"of *section_name*, *section_proxy* pairs including the DEFAULTSECT). " +"However, this method can also be invoked with arguments: " +"``parser.items(section, raw, vars)``. The latter call returns a list of " +"*option*, *value* pairs for a specified ``section``, with all interpolations" +" expanded (unless ``raw=True`` is provided)." +msgstr "" +"``parser.items()`` 兼容映射协议(返回 *section_name*, *section_proxy* 对的列表,包括 " +"DEFAULTSECT)。 但是,此方法也可以附带参数被唤起: ``parser.items(section, raw, vars)``。 " +"这种调用形式返回指定 ``section`` 的 *option*, *value* 对的列表,将展开所有插值(除非提供了 ``raw=True`` " +"选项)。" + +#: ../../library/configparser.rst:441 +msgid "" +"The mapping protocol is implemented on top of the existing legacy API so " +"that subclasses overriding the original interface still should have mappings" +" working as expected." +msgstr "映射协议是在现有的传统 API 之上实现的,以便重写原始接口的子类仍然具有符合预期的有效映射。" + +#: ../../library/configparser.rst:447 +msgid "Customizing Parser Behaviour" +msgstr "定制解析器行为" + +#: ../../library/configparser.rst:449 +msgid "" +"There are nearly as many INI format variants as there are applications using" +" it. :mod:`configparser` goes a long way to provide support for the largest " +"sensible set of INI styles available. The default functionality is mainly " +"dictated by historical background and it's very likely that you will want to" +" customize some of the features." +msgstr "" +"INI 格式的变种数量几乎和使用此格式的应用一样多。 :mod:`configparser` 花费了很大力气来为尽量大范围的可用 INI 样式提供支持。" +" 默认的可用功能主要由历史状况来确定,你很可能会想要定制某些特性。" + +#: ../../library/configparser.rst:455 +msgid "" +"The most common way to change the way a specific config parser works is to " +"use the :meth:`__init__` options:" +msgstr "改变特定配置解析器行为的最常见方式是使用 :meth:`__init__` 选项:" + +#: ../../library/configparser.rst:458 +msgid "*defaults*, default value: ``None``" +msgstr "*defaults*,默认值: ``None``" + +#: ../../library/configparser.rst:460 +msgid "" +"This option accepts a dictionary of key-value pairs which will be initially " +"put in the ``DEFAULT`` section. This makes for an elegant way to support " +"concise configuration files that don't specify values which are the same as " +"the documented default." +msgstr "" +"此选项接受一个键值对的字典,它将被首先放入 ``DEFAULT`` 小节。 " +"这实现了一种优雅的方式来支持简洁的配置文件,它不必指定与已记录的默认值相同的值。" + +#: ../../library/configparser.rst:465 +msgid "" +"Hint: if you want to specify default values for a specific section, use " +":meth:`read_dict` before you read the actual file." +msgstr "提示:如果你想要为特定的小节指定默认的值,请在读取实际文件之前使用 :meth:`read_dict`。" + +#: ../../library/configparser.rst:468 +msgid "*dict_type*, default value: :class:`dict`" +msgstr "*dict_type*,默认值: :class:`dict`" + +#: ../../library/configparser.rst:470 +msgid "" +"This option has a major impact on how the mapping protocol will behave and " +"how the written configuration files look. With the standard dictionary, " +"every section is stored in the order they were added to the parser. Same " +"goes for options within sections." +msgstr "此选项主要影响映射协议的行为和写入配置文件的外观。 使用标准字典时,每个小节是按照它们被加入解析器的顺序保存的。 在小节内的选项也是如此。" + +#: ../../library/configparser.rst:475 +msgid "" +"An alternative dictionary type can be used for example to sort sections and " +"options on write-back." +msgstr "还有其他替换的字典类型可以使用,例如在写回数据时对小节和选项进行排序。" + +#: ../../library/configparser.rst:478 +msgid "" +"Please note: there are ways to add a set of key-value pairs in a single " +"operation. When you use a regular dictionary in those operations, the order" +" of the keys will be ordered. For example:" +msgstr "请注意:存在其他方式只用一次操作来添加键值对的集合。 当你在这些操作中使用一个常规字典时,键将按顺序进行排列。 例如:" + +#: ../../library/configparser.rst:500 +msgid "*allow_no_value*, default value: ``False``" +msgstr "*allow_no_value*,默认值: ``False``" + +#: ../../library/configparser.rst:502 +msgid "" +"Some configuration files are known to include settings without values, but " +"which otherwise conform to the syntax supported by :mod:`configparser`. The" +" *allow_no_value* parameter to the constructor can be used to indicate that " +"such values should be accepted:" +msgstr "" +"已知某些配置文件会包括不带值的设置,但其在其他方面均符合 :mod:`configparser` 所支持的语法。 构造器的 " +"*allow_no_value* 形参可用于指明应当接受这样的值:" + +#: ../../library/configparser.rst:537 +msgid "*delimiters*, default value: ``('=', ':')``" +msgstr "*delimiters*,默认值: ``('=', ':')``" + +#: ../../library/configparser.rst:539 +msgid "" +"Delimiters are substrings that delimit keys from values within a section. " +"The first occurrence of a delimiting substring on a line is considered a " +"delimiter. This means values (but not keys) can contain the delimiters." +msgstr "分隔符是用于在小节内分隔键和值的子字符串。 在一行中首次出现的分隔子字符串会被视为一个分隔符。 这意味着值可以包含分隔符(但键不可以)。" + +#: ../../library/configparser.rst:543 +msgid "" +"See also the *space_around_delimiters* argument to " +":meth:`ConfigParser.write`." +msgstr "另请参见 :meth:`ConfigParser.write` 的 *space_around_delimiters* 参数。" + +#: ../../library/configparser.rst:546 +msgid "*comment_prefixes*, default value: ``('#', ';')``" +msgstr "*comment_prefixes*,默认值: ``('#', ';')``" + +#: ../../library/configparser.rst:548 +msgid "*inline_comment_prefixes*, default value: ``None``" +msgstr "*inline_comment_prefixes*,默认值: ``None``" + +#: ../../library/configparser.rst:550 +msgid "" +"Comment prefixes are strings that indicate the start of a valid comment " +"within a config file. *comment_prefixes* are used only on otherwise empty " +"lines (optionally indented) whereas *inline_comment_prefixes* can be used " +"after every valid value (e.g. section names, options and empty lines as " +"well). By default inline comments are disabled and ``'#'`` and ``';'`` are " +"used as prefixes for whole line comments." +msgstr "" +"注释前缀是配置文件中用于标示一条有效注释的开头的字符串。 *comment_prefixes* 仅用在被视为空白的行(可以缩进)之前而 " +"*inline_comment_prefixes* 可用在每个有效值之后(例如小节名称、选项以及空白的行)。 默认情况下禁用行内注释,并且 " +"``'#'`` 和 ``';'`` 都被用作完整行注释的前缀。" + +#: ../../library/configparser.rst:557 +msgid "" +"In previous versions of :mod:`configparser` behaviour matched " +"``comment_prefixes=('#',';')`` and ``inline_comment_prefixes=(';',)``." +msgstr "" +"在之前的 :mod:`configparser` 版本中行为匹配 ``comment_prefixes=('#',';')`` 和 " +"``inline_comment_prefixes=(';',)``。" + +#: ../../library/configparser.rst:561 +msgid "" +"Please note that config parsers don't support escaping of comment prefixes " +"so using *inline_comment_prefixes* may prevent users from specifying option " +"values with characters used as comment prefixes. When in doubt, avoid " +"setting *inline_comment_prefixes*. In any circumstances, the only way of " +"storing comment prefix characters at the beginning of a line in multiline " +"values is to interpolate the prefix, for example::" +msgstr "" +"请注意配置解析器不支持对注释前缀的转义,因此使用 *inline_comment_prefixes* 可能妨碍用户将被用作注释前缀的字符指定为可选值。 " +"当有疑问时,请避免设置 *inline_comment_prefixes*。 " +"在许多情况下,在多行值的一行开头存储注释前缀字符的唯一方式是进行前缀插值,例如::" + +#: ../../library/configparser.rst:607 +msgid "*strict*, default value: ``True``" +msgstr "*strict*,默认值: ``True``" + +#: ../../library/configparser.rst:609 +msgid "" +"When set to ``True``, the parser will not allow for any section or option " +"duplicates while reading from a single source (using :meth:`read_file`, " +":meth:`read_string` or :meth:`read_dict`). It is recommended to use strict " +"parsers in new applications." +msgstr "" +"当设为 ``True`` 时,解析器在从单一源读取 (使用 :meth:`read_file`, :meth:`read_string` 或 " +":meth:`read_dict`) 期间将不允许任何小节或选项出现重复。 推荐在新的应用中使用严格解析器。" + +#: ../../library/configparser.rst:614 +msgid "" +"In previous versions of :mod:`configparser` behaviour matched " +"``strict=False``." +msgstr "在之前的 :mod:`configparser` 版本中行为匹配 ``strict=False``。" + +#: ../../library/configparser.rst:618 +msgid "*empty_lines_in_values*, default value: ``True``" +msgstr "*empty_lines_in_values*,默认值: ``True``" + +#: ../../library/configparser.rst:620 +msgid "" +"In config parsers, values can span multiple lines as long as they are " +"indented more than the key that holds them. By default parsers also let " +"empty lines to be parts of values. At the same time, keys can be " +"arbitrarily indented themselves to improve readability. In consequence, " +"when configuration files get big and complex, it is easy for the user to " +"lose track of the file structure. Take for instance:" +msgstr "" +"在配置解析器中,值可以包含多行,只要它们的缩进级别低于它们所对应的键。 默认情况下解析器还会将空行视为值的一部分。 " +"于此同时,键本身也可以任意缩进以提升可读性。 因此,当配置文件变得非常庞大而复杂时,用户很容易失去对文件结构的掌控。 例如:" + +#: ../../library/configparser.rst:635 +msgid "" +"This can be especially problematic for the user to see if she's using a " +"proportional font to edit the file. That is why when your application does " +"not need values with empty lines, you should consider disallowing them. " +"This will make empty lines split keys every time. In the example above, it " +"would produce two keys, ``key`` and ``this``." +msgstr "" +"在用户查看时这可能会特别有问题,如果她是使用比例字体来编辑文件的话。 这就是为什么当你的应用不需要带有空行的值时,你应该考虑禁用它们。 " +"这将使得空行每次都会作为键之间的分隔。 在上面的示例中,空行产生了两个键,``key`` 和 ``this``。" + +#: ../../library/configparser.rst:641 +msgid "" +"*default_section*, default value: ``configparser.DEFAULTSECT`` (that is: " +"``\"DEFAULT\"``)" +msgstr "*default_section*,默认值: ``configparser.DEFAULTSECT`` (即: ``\"DEFAULT\"``)" + +#: ../../library/configparser.rst:644 +msgid "" +"The convention of allowing a special section of default values for other " +"sections or interpolation purposes is a powerful concept of this library, " +"letting users create complex declarative configurations. This section is " +"normally called ``\"DEFAULT\"`` but this can be customized to point to any " +"other valid section name. Some typical values include: ``\"general\"`` or " +"``\"common\"``. The name provided is used for recognizing default sections " +"when reading from any source and is used when writing configuration back to " +"a file. Its current value can be retrieved using the " +"``parser_instance.default_section`` attribute and may be modified at runtime" +" (i.e. to convert files from one format to another)." +msgstr "" +"允许设置一个保存默认值的特殊节在其他节或插值等目的中使用的惯例是这个库所拥有的一个强大概念,使得用户能够创建复杂的声明性配置。 这种特殊节通常称为 " +"``\"DEFAULT\"`` 但也可以被定制为指向任何其他有效的节名称。 一些典型的值包括: ``\"general\"`` 或 " +"``\"common\"``。 所提供的名称在从任意节读取的时候被用于识别默认的节,而且也会在将配置写回文件时被使用。 它的当前值可以使用 " +"``parser_instance.default_section`` 属性来获取,并且可以在运行时被修改(即将文件从一种格式转换为另一种格式)。" + +#: ../../library/configparser.rst:655 +msgid "*interpolation*, default value: ``configparser.BasicInterpolation``" +msgstr "*interpolation*,默认值: ``configparser.BasicInterpolation``" + +#: ../../library/configparser.rst:657 +msgid "" +"Interpolation behaviour may be customized by providing a custom handler " +"through the *interpolation* argument. ``None`` can be used to turn off " +"interpolation completely, ``ExtendedInterpolation()`` provides a more " +"advanced variant inspired by ``zc.buildout``. More on the subject in the " +"`dedicated documentation section <#interpolation-of-values>`_. " +":class:`RawConfigParser` has a default value of ``None``." +msgstr "" +"插值行为可以用通过提供 *interpolation* 参数提供自定义处理程序的方式来定制。 ``None`` " +"可用来完全禁用插值,``ExtendedInterpolation()`` 提供了一种更高级的变体形式,它的设计受到了 ``zc.buildout`` " +"的启发。 有关该主题的更多信息请参见 `专门的文档章节 <#interpolation-of-values>`_。 " +":class:`RawConfigParser` 具有默认的值 ``None``。" + +#: ../../library/configparser.rst:664 +msgid "*converters*, default value: not set" +msgstr "*converters*,默认值: 不设置" + +#: ../../library/configparser.rst:666 +msgid "" +"Config parsers provide option value getters that perform type conversion. " +"By default :meth:`~ConfigParser.getint`, :meth:`~ConfigParser.getfloat`, and" +" :meth:`~ConfigParser.getboolean` are implemented. Should other getters be " +"desirable, users may define them in a subclass or pass a dictionary where " +"each key is a name of the converter and each value is a callable " +"implementing said conversion. For instance, passing ``{'decimal': " +"decimal.Decimal}`` would add :meth:`getdecimal` on both the parser object " +"and all section proxies. In other words, it will be possible to write both " +"``parser_instance.getdecimal('section', 'key', fallback=0)`` and " +"``parser_instance['section'].getdecimal('key', 0)``." +msgstr "" +"配置解析器提供了可选的值获取方法用来执行类型转换。 默认实现包括 :meth:`~ConfigParser.getint`, " +":meth:`~ConfigParser.getfloat` 以及 :meth:`~ConfigParser.getboolean`。 " +"如果还需要其他获取方法,用户可以在子类中定义它们,或者传入一个字典,其中每个键都是一个转换器的名称而每个值都是一个实现了特定转换的可调用对象。 " +"例如,传入 ``{'decimal': decimal.Decimal}`` 将对解释器对象和所有节代理添加 :meth:`getdecimal`。 " +"换句话说,可以同时编写 ``parser_instance.getdecimal('section', 'key', fallback=0)`` 和 " +"``parser_instance['section'].getdecimal('key', 0)``。" + +#: ../../library/configparser.rst:677 +msgid "" +"If the converter needs to access the state of the parser, it can be " +"implemented as a method on a config parser subclass. If the name of this " +"method starts with ``get``, it will be available on all section proxies, in " +"the dict-compatible form (see the ``getdecimal()`` example above)." +msgstr "" +"如果转换器需要访问解析器的状态,可以在配置解析器子类上作为一个方法来实现。 如果该方法的名称是以 ``get`` " +"打头的,它将在所有节代理上以兼容字典的形式提供(参见上面的 ``getdecimal()`` 示例)。" + +#: ../../library/configparser.rst:682 +msgid "" +"More advanced customization may be achieved by overriding default values of " +"these parser attributes. The defaults are defined on the classes, so they " +"may be overridden by subclasses or by attribute assignment." +msgstr "更多高级定制选项可通过重写这些解析器属性的默认值来达成。 默认值是在类中定义的,因此它们可以通过子类或属性赋值来重写。" + +#: ../../library/configparser.rst:688 +msgid "" +"By default when using :meth:`~ConfigParser.getboolean`, config parsers " +"consider the following values ``True``: ``'1'``, ``'yes'``, ``'true'``, " +"``'on'`` and the following values ``False``: ``'0'``, ``'no'``, ``'false'``," +" ``'off'``. You can override this by specifying a custom dictionary of " +"strings and their Boolean outcomes. For example:" +msgstr "" +"默认情况下当使用 :meth:`~ConfigParser.getboolean` 时,配置解析器会将下列值视为 ``True``: ``'1'``, " +"``'yes'``, ``'true'``, ``'on'`` 而将下列值视为 ``False``: ``'0'``, ``'no'``, " +"``'false'``, ``'off'``。 你可以通过指定一个自定义的字符串键及其对应的布尔值字典来覆盖此行为。 例如:" + +#: ../../library/configparser.rst:706 +msgid "" +"Other typical Boolean pairs include ``accept``/``reject`` or " +"``enabled``/``disabled``." +msgstr "其他典型的布尔值对包括 ``accept``/``reject`` 或 ``enabled``/``disabled``。" + +#: ../../library/configparser.rst:712 +msgid "" +"This method transforms option names on every read, get, or set operation. " +"The default converts the name to lowercase. This also means that when a " +"configuration file gets written, all keys will be lowercase. Override this " +"method if that's unsuitable. For example:" +msgstr "" +"这个方法会转换每次 read, get, 或 set 操作的选项名称。 默认会将名称转换为小写形式。 " +"这也意味着当一个配置文件被写入时,所有键都将为小写形式。 如果此行为不合适则要重写此方法。 例如:" + +#: ../../library/configparser.rst:742 +msgid "" +"The optionxform function transforms option names to a canonical form. This " +"should be an idempotent function: if the name is already in canonical form, " +"it should be returned unchanged." +msgstr "optionxform 函数会将选项名称转换为规范形式。 这应该是一个幂等函数:如果名称已经为规范形式,则应不加修改地将其返回。" + +#: ../../library/configparser.rst:749 +msgid "" +"A compiled regular expression used to parse section headers. The default " +"matches ``[section]`` to the name ``\"section\"``. Whitespace is considered" +" part of the section name, thus ``[ larch ]`` will be read as a section of" +" name ``\" larch \"``. Override this attribute if that's unsuitable. For" +" example:" +msgstr "" +"一个已编译正则表达式会被用来解析节标头。 默认将 ``[section]`` 匹配到名称 ``\"section\"``。 " +"空格会被视为节名称的一部分,因此 ``[ larch ]`` 将被读取为一个名称为 ``\" larch \"`` 的节。 " +"如果此行为不合适则要覆盖此属性。 例如:" + +#: ../../library/configparser.rst:777 +msgid "" +"While ConfigParser objects also use an ``OPTCRE`` attribute for recognizing " +"option lines, it's not recommended to override it because that would " +"interfere with constructor options *allow_no_value* and *delimiters*." +msgstr "" +"虽然 ConfigParser 对象也使用 ``OPTCRE`` 属性来识别选项行,但并不推荐重写它,因为这会与构造器选项 " +"*allow_no_value* 和 *delimiters* 产生冲突。" + +#: ../../library/configparser.rst:783 +msgid "Legacy API Examples" +msgstr "旧式 API 示例" + +#: ../../library/configparser.rst:785 +msgid "" +"Mainly because of backwards compatibility concerns, :mod:`configparser` " +"provides also a legacy API with explicit ``get``/``set`` methods. While " +"there are valid use cases for the methods outlined below, mapping protocol " +"access is preferred for new projects. The legacy API is at times more " +"advanced, low-level and downright counterintuitive." +msgstr "" +"主要出于向下兼容性的考虑,:mod:`configparser` 还提供了一种采用显式 ``get``/``set`` 方法的旧式 API。 " +"虽然以下介绍的方法存在有效的用例,但对于新项目仍建议采用映射协议访问。 旧式 API 在多数时候都更复杂、更底层并且完全违反直觉。" + +#: ../../library/configparser.rst:791 +msgid "An example of writing to a configuration file::" +msgstr "一个写入配置文件的示例::" + +#: ../../library/configparser.rst:814 +msgid "An example of reading the configuration file again::" +msgstr "一个再次读取配置文件的示例::" + +#: ../../library/configparser.rst:832 +msgid "To get interpolation, use :class:`ConfigParser`::" +msgstr "要获取插值,请使用 :class:`ConfigParser`::" + +#: ../../library/configparser.rst:865 +msgid "" +"Default values are available in both types of ConfigParsers. They are used " +"in interpolation if an option used is not defined elsewhere. ::" +msgstr "默认值在两种类型的 ConfigParser 中均可用。 它们将在当某个选项未在别处定义时被用于插值。 ::" + +#: ../../library/configparser.rst:883 +msgid "ConfigParser Objects" +msgstr "ConfigParser 对象" + +#: ../../library/configparser.rst:887 +msgid "" +"The main configuration parser. When *defaults* is given, it is initialized " +"into the dictionary of intrinsic defaults. When *dict_type* is given, it " +"will be used to create the dictionary objects for the list of sections, for " +"the options within a section, and for the default values." +msgstr "" +"主配置解析器。 当给定 *defaults* 时,它会被初始化为包含固有默认值的字典。 当给定 *dict_type* " +"时,它将被用来创建包含节、节中的选项以及默认值的字典。" + +#: ../../library/configparser.rst:892 +msgid "" +"When *delimiters* is given, it is used as the set of substrings that divide " +"keys from values. When *comment_prefixes* is given, it will be used as the " +"set of substrings that prefix comments in otherwise empty lines. Comments " +"can be indented. When *inline_comment_prefixes* is given, it will be used " +"as the set of substrings that prefix comments in non-empty lines." +msgstr "" +"当给定 *delimiters* 时,它会被用作分隔键与值的子字符串的集合。 当给定 *comment_prefixes* " +"时,它将被用作在否则为空行的注释的前缀子字符串的集合。 注释可以被缩进。 当给定 *inline_comment_prefixes* " +"时,它将被用作非空行的注释的前缀子字符串的集合。" + +#: ../../library/configparser.rst:898 +msgid "" +"When *strict* is ``True`` (the default), the parser won't allow for any " +"section or option duplicates while reading from a single source (file, " +"string or dictionary), raising :exc:`DuplicateSectionError` or " +":exc:`DuplicateOptionError`. When *empty_lines_in_values* is ``False`` " +"(default: ``True``), each empty line marks the end of an option. Otherwise," +" internal empty lines of a multiline option are kept as part of the value. " +"When *allow_no_value* is ``True`` (default: ``False``), options without " +"values are accepted; the value held for these is ``None`` and they are " +"serialized without the trailing delimiter." +msgstr "" +"当 *strict* 为 ``True`` (默认值) 时,解析器在从单个源(文件、字符串或字典)读取时将不允许任何节或选项出现重复,否则会引发 " +":exc:`DuplicateSectionError` 或 :exc:`DuplicateOptionError`。 当 " +"*empty_lines_in_values* 为 ``False`` (默认值: ``True``) 时,每个空行均表示一个选项的结束。 " +"在其他情况下,一个多行选项内部的空行会被保留为值的一部分。 当 *allow_no_value* 为 ``True`` (默认值: ``False``)" +" 时,将接受没有值的选项;此种选项的值将为 ``None`` 并且它们会以不带末尾分隔符的形式被序列化。" + +#: ../../library/configparser.rst:908 +msgid "" +"When *default_section* is given, it specifies the name for the special " +"section holding default values for other sections and interpolation purposes" +" (normally named ``\"DEFAULT\"``). This value can be retrieved and changed " +"on runtime using the ``default_section`` instance attribute." +msgstr "" +"当给定 *default_section* 时,它将指定存放其他节的默认值和用于插值的特殊节的名称 (通常命名为 ``\"DEFAULT\"``)。 " +"该值可通过使用 ``default_section`` 实例属性在运行时被读取或修改。" + +#: ../../library/configparser.rst:913 +msgid "" +"Interpolation behaviour may be customized by providing a custom handler " +"through the *interpolation* argument. ``None`` can be used to turn off " +"interpolation completely, ``ExtendedInterpolation()`` provides a more " +"advanced variant inspired by ``zc.buildout``. More on the subject in the " +"`dedicated documentation section <#interpolation-of-values>`_." +msgstr "" +"插值行为可通过给出 *interpolation* 参数提供自定义处理程序的方式来定制。 ``None`` " +"可用来完全禁用插值,``ExtendedInterpolation()`` 提供了一种更高级的变体形式,它的设计受到了 ``zc.buildout`` " +"的启发。 有关该主题的更多信息请参见 `专门的文档章节 <#interpolation-of-values>`_。" + +#: ../../library/configparser.rst:919 +msgid "" +"All option names used in interpolation will be passed through the " +":meth:`optionxform` method just like any other option name reference. For " +"example, using the default implementation of :meth:`optionxform` (which " +"converts option names to lower case), the values ``foo %(bar)s`` and ``foo " +"%(BAR)s`` are equivalent." +msgstr "" +"插值中使用的所有选项名称将像任何其他选项名称引用一样通过 :meth:`optionxform` 方法来传递。 例如,使用 " +":meth:`optionxform` 的默认实现(它会将选项名称转换为小写形式)时,值 ``foo %(bar)s`` 和 ``foo " +"%(BAR)s`` 是等价的。" + +#: ../../library/configparser.rst:925 +msgid "" +"When *converters* is given, it should be a dictionary where each key " +"represents the name of a type converter and each value is a callable " +"implementing the conversion from string to the desired datatype. Every " +"converter gets its own corresponding :meth:`get*()` method on the parser " +"object and section proxies." +msgstr "" +"当给定 *converters* 时,它应当为一个字典,其中每个键代表一个类型转换器的名称而每个值则为实现从字符串到目标数据类型的转换的可调用对象。 " +"每个转换器会获得其在解析器对象和节代理上对应的 :meth:`get*()` 方法。" + +#: ../../library/configparser.rst:931 +msgid "The default *dict_type* is :class:`collections.OrderedDict`." +msgstr "默认的 *dict_type* 为 :class:`collections.OrderedDict`。" + +#: ../../library/configparser.rst:934 +msgid "" +"*allow_no_value*, *delimiters*, *comment_prefixes*, *strict*, " +"*empty_lines_in_values*, *default_section* and *interpolation* were added." +msgstr "" +"添加了 *allow_no_value*, *delimiters*, *comment_prefixes*, *strict*, " +"*empty_lines_in_values*, *default_section* 以及 *interpolation*。" + +#: ../../library/configparser.rst:939 +msgid "The *converters* argument was added." +msgstr "添加了 *converters* 参数。" + +#: ../../library/configparser.rst:942 +msgid "" +"The *defaults* argument is read with :meth:`read_dict()`, providing " +"consistent behavior across the parser: non-string keys and values are " +"implicitly converted to strings." +msgstr "" +"*defaults* 参数会通过 :meth:`read_dict()` " +"来读取,提供全解析器范围内一致的行为:非字符串类型的键和值会被隐式地转换为字符串。" + +#: ../../library/configparser.rst:947 ../../library/configparser.rst:1232 +msgid "" +"The default *dict_type* is :class:`dict`, since it now preserves insertion " +"order." +msgstr "默认的 *dict_type* 为 :class:`dict`,因为它现在会保留插入顺序。" + +#: ../../library/configparser.rst:953 +msgid "Return a dictionary containing the instance-wide defaults." +msgstr "返回包含实例范围内默认值的字典。" + +#: ../../library/configparser.rst:958 +msgid "" +"Return a list of the sections available; the *default section* is not " +"included in the list." +msgstr "返回可用节的列表;*default section* 不包括在该列表中。" + +#: ../../library/configparser.rst:964 +msgid "" +"Add a section named *section* to the instance. If a section by the given " +"name already exists, :exc:`DuplicateSectionError` is raised. If the " +"*default section* name is passed, :exc:`ValueError` is raised. The name of " +"the section must be a string; if not, :exc:`TypeError` is raised." +msgstr "" +"向实例添加一个名为 *section* 的节。 如果给定名称的节已存在,将会引发 :exc:`DuplicateSectionError`。 如果传入了" +" *default section* 名称,则会引发 :exc:`ValueError`。 节名称必须为字符串;如果不是则会引发 " +":exc:`TypeError`。" + +#: ../../library/configparser.rst:969 +msgid "Non-string section names raise :exc:`TypeError`." +msgstr "非字符串的节名称将引发 :exc:`TypeError`。" + +#: ../../library/configparser.rst:975 +msgid "" +"Indicates whether the named *section* is present in the configuration. The " +"*default section* is not acknowledged." +msgstr "指明相应名称的 *section* 是否存在于配置中。 *default section* 不包含在内。" + +#: ../../library/configparser.rst:981 +msgid "Return a list of options available in the specified *section*." +msgstr "返回指定 *section* 中可用选项的列表。" + +#: ../../library/configparser.rst:986 +msgid "" +"If the given *section* exists, and contains the given *option*, return " +":const:`True`; otherwise return :const:`False`. If the specified *section* " +"is :const:`None` or an empty string, DEFAULT is assumed." +msgstr "" +"如果给定的 *section* 存在并且包含给定的 *option* 则返回 :const:`True`;否则返回 :const:`False`。 " +"如果指定的 *section* 为 :const:`None` 或空字符串,则会使用 DEFAULT。" + +#: ../../library/configparser.rst:993 +msgid "" +"Attempt to read and parse an iterable of filenames, returning a list of " +"filenames which were successfully parsed." +msgstr "尝试读取并解析一个包含文件名的可迭代对象,返回一个被成功解析的文件名列表。" + +#: ../../library/configparser.rst:996 +msgid "" +"If *filenames* is a string, a :class:`bytes` object or a :term:`path-like " +"object`, it is treated as a single filename. If a file named in *filenames*" +" cannot be opened, that file will be ignored. This is designed so that you " +"can specify an iterable of potential configuration file locations (for " +"example, the current directory, the user's home directory, and some system-" +"wide directory), and all existing configuration files in the iterable will " +"be read." +msgstr "" +"如果 *filenames* 为字符串、:class:`bytes` 对象或 :term:`path-like " +"object`,它会被当作单个文件来处理。 如果 *filenames* 中名称对应的某个文件无法被打开,该文件将被忽略。 " +"这样的设计使得你可以指定包含多个潜在配置文件位置的可迭代对象(例如当前目录、用户家目录以及某个系统级目录),存在于该可迭代对象中的所有配置文件都将被读取。" + +#: ../../library/configparser.rst:1005 +msgid "" +"If none of the named files exist, the :class:`ConfigParser` instance will " +"contain an empty dataset. An application which requires initial values to " +"be loaded from a file should load the required file or files using " +":meth:`read_file` before calling :meth:`read` for any optional files::" +msgstr "" +"如果名称对应的文件全都不存在,则 :class:`ConfigParser` 实例将包含一个空数据集。 一个要求从文件加载初始值的应用应当在调用 " +":meth:`read` 来获取任何可选文件之前使用 :meth:`read_file` 来加载所要求的一个或多个文件::" + +#: ../../library/configparser.rst:1018 +msgid "" +"The *encoding* parameter. Previously, all files were read using the default" +" encoding for :func:`open`." +msgstr "*encoding* 形参。 在之前的版本中,所有文件都将使用 :func:`open` 的默认编码格式来读取。" + +#: ../../library/configparser.rst:1022 +msgid "The *filenames* parameter accepts a :term:`path-like object`." +msgstr "*filenames* 形参接受一个 :term:`path-like object`。" + +#: ../../library/configparser.rst:1025 +msgid "The *filenames* parameter accepts a :class:`bytes` object." +msgstr "*filenames* 形参接受一个 :class:`bytes` 对象。" + +#: ../../library/configparser.rst:1031 +msgid "" +"Read and parse configuration data from *f* which must be an iterable " +"yielding Unicode strings (for example files opened in text mode)." +msgstr "从 *f* 读取并解析配置数据,它必须是一个产生 Unicode 字符串的可迭代对象(例如以文本模式打开的文件)。" + +#: ../../library/configparser.rst:1034 +msgid "" +"Optional argument *source* specifies the name of the file being read. If " +"not given and *f* has a :attr:`name` attribute, that is used for *source*; " +"the default is ``''``." +msgstr "" +"可选参数 *source* 指定要读取的文件名称。 如果未给出并且 *f* 具有 :attr:`name` 属性,则该属性会被用作 " +"*source*;默认值为 ``''``。" + +#: ../../library/configparser.rst:1038 +msgid "Replaces :meth:`readfp`." +msgstr "替代 :meth:`readfp`。" + +#: ../../library/configparser.rst:1043 +msgid "Parse configuration data from a string." +msgstr "从字符串中解析配置数据。" + +#: ../../library/configparser.rst:1045 +msgid "" +"Optional argument *source* specifies a context-specific name of the string " +"passed. If not given, ``''`` is used. This should commonly be a " +"filesystem path or a URL." +msgstr "" +"可选参数 *source* 指定一个所传入字符串的上下文专属名称。 如果未给出,则会使用 ``''``。 这通常应为一个文件系统路径或 " +"URL。" + +#: ../../library/configparser.rst:1054 +msgid "" +"Load configuration from any object that provides a dict-like ``items()`` " +"method. Keys are section names, values are dictionaries with keys and " +"values that should be present in the section. If the used dictionary type " +"preserves order, sections and their keys will be added in order. Values are " +"automatically converted to strings." +msgstr "" +"从任意一个提供了类似于字典的 ``items()`` 方法的对象加载配置。 键为节名称,值为包含节中所出现的键和值的字典。 " +"如果所用的字典类型会保留顺序,则节和其中的键将按顺序加入。 值会被自动转换为字符串。" + +#: ../../library/configparser.rst:1060 +msgid "" +"Optional argument *source* specifies a context-specific name of the " +"dictionary passed. If not given, ```` is used." +msgstr "可选参数 *source* 指定一个所传入字典的上下文专属名称。 如果未给出,则会使用 ````。" + +#: ../../library/configparser.rst:1063 +msgid "This method can be used to copy state between parsers." +msgstr "此方法可被用于在解析器之间拷贝状态。" + +#: ../../library/configparser.rst:1070 +msgid "" +"Get an *option* value for the named *section*. If *vars* is provided, it " +"must be a dictionary. The *option* is looked up in *vars* (if provided), " +"*section*, and in *DEFAULTSECT* in that order. If the key is not found and " +"*fallback* is provided, it is used as a fallback value. ``None`` can be " +"provided as a *fallback* value." +msgstr "" +"获取指定名称的 *section* 的一个 *option* 的值。 如果提供了 *vars*,则它必须为一个字典。 *option* 的查找顺序为 " +"*vars*(如果有提供)、*section* 以及 *DEFAULTSECT*。 如果未找到该键并且提供了 *fallback*,则它会被用作回退值。" +" 可以提供 ``None`` 作为 *fallback* 值。" + +#: ../../library/configparser.rst:1076 +msgid "" +"All the ``'%'`` interpolations are expanded in the return values, unless the" +" *raw* argument is true. Values for interpolation keys are looked up in the" +" same manner as the option." +msgstr "所有 ``'%'`` 插值会在返回值中被展开,除非 *raw* 参数为真值。 插值键所使用的值会按与选项相同的方式来查找。" + +#: ../../library/configparser.rst:1080 +msgid "" +"Arguments *raw*, *vars* and *fallback* are keyword only to protect users " +"from trying to use the third argument as the *fallback* fallback (especially" +" when using the mapping protocol)." +msgstr "" +"*raw*, *vars* 和 *fallback* 都是仅限关键字参数,以防止用户试图使用第三个参数作业为 *fallback* " +"回退值(特别是在使用映射 协议的时候)。" + +#: ../../library/configparser.rst:1088 +msgid "" +"A convenience method which coerces the *option* in the specified *section* " +"to an integer. See :meth:`get` for explanation of *raw*, *vars* and " +"*fallback*." +msgstr "" +"将在指定 *section* 中的 *option* 强制转换为整数的便捷方法。 参见 :meth:`get` 获取对于 *raw*, *vars* 和" +" *fallback* 的解释。" + +#: ../../library/configparser.rst:1095 +msgid "" +"A convenience method which coerces the *option* in the specified *section* " +"to a floating point number. See :meth:`get` for explanation of *raw*, " +"*vars* and *fallback*." +msgstr "" +"将在指定 *section* 中的 *option* 强制转换为浮点数的便捷方法。 参见 :meth:`get` 获取对于 *raw*, *vars* " +"和 *fallback* 的解释。" + +#: ../../library/configparser.rst:1102 +msgid "" +"A convenience method which coerces the *option* in the specified *section* " +"to a Boolean value. Note that the accepted values for the option are " +"``'1'``, ``'yes'``, ``'true'``, and ``'on'``, which cause this method to " +"return ``True``, and ``'0'``, ``'no'``, ``'false'``, and ``'off'``, which " +"cause it to return ``False``. These string values are checked in a case-" +"insensitive manner. Any other value will cause it to raise " +":exc:`ValueError`. See :meth:`get` for explanation of *raw*, *vars* and " +"*fallback*." +msgstr "" +"将在指定 *section* 中的 *option* 强制转换为布尔值的便捷方法。 请注意选项所接受的值为 ``'1'``, ``'yes'``, " +"``'true'`` 和 ``'on'``,它们会使得此方法返回 ``True``,以及 ``'0'``, ``'no'``, ``'false'`` " +"和 ``'off'``,它们会使得此方法返回 ``False``。 这些字符串值会以对大小写不敏感的方式被检测。 任何其他值都将导致引发 " +":exc:`ValueError`。 参见 :meth:`get` 获取对于 *raw*, *vars* 和 *fallback* 的解释。" + +#: ../../library/configparser.rst:1115 +msgid "" +"When *section* is not given, return a list of *section_name*, " +"*section_proxy* pairs, including DEFAULTSECT." +msgstr "" +"当未给出 *section* 时,将返回由 *section_name*, *section_proxy* 对组成的列表,包括 DEFAULTSECT。" + +#: ../../library/configparser.rst:1118 +msgid "" +"Otherwise, return a list of *name*, *value* pairs for the options in the " +"given *section*. Optional arguments have the same meaning as for the " +":meth:`get` method." +msgstr "" +"在其他情况下,将返回给定的 *section* 中的 option 的 *name*, *value* 对组成的列表。 可选参数具有与 " +":meth:`get` 方法的参数相同的含义。" + +#: ../../library/configparser.rst:1122 +msgid "" +"Items present in *vars* no longer appear in the result. The previous " +"behaviour mixed actual parser options with variables provided for " +"interpolation." +msgstr "*vars* 中的条目将不在结果中出现。 之前的行为混淆了实际的解析器选项和为插值提供的变量。" + +#: ../../library/configparser.rst:1130 +msgid "" +"If the given section exists, set the given option to the specified value; " +"otherwise raise :exc:`NoSectionError`. *option* and *value* must be " +"strings; if not, :exc:`TypeError` is raised." +msgstr "" +"如果给定的节存在,则将所给出的选项设为指定的值;在其他情况下将引发 :exc:`NoSectionError`。 *option* 和 *value* " +"必须为字符串;如果不是则将引发 :exc:`TypeError`。" + +#: ../../library/configparser.rst:1137 +msgid "" +"Write a representation of the configuration to the specified :term:`file " +"object`, which must be opened in text mode (accepting strings). This " +"representation can be parsed by a future :meth:`read` call. If " +"*space_around_delimiters* is true, delimiters between keys and values are " +"surrounded by spaces." +msgstr "" +"将配置的表示形式写入指定的 :term:`file object`,该对象必须以文本模式打开(接受字符串)。 此表示形式可由将来的 " +":meth:`read` 调用进行解析。 如果 *space_around_delimiters* 为真值,键和值之前的分隔符两边将加上空格。" + +#: ../../library/configparser.rst:1145 +msgid "" +"Comments in the original configuration file are not preserved when writing " +"the configuration back. What is considered a comment, depends on the given " +"values for *comment_prefix* and *inline_comment_prefix*." +msgstr "" +"原始配置文件中的注释在写回配置时不会被保留。 具体哪些会被当作注释,取决于为 *comment_prefix* 和 " +"*inline_comment_prefix* 所指定的值。" + +#: ../../library/configparser.rst:1153 +msgid "" +"Remove the specified *option* from the specified *section*. If the section " +"does not exist, raise :exc:`NoSectionError`. If the option existed to be " +"removed, return :const:`True`; otherwise return :const:`False`." +msgstr "" +"将指定的 *option* 从指定的 *section* 中移除。 如果指定的节不存在则会引发 :exc:`NoSectionError`。 " +"如果要移除的选项存在则返回 :const:`True`;在其他情况下将返回 :const:`False`。" + +#: ../../library/configparser.rst:1161 +msgid "" +"Remove the specified *section* from the configuration. If the section in " +"fact existed, return ``True``. Otherwise return ``False``." +msgstr "从配置中移除指定的 *section*。 如果指定的节确实存在则返回 ``True``。 在其他情况下将返回 ``False``。" + +#: ../../library/configparser.rst:1167 +msgid "" +"Transforms the option name *option* as found in an input file or as passed " +"in by client code to the form that should be used in the internal " +"structures. The default implementation returns a lower-case version of " +"*option*; subclasses may override this or client code can set an attribute " +"of this name on instances to affect this behavior." +msgstr "" +"将选项名 *option* 转换为输入文件中的形式或客户端代码所传入的应当在内部结构中使用的形式。 默认实现将返回 *option* " +"的小写形式版本;子类可以重写此行为,或者客户端代码也可以在实例上设置一个具有此名称的属性来影响此行为。" + +#: ../../library/configparser.rst:1173 +msgid "" +"You don't need to subclass the parser to use this method, you can also set " +"it on an instance, to a function that takes a string argument and returns a " +"string. Setting it to ``str``, for example, would make option names case " +"sensitive::" +msgstr "" +"你不需要子类化解析器来使用此方法,你也可以在一个实例上设置它,或使用一个接受字符串参数并返回字符串的函数。 例如将它设为 ``str`` " +"将使得选项名称变得大小写敏感::" + +#: ../../library/configparser.rst:1181 +msgid "" +"Note that when reading configuration files, whitespace around the option " +"names is stripped before :meth:`optionxform` is called." +msgstr "请注意当读取配置文件时,选项名称两边的空格将在调用 :meth:`optionxform` 之前被去除。" + +#: ../../library/configparser.rst:1187 +msgid "Use :meth:`read_file` instead." +msgstr "使用 :meth:`read_file` 来代替。" + +#: ../../library/configparser.rst:1190 +msgid "" +":meth:`readfp` now iterates on *fp* instead of calling ``fp.readline()``." +msgstr ":meth:`readfp` 现在将在 *fp* 上执行迭代而不是调用 ``fp.readline()``。" + +#: ../../library/configparser.rst:1193 +msgid "" +"For existing code calling :meth:`readfp` with arguments which don't support " +"iteration, the following generator may be used as a wrapper around the file-" +"like object::" +msgstr "对于调用 :meth:`readfp` 时传入不支持迭代的参数的现有代码,可以在文件类对象外使用以下生成器作为包装器::" + +#: ../../library/configparser.rst:1203 +msgid "" +"Instead of ``parser.readfp(fp)`` use " +"``parser.read_file(readline_generator(fp))``." +msgstr "" +"不再使用 ``parser.readfp(fp)`` 而是改用 " +"``parser.read_file(readline_generator(fp))``。" + +#: ../../library/configparser.rst:1209 +msgid "" +"The maximum depth for recursive interpolation for :meth:`get` when the *raw*" +" parameter is false. This is relevant only when the default *interpolation*" +" is used." +msgstr "" +"当 *raw* 形参为假值时 :meth:`get` 所采用的递归插值的最大深度。 这只在使用默认的 *interpolation* 时会起作用。" + +#: ../../library/configparser.rst:1217 +msgid "RawConfigParser Objects" +msgstr "RawConfigParser 对象" + +#: ../../library/configparser.rst:1227 +msgid "" +"Legacy variant of the :class:`ConfigParser`. It has interpolation disabled " +"by default and allows for non-string section names, option names, and values" +" via its unsafe ``add_section`` and ``set`` methods, as well as the legacy " +"``defaults=`` keyword argument handling." +msgstr "" +"旧式 :class:`ConfigParser`。 它默认禁用插值并且允许通过不安全的 ``add_section`` 和 ``set`` 方法以及旧式" +" ``defaults=`` 关键字参数处理来设置非字符串的节名、选项名和值。" + +#: ../../library/configparser.rst:1237 +msgid "" +"Consider using :class:`ConfigParser` instead which checks types of the " +"values to be stored internally. If you don't want interpolation, you can " +"use ``ConfigParser(interpolation=None)``." +msgstr "" +"考虑改用 :class:`ConfigParser`,它会检查内部保存的值的类型。 如果你不想要插值,你可以使用 " +"``ConfigParser(interpolation=None)``。" + +#: ../../library/configparser.rst:1244 +msgid "" +"Add a section named *section* to the instance. If a section by the given " +"name already exists, :exc:`DuplicateSectionError` is raised. If the " +"*default section* name is passed, :exc:`ValueError` is raised." +msgstr "" +"向实例添加一个名为 *section* 的节。 如果给定名称的节已存在,将会引发 :exc:`DuplicateSectionError`。 如果传入了" +" *default section* 名称,则会引发 :exc:`ValueError`。" + +#: ../../library/configparser.rst:1248 +msgid "" +"Type of *section* is not checked which lets users create non-string named " +"sections. This behaviour is unsupported and may cause internal errors." +msgstr "不检查 *section* 以允许用户创建以非字符串命名的节。 此行为已不受支持并可能导致内部错误。" + +#: ../../library/configparser.rst:1254 +msgid "" +"If the given section exists, set the given option to the specified value; " +"otherwise raise :exc:`NoSectionError`. While it is possible to use " +":class:`RawConfigParser` (or :class:`ConfigParser` with *raw* parameters set" +" to true) for *internal* storage of non-string values, full functionality " +"(including interpolation and output to files) can only be achieved using " +"string values." +msgstr "" +"如果给定的节存在,则将给定的选项设为指定的值;在其他情况下将引发 :exc:`NoSectionError`。 虽然可能使用 " +":class:`RawConfigParser` (或使用 :class:`ConfigParser` 并将 *raw* 形参设为真值) " +"以便实现非字符串值的 *internal* 存储,但是完整功能(包括插值和输出到文件)只能使用字符串值来实现。" + +#: ../../library/configparser.rst:1261 +msgid "" +"This method lets users assign non-string values to keys internally. This " +"behaviour is unsupported and will cause errors when attempting to write to a" +" file or get it in non-raw mode. **Use the mapping protocol API** which " +"does not allow such assignments to take place." +msgstr "" +"此方法允许用户在内部将非字符串值赋给键。 此行为已不受支持并会在尝试写入到文件或在非原始模式下获取数据时导致错误。 **请使用映射协议 " +"API**,它不允许出现这样的赋值。" + +#: ../../library/configparser.rst:1268 +msgid "Exceptions" +msgstr "异常" + +#: ../../library/configparser.rst:1272 +msgid "Base class for all other :mod:`configparser` exceptions." +msgstr "所有其他 :mod:`configparser` 异常的基类。" + +#: ../../library/configparser.rst:1277 +msgid "Exception raised when a specified section is not found." +msgstr "当找不到指定节时引发的异常。" + +#: ../../library/configparser.rst:1282 +msgid "" +"Exception raised if :meth:`add_section` is called with the name of a section" +" that is already present or in strict parsers when a section if found more " +"than once in a single input file, string or dictionary." +msgstr "" +"当调用 :meth:`add_section` 时传入已存在的节名称,或者在严格解析器中当单个输入文件、字符串或字典内出现重复的节时引发的异常。" + +#: ../../library/configparser.rst:1286 +msgid "" +"Optional ``source`` and ``lineno`` attributes and arguments to " +":meth:`__init__` were added." +msgstr "将可选的 ``source`` 和 ``lineno`` 属性和参数添加到 :meth:`__init__`。" + +#: ../../library/configparser.rst:1293 +msgid "" +"Exception raised by strict parsers if a single option appears twice during " +"reading from a single file, string or dictionary. This catches misspellings " +"and case sensitivity-related errors, e.g. a dictionary may have two keys " +"representing the same case-insensitive configuration key." +msgstr "" +"当单个选项在从单个文件、字符串或字典读取时出现两次时引发的异常。 " +"这会捕获拼写错误和大小写敏感相关的错误,例如一个字典可能包含两个键分别代表同一个大小写不敏感的配置键。" + +#: ../../library/configparser.rst:1301 +msgid "" +"Exception raised when a specified option is not found in the specified " +"section." +msgstr "当指定的选项未在指定的节中被找到时引发的异常。" + +#: ../../library/configparser.rst:1307 +msgid "" +"Base class for exceptions raised when problems occur performing string " +"interpolation." +msgstr "当执行字符串插值发生问题时所引发的异常的基类。" + +#: ../../library/configparser.rst:1313 +msgid "" +"Exception raised when string interpolation cannot be completed because the " +"number of iterations exceeds :const:`MAX_INTERPOLATION_DEPTH`. Subclass of " +":exc:`InterpolationError`." +msgstr "" +"当字符串插值由于迭代次数超出 :const:`MAX_INTERPOLATION_DEPTH` 而无法完成所引发的异常。 为 " +":exc:`InterpolationError` 的子类。" + +#: ../../library/configparser.rst:1320 +msgid "" +"Exception raised when an option referenced from a value does not exist. " +"Subclass of :exc:`InterpolationError`." +msgstr "当从某个值引用的选项并不存在时引发的异常。 为 :exc:`InterpolationError` 的子类。" + +#: ../../library/configparser.rst:1326 +msgid "" +"Exception raised when the source text into which substitutions are made does" +" not conform to the required syntax. Subclass of :exc:`InterpolationError`." +msgstr "当将要执行替换的源文本不符合要求的语法时引发的异常。 为 :exc:`InterpolationError` 的子类。" + +#: ../../library/configparser.rst:1332 +msgid "" +"Exception raised when attempting to parse a file which has no section " +"headers." +msgstr "当尝试解析一个不带节标头的文件时引发的异常。" + +#: ../../library/configparser.rst:1338 +msgid "Exception raised when errors occur attempting to parse a file." +msgstr "当尝试解析一个文件而发生错误时引发的异常。" + +#: ../../library/configparser.rst:1340 +msgid "" +"The ``filename`` attribute and :meth:`__init__` argument were renamed to " +"``source`` for consistency." +msgstr "``filename`` 属性和 :meth:`__init__` 参数被重命名为 ``source`` 以保持一致性。" + +#: ../../library/configparser.rst:1346 +msgid "Footnotes" +msgstr "备注" + +#: ../../library/configparser.rst:1347 +msgid "" +"Config parsers allow for heavy customization. If you are interested in " +"changing the behaviour outlined by the footnote reference, consult the " +"`Customizing Parser Behaviour`_ section." +msgstr "" +"配置解析器允许重度定制。 如果你有兴趣改变脚注说明中所介绍的行为,请参阅 `Customizing Parser Behaviour`_ 一节。" diff --git a/library/constants.po b/library/constants.po new file mode 100644 index 000000000..1083749df --- /dev/null +++ b/library/constants.po @@ -0,0 +1,162 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) 2001-2022, Python Software Foundation +# This file is distributed under the same license as the Python package. +# FIRST AUTHOR , YEAR. +# +# Translators: +# Alpha Du , 2019 +# Freesand Leo , 2020 +# woclass, 2021 +# +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: Python 3.9\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2022-11-04 14:34+0000\n" +"PO-Revision-Date: 2017-02-16 23:04+0000\n" +"Last-Translator: woclass, 2021\n" +"Language-Team: Chinese (China) (https://www.transifex.com/python-doc/teams/5390/zh_CN/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: zh_CN\n" +"Plural-Forms: nplurals=1; plural=0;\n" + +#: ../../library/constants.rst:4 +msgid "Built-in Constants" +msgstr "内置常量" + +#: ../../library/constants.rst:6 +msgid "A small number of constants live in the built-in namespace. They are:" +msgstr "有少数的常量存在于内置命名空间中。 它们是:" + +#: ../../library/constants.rst:10 +msgid "" +"The false value of the :class:`bool` type. Assignments to ``False`` are " +"illegal and raise a :exc:`SyntaxError`." +msgstr ":class:`bool` 类型的假值。 给 ``False`` 赋值是非法的并会引发 :exc:`SyntaxError`。" + +#: ../../library/constants.rst:16 +msgid "" +"The true value of the :class:`bool` type. Assignments to ``True`` are " +"illegal and raise a :exc:`SyntaxError`." +msgstr ":class:`bool` 类型的真值。 给 ``True`` 赋值是非法的并会引发 :exc:`SyntaxError`。" + +#: ../../library/constants.rst:22 +msgid "" +"The sole value of the type ``NoneType``. ``None`` is frequently used to " +"represent the absence of a value, as when default arguments are not passed " +"to a function. Assignments to ``None`` are illegal and raise a " +":exc:`SyntaxError`." +msgstr "" +"``NoneType`` 类型的唯一值。 ``None`` 经常用于表示缺少值,当因为默认参数未传递给函数时。 给 ``None`` " +"赋值是非法的并会引发 :exc:`SyntaxError`。" + +#: ../../library/constants.rst:29 +msgid "" +"Special value which should be returned by the binary special methods (e.g. " +":meth:`__eq__`, :meth:`__lt__`, :meth:`__add__`, :meth:`__rsub__`, etc.) to " +"indicate that the operation is not implemented with respect to the other " +"type; may be returned by the in-place binary special methods (e.g. " +":meth:`__imul__`, :meth:`__iand__`, etc.) for the same purpose. It should " +"not be evaluated in a boolean context." +msgstr "" +"双目运算特殊方法(如 :meth:`__eq__`, :meth:`__lt__`, :meth:`__add__`, :meth:`__rsub__`" +" 等)应返回的特殊值,用于表示运算没有针对其他类型的实现;也可由原地双目运算特殊方法(如 :meth:`__imul__`, " +":meth:`__iand__` 等)出于同样的目的而返回。 它不应被作为布尔值来解读。" + +#: ../../library/constants.rst:38 +msgid "" +"When a binary (or in-place) method returns ``NotImplemented`` the " +"interpreter will try the reflected operation on the other type (or some " +"other fallback, depending on the operator). If all attempts return " +"``NotImplemented``, the interpreter will raise an appropriate exception. " +"Incorrectly returning ``NotImplemented`` will result in a misleading error " +"message or the ``NotImplemented`` value being returned to Python code." +msgstr "" +"当二进制(或就地)方法返回 ``NotImplemented`` 时,解释器将尝试对另一种类型(或其他一些回滚操作,取决于运算符)的反射操作。 " +"如果所有尝试都返回 ``NotImplemented``,则解释器将引发适当的异常。 错误返回的 ``NotImplemented`` " +"将导致误导性错误消息或返回到 Python 代码中的 ``NotImplemented`` 值。" + +#: ../../library/constants.rst:45 +msgid "See :ref:`implementing-the-arithmetic-operations` for examples." +msgstr "参见 :ref:`implementing-the-arithmetic-operations` 为例。" + +#: ../../library/constants.rst:49 +msgid "" +"``NotImplementedError`` and ``NotImplemented`` are not interchangeable, even" +" though they have similar names and purposes. See :exc:`NotImplementedError`" +" for details on when to use it." +msgstr "" +"``NotImplementedError`` 和 ``NotImplemented`` 不可互换,即使它们有相似的名称和用途。 " +"有关何时使用它的详细信息,请参阅 :exc:`NotImplementedError`。" + +#: ../../library/constants.rst:53 +msgid "" +"Evaluating ``NotImplemented`` in a boolean context is deprecated. While it " +"currently evaluates as true, it will emit a :exc:`DeprecationWarning`. It " +"will raise a :exc:`TypeError` in a future version of Python." +msgstr "" +"作为布尔值来解读 ``NotImplemented`` 已被弃用。 虽然它目前会被解读为真值,但将同时发出 " +":exc:`DeprecationWarning`。 它将在未来的 Python 版本中引发 :exc:`TypeError`。" + +#: ../../library/constants.rst:62 +msgid "" +"The same as the ellipsis literal \"``...``\". Special value used mostly in " +"conjunction with extended slicing syntax for user-defined container data " +"types." +msgstr "与省略号文字字面 “``...``” 相同。 特殊值主要与用户定义的容器数据类型的扩展切片语法结合使用。" + +#: ../../library/constants.rst:68 +msgid "" +"This constant is true if Python was not started with an :option:`-O` option." +" See also the :keyword:`assert` statement." +msgstr "如果 Python 没有以 :option:`-O` 选项启动,则此常量为真值。 另请参见 :keyword:`assert` 语句。" + +#: ../../library/constants.rst:74 +msgid "" +"The names :data:`None`, :data:`False`, :data:`True` and :data:`__debug__` " +"cannot be reassigned (assignments to them, even as an attribute name, raise " +":exc:`SyntaxError`), so they can be considered \"true\" constants." +msgstr "" +"变量名 :data:`None`,:data:`False`,:data:`True` 和 :data:`__debug__` " +"无法重新赋值(赋值给它们,即使是属性名,将引发 :exc:`SyntaxError` ),所以它们可以被认为是“真正的”常数。" + +#: ../../library/constants.rst:80 +msgid "Constants added by the :mod:`site` module" +msgstr "由 :mod:`site` 模块添加的常量" + +#: ../../library/constants.rst:82 +msgid "" +"The :mod:`site` module (which is imported automatically during startup, " +"except if the :option:`-S` command-line option is given) adds several " +"constants to the built-in namespace. They are useful for the interactive " +"interpreter shell and should not be used in programs." +msgstr "" +":mod:`site` 模块(在启动期间自动导入,除非给出 :option:`-S` 命令行选项)将几个常量添加到内置命名空间。 它们对交互式解释器 " +"shell 很有用,并且不应在程序中使用。" + +#: ../../library/constants.rst:90 +msgid "" +"Objects that when printed, print a message like \"Use quit() or Ctrl-D (i.e." +" EOF) to exit\", and when called, raise :exc:`SystemExit` with the specified" +" exit code." +msgstr "" +"当打印此对象时,会打印出一条消息,例如“Use quit() or Ctrl-D (i.e. EOF) to " +"exit”,当调用此对象时,将使用指定的退出代码来引发 :exc:`SystemExit`。" + +#: ../../library/constants.rst:97 +msgid "" +"Objects that when printed or called, print the text of copyright or credits," +" respectively." +msgstr "打印或调用的对象分别打印版权或作者的文本。" + +#: ../../library/constants.rst:102 +msgid "" +"Object that when printed, prints the message \"Type license() to see the " +"full license text\", and when called, displays the full license text in a " +"pager-like fashion (one screen at a time)." +msgstr "" +"当打印此对象时,会打印出一条消息“Type license() to see the full license " +"text”,当调用此对象时,将以分页形式显示完整的许可证文本(每次显示一屏)。" diff --git a/library/contextlib.po b/library/contextlib.po new file mode 100644 index 000000000..a59652a92 --- /dev/null +++ b/library/contextlib.po @@ -0,0 +1,861 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) 2001-2025, Python Software Foundation +# This file is distributed under the same license as the Python package. +# FIRST AUTHOR , YEAR. +# +# Translators: +# Alpha Du , 2019 +# nick <2330458484@qq.com>, 2019 +# zeroswan , 2020 +# Heyi Tang , 2020 +# Nyuan Zhang, 2022 +# Freesand Leo , 2022 +# Rafael Fontenelle , 2025 +# +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: Python 3.9\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2025-02-07 16:40+0000\n" +"PO-Revision-Date: 2017-02-16 23:04+0000\n" +"Last-Translator: Rafael Fontenelle , 2025\n" +"Language-Team: Chinese (China) (https://app.transifex.com/python-doc/teams/5390/zh_CN/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: zh_CN\n" +"Plural-Forms: nplurals=1; plural=0;\n" + +#: ../../library/contextlib.rst:2 +msgid "" +":mod:`!contextlib` --- Utilities for :keyword:`!with`\\ -statement contexts" +msgstr ":mod:`!contextlib` --- 为 :keyword:`!with`\\ 语句上下文提供的工具" + +#: ../../library/contextlib.rst:7 +msgid "**Source code:** :source:`Lib/contextlib.py`" +msgstr "**源代码** :source:`Lib/contextlib.py`" + +#: ../../library/contextlib.rst:11 +msgid "" +"This module provides utilities for common tasks involving the " +":keyword:`with` statement. For more information see also " +":ref:`typecontextmanager` and :ref:`context-managers`." +msgstr "" +"此模块为涉及 :keyword:`with` 语句的常见任务提供了实用的工具。更多信息请参见 :ref:`typecontextmanager` 和 " +":ref:`context-managers`。" + +#: ../../library/contextlib.rst:17 +msgid "Utilities" +msgstr "工具" + +#: ../../library/contextlib.rst:19 +msgid "Functions and classes provided:" +msgstr "提供的函数和类:" + +#: ../../library/contextlib.rst:23 +msgid "" +"An :term:`abstract base class` for classes that implement " +":meth:`object.__enter__` and :meth:`object.__exit__`. A default " +"implementation for :meth:`object.__enter__` is provided which returns " +"``self`` while :meth:`object.__exit__` is an abstract method which by " +"default returns ``None``. See also the definition of " +":ref:`typecontextmanager`." +msgstr "" +"一个为实现了 :meth:`object.__enter__` 与 :meth:`object.__exit__` 的类提供的 " +":term:`abstract base class`。为 :meth:`object.__enter__` 提供的一个默认实现是返回 ``self``" +" 而 :meth:`object.__exit__` 是一个默认返回 ``None`` 的抽象方法。 参见 " +":ref:`typecontextmanager` 的定义。" + +#: ../../library/contextlib.rst:34 +msgid "" +"An :term:`abstract base class` for classes that implement " +":meth:`object.__aenter__` and :meth:`object.__aexit__`. A default " +"implementation for :meth:`object.__aenter__` is provided which returns " +"``self`` while :meth:`object.__aexit__` is an abstract method which by " +"default returns ``None``. See also the definition of :ref:`async-context-" +"managers`." +msgstr "" +"一个为实现了 :meth:`object.__aenter__` 与 :meth:`object.__aexit__` 的类提供的 " +":term:`abstract base class`。 为 :meth:`object.__aenter__` 提供的一个默认实现是返回 " +"``self`` 而 :meth:`object.__aexit__` 是一个默认返回 ``None`` 的抽象方法。 参见 :ref:`async-" +"context-managers` 的定义。" + +#: ../../library/contextlib.rst:46 +msgid "" +"This function is a :term:`decorator` that can be used to define a factory " +"function for :keyword:`with` statement context managers, without needing to " +"create a class or separate :meth:`__enter__` and :meth:`__exit__` methods." +msgstr "" +"这个函数是一个 :term:`decorator` ,它可以定义一个支持 :keyword:`with` 语句上下文管理器的工厂函数, " +"而不需要创建一个类或区 :meth:`__enter__` 与 :meth:`__exit__` 方法。" + +#: ../../library/contextlib.rst:50 +msgid "" +"While many objects natively support use in with statements, sometimes a " +"resource needs to be managed that isn't a context manager in its own right, " +"and doesn't implement a ``close()`` method for use with " +"``contextlib.closing``" +msgstr "" +"尽管许多对象原生支持使用 with 语句,但有些需要被管理的资源并不是上下文管理器,并且没有实现 ``close()`` 方法而不能使用 " +"``contextlib.closing`` 。" + +#: ../../library/contextlib.rst:54 +msgid "" +"An abstract example would be the following to ensure correct resource " +"management::" +msgstr "下面是一个抽象的示例,展示如何确保正确的资源管理::" + +#: ../../library/contextlib.rst:73 +msgid "" +"The function being decorated must return a :term:`generator`-iterator when " +"called. This iterator must yield exactly one value, which will be bound to " +"the targets in the :keyword:`with` statement's :keyword:`!as` clause, if " +"any." +msgstr "" +"被装饰的函数在被调用时,必须返回一个 :term:`generator` 迭代器。 这个迭代器必须只 yield 一个值出来,这个值会被用在 " +":keyword:`with` 语句中,绑定到 :keyword:`!as` 后面的变量,如果给定了的话。" + +#: ../../library/contextlib.rst:77 +msgid "" +"At the point where the generator yields, the block nested in the " +":keyword:`with` statement is executed. The generator is then resumed after " +"the block is exited. If an unhandled exception occurs in the block, it is " +"reraised inside the generator at the point where the yield occurred. Thus, " +"you can use a :keyword:`try`...\\ :keyword:`except`...\\ :keyword:`finally` " +"statement to trap the error (if any), or ensure that some cleanup takes " +"place. If an exception is trapped merely in order to log it or to perform " +"some action (rather than to suppress it entirely), the generator must " +"reraise that exception. Otherwise the generator context manager will " +"indicate to the :keyword:`!with` statement that the exception has been " +"handled, and execution will resume with the statement immediately following " +"the :keyword:`!with` statement." +msgstr "" +"当生成器发生 yield 时,嵌套在 :keyword:`with` 语句中的语句体会被执行。 语句体执行完毕离开之后,该生成器将被恢复执行。 " +"如果在该语句体中发生了未处理的异常,则该异常会在生成器发生 yield 时重新被引发。 因此,你可以使用 :keyword:`try`...\\ " +":keyword:`except`...\\ :keyword:`finally` 语句来捕获该异常(如果有的话),或确保进行了一些清理。 " +"如果仅出于记录日志或执行某些操作(而非完全抑制异常)的目的捕获了异常,生成器必须重新引发该异常。 否则生成器的上下文管理器将向 " +":keyword:`!with` 语句指示该异常已经被处理,程序将立即在 :keyword:`!with` 语句之后恢复并继续执行。" + +#: ../../library/contextlib.rst:89 +msgid "" +":func:`contextmanager` uses :class:`ContextDecorator` so the context " +"managers it creates can be used as decorators as well as in :keyword:`with` " +"statements. When used as a decorator, a new generator instance is implicitly" +" created on each function call (this allows the otherwise \"one-shot\" " +"context managers created by :func:`contextmanager` to meet the requirement " +"that context managers support multiple invocations in order to be used as " +"decorators)." +msgstr "" +":func:`contextmanager` 使用 :class:`ContextDecorator` 因此它创建的上下文管理器不仅可以用在 " +":keyword:`with` 语句中,还可以用作一个装饰器。当它用作一个装饰器时,每一次函数调用时都会隐式创建一个新的生成器实例(这使得 " +":func:`contextmanager` 创建的上下文管理器满足了支持多次调用以用作装饰器的需求,而非“一次性”的上下文管理器)。" + +#: ../../library/contextlib.rst:96 +msgid "Use of :class:`ContextDecorator`." +msgstr ":class:`ContextDecorator` 的使用。" + +#: ../../library/contextlib.rst:102 +msgid "" +"Similar to :func:`~contextlib.contextmanager`, but creates an " +":ref:`asynchronous context manager `." +msgstr "" +"与 :func:`~contextlib.contextmanager` 类似,但创建的是 :ref:`asynchronous context " +"manager ` 。" + +#: ../../library/contextlib.rst:105 +msgid "" +"This function is a :term:`decorator` that can be used to define a factory " +"function for :keyword:`async with` statement asynchronous context managers, " +"without needing to create a class or separate :meth:`__aenter__` and " +":meth:`__aexit__` methods. It must be applied to an :term:`asynchronous " +"generator` function." +msgstr "" +"这个函数是一个 :term:`decorator` ,它可以定义一个支持 :keyword:`async with` 语句的异步上下文管理器的工厂函数," +" 而不需要创建一个类或区分 :meth:`__aenter__` 与 :meth:`__aexit__` 方法。它必须被作用在一个 " +":term:`asynchronous generator` 函数上" + +#: ../../library/contextlib.rst:111 +msgid "A simple example::" +msgstr "一个简单的示例:" + +#: ../../library/contextlib.rst:132 +msgid "" +"Return a context manager that closes *thing* upon completion of the block. " +"This is basically equivalent to::" +msgstr "返回一个在语句块执行完成时关闭 *things* 的上下文管理器。这基本上等价于:" + +#: ../../library/contextlib.rst:144 +msgid "And lets you write code like this::" +msgstr "并允许你编写这样的代码:" + +#: ../../library/contextlib.rst:153 +msgid "" +"without needing to explicitly close ``page``. Even if an error occurs, " +"``page.close()`` will be called when the :keyword:`with` block is exited." +msgstr "" +"而无需显式地关闭 ``page`` 。 即使发生错误,在退出 :keyword:`with` 语句块时, ``page.close()`` " +"也同样会被调用。" + +#: ../../library/contextlib.rst:161 +msgid "" +"Return a context manager that returns *enter_result* from ``__enter__``, but" +" otherwise does nothing. It is intended to be used as a stand-in for an " +"optional context manager, for example::" +msgstr "" +"返回一个从 ``__enter__`` 返回 *enter_result* " +"的上下文管理器,除此之外不执行任何操作。它旨在用于可选上下文管理器的一种替代,例如:" + +#: ../../library/contextlib.rst:175 +msgid "An example using *enter_result*::" +msgstr "一个使用 *enter_result* 的例子:" + +#: ../../library/contextlib.rst:193 +msgid "" +"Return a context manager that suppresses any of the specified exceptions if " +"they occur in the body of a :keyword:`!with` statement and then resumes " +"execution with the first statement following the end of the :keyword:`!with`" +" statement." +msgstr "" +"返回一个当指定的异常在 :keyword:`!with` 语句体中发生时会屏蔽它们然后从 :keyword:`!with` " +"语句结束后的第一条语言开始恢复执行的上下文管理器。" + +#: ../../library/contextlib.rst:198 +msgid "" +"As with any other mechanism that completely suppresses exceptions, this " +"context manager should be used only to cover very specific errors where " +"silently continuing with program execution is known to be the right thing to" +" do." +msgstr "与完全抑制异常的任何其他机制一样,该上下文管理器应当只用来抑制非常具体的错误,并确保该场景下静默地继续执行程序是通用的正确做法。" + +#: ../../library/contextlib.rst:203 +msgid "For example::" +msgstr "例如:" + +#: ../../library/contextlib.rst:213 +msgid "This code is equivalent to::" +msgstr "这段代码等价于:" + +#: ../../library/contextlib.rst:225 ../../library/contextlib.rst:265 +#: ../../library/contextlib.rst:275 +msgid "This context manager is :ref:`reentrant `." +msgstr "该上下文管理器是 :ref:`reentrant ` 。" + +#: ../../library/contextlib.rst:232 +msgid "" +"Context manager for temporarily redirecting :data:`sys.stdout` to another " +"file or file-like object." +msgstr "用于将 :data:`sys.stdout` 临时重定向到一个文件或类文件对象的上下文管理器。" + +#: ../../library/contextlib.rst:235 +msgid "" +"This tool adds flexibility to existing functions or classes whose output is " +"hardwired to stdout." +msgstr "该工具给已有的将输出硬编码写到 stdout 的函数或类提供了额外的灵活性。" + +#: ../../library/contextlib.rst:238 +msgid "" +"For example, the output of :func:`help` normally is sent to *sys.stdout*. " +"You can capture that output in a string by redirecting the output to an " +":class:`io.StringIO` object. The replacement stream is returned from the " +"``__enter__`` method and so is available as the target of the " +":keyword:`with` statement::" +msgstr "" +"例如, :func:`help` 的输出通常会被发送到 *sys.stdout*。 你可以通过将输出重定向到一个 " +":class:`io.StringIO` 对象来将该输出捕获到字符串。 替换的流是由 ``__enter__`` 返回的因此可以被用作 " +":keyword:`with` 语句的目标::" + +#: ../../library/contextlib.rst:248 +msgid "" +"To send the output of :func:`help` to a file on disk, redirect the output to" +" a regular file::" +msgstr "如果要把 :func:`help` 的输出写到磁盘上的一个文件,重定向该输出到一个常规文件:" + +#: ../../library/contextlib.rst:255 +msgid "To send the output of :func:`help` to *sys.stderr*::" +msgstr "如果要把 :func:`help` 的输出写到 *sys.stderr* :" + +#: ../../library/contextlib.rst:260 +msgid "" +"Note that the global side effect on :data:`sys.stdout` means that this " +"context manager is not suitable for use in library code and most threaded " +"applications. It also has no effect on the output of subprocesses. However, " +"it is still a useful approach for many utility scripts." +msgstr "" +"需要注意的点在于, :data:`sys.stdout` " +"的全局副作用意味着此上下文管理器不适合在库代码和大多数多线程应用程序中使用。它对子进程的输出没有影响。不过对于许多工具脚本而言,它仍然是一个有用的方法。" + +#: ../../library/contextlib.rst:272 +msgid "" +"Similar to :func:`~contextlib.redirect_stdout` but redirecting " +":data:`sys.stderr` to another file or file-like object." +msgstr "" +"与 :func:`~contextlib.redirect_stdout` 类似,不过是将 :data:`sys.stderr` " +"重定向到一个文件或类文件对象。" + +#: ../../library/contextlib.rst:282 +msgid "" +"A base class that enables a context manager to also be used as a decorator." +msgstr "一个使上下文管理器能用作装饰器的基类。" + +#: ../../library/contextlib.rst:284 +msgid "" +"Context managers inheriting from ``ContextDecorator`` have to implement " +"``__enter__`` and ``__exit__`` as normal. ``__exit__`` retains its optional " +"exception handling even when used as a decorator." +msgstr "" +"与往常一样,继承自 ``ContextDecorator``  的上下文管理器必须实现 ``__enter__`` 与 ``__exit__`` " +"。即使用作装饰器, ``__exit__`` 依旧会保持可能的异常处理。" + +#: ../../library/contextlib.rst:288 +msgid "" +"``ContextDecorator`` is used by :func:`contextmanager`, so you get this " +"functionality automatically." +msgstr "``ContextDecorator`` 被用在 :func:`contextmanager` 中,因此你自然获得了这项功能。" + +#: ../../library/contextlib.rst:291 +msgid "Example of ``ContextDecorator``::" +msgstr "``ContextDecorator`` 的示例::" + +#: ../../library/contextlib.rst:320 +msgid "" +"This change is just syntactic sugar for any construct of the following " +"form::" +msgstr "这个改动只是针对如下形式的一个语法糖:" + +#: ../../library/contextlib.rst:326 +msgid "``ContextDecorator`` lets you instead write::" +msgstr "``ContextDecorator`` 使得你可以这样改写:" + +#: ../../library/contextlib.rst:332 +msgid "" +"It makes it clear that the ``cm`` applies to the whole function, rather than" +" just a piece of it (and saving an indentation level is nice, too)." +msgstr "这能清楚地表明, ``cm`` 作用于整个函数,而不仅仅是函数的一部分(同时也能保持不错的缩进层级)。" + +#: ../../library/contextlib.rst:335 +msgid "" +"Existing context managers that already have a base class can be extended by " +"using ``ContextDecorator`` as a mixin class::" +msgstr "现有的上下文管理器即使已经有基类,也可以使用 ``ContextDecorator`` 作为混合类进行扩展:" + +#: ../../library/contextlib.rst:348 +msgid "" +"As the decorated function must be able to be called multiple times, the " +"underlying context manager must support use in multiple :keyword:`with` " +"statements. If this is not the case, then the original construct with the " +"explicit :keyword:`!with` statement inside the function should be used." +msgstr "" +"由于被装饰的函数必须能够被多次调用,因此对应的上下文管理器必须支持在多个 :keyword:`with` " +"语句中使用。如果不是这样,则应当使用原来的具有显式 :keyword:`!with` 语句的形式使用该上下文管理器。" + +#: ../../library/contextlib.rst:358 +msgid "" +"A context manager that is designed to make it easy to programmatically " +"combine other context managers and cleanup functions, especially those that " +"are optional or otherwise driven by input data." +msgstr "该上下文管理器的设计目标是使得在编码中组合其他上下文管理器和清理函数更加容易,尤其是那些可选的或由输入数据驱动的上下文管理器。" + +#: ../../library/contextlib.rst:362 +msgid "" +"For example, a set of files may easily be handled in a single with statement" +" as follows::" +msgstr "例如,通过一个如下的 with 语句可以很容易处理一组文件:" + +#: ../../library/contextlib.rst:371 +msgid "" +"The :meth:`__enter__` method returns the :class:`ExitStack` instance, and " +"performs no additional operations." +msgstr ":meth:`__enter__` 方法返回 :class:`ExitStack` 实例,并且不会执行额外的操作。" + +#: ../../library/contextlib.rst:374 +msgid "" +"Each instance maintains a stack of registered callbacks that are called in " +"reverse order when the instance is closed (either explicitly or implicitly " +"at the end of a :keyword:`with` statement). Note that callbacks are *not* " +"invoked implicitly when the context stack instance is garbage collected." +msgstr "" +"每个实例维护一个注册了一组回调的栈,这些回调在实例关闭时以相反的顺序被调用(显式或隐式地在 :keyword:`with` " +"语句的末尾)。请注意,当一个栈实例被垃圾回收时,这些回调将 *不会* 被隐式调用。" + +#: ../../library/contextlib.rst:379 +msgid "" +"This stack model is used so that context managers that acquire their " +"resources in their ``__init__`` method (such as file objects) can be handled" +" correctly." +msgstr "通过使用这个基于栈的模型,那些通过 ``__init__`` 方法获取资源的上下文管理器(如文件对象)能够被正确处理。" + +#: ../../library/contextlib.rst:383 +msgid "" +"Since registered callbacks are invoked in the reverse order of registration," +" this ends up behaving as if multiple nested :keyword:`with` statements had " +"been used with the registered set of callbacks. This even extends to " +"exception handling - if an inner callback suppresses or replaces an " +"exception, then outer callbacks will be passed arguments based on that " +"updated state." +msgstr "" +"由于注册的回调函数是按照与注册相反的顺序调用的,因此最终的行为就像多个嵌套的 :keyword:`with` " +"语句用在这些注册的回调函数上。这个行为甚至扩展到了异常处理:如果内部的回调函数抑制或替换了异常,则外部回调收到的参数是基于该更新后的状态得到的。" + +#: ../../library/contextlib.rst:390 +msgid "" +"This is a relatively low level API that takes care of the details of " +"correctly unwinding the stack of exit callbacks. It provides a suitable " +"foundation for higher level context managers that manipulate the exit stack " +"in application specific ways." +msgstr "" +"这是一个相对底层的 " +"API,它负责正确处理栈里回调退出时依次展开的细节。它为相对高层的上下文管理器提供了一个合适的基础,使得它能根据应用程序的需求使用特定方式操作栈。" + +#: ../../library/contextlib.rst:399 +msgid "" +"Enters a new context manager and adds its :meth:`__exit__` method to the " +"callback stack. The return value is the result of the context manager's own " +":meth:`__enter__` method." +msgstr "" +"进入一个新的上下文管理器并将其 :meth:`__exit__` 方法添加到回调栈中。 返回值是该上下文管理器自己的 :meth:`__enter__`" +" 方法的输出结果。" + +#: ../../library/contextlib.rst:403 +msgid "" +"These context managers may suppress exceptions just as they normally would " +"if used directly as part of a :keyword:`with` statement." +msgstr "这些上下文管理器可能会屏蔽异常就如当它们作为 :keyword:`with` 语句的一部分直接使用时通常表现的行为一样。" + +#: ../../library/contextlib.rst:408 +msgid "" +"Adds a context manager's :meth:`__exit__` method to the callback stack." +msgstr "将一个上下文管理器的 :meth:`__exit__` 方法添加到回调栈。" + +#: ../../library/contextlib.rst:410 +msgid "" +"As ``__enter__`` is *not* invoked, this method can be used to cover part of " +"an :meth:`__enter__` implementation with a context manager's own " +":meth:`__exit__` method." +msgstr "" +"由于 ``__enter__`` *没有* 被发起调用,此方法可以被用来通过一个上下文管理器自己的 :meth:`__exit__` 覆盖 " +":meth:`__enter__` 的部分实现。" + +#: ../../library/contextlib.rst:414 +msgid "" +"If passed an object that is not a context manager, this method assumes it is" +" a callback with the same signature as a context manager's :meth:`__exit__` " +"method and adds it directly to the callback stack." +msgstr "" +"如果传递了一个不是上下文管理器的对象,此方法将假定它是一个回调 具有与上下文管理器的 :meth:`__exit__` " +"方法相同的签名的回调并会直接将其添加到回调栈中。" + +#: ../../library/contextlib.rst:418 +msgid "" +"By returning true values, these callbacks can suppress exceptions the same " +"way context manager :meth:`__exit__` methods can." +msgstr "通过返回真值,这些回调可以通过与上下文管理器 :meth:`__exit__` 方法相同的方式屏蔽异常。" + +#: ../../library/contextlib.rst:421 +msgid "" +"The passed in object is returned from the function, allowing this method to " +"be used as a function decorator." +msgstr "传入的对象将被该函数返回,允许此方法作为函数装饰器使用。" + +#: ../../library/contextlib.rst:426 +msgid "" +"Accepts an arbitrary callback function and arguments and adds it to the " +"callback stack." +msgstr "接受一个任意的回调函数和参数并将其添加到回调栈。" + +#: ../../library/contextlib.rst:429 +msgid "" +"Unlike the other methods, callbacks added this way cannot suppress " +"exceptions (as they are never passed the exception details)." +msgstr "与其他方法不同,通过此方式添加的回调无法屏蔽异常(因为异常的细节不会被传递给它们)。" + +#: ../../library/contextlib.rst:432 +msgid "" +"The passed in callback is returned from the function, allowing this method " +"to be used as a function decorator." +msgstr "传入的回调将被该函数返回,允许此方法作为函数装饰器使用。" + +#: ../../library/contextlib.rst:437 +msgid "" +"Transfers the callback stack to a fresh :class:`ExitStack` instance and " +"returns it. No callbacks are invoked by this operation - instead, they will " +"now be invoked when the new stack is closed (either explicitly or implicitly" +" at the end of a :keyword:`with` statement)." +msgstr "" +"将回调栈传输到一个新的 :class:`ExitStack` 实例并返回它。 此操作不会唤起任何回调 —— " +"作为替代,现在当新栈被关闭时它们将(显式地或是在一条 :keyword:`with` 语句结束时隐式地)被唤起。" + +#: ../../library/contextlib.rst:442 +msgid "" +"For example, a group of files can be opened as an \"all or nothing\" " +"operation as follows::" +msgstr "例如,一组文件可以像下面这样以“一个都不能少”的操作方式被打开::" + +#: ../../library/contextlib.rst:456 +msgid "" +"Immediately unwinds the callback stack, invoking callbacks in the reverse " +"order of registration. For any context managers and exit callbacks " +"registered, the arguments passed in will indicate that no exception " +"occurred." +msgstr "立即展开回调栈,按注册时的相反顺序唤起其中的回调。 对于任何已注册的上下文管理器和退出回调,传入的参数将表明没有发生异常。" + +#: ../../library/contextlib.rst:463 +msgid "" +"An :ref:`asynchronous context manager `, similar to " +":class:`ExitStack`, that supports combining both synchronous and " +"asynchronous context managers, as well as having coroutines for cleanup " +"logic." +msgstr "" +"一个 :ref:`异步上下文管理器 `,类似于 " +":class:`ExitStack`,它支持组合同步和异步上下文管理器,并拥有针对清理逻辑的协程。" + +#: ../../library/contextlib.rst:468 +msgid "" +"The :meth:`close` method is not implemented, :meth:`aclose` must be used " +"instead." +msgstr ":meth:`close` 方法没有被实现,使用 :meth:`aclose` 替代。" + +#: ../../library/contextlib.rst:473 +msgid "" +"Similar to :meth:`enter_context` but expects an asynchronous context " +"manager." +msgstr "与 :meth:`enter_context` 相似,但是需要一个异步上下文管理器。" + +#: ../../library/contextlib.rst:478 +msgid "" +"Similar to :meth:`push` but expects either an asynchronous context manager " +"or a coroutine function." +msgstr "与 :meth:`push` 相似,但是需要一个异步上下文管理器或协程函数。" + +#: ../../library/contextlib.rst:483 +msgid "Similar to :meth:`callback` but expects a coroutine function." +msgstr "与 :meth:`callback` 相似,但是需要一个协程函数。" + +#: ../../library/contextlib.rst:487 +msgid "Similar to :meth:`close` but properly handles awaitables." +msgstr "和 :meth:`close` 相似,但是它正确处理了可等待对象。" + +#: ../../library/contextlib.rst:489 +msgid "Continuing the example for :func:`asynccontextmanager`::" +msgstr "从 :func:`asynccontextmanager` 的例子继续:" + +#: ../../library/contextlib.rst:501 +msgid "Examples and Recipes" +msgstr "例子和配方" + +#: ../../library/contextlib.rst:503 +msgid "" +"This section describes some examples and recipes for making effective use of" +" the tools provided by :mod:`contextlib`." +msgstr "本节描述了一些用于有效利用 :mod:`contextlib` 所提供的工具的示例和步骤说明。" + +#: ../../library/contextlib.rst:508 +msgid "Supporting a variable number of context managers" +msgstr "支持可变数量的上下文管理器" + +#: ../../library/contextlib.rst:510 +msgid "" +"The primary use case for :class:`ExitStack` is the one given in the class " +"documentation: supporting a variable number of context managers and other " +"cleanup operations in a single :keyword:`with` statement. The variability " +"may come from the number of context managers needed being driven by user " +"input (such as opening a user specified collection of files), or from some " +"of the context managers being optional::" +msgstr "" +":class:`ExitStack` 的主要应用场景已在该类的文档中给出:在单个 :keyword:`with` " +"语句中支持可变数量的上下文管理器和其他清理操作。 " +"这个可变性可以来自通过用户输入驱动所需的上下文管理器数量(例如打开用户所指定的文件集),或者来自将某些上下文管理器作为可选项。" + +#: ../../library/contextlib.rst:525 +msgid "" +"As shown, :class:`ExitStack` also makes it quite easy to use :keyword:`with`" +" statements to manage arbitrary resources that don't natively support the " +"context management protocol." +msgstr "" +"如上所示,:class:`ExitStack` 还让使用 :keyword:`with` 语句来管理任意非原生支持上下文管理协议的资源变得相当容易。" + +#: ../../library/contextlib.rst:531 +msgid "Catching exceptions from ``__enter__`` methods" +msgstr "捕获 ``__enter__`` 方法产生的异常" + +#: ../../library/contextlib.rst:533 +msgid "" +"It is occasionally desirable to catch exceptions from an ``__enter__`` " +"method implementation, *without* inadvertently catching exceptions from the " +":keyword:`with` statement body or the context manager's ``__exit__`` method." +" By using :class:`ExitStack` the steps in the context management protocol " +"can be separated slightly in order to allow this::" +msgstr "" +"有时人们会想要从 ``__enter__`` 方法的实现中捕获异常,而 *不会* 无意中捕获来自 :keyword:`with` 语句体或上下文管理器的" +" ``__exit__`` 方法的异常。 通过使用 :class:`ExitStack` 可以将上下文管理协议中的步骤稍微分开以允许这样做::" + +#: ../../library/contextlib.rst:548 +msgid "" +"Actually needing to do this is likely to indicate that the underlying API " +"should be providing a direct resource management interface for use with " +":keyword:`try`/:keyword:`except`/:keyword:`finally` statements, but not all " +"APIs are well designed in that regard. When a context manager is the only " +"resource management API provided, then :class:`ExitStack` can make it easier" +" to handle various situations that can't be handled directly in a " +":keyword:`with` statement." +msgstr "" +"实际上需要这样做很可能表明下层的 API 应该提供一个直接的资源管理接口以便与 " +":keyword:`try`/:keyword:`except`/:keyword:`finally` 语句配合使用,但并不是所有的 API " +"在这方面都设计得很好。 当上下文管理器是所提供的唯一资源管理 API 时,则 :class:`ExitStack` 可以让处理各种无法在 " +":keyword:`with` 语句中直接处理的情况变得更为容易。" + +#: ../../library/contextlib.rst:558 +msgid "Cleaning up in an ``__enter__`` implementation" +msgstr "在一个 ``__enter__`` 方法的实现中进行清理" + +#: ../../library/contextlib.rst:560 +msgid "" +"As noted in the documentation of :meth:`ExitStack.push`, this method can be " +"useful in cleaning up an already allocated resource if later steps in the " +":meth:`__enter__` implementation fail." +msgstr "" +"正如 :meth:`ExitStack.push` 的文档中所指出,如果在 :meth:`__enter__` " +"实现中的后续步骤失败则此方法在清理已分配的资源时将很有用处。" + +#: ../../library/contextlib.rst:564 +msgid "" +"Here's an example of doing this for a context manager that accepts resource " +"acquisition and release functions, along with an optional validation " +"function, and maps them to the context management protocol::" +msgstr "下面是为一个上下文管理器做这件事的例子,该上下文管理器可接受资源获取和释放函数,以及可选的验证函数,并将它们映射到上下文管理协议::" + +#: ../../library/contextlib.rst:604 +msgid "Replacing any use of ``try-finally`` and flag variables" +msgstr "替换任何对 ``try-finally`` 和旗标变量的使用" + +#: ../../library/contextlib.rst:606 +msgid "" +"A pattern you will sometimes see is a ``try-finally`` statement with a flag " +"variable to indicate whether or not the body of the ``finally`` clause " +"should be executed. In its simplest form (that can't already be handled just" +" by using an ``except`` clause instead), it looks something like this::" +msgstr "" +"一种你有时将看到的模式是 ``try-finally`` 语句附带一个旗标变量来指明 ``finally`` 子句体是否要被执行。 " +"在其最简单的形式中(它无法仅仅通过改用一条 ``except`` 子句来预先处理),看起来会是这样::" + +#: ../../library/contextlib.rst:620 +msgid "" +"As with any ``try`` statement based code, this can cause problems for " +"development and review, because the setup code and the cleanup code can end " +"up being separated by arbitrarily long sections of code." +msgstr "就如任何基于 ``try`` 语句的代码一样,这可能会导致开发和审查方面的问题,因为设置代码和清理代码最终可能会被任意长的代码部分所分隔。" + +#: ../../library/contextlib.rst:624 +msgid "" +":class:`ExitStack` makes it possible to instead register a callback for " +"execution at the end of a ``with`` statement, and then later decide to skip " +"executing that callback::" +msgstr "" +":class:`ExitStack` 将允许选择在一条 ``with`` 语句末尾注册一个用于执行的回调的替代方式,等以后再决定是否跳过该回调的执行::" + +#: ../../library/contextlib.rst:636 +msgid "" +"This allows the intended cleanup up behaviour to be made explicit up front, " +"rather than requiring a separate flag variable." +msgstr "这允许在事先显式地指明预期的清理行为,而不需要一个单独的旗标变量。" + +#: ../../library/contextlib.rst:639 +msgid "" +"If a particular application uses this pattern a lot, it can be simplified " +"even further by means of a small helper class::" +msgstr "如果某个应用程序大量使用此模式,则可以通过使用一个较小的辅助类来进一步地简化它::" + +#: ../../library/contextlib.rst:657 +msgid "" +"If the resource cleanup isn't already neatly bundled into a standalone " +"function, then it is still possible to use the decorator form of " +":meth:`ExitStack.callback` to declare the resource cleanup in advance::" +msgstr "" +"如果资源清理操作尚未完善地捆绑到一个独立的函数中,则仍然可以使用 :meth:`ExitStack.callback` " +"的装饰器形式来提前声明资源清理::" + +#: ../../library/contextlib.rst:672 +msgid "" +"Due to the way the decorator protocol works, a callback function declared " +"this way cannot take any parameters. Instead, any resources to be released " +"must be accessed as closure variables." +msgstr "受装饰器协议工作方式的影响,以此方式声明的回调函数无法接受任何形参。 作为替代,任何要释放的资源必须作为闭包变量来访问。" + +#: ../../library/contextlib.rst:678 +msgid "Using a context manager as a function decorator" +msgstr "将上下文管理器作为函数装饰器使用" + +#: ../../library/contextlib.rst:680 +msgid "" +":class:`ContextDecorator` makes it possible to use a context manager in both" +" an ordinary ``with`` statement and also as a function decorator." +msgstr ":class:`ContextDecorator` 类允许将上下文管理器作为函数装饰器使用,而不仅在 ``with`` 语句块中使用。" + +#: ../../library/contextlib.rst:683 +msgid "" +"For example, it is sometimes useful to wrap functions or groups of " +"statements with a logger that can track the time of entry and time of exit." +" Rather than writing both a function decorator and a context manager for " +"the task, inheriting from :class:`ContextDecorator` provides both " +"capabilities in a single definition::" +msgstr "" +"例如,有时将函数或语句组包装在一个可以跟踪进入和退出时间的记录器中是很有用的。 与其为任务同时编写函数装饰器和上下文管理器,不如继承 " +":class:`ContextDecorator` 在一个定义中同时提供这两种能力::" + +#: ../../library/contextlib.rst:704 +msgid "Instances of this class can be used as both a context manager::" +msgstr "这个类的实例既可以被用作上下文管理器:" + +#: ../../library/contextlib.rst:710 +msgid "And also as a function decorator::" +msgstr "也可以被用作函数装饰器:" + +#: ../../library/contextlib.rst:717 +msgid "" +"Note that there is one additional limitation when using context managers as " +"function decorators: there's no way to access the return value of " +":meth:`__enter__`. If that value is needed, then it is still necessary to " +"use an explicit ``with`` statement." +msgstr "" +"使用上下文管理器作为函数装饰器时,有一个额外限制:没有办法得到 :meth:`__enter__` 的返回值。如果需要返回值,你仍然需要显式使用 " +"``with`` 语句。" + +#: ../../library/contextlib.rst:725 +msgid ":pep:`343` - The \"with\" statement" +msgstr ":pep:`343` - \"with\" 语句" + +#: ../../library/contextlib.rst:725 +msgid "" +"The specification, background, and examples for the Python :keyword:`with` " +"statement." +msgstr "Python :keyword:`with` 语句的规范描述、背景和示例。" + +#: ../../library/contextlib.rst:731 +msgid "Single use, reusable and reentrant context managers" +msgstr "单独使用,可重用并可重进入的上下文管理器" + +#: ../../library/contextlib.rst:733 +msgid "" +"Most context managers are written in a way that means they can only be used " +"effectively in a :keyword:`with` statement once. These single use context " +"managers must be created afresh each time they're used - attempting to use " +"them a second time will trigger an exception or otherwise not work " +"correctly." +msgstr "" +"大多数上下文管理器的编写方式意味着它们只能在一个 :keyword:`with` 语句中被有效使用一次。 " +"这些一次性使用的上下文管理器必须在每次被使用时重新创建 —— 试图第二次使用它们将会触发异常或是不能正确工作。" + +#: ../../library/contextlib.rst:739 +msgid "" +"This common limitation means that it is generally advisable to create " +"context managers directly in the header of the :keyword:`with` statement " +"where they are used (as shown in all of the usage examples above)." +msgstr "" +"这个常见的限制意味着通常来说都建议在 :keyword:`with` 语句开头上下文管理器被使用的位置直接创建它们(如下面所有的使用示例所显示的)。" + +#: ../../library/contextlib.rst:743 +msgid "" +"Files are an example of effectively single use context managers, since the " +"first :keyword:`with` statement will close the file, preventing any further " +"IO operations using that file object." +msgstr "" +"文件是一个高效的单次使用上下文管理器的例子,因为第一个 :keyword:`with` 语句将关闭文件,防止任何后续的使用该文件对象的 IO 操作。" + +#: ../../library/contextlib.rst:747 +msgid "" +"Context managers created using :func:`contextmanager` are also single use " +"context managers, and will complain about the underlying generator failing " +"to yield if an attempt is made to use them a second time::" +msgstr "" +"使用 :func:`contextmanager` " +"创建的上下文管理器也是单次使用的上下文管理器,并会在试图第二次使用它们时报告下层生成器无法执行产生操作::" + +#: ../../library/contextlib.rst:775 +msgid "Reentrant context managers" +msgstr "重进入上下文管理器" + +#: ../../library/contextlib.rst:777 +msgid "" +"More sophisticated context managers may be \"reentrant\". These context " +"managers can not only be used in multiple :keyword:`with` statements, but " +"may also be used *inside* a :keyword:`!with` statement that is already using" +" the same context manager." +msgstr "" +"更复杂的上下文管理器可以“重进入”。 这些上下文管理器不但可以被用于多个 :keyword:`with` " +"语句中,还可以被用于已经在使用同一个上下文管理器的 :keyword:`!with` 语句 *内部*。" + +#: ../../library/contextlib.rst:782 +msgid "" +":class:`threading.RLock` is an example of a reentrant context manager, as " +"are :func:`suppress` and :func:`redirect_stdout`. Here's a very simple " +"example of reentrant use::" +msgstr "" +":class:`threading.RLock` 是一个可重入上下管理器的例子,:func:`suppress` 和 " +":func:`redirect_stdout` 也是如此。 下面是一个非常简单的可重入使用的示例::" + +#: ../../library/contextlib.rst:801 +msgid "" +"Real world examples of reentrancy are more likely to involve multiple " +"functions calling each other and hence be far more complicated than this " +"example." +msgstr "现实世界的可重入例子更可能涉及到多个函数的相互调用因此会比这个例子要复杂得多。" + +#: ../../library/contextlib.rst:805 +msgid "" +"Note also that being reentrant is *not* the same thing as being thread safe." +" :func:`redirect_stdout`, for example, is definitely not thread safe, as it " +"makes a global modification to the system state by binding " +":data:`sys.stdout` to a different stream." +msgstr "" +"还要注意可重入与线程安全 *不是* 一回事。 举例来说,:func:`redirect_stdout` 肯定不是线程安全的,因为它会通过将 " +":data:`sys.stdout` 绑定到一个不同的流对系统状态做了全局性的修改。" + +#: ../../library/contextlib.rst:814 +msgid "Reusable context managers" +msgstr "可重用的上下文管理器" + +#: ../../library/contextlib.rst:816 +msgid "" +"Distinct from both single use and reentrant context managers are " +"\"reusable\" context managers (or, to be completely explicit, \"reusable, " +"but not reentrant\" context managers, since reentrant context managers are " +"also reusable). These context managers support being used multiple times, " +"but will fail (or otherwise not work correctly) if the specific context " +"manager instance has already been used in a containing with statement." +msgstr "" +"与单次使用和可重入上下文管理器都不同的还有“可重用”上下文管理器(或者,使用完全显式的表达应为“可重用,但不可重入”上下文管理器,因为可重入上下文管理器也会是可重用的)。" +" 这些上下文管理器支持多次使用,但如果特定的上下文管理器实例已经在包含它的 with 语句中被使用过则将失败(或者不能正确工作)。" + +#: ../../library/contextlib.rst:823 +msgid "" +":class:`threading.Lock` is an example of a reusable, but not reentrant, " +"context manager (for a reentrant lock, it is necessary to use " +":class:`threading.RLock` instead)." +msgstr "" +":class:`threading.Lock` 是一个可重用,但是不可重入的上下文管理器的例子(对于可重入锁,则有必要使用 " +":class:`threading.RLock` 来代替)。" + +#: ../../library/contextlib.rst:827 +msgid "" +"Another example of a reusable, but not reentrant, context manager is " +":class:`ExitStack`, as it invokes *all* currently registered callbacks when " +"leaving any with statement, regardless of where those callbacks were added::" +msgstr "" +"另一个可重用,但不可重入的上下文管理器的例子是 :class:`ExitStack`,因为它在离开任何 with 语句时会唤起 *所有* " +"当前已注册的回调,不论回调是在哪里添加的::" + +#: ../../library/contextlib.rst:858 +msgid "" +"As the output from the example shows, reusing a single stack object across " +"multiple with statements works correctly, but attempting to nest them will " +"cause the stack to be cleared at the end of the innermost with statement, " +"which is unlikely to be desirable behaviour." +msgstr "" +"正如这个例子的输出所显示的,在多个 with 语句中重用一个单独的栈对象可以正确工作,但调试嵌套它们就将导致栈在最内层的 with " +"语句结束时被清空,这不大可能是符合期望的行为。" + +#: ../../library/contextlib.rst:863 +msgid "" +"Using separate :class:`ExitStack` instances instead of reusing a single " +"instance avoids that problem::" +msgstr "使用单独的 :class:`ExitStack` 实例而不是重复使用一个实例可以避免此问题::" diff --git a/library/contextvars.po b/library/contextvars.po new file mode 100644 index 000000000..367925322 --- /dev/null +++ b/library/contextvars.po @@ -0,0 +1,285 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) 2001-2022, Python Software Foundation +# This file is distributed under the same license as the Python package. +# FIRST AUTHOR , YEAR. +# +# Translators: +# ww song , 2018 +# zeroswan , 2020 +# Freesand Leo , 2021 +# +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: Python 3.9\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2022-11-04 14:34+0000\n" +"PO-Revision-Date: 2018-06-29 21:06+0000\n" +"Last-Translator: Freesand Leo , 2021\n" +"Language-Team: Chinese (China) (https://www.transifex.com/python-doc/teams/5390/zh_CN/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: zh_CN\n" +"Plural-Forms: nplurals=1; plural=0;\n" + +#: ../../library/contextvars.rst:2 +msgid ":mod:`contextvars` --- Context Variables" +msgstr ":mod:`contextvars` --- 上下文变量" + +#: ../../library/contextvars.rst:11 +msgid "" +"This module provides APIs to manage, store, and access context-local state." +" The :class:`~contextvars.ContextVar` class is used to declare and work " +"with *Context Variables*. The :func:`~contextvars.copy_context` function " +"and the :class:`~contextvars.Context` class should be used to manage the " +"current context in asynchronous frameworks." +msgstr "" +"本模块提供了相关API用于管理、存储和访问上下文相关的状态。 :class:`~contextvars.ContextVar` 类用于声明 " +"*上下文变量* 并与其一起使用。函数 :func:`~contextvars.copy_context`  和类 " +":class:`~contextvars.Context` 用于管理当前上下文和异步框架中。" + +#: ../../library/contextvars.rst:17 +msgid "" +"Context managers that have state should use Context Variables instead of " +":func:`threading.local()` to prevent their state from bleeding to other code" +" unexpectedly, when used in concurrent code." +msgstr "" +"在多并发环境中,有状态上下文管理器应该使用上下文变量,而不是 :func:`threading.local()` 来防止他们的状态意外泄露到其他代码。" + +#: ../../library/contextvars.rst:21 +msgid "See also :pep:`567` for additional details." +msgstr "更多信息参见 :pep:`567` 。" + +#: ../../library/contextvars.rst:27 +msgid "Context Variables" +msgstr "上下文变量" + +#: ../../library/contextvars.rst:31 +msgid "This class is used to declare a new Context Variable, e.g.::" +msgstr "此类用于声明一个新的上下文变量,如::" + +#: ../../library/contextvars.rst:35 +msgid "" +"The required *name* parameter is used for introspection and debug purposes." +msgstr "*name* 参数用于内省和调试,必需。" + +#: ../../library/contextvars.rst:38 +msgid "" +"The optional keyword-only *default* parameter is returned by " +":meth:`ContextVar.get` when no value for the variable is found in the " +"current context." +msgstr "调用 :meth:`ContextVar.get` 时,如果上下文中没有找到此变量的值,则返回可选的仅命名参数 *default* 。" + +#: ../../library/contextvars.rst:42 +msgid "" +"**Important:** Context Variables should be created at the top module level " +"and never in closures. :class:`Context` objects hold strong references to " +"context variables which prevents context variables from being properly " +"garbage collected." +msgstr "" +"**重要:** 上下文变量应该在顶级模块中创建,且永远不要在闭包中创建。 :class:`Context` " +"对象拥有对上下文变量的强引用,这可以让上下文变量被垃圾收集器正确回收。" + +#: ../../library/contextvars.rst:49 +msgid "The name of the variable. This is a read-only property." +msgstr "上下文变量的名称,只读属性。" + +#: ../../library/contextvars.rst:55 +msgid "Return a value for the context variable for the current context." +msgstr "返回当前上下文中此上下文变量的值。" + +#: ../../library/contextvars.rst:57 +msgid "" +"If there is no value for the variable in the current context, the method " +"will:" +msgstr "如果当前上下文中此变量没有值,则此方法会:" + +#: ../../library/contextvars.rst:60 +msgid "" +"return the value of the *default* argument of the method, if provided; or" +msgstr "如果提供了得 话,返回传入的 *default* 值;或者" + +#: ../../library/contextvars.rst:63 +msgid "" +"return the default value for the context variable, if it was created with " +"one; or" +msgstr "返回上下文变量本身的默认值, 如果创建此上下文变量时提供了默认值;或者" + +#: ../../library/contextvars.rst:66 +msgid "raise a :exc:`LookupError`." +msgstr "抛出 :exc:`LookupError` 异常。" + +#: ../../library/contextvars.rst:70 +msgid "" +"Call to set a new value for the context variable in the current context." +msgstr "调用此方法设置上下文变量在当前上下文中的值。" + +#: ../../library/contextvars.rst:73 +msgid "" +"The required *value* argument is the new value for the context variable." +msgstr "必选参数 *value* 是上下文变量的新值。" + +#: ../../library/contextvars.rst:76 +msgid "" +"Returns a :class:`~contextvars.Token` object that can be used to restore the" +" variable to its previous value via the :meth:`ContextVar.reset` method." +msgstr "" +"返回一个 :class:`~contextvars.Token`  对象,可通过 :meth:`ContextVar.reset` " +"方法将上下文变量还原为之前某个状态。" + +#: ../../library/contextvars.rst:82 +msgid "" +"Reset the context variable to the value it had before the " +":meth:`ContextVar.set` that created the *token* was used." +msgstr "将上下文变量重置为调用 :meth:`ContextVar.set` 之前、创建 *token* 时候的状态。" + +#: ../../library/contextvars.rst:85 +msgid "For example::" +msgstr "例如::" + +#: ../../library/contextvars.rst:99 +msgid "" +"*Token* objects are returned by the :meth:`ContextVar.set` method. They can " +"be passed to the :meth:`ContextVar.reset` method to revert the value of the " +"variable to what it was before the corresponding *set*." +msgstr "" +":meth:`ContextVar.set` 方法返回 *Token* 对象。此对象可以传递给 :meth:`ContextVar.reset` " +"方法用于将上下文变量还原为调用 *set* 前的状态。" + +#: ../../library/contextvars.rst:106 +msgid "" +"A read-only property. Points to the :class:`ContextVar` object that created" +" the token." +msgstr "只读属性。指向创建此 token 的 :class:`ContextVar` 对象。" + +#: ../../library/contextvars.rst:111 +msgid "" +"A read-only property. Set to the value the variable had before the " +":meth:`ContextVar.set` method call that created the token. It points to " +":attr:`Token.MISSING` is the variable was not set before the call." +msgstr "" +"一个只读属性。 会被设为在创建此令牌的 :meth:`ContextVar.set` 方法调用之前该变量所具有的值。 " +"如果调用之前变量没有设置值,则它指向 :attr:`Token.MISSING` 。" + +#: ../../library/contextvars.rst:118 +msgid "A marker object used by :attr:`Token.old_value`." +msgstr ":attr:`Token.old_value` 会用到的一个标记对象。" + +#: ../../library/contextvars.rst:122 +msgid "Manual Context Management" +msgstr "手动上下文管理" + +#: ../../library/contextvars.rst:126 +msgid "Returns a copy of the current :class:`~contextvars.Context` object." +msgstr "返回当前上下文中 :class:`~contextvars.Context` 对象的拷贝。" + +#: ../../library/contextvars.rst:128 +msgid "" +"The following snippet gets a copy of the current context and prints all " +"variables and their values that are set in it::" +msgstr "以下代码片段会获取当前上下文的拷贝并打印设置到其中的所有变量及其值::" + +#: ../../library/contextvars.rst:134 +msgid "" +"The function has an O(1) complexity, i.e. works equally fast for contexts " +"with a few context variables and for contexts that have a lot of them." +msgstr "此函数复杂度为 O(1) ,也就是说对于只包含几个上下文变量和很多上下文变量的情况,他们是一样快的。" + +#: ../../library/contextvars.rst:141 +msgid "A mapping of :class:`ContextVars ` to their values." +msgstr ":class:`ContextVars ` 中所有值的映射。" + +#: ../../library/contextvars.rst:143 +msgid "" +"``Context()`` creates an empty context with no values in it. To get a copy " +"of the current context use the :func:`~contextvars.copy_context` function." +msgstr "" +"``Context()`` 创建一个不包含任何值的空上下文。如果要获取当前上下文的拷贝,使用 " +":func:`~contextvars.copy_context` 函数。" + +#: ../../library/contextvars.rst:147 +msgid "Context implements the :class:`collections.abc.Mapping` interface." +msgstr "Context 实现了 :class:`collections.abc.Mapping` 接口。" + +#: ../../library/contextvars.rst:151 +msgid "" +"Execute ``callable(*args, **kwargs)`` code in the context object the *run* " +"method is called on. Return the result of the execution or propagate an " +"exception if one occurred." +msgstr "" +"按照 *run* 方法中的参数在上下文对象中执行 ``callable(*args, **kwargs)`` " +"代码。返回执行结果,如果发生异常,则将异常透传出来。" + +#: ../../library/contextvars.rst:155 +msgid "" +"Any changes to any context variables that *callable* makes will be contained" +" in the context object::" +msgstr "*callable* 对上下文变量所做的任何修改都会保留在上下文对象中::" + +#: ../../library/contextvars.rst:184 +msgid "" +"The method raises a :exc:`RuntimeError` when called on the same context " +"object from more than one OS thread, or when called recursively." +msgstr "当在多个系统线程或者递归调用同一个上下文对象的此方法,抛出 :exc:`RuntimeError` 异常。" + +#: ../../library/contextvars.rst:190 +msgid "Return a shallow copy of the context object." +msgstr "返回此上下文对象的浅拷贝。" + +#: ../../library/contextvars.rst:194 +msgid "" +"Return ``True`` if the *context* has a value for *var* set; return ``False``" +" otherwise." +msgstr "如果*context* 中含有名称为 *var* 的变量,返回 ``True`` , 否则返回 ``False`` 。" + +#: ../../library/contextvars.rst:199 +msgid "" +"Return the value of the *var* :class:`ContextVar` variable. If the variable " +"is not set in the context object, a :exc:`KeyError` is raised." +msgstr "" +"返回名称为 *var* 的 :class:`ContextVar` 变量。如果上下文对象中不包含这个变量,则抛出 :exc:`KeyError` 异常。" + +#: ../../library/contextvars.rst:205 +msgid "" +"Return the value for *var* if *var* has the value in the context object. " +"Return *default* otherwise. If *default* is not given, return ``None``." +msgstr "" +"如果 *var* 在上下文对象中具有值则返回 *var* 的值。 在其他情况下返回 *default*。 如果未给出 *default* 则返回 " +"``None``。" + +#: ../../library/contextvars.rst:211 +msgid "Return an iterator over the variables stored in the context object." +msgstr "返回一个存储在上下文对象中的变量的迭代器。" + +#: ../../library/contextvars.rst:216 +msgid "Return the number of variables set in the context object." +msgstr "返回上下文对象中所设的变量的数量。" + +#: ../../library/contextvars.rst:220 +msgid "Return a list of all variables in the context object." +msgstr "返回上下文对象中的所有变量的列表。" + +#: ../../library/contextvars.rst:224 +msgid "Return a list of all variables' values in the context object." +msgstr "返回上下文对象中所有变量值的列表。" + +#: ../../library/contextvars.rst:229 +msgid "" +"Return a list of 2-tuples containing all variables and their values in the " +"context object." +msgstr "返回包含上下文对象中所有变量及其值的 2 元组的列表。" + +#: ../../library/contextvars.rst:234 +msgid "asyncio support" +msgstr "asyncio 支持" + +#: ../../library/contextvars.rst:236 +msgid "" +"Context variables are natively supported in :mod:`asyncio` and are ready to " +"be used without any extra configuration. For example, here is a simple echo" +" server, that uses a context variable to make the address of a remote client" +" available in the Task that handles that client::" +msgstr "" +"上下文变量在 :mod:`asyncio` 中有原生的支持并且无需任何额外配置即可被使用。 " +"例如,以下是一个简单的回显服务器,它使用上下文变量来让远程客户端的地址在处理该客户端的 Task 中可用::" diff --git a/library/copy.po b/library/copy.po new file mode 100644 index 000000000..64554e596 --- /dev/null +++ b/library/copy.po @@ -0,0 +1,171 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) 2001-2024, Python Software Foundation +# This file is distributed under the same license as the Python package. +# FIRST AUTHOR , YEAR. +# +# Translators: +# walkinrain , 2019 +# Josh Ouyang , 2019 +# jaystone776 <1732865113@qq.com>, 2020 +# WH-2099 , 2020 +# Freesand Leo , 2022 +# Rafael Fontenelle , 2024 +# +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: Python 3.9\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2024-06-14 15:38+0000\n" +"PO-Revision-Date: 2017-02-16 23:04+0000\n" +"Last-Translator: Rafael Fontenelle , 2024\n" +"Language-Team: Chinese (China) (https://app.transifex.com/python-doc/teams/5390/zh_CN/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: zh_CN\n" +"Plural-Forms: nplurals=1; plural=0;\n" + +#: ../../library/copy.rst:2 +msgid ":mod:`copy` --- Shallow and deep copy operations" +msgstr ":mod:`copy` --- 浅层 (shallow) 和深层 (deep) 复制操作" + +#: ../../library/copy.rst:7 +msgid "**Source code:** :source:`Lib/copy.py`" +msgstr "**源代码:** :source:`Lib/copy.py`" + +#: ../../library/copy.rst:11 +msgid "" +"Assignment statements in Python do not copy objects, they create bindings " +"between a target and an object. For collections that are mutable or contain " +"mutable items, a copy is sometimes needed so one can change one copy without" +" changing the other. This module provides generic shallow and deep copy " +"operations (explained below)." +msgstr "" +"Python " +"的赋值语句不复制对象,而是创建目标和对象的绑定关系。对于自身可变,或包含可变项的集合,有时要生成副本用于改变操作,而不必改变原始对象。本模块提供了通用的浅层复制和深层复制操作,(如下所述)。" + +#: ../../library/copy.rst:18 +msgid "Interface summary:" +msgstr "接口摘要:" + +#: ../../library/copy.rst:22 +msgid "Return a shallow copy of *x*." +msgstr "返回 *x* 的浅复制。" + +#: ../../library/copy.rst:27 +msgid "Return a deep copy of *x*." +msgstr "返回 *x* 的深复制。" + +#: ../../library/copy.rst:32 +msgid "Raised for module specific errors." +msgstr "针对模块特定错误引发。" + +#: ../../library/copy.rst:36 +msgid "" +"The difference between shallow and deep copying is only relevant for " +"compound objects (objects that contain other objects, like lists or class " +"instances):" +msgstr "浅层与深层复制的区别仅与复合对象(即包含列表或类的实例等其他对象的对象)相关:" + +#: ../../library/copy.rst:39 +msgid "" +"A *shallow copy* constructs a new compound object and then (to the extent " +"possible) inserts *references* into it to the objects found in the original." +msgstr "*浅层复制* 构造一个新的复合对象,然后(在尽可能的范围内)将原始对象中找到的对象的 *引用* 插入其中。" + +#: ../../library/copy.rst:42 +msgid "" +"A *deep copy* constructs a new compound object and then, recursively, " +"inserts *copies* into it of the objects found in the original." +msgstr "*深层复制* 构造一个新的复合对象,然后,递归地将在原始对象里找到的对象的 *副本* 插入其中。" + +#: ../../library/copy.rst:45 +msgid "" +"Two problems often exist with deep copy operations that don't exist with " +"shallow copy operations:" +msgstr "深度复制操作通常存在两个问题, 而浅层复制操作并不存在这些问题:" + +#: ../../library/copy.rst:48 +msgid "" +"Recursive objects (compound objects that, directly or indirectly, contain a " +"reference to themselves) may cause a recursive loop." +msgstr "递归对象 (直接或间接包含对自身引用的复合对象) 可能会导致递归循环。" + +#: ../../library/copy.rst:51 +msgid "" +"Because deep copy copies everything it may copy too much, such as data which" +" is intended to be shared between copies." +msgstr "由于深层复制会复制所有内容,因此可能会过多复制(例如本应该在副本之间共享的数据)。" + +#: ../../library/copy.rst:54 +msgid "The :func:`deepcopy` function avoids these problems by:" +msgstr ":func:`deepcopy` 函数用以下方式避免了这些问题:" + +#: ../../library/copy.rst:56 +msgid "" +"keeping a ``memo`` dictionary of objects already copied during the current " +"copying pass; and" +msgstr "保留在当前复制过程中已复制的对象的 \"备忘录\" (``memo``) 字典;以及" + +#: ../../library/copy.rst:59 +msgid "" +"letting user-defined classes override the copying operation or the set of " +"components copied." +msgstr "允许用户定义的类重写复制操作或复制的组件集合。" + +#: ../../library/copy.rst:62 +msgid "" +"This module does not copy types like module, method, stack trace, stack " +"frame, file, socket, window, or any similar types. It does \"copy\" " +"functions and classes (shallow and deeply), by returning the original object" +" unchanged; this is compatible with the way these are treated by the " +":mod:`pickle` module." +msgstr "" +"此模块不会复制模块、方法、栈追踪、栈帧、文件、套接字、窗口以及任何相似的类型。 它会通过不加修改地返回原始对象来(浅层或深层地)“复制”函数和类;这与 " +":mod:`pickle` 模块处理这类问题的方式是兼容的。" + +#: ../../library/copy.rst:67 +msgid "" +"Shallow copies of dictionaries can be made using :meth:`dict.copy`, and of " +"lists by assigning a slice of the entire list, for example, ``copied_list = " +"original_list[:]``." +msgstr "" +"制作字典的浅层复制可以使用 :meth:`dict.copy` " +"方法,而制作列表的浅层复制可以通过赋值整个列表的切片完成,例如,``copied_list = original_list[:]``。" + +#: ../../library/copy.rst:73 +msgid "" +"Classes can use the same interfaces to control copying that they use to " +"control pickling. See the description of module :mod:`pickle` for " +"information on these methods. In fact, the :mod:`copy` module uses the " +"registered pickle functions from the :mod:`copyreg` module." +msgstr "" +"类可以使用与控制序列化(pickling)操作相同的接口来控制复制操作,关于这些方法的描述信息请参考 :mod:`pickle` " +"模块。实际上,:mod:`copy` 模块使用的正是从 :mod:`copyreg` 模块中注册的 pickle 函数。" + +#: ../../library/copy.rst:82 +msgid "" +"In order for a class to define its own copy implementation, it can define " +"special methods :meth:`__copy__` and :meth:`__deepcopy__`. The former is " +"called to implement the shallow copy operation; no additional arguments are " +"passed. The latter is called to implement the deep copy operation; it is " +"passed one argument, the ``memo`` dictionary. If the :meth:`__deepcopy__` " +"implementation needs to make a deep copy of a component, it should call the " +":func:`deepcopy` function with the component as first argument and the memo " +"dictionary as second argument." +msgstr "" +"想要给一个类定义它自己的拷贝操作实现,可以通过定义特殊方法 :meth:`__copy__` 和 :meth:`__deepcopy__`。 " +"调用前者以实现浅层拷贝操作,该方法不用传入额外参数。 调用后者以实现深层拷贝操作;它应传入一个参数即 ``memo`` 字典。 如果 " +":meth:`__deepcopy__` 实现需要创建一个组件的深层拷贝,它应当调用 :func:`deepcopy` " +"函数并以该组件作为第一个参数,而将 memo 字典作为第二个参数。" + +#: ../../library/copy.rst:94 +msgid "Module :mod:`pickle`" +msgstr "模块 :mod:`pickle`" + +#: ../../library/copy.rst:94 +msgid "" +"Discussion of the special methods used to support object state retrieval and" +" restoration." +msgstr "讨论了支持对象状态检索和恢复的特殊方法。" diff --git a/library/copyreg.po b/library/copyreg.po new file mode 100644 index 000000000..c58589c5e --- /dev/null +++ b/library/copyreg.po @@ -0,0 +1,91 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) 2001-2022, Python Software Foundation +# This file is distributed under the same license as the Python package. +# FIRST AUTHOR , YEAR. +# +# Translators: +# Menghua Xiao , 2018 +# Arisaka97 , 2019 +# Freesand Leo , 2022 +# +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: Python 3.9\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2022-11-04 14:34+0000\n" +"PO-Revision-Date: 2017-02-16 23:04+0000\n" +"Last-Translator: Freesand Leo , 2022\n" +"Language-Team: Chinese (China) (https://www.transifex.com/python-doc/teams/5390/zh_CN/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: zh_CN\n" +"Plural-Forms: nplurals=1; plural=0;\n" + +#: ../../library/copyreg.rst:2 +msgid ":mod:`copyreg` --- Register :mod:`pickle` support functions" +msgstr ":mod:`copyreg` --- 注册配合 :mod:`pickle` 模块使用的函数" + +#: ../../library/copyreg.rst:7 +msgid "**Source code:** :source:`Lib/copyreg.py`" +msgstr "**源代码:** :source:`Lib/copyreg.py`" + +#: ../../library/copyreg.rst:15 +msgid "" +"The :mod:`copyreg` module offers a way to define functions used while " +"pickling specific objects. The :mod:`pickle` and :mod:`copy` modules use " +"those functions when pickling/copying those objects. The module provides " +"configuration information about object constructors which are not classes. " +"Such constructors may be factory functions or class instances." +msgstr "" +":mod:`copyreg` 模块提供了可在封存特定对象时使用的一种定义函数方式。 :mod:`pickle` 和 :mod:`copy` " +"模块会在封存/拷贝特定对象时使用这些函数。 此模块提供了非类对象构造器的相关配置信息。 这样的构造器可以是工厂函数或类实例。" + +#: ../../library/copyreg.rst:24 +msgid "" +"Declares *object* to be a valid constructor. If *object* is not callable " +"(and hence not valid as a constructor), raises :exc:`TypeError`." +msgstr "" +"将 *object* 声明为一个有效的构造器。 如果 *object* 是不可调用的(因而不是一个有效的构造器)则会引发 " +":exc:`TypeError`。" + +#: ../../library/copyreg.rst:30 +msgid "" +"Declares that *function* should be used as a \"reduction\" function for " +"objects of type *type*. *function* should return either a string or a tuple" +" containing two or three elements." +msgstr "" +"声明该 *function* 应当被用作 *type* 类型对象的“归约函数”。 *function* 应当返回字符串或包含两到三个元素的元组。" + +#: ../../library/copyreg.rst:34 +msgid "" +"The optional *constructor* parameter, if provided, is a callable object " +"which can be used to reconstruct the object when called with the tuple of " +"arguments returned by *function* at pickling time. A :exc:`TypeError` is " +"raised if the *constructor* is not callable." +msgstr "" +"如果提供了可选的 *constructor* 形参,它应当是一个可被用于重建相应对象的可调用对象,在调用该对象时要附带在执行封存操作时由 " +"*function* 所返回的参数所组成的元组。 如果 *constructor* 不是可调用对象则将引发 :exc:`TypeError`。" + +#: ../../library/copyreg.rst:39 +msgid "" +"See the :mod:`pickle` module for more details on the interface expected of " +"*function* and *constructor*. Note that the " +":attr:`~pickle.Pickler.dispatch_table` attribute of a pickler object or " +"subclass of :class:`pickle.Pickler` can also be used for declaring reduction" +" functions." +msgstr "" +"请查看 :mod:`pickle` 模块了解 *function* 和 *constructor* 所要求的接口的详情。 请注意一个 pickler " +"对象或 :class:`pickle.Pickler` 的子类的 :attr:`~pickle.Pickler.dispatch_table` " +"属性也可以被用来声明归约函数。" + +#: ../../library/copyreg.rst:46 +msgid "Example" +msgstr "示例" + +#: ../../library/copyreg.rst:48 +msgid "" +"The example below would like to show how to register a pickle function and " +"how it will be used:" +msgstr "以下示例将会显示如何注册一个封存函数,以及如何来使用它:" diff --git a/library/crypt.po b/library/crypt.po new file mode 100644 index 000000000..017495029 --- /dev/null +++ b/library/crypt.po @@ -0,0 +1,223 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) 2001-2022, Python Software Foundation +# This file is distributed under the same license as the Python package. +# FIRST AUTHOR , YEAR. +# +# Translators: +# Fred , 2018 +# MuSheng Chen , 2019 +# Dai Xu , 2021 +# Freesand Leo , 2022 +# +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: Python 3.9\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2022-11-04 14:34+0000\n" +"PO-Revision-Date: 2017-02-16 23:04+0000\n" +"Last-Translator: Freesand Leo , 2022\n" +"Language-Team: Chinese (China) (https://www.transifex.com/python-doc/teams/5390/zh_CN/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: zh_CN\n" +"Plural-Forms: nplurals=1; plural=0;\n" + +#: ../../library/crypt.rst:2 +msgid ":mod:`crypt` --- Function to check Unix passwords" +msgstr ":mod:`crypt` —— 检查 Unix 口令的函数" + +#: ../../library/crypt.rst:13 +msgid "**Source code:** :source:`Lib/crypt.py`" +msgstr "**源代码:** :source:`Lib/struct.py`" + +#: ../../library/crypt.rst:19 +msgid "" +"The :mod:`crypt` module is deprecated (see :pep:`PEP 594 <594#crypt>` for " +"details and alternatives). The :mod:`hashlib` module is a potential " +"replacement for certain use cases." +msgstr "" +":mod:`crypt` 模块已被弃用(请参阅 :pep:`PEP 594 <594#crypt>` 了解详情及其替代品)。 " +":mod:`hashlib` 模块是针对特定用例的潜在替换选项。" + +#: ../../library/crypt.rst:26 +msgid "" +"This module implements an interface to the :manpage:`crypt(3)` routine, " +"which is a one-way hash function based upon a modified DES algorithm; see " +"the Unix man page for further details. Possible uses include storing hashed" +" passwords so you can check passwords without storing the actual password, " +"or attempting to crack Unix passwords with a dictionary." +msgstr "" +"本模块实现了连接 :manpage:`crypt(3)` 的接口,是一个基于改进 DES 算法的单向散列函数;更多细节请参阅 Unix man " +"手册。可能的用途包括保存经过哈希的口令,这样就可以在不存储实际口令的情况下对其进行验证,或者尝试用字典来破解 Unix 口令。" + +#: ../../library/crypt.rst:34 +msgid "" +"Notice that the behavior of this module depends on the actual implementation" +" of the :manpage:`crypt(3)` routine in the running system. Therefore, any " +"extensions available on the current implementation will also be available " +"on this module." +msgstr "请注意,本模块的执行取决于当前系统中 :manpage:`crypt(3)` 的实际实现。 因此,当前实现版本可用的扩展均可在本模块使用。" + +#: ../../library/crypt.rst:40 +msgid ":ref:`Availability `: Unix. Not available on VxWorks." +msgstr ":ref:`可用性 `: Unix。 在 VxWorks 上不可用。" + +#: ../../library/crypt.rst:42 +msgid "Hashing Methods" +msgstr "哈希方法" + +#: ../../library/crypt.rst:46 +msgid "" +"The :mod:`crypt` module defines the list of hashing methods (not all methods" +" are available on all platforms):" +msgstr ":mod:`crypt` 模块定义了哈希方法的列表(不是所有的方法在所有平台上都可用)。" + +#: ../../library/crypt.rst:51 +msgid "" +"A Modular Crypt Format method with 16 character salt and 86 character hash " +"based on the SHA-512 hash function. This is the strongest method." +msgstr "基于 SHA-512 哈希函数的模块化加密格式方法,具备 16 个字符的 salt 和 86个字符的哈希算法。这是最强的哈希算法。" + +#: ../../library/crypt.rst:56 +msgid "" +"Another Modular Crypt Format method with 16 character salt and 43 character " +"hash based on the SHA-256 hash function." +msgstr "另一种基于 SHA-256 哈希函数的模块化加密格式方法,具备 16 个字符的 salt 和 43 个字符的哈希算法。" + +#: ../../library/crypt.rst:61 +msgid "" +"Another Modular Crypt Format method with 22 character salt and 31 character " +"hash based on the Blowfish cipher." +msgstr "另一种基于 Blowfish 的模块化加密格式方法,有 22 个字符的 salt 和 31 个字符的哈希算法。" + +#: ../../library/crypt.rst:68 +msgid "" +"Another Modular Crypt Format method with 8 character salt and 22 character " +"hash based on the MD5 hash function." +msgstr "另一种基于 MD5 哈希函数的模块化加密格式方法,具备 8 个字符的 salt 和 22 个字符的哈希算法。" + +#: ../../library/crypt.rst:73 +msgid "" +"The traditional method with a 2 character salt and 13 characters of hash. " +"This is the weakest method." +msgstr "传统的方法,具备 2 个字符的 salt 和 13 个字符的哈希算法。这是最弱的方法。" + +#: ../../library/crypt.rst:78 +msgid "Module Attributes" +msgstr "模块属性" + +#: ../../library/crypt.rst:84 +msgid "" +"A list of available password hashing algorithms, as ``crypt.METHOD_*`` " +"objects. This list is sorted from strongest to weakest." +msgstr "可用口令哈希算法的列表,形式为 ``crypt.METHOD_*`` 对象。该列表从最强到最弱进行排序。" + +#: ../../library/crypt.rst:90 +msgid "Module Functions" +msgstr "模块函数" + +#: ../../library/crypt.rst:92 +msgid "The :mod:`crypt` module defines the following functions:" +msgstr ":mod:`crypt` 模块定义了以下函数:" + +#: ../../library/crypt.rst:96 +msgid "" +"*word* will usually be a user's password as typed at a prompt or in a " +"graphical interface. The optional *salt* is either a string as returned " +"from :func:`mksalt`, one of the ``crypt.METHOD_*`` values (though not all " +"may be available on all platforms), or a full encrypted password including " +"salt, as returned by this function. If *salt* is not provided, the " +"strongest method available in :attr:`methods` will be used." +msgstr "" +"*word* 通常将是用户在提示符或图形界面上输入的口令。 可选参数 *salt* 要么是 :func:`mksalt` 所返回的字符串,即 " +"``crypt.METHOD_*`` 值之一(尽管不是在所有平台上都可用),要么就是一个包括 salt 的完全加密的口令,与本函数的返回值一样。 " +"如果未给出 *salt*,则将使用 :attr:`methods` 中提供的最强方法。" + +#: ../../library/crypt.rst:103 +msgid "" +"Checking a password is usually done by passing the plain-text password as " +"*word* and the full results of a previous :func:`crypt` call, which should " +"be the same as the results of this call." +msgstr "查验口令通常是传入纯文本密码 *word* ,和之前 :func:`crypt` 调用的结果进行比较,应该与本次调用的结果相同。" + +#: ../../library/crypt.rst:107 +msgid "" +"*salt* (either a random 2 or 16 character string, possibly prefixed with " +"``$digit$`` to indicate the method) which will be used to perturb the " +"encryption algorithm. The characters in *salt* must be in the set " +"``[./a-zA-Z0-9]``, with the exception of Modular Crypt Format which prefixes" +" a ``$digit$``." +msgstr "" +"*salt* (随机的 2 或 16 个字符的字符串,可能带有 ``$digit{TX-PL-LABEL}#x60;`` 前缀以提示相关方法) " +"将被用来扰乱加密算法。 *salt* 中的字符必须在 ``[./a-zA-Z0-9]`` 集合中,但 Modular Crypt Format " +"除外,它会带有 ``$digit{TX-PL-LABEL}#x60;`` 前缀。" + +#: ../../library/crypt.rst:113 +msgid "" +"Returns the hashed password as a string, which will be composed of " +"characters from the same alphabet as the salt." +msgstr "返回哈希后的口令字符串,将由 salt 所在字母表中的字符组成。" + +#: ../../library/crypt.rst:118 +msgid "" +"Since a few :manpage:`crypt(3)` extensions allow different values, with " +"different sizes in the *salt*, it is recommended to use the full crypted " +"password as salt when checking for a password." +msgstr "" +"由于有些 :manpage:`crypt(3)` 扩展允许不同的值, *salt* 大小也可不同,建议在查验口令时采用完整的加密后口令作为 salt。" + +#: ../../library/crypt.rst:122 +msgid "Accept ``crypt.METHOD_*`` values in addition to strings for *salt*." +msgstr "除了字符串之外, *salt* 还可接受 ``crypt.METHOD_*`` 值。" + +#: ../../library/crypt.rst:128 +msgid "" +"Return a randomly generated salt of the specified method. If no *method* is" +" given, the strongest method available in :attr:`methods` is used." +msgstr "" +"返回用指定方法随机生成的 salt 值。 如果没有给出 *method*,则会使用 :attr:`methods` 中提供的最强方法。is used." + +#: ../../library/crypt.rst:132 +msgid "" +"The return value is a string suitable for passing as the *salt* argument to " +":func:`crypt`." +msgstr "返回一个字符串,可用作传入 :func:`crypt` 的 *salt* 参数。" + +#: ../../library/crypt.rst:135 +msgid "" +"*rounds* specifies the number of rounds for ``METHOD_SHA256``, " +"``METHOD_SHA512`` and ``METHOD_BLOWFISH``. For ``METHOD_SHA256`` and " +"``METHOD_SHA512`` it must be an integer between ``1000`` and " +"``999_999_999``, the default is ``5000``. For ``METHOD_BLOWFISH`` it must " +"be a power of two between ``16`` (2\\ :sup:`4`) and ``2_147_483_648`` (2\\ " +":sup:`31`), the default is ``4096`` (2\\ :sup:`12`)." +msgstr "" +"*rounds* 指定了 ``METHOD_SHA256``, ``METHOD_SHA512`` 和 ``METHOD_BLOWFISH`` " +"的循环次数。 对于 ``METHOD_SHA256`` 和 ``METHOD_SHA512`` 而言,必须为介于 ``1000`` 和 " +"``999_999_999`` 之间的整数,默认值为 ``5000``。 而对于 ``METHOD_BLOWFISH``,则必须为 ``16`` " +"(2\\ :sup:`4`) 和 ``2_147_483_648`` (2\\ :sup:`31`) 之间的二的幂,默认值为 ``4096`` (2\\" +" :sup:`12`)。" + +#: ../../library/crypt.rst:145 +msgid "Added the *rounds* parameter." +msgstr "加入 *rounds* 参数。" + +#: ../../library/crypt.rst:150 +msgid "Examples" +msgstr "示例" + +#: ../../library/crypt.rst:152 +msgid "" +"A simple example illustrating typical use (a constant-time comparison " +"operation is needed to limit exposure to timing attacks. " +":func:`hmac.compare_digest` is suitable for this purpose)::" +msgstr "" +"以下简单示例演示了典型用法(需要一个时间固定的比较操作来限制留给计时攻击的暴露面。 :func:`hmac.compare_digest` 即很适用):" + +#: ../../library/crypt.rst:172 +msgid "" +"To generate a hash of a password using the strongest available method and " +"check it against the original::" +msgstr "采用当前强度最高的方法生成哈希值,并与原口令进行核对:" diff --git a/library/crypto.po b/library/crypto.po new file mode 100644 index 000000000..d2df64d91 --- /dev/null +++ b/library/crypto.po @@ -0,0 +1,37 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) 2001-2022, Python Software Foundation +# This file is distributed under the same license as the Python package. +# FIRST AUTHOR , YEAR. +# +# Translators: +# Alpha Du , 2019 +# Freesand Leo , 2020 +# +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: Python 3.9\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2022-11-04 14:34+0000\n" +"PO-Revision-Date: 2017-02-16 23:04+0000\n" +"Last-Translator: Freesand Leo , 2020\n" +"Language-Team: Chinese (China) (https://www.transifex.com/python-doc/teams/5390/zh_CN/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: zh_CN\n" +"Plural-Forms: nplurals=1; plural=0;\n" + +#: ../../library/crypto.rst:5 +msgid "Cryptographic Services" +msgstr "加密服务" + +#: ../../library/crypto.rst:9 +msgid "" +"The modules described in this chapter implement various algorithms of a " +"cryptographic nature. They are available at the discretion of the " +"installation. On Unix systems, the :mod:`crypt` module may also be " +"available. Here's an overview:" +msgstr "" +"本章中描述的模块实现了加密性质的各种算法。 它们可以在安装时自行选择。 在 Unix 系统上,:mod:`crypt` 模块也可以使用。 " +"以下是为内容概要:" diff --git a/library/csv.po b/library/csv.po new file mode 100644 index 000000000..687871a1a --- /dev/null +++ b/library/csv.po @@ -0,0 +1,677 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) 2001-2022, Python Software Foundation +# This file is distributed under the same license as the Python package. +# FIRST AUTHOR , YEAR. +# +# Translators: +# Jerry Chen , 2017 +# Fred , 2018 +# dannyvi , 2018 +# walkinrain , 2019 +# 开 方 , 2019 +# Yunxuan Chai , 2019 +# Chang Ye , 2019 +# Arisaka97 , 2019 +# ppcfish , 2019 +# Hissy , 2020 +# Freesand Leo , 2021 +# +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: Python 3.9\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2022-11-04 14:34+0000\n" +"PO-Revision-Date: 2017-02-16 23:04+0000\n" +"Last-Translator: Freesand Leo , 2021\n" +"Language-Team: Chinese (China) (https://www.transifex.com/python-doc/teams/5390/zh_CN/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: zh_CN\n" +"Plural-Forms: nplurals=1; plural=0;\n" + +#: ../../library/csv.rst:2 +msgid ":mod:`csv` --- CSV File Reading and Writing" +msgstr ":mod:`csv` --- CSV 文件读写" + +#: ../../library/csv.rst:9 +msgid "**Source code:** :source:`Lib/csv.py`" +msgstr "**源代码:** :source:`Lib/csv.py`" + +#: ../../library/csv.rst:17 +msgid "" +"The so-called CSV (Comma Separated Values) format is the most common import " +"and export format for spreadsheets and databases. CSV format was used for " +"many years prior to attempts to describe the format in a standardized way in" +" :rfc:`4180`. The lack of a well-defined standard means that subtle " +"differences often exist in the data produced and consumed by different " +"applications. These differences can make it annoying to process CSV files " +"from multiple sources. Still, while the delimiters and quoting characters " +"vary, the overall format is similar enough that it is possible to write a " +"single module which can efficiently manipulate such data, hiding the details" +" of reading and writing the data from the programmer." +msgstr "" +"CSV (Comma Separated Values) 格式是电子表格和数据库中最常见的输入、输出文件格式。在 :rfc:`4180` " +"规范推出的很多年前,CSV 格式就已经被开始使用了,由于当时并没有合理的标准,不同应用程序读写的数据会存在细微的差别。这种差别让处理多个来源的 CSV " +"文件变得困难。但尽管分隔符会变化,此类文件的大致格式是相似的,所以编写一个单独的模块以高效处理此类数据,将程序员从读写数据的繁琐细节中解放出来是有可能的。" + +#: ../../library/csv.rst:28 +msgid "" +"The :mod:`csv` module implements classes to read and write tabular data in " +"CSV format. It allows programmers to say, \"write this data in the format " +"preferred by Excel,\" or \"read data from this file which was generated by " +"Excel,\" without knowing the precise details of the CSV format used by " +"Excel. Programmers can also describe the CSV formats understood by other " +"applications or define their own special-purpose CSV formats." +msgstr "" +":mod:`csv` 模块实现了 CSV 格式表单数据的读写。其提供了诸如“以兼容 Excel 的方式输出数据文件”或“读取 Excel " +"程序输出的数据文件”的功能,程序员无需知道 Excel 所采用 CSV 格式的细节。此模块同样可以用于定义其他应用程序可用的 CSV " +"格式或定义特定需求的 CSV 格式。" + +#: ../../library/csv.rst:35 +msgid "" +"The :mod:`csv` module's :class:`reader` and :class:`writer` objects read and" +" write sequences. Programmers can also read and write data in dictionary " +"form using the :class:`DictReader` and :class:`DictWriter` classes." +msgstr "" +":mod:`csv` 模块中的 :class:`reader` 类和 :class:`writer` 类可用于读写序列化的数据。也可使用 " +":class:`DictReader` 类和 :class:`DictWriter` 类以字典的形式读写数据。" + +#: ../../library/csv.rst:41 +msgid ":pep:`305` - CSV File API" +msgstr "该实现在“Python 增强提议” - PEP `305` (CSV 文件 API) 中被提出" + +#: ../../library/csv.rst:42 +msgid "" +"The Python Enhancement Proposal which proposed this addition to Python." +msgstr "《Python 增强提议》提出了对 Python 的这一补充。" + +#: ../../library/csv.rst:48 +msgid "Module Contents" +msgstr "模块内容" + +#: ../../library/csv.rst:50 +msgid "The :mod:`csv` module defines the following functions:" +msgstr ":mod:`csv` 模块定义了以下函数:" + +#: ../../library/csv.rst:58 +msgid "" +"Return a reader object which will iterate over lines in the given *csvfile*." +" *csvfile* can be any object which supports the :term:`iterator` protocol " +"and returns a string each time its :meth:`!__next__` method is called --- " +":term:`file objects ` and list objects are both suitable. If " +"*csvfile* is a file object, it should be opened with ``newline=''``. [1]_ " +"An optional *dialect* parameter can be given which is used to define a set " +"of parameters specific to a particular CSV dialect. It may be an instance " +"of a subclass of the :class:`Dialect` class or one of the strings returned " +"by the :func:`list_dialects` function. The other optional *fmtparams* " +"keyword arguments can be given to override individual formatting parameters " +"in the current dialect. For full details about the dialect and formatting " +"parameters, see section :ref:`csv-fmt-params`." +msgstr "" +"返回一个 reader 对象,该对象将逐行遍历 *csvfile*。*csvfile* 可以是任何对象,只要这个对象支持 " +":term:`iterator` 协议并在每次调用 :meth:`!__next__` 方法时都返回字符串,:term:`文件对象 ` 和列表对象均适用。如果 *csvfile* 是文件对象,则打开它时应使用 ``newline=''``。 [1]_ 可选参数 " +"*dialect* 是用于不同的 CSV 变种的特定参数组。它可以是 :class:`Dialect` 类的子类的实例,也可以是 " +":func:`list_dialects` 函数返回的字符串之一。另一个可选关键字参数 *fmtparams* " +"可以覆写当前变种格式中的单个格式设置。有关变种和格式设置参数的完整详细信息,请参见 :ref:`csv-fmt-params` 部分。" + +#: ../../library/csv.rst:71 +msgid "" +"Each row read from the csv file is returned as a list of strings. No " +"automatic data type conversion is performed unless the ``QUOTE_NONNUMERIC`` " +"format option is specified (in which case unquoted fields are transformed " +"into floats)." +msgstr "" +"csv 文件的每一行都读取为一个由字符串组成的列表。除非指定了 ``QUOTE_NONNUMERIC`` " +"格式选项(在这种情况下,未加引号的字段会转换为浮点数),否则不会执行自动数据类型转换。" + +#: ../../library/csv.rst:75 ../../library/csv.rst:105 +#: ../../library/csv.rst:176 ../../library/csv.rst:212 +msgid "A short usage example::" +msgstr "一个简短的用法示例:: " + +#: ../../library/csv.rst:88 +msgid "" +"Return a writer object responsible for converting the user's data into " +"delimited strings on the given file-like object. *csvfile* can be any " +"object with a :func:`write` method. If *csvfile* is a file object, it " +"should be opened with ``newline=''`` [1]_. An optional *dialect* parameter " +"can be given which is used to define a set of parameters specific to a " +"particular CSV dialect. It may be an instance of a subclass of the " +":class:`Dialect` class or one of the strings returned by the " +":func:`list_dialects` function. The other optional *fmtparams* keyword " +"arguments can be given to override individual formatting parameters in the " +"current dialect. For full details about dialects and formatting parameters," +" see the :ref:`csv-fmt-params` section. To make it as easy as possible to " +"interface with modules which implement the DB API, the value :const:`None` " +"is written as the empty string. While this isn't a reversible " +"transformation, it makes it easier to dump SQL NULL data values to CSV files" +" without preprocessing the data returned from a ``cursor.fetch*`` call. All " +"other non-string data are stringified with :func:`str` before being written." +msgstr "" +"返回一个 writer 对象,该对象负责将用户的数据在给定的文件类对象上转换为带分隔符的字符串。 *csvfile* 可以是任何具有 " +":func:`write` 方法的对象。 如果 *csvfile* 是一个文件对象,则打开它时应使用 ``newline=''`` [1]_。 " +"可以给出可选的 *dialect* 形参用来定义一组特定 CSV 变种专属的形参。 它可以是 :class:`Dialect` 类的某个子类的实例或是 " +":func:`list_dialects` 函数所返回的字符串之一。 还可以给出另一个可选的 *fmtparams* " +"关键字参数来覆盖当前变种中的单个格式化形参。 有关各个变种和格式化形参的完整细节,请参阅 :ref:`csv-fmt-params` 部分。 " +"为了尽量简化与实现 DB API 的模块之间的接口,:const:`None` 值会被当作空字符串写入。 虽然这个转换是不可逆的,但它可以简化 SQL " +"NULL 数据值到 CSV 文件的转储而无需预处理从 ``cursor.fetch*`` 调用返回的数据。 在被写入之前所有其他非字符串数据都会先用 " +":func:`str` 来转转为字符串。" + +#: ../../library/csv.rst:117 +msgid "" +"Associate *dialect* with *name*. *name* must be a string. The dialect can " +"be specified either by passing a sub-class of :class:`Dialect`, or by " +"*fmtparams* keyword arguments, or both, with keyword arguments overriding " +"parameters of the dialect. For full details about dialects and formatting " +"parameters, see section :ref:`csv-fmt-params`." +msgstr "" +"将 *dialect* 与 *name* 关联起来。 *name* 必须是字符串。 变种的指定可以通过传入一个 :class:`Dialect` " +"的子类,或通过 *fmtparams* 关键字参数,或是两者同时传入,此时关键字参数会覆盖 dialect 形参。 " +"有关变种和格式化形参的完整细节,请参阅 :ref:`csv-fmt-params` 部分。" + +#: ../../library/csv.rst:126 +msgid "" +"Delete the dialect associated with *name* from the dialect registry. An " +":exc:`Error` is raised if *name* is not a registered dialect name." +msgstr "从变种注册表中删除 *name* 对应的变种。如果 *name* 不是已注册的变种名称,则抛出 :exc:`Error` 异常。" + +#: ../../library/csv.rst:132 +msgid "" +"Return the dialect associated with *name*. An :exc:`Error` is raised if " +"*name* is not a registered dialect name. This function returns an immutable" +" :class:`Dialect`." +msgstr "" +"返回 *name* 对应的变种。如果 *name* 不是已注册的变种名称,则抛出 :exc:`Error` 异常。该函数返回的是不可变的 " +":class:`Dialect` 对象。" + +#: ../../library/csv.rst:138 +msgid "Return the names of all registered dialects." +msgstr "返回所有已注册变种的名称。" + +#: ../../library/csv.rst:143 +msgid "" +"Returns the current maximum field size allowed by the parser. If *new_limit*" +" is given, this becomes the new limit." +msgstr "返回解析器当前允许的最大字段大小。如果指定了 *new_limit*,则它将成为新的最大字段大小。" + +#: ../../library/csv.rst:147 +msgid "The :mod:`csv` module defines the following classes:" +msgstr ":mod:`csv` 模块定义了以下类:" + +#: ../../library/csv.rst:152 +msgid "" +"Create an object that operates like a regular reader but maps the " +"information in each row to a :class:`dict` whose keys are given by the " +"optional *fieldnames* parameter." +msgstr "" +"创建一个对象,该对象在操作上类似于常规 reader,但是将每行中的信息映射到一个 :class:`dict`,该 dict 的键由 " +"*fieldnames* 可选参数给出。" + +#: ../../library/csv.rst:156 +msgid "" +"The *fieldnames* parameter is a :term:`sequence`. If *fieldnames* is " +"omitted, the values in the first row of file *f* will be used as the " +"fieldnames. Regardless of how the fieldnames are determined, the dictionary" +" preserves their original ordering." +msgstr "" +"*fieldnames* 参数是一个 :term:`sequence`。如果省略 *fieldnames*,则文件 *f* " +"第一行中的值将用作字段名。无论字段名是如何确定的,字典都将保留其原始顺序。" + +#: ../../library/csv.rst:161 +msgid "" +"If a row has more fields than fieldnames, the remaining data is put in a " +"list and stored with the fieldname specified by *restkey* (which defaults to" +" ``None``). If a non-blank row has fewer fields than fieldnames, the " +"missing values are filled-in with the value of *restval* (which defaults to " +"``None``)." +msgstr "" +"如果某一行中的字段多于字段名,则剩余数据会被放入一个列表,并与 *restkey* 所指定的字段名 (默认为 ``None``) 一起保存。 " +"如果某个非空白行的字段少于字段名,则缺失的值会使用 *restval* 的值来填充 (默认为 ``None``)。" + +#: ../../library/csv.rst:167 +msgid "" +"All other optional or keyword arguments are passed to the underlying " +":class:`reader` instance." +msgstr "所有其他可选或关键字参数都传递给底层的 :class:`reader` 实例。" + +#: ../../library/csv.rst:170 +msgid "Returned rows are now of type :class:`OrderedDict`." +msgstr "返回的行现在的类型是 :class:`OrderedDict`。" + +#: ../../library/csv.rst:173 +msgid "Returned rows are now of type :class:`dict`." +msgstr "现在,返回的行是 :class:`dict` 类型。" + +#: ../../library/csv.rst:194 +msgid "" +"Create an object which operates like a regular writer but maps dictionaries " +"onto output rows. The *fieldnames* parameter is a :mod:`sequence " +"` of keys that identify the order in which values in the " +"dictionary passed to the :meth:`writerow` method are written to file *f*. " +"The optional *restval* parameter specifies the value to be written if the " +"dictionary is missing a key in *fieldnames*. If the dictionary passed to " +"the :meth:`writerow` method contains a key not found in *fieldnames*, the " +"optional *extrasaction* parameter indicates what action to take. If it is " +"set to ``'raise'``, the default value, a :exc:`ValueError` is raised. If it " +"is set to ``'ignore'``, extra values in the dictionary are ignored. Any " +"other optional or keyword arguments are passed to the underlying " +":class:`writer` instance." +msgstr "" +"创建一个对象,该对象在操作上类似常规 writer,但会将字典映射到输出行。 *fieldnames* 参数是由键组成的 :mod:`序列 " +"`,它指定字典中值的顺序,这些值会按指定顺序传递给 :meth:`writerow` 方法并写入文件 *f*。 " +"如果字典缺少 *fieldnames* 中的键,则可选参数 *restval* 用于指定要写入的值。 如果传递给 :meth:`writerow` " +"方法的字典的某些键在 *fieldnames* 中找不到,则可选参数 *extrasaction* 用于指定要执行的操作。 如果将其设置为默认值 " +"``'raise'``,则会引发 :exc:`ValueError`。 如果将其设置为 ``'ignore'``,则字典中的其他键值将被忽略。 " +"所有其他可选或关键字参数都传递给底层的 :class:`writer` 实例。" + +#: ../../library/csv.rst:209 +msgid "" +"Note that unlike the :class:`DictReader` class, the *fieldnames* parameter " +"of the :class:`DictWriter` class is not optional." +msgstr "" +"注意,与 :class:`DictReader` 类不同,:class:`DictWriter` 类的 *fieldnames* 参数不是可选参数。" + +#: ../../library/csv.rst:228 +msgid "" +"The :class:`Dialect` class is a container class whose attributes contain " +"information for how to handle doublequotes, whitespace, delimiters, etc. Due" +" to the lack of a strict CSV specification, different applications produce " +"subtly different CSV data. :class:`Dialect` instances define how " +":class:`reader` and :class:`writer` instances behave." +msgstr "" +":class:`Dialect` 类是一个容器类,其属性包含有如何处理双引号、空白符、分隔符等的信息。 由于缺少严格的 CSV " +"规格描述,不同的应用程序会产生略有差别的 CSV 数据。 :class:`Dialect` 实例定义了 :class:`reader` 和 " +":class:`writer` 实例将具有怎样的行为。" + +#: ../../library/csv.rst:234 +msgid "" +"All available :class:`Dialect` names are returned by :func:`list_dialects`, " +"and they can be registered with specific :class:`reader` and :class:`writer`" +" classes through their initializer (``__init__``) functions like this::" +msgstr "" +"所有可用的 :class:`Dialect` 名称会由 :func:`list_dialects` 返回,并且它们可由特定的 " +":class:`reader` 和 :class:`writer` 类通过它们的初始化函数 (``__init__``) 来注册,例如::" + +#: ../../library/csv.rst:247 +msgid "" +"The :class:`excel` class defines the usual properties of an Excel-generated " +"CSV file. It is registered with the dialect name ``'excel'``." +msgstr ":class:`excel` 类定义了 Excel 生成的 CSV 文件的常规属性。它在变种注册表中的名称是 ``'excel'``。" + +#: ../../library/csv.rst:253 +msgid "" +"The :class:`excel_tab` class defines the usual properties of an Excel-" +"generated TAB-delimited file. It is registered with the dialect name " +"``'excel-tab'``." +msgstr "" +":class:`excel_tab` 类定义了 Excel 生成的、制表符分隔的 CSV 文件的常规属性。它在变种注册表中的名称是 ``'excel-" +"tab'``。" + +#: ../../library/csv.rst:259 +msgid "" +"The :class:`unix_dialect` class defines the usual properties of a CSV file " +"generated on UNIX systems, i.e. using ``'\\n'`` as line terminator and " +"quoting all fields. It is registered with the dialect name ``'unix'``." +msgstr "" +":class:`unix_dialect` 类定义了在 UNIX 系统上生成的 CSV 文件的常规属性,即使用 ``'\\n'`` " +"作为换行符,且所有字段都有引号包围。它在变种注册表中的名称是 ``'unix'``。" + +#: ../../library/csv.rst:268 +msgid "The :class:`Sniffer` class is used to deduce the format of a CSV file." +msgstr ":class:`Sniffer` 类用于推断 CSV 文件的格式。" + +#: ../../library/csv.rst:270 +msgid "The :class:`Sniffer` class provides two methods:" +msgstr ":class:`Sniffer` 类提供了两个方法:" + +#: ../../library/csv.rst:274 +msgid "" +"Analyze the given *sample* and return a :class:`Dialect` subclass reflecting" +" the parameters found. If the optional *delimiters* parameter is given, it " +"is interpreted as a string containing possible valid delimiter characters." +msgstr "" +"分析给定的 *sample* 并返回一个 :class:`Dialect` 子类,该子类中包含了分析出的格式参数。如果给出可选的 " +"*delimiters* 参数,则该参数会被解释为字符串,该字符串包含了可能的有效定界符。" + +#: ../../library/csv.rst:282 +msgid "" +"Analyze the sample text (presumed to be in CSV format) and return " +":const:`True` if the first row appears to be a series of column headers." +msgstr "分析示例文本(假定为 CSV 格式),如果第一行很可能是一系列列标题,则返回 :const:`True`。" + +#: ../../library/csv.rst:285 +msgid "An example for :class:`Sniffer` use::" +msgstr "使用 :class:`Sniffer` 的示例:" + +#: ../../library/csv.rst:294 +msgid "The :mod:`csv` module defines the following constants:" +msgstr ":mod:`csv` 模块定义了以下常量:" + +#: ../../library/csv.rst:298 +msgid "Instructs :class:`writer` objects to quote all fields." +msgstr "指示 :class:`writer` 对象给所有字段加上引号。" + +#: ../../library/csv.rst:303 +msgid "" +"Instructs :class:`writer` objects to only quote those fields which contain " +"special characters such as *delimiter*, *quotechar* or any of the characters" +" in *lineterminator*." +msgstr "" +"指示 :class:`writer` 对象仅为包含特殊字符(例如 *定界符*、*引号字符* 或 *行结束符* 中的任何字符)的字段加上引号。" + +#: ../../library/csv.rst:310 +msgid "Instructs :class:`writer` objects to quote all non-numeric fields." +msgstr "指示 :class:`writer` 对象为所有非数字字段加上引号。" + +#: ../../library/csv.rst:312 +msgid "Instructs the reader to convert all non-quoted fields to type *float*." +msgstr "指示 reader 将所有未用引号引出的字段转换为 *float* 类型。" + +#: ../../library/csv.rst:317 +msgid "" +"Instructs :class:`writer` objects to never quote fields. When the current " +"*delimiter* occurs in output data it is preceded by the current *escapechar*" +" character. If *escapechar* is not set, the writer will raise :exc:`Error` " +"if any characters that require escaping are encountered." +msgstr "" +"指示 :class:`writer` 对象不使用引号引出字段。当 *定界符* 出现在输出数据中时,其前面应该有 *转义符*。如果未设置 " +"*转义符*,则遇到任何需要转义的字符时,writer 都会抛出 :exc:`Error` 异常。" + +#: ../../library/csv.rst:322 +msgid "" +"Instructs :class:`reader` to perform no special processing of quote " +"characters." +msgstr "指示 :class:`reader` 不对引号字符进行特殊处理。" + +#: ../../library/csv.rst:324 +msgid "The :mod:`csv` module defines the following exception:" +msgstr ":mod:`csv` 模块定义了以下异常:" + +#: ../../library/csv.rst:329 +msgid "Raised by any of the functions when an error is detected." +msgstr "该异常可能由任何发生错误的函数抛出。" + +#: ../../library/csv.rst:334 +msgid "Dialects and Formatting Parameters" +msgstr "变种与格式参数" + +#: ../../library/csv.rst:336 +msgid "" +"To make it easier to specify the format of input and output records, " +"specific formatting parameters are grouped together into dialects. A " +"dialect is a subclass of the :class:`Dialect` class having a set of specific" +" methods and a single :meth:`validate` method. When creating " +":class:`reader` or :class:`writer` objects, the programmer can specify a " +"string or a subclass of the :class:`Dialect` class as the dialect parameter." +" In addition to, or instead of, the *dialect* parameter, the programmer can" +" also specify individual formatting parameters, which have the same names as" +" the attributes defined below for the :class:`Dialect` class." +msgstr "" +"为了更容易指定输入和输出记录的格式,特定的一组格式参数组合为一个 dialect(变种)。一个 dialect 是一个 :class:`Dialect`" +" 类的子类,它具有一组特定的方法和一个 :meth:`validate` 方法。创建 :class:`reader` 或 :class:`writer`" +" 对象时,程序员可以将某个字符串或 :class:`Dialect` 类的子类指定为 dialect 参数。要想补充或覆盖 *dialect* " +"参数,程序员还可以单独指定某些格式参数,这些参数的名称与下面 :class:`Dialect` 类定义的属性相同。" + +#: ../../library/csv.rst:346 +msgid "Dialects support the following attributes:" +msgstr "Dialect 类支持以下属性:" + +#: ../../library/csv.rst:351 +msgid "" +"A one-character string used to separate fields. It defaults to ``','``." +msgstr "一个用于分隔字段的单字符,默认为 ``','``。" + +#: ../../library/csv.rst:356 +msgid "" +"Controls how instances of *quotechar* appearing inside a field should " +"themselves be quoted. When :const:`True`, the character is doubled. When " +":const:`False`, the *escapechar* is used as a prefix to the *quotechar*. It" +" defaults to :const:`True`." +msgstr "" +"控制出现在字段中的 *引号字符* 本身应如何被引出。当该属性为 :const:`True` 时,双写引号字符。如果该属性为 " +":const:`False`,则在 *引号字符* 的前面放置 *转义符*。默认值为 :const:`True`。" + +#: ../../library/csv.rst:361 +msgid "" +"On output, if *doublequote* is :const:`False` and no *escapechar* is set, " +":exc:`Error` is raised if a *quotechar* is found in a field." +msgstr "" +"在输出时,如果 *doublequote* 是 :const:`False`,且 *转义符* 未指定,且在字段中发现 *引号字符* 时,会抛出 " +":exc:`Error` 异常。" + +#: ../../library/csv.rst:367 +msgid "" +"A one-character string used by the writer to escape the *delimiter* if " +"*quoting* is set to :const:`QUOTE_NONE` and the *quotechar* if *doublequote*" +" is :const:`False`. On reading, the *escapechar* removes any special meaning" +" from the following character. It defaults to :const:`None`, which disables " +"escaping." +msgstr "" +"一个用于 writer 的单字符,用来在 *quoting* 设置为 :const:`QUOTE_NONE` 的情况下转义 *定界符*,在 " +"*doublequote* 设置为 :const:`False` 的情况下转义 *引号字符*。在读取时,*escapechar* " +"去除了其后所跟字符的任何特殊含义。该属性默认为 :const:`None`,表示禁用转义。" + +#: ../../library/csv.rst:375 +msgid "" +"The string used to terminate lines produced by the :class:`writer`. It " +"defaults to ``'\\r\\n'``." +msgstr "放在 :class:`writer` 产生的行的结尾,默认为 ``'\\r\\n'``。" + +#: ../../library/csv.rst:380 +msgid "" +"The :class:`reader` is hard-coded to recognise either ``'\\r'`` or ``'\\n'``" +" as end-of-line, and ignores *lineterminator*. This behavior may change in " +"the future." +msgstr "" +":class:`reader` 经过硬编码,会识别 ``'\\r'`` 或 ``'\\n'`` 作为行尾,并忽略 " +"*lineterminator*。未来可能会更改这一行为。" + +#: ../../library/csv.rst:387 +msgid "" +"A one-character string used to quote fields containing special characters, " +"such as the *delimiter* or *quotechar*, or which contain new-line " +"characters. It defaults to ``'\"'``." +msgstr "一个单字符,用于包住含有特殊字符的字段,特殊字符如 *定界符* 或 *引号字符* 或换行符。默认为 ``'\"'``。" + +#: ../../library/csv.rst:394 +msgid "" +"Controls when quotes should be generated by the writer and recognised by the" +" reader. It can take on any of the :const:`QUOTE_\\*` constants (see " +"section :ref:`csv-contents`) and defaults to :const:`QUOTE_MINIMAL`." +msgstr "" +"控制 writer 何时生成引号,以及 reader 何时识别引号。该属性可以等于任何 :const:`QUOTE_\\*` 常量(参见 " +":ref:`csv-contents` 段落),默认为 :const:`QUOTE_MINIMAL`。" + +#: ../../library/csv.rst:401 +msgid "" +"When :const:`True`, whitespace immediately following the *delimiter* is " +"ignored. The default is :const:`False`." +msgstr "如果为 :const:`True`,则忽略 *定界符* 之后的空格。默认值为 :const:`False`。" + +#: ../../library/csv.rst:407 +msgid "" +"When ``True``, raise exception :exc:`Error` on bad CSV input. The default is" +" ``False``." +msgstr "如果为 ``True``,则在输入错误的 CSV 时抛出 :exc:`Error` 异常。默认值为 ``False``。" + +#: ../../library/csv.rst:411 +msgid "Reader Objects" +msgstr "Reader 对象" + +#: ../../library/csv.rst:413 +msgid "" +"Reader objects (:class:`DictReader` instances and objects returned by the " +":func:`reader` function) have the following public methods:" +msgstr "Reader 对象(:class:`DictReader` 实例和 :func:`reader` 函数返回的对象)具有以下公开方法:" + +#: ../../library/csv.rst:418 +msgid "" +"Return the next row of the reader's iterable object as a list (if the object" +" was returned from :func:`reader`) or a dict (if it is a :class:`DictReader`" +" instance), parsed according to the current :class:`Dialect`. Usually you " +"should call this as ``next(reader)``." +msgstr "" +"返回 reader 的可迭代对象的下一行,它可以是一个列表(如果对象是由 :func:`reader` 返回)或字典(如果是一个 " +":class:`DictReader` 实例),根据当前 :class:`Dialect` 来解析。 通常你应当以 ``next(reader)`` " +"的形式来调用它。" + +#: ../../library/csv.rst:424 +msgid "Reader objects have the following public attributes:" +msgstr "Reader 对象具有以下公开属性:" + +#: ../../library/csv.rst:428 +msgid "A read-only description of the dialect in use by the parser." +msgstr "变种描述,只读,供解析器使用。" + +#: ../../library/csv.rst:433 +msgid "" +"The number of lines read from the source iterator. This is not the same as " +"the number of records returned, as records can span multiple lines." +msgstr "源迭代器已经读取了的行数。它与返回的记录数不同,因为记录可能跨越多行。" + +#: ../../library/csv.rst:437 +msgid "DictReader objects have the following public attribute:" +msgstr "DictReader 对象具有以下公开属性:" + +#: ../../library/csv.rst:441 +msgid "" +"If not passed as a parameter when creating the object, this attribute is " +"initialized upon first access or when the first record is read from the " +"file." +msgstr "字段名称。如果在创建对象时未传入字段名称,则首次访问时或从文件中读取第一条记录时会初始化此属性。" + +#: ../../library/csv.rst:448 +msgid "Writer Objects" +msgstr "Writer 对象" + +#: ../../library/csv.rst:450 +msgid "" +":class:`Writer` objects (:class:`DictWriter` instances and objects returned " +"by the :func:`writer` function) have the following public methods. A *row* " +"must be an iterable of strings or numbers for :class:`Writer` objects and a " +"dictionary mapping fieldnames to strings or numbers (by passing them through" +" :func:`str` first) for :class:`DictWriter` objects. Note that complex " +"numbers are written out surrounded by parens. This may cause some problems " +"for other programs which read CSV files (assuming they support complex " +"numbers at all)." +msgstr "" +":class:`Writer` 对象(:class:`DictWriter` 实例和 :func:`writer` " +"函数返回的对象)具有下面的公开方法。对于 :class:`Writer` 对象,*行* 必须是(一组可迭代的)字符串或数字。对于 " +":class:`DictWriter` 对象,*行* 必须是一个字典,这个字典将字段名映射为字符串或数字(数字要先经过 :func:`str` " +"转换类型)。请注意,输出的复数会有括号包围。这样其他程序读取 CSV 文件时可能会有一些问题(假设它们完全支持复数)。" + +#: ../../library/csv.rst:461 +msgid "" +"Write the *row* parameter to the writer's file object, formatted according " +"to the current :class:`Dialect`. Return the return value of the call to the " +"*write* method of the underlying file object." +msgstr "" +"将 *row* 形参写入到 writer 的文件对象,根据当前 :class:`Dialect` 进行格式化。 返回对下层文件对象的 *write* " +"方法的调用的返回值。" + +#: ../../library/csv.rst:465 +msgid "Added support of arbitrary iterables." +msgstr "开始支持任意类型的迭代器。" + +#: ../../library/csv.rst:470 +msgid "" +"Write all elements in *rows* (an iterable of *row* objects as described " +"above) to the writer's file object, formatted according to the current " +"dialect." +msgstr "" +"将 *rows*(即能迭代出多个上述 *row* 对象的迭代器)中的所有元素写入 writer 的文件对象,并根据当前设置的变种进行格式化。" + +#: ../../library/csv.rst:474 +msgid "Writer objects have the following public attribute:" +msgstr "Writer 对象具有以下公开属性:" + +#: ../../library/csv.rst:479 +msgid "A read-only description of the dialect in use by the writer." +msgstr "变种描述,只读,供 writer 使用。" + +#: ../../library/csv.rst:482 +msgid "DictWriter objects have the following public method:" +msgstr "DictWriter 对象具有以下公开方法:" + +#: ../../library/csv.rst:487 +msgid "" +"Write a row with the field names (as specified in the constructor) to the " +"writer's file object, formatted according to the current dialect. Return the" +" return value of the :meth:`csvwriter.writerow` call used internally." +msgstr "" +"在 writer 的文件对象中,写入一行字段名称(字段名称在构造函数中指定),并根据当前设置的变种进行格式化。本方法的返回值就是内部使用的 " +":meth:`csvwriter.writerow` 方法的返回值。" + +#: ../../library/csv.rst:492 +msgid "" +":meth:`writeheader` now also returns the value returned by the " +":meth:`csvwriter.writerow` method it uses internally." +msgstr "现在 :meth:`writeheader` 也返回其内部使用的 :meth:`csvwriter.writerow` 方法的返回值。" + +#: ../../library/csv.rst:500 +msgid "Examples" +msgstr "示例" + +#: ../../library/csv.rst:502 +msgid "The simplest example of reading a CSV file::" +msgstr "读取 CSV 文件最简单的一个例子::" + +#: ../../library/csv.rst:510 +msgid "Reading a file with an alternate format::" +msgstr "读取其他格式的文件::" + +#: ../../library/csv.rst:518 +msgid "The corresponding simplest possible writing example is::" +msgstr "相应最简单的写入示例是::" + +#: ../../library/csv.rst:525 +msgid "" +"Since :func:`open` is used to open a CSV file for reading, the file will by " +"default be decoded into unicode using the system default encoding (see " +":func:`locale.getpreferredencoding`). To decode a file using a different " +"encoding, use the ``encoding`` argument of open::" +msgstr "" +"由于使用 :func:`open` 来读取 CSV 文件,因此默认情况下,将使用系统默认编码来解码文件并转换为 unicode(请参阅 " +":func:`locale.getpreferredencoding`)。要使用其他编码来解码文件,请使用 open 的 ``encoding`` " +"参数::" + +#: ../../library/csv.rst:536 +msgid "" +"The same applies to writing in something other than the system default " +"encoding: specify the encoding argument when opening the output file." +msgstr "这同样适用于写入非系统默认编码的内容:打开输出文件时,指定 encoding 参数。" + +#: ../../library/csv.rst:539 +msgid "Registering a new dialect::" +msgstr "注册一个新的变种::" + +#: ../../library/csv.rst:546 +msgid "" +"A slightly more advanced use of the reader --- catching and reporting " +"errors::" +msgstr "Reader 的更高级用法——捕获并报告错误::" + +#: ../../library/csv.rst:558 +msgid "" +"And while the module doesn't directly support parsing strings, it can easily" +" be done::" +msgstr "尽管该模块不直接支持解析字符串,但仍可如下轻松完成::" + +#: ../../library/csv.rst:567 +msgid "Footnotes" +msgstr "脚注" + +#: ../../library/csv.rst:568 +msgid "" +"If ``newline=''`` is not specified, newlines embedded inside quoted fields " +"will not be interpreted correctly, and on platforms that use ``\\r\\n`` " +"linendings on write an extra ``\\r`` will be added. It should always be " +"safe to specify ``newline=''``, since the csv module does its own " +"(:term:`universal `) newline handling." +msgstr "" +"如果没有指定 ``newline=''``,则嵌入引号中的换行符将无法正确解析,并且在写入时,使用 ``\\r\\n`` 换行的平台会有多余的 " +"``\\r`` 写入。由于 csv 模块会执行自己的(:term:`通用 `)换行符处理,因此指定 " +"``newline=''`` 应该总是安全的。" diff --git a/library/ctypes.po b/library/ctypes.po new file mode 100644 index 000000000..78c9f0b90 --- /dev/null +++ b/library/ctypes.po @@ -0,0 +1,3034 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) 2001-2024, Python Software Foundation +# This file is distributed under the same license as the Python package. +# FIRST AUTHOR , YEAR. +# +# Translators: +# Madlee , 2018 +# Alpha Du , 2019 +# walkinrain , 2019 +# Zombie110year , 2019 +# ppcfish , 2019 +# ruoyu zhang , 2019 +# Uchiha Kakashi <951156675@qq.com>, 2020 +# zeroswan , 2020 +# Freesand Leo , 2022 +# Rafael Fontenelle , 2024 +# +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: Python 3.9\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2024-08-30 16:51+0000\n" +"PO-Revision-Date: 2017-02-16 23:05+0000\n" +"Last-Translator: Rafael Fontenelle , 2024\n" +"Language-Team: Chinese (China) (https://app.transifex.com/python-doc/teams/5390/zh_CN/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: zh_CN\n" +"Plural-Forms: nplurals=1; plural=0;\n" + +#: ../../library/ctypes.rst:2 +msgid ":mod:`ctypes` --- A foreign function library for Python" +msgstr ":mod:`ctypes` --- Python 的外部函数库" + +#: ../../library/ctypes.rst:11 +msgid "" +":mod:`ctypes` is a foreign function library for Python. It provides C " +"compatible data types, and allows calling functions in DLLs or shared " +"libraries. It can be used to wrap these libraries in pure Python." +msgstr "" +":mod:`ctypes` 是 Python 的外部函数库。它提供了与 C 兼容的数据类型,并允许调用 DLL 或共享库中的函数。可使用该模块以纯 " +"Python 形式对这些库进行封装。" + +#: ../../library/ctypes.rst:19 +msgid "ctypes tutorial" +msgstr "ctypes 教程" + +#: ../../library/ctypes.rst:21 +msgid "" +"Note: The code samples in this tutorial use :mod:`doctest` to make sure that" +" they actually work. Since some code samples behave differently under " +"Linux, Windows, or macOS, they contain doctest directives in comments." +msgstr "" +"注:本教程中的示例代码使用 :mod:`doctest` 来保证它们能正确运行。 由于有些代码示例在 Linux, Windows 或 macOS " +"上的行为有所不同,它们在注释中包含了一些 doctest 指令。" + +#: ../../library/ctypes.rst:25 +msgid "" +"Note: Some code samples reference the ctypes :class:`c_int` type. On " +"platforms where ``sizeof(long) == sizeof(int)`` it is an alias to " +":class:`c_long`. So, you should not be confused if :class:`c_long` is " +"printed if you would expect :class:`c_int` --- they are actually the same " +"type." +msgstr "" +"注意:部分示例代码引用了 ctypes :class:`c_int` 类型。在 ``sizeof(long) == sizeof(int)`` " +"的平台上此类型是 :class:`c_long` 的一个别名。所以,在程序输出 :class:`c_long` 而不是你期望的 " +":class:`c_int` 时不必感到迷惑 --- 它们实际上是同一种类型。" + +#: ../../library/ctypes.rst:33 +msgid "Loading dynamic link libraries" +msgstr "载入动态连接库" + +#: ../../library/ctypes.rst:35 +msgid "" +":mod:`ctypes` exports the *cdll*, and on Windows *windll* and *oledll* " +"objects, for loading dynamic link libraries." +msgstr "" +":mod:`ctypes` 导出了 *cdll* 对象,在 Windows 系统中还导出了 *windll* 和 *oledll* " +"对象用于载入动态连接库。" + +#: ../../library/ctypes.rst:38 +msgid "" +"You load libraries by accessing them as attributes of these objects. *cdll* " +"loads libraries which export functions using the standard ``cdecl`` calling " +"convention, while *windll* libraries call functions using the ``stdcall`` " +"calling convention. *oledll* also uses the ``stdcall`` calling convention, " +"and assumes the functions return a Windows :c:type:`HRESULT` error code. The" +" error code is used to automatically raise an :class:`OSError` exception " +"when the function call fails." +msgstr "" +"通过操作这些对象的属性,你可以载入外部的动态链接库。*cdll* 载入按标准的 ``cdecl`` 调用协议导出的函数,而 *windll* 导入的库按" +" ``stdcall`` 调用协议调用其中的函数。 *oledll* 也按 ``stdcall`` 调用协议调用其中的函数,并假定该函数返回的是 " +"Windows :c:type:`HRESULT` 错误代码,并当函数调用失败时,自动根据该代码甩出一个 :class:`OSError` 异常。" + +#: ../../library/ctypes.rst:46 +msgid "" +"Windows errors used to raise :exc:`WindowsError`, which is now an alias of " +":exc:`OSError`." +msgstr "原来在 Windows 下抛出的异常类型 :exc:`WindowsError` 现在是 :exc:`OSError` 的一个别名。" + +#: ../../library/ctypes.rst:51 +msgid "" +"Here are some examples for Windows. Note that ``msvcrt`` is the MS standard " +"C library containing most standard C functions, and uses the cdecl calling " +"convention::" +msgstr "" +"这是一些 Windows 下的例子。注意:``msvcrt`` 是微软 C 标准库,包含了大部分 C 标准函数,这些函数都是以 cdecl " +"调用协议进行调用的。" + +#: ../../library/ctypes.rst:63 +msgid "Windows appends the usual ``.dll`` file suffix automatically." +msgstr "Windows 会自动添加通常的 ``.dll`` 文件扩展名。" + +#: ../../library/ctypes.rst:66 +msgid "" +"Accessing the standard C library through ``cdll.msvcrt`` will use an " +"outdated version of the library that may be incompatible with the one being " +"used by Python. Where possible, use native Python functionality, or else " +"import and use the ``msvcrt`` module." +msgstr "" +"通过 ``cdll.msvcrt`` 调用的标准 C 函数,可能会导致调用一个过时的,与当前 Python 所不兼容的函数。因此,请尽量使用标准的 " +"Python 函数,而不要使用 ``msvcrt`` 模块。" + +#: ../../library/ctypes.rst:71 +msgid "" +"On Linux, it is required to specify the filename *including* the extension " +"to load a library, so attribute access can not be used to load libraries. " +"Either the :meth:`LoadLibrary` method of the dll loaders should be used, or " +"you should load the library by creating an instance of CDLL by calling the " +"constructor::" +msgstr "" +"在 Linux 下,必须使用 *包含* 文件扩展名的文件名来导入共享库。因此不能简单使用对象属性的方式来导入库。因此,你可以使用方法 " +":meth:`LoadLibrary`,或构造 CDLL 对象来导入库。" + +#: ../../library/ctypes.rst:89 +msgid "Accessing functions from loaded dlls" +msgstr "操作导入的动态链接库中的函数" + +#: ../../library/ctypes.rst:91 +msgid "Functions are accessed as attributes of dll objects::" +msgstr "通过操作dll对象的属性来操作这些函数。" + +#: ../../library/ctypes.rst:106 +msgid "" +"Note that win32 system dlls like ``kernel32`` and ``user32`` often export " +"ANSI as well as UNICODE versions of a function. The UNICODE version is " +"exported with an ``W`` appended to the name, while the ANSI version is " +"exported with an ``A`` appended to the name. The win32 ``GetModuleHandle`` " +"function, which returns a *module handle* for a given module name, has the " +"following C prototype, and a macro is used to expose one of them as " +"``GetModuleHandle`` depending on whether UNICODE is defined or not::" +msgstr "" +"注意:Win32 系统的动态库,比如 ``kernel32`` 和 ``user32``,通常会同时导出同一个函数的 ANSI 版本和 UNICODE " +"版本。UNICODE 版本通常会在名字最后以 ``W`` 结尾,而 ANSI 版本的则以 ``A`` 结尾。 win32的 " +"``GetModuleHandle`` 函数会根据一个模块名返回一个 *模块句柄*,该函数暨同时包含这样的两个版本的原型函数,并通过宏 UNICODE " +"是否定义,来决定宏 ``GetModuleHandle`` 导出的是哪个具体函数。" + +#: ../../library/ctypes.rst:119 +msgid "" +"*windll* does not try to select one of them by magic, you must access the " +"version you need by specifying ``GetModuleHandleA`` or ``GetModuleHandleW`` " +"explicitly, and then call it with bytes or string objects respectively." +msgstr "" +"*windll* 不会通过这样的魔法手段来帮你决定选择哪一种函数,你必须显式的调用 ``GetModuleHandleA`` 或 " +"``GetModuleHandleW``,并分别使用字节对象或字符串对象作参数。" + +#: ../../library/ctypes.rst:123 +msgid "" +"Sometimes, dlls export functions with names which aren't valid Python " +"identifiers, like ``\"??2@YAPAXI@Z\"``. In this case you have to use " +":func:`getattr` to retrieve the function::" +msgstr "" +"有时候,dlls的导出的函数名不符合 Python 的标识符规范,比如 ``\"??2@YAPAXI@Z\"``。此时,你必须使用 " +":func:`getattr` 方法来获得该函数。" + +#: ../../library/ctypes.rst:131 +msgid "" +"On Windows, some dlls export functions not by name but by ordinal. These " +"functions can be accessed by indexing the dll object with the ordinal " +"number::" +msgstr "" +"Windows 下,有些 dll 导出的函数没有函数名,而是通过其顺序号调用。对此类函数,你也可以通过 dll 对象的数值索引来操作这些函数。" + +#: ../../library/ctypes.rst:148 +msgid "Calling functions" +msgstr "调用函数" + +#: ../../library/ctypes.rst:150 +msgid "" +"You can call these functions like any other Python callable. This example " +"uses the ``time()`` function, which returns system time in seconds since the" +" Unix epoch, and the ``GetModuleHandleA()`` function, which returns a win32 " +"module handle." +msgstr "" +"你可以貌似是调用其它 Python 函数那样直接调用这些函数。在这个例子中,我们调用了 ``time()`` 函数,该函数返回一个系统时间戳(从 " +"Unix 时间起点到现在的秒数),而``GetModuleHandleA()`` 函数返回一个 win32 模块句柄。" + +#: ../../library/ctypes.rst:155 +msgid "" +"This example calls both functions with a ``NULL`` pointer (``None`` should " +"be used as the ``NULL`` pointer)::" +msgstr "此函数中调用的两个函数都使用了空指针(用 ``None`` 作为空指针)::" + +#: ../../library/ctypes.rst:164 +msgid "" +":exc:`ValueError` is raised when you call an ``stdcall`` function with the " +"``cdecl`` calling convention, or vice versa::" +msgstr "" +"如果你用 ``cdecl`` 调用方式调用 ``stdcall`` 约定的函数,则会甩出一个异常 :exc:`ValueError`。反之亦然。" + +#: ../../library/ctypes.rst:179 +msgid "" +"To find out the correct calling convention you have to look into the C " +"header file or the documentation for the function you want to call." +msgstr "你必须阅读这些库的头文件或说明文档来确定它们的正确的调用协议。" + +#: ../../library/ctypes.rst:182 +msgid "" +"On Windows, :mod:`ctypes` uses win32 structured exception handling to " +"prevent crashes from general protection faults when functions are called " +"with invalid argument values::" +msgstr "在 Windows 中,:mod:`ctypes` 使用 win32 结构化异常处理来防止由于在调用函数时使用非法参数导致的程序崩溃。" + +#: ../../library/ctypes.rst:192 +msgid "" +"There are, however, enough ways to crash Python with :mod:`ctypes`, so you " +"should be careful anyway. The :mod:`faulthandler` module can be helpful in " +"debugging crashes (e.g. from segmentation faults produced by erroneous C " +"library calls)." +msgstr "" +"然而,总有许多办法,通过调用 :mod:`ctypes` 使得 Python 程序崩溃。因此,你必须小心使用。 :mod:`faulthandler` " +"模块可以用于帮助诊断程序崩溃的原因。(比如由于错误的C库函数调用导致的段错误)。" + +#: ../../library/ctypes.rst:197 +msgid "" +"``None``, integers, bytes objects and (unicode) strings are the only native " +"Python objects that can directly be used as parameters in these function " +"calls. ``None`` is passed as a C ``NULL`` pointer, bytes objects and strings" +" are passed as pointer to the memory block that contains their data " +"(:c:type:`char *` or :c:type:`wchar_t *`). Python integers are passed as " +"the platforms default C :c:type:`int` type, their value is masked to fit " +"into the C type." +msgstr "" +"``None``,整型,字节对象和(UNICODE)字符串是仅有的可以直接作为函数参数使用的四种Python本地数据类型。`None`` 作为C的空指针" +" (``NULL``),字节和字符串类型作为一个指向其保存数据的内存块指针 (:c:type:`char *` 或 :c:type:`wchar_t " +"*`)。Python 的整型则作为平台默认的C的 :c:type:`int` 类型,他们的数值被截断以适应C类型的整型长度。" + +#: ../../library/ctypes.rst:204 +msgid "" +"Before we move on calling functions with other parameter types, we have to " +"learn more about :mod:`ctypes` data types." +msgstr "在我们开始调用函数前,我们必须先了解作为函数参数的 :mod:`ctypes` 数据类型。" + +#: ../../library/ctypes.rst:211 ../../library/ctypes.rst:2138 +msgid "Fundamental data types" +msgstr "基础数据类型" + +#: ../../library/ctypes.rst:213 +msgid ":mod:`ctypes` defines a number of primitive C compatible data types:" +msgstr ":mod:`ctypes` 定义了一些和C兼容的基本数据类型:" + +#: ../../library/ctypes.rst:216 +msgid "ctypes type" +msgstr "ctypes 类型" + +#: ../../library/ctypes.rst:216 +msgid "C type" +msgstr "C 类型" + +#: ../../library/ctypes.rst:216 +msgid "Python type" +msgstr "Python 类型" + +#: ../../library/ctypes.rst:218 +msgid ":class:`c_bool`" +msgstr ":class:`c_bool`" + +#: ../../library/ctypes.rst:218 +msgid ":c:type:`_Bool`" +msgstr ":c:type:`_Bool`" + +#: ../../library/ctypes.rst:218 +msgid "bool (1)" +msgstr "bool (1)" + +#: ../../library/ctypes.rst:220 +msgid ":class:`c_char`" +msgstr ":class:`c_char`" + +#: ../../library/ctypes.rst:220 ../../library/ctypes.rst:224 +msgid ":c:type:`char`" +msgstr ":c:type:`char`" + +#: ../../library/ctypes.rst:220 +msgid "1-character bytes object" +msgstr "单字符字节串对象" + +#: ../../library/ctypes.rst:222 +msgid ":class:`c_wchar`" +msgstr ":class:`c_wchar`" + +#: ../../library/ctypes.rst:222 +msgid ":c:type:`wchar_t`" +msgstr ":c:type:`wchar_t`" + +#: ../../library/ctypes.rst:222 +msgid "1-character string" +msgstr "单字符字符串" + +#: ../../library/ctypes.rst:224 +msgid ":class:`c_byte`" +msgstr ":class:`c_byte`" + +#: ../../library/ctypes.rst:224 ../../library/ctypes.rst:226 +#: ../../library/ctypes.rst:228 ../../library/ctypes.rst:230 +#: ../../library/ctypes.rst:232 ../../library/ctypes.rst:234 +#: ../../library/ctypes.rst:236 ../../library/ctypes.rst:238 +#: ../../library/ctypes.rst:240 ../../library/ctypes.rst:242 +#: ../../library/ctypes.rst:245 ../../library/ctypes.rst:247 +msgid "int" +msgstr "int" + +#: ../../library/ctypes.rst:226 +msgid ":class:`c_ubyte`" +msgstr ":class:`c_ubyte`" + +#: ../../library/ctypes.rst:226 +msgid ":c:type:`unsigned char`" +msgstr ":c:type:`unsigned char`" + +#: ../../library/ctypes.rst:228 +msgid ":class:`c_short`" +msgstr ":class:`c_short`" + +#: ../../library/ctypes.rst:228 +msgid ":c:type:`short`" +msgstr ":c:type:`short`" + +#: ../../library/ctypes.rst:230 +msgid ":class:`c_ushort`" +msgstr ":class:`c_ushort`" + +#: ../../library/ctypes.rst:230 +msgid ":c:type:`unsigned short`" +msgstr ":c:type:`unsigned short`" + +#: ../../library/ctypes.rst:232 +msgid ":class:`c_int`" +msgstr ":class:`c_int`" + +#: ../../library/ctypes.rst:232 +msgid ":c:type:`int`" +msgstr ":c:type:`int`" + +#: ../../library/ctypes.rst:234 +msgid ":class:`c_uint`" +msgstr ":class:`c_uint`" + +#: ../../library/ctypes.rst:234 +msgid ":c:type:`unsigned int`" +msgstr ":c:type:`unsigned int`" + +#: ../../library/ctypes.rst:236 +msgid ":class:`c_long`" +msgstr ":class:`c_long`" + +#: ../../library/ctypes.rst:236 +msgid ":c:type:`long`" +msgstr ":c:type:`long`" + +#: ../../library/ctypes.rst:238 +msgid ":class:`c_ulong`" +msgstr ":class:`c_ulong`" + +#: ../../library/ctypes.rst:238 +msgid ":c:type:`unsigned long`" +msgstr ":c:type:`unsigned long`" + +#: ../../library/ctypes.rst:240 +msgid ":class:`c_longlong`" +msgstr ":class:`c_longlong`" + +#: ../../library/ctypes.rst:240 +msgid ":c:type:`__int64` or :c:type:`long long`" +msgstr ":c:type:`__int64` 或 :c:type:`long long`" + +#: ../../library/ctypes.rst:242 +msgid ":class:`c_ulonglong`" +msgstr ":class:`c_ulonglong`" + +#: ../../library/ctypes.rst:242 +msgid ":c:type:`unsigned __int64` or :c:type:`unsigned long long`" +msgstr ":c:type:`unsigned __int64` 或 :c:type:`unsigned long long`" + +#: ../../library/ctypes.rst:245 +msgid ":class:`c_size_t`" +msgstr ":class:`c_size_t`" + +#: ../../library/ctypes.rst:245 +msgid ":c:type:`size_t`" +msgstr ":c:type:`size_t`" + +#: ../../library/ctypes.rst:247 +msgid ":class:`c_ssize_t`" +msgstr ":class:`c_ssize_t`" + +#: ../../library/ctypes.rst:247 +msgid ":c:type:`ssize_t` or :c:type:`Py_ssize_t`" +msgstr ":c:type:`ssize_t` 或 :c:type:`Py_ssize_t`" + +#: ../../library/ctypes.rst:250 +msgid ":class:`c_float`" +msgstr ":class:`c_float`" + +#: ../../library/ctypes.rst:250 +msgid ":c:type:`float`" +msgstr ":c:type:`float`" + +#: ../../library/ctypes.rst:250 ../../library/ctypes.rst:252 +#: ../../library/ctypes.rst:254 +msgid "float" +msgstr "float" + +#: ../../library/ctypes.rst:252 +msgid ":class:`c_double`" +msgstr ":class:`c_double`" + +#: ../../library/ctypes.rst:252 +msgid ":c:type:`double`" +msgstr ":c:type:`double`" + +#: ../../library/ctypes.rst:254 +msgid ":class:`c_longdouble`" +msgstr ":class:`c_longdouble`" + +#: ../../library/ctypes.rst:254 +msgid ":c:type:`long double`" +msgstr ":c:type:`long double`" + +#: ../../library/ctypes.rst:256 +msgid ":class:`c_char_p`" +msgstr ":class:`c_char_p`" + +#: ../../library/ctypes.rst:256 +msgid ":c:type:`char *` (NUL terminated)" +msgstr ":c:type:`char *` (NUL terminated)" + +#: ../../library/ctypes.rst:256 +msgid "bytes object or ``None``" +msgstr "字节串对象或 ``None``" + +#: ../../library/ctypes.rst:258 +msgid ":class:`c_wchar_p`" +msgstr ":class:`c_wchar_p`" + +#: ../../library/ctypes.rst:258 +msgid ":c:type:`wchar_t *` (NUL terminated)" +msgstr ":c:type:`wchar_t *` (NUL terminated)" + +#: ../../library/ctypes.rst:258 +msgid "string or ``None``" +msgstr "字符串或 ``None``" + +#: ../../library/ctypes.rst:260 +msgid ":class:`c_void_p`" +msgstr ":class:`c_void_p`" + +#: ../../library/ctypes.rst:260 +msgid ":c:type:`void *`" +msgstr ":c:type:`void *`" + +#: ../../library/ctypes.rst:260 +msgid "int or ``None``" +msgstr "int 或 ``None``" + +#: ../../library/ctypes.rst:264 +msgid "The constructor accepts any object with a truth value." +msgstr "构造函数接受任何具有真值的对象。" + +#: ../../library/ctypes.rst:266 +msgid "" +"All these types can be created by calling them with an optional initializer " +"of the correct type and value::" +msgstr "所有这些类型都可以通过使用正确类型和值的可选初始值调用它们来创建::" + +#: ../../library/ctypes.rst:277 +msgid "" +"Since these types are mutable, their value can also be changed afterwards::" +msgstr "由于这些类型是可变的,它们的值也可以在以后更改::" + +#: ../../library/ctypes.rst:289 +msgid "" +"Assigning a new value to instances of the pointer types :class:`c_char_p`, " +":class:`c_wchar_p`, and :class:`c_void_p` changes the *memory location* they" +" point to, *not the contents* of the memory block (of course not, because " +"Python bytes objects are immutable)::" +msgstr "" +"当给指针类型的对象 :class:`c_char_p`, :class:`c_wchar_p` 和 :class:`c_void_p` " +"等赋值时,将改变它们所指向的 *内存地址*,而 *不是* 它们所指向的内存区域的 *内容* (这是理所当然的,因为 Python 的 bytes " +"对象是不可变的)::" + +#: ../../library/ctypes.rst:309 +msgid "" +"You should be careful, however, not to pass them to functions expecting " +"pointers to mutable memory. If you need mutable memory blocks, ctypes has a " +":func:`create_string_buffer` function which creates these in various ways. " +"The current memory block contents can be accessed (or changed) with the " +"``raw`` property; if you want to access it as NUL terminated string, use the" +" ``value`` property::" +msgstr "" +"但你要注意不能将它们传递给会改变指针所指内存的函数。如果你需要可改变的内存块,ctypes 提供了 " +":func:`create_string_buffer` 函数,它提供多种方式创建这种内存块。当前的内存块内容可以通过 ``raw`` " +"属性存取,如果你希望将它作为NUL结束的字符串,请使用 ``value`` 属性::" + +#: ../../library/ctypes.rst:333 +msgid "" +"The :func:`create_string_buffer` function replaces the :func:`c_buffer` " +"function (which is still available as an alias), as well as the " +":func:`c_string` function from earlier ctypes releases. To create a mutable" +" memory block containing unicode characters of the C type :c:type:`wchar_t` " +"use the :func:`create_unicode_buffer` function." +msgstr "" +":func:`create_string_buffer` 函数替代以前的ctypes版本中的 :func:`c_buffer` 函数 " +"(仍然可当作别名使用)和 :func:`c_string` 函数。:func:`create_unicode_buffer` 函数创建包含 " +"unicode 字符的可变内存块,与之对应的C语言类型是 :c:type:`wchar_t`。" + +#: ../../library/ctypes.rst:343 +msgid "Calling functions, continued" +msgstr "调用函数,继续" + +#: ../../library/ctypes.rst:345 +msgid "" +"Note that printf prints to the real standard output channel, *not* to " +":data:`sys.stdout`, so these examples will only work at the console prompt, " +"not from within *IDLE* or *PythonWin*::" +msgstr "" +"注意 printf 将打印到真正标准输出设备,而*不是* :data:`sys.stdout`,因此这些实例只能在控制台提示符下工作,而不能在 " +"*IDLE* 或 *PythonWin* 中运行。" + +#: ../../library/ctypes.rst:365 +msgid "" +"As has been mentioned before, all Python types except integers, strings, and" +" bytes objects have to be wrapped in their corresponding :mod:`ctypes` type," +" so that they can be converted to the required C data type::" +msgstr "" +"正如前面所提到过的,除了整数、字符串以及字节串之外,所有的 Python 类型都必须使用它们对应的 :mod:`ctypes` " +"类型包装,才能够被正确地转换为所需的C语言类型。" + +#: ../../library/ctypes.rst:378 +msgid "Calling functions with your own custom data types" +msgstr "使用自定义的数据类型调用函数" + +#: ../../library/ctypes.rst:380 +msgid "" +"You can also customize :mod:`ctypes` argument conversion to allow instances " +"of your own classes be used as function arguments. :mod:`ctypes` looks for " +"an :attr:`_as_parameter_` attribute and uses this as the function argument." +" Of course, it must be one of integer, string, or bytes::" +msgstr "" +"你也可以通过自定义 :mod:`ctypes` 参数转换方式来允许自定义类型作为参数。 :mod:`ctypes` 会寻找 " +":attr:`_as_parameter_` 属性并使用它作为函数参数。当然,它必须是数字、字符串或者二进制字符串::" + +#: ../../library/ctypes.rst:395 +msgid "" +"If you don't want to store the instance's data in the :attr:`_as_parameter_`" +" instance variable, you could define a :class:`property` which makes the " +"attribute available on request." +msgstr "" +"如果你不想把实例的数据存储到 :attr:`_as_parameter_` 属性。可以通过定义 :class:`property` 函数计算出这个属性。" + +#: ../../library/ctypes.rst:403 +msgid "Specifying the required argument types (function prototypes)" +msgstr "指定必选参数的类型(函数原型)" + +#: ../../library/ctypes.rst:405 +msgid "" +"It is possible to specify the required argument types of functions exported " +"from DLLs by setting the :attr:`argtypes` attribute." +msgstr "可以通过设置 :attr:`argtypes` 属性的方法指定从 DLL 中导出函数的必选参数类型。" + +#: ../../library/ctypes.rst:408 +msgid "" +":attr:`argtypes` must be a sequence of C data types (the ``printf`` function" +" is probably not a good example here, because it takes a variable number and" +" different types of parameters depending on the format string, on the other " +"hand this is quite handy to experiment with this feature)::" +msgstr "" +":attr:`argtypes` 必须是一个 C 数据类型的序列 (这里的 ``printf`` " +"可能不是个好例子,因为它是变长参数,而且每个参数的类型依赖于格式化字符串,不过尝试这个功能也很方便)::" + +#: ../../library/ctypes.rst:419 +msgid "" +"Specifying a format protects against incompatible argument types (just as a " +"prototype for a C function), and tries to convert the arguments to valid " +"types::" +msgstr "指定数据类型可以防止不合理的参数传递(就像 C 函数的原型),并且会自动尝试将参数转换为需要的类型::" + +#: ../../library/ctypes.rst:431 +msgid "" +"If you have defined your own classes which you pass to function calls, you " +"have to implement a :meth:`from_param` class method for them to be able to " +"use them in the :attr:`argtypes` sequence. The :meth:`from_param` class " +"method receives the Python object passed to the function call, it should do " +"a typecheck or whatever is needed to make sure this object is acceptable, " +"and then return the object itself, its :attr:`_as_parameter_` attribute, or " +"whatever you want to pass as the C function argument in this case. Again, " +"the result should be an integer, string, bytes, a :mod:`ctypes` instance, or" +" an object with an :attr:`_as_parameter_` attribute." +msgstr "" +"如果你想通过自定义类型传递参数给函数,必须实现 :meth:`from_param` 类方法,才能够将此自定义类型用于 :attr:`argtypes`" +" 序列。:meth:`from_param` 类方法接受一个 Python " +"对象作为函数输入,它应该进行类型检查或者其他必要的操作以保证接收到的对象是合法的,然后返回这个对象,或者它的 " +":attr:`_as_parameter_` 属性,或者其他你想要传递给 C 函数的参数。这里也一样,返回的结果必须是整型、字符串、二进制字符串、 " +":mod:`ctypes` 类型,或者一个具有 :attr:`_as_parameter_` 属性的对象。" + +#: ../../library/ctypes.rst:445 +msgid "Return types" +msgstr "返回类型" + +#: ../../library/ctypes.rst:447 +msgid "" +"By default functions are assumed to return the C :c:type:`int` type. Other " +"return types can be specified by setting the :attr:`restype` attribute of " +"the function object." +msgstr "" +"默认情况下都会假定函数返回 C :c:type:`int` 类型。 其他返回类型可以通过设置函数对象的 :attr:`restype` 属性来指定。" + +#: ../../library/ctypes.rst:451 +msgid "" +"Here is a more advanced example, it uses the ``strchr`` function, which " +"expects a string pointer and a char, and returns a pointer to a string::" +msgstr "这是个更高级的例子,它调用了 ``strchr`` 函数,这个函数接收一个字符串指针以及一个字符作为参数,返回另一个字符串指针。" + +#: ../../library/ctypes.rst:464 +msgid "" +"If you want to avoid the ``ord(\"x\")`` calls above, you can set the " +":attr:`argtypes` attribute, and the second argument will be converted from a" +" single character Python bytes object into a C char::" +msgstr "" +"如果希望避免上述的 ``ord(\"x\")`` 调用,可以设置 :attr:`argtypes` 属性,第二个参数就会将单字符的 Python " +"二进制字符对象转换为 C 字符::" + +#: ../../library/ctypes.rst:482 +msgid "" +"You can also use a callable Python object (a function or a class for " +"example) as the :attr:`restype` attribute, if the foreign function returns " +"an integer. The callable will be called with the *integer* the C function " +"returns, and the result of this call will be used as the result of your " +"function call. This is useful to check for error return values and " +"automatically raise an exception::" +msgstr "" +"如果外部函数返回了一个整数,你也可以使用要给可调用的 Python 对象(比如函数或者类)作为 :attr:`restype` 属性的值。将会以 C " +"函数返回的 *整数* 对象作为参数调用这个可调用对象,执行后的结果作为最终函数返回值。这在错误返回值校验和自动抛出异常等方面比较有用。" + +#: ../../library/ctypes.rst:505 +msgid "" +"``WinError`` is a function which will call Windows ``FormatMessage()`` api " +"to get the string representation of an error code, and *returns* an " +"exception. ``WinError`` takes an optional error code parameter, if no one is" +" used, it calls :func:`GetLastError` to retrieve it." +msgstr "" +"``WinError`` 函数可以调用 Windows 的 ``FormatMessage()`` API 获取错误码的字符串说明,然后 *返回* " +"一个异常。 ``WinError`` 接收一个可选的错误码作为参数,如果没有的话,它将调用 :func:`GetLastError` 获取错误码。" + +#: ../../library/ctypes.rst:510 +msgid "" +"Please note that a much more powerful error checking mechanism is available " +"through the :attr:`errcheck` attribute; see the reference manual for " +"details." +msgstr "请注意,使用 :attr:`errcheck` 属性可以实现更强大的错误检查手段;详情请见参考手册。" + +#: ../../library/ctypes.rst:517 +msgid "Passing pointers (or: passing parameters by reference)" +msgstr "传递指针(或以引用方式传递形参)" + +#: ../../library/ctypes.rst:519 +msgid "" +"Sometimes a C api function expects a *pointer* to a data type as parameter, " +"probably to write into the corresponding location, or if the data is too " +"large to be passed by value. This is also known as *passing parameters by " +"reference*." +msgstr "" +"有时候 C 函数接口可能由于要往某个地址写入值,或者数据太大不适合作为值传递,从而希望接收一个 *指针* 作为数据参数类型。这和 *传递参数引用* " +"类似。" + +#: ../../library/ctypes.rst:523 +msgid "" +":mod:`ctypes` exports the :func:`byref` function which is used to pass " +"parameters by reference. The same effect can be achieved with the " +":func:`pointer` function, although :func:`pointer` does a lot more work " +"since it constructs a real pointer object, so it is faster to use " +":func:`byref` if you don't need the pointer object in Python itself::" +msgstr "" +":mod:`ctypes` 暴露了 :func:`byref` 函数用于通过引用传递参数,使用 :func:`pointer` " +"函数也能达到同样的效果,只不过 :func:`pointer` 需要更多步骤,因为它要先构造一个真实指针对象。所以在 Python " +"代码本身不需要使用这个指针对象的情况下,使用 :func:`byref` 效率更高。" + +#: ../../library/ctypes.rst:545 +msgid "Structures and unions" +msgstr "结构体和联合" + +#: ../../library/ctypes.rst:547 +msgid "" +"Structures and unions must derive from the :class:`Structure` and " +":class:`Union` base classes which are defined in the :mod:`ctypes` module. " +"Each subclass must define a :attr:`_fields_` attribute. :attr:`_fields_` " +"must be a list of *2-tuples*, containing a *field name* and a *field type*." +msgstr "" +"结构体和联合必须继承自 :mod:`ctypes` 模块中的 :class:`Structure` 和 :class:`Union` 。子类必须定义 " +":attr:`_fields_` 属性。 :attr:`_fields_` 是一个二元组列表,二元组中包含 *field name* 和 *field " +"type* 。" + +#: ../../library/ctypes.rst:552 +msgid "" +"The field type must be a :mod:`ctypes` type like :class:`c_int`, or any " +"other derived :mod:`ctypes` type: structure, union, array, pointer." +msgstr "" +"type 字段必须是一个 :mod:`ctypes` 类型,比如 :class:`c_int`,或者其他 :mod:`ctypes` 类型: " +"结构体、联合、数组、指针。" + +#: ../../library/ctypes.rst:555 +msgid "" +"Here is a simple example of a POINT structure, which contains two integers " +"named *x* and *y*, and also shows how to initialize a structure in the " +"constructor::" +msgstr "这是一个简单的 POINT 结构体,它包含名称为 *x* 和 *y* 的两个变量,还展示了如何通过构造函数初始化结构体。" + +#: ../../library/ctypes.rst:575 +msgid "" +"You can, however, build much more complicated structures. A structure can " +"itself contain other structures by using a structure as a field type." +msgstr "当然,你可以构造更复杂的结构体。一个结构体可以通过设置 type 字段包含其他结构体或者自身。" + +#: ../../library/ctypes.rst:578 +msgid "" +"Here is a RECT structure which contains two POINTs named *upperleft* and " +"*lowerright*::" +msgstr "这是以一个 RECT 结构体,他包含了两个 POINT ,分别叫 *upperleft* 和 *lowerright*::" + +#: ../../library/ctypes.rst:592 +msgid "" +"Nested structures can also be initialized in the constructor in several " +"ways::" +msgstr "嵌套结构体可以通过几种方式构造初始化::" + +#: ../../library/ctypes.rst:597 +msgid "" +"Field :term:`descriptor`\\s can be retrieved from the *class*, they are " +"useful for debugging because they can provide useful information::" +msgstr "可以通过 *类* 获取字段 :term:`descriptor` ,它能提供很多有用的调试信息。" + +#: ../../library/ctypes.rst:611 +msgid "" +":mod:`ctypes` does not support passing unions or structures with bit-fields " +"to functions by value. While this may work on 32-bit x86, it's not " +"guaranteed by the library to work in the general case. Unions and " +"structures with bit-fields should always be passed to functions by pointer." +msgstr "" +":mod:`ctypes` 不支持带位域的结构体、联合以值的方式传给函数。这可能在 32 位 x86 " +"平台上可以正常工作,但是对于一般情况,这种行为是未定义的。带位域的结构体、联合应该总是通过指针传递给函数。" + +#: ../../library/ctypes.rst:617 +msgid "Structure/union alignment and byte order" +msgstr "结构体/联合字段对齐及字节顺序" + +#: ../../library/ctypes.rst:619 +msgid "" +"By default, Structure and Union fields are aligned in the same way the C " +"compiler does it. It is possible to override this behavior by specifying a " +":attr:`_pack_` class attribute in the subclass definition. This must be set " +"to a positive integer and specifies the maximum alignment for the fields. " +"This is what ``#pragma pack(n)`` also does in MSVC." +msgstr "" +"默认情况下,结构体和联合的字段与 C 的字节对齐是一样的。也可以在定义子类的时候指定类的 :attr:`_pack_` 属性来覆盖这种行为。 " +"它必须设置为一个正整数,表示字段的最大对齐字节。这和 MSVC 中的 ``#pragma pack(n)`` 功能一样。" + +#: ../../library/ctypes.rst:625 +msgid "" +":mod:`ctypes` uses the native byte order for Structures and Unions. To " +"build structures with non-native byte order, you can use one of the " +":class:`BigEndianStructure`, :class:`LittleEndianStructure`, " +":class:`BigEndianUnion`, and :class:`LittleEndianUnion` base classes. These" +" classes cannot contain pointer fields." +msgstr "" +":mod:`ctypes` 中的结构体和联合使用的是本地字节序。要使用非本地字节序,可以使用 :class:`BigEndianStructure`, " +":class:`LittleEndianStructure`, :class:`BigEndianUnion`, and " +":class:`LittleEndianUnion` 作为基类。这些类不能包含指针字段。" + +#: ../../library/ctypes.rst:635 +msgid "Bit fields in structures and unions" +msgstr "结构体和联合中的位域" + +#: ../../library/ctypes.rst:637 +msgid "" +"It is possible to create structures and unions containing bit fields. Bit " +"fields are only possible for integer fields, the bit width is specified as " +"the third item in the :attr:`_fields_` tuples::" +msgstr "结构体和联合中是可以包含位域字段的。位域只能用于整型字段,位长度通过 :attr:`_fields_` 中的第三个参数指定::" + +#: ../../library/ctypes.rst:655 +msgid "Arrays" +msgstr "数组" + +#: ../../library/ctypes.rst:657 +msgid "" +"Arrays are sequences, containing a fixed number of instances of the same " +"type." +msgstr "数组是一个序列,包含指定个数元素,且必须类型相同。" + +#: ../../library/ctypes.rst:659 +msgid "" +"The recommended way to create array types is by multiplying a data type with" +" a positive integer::" +msgstr "创建数组类型的推荐方式是使用一个类型乘以一个正数::" + +#: ../../library/ctypes.rst:664 +msgid "" +"Here is an example of a somewhat artificial data type, a structure " +"containing 4 POINTs among other stuff::" +msgstr "下面是一个构造的数据案例,结构体中包含了4个 POINT 和一些其他东西。" + +#: ../../library/ctypes.rst:680 +msgid "Instances are created in the usual way, by calling the class::" +msgstr "和平常一样,通过调用它创建实例::" + +#: ../../library/ctypes.rst:686 +msgid "" +"The above code print a series of ``0 0`` lines, because the array contents " +"is initialized to zeros." +msgstr "以上代码会打印几行 ``0 0`` ,因为数组内容被初始化为 0." + +#: ../../library/ctypes.rst:689 +msgid "Initializers of the correct type can also be specified::" +msgstr "也能通过指定正确类型的数据来初始化::" + +#: ../../library/ctypes.rst:705 +msgid "Pointers" +msgstr "指针" + +#: ../../library/ctypes.rst:707 +msgid "" +"Pointer instances are created by calling the :func:`pointer` function on a " +":mod:`ctypes` type::" +msgstr "可以将 :mod:`ctypes` 类型数据传入 :func:`pointer` 函数创建指针::" + +#: ../../library/ctypes.rst:715 +msgid "" +"Pointer instances have a :attr:`~_Pointer.contents` attribute which returns " +"the object to which the pointer points, the ``i`` object above::" +msgstr "指针实例拥有 :attr:`~_Pointer.contents` 属性,它返回指针指向的真实对象,如上面的 ``i`` 对象::" + +#: ../../library/ctypes.rst:722 +msgid "" +"Note that :mod:`ctypes` does not have OOR (original object return), it " +"constructs a new, equivalent object each time you retrieve an attribute::" +msgstr "注意 :mod:`ctypes` 并没有 OOR (返回原始对象), 每次访问这个属性时都会构造返回一个新的相同对象::" + +#: ../../library/ctypes.rst:731 +msgid "" +"Assigning another :class:`c_int` instance to the pointer's contents " +"attribute would cause the pointer to point to the memory location where this" +" is stored::" +msgstr "将这个指针的 contents 属性赋值为另一个 :class:`c_int` 实例将会导致该指针指向该实例的内存地址::" + +#: ../../library/ctypes.rst:743 +msgid "Pointer instances can also be indexed with integers::" +msgstr "指针对象也可以通过整数下标进行访问::" + +#: ../../library/ctypes.rst:749 +msgid "Assigning to an integer index changes the pointed to value::" +msgstr "通过整数下标赋值可以改变指针所指向的真实内容::" + +#: ../../library/ctypes.rst:758 +msgid "" +"It is also possible to use indexes different from 0, but you must know what " +"you're doing, just as in C: You can access or change arbitrary memory " +"locations. Generally you only use this feature if you receive a pointer from" +" a C function, and you *know* that the pointer actually points to an array " +"instead of a single item." +msgstr "" +"使用 0 以外的索引也是合法的,但是你必须确保知道自己为什么这么做,就像 C 语言中: 你可以访问或者修改任意内存内容。 " +"通常只会在函数接收指针是才会使用这种特性,而且你 *知道* 这个指针指向的是一个数组而不是单个值。" + +#: ../../library/ctypes.rst:764 +msgid "" +"Behind the scenes, the :func:`pointer` function does more than simply create" +" pointer instances, it has to create pointer *types* first. This is done " +"with the :func:`POINTER` function, which accepts any :mod:`ctypes` type, and" +" returns a new type::" +msgstr "" +"内部细节, :func:`pointer` 函数不只是创建了一个指针实例,它首先创建了一个指针 *类型* 。这是通过调用 " +":func:`POINTER` 函数实现的,它接收 :mod:`ctypes` 类型为参数,返回一个新的类型::" + +#: ../../library/ctypes.rst:780 +msgid "" +"Calling the pointer type without an argument creates a ``NULL`` pointer. " +"``NULL`` pointers have a ``False`` boolean value::" +msgstr "无参调用指针类型可以创建一个 ``NULL`` 指针。 ``NULL`` 指针的布尔值是 ``False`` ::" + +#: ../../library/ctypes.rst:788 +msgid "" +":mod:`ctypes` checks for ``NULL`` when dereferencing pointers (but " +"dereferencing invalid non-\\ ``NULL`` pointers would crash Python)::" +msgstr "" +"解引用指针的时候, :mod:`ctypes` 会帮你检测是否指针为 ``NULL`` (但是解引用无效的 非 ``NULL`` 指针仍会导致 " +"Python 崩溃)::" + +#: ../../library/ctypes.rst:807 +msgid "Type conversions" +msgstr "类型转换" + +#: ../../library/ctypes.rst:809 +msgid "" +"Usually, ctypes does strict type checking. This means, if you have " +"``POINTER(c_int)`` in the :attr:`argtypes` list of a function or as the type" +" of a member field in a structure definition, only instances of exactly the " +"same type are accepted. There are some exceptions to this rule, where " +"ctypes accepts other objects. For example, you can pass compatible array " +"instances instead of pointer types. So, for ``POINTER(c_int)``, ctypes " +"accepts an array of c_int::" +msgstr "" +"通常情况下, ctypes 具有严格的类型检查。这代表着, 如果在函数 :attr:`argtypes` 中或者结构体定义成员中有 " +"``POINTER(c_int)`` 类型,只有相同类型的实例才会被接受。 也有一些例外。比如,你可以传递兼容的数组实例给指针类型。所以,对于 " +"``POINTER(c_int)`` ,ctypes 也可以接受 c_int 类型的数组::" + +#: ../../library/ctypes.rst:830 +msgid "" +"In addition, if a function argument is explicitly declared to be a pointer " +"type (such as ``POINTER(c_int)``) in :attr:`argtypes`, an object of the " +"pointed type (``c_int`` in this case) can be passed to the function. ctypes" +" will apply the required :func:`byref` conversion in this case " +"automatically." +msgstr "" +"另外,如果一个函数 :attr:`argtypes` 列表中的参数显式的定义为指针类型(如 ``POINTER(c_int)`` ),指针所指向的 类型" +" (这个例子中是 ``c_int`` )也可以传递给函数。ctypes 会自动调用对应的 :func:`byref` 转换。" + +#: ../../library/ctypes.rst:835 +msgid "To set a POINTER type field to ``NULL``, you can assign ``None``::" +msgstr "可以给指针内容赋值为 None 将其设置为 ``Null`` ::" + +#: ../../library/ctypes.rst:842 +msgid "" +"Sometimes you have instances of incompatible types. In C, you can cast one " +"type into another type. :mod:`ctypes` provides a :func:`cast` function " +"which can be used in the same way. The ``Bar`` structure defined above " +"accepts ``POINTER(c_int)`` pointers or :class:`c_int` arrays for its " +"``values`` field, but not instances of other types::" +msgstr "" +"有时候你拥有一个不兼容的类型。 在 C 中,你可以将一个类型强制转换为另一个。 :mod:`ctypes` 中的 a :func:`cast` " +"函数提供了相同的功能。 上面的结构体 ``Bar`` 的 ``value`` 字段接收 ``POINTER(c_int)`` 指针或者 " +":class:`c_int` 数组,但是不能接受其他类型的实例::" + +#: ../../library/ctypes.rst:854 +msgid "For these cases, the :func:`cast` function is handy." +msgstr "这种情况下, 需要手动使用 :func:`cast` 函数。" + +#: ../../library/ctypes.rst:856 +msgid "" +"The :func:`cast` function can be used to cast a ctypes instance into a " +"pointer to a different ctypes data type. :func:`cast` takes two parameters," +" a ctypes object that is or can be converted to a pointer of some kind, and " +"a ctypes pointer type. It returns an instance of the second argument, which" +" references the same memory block as the first argument::" +msgstr "" +":func:`cast` 函数可以将一个指针实例强制转换为另一种 ctypes 类型。 :func:`cast` 接收两个参数,一个 ctypes " +"指针对象或者可以被转换为指针的其他类型对象,和一个 ctypes 指针类型。 返回第二个类型的一个实例,该返回实例和第一个参数指向同一片内存空间::" + +#: ../../library/ctypes.rst:867 +msgid "" +"So, :func:`cast` can be used to assign to the ``values`` field of ``Bar`` " +"the structure::" +msgstr "所以 :func:`cast` 可以用来给结构体 ``Bar`` 的 ``values`` 字段赋值::" + +#: ../../library/ctypes.rst:880 +msgid "Incomplete Types" +msgstr "不完整类型" + +#: ../../library/ctypes.rst:882 +msgid "" +"*Incomplete Types* are structures, unions or arrays whose members are not " +"yet specified. In C, they are specified by forward declarations, which are " +"defined later::" +msgstr "*不完整类型* 即还没有定义成员的结构体、联合或者数组。在 C 中,它们通常用于前置声明,然后在后面定义::" + +#: ../../library/ctypes.rst:893 +msgid "" +"The straightforward translation into ctypes code would be this, but it does " +"not work::" +msgstr "直接翻译成 ctypes 的代码如下,但是这行不通::" + +#: ../../library/ctypes.rst:906 +msgid "" +"because the new ``class cell`` is not available in the class statement " +"itself. In :mod:`ctypes`, we can define the ``cell`` class and set the " +":attr:`_fields_` attribute later, after the class statement::" +msgstr "" +"因为新的 ``cell 类`` 在 class 语句结束之前还没有完成定义。在 :mod:`ctypes` 中,我们可以先定义 ``cell`` " +"类,在 class 语句结束之后再设置 :attr:`_fields_` 属性::" + +#: ../../library/ctypes.rst:918 +msgid "" +"Let's try it. We create two instances of ``cell``, and let them point to " +"each other, and finally follow the pointer chain a few times::" +msgstr "让我们试试。我们定义两个 ``cell`` 实例,让它们互相指向对方,然后通过指针链式访问几次::" + +#: ../../library/ctypes.rst:939 +msgid "Callback functions" +msgstr "回调函数" + +#: ../../library/ctypes.rst:941 +msgid "" +":mod:`ctypes` allows creating C callable function pointers from Python " +"callables. These are sometimes called *callback functions*." +msgstr ":mod:`ctypes` 允许创建一个指向 Python 可调用对象的 C 函数。它们有时候被称为 *回调函数* 。" + +#: ../../library/ctypes.rst:944 +msgid "" +"First, you must create a class for the callback function. The class knows " +"the calling convention, the return type, and the number and types of " +"arguments this function will receive." +msgstr "首先,你必须为回调函数创建一个类,这个类知道调用约定,包括返回值类型以及函数接收的参数类型及个数。" + +#: ../../library/ctypes.rst:948 +msgid "" +"The :func:`CFUNCTYPE` factory function creates types for callback functions " +"using the ``cdecl`` calling convention. On Windows, the :func:`WINFUNCTYPE` " +"factory function creates types for callback functions using the ``stdcall`` " +"calling convention." +msgstr "" +":func:`CFUNCTYPE` 工厂函数使用 ``cdecl`` 调用约定创建回调函数类型。在 Windows 上, " +":func:`WINFUNCTYPE` 工厂函数使用 ``stdcall`` 调用约定为回调函数创建类型。" + +#: ../../library/ctypes.rst:953 +msgid "" +"Both of these factory functions are called with the result type as first " +"argument, and the callback functions expected argument types as the " +"remaining arguments." +msgstr "这些工厂函数的第一个参数是返回值类型,回调函数的参数类型作为剩余参数。" + +#: ../../library/ctypes.rst:957 +msgid "" +"I will present an example here which uses the standard C library's " +":c:func:`qsort` function, that is used to sort items with the help of a " +"callback function. :c:func:`qsort` will be used to sort an array of " +"integers::" +msgstr "" +"这里展示一个使用 C 标准库函数 :c:func:`qsort` 的例子,它使用一个回调函数对数据进行排序。 :c:func:`qsort` " +"将用来给整数数组排序::" + +#: ../../library/ctypes.rst:967 +msgid "" +":func:`qsort` must be called with a pointer to the data to sort, the number " +"of items in the data array, the size of one item, and a pointer to the " +"comparison function, the callback. The callback will then be called with two" +" pointers to items, and it must return a negative integer if the first item " +"is smaller than the second, a zero if they are equal, and a positive integer" +" otherwise." +msgstr "" +":func:`qsort` " +"必须接收的参数,一个指向待排序数据的指针,元素个数,每个元素的大小,以及一个指向排序函数的指针,即回调函数。然后回调函数接收两个元素的指针,如果第一个元素小于第二个,则返回一个负整数,如果相等则返回0,否则返回一个正整数。" + +#: ../../library/ctypes.rst:973 +msgid "" +"So our callback function receives pointers to integers, and must return an " +"integer. First we create the ``type`` for the callback function::" +msgstr "所以,我们的回调函数要接收两个整数指针,返回一个整数。首先我们创建回调函数的 ``类型`` ::" + +#: ../../library/ctypes.rst:979 +msgid "" +"To get started, here is a simple callback that shows the values it gets " +"passed::" +msgstr "首先,这是一个简单的回调,它会显示传入的值::" + +#: ../../library/ctypes.rst:989 +msgid "The result::" +msgstr "结果::" + +#: ../../library/ctypes.rst:999 +msgid "Now we can actually compare the two items and return a useful result::" +msgstr "现在我们可以比较两个元素并返回有用的结果了::" + +#: ../../library/ctypes.rst:1014 +msgid "As we can easily check, our array is sorted now::" +msgstr "我们可以轻易地验证,现在数组是有序的了::" + +#: ../../library/ctypes.rst:1021 +msgid "" +"The function factories can be used as decorator factories, so we may as well" +" write::" +msgstr "这些工厂函数可以当作装饰器工厂,所以可以这样写::" + +#: ../../library/ctypes.rst:1039 +msgid "" +"Make sure you keep references to :func:`CFUNCTYPE` objects as long as they " +"are used from C code. :mod:`ctypes` doesn't, and if you don't, they may be " +"garbage collected, crashing your program when a callback is made." +msgstr "" +"请确保你维持的 :func:`CFUNCTYPE` 对象的引用周期与它们在 C 代码中的使用期一样长。 :mod:`ctypes` " +"不会确保这一点,如果不这样做,它们可能会被垃圾回收,导致程序在执行回调函数时发生崩溃。" + +#: ../../library/ctypes.rst:1043 +msgid "" +"Also, note that if the callback function is called in a thread created " +"outside of Python's control (e.g. by the foreign code that calls the " +"callback), ctypes creates a new dummy Python thread on every invocation. " +"This behavior is correct for most purposes, but it means that values stored " +"with :class:`threading.local` will *not* survive across different callbacks," +" even when those calls are made from the same C thread." +msgstr "" +"注意,如果回调函数在Python之外的另外一个线程使用(比如,外部代码调用这个回调函数), ctypes 会在每一次调用上创建一个虚拟 Python " +"线程。这个行为在大多数情况下是合理的,但也意味着如果有数据使用 :class:`threading.local` " +"方式存储,将无法访问,就算它们是在同一个 C 线程中调用的 。" + +#: ../../library/ctypes.rst:1053 +msgid "Accessing values exported from dlls" +msgstr "访问 dll 的导出变量" + +#: ../../library/ctypes.rst:1055 +msgid "" +"Some shared libraries not only export functions, they also export variables." +" An example in the Python library itself is the :c:data:`Py_OptimizeFlag`, " +"an integer set to 0, 1, or 2, depending on the :option:`-O` or :option:`-OO`" +" flag given on startup." +msgstr "" +"一些动态链接库不仅仅导出函数,也会导出变量。一个例子就是 Python 库本身的 :c:data:`Py_OptimizeFlag` ,根据启动选项 " +":option:`-O` 、 :option:`-OO` 的不同,它是值可能为 0、1、2 的整型。" + +#: ../../library/ctypes.rst:1060 +msgid "" +":mod:`ctypes` can access values like this with the :meth:`in_dll` class " +"methods of the type. *pythonapi* is a predefined symbol giving access to " +"the Python C api::" +msgstr "" +":mod:`ctypes` 可以通过 :meth:`in_dll` 类方法访问这类变量 。 *pythonapi* 是用于访问 Python C " +"接口的预定义符号::" + +#: ../../library/ctypes.rst:1069 +msgid "" +"If the interpreter would have been started with :option:`-O`, the sample " +"would have printed ``c_long(1)``, or ``c_long(2)`` if :option:`-OO` would " +"have been specified." +msgstr "" +"如果解释器使用 :option:`-O` 选项启动,这个例子会打印 ``c_long(1)`` , 如果使用 :option:`-OO` 启动,则会打印" +" ``c_long(2)`` 。" + +#: ../../library/ctypes.rst:1073 +msgid "" +"An extended example which also demonstrates the use of pointers accesses the" +" :c:data:`PyImport_FrozenModules` pointer exported by Python." +msgstr "" +"一个扩展例子, 同时也展示了使用指针访问 Python 导出的 :c:data:`PyImport_FrozenModules` 指针对象。" + +#: ../../library/ctypes.rst:1076 +msgid "Quoting the docs for that value:" +msgstr "对文档中这个值的解释说明" + +#: ../../library/ctypes.rst:1078 +msgid "" +"This pointer is initialized to point to an array of :c:type:`struct _frozen`" +" records, terminated by one whose members are all ``NULL`` or zero. When a " +"frozen module is imported, it is searched in this table. Third-party code " +"could play tricks with this to provide a dynamically created collection of " +"frozen modules." +msgstr "" +"该指针被初始化为指向 :c:type:`struct _frozen` 数组,以 ``NULL`` 或者 0 " +"作为结束标记。当一个冻结模块被导入,首先要在这个表中搜索。第三方库可以以此来提供动态创建的冻结模块集合。" + +#: ../../library/ctypes.rst:1083 +msgid "" +"So manipulating this pointer could even prove useful. To restrict the " +"example size, we show only how this table can be read with :mod:`ctypes`::" +msgstr "这足以证明修改这个指针是很有用的。为了让实例大小不至于太长,这里只展示如何使用 :mod:`ctypes` 读取这个表::" + +#: ../../library/ctypes.rst:1095 +msgid "" +"We have defined the :c:type:`struct _frozen` data type, so we can get the " +"pointer to the table::" +msgstr "我们定义了 :c:type:`struct _frozen`  数据类型,接着就可以获取这张表的指针了::" + +#: ../../library/ctypes.rst:1102 +msgid "" +"Since ``table`` is a ``pointer`` to the array of ``struct_frozen`` records, " +"we can iterate over it, but we just have to make sure that our loop " +"terminates, because pointers have no size. Sooner or later it would probably" +" crash with an access violation or whatever, so it's better to break out of " +"the loop when we hit the ``NULL`` entry::" +msgstr "" +"由于 ``table`` 是指向 ``struct_frozen`` 数组的 ``指针`` " +",我们可以遍历它,只不过需要自己判断循环是否结束,因为指针本身并不包含长度。它早晚会因为访问到野指针或者什么的把自己搞崩溃,所以我们最好在遇到 " +"``NULL`` 后就让它退出循环::" + +#: ../../library/ctypes.rst:1120 +msgid "" +"The fact that standard Python has a frozen module and a frozen package " +"(indicated by the negative ``size`` member) is not well known, it is only " +"used for testing. Try it out with ``import __hello__`` for example." +msgstr "" +"Python 的冻结模块和冻结包(由负 ``size`` 成员表示)并不是广为人知的事情,它们仅仅用于实验。例如,可以使用 ``import " +"__hello__`` 尝试一下这个功能。" + +#: ../../library/ctypes.rst:1128 +msgid "Surprises" +msgstr "意外" + +#: ../../library/ctypes.rst:1130 +msgid "" +"There are some edges in :mod:`ctypes` where you might expect something other" +" than what actually happens." +msgstr ":mod:`ctypes` 也有自己的边界,有时候会发生一些意想不到的事情。" + +#: ../../library/ctypes.rst:1133 +msgid "Consider the following example::" +msgstr "比如下面的例子::" + +#: ../../library/ctypes.rst:1153 +msgid "" +"Hm. We certainly expected the last statement to print ``3 4 1 2``. What " +"happened? Here are the steps of the ``rc.a, rc.b = rc.b, rc.a`` line above::" +msgstr "" +"嗯。我们预想应该打印 ``3 4 1 2`` 。但是为什么呢? 这是 ``rc.a, rc.b = rc.b, rc.a`` 这行代码展开后的步骤::" + +#: ../../library/ctypes.rst:1161 +msgid "" +"Note that ``temp0`` and ``temp1`` are objects still using the internal " +"buffer of the ``rc`` object above. So executing ``rc.a = temp0`` copies the " +"buffer contents of ``temp0`` into ``rc`` 's buffer. This, in turn, changes " +"the contents of ``temp1``. So, the last assignment ``rc.b = temp1``, doesn't" +" have the expected effect." +msgstr "" +"注意 ``temp0`` 和 ``temp1`` 对象始终引用了对象 ``rc`` 的内容。然后执行 ``rc.a = temp0`` 会把 " +"``temp0`` 的内容拷贝到 ``rc`` 的空间。这也改变了 ``temp1`` 的内容。最终导致赋值语句 ``rc.b = temp1`` " +"没有产生预想的效果。" + +#: ../../library/ctypes.rst:1167 +msgid "" +"Keep in mind that retrieving sub-objects from Structure, Unions, and Arrays " +"doesn't *copy* the sub-object, instead it retrieves a wrapper object " +"accessing the root-object's underlying buffer." +msgstr "记住,访问被包含在结构体、联合、数组中的对象并不会将其 *复制* 出来,而是得到了一个代理对象,它是对根对象的内部内容的一层包装。" + +#: ../../library/ctypes.rst:1171 +msgid "" +"Another example that may behave differently from what one would expect is " +"this::" +msgstr "下面是另一个可能和预期有偏差的例子::" + +#: ../../library/ctypes.rst:1183 +msgid "" +"Objects instantiated from :class:`c_char_p` can only have their value set to" +" bytes or integers." +msgstr "使用 :class:`c_char_p`  实例化的对象只能将其值设置为 bytes 或者整数。" + +#: ../../library/ctypes.rst:1186 +msgid "" +"Why is it printing ``False``? ctypes instances are objects containing a " +"memory block plus some :term:`descriptor`\\s accessing the contents of the " +"memory. Storing a Python object in the memory block does not store the " +"object itself, instead the ``contents`` of the object is stored. Accessing " +"the contents again constructs a new Python object each time!" +msgstr "" +"为什么这里打印了 ``False`` ? ctypes 实例是一些内存块加上一些用于访问这些内存块的 :term:`descriptor` 组成。将 " +"Python 对象存储在内存块并不会存储对象本身,而是存储了对象的 ``内容`` 。每次访问对象的内容都会构造一个新的 Python 对象。" + +#: ../../library/ctypes.rst:1196 +msgid "Variable-sized data types" +msgstr "变长数据类型" + +#: ../../library/ctypes.rst:1198 +msgid "" +":mod:`ctypes` provides some support for variable-sized arrays and " +"structures." +msgstr ":mod:`ctypes` 对变长数组和结构体提供了一些支持 。" + +#: ../../library/ctypes.rst:1200 +msgid "" +"The :func:`resize` function can be used to resize the memory buffer of an " +"existing ctypes object. The function takes the object as first argument, " +"and the requested size in bytes as the second argument. The memory block " +"cannot be made smaller than the natural memory block specified by the " +"objects type, a :exc:`ValueError` is raised if this is tried::" +msgstr "" +" :func:`resize` 函数可以用于改变已有的 ctypes " +"对象内存缓冲区大小。此函数第一个参数是ctypes对象,第二个参数是要求调整后的大小,单位是字节。不能使存储块小于对象的原有大小,否则抛出 " +":exc:`ValueError` 异常。" + +#: ../../library/ctypes.rst:1220 +msgid "" +"This is nice and fine, but how would one access the additional elements " +"contained in this array? Since the type still only knows about 4 elements, " +"we get errors accessing other elements::" +msgstr "这非常好,但是要怎么访问数组中额外的元素呢?因为数组类型已经定义包含4个元素,导致我们访问新增元素时会产生以下错误::" + +#: ../../library/ctypes.rst:1232 +msgid "" +"Another way to use variable-sized data types with :mod:`ctypes` is to use " +"the dynamic nature of Python, and (re-)define the data type after the " +"required size is already known, on a case by case basis." +msgstr "" +"使用 :mod:`ctypes` 访问变长数据类型的一个可行方法是利用 Python " +"的动态特性,根据具体情况,在知道这个数据的大小后,(重新)指定这个数据的类型。" + +#: ../../library/ctypes.rst:1240 +msgid "ctypes reference" +msgstr "ctypes 参考手册" + +#: ../../library/ctypes.rst:1246 +msgid "Finding shared libraries" +msgstr "寻找动态链接库" + +#: ../../library/ctypes.rst:1248 +msgid "" +"When programming in a compiled language, shared libraries are accessed when " +"compiling/linking a program, and when the program is run." +msgstr "在编译型语言中,动态链接库会在编译、链接或者程序运行时访问。" + +#: ../../library/ctypes.rst:1251 +msgid "" +"The purpose of the :func:`find_library` function is to locate a library in a" +" way similar to what the compiler or runtime loader does (on platforms with " +"several versions of a shared library the most recent should be loaded), " +"while the ctypes library loaders act like when a program is run, and call " +"the runtime loader directly." +msgstr "" +" :func:`find_library` " +"函数j寻找动态链接库的方式和编译器以及运行加载时寻找动态链接库(当系统中有多个版本的动态链接库时,加载最新的一个)的方式类似,而 ctypes " +"库加载的方式和程序运行时的类似, 并直接调用运行时加载程序。" + +#: ../../library/ctypes.rst:1257 +msgid "" +"The :mod:`ctypes.util` module provides a function which can help to " +"determine the library to load." +msgstr ":mod:`ctypes.util` 模块提供了一个函数,可以帮助确定需要加载的库。" + +#: ../../library/ctypes.rst:1265 +msgid "" +"Try to find a library and return a pathname. *name* is the library name " +"without any prefix like *lib*, suffix like ``.so``, ``.dylib`` or version " +"number (this is the form used for the posix linker option :option:`!-l`). " +"If no library can be found, returns ``None``." +msgstr "" +"尝试寻找一个库然后返回其路径名, *name* 是库名称, 且去除了 *lib* 等前缀和 ``.so`` 、 ``.dylib`` " +"、版本号等后缀(这是 posix 连接器 :option:`!-l` 选项使用的格式)。如果没有找到对应的库,则返回 ``None`` 。" + +#: ../../library/ctypes.rst:1270 ../../library/ctypes.rst:1913 +msgid "The exact functionality is system dependent." +msgstr "确切的功能取决于系统。" + +#: ../../library/ctypes.rst:1272 +msgid "" +"On Linux, :func:`find_library` tries to run external programs " +"(``/sbin/ldconfig``, ``gcc``, ``objdump`` and ``ld``) to find the library " +"file. It returns the filename of the library file." +msgstr "" +"在 Linux 上, :func:`find_library` 会尝试运行外部程序(``/sbin/ldconfig``, ``gcc``, " +"``objdump`` 以及 ``ld``) 来寻找库文件。返回库文件的文件名。" + +#: ../../library/ctypes.rst:1276 +msgid "" +"On Linux, the value of the environment variable ``LD_LIBRARY_PATH`` is used " +"when searching for libraries, if a library cannot be found by any other " +"means." +msgstr "在Linux 上,如果其他方式找不到的话,会使用环境变量 ``LD_LIBRARY_PATH`` 搜索动态链接库。" + +#: ../../library/ctypes.rst:1280 +msgid "Here are some examples::" +msgstr "这是一些例子::" + +#: ../../library/ctypes.rst:1291 +msgid "" +"On macOS, :func:`find_library` tries several predefined naming schemes and " +"paths to locate the library, and returns a full pathname if successful::" +msgstr "在 macOS 上,:func:`find_library` 会尝试几种预定义的命名方案和路径来定位库,如果成功则将返回完整的路径名称::" + +#: ../../library/ctypes.rst:1305 +msgid "" +"On Windows, :func:`find_library` searches along the system search path, and " +"returns the full pathname, but since there is no predefined naming scheme a " +"call like ``find_library(\"c\")`` will fail and return ``None``." +msgstr "" +"在 Windows 上, :func:`find_library` 在系统路径中搜索,然后返回全路径,但是如果没有预定义的命名方案, " +"``find_library(\"c\")`` 调用会返回 ``None``" + +#: ../../library/ctypes.rst:1309 +msgid "" +"If wrapping a shared library with :mod:`ctypes`, it *may* be better to " +"determine the shared library name at development time, and hardcode that " +"into the wrapper module instead of using :func:`find_library` to locate the " +"library at runtime." +msgstr "" +"使用 :mod:`ctypes` 包装动态链接库,更好的方式 *可能* 是在开发的时候就确定名称,然后硬编码到包装模块中去,而不是在运行时使用 " +":func:`find_library` 寻找库。" + +#: ../../library/ctypes.rst:1317 +msgid "Loading shared libraries" +msgstr "加载动态链接库" + +#: ../../library/ctypes.rst:1319 +msgid "" +"There are several ways to load shared libraries into the Python process. " +"One way is to instantiate one of the following classes:" +msgstr "有很多方式可以将动态链接库加载到 Python 进程。其中之一是实例化以下类的其中一个::" + +#: ../../library/ctypes.rst:1325 +msgid "" +"Instances of this class represent loaded shared libraries. Functions in " +"these libraries use the standard C calling convention, and are assumed to " +"return :c:type:`int`." +msgstr "此类的实例即已加载的动态链接库。库中的函数使用标准 C 调用约定,并假定返回 :c:type:`int` 。" + +#: ../../library/ctypes.rst:1329 +msgid "" +"On Windows creating a :class:`CDLL` instance may fail even if the DLL name " +"exists. When a dependent DLL of the loaded DLL is not found, a " +":exc:`OSError` error is raised with the message *\"[WinError 126] The " +"specified module could not be found\".* This error message does not contain " +"the name of the missing DLL because the Windows API does not return this " +"information making this error hard to diagnose. To resolve this error and " +"determine which DLL is not found, you need to find the list of dependent " +"DLLs and determine which one is not found using Windows debugging and " +"tracing tools." +msgstr "" +"在 Windows 上创建 :class:`CDLL` 实例可能会失败,即使 DLL 名称确实存在。 当某个被加载 DLL 所依赖的 DLL " +"未找到时,将引发 :exc:`OSError` 错误并附带消息 *\"[WinError 126] The specified module could" +" not be found\".* 此错误消息不包含缺失 DLL 的名称,因为 Windows API 并不会返回此类信息,这使得此错误难以诊断。 " +"要解决此错误并确定是哪一个 DLL 未找到,你需要找出所依赖的 DLL 列表并使用 Windows 调试与跟踪工具确定是哪一个未找到。" + +#: ../../library/ctypes.rst:1341 +msgid "" +"`Microsoft DUMPBIN tool " +"`_ -- A tool to " +"find DLL dependents." +msgstr "" +"`Microsoft DUMPBIN 工具 " +"`_ -- 一个用于查找 DLL " +"依赖的工具。" + +#: ../../library/ctypes.rst:1347 +msgid "" +"Windows only: Instances of this class represent loaded shared libraries, " +"functions in these libraries use the ``stdcall`` calling convention, and are" +" assumed to return the windows specific :class:`HRESULT` code. " +":class:`HRESULT` values contain information specifying whether the function " +"call failed or succeeded, together with additional error code. If the " +"return value signals a failure, an :class:`OSError` is automatically raised." +msgstr "" +"仅 Windows : 此类的实例即加载好的动态链接库,其中的函数使用 ``stdcall`` 调用约定,并且假定返回 windows 指定的 " +":class:`HRESULT` 返回码。 :class:`HRESULT` 的值包含的信息说明函数调用成功还是失败,以及额外错误码。 " +"如果返回值表示失败,会自动抛出 :class:`OSError` 异常。" + +#: ../../library/ctypes.rst:1354 +msgid ":exc:`WindowsError` used to be raised." +msgstr "以前是引发 :exc:`WindowsError`。" + +#: ../../library/ctypes.rst:1360 +msgid "" +"Windows only: Instances of this class represent loaded shared libraries, " +"functions in these libraries use the ``stdcall`` calling convention, and are" +" assumed to return :c:type:`int` by default." +msgstr "" +"仅 Windows: 此类的实例即加载好的动态链接库,其中的函数使用 ``stdcall`` 调用约定,并假定默认返回 :c:type:`int` 。" + +#: ../../library/ctypes.rst:1364 +msgid "" +"The Python :term:`global interpreter lock` is released before calling any " +"function exported by these libraries, and reacquired afterwards." +msgstr "调用动态库导出的函数之前,Python会释放 :term:`global interpreter lock` ,并在调用后重新获取。" + +#: ../../library/ctypes.rst:1370 +msgid "" +"Instances of this class behave like :class:`CDLL` instances, except that the" +" Python GIL is *not* released during the function call, and after the " +"function execution the Python error flag is checked. If the error flag is " +"set, a Python exception is raised." +msgstr "" +"这个类实例的行为与 :class:`CDLL` 类似,只不过 *不会* 在调用函数的时候释放 GIL 锁,且调用结束后会检查 Python 错误码。 " +"如果错误码被设置,会抛出一个 Python 异常。" + +#: ../../library/ctypes.rst:1375 +msgid "Thus, this is only useful to call Python C api functions directly." +msgstr "所以,它只在直接调用 Python C 接口函数的时候有用。" + +#: ../../library/ctypes.rst:1377 +msgid "" +"All these classes can be instantiated by calling them with at least one " +"argument, the pathname of the shared library. If you have an existing " +"handle to an already loaded shared library, it can be passed as the " +"``handle`` named parameter, otherwise the underlying platforms ``dlopen`` or" +" ``LoadLibrary`` function is used to load the library into the process, and " +"to get a handle to it." +msgstr "" +"通过使用至少一个参数(共享库的路径名)调用它们,可以实例化所有这些类。也可以传入一个已加载的动态链接库作为 ``handler`` " +"参数,其他情况会调用系统底层的 ``dlopen`` 或 ``LoadLibrary`` 函数将库加载到进程,并获取其句柄。" + +#: ../../library/ctypes.rst:1384 +msgid "" +"The *mode* parameter can be used to specify how the library is loaded. For " +"details, consult the :manpage:`dlopen(3)` manpage. On Windows, *mode* is " +"ignored. On posix systems, RTLD_NOW is always added, and is not " +"configurable." +msgstr "" +"*mode* 可以指定库加载方式。详情请参见 :manpage:`dlopen(3)` 手册页。 在 Windows 上, 会忽略 *mode* ,在" +" posix 系统上, 总是会加上 RTLD_NOW ,且无法配置。" + +#: ../../library/ctypes.rst:1389 +msgid "" +"The *use_errno* parameter, when set to true, enables a ctypes mechanism that" +" allows accessing the system :data:`errno` error number in a safe way. " +":mod:`ctypes` maintains a thread-local copy of the systems :data:`errno` " +"variable; if you call foreign functions created with ``use_errno=True`` then" +" the :data:`errno` value before the function call is swapped with the ctypes" +" private copy, the same happens immediately after the function call." +msgstr "" +"对于 *use_errno* 参数,如果设为真,则 ctypes 会启用一种安全访问系统 :data:`errno` 的机制。 " +":mod:`ctypes` 维护有系统 :data:`errno` 的一个线程局部副本;如果调用传入了 ``use_errno=True`` " +"的外部函数,函数调用前 :data:`errno` 的值将与 ctypes 的私有副本交换,函数调用后也进行同样的交换。" + +#: ../../library/ctypes.rst:1396 +msgid "" +"The function :func:`ctypes.get_errno` returns the value of the ctypes " +"private copy, and the function :func:`ctypes.set_errno` changes the ctypes " +"private copy to a new value and returns the former value." +msgstr "" +" :func:`ctypes.get_errno` 返回 ctypes 自己维护的那份拷贝的值, :func:`ctypes.set_errno` " +"函数可以修改它并返回之前的值。" + +#: ../../library/ctypes.rst:1400 +msgid "" +"The *use_last_error* parameter, when set to true, enables the same mechanism" +" for the Windows error code which is managed by the :func:`GetLastError` and" +" :func:`SetLastError` Windows API functions; :func:`ctypes.get_last_error` " +"and :func:`ctypes.set_last_error` are used to request and change the ctypes " +"private copy of the windows error code." +msgstr "" +"*use_last_error* 参数如果设置为 true,可以在 Windows 上启用相同的策略,它是通过 Windows API 函数 " +":func:`GetLastError`  和 :func:`SetLastError` 管理的。 " +":func:`ctypes.get_last_error` 和 :func:`ctypes.set_last_error` 可用于获取和设置 " +"ctypes 自己维护的 windows 错误码拷贝。" + +#: ../../library/ctypes.rst:1406 +msgid "" +"The *winmode* parameter is used on Windows to specify how the library is " +"loaded (since *mode* is ignored). It takes any value that is valid for the " +"Win32 API ``LoadLibraryEx`` flags parameter. When omitted, the default is to" +" use the flags that result in the most secure DLL load to avoiding issues " +"such as DLL hijacking. Passing the full path to the DLL is the safest way to" +" ensure the correct library and dependencies are loaded." +msgstr "" +"*winmode* 参数用于在 Windows 平台上指定库的加载方式( 因为 *mode* 会被忽略)。他接受任何与 Win32 API 的 " +"``LoadLibraryEx`` 的标志兼容的值作为参数。省略时,默认设置使用最安全的DLL加载的标志,以避免DLL劫持等问题。传入 DLL " +"的全路径是保证正确加载库及其依赖最安全的方法。" + +#: ../../library/ctypes.rst:1413 +msgid "Added *winmode* parameter." +msgstr "增加了 *winmode* 参数。" + +#: ../../library/ctypes.rst:1420 +msgid "" +"Flag to use as *mode* parameter. On platforms where this flag is not " +"available, it is defined as the integer zero." +msgstr "用于 *mode* 参数的标识值。在此标识不可用的系统上,它被定义为整数0。" + +#: ../../library/ctypes.rst:1427 +msgid "" +"Flag to use as *mode* parameter. On platforms where this is not available, " +"it is the same as *RTLD_GLOBAL*." +msgstr " 用于 *mode* 参数的标识值。在此标识不可用的系统上,它和 *RTLD_GLOBAL* 一样。" + +#: ../../library/ctypes.rst:1434 +msgid "" +"The default mode which is used to load shared libraries. On OSX 10.3, this " +"is *RTLD_GLOBAL*, otherwise it is the same as *RTLD_LOCAL*." +msgstr "加载动态链接库的默认模式。在 OSX 10.3 上,它是 *RTLD_GLOBAL* ,其余系统上是 *RTLD_LOCAL* 。" + +#: ../../library/ctypes.rst:1437 +msgid "" +"Instances of these classes have no public methods. Functions exported by " +"the shared library can be accessed as attributes or by index. Please note " +"that accessing the function through an attribute caches the result and " +"therefore accessing it repeatedly returns the same object each time. On the" +" other hand, accessing it through an index returns a new object each time::" +msgstr "" +"这些类的实例没有共用方法。动态链接库的导出函数可以通过属性或者索引的方式访问。注意,通过属性的方式访问会缓存这个函数,因而每次访问它时返回的都是同一个对象。另一方面,通过索引访问,每次都会返回一个新的对象::" + +#: ../../library/ctypes.rst:1450 +msgid "" +"The following public attributes are available, their name starts with an " +"underscore to not clash with exported function names:" +msgstr "还有下面这些属性可用,他们的名称以下划线开头,以避免和导出函数重名:" + +#: ../../library/ctypes.rst:1456 +msgid "The system handle used to access the library." +msgstr "用于访问库的系统句柄。" + +#: ../../library/ctypes.rst:1461 +msgid "The name of the library passed in the constructor." +msgstr "传入构造函数的库名称。" + +#: ../../library/ctypes.rst:1463 +msgid "" +"Shared libraries can also be loaded by using one of the prefabricated " +"objects, which are instances of the :class:`LibraryLoader` class, either by " +"calling the :meth:`LoadLibrary` method, or by retrieving the library as " +"attribute of the loader instance." +msgstr "" +"共享库也可以通用使用一个预制对象来加载,这种对象是 :class:`LibraryLoader` 类的实例,具体做法或是通过调用 " +":meth:`LoadLibrary` 方法,或是通过将库作为加载器实例的属性来提取。" + +#: ../../library/ctypes.rst:1471 +msgid "" +"Class which loads shared libraries. *dlltype* should be one of the " +":class:`CDLL`, :class:`PyDLL`, :class:`WinDLL`, or :class:`OleDLL` types." +msgstr "" +"加载共享库的类。 *dlltype* 应当为 :class:`CDLL`, :class:`PyDLL`, :class:`WinDLL` 或 " +":class:`OleDLL` 类型之一。" + +#: ../../library/ctypes.rst:1474 +msgid "" +":meth:`__getattr__` has special behavior: It allows loading a shared library" +" by accessing it as attribute of a library loader instance. The result is " +"cached, so repeated attribute accesses return the same library each time." +msgstr "" +":meth:`__getattr__` 具有特殊的行为:它允许通过将一个共享库作为库加载器实例的属性进行访问来加载它。 " +"加载结果将被缓存,因此重复的属性访问每次都会返回相同的库。" + +#: ../../library/ctypes.rst:1480 +msgid "" +"Load a shared library into the process and return it. This method always " +"returns a new instance of the library." +msgstr "加载一个共享库到进程中并将其返回。 此方法总是返回一个新的库实例。" + +#: ../../library/ctypes.rst:1484 +msgid "These prefabricated library loaders are available:" +msgstr "可用的预制库加载器有如下这些:" + +#: ../../library/ctypes.rst:1489 +msgid "Creates :class:`CDLL` instances." +msgstr "创建 :class:`CDLL` 实例。" + +#: ../../library/ctypes.rst:1495 +msgid "Windows only: Creates :class:`WinDLL` instances." +msgstr "仅限 Windows:创建 :class:`WinDLL` 实例." + +#: ../../library/ctypes.rst:1501 +msgid "Windows only: Creates :class:`OleDLL` instances." +msgstr "仅限 Windows:创建 :class:`OleDLL` 实例。" + +#: ../../library/ctypes.rst:1507 +msgid "Creates :class:`PyDLL` instances." +msgstr "创建 :class:`PyDLL` 实例。" + +#: ../../library/ctypes.rst:1510 +msgid "" +"For accessing the C Python api directly, a ready-to-use Python shared " +"library object is available:" +msgstr "要直接访问 C Python api,可以使用一个现成的 Python 共享库对象:" + +#: ../../library/ctypes.rst:1516 +msgid "" +"An instance of :class:`PyDLL` that exposes Python C API functions as " +"attributes. Note that all these functions are assumed to return C " +":c:type:`int`, which is of course not always the truth, so you have to " +"assign the correct :attr:`restype` attribute to use these functions." +msgstr "" +"一个 :class:`PyDLL` 的实例,它将 Python C API 函数作为属性公开。 请注意所有这些函数都应返回 C " +":c:type:`int`,当然这也不是绝对的,因此你必须分配正确的 :attr:`restype` 属性以使用这些函数。" + +#: ../../library/ctypes.rst:1521 +msgid "" +"Raises an :ref:`auditing event ` ``ctypes.dlopen`` with argument " +"``name``." +msgstr "引发一个 :ref:`审计事件 ` ``ctypes.dlopen``,附带参数 ``name``。" + +#: ../../library/ctypes.rst:1523 +msgid "" +"Loading a library through any of these objects raises an :ref:`auditing " +"event ` ``ctypes.dlopen`` with string argument ``name``, the name " +"used to load the library." +msgstr "" +"通过这些对象中的任何一个加载库都将引发一个 :ref:`审计事件 ` ``ctypes.dlopen`` 并附带字符串参数 " +"``name``,即用于加载库的名称。" + +#: ../../library/ctypes.rst:1527 +msgid "" +"Raises an :ref:`auditing event ` ``ctypes.dlsym`` with arguments " +"``library``, ``name``." +msgstr "引发一个审计事件 ``ctypes.dlsym``,附带参数 ``library``, ``name``。" + +#: ../../library/ctypes.rst:1529 +msgid "" +"Accessing a function on a loaded library raises an auditing event " +"``ctypes.dlsym`` with arguments ``library`` (the library object) and " +"``name`` (the symbol's name as a string or integer)." +msgstr "" +"在加载的库上访问一个函数将引发一个审计事件 ``ctypes.dlsym`` 并附带参数 ``library`` (库对象) 和 ``name`` " +"(以字符串或整数表示的符号名称)." + +#: ../../library/ctypes.rst:1533 +msgid "" +"Raises an :ref:`auditing event ` ``ctypes.dlsym/handle`` with " +"arguments ``handle``, ``name``." +msgstr "引发一个审计事件 ``ctypes.dlsym/handle``,附带参数 ``handle``, ``name``。" + +#: ../../library/ctypes.rst:1535 +msgid "" +"In cases when only the library handle is available rather than the object, " +"accessing a function raises an auditing event ``ctypes.dlsym/handle`` with " +"arguments ``handle`` (the raw library handle) and ``name``." +msgstr "" +"在只有库句柄而非对象可用的情况下,访问函数会引发一个审计事件 ``ctypes.dlsym/handle`` 并附带参数 ``handle`` " +"(原始库句柄) 和 ``name``。" + +#: ../../library/ctypes.rst:1542 +msgid "Foreign functions" +msgstr "外部函数" + +#: ../../library/ctypes.rst:1544 +msgid "" +"As explained in the previous section, foreign functions can be accessed as " +"attributes of loaded shared libraries. The function objects created in this" +" way by default accept any number of arguments, accept any ctypes data " +"instances as arguments, and return the default result type specified by the " +"library loader. They are instances of a private class:" +msgstr "" +"正如之前小节的说明,外部函数可作为被加载共享库的属性来访问。 用此方式创建的函数对象默认接受任意数量的参数,接受任意 ctypes " +"数据实例作为参数,并且返回库加载器所指定的默认结果类型。 它们是一个私有类的实例:" + +#: ../../library/ctypes.rst:1553 +msgid "Base class for C callable foreign functions." +msgstr "C 可调用外部函数的基类。" + +#: ../../library/ctypes.rst:1555 +msgid "" +"Instances of foreign functions are also C compatible data types; they " +"represent C function pointers." +msgstr "外部函数的实例也是兼容 C 的数据类型;它们代表 C 函数指针。" + +#: ../../library/ctypes.rst:1558 +msgid "" +"This behavior can be customized by assigning to special attributes of the " +"foreign function object." +msgstr "此行为可通过对外部函数对象的特殊属性赋值来自定义。" + +#: ../../library/ctypes.rst:1563 +msgid "" +"Assign a ctypes type to specify the result type of the foreign function. Use" +" ``None`` for :c:type:`void`, a function not returning anything." +msgstr "" +"赋值为一个 ctypes 类型来指定外部函数的结果类型。 使用 ``None`` 表示 :c:type:`void`,即不返回任何结果的函数。" + +#: ../../library/ctypes.rst:1566 +msgid "" +"It is possible to assign a callable Python object that is not a ctypes type," +" in this case the function is assumed to return a C :c:type:`int`, and the " +"callable will be called with this integer, allowing further processing or " +"error checking. Using this is deprecated, for more flexible post processing" +" or error checking use a ctypes data type as :attr:`restype` and assign a " +"callable to the :attr:`errcheck` attribute." +msgstr "" +"赋值为一个不为 ctypes 类型的可调用 Python 对象也是可以的,在此情况下函数应返回 C " +":c:type:`int`,该可调用对象将附带此整数被调用,以允许进一步的处理或错误检测。 这种用法已被弃用,为了更灵活的后续处理或错误检测请使用一个 " +"ctypes 数据类型作为 :attr:`restype` 并将 :attr:`errcheck` 属性赋值为一个可调用对象。" + +#: ../../library/ctypes.rst:1575 +msgid "" +"Assign a tuple of ctypes types to specify the argument types that the " +"function accepts. Functions using the ``stdcall`` calling convention can " +"only be called with the same number of arguments as the length of this " +"tuple; functions using the C calling convention accept additional, " +"unspecified arguments as well." +msgstr "" +"赋值为一个 ctypes 类型的元组来指定函数所接受的参数类型。 使用 ``stdcall`` " +"调用规范的函数只能附带与此元组长度相同数量的参数进行调用;使用 C 调用规范的函数还可接受额外的未指明参数。" + +#: ../../library/ctypes.rst:1581 +msgid "" +"When a foreign function is called, each actual argument is passed to the " +":meth:`from_param` class method of the items in the :attr:`argtypes` tuple, " +"this method allows adapting the actual argument to an object that the " +"foreign function accepts. For example, a :class:`c_char_p` item in the " +":attr:`argtypes` tuple will convert a string passed as argument into a bytes" +" object using ctypes conversion rules." +msgstr "" +"当外部函数被调用时,每个实际参数都会被传给 :attr:`argtypes` 元组中条目的 :meth:`from_param` " +"类方法,此方法允许将实际参数适配为此外部函数所接受的对象。 例如,:attr:`argtypes` 元组中的 :class:`c_char_p` " +"条目将使用 ctypes 约定规则把作为参数传入的字符串转换为字节串对象。" + +#: ../../library/ctypes.rst:1588 +msgid "" +"New: It is now possible to put items in argtypes which are not ctypes types," +" but each item must have a :meth:`from_param` method which returns a value " +"usable as argument (integer, string, ctypes instance). This allows defining" +" adapters that can adapt custom objects as function parameters." +msgstr "" +"新增:现在可以将不是 ctypes 类型的条目放入 argtypes,但每个条目都必须具有 :meth:`from_param` " +"方法用于返回可作为参数的值(整数、字符串、ctypes 实例)。 这样就允许定义可将自定义对象适配为函数形参的适配器。" + +#: ../../library/ctypes.rst:1595 +msgid "" +"Assign a Python function or another callable to this attribute. The callable" +" will be called with three or more arguments:" +msgstr "将一个 Python 函数或其他可调用对象赋值给此属性。 该可调用对象将附带三个及以上的参数被调用。" + +#: ../../library/ctypes.rst:1602 +msgid "" +"*result* is what the foreign function returns, as specified by the " +":attr:`restype` attribute." +msgstr "*result* 是外部函数返回的结果,由 :attr:`restype` 属性指明。" + +#: ../../library/ctypes.rst:1605 +msgid "" +"*func* is the foreign function object itself, this allows reusing the same " +"callable object to check or post process the results of several functions." +msgstr "*func* 是外部函数对象本身,这样就允许重新使用相同的可调用对象来对多个函数进行检查或后续处理。" + +#: ../../library/ctypes.rst:1609 +msgid "" +"*arguments* is a tuple containing the parameters originally passed to the " +"function call, this allows specializing the behavior on the arguments used." +msgstr "*arguments* 是一个包含最初传递给函数调用的形参的元组,这样就允许对所用参数的行为进行特别处理。" + +#: ../../library/ctypes.rst:1613 +msgid "" +"The object that this function returns will be returned from the foreign " +"function call, but it can also check the result value and raise an exception" +" if the foreign function call failed." +msgstr "此函数所返回的对象将会由外部函数调用返回,但它还可以在外部函数调用失败时检查结果并引发异常。" + +#: ../../library/ctypes.rst:1620 +msgid "" +"This exception is raised when a foreign function call cannot convert one of " +"the passed arguments." +msgstr "此异常会在外部函数无法对某个传入参数执行转换时被引发。" + +#: ../../library/ctypes.rst:1624 +msgid "" +"Raises an :ref:`auditing event ` ``ctypes.seh_exception`` with " +"argument ``code``." +msgstr "引发一个审计事件 ``ctypes.seh_exception`` 并附带参数 ``code``。" + +#: ../../library/ctypes.rst:1626 +msgid "" +"On Windows, when a foreign function call raises a system exception (for " +"example, due to an access violation), it will be captured and replaced with " +"a suitable Python exception. Further, an auditing event " +"``ctypes.seh_exception`` with argument ``code`` will be raised, allowing an " +"audit hook to replace the exception with its own." +msgstr "" +"在 Windows 上,当外部函数调用引发一个系统异常时(例如由于访问冲突),它将被捕获被替换为适当的 Python 异常。 此外,还将引发一个审计事件" +" ``ctypes.seh_exception`` 并附带参数 ``code``,以允许审计钩子将原异常替换为它自己的异常。" + +#: ../../library/ctypes.rst:1632 +msgid "" +"Raises an :ref:`auditing event ` ``ctypes.call_function`` with " +"arguments ``func_pointer``, ``arguments``." +msgstr "" +"引发一个审计事件 ``ctypes.call_function``,附带参数 ``func_pointer``, ``arguments``。" + +#: ../../library/ctypes.rst:1634 +msgid "" +"Some ways to invoke foreign function calls may raise an auditing event " +"``ctypes.call_function`` with arguments ``function pointer`` and " +"``arguments``." +msgstr "" +"某些发起外部函数调用的方式可能会引发一个审计事件 ``ctypes.call_function`` 并附带参数 ``function pointer``" +" 和 ``arguments``。" + +#: ../../library/ctypes.rst:1640 +msgid "Function prototypes" +msgstr "函数原型" + +#: ../../library/ctypes.rst:1642 +msgid "" +"Foreign functions can also be created by instantiating function prototypes. " +"Function prototypes are similar to function prototypes in C; they describe a" +" function (return type, argument types, calling convention) without defining" +" an implementation. The factory functions must be called with the desired " +"result type and the argument types of the function, and can be used as " +"decorator factories, and as such, be applied to functions through the " +"``@wrapper`` syntax. See :ref:`ctypes-callback-functions` for examples." +msgstr "" +"外部函数也可通过实例化函数原型来创建。 函数原型类似于 C 中的函数原型;它们在不定义具体实现的情况下描述了一个函数(返回类型、参数类型、调用约定)。 " +"工厂函数必须使用函数所需要的结果类型和参数类型来调用,并可被用作装饰器工厂函数,在此情况下可以通过 ``@wrapper`` 语法应用于函数。 请参阅 " +":ref:`ctypes-callback-functions` 了解有关示例。" + +#: ../../library/ctypes.rst:1653 +msgid "" +"The returned function prototype creates functions that use the standard C " +"calling convention. The function will release the GIL during the call. If " +"*use_errno* is set to true, the ctypes private copy of the system " +":data:`errno` variable is exchanged with the real :data:`errno` value before" +" and after the call; *use_last_error* does the same for the Windows error " +"code." +msgstr "" +"返回的函数原型会创建使用标准 C 调用约定的函数。 该函数在调用过程中将释放 GIL。 如果 *use_errno* 设为真值,则在调用之前和之后系统 " +":data:`errno` 变量的 ctypes 私有副本会与真正的 :data:`errno` 值进行交换;*use_last_error* 会为 " +"Windows 错误码执行同样的操作。" + +#: ../../library/ctypes.rst:1663 +msgid "" +"Windows only: The returned function prototype creates functions that use the" +" ``stdcall`` calling convention. The function will release the GIL during " +"the call. *use_errno* and *use_last_error* have the same meaning as above." +msgstr "" +"仅限 Windows:返回的函数原型会创建使用 ``stdcall`` 调用约定的函数。 该函数在调用过程中将会释放 GIL。 *use_errno* " +"和 *use_last_error* 具有与上文中相同的含义。" + +#: ../../library/ctypes.rst:1671 +msgid "" +"The returned function prototype creates functions that use the Python " +"calling convention. The function will *not* release the GIL during the " +"call." +msgstr "返回的函数原型会创建使用 Python 调用约定的函数。 该函数在调用过程中将 *不会* 释放 GIL。" + +#: ../../library/ctypes.rst:1674 +msgid "" +"Function prototypes created by these factory functions can be instantiated " +"in different ways, depending on the type and number of the parameters in the" +" call:" +msgstr "这些工厂函数所创建的函数原型可通过不同的方式来实例化,具体取决于调用中的类型与数量:" + +#: ../../library/ctypes.rst:1682 +msgid "" +"Returns a foreign function at the specified address which must be an " +"integer." +msgstr "在指定地址上返回一个外部函数,地址值必须为整数。" + +#: ../../library/ctypes.rst:1689 +msgid "" +"Create a C callable function (a callback function) from a Python *callable*." +msgstr "基于 Python *callable* 创建一个 C 可调用函数(回调函数)。" + +#: ../../library/ctypes.rst:1696 +msgid "" +"Returns a foreign function exported by a shared library. *func_spec* must be" +" a 2-tuple ``(name_or_ordinal, library)``. The first item is the name of the" +" exported function as string, or the ordinal of the exported function as " +"small integer. The second item is the shared library instance." +msgstr "" +"返回由一个共享库导出的外部函数。 *func_spec* 必须为一个 2 元组 ``(name_or_ordinal, library)``。 " +"第一项是字符串形式的所导出函数名称,或小整数形式的所导出函数序号。 第二项是该共享库实例。" + +#: ../../library/ctypes.rst:1706 +msgid "" +"Returns a foreign function that will call a COM method. *vtbl_index* is the " +"index into the virtual function table, a small non-negative integer. *name* " +"is name of the COM method. *iid* is an optional pointer to the interface " +"identifier which is used in extended error reporting." +msgstr "" +"返回将调用一个 COM 方法的外部函数。 *vtbl_index* 虚拟函数表中的索引。 *name* 是 COM 方法的名称。 *iid* " +"是可选的指向接口标识符的指针,它被用于扩展的错误报告。" + +#: ../../library/ctypes.rst:1711 +msgid "" +"COM methods use a special calling convention: They require a pointer to the " +"COM interface as first argument, in addition to those parameters that are " +"specified in the :attr:`argtypes` tuple." +msgstr "" +"COM 方法使用特殊的调用约定:除了在 :attr:`argtypes` 元组中指定的形参,它们还要求一个指向 COM 接口的指针作为第一个参数。" + +#: ../../library/ctypes.rst:1715 +msgid "" +"The optional *paramflags* parameter creates foreign function wrappers with " +"much more functionality than the features described above." +msgstr "可选的 *paramflags* 形参会创建相比上述特性具有更多功能的外部函数包装器。" + +#: ../../library/ctypes.rst:1718 +msgid "*paramflags* must be a tuple of the same length as :attr:`argtypes`." +msgstr "*paramflags* 必须为一个与 :attr:`argtypes` 长度相同的元组。" + +#: ../../library/ctypes.rst:1720 +msgid "" +"Each item in this tuple contains further information about a parameter, it " +"must be a tuple containing one, two, or three items." +msgstr "此元组中的每一项都包含有关形参的更多信息,它必须为包含一个、两个或更多条目的元组。" + +#: ../../library/ctypes.rst:1723 +msgid "" +"The first item is an integer containing a combination of direction flags for" +" the parameter:" +msgstr "第一项是包含形参指令旗标组合的整数。" + +#: ../../library/ctypes.rst:1727 +msgid "1" +msgstr "1" + +#: ../../library/ctypes.rst:1727 +msgid "Specifies an input parameter to the function." +msgstr "指定函数的一个输入形参。" + +#: ../../library/ctypes.rst:1730 +msgid "2" +msgstr "2" + +#: ../../library/ctypes.rst:1730 +msgid "Output parameter. The foreign function fills in a value." +msgstr "输出形参。 外部函数会填入一个值。" + +#: ../../library/ctypes.rst:1733 +msgid "4" +msgstr "4" + +#: ../../library/ctypes.rst:1733 +msgid "Input parameter which defaults to the integer zero." +msgstr "默认为整数零值的输入形参。" + +#: ../../library/ctypes.rst:1735 +msgid "" +"The optional second item is the parameter name as string. If this is " +"specified, the foreign function can be called with named parameters." +msgstr "可选的第二项是字符串形式的形参名称。 如果指定此项,则可以使用该形参名称来调用外部函数。" + +#: ../../library/ctypes.rst:1738 +msgid "The optional third item is the default value for this parameter." +msgstr "可选的第三项是该形参的默认值。" + +#: ../../library/ctypes.rst:1740 +msgid "" +"This example demonstrates how to wrap the Windows ``MessageBoxW`` function " +"so that it supports default parameters and named arguments. The C " +"declaration from the windows header file is this::" +msgstr "" +"这个例子演示了如何包装 Windows 的 ``MessageBoxW`` 函数以使其支持默认形参和已命名参数。 相应 windows 头文件的 C " +"声明是这样的::" + +#: ../../library/ctypes.rst:1751 ../../library/ctypes.rst:1774 +msgid "Here is the wrapping with :mod:`ctypes`::" +msgstr "这是使用 :mod:`ctypes` 的包装::" + +#: ../../library/ctypes.rst:1759 +msgid "The ``MessageBox`` foreign function can now be called in these ways::" +msgstr "现在 ``MessageBox`` 外部函数可以通过以下方式来调用::" + +#: ../../library/ctypes.rst:1765 +msgid "" +"A second example demonstrates output parameters. The win32 " +"``GetWindowRect`` function retrieves the dimensions of a specified window by" +" copying them into ``RECT`` structure that the caller has to supply. Here " +"is the C declaration::" +msgstr "" +"第二个例子演示了输出形参。 这个 win32 ``GetWindowRect`` 函数通过将指定窗口的维度拷贝至调用者必须提供的 ``RECT`` " +"结构体来提取这些值。 这是相应的 C 声明::" + +#: ../../library/ctypes.rst:1783 +msgid "" +"Functions with output parameters will automatically return the output " +"parameter value if there is a single one, or a tuple containing the output " +"parameter values when there are more than one, so the GetWindowRect function" +" now returns a RECT instance, when called." +msgstr "" +"带有输出形参的函数如果输出形参存在单一值则会自动返回该值,或是当输出形参存在多个值时返回包含这些值的元组,因此当 GetWindowRect " +"被调用时现在将返回一个 RECT 实例。" + +#: ../../library/ctypes.rst:1788 +msgid "" +"Output parameters can be combined with the :attr:`errcheck` protocol to do " +"further output processing and error checking. The win32 ``GetWindowRect`` " +"api function returns a ``BOOL`` to signal success or failure, so this " +"function could do the error checking, and raises an exception when the api " +"call failed::" +msgstr "" +"输出形参可以与 :attr:`errcheck` 协议相结合以执行进一步的输出处理与错误检查。 Win32 ``GetWindowRect`` API " +"函数返回一个 ``BOOL`` 来表示成功或失败,因此此函数可执行错误检查,并在 API 调用失败时引发异常::" + +#: ../../library/ctypes.rst:1801 +msgid "" +"If the :attr:`errcheck` function returns the argument tuple it receives " +"unchanged, :mod:`ctypes` continues the normal processing it does on the " +"output parameters. If you want to return a tuple of window coordinates " +"instead of a ``RECT`` instance, you can retrieve the fields in the function " +"and return them instead, the normal processing will no longer take place::" +msgstr "" +"如果 :attr:`errcheck` 不加更改地返回它所接收的参数元组,则 :mod:`ctypes` 会继续对输出形参执行常规处理。 " +"如果你希望返回一个窗口坐标的元组而非 ``RECT`` 实例,你可以从函数中提取这些字段并返回它们,常规处理将不会再执行::" + +#: ../../library/ctypes.rst:1820 +msgid "Utility functions" +msgstr "工具函数" + +#: ../../library/ctypes.rst:1824 +msgid "" +"Returns the address of the memory buffer as integer. *obj* must be an " +"instance of a ctypes type." +msgstr "以整数形式返回内存缓冲区地址。 *obj* 必须为一个 ctypes 类型的实例。" + +#: ../../library/ctypes.rst:1827 +msgid "" +"Raises an :ref:`auditing event ` ``ctypes.addressof`` with " +"argument ``obj``." +msgstr "引发一个 :ref:`审计事件 ` ``ctypes.addressof`` 并附带参数 ``obj``。" + +#: ../../library/ctypes.rst:1832 +msgid "" +"Returns the alignment requirements of a ctypes type. *obj_or_type* must be a" +" ctypes type or instance." +msgstr "返回一个 ctypes 类型的对齐要求。 *obj_or_type* 必须为一个 ctypes 类型或实例。" + +#: ../../library/ctypes.rst:1838 +msgid "" +"Returns a light-weight pointer to *obj*, which must be an instance of a " +"ctypes type. *offset* defaults to zero, and must be an integer that will be" +" added to the internal pointer value." +msgstr "" +"返回指向 *obj* 的轻量指针,该对象必须为一个 ctypes 类型的实例。 *offset* 默认值为零,且必须为一个将被添加到内部指针值的整数。" + +#: ../../library/ctypes.rst:1842 +msgid "``byref(obj, offset)`` corresponds to this C code::" +msgstr "``byref(obj, offset)`` 对应于这段 C 代码::" + +#: ../../library/ctypes.rst:1846 +msgid "" +"The returned object can only be used as a foreign function call parameter. " +"It behaves similar to ``pointer(obj)``, but the construction is a lot " +"faster." +msgstr "返回的对象只能被用作外部函数调用形参。 它的行为类似于 ``pointer(obj)``,但构造起来要快很多。" + +#: ../../library/ctypes.rst:1852 +msgid "" +"This function is similar to the cast operator in C. It returns a new " +"instance of *type* which points to the same memory block as *obj*. *type* " +"must be a pointer type, and *obj* must be an object that can be interpreted " +"as a pointer." +msgstr "" +"此函数类似于 C 的强制转换运算符。 它返回一个 *type* 的新实例,该实例指向与 *obj* 相同的内存块。 *type* 必须为指针类型,而 " +"*obj* 必须为可以被作为指针来解读的对象。" + +#: ../../library/ctypes.rst:1860 +msgid "" +"This function creates a mutable character buffer. The returned object is a " +"ctypes array of :class:`c_char`." +msgstr "此函数会创建一个可变的字符缓冲区。 返回的对象是一个 :class:`c_char` 的 ctypes 数组。" + +#: ../../library/ctypes.rst:1863 +msgid "" +"*init_or_size* must be an integer which specifies the size of the array, or " +"a bytes object which will be used to initialize the array items." +msgstr "*init_or_size* 必须是一个指明数组大小的整数,或者是一个将被用来初始化数组条目的字节串对象。" + +#: ../../library/ctypes.rst:1866 +msgid "" +"If a bytes object is specified as first argument, the buffer is made one " +"item larger than its length so that the last element in the array is a NUL " +"termination character. An integer can be passed as second argument which " +"allows specifying the size of the array if the length of the bytes should " +"not be used." +msgstr "" +"如果将一个字节串对象指定为第一个参数,则将使缓冲区大小比其长度多一项以便数组的最后一项为一个 NUL 终结符。 " +"可以传入一个整数作为第二个参数以允许在不使用字节串长度的情况下指定数组大小。" + +#: ../../library/ctypes.rst:1871 +msgid "" +"Raises an :ref:`auditing event ` ``ctypes.create_string_buffer`` " +"with arguments ``init``, ``size``." +msgstr "" +"引发一个 :ref:`审计事件 ` ``ctypes.create_string_buffer`` 并附带参数 ``init``, " +"``size``。" + +#: ../../library/ctypes.rst:1876 +msgid "" +"This function creates a mutable unicode character buffer. The returned " +"object is a ctypes array of :class:`c_wchar`." +msgstr "此函数会创建一个可变的 unicode 字符缓冲区。 返回的对象是一个 :class:`c_wchar` 的 ctypes 数组。" + +#: ../../library/ctypes.rst:1879 +msgid "" +"*init_or_size* must be an integer which specifies the size of the array, or " +"a string which will be used to initialize the array items." +msgstr "*init_or_size* 必须是一个指明数组大小的整数,或者是一个将被用来初始化数组条目的字符串。" + +#: ../../library/ctypes.rst:1882 +msgid "" +"If a string is specified as first argument, the buffer is made one item " +"larger than the length of the string so that the last element in the array " +"is a NUL termination character. An integer can be passed as second argument " +"which allows specifying the size of the array if the length of the string " +"should not be used." +msgstr "" +"如果将一个字符串指定为第一个参数,则将使缓冲区大小比其长度多一项以便数组的最后一项为一个 NUL 终结符。 " +"可以传入一个整数作为第二个参数以允许在不使用字符串长度的情况下指定数组大小。" + +#: ../../library/ctypes.rst:1888 +msgid "" +"Raises an :ref:`auditing event ` ``ctypes.create_unicode_buffer`` " +"with arguments ``init``, ``size``." +msgstr "" +"引发一个 :ref:`审计事件 ` ``ctypes.create_unicode_buffer`` 并附带参数 ``init``," +" ``size``。" + +#: ../../library/ctypes.rst:1893 +msgid "" +"Windows only: This function is a hook which allows implementing in-process " +"COM servers with ctypes. It is called from the DllCanUnloadNow function " +"that the _ctypes extension dll exports." +msgstr "" +"仅限 Windows:此函数是一个允许使用 ctypes 实现进程内 COM 服务的钩子。 它将由 _ctypes 扩展 dll 所导出的 " +"DllCanUnloadNow 函数来调用。" + +#: ../../library/ctypes.rst:1900 +msgid "" +"Windows only: This function is a hook which allows implementing in-process " +"COM servers with ctypes. It is called from the DllGetClassObject function " +"that the ``_ctypes`` extension dll exports." +msgstr "" +"仅限 Windows:此函数是一个允许使用 ctypes 实现进程内 COM 服务的钩子。 它将由 ``_ctypes`` 扩展 dll 所导出的 " +"DllGetClassObject 函数来调用。" + +#: ../../library/ctypes.rst:1908 +msgid "" +"Try to find a library and return a pathname. *name* is the library name " +"without any prefix like ``lib``, suffix like ``.so``, ``.dylib`` or version " +"number (this is the form used for the posix linker option :option:`!-l`). " +"If no library can be found, returns ``None``." +msgstr "" +"尝试寻找一个库并返回路径名称。 *name* 是库名称并且不带任何前缀如 ``lib`` 以及后缀如 ``.so``,``.dylib`` " +"或版本号(形式与 posix 链接器选项 :option:`!-l` 所用的一致)。 如果找不到库,则返回 ``None``。" + +#: ../../library/ctypes.rst:1919 +msgid "" +"Windows only: return the filename of the VC runtime library used by Python, " +"and by the extension modules. If the name of the library cannot be " +"determined, ``None`` is returned." +msgstr "仅限 Windows:返回 Python 以及扩展模块所使用的 VC 运行时库的文件名。 如果无法确定库名称,则返回 ``None``。" + +#: ../../library/ctypes.rst:1923 +msgid "" +"If you need to free memory, for example, allocated by an extension module " +"with a call to the ``free(void *)``, it is important that you use the " +"function in the same library that allocated the memory." +msgstr "" +"如果你需要通过调用 ``free(void *)`` 来释放内存,例如某个扩展模块所分配的内存,重要的一点是你应当使用分配内存的库中的函数。" + +#: ../../library/ctypes.rst:1930 +msgid "" +"Windows only: Returns a textual description of the error code *code*. If no" +" error code is specified, the last error code is used by calling the Windows" +" api function GetLastError." +msgstr "" +"仅限 Windows:返回错误码 *code* 的文本描述。 如果未指定错误码,则会通过调用 Windows api 函数 GetLastError " +"来获得最新的错误码。" + +#: ../../library/ctypes.rst:1937 +msgid "" +"Windows only: Returns the last error code set by Windows in the calling " +"thread. This function calls the Windows `GetLastError()` function directly, " +"it does not return the ctypes-private copy of the error code." +msgstr "" +"仅限 Windows:返回 Windows 在调用线程中设置的最新错误码。 此函数会直接调用 Windows `GetLastError()` " +"函数,它并不返回错误码的 ctypes 私有副本。" + +#: ../../library/ctypes.rst:1943 +msgid "" +"Returns the current value of the ctypes-private copy of the system " +":data:`errno` variable in the calling thread." +msgstr "返回调用线程中系统 :data:`errno` 变量的 ctypes 私有副本的当前值。" + +#: ../../library/ctypes.rst:1946 +msgid "" +"Raises an :ref:`auditing event ` ``ctypes.get_errno`` with no " +"arguments." +msgstr "引发一个不带参数的 :ref:`审计事件 ` ``ctypes.get_errno``。" + +#: ../../library/ctypes.rst:1950 +msgid "" +"Windows only: returns the current value of the ctypes-private copy of the " +"system :data:`LastError` variable in the calling thread." +msgstr "仅限 Windows:返回调用线程中系统 :data:`LastError` 变量的 ctypes 私有副本的当前值。" + +#: ../../library/ctypes.rst:1953 +msgid "" +"Raises an :ref:`auditing event ` ``ctypes.get_last_error`` with no" +" arguments." +msgstr "引发一个不带参数的 :ref:`审计事件 ` ``ctypes.get_last_error``。" + +#: ../../library/ctypes.rst:1957 +msgid "" +"Same as the standard C memmove library function: copies *count* bytes from " +"*src* to *dst*. *dst* and *src* must be integers or ctypes instances that " +"can be converted to pointers." +msgstr "" +"与标准 C memmove 库函数相同:将 *count* 个字节从 *src* 拷贝到 *dst*。 *dst* 和 *src* " +"必须为整数或可被转换为指针的 ctypes 实例。" + +#: ../../library/ctypes.rst:1964 +msgid "" +"Same as the standard C memset library function: fills the memory block at " +"address *dst* with *count* bytes of value *c*. *dst* must be an integer " +"specifying an address, or a ctypes instance." +msgstr "" +"与标准 C memset 库函数相同:将位于地址 *dst* 的内存块用 *count* 个字节的 *c* 值填充。 *dst* 必须为指定地址的整数或" +" ctypes 实例。" + +#: ../../library/ctypes.rst:1971 +msgid "" +"This factory function creates and returns a new ctypes pointer type. Pointer" +" types are cached and reused internally, so calling this function repeatedly" +" is cheap. *type* must be a ctypes type." +msgstr "" +"这个工厂函数创建并返回一个新的 ctypes 指针类型。 指针类型会被缓存并在内部重用,因此重复调用此函数耗费不大。 *type* 必须为 ctypes" +" 类型。" + +#: ../../library/ctypes.rst:1978 +msgid "" +"This function creates a new pointer instance, pointing to *obj*. The " +"returned object is of the type ``POINTER(type(obj))``." +msgstr "此函数会创建一个新的指向 *obj* 的指针实例。 返回的对象类型为 ``POINTER(type(obj))``。" + +#: ../../library/ctypes.rst:1981 +msgid "" +"Note: If you just want to pass a pointer to an object to a foreign function " +"call, you should use ``byref(obj)`` which is much faster." +msgstr "注意:如果你只是想向外部函数调用传递一个对象指针,你应当使用更为快速的 ``byref(obj)``。" + +#: ../../library/ctypes.rst:1987 +msgid "" +"This function resizes the internal memory buffer of *obj*, which must be an " +"instance of a ctypes type. It is not possible to make the buffer smaller " +"than the native size of the objects type, as given by ``sizeof(type(obj))``," +" but it is possible to enlarge the buffer." +msgstr "" +"此函数可改变 *obj* 的内部内存缓冲区大小,其参数必须为 ctypes 类型的实例。 没有可能将缓冲区设为小于对象类型的本机大小值,该值由 " +"``sizeof(type(obj))`` 给出,但将缓冲区加大则是可能的。" + +#: ../../library/ctypes.rst:1995 +msgid "" +"Set the current value of the ctypes-private copy of the system :data:`errno`" +" variable in the calling thread to *value* and return the previous value." +msgstr "设置调用线程中系统 :data:`errno` 变量的 ctypes 私有副本的当前值为 *value* 并返回原来的值。" + +#: ../../library/ctypes.rst:1998 +msgid "" +"Raises an :ref:`auditing event ` ``ctypes.set_errno`` with " +"argument ``errno``." +msgstr "引发一个 :ref:`审计事件 ` ``ctypes.set_errno`` 并附带参数 ``errno``。" + +#: ../../library/ctypes.rst:2003 +msgid "" +"Windows only: set the current value of the ctypes-private copy of the system" +" :data:`LastError` variable in the calling thread to *value* and return the " +"previous value." +msgstr "" +"仅限 Windows:设置调用线程中系统 :data:`LastError` 变量的 ctypes 私有副本的当前值为 *value* 并返回原来的值。" + +#: ../../library/ctypes.rst:2007 +msgid "" +"Raises an :ref:`auditing event ` ``ctypes.set_last_error`` with " +"argument ``error``." +msgstr "" +"引发一个 :ref:`审计事件 ` ``ctypes.set_last_error`` 并附带参数 ``error``。" + +#: ../../library/ctypes.rst:2012 +msgid "" +"Returns the size in bytes of a ctypes type or instance memory buffer. Does " +"the same as the C ``sizeof`` operator." +msgstr "返回 ctypes 类型或实例的内存缓冲区以字节表示的大小。 其功能与 C ``sizeof`` 运算符相同。" + +#: ../../library/ctypes.rst:2018 +msgid "" +"This function returns the C string starting at memory address *address* as a" +" bytes object. If size is specified, it is used as size, otherwise the " +"string is assumed to be zero-terminated." +msgstr "" +"此函数返回从内存地址 *address* 开始的以字节串表示的 C 字符串。 如果指定了 size,则将其用作长度,否则将假定字符串以零值结尾。" + +#: ../../library/ctypes.rst:2022 +msgid "" +"Raises an :ref:`auditing event ` ``ctypes.string_at`` with " +"arguments ``address``, ``size``." +msgstr "" +"引发一个 :ref:`审计事件 ` ``ctypes.string_at``,附带参数 ``address``, ``size``。" + +#: ../../library/ctypes.rst:2027 +msgid "" +"Windows only: this function is probably the worst-named thing in ctypes. It " +"creates an instance of OSError. If *code* is not specified, " +"``GetLastError`` is called to determine the error code. If *descr* is not " +"specified, :func:`FormatError` is called to get a textual description of the" +" error." +msgstr "" +"仅限 Windows:此函数可能是 ctypes 中名字起得最差的函数。 它会创建一个 OSError 的实例。 如果未指定 *code*,则会调用 " +"``GetLastError`` 来确定错误码。 如果未指定 *descr*,则会调用 :func:`FormatError` 来获取错误的文本描述。" + +#: ../../library/ctypes.rst:2033 +msgid "An instance of :exc:`WindowsError` used to be created." +msgstr "以前是会创建一个 :exc:`WindowsError` 的实例。" + +#: ../../library/ctypes.rst:2039 +msgid "" +"This function returns the wide character string starting at memory address " +"*address* as a string. If *size* is specified, it is used as the number of " +"characters of the string, otherwise the string is assumed to be zero-" +"terminated." +msgstr "" +"此函数返回从内存地址 *address* 开始的以字符串表示的宽字节字符串。 如果指定了 " +"*size*,则将其用作字符串中的字符数量,否则将假定字符串以零值结尾。" + +#: ../../library/ctypes.rst:2044 +msgid "" +"Raises an :ref:`auditing event ` ``ctypes.wstring_at`` with " +"arguments ``address``, ``size``." +msgstr "" +"引发一个 :ref:`审计事件 ` ``ctypes.wstring_at``,附带参数 ``address``, " +"``size``。" + +#: ../../library/ctypes.rst:2050 +msgid "Data types" +msgstr "数据类型" + +#: ../../library/ctypes.rst:2055 +msgid "" +"This non-public class is the common base class of all ctypes data types. " +"Among other things, all ctypes type instances contain a memory block that " +"hold C compatible data; the address of the memory block is returned by the " +":func:`addressof` helper function. Another instance variable is exposed as " +":attr:`_objects`; this contains other Python objects that need to be kept " +"alive in case the memory block contains pointers." +msgstr "" +"这个非公有类是所有 ctypes 数据类型的共同基类。 另外,所有 ctypes 类型的实例都包含一个存放 C 兼容数据的内存块;该内存块的地址可由 " +":func:`addressof` 辅助函数返回。 还有一个实例变量被公开为 " +":attr:`_objects`;此变量包含其他在内存块包含指针的情况下需要保持存活的 Python 对象。" + +#: ../../library/ctypes.rst:2062 +msgid "" +"Common methods of ctypes data types, these are all class methods (to be " +"exact, they are methods of the :term:`metaclass`):" +msgstr "ctypes 数据类型的通用方法,它们都是类方法(严谨地说,它们是 :term:`metaclass` 的方法):" + +#: ../../library/ctypes.rst:2067 +msgid "" +"This method returns a ctypes instance that shares the buffer of the *source*" +" object. The *source* object must support the writeable buffer interface. " +"The optional *offset* parameter specifies an offset into the source buffer " +"in bytes; the default is zero. If the source buffer is not large enough a " +":exc:`ValueError` is raised." +msgstr "" +"此方法返回一个共享 *source* 对象缓冲区的 ctypes 实例。 *source* 对象必须支持可写缓冲区接口。 可选的 *offset* " +"形参指定以字节表示的源缓冲区内偏移量;默认值为零。 如果源缓冲区不够大则会引发 :exc:`ValueError`。" + +#: ../../library/ctypes.rst:2073 ../../library/ctypes.rst:2083 +msgid "" +"Raises an :ref:`auditing event ` ``ctypes.cdata/buffer`` with " +"arguments ``pointer``, ``size``, ``offset``." +msgstr "" +"引发一个 :ref:`审计事件 ` ``ctypes.cdata/buffer`` 并附带参数 ``pointer``, " +"``size``, ``offset``。" + +#: ../../library/ctypes.rst:2077 +msgid "" +"This method creates a ctypes instance, copying the buffer from the *source* " +"object buffer which must be readable. The optional *offset* parameter " +"specifies an offset into the source buffer in bytes; the default is zero. " +"If the source buffer is not large enough a :exc:`ValueError` is raised." +msgstr "" +"此方法创建一个 ctypes 实例,从 *source* 对象缓冲区拷贝缓冲区,该对象必须是可读的。 可选的 *offset* " +"形参指定以字节表示的源缓冲区内偏移量;默认值为零。 如果源缓冲区不够大则会引发 :exc:`ValueError`。" + +#: ../../library/ctypes.rst:2087 +msgid "" +"This method returns a ctypes type instance using the memory specified by " +"*address* which must be an integer." +msgstr "此方法会使用 *address* 所指定的内存返回一个 ctypes 类型的实例,该参数必须为一个整数。" + +#: ../../library/ctypes.rst:2090 +msgid "" +"Raises an :ref:`auditing event ` ``ctypes.cdata`` with argument " +"``address``." +msgstr "引发一个 :ref:`审计事件 ` ``ctypes.cdata``,附带参数 ``address``。" + +#: ../../library/ctypes.rst:2092 +msgid "" +"This method, and others that indirectly call this method, raises an " +":ref:`auditing event ` ``ctypes.cdata`` with argument ``address``." +msgstr "" +"这个方法以及其他间接调用了它的方法会引发一个 :ref:`审计事件 ` ``ctypes.cdata``,附带参数 " +"``address``。" + +#: ../../library/ctypes.rst:2098 +msgid "" +"This method adapts *obj* to a ctypes type. It is called with the actual " +"object used in a foreign function call when the type is present in the " +"foreign function's :attr:`argtypes` tuple; it must return an object that can" +" be used as a function call parameter." +msgstr "" +"此方法会将 *obj* 适配为一个 ctypes 类型。 它调用时会在当该类型存在于外部函数的 :attr:`argtypes` " +"元组时传入外部函数调用所使用的实际对象;它必须返回一个可被用作函数调用参数的对象。" + +#: ../../library/ctypes.rst:2103 +msgid "" +"All ctypes data types have a default implementation of this classmethod that" +" normally returns *obj* if that is an instance of the type. Some types " +"accept other objects as well." +msgstr "" +"所有 ctypes 数据类型都带有这个类方法的默认实现,它通常会返回 *obj*,如果该对象是此类型的实例的话。 某些类型也能接受其他对象。" + +#: ../../library/ctypes.rst:2109 +msgid "" +"This method returns a ctypes type instance exported by a shared library. " +"*name* is the name of the symbol that exports the data, *library* is the " +"loaded shared library." +msgstr "此方法返回一个由共享库导出的 ctypes 类型。 *name* 为导出数据的符号名称,*library* 为所加载的共享库。" + +#: ../../library/ctypes.rst:2113 +msgid "Common instance variables of ctypes data types:" +msgstr "ctypes 数据类型的通用实例变量:" + +#: ../../library/ctypes.rst:2117 +msgid "" +"Sometimes ctypes data instances do not own the memory block they contain, " +"instead they share part of the memory block of a base object. The " +":attr:`_b_base_` read-only member is the root ctypes object that owns the " +"memory block." +msgstr "" +"有时 ctypes 数据实例并不拥有它们所包含的内存块,它们只是共享了某个基对象的部分内存块。 :attr:`_b_base_` " +"只读成员是拥有内存块的根 ctypes 对象。" + +#: ../../library/ctypes.rst:2124 +msgid "" +"This read-only variable is true when the ctypes data instance has allocated " +"the memory block itself, false otherwise." +msgstr "这个只读变量在 ctypes 数据实例自身已分配了内存块时为真值,否则为假值。" + +#: ../../library/ctypes.rst:2129 +msgid "" +"This member is either ``None`` or a dictionary containing Python objects " +"that need to be kept alive so that the memory block contents is kept valid." +" This object is only exposed for debugging; never modify the contents of " +"this dictionary." +msgstr "" +"这个成员或者为 ``None``,或者为一个包含需要保持存活以使内存块的内存保持有效的 Python 对象的字典。 " +"这个对象只是出于调试目的而对外公开;绝对不要修改此字典的内容。" + +#: ../../library/ctypes.rst:2142 +msgid "" +"This non-public class is the base class of all fundamental ctypes data " +"types. It is mentioned here because it contains the common attributes of the" +" fundamental ctypes data types. :class:`_SimpleCData` is a subclass of " +":class:`_CData`, so it inherits their methods and attributes. ctypes data " +"types that are not and do not contain pointers can now be pickled." +msgstr "" +"这个非公有类是所有基本 ctypes 数据类型的基类。 它在这里被提及是因为它包含基本 ctypes 数据类型共有的属性。 " +":class:`_SimpleCData` 是 :class:`_CData` 的子类,因此继承了其方法和属性。 非指针及不包含指针的 ctypes " +"数据类型现在将可以被封存。" + +#: ../../library/ctypes.rst:2148 +msgid "Instances have a single attribute:" +msgstr "实例拥有一个属性:" + +#: ../../library/ctypes.rst:2152 +msgid "" +"This attribute contains the actual value of the instance. For integer and " +"pointer types, it is an integer, for character types, it is a single " +"character bytes object or string, for character pointer types it is a Python" +" bytes object or string." +msgstr "" +"这个属性包含实例的实际值。 对于整数和指针类型,它是一个整数,对于字符类型,它是一个单字符字符串对象或字符串,对于字符指针类型,它是一个 Python " +"字节串对象或字符串。" + +#: ../../library/ctypes.rst:2157 +msgid "" +"When the ``value`` attribute is retrieved from a ctypes instance, usually a " +"new object is returned each time. :mod:`ctypes` does *not* implement " +"original object return, always a new object is constructed. The same is " +"true for all other ctypes object instances." +msgstr "" +"当从 ctypes 实例提取 ``value`` 属性时,通常每次会返回一个新的对象。 :mod:`ctypes` 并 *没有* " +"实现原始对象返回,它总是会构造一个新的对象。 所有其他 ctypes 对象实例也同样如此。" + +#: ../../library/ctypes.rst:2163 +msgid "" +"Fundamental data types, when returned as foreign function call results, or, " +"for example, by retrieving structure field members or array items, are " +"transparently converted to native Python types. In other words, if a " +"foreign function has a :attr:`restype` of :class:`c_char_p`, you will always" +" receive a Python bytes object, *not* a :class:`c_char_p` instance." +msgstr "" +"基本数据类型当作为外部函数调用结果被返回或者作为结构字段成员或数组项被提取时,会透明地转换为原生 Python 类型。 换句话说,如果某个外部函数具有 " +":class:`c_char_p` 的 :attr:`restype`,你将总是得到一个 Python 字节串对象,而 *不是* 一个 " +":class:`c_char_p` 实例。" + +#: ../../library/ctypes.rst:2171 +msgid "" +"Subclasses of fundamental data types do *not* inherit this behavior. So, if " +"a foreign functions :attr:`restype` is a subclass of :class:`c_void_p`, you " +"will receive an instance of this subclass from the function call. Of course," +" you can get the value of the pointer by accessing the ``value`` attribute." +msgstr "" +"基本数据类型的子类并 *没有* 继续此行为。 因此,如果一个外部函数的 :attr:`restype` 是 :class:`c_void_p` " +"的一个子类,你将从函数调用得到一个该子类的实例。 当然,你可以通过访问 ``value`` 属性来获取指针的值。" + +#: ../../library/ctypes.rst:2176 +msgid "These are the fundamental ctypes data types:" +msgstr "这些是基本 ctypes 数据类型:" + +#: ../../library/ctypes.rst:2180 +msgid "" +"Represents the C :c:type:`signed char` datatype, and interprets the value as" +" small integer. The constructor accepts an optional integer initializer; no" +" overflow checking is done." +msgstr "" +"代表 C :c:type:`signed char` 数据类型,并将值解读为一个小整数。 该构造器接受一个可选的整数初始化器;不会执行溢出检查。" + +#: ../../library/ctypes.rst:2187 +msgid "" +"Represents the C :c:type:`char` datatype, and interprets the value as a " +"single character. The constructor accepts an optional string initializer, " +"the length of the string must be exactly one character." +msgstr "" +"代表 C :c:type:`char` 数据类型,并将值解读为单个字符。 该构造器接受一个可选的字符串初始化器,字符串的长度必须恰好为一个字符。" + +#: ../../library/ctypes.rst:2194 +msgid "" +"Represents the C :c:type:`char *` datatype when it points to a zero-" +"terminated string. For a general character pointer that may also point to " +"binary data, ``POINTER(c_char)`` must be used. The constructor accepts an " +"integer address, or a bytes object." +msgstr "" +"当指向一个以零为结束符的字符串时代表 C :c:type:`char *` 数据类型。 对于通用字符指针来说也可能指向二进制数据,必须要使用 " +"``POINTER(c_char)``。 该构造器接受一个整数地址,或者一个字节串对象。" + +#: ../../library/ctypes.rst:2202 +msgid "" +"Represents the C :c:type:`double` datatype. The constructor accepts an " +"optional float initializer." +msgstr "代表 C :c:type:`double` 数据类型。 该构造器接受一个可选的浮点数初始化器。" + +#: ../../library/ctypes.rst:2208 +msgid "" +"Represents the C :c:type:`long double` datatype. The constructor accepts an" +" optional float initializer. On platforms where ``sizeof(long double) == " +"sizeof(double)`` it is an alias to :class:`c_double`." +msgstr "" +"代表 C :c:type:`long double` 数据类型。 该构造器接受一个可选的浮点数初始化器。 在 ``sizeof(long double)" +" == sizeof(double)`` 的平台上它是 :class:`c_double` 的一个别名。" + +#: ../../library/ctypes.rst:2214 +msgid "" +"Represents the C :c:type:`float` datatype. The constructor accepts an " +"optional float initializer." +msgstr "代表 C :c:type:`float` 数据类型。 该构造器接受一个可选的浮点数初始化器。" + +#: ../../library/ctypes.rst:2220 +msgid "" +"Represents the C :c:type:`signed int` datatype. The constructor accepts an " +"optional integer initializer; no overflow checking is done. On platforms " +"where ``sizeof(int) == sizeof(long)`` it is an alias to :class:`c_long`." +msgstr "" +"代表 C :c:type:`signed int` 数据类型。 该构造器接受一个可选的整数初始化器;不会执行溢出检查。 在 ``sizeof(int) " +"== sizeof(long)`` 的平台上它是 :class:`c_long` 的一个别名。" + +#: ../../library/ctypes.rst:2227 +msgid "" +"Represents the C 8-bit :c:type:`signed int` datatype. Usually an alias for " +":class:`c_byte`." +msgstr "代表 C 8 位 :c:type:`signed int` 数据类型。 通常是 :class:`c_byte` 的一个别名。" + +#: ../../library/ctypes.rst:2233 +msgid "" +"Represents the C 16-bit :c:type:`signed int` datatype. Usually an alias for" +" :class:`c_short`." +msgstr "代表 C 16 位 :c:type:`signed int` 数据类型。 通常是 :class:`c_short` 的一个别名。" + +#: ../../library/ctypes.rst:2239 +msgid "" +"Represents the C 32-bit :c:type:`signed int` datatype. Usually an alias for" +" :class:`c_int`." +msgstr "代表 C 32 位 :c:type:`signed int` 数据类型。 通常是 :class:`c_int` 的一个别名。" + +#: ../../library/ctypes.rst:2245 +msgid "" +"Represents the C 64-bit :c:type:`signed int` datatype. Usually an alias for" +" :class:`c_longlong`." +msgstr "代表 C 64 位 :c:type:`signed int` 数据类型。 通常是 :class:`c_longlong` 的一个别名。" + +#: ../../library/ctypes.rst:2251 +msgid "" +"Represents the C :c:type:`signed long` datatype. The constructor accepts an" +" optional integer initializer; no overflow checking is done." +msgstr "代表 C :c:type:`signed long` 数据类型。 该构造器接受一个可选的整数初始化器;不会执行溢出检查。" + +#: ../../library/ctypes.rst:2257 +msgid "" +"Represents the C :c:type:`signed long long` datatype. The constructor " +"accepts an optional integer initializer; no overflow checking is done." +msgstr "代表 C :c:type:`signed long long` 数据类型。 该构造器接受一个可选的整数初始化器;不会执行溢出检查。" + +#: ../../library/ctypes.rst:2263 +msgid "" +"Represents the C :c:type:`signed short` datatype. The constructor accepts " +"an optional integer initializer; no overflow checking is done." +msgstr "代表 C :c:type:`signed short` 数据类型。 该构造器接受一个可选的整数初始化器;不会执行溢出检查。" + +#: ../../library/ctypes.rst:2269 +msgid "Represents the C :c:type:`size_t` datatype." +msgstr "代表 C :c:type:`size_t` 数据类型。" + +#: ../../library/ctypes.rst:2274 +msgid "Represents the C :c:type:`ssize_t` datatype." +msgstr "代表 C :c:type:`ssize_t` 数据类型。" + +#: ../../library/ctypes.rst:2281 +msgid "" +"Represents the C :c:type:`unsigned char` datatype, it interprets the value " +"as small integer. The constructor accepts an optional integer initializer; " +"no overflow checking is done." +msgstr "" +"代表 C :c:type:`unsigned char` 数据类型,它将值解读为一个小整数。 该构造器接受一个可选的整数初始化器;不会执行溢出检查。" + +#: ../../library/ctypes.rst:2288 +msgid "" +"Represents the C :c:type:`unsigned int` datatype. The constructor accepts " +"an optional integer initializer; no overflow checking is done. On platforms" +" where ``sizeof(int) == sizeof(long)`` it is an alias for :class:`c_ulong`." +msgstr "" +"代表 C :c:type:`unsigned int` 数据类型。 该构造器接受一个可选的整数初始化器;不会执行溢出检查。 在 " +"``sizeof(int) == sizeof(long)`` 的平台上它是 :class:`c_ulong` 的一个别名。" + +#: ../../library/ctypes.rst:2295 +msgid "" +"Represents the C 8-bit :c:type:`unsigned int` datatype. Usually an alias " +"for :class:`c_ubyte`." +msgstr "代表 C 8 位 :c:type:`unsigned int` 数据类型。 通常是 :class:`c_ubyte` 的一个别名。" + +#: ../../library/ctypes.rst:2301 +msgid "" +"Represents the C 16-bit :c:type:`unsigned int` datatype. Usually an alias " +"for :class:`c_ushort`." +msgstr "代表 C 16 位 :c:type:`unsigned int` 数据类型。 通常是 :class:`c_ushort` 的一个别名。" + +#: ../../library/ctypes.rst:2307 +msgid "" +"Represents the C 32-bit :c:type:`unsigned int` datatype. Usually an alias " +"for :class:`c_uint`." +msgstr "代表 C 32 位 :c:type:`unsigned int` 数据类型。 通常是 :class:`c_uint` 的一个别名。" + +#: ../../library/ctypes.rst:2313 +msgid "" +"Represents the C 64-bit :c:type:`unsigned int` datatype. Usually an alias " +"for :class:`c_ulonglong`." +msgstr "" +"代表 C 64 位 :c:type:`unsigned int` 数据类型。 通常是 :class:`c_ulonglong` 的一个别名。" + +#: ../../library/ctypes.rst:2319 +msgid "" +"Represents the C :c:type:`unsigned long` datatype. The constructor accepts " +"an optional integer initializer; no overflow checking is done." +msgstr "代表 C :c:type:`unsigned long` 数据类型。 该构造器接受一个可选的整数初始化器;不会执行溢出检查。" + +#: ../../library/ctypes.rst:2325 +msgid "" +"Represents the C :c:type:`unsigned long long` datatype. The constructor " +"accepts an optional integer initializer; no overflow checking is done." +msgstr "代表 C :c:type:`unsigned long long` 数据类型。 该构造器接受一个可选的整数初始化器;不会执行溢出检查。" + +#: ../../library/ctypes.rst:2331 +msgid "" +"Represents the C :c:type:`unsigned short` datatype. The constructor accepts" +" an optional integer initializer; no overflow checking is done." +msgstr "代表 C :c:type:`unsigned short` 数据类型。 该构造器接受一个可选的整数初始化器;不会执行溢出检查。" + +#: ../../library/ctypes.rst:2337 +msgid "" +"Represents the C :c:type:`void *` type. The value is represented as " +"integer. The constructor accepts an optional integer initializer." +msgstr "代表 C :c:type:`void *` 类型。 该值被表示为整数形式。 该构造器接受一个可选的整数初始化器。" + +#: ../../library/ctypes.rst:2343 +msgid "" +"Represents the C :c:type:`wchar_t` datatype, and interprets the value as a " +"single character unicode string. The constructor accepts an optional string" +" initializer, the length of the string must be exactly one character." +msgstr "" +"代表 C :c:type:`wchar_t` 数据类型,并将值解读为一单个字符的 unicode 字符串。 " +"该构造器接受一个可选的字符串初始化器,字符串的长度必须恰好为一个字符。" + +#: ../../library/ctypes.rst:2350 +msgid "" +"Represents the C :c:type:`wchar_t *` datatype, which must be a pointer to a " +"zero-terminated wide character string. The constructor accepts an integer " +"address, or a string." +msgstr "" +"代表 C :c:type:`wchar_t *` 数据类型,它必须为指向以零为结束符的宽字符串的指针。 该构造器接受一个整数地址或者一个字符串。" + +#: ../../library/ctypes.rst:2357 +msgid "" +"Represent the C :c:type:`bool` datatype (more accurately, :c:type:`_Bool` " +"from C99). Its value can be ``True`` or ``False``, and the constructor " +"accepts any object that has a truth value." +msgstr "" +"代表 C :c:type:`bool` 数据类型 (更准确地说是 C99 :c:type:`_Bool`)。 它的值可以为 ``True`` 或 " +"``False``,并且该构造器接受任何具有逻辑值的对象。" + +#: ../../library/ctypes.rst:2364 +msgid "" +"Windows only: Represents a :c:type:`HRESULT` value, which contains success " +"or error information for a function or method call." +msgstr "Windows 专属:代表一个 :c:type:`HRESULT` 值,它包含某个函数或方法调用的成功或错误信息。" + +#: ../../library/ctypes.rst:2370 +msgid "" +"Represents the C :c:type:`PyObject *` datatype. Calling this without an " +"argument creates a ``NULL`` :c:type:`PyObject *` pointer." +msgstr "" +"代表 C :c:type:`PyObject *` 数据类型。 不带参数地调用此构造器将创建一个 ``NULL`` :c:type:`PyObject " +"*` 指针。" + +#: ../../library/ctypes.rst:2373 +msgid "" +"The :mod:`ctypes.wintypes` module provides quite some other Windows specific" +" data types, for example :c:type:`HWND`, :c:type:`WPARAM`, or " +":c:type:`DWORD`. Some useful structures like :c:type:`MSG` or " +":c:type:`RECT` are also defined." +msgstr "" +":mod:`ctypes.wintypes` 模块提供了其他许多 Windows 专属的数据类型,例如 :c:type:`HWND`, " +":c:type:`WPARAM` 或 :c:type:`DWORD`。 还定义了一些有用的结构体例如 :c:type:`MSG` 或 " +":c:type:`RECT`。" + +#: ../../library/ctypes.rst:2381 +msgid "Structured data types" +msgstr "结构化数据类型" + +#: ../../library/ctypes.rst:2386 +msgid "Abstract base class for unions in native byte order." +msgstr "本机字节序的联合所对应的抽象基类。" + +#: ../../library/ctypes.rst:2391 +msgid "Abstract base class for structures in *big endian* byte order." +msgstr "*大端* 字节序的结构体所对应的抽象基类。" + +#: ../../library/ctypes.rst:2396 +msgid "Abstract base class for structures in *little endian* byte order." +msgstr "*小端* 字节序的结构体所对应的抽象基类。" + +#: ../../library/ctypes.rst:2398 +msgid "" +"Structures with non-native byte order cannot contain pointer type fields, or" +" any other data types containing pointer type fields." +msgstr "非本机字节序的结构体不能包含指针类型字段,或任何其他包含指针类型字段的数据类型。" + +#: ../../library/ctypes.rst:2404 +msgid "Abstract base class for structures in *native* byte order." +msgstr "*本机* 字节序的结构体所对应的抽象基类。" + +#: ../../library/ctypes.rst:2406 +msgid "" +"Concrete structure and union types must be created by subclassing one of " +"these types, and at least define a :attr:`_fields_` class variable. " +":mod:`ctypes` will create :term:`descriptor`\\s which allow reading and " +"writing the fields by direct attribute accesses. These are the" +msgstr "" +"实际的结构体和联合类型必须通过子类化这些类型之一来创建,并且至少要定义一个 :attr:`_fields_` 类变量。 :mod:`ctypes` " +"将创建 :term:`descriptor`,它允许通过直接属性访问来读取和写入字段。 这些是" + +#: ../../library/ctypes.rst:2414 +msgid "" +"A sequence defining the structure fields. The items must be 2-tuples or " +"3-tuples. The first item is the name of the field, the second item " +"specifies the type of the field; it can be any ctypes data type." +msgstr "" +"一个定义结构体字段的序列。 其中的条目必须为 2 元组或 3 元组。 元组的第一项是字段名称,第二项指明字段类型;它可以是任何 ctypes 数据类型。" + +#: ../../library/ctypes.rst:2418 +msgid "" +"For integer type fields like :class:`c_int`, a third optional item can be " +"given. It must be a small positive integer defining the bit width of the " +"field." +msgstr "对于整数类型字段例如 :class:`c_int`,可以给定第三个可选项。 它必须是一个定义字段比特位宽度的小正整数。" + +#: ../../library/ctypes.rst:2422 +msgid "" +"Field names must be unique within one structure or union. This is not " +"checked, only one field can be accessed when names are repeated." +msgstr "字段名称在一个结构体或联合中必须唯一。 不会检查这个唯一性,但当名称出现重复时将只有一个字段可被访问。" + +#: ../../library/ctypes.rst:2425 +msgid "" +"It is possible to define the :attr:`_fields_` class variable *after* the " +"class statement that defines the Structure subclass, this allows creating " +"data types that directly or indirectly reference themselves::" +msgstr "" +"可以在定义 Structure 子类的类语句 *之后* 再定义 :attr:`_fields_` 类变量,这将允许创建直接或间接引用其自身的数据类型::" + +#: ../../library/ctypes.rst:2435 +msgid "" +"The :attr:`_fields_` class variable must, however, be defined before the " +"type is first used (an instance is created, :func:`sizeof` is called on it, " +"and so on). Later assignments to the :attr:`_fields_` class variable will " +"raise an AttributeError." +msgstr "" +"但是,:attr:`_fields_` 类变量必须在类型第一次被使用(创建实例,调用 :func:`sizeof` 等等)之前进行定义。 在此之后对 " +":attr:`_fields_` 类变量赋值将会引发 AttributeError。" + +#: ../../library/ctypes.rst:2440 +msgid "" +"It is possible to define sub-subclasses of structure types, they inherit the" +" fields of the base class plus the :attr:`_fields_` defined in the sub-" +"subclass, if any." +msgstr "可以定义结构体类型的子类,它们会继承基类的字段再加上在子类中定义的任何 :attr:`_fields_`。" + +#: ../../library/ctypes.rst:2447 +msgid "" +"An optional small integer that allows overriding the alignment of structure " +"fields in the instance. :attr:`_pack_` must already be defined when " +":attr:`_fields_` is assigned, otherwise it will have no effect." +msgstr "" +"一个可选的小整数,它允许覆盖实体中结构体字段的对齐方式。 当 :attr:`_fields_` 被赋值时必须已经定义了 " +":attr:`_pack_`,否则它将没有效果。" + +#: ../../library/ctypes.rst:2454 +msgid "" +"An optional sequence that lists the names of unnamed (anonymous) fields. " +":attr:`_anonymous_` must be already defined when :attr:`_fields_` is " +"assigned, otherwise it will have no effect." +msgstr "" +"一个可选的序列,它会列出未命名(匿名)字段的名称。 当 :attr:`_fields_` 被赋值时必须已经定义了 " +":attr:`_anonymous_`,否则它将没有效果。" + +#: ../../library/ctypes.rst:2458 +msgid "" +"The fields listed in this variable must be structure or union type fields. " +":mod:`ctypes` will create descriptors in the structure type that allows " +"accessing the nested fields directly, without the need to create the " +"structure or union field." +msgstr "" +"在此变量中列出的字段必须为结构体或联合类型字段。 :mod:`ctypes` " +"将在结构体类型中创建描述器以允许直接访问嵌套字段,而无需创建对应的结构体或联合字段。" + +#: ../../library/ctypes.rst:2463 +msgid "Here is an example type (Windows)::" +msgstr "以下是一个示例类型(Windows)::" + +#: ../../library/ctypes.rst:2476 +msgid "" +"The ``TYPEDESC`` structure describes a COM data type, the ``vt`` field " +"specifies which one of the union fields is valid. Since the ``u`` field is " +"defined as anonymous field, it is now possible to access the members " +"directly off the TYPEDESC instance. ``td.lptdesc`` and ``td.u.lptdesc`` are " +"equivalent, but the former is faster since it does not need to create a " +"temporary union instance::" +msgstr "" +"``TYPEDESC`` 结构体描述了一个 COM 数据类型,``vt`` 字段指明哪个联合字段是有效的。 由于 ``u`` " +"字段被定义为匿名字段,现在可以直接从 TYPEDESC 实例访问成员。 ``td.lptdesc`` 和 ``td.u.lptdesc`` " +"是等价的,但前者速度更快,因为它不需要创建临时的联合实例::" + +#: ../../library/ctypes.rst:2488 +msgid "" +"It is possible to define sub-subclasses of structures, they inherit the " +"fields of the base class. If the subclass definition has a separate " +":attr:`_fields_` variable, the fields specified in this are appended to the " +"fields of the base class." +msgstr "" +"可以定义结构体的子类,它们会继承基类的字段。 如果子类定义具有单独的 :attr:`_fields_` 变量,在其中指定的字段会被添加到基类的字段中。" + +#: ../../library/ctypes.rst:2493 +msgid "" +"Structure and union constructors accept both positional and keyword " +"arguments. Positional arguments are used to initialize member fields in the" +" same order as they are appear in :attr:`_fields_`. Keyword arguments in " +"the constructor are interpreted as attribute assignments, so they will " +"initialize :attr:`_fields_` with the same name, or create new attributes for" +" names not present in :attr:`_fields_`." +msgstr "" +"结构体和联合的构造器均可接受位置和关键字参数。 位置参数用于按照 :attr:`_fields_` 中的出现顺序来初始化成员字段。 " +"构造器中的关键字参数会被解读为属性赋值,因此它们将以相应的名称来初始化 :attr:`_fields_`,或为不存在于 :attr:`_fields_`" +" 中的名称创建新的属性。" + +#: ../../library/ctypes.rst:2504 +msgid "Arrays and pointers" +msgstr "数组与指针" + +#: ../../library/ctypes.rst:2508 +msgid "Abstract base class for arrays." +msgstr "数组的抽象基类。" + +#: ../../library/ctypes.rst:2510 +msgid "" +"The recommended way to create concrete array types is by multiplying any " +":mod:`ctypes` data type with a non-negative integer. Alternatively, you can" +" subclass this type and define :attr:`_length_` and :attr:`_type_` class " +"variables. Array elements can be read and written using standard subscript " +"and slice accesses; for slice reads, the resulting object is *not* itself an" +" :class:`Array`." +msgstr "" +"创建实体数组类型的推荐方式是通过将任意 :mod:`ctypes` 数据类型与一个非负整数相乘。 作为替代方式,你也可以子类化这个类型并定义 " +":attr:`_length_` 和 :attr:`_type_` 类变量。 数组元素可使用标准的抽取和切片操作来进行读写;对于切片读取,结果对象本身 " +"*不是* 一个 :class:`Array`。" + +#: ../../library/ctypes.rst:2520 +msgid "" +"A positive integer specifying the number of elements in the array. Out-of-" +"range subscripts result in an :exc:`IndexError`. Will be returned by " +":func:`len`." +msgstr "一个指明数组中元素数量的正整数。 超出范围的抽取会导致 :exc:`IndexError`。 该值将由 :func:`len` 返回。" + +#: ../../library/ctypes.rst:2527 +msgid "Specifies the type of each element in the array." +msgstr "指明数组中每个元素的类型。" + +#: ../../library/ctypes.rst:2530 +msgid "" +"Array subclass constructors accept positional arguments, used to initialize " +"the elements in order." +msgstr "Array 子类构造器可接受位置参数,用来按顺序初始化元素。" + +#: ../../library/ctypes.rst:2536 +msgid "Private, abstract base class for pointers." +msgstr "私有对象,指针的抽象基类。" + +#: ../../library/ctypes.rst:2538 +msgid "" +"Concrete pointer types are created by calling :func:`POINTER` with the type " +"that will be pointed to; this is done automatically by :func:`pointer`." +msgstr "实际的指针类型是通过调用 :func:`POINTER` 并附带其将指向的类型来创建的;这会由 :func:`pointer` 自动完成。" + +#: ../../library/ctypes.rst:2542 +msgid "" +"If a pointer points to an array, its elements can be read and written using " +"standard subscript and slice accesses. Pointer objects have no size, so " +":func:`len` will raise :exc:`TypeError`. Negative subscripts will read from" +" the memory *before* the pointer (as in C), and out-of-range subscripts will" +" probably crash with an access violation (if you're lucky)." +msgstr "" +"如果一个指针指向的是数组,则其元素可使用标准的抽取和切片方式来读写。 指针对象没有长度,因此 :func:`len` 将引发 " +":exc:`TypeError`。 抽取负值将会从指针 *之前* 的内存中读取(与 C " +"一样),并且超出范围的抽取将可能因非法访问而导致崩溃(视你的运气而定)。" + +#: ../../library/ctypes.rst:2552 +msgid "Specifies the type pointed to." +msgstr "指明所指向的类型。" + +#: ../../library/ctypes.rst:2556 +msgid "" +"Returns the object to which to pointer points. Assigning to this attribute " +"changes the pointer to point to the assigned object." +msgstr "返回指针所指向的对象。 对此属性赋值会使指针改为指向所赋值的对象。" diff --git a/library/curses.ascii.po b/library/curses.ascii.po new file mode 100644 index 000000000..f09bf21fb --- /dev/null +++ b/library/curses.ascii.po @@ -0,0 +1,479 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) 2001-2022, Python Software Foundation +# This file is distributed under the same license as the Python package. +# FIRST AUTHOR , YEAR. +# +# Translators: +# ppcfish , 2019 +# Freesand Leo , 2020 +# +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: Python 3.9\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2022-11-04 14:34+0000\n" +"PO-Revision-Date: 2017-02-16 23:05+0000\n" +"Last-Translator: Freesand Leo , 2020\n" +"Language-Team: Chinese (China) (https://www.transifex.com/python-doc/teams/5390/zh_CN/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: zh_CN\n" +"Plural-Forms: nplurals=1; plural=0;\n" + +#: ../../library/curses.ascii.rst:2 +msgid ":mod:`curses.ascii` --- Utilities for ASCII characters" +msgstr ":mod:`curses.ascii` --- 用于 ASCII 字符的工具" + +#: ../../library/curses.ascii.rst:12 +msgid "" +"The :mod:`curses.ascii` module supplies name constants for ASCII characters " +"and functions to test membership in various ASCII character classes. The " +"constants supplied are names for control characters as follows:" +msgstr "" +":mod:`curses.ascii` 模块提供了一些 ASCII 字符的名称常量以及在各种 ASCII 字符类中执行成员检测的函数。 " +"所提供的控制字符常量如下:" + +#: ../../library/curses.ascii.rst:17 +msgid "Name" +msgstr "名称" + +#: ../../library/curses.ascii.rst:17 +msgid "Meaning" +msgstr "含义" + +#: ../../library/curses.ascii.rst:19 +msgid ":const:`NUL`" +msgstr ":const:`NUL`" + +#: ../../library/curses.ascii.rst:21 +msgid ":const:`SOH`" +msgstr ":const:`SOH`" + +#: ../../library/curses.ascii.rst:21 +msgid "Start of heading, console interrupt" +msgstr "标题开始,控制台中断" + +#: ../../library/curses.ascii.rst:23 +msgid ":const:`STX`" +msgstr ":const:`STX`" + +#: ../../library/curses.ascii.rst:23 +msgid "Start of text" +msgstr "文本开始" + +#: ../../library/curses.ascii.rst:25 +msgid ":const:`ETX`" +msgstr ":const:`ETX`" + +#: ../../library/curses.ascii.rst:25 +msgid "End of text" +msgstr "文本结束" + +#: ../../library/curses.ascii.rst:27 +msgid ":const:`EOT`" +msgstr ":const:`EOT`" + +#: ../../library/curses.ascii.rst:27 +msgid "End of transmission" +msgstr "传输结束" + +#: ../../library/curses.ascii.rst:29 +msgid ":const:`ENQ`" +msgstr ":const:`ENQ`" + +#: ../../library/curses.ascii.rst:29 +msgid "Enquiry, goes with :const:`ACK` flow control" +msgstr "查询,附带 :const:`ACK` 流量控制" + +#: ../../library/curses.ascii.rst:31 +msgid ":const:`ACK`" +msgstr ":const:`ACK`" + +#: ../../library/curses.ascii.rst:31 +msgid "Acknowledgement" +msgstr "确认" + +#: ../../library/curses.ascii.rst:33 +msgid ":const:`BEL`" +msgstr ":const:`BEL`" + +#: ../../library/curses.ascii.rst:33 +msgid "Bell" +msgstr "蜂鸣器" + +#: ../../library/curses.ascii.rst:35 +msgid ":const:`BS`" +msgstr ":const:`BS`" + +#: ../../library/curses.ascii.rst:35 +msgid "Backspace" +msgstr "退格" + +#: ../../library/curses.ascii.rst:37 +msgid ":const:`TAB`" +msgstr ":const:`TAB`" + +#: ../../library/curses.ascii.rst:37 +msgid "Tab" +msgstr "制表符" + +#: ../../library/curses.ascii.rst:39 +msgid ":const:`HT`" +msgstr ":const:`HT`" + +#: ../../library/curses.ascii.rst:39 +msgid "Alias for :const:`TAB`: \"Horizontal tab\"" +msgstr ":const:`TAB` 的别名: \"水平制表符” " + +#: ../../library/curses.ascii.rst:41 +msgid ":const:`LF`" +msgstr ":const:`LF`" + +#: ../../library/curses.ascii.rst:41 +msgid "Line feed" +msgstr "换行" + +#: ../../library/curses.ascii.rst:43 +msgid ":const:`NL`" +msgstr ":const:`NL`" + +#: ../../library/curses.ascii.rst:43 +msgid "Alias for :const:`LF`: \"New line\"" +msgstr ":const:`LF` 的别名: \"新行\"" + +#: ../../library/curses.ascii.rst:45 +msgid ":const:`VT`" +msgstr ":const:`VT`" + +#: ../../library/curses.ascii.rst:45 +msgid "Vertical tab" +msgstr "垂直制表符" + +#: ../../library/curses.ascii.rst:47 +msgid ":const:`FF`" +msgstr ":const:`FF`" + +#: ../../library/curses.ascii.rst:47 +msgid "Form feed" +msgstr "换页" + +#: ../../library/curses.ascii.rst:49 +msgid ":const:`CR`" +msgstr ":const:`CR`" + +#: ../../library/curses.ascii.rst:49 +msgid "Carriage return" +msgstr "回车" + +#: ../../library/curses.ascii.rst:51 +msgid ":const:`SO`" +msgstr ":const:`SO`" + +#: ../../library/curses.ascii.rst:51 +msgid "Shift-out, begin alternate character set" +msgstr "Shift-out,开始替换字符集" + +#: ../../library/curses.ascii.rst:53 +msgid ":const:`SI`" +msgstr ":const:`SI`" + +#: ../../library/curses.ascii.rst:53 +msgid "Shift-in, resume default character set" +msgstr "Shift-in,恢复默认字符集" + +#: ../../library/curses.ascii.rst:55 +msgid ":const:`DLE`" +msgstr ":const:`DLE`" + +#: ../../library/curses.ascii.rst:55 +msgid "Data-link escape" +msgstr "Data-link escape,数据链接转义" + +#: ../../library/curses.ascii.rst:57 +msgid ":const:`DC1`" +msgstr ":const:`DC1`" + +#: ../../library/curses.ascii.rst:57 +msgid "XON, for flow control" +msgstr "XON,用于流程控制" + +#: ../../library/curses.ascii.rst:59 +msgid ":const:`DC2`" +msgstr ":const:`DC2`" + +#: ../../library/curses.ascii.rst:59 +msgid "Device control 2, block-mode flow control" +msgstr "Device control 2,块模式流程控制" + +#: ../../library/curses.ascii.rst:61 +msgid ":const:`DC3`" +msgstr ":const:`DC3`" + +#: ../../library/curses.ascii.rst:61 +msgid "XOFF, for flow control" +msgstr "XOFF,用于流程控制" + +#: ../../library/curses.ascii.rst:63 +msgid ":const:`DC4`" +msgstr ":const:`DC4`" + +#: ../../library/curses.ascii.rst:63 +msgid "Device control 4" +msgstr "设备控制4" + +#: ../../library/curses.ascii.rst:65 +msgid ":const:`NAK`" +msgstr ":const:`NAK`" + +#: ../../library/curses.ascii.rst:65 +msgid "Negative acknowledgement" +msgstr "否定确认" + +#: ../../library/curses.ascii.rst:67 +msgid ":const:`SYN`" +msgstr ":const:`SYN`" + +#: ../../library/curses.ascii.rst:67 +msgid "Synchronous idle" +msgstr "同步空闲" + +#: ../../library/curses.ascii.rst:69 +msgid ":const:`ETB`" +msgstr ":const:`ETB`" + +#: ../../library/curses.ascii.rst:69 +msgid "End transmission block" +msgstr "末端传输块" + +#: ../../library/curses.ascii.rst:71 +msgid ":const:`CAN`" +msgstr ":const:`CAN`" + +#: ../../library/curses.ascii.rst:71 +msgid "Cancel" +msgstr "取消" + +#: ../../library/curses.ascii.rst:73 +msgid ":const:`EM`" +msgstr ":const:`EM`" + +#: ../../library/curses.ascii.rst:73 +msgid "End of medium" +msgstr "媒体结束" + +#: ../../library/curses.ascii.rst:75 +msgid ":const:`SUB`" +msgstr ":const:`SUB`" + +#: ../../library/curses.ascii.rst:75 +msgid "Substitute" +msgstr "替换" + +#: ../../library/curses.ascii.rst:77 +msgid ":const:`ESC`" +msgstr ":const:`ESC`" + +#: ../../library/curses.ascii.rst:77 +msgid "Escape" +msgstr "退出" + +#: ../../library/curses.ascii.rst:79 +msgid ":const:`FS`" +msgstr ":const:`FS`" + +#: ../../library/curses.ascii.rst:79 +msgid "File separator" +msgstr "文件分隔符" + +#: ../../library/curses.ascii.rst:81 +msgid ":const:`GS`" +msgstr ":const:`GS`" + +#: ../../library/curses.ascii.rst:81 +msgid "Group separator" +msgstr "组分隔符" + +#: ../../library/curses.ascii.rst:83 +msgid ":const:`RS`" +msgstr ":const:`RS`" + +#: ../../library/curses.ascii.rst:83 +msgid "Record separator, block-mode terminator" +msgstr "Record separator,块模式终止符" + +#: ../../library/curses.ascii.rst:85 +msgid ":const:`US`" +msgstr ":const:`US`" + +#: ../../library/curses.ascii.rst:85 +msgid "Unit separator" +msgstr "单位分隔符" + +#: ../../library/curses.ascii.rst:87 +msgid ":const:`SP`" +msgstr ":const:`SP`" + +#: ../../library/curses.ascii.rst:87 +msgid "Space" +msgstr "空格" + +#: ../../library/curses.ascii.rst:89 +msgid ":const:`DEL`" +msgstr ":const:`DEL`" + +#: ../../library/curses.ascii.rst:89 +msgid "Delete" +msgstr "删除" + +#: ../../library/curses.ascii.rst:92 +msgid "" +"Note that many of these have little practical significance in modern usage." +" The mnemonics derive from teleprinter conventions that predate digital " +"computers." +msgstr "请注意其中有许多在现今已经没有实际作用。 这些助记符是来源于数字计算机之前的电传打印机规范。" + +#: ../../library/curses.ascii.rst:95 +msgid "" +"The module supplies the following functions, patterned on those in the " +"standard C library:" +msgstr "此模块提供了下列函数,对应于标准 C 库中的函数:" + +#: ../../library/curses.ascii.rst:101 +msgid "" +"Checks for an ASCII alphanumeric character; it is equivalent to ``isalpha(c)" +" or isdigit(c)``." +msgstr "检测 ASCII 字母数字类字符;它等价于 ``isalpha(c) 或 isdigit(c)``。" + +#: ../../library/curses.ascii.rst:107 +msgid "" +"Checks for an ASCII alphabetic character; it is equivalent to ``isupper(c) " +"or islower(c)``." +msgstr "检测 ASCII 字母类字符;它等价于 ``isupper(c) or islower(c)``。" + +#: ../../library/curses.ascii.rst:113 +msgid "Checks for a character value that fits in the 7-bit ASCII set." +msgstr "检测字符值是否在 7 位 ASCII 集范围内。" + +#: ../../library/curses.ascii.rst:118 +msgid "Checks for an ASCII whitespace character; space or horizontal tab." +msgstr "检测 ASCII 空白字符;包括空格或水平制表符。" + +#: ../../library/curses.ascii.rst:123 +msgid "" +"Checks for an ASCII control character (in the range 0x00 to 0x1f or 0x7f)." +msgstr "检测 ASCII 控制字符(在 0x00 到 0x1f 或 0x7f 范围内)。" + +#: ../../library/curses.ascii.rst:128 +msgid "" +"Checks for an ASCII decimal digit, ``'0'`` through ``'9'``. This is " +"equivalent to ``c in string.digits``." +msgstr "检测 ASCII 十进制数码,即 ``'0'`` 至 ``'9'``。 它等价于 ``c in string.digits``。" + +#: ../../library/curses.ascii.rst:134 +msgid "Checks for ASCII any printable character except space." +msgstr "检测任意 ASCII 可打印字符,不包括空白符。" + +#: ../../library/curses.ascii.rst:139 +msgid "Checks for an ASCII lower-case character." +msgstr "检测 ASCII 小写字母字符。" + +#: ../../library/curses.ascii.rst:144 +msgid "Checks for any ASCII printable character including space." +msgstr "检测任意 ASCII 可打印字符,包括空白符。" + +#: ../../library/curses.ascii.rst:149 +msgid "" +"Checks for any printable ASCII character which is not a space or an " +"alphanumeric character." +msgstr "检测任意 ASCII 可打印字符,不包括空白符或字母数字类字符。" + +#: ../../library/curses.ascii.rst:155 +msgid "" +"Checks for ASCII white-space characters; space, line feed, carriage return, " +"form feed, horizontal tab, vertical tab." +msgstr "检测 ASCII 空白字符;包括空格,换行,回车,进纸,水平制表和垂直制表。" + +#: ../../library/curses.ascii.rst:161 +msgid "Checks for an ASCII uppercase letter." +msgstr "检测 ASCII 大写字母字符。" + +#: ../../library/curses.ascii.rst:166 +msgid "" +"Checks for an ASCII hexadecimal digit. This is equivalent to ``c in " +"string.hexdigits``." +msgstr "检测 ASCII 十六进制数码。 这等价于 ``c in string.hexdigits``。" + +#: ../../library/curses.ascii.rst:172 +msgid "Checks for an ASCII control character (ordinal values 0 to 31)." +msgstr "检测 ASCII 控制字符(码位值 0 至 31)。" + +#: ../../library/curses.ascii.rst:177 +msgid "Checks for a non-ASCII character (ordinal values 0x80 and above)." +msgstr "检测非 ASCII 字符(码位值 0x80 及以上)。" + +#: ../../library/curses.ascii.rst:179 +msgid "" +"These functions accept either integers or single-character strings; when the" +" argument is a string, it is first converted using the built-in function " +":func:`ord`." +msgstr "这些函数接受整数或单字符字符串;当参数为字符串时,会先使用内置函数 :func:`ord` 进行转换。" + +#: ../../library/curses.ascii.rst:182 +msgid "" +"Note that all these functions check ordinal bit values derived from the " +"character of the string you pass in; they do not actually know anything " +"about the host machine's character encoding." +msgstr "请注意所有这些函数都是检测根据你传入的字符串的字符所生成的码位值;它们实际上完全不会知晓本机的字符编码格式。" + +#: ../../library/curses.ascii.rst:186 +msgid "" +"The following two functions take either a single-character string or integer" +" byte value; they return a value of the same type." +msgstr "以下两个函数接受单字符字符串或整数形式的字节值;它们会返回相同类型的值。" + +#: ../../library/curses.ascii.rst:192 +msgid "Return the ASCII value corresponding to the low 7 bits of *c*." +msgstr "返回对应于 *c* 的下个 7 比特位的 ASCII 值。" + +#: ../../library/curses.ascii.rst:197 +msgid "" +"Return the control character corresponding to the given character (the " +"character bit value is bitwise-anded with 0x1f)." +msgstr "返回对应于给定字符的控制字符(字符比特值会与 0x1f 进行按位与运算)。" + +#: ../../library/curses.ascii.rst:203 +msgid "" +"Return the 8-bit character corresponding to the given ASCII character (the " +"character bit value is bitwise-ored with 0x80)." +msgstr "返回对应于给定 ASCII 字符的 8 比特位字符(字符比特值会与 0x80 进行按位或运算)。" + +#: ../../library/curses.ascii.rst:206 +msgid "" +"The following function takes either a single-character string or integer " +"value; it returns a string." +msgstr "以下函数接受单字符字符串或整数值;它会返回一个字符串。" + +#: ../../library/curses.ascii.rst:216 +msgid "" +"Return a string representation of the ASCII character *c*. If *c* is " +"printable, this string is the character itself. If the character is a " +"control character (0x00--0x1f) the string consists of a caret (``'^'``) " +"followed by the corresponding uppercase letter. If the character is an ASCII" +" delete (0x7f) the string is ``'^?'``. If the character has its meta bit " +"(0x80) set, the meta bit is stripped, the preceding rules applied, and " +"``'!'`` prepended to the result." +msgstr "" +"返回 ASCII 字符 *c* 的字符串表示形式。 如果 *c* 是可打印字符,则字符串为字符本身。 如果该字符是控制字符 (0x00--0x1f) " +"则字符串由一个插入符 (``'^'``) 加相应的大写字母组成。 如果该字符是 ASCII 删除符 (0x7f) 则字符串为 ``'^?'``。 " +"如果该字符设置了元比特位 (0x80),元比特位会被去除,应用以上规则后将在结果之前添加 ``'!'``。" + +#: ../../library/curses.ascii.rst:226 +msgid "" +"A 33-element string array that contains the ASCII mnemonics for the thirty-" +"two ASCII control characters from 0 (NUL) to 0x1f (US), in order, plus the " +"mnemonic ``SP`` for the space character." +msgstr "" +"一个 33 元素的字符串数据,其中按从 0 (NUL) 到 0x1f (US) 的顺序包含了三十二个 ASCII 控制字符的 ASCII " +"助记符,另加空格符的助记符 ``SP``。" diff --git a/library/curses.panel.po b/library/curses.panel.po new file mode 100644 index 000000000..19cc6fa58 --- /dev/null +++ b/library/curses.panel.po @@ -0,0 +1,139 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) 2001-2022, Python Software Foundation +# This file is distributed under the same license as the Python package. +# FIRST AUTHOR , YEAR. +# +# Translators: +# Alpha Du , 2019 +# Freesand Leo , 2020 +# +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: Python 3.9\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2022-11-04 14:34+0000\n" +"PO-Revision-Date: 2017-02-16 23:05+0000\n" +"Last-Translator: Freesand Leo , 2020\n" +"Language-Team: Chinese (China) (https://www.transifex.com/python-doc/teams/5390/zh_CN/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: zh_CN\n" +"Plural-Forms: nplurals=1; plural=0;\n" + +#: ../../library/curses.panel.rst:2 +msgid ":mod:`curses.panel` --- A panel stack extension for curses" +msgstr ":mod:`curses.panel` --- curses 的面板栈扩展" + +#: ../../library/curses.panel.rst:11 +msgid "" +"Panels are windows with the added feature of depth, so they can be stacked " +"on top of each other, and only the visible portions of each window will be " +"displayed. Panels can be added, moved up or down in the stack, and removed." +msgstr "" +"面板是具有添加深度功能的窗口,因此它们可以从上至下堆叠为栈,只有显示每个窗口的可见部分会显示出来。 面板可以在栈中被添加、上移或下移,也可以被移除。" + +#: ../../library/curses.panel.rst:19 +msgid "Functions" +msgstr "函数" + +#: ../../library/curses.panel.rst:21 +msgid "The module :mod:`curses.panel` defines the following functions:" +msgstr ":mod:`curses.panel` 模块定义了以下函数:" + +#: ../../library/curses.panel.rst:26 +msgid "Returns the bottom panel in the panel stack." +msgstr "返回面板栈中的底部面板。" + +#: ../../library/curses.panel.rst:31 +msgid "" +"Returns a panel object, associating it with the given window *win*. Be aware" +" that you need to keep the returned panel object referenced explicitly. If " +"you don't, the panel object is garbage collected and removed from the panel " +"stack." +msgstr "" +"返回一个面板对象,将其与给定的窗口 *win* 相关联。 请注意你必须显式地保持所返回的面板对象。 " +"如果你不这样做,面板对象会被垃圾回收并从面板栈中被移除。" + +#: ../../library/curses.panel.rst:38 +msgid "Returns the top panel in the panel stack." +msgstr "返回面板栈中的顶部面板。" + +#: ../../library/curses.panel.rst:43 +msgid "" +"Updates the virtual screen after changes in the panel stack. This does not " +"call :func:`curses.doupdate`, so you'll have to do this yourself." +msgstr "在面板栈发生改变后更新虚拟屏幕。 这不会调用 :func:`curses.doupdate`,因此你不必自己执行此操作。" + +#: ../../library/curses.panel.rst:50 +msgid "Panel Objects" +msgstr "Panel 对象" + +#: ../../library/curses.panel.rst:52 +msgid "" +"Panel objects, as returned by :func:`new_panel` above, are windows with a " +"stacking order. There's always a window associated with a panel which " +"determines the content, while the panel methods are responsible for the " +"window's depth in the panel stack." +msgstr "" +"Panel 对象,如上面 :func:`new_panel` 所返回的对象,是带有栈顺序的多个窗口。 " +"总是会有一个窗口与确定内容的面板相关联,面板方法会负责窗口在面板栈中的深度。" + +#: ../../library/curses.panel.rst:57 +msgid "Panel objects have the following methods:" +msgstr "Panel 对象具有以下方法:" + +#: ../../library/curses.panel.rst:62 +msgid "Returns the panel above the current panel." +msgstr "返回当前面板之上的面板。" + +#: ../../library/curses.panel.rst:67 +msgid "Returns the panel below the current panel." +msgstr "返回当前面板之下的面板。" + +#: ../../library/curses.panel.rst:72 +msgid "Push the panel to the bottom of the stack." +msgstr "将面板推至栈底部。" + +#: ../../library/curses.panel.rst:77 +msgid "" +"Returns ``True`` if the panel is hidden (not visible), ``False`` otherwise." +msgstr "如果面板被隐藏(不可见)则返回 ``True``,否则返回 ``False``。" + +#: ../../library/curses.panel.rst:82 +msgid "" +"Hide the panel. This does not delete the object, it just makes the window on" +" screen invisible." +msgstr "隐藏面板。 这不会删除对象,它只是让窗口在屏幕上不可见。" + +#: ../../library/curses.panel.rst:88 +msgid "Move the panel to the screen coordinates ``(y, x)``." +msgstr "将面板移至屏幕坐标 ``(y, x)``。" + +#: ../../library/curses.panel.rst:93 +msgid "Change the window associated with the panel to the window *win*." +msgstr "将与面板相关联的窗口改为窗口 *win*。" + +#: ../../library/curses.panel.rst:98 +msgid "" +"Set the panel's user pointer to *obj*. This is used to associate an " +"arbitrary piece of data with the panel, and can be any Python object." +msgstr "将面板的用户指向设为 *obj*。 这被用来将任意数据与面板相关联,数据可以是任何 Python 对象。" + +#: ../../library/curses.panel.rst:104 +msgid "Display the panel (which might have been hidden)." +msgstr "显示面板(面板可能已被隐藏)。" + +#: ../../library/curses.panel.rst:109 +msgid "Push panel to the top of the stack." +msgstr "将面板推至栈顶部。" + +#: ../../library/curses.panel.rst:114 +msgid "" +"Returns the user pointer for the panel. This might be any Python object." +msgstr "返回面板的用户指针。 这可以是任何 Python 对象。" + +#: ../../library/curses.panel.rst:119 +msgid "Returns the window object associated with the panel." +msgstr "返回与面板相关联的窗口对象。" diff --git a/library/curses.po b/library/curses.po new file mode 100644 index 000000000..9b956d20a --- /dev/null +++ b/library/curses.po @@ -0,0 +1,3397 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) 2001-2024, Python Software Foundation +# This file is distributed under the same license as the Python package. +# FIRST AUTHOR , YEAR. +# +# Translators: +# SKY H. , 2018 +# walkinrain , 2019 +# Zombie110year , 2019 +# Alpha Du , 2019 +# 8af080f2e6702c64bedd01873aed27e8_25aec74 , 2019 +# ppcfish , 2019 +# Freesand Leo , 2021 +# Rafael Fontenelle , 2024 +# +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: Python 3.9\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2024-05-31 16:34+0000\n" +"PO-Revision-Date: 2017-02-16 23:05+0000\n" +"Last-Translator: Rafael Fontenelle , 2024\n" +"Language-Team: Chinese (China) (https://app.transifex.com/python-doc/teams/5390/zh_CN/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: zh_CN\n" +"Plural-Forms: nplurals=1; plural=0;\n" + +#: ../../library/curses.rst:2 +msgid ":mod:`curses` --- Terminal handling for character-cell displays" +msgstr ":mod:`curses` --- 终端字符单元显示的处理" + +#: ../../library/curses.rst:14 +msgid "" +"The :mod:`curses` module provides an interface to the curses library, the " +"de-facto standard for portable advanced terminal handling." +msgstr ":mod:`curses` 模块提供了 curses 库的接口,这是可移植高级终端处理的事实标准。" + +#: ../../library/curses.rst:17 +msgid "" +"While curses is most widely used in the Unix environment, versions are " +"available for Windows, DOS, and possibly other systems as well. This " +"extension module is designed to match the API of ncurses, an open-source " +"curses library hosted on Linux and the BSD variants of Unix." +msgstr "" +"虽然 curses 在 Unix 环境中使用最为广泛,但也有适用于 Windows,DOS 以及其他可能的系统的版本。此扩展模块旨在匹配 ncurses" +" 的 API,这是一个部署在 Linux 和 Unix 的 BSD 变体上的开源 curses 库。" + +#: ../../library/curses.rst:24 +msgid "" +"Whenever the documentation mentions a *character* it can be specified as an " +"integer, a one-character Unicode string or a one-byte byte string." +msgstr "每当文档提到 **字符** 时,它可以被指定为一个整数,一个单字符 Unicode 字符串或者一个单字节的字节字符串。" + +#: ../../library/curses.rst:27 +msgid "" +"Whenever the documentation mentions a *character string* it can be specified" +" as a Unicode string or a byte string." +msgstr "每当此文档提到 **字符串** 时,它可以被指定为一个 Unicode 字符串或者一个字节字符串。" + +#: ../../library/curses.rst:32 +msgid "" +"Since version 5.4, the ncurses library decides how to interpret non-ASCII " +"data using the ``nl_langinfo`` function. That means that you have to call " +":func:`locale.setlocale` in the application and encode Unicode strings using" +" one of the system's available encodings. This example uses the system's " +"default encoding::" +msgstr "" +"从 5.4 版本开始,ncurses 库使用 ``nl_langinfo`` 函数来决定如何解释非 ASCII 数据。这意味着你需要在程序中调用 " +":func:`locale.setlocale` 函数,并使用一种系统中可用的编码方法来编码 Unicode 字符串。这个例子使用了系统默认的编码::" + +#: ../../library/curses.rst:42 +msgid "Then use *code* as the encoding for :meth:`str.encode` calls." +msgstr "然后使用 *code* 作为 :meth:`str.encode` 调用的编码。" + +#: ../../library/curses.rst:47 +msgid "Module :mod:`curses.ascii`" +msgstr "模块 :mod:`curses.ascii`" + +#: ../../library/curses.rst:47 +msgid "" +"Utilities for working with ASCII characters, regardless of your locale " +"settings." +msgstr "在 ASCII 字符上工作的工具,无论你的区域设置是什么。" + +#: ../../library/curses.rst:50 +msgid "Module :mod:`curses.panel`" +msgstr "模块 :mod:`curses.panel`" + +#: ../../library/curses.rst:50 +msgid "A panel stack extension that adds depth to curses windows." +msgstr "为 curses 窗口添加深度的面板栈扩展。" + +#: ../../library/curses.rst:53 +msgid "Module :mod:`curses.textpad`" +msgstr "模块 :mod:`curses.textpad`" + +#: ../../library/curses.rst:53 +msgid "" +"Editable text widget for curses supporting :program:`Emacs`\\ -like " +"bindings." +msgstr "用于使 curses 支持 :program:`Emacs` 式绑定的可编辑文本部件。" + +#: ../../library/curses.rst:57 +msgid ":ref:`curses-howto`" +msgstr ":ref:`curses-howto`" + +#: ../../library/curses.rst:56 +msgid "" +"Tutorial material on using curses with Python, by Andrew Kuchling and Eric " +"Raymond." +msgstr "关于配合 Python 使用 curses 的教学材料,由 Andrew Kuchling 和 Eric Raymond 撰写。" + +#: ../../library/curses.rst:59 +msgid "" +"The :source:`Tools/demo/` directory in the Python source distribution " +"contains some example programs using the curses bindings provided by this " +"module." +msgstr "Python 源码发布包的 :source:`Tools/demo/` 目录包含了一些使用此模块所提供的 curses 绑定的示例程序。" + +#: ../../library/curses.rst:66 +msgid "Functions" +msgstr "函数" + +#: ../../library/curses.rst:68 +msgid "The module :mod:`curses` defines the following exception:" +msgstr ":mod:`curses` 模块定义了以下异常:" + +#: ../../library/curses.rst:73 +msgid "Exception raised when a curses library function returns an error." +msgstr "当 curses 库中函数返回一个错误时引发的异常。" + +#: ../../library/curses.rst:77 +msgid "" +"Whenever *x* or *y* arguments to a function or a method are optional, they " +"default to the current cursor location. Whenever *attr* is optional, it " +"defaults to :const:`A_NORMAL`." +msgstr "" +"只要一个函数或方法的 *x* 或 *y* 参数是可选项,它们会默认为当前光标位置。 而当 *attr* 是可选项时,它会默认为 " +":const:`A_NORMAL`。" + +#: ../../library/curses.rst:81 +msgid "The module :mod:`curses` defines the following functions:" +msgstr ":mod:`curses` 模块定义了以下函数:" + +#: ../../library/curses.rst:86 +msgid "" +"Return the output speed of the terminal in bits per second. On software " +"terminal emulators it will have a fixed high value. Included for historical " +"reasons; in former times, it was used to write output loops for time delays" +" and occasionally to change interfaces depending on the line speed." +msgstr "" +"以每秒比特数为单位返回终端输出速度。 在软件终端模拟器上它将具有一个固定的最高值。 " +"此函数出于历史原因被包括;在以前,它被用于写输出循环以提供时间延迟,并偶尔根据线路速度来改变接口。" + +#: ../../library/curses.rst:94 +msgid "Emit a short attention sound." +msgstr "发出短促的提醒声音。" + +#: ../../library/curses.rst:99 +msgid "" +"Return ``True`` or ``False``, depending on whether the programmer can change" +" the colors displayed by the terminal." +msgstr "根据程序员能否改变终端显示的颜色返回 ``True`` 或 ``False``。" + +#: ../../library/curses.rst:105 +msgid "" +"Enter cbreak mode. In cbreak mode (sometimes called \"rare\" mode) normal " +"tty line buffering is turned off and characters are available to be read one" +" by one. However, unlike raw mode, special characters (interrupt, quit, " +"suspend, and flow control) retain their effects on the tty driver and " +"calling program. Calling first :func:`raw` then :func:`cbreak` leaves the " +"terminal in cbreak mode." +msgstr "" +"进入 cbreak 模式。 在 cbreak 模式(有时也称为“稀有”模式)通常的 tty 行缓冲会被关闭并且字符可以被一个一个地读取。 " +"但是,与原始模式不同,特殊字符(中断、退出、挂起和流程控制)会在 tty 驱动和调用程序上保留其效果。 首先调用 :func:`raw` 然后调用 " +":func:`cbreak` 会将终端置于 cbreak 模式。" + +#: ../../library/curses.rst:114 +msgid "" +"Return the intensity of the red, green, and blue (RGB) components in the " +"color *color_number*, which must be between ``0`` and ``COLORS - 1``. " +"Return a 3-tuple, containing the R,G,B values for the given color, which " +"will be between ``0`` (no component) and ``1000`` (maximum amount of " +"component)." +msgstr "" +"返回颜色值 *color_number* 中红、绿和蓝(RGB)分量的强度,此强度值必须介于 ``0`` 和 ``COLORS - 1`` 之间。 " +"返回一个 3 元组,其中包含给定颜色的 R,G,B 值,它们必须介于 ``0`` (无分量) 和 ``1000`` (最大分量) 之间。" + +#: ../../library/curses.rst:122 +msgid "" +"Return the attribute value for displaying text in the specified color pair. " +"Only the first 256 color pairs are supported. This attribute value can be " +"combined with :const:`A_STANDOUT`, :const:`A_REVERSE`, and the other " +":const:`A_\\*` attributes. :func:`pair_number` is the counterpart to this " +"function." +msgstr "" +"返回用于以指定颜色对显示文本的属性值。 仅支持前 256 个颜色对。 该属性值可与 :const:`A_STANDOUT`, " +":const:`A_REVERSE` 以及其他 :const:`A_\\*` 属性组合使用。 :func:`pair_number` " +"是此函数的对应操作。" + +#: ../../library/curses.rst:131 +msgid "" +"Set the cursor state. *visibility* can be set to ``0``, ``1``, or ``2``, " +"for invisible, normal, or very visible. If the terminal supports the " +"visibility requested, return the previous cursor state; otherwise raise an " +"exception. On many terminals, the \"visible\" mode is an underline cursor " +"and the \"very visible\" mode is a block cursor." +msgstr "" +"设置光标状态。 *visibility* 可设为 ``0``, ``1`` 或 ``2`` 表示不可见、正常与高度可见。 " +"如果终端支持所请求的可见性,则返回之前的光标状态;否则会引发异常。 在许多终端上,“正常可见”模式为下划线光标而“高度可见”模式为方块形光标。" + +#: ../../library/curses.rst:140 +msgid "" +"Save the current terminal mode as the \"program\" mode, the mode when the " +"running program is using curses. (Its counterpart is the \"shell\" mode, " +"for when the program is not in curses.) Subsequent calls to " +":func:`reset_prog_mode` will restore this mode." +msgstr "" +"将当前终端模式保存为 \"program\" 模式,即正在运行的程序使用 curses 的模式。 (与其相对的是 \"shell\" 模式,即程序不使用" +" curses。) 对 :func:`reset_prog_mode` 的后续调用将恢复此模式。" + +#: ../../library/curses.rst:148 +msgid "" +"Save the current terminal mode as the \"shell\" mode, the mode when the " +"running program is not using curses. (Its counterpart is the \"program\" " +"mode, when the program is using curses capabilities.) Subsequent calls to " +":func:`reset_shell_mode` will restore this mode." +msgstr "" +"将当前终端模式保存为 \"shell\" 模式,即正在运行的程序不使用 curses 的模式。 (与其相对的是 \"program\" 模式,即程序使用" +" 功能。) 对 :func:`reset_shell_mode` 的后续调用将恢复此模式。" + +#: ../../library/curses.rst:156 +msgid "Insert an *ms* millisecond pause in output." +msgstr "在输出中插入 *ms* 毫秒的暂停。" + +#: ../../library/curses.rst:161 +msgid "" +"Update the physical screen. The curses library keeps two data structures, " +"one representing the current physical screen contents and a virtual screen " +"representing the desired next state. The :func:`doupdate` ground updates " +"the physical screen to match the virtual screen." +msgstr "" +"更新物理屏幕。 curses 库会保留两个数据结构,一个代表当前物理屏幕的内容以及一个虚拟屏幕代表需要的后续状态。 :func:`doupdate` " +"整体更新物理屏幕以匹配虚拟屏幕。" + +#: ../../library/curses.rst:166 +msgid "" +"The virtual screen may be updated by a :meth:`~window.noutrefresh` call " +"after write operations such as :meth:`~window.addstr` have been performed on" +" a window. The normal :meth:`~window.refresh` call is simply " +":meth:`!noutrefresh` followed by :func:`!doupdate`; if you have to update " +"multiple windows, you can speed performance and perhaps reduce screen " +"flicker by issuing :meth:`!noutrefresh` calls on all windows, followed by a " +"single :func:`!doupdate`." +msgstr "" +"虚拟屏幕可以通过在写入操作例如在一个窗口上执行 :meth:`~window.addstr` 之后调用 " +":meth:`~window.noutrefresh` 来刷新。 普通的 :meth:`~window.refresh` 调用只是简单的 " +":meth:`!noutrefresh` 加 :func:`!doupdate`;如果你需要更新多个窗口,你可以通过在所有窗口上发出 " +":meth:`!noutrefresh` 调用再加单次 :func:`!doupdate` 来提升性能并可减少屏幕闪烁。" + +#: ../../library/curses.rst:176 +msgid "" +"Enter echo mode. In echo mode, each character input is echoed to the screen" +" as it is entered." +msgstr "进入 echo 模式。 在 echo 模式下,输入的每个字符都会在输入后回显到屏幕上。" + +#: ../../library/curses.rst:182 +msgid "De-initialize the library, and return terminal to normal status." +msgstr "撤销库的初始化,使终端返回正常状态。" + +#: ../../library/curses.rst:187 +msgid "" +"Return the user's current erase character as a one-byte bytes object. Under" +" Unix operating systems this is a property of the controlling tty of the " +"curses program, and is not set by the curses library itself." +msgstr "" +"将用户的当前擦除字符以单字节字节串对象的形式返回。 在 Unix 操作系统下这是 curses 程序用来控制 tty 的属性,而不是由 curses " +"库本身来设置的。" + +#: ../../library/curses.rst:194 +msgid "" +"The :func:`.filter` routine, if used, must be called before :func:`initscr` " +"is called. The effect is that, during those calls, :envvar:`LINES` is set " +"to ``1``; the capabilities ``clear``, ``cup``, ``cud``, ``cud1``, ``cuu1``, " +"``cuu``, ``vpa`` are disabled; and the ``home`` string is set to the value " +"of ``cr``. The effect is that the cursor is confined to the current line, " +"and so are screen updates. This may be used for enabling character-at-a-" +"time line editing without touching the rest of the screen." +msgstr "" +"如果要使用 :func:`.filter` 例程,它必须在调用 :func:`initscr` 之前被调用。 " +"其效果是在这些调用期间,:envvar:`LINES` 会被设为 ``1``;``clear``, ``cup``, ``cud``, " +"``cud1``, ``cuu1``, ``cuu``, ``vpa`` 等功能会被禁用;而 ``home`` 字符串会被设为 ``cr`` 的值。 " +"其影响是光标会被限制在当前行内,屏幕刷新也是如此。 这可被用于启用单字符模式的行编辑而不触及屏幕的其余部分。" + +#: ../../library/curses.rst:204 +msgid "" +"Flash the screen. That is, change it to reverse-video and then change it " +"back in a short interval. Some people prefer such as 'visible bell' to the " +"audible attention signal produced by :func:`beep`." +msgstr "" +"闪烁屏幕。 也就是将其改为反显并在很短的时间内将其改回原状。 有些人更喜欢这样的‘视觉响铃’而非 :func:`beep` 所产生的听觉提醒信号。" + +#: ../../library/curses.rst:211 +msgid "" +"Flush all input buffers. This throws away any typeahead that has been " +"typed by the user and has not yet been processed by the program." +msgstr "刷新所有输入缓冲区。 这会丢弃任何已被用户输入但尚未被程序处理的预输入内容。" + +#: ../../library/curses.rst:217 +msgid "" +"After :meth:`~window.getch` returns :const:`KEY_MOUSE` to signal a mouse " +"event, this method should be called to retrieve the queued mouse event, " +"represented as a 5-tuple ``(id, x, y, z, bstate)``. *id* is an ID value used" +" to distinguish multiple devices, and *x*, *y*, *z* are the event's " +"coordinates. (*z* is currently unused.) *bstate* is an integer value whose" +" bits will be set to indicate the type of event, and will be the bitwise OR " +"of one or more of the following constants, where *n* is the button number " +"from 1 to 4: :const:`BUTTONn_PRESSED`, :const:`BUTTONn_RELEASED`, " +":const:`BUTTONn_CLICKED`, :const:`BUTTONn_DOUBLE_CLICKED`, " +":const:`BUTTONn_TRIPLE_CLICKED`, :const:`BUTTON_SHIFT`, " +":const:`BUTTON_CTRL`, :const:`BUTTON_ALT`." +msgstr "" +"在 :meth:`~window.getch` 返回 :const:`KEY_MOUSE` " +"以发出鼠标事件信号之后,应当调用此方法来获取加入队列的鼠标事件,事件以一个 5 元组 ``(id, x, y, z, bstate)`` 来表示。 " +"*id* 为用于区分多个设置的 ID 值, *x*, *y*, *z* 为事件的坐标。 (*z* 目前未被使用。) *bstate* " +"为一个整数值,其各比特位将设置用于表示事件类型,并将是下列常量中一个或多个按位 OR 的结果,其中 *n* 是以 1 至 4 表示的键号: " +":const:`BUTTONn_PRESSED`, :const:`BUTTONn_RELEASED`, " +":const:`BUTTONn_CLICKED`, :const:`BUTTONn_DOUBLE_CLICKED`, " +":const:`BUTTONn_TRIPLE_CLICKED`, :const:`BUTTON_SHIFT`, " +":const:`BUTTON_CTRL`, :const:`BUTTON_ALT`。" + +#: ../../library/curses.rst:231 +msgid "" +"Return the current coordinates of the virtual screen cursor as a tuple ``(y," +" x)``. If :meth:`leaveok ` is currently ``True``, then " +"return ``(-1, -1)``." +msgstr "" +"将当前虚拟屏幕光标的坐标作为元组 ``(y, x)`` 返回。 如果 :meth:`leaveok ` 当前为 " +"``True``,则返回 ``(-1, -1)``。" + +#: ../../library/curses.rst:237 +msgid "" +"Read window related data stored in the file by an earlier :func:`putwin` " +"call. The routine then creates and initializes a new window using that data," +" returning the new window object." +msgstr "" +"读取由之前的 :func:`putwin` 调用存放在文件中的窗口相关数据。 该例程随后将使用该数据创建并初始化一个新窗口,并返回该新窗口对象。" + +#: ../../library/curses.rst:244 +msgid "" +"Return ``True`` if the terminal can display colors; otherwise, return " +"``False``." +msgstr "如果终端能显示彩色则返回 ``True``;否则返回 ``False``。" + +#: ../../library/curses.rst:249 +msgid "" +"Return ``True`` if the terminal has insert- and delete-character " +"capabilities. This function is included for historical reasons only, as all " +"modern software terminal emulators have such capabilities." +msgstr "如果终端具有插入和删除字符的功能则返回 ``True``。 此函数仅是出于历史原因而被包括的,因为所有现代软件终端模拟器都具有这些功能。" + +#: ../../library/curses.rst:256 +msgid "" +"Return ``True`` if the terminal has insert- and delete-line capabilities, or" +" can simulate them using scrolling regions. This function is included for " +"historical reasons only, as all modern software terminal emulators have such" +" capabilities." +msgstr "" +"如果终端具有插入和删除字符功能,或者能够使用滚动区域来模拟这些功能则返回 ``True``。 " +"此函数仅是出于历史原因而被包括的,因为所有现代软件终端模拟器都具有这些功能。" + +#: ../../library/curses.rst:264 +msgid "" +"Take a key value *ch*, and return ``True`` if the current terminal type " +"recognizes a key with that value." +msgstr "接受一个键值 *ch*,并在当前终端类型能识别出具有该值的键时返回 ``True``。" + +#: ../../library/curses.rst:270 +msgid "" +"Used for half-delay mode, which is similar to cbreak mode in that characters" +" typed by the user are immediately available to the program. However, after " +"blocking for *tenths* tenths of seconds, raise an exception if nothing has " +"been typed. The value of *tenths* must be a number between ``1`` and " +"``255``. Use :func:`nocbreak` to leave half-delay mode." +msgstr "" +"用于半延迟模式,与 cbreak 模式的类似之处是用户所键入的字符会立即对程序可用。 但是,在阻塞 *tenths* " +"个十分之一秒之后,如果还未输入任何内容则将引发异常。 *tenths* 值必须为 ``1`` 和 ``255`` 之间的数字。 使用 " +":func:`nocbreak` 可退出半延迟模式。" + +#: ../../library/curses.rst:279 +msgid "" +"Change the definition of a color, taking the number of the color to be " +"changed followed by three RGB values (for the amounts of red, green, and " +"blue components). The value of *color_number* must be between ``0`` and " +"`COLORS - 1`. Each of *r*, *g*, *b*, must be a value between ``0`` and " +"``1000``. When :func:`init_color` is used, all occurrences of that color on" +" the screen immediately change to the new definition. This function is a " +"no-op on most terminals; it is active only if :func:`can_change_color` " +"returns ``True``." +msgstr "" +"更改某个颜色的定义,接受要更改的颜色编号以及三个 RGB 值(表示红绿蓝三分量的强度)。 *color_number* 值必须为 ``0`` 和 " +"`COLORS - 1` 之间的数字。 *r*, *g*, *b* 值必须为 ``0`` 和 ``1000`` 之间的数字。 当使用 " +":func:`init_color` 时,出现在屏幕上的对应颜色会立即按照新定义来更改。 此函数在大多数终端上都是无操作的;它仅会在 " +":func:`can_change_color` 返回 ``True`` 时生效。" + +#: ../../library/curses.rst:290 +msgid "" +"Change the definition of a color-pair. It takes three arguments: the number" +" of the color-pair to be changed, the foreground color number, and the " +"background color number. The value of *pair_number* must be between ``1`` " +"and ``COLOR_PAIRS - 1`` (the ``0`` color pair is wired to white on black and" +" cannot be changed). The value of *fg* and *bg* arguments must be between " +"``0`` and ``COLORS - 1``, or, after calling :func:`use_default_colors`, " +"``-1``. If the color-pair was previously initialized, the screen is " +"refreshed and all occurrences of that color-pair are changed to the new " +"definition." +msgstr "" +"更改某个颜色对的定义。 它接受三个参数:要更改的颜色对编号,前景色编号和背景色编号。 *pair_number* 值必须为 ``1`` 和 " +"``COLOR_PAIRS - 1`` 之间的数字(并且 ``0`` 号颜色对固定为黑底白字而无法更改)。 *fg* 和 *bg* 参数必须为 " +"``0`` 和 ``COLORS - 1`` 之间的数字,或者在调用 :func:`use_default_colors` 之后则为 ``-1``。 " +"如果颜色对之前已被初始化,则屏幕会被刷新使得出现在屏幕上的该颜色会立即按照新定义来更改。" + +#: ../../library/curses.rst:303 +msgid "" +"Initialize the library. Return a :ref:`window ` " +"object which represents the whole screen." +msgstr "初始化库。 返回代表整个屏幕的 :ref:`窗口 ` 对象。" + +#: ../../library/curses.rst:308 +msgid "" +"If there is an error opening the terminal, the underlying curses library may" +" cause the interpreter to exit." +msgstr "如果打开终端时发生错误,则下层的 curses 库可能会导致解释器退出。" + +#: ../../library/curses.rst:314 +msgid "" +"Return ``True`` if :func:`resize_term` would modify the window structure, " +"``False`` otherwise." +msgstr "如果 :func:`resize_term` 会修改窗口结构则返回 ``True``,否则返回 ``False``。" + +#: ../../library/curses.rst:320 +msgid "" +"Return ``True`` if :func:`endwin` has been called (that is, the curses " +"library has been deinitialized)." +msgstr "如果 :func:`endwin` 已经被调用(即 curses 库已经被撤销初始化则返回 ``True``。" + +#: ../../library/curses.rst:326 +msgid "" +"Return the name of the key numbered *k* as a bytes object. The name of a " +"key generating printable ASCII character is the key's character. The name " +"of a control-key combination is a two-byte bytes object consisting of a " +"caret (``b'^'``) followed by the corresponding printable ASCII character. " +"The name of an alt-key combination (128--255) is a bytes object consisting " +"of the prefix ``b'M-'`` followed by the name of the corresponding ASCII " +"character." +msgstr "" +"将编号为 *k* 的键名称作为字节串对象返回。 生成可打印 ASCII 字符的键名称就是键所对应的字符。 Ctrl-" +"键组合的键名称则是一个两字节的字节串对象,它由插入符 (``b'^'``) 加对应的可打印 ASCII 字符组成。 Alt-键组合 (128--255)" +" 的键名称则是由前缀 ``b'M-'`` 加对应的可打印 ASCII 字符组成的字节串对象。" + +#: ../../library/curses.rst:336 +msgid "" +"Return the user's current line kill character as a one-byte bytes object. " +"Under Unix operating systems this is a property of the controlling tty of " +"the curses program, and is not set by the curses library itself." +msgstr "" +"将用户的当前行删除字符以单字节字节串对象的形式返回。 在 Unix 操作系统下这是 curses 程序用来控制 tty 的属性,而不是由 curses " +"库本身来设置的。" + +#: ../../library/curses.rst:343 +msgid "" +"Return a bytes object containing the terminfo long name field describing the" +" current terminal. The maximum length of a verbose description is 128 " +"characters. It is defined only after the call to :func:`initscr`." +msgstr "" +"返回一个字节串对象,其中包含描述当前终端的 terminfo 长名称字段。 详细描述的最大长度为 128 个字符。 它仅在调用 " +":func:`initscr` 之后才会被定义。" + +#: ../../library/curses.rst:350 +msgid "" +"If *flag* is ``True``, allow 8-bit characters to be input. If *flag* is " +"``False``, allow only 7-bit chars." +msgstr "" +"如果 *flag* 为 ``True``,则允许输入 8 比特位的字符。 如果 *flag* 为 ``False``,则只允许 7 比特位的字符。" + +#: ../../library/curses.rst:356 +msgid "" +"Set the maximum time in milliseconds that can elapse between press and " +"release events in order for them to be recognized as a click, and return the" +" previous interval value. The default value is 200 msec, or one fifth of a " +"second." +msgstr "以毫秒为单位设置能够被识别为点击的按下和释放事件之间可以间隔的最长时间,并返回之前的间隔值。 默认值为 200 毫秒,即五分之一秒。" + +#: ../../library/curses.rst:363 +msgid "" +"Set the mouse events to be reported, and return a tuple ``(availmask, " +"oldmask)``. *availmask* indicates which of the specified mouse events can " +"be reported; on complete failure it returns ``0``. *oldmask* is the " +"previous value of the given window's mouse event mask. If this function is " +"never called, no mouse events are ever reported." +msgstr "" +"设置要报告的鼠标事件,并返回一个元组 ``(availmask, oldmask)``。 *availmask* " +"表明指定的鼠标事件中哪些可以被报告;当完全失败时将返回 ``0``。 *oldmask* 是给定窗口的鼠标事件之前的掩码值。 " +"如果从未调用此函数,则不会报告任何鼠标事件。" + +#: ../../library/curses.rst:372 +msgid "Sleep for *ms* milliseconds." +msgstr "休眠 *ms* 毫秒。" + +#: ../../library/curses.rst:377 +msgid "" +"Create and return a pointer to a new pad data structure with the given " +"number of lines and columns. Return a pad as a window object." +msgstr "创建并返回一个指向具有给定行数和列数新的面板数据结构的指针。 将面板作为窗口对象返回。" + +#: ../../library/curses.rst:380 +msgid "" +"A pad is like a window, except that it is not restricted by the screen size," +" and is not necessarily associated with a particular part of the screen. " +"Pads can be used when a large window is needed, and only a part of the " +"window will be on the screen at one time. Automatic refreshes of pads (such" +" as from scrolling or echoing of input) do not occur. The " +":meth:`~window.refresh` and :meth:`~window.noutrefresh` methods of a pad " +"require 6 arguments to specify the part of the pad to be displayed and the " +"location on the screen to be used for the display. The arguments are " +"*pminrow*, *pmincol*, *sminrow*, *smincol*, *smaxrow*, *smaxcol*; the *p* " +"arguments refer to the upper left corner of the pad region to be displayed " +"and the *s* arguments define a clipping box on the screen within which the " +"pad region is to be displayed." +msgstr "" +"面板类似于窗口,区别在于它不受屏幕大小的限制,并且不必与屏幕的特定部分相关联。 面板可以在需要使用大窗口时使用,并且每次只需将窗口的一部分放在屏幕上。 " +"面板不会发生自动刷新(例如由于滚动或输入回显)。 面板的 :meth:`~window.refresh` 和 " +":meth:`~window.noutrefresh` 方法需要 6 个参数来指定面板要显示的部分以及要用于显示的屏幕位置。 这些参数是 " +"*pminrow*, *pmincol*, *sminrow*, *smincol*, *smaxrow*, *smaxcol*;*p* " +"参数表示要显示的面板区域的左上角而 *s* 参数定义了要显示的面板区域在屏幕上的剪切框。" + +#: ../../library/curses.rst:396 +msgid "" +"Return a new :ref:`window `, whose left-upper corner " +"is at ``(begin_y, begin_x)``, and whose height/width is *nlines*/*ncols*." +msgstr "" +"返回一个新的 :ref:`窗口 `,其左上角位于 ``(begin_y, " +"begin_x)``,并且其高度/宽度为 *nlines*/*ncols*。" + +#: ../../library/curses.rst:399 +msgid "" +"By default, the window will extend from the specified position to the lower" +" right corner of the screen." +msgstr "默认情况下,窗口将从指定位置扩展到屏幕的右下角。" + +#: ../../library/curses.rst:405 +msgid "" +"Enter newline mode. This mode translates the return key into newline on " +"input, and translates newline into return and line-feed on output. Newline " +"mode is initially on." +msgstr "" +"进入 newline 模式。 此模式会在输入时将回车转换为换行符,并在输出时将换行符转换为回车加换行。 newline 模式会在初始时启用。" + +#: ../../library/curses.rst:412 +msgid "Leave cbreak mode. Return to normal \"cooked\" mode with line buffering." +msgstr "退出 cbreak 模式。 返回具有行缓冲的正常 \"cooked\" 模式。" + +#: ../../library/curses.rst:417 +msgid "Leave echo mode. Echoing of input characters is turned off." +msgstr "退出 echo 模式。 关闭输入字符的回显。" + +#: ../../library/curses.rst:422 +msgid "" +"Leave newline mode. Disable translation of return into newline on input, " +"and disable low-level translation of newline into newline/return on output " +"(but this does not change the behavior of ``addch('\\n')``, which always " +"does the equivalent of return and line feed on the virtual screen). With " +"translation off, curses can sometimes speed up vertical motion a little; " +"also, it will be able to detect the return key on input." +msgstr "" +"退出 newline 模式。 停止在输入时将回车转换为换行,并停止在输出时从换行到换行/回车的底层转换(但这不会改变 ``addch('\\n')`` " +"的行为,此行为总是在虚拟屏幕上执行相当于回车加换行的操作)。 当停止转换时,curses 有时能使纵向移动加快一些;并且,它将能够在输入时检测回车键。" + +#: ../../library/curses.rst:432 +msgid "" +"When the :func:`!noqiflush` routine is used, normal flush of input and " +"output queues associated with the ``INTR``, ``QUIT`` and ``SUSP`` characters" +" will not be done. You may want to call :func:`!noqiflush` in a signal " +"handler if you want output to continue as though the interrupt had not " +"occurred, after the handler exits." +msgstr "" +"当使用 :func:`!noqiflush` 例程时,与 ``INTR``, ``QUIT`` 和 ``SUSP`` " +"字符相关联的输入和输出队列的正常刷新将不会被执行。 如果你希望在处理程序退出后还能继续输出,就像没有发生过中断一样,你可能会想要在信号处理程序中调用 " +":func:`!noqiflush`。" + +#: ../../library/curses.rst:440 +msgid "Leave raw mode. Return to normal \"cooked\" mode with line buffering." +msgstr "退出 raw 模式。 返回具有行缓冲的正常 \"cooked\" 模式。" + +#: ../../library/curses.rst:445 +msgid "" +"Return a tuple ``(fg, bg)`` containing the colors for the requested color " +"pair. The value of *pair_number* must be between ``0`` and ``COLOR_PAIRS - " +"1``." +msgstr "" +"返回包含对应于所请求颜色对的元组 ``(fg, bg)``。 *pair_number* 的值必须在 ``0`` 和 ``COLOR_PAIRS - " +"1`` 之间。" + +#: ../../library/curses.rst:451 +msgid "" +"Return the number of the color-pair set by the attribute value *attr*. " +":func:`color_pair` is the counterpart to this function." +msgstr "返回通过属性值 *attr* 所设置的颜色对的编号。 :func:`color_pair` 是此函数的对应操作。" + +#: ../../library/curses.rst:457 +msgid "" +"Equivalent to ``tputs(str, 1, putchar)``; emit the value of a specified " +"terminfo capability for the current terminal. Note that the output of " +":func:`putp` always goes to standard output." +msgstr "" +"等价于 ``tputs(str, 1, putchar)``;为当前终端发出指定 terminfo 功能的值。 请注意 :func:`putp` " +"的输出总是前往标准输出。" + +#: ../../library/curses.rst:464 +msgid "" +"If *flag* is ``False``, the effect is the same as calling :func:`noqiflush`." +" If *flag* is ``True``, or no argument is provided, the queues will be " +"flushed when these control characters are read." +msgstr "" +"如果 *flag* 为 ``False``,则效果与调用 :func:`noqiflush` 相同。 如果 *flag* 为 ``True`` " +"或未提供参数,则在读取这些控制字符时队列将被刷新。" + +#: ../../library/curses.rst:471 +msgid "" +"Enter raw mode. In raw mode, normal line buffering and processing of " +"interrupt, quit, suspend, and flow control keys are turned off; characters " +"are presented to curses input functions one by one." +msgstr "" +"进入 raw 模式。 在 raw 模式下,正常的行缓冲和对中断、退出、挂起和流程控制键的处理会被关闭;字符会被逐个地提交给 curses 输入函数。" + +#: ../../library/curses.rst:478 +msgid "" +"Restore the terminal to \"program\" mode, as previously saved by " +":func:`def_prog_mode`." +msgstr "将终端恢复到 \"program\" 模式,如之前由 :func:`def_prog_mode` 所保存的一样。" + +#: ../../library/curses.rst:484 +msgid "" +"Restore the terminal to \"shell\" mode, as previously saved by " +":func:`def_shell_mode`." +msgstr "将终端恢复到 \"shell\" 模式,如之前由 :func:`def_shell_mode` 所保存的一样。" + +#: ../../library/curses.rst:490 +msgid "" +"Restore the state of the terminal modes to what it was at the last call to " +":func:`savetty`." +msgstr "将终端模式恢复到最后一次调用 :func:`savetty` 时的状态。" + +#: ../../library/curses.rst:496 +msgid "" +"Backend function used by :func:`resizeterm`, performing most of the work; " +"when resizing the windows, :func:`resize_term` blank-fills the areas that " +"are extended. The calling application should fill in these areas with " +"appropriate data. The :func:`!resize_term` function attempts to resize all " +"windows. However, due to the calling convention of pads, it is not possible" +" to resize these without additional interaction with the application." +msgstr "" +"由 :func:`resizeterm` 用来执行大部分工作的后端函数;当调整窗口大小时,:func:`resize_term` 会以空白填充扩展区域。" +" 调用方应用程序应当以适当的数据填充这些区域。 :func:`!resize_term` 函数会尝试调整所有窗口的大小。 " +"但是,由于面板的调用约定,在不与应用程序进行额外交互的情况下是无法调整其大小的。" + +#: ../../library/curses.rst:506 +msgid "" +"Resize the standard and current windows to the specified dimensions, and " +"adjusts other bookkeeping data used by the curses library that record the " +"window dimensions (in particular the SIGWINCH handler)." +msgstr "" +"将标准窗口和当前窗口的大小调整为指定的尺寸,并调整由 curses 库所使用的记录窗口尺寸的其他记录数据(特别是 SIGWINCH 处理程序)。" + +#: ../../library/curses.rst:513 +msgid "" +"Save the current state of the terminal modes in a buffer, usable by " +":func:`resetty`." +msgstr "将终端模式的当前状态保存在缓冲区中,可供 :func:`resetty` 使用。" + +#: ../../library/curses.rst:518 +msgid "Retrieves the value set by :func:`set_escdelay`." +msgstr "提取通过 :func:`set_escdelay` 设置的值。" + +#: ../../library/curses.rst:524 +msgid "" +"Sets the number of milliseconds to wait after reading an escape character, " +"to distinguish between an individual escape character entered on the " +"keyboard from escape sequences sent by cursor and function keys." +msgstr "设置读取一个转义字符后要等待的毫秒数,以区分在键盘上输入的单个转义字符与通过光标和功能键发送的转义序列。" + +#: ../../library/curses.rst:532 +msgid "Retrieves the value set by :func:`set_tabsize`." +msgstr "提取通过 :func:`set_tabsize` 设置的值。" + +#: ../../library/curses.rst:538 +msgid "" +"Sets the number of columns used by the curses library when converting a tab " +"character to spaces as it adds the tab to a window." +msgstr "设置 curses 库在将制表符添加到窗口时将制表符转换为空格所使用的列数。" + +#: ../../library/curses.rst:545 +msgid "" +"Set the virtual screen cursor to *y*, *x*. If *y* and *x* are both ``-1``, " +"then :meth:`leaveok ` is set ``True``." +msgstr "" +"将虚拟屏幕光标设置到 *y*, *x*。 如果 *y* 和 *x* 均为 ``-1``,则 :meth:`leaveok " +"` 将设为 ``True``。" + +#: ../../library/curses.rst:551 +msgid "" +"Initialize the terminal. *term* is a string giving the terminal name, or " +"``None``; if omitted or ``None``, the value of the :envvar:`TERM` " +"environment variable will be used. *fd* is the file descriptor to which any" +" initialization sequences will be sent; if not supplied or ``-1``, the file " +"descriptor for ``sys.stdout`` will be used." +msgstr "" +"初始化终端。 *term* 为给出终端名称的字符串或为 ``None``;如果省略或为 ``None``,则将使用 :envvar:`TERM` " +"环境变量的值。 *fd* 是任何初始化序列将被发送到的文件描述符;如未指定或为 ``-1``,则将使用 ``sys.stdout`` 的文件描述符。" + +#: ../../library/curses.rst:560 +msgid "" +"Must be called if the programmer wants to use colors, and before any other " +"color manipulation routine is called. It is good practice to call this " +"routine right after :func:`initscr`." +msgstr "" +"如果程序员想要使用颜色,则必须在任何其他颜色操作例程被调用之前调用它。 在 :func:`initscr` 之后立即调用此例程是一个很好的做法。" + +#: ../../library/curses.rst:564 +msgid "" +":func:`start_color` initializes eight basic colors (black, red, green, " +"yellow, blue, magenta, cyan, and white), and two global variables in the " +":mod:`curses` module, :const:`COLORS` and :const:`COLOR_PAIRS`, containing " +"the maximum number of colors and color-pairs the terminal can support. It " +"also restores the colors on the terminal to the values they had when the " +"terminal was just turned on." +msgstr "" +":func:`start_color` 会初始化八种基本颜色(黑、红、绿、黄、蓝、品、青和白)以及 :mod:`curses` 模块中的两个全局变量 " +":const:`COLORS` 和 :const:`COLOR_PAIRS`,其中包含终端可支持的颜色和颜色对的最大数量。 " +"它还会将终端中的颜色恢复为终端刚启动时的值。" + +#: ../../library/curses.rst:573 +msgid "" +"Return a logical OR of all video attributes supported by the terminal. This" +" information is useful when a curses program needs complete control over the" +" appearance of the screen." +msgstr "返回终端所支持的所有视频属性逻辑 OR 的值。 此信息适用于当 curses 程序需要对屏幕外观进行完全控制的情况。" + +#: ../../library/curses.rst:580 +msgid "" +"Return the value of the environment variable :envvar:`TERM`, as a bytes " +"object, truncated to 14 characters." +msgstr "将环境变量 :envvar:`TERM` 的值截短至 14 个字节,作为字节串对象返回。" + +#: ../../library/curses.rst:586 +msgid "" +"Return the value of the Boolean capability corresponding to the terminfo " +"capability name *capname* as an integer. Return the value ``-1`` if " +"*capname* is not a Boolean capability, or ``0`` if it is canceled or absent " +"from the terminal description." +msgstr "" +"将与 terminfo 功能名称 *capname* 相对应的布尔功能值以整数形式返回。 如果 *capname* 不是一个布尔功能则返回 " +"``-1``,如果其被取消或不存在于终端描述中则返回 ``0``。" + +#: ../../library/curses.rst:594 +msgid "" +"Return the value of the numeric capability corresponding to the terminfo " +"capability name *capname* as an integer. Return the value ``-2`` if " +"*capname* is not a numeric capability, or ``-1`` if it is canceled or absent" +" from the terminal description." +msgstr "" +"将与 terminfo 功能名称 *capname* 相对应的数字功能值以整数形式返回。 如果 *capname* 不是一个数字功能则返回 " +"``-2``,如果其被取消或不存在于终端描述中则返回 ``-1``。" + +#: ../../library/curses.rst:602 +msgid "" +"Return the value of the string capability corresponding to the terminfo " +"capability name *capname* as a bytes object. Return ``None`` if *capname* " +"is not a terminfo \"string capability\", or is canceled or absent from the " +"terminal description." +msgstr "" +"将与 terminfo 功能名称 *capname* 相对应的字符串功能值以字节串对象形式返回。 如果 *capname* 不是一个 terminfo " +"\"字符串功能\" 或者如果其被取消或不存在于终端描述中则返回 ``None``。" + +#: ../../library/curses.rst:610 +msgid "" +"Instantiate the bytes object *str* with the supplied parameters, where *str*" +" should be a parameterized string obtained from the terminfo database. E.g." +" ``tparm(tigetstr(\"cup\"), 5, 3)`` could result in ``b'\\033[6;4H'``, the " +"exact result depending on terminal type." +msgstr "" +"使用提供的形参初始化字节串对象 *str*,其中 *str* 应当是从 terminfo 数据库获取的参数化字符串。 例如 " +"``tparm(tigetstr(\"cup\"), 5, 3)`` 的结果可能为 ``b'\\033[6;4H'``,实际结果将取决于终端类型。" + +#: ../../library/curses.rst:618 +msgid "" +"Specify that the file descriptor *fd* be used for typeahead checking. If " +"*fd* is ``-1``, then no typeahead checking is done." +msgstr "指定将被用于预输入检查的文件描述符 *fd*。 如果 *fd* 为 ``-1``,则不执行预输入检查。" + +#: ../../library/curses.rst:621 +msgid "" +"The curses library does \"line-breakout optimization\" by looking for " +"typeahead periodically while updating the screen. If input is found, and it" +" is coming from a tty, the current update is postponed until refresh or " +"doupdate is called again, allowing faster response to commands typed in " +"advance. This function allows specifying a different file descriptor for " +"typeahead checking." +msgstr "" +"curses 库会在更新屏幕时通过定期查找预输入来执行 \"断行优化\"。 如果找到了输入,并且输入是来自于 tty,则会将当前更新推迟至 " +"refresh 或 doupdate 再次被调用的时候,以便允许更快地响应预先输入的命令。 此函数允许为预输入检查指定其他的文件描述符。" + +#: ../../library/curses.rst:630 +msgid "" +"Return a bytes object which is a printable representation of the character " +"*ch*. Control characters are represented as a caret followed by the " +"character, for example as ``b'^C'``. Printing characters are left as they " +"are." +msgstr "" +"返回一个字节串对象作为字符 *ch* 的可打印表示形式。 控制字符会表示为一个变换符加相应的字符,例如 ``b'^C'``。 可打印字符则会保持原样。" + +#: ../../library/curses.rst:637 +msgid "Push *ch* so the next :meth:`~window.getch` will return it." +msgstr "推送 *ch* 以便让下一个 :meth:`~window.getch` 返回该字符。" + +#: ../../library/curses.rst:641 +msgid "Only one *ch* can be pushed before :meth:`!getch` is called." +msgstr "在 :meth:`!getch` 被调用之前只能推送一个 *ch*。" + +#: ../../library/curses.rst:646 +msgid "" +"Update :envvar:`LINES` and :envvar:`COLS`. Useful for detecting manual " +"screen resize." +msgstr "更新 :envvar:`LINES` 和 :envvar:`COLS`。 适用于检测屏幕大小的手动调整。" + +#: ../../library/curses.rst:653 +msgid "Push *ch* so the next :meth:`~window.get_wch` will return it." +msgstr "推送 *ch* 以便让下一个 :meth:`~window.get_wch` 返回该字符。" + +#: ../../library/curses.rst:657 +msgid "Only one *ch* can be pushed before :meth:`!get_wch` is called." +msgstr "在 :meth:`!get_wch` 被调用之前只能推送一个 *ch*。" + +#: ../../library/curses.rst:664 +msgid "" +"Push a :const:`KEY_MOUSE` event onto the input queue, associating the given " +"state data with it." +msgstr "将 :const:`KEY_MOUSE` 事件推送到输入队列,将其与给定的状态数据进行关联。" + +#: ../../library/curses.rst:670 +msgid "" +"If used, this function should be called before :func:`initscr` or newterm " +"are called. When *flag* is ``False``, the values of lines and columns " +"specified in the terminfo database will be used, even if environment " +"variables :envvar:`LINES` and :envvar:`COLUMNS` (used by default) are set, " +"or if curses is running in a window (in which case default behavior would be" +" to use the window size if :envvar:`LINES` and :envvar:`COLUMNS` are not " +"set)." +msgstr "" +"如果使用此函数,则应当在调用 :func:`initscr` 或 newterm 之前调用它。 当 *flag* 为 ``False`` 时,将会使用在" +" terminfo 数据库中指定的行和列的值,即使设置了环境变量 :envvar:`LINES` 和 :envvar:`COLUMNS` " +"(默认使用),或者如果 curses 是在窗口中运行(在此情况下如果未设置 :envvar:`LINES` 和 :envvar:`COLUMNS` " +"则默认行为将是使用窗口大小)。" + +#: ../../library/curses.rst:680 +msgid "" +"Allow use of default values for colors on terminals supporting this feature." +" Use this to support transparency in your application. The default color is" +" assigned to the color number ``-1``. After calling this function, " +"``init_pair(x, curses.COLOR_RED, -1)`` initializes, for instance, color pair" +" *x* to a red foreground color on the default background." +msgstr "" +"允许在支持此特性的终端上使用默认的颜色值。 使用此函数可在你的应用程序中支持透明效果。 默认颜色会被赋给颜色编号 ``-1``。 " +"举例来说,在调用此函数后,``init_pair(x, curses.COLOR_RED, -1)`` 会将颜色对 *x* " +"初始化为红色前景和默认颜色背景。" + +#: ../../library/curses.rst:689 +msgid "" +"Initialize curses and call another callable object, *func*, which should be " +"the rest of your curses-using application. If the application raises an " +"exception, this function will restore the terminal to a sane state before " +"re-raising the exception and generating a traceback. The callable object " +"*func* is then passed the main window 'stdscr' as its first argument, " +"followed by any other arguments passed to :func:`!wrapper`. Before calling " +"*func*, :func:`!wrapper` turns on cbreak mode, turns off echo, enables the " +"terminal keypad, and initializes colors if the terminal has color support. " +"On exit (whether normally or by exception) it restores cooked mode, turns on" +" echo, and disables the terminal keypad." +msgstr "" +"初始化 curses 并调用另一个可调用对象 *func*,该对象应当为你的使用 curses 的应用程序的其余部分。 " +"如果应用程序引发了异常,此函数将在重新引发异常并生成回溯信息之前将终端恢复到正常状态。 随后可调用对象 *func* 会被传入主窗口 'stdscr' " +"作为其第一个参数,再带上其他所有传给 :func:`!wrapper` 的参数。 在调用 *func* 之前,:func:`!wrapper` 会启用 " +"cbreak 模式,关闭回显,启用终端键盘,并在终端具有颜色支持的情况下初始化颜色。 在退出时(无论是正常退出还是异常退出)它会恢复 cooked " +"模式,打开回显,并禁用终端键盘。" + +#: ../../library/curses.rst:703 +msgid "Window Objects" +msgstr "Window 对象" + +#: ../../library/curses.rst:705 +msgid "" +"Window objects, as returned by :func:`initscr` and :func:`newwin` above, " +"have the following methods and attributes:" +msgstr "Window 对象会由上面的 :func:`initscr` 和 :func:`newwin` 返回,它具有以下方法和属性:" + +#: ../../library/curses.rst:712 +msgid "" +"Paint character *ch* at ``(y, x)`` with attributes *attr*, overwriting any " +"character previously painted at that location. By default, the character " +"position and attributes are the current settings for the window object." +msgstr "" +"将带有属性 *attr* 的字符 *ch* 绘制到 ``(y, x)``,覆盖之前在该位置上绘制的任何字符。 " +"默认情况下,字符的位置和属性均为窗口对象的当前设置。" + +#: ../../library/curses.rst:718 +msgid "" +"Writing outside the window, subwindow, or pad raises a :exc:`curses.error`. " +"Attempting to write to the lower right corner of a window, subwindow, or pad" +" will cause an exception to be raised after the character is printed." +msgstr "" +"在窗口、子窗口或面板之外写入会引发 :exc:`curses.error`。 尝试在窗口、子窗口或面板的右下角写入将在字符被打印之后导致异常被引发。" + +#: ../../library/curses.rst:726 +msgid "" +"Paint at most *n* characters of the character string *str* at ``(y, x)`` " +"with attributes *attr*, overwriting anything previously on the display." +msgstr "将带有属性 *attr* 的字符串 *str* 中的至多 *n* 个字符绘制到 ``(y, x)``,覆盖之前在屏幕上的任何内容。" + +#: ../../library/curses.rst:734 +msgid "" +"Paint the character string *str* at ``(y, x)`` with attributes *attr*, " +"overwriting anything previously on the display." +msgstr "将带有属性 *attr* 的字符串 *str* 绘制到 ``(y, x)``,覆盖之前在屏幕上的任何内容。" + +#: ../../library/curses.rst:739 +msgid "" +"Writing outside the window, subwindow, or pad raises :exc:`curses.error`. " +"Attempting to write to the lower right corner of a window, subwindow, or pad" +" will cause an exception to be raised after the string is printed." +msgstr "" +"在窗口、子窗口或面板之外写入会引发 :exc:`curses.error`。 尝试在窗口、子窗口或面板的右下角写入将在字符串被打印之后导致异常被引发。" + +#: ../../library/curses.rst:743 +msgid "" +"A `bug in ncurses `_, the backend for " +"this Python module, can cause SegFaults when resizing windows. This is fixed" +" in ncurses-6.1-20190511. If you are stuck with an earlier ncurses, you can" +" avoid triggering this if you do not call :func:`addstr` with a *str* that " +"has embedded newlines. Instead, call :func:`addstr` separately for each " +"line." +msgstr "" +"此 Python 模块的后端 `ncurses 中的一个缺陷 `_ " +"会在调整窗口大小时导致段错误。 此缺陷已在 ncurses-6.1-20190511 中被修复。 如果你必须使用较早版本的 " +"ncurses,则你只要在调用 :func:`addstr` 时不传入嵌入了换行符的 *str* 即可避免触发此错误。 请为每一行分别调用 " +":func:`addstr`。" + +#: ../../library/curses.rst:753 +msgid "" +"Remove attribute *attr* from the \"background\" set applied to all writes to" +" the current window." +msgstr "从应用于写入到当前窗口的 \"background\" 集中移除属性 *attr*。" + +#: ../../library/curses.rst:759 +msgid "" +"Add attribute *attr* from the \"background\" set applied to all writes to " +"the current window." +msgstr "向应用于写入到当前窗口的 \"background\" 集中添加属性 *attr*。" + +#: ../../library/curses.rst:765 +msgid "" +"Set the \"background\" set of attributes to *attr*. This set is initially " +"``0`` (no attributes)." +msgstr "将 \"background\" 属性集设为 *attr*。 该集合初始时为 ``0`` (无属性)。" + +#: ../../library/curses.rst:771 +msgid "" +"Set the background property of the window to the character *ch*, with " +"attributes *attr*. The change is then applied to every character position " +"in that window:" +msgstr "将窗口 background 特征属性设为带有属性 *attr* 的字符 *ch*。 随后此修改将应用于放置到该窗口中的每个字符。" + +#: ../../library/curses.rst:775 +msgid "" +"The attribute of every character in the window is changed to the new " +"background attribute." +msgstr "窗口中每个字符的属性会被修改为新的 background 属性。" + +#: ../../library/curses.rst:778 +msgid "" +"Wherever the former background character appears, it is changed to the new" +" background character." +msgstr "不论之前的 background 字符出现在哪里,它都会被修改为新的 background 字符。" + +#: ../../library/curses.rst:784 +msgid "" +"Set the window's background. A window's background consists of a character " +"and any combination of attributes. The attribute part of the background is " +"combined (OR'ed) with all non-blank characters that are written into the " +"window. Both the character and attribute parts of the background are " +"combined with the blank characters. The background becomes a property of " +"the character and moves with the character through any scrolling and " +"insert/delete line/character operations." +msgstr "" +"设置窗口的背景。 窗口的背景由字符和属性的任意组合构成。 背景的属性部分会与写入窗口的所有非空白字符合并(即 OR 运算)。 " +"背景和字符和属性部分均会与空白字符合并。 背景将成为字符的特征属性并在任何滚动与插入/删除行/字符操作中与字符一起移动。" + +#: ../../library/curses.rst:794 +msgid "" +"Draw a border around the edges of the window. Each parameter specifies the " +"character to use for a specific part of the border; see the table below for " +"more details." +msgstr "在窗口边缘绘制边框。每个参数指定用于边界特定部分的字符;请参阅下表了解更多详情。" + +#: ../../library/curses.rst:800 +msgid "" +"A ``0`` value for any parameter will cause the default character to be used " +"for that parameter. Keyword parameters can *not* be used. The defaults are" +" listed in this table:" +msgstr "任何形参的值为 ``0`` 都将导致该形参使用默认字符。 关键字形参 *不可* 被使用。 默认字符在下表中列出:" + +#: ../../library/curses.rst:805 +msgid "Parameter" +msgstr "参数" + +#: ../../library/curses.rst:805 +msgid "Description" +msgstr "描述" + +#: ../../library/curses.rst:805 +msgid "Default value" +msgstr "默认值" + +#: ../../library/curses.rst:807 +msgid "*ls*" +msgstr "*ls*" + +#: ../../library/curses.rst:807 +msgid "Left side" +msgstr "左侧" + +#: ../../library/curses.rst:807 ../../library/curses.rst:809 +msgid ":const:`ACS_VLINE`" +msgstr ":const:`ACS_VLINE`" + +#: ../../library/curses.rst:809 +msgid "*rs*" +msgstr "*rs*" + +#: ../../library/curses.rst:809 +msgid "Right side" +msgstr "右侧" + +#: ../../library/curses.rst:811 +msgid "*ts*" +msgstr "*ts*" + +#: ../../library/curses.rst:811 +msgid "Top" +msgstr "顶部" + +#: ../../library/curses.rst:811 ../../library/curses.rst:813 +msgid ":const:`ACS_HLINE`" +msgstr ":const:`ACS_HLINE`" + +#: ../../library/curses.rst:813 +msgid "*bs*" +msgstr "*bs*" + +#: ../../library/curses.rst:813 +msgid "Bottom" +msgstr "底部" + +#: ../../library/curses.rst:815 +msgid "*tl*" +msgstr "*tl*" + +#: ../../library/curses.rst:815 +msgid "Upper-left corner" +msgstr "左上角" + +#: ../../library/curses.rst:815 +msgid ":const:`ACS_ULCORNER`" +msgstr ":const:`ACS_ULCORNER`" + +#: ../../library/curses.rst:817 +msgid "*tr*" +msgstr "*tr*" + +#: ../../library/curses.rst:817 +msgid "Upper-right corner" +msgstr "右上角" + +#: ../../library/curses.rst:817 +msgid ":const:`ACS_URCORNER`" +msgstr ":const:`ACS_URCORNER`" + +#: ../../library/curses.rst:819 +msgid "*bl*" +msgstr "*bl*" + +#: ../../library/curses.rst:819 +msgid "Bottom-left corner" +msgstr "左下角" + +#: ../../library/curses.rst:819 +msgid ":const:`ACS_LLCORNER`" +msgstr ":const:`ACS_LLCORNER`" + +#: ../../library/curses.rst:821 +msgid "*br*" +msgstr "*br*" + +#: ../../library/curses.rst:821 +msgid "Bottom-right corner" +msgstr "右下角" + +#: ../../library/curses.rst:821 +msgid ":const:`ACS_LRCORNER`" +msgstr ":const:`ACS_LRCORNER`" + +#: ../../library/curses.rst:827 +msgid "" +"Similar to :meth:`border`, but both *ls* and *rs* are *vertch* and both *ts*" +" and *bs* are *horch*. The default corner characters are always used by " +"this function." +msgstr "" +"类似于 :meth:`border`,但 *ls* 和 *rs* 均为 *vertch* 而 *ts* 和 *bs* 均为 *horch*。 " +"此函数总是会使用默认的转角字符。" + +#: ../../library/curses.rst:836 +msgid "" +"Set the attributes of *num* characters at the current cursor position, or at" +" position ``(y, x)`` if supplied. If *num* is not given or is ``-1``, the " +"attribute will be set on all the characters to the end of the line. This " +"function moves cursor to position ``(y, x)`` if supplied. The changed line " +"will be touched using the :meth:`touchline` method so that the contents will" +" be redisplayed by the next window refresh." +msgstr "" +"在当前光标位置或是在所提供的位置 ``(y, x)`` 设置 *num* 个字符的属性。 如果 *num* 未给出或为 " +"``-1``,则将属性设置到所有字符上直至行尾。 如果提供了位置 ``(y, x)`` 则此函数会将光标移至该位置。 修改过的行将使用 " +":meth:`touchline` 方法处理以便下次窗口刷新时内容会重新显示。" + +#: ../../library/curses.rst:846 +msgid "" +"Like :meth:`erase`, but also cause the whole window to be repainted upon " +"next call to :meth:`refresh`." +msgstr "类似于 :meth:`erase`,但还会导致在下次调用 :meth:`refresh` 时整个窗口被重新绘制。" + +#: ../../library/curses.rst:852 +msgid "" +"If *flag* is ``True``, the next call to :meth:`refresh` will clear the " +"window completely." +msgstr "如果 *flag* 为 ``True``,则在下次调用 :meth:`refresh` 时将完全清除窗口。" + +#: ../../library/curses.rst:858 +msgid "" +"Erase from cursor to the end of the window: all lines below the cursor are " +"deleted, and then the equivalent of :meth:`clrtoeol` is performed." +msgstr "从光标位置开始擦除直至窗口末端:光标以下的所有行都会被删除,然后会执行 :meth:`clrtoeol` 的等效操作。" + +#: ../../library/curses.rst:864 +msgid "Erase from cursor to the end of the line." +msgstr "从光标位置开始擦除直至行尾。" + +#: ../../library/curses.rst:869 +msgid "" +"Update the current cursor position of all the ancestors of the window to " +"reflect the current cursor position of the window." +msgstr "更新窗口所有上级窗口的当前光标位置以反映窗口的当前光标位置。" + +#: ../../library/curses.rst:875 +msgid "Delete any character at ``(y, x)``." +msgstr "删除位于 ``(y, x)`` 的任何字符。" + +#: ../../library/curses.rst:880 +msgid "" +"Delete the line under the cursor. All following lines are moved up by one " +"line." +msgstr "删除在光标之下的行。 所有后续的行都会上移一行。" + +#: ../../library/curses.rst:886 +msgid "" +"An abbreviation for \"derive window\", :meth:`derwin` is the same as calling" +" :meth:`subwin`, except that *begin_y* and *begin_x* are relative to the " +"origin of the window, rather than relative to the entire screen. Return a " +"window object for the derived window." +msgstr "" +"\"derive window\" 的缩写,:meth:`derwin` 与调用 :meth:`subwin` 等效,不同之处在于 *begin_y* " +"和 *begin_x* 是想对于窗口的初始位置,而不是相对于整个屏幕。 返回代表所派生窗口的窗口对象。" + +#: ../../library/curses.rst:894 +msgid "" +"Add character *ch* with attribute *attr*, and immediately call " +":meth:`refresh` on the window." +msgstr "使用属性 *attr* 添加字符 *ch*,并立即在窗口上调用 :meth:`refresh`。" + +#: ../../library/curses.rst:900 +msgid "" +"Test whether the given pair of screen-relative character-cell coordinates " +"are enclosed by the given window, returning ``True`` or ``False``. It is " +"useful for determining what subset of the screen windows enclose the " +"location of a mouse event." +msgstr "" +"检测给定的相对屏幕的字符-单元格坐标是否被给定的窗口所包围,返回 ``True`` 或 ``False``。 " +"它适用于确定是哪个屏幕窗口子集包围着某个鼠标事件的位置。" + +#: ../../library/curses.rst:908 +msgid "" +"Encoding used to encode method arguments (Unicode strings and characters). " +"The encoding attribute is inherited from the parent window when a subwindow " +"is created, for example with :meth:`window.subwin`. By default, the locale " +"encoding is used (see :func:`locale.getpreferredencoding`)." +msgstr "" +"用于编码方法参数(Unicode 字符串和字符)的编码格式。 encoding 属性是在创建子窗口时从父窗口继承的,例如通过 " +":meth:`window.subwin`。 默认情况下,会使用当前区域的编码格式 (参见 " +":func:`locale.getpreferredencoding`)。" + +#: ../../library/curses.rst:918 +msgid "Clear the window." +msgstr "清空窗口。" + +#: ../../library/curses.rst:923 +msgid "Return a tuple ``(y, x)`` of co-ordinates of upper-left corner." +msgstr "返回左上角坐标的元组 ``(y, x)``。" + +#: ../../library/curses.rst:928 +msgid "Return the given window's current background character/attribute pair." +msgstr "返回给定窗口的当前背景字符/属性对。" + +#: ../../library/curses.rst:933 +msgid "" +"Get a character. Note that the integer returned does *not* have to be in " +"ASCII range: function keys, keypad keys and so on are represented by numbers" +" higher than 255. In no-delay mode, return ``-1`` if there is no input, " +"otherwise wait until a key is pressed." +msgstr "" +"获取一个字符。 请注意所返回的整数 *不一定* 要在 ASCII 范围以内:功能键、小键盘键等等是由大于 255 的数字表示的。 " +"在无延迟模式下,如果没有输入则返回 ``-1``,在其他情况下都会等待直至有键被按下。" + +#: ../../library/curses.rst:941 +msgid "" +"Get a wide character. Return a character for most keys, or an integer for " +"function keys, keypad keys, and other special keys. In no-delay mode, raise " +"an exception if there is no input." +msgstr "" +"获取一个宽字符。 对于大多数键都是返回一个字符,对于功能键、小键盘键和其他特殊键则是返回一个整数。 在无延迟模式下,如果没有输入则引发一个异常。" + +#: ../../library/curses.rst:950 +msgid "" +"Get a character, returning a string instead of an integer, as :meth:`getch` " +"does. Function keys, keypad keys and other special keys return a multibyte " +"string containing the key name. In no-delay mode, raise an exception if " +"there is no input." +msgstr "" +"获取一个字符,返回一个字符串而不是像 :meth:`getch` 那样返回一个整数。 功能键、小键盘键和其他特殊键则是返回一个包含键名的多字节字符串。 " +"在无延迟模式下,如果没有输入则引发一个异常。" + +#: ../../library/curses.rst:958 +msgid "Return a tuple ``(y, x)`` of the height and width of the window." +msgstr "返回窗口高度和宽度的元组 ``(y, x)``。" + +#: ../../library/curses.rst:963 +msgid "" +"Return the beginning coordinates of this window relative to its parent " +"window as a tuple ``(y, x)``. Return ``(-1, -1)`` if this window has no " +"parent." +msgstr "将此窗口相对于父窗口的起始坐标作为元组 ``(y, x)`` 返回。 如果此窗口没有父窗口则返回 ``(-1, -1)``。" + +#: ../../library/curses.rst:973 +msgid "" +"Read a bytes object from the user, with primitive line editing capacity." +msgstr "从用户读取一个字节串对象,附带基本的行编辑功能。" + +#: ../../library/curses.rst:978 +msgid "" +"Return a tuple ``(y, x)`` of current cursor position relative to the " +"window's upper-left corner." +msgstr "返回当前光标相对于窗口左上角的位置的元组 ``(y, x)``。" + +#: ../../library/curses.rst:985 +msgid "" +"Display a horizontal line starting at ``(y, x)`` with length *n* consisting " +"of the character *ch*." +msgstr "显示一条起始于 ``(y, x)`` 长度为 *n* 个字符 *ch* 的水平线。" + +#: ../../library/curses.rst:991 +msgid "" +"If *flag* is ``False``, curses no longer considers using the hardware " +"insert/delete character feature of the terminal; if *flag* is ``True``, use " +"of character insertion and deletion is enabled. When curses is first " +"initialized, use of character insert/delete is enabled by default." +msgstr "" +"如果 *flag* 为 ``False``,curses 将不再考虑使用终端的硬件插入/删除字符功能;如果 *flag* 为 " +"``True``,则会启用字符插入和删除。 当 curses 首次初始化时,默认会启用字符插入/删除。" + +#: ../../library/curses.rst:999 +msgid "" +"If *flag* is ``True``, :mod:`curses` will try and use hardware line editing " +"facilities. Otherwise, line insertion/deletion are disabled." +msgstr "如果 *flag* 为 ``True``,:mod:`curses` 将尝试使用硬件行编辑功能。 否则,行插入/删除会被禁用。" + +#: ../../library/curses.rst:1005 +msgid "" +"If *flag* is ``True``, any change in the window image automatically causes " +"the window to be refreshed; you no longer have to call :meth:`refresh` " +"yourself. However, it may degrade performance considerably, due to repeated " +"calls to wrefresh. This option is disabled by default." +msgstr "" +"如果 *flag* 为 ``True``,窗口图像中的任何改变都会自动导致窗口被刷新;你不必再自己调用 :meth:`refresh`。 " +"但是,这可能会由于重复调用 wrefresh 而显著降低性能。 此选项默认被禁用。" + +#: ../../library/curses.rst:1013 +msgid "" +"Return the character at the given position in the window. The bottom 8 bits " +"are the character proper, and upper bits are the attributes." +msgstr "返回窗口中给定位置上的字符。 下面的 8 个比特位是字符本身,上面的比特位则为属性。" + +#: ../../library/curses.rst:1020 +msgid "" +"Paint character *ch* at ``(y, x)`` with attributes *attr*, moving the line " +"from position *x* right by one character." +msgstr "将带有属性 *attr* 的字符 *ch* 绘制到 ``(y, x)``,将该行从位置 *x* 开始右移一个字符。" + +#: ../../library/curses.rst:1026 +msgid "" +"Insert *nlines* lines into the specified window above the current line. The" +" *nlines* bottom lines are lost. For negative *nlines*, delete *nlines* " +"lines starting with the one under the cursor, and move the remaining lines " +"up. The bottom *nlines* lines are cleared. The current cursor position " +"remains the same." +msgstr "" +"在指定窗口的当前行上方插入 *nlines* 行。 下面的 *nlines* 行将丢失。 对于 *nlines* 为负值的情况,则从光标下方的行开始删除" +" *nlines* 行,并将其余的行向上移动。 下面的 *nlines* 行会被清空。 当前光标位置将保持不变。" + +#: ../../library/curses.rst:1035 +msgid "" +"Insert a blank line under the cursor. All following lines are moved down by " +"one line." +msgstr "在光标下方插入一个空行。 所有后续的行都会下移一行。" + +#: ../../library/curses.rst:1042 +msgid "" +"Insert a character string (as many characters as will fit on the line) " +"before the character under the cursor, up to *n* characters. If *n* is " +"zero or negative, the entire string is inserted. All characters to the right" +" of the cursor are shifted right, with the rightmost characters on the line " +"being lost. The cursor position does not change (after moving to *y*, *x*, " +"if specified)." +msgstr "" +"在光标下方的字符之前插入一个至多为 *n* 个字符的字符串(字符数量将与该行相匹配)。 如果 *n* 为零或负数,则插入整个字符串。 " +"光标右边的所有字符将被右移,该行右端的字符将丢失。 光标位置将保持不变(在移到可能指定的 *y*, *x* 之后)。" + +#: ../../library/curses.rst:1052 +msgid "" +"Insert a character string (as many characters as will fit on the line) " +"before the character under the cursor. All characters to the right of the " +"cursor are shifted right, with the rightmost characters on the line being " +"lost. The cursor position does not change (after moving to *y*, *x*, if " +"specified)." +msgstr "" +"在光标下方的字符之前插入一个字符串(字符数量将与该行相匹配)。 光标右边的所有字符将被右移,该行右端的字符将丢失。 光标位置将保持不变(在移到可能指定的" +" *y*, *x* 之后)。" + +#: ../../library/curses.rst:1061 +msgid "" +"Return a bytes object of characters, extracted from the window starting at " +"the current cursor position, or at *y*, *x* if specified. Attributes are " +"stripped from the characters. If *n* is specified, :meth:`instr` returns a " +"string at most *n* characters long (exclusive of the trailing NUL)." +msgstr "" +"返回从窗口的当前光标位置,或者指定的 *y*, *x* 开始提取的字符所对应的字节串对象。 属性会从字符中去除。 如果指定了 " +"*n*,:meth:`instr` 将返回长度至多为 *n* 个字符的字符串(不包括末尾的 NUL)。" + +#: ../../library/curses.rst:1069 +msgid "" +"Return ``True`` if the specified line was modified since the last call to " +":meth:`refresh`; otherwise return ``False``. Raise a :exc:`curses.error` " +"exception if *line* is not valid for the given window." +msgstr "" +"如果指定的行自上次调用 :meth:`refresh` 后发生了改变则返回 ``True``;否则返回 ``False``。 如果 *line* " +"对于给定的窗口不可用则会引发 :exc:`curses.error` 异常。" + +#: ../../library/curses.rst:1076 +msgid "" +"Return ``True`` if the specified window was modified since the last call to " +":meth:`refresh`; otherwise return ``False``." +msgstr "如果指定的窗口自上次调用 :meth:`refresh` 后发生了改变则返回 ``True``;否则返回 ``False``。" + +#: ../../library/curses.rst:1082 +msgid "" +"If *flag* is ``True``, escape sequences generated by some keys (keypad, " +"function keys) will be interpreted by :mod:`curses`. If *flag* is ``False``," +" escape sequences will be left as is in the input stream." +msgstr "" +"如果 *flag* 为 ``True``,则某些键(小键盘键、功能键等)生成的转义序列将由 :mod:`curses` 来解析。 如果 *flag* 为" +" ``False``,转义序列将保持在输入流中的原样。" + +#: ../../library/curses.rst:1089 +msgid "" +"If *flag* is ``True``, cursor is left where it is on update, instead of " +"being at \"cursor position.\" This reduces cursor movement where possible. " +"If possible the cursor will be made invisible." +msgstr "" +"如果 *flag* 为 ``True``,则在更新时光标将停留在原地,而不是在“光标位置”。 这将可以减少光标的移动。 在可能的情况下光标将变为不可见。" + +#: ../../library/curses.rst:1093 +msgid "" +"If *flag* is ``False``, cursor will always be at \"cursor position\" after " +"an update." +msgstr "如果 *flag* 为 ``False``,光标在更新后将总是位于“光标位置”。" + +#: ../../library/curses.rst:1098 +msgid "Move cursor to ``(new_y, new_x)``." +msgstr "将光标移至 ``(new_y, new_x)``。" + +#: ../../library/curses.rst:1103 +msgid "" +"Move the window inside its parent window. The screen-relative parameters of" +" the window are not changed. This routine is used to display different " +"parts of the parent window at the same physical position on the screen." +msgstr "让窗口在其父窗口内移动。 窗口相对于屏幕的参数不会被更改。 此例程用于在屏幕的相同物理位置显示父窗口的不同部分。" + +#: ../../library/curses.rst:1110 +msgid "Move the window so its upper-left corner is at ``(new_y, new_x)``." +msgstr "移动窗口以使其左上角位于 ``(new_y, new_x)``。" + +#: ../../library/curses.rst:1115 +msgid "If *flag* is ``True``, :meth:`getch` will be non-blocking." +msgstr "如果 *flag* 为 ``True``,则 :meth:`getch` 将为非阻塞的。" + +#: ../../library/curses.rst:1120 +msgid "If *flag* is ``True``, escape sequences will not be timed out." +msgstr "如果 *flag* 为 ``True``,则转义序列将不会发生超时。" + +#: ../../library/curses.rst:1122 +msgid "" +"If *flag* is ``False``, after a few milliseconds, an escape sequence will " +"not be interpreted, and will be left in the input stream as is." +msgstr "如果 *flag* 为 ``False``,则在几毫秒之后,转义序列将不会被解析,并将保持在输入流中的原样。" + +#: ../../library/curses.rst:1128 +msgid "" +"Mark for refresh but wait. This function updates the data structure " +"representing the desired state of the window, but does not force an update " +"of the physical screen. To accomplish that, call :func:`doupdate`." +msgstr "" +"标记为刷新但保持等待。 此函数会更新代表预期窗口状态的数据结构,但并不强制更新物理屏幕。 要完成后者,请调用 :func:`doupdate`。" + +#: ../../library/curses.rst:1135 +msgid "" +"Overlay the window on top of *destwin*. The windows need not be the same " +"size, only the overlapping region is copied. This copy is non-destructive, " +"which means that the current background character does not overwrite the old" +" contents of *destwin*." +msgstr "" +"将窗口覆盖在 *destwin* 上方。 窗口的大小不必相同,只有重叠的区域会被复制。 此复制是非破坏性的,这意味着当前背景字符不会覆盖掉 " +"*destwin* 的旧内容。" + +#: ../../library/curses.rst:1140 +msgid "" +"To get fine-grained control over the copied region, the second form of " +":meth:`overlay` can be used. *sminrow* and *smincol* are the upper-left " +"coordinates of the source window, and the other variables mark a rectangle " +"in the destination window." +msgstr "" +"为了获得对被复制区域的细粒度控制,可以使用 :meth:`overlay` 的第二种形式。 *sminrow* 和 *smincol* " +"是源窗口的左上角坐标,而其他变量则在目标窗口中标记出一个矩形。" + +#: ../../library/curses.rst:1148 +msgid "" +"Overwrite the window on top of *destwin*. The windows need not be the same " +"size, in which case only the overlapping region is copied. This copy is " +"destructive, which means that the current background character overwrites " +"the old contents of *destwin*." +msgstr "" +"将窗口覆盖在 *destwin* 上方。 窗口的大小不必相同,此时只有重叠的区域会被复制。 此复制是破坏性的,这意味着当前背景字符会覆盖掉 " +"*destwin* 的旧内容。" + +#: ../../library/curses.rst:1153 +msgid "" +"To get fine-grained control over the copied region, the second form of " +":meth:`overwrite` can be used. *sminrow* and *smincol* are the upper-left " +"coordinates of the source window, the other variables mark a rectangle in " +"the destination window." +msgstr "" +"为了获得对被复制区域的细粒度控制,可以使用 :meth:`overwrite` 的第二种形式。 *sminrow* 和 *smincol* " +"是源窗口的左上角坐标,而其他变量则在目标窗口中标记出一个矩形。" + +#: ../../library/curses.rst:1161 +msgid "" +"Write all data associated with the window into the provided file object. " +"This information can be later retrieved using the :func:`getwin` function." +msgstr "将关联到窗口的所有数据写入到所提供的文件对象。 此信息可在以后使用 :func:`getwin` 函数来提取。" + +#: ../../library/curses.rst:1167 +msgid "" +"Indicate that the *num* screen lines, starting at line *beg*, are corrupted " +"and should be completely redrawn on the next :meth:`refresh` call." +msgstr "指明从 *beg* 行开始的 *num* 个屏幕行已被破坏并且应当在下次 :meth:`refresh` 调用时完全重绘。" + +#: ../../library/curses.rst:1173 +msgid "" +"Touch the entire window, causing it to be completely redrawn on the next " +":meth:`refresh` call." +msgstr "触碰整个窗口,以使其在下次 :meth:`refresh` 调用时完全重绘。" + +#: ../../library/curses.rst:1179 +msgid "" +"Update the display immediately (sync actual screen with previous " +"drawing/deleting methods)." +msgstr "立即更新显示(将实际屏幕与之前的绘制/删除方法进行同步)。" + +#: ../../library/curses.rst:1182 +msgid "" +"The 6 optional arguments can only be specified when the window is a pad " +"created with :func:`newpad`. The additional parameters are needed to " +"indicate what part of the pad and screen are involved. *pminrow* and " +"*pmincol* specify the upper left-hand corner of the rectangle to be " +"displayed in the pad. *sminrow*, *smincol*, *smaxrow*, and *smaxcol* " +"specify the edges of the rectangle to be displayed on the screen. The lower" +" right-hand corner of the rectangle to be displayed in the pad is calculated" +" from the screen coordinates, since the rectangles must be the same size. " +"Both rectangles must be entirely contained within their respective " +"structures. Negative values of *pminrow*, *pmincol*, *sminrow*, or " +"*smincol* are treated as if they were zero." +msgstr "" +"6 个可选参数仅在窗口为使用 :func:`newpad` 创建的面板时可被指定。 需要额外的形参来指定所涉及到的是面板和屏幕的哪一部分。 " +"*pminrow* 和 *pmincol* 指定要在面板中显示的矩形的左上角。 *sminrow*, *smincol*, *smaxrow* 和 " +"*smaxcol* 指定要在屏幕中显示的矩形的边。 要在面板中显示的矩形的右下角是根据屏幕坐标计算出来的,由于矩形的大小必须相同。 " +"两个矩形都必须完全包含在其各自的结构之内。 负的 *pminrow*, *pmincol*, *sminrow* 或 *smincol* " +"值会被视为将它们设为零值。" + +#: ../../library/curses.rst:1196 +msgid "" +"Reallocate storage for a curses window to adjust its dimensions to the " +"specified values. If either dimension is larger than the current values, " +"the window's data is filled with blanks that have the current background " +"rendition (as set by :meth:`bkgdset`) merged into them." +msgstr "" +"为 curses 窗口重新分配存储空间以将其尺寸调整为指定的值。 如果任一维度的尺寸大于当前值,则窗口的数据将以具有合并了当前背景渲染(由 " +":meth:`bkgdset` 设置)的空白来填充。" + +#: ../../library/curses.rst:1204 +msgid "Scroll the screen or scrolling region upward by *lines* lines." +msgstr "将屏幕或滚动区域向上滚动 *lines* 行。" + +#: ../../library/curses.rst:1209 +msgid "" +"Control what happens when the cursor of a window is moved off the edge of " +"the window or scrolling region, either as a result of a newline action on " +"the bottom line, or typing the last character of the last line. If *flag* " +"is ``False``, the cursor is left on the bottom line. If *flag* is ``True``," +" the window is scrolled up one line. Note that in order to get the physical" +" scrolling effect on the terminal, it is also necessary to call " +":meth:`idlok`." +msgstr "" +"控制当一个窗口的光标移出窗口或滚动区域边缘时会发生什么,这可能是在底端行执行换行操作,或者在最后一行输入最后一个字符导致的结果。 如果 *flag* 为" +" ``False``,光标会留在底端行。 如果 *flag* 为 ``True``,窗口会向上滚动一行。 " +"请注意为了在终端上获得实际的滚动效果,还需要调用 :meth:`idlok`。" + +#: ../../library/curses.rst:1219 +msgid "" +"Set the scrolling region from line *top* to line *bottom*. All scrolling " +"actions will take place in this region." +msgstr "设置从 *top* 行至 *bottom* 行的滚动区域。 所有滚动操作将在此区域中进行。" + +#: ../../library/curses.rst:1225 +msgid "" +"Turn off the standout attribute. On some terminals this has the side effect" +" of turning off all attributes." +msgstr "关闭 standout 属性。 在某些终端上此操作会有关闭所有属性的副作用。" + +#: ../../library/curses.rst:1231 +msgid "Turn on attribute *A_STANDOUT*." +msgstr "启用属性 *A_STANDOUT*。" + +#: ../../library/curses.rst:1237 ../../library/curses.rst:1244 +msgid "" +"Return a sub-window, whose upper-left corner is at ``(begin_y, begin_x)``, " +"and whose width/height is *ncols*/*nlines*." +msgstr "返回一个子窗口,其左上角位于 ``(begin_y, begin_x)``,并且其宽度/高度为 *ncols*/*nlines*。" + +#: ../../library/curses.rst:1247 +msgid "" +"By default, the sub-window will extend from the specified position to the " +"lower right corner of the window." +msgstr "默认情况下,子窗口将从指定位置扩展到窗口的右下角。" + +#: ../../library/curses.rst:1253 +msgid "" +"Touch each location in the window that has been touched in any of its " +"ancestor windows. This routine is called by :meth:`refresh`, so it should " +"almost never be necessary to call it manually." +msgstr "触碰已在上级窗口上被触碰的每个位置。 此例程由 :meth:`refresh` 调用,因此几乎从不需要手动调用。" + +#: ../../library/curses.rst:1260 +msgid "" +"If *flag* is ``True``, then :meth:`syncup` is called automatically whenever " +"there is a change in the window." +msgstr "如果 *flag* 为 ``True``,则 :meth:`syncup` 会在窗口发生改变的任何时候自动被调用。" + +#: ../../library/curses.rst:1266 +msgid "" +"Touch all locations in ancestors of the window that have been changed in " +"the window." +msgstr "触碰已在窗口中被改变的此窗口的各个上级窗口中的所有位置。" + +#: ../../library/curses.rst:1272 +msgid "" +"Set blocking or non-blocking read behavior for the window. If *delay* is " +"negative, blocking read is used (which will wait indefinitely for input). " +"If *delay* is zero, then non-blocking read is used, and :meth:`getch` will " +"return ``-1`` if no input is waiting. If *delay* is positive, then " +":meth:`getch` will block for *delay* milliseconds, and return ``-1`` if " +"there is still no input at the end of that time." +msgstr "" +"为窗口设置阻塞或非阻塞读取行为。 如果 *delay* 为负值,则会使用阻塞读取(这将无限期地等待输入)。 如果 *delay* " +"为零,则会使用非阻塞读取,并且当没有输入在等待时 :meth:`getch` 将返回 ``-1``。 如果 *delay* 为正值,则 " +":meth:`getch` 将阻塞 *delay* 毫秒,并且当此延时结束时仍无输入将返回 ``-1``。" + +#: ../../library/curses.rst:1282 +msgid "" +"Pretend *count* lines have been changed, starting with line *start*. If " +"*changed* is supplied, it specifies whether the affected lines are marked as" +" having been changed (*changed*\\ ``=True``) or unchanged (*changed*\\ " +"``=False``)." +msgstr "" +"假定从行 *start* 开始的 *count* 行已被更改。 如果提供了 *changed*,它将指明是将受影响的行标记为已更改 " +"(*changed*\\ ``=True``) 还是未更改 (*changed*\\ ``=False``)。" + +#: ../../library/curses.rst:1289 +msgid "" +"Pretend the whole window has been changed, for purposes of drawing " +"optimizations." +msgstr "假定整个窗口已被更改,其目的是用于绘制优化。" + +#: ../../library/curses.rst:1295 +msgid "" +"Mark all lines in the window as unchanged since the last call to " +":meth:`refresh`." +msgstr "将自上次调用 :meth:`refresh` 以来窗口中的所有行标记为未改变。" + +#: ../../library/curses.rst:1302 +msgid "" +"Display a vertical line starting at ``(y, x)`` with length *n* consisting of" +" the character *ch*." +msgstr "显示一条起始于 ``(y, x)`` 长度为 *n* 个字符 *ch* 的垂直线。" + +#: ../../library/curses.rst:1307 +msgid "Constants" +msgstr "常量" + +#: ../../library/curses.rst:1309 +msgid "The :mod:`curses` module defines the following data members:" +msgstr ":mod:`curses` 模块定义了以下数据成员:" + +#: ../../library/curses.rst:1314 +msgid "" +"Some curses routines that return an integer, such as " +":meth:`~window.getch`, return :const:`ERR` upon failure." +msgstr "一些返回整数的 curses 例程,例如 :meth:`~window.getch`,在失败时将返回 :const:`ERR`。" + +#: ../../library/curses.rst:1320 +msgid "" +"Some curses routines that return an integer, such as :func:`napms`, " +"return :const:`OK` upon success." +msgstr "一些返回整数的 curses 例程,例如 :func:`napms`,在成功时将返回 :const:`OK`。" + +#: ../../library/curses.rst:1326 +msgid "" +"A bytes object representing the current version of the module. Also " +"available as :const:`__version__`." +msgstr "一个代表当前模块版本的字节串对象。 也作 :const:`__version__`。" + +#: ../../library/curses.rst:1332 +msgid "" +"A named tuple containing the three components of the ncurses library " +"version: *major*, *minor*, and *patch*. All values are integers. The " +"components can also be accessed by name, so ``curses.ncurses_version[0]`` " +"is equivalent to ``curses.ncurses_version.major`` and so on." +msgstr "" +"一个具名元组,它包含构成 ncurses 库版本号的三个数字: *major*, *minor* 和 *patch*。 三个值均为整数。 " +"三个值也可通过名称来访问,因此 ``curses.ncurses_version[0]`` 等价于 " +"``curses.ncurses_version.major``,依此类推。" + +#: ../../library/curses.rst:1337 +msgid "Availability: if the ncurses library is used." +msgstr "可用性:如果使用了 ncurses 库。" + +#: ../../library/curses.rst:1342 +msgid "" +"Some constants are available to specify character cell attributes. The exact" +" constants available are system dependent." +msgstr "有些常量可用于指定字符单元属性。 实际可用的常量取决于具体的系统。" + +#: ../../library/curses.rst:1346 +msgid "Attribute" +msgstr "属性" + +#: ../../library/curses.rst:1346 ../../library/curses.rst:1394 +#: ../../library/curses.rst:1638 +msgid "Meaning" +msgstr "含意" + +#: ../../library/curses.rst:1348 +msgid "``A_ALTCHARSET``" +msgstr "``A_ALTCHARSET``" + +#: ../../library/curses.rst:1348 +msgid "Alternate character set mode" +msgstr "备用字符集模式" + +#: ../../library/curses.rst:1350 +msgid "``A_BLINK``" +msgstr "``A_BLINK``" + +#: ../../library/curses.rst:1350 +msgid "Blink mode" +msgstr "闪烁模式" + +#: ../../library/curses.rst:1352 +msgid "``A_BOLD``" +msgstr "``A_BOLD``" + +#: ../../library/curses.rst:1352 +msgid "Bold mode" +msgstr "粗体模式" + +#: ../../library/curses.rst:1354 +msgid "``A_DIM``" +msgstr "``A_DIM``" + +#: ../../library/curses.rst:1354 +msgid "Dim mode" +msgstr "暗淡模式" + +#: ../../library/curses.rst:1356 +msgid "``A_INVIS``" +msgstr "``A_INVIS``" + +#: ../../library/curses.rst:1356 +msgid "Invisible or blank mode" +msgstr "不可见或空白模式" + +#: ../../library/curses.rst:1358 +msgid "``A_ITALIC``" +msgstr "``A_ITALIC``" + +#: ../../library/curses.rst:1358 +msgid "Italic mode" +msgstr "斜体模式" + +#: ../../library/curses.rst:1360 +msgid "``A_NORMAL``" +msgstr "``A_NORMAL``" + +#: ../../library/curses.rst:1360 +msgid "Normal attribute" +msgstr "正常属性" + +#: ../../library/curses.rst:1362 +msgid "``A_PROTECT``" +msgstr "``A_PROTECT``" + +#: ../../library/curses.rst:1362 +msgid "Protected mode" +msgstr "保护模式" + +#: ../../library/curses.rst:1364 +msgid "``A_REVERSE``" +msgstr "``A_REVERSE``" + +#: ../../library/curses.rst:1364 +msgid "Reverse background and foreground colors" +msgstr "反转背景色和前景色" + +#: ../../library/curses.rst:1367 +msgid "``A_STANDOUT``" +msgstr "``A_STANDOUT``" + +#: ../../library/curses.rst:1367 +msgid "Standout mode" +msgstr "突出模式" + +#: ../../library/curses.rst:1369 +msgid "``A_UNDERLINE``" +msgstr "``A_UNDERLINE``" + +#: ../../library/curses.rst:1369 +msgid "Underline mode" +msgstr "下划线模式" + +#: ../../library/curses.rst:1371 +msgid "``A_HORIZONTAL``" +msgstr "``A_HORIZONTAL``" + +#: ../../library/curses.rst:1371 +msgid "Horizontal highlight" +msgstr "水平突出显示" + +#: ../../library/curses.rst:1373 +msgid "``A_LEFT``" +msgstr "``A_LEFT``" + +#: ../../library/curses.rst:1373 +msgid "Left highlight" +msgstr "左高亮" + +#: ../../library/curses.rst:1375 +msgid "``A_LOW``" +msgstr "``A_LOW``" + +#: ../../library/curses.rst:1375 +msgid "Low highlight" +msgstr "底部高亮" + +#: ../../library/curses.rst:1377 +msgid "``A_RIGHT``" +msgstr "``A_RIGHT``" + +#: ../../library/curses.rst:1377 +msgid "Right highlight" +msgstr "右高亮" + +#: ../../library/curses.rst:1379 +msgid "``A_TOP``" +msgstr "``A_TOP``" + +#: ../../library/curses.rst:1379 +msgid "Top highlight" +msgstr "顶部高亮" + +#: ../../library/curses.rst:1381 +msgid "``A_VERTICAL``" +msgstr "``A_VERTICAL``" + +#: ../../library/curses.rst:1381 +msgid "Vertical highlight" +msgstr "垂直突出显示" + +#: ../../library/curses.rst:1383 ../../library/curses.rst:1399 +msgid "``A_CHARTEXT``" +msgstr "``A_CHARTEXT``" + +#: ../../library/curses.rst:1383 ../../library/curses.rst:1399 +msgid "Bit-mask to extract a character" +msgstr "用于提取字符的位掩码" + +#: ../../library/curses.rst:1387 +msgid "``A_ITALIC`` was added." +msgstr "``A_ITALIC`` was added." + +#: ../../library/curses.rst:1390 +msgid "" +"Several constants are available to extract corresponding attributes returned" +" by some methods." +msgstr "有几个常量可用于提取某些方法返回的相应属性。" + +#: ../../library/curses.rst:1394 +msgid "Bit-mask" +msgstr "位掩码" + +#: ../../library/curses.rst:1396 +msgid "``A_ATTRIBUTES``" +msgstr "``A_ATTRIBUTES``" + +#: ../../library/curses.rst:1396 +msgid "Bit-mask to extract attributes" +msgstr "用于提取属性的位掩码" + +#: ../../library/curses.rst:1402 +msgid "``A_COLOR``" +msgstr "``A_COLOR``" + +#: ../../library/curses.rst:1402 +msgid "Bit-mask to extract color-pair field information" +msgstr "用于提取颜色对字段信息的位掩码" + +#: ../../library/curses.rst:1406 +msgid "" +"Keys are referred to by integer constants with names starting with " +"``KEY_``. The exact keycaps available are system dependent." +msgstr "键由名称以 ``KEY_`` 开头的整数常量引用。确切的可用键取决于系统。" + +#: ../../library/curses.rst:1412 +msgid "Key constant" +msgstr "关键常数" + +#: ../../library/curses.rst:1412 +msgid "Key" +msgstr "键" + +#: ../../library/curses.rst:1414 +msgid "``KEY_MIN``" +msgstr "``KEY_MIN``" + +#: ../../library/curses.rst:1414 +msgid "Minimum key value" +msgstr "最小键值" + +#: ../../library/curses.rst:1416 +msgid "``KEY_BREAK``" +msgstr "``KEY_BREAK``" + +#: ../../library/curses.rst:1416 +msgid "Break key (unreliable)" +msgstr "中断键(不可靠)" + +#: ../../library/curses.rst:1418 +msgid "``KEY_DOWN``" +msgstr "``KEY_DOWN``" + +#: ../../library/curses.rst:1418 +msgid "Down-arrow" +msgstr "向下箭头" + +#: ../../library/curses.rst:1420 +msgid "``KEY_UP``" +msgstr "``KEY_UP``" + +#: ../../library/curses.rst:1420 +msgid "Up-arrow" +msgstr "向上箭头" + +#: ../../library/curses.rst:1422 +msgid "``KEY_LEFT``" +msgstr "``KEY_LEFT``" + +#: ../../library/curses.rst:1422 +msgid "Left-arrow" +msgstr "向左箭头" + +#: ../../library/curses.rst:1424 +msgid "``KEY_RIGHT``" +msgstr "``KEY_RIGHT``" + +#: ../../library/curses.rst:1424 +msgid "Right-arrow" +msgstr "向右箭头" + +#: ../../library/curses.rst:1426 +msgid "``KEY_HOME``" +msgstr "``KEY_HOME``" + +#: ../../library/curses.rst:1426 +msgid "Home key (upward+left arrow)" +msgstr "Home 键 (上+左箭头)" + +#: ../../library/curses.rst:1428 +msgid "``KEY_BACKSPACE``" +msgstr "``KEY_BACKSPACE``" + +#: ../../library/curses.rst:1428 +msgid "Backspace (unreliable)" +msgstr "退格(不可靠)" + +#: ../../library/curses.rst:1430 +msgid "``KEY_F0``" +msgstr "``KEY_F0``" + +#: ../../library/curses.rst:1430 +msgid "Function keys. Up to 64 function keys are supported." +msgstr "功能键。 支持至多 64 个功能键。" + +#: ../../library/curses.rst:1433 +msgid "``KEY_Fn``" +msgstr "``KEY_Fn``" + +#: ../../library/curses.rst:1433 +msgid "Value of function key *n*" +msgstr "功能键 *n* 的值" + +#: ../../library/curses.rst:1435 +msgid "``KEY_DL``" +msgstr "``KEY_DL``" + +#: ../../library/curses.rst:1435 +msgid "Delete line" +msgstr "删除行" + +#: ../../library/curses.rst:1437 +msgid "``KEY_IL``" +msgstr "``KEY_IL``" + +#: ../../library/curses.rst:1437 +msgid "Insert line" +msgstr "插入行" + +#: ../../library/curses.rst:1439 +msgid "``KEY_DC``" +msgstr "``KEY_DC``" + +#: ../../library/curses.rst:1439 +msgid "Delete character" +msgstr "删除字符" + +#: ../../library/curses.rst:1441 +msgid "``KEY_IC``" +msgstr "``KEY_IC``" + +#: ../../library/curses.rst:1441 +msgid "Insert char or enter insert mode" +msgstr "插入字符或进入插入模式" + +#: ../../library/curses.rst:1443 +msgid "``KEY_EIC``" +msgstr "``KEY_EIC``" + +#: ../../library/curses.rst:1443 +msgid "Exit insert char mode" +msgstr "退出插入字符模式" + +#: ../../library/curses.rst:1445 +msgid "``KEY_CLEAR``" +msgstr "``KEY_CLEAR``" + +#: ../../library/curses.rst:1445 +msgid "Clear screen" +msgstr "清空屏幕" + +#: ../../library/curses.rst:1447 +msgid "``KEY_EOS``" +msgstr "``KEY_EOS``" + +#: ../../library/curses.rst:1447 +msgid "Clear to end of screen" +msgstr "清空至屏幕底部" + +#: ../../library/curses.rst:1449 +msgid "``KEY_EOL``" +msgstr "``KEY_EOL``" + +#: ../../library/curses.rst:1449 +msgid "Clear to end of line" +msgstr "清空至行尾" + +#: ../../library/curses.rst:1451 +msgid "``KEY_SF``" +msgstr "``KEY_SF``" + +#: ../../library/curses.rst:1451 +msgid "Scroll 1 line forward" +msgstr "向前滚动 1 行" + +#: ../../library/curses.rst:1453 +msgid "``KEY_SR``" +msgstr "``KEY_SR``" + +#: ../../library/curses.rst:1453 +msgid "Scroll 1 line backward (reverse)" +msgstr "向后滚动 1 行 (反转)" + +#: ../../library/curses.rst:1455 +msgid "``KEY_NPAGE``" +msgstr "``KEY_NPAGE``" + +#: ../../library/curses.rst:1455 +msgid "Next page" +msgstr "下一页" + +#: ../../library/curses.rst:1457 +msgid "``KEY_PPAGE``" +msgstr "``KEY_PPAGE``" + +#: ../../library/curses.rst:1457 +msgid "Previous page" +msgstr "上一页" + +#: ../../library/curses.rst:1459 +msgid "``KEY_STAB``" +msgstr "``KEY_STAB``" + +#: ../../library/curses.rst:1459 +msgid "Set tab" +msgstr "设置制表符" + +#: ../../library/curses.rst:1461 +msgid "``KEY_CTAB``" +msgstr "``KEY_CTAB``" + +#: ../../library/curses.rst:1461 +msgid "Clear tab" +msgstr "清除制表符" + +#: ../../library/curses.rst:1463 +msgid "``KEY_CATAB``" +msgstr "``KEY_CATAB``" + +#: ../../library/curses.rst:1463 +msgid "Clear all tabs" +msgstr "清除所有制表符" + +#: ../../library/curses.rst:1465 +msgid "``KEY_ENTER``" +msgstr "``KEY_ENTER``" + +#: ../../library/curses.rst:1465 +msgid "Enter or send (unreliable)" +msgstr "回车或发送 (不可靠)" + +#: ../../library/curses.rst:1467 +msgid "``KEY_SRESET``" +msgstr "``KEY_SRESET``" + +#: ../../library/curses.rst:1467 +msgid "Soft (partial) reset (unreliable)" +msgstr "软 (部分) 重置 (不可靠)" + +#: ../../library/curses.rst:1469 +msgid "``KEY_RESET``" +msgstr "``KEY_RESET``" + +#: ../../library/curses.rst:1469 +msgid "Reset or hard reset (unreliable)" +msgstr "重置或硬重置 (不可靠)" + +#: ../../library/curses.rst:1471 +msgid "``KEY_PRINT``" +msgstr "``KEY_PRINT``" + +#: ../../library/curses.rst:1471 +msgid "Print" +msgstr "打印" + +#: ../../library/curses.rst:1473 +msgid "``KEY_LL``" +msgstr "``KEY_LL``" + +#: ../../library/curses.rst:1473 +msgid "Home down or bottom (lower left)" +msgstr "Home 向下或到底 (左下)" + +#: ../../library/curses.rst:1475 +msgid "``KEY_A1``" +msgstr "``KEY_A1``" + +#: ../../library/curses.rst:1475 +msgid "Upper left of keypad" +msgstr "键盘的左上角" + +#: ../../library/curses.rst:1477 +msgid "``KEY_A3``" +msgstr "``KEY_A3``" + +#: ../../library/curses.rst:1477 +msgid "Upper right of keypad" +msgstr "键盘的右上角" + +#: ../../library/curses.rst:1479 +msgid "``KEY_B2``" +msgstr "``KEY_B2``" + +#: ../../library/curses.rst:1479 +msgid "Center of keypad" +msgstr "键盘的中心" + +#: ../../library/curses.rst:1481 +msgid "``KEY_C1``" +msgstr "``KEY_C1``" + +#: ../../library/curses.rst:1481 +msgid "Lower left of keypad" +msgstr "键盘左下方" + +#: ../../library/curses.rst:1483 +msgid "``KEY_C3``" +msgstr "``KEY_C3``" + +#: ../../library/curses.rst:1483 +msgid "Lower right of keypad" +msgstr "键盘右下方" + +#: ../../library/curses.rst:1485 +msgid "``KEY_BTAB``" +msgstr "``KEY_BTAB``" + +#: ../../library/curses.rst:1485 +msgid "Back tab" +msgstr "回退制表符" + +#: ../../library/curses.rst:1487 +msgid "``KEY_BEG``" +msgstr "``KEY_BEG``" + +#: ../../library/curses.rst:1487 +msgid "Beg (beginning)" +msgstr "Beg (开始)" + +#: ../../library/curses.rst:1489 +msgid "``KEY_CANCEL``" +msgstr "``KEY_CANCEL``" + +#: ../../library/curses.rst:1489 +msgid "Cancel" +msgstr "取消" + +#: ../../library/curses.rst:1491 +msgid "``KEY_CLOSE``" +msgstr "``KEY_CLOSE``" + +#: ../../library/curses.rst:1491 +msgid "Close" +msgstr "关闭" + +#: ../../library/curses.rst:1493 +msgid "``KEY_COMMAND``" +msgstr "``KEY_COMMAND``" + +#: ../../library/curses.rst:1493 +msgid "Cmd (command)" +msgstr "Cmd (命令行)" + +#: ../../library/curses.rst:1495 +msgid "``KEY_COPY``" +msgstr "``KEY_COPY``" + +#: ../../library/curses.rst:1495 +msgid "Copy" +msgstr "复制" + +#: ../../library/curses.rst:1497 +msgid "``KEY_CREATE``" +msgstr "``KEY_CREATE``" + +#: ../../library/curses.rst:1497 +msgid "Create" +msgstr "创建" + +#: ../../library/curses.rst:1499 +msgid "``KEY_END``" +msgstr "``KEY_END``" + +#: ../../library/curses.rst:1499 +msgid "End" +msgstr "End" + +#: ../../library/curses.rst:1501 +msgid "``KEY_EXIT``" +msgstr "``KEY_EXIT``" + +#: ../../library/curses.rst:1501 +msgid "Exit" +msgstr "退出" + +#: ../../library/curses.rst:1503 +msgid "``KEY_FIND``" +msgstr "``KEY_FIND``" + +#: ../../library/curses.rst:1503 +msgid "Find" +msgstr "查找" + +#: ../../library/curses.rst:1505 +msgid "``KEY_HELP``" +msgstr "``KEY_HELP``" + +#: ../../library/curses.rst:1505 +msgid "Help" +msgstr "帮助" + +#: ../../library/curses.rst:1507 +msgid "``KEY_MARK``" +msgstr "``KEY_MARK``" + +#: ../../library/curses.rst:1507 +msgid "Mark" +msgstr "标记" + +#: ../../library/curses.rst:1509 +msgid "``KEY_MESSAGE``" +msgstr "``KEY_MESSAGE``" + +#: ../../library/curses.rst:1509 +msgid "Message" +msgstr "消息" + +#: ../../library/curses.rst:1511 +msgid "``KEY_MOVE``" +msgstr "``KEY_MOVE``" + +#: ../../library/curses.rst:1511 +msgid "Move" +msgstr "移动" + +#: ../../library/curses.rst:1513 +msgid "``KEY_NEXT``" +msgstr "``KEY_NEXT``" + +#: ../../library/curses.rst:1513 +msgid "Next" +msgstr "下一个" + +#: ../../library/curses.rst:1515 +msgid "``KEY_OPEN``" +msgstr "``KEY_OPEN``" + +#: ../../library/curses.rst:1515 +msgid "Open" +msgstr "打开" + +#: ../../library/curses.rst:1517 +msgid "``KEY_OPTIONS``" +msgstr "``KEY_OPTIONS``" + +#: ../../library/curses.rst:1517 +msgid "Options" +msgstr "属性" + +#: ../../library/curses.rst:1519 +msgid "``KEY_PREVIOUS``" +msgstr "``KEY_PREVIOUS``" + +#: ../../library/curses.rst:1519 +msgid "Prev (previous)" +msgstr "Prev (上一个)" + +#: ../../library/curses.rst:1521 +msgid "``KEY_REDO``" +msgstr "``KEY_REDO``" + +#: ../../library/curses.rst:1521 +msgid "Redo" +msgstr "重做" + +#: ../../library/curses.rst:1523 +msgid "``KEY_REFERENCE``" +msgstr "``KEY_REFERENCE``" + +#: ../../library/curses.rst:1523 +msgid "Ref (reference)" +msgstr "Ref (引用)" + +#: ../../library/curses.rst:1525 +msgid "``KEY_REFRESH``" +msgstr "``KEY_REFRESH``" + +#: ../../library/curses.rst:1525 +msgid "Refresh" +msgstr "刷新" + +#: ../../library/curses.rst:1527 +msgid "``KEY_REPLACE``" +msgstr "``KEY_REPLACE``" + +#: ../../library/curses.rst:1527 +msgid "Replace" +msgstr "替换" + +#: ../../library/curses.rst:1529 +msgid "``KEY_RESTART``" +msgstr "``KEY_RESTART``" + +#: ../../library/curses.rst:1529 +msgid "Restart" +msgstr "重启" + +#: ../../library/curses.rst:1531 +msgid "``KEY_RESUME``" +msgstr "``KEY_RESUME``" + +#: ../../library/curses.rst:1531 +msgid "Resume" +msgstr "恢复" + +#: ../../library/curses.rst:1533 +msgid "``KEY_SAVE``" +msgstr "``KEY_SAVE``" + +#: ../../library/curses.rst:1533 +msgid "Save" +msgstr "保存" + +#: ../../library/curses.rst:1535 +msgid "``KEY_SBEG``" +msgstr "``KEY_SBEG``" + +#: ../../library/curses.rst:1535 +msgid "Shifted Beg (beginning)" +msgstr "Shift + Beg (开始)" + +#: ../../library/curses.rst:1537 +msgid "``KEY_SCANCEL``" +msgstr "``KEY_SCANCEL``" + +#: ../../library/curses.rst:1537 +msgid "Shifted Cancel" +msgstr "Shift + Cancel" + +#: ../../library/curses.rst:1539 +msgid "``KEY_SCOMMAND``" +msgstr "``KEY_SCOMMAND``" + +#: ../../library/curses.rst:1539 +msgid "Shifted Command" +msgstr "Shift + Command" + +#: ../../library/curses.rst:1541 +msgid "``KEY_SCOPY``" +msgstr "``KEY_SCOPY``" + +#: ../../library/curses.rst:1541 +msgid "Shifted Copy" +msgstr "Shift + Copy" + +#: ../../library/curses.rst:1543 +msgid "``KEY_SCREATE``" +msgstr "``KEY_SCREATE``" + +#: ../../library/curses.rst:1543 +msgid "Shifted Create" +msgstr "Shift + Create" + +#: ../../library/curses.rst:1545 +msgid "``KEY_SDC``" +msgstr "``KEY_SDC``" + +#: ../../library/curses.rst:1545 +msgid "Shifted Delete char" +msgstr "Shift + 删除字符" + +#: ../../library/curses.rst:1547 +msgid "``KEY_SDL``" +msgstr "``KEY_SDL``" + +#: ../../library/curses.rst:1547 +msgid "Shifted Delete line" +msgstr "Shift + 删除行" + +#: ../../library/curses.rst:1549 +msgid "``KEY_SELECT``" +msgstr "``KEY_SELECT``" + +#: ../../library/curses.rst:1549 +msgid "Select" +msgstr "选择" + +#: ../../library/curses.rst:1551 +msgid "``KEY_SEND``" +msgstr "``KEY_SEND``" + +#: ../../library/curses.rst:1551 +msgid "Shifted End" +msgstr "Shift + End" + +#: ../../library/curses.rst:1553 +msgid "``KEY_SEOL``" +msgstr "``KEY_SEOL``" + +#: ../../library/curses.rst:1553 +msgid "Shifted Clear line" +msgstr "Shift + 清空行" + +#: ../../library/curses.rst:1555 +msgid "``KEY_SEXIT``" +msgstr "``KEY_SEXIT``" + +#: ../../library/curses.rst:1555 +msgid "Shifted Exit" +msgstr "Shift + 退出" + +#: ../../library/curses.rst:1557 +msgid "``KEY_SFIND``" +msgstr "``KEY_SFIND``" + +#: ../../library/curses.rst:1557 +msgid "Shifted Find" +msgstr "Shift + 查找" + +#: ../../library/curses.rst:1559 +msgid "``KEY_SHELP``" +msgstr "``KEY_SHELP``" + +#: ../../library/curses.rst:1559 +msgid "Shifted Help" +msgstr "Shift + 帮助" + +#: ../../library/curses.rst:1561 +msgid "``KEY_SHOME``" +msgstr "``KEY_SHOME``" + +#: ../../library/curses.rst:1561 +msgid "Shifted Home" +msgstr "Shift + Home" + +#: ../../library/curses.rst:1563 +msgid "``KEY_SIC``" +msgstr "``KEY_SIC``" + +#: ../../library/curses.rst:1563 +msgid "Shifted Input" +msgstr "Shift + 输入" + +#: ../../library/curses.rst:1565 +msgid "``KEY_SLEFT``" +msgstr "``KEY_SLEFT``" + +#: ../../library/curses.rst:1565 +msgid "Shifted Left arrow" +msgstr "Shift + 向左箭头" + +#: ../../library/curses.rst:1567 +msgid "``KEY_SMESSAGE``" +msgstr "``KEY_SMESSAGE``" + +#: ../../library/curses.rst:1567 +msgid "Shifted Message" +msgstr "Shift + 消息" + +#: ../../library/curses.rst:1569 +msgid "``KEY_SMOVE``" +msgstr "``KEY_SMOVE``" + +#: ../../library/curses.rst:1569 +msgid "Shifted Move" +msgstr "Shift + 移动" + +#: ../../library/curses.rst:1571 +msgid "``KEY_SNEXT``" +msgstr "``KEY_SNEXT``" + +#: ../../library/curses.rst:1571 +msgid "Shifted Next" +msgstr "Shift + 下一个" + +#: ../../library/curses.rst:1573 +msgid "``KEY_SOPTIONS``" +msgstr "``KEY_SOPTIONS``" + +#: ../../library/curses.rst:1573 +msgid "Shifted Options" +msgstr "Shift + 选项" + +#: ../../library/curses.rst:1575 +msgid "``KEY_SPREVIOUS``" +msgstr "``KEY_SPREVIOUS``" + +#: ../../library/curses.rst:1575 +msgid "Shifted Prev" +msgstr "Shift + 上一个" + +#: ../../library/curses.rst:1577 +msgid "``KEY_SPRINT``" +msgstr "``KEY_SPRINT``" + +#: ../../library/curses.rst:1577 +msgid "Shifted Print" +msgstr "Shift + 打印" + +#: ../../library/curses.rst:1579 +msgid "``KEY_SREDO``" +msgstr "``KEY_SREDO``" + +#: ../../library/curses.rst:1579 +msgid "Shifted Redo" +msgstr "Shift + 重做" + +#: ../../library/curses.rst:1581 +msgid "``KEY_SREPLACE``" +msgstr "``KEY_SREPLACE``" + +#: ../../library/curses.rst:1581 +msgid "Shifted Replace" +msgstr "Shift + 替换" + +#: ../../library/curses.rst:1583 +msgid "``KEY_SRIGHT``" +msgstr "``KEY_SRIGHT``" + +#: ../../library/curses.rst:1583 +msgid "Shifted Right arrow" +msgstr "Shift + 向右箭头" + +#: ../../library/curses.rst:1585 +msgid "``KEY_SRSUME``" +msgstr "``KEY_SRSUME``" + +#: ../../library/curses.rst:1585 +msgid "Shifted Resume" +msgstr "Shift + 恢复" + +#: ../../library/curses.rst:1587 +msgid "``KEY_SSAVE``" +msgstr "``KEY_SSAVE``" + +#: ../../library/curses.rst:1587 +msgid "Shifted Save" +msgstr "Shift + 保存" + +#: ../../library/curses.rst:1589 +msgid "``KEY_SSUSPEND``" +msgstr "``KEY_SSUSPEND``" + +#: ../../library/curses.rst:1589 +msgid "Shifted Suspend" +msgstr "Shift + 挂起" + +#: ../../library/curses.rst:1591 +msgid "``KEY_SUNDO``" +msgstr "``KEY_SUNDO``" + +#: ../../library/curses.rst:1591 +msgid "Shifted Undo" +msgstr "Shift + 撤销" + +#: ../../library/curses.rst:1593 +msgid "``KEY_SUSPEND``" +msgstr "``KEY_SUSPEND``" + +#: ../../library/curses.rst:1593 +msgid "Suspend" +msgstr "挂起" + +#: ../../library/curses.rst:1595 +msgid "``KEY_UNDO``" +msgstr "``KEY_UNDO``" + +#: ../../library/curses.rst:1595 +msgid "Undo" +msgstr "撤销操作" + +#: ../../library/curses.rst:1597 +msgid "``KEY_MOUSE``" +msgstr "``KEY_MOUSE``" + +#: ../../library/curses.rst:1597 +msgid "Mouse event has occurred" +msgstr "鼠标事件已发生" + +#: ../../library/curses.rst:1599 +msgid "``KEY_RESIZE``" +msgstr "``KEY_RESIZE``" + +#: ../../library/curses.rst:1599 +msgid "Terminal resize event" +msgstr "终端大小改变事件" + +#: ../../library/curses.rst:1601 +msgid "``KEY_MAX``" +msgstr "``KEY_MAX``" + +#: ../../library/curses.rst:1601 +msgid "Maximum key value" +msgstr "最大键值" + +#: ../../library/curses.rst:1604 +msgid "" +"On VT100s and their software emulations, such as X terminal emulators, there" +" are normally at least four function keys (:const:`KEY_F1`, :const:`KEY_F2`," +" :const:`KEY_F3`, :const:`KEY_F4`) available, and the arrow keys mapped to " +":const:`KEY_UP`, :const:`KEY_DOWN`, :const:`KEY_LEFT` and :const:`KEY_RIGHT`" +" in the obvious way. If your machine has a PC keyboard, it is safe to " +"expect arrow keys and twelve function keys (older PC keyboards may have only" +" ten function keys); also, the following keypad mappings are standard:" +msgstr "" +"在VT100及其软件仿真(例如X终端仿真器)上,通常至少有四个功能键( :const:`KEY_F1`, :const:`KEY_F2`, " +":const:`KEY_F3`, :const:`KEY_F4` )可用,并且箭头键以明显的方式映射到 :const:`KEY_UP`, " +":const:`KEY_DOWN`, :const:`KEY_LEFT` 和 :const:`KEY_RIGHT` " +"。如果您的机器有一个PC键盘,可以安全地使用箭头键和十二个功能键(旧的PC键盘可能只有十个功能键);此外,以下键盘映射是标准的:" + +#: ../../library/curses.rst:1613 +msgid "Keycap" +msgstr "键帽" + +#: ../../library/curses.rst:1613 ../../library/curses.rst:1730 +#: ../../library/curses.rst:1854 +msgid "Constant" +msgstr "常量" + +#: ../../library/curses.rst:1615 +msgid ":kbd:`Insert`" +msgstr ":kbd:`Insert`" + +#: ../../library/curses.rst:1615 +msgid "KEY_IC" +msgstr "KEY_IC" + +#: ../../library/curses.rst:1617 +msgid ":kbd:`Delete`" +msgstr ":kbd:`Delete`" + +#: ../../library/curses.rst:1617 +msgid "KEY_DC" +msgstr "KEY_DC" + +#: ../../library/curses.rst:1619 +msgid ":kbd:`Home`" +msgstr ":kbd:`Home`" + +#: ../../library/curses.rst:1619 +msgid "KEY_HOME" +msgstr "KEY_HOME" + +#: ../../library/curses.rst:1621 +msgid ":kbd:`End`" +msgstr ":kbd:`End`" + +#: ../../library/curses.rst:1621 +msgid "KEY_END" +msgstr "KEY_END" + +#: ../../library/curses.rst:1623 +msgid ":kbd:`Page Up`" +msgstr ":kbd:`Page Up`" + +#: ../../library/curses.rst:1623 +msgid "KEY_PPAGE" +msgstr "KEY_PPAGE" + +#: ../../library/curses.rst:1625 +msgid ":kbd:`Page Down`" +msgstr ":kbd:`Page Down`" + +#: ../../library/curses.rst:1625 +msgid "KEY_NPAGE" +msgstr "KEY_NPAGE" + +#: ../../library/curses.rst:1628 +msgid "" +"The following table lists characters from the alternate character set. These" +" are inherited from the VT100 terminal, and will generally be available on " +"software emulations such as X terminals. When there is no graphic " +"available, curses falls back on a crude printable ASCII approximation." +msgstr "" +"下表列出了替代字符集中的字符。 这些字符继承自 VT100 终端,在 X 终端等软件模拟器上通常均为可用。 当没有可用的图形时,curses " +"会回退为粗糙的可打印 ASCII 近似符号。" + +#: ../../library/curses.rst:1635 +msgid "These are available only after :func:`initscr` has been called." +msgstr "只有在调用 :func:`initscr` 之后才能使用它们" + +#: ../../library/curses.rst:1638 +msgid "ACS code" +msgstr "ACS代码" + +#: ../../library/curses.rst:1640 +msgid "``ACS_BBSS``" +msgstr "``ACS_BBSS``" + +#: ../../library/curses.rst:1640 +msgid "alternate name for upper right corner" +msgstr "右上角的别名" + +#: ../../library/curses.rst:1642 +msgid "``ACS_BLOCK``" +msgstr "``ACS_BLOCK``" + +#: ../../library/curses.rst:1642 +msgid "solid square block" +msgstr "实心方块" + +#: ../../library/curses.rst:1644 +msgid "``ACS_BOARD``" +msgstr "``ACS_BOARD``" + +#: ../../library/curses.rst:1644 +msgid "board of squares" +msgstr "正方形" + +#: ../../library/curses.rst:1646 +msgid "``ACS_BSBS``" +msgstr "``ACS_BSBS``" + +#: ../../library/curses.rst:1646 +msgid "alternate name for horizontal line" +msgstr "水平线的别名" + +#: ../../library/curses.rst:1648 +msgid "``ACS_BSSB``" +msgstr "``ACS_BSSB``" + +#: ../../library/curses.rst:1648 +msgid "alternate name for upper left corner" +msgstr "左上角的别名" + +#: ../../library/curses.rst:1650 +msgid "``ACS_BSSS``" +msgstr "``ACS_BSSS``" + +#: ../../library/curses.rst:1650 +msgid "alternate name for top tee" +msgstr "顶部 T 型的别名" + +#: ../../library/curses.rst:1652 +msgid "``ACS_BTEE``" +msgstr "``ACS_BTEE``" + +#: ../../library/curses.rst:1652 +msgid "bottom tee" +msgstr "底部 T 型" + +#: ../../library/curses.rst:1654 +msgid "``ACS_BULLET``" +msgstr "``ACS_BULLET``" + +#: ../../library/curses.rst:1654 +msgid "bullet" +msgstr "正方形" + +#: ../../library/curses.rst:1656 +msgid "``ACS_CKBOARD``" +msgstr "``ACS_CKBOARD``" + +#: ../../library/curses.rst:1656 +msgid "checker board (stipple)" +msgstr "棋盘(点刻)" + +#: ../../library/curses.rst:1658 +msgid "``ACS_DARROW``" +msgstr "``ACS_DARROW``" + +#: ../../library/curses.rst:1658 +msgid "arrow pointing down" +msgstr "向下箭头" + +#: ../../library/curses.rst:1660 +msgid "``ACS_DEGREE``" +msgstr "``ACS_DEGREE``" + +#: ../../library/curses.rst:1660 +msgid "degree symbol" +msgstr "等级符" + +#: ../../library/curses.rst:1662 +msgid "``ACS_DIAMOND``" +msgstr "``ACS_DIAMOND``" + +#: ../../library/curses.rst:1662 +msgid "diamond" +msgstr "菱形" + +#: ../../library/curses.rst:1664 +msgid "``ACS_GEQUAL``" +msgstr "``ACS_GEQUAL``" + +#: ../../library/curses.rst:1664 +msgid "greater-than-or-equal-to" +msgstr "大于或等于" + +#: ../../library/curses.rst:1666 +msgid "``ACS_HLINE``" +msgstr "``ACS_HLINE``" + +#: ../../library/curses.rst:1666 +msgid "horizontal line" +msgstr "水平线" + +#: ../../library/curses.rst:1668 +msgid "``ACS_LANTERN``" +msgstr "``ACS_LANTERN``" + +#: ../../library/curses.rst:1668 +msgid "lantern symbol" +msgstr "灯形符号" + +#: ../../library/curses.rst:1670 +msgid "``ACS_LARROW``" +msgstr "``ACS_LARROW``" + +#: ../../library/curses.rst:1670 +msgid "left arrow" +msgstr "向左箭头" + +#: ../../library/curses.rst:1672 +msgid "``ACS_LEQUAL``" +msgstr "``ACS_LEQUAL``" + +#: ../../library/curses.rst:1672 +msgid "less-than-or-equal-to" +msgstr "小于或等于" + +#: ../../library/curses.rst:1674 +msgid "``ACS_LLCORNER``" +msgstr "``ACS_LLCORNER``" + +#: ../../library/curses.rst:1674 +msgid "lower left-hand corner" +msgstr "左下角" + +#: ../../library/curses.rst:1676 +msgid "``ACS_LRCORNER``" +msgstr "``ACS_LRCORNER``" + +#: ../../library/curses.rst:1676 +msgid "lower right-hand corner" +msgstr "右下角" + +#: ../../library/curses.rst:1678 +msgid "``ACS_LTEE``" +msgstr "``ACS_LTEE``" + +#: ../../library/curses.rst:1678 +msgid "left tee" +msgstr "左侧 T 型" + +#: ../../library/curses.rst:1680 +msgid "``ACS_NEQUAL``" +msgstr "``ACS_NEQUAL``" + +#: ../../library/curses.rst:1680 +msgid "not-equal sign" +msgstr "不等号" + +#: ../../library/curses.rst:1682 +msgid "``ACS_PI``" +msgstr "``ACS_PI``" + +#: ../../library/curses.rst:1682 +msgid "letter pi" +msgstr "字母π" + +#: ../../library/curses.rst:1684 +msgid "``ACS_PLMINUS``" +msgstr "``ACS_PLMINUS``" + +#: ../../library/curses.rst:1684 +msgid "plus-or-minus sign" +msgstr "正负号" + +#: ../../library/curses.rst:1686 +msgid "``ACS_PLUS``" +msgstr "``ACS_PLUS``" + +#: ../../library/curses.rst:1686 +msgid "big plus sign" +msgstr "加号" + +#: ../../library/curses.rst:1688 +msgid "``ACS_RARROW``" +msgstr "``ACS_RARROW``" + +#: ../../library/curses.rst:1688 +msgid "right arrow" +msgstr "向右箭头" + +#: ../../library/curses.rst:1690 +msgid "``ACS_RTEE``" +msgstr "``ACS_RTEE``" + +#: ../../library/curses.rst:1690 +msgid "right tee" +msgstr "右侧 T 型" + +#: ../../library/curses.rst:1692 +msgid "``ACS_S1``" +msgstr "``ACS_S1``" + +#: ../../library/curses.rst:1692 +msgid "scan line 1" +msgstr "扫描线 1" + +#: ../../library/curses.rst:1694 +msgid "``ACS_S3``" +msgstr "``ACS_S3``" + +#: ../../library/curses.rst:1694 +msgid "scan line 3" +msgstr "扫描线3" + +#: ../../library/curses.rst:1696 +msgid "``ACS_S7``" +msgstr "``ACS_S7``" + +#: ../../library/curses.rst:1696 +msgid "scan line 7" +msgstr "扫描线7" + +#: ../../library/curses.rst:1698 +msgid "``ACS_S9``" +msgstr "``ACS_S9``" + +#: ../../library/curses.rst:1698 +msgid "scan line 9" +msgstr "扫描线 9" + +#: ../../library/curses.rst:1700 +msgid "``ACS_SBBS``" +msgstr "``ACS_SBBS``" + +#: ../../library/curses.rst:1700 +msgid "alternate name for lower right corner" +msgstr "右下角的别名" + +#: ../../library/curses.rst:1702 +msgid "``ACS_SBSB``" +msgstr "``ACS_SBSB``" + +#: ../../library/curses.rst:1702 +msgid "alternate name for vertical line" +msgstr "垂直线的别名" + +#: ../../library/curses.rst:1704 +msgid "``ACS_SBSS``" +msgstr "``ACS_SBSS``" + +#: ../../library/curses.rst:1704 +msgid "alternate name for right tee" +msgstr "右侧 T 型的别名" + +#: ../../library/curses.rst:1706 +msgid "``ACS_SSBB``" +msgstr "``ACS_SSBB``" + +#: ../../library/curses.rst:1706 +msgid "alternate name for lower left corner" +msgstr "左下角的别名" + +#: ../../library/curses.rst:1708 +msgid "``ACS_SSBS``" +msgstr "``ACS_SSBS``" + +#: ../../library/curses.rst:1708 +msgid "alternate name for bottom tee" +msgstr "底部 T 型的别名" + +#: ../../library/curses.rst:1710 +msgid "``ACS_SSSB``" +msgstr "``ACS_SSSB``" + +#: ../../library/curses.rst:1710 +msgid "alternate name for left tee" +msgstr "左侧 T 型的别名" + +#: ../../library/curses.rst:1712 +msgid "``ACS_SSSS``" +msgstr "``ACS_SSSS``" + +#: ../../library/curses.rst:1712 +msgid "alternate name for crossover or big plus" +msgstr "交叉或大加号的替代名称" + +#: ../../library/curses.rst:1714 +msgid "``ACS_STERLING``" +msgstr "``ACS_STERLING``" + +#: ../../library/curses.rst:1714 +msgid "pound sterling" +msgstr "英镑" + +#: ../../library/curses.rst:1716 +msgid "``ACS_TTEE``" +msgstr "``ACS_TTEE``" + +#: ../../library/curses.rst:1716 +msgid "top tee" +msgstr "顶部 T 型" + +#: ../../library/curses.rst:1718 +msgid "``ACS_UARROW``" +msgstr "``ACS_UARROW``" + +#: ../../library/curses.rst:1718 +msgid "up arrow" +msgstr "向上箭头" + +#: ../../library/curses.rst:1720 +msgid "``ACS_ULCORNER``" +msgstr "``ACS_ULCORNER``" + +#: ../../library/curses.rst:1720 +msgid "upper left corner" +msgstr "左上角" + +#: ../../library/curses.rst:1722 +msgid "``ACS_URCORNER``" +msgstr "``ACS_URCORNER``" + +#: ../../library/curses.rst:1722 +msgid "upper right corner" +msgstr "右上角" + +#: ../../library/curses.rst:1724 +msgid "``ACS_VLINE``" +msgstr "``ACS_VLINE``" + +#: ../../library/curses.rst:1724 +msgid "vertical line" +msgstr "垂线" + +#: ../../library/curses.rst:1727 +msgid "The following table lists the predefined colors:" +msgstr "下表列出了预定义的颜色:" + +#: ../../library/curses.rst:1730 +msgid "Color" +msgstr "颜色" + +#: ../../library/curses.rst:1732 +msgid "``COLOR_BLACK``" +msgstr "``COLOR_BLACK``" + +#: ../../library/curses.rst:1732 +msgid "Black" +msgstr "黑色" + +#: ../../library/curses.rst:1734 +msgid "``COLOR_BLUE``" +msgstr "``COLOR_BLUE``" + +#: ../../library/curses.rst:1734 +msgid "Blue" +msgstr "蓝色" + +#: ../../library/curses.rst:1736 +msgid "``COLOR_CYAN``" +msgstr "``COLOR_CYAN``" + +#: ../../library/curses.rst:1736 +msgid "Cyan (light greenish blue)" +msgstr "青色(浅绿蓝色)" + +#: ../../library/curses.rst:1738 +msgid "``COLOR_GREEN``" +msgstr "``COLOR_GREEN``" + +#: ../../library/curses.rst:1738 +msgid "Green" +msgstr "绿色" + +#: ../../library/curses.rst:1740 +msgid "``COLOR_MAGENTA``" +msgstr "``COLOR_MAGENTA``" + +#: ../../library/curses.rst:1740 +msgid "Magenta (purplish red)" +msgstr "洋红色(紫红色)" + +#: ../../library/curses.rst:1742 +msgid "``COLOR_RED``" +msgstr "``COLOR_RED``" + +#: ../../library/curses.rst:1742 +msgid "Red" +msgstr "红色" + +#: ../../library/curses.rst:1744 +msgid "``COLOR_WHITE``" +msgstr "``COLOR_WHITE``" + +#: ../../library/curses.rst:1744 +msgid "White" +msgstr "白色" + +#: ../../library/curses.rst:1746 +msgid "``COLOR_YELLOW``" +msgstr "``COLOR_YELLOW``" + +#: ../../library/curses.rst:1746 +msgid "Yellow" +msgstr "黄色" + +#: ../../library/curses.rst:1751 +msgid ":mod:`curses.textpad` --- Text input widget for curses programs" +msgstr ":mod:`curses.textpad` --- 用于 curses 程序的文本输入控件" + +#: ../../library/curses.rst:1759 +msgid "" +"The :mod:`curses.textpad` module provides a :class:`Textbox` class that " +"handles elementary text editing in a curses window, supporting a set of " +"keybindings resembling those of Emacs (thus, also of Netscape Navigator, " +"BBedit 6.x, FrameMaker, and many other programs). The module also provides " +"a rectangle-drawing function useful for framing text boxes or for other " +"purposes." +msgstr "" +":mod:`curses.textpad` 模块提供了一个 :class:`Textbox` 类,该类在 curses " +"窗口中处理基本的文本编辑,支持一组与 Emacs 类似的键绑定(因此这也适用于 Netscape Navigator, BBedit 6.x, " +"FrameMaker 和许多其他程序)。 该模块还提供了一个绘制矩形的函数,适用于容纳文本框或其他目的。" + +#: ../../library/curses.rst:1765 +msgid "The module :mod:`curses.textpad` defines the following function:" +msgstr ":mod:`curses.textpad` 模块定义了以下函数:" + +#: ../../library/curses.rst:1770 +msgid "" +"Draw a rectangle. The first argument must be a window object; the remaining" +" arguments are coordinates relative to that window. The second and third " +"arguments are the y and x coordinates of the upper left hand corner of the " +"rectangle to be drawn; the fourth and fifth arguments are the y and x " +"coordinates of the lower right hand corner. The rectangle will be drawn " +"using VT100/IBM PC forms characters on terminals that make this possible " +"(including xterm and most other software terminal emulators). Otherwise it " +"will be drawn with ASCII dashes, vertical bars, and plus signs." +msgstr "" +"绘制一个矩形。 第一个参数必须为窗口对象;其余参数均为相对于该窗口的坐标值。 第二和第三个参数为要绘制的矩形的左上角的 y 和 x " +"坐标值;第四和第五个参数为其右下角的 y 和 x 坐标值。 将会使用 VT100/IBM PC 形式的字符在可用的终端上(包括 xterm " +"和大多数其他软件终端模拟器)绘制矩形。 在其他情况下则将使用 ASCII 横杠、竖线和加号绘制。" + +#: ../../library/curses.rst:1783 +msgid "Textbox objects" +msgstr "文本框对象" + +#: ../../library/curses.rst:1785 +msgid "You can instantiate a :class:`Textbox` object as follows:" +msgstr "你可以通过如下方式实例化一个 :class:`Textbox`:" + +#: ../../library/curses.rst:1790 +msgid "" +"Return a textbox widget object. The *win* argument should be a curses " +":ref:`window ` object in which the textbox is to be " +"contained. The edit cursor of the textbox is initially located at the upper " +"left hand corner of the containing window, with coordinates ``(0, 0)``. The " +"instance's :attr:`stripspaces` flag is initially on." +msgstr "" +"返回一个文本框控件对象。 *win* 参数必须是一个 curses :ref:`窗口 ` " +"对象,文本框将被包含在其中。 文本框的编辑光标在初始时位于包含窗口的左上角,坐标值为 ``(0, 0)``。 实例的 " +":attr:`stripspaces` 旗标初始时为启用。" + +#: ../../library/curses.rst:1796 +msgid ":class:`Textbox` objects have the following methods:" +msgstr ":class:`Textbox` 对象具有以下方法:" + +#: ../../library/curses.rst:1801 +msgid "" +"This is the entry point you will normally use. It accepts editing " +"keystrokes until one of the termination keystrokes is entered. If " +"*validator* is supplied, it must be a function. It will be called for each " +"keystroke entered with the keystroke as a parameter; command dispatch is " +"done on the result. This method returns the window contents as a string; " +"whether blanks in the window are included is affected by the " +":attr:`stripspaces` attribute." +msgstr "" +"这是你通常将使用的入口点。 它接受编辑按键直到键入了一个终止按键。 如果提供了 *validator*,它必须是一个函数。 " +"它将在每次按键时被调用并传入相应的按键作作为形参;命令发送将在结果上执行。 此方法会以字符串形式返回窗口内容;是否包括窗口中的空白将受到 " +":attr:`stripspaces` 属性的影响。" + +#: ../../library/curses.rst:1812 +msgid "" +"Process a single command keystroke. Here are the supported special " +"keystrokes:" +msgstr "处理单个按键命令。以下是支持的特殊按键:" + +#: ../../library/curses.rst:1816 ../../library/curses.rst:1854 +msgid "Keystroke" +msgstr "按键" + +#: ../../library/curses.rst:1816 +msgid "Action" +msgstr "动作" + +#: ../../library/curses.rst:1818 +msgid ":kbd:`Control-A`" +msgstr ":kbd:`Control-A`" + +#: ../../library/curses.rst:1818 +msgid "Go to left edge of window." +msgstr "转到窗口的左边缘。" + +#: ../../library/curses.rst:1820 ../../library/curses.rst:1856 +msgid ":kbd:`Control-B`" +msgstr ":kbd:`Control-B`" + +#: ../../library/curses.rst:1820 +msgid "Cursor left, wrapping to previous line if appropriate." +msgstr "光标向左,如果可能,包含前一行。" + +#: ../../library/curses.rst:1823 +msgid ":kbd:`Control-D`" +msgstr ":kbd:`Control-D`" + +#: ../../library/curses.rst:1823 +msgid "Delete character under cursor." +msgstr "删除光标下的字符。" + +#: ../../library/curses.rst:1825 +msgid ":kbd:`Control-E`" +msgstr ":kbd:`Control-E`" + +#: ../../library/curses.rst:1825 +msgid "Go to right edge (stripspaces off) or end of line (stripspaces on)." +msgstr "前往右边缘(stripspaces 关闭时)或者行尾(stripspaces 启用时)。" + +#: ../../library/curses.rst:1828 ../../library/curses.rst:1858 +msgid ":kbd:`Control-F`" +msgstr ":kbd:`Control-F`" + +#: ../../library/curses.rst:1828 +msgid "Cursor right, wrapping to next line when appropriate." +msgstr "向右移动光标,适当时换行到下一行。" + +#: ../../library/curses.rst:1831 +msgid ":kbd:`Control-G`" +msgstr ":kbd:`Control-G`" + +#: ../../library/curses.rst:1831 +msgid "Terminate, returning the window contents." +msgstr "终止,返回窗口内容。" + +#: ../../library/curses.rst:1833 +msgid ":kbd:`Control-H`" +msgstr ":kbd:`Control-H`" + +#: ../../library/curses.rst:1833 +msgid "Delete character backward." +msgstr "向后删除字符。" + +#: ../../library/curses.rst:1835 +msgid ":kbd:`Control-J`" +msgstr ":kbd:`Control-J`" + +#: ../../library/curses.rst:1835 +msgid "Terminate if the window is 1 line, otherwise insert newline." +msgstr "如果窗口是1行则终止,否则插入换行符。" + +#: ../../library/curses.rst:1838 +msgid ":kbd:`Control-K`" +msgstr ":kbd:`Control-K`" + +#: ../../library/curses.rst:1838 +msgid "If line is blank, delete it, otherwise clear to end of line." +msgstr "如果行为空,则删除它,否则清除到行尾。" + +#: ../../library/curses.rst:1841 +msgid ":kbd:`Control-L`" +msgstr ":kbd:`Control-L`" + +#: ../../library/curses.rst:1841 +msgid "Refresh screen." +msgstr "刷新屏幕。" + +#: ../../library/curses.rst:1843 ../../library/curses.rst:1862 +msgid ":kbd:`Control-N`" +msgstr ":kbd:`Control-N`" + +#: ../../library/curses.rst:1843 +msgid "Cursor down; move down one line." +msgstr "光标向下;向下移动一行。" + +#: ../../library/curses.rst:1845 +msgid ":kbd:`Control-O`" +msgstr ":kbd:`Control-O`" + +#: ../../library/curses.rst:1845 +msgid "Insert a blank line at cursor location." +msgstr "在光标位置插入一个空行。" + +#: ../../library/curses.rst:1847 ../../library/curses.rst:1860 +msgid ":kbd:`Control-P`" +msgstr ":kbd:`Control-P`" + +#: ../../library/curses.rst:1847 +msgid "Cursor up; move up one line." +msgstr "光标向上;向上移动一行。" + +#: ../../library/curses.rst:1850 +msgid "" +"Move operations do nothing if the cursor is at an edge where the movement is" +" not possible. The following synonyms are supported where possible:" +msgstr "如果光标位于无法移动的边缘,则移动操作不执行任何操作。在可能的情况下,支持以下同义词:" + +#: ../../library/curses.rst:1856 +msgid ":const:`KEY_LEFT`" +msgstr ":const:`KEY_LEFT`" + +#: ../../library/curses.rst:1858 +msgid ":const:`KEY_RIGHT`" +msgstr ":const:`KEY_RIGHT`" + +#: ../../library/curses.rst:1860 +msgid ":const:`KEY_UP`" +msgstr ":const:`KEY_UP`" + +#: ../../library/curses.rst:1862 +msgid ":const:`KEY_DOWN`" +msgstr ":const:`KEY_DOWN`" + +#: ../../library/curses.rst:1864 +msgid ":const:`KEY_BACKSPACE`" +msgstr ":const:`KEY_BACKSPACE`" + +#: ../../library/curses.rst:1864 +msgid ":kbd:`Control-h`" +msgstr ":kbd:`Control-h`" + +#: ../../library/curses.rst:1867 +msgid "" +"All other keystrokes are treated as a command to insert the given character " +"and move right (with line wrapping)." +msgstr "所有其他按键将被视为插入给定字符并右移的命令(带有自动折行)。" + +#: ../../library/curses.rst:1873 +msgid "" +"Return the window contents as a string; whether blanks in the window are " +"included is affected by the :attr:`stripspaces` member." +msgstr "以字符串形式返回窗口内容;是否包括窗口中的空白将受到 :attr:`stripspaces` 成员的影响。" + +#: ../../library/curses.rst:1879 +msgid "" +"This attribute is a flag which controls the interpretation of blanks in the " +"window. When it is on, trailing blanks on each line are ignored; any cursor" +" motion that would land the cursor on a trailing blank goes to the end of " +"that line instead, and trailing blanks are stripped when the window contents" +" are gathered." +msgstr "" +"此属性是控制窗口中空白解读方式的旗标。 " +"当启用时,每一行的末尾空白会被忽略;任何将光标定位至末尾空白的光标动作都将改为前往该行末尾,并且在收集窗口内容时将去除末尾空白。" diff --git a/library/custominterp.po b/library/custominterp.po new file mode 100644 index 000000000..03b836014 --- /dev/null +++ b/library/custominterp.po @@ -0,0 +1,42 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) 2001-2022, Python Software Foundation +# This file is distributed under the same license as the Python package. +# FIRST AUTHOR , YEAR. +# +# Translators: +# Alpha Du , 2019 +# Freesand Leo , 2019 +# +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: Python 3.9\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2022-11-04 14:34+0000\n" +"PO-Revision-Date: 2017-02-16 23:05+0000\n" +"Last-Translator: Freesand Leo , 2019\n" +"Language-Team: Chinese (China) (https://www.transifex.com/python-doc/teams/5390/zh_CN/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: zh_CN\n" +"Plural-Forms: nplurals=1; plural=0;\n" + +#: ../../library/custominterp.rst:5 +msgid "Custom Python Interpreters" +msgstr "自定义 Python 解释器" + +#: ../../library/custominterp.rst:7 +msgid "" +"The modules described in this chapter allow writing interfaces similar to " +"Python's interactive interpreter. If you want a Python interpreter that " +"supports some special feature in addition to the Python language, you should" +" look at the :mod:`code` module. (The :mod:`codeop` module is lower-level, " +"used to support compiling a possibly-incomplete chunk of Python code.)" +msgstr "" +"本章中描述的模块允许编写类似于 Python 的交互式解释器的接口。 如果你想要一个支持附加一些特殊功能到 Python 语言的 Python " +"解释器,你应该看看 :mod:`code` 模块。 ( :mod:`codeop` 模块是低层级的,用于支持编译可能不完整的 Python 代码块。)" + +#: ../../library/custominterp.rst:13 +msgid "The full list of modules described in this chapter is:" +msgstr "本章描述的完整模块列表如下:" diff --git a/library/dataclasses.po b/library/dataclasses.po new file mode 100644 index 000000000..cf9f9b6c5 --- /dev/null +++ b/library/dataclasses.po @@ -0,0 +1,824 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) 2001-2024, Python Software Foundation +# This file is distributed under the same license as the Python package. +# FIRST AUTHOR , YEAR. +# +# Translators: +# Shengjing Zhu , 2018 +# ww song , 2018 +# Alpha Du , 2019 +# Freesand Leo , 2021 +# Rafael Fontenelle , 2024 +# +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: Python 3.9\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2024-04-15 06:01+0000\n" +"PO-Revision-Date: 2018-06-29 21:06+0000\n" +"Last-Translator: Rafael Fontenelle , 2024\n" +"Language-Team: Chinese (China) (https://app.transifex.com/python-doc/teams/5390/zh_CN/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: zh_CN\n" +"Plural-Forms: nplurals=1; plural=0;\n" + +#: ../../library/dataclasses.rst:2 +msgid ":mod:`dataclasses` --- Data Classes" +msgstr ":mod:`dataclasses` --- 数据类" + +#: ../../library/dataclasses.rst:10 +msgid "**Source code:** :source:`Lib/dataclasses.py`" +msgstr "**源码:** :source:`Lib/dataclasses.py`" + +#: ../../library/dataclasses.rst:14 +msgid "" +"This module provides a decorator and functions for automatically adding " +"generated :term:`special method`\\s such as :meth:`__init__` and " +":meth:`__repr__` to user-defined classes. It was originally described in " +":pep:`557`." +msgstr "" +"这个模块提供了一个装饰器和一些函数,用于自动添加生成的 :term:`special method`,例如 :meth:`__init__` 和 " +":meth:`__repr__` 到用户定义的类。 它最初描述于 :pep:`557` 。" + +#: ../../library/dataclasses.rst:19 +msgid "" +"The member variables to use in these generated methods are defined using " +":pep:`526` type annotations. For example, this code::" +msgstr "在这些生成的方法中使用的成员变量是使用 :pep:`526` 类型标注来定义的。例如以下代码:" + +#: ../../library/dataclasses.rst:34 +msgid "will add, among other things, a :meth:`__init__` that looks like::" +msgstr "将在添加的内容中包括如下所示的 :meth:`__init__`::" + +#: ../../library/dataclasses.rst:41 +msgid "" +"Note that this method is automatically added to the class: it is not " +"directly specified in the ``InventoryItem`` definition shown above." +msgstr "请注意,此方法会自动添加到类中:而不是在如上所示的 ``InventoryItem`` 定义中被直接指定。" + +#: ../../library/dataclasses.rst:47 +msgid "Module-level decorators, classes, and functions" +msgstr "模块级装饰器、类和函数" + +#: ../../library/dataclasses.rst:51 +msgid "" +"This function is a :term:`decorator` that is used to add generated " +":term:`special method`\\s to classes, as described below." +msgstr "这个函数是 :term:`decorator` ,用于将生成的 :term:`special method` 添加到类中,如下所述。" + +#: ../../library/dataclasses.rst:54 +msgid "" +"The :func:`dataclass` decorator examines the class to find ``field``\\s. A " +"``field`` is defined as a class variable that has a :term:`type annotation " +"`. With two exceptions described below, nothing in " +":func:`dataclass` examines the type specified in the variable annotation." +msgstr "" +":func:`dataclass` 装饰器会检查类以查找 ``field`` —— ``field`` 被定义为具有 :term:`类型标注 " +"` 的类变量。除了下面描述的两个例外,在 :func:`dataclass` " +"中没有什么东西会去检查这些变量标注成了何种类型。" + +#: ../../library/dataclasses.rst:60 +msgid "" +"The order of the fields in all of the generated methods is the order in " +"which they appear in the class definition." +msgstr "这些字段在所有生成的方法中的顺序,都是它们在类定义中出现的顺序。" + +#: ../../library/dataclasses.rst:63 +msgid "" +"The :func:`dataclass` decorator will add various \"dunder\" methods to the " +"class, described below. If any of the added methods already exist in the " +"class, the behavior depends on the parameter, as documented below. The " +"decorator returns the same class that it is called on; no new class is " +"created." +msgstr "" +":func:`dataclass` 装饰器将向类中添加如下的各种 dunder " +"方法。如果所添加的方法已存在于类中,则行为将取决于下面所列出的形参。该装饰器会返回调用它的类;不会创建新的类。" + +#: ../../library/dataclasses.rst:69 +msgid "" +"If :func:`dataclass` is used just as a simple decorator with no parameters, " +"it acts as if it has the default values documented in this signature. That " +"is, these three uses of :func:`dataclass` are equivalent::" +msgstr "" +"如果 :func:`dataclass` 仅用作没有参数的简单装饰器,它将使用它的函数签名中的默认值。也就是说,这三种 " +":func:`dataclass` 用法是等价的:" + +#: ../../library/dataclasses.rst:86 +msgid "The parameters to :func:`dataclass` are:" +msgstr ":func:`dataclass` 的参数有:" + +#: ../../library/dataclasses.rst:88 +msgid "" +"``init``: If true (the default), a :meth:`__init__` method will be " +"generated." +msgstr "``init``: 如果为真值(默认),将生成一个 :meth:`__init__` 方法。" + +#: ../../library/dataclasses.rst:91 +msgid "" +"If the class already defines :meth:`__init__`, this parameter is ignored." +msgstr "如果类已定义 :meth:`__init__` ,则忽略此参数。" + +#: ../../library/dataclasses.rst:94 +msgid "" +"``repr``: If true (the default), a :meth:`__repr__` method will be " +"generated. The generated repr string will have the class name and the name " +"and repr of each field, in the order they are defined in the class. Fields " +"that are marked as being excluded from the repr are not included. For " +"example: ``InventoryItem(name='widget', unit_price=3.0, " +"quantity_on_hand=10)``." +msgstr "" +"``repr`` :如果为真值(默认),将生成一个 :meth:`__repr__` 方法。 生成的 repr 字符串将具有类名以及每个字段的名称和 " +"repr ,按照它们在类中定义的顺序。不包括标记为从 repr 中排除的字段。 例如:``InventoryItem(name='widget', " +"unit_price=3.0, quantity_on_hand=10)``。" + +#: ../../library/dataclasses.rst:101 +msgid "" +"If the class already defines :meth:`__repr__`, this parameter is ignored." +msgstr "如果类已定义 :meth:`__repr__` ,则忽略此参数。" + +#: ../../library/dataclasses.rst:104 +msgid "" +"``eq``: If true (the default), an :meth:`__eq__` method will be generated. " +"This method compares the class as if it were a tuple of its fields, in " +"order. Both instances in the comparison must be of the identical type." +msgstr "" +"``eq`` :如果为true(默认值),将生成 :meth:`__eq__` " +"方法。此方法将类作为其字段的元组按顺序比较。比较中的两个实例必须是相同的类型。" + +#: ../../library/dataclasses.rst:109 +msgid "" +"If the class already defines :meth:`__eq__`, this parameter is ignored." +msgstr "如果类已定义 :meth:`__eq__` ,则忽略此参数。" + +#: ../../library/dataclasses.rst:112 +msgid "" +"``order``: If true (the default is ``False``), :meth:`__lt__`, " +":meth:`__le__`, :meth:`__gt__`, and :meth:`__ge__` methods will be " +"generated. These compare the class as if it were a tuple of its fields, in " +"order. Both instances in the comparison must be of the identical type. If " +"``order`` is true and ``eq`` is false, a :exc:`ValueError` is raised." +msgstr "" +"``order`` :如果为真值(默认为 ``False`` ),则 :meth:`__lt__` 、 :meth:`__le__` 、 " +":meth:`__gt__` 和 :meth:`__ge__` 方法将生成。 这将类作为其字段的元组按顺序比较。比较中的两个实例必须是相同的类型。如果 " +"``order`` 为真值并且 ``eq`` 为假值 ,则引发 :exc:`ValueError` 。" + +#: ../../library/dataclasses.rst:119 +msgid "" +"If the class already defines any of :meth:`__lt__`, :meth:`__le__`, " +":meth:`__gt__`, or :meth:`__ge__`, then :exc:`TypeError` is raised." +msgstr "" +"如果类已经定义了 :meth:`__lt__` 、 :meth:`__le__` 、 :meth:`__gt__` 或者 :meth:`__ge__` " +"中的任意一个,将引发 :exc:`TypeError` 。" + +#: ../../library/dataclasses.rst:123 +msgid "" +"``unsafe_hash``: If ``False`` (the default), a :meth:`__hash__` method is " +"generated according to how ``eq`` and ``frozen`` are set." +msgstr "" +"``unsafe_hash`` :如果为 ``False`` (默认值),则根据 ``eq`` 和 ``frozen`` 的设置方式生成 " +":meth:`__hash__` 方法。" + +#: ../../library/dataclasses.rst:126 +msgid "" +":meth:`__hash__` is used by built-in :meth:`hash()`, and when objects are " +"added to hashed collections such as dictionaries and sets. Having a " +":meth:`__hash__` implies that instances of the class are immutable. " +"Mutability is a complicated property that depends on the programmer's " +"intent, the existence and behavior of :meth:`__eq__`, and the values of the " +"``eq`` and ``frozen`` flags in the :func:`dataclass` decorator." +msgstr "" +":meth:`__hash__` 由内置的 :meth:`hash()` 使用,当对象被添加到散列集合(如字典和集合)时。有一个 " +":meth:`__hash__` 意味着类的实例是不可变的。可变性是一个复杂的属性,取决于程序员的意图, :meth:`__eq__` " +"的存在性和行为,以及 :func:`dataclass` 装饰器中 ``eq`` 和 ``frozen`` 标志的值。" + +#: ../../library/dataclasses.rst:133 +msgid "" +"By default, :func:`dataclass` will not implicitly add a :meth:`__hash__` " +"method unless it is safe to do so. Neither will it add or change an " +"existing explicitly defined :meth:`__hash__` method. Setting the class " +"attribute ``__hash__ = None`` has a specific meaning to Python, as described" +" in the :meth:`__hash__` documentation." +msgstr "" +"默认情况下, :func:`dataclass` 不会隐式添加 :meth:`__hash__` 方法,除非这样做是安全的。 " +"它也不会添加或更改现有的明确定义的 :meth:`__hash__` 方法。 设置类属性 ``__hash__ = None`` 对 Python " +"具有特定含义,如 :meth:`__hash__` 文档中所述。" + +#: ../../library/dataclasses.rst:139 +msgid "" +"If :meth:`__hash__` is not explicitly defined, or if it is set to ``None``, " +"then :func:`dataclass` *may* add an implicit :meth:`__hash__` method. " +"Although not recommended, you can force :func:`dataclass` to create a " +":meth:`__hash__` method with ``unsafe_hash=True``. This might be the case if" +" your class is logically immutable but can nonetheless be mutated. This is a" +" specialized use case and should be considered carefully." +msgstr "" +"如果 :meth:`__hash__` 没有显式定义,或者它被设为 ``None``,则 :func:`dataclass` *可能* 会添加一个隐式 " +":meth:`__hash__` 方法。 虽然并不推荐,但你可以用 ``unsafe_hash=True`` 来强制 :func:`dataclass`" +" 创建一个 :meth:`__hash__` 方法。 如果你的类在逻辑上不可变但却仍然可被修改那么可能就是这种情况。 " +"这是一个特殊用例并且应当被仔细地考虑。" + +#: ../../library/dataclasses.rst:146 +msgid "" +"Here are the rules governing implicit creation of a :meth:`__hash__` method." +" Note that you cannot both have an explicit :meth:`__hash__` method in your" +" dataclass and set ``unsafe_hash=True``; this will result in a " +":exc:`TypeError`." +msgstr "" +"以下是隐式创建 :meth:`__hash__` 方法的规则。请注意,你不能在数据类中都使用显式的 :meth:`__hash__` 方法并设置 " +"``unsafe_hash=True`` ;这将导致 :exc:`TypeError` 。" + +#: ../../library/dataclasses.rst:151 +msgid "" +"If ``eq`` and ``frozen`` are both true, by default :func:`dataclass` will " +"generate a :meth:`__hash__` method for you. If ``eq`` is true and " +"``frozen`` is false, :meth:`__hash__` will be set to ``None``, marking it " +"unhashable (which it is, since it is mutable). If ``eq`` is false, " +":meth:`__hash__` will be left untouched meaning the :meth:`__hash__` method " +"of the superclass will be used (if the superclass is :class:`object`, this " +"means it will fall back to id-based hashing)." +msgstr "" +"如果 ``eq`` 和 ``frozen`` 都是 true,默认情况下 :func:`dataclass` 将为你生成一个 " +":meth:`__hash__` 方法。如果 ``eq`` 为 true 且 ``frozen`` 为 false ,则 " +":meth:`__hash__` 将被设置为 ``None`` ,标记它不可用(因为它是可变的)。如果 ``eq`` 为 false ,则 " +":meth:`__hash__` 将保持不变,这意味着将使用超类的 :meth:`__hash__` 方法(如果超类是 :class:`object` " +",这意味着它将回到基于id的hash)。" + +#: ../../library/dataclasses.rst:159 +msgid "" +"``frozen``: If true (the default is ``False``), assigning to fields will " +"generate an exception. This emulates read-only frozen instances. If " +":meth:`__setattr__` or :meth:`__delattr__` is defined in the class, then " +":exc:`TypeError` is raised. See the discussion below." +msgstr "" +"``frozen``: 如为真值 (默认值为 ``False``),则对字段赋值将会产生异常。 这模拟了只读的冻结实例。 如果在类中定义了 " +":meth:`__setattr__` 或 :meth:`__delattr__` 则将会引发 :exc:`TypeError`。 参见下文的讨论。" + +#: ../../library/dataclasses.rst:164 +msgid "" +"``field``\\s may optionally specify a default value, using normal Python " +"syntax::" +msgstr "可以用普通的 Python 语法为各个 ``field`` 指定默认值:" + +#: ../../library/dataclasses.rst:172 +msgid "" +"In this example, both ``a`` and ``b`` will be included in the added " +":meth:`__init__` method, which will be defined as::" +msgstr "在这个例子中, ``a`` 和 ``b`` 都将包含在添加的 :meth:`__init__` 方法中,它们将被定义为::" + +#: ../../library/dataclasses.rst:177 +msgid "" +":exc:`TypeError` will be raised if a field without a default value follows a" +" field with a default value. This is true whether this occurs in a single " +"class, or as a result of class inheritance." +msgstr "" +"如果在具有默认值的字段之后存在没有默认值的字段,将会引发 :exc:`TypeError`。无论此情况是发生在单个类中还是作为类继承的结果,都是如此。" + +#: ../../library/dataclasses.rst:183 +msgid "" +"For common and simple use cases, no other functionality is required. There " +"are, however, some dataclass features that require additional per-field " +"information. To satisfy this need for additional information, you can " +"replace the default field value with a call to the provided :func:`field` " +"function. For example::" +msgstr "" +"大多数时候,对于简单常见的用途,前述的功能已经足够了。而有些功能需要字段提供额外的信息来启用。为了满足这种对附加信息的需求,你可以通过调用提供的 " +":func:`field` 函数来替换字段默认值。例如:" + +#: ../../library/dataclasses.rst:196 +msgid "" +"As shown above, the ``MISSING`` value is a sentinel object used to detect if" +" the ``default`` and ``default_factory`` parameters are provided. This " +"sentinel is used because ``None`` is a valid value for ``default``. No code" +" should directly use the ``MISSING`` value." +msgstr "" +"如上所示, ``MISSING`` 值是一个 sentinel 对象,用于检测是否提供了 ``default`` 和 " +"``default_factory`` 参数。 使用此 sentinel 是因为 ``None`` 是 ``default`` " +"的有效值。没有代码应该直接使用 ``MISSING`` 值。" + +#: ../../library/dataclasses.rst:202 +msgid "The parameters to :func:`field` are:" +msgstr ":func:`field` 的形参有:" + +#: ../../library/dataclasses.rst:204 +msgid "" +"``default``: If provided, this will be the default value for this field. " +"This is needed because the :meth:`field` call itself replaces the normal " +"position of the default value." +msgstr "" +"``default``:如果提供,这将是该字段的默认值。设计这个形参是因为 :meth:`field` 调用将会占据原来用来提供默认值的位置。" + +#: ../../library/dataclasses.rst:208 +msgid "" +"``default_factory``: If provided, it must be a zero-argument callable that " +"will be called when a default value is needed for this field. Among other " +"purposes, this can be used to specify fields with mutable default values, as" +" discussed below. It is an error to specify both ``default`` and " +"``default_factory``." +msgstr "" +"``default_factory``:如果提供,它必须是一个需要零个参数的可调用对象,当该字段需要一个默认值时,它将被调用。这能解决当默认值是可变对象时会带来的问题,如下所述。同时指定" +" ``default`` 和 ``default_factory`` 将产生错误。" + +#: ../../library/dataclasses.rst:214 +msgid "" +"``init``: If true (the default), this field is included as a parameter to " +"the generated :meth:`__init__` method." +msgstr "``init`` :如果为true(默认值),则该字段作为参数包含在生成的 :meth:`__init__` 方法中。" + +#: ../../library/dataclasses.rst:217 +msgid "" +"``repr``: If true (the default), this field is included in the string " +"returned by the generated :meth:`__repr__` method." +msgstr "``repr`` :如果为true(默认值),则该字段包含在生成的 :meth:`__repr__` 方法返回的字符串中。" + +#: ../../library/dataclasses.rst:220 +msgid "" +"``compare``: If true (the default), this field is included in the generated " +"equality and comparison methods (:meth:`__eq__`, :meth:`__gt__`, et al.)." +msgstr "" +"``compare`` :如果为true(默认值),则该字段包含在生成的相等性和比较方法中( :meth:`__eq__` , " +":meth:`__gt__` 等等)。" + +#: ../../library/dataclasses.rst:224 +msgid "" +"``hash``: This can be a bool or ``None``. If true, this field is included " +"in the generated :meth:`__hash__` method. If ``None`` (the default), use " +"the value of ``compare``: this would normally be the expected behavior. A " +"field should be considered in the hash if it's used for comparisons. " +"Setting this value to anything other than ``None`` is discouraged." +msgstr "" +"``hash`` :这可以是布尔值或 ``None`` 。如果为true,则此字段包含在生成的 :meth:`__hash__` 方法中。如果为 " +"``None`` (默认值),请使用 ``compare`` 的值,这通常是预期的行为。如果字段用于比较,则应在 hash " +"中考虑该字段。不鼓励将此值设置为 ``None`` 以外的任何值。" + +#: ../../library/dataclasses.rst:231 +msgid "" +"One possible reason to set ``hash=False`` but ``compare=True`` would be if a" +" field is expensive to compute a hash value for, that field is needed for " +"equality testing, and there are other fields that contribute to the type's " +"hash value. Even if a field is excluded from the hash, it will still be " +"used for comparisons." +msgstr "" +"设置 ``hash=False`` 但 ``compare=True`` " +"的一个合理情况是,一个计算哈希值的代价很高的字段是检验等价性需要的,且还有其他字段可以用于计算类型的哈希值。可以从哈希值中排除该字段,但仍令它用于比较。" + +#: ../../library/dataclasses.rst:237 +msgid "" +"``metadata``: This can be a mapping or None. None is treated as an empty " +"dict. This value is wrapped in :func:`~types.MappingProxyType` to make it " +"read-only, and exposed on the :class:`Field` object. It is not used at all " +"by Data Classes, and is provided as a third-party extension mechanism. " +"Multiple third-parties can each have their own key, to use as a namespace in" +" the metadata." +msgstr "" +"``metadata``:可以是映射或 None。None 被视为一个空的字典。这个值将被包装在 " +":func:`~types.MappingProxyType` 中,使其只读,并暴露在 :class:`Field` " +"对象上。数据类不使用它——它是作为第三方扩展机制提供的。多个第三方可以各自拥有自己的键,以用作元数据中的命名空间。" + +#: ../../library/dataclasses.rst:245 +msgid "" +"If the default value of a field is specified by a call to :func:`field()`, " +"then the class attribute for this field will be replaced by the specified " +"``default`` value. If no ``default`` is provided, then the class attribute " +"will be deleted. The intent is that after the :func:`dataclass` decorator " +"runs, the class attributes will all contain the default values for the " +"fields, just as if the default value itself were specified. For example, " +"after::" +msgstr "" +"如果通过调用 :func:`field()` 指定字段的默认值,则该字段对应的类属性的值将最终被替换为指定的 ``default`` 值。如果没有提供 " +"``default``,那么将删除该字段对应的类属性。目的是在 :func:`dataclass` " +"装饰器运行之后,类属性将包含字段的默认值,和直接指定了默认值一样。例如,在运行如下代码之后:" + +#: ../../library/dataclasses.rst:261 +msgid "" +"The class attribute ``C.z`` will be ``10``, the class attribute ``C.t`` will" +" be ``20``, and the class attributes ``C.x`` and ``C.y`` will not be set." +msgstr "" +"类属性 ``C.z`` 将是 ``10``,类属性 ``C.t`` 将是 ``20``,类属性 ``C.x`` 和 ``C.y`` 将不设置。" + +#: ../../library/dataclasses.rst:267 +msgid "" +":class:`Field` objects describe each defined field. These objects are " +"created internally, and are returned by the :func:`fields` module-level " +"method (see below). Users should never instantiate a :class:`Field` object " +"directly. Its documented attributes are:" +msgstr "" +":class:`Field` 对象描述每个已定义的字段。这些对象在内部被创建,并由 :func:`fields` " +"模块级方法返回(见下)。用户永远不应该直接实例化 :class:`Field` 对象。它的下列属性的含义是由文档规定的:" + +#: ../../library/dataclasses.rst:272 +msgid "``name``: The name of the field." +msgstr "``name``:字段的名称。" + +#: ../../library/dataclasses.rst:274 +msgid "``type``: The type of the field." +msgstr "``type``:字段的类型。" + +#: ../../library/dataclasses.rst:276 +msgid "" +"``default``, ``default_factory``, ``init``, ``repr``, ``hash``, ``compare``," +" and ``metadata`` have the identical meaning and values as they do in the " +":func:`field` declaration." +msgstr "" +"``default`` 、 ``default_factory`` 、 ``init`` 、 ``repr`` 、 ``hash`` 、 " +"``compare`` 以及 ``metadata`` 与具有和 :func:`field` 声明中相同的意义和值。" + +#: ../../library/dataclasses.rst:280 +msgid "" +"Other attributes may exist, but they are private and must not be inspected " +"or relied on." +msgstr "可能存在其他属性,但它们是私有的。用户不应检查或依赖于这些属性。" + +#: ../../library/dataclasses.rst:285 +msgid "" +"Returns a tuple of :class:`Field` objects that define the fields for this " +"dataclass. Accepts either a dataclass, or an instance of a dataclass. " +"Raises :exc:`TypeError` if not passed a dataclass or instance of one. Does " +"not return pseudo-fields which are ``ClassVar`` or ``InitVar``." +msgstr "" +"返回一个能描述此数据类所包含的字段的元组,元组的每一项都是 :class:`Field` " +"对象。接受数据类或数据类的实例。如果没有传递一个数据类或实例将引发 :exc:`TypeError`。不返回 ``ClassVar`` 或 " +"``InitVar`` 等伪字段。" + +#: ../../library/dataclasses.rst:292 +msgid "" +"Converts the dataclass ``obj`` to a dict (by using the factory function " +"``dict_factory``). Each dataclass is converted to a dict of its fields, as " +"``name: value`` pairs. dataclasses, dicts, lists, and tuples are recursed " +"into. Other objects are copied with :func:`copy.deepcopy`." +msgstr "" +"将数据类 ``obj`` 转换为一个字典(使用工厂函数 ``dict_factory``)。每个数据类被转换为以 ``name: value`` " +"键值对来储存其字段的字典。数据类、字典、列表和元组的内容会被递归地访问。其它对象用 :func:`copy.deepcopy` 来复制。" + +#: ../../library/dataclasses.rst:298 +msgid "Example of using :func:`asdict` on nested dataclasses::" +msgstr "在嵌套的数据类上使用 :func:`asdict` 的例子:" + +#: ../../library/dataclasses.rst:315 ../../library/dataclasses.rst:335 +msgid "To create a shallow copy, the following workaround may be used::" +msgstr "要创建一个浅拷贝,可以使用以下的变通方法:" + +#: ../../library/dataclasses.rst:319 +msgid "" +":func:`asdict` raises :exc:`TypeError` if ``obj`` is not a dataclass " +"instance." +msgstr "如果 ``obj`` 不是一个数据类实例,:func:`asdict` 引发 :exc:`TypeError`。" + +#: ../../library/dataclasses.rst:324 +msgid "" +"Converts the dataclass ``obj`` to a tuple (by using the factory function " +"``tuple_factory``). Each dataclass is converted to a tuple of its field " +"values. dataclasses, dicts, lists, and tuples are recursed into. Other " +"objects are copied with :func:`copy.deepcopy`." +msgstr "" +"将数据类 ``obj`` 转换为一个元组(使用工厂函数 " +"``tuple_factory``)。每个数据类被转换为其字段的值的元组。数据类、字典、列表和元组的内容会被递归地访问。其它对象用 " +":func:`copy.deepcopy` 来复制。" + +#: ../../library/dataclasses.rst:330 +msgid "Continuing from the previous example::" +msgstr "继续前一个例子:" + +#: ../../library/dataclasses.rst:339 +msgid "" +":func:`astuple` raises :exc:`TypeError` if ``obj`` is not a dataclass " +"instance." +msgstr "如果 ``obj`` 不是一个数据类实例,:func:`astuple` 引发 :exc:`TypeError`。" + +#: ../../library/dataclasses.rst:344 +msgid "" +"Creates a new dataclass with name ``cls_name``, fields as defined in " +"``fields``, base classes as given in ``bases``, and initialized with a " +"namespace as given in ``namespace``. ``fields`` is an iterable whose " +"elements are each either ``name``, ``(name, type)``, or ``(name, type, " +"Field)``. If just ``name`` is supplied, ``typing.Any`` is used for " +"``type``. The values of ``init``, ``repr``, ``eq``, ``order``, " +"``unsafe_hash``, and ``frozen`` have the same meaning as they do in " +":func:`dataclass`." +msgstr "" +"创建一个名为 ``cls_name`` 的新数据类,字段为 ``fields`` 中定义的字段,基类为 ``bases`` 中给出的基类,并使用 " +"``namespace`` 中给出的命名空间进行初始化。 ``fields`` 是一个可迭代的元素,每个元素都是 ``name`` 、 ``(name," +" type)`` 或 ``(name, type, Field)`` 。 如果只提供``name`` , ``type`` 为 " +"``typing.Any`` 。 ``init`` 、 ``repr`` 、 ``eq`` 、 ``order`` 、 ``unsafe_hash`` " +"和 ``frozen`` 的值与它们在 :func:`dataclass` 中的含义相同。" + +#: ../../library/dataclasses.rst:353 +msgid "" +"This function is not strictly required, because any Python mechanism for " +"creating a new class with ``__annotations__`` can then apply the " +":func:`dataclass` function to convert that class to a dataclass. This " +"function is provided as a convenience. For example::" +msgstr "" +"此函数不是必需的,因为任何用于创建带有 ``__annotations__`` 的新类的 Python 机制都可以进一步用 " +":func:`dataclass` 函数将创建的类转换为数据类。提供此函数是为了方便。例如:" + +#: ../../library/dataclasses.rst:365 +msgid "Is equivalent to::" +msgstr "等价于:" + +#: ../../library/dataclasses.rst:378 +msgid "" +"Creates a new object of the same type as ``obj``, replacing fields with " +"values from ``changes``. If ``obj`` is not a Data Class, raises " +":exc:`TypeError`. If values in ``changes`` do not specify fields, raises " +":exc:`TypeError`." +msgstr "" +"创建一个与 ``obj`` 类型相同的新对象,将字段替换为 ``changes`` 里的值。如果 ``obj`` 不是数据类,则抛出 " +":exc:`TypeError` 。如果 ``changes`` 里的值没有指定要替换的字段名,则抛出 :exc:`TypeError`。" + +#: ../../library/dataclasses.rst:383 +msgid "" +"The newly returned object is created by calling the :meth:`__init__` method " +"of the dataclass. This ensures that :meth:`__post_init__`, if present, is " +"also called." +msgstr "" +"新返回的对象通过调用数据类的 :meth:`__init__` 方法创建。这确保了如果存在 :meth:`__post_init__` ,其也被调用。" + +#: ../../library/dataclasses.rst:387 +msgid "" +"Init-only variables without default values, if any exist, must be specified " +"on the call to :func:`replace` so that they can be passed to " +":meth:`__init__` and :meth:`__post_init__`." +msgstr "" +"如果存在没有默认值的仅初始化变量,必须在调用 :func:`replace` 时指定,以便它们可以传递给 :meth:`__init__` 和 " +":meth:`__post_init__` 。" + +#: ../../library/dataclasses.rst:391 +msgid "" +"It is an error for ``changes`` to contain any fields that are defined as " +"having ``init=False``. A :exc:`ValueError` will be raised in this case." +msgstr "" +"``changes`` 包含任何定义为 ``init=False`` 的字段是错误的。在这种情况下会引发 :exc:`ValueError` 。" + +#: ../../library/dataclasses.rst:395 +msgid "" +"Be forewarned about how ``init=False`` fields work during a call to " +":func:`replace`. They are not copied from the source object, but rather are" +" initialized in :meth:`__post_init__`, if they're initialized at all. It is" +" expected that ``init=False`` fields will be rarely and judiciously used. " +"If they are used, it might be wise to have alternate class constructors, or " +"perhaps a custom ``replace()`` (or similarly named) method which handles " +"instance copying." +msgstr "" +"提前提醒, 字段在 :func:`replace` 被调用时的行为是,当它们被初始化时,不是从源对象直接复制,而是在 " +":meth:`__post_init__` 中初始化。除非保持审慎,否则 ``init=False`` 字段大概很少能被正确地使用。如果有使用 " +"``init=False`` 的字段,那么使用另外的类构造器,或自定义 ``replace()`` 方法(或类似名称的方法)来复制实例,可能会更好。" + +#: ../../library/dataclasses.rst:406 +msgid "" +"Return ``True`` if its parameter is a dataclass or an instance of one, " +"otherwise return ``False``." +msgstr "如果其形参为数据类,或其实例,返回 ``True``,否则返回 ``False``。" + +#: ../../library/dataclasses.rst:409 +msgid "" +"If you need to know if a class is an instance of a dataclass (and not a " +"dataclass itself), then add a further check for ``not isinstance(obj, " +"type)``::" +msgstr "" +"如果你需要知道一个类是否是一个数据类的实例(而不是一个数据类本身),那么再添加一个 ``not isinstance(obj, type)`` 检查:" + +#: ../../library/dataclasses.rst:417 +msgid "Post-init processing" +msgstr "初始化后处理" + +#: ../../library/dataclasses.rst:419 +msgid "" +"The generated :meth:`__init__` code will call a method named " +":meth:`__post_init__`, if :meth:`__post_init__` is defined on the class. It" +" will normally be called as ``self.__post_init__()``. However, if any " +"``InitVar`` fields are defined, they will also be passed to " +":meth:`__post_init__` in the order they were defined in the class. If no " +":meth:`__init__` method is generated, then :meth:`__post_init__` will not " +"automatically be called." +msgstr "" +"生成的 :meth:`__init__` 代码将调用一个名为 :meth:`__post_init__` 的方法,如果在类上已经定义了 " +":meth:`__post_init__` 。它通常被称为 ``self.__post_init__()`` 。但是,如果定义了任何 " +"``InitVar`` 字段,它们也将按照它们在类中定义的顺序传递给 :meth:`__post_init__` 。 如果没有 " +":meth:`__init__` 方法生成,那么 :meth:`__post_init__` 将不会被自动调用。" + +#: ../../library/dataclasses.rst:427 +msgid "" +"Among other uses, this allows for initializing field values that depend on " +"one or more other fields. For example::" +msgstr "在其他用途中,这允许初始化依赖于一个或多个其他字段的字段值。例如::" + +#: ../../library/dataclasses.rst:439 +msgid "" +"The :meth:`__init__` method generated by :func:`dataclass` does not call " +"base class :meth:`__init__` methods. If the base class has an " +":meth:`__init__` method that has to be called, it is common to call this " +"method in a :meth:`__post_init__` method::" +msgstr "" +"由 :func:`dataclass` 所生成的 :meth:`__init__` 方法不会调用基类的 :meth:`__init__` 方法。 " +"如果基类有需要被调用的 :meth:`__init__` 方法,通常是在 :meth:`__post_init__` 方法中调用此方法::" + +#: ../../library/dataclasses.rst:456 +msgid "" +"Note, however, that in general the dataclass-generated :meth:`__init__` " +"methods don't need to be called, since the derived dataclass will take care " +"of initializing all fields of any base class that is a dataclass itself." +msgstr "" +"但是请注意,一般来说 dataclass 生成的 :meth:`__init__` 方法不需要被调用,因为派生的 dataclass " +"将负责初始化任何自身为 dataclass 的基类的所有字段。" + +#: ../../library/dataclasses.rst:460 +msgid "" +"See the section below on init-only variables for ways to pass parameters to " +":meth:`__post_init__`. Also see the warning about how :func:`replace` " +"handles ``init=False`` fields." +msgstr "" +"有关将参数传递给 :meth:`__post_init__` 的方法,请参阅下面有关仅初始化变量的段落。另请参阅关于 :func:`replace` " +"处理 ``init=False`` 字段的警告。" + +#: ../../library/dataclasses.rst:465 +msgid "Class variables" +msgstr "类变量" + +#: ../../library/dataclasses.rst:467 +msgid "" +"One of two places where :func:`dataclass` actually inspects the type of a " +"field is to determine if a field is a class variable as defined in " +":pep:`526`. It does this by checking if the type of the field is " +"``typing.ClassVar``. If a field is a ``ClassVar``, it is excluded from " +"consideration as a field and is ignored by the dataclass mechanisms. Such " +"``ClassVar`` pseudo-fields are not returned by the module-level " +":func:`fields` function." +msgstr "" +"两个地方 :func:`dataclass` 实际检查字段类型的之一是确定字段是否是如 :pep:`526` 所定义的类变量。它通过检查字段的类型是否为" +" ``typing.ClassVar`` 来完成此操作。如果一个字段是一个 ``ClassVar`` " +",它将被排除在考虑范围之外,并被数据类机制忽略。这样的 ``ClassVar`` 伪字段不会由模块级的 :func:`fields` 函数返回。" + +#: ../../library/dataclasses.rst:476 +msgid "Init-only variables" +msgstr "仅初始化变量" + +#: ../../library/dataclasses.rst:478 +msgid "" +"The other place where :func:`dataclass` inspects a type annotation is to " +"determine if a field is an init-only variable. It does this by seeing if " +"the type of a field is of type ``dataclasses.InitVar``. If a field is an " +"``InitVar``, it is considered a pseudo-field called an init-only field. As " +"it is not a true field, it is not returned by the module-level " +":func:`fields` function. Init-only fields are added as parameters to the " +"generated :meth:`__init__` method, and are passed to the optional " +":meth:`__post_init__` method. They are not otherwise used by dataclasses." +msgstr "" +"另一个 :func:`dataclass` 检查类型注解地方是为了确定一个字段是否是一个仅初始化变量。它通过查看字段的类型是否为 " +"``dataclasses.InitVar`` 类型来实现。如果一个字段是一个 ``InitVar`` " +",它被认为是一个称为仅初始化字段的伪字段。因为它不是一个真正的字段,所以它不会被模块级的 :func:`fields` " +"函数返回。仅初始化字段作为参数添加到生成的 :meth:`__init__` 方法中,并传递给可选的 :meth:`__post_init__` " +"方法。数据类不会使用它们。" + +#: ../../library/dataclasses.rst:488 +msgid "" +"For example, suppose a field will be initialized from a database, if a value" +" is not provided when creating the class::" +msgstr "例如,假设在创建类时没有为某个字段提供值,初始化时将从数据库中取值::" + +#: ../../library/dataclasses.rst:503 +msgid "" +"In this case, :func:`fields` will return :class:`Field` objects for ``i`` " +"and ``j``, but not for ``database``." +msgstr "" +"在这种情况下, :func:`fields` 将返回 ``i`` 和 ``j`` 的 :class:`Field` 对象,但不包括 " +"``database`` 。" + +#: ../../library/dataclasses.rst:507 +msgid "Frozen instances" +msgstr "冻结的实例" + +#: ../../library/dataclasses.rst:509 +msgid "" +"It is not possible to create truly immutable Python objects. However, by " +"passing ``frozen=True`` to the :meth:`dataclass` decorator you can emulate " +"immutability. In that case, dataclasses will add :meth:`__setattr__` and " +":meth:`__delattr__` methods to the class. These methods will raise a " +":exc:`FrozenInstanceError` when invoked." +msgstr "" +"无法创建真正不可变的 Python 对象。但是,通过将 ``frozen=True`` 传递给 :meth:`dataclass` " +"装饰器,你可以模拟不变性。在这种情况下,数据类将向类添加 :meth:`__setattr__` 和 :meth:`__delattr__` 方法。 " +"些方法在调用时会引发 :exc:`FrozenInstanceError` 。" + +#: ../../library/dataclasses.rst:515 +msgid "" +"There is a tiny performance penalty when using ``frozen=True``: " +":meth:`__init__` cannot use simple assignment to initialize fields, and must" +" use :meth:`object.__setattr__`." +msgstr "" +"使用 ``frozen=True`` 时会有很小的性能损失: :meth:`__ init__` 不能使用简单的赋值来初始化字段,并必须使用 " +":meth:`object.__setattr__`。" + +#: ../../library/dataclasses.rst:520 +msgid "Inheritance" +msgstr "继承" + +#: ../../library/dataclasses.rst:522 +msgid "" +"When the dataclass is being created by the :meth:`dataclass` decorator, it " +"looks through all of the class's base classes in reverse MRO (that is, " +"starting at :class:`object`) and, for each dataclass that it finds, adds the" +" fields from that base class to an ordered mapping of fields. After all of " +"the base class fields are added, it adds its own fields to the ordered " +"mapping. All of the generated methods will use this combined, calculated " +"ordered mapping of fields. Because the fields are in insertion order, " +"derived classes override base classes. An example::" +msgstr "" +"当数据类由 :meth:`dataclass` 装饰器创建时,它会按反向 MRO 顺序(即,从 :class:`object` " +"开始)查看它的所有基类,并且将找到的每个数据类的字段添加到一个有序映射中。添加完所有基类字段后,它会将自己的字段添加到这个有序映射中。所有生成的方法都将使用这个有序映射。字段会遵守它们被插入的顺序,因此派生类会重写基类。一个例子:" + +#: ../../library/dataclasses.rst:542 +msgid "" +"The final list of fields is, in order, ``x``, ``y``, ``z``. The final type " +"of ``x`` is ``int``, as specified in class ``C``." +msgstr "" +"最后的字段列表依次是 ``x`` 、 ``y`` 、 ``z`` 。 ``x`` 的最终类型是 ``int`` ,如类 ``C`` 中所指定的那样。" + +#: ../../library/dataclasses.rst:545 +msgid "The generated :meth:`__init__` method for ``C`` will look like::" +msgstr "为 ``C`` 生成的 :meth:`__init__` 方法看起来像::" + +#: ../../library/dataclasses.rst:550 +msgid "Default factory functions" +msgstr "默认工厂函数" + +#: ../../library/dataclasses.rst:552 +msgid "" +"If a :func:`field` specifies a ``default_factory``, it is called with zero " +"arguments when a default value for the field is needed. For example, to " +"create a new instance of a list, use::" +msgstr "" +"如果一个 :func:`field` 指定了一个 ``default_factory`` " +",当需要该字段的默认值时,将使用零参数调用它。例如,要创建列表的新实例,请使用::" + +#: ../../library/dataclasses.rst:558 +msgid "" +"If a field is excluded from :meth:`__init__` (using ``init=False``) and the " +"field also specifies ``default_factory``, then the default factory function " +"will always be called from the generated :meth:`__init__` function. This " +"happens because there is no other way to give the field an initial value." +msgstr "" +"如果一个字段被排除在 :meth:`__init__` 之外(使用 ``init=False`` )并且字段也指定 " +"``default_factory`` ,则默认的工厂函数将始终从生成的 :meth:`__init__` " +"函数调用。发生这种情况是因为没有其他方法可以为字段提供初始值。" + +#: ../../library/dataclasses.rst:565 +msgid "Mutable default values" +msgstr "可变的默认值" + +#: ../../library/dataclasses.rst:567 +msgid "" +"Python stores default member variable values in class attributes. Consider " +"this example, not using dataclasses::" +msgstr "Python 在类属性中存储默认成员变量值。思考这个例子,不使用数据类::" + +#: ../../library/dataclasses.rst:582 +msgid "" +"Note that the two instances of class ``C`` share the same class variable " +"``x``, as expected." +msgstr "请注意,类 ``C`` 的两个实例共享相同的类变量 ``x`` ,如预期的那样。" + +#: ../../library/dataclasses.rst:585 +msgid "Using dataclasses, *if* this code was valid::" +msgstr "使用数据类,*如果* 此代码有效:" + +#: ../../library/dataclasses.rst:593 +msgid "it would generate code similar to::" +msgstr "它生成的代码类似于::" + +#: ../../library/dataclasses.rst:604 +msgid "" +"This has the same issue as the original example using class ``C``. That is, " +"two instances of class ``D`` that do not specify a value for ``x`` when " +"creating a class instance will share the same copy of ``x``. Because " +"dataclasses just use normal Python class creation they also share this " +"behavior. There is no general way for Data Classes to detect this " +"condition. Instead, dataclasses will raise a :exc:`TypeError` if it detects" +" a default parameter of type ``list``, ``dict``, or ``set``. This is a " +"partial solution, but it does protect against many common errors." +msgstr "" +"这与使用类 ``C`` 的原始示例具有相同的问题。也就是说,在创建类实例时没有为 ``x`` 指定值的类 ``D`` 的两个实例将共享相同的 ``x``" +" 副本。由于数据类只使用普通的 Python 类创建,因此它们也会共享此行为。数据类没有通用的方法来检测这种情况。相反,如果数据类检测到类型为 " +"``list`` 、 ``dict`` 或 ``set`` 的默认参数,则会引发 :exc:`TypeError` " +"。这是一个部分解决方案,但它可以防止许多常见错误。" + +#: ../../library/dataclasses.rst:614 +msgid "" +"Using default factory functions is a way to create new instances of mutable " +"types as default values for fields::" +msgstr "使用默认工厂函数是一种创建可变类型新实例的方法,并将其作为字段的默认值::" + +#: ../../library/dataclasses.rst:624 +msgid "Exceptions" +msgstr "异常" + +#: ../../library/dataclasses.rst:628 +msgid "" +"Raised when an implicitly defined :meth:`__setattr__` or :meth:`__delattr__`" +" is called on a dataclass which was defined with ``frozen=True``. It is a " +"subclass of :exc:`AttributeError`." +msgstr "" +"在使用 ``frozen=True`` 定义的数据类上调用隐式定义的 :meth:`__setattr__` 或 :meth:`__delattr__`" +" 时引发。 这是 :exc:`AttributeError` 的一个子类。" diff --git a/library/datatypes.po b/library/datatypes.po new file mode 100644 index 000000000..57fbc4fef --- /dev/null +++ b/library/datatypes.po @@ -0,0 +1,49 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) 2001-2022, Python Software Foundation +# This file is distributed under the same license as the Python package. +# FIRST AUTHOR , YEAR. +# +# Translators: +# Freesand Leo , 2019 +# Hao Shi , 2019 +# +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: Python 3.9\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2022-11-04 14:34+0000\n" +"PO-Revision-Date: 2017-02-16 23:05+0000\n" +"Last-Translator: Hao Shi , 2019\n" +"Language-Team: Chinese (China) (https://www.transifex.com/python-doc/teams/5390/zh_CN/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: zh_CN\n" +"Plural-Forms: nplurals=1; plural=0;\n" + +#: ../../library/datatypes.rst:5 +msgid "Data Types" +msgstr "数据类型" + +#: ../../library/datatypes.rst:7 +msgid "" +"The modules described in this chapter provide a variety of specialized data " +"types such as dates and times, fixed-type arrays, heap queues, double-ended " +"queues, and enumerations." +msgstr "本章所描述的模块提供了许多专门的数据类型,如日期和时间、固定类型的数组、堆队列、双端队列、以及枚举。" + +#: ../../library/datatypes.rst:11 +msgid "" +"Python also provides some built-in data types, in particular, :class:`dict`," +" :class:`list`, :class:`set` and :class:`frozenset`, and :class:`tuple`. " +"The :class:`str` class is used to hold Unicode strings, and the " +":class:`bytes` and :class:`bytearray` classes are used to hold binary data." +msgstr "" +"Python也提供一些内置数据类型,特别是,:class:`dict`、 " +":class:`list`、:class:`set`、:class:`frozenset`、以及 :class:`tuple`。:class:`str`" +" 这个类是用来存储Unicode字符串的,而 :class:`bytes` 和 :class:`bytearray` 这两个类是用来存储二进制数据的。" + +#: ../../library/datatypes.rst:17 +msgid "The following modules are documented in this chapter:" +msgstr "本章包含以下模块的文档:" diff --git a/library/datetime.po b/library/datetime.po new file mode 100644 index 000000000..38e28e0e0 --- /dev/null +++ b/library/datetime.po @@ -0,0 +1,3595 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) 2001-2024, Python Software Foundation +# This file is distributed under the same license as the Python package. +# FIRST AUTHOR , YEAR. +# +# Translators: +# Menghua Xiao , 2018 +# dannyvi , 2018 +# 叶浚安 , 2019 +# Fu Hanxi , 2019 +# Jack Wu , 2019 +# Trim21 , 2019 +# walkinrain , 2019 +# Zombie110year , 2019 +# MuSheng Chen , 2019 +# 1lin24 <1lin24@sina.com>, 2019 +# emrich , 2019 +# nick <2330458484@qq.com>, 2019 +# dogn he , 2019 +# ppcfish , 2019 +# jaystone776 <1732865113@qq.com>, 2021 +# Freesand Leo , 2022 +# Alpha Du , 2022 +# Rafael Fontenelle , 2024 +# +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: Python 3.9\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2024-07-29 06:10+0000\n" +"PO-Revision-Date: 2017-02-16 23:06+0000\n" +"Last-Translator: Rafael Fontenelle , 2024\n" +"Language-Team: Chinese (China) (https://app.transifex.com/python-doc/teams/5390/zh_CN/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: zh_CN\n" +"Plural-Forms: nplurals=1; plural=0;\n" + +#: ../../library/datetime.rst:2 +msgid ":mod:`datetime` --- Basic date and time types" +msgstr ":mod:`datetime` --- 基本日期和时间类型" + +#: ../../library/datetime.rst:11 +msgid "**Source code:** :source:`Lib/datetime.py`" +msgstr "**源代码:** :source:`Lib/datetime.py`" + +#: ../../library/datetime.rst:17 +msgid "" +"The :mod:`datetime` module supplies classes for manipulating dates and " +"times." +msgstr ":mod:`datetime` 模块提供用于处理日期和时间的类。" + +#: ../../library/datetime.rst:19 +msgid "" +"While date and time arithmetic is supported, the focus of the implementation" +" is on efficient attribute extraction for output formatting and " +"manipulation." +msgstr "在支持日期时间数学运算的同时,实现的关注点更着重于如何能够更有效地解析其属性用于格式化输出和数据操作。" + +#: ../../library/datetime.rst:25 +msgid "Module :mod:`calendar`" +msgstr "模块 :mod:`calendar`" + +#: ../../library/datetime.rst:25 +msgid "General calendar related functions." +msgstr "通用日历相关函数" + +#: ../../library/datetime.rst:28 +msgid "Module :mod:`time`" +msgstr "模块 :mod:`time`" + +#: ../../library/datetime.rst:28 +msgid "Time access and conversions." +msgstr "时间的访问和转换" + +#: ../../library/datetime.rst:31 +msgid "Module :mod:`zoneinfo`" +msgstr ":mod:`zoneinfo` 模块" + +#: ../../library/datetime.rst:31 +msgid "Concrete time zones representing the IANA time zone database." +msgstr "代表 IANA 时区数据库的具体时区。" + +#: ../../library/datetime.rst:33 +msgid "Package `dateutil `_" +msgstr "`dateutil `_ 包" + +#: ../../library/datetime.rst:34 +msgid "Third-party library with expanded time zone and parsing support." +msgstr "具有扩展时区和解析支持的第三方库。" + +#: ../../library/datetime.rst:39 +msgid "Aware and Naive Objects" +msgstr "感知型对象和简单型对象" + +#: ../../library/datetime.rst:41 +msgid "" +"Date and time objects may be categorized as \"aware\" or \"naive\" depending" +" on whether or not they include timezone information." +msgstr "日期和时间对象可以根据它们是否包含时区信息而分为“感知型”和“简单型”两类。" + +#: ../../library/datetime.rst:44 +msgid "" +"With sufficient knowledge of applicable algorithmic and political time " +"adjustments, such as time zone and daylight saving time information, an " +"**aware** object can locate itself relative to other aware objects. An aware" +" object represents a specific moment in time that is not open to " +"interpretation. [#]_" +msgstr "" +"充分掌握应用性算法和政治性时间调整信息例如时区和夏令时的情况下,一个 **感知型** 对象就能相对于其他感知型对象来精确定位自身时间点。 " +"感知型对象是用来表示一个没有解释空间的固定时间点。 [#]_" + +#: ../../library/datetime.rst:50 +msgid "" +"A **naive** object does not contain enough information to unambiguously " +"locate itself relative to other date/time objects. Whether a naive object " +"represents Coordinated Universal Time (UTC), local time, or time in some " +"other timezone is purely up to the program, just like it is up to the " +"program whether a particular number represents metres, miles, or mass. Naive" +" objects are easy to understand and to work with, at the cost of ignoring " +"some aspects of reality." +msgstr "" +"**简单型** 对象没有包含足够多的信息来无歧义地相对于其他 date/time 对象来定位自身时间点。 " +"不论一个简单型对象所代表的是世界标准时间(UTC)、当地时间还是某个其他时区的时间完全取决于具体程序,就像一个特定数字所代表的是米、英里还是质量完全取决于具体程序一样。" +" 简单型对象更易于理解和使用,代价则是忽略了某些现实性考量。" + +#: ../../library/datetime.rst:57 +msgid "" +"For applications requiring aware objects, :class:`.datetime` and " +":class:`.time` objects have an optional time zone information attribute, " +":attr:`!tzinfo`, that can be set to an instance of a subclass of the " +"abstract :class:`tzinfo` class. These :class:`tzinfo` objects capture " +"information about the offset from UTC time, the time zone name, and whether " +"daylight saving time is in effect." +msgstr "" +"对于要求感知型对象的应用,:class:`.datetime` 和 :class:`.time` 对象具有一个可选的时区信息属性 " +":attr:`!tzinfo`,它可被设为抽象类 :class:`tzinfo` 的子类的一个实例。 这些 :class:`tzinfo` 对象会捕获与" +" UTC 时间的差值、时区名称以及夏令时是否生效等信息。" + +#: ../../library/datetime.rst:63 +msgid "" +"Only one concrete :class:`tzinfo` class, the :class:`timezone` class, is " +"supplied by the :mod:`datetime` module. The :class:`timezone` class can " +"represent simple timezones with fixed offsets from UTC, such as UTC itself " +"or North American EST and EDT timezones. Supporting timezones at deeper " +"levels of detail is up to the application. The rules for time adjustment " +"across the world are more political than rational, change frequently, and " +"there is no standard suitable for every application aside from UTC." +msgstr "" +":mod:`datetime` 模块只提供了一个具体的 :class:`tzinfo` 类,即 :class:`timezone` 类。 " +":class:`timezone` 类可以表示具有相对于 UTC 的固定时差的简单时区,例如 UTC 本身或北美的 EST 和 EDT 时区等。 " +"支持时间的详细程度取决于具体的应用。 世界各地的时间调整规则往往是政治性多于合理性,经常会发生变化,除了 UTC 之外并没有一个能适合所有应用的标准。" + +#: ../../library/datetime.rst:72 +msgid "Constants" +msgstr "常量" + +#: ../../library/datetime.rst:74 +msgid "The :mod:`datetime` module exports the following constants:" +msgstr " :mod:`datetime` 模块包含了以下常量:" + +#: ../../library/datetime.rst:78 +msgid "" +"The smallest year number allowed in a :class:`date` or :class:`.datetime` " +"object. :const:`MINYEAR` is ``1``." +msgstr "" +":class:`date` 或者 :class:`datetime` 对象允许的最小年份。 常量 :const:`MINYEAR` 是 ``1`` 。" + +#: ../../library/datetime.rst:84 +msgid "" +"The largest year number allowed in a :class:`date` or :class:`.datetime` " +"object. :const:`MAXYEAR` is ``9999``." +msgstr "" +":class:`date` 或 :class:`datetime` 对象允许最大的年份。常量 :const:`MAXYEAR` 是 ``9999`` 。" + +#: ../../library/datetime.rst:88 +msgid "Available Types" +msgstr "有效的类型" + +#: ../../library/datetime.rst:93 +msgid "" +"An idealized naive date, assuming the current Gregorian calendar always was," +" and always will be, in effect. Attributes: :attr:`year`, :attr:`month`, and" +" :attr:`day`." +msgstr "" +"一个理想化的简单型日期,它假设当今的公历在过去和未来永远有效。 属性: :attr:`year`, :attr:`month`, and " +":attr:`day`。" + +#: ../../library/datetime.rst:101 +msgid "" +"An idealized time, independent of any particular day, assuming that every " +"day has exactly 24\\*60\\*60 seconds. (There is no notion of \"leap " +"seconds\" here.) Attributes: :attr:`hour`, :attr:`minute`, :attr:`second`, " +":attr:`microsecond`, and :attr:`.tzinfo`." +msgstr "" +"一个独立于任何特定日期的理想化时间,它假设每一天都恰好等于 24\\*60\\*60 秒。 (这里没有“闰秒”的概念。) 包含属性: " +":attr:`hour`, :attr:`minute`, :attr:`second`, :attr:`microsecond` 和 " +":attr:`.tzinfo`。" + +#: ../../library/datetime.rst:110 +msgid "" +"A combination of a date and a time. Attributes: :attr:`year`, :attr:`month`," +" :attr:`day`, :attr:`hour`, :attr:`minute`, :attr:`second`, " +":attr:`microsecond`, and :attr:`.tzinfo`." +msgstr "" +"日期和时间的结合。属性::attr:`year`, :attr:`month`, :attr:`day`, :attr:`hour`, " +":attr:`minute`, :attr:`second`, :attr:`microsecond`, and :attr:`.tzinfo`." + +#: ../../library/datetime.rst:118 +msgid "" +"A duration expressing the difference between two :class:`date`, " +":class:`.time`, or :class:`.datetime` instances to microsecond resolution." +msgstr "" +"表示两个 :class:`date` 对象或 :class:`.time` 对象,或者 :class:`.datetime` " +"对象之间的时间间隔,精确到微秒。" + +#: ../../library/datetime.rst:125 +msgid "" +"An abstract base class for time zone information objects. These are used by " +"the :class:`.datetime` and :class:`.time` classes to provide a customizable " +"notion of time adjustment (for example, to account for time zone and/or " +"daylight saving time)." +msgstr "" +"一个描述时区信息对象的抽象基类。 用来给 :class:`.datetime` 和 :class:`.time` " +"类提供自定义的时间调整概念(例如处理时区和/或夏令时)。" + +#: ../../library/datetime.rst:133 +msgid "" +"A class that implements the :class:`tzinfo` abstract base class as a fixed " +"offset from the UTC." +msgstr "一个实现了 :class:`tzinfo` 抽象基类的子类,用于表示相对于 世界标准时间(UTC)的偏移量。" + +#: ../../library/datetime.rst:138 ../../library/datetime.rst:156 +msgid "Objects of these types are immutable." +msgstr "这些类型的对象都是不可变的。" + +#: ../../library/datetime.rst:140 +msgid "Subclass relationships::" +msgstr "子类关系 ::" + +#: ../../library/datetime.rst:151 +msgid "Common Properties" +msgstr "通用的特征属性" + +#: ../../library/datetime.rst:153 +msgid "" +"The :class:`date`, :class:`.datetime`, :class:`.time`, and :class:`timezone`" +" types share these common features:" +msgstr "" +":class:`date`, :class:`.datetime`, :class:`.time` 和 :class:`timezone` " +"类型共享这些通用特性:" + +#: ../../library/datetime.rst:157 +msgid "" +"Objects of these types are hashable, meaning that they can be used as " +"dictionary keys." +msgstr "这些类型的对象是可哈希的,这意味着它们可被作为字典的键。" + +#: ../../library/datetime.rst:159 +msgid "" +"Objects of these types support efficient pickling via the :mod:`pickle` " +"module." +msgstr "这些类型的对象支持通过 :mod:`pickle` 模块进行高效的封存。" + +#: ../../library/datetime.rst:162 +msgid "Determining if an Object is Aware or Naive" +msgstr "确定一个对象是感知型还是简单型" + +#: ../../library/datetime.rst:164 +msgid "Objects of the :class:`date` type are always naive." +msgstr ":class:`date` 类型的对象都是简单型的。" + +#: ../../library/datetime.rst:166 +msgid "" +"An object of type :class:`.time` or :class:`.datetime` may be aware or " +"naive." +msgstr ":class:`.time` 或 :class:`.datetime` 类型的对象可以是感知型或者简单型。" + +#: ../../library/datetime.rst:168 +msgid "" +"A :class:`.datetime` object *d* is aware if both of the following hold:" +msgstr "一个 :class:`.datetime` 对象 *d* 在以下条件同时成立时将是感知型的:" + +#: ../../library/datetime.rst:170 +msgid "``d.tzinfo`` is not ``None``" +msgstr "``d.tzinfo`` 不为 ``None``" + +#: ../../library/datetime.rst:171 +msgid "``d.tzinfo.utcoffset(d)`` does not return ``None``" +msgstr "``d.tzinfo.utcoffset(d)`` 不返回 ``None``" + +#: ../../library/datetime.rst:173 +msgid "Otherwise, *d* is naive." +msgstr "在其他情况下,*d* 将是简单型的。" + +#: ../../library/datetime.rst:175 +msgid "A :class:`.time` object *t* is aware if both of the following hold:" +msgstr "一个 :class:`.time` 对象 *t* 在以下条件同时成立时将是感知型的:" + +#: ../../library/datetime.rst:177 +msgid "``t.tzinfo`` is not ``None``" +msgstr "``t.tzinfo`` 不为 ``None``" + +#: ../../library/datetime.rst:178 +msgid "``t.tzinfo.utcoffset(None)`` does not return ``None``." +msgstr "``t.tzinfo.utcoffset(None)`` 不返回 ``None``。" + +#: ../../library/datetime.rst:180 +msgid "Otherwise, *t* is naive." +msgstr "在其他情况下,*t* 将是简单型的。" + +#: ../../library/datetime.rst:182 +msgid "" +"The distinction between aware and naive doesn't apply to :class:`timedelta` " +"objects." +msgstr "感知型和简单型之间的区别不适用于 :class:`timedelta` 对象。" + +#: ../../library/datetime.rst:188 +msgid ":class:`timedelta` Objects" +msgstr ":class:`timedelta` 类对象" + +#: ../../library/datetime.rst:190 +msgid "" +"A :class:`timedelta` object represents a duration, the difference between " +"two dates or times." +msgstr ":class:`timedelta` 对象表示两个 date 或者 time 的时间间隔。" + +#: ../../library/datetime.rst:195 +msgid "" +"All arguments are optional and default to ``0``. Arguments may be integers " +"or floats, and may be positive or negative." +msgstr "所有参数都是可选的并且默认为 ``0``。 这些参数可以是整数或者浮点数,也可以是正数或者负数。" + +#: ../../library/datetime.rst:198 +msgid "" +"Only *days*, *seconds* and *microseconds* are stored internally. Arguments " +"are converted to those units:" +msgstr "只有 *days*, *seconds* 和 *microseconds* 会存储在内部。 参数单位的换算规则如下:" + +#: ../../library/datetime.rst:201 +msgid "A millisecond is converted to 1000 microseconds." +msgstr "1毫秒会转换成1000微秒。" + +#: ../../library/datetime.rst:202 +msgid "A minute is converted to 60 seconds." +msgstr "1分钟会转换成60秒。" + +#: ../../library/datetime.rst:203 +msgid "An hour is converted to 3600 seconds." +msgstr "1小时会转换成3600秒。" + +#: ../../library/datetime.rst:204 +msgid "A week is converted to 7 days." +msgstr "1星期会转换成7天。" + +#: ../../library/datetime.rst:206 +msgid "" +"and days, seconds and microseconds are then normalized so that the " +"representation is unique, with" +msgstr "日期、秒、微秒都是标准化的,所以它们的表达方式也是唯一的,例:" + +#: ../../library/datetime.rst:209 +msgid "``0 <= microseconds < 1000000``" +msgstr "``0 <= microseconds < 1000000``" + +#: ../../library/datetime.rst:210 +msgid "``0 <= seconds < 3600*24`` (the number of seconds in one day)" +msgstr "``0 <= seconds < 3600*24`` (一天的秒数)" + +#: ../../library/datetime.rst:211 +msgid "``-999999999 <= days <= 999999999``" +msgstr "``-999999999 <= days <= 999999999``" + +#: ../../library/datetime.rst:213 +msgid "" +"The following example illustrates how any arguments besides *days*, " +"*seconds* and *microseconds* are \"merged\" and normalized into those three " +"resulting attributes::" +msgstr "" +"下面的例子演示了如何对 *days*, *seconds* 和 *microseconds* " +"以外的任意参数执行“合并”操作并标准化为以上三个结果属性::" + +#: ../../library/datetime.rst:231 +msgid "" +"If any argument is a float and there are fractional microseconds, the " +"fractional microseconds left over from all arguments are combined and their " +"sum is rounded to the nearest microsecond using round-half-to-even " +"tiebreaker. If no argument is a float, the conversion and normalization " +"processes are exact (no information is lost)." +msgstr "" +"在有任何参数为浮点型并且 microseconds " +"值为小数的情况下,从所有参数中余下的微秒数将被合并,并使用四舍五入偶不入奇的规则将总计值舍入到最接近的整数微秒值。 " +"如果没有任何参数为浮点型的情况下,则转换和标准化过程将是完全精确的(不会丢失信息)。" + +#: ../../library/datetime.rst:238 +msgid "" +"If the normalized value of days lies outside the indicated range, " +":exc:`OverflowError` is raised." +msgstr "如果标准化后的 days 数值超过了指定范围,将会抛出 :exc:`OverflowError` 异常。" + +#: ../../library/datetime.rst:241 +msgid "" +"Note that normalization of negative values may be surprising at first. For " +"example::" +msgstr "请注意对负数值进行标准化的结果可能会令人感到惊讶。 例如::" + +#: ../../library/datetime.rst:250 ../../library/datetime.rst:544 +#: ../../library/datetime.rst:1051 ../../library/datetime.rst:1669 +#: ../../library/datetime.rst:2262 +msgid "Class attributes:" +msgstr "类属性:" + +#: ../../library/datetime.rst:254 +msgid "" +"The most negative :class:`timedelta` object, ``timedelta(-999999999)``." +msgstr " :class:`timedelta` 类对象的最小值为 ``timedelta(-999999999)``。" + +#: ../../library/datetime.rst:259 +msgid "" +"The most positive :class:`timedelta` object, ``timedelta(days=999999999, " +"hours=23, minutes=59, seconds=59, microseconds=999999)``." +msgstr "" +" :class:`timedelta` 类对象的最大值为 ``timedelta(days=999999999, hours=23, " +"minutes=59, seconds=59, microseconds=999999)``。" + +#: ../../library/datetime.rst:265 +msgid "" +"The smallest possible difference between non-equal :class:`timedelta` " +"objects, ``timedelta(microseconds=1)``." +msgstr "两个不相等的 :class:`timedelta` 类对象最小的间隔为 ``timedelta(microseconds=1)``。" + +#: ../../library/datetime.rst:268 +msgid "" +"Note that, because of normalization, ``timedelta.max`` > ``-timedelta.min``." +" ``-timedelta.max`` is not representable as a :class:`timedelta` object." +msgstr "" +"需要注意的是,因为标准化的缘故,``timedelta.max`` > " +"``-timedelta.min``,``-timedelta.max`` 不可以表示一个 :class:`timedelta` 类对象。" + +#: ../../library/datetime.rst:271 ../../library/datetime.rst:562 +#: ../../library/datetime.rst:1071 ../../library/datetime.rst:1689 +msgid "Instance attributes (read-only):" +msgstr "实例属性(只读):" + +#: ../../library/datetime.rst:274 +msgid "Attribute" +msgstr "属性" + +#: ../../library/datetime.rst:274 +msgid "Value" +msgstr "值" + +#: ../../library/datetime.rst:276 +msgid "``days``" +msgstr "``days``" + +#: ../../library/datetime.rst:276 +msgid "Between -999999999 and 999999999 inclusive" +msgstr "-999999999 至 999999999 ,含999999999 " + +#: ../../library/datetime.rst:278 +msgid "``seconds``" +msgstr "``seconds``" + +#: ../../library/datetime.rst:278 +msgid "Between 0 and 86399 inclusive" +msgstr "0 至 86399,包含86399" + +#: ../../library/datetime.rst:280 +msgid "``microseconds``" +msgstr "``microseconds``" + +#: ../../library/datetime.rst:280 +msgid "Between 0 and 999999 inclusive" +msgstr "0 至 999999,包含999999" + +#: ../../library/datetime.rst:283 ../../library/datetime.rst:579 +#: ../../library/datetime.rst:1124 +msgid "Supported operations:" +msgstr "支持的运算:" + +#: ../../library/datetime.rst:288 ../../library/datetime.rst:582 +#: ../../library/datetime.rst:1127 +msgid "Operation" +msgstr "运算" + +#: ../../library/datetime.rst:288 ../../library/datetime.rst:582 +#: ../../library/datetime.rst:1127 +msgid "Result" +msgstr "结果:" + +#: ../../library/datetime.rst:290 +msgid "``t1 = t2 + t3``" +msgstr "``t1 = t2 + t3``" + +#: ../../library/datetime.rst:290 +msgid "" +"Sum of *t2* and *t3*. Afterwards *t1*-*t2* == *t3* and *t1*-*t3* == *t2* are" +" true. (1)" +msgstr "*t2* 和 *t3* 的和。 运算后 *t1*-*t2* == *t3* and *t1*-*t3* == *t2* 必为真值。(1)" + +#: ../../library/datetime.rst:293 +msgid "``t1 = t2 - t3``" +msgstr "``t1 = t2 - t3``" + +#: ../../library/datetime.rst:293 +msgid "" +"Difference of *t2* and *t3*. Afterwards *t1* == *t2* - *t3* and *t2* == *t1*" +" + *t3* are true. (1)(6)" +msgstr "" +"*t2* 减 *t3* 的差。 运算后 *t1* == *t2* - *t3* and *t2* == *t1* + *t3* 必为真值。 (1)(6)" + +#: ../../library/datetime.rst:297 +msgid "``t1 = t2 * i or t1 = i * t2``" +msgstr "``t1 = t2 * i or t1 = i * t2``" + +#: ../../library/datetime.rst:297 +msgid "" +"Delta multiplied by an integer. Afterwards *t1* // i == *t2* is true, " +"provided ``i != 0``." +msgstr "乘以一个整数。运算后假如 ``i != 0`` 则 *t1* // i == *t2* 必为真值。" + +#: ../../library/datetime.rst:301 +msgid "In general, *t1* \\* i == *t1* \\* (i-1) + *t1* is true. (1)" +msgstr " 通常情况下, *t1* \\* i == *t1* \\* (i-1) + *t1* 为真值。 (1)" + +#: ../../library/datetime.rst:304 +msgid "``t1 = t2 * f or t1 = f * t2``" +msgstr "``t1 = t2 * f or t1 = f * t2``" + +#: ../../library/datetime.rst:304 +msgid "" +"Delta multiplied by a float. The result is rounded to the nearest multiple " +"of timedelta.resolution using round-half-to-even." +msgstr "乘以一个浮点数,结果会被舍入到 timedelta 最接近的整数倍。 精度使用四舍五偶入奇不入规则。" + +#: ../../library/datetime.rst:308 +msgid "``f = t2 / t3``" +msgstr "``f = t2 / t3``" + +#: ../../library/datetime.rst:308 +msgid "" +"Division (3) of overall duration *t2* by interval unit *t3*. Returns a " +":class:`float` object." +msgstr "总时间 *t2* 除以间隔单位 *t3* (3)。 返回一个 :class:`float` 对象。" + +#: ../../library/datetime.rst:312 +msgid "``t1 = t2 / f or t1 = t2 / i``" +msgstr "``t1 = t2 / f or t1 = t2 / i``" + +#: ../../library/datetime.rst:312 +msgid "" +"Delta divided by a float or an int. The result is rounded to the nearest " +"multiple of timedelta.resolution using round-half-to-even." +msgstr "除以一个浮点数或整数。 结果会被舍入到 timedelta 最接近的整数倍。 精度使用四舍五偶入奇不入规则。" + +#: ../../library/datetime.rst:316 +msgid "``t1 = t2 // i`` or ``t1 = t2 // t3``" +msgstr "``t1 = t2 // i`` or ``t1 = t2 // t3``" + +#: ../../library/datetime.rst:316 +msgid "" +"The floor is computed and the remainder (if any) is thrown away. In the " +"second case, an integer is returned. (3)" +msgstr "计算底数,其余部分(如果有)将被丢弃。在第二种情况下,将返回整数。 (3)" + +#: ../../library/datetime.rst:320 +msgid "``t1 = t2 % t3``" +msgstr "``t1 = t2 % t3``" + +#: ../../library/datetime.rst:320 +msgid "The remainder is computed as a :class:`timedelta` object. (3)" +msgstr "余数为一个 :class:`timedelta` 对象。(3)" + +#: ../../library/datetime.rst:323 +msgid "``q, r = divmod(t1, t2)``" +msgstr "``q, r = divmod(t1, t2)``" + +#: ../../library/datetime.rst:323 +msgid "" +"Computes the quotient and the remainder: ``q = t1 // t2`` (3) and ``r = t1 %" +" t2``. q is an integer and r is a :class:`timedelta` object." +msgstr "" +"通过 : ``q = t1 // t2`` (3) and ``r = t1 % t2`` 计算出商和余数。q是一个整数,r是一个 " +":class:`timedelta` 对象。" + +#: ../../library/datetime.rst:328 +msgid "``+t1``" +msgstr "``+t1``" + +#: ../../library/datetime.rst:328 +msgid "Returns a :class:`timedelta` object with the same value. (2)" +msgstr "返回一个相同数值的 :class:`timedelta` 对象。" + +#: ../../library/datetime.rst:331 +msgid "``-t1``" +msgstr "``-t1``" + +#: ../../library/datetime.rst:331 +msgid "" +"equivalent to :class:`timedelta`\\ (-*t1.days*, -*t1.seconds*, " +"-*t1.microseconds*), and to *t1*\\* -1. (1)(4)" +msgstr "" +"等价于 :class:`timedelta`\\ (-*t1.days*, -*t1.seconds*, -*t1.microseconds*), 和 " +"*t1*\\* -1. (1)(4)" + +#: ../../library/datetime.rst:336 +msgid "``abs(t)``" +msgstr "``abs(t)``" + +#: ../../library/datetime.rst:336 +msgid "" +"equivalent to +\\ *t* when ``t.days >= 0``, and to -*t* when ``t.days < 0``." +" (2)" +msgstr "当 ``t.days >= 0`` 时等于 +\\ *t*, 当 ``t.days < 0`` 时 -*t* 。 (2)" + +#: ../../library/datetime.rst:339 +msgid "``str(t)``" +msgstr "``str(t)``" + +#: ../../library/datetime.rst:339 +msgid "" +"Returns a string in the form ``[D day[s], ][H]H:MM:SS[.UUUUUU]``, where D is" +" negative for negative ``t``. (5)" +msgstr "" +"返回一个形如 ``[D day[s], ][H]H:MM:SS[.UUUUUU]`` 的字符串,当 ``t`` 为负数的时候, D 也为负数。 (5)" + +#: ../../library/datetime.rst:343 +msgid "``repr(t)``" +msgstr "``repr(t)``" + +#: ../../library/datetime.rst:343 +msgid "" +"Returns a string representation of the :class:`timedelta` object as a " +"constructor call with canonical attribute values." +msgstr "返回一个 :class:`timedelta` 对象的字符串表示形式,作为附带正规属性值的构造器调用。" + +#: ../../library/datetime.rst:349 ../../library/datetime.rst:596 +#: ../../library/datetime.rst:2475 +msgid "Notes:" +msgstr "注释:" + +#: ../../library/datetime.rst:352 +msgid "This is exact but may overflow." +msgstr "结果正确,但可能会溢出。" + +#: ../../library/datetime.rst:355 +msgid "This is exact and cannot overflow." +msgstr "结果正确,不会溢出。" + +#: ../../library/datetime.rst:358 +msgid "Division by 0 raises :exc:`ZeroDivisionError`." +msgstr "除以0将会抛出异常 :exc:`ZeroDivisionError` 。" + +#: ../../library/datetime.rst:361 +msgid "-*timedelta.max* is not representable as a :class:`timedelta` object." +msgstr "-*timedelta.max* 不是一个 :class:`timedelta` 类对象。" + +#: ../../library/datetime.rst:364 +msgid "" +"String representations of :class:`timedelta` objects are normalized " +"similarly to their internal representation. This leads to somewhat unusual " +"results for negative timedeltas. For example::" +msgstr ":class:`timedelta` 对象的字符串表示形式类似于其内部表示形式被规范化。对于负时间增量,这会导致一些不寻常的结果。例如::" + +#: ../../library/datetime.rst:374 +msgid "" +"The expression ``t2 - t3`` will always be equal to the expression ``t2 + " +"(-t3)`` except when t3 is equal to ``timedelta.max``; in that case the " +"former will produce a result while the latter will overflow." +msgstr "" +"表达式 ``t2 - t3`` 通常与 ``t2 + (-t3)`` 是等价的,除非 t3 等于 ``timedelta.max``; " +"在这种情况下前者会返回结果,而后者则会溢出。" + +#: ../../library/datetime.rst:378 +msgid "" +"In addition to the operations listed above, :class:`timedelta` objects " +"support certain additions and subtractions with :class:`date` and " +":class:`.datetime` objects (see below)." +msgstr "" +"除了上面列举的操作以外,:class:`timedelta` 对象还支持与 :class:`date` 和 :class:`.datetime` " +"对象进行特定的相加和相减运算(见下文)。" + +#: ../../library/datetime.rst:382 +msgid "" +"Floor division and true division of a :class:`timedelta` object by another " +":class:`timedelta` object are now supported, as are remainder operations and" +" the :func:`divmod` function. True division and multiplication of a " +":class:`timedelta` object by a :class:`float` object are now supported." +msgstr "" +"现在已支持 :class:`timedelta` 对象与另一个 :class:`timedelta` 对象相整除或相除,包括求余运算和 " +":func:`divmod` 函数。 现在也支持 :class:`timedelta` 对象加上或乘以一个 :class:`float` 对象。" + +#: ../../library/datetime.rst:389 +msgid "" +"Comparisons of :class:`timedelta` objects are supported, with some caveats." +msgstr "支持 :class:`timedelta` 对象之间进行比较,但其中有一些注意事项。" + +#: ../../library/datetime.rst:391 +msgid "" +"The comparisons ``==`` or ``!=`` *always* return a :class:`bool`, no matter " +"the type of the compared object::" +msgstr "``==`` 或 ``!=`` 比较 *总是* 返回一个 :class:`bool` 对象,无论被比较的对象是什么类型::" + +#: ../../library/datetime.rst:402 +msgid "" +"For all other comparisons (such as ``<`` and ``>``), when a " +":class:`timedelta` object is compared to an object of a different type, " +":exc:`TypeError` is raised::" +msgstr "" +"对于所有其他比较 (例如 ``<`` 和 ``>``),当一个 :class:`timedelta` 对象与其他类型的对象比较时,将引发 " +":exc:`TypeError`::" + +#: ../../library/datetime.rst:413 +msgid "" +"In Boolean contexts, a :class:`timedelta` object is considered to be true if" +" and only if it isn't equal to ``timedelta(0)``." +msgstr "在布尔运算中,:class:`timedelta` 对象当且仅当其不等于 ``timedelta(0)`` 时则会被视为真值。" + +#: ../../library/datetime.rst:416 ../../library/datetime.rst:625 +#: ../../library/datetime.rst:1198 ../../library/datetime.rst:1786 +msgid "Instance methods:" +msgstr "实例方法:" + +#: ../../library/datetime.rst:420 +msgid "" +"Return the total number of seconds contained in the duration. Equivalent to " +"``td / timedelta(seconds=1)``. For interval units other than seconds, use " +"the division form directly (e.g. ``td / timedelta(microseconds=1)``)." +msgstr "" +"返回期间占用了多少秒。等价于 ``td / timedelta(seconds=1)``。对于秒以外的间隔单位,直接使用除法形式 (例如 ``td /" +" timedelta(microseconds=1)``)。" + +#: ../../library/datetime.rst:424 +msgid "" +"Note that for very large time intervals (greater than 270 years on most " +"platforms) this method will lose microsecond accuracy." +msgstr "需要注意的是,时间间隔较大时,这个方法的结果中的微秒将会失真(大多数平台上大于270年视为一个较大的时间间隔)。" + +#: ../../library/datetime.rst:430 +msgid "Examples of usage: :class:`timedelta`" +msgstr ":class:`timedelta` 用法示例" + +#: ../../library/datetime.rst:432 +msgid "An additional example of normalization::" +msgstr "一个标准化的附加示例::" + +#: ../../library/datetime.rst:444 +msgid "Examples of :class:`timedelta` arithmetic::" +msgstr ":class:`timedelta` 算术运算的示例::" + +#: ../../library/datetime.rst:463 +msgid ":class:`date` Objects" +msgstr ":class:`date` 对象" + +#: ../../library/datetime.rst:465 +msgid "" +"A :class:`date` object represents a date (year, month and day) in an " +"idealized calendar, the current Gregorian calendar indefinitely extended in " +"both directions." +msgstr ":class:`date` 对象代表一个理想化历法中的日期(年、月和日),即当今的格列高利历向前后两个方向无限延伸。" + +#: ../../library/datetime.rst:469 +msgid "" +"January 1 of year 1 is called day number 1, January 2 of year 1 is called " +"day number 2, and so on. [#]_" +msgstr "公元 1 年 1 月 1日是第 1 日,公元 1 年 1 月 2 日是第 2 日,依此类推。 [#]_" + +#: ../../library/datetime.rst:474 +msgid "" +"All arguments are required. Arguments must be integers, in the following " +"ranges:" +msgstr "所有参数都是必要的。 参数必须是在下面范围内的整数:" + +#: ../../library/datetime.rst:477 +msgid "``MINYEAR <= year <= MAXYEAR``" +msgstr "``MINYEAR <= year <= MAXYEAR``" + +#: ../../library/datetime.rst:478 +msgid "``1 <= month <= 12``" +msgstr "``1 <= month <= 12``" + +#: ../../library/datetime.rst:479 +msgid "``1 <= day <= number of days in the given month and year``" +msgstr "``1 <= 日期 <= 给定年月对应的天数``" + +#: ../../library/datetime.rst:481 ../../library/datetime.rst:843 +msgid "" +"If an argument outside those ranges is given, :exc:`ValueError` is raised." +msgstr "如果参数不在这些范围内,则抛出 :exc:`ValueError` 异常。" + +#: ../../library/datetime.rst:484 ../../library/datetime.rst:848 +msgid "Other constructors, all class methods:" +msgstr "其它构造器,所有的类方法:" + +#: ../../library/datetime.rst:488 +msgid "Return the current local date." +msgstr "返回当前的本地日期。" + +#: ../../library/datetime.rst:490 +msgid "This is equivalent to ``date.fromtimestamp(time.time())``." +msgstr "这等价于 ``date.fromtimestamp(time.time())``。" + +#: ../../library/datetime.rst:494 +msgid "" +"Return the local date corresponding to the POSIX timestamp, such as is " +"returned by :func:`time.time`." +msgstr "返回对应于 POSIX 时间戳的当地时间,例如 :func:`time.time` 返回的就是时间戳。" + +#: ../../library/datetime.rst:497 +msgid "" +"This may raise :exc:`OverflowError`, if the timestamp is out of the range of" +" values supported by the platform C :c:func:`localtime` function, and " +":exc:`OSError` on :c:func:`localtime` failure. It's common for this to be " +"restricted to years from 1970 through 2038. Note that on non-POSIX systems " +"that include leap seconds in their notion of a timestamp, leap seconds are " +"ignored by :meth:`fromtimestamp`." +msgstr "" +"这可能引发 :exc:`OverflowError`,如果时间戳数值超出所在平台 C :c:func:`localtime` " +"函数的支持范围的话,并且会在 :c:func:`localtime` 出错时引发 :exc:`OSError`。 通常该数值会被限制在 1970 年至 " +"2038 年之间。 请注意在时间戳概念包含闰秒的非 POSIX 系统上,闰秒会被 :meth:`fromtimestamp` 所忽略。" + +#: ../../library/datetime.rst:504 +msgid "" +"Raise :exc:`OverflowError` instead of :exc:`ValueError` if the timestamp is " +"out of the range of values supported by the platform C :c:func:`localtime` " +"function. Raise :exc:`OSError` instead of :exc:`ValueError` on " +":c:func:`localtime` failure." +msgstr "" +"引发 :exc:`OverflowError` 而不是 :exc:`ValueError`,如果时间戳数值超出所在平台 C " +":c:func:`localtime` 函数的支持范围的话,并会在 :c:func:`localtime` 出错时引发 :exc:`OSError` " +"而不是 :exc:`ValueError`。" + +#: ../../library/datetime.rst:513 +msgid "" +"Return the date corresponding to the proleptic Gregorian ordinal, where " +"January 1 of year 1 has ordinal 1." +msgstr "返回对应于预期格列高利历序号的日期,其中公元 1 年 1 月 1 日的序号为 1。" + +#: ../../library/datetime.rst:516 +msgid "" +":exc:`ValueError` is raised unless ``1 <= ordinal <= date.max.toordinal()``." +" For any date *d*, ``date.fromordinal(d.toordinal()) == d``." +msgstr "" +"除非 ``1 <= ordinal <= date.max.toordinal()`` 否则会引发 :exc:`ValueError`。对于任意日期 " +"*d*,``date.fromordinal(d.toordinal()) == d``。" + +#: ../../library/datetime.rst:523 +msgid "" +"Return a :class:`date` corresponding to a *date_string* given in the format " +"``YYYY-MM-DD``::" +msgstr "返回一个对应于以 ``YYYY-MM-DD`` 格式给出的 *date_string* 的 :class:`date` 对象::" + +#: ../../library/datetime.rst:530 +msgid "" +"This is the inverse of :meth:`date.isoformat`. It only supports the format " +"``YYYY-MM-DD``." +msgstr "这是 :meth:`date.isoformat` 的逆操作。 它只支持 ``YYYY-MM-DD`` 格式。" + +#: ../../library/datetime.rst:538 +msgid "" +"Return a :class:`date` corresponding to the ISO calendar date specified by " +"year, week and day. This is the inverse of the function " +":meth:`date.isocalendar`." +msgstr "" +"返回指定 year, week 和 day 所对应 ISO 历法日期的 :class:`date`。 这是函数 " +":meth:`date.isocalendar` 的逆操作。" + +#: ../../library/datetime.rst:548 +msgid "The earliest representable date, ``date(MINYEAR, 1, 1)``." +msgstr "最小的日期 ``date(MINYEAR, 1, 1)`` 。" + +#: ../../library/datetime.rst:553 +msgid "The latest representable date, ``date(MAXYEAR, 12, 31)``." +msgstr "最大的日期 ,``date(MAXYEAR, 12, 31)``。" + +#: ../../library/datetime.rst:558 +msgid "" +"The smallest possible difference between non-equal date objects, " +"``timedelta(days=1)``." +msgstr "两个日期对象的最小间隔,``timedelta(days=1)``。" + +#: ../../library/datetime.rst:566 ../../library/datetime.rst:1075 +msgid "Between :const:`MINYEAR` and :const:`MAXYEAR` inclusive." +msgstr "在 :const:`MINYEAR` 和 :const:`MAXYEAR` 之间,包含边界。" + +#: ../../library/datetime.rst:571 ../../library/datetime.rst:1080 +msgid "Between 1 and 12 inclusive." +msgstr "1 至 12(含)" + +#: ../../library/datetime.rst:576 ../../library/datetime.rst:1085 +msgid "Between 1 and the number of days in the given month of the given year." +msgstr "返回1到指定年月的天数间的数字。" + +#: ../../library/datetime.rst:584 +msgid "``date2 = date1 + timedelta``" +msgstr "``date2 = date1 + timedelta``" + +#: ../../library/datetime.rst:584 +msgid "*date2* is ``timedelta.days`` days removed from *date1*. (1)" +msgstr "*date2* 等于从 *date1* 减去 ``timedelta.days`` 天。 (1)" + +#: ../../library/datetime.rst:587 +msgid "``date2 = date1 - timedelta``" +msgstr "``date2 = date1 - timedelta``" + +#: ../../library/datetime.rst:587 +msgid "Computes *date2* such that ``date2 + timedelta == date1``. (2)" +msgstr "计算 *date2* 的值使得 ``date2 + timedelta == date1``。 (2)" + +#: ../../library/datetime.rst:590 +msgid "``timedelta = date1 - date2``" +msgstr "``timedelta = date1 - date2``" + +#: ../../library/datetime.rst:590 ../../library/datetime.rst:1133 +msgid "\\(3)" +msgstr "\\(3)" + +#: ../../library/datetime.rst:592 +msgid "``date1 < date2``" +msgstr "``date1 < date2``" + +#: ../../library/datetime.rst:592 +msgid "" +"*date1* is considered less than *date2* when *date1* precedes *date2* in " +"time. (4)" +msgstr "如果 *date1* 的时间在 *date2* 之前则认为 *date1* 小于 *date2* 。 (4)" + +#: ../../library/datetime.rst:599 +msgid "" +"*date2* is moved forward in time if ``timedelta.days > 0``, or backward if " +"``timedelta.days < 0``. Afterward ``date2 - date1 == timedelta.days``. " +"``timedelta.seconds`` and ``timedelta.microseconds`` are ignored. " +":exc:`OverflowError` is raised if ``date2.year`` would be smaller than " +":const:`MINYEAR` or larger than :const:`MAXYEAR`." +msgstr "" +"如果 ``timedelta.days > 0`` 则 *date2* 将在时间线上前进,如果 ``timedelta.days < 0`` 则将后退。" +" 操作完成后 ``date2 - date1 == timedelta.days``。 ``timedelta.seconds`` 和 " +"``timedelta.microseconds`` 会被忽略。 如果 ``date2.year`` 将小于 :const:`MINYEAR` 或大于 " +":const:`MAXYEAR` 则会引发 :exc:`OverflowError`。" + +#: ../../library/datetime.rst:606 +msgid "``timedelta.seconds`` and ``timedelta.microseconds`` are ignored." +msgstr "``timedelta.seconds`` 和 ``timedelta.microseconds`` 会被忽略。" + +#: ../../library/datetime.rst:609 +msgid "" +"This is exact, and cannot overflow. timedelta.seconds and " +"timedelta.microseconds are 0, and date2 + timedelta == date1 after." +msgstr "" +"此值完全精确且不会溢出。 操作完成后 timedelta.seconds 和 timedelta.microseconds 均为 0,并且 date2 " +"+ timedelta == date1。" + +#: ../../library/datetime.rst:613 +msgid "" +"In other words, ``date1 < date2`` if and only if ``date1.toordinal() < " +"date2.toordinal()``. Date comparison raises :exc:`TypeError` if the other " +"comparand isn't also a :class:`date` object. However, ``NotImplemented`` is " +"returned instead if the other comparand has a :meth:`timetuple` attribute. " +"This hook gives other kinds of date objects a chance at implementing mixed-" +"type comparison. If not, when a :class:`date` object is compared to an " +"object of a different type, :exc:`TypeError` is raised unless the comparison" +" is ``==`` or ``!=``. The latter cases return :const:`False` or " +":const:`True`, respectively." +msgstr "" +"换句话说,当且仅当 ``date1.toordinal() < date2.toordinal()`` 时 ``date1 < date2``。 " +"日期比较会引发 :exc:`TypeError`,如果比较目标不为 :class:`date` 对象的话。 不过也可能会返回 " +"``NotImplemented``,如果比较目标具有 :meth:`timetuple` 属性的话。 " +"这个钩子给予其他日期对象类型实现混合类型比较的机会。 否则,当 :class:`date` 对象与不同类型的对象比较时将会引发 " +":exc:`TypeError`,除非是 ``==`` 或 ``!=`` 比较。 后两种情况将分别返回 :const:`False` 或 " +":const:`True`。" + +#: ../../library/datetime.rst:623 +msgid "" +"In Boolean contexts, all :class:`date` objects are considered to be true." +msgstr "在布尔运算中,所有 :class:`date` 对象都会被视为真值。" + +#: ../../library/datetime.rst:629 +msgid "" +"Return a date with the same value, except for those parameters given new " +"values by whichever keyword arguments are specified." +msgstr "返回一个具有同样值的日期,除非通过任何关键字参数给出了某些形参的新值。" + +#: ../../library/datetime.rst:632 ../../library/datetime.rst:1829 +msgid "Example::" +msgstr "示例::" + +#: ../../library/datetime.rst:642 ../../library/datetime.rst:1311 +msgid "" +"Return a :class:`time.struct_time` such as returned by " +":func:`time.localtime`." +msgstr "返回一个 :class:`time.struct_time`,即 :func:`time.localtime` 所返回的类型。" + +#: ../../library/datetime.rst:644 +msgid "The hours, minutes and seconds are 0, and the DST flag is -1." +msgstr "hours, minutes 和 seconds 值均为 0,且 DST 旗标值为 -1。" + +#: ../../library/datetime.rst:646 ../../library/datetime.rst:1313 +msgid "``d.timetuple()`` is equivalent to::" +msgstr "``d.timetuple()`` 等价于::" + +#: ../../library/datetime.rst:650 +msgid "" +"where ``yday = d.toordinal() - date(d.year, 1, 1).toordinal() + 1`` is the " +"day number within the current year starting with ``1`` for January 1st." +msgstr "" +"其中 ``yday = d.toordinal() - date(d.year, 1, 1).toordinal() + 1`` " +"是当前年份中的日期序号,1 月 1 日的序号为 ``1``。" + +#: ../../library/datetime.rst:656 +msgid "" +"Return the proleptic Gregorian ordinal of the date, where January 1 of year " +"1 has ordinal 1. For any :class:`date` object *d*, " +"``date.fromordinal(d.toordinal()) == d``." +msgstr "" +"返回日期的预期格列高利历序号,其中公元 1 年 1 月 1 日的序号为 1。 对于任意 :class:`date` 对象 " +"*d*,``date.fromordinal(d.toordinal()) == d``。" + +#: ../../library/datetime.rst:663 +msgid "" +"Return the day of the week as an integer, where Monday is 0 and Sunday is 6." +" For example, ``date(2002, 12, 4).weekday() == 2``, a Wednesday. See also " +":meth:`isoweekday`." +msgstr "" +"返回一个整数代表星期几,星期一为0,星期天为6。例如, ``date(2002, 12, 4).weekday() == 2``,表示的是星期三。参阅 " +":meth:`isoweekday`。" + +#: ../../library/datetime.rst:670 +msgid "" +"Return the day of the week as an integer, where Monday is 1 and Sunday is 7." +" For example, ``date(2002, 12, 4).isoweekday() == 3``, a Wednesday. See also" +" :meth:`weekday`, :meth:`isocalendar`." +msgstr "" +"返回一个整数代表星期几,星期一为1,星期天为7。例如:``date(2002, 12, 4).isoweekday() == 3``,表示星期三。参见 " +":meth:`weekday`, :meth:`isocalendar`。" + +#: ../../library/datetime.rst:677 +msgid "" +"Return a :term:`named tuple` object with three components: ``year``, " +"``week`` and ``weekday``." +msgstr "返回一个由三部分组成的 :term:`named tuple` 对象: ``year``, ``week`` 和 ``weekday``。" + +#: ../../library/datetime.rst:680 +msgid "" +"The ISO calendar is a widely used variant of the Gregorian calendar. [#]_" +msgstr "ISO 历法是一种被广泛使用的格列高利历。 [#]_" + +#: ../../library/datetime.rst:682 +msgid "" +"The ISO year consists of 52 or 53 full weeks, and where a week starts on a " +"Monday and ends on a Sunday. The first week of an ISO year is the first " +"(Gregorian) calendar week of a year containing a Thursday. This is called " +"week number 1, and the ISO year of that Thursday is the same as its " +"Gregorian year." +msgstr "" +"ISO 年由 52 或 53 个完整星期构成,每个星期开始于星期一结束于星期日。 一个 ISO " +"年的第一个星期就是(格列高利)历法的一年中第一个包含星期四的星期。 这被称为 1 号星期,这个星期四所在的 ISO 年与其所在的格列高利年相同。" + +#: ../../library/datetime.rst:687 +msgid "" +"For example, 2004 begins on a Thursday, so the first week of ISO year 2004 " +"begins on Monday, 29 Dec 2003 and ends on Sunday, 4 Jan 2004::" +msgstr "" +"例如,2004 年的第一天是星期四,因此 ISO 2004 年的第一个星期开始于 2003 年 12 月 29 日星期一,结束于 2004 年 1 月 " +"4 日星期日::" + +#: ../../library/datetime.rst:696 +msgid "Result changed from a tuple to a :term:`named tuple`." +msgstr "结果由元组改为 :term:`named tuple`。" + +#: ../../library/datetime.rst:701 +msgid "" +"Return a string representing the date in ISO 8601 format, ``YYYY-MM-DD``::" +msgstr "返回一个以 ISO 8601 格式 ``YYYY-MM-DD`` 来表示日期的字符串::" + +#: ../../library/datetime.rst:707 +msgid "This is the inverse of :meth:`date.fromisoformat`." +msgstr "这是 :meth:`date.fromisoformat` 的逆操作。" + +#: ../../library/datetime.rst:711 +msgid "For a date *d*, ``str(d)`` is equivalent to ``d.isoformat()``." +msgstr "对于日期对象 *d*, ``str(d)`` 等价于 ``d.isoformat()`` 。" + +#: ../../library/datetime.rst:716 +msgid "Return a string representing the date::" +msgstr "返回一个表示日期的字符串::" + +#: ../../library/datetime.rst:722 ../../library/datetime.rst:1497 +msgid "``d.ctime()`` is equivalent to::" +msgstr "``d.ctime()`` 等效于::" + +#: ../../library/datetime.rst:726 +msgid "" +"on platforms where the native C :c:func:`ctime` function (which " +":func:`time.ctime` invokes, but which :meth:`date.ctime` does not invoke) " +"conforms to the C standard." +msgstr "" +"在原生 C :c:func:`ctime` 函数遵循 C 标准的平台上 (:func:`time.ctime` 会发起对该函数的调用,但 " +":meth:`date.ctime` 并不会) 。" + +#: ../../library/datetime.rst:733 +msgid "" +"Return a string representing the date, controlled by an explicit format " +"string. Format codes referring to hours, minutes or seconds will see 0 " +"values. For a complete list of formatting directives, see :ref:`strftime-" +"strptime-behavior`." +msgstr "" +"返回一个由显式格式字符串所指明的代表日期的字符串。 表示时、分或秒的格式代码值将为 0。 要获取格式指令的完整列表请参阅 :ref:`strftime-" +"strptime-behavior`。" + +#: ../../library/datetime.rst:741 +msgid "" +"Same as :meth:`.date.strftime`. This makes it possible to specify a format " +"string for a :class:`.date` object in :ref:`formatted string literals " +"` and when using :meth:`str.format`. For a complete list of " +"formatting directives, see :ref:`strftime-strptime-behavior`." +msgstr "" +"与 :meth:`.date.strftime` 相同。 此方法使得为 :class:`.date` 对象指定以 :ref:`格式化字符串字面值 " +"` 表示的格式化字符串以及使用 :meth:`str.format` 进行格式化成为可能。 要获取格式指令的完整列表,请参阅 " +":ref:`strftime-strptime-behavior`。" + +#: ../../library/datetime.rst:748 +msgid "Examples of Usage: :class:`date`" +msgstr ":class:`date` 用法示例" + +#: ../../library/datetime.rst:750 +msgid "Example of counting days to an event::" +msgstr "计算距离特定事件天数的例子::" + +#: ../../library/datetime.rst:768 +msgid "More examples of working with :class:`date`:" +msgstr "使用 :class:`date` 的更多例子:" + +#: ../../library/datetime.rst:817 +msgid ":class:`.datetime` Objects" +msgstr ":class:`.datetime` 对象" + +#: ../../library/datetime.rst:819 +msgid "" +"A :class:`.datetime` object is a single object containing all the " +"information from a :class:`date` object and a :class:`.time` object." +msgstr "" +":class:`.datetime` 对象是包含来自 :class:`date` 对象和 :class:`.time` 对象的所有信息的单一对象。" + +#: ../../library/datetime.rst:822 +msgid "" +"Like a :class:`date` object, :class:`.datetime` assumes the current " +"Gregorian calendar extended in both directions; like a :class:`.time` " +"object, :class:`.datetime` assumes there are exactly 3600\\*24 seconds in " +"every day." +msgstr "" +"与 :class:`date` 对象一样,:class:`.datetime` 假定当前的格列高利历向前后两个方向无限延伸;与 " +":class:`.time` 对象一样,:class:`.datetime` 假定每一天恰好有 3600\\*24 秒。" + +#: ../../library/datetime.rst:826 +msgid "Constructor:" +msgstr "构造器 :" + +#: ../../library/datetime.rst:830 +msgid "" +"The *year*, *month* and *day* arguments are required. *tzinfo* may be " +"``None``, or an instance of a :class:`tzinfo` subclass. The remaining " +"arguments must be integers in the following ranges:" +msgstr "" +"*year*, *month* 和 *day* 参数是必须的。 *tzinfo* 可以是 ``None`` 或者是一个 :class:`tzinfo` " +"子类的实例。 其余的参数必须是在下面范围内的整数:" + +#: ../../library/datetime.rst:834 +msgid "``MINYEAR <= year <= MAXYEAR``," +msgstr "``MINYEAR <= year <= MAXYEAR``," + +#: ../../library/datetime.rst:835 +msgid "``1 <= month <= 12``," +msgstr "``1 <= month <= 12``," + +#: ../../library/datetime.rst:836 +msgid "``1 <= day <= number of days in the given month and year``," +msgstr "``1 <= day <= 指定年月的天数``," + +#: ../../library/datetime.rst:837 ../../library/datetime.rst:1660 +msgid "``0 <= hour < 24``," +msgstr "``0 <= hour < 24``," + +#: ../../library/datetime.rst:838 ../../library/datetime.rst:1661 +msgid "``0 <= minute < 60``," +msgstr "``0 <= minute < 60``," + +#: ../../library/datetime.rst:839 ../../library/datetime.rst:1662 +msgid "``0 <= second < 60``," +msgstr "``0 <= second < 60``," + +#: ../../library/datetime.rst:840 ../../library/datetime.rst:1663 +msgid "``0 <= microsecond < 1000000``," +msgstr "``0 <= microsecond < 1000000``," + +#: ../../library/datetime.rst:841 ../../library/datetime.rst:1664 +msgid "``fold in [0, 1]``." +msgstr "``fold in [0, 1]``." + +#: ../../library/datetime.rst:845 ../../library/datetime.rst:1232 +#: ../../library/datetime.rst:1796 +msgid "Added the ``fold`` argument." +msgstr "增加了 ``fold`` 参数。" + +#: ../../library/datetime.rst:852 +msgid "Return the current local datetime, with :attr:`.tzinfo` ``None``." +msgstr "返回表示当前地方时的 datetime 对象,其中 :attr:`.tzinfo` 为 ``None``。" + +#: ../../library/datetime.rst:854 +msgid "Equivalent to::" +msgstr "等价于::" + +#: ../../library/datetime.rst:858 +msgid "See also :meth:`now`, :meth:`fromtimestamp`." +msgstr "另请参阅 :meth:`now`, :meth:`fromtimestamp`。" + +#: ../../library/datetime.rst:860 +msgid "" +"This method is functionally equivalent to :meth:`now`, but without a ``tz`` " +"parameter." +msgstr "此方法的功能等价于 :meth:`now`,但是不带 ``tz`` 形参。" + +#: ../../library/datetime.rst:865 +msgid "Return the current local date and time." +msgstr "返回表示当前地方时的 date 和 time 对象。" + +#: ../../library/datetime.rst:867 +msgid "" +"If optional argument *tz* is ``None`` or not specified, this is like " +":meth:`today`, but, if possible, supplies more precision than can be gotten " +"from going through a :func:`time.time` timestamp (for example, this may be " +"possible on platforms supplying the C :c:func:`gettimeofday` function)." +msgstr "" +"如果可选参数 *tz* 为 ``None`` 或未指定,这就类似于 :meth:`today`,但该方法会在可能的情况下提供比通过 " +":func:`time.time` 时间戳所获时间值更高的精度(例如,在提供了 C :c:func:`gettimeofday` " +"函数的平台上就可以做到这一点)。" + +#: ../../library/datetime.rst:873 +msgid "" +"If *tz* is not ``None``, it must be an instance of a :class:`tzinfo` " +"subclass, and the current date and time are converted to *tz*’s time zone." +msgstr "" +"如果 *tz* 不为 ``None``,它必须是 :class:`tzinfo` 子类的一个实例,并且当前日期和时间将被转换到 *tz* 时区。" + +#: ../../library/datetime.rst:876 +msgid "This function is preferred over :meth:`today` and :meth:`utcnow`." +msgstr "此函数可以替代 :meth:`today` 和 :meth:`utcnow`。" + +#: ../../library/datetime.rst:881 +msgid "Return the current UTC date and time, with :attr:`.tzinfo` ``None``." +msgstr "返回表示当前 UTC 时间的 date 和 time,其中 :attr:`.tzinfo` 为 ``None``。" + +#: ../../library/datetime.rst:883 +msgid "" +"This is like :meth:`now`, but returns the current UTC date and time, as a " +"naive :class:`.datetime` object. An aware current UTC datetime can be " +"obtained by calling ``datetime.now(timezone.utc)``. See also :meth:`now`." +msgstr "" +"这类似于 :meth:`now`,但返回的是当前 UTC 日期和时间,类型为简单型 :class:`.datetime` 对象。 感知型的当前 UTC " +"日期时间可通过调用 ``datetime.now(timezone.utc)`` 来获得。 另请参阅 :meth:`now`。" + +#: ../../library/datetime.rst:889 +msgid "" +"Because naive ``datetime`` objects are treated by many ``datetime`` methods " +"as local times, it is preferred to use aware datetimes to represent times in" +" UTC. As such, the recommended way to create an object representing the " +"current time in UTC is by calling ``datetime.now(timezone.utc)``." +msgstr "" +"由于简单型 ``datetime`` 对象会被许多 ``datetime`` 方法当作本地时间来处理,最好是使用感知型日期时间对象来表示 UTC 时间。" +" 因此,创建表示当前 UTC 时间的对象的推荐方式是通过调用 ``datetime.now(timezone.utc)``。" + +#: ../../library/datetime.rst:897 +msgid "" +"Return the local date and time corresponding to the POSIX timestamp, such as" +" is returned by :func:`time.time`. If optional argument *tz* is ``None`` or " +"not specified, the timestamp is converted to the platform's local date and " +"time, and the returned :class:`.datetime` object is naive." +msgstr "" +"返回 POSIX 时间戳对应的本地日期和时间,如 :func:`time.time` 返回的。 如果可选参数 *tz* 指定为 ``None`` " +"或未指定,时间戳将转换为平台的本地日期和时间,并且返回的 :class:`.datetime` 对象将为简单型。" + +#: ../../library/datetime.rst:902 +msgid "" +"If *tz* is not ``None``, it must be an instance of a :class:`tzinfo` " +"subclass, and the timestamp is converted to *tz*’s time zone." +msgstr "" +"如果 *tz* 不为 ``None``,它必须是 :class:`tzinfo` 子类的一个实例,并且时间戳将被转换到 *tz* 指定的时区。" + +#: ../../library/datetime.rst:905 +msgid "" +":meth:`fromtimestamp` may raise :exc:`OverflowError`, if the timestamp is " +"out of the range of values supported by the platform C :c:func:`localtime` " +"or :c:func:`gmtime` functions, and :exc:`OSError` on :c:func:`localtime` or " +":c:func:`gmtime` failure. It's common for this to be restricted to years in " +"1970 through 2038. Note that on non-POSIX systems that include leap seconds " +"in their notion of a timestamp, leap seconds are ignored by " +":meth:`fromtimestamp`, and then it's possible to have two timestamps " +"differing by a second that yield identical :class:`.datetime` objects. This " +"method is preferred over :meth:`utcfromtimestamp`." +msgstr "" +":meth:`fromtimestamp` 可能会引发 :exc:`OverflowError`,如果时间戳数值超出所在平台 C " +":c:func:`localtime` 或 :c:func:`gmtime` 函数的支持范围的话,并会在 :c:func:`localtime` 或 " +":c:func:`gmtime` 报错时引发 :exc:`OSError`。 通常该数值会被限制在 1970 年至 2038 年之间。 " +"请注意在时间戳概念包含闰秒的非 POSIX 系统上,闰秒会被 :meth:`fromtimestamp` " +"所忽略,结果可能导致两个相差一秒的时间戳产生相同的 :class:`.datetime` 对象。 相比 :meth:`utcfromtimestamp`" +" 更推荐使用此方法。" + +#: ../../library/datetime.rst:916 +msgid "" +"Raise :exc:`OverflowError` instead of :exc:`ValueError` if the timestamp is " +"out of the range of values supported by the platform C :c:func:`localtime` " +"or :c:func:`gmtime` functions. Raise :exc:`OSError` instead of " +":exc:`ValueError` on :c:func:`localtime` or :c:func:`gmtime` failure." +msgstr "" +"引发 :exc:`OverflowError` 而不是 :exc:`ValueError`,如果时间戳数值超出所在平台 C " +":c:func:`localtime` 或 :c:func:`gmtime` 函数的支持范围的话。 并会在 :c:func:`localtime` 或 " +":c:func:`gmtime` 出错时引发 :exc:`OSError` 而不是 :exc:`ValueError`。" + +#: ../../library/datetime.rst:923 +msgid "" +":meth:`fromtimestamp` may return instances with :attr:`.fold` set to 1." +msgstr ":meth:`fromtimestamp` 可能返回 :attr:`.fold` 值设为 1 的实例。" + +#: ../../library/datetime.rst:928 +msgid "" +"Return the UTC :class:`.datetime` corresponding to the POSIX timestamp, with" +" :attr:`.tzinfo` ``None``. (The resulting object is naive.)" +msgstr "" +"返回对应于 POSIX 时间戳的 UTC :class:`.datetime`,其中 :attr:`.tzinfo` 值为 ``None``。 " +"(结果为简单型对象。)" + +#: ../../library/datetime.rst:931 +msgid "" +"This may raise :exc:`OverflowError`, if the timestamp is out of the range of" +" values supported by the platform C :c:func:`gmtime` function, and " +":exc:`OSError` on :c:func:`gmtime` failure. It's common for this to be " +"restricted to years in 1970 through 2038." +msgstr "" +"这可能引发 :exc:`OverflowError`,如果时间戳数值超出所在平台 C :c:func:`gmtime` 函数的支持范围的话,并会在 " +":c:func:`gmtime` 报错时引发 :exc:`OSError`。 通常该数值会被限制在 1970 至 2038 年之间。" + +#: ../../library/datetime.rst:936 +msgid "" +"To get an aware :class:`.datetime` object, call :meth:`fromtimestamp`::" +msgstr "要得到一个感知型 :class:`.datetime` 对象,应调用 :meth:`fromtimestamp`::" + +#: ../../library/datetime.rst:940 +msgid "" +"On the POSIX compliant platforms, it is equivalent to the following " +"expression::" +msgstr "在 POSIX 兼容的平台上,它等价于以下表达式::" + +#: ../../library/datetime.rst:945 +msgid "" +"except the latter formula always supports the full years range: between " +":const:`MINYEAR` and :const:`MAXYEAR` inclusive." +msgstr "不同之处在于后一种形式总是支持完整年份范围:从 :const:`MINYEAR` 到 :const:`MAXYEAR` 的开区间。" + +#: ../../library/datetime.rst:950 +msgid "" +"Because naive ``datetime`` objects are treated by many ``datetime`` methods " +"as local times, it is preferred to use aware datetimes to represent times in" +" UTC. As such, the recommended way to create an object representing a " +"specific timestamp in UTC is by calling ``datetime.fromtimestamp(timestamp, " +"tz=timezone.utc)``." +msgstr "" +"由于简单型 ``datetime`` 对象会被许多 ``datetime`` 方法当作本地时间来处理,最好是使用感知型日期时间对象来表示 UTC 时间。" +" 因此,创建表示特定 UTC 时间戳的日期时间对象的推荐方式是通过调用 ``datetime.fromtimestamp(timestamp, " +"tz=timezone.utc)``。" + +#: ../../library/datetime.rst:956 +msgid "" +"Raise :exc:`OverflowError` instead of :exc:`ValueError` if the timestamp is " +"out of the range of values supported by the platform C :c:func:`gmtime` " +"function. Raise :exc:`OSError` instead of :exc:`ValueError` on " +":c:func:`gmtime` failure." +msgstr "" +"引发 :exc:`OverflowError` 而不是 :exc:`ValueError`,如果时间戳数值超出所在平台 C " +":c:func:`gmtime` 函数的支持范围的话。 并会在 :c:func:`gmtime` 出错时引发 :exc:`OSError` 而不是 " +":exc:`ValueError`。" + +#: ../../library/datetime.rst:965 +msgid "" +"Return the :class:`.datetime` corresponding to the proleptic Gregorian " +"ordinal, where January 1 of year 1 has ordinal 1. :exc:`ValueError` is " +"raised unless ``1 <= ordinal <= datetime.max.toordinal()``. The hour, " +"minute, second and microsecond of the result are all 0, and :attr:`.tzinfo` " +"is ``None``." +msgstr "" +"返回对应于预期格列高利历序号的 :class:`.datetime`,其中公元 1 年 1 月 1 日的序号为 1。 除非 ``1 <= ordinal" +" <= datetime.max.toordinal()`` 否则会引发 :exc:`ValueError`。 结果的 hour, minute, " +"second 和 microsecond 值均为 0,并且 :attr:`.tzinfo` 值为 ``None``。" + +#: ../../library/datetime.rst:973 +msgid "" +"Return a new :class:`.datetime` object whose date components are equal to " +"the given :class:`date` object's, and whose time components are equal to the" +" given :class:`.time` object's. If the *tzinfo* argument is provided, its " +"value is used to set the :attr:`.tzinfo` attribute of the result, otherwise " +"the :attr:`~.time.tzinfo` attribute of the *time* argument is used." +msgstr "" +"返回一个新的 :class:`.datetime` 对象,对象的日期部分等于给定的 :class:`date` 对象的值,而其时间部分等于给定的 " +":class:`.time` 对象的值。 如果提供了 *tzinfo* 参数,其值会被用来设置结果的 :attr:`.tzinfo` 属性,否则将使用 " +"*time* 参数的 :attr:`~.time.tzinfo` 属性。" + +#: ../../library/datetime.rst:980 +msgid "" +"For any :class:`.datetime` object *d*, ``d == datetime.combine(d.date(), " +"d.time(), d.tzinfo)``. If date is a :class:`.datetime` object, its time " +"components and :attr:`.tzinfo` attributes are ignored." +msgstr "" +"对于任意 :class:`.datetime` 对象 *d*,``d == datetime.combine(d.date(), d.time(), " +"d.tzinfo)``。 如果 date 是一个 :class:`.datetime` 对象,它的时间部分和 :attr:`.tzinfo` " +"属性会被忽略。" + +#: ../../library/datetime.rst:985 +msgid "Added the *tzinfo* argument." +msgstr "增加了 *tzinfo* 参数。" + +#: ../../library/datetime.rst:991 +msgid "" +"Return a :class:`.datetime` corresponding to a *date_string* in one of the " +"formats emitted by :meth:`date.isoformat` and :meth:`datetime.isoformat`." +msgstr "" +"返回一个对应于 :meth:`date.isoformat` 和 :meth:`datetime.isoformat` 所提供的某一种 " +"*date_string* 的 :class:`.datetime` 对象。" + +#: ../../library/datetime.rst:994 +msgid "Specifically, this function supports strings in the format:" +msgstr "特别地,此函数支持以下格式的字符串:" + +#: ../../library/datetime.rst:1000 +msgid "where ``*`` can match any single character." +msgstr "其中 ``*`` 可以匹配任意的单个字符。" + +#: ../../library/datetime.rst:1004 +msgid "" +"This does *not* support parsing arbitrary ISO 8601 strings - it is only " +"intended as the inverse operation of :meth:`datetime.isoformat`. A more " +"full-featured ISO 8601 parser, ``dateutil.parser.isoparse`` is available in " +"the third-party package `dateutil " +"`__." +msgstr "" +"此函数 *并不* 支持解析任意 ISO 8601 字符串 —— 它的目的只是作为 :meth:`datetime.isoformat` 的逆操作。 " +"在第三方包 `dateutil " +"`__" +" 中提供了一个更完善的 ISO 8601 解析器 ``dateutil.parser.isoparse``。" + +#: ../../library/datetime.rst:1009 ../../library/datetime.rst:1426 +#: ../../library/datetime.rst:1773 +msgid "Examples::" +msgstr "示例::" + +#: ../../library/datetime.rst:1028 +msgid "" +"Return a :class:`.datetime` corresponding to the ISO calendar date specified" +" by year, week and day. The non-date components of the datetime are " +"populated with their normal default values. This is the inverse of the " +"function :meth:`datetime.isocalendar`." +msgstr "" +"返回以 year, week 和 day 值指明的 ISO 历法日期所对应的 :class:`.datetime`。 该datetime " +"对象的非日期部分将使用其标准默认值来填充。 这是函数 :meth:`datetime.isocalendar` 的逆操作。" + +#: ../../library/datetime.rst:1037 +msgid "" +"Return a :class:`.datetime` corresponding to *date_string*, parsed according" +" to *format*." +msgstr "返回一个对应于 *date_string*,根据 *format* 进行解析得到的 :class:`.datetime` 对象。" + +#: ../../library/datetime.rst:1040 +msgid "This is equivalent to::" +msgstr "这相当于:" + +#: ../../library/datetime.rst:1044 +msgid "" +":exc:`ValueError` is raised if the date_string and format can't be parsed by" +" :func:`time.strptime` or if it returns a value which isn't a time tuple. " +"For a complete list of formatting directives, see :ref:`strftime-strptime-" +"behavior`." +msgstr "" +"如果 date_string 和 format 无法被 :func:`time.strptime` 解析或它返回一个不是时间元组的值,则将引发 " +":exc:`ValueError`。 要获取格式化指令的完整列表,请参阅 :ref:`strftime-strptime-behavior`。" + +#: ../../library/datetime.rst:1055 +msgid "" +"The earliest representable :class:`.datetime`, ``datetime(MINYEAR, 1, 1, " +"tzinfo=None)``." +msgstr "最早的可表示 :class:`.datetime`,``datetime(MINYEAR, 1, 1, tzinfo=None)``。" + +#: ../../library/datetime.rst:1061 +msgid "" +"The latest representable :class:`.datetime`, ``datetime(MAXYEAR, 12, 31, 23," +" 59, 59, 999999, tzinfo=None)``." +msgstr "" +"最晚的可表示 :class:`.datetime`,``datetime(MAXYEAR, 12, 31, 23, 59, 59, 999999, " +"tzinfo=None)``。" + +#: ../../library/datetime.rst:1067 +msgid "" +"The smallest possible difference between non-equal :class:`.datetime` " +"objects, ``timedelta(microseconds=1)``." +msgstr "两个不相等的 :class:`.datetime` 对象之间可能的最小间隔,``timedelta(microseconds=1)``。" + +#: ../../library/datetime.rst:1090 ../../library/datetime.rst:1693 +msgid "In ``range(24)``." +msgstr "取值范围是 ``range(24)``。" + +#: ../../library/datetime.rst:1095 ../../library/datetime.rst:1100 +#: ../../library/datetime.rst:1698 ../../library/datetime.rst:1703 +msgid "In ``range(60)``." +msgstr "取值范围是 ``range(60)``。" + +#: ../../library/datetime.rst:1105 ../../library/datetime.rst:1708 +msgid "In ``range(1000000)``." +msgstr "取值范围是 ``range(1000000)``。" + +#: ../../library/datetime.rst:1110 +msgid "" +"The object passed as the *tzinfo* argument to the :class:`.datetime` " +"constructor, or ``None`` if none was passed." +msgstr "作为 *tzinfo* 参数被传给 :class:`.datetime` 构造器的对象,如果没有传入值则为 ``None``。" + +#: ../../library/datetime.rst:1116 ../../library/datetime.rst:1719 +msgid "" +"In ``[0, 1]``. Used to disambiguate wall times during a repeated interval. " +"(A repeated interval occurs when clocks are rolled back at the end of " +"daylight saving time or when the UTC offset for the current zone is " +"decreased for political reasons.) The value 0 (1) represents the earlier " +"(later) of the two moments with the same wall time representation." +msgstr "" +"取值范围是 ``[0, 1]``。 用于在重复的时间段中消除边界时间歧义。 (当夏令时结束时回拨时钟或由于政治原因导致当明时区的 UTC " +"时差减少就会出现重复的时间段。) 取值 0 (1) 表示两个时刻早于(晚于)所代表的同一边界时间。" + +#: ../../library/datetime.rst:1129 +msgid "``datetime2 = datetime1 + timedelta``" +msgstr "``datetime2 = datetime1 + timedelta``" + +#: ../../library/datetime.rst:1129 ../../library/datetime.rst:2310 +#: ../../library/datetime.rst:2315 ../../library/datetime.rst:2327 +#: ../../library/datetime.rst:2332 ../../library/datetime.rst:2392 +#: ../../library/datetime.rst:2397 ../../library/datetime.rst:2401 +msgid "\\(1)" +msgstr "\\(1)" + +#: ../../library/datetime.rst:1131 +msgid "``datetime2 = datetime1 - timedelta``" +msgstr "``datetime2 = datetime1 - timedelta``" + +#: ../../library/datetime.rst:1131 ../../library/datetime.rst:2343 +msgid "\\(2)" +msgstr "\\(2)" + +#: ../../library/datetime.rst:1133 +msgid "``timedelta = datetime1 - datetime2``" +msgstr "``timedelta = datetime1 - datetime2``" + +#: ../../library/datetime.rst:1135 +msgid "``datetime1 < datetime2``" +msgstr "``datetime1 < datetime2``" + +#: ../../library/datetime.rst:1135 +msgid "Compares :class:`.datetime` to :class:`.datetime`. (4)" +msgstr "比较 :class:`.datetime` 与 :class:`.datetime`。 (4)" + +#: ../../library/datetime.rst:1140 +msgid "" +"datetime2 is a duration of timedelta removed from datetime1, moving forward " +"in time if ``timedelta.days`` > 0, or backward if ``timedelta.days`` < 0. " +"The result has the same :attr:`~.datetime.tzinfo` attribute as the input " +"datetime, and datetime2 - datetime1 == timedelta after. :exc:`OverflowError`" +" is raised if datetime2.year would be smaller than :const:`MINYEAR` or " +"larger than :const:`MAXYEAR`. Note that no time zone adjustments are done " +"even if the input is an aware object." +msgstr "" +"datetime2 是从 datetime1 去掉了一段 timedelta 的结果,如果 ``timedelta.days`` > 0 " +"则是在时间线上前进,如果 ``timedelta.days`` < 0 则是在时间线上后退。 该结果具有与输入的 datetime 相同的 " +":attr:`~.datetime.tzinfo` 属性,并且操作完成后 datetime2 - datetime1 == timedelta。 如果 " +"datetime2.year 将要小于 :const:`MINYEAR` 或大于 :const:`MAXYEAR` 则会引发 " +":exc:`OverflowError`。 请注意即使输入的是一个感知型对象,该方法也不会进行时区调整。" + +#: ../../library/datetime.rst:1149 +msgid "" +"Computes the datetime2 such that datetime2 + timedelta == datetime1. As for " +"addition, the result has the same :attr:`~.datetime.tzinfo` attribute as the" +" input datetime, and no time zone adjustments are done even if the input is " +"aware." +msgstr "" +"计算 datetime2 使得 datetime2 + timedelta == datetime1。 与相加操作一样,结果具有与输入的 " +"datetime 相同的 :attr:`~.datetime.tzinfo` 属性,即使输入的是一个感知型对象,该方法也不会进行时区调整。" + +#: ../../library/datetime.rst:1154 +msgid "" +"Subtraction of a :class:`.datetime` from a :class:`.datetime` is defined " +"only if both operands are naive, or if both are aware. If one is aware and " +"the other is naive, :exc:`TypeError` is raised." +msgstr "" +"从一个 :class:`.datetime` 减去一个 :class:`.datetime` 仅对两个操作数均为简单型或均为感知型时有定义。 " +"如果一个是感知型而另一个是简单型,则会引发 :exc:`TypeError`。" + +#: ../../library/datetime.rst:1158 +msgid "" +"If both are naive, or both are aware and have the same " +":attr:`~.datetime.tzinfo` attribute, the :attr:`~.datetime.tzinfo` " +"attributes are ignored, and the result is a :class:`timedelta` object *t* " +"such that ``datetime2 + t == datetime1``. No time zone adjustments are done " +"in this case." +msgstr "" +"如果两个操作数都是简单型,或都是感知型并且具有相同的 :attr:`~.datetime.tzinfo` 属性,则 " +":attr:`~.datetime.tzinfo` 属性会被忽略,并且结果会是一个使得 ``datetime2 + t == datetime1`` 的" +" :class:`timedelta` 对象 *t*。 在此情况下不会进行时区调整。" + +#: ../../library/datetime.rst:1163 +msgid "" +"If both are aware and have different :attr:`~.datetime.tzinfo` attributes, " +"``a-b`` acts as if *a* and *b* were first converted to naive UTC datetimes " +"first. The result is ``(a.replace(tzinfo=None) - a.utcoffset()) - " +"(b.replace(tzinfo=None) - b.utcoffset())`` except that the implementation " +"never overflows." +msgstr "" +"如果两个操作数都是感知型且具有不同的 :attr:`~.datetime.tzinfo` 属性,``a-b`` 操作的效果就如同 *a* 和 *b* " +"首先被转换为简单型 UTC 日期时间。 结果将是 ``(a.replace(tzinfo=None) - a.utcoffset()) - " +"(b.replace(tzinfo=None) - b.utcoffset())``,除非具体实现绝对不溢出。" + +#: ../../library/datetime.rst:1169 +msgid "" +"*datetime1* is considered less than *datetime2* when *datetime1* precedes " +"*datetime2* in time." +msgstr "当 *datetime1* 的时间在 *datetime2* 之前则认为 *datetime1* 小于 *datetime2*。" + +#: ../../library/datetime.rst:1172 +msgid "" +"If one comparand is naive and the other is aware, :exc:`TypeError` is raised" +" if an order comparison is attempted. For equality comparisons, naive " +"instances are never equal to aware instances." +msgstr "" +"如果比较的一方是简单型而另一方是感知型,则如果尝试进行顺序比较将引发 :exc:`TypeError`。 " +"对于相等比较,简单型实例将永远不等于感知型实例。" + +#: ../../library/datetime.rst:1176 +msgid "" +"If both comparands are aware, and have the same :attr:`~.datetime.tzinfo` " +"attribute, the common :attr:`~.datetime.tzinfo` attribute is ignored and the" +" base datetimes are compared. If both comparands are aware and have " +"different :attr:`~.datetime.tzinfo` attributes, the comparands are first " +"adjusted by subtracting their UTC offsets (obtained from " +"``self.utcoffset()``)." +msgstr "" +"如果两个比较方都是感知型,且具有相同的 :attr:`~.datetime.tzinfo` 属性,则相同的 " +":attr:`~.datetime.tzinfo` 属性会被忽略并对基本日期时间值进行比较。 如果两个比较方都是感知型且具有不同的 " +":attr:`~.datetime.tzinfo` 属性,则两个比较方将首先通过减去它们的 UTC 差值(使用 ``self.utcoffset()``" +" 获取)来进行调整。" + +#: ../../library/datetime.rst:1182 +msgid "" +"Equality comparisons between aware and naive :class:`.datetime` instances " +"don't raise :exc:`TypeError`." +msgstr "感知型和简单型 :class:`.datetime` 实例之间的相等比较不会引发 :exc:`TypeError`。" + +#: ../../library/datetime.rst:1188 +msgid "" +"In order to stop comparison from falling back to the default scheme of " +"comparing object addresses, datetime comparison normally raises " +":exc:`TypeError` if the other comparand isn't also a :class:`.datetime` " +"object. However, ``NotImplemented`` is returned instead if the other " +"comparand has a :meth:`timetuple` attribute. This hook gives other kinds of " +"date objects a chance at implementing mixed-type comparison. If not, when a " +":class:`.datetime` object is compared to an object of a different type, " +":exc:`TypeError` is raised unless the comparison is ``==`` or ``!=``. The " +"latter cases return :const:`False` or :const:`True`, respectively." +msgstr "" +"为了防止比较操作回退为默认的对象地址比较方式,datetime 比较通常会引发 :exc:`TypeError`,如果比较目标不同样为 " +":class:`.datetime` 对象的话。 不过也可能会返回 ``NotImplemented``,如果比较目标具有 " +":meth:`timetuple` 属性的话。 这个钩子给予其他种类的日期对象实现混合类型比较的机会。 如果未实现,则当 " +":class:`.datetime` 对象与不同类型比较时将会引发 :exc:`TypeError`,除非是 ``==`` 或 ``!=`` 比较。 " +"后两种情况将分别返回 :const:`False` 或 :const:`True`。" + +#: ../../library/datetime.rst:1202 +msgid "Return :class:`date` object with same year, month and day." +msgstr "返回具有同样 year, month 和 day 值的 :class:`date` 对象。" + +#: ../../library/datetime.rst:1207 +msgid "" +"Return :class:`.time` object with same hour, minute, second, microsecond and" +" fold. :attr:`.tzinfo` is ``None``. See also method :meth:`timetz`." +msgstr "" +"返回具有同样 hour, minute, second, microsecond 和 fold 值的 :class:`.time` 对象。 " +":attr:`.tzinfo` 值为 ``None``。 另请参见 :meth:`timetz` 方法。" + +#: ../../library/datetime.rst:1210 ../../library/datetime.rst:1219 +msgid "The fold value is copied to the returned :class:`.time` object." +msgstr "fold 值会被复制给返回的 :class:`.time` 对象。" + +#: ../../library/datetime.rst:1216 +msgid "" +"Return :class:`.time` object with same hour, minute, second, microsecond, " +"fold, and tzinfo attributes. See also method :meth:`time`." +msgstr "" +"返回具有同样 hour, minute, second, microsecond, fold 和 tzinfo 属性性的 :class:`.time` " +"对象。 另请参见 :meth:`time` 方法。" + +#: ../../library/datetime.rst:1227 +msgid "" +"Return a datetime with the same attributes, except for those attributes " +"given new values by whichever keyword arguments are specified. Note that " +"``tzinfo=None`` can be specified to create a naive datetime from an aware " +"datetime with no conversion of date and time data." +msgstr "" +"返回一个具有同样属性值的 datetime,除非通过任何关键字参数为某些属性指定了新值。 请注意可以通过指定 ``tzinfo=None`` " +"来从一个感知型 datetime 创建一个简单型 datetime 而不必转换日期和时间数据。" + +#: ../../library/datetime.rst:1238 +msgid "" +"Return a :class:`.datetime` object with new :attr:`.tzinfo` attribute *tz*, " +"adjusting the date and time data so the result is the same UTC time as " +"*self*, but in *tz*'s local time." +msgstr "" +"返回一个具有新的 :attr:`.tzinfo` 属性 *tz* 的 :class:`.datetime` 对象,并会调整日期和时间数据使得结果对应的 " +"UTC 时间与 *self* 相同,但为 *tz* 时区的本地时间。" + +#: ../../library/datetime.rst:1242 +msgid "" +"If provided, *tz* must be an instance of a :class:`tzinfo` subclass, and its" +" :meth:`utcoffset` and :meth:`dst` methods must not return ``None``. If " +"*self* is naive, it is presumed to represent time in the system timezone." +msgstr "" +"如果给出了 *tz*,则它必须是一个 :class:`tzinfo` 子类的实例,并且其 :meth:`utcoffset` 和 :meth:`dst`" +" 方法不可返回 ``None``。 如果 *self* 为简单型,它会被假定为基于系统时区表示的时间。" + +#: ../../library/datetime.rst:1246 +msgid "" +"If called without arguments (or with ``tz=None``) the system local timezone " +"is assumed for the target timezone. The ``.tzinfo`` attribute of the " +"converted datetime instance will be set to an instance of :class:`timezone` " +"with the zone name and offset obtained from the OS." +msgstr "" +"如果调用时不传入参数 (或传入 ``tz=None``) 则将假定目标时区为系统的本地时区。 转换后 datetime 实例的 ``.tzinfo`` " +"属性将被设为一个 :class:`timezone` 实例,时区名称和时差值将从 OS 获取。" + +#: ../../library/datetime.rst:1251 +msgid "" +"If ``self.tzinfo`` is *tz*, ``self.astimezone(tz)`` is equal to *self*: no " +"adjustment of date or time data is performed. Else the result is local time " +"in the timezone *tz*, representing the same UTC time as *self*: after " +"``astz = dt.astimezone(tz)``, ``astz - astz.utcoffset()`` will have the same" +" date and time data as ``dt - dt.utcoffset()``." +msgstr "" +"如果 ``self.tzinfo`` 为 *tz*,``self.astimezone(tz)`` 等于 *self*: 不会对日期或时间数据进行调整。" +" 否则结果为 *tz* 时区的本地时间,代表的 UTC 时间与 *self* 相同:在 ``astz = dt.astimezone(tz)`` " +"之后,``astz - astz.utcoffset()`` 将具有与 ``dt - dt.utcoffset()`` 相同的日期和时间数据。" + +#: ../../library/datetime.rst:1257 +msgid "" +"If you merely want to attach a time zone object *tz* to a datetime *dt* " +"without adjustment of date and time data, use ``dt.replace(tzinfo=tz)``. If " +"you merely want to remove the time zone object from an aware datetime *dt* " +"without conversion of date and time data, use ``dt.replace(tzinfo=None)``." +msgstr "" +"如果你只是想要附加一个时区对象 *tz* 到一个 datetime 对象 *dt* 而不调整日期和时间数据,请使用 " +"``dt.replace(tzinfo=tz)``。 如果你只想从一个感知型 datetime 对象 *dt* 移除时区对象,请使用 " +"``dt.replace(tzinfo=None)``。" + +#: ../../library/datetime.rst:1262 +msgid "" +"Note that the default :meth:`tzinfo.fromutc` method can be overridden in a " +":class:`tzinfo` subclass to affect the result returned by " +":meth:`astimezone`. Ignoring error cases, :meth:`astimezone` acts like::" +msgstr "" +"请注意默认的 :meth:`tzinfo.fromutc` 方法在 :class:`tzinfo` 的子类中可以被重写,从而影响 " +":meth:`astimezone` 的返回结果。 如果忽略出错的情况,:meth:`astimezone` 的行为就类似于::" + +#: ../../library/datetime.rst:1274 +msgid "*tz* now can be omitted." +msgstr "*tz* 现在可以被省略。" + +#: ../../library/datetime.rst:1277 +msgid "" +"The :meth:`astimezone` method can now be called on naive instances that are " +"presumed to represent system local time." +msgstr ":meth:`astimezone` 方法可以由简单型实例调用,这将假定其表示本地时间。" + +#: ../../library/datetime.rst:1284 +msgid "" +"If :attr:`.tzinfo` is ``None``, returns ``None``, else returns " +"``self.tzinfo.utcoffset(self)``, and raises an exception if the latter " +"doesn't return ``None`` or a :class:`timedelta` object with magnitude less " +"than one day." +msgstr "" +"如果 :attr:`.tzinfo` 为 ``None``,则返回 ``None``,否则返回 " +"``self.tzinfo.utcoffset(self)``,并且在后者不返回 ``None`` 或者一个幅度小于一天的 " +":class:`timedelta` 对象时将引发异常。" + +#: ../../library/datetime.rst:1288 ../../library/datetime.rst:1871 +#: ../../library/datetime.rst:1977 ../../library/datetime.rst:2222 +#: ../../library/datetime.rst:2234 ../../library/datetime.rst:2531 +msgid "The UTC offset is not restricted to a whole number of minutes." +msgstr "UTC 时差不再限制为一个整数分钟值。" + +#: ../../library/datetime.rst:1294 +msgid "" +"If :attr:`.tzinfo` is ``None``, returns ``None``, else returns " +"``self.tzinfo.dst(self)``, and raises an exception if the latter doesn't " +"return ``None`` or a :class:`timedelta` object with magnitude less than one " +"day." +msgstr "" +"如果 :attr:`.tzinfo` 为 ``None``,则返回 ``None``,否则返回 " +"``self.tzinfo.dst(self)``,并且在后者不返回 ``None`` 或者一个幅度小于一天的 :class:`timedelta` " +"对象时将引发异常。" + +#: ../../library/datetime.rst:1298 ../../library/datetime.rst:1881 +#: ../../library/datetime.rst:2031 +msgid "The DST offset is not restricted to a whole number of minutes." +msgstr "DST 差值不再限制为一个整数分钟值。" + +#: ../../library/datetime.rst:1304 +msgid "" +"If :attr:`.tzinfo` is ``None``, returns ``None``, else returns " +"``self.tzinfo.tzname(self)``, raises an exception if the latter doesn't " +"return ``None`` or a string object," +msgstr "" +"如果 :attr:`.tzinfo` 为 ``None``,则返回 ``None``,否则返回 " +"``self.tzinfo.tzname(self)``,如果后者不返回 ``None`` 或者一个字符串对象则将引发异常。" + +#: ../../library/datetime.rst:1319 +msgid "" +"where ``yday = d.toordinal() - date(d.year, 1, 1).toordinal() + 1`` is the " +"day number within the current year starting with ``1`` for January 1st. The " +":attr:`tm_isdst` flag of the result is set according to the :meth:`dst` " +"method: :attr:`.tzinfo` is ``None`` or :meth:`dst` returns ``None``, " +":attr:`tm_isdst` is set to ``-1``; else if :meth:`dst` returns a non-zero " +"value, :attr:`tm_isdst` is set to ``1``; else :attr:`tm_isdst` is set to " +"``0``." +msgstr "" +"其中 ``yday = d.toordinal() - date(d.year, 1, 1).toordinal() + 1`` " +"是日期在当前年份中的序号,起始序号 ``1`` 表示 1 月 1 日。 结果的 :attr:`tm_isdst` 旗标的设定会依据 " +":meth:`dst` 方法:如果 :attr:`.tzinfo` 为 ``None`` 或 :meth:`dst` 返回 ``None``,则 " +":attr:`tm_isdst` 将设为 ``-1``;否则如果 :meth:`dst` 返回一个非零值,则 :attr:`tm_isdst` 将设为 " +"``1``;在其他情况下 :attr:`tm_isdst` 将设为 ``0``。" + +#: ../../library/datetime.rst:1330 +msgid "" +"If :class:`.datetime` instance *d* is naive, this is the same as " +"``d.timetuple()`` except that :attr:`tm_isdst` is forced to 0 regardless of " +"what ``d.dst()`` returns. DST is never in effect for a UTC time." +msgstr "" +"如果 :class:`.datetime` 实例 *d* 为简单型,这类似于 ``d.timetuple()``,不同之处在于 " +":attr:`tm_isdst` 会强制设为 0,无论 ``d.dst()`` 返回什么结果。 DST 对于 UTC 时间永远无效。" + +#: ../../library/datetime.rst:1334 +msgid "" +"If *d* is aware, *d* is normalized to UTC time, by subtracting " +"``d.utcoffset()``, and a :class:`time.struct_time` for the normalized time " +"is returned. :attr:`tm_isdst` is forced to 0. Note that an " +":exc:`OverflowError` may be raised if *d*.year was ``MINYEAR`` or " +"``MAXYEAR`` and UTC adjustment spills over a year boundary." +msgstr "" +"如果 *d* 为感知型, *d* 会通过减去 ``d.utcoffset()`` 来标准化为 UTC 时间,并返回该标准化时间所对应的 " +":class:`time.struct_time`。 :attr:`tm_isdst` 会强制设为 0。 请注意如果 *d*.year 为 " +"``MINYEAR`` 或 ``MAXYEAR`` 并且 UTC 调整超出一年的边界则可能引发 :exc:`OverflowError`。" + +#: ../../library/datetime.rst:1343 +msgid "" +"Because naive ``datetime`` objects are treated by many ``datetime`` methods " +"as local times, it is preferred to use aware datetimes to represent times in" +" UTC; as a result, using ``utcfromtimetuple`` may give misleading results. " +"If you have a naive ``datetime`` representing UTC, use " +"``datetime.replace(tzinfo=timezone.utc)`` to make it aware, at which point " +"you can use :meth:`.datetime.timetuple`." +msgstr "" +"由于简单型 ``datetime`` 对象会被许多 ``datetime`` 方法当作本地时间来处理,最好是使用感知型日期时间来表示 UTC " +"时间;因此,使用 ``utcfromtimetuple`` 可能会给出误导性的结果。 如果你有一个表示 UTC 的简单型 " +"``datetime``,请使用 ``datetime.replace(tzinfo=timezone.utc)`` 将其改为感知型,这样你才能使用 " +":meth:`.datetime.timetuple`。" + +#: ../../library/datetime.rst:1352 +msgid "" +"Return the proleptic Gregorian ordinal of the date. The same as " +"``self.date().toordinal()``." +msgstr "返回日期的预期格列高利历序号。 与 ``self.date().toordinal()`` 相同。" + +#: ../../library/datetime.rst:1357 +msgid "" +"Return POSIX timestamp corresponding to the :class:`.datetime` instance. The" +" return value is a :class:`float` similar to that returned by " +":func:`time.time`." +msgstr "" +"返回对应于 :class:`.datetime` 实例的 POSIX 时间戳。 此返回值是与 :func:`time.time` 返回值类似的 " +":class:`float` 对象。" + +#: ../../library/datetime.rst:1361 +msgid "" +"Naive :class:`.datetime` instances are assumed to represent local time and " +"this method relies on the platform C :c:func:`mktime` function to perform " +"the conversion. Since :class:`.datetime` supports wider range of values than" +" :c:func:`mktime` on many platforms, this method may raise " +":exc:`OverflowError` for times far in the past or far in the future." +msgstr "" +"简单型 :class:`.datetime` 实例会假定为代表本地时间,并且此方法依赖于平台的 C :c:func:`mktime` 函数来执行转换。 " +"由于在许多平台上 :class:`.datetime` 支持的范围比 :c:func:`mktime` 更广,对于极其遥远的过去或未来此方法可能引发 " +":exc:`OverflowError`。" + +#: ../../library/datetime.rst:1368 +msgid "" +"For aware :class:`.datetime` instances, the return value is computed as::" +msgstr "对于感知型 :class:`.datetime` 实例,返回值的计算方式为::" + +#: ../../library/datetime.rst:1375 +msgid "" +"The :meth:`timestamp` method uses the :attr:`.fold` attribute to " +"disambiguate the times during a repeated interval." +msgstr ":meth:`timestamp` 方法使用 :attr:`.fold` 属性来消除重复间隔中的时间歧义。" + +#: ../../library/datetime.rst:1381 +msgid "" +"There is no method to obtain the POSIX timestamp directly from a naive " +":class:`.datetime` instance representing UTC time. If your application uses " +"this convention and your system timezone is not set to UTC, you can obtain " +"the POSIX timestamp by supplying ``tzinfo=timezone.utc``::" +msgstr "" +"没有一个方法能直接从表示 UTC 时间的简单型 :class:`.datetime` 实例获取 POSIX 时间戳。 " +"如果你的应用程序使用此惯例并且你的系统时区不是设为 UTC,你可以通过提供 ``tzinfo=timezone.utc`` 来获取 POSIX " +"时间戳::" + +#: ../../library/datetime.rst:1389 +msgid "or by calculating the timestamp directly::" +msgstr "或者通过直接计算时间戳::" + +#: ../../library/datetime.rst:1395 +msgid "" +"Return the day of the week as an integer, where Monday is 0 and Sunday is 6." +" The same as ``self.date().weekday()``. See also :meth:`isoweekday`." +msgstr "" +"返回一个整数代表星期几,星期一为 0,星期天为 6。 相当于 ``self.date().weekday()``。 另请参阅 " +":meth:`isoweekday`。" + +#: ../../library/datetime.rst:1401 +msgid "" +"Return the day of the week as an integer, where Monday is 1 and Sunday is 7." +" The same as ``self.date().isoweekday()``. See also :meth:`weekday`, " +":meth:`isocalendar`." +msgstr "" +"返回一个整数代表星期几,星期一为 1,星期天为 7。 相当于 ``self.date().isoweekday()``。 另请参阅 " +":meth:`weekday`, :meth:`isocalendar`。" + +#: ../../library/datetime.rst:1408 +msgid "" +"Return a :term:`named tuple` with three components: ``year``, ``week`` and " +"``weekday``. The same as ``self.date().isocalendar()``." +msgstr "" +"返回一个由三部分组成的 :term:`named tuple`: ``year``, ``week`` 和 ``weekday``。 等同于 " +"``self.date().isocalendar()``。" + +#: ../../library/datetime.rst:1414 +msgid "Return a string representing the date and time in ISO 8601 format:" +msgstr "返回一个以 ISO 8601 格式表示的日期和时间字符串:" + +#: ../../library/datetime.rst:1416 +msgid "``YYYY-MM-DDTHH:MM:SS.ffffff``, if :attr:`microsecond` is not 0" +msgstr "``YYYY-MM-DDTHH:MM:SS.ffffff``,如果 :attr:`microsecond` 不为 0" + +#: ../../library/datetime.rst:1417 +msgid "``YYYY-MM-DDTHH:MM:SS``, if :attr:`microsecond` is 0" +msgstr "``YYYY-MM-DDTHH:MM:SS``,如果 :attr:`microsecond` 为 0" + +#: ../../library/datetime.rst:1419 +msgid "" +"If :meth:`utcoffset` does not return ``None``, a string is appended, giving " +"the UTC offset:" +msgstr "如果 :meth:`utcoffset` 返回值不为 ``None``,则添加一个字符串来给出 UTC 时差:" + +#: ../../library/datetime.rst:1422 +msgid "" +"``YYYY-MM-DDTHH:MM:SS.ffffff+HH:MM[:SS[.ffffff]]``, if :attr:`microsecond` " +"is not 0" +msgstr "" +"``YYYY-MM-DDTHH:MM:SS.ffffff+HH:MM[:SS[.ffffff]]``,如果 :attr:`microsecond` 不为" +" 0" + +#: ../../library/datetime.rst:1424 +msgid "" +"``YYYY-MM-DDTHH:MM:SS+HH:MM[:SS[.ffffff]]``, if :attr:`microsecond` is 0" +msgstr "" +"``YYYY-MM-DDTHH:MM:SS+HH:MM[:SS[.ffffff]]``,如果 :attr:`microsecond` 为 0" + +#: ../../library/datetime.rst:1434 +msgid "" +"The optional argument *sep* (default ``'T'``) is a one-character separator, " +"placed between the date and time portions of the result. For example::" +msgstr "可选参数 *sep* (默认为 ``'T'``) 为单个分隔字符,会被放在结果的日期和时间两部分之间。 例如::" + +#: ../../library/datetime.rst:1448 ../../library/datetime.rst:1809 +msgid "" +"The optional argument *timespec* specifies the number of additional " +"components of the time to include (the default is ``'auto'``). It can be one" +" of the following:" +msgstr "可选参数 *timespec* 要包含的额外时间组件值 (默认为 ``'auto'``)。它可以是以下值之一:" + +#: ../../library/datetime.rst:1452 ../../library/datetime.rst:1813 +msgid "" +"``'auto'``: Same as ``'seconds'`` if :attr:`microsecond` is 0, same as " +"``'microseconds'`` otherwise." +msgstr "" +"``'auto'``: 如果 :attr:`microsecond` 为 0 则与 ``'seconds'`` 相同,否则与 " +"``'microseconds'`` 相同。" + +#: ../../library/datetime.rst:1454 ../../library/datetime.rst:1815 +msgid "``'hours'``: Include the :attr:`hour` in the two-digit ``HH`` format." +msgstr "``'hours'``: 以两个数码的 ``HH`` 格式 包含 :attr:`hour`。" + +#: ../../library/datetime.rst:1455 ../../library/datetime.rst:1816 +msgid "" +"``'minutes'``: Include :attr:`hour` and :attr:`minute` in ``HH:MM`` format." +msgstr "``'minutes'``: 以 ``HH:MM`` 格式包含 :attr:`hour` 和 :attr:`minute`。" + +#: ../../library/datetime.rst:1456 ../../library/datetime.rst:1817 +msgid "" +"``'seconds'``: Include :attr:`hour`, :attr:`minute`, and :attr:`second` in " +"``HH:MM:SS`` format." +msgstr "" +"``'seconds'``: 以 ``HH:MM:SS`` 格式包含 :attr:`hour`, :attr:`minute` 和 " +":attr:`second`。" + +#: ../../library/datetime.rst:1458 ../../library/datetime.rst:1819 +msgid "" +"``'milliseconds'``: Include full time, but truncate fractional second part " +"to milliseconds. ``HH:MM:SS.sss`` format." +msgstr "``'milliseconds'``: 包含完整时间,但将秒值的小数部分截断至毫秒。 格式为 ``HH:MM:SS.sss``。" + +#: ../../library/datetime.rst:1460 ../../library/datetime.rst:1821 +msgid "``'microseconds'``: Include full time in ``HH:MM:SS.ffffff`` format." +msgstr "``'microseconds'``: 以 ``HH:MM:SS.ffffff`` 格式包含完整时间。" + +#: ../../library/datetime.rst:1464 ../../library/datetime.rst:1825 +msgid "Excluded time components are truncated, not rounded." +msgstr "排除掉的时间部分将被截断,而不是被舍入。" + +#: ../../library/datetime.rst:1466 +msgid ":exc:`ValueError` will be raised on an invalid *timespec* argument::" +msgstr "对于无效的 *timespec* 参数将引发 :exc:`ValueError`::" + +#: ../../library/datetime.rst:1476 ../../library/datetime.rst:1840 +msgid "Added the *timespec* argument." +msgstr "增加了 *timespec* 参数。" + +#: ../../library/datetime.rst:1482 +msgid "" +"For a :class:`.datetime` instance *d*, ``str(d)`` is equivalent to " +"``d.isoformat(' ')``." +msgstr "对于 :class:`.datetime` 实例 *d*,``str(d)`` 等价于 ``d.isoformat(' ')``。" + +#: ../../library/datetime.rst:1488 +msgid "Return a string representing the date and time::" +msgstr "返回一个表示日期和时间的字符串::" + +#: ../../library/datetime.rst:1494 +msgid "" +"The output string will *not* include time zone information, regardless of " +"whether the input is aware or naive." +msgstr "输出字符串将 *并不* 包括时区信息,无论输入的是感知型还是简单型。" + +#: ../../library/datetime.rst:1501 +msgid "" +"on platforms where the native C :c:func:`ctime` function (which " +":func:`time.ctime` invokes, but which :meth:`datetime.ctime` does not " +"invoke) conforms to the C standard." +msgstr "" +"在原生 C :c:func:`ctime` 函数遵循 C 标准的平台上 (:func:`time.ctime` 会发起对该函数的调用,但 " +":meth:`datetime.ctime` 并不会) 。" + +#: ../../library/datetime.rst:1507 +msgid "" +"Return a string representing the date and time, controlled by an explicit " +"format string. For a complete list of formatting directives, see " +":ref:`strftime-strptime-behavior`." +msgstr "" +"返回一个由显式格式字符串所指明的代表日期和时间的字符串,要获取格式指令的完整列表,请参阅 :ref:`strftime-strptime-" +"behavior`。" + +#: ../../library/datetime.rst:1514 +msgid "" +"Same as :meth:`.datetime.strftime`. This makes it possible to specify a " +"format string for a :class:`.datetime` object in :ref:`formatted string " +"literals ` and when using :meth:`str.format`. For a complete list" +" of formatting directives, see :ref:`strftime-strptime-behavior`." +msgstr "" +"与 :meth:`.datetime.strftime` 相同。 此方法使得为 :class:`.datetime` 对象指定以 " +":ref:`格式化字符串字面值 ` 表示的格式化字符串以及使用 :meth:`str.format` 进行格式化成为可能。 " +"要获取格式指令的完整列表,请参阅 :ref:`strftime-strptime-behavior`。" + +#: ../../library/datetime.rst:1521 +msgid "Examples of Usage: :class:`.datetime`" +msgstr "用法示例: :class:`.datetime`" + +#: ../../library/datetime.rst:1523 +msgid "Examples of working with :class:`~datetime.datetime` objects:" +msgstr "使用 :class:`~datetime.datetime` 对象的例子:" + +#: ../../library/datetime.rst:1576 +msgid "" +"The example below defines a :class:`tzinfo` subclass capturing time zone " +"information for Kabul, Afghanistan, which used +4 UTC until 1945 and then " +"+4:30 UTC thereafter::" +msgstr "" +"以下示例定义了一个 :class:`tzinfo` 子类,它捕获 Kabul, Afghanistan 时区的信息,该时区使用 +4 UTC 直到 " +"1945 年,之后则使用 +4:30 UTC::" + +#: ../../library/datetime.rst:1623 +msgid "Usage of ``KabulTz`` from above::" +msgstr "上述 ``KabulTz`` 的用法::" + +#: ../../library/datetime.rst:1649 +msgid ":class:`.time` Objects" +msgstr ":class:`.time` 对象" + +#: ../../library/datetime.rst:1651 +msgid "" +"A :class:`time` object represents a (local) time of day, independent of any " +"particular day, and subject to adjustment via a :class:`tzinfo` object." +msgstr "一个 :class:`time` 对象代表某日的(本地)时间,它独立于任何特定日期,并可通过 :class:`tzinfo` 对象来调整。" + +#: ../../library/datetime.rst:1656 +msgid "" +"All arguments are optional. *tzinfo* may be ``None``, or an instance of a " +":class:`tzinfo` subclass. The remaining arguments must be integers in the " +"following ranges:" +msgstr "" +"所有参数都是可选的。 *tzinfo* 可以是 ``None``,或者是一个 :class:`tzinfo` 子类的实例。 " +"其余的参数必须是在下面范围内的整数:" + +#: ../../library/datetime.rst:1666 +msgid "" +"If an argument outside those ranges is given, :exc:`ValueError` is raised. " +"All default to ``0`` except *tzinfo*, which defaults to :const:`None`." +msgstr "" +"如果给出一个此范围以外的参数,则会引发 :exc:`ValueError`。 所有参数值默认为 ``0``,只有 *tzinfo* 默认为 " +":const:`None`。" + +#: ../../library/datetime.rst:1674 +msgid "The earliest representable :class:`.time`, ``time(0, 0, 0, 0)``." +msgstr "早最的可表示 :class:`.time`, ``time(0, 0, 0, 0)``。" + +#: ../../library/datetime.rst:1679 +msgid "The latest representable :class:`.time`, ``time(23, 59, 59, 999999)``." +msgstr "最晚的可表示 :class:`.time`, ``time(23, 59, 59, 999999)``。" + +#: ../../library/datetime.rst:1684 +msgid "" +"The smallest possible difference between non-equal :class:`.time` objects, " +"``timedelta(microseconds=1)``, although note that arithmetic on " +":class:`.time` objects is not supported." +msgstr "" +"两个不相等的 :class:`.time` 对象之间可能的最小间隔,``timedelta(microseconds=1)``,但是请注意 " +":class:`.time` 对象并不支持算术运算。" + +#: ../../library/datetime.rst:1713 +msgid "" +"The object passed as the tzinfo argument to the :class:`.time` constructor, " +"or ``None`` if none was passed." +msgstr "作为 tzinfo 参数被传给 :class:`.time` 构造器的对象,如果没有传入值则为 ``None``。" + +#: ../../library/datetime.rst:1727 +msgid "" +":class:`.time` objects support comparison of :class:`.time` to " +":class:`.time`, where *a* is considered less than *b* when *a* precedes *b* " +"in time. If one comparand is naive and the other is aware, :exc:`TypeError` " +"is raised if an order comparison is attempted. For equality comparisons, " +"naive instances are never equal to aware instances." +msgstr "" +":class:`.time` 对象支持 :class:`.time` 与 :class:`.time` 的比较,当 *a* 时间在 *b* " +"之前时,则认为 *a* 小于 *b*。 如果比较的一方是简单型而另一方是感知型,则如果尝试进行顺序比较将引发 :exc:`TypeError`。 " +"对于相等比较,简单型实例将永远不等于感知型实例。" + +#: ../../library/datetime.rst:1733 +msgid "" +"If both comparands are aware, and have the same :attr:`~time.tzinfo` " +"attribute, the common :attr:`~time.tzinfo` attribute is ignored and the base" +" times are compared. If both comparands are aware and have different " +":attr:`~time.tzinfo` attributes, the comparands are first adjusted by " +"subtracting their UTC offsets (obtained from ``self.utcoffset()``). In order" +" to stop mixed-type comparisons from falling back to the default comparison " +"by object address, when a :class:`.time` object is compared to an object of " +"a different type, :exc:`TypeError` is raised unless the comparison is ``==``" +" or ``!=``. The latter cases return :const:`False` or :const:`True`, " +"respectively." +msgstr "" +"如果两个比较方都是感知型,且具有相同的 :attr:`~time.tzinfo` 属性,相同的 :attr:`~time.tzinfo` " +"属性会被忽略并对基本时间值进行比较。 如果两个比较方都是感知型且具有不同的 :attr:`~time.tzinfo` " +"属性,两个比较方将首先通过减去它们的 UTC 时差(从 ``self.utcoffset()`` 获取)来进行调整。 " +"为了防止将混合类型比较回退为基于对象地址的默认比较,当 :class:`.time` 对象与不同类型的对象比较时,将会引发 " +":exc:`TypeError`,除非比较运算符是 ``==`` 或 ``!=``。 在后两种情况下将分别返回 :const:`False` 或 " +":const:`True`。" + +#: ../../library/datetime.rst:1743 +msgid "" +"Equality comparisons between aware and naive :class:`~datetime.time` " +"instances don't raise :exc:`TypeError`." +msgstr "感知型和简单型 :class:`~datetime.time` 实例之间的相等比较不会引发 :exc:`TypeError`。" + +#: ../../library/datetime.rst:1747 +msgid "" +"In Boolean contexts, a :class:`.time` object is always considered to be " +"true." +msgstr "在布尔运算时,:class:`.time` 对象总是被视为真值。" + +#: ../../library/datetime.rst:1749 +msgid "" +"Before Python 3.5, a :class:`.time` object was considered to be false if it " +"represented midnight in UTC. This behavior was considered obscure and error-" +"prone and has been removed in Python 3.5. See :issue:`13936` for full " +"details." +msgstr "" +"在 Python 3.5 之前,如果一个 :class:`.time` 对象代表 UTC 午夜零时则会被视为假值。 " +"此行为被认为容易引发困惑和错误,因此从 Python 3.5 起已被去除。 详情参见 :issue:`13936`。" + +#: ../../library/datetime.rst:1756 +msgid "Other constructor:" +msgstr "其他构造方法:" + +#: ../../library/datetime.rst:1760 +msgid "" +"Return a :class:`.time` corresponding to a *time_string* in one of the " +"formats emitted by :meth:`time.isoformat`. Specifically, this function " +"supports strings in the format:" +msgstr "" +"返回对应于 :meth:`time.isoformat` 所提供的某种 *time_string* 格式的 :class:`.time`。 " +"特别地,此函数支持以下格式的字符串:" + +#: ../../library/datetime.rst:1770 +msgid "" +"This does *not* support parsing arbitrary ISO 8601 strings. It is only " +"intended as the inverse operation of :meth:`time.isoformat`." +msgstr "此方法 *并不* 支持解析任意 ISO 8601 字符串。 它的目的只是作为 :meth:`time.isoformat` 的逆操作。" + +#: ../../library/datetime.rst:1791 +msgid "" +"Return a :class:`.time` with the same value, except for those attributes " +"given new values by whichever keyword arguments are specified. Note that " +"``tzinfo=None`` can be specified to create a naive :class:`.time` from an " +"aware :class:`.time`, without conversion of the time data." +msgstr "" +"返回一个具有同样属性值的 :class:`.time`,除非通过任何关键字参数指定了某些属性值。 请注意可以通过指定 ``tzinfo=None`` " +"从一个感知型 :class:`.time` 创建一个简单型 :class:`.time`,而不必转换时间数据。" + +#: ../../library/datetime.rst:1802 +msgid "Return a string representing the time in ISO 8601 format, one of:" +msgstr "返回表示为下列 ISO 8601 格式之一的时间字符串:" + +#: ../../library/datetime.rst:1804 +msgid "``HH:MM:SS.ffffff``, if :attr:`microsecond` is not 0" +msgstr "``HH:MM:SS.ffffff``,如果 :attr:`microsecond` 不为 0" + +#: ../../library/datetime.rst:1805 +msgid "``HH:MM:SS``, if :attr:`microsecond` is 0" +msgstr "``HH:MM:SS``,如果 :attr:`microsecond` 为 0" + +#: ../../library/datetime.rst:1806 +msgid "" +"``HH:MM:SS.ffffff+HH:MM[:SS[.ffffff]]``, if :meth:`utcoffset` does not " +"return ``None``" +msgstr "" +"``HH:MM:SS.ffffff+HH:MM[:SS[.ffffff]]``,如果 :meth:`utcoffset` 不返回 ``None``" + +#: ../../library/datetime.rst:1807 +msgid "" +"``HH:MM:SS+HH:MM[:SS[.ffffff]]``, if :attr:`microsecond` is 0 and " +":meth:`utcoffset` does not return ``None``" +msgstr "" +"``HH:MM:SS+HH:MM[:SS[.ffffff]]``,如果 :attr:`microsecond` 为 0 并且 " +":meth:`utcoffset` 不返回 ``None``" + +#: ../../library/datetime.rst:1827 +msgid ":exc:`ValueError` will be raised on an invalid *timespec* argument." +msgstr "对于无效的 *timespec* 参数将引发 :exc:`ValueError`。" + +#: ../../library/datetime.rst:1846 +msgid "For a time *t*, ``str(t)`` is equivalent to ``t.isoformat()``." +msgstr "对于时间对象 *t*, ``str(t)`` 等价于 ``t.isoformat()``。" + +#: ../../library/datetime.rst:1851 +msgid "" +"Return a string representing the time, controlled by an explicit format " +"string. For a complete list of formatting directives, see :ref:`strftime-" +"strptime-behavior`." +msgstr "" +"返回一个由显式格式字符串所指明的代表时间的字符串。 要获取格式指令的完整列表,请参阅 :ref:`strftime-strptime-" +"behavior`。" + +#: ../../library/datetime.rst:1858 +msgid "" +"Same as :meth:`.time.strftime`. This makes it possible to specify a format " +"string for a :class:`.time` object in :ref:`formatted string literals " +"` and when using :meth:`str.format`. For a complete list of " +"formatting directives, see :ref:`strftime-strptime-behavior`." +msgstr "" +"与 :meth:`.time.strftime` 相同。 此方法使得为 :class:`.time` 对象指定以 :ref:`格式化字符串字面值 " +"` 表示的格式化字符串以及使用 :meth:`str.format` 进行格式化成为可能。 要获取格式指令的完整列表,请参阅 " +":ref:`strftime-strptime-behavior`。" + +#: ../../library/datetime.rst:1867 +msgid "" +"If :attr:`.tzinfo` is ``None``, returns ``None``, else returns " +"``self.tzinfo.utcoffset(None)``, and raises an exception if the latter " +"doesn't return ``None`` or a :class:`timedelta` object with magnitude less " +"than one day." +msgstr "" +"如果 :attr:`.tzinfo` 为 ``None``,则返回 ``None``,否则返回 " +"``self.tzinfo.utcoffset(None)``,并且在后者不返回 ``None`` 或一个幅度小于一天的 a " +":class:`timedelta` 对象时将引发异常。" + +#: ../../library/datetime.rst:1877 +msgid "" +"If :attr:`.tzinfo` is ``None``, returns ``None``, else returns " +"``self.tzinfo.dst(None)``, and raises an exception if the latter doesn't " +"return ``None``, or a :class:`timedelta` object with magnitude less than one" +" day." +msgstr "" +"如果 :attr:`.tzinfo` 为 ``None``,则返回 ``None``,否则返回 " +"``self.tzinfo.dst(None)``,并且在后者不返回 ``None`` 或者一个幅度小于一天的 :class:`timedelta` " +"对象时将引发异常。" + +#: ../../library/datetime.rst:1886 +msgid "" +"If :attr:`.tzinfo` is ``None``, returns ``None``, else returns " +"``self.tzinfo.tzname(None)``, or raises an exception if the latter doesn't " +"return ``None`` or a string object." +msgstr "" +"如果 :attr:`.tzinfo` 为 ``None``,则返回 ``None``,否则返回 " +"``self.tzinfo.tzname(None)``,如果后者不返回 ``None`` 或者一个字符串对象则将引发异常。" + +#: ../../library/datetime.rst:1891 +msgid "Examples of Usage: :class:`.time`" +msgstr "用法示例: :class:`.time`" + +#: ../../library/datetime.rst:1893 +msgid "Examples of working with a :class:`.time` object::" +msgstr "使用 :class:`.time` 对象的例子::" + +#: ../../library/datetime.rst:1924 +msgid ":class:`tzinfo` Objects" +msgstr ":class:`tzinfo` 对象" + +#: ../../library/datetime.rst:1928 +msgid "" +"This is an abstract base class, meaning that this class should not be " +"instantiated directly. Define a subclass of :class:`tzinfo` to capture " +"information about a particular time zone." +msgstr "这是一个抽象基类,也就是说该类不应被直接实例化。 请定义 :class:`tzinfo` 的子类来捕获有关特定时区的信息。" + +#: ../../library/datetime.rst:1932 +msgid "" +"An instance of (a concrete subclass of) :class:`tzinfo` can be passed to the" +" constructors for :class:`.datetime` and :class:`.time` objects. The latter " +"objects view their attributes as being in local time, and the " +":class:`tzinfo` object supports methods revealing offset of local time from " +"UTC, the name of the time zone, and DST offset, all relative to a date or " +"time object passed to them." +msgstr "" +":class:`tzinfo` 的(某个实体子类)的实例可以被传给 :class:`.datetime` 和 :class:`.time` " +"对象的构造器。 这些对象会将它们的属性视为对应于本地时间,并且 :class:`tzinfo` 对象支持展示本地时间与 UTC 的差值、时区名称以及 " +"DST 差值的方法,都是与传给它们的日期或时间对象的相对值。" + +#: ../../library/datetime.rst:1938 +msgid "" +"You need to derive a concrete subclass, and (at least) supply " +"implementations of the standard :class:`tzinfo` methods needed by the " +":class:`.datetime` methods you use. The :mod:`datetime` module provides " +":class:`timezone`, a simple concrete subclass of :class:`tzinfo` which can " +"represent timezones with fixed offset from UTC such as UTC itself or North " +"American EST and EDT." +msgstr "" +"你需要派生一个实体子类,并且(至少)提供你使用 :class:`.datetime` 方法所需要的标准 :class:`tzinfo` 方法的实现。 " +":mod:`datetime` 模块提供了 :class:`timezone`,这是 :class:`tzinfo` 的一个简单实体子类,它能以与 " +"UTC 的固定差值来表示不同的时区,例如 UTC 本身或北美的 EST 和 EDT。" + +#: ../../library/datetime.rst:1945 +msgid "" +"Special requirement for pickling: A :class:`tzinfo` subclass must have an " +":meth:`__init__` method that can be called with no arguments, otherwise it " +"can be pickled but possibly not unpickled again. This is a technical " +"requirement that may be relaxed in the future." +msgstr "" +"对于封存操作的特殊要求:一个 :class:`tzinfo` 子类必须具有可不带参数调用的 :meth:`__init__` " +"方法,否则它虽然可以被封存,但可能无法再次解封。 这是个技术性要求,在未来可能会被取消。" + +#: ../../library/datetime.rst:1950 +msgid "" +"A concrete subclass of :class:`tzinfo` may need to implement the following " +"methods. Exactly which methods are needed depends on the uses made of aware " +":mod:`datetime` objects. If in doubt, simply implement all of them." +msgstr "" +"一个 :class:`tzinfo` 的实体子类可能需要实现以下方法。 具体需要实现的方法取决于感知型 :mod:`datetime` 对象如何使用它。" +" 如果有疑问,可以简单地全都实现。" + +#: ../../library/datetime.rst:1957 +msgid "" +"Return offset of local time from UTC, as a :class:`timedelta` object that is" +" positive east of UTC. If local time is west of UTC, this should be " +"negative." +msgstr "" +"将本地时间与 UTC 时差返回为一个 :class:`timedelta` 对象,如果本地时区在 UTC 以东则为正值。 如果本地时区在 UTC " +"以西则为负值。" + +#: ../../library/datetime.rst:1960 +msgid "" +"This represents the *total* offset from UTC; for example, if a " +":class:`tzinfo` object represents both time zone and DST adjustments, " +":meth:`utcoffset` should return their sum. If the UTC offset isn't known, " +"return ``None``. Else the value returned must be a :class:`timedelta` object" +" strictly between ``-timedelta(hours=24)`` and ``timedelta(hours=24)`` (the " +"magnitude of the offset must be less than one day). Most implementations of " +":meth:`utcoffset` will probably look like one of these two::" +msgstr "" +"这表示与 UTC 的 *总计* 时差;举例来说,如果一个 :class:`tzinfo` 对象同时代表时区和 DST 调整,则 " +":meth:`utcoffset` 应当返回两者的和。 如果 UTC 时差不确定则返回 ``None``。 在其他情况下返回值必须为一个 " +":class:`timedelta` 对象,其取值严格限制于 ``-timedelta(hours=24)`` 和 " +"``timedelta(hours=24)`` 之间(差值的幅度必须小于一天)。 大多数 :meth:`utcoffset` " +"的实现看起来可能像是以下两者之一::" + +#: ../../library/datetime.rst:1971 +msgid "" +"If :meth:`utcoffset` does not return ``None``, :meth:`dst` should not return" +" ``None`` either." +msgstr "如果 :meth:`utcoffset` 返回值不为 ``None``,则 :meth:`dst` 也不应返回 ``None``。" + +#: ../../library/datetime.rst:1974 +msgid "" +"The default implementation of :meth:`utcoffset` raises " +":exc:`NotImplementedError`." +msgstr "默认的 :meth:`utcoffset` 实现会引发 :exc:`NotImplementedError`。" + +#: ../../library/datetime.rst:1983 +msgid "" +"Return the daylight saving time (DST) adjustment, as a :class:`timedelta` " +"object or ``None`` if DST information isn't known." +msgstr "将夏令时(DST)调整返回为一个 :class:`timedelta` 对象,如果 DST 信息未知则返回 ``None``。" + +#: ../../library/datetime.rst:1987 +msgid "" +"Return ``timedelta(0)`` if DST is not in effect. If DST is in effect, return" +" the offset as a :class:`timedelta` object (see :meth:`utcoffset` for " +"details). Note that DST offset, if applicable, has already been added to the" +" UTC offset returned by :meth:`utcoffset`, so there's no need to consult " +":meth:`dst` unless you're interested in obtaining DST info separately. For " +"example, :meth:`datetime.timetuple` calls its :attr:`~.datetime.tzinfo` " +"attribute's :meth:`dst` method to determine how the :attr:`tm_isdst` flag " +"should be set, and :meth:`tzinfo.fromutc` calls :meth:`dst` to account for " +"DST changes when crossing time zones." +msgstr "" +"如果 DST 未启用则返回 ``timedelta(0)``。 如果 DST 已启用则将差值作为一个 :class:`timedelta` " +"对象返回(参见 :meth:`utcoffset` 了解详情)。 请注意 DST 差值如果可用,就会直接被加入 :meth:`utcoffset` " +"所返回的 UTC 时差,因此无需额外查询 :meth:`dst` 除非你希望单独获取 DST 信息。 " +"例如,:meth:`datetime.timetuple` 会调用其 :attr:`~.datetime.tzinfo` 属性的 :meth:`dst`" +" 方法来确定应该如何设置 :attr:`tm_isdst` 旗标,而 :meth:`tzinfo.fromutc` 会调用 :meth:`dst` " +"来在跨越时区时处理 DST 的改变。" + +#: ../../library/datetime.rst:1997 +msgid "" +"An instance *tz* of a :class:`tzinfo` subclass that models both standard and" +" daylight times must be consistent in this sense:" +msgstr "一个可以同时处理标准时和夏令时的 :class:`tzinfo` 子类的实例 *tz* 必须在此情形中保持一致:" + +#: ../../library/datetime.rst:2000 +msgid "``tz.utcoffset(dt) - tz.dst(dt)``" +msgstr "``tz.utcoffset(dt) - tz.dst(dt)``" + +#: ../../library/datetime.rst:2002 +msgid "" +"must return the same result for every :class:`.datetime` *dt* with " +"``dt.tzinfo == tz`` For sane :class:`tzinfo` subclasses, this expression " +"yields the time zone's \"standard offset\", which should not depend on the " +"date or the time, but only on geographic location. The implementation of " +":meth:`datetime.astimezone` relies on this, but cannot detect violations; " +"it's the programmer's responsibility to ensure it. If a :class:`tzinfo` " +"subclass cannot guarantee this, it may be able to override the default " +"implementation of :meth:`tzinfo.fromutc` to work correctly with " +":meth:`astimezone` regardless." +msgstr "" +"必须为具有同样的 :class:`tzinfo` 子类实例且 ``dt.tzinfo == tz`` 的每个 :class:`.datetime` 对象" +" *dt* 返回同样的结果,此表达式会产生时区的“标准时差”,它不应取决于具体日期或时间,只取决于地理位置。 " +":meth:`datetime.astimezone` 的实现依赖此方法,但无法检测违反规则的情况;确保符合规则是程序员的责任。 如果一个 " +":class:`tzinfo` 子类不能保证这一点,也许可以重写 :meth:`tzinfo.fromutc` 的默认实现以便在任何情况下与 " +":meth:`astimezone` 正确配合。" + +#: ../../library/datetime.rst:2011 +msgid "" +"Most implementations of :meth:`dst` will probably look like one of these " +"two::" +msgstr "大多数 :meth:`dst` 的实现可能会如以下两者之一::" + +#: ../../library/datetime.rst:2017 +msgid "or::" +msgstr "或者:" + +#: ../../library/datetime.rst:2029 +msgid "" +"The default implementation of :meth:`dst` raises :exc:`NotImplementedError`." +msgstr "默认的 :meth:`dst` 实现会引发 :exc:`NotImplementedError`。" + +#: ../../library/datetime.rst:2037 +msgid "" +"Return the time zone name corresponding to the :class:`.datetime` object " +"*dt*, as a string. Nothing about string names is defined by the " +":mod:`datetime` module, and there's no requirement that it mean anything in " +"particular. For example, \"GMT\", \"UTC\", \"-500\", \"-5:00\", \"EDT\", " +"\"US/Eastern\", \"America/New York\" are all valid replies. Return ``None`` " +"if a string name isn't known. Note that this is a method rather than a fixed" +" string primarily because some :class:`tzinfo` subclasses will wish to " +"return different names depending on the specific value of *dt* passed, " +"especially if the :class:`tzinfo` class is accounting for daylight time." +msgstr "" +"将对应于 :class:`.datetime` 对象 *dt* 的时区名称作为字符串返回。 :mod:`datetime` " +"模块没有定义任何字符串名称相关内容,也不要求名称有任何特定含义。 例如 \"GMT\", \"UTC\", \"-500\", \"-5:00\", " +"\"EDT\", \"US/Eastern\", \"America/New York\" 都是有效的返回值。 如果字符串名称未知则返回 " +"``None``。 请注意这是一个方法而不是一个固定的字符串,这主要是因为某些 :class:`tzinfo` 子类可能需要根据所传入的特定 *dt* " +"值返回不同的名称,特别是当 :class:`tzinfo` 类要负责处理夏令时的时候。" + +#: ../../library/datetime.rst:2047 +msgid "" +"The default implementation of :meth:`tzname` raises " +":exc:`NotImplementedError`." +msgstr "默认的 :meth:`tzname` 实现会引发 :exc:`NotImplementedError`。" + +#: ../../library/datetime.rst:2050 +msgid "" +"These methods are called by a :class:`.datetime` or :class:`.time` object, " +"in response to their methods of the same names. A :class:`.datetime` object " +"passes itself as the argument, and a :class:`.time` object passes ``None`` " +"as the argument. A :class:`tzinfo` subclass's methods should therefore be " +"prepared to accept a *dt* argument of ``None``, or of class " +":class:`.datetime`." +msgstr "" +"这些方法会被 :class:`.datetime` 或 :class:`.time` 对象调用,用来与它们的同名方法相对应。 " +":class:`.datetime` 对象会将自身作为传入参数,而 :class:`.time` 对象会将 ``None`` 作为传入参数。 这样 " +":class:`tzinfo` 子类的方法应当准备好接受 *dt* 参数值为 ``None`` 或是 :class:`.datetime` 类的实例。" + +#: ../../library/datetime.rst:2056 +msgid "" +"When ``None`` is passed, it's up to the class designer to decide the best " +"response. For example, returning ``None`` is appropriate if the class wishes" +" to say that time objects don't participate in the :class:`tzinfo` " +"protocols. It may be more useful for ``utcoffset(None)`` to return the " +"standard UTC offset, as there is no other convention for discovering the " +"standard offset." +msgstr "" +"当传入 ``None`` 时,应当由类的设计者来决定最佳回应方式。 例如,返回 ``None`` 适用于希望该类提示时间对象不参与 " +":class:`tzinfo` 协议处理。 让 ``utcoffset(None)`` 返回标准 UTC " +"时差也许会更有用处,因为并没有其他可用于发现标准时差的约定惯例。" + +#: ../../library/datetime.rst:2062 +msgid "" +"When a :class:`.datetime` object is passed in response to a " +":class:`.datetime` method, ``dt.tzinfo`` is the same object as *self*. " +":class:`tzinfo` methods can rely on this, unless user code calls " +":class:`tzinfo` methods directly. The intent is that the :class:`tzinfo` " +"methods interpret *dt* as being in local time, and not need worry about " +"objects in other timezones." +msgstr "" +"当传入一个 :class:`.datetime` 对象来回应 :class:`.datetime` 方法时,``dt.tzinfo`` 与 *self*" +" 是同一对象。 :class:`tzinfo` 方法可以依赖这一点,除非用户代码直接调用了 :class:`tzinfo` 方法。 此行为的目的是使得 " +":class:`tzinfo` 方法将 *dt* 解读为本地时间,而不需要担心其他时区的相关对象。" + +#: ../../library/datetime.rst:2068 +msgid "" +"There is one more :class:`tzinfo` method that a subclass may wish to " +"override:" +msgstr "还有一个额外的 :class:`tzinfo` 方法,某个子类可能会希望重写它:" + +#: ../../library/datetime.rst:2073 +msgid "" +"This is called from the default :class:`datetime.astimezone()` " +"implementation. When called from that, ``dt.tzinfo`` is *self*, and *dt*'s " +"date and time data are to be viewed as expressing a UTC time. The purpose of" +" :meth:`fromutc` is to adjust the date and time data, returning an " +"equivalent datetime in *self*'s local time." +msgstr "" +"此方法会由默认的 :class:`datetime.astimezone()` 实现来调用。 当被其调用时,``dt.tzinfo`` 为 " +"*self*,并且 *dt* 的日期和时间数据会被视为表示 UTC 时间,:meth:`fromutc` 的目标是调整日期和时间数据,返回一个等价的 " +"datetime 来表示 *self* 的本地时间。" + +#: ../../library/datetime.rst:2079 +msgid "" +"Most :class:`tzinfo` subclasses should be able to inherit the default " +":meth:`fromutc` implementation without problems. It's strong enough to " +"handle fixed-offset time zones, and time zones accounting for both standard " +"and daylight time, and the latter even if the DST transition times differ in" +" different years. An example of a time zone the default :meth:`fromutc` " +"implementation may not handle correctly in all cases is one where the " +"standard offset (from UTC) depends on the specific date and time passed, " +"which can happen for political reasons. The default implementations of " +":meth:`astimezone` and :meth:`fromutc` may not produce the result you want " +"if the result is one of the hours straddling the moment the standard offset " +"changes." +msgstr "" +"大多数 :class:`tzinfo` 子类应该能够毫无问题地继承默认的 :meth:`fromutc` 实现。 " +"它的健壮性足以处理固定差值的时区以及同时负责标准时和夏令时的时区,对于后者甚至还能处理 DST 转换时间在各个年份有变化的情况。 一个默认 " +":meth:`fromutc` 实现可能无法在所有情况下正确处理的例子是(与 UTC " +"的)标准时差取决于所经过的特定日期和时间,这种情况可能由于政治原因而出现。 默认的 :meth:`astimezone` 和 " +":meth:`fromutc` 实现可能无法生成你希望的结果,如果这个结果恰好是跨越了标准时差发生改变的时刻当中的某个小时值的话。" + +#: ../../library/datetime.rst:2090 +msgid "" +"Skipping code for error cases, the default :meth:`fromutc` implementation " +"acts like::" +msgstr "忽略针对错误情况的代码,默认 :meth:`fromutc` 实现的行为方式如下::" + +#: ../../library/datetime.rst:2108 +msgid "" +"In the following :download:`tzinfo_examples.py " +"<../includes/tzinfo_examples.py>` file there are some examples of " +":class:`tzinfo` classes:" +msgstr "" +"在以下 :download:`tzinfo_examples.py <../includes/tzinfo_examples.py>` 文件中有一些 " +":class:`tzinfo` 类的例子:" + +#: ../../library/datetime.rst:2114 +msgid "" +"Note that there are unavoidable subtleties twice per year in a " +":class:`tzinfo` subclass accounting for both standard and daylight time, at " +"the DST transition points. For concreteness, consider US Eastern (UTC " +"-0500), where EDT begins the minute after 1:59 (EST) on the second Sunday in" +" March, and ends the minute after 1:59 (EDT) on the first Sunday in " +"November::" +msgstr "" +"请注意同时负责标准时和夏令时的 :class:`tzinfo` 子类在每年两次的 DST 转换点上会出现不可避免的微妙问题。具体而言,考虑美国东部时区 " +"(UTC -0500),它的 EDT 从三月的第二个星期天 1:59 (EST) 之后一分钟开始,并在十一月的第一天星期天 1:59 (EDT) " +"之后一分钟结束::" + +#: ../../library/datetime.rst:2128 +msgid "" +"When DST starts (the \"start\" line), the local wall clock leaps from 1:59 " +"to 3:00. A wall time of the form 2:MM doesn't really make sense on that day," +" so ``astimezone(Eastern)`` won't deliver a result with ``hour == 2`` on the" +" day DST begins. For example, at the Spring forward transition of 2016, we " +"get::" +msgstr "" +"当 DST 开始时(即 \"start\" 行),本地时钟从 1:59 跳到 3:00。 形式为 2:MM 的时间值在那一天是没有意义的,因此在 DST" +" 开始那一天 ``astimezone(Eastern)`` 不会输出包含 ``hour == 2`` 的结果。 例如,在 2016 " +"年春季时钟向前调整时,我们得到::" + +#: ../../library/datetime.rst:2147 +msgid "" +"When DST ends (the \"end\" line), there's a potentially worse problem: " +"there's an hour that can't be spelled unambiguously in local wall time: the " +"last hour of daylight time. In Eastern, that's times of the form 5:MM UTC on" +" the day daylight time ends. The local wall clock leaps from 1:59 (daylight " +"time) back to 1:00 (standard time) again. Local times of the form 1:MM are " +"ambiguous. :meth:`astimezone` mimics the local clock's behavior by mapping " +"two adjacent UTC hours into the same local hour then. In the Eastern " +"example, UTC times of the form 5:MM and 6:MM both map to 1:MM when converted" +" to Eastern, but earlier times have the :attr:`~datetime.fold` attribute set" +" to 0 and the later times have it set to 1. For example, at the Fall back " +"transition of 2016, we get::" +msgstr "" +"当 DST 结束时(见 \"end\" 行),会有更糟糕的潜在问题:本地时间值中有一个小时是不可能没有歧义的:夏令时的最后一小时。 " +"即以北美东部时间表示当天夏令时结束时的形式为 5:MM UTC 的时间。 本地时钟从 1:59 (夏令时) 再次跳回到 1:00 (标准时)。 形式为 " +"1:MM 的本地时间就是有歧义的。 此时 :meth:`astimezone` 是通过将两个相邻的 UTC " +"小时映射到两个相同的本地小时来模仿本地时钟的行为。 在这个北美东部时间的示例中,形式为 5:MM 和 6:MM 的 UTC " +"时间在转换为北美东部时间时都将被映射到 1:MM,但前一个时间会将 :attr:`~datetime.fold` 属性设为 0 而后一个时间会将其设为 " +"1。 例如,在 2016 年秋季时钟往回调整时,我们得到::" + +#: ../../library/datetime.rst:2169 +msgid "" +"Note that the :class:`.datetime` instances that differ only by the value of " +"the :attr:`~datetime.fold` attribute are considered equal in comparisons." +msgstr "" +"请注意不同的 :class:`.datetime` 实例仅通过 :attr:`~datetime.fold` " +"属性值来加以区分,它们在比较时会被视为相等。" + +#: ../../library/datetime.rst:2172 +msgid "" +"Applications that can't bear wall-time ambiguities should explicitly check " +"the value of the :attr:`~datetime.fold` attribute or avoid using hybrid " +":class:`tzinfo` subclasses; there are no ambiguities when using " +":class:`timezone`, or any other fixed-offset :class:`tzinfo` subclass (such " +"as a class representing only EST (fixed offset -5 hours), or only EDT (fixed" +" offset -4 hours))." +msgstr "" +"不允许时间显示存在歧义的应用需要显式地检查 :attr:`~datetime.fold` 属性的值,或者避免使用混合式的 :class:`tzinfo`" +" 子类;当使用 :class:`timezone` 或者任何其他固定差值的 :class:`tzinfo` 子类例如仅表示 EST(固定差值 -5 " +"小时)或仅表示 EDT(固定差值 -4 小时)的类时是不会有歧义的。" + +#: ../../library/datetime.rst:2186 +msgid ":mod:`zoneinfo`" +msgstr ":mod:`zoneinfo`" + +#: ../../library/datetime.rst:2181 +msgid "" +"The :mod:`datetime` module has a basic :class:`timezone` class (for handling" +" arbitrary fixed offsets from UTC) and its :attr:`timezone.utc` attribute (a" +" UTC timezone instance)." +msgstr "" +":mod:`datetime` 模块有一个基本 :class:`timezone` 类(用来处理任意与 UTC 的固定时差)及其 " +":attr:`timezone.utc` 属性(一个 UTC 时区实例)。" + +#: ../../library/datetime.rst:2185 +msgid "" +"``zoneinfo`` brings the *IANA timezone database* (also known as the Olson " +"database) to Python, and its usage is recommended." +msgstr "``zoneinfo`` 为 Python 带来了 *IANA时区数据库* (也被称为 Olson 数据库),推荐使用它。" + +#: ../../library/datetime.rst:2192 +msgid "`IANA timezone database `_" +msgstr "`IANA 时区数据库 `_" + +#: ../../library/datetime.rst:2189 +msgid "" +"The Time Zone Database (often called tz, tzdata or zoneinfo) contains code " +"and data that represent the history of local time for many representative " +"locations around the globe. It is updated periodically to reflect changes " +"made by political bodies to time zone boundaries, UTC offsets, and daylight-" +"saving rules." +msgstr "" +"该时区数据库 (通常称为 tz, tzdata 或 zoneinfo) 包含大量代码和数据用来表示全球许多有代表性的地点的本地时间的历史信息。 " +"它会定期进行更新以反映各政治实体对时区边界、UTC 差值和夏令时规则的更改。" + +#: ../../library/datetime.rst:2199 +msgid ":class:`timezone` Objects" +msgstr ":class:`timezone` 对象" + +#: ../../library/datetime.rst:2201 +msgid "" +"The :class:`timezone` class is a subclass of :class:`tzinfo`, each instance " +"of which represents a timezone defined by a fixed offset from UTC." +msgstr "" +":class:`timezone` 类是 :class:`tzinfo` 的子类,它的每个实例都代表一个以与 UTC 的固定时差来定义的时区。" + +#: ../../library/datetime.rst:2205 +msgid "" +"Objects of this class cannot be used to represent timezone information in " +"the locations where different offsets are used in different days of the year" +" or where historical changes have been made to civil time." +msgstr "此类的对象不可被用于代表某些特殊地点的时区信息,这些地点在一年的不同日期会使用不同的时差,或是在历史上对民用时间进行过调整。" + +#: ../../library/datetime.rst:2212 +msgid "" +"The *offset* argument must be specified as a :class:`timedelta` object " +"representing the difference between the local time and UTC. It must be " +"strictly between ``-timedelta(hours=24)`` and ``timedelta(hours=24)``, " +"otherwise :exc:`ValueError` is raised." +msgstr "" +"*offset* 参数必须指定为一个 :class:`timedelta` 对象,表示本地时间与 UTC 的时差。 它必须严格限制于 " +"``-timedelta(hours=24)`` 和 ``timedelta(hours=24)`` 之间,否则会引发 " +":exc:`ValueError`。" + +#: ../../library/datetime.rst:2217 +msgid "" +"The *name* argument is optional. If specified it must be a string that will " +"be used as the value returned by the :meth:`datetime.tzname` method." +msgstr "*name* 参数是可选的。 如果指定则必须为一个字符串,它将被用作 :meth:`datetime.tzname` 方法的返回值。" + +#: ../../library/datetime.rst:2228 ../../library/datetime.rst:2239 +msgid "" +"Return the fixed value specified when the :class:`timezone` instance is " +"constructed." +msgstr "返回当 :class:`timezone` 实例被构造时指定的固定值。" + +#: ../../library/datetime.rst:2231 +msgid "" +"The *dt* argument is ignored. The return value is a :class:`timedelta` " +"instance equal to the difference between the local time and UTC." +msgstr "*dt* 参数会被忽略。 返回值是一个 :class:`timedelta` 实例,其值等于本地时间与 UTC 之间的时差。" + +#: ../../library/datetime.rst:2242 +msgid "" +"If *name* is not provided in the constructor, the name returned by " +"``tzname(dt)`` is generated from the value of the ``offset`` as follows. If " +"*offset* is ``timedelta(0)``, the name is \"UTC\", otherwise it is a string " +"in the format ``UTC±HH:MM``, where ± is the sign of ``offset``, HH and MM " +"are two digits of ``offset.hours`` and ``offset.minutes`` respectively." +msgstr "" +"如果没有在构造器中提供 *name*,则 ``tzname(dt)`` 所返回的名称将根据 ``offset`` 值按以下规则生成。 如果 " +"*offset* 为 ``timedelta(0)``,则名称为“UTC”,否则为字符串 ``UTC±HH:MM``,其中 ± 为 ``offset``" +" 的正负符号,HH 和 MM 分别为表示 ``offset.hours`` 和 ``offset.minutes`` 的两个数码。" + +#: ../../library/datetime.rst:2248 +msgid "" +"Name generated from ``offset=timedelta(0)`` is now plain `'UTC'`, not " +"``'UTC+00:00'``." +msgstr "由 ``offset=timedelta(0)`` 生成的名称现在为简单的 `'UTC'` 而不再是 ``'UTC+00:00'``。" + +#: ../../library/datetime.rst:2255 +msgid "Always returns ``None``." +msgstr "总是返回 ``None``。" + +#: ../../library/datetime.rst:2259 +msgid "" +"Return ``dt + offset``. The *dt* argument must be an aware " +":class:`.datetime` instance, with ``tzinfo`` set to ``self``." +msgstr "" +"返回 ``dt + offset``。 *dt* 参数必须为一个感知型 :class:`.datetime` 实例,其中 ``tzinfo`` 值设为 " +"``self``。" + +#: ../../library/datetime.rst:2266 +msgid "The UTC timezone, ``timezone(timedelta(0))``." +msgstr "UTC 时区,``timezone(timedelta(0))``。" + +#: ../../library/datetime.rst:2275 +msgid ":meth:`strftime` and :meth:`strptime` Behavior" +msgstr ":meth:`strftime` 和 :meth:`strptime` 的行为" + +#: ../../library/datetime.rst:2277 +msgid "" +":class:`date`, :class:`.datetime`, and :class:`.time` objects all support a " +"``strftime(format)`` method, to create a string representing the time under " +"the control of an explicit format string." +msgstr "" +":class:`date`, :class:`.datetime` 和 :class:`.time` 对象都支持 " +"``strftime(format)`` 方法,可用来创建由一个显式格式字符串所控制的表示时间的字符串。" + +#: ../../library/datetime.rst:2281 +msgid "" +"Conversely, the :meth:`datetime.strptime` class method creates a " +":class:`.datetime` object from a string representing a date and time and a " +"corresponding format string." +msgstr "" +"相反地,:meth:`datetime.strptime` 类会根据表示日期和时间的字符串和相应的格式字符串来创建一个 " +":class:`.datetime` 对象。" + +#: ../../library/datetime.rst:2285 +msgid "" +"The table below provides a high-level comparison of :meth:`strftime` versus " +":meth:`strptime`:" +msgstr "下表提供了 :meth:`strftime` 与 :meth:`strptime` 的高层级比较:" + +#: ../../library/datetime.rst:2289 +msgid "``strftime``" +msgstr "``strftime``" + +#: ../../library/datetime.rst:2289 +msgid "``strptime``" +msgstr "``strptime``" + +#: ../../library/datetime.rst:2291 +msgid "Usage" +msgstr "用法" + +#: ../../library/datetime.rst:2291 +msgid "Convert object to a string according to a given format" +msgstr "根据给定的格式将对象转换为字符串" + +#: ../../library/datetime.rst:2291 +msgid "" +"Parse a string into a :class:`.datetime` object given a corresponding format" +msgstr "将字符串解析为给定相应格式的 :class:`.datetime` 对象" + +#: ../../library/datetime.rst:2293 +msgid "Type of method" +msgstr "方法类型" + +#: ../../library/datetime.rst:2293 +msgid "Instance method" +msgstr "实例方法" + +#: ../../library/datetime.rst:2293 +msgid "Class method" +msgstr "类方法" + +#: ../../library/datetime.rst:2295 +msgid "Method of" +msgstr "方法" + +#: ../../library/datetime.rst:2295 +msgid ":class:`date`; :class:`.datetime`; :class:`.time`" +msgstr ":class:`date`; :class:`.datetime`; :class:`.time`" + +#: ../../library/datetime.rst:2295 +msgid ":class:`.datetime`" +msgstr ":class:`.datetime`" + +#: ../../library/datetime.rst:2297 +msgid "Signature" +msgstr "签名" + +#: ../../library/datetime.rst:2297 +msgid "``strftime(format)``" +msgstr "``strftime(format)``" + +#: ../../library/datetime.rst:2297 +msgid "``strptime(date_string, format)``" +msgstr "``strptime(date_string, format)``" + +#: ../../library/datetime.rst:2302 +msgid ":meth:`strftime` and :meth:`strptime` Format Codes" +msgstr ":meth:`strftime` 和 :meth:`strptime` Format Codes" + +#: ../../library/datetime.rst:2304 +msgid "" +"The following is a list of all the format codes that the 1989 C standard " +"requires, and these work on all platforms with a standard C implementation." +msgstr "以下列表显示了 1989 版 C 标准所要求的全部格式代码,它们在带有标准 C 实现的所有平台上均可用。" + +#: ../../library/datetime.rst:2308 ../../library/datetime.rst:2411 +msgid "Directive" +msgstr "指令" + +#: ../../library/datetime.rst:2308 ../../library/datetime.rst:2411 +msgid "Meaning" +msgstr "含意" + +#: ../../library/datetime.rst:2308 ../../library/datetime.rst:2411 +msgid "Example" +msgstr "示例" + +#: ../../library/datetime.rst:2308 ../../library/datetime.rst:2411 +msgid "Notes" +msgstr "备注" + +#: ../../library/datetime.rst:2310 +msgid "``%a``" +msgstr "``%a``" + +#: ../../library/datetime.rst:2310 +msgid "Weekday as locale's abbreviated name." +msgstr "当地工作日的缩写。" + +#: ../../library/datetime.rst:0 +msgid "Sun, Mon, ..., Sat (en_US);" +msgstr "Sun, Mon, ..., Sat (en_US);" + +#: ../../library/datetime.rst:0 +msgid "So, Mo, ..., Sa (de_DE)" +msgstr "So, Mo, ..., Sa (de_DE)" + +#: ../../library/datetime.rst:2315 +msgid "``%A``" +msgstr "``%A``" + +#: ../../library/datetime.rst:2315 +msgid "Weekday as locale's full name." +msgstr "本地化的星期中每日的完整名称。" + +#: ../../library/datetime.rst:0 +msgid "Sunday, Monday, ..., Saturday (en_US);" +msgstr "Sunday, Monday, ..., Saturday (en_US);" + +#: ../../library/datetime.rst:0 +msgid "Sonntag, Montag, ..., Samstag (de_DE)" +msgstr "Sonntag, Montag, ..., Samstag (de_DE)" + +#: ../../library/datetime.rst:2320 +msgid "``%w``" +msgstr "``%w``" + +#: ../../library/datetime.rst:2320 +msgid "Weekday as a decimal number, where 0 is Sunday and 6 is Saturday." +msgstr "以十进制数显示的工作日,其中0表示星期日,6表示星期六。" + +#: ../../library/datetime.rst:2320 +msgid "0, 1, ..., 6" +msgstr "0, 1, ..., 6" + +#: ../../library/datetime.rst:2324 +msgid "``%d``" +msgstr "``%d``" + +#: ../../library/datetime.rst:2324 +msgid "Day of the month as a zero-padded decimal number." +msgstr "补零后,以十进制数显示的月份中的一天。" + +#: ../../library/datetime.rst:2324 +msgid "01, 02, ..., 31" +msgstr "01, 02, ..., 31" + +#: ../../library/datetime.rst:2324 ../../library/datetime.rst:2337 +#: ../../library/datetime.rst:2340 ../../library/datetime.rst:2346 +#: ../../library/datetime.rst:2349 ../../library/datetime.rst:2355 +#: ../../library/datetime.rst:2373 +msgid "\\(9)" +msgstr "\\(9)" + +#: ../../library/datetime.rst:2327 +msgid "``%b``" +msgstr "``%b``" + +#: ../../library/datetime.rst:2327 +msgid "Month as locale's abbreviated name." +msgstr "当地月份的缩写。" + +#: ../../library/datetime.rst:0 +msgid "Jan, Feb, ..., Dec (en_US);" +msgstr "Jan, Feb, ..., Dec (en_US);" + +#: ../../library/datetime.rst:0 +msgid "Jan, Feb, ..., Dez (de_DE)" +msgstr "Jan, Feb, ..., Dez (de_DE)" + +#: ../../library/datetime.rst:2332 +msgid "``%B``" +msgstr "``%B``" + +#: ../../library/datetime.rst:2332 +msgid "Month as locale's full name." +msgstr "本地化的月份全名。" + +#: ../../library/datetime.rst:0 +msgid "January, February, ..., December (en_US);" +msgstr "January, February, ..., December (en_US);" + +#: ../../library/datetime.rst:0 +msgid "Januar, Februar, ..., Dezember (de_DE)" +msgstr "Januar, Februar, ..., Dezember (de_DE)" + +#: ../../library/datetime.rst:2337 +msgid "``%m``" +msgstr "``%m``" + +#: ../../library/datetime.rst:2337 +msgid "Month as a zero-padded decimal number." +msgstr "补零后,以十进制数显示的月份。" + +#: ../../library/datetime.rst:2337 ../../library/datetime.rst:2349 +msgid "01, 02, ..., 12" +msgstr "01, 02, ..., 12" + +#: ../../library/datetime.rst:2340 +msgid "``%y``" +msgstr "``%y``" + +#: ../../library/datetime.rst:2340 +msgid "Year without century as a zero-padded decimal number." +msgstr "补零后,以十进制数表示的,不带世纪的年份。" + +#: ../../library/datetime.rst:2340 +msgid "00, 01, ..., 99" +msgstr "00, 01, ..., 99" + +#: ../../library/datetime.rst:2343 +msgid "``%Y``" +msgstr "``%Y``" + +#: ../../library/datetime.rst:2343 +msgid "Year with century as a decimal number." +msgstr "十进制数表示的带世纪的年份。" + +#: ../../library/datetime.rst:2343 ../../library/datetime.rst:2413 +msgid "0001, 0002, ..., 2013, 2014, ..., 9998, 9999" +msgstr "0001, 0002, ..., 2013, 2014, ..., 9998, 9999" + +#: ../../library/datetime.rst:2346 +msgid "``%H``" +msgstr "``%H``" + +#: ../../library/datetime.rst:2346 +msgid "Hour (24-hour clock) as a zero-padded decimal number." +msgstr "以补零后的十进制数表示的小时(24 小时制)。" + +#: ../../library/datetime.rst:2346 +msgid "00, 01, ..., 23" +msgstr "00, 01, ..., 23" + +#: ../../library/datetime.rst:2349 +msgid "``%I``" +msgstr "``%I``" + +#: ../../library/datetime.rst:2349 +msgid "Hour (12-hour clock) as a zero-padded decimal number." +msgstr "以补零后的十进制数表示的小时(12 小时制)。" + +#: ../../library/datetime.rst:2352 +msgid "``%p``" +msgstr "``%p``" + +#: ../../library/datetime.rst:2352 +msgid "Locale's equivalent of either AM or PM." +msgstr "本地化的 AM 或 PM 。" + +#: ../../library/datetime.rst:0 +msgid "AM, PM (en_US);" +msgstr "AM, PM (en_US);" + +#: ../../library/datetime.rst:0 +msgid "am, pm (de_DE)" +msgstr "am, pm (de_DE)" + +#: ../../library/datetime.rst:2352 +msgid "\\(1), \\(3)" +msgstr "\\(1), \\(3)" + +#: ../../library/datetime.rst:2355 +msgid "``%M``" +msgstr "``%M``" + +#: ../../library/datetime.rst:2355 +msgid "Minute as a zero-padded decimal number." +msgstr "补零后,以十进制数显示的分钟。" + +#: ../../library/datetime.rst:2355 ../../library/datetime.rst:2358 +msgid "00, 01, ..., 59" +msgstr "00, 01, ..., 59" + +#: ../../library/datetime.rst:2358 +msgid "``%S``" +msgstr "``%S``" + +#: ../../library/datetime.rst:2358 +msgid "Second as a zero-padded decimal number." +msgstr "补零后,以十进制数显示的秒。" + +#: ../../library/datetime.rst:2358 +msgid "\\(4), \\(9)" +msgstr "\\(4), \\(9)" + +#: ../../library/datetime.rst:2361 +msgid "``%f``" +msgstr "``%f``" + +#: ../../library/datetime.rst:2361 +msgid "Microsecond as a decimal number, zero-padded to 6 digits." +msgstr "微秒作为一个十进制数,零填充到 6 位。" + +#: ../../library/datetime.rst:2361 +msgid "000000, 000001, ..., 999999" +msgstr "000000, 000001, ..., 999999" + +#: ../../library/datetime.rst:2361 +msgid "\\(5)" +msgstr "\\(5)" + +#: ../../library/datetime.rst:2365 ../../library/datetime.rst:2529 +msgid "``%z``" +msgstr "``%z``" + +#: ../../library/datetime.rst:2365 +msgid "" +"UTC offset in the form ``±HHMM[SS[.ffffff]]`` (empty string if the object is" +" naive)." +msgstr "UTC 偏移量,格式为 ``±HHMM[SS[.ffffff]]`` (如果是简单型对象则为空字符串)。" + +#: ../../library/datetime.rst:2365 +msgid "(empty), +0000, -0400, +1030, +063415, -030712.345216" +msgstr "(空), +0000, -0400, +1030, +063415, -030712.345216" + +#: ../../library/datetime.rst:2365 ../../library/datetime.rst:2370 +msgid "\\(6)" +msgstr "\\(6)" + +#: ../../library/datetime.rst:2370 ../../library/datetime.rst:2553 +msgid "``%Z``" +msgstr "``%Z``" + +#: ../../library/datetime.rst:2370 +msgid "Time zone name (empty string if the object is naive)." +msgstr "时区名称(如果对象为简单型则为空字符串)。" + +#: ../../library/datetime.rst:2370 +msgid "(empty), UTC, GMT" +msgstr "(空), UTC, GMT" + +#: ../../library/datetime.rst:2373 +msgid "``%j``" +msgstr "``%j``" + +#: ../../library/datetime.rst:2373 +msgid "Day of the year as a zero-padded decimal number." +msgstr "以补零后的十进制数表示的一年中的日序号。" + +#: ../../library/datetime.rst:2373 +msgid "001, 002, ..., 366" +msgstr "001, 002, ..., 366" + +#: ../../library/datetime.rst:2376 +msgid "``%U``" +msgstr "``%U``" + +#: ../../library/datetime.rst:2376 +msgid "" +"Week number of the year (Sunday as the first day of the week) as a zero-" +"padded decimal number. All days in a new year preceding the first Sunday are" +" considered to be in week 0." +msgstr "以补零后的十进制数表示的一年中的周序号(星期日作为每周的第一天)。 在新的一年中第一个星期日之前的所有日子都被视为是在第 0 周。" + +#: ../../library/datetime.rst:2376 ../../library/datetime.rst:2384 +msgid "00, 01, ..., 53" +msgstr "00, 01, ..., 53" + +#: ../../library/datetime.rst:2376 ../../library/datetime.rst:2384 +msgid "\\(7), \\(9)" +msgstr "\\(7), \\(9)" + +#: ../../library/datetime.rst:2384 +msgid "``%W``" +msgstr "``%W``" + +#: ../../library/datetime.rst:2384 +msgid "" +"Week number of the year (Monday as the first day of the week) as a zero-" +"padded decimal number. All days in a new year preceding the first Monday are" +" considered to be in week 0." +msgstr "以补零后的十进制数表示的一年中的周序号(星期一作为每周的第一天)。 在新的一年中第一个星期一之前的所有日子都被视为是在第 0 周。" + +#: ../../library/datetime.rst:2392 +msgid "``%c``" +msgstr "``%c``" + +#: ../../library/datetime.rst:2392 +msgid "Locale's appropriate date and time representation." +msgstr "本地化的适当日期和时间表示。" + +#: ../../library/datetime.rst:0 +msgid "Tue Aug 16 21:30:00 1988 (en_US);" +msgstr "Tue Aug 16 21:30:00 1988 (en_US);" + +#: ../../library/datetime.rst:0 +msgid "Di 16 Aug 21:30:00 1988 (de_DE)" +msgstr "Di 16 Aug 21:30:00 1988 (de_DE)" + +#: ../../library/datetime.rst:2397 +msgid "``%x``" +msgstr "``%x``" + +#: ../../library/datetime.rst:2397 +msgid "Locale's appropriate date representation." +msgstr "本地化的适当日期表示。" + +#: ../../library/datetime.rst:0 +msgid "08/16/88 (None);" +msgstr "08/16/88 (None);" + +#: ../../library/datetime.rst:0 +msgid "08/16/1988 (en_US);" +msgstr "08/16/1988 (en_US);" + +#: ../../library/datetime.rst:0 +msgid "16.08.1988 (de_DE)" +msgstr "16.08.1988 (de_DE)" + +#: ../../library/datetime.rst:2401 +msgid "``%X``" +msgstr "``%X``" + +#: ../../library/datetime.rst:2401 +msgid "Locale's appropriate time representation." +msgstr "本地化的适当时间表示。" + +#: ../../library/datetime.rst:0 +msgid "21:30:00 (en_US);" +msgstr "21:30:00 (en_US);" + +#: ../../library/datetime.rst:0 +msgid "21:30:00 (de_DE)" +msgstr "21:30:00 (de_DE)" + +#: ../../library/datetime.rst:2404 +msgid "``%%``" +msgstr "``%%``" + +#: ../../library/datetime.rst:2404 +msgid "A literal ``'%'`` character." +msgstr "字面的 ``'%'`` 字符。" + +#: ../../library/datetime.rst:2404 +msgid "%" +msgstr "%" + +#: ../../library/datetime.rst:2407 +msgid "" +"Several additional directives not required by the C89 standard are included " +"for convenience. These parameters all correspond to ISO 8601 date values." +msgstr "为了方便起见,还包括了C89标准不需要的其他一些指示符。 这些参数都对应于 ISO 8601 日期值。" + +#: ../../library/datetime.rst:2413 +msgid "``%G``" +msgstr "``%G``" + +#: ../../library/datetime.rst:2413 +msgid "" +"ISO 8601 year with century representing the year that contains the greater " +"part of the ISO week (``%V``)." +msgstr "带有世纪的 ISO 8601 年份,表示包含大部分 ISO 星期 (``%V``) 的年份。" + +#: ../../library/datetime.rst:2413 +msgid "\\(8)" +msgstr "\\(8)" + +#: ../../library/datetime.rst:2418 +msgid "``%u``" +msgstr "``%u``" + +#: ../../library/datetime.rst:2418 +msgid "ISO 8601 weekday as a decimal number where 1 is Monday." +msgstr "以十进制数显示的 ISO 8601 星期中的日序号,其中 1 表示星期一。" + +#: ../../library/datetime.rst:2418 +msgid "1, 2, ..., 7" +msgstr "1, 2, ..., 7" + +#: ../../library/datetime.rst:2421 +msgid "``%V``" +msgstr "``%V``" + +#: ../../library/datetime.rst:2421 +msgid "" +"ISO 8601 week as a decimal number with Monday as the first day of the week. " +"Week 01 is the week containing Jan 4." +msgstr "以十进制数显示的 ISO 8601 星期,以星期一作为每周的第一天。 第 01 周为包含 1 月 4 日的星期。" + +#: ../../library/datetime.rst:2421 +msgid "01, 02, ..., 53" +msgstr "01, 02, ..., 53" + +#: ../../library/datetime.rst:2421 +msgid "\\(8), \\(9)" +msgstr "\\(8), \\(9)" + +#: ../../library/datetime.rst:2428 +msgid "" +"These may not be available on all platforms when used with the " +":meth:`strftime` method. The ISO 8601 year and ISO 8601 week directives are " +"not interchangeable with the year and week number directives above. Calling " +":meth:`strptime` with incomplete or ambiguous ISO 8601 directives will raise" +" a :exc:`ValueError`." +msgstr "" +"这些代码可能不是在所有平台上都可与 :meth:`strftime` 方法配合使用。 ISO 8601 年份和 ISO 8601 " +"星期指令并不能与上面的年份和星期序号指令相互替代。 调用 :meth:`strptime` 时传入不完整或有歧义的 ISO 8601 指令将引发 " +":exc:`ValueError`。" + +#: ../../library/datetime.rst:2433 +msgid "" +"The full set of format codes supported varies across platforms, because " +"Python calls the platform C library's :func:`strftime` function, and " +"platform variations are common. To see the full set of format codes " +"supported on your platform, consult the :manpage:`strftime(3)` " +"documentation. There are also differences between platforms in handling of " +"unsupported format specifiers." +msgstr "" +"对完整格式代码集的支持在不同平台上有所差异,因为 Python 要调用所在平台的 C 库的 :func:`strftime` " +"函数,而不同平台的差异是很常见的。 要查看你所用平台所支持的完整格式代码集,请参阅 :manpage:`strftime(3)` " +"文档。不同的平台在处理不支持的格式指定符方面也有差异。" + +#: ../../library/datetime.rst:2439 +msgid "``%G``, ``%u`` and ``%V`` were added." +msgstr "增加了 ``%G``, ``%u`` 和 ``%V``。" + +#: ../../library/datetime.rst:2443 +msgid "Technical Detail" +msgstr "技术细节" + +#: ../../library/datetime.rst:2445 +msgid "" +"Broadly speaking, ``d.strftime(fmt)`` acts like the :mod:`time` module's " +"``time.strftime(fmt, d.timetuple())`` although not all objects support a " +":meth:`timetuple` method." +msgstr "" +"总体而言,``d.strftime(fmt)`` 类似于 :mod:`time` 模块的 ``time.strftime(fmt, " +"d.timetuple())``,但是并非所有对象都支持 :meth:`timetuple` 方法。" + +#: ../../library/datetime.rst:2449 +msgid "" +"For the :meth:`datetime.strptime` class method, the default value is " +"``1900-01-01T00:00:00.000``: any components not specified in the format " +"string will be pulled from the default value. [#]_" +msgstr "" +"对于 :meth:`datetime.strptime` 类方法,默认值为 ``1900-01-01T00:00:00.000``: " +"任何未在格式字符串中指定的部分都将从默认值中提取。 [#]_" + +#: ../../library/datetime.rst:2453 +msgid "Using ``datetime.strptime(date_string, format)`` is equivalent to::" +msgstr "使用 ``datetime.strptime(date_string, format)`` 等价于::" + +#: ../../library/datetime.rst:2457 +msgid "" +"except when the format includes sub-second components or timezone offset " +"information, which are supported in ``datetime.strptime`` but are discarded " +"by ``time.strptime``." +msgstr "" +"除非格式中包含秒以下的部分或时区差值信息,它们在 ``datetime.strptime`` 中受支持但会被 ``time.strptime`` " +"所丢弃。" + +#: ../../library/datetime.rst:2461 +msgid "" +"For :class:`.time` objects, the format codes for year, month, and day should" +" not be used, as :class:`time` objects have no such values. If they're used " +"anyway, ``1900`` is substituted for the year, and ``1`` for the month and " +"day." +msgstr "" +"对于 :class:`.time` 对象,年、月、日的格式代码不应被使用,因为 :class:`time` 对象没有这些值。 " +"如果它们被使用,则年份将被替换为 ``1900``,而月和日将被替换为 ``1``。" + +#: ../../library/datetime.rst:2465 +msgid "" +"For :class:`date` objects, the format codes for hours, minutes, seconds, and" +" microseconds should not be used, as :class:`date` objects have no such " +"values. If they're used anyway, ``0`` is substituted for them." +msgstr "" +"对于 :class:`date` 对象,时、分、秒和微秒的格式代码不应被使用,因为 :class:`date` 对象没有这些值。 " +"如果它们被使用,则它们都将被替换为 ``0``。" + +#: ../../library/datetime.rst:2469 +msgid "" +"For the same reason, handling of format strings containing Unicode code " +"points that can't be represented in the charset of the current locale is " +"also platform-dependent. On some platforms such code points are preserved " +"intact in the output, while on others ``strftime`` may raise " +":exc:`UnicodeError` or return an empty string instead." +msgstr "" +"出于相同的原因,对于包含当前区域设置字符集所无法表示的 Unicode 码位的格式字符串的处理方式也取决于具体平台。 " +"在某些平台上这样的码位会不加修改地原样输出,而在其他平台上 ``strftime`` 则可能引发 :exc:`UnicodeError` " +"或只返回一个空字符串。" + +#: ../../library/datetime.rst:2478 +msgid "" +"Because the format depends on the current locale, care should be taken when " +"making assumptions about the output value. Field orderings will vary (for " +"example, \"month/day/year\" versus \"day/month/year\"), and the output may " +"contain Unicode characters encoded using the locale's default encoding (for " +"example, if the current locale is ``ja_JP``, the default encoding could be " +"any one of ``eucJP``, ``SJIS``, or ``utf-8``; use :meth:`locale.getlocale` " +"to determine the current locale's encoding)." +msgstr "" +"由于此格式依赖于当前区域设置,因此对具体输出值应当保持谨慎预期。 字段顺序会发生改变(例如 \"month/day/year\" 与 " +"\"day/month/year\"),并且输出可能包含使用区域设置所指定的默认编码格式的 Unicode 字符(例如如果当前区域为 " +"``ja_JP``,则默认编码格式可能为 ``eucJP``, ``SJIS`` 或 ``utf-8`` 中的一个;使用 " +":meth:`locale.getlocale` 可确定当前区域设置的编码格式)。" + +#: ../../library/datetime.rst:2487 +msgid "" +"The :meth:`strptime` method can parse years in the full [1, 9999] range, but" +" years < 1000 must be zero-filled to 4-digit width." +msgstr "" +":meth:`strptime` 方法能够解析整个 [1, 9999] 范围内的年份,但 < 1000 的年份必须加零填充为 4 位数字宽度。" + +#: ../../library/datetime.rst:2490 +msgid "" +"In previous versions, :meth:`strftime` method was restricted to years >= " +"1900." +msgstr "在之前的版本中,:meth:`strftime` 方法只限于 >= 1900 的年份。" + +#: ../../library/datetime.rst:2494 +msgid "" +"In version 3.2, :meth:`strftime` method was restricted to years >= 1000." +msgstr "在版本3.2中,:meth:`strftime` 方法只限于 years >= 1000。" + +#: ../../library/datetime.rst:2499 +msgid "" +"When used with the :meth:`strptime` method, the ``%p`` directive only " +"affects the output hour field if the ``%I`` directive is used to parse the " +"hour." +msgstr "当与 :meth:`strptime` 方法一起使用时,如果使用 ``%I`` 指令来解析小时,``%p`` 指令只影响输出小时字段。" + +#: ../../library/datetime.rst:2503 +msgid "" +"Unlike the :mod:`time` module, the :mod:`datetime` module does not support " +"leap seconds." +msgstr "与 :mod:`time` 模块不同的是, :mod:`datetime` 模块不支持闰秒。" + +#: ../../library/datetime.rst:2507 +msgid "" +"When used with the :meth:`strptime` method, the ``%f`` directive accepts " +"from one to six digits and zero pads on the right. ``%f`` is an extension to" +" the set of format characters in the C standard (but implemented separately " +"in datetime objects, and therefore always available)." +msgstr "" +"当与 :meth:`strptime` 方法一起使用时,``%f`` 指令可接受一至六个数码及左边的零填充。 ``%f`` 是对 C " +"标准中格式字符集的扩展(但单独在 datetime 对象中实现,因此它总是可用)。" + +#: ../../library/datetime.rst:2514 +msgid "" +"For a naive object, the ``%z`` and ``%Z`` format codes are replaced by empty" +" strings." +msgstr "对于简单型对象,``%z`` and ``%Z`` 格式代码会被替换为空字符串。" + +#: ../../library/datetime.rst:2517 +msgid "For an aware object:" +msgstr "对于一个感知型对象而言:" + +#: ../../library/datetime.rst:2520 +msgid "" +":meth:`utcoffset` is transformed into a string of the form " +"``±HHMM[SS[.ffffff]]``, where ``HH`` is a 2-digit string giving the number " +"of UTC offset hours, ``MM`` is a 2-digit string giving the number of UTC " +"offset minutes, ``SS`` is a 2-digit string giving the number of UTC offset " +"seconds and ``ffffff`` is a 6-digit string giving the number of UTC offset " +"microseconds. The ``ffffff`` part is omitted when the offset is a whole " +"number of seconds and both the ``ffffff`` and the ``SS`` part is omitted " +"when the offset is a whole number of minutes. For example, if " +":meth:`utcoffset` returns ``timedelta(hours=-3, minutes=-30)``, ``%z`` is " +"replaced with the string ``'-0330'``." +msgstr "" +":meth:`utcoffset` 会被转换为 ``±HHMM[SS[.ffffff]]`` 形式的字符串,其中 ``HH`` 为给出 UTC " +"时差的小时部分的 2 位数码字符串,``MM`` 为给出 UTC 时差的分钟部分的 2 位数码字符串,``SS`` 为给出 UTC 时差的秒部分的 2 " +"位数码字符串,而 ``ffffff`` 为给出 UTC 时差的微秒部分的 6 位数码字符串。 当时差为整数秒时 ``ffffff`` " +"部分将被省略,而当时差为整数分钟时 ``ffffff`` 和 ``SS`` 部分都将被省略。 例如,如果 :meth:`utcoffset` 返回 " +"``timedelta(hours=-3, minutes=-30)``,则 ``%z`` 会被替换为字符串 ``'-0330'``。" + +#: ../../library/datetime.rst:2534 +msgid "" +"When the ``%z`` directive is provided to the :meth:`strptime` method, the " +"UTC offsets can have a colon as a separator between hours, minutes and " +"seconds. For example, ``'+01:00:00'`` will be parsed as an offset of one " +"hour. In addition, providing ``'Z'`` is identical to ``'+00:00'``." +msgstr "" +"当提供 ``%z`` 指令给 :meth:`strptime` 方法时,UTC 差值可以在时、分和秒之间使用冒号分隔符。 " +"例如,``'+01:00:00'`` 将被解读为一小时的差值。 此外,提供 ``'Z'`` 就相当于 ``'+00:00'``。" + +#: ../../library/datetime.rst:2542 +msgid "" +"In :meth:`strftime`, ``%Z`` is replaced by an empty string if :meth:`tzname`" +" returns ``None``; otherwise ``%Z`` is replaced by the returned value, which" +" must be a string." +msgstr "" +"在 :meth:`strftime` 中,如果 :meth:`tzname` 返回 ``None`` 则 ``%Z`` " +"会被替换为一个空字符串;在其他情况下 ``%Z`` 会被替换为返回值,该值必须为一个字符串。" + +#: ../../library/datetime.rst:2546 +msgid ":meth:`strptime` only accepts certain values for ``%Z``:" +msgstr ":meth:`strptime` 仅接受特定的 ``%Z`` 值:" + +#: ../../library/datetime.rst:2548 +msgid "any value in ``time.tzname`` for your machine's locale" +msgstr "你的机器的区域设置可以是 ``time.tzname`` 中的任何值" + +#: ../../library/datetime.rst:2549 +msgid "the hard-coded values ``UTC`` and ``GMT``" +msgstr "硬编码的值 ``UTC`` 和 ``GMT``" + +#: ../../library/datetime.rst:2551 +msgid "" +"So someone living in Japan may have ``JST``, ``UTC``, and ``GMT`` as valid " +"values, but probably not ``EST``. It will raise ``ValueError`` for invalid " +"values." +msgstr "" +"这样生活在日本的人可用的值为 ``JST``, ``UTC`` 和 ``GMT``,但可能没有 ``EST``。 它将引发 ``ValueError``" +" 表示无效的值。" + +#: ../../library/datetime.rst:2555 +msgid "" +"When the ``%z`` directive is provided to the :meth:`strptime` method, an " +"aware :class:`.datetime` object will be produced. The ``tzinfo`` of the " +"result will be set to a :class:`timezone` instance." +msgstr "" +"当提供 ``%z`` 指令给 :meth:`strptime` 方法时,将产生一个感知型 :class:`.datetime` 对象。 结果的 " +"``tzinfo`` 将被设为一个 :class:`timezone` 实例。" + +#: ../../library/datetime.rst:2561 +msgid "" +"When used with the :meth:`strptime` method, ``%U`` and ``%W`` are only used " +"in calculations when the day of the week and the calendar year (``%Y``) are " +"specified." +msgstr "" +"当与 :meth:`strptime` 方法一起使用时,``%U`` 和 ``%W`` 仅用于指定星期几和日历年份 (``%Y``) 的计算。" + +#: ../../library/datetime.rst:2566 +msgid "" +"Similar to ``%U`` and ``%W``, ``%V`` is only used in calculations when the " +"day of the week and the ISO year (``%G``) are specified in a " +":meth:`strptime` format string. Also note that ``%G`` and ``%Y`` are not " +"interchangeable." +msgstr "" +"类似于 ``%U`` 和 ``%W``,``%V`` 仅用于在 :meth:`strptime` 格式字符串中指定星期几和 ISO 年份 " +"(``%G``) 的计算。 还要注意 ``%G`` 和 ``%Y`` 是不可交换的。" + +#: ../../library/datetime.rst:2572 +msgid "" +"When used with the :meth:`strptime` method, the leading zero is optional for" +" formats ``%d``, ``%m``, ``%H``, ``%I``, ``%M``, ``%S``, ``%J``, ``%U``, " +"``%W``, and ``%V``. Format ``%y`` does require a leading zero." +msgstr "" +"当于 :meth:`strptime` 方法一起使用时,前导的零在格式 ``%d``, ``%m``, ``%H``, ``%I``, ``%M``, " +"``%S``, ``%J``, ``%U``, ``%W`` 和 ``%V`` 中是可选的。 格式 ``%y`` 不要求有前导的零。" + +#: ../../library/datetime.rst:2577 +msgid "Footnotes" +msgstr "备注" + +#: ../../library/datetime.rst:2578 +msgid "If, that is, we ignore the effects of Relativity" +msgstr "就是说如果我们忽略相对论效应的话。" + +#: ../../library/datetime.rst:2580 +msgid "" +"This matches the definition of the \"proleptic Gregorian\" calendar in " +"Dershowitz and Reingold's book *Calendrical Calculations*, where it's the " +"base calendar for all computations. See the book for algorithms for " +"converting between proleptic Gregorian ordinals and many other calendar " +"systems." +msgstr "" +"这与 Dershowitz 和 Reingold 所著 *Calendrical Calculations* " +"中“预期格列高利”历法的定义一致,它是适用于该书中所有运算的基础历法。 请参阅该书了解在预期格利高利历序列与许多其他历法系统之间进行转换的算法。" + +#: ../../library/datetime.rst:2586 +msgid "" +"See R. H. van Gent's `guide to the mathematics of the ISO 8601 calendar " +"`_ for a" +" good explanation." +msgstr "" +"请参阅 R. H. van Gent 所著 ` ISO 8601 历法的数学指导 " +"`_ " +"以获取更完整的说明。" + +#: ../../library/datetime.rst:2590 +msgid "" +"Passing ``datetime.strptime('Feb 29', '%b %d')`` will fail since ``1900`` is" +" not a leap year." +msgstr "传入 ``datetime.strptime('Feb 29', '%b %d')`` 将导致错误,因为 ``1900`` 不是闰年。" diff --git a/library/dbm.po b/library/dbm.po new file mode 100644 index 000000000..36de8d3fb --- /dev/null +++ b/library/dbm.po @@ -0,0 +1,503 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) 2001-2022, Python Software Foundation +# This file is distributed under the same license as the Python package. +# FIRST AUTHOR , YEAR. +# +# Translators: +# 操旭 , 2017 +# Shengjing Zhu , 2018 +# walkinrain , 2019 +# Zombie110year , 2019 +# ppcfish , 2019 +# Freesand Leo , 2020 +# +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: Python 3.9\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2022-11-04 14:34+0000\n" +"PO-Revision-Date: 2017-02-16 23:06+0000\n" +"Last-Translator: Freesand Leo , 2020\n" +"Language-Team: Chinese (China) (https://www.transifex.com/python-doc/teams/5390/zh_CN/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: zh_CN\n" +"Plural-Forms: nplurals=1; plural=0;\n" + +#: ../../library/dbm.rst:2 +msgid ":mod:`dbm` --- Interfaces to Unix \"databases\"" +msgstr ":mod:`dbm` --- Unix \"数据库\" 接口" + +#: ../../library/dbm.rst:7 +msgid "**Source code:** :source:`Lib/dbm/__init__.py`" +msgstr "**源代码:** :source:`Lib/dbm/__init__.py`" + +#: ../../library/dbm.rst:11 +msgid "" +":mod:`dbm` is a generic interface to variants of the DBM database --- " +":mod:`dbm.gnu` or :mod:`dbm.ndbm`. If none of these modules is installed, " +"the slow-but-simple implementation in module :mod:`dbm.dumb` will be used. " +"There is a `third party interface " +"`_ to the Oracle Berkeley DB." +msgstr "" +":mod:`dbm` 是一种泛用接口,针对各种 DBM 数据库 --- 包括 :mod:`dbm.gnu` 或 :mod:`dbm.ndbm`。 " +"如果未安装这些模块中的任何一种,则将使用 :mod:`dbm.dumb` 模块中慢速但简单的实现。 还有一个适用于 Oracle Berkeley DB" +" 的 `第三方接口 `_。" + +#: ../../library/dbm.rst:20 +msgid "" +"A tuple containing the exceptions that can be raised by each of the " +"supported modules, with a unique exception also named :exc:`dbm.error` as " +"the first item --- the latter is used when :exc:`dbm.error` is raised." +msgstr "" +"一个元组,其中包含每个受支持的模块可引发的异常,另外还有一个名为 :exc:`dbm.error` 的特殊异常作为第一项 --- 后者最在引发 " +":exc:`dbm.error` 时被使用。" + +#: ../../library/dbm.rst:27 +msgid "" +"This function attempts to guess which of the several simple database modules" +" available --- :mod:`dbm.gnu`, :mod:`dbm.ndbm` or :mod:`dbm.dumb` --- should" +" be used to open a given file." +msgstr "" +"此函数会猜测各种简单数据库模块中的哪一个是可用的 --- :mod:`dbm.gnu`, :mod:`dbm.ndbm` 还是 " +":mod:`dbm.dumb` --- 应该被用来打开给定的文件。" + +#: ../../library/dbm.rst:31 +msgid "" +"Returns one of the following values: ``None`` if the file can't be opened " +"because it's unreadable or doesn't exist; the empty string (``''``) if the " +"file's format can't be guessed; or a string containing the required module " +"name, such as ``'dbm.ndbm'`` or ``'dbm.gnu'``." +msgstr "" +"返回下列值中的一个:如果文件由于不可读或不存在而无法打开则返回 ``None``;如果文件的格式无法猜测则返回空字符串 " +"(``''``);或是包含所需模块名称的字符串,例如 ``'dbm.ndbm'`` 或 ``'dbm.gnu'``。" + +#: ../../library/dbm.rst:39 +msgid "Open the database file *file* and return a corresponding object." +msgstr "打开数据库文件 *file* 并返回一个相应的对象。" + +#: ../../library/dbm.rst:41 +msgid "" +"If the database file already exists, the :func:`whichdb` function is used to" +" determine its type and the appropriate module is used; if it does not " +"exist, the first module listed above that can be imported is used." +msgstr "" +"如果数据库文件已存在,则使用 :func:`whichdb` 函数来确定其类型和要使用的适当模块;如果文件不存在,则会使用上述可导入模块中的第一个。" + +#: ../../library/dbm.rst:45 ../../library/dbm.rst:161 +#: ../../library/dbm.rst:346 +msgid "The optional *flag* argument can be:" +msgstr "可选的 *flag* 参数可以是:" + +#: ../../library/dbm.rst:48 ../../library/dbm.rst:164 +#: ../../library/dbm.rst:183 ../../library/dbm.rst:279 +#: ../../library/dbm.rst:349 +msgid "Value" +msgstr "值" + +#: ../../library/dbm.rst:48 ../../library/dbm.rst:164 +#: ../../library/dbm.rst:183 ../../library/dbm.rst:279 +#: ../../library/dbm.rst:349 +msgid "Meaning" +msgstr "意义" + +#: ../../library/dbm.rst:50 ../../library/dbm.rst:166 +#: ../../library/dbm.rst:281 ../../library/dbm.rst:351 +msgid "``'r'``" +msgstr "``'r'``" + +#: ../../library/dbm.rst:50 ../../library/dbm.rst:166 +#: ../../library/dbm.rst:281 ../../library/dbm.rst:351 +msgid "Open existing database for reading only (default)" +msgstr "以只读方式打开现有数据库(默认)" + +#: ../../library/dbm.rst:53 ../../library/dbm.rst:169 +#: ../../library/dbm.rst:284 ../../library/dbm.rst:354 +msgid "``'w'``" +msgstr "``'w'``" + +#: ../../library/dbm.rst:53 ../../library/dbm.rst:169 +#: ../../library/dbm.rst:284 ../../library/dbm.rst:354 +msgid "Open existing database for reading and writing" +msgstr "以读写方式打开现有数据库" + +#: ../../library/dbm.rst:56 ../../library/dbm.rst:172 +#: ../../library/dbm.rst:287 ../../library/dbm.rst:357 +msgid "``'c'``" +msgstr "``'c'``" + +#: ../../library/dbm.rst:56 ../../library/dbm.rst:172 +#: ../../library/dbm.rst:287 ../../library/dbm.rst:357 +msgid "Open database for reading and writing, creating it if it doesn't exist" +msgstr "以读写方式打开数据库,如果不存在则创建它" + +#: ../../library/dbm.rst:59 ../../library/dbm.rst:175 +#: ../../library/dbm.rst:290 ../../library/dbm.rst:360 +msgid "``'n'``" +msgstr "``'n'``" + +#: ../../library/dbm.rst:59 ../../library/dbm.rst:175 +#: ../../library/dbm.rst:290 ../../library/dbm.rst:360 +msgid "Always create a new, empty database, open for reading and writing" +msgstr "始终创建一个新的空数据库,以读写方式打开" + +#: ../../library/dbm.rst:63 ../../library/dbm.rst:294 +#: ../../library/dbm.rst:364 +msgid "" +"The optional *mode* argument is the Unix mode of the file, used only when " +"the database has to be created. It defaults to octal ``0o666`` (and will be" +" modified by the prevailing umask)." +msgstr "" +"可选的 *mode* 参数是文件的 Unix 模式,仅在要创建数据库时才会被使用。 其默认值为八进制数 ``0o666`` (并将被当前的 umask " +"所修改)。" + +#: ../../library/dbm.rst:68 +msgid "" +"The object returned by :func:`.open` supports the same basic functionality " +"as dictionaries; keys and their corresponding values can be stored, " +"retrieved, and deleted, and the :keyword:`in` operator and the :meth:`keys` " +"method are available, as well as :meth:`get` and :meth:`setdefault`." +msgstr "" +":func:`.open` 所返回的对象支持与字典相同的基本功能;可以存储、获取和删除键及其对应的值,并可使用 :keyword:`in` 运算符和 " +":meth:`keys` 方法,以及 :meth:`get` 和 :meth:`setdefault`。" + +#: ../../library/dbm.rst:73 +msgid "" +":meth:`get` and :meth:`setdefault` are now available in all database " +"modules." +msgstr "现在 :meth:`get` 和 :meth:`setdefault` 在所有数据库模块中均可用。" + +#: ../../library/dbm.rst:76 +msgid "" +"Deleting a key from a read-only database raises database module specific " +"error instead of :exc:`KeyError`." +msgstr "从只读数据库中删除键将引发数据库模块专属的错误而不是 :exc:`KeyError`。" + +#: ../../library/dbm.rst:80 +msgid "" +"Key and values are always stored as bytes. This means that when strings are " +"used they are implicitly converted to the default encoding before being " +"stored." +msgstr "键和值总是被存储为字节串。 这意味着当使用字符串时它们会在被存储之前隐式地转换至默认编码格式。" + +#: ../../library/dbm.rst:84 +msgid "" +"These objects also support being used in a :keyword:`with` statement, which " +"will automatically close them when done." +msgstr "这些对象也支持在 :keyword:`with` 语句中使用,当语句结束时将自动关闭它们。" + +#: ../../library/dbm.rst:87 +msgid "" +"Added native support for the context management protocol to the objects " +"returned by :func:`.open`." +msgstr "向 :func:`.open` 所返回的对象添加了上下文管理协议的原生支持。" + +#: ../../library/dbm.rst:91 +msgid "" +"The following example records some hostnames and a corresponding title, and" +" then prints out the contents of the database::" +msgstr "以下示例记录了一些主机名和对应的标题,随后将数据库的内容打印出来。::" + +#: ../../library/dbm.rst:121 +msgid "Module :mod:`shelve`" +msgstr "模块 :mod:`shelve`" + +#: ../../library/dbm.rst:122 +msgid "Persistence module which stores non-string data." +msgstr "存储非字符串数据的持久化模块。" + +#: ../../library/dbm.rst:125 +msgid "The individual submodules are described in the following sections." +msgstr "以下部分描述了各个单独的子模块。" + +#: ../../library/dbm.rst:129 +msgid ":mod:`dbm.gnu` --- GNU's reinterpretation of dbm" +msgstr ":mod:`dbm.gnu` --- GNU 对 dbm 的重解析" + +#: ../../library/dbm.rst:135 +msgid "**Source code:** :source:`Lib/dbm/gnu.py`" +msgstr "**源代码:** :source:`Lib/dbm/gnu.py`" + +#: ../../library/dbm.rst:139 +msgid "" +"This module is quite similar to the :mod:`dbm` module, but uses the GNU " +"library ``gdbm`` instead to provide some additional functionality. Please " +"note that the file formats created by :mod:`dbm.gnu` and :mod:`dbm.ndbm` are" +" incompatible." +msgstr "" +"此模块与 :mod:`dbm` 模块很相似,但是改用 GNU 库 ``gdbm`` 来提供某些附加功能。 请注意由 :mod:`dbm.gnu` 与 " +":mod:`dbm.ndbm` 所创建的文件格式是不兼容的。" + +#: ../../library/dbm.rst:143 +msgid "" +"The :mod:`dbm.gnu` module provides an interface to the GNU DBM library. " +"``dbm.gnu.gdbm`` objects behave like mappings (dictionaries), except that " +"keys and values are always converted to bytes before storing. Printing a " +"``gdbm`` object doesn't print the keys and values, and the :meth:`items` and" +" :meth:`values` methods are not supported." +msgstr "" +":mod:`dbm.gnu` 模块提供了对 GNU DBM 库的接口。 ``dbm.gnu.gdbm`` " +"对象的行为类似于映射(字典),区别在于其键和值总是会在存储之前被转换为字节串。 打印 ``gdbm`` 对象不会打印出键和值,并且 " +":meth:`items` 和 :meth:`values` 等方法也不受支持。" + +#: ../../library/dbm.rst:152 +msgid "" +"Raised on :mod:`dbm.gnu`-specific errors, such as I/O errors. " +":exc:`KeyError` is raised for general mapping errors like specifying an " +"incorrect key." +msgstr "" +"针对 :mod:`dbm.gnu` 专属错误例如 I/O 错误引发。 :exc:`KeyError` 的引发则针对一般映射错误例如指定了不正确的键。" + +#: ../../library/dbm.rst:158 +msgid "" +"Open a ``gdbm`` database and return a :class:`gdbm` object. The *filename* " +"argument is the name of the database file." +msgstr "打开一个 ``gdbm`` 数据库并返回 :class:`gdbm` 对象。 *filename* 参数为数据库文件名称。" + +#: ../../library/dbm.rst:179 +msgid "" +"The following additional characters may be appended to the flag to control " +"how the database is opened:" +msgstr "下列附加字符可被添加至旗标以控制数据库的打开方式:" + +#: ../../library/dbm.rst:185 +msgid "``'f'``" +msgstr "``'f'``" + +#: ../../library/dbm.rst:185 +msgid "" +"Open the database in fast mode. Writes to the database will not be " +"synchronized." +msgstr "以快速模式打开数据库。写入数据库将不会同步。" + +#: ../../library/dbm.rst:188 +msgid "``'s'``" +msgstr "``'s'``" + +#: ../../library/dbm.rst:188 +msgid "" +"Synchronized mode. This will cause changes to the database to be immediately" +" written to the file." +msgstr "同步模式。这将导致数据库的更改立即写入文件。" + +#: ../../library/dbm.rst:192 +msgid "``'u'``" +msgstr "``'u'``" + +#: ../../library/dbm.rst:192 +msgid "Do not lock database." +msgstr "不要锁定数据库。" + +#: ../../library/dbm.rst:195 +msgid "" +"Not all flags are valid for all versions of ``gdbm``. The module constant " +":const:`open_flags` is a string of supported flag characters. The exception" +" :exc:`error` is raised if an invalid flag is specified." +msgstr "" +"不是所有旗标都可用于所有版本的 ``gdbm``。 模块常量 :const:`open_flags` 为包含受支持旗标字符的字符串。 " +"如果指定了无效的旗标则会引发 :exc:`error`。" + +#: ../../library/dbm.rst:199 +msgid "" +"The optional *mode* argument is the Unix mode of the file, used only when " +"the database has to be created. It defaults to octal ``0o666``." +msgstr "可选的 *mode* 参数是文件的 Unix 模式,仅在要创建数据库时才会被使用。 其默认值为八进制数 ``0o666``。" + +#: ../../library/dbm.rst:202 +msgid "" +"In addition to the dictionary-like methods, ``gdbm`` objects have the " +"following methods:" +msgstr "除了与字典类似的方法,``gdbm`` 对象还有以下方法:" + +#: ../../library/dbm.rst:207 +msgid "" +"It's possible to loop over every key in the database using this method and " +"the :meth:`nextkey` method. The traversal is ordered by ``gdbm``'s internal" +" hash values, and won't be sorted by the key values. This method returns " +"the starting key." +msgstr "" +"使用此方法和 :meth:`nextkey` 方法可以循环遍历数据库中的每个键。 遍历的顺序是按照 ``gdbm`` " +"的内部哈希值,而不会根据键的值排序。 此方法将返回起始键。" + +#: ../../library/dbm.rst:214 +msgid "" +"Returns the key that follows *key* in the traversal. The following code " +"prints every key in the database ``db``, without having to create a list in " +"memory that contains them all::" +msgstr "在遍历中返回 *key* 之后的的下一个键。 以下代码将打印数据库 ``db`` 中的每个键,而不会在内存中创建一个包含所有键的列表::" + +#: ../../library/dbm.rst:225 +msgid "" +"If you have carried out a lot of deletions and would like to shrink the " +"space used by the ``gdbm`` file, this routine will reorganize the database." +" ``gdbm`` objects will not shorten the length of a database file except by " +"using this reorganization; otherwise, deleted file space will be kept and " +"reused as new (key, value) pairs are added." +msgstr "" +"如果你进行了大量删除操作并且想要缩减 ``gdbm`` 文件所使用的空间,此例程将可重新组织数据库。 除非使用此重组功能否则 ``gdbm`` " +"对象不会缩减数据库文件大小;在其他情况下,被删除的文件空间将会保留并在添加新的 (键, 值) 对时被重用。" + +#: ../../library/dbm.rst:233 +msgid "" +"When the database has been opened in fast mode, this method forces any " +"unwritten data to be written to the disk." +msgstr "当以快速模式打开数据库时,此方法会将任何未写入数据强制写入磁盘。" + +#: ../../library/dbm.rst:238 +msgid "Close the ``gdbm`` database." +msgstr "关闭 ``gdbm`` 数据库。" + +#: ../../library/dbm.rst:241 +msgid ":mod:`dbm.ndbm` --- Interface based on ndbm" +msgstr ":mod:`dbm.ndbm` --- 基于 ndbm 的接口" + +#: ../../library/dbm.rst:247 +msgid "**Source code:** :source:`Lib/dbm/ndbm.py`" +msgstr "**源代码:** :source:`Lib/dbm/ndbm.py`" + +#: ../../library/dbm.rst:251 +msgid "" +"The :mod:`dbm.ndbm` module provides an interface to the Unix \"(n)dbm\" " +"library. Dbm objects behave like mappings (dictionaries), except that keys " +"and values are always stored as bytes. Printing a ``dbm`` object doesn't " +"print the keys and values, and the :meth:`items` and :meth:`values` methods " +"are not supported." +msgstr "" +":mod:`dbm.ndbm` 模块提供了对 Unix \"(n)dbm\" 库的接口。 Dbm " +"对象的行为类似于映射(字典),区别在于其键和值总是被存储为字节串。 打印 ``dbm`` 对象不会打印出键和值,并且 :meth:`items` 和 " +":meth:`values` 等方法也不受支持。" + +#: ../../library/dbm.rst:256 +msgid "" +"This module can be used with the \"classic\" ndbm interface or the GNU GDBM " +"compatibility interface. On Unix, the :program:`configure` script will " +"attempt to locate the appropriate header file to simplify building this " +"module." +msgstr "" +"此模块可与 \"经典classic\" ndbm 接口或 GNU GDBM 兼容接口一同使用。 在 Unix " +"上,:program:`configure` 脚本将尝试定位适当的头文件来简化此模块的构建。" + +#: ../../library/dbm.rst:262 +msgid "" +"Raised on :mod:`dbm.ndbm`-specific errors, such as I/O errors. " +":exc:`KeyError` is raised for general mapping errors like specifying an " +"incorrect key." +msgstr "" +"针对 :mod:`dbm.ndbm` 专属错误例如 I/O 错误引发。 :exc:`KeyError` 的引发则针对一般映射错误例如指定了不正确的键。" + +#: ../../library/dbm.rst:268 +msgid "Name of the ``ndbm`` implementation library used." +msgstr "所使用的 ``ndbm`` 实现库的名称。" + +#: ../../library/dbm.rst:273 +msgid "" +"Open a dbm database and return a ``ndbm`` object. The *filename* argument " +"is the name of the database file (without the :file:`.dir` or :file:`.pag` " +"extensions)." +msgstr "" +"打开一个 dbm 数据库并返回 ``ndbm`` 对象。 *filename* 参数为数据库文件名称(不带 :file:`.dir` 或 " +":file:`.pag` 扩展名)。" + +#: ../../library/dbm.rst:276 +msgid "The optional *flag* argument must be one of these values:" +msgstr "可选的 *flag* 参数必须是下列值之一:" + +#: ../../library/dbm.rst:298 +msgid "" +"In addition to the dictionary-like methods, ``ndbm`` objects provide the " +"following method:" +msgstr "除了与字典类似的方法,``ndbm`` 对象还有以下方法:" + +#: ../../library/dbm.rst:303 +msgid "Close the ``ndbm`` database." +msgstr "关闭 ``ndbm`` 数据库。" + +#: ../../library/dbm.rst:307 +msgid ":mod:`dbm.dumb` --- Portable DBM implementation" +msgstr ":mod:`dbm.dumb` --- 便携式 DBM 实现" + +#: ../../library/dbm.rst:312 +msgid "**Source code:** :source:`Lib/dbm/dumb.py`" +msgstr "**源代码:** :source:`Lib/dbm/dumb.py`" + +#: ../../library/dbm.rst:318 +msgid "" +"The :mod:`dbm.dumb` module is intended as a last resort fallback for the " +":mod:`dbm` module when a more robust module is not available. The " +":mod:`dbm.dumb` module is not written for speed and is not nearly as heavily" +" used as the other database modules." +msgstr "" +":mod:`dbm.dumb` 模块的目的是在更健壮的模块不可用时作为 :mod:`dbm` 模块的最终回退项。 :mod:`dbm.dumb` " +"不是为高速运行而编写的,也不像其他数据库模块一样被经常使用。" + +#: ../../library/dbm.rst:325 +msgid "" +"The :mod:`dbm.dumb` module provides a persistent dictionary-like interface " +"which is written entirely in Python. Unlike other modules such as " +":mod:`dbm.gnu` no external library is required. As with other persistent " +"mappings, the keys and values are always stored as bytes." +msgstr "" +":mod:`dbm.dumb` 模块提供了一个完全以 Python 编写的持久化字典类接口。 不同于 :mod:`dbm.gnu` " +"等其他模块,它不需要外部库。 与其他持久化映射一样,它的键和值也总是被存储为字节串。" + +#: ../../library/dbm.rst:330 +msgid "The module defines the following:" +msgstr "该模块定义以下内容:" + +#: ../../library/dbm.rst:335 +msgid "" +"Raised on :mod:`dbm.dumb`-specific errors, such as I/O errors. " +":exc:`KeyError` is raised for general mapping errors like specifying an " +"incorrect key." +msgstr "" +"针对 :mod:`dbm.dumb` 专属错误例如 I/O 错误引发。 :exc:`KeyError` 的引发则针对一般映射例如指定了不正确的键。" + +#: ../../library/dbm.rst:341 +msgid "" +"Open a ``dumbdbm`` database and return a dumbdbm object. The *filename* " +"argument is the basename of the database file (without any specific " +"extensions). When a dumbdbm database is created, files with :file:`.dat` " +"and :file:`.dir` extensions are created." +msgstr "" +"打开一个 ``dumbdbm`` 数据库并返回 dumbdbm 对象。 *filename* 参数为数据库文件的主名称(不带任何特定扩展名)。 创建一个" +" dumbdbm 数据库时将创建多个带有 :file:`.dat` 和 :file:`.dir` 扩展名的文件。" + +#: ../../library/dbm.rst:369 +msgid "" +"It is possible to crash the Python interpreter when loading a database with " +"a sufficiently large/complex entry due to stack depth limitations in " +"Python's AST compiler." +msgstr "当载入包含足够巨大/复杂条目的数据库时有可能导致 Python 解释器的崩溃,这是由于 Python AST 编译器有栈深度限制。" + +#: ../../library/dbm.rst:373 +msgid "" +":func:`.open` always creates a new database when the flag has the value " +"``'n'``." +msgstr ":func:`.open` 在 flag 值为 ``'n'`` 时将总是创建一个新的数据库。" + +#: ../../library/dbm.rst:377 +msgid "" +"A database opened with flags ``'r'`` is now read-only. Opening with flags " +"``'r'`` and ``'w'`` no longer creates a database if it does not exist." +msgstr "附带 ``'r'`` 旗标打开的数据库现在将是只读的。 附带 ``'r'`` 和 ``'w'`` 旗标的打开操作不会再创建数据库。" + +#: ../../library/dbm.rst:382 +msgid "" +"In addition to the methods provided by the " +":class:`collections.abc.MutableMapping` class, :class:`dumbdbm` objects " +"provide the following methods:" +msgstr "" +"除了 :class:`collections.abc.MutableMapping` 类所提供的方法,:class:`dumbdbm` " +"对象还提供了以下方法:" + +#: ../../library/dbm.rst:388 +msgid "" +"Synchronize the on-disk directory and data files. This method is called by " +"the :meth:`Shelve.sync` method." +msgstr "同步磁盘上的目录和数据文件。 此方法会由 :meth:`Shelve.sync` 方法来调用。" + +#: ../../library/dbm.rst:393 +msgid "Close the ``dumbdbm`` database." +msgstr "关闭 ``dumbdbm`` 数据库。" diff --git a/library/debug.po b/library/debug.po new file mode 100644 index 000000000..8cadd6448 --- /dev/null +++ b/library/debug.po @@ -0,0 +1,40 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) 2001-2022, Python Software Foundation +# This file is distributed under the same license as the Python package. +# FIRST AUTHOR , YEAR. +# +# Translators: +# Alpha Du , 2019 +# Freesand Leo , 2019 +# +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: Python 3.9\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2022-11-04 14:34+0000\n" +"PO-Revision-Date: 2017-02-16 23:06+0000\n" +"Last-Translator: Freesand Leo , 2019\n" +"Language-Team: Chinese (China) (https://www.transifex.com/python-doc/teams/5390/zh_CN/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: zh_CN\n" +"Plural-Forms: nplurals=1; plural=0;\n" + +#: ../../library/debug.rst:3 +msgid "Debugging and Profiling" +msgstr "调试和分析" + +#: ../../library/debug.rst:5 +msgid "" +"These libraries help you with Python development: the debugger enables you " +"to step through code, analyze stack frames and set breakpoints etc., and the" +" profilers run code and give you a detailed breakdown of execution times, " +"allowing you to identify bottlenecks in your programs. Auditing events " +"provide visibility into runtime behaviors that would otherwise require " +"intrusive debugging or patching." +msgstr "" +"这些库可以帮助你进行 Python " +"开发:调试器使你能够逐步执行代码,分析堆栈帧并设置中断点等等,性能分析器可以运行代码并为你提供执行时间的详细数据,使你能够找出你的程序中的瓶颈。 " +"审计事件提供运行时行为的可见性,如果没有此工具则需要进行侵入式调试或修补。" diff --git a/library/decimal.po b/library/decimal.po new file mode 100644 index 000000000..78e9bae7e --- /dev/null +++ b/library/decimal.po @@ -0,0 +1,2283 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) 2001-2022, Python Software Foundation +# This file is distributed under the same license as the Python package. +# FIRST AUTHOR , YEAR. +# +# Translators: +# Alpha Du , 2019 +# focusheart , 2019 +# Naisen Xu <723648649@qq.com>, 2019 +# ppcfish , 2020 +# Freesand Leo , 2020 +# +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: Python 3.9\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2022-11-04 14:34+0000\n" +"PO-Revision-Date: 2017-02-16 23:06+0000\n" +"Last-Translator: Freesand Leo , 2020\n" +"Language-Team: Chinese (China) (https://www.transifex.com/python-doc/teams/5390/zh_CN/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: zh_CN\n" +"Plural-Forms: nplurals=1; plural=0;\n" + +#: ../../library/decimal.rst:2 +msgid ":mod:`decimal` --- Decimal fixed point and floating point arithmetic" +msgstr ":mod:`decimal` --- 十进制定点和浮点运算" + +#: ../../library/decimal.rst:15 +msgid "**Source code:** :source:`Lib/decimal.py`" +msgstr "**源码:** :source:`Lib/decimal.py`" + +#: ../../library/decimal.rst:33 +msgid "" +"The :mod:`decimal` module provides support for fast correctly-rounded " +"decimal floating point arithmetic. It offers several advantages over the " +":class:`float` datatype:" +msgstr "" +":mod:`decimal` 模块为快速正确舍入的十进制浮点运算提供支持。 与 :class:`float` 数据类型相比,它具有以下几个优点:" + +#: ../../library/decimal.rst:37 +msgid "" +"Decimal \"is based on a floating-point model which was designed with people " +"in mind, and necessarily has a paramount guiding principle -- computers must" +" provide an arithmetic that works in the same way as the arithmetic that " +"people learn at school.\" -- excerpt from the decimal arithmetic " +"specification." +msgstr "" +"Decimal “基于一个浮点模型,它是为人们设计的,并且必然具有最重要的指导原则 —— 计算机必须提供与人们在学校学习的算法相同的算法。” —— " +"摘自十进制算术规范。" + +#: ../../library/decimal.rst:42 +msgid "" +"Decimal numbers can be represented exactly. In contrast, numbers like " +":const:`1.1` and :const:`2.2` do not have exact representations in binary " +"floating point. End users typically would not expect ``1.1 + 2.2`` to " +"display as :const:`3.3000000000000003` as it does with binary floating " +"point." +msgstr "" +"Decimal 数字的表示是完全精确的。 相比之下,:const:`1.1` 和 :const:`2.2` 这样的数字在二进制浮点中没有精确的表示。 " +"最终用户通常不希望 ``1.1 + 2.2`` 如二进制浮点数表示那样被显示为 :const:`3.3000000000000003`。" + +#: ../../library/decimal.rst:47 +msgid "" +"The exactness carries over into arithmetic. In decimal floating point, " +"``0.1 + 0.1 + 0.1 - 0.3`` is exactly equal to zero. In binary floating " +"point, the result is :const:`5.5511151231257827e-017`. While near to zero, " +"the differences prevent reliable equality testing and differences can " +"accumulate. For this reason, decimal is preferred in accounting applications" +" which have strict equality invariants." +msgstr "" +"精确性延续到算术中。 在十进制浮点数中,``0.1 + 0.1 + 0.1 - 0.3`` 恰好等于零。 在二进制浮点数中,结果为 " +":const:`5.5511151231257827e-017` 。 虽然接近于零,但差异妨碍了可靠的相等性检验,并且差异可能会累积。 " +"因此,在具有严格相等不变量的会计应用程序中, decimal 是首选。" + +#: ../../library/decimal.rst:54 +msgid "" +"The decimal module incorporates a notion of significant places so that " +"``1.30 + 1.20`` is :const:`2.50`. The trailing zero is kept to indicate " +"significance. This is the customary presentation for monetary applications. " +"For multiplication, the \"schoolbook\" approach uses all the figures in the " +"multiplicands. For instance, ``1.3 * 1.2`` gives :const:`1.56` while ``1.30" +" * 1.20`` gives :const:`1.5600`." +msgstr "" +"十进制模块包含有效位的概念,因此 ``1.30 + 1.20`` 的结果是 :const:`2.50` 。 保留尾随零以表示有效位。 " +"这是货币的惯用表示方法。乘法则沿用 “教科书“ 中:保留被乘数中的所有数字的方法。 例如, ``1.3 * 1.2`` 结果是 " +":const:`1.56` 而 ``1.30 * 1.20`` 结果是 :const:`1.5600` 。" + +#: ../../library/decimal.rst:61 +msgid "" +"Unlike hardware based binary floating point, the decimal module has a user " +"alterable precision (defaulting to 28 places) which can be as large as " +"needed for a given problem:" +msgstr "与基于硬件的二进制浮点不同,十进制模块具有用户可更改的精度(默认为28位),可以与给定问题所需的一样大:" + +#: ../../library/decimal.rst:73 +msgid "" +"Both binary and decimal floating point are implemented in terms of published" +" standards. While the built-in float type exposes only a modest portion of " +"its capabilities, the decimal module exposes all required parts of the " +"standard. When needed, the programmer has full control over rounding and " +"signal handling. This includes an option to enforce exact arithmetic by " +"using exceptions to block any inexact operations." +msgstr "" +"二进制和十进制浮点都是根据已发布的标准实现的。 虽然内置浮点类型只公开其功能的一小部分,但十进制模块公开了标准的所有必需部分。 " +"在需要时,程序员可以完全控制舍入和信号处理。 这包括通过使用异常来阻止任何不精确操作来强制执行精确算术的选项。" + +#: ../../library/decimal.rst:80 +msgid "" +"The decimal module was designed to support \"without prejudice, both exact " +"unrounded decimal arithmetic (sometimes called fixed-point arithmetic) and " +"rounded floating-point arithmetic.\" -- excerpt from the decimal arithmetic" +" specification." +msgstr "十进制模块旨在支持“无偏见,精确的非连续十进制算术(有时称为定点算术)和舍入浮点算术”。 —— 摘自十进制算术规范。" + +#: ../../library/decimal.rst:85 +msgid "" +"The module design is centered around three concepts: the decimal number, " +"the context for arithmetic, and signals." +msgstr "模块设计以三个概念为中心:十进制数,算术上下文和信号。" + +#: ../../library/decimal.rst:88 +msgid "" +"A decimal number is immutable. It has a sign, coefficient digits, and an " +"exponent. To preserve significance, the coefficient digits do not truncate " +"trailing zeros. Decimals also include special values such as " +":const:`Infinity`, :const:`-Infinity`, and :const:`NaN`. The standard also " +"differentiates :const:`-0` from :const:`+0`." +msgstr "" +"十进制数是不可变的。 它有一个符号,系数数字和一个指数。 为了保持重要性,系数数字不会截断尾随零。十进制数也包括特殊值,例如 " +":const:`Infinity` ,:const:`-Infinity` ,和 :const:`NaN` 。 该标准还区分 :const:`-0` 和" +" :const:`+0` 。" + +#: ../../library/decimal.rst:94 +msgid "" +"The context for arithmetic is an environment specifying precision, rounding " +"rules, limits on exponents, flags indicating the results of operations, and " +"trap enablers which determine whether signals are treated as exceptions. " +"Rounding options include :const:`ROUND_CEILING`, :const:`ROUND_DOWN`, " +":const:`ROUND_FLOOR`, :const:`ROUND_HALF_DOWN`, :const:`ROUND_HALF_EVEN`, " +":const:`ROUND_HALF_UP`, :const:`ROUND_UP`, and :const:`ROUND_05UP`." +msgstr "" +"算术的上下文是指定精度、舍入规则、指数限制、指示操作结果的标志以及确定符号是否被视为异常的陷阱启用器的环境。 舍入选项包括 " +":const:`ROUND_CEILING` 、 :const:`ROUND_DOWN` 、 :const:`ROUND_FLOOR` 、 " +":const:`ROUND_HALF_DOWN`, :const:`ROUND_HALF_EVEN` 、 :const:`ROUND_HALF_UP` " +"、 :const:`ROUND_UP` 以及 :const:`ROUND_05UP`." + +#: ../../library/decimal.rst:101 +msgid "" +"Signals are groups of exceptional conditions arising during the course of " +"computation. Depending on the needs of the application, signals may be " +"ignored, considered as informational, or treated as exceptions. The signals " +"in the decimal module are: :const:`Clamped`, :const:`InvalidOperation`, " +":const:`DivisionByZero`, :const:`Inexact`, :const:`Rounded`, " +":const:`Subnormal`, :const:`Overflow`, :const:`Underflow` and " +":const:`FloatOperation`." +msgstr "" +"信号是在计算过程中出现的异常条件组。 根据应用程序的需要,信号可能会被忽略,被视为信息,或被视为异常。 " +"十进制模块中的信号有::const:`Clamped` 、 :const:`InvalidOperation` 、 " +":const:`DivisionByZero` 、 :const:`Inexact` 、 :const:`Rounded` 、 " +":const:`Subnormal` 、 :const:`Overflow` 、 :const:`Underflow` 以及 " +":const:`FloatOperation` 。" + +#: ../../library/decimal.rst:108 +msgid "" +"For each signal there is a flag and a trap enabler. When a signal is " +"encountered, its flag is set to one, then, if the trap enabler is set to " +"one, an exception is raised. Flags are sticky, so the user needs to reset " +"them before monitoring a calculation." +msgstr "" +"对于每个信号,都有一个标志和一个陷阱启动器。 遇到信号时,其标志设置为 1 ,然后,如果陷阱启用器设置为 1 ,则引发异常。 " +"标志是粘性的,因此用户需要在监控计算之前重置它们。" + +#: ../../library/decimal.rst:116 +msgid "" +"IBM's General Decimal Arithmetic Specification, `The General Decimal " +"Arithmetic Specification `_." +msgstr "" +"IBM的通用十进制算术规范, `The General Decimal Arithmetic Specification " +"`_." + +#: ../../library/decimal.rst:125 +msgid "Quick-start Tutorial" +msgstr "快速入门教程" + +#: ../../library/decimal.rst:127 +msgid "" +"The usual start to using decimals is importing the module, viewing the " +"current context with :func:`getcontext` and, if necessary, setting new " +"values for precision, rounding, or enabled traps::" +msgstr "通常使用小数的开始是导入模块,使用 :func:`getcontext` 查看当前上下文,并在必要时为精度、舍入或启用的陷阱设置新值::" + +#: ../../library/decimal.rst:139 +msgid "" +"Decimal instances can be constructed from integers, strings, floats, or " +"tuples. Construction from an integer or a float performs an exact conversion" +" of the value of that integer or float. Decimal numbers include special " +"values such as :const:`NaN` which stands for \"Not a number\", positive and " +"negative :const:`Infinity`, and :const:`-0`::" +msgstr "" +"可以从整数、字符串、浮点数或元组构造十进制实例。 从整数或浮点构造将执行该整数或浮点值的精确转换。 十进制数包括特殊值,例如 :const:`NaN` " +"代表“非数字”,正的和负的 :const:`Infinity`,和 :const:`-0` ::" + +#: ../../library/decimal.rst:163 +msgid "" +"If the :exc:`FloatOperation` signal is trapped, accidental mixing of " +"decimals and floats in constructors or ordering comparisons raises an " +"exception::" +msgstr "如果 :exc:`FloatOperation` 信号被捕获,构造函数中的小数和浮点数的意外混合或排序比较会引发异常 ::" + +#: ../../library/decimal.rst:182 +msgid "" +"The significance of a new Decimal is determined solely by the number of " +"digits input. Context precision and rounding only come into play during " +"arithmetic operations." +msgstr "新 Decimal 的重要性仅由输入的位数决定。 上下文精度和舍入仅在算术运算期间发挥作用。" + +#: ../../library/decimal.rst:199 +msgid "" +"If the internal limits of the C version are exceeded, constructing a decimal" +" raises :class:`InvalidOperation`::" +msgstr "如果超出了C版本的内部限制,则构造一个十进制将引发 :class:`InvalidOperation` ::" + +#: ../../library/decimal.rst:209 +msgid "" +"Decimals interact well with much of the rest of Python. Here is a small " +"decimal floating point flying circus:" +msgstr "小数与 Python 的其余部分很好地交互。 这是一个小的十进制浮点飞行杂技团:" + +#: ../../library/decimal.rst:241 +msgid "And some mathematical functions are also available to Decimal:" +msgstr "Decimal 也可以使用一些数学函数:" + +#: ../../library/decimal.rst:253 +msgid "" +"The :meth:`quantize` method rounds a number to a fixed exponent. This " +"method is useful for monetary applications that often round results to a " +"fixed number of places:" +msgstr ":meth:`quantize` 方法将数字舍入为固定指数。 此方法对于将结果舍入到固定的位置的货币应用程序非常有用:" + +#: ../../library/decimal.rst:262 +msgid "" +"As shown above, the :func:`getcontext` function accesses the current context" +" and allows the settings to be changed. This approach meets the needs of " +"most applications." +msgstr "如上所示,:func:`getcontext` 函数访问当前上下文并允许更改设置。 这种方法满足大多数应用程序的需求。" + +#: ../../library/decimal.rst:266 +msgid "" +"For more advanced work, it may be useful to create alternate contexts using " +"the Context() constructor. To make an alternate active, use the " +":func:`setcontext` function." +msgstr "" +"对于更高级的工作,使用 Context() 构造函数创建备用上下文可能很有用。 要使用备用活动,请使用 :func:`setcontext` 函数。" + +#: ../../library/decimal.rst:270 +msgid "" +"In accordance with the standard, the :mod:`decimal` module provides two " +"ready to use standard contexts, :const:`BasicContext` and " +":const:`ExtendedContext`. The former is especially useful for debugging " +"because many of the traps are enabled:" +msgstr "" +"根据标准,:mod:`decimal` 模块提供了两个现成的标准上下文 :const:`BasicContext` 和 " +":const:`ExtendedContext` 。 前者对调试特别有用,因为许多陷阱都已启用:" + +#: ../../library/decimal.rst:299 +msgid "" +"Contexts also have signal flags for monitoring exceptional conditions " +"encountered during computations. The flags remain set until explicitly " +"cleared, so it is best to clear the flags before each set of monitored " +"computations by using the :meth:`clear_flags` method. ::" +msgstr "" +"上下文还具有用于监视计算期间遇到的异常情况的信号标志。 标志保持设置直到明确清除,因此最好通过使用 :meth:`clear_flags` " +"方法清除每组受监控计算之前的标志。::" + +#: ../../library/decimal.rst:312 +msgid "" +"The *flags* entry shows that the rational approximation to :const:`Pi` was " +"rounded (digits beyond the context precision were thrown away) and that the " +"result is inexact (some of the discarded digits were non-zero)." +msgstr "" +"*flags* 条目显示对 :const:`Pi` 的有理逼近被舍入(超出上下文精度的数字被抛弃)并且结果是不精确的(一些丢弃的数字不为零)。" + +#: ../../library/decimal.rst:316 +msgid "" +"Individual traps are set using the dictionary in the :attr:`traps` field of " +"a context:" +msgstr "使用上下文的 :attr:`traps` 字段中的字典设置单个陷阱:" + +#: ../../library/decimal.rst:331 +msgid "" +"Most programs adjust the current context only once, at the beginning of the " +"program. And, in many applications, data is converted to :class:`Decimal` " +"with a single cast inside a loop. With context set and decimals created, " +"the bulk of the program manipulates the data no differently than with other " +"Python numeric types." +msgstr "" +"大多数程序仅在程序开始时调整当前上下文一次。 并且,在许多应用程序中,数据在循环内单个强制转换为 :class:`Decimal` 。 " +"通过创建上下文集和小数,程序的大部分操作数据与其他 Python 数字类型没有区别。" + +#: ../../library/decimal.rst:343 +msgid "Decimal objects" +msgstr "Decimal 对象" + +#: ../../library/decimal.rst:348 +msgid "Construct a new :class:`Decimal` object based from *value*." +msgstr "根据 *value* 构造一个新的 :class:`Decimal` 对象。" + +#: ../../library/decimal.rst:350 +msgid "" +"*value* can be an integer, string, tuple, :class:`float`, or another " +":class:`Decimal` object. If no *value* is given, returns ``Decimal('0')``. " +"If *value* is a string, it should conform to the decimal numeric string " +"syntax after leading and trailing whitespace characters, as well as " +"underscores throughout, are removed::" +msgstr "" +"*value* 可以是整数,字符串,元组,:class:`float` ,或另一个 :class:`Decimal` 对象。 如果没有给出 " +"*value*,则返回 ``Decimal('0')``。 如果 *value* " +"是一个字符串,它应该在前导和尾随空格字符以及下划线被删除之后符合十进制数字字符串语法::" + +#: ../../library/decimal.rst:366 +msgid "" +"Other Unicode decimal digits are also permitted where ``digit`` appears " +"above. These include decimal digits from various other alphabets (for " +"example, Arabic-Indic and Devanāgarī digits) along with the fullwidth digits" +" ``'\\uff10'`` through ``'\\uff19'``." +msgstr "" +"当上面出现 ``digit`` 时也允许其他十进制数码。 其中包括来自各种其他语言系统的十进制数码(例如阿拉伯-印地语和天城文的数码)以及全宽数码 " +"``'\\uff10'`` 到 ``'\\uff19'``。" + +#: ../../library/decimal.rst:371 +msgid "" +"If *value* is a :class:`tuple`, it should have three components, a sign " +"(:const:`0` for positive or :const:`1` for negative), a :class:`tuple` of " +"digits, and an integer exponent. For example, ``Decimal((0, (1, 4, 1, 4), " +"-3))`` returns ``Decimal('1.414')``." +msgstr "" +"如果 *value* 是一个 :class:`tuple` ,它应该有三个组件,一个符号( :const:`0` 表示正数或 :const:`1` " +"表示负数),一个数字的 :class:`tuple` 和整数指数。 例如, ``Decimal((0, (1, 4, 1, 4), -3))`` 返回 " +"``Decimal('1.414')``。" + +#: ../../library/decimal.rst:376 +msgid "" +"If *value* is a :class:`float`, the binary floating point value is " +"losslessly converted to its exact decimal equivalent. This conversion can " +"often require 53 or more digits of precision. For example, " +"``Decimal(float('1.1'))`` converts to " +"``Decimal('1.100000000000000088817841970012523233890533447265625')``." +msgstr "" +"如果 *value* 是 :class:`float` ,则二进制浮点值无损地转换为其精确的十进制等效值。 此转换通常需要53位或更多位数的精度。 " +"例如, ``Decimal(float('1.1'))`` " +"转换为``Decimal('1.100000000000000088817841970012523233890533447265625')``。" + +#: ../../library/decimal.rst:382 +msgid "" +"The *context* precision does not affect how many digits are stored. That is " +"determined exclusively by the number of digits in *value*. For example, " +"``Decimal('3.00000')`` records all five zeros even if the context precision " +"is only three." +msgstr "" +"*context* 精度不会影响存储的位数。 这完全由 *value* 中的位数决定。 例如,``Decimal('3.00000')`` " +"记录所有五个零,即使上下文精度只有三。" + +#: ../../library/decimal.rst:387 +msgid "" +"The purpose of the *context* argument is determining what to do if *value* " +"is a malformed string. If the context traps :const:`InvalidOperation`, an " +"exception is raised; otherwise, the constructor returns a new Decimal with " +"the value of :const:`NaN`." +msgstr "" +"*context* 参数的目的是确定 *value* 是格式错误的字符串时该怎么做。 如果上下文陷阱 " +":const:`InvalidOperation`,则引发异常;否则,构造函数返回一个新的 Decimal,其值为 :const:`NaN`。" + +#: ../../library/decimal.rst:392 +msgid "Once constructed, :class:`Decimal` objects are immutable." +msgstr "构造完成后, :class:`Decimal` 对象是不可变的。" + +#: ../../library/decimal.rst:394 +msgid "" +"The argument to the constructor is now permitted to be a :class:`float` " +"instance." +msgstr "现在允许构造函数的参数为 :class:`float` 实例。" + +#: ../../library/decimal.rst:398 +msgid "" +":class:`float` arguments raise an exception if the :exc:`FloatOperation` " +"trap is set. By default the trap is off." +msgstr ":class:`float` 参数在设置 :exc:`FloatOperation` 陷阱时引发异常。 默认情况下,陷阱已关闭。" + +#: ../../library/decimal.rst:402 +msgid "" +"Underscores are allowed for grouping, as with integral and floating-point " +"literals in code." +msgstr "允许下划线进行分组,就像代码中的整数和浮点文字一样。" + +#: ../../library/decimal.rst:406 +msgid "" +"Decimal floating point objects share many properties with the other built-in" +" numeric types such as :class:`float` and :class:`int`. All of the usual " +"math operations and special methods apply. Likewise, decimal objects can be" +" copied, pickled, printed, used as dictionary keys, used as set elements, " +"compared, sorted, and coerced to another type (such as :class:`float` or " +":class:`int`)." +msgstr "" +"十进制浮点对象与其他内置数值类型共享许多属性,例如 :class:`float` 和 :class:`int` 。 所有常用的数学运算和特殊方法都适用。" +" 同样,十进制对象可以复制、pickle、打印、用作字典键、用作集合元素、比较、排序和强制转换为另一种类型(例如 :class:`float` 或 " +":class:`int` )。" + +#: ../../library/decimal.rst:413 +msgid "" +"There are some small differences between arithmetic on Decimal objects and " +"arithmetic on integers and floats. When the remainder operator ``%`` is " +"applied to Decimal objects, the sign of the result is the sign of the " +"*dividend* rather than the sign of the divisor::" +msgstr "" +"算术对十进制对象和算术对整数和浮点数有一些小的差别。 当余数运算符 ``%`` 应用于Decimal对象时,结果的符号是 *被除数* " +"的符号,而不是除数的符号::" + +#: ../../library/decimal.rst:423 +msgid "" +"The integer division operator ``//`` behaves analogously, returning the " +"integer part of the true quotient (truncating towards zero) rather than its " +"floor, so as to preserve the usual identity ``x == (x // y) * y + x % y``::" +msgstr "" +"整数除法运算符 ``//`` 的行为类似,返回真商的整数部分(截断为零)而不是它的向下取整,以便保留通常的标识 ``x == (x // y) * y " +"+ x % y``::" + +#: ../../library/decimal.rst:432 +msgid "" +"The ``%`` and ``//`` operators implement the ``remainder`` and ``divide-" +"integer`` operations (respectively) as described in the specification." +msgstr "" +"``%`` 和 ``//`` 运算符实现了 ``remainder`` 和 ``divide-integer`` 操作(分别),如规范中所述。" + +#: ../../library/decimal.rst:436 +msgid "" +"Decimal objects cannot generally be combined with floats or instances of " +":class:`fractions.Fraction` in arithmetic operations: an attempt to add a " +":class:`Decimal` to a :class:`float`, for example, will raise a " +":exc:`TypeError`. However, it is possible to use Python's comparison " +"operators to compare a :class:`Decimal` instance ``x`` with another number " +"``y``. This avoids confusing results when doing equality comparisons " +"between numbers of different types." +msgstr "" +"十进制对象通常不能与浮点数或 :class:`fractions.Fraction` 实例在算术运算中结合使用:例如,尝试将 " +":class:`Decimal` 加到 :class:`float` ,将引发 :exc:`TypeError`。 但是,可以使用 Python " +"的比较运算符来比较 :class:`Decimal` 实例 ``x`` 和另一个数字 ``y`` 。 " +"这样可以避免在对不同类型的数字进行相等比较时混淆结果。" + +#: ../../library/decimal.rst:444 +msgid "" +"Mixed-type comparisons between :class:`Decimal` instances and other numeric " +"types are now fully supported." +msgstr "现在完全支持 :class:`Decimal` 实例和其他数字类型之间的混合类型比较。" + +#: ../../library/decimal.rst:448 +msgid "" +"In addition to the standard numeric properties, decimal floating point " +"objects also have a number of specialized methods:" +msgstr "除了标准的数字属性,十进制浮点对象还有许多专门的方法:" + +#: ../../library/decimal.rst:454 +msgid "" +"Return the adjusted exponent after shifting out the coefficient's rightmost " +"digits until only the lead digit remains: ``Decimal('321e+5').adjusted()`` " +"returns seven. Used for determining the position of the most significant " +"digit with respect to the decimal point." +msgstr "" +"在移出系数最右边的数字之后返回调整后的指数,直到只剩下前导数字:``Decimal('321e+5').adjusted()`` 返回 7 。 " +"用于确定最高有效位相对于小数点的位置。" + +#: ../../library/decimal.rst:461 +msgid "" +"Return a pair ``(n, d)`` of integers that represent the given " +":class:`Decimal` instance as a fraction, in lowest terms and with a positive" +" denominator::" +msgstr "返回一对 ``(n, d)`` 整数,表示给定的 :class:`Decimal` 实例作为分数、最简形式项并带有正分母::" + +#: ../../library/decimal.rst:468 +msgid "" +"The conversion is exact. Raise OverflowError on infinities and ValueError " +"on NaNs." +msgstr "转换是精确的。 在 Infinity 上引发 OverflowError ,在 NaN 上引起 ValueError 。" + +#: ../../library/decimal.rst:475 +msgid "" +"Return a :term:`named tuple` representation of the number: " +"``DecimalTuple(sign, digits, exponent)``." +msgstr "" +"返回一个 :term:`named tuple` 表示的数字: ``DecimalTuple(sign, digits, exponent)``。" + +#: ../../library/decimal.rst:481 +msgid "" +"Return the canonical encoding of the argument. Currently, the encoding of a" +" :class:`Decimal` instance is always canonical, so this operation returns " +"its argument unchanged." +msgstr "返回参数的规范编码。 目前,一个 :class:`Decimal` 实例的编码始终是规范的,因此该操作返回其参数不变。" + +#: ../../library/decimal.rst:487 +msgid "" +"Compare the values of two Decimal instances. :meth:`compare` returns a " +"Decimal instance, and if either operand is a NaN then the result is a NaN::" +msgstr "" +"比较两个 Decimal 实例的值。 :meth:`compare` 返回一个 Decimal 实例,如果任一操作数是 NaN ,那么结果是 NaN " +"::" + +#: ../../library/decimal.rst:498 +msgid "" +"This operation is identical to the :meth:`compare` method, except that all " +"NaNs signal. That is, if neither operand is a signaling NaN then any quiet " +"NaN operand is treated as though it were a signaling NaN." +msgstr "" +"除了所有 NaN 信号之外,此操作与 :meth:`compare` 方法相同。 也就是说,如果两个操作数都不是信令NaN,那么任何静默的 NaN " +"操作数都被视为信令NaN。" + +#: ../../library/decimal.rst:504 +msgid "" +"Compare two operands using their abstract representation rather than their " +"numerical value. Similar to the :meth:`compare` method, but the result " +"gives a total ordering on :class:`Decimal` instances. Two :class:`Decimal` " +"instances with the same numeric value but different representations compare " +"unequal in this ordering:" +msgstr "" +"使用它们的抽象表示而不是它们的数值来比较两个操作数。 类似于 :meth:`compare` 方法,但结果给出了一个总排序 " +":class:`Decimal` 实例。 两个 :class:`Decimal` 实例具有相同的数值但不同的表示形式在此排序中比较不相等:" + +#: ../../library/decimal.rst:513 +msgid "" +"Quiet and signaling NaNs are also included in the total ordering. The " +"result of this function is ``Decimal('0')`` if both operands have the same " +"representation, ``Decimal('-1')`` if the first operand is lower in the total" +" order than the second, and ``Decimal('1')`` if the first operand is higher " +"in the total order than the second operand. See the specification for " +"details of the total order." +msgstr "" +"静默和发出信号的 NaN 也包括在总排序中。 这个函数的结果是 ``Decimal('0')`` 如果两个操作数具有相同的表示,或是 " +"``Decimal('-1')`` 如果第一个操作数的总顺序低于第二个操作数,或是 ``Decimal('1')`` " +"如果第一个操作数在总顺序中高于第二个操作数。 有关总排序的详细信息,请参阅规范。" + +#: ../../library/decimal.rst:520 ../../library/decimal.rst:531 +#: ../../library/decimal.rst:559 ../../library/decimal.rst:834 +msgid "" +"This operation is unaffected by context and is quiet: no flags are changed " +"and no rounding is performed. As an exception, the C version may raise " +"InvalidOperation if the second operand cannot be converted exactly." +msgstr "" +"此操作不受上下文影响且静默:不更改任何标志且不执行舍入。 作为例外,如果无法准确转换第二个操作数,则C版本可能会引发InvalidOperation。" + +#: ../../library/decimal.rst:526 +msgid "" +"Compare two operands using their abstract representation rather than their " +"value as in :meth:`compare_total`, but ignoring the sign of each operand. " +"``x.compare_total_mag(y)`` is equivalent to " +"``x.copy_abs().compare_total(y.copy_abs())``." +msgstr "" +"比较两个操作数使用它们的抽象表示而不是它们的值,如 :meth:`compare_total`,但忽略每个操作数的符号。 " +"``x.compare_total_mag(y)`` 相当于 ``x.copy_abs().compare_total(y.copy_abs())``。" + +#: ../../library/decimal.rst:537 +msgid "" +"Just returns self, this method is only to comply with the Decimal " +"Specification." +msgstr "只返回self,这种方法只符合 Decimal 规范。" + +#: ../../library/decimal.rst:542 +msgid "" +"Return the absolute value of the argument. This operation is unaffected by " +"the context and is quiet: no flags are changed and no rounding is performed." +msgstr "返回参数的绝对值。 此操作不受上下文影响并且是静默的:没有更改标志且不执行舍入。" + +#: ../../library/decimal.rst:548 +msgid "" +"Return the negation of the argument. This operation is unaffected by the " +"context and is quiet: no flags are changed and no rounding is performed." +msgstr "回到参数的否定。 此操作不受上下文影响并且是静默的:没有标志更改且不执行舍入。" + +#: ../../library/decimal.rst:553 +msgid "" +"Return a copy of the first operand with the sign set to be the same as the " +"sign of the second operand. For example:" +msgstr "返回第一个操作数的副本,其符号设置为与第二个操作数的符号相同。 例如:" + +#: ../../library/decimal.rst:565 +msgid "" +"Return the value of the (natural) exponential function ``e**x`` at the given" +" number. The result is correctly rounded using the :const:`ROUND_HALF_EVEN`" +" rounding mode." +msgstr "返回给定数字的(自然)指数函数``e**x``的值。结果使用 :const:`ROUND_HALF_EVEN` 舍入模式正确舍入。" + +#: ../../library/decimal.rst:576 +msgid "Classmethod that converts a float to a decimal number, exactly." +msgstr "将浮点数转换为十进制数的类方法。" + +#: ../../library/decimal.rst:578 +msgid "" +"Note `Decimal.from_float(0.1)` is not the same as `Decimal('0.1')`. Since " +"0.1 is not exactly representable in binary floating point, the value is " +"stored as the nearest representable value which is `0x1.999999999999ap-4`. " +"That equivalent value in decimal is " +"`0.1000000000000000055511151231257827021181583404541015625`." +msgstr "" +"注意, `Decimal.from_float(0.1)` 与 `Decimal('0.1')` 不同。 由于 0.1 " +"在二进制浮点中不能精确表示,因此该值存储为最接近的可表示值,即 `0x1.999999999999ap-4` 。 " +"十进制的等效值是`0.1000000000000000055511151231257827021181583404541015625`。" + +#: ../../library/decimal.rst:584 +msgid "" +"From Python 3.2 onwards, a :class:`Decimal` instance can also be constructed" +" directly from a :class:`float`." +msgstr "从 Python 3.2 开始,:class:`Decimal` 实例也可以直接从 :class:`float` 构造。" + +#: ../../library/decimal.rst:602 +msgid "" +"Fused multiply-add. Return self*other+third with no rounding of the " +"intermediate product self*other." +msgstr "混合乘法加法。 返回 self*other+third ,中间乘积 self*other 没有舍入。" + +#: ../../library/decimal.rst:610 +msgid "" +"Return :const:`True` if the argument is canonical and :const:`False` " +"otherwise. Currently, a :class:`Decimal` instance is always canonical, so " +"this operation always returns :const:`True`." +msgstr "" +"如果参数是规范的,则为返回 :const:`True`,否则为 :const:`False` 。 目前,:class:`Decimal` " +"实例总是规范的,所以这个操作总是返回 :const:`True` 。" + +#: ../../library/decimal.rst:616 +msgid "" +"Return :const:`True` if the argument is a finite number, and :const:`False` " +"if the argument is an infinity or a NaN." +msgstr "如果参数是一个有限的数,则返回为 :const:`True` ;如果参数为无穷大或 NaN ,则返回为 :const:`False`。" + +#: ../../library/decimal.rst:621 +msgid "" +"Return :const:`True` if the argument is either positive or negative infinity" +" and :const:`False` otherwise." +msgstr "如果参数为正负无穷大,则返回为 :const:`True` ,否则为 :const:`False` 。" + +#: ../../library/decimal.rst:626 +msgid "" +"Return :const:`True` if the argument is a (quiet or signaling) NaN and " +":const:`False` otherwise." +msgstr "如果参数为 NaN (无论是否静默),则返回为 :const:`True` ,否则为 :const:`False` 。" + +#: ../../library/decimal.rst:631 +msgid "" +"Return :const:`True` if the argument is a *normal* finite number. Return " +":const:`False` if the argument is zero, subnormal, infinite or a NaN." +msgstr "" +"如果参数是一个 *标准的* 有限数则返回 :const:`True`。 如果参数为零、次标准数、无穷大或 NaN 则返回 :const:`False`。" + +#: ../../library/decimal.rst:636 +msgid "" +"Return :const:`True` if the argument is a quiet NaN, and :const:`False` " +"otherwise." +msgstr "如果参数为静默 NaN,返回 :const:`True`,否则返回 :const:`False`。" + +#: ../../library/decimal.rst:641 +msgid "" +"Return :const:`True` if the argument has a negative sign and :const:`False` " +"otherwise. Note that zeros and NaNs can both carry signs." +msgstr "如果参数带有负号,则返回为 :const:`True`,否则返回 :const:`False`。注意,0 和 NaN 都可带有符号。" + +#: ../../library/decimal.rst:646 +msgid "" +"Return :const:`True` if the argument is a signaling NaN and :const:`False` " +"otherwise." +msgstr "如果参数为显式 NaN,则返回 :const:`True`,否则返回 :const:`False`。" + +#: ../../library/decimal.rst:651 +msgid "" +"Return :const:`True` if the argument is subnormal, and :const:`False` " +"otherwise." +msgstr "如果参数为次标准数,则返回 :const:`True`,否则返回 :const:`False`。" + +#: ../../library/decimal.rst:656 +msgid "" +"Return :const:`True` if the argument is a (positive or negative) zero and " +":const:`False` otherwise." +msgstr "如果参数是0(正负皆可),则返回 :const:`True`,否则返回 :const:`False`。" + +#: ../../library/decimal.rst:661 +msgid "" +"Return the natural (base e) logarithm of the operand. The result is " +"correctly rounded using the :const:`ROUND_HALF_EVEN` rounding mode." +msgstr "返回操作数的自然对数(以 e 为底)。结果是使用 :const:`ROUND_HALF_EVEN` 舍入模式正确舍入的。" + +#: ../../library/decimal.rst:666 +msgid "" +"Return the base ten logarithm of the operand. The result is correctly " +"rounded using the :const:`ROUND_HALF_EVEN` rounding mode." +msgstr "返回操作数的以十为底的对数。结果是使用 :const:`ROUND_HALF_EVEN` 舍入模式正确舍入的。" + +#: ../../library/decimal.rst:671 +msgid "" +"For a nonzero number, return the adjusted exponent of its operand as a " +":class:`Decimal` instance. If the operand is a zero then " +"``Decimal('-Infinity')`` is returned and the :const:`DivisionByZero` flag is" +" raised. If the operand is an infinity then ``Decimal('Infinity')`` is " +"returned." +msgstr "" +"对于一个非零数,返回其运算数的调整后指数作为一个 :class:`Decimal` 实例。 如果运算数为零将返回 " +"``Decimal('-Infinity')`` 并且产生 the :const:`DivisionByZero` 标志。如果运算数是无限大则返回 " +"``Decimal('Infinity')`` 。" + +#: ../../library/decimal.rst:679 +msgid "" +":meth:`logical_and` is a logical operation which takes two *logical " +"operands* (see :ref:`logical_operands_label`). The result is the digit-wise" +" ``and`` of the two operands." +msgstr "" +":meth:`logical_and` 是需要两个 *逻辑运算数* 的逻辑运算(参考 :ref:`logical_operands_label` " +")。按位输出两运算数的 ``and`` 运算的结果。" + +#: ../../library/decimal.rst:685 +msgid "" +":meth:`logical_invert` is a logical operation. The result is the digit-wise" +" inversion of the operand." +msgstr ":meth:`logical_invert` 是一个逻辑运算。结果是操作数的按位求反。" + +#: ../../library/decimal.rst:690 +msgid "" +":meth:`logical_or` is a logical operation which takes two *logical operands*" +" (see :ref:`logical_operands_label`). The result is the digit-wise ``or`` " +"of the two operands." +msgstr "" +":meth:`logical_or` 是需要两个 *logical operands* 的逻辑运算(请参阅 " +":ref:`logical_operands_label` )。结果是两个运算数的按位的 ``or`` 运算。" + +#: ../../library/decimal.rst:696 +msgid "" +":meth:`logical_xor` is a logical operation which takes two *logical " +"operands* (see :ref:`logical_operands_label`). The result is the digit-wise" +" exclusive or of the two operands." +msgstr "" +":meth:`logical_xor` 是需要两个 *逻辑运算数* 的逻辑运算(参考 :ref:`logical_operands_label` " +")。结果是按位输出的两运算数的异或运算。" + +#: ../../library/decimal.rst:702 +msgid "" +"Like ``max(self, other)`` except that the context rounding rule is applied " +"before returning and that :const:`NaN` values are either signaled or ignored" +" (depending on the context and whether they are signaling or quiet)." +msgstr "" +"像 ``max(self, other)`` 一样,除了在返回之前应用上下文舍入规则并且用信号通知或忽略 :const:`NaN` " +"值(取决于上下文以及它们是发信号还是安静)。" + +#: ../../library/decimal.rst:709 +msgid "" +"Similar to the :meth:`.max` method, but the comparison is done using the " +"absolute values of the operands." +msgstr "与 :meth:`.max` 方法相似,但是操作数使用绝对值完成比较。" + +#: ../../library/decimal.rst:714 +msgid "" +"Like ``min(self, other)`` except that the context rounding rule is applied " +"before returning and that :const:`NaN` values are either signaled or ignored" +" (depending on the context and whether they are signaling or quiet)." +msgstr "" +"像 ``min(self, other)`` 一样,除了在返回之前应用上下文舍入规则并且用信号通知或忽略 :const:`NaN` " +"值(取决于上下文以及它们是发信号还是安静)。" + +#: ../../library/decimal.rst:721 +msgid "" +"Similar to the :meth:`.min` method, but the comparison is done using the " +"absolute values of the operands." +msgstr "与 :meth:`.min` 方法相似,但是操作数使用绝对值完成比较。" + +#: ../../library/decimal.rst:726 +msgid "" +"Return the largest number representable in the given context (or in the " +"current thread's context if no context is given) that is smaller than the " +"given operand." +msgstr "返回小于给定操作数的上下文中可表示的最大数字(或者当前线程的上下文中的可表示的最大数字如果没有给定上下文)。" + +#: ../../library/decimal.rst:732 +msgid "" +"Return the smallest number representable in the given context (or in the " +"current thread's context if no context is given) that is larger than the " +"given operand." +msgstr "返回大于给定操作数的上下文中可表示的最小数字(或者当前线程的上下文中的可表示的最小数字如果没有给定上下文)。" + +#: ../../library/decimal.rst:738 +msgid "" +"If the two operands are unequal, return the number closest to the first " +"operand in the direction of the second operand. If both operands are " +"numerically equal, return a copy of the first operand with the sign set to " +"be the same as the sign of the second operand." +msgstr "" +"如果两运算数不相等,返回在第二个操作数的方向上最接近第一个操作数的数。如果两操作数数值上相等,返回将符号设置为与第二个运算数相同的第一个运算数的拷贝。" + +#: ../../library/decimal.rst:745 +msgid "" +"Normalize the number by stripping the rightmost trailing zeros and " +"converting any result equal to :const:`Decimal('0')` to " +":const:`Decimal('0e0')`. Used for producing canonical values for attributes " +"of an equivalence class. For example, ``Decimal('32.100')`` and " +"``Decimal('0.321000e+2')`` both normalize to the equivalent value " +"``Decimal('32.1')``." +msgstr "" +"通过去除尾随的零并将所有结果等于 :const:`Decimal('0')` 的转化为 :const:`Decimal('0e0')` " +"来标准化数字。用于为等效类的属性生成规范值。比如, ``Decimal('32.100')`` 和 ``Decimal('0.321000e+2')``" +" 都被标准化为相同的值 ``Decimal('32.1')``。" + +#: ../../library/decimal.rst:754 +msgid "" +"Return a string describing the *class* of the operand. The returned value " +"is one of the following ten strings." +msgstr "返回一个字符串描述运算数的 *class* 。返回值是以下十个字符串中的一个。" + +#: ../../library/decimal.rst:757 +msgid "``\"-Infinity\"``, indicating that the operand is negative infinity." +msgstr "``\"-Infinity\"`` ,指示运算数为负无穷大。" + +#: ../../library/decimal.rst:758 +msgid "``\"-Normal\"``, indicating that the operand is a negative normal number." +msgstr "``\"-Normal\"`` ,指示该运算数是负正常数字。" + +#: ../../library/decimal.rst:759 +msgid "``\"-Subnormal\"``, indicating that the operand is negative and subnormal." +msgstr "``\"-Subnormal\"`` ,指示该运算数是负的次标准数。" + +#: ../../library/decimal.rst:760 +msgid "``\"-Zero\"``, indicating that the operand is a negative zero." +msgstr "``\"-Zero\"`` ,指示该运算数是负零。" + +#: ../../library/decimal.rst:761 +msgid "``\"+Zero\"``, indicating that the operand is a positive zero." +msgstr "``\"-Zero\"`` ,指示该运算数是正零。" + +#: ../../library/decimal.rst:762 +msgid "``\"+Subnormal\"``, indicating that the operand is positive and subnormal." +msgstr "``\"+Subnormal\"`` ,指示该运算数是正的次标准数。" + +#: ../../library/decimal.rst:763 +msgid "``\"+Normal\"``, indicating that the operand is a positive normal number." +msgstr "``\"+Normal\"`` ,指示该运算数是正的标准数。" + +#: ../../library/decimal.rst:764 +msgid "``\"+Infinity\"``, indicating that the operand is positive infinity." +msgstr "``\"+Infinity\"`` ,指示该运算数是正无穷。" + +#: ../../library/decimal.rst:765 +msgid "``\"NaN\"``, indicating that the operand is a quiet NaN (Not a Number)." +msgstr "``\"NaN\"`` ,指示该运算数是肃静 NaN (非数字)。" + +#: ../../library/decimal.rst:766 +msgid "``\"sNaN\"``, indicating that the operand is a signaling NaN." +msgstr "``\"sNaN\"`` ,指示该运算数是信号 NaN 。" + +#: ../../library/decimal.rst:770 +msgid "" +"Return a value equal to the first operand after rounding and having the " +"exponent of the second operand." +msgstr "返回的值等于舍入后的第一个运算数并且具有第二个操作数的指数。" + +#: ../../library/decimal.rst:776 +msgid "" +"Unlike other operations, if the length of the coefficient after the quantize" +" operation would be greater than precision, then an " +":const:`InvalidOperation` is signaled. This guarantees that, unless there is" +" an error condition, the quantized exponent is always equal to that of the " +"right-hand operand." +msgstr "" +"与其他运算不同,如果量化运算后的系数长度大于精度,那么会发出一个 :const:`InvalidOperation` " +"信号。这保证了除非有一个错误情况,量化指数恒等于右手运算数的指数。" + +#: ../../library/decimal.rst:782 +msgid "" +"Also unlike other operations, quantize never signals Underflow, even if the " +"result is subnormal and inexact." +msgstr "与其他运算不同,量化永不信号下溢,即使结果不正常且不精确。" + +#: ../../library/decimal.rst:785 +msgid "" +"If the exponent of the second operand is larger than that of the first then " +"rounding may be necessary. In this case, the rounding mode is determined by" +" the ``rounding`` argument if given, else by the given ``context`` argument;" +" if neither argument is given the rounding mode of the current thread's " +"context is used." +msgstr "" +"如果第二个运算数的指数大于第一个运算数的指数那或许需要舍入。在这种情况下,舍入模式由给定 ``rounding`` 参数决定,其余的由给定 " +"``context`` 参数决定;如果参数都未给定,使用当前线程上下文的舍入模式。" + +#: ../../library/decimal.rst:791 +msgid "" +"An error is returned whenever the resulting exponent is greater than " +":attr:`Emax` or less than :attr:`Etiny`." +msgstr "每当结果的指数大于 :attr:`Emax` 或小于 :attr:`Etiny` 就会返回错误。" + +#: ../../library/decimal.rst:796 +msgid "" +"Return ``Decimal(10)``, the radix (base) in which the :class:`Decimal` class" +" does all its arithmetic. Included for compatibility with the " +"specification." +msgstr "" +"返回 ``Decimal(10)``,即 :class:`Decimal` 类进行所有算术运算所用的数制(基数)。 " +"这是为保持与规范描述的兼容性而加入的。" + +#: ../../library/decimal.rst:802 +msgid "" +"Return the remainder from dividing *self* by *other*. This differs from " +"``self % other`` in that the sign of the remainder is chosen so as to " +"minimize its absolute value. More precisely, the return value is ``self - n" +" * other`` where ``n`` is the integer nearest to the exact value of ``self /" +" other``, and if two integers are equally near then the even one is chosen." +msgstr "" +"返回 *self* 除以 *other* 的余数。 这与 ``self % other`` 的区别在于所选择的余数要使其绝对值最小化。 " +"更准确地说,返回值为 ``self - n * other`` 其中 ``n`` 是最接近 ``self / other`` " +"的实际值的整数,并且如果两个整数与实际值的差相等则会选择其中的偶数。" + +#: ../../library/decimal.rst:809 +msgid "If the result is zero then its sign will be the sign of *self*." +msgstr "如果结果为零则其符号将为 *self* 的符号。" + +#: ../../library/decimal.rst:820 +msgid "" +"Return the result of rotating the digits of the first operand by an amount " +"specified by the second operand. The second operand must be an integer in " +"the range -precision through precision. The absolute value of the second " +"operand gives the number of places to rotate. If the second operand is " +"positive then rotation is to the left; otherwise rotation is to the right. " +"The coefficient of the first operand is padded on the left with zeros to " +"length precision if necessary. The sign and exponent of the first operand " +"are unchanged." +msgstr "" +"返回对第一个操作数的数码按第二个操作数所指定的数量进行轮转的结果。 第二个操作数必须为 -precision 至 precision 精度范围内的整数。" +" 第二个操作数的绝对值给出要轮转的位数。 如果第二个操作数为正值则向左轮转;否则向右轮转。 如有必要第一个操作数的系数会在左侧填充零以达到 " +"precision 所指定的长度。 第一个操作数的符号和指数保持不变。" + +#: ../../library/decimal.rst:831 +msgid "" +"Test whether self and other have the same exponent or whether both are " +":const:`NaN`." +msgstr "检测自身与 other 是否具有相同的指数或是否均为 :const:`NaN`。" + +#: ../../library/decimal.rst:840 +msgid "" +"Return the first operand with exponent adjusted by the second. Equivalently," +" return the first operand multiplied by ``10**other``. The second operand " +"must be an integer." +msgstr "" +"返回第一个操作数使用第二个操作数对指数进行调整的结果。 等价于返回第一个操作数乘以 ``10**other`` 的结果。 第二个操作数必须为整数。" + +#: ../../library/decimal.rst:846 +msgid "" +"Return the result of shifting the digits of the first operand by an amount " +"specified by the second operand. The second operand must be an integer in " +"the range -precision through precision. The absolute value of the second " +"operand gives the number of places to shift. If the second operand is " +"positive then the shift is to the left; otherwise the shift is to the right." +" Digits shifted into the coefficient are zeros. The sign and exponent of " +"the first operand are unchanged." +msgstr "" +"返回第一个操作数的数码按第二个操作数所指定的数量进行移位的结果。 第二个操作数必须为 -precision 至 precision 范围内的整数。 " +"第二个操作数的绝对值给出要移动的位数。 如果第二个操作数为正值则向左移位;否则向右移位。 移入系数的数码为零。 第一个操作数的符号和指数保持不变。" + +#: ../../library/decimal.rst:856 +msgid "Return the square root of the argument to full precision." +msgstr "返回参数的平方根精确到完整精度。" + +#: ../../library/decimal.rst:861 ../../library/decimal.rst:1440 +msgid "" +"Convert to a string, using engineering notation if an exponent is needed." +msgstr "转换为字符串,如果需要指数则会使用工程标注法。" + +#: ../../library/decimal.rst:863 ../../library/decimal.rst:1442 +msgid "" +"Engineering notation has an exponent which is a multiple of 3. This can " +"leave up to 3 digits to the left of the decimal place and may require the " +"addition of either one or two trailing zeros." +msgstr "工程标注法的指数是 3 的倍数。 这会在十进制位的左边保留至多 3 个数码,并可能要求添加一至两个末尾零。" + +#: ../../library/decimal.rst:867 +msgid "" +"For example, this converts ``Decimal('123E+1')`` to ``Decimal('1.23E+3')``." +msgstr "例如,此方法会将 ``Decimal('123E+1')`` 转换为 ``Decimal('1.23E+3')``。" + +#: ../../library/decimal.rst:871 +msgid "" +"Identical to the :meth:`to_integral_value` method. The ``to_integral`` name" +" has been kept for compatibility with older versions." +msgstr "与 :meth:`to_integral_value` 方法相同。 保留 ``to_integral`` 名称是为了与旧版本兼容。" + +#: ../../library/decimal.rst:876 +msgid "" +"Round to the nearest integer, signaling :const:`Inexact` or :const:`Rounded`" +" as appropriate if rounding occurs. The rounding mode is determined by the " +"``rounding`` parameter if given, else by the given ``context``. If neither " +"parameter is given then the rounding mode of the current context is used." +msgstr "" +"舍入到最接近的整数,发出信号 :const:`Inexact` 或者如果发生舍入则相应地发出信号 :const:`Rounded`。 如果给出 " +"``rounding`` 形参则由其确定舍入模式,否则由给定的 ``context`` 来确定。 如果没有给定任何形参则会使用当前上下文的舍入模式。" + +#: ../../library/decimal.rst:884 +msgid "" +"Round to the nearest integer without signaling :const:`Inexact` or " +":const:`Rounded`. If given, applies *rounding*; otherwise, uses the " +"rounding method in either the supplied *context* or the current context." +msgstr "" +"舍入到最接近的整数而不发出 :const:`Inexact` 或 :const:`Rounded` 信号。 如果给出 *rounding* " +"则会应用其所指定的舍入模式;否则使用所提供的 *context* 或当前上下文的舍入方法。" + +#: ../../library/decimal.rst:892 +msgid "Logical operands" +msgstr "逻辑操作数" + +#: ../../library/decimal.rst:894 +msgid "" +"The :meth:`logical_and`, :meth:`logical_invert`, :meth:`logical_or`, and " +":meth:`logical_xor` methods expect their arguments to be *logical operands*." +" A *logical operand* is a :class:`Decimal` instance whose exponent and sign" +" are both zero, and whose digits are all either :const:`0` or :const:`1`." +msgstr "" +":meth:`logical_and`, :meth:`logical_invert`, :meth:`logical_or` 和 " +":meth:`logical_xor` 方法期望其参数为 *逻辑操作数*。 *逻辑操作数* 是指数位与符号位均为零的 :class:`Decimal` " +"实例,并且其数字位均为 :const:`0` 或 :const:`1`。" + +#: ../../library/decimal.rst:906 +msgid "Context objects" +msgstr "上下文对象" + +#: ../../library/decimal.rst:908 +msgid "" +"Contexts are environments for arithmetic operations. They govern precision," +" set rules for rounding, determine which signals are treated as exceptions, " +"and limit the range for exponents." +msgstr "上下文是算术运算所在的环境。 它们管理精度、设置舍入规则、确定将哪些信号视为异常,并限制指数的范围。" + +#: ../../library/decimal.rst:912 +msgid "" +"Each thread has its own current context which is accessed or changed using " +"the :func:`getcontext` and :func:`setcontext` functions:" +msgstr "每个线程都有自己的当前上下文,可使用 :func:`getcontext` 和 :func:`setcontext` 函数来读取或修改:" + +#: ../../library/decimal.rst:918 +msgid "Return the current context for the active thread." +msgstr "返回活动线程的当前上下文。" + +#: ../../library/decimal.rst:923 +msgid "Set the current context for the active thread to *c*." +msgstr "将活动线程的当前上下文设为 *c*。" + +#: ../../library/decimal.rst:925 +msgid "" +"You can also use the :keyword:`with` statement and the :func:`localcontext` " +"function to temporarily change the active context." +msgstr "你也可以使用 :keyword:`with` 语句和 :func:`localcontext` 函数来临时改变活动上下文。" + +#: ../../library/decimal.rst:930 +msgid "" +"Return a context manager that will set the current context for the active " +"thread to a copy of *ctx* on entry to the with-statement and restore the " +"previous context when exiting the with-statement. If no context is " +"specified, a copy of the current context is used." +msgstr "" +"返回一个上下文管理器,它将在进入 with 语句时将活动线程的当前上下文设为 *ctx* 的一个副本并在退出 with 语句时恢复之前的上下文。 " +"如果未指定上下文,则会使用当前上下文的一个副本。" + +#: ../../library/decimal.rst:935 +msgid "" +"For example, the following code sets the current decimal precision to 42 " +"places, performs a calculation, and then automatically restores the previous" +" context::" +msgstr "例如,以下代码会将当前 decimal 精度设为 42 位,执行一个运算,然后自动恢复之前的上下文::" + +#: ../../library/decimal.rst:945 +msgid "" +"New contexts can also be created using the :class:`Context` constructor " +"described below. In addition, the module provides three pre-made contexts:" +msgstr "新的上下文也可使用下述的 :class:`Context` 构造器来创建。 此外,模块还提供了三种预设的上下文:" + +#: ../../library/decimal.rst:951 +msgid "" +"This is a standard context defined by the General Decimal Arithmetic " +"Specification. Precision is set to nine. Rounding is set to " +":const:`ROUND_HALF_UP`. All flags are cleared. All traps are enabled " +"(treated as exceptions) except :const:`Inexact`, :const:`Rounded`, and " +":const:`Subnormal`." +msgstr "" +"这是由通用十进制算术规范描述所定义的标准上下文。 精度设为九。 舍入设为 :const:`ROUND_HALF_UP`。 清除所有旗标。 " +"启用所有陷阱(视为异常),但 :const:`Inexact`, :const:`Rounded` 和 :const:`Subnormal` 除外。" + +#: ../../library/decimal.rst:957 +msgid "" +"Because many of the traps are enabled, this context is useful for debugging." +msgstr "由于启用了许多陷阱,此上下文适用于进行调试。" + +#: ../../library/decimal.rst:962 +msgid "" +"This is a standard context defined by the General Decimal Arithmetic " +"Specification. Precision is set to nine. Rounding is set to " +":const:`ROUND_HALF_EVEN`. All flags are cleared. No traps are enabled (so " +"that exceptions are not raised during computations)." +msgstr "" +"这是由通用十进制算术规范描述所定义的标准上下文。 精度设为九。 舍入设为 :const:`ROUND_HALF_EVEN`。 清除所有旗标。 " +"不启用任何陷阱(因此在计算期间不会引发异常)。" + +#: ../../library/decimal.rst:967 +msgid "" +"Because the traps are disabled, this context is useful for applications that" +" prefer to have result value of :const:`NaN` or :const:`Infinity` instead of" +" raising exceptions. This allows an application to complete a run in the " +"presence of conditions that would otherwise halt the program." +msgstr "" +"由于禁用了陷阱,此上下文适用于希望结果值为 :const:`NaN` 或 :const:`Infinity` 而不是引发异常的应用。 " +"这允许应用在出现当其他情况下会中止程序的条件时仍能完成运行。" + +#: ../../library/decimal.rst:975 +msgid "" +"This context is used by the :class:`Context` constructor as a prototype for " +"new contexts. Changing a field (such a precision) has the effect of " +"changing the default for new contexts created by the :class:`Context` " +"constructor." +msgstr "" +"此上下文被 :class:`Context` 构造器用作新上下文的原型。 改变一个字段(例如精度)的效果将是改变 :class:`Context` " +"构造器所创建的新上下文的默认值。" + +#: ../../library/decimal.rst:979 +msgid "" +"This context is most useful in multi-threaded environments. Changing one of" +" the fields before threads are started has the effect of setting system-wide" +" defaults. Changing the fields after threads have started is not " +"recommended as it would require thread synchronization to prevent race " +"conditions." +msgstr "" +"此上下文最适用于多线程环境。 在线程开始前改变一个字段具有设置全系统默认值的效果。 不推荐在线程开始后改变字段,因为这会要求线程同步避免竞争条件。" + +#: ../../library/decimal.rst:984 +msgid "" +"In single threaded environments, it is preferable to not use this context at" +" all. Instead, simply create contexts explicitly as described below." +msgstr "在单线程环境中,最好完全不使用此上下文。 而是简单地电显式创建上下文,具体如下所述。" + +#: ../../library/decimal.rst:987 +msgid "" +"The default values are :attr:`prec`\\ =\\ :const:`28`, :attr:`rounding`\\ " +"=\\ :const:`ROUND_HALF_EVEN`, and enabled traps for :class:`Overflow`, " +":class:`InvalidOperation`, and :class:`DivisionByZero`." +msgstr "" +"默认值为 :attr:`prec`\\ =\\ :const:`28`, :attr:`rounding`\\ =\\ " +":const:`ROUND_HALF_EVEN`,并为 :class:`Overflow`, :class:`InvalidOperation` 和 " +":class:`DivisionByZero` 启用陷阱。" + +#: ../../library/decimal.rst:992 +msgid "" +"In addition to the three supplied contexts, new contexts can be created with" +" the :class:`Context` constructor." +msgstr "在已提供的三种上下文之外,还可以使用 :class:`Context` 构造器创建新的上下文。" + +#: ../../library/decimal.rst:998 +msgid "" +"Creates a new context. If a field is not specified or is :const:`None`, the" +" default values are copied from the :const:`DefaultContext`. If the *flags*" +" field is not specified or is :const:`None`, all flags are cleared." +msgstr "" +"创建一个新上下文。 如果某个字段未指定或为 :const:`None`,则从 :const:`DefaultContext` 拷贝默认值。 如果 " +"*flags* 字段未指定或为 :const:`None`,则清空所有旗标。" + +#: ../../library/decimal.rst:1002 +msgid "" +"*prec* is an integer in the range [:const:`1`, :const:`MAX_PREC`] that sets " +"the precision for arithmetic operations in the context." +msgstr "*prec* 为一个 [:const:`1`, :const:`MAX_PREC`] 范围内的整数,用于设置该上下文中算术运算的精度。" + +#: ../../library/decimal.rst:1005 +msgid "" +"The *rounding* option is one of the constants listed in the section " +"`Rounding Modes`_." +msgstr "*rounding* 选项应为 `Rounding Modes`_ 小节中列出的常量之一。" + +#: ../../library/decimal.rst:1008 +msgid "" +"The *traps* and *flags* fields list any signals to be set. Generally, new " +"contexts should only set traps and leave the flags clear." +msgstr "*traps* 和 *flags* 字段列出要设置的任何信号。 通常,新上下文应当只设置 traps 而让 flags 为空。" + +#: ../../library/decimal.rst:1011 +msgid "" +"The *Emin* and *Emax* fields are integers specifying the outer limits " +"allowable for exponents. *Emin* must be in the range [:const:`MIN_EMIN`, " +":const:`0`], *Emax* in the range [:const:`0`, :const:`MAX_EMAX`]." +msgstr "" +"*Emin* 和 *Emax* 字段给定指数所允许的外部上限。 *Emin* 必须在 [:const:`MIN_EMIN`, :const:`0`] " +"范围内,*Emax* 在 [:const:`0`, :const:`MAX_EMAX`] 范围内。" + +#: ../../library/decimal.rst:1015 +msgid "" +"The *capitals* field is either :const:`0` or :const:`1` (the default). If " +"set to :const:`1`, exponents are printed with a capital :const:`E`; " +"otherwise, a lowercase :const:`e` is used: :const:`Decimal('6.02e+23')`." +msgstr "" +"*capitals* 字段为 :const:`0` 或 :const:`1` (默认值)。 如果设为 :const:`1`,指数将附带打印大写的 " +":const:`E`;其他情况则将使用小写的 :const:`e`: :const:`Decimal('6.02e+23')`。" + +#: ../../library/decimal.rst:1019 +msgid "" +"The *clamp* field is either :const:`0` (the default) or :const:`1`. If set " +"to :const:`1`, the exponent ``e`` of a :class:`Decimal` instance " +"representable in this context is strictly limited to the range ``Emin - prec" +" + 1 <= e <= Emax - prec + 1``. If *clamp* is :const:`0` then a weaker " +"condition holds: the adjusted exponent of the :class:`Decimal` instance is " +"at most ``Emax``. When *clamp* is :const:`1`, a large normal number will, " +"where possible, have its exponent reduced and a corresponding number of " +"zeros added to its coefficient, in order to fit the exponent constraints; " +"this preserves the value of the number but loses information about " +"significant trailing zeros. For example::" +msgstr "" +"*clamp* 字段为 :const:`0` (默认值) 或 :const:`1`。 如果设为 :const:`1`,则 " +":class:`Decimal` 实例的指数 ``e`` 的表示范围在此上下文中将严格限制为 ``Emin - prec + 1 <= e <= " +"Emax - prec + 1``。 如果 *clamp* 为 :const:`0` 则将适用较弱的条件: :class:`Decimal` " +"实例调整后的指数最大值为 ``Emax``。 当 *clamp* 为 :const:`1` " +"时,一个较大的普通数值将在可能的情况下减小其指数并为其系统添加相应数量的零,以便符合指数值限制;这可以保持数字值但会丢失有效末尾零的信息。 例如::" + +#: ../../library/decimal.rst:1034 +msgid "" +"A *clamp* value of :const:`1` allows compatibility with the fixed-width " +"decimal interchange formats specified in IEEE 754." +msgstr "*clamp* 值为 :const:`1` 时即允许与在 IEEE 754 中描述的固定宽度十进制交换格式保持兼容性。" + +#: ../../library/decimal.rst:1037 +msgid "" +"The :class:`Context` class defines several general purpose methods as well " +"as a large number of methods for doing arithmetic directly in a given " +"context. In addition, for each of the :class:`Decimal` methods described " +"above (with the exception of the :meth:`adjusted` and :meth:`as_tuple` " +"methods) there is a corresponding :class:`Context` method. For example, for" +" a :class:`Context` instance ``C`` and :class:`Decimal` instance ``x``, " +"``C.exp(x)`` is equivalent to ``x.exp(context=C)``. Each :class:`Context` " +"method accepts a Python integer (an instance of :class:`int`) anywhere that " +"a Decimal instance is accepted." +msgstr "" +":class:`Context` 类定义了几种通用方法以及大量直接在给定上下文中进行算术运算的方法。 此外,对于上述的每种 " +":class:`Decimal` 方法(不包括 :meth:`adjusted` 和 :meth:`as_tuple` 方法)都有一个相应的 " +":class:`Context` 方法。 例如,对于一个 :class:`Context` 的实例 ``C`` 和 :class:`Decimal` " +"的实例 ``x``,``C.exp(x)`` 就等价于 ``x.exp(context=C)``。 每个 :class:`Context` " +"方法都接受一个 Python 整数(即 :class:`int` 的实例)在任何接受 Decimal 的实例的地方使用。" + +#: ../../library/decimal.rst:1050 +msgid "Resets all of the flags to :const:`0`." +msgstr "将所有旗标重置为 :const:`0`。" + +#: ../../library/decimal.rst:1054 +msgid "Resets all of the traps to :const:`0`." +msgstr "将所有陷阱重置为零 :const:`0`。" + +#: ../../library/decimal.rst:1060 +msgid "Return a duplicate of the context." +msgstr "返回上下文的一个副本。" + +#: ../../library/decimal.rst:1064 +msgid "Return a copy of the Decimal instance num." +msgstr "返回 Decimal 实例 num 的一个副本。" + +#: ../../library/decimal.rst:1068 +msgid "" +"Creates a new Decimal instance from *num* but using *self* as context. " +"Unlike the :class:`Decimal` constructor, the context precision, rounding " +"method, flags, and traps are applied to the conversion." +msgstr "" +"基于 *num* 创建一个新 Decimal 实例但使用 *self* 作为上下文。 与 :class:`Decimal` " +"构造器不同,该上下文的精度、舍入方法、旗标和陷阱会被应用于转换过程。" + +#: ../../library/decimal.rst:1072 +msgid "" +"This is useful because constants are often given to a greater precision than" +" is needed by the application. Another benefit is that rounding immediately" +" eliminates unintended effects from digits beyond the current precision. In " +"the following example, using unrounded inputs means that adding zero to a " +"sum can change the result:" +msgstr "" +"此方法很有用处,因为常量往往被给予高于应用所需的精度。 另一个好处在于立即执行舍入可以消除超出当前精度的数位所导致的意外效果。 " +"在下面的示例中,使用未舍入的输入意味着在总和中添加零会改变结果:" + +#: ../../library/decimal.rst:1086 +msgid "" +"This method implements the to-number operation of the IBM specification. If " +"the argument is a string, no leading or trailing whitespace or underscores " +"are permitted." +msgstr "此方法实现了 IBM 规格描述中的转换为数字操作。 如果参数为字符串,则不允许有开头或末尾的空格或下划线。" + +#: ../../library/decimal.rst:1092 +msgid "" +"Creates a new Decimal instance from a float *f* but rounding using *self* as" +" the context. Unlike the :meth:`Decimal.from_float` class method, the " +"context precision, rounding method, flags, and traps are applied to the " +"conversion." +msgstr "" +"基于浮点数 *f* 创建一个新的 Decimal 实例,但会使用 *self* 作为上下文来执行舍入。 与 " +":meth:`Decimal.from_float` 类方法不同,上下文的精度、舍入方法、旗标和陷阱会应用到转换中。" + +#: ../../library/decimal.rst:1112 +msgid "" +"Returns a value equal to ``Emin - prec + 1`` which is the minimum exponent " +"value for subnormal results. When underflow occurs, the exponent is set to " +":const:`Etiny`." +msgstr "" +"返回一个等于 ``Emin - prec + 1`` 的值即次标准化结果中的最小指数值。 当发生向下溢出时,指数会设为 :const:`Etiny`。" + +#: ../../library/decimal.rst:1118 +msgid "Returns a value equal to ``Emax - prec + 1``." +msgstr "返回一个等于 ``Emax - prec + 1`` 的值。" + +#: ../../library/decimal.rst:1120 +msgid "" +"The usual approach to working with decimals is to create :class:`Decimal` " +"instances and then apply arithmetic operations which take place within the " +"current context for the active thread. An alternative approach is to use " +"context methods for calculating within a specific context. The methods are " +"similar to those for the :class:`Decimal` class and are only briefly " +"recounted here." +msgstr "" +"使用 decimal 的通常方式是创建 :class:`Decimal` 实例然后对其应用算术运算,这些运算发生在活动线程的当前上下文中。 " +"一种替代方式则是使用上下文的方法在特定上下文中进行计算。 这些方法类似于 :class:`Decimal` 类的方法,在此仅简单地重新列出。" + +#: ../../library/decimal.rst:1130 +msgid "Returns the absolute value of *x*." +msgstr "返回 *x* 的绝对值。" + +#: ../../library/decimal.rst:1135 +msgid "Return the sum of *x* and *y*." +msgstr "返回 *x* 与 *y* 的和。" + +#: ../../library/decimal.rst:1140 +msgid "Returns the same Decimal object *x*." +msgstr "返回相同的 Decimal 对象 *x*。" + +#: ../../library/decimal.rst:1145 +msgid "Compares *x* and *y* numerically." +msgstr "对 *x* 与 *y* 进行数值比较。" + +#: ../../library/decimal.rst:1150 +msgid "Compares the values of the two operands numerically." +msgstr "对两个操作数进行数值比较。" + +#: ../../library/decimal.rst:1155 +msgid "Compares two operands using their abstract representation." +msgstr "对两个操作数使用其抽象表示进行比较。" + +#: ../../library/decimal.rst:1160 +msgid "" +"Compares two operands using their abstract representation, ignoring sign." +msgstr "对两个操作数使用其抽象表示进行比较,忽略符号。" + +#: ../../library/decimal.rst:1165 +msgid "Returns a copy of *x* with the sign set to 0." +msgstr "返回 *x* 的副本,符号设为 0。" + +#: ../../library/decimal.rst:1170 +msgid "Returns a copy of *x* with the sign inverted." +msgstr "返回 *x* 的副本,符号取反。" + +#: ../../library/decimal.rst:1175 +msgid "Copies the sign from *y* to *x*." +msgstr "从 *y* 拷贝符号至 *x*。" + +#: ../../library/decimal.rst:1180 +msgid "Return *x* divided by *y*." +msgstr "返回 *x* 除以 *y* 的结果。" + +#: ../../library/decimal.rst:1185 +msgid "Return *x* divided by *y*, truncated to an integer." +msgstr "返回 *x* 除以 *y* 的结果,截短为整数。" + +#: ../../library/decimal.rst:1190 +msgid "Divides two numbers and returns the integer part of the result." +msgstr "两个数字相除并返回结果的整数部分。" + +#: ../../library/decimal.rst:1195 +msgid "Returns `e ** x`." +msgstr "返回 `e ** x`。" + +#: ../../library/decimal.rst:1200 +msgid "Returns *x* multiplied by *y*, plus *z*." +msgstr "返回 *x* 乘以 *y* 再加 *z* 的结果。" + +#: ../../library/decimal.rst:1205 +msgid "Returns ``True`` if *x* is canonical; otherwise returns ``False``." +msgstr "如果 *x* 是规范的则返回 ``True``;否则返回 ``False``。" + +#: ../../library/decimal.rst:1210 +msgid "Returns ``True`` if *x* is finite; otherwise returns ``False``." +msgstr "如果 *x* 为有限的则返回``True``;否则返回 ``False``。" + +#: ../../library/decimal.rst:1215 +msgid "Returns ``True`` if *x* is infinite; otherwise returns ``False``." +msgstr "如果 *x* 是无限的则返回 ``True``;否则返回 ``False``。" + +#: ../../library/decimal.rst:1220 +msgid "" +"Returns ``True`` if *x* is a qNaN or sNaN; otherwise returns ``False``." +msgstr "如果 *x* 是 qNaN 或 sNaN 则返回 ``True``;否则返回 ``False``。" + +#: ../../library/decimal.rst:1225 +msgid "" +"Returns ``True`` if *x* is a normal number; otherwise returns ``False``." +msgstr "如果 *x* 是标准数则返回 ``True``;否则返回 ``False``。" + +#: ../../library/decimal.rst:1230 +msgid "Returns ``True`` if *x* is a quiet NaN; otherwise returns ``False``." +msgstr "如果 *x* 是静默 NaN 则返回 ``True``;否则返回 ``False``。" + +#: ../../library/decimal.rst:1235 +msgid "Returns ``True`` if *x* is negative; otherwise returns ``False``." +msgstr "*x* 是负数则返回 ``True``;否则返回 ``False``。" + +#: ../../library/decimal.rst:1240 +msgid "" +"Returns ``True`` if *x* is a signaling NaN; otherwise returns ``False``." +msgstr "如果 *x* 是显式 NaN 则返回 ``True``;否则返回 ``False``。" + +#: ../../library/decimal.rst:1245 +msgid "Returns ``True`` if *x* is subnormal; otherwise returns ``False``." +msgstr "如果 *x* 是次标准数则返回 ``True``;否则返回 ``False``。" + +#: ../../library/decimal.rst:1250 +msgid "Returns ``True`` if *x* is a zero; otherwise returns ``False``." +msgstr "如果 *x* 为零则返回 ``True``;否则返回 ``False``。" + +#: ../../library/decimal.rst:1255 +msgid "Returns the natural (base e) logarithm of *x*." +msgstr "返回 *x* 的自然对数(以 e 为底)。" + +#: ../../library/decimal.rst:1260 +msgid "Returns the base 10 logarithm of *x*." +msgstr "返回 *x* 的以 10 为底的对数。" + +#: ../../library/decimal.rst:1265 +msgid "Returns the exponent of the magnitude of the operand's MSD." +msgstr "返回操作数的 MSD 等级的指数。" + +#: ../../library/decimal.rst:1270 +msgid "Applies the logical operation *and* between each operand's digits." +msgstr "在操作数的每个数位间应用逻辑运算 *and*。" + +#: ../../library/decimal.rst:1275 +msgid "Invert all the digits in *x*." +msgstr "反转 *x* 中的所有数位。" + +#: ../../library/decimal.rst:1280 +msgid "Applies the logical operation *or* between each operand's digits." +msgstr "在操作数的每个数位间应用逻辑运算 *or*。" + +#: ../../library/decimal.rst:1285 +msgid "Applies the logical operation *xor* between each operand's digits." +msgstr "在操作数的每个数位间应用逻辑运算 *xor*。" + +#: ../../library/decimal.rst:1290 +msgid "Compares two values numerically and returns the maximum." +msgstr "对两个值执行数字比较并返回其中的最大值。" + +#: ../../library/decimal.rst:1295 ../../library/decimal.rst:1305 +msgid "Compares the values numerically with their sign ignored." +msgstr "对两个值执行忽略正负号的数字比较。" + +#: ../../library/decimal.rst:1300 +msgid "Compares two values numerically and returns the minimum." +msgstr "对两个值执行数字比较并返回其中的最小值。" + +#: ../../library/decimal.rst:1310 +msgid "Minus corresponds to the unary prefix minus operator in Python." +msgstr "对应于 Python 中的单目前缀取负运算符执行取负操作。" + +#: ../../library/decimal.rst:1315 +msgid "Return the product of *x* and *y*." +msgstr "返回 *x* 和 *y* 的积。" + +#: ../../library/decimal.rst:1320 +msgid "Returns the largest representable number smaller than *x*." +msgstr "返回小于 *x* 的最大数字表示形式。" + +#: ../../library/decimal.rst:1325 +msgid "Returns the smallest representable number larger than *x*." +msgstr "返回大于 *x* 的最小数字表示形式。" + +#: ../../library/decimal.rst:1330 +msgid "Returns the number closest to *x*, in direction towards *y*." +msgstr "返回 *x* 趋向于 *y* 的最接近的数字。" + +#: ../../library/decimal.rst:1335 +msgid "Reduces *x* to its simplest form." +msgstr "将 *x* 改写为最简形式。" + +#: ../../library/decimal.rst:1340 +msgid "Returns an indication of the class of *x*." +msgstr "返回 *x* 的类的表示。" + +#: ../../library/decimal.rst:1345 +msgid "" +"Plus corresponds to the unary prefix plus operator in Python. This " +"operation applies the context precision and rounding, so it is *not* an " +"identity operation." +msgstr "对应于 Python 中的单目前缀取正运算符执行取正操作。 此操作将应用上下文精度和舍入,因此它 *不是* 标识运算。" + +#: ../../library/decimal.rst:1352 +msgid "" +"Return ``x`` to the power of ``y``, reduced modulo ``modulo`` if given." +msgstr "返回 ``x`` 的 ``y`` 次方,如果给出了模数 ``modulo`` 则取其余数。" + +#: ../../library/decimal.rst:1354 +msgid "" +"With two arguments, compute ``x**y``. If ``x`` is negative then ``y`` must " +"be integral. The result will be inexact unless ``y`` is integral and the " +"result is finite and can be expressed exactly in 'precision' digits. The " +"rounding mode of the context is used. Results are always correctly-rounded " +"in the Python version." +msgstr "" +"如为两个参数则计算 ``x**y``。 如果 ``x`` 为负值则 ``y`` 必须为整数。 除非 ``y`` 为整数且结果为有限值并可在 " +"'precision' 位内精确表示否则结果将是不精确的。 上下文的舍入模式将被使用。 结果在 Python 版中总是会被正确地舍入。" + +#: ../../library/decimal.rst:1360 +msgid "" +"``Decimal(0) ** Decimal(0)`` results in ``InvalidOperation``, and if " +"``InvalidOperation`` is not trapped, then results in ``Decimal('NaN')``." +msgstr "" +"``Decimal(0) ** Decimal(0)`` 结果为 ``InvalidOperation``,而如果 " +"``InvalidOperation`` 未被捕获,则结果为 ``Decimal('NaN')``。" + +#: ../../library/decimal.rst:1363 +msgid "" +"The C module computes :meth:`power` in terms of the correctly-rounded " +":meth:`exp` and :meth:`ln` functions. The result is well-defined but only " +"\"almost always correctly-rounded\"." +msgstr "" +"C 模块计算 :meth:`power` 时会使用已正确舍入的 :meth:`exp` 和 :meth:`ln` 函数。 " +"结果是经过良好定义的,但仅限于“几乎总是正确地舍入”。" + +#: ../../library/decimal.rst:1368 +msgid "" +"With three arguments, compute ``(x**y) % modulo``. For the three argument " +"form, the following restrictions on the arguments hold:" +msgstr "带有三个参数时,计算 ``(x**y) % modulo``。 对于三个参数的形式,参数将会应用以下限制:" + +#: ../../library/decimal.rst:1371 +msgid "all three arguments must be integral" +msgstr "三个参数必须都是整数" + +#: ../../library/decimal.rst:1372 +msgid "``y`` must be nonnegative" +msgstr "``y`` 必须是非负数" + +#: ../../library/decimal.rst:1373 +msgid "at least one of ``x`` or ``y`` must be nonzero" +msgstr "``x`` 或 ``y`` 至少有一个不为零" + +#: ../../library/decimal.rst:1374 +msgid "``modulo`` must be nonzero and have at most 'precision' digits" +msgstr "``modulo`` 必须不为零且至多有 'precision' 位" + +#: ../../library/decimal.rst:1376 +msgid "" +"The value resulting from ``Context.power(x, y, modulo)`` is equal to the " +"value that would be obtained by computing ``(x**y) % modulo`` with unbounded" +" precision, but is computed more efficiently. The exponent of the result is" +" zero, regardless of the exponents of ``x``, ``y`` and ``modulo``. The " +"result is always exact." +msgstr "" +"来自 ``Context.power(x, y, modulo)`` 的结果值等于使用无限精度计算 ``(x**y) % modulo`` " +"所得到的值,但其计算过程更高效。 结果的指数为零,无论 ``x``, ``y`` 和 ``modulo`` 的指数是多少。 结果值总是完全精确的。" + +#: ../../library/decimal.rst:1386 +msgid "Returns a value equal to *x* (rounded), having the exponent of *y*." +msgstr "返回的值等于 *x* (舍入后),并且指数为 *y*。" + +#: ../../library/decimal.rst:1391 +msgid "Just returns 10, as this is Decimal, :)" +msgstr "恰好返回 10,因为这是 Decimal 对象 :)" + +#: ../../library/decimal.rst:1396 +msgid "Returns the remainder from integer division." +msgstr "返回整除所得到的余数。" + +#: ../../library/decimal.rst:1398 +msgid "" +"The sign of the result, if non-zero, is the same as that of the original " +"dividend." +msgstr "结果的符号,如果不为零,则与原始除数的符号相同。" + +#: ../../library/decimal.rst:1404 +msgid "" +"Returns ``x - y * n``, where *n* is the integer nearest the exact value of " +"``x / y`` (if the result is 0 then its sign will be the sign of *x*)." +msgstr "" +"返回 ``x - y * n``,其中 *n* 为最接近 ``x / y`` 实际值的整数(如结果为 0 则其符号将与 *x* 的符号相同)。" + +#: ../../library/decimal.rst:1410 +msgid "Returns a rotated copy of *x*, *y* times." +msgstr "返回 *x* 翻转 *y* 次的副本。" + +#: ../../library/decimal.rst:1415 +msgid "Returns ``True`` if the two operands have the same exponent." +msgstr "如果两个操作数具有相同的指数则返回 ``True``。" + +#: ../../library/decimal.rst:1420 +msgid "Returns the first operand after adding the second value its exp." +msgstr "返回第一个操作数添加第二个值的指数后的结果。" + +#: ../../library/decimal.rst:1425 +msgid "Returns a shifted copy of *x*, *y* times." +msgstr "返回 *x* 变换 *y* 次的副本。" + +#: ../../library/decimal.rst:1430 +msgid "Square root of a non-negative number to context precision." +msgstr "非负数基于上下文精度的平方根。" + +#: ../../library/decimal.rst:1435 +msgid "Return the difference between *x* and *y*." +msgstr "返回 *x* 和 *y* 的差。" + +#: ../../library/decimal.rst:1449 +msgid "Rounds to an integer." +msgstr "舍入到一个整数。" + +#: ../../library/decimal.rst:1454 +msgid "Converts a number to a string using scientific notation." +msgstr "使用科学计数法将一个数字转换为字符串。" + +#: ../../library/decimal.rst:1461 +msgid "Constants" +msgstr "常数" + +#: ../../library/decimal.rst:1463 +msgid "" +"The constants in this section are only relevant for the C module. They are " +"also included in the pure Python version for compatibility." +msgstr "本节中的常量仅与 C 模块相关。 它们也被包含在纯 Python 版本以保持兼容性。" + +#: ../../library/decimal.rst:1467 +msgid "32-bit" +msgstr "32位" + +#: ../../library/decimal.rst:1467 +msgid "64-bit" +msgstr "64位" + +#: ../../library/decimal.rst:1469 ../../library/decimal.rst:1471 +msgid ":const:`425000000`" +msgstr ":const:`425000000`" + +#: ../../library/decimal.rst:1469 ../../library/decimal.rst:1471 +msgid ":const:`999999999999999999`" +msgstr ":const:`999999999999999999`" + +#: ../../library/decimal.rst:1473 +msgid ":const:`-425000000`" +msgstr ":const:`-425000000`" + +#: ../../library/decimal.rst:1473 +msgid ":const:`-999999999999999999`" +msgstr ":const:`-999999999999999999`" + +#: ../../library/decimal.rst:1475 +msgid ":const:`-849999999`" +msgstr ":const:`-849999999`" + +#: ../../library/decimal.rst:1475 +msgid ":const:`-1999999999999999997`" +msgstr ":const:`-1999999999999999997`" + +#: ../../library/decimal.rst:1481 +msgid "" +"The value is ``True``. Deprecated, because Python now always has threads." +msgstr "该值为 ``True``。 已弃用,因为 Python 现在总是启用线程。" + +#: ../../library/decimal.rst:1487 +msgid "" +"The default value is ``True``. If Python is compiled ``--without-decimal-" +"contextvar``, the C version uses a thread-local rather than a coroutine-" +"local context and the value is ``False``. This is slightly faster in some " +"nested context scenarios." +msgstr "" +"默认值为 ``True``。 如果 Python 的编译带有 ``--without-decimal-contextvar`` 选项,则 C " +"版本会使用线程局部而不是协程局部上下文并且该值为 ``False``。 这在某些嵌套上下文场景中将稍快一些。" + +#: ../../library/decimal.rst:1491 +msgid "backported to 3.7 and 3.8." +msgstr "向下移植到 3.7 和 3.8。" + +#: ../../library/decimal.rst:1495 +msgid "Rounding modes" +msgstr "舍入模式" + +#: ../../library/decimal.rst:1499 +msgid "Round towards :const:`Infinity`." +msgstr "舍入方向为 :const:`Infinity`。" + +#: ../../library/decimal.rst:1503 +msgid "Round towards zero." +msgstr "舍入方向为零。" + +#: ../../library/decimal.rst:1507 +msgid "Round towards :const:`-Infinity`." +msgstr "舍入方向为 :const:`-Infinity`。" + +#: ../../library/decimal.rst:1511 +msgid "Round to nearest with ties going towards zero." +msgstr "舍入到最接近的数,同样接近则舍入方向为零。" + +#: ../../library/decimal.rst:1515 +msgid "Round to nearest with ties going to nearest even integer." +msgstr "舍入到最接近的数,同样接近则舍入到最接近的偶数。" + +#: ../../library/decimal.rst:1519 +msgid "Round to nearest with ties going away from zero." +msgstr "舍入到最接近的数,同样接近则舍入到零的反方向。" + +#: ../../library/decimal.rst:1523 +msgid "Round away from zero." +msgstr "舍入到零的反方向。" + +#: ../../library/decimal.rst:1527 +msgid "" +"Round away from zero if last digit after rounding towards zero would have " +"been 0 or 5; otherwise round towards zero." +msgstr "如果最后一位朝零的方向舍入后为 0 或 5 则舍入到零的反方向;否则舍入方向为零。" + +#: ../../library/decimal.rst:1534 +msgid "Signals" +msgstr "信号" + +#: ../../library/decimal.rst:1536 +msgid "" +"Signals represent conditions that arise during computation. Each corresponds" +" to one context flag and one context trap enabler." +msgstr "信号代表在计算期间引发的条件。 每个信号对应于一个上下文旗标和一个上下文陷阱启用器。" + +#: ../../library/decimal.rst:1539 +msgid "" +"The context flag is set whenever the condition is encountered. After the " +"computation, flags may be checked for informational purposes (for instance, " +"to determine whether a computation was exact). After checking the flags, be " +"sure to clear all flags before starting the next computation." +msgstr "" +"上下文旗标将在遇到特定条件时被设定。 在完成计算之后,将为了获得信息而检测旗标(例如确定计算是否精确)。 " +"在检测旗标后,请确保在开始下一次计算之前清除所有旗标。" + +#: ../../library/decimal.rst:1544 +msgid "" +"If the context's trap enabler is set for the signal, then the condition " +"causes a Python exception to be raised. For example, if the " +":class:`DivisionByZero` trap is set, then a :exc:`DivisionByZero` exception " +"is raised upon encountering the condition." +msgstr "" +"如果为信号设定了上下文的陷阱启用器,则条件会导致特定的 Python 异常被引发。 举例来说,如果设定了 :class:`DivisionByZero`" +" 陷阱,则当遇到此条件时就将引发 :exc:`DivisionByZero` 异常。" + +#: ../../library/decimal.rst:1552 +msgid "Altered an exponent to fit representation constraints." +msgstr "修改一个指数以符合表示限制。" + +#: ../../library/decimal.rst:1554 +msgid "" +"Typically, clamping occurs when an exponent falls outside the context's " +":attr:`Emin` and :attr:`Emax` limits. If possible, the exponent is reduced " +"to fit by adding zeros to the coefficient." +msgstr "" +"通常,限位将在一个指数超出上下文的 :attr:`Emin` 和 :attr:`Emax` 限制时发生。 " +"在可能的情况下,会通过给系数添加零来将指数缩减至符合限制。" + +#: ../../library/decimal.rst:1561 +msgid "Base class for other signals and a subclass of :exc:`ArithmeticError`." +msgstr "其他信号的基类,并且也是 :exc:`ArithmeticError` 的一个子类。" + +#: ../../library/decimal.rst:1566 +msgid "Signals the division of a non-infinite number by zero." +msgstr "非无限数被零除的信号。" + +#: ../../library/decimal.rst:1568 +msgid "" +"Can occur with division, modulo division, or when raising a number to a " +"negative power. If this signal is not trapped, returns :const:`Infinity` or" +" :const:`-Infinity` with the sign determined by the inputs to the " +"calculation." +msgstr "" +"可在除法、取余队法或对一个数求负数次幂时发生。 如果此信号未被陷阱捕获,则返回 :const:`Infinity` 或 " +":const:`-Infinity` 并且由对计算的输入来确定正负符号。" + +#: ../../library/decimal.rst:1575 +msgid "Indicates that rounding occurred and the result is not exact." +msgstr "表明发生了舍入且结果是不精确的。" + +#: ../../library/decimal.rst:1577 +msgid "" +"Signals when non-zero digits were discarded during rounding. The rounded " +"result is returned. The signal flag or trap is used to detect when results " +"are inexact." +msgstr "有非零数位在舍入期间被丢弃的信号。 舍入结果将被返回。 此信号旗标或陷阱被用于检测结果不精确的情况。" + +#: ../../library/decimal.rst:1584 +msgid "An invalid operation was performed." +msgstr "执行了一个无效的操作。" + +#: ../../library/decimal.rst:1586 +msgid "" +"Indicates that an operation was requested that does not make sense. If not " +"trapped, returns :const:`NaN`. Possible causes include::" +msgstr "表明请求了一个无意义的操作。 如未被陷阱捕获则返回 :const:`NaN`。 可能的原因包括::" + +#: ../../library/decimal.rst:1602 +msgid "Numerical overflow." +msgstr "数值的溢出。" + +#: ../../library/decimal.rst:1604 +msgid "" +"Indicates the exponent is larger than :attr:`Emax` after rounding has " +"occurred. If not trapped, the result depends on the rounding mode, either " +"pulling inward to the largest representable finite number or rounding " +"outward to :const:`Infinity`. In either case, :class:`Inexact` and " +":class:`Rounded` are also signaled." +msgstr "" +"表明在发生舍入之后的指数大于 :attr:`Emax`。 如果未被陷阱捕获,则结果将取决于舍入模式,或者向下舍入为最大的可表示有限数,或者向上舍入为 " +":const:`Infinity`。 无论哪种情况,都将引发 :class:`Inexact` 和 :class:`Rounded` 信号。" + +#: ../../library/decimal.rst:1613 +msgid "Rounding occurred though possibly no information was lost." +msgstr "发生了舍入,但或许并没有信息丢失。" + +#: ../../library/decimal.rst:1615 +msgid "" +"Signaled whenever rounding discards digits; even if those digits are zero " +"(such as rounding :const:`5.00` to :const:`5.0`). If not trapped, returns " +"the result unchanged. This signal is used to detect loss of significant " +"digits." +msgstr "" +"一旦舍入丢弃了数位就会发出此信号;即使被丢弃的数位是零 (例如将 :const:`5.00` 舍入为 :const:`5.0`)。 " +"如果未被陷阱捕获,则不经修改地返回结果。 此信号用于检测有效位数的丢弃。" + +#: ../../library/decimal.rst:1623 +msgid "Exponent was lower than :attr:`Emin` prior to rounding." +msgstr "在舍入之前指数低于 :attr:`Emin`。" + +#: ../../library/decimal.rst:1625 +msgid "" +"Occurs when an operation result is subnormal (the exponent is too small). If" +" not trapped, returns the result unchanged." +msgstr "当操作结果是次标准数(即指数过小)时就会发出此信号。 如果未被陷阱捕获,则不经修改过返回结果。" + +#: ../../library/decimal.rst:1631 +msgid "Numerical underflow with result rounded to zero." +msgstr "数字向下溢出导致结果舍入到零。" + +#: ../../library/decimal.rst:1633 +msgid "" +"Occurs when a subnormal result is pushed to zero by rounding. " +":class:`Inexact` and :class:`Subnormal` are also signaled." +msgstr "" +"当一个次标准数结果通过舍入转为零时就会发出此信号。 同时还将引发 :class:`Inexact` 和 :class:`Subnormal` 信号。" + +#: ../../library/decimal.rst:1639 +msgid "Enable stricter semantics for mixing floats and Decimals." +msgstr "为 float 和 Decimal 的混合启用更严格的语义。" + +#: ../../library/decimal.rst:1641 +msgid "" +"If the signal is not trapped (default), mixing floats and Decimals is " +"permitted in the :class:`~decimal.Decimal` constructor, " +":meth:`~decimal.Context.create_decimal` and all comparison operators. Both " +"conversion and comparisons are exact. Any occurrence of a mixed operation is" +" silently recorded by setting :exc:`FloatOperation` in the context flags. " +"Explicit conversions with :meth:`~decimal.Decimal.from_float` or " +":meth:`~decimal.Context.create_decimal_from_float` do not set the flag." +msgstr "" +"如果信号未被捕获(默认),则在 :class:`~decimal.Decimal` " +"构造器、:meth:`~decimal.Context.create_decimal` 和所有比较运算中允许 float 和 Decimal 的混合。 " +"转换和比较都是完全精确的。 发生的任何混合运算都将通过在上下文旗标中设置 :exc:`FloatOperation` 来静默地记录。 通过 " +":meth:`~decimal.Decimal.from_float` 或 " +":meth:`~decimal.Context.create_decimal_from_float` 进行显式转换则不会设置旗标。" + +#: ../../library/decimal.rst:1649 +msgid "" +"Otherwise (the signal is trapped), only equality comparisons and explicit " +"conversions are silent. All other mixed operations raise " +":exc:`FloatOperation`." +msgstr "在其他情况下(即信号被捕获),则只静默执行相等性比较和显式转换。 所有其他混合运算都将引发 :exc:`FloatOperation`。" + +#: ../../library/decimal.rst:1653 +msgid "The following table summarizes the hierarchy of signals::" +msgstr "以下表格总结了信号的层级结构::" + +#: ../../library/decimal.rst:1674 +msgid "Floating Point Notes" +msgstr "浮点数说明" + +#: ../../library/decimal.rst:1678 +msgid "Mitigating round-off error with increased precision" +msgstr "通过提升精度来解决舍入错误" + +#: ../../library/decimal.rst:1680 +msgid "" +"The use of decimal floating point eliminates decimal representation error " +"(making it possible to represent :const:`0.1` exactly); however, some " +"operations can still incur round-off error when non-zero digits exceed the " +"fixed precision." +msgstr "" +"使用十进制浮点数可以消除十进制表示错误(即能够完全精确地表示 :const:`0.1` " +"这样的数);然而,某些运算在非零数位超出给定的精度时仍然可能导致舍入错误。" +" " + +#: ../../library/decimal.rst:1684 +msgid "" +"The effects of round-off error can be amplified by the addition or " +"subtraction of nearly offsetting quantities resulting in loss of " +"significance. Knuth provides two instructive examples where rounded " +"floating point arithmetic with insufficient precision causes the breakdown " +"of the associative and distributive properties of addition:" +msgstr "" +"舍入错误的影响可能因接近相互抵销的加减运算被放大从而导致丢失有效位。 Knuth " +"提供了两个指导性示例,其中出现了精度不足的浮点算术舍入,导致加法的交换律和分配律被打破:" + +#: ../../library/decimal.rst:1708 +msgid "" +"The :mod:`decimal` module makes it possible to restore the identities by " +"expanding the precision sufficiently to avoid loss of significance:" +msgstr ":mod:`decimal` 模块则可以通过充分地扩展精度来避免有效位的丢失:" + +#: ../../library/decimal.rst:1728 +msgid "Special values" +msgstr "特殊的值" + +#: ../../library/decimal.rst:1730 +msgid "" +"The number system for the :mod:`decimal` module provides special values " +"including :const:`NaN`, :const:`sNaN`, :const:`-Infinity`, " +":const:`Infinity`, and two zeros, :const:`+0` and :const:`-0`." +msgstr "" +":mod:`decimal` 模块的数字系统提供了一些特殊的值,包括 :const:`NaN`, :const:`sNaN`, " +":const:`-Infinity`, :const:`Infinity` 以及两种零值 :const:`+0` 和 :const:`-0`。" + +#: ../../library/decimal.rst:1734 +msgid "" +"Infinities can be constructed directly with: ``Decimal('Infinity')``. Also," +" they can arise from dividing by zero when the :exc:`DivisionByZero` signal " +"is not trapped. Likewise, when the :exc:`Overflow` signal is not trapped, " +"infinity can result from rounding beyond the limits of the largest " +"representable number." +msgstr "" +"无穷大可以使用 ``Decimal('Infinity')`` 来构建。 它们也可以在不捕获 :exc:`DivisionByZero` " +"信号捕获时通过除以零来产生。 类似地,当不捕获 :exc:`Overflow` 信号时,也可以通过舍入到超出最大可表示数字限制的方式产生无穷大的结果。" + +#: ../../library/decimal.rst:1739 +msgid "" +"The infinities are signed (affine) and can be used in arithmetic operations " +"where they get treated as very large, indeterminate numbers. For instance, " +"adding a constant to infinity gives another infinite result." +msgstr "无穷大是有符号的(仿射)并可用于算术运算,它们会被当作极其巨大的不确定数字来处理。 例如,无穷大加一个常量结果也将为无穷大。" + +#: ../../library/decimal.rst:1743 +msgid "" +"Some operations are indeterminate and return :const:`NaN`, or if the " +":exc:`InvalidOperation` signal is trapped, raise an exception. For example," +" ``0/0`` returns :const:`NaN` which means \"not a number\". This variety of" +" :const:`NaN` is quiet and, once created, will flow through other " +"computations always resulting in another :const:`NaN`. This behavior can be" +" useful for a series of computations that occasionally have missing inputs " +"--- it allows the calculation to proceed while flagging specific results as " +"invalid." +msgstr "" +"某些不存在有效结果的运算将会返回 :const:`NaN`,或者如果捕获了 :exc:`InvalidOperation` 信号则会引发一个异常。 " +"例如,``0/0`` 会返回 :const:`NaN` 表示结果“不是一个数字”。 这样的 :const:`NaN` " +"是静默产生的,并且在产生之后参与其它计算时总是会得到 :const:`NaN` 的结果。 这种行为对于偶而缺少输入的各类计算都很有用处 --- " +"它允许在将特定结果标记为无效的同时让计算继续运行。" + +#: ../../library/decimal.rst:1751 +msgid "" +"A variant is :const:`sNaN` which signals rather than remaining quiet after " +"every operation. This is a useful return value when an invalid result needs" +" to interrupt a calculation for special handling." +msgstr "" +"另一种变体形式是 :const:`sNaN`,它在每次运算后会发出信号而不是保持静默。 " +"当对于无效结果需要中断计算进行特别处理时,这是一个很有用的返回值。" + +#: ../../library/decimal.rst:1755 +msgid "" +"The behavior of Python's comparison operators can be a little surprising " +"where a :const:`NaN` is involved. A test for equality where one of the " +"operands is a quiet or signaling :const:`NaN` always returns :const:`False` " +"(even when doing ``Decimal('NaN')==Decimal('NaN')``), while a test for " +"inequality always returns :const:`True`. An attempt to compare two Decimals" +" using any of the ``<``, ``<=``, ``>`` or ``>=`` operators will raise the " +":exc:`InvalidOperation` signal if either operand is a :const:`NaN`, and " +"return :const:`False` if this signal is not trapped. Note that the General " +"Decimal Arithmetic specification does not specify the behavior of direct " +"comparisons; these rules for comparisons involving a :const:`NaN` were taken" +" from the IEEE 854 standard (see Table 3 in section 5.7). To ensure strict " +"standards-compliance, use the :meth:`compare` and :meth:`compare-signal` " +"methods instead." +msgstr "" +"Python 中比较运算符的行为在涉及 :const:`NaN` 时可能会令人有点惊讶。 相等性检测在操作数中有静默型或信号型 :const:`NaN`" +" 时总是会返回 :const:`False` (即使是执行 " +"``Decimal('NaN')==Decimal('NaN')``),而不等性检测总是会返回 :const:`True`。 当尝试使用 ``<``, " +"``<=``, ``>`` 或 ``>=`` 运算符中的任何一个来比较两个 Decimal 值时,如果运算数中有 :const:`NaN` 则将引发 " +":exc:`InvalidOperation` 信号,如果此信号未被捕获则将返回 :const:`False`。 " +"请注意通用十进制算术规范并未规定直接比较行为;这些涉及 :const:`NaN` 的比较规则来自于 IEEE 854 标准 (见第 5.7 节表 3)。" +" 要确保严格符合标准,请改用 :meth:`compare` 和 :meth:`compare-signal` 方法。" + +#: ../../library/decimal.rst:1768 +msgid "" +"The signed zeros can result from calculations that underflow. They keep the " +"sign that would have resulted if the calculation had been carried out to " +"greater precision. Since their magnitude is zero, both positive and " +"negative zeros are treated as equal and their sign is informational." +msgstr "" +"有符号零值可以由向下溢出的运算产生。 它们保留符号是为了让运算结果能以更高的精度传递。 " +"由于它们的大小为零,正零和负零会被视为相等,且它们的符号具有信息。" + +#: ../../library/decimal.rst:1773 +msgid "" +"In addition to the two signed zeros which are distinct yet equal, there are " +"various representations of zero with differing precisions yet equivalent in " +"value. This takes a bit of getting used to. For an eye accustomed to " +"normalized floating point representations, it is not immediately obvious " +"that the following calculation returns a value equal to zero:" +msgstr "" +"在这两个不相同但却相等的有符号零之外,还存在几种零的不同表示形式,它们的精度不同但值也都相等。 这需要一些时间来逐渐适应。 " +"对于习惯了标准浮点表示形式的眼睛来说,以下运算返回等于零的值并不是显而易见的:" + +#: ../../library/decimal.rst:1788 +msgid "Working with threads" +msgstr "使用线程" + +#: ../../library/decimal.rst:1790 +msgid "" +"The :func:`getcontext` function accesses a different :class:`Context` object" +" for each thread. Having separate thread contexts means that threads may " +"make changes (such as ``getcontext().prec=10``) without interfering with " +"other threads." +msgstr "" +":func:`getcontext` 函数会为每个线程访问不同的 :class:`Context` 对象。 具有单独线程上下文意味着线程可以修改上下文 " +"(例如 ``getcontext().prec=10``) 而不影响其他线程。" + +#: ../../library/decimal.rst:1794 +msgid "" +"Likewise, the :func:`setcontext` function automatically assigns its target " +"to the current thread." +msgstr "类似的 :func:`setcontext` 会为当前上下文的目标自动赋值。" + +#: ../../library/decimal.rst:1797 +msgid "" +"If :func:`setcontext` has not been called before :func:`getcontext`, then " +":func:`getcontext` will automatically create a new context for use in the " +"current thread." +msgstr "" +"如果在调用 :func:`setcontext` 之前调用了 :func:`getcontext`,则 :func:`getcontext` " +"将自动创建一个新的上下文在当前线程中使用。" + +#: ../../library/decimal.rst:1801 +msgid "" +"The new context is copied from a prototype context called *DefaultContext*. " +"To control the defaults so that each thread will use the same values " +"throughout the application, directly modify the *DefaultContext* object. " +"This should be done *before* any threads are started so that there won't be " +"a race condition between threads calling :func:`getcontext`. For example::" +msgstr "" +"新的上下文拷贝自一个名为 *DefaultContext* 的原型上下文。 要控制默认值以便每个线程在应用运行期间都使用相同的值,可以直接修改 " +"*DefaultContext* 对象。 这应当在任何线程启动 *之前* 完成以使得调用 :func:`getcontext` " +"的线程之间不会产生竞争条件。 例如::" + +#: ../../library/decimal.rst:1826 +msgid "Recipes" +msgstr "例程" + +#: ../../library/decimal.rst:1828 +msgid "" +"Here are a few recipes that serve as utility functions and that demonstrate " +"ways to work with the :class:`Decimal` class::" +msgstr "以下是一些用作工具函数的例程,它们演示了使用 :class:`Decimal` 类的各种方式::" + +#: ../../library/decimal.rst:1983 +msgid "Decimal FAQ" +msgstr "Decimal 常见问题" + +#: ../../library/decimal.rst:1985 +msgid "" +"Q. It is cumbersome to type ``decimal.Decimal('1234.5')``. Is there a way " +"to minimize typing when using the interactive interpreter?" +msgstr "Q. 总是输入 ``decimal.Decimal('1234.5')`` 是否过于笨拙。 在使用交互解释器时有没有最小化输入量的方式?" + +#: ../../library/decimal.rst:1988 +msgid "A. Some users abbreviate the constructor to just a single letter:" +msgstr "A. 有些用户会将构造器简写为一个字母:" + +#: ../../library/decimal.rst:1994 +msgid "" +"Q. In a fixed-point application with two decimal places, some inputs have " +"many places and need to be rounded. Others are not supposed to have excess " +"digits and need to be validated. What methods should be used?" +msgstr "" +"Q. 在带有两个十进制位的定点数应用中,有些输入值具有许多位,需要被舍入。 另一些数则不应具有多余位,需要验证有效性。 这种情况应该用什么方法?" + +#: ../../library/decimal.rst:1998 +msgid "" +"A. The :meth:`quantize` method rounds to a fixed number of decimal places. " +"If the :const:`Inexact` trap is set, it is also useful for validation:" +msgstr "" +"A. 用 :meth:`quantize` 方法舍入到固定数量的十进制位。 如果设置了 :const:`Inexact` 陷阱,它也适用于验证有效性:" + +#: ../../library/decimal.rst:2016 +msgid "" +"Q. Once I have valid two place inputs, how do I maintain that invariant " +"throughout an application?" +msgstr "Q. 当我使用两个有效位的输入时,我要如何在一个应用中保持有效位不变?" + +#: ../../library/decimal.rst:2019 +msgid "" +"A. Some operations like addition, subtraction, and multiplication by an " +"integer will automatically preserve fixed point. Others operations, like " +"division and non-integer multiplication, will change the number of decimal " +"places and need to be followed-up with a :meth:`quantize` step:" +msgstr "" +"A. 某些运算例如与整数相加、相减和相乘将会自动保留固定的小数位数。 其他运算,例如相除和非整数相乘则将会改变小数位数,需要再加上 " +":meth:`quantize` 处理步骤:" + +#: ../../library/decimal.rst:2037 +msgid "" +"In developing fixed-point applications, it is convenient to define functions" +" to handle the :meth:`quantize` step:" +msgstr "在开发定点数应用时,更方便的做法是定义处理 :meth:`quantize` 步骤的函数:" + +#: ../../library/decimal.rst:2050 +msgid "" +"Q. There are many ways to express the same value. The numbers :const:`200`," +" :const:`200.000`, :const:`2E2`, and :const:`.02E+4` all have the same value" +" at various precisions. Is there a way to transform them to a single " +"recognizable canonical value?" +msgstr "" +"Q. 表示同一个值有许多方式。 数字 :const:`200`, :const:`200.000`, :const:`2E2` 和 " +":const:`.02E+4` 的值都相同但有精度不同。 是否有办法将它们转换为一个可识别的规范值?" + +#: ../../library/decimal.rst:2055 +msgid "" +"A. The :meth:`normalize` method maps all equivalent values to a single " +"representative:" +msgstr "A. :meth:`normalize` 方法可将所有相同的值映射为统一表示形式:" + +#: ../../library/decimal.rst:2062 +msgid "" +"Q. Some decimal values always print with exponential notation. Is there a " +"way to get a non-exponential representation?" +msgstr "Q. 有些十进制值总是被打印为指数表示形式。 是否有办法得到一个非指数表示形式?" + +#: ../../library/decimal.rst:2065 +msgid "" +"A. For some values, exponential notation is the only way to express the " +"number of significant places in the coefficient. For example, expressing " +":const:`5.0E+3` as :const:`5000` keeps the value constant but cannot show " +"the original's two-place significance." +msgstr "" +"A. 对于某些值来说,指数表示形式是表示系数中有效位的唯一办法。 例如,将 :const:`5.0E+3` 表示为 :const:`5000` " +"可以让值保持恒定,但是无法显示原本的两位有效数字。" + +#: ../../library/decimal.rst:2070 +msgid "" +"If an application does not care about tracking significance, it is easy to " +"remove the exponent and trailing zeroes, losing significance, but keeping " +"the value unchanged:" +msgstr "如果一个应用不必关心追踪有效位,则可以很容易地移除指数和末尾的零,丢弃有效位但让值保持不变:" + +#: ../../library/decimal.rst:2080 +msgid "Q. Is there a way to convert a regular float to a :class:`Decimal`?" +msgstr "Q. 是否有办法将一个普通浮点数转换为 :class:`Decimal`?" + +#: ../../library/decimal.rst:2082 +msgid "" +"A. Yes, any binary floating point number can be exactly expressed as a " +"Decimal though an exact conversion may take more precision than intuition " +"would suggest:" +msgstr "A. 是的,任何二进制浮点数都可以精确地表示为 Decimal 值,但完全精确的转换可能需要比平常感觉更高的精度:" + +#: ../../library/decimal.rst:2091 +msgid "" +"Q. Within a complex calculation, how can I make sure that I haven't gotten a" +" spurious result because of insufficient precision or rounding anomalies." +msgstr "Q. 在一个复杂的计算中,我怎样才能保证不会得到由精度不足和舍入异常所导致的虚假结果。" + +#: ../../library/decimal.rst:2094 +msgid "" +"A. The decimal module makes it easy to test results. A best practice is to " +"re-run calculations using greater precision and with various rounding modes." +" Widely differing results indicate insufficient precision, rounding mode " +"issues, ill-conditioned inputs, or a numerically unstable algorithm." +msgstr "" +"A. 使用 decimal 模块可以很容易地检测结果。 最好的做法是使用更高的精度和不同的舍入模式重新进行计算。 " +"明显不同的结果表明存在精度不足、舍入模式问题、不符合条件的输入或是结果不稳定的算法。" + +#: ../../library/decimal.rst:2099 +msgid "" +"Q. I noticed that context precision is applied to the results of operations " +"but not to the inputs. Is there anything to watch out for when mixing " +"values of different precisions?" +msgstr "Q. 我发现上下文精度的应用只针对运算结果而不针对输入。在混合使用不同精度的值时有什么需要注意的吗?" + +#: ../../library/decimal.rst:2103 +msgid "" +"A. Yes. The principle is that all values are considered to be exact and so " +"is the arithmetic on those values. Only the results are rounded. The " +"advantage for inputs is that \"what you type is what you get\". A " +"disadvantage is that the results can look odd if you forget that the inputs " +"haven't been rounded:" +msgstr "" +"A. 是的。 原则上所有值都会被视为精确值,在这些值上进行的算术运算也是如此。 只有结果会被舍入。 对于输入来说其好处是“所输入即所得”。 " +"而其缺点则是如果你忘记了输入没有被舍入,结果看起来可能会很奇怪:" + +#: ../../library/decimal.rst:2116 +msgid "" +"The solution is either to increase precision or to force rounding of inputs " +"using the unary plus operation:" +msgstr "解决办法是提高精度或使用单目加法运算对输入执行强制舍入:" + +#: ../../library/decimal.rst:2125 +msgid "" +"Alternatively, inputs can be rounded upon creation using the " +":meth:`Context.create_decimal` method:" +msgstr "此外,还可以使用 :meth:`Context.create_decimal` 方法在创建输入时执行舍入:" + +#: ../../library/decimal.rst:2131 +msgid "Q. Is the CPython implementation fast for large numbers?" +msgstr "Q. CPython 实现对于巨大数字是否足够快速?" + +#: ../../library/decimal.rst:2133 +msgid "" +"A. Yes. In the CPython and PyPy3 implementations, the C/CFFI versions of " +"the decimal module integrate the high speed `libmpdec " +"`_ library for " +"arbitrary precision correctly-rounded decimal floating point arithmetic " +"[#]_. ``libmpdec`` uses `Karatsuba multiplication " +"`_ for medium-sized " +"numbers and the `Number Theoretic Transform " +"`_ for very large numbers." +msgstr "" +"A. 是的。 在 CPython 和 PyPy3 实现中,decimal 模块的 C/CFFI 版本集成了高速 `libmpdec " +"`_ " +"库用于实现任意精度正确舍入的十进制浮点算术 [#]_。 ``libmpdec`` 会对中等大小的数字使用 `Karatsuba 乘法 " +"`_ 而对非常巨大的数字使用 `数字原理变换 " +"`_。" + +#: ../../library/decimal.rst:2143 +msgid "" +"The context must be adapted for exact arbitrary precision arithmetic. " +":attr:`Emin` and :attr:`Emax` should always be set to the maximum values, " +":attr:`clamp` should always be 0 (the default). Setting :attr:`prec` " +"requires some care." +msgstr "" +"必须要对任意精度算术适配上下文。 :attr:`Emin` 和 :attr:`Emax` 应当总是设为最大值,:attr:`clamp` 应当总是设为 " +"0 (默认值)。 设置 :attr:`prec` 需要十分谨慎。" + +#: ../../library/decimal.rst:2147 +msgid "" +"The easiest approach for trying out bignum arithmetic is to use the maximum " +"value for :attr:`prec` as well [#]_::" +msgstr "进行大数字算术的最便捷方式也是使用 :attr:`prec` 的最大值 [#]_::" + +#: ../../library/decimal.rst:2156 +msgid "" +"For inexact results, :attr:`MAX_PREC` is far too large on 64-bit platforms " +"and the available memory will be insufficient::" +msgstr "对于不精确的结果,在 64 位平台上 :attr:`MAX_PREC` 的值太大了,可用的内存将会不足::" + +#: ../../library/decimal.rst:2164 +msgid "" +"On systems with overallocation (e.g. Linux), a more sophisticated approach " +"is to adjust :attr:`prec` to the amount of available RAM. Suppose that you " +"have 8GB of RAM and expect 10 simultaneous operands using a maximum of 500MB" +" each::" +msgstr "" +"在具有超量分配的系统上 (即 Linux),一种更复杂的方式根据可用的 RAM 大小来调整 :attr:`prec`。 假设你有 8GB 的 RAM " +"并期望同时有 10 个操作数,每个最多使用 500MB::" + +#: ../../library/decimal.rst:2188 +msgid "" +"In general (and especially on systems without overallocation), it is " +"recommended to estimate even tighter bounds and set the :attr:`Inexact` trap" +" if all calculations are expected to be exact." +msgstr "总体而言(特别是在没有超量分配的系统上),如果期望所有计算都是精确的则推荐预估更严格的边界并设置 :attr:`Inexact` 陷阱。" + +#: ../../library/decimal.rst:2197 +msgid "" +"This approach now works for all exact results except for non-integer powers." +msgstr "此方式现在适用于除了非整数乘方以外的所有精确结果。" diff --git a/library/development.po b/library/development.po new file mode 100644 index 000000000..05119da3b --- /dev/null +++ b/library/development.po @@ -0,0 +1,44 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) 2001-2022, Python Software Foundation +# This file is distributed under the same license as the Python package. +# FIRST AUTHOR , YEAR. +# +# Translators: +# Kaizhao Zhang , 2018 +# +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: Python 3.9\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2022-11-04 14:34+0000\n" +"PO-Revision-Date: 2017-02-16 23:06+0000\n" +"Last-Translator: Kaizhao Zhang , 2018\n" +"Language-Team: Chinese (China) (https://www.transifex.com/python-doc/teams/5390/zh_CN/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: zh_CN\n" +"Plural-Forms: nplurals=1; plural=0;\n" + +#: ../../library/development.rst:5 +msgid "Development Tools" +msgstr "开发工具" + +#: ../../library/development.rst:7 +msgid "" +"The modules described in this chapter help you write software. For example," +" the :mod:`pydoc` module takes a module and generates documentation based on" +" the module's contents. The :mod:`doctest` and :mod:`unittest` modules " +"contains frameworks for writing unit tests that automatically exercise code " +"and verify that the expected output is produced. :program:`2to3` can " +"translate Python 2.x source code into valid Python 3.x code." +msgstr "" +"本章中描述的各模块可帮你编写 Python 程序。例如,:mod:`pydoc` " +"模块接受一个模块并根据该模块的内容来生成文档。:mod:`doctest` 和 :mod:`unittest` " +"这两个模块包含了用于编写单元测试的框架,并可用于自动测试所编写的代码,验证预期的输出是否产生。:program:`2to3` 程序能够将 Python " +"2.x 源代码翻译成有效的 Python 3.x 源代码。" + +#: ../../library/development.rst:14 +msgid "The list of modules described in this chapter is:" +msgstr "本章中描述的模块列表是:" diff --git a/library/devmode.po b/library/devmode.po new file mode 100644 index 000000000..254ef7585 --- /dev/null +++ b/library/devmode.po @@ -0,0 +1,318 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) 2001-2022, Python Software Foundation +# This file is distributed under the same license as the Python package. +# FIRST AUTHOR , YEAR. +# +# Translators: +# ppcfish , 2020 +# Alpha Du , 2021 +# Dai Xu , 2021 +# Freesand Leo , 2021 +# +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: Python 3.9\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2022-11-04 14:34+0000\n" +"PO-Revision-Date: 2020-05-31 09:29+0000\n" +"Last-Translator: Freesand Leo , 2021\n" +"Language-Team: Chinese (China) (https://www.transifex.com/python-doc/teams/5390/zh_CN/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: zh_CN\n" +"Plural-Forms: nplurals=1; plural=0;\n" + +#: ../../library/devmode.rst:4 +msgid "Python Development Mode" +msgstr "Python 开发模式" + +#: ../../library/devmode.rst:8 +msgid "" +"The Python Development Mode introduces additional runtime checks that are " +"too expensive to be enabled by default. It should not be more verbose than " +"the default if the code is correct; new warnings are only emitted when an " +"issue is detected." +msgstr "" +"Python " +"开发模式引入了额外的运行时检查,由于成本太高,所以默认情况下是不启用的。如果代码是正确的,它不应该比默认情况的更加详细;只有在检测到问题的时候才会发出新的警告。" + +#: ../../library/devmode.rst:13 +msgid "" +"It can be enabled using the :option:`-X dev <-X>` command line option or by " +"setting the :envvar:`PYTHONDEVMODE` environment variable to ``1``." +msgstr "" +"它可以通过 :option:`-X dev <-X>` 命令行选项或通过设置 :envvar:`PYTHONDEVMODE` 环境变量为 ``1`` " +"来启用。" + +#: ../../library/devmode.rst:17 +msgid "Effects of the Python Development Mode" +msgstr "Python 开发模式的效果" + +#: ../../library/devmode.rst:19 +msgid "" +"Enabling the Python Development Mode is similar to the following command, " +"but with additional effects described below::" +msgstr "启用 Python 开发模式后的效果,与以下命令类似,不过还有下面的额外效果:" + +#: ../../library/devmode.rst:24 +msgid "Effects of the Python Development Mode:" +msgstr "Python 开发模式的效果:" + +#: ../../library/devmode.rst:26 +msgid "" +"Add ``default`` :ref:`warning filter `. The " +"following warnings are shown:" +msgstr "" +"加入 ``default`` :ref:`warning filter ` " +"。下述警告信息将会显示出来:" + +#: ../../library/devmode.rst:29 +msgid ":exc:`DeprecationWarning`" +msgstr ":exc:`DeprecationWarning`" + +#: ../../library/devmode.rst:30 +msgid ":exc:`ImportWarning`" +msgstr ":exc:`ImportWarning`" + +#: ../../library/devmode.rst:31 +msgid ":exc:`PendingDeprecationWarning`" +msgstr ":exc:`PendingDeprecationWarning`" + +#: ../../library/devmode.rst:32 +msgid ":exc:`ResourceWarning`" +msgstr ":exc:`ResourceWarning`" + +#: ../../library/devmode.rst:34 +msgid "" +"Normally, the above warnings are filtered by the default :ref:`warning " +"filters `." +msgstr "" +"通常上述警告是由默认的 :ref:`warning filters ` 负责处理的。" + +#: ../../library/devmode.rst:37 +msgid "" +"It behaves as if the :option:`-W default <-W>` command line option is used." +msgstr "其行为相当于使用了 :option:`-W default <-W>` 命令行选项。" + +#: ../../library/devmode.rst:39 +msgid "" +"Use the :option:`-W error <-W>` command line option or set the " +":envvar:`PYTHONWARNINGS` environment variable to ``error`` to treat warnings" +" as errors." +msgstr "" +"使用命令行参数 :option:`-W error <-W>` 或将环境变量 :envvar:`PYTHONWARNINGS` 设为 " +"``error``,可将警告视为错误。" + +#: ../../library/devmode.rst:43 +msgid "Install debug hooks on memory allocators to check for:" +msgstr "在内存分配程序中安装调试钩子,用以查看:" + +#: ../../library/devmode.rst:45 +msgid "Buffer underflow" +msgstr "缓冲区下溢" + +#: ../../library/devmode.rst:46 +msgid "Buffer overflow" +msgstr "缓冲区上溢" + +#: ../../library/devmode.rst:47 +msgid "Memory allocator API violation" +msgstr "内存分配 API 冲突" + +#: ../../library/devmode.rst:48 +msgid "Unsafe usage of the GIL" +msgstr "不安全的 GIL 调用" + +#: ../../library/devmode.rst:50 +msgid "See the :c:func:`PyMem_SetupDebugHooks` C function." +msgstr "参见 C 函数 :c:func:`PyMem_SetupDebugHooks` 。" + +#: ../../library/devmode.rst:52 +msgid "" +"It behaves as if the :envvar:`PYTHONMALLOC` environment variable is set to " +"``debug``." +msgstr "效果类似于将环境变量 :envvar:`PYTHONMALLOC` 设为 ``debug``。" + +#: ../../library/devmode.rst:55 +msgid "" +"To enable the Python Development Mode without installing debug hooks on " +"memory allocators, set the :envvar:`PYTHONMALLOC` environment variable to " +"``default``." +msgstr "" +"若要启用 Python 开发模式,却又不要在内存分配程序中安装调试钩子,请将 环境变量 :envvar:`PYTHONMALLOC` 设为 " +"``default``。" + +#: ../../library/devmode.rst:59 +msgid "" +"Call :func:`faulthandler.enable` at Python startup to install handlers for " +"the :const:`SIGSEGV`, :const:`SIGFPE`, :const:`SIGABRT`, :const:`SIGBUS` and" +" :const:`SIGILL` signals to dump the Python traceback on a crash." +msgstr "" +"在启动 Python 时调用 :func:`faulthandler.enable` ,会安装 :const:`SIGSEGV` 、 " +":const:`SIGFPE` 、 :const:`SIGABRT` 、 :const:`SIGBUS` 和 :const:`SIGILL` " +"信号的处理程序,以便在程序崩溃时将 Python 跟踪信息转储下来。" + +#: ../../library/devmode.rst:63 +msgid "" +"It behaves as if the :option:`-X faulthandler <-X>` command line option is " +"used or if the :envvar:`PYTHONFAULTHANDLER` environment variable is set to " +"``1``." +msgstr "" +"其行为如同使用了 :option:`-X faulthandler <-X>` 命令行选项或将 :envvar:`PYTHONFAULTHANDLER`" +" 环境变量设为 ``1``。" + +#: ../../library/devmode.rst:67 +msgid "" +"Enable :ref:`asyncio debug mode `. For example, " +":mod:`asyncio` checks for coroutines that were not awaited and logs them." +msgstr "" +"启用 :ref:`asyncio debug mode `。比如 :mod:`asyncio` " +"会检查没有等待的协程并记录下来。" + +#: ../../library/devmode.rst:70 +msgid "" +"It behaves as if the :envvar:`PYTHONASYNCIODEBUG` environment variable is " +"set to ``1``." +msgstr "效果如同将环境变量 :envvar:`PYTHONASYNCIODEBUG` 设为 ``1``。" + +#: ../../library/devmode.rst:73 +msgid "" +"Check the *encoding* and *errors* arguments for string encoding and decoding" +" operations. Examples: :func:`open`, :meth:`str.encode` and " +":meth:`bytes.decode`." +msgstr "" +"检查字符串编码和解码函数的 *encoding* 和 *errors* 参数。例如: :func:`open` 、 :meth:`str.encode`" +" 和 :meth:`bytes.decode`。" + +#: ../../library/devmode.rst:77 +msgid "" +"By default, for best performance, the *errors* argument is only checked at " +"the first encoding/decoding error and the *encoding* argument is sometimes " +"ignored for empty strings." +msgstr "" +"为了获得最佳性能,默认只会在第一次编码/解码错误时才会检查 *errors* 参数,有时 *encoding* 参数为空字符串时还会被忽略。" + +#: ../../library/devmode.rst:81 +msgid "The :class:`io.IOBase` destructor logs ``close()`` exceptions." +msgstr ":class:`io.IOBase` 的析构函数会记录 ``close()`` 触发的异常。" + +#: ../../library/devmode.rst:82 +msgid "" +"Set the :attr:`~sys.flags.dev_mode` attribute of :attr:`sys.flags` to " +"``True``." +msgstr "将 :attr:`sys.flags` 的 :attr:`~sys.flags.dev_mode` 属性设为 ``True``。" + +#: ../../library/devmode.rst:85 +msgid "" +"The Python Development Mode does not enable the :mod:`tracemalloc` module by" +" default, because the overhead cost (to performance and memory) would be too" +" large. Enabling the :mod:`tracemalloc` module provides additional " +"information on the origin of some errors. For example, " +":exc:`ResourceWarning` logs the traceback where the resource was allocated, " +"and a buffer overflow error logs the traceback where the memory block was " +"allocated." +msgstr "" +"Python 开发模式下,默认不会启用 :mod:`tracemalloc` 模块,因为其性能和内存开销太大。启用 :mod:`tracemalloc`" +" 模块后,能够提供有关错误来源的一些额外信息。例如,:exc:`ResourceWarning` " +"记录了资源分配的跟踪信息,而缓冲区溢出错误记录了内存块分配的跟踪信息。" + +#: ../../library/devmode.rst:92 +msgid "" +"The Python Development Mode does not prevent the :option:`-O` command line " +"option from removing :keyword:`assert` statements nor from setting " +":const:`__debug__` to ``False``." +msgstr "" +"Python 开发模式不会阻止命令行参数 :option:`-O` 删除 :keyword:`assert` 语句,也不会阻止将 " +":const:`__debug__` 设为 ``False``。" + +#: ../../library/devmode.rst:96 +msgid "The :class:`io.IOBase` destructor now logs ``close()`` exceptions." +msgstr "现在, :class:`io.IOBase` 的析构函数会记录 ``close()`` 触发的异常。" + +#: ../../library/devmode.rst:99 +msgid "" +"The *encoding* and *errors* arguments are now checked for string encoding " +"and decoding operations." +msgstr "现在,字符串编码和解码操作时会检查 *encoding* 和 *errors* 参数。" + +#: ../../library/devmode.rst:105 +msgid "ResourceWarning Example" +msgstr "ResourceWarning 示例" + +#: ../../library/devmode.rst:107 +msgid "" +"Example of a script counting the number of lines of the text file specified " +"in the command line::" +msgstr "以下示例将统计由命令行指定的文本文件的行数:" + +#: ../../library/devmode.rst:121 +msgid "" +"The script does not close the file explicitly. By default, Python does not " +"emit any warning. Example using README.txt, which has 269 lines:" +msgstr "上述代码没有显式关闭文件。默认情况下,Python 不会触发任何警告。下面用 README.txt 文件测试下,有 269 行。" + +#: ../../library/devmode.rst:129 +msgid "" +"Enabling the Python Development Mode displays a :exc:`ResourceWarning` " +"warning:" +msgstr "启用 Python 开发模式后,则会显示一条 :exc:`ResourceWarning` 警告。" + +#: ../../library/devmode.rst:139 +msgid "" +"In addition, enabling :mod:`tracemalloc` shows the line where the file was " +"opened:" +msgstr "启用 :mod:`tracemalloc` 后,则还会显示打开文件的那行代码:" + +#: ../../library/devmode.rst:154 +msgid "" +"The fix is to close explicitly the file. Example using a context manager::" +msgstr "修正方案就是显式关闭文件。下面用上下文管理器作为示例:" + +#: ../../library/devmode.rst:162 +msgid "" +"Not closing a resource explicitly can leave a resource open for way longer " +"than expected; it can cause severe issues upon exiting Python. It is bad in " +"CPython, but it is even worse in PyPy. Closing resources explicitly makes an" +" application more deterministic and more reliable." +msgstr "" +"未能显式关闭资源,会让资源打开时长远超预期;在退出 Python 时可能会导致严重问题。这在 CPython 中比较糟糕,但在 PyPy " +"中会更糟。显式关闭资源能让应用程序更加稳定可靠。" + +#: ../../library/devmode.rst:169 +msgid "Bad file descriptor error example" +msgstr "文件描述符错误示例" + +#: ../../library/devmode.rst:171 +msgid "Script displaying the first line of itself::" +msgstr "显示自身的第一行代码:" + +#: ../../library/devmode.rst:184 +msgid "By default, Python does not emit any warning:" +msgstr "默认情况下,Python 不会触发任何警告:" + +#: ../../library/devmode.rst:191 +msgid "" +"The Python Development Mode shows a :exc:`ResourceWarning` and logs a \"Bad " +"file descriptor\" error when finalizing the file object:" +msgstr "" +"在 Python 开发模式下,会在析构文件对象时显示 :exc:`ResourceWarning` 并记录 “Bad file descriptor” " +"错误。" + +#: ../../library/devmode.rst:207 +msgid "" +"``os.close(fp.fileno())`` closes the file descriptor. When the file object " +"finalizer tries to close the file descriptor again, it fails with the ``Bad " +"file descriptor`` error. A file descriptor must be closed only once. In the " +"worst case scenario, closing it twice can lead to a crash (see " +":issue:`18748` for an example)." +msgstr "" +"``os.close(fp.fileno())`` 会关闭文件描述符。当文件对象析构函数试图再次关闭文件描述符时会失败,并触发 ``Bad file " +"descriptor`` 错误。每个文件描述符只允许关闭一次。在最坏的情况下,关闭两次会导致程序崩溃(示例可参见 :issue:`18748` )。" + +#: ../../library/devmode.rst:213 +msgid "" +"The fix is to remove the ``os.close(fp.fileno())`` line, or open the file " +"with ``closefd=False``." +msgstr "修正方案是删除 ``os.close(fp.fileno())`` 这一行,或者打开文件时带上 ``closefd=False`` 参数。" diff --git a/library/dialog.po b/library/dialog.po new file mode 100644 index 000000000..3686e060a --- /dev/null +++ b/library/dialog.po @@ -0,0 +1,293 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) 2001-2022, Python Software Foundation +# This file is distributed under the same license as the Python package. +# FIRST AUTHOR , YEAR. +# +# Translators: +# Leo Li , 2020 +# Dai Xu , 2021 +# Freesand Leo , 2021 +# +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: Python 3.9\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2022-11-04 14:34+0000\n" +"PO-Revision-Date: 2020-05-31 09:29+0000\n" +"Last-Translator: Freesand Leo , 2021\n" +"Language-Team: Chinese (China) (https://www.transifex.com/python-doc/teams/5390/zh_CN/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: zh_CN\n" +"Plural-Forms: nplurals=1; plural=0;\n" + +#: ../../library/dialog.rst:2 +msgid "Tkinter Dialogs" +msgstr "Tkinter 对话框" + +#: ../../library/dialog.rst:5 +msgid ":mod:`tkinter.simpledialog` --- Standard Tkinter input dialogs" +msgstr ":mod:`tkinter.simpledialog` --- 标准 Tkinter 输入对话框" + +#: ../../library/dialog.rst:11 +msgid "**Source code:** :source:`Lib/tkinter/simpledialog.py`" +msgstr "**源码:** :source:`Lib/tkinter/simpledialog.py`" + +#: ../../library/dialog.rst:15 +msgid "" +"The :mod:`tkinter.simpledialog` module contains convenience classes and " +"functions for creating simple modal dialogs to get a value from the user." +msgstr ":mod:`tkinter.simpledialog` 模块包含了一些便捷类和函数,用于创建简单的模态对话框,从用户那里读取一个值。" + +#: ../../library/dialog.rst:23 +msgid "" +"The above three functions provide dialogs that prompt the user to enter a " +"value of the desired type." +msgstr "以上三个函数提供给用户输入期望值的类型的对话框." + +#: ../../library/dialog.rst:28 +msgid "The base class for custom dialogs." +msgstr "自定义对话框的基类." + +#: ../../library/dialog.rst:32 +msgid "" +"Override to construct the dialog's interface and return the widget that " +"should have initial focus." +msgstr "可以覆盖,用于构建对话框的界面,并返回初始焦点所在的部件。" + +#: ../../library/dialog.rst:37 +msgid "" +"Default behaviour adds OK and Cancel buttons. Override for custom button " +"layouts." +msgstr "加入 OK 和 Cancel 按钮的默认行为. 重写自定义按钮布局." + +#: ../../library/dialog.rst:43 +msgid ":mod:`tkinter.filedialog` --- File selection dialogs" +msgstr ":mod:`tkinter.filedialog` --- 文件选择对话框." + +#: ../../library/dialog.rst:49 +msgid "**Source code:** :source:`Lib/tkinter/filedialog.py`" +msgstr "**源码:** :source:`Lib/tkinter/filedialog.py`" + +#: ../../library/dialog.rst:53 +msgid "" +"The :mod:`tkinter.filedialog` module provides classes and factory functions " +"for creating file/directory selection windows." +msgstr ":mod:`tkinter.filedialog` 模块提供了用于创建文件/目录选择窗口的类和工厂函数。" + +#: ../../library/dialog.rst:57 +msgid "Native Load/Save Dialogs" +msgstr "原生 加载/保存 对话框." + +#: ../../library/dialog.rst:59 +msgid "" +"The following classes and functions provide file dialog windows that combine" +" a native look-and-feel with configuration options to customize behaviour. " +"The following keyword arguments are applicable to the classes and functions " +"listed below:" +msgstr "以下类和函数提供了文件对话窗口,这些窗口带有原生外观,具备可定制行为的配置项。这些关键字参数适用于以下类和函数:" + +#: ../../library/dialog.rst:0 +msgid "*parent* - the window to place the dialog on top of" +msgstr "*parent* —— 对话框下方的窗口" + +#: ../../library/dialog.rst:0 +msgid "*title* - the title of the window" +msgstr "*title* —— 窗口的标题" + +#: ../../library/dialog.rst:0 +msgid "*initialdir* - the directory that the dialog starts in" +msgstr "*initialdir* —— 对话框的启动目录" + +#: ../../library/dialog.rst:0 +msgid "*initialfile* - the file selected upon opening of the dialog" +msgstr "*initialfile* —— 打开对话框时选中的文件" + +#: ../../library/dialog.rst:0 +msgid "" +"*filetypes* - a sequence of (label, pattern) tuples, '*' wildcard is allowed" +msgstr "*filetypes* —— (标签,匹配模式)元组构成的列表,允许使用 “*” 通配符" + +#: ../../library/dialog.rst:0 +msgid "" +"*defaultextension* - default extension to append to file (save dialogs)" +msgstr "*defaultextension* —— 默认的扩展名,用于加到文件名后面(保存对话框)。" + +#: ../../library/dialog.rst:0 +msgid "*multiple* - when true, selection of multiple items is allowed" +msgstr "*multiple* —— 为 True 则允许多选" + +#: ../../library/dialog.rst:79 +msgid "**Static factory functions**" +msgstr "** 静态工厂函数 **" + +#: ../../library/dialog.rst:81 +msgid "" +"The below functions when called create a modal, native look-and-feel dialog," +" wait for the user's selection, then return the selected value(s) or " +"``None`` to the caller." +msgstr "调用以下函数时,会创建一个模态的、原生外观的对话框,等待用户选取,然后将选中值或 ``None`` 返回给调用者。" + +#: ../../library/dialog.rst:88 +msgid "" +"The above two functions create an :class:`Open` dialog and return the opened" +" file object(s) in read-only mode." +msgstr "上述两个函数创建了 :class:`Open` 对话框,并以只读模式返回打开的文件对象。" + +#: ../../library/dialog.rst:93 +msgid "" +"Create a :class:`SaveAs` dialog and return a file object opened in write-" +"only mode." +msgstr "创建 :class:`SaveAs` 对话框并返回一个写入模式打开的文件对象。" + +#: ../../library/dialog.rst:98 +msgid "" +"The above two functions create an :class:`Open` dialog and return the " +"selected filename(s) that correspond to existing file(s)." +msgstr "以上两个函数创建了 :class:`Open` 对话框,并返回选中的文件名,对应着已存在的文件。" + +#: ../../library/dialog.rst:103 +msgid "Create a :class:`SaveAs` dialog and return the selected filename." +msgstr "创建 :class:`SaveAs` 对话框,并返回选中的文件名。" + +#: ../../library/dialog.rst:107 +msgid "Prompt user to select a directory." +msgstr "提示用户选择一个目录." + +#: ../../library/dialog.rst:108 +msgid "Additional keyword option:" +msgstr "其他关键字参数:" + +#: ../../library/dialog.rst:109 +msgid "*mustexist* - determines if selection must be an existing directory." +msgstr "*mustexist* —— 确定是否必须为已存在的目录。" + +#: ../../library/dialog.rst:114 +msgid "" +"The above two classes provide native dialog windows for saving and loading " +"files." +msgstr "上述两个类提供了用于保存和加载文件的原生对话窗口。" + +#: ../../library/dialog.rst:117 +msgid "**Convenience classes**" +msgstr "** 便捷类 **" + +#: ../../library/dialog.rst:119 +msgid "" +"The below classes are used for creating file/directory windows from scratch." +" These do not emulate the native look-and-feel of the platform." +msgstr "以下类用于从头开始创建文件/目录窗口。不会模仿当前系统的原生外观。" + +#: ../../library/dialog.rst:124 +msgid "Create a dialog prompting the user to select a directory." +msgstr "创建对话框,提示用户选择一个目录。" + +#: ../../library/dialog.rst:126 +msgid "" +"The *FileDialog* class should be subclassed for custom event handling and " +"behaviour." +msgstr "为了实现自定义的事件处理和行为,应继承 *FileDialog* 类。" + +#: ../../library/dialog.rst:131 +msgid "Create a basic file selection dialog." +msgstr "创建一个简单的文件选择对话框。" + +#: ../../library/dialog.rst:135 +msgid "Trigger the termination of the dialog window." +msgstr "触发对话窗口的终止。" + +#: ../../library/dialog.rst:139 +msgid "Event handler for double-click event on directory." +msgstr "目录双击事件的处理程序。" + +#: ../../library/dialog.rst:143 +msgid "Event handler for click event on directory." +msgstr "目录单击事件的处理程序。" + +#: ../../library/dialog.rst:147 +msgid "Event handler for double-click event on file." +msgstr "文件双击事件的处理程序。" + +#: ../../library/dialog.rst:151 +msgid "Event handler for single-click event on file." +msgstr "文件单击事件的处理程序。" + +#: ../../library/dialog.rst:155 +msgid "Filter the files by directory." +msgstr "以目录过滤文件." + +#: ../../library/dialog.rst:159 +msgid "Retrieve the file filter currently in use." +msgstr "获取当前使用的文件过滤器." + +#: ../../library/dialog.rst:163 +msgid "Retrieve the currently selected item." +msgstr "获取当前选择的项目." + +#: ../../library/dialog.rst:167 +msgid "Render dialog and start event loop." +msgstr "渲染对话和启动事件循环," + +#: ../../library/dialog.rst:171 +msgid "Exit dialog returning current selection." +msgstr "退出对话回到当前选择." + +#: ../../library/dialog.rst:175 +msgid "Exit dialog returning filename, if any." +msgstr "退出对话回到文件名, 如果有的话." + +#: ../../library/dialog.rst:179 +msgid "Set the file filter." +msgstr "设置文件过滤器." + +#: ../../library/dialog.rst:183 +msgid "Update the current file selection to *file*." +msgstr "将当前选中文件更新为 *file*。" + +#: ../../library/dialog.rst:188 +msgid "" +"A subclass of FileDialog that creates a dialog window for selecting an " +"existing file." +msgstr "FileDialog 的一个子类,为选择已有文件创建对话窗口。" + +#: ../../library/dialog.rst:193 +msgid "" +"Test that a file is provided and that the selection indicates an already " +"existing file." +msgstr "检测有否给出文件,以及选中的文件是否存在。" + +#: ../../library/dialog.rst:198 +msgid "" +"A subclass of FileDialog that creates a dialog window for selecting a " +"destination file." +msgstr "FileDialog 的一个子类,创建用于选择目标文件的对话窗口。" + +#: ../../library/dialog.rst:203 +msgid "" +"Test whether or not the selection points to a valid file that is not a " +"directory. Confirmation is required if an already existing file is selected." +msgstr "检测选中文件是否为目录。如果选中已存在文件,则需要进行确认。" + +#: ../../library/dialog.rst:208 +msgid ":mod:`tkinter.commondialog` --- Dialog window templates" +msgstr ":mod:`tkinter.commondialog` --- 对话窗口模板" + +#: ../../library/dialog.rst:214 +msgid "**Source code:** :source:`Lib/tkinter/commondialog.py`" +msgstr "**源码:** :source:`Lib/tkinter/commondialog.py`" + +#: ../../library/dialog.rst:218 +msgid "" +"The :mod:`tkinter.commondialog` module provides the :class:`Dialog` class " +"that is the base class for dialogs defined in other supporting modules." +msgstr ":mod:`tkinter.commondialog` 模块提供了 :class:`Dialog` 类,是其他模块定义的对话框的基类。" + +#: ../../library/dialog.rst:225 +msgid "Render the Dialog window." +msgstr "渲染对话窗口." + +#: ../../library/dialog.rst:230 +msgid "Modules :mod:`tkinter.messagebox`, :ref:`tut-files`" +msgstr "模块 :mod:`tkinter.messagebox`, :ref:`tut-files`" diff --git a/library/difflib.po b/library/difflib.po new file mode 100644 index 000000000..e10b21c21 --- /dev/null +++ b/library/difflib.po @@ -0,0 +1,956 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) 2001-2024, Python Software Foundation +# This file is distributed under the same license as the Python package. +# FIRST AUTHOR , YEAR. +# +# Translators: +# shiyu Peng , 2019 +# Zombie110year , 2019 +# ppcfish , 2019 +# Freesand Leo , 2020 +# Rafael Fontenelle , 2024 +# +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: Python 3.9\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2024-02-16 21:12+0000\n" +"PO-Revision-Date: 2017-02-16 23:06+0000\n" +"Last-Translator: Rafael Fontenelle , 2024\n" +"Language-Team: Chinese (China) (https://app.transifex.com/python-doc/teams/5390/zh_CN/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: zh_CN\n" +"Plural-Forms: nplurals=1; plural=0;\n" + +#: ../../library/difflib.rst:2 +msgid ":mod:`difflib` --- Helpers for computing deltas" +msgstr ":mod:`difflib` --- 计算差异的辅助工具" + +#: ../../library/difflib.rst:11 +msgid "**Source code:** :source:`Lib/difflib.py`" +msgstr "**源代码:** :source:`Lib/difflib.py`" + +#: ../../library/difflib.rst:20 +msgid "" +"This module provides classes and functions for comparing sequences. It can " +"be used for example, for comparing files, and can produce information about " +"file differences in various formats, including HTML and context and unified " +"diffs. For comparing directories and files, see also, the :mod:`filecmp` " +"module." +msgstr "" +"此模块提供用于比较序列的类和函数。 例如,它可被用于比较文件,并可产生多种格式的不同文件差异信息,包括 HTML 和上下文以及统一的 diff 数据。 " +"有关比较目录和文件,另请参阅 :mod:`filecmp` 模块。" + +#: ../../library/difflib.rst:29 +msgid "" +"This is a flexible class for comparing pairs of sequences of any type, so " +"long as the sequence elements are :term:`hashable`. The basic algorithm " +"predates, and is a little fancier than, an algorithm published in the late " +"1980's by Ratcliff and Obershelp under the hyperbolic name \"gestalt pattern" +" matching.\" The idea is to find the longest contiguous matching " +"subsequence that contains no \"junk\" elements; these \"junk\" elements are " +"ones that are uninteresting in some sense, such as blank lines or " +"whitespace. (Handling junk is an extension to the Ratcliff and Obershelp " +"algorithm.) The same idea is then applied recursively to the pieces of the " +"sequences to the left and to the right of the matching subsequence. This " +"does not yield minimal edit sequences, but does tend to yield matches that " +"\"look right\" to people." +msgstr "" +"这是一个灵活的类,可用于比较任何类型的序列对,只要序列元素为 :term:`hashable` 对象。 其基本算法要早于由 Ratcliff 和 " +"Obershelp 于 1980 年代末期发表并以“格式塔模式匹配”的夸张名称命名的算法,并且更加有趣一些。 " +"其思路是找到不包含“垃圾”元素的最长连续匹配子序列;所谓“垃圾”元素是指其在某种意义上没有价值,例如空白行或空白符。 (处理垃圾元素是对 " +"Ratcliff 和 Obershelp 算法的一个扩展。) 然后同样的思路将递归地应用于匹配序列的左右序列片段。 " +"这并不能产生最小编辑序列,但确实能产生在人们看来“正确”的匹配。" + +#: ../../library/difflib.rst:41 +msgid "" +"**Timing:** The basic Ratcliff-Obershelp algorithm is cubic time in the " +"worst case and quadratic time in the expected case. :class:`SequenceMatcher`" +" is quadratic time for the worst case and has expected-case behavior " +"dependent in a complicated way on how many elements the sequences have in " +"common; best case time is linear." +msgstr "" +"**耗时:** 基本 Ratcliff-Obershelp 算法在最坏情况下为立方时间而在一般情况下为平方时间。 " +":class:`SequenceMatcher` " +"在最坏情况下为平方时间而在一般情况下的行为受到序列中有多少相同元素这一因素的微妙影响;在最佳情况下则为线性时间。" + +#: ../../library/difflib.rst:47 +msgid "" +"**Automatic junk heuristic:** :class:`SequenceMatcher` supports a heuristic " +"that automatically treats certain sequence items as junk. The heuristic " +"counts how many times each individual item appears in the sequence. If an " +"item's duplicates (after the first one) account for more than 1% of the " +"sequence and the sequence is at least 200 items long, this item is marked as" +" \"popular\" and is treated as junk for the purpose of sequence matching. " +"This heuristic can be turned off by setting the ``autojunk`` argument to " +"``False`` when creating the :class:`SequenceMatcher`." +msgstr "" +"**自动垃圾启发式计算:** :class:`SequenceMatcher` 支持使用启发式计算来自动将特定序列项视为垃圾。 " +"这种启发式计算会统计每个单独项在序列中出现的次数。 如果某一项(在第一项之后)的重复次数超过序列长度的 1% 并且序列长度至少有 200 " +"项,该项会被标记为“热门”并被视为序列匹配中的垃圾。 这种启发式计算可以通过在创建 :class:`SequenceMatcher` 时将 " +"``autojunk`` 参数设为 ``False`` 来关闭。" + +#: ../../library/difflib.rst:55 ../../library/difflib.rst:388 +msgid "The *autojunk* parameter." +msgstr "*autojunk* 形参。" + +#: ../../library/difflib.rst:61 +msgid "" +"This is a class for comparing sequences of lines of text, and producing " +"human-readable differences or deltas. Differ uses :class:`SequenceMatcher` " +"both to compare sequences of lines, and to compare sequences of characters " +"within similar (near-matching) lines." +msgstr "" +"这个类的作用是比较由文本行组成的序列,并产生可供人阅读的差异或增量信息。 Differ 统一使用 :class:`SequenceMatcher` " +"来完成行序列的比较以及相似(接近匹配)行内部字符序列的比较。" + +#: ../../library/difflib.rst:66 +msgid "Each line of a :class:`Differ` delta begins with a two-letter code:" +msgstr ":class:`Differ` 增量的每一行均以双字母代码打头:" + +#: ../../library/difflib.rst:69 +msgid "Code" +msgstr "双字母代码" + +#: ../../library/difflib.rst:69 ../../library/difflib.rst:498 +msgid "Meaning" +msgstr "含意" + +#: ../../library/difflib.rst:71 +msgid "``'- '``" +msgstr "``'- '``" + +#: ../../library/difflib.rst:71 +msgid "line unique to sequence 1" +msgstr "行为序列 1 所独有" + +#: ../../library/difflib.rst:73 +msgid "``'+ '``" +msgstr "``'+ '``" + +#: ../../library/difflib.rst:73 +msgid "line unique to sequence 2" +msgstr "行为序列 2 所独有" + +#: ../../library/difflib.rst:75 +msgid "``' '``" +msgstr "``' '``" + +#: ../../library/difflib.rst:75 +msgid "line common to both sequences" +msgstr "行在两序列中相同" + +#: ../../library/difflib.rst:77 +msgid "``'? '``" +msgstr "``'? '``" + +#: ../../library/difflib.rst:77 +msgid "line not present in either input sequence" +msgstr "行不存在于任一输入序列" + +#: ../../library/difflib.rst:80 +msgid "" +"Lines beginning with '``?``' attempt to guide the eye to intraline " +"differences, and were not present in either input sequence. These lines can " +"be confusing if the sequences contain tab characters." +msgstr "以 '``?``' 打头的行尝试将视线引至行以外而不存在于任一输入序列的差异。 如果序列包含制表符则这些行可能会令人感到迷惑。" + +#: ../../library/difflib.rst:87 +msgid "" +"This class can be used to create an HTML table (or a complete HTML file " +"containing the table) showing a side by side, line by line comparison of " +"text with inter-line and intra-line change highlights. The table can be " +"generated in either full or contextual difference mode." +msgstr "" +"这个类可用于创建 HTML 表格(或包含表格的完整 HTML 文件)以并排地逐行显示文本比较,行间与行外的更改将突出显示。 " +"此表格可以基于完全或上下文差异模式来生成。" + +#: ../../library/difflib.rst:92 +msgid "The constructor for this class is:" +msgstr "这个类的构造函数:" + +#: ../../library/difflib.rst:97 +msgid "Initializes instance of :class:`HtmlDiff`." +msgstr "初始化 :class:`HtmlDiff` 的实例。" + +#: ../../library/difflib.rst:99 +msgid "" +"*tabsize* is an optional keyword argument to specify tab stop spacing and " +"defaults to ``8``." +msgstr "*tabsize* 是一个可选关键字参数,指定制表位的间隔,默认值为 ``8``。" + +#: ../../library/difflib.rst:102 +msgid "" +"*wrapcolumn* is an optional keyword to specify column number where lines are" +" broken and wrapped, defaults to ``None`` where lines are not wrapped." +msgstr "*wrapcolumn* 是一个可选关键字参数,指定行文本自动打断并换行的列位置,默认值为 ``None`` 表示不自动换行。" + +#: ../../library/difflib.rst:105 +msgid "" +"*linejunk* and *charjunk* are optional keyword arguments passed into " +":func:`ndiff` (used by :class:`HtmlDiff` to generate the side by side HTML " +"differences). See :func:`ndiff` documentation for argument default values " +"and descriptions." +msgstr "" +"*linejunk* 和 *charjunk* 均是可选关键字参数,会传入 :func:`ndiff` (被 :class:`HtmlDiff` " +"用来生成并排显示的 HTML 差异)。 请参阅 :func:`ndiff` 文档了解参数默认值及其说明。" + +#: ../../library/difflib.rst:109 +msgid "The following methods are public:" +msgstr "下列是公开的方法" + +#: ../../library/difflib.rst:114 +msgid "" +"Compares *fromlines* and *tolines* (lists of strings) and returns a string " +"which is a complete HTML file containing a table showing line by line " +"differences with inter-line and intra-line changes highlighted." +msgstr "" +"比较 *fromlines* 和 *tolines* (字符串列表) 并返回一个字符串,表示一个完整 HTML " +"文件,其中包含各行差异的表格,行间与行外的更改将突出显示。" + +#: ../../library/difflib.rst:118 +msgid "" +"*fromdesc* and *todesc* are optional keyword arguments to specify from/to " +"file column header strings (both default to an empty string)." +msgstr "*fromdesc* 和 *todesc* 均是可选关键字参数,指定来源/目标文件的列标题字符串(默认均为空白字符串)。" + +#: ../../library/difflib.rst:121 +msgid "" +"*context* and *numlines* are both optional keyword arguments. Set *context* " +"to ``True`` when contextual differences are to be shown, else the default is" +" ``False`` to show the full files. *numlines* defaults to ``5``. When " +"*context* is ``True`` *numlines* controls the number of context lines which " +"surround the difference highlights. When *context* is ``False`` *numlines* " +"controls the number of lines which are shown before a difference highlight " +"when using the \"next\" hyperlinks (setting to zero would cause the \"next\"" +" hyperlinks to place the next difference highlight at the top of the browser" +" without any leading context)." +msgstr "" +"*context* 和 *numlines* 均是可选关键字参数。 当只要显示上下文差异时就将 *context* 设为 ``True``,否则默认值 " +"``False`` 为显示完整文件。 *numlines* 默认为 ``5``。 当 *context* 为 ``True`` 时 *numlines*" +" 将控制围绕突出显示差异部分的上下文行数。 当 *context* 为 ``False`` 时 *numlines* 将控制在使用 \"next\" " +"超链接时突出显示差异部分之前所显示的行数(设为零则会导致 \"next\" 超链接将下一个突出显示差异部分放在浏览器顶端,不添加任何前导上下文)。" + +#: ../../library/difflib.rst:132 +msgid "" +"*fromdesc* and *todesc* are interpreted as unescaped HTML and should be " +"properly escaped while receiving input from untrusted sources." +msgstr "*fromdesc* 和 *todesc* 会被当作未转义的 HTML 来解读,当接收不可信来源的输入时应该适当地进行转义。" + +#: ../../library/difflib.rst:135 +msgid "" +"*charset* keyword-only argument was added. The default charset of HTML " +"document changed from ``'ISO-8859-1'`` to ``'utf-8'``." +msgstr "增加了 *charset* 关键字参数。 HTML 文档的默认字符集从 ``'ISO-8859-1'`` 更改为 ``'utf-8'``。" + +#: ../../library/difflib.rst:141 +msgid "" +"Compares *fromlines* and *tolines* (lists of strings) and returns a string " +"which is a complete HTML table showing line by line differences with inter-" +"line and intra-line changes highlighted." +msgstr "" +"比较 *fromlines* 和 *tolines* (字符串列表) 并返回一个字符串,表示一个包含各行差异的完整 HTML " +"表格,行间与行外的更改将突出显示。" + +#: ../../library/difflib.rst:145 +msgid "" +"The arguments for this method are the same as those for the " +":meth:`make_file` method." +msgstr "此方法的参数与 :meth:`make_file` 方法的相同。" + +#: ../../library/difflib.rst:148 +msgid "" +":file:`Tools/scripts/diff.py` is a command-line front-end to this class and " +"contains a good example of its use." +msgstr ":file:`Tools/scripts/diff.py` 是这个类的命令行前端,其中包含一个很好的使用示例。" + +#: ../../library/difflib.rst:154 +msgid "" +"Compare *a* and *b* (lists of strings); return a delta (a :term:`generator` " +"generating the delta lines) in context diff format." +msgstr "比较 *a* 和 *b* (字符串列表);返回上下文差异格式的增量信息 (一个产生增量行的 :term:`generator`)。" + +#: ../../library/difflib.rst:157 +msgid "" +"Context diffs are a compact way of showing just the lines that have changed " +"plus a few lines of context. The changes are shown in a before/after style." +" The number of context lines is set by *n* which defaults to three." +msgstr "所谓上下文差异是一种只显示有更改的行再加几个上下文行的紧凑形式。 更改被显示为之前/之后的样式。 上下文行数由 *n* 设定,默认为三行。" + +#: ../../library/difflib.rst:161 +msgid "" +"By default, the diff control lines (those with ``***`` or ``---``) are " +"created with a trailing newline. This is helpful so that inputs created " +"from :func:`io.IOBase.readlines` result in diffs that are suitable for use " +"with :func:`io.IOBase.writelines` since both the inputs and outputs have " +"trailing newlines." +msgstr "" +"默认情况下,差异控制行(以 ``***`` or ``---`` 表示)是通过末尾换行符来创建的。 这样做的好处是从 " +":func:`io.IOBase.readlines` 创建的输入将得到适用于 :func:`io.IOBase.writelines` " +"的差异信息,因为输入和输出都带有末尾换行符。" + +#: ../../library/difflib.rst:167 ../../library/difflib.rst:298 +msgid "" +"For inputs that do not have trailing newlines, set the *lineterm* argument " +"to ``\"\"`` so that the output will be uniformly newline free." +msgstr "对于没有末尾换行符的输入,应将 *lineterm* 参数设为 ``\"\"``,这样输出内容将统一不带换行符。" + +#: ../../library/difflib.rst:170 ../../library/difflib.rst:301 +msgid "" +"The context diff format normally has a header for filenames and modification" +" times. Any or all of these may be specified using strings for *fromfile*, " +"*tofile*, *fromfiledate*, and *tofiledate*. The modification times are " +"normally expressed in the ISO 8601 format. If not specified, the strings " +"default to blanks." +msgstr "" +"上下文差异格式通常带有一个记录文件名和修改时间的标头。 这些信息的部分或全部可以使用字符串 *fromfile*, *tofile*, " +"*fromfiledate* 和 *tofiledate* 来指定。 修改时间通常以 ISO 8601 格式表示。 如果未指定,这些字符串默认为空。" + +#: ../../library/difflib.rst:193 ../../library/difflib.rst:322 +msgid "See :ref:`difflib-interface` for a more detailed example." +msgstr "请参阅 :ref:`difflib-interface` 获取更详细的示例。" + +#: ../../library/difflib.rst:198 +msgid "" +"Return a list of the best \"good enough\" matches. *word* is a sequence for" +" which close matches are desired (typically a string), and *possibilities* " +"is a list of sequences against which to match *word* (typically a list of " +"strings)." +msgstr "" +"返回由最佳“近似”匹配构成的列表。 *word* 为一个指定目标近似匹配的序列(通常为字符串),*possibilities* 为一个由用于匹配 " +"*word* 的序列构成的列表(通常为字符串列表)。" + +#: ../../library/difflib.rst:202 +msgid "" +"Optional argument *n* (default ``3``) is the maximum number of close matches" +" to return; *n* must be greater than ``0``." +msgstr "可选参数 *n* (默认为 ``3``) 指定最多返回多少个近似匹配; *n* 必须大于 ``0``." + +#: ../../library/difflib.rst:205 +msgid "" +"Optional argument *cutoff* (default ``0.6``) is a float in the range [0, 1]." +" Possibilities that don't score at least that similar to *word* are ignored." +msgstr "" +"可选参数 *cutoff* (默认为 ``0.6``) 是一个 [0, 1] 范围内的浮点数。 与 *word* " +"相似度得分未达到该值的候选匹配将被忽略。" + +#: ../../library/difflib.rst:208 +msgid "" +"The best (no more than *n*) matches among the possibilities are returned in " +"a list, sorted by similarity score, most similar first." +msgstr "候选匹配中(不超过 *n* 个)的最佳匹配将以列表形式返回,按相似度得分排序,最相似的排在最前面。" + +#: ../../library/difflib.rst:224 +msgid "" +"Compare *a* and *b* (lists of strings); return a :class:`Differ`\\ -style " +"delta (a :term:`generator` generating the delta lines)." +msgstr "" +"比较 *a* 和 *b* (字符串列表);返回 :class:`Differ` 形式的增量信息 (一个产生增量行的 " +":term:`generator`)。" + +#: ../../library/difflib.rst:227 +msgid "" +"Optional keyword parameters *linejunk* and *charjunk* are filtering " +"functions (or ``None``):" +msgstr "可选关键字形参 *linejunk* 和 *charjunk* 均为过滤函数 (或为 ``None``):" + +#: ../../library/difflib.rst:230 +msgid "" +"*linejunk*: A function that accepts a single string argument, and returns " +"true if the string is junk, or false if not. The default is ``None``. There " +"is also a module-level function :func:`IS_LINE_JUNK`, which filters out " +"lines without visible characters, except for at most one pound character " +"(``'#'``) -- however the underlying :class:`SequenceMatcher` class does a " +"dynamic analysis of which lines are so frequent as to constitute noise, and " +"this usually works better than using this function." +msgstr "" +"*linejunk*: 此函数接受单个字符串参数,如果其为垃圾字符串则返回真值,否则返回假值。 默认为 ``None``。 此外还有一个模块层级的函数 " +":func:`IS_LINE_JUNK`,它会过滤掉没有可见字符的行,除非该行添加了至多一个井号符 (``'#'``) -- 但是下层的 " +":class:`SequenceMatcher` 类会动态分析哪些行的重复频繁到足以形成噪音,这通常会比使用此函数的效果更好。" + +#: ../../library/difflib.rst:238 +msgid "" +"*charjunk*: A function that accepts a character (a string of length 1), and " +"returns if the character is junk, or false if not. The default is module-" +"level function :func:`IS_CHARACTER_JUNK`, which filters out whitespace " +"characters (a blank or tab; it's a bad idea to include newline in this!)." +msgstr "" +"*charjunk*: 此函数接受一个字符(长度为 1 的字符串),如果其为垃圾字符则返回真值,否则返回假值。 默认为模块层级的函数 " +":func:`IS_CHARACTER_JUNK`,它会过滤掉空白字符(空格符或制表符;但包含换行符可不是个好主意!)。" + +#: ../../library/difflib.rst:243 +msgid "" +":file:`Tools/scripts/ndiff.py` is a command-line front-end to this function." +msgstr ":file:`Tools/scripts/ndiff.py` 是这个函数的命令行前端。" + +#: ../../library/difflib.rst:261 +msgid "Return one of the two sequences that generated a delta." +msgstr "返回两个序列中产生增量的那一个。" + +#: ../../library/difflib.rst:263 +msgid "" +"Given a *sequence* produced by :meth:`Differ.compare` or :func:`ndiff`, " +"extract lines originating from file 1 or 2 (parameter *which*), stripping " +"off line prefixes." +msgstr "" +"给出一个由 :meth:`Differ.compare` 或 :func:`ndiff` 产生的 *序列*,提取出来自文件 1 或 2 (*which*" +" 形参) 的行,去除行前缀。" + +#: ../../library/difflib.rst:267 +msgid "Example:" +msgstr "示例:" + +#: ../../library/difflib.rst:284 +msgid "" +"Compare *a* and *b* (lists of strings); return a delta (a :term:`generator` " +"generating the delta lines) in unified diff format." +msgstr "比较 *a* 和 *b* (字符串列表);返回统一差异格式的增量信息 (一个产生增量行的 :term:`generator`)。" + +#: ../../library/difflib.rst:287 +msgid "" +"Unified diffs are a compact way of showing just the lines that have changed " +"plus a few lines of context. The changes are shown in an inline style " +"(instead of separate before/after blocks). The number of context lines is " +"set by *n* which defaults to three." +msgstr "" +"所以统一差异是一种只显示有更改的行再加几个上下文行的紧凑形式。 更改被显示为内联的样式(而不是分开的之前/之后文本块)。 上下文行数由 *n* " +"设定,默认为三行。" + +#: ../../library/difflib.rst:292 +msgid "" +"By default, the diff control lines (those with ``---``, ``+++``, or ``@@``) " +"are created with a trailing newline. This is helpful so that inputs created" +" from :func:`io.IOBase.readlines` result in diffs that are suitable for use " +"with :func:`io.IOBase.writelines` since both the inputs and outputs have " +"trailing newlines." +msgstr "" +"默认情况下,差异控制行 (以 ``---``, ``+++`` 或 ``@@`` 表示) 是通过末尾换行符来创建的。 这样做的好处是从 " +":func:`io.IOBase.readlines` 创建的输入将得到适用于 :func:`io.IOBase.writelines` " +"的差异信息,因为输入和输出都带有末尾换行符。" + +#: ../../library/difflib.rst:326 +msgid "" +"Compare *a* and *b* (lists of bytes objects) using *dfunc*; yield a sequence" +" of delta lines (also bytes) in the format returned by *dfunc*. *dfunc* must" +" be a callable, typically either :func:`unified_diff` or " +":func:`context_diff`." +msgstr "" +"使用 *dfunc* 比较 *a* 和 *b* (字节串对象列表);产生以 *dfunc* 所返回格式表示的差异行列表(也是字节串)。 *dfunc* " +"必须是可调用对象,通常为 :func:`unified_diff` 或 :func:`context_diff`。" + +#: ../../library/difflib.rst:331 +msgid "" +"Allows you to compare data with unknown or inconsistent encoding. All inputs" +" except *n* must be bytes objects, not str. Works by losslessly converting " +"all inputs (except *n*) to str, and calling ``dfunc(a, b, fromfile, tofile, " +"fromfiledate, tofiledate, n, lineterm)``. The output of *dfunc* is then " +"converted back to bytes, so the delta lines that you receive have the same " +"unknown/inconsistent encodings as *a* and *b*." +msgstr "" +"允许你比较编码未知或不一致的数据。 除 *n* 之外的所有输入都必须为字节串对象而非字符串。 作用方式为无损地将所有输入 (除 *n* 之外) " +"转换为字符串,并调用 ``dfunc(a, b, fromfile, tofile, fromfiledate, tofiledate, n, " +"lineterm)``。 *dfunc* 的输出会被随即转换回字节串,这样你所得到的增量行将具有与 *a* 和 *b* 相同的未知/不一致编码。" + +#: ../../library/difflib.rst:342 +msgid "" +"Return ``True`` for ignorable lines. The line *line* is ignorable if *line*" +" is blank or contains a single ``'#'``, otherwise it is not ignorable. Used" +" as a default for parameter *linejunk* in :func:`ndiff` in older versions." +msgstr "" +"对于可忽略的行返回 ``True``。 如果 *line* 为空行或只包含单个 ``'#'`` 则 *line* 行就是可忽略的,否则就是不可忽略的。 " +"此函数被用作较旧版本 :func:`ndiff` 中 *linejunk* 形参的默认值。" + +#: ../../library/difflib.rst:349 +msgid "" +"Return ``True`` for ignorable characters. The character *ch* is ignorable " +"if *ch* is a space or tab, otherwise it is not ignorable. Used as a default" +" for parameter *charjunk* in :func:`ndiff`." +msgstr "" +"对于可忽略的字符返回 ``True``。 字符 *ch* 如果为空格符或制表符则 *ch* 就是可忽略的,否则就是不可忽略的。 此函数被用作 " +":func:`ndiff` 中 *charjunk* 形参的默认值。" + +#: ../../library/difflib.rst:357 +msgid "" +"`Pattern Matching: The Gestalt Approach " +"`_" +msgstr "" +"`模式匹配:格式塔方法 `_" + +#: ../../library/difflib.rst:357 +msgid "" +"Discussion of a similar algorithm by John W. Ratcliff and D. E. Metzener. " +"This was published in `Dr. Dobb's Journal `_ in " +"July, 1988." +msgstr "" +"John W. Ratcliff 和 D. E. Metzener 对于一种类似算法的讨论。 此文于 1988 年 7 月发表于 `Dr. Dobb's" +" Journal `_。" + +#: ../../library/difflib.rst:364 +msgid "SequenceMatcher Objects" +msgstr "SequenceMatcher 对象" + +#: ../../library/difflib.rst:366 +msgid "The :class:`SequenceMatcher` class has this constructor:" +msgstr ":class:`SequenceMatcher` 类具有这样的构造器:" + +#: ../../library/difflib.rst:371 +msgid "" +"Optional argument *isjunk* must be ``None`` (the default) or a one-argument " +"function that takes a sequence element and returns true if and only if the " +"element is \"junk\" and should be ignored. Passing ``None`` for *isjunk* is " +"equivalent to passing ``lambda x: False``; in other words, no elements are " +"ignored. For example, pass::" +msgstr "" +"可选参数 *isjunk* 必须为 ``None`` (默认值) 或为接受一个序列元素并当且仅当其为应忽略的“垃圾”元素时返回真值的单参数函数。 传入 " +"``None`` 作为 *isjunk* 的值就相当于传入 ``lambda x: False``;也就是说不忽略任何值。 例如,传入::" + +#: ../../library/difflib.rst:379 +msgid "" +"if you're comparing lines as sequences of characters, and don't want to " +"synch up on blanks or hard tabs." +msgstr "如果你以字符序列的形式对行进行比较,并且不希望区分空格符或硬制表符。" + +#: ../../library/difflib.rst:382 +msgid "" +"The optional arguments *a* and *b* are sequences to be compared; both " +"default to empty strings. The elements of both sequences must be " +":term:`hashable`." +msgstr "可选参数 *a* 和 *b* 为要比较的序列;两者默认为空字符串。 两个序列的元素都必须为 :term:`hashable`。" + +#: ../../library/difflib.rst:385 +msgid "" +"The optional argument *autojunk* can be used to disable the automatic junk " +"heuristic." +msgstr "可选参数 *autojunk* 可用于启用自动垃圾启发式计算。" + +#: ../../library/difflib.rst:391 +msgid "" +"SequenceMatcher objects get three data attributes: *bjunk* is the set of " +"elements of *b* for which *isjunk* is ``True``; *bpopular* is the set of " +"non-junk elements considered popular by the heuristic (if it is not " +"disabled); *b2j* is a dict mapping the remaining elements of *b* to a list " +"of positions where they occur. All three are reset whenever *b* is reset " +"with :meth:`set_seqs` or :meth:`set_seq2`." +msgstr "" +"SequenceMatcher 对象接受三个数据属性: *bjunk* 是 *b* 当中 *isjunk* 为 ``True`` " +"的元素集合;*bpopular* 是被启发式计算(如果其未被禁用)视为热门候选的非垃圾元素集合;*b2j* 是将 *b* " +"当中剩余元素映射到一个它们出现位置列表的字典。 所有三个数据属性将在 *b* 通过 :meth:`set_seqs` 或 " +":meth:`set_seq2` 重置时被重置。" + +#: ../../library/difflib.rst:398 +msgid "The *bjunk* and *bpopular* attributes." +msgstr "*bjunk* 和 *bpopular* 属性。" + +#: ../../library/difflib.rst:401 +msgid ":class:`SequenceMatcher` objects have the following methods:" +msgstr ":class:`SequenceMatcher` 对象具有以下方法:" + +#: ../../library/difflib.rst:405 +msgid "Set the two sequences to be compared." +msgstr "设置要比较的两个序列。" + +#: ../../library/difflib.rst:407 +msgid "" +":class:`SequenceMatcher` computes and caches detailed information about the " +"second sequence, so if you want to compare one sequence against many " +"sequences, use :meth:`set_seq2` to set the commonly used sequence once and " +"call :meth:`set_seq1` repeatedly, once for each of the other sequences." +msgstr "" +":class:`SequenceMatcher` 计算并缓存有关第二个序列的详细信息,这样如果你想要将一个序列与多个序列进行比较,可使用 " +":meth:`set_seq2` 一次性地设置该常用序列并重复地对每个其他序列各调用一次 :meth:`set_seq1`。" + +#: ../../library/difflib.rst:415 +msgid "" +"Set the first sequence to be compared. The second sequence to be compared " +"is not changed." +msgstr "设置要比较的第一个序列。 要比较的第二个序列不会改变。" + +#: ../../library/difflib.rst:421 +msgid "" +"Set the second sequence to be compared. The first sequence to be compared " +"is not changed." +msgstr "设置要比较的第二个序列。 要比较的第一个序列不会改变。" + +#: ../../library/difflib.rst:427 +msgid "Find longest matching block in ``a[alo:ahi]`` and ``b[blo:bhi]``." +msgstr "找出 ``a[alo:ahi]`` 和 ``b[blo:bhi]`` 中的最长匹配块。" + +#: ../../library/difflib.rst:429 +msgid "" +"If *isjunk* was omitted or ``None``, :meth:`find_longest_match` returns " +"``(i, j, k)`` such that ``a[i:i+k]`` is equal to ``b[j:j+k]``, where ``alo " +"<= i <= i+k <= ahi`` and ``blo <= j <= j+k <= bhi``. For all ``(i', j', " +"k')`` meeting those conditions, the additional conditions ``k >= k'``, ``i " +"<= i'``, and if ``i == i'``, ``j <= j'`` are also met. In other words, of " +"all maximal matching blocks, return one that starts earliest in *a*, and of " +"all those maximal matching blocks that start earliest in *a*, return the one" +" that starts earliest in *b*." +msgstr "" +"如果 *isjunk* 被省略或为 ``None``,:meth:`find_longest_match` 将返回 ``(i, j, k)`` 使得 " +"``a[i:i+k]`` 等于 ``b[j:j+k]``,其中 ``alo <= i <= i+k <= ahi`` 并且 ``blo <= j <= " +"j+k <= bhi``。 对于所有满足这些条件的 ``(i', j', k')``,如果 ``i == i'``, ``j <= j'`` " +"也被满足,则附加条件 ``k >= k'``, ``i <= i'``。 换句话说,对于所有最长匹配块,返回在 *a* 当中最先出现的一个,而对于在 " +"*a* 当中最先出现的所有最长匹配块,则返回在 *b* 当中最先出现的一个。" + +#: ../../library/difflib.rst:442 +msgid "" +"If *isjunk* was provided, first the longest matching block is determined as " +"above, but with the additional restriction that no junk element appears in " +"the block. Then that block is extended as far as possible by matching " +"(only) junk elements on both sides. So the resulting block never matches on " +"junk except as identical junk happens to be adjacent to an interesting " +"match." +msgstr "" +"如果提供了 *isjunk*,将按上述规则确定第一个最长匹配块,但额外附加不允许块内出现垃圾元素的限制。 " +"然后将通过(仅)匹配两边的垃圾元素来尽可能地扩展该块。 这样结果块绝对不会匹配垃圾元素,除非同样的垃圾元素正好与有意义的匹配相邻。" + +#: ../../library/difflib.rst:449 +msgid "" +"Here's the same example as before, but considering blanks to be junk. That " +"prevents ``' abcd'`` from matching the ``' abcd'`` at the tail end of the " +"second sequence directly. Instead only the ``'abcd'`` can match, and " +"matches the leftmost ``'abcd'`` in the second sequence:" +msgstr "" +"这是与之前相同的例子,但是将空格符视为垃圾。 这将防止 ``' abcd'`` 直接与第二个序列末尾的 ``' abcd'`` 相匹配。 而只可以匹配 " +"``'abcd'``,并且是匹配第二个序列最左边的 ``'abcd'``:" + +#: ../../library/difflib.rst:458 +msgid "If no blocks match, this returns ``(alo, blo, 0)``." +msgstr "如果未找到匹配块,此方法将返回 ``(alo, blo, 0)``。" + +#: ../../library/difflib.rst:460 +msgid "This method returns a :term:`named tuple` ``Match(a, b, size)``." +msgstr "此方法将返回一个 :term:`named tuple` ``Match(a, b, size)``。" + +#: ../../library/difflib.rst:462 +msgid "Added default arguments." +msgstr "加入默认参数。" + +#: ../../library/difflib.rst:468 +msgid "" +"Return list of triples describing non-overlapping matching subsequences. " +"Each triple is of the form ``(i, j, n)``, and means that ``a[i:i+n] == " +"b[j:j+n]``. The triples are monotonically increasing in *i* and *j*." +msgstr "" +"返回描述非重叠匹配子序列的三元组列表。 每个三元组的形式为 ``(i, j, n)``,其含义为 ``a[i:i+n] == b[j:j+n]``。 " +"这些三元组按 *i* 和 *j* 单调递增排列。" + +#: ../../library/difflib.rst:473 +msgid "" +"The last triple is a dummy, and has the value ``(len(a), len(b), 0)``. It " +"is the only triple with ``n == 0``. If ``(i, j, n)`` and ``(i', j', n')`` " +"are adjacent triples in the list, and the second is not the last triple in " +"the list, then ``i+n < i'`` or ``j+n < j'``; in other words, adjacent " +"triples always describe non-adjacent equal blocks." +msgstr "" +"最后一个三元组用于占位,其值为 ``(len(a), len(b), 0)``。 它是唯一 ``n == 0`` 的三元组。 如果 ``(i, j, " +"n)`` 和 ``(i', j', n')`` 是在列表中相邻的三元组,且后者不是列表中的最后一个三元组,则 ``i+n < i'`` 或 ``j+n " +"< j'``;换句话说,相邻的三元组总是描述非相邻的相等块。" + +#: ../../library/difflib.rst:490 +msgid "" +"Return list of 5-tuples describing how to turn *a* into *b*. Each tuple is " +"of the form ``(tag, i1, i2, j1, j2)``. The first tuple has ``i1 == j1 == " +"0``, and remaining tuples have *i1* equal to the *i2* from the preceding " +"tuple, and, likewise, *j1* equal to the previous *j2*." +msgstr "" +"返回描述如何将 *a* 变为 *b* 的 5 元组列表,每个元组的形式为 ``(tag, i1, i2, j1, j2)``。 在第一个元组中 ``i1" +" == j1 == 0``,而在其余的元组中 *i1* 等于前一个元组的 *i2*,并且 *j1* 也等于前一个元组的 *j2*。" + +#: ../../library/difflib.rst:495 +msgid "The *tag* values are strings, with these meanings:" +msgstr "*tag* 值为字符串,其含义如下:" + +#: ../../library/difflib.rst:498 +msgid "Value" +msgstr "值" + +#: ../../library/difflib.rst:500 +msgid "``'replace'``" +msgstr "``'replace'``" + +#: ../../library/difflib.rst:500 +msgid "``a[i1:i2]`` should be replaced by ``b[j1:j2]``." +msgstr "``a[i1:i2]`` 应由 ``b[j1:j2]`` 替换。" + +#: ../../library/difflib.rst:503 +msgid "``'delete'``" +msgstr "``'delete'``" + +#: ../../library/difflib.rst:503 +msgid "``a[i1:i2]`` should be deleted. Note that ``j1 == j2`` in this case." +msgstr "``a[i1:i2]`` 应被删除。 请注意在此情况下 ``j1 == j2``。" + +#: ../../library/difflib.rst:506 +msgid "``'insert'``" +msgstr "``'insert'``" + +#: ../../library/difflib.rst:506 +msgid "" +"``b[j1:j2]`` should be inserted at ``a[i1:i1]``. Note that ``i1 == i2`` in " +"this case." +msgstr "``b[j1:j2]`` 应插入到 ``a[i1:i1]``。 请注意在此情况下 ``i1 == i2``。" + +#: ../../library/difflib.rst:510 +msgid "``'equal'``" +msgstr "``'equal'``" + +#: ../../library/difflib.rst:510 +msgid "``a[i1:i2] == b[j1:j2]`` (the sub-sequences are equal)." +msgstr "``a[i1:i2] == b[j1:j2]`` (两个子序列相同)。" + +#: ../../library/difflib.rst:514 +msgid "For example::" +msgstr "例如:" + +#: ../../library/difflib.rst:531 +msgid "Return a :term:`generator` of groups with up to *n* lines of context." +msgstr "返回一个带有最多 *n* 行上下文的分组的 :term:`generator`。" + +#: ../../library/difflib.rst:533 +msgid "" +"Starting with the groups returned by :meth:`get_opcodes`, this method splits" +" out smaller change clusters and eliminates intervening ranges which have no" +" changes." +msgstr "从 :meth:`get_opcodes` 所返回的组开始,此方法会拆分出较小的更改簇并消除没有更改的间隔区域。" + +#: ../../library/difflib.rst:537 +msgid "The groups are returned in the same format as :meth:`get_opcodes`." +msgstr "这些分组以与 :meth:`get_opcodes` 相同的格式返回。" + +#: ../../library/difflib.rst:542 +msgid "" +"Return a measure of the sequences' similarity as a float in the range [0, " +"1]." +msgstr "返回一个取值范围 [0, 1] 的浮点数作为序列相似性度量。" + +#: ../../library/difflib.rst:545 +msgid "" +"Where T is the total number of elements in both sequences, and M is the " +"number of matches, this is 2.0\\*M / T. Note that this is ``1.0`` if the " +"sequences are identical, and ``0.0`` if they have nothing in common." +msgstr "" +"其中 T 是两个序列中元素的总数量,M 是匹配的数量,即 2.0\\*M / T。 请注意如果两个序列完全相同则该值为 " +"``1.0``,如果两者完全不同则为 ``0.0``。" + +#: ../../library/difflib.rst:549 +msgid "" +"This is expensive to compute if :meth:`get_matching_blocks` or " +":meth:`get_opcodes` hasn't already been called, in which case you may want " +"to try :meth:`quick_ratio` or :meth:`real_quick_ratio` first to get an upper" +" bound." +msgstr "" +"如果 :meth:`get_matching_blocks` 或 :meth:`get_opcodes` " +"尚未被调用则此方法运算消耗较大,在此情况下你可能需要先调用 :meth:`quick_ratio` 或 :meth:`real_quick_ratio`" +" 来获取一个上界。" + +#: ../../library/difflib.rst:556 +msgid "" +"Caution: The result of a :meth:`ratio` call may depend on the order of the " +"arguments. For instance::" +msgstr "注意: :meth:`ratio` 调用的结果可能会取决于参数的顺序。 例如::" + +#: ../../library/difflib.rst:567 +msgid "Return an upper bound on :meth:`ratio` relatively quickly." +msgstr "相对快速地返回一个 :meth:`ratio` 的上界。" + +#: ../../library/difflib.rst:572 +msgid "Return an upper bound on :meth:`ratio` very quickly." +msgstr "非常快速地返回一个 :meth:`ratio` 的上界。" + +#: ../../library/difflib.rst:575 +msgid "" +"The three methods that return the ratio of matching to total characters can " +"give different results due to differing levels of approximation, although " +":meth:`quick_ratio` and :meth:`real_quick_ratio` are always at least as " +"large as :meth:`ratio`:" +msgstr "" +"这三个返回匹配部分占字符总数的比率的方法可能由于不同的近似级别而给出不一样的结果,但是 :meth:`quick_ratio` 和 " +":meth:`real_quick_ratio` 总是会至少与 :meth:`ratio` 一样大:" + +#: ../../library/difflib.rst:592 +msgid "SequenceMatcher Examples" +msgstr "SequenceMatcher 的示例" + +#: ../../library/difflib.rst:594 +msgid "This example compares two strings, considering blanks to be \"junk\":" +msgstr "以下示例比较两个字符串,并将空格视为“垃圾”:" + +#: ../../library/difflib.rst:600 +msgid "" +":meth:`ratio` returns a float in [0, 1], measuring the similarity of the " +"sequences. As a rule of thumb, a :meth:`ratio` value over 0.6 means the " +"sequences are close matches:" +msgstr "" +":meth:`ratio` 返回一个 [0, 1] 范围内的整数作为两个序列相似性的度量。 根据经验,:meth:`ratio` 值超过 0.6 " +"就意味着两个序列是近似匹配的:" + +#: ../../library/difflib.rst:607 +msgid "" +"If you're only interested in where the sequences match, " +":meth:`get_matching_blocks` is handy:" +msgstr "如果你只对两个序列相匹配的位置感兴趣,则 :meth:`get_matching_blocks` 就很方便:" + +#: ../../library/difflib.rst:616 +msgid "" +"Note that the last tuple returned by :meth:`get_matching_blocks` is always a" +" dummy, ``(len(a), len(b), 0)``, and this is the only case in which the last" +" tuple element (number of elements matched) is ``0``." +msgstr "" +"请注意 :meth:`get_matching_blocks` 返回的最后一个元组总是只用于占位的 ``(len(a), len(b), " +"0)``,这也是元组末尾元素(匹配的元素数量)为 ``0`` 的唯一情况。" + +#: ../../library/difflib.rst:620 +msgid "" +"If you want to know how to change the first sequence into the second, use " +":meth:`get_opcodes`:" +msgstr "如果你想要知道如何将第一个序列转成第二个序列,可以使用 :meth:`get_opcodes`:" + +#: ../../library/difflib.rst:631 +msgid "" +"The :func:`get_close_matches` function in this module which shows how simple" +" code building on :class:`SequenceMatcher` can be used to do useful work." +msgstr "" +"此模块中的 :func:`get_close_matches` 函数显示了如何基于 :class:`SequenceMatcher` " +"构建简单的代码来执行有用的功能。" + +#: ../../library/difflib.rst:635 +msgid "" +"`Simple version control recipe " +"`_ for a small application " +"built with :class:`SequenceMatcher`." +msgstr "" +"使用 :class:`SequenceMatcher` 构建小型应用的 `简易版本控制方案 " +"`_。" + +#: ../../library/difflib.rst:643 +msgid "Differ Objects" +msgstr "Differ 对象" + +#: ../../library/difflib.rst:645 +msgid "" +"Note that :class:`Differ`\\ -generated deltas make no claim to be " +"**minimal** diffs. To the contrary, minimal diffs are often counter-" +"intuitive, because they synch up anywhere possible, sometimes accidental " +"matches 100 pages apart. Restricting synch points to contiguous matches " +"preserves some notion of locality, at the occasional cost of producing a " +"longer diff." +msgstr "" +"请注意 :class:`Differ` 所生成的增量并不保证是 **最小** 差异。 " +"相反,最小差异往往是违反直觉的,因为它们会同步任何可能的地方,有时甚至意外产生相距 100 页的匹配。 " +"将同步点限制为连续匹配保留了一些局部性概念,这偶尔会带来产生更长差异的代价。" + +#: ../../library/difflib.rst:651 +msgid "The :class:`Differ` class has this constructor:" +msgstr ":class:`Differ` 类具有这样的构造器:" + +#: ../../library/difflib.rst:657 +msgid "" +"Optional keyword parameters *linejunk* and *charjunk* are for filter " +"functions (or ``None``):" +msgstr "可选关键字形参 *linejunk* 和 *charjunk* 均为过滤函数 (或为 ``None``):" + +#: ../../library/difflib.rst:660 +msgid "" +"*linejunk*: A function that accepts a single string argument, and returns " +"true if the string is junk. The default is ``None``, meaning that no line " +"is considered junk." +msgstr "" +"*linejunk*: 接受单个字符串作为参数的函数,如果其为垃圾字符串则返回真值。 默认值为 ``None``,意味着没有任何行会被视为垃圾行。" + +#: ../../library/difflib.rst:664 +msgid "" +"*charjunk*: A function that accepts a single character argument (a string of" +" length 1), and returns true if the character is junk. The default is " +"``None``, meaning that no character is considered junk." +msgstr "" +"*charjunk*: 接受单个字符(长度为 1 的字符串)作为参数的函数,如果其为垃圾字符则返回真值。 默认值为 " +"``None``,意味着没有任何字符会被视为垃圾字符。" + +#: ../../library/difflib.rst:668 +msgid "" +"These junk-filtering functions speed up matching to find differences and do " +"not cause any differing lines or characters to be ignored. Read the " +"description of the :meth:`~SequenceMatcher.find_longest_match` method's " +"*isjunk* parameter for an explanation." +msgstr "" +"这些垃圾过滤函数可加快查找差异的匹配速度,并且不会导致任何差异行或字符被忽略。 请阅读 " +":meth:`~SequenceMatcher.find_longest_match` 方法的 *isjunk* 形参的描述了解详情。" + +#: ../../library/difflib.rst:674 +msgid "" +":class:`Differ` objects are used (deltas generated) via a single method:" +msgstr ":class:`Differ` 对象是通过一个单独方法来使用(生成增量)的:" + +#: ../../library/difflib.rst:679 +msgid "" +"Compare two sequences of lines, and generate the delta (a sequence of " +"lines)." +msgstr "比较两个由行组成的序列,并生成增量(一个由行组成的序列)。" + +#: ../../library/difflib.rst:681 +msgid "" +"Each sequence must contain individual single-line strings ending with " +"newlines. Such sequences can be obtained from the " +":meth:`~io.IOBase.readlines` method of file-like objects. The delta " +"generated also consists of newline-terminated strings, ready to be printed " +"as-is via the :meth:`~io.IOBase.writelines` method of a file-like object." +msgstr "" +"每个序列必须包含一个以换行符结尾的单行字符串。 这样的序列可以通过文件型对象的 :meth:`~io.IOBase.readlines` 方法来获取。 " +"所生成的增量同样由以换行符结尾的字符串构成,可以通过文件型对象的 :meth:`~io.IOBase.writelines` 方法原样打印出来。" + +#: ../../library/difflib.rst:692 +msgid "Differ Example" +msgstr "Differ 示例" + +#: ../../library/difflib.rst:694 +msgid "" +"This example compares two texts. First we set up the texts, sequences of " +"individual single-line strings ending with newlines (such sequences can also" +" be obtained from the :meth:`~io.BaseIO.readlines` method of file-like " +"objects):" +msgstr "" +"此示例比较两段文本。 首先我们设置文本为以换行符结尾的单行字符串构成的序列(这样的序列也可以通过文件类对象的 " +":meth:`~io.BaseIO.readlines` 方法来获取):" + +#: ../../library/difflib.rst:713 +msgid "Next we instantiate a Differ object:" +msgstr "接下来我们实例化一个 Differ 对象:" + +#: ../../library/difflib.rst:717 +msgid "" +"Note that when instantiating a :class:`Differ` object we may pass functions " +"to filter out line and character \"junk.\" See the :meth:`Differ` " +"constructor for details." +msgstr "" +"请注意在实例化 :class:`Differ` 对象时我们可以传入函数来过滤掉“垃圾”行和字符。 详情参见 :meth:`Differ` 构造器说明。" + +#: ../../library/difflib.rst:721 +msgid "Finally, we compare the two:" +msgstr "最后,我们比较两个序列:" + +#: ../../library/difflib.rst:725 +msgid "``result`` is a list of strings, so let's pretty-print it:" +msgstr "``result`` 是一个字符串列表,让我们将其美化打印出来:" + +#: ../../library/difflib.rst:740 +msgid "As a single multi-line string it looks like this:" +msgstr "作为单独的多行字符串显示出来则是这样:" + +#: ../../library/difflib.rst:759 +msgid "A command-line interface to difflib" +msgstr "difflib 的命令行接口" + +#: ../../library/difflib.rst:761 +msgid "" +"This example shows how to use difflib to create a ``diff``-like utility. It " +"is also contained in the Python source distribution, as " +":file:`Tools/scripts/diff.py`." +msgstr "" +"这个实例演示了如何使用 difflib 来创建一个类似于 ``diff`` 的工具。 它同样包含在 Python 源码发布包中,文件名为 " +":file:`Tools/scripts/diff.py`。" diff --git a/library/dis.po b/library/dis.po new file mode 100644 index 000000000..e83734f71 --- /dev/null +++ b/library/dis.po @@ -0,0 +1,1340 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) 2001-2024, Python Software Foundation +# This file is distributed under the same license as the Python package. +# FIRST AUTHOR , YEAR. +# +# Translators: +# SKY H. , 2018 +# Alpha Du , 2019 +# Freesand Leo , 2021 +# Rafael Fontenelle , 2024 +# +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: Python 3.9\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2024-08-03 21:31+0000\n" +"PO-Revision-Date: 2017-02-16 23:06+0000\n" +"Last-Translator: Rafael Fontenelle , 2024\n" +"Language-Team: Chinese (China) (https://app.transifex.com/python-doc/teams/5390/zh_CN/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: zh_CN\n" +"Plural-Forms: nplurals=1; plural=0;\n" + +#: ../../library/dis.rst:2 +msgid ":mod:`dis` --- Disassembler for Python bytecode" +msgstr ":mod:`dis` --- Python 字节码反汇编器" + +#: ../../library/dis.rst:7 +msgid "**Source code:** :source:`Lib/dis.py`" +msgstr "**源代码:** :source:`Lib/dis.py`" + +#: ../../library/dis.rst:11 +msgid "" +"The :mod:`dis` module supports the analysis of CPython :term:`bytecode` by " +"disassembling it. The CPython bytecode which this module takes as an input " +"is defined in the file :file:`Include/opcode.h` and used by the compiler and" +" the interpreter." +msgstr "" +":mod:`dis` 模块通过反汇编支持CPython的 :term:`bytecode` 分析。该模块作为输入的 CPython 字节码在文件 " +":file:`Include/opcode.h` 中定义,并由编译器和解释器使用。" + +#: ../../library/dis.rst:18 +msgid "" +"Bytecode is an implementation detail of the CPython interpreter. No " +"guarantees are made that bytecode will not be added, removed, or changed " +"between versions of Python. Use of this module should not be considered to " +"work across Python VMs or Python releases." +msgstr "" +"字节码是 CPython 解释器的实现细节。不保证不会在Python版本之间添加、删除或更改字节码。不应考虑将此模块的跨 Python VM 或 " +"Python 版本的使用。" + +#: ../../library/dis.rst:23 +msgid "" +"Use 2 bytes for each instruction. Previously the number of bytes varied by " +"instruction." +msgstr "每条指令使用2个字节。以前字节数因指令而异。" + +#: ../../library/dis.rst:28 +msgid "Example: Given the function :func:`myfunc`::" +msgstr "示例:给出函数 :func:`myfunc`::" + +#: ../../library/dis.rst:33 +msgid "" +"the following command can be used to display the disassembly of " +":func:`myfunc`::" +msgstr "可以使用以下命令显示 :func:`myfunc` 的反汇编 ::" + +#: ../../library/dis.rst:42 +msgid "(The \"2\" is a line number)." +msgstr "(\"2\" 是行号)。" + +#: ../../library/dis.rst:45 +msgid "Bytecode analysis" +msgstr "字节码分析" + +#: ../../library/dis.rst:49 +msgid "" +"The bytecode analysis API allows pieces of Python code to be wrapped in a " +":class:`Bytecode` object that provides easy access to details of the " +"compiled code." +msgstr "字节码分析 API 允许将 Python 代码片段包装在 :class:`Bytecode` 对象中,以便轻松访问已编译代码的详细信息。" + +#: ../../library/dis.rst:56 +msgid "" +"Analyse the bytecode corresponding to a function, generator, asynchronous " +"generator, coroutine, method, string of source code, or a code object (as " +"returned by :func:`compile`)." +msgstr "分析的字节码对应于函数、生成器、异步生成器、协程、方法、源代码字符串或代码对象(由 :func:`compile` 返回)。" + +#: ../../library/dis.rst:60 +msgid "" +"This is a convenience wrapper around many of the functions listed below, " +"most notably :func:`get_instructions`, as iterating over a :class:`Bytecode`" +" instance yields the bytecode operations as :class:`Instruction` instances." +msgstr "" +"这是下面列出的许多函数的便利包装,最值得注意的是 :func:`get_instructions` ,迭代于 :class:`Bytecode` " +"的实例产生字节码操作 :class:`Instruction` 的实例。" + +#: ../../library/dis.rst:64 ../../library/dis.rst:225 +msgid "" +"If *first_line* is not ``None``, it indicates the line number that should be" +" reported for the first source line in the disassembled code. Otherwise, " +"the source line information (if any) is taken directly from the disassembled" +" code object." +msgstr "" +"如果 *first_line* 不是 ``None`` " +",则表示应该为反汇编代码中的第一个源代码行报告的行号。否则,源行信息(如果有的话)直接来自反汇编的代码对象。" + +#: ../../library/dis.rst:69 +msgid "" +"If *current_offset* is not ``None``, it refers to an instruction offset in " +"the disassembled code. Setting this means :meth:`.dis` will display a " +"\"current instruction\" marker against the specified opcode." +msgstr "" +"如果 *current_offset* 不是 ``None`` ,它指的就是汇编代码中的指令偏移量。设置它意味着 :meth:`.dis` " +"将针对指定的操作码显示“当前指令”标记。" + +#: ../../library/dis.rst:75 +msgid "" +"Construct a :class:`Bytecode` instance from the given traceback, setting " +"*current_offset* to the instruction responsible for the exception." +msgstr "从给定回溯构造一个 :class:`Bytecode` 实例,将设置 *current_offset* 为异常负责的指令。" + +#: ../../library/dis.rst:80 +msgid "The compiled code object." +msgstr "已编译的代码对象。" + +#: ../../library/dis.rst:84 +msgid "The first source line of the code object (if available)" +msgstr "代码对象的第一个源代码行(如果可用)" + +#: ../../library/dis.rst:88 +msgid "" +"Return a formatted view of the bytecode operations (the same as printed by " +":func:`dis.dis`, but returned as a multi-line string)." +msgstr "返回字节码操作的格式化视图(与 :func:`dis.dis` 打印相同,但作为多行字符串返回)。" + +#: ../../library/dis.rst:93 +msgid "" +"Return a formatted multi-line string with detailed information about the " +"code object, like :func:`code_info`." +msgstr "返回带有关于代码对象的详细信息的格式化多行字符串,如 :func:`code_info` 。" + +#: ../../library/dis.rst:96 ../../library/dis.rst:130 +#: ../../library/dis.rst:176 +msgid "This can now handle coroutine and asynchronous generator objects." +msgstr "现在可以处理协程和异步生成器对象。" + +#: ../../library/dis.rst:99 +msgid "Example::" +msgstr "示例::" + +#: ../../library/dis.rst:112 +msgid "Analysis functions" +msgstr "分析函数" + +#: ../../library/dis.rst:114 +msgid "" +"The :mod:`dis` module also defines the following analysis functions that " +"convert the input directly to the desired output. They can be useful if only" +" a single operation is being performed, so the intermediate analysis object " +"isn't useful:" +msgstr ":mod:`dis` 模块还定义了以下分析函数,它们将输入直接转换为所需的输出。如果只执行单个操作,它们可能很有用,因此中间分析对象没用:" + +#: ../../library/dis.rst:120 +msgid "" +"Return a formatted multi-line string with detailed code object information " +"for the supplied function, generator, asynchronous generator, coroutine, " +"method, source code string or code object." +msgstr "返回格式化的多行字符串,其包含详细代码对象信息的用于被提供的函数、生成器、异步生成器、协程、方法、源代码字符串或代码对象。" + +#: ../../library/dis.rst:124 +msgid "" +"Note that the exact contents of code info strings are highly implementation " +"dependent and they may change arbitrarily across Python VMs or Python " +"releases." +msgstr "请注意,代码信息字符串的确切内容是高度依赖于实现的,它们可能会在Python VM或Python版本中任意更改。" + +#: ../../library/dis.rst:136 +msgid "" +"Print detailed code object information for the supplied function, method, " +"source code string or code object to *file* (or ``sys.stdout`` if *file* is " +"not specified)." +msgstr "" +"将提供的函数、方法。源代码字符串或代码对象的详细代码对象信息打印到 *file* (如果未指定 *file* ,则为 ``sys.stdout`` )。" + +#: ../../library/dis.rst:140 +msgid "" +"This is a convenient shorthand for ``print(code_info(x), file=file)``, " +"intended for interactive exploration at the interpreter prompt." +msgstr "这是 ``print(code_info(x), file=file)`` 的便捷简写,用于在解释器提示符下进行交互式探索。" + +#: ../../library/dis.rst:145 ../../library/dis.rst:170 +#: ../../library/dis.rst:189 ../../library/dis.rst:213 +msgid "Added *file* parameter." +msgstr "添加 *file* 形参。" + +#: ../../library/dis.rst:151 +msgid "" +"Disassemble the *x* object. *x* can denote either a module, a class, a " +"method, a function, a generator, an asynchronous generator, a coroutine, a " +"code object, a string of source code or a byte sequence of raw bytecode. For" +" a module, it disassembles all functions. For a class, it disassembles all " +"methods (including class and static methods). For a code object or sequence " +"of raw bytecode, it prints one line per bytecode instruction. It also " +"recursively disassembles nested code objects (the code of comprehensions, " +"generator expressions and nested functions, and the code used for building " +"nested classes). Strings are first compiled to code objects with the " +":func:`compile` built-in function before being disassembled. If no object " +"is provided, this function disassembles the last traceback." +msgstr "" +"反汇编 *x* 对象。 *x* " +"可以表示模块、类、方法、函数、生成器、异步生成器、协程、代码对象、源代码字符串或原始字节码的字节序列。对于模块,它会反汇编所有功能。对于一个类,它反汇编所有方法(包括类和静态方法)。对于代码对象或原始字节码序列,它每字节码指令打印一行。它还递归地反汇编嵌套代码对象(推导式代码,生成器表达式和嵌套函数,以及用于构建嵌套类的代码)。在被反汇编之前,首先使用" +" :func:`compile` 内置函数将字符串编译为代码对象。如果未提供任何对象,则此函数会反汇编最后一次回溯。" + +#: ../../library/dis.rst:164 ../../library/dis.rst:186 +#: ../../library/dis.rst:210 +msgid "" +"The disassembly is written as text to the supplied *file* argument if " +"provided and to ``sys.stdout`` otherwise." +msgstr "如果提供的话,反汇编将作为文本写入提供的 *file* 参数,否则写入 ``sys.stdout`` 。" + +#: ../../library/dis.rst:167 +msgid "" +"The maximal depth of recursion is limited by *depth* unless it is ``None``. " +"``depth=0`` means no recursion." +msgstr "递归的最大深度受 *depth* 限制,除非它是 ``None`` 。 ``depth=0`` 表示没有递归。" + +#: ../../library/dis.rst:173 +msgid "Implemented recursive disassembling and added *depth* parameter." +msgstr "实现了递归反汇编并添加了 *depth* 参数。" + +#: ../../library/dis.rst:182 +msgid "" +"Disassemble the top-of-stack function of a traceback, using the last " +"traceback if none was passed. The instruction causing the exception is " +"indicated." +msgstr "如果没有传递,则使用最后一个回溯来反汇编回溯的堆栈顶部函数。 指示了导致异常的指令。" + +#: ../../library/dis.rst:196 +msgid "" +"Disassemble a code object, indicating the last instruction if *lasti* was " +"provided. The output is divided in the following columns:" +msgstr "反汇编代码对象,如果提供了 *lasti* ,则指示最后一条指令。输出分为以下几列:" + +#: ../../library/dis.rst:199 +msgid "the line number, for the first instruction of each line" +msgstr "行号,用于每行的第一条指令" + +#: ../../library/dis.rst:200 +msgid "the current instruction, indicated as ``-->``," +msgstr "当前指令,表示为 ``-->`` ," + +#: ../../library/dis.rst:201 +msgid "a labelled instruction, indicated with ``>>``," +msgstr "一个标记的指令,用 ``>>`` 表示," + +#: ../../library/dis.rst:202 +msgid "the address of the instruction," +msgstr "指令的地址," + +#: ../../library/dis.rst:203 +msgid "the operation code name," +msgstr "操作码名称," + +#: ../../library/dis.rst:204 +msgid "operation parameters, and" +msgstr "操作参数,和" + +#: ../../library/dis.rst:205 +msgid "interpretation of the parameters in parentheses." +msgstr "括号中参数的解释。" + +#: ../../library/dis.rst:207 +msgid "" +"The parameter interpretation recognizes local and global variable names, " +"constant values, branch targets, and compare operators." +msgstr "参数解释识别本地和全局变量名称、常量值、分支目标和比较运算符。" + +#: ../../library/dis.rst:219 +msgid "" +"Return an iterator over the instructions in the supplied function, method, " +"source code string or code object." +msgstr "在所提供的函数、方法、源代码字符串或代码对象中的指令上返回一个迭代器。" + +#: ../../library/dis.rst:222 +msgid "" +"The iterator generates a series of :class:`Instruction` named tuples giving " +"the details of each operation in the supplied code." +msgstr "迭代器生成一系列 :class:`Instruction` ,命名为元组,提供所提供代码中每个操作的详细信息。" + +#: ../../library/dis.rst:235 +msgid "" +"This generator function uses the ``co_firstlineno`` and ``co_lnotab`` " +"attributes of the code object *code* to find the offsets which are starts of" +" lines in the source code. They are generated as ``(offset, lineno)`` " +"pairs. See :source:`Objects/lnotab_notes.txt` for the ``co_lnotab`` format " +"and how to decode it." +msgstr "" +"此生成器函数使用代码对象 *code* 的 ``co_firstlineno`` 和 ``co_lnotab`` " +"属性来查找源代码中行开头的偏移量。它们生成为 ``(offset, lineno)`` 对。请参阅 " +":source:`objects/lnotab_notes.txt` ,了解 ``co_lnotab`` 格式以及如何解码它。" + +#: ../../library/dis.rst:241 +msgid "Line numbers can be decreasing. Before, they were always increasing." +msgstr "行号可能会减少。 以前,他们总是在增加。" + +#: ../../library/dis.rst:247 +msgid "" +"Detect all offsets in the raw compiled bytecode string *code* which are jump" +" targets, and return a list of these offsets." +msgstr "检测作为跳转目标的原始编译后字节码字符串 *code* 中的所有偏移量,并返回这些偏移量的列表。" + +#: ../../library/dis.rst:253 +msgid "Compute the stack effect of *opcode* with argument *oparg*." +msgstr "使用参数 *oparg* 计算 *opcode* 的堆栈效果。" + +#: ../../library/dis.rst:255 +msgid "" +"If the code has a jump target and *jump* is ``True``, :func:`~stack_effect` " +"will return the stack effect of jumping. If *jump* is ``False``, it will " +"return the stack effect of not jumping. And if *jump* is ``None`` (default)," +" it will return the maximal stack effect of both cases." +msgstr "" +"如果代码有一个跳转目标并且 *jump* 是 ``True`` ,则 :func:`~drag_effect` 将返回跳转的堆栈效果。如果 *jump*" +" 是 ``False`` ,它将返回不跳跃的堆栈效果。如果 *jump* 是 ``None`` (默认值),它将返回两种情况的最大堆栈效果。" + +#: ../../library/dis.rst:262 +msgid "Added *jump* parameter." +msgstr "添加 *jump* 参数。" + +#: ../../library/dis.rst:269 +msgid "Python Bytecode Instructions" +msgstr "Python字节码说明" + +#: ../../library/dis.rst:271 +msgid "" +"The :func:`get_instructions` function and :class:`Bytecode` class provide " +"details of bytecode instructions as :class:`Instruction` instances:" +msgstr "" +":func:`get_instructions` 函数和 :class:`Bytecode` 类提供字节码指令的详细信息的 " +":class:`Instruction` 实例:" + +#: ../../library/dis.rst:276 +msgid "Details for a bytecode operation" +msgstr "字节码操作的详细信息" + +#: ../../library/dis.rst:280 +msgid "" +"numeric code for operation, corresponding to the opcode values listed below " +"and the bytecode values in the :ref:`opcode_collections`." +msgstr "操作的数字代码,对应于下面列出的操作码值和 :ref:`opcode_collections` 中的字节码值。" + +#: ../../library/dis.rst:286 +msgid "human readable name for operation" +msgstr "人类可读的操作名称" + +#: ../../library/dis.rst:291 +msgid "numeric argument to operation (if any), otherwise ``None``" +msgstr "操作的数字参数(如果有的话),否则为 ``None``" + +#: ../../library/dis.rst:296 +msgid "resolved arg value (if known), otherwise same as arg" +msgstr "已解析的 arg 值(如果已知),否则与 arg 相同" + +#: ../../library/dis.rst:301 +msgid "human readable description of operation argument" +msgstr "人类可读的操作参数描述" + +#: ../../library/dis.rst:306 +msgid "start index of operation within bytecode sequence" +msgstr "在字节码序列中的起始操作索引" + +#: ../../library/dis.rst:311 +msgid "line started by this opcode (if any), otherwise ``None``" +msgstr "行由此操作码(如果有)启动,否则为 ``None``" + +#: ../../library/dis.rst:316 +msgid "``True`` if other code jumps to here, otherwise ``False``" +msgstr "如果其他代码跳到这里,则为 ``True`` ,否则为 ``False``" + +#: ../../library/dis.rst:321 +msgid "" +"The Python compiler currently generates the following bytecode instructions." +msgstr "Python编译器当前生成以下字节码指令。" + +#: ../../library/dis.rst:324 +msgid "**General instructions**" +msgstr "**一般指令**" + +#: ../../library/dis.rst:328 +msgid "Do nothing code. Used as a placeholder by the bytecode optimizer." +msgstr "什么都不做。 用作字节码优化器的占位符。" + +#: ../../library/dis.rst:333 +msgid "Removes the top-of-stack (TOS) item." +msgstr "删除堆栈顶部(TOS)项。" + +#: ../../library/dis.rst:338 +msgid "Swaps the two top-most stack items." +msgstr "交换两个最顶层的堆栈项。" + +#: ../../library/dis.rst:343 +msgid "" +"Lifts second and third stack item one position up, moves top down to " +"position three." +msgstr "将第二个和第三个堆栈项向上提升一个位置,顶项移动到位置三。" + +#: ../../library/dis.rst:349 +msgid "" +"Lifts second, third and fourth stack items one position up, moves top down " +"to position four." +msgstr "将第二个、第三个和第四个堆栈项向上提升一个位置,将顶项移动到第四个位置。" + +#: ../../library/dis.rst:357 +msgid "Duplicates the reference on top of the stack." +msgstr "复制堆栈顶部的引用。" + +#: ../../library/dis.rst:364 +msgid "" +"Duplicates the two references on top of the stack, leaving them in the same " +"order." +msgstr "复制堆栈顶部的两个引用,使它们保持相同的顺序。" + +#: ../../library/dis.rst:370 +msgid "**Unary operations**" +msgstr "**一元操作**" + +#: ../../library/dis.rst:372 +msgid "" +"Unary operations take the top of the stack, apply the operation, and push " +"the result back on the stack." +msgstr "一元操作获取堆栈顶部元素,应用操作,并将结果推回堆栈。" + +#: ../../library/dis.rst:377 +msgid "Implements ``TOS = +TOS``." +msgstr "实现 ``TOS = +TOS``。" + +#: ../../library/dis.rst:382 +msgid "Implements ``TOS = -TOS``." +msgstr "实现 ``TOS = -TOS``。" + +#: ../../library/dis.rst:387 +msgid "Implements ``TOS = not TOS``." +msgstr "实现 ``TOS = not TOS``。" + +#: ../../library/dis.rst:392 +msgid "Implements ``TOS = ~TOS``." +msgstr "实现 ``TOS = ~TOS``。" + +#: ../../library/dis.rst:397 +msgid "Implements ``TOS = iter(TOS)``." +msgstr "实现 ``TOS = iter(TOS)``。" + +#: ../../library/dis.rst:402 +msgid "" +"If ``TOS`` is a :term:`generator iterator` or :term:`coroutine` object it is" +" left as is. Otherwise, implements ``TOS = iter(TOS)``." +msgstr "" +"如果 ``TOS`` 是一个 :term:`generator iterator` 或 :term:`coroutine` 对象则保持原样。否则实现 " +"``TOS = iter(TOS)`` 。" + +#: ../../library/dis.rst:408 +msgid "**Binary operations**" +msgstr "**二元操作**" + +#: ../../library/dis.rst:410 +msgid "" +"Binary operations remove the top of the stack (TOS) and the second top-most " +"stack item (TOS1) from the stack. They perform the operation, and put the " +"result back on the stack." +msgstr "二元操作从堆栈中删除堆栈顶部(TOS)和第二个最顶层堆栈项(TOS1)。 它们执行操作,并将结果放回堆栈。" + +#: ../../library/dis.rst:416 +msgid "Implements ``TOS = TOS1 ** TOS``." +msgstr "实现 ``TOS = TOS1 ** TOS`` 。" + +#: ../../library/dis.rst:421 +msgid "Implements ``TOS = TOS1 * TOS``." +msgstr "实现 ``TOS = TOS1 * TOS`` 。" + +#: ../../library/dis.rst:426 +msgid "Implements ``TOS = TOS1 @ TOS``." +msgstr "实现 ``TOS = TOS1 @ TOS`` 。" + +#: ../../library/dis.rst:433 +msgid "Implements ``TOS = TOS1 // TOS``." +msgstr "实现 ``TOS = TOS1 // TOS``。" + +#: ../../library/dis.rst:438 +msgid "Implements ``TOS = TOS1 / TOS``." +msgstr "实现 ``TOS = TOS1 / TOS`` 。" + +#: ../../library/dis.rst:443 +msgid "Implements ``TOS = TOS1 % TOS``." +msgstr "实现 ``TOS = TOS1 % TOS`` 。" + +#: ../../library/dis.rst:448 +msgid "Implements ``TOS = TOS1 + TOS``." +msgstr "实现 ``TOS = TOS1 + TOS`` 。" + +#: ../../library/dis.rst:453 +msgid "Implements ``TOS = TOS1 - TOS``." +msgstr "实现 ``TOS = TOS1 - TOS`` 。" + +#: ../../library/dis.rst:458 +msgid "Implements ``TOS = TOS1[TOS]``." +msgstr "实现 ``TOS = TOS1[TOS]``。" + +#: ../../library/dis.rst:463 +msgid "Implements ``TOS = TOS1 << TOS``." +msgstr "实现 ``TOS = TOS1 << TOS`` 。" + +#: ../../library/dis.rst:468 +msgid "Implements ``TOS = TOS1 >> TOS``." +msgstr "实现 ``TOS = TOS1 >> TOS`` 。" + +#: ../../library/dis.rst:473 +msgid "Implements ``TOS = TOS1 & TOS``." +msgstr "实现 ``TOS = TOS1 & TOS`` 。" + +#: ../../library/dis.rst:478 +msgid "Implements ``TOS = TOS1 ^ TOS``." +msgstr "实现 ``TOS = TOS1 ^ TOS`` 。" + +#: ../../library/dis.rst:483 +msgid "Implements ``TOS = TOS1 | TOS``." +msgstr "实现 ``TOS = TOS1 | TOS`` 。" + +#: ../../library/dis.rst:486 +msgid "**In-place operations**" +msgstr "**就地操作**" + +#: ../../library/dis.rst:488 +msgid "" +"In-place operations are like binary operations, in that they remove TOS and " +"TOS1, and push the result back on the stack, but the operation is done in-" +"place when TOS1 supports it, and the resulting TOS may be (but does not have" +" to be) the original TOS1." +msgstr "" +"就地操作就像二元操作,因为它们删除了TOS和TOS1,并将结果推回到堆栈上,但是当TOS1支持它时,操作就地完成,并且产生的TOS可能是(但不一定) " +"原来的TOS1。" + +#: ../../library/dis.rst:495 +msgid "Implements in-place ``TOS = TOS1 ** TOS``." +msgstr "就地实现 ``TOS = TOS1 ** TOS`` 。" + +#: ../../library/dis.rst:500 +msgid "Implements in-place ``TOS = TOS1 * TOS``." +msgstr "就地实现 ``TOS = TOS1 * TOS`` 。" + +#: ../../library/dis.rst:505 +msgid "Implements in-place ``TOS = TOS1 @ TOS``." +msgstr "就地实现 ``TOS = TOS1 @ TOS`` 。" + +#: ../../library/dis.rst:512 +msgid "Implements in-place ``TOS = TOS1 // TOS``." +msgstr "就地实现 ``TOS = TOS1 // TOS`` 。" + +#: ../../library/dis.rst:517 +msgid "Implements in-place ``TOS = TOS1 / TOS``." +msgstr "就地实现 ``TOS = TOS1 / TOS`` 。" + +#: ../../library/dis.rst:522 +msgid "Implements in-place ``TOS = TOS1 % TOS``." +msgstr "就地实现 ``TOS = TOS1 % TOS`` 。" + +#: ../../library/dis.rst:527 +msgid "Implements in-place ``TOS = TOS1 + TOS``." +msgstr "就地实现 ``TOS = TOS1 + TOS`` 。" + +#: ../../library/dis.rst:532 +msgid "Implements in-place ``TOS = TOS1 - TOS``." +msgstr "就地实现 ``TOS = TOS1 - TOS`` 。" + +#: ../../library/dis.rst:537 +msgid "Implements in-place ``TOS = TOS1 << TOS``." +msgstr "就地实现 ``TOS = TOS1 << TOS`` 。" + +#: ../../library/dis.rst:542 +msgid "Implements in-place ``TOS = TOS1 >> TOS``." +msgstr "就地实现 ``TOS = TOS1 >> TOS`` 。" + +#: ../../library/dis.rst:547 +msgid "Implements in-place ``TOS = TOS1 & TOS``." +msgstr "就地实现 ``TOS = TOS1 & TOS`` 。" + +#: ../../library/dis.rst:552 +msgid "Implements in-place ``TOS = TOS1 ^ TOS``." +msgstr "就地实现 ``TOS = TOS1 ^ TOS`` 。" + +#: ../../library/dis.rst:557 +msgid "Implements in-place ``TOS = TOS1 | TOS``." +msgstr "就地实现 ``TOS = TOS1 | TOS`` 。" + +#: ../../library/dis.rst:562 +msgid "Implements ``TOS1[TOS] = TOS2``." +msgstr "实现 ``TOS1[TOS] = TOS2`` 。" + +#: ../../library/dis.rst:567 +msgid "Implements ``del TOS1[TOS]``." +msgstr "实现 ``del TOS1[TOS]`` 。" + +#: ../../library/dis.rst:570 +msgid "**Coroutine opcodes**" +msgstr "**协程操作码**" + +#: ../../library/dis.rst:574 +msgid "" +"Implements ``TOS = get_awaitable(TOS)``, where ``get_awaitable(o)`` returns " +"``o`` if ``o`` is a coroutine object or a generator object with the " +"CO_ITERABLE_COROUTINE flag, or resolves ``o.__await__``." +msgstr "" +"实现 ``TOS = get_awaitable(TOS)`` ,其中 ``get_awaitable(o)`` 返回 ``o`` 如果 ``o`` " +"是一个有 CO_ITERABLE_COROUTINE 标志的协程对象或生成器对象,否则解析 ``o.__await__`` 。" + +#: ../../library/dis.rst:584 +msgid "Implements ``TOS = TOS.__aiter__()``." +msgstr "实现 ``TOS = TOS.__aiter__()`` 。" + +#: ../../library/dis.rst:587 +msgid "Returning awaitable objects from ``__aiter__`` is no longer supported." +msgstr "已经不再支持从 ``__aiter__`` 返回可等待对象。" + +#: ../../library/dis.rst:594 +msgid "" +"Implements ``PUSH(get_awaitable(TOS.__anext__()))``. See ``GET_AWAITABLE`` " +"for details about ``get_awaitable``" +msgstr "" +"实现 ``PUSH(get_awaitable(TOS.__anext__()))`` 。参见 ``GET_AWAITABLE`` 获取更多 " +"``get_awaitable`` 的细节" + +#: ../../library/dis.rst:602 +msgid "" +"Terminates an :keyword:`async for` loop. Handles an exception raised when " +"awaiting a next item. If TOS is :exc:`StopAsyncIteration` pop 7 values from" +" the stack and restore the exception state using the second three of them. " +"Otherwise re-raise the exception using the three values from the stack. An " +"exception handler block is removed from the block stack." +msgstr "" +"终止一个 :keyword:`async for` 循环。处理等待下一个项目时引发的异常。如果 TOS 是 " +":exc:`StopAsyncIteration`, " +"从堆栈弹出7个值,并使用后三个恢复异常状态。否则,使用堆栈中的三个值重新引发异常。从块堆栈中删除异常处理程序块。" + +#: ../../library/dis.rst:613 +msgid "" +"Resolves ``__aenter__`` and ``__aexit__`` from the object on top of the " +"stack. Pushes ``__aexit__`` and result of ``__aenter__()`` to the stack." +msgstr "" +"从栈顶对象解析 ``__aenter__`` 和 ``__aexit__`` 。将 ``__aexit__`` 和 ``__aenter__()`` " +"的结果推入堆栈。" + +#: ../../library/dis.rst:621 +msgid "Creates a new frame object." +msgstr "创建一个新的帧对象。" + +#: ../../library/dis.rst:627 +msgid "**Miscellaneous opcodes**" +msgstr "**其他操作码**" + +#: ../../library/dis.rst:631 +msgid "" +"Implements the expression statement for the interactive mode. TOS is " +"removed from the stack and printed. In non-interactive mode, an expression " +"statement is terminated with :opcode:`POP_TOP`." +msgstr "实现交互模式的表达式语句。TOS从堆栈中被移除并打印。在非交互模式下,表达式语句以 :opcode:`POP_TOP` 终止。" + +#: ../../library/dis.rst:638 +msgid "" +"Calls ``set.add(TOS1[-i], TOS)``. Used to implement set comprehensions." +msgstr "调用 ``set.add(TOS1[-i], TOS)`` 。 用于实现集合推导。" + +#: ../../library/dis.rst:643 +msgid "" +"Calls ``list.append(TOS1[-i], TOS)``. Used to implement list " +"comprehensions." +msgstr "调用 ``list.append(TOS1[-i], TOS)``。 用于实现列表推导式。" + +#: ../../library/dis.rst:648 +msgid "" +"Calls ``dict.__setitem__(TOS1[-i], TOS1, TOS)``. Used to implement dict " +"comprehensions." +msgstr "调用 ``dict.__setitem__(TOS1[-i], TOS1, TOS)`` 。 用于实现字典推导。" + +#: ../../library/dis.rst:652 +msgid "Map value is TOS and map key is TOS1. Before, those were reversed." +msgstr "映射值为 TOS ,映射键为 TOS1 。之前,它们被颠倒了。" + +#: ../../library/dis.rst:655 +msgid "" +"For all of the :opcode:`SET_ADD`, :opcode:`LIST_APPEND` and " +":opcode:`MAP_ADD` instructions, while the added value or key/value pair is " +"popped off, the container object remains on the stack so that it is " +"available for further iterations of the loop." +msgstr "" +"对于所有 :opcode:`SET_ADD` 、 :opcode:`LIST_APPEND` 和 :opcode:`MAP_ADD` " +"指令,当弹出添加的值或键值对时,容器对象保留在堆栈上,以便它可用于循环的进一步迭代。" + +#: ../../library/dis.rst:663 +msgid "Returns with TOS to the caller of the function." +msgstr "返回 TOS 到函数的调用者。" + +#: ../../library/dis.rst:668 +msgid "Pops TOS and yields it from a :term:`generator`." +msgstr "弹出 TOS 并从一个 :term:`generator` 生成它。" + +#: ../../library/dis.rst:673 +msgid "" +"Pops TOS and delegates to it as a subiterator from a :term:`generator`." +msgstr "弹出 TOS 并将其委托给它作为 :term:`generator` 的子迭代器。" + +#: ../../library/dis.rst:680 +msgid "" +"Checks whether ``__annotations__`` is defined in ``locals()``, if not it is " +"set up to an empty ``dict``. This opcode is only emitted if a class or " +"module body contains :term:`variable annotations ` " +"statically." +msgstr "" +"检查 ``__annotations__`` 是否在 ``locals()`` 中定义,如果没有,它被设置为空 ``dict`` " +"。只有在类或模块体静态地包含 :term:`variable annotations ` 时才会发出此操作码。" + +#: ../../library/dis.rst:690 +msgid "" +"Loads all symbols not starting with ``'_'`` directly from the module TOS to " +"the local namespace. The module is popped after loading all names. This " +"opcode implements ``from module import *``." +msgstr "" +"将所有不以 ``'_'`` 开头的符号直接从模块 TOS 加载到局部命名空间。加载所有名称后弹出该模块。这个操作码实现了 ``from module " +"import *`` 。" + +#: ../../library/dis.rst:697 +msgid "" +"Removes one block from the block stack. Per frame, there is a stack of " +"blocks, denoting :keyword:`try` statements, and such." +msgstr "从块堆栈中删除一个块。有一块堆栈,每帧用于表示 :keyword:`try` 语句等。" + +#: ../../library/dis.rst:703 +msgid "" +"Removes one block from the block stack. The popped block must be an " +"exception handler block, as implicitly created when entering an except " +"handler. In addition to popping extraneous values from the frame stack, the" +" last three popped values are used to restore the exception state." +msgstr "" +"从块堆栈中删除一个块。 弹出的块必须是异常处理程序块,在进入 except " +"处理程序时隐式创建。除了从帧堆栈弹出无关值之外,最后三个弹出值还用于恢复异常状态。" + +#: ../../library/dis.rst:711 +msgid "Re-raises the exception currently on top of the stack." +msgstr "重新引发当前位于栈顶的异常。" + +#: ../../library/dis.rst:718 +msgid "" +"Calls the function in position 7 on the stack with the top three items on " +"the stack as arguments. Used to implement the call " +"``context_manager.__exit__(*exc_info())`` when an exception has occurred in " +"a :keyword:`with` statement." +msgstr "" +"调用堆栈中 7 号位置上的函数并附带栈顶位置的三项作为参数。 用来在 :keyword:`with` 语句内发生异常时实现调用 " +"``context_manager.__exit__(*exc_info())``。" + +#: ../../library/dis.rst:728 +msgid "" +"Pushes :exc:`AssertionError` onto the stack. Used by the :keyword:`assert` " +"statement." +msgstr "将 :exc:`AssertionError` 推入栈顶。 由 :keyword:`assert` 语句使用。" + +#: ../../library/dis.rst:736 +msgid "" +"Pushes :func:`builtins.__build_class__` onto the stack. It is later called " +"by :opcode:`CALL_FUNCTION` to construct a class." +msgstr "" +"将 :func:`builtins .__ build_class__` 推到堆栈上。它之后被 :opcode:`CALL_FUNCTION` " +"调用来构造一个类。" + +#: ../../library/dis.rst:742 +msgid "" +"This opcode performs several operations before a with block starts. First, " +"it loads :meth:`~object.__exit__` from the context manager and pushes it " +"onto the stack for later use by :opcode:`WITH_EXCEPT_START`. Then, " +":meth:`~object.__enter__` is called, and a finally block pointing to *delta*" +" is pushed. Finally, the result of calling the ``__enter__()`` method is " +"pushed onto the stack. The next opcode will either ignore it " +"(:opcode:`POP_TOP`), or store it in (a) variable(s) (:opcode:`STORE_FAST`, " +":opcode:`STORE_NAME`, or :opcode:`UNPACK_SEQUENCE`)." +msgstr "" +"此操作码会在 with 代码块开始之前执行多个操作。 首先,它从上下文管理器加载 :meth:`~object.__exit__` 并将其推入栈顶以供 " +":opcode:`WITH_EXCEPT_START` 后续使用。 然后,调用 :meth:`~object.__enter__`,并推入一个指向 " +"*delta* 的 finally 代码块。 最后,将调用 ``__enter__()`` 方法的结果推入栈顶。 下一个操作码将忽略它 " +"(:opcode:`POP_TOP`),或将其存储在一个或多个变量 (:opcode:`STORE_FAST`, " +":opcode:`STORE_NAME` 或 :opcode:`UNPACK_SEQUENCE`) 中。" + +#: ../../library/dis.rst:754 +msgid "All of the following opcodes use their arguments." +msgstr "以下所有操作码均使用其参数。" + +#: ../../library/dis.rst:758 +msgid "" +"Implements ``name = TOS``. *namei* is the index of *name* in the attribute " +":attr:`co_names` of the code object. The compiler tries to use " +":opcode:`STORE_FAST` or :opcode:`STORE_GLOBAL` if possible." +msgstr "" +"实现 ``name = TOS``。 *namei* 是 *name* 在代码对象的 :attr:`co_names` 属性中的索引。 " +"在可能的情况下,编译器会尝试使用 :opcode:`STORE_FAST` 或 :opcode:`STORE_GLOBAL`。" + +#: ../../library/dis.rst:765 +msgid "" +"Implements ``del name``, where *namei* is the index into :attr:`co_names` " +"attribute of the code object." +msgstr "实现 ``del name`` ,其中 *namei* 是代码对象的 :attr:`co_names` 属性的索引。" + +#: ../../library/dis.rst:771 +msgid "" +"Unpacks TOS into *count* individual values, which are put onto the stack " +"right-to-left." +msgstr "将 TOS 解包为 *count* 个单独的值,它们将按从右至左的顺序被放入堆栈。" + +#: ../../library/dis.rst:777 +msgid "" +"Implements assignment with a starred target: Unpacks an iterable in TOS into" +" individual values, where the total number of values can be smaller than the" +" number of items in the iterable: one of the new values will be a list of " +"all leftover items." +msgstr "" +"实现使用带星号的目标进行赋值:将 TOS 中的可迭代对象解包为单独的值,其中值的总数可以小于可迭代对象中的项数:新值之一将是由所有剩余项构成的列表。" + +#: ../../library/dis.rst:782 +msgid "" +"The low byte of *counts* is the number of values before the list value, the " +"high byte of *counts* the number of values after it. The resulting values " +"are put onto the stack right-to-left." +msgstr "*counts* 的低字节是列表值之前的值的数量,*counts* 中的高字节则是之后的值的数量。 结果值会按从右至左的顺序入栈。" + +#: ../../library/dis.rst:789 +msgid "" +"Implements ``TOS.name = TOS1``, where *namei* is the index of name in " +":attr:`co_names`." +msgstr "实现 ``TOS.name = TOS1``,其中 *namei* 是 name 在 :attr:`co_names` 中的索引号。" + +#: ../../library/dis.rst:795 +msgid "" +"Implements ``del TOS.name``, using *namei* as index into :attr:`co_names`." +msgstr "实现 ``del TOS.name``,使用 *namei* 作为 :attr:`co_names` 中的索引号。" + +#: ../../library/dis.rst:800 +msgid "Works as :opcode:`STORE_NAME`, but stores the name as a global." +msgstr "类似于 :opcode:`STORE_NAME` 但会将 name 存储为全局变量。" + +#: ../../library/dis.rst:805 +msgid "Works as :opcode:`DELETE_NAME`, but deletes a global name." +msgstr "类似于 :opcode:`DELETE_NAME` 但会删除一个全局变量。" + +#: ../../library/dis.rst:810 +msgid "Pushes ``co_consts[consti]`` onto the stack." +msgstr "将 ``co_consts[consti]`` 推入栈顶。" + +#: ../../library/dis.rst:815 +msgid "Pushes the value associated with ``co_names[namei]`` onto the stack." +msgstr "将与 ``co_names[namei]`` 相关联的值推入栈顶。" + +#: ../../library/dis.rst:820 +msgid "" +"Creates a tuple consuming *count* items from the stack, and pushes the " +"resulting tuple onto the stack." +msgstr "创建一个使用了来自栈的 *count* 个项的元组,并将结果元组推入栈顶。" + +#: ../../library/dis.rst:826 +msgid "Works as :opcode:`BUILD_TUPLE`, but creates a list." +msgstr "类似于 :opcode:`BUILD_TUPLE` 但会创建一个列表。" + +#: ../../library/dis.rst:831 +msgid "Works as :opcode:`BUILD_TUPLE`, but creates a set." +msgstr "类似于 :opcode:`BUILD_TUPLE` 但会创建一个集合。" + +#: ../../library/dis.rst:836 +msgid "" +"Pushes a new dictionary object onto the stack. Pops ``2 * count`` items so " +"that the dictionary holds *count* entries: ``{..., TOS3: TOS2, TOS1: TOS}``." +msgstr "" +"将一个新字典对象推入栈顶。 弹出 ``2 * count`` 项使得字典包含 *count* 个条目: ``{..., TOS3: TOS2, " +"TOS1: TOS}``。" + +#: ../../library/dis.rst:840 +msgid "" +"The dictionary is created from stack items instead of creating an empty " +"dictionary pre-sized to hold *count* items." +msgstr "字典是根据栈中的项创建而不是创建一个预设大小包含 *count* 项的空字典。" + +#: ../../library/dis.rst:847 +msgid "" +"The version of :opcode:`BUILD_MAP` specialized for constant keys. Pops the " +"top element on the stack which contains a tuple of keys, then starting from " +"``TOS1``, pops *count* values to form values in the built dictionary." +msgstr "" +":opcode:`BUILD_MAP` 版本专用于常量键。 弹出的栈顶元素包含一个由键构成的元组,然后从 ``TOS1`` 开始从构建字典的值中弹出 " +"*count* 个值。" + +#: ../../library/dis.rst:856 +msgid "" +"Concatenates *count* strings from the stack and pushes the resulting string " +"onto the stack." +msgstr "拼接 *count* 个来自栈的字符串并将结果字符串推入栈顶。" + +#: ../../library/dis.rst:864 +msgid "" +"Pops a list from the stack and pushes a tuple containing the same values." +msgstr "从堆栈中弹出一个列表并推入一个包含相同值的元组。" + +#: ../../library/dis.rst:871 +msgid "Calls ``list.extend(TOS1[-i], TOS)``. Used to build lists." +msgstr "调用 ``list.extend(TOS1[-i], TOS)``。 用于构建列表。" + +#: ../../library/dis.rst:878 +msgid "Calls ``set.update(TOS1[-i], TOS)``. Used to build sets." +msgstr "调用 ``set.update(TOS1[-i], TOS)``。 用于构建集合。" + +#: ../../library/dis.rst:885 +msgid "Calls ``dict.update(TOS1[-i], TOS)``. Used to build dicts." +msgstr "调用 ``dict.update(TOS1[-i], TOS)``。 用于构建字典。" + +#: ../../library/dis.rst:892 +msgid "Like :opcode:`DICT_UPDATE` but raises an exception for duplicate keys." +msgstr "类似于 :opcode:`DICT_UPDATE` 但对于重复的键会引发异常。" + +#: ../../library/dis.rst:899 +msgid "Replaces TOS with ``getattr(TOS, co_names[namei])``." +msgstr "将 TOS 替换为 ``getattr(TOS, co_names[namei])``。" + +#: ../../library/dis.rst:904 +msgid "" +"Performs a Boolean operation. The operation name can be found in " +"``cmp_op[opname]``." +msgstr "执行布尔运算操作。 操作名称可在 ``cmp_op[opname]`` 中找到。" + +#: ../../library/dis.rst:910 +msgid "Performs ``is`` comparison, or ``is not`` if ``invert`` is 1." +msgstr "执行 ``is`` 比较,或者如果 ``invert`` 为 1 则执行 ``is not``。" + +#: ../../library/dis.rst:917 +msgid "Performs ``in`` comparison, or ``not in`` if ``invert`` is 1." +msgstr "执行 ``in`` 比较,或者如果 ``invert`` 为 1 则执行 ``not in``。" + +#: ../../library/dis.rst:924 +msgid "" +"Imports the module ``co_names[namei]``. TOS and TOS1 are popped and provide" +" the *fromlist* and *level* arguments of :func:`__import__`. The module " +"object is pushed onto the stack. The current namespace is not affected: for" +" a proper import statement, a subsequent :opcode:`STORE_FAST` instruction " +"modifies the namespace." +msgstr "" +"导入模块 ``co_names[namei]``。 会弹出 TOS 和 TOS1 以提供 *fromlist* 和 *level* 参数给 " +":func:`__import__`。 模块对象会被推入栈顶。 当前命名空间不受影响:对于一条标准 import 语句,会执行后续的 " +":opcode:`STORE_FAST` 指令来修改命名空间。" + +#: ../../library/dis.rst:933 +msgid "" +"Loads the attribute ``co_names[namei]`` from the module found in TOS. The " +"resulting object is pushed onto the stack, to be subsequently stored by a " +":opcode:`STORE_FAST` instruction." +msgstr "" +"从在 TOS 内找到的模块中加载属性 ``co_names[namei]``。 结果对象会被推入栈顶,以便由后续的 " +":opcode:`STORE_FAST` 指令来保存。" + +#: ../../library/dis.rst:940 +msgid "Increments bytecode counter by *delta*." +msgstr "将字节码计数器的值增加 *delta*。" + +#: ../../library/dis.rst:945 +msgid "If TOS is true, sets the bytecode counter to *target*. TOS is popped." +msgstr "如果 TOS 为真值,则将字节码计数器的值设为 *target*。 TOS 会被弹出。" + +#: ../../library/dis.rst:952 +msgid "" +"If TOS is false, sets the bytecode counter to *target*. TOS is popped." +msgstr "如果 TOS 为假值,则将字节码计数器的值设为 *target*。 TOS 会被弹出。" + +#: ../../library/dis.rst:958 +msgid "" +"Tests whether the second value on the stack is an exception matching TOS, " +"and jumps if it is not. Pops two values from the stack." +msgstr "检测堆栈中的第二个值是否为匹配 TOS 的异常,如果不是则会跳转。 从堆栈中弹出两个值。" + +#: ../../library/dis.rst:966 +msgid "" +"If TOS is true, sets the bytecode counter to *target* and leaves TOS on the " +"stack. Otherwise (TOS is false), TOS is popped." +msgstr "如果 TOS 为真值,则将字节码计数器的值设为 *target* 并将 TOS 留在栈顶。 否则(如 TOS 为假值),TOS 会被弹出。" + +#: ../../library/dis.rst:974 +msgid "" +"If TOS is false, sets the bytecode counter to *target* and leaves TOS on the" +" stack. Otherwise (TOS is true), TOS is popped." +msgstr "如果 TOS 为假值,则将字节码计数器的值设为 *target* 并将 TOS 留在栈顶。 否则(如 TOS 为真值),TOS 会被弹出。" + +#: ../../library/dis.rst:982 +msgid "Set bytecode counter to *target*." +msgstr "将字节码计数器的值设为 *target*。" + +#: ../../library/dis.rst:987 +msgid "" +"TOS is an :term:`iterator`. Call its :meth:`~iterator.__next__` method. If" +" this yields a new value, push it on the stack (leaving the iterator below " +"it). If the iterator indicates it is exhausted, TOS is popped, and the byte" +" code counter is incremented by *delta*." +msgstr "" +"TOS 是一个 :term:`iterator`。 请调用其 :meth:`~iterator.__next__` 方法。 " +"如果此操作产生了一个新值,则将其推入栈顶(将迭代器留在其下方)。 如果迭代器提示已耗尽,TOS 会被弹出,并且字节码计数器将增加 *delta*。" + +#: ../../library/dis.rst:995 +msgid "Loads the global named ``co_names[namei]`` onto the stack." +msgstr "加载名称为 ``co_names[namei]`` 的全局对象推入栈顶。" + +#: ../../library/dis.rst:1000 +msgid "" +"Pushes a try block from a try-finally or try-except clause onto the block " +"stack. *delta* points to the finally block or the first except block." +msgstr "" +"将一个来自 try-finally 或 try-except 子句的 try 代码块推入代码块栈顶。 相对 finally 代码块或第一个 except" +" 代码块 *delta* 个点数。" + +#: ../../library/dis.rst:1006 +msgid "" +"Pushes a reference to the local ``co_varnames[var_num]`` onto the stack." +msgstr "将指向局部对象 ``co_varnames[var_num]`` 的引用推入栈顶。" + +#: ../../library/dis.rst:1011 +msgid "Stores TOS into the local ``co_varnames[var_num]``." +msgstr "将 TOS 存放到局部对象 ``co_varnames[var_num]``。" + +#: ../../library/dis.rst:1016 +msgid "Deletes local ``co_varnames[var_num]``." +msgstr "移除局部对象 ``co_varnames[var_num]``。" + +#: ../../library/dis.rst:1021 +msgid "" +"Pushes a reference to the cell contained in slot *i* of the cell and free " +"variable storage. The name of the variable is ``co_cellvars[i]`` if *i* is " +"less than the length of *co_cellvars*. Otherwise it is ``co_freevars[i - " +"len(co_cellvars)]``." +msgstr "" +"将一个包含在单元的第 *i* 个空位中的对单元的引用推入栈顶并释放可用的存储空间。 如果 *i* 小于 *co_cellvars* 的长度则变量的名称为" +" ``co_cellvars[i]``。 否则为 ``co_freevars[i - len(co_cellvars)]``。" + +#: ../../library/dis.rst:1029 +msgid "" +"Loads the cell contained in slot *i* of the cell and free variable storage. " +"Pushes a reference to the object the cell contains on the stack." +msgstr "加载包含在单元的第 *i* 个空位中的单元并释放可用的存储空间。 将一个对单元所包含对象的引用推入栈顶。" + +#: ../../library/dis.rst:1035 +msgid "" +"Much like :opcode:`LOAD_DEREF` but first checks the locals dictionary before" +" consulting the cell. This is used for loading free variables in class " +"bodies." +msgstr "类似于 :opcode:`LOAD_DEREF` 但在查询单元之前会首先检查局部对象字典。 这被用于加载类语句体中的自由变量。" + +#: ../../library/dis.rst:1044 +msgid "" +"Stores TOS into the cell contained in slot *i* of the cell and free variable" +" storage." +msgstr "将 TOS 存放到包含在单元的第 *i* 个空位中的单元内并释放可用存储空间。" + +#: ../../library/dis.rst:1050 +msgid "" +"Empties the cell contained in slot *i* of the cell and free variable " +"storage. Used by the :keyword:`del` statement." +msgstr "清空包含在单元的第 *i* 个空位中的单元并释放可用存储空间。 被用于 :keyword:`del` 语句。" + +#: ../../library/dis.rst:1058 +msgid "" +"Raises an exception using one of the 3 forms of the ``raise`` statement, " +"depending on the value of *argc*:" +msgstr "使用 ``raise`` 语句的 3 种形式之一引发异常,具体形式取决于 *argc* 的值:" + +#: ../../library/dis.rst:1061 +msgid "0: ``raise`` (re-raise previous exception)" +msgstr "0: ``raise`` (重新引发之前的异常)" + +#: ../../library/dis.rst:1062 +msgid "1: ``raise TOS`` (raise exception instance or type at ``TOS``)" +msgstr "1: ``raise TOS`` (在 ``TOS`` 上引发异常实例或类型)" + +#: ../../library/dis.rst:1063 +msgid "" +"2: ``raise TOS1 from TOS`` (raise exception instance or type at ``TOS1`` " +"with ``__cause__`` set to ``TOS``)" +msgstr "" +"2: ``raise TOS1 from TOS`` (在 ``TOS1`` 上引发异常实例或类型并将 ``__cause__`` 设为 " +"``TOS``)" + +#: ../../library/dis.rst:1069 +msgid "" +"Calls a callable object with positional arguments. *argc* indicates the " +"number of positional arguments. The top of the stack contains positional " +"arguments, with the right-most argument on top. Below the arguments is a " +"callable object to call. ``CALL_FUNCTION`` pops all arguments and the " +"callable object off the stack, calls the callable object with those " +"arguments, and pushes the return value returned by the callable object." +msgstr "" +"调用一个可调用对象并传入位置参数。 *argc* 指明位置参数的数量。 栈顶包含位置参数,其中最右边的参数在最顶端。 " +"在参数之下是一个待调用的可调用对象。 ``CALL_FUNCTION`` " +"会从栈中弹出所有参数以及可调用对象,附带这些参数调用该可调用对象,并将可调用对象所返回的返回值推入栈顶。" + +#: ../../library/dis.rst:1077 +msgid "This opcode is used only for calls with positional arguments." +msgstr "此操作码仅用于附带位置参数的调用。" + +#: ../../library/dis.rst:1083 +msgid "" +"Calls a callable object with positional (if any) and keyword arguments. " +"*argc* indicates the total number of positional and keyword arguments. The " +"top element on the stack contains a tuple with the names of the keyword " +"arguments, which must be strings. Below that are the values for the keyword " +"arguments, in the order corresponding to the tuple. Below that are " +"positional arguments, with the right-most parameter on top. Below the " +"arguments is a callable object to call. ``CALL_FUNCTION_KW`` pops all " +"arguments and the callable object off the stack, calls the callable object " +"with those arguments, and pushes the return value returned by the callable " +"object." +msgstr "" +"调用一个可调用对象并传入位置参数(如果有的话)和关键字参数。 *argc* 指明位置参数和关键字参数的总数量。 " +"栈顶元素包含一个关键字参数名称的元组,名称必须为字符串。 在元组之下是与元组顺序相对应的关键字参数值。 在它之下则是位置参数,其中最右边的参数在最顶端。" +" 在参数之下是要调用的可调用对象。 ``CALL_FUNCTION_KW`` " +"会从栈中弹出所有参数及可调用对象,附带这些参数调用该可调用对象,并将可调用对象所返回的返回值推入栈顶。" + +#: ../../library/dis.rst:1095 +msgid "" +"Keyword arguments are packed in a tuple instead of a dictionary, *argc* " +"indicates the total number of arguments." +msgstr "关键字参数会被打包为一个元组而非字典,*argc* 指明参数的总数量。" + +#: ../../library/dis.rst:1102 +msgid "" +"Calls a callable object with variable set of positional and keyword " +"arguments. If the lowest bit of *flags* is set, the top of the stack " +"contains a mapping object containing additional keyword arguments. Before " +"the callable is called, the mapping object and iterable object are each " +"\"unpacked\" and their contents passed in as keyword and positional " +"arguments respectively. ``CALL_FUNCTION_EX`` pops all arguments and the " +"callable object off the stack, calls the callable object with those " +"arguments, and pushes the return value returned by the callable object." +msgstr "" +"调用一个可调用对象并附带位置参数和关键字参数变量集合。 如果设置了 *flags* 的最低位,则栈顶包含一个由额外关键字参数组成的映射对象。 " +"在调用该可调用对象之前,映射对象和可迭代对象会被分别“解包”并将它们的内容分别作为关键字参数和位置参数传入。 ``CALL_FUNCTION_EX`` " +"会中栈中弹出所有参数及可调用对象,附带这些参数调用该可调用对象,并将可调用对象所返回的返回值推入栈顶。" + +#: ../../library/dis.rst:1117 +msgid "" +"Loads a method named ``co_names[namei]`` from the TOS object. TOS is popped." +" This bytecode distinguishes two cases: if TOS has a method with the correct" +" name, the bytecode pushes the unbound method and TOS. TOS will be used as " +"the first argument (``self``) by :opcode:`CALL_METHOD` when calling the " +"unbound method. Otherwise, ``NULL`` and the object return by the attribute " +"lookup are pushed." +msgstr "" +"从 TOS 对象加载一个名为 ``co_names[namei]`` 的方法。 TOS 将被弹出。 此字节码可区分两种情况:如果 TOS " +"有一个名称正确的方法,字节码会将未绑定方法和 TOS 推入栈顶。 TOS 将在调用未绑定方法时被用作 :opcode:`CALL_METHOD` " +"的第一个参数 (``self``)。 否则会将 ``NULL`` 和属性查找所返回的对象推入栈顶。" + +#: ../../library/dis.rst:1129 +msgid "" +"Calls a method. *argc* is the number of positional arguments. Keyword " +"arguments are not supported. This opcode is designed to be used with " +":opcode:`LOAD_METHOD`. Positional arguments are on top of the stack. Below " +"them, the two items described in :opcode:`LOAD_METHOD` are on the stack " +"(either ``self`` and an unbound method object or ``NULL`` and an arbitrary " +"callable). All of them are popped and the return value is pushed." +msgstr "" +"调用一个方法。 *argc* 是位置参数的数量。 关键字参数不受支持。 此操作码被设计用于配合 :opcode:`LOAD_METHOD` 使用。 " +"位置参数放在栈顶。 在它们之下放在栈中的是由 :opcode:`LOAD_METHOD` 所描述的两个条目(或者是 ``self`` " +"和一个未绑定方法对象,或者是 ``NULL`` 和一个任意可调用对象)。 它们会被全部弹出并将返回值推入栈顶。" + +#: ../../library/dis.rst:1141 +msgid "" +"Pushes a new function object on the stack. From bottom to top, the consumed" +" stack must consist of values if the argument carries a specified flag value" +msgstr "将一个新函数对象推入栈顶。 从底端到顶端,如果参数带有指定的旗标值则所使用的栈必须由这些值组成。" + +#: ../../library/dis.rst:1144 +msgid "" +"``0x01`` a tuple of default values for positional-only and positional-or-" +"keyword parameters in positional order" +msgstr "``0x01`` 一个默认值的元组,用于按位置排序的仅限位置形参以及位置或关键字形参" + +#: ../../library/dis.rst:1146 +msgid "``0x02`` a dictionary of keyword-only parameters' default values" +msgstr "``0x02`` 一个仅限关键字形参的默认值的字典" + +#: ../../library/dis.rst:1147 +msgid "``0x04`` an annotation dictionary" +msgstr "``0x04`` 是一个标注字典" + +#: ../../library/dis.rst:1148 +msgid "``0x08`` a tuple containing cells for free variables, making a closure" +msgstr "``0x08`` 一个包含用于自由变量的单元的元组,生成一个闭包" + +#: ../../library/dis.rst:1149 +msgid "the code associated with the function (at TOS1)" +msgstr "与函数相关联的代码 (在 TOS1)" + +#: ../../library/dis.rst:1150 +msgid "the :term:`qualified name` of the function (at TOS)" +msgstr "函数的 :term:`qualified name` (在 TOS)" + +#: ../../library/dis.rst:1157 +msgid "" +"Pushes a slice object on the stack. *argc* must be 2 or 3. If it is 2, " +"``slice(TOS1, TOS)`` is pushed; if it is 3, ``slice(TOS2, TOS1, TOS)`` is " +"pushed. See the :func:`slice` built-in function for more information." +msgstr "" +"将一个切片对象推入栈顶。 *argc* 必须为 2 或 3。 如果为 2,则推入 ``slice(TOS1, TOS)``;如果为 3,则推入 " +"``slice(TOS2, TOS1, TOS)``。 请参阅 :func:`slice` 内置函数了解详细信息。" + +#: ../../library/dis.rst:1164 +msgid "" +"Prefixes any opcode which has an argument too big to fit into the default " +"one byte. *ext* holds an additional byte which act as higher bits in the " +"argument. For each opcode, at most three prefixal ``EXTENDED_ARG`` are " +"allowed, forming an argument from two-byte to four-byte." +msgstr "" +"为任意带有大到无法放入默认的单字节的参数的操作码添加前缀。 *ext* 存放一个附加字节作为参数中的高比特位。 对于每个操作码,最多允许三个 " +"``EXTENDED_ARG`` 前缀,构成两字节到三字节的参数。" + +#: ../../library/dis.rst:1172 +msgid "" +"Used for implementing formatted literal strings (f-strings). Pops an " +"optional *fmt_spec* from the stack, then a required *value*. *flags* is " +"interpreted as follows:" +msgstr "" +"用于实现格式化字面值字符串(f-字符串)。 从栈中弹出一个可选的 *fmt_spec*,然后是一个必须的 *value*。 *flags* " +"的解读方式如下:" + +#: ../../library/dis.rst:1176 +msgid "``(flags & 0x03) == 0x00``: *value* is formatted as-is." +msgstr "``(flags & 0x03) == 0x00``: *value* 按原样格式化。" + +#: ../../library/dis.rst:1177 +msgid "" +"``(flags & 0x03) == 0x01``: call :func:`str` on *value* before formatting " +"it." +msgstr "``(flags & 0x03) == 0x01``: 在格式化 *value* 之前调用其 :func:`str`。" + +#: ../../library/dis.rst:1179 +msgid "" +"``(flags & 0x03) == 0x02``: call :func:`repr` on *value* before formatting " +"it." +msgstr "``(flags & 0x03) == 0x02``: 在格式化 *value* 之前调用其 :func:`repr`。" + +#: ../../library/dis.rst:1181 +msgid "" +"``(flags & 0x03) == 0x03``: call :func:`ascii` on *value* before formatting " +"it." +msgstr "``(flags & 0x03) == 0x03``: 在格式化 *value* 之前调用其 :func:`ascii`。" + +#: ../../library/dis.rst:1183 +msgid "" +"``(flags & 0x04) == 0x04``: pop *fmt_spec* from the stack and use it, else " +"use an empty *fmt_spec*." +msgstr "``(flags & 0x04) == 0x04``: 从栈中弹出 *fmt_spec* 并使用它,否则使用空的 *fmt_spec*。" + +#: ../../library/dis.rst:1186 +msgid "" +"Formatting is performed using :c:func:`PyObject_Format`. The result is " +"pushed on the stack." +msgstr "使用 :c:func:`PyObject_Format` 执行格式化。 结果会被推入栈顶。" + +#: ../../library/dis.rst:1194 +msgid "" +"This is not really an opcode. It identifies the dividing line between " +"opcodes which don't use their argument and those that do (``< " +"HAVE_ARGUMENT`` and ``>= HAVE_ARGUMENT``, respectively)." +msgstr "" +"这不是一个真正的操作码。 它用于标明使用参数和不使用参数的操作码 (分别为 ``< HAVE_ARGUMENT`` 和 ``>= " +"HAVE_ARGUMENT``) 之间的分隔线。" + +#: ../../library/dis.rst:1198 +msgid "" +"Now every instruction has an argument, but opcodes ``< HAVE_ARGUMENT`` " +"ignore it. Before, only opcodes ``>= HAVE_ARGUMENT`` had an argument." +msgstr "" +"现在每条指令都带有参数,但操作码 ``< HAVE_ARGUMENT`` 会忽略它。 之前仅限操作码 ``>= HAVE_ARGUMENT`` " +"带有参数。" + +#: ../../library/dis.rst:1206 +msgid "Opcode collections" +msgstr "操作码集合" + +#: ../../library/dis.rst:1208 +msgid "" +"These collections are provided for automatic introspection of bytecode " +"instructions:" +msgstr "提供这些集合用于字节码指令的自动内省:" + +#: ../../library/dis.rst:1213 +msgid "Sequence of operation names, indexable using the bytecode." +msgstr "操作名称的序列,可使用字节码来索引。" + +#: ../../library/dis.rst:1218 +msgid "Dictionary mapping operation names to bytecodes." +msgstr "映射操作名称到字节码的字典" + +#: ../../library/dis.rst:1223 +msgid "Sequence of all compare operation names." +msgstr "所有比较操作名称的序列。" + +#: ../../library/dis.rst:1228 +msgid "Sequence of bytecodes that access a constant." +msgstr "访问常量的字节码序列。" + +#: ../../library/dis.rst:1233 +msgid "" +"Sequence of bytecodes that access a free variable (note that 'free' in this " +"context refers to names in the current scope that are referenced by inner " +"scopes or names in outer scopes that are referenced from this scope. It " +"does *not* include references to global or builtin scopes)." +msgstr "" +"访问自由变量的字节码序列(请注意这里所说的‘自由’是指在当前作用域中被内部作用域所引用的名称,或在外部作用域中被此作用域所引用的名称。 它 *并不* " +"包括对全局或内置作用域的引用)。" + +#: ../../library/dis.rst:1241 +msgid "Sequence of bytecodes that access an attribute by name." +msgstr "按名称访问属性的字节码序列。" + +#: ../../library/dis.rst:1246 +msgid "Sequence of bytecodes that have a relative jump target." +msgstr "具有相对跳转目标的字节码序列。" + +#: ../../library/dis.rst:1251 +msgid "Sequence of bytecodes that have an absolute jump target." +msgstr "具有绝对跳转目标的字节码序列。" + +#: ../../library/dis.rst:1256 +msgid "Sequence of bytecodes that access a local variable." +msgstr "访问局部变量的字节码序列。" + +#: ../../library/dis.rst:1261 +msgid "Sequence of bytecodes of Boolean operations." +msgstr "布尔运算的字节码序列。" diff --git a/library/distribution.po b/library/distribution.po new file mode 100644 index 000000000..7b431b446 --- /dev/null +++ b/library/distribution.po @@ -0,0 +1,36 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) 2001-2022, Python Software Foundation +# This file is distributed under the same license as the Python package. +# FIRST AUTHOR , YEAR. +# +# Translators: +# Alpha Du , 2019 +# +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: Python 3.9\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2022-11-04 14:34+0000\n" +"PO-Revision-Date: 2017-02-16 23:07+0000\n" +"Last-Translator: Alpha Du , 2019\n" +"Language-Team: Chinese (China) (https://www.transifex.com/python-doc/teams/5390/zh_CN/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: zh_CN\n" +"Plural-Forms: nplurals=1; plural=0;\n" + +#: ../../library/distribution.rst:3 +msgid "Software Packaging and Distribution" +msgstr "软件打包和分发" + +#: ../../library/distribution.rst:5 +msgid "" +"These libraries help you with publishing and installing Python software. " +"While these modules are designed to work in conjunction with the `Python " +"Package Index `__, they can also be used with a local " +"index server, or without any index server at all." +msgstr "" +"这些库可帮助你发布和安装 Python 软件。 虽然这些模块设计为与`Python 包索引 " +"`__结合使用,但它们也可以与本地索引服务器一起使用,或者根本不使用任何索引服务器。" diff --git a/library/distutils.po b/library/distutils.po new file mode 100644 index 000000000..6a753023e --- /dev/null +++ b/library/distutils.po @@ -0,0 +1,102 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) 2001-2024, Python Software Foundation +# This file is distributed under the same license as the Python package. +# FIRST AUTHOR , YEAR. +# +# Translators: +# Kelly Hwong , 2019 +# Rafael Fontenelle , 2024 +# +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: Python 3.9\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2024-04-19 21:47+0000\n" +"PO-Revision-Date: 2017-02-16 23:07+0000\n" +"Last-Translator: Rafael Fontenelle , 2024\n" +"Language-Team: Chinese (China) (https://app.transifex.com/python-doc/teams/5390/zh_CN/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: zh_CN\n" +"Plural-Forms: nplurals=1; plural=0;\n" + +#: ../../library/distutils.rst:2 +msgid ":mod:`distutils` --- Building and installing Python modules" +msgstr ":mod:`distutils` 构建和安装 Python 模块" + +#: ../../library/distutils.rst:12 +msgid "" +"The :mod:`distutils` package provides support for building and installing " +"additional modules into a Python installation. The new modules may be " +"either 100%-pure Python, or may be extension modules written in C, or may be" +" collections of Python packages which include modules coded in both Python " +"and C." +msgstr "" +":mod:`distutils` 提供了对于构建和安装 Python 包的支持。新模块可以是由 100%-纯 Python 代码写成的,也可以是用 C " +"写成的扩展模块,甚至可以同时包括 Python 和 C。" + +#: ../../library/distutils.rst:17 +msgid "" +"Most Python users will *not* want to use this module directly, but instead " +"use the cross-version tools maintained by the Python Packaging Authority. In" +" particular, `setuptools `__ " +"is an enhanced alternative to :mod:`distutils` that provides:" +msgstr "" +"大多数 Python 用户 *不会* 想要直接使用这个包,而是使用 Python 包官方维护的跨版本工具。特别地, `setuptools " +"`__ 是一个对于 :mod:`distutils` " +"的增强选项,它能提供:" + +#: ../../library/distutils.rst:23 +msgid "support for declaring project dependencies" +msgstr "对声明项目依赖的支持" + +#: ../../library/distutils.rst:24 +msgid "" +"additional mechanisms for configuring which files to include in source " +"releases (including plugins for integration with version control systems)" +msgstr "额外的用于配置哪些文件包含在源代码发布中的机制(包括与版本控制系统集成需要的插件)" + +#: ../../library/distutils.rst:26 +msgid "" +"the ability to declare project \"entry points\", which can be used as the " +"basis for application plugin systems" +msgstr "生成项目“进入点”的能力,进入点可用作应用插件系统的基础" + +#: ../../library/distutils.rst:28 +msgid "" +"the ability to automatically generate Windows command line executables at " +"installation time rather than needing to prebuild them" +msgstr "自动在安装时间生成 Windows 命令行可执行文件的能力,而不是需要预编译它们" + +#: ../../library/distutils.rst:30 +msgid "consistent behaviour across all supported Python versions" +msgstr "跨所有受支持的 Python 版本上的一致的表现" + +#: ../../library/distutils.rst:32 +msgid "" +"The recommended `pip `__ installer runs all " +"``setup.py`` scripts with ``setuptools``, even if the script itself only " +"imports ``distutils``. Refer to the `Python Packaging User Guide " +"`_ for more information." +msgstr "" +"推荐的 `pip `__ 安装器用 ``setuptools`` 运行所有的 ``setup.py`` " +"脚本,即使脚本本身只引了 ``distutils`` 包。参考 `Python Packaging User Guide " +"`_  获得更多信息。" + +#: ../../library/distutils.rst:38 +msgid "" +"For the benefits of packaging tool authors and users seeking a deeper " +"understanding of the details of the current packaging and distribution " +"system, the legacy :mod:`distutils` based user documentation and API " +"reference remain available:" +msgstr "为了打包工具的作者和用户能更好理解当前的打包和分发系统,遗留的基于 :mod:`distutils` 的用户文档和 API 参考保持可用:" + +#: ../../library/distutils.rst:43 +msgid ":ref:`install-index`" +msgstr ":ref:`install-index`" + +#: ../../library/distutils.rst:44 +msgid ":ref:`distutils-index`" +msgstr ":ref:`distutils-index`" diff --git a/library/doctest.po b/library/doctest.po new file mode 100644 index 000000000..4934f3a27 --- /dev/null +++ b/library/doctest.po @@ -0,0 +1,2398 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) 2001-2024, Python Software Foundation +# This file is distributed under the same license as the Python package. +# FIRST AUTHOR , YEAR. +# +# Translators: +# MuSheng Chen , 2019 +# nick <2330458484@qq.com>, 2019 +# ppcfish , 2019 +# meowmeowcat , 2021 +# CCXXXI , 2021 +# Alpha Du , 2021 +# Freesand Leo , 2022 +# LeeWendao , 2023 +# Rafael Fontenelle , 2024 +# +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: Python 3.9\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2024-01-19 21:29+0000\n" +"PO-Revision-Date: 2017-02-16 23:07+0000\n" +"Last-Translator: Rafael Fontenelle , 2024\n" +"Language-Team: Chinese (China) (https://app.transifex.com/python-doc/teams/5390/zh_CN/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: zh_CN\n" +"Plural-Forms: nplurals=1; plural=0;\n" + +#: ../../library/doctest.rst:2 +msgid ":mod:`doctest` --- Test interactive Python examples" +msgstr ":mod:`doctest` --- 测试交互式的 Python 示例" + +#: ../../library/doctest.rst:12 +msgid "**Source code:** :source:`Lib/doctest.py`" +msgstr "**源代码:** :source:`Lib/doctest.py`" + +#: ../../library/doctest.rst:16 +msgid "" +"The :mod:`doctest` module searches for pieces of text that look like " +"interactive Python sessions, and then executes those sessions to verify that" +" they work exactly as shown. There are several common ways to use doctest:" +msgstr "" +":mod:`doctest` " +"模块寻找像Python交互式代码的文本,然后执行这些代码来确保它们的确就像展示的那样正确运行,有许多方法来使用doctest:" + +#: ../../library/doctest.rst:20 +msgid "" +"To check that a module's docstrings are up-to-date by verifying that all " +"interactive examples still work as documented." +msgstr "通过验证所有交互式示例仍然按照记录的方式工作,以此来检查模块的文档字符串是否是最新的。" + +#: ../../library/doctest.rst:23 +msgid "" +"To perform regression testing by verifying that interactive examples from a " +"test file or a test object work as expected." +msgstr "通过验证来自一个测试文件或一个测试对象的交互式示例按预期工作,来进行回归测试。" + +#: ../../library/doctest.rst:26 +msgid "" +"To write tutorial documentation for a package, liberally illustrated with " +"input-output examples. Depending on whether the examples or the expository " +"text are emphasized, this has the flavor of \"literate testing\" or " +"\"executable documentation\"." +msgstr "为一个包写指导性的文档,用输入输出的例子来说明。 取决于是强调例子还是说明性的文字,这有一种 \"文本测试 \"或 \"可执行文档 \"的风格。" + +#: ../../library/doctest.rst:31 +msgid "Here's a complete but small example module::" +msgstr "下面是一个小却完整的示例模块::" + +#: ../../library/doctest.rst:88 +msgid "" +"If you run :file:`example.py` directly from the command line, :mod:`doctest`" +" works its magic:" +msgstr "如果你直接在命令行里运行 :file:`example.py` , :mod:`doctest` 将发挥它的作用。" + +#: ../../library/doctest.rst:96 +msgid "" +"There's no output! That's normal, and it means all the examples worked. " +"Pass ``-v`` to the script, and :mod:`doctest` prints a detailed log of what " +"it's trying, and prints a summary at the end:" +msgstr "" +"没有输出! 这很正常,这意味着所有的例子都成功了。 把 ``-v`` 传给脚本,:mod:`doctest` " +"会打印出它所尝试的详细日志,并在最后打印出一个总结。" + +#: ../../library/doctest.rst:114 +msgid "And so on, eventually ending with:" +msgstr "以此类推,最终以:" + +#: ../../library/doctest.rst:133 +msgid "" +"That's all you need to know to start making productive use of " +":mod:`doctest`! Jump in. The following sections provide full details. Note" +" that there are many examples of doctests in the standard Python test suite " +"and libraries. Especially useful examples can be found in the standard test " +"file :file:`Lib/test/test_doctest.py`." +msgstr "" +"这就是对于高效地使用 :mod:`doctest` 你所需要知道的一切!开始上手吧。 下面的章节提供了完整的细节。 请注意,在标准的 Python " +"测试套件和库中有许多 doctest 的例子。特别有用的例子可以在标准测试文件 :file:`Lib/test/test_doctest.py` " +"中找到。" + +#: ../../library/doctest.rst:143 +msgid "Simple Usage: Checking Examples in Docstrings" +msgstr "简单用法:检查Docstrings中的示例" + +#: ../../library/doctest.rst:145 +msgid "" +"The simplest way to start using doctest (but not necessarily the way you'll " +"continue to do it) is to end each module :mod:`M` with::" +msgstr "开始使用doctest的最简单方法(但不一定是你将继续这样做的方式)是结束每个模块 :mod:`M` 使用::" + +#: ../../library/doctest.rst:152 +msgid ":mod:`doctest` then examines docstrings in module :mod:`M`." +msgstr ":mod:`doctest` 会随后检查模块 :mod:`M` 中的文档字符串。" + +#: ../../library/doctest.rst:154 +msgid "" +"Running the module as a script causes the examples in the docstrings to get " +"executed and verified::" +msgstr "以脚本形式运行该模块会使文档中的例子得到执行和验证::" + +#: ../../library/doctest.rst:159 +msgid "" +"This won't display anything unless an example fails, in which case the " +"failing example(s) and the cause(s) of the failure(s) are printed to stdout," +" and the final line of output is ``***Test Failed*** N failures.``, where " +"*N* is the number of examples that failed." +msgstr "" +"这不会显示任何东西,除非一个例子失败了,在这种情况下,失败的例子和失败的原因会被打印到stdout,最后一行的输出是 ``***Test " +"Failed*** N failures.``,其中 *N* 是失败的例子的数量。" + +#: ../../library/doctest.rst:164 +msgid "Run it with the ``-v`` switch instead::" +msgstr "用 ``-v`` 来运行它来切换,而不是::" + +#: ../../library/doctest.rst:168 +msgid "" +"and a detailed report of all examples tried is printed to standard output, " +"along with assorted summaries at the end." +msgstr "并将所有尝试过的例子的详细报告打印到标准输出,最后还有各种总结。" + +#: ../../library/doctest.rst:171 +msgid "" +"You can force verbose mode by passing ``verbose=True`` to :func:`testmod`, " +"or prohibit it by passing ``verbose=False``. In either of those cases, " +"``sys.argv`` is not examined by :func:`testmod` (so passing ``-v`` or not " +"has no effect)." +msgstr "" +"你可以通过向 :func:`testmod` 传递 ``verbose=True`` 来强制执行 verbose 模式,或者通过传递 " +"``verbose=False`` 来禁止它。 在这两种情况下,``sys.argv`` 都不会被 :func:`testmod` 检查(所以传递 " +"``-v`` 或不传递都没有影响)。" + +#: ../../library/doctest.rst:176 +msgid "" +"There is also a command line shortcut for running :func:`testmod`. You can " +"instruct the Python interpreter to run the doctest module directly from the " +"standard library and pass the module name(s) on the command line::" +msgstr "" +"还有一个命令行快捷方式用于运行 :func:`testmod`。 " +"你可以指示Python解释器直接从标准库中运行doctest模块,并在命令行中传递模块名称::" + +#: ../../library/doctest.rst:182 +msgid "" +"This will import :file:`example.py` as a standalone module and run " +":func:`testmod` on it. Note that this may not work correctly if the file is" +" part of a package and imports other submodules from that package." +msgstr "" +"这将导入 :file:`example.py` 作为一个独立的模块,并对其运行 :func:`testmod`。 " +"注意,如果该文件是一个包的一部分,并且从该包中导入了其他子模块,这可能无法正确工作。" + +#: ../../library/doctest.rst:186 +msgid "" +"For more information on :func:`testmod`, see section :ref:`doctest-basic-" +"api`." +msgstr "关于 :func:`testmod` 的更多信息,请参见 :ref:`doctest-basic-api` 部分。" + +#: ../../library/doctest.rst:192 +msgid "Simple Usage: Checking Examples in a Text File" +msgstr "简单的用法:检查文本文件中的例子" + +#: ../../library/doctest.rst:194 +msgid "" +"Another simple application of doctest is testing interactive examples in a " +"text file. This can be done with the :func:`testfile` function::" +msgstr "doctest 的另一个简单应用是测试文本文件中的交互式例子。 这可以用 :func:`testfile` 函数来完成::" + +#: ../../library/doctest.rst:200 +msgid "" +"That short script executes and verifies any interactive Python examples " +"contained in the file :file:`example.txt`. The file content is treated as " +"if it were a single giant docstring; the file doesn't need to contain a " +"Python program! For example, perhaps :file:`example.txt` contains this:" +msgstr "" +"这个简短的脚本执行并验证文件 :file:`example.txt` 中包含的任何交互式 Python " +"示例。该文件的内容被当作一个巨大的文档串来处理;该文件不需要包含一个Python程序!例如,也许 :file:`example.txt` 包含以下内容:" + +#: ../../library/doctest.rst:223 +msgid "" +"Running ``doctest.testfile(\"example.txt\")`` then finds the error in this " +"documentation::" +msgstr "运行 ``doctest.testfile(\"example.txt\")``,然后发现这个文档中的错误::" + +#: ../../library/doctest.rst:234 +msgid "" +"As with :func:`testmod`, :func:`testfile` won't display anything unless an " +"example fails. If an example does fail, then the failing example(s) and the" +" cause(s) of the failure(s) are printed to stdout, using the same format as " +":func:`testmod`." +msgstr "" +"与 :func:`testmod` 一样, :func:`testfile` 不会显示任何东西,除非一个例子失败。 " +"如果一个例子失败了,那么失败的例子和失败的原因将被打印到stdout,使用的格式与 :func:`testmod` 相同。" + +#: ../../library/doctest.rst:239 +msgid "" +"By default, :func:`testfile` looks for files in the calling module's " +"directory. See section :ref:`doctest-basic-api` for a description of the " +"optional arguments that can be used to tell it to look for files in other " +"locations." +msgstr "" +"默认情况下,:func:`testfile` 在调用模块的目录中寻找文件。参见章节 :ref:`doctest-basic-" +"api`,了解可用于告诉它在其他位置寻找文件的可选参数的描述。" + +#: ../../library/doctest.rst:243 +msgid "" +"Like :func:`testmod`, :func:`testfile`'s verbosity can be set with the " +"``-v`` command-line switch or with the optional keyword argument *verbose*." +msgstr "" +"像 :func:`testmod` 一样,:func:`testfile` 的详细程度可以通过命令行 ``-v`` 切换或可选的关键字参数 " +"*verbose* 来设置。" + +#: ../../library/doctest.rst:247 +msgid "" +"There is also a command line shortcut for running :func:`testfile`. You can" +" instruct the Python interpreter to run the doctest module directly from the" +" standard library and pass the file name(s) on the command line::" +msgstr "" +"还有一个命令行快捷方式用于运行 :func:`testfile`。 " +"你可以指示Python解释器直接从标准库中运行doctest模块,并在命令行中传递文件名::" + +#: ../../library/doctest.rst:253 +msgid "" +"Because the file name does not end with :file:`.py`, :mod:`doctest` infers " +"that it must be run with :func:`testfile`, not :func:`testmod`." +msgstr "" +"因为文件名没有以 :file:`.py` 结尾,:mod:`doctest` 推断它必须用 :func:`testfile` 运行,而不是 " +":func:`testmod`。" + +#: ../../library/doctest.rst:256 +msgid "" +"For more information on :func:`testfile`, see section :ref:`doctest-basic-" +"api`." +msgstr "关于 :func:`testfile` 的更多信息,请参见 :ref:`doctest-basic-api` 一节。" + +#: ../../library/doctest.rst:262 +msgid "How It Works" +msgstr "它是如何工作的" + +#: ../../library/doctest.rst:264 +msgid "" +"This section examines in detail how doctest works: which docstrings it looks" +" at, how it finds interactive examples, what execution context it uses, how " +"it handles exceptions, and how option flags can be used to control its " +"behavior. This is the information that you need to know to write doctest " +"examples; for information about actually running doctest on these examples, " +"see the following sections." +msgstr "" +"这一节详细研究了doctest的工作原理:它查看哪些文档串,它如何找到交互式的用例,它使用什么执行环境,它如何处理异常,以及如何用选项标志来控制其行为。这是你写doctest例子所需要知道的信息;关于在这些例子上实际运行doctest的信息,请看下面的章节。" + +#: ../../library/doctest.rst:275 +msgid "Which Docstrings Are Examined?" +msgstr "哪些文件串被检查了?" + +#: ../../library/doctest.rst:277 +msgid "" +"The module docstring, and all function, class and method docstrings are " +"searched. Objects imported into the module are not searched." +msgstr "模块的文档串以及所有函数、类和方法的文档串都将被搜索。 导入模块的对象不被搜索。" + +#: ../../library/doctest.rst:280 +msgid "" +"In addition, if ``M.__test__`` exists and \"is true\", it must be a dict, " +"and each entry maps a (string) name to a function object, class object, or " +"string. Function and class object docstrings found from ``M.__test__`` are " +"searched, and strings are treated as if they were docstrings. In output, a " +"key ``K`` in ``M.__test__`` appears with name ::" +msgstr "" +"此外,如果 ``M.__test__`` 存在并且 " +"\"为真值\",则它必须是一个字典,其中每个条目都将一个(字符串)名称映射到一个函数对象、类对象或字符串。 从 ``M.__test__`` " +"找到的函数和类对象的文档字符串会被搜索,而字符串会被当作文档字符串来处理。 在输出时,每个键 ``K`` 在 ``M.__test__`` " +"中都显示为其名称 ::" + +#: ../../library/doctest.rst:288 +msgid "" +"Any classes found are recursively searched similarly, to test docstrings in " +"their contained methods and nested classes." +msgstr "任何发现的类都会以类似的方式进行递归搜索,以测试其包含的方法和嵌套类中的文档串。" + +#: ../../library/doctest.rst:299 +msgid "How are Docstring Examples Recognized?" +msgstr "文档串的例子是如何被识别的?" + +#: ../../library/doctest.rst:301 +msgid "" +"In most cases a copy-and-paste of an interactive console session works fine," +" but doctest isn't trying to do an exact emulation of any specific Python " +"shell." +msgstr "" +"在大多数情况下,对交互式控制台会话的复制和粘贴功能工作得很好,但是 doctest 并不试图对任何特定的 Python shell 进行精确的模拟。" + +#: ../../library/doctest.rst:326 +msgid "" +"Any expected output must immediately follow the final ``'>>> '`` or ``'... " +"'`` line containing the code, and the expected output (if any) extends to " +"the next ``'>>> '`` or all-whitespace line." +msgstr "" +"任何预期的输出必须紧随包含代码的最后 ``'>>> '`` 或 ``'... '`` 行,预期的输出(如果有的话)延伸到下一 ``'>>> '`` " +"行或全空白行。" + +#: ../../library/doctest.rst:330 +msgid "The fine print:" +msgstr "fine输出:" + +#: ../../library/doctest.rst:332 +msgid "" +"Expected output cannot contain an all-whitespace line, since such a line is " +"taken to signal the end of expected output. If expected output does contain" +" a blank line, put ```` in your doctest example each place a " +"blank line is expected." +msgstr "" +"预期输出不能包含一个全白的行,因为这样的行被认为是预期输出的结束信号。 如果预期的输出包含一个空行,在你的测试例子中,在每一个预期有空行的地方加上 " +"````。" + +#: ../../library/doctest.rst:337 +msgid "" +"All hard tab characters are expanded to spaces, using 8-column tab stops. " +"Tabs in output generated by the tested code are not modified. Because any " +"hard tabs in the sample output *are* expanded, this means that if the code " +"output includes hard tabs, the only way the doctest can pass is if the " +":const:`NORMALIZE_WHITESPACE` option or :ref:`directive ` is in effect. Alternatively, the test can be rewritten to " +"capture the output and compare it to an expected value as part of the test." +" This handling of tabs in the source was arrived at through trial and " +"error, and has proven to be the least error prone way of handling them. It " +"is possible to use a different algorithm for handling tabs by writing a " +"custom :class:`DocTestParser` class." +msgstr "" +"所有硬制表符都被扩展为空格,使用 8 列的制表符。由测试代码生成的输出中的制表符不会被修改。 " +"因为样本输出中的任何硬制表符都会被扩展,这意味着如果代码输出包括硬制表符,文档测试通过的唯一方法是 " +":const:`NORMALIZE_WHITESPACE` 选项或者 :ref:`指令 ` 是有效的。 " +"另外,测试可以被重写,以捕获输出并将其与预期值进行比较,作为测试的一部分。这种对源码中标签的处理是通过试错得出的,并被证明是最不容易出错的处理方式。通过编写一个自定义的" +" :class:`DocTestParser` 类,可以使用一个不同的算法来处理标签。" + +#: ../../library/doctest.rst:349 +msgid "" +"Output to stdout is captured, but not output to stderr (exception tracebacks" +" are captured via a different means)." +msgstr "向stdout的输出被捕获,但不向stderr输出(异常回溯通过不同的方式被捕获)。" + +#: ../../library/doctest.rst:352 +msgid "" +"If you continue a line via backslashing in an interactive session, or for " +"any other reason use a backslash, you should use a raw docstring, which will" +" preserve your backslashes exactly as you type them::" +msgstr "如果你在交互式会话中通过反斜线续行,或出于任何其他原因使用反斜线,你应该使用原始文件串,它将完全保留你输入的反斜线::" + +#: ../../library/doctest.rst:361 +msgid "" +"Otherwise, the backslash will be interpreted as part of the string. For " +"example, the ``\\n`` above would be interpreted as a newline character. " +"Alternatively, you can double each backslash in the doctest version (and not" +" use a raw string)::" +msgstr "" +"否则,反斜杠将被解释为字符串的一部分。例如,上面的 ``\\n`` 会被解释为一个换行符。 " +"另外,你可以在doctest版本中把每个反斜杠加倍(而不使用原始字符串)::" + +#: ../../library/doctest.rst:370 +msgid "The starting column doesn't matter::" +msgstr "起始列并不重要::" + +#: ../../library/doctest.rst:377 +msgid "" +"and as many leading whitespace characters are stripped from the expected " +"output as appeared in the initial ``'>>> '`` line that started the example." +msgstr "并从预期的输出中剥离出与开始该例子的初始 ``'>>> '`` 行中出现的同样多的前导空白字符。" + +#: ../../library/doctest.rst:384 +msgid "What's the Execution Context?" +msgstr "什么是执行上下文?" + +#: ../../library/doctest.rst:386 +msgid "" +"By default, each time :mod:`doctest` finds a docstring to test, it uses a " +"*shallow copy* of :mod:`M`'s globals, so that running tests doesn't change " +"the module's real globals, and so that one test in :mod:`M` can't leave " +"behind crumbs that accidentally allow another test to work. This means " +"examples can freely use any names defined at top-level in :mod:`M`, and " +"names defined earlier in the docstring being run. Examples cannot see names " +"defined in other docstrings." +msgstr "" +"默认情况下,每次 :mod:`doctest` 找到要测试的文档串时,它都会使用 :mod:`M` " +"的*浅层副本*,这样运行测试就不会改变模块的真正全局变量,而且 :mod:`M` " +"的一个测试也不会留下临时变量,从而意外地让另一个测试通过。这意味着例子可以自由地使用 :mod:`M` " +"中的任何顶级定义的名字,以及正在运行的文档串中早期定义的名字。用例不能看到其他文档串中定义的名字。" + +#: ../../library/doctest.rst:394 +msgid "" +"You can force use of your own dict as the execution context by passing " +"``globs=your_dict`` to :func:`testmod` or :func:`testfile` instead." +msgstr "" +"你可以通过将 ``globs=your_dict`` 传递给 :func:`testmod` 或 :func:`testfile` " +"来强制使用你自己的dict作为执行环境。" + +#: ../../library/doctest.rst:401 +msgid "What About Exceptions?" +msgstr "异常如何处理?" + +#: ../../library/doctest.rst:403 +msgid "" +"No problem, provided that the traceback is the only output produced by the " +"example: just paste in the traceback. [#]_ Since tracebacks contain details" +" that are likely to change rapidly (for example, exact file paths and line " +"numbers), this is one case where doctest works hard to be flexible in what " +"it accepts." +msgstr "" +"没问题,只要回溯是这个例子产生的唯一输出:只要粘贴回溯即可。[#]_ " +"由于回溯所包含的细节可能会迅速变化(例如,确切的文件路径和行号),这是doctest努力使其接受的内容具有灵活性的一种情况。" + +#: ../../library/doctest.rst:409 +msgid "Simple example::" +msgstr "简单实例::" + +#: ../../library/doctest.rst:416 +msgid "" +"That doctest succeeds if :exc:`ValueError` is raised, with the " +"``list.remove(x): x not in list`` detail as shown." +msgstr "" +"如果 :exc:`ValueError` 被触发,该测试就会成功,``list.remove(x): x not in list`` 的细节如图所示。" + +#: ../../library/doctest.rst:419 +msgid "" +"The expected output for an exception must start with a traceback header, " +"which may be either of the following two lines, indented the same as the " +"first line of the example::" +msgstr "异常的预期输出必须以回溯头开始,可以是以下两行中的任何一行,缩进程度与例子中的第一行相同::" + +#: ../../library/doctest.rst:426 +msgid "" +"The traceback header is followed by an optional traceback stack, whose " +"contents are ignored by doctest. The traceback stack is typically omitted, " +"or copied verbatim from an interactive session." +msgstr "回溯头的后面是一个可选的回溯堆栈,其内容被doctest忽略。 回溯堆栈通常是省略的,或者从交互式会话中逐字复制的。" + +#: ../../library/doctest.rst:430 +msgid "" +"The traceback stack is followed by the most interesting part: the line(s) " +"containing the exception type and detail. This is usually the last line of " +"a traceback, but can extend across multiple lines if the exception has a " +"multi-line detail::" +msgstr "回溯堆栈的后面是最有用的部分:包含异常类型和细节的一行(几行)。 这通常是回溯的最后一行,但如果异常有多行细节,则可以延伸到多行::" + +#: ../../library/doctest.rst:442 +msgid "" +"The last three lines (starting with :exc:`ValueError`) are compared against " +"the exception's type and detail, and the rest are ignored." +msgstr "最后三行(以 :exc:`ValueError` 开头)将与异常的类型和细节进行比较,其余的被忽略。" + +#: ../../library/doctest.rst:445 +msgid "" +"Best practice is to omit the traceback stack, unless it adds significant " +"documentation value to the example. So the last example is probably better " +"as::" +msgstr "最佳实践是省略回溯栈,除非它为这个例子增加了重要的文档价值。 因此,最后一个例子可能更好,因为::" + +#: ../../library/doctest.rst:455 +msgid "" +"Note that tracebacks are treated very specially. In particular, in the " +"rewritten example, the use of ``...`` is independent of doctest's " +":const:`ELLIPSIS` option. The ellipsis in that example could be left out, " +"or could just as well be three (or three hundred) commas or digits, or an " +"indented transcript of a Monty Python skit." +msgstr "" +"请注意,回溯的处理方式非常特别。 特别是,在重写的例子中,``...`` 的使用与 doctest 的 :const:`ELLIPSIS` 选项无关。 " +"该例子中的省略号可以不写,也可以是三个(或三百个)逗号或数字,或者是一个缩进的 Monty Python 短剧的剧本。" + +#: ../../library/doctest.rst:461 +msgid "Some details you should read once, but won't need to remember:" +msgstr "有些细节你应该读一遍,但不需要记住:" + +#: ../../library/doctest.rst:463 +msgid "" +"Doctest can't guess whether your expected output came from an exception " +"traceback or from ordinary printing. So, e.g., an example that expects " +"``ValueError: 42 is prime`` will pass whether :exc:`ValueError` is actually " +"raised or if the example merely prints that traceback text. In practice, " +"ordinary output rarely begins with a traceback header line, so this doesn't " +"create real problems." +msgstr "" +"Doctest 不能猜测你的预期输出是来自异常回溯还是来自普通打印。 因此,例如,一个期望 ``ValueError: 42 is prime`` " +"的用例将通过测试,无论 :exc:`ValueError` 是真的被触发,或者该用例只是打印了该回溯文本。 " +"在实践中,普通输出很少以回溯标题行开始,所以这不会产生真正的问题。" + +#: ../../library/doctest.rst:470 +msgid "" +"Each line of the traceback stack (if present) must be indented further than " +"the first line of the example, *or* start with a non-alphanumeric character." +" The first line following the traceback header indented the same and " +"starting with an alphanumeric is taken to be the start of the exception " +"detail. Of course this does the right thing for genuine tracebacks." +msgstr "" +"回溯堆栈的每一行(如果有的话)必须比例子的第一行缩进, *或者* " +"以一个非字母数字的字符开始。回溯头之后的第一行缩进程度相同,并且以字母数字开始,被认为是异常细节的开始。当然,这对真正的回溯来说是正确的事情。" + +#: ../../library/doctest.rst:476 +msgid "" +"When the :const:`IGNORE_EXCEPTION_DETAIL` doctest option is specified, " +"everything following the leftmost colon and any module information in the " +"exception name is ignored." +msgstr "" +"当 :const:`IGNORE_EXCEPTION_DETAIL` doctest " +"选项被指定时,最左边的冒号后面的所有内容以及异常名称中的任何模块信息都被忽略。" + +#: ../../library/doctest.rst:480 +msgid "" +"The interactive shell omits the traceback header line for some " +":exc:`SyntaxError`\\ s. But doctest uses the traceback header line to " +"distinguish exceptions from non-exceptions. So in the rare case where you " +"need to test a :exc:`SyntaxError` that omits the traceback header, you will " +"need to manually add the traceback header line to your test example." +msgstr "" +"交互式 shell 省略了一些 :exc:`SyntaxError` 的回溯头行。但 doctest " +"使用回溯头行来区分异常和非异常。所以在罕见的情况下,如果你需要测试一个省略了回溯头的 " +":exc:`SyntaxError`,你将需要手动添加回溯头行到你的测试用例中。" + +#: ../../library/doctest.rst:488 +msgid "" +"For some :exc:`SyntaxError`\\ s, Python displays the character position of " +"the syntax error, using a ``^`` marker::" +msgstr "对于一些 :exc:`SyntaxError`,Python 使用 ``^`` 标记显示语法错误的字符位置::" + +#: ../../library/doctest.rst:497 +msgid "" +"Since the lines showing the position of the error come before the exception " +"type and detail, they are not checked by doctest. For example, the " +"following test would pass, even though it puts the ``^`` marker in the wrong" +" location::" +msgstr "" +"由于显示错误位置的行在异常类型和细节之前,它们不被doctest检查。 例如,下面的测试会通过,尽管它把 ``^`` 标记放在了错误的位置::" + +#: ../../library/doctest.rst:513 +msgid "Option Flags" +msgstr "选项标记" + +#: ../../library/doctest.rst:515 +msgid "" +"A number of option flags control various aspects of doctest's behavior. " +"Symbolic names for the flags are supplied as module constants, which can be " +":ref:`bitwise ORed ` together and passed to various functions. The " +"names can also be used in :ref:`doctest directives `, " +"and may be passed to the doctest command line interface via the ``-o`` " +"option." +msgstr "" +"一系列选项旗标控制着 doctest 的各方面行为。 旗标的符号名称以模块常量的形式提供,可以一起 :ref:`bitwise ORed " +"` 并传递给各种函数。 这些名称也可以在 :ref:`doctest directives `" +" 中使用,并且可以通过 ``-o`` 选项传递给 doctest 命令行接口。" + +#: ../../library/doctest.rst:521 +msgid "The ``-o`` command line option." +msgstr "命令行选项 ``-o`` 。" + +#: ../../library/doctest.rst:524 +msgid "" +"The first group of options define test semantics, controlling aspects of how" +" doctest decides whether actual output matches an example's expected output:" +msgstr "第一组选项定义了测试语义,控制doctest如何决定实际输出是否与用例的预期输出相匹配方面的问题。" + +#: ../../library/doctest.rst:530 +msgid "" +"By default, if an expected output block contains just ``1``, an actual " +"output block containing just ``1`` or just ``True`` is considered to be a " +"match, and similarly for ``0`` versus ``False``. When " +":const:`DONT_ACCEPT_TRUE_FOR_1` is specified, neither substitution is " +"allowed. The default behavior caters to that Python changed the return type" +" of many functions from integer to boolean; doctests expecting \"little " +"integer\" output still work in these cases. This option will probably go " +"away, but not for several years." +msgstr "" +"默认情况下,如果一个预期的输出块只包含 ``1``,那么实际的输出块只包含 ``1`` 或只包含 ``True`` 就被认为是匹配的,同样,``0`` " +"与 ``False`` 也是如此。 当 :const:`DONT_ACCEPT_TRUE_FOR_1` 被指定时,两种替换都不允许。 " +"默认行为是为了适应 Python 将许多函数的返回类型从整数改为布尔值;期望 \"小整数\" 输出的测试在这些情况下仍然有效。 " +"这个选项可能会消失,但不会在几年内消失。" + +#: ../../library/doctest.rst:542 +msgid "" +"By default, if an expected output block contains a line containing only the " +"string ````, then that line will match a blank line in the actual" +" output. Because a genuinely blank line delimits the expected output, this " +"is the only way to communicate that a blank line is expected. When " +":const:`DONT_ACCEPT_BLANKLINE` is specified, this substitution is not " +"allowed." +msgstr "" +"默认情况下,如果一个预期输出块包含一个只包含字符串 ```` 的行,那么该行将与实际输出中的一个空行相匹配。 " +"因为一个真正的空行是对预期输出的限定,这是传达预期空行的唯一方法。 当 :const:`DONT_ACCEPT_BLANKLINE` " +"被指定时,这种替换是不允许的。" + +#: ../../library/doctest.rst:551 +msgid "" +"When specified, all sequences of whitespace (blanks and newlines) are " +"treated as equal. Any sequence of whitespace within the expected output " +"will match any sequence of whitespace within the actual output. By default, " +"whitespace must match exactly. :const:`NORMALIZE_WHITESPACE` is especially " +"useful when a line of expected output is very long, and you want to wrap it " +"across multiple lines in your source." +msgstr "" +"当指定时,所有的空白序列(空白和换行)都被视为相等。预期输出中的任何空白序列将与实际输出中的任何空白序列匹配。默认情况下,空白必须完全匹配。 " +":const:`NORMALIZE_WHITESPACE` 在预期输出非常长的一行,而你想把它包在源代码的多行中时特别有用。" + +#: ../../library/doctest.rst:562 +msgid "" +"When specified, an ellipsis marker (``...``) in the expected output can " +"match any substring in the actual output. This includes substrings that " +"span line boundaries, and empty substrings, so it's best to keep usage of " +"this simple. Complicated uses can lead to the same kinds of \"oops, it " +"matched too much!\" surprises that ``.*`` is prone to in regular " +"expressions." +msgstr "" +"当指定时,预期输出中的省略号( ``...`` )可以匹配实际输出中的任何子串。这包括跨行的子串和空子串,所以最好保持简单的用法。复杂的用法会导致与 " +"``.*`` 在正则表达式中容易出现的 \"oops, it matched too much!\"相同的意外情况。" + +#: ../../library/doctest.rst:571 +msgid "" +"When specified, doctests expecting exceptions pass so long as an exception " +"of the expected type is raised, even if the details (message and fully-" +"qualified exception name) don't match." +msgstr "当被指定时,只要有预期类型的异常被引发 doctests 就会预期异常测试通过,即使细节(消息和完整限定异常名称)不匹配。" + +#: ../../library/doctest.rst:575 +msgid "" +"For example, an example expecting ``ValueError: 42`` will pass if the actual" +" exception raised is ``ValueError: 3*14``, but will fail if, say, a " +":exc:`TypeError` is raised instead. It will also ignore any fully-qualified " +"name included before the exception class, which can vary between " +"implementations and versions of Python and the code/libraries in use. Hence," +" all three of these variations will work with the flag specified:" +msgstr "" +"举例来说,一个例子预期 ``ValueError: 42`` 将通过,如果实际引发的异常是 ``ValueError: 3*14``,但是如果引发的是 " +":exc:`TypeError` 则将失败。 它也将忽略任何包括在异常类前面的完整限定名称,该名称在所使用的不同 Python " +"版本和代码/库中可能会不同。 因此,以下三种形式对于指定的旗标均有效:" + +#: ../../library/doctest.rst:597 +msgid "" +"Note that :const:`ELLIPSIS` can also be used to ignore the details of the " +"exception message, but such a test may still fail based on whether the " +"module name is present or matches exactly." +msgstr "" +"请注意 :const:`ELLIPSIS` 也可以被用来忽略异常消息中的细节,但这样的测试仍然可能根据特定模块名称是否存在或是否完全匹配而失败。" + +#: ../../library/doctest.rst:601 +msgid "" +":const:`IGNORE_EXCEPTION_DETAIL` now also ignores any information relating " +"to the module containing the exception under test." +msgstr ":const:`IGNORE_EXCEPTION_DETAIL` 现在也忽略了与包含被测异常的模块有关的任何信息。" + +#: ../../library/doctest.rst:608 +msgid "" +"When specified, do not run the example at all. This can be useful in " +"contexts where doctest examples serve as both documentation and test cases, " +"and an example should be included for documentation purposes, but should not" +" be checked. E.g., the example's output might be random; or the example " +"might depend on resources which would be unavailable to the test driver." +msgstr "" +"当指定时,完全不运行这个用例。 " +"这在doctest用例既是文档又是测试案例的情况下很有用,一个例子应该包括在文档中,但不应该被检查。例如,这个例子的输出可能是随机的;或者这个例子可能依赖于测试驱动程序所不能使用的资源。" + +#: ../../library/doctest.rst:614 +msgid "" +"The SKIP flag can also be used for temporarily \"commenting out\" examples." +msgstr "SKIP标志也可用于临时 \"注释\" 用例。" + +#: ../../library/doctest.rst:619 +msgid "A bitmask or'ing together all the comparison flags above." +msgstr "一个比特或运算将上述所有的比较标志放在一起。" + +#: ../../library/doctest.rst:621 +msgid "The second group of options controls how test failures are reported:" +msgstr "第二组选项控制测试失败的报告方式:" + +#: ../../library/doctest.rst:626 +msgid "" +"When specified, failures that involve multi-line expected and actual outputs" +" are displayed using a unified diff." +msgstr "当指定时,涉及多行预期和实际输出的故障将使用统一的差异来显示。" + +#: ../../library/doctest.rst:632 +msgid "" +"When specified, failures that involve multi-line expected and actual outputs" +" will be displayed using a context diff." +msgstr "当指定时,涉及多行预期和实际输出的故障将使用上下文差异来显示。" + +#: ../../library/doctest.rst:638 +msgid "" +"When specified, differences are computed by ``difflib.Differ``, using the " +"same algorithm as the popular :file:`ndiff.py` utility. This is the only " +"method that marks differences within lines as well as across lines. For " +"example, if a line of expected output contains digit ``1`` where actual " +"output contains letter ``l``, a line is inserted with a caret marking the " +"mismatching column positions." +msgstr "" +"当指定时,差异由 ``difflib.Differ`` " +"来计算,使用与流行的:file:`ndiff.py`工具相同的算法。这是唯一一种标记行内和行间差异的方法。 例如,如果一行预期输出包含数字 ``1`` " +",而实际输出包含字母 ``l`` ,那么就会插入一行,用圆点标记不匹配的列位置。" + +#: ../../library/doctest.rst:647 +msgid "" +"When specified, display the first failing example in each doctest, but " +"suppress output for all remaining examples. This will prevent doctest from " +"reporting correct examples that break because of earlier failures; but it " +"might also hide incorrect examples that fail independently of the first " +"failure. When :const:`REPORT_ONLY_FIRST_FAILURE` is specified, the " +"remaining examples are still run, and still count towards the total number " +"of failures reported; only the output is suppressed." +msgstr "" +"当指定时,在每个 doctest 中显示第一个失败的用例,但隐藏所有其余用例的输出。 这将防止 doctest " +"报告由于先前的失败而中断的正确用例;但也可能隐藏独立于第一个失败的不正确用例。 当 :const:`REPORT_ONLY_FIRST_FAILURE`" +" 被指定时,其余的用例仍然被运行,并且仍然计入报告的失败总数;只是输出被隐藏了。" + +#: ../../library/doctest.rst:658 +msgid "" +"When specified, exit after the first failing example and don't attempt to " +"run the remaining examples. Thus, the number of failures reported will be at" +" most 1. This flag may be useful during debugging, since examples after the" +" first failure won't even produce debugging output." +msgstr "" +"当指定时,在第一个失败的用例后退出,不尝试运行其余的用例。因此,报告的失败次数最多为1。这个标志在调试时可能很有用,因为第一个失败后的用例甚至不会产生调试输出。" + +#: ../../library/doctest.rst:663 +msgid "" +"The doctest command line accepts the option ``-f`` as a shorthand for ``-o " +"FAIL_FAST``." +msgstr "doctest 命令行接受选项 ``-f`` 作为 ``-o FAIL_FAST`` 的简洁形式。" + +#: ../../library/doctest.rst:671 +msgid "A bitmask or'ing together all the reporting flags above." +msgstr "一个比特或操作将上述所有的报告标志组合在一起。" + +#: ../../library/doctest.rst:674 +msgid "" +"There is also a way to register new option flag names, though this isn't " +"useful unless you intend to extend :mod:`doctest` internals via subclassing:" +msgstr "还有一种方法可以注册新的选项标志名称,不过这并不有用,除非你打算通过子类来扩展 :mod:`doctest` 内部。" + +#: ../../library/doctest.rst:680 +msgid "" +"Create a new option flag with a given name, and return the new flag's " +"integer value. :func:`register_optionflag` can be used when subclassing " +":class:`OutputChecker` or :class:`DocTestRunner` to create new options that " +"are supported by your subclasses. :func:`register_optionflag` should always" +" be called using the following idiom::" +msgstr "" +"用给定的名称创建一个新的选项标志,并返回新标志的整数值。 :func:`register_optionflag` 可以在继承 " +":class:`OutputChecker` 或 :class:`DocTestRunner` 时使用,以创建子类支持的新选项。 " +":func:`register_optionflag` 应始终使用以下方式调用::" + +#: ../../library/doctest.rst:696 +msgid "Directives" +msgstr "指令" + +#: ../../library/doctest.rst:698 +msgid "" +"Doctest directives may be used to modify the :ref:`option flags ` for an individual example. Doctest directives are special Python " +"comments following an example's source code:" +msgstr "" +"Doctest指令可以用来修改单个例子的 :ref:`option flags ` 。 " +"Doctest指令是在一个用例的源代码后面的特殊Python注释。" + +#: ../../library/doctest.rst:709 +msgid "" +"Whitespace is not allowed between the ``+`` or ``-`` and the directive " +"option name. The directive option name can be any of the option flag names " +"explained above." +msgstr "``+`` 或 ``-`` 与指令选项名称之间不允许有空格。 指令选项名称可以是上面解释的任何一个选项标志名称。" + +#: ../../library/doctest.rst:713 +msgid "" +"An example's doctest directives modify doctest's behavior for that single " +"example. Use ``+`` to enable the named behavior, or ``-`` to disable it." +msgstr "" +"一个用例的 doctest 指令可以修改 doctest 对该用例的行为。 使用 ``+`` 来启用指定的行为,或者使用 ``-`` 来禁用它。" + +#: ../../library/doctest.rst:716 +msgid "For example, this test passes::" +msgstr "例如,这个测试将会通过::" + +#: ../../library/doctest.rst:722 +msgid "" +"Without the directive it would fail, both because the actual output doesn't " +"have two blanks before the single-digit list elements, and because the " +"actual output is on a single line. This test also passes, and also requires" +" a directive to do so::" +msgstr "" +"如果没有这个指令,它就会失败,这是因为实际的输出在个位数的列表元素前没有两个空格,也因为实际的输出是在单行上。 " +"这个测试也通过了,而且也需要一个指令来完成::" + +#: ../../library/doctest.rst:730 +msgid "" +"Multiple directives can be used on a single physical line, separated by " +"commas::" +msgstr "在一个物理行上可以使用多个指令,用逗号分隔::" + +#: ../../library/doctest.rst:736 +msgid "" +"If multiple directive comments are used for a single example, then they are " +"combined::" +msgstr "如果在一个用例中使用了多个指令注释,那么它们将被合并::" + +#: ../../library/doctest.rst:743 +msgid "" +"As the previous example shows, you can add ``...`` lines to your example " +"containing only directives. This can be useful when an example is too long " +"for a directive to comfortably fit on the same line::" +msgstr "正如前面的例子所示,你可以在你的用例中添加只包含指令的行。 当一个用例太长,指令不能舒适地放在同一行时,这可能很有用::" + +#: ../../library/doctest.rst:751 +msgid "" +"Note that since all options are disabled by default, and directives apply " +"only to the example they appear in, enabling options (via ``+`` in a " +"directive) is usually the only meaningful choice. However, option flags can" +" also be passed to functions that run doctests, establishing different " +"defaults. In such cases, disabling an option via ``-`` in a directive can " +"be useful." +msgstr "" +"请注意,由于所有的选项都是默认禁用的,而指令只适用于它们出现的用例,所以启用选项 (通过指令中的 ``+``) 通常是唯一有意义的选择。 " +"然而,选项标志也可以被传递给运行测试的函数,建立不同的默认值。 在这种情况下,通过指令中的 ``-`` 来禁用一个选项可能是有用的。" + +#: ../../library/doctest.rst:761 +msgid "Warnings" +msgstr "警告" + +#: ../../library/doctest.rst:763 +msgid "" +":mod:`doctest` is serious about requiring exact matches in expected output." +" If even a single character doesn't match, the test fails. This will " +"probably surprise you a few times, as you learn exactly what Python does and" +" doesn't guarantee about output. For example, when printing a set, Python " +"doesn't guarantee that the element is printed in any particular order, so a " +"test like ::" +msgstr "" +":mod:`doctest` 是严格地要求在预期输出中完全匹配。 如果哪怕只有一个字符不匹配,测试就会失败。 这可能会让你吃惊几次,在你确切地了解到 " +"Python 对输出的保证和不保证之前。 例如,当打印一个集合时,Python 不保证元素以任何特定的顺序被打印出来,所以像::" + +#: ../../library/doctest.rst:772 +msgid "is vulnerable! One workaround is to do ::" +msgstr "是不可靠的!一个变通方法是用::" + +#: ../../library/doctest.rst:777 +msgid "instead. Another is to do ::" +msgstr "来取代。另一个是使用" + +#: ../../library/doctest.rst:785 +msgid "" +"Before Python 3.6, when printing a dict, Python did not guarantee that the " +"key-value pairs was printed in any particular order." +msgstr "在 Python 3.6 之前,当打印一个 dict 时,Python 并不保证键值对以任何特定的顺序被打印。" + +#: ../../library/doctest.rst:788 +msgid "There are others, but you get the idea." +msgstr "还有其他的问题,但你会明白的。" + +#: ../../library/doctest.rst:790 +msgid "" +"Another bad idea is to print things that embed an object address, like ::" +msgstr "另一个不好的做法是打印嵌入了对象地址的变量,如::" + +#: ../../library/doctest.rst:798 +msgid "" +"The :const:`ELLIPSIS` directive gives a nice approach for the last example::" +msgstr ":const:`ELLIPSIS` 指令为最后一个例子提供了一个不错的方法::" + +#: ../../library/doctest.rst:803 +msgid "" +"Floating-point numbers are also subject to small output variations across " +"platforms, because Python defers to the platform C library for float " +"formatting, and C libraries vary widely in quality here. ::" +msgstr "浮点数在不同的平台上也会有小的输出变化,因为Python在浮点数的格式化上依赖于平台的C库,而C库在这个问题上的质量差异很大。::" + +#: ../../library/doctest.rst:814 +msgid "" +"Numbers of the form ``I/2.**J`` are safe across all platforms, and I often " +"contrive doctest examples to produce numbers of that form::" +msgstr "形式 ``I/2.**J`` 的数字在所有的平台上都是安全的,我经常设计一些测试的用例来产生该形式的数::" + +#: ../../library/doctest.rst:820 +msgid "" +"Simple fractions are also easier for people to understand, and that makes " +"for better documentation." +msgstr "简单的分数也更容易让人理解,这也使得文件更加完善。" + +#: ../../library/doctest.rst:827 +msgid "Basic API" +msgstr "基本API" + +#: ../../library/doctest.rst:829 +msgid "" +"The functions :func:`testmod` and :func:`testfile` provide a simple " +"interface to doctest that should be sufficient for most basic uses. For a " +"less formal introduction to these two functions, see sections :ref:`doctest-" +"simple-testmod` and :ref:`doctest-simple-testfile`." +msgstr "" +"函数 :func:`testmod` 和 :func:`testfile` 为 doctest " +"提供了一个简单的接口,应该足以满足大多数基本用途。关于这两个函数的不太正式的介绍,请参见 :ref:`doctest-simple-testmod` 和" +" :ref:`doctest-simple-testfile` 部分。" + +#: ../../library/doctest.rst:837 +msgid "" +"All arguments except *filename* are optional, and should be specified in " +"keyword form." +msgstr "除了*filename*,所有的参数都是可选的,而且应该以关键字的形式指定。" + +#: ../../library/doctest.rst:840 +msgid "" +"Test examples in the file named *filename*. Return ``(failure_count, " +"test_count)``." +msgstr "测试名为 *filename* 的文件中的用例。 返回 ``(failure_count, test_count)``。" + +#: ../../library/doctest.rst:843 +msgid "" +"Optional argument *module_relative* specifies how the filename should be " +"interpreted:" +msgstr "可选参数 *module_relative* 指定了文件名的解释方式。" + +#: ../../library/doctest.rst:846 +msgid "" +"If *module_relative* is ``True`` (the default), then *filename* specifies an" +" OS-independent module-relative path. By default, this path is relative to " +"the calling module's directory; but if the *package* argument is specified, " +"then it is relative to that package. To ensure OS-independence, *filename* " +"should use ``/`` characters to separate path segments, and may not be an " +"absolute path (i.e., it may not begin with ``/``)." +msgstr "" +"如果 *module_relative* 是 ``True`` (默认),那么 *filename* 指定一个独立于操作系统的模块相对路径。 " +"默认情况下,这个路径是相对于调用模块的目录的;但是如果指定了 *package* 参数,那么它就是相对于该包的。 为了保证操作系统的独立性, " +"*filename* 应该使用字符来分隔路径段,并且不能是一个绝对路径 (即不能以 ``/`` 开始)。" + +#: ../../library/doctest.rst:853 +msgid "" +"If *module_relative* is ``False``, then *filename* specifies an OS-specific " +"path. The path may be absolute or relative; relative paths are resolved " +"with respect to the current working directory." +msgstr "" +"如果 *module_relative* 是 ``False``,那么 *filename* " +"指定了一个操作系统特定的路径。路径可以是绝对的,也可以是相对的;相对路径是相对于当前工作目录而言的。" + +#: ../../library/doctest.rst:857 +msgid "" +"Optional argument *name* gives the name of the test; by default, or if " +"``None``, ``os.path.basename(filename)`` is used." +msgstr "" +"可选参数 *name* 给出了测试的名称;默认情况下,或者如果是 ``None``,那么使用 " +"``os.path.basename(filename)``。" + +#: ../../library/doctest.rst:860 +msgid "" +"Optional argument *package* is a Python package or the name of a Python " +"package whose directory should be used as the base directory for a module-" +"relative filename. If no package is specified, then the calling module's " +"directory is used as the base directory for module-relative filenames. It " +"is an error to specify *package* if *module_relative* is ``False``." +msgstr "" +"可选参数 *package* 是一个 Python 包或一个 Python 包的名字,其目录应被用作模块相关文件名的基础目录。 " +"如果没有指定包,那么调用模块的目录将作为模块相关文件名的基础目录。如果 *module_relative* 是 ``False``,那么指定 " +"*package* 是错误的。" + +#: ../../library/doctest.rst:866 +msgid "" +"Optional argument *globs* gives a dict to be used as the globals when " +"executing examples. A new shallow copy of this dict is created for the " +"doctest, so its examples start with a clean slate. By default, or if " +"``None``, a new empty dict is used." +msgstr "" +"可选参数 *globs* 给出了一个在执行示例时用作全局变量的dict。 " +"这个dict的一个新的浅层副本将为doctest创建,因此它的用例将从一个干净的地方开始。默认情况下,或者如果为 " +"``None``,使用一个新的空dict。" + +#: ../../library/doctest.rst:871 +msgid "" +"Optional argument *extraglobs* gives a dict merged into the globals used to " +"execute examples. This works like :meth:`dict.update`: if *globs* and " +"*extraglobs* have a common key, the associated value in *extraglobs* appears" +" in the combined dict. By default, or if ``None``, no extra globals are " +"used. This is an advanced feature that allows parameterization of doctests." +" For example, a doctest can be written for a base class, using a generic " +"name for the class, then reused to test any number of subclasses by passing " +"an *extraglobs* dict mapping the generic name to the subclass to be tested." +msgstr "" +"可选参数 *extraglobs* 给出了一个合并到用于执行用例全局变量中的dict。 这就像 :meth:`dict.update` 一样:如果 " +"*globs* 和 *extraglobs* 有一个共同的键,那么 *extraglobs* 中的相关值会出现在合并的dict中。 默认情况下,或者为 " +"``None`` ,则不使用额外的全局变量。这是一个高级功能,允许对 doctest " +"进行参数化。例如,可以为一个基类写一个测试,使用该类的通用名称,然后通过传递一个 *extraglobs* " +"dict,将通用名称映射到要测试的子类,从而重复用于测试任何数量的子类。" + +#: ../../library/doctest.rst:880 +msgid "" +"Optional argument *verbose* prints lots of stuff if true, and prints only " +"failures if false; by default, or if ``None``, it's true if and only if " +"``'-v'`` is in ``sys.argv``." +msgstr "" +"可选的参数 *verbose* 如果为真值会打印很多东西,如果为假值则只打印失败信息;默认情况下,或者为 ``None``,只有当 ``'-v'`` 在" +" ``sys.argv`` 中时才为真值。" + +#: ../../library/doctest.rst:884 +msgid "" +"Optional argument *report* prints a summary at the end when true, else " +"prints nothing at the end. In verbose mode, the summary is detailed, else " +"the summary is very brief (in fact, empty if all tests passed)." +msgstr "" +"可选参数 *report* 为True时,在结尾处打印一个总结,否则在结尾处什么都不打印。 " +"在verbose模式下,总结是详细的,否则总结是非常简短的(事实上,如果所有的测试都通过了,总结就是空的)。" + +#: ../../library/doctest.rst:888 +msgid "" +"Optional argument *optionflags* (default value 0) takes the :ref:`bitwise OR" +" ` of option flags. See section :ref:`doctest-options`." +msgstr "" +"可选参数 *optionflags* (默认值为0)是选项标志的 :ref:`bitwise OR ` 。参见章节 " +":ref:`doctest-options` 。" + +#: ../../library/doctest.rst:892 +msgid "" +"Optional argument *raise_on_error* defaults to false. If true, an exception" +" is raised upon the first failure or unexpected exception in an example. " +"This allows failures to be post-mortem debugged. Default behavior is to " +"continue running examples." +msgstr "" +"可选参数 *raise_on_error* 默认为False。 " +"如果是True,在一个用例中第一次出现失败或意外的异常时,会触发一个异常。这允许对失败进行事后调试。默认行为是继续运行例子。" + +#: ../../library/doctest.rst:897 ../../library/doctest.rst:1037 +msgid "" +"Optional argument *parser* specifies a :class:`DocTestParser` (or subclass) " +"that should be used to extract tests from the files. It defaults to a " +"normal parser (i.e., ``DocTestParser()``)." +msgstr "" +"可选参数 *parser* 指定一个 :class:`DocTestParser` " +"(或子类),它应该被用来从文件中提取测试。它默认为一个普通的解析器(即 ``DocTestParser()``)。" + +#: ../../library/doctest.rst:901 ../../library/doctest.rst:1041 +msgid "" +"Optional argument *encoding* specifies an encoding that should be used to " +"convert the file to unicode." +msgstr "可选参数 *encoding* 指定了一个编码,应该用来将文件转换为unicode。" + +#: ../../library/doctest.rst:907 +msgid "" +"All arguments are optional, and all except for *m* should be specified in " +"keyword form." +msgstr "所有的参数都是可选的,除了 *m* 之外,都应该以关键字的形式指定。" + +#: ../../library/doctest.rst:910 +msgid "" +"Test examples in docstrings in functions and classes reachable from module " +"*m* (or module :mod:`__main__` if *m* is not supplied or is ``None``), " +"starting with ``m.__doc__``." +msgstr "" +"测试从模块 *m* (或模块 :mod:`__main__` ,如果 *m* 没有被提供或为 ``None`` )可达到的函数和类的文档串中的用例,从 " +"``m.__doc__`` 开始。" + +#: ../../library/doctest.rst:914 +msgid "" +"Also test examples reachable from dict ``m.__test__``, if it exists and is " +"not ``None``. ``m.__test__`` maps names (strings) to functions, classes and" +" strings; function and class docstrings are searched for examples; strings " +"are searched directly, as if they were docstrings." +msgstr "" +"也测试从dict ``m.__test__`` 可达到的用例,如果它存在并且不是 ``None`` 。 ``m.__test__`` " +"将名字(字符串)映射到函数、类和字符串;函数和类的文档串被搜索到的用例;字符串被直接搜索到,就像它们是文档串一样。" + +#: ../../library/doctest.rst:919 +msgid "" +"Only docstrings attached to objects belonging to module *m* are searched." +msgstr "只搜索附属于模块 *m* 中的对象的文档串。" + +#: ../../library/doctest.rst:921 +msgid "Return ``(failure_count, test_count)``." +msgstr "返回 ``(failure_count, test_count)`` 。" + +#: ../../library/doctest.rst:923 +msgid "" +"Optional argument *name* gives the name of the module; by default, or if " +"``None``, ``m.__name__`` is used." +msgstr "可选参数 *name* 给出了模块的名称;默认情况下,或者如果为 ``None`` ,则为 ``m.__name__`` 。" + +#: ../../library/doctest.rst:926 +msgid "" +"Optional argument *exclude_empty* defaults to false. If true, objects for " +"which no doctests are found are excluded from consideration. The default is " +"a backward compatibility hack, so that code still using " +":meth:`doctest.master.summarize` in conjunction with :func:`testmod` " +"continues to get output for objects with no tests. The *exclude_empty* " +"argument to the newer :class:`DocTestFinder` constructor defaults to true." +msgstr "" +"可选参数 *exclude_empty* 默认为假值。 如果为真值,没有找到任何 doctest 的对象将被排除在考虑范围之外。 " +"默认情况下是向后兼容,所以仍然使用 :meth:`doctest.master.summarize` 和 :func:`testmod` " +"的代码会继续得到没有测试的对象的输出。 较新的 :class:`DocTestFinder` 构造器的 *exclude_empty* 参数默认为真值。" + +#: ../../library/doctest.rst:933 +msgid "" +"Optional arguments *extraglobs*, *verbose*, *report*, *optionflags*, " +"*raise_on_error*, and *globs* are the same as for function :func:`testfile` " +"above, except that *globs* defaults to ``m.__dict__``." +msgstr "" +"可选参数 *extraglobs* 、 *verbose* 、 *report* 、 *optionflags* 、 *raise_on_error* " +"和 *globs* 与上述函数 :func:`testfile` 的参数相同,只是 *globs* 默认为 ``m.__dict__`` 。" + +#: ../../library/doctest.rst:940 +msgid "" +"Test examples associated with object *f*; for example, *f* may be a string, " +"a module, a function, or a class object." +msgstr "与对象 *f* 相关的测试用例;例如, *f* 可以是一个字符串、一个模块、一个函数或一个类对象。" + +#: ../../library/doctest.rst:943 +msgid "" +"A shallow copy of dictionary argument *globs* is used for the execution " +"context." +msgstr "dict 参数 *globs* 的浅层拷贝被用于执行环境。" + +#: ../../library/doctest.rst:945 +msgid "" +"Optional argument *name* is used in failure messages, and defaults to " +"``\"NoName\"``." +msgstr "可选参数 *name* 在失败信息中使用,默认为 ``\"NoName\"`` 。" + +#: ../../library/doctest.rst:948 +msgid "" +"If optional argument *verbose* is true, output is generated even if there " +"are no failures. By default, output is generated only in case of an example" +" failure." +msgstr "如果可选参数 *verbose* 为真,即使没有失败也会产生输出。 默认情况下,只有在用例失败的情况下才会产生输出。" + +#: ../../library/doctest.rst:951 +msgid "" +"Optional argument *compileflags* gives the set of flags that should be used " +"by the Python compiler when running the examples. By default, or if " +"``None``, flags are deduced corresponding to the set of future features " +"found in *globs*." +msgstr "" +"可选参数 *compileflags* 给出了Python编译器在运行例子时应该使用的标志集。默认情况下,或者如果为 ``None`` ,标志是根据 " +"*globs* 中发现的未来特征集推导出来的。" + +#: ../../library/doctest.rst:955 +msgid "" +"Optional argument *optionflags* works as for function :func:`testfile` " +"above." +msgstr "可选参数 *optionflags* 的作用与上述 :func:`testfile` 函数中的相同。" + +#: ../../library/doctest.rst:961 +msgid "Unittest API" +msgstr "Unittest API" + +#: ../../library/doctest.rst:963 +msgid "" +"As your collection of doctest'ed modules grows, you'll want a way to run all" +" their doctests systematically. :mod:`doctest` provides two functions that " +"can be used to create :mod:`unittest` test suites from modules and text " +"files containing doctests. To integrate with :mod:`unittest` test " +"discovery, include a :func:`load_tests` function in your test module::" +msgstr "" +":mod:`doctest` 提供了两个函数,可以用来从模块和包含测试的文本文件中创建 :mod:`unittest` 测试套件。 要与 " +":mod:`unittest` 测试发现集成,请在你的测试模块中包含一个 :func:`load_tests` 函数::" + +#: ../../library/doctest.rst:977 +msgid "" +"There are two main functions for creating :class:`unittest.TestSuite` " +"instances from text files and modules with doctests:" +msgstr "有两个主要函数用于从文本文件和带doctest的模块中创建 :class:`unittest.TestSuite` 实例。" + +#: ../../library/doctest.rst:983 +msgid "" +"Convert doctest tests from one or more text files to a " +":class:`unittest.TestSuite`." +msgstr "将一个或多个文本文件中的doctest测试转换为一个 :class:`unittest.TestSuite` 。" + +#: ../../library/doctest.rst:986 +msgid "" +"The returned :class:`unittest.TestSuite` is to be run by the unittest " +"framework and runs the interactive examples in each file. If an example in " +"any file fails, then the synthesized unit test fails, and a " +":exc:`failureException` exception is raised showing the name of the file " +"containing the test and a (sometimes approximate) line number." +msgstr "" +"返回的 :class:`unittest.TestSuite` 将由 unittest " +"框架运行,并运行每个文件中的交互式示例。如果任何文件中的用例失败了,那么合成的单元测试就会失败,并触发一个 " +":exc:`failureException` 异常,显示包含该测试的文件名和一个(有时是近似的)行号。" + +#: ../../library/doctest.rst:992 +msgid "Pass one or more paths (as strings) to text files to be examined." +msgstr "传递一个或多个要检查的文本文件的路径(作为字符串)。" + +#: ../../library/doctest.rst:994 +msgid "Options may be provided as keyword arguments:" +msgstr "选项可以作为关键字参数提供:" + +#: ../../library/doctest.rst:996 +msgid "" +"Optional argument *module_relative* specifies how the filenames in *paths* " +"should be interpreted:" +msgstr "可选参数 *module_relative* 指定了 *paths* 中的文件名应该如何解释。" + +#: ../../library/doctest.rst:999 +msgid "" +"If *module_relative* is ``True`` (the default), then each filename in " +"*paths* specifies an OS-independent module-relative path. By default, this " +"path is relative to the calling module's directory; but if the *package* " +"argument is specified, then it is relative to that package. To ensure OS-" +"independence, each filename should use ``/`` characters to separate path " +"segments, and may not be an absolute path (i.e., it may not begin with " +"``/``)." +msgstr "" +"如果 *module_relative* 是 ``True`` (默认值),那么 *paths* " +"中的每个文件名都指定了一个独立于操作系统的模块相对路径。 默认情况下,这个路径是相对于调用模块的目录的;但是如果指定了 *package* " +"参数,那么它就是相对于该包的。 为了保证操作系统的独立性,每个文件名都应该使用字符来分隔路径段,并且不能是绝对路径(即不能以 ``/`` 开始)。" + +#: ../../library/doctest.rst:1007 +msgid "" +"If *module_relative* is ``False``, then each filename in *paths* specifies " +"an OS-specific path. The path may be absolute or relative; relative paths " +"are resolved with respect to the current working directory." +msgstr "" +"如果 *module_relative* 是 ``False`` ,那么 *paths* 中的每个文件名都指定了一个操作系统特定的路径。 " +"路径可以是绝对的,也可以是相对的;相对路径是关于当前工作目录的解析。" + +#: ../../library/doctest.rst:1011 +msgid "" +"Optional argument *package* is a Python package or the name of a Python " +"package whose directory should be used as the base directory for module-" +"relative filenames in *paths*. If no package is specified, then the calling" +" module's directory is used as the base directory for module-relative " +"filenames. It is an error to specify *package* if *module_relative* is " +"``False``." +msgstr "" +"可选参数 *package* 是一个Python包或一个Python包的名字,其目录应该被用作 *paths* 中模块相关文件名的基本目录。 " +"如果没有指定包,那么调用模块的目录将作为模块相关文件名的基础目录。 如果 *module_relative* 是 ``False`` ,那么指定 " +"*package* 是错误的。" + +#: ../../library/doctest.rst:1018 +msgid "" +"Optional argument *setUp* specifies a set-up function for the test suite. " +"This is called before running the tests in each file. The *setUp* function " +"will be passed a :class:`DocTest` object. The setUp function can access the" +" test globals as the *globs* attribute of the test passed." +msgstr "" +"可选的参数 *setUp* 为测试套件指定了一个设置函数。在运行每个文件中的测试之前,它被调用。 *setUp* 函数将被传递给一个 " +":class:`DocTest` 对象。 setUp函数可以通过测试的 *globs* 属性访问测试的全局变量。" + +#: ../../library/doctest.rst:1023 +msgid "" +"Optional argument *tearDown* specifies a tear-down function for the test " +"suite. This is called after running the tests in each file. The *tearDown*" +" function will be passed a :class:`DocTest` object. The setUp function can " +"access the test globals as the *globs* attribute of the test passed." +msgstr "" +"可选的参数 *tearDown* 指定了测试套件的卸载函数。 在运行每个文件中的测试后,它会被调用。 *tearDown* 函数将被传递一个 " +":class:`DocTest` 对象。 setUp函数可以通过测试的 *globs* 属性访问测试的全局变量。" + +#: ../../library/doctest.rst:1028 ../../library/doctest.rst:1062 +msgid "" +"Optional argument *globs* is a dictionary containing the initial global " +"variables for the tests. A new copy of this dictionary is created for each " +"test. By default, *globs* is a new empty dictionary." +msgstr "" +"可选参数 *globs* 是一个包含测试的初始全局变量的字典。 这个字典的一个新副本为每个测试创建。 默认情况下, *globs* 是一个新的空字典。" + +#: ../../library/doctest.rst:1032 +msgid "" +"Optional argument *optionflags* specifies the default doctest options for " +"the tests, created by or-ing together individual option flags. See section " +":ref:`doctest-options`. See function :func:`set_unittest_reportflags` below " +"for a better way to set reporting options." +msgstr "" +"可选参数 *optionflags* 为测试指定默认的doctest选项,通过将各个选项的标志连接在一起创建。 参见章节 :ref:`doctest-" +"options` 。参见下面的函数 :func:`set_unittest_reportflags` ,以了解设置报告选项的更好方法。" + +#: ../../library/doctest.rst:1044 +msgid "" +"The global ``__file__`` is added to the globals provided to doctests loaded " +"from a text file using :func:`DocFileSuite`." +msgstr "该全局 ``__file__`` 被添加到提供给用 :func:`DocFileSuite` 从文本文件加载的doctest的全局变量中。" + +#: ../../library/doctest.rst:1050 +msgid "Convert doctest tests for a module to a :class:`unittest.TestSuite`." +msgstr "将一个模块的doctest测试转换为 :class:`unittest.TestSuite` 。" + +#: ../../library/doctest.rst:1052 +msgid "" +"The returned :class:`unittest.TestSuite` is to be run by the unittest " +"framework and runs each doctest in the module. If any of the doctests fail," +" then the synthesized unit test fails, and a :exc:`failureException` " +"exception is raised showing the name of the file containing the test and a " +"(sometimes approximate) line number." +msgstr "" +"返回的 :class:`unittest.TestSuite` 将由 unittest 框架运行,并运行模块中的每个 doctest。 " +"如果任何一个测试失败,那么合成的单元测试就会失败,并触发一个 :exc:`failureException` " +"异常,显示包含该测试的文件名和一个(有时是近似的)行号。" + +#: ../../library/doctest.rst:1058 +msgid "" +"Optional argument *module* provides the module to be tested. It can be a " +"module object or a (possibly dotted) module name. If not specified, the " +"module calling this function is used." +msgstr "" +"可选参数 *module* 提供了要测试的模块。 它可以是一个模块对象或一个(可能是带点的)模块名称。 如果没有指定,则使用调用此函数的模块。" + +#: ../../library/doctest.rst:1066 +msgid "" +"Optional argument *extraglobs* specifies an extra set of global variables, " +"which is merged into *globs*. By default, no extra globals are used." +msgstr "可选参数 *extraglobs* 指定了一组额外的全局变量,这些变量被合并到 *globs* 中。 默认情况下,不使用额外的全局变量。" + +#: ../../library/doctest.rst:1069 +msgid "" +"Optional argument *test_finder* is the :class:`DocTestFinder` object (or a " +"drop-in replacement) that is used to extract doctests from the module." +msgstr "可选参数 *test_finder* 是 :class:`DocTestFinder` 对象(或一个可替换的对象),用于从模块中提取测试。" + +#: ../../library/doctest.rst:1072 +msgid "" +"Optional arguments *setUp*, *tearDown*, and *optionflags* are the same as " +"for function :func:`DocFileSuite` above." +msgstr "" +"可选参数 *setUp* 、 *tearDown* 和 *optionflags* 与上述函数 :func:`DocFileSuite` 相同。" + +#: ../../library/doctest.rst:1075 +msgid "This function uses the same search technique as :func:`testmod`." +msgstr "这个函数使用与 :func:`testmod` 相同的搜索技术。" + +#: ../../library/doctest.rst:1077 +msgid "" +":func:`DocTestSuite` returns an empty :class:`unittest.TestSuite` if " +"*module* contains no docstrings instead of raising :exc:`ValueError`." +msgstr "" +"如果 *module* 不包含任何文件串,则 :func:`DocTestSuite` 返回一个空的 " +":class:`unittest.TestSuite`,而不是触发 :exc:`ValueError`。" + +#: ../../library/doctest.rst:1082 +msgid "" +"Under the covers, :func:`DocTestSuite` creates a :class:`unittest.TestSuite`" +" out of :class:`doctest.DocTestCase` instances, and :class:`DocTestCase` is " +"a subclass of :class:`unittest.TestCase`. :class:`DocTestCase` isn't " +"documented here (it's an internal detail), but studying its code can answer " +"questions about the exact details of :mod:`unittest` integration." +msgstr "" +":func:`DocTestSuite` 从 :class:`doctest.DocTestCase` 实例中创建一个 " +":class:`unittest.TestSuite` ,而 :class:`DocTestCase` 是 " +":class:`unittest.TestCase` 的子类。 :class:`DocTestCase` " +"在这里没有记录(这是一个内部细节),但研究其代码可以回答关于 :mod:`unittest` 集成的实际细节问题。" + +#: ../../library/doctest.rst:1088 +msgid "" +"Similarly, :func:`DocFileSuite` creates a :class:`unittest.TestSuite` out of" +" :class:`doctest.DocFileCase` instances, and :class:`DocFileCase` is a " +"subclass of :class:`DocTestCase`." +msgstr "" +"同样, :func:`DocFileSuite` 从 :class:`doctest.DocFileCase` 实例中创建一个 " +":class:`unittest.TestSuite` ,并且 :class:`DocFileCase` 是 :class:`DocTestCase` " +"的一个子类。" + +#: ../../library/doctest.rst:1092 +msgid "" +"So both ways of creating a :class:`unittest.TestSuite` run instances of " +":class:`DocTestCase`. This is important for a subtle reason: when you run " +":mod:`doctest` functions yourself, you can control the :mod:`doctest` " +"options in use directly, by passing option flags to :mod:`doctest` " +"functions. However, if you're writing a :mod:`unittest` framework, " +":mod:`unittest` ultimately controls when and how tests get run. The " +"framework author typically wants to control :mod:`doctest` reporting options" +" (perhaps, e.g., specified by command line options), but there's no way to " +"pass options through :mod:`unittest` to :mod:`doctest` test runners." +msgstr "" +"所以这两种创建 :class:`unittest.TestSuite` 的方式都是运行 :class:`DocTestCase` " +"的实例。这一点很重要,因为有一个微妙的原因:当你自己运行 :mod:`doctest` 函数时,你可以直接控制使用中的 :mod:`doctest` " +"选项,通过传递选项标志给 :mod:`doctest` 函数。 然而,如果你正在编写一个 :mod:`unittest` 框架, " +":mod:`unittest` 最终会控制测试的运行时间和方式。 框架作者通常希望控制 :mod:`doctest` " +"的报告选项(也许,例如,由命令行选项指定),但没有办法通过 :mod:`unittest` 向 :mod:`doctest` 测试运行者传递选项。" + +#: ../../library/doctest.rst:1102 +msgid "" +"For this reason, :mod:`doctest` also supports a notion of :mod:`doctest` " +"reporting flags specific to :mod:`unittest` support, via this function:" +msgstr "" +"出于这个原因, :mod:`doctest` 也支持一个概念,即 :mod:`doctest` 报告特定于 :mod:`unittest` " +"支持的标志,通过这个函数:" + +#: ../../library/doctest.rst:1108 +msgid "Set the :mod:`doctest` reporting flags to use." +msgstr "设置要使用的 :mod:`doctest` 报告标志。" + +#: ../../library/doctest.rst:1110 +msgid "" +"Argument *flags* takes the :ref:`bitwise OR ` of option flags. See" +" section :ref:`doctest-options`. Only \"reporting flags\" can be used." +msgstr "" +"参数 *flags* 是选项标志的 :ref:`bitwise OR ` 。 参见章节 :ref:`doctest-options` " +"。 只有 \"报告标志\" 可以被使用。" + +#: ../../library/doctest.rst:1113 +msgid "" +"This is a module-global setting, and affects all future doctests run by " +"module :mod:`unittest`: the :meth:`runTest` method of :class:`DocTestCase` " +"looks at the option flags specified for the test case when the " +":class:`DocTestCase` instance was constructed. If no reporting flags were " +"specified (which is the typical and expected case), :mod:`doctest`'s " +":mod:`unittest` reporting flags are :ref:`bitwise ORed ` into the " +"option flags, and the option flags so augmented are passed to the " +":class:`DocTestRunner` instance created to run the doctest. If any " +"reporting flags were specified when the :class:`DocTestCase` instance was " +"constructed, :mod:`doctest`'s :mod:`unittest` reporting flags are ignored." +msgstr "" +"这是一个模块的全局设置,并影响所有未来由模块 :mod:`unittest` 运行的测试: :class:`DocTestCase` 的 " +":meth:`runTest` 方法会查看 :class:`DocTestCase` 实例构建时为测试用例指定的选项标志。 " +"如果没有指定报告标志(这是典型的和预期的情况), :mod:`doctest` 的 :mod:`unittest` 报告标志被 " +":ref:`bitwise ORed ` 到选项标志中,这样增加的选项标志被传递给 :class:`DocTestRunner` " +"实例来运行doctest。 如果在构建 :class:`DocTestCase` 实例时指定了任何报告标志,那么 :mod:`doctest` 的 " +":mod:`unittest` 报告标志会被忽略。" + +#: ../../library/doctest.rst:1124 +msgid "" +"The value of the :mod:`unittest` reporting flags in effect before the " +"function was called is returned by the function." +msgstr ":mod:`unittest` 报告标志的值在调用该函数之前是有效的,由该函数返回。" + +#: ../../library/doctest.rst:1131 +msgid "Advanced API" +msgstr "高级 API" + +#: ../../library/doctest.rst:1133 +msgid "" +"The basic API is a simple wrapper that's intended to make doctest easy to " +"use. It is fairly flexible, and should meet most users' needs; however, if " +"you require more fine-grained control over testing, or wish to extend " +"doctest's capabilities, then you should use the advanced API." +msgstr "" +"基本 API 是一个简单的封装,旨在使 doctest " +"易于使用。它相当灵活,应该能满足大多数用户的需求;但是,如果你需要对测试进行更精细的控制,或者希望扩展 doctest 的功能,那么你应该使用高级 " +"API 。" + +#: ../../library/doctest.rst:1138 +msgid "" +"The advanced API revolves around two container classes, which are used to " +"store the interactive examples extracted from doctest cases:" +msgstr "高级API围绕着两个容器类,用于存储从 doctest 案例中提取的交互式用例:" + +#: ../../library/doctest.rst:1141 +msgid "" +":class:`Example`: A single Python :term:`statement`, paired with its " +"expected output." +msgstr ":class:`Example`: 一个单一的 Python :term:`statement` ,与它的预期输出配对。" + +#: ../../library/doctest.rst:1144 +msgid "" +":class:`DocTest`: A collection of :class:`Example`\\ s, typically extracted " +"from a single docstring or text file." +msgstr ":class:`DocTest`: 一组 :class:`Example`\\ s 的集合,通常从一个文档字符串或文本文件中提取。" + +#: ../../library/doctest.rst:1147 +msgid "" +"Additional processing classes are defined to find, parse, and run, and check" +" doctest examples:" +msgstr "定义了额外的处理类来寻找、解析和运行,并检查 doctest 的用例。" + +#: ../../library/doctest.rst:1150 +msgid "" +":class:`DocTestFinder`: Finds all docstrings in a given module, and uses a " +":class:`DocTestParser` to create a :class:`DocTest` from every docstring " +"that contains interactive examples." +msgstr "" +":class:`DocTestFinder` : 查找给定模块中的所有文档串,并使用 :class:`DocTestParser` " +"从每个包含交互式用例的文档串中创建一个 :class:`DocTest` 。" + +#: ../../library/doctest.rst:1154 +msgid "" +":class:`DocTestParser`: Creates a :class:`DocTest` object from a string " +"(such as an object's docstring)." +msgstr ":class:`DocTestParser` : 从一个字符串(如一个对象的文档串)创建一个 :class:`DocTest` 对象。" + +#: ../../library/doctest.rst:1157 +msgid "" +":class:`DocTestRunner`: Executes the examples in a :class:`DocTest`, and " +"uses an :class:`OutputChecker` to verify their output." +msgstr "" +":class:`DocTestRunner` : 执行 :class:`DocTest` 中的用例,并使用 :class:`OutputChecker`" +" 来验证其输出。" + +#: ../../library/doctest.rst:1160 +msgid "" +":class:`OutputChecker`: Compares the actual output from a doctest example " +"with the expected output, and decides whether they match." +msgstr ":class:`OutputChecker` : 将一个测试用例的实际输出与预期输出进行比较,并决定它们是否匹配。" + +#: ../../library/doctest.rst:1163 +msgid "" +"The relationships among these processing classes are summarized in the " +"following diagram::" +msgstr "这些处理类之间的关系总结在下图中::" + +#: ../../library/doctest.rst:1179 +msgid "DocTest Objects" +msgstr "DocTest 对象" + +#: ../../library/doctest.rst:1184 +msgid "" +"A collection of doctest examples that should be run in a single namespace. " +"The constructor arguments are used to initialize the attributes of the same " +"names." +msgstr "应该在单一命名空间中运行的doctest用例的集合。构造函数参数被用来初始化相同名称的属性。" + +#: ../../library/doctest.rst:1188 +msgid "" +":class:`DocTest` defines the following attributes. They are initialized by " +"the constructor, and should not be modified directly." +msgstr ":class:`DocTest` 定义了以下属性。 它们由构造函数初始化,不应该被直接修改。" + +#: ../../library/doctest.rst:1194 +msgid "" +"A list of :class:`Example` objects encoding the individual interactive " +"Python examples that should be run by this test." +msgstr "一个 :class:`Example` 对象的列表,它编码了应该由该测试运行的单个交互式 Python 用例。" + +#: ../../library/doctest.rst:1200 +msgid "" +"The namespace (aka globals) that the examples should be run in. This is a " +"dictionary mapping names to values. Any changes to the namespace made by " +"the examples (such as binding new variables) will be reflected in " +":attr:`globs` after the test is run." +msgstr "" +"例子应该运行的命名空间(又称 globals )。这是一个将名字映射到数值的字典。例子对名字空间的任何改变(比如绑定新的变量)将在测试运行后反映在 " +":attr:`globs` 中。" + +#: ../../library/doctest.rst:1208 +msgid "" +"A string name identifying the :class:`DocTest`. Typically, this is the name" +" of the object or file that the test was extracted from." +msgstr "识别 :class:`DocTest` 的字符串名称。 通常情况下,这是从测试中提取的对象或文件的名称。" + +#: ../../library/doctest.rst:1214 +msgid "" +"The name of the file that this :class:`DocTest` was extracted from; or " +"``None`` if the filename is unknown, or if the :class:`DocTest` was not " +"extracted from a file." +msgstr "" +"这个 :class:`DocTest` 被提取的文件名;或者为 ``None``,如果文件名未知,或者 :class:`DocTest` " +"没有从文件中提取。" + +#: ../../library/doctest.rst:1221 +msgid "" +"The line number within :attr:`filename` where this :class:`DocTest` begins, " +"or ``None`` if the line number is unavailable. This line number is zero-" +"based with respect to the beginning of the file." +msgstr "" +":attr:`filename` 中的行号,这个 :class:`DocTest` 开始的地方,或者行号不可用时为 ``None``。 " +"这个行号相对于文件的开头来说是零的。" + +#: ../../library/doctest.rst:1228 +msgid "" +"The string that the test was extracted from, or ``None`` if the string is " +"unavailable, or if the test was not extracted from a string." +msgstr "从测试中提取的字符串,或者如果字符串不可用,或者为 ``None`` ,如果测试没有从字符串中提取。" + +#: ../../library/doctest.rst:1235 +msgid "Example Objects" +msgstr "Example 对象" + +#: ../../library/doctest.rst:1240 +msgid "" +"A single interactive example, consisting of a Python statement and its " +"expected output. The constructor arguments are used to initialize the " +"attributes of the same names." +msgstr "单个交互式用例,由一个 Python 语句及其预期输出组成。 构造函数参数被用来初始化相同名称的属性。" + +#: ../../library/doctest.rst:1245 +msgid "" +":class:`Example` defines the following attributes. They are initialized by " +"the constructor, and should not be modified directly." +msgstr ":class:`Example` 定义了以下属性。 它们由构造函数初始化,不应该被直接修改。" + +#: ../../library/doctest.rst:1251 +msgid "" +"A string containing the example's source code. This source code consists of" +" a single Python statement, and always ends with a newline; the constructor " +"adds a newline when necessary." +msgstr "一个包含该用例源码的字符串。 源码由一个 Python 语句组成,并且总是以换行结束;构造函数在必要时添加一个换行。" + +#: ../../library/doctest.rst:1258 +msgid "" +"The expected output from running the example's source code (either from " +"stdout, or a traceback in case of exception). :attr:`want` ends with a " +"newline unless no output is expected, in which case it's an empty string. " +"The constructor adds a newline when necessary." +msgstr "" +"运行这个用例的源码的预期输出(可以是 stdout ,也可以是异常情况下的回溯)。 :attr:`want` " +"以一个换行符结束,除非没有预期的输出,在这种情况下它是一个空字符串。 构造函数在必要时添加一个换行。" + +#: ../../library/doctest.rst:1266 +msgid "" +"The exception message generated by the example, if the example is expected " +"to generate an exception; or ``None`` if it is not expected to generate an " +"exception. This exception message is compared against the return value of " +":func:`traceback.format_exception_only`. :attr:`exc_msg` ends with a " +"newline unless it's ``None``. The constructor adds a newline if needed." +msgstr "" +"用例产生的异常信息,如果这个例子被期望产生一个异常;或者为 ``None`` ,如果它不被期望产生一个异常。 这个异常信息与 " +":func:`traceback.format_exception_only` 的返回值进行比较。 :attr:`exc_msg` 以换行结束,除非是 " +"``None`` 。" + +#: ../../library/doctest.rst:1275 +msgid "" +"The line number within the string containing this example where the example " +"begins. This line number is zero-based with respect to the beginning of the" +" containing string." +msgstr "包含本例的字符串中的行号,即本例的开始。 这个行号相对于包含字符串的开头来说是以零开始的。" + +#: ../../library/doctest.rst:1282 +msgid "" +"The example's indentation in the containing string, i.e., the number of " +"space characters that precede the example's first prompt." +msgstr "用例在包含字符串中的缩进,即在用例的第一个提示前有多少个空格字符。" + +#: ../../library/doctest.rst:1288 +msgid "" +"A dictionary mapping from option flags to ``True`` or ``False``, which is " +"used to override default options for this example. Any option flags not " +"contained in this dictionary are left at their default value (as specified " +"by the :class:`DocTestRunner`'s :attr:`optionflags`). By default, no options" +" are set." +msgstr "" +"一个从选项标志到 ``True`` 或 ``False`` 的字典映射,用于覆盖这个例子的默认选项。 " +"任何不包含在这个字典中的选项标志都被保留为默认值(由 :class:`DocTestRunner` 的 :attr:`optionflags` " +"指定)。默认情况下,没有选项被设置。" + +#: ../../library/doctest.rst:1297 +msgid "DocTestFinder objects" +msgstr "DocTestFinder 对象" + +#: ../../library/doctest.rst:1302 +msgid "" +"A processing class used to extract the :class:`DocTest`\\ s that are " +"relevant to a given object, from its docstring and the docstrings of its " +"contained objects. :class:`DocTest`\\ s can be extracted from modules, " +"classes, functions, methods, staticmethods, classmethods, and properties." +msgstr "" +"一个处理类,用于从一个给定的对象的 docstring 和其包含的对象的 docstring 中提取与之相关的 :class:`DocTest` 。 " +":class:`DocTest` 可以从模块、类、函数、方法、静态方法、类方法和属性中提取。" + +#: ../../library/doctest.rst:1307 +msgid "" +"The optional argument *verbose* can be used to display the objects searched " +"by the finder. It defaults to ``False`` (no output)." +msgstr "可选的参数 *verbose* 可以用来显示查找器搜索到的对象。 它的默认值是 ``False`` (无输出)。" + +#: ../../library/doctest.rst:1310 +msgid "" +"The optional argument *parser* specifies the :class:`DocTestParser` object " +"(or a drop-in replacement) that is used to extract doctests from docstrings." +msgstr "" +"可选的参数 *parser* 指定了 :class:`DocTestParser` 对象(或一个可替换的对象),用于从文档串中提取 doctest 。" + +#: ../../library/doctest.rst:1313 +msgid "" +"If the optional argument *recurse* is false, then :meth:`DocTestFinder.find`" +" will only examine the given object, and not any contained objects." +msgstr "" +"如果可选的参数 *recurse* 是 False ,那么 :meth:`DocTestFinder.find` " +"将只检查给定的对象,而不是任何包含的对象。" + +#: ../../library/doctest.rst:1316 +msgid "" +"If the optional argument *exclude_empty* is false, then " +":meth:`DocTestFinder.find` will include tests for objects with empty " +"docstrings." +msgstr "" +"如果可选参数 *exclude_empty* 为 False ,那么 :meth:`DocTestFinder.find` " +"将包括对文档字符串为空的对象的测试。" + +#: ../../library/doctest.rst:1320 +msgid ":class:`DocTestFinder` defines the following method:" +msgstr ":class:`DocTestFinder` 定义了以下方法:" + +#: ../../library/doctest.rst:1325 +msgid "" +"Return a list of the :class:`DocTest`\\ s that are defined by *obj*'s " +"docstring, or by any of its contained objects' docstrings." +msgstr "返回 :class:`DocTest` 的列表,该列表由 *obj* 的文档串或其包含的任何对象的文档串定义。" + +#: ../../library/doctest.rst:1328 +msgid "" +"The optional argument *name* specifies the object's name; this name will be " +"used to construct names for the returned :class:`DocTest`\\ s. If *name* is" +" not specified, then ``obj.__name__`` is used." +msgstr "" +"可选参数 *name* 指定了对象的名称;这个名称将被用来为返回的 :class:`DocTest` 构建名称。 如果没有指定 *name* ,则使用 " +"``obj.__name__`` 。" + +#: ../../library/doctest.rst:1332 +msgid "" +"The optional parameter *module* is the module that contains the given " +"object. If the module is not specified or is ``None``, then the test finder " +"will attempt to automatically determine the correct module. The object's " +"module is used:" +msgstr "" +"可选参数 *module* 是包含给定对象的模块。如果没有指定模块或者是 ``None`` ,那么测试查找器将试图自动确定正确的模块。 " +"该对象被使用的模块:" + +#: ../../library/doctest.rst:1336 +msgid "As a default namespace, if *globs* is not specified." +msgstr "作为一个默认的命名空间,如果没有指定 *globs* 。" + +#: ../../library/doctest.rst:1338 +msgid "" +"To prevent the DocTestFinder from extracting DocTests from objects that are " +"imported from other modules. (Contained objects with modules other than " +"*module* are ignored.)" +msgstr "" +"为了防止 DocTestFinder 从其他模块导入的对象中提取 DocTest 。 (包含有除 *module* 以外的模块的对象会被忽略)。" + +#: ../../library/doctest.rst:1342 +msgid "To find the name of the file containing the object." +msgstr "找到包含该对象的文件名。" + +#: ../../library/doctest.rst:1344 +msgid "To help find the line number of the object within its file." +msgstr "找到该对象在其文件中的行号。" + +#: ../../library/doctest.rst:1346 +msgid "" +"If *module* is ``False``, no attempt to find the module will be made. This " +"is obscure, of use mostly in testing doctest itself: if *module* is " +"``False``, or is ``None`` but cannot be found automatically, then all " +"objects are considered to belong to the (non-existent) module, so all " +"contained objects will (recursively) be searched for doctests." +msgstr "" +"如果 *module* 是 ``False`` ,将不会试图找到这个模块。 这是不明确的,主要用于测试 doctest 本身:如果 *module* 是" +" ``False`` ,或者是 ``None`` 但不能自动找到,那么所有对象都被认为属于(不存在的)模块,所以所有包含的对象将(递归地)被搜索到 " +"doctest 。" + +#: ../../library/doctest.rst:1352 +msgid "" +"The globals for each :class:`DocTest` is formed by combining *globs* and " +"*extraglobs* (bindings in *extraglobs* override bindings in *globs*). A new" +" shallow copy of the globals dictionary is created for each " +":class:`DocTest`. If *globs* is not specified, then it defaults to the " +"module's *__dict__*, if specified, or ``{}`` otherwise. If *extraglobs* is " +"not specified, then it defaults to ``{}``." +msgstr "" +"每个 :class:`DocTest` 的 globals 是由 *globs* 和 *extraglobs* 组合而成的( *extraglobs* " +"的绑定覆盖 *globs* 的绑定)。 为每个 :class:`DocTest` 创建一个新的 globals 字典的浅层拷贝。如果没有指定 " +"*globs* ,那么它默认为模块的 *__dict__* ,如果指定了或者为 ``{}`` ,则除外。 如果没有指定 *extraglobs* " +",那么它默认为 ``{}`` 。" + +#: ../../library/doctest.rst:1363 +msgid "DocTestParser objects" +msgstr "DocTestParser 对象" + +#: ../../library/doctest.rst:1368 +msgid "" +"A processing class used to extract interactive examples from a string, and " +"use them to create a :class:`DocTest` object." +msgstr "一个处理类,用于从一个字符串中提取交互式的用例,并使用它们来创建一个 :class:`DocTest` 对象。" + +#: ../../library/doctest.rst:1372 ../../library/doctest.rst:1440 +msgid ":class:`DocTestParser` defines the following methods:" +msgstr ":class:`DocTestParser` 定义了以下方法:" + +#: ../../library/doctest.rst:1377 +msgid "" +"Extract all doctest examples from the given string, and collect them into a " +":class:`DocTest` object." +msgstr "从给定的字符串中提取所有的测试用例,并将它们收集到一个 :class:`DocTest` 对象中。" + +#: ../../library/doctest.rst:1380 +msgid "" +"*globs*, *name*, *filename*, and *lineno* are attributes for the new " +":class:`DocTest` object. See the documentation for :class:`DocTest` for " +"more information." +msgstr "" +"*globs* 、 *name* 、 *filename* 和 *lineno* 是新的 :class:`DocTest` 对象的属性。 更多信息请参见" +" :class:`DocTest` 的文档。" + +#: ../../library/doctest.rst:1387 +msgid "" +"Extract all doctest examples from the given string, and return them as a " +"list of :class:`Example` objects. Line numbers are 0-based. The optional " +"argument *name* is a name identifying this string, and is only used for " +"error messages." +msgstr "" +"从给定的字符串中提取所有的测试用例,并以 :class:`Example` 对象列表的形式返回。 行数以 0 为基数。 可选参数 *name* " +"用于识别这个字符串的名称,只用于错误信息。" + +#: ../../library/doctest.rst:1394 +msgid "" +"Divide the given string into examples and intervening text, and return them " +"as a list of alternating :class:`Example`\\ s and strings. Line numbers for " +"the :class:`Example`\\ s are 0-based. The optional argument *name* is a " +"name identifying this string, and is only used for error messages." +msgstr "" +"将给定的字符串分成用例和中间的文本,并以 :class:`Example` 和字符串交替的列表形式返回。 :class:`Example` 的行号以 0" +" 为基数。 可选参数 *name* 用于识别这个字符串的名称,只用于错误信息。" + +#: ../../library/doctest.rst:1403 +msgid "DocTestRunner objects" +msgstr "DocTestRunner 对象" + +#: ../../library/doctest.rst:1408 +msgid "" +"A processing class used to execute and verify the interactive examples in a " +":class:`DocTest`." +msgstr "一个处理类,用于执行和验证 :class:`DocTest` 中的交互式用例。" + +#: ../../library/doctest.rst:1411 +msgid "" +"The comparison between expected outputs and actual outputs is done by an " +":class:`OutputChecker`. This comparison may be customized with a number of " +"option flags; see section :ref:`doctest-options` for more information. If " +"the option flags are insufficient, then the comparison may also be " +"customized by passing a subclass of :class:`OutputChecker` to the " +"constructor." +msgstr "" +"预期输出和实际输出之间的比较是由一个 :class:`OutputChecker` 完成的。 这种比较可以用一些选项标志来定制;更多信息请看 " +":ref:`doctest-options` 部分。 如果选项标志不够,那么也可以通过向构造函数传递 :class:`OutputChecker` " +"的子类来定制比较。" + +#: ../../library/doctest.rst:1417 +msgid "" +"The test runner's display output can be controlled in two ways. First, an " +"output function can be passed to :meth:`TestRunner.run`; this function will " +"be called with strings that should be displayed. It defaults to " +"``sys.stdout.write``. If capturing the output is not sufficient, then the " +"display output can be also customized by subclassing DocTestRunner, and " +"overriding the methods :meth:`report_start`, :meth:`report_success`, " +":meth:`report_unexpected_exception`, and :meth:`report_failure`." +msgstr "" +"测试运行器的显示输出可以通过两种方式控制。首先,一个输出函数可以被传递给 :meth:`TestRunner.run` " +";这个函数将被调用,并显示出应该显示的字符串。 它的默认值是 ``sys.stdout.write`` 。 如果捕获输出是不够的,那么也可以通过子类化 " +"DocTestRunner 来定制显示输出,并重写 :meth:`report_start` , :meth:`report_success` , " +":meth:`report_unexpected_exception` 和 :meth:`report_failure` 方法。" + +#: ../../library/doctest.rst:1425 +msgid "" +"The optional keyword argument *checker* specifies the :class:`OutputChecker`" +" object (or drop-in replacement) that should be used to compare the expected" +" outputs to the actual outputs of doctest examples." +msgstr "" +"可选的关键字参数 *checker* 指定了 :class:`OutputChecker` 对象(或其相似替换),它应该被用来比较预期输出和 " +"doctest 用例的实际输出。" + +#: ../../library/doctest.rst:1429 +msgid "" +"The optional keyword argument *verbose* controls the " +":class:`DocTestRunner`'s verbosity. If *verbose* is ``True``, then " +"information is printed about each example, as it is run. If *verbose* is " +"``False``, then only failures are printed. If *verbose* is unspecified, or " +"``None``, then verbose output is used iff the command-line switch ``-v`` is " +"used." +msgstr "" +"可选的关键字参数 *verbose* 控制 :class:`DocTestRunner` 的详细程度。 如果 *verbose* 是 ``True`` " +",那么每个用例的信息都会被打印出来,当它正在运行时。 如果 *verbose* 是 ``False`` ,则只打印失败的信息。 当 *verbose* " +"没有指定,或者为 ``None`` ,如果使用了命令行开关 ``-v`` ,则使用verbose输出。" + +#: ../../library/doctest.rst:1435 +msgid "" +"The optional keyword argument *optionflags* can be used to control how the " +"test runner compares expected output to actual output, and how it displays " +"failures. For more information, see section :ref:`doctest-options`." +msgstr "" +"可选的关键字参数 *optionflags* 可以用来控制测试运行器如何比较预期输出和实际输出,以及如何显示失败。更多信息,请参见章节 " +":ref:`doctest-options` 。" + +#: ../../library/doctest.rst:1445 +msgid "" +"Report that the test runner is about to process the given example. This " +"method is provided to allow subclasses of :class:`DocTestRunner` to " +"customize their output; it should not be called directly." +msgstr "" +"报告测试运行器即将处理给定的用例。提供这个方法是为了让 :class:`DocTestRunner` 的子类能够定制他们的输出;它不应该被直接调用。" + +#: ../../library/doctest.rst:1449 +msgid "" +"*example* is the example about to be processed. *test* is the test " +"*containing example*. *out* is the output function that was passed to " +":meth:`DocTestRunner.run`." +msgstr "" +"*example* 是即将被处理的用。 *test* 是 *包含用例* 的测试。 *out* 是传递给 " +":meth:`DocTestRunner.run` 的输出函数。" + +#: ../../library/doctest.rst:1456 +msgid "" +"Report that the given example ran successfully. This method is provided to " +"allow subclasses of :class:`DocTestRunner` to customize their output; it " +"should not be called directly." +msgstr "" +"报告给定的用例运行成功。 提供这个方法是为了让 :class:`DocTestRunner` 的子类能够定制他们的输出;它不应该被直接调用。" + +#: ../../library/doctest.rst:1460 ../../library/doctest.rst:1471 +msgid "" +"*example* is the example about to be processed. *got* is the actual output " +"from the example. *test* is the test containing *example*. *out* is the " +"output function that was passed to :meth:`DocTestRunner.run`." +msgstr "" +"*example* 是即将被处理的用例。 *got* 是这个例子的实际输出。 *test* 是包含 *example* 的测试。 *out* 是传递给 " +":meth:`DocTestRunner.run` 的输出函数。" + +#: ../../library/doctest.rst:1467 +msgid "" +"Report that the given example failed. This method is provided to allow " +"subclasses of :class:`DocTestRunner` to customize their output; it should " +"not be called directly." +msgstr "" +"报告给定的用例运行失败。 提供这个方法是为了让 :class:`DocTestRunner` 的子类能够定制他们的输出;它不应该被直接调用。" + +#: ../../library/doctest.rst:1478 +msgid "" +"Report that the given example raised an unexpected exception. This method is" +" provided to allow subclasses of :class:`DocTestRunner` to customize their " +"output; it should not be called directly." +msgstr "" +"报告给定的用例触发了一个异常。 提供这个方法是为了让 :class:`DocTestRunner` 的子类能够定制他们的输出;它不应该被直接调用。" + +#: ../../library/doctest.rst:1482 +msgid "" +"*example* is the example about to be processed. *exc_info* is a tuple " +"containing information about the unexpected exception (as returned by " +":func:`sys.exc_info`). *test* is the test containing *example*. *out* is " +"the output function that was passed to :meth:`DocTestRunner.run`." +msgstr "" +"*example* 是将要被处理的用例。 *exc_info* 是一个元组,包含关于异常的信息(如由 :func:`sys.exc_info` 返回)。" +" *test* 是包含 *example* 的测试。 *out* 是传递给 :meth:`DocTestRunner.run` 的输出函数。" + +#: ../../library/doctest.rst:1490 +msgid "" +"Run the examples in *test* (a :class:`DocTest` object), and display the " +"results using the writer function *out*." +msgstr "在 *test* (一个 :class:`DocTest` 对象)中运行这些用例,并使用写入函数 *out* 显示结果。" + +#: ../../library/doctest.rst:1493 +msgid "" +"The examples are run in the namespace ``test.globs``. If *clear_globs* is " +"true (the default), then this namespace will be cleared after the test runs," +" to help with garbage collection. If you would like to examine the namespace" +" after the test completes, then use *clear_globs=False*." +msgstr "" +"这些用例都是在命名空间 ``test.globs`` 中运行的。 如果 *clear_globs* 为 True " +"(默认),那么这个命名空间将在测试运行后被清除,以帮助进行垃圾回收。如果你想在测试完成后检查命名空间,那么使用 *clear_globs=False* " +"。" + +#: ../../library/doctest.rst:1498 +msgid "" +"*compileflags* gives the set of flags that should be used by the Python " +"compiler when running the examples. If not specified, then it will default " +"to the set of future-import flags that apply to *globs*." +msgstr "" +"*compileflags* 给出了 Python 编译器在运行例子时应该使用的标志集。如果没有指定,那么它将默认为适用于 *globs* 的 " +"future-import 标志集。" + +#: ../../library/doctest.rst:1502 +msgid "" +"The output of each example is checked using the :class:`DocTestRunner`'s " +"output checker, and the results are formatted by the " +":meth:`DocTestRunner.report_\\*` methods." +msgstr "" +"每个用例的输出都使用 :class:`DocTestRunner` 的输出检查器进行检查,结果由 " +":meth:`DocTestRunner.report_*` 方法进行格式化。" + +#: ../../library/doctest.rst:1509 +msgid "" +"Print a summary of all the test cases that have been run by this " +"DocTestRunner, and return a :term:`named tuple` ``TestResults(failed, " +"attempted)``." +msgstr "" +"打印这个 DocTestRunner 运行过的所有测试用例的摘要,并返回一个 :term:`named tuple` " +"``TestResults(failed, attempted)`` 。" + +#: ../../library/doctest.rst:1512 +msgid "" +"The optional *verbose* argument controls how detailed the summary is. If " +"the verbosity is not specified, then the :class:`DocTestRunner`'s verbosity " +"is used." +msgstr "" +"可选的 *verbose* 参数控制摘要的详细程度。 如果没有指定 verbose ,那么将使用 :class:`DocTestRunner` 的 " +"verbose 。" + +#: ../../library/doctest.rst:1519 +msgid "OutputChecker objects" +msgstr "OutputChecker 对象" + +#: ../../library/doctest.rst:1524 +msgid "" +"A class used to check the whether the actual output from a doctest example " +"matches the expected output. :class:`OutputChecker` defines two methods: " +":meth:`check_output`, which compares a given pair of outputs, and returns " +"``True`` if they match; and :meth:`output_difference`, which returns a " +"string describing the differences between two outputs." +msgstr "" +"一个用于检查测试用例的实际输出是否与预期输出相匹配的类。 :class:`OutputChecker` 定义了两个方法: " +":meth:`check_output` ,比较给定的一对输出,如果它们匹配则返回 ``True`` ; " +":meth:`output_difference` ,返回一个描述两个输出之间差异的字符串。" + +#: ../../library/doctest.rst:1531 +msgid ":class:`OutputChecker` defines the following methods:" +msgstr ":class:`OutputChecker` 定义了以下方法:" + +#: ../../library/doctest.rst:1535 +msgid "" +"Return ``True`` iff the actual output from an example (*got*) matches the " +"expected output (*want*). These strings are always considered to match if " +"they are identical; but depending on what option flags the test runner is " +"using, several non-exact match types are also possible. See section " +":ref:`doctest-options` for more information about option flags." +msgstr "" +"如果一个用例的实际输出( *got* )与预期输出( *want* )匹配,则返回 ``True`` 。 " +"如果这些字符串是相同的,总是被认为是匹配的;但是根据测试运行器使用的选项标志,也可能有几种非精确的匹配类型。 参见章节 :ref:`doctest-" +"options` 了解更多关于选项标志的信息。" + +#: ../../library/doctest.rst:1544 +msgid "" +"Return a string describing the differences between the expected output for a" +" given example (*example*) and the actual output (*got*). *optionflags* is " +"the set of option flags used to compare *want* and *got*." +msgstr "" +"返回一个字符串,描述给定用例( *example* )的预期输出和实际输出( *got* )之间的差异。 *optionflags* 是用于比较 " +"*want* 和 *got* 的选项标志集。" + +#: ../../library/doctest.rst:1552 +msgid "Debugging" +msgstr "调试" + +#: ../../library/doctest.rst:1554 +msgid "Doctest provides several mechanisms for debugging doctest examples:" +msgstr "Doctest 提供了几种调试 doctest 用例的机制:" + +#: ../../library/doctest.rst:1556 +msgid "" +"Several functions convert doctests to executable Python programs, which can " +"be run under the Python debugger, :mod:`pdb`." +msgstr "有几个函数将测试转换为可执行的 Python 程序,这些程序可以在 Python 调试器, :mod:`pdb` 下运行。" + +#: ../../library/doctest.rst:1559 +msgid "" +"The :class:`DebugRunner` class is a subclass of :class:`DocTestRunner` that " +"raises an exception for the first failing example, containing information " +"about that example. This information can be used to perform post-mortem " +"debugging on the example." +msgstr "" +":class:`DebugRunner` 类是 :class:`DocTestRunner` " +"的一个子类,它为第一个失败的用例触发一个异常,包含关于这个用例的信息。这些信息可以用来对这个用例进行事后调试。" + +#: ../../library/doctest.rst:1564 +msgid "" +"The :mod:`unittest` cases generated by :func:`DocTestSuite` support the " +":meth:`debug` method defined by :class:`unittest.TestCase`." +msgstr "" +"由 :func:`DocTestSuite` 生成的 :mod:`unittest` 用例支持由 :class:`unittest.TestCase` " +"定义的 :meth:`debug` 方法,。" + +#: ../../library/doctest.rst:1567 +msgid "" +"You can add a call to :func:`pdb.set_trace` in a doctest example, and you'll" +" drop into the Python debugger when that line is executed. Then you can " +"inspect current values of variables, and so on. For example, suppose " +":file:`a.py` contains just this module docstring::" +msgstr "" +"你可以在 doctest 的用例中加入对 :func:`pdb.set_trace` 的调用,当这一行被执行时,你会进入 Python 调试器。 " +"然后你可以检查变量的当前值,等等。 例如,假设 :file:`a.py` 只包含这个模块 docstring ::" + +#: ../../library/doctest.rst:1582 +msgid "Then an interactive Python session may look like this::" +msgstr "那么一个交互式Python会话可能是这样的::" + +#: ../../library/doctest.rst:1615 +msgid "" +"Functions that convert doctests to Python code, and possibly run the " +"synthesized code under the debugger:" +msgstr "将测试转换为 Python 代码的函数,并可能在调试器下运行合成的代码:" + +#: ../../library/doctest.rst:1621 +msgid "Convert text with examples to a script." +msgstr "将带有用例的文本转换为脚本。" + +#: ../../library/doctest.rst:1623 +msgid "" +"Argument *s* is a string containing doctest examples. The string is " +"converted to a Python script, where doctest examples in *s* are converted to" +" regular code, and everything else is converted to Python comments. The " +"generated script is returned as a string. For example, ::" +msgstr "" +"参数 *s* 是一个包含测试用例的字符串。 该字符串被转换为 Python 脚本,其中 *s* 中的 doctest " +"用例被转换为常规代码,其他的都被转换为 Python 注释。 生成的脚本将以字符串的形式返回。例如, ::" + +#: ../../library/doctest.rst:1638 +msgid "displays::" +msgstr "显示::" + +#: ../../library/doctest.rst:1648 +msgid "" +"This function is used internally by other functions (see below), but can " +"also be useful when you want to transform an interactive Python session into" +" a Python script." +msgstr "这个函数在内部被其他函数使用(见下文),但当你想把一个交互式 Python 会话转化为 Python 脚本时,也会很有用。" + +#: ../../library/doctest.rst:1655 +msgid "Convert the doctest for an object to a script." +msgstr "将一个对象的 doctest 转换为一个脚本。" + +#: ../../library/doctest.rst:1657 +msgid "" +"Argument *module* is a module object, or dotted name of a module, containing" +" the object whose doctests are of interest. Argument *name* is the name " +"(within the module) of the object with the doctests of interest. The result" +" is a string, containing the object's docstring converted to a Python " +"script, as described for :func:`script_from_examples` above. For example, " +"if module :file:`a.py` contains a top-level function :func:`f`, then ::" +msgstr "" +"参数 *module* 是一个模块对象,或者一个模块带点的名称,包含对其 doctest 感兴趣的对象。 参数 *name* " +"是具有感兴趣的测试的对象的名称(在模块中)。 结果是一个字符串,包含该对象的文本串转换为 Python 脚本,如上面 " +":func:`script_from_examples` 所述。 例如,如果模块 :file:`a.py` 包含一个顶级函数 :func:`f` ,那么" +" ::" + +#: ../../library/doctest.rst:1667 +msgid "" +"prints a script version of function :func:`f`'s docstring, with doctests " +"converted to code, and the rest placed in comments." +msgstr "打印函数 :func:`f` 的文档串的脚本版本,将测试转换为代码,其余部分放在注释中。" + +#: ../../library/doctest.rst:1673 +msgid "Debug the doctests for an object." +msgstr "对一个对象的 doctest 进行调试。" + +#: ../../library/doctest.rst:1675 +msgid "" +"The *module* and *name* arguments are the same as for function " +":func:`testsource` above. The synthesized Python script for the named " +"object's docstring is written to a temporary file, and then that file is run" +" under the control of the Python debugger, :mod:`pdb`." +msgstr "" +"*module* 和 *name* 参数与上面函数 :func:`testsource` 的参数相同。 被命名对象的文本串的合成 Python " +"脚本被写入一个临时文件,然后该文件在 Python 调试器 :mod:`pdb` 的控制下运行。" + +#: ../../library/doctest.rst:1680 +msgid "" +"A shallow copy of ``module.__dict__`` is used for both local and global " +"execution context." +msgstr "``module.__dict__`` 的一个浅层拷贝被用于本地和全局的执行环境。" + +#: ../../library/doctest.rst:1683 +msgid "" +"Optional argument *pm* controls whether post-mortem debugging is used. If " +"*pm* has a true value, the script file is run directly, and the debugger " +"gets involved only if the script terminates via raising an unhandled " +"exception. If it does, then post-mortem debugging is invoked, via " +":func:`pdb.post_mortem`, passing the traceback object from the unhandled " +"exception. If *pm* is not specified, or is false, the script is run under " +"the debugger from the start, via passing an appropriate :func:`exec` call to" +" :func:`pdb.run`." +msgstr "" +"可选参数 *pm* 控制是否使用事后调试。 如果 *pm* 为 True " +",则直接运行脚本文件,只有当脚本通过引发一个未处理的异常而终止时,调试器才会介入。如果是这样,就会通过 :func:`pdb.post_mortem` " +"调用事后调试,并传递未处理异常的跟踪对象。如果没有指定 *pm* ,或者是 False ,脚本将从一开始就在调试器下运行,通过传递一个适当的 " +":func:`exec` 调用给 :func:`pdb.run` 。" + +#: ../../library/doctest.rst:1694 +msgid "Debug the doctests in a string." +msgstr "在一个字符串中调试 doctest 。" + +#: ../../library/doctest.rst:1696 +msgid "" +"This is like function :func:`debug` above, except that a string containing " +"doctest examples is specified directly, via the *src* argument." +msgstr "这就像上面的函数 :func:`debug` ,只是通过 *src* 参数,直接指定一个包含测试用例的字符串。" + +#: ../../library/doctest.rst:1699 +msgid "" +"Optional argument *pm* has the same meaning as in function :func:`debug` " +"above." +msgstr "可选参数 *pm* 的含义与上述函数 :func:`debug` 的含义相同。" + +#: ../../library/doctest.rst:1701 +msgid "" +"Optional argument *globs* gives a dictionary to use as both local and global" +" execution context. If not specified, or ``None``, an empty dictionary is " +"used. If specified, a shallow copy of the dictionary is used." +msgstr "" +"可选的参数 *globs* 给出了一个字典,作为本地和全局的执行环境。 如果没有指定,或者为 ``None`` " +",则使用一个空的字典。如果指定,则使用字典的浅层拷贝。" + +#: ../../library/doctest.rst:1706 +msgid "" +"The :class:`DebugRunner` class, and the special exceptions it may raise, are" +" of most interest to testing framework authors, and will only be sketched " +"here. See the source code, and especially :class:`DebugRunner`'s docstring " +"(which is a doctest!) for more details:" +msgstr "" +":class:`DebugRunner` 类,以及它可能触发的特殊异常,是测试框架作者最感兴趣的,在此仅作简要介绍。请看源代码,特别是 " +":class:`DebugRunner` 的文档串(这是一个测试!)以了解更多细节。" + +#: ../../library/doctest.rst:1714 +msgid "" +"A subclass of :class:`DocTestRunner` that raises an exception as soon as a " +"failure is encountered. If an unexpected exception occurs, an " +":exc:`UnexpectedException` exception is raised, containing the test, the " +"example, and the original exception. If the output doesn't match, then a " +":exc:`DocTestFailure` exception is raised, containing the test, the example," +" and the actual output." +msgstr "" +":class:`DocTestRunner` 的一个子类,一旦遇到失败,就会触发一个异常。 如果一个意外的异常发生,就会引发一个 " +":exc:`UnexpectedException` 异常,包含测试、用例和原始异常。 如果输出不匹配,那么就会引发一个 " +":exc:`DocTestFailure` 异常,包含测试、用例和实际输出。" + +#: ../../library/doctest.rst:1721 +msgid "" +"For information about the constructor parameters and methods, see the " +"documentation for :class:`DocTestRunner` in section :ref:`doctest-advanced-" +"api`." +msgstr "" +"关于构造函数参数和方法的信息,请参见 :class:`DocTestRunner` 部分的文档 :ref:`doctest-advanced-api` " +"。" + +#: ../../library/doctest.rst:1724 +msgid "" +"There are two exceptions that may be raised by :class:`DebugRunner` " +"instances:" +msgstr ":class:`DebugRunner` 实例可能会触发两种异常。" + +#: ../../library/doctest.rst:1729 +msgid "" +"An exception raised by :class:`DocTestRunner` to signal that a doctest " +"example's actual output did not match its expected output. The constructor " +"arguments are used to initialize the attributes of the same names." +msgstr "" +":class:`DocTestRunner` 触发的异常,表示一个 doctest " +"用例的实际输出与预期输出不一致。构造函数参数被用来初始化相同名称的属性。" + +#: ../../library/doctest.rst:1733 +msgid ":exc:`DocTestFailure` defines the following attributes:" +msgstr ":exc:`DocTestFailure` 定义了以下属性:" + +#: ../../library/doctest.rst:1738 ../../library/doctest.rst:1762 +msgid "" +"The :class:`DocTest` object that was being run when the example failed." +msgstr "当该用例失败时正在运行的 :class:`DocTest` 对象。" + +#: ../../library/doctest.rst:1743 ../../library/doctest.rst:1767 +msgid "The :class:`Example` that failed." +msgstr "失败的 :class:`Example` 。" + +#: ../../library/doctest.rst:1748 +msgid "The example's actual output." +msgstr "用例的实际输出。" + +#: ../../library/doctest.rst:1753 +msgid "" +"An exception raised by :class:`DocTestRunner` to signal that a doctest " +"example raised an unexpected exception. The constructor arguments are used " +"to initialize the attributes of the same names." +msgstr "" +"一个由 :class:`DocTestRunner` 触发的异常,以提示一个 doctest 用例引发了一个意外的异常。 " +"构造函数参数被用来初始化相同名称的属性。" + +#: ../../library/doctest.rst:1757 +msgid ":exc:`UnexpectedException` defines the following attributes:" +msgstr ":exc:`UnexpectedException` 定义了以下属性:" + +#: ../../library/doctest.rst:1772 +msgid "" +"A tuple containing information about the unexpected exception, as returned " +"by :func:`sys.exc_info`." +msgstr "一个包含意外异常信息的元组,由 :func:`sys.ex_info` 返回。" + +#: ../../library/doctest.rst:1779 +msgid "Soapbox" +msgstr "肥皂盒" + +#: ../../library/doctest.rst:1781 +msgid "" +"As mentioned in the introduction, :mod:`doctest` has grown to have three " +"primary uses:" +msgstr "正如介绍中提到的, :mod:`doctest` 已经发展到有三个主要用途:" + +#: ../../library/doctest.rst:1784 +msgid "Checking examples in docstrings." +msgstr "检查 docstring 中的用例。" + +#: ../../library/doctest.rst:1786 +msgid "Regression testing." +msgstr "回归测试。" + +#: ../../library/doctest.rst:1788 +msgid "Executable documentation / literate testing." +msgstr "可执行的文档/文字测试。" + +#: ../../library/doctest.rst:1790 +msgid "" +"These uses have different requirements, and it is important to distinguish " +"them. In particular, filling your docstrings with obscure test cases makes " +"for bad documentation." +msgstr "这些用途有不同的要求,区分它们是很重要的。特别是,用晦涩难懂的测试用例来填充你的文档字符串会使文档变得很糟糕。" + +#: ../../library/doctest.rst:1794 +msgid "" +"When writing a docstring, choose docstring examples with care. There's an " +"art to this that needs to be learned---it may not be natural at first. " +"Examples should add genuine value to the documentation. A good example can " +"often be worth many words. If done with care, the examples will be " +"invaluable for your users, and will pay back the time it takes to collect " +"them many times over as the years go by and things change. I'm still amazed" +" at how often one of my :mod:`doctest` examples stops working after a " +"\"harmless\" change." +msgstr "" +"在编写文档串时,要谨慎地选择文档串的用例。这是一门需要学习的艺术——一开始可能并不自然。用例应该为文档增加真正的价值。 " +"一个好的用例往往可以抵得上许多文字。如果用心去做,这些用例对你的用户来说是非常有价值的,而且随着时间的推移和事情的变化,收集这些用例所花费的时间也会得到很多倍的回报。" +" 我仍然惊讶于我的 :mod:`doctest` 用例在一个“无害”的变化后停止工作。" + +#: ../../library/doctest.rst:1802 +msgid "" +"Doctest also makes an excellent tool for regression testing, especially if " +"you don't skimp on explanatory text. By interleaving prose and examples, it" +" becomes much easier to keep track of what's actually being tested, and why." +" When a test fails, good prose can make it much easier to figure out what " +"the problem is, and how it should be fixed. It's true that you could write " +"extensive comments in code-based testing, but few programmers do. Many have " +"found that using doctest approaches instead leads to much clearer tests. " +"Perhaps this is simply because doctest makes writing prose a little easier " +"than writing code, while writing comments in code is a little harder. I " +"think it goes deeper than just that: the natural attitude when writing a " +"doctest-based test is that you want to explain the fine points of your " +"software, and illustrate them with examples. This in turn naturally leads to" +" test files that start with the simplest features, and logically progress to" +" complications and edge cases. A coherent narrative is the result, instead " +"of a collection of isolated functions that test isolated bits of " +"functionality seemingly at random. It's a different attitude, and produces " +"different results, blurring the distinction between testing and explaining." +msgstr "" +"Doctest 也是回归测试的一个很好的工具,特别是如果你不吝啬解释的文字。 " +"通过交错的文本和用例,可以更容易地跟踪真正的测试,以及为什么。当测试失败时,好的文本可以使你更容易弄清问题所在,以及如何解决。 " +"的确,你可以在基于代码的测试中写大量的注释,但很少有程序员这样做。许多人发现,使用 doctest 方法反而能使测试更加清晰。 也许这只是因为 " +"doctest 使写散文比写代码容易一些,而在代码中写注释则有点困难。 我认为它比这更深入:当写一个基于 doctest " +"的测试时,自然的态度是你想解释你的软件的细微之处,并用例子来说明它们。这反过来又自然地导致了测试文件从最简单的功能开始,然后逻辑地发展到复杂和边缘案例。" +" 一个连贯的叙述是结果,而不是一个孤立的函数集合,似乎是随机的测试孤立的功能位。 这是一种不同的态度,产生不同的结果,模糊了测试和解释之间的区别。" + +#: ../../library/doctest.rst:1820 +msgid "" +"Regression testing is best confined to dedicated objects or files. There " +"are several options for organizing tests:" +msgstr "回归测试最好限制在专用对象或文件中。 有几种组织测试的选择:" + +#: ../../library/doctest.rst:1823 +msgid "" +"Write text files containing test cases as interactive examples, and test the" +" files using :func:`testfile` or :func:`DocFileSuite`. This is recommended," +" although is easiest to do for new projects, designed from the start to use " +"doctest." +msgstr "" +"编写包含测试案例的文本文件作为交互式例子,并使用 :func:`testfile` 或 :func:`DocFileSuite` 来测试这些文件。 " +"建议这样做,尽管对于新的项目来说是最容易做到的,从一开始就设计成使用 doctest 。" + +#: ../../library/doctest.rst:1828 +msgid "" +"Define functions named ``_regrtest_topic`` that consist of single " +"docstrings, containing test cases for the named topics. These functions can" +" be included in the same file as the module, or separated out into a " +"separate test file." +msgstr "" +"定义命名为 ``_regrtest_topic`` 的函数,由单个文档串组成,包含命名主题的测试用例。 " +"这些函数可以包含在与模块相同的文件中,或分离出来成为一个单独的测试文件。" + +#: ../../library/doctest.rst:1832 +msgid "" +"Define a ``__test__`` dictionary mapping from regression test topics to " +"docstrings containing test cases." +msgstr "定义一个从回归测试主题到包含测试用例的文档串的 ``__test__`` 字典映射。" + +#: ../../library/doctest.rst:1835 +msgid "" +"When you have placed your tests in a module, the module can itself be the " +"test runner. When a test fails, you can arrange for your test runner to re-" +"run only the failing doctest while you debug the problem. Here is a minimal" +" example of such a test runner::" +msgstr "" +"当你把你的测试放在一个模块中时,这个模块本身就可以成为测试运行器。 当一个测试失败时,你可以安排你的测试运行器只重新运行失败的测试,同时调试问题。 " +"下面是这样一个测试运行器的最小例子::" + +#: ../../library/doctest.rst:1857 +msgid "Footnotes" +msgstr "备注" + +#: ../../library/doctest.rst:1858 +msgid "" +"Examples containing both expected output and an exception are not supported." +" Trying to guess where one ends and the other begins is too error-prone, and" +" that also makes for a confusing test." +msgstr "不支持同时包含预期输出和异常的用例。试图猜测一个在哪里结束,另一个在哪里开始,太容易出错了,而且这也会使测试变得混乱。" diff --git a/library/dummy_threading.po b/library/dummy_threading.po new file mode 100644 index 000000000..bc8185992 --- /dev/null +++ b/library/dummy_threading.po @@ -0,0 +1,55 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) 2001-2020, Python Software Foundation +# This file is distributed under the same license as the Python package. +# FIRST AUTHOR , YEAR. +# +# Translators: +# cissoid , 2018 +# Pandaaaa906 , 2019 +# Meng Du , 2019 +# +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: Python 3.8\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2020-02-09 12:40+0000\n" +"PO-Revision-Date: 2017-02-16 23:07+0000\n" +"Last-Translator: Meng Du , 2019\n" +"Language-Team: Chinese (China) (https://www.transifex.com/python-doc/teams/5390/zh_CN/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: zh_CN\n" +"Plural-Forms: nplurals=1; plural=0;\n" + +#: ../../library/dummy_threading.rst:2 +msgid "" +":mod:`dummy_threading` --- Drop-in replacement for the :mod:`threading` " +"module" +msgstr ":mod:`dummy_threading` --- 可直接替代 :mod:`threading` 模块。" + +#: ../../library/dummy_threading.rst:7 +msgid "**Source code:** :source:`Lib/dummy_threading.py`" +msgstr "**源代码:** :source:`Lib/dummy_threading.py`" + +#: ../../library/dummy_threading.rst:9 +msgid "" +"Python now always has threading enabled. Please use :mod:`threading` " +"instead." +msgstr "现在Python总是启用多线程。请使用 :mod:`threading` 代替。" + +#: ../../library/dummy_threading.rst:14 +msgid "" +"This module provides a duplicate interface to the :mod:`threading` module. " +"It was meant to be imported when the :mod:`_thread` module was not provided " +"on a platform." +msgstr "" +"这个模块提供了一个和 :mod:`threading` 模块重复的接口。当平台不提供 :mod:`_thread` 模块时,应导入这个模块。" + +#: ../../library/dummy_threading.rst:18 +msgid "" +"Be careful to not use this module where deadlock might occur from a thread " +"being created that blocks waiting for another thread to be created. This " +"often occurs with blocking I/O." +msgstr "如果线程需要阻塞等待另一个线程被创建的话,可能会造成死锁,这通常是由于阻塞 I/O 引起的。这种场景下请不要使用这个模块。" diff --git a/library/email.charset.po b/library/email.charset.po new file mode 100644 index 000000000..4c59f2e8f --- /dev/null +++ b/library/email.charset.po @@ -0,0 +1,344 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) 2001-2022, Python Software Foundation +# This file is distributed under the same license as the Python package. +# FIRST AUTHOR , YEAR. +# +# Translators: +# pop corner , 2019 +# Freesand Leo , 2022 +# +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: Python 3.9\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2022-11-04 14:34+0000\n" +"PO-Revision-Date: 2017-02-16 23:07+0000\n" +"Last-Translator: Freesand Leo , 2022\n" +"Language-Team: Chinese (China) (https://www.transifex.com/python-doc/teams/5390/zh_CN/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: zh_CN\n" +"Plural-Forms: nplurals=1; plural=0;\n" + +#: ../../library/email.charset.rst:2 +msgid ":mod:`email.charset`: Representing character sets" +msgstr ":mod:`email.charset`: 表示字符集" + +#: ../../library/email.charset.rst:7 +msgid "**Source code:** :source:`Lib/email/charset.py`" +msgstr "**源代码:** :source:`Lib/email/charset.py`" + +#: ../../library/email.charset.rst:11 +msgid "" +"This module is part of the legacy (``Compat32``) email API. In the new API " +"only the aliases table is used." +msgstr "此模块是旧版 (``Compat32``) email API 的组成部分。 在新版 API 中只会使用其中的别名表。" + +#: ../../library/email.charset.rst:14 +msgid "" +"The remaining text in this section is the original documentation of the " +"module." +msgstr "本段落中的剩余文本是该模块的原始文档。" + +#: ../../library/email.charset.rst:16 +msgid "" +"This module provides a class :class:`Charset` for representing character " +"sets and character set conversions in email messages, as well as a character" +" set registry and several convenience methods for manipulating this " +"registry. Instances of :class:`Charset` are used in several other modules " +"within the :mod:`email` package." +msgstr "" +"此模块提供了一个 :class:`Charset` " +"类用来表示电子邮件消息中的字符集和字符集转换操作,以及一个字符集注册表和几个用于操作此注册表的便捷方法。 :class:`Charset` 的实例在 " +":mod:`email` 包的其他几个模块中也有使用。" + +#: ../../library/email.charset.rst:22 +msgid "Import this class from the :mod:`email.charset` module." +msgstr "请从 :mod:`email.charset` 模块导入这个类。" + +#: ../../library/email.charset.rst:27 +msgid "Map character sets to their email properties." +msgstr "将字符集映射到其 email 特征属性。" + +#: ../../library/email.charset.rst:29 +msgid "" +"This class provides information about the requirements imposed on email for " +"a specific character set. It also provides convenience routines for " +"converting between character sets, given the availability of the applicable " +"codecs. Given a character set, it will do its best to provide information " +"on how to use that character set in an email message in an RFC-compliant " +"way." +msgstr "" +"这个类提供了特定字符集对于电子邮件的要求的相关信息。 考虑到适用编解码器的可用性,它还为字符集之间的转换提供了一些便捷例程。 " +"在给定字符集的情况下,它将尽可能地以符合 RFC 的方式在电子邮件消息中提供有关如何使用该字符集的信息。" + +#: ../../library/email.charset.rst:35 +msgid "" +"Certain character sets must be encoded with quoted-printable or base64 when " +"used in email headers or bodies. Certain character sets must be converted " +"outright, and are not allowed in email." +msgstr "" +"特定字符集当在电子邮件标头或消息体中使用时必须以 quoted-printable 或 base64 来编码。 " +"某些字符集则必须被立即转换,不允许在电子邮件中使用。" + +#: ../../library/email.charset.rst:39 +msgid "" +"Optional *input_charset* is as described below; it is always coerced to " +"lower case. After being alias normalized it is also used as a lookup into " +"the registry of character sets to find out the header encoding, body " +"encoding, and output conversion codec to be used for the character set. For" +" example, if *input_charset* is ``iso-8859-1``, then headers and bodies will" +" be encoded using quoted-printable and no output conversion codec is " +"necessary. If *input_charset* is ``euc-jp``, then headers will be encoded " +"with base64, bodies will not be encoded, but output text will be converted " +"from the ``euc-jp`` character set to the ``iso-2022-jp`` character set." +msgstr "" +"可选的 *input_charset* 说明如下;它总是会被强制转为小写。 " +"在进行别名正规化后它还会被用来查询字符集注册表以找出用于该字符集的标头编码格式、消息体编码格式和输出转换编解码器。 举例来说,如果 " +"*input_charset* 为 ``iso-8859-1``,则标头和消息体将会使用 quoted-printable " +"来编码并且不需要输出转换编解码器。 如果 *input_charset* 为 ``euc-jp``,则标头将使用 base64 " +"来编码,消息体将不会被编码,但输出文本将从 ``euc-jp`` 字符集转换为 ``iso-2022-jp`` 字符集。" + +#: ../../library/email.charset.rst:49 +msgid ":class:`Charset` instances have the following data attributes:" +msgstr ":class:`Charset` 实例具有下列数据属性:" + +#: ../../library/email.charset.rst:53 +msgid "" +"The initial character set specified. Common aliases are converted to their " +"*official* email names (e.g. ``latin_1`` is converted to ``iso-8859-1``). " +"Defaults to 7-bit ``us-ascii``." +msgstr "" +"指定的初始字符集。 通用别名会被转换为它们的 *官方* 电子邮件名称 (例如 ``latin_1`` 会被转换为 ``iso-8859-1``)。 " +"默认值为 7 位 ``us-ascii``。" + +#: ../../library/email.charset.rst:60 +msgid "" +"If the character set must be encoded before it can be used in an email " +"header, this attribute will be set to ``charset.QP`` (for quoted-printable)," +" ``charset.BASE64`` (for base64 encoding), or ``charset.SHORTEST`` for the " +"shortest of QP or BASE64 encoding. Otherwise, it will be ``None``." +msgstr "" +"如果字符集在用于电子邮件标头之前必须被编码,此属性将被设为 ``charset.QP`` (表示 quoted-printable 编码格式), " +"``charset.BASE64`` (表示 base64 编码格式) 或 ``charset.SHORTEST`` 表示 QP 或 BASE64 " +"编码格式中最简短的一个。 在其他情况下,该属性将为 ``None``。" + +#: ../../library/email.charset.rst:69 +msgid "" +"Same as *header_encoding*, but describes the encoding for the mail message's" +" body, which indeed may be different than the header encoding. " +"``charset.SHORTEST`` is not allowed for *body_encoding*." +msgstr "" +"与 *header_encoding* 一样,但是用来描述电子邮件消息体的编码格式,它实际上可以与标头编码格式不同。 " +"``charset.SHORTEST`` 不允许被用作 *body_encoding*。" + +#: ../../library/email.charset.rst:76 +msgid "" +"Some character sets must be converted before they can be used in email " +"headers or bodies. If the *input_charset* is one of them, this attribute " +"will contain the name of the character set output will be converted to. " +"Otherwise, it will be ``None``." +msgstr "" +"某些字符集在用于电子邮件标头或消息体之前必须被转换。 如果 *input_charset* 是这些字符集之一,该属性将包含输出将要转换的字符集名称。 " +"在其他情况下,该属性将为 ``None``。" + +#: ../../library/email.charset.rst:84 +msgid "" +"The name of the Python codec used to convert the *input_charset* to Unicode." +" If no conversion codec is necessary, this attribute will be ``None``." +msgstr "" +"用于将 *input_charset* 转换为 Unicode 的 Python 编解码器名称。 如果不需要任何转换编解码器,该属性将为 " +"``None``。" + +#: ../../library/email.charset.rst:91 +msgid "" +"The name of the Python codec used to convert Unicode to the " +"*output_charset*. If no conversion codec is necessary, this attribute will " +"have the same value as the *input_codec*." +msgstr "" +"用于将 Unicode 转换为 *output_charset* 的 Python 编解码器名称。 如果不需要任何转换编解码器,该属性将具有与 " +"*input_codec* 相同的值。" + +#: ../../library/email.charset.rst:96 +msgid ":class:`Charset` instances also have the following methods:" +msgstr ":class:`Charset` 实例还有下列方法:" + +#: ../../library/email.charset.rst:100 +msgid "Return the content transfer encoding used for body encoding." +msgstr "返回用于消息体编码的内容转换编码格式。" + +#: ../../library/email.charset.rst:102 +msgid "" +"This is either the string ``quoted-printable`` or ``base64`` depending on " +"the encoding used, or it is a function, in which case you should call the " +"function with a single argument, the Message object being encoded. The " +"function should then set the :mailheader:`Content-Transfer-Encoding` header " +"itself to whatever is appropriate." +msgstr "" +"根据所使用的编码格式返回 ``quoted-printable`` 或 " +"``base64``,或是返回一个函数,在这种情况下你应当调用该函数并附带一个参数,即被编码的消息对象。 该函数应当自行将 " +":mailheader:`Content-Transfer-Encoding` 标头设为适当的值。" + +#: ../../library/email.charset.rst:108 +msgid "" +"Returns the string ``quoted-printable`` if *body_encoding* is ``QP``, " +"returns the string ``base64`` if *body_encoding* is ``BASE64``, and returns " +"the string ``7bit`` otherwise." +msgstr "" +"如果 *body_encoding* 为 ``QP`` 则返回字符串 ``quoted-printable``,如果 *body_encoding* 为" +" ``BASE64`` 则返回字符串 ``base64``,并在其他情况下返回字符串 ``7bit``。" + +#: ../../library/email.charset.rst:115 +msgid "Return the output character set." +msgstr "返回输出字符集。" + +#: ../../library/email.charset.rst:117 +msgid "" +"This is the *output_charset* attribute if that is not ``None``, otherwise it" +" is *input_charset*." +msgstr "如果 *output_charset* 属性不为 ``None`` 则返回该属性,否则返回 *input_charset*。" + +#: ../../library/email.charset.rst:123 +msgid "Header-encode the string *string*." +msgstr "对字符串 *string* 执行标头编码。" + +#: ../../library/email.charset.rst:125 +msgid "" +"The type of encoding (base64 or quoted-printable) will be based on the " +"*header_encoding* attribute." +msgstr "编码格式的类型 (base64 或 quoted-printable) 将取决于 *header_encoding* 属性。" + +#: ../../library/email.charset.rst:131 +msgid "Header-encode a *string* by converting it first to bytes." +msgstr "通过先将 *string* 转换为字节串来对其执行标头编码。" + +#: ../../library/email.charset.rst:133 +msgid "" +"This is similar to :meth:`header_encode` except that the string is fit into " +"maximum line lengths as given by the argument *maxlengths*, which must be an" +" iterator: each element returned from this iterator will provide the next " +"maximum line length." +msgstr "" +"这类似于 :meth:`header_encode`,区别是字符串会被调整至参数 *maxlengths* " +"所给出的最大行长度,它应当是一个迭代器:该迭代器返回的每个元素将提供下一个最大行长度。" + +#: ../../library/email.charset.rst:141 +msgid "Body-encode the string *string*." +msgstr "对字符串 *string* 执行消息体编码。" + +#: ../../library/email.charset.rst:143 +msgid "" +"The type of encoding (base64 or quoted-printable) will be based on the " +"*body_encoding* attribute." +msgstr "编码格式的类型 (base64 或 quoted-printable) 将取决于 *body_encoding* 属性。" + +#: ../../library/email.charset.rst:146 +msgid "" +"The :class:`Charset` class also provides a number of methods to support " +"standard operations and built-in functions." +msgstr ":class:`Charset` 类还提供了一些方法以支持标准运算和内置函数。" + +#: ../../library/email.charset.rst:152 +msgid "" +"Returns *input_charset* as a string coerced to lower case. :meth:`__repr__` " +"is an alias for :meth:`__str__`." +msgstr "" +"将 *input_charset* 以强制转为小写的字符串形式返回。 :meth:`__repr__` 是 :meth:`__str__` 的别名。" + +#: ../../library/email.charset.rst:158 +msgid "" +"This method allows you to compare two :class:`Charset` instances for " +"equality." +msgstr "这个方法允许你对两个 :class:`Charset` 实例进行相等比较。" + +#: ../../library/email.charset.rst:164 +msgid "" +"This method allows you to compare two :class:`Charset` instances for " +"inequality." +msgstr "这个方法允许你对两个 :class:`Charset` 实例进行相等比较。" + +#: ../../library/email.charset.rst:167 +msgid "" +"The :mod:`email.charset` module also provides the following functions for " +"adding new entries to the global character set, alias, and codec registries:" +msgstr ":mod:`email.charset` 模块还提供了下列函数用于向全局字符集、别名以及编解码器注册表添加新条目:" + +#: ../../library/email.charset.rst:173 +msgid "Add character properties to the global registry." +msgstr "向全局注册表添加字符特征属性。" + +#: ../../library/email.charset.rst:175 +msgid "" +"*charset* is the input character set, and must be the canonical name of a " +"character set." +msgstr "*charset* 是输入字符集,它必须为某个字符集的正规名称。" + +#: ../../library/email.charset.rst:178 +msgid "" +"Optional *header_enc* and *body_enc* is either ``charset.QP`` for quoted-" +"printable, ``charset.BASE64`` for base64 encoding, ``charset.SHORTEST`` for " +"the shortest of quoted-printable or base64 encoding, or ``None`` for no " +"encoding. ``SHORTEST`` is only valid for *header_enc*. The default is " +"``None`` for no encoding." +msgstr "" +"可选的 *header_enc* 和 *body_enc* 可以是 ``charset.QP`` 表示 quoted-printable 编码格式, " +"``charset.BASE64`` 表示 base64 编码格式, ``charset.SHORTEST`` 表示 quoted-printable " +"或 base64 编码格式中较短的一个,或者为 ``None`` 表示没有编码格式。 ``SHORTEST`` 仅对 *header_enc* 有效。 " +"默认值为 ``None`` 表示没有编码格式。" + +#: ../../library/email.charset.rst:184 +msgid "" +"Optional *output_charset* is the character set that the output should be in." +" Conversions will proceed from input charset, to Unicode, to the output " +"charset when the method :meth:`Charset.convert` is called. The default is " +"to output in the same character set as the input." +msgstr "" +"可选的 *output_charset* 是输出所应当采用的字符集。 当 :meth:`Charset.convert` " +"方法被调用时将会执行从输入字符集到输出字符集的转换。 默认情况下输出字符集将与输入字符集相同。" + +#: ../../library/email.charset.rst:189 +msgid "" +"Both *input_charset* and *output_charset* must have Unicode codec entries in" +" the module's character set-to-codec mapping; use :func:`add_codec` to add " +"codecs the module does not know about. See the :mod:`codecs` module's " +"documentation for more information." +msgstr "" +"*input_charset* 和 *output_charset* 都必须在模块的字符集-编解码器映射中具有 Unicode 编解码器条目;使用 " +":func:`add_codec` 可添加本模块还不知道的编解码器。 请参阅 :mod:`codecs` 模块的文档来了解更多信息。" + +#: ../../library/email.charset.rst:194 +msgid "" +"The global character set registry is kept in the module global dictionary " +"``CHARSETS``." +msgstr "全局字符集注册表保存在模块全局字典 ``CHARSETS`` 中。" + +#: ../../library/email.charset.rst:200 +msgid "" +"Add a character set alias. *alias* is the alias name, e.g. ``latin-1``. " +"*canonical* is the character set's canonical name, e.g. ``iso-8859-1``." +msgstr "" +"添加一个字符集别名。 *alias* 为特定的别名,例如 ``latin-1``。 *canonical* 是字符集的正规名称,例如 " +"``iso-8859-1``。" + +#: ../../library/email.charset.rst:203 +msgid "" +"The global charset alias registry is kept in the module global dictionary " +"``ALIASES``." +msgstr "全局字符集注册表保存在模块全局字典 ``ALIASES`` 中。" + +#: ../../library/email.charset.rst:209 +msgid "" +"Add a codec that map characters in the given character set to and from " +"Unicode." +msgstr "添加在给定字符集的字符和 Unicode 之间建立映射的编解码器。" + +#: ../../library/email.charset.rst:211 +msgid "" +"*charset* is the canonical name of a character set. *codecname* is the name " +"of a Python codec, as appropriate for the second argument to the " +":class:`str`'s :meth:`~str.encode` method." +msgstr "" +"*charset* 是某个字符集的正规名称。 *codecname* 是某个 Python 编解码器的名称,可以被用来作为 :class:`str` 的" +" :meth:`~str.encode` 方法的第二个参数。" diff --git a/library/email.compat32-message.po b/library/email.compat32-message.po new file mode 100644 index 000000000..dfc95807f --- /dev/null +++ b/library/email.compat32-message.po @@ -0,0 +1,1055 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) 2001-2024, Python Software Foundation +# This file is distributed under the same license as the Python package. +# FIRST AUTHOR , YEAR. +# +# Translators: +# Kevin Deng , 2020 +# Freesand Leo , 2021 +# Rafael Fontenelle , 2024 +# +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: Python 3.9\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2024-01-12 22:01+0000\n" +"PO-Revision-Date: 2017-02-16 23:07+0000\n" +"Last-Translator: Rafael Fontenelle , 2024\n" +"Language-Team: Chinese (China) (https://app.transifex.com/python-doc/teams/5390/zh_CN/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: zh_CN\n" +"Plural-Forms: nplurals=1; plural=0;\n" + +#: ../../library/email.compat32-message.rst:4 +msgid "" +":mod:`email.message.Message`: Representing an email message using the " +":data:`~email.policy.compat32` API" +msgstr "" +":mod:`email.message.Message`: 使用 :data:`~email.policy.compat32` API " +"来表示电子邮件消息" + +#: ../../library/email.compat32-message.rst:12 +msgid "" +"The :class:`Message` class is very similar to the " +":class:`~email.message.EmailMessage` class, without the methods added by " +"that class, and with the default behavior of certain other methods being " +"slightly different. We also document here some methods that, while " +"supported by the :class:`~email.message.EmailMessage` class, are not " +"recommended unless you are dealing with legacy code." +msgstr "" +":class:`Message` 类与 :class:`~email.message.EmailMessage` " +"类非常相似,但没有该类所添加的方法,并且某些方法的默认行为也略有不同。 我们还在这里记录了一些虽然被 " +":class:`~email.message.EmailMessage` 类所支持但并不推荐的方法,除非你是在处理旧有代码。" + +#: ../../library/email.compat32-message.rst:19 +msgid "The philosophy and structure of the two classes is otherwise the same." +msgstr "在其他情况下这两个类的理念和结构都是相同的。" + +#: ../../library/email.compat32-message.rst:21 +msgid "" +"This document describes the behavior under the default (for " +":class:`Message`) policy :attr:`~email.policy.Compat32`. If you are going " +"to use another policy, you should be using the " +":class:`~email.message.EmailMessage` class instead." +msgstr "" +"本文档描述了默认 (对于 :class:`Message`) 策略 :attr:`~email.policy.Compat32` 之下的行为。 " +"如果你要使用其他策略,你应当改用 :class:`~email.message.EmailMessage` 类。" + +#: ../../library/email.compat32-message.rst:25 +msgid "" +"An email message consists of *headers* and a *payload*. Headers must be " +":rfc:`5322` style names and values, where the field name and value are " +"separated by a colon. The colon is not part of either the field name or the" +" field value. The payload may be a simple text message, or a binary object," +" or a structured sequence of sub-messages each with their own set of headers" +" and their own payload. The latter type of payload is indicated by the " +"message having a MIME type such as :mimetype:`multipart/\\*` or " +":mimetype:`message/rfc822`." +msgstr "" +"电子邮件消息由多个 *标头* 和一个 *载荷* 组成。 标头必须为 :rfc:`5322` 风格的名称和值,其中字典名和值由冒号分隔。 " +"冒号不是字段名或字段值的组成部分。 载荷可以是简单的文本消息,或是二进制对象,或是多个子消息的结构化序列,每个子消息都有自己的标头集合和自己的载荷。 " +"后一种类型的载荷是由具有 :mimetype:`multipart/\\*` 或 :mimetype:`message/rfc822` 等 MIME " +"类型的消息来指明的。" + +#: ../../library/email.compat32-message.rst:34 +msgid "" +"The conceptual model provided by a :class:`Message` object is that of an " +"ordered dictionary of headers with additional methods for accessing both " +"specialized information from the headers, for accessing the payload, for " +"generating a serialized version of the message, and for recursively walking " +"over the object tree. Note that duplicate headers are supported but special" +" methods must be used to access them." +msgstr "" +":class:`Message` " +"对象所提供了概念化模型是由标头组成的有序字典,加上用于访问标头中的特殊信息以及访问载荷的额外方法,以便能生成消息的序列化版本,并递归地遍历对象树。 " +"请注意重复的标头是受支持的,但必须使用特殊的方法来访问它们。" + +#: ../../library/email.compat32-message.rst:41 +msgid "" +"The :class:`Message` pseudo-dictionary is indexed by the header names, which" +" must be ASCII values. The values of the dictionary are strings that are " +"supposed to contain only ASCII characters; there is some special handling " +"for non-ASCII input, but it doesn't always produce the correct results. " +"Headers are stored and returned in case-preserving form, but field names are" +" matched case-insensitively. There may also be a single envelope header, " +"also known as the *Unix-From* header or the ``From_`` header. The *payload*" +" is either a string or bytes, in the case of simple message objects, or a " +"list of :class:`Message` objects, for MIME container documents (e.g. " +":mimetype:`multipart/\\*` and :mimetype:`message/rfc822`)." +msgstr "" +":class:`Message` 伪字典以标头名作为索引,标头名必须为 ASCII 值。 字典的值为应当只包含 ASCII 字符的字符串;对于非 " +"ASCII 输入有一些特殊处理,但这并不总能产生正确的结果。 标头以保留原大小写的形式存储和返回,但字段名称匹配对大小写不敏感。 " +"还可能会有一个单独的封包标头,也称 *Unix-From* 标头或 ``From_`` 标头。 *载荷* " +"对于简单消息对象的情况是一个字符串或字节串,对于 MIME 容器文档的情况 (例如 :mimetype:`multipart/\\*` 和 " +":mimetype:`message/rfc822`) 则是一个 :class:`Message` 对象。" + +#: ../../library/email.compat32-message.rst:52 +msgid "Here are the methods of the :class:`Message` class:" +msgstr "以下是 :class:`Message` 类的方法:" + +#: ../../library/email.compat32-message.rst:57 +msgid "" +"If *policy* is specified (it must be an instance of a :mod:`~email.policy` " +"class) use the rules it specifies to update and serialize the representation" +" of the message. If *policy* is not set, use the :class:`compat32 " +"` policy, which maintains backward compatibility with" +" the Python 3.2 version of the email package. For more information see the " +":mod:`~email.policy` documentation." +msgstr "" +"如果指定了 *policy* (它必须为 :mod:`~email.policy` 类的实例) 则使用它所设置的规则来更新和序列化消息的表示形式。 " +"如果未设置 *policy*,则使用 :class:`compat32 ` 策略,该策略会保持对 " +"Python 3.2 版 email 包的向下兼容性。 更多信息请参阅 :mod:`~email.policy` 文档。" + +#: ../../library/email.compat32-message.rst:64 +msgid "The *policy* keyword argument was added." +msgstr "增加了 *policy* 关键字参数。" + +#: ../../library/email.compat32-message.rst:69 +msgid "" +"Return the entire message flattened as a string. When optional *unixfrom* " +"is true, the envelope header is included in the returned string. *unixfrom* " +"defaults to ``False``. For backward compatibility reasons, *maxheaderlen* " +"defaults to ``0``, so if you want a different value you must override it " +"explicitly (the value specified for *max_line_length* in the policy will be " +"ignored by this method). The *policy* argument may be used to override the " +"default policy obtained from the message instance. This can be used to " +"control some of the formatting produced by the method, since the specified " +"*policy* will be passed to the ``Generator``." +msgstr "" +"以展平的字符串形式返回整个消息对象。 或可选的 *unixfrom* 为真值,返回的字符串会包括封包标头。 *unixfrom* 的默认值是 " +"``False``。 出于保持向下兼容性的原因,*maxheaderlen* 的默认值是 " +"``0``,因此如果你想要不同的值你必须显式地重写它(在策略中为 *max_line_length* 指定的值将被此方法忽略)。 *policy* " +"参数可被用于覆盖从消息实例获取的默认策略。 这可以用来对该方法所输出的格式进行一些控制,因为指定的 *policy* 将被传递给 " +"``Generator``。" + +#: ../../library/email.compat32-message.rst:79 +#: ../../library/email.compat32-message.rst:121 +msgid "" +"Flattening the message may trigger changes to the :class:`Message` if " +"defaults need to be filled in to complete the transformation to a string " +"(for example, MIME boundaries may be generated or modified)." +msgstr "" +"如果需要填充默认值以完成对字符串的转换则展平消息可能触发对 :class:`Message` 的修改(例如,MIME 边界可能会被生成或被修改)。" + +#: ../../library/email.compat32-message.rst:83 +msgid "" +"Note that this method is provided as a convenience and may not always format" +" the message the way you want. For example, by default it does not do the " +"mangling of lines that begin with ``From`` that is required by the unix mbox" +" format. For more flexibility, instantiate a " +":class:`~email.generator.Generator` instance and use its " +":meth:`~email.generator.Generator.flatten` method directly. For example::" +msgstr "" +"请注意此方法是出于便捷原因提供的,可能无法总是以你想要的方式格式化消息。 例如,在默认情况下它不会按 unix mbox 格式的要求对以 " +"``From`` 打头的行执行调整。 为了获得更高灵活性,请实例化一个 :class:`~email.generator.Generator` " +"实例并直接使用其 :meth:`~email.generator.Generator.flatten` 方法。 例如::" + +#: ../../library/email.compat32-message.rst:97 +msgid "" +"If the message object contains binary data that is not encoded according to " +"RFC standards, the non-compliant data will be replaced by unicode \"unknown " +"character\" code points. (See also :meth:`.as_bytes` and " +":class:`~email.generator.BytesGenerator`.)" +msgstr "" +"如果消息对象包含未按照 RFC 标准进行编码的二进制数据,则这些不合规数据将被 unicode \"unknown character\" " +"码位值所替代。 (另请参阅 :meth:`.as_bytes` 和 :class:`~email.generator.BytesGenerator`。)" + +#: ../../library/email.compat32-message.rst:102 +msgid "the *policy* keyword argument was added." +msgstr "增加了 *policy* 关键字参数。" + +#: ../../library/email.compat32-message.rst:107 +msgid "" +"Equivalent to :meth:`.as_string()`. Allows ``str(msg)`` to produce a string" +" containing the formatted message." +msgstr "与 :meth:`.as_string()` 等价。 这将让 ``str(msg)`` 产生一个包含已格式化消息的字符号。" + +#: ../../library/email.compat32-message.rst:113 +msgid "" +"Return the entire message flattened as a bytes object. When optional " +"*unixfrom* is true, the envelope header is included in the returned string." +" *unixfrom* defaults to ``False``. The *policy* argument may be used to " +"override the default policy obtained from the message instance. This can be " +"used to control some of the formatting produced by the method, since the " +"specified *policy* will be passed to the ``BytesGenerator``." +msgstr "" +"以字节串对象的形式返回整个扁平化后的消息。 当可选的 *unixfrom* 为真值时,返回的字符串会包括封包标头。 *unixfrom* 的默认值为 " +"``False``。 *policy* 参数可被用于覆盖从消息实例获取的默认策略。 这可被用来控制该方法所产生的部分格式化效果,因为指定的 " +"*policy* 将被传递给 ``BytesGenerator``。" + +#: ../../library/email.compat32-message.rst:125 +msgid "" +"Note that this method is provided as a convenience and may not always format" +" the message the way you want. For example, by default it does not do the " +"mangling of lines that begin with ``From`` that is required by the unix mbox" +" format. For more flexibility, instantiate a " +":class:`~email.generator.BytesGenerator` instance and use its " +":meth:`~email.generator.BytesGenerator.flatten` method directly. For " +"example::" +msgstr "" +"请注意此方法是出于便捷原因提供的,可能无法总是以你想要的方式格式化消息。 例如,在默认情况下它不会按 unix mbox 格式的要求对以 " +"``From`` 打头的行执行调整。 为了获得更高灵活性,请实例化一个 :class:`~email.generator.BytesGenerator`" +" 实例并直接使用其 :meth:`~email.generator.BytesGenerator.flatten` 方法。 例如::" + +#: ../../library/email.compat32-message.rst:145 +msgid "" +"Equivalent to :meth:`.as_bytes()`. Allows ``bytes(msg)`` to produce a bytes" +" object containing the formatted message." +msgstr "与 :meth:`.as_bytes()` 等价。 这将让 ``bytes(msg)`` 产生一个包含已格式化消息的字节串对象。" + +#: ../../library/email.compat32-message.rst:153 +msgid "" +"Return ``True`` if the message's payload is a list of sub-\\ " +":class:`Message` objects, otherwise return ``False``. When " +":meth:`is_multipart` returns ``False``, the payload should be a string " +"object (which might be a CTE encoded binary payload). (Note that " +":meth:`is_multipart` returning ``True`` does not necessarily mean that " +"\"msg.get_content_maintype() == 'multipart'\" will return the ``True``. For " +"example, ``is_multipart`` will return ``True`` when the :class:`Message` is " +"of type ``message/rfc822``.)" +msgstr "" +"如果该消息的载荷是一个子 :class:`Message` 对象列表则返回 ``True``,否则返回 ``False``。 当 " +":meth:`is_multipart` 返回 ``False`` 时,载荷应当是一个字符串对象(有可能是一个 CTE 编码的二进制载荷)。 (请注意 " +":meth:`is_multipart` 返回 ``True`` 并不意味着 \"msg.get_content_maintype() == " +"'multipart'\" 将返回 ``True``。 例如,``is_multipart`` 在 :class:`Message` 类型为 " +"``message/rfc822`` 时也将返回 ``True``。)" + +#: ../../library/email.compat32-message.rst:165 +msgid "" +"Set the message's envelope header to *unixfrom*, which should be a string." +msgstr "将消息的封包标头设为 *unixfrom*,这应当是一个字符串。" + +#: ../../library/email.compat32-message.rst:170 +msgid "" +"Return the message's envelope header. Defaults to ``None`` if the envelope " +"header was never set." +msgstr "返回消息的信封头。如果信封头从未被设置过,默认返回 ``None`` 。" + +#: ../../library/email.compat32-message.rst:176 +msgid "" +"Add the given *payload* to the current payload, which must be ``None`` or a " +"list of :class:`Message` objects before the call. After the call, the " +"payload will always be a list of :class:`Message` objects. If you want to " +"set the payload to a scalar object (e.g. a string), use :meth:`set_payload` " +"instead." +msgstr "" +"将给定的 *payload* 添加到当前载荷中,当前载荷在该调用之前必须为 ``None`` 或是一个 :class:`Message` 对象列表。 " +"在调用之后,此载荷将总是一个 :class:`Message` 对象列表。 如果你想将此载荷设为一个标量对象(如字符串),请改用 " +":meth:`set_payload`。" + +#: ../../library/email.compat32-message.rst:182 +msgid "" +"This is a legacy method. On the :class:`~email.emailmessage.EmailMessage` " +"class its functionality is replaced by " +":meth:`~email.message.EmailMessage.set_content` and the related ``make`` and" +" ``add`` methods." +msgstr "" +"这是一个过时的方法。 在 :class:`~email.emailmessage.EmailMessage` 类上它的功能已被 " +":meth:`~email.message.EmailMessage.set_content` 及相应的 ``make`` 和 ``add`` " +"方法所替代。" + +#: ../../library/email.compat32-message.rst:190 +msgid "" +"Return the current payload, which will be a list of :class:`Message` objects" +" when :meth:`is_multipart` is ``True``, or a string when " +":meth:`is_multipart` is ``False``. If the payload is a list and you mutate " +"the list object, you modify the message's payload in place." +msgstr "" +"返回当前的载荷,它在 :meth:`is_multipart` 为 ``True`` 时将是一个 :class:`Message` 对象列表,在 " +":meth:`is_multipart` 为 ``False`` 时则是一个字符串。 " +"如果该载荷是一个列表且你修改了这个列表对象,那么你就是原地修改了消息的载荷。" + +#: ../../library/email.compat32-message.rst:195 +msgid "" +"With optional argument *i*, :meth:`get_payload` will return the *i*-th " +"element of the payload, counting from zero, if :meth:`is_multipart` is " +"``True``. An :exc:`IndexError` will be raised if *i* is less than 0 or " +"greater than or equal to the number of items in the payload. If the payload" +" is a string (i.e. :meth:`is_multipart` is ``False``) and *i* is given, a " +":exc:`TypeError` is raised." +msgstr "" +"传入可选参数 *i* 时,如果 :meth:`is_multipart` 为 ``True``,:meth:`get_payload` " +"将返回载荷从零开始计数的第 *i* 个元素。 如果 *i* 小于 0 或大于等于载荷中的条目数则将引发 :exc:`IndexError`。 " +"如果载荷是一个字符串 (即 :meth:`is_multipart` 为 ``False``) 且给出了 *i*,则会引发 " +":exc:`TypeError`。" + +#: ../../library/email.compat32-message.rst:202 +msgid "" +"Optional *decode* is a flag indicating whether the payload should be decoded" +" or not, according to the :mailheader:`Content-Transfer-Encoding` header. " +"When ``True`` and the message is not a multipart, the payload will be " +"decoded if this header's value is ``quoted-printable`` or ``base64``. If " +"some other encoding is used, or :mailheader:`Content-Transfer-Encoding` " +"header is missing, the payload is returned as-is (undecoded). In all cases " +"the returned value is binary data. If the message is a multipart and the " +"*decode* flag is ``True``, then ``None`` is returned. If the payload is " +"base64 and it was not perfectly formed (missing padding, characters outside " +"the base64 alphabet), then an appropriate defect will be added to the " +"message's defect property (:class:`~email.errors.InvalidBase64PaddingDefect`" +" or :class:`~email.errors.InvalidBase64CharactersDefect`, respectively)." +msgstr "" +"可选的 *decode* 是一个指明载荷是否应根据 :mailheader:`Content-Transfer-Encoding` 标头被解码的旗标。 " +"当其值为 ``True`` 且消息没有多个部分时,如果此标头值为 ``quoted-printable`` 或 ``base64`` 则载荷将被解码。 " +"如果使用了其他编码格式,或者找不到 :mailheader:`Content-Transfer-Encoding` 标头时,载荷将被原样返回(不编码)。" +" 在所有情况下返回值都是二进制数据。 如果消息有多个部分且 *decode* 旗标为 ``True``,则将返回 ``None``。 如果载荷为 " +"base64 但内容不完全正确(如缺少填充符、存在 base64 字母表以外的字符等),则将在消息的缺陷属性中添加适当的缺陷值 (分别为 " +":class:`~email.errors.InvalidBase64PaddingDefect` 或 " +":class:`~email.errors.InvalidBase64CharactersDefect`)。" + +#: ../../library/email.compat32-message.rst:216 +msgid "" +"When *decode* is ``False`` (the default) the body is returned as a string " +"without decoding the :mailheader:`Content-Transfer-Encoding`. However, for " +"a :mailheader:`Content-Transfer-Encoding` of 8bit, an attempt is made to " +"decode the original bytes using the ``charset`` specified by the " +":mailheader:`Content-Type` header, using the ``replace`` error handler. If " +"no ``charset`` is specified, or if the ``charset`` given is not recognized " +"by the email package, the body is decoded using the default ASCII charset." +msgstr "" +"当 *decode* 为 ``False`` (默认值) 时消息体会作为字符串返回而不解码 :mailheader:`Content-Transfer-" +"Encoding`。 但是,对于 :mailheader:`Content-Transfer-Encoding` 为 8bit 的情况,会尝试使用 " +":mailheader:`Content-Type` 标头指定的 ``charset`` 来解码原始字节串,并使用 ``replace`` " +"错误处理程序。 如果未指定 ``charset``,或者如果指定的 ``charset`` 未被 email 包所识别,则会使用默认的 ASCII " +"字符集来解码消息体。" + +#: ../../library/email.compat32-message.rst:225 +msgid "" +"This is a legacy method. On the :class:`~email.emailmessage.EmailMessage` " +"class its functionality is replaced by " +":meth:`~email.message.EmailMessage.get_content` and " +":meth:`~email.message.EmailMessage.iter_parts`." +msgstr "" +"这是一个过时的方法。 在 :class:`~email.emailmessage.EmailMessage` 类上它的功能已被 " +":meth:`~email.message.EmailMessage.get_content` 和 " +":meth:`~email.message.EmailMessage.iter_parts` 方法所替代。" + +#: ../../library/email.compat32-message.rst:233 +msgid "" +"Set the entire message object's payload to *payload*. It is the client's " +"responsibility to ensure the payload invariants. Optional *charset* sets " +"the message's default character set; see :meth:`set_charset` for details." +msgstr "" +"将整个消息对象的载荷设为 *payload*。 客户端要负责确保载荷的不变性。 可选的 *charset* 用于设置消息的默认字符集;详情请参阅 " +":meth:`set_charset`。" + +#: ../../library/email.compat32-message.rst:237 +msgid "" +"This is a legacy method. On the :class:`~email.emailmessage.EmailMessage` " +"class its functionality is replaced by " +":meth:`~email.message.EmailMessage.set_content`." +msgstr "" +"这是一个过时的方法。 在 :class:`~email.emailmessage.EmailMessage` 类上它的功能已被 " +":meth:`~email.message.EmailMessage.set_content` 方法所替代。" + +#: ../../library/email.compat32-message.rst:244 +msgid "" +"Set the character set of the payload to *charset*, which can either be a " +":class:`~email.charset.Charset` instance (see :mod:`email.charset`), a " +"string naming a character set, or ``None``. If it is a string, it will be " +"converted to a :class:`~email.charset.Charset` instance. If *charset* is " +"``None``, the ``charset`` parameter will be removed from the " +":mailheader:`Content-Type` header (the message will not be otherwise " +"modified). Anything else will generate a :exc:`TypeError`." +msgstr "" +"将载荷的字符集设为 *charset*,它可以是 :class:`~email.charset.Charset` 实例 (参见 " +":mod:`email.charset`)、字符集名称字符串或 ``None``。 如果是字符串,它将被转换为一个 " +":class:`~email.charset.Charset` 实例。 如果 *charset* 是 ``None``,``charset`` 形参将从" +" :mailheader:`Content-Type` 标头中被删除(消息将不会进行其他修改)。 任何其他值都将导致 :exc:`TypeError`。" + +#: ../../library/email.compat32-message.rst:252 +msgid "" +"If there is no existing :mailheader:`MIME-Version` header one will be added." +" If there is no existing :mailheader:`Content-Type` header, one will be " +"added with a value of :mimetype:`text/plain`. Whether the " +":mailheader:`Content-Type` header already exists or not, its ``charset`` " +"parameter will be set to *charset.output_charset*. If " +"*charset.input_charset* and *charset.output_charset* differ, the payload " +"will be re-encoded to the *output_charset*. If there is no existing " +":mailheader:`Content-Transfer-Encoding` header, then the payload will be " +"transfer-encoded, if needed, using the specified " +":class:`~email.charset.Charset`, and a header with the appropriate value " +"will be added. If a :mailheader:`Content-Transfer-Encoding` header already " +"exists, the payload is assumed to already be correctly encoded using that " +":mailheader:`Content-Transfer-Encoding` and is not modified." +msgstr "" +"如果 :mailheader:`MIME-Version` 标头不存在则将被添加。 如果 :mailheader:`Content-Type` " +"标头不存在,则将添加一个值为 :mimetype:`text/plain` 的该标头。 无论 :mailheader:`Content-Type` " +"标头是否已存在,其 ``charset`` 形参都将被设为 *charset.output_charset*。 如果 " +"*charset.input_charset* 和 *charset.output_charset* 不同,则载荷将被重编码为 " +"*output_charset*。 如果 :mailheader:`Content-Transfer-Encoding` " +"标头不存在,则载荷将在必要时使用指定的 :class:`~email.charset.Charset` 来转换编码,并将添加一个具有相应值的标头。 如果" +" :mailheader:`Content-Transfer-Encoding` 标头已存在,则会假定载荷已使用该 " +":mailheader:`Content-Transfer-Encoding` 进行正确编码并不会再被修改。" + +#: ../../library/email.compat32-message.rst:266 +msgid "" +"This is a legacy method. On the :class:`~email.emailmessage.EmailMessage` " +"class its functionality is replaced by the *charset* parameter of the " +":meth:`email.emailmessage.EmailMessage.set_content` method." +msgstr "" +"这是一个过时的方法。 在 :class:`~email.emailmessage.EmailMessage` 类上它的功能已被 " +":meth:`email.emailmessage.EmailMessage.set_content` 方法的 *charset* 形参所替代。" + +#: ../../library/email.compat32-message.rst:274 +msgid "" +"Return the :class:`~email.charset.Charset` instance associated with the " +"message's payload." +msgstr "返回与消息的载荷相关联的 :class:`~email.charset.Charset` 实例。" + +#: ../../library/email.compat32-message.rst:277 +msgid "" +"This is a legacy method. On the :class:`~email.emailmessage.EmailMessage` " +"class it always returns ``None``." +msgstr "" +"这是一个过时的方法。 在 :class:`~email.emailmessage.EmailMessage` 类上它将总是返回 ``None``。" + +#: ../../library/email.compat32-message.rst:282 +msgid "" +"The following methods implement a mapping-like interface for accessing the " +"message's :rfc:`2822` headers. Note that there are some semantic " +"differences between these methods and a normal mapping (i.e. dictionary) " +"interface. For example, in a dictionary there are no duplicate keys, but " +"here there may be duplicate message headers. Also, in dictionaries there is" +" no guaranteed order to the keys returned by :meth:`keys`, but in a " +":class:`Message` object, headers are always returned in the order they " +"appeared in the original message, or were added to the message later. Any " +"header deleted and then re-added are always appended to the end of the " +"header list." +msgstr "" +"以下方法实现了用于访问消息的 :rfc:`2822` 标头的类映射接口。 请注意这些方法和普通映射(例如字典)接口之间存在一些语义上的不同。 " +"举例来说,在一个字典中不能有重复的键,但消息标头则可能有重复。 并且,在字典中由 :meth:`keys` 返回的键的顺序是没有保证的,但在 " +":class:`Message` 对象中,标头总是会按它们在原始消息中的出现或后继加入顺序返回。 任何已删除再重新加入的标头总是会添加到标头列表的末尾。" + +#: ../../library/email.compat32-message.rst:292 +msgid "" +"These semantic differences are intentional and are biased toward maximal " +"convenience." +msgstr "这些语义上的差异是有意为之且其目的是为了提供最大的便利性。" + +#: ../../library/email.compat32-message.rst:295 +msgid "" +"Note that in all cases, any envelope header present in the message is not " +"included in the mapping interface." +msgstr "请注意在任何情况下,消息当中的任何封包标头都不会包含在映射接口当中。" + +#: ../../library/email.compat32-message.rst:298 +msgid "" +"In a model generated from bytes, any header values that (in contravention of" +" the RFCs) contain non-ASCII bytes will, when retrieved through this " +"interface, be represented as :class:`~email.header.Header` objects with a " +"charset of `unknown-8bit`." +msgstr "" +"在由字节串生成的模型中,任何包含非 ASCII 字节数据(违反 RFC)的标头值当通过此接口来获取时,将被表示为使用 `unknown-8bit` " +"字符集的 :class:`~email.header.Header` 对象。" + +#: ../../library/email.compat32-message.rst:306 +msgid "Return the total number of headers, including duplicates." +msgstr "返回标头的总数,包括重复项。" + +#: ../../library/email.compat32-message.rst:311 +msgid "" +"Return ``True`` if the message object has a field named *name*. Matching is " +"done case-insensitively and *name* should not include the trailing colon. " +"Used for the ``in`` operator, e.g.::" +msgstr "" +"如果消息对象中有一个名为 *name* 的字段则返回 ``True``。 匹配操作对大小写不敏感并且 *name* 不应包括末尾的冒号。 用于 " +"``in`` 运算符,例如::" + +#: ../../library/email.compat32-message.rst:321 +msgid "" +"Return the value of the named header field. *name* should not include the " +"colon field separator. If the header is missing, ``None`` is returned; a " +":exc:`KeyError` is never raised." +msgstr "" +"返回指定名称标头字段的值。 *name* 不应包括作为字段分隔符的冒号。 如果标头未找到,则返回 ``None``;:exc:`KeyError` " +"永远不会被引发。" + +#: ../../library/email.compat32-message.rst:325 +msgid "" +"Note that if the named field appears more than once in the message's " +"headers, exactly which of those field values will be returned is undefined." +" Use the :meth:`get_all` method to get the values of all the extant named " +"headers." +msgstr "" +"请注意如果指定名称的字段在消息标头中多次出现,具体将返回哪个字段值是未定义的。 请使用 :meth:`get_all` 方法来获取所有指定名称标头的值。" + +#: ../../library/email.compat32-message.rst:333 +msgid "" +"Add a header to the message with field name *name* and value *val*. The " +"field is appended to the end of the message's existing fields." +msgstr "将具有字段名 *name* 和值 *val* 的标头添加到消息中。 字段会被添加到消息的现有字段的末尾。" + +#: ../../library/email.compat32-message.rst:336 +msgid "" +"Note that this does *not* overwrite or delete any existing header with the " +"same name. If you want to ensure that the new header is the only one " +"present in the message with field name *name*, delete the field first, " +"e.g.::" +msgstr "" +"请注意,这个方法 *既不会* 覆盖 *也不会* 删除任何字段名重名的已有字段。如果你确实想保证新字段是整个信息头当中唯一拥有 *name* " +"字段名的字段,你需要先把旧字段删除。例如:" + +#: ../../library/email.compat32-message.rst:346 +msgid "" +"Delete all occurrences of the field with name *name* from the message's " +"headers. No exception is raised if the named field isn't present in the " +"headers." +msgstr "删除信息头当中字段名匹配 *name* 的所有字段。如果匹配指定名称的字段没有找到,也不会抛出任何异常。" + +#: ../../library/email.compat32-message.rst:353 +msgid "Return a list of all the message's header field names." +msgstr "以列表形式返回消息头中所有的字段名。" + +#: ../../library/email.compat32-message.rst:358 +msgid "Return a list of all the message's field values." +msgstr "以列表形式返回消息头中所有的字段值。" + +#: ../../library/email.compat32-message.rst:363 +msgid "" +"Return a list of 2-tuples containing all the message's field headers and " +"values." +msgstr "以二元元组的列表形式返回消息头中所有的字段名和字段值。" + +#: ../../library/email.compat32-message.rst:369 +msgid "" +"Return the value of the named header field. This is identical to " +":meth:`__getitem__` except that optional *failobj* is returned if the named " +"header is missing (defaults to ``None``)." +msgstr "" +"返回指定名称标头字段的值。 这与 :meth:`__getitem__` 是一样的,不同之处在于如果指定名称标头未找到则会返回可选的 *failobj*" +" (默认为 ``None``)。" + +#: ../../library/email.compat32-message.rst:373 +msgid "Here are some additional useful methods:" +msgstr "以下是一些有用的附加方法:" + +#: ../../library/email.compat32-message.rst:378 +msgid "" +"Return a list of all the values for the field named *name*. If there are no " +"such named headers in the message, *failobj* is returned (defaults to " +"``None``)." +msgstr "返回字段名为 *name* 的所有字段值的列表。如果信息内不存在匹配的字段,返回 *failobj* (其默认值为 ``None`` )。" + +#: ../../library/email.compat32-message.rst:385 +msgid "" +"Extended header setting. This method is similar to :meth:`__setitem__` " +"except that additional header parameters can be provided as keyword " +"arguments. *_name* is the header field to add and *_value* is the *primary*" +" value for the header." +msgstr "" +"高级头字段设定。这个方法与 :meth:`__setitem__` 类似,不过你可以使用关键字参数为字段提供附加参数。 *_name* 是字段名, " +"*_value* 是字段 *主* 值。" + +#: ../../library/email.compat32-message.rst:390 +msgid "" +"For each item in the keyword argument dictionary *_params*, the key is taken" +" as the parameter name, with underscores converted to dashes (since dashes " +"are illegal in Python identifiers). Normally, the parameter will be added " +"as ``key=\"value\"`` unless the value is ``None``, in which case only the " +"key will be added. If the value contains non-ASCII characters, it can be " +"specified as a three tuple in the format ``(CHARSET, LANGUAGE, VALUE)``, " +"where ``CHARSET`` is a string naming the charset to be used to encode the " +"value, ``LANGUAGE`` can usually be set to ``None`` or the empty string (see " +":rfc:`2231` for other possibilities), and ``VALUE`` is the string value " +"containing non-ASCII code points. If a three tuple is not passed and the " +"value contains non-ASCII characters, it is automatically encoded in " +":rfc:`2231` format using a ``CHARSET`` of ``utf-8`` and a ``LANGUAGE`` of " +"``None``." +msgstr "" +"对于关键字参数字典 *_params* 中的每一项,其键会被当作形参名,并执行下划线和连字符间的转换(因为连字符不是合法的 Python 标识符)。 " +"通常,形参将以 ``key=\"value\"`` 的形式添加,除非值为 ``None``,在这种情况下将只添加键。 如果值包含非 ASCII " +"字符,可将其指定为格式为 ``(CHARSET, LANGUAGE, VALUE)`` 的三元组,其中 ``CHARSET`` " +"为要用来编码值的字符集名称字符串,``LANGUAGE`` 通常可设为 ``None`` 或空字符串(请参阅 :rfc:`2231` " +"了解其他可能的取值),而 ``VALUE`` 为包含非 ASCII 码位的字符串值。 如果不是传入一个三元组且值包含非 ASCII 字符,则会自动以 " +":rfc:`2231` 格式使用 ``CHARSET`` 为 ``utf-8`` 和 ``LANGUAGE`` 为 ``None`` 对其进行编码。" + +#: ../../library/email.compat32-message.rst:404 +msgid "Here's an example::" +msgstr "以下是为示例代码::" + +#: ../../library/email.compat32-message.rst:408 +msgid "This will add a header that looks like ::" +msgstr "会添加一个形如下文的头字段:" + +#: ../../library/email.compat32-message.rst:412 +msgid "An example with non-ASCII characters::" +msgstr "使用非 ASCII 字符的示例代码::" + +#: ../../library/email.compat32-message.rst:417 +msgid "Which produces ::" +msgstr "它的输出结果为 ::" + +#: ../../library/email.compat32-message.rst:424 +msgid "" +"Replace a header. Replace the first header found in the message that " +"matches *_name*, retaining header order and field name case. If no matching" +" header was found, a :exc:`KeyError` is raised." +msgstr "" +"替换一个标头。 将替换在匹配 *_name* 的消息中找到的第一个标头,标头顺序和字段名大小写保持不变。 如果未找到匹配的标头,则会引发 " +":exc:`KeyError`。" + +#: ../../library/email.compat32-message.rst:431 +msgid "" +"Return the message's content type. The returned string is coerced to lower " +"case of the form :mimetype:`maintype/subtype`. If there was no " +":mailheader:`Content-Type` header in the message the default type as given " +"by :meth:`get_default_type` will be returned. Since according to " +":rfc:`2045`, messages always have a default type, :meth:`get_content_type` " +"will always return a value." +msgstr "" +"返回消息的内容类型。 返回的字符串会强制转换为 :mimetype:`maintype/subtype` 的全小写形式。 如果消息中没有 " +":mailheader:`Content-Type` 标头则将返回由 :meth:`get_default_type` 给出的默认类型。 因为根据 " +":rfc:`2045`,消息总是要有一个默认类型,所以 :meth:`get_content_type` 将总是返回一个值。" + +#: ../../library/email.compat32-message.rst:438 +msgid "" +":rfc:`2045` defines a message's default type to be :mimetype:`text/plain` " +"unless it appears inside a :mimetype:`multipart/digest` container, in which " +"case it would be :mimetype:`message/rfc822`. If the :mailheader:`Content-" +"Type` header has an invalid type specification, :rfc:`2045` mandates that " +"the default type be :mimetype:`text/plain`." +msgstr "" +":rfc:`2045` 将消息的默认类型定义为 :mimetype:`text/plain`,除非它是出现在 " +":mimetype:`multipart/digest` 容器内,在这种情况下其类型应为 :mimetype:`message/rfc822`。 如果 " +":mailheader:`Content-Type` 标头指定了无效的类型,:rfc:`2045` 规定其默认类型应为 " +":mimetype:`text/plain`。" + +#: ../../library/email.compat32-message.rst:447 +msgid "" +"Return the message's main content type. This is the :mimetype:`maintype` " +"part of the string returned by :meth:`get_content_type`." +msgstr "" +"返回信息的主要内容类型。准确来说,此方法返回的是 :meth:`get_content_type` 方法所返回的形如 " +":mimetype:`maintype/subtype` 的字符串当中的 :mimetype:`maintype` 部分。" + +#: ../../library/email.compat32-message.rst:453 +msgid "" +"Return the message's sub-content type. This is the :mimetype:`subtype` part" +" of the string returned by :meth:`get_content_type`." +msgstr "" +"返回信息的子内容类型。准确来说,此方法返回的是 :meth:`get_content_type` 方法所返回的形如 " +":mimetype:`maintype/subtype` 的字符串当中的 :mimetype:`subtype` 部分。" + +#: ../../library/email.compat32-message.rst:459 +msgid "" +"Return the default content type. Most messages have a default content type " +"of :mimetype:`text/plain`, except for messages that are subparts of " +":mimetype:`multipart/digest` containers. Such subparts have a default " +"content type of :mimetype:`message/rfc822`." +msgstr "" +"返回默认的内容类型。绝大多数的信息,其默认内容类型都是 :mimetype:`text/plain` 。作为 " +":mimetype:`multipart/digest` 容器内子部分的信息除外,它们的默认内容类型是 " +":mimetype:`message/rfc822` 。" + +#: ../../library/email.compat32-message.rst:467 +msgid "" +"Set the default content type. *ctype* should either be " +":mimetype:`text/plain` or :mimetype:`message/rfc822`, although this is not " +"enforced. The default content type is not stored in the " +":mailheader:`Content-Type` header." +msgstr "" +"设置默认的内容类型。 *ctype* 应当为 :mimetype:`text/plain` 或者 " +":mimetype:`message/rfc822`,尽管这并非强制。 默认的内容类型不会存储在 :mailheader:`Content-Type` " +"标头中。" + +#: ../../library/email.compat32-message.rst:475 +msgid "" +"Return the message's :mailheader:`Content-Type` parameters, as a list. The " +"elements of the returned list are 2-tuples of key/value pairs, as split on " +"the ``'='`` sign. The left hand side of the ``'='`` is the key, while the " +"right hand side is the value. If there is no ``'='`` sign in the parameter " +"the value is the empty string, otherwise the value is as described in " +":meth:`get_param` and is unquoted if optional *unquote* is ``True`` (the " +"default)." +msgstr "" +"将消息的 :mailheader:`Content-Type` 形参作为列表返回。 所返回列表的元素为以 ``'='`` 号拆分出的键/值对 2 元组。" +" ``'='`` 左侧的为键,右侧的为值。 如果形参值中没有 ``'='`` 号,否则该将值如 :meth:`get_param` 描述并且在可选 " +"*unquote* 为 ``True`` (默认值) 时会被取消转义。" + +#: ../../library/email.compat32-message.rst:483 +msgid "" +"Optional *failobj* is the object to return if there is no " +":mailheader:`Content-Type` header. Optional *header* is the header to " +"search instead of :mailheader:`Content-Type`." +msgstr "" +"可选的 *failobj* 是在没有 :mailheader:`Content-Type` 标头时要返回的对象。 可选的 *header* 是要替代 " +":mailheader:`Content-Type` 被搜索的标头。" + +#: ../../library/email.compat32-message.rst:487 +#: ../../library/email.compat32-message.rst:525 +msgid "" +"This is a legacy method. On the :class:`~email.emailmessage.EmailMessage` " +"class its functionality is replaced by the *params* property of the " +"individual header objects returned by the header access methods." +msgstr "" +"这是一个过时的方法。 在 :class:`~email.emailmessage.EmailMessage` " +"类上它的功能已被标头访问方法所返回的单独标头对象的 *params* 特征属性所替代。" + +#: ../../library/email.compat32-message.rst:495 +msgid "" +"Return the value of the :mailheader:`Content-Type` header's parameter " +"*param* as a string. If the message has no :mailheader:`Content-Type` " +"header or if there is no such parameter, then *failobj* is returned " +"(defaults to ``None``)." +msgstr "" +"将 :mailheader:`Content-Type` 标头的形参 *param* 作为字符串返回。 如果消息没有 " +":mailheader:`Content-Type` 标头或者没有这样的形参,则返回 *failobj* (默认为 ``None``)。" + +#: ../../library/email.compat32-message.rst:500 +msgid "" +"Optional *header* if given, specifies the message header to use instead of " +":mailheader:`Content-Type`." +msgstr "如果给出可选的 *header*,它会指定要替代 :mailheader:`Content-Type` 来使用的消息标头。" + +#: ../../library/email.compat32-message.rst:503 +msgid "" +"Parameter keys are always compared case insensitively. The return value can" +" either be a string, or a 3-tuple if the parameter was :rfc:`2231` encoded." +" When it's a 3-tuple, the elements of the value are of the form ``(CHARSET," +" LANGUAGE, VALUE)``. Note that both ``CHARSET`` and ``LANGUAGE`` can be " +"``None``, in which case you should consider ``VALUE`` to be encoded in the " +"``us-ascii`` charset. You can usually ignore ``LANGUAGE``." +msgstr "" +"形参的键总是以大小写不敏感的方式来比较的。 返回值可以是一个字符串,或者如果形参以 :rfc:`2231` 编码则是一个 3 元组。 当为 3 " +"元组时,值中的元素采用 ``(CHARSET, LANGUAGE, VALUE)`` 的形式。 请注意 ``CHARSET`` 和 " +"``LANGUAGE`` 都可以为 ``None``,在此情况下你应当将 ``VALUE`` 当作以 ``us-ascii`` 字符集来编码。 " +"你可以总是忽略 ``LANGUAGE``。" + +#: ../../library/email.compat32-message.rst:511 +msgid "" +"If your application doesn't care whether the parameter was encoded as in " +":rfc:`2231`, you can collapse the parameter value by calling " +":func:`email.utils.collapse_rfc2231_value`, passing in the return value from" +" :meth:`get_param`. This will return a suitably decoded Unicode string when" +" the value is a tuple, or the original string unquoted if it isn't. For " +"example::" +msgstr "" +"如果你的应用不关心形参是否以 :rfc:`2231` 来编码,你可以通过调用 " +":func:`email.utils.collapse_rfc2231_value` 来展平形参值,传入来自 :meth:`get_param` " +"的返回值。 当值为元组时这将返回一个经适当编码的 Unicode 字符串,否则返回未经转换的原字符串。 例如::" + +#: ../../library/email.compat32-message.rst:521 +msgid "" +"In any case, the parameter value (either the returned string, or the " +"``VALUE`` item in the 3-tuple) is always unquoted, unless *unquote* is set " +"to ``False``." +msgstr "" +"无论在哪种情况下,形参值(或为返回的字符串,或为 3 元组形式的 ``VALUE`` 条目)总是未经转换的,除非 *unquote* 被设为 " +"``False``。" + +#: ../../library/email.compat32-message.rst:534 +msgid "" +"Set a parameter in the :mailheader:`Content-Type` header. If the parameter " +"already exists in the header, its value will be replaced with *value*. If " +"the :mailheader:`Content-Type` header as not yet been defined for this " +"message, it will be set to :mimetype:`text/plain` and the new parameter " +"value will be appended as per :rfc:`2045`." +msgstr "" +"在 :mailheader:`Content-Type` 标头中设置一个形参。 如果该形参已存在于标头中,它的值将被替换为 *value*。 " +"如果此消息还未定义 :mailheader:`Content-Type` 标头,它将被设为 :mimetype:`text/plain` " +"且新的形参值将按 :rfc:`2045` 的要求添加。" + +#: ../../library/email.compat32-message.rst:540 +msgid "" +"Optional *header* specifies an alternative header to :mailheader:`Content-" +"Type`, and all parameters will be quoted as necessary unless optional " +"*requote* is ``False`` (the default is ``True``)." +msgstr "" +"可选的 *header* 指定一个 :mailheader:`Content-Type` 的替代标头,并且所有形参将根据需要被转换,除非可选的 " +"*requote* 为 ``False`` (默认为 ``True``)。" + +#: ../../library/email.compat32-message.rst:544 +msgid "" +"If optional *charset* is specified, the parameter will be encoded according " +"to :rfc:`2231`. Optional *language* specifies the RFC 2231 language, " +"defaulting to the empty string. Both *charset* and *language* should be " +"strings." +msgstr "" +"如果指定了可选的 *charset*,形参将按照 :rfc:`2231` 来编码。 可选的 *language* 指定了 RFC 2231 " +"的语言,默认为空字符串。 *charset* 和 *language* 都应为字符串。" + +#: ../../library/email.compat32-message.rst:549 +msgid "" +"If *replace* is ``False`` (the default) the header is moved to the end of " +"the list of headers. If *replace* is ``True``, the header will be updated " +"in place." +msgstr "" +"如果 *replace* 为 ``False`` (默认值),该头字段会被移动到所有头字段列表的末尾。如果 *replace* 为 ``True`` " +",字段会被原地更新。" + +#: ../../library/email.compat32-message.rst:553 +msgid "``replace`` keyword was added." +msgstr "添加了 ``replace`` 关键字。" + +#: ../../library/email.compat32-message.rst:558 +msgid "" +"Remove the given parameter completely from the :mailheader:`Content-Type` " +"header. The header will be re-written in place without the parameter or its" +" value. All values will be quoted as necessary unless *requote* is " +"``False`` (the default is ``True``). Optional *header* specifies an " +"alternative to :mailheader:`Content-Type`." +msgstr "" +"从 :mailheader:`Content-Type` 标头中完全移除给定的形参。 标头将被原地重写并不带该形参或它的值。 " +"所有的值将根据需要被转换,除非 *requote* 为 ``False`` (默认为 ``True``)。 可选的 *header* 指定 " +":mailheader:`Content-Type` 的一个替代项。" + +#: ../../library/email.compat32-message.rst:567 +msgid "" +"Set the main type and subtype for the :mailheader:`Content-Type` header. " +"*type* must be a string in the form :mimetype:`maintype/subtype`, otherwise " +"a :exc:`ValueError` is raised." +msgstr "" +"设置 :mailheader:`Content-Type` 标头的主类型和子类型。 *type* 必须为 " +":mimetype:`maintype/subtype` 形式的字符串,否则会引发 :exc:`ValueError`。" + +#: ../../library/email.compat32-message.rst:571 +msgid "" +"This method replaces the :mailheader:`Content-Type` header, keeping all the " +"parameters in place. If *requote* is ``False``, this leaves the existing " +"header's quoting as is, otherwise the parameters will be quoted (the " +"default)." +msgstr "" +"此方法可替换 :mailheader:`Content-Type` 标头,并保持所有形参不变。 如果 *requote* 为 " +"``False``,这会保持原有标头引用转换不变,否则形参将被引用转换(默认行为)。" + +#: ../../library/email.compat32-message.rst:576 +msgid "" +"An alternative header can be specified in the *header* argument. When the " +":mailheader:`Content-Type` header is set a :mailheader:`MIME-Version` header" +" is also added." +msgstr "" +"可以在 *header* 参数中指定一个替代标头。 当 :mailheader:`Content-Type` 标头被设置时也会添加一个 " +":mailheader:`MIME-Version` 标头。" + +#: ../../library/email.compat32-message.rst:580 +msgid "" +"This is a legacy method. On the :class:`~email.emailmessage.EmailMessage` " +"class its functionality is replaced by the ``make_`` and ``add_`` methods." +msgstr "" +"这是一个过时的方法。 在 :class:`~email.emailmessage.EmailMessage` 类上它的功能已被 ``make_`` 和 " +"``add_`` 方法所替代。" + +#: ../../library/email.compat32-message.rst:587 +msgid "" +"Return the value of the ``filename`` parameter of the :mailheader:`Content-" +"Disposition` header of the message. If the header does not have a " +"``filename`` parameter, this method falls back to looking for the ``name`` " +"parameter on the :mailheader:`Content-Type` header. If neither is found, or" +" the header is missing, then *failobj* is returned. The returned string will" +" always be unquoted as per :func:`email.utils.unquote`." +msgstr "" +"返回信息头当中 :mailheader:`Content-Disposition` 字段当中名为 ``filename`` " +"的参数值。如果该字段当中没有此参数,该方法会退而寻找 :mailheader:`Content-Type` 字段当中的 ``name`` " +"参数值。如果这个也没有找到,或者这些个字段压根就不存在,返回 *failobj* 。返回的字符串永远按照 " +":func:`email.utils.unquote` 方法去除引号。" + +#: ../../library/email.compat32-message.rst:598 +msgid "" +"Return the value of the ``boundary`` parameter of the :mailheader:`Content-" +"Type` header of the message, or *failobj* if either the header is missing, " +"or has no ``boundary`` parameter. The returned string will always be " +"unquoted as per :func:`email.utils.unquote`." +msgstr "" +"返回信息头当中 :mailheader:`Content-Type` 字段当中名为 ``boundary`` " +"的参数值。如果字段当中没有此参数,或者这些个字段压根就不存在,返回 *failobj* 。返回的字符串永远按照 " +":func:`email.utils.unquote` 方法去除引号。" + +#: ../../library/email.compat32-message.rst:606 +msgid "" +"Set the ``boundary`` parameter of the :mailheader:`Content-Type` header to " +"*boundary*. :meth:`set_boundary` will always quote *boundary* if necessary." +" A :exc:`~email.errors.HeaderParseError` is raised if the message object " +"has no :mailheader:`Content-Type` header." +msgstr "" +"将 :mailheader:`Content-Type` 头字段的 ``boundary`` 参数设置为 *boundary* 。 " +":meth:`set_boundary` 方法永远都会在必要的时候为 *boundary* 添加引号。如果信息对象中没有 " +":mailheader:`Content-Type` 头字段,抛出 :exc:`~email.errors.HeaderParseError` 异常。" + +#: ../../library/email.compat32-message.rst:611 +msgid "" +"Note that using this method is subtly different than deleting the old " +":mailheader:`Content-Type` header and adding a new one with the new boundary" +" via :meth:`add_header`, because :meth:`set_boundary` preserves the order of" +" the :mailheader:`Content-Type` header in the list of headers. However, it " +"does *not* preserve any continuation lines which may have been present in " +"the original :mailheader:`Content-Type` header." +msgstr "" +"请注意使用这个方法与删除旧的 :mailheader:`Content-Type` 标头并通过 :meth:`add_header` " +"添加一个带有新边界的新标头有细微的差异,因为 :meth:`set_boundary` 会保留 :mailheader:`Content-Type` " +"标头在原标头列表中的顺序。 但是,它 *不会* 保留原 :mailheader:`Content-Type` 标头中可能存在的任何连续的行。" + +#: ../../library/email.compat32-message.rst:621 +msgid "" +"Return the ``charset`` parameter of the :mailheader:`Content-Type` header, " +"coerced to lower case. If there is no :mailheader:`Content-Type` header, or" +" if that header has no ``charset`` parameter, *failobj* is returned." +msgstr "" +"返回 :mailheader:`Content-Type` 头字段中的 ``charset`` " +"参数,强制小写。如果字段当中没有此参数,或者这个字段压根不存在,返回 *failobj* 。" + +#: ../../library/email.compat32-message.rst:625 +msgid "" +"Note that this method differs from :meth:`get_charset` which returns the " +":class:`~email.charset.Charset` instance for the default encoding of the " +"message body." +msgstr "" +"请注意此方法不同于 :meth:`get_charset`,后者会返回 :class:`~email.charset.Charset` " +"实例作为消息体的默认编码格式。" + +#: ../../library/email.compat32-message.rst:631 +msgid "" +"Return a list containing the character set names in the message. If the " +"message is a :mimetype:`multipart`, then the list will contain one element " +"for each subpart in the payload, otherwise, it will be a list of length 1." +msgstr "" +"返回一个包含了信息内所有字符集名字的列表。 如果信息是 :mimetype:`multipart` " +"类型的,那么列表当中的每一项都对应其载荷的子部分的字符集名字。 否则,该列表是一个长度为 1 的列表。" + +#: ../../library/email.compat32-message.rst:635 +msgid "" +"Each item in the list will be a string which is the value of the ``charset``" +" parameter in the :mailheader:`Content-Type` header for the represented " +"subpart. However, if the subpart has no :mailheader:`Content-Type` header, " +"no ``charset`` parameter, or is not of the :mimetype:`text` main MIME type, " +"then that item in the returned list will be *failobj*." +msgstr "" +"列表中的每一项都是字符串,它们是其所表示的子部分的 :mailheader:`Content-Type` 标头中 ``charset`` 形参的值。 " +"但是,如果该子部分没有 :mailheader:`Content-Type` 标头,或没有 ``charset`` 形参,或者主 MIME 类型不是 " +":mimetype:`text`,则所返回列表中的对应项将为 *failobj*。" + +#: ../../library/email.compat32-message.rst:645 +msgid "" +"Return the lowercased value (without parameters) of the message's " +":mailheader:`Content-Disposition` header if it has one, or ``None``. The " +"possible values for this method are *inline*, *attachment* or ``None`` if " +"the message follows :rfc:`2183`." +msgstr "" +"如果信息的 :mailheader:`Content-Disposition` 头字段存在,返回其字段值;否则返回 ``None`` " +"。返回的值均为小写,不包含参数。如果信息遵循 :rfc:`2183` 标准,则此方法的返回值只可能在 *inline* 、 *attachment* 和" +" ``None`` 之间选择。" + +#: ../../library/email.compat32-message.rst:654 +msgid "" +"The :meth:`walk` method is an all-purpose generator which can be used to " +"iterate over all the parts and subparts of a message object tree, in depth-" +"first traversal order. You will typically use :meth:`walk` as the iterator " +"in a ``for`` loop; each iteration returns the next subpart." +msgstr "" +":meth:`walk` 方法是一个多功能生成器。它可以被用来以深度优先顺序遍历信息对象树的所有部分和子部分。一般而言, :meth:`walk` " +"会被用作 ``for`` 循环的迭代器,每一次迭代都返回其下一个子部分。" + +#: ../../library/email.compat32-message.rst:659 +msgid "" +"Here's an example that prints the MIME type of every part of a multipart " +"message structure:" +msgstr "以下例子会打印出一封具有多部分结构之信息的每个部分的 MIME 类型。" + +#: ../../library/email.compat32-message.rst:685 +msgid "" +"``walk`` iterates over the subparts of any part where :meth:`is_multipart` " +"returns ``True``, even though ``msg.get_content_maintype() == 'multipart'`` " +"may return ``False``. We can see this in our example by making use of the " +"``_structure`` debug helper function:" +msgstr "" +"``walk`` 会遍历所有 :meth:`is_multipart` 方法返回 ``True`` 的部分之子部分,哪怕 " +"``msg.get_content_maintype() == 'multipart'`` 返回的是 ``False`` 。使用 " +"``_structure`` 除错帮助函数可以帮助我们在下面这个例子当中看清楚这一点:" + +#: ../../library/email.compat32-message.rst:712 +msgid "" +"Here the ``message`` parts are not ``multiparts``, but they do contain " +"subparts. ``is_multipart()`` returns ``True`` and ``walk`` descends into the" +" subparts." +msgstr "" +"在这里, ``message`` 的部分并非 ``multiparts`` ,但是它们真的包含子部分! ``is_multipart()`` 返回 " +"``True`` , ``walk`` 也深入进这些子部分中。" + +#: ../../library/email.compat32-message.rst:717 +msgid "" +":class:`Message` objects can also optionally contain two instance " +"attributes, which can be used when generating the plain text of a MIME " +"message." +msgstr ":class:`Message` 对象也可以包含两个可选的实例属性,它们可被用于生成纯文本的 MIME 消息。" + +#: ../../library/email.compat32-message.rst:723 +msgid "" +"The format of a MIME document allows for some text between the blank line " +"following the headers, and the first multipart boundary string. Normally, " +"this text is never visible in a MIME-aware mail reader because it falls " +"outside the standard MIME armor. However, when viewing the raw text of the " +"message, or when viewing the message in a non-MIME aware reader, this text " +"can become visible." +msgstr "" +"MIME 文档格式在标头之后的空白行以及第一个多部分的分界字符串之间允许添加一些文本, 通常,此文本在支持 MIME " +"的邮件阅读器中永远不可见,因为它处在标准 MIME 保护范围之外。 但是,当查看消息的原始文本,或当在不支持 MIME " +"的阅读器中查看消息时,此文本会变得可见。" + +#: ../../library/email.compat32-message.rst:730 +msgid "" +"The *preamble* attribute contains this leading extra-armor text for MIME " +"documents. When the :class:`~email.parser.Parser` discovers some text after" +" the headers but before the first boundary string, it assigns this text to " +"the message's *preamble* attribute. When the " +":class:`~email.generator.Generator` is writing out the plain text " +"representation of a MIME message, and it finds the message has a *preamble* " +"attribute, it will write this text in the area between the headers and the " +"first boundary. See :mod:`email.parser` and :mod:`email.generator` for " +"details." +msgstr "" +"*preamble* 属性包含 MIME 文档开头部分的这些处于保护范围之外的文本。 当 :class:`~email.parser.Parser` " +"在标头之后及第一个分界字符串之前发现一些文本时,它会将这些文本赋值给消息的 *preamble* 属性。 当 " +":class:`~email.generator.Generator` 写出 MIME 消息的纯文本表示形式时,如果它发现消息具有 *preamble*" +" 属性,它将在标头及第一个分界之间区域写出这些文本。 请参阅 :mod:`email.parser` 和 :mod:`email.generator` " +"了解更多细节。" + +#: ../../library/email.compat32-message.rst:740 +msgid "" +"Note that if the message object has no preamble, the *preamble* attribute " +"will be ``None``." +msgstr "请注意如果消息对象没有前导文本,则 *preamble* 属性将为 ``None``。" + +#: ../../library/email.compat32-message.rst:746 +msgid "" +"The *epilogue* attribute acts the same way as the *preamble* attribute, " +"except that it contains text that appears between the last boundary and the " +"end of the message." +msgstr "*epilogue* 属性的作用方式与 *preamble* 属性相同,区别在于它包含出现于最后一个分界与消息结尾之间的文本。" + +#: ../../library/email.compat32-message.rst:750 +msgid "" +"You do not need to set the epilogue to the empty string in order for the " +":class:`~email.generator.Generator` to print a newline at the end of the " +"file." +msgstr "" +"你不需要将 epilogue 设为空字符串以便让 :class:`~email.generator.Generator` 在文件末尾打印一个换行符。" + +#: ../../library/email.compat32-message.rst:757 +msgid "" +"The *defects* attribute contains a list of all the problems found when " +"parsing this message. See :mod:`email.errors` for a detailed description of" +" the possible parsing defects." +msgstr "" +"*defects* 属性包含在解析消息时发现的所有问题的列表。 请参阅 :mod:`email.errors` 了解可能的解析缺陷的详细描述。" diff --git a/library/email.contentmanager.po b/library/email.contentmanager.po new file mode 100644 index 000000000..e36fe5f0f --- /dev/null +++ b/library/email.contentmanager.po @@ -0,0 +1,343 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) 2001-2022, Python Software Foundation +# This file is distributed under the same license as the Python package. +# FIRST AUTHOR , YEAR. +# +# Translators: +# Jerry Chen , 2017 +# cdarlint , 2019 +# Freesand Leo , 2021 +# +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: Python 3.9\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2022-11-04 14:34+0000\n" +"PO-Revision-Date: 2017-02-16 23:07+0000\n" +"Last-Translator: Freesand Leo , 2021\n" +"Language-Team: Chinese (China) (https://www.transifex.com/python-doc/teams/5390/zh_CN/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: zh_CN\n" +"Plural-Forms: nplurals=1; plural=0;\n" + +#: ../../library/email.contentmanager.rst:2 +msgid ":mod:`email.contentmanager`: Managing MIME Content" +msgstr ":mod:`email.contentmanager`: 管理 MIME 内容" + +#: ../../library/email.contentmanager.rst:10 +msgid "**Source code:** :source:`Lib/email/contentmanager.py`" +msgstr "**源代码:** :source:`Lib/email/contentmanager.py`" + +#: ../../library/email.contentmanager.rst:14 +msgid "[1]_" +msgstr "[1]_" + +#: ../../library/email.contentmanager.rst:19 +msgid "" +"Base class for content managers. Provides the standard registry mechanisms " +"to register converters between MIME content and other representations, as " +"well as the ``get_content`` and ``set_content`` dispatch methods." +msgstr "" +"内容管理器的基类。 提供注册 MIME 内容和其他表示形式间转换器的标准注册机制,以及 ``get_content`` 和 " +"``set_content`` 发送方法。" + +#: ../../library/email.contentmanager.rst:26 +msgid "" +"Look up a handler function based on the ``mimetype`` of *msg* (see next " +"paragraph), call it, passing through all arguments, and return the result of" +" the call. The expectation is that the handler will extract the payload " +"from *msg* and return an object that encodes information about the extracted" +" data." +msgstr "" +"基于 *msg* 的 ``mimetype`` 查找处理函数(参见下一段),调用该函数,传递所有参数,并返回调用的结果。 预期的效果是处理程序将从 " +"*msg* 中提取有效载荷并返回编码了有关被提取数据信息的对象。" + +#: ../../library/email.contentmanager.rst:32 +msgid "" +"To find the handler, look for the following keys in the registry, stopping " +"with the first one found:" +msgstr "要找到处理程序,将在注册表中查找以下键,找到第一个键即停止:" + +#: ../../library/email.contentmanager.rst:35 +msgid "the string representing the full MIME type (``maintype/subtype``)" +msgstr "表示完整 MIME 类型的字符串 (``maintype/subtype``)" + +#: ../../library/email.contentmanager.rst:36 +msgid "the string representing the ``maintype``" +msgstr "表示 ``maintype`` 的字符串" + +#: ../../library/email.contentmanager.rst:37 +msgid "the empty string" +msgstr "空字符串" + +#: ../../library/email.contentmanager.rst:39 +msgid "" +"If none of these keys produce a handler, raise a :exc:`KeyError` for the " +"full MIME type." +msgstr "如果这些键都没有产生处理程序,则为完整 MIME 类型引发一个 :exc:`KeyError`。" + +#: ../../library/email.contentmanager.rst:45 +msgid "" +"If the ``maintype`` is ``multipart``, raise a :exc:`TypeError`; otherwise " +"look up a handler function based on the type of *obj* (see next paragraph), " +"call :meth:`~email.message.EmailMessage.clear_content` on the *msg*, and " +"call the handler function, passing through all arguments. The expectation " +"is that the handler will transform and store *obj* into *msg*, possibly " +"making other changes to *msg* as well, such as adding various MIME headers " +"to encode information needed to interpret the stored data." +msgstr "" +"如果 ``maintype`` 为 ``multipart``,则引发 :exc:`TypeError`;否则基于 *obj* " +"的类型(参见下一段)查找处理函数,在 *msg* 上调用 " +":meth:`~email.message.EmailMessage.clear_content`,并调用处理函数,传递所有参数。 " +"预期的效果是处理程序将转换 *obj* 并存入 *msg*,并可能对 *msg* 进行其他更改,例如添加各种 MIME " +"标头来编码需要用来解释所存储数据的信息。" + +#: ../../library/email.contentmanager.rst:54 +msgid "" +"To find the handler, obtain the type of *obj* (``typ = type(obj)``), and " +"look for the following keys in the registry, stopping with the first one " +"found:" +msgstr "要找到处理程序,将获取 *obj* 的类型 (``typ = type(obj)``),并在注册表中查找以下键,找到第一个键即停止:" + +#: ../../library/email.contentmanager.rst:58 +msgid "the type itself (``typ``)" +msgstr "类型本身 (``typ``)" + +#: ../../library/email.contentmanager.rst:59 +msgid "" +"the type's fully qualified name (``typ.__module__ + '.' + " +"typ.__qualname__``)." +msgstr "类型的完整限定名称 (``typ.__module__ + '.' + typ.__qualname__``)。" + +#: ../../library/email.contentmanager.rst:61 +msgid "the type's qualname (``typ.__qualname__``)" +msgstr "类型的 qualname (``typ.__qualname__``)" + +#: ../../library/email.contentmanager.rst:62 +msgid "the type's name (``typ.__name__``)." +msgstr "类型的 name (``typ.__name__``)。" + +#: ../../library/email.contentmanager.rst:64 +msgid "" +"If none of the above match, repeat all of the checks above for each of the " +"types in the :term:`MRO` (``typ.__mro__``). Finally, if no other key yields" +" a handler, check for a handler for the key ``None``. If there is no " +"handler for ``None``, raise a :exc:`KeyError` for the fully qualified name " +"of the type." +msgstr "" +"如果未匹配到上述的任何一项,则在 :term:`MRO` (``typ.__mro__``) 中为每个类型重复上述的所有检测。 " +"最后,如果没有其他键产生处理程序,则为 ``None`` 键检测处理程序。 如果也没有 ``None`` 的处理程序,则为该类型的完整限定名称引发 " +":exc:`KeyError`。" + +#: ../../library/email.contentmanager.rst:70 +msgid "" +"Also add a :mailheader:`MIME-Version` header if one is not present (see also" +" :class:`.MIMEPart`)." +msgstr "" +"并会添加一个 :mailheader:`MIME-Version` 标头,如果没有的话 (另请参见 :class:`.MIMEPart`)。" + +#: ../../library/email.contentmanager.rst:76 +msgid "" +"Record the function *handler* as the handler for *key*. For the possible " +"values of *key*, see :meth:`get_content`." +msgstr "将 *handler* 函数记录为 *key* 的处理程序。 对于可能的 *key* 键,请参阅 :meth:`get_content`。" + +#: ../../library/email.contentmanager.rst:82 +msgid "" +"Record *handler* as the function to call when an object of a type matching " +"*typekey* is passed to :meth:`set_content`. For the possible values of " +"*typekey*, see :meth:`set_content`." +msgstr "" +"将 *handler* 记录为当一个匹配 *typekey* 的类型对象被传递给 :meth:`set_content` 时所要调用的函数。 对于可能的" +" *typekey* 值,请参阅 :meth:`set_content`。" + +#: ../../library/email.contentmanager.rst:88 +msgid "Content Manager Instances" +msgstr "内容管理器实例" + +#: ../../library/email.contentmanager.rst:90 +msgid "" +"Currently the email package provides only one concrete content manager, " +":data:`raw_data_manager`, although more may be added in the future. " +":data:`raw_data_manager` is the " +":attr:`~email.policy.EmailPolicy.content_manager` provided by " +":attr:`~email.policy.EmailPolicy` and its derivatives." +msgstr "" +"目前 email 包只提供了一个实体内容管理器 :data:`raw_data_manager`,不过在未来可能会添加更多。 " +":data:`raw_data_manager` 是由 :attr:`~email.policy.EmailPolicy` 及其衍生工具所提供的 " +":attr:`~email.policy.EmailPolicy.content_manager`。" + +#: ../../library/email.contentmanager.rst:99 +msgid "" +"This content manager provides only a minimum interface beyond that provided " +"by :class:`~email.message.Message` itself: it deals only with text, raw " +"byte strings, and :class:`~email.message.Message` objects. Nevertheless, it" +" provides significant advantages compared to the base API: ``get_content`` " +"on a text part will return a unicode string without the application needing " +"to manually decode it, ``set_content`` provides a rich set of options for " +"controlling the headers added to a part and controlling the content transfer" +" encoding, and it enables the use of the various ``add_`` methods, thereby " +"simplifying the creation of multipart messages." +msgstr "" +"这个内容管理器仅提供了超出 :class:`~email.message.Message` 本身提供内容的最小接口:它只处理文本、原始字节串和 " +":class:`~email.message.Message` 对象。 不过相比基础 API,它具有显著的优势:在文本部分上执行 " +"``get_content`` 将返回一个 unicode 字符串而无需由应用程序来手动解码,``set_content`` " +"为控制添加到一个部分的标头和控制内容传输编码格式提供了丰富的选项集合,并且它还启用了多种 ``add_`` 方法,从而简化了多部分消息的创建过程。" + +#: ../../library/email.contentmanager.rst:111 +msgid "" +"Return the payload of the part as either a string (for ``text`` parts), an " +":class:`~email.message.EmailMessage` object (for ``message/rfc822`` parts), " +"or a ``bytes`` object (for all other non-multipart types). Raise a " +":exc:`KeyError` if called on a ``multipart``. If the part is a ``text`` " +"part and *errors* is specified, use it as the error handler when decoding " +"the payload to unicode. The default error handler is ``replace``." +msgstr "" +"将指定部分的有效载荷作为字符串(对于 ``text`` 部分), :class:`~email.message.EmailMessage` 对象(对于 " +"``message/rfc822`` 部分)或 ``bytes`` 对象(对于所有其他非多部分类型)返回。 如果是在 ``multipart`` " +"上调用则会引发 :exc:`KeyError`。 如果指定部分是一个 ``text`` 部分并且指明了 *errors*,则会在将载荷解码为 " +"unicode 时将其用作错误处理程序。 默认的错误处理程序是 ``replace``。" + +#: ../../library/email.contentmanager.rst:130 +msgid "Add headers and payload to *msg*:" +msgstr "向 *msg* 添加标头和有效载荷:" + +#: ../../library/email.contentmanager.rst:132 +msgid "" +"Add a :mailheader:`Content-Type` header with a ``maintype/subtype`` value." +msgstr "添加一个带有 ``maintype/subtype`` 值的 :mailheader:`Content-Type` 标头。" + +#: ../../library/email.contentmanager.rst:135 +msgid "" +"For ``str``, set the MIME ``maintype`` to ``text``, and set the subtype to " +"*subtype* if it is specified, or ``plain`` if it is not." +msgstr "" +"对于 ``str``,将 MIME ``maintype`` 设为 ``text``,如果指定了子类型 *subtype* 则设为指定值,否则设为 " +"``plain``。" + +#: ../../library/email.contentmanager.rst:137 +msgid "" +"For ``bytes``, use the specified *maintype* and *subtype*, or raise a " +":exc:`TypeError` if they are not specified." +msgstr "" +"对于 ``bytes``,将使用指定的 *maintype* 和 *subtype*,如果未指定则会引发 :exc:`TypeError`。" + +#: ../../library/email.contentmanager.rst:139 +msgid "" +"For :class:`~email.message.EmailMessage` objects, set the maintype to " +"``message``, and set the subtype to *subtype* if it is specified or " +"``rfc822`` if it is not. If *subtype* is ``partial``, raise an error " +"(``bytes`` objects must be used to construct ``message/partial`` parts)." +msgstr "" +"对于 :class:`~email.message.EmailMessage` 对象,将 maintype 设为 ``message``,并将指定的 " +"subtype 设为 *subtype*,如果未指定则设为 ``rfc822``。 如果 *subtype* 为 " +"``partial``,则引发一个错误(必须使用 ``bytes`` 对象来构造 ``message/partial`` 部分)。" + +#: ../../library/email.contentmanager.rst:145 +msgid "" +"If *charset* is provided (which is valid only for ``str``), encode the " +"string to bytes using the specified character set. The default is " +"``utf-8``. If the specified *charset* is a known alias for a standard MIME " +"charset name, use the standard charset instead." +msgstr "" +"如果提供了 *charset* (这只对 ``str`` 适用),则使用指定的字符集将字符串编码为字节串。 默认值为 ``utf-8``。 如果指定的 " +"*charset* 是某个标准 MIME 字符集名称的已知别名,则会改用该标准字符集。" + +#: ../../library/email.contentmanager.rst:150 +msgid "" +"If *cte* is set, encode the payload using the specified content transfer " +"encoding, and set the :mailheader:`Content-Transfer-Encoding` header to that" +" value. Possible values for *cte* are ``quoted-printable``, ``base64``, " +"``7bit``, ``8bit``, and ``binary``. If the input cannot be encoded in the " +"specified encoding (for example, specifying a *cte* of ``7bit`` for an input" +" that contains non-ASCII values), raise a :exc:`ValueError`." +msgstr "" +"如果设置了 *cte*,则使用指定的内容传输编码格式对有效载荷进行编码,并将 :mailheader:`Content-Transfer-" +"Encoding` 标头设为该值。 可能的 *cte* 值有 ``quoted-printable``, ``base64``, ``7bit``, " +"``8bit`` 和 ``binary``。 如果输入无法以指定的编码格式被编码 (例如,对于包含非 ASCII 值的输入指定 *cte* 值为 " +"``7bit``),则会引发 :exc:`ValueError`。" + +#: ../../library/email.contentmanager.rst:158 +msgid "" +"For ``str`` objects, if *cte* is not set use heuristics to determine the " +"most compact encoding." +msgstr "对于 ``str`` 对象,如果 *cte* 未设置则会使用启发方式来确定最紧凑的编码格式。" + +#: ../../library/email.contentmanager.rst:160 +msgid "" +"For :class:`~email.message.EmailMessage`, per :rfc:`2046`, raise an error if" +" a *cte* of ``quoted-printable`` or ``base64`` is requested for *subtype* " +"``rfc822``, and for any *cte* other than ``7bit`` for *subtype* ``external-" +"body``. For ``message/rfc822``, use ``8bit`` if *cte* is not specified. " +"For all other values of *subtype*, use ``7bit``." +msgstr "" +"对于 :class:`~email.message.EmailMessage`,按照 :rfc:`2046`,如果为 *subtype* " +"``rfc822`` 请求的 *cte* 为 ``quoted-printable`` 或 ``base64`` ,而为 ``7bit`` 以外的任何 " +"*cte* 为 *subtype* ``external-body`` 则会引发一个错误。 对于 ``message/rfc822``,如果 *cte*" +" 未指定则会使用 ``8bit``。 对于所有其他 *subtype* 值,都会使用 ``7bit``。" + +#: ../../library/email.contentmanager.rst:167 +msgid "" +"A *cte* of ``binary`` does not actually work correctly yet. The " +"``EmailMessage`` object as modified by ``set_content`` is correct, but " +":class:`~email.generator.BytesGenerator` does not serialize it correctly." +msgstr "" +"*cte* 值为 ``binary`` 实际上还不能正确工作。 由 ``set_content`` 所修改的 ``EmailMessage`` " +"对象是正确的,但 :class:`~email.generator.BytesGenerator` 不会正确地将其序列化。" + +#: ../../library/email.contentmanager.rst:172 +msgid "" +"If *disposition* is set, use it as the value of the :mailheader:`Content-" +"Disposition` header. If not specified, and *filename* is specified, add the" +" header with the value ``attachment``. If *disposition* is not specified and" +" *filename* is also not specified, do not add the header. The only valid " +"values for *disposition* are ``attachment`` and ``inline``." +msgstr "" +"如果设置了 *disposition*,它会被用作 :mailheader:`Content-Disposition` 标头的值。 " +"如果未设置,并且指定了 *filename*,则添加值为 ``attachment`` 的标头。 如果未设置 *disposition* 并且也未指定 " +"*filename*,则不添加标头。 *disposition* 的有效值仅有 ``attachment`` 和 ``inline``。" + +#: ../../library/email.contentmanager.rst:179 +msgid "" +"If *filename* is specified, use it as the value of the ``filename`` " +"parameter of the :mailheader:`Content-Disposition` header." +msgstr "" +"如果设置了 *filename*,则将其用作 :mailheader:`Content-Disposition` 标头的 ``filename`` " +"参数的值。" + +#: ../../library/email.contentmanager.rst:182 +msgid "" +"If *cid* is specified, add a :mailheader:`Content-ID` header with *cid* as " +"its value." +msgstr "如果设置了 *cid*,则添加一个 :mailheader:`Content-ID` 标头并将其值设为 *cid*。" + +#: ../../library/email.contentmanager.rst:185 +msgid "" +"If *params* is specified, iterate its ``items`` method and use the resulting" +" ``(key, value)`` pairs to set additional parameters on the " +":mailheader:`Content-Type` header." +msgstr "" +"如果设置了 *params*,则迭代其 ``items`` 方法并使用输出的 ``(key, value)`` 结果对在 " +":mailheader:`Content-Type` 标头上设置附加参数。" + +#: ../../library/email.contentmanager.rst:189 +msgid "" +"If *headers* is specified and is a list of strings of the form ``headername:" +" headervalue`` or a list of ``header`` objects (distinguished from strings " +"by having a ``name`` attribute), add the headers to *msg*." +msgstr "" +"如果设置了 *headers* 并且为 ``headername: headervalue`` 形式的字符串的列表或为 ``header`` " +"对象的列表(通过一个 ``name`` 属性与字符串相区分),则将标头添加到 *msg*。" + +#: ../../library/email.contentmanager.rst:196 +msgid "Footnotes" +msgstr "脚注" + +#: ../../library/email.contentmanager.rst:197 +msgid "" +"Originally added in 3.4 as a :term:`provisional module `" +msgstr "最初在 3.4 中作为 :term:`暂定模块 ` 添加" diff --git a/library/email.encoders.po b/library/email.encoders.po new file mode 100644 index 000000000..2096ead29 --- /dev/null +++ b/library/email.encoders.po @@ -0,0 +1,145 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) 2001-2022, Python Software Foundation +# This file is distributed under the same license as the Python package. +# FIRST AUTHOR , YEAR. +# +# Translators: +# Jerry Chen , 2017 +# Yiyi Python , 2017 +# pop corner , 2019 +# Freesand Leo , 2020 +# +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: Python 3.9\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2022-11-04 14:34+0000\n" +"PO-Revision-Date: 2017-02-16 23:08+0000\n" +"Last-Translator: Freesand Leo , 2020\n" +"Language-Team: Chinese (China) (https://www.transifex.com/python-doc/teams/5390/zh_CN/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: zh_CN\n" +"Plural-Forms: nplurals=1; plural=0;\n" + +#: ../../library/email.encoders.rst:2 +msgid ":mod:`email.encoders`: Encoders" +msgstr ":mod:`email.encoders`: 编码器" + +#: ../../library/email.encoders.rst:7 +msgid "**Source code:** :source:`Lib/email/encoders.py`" +msgstr "**源代码:** :source:`Lib/email/encoders.py`" + +#: ../../library/email.encoders.rst:11 +msgid "" +"This module is part of the legacy (``Compat32``) email API. In the new API " +"the functionality is provided by the *cte* parameter of the " +":meth:`~email.message.EmailMessage.set_content` method." +msgstr "" +"此模块是旧版 (``Compat32``) email API 的组成部分。 在新版 API 中将由 " +":meth:`~email.message.EmailMessage.set_content` 方法的 *cte* 形参提供该功能。" + +#: ../../library/email.encoders.rst:15 +msgid "" +"This module is deprecated in Python 3. The functions provided here should " +"not be called explicitly since the :class:`~email.mime.text.MIMEText` class " +"sets the content type and CTE header using the *_subtype* and *_charset* " +"values passed during the instantiation of that class." +msgstr "" +"此模块在 Python 3 中已弃用。 这里提供的函数不应被显式地调用,因为 :class:`~email.mime.text.MIMEText` " +"类会在类实例化期间使用 *_subtype* 和 *_charset* 值来设置内容类型和 CTE 标头。" + +#: ../../library/email.encoders.rst:20 +msgid "" +"The remaining text in this section is the original documentation of the " +"module." +msgstr "本段落中的剩余文本是该模块的原始文档。" + +#: ../../library/email.encoders.rst:22 +msgid "" +"When creating :class:`~email.message.Message` objects from scratch, you " +"often need to encode the payloads for transport through compliant mail " +"servers. This is especially true for :mimetype:`image/\\*` and " +":mimetype:`text/\\*` type messages containing binary data." +msgstr "" +"当创建全新的 :class:`~email.message.Message` 对象时,你经常需要对载荷编码以便通过兼容的邮件服务器进行传输。 " +"对于包含二进制数据的 :mimetype:`image/\\*` 和 :mimetype:`text/\\*` 类型的消息来说尤其如此。" + +#: ../../library/email.encoders.rst:27 +msgid "" +"The :mod:`email` package provides some convenient encoders in its " +":mod:`encoders` module. These encoders are actually used by the " +":class:`~email.mime.audio.MIMEAudio` and " +":class:`~email.mime.image.MIMEImage` class constructors to provide default " +"encodings. All encoder functions take exactly one argument, the message " +"object to encode. They usually extract the payload, encode it, and reset " +"the payload to this newly encoded value. They should also set the " +":mailheader:`Content-Transfer-Encoding` header as appropriate." +msgstr "" +":mod:`email` 包在其 :mod:`encoders` 模块中提供了一些方便的编码器。 这些编码器实际上由 " +":class:`~email.mime.audio.MIMEAudio` 和 :class:`~email.mime.image.MIMEImage` " +"类构造器所使用以提供默认编码格式。 所有编码器函数都只接受一个参数,即要编码的消息对象。 " +"它们通常会提取有效载荷,对其进行编码,并将载荷重置为这种新编码的值。 它们还应当相应地设置 :mailheader:`Content-" +"Transfer-Encoding` 标头。" + +#: ../../library/email.encoders.rst:35 +msgid "" +"Note that these functions are not meaningful for a multipart message. They " +"must be applied to individual subparts instead, and will raise a " +":exc:`TypeError` if passed a message whose type is multipart." +msgstr "" +"请注意,这些函数对于多段消息没有意义。 它们必须应用到各个单独的段上面,而不是整体。如果直接传递一个多段类型的消息,会产生一个 " +":exc:`TypeError` 错误。" + +#: ../../library/email.encoders.rst:39 +msgid "Here are the encoding functions provided:" +msgstr "下面是提供的编码函数:" + +#: ../../library/email.encoders.rst:44 +msgid "" +"Encodes the payload into quoted-printable form and sets the " +":mailheader:`Content-Transfer-Encoding` header to ``quoted-printable`` [#]_." +" This is a good encoding to use when most of your payload is normal " +"printable data, but contains a few unprintable characters." +msgstr "" +"将有效数据编码为经转换的可打印形式,并将 :mailheader:`Content-Transfer-Encoding` 标头设置为 ``quoted-" +"printable`` [#]_。 当大多数实际的数据是普通的可打印数据但包含少量不可打印的字符时,这是一个很好的编码。" + +#: ../../library/email.encoders.rst:52 +msgid "" +"Encodes the payload into base64 form and sets the :mailheader:`Content-" +"Transfer-Encoding` header to ``base64``. This is a good encoding to use " +"when most of your payload is unprintable data since it is a more compact " +"form than quoted-printable. The drawback of base64 encoding is that it " +"renders the text non-human readable." +msgstr "" +"将有效载荷编码为 base64 形式,并将 :mailheader:`Content-Transfer-Encoding` 标头设为 " +"``base64``。 当你的载荷主要包含不可打印数据时这是一种很好用的编码格式,因为它比 quoted-printable 更紧凑。 base64 " +"编码格式的缺点是它会使文本变成人类不可读的形式。" + +#: ../../library/email.encoders.rst:61 +msgid "" +"This doesn't actually modify the message's payload, but it does set the " +":mailheader:`Content-Transfer-Encoding` header to either ``7bit`` or " +"``8bit`` as appropriate, based on the payload data." +msgstr "" +"此函数并不实际改变消息的有效载荷,但它会基于载荷数据将 :mailheader:`Content-Transfer-Encoding` 标头相应地设为 " +"``7bit`` 或 ``8bit``。" + +#: ../../library/email.encoders.rst:68 +msgid "" +"This does nothing; it doesn't even set the :mailheader:`Content-Transfer-" +"Encoding` header." +msgstr "此函数什么都不会做;它甚至不会设置 :mailheader:`Content-Transfer-Encoding` 标头。" + +#: ../../library/email.encoders.rst:72 +msgid "Footnotes" +msgstr "脚注" + +#: ../../library/email.encoders.rst:73 +msgid "" +"Note that encoding with :meth:`encode_quopri` also encodes all tabs and " +"space characters in the data." +msgstr "请注意使用 :meth:`encode_quopri` 编码格式还会对数据中的所有制表符和空格符进行编码。" diff --git a/library/email.errors.po b/library/email.errors.po new file mode 100644 index 000000000..e64e87bd6 --- /dev/null +++ b/library/email.errors.po @@ -0,0 +1,219 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) 2001-2024, Python Software Foundation +# This file is distributed under the same license as the Python package. +# FIRST AUTHOR , YEAR. +# +# Translators: +# jacky , 2019 +# Shengjing Zhu , 2019 +# Freesand Leo , 2024 +# +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: Python 3.9\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2024-09-06 19:48+0000\n" +"PO-Revision-Date: 2017-02-16 23:08+0000\n" +"Last-Translator: Freesand Leo , 2024\n" +"Language-Team: Chinese (China) (https://app.transifex.com/python-doc/teams/5390/zh_CN/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: zh_CN\n" +"Plural-Forms: nplurals=1; plural=0;\n" + +#: ../../library/email.errors.rst:2 +msgid ":mod:`email.errors`: Exception and Defect classes" +msgstr ":mod:`email.errors`: 异常和缺陷类" + +#: ../../library/email.errors.rst:7 +msgid "**Source code:** :source:`Lib/email/errors.py`" +msgstr "**源代码:** :source:`Lib/email/errors.py`" + +#: ../../library/email.errors.rst:11 +msgid "" +"The following exception classes are defined in the :mod:`email.errors` " +"module:" +msgstr "以下异常类在 :mod:`email.errors` 模块中定义:" + +#: ../../library/email.errors.rst:16 +msgid "" +"This is the base class for all exceptions that the :mod:`email` package can " +"raise. It is derived from the standard :exc:`Exception` class and defines " +"no additional methods." +msgstr "" +"这是 :mod:`email` 包可以引发的所有异常的基类。 它源自标准异常 :exc:`Exception` 类,这个类没有定义其他方法。" + +#: ../../library/email.errors.rst:23 +msgid "" +"This is the base class for exceptions raised by the " +":class:`~email.parser.Parser` class. It is derived from " +":exc:`MessageError`. This class is also used internally by the parser used " +"by :mod:`~email.headerregistry`." +msgstr "" +"这是由 :class:`~email.parser.Parser` 类引发的异常的基类。它派生自 :exc:`MessageError`。 " +":mod:`~email.headerregistry` 使用的解析器也在内部使用这个类。" + +#: ../../library/email.errors.rst:31 +msgid "" +"Raised under some error conditions when parsing the :rfc:`5322` headers of a" +" message, this class is derived from :exc:`MessageParseError`. The " +":meth:`~email.message.EmailMessage.set_boundary` method will raise this " +"error if the content type is unknown when the method is called. " +":class:`~email.header.Header` may raise this error for certain base64 " +"decoding errors, and when an attempt is made to create a header that appears" +" to contain an embedded header (that is, there is what is supposed to be a " +"continuation line that has no leading whitespace and looks like a header)." +msgstr "" +"在解析消息的 :rfc:`5322` 标头时,某些错误条件下会触发,此类派生自 :exc:`MessageParseError`。 " +"如果在调用方法时内容类型未知,则 :meth:`~email.message.EmailMessage.set_boundary` 方法将引发此错误。 " +"当尝试创建一个看起来包含嵌入式标头的标头时 :class:`~email.header.Header` 可能会针对某些 base64 " +"解码错误引发此错误(也就是说,应该是一个 没有前导空格并且看起来像标题的延续行)。" + +#: ../../library/email.errors.rst:43 +msgid "Deprecated and no longer used." +msgstr "已弃用和不再使用的。" + +#: ../../library/email.errors.rst:48 +msgid "" +"Raised when a payload is added to a :class:`~email.message.Message` object " +"using :meth:`add_payload`, but the payload is already a scalar and the " +"message's :mailheader:`Content-Type` main type is not either " +":mimetype:`multipart` or missing. :exc:`MultipartConversionError` multiply " +"inherits from :exc:`MessageError` and the built-in :exc:`TypeError`." +msgstr "" +"当使用 :meth:`add_payload` 将有效负载添加到 :class:`~email.message.Message` " +"对象时,有效负载已经是一个标量,而消息的 :mailheader:`Content-Type` 主类型不是 :mimetype:`multipart` " +"或者缺少时触发该异常。 :exc:`MultipartConversionError` 多重继承自 :exc:`MessageError` 和内置的 " +":exc:`TypeError`。" + +#: ../../library/email.errors.rst:54 +msgid "" +"Since :meth:`Message.add_payload` is deprecated, this exception is rarely " +"raised in practice. However the exception may also be raised if the " +":meth:`~email.message.Message.attach` method is called on an instance of a " +"class derived from :class:`~email.mime.nonmultipart.MIMENonMultipart` (e.g. " +":class:`~email.mime.image.MIMEImage`)." +msgstr "" +"由于 :meth:`Message.add_payload` 已被弃用,此异常实际上极少会被引发。 但是如果在派生自 " +":class:`~email.mime.nonmultipart.MIMENonMultipart` 的类 (例如 " +":class:`~email.mime.image.MIMEImage`) 的实例上调用 " +":meth:`~email.message.Message.attach` 方法也可以引发此异常。" + +#: ../../library/email.errors.rst:64 +msgid "" +"Raised when an error occurs when the :mod:`~email.generator` outputs " +"headers." +msgstr "当 :mod:`~email.generator` 输出标头发生错误时将被引发。" + +#: ../../library/email.errors.rst:68 +msgid "" +"Here is the list of the defects that the :class:`~email.parser.FeedParser` " +"can find while parsing messages. Note that the defects are added to the " +"message where the problem was found, so for example, if a message nested " +"inside a :mimetype:`multipart/alternative` had a malformed header, that " +"nested message object would have a defect, but the containing messages would" +" not." +msgstr "" +"以下是 :class:`~email.parser.FeedParser` 在解析消息时可发现的缺陷列表。 " +"请注意这些缺陷会在问题被发现时加入到消息中,因此举例来说,如果某条嵌套在 :mimetype:`multipart/alternative` " +"中的消息具有错误的标头,该嵌套消息对象就会有一条缺陷,但外层消息对象则没有。" + +#: ../../library/email.errors.rst:74 +msgid "" +"All defect classes are subclassed from :class:`email.errors.MessageDefect`." +msgstr "所有缺陷类都是 :class:`email.errors.MessageDefect` 的子类。" + +#: ../../library/email.errors.rst:76 +msgid "" +":class:`NoBoundaryInMultipartDefect` -- A message claimed to be a multipart," +" but had no :mimetype:`boundary` parameter." +msgstr "" +":class:`NoBoundaryInMultipartDefect` -- 一条消息宣称有多个部分,但却没有 " +":mimetype:`boundary` 形参。" + +#: ../../library/email.errors.rst:79 +msgid "" +":class:`StartBoundaryNotFoundDefect` -- The start boundary claimed in the " +":mailheader:`Content-Type` header was never found." +msgstr "" +":class:`StartBoundaryNotFoundDefect` -- 在 :mailheader:`Content-Type` " +"标头中宣称的开始边界无法被找到。" + +#: ../../library/email.errors.rst:82 +msgid "" +":class:`CloseBoundaryNotFoundDefect` -- A start boundary was found, but no " +"corresponding close boundary was ever found." +msgstr ":class:`CloseBoundaryNotFoundDefect` -- 找到了开始边界,但相应的结束边界无法被找到。" + +#: ../../library/email.errors.rst:87 +msgid "" +":class:`FirstHeaderLineIsContinuationDefect` -- The message had a " +"continuation line as its first header line." +msgstr ":class:`FirstHeaderLineIsContinuationDefect` -- 消息以一个继续行作为其第一个标头行。" + +#: ../../library/email.errors.rst:90 +msgid "" +":class:`MisplacedEnvelopeHeaderDefect` - A \"Unix From\" header was found in" +" the middle of a header block." +msgstr ":class:`MisplacedEnvelopeHeaderDefect` - 在标头块中间发现了一个 \"Unix From\" 标头。" + +#: ../../library/email.errors.rst:93 +msgid "" +":class:`MissingHeaderBodySeparatorDefect` - A line was found while parsing " +"headers that had no leading white space but contained no ':'. Parsing " +"continues assuming that the line represents the first line of the body." +msgstr "" +":class:`MissingHeaderBodySeparatorDefect` - 在解析没有前缀空格但又不包含 ':' 的标头期间找到一行内容。 " +"解析将假定该行表示消息体的第一行以继续执行。" + +#: ../../library/email.errors.rst:99 +msgid "" +":class:`MalformedHeaderDefect` -- A header was found that was missing a " +"colon, or was otherwise malformed." +msgstr ":class:`MalformedHeaderDefect` -- 找到一个缺失了冒号或格式错误的标头。" + +#: ../../library/email.errors.rst:102 +msgid "This defect has not been used for several Python versions." +msgstr "此缺陷在近几个 Python 版本中已不再使用。" + +#: ../../library/email.errors.rst:105 +msgid "" +":class:`MultipartInvariantViolationDefect` -- A message claimed to be a " +":mimetype:`multipart`, but no subparts were found. Note that when a message" +" has this defect, its :meth:`~email.message.Message.is_multipart` method may" +" return ``False`` even though its content type claims to be " +":mimetype:`multipart`." +msgstr "" +":class:`MultipartInvariantViolationDefect` -- 一条消息宣称为 " +":mimetype:`multipart`,但无法找到任何子部分。 请注意当一条消息有此缺陷时,其 " +":meth:`~email.message.Message.is_multipart` 方法可能返回 ``False``,即使其内容类型宣称为 " +":mimetype:`multipart`。" + +#: ../../library/email.errors.rst:110 +msgid "" +":class:`InvalidBase64PaddingDefect` -- When decoding a block of base64 " +"encoded bytes, the padding was not correct. Enough padding is added to " +"perform the decode, but the resulting decoded bytes may be invalid." +msgstr "" +":class:`InvalidBase64PaddingDefect` -- 当解码一个 base64 编码的字节分块时,填充的数据不正确。 " +"虽然添加了足够的填充数据以执行解码,但作为结果的已解码字节串可能无效。" + +#: ../../library/email.errors.rst:114 +msgid "" +":class:`InvalidBase64CharactersDefect` -- When decoding a block of base64 " +"encoded bytes, characters outside the base64 alphabet were encountered. The " +"characters are ignored, but the resulting decoded bytes may be invalid." +msgstr "" +":class:`InvalidBase64CharactersDefect` -- 当解码一个 base64 编码的字节分块时,遇到了 base64 " +"字符表以外的字符。 这些字符会被忽略,但作为结果的已解码字节串可能无效。" + +#: ../../library/email.errors.rst:118 +msgid "" +":class:`InvalidBase64LengthDefect` -- When decoding a block of base64 " +"encoded bytes, the number of non-padding base64 characters was invalid (1 " +"more than a multiple of 4). The encoded block was kept as-is." +msgstr "" +":class:`InvalidBase64LengthDefect` -- 当解码一个 base64 编码的字节分块时,非填充 base64 " +"字符的数量无效(比 4 的倍数多 1)。 已编码分块会保持原样。" diff --git a/library/email.examples.po b/library/email.examples.po new file mode 100644 index 000000000..f038352db --- /dev/null +++ b/library/email.examples.po @@ -0,0 +1,93 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) 2001-2022, Python Software Foundation +# This file is distributed under the same license as the Python package. +# FIRST AUTHOR , YEAR. +# +# Translators: +# Jerry Chen , 2017 +# Alpha Du , 2019 +# +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: Python 3.9\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2022-11-04 14:34+0000\n" +"PO-Revision-Date: 2017-02-16 23:08+0000\n" +"Last-Translator: Alpha Du , 2019\n" +"Language-Team: Chinese (China) (https://www.transifex.com/python-doc/teams/5390/zh_CN/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: zh_CN\n" +"Plural-Forms: nplurals=1; plural=0;\n" + +#: ../../library/email.examples.rst:4 +msgid ":mod:`email`: Examples" +msgstr ":mod:`email`: 示例" + +#: ../../library/email.examples.rst:6 +msgid "" +"Here are a few examples of how to use the :mod:`email` package to read, " +"write, and send simple email messages, as well as more complex MIME " +"messages." +msgstr "以下是一些如何使用 :mod:`email` 包来读取、写入和发送简单电子邮件以及更复杂的MIME邮件的示例。" + +#: ../../library/email.examples.rst:9 +msgid "" +"First, let's see how to create and send a simple text message (both the text" +" content and the addresses may contain unicode characters):" +msgstr "首先,让我们看看如何创建和发送简单的文本消息(文本内容和地址都可能包含unicode字符):" + +#: ../../library/email.examples.rst:15 +msgid "" +"Parsing :rfc:`822` headers can easily be done by the using the classes from " +"the :mod:`~email.parser` module:" +msgstr "解析 :rfc:`822` 标题可以通过使用 :mod:`~email.parser` 模块中的类来轻松完成:" + +#: ../../library/email.examples.rst:21 +msgid "" +"Here's an example of how to send a MIME message containing a bunch of family" +" pictures that may be residing in a directory:" +msgstr "以下是如何发送包含可能在目录中的一系列家庭照片的MIME消息示例:" + +#: ../../library/email.examples.rst:27 +msgid "" +"Here's an example of how to send the entire contents of a directory as an " +"email message: [1]_" +msgstr "以下是如何将目录的全部内容作为电子邮件消息发送的示例: [1]_" + +#: ../../library/email.examples.rst:33 +msgid "" +"Here's an example of how to unpack a MIME message like the one above, into a" +" directory of files:" +msgstr "以下是如何将上述MIME消息解压缩到文件目录中的示例:" + +#: ../../library/email.examples.rst:39 +msgid "" +"Here's an example of how to create an HTML message with an alternative plain" +" text version. To make things a bit more interesting, we include a related " +"image in the html part, and we save a copy of what we are going to send to " +"disk, as well as sending it." +msgstr "" +"以下是如何使用备用纯文本版本创建 HTML 消息的示例。 为了让事情变得更有趣,我们在 html " +"部分中包含了一个相关的图像,我们保存了一份我们要发送的内容到硬盘中,然后发送它。" + +#: ../../library/email.examples.rst:47 +msgid "" +"If we were sent the message from the last example, here is one way we could " +"process it:" +msgstr "如果我们发送最后一个示例中的消息,这是我们可以处理它的一种方法:" + +#: ../../library/email.examples.rst:52 +msgid "Up to the prompt, the output from the above is:" +msgstr "直到输出提示,上面的输出是:" + +#: ../../library/email.examples.rst:66 +msgid "Footnotes" +msgstr "脚注" + +#: ../../library/email.examples.rst:67 +msgid "" +"Thanks to Matthew Dixon Cowles for the original inspiration and examples." +msgstr "感谢 Matthew Dixon Cowles 提供最初的灵感和示例。" diff --git a/library/email.generator.po b/library/email.generator.po new file mode 100644 index 000000000..2121fd83d --- /dev/null +++ b/library/email.generator.po @@ -0,0 +1,413 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) 2001-2024, Python Software Foundation +# This file is distributed under the same license as the Python package. +# FIRST AUTHOR , YEAR. +# +# Translators: +# Freesand Leo , 2021 +# Rafael Fontenelle , 2024 +# +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: Python 3.9\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2024-12-20 16:41+0000\n" +"PO-Revision-Date: 2017-02-16 23:08+0000\n" +"Last-Translator: Rafael Fontenelle , 2024\n" +"Language-Team: Chinese (China) (https://app.transifex.com/python-doc/teams/5390/zh_CN/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: zh_CN\n" +"Plural-Forms: nplurals=1; plural=0;\n" + +#: ../../library/email.generator.rst:2 +msgid ":mod:`email.generator`: Generating MIME documents" +msgstr ":mod:`email.generator`: 生成 MIME 文档" + +#: ../../library/email.generator.rst:7 +msgid "**Source code:** :source:`Lib/email/generator.py`" +msgstr "**源代码:** :source:`Lib/email/generator.py`" + +#: ../../library/email.generator.rst:11 +msgid "" +"One of the most common tasks is to generate the flat (serialized) version of" +" the email message represented by a message object structure. You will need" +" to do this if you want to send your message via " +":meth:`smtplib.SMTP.sendmail` or the :mod:`nntplib` module, or print the " +"message on the console. Taking a message object structure and producing a " +"serialized representation is the job of the generator classes." +msgstr "" +"最常见的任务之一是生成由消息对象结构表示的电子邮件消息的扁平(序列化)版本。 如果您想通过 :meth:`smtplib.SMTP.sendmail` " +"或 :mod:`nntplib` 模块发送消息,或在控制台上打印消息, 则需要执行此操作。 将消息对象结构转换为序列化表示的工作由生成器类完成。" + +#: ../../library/email.generator.rst:18 +msgid "" +"As with the :mod:`email.parser` module, you aren't limited to the " +"functionality of the bundled generator; you could write one from scratch " +"yourself. However the bundled generator knows how to generate most email in" +" a standards-compliant way, should handle MIME and non-MIME email messages " +"just fine, and is designed so that the bytes-oriented parsing and generation" +" operations are inverses, assuming the same non-transforming " +":mod:`~email.policy` is used for both. That is, parsing the serialized byte" +" stream via the :class:`~email.parser.BytesParser` class and then " +"regenerating the serialized byte stream using :class:`BytesGenerator` should" +" produce output identical to the input [#]_. (On the other hand, using the " +"generator on an :class:`~email.message.EmailMessage` constructed by program " +"may result in changes to the :class:`~email.message.EmailMessage` object as " +"defaults are filled in.)" +msgstr "" +"与 :mod:`email.parser` 模块一样,你并不会受限于已捆绑生成器的功能;你可以自己从头写一个。 " +"不过,已捆绑生成器知道如何以符合标准的方式来生成大多数电子邮件,应该能够很好地处理 MIME 和非 MIME " +"电子邮件消息,并且被设计为面向字节的解析和生成操作是互逆的,它假定两者都使用同样的非转换型 :mod:`~email.policy`。 也就是说,通过 " +":class:`~email.parser.BytesParser` 类来解析序列化字节流然后再使用 :class:`BytesGenerator` " +"来重新生成序列化字节流应当得到与输入相同的结果 [#]_。 (而另一方面,在由程序所构造的 " +":class:`~email.message.EmailMessage` 上使用生成器可能导致对默认填入的 " +":class:`~email.message.EmailMessage` 对象的改变。。)" + +#: ../../library/email.generator.rst:32 +msgid "" +"The :class:`Generator` class can be used to flatten a message into a text " +"(as opposed to binary) serialized representation, but since Unicode cannot " +"represent binary data directly, the message is of necessity transformed into" +" something that contains only ASCII characters, using the standard email RFC" +" Content Transfer Encoding techniques for encoding email messages for " +"transport over channels that are not \"8 bit clean\"." +msgstr "" +"可以使用 :class:`Generator` 类将消息扁平化为文本(而非二进制数据)的序列化表示形式,但是由于 Unicode " +"无法直接表示二进制数据,因此消息有必要被转换为仅包含 ASCII 字符的数据,这将使用标准电子邮件 RFC " +"内容传输编码格式技术来编码电子邮件消息以便通过非 “8 比特位兼容”的信道来传输。" + +#: ../../library/email.generator.rst:39 +msgid "" +"To accommodate reproducible processing of SMIME-signed messages " +":class:`Generator` disables header folding for message parts of type " +"``multipart/signed`` and all subparts." +msgstr "" +"为了适应 SMIME 签名消息的可重现处理过程,:class:`Generator` 禁用了针对 ``multipart/signed`` " +"类型的消息部分及所有子部分的标头折叠。" + +#: ../../library/email.generator.rst:47 +msgid "" +"Return a :class:`BytesGenerator` object that will write any message provided" +" to the :meth:`flatten` method, or any surrogateescape encoded text provided" +" to the :meth:`write` method, to the :term:`file-like object` *outfp*. " +"*outfp* must support a ``write`` method that accepts binary data." +msgstr "" +"返回一个 :class:`BytesGenerator` 对象,该对象将把提供给 :meth:`flatten` 方法的任何消息或者提供给 " +":meth:`write` 方法的任何经过代理转义编码的文本写入到 :term:`file-like object` *outfp*。 *outfp* " +"必须支持接受二进制数据的 ``write`` 方法。" + +#: ../../library/email.generator.rst:52 ../../library/email.generator.rst:153 +msgid "" +"If optional *mangle_from_* is ``True``, put a ``>`` character in front of " +"any line in the body that starts with the exact string ``\"From \"``, that " +"is ``From`` followed by a space at the beginning of a line. *mangle_from_* " +"defaults to the value of the :attr:`~email.policy.Policy.mangle_from_` " +"setting of the *policy* (which is ``True`` for the " +":data:`~email.policy.compat32` policy and ``False`` for all others). " +"*mangle_from_* is intended for use when messages are stored in unix mbox " +"format (see :mod:`mailbox` and `WHY THE CONTENT-LENGTH FORMAT IS BAD " +"`_)." +msgstr "" +"如果可选的 *mangle_from_* 为 ``True``,则会将一个 ``>`` 字符放到恰好以字符串 ``\"From \"`` " +"打头,即开头文本为 ``From`` 加一个空格的的行前面。 *mangle_from_* 默认为 *policy* 的 " +":attr:`~email.policy.Policy.mangle_from_` 设置值 (对于 " +":data:`~email.policy.compat32` 策略为 ``True``,对于所有其他策略则为 ``False``)。 " +"*mangle_from_* 被设计为在当消息以 unix mbox 格式存储时使用 (参见 :mod:`mailbox` 和 `WHY THE " +"CONTENT-LENGTH FORMAT IS BAD `_)。" + +#: ../../library/email.generator.rst:62 ../../library/email.generator.rst:163 +msgid "" +"If *maxheaderlen* is not ``None``, refold any header lines that are longer " +"than *maxheaderlen*, or if ``0``, do not rewrap any headers. If " +"*manheaderlen* is ``None`` (the default), wrap headers and other message " +"lines according to the *policy* settings." +msgstr "" +"如果 *maxheaderlen* 不为 ``None``,则重新折叠任何长于 *maxheaderlen* 的标头行,或者如果为 " +"``0``,则不重新包装任何标头。 如果 *manheaderlen* 为 ``None`` (默认值),则根据 *policy* " +"设置包装标头和其他消息行。" + +#: ../../library/email.generator.rst:67 ../../library/email.generator.rst:168 +msgid "" +"If *policy* is specified, use that policy to control message generation. If" +" *policy* is ``None`` (the default), use the policy associated with the " +":class:`~email.message.Message` or :class:`~email.message.EmailMessage` " +"object passed to ``flatten`` to control the message generation. See " +":mod:`email.policy` for details on what *policy* controls." +msgstr "" +"如果指定了 *policy*,则使用该策略来控制消息的生成。 如果 *policy* 为 ``None`` (默认值),则使用与传递给 " +"``flatten`` 的 :class:`~email.message.Message` 或 " +":class:`~email.message.EmailMessage` 对象相关联的策略来控制消息的生成。 请参阅 " +":mod:`email.policy` 了解有关 *policy* 所控制内容的详情。" + +#: ../../library/email.generator.rst:75 ../../library/email.generator.rst:174 +msgid "Added the *policy* keyword." +msgstr "添加了 *policy* 关键字。" + +#: ../../library/email.generator.rst:77 ../../library/email.generator.rst:176 +msgid "" +"The default behavior of the *mangle_from_* and *maxheaderlen* parameters is " +"to follow the policy." +msgstr "*mangle_from_* 和 *maxheaderlen* 形参的默认行为是遵循策略。" + +#: ../../library/email.generator.rst:83 +msgid "" +"Print the textual representation of the message object structure rooted at " +"*msg* to the output file specified when the :class:`BytesGenerator` instance" +" was created." +msgstr "将将以 *msg* 为根的消息对象结构体的文本表示形式打印到创建 :class:`BytesGenerator` 实例时指定的输出文件。" + +#: ../../library/email.generator.rst:87 +msgid "" +"If the :mod:`~email.policy` option :attr:`~email.policy.Policy.cte_type` is " +"``8bit`` (the default), copy any headers in the original parsed message that" +" have not been modified to the output with any bytes with the high bit set " +"reproduced as in the original, and preserve the non-ASCII " +":mailheader:`Content-Transfer-Encoding` of any body parts that have them. If" +" ``cte_type`` is ``7bit``, convert the bytes with the high bit set as needed" +" using an ASCII-compatible :mailheader:`Content-Transfer-Encoding`. That is," +" transform parts with non-ASCII :mailheader:`Content-Transfer-Encoding` " +"(:mailheader:`Content-Transfer-Encoding: 8bit`) to an ASCII compatible " +":mailheader:`Content-Transfer-Encoding`, and encode RFC-invalid non-ASCII " +"bytes in headers using the MIME ``unknown-8bit`` character set, thus " +"rendering them RFC-compliant." +msgstr "" +"如果 :mod:`~email.policy` 选项 :attr:`~email.policy.Policy.cte_type` 为 ``8bit`` " +"(默认值),则会将未被修改的原始已解析消息中的任何标头拷贝到输出,其中会重新生成与原始数据相同的高比特位组字节数据,并保留具有它们的任何消息体部分的非 " +"ASCII :mailheader:`Content-Transfer-Encoding`。 如果 ``cte_type`` 为 " +"``7bit``,则会根据需要使用兼容 ASCII 的 :mailheader:`Content-Transfer-Encoding` " +"来转换高比特位组字节数据。 也就是说,将具有非 ASCII :mailheader:`Content-Transfer-Encoding` " +"(:mailheader:`Content-Transfer-Encoding: 8bit`) 的部分转换为兼容 ASCII 的 " +":mailheader:`Content-Transfer-Encoding`,并使用 MIME ``unknown-8bit`` " +"字符集来编码标头中不符合 RFC 的非 ASCII 字节数据,以使其符合 RFC。" + +#: ../../library/email.generator.rst:104 ../../library/email.generator.rst:197 +msgid "" +"If *unixfrom* is ``True``, print the envelope header delimiter used by the " +"Unix mailbox format (see :mod:`mailbox`) before the first of the :rfc:`5322`" +" headers of the root message object. If the root object has no envelope " +"header, craft a standard one. The default is ``False``. Note that for " +"subparts, no envelope header is ever printed." +msgstr "" +"如果 *unixfrom* 为 ``True``,则会在根消息对象的第一个 :rfc:`5322` 标头之前打印 Unix mailbox 格式 (参见" +" :mod:`mailbox`) 所使用的封包标头分隔符。 如果根对象没有封包标头,则会创建一个标准标头。 默认值为 ``False``。 " +"请注意对于子部分来说,不会打印任何封包标头。" + +#: ../../library/email.generator.rst:110 ../../library/email.generator.rst:203 +msgid "" +"If *linesep* is not ``None``, use it as the separator character between all " +"the lines of the flattened message. If *linesep* is ``None`` (the default)," +" use the value specified in the *policy*." +msgstr "" +"如果 *linesep* 不为 ``None``,则会将其用作扁平化消息的所有行之间的分隔符。 如果 *linesep* 为 ``None`` " +"(默认值),则使用在 *policy* 中指定的值。" + +#: ../../library/email.generator.rst:119 +msgid "" +"Return an independent clone of this :class:`BytesGenerator` instance with " +"the exact same option settings, and *fp* as the new *outfp*." +msgstr "返回此 :class:`BytesGenerator` 实例的独立克隆,具有完全相同的选项设置,而 *fp* 为新的 *outfp*。" + +#: ../../library/email.generator.rst:125 +msgid "" +"Encode *s* using the ``ASCII`` codec and the ``surrogateescape`` error " +"handler, and pass it to the *write* method of the *outfp* passed to the " +":class:`BytesGenerator`'s constructor." +msgstr "" +"使用 ``ASCII`` 编解码器和 ``surrogateescape`` 错误处理程序编码 *s*,并将其传递给传入到 " +":class:`BytesGenerator` 的构造器的 *outfp* 的 *write* 方法 。" + +#: ../../library/email.generator.rst:130 +msgid "" +"As a convenience, :class:`~email.message.EmailMessage` provides the methods " +":meth:`~email.message.EmailMessage.as_bytes` and ``bytes(aMessage)`` (a.k.a." +" :meth:`~email.message.EmailMessage.__bytes__`), which simplify the " +"generation of a serialized binary representation of a message object. For " +"more detail, see :mod:`email.message`." +msgstr "" +"作为一个便捷工具,:class:`~email.message.EmailMessage` 提供了 " +":meth:`~email.message.EmailMessage.as_bytes` 和 ``bytes(aMessage)`` (即 " +":meth:`~email.message.EmailMessage.__bytes__`) 等方法,它们简单地生成一个消息对象的序列化二进制表示形式。" +" 更多细节请参阅 :mod:`email.message`。" + +#: ../../library/email.generator.rst:137 +msgid "" +"Because strings cannot represent binary data, the :class:`Generator` class " +"must convert any binary data in any message it flattens to an ASCII " +"compatible format, by converting them to an ASCII compatible " +":mailheader:`Content-Transfer_Encoding`. Using the terminology of the email" +" RFCs, you can think of this as :class:`Generator` serializing to an I/O " +"stream that is not \"8 bit clean\". In other words, most applications will " +"want to be using :class:`BytesGenerator`, and not :class:`Generator`." +msgstr "" +"因为字符串无法表示二进制数据,:class:`Generator` 类必须将任何消息中扁平化的任何二进制数据转换为兼容 ASCII " +"的格式,具体将其转换为兼容 ASCII 的 :mailheader:`Content-Transfer_Encoding`。 使用电子邮件 RFC " +"的术语,你可以将其视作 :class:`Generator` 序列化为不 \"支持 8 比特\" 的 I/O 流。 换句话说,大部分应用程序将需要使用 " +":class:`BytesGenerator`,而非 :class:`Generator`。" + +#: ../../library/email.generator.rst:148 +msgid "" +"Return a :class:`Generator` object that will write any message provided to " +"the :meth:`flatten` method, or any text provided to the :meth:`write` " +"method, to the :term:`file-like object` *outfp*. *outfp* must support a " +"``write`` method that accepts string data." +msgstr "" +"返回一个 :class:`Generator`,它将把提供给 :meth:`flatten` 方法的任何消息,或者提供给 :meth:`write` " +"方法的任何文本写入到 :term:`file-like object` *outfp*。 *outfp* 必须支持接受字符串数据的 ``write`` " +"方法。" + +#: ../../library/email.generator.rst:182 +msgid "" +"Print the textual representation of the message object structure rooted at " +"*msg* to the output file specified when the :class:`Generator` instance was " +"created." +msgstr "将以 *msg* 为根的消息对象结构体的文本表示形式打印到当 :class:`Generator` 实例被创建时所指定的输出文件。" + +#: ../../library/email.generator.rst:186 +msgid "" +"If the :mod:`~email.policy` option :attr:`~email.policy.Policy.cte_type` is " +"``8bit``, generate the message as if the option were set to ``7bit``. (This " +"is required because strings cannot represent non-ASCII bytes.) Convert any " +"bytes with the high bit set as needed using an ASCII-compatible " +":mailheader:`Content-Transfer-Encoding`. That is, transform parts with non-" +"ASCII :mailheader:`Content-Transfer-Encoding` (:mailheader:`Content-" +"Transfer-Encoding: 8bit`) to an ASCII compatible :mailheader:`Content-" +"Transfer-Encoding`, and encode RFC-invalid non-ASCII bytes in headers using " +"the MIME ``unknown-8bit`` character set, thus rendering them RFC-compliant." +msgstr "" +"如果 :mod:`~email.policy` 选项 :attr:`~email.policy.Policy.cte_type` 为 " +"``8bit``,则视同选项被设为 ``7bit`` 来生成消息。 (这是必需的,因为字符串无法表示非 ASCII 字节数据。) 将使用兼容 ASCII" +" 的 :mailheader:`Content-Transfer-Encoding` 按需转换任何具有高比特位组的字节数据。 也就是说,将具有非 " +"ASCII :mailheader:`Content-Transfer-Encoding` (:mailheader:`Content-" +"Transfer-Encoding: 8bit`) 的部分转换为兼容 ASCII 的 :mailheader:`Content-Transfer-" +"Encoding`,并使用 MIME ``unknown-8bit`` 字符集来编码标头中不符合 RFC 的非 ASCII 字节数据,以使其符合 " +"RFC。" + +#: ../../library/email.generator.rst:209 +msgid "" +"Added support for re-encoding ``8bit`` message bodies, and the *linesep* " +"argument." +msgstr "添加了对重编码 ``8bit`` 消息体的支持,以及 *linesep* 参数。" + +#: ../../library/email.generator.rst:216 +msgid "" +"Return an independent clone of this :class:`Generator` instance with the " +"exact same options, and *fp* as the new *outfp*." +msgstr "返回此 :class:`Generator` 实例的独立克隆,具有完全相同的选项设置,而 *fp* 为新的 *outfp*。" + +#: ../../library/email.generator.rst:222 +msgid "" +"Write *s* to the *write* method of the *outfp* passed to the " +":class:`Generator`'s constructor. This provides just enough file-like API " +"for :class:`Generator` instances to be used in the :func:`print` function." +msgstr "" +"将 *s* 写入到传给 :class:`Generator` 的构造器的 *outfp* 的 *write* 方法。 这足够为 " +":class:`Generator` 实际提供可用于 :func:`print` 函数的文件类 API。" + +#: ../../library/email.generator.rst:228 +msgid "" +"As a convenience, :class:`~email.message.EmailMessage` provides the methods " +":meth:`~email.message.EmailMessage.as_string` and ``str(aMessage)`` (a.k.a. " +":meth:`~email.message.EmailMessage.__str__`), which simplify the generation " +"of a formatted string representation of a message object. For more detail, " +"see :mod:`email.message`." +msgstr "" +"作为一个便捷工具,:class:`~email.message.EmailMessage` 提供了 " +":meth:`~email.message.EmailMessage.as_string` 和 ``str(aMessage)`` (即 " +":meth:`~email.message.EmailMessage.__str__`) 等方法,它们简单地生成一个消息对象的已格式化字符串表示形式。 " +"更多细节请参阅 :mod:`email.message`。" + +#: ../../library/email.generator.rst:235 +msgid "" +"The :mod:`email.generator` module also provides a derived class, " +":class:`DecodedGenerator`, which is like the :class:`Generator` base class, " +"except that non-\\ :mimetype:`text` parts are not serialized, but are " +"instead represented in the output stream by a string derived from a template" +" filled in with information about the part." +msgstr "" +":mod:`email.generator` 模块还提供了一个派生类 :class:`DecodedGenerator`,它类似于 " +":class:`Generator` 基类,不同之处在于非 :mimetype:`text` 部分不会被序列化,而是被表示为 " +"基于模板并填写了有关该部分的信息的字符串输出流的形式。" + +#: ../../library/email.generator.rst:244 +msgid "" +"Act like :class:`Generator`, except that for any subpart of the message " +"passed to :meth:`Generator.flatten`, if the subpart is of main type " +":mimetype:`text`, print the decoded payload of the subpart, and if the main " +"type is not :mimetype:`text`, instead of printing it fill in the string " +"*fmt* using information from the part and print the resulting filled-in " +"string." +msgstr "" +"行为类似于 :class:`Generator`,不同之处在于对传给 :meth:`Generator.flatten` " +"的消息的任何子部分,如果该子部分的主类型为 :mimetype:`text`,则打印该子部分的已解码载荷,而如果其主类型不为 " +":mimetype:`text`,则不直接打印它而是使用来自该部分的信息填入字符串 *fmt* 并将填写完成的字符串打印出来。" + +#: ../../library/email.generator.rst:251 +msgid "" +"To fill in *fmt*, execute ``fmt % part_info``, where ``part_info`` is a " +"dictionary composed of the following keys and values:" +msgstr "要填入 *fmt*,则执行 ``fmt % part_info``,其中 ``part_info`` 是由下列键和值组成的字典:" + +#: ../../library/email.generator.rst:254 +msgid "``type`` -- Full MIME type of the non-\\ :mimetype:`text` part" +msgstr "``type`` -- 非 :mimetype:`text` 部分的完整 MIME 类型" + +#: ../../library/email.generator.rst:256 +msgid "``maintype`` -- Main MIME type of the non-\\ :mimetype:`text` part" +msgstr "``maintype`` -- 非 :mimetype:`text` 部分的主 MIME 类型" + +#: ../../library/email.generator.rst:258 +msgid "``subtype`` -- Sub-MIME type of the non-\\ :mimetype:`text` part" +msgstr "``subtype`` -- 非 :mimetype:`text` 部分的子 MIME 类型" + +#: ../../library/email.generator.rst:260 +msgid "``filename`` -- Filename of the non-\\ :mimetype:`text` part" +msgstr "``filename`` -- 非 :mimetype:`text` 部分的文件名" + +#: ../../library/email.generator.rst:262 +msgid "" +"``description`` -- Description associated with the non-\\ :mimetype:`text` " +"part" +msgstr "``description`` -- 与非 :mimetype:`text` 部分相关联的描述" + +#: ../../library/email.generator.rst:264 +msgid "" +"``encoding`` -- Content transfer encoding of the non-\\ :mimetype:`text` " +"part" +msgstr "``encoding`` -- 非 :mimetype:`text` 部分的内容转换编码格式" + +#: ../../library/email.generator.rst:266 +msgid "If *fmt* is ``None``, use the following default *fmt*:" +msgstr "如果 *fmt* 为 ``None``,则使用下列默认 *fmt*:" + +#: ../../library/email.generator.rst:268 +msgid "\"[Non-text (%(type)s) part of message omitted, filename %(filename)s]\"" +msgstr "\"[忽略消息的非文本 (%(type)s) 部分,文件名 %(filename)s]\"" + +#: ../../library/email.generator.rst:270 +msgid "" +"Optional *_mangle_from_* and *maxheaderlen* are as with the " +":class:`Generator` base class." +msgstr "可选的 *_mangle_from_* 和 *maxheaderlen* 与 :class:`Generator` 基类的相同。" + +#: ../../library/email.generator.rst:275 +msgid "Footnotes" +msgstr "备注" + +#: ../../library/email.generator.rst:276 +msgid "" +"This statement assumes that you use the appropriate setting for " +"``unixfrom``, and that there are no :mod:`policy` settings calling for " +"automatic adjustments (for example, " +":attr:`~email.policy.Policy.refold_source` must be ``none``, which is *not* " +"the default). It is also not 100% true, since if the message does not " +"conform to the RFC standards occasionally information about the exact " +"original text is lost during parsing error recovery. It is a goal to fix " +"these latter edge cases when possible." +msgstr "" +"此语句假定你使用了正确的 ``unixfrom`` 设置,并且没有用于自动调整的 :mod:`policy` 设置调用(例如 " +":attr:`~email.policy.Policy.refold_source` 必须为 ``none``,这 *不是* 默认值)。 这也不是 " +"100% 为真,因为如果消息不遵循 RFC 标准则有时实际原始文本的信息会在解析错误恢复时丢失。 它的目标是在可能的情况下修复这些后续边缘情况。" diff --git a/library/email.header.po b/library/email.header.po new file mode 100644 index 000000000..ea15c501c --- /dev/null +++ b/library/email.header.po @@ -0,0 +1,345 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) 2001-2022, Python Software Foundation +# This file is distributed under the same license as the Python package. +# FIRST AUTHOR , YEAR. +# +# Translators: +# Freesand Leo , 2021 +# +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: Python 3.9\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2022-11-04 14:34+0000\n" +"PO-Revision-Date: 2017-02-16 23:08+0000\n" +"Last-Translator: Freesand Leo , 2021\n" +"Language-Team: Chinese (China) (https://www.transifex.com/python-doc/teams/5390/zh_CN/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: zh_CN\n" +"Plural-Forms: nplurals=1; plural=0;\n" + +#: ../../library/email.header.rst:2 +msgid ":mod:`email.header`: Internationalized headers" +msgstr ":mod:`email.header`: 国际化标头" + +#: ../../library/email.header.rst:7 +msgid "**Source code:** :source:`Lib/email/header.py`" +msgstr "**源代码:** :source:`Lib/email/header.py`" + +#: ../../library/email.header.rst:11 +msgid "" +"This module is part of the legacy (``Compat32``) email API. In the current " +"API encoding and decoding of headers is handled transparently by the " +"dictionary-like API of the :class:`~email.message.EmailMessage` class. In " +"addition to uses in legacy code, this module can be useful in applications " +"that need to completely control the character sets used when encoding " +"headers." +msgstr "" +"此模块是旧式 (``Compat32``) email API 的一部分。 在当前的 API 中标头的编码和解码是由 " +":class:`~email.message.EmailMessage` 类的字典型 API 来透明地处理的。 " +"除了在旧有代码中使用,此模块在需要完全控制当编码标头时所使用的字符集时也很有用处。" + +#: ../../library/email.header.rst:17 +msgid "" +"The remaining text in this section is the original documentation of the " +"module." +msgstr "本节中的其余文本是此模块的原始文档。" + +#: ../../library/email.header.rst:19 +msgid "" +":rfc:`2822` is the base standard that describes the format of email " +"messages. It derives from the older :rfc:`822` standard which came into " +"widespread use at a time when most email was composed of ASCII characters " +"only. :rfc:`2822` is a specification written assuming email contains only " +"7-bit ASCII characters." +msgstr "" +":rfc:`2822` 是描述电子邮件消息格式的基础标准。 它派生自更早的 :rfc:`822` 标准,该标准在大多数电子邮件仅由 ASCII " +"字符组成时已被广泛使用。 :rfc:`2822` 所描述的规范假定电子邮件都只包含 7 位 ASCII 字符。" + +#: ../../library/email.header.rst:24 +msgid "" +"Of course, as email has been deployed worldwide, it has become " +"internationalized, such that language specific character sets can now be " +"used in email messages. The base standard still requires email messages to " +"be transferred using only 7-bit ASCII characters, so a slew of RFCs have " +"been written describing how to encode email containing non-ASCII characters " +"into :rfc:`2822`\\ -compliant format. These RFCs include :rfc:`2045`, " +":rfc:`2046`, :rfc:`2047`, and :rfc:`2231`. The :mod:`email` package supports" +" these standards in its :mod:`email.header` and :mod:`email.charset` " +"modules." +msgstr "" +"当然,随着电子邮件在全球部署,它已经变得国际化了,例如电子邮件消息中现在可以使用特定语言的专属字符集。 这个基础标准仍然要求电子邮件消息只使用 7 位 " +"ASCII 字符来进行传输,为此编写了大量 RFC 来描述如何将包含非 ASCII 字符的电子邮件编码为符合 :rfc:`2822` 的格式。 这些 " +"RFC 包括 :rfc:`2045`, :rfc:`2046`, :rfc:`2047` 和 :rfc:`2231`。 :mod:`email` 包在其" +" :mod:`email.header` 和 :mod:`email.charset` 模块中支持了这些标准。" + +#: ../../library/email.header.rst:33 +msgid "" +"If you want to include non-ASCII characters in your email headers, say in " +"the :mailheader:`Subject` or :mailheader:`To` fields, you should use the " +":class:`Header` class and assign the field in the " +":class:`~email.message.Message` object to an instance of :class:`Header` " +"instead of using a string for the header value. Import the :class:`Header` " +"class from the :mod:`email.header` module. For example::" +msgstr "" +"如果你想在你的电子邮件标头中包括非 ASCII 字符,比如说是在 :mailheader:`Subject` 或 :mailheader:`To` " +"字段中,你应当使用 :class:`Header` 类并将 :class:`~email.message.Message` 对象中的字段赋值为 " +":class:`Header` 的实例而不是使用字符串作为字段值。 请从 :mod:`email.header` 模块导入 " +":class:`Header` 类。 例如::" + +#: ../../library/email.header.rst:50 +msgid "" +"Notice here how we wanted the :mailheader:`Subject` field to contain a non-" +"ASCII character? We did this by creating a :class:`Header` instance and " +"passing in the character set that the byte string was encoded in. When the " +"subsequent :class:`~email.message.Message` instance was flattened, the " +":mailheader:`Subject` field was properly :rfc:`2047` encoded. MIME-aware " +"mail readers would show this header using the embedded ISO-8859-1 character." +msgstr "" +"是否注意到这里我们是如何希望 :mailheader:`Subject` 字段包含非 ASCII 字符的? 我们通过创建一个 " +":class:`Header` 实例并传入字节串编码所用的字符集来做到这一点。 当后续的 :class:`~email.message.Message`" +" 实例被展平时,:mailheader:`Subject` 字段会正确地按 :rfc:`2047` 来编码。 可感知 MIME " +"的电子邮件阅读器将会使用嵌入的 ISO-8859-1 字符来显示此标头。" + +#: ../../library/email.header.rst:57 +msgid "Here is the :class:`Header` class description:" +msgstr "以下是 :class:`Header` 类描述:" + +#: ../../library/email.header.rst:62 +msgid "" +"Create a MIME-compliant header that can contain strings in different " +"character sets." +msgstr "创建符合 MIME 要求的标头,其中可包含不同字符集的字符串。" + +#: ../../library/email.header.rst:65 +msgid "" +"Optional *s* is the initial header value. If ``None`` (the default), the " +"initial header value is not set. You can later append to the header with " +":meth:`append` method calls. *s* may be an instance of :class:`bytes` or " +":class:`str`, but see the :meth:`append` documentation for semantics." +msgstr "" +"可选的 *s* 是初始标头值。 如果为 ``None`` (默认值),则表示初始标头值未设置。 你可以在稍后使用 :meth:`append` " +"方法调用向标头添加新值。 *s* 可以是 :class:`bytes` 或 :class:`str` 的实例,注意参阅 :meth:`append` " +"文档了解相关语义。" + +#: ../../library/email.header.rst:70 +msgid "" +"Optional *charset* serves two purposes: it has the same meaning as the " +"*charset* argument to the :meth:`append` method. It also sets the default " +"character set for all subsequent :meth:`append` calls that omit the " +"*charset* argument. If *charset* is not provided in the constructor (the " +"default), the ``us-ascii`` character set is used both as *s*'s initial " +"charset and as the default for subsequent :meth:`append` calls." +msgstr "" +"可选的 *charset* 用于两种目的:它的含义与 :meth:`append` 方法的 *charset* 参数相同。 它还会为所有省略了 " +"*charset* 参数的后续 :meth:`append` 调用设置默认字符集。 如果 *charset* 在构造器中未提供(默认设置),则会将 " +"``us-ascii`` 字符集用作 *s* 的初始字符集以及后续 :meth:`append` 调用的默认字符集。" + +#: ../../library/email.header.rst:77 +msgid "" +"The maximum line length can be specified explicitly via *maxlinelen*. For " +"splitting the first line to a shorter value (to account for the field header" +" which isn't included in *s*, e.g. :mailheader:`Subject`) pass in the name " +"of the field in *header_name*. The default *maxlinelen* is 76, and the " +"default value for *header_name* is ``None``, meaning it is not taken into " +"account for the first line of a long, split header." +msgstr "" +"通过 *maxlinelen* 可以显式指定最大行长度。 要将第一行拆分为更短的值 (以适应未被包括在to account for the field" +" header which isn't included in *s* 中的字段标头,例如 " +":mailheader:`Subject`),则将字段名称作为 *header_name* 传入。 *maxlinelen* 默认值为 76,而 " +"*header_name* 默认值为 ``None``,表示不考虑拆分超长标头的第一行。" + +#: ../../library/email.header.rst:84 +msgid "" +"Optional *continuation_ws* must be :rfc:`2822`\\ -compliant folding " +"whitespace, and is usually either a space or a hard tab character. This " +"character will be prepended to continuation lines. *continuation_ws* " +"defaults to a single space character." +msgstr "" +"可选的 *continuation_ws* 必须为符合 :rfc:`2822` 的折叠用空白符,通常是空格符或硬制表符。 " +"这个字符将被加缀至连续行的开头。 *continuation_ws* 默认为一个空格符。" + +#: ../../library/email.header.rst:89 +msgid "" +"Optional *errors* is passed straight through to the :meth:`append` method." +msgstr "可选的 *errors* 会被直接传递给 :meth:`append` 方法。" + +#: ../../library/email.header.rst:94 +msgid "Append the string *s* to the MIME header." +msgstr "将字符串 *s* 添加到 MIME 标头。" + +#: ../../library/email.header.rst:96 +msgid "" +"Optional *charset*, if given, should be a :class:`~email.charset.Charset` " +"instance (see :mod:`email.charset`) or the name of a character set, which " +"will be converted to a :class:`~email.charset.Charset` instance. A value of" +" ``None`` (the default) means that the *charset* given in the constructor is" +" used." +msgstr "" +"如果给出可选的 *charset*,它应当是一个 :class:`~email.charset.Charset` 实例 (参见 " +":mod:`email.charset`) 或字符集名称,该参数将被转换为一个 :class:`~email.charset.Charset` 实例。" +" 如果为 ``None`` (默认值) 则表示会使用构造器中给出的 *charset*。" + +#: ../../library/email.header.rst:102 +msgid "" +"*s* may be an instance of :class:`bytes` or :class:`str`. If it is an " +"instance of :class:`bytes`, then *charset* is the encoding of that byte " +"string, and a :exc:`UnicodeError` will be raised if the string cannot be " +"decoded with that character set." +msgstr "" +"*s* 可以是 :class:`bytes` 或 :class:`str` 的实例。 如果它是 :class:`bytes` 的实例,则 " +"*charset* 为该字节串的编码格式,如果字节串无法用该字符集来解码则将引发 :exc:`UnicodeError`。" + +#: ../../library/email.header.rst:107 +msgid "" +"If *s* is an instance of :class:`str`, then *charset* is a hint specifying " +"the character set of the characters in the string." +msgstr "如果 *s* 是 :class:`str` 的实例,则 *charset* 是用来指定字符串中字符字符集的提示。" + +#: ../../library/email.header.rst:110 +msgid "" +"In either case, when producing an :rfc:`2822`\\ -compliant header using " +":rfc:`2047` rules, the string will be encoded using the output codec of the " +"charset. If the string cannot be encoded using the output codec, a " +"UnicodeError will be raised." +msgstr "" +"在这两种情况下,当使用 :rfc:`2047` 规则产生符合 :rfc:`2822` 的标头时,将使用指定字符集的输出编解码器来编码字符串。 " +"如果字符串无法使用该输出编解码器来编码,则将引发 UnicodeError。" + +#: ../../library/email.header.rst:115 +msgid "" +"Optional *errors* is passed as the errors argument to the decode call if *s*" +" is a byte string." +msgstr "可选的 *errors* 会在 *s* 为字节串时被作为 errors 参数传递给 decode 调用。" + +#: ../../library/email.header.rst:121 +msgid "" +"Encode a message header into an RFC-compliant format, possibly wrapping long" +" lines and encapsulating non-ASCII parts in base64 or quoted-printable " +"encodings." +msgstr "" +"将消息标头编码为符合 RFC 的格式,可能会对过长的行采取折行并将非 ASCII 部分以 base64 或 quoted-printable " +"编码格式进行封装。" + +#: ../../library/email.header.rst:125 +msgid "" +"Optional *splitchars* is a string containing characters which should be " +"given extra weight by the splitting algorithm during normal header wrapping." +" This is in very rough support of :RFC:`2822`\\'s 'higher level syntactic " +"breaks': split points preceded by a splitchar are preferred during line " +"splitting, with the characters preferred in the order in which they appear " +"in the string. Space and tab may be included in the string to indicate " +"whether preference should be given to one over the other as a split point " +"when other split chars do not appear in the line being split. Splitchars " +"does not affect :RFC:`2047` encoded lines." +msgstr "" +"可选的 *splitchars* 是一个字符串,其中包含应在正常的标头折行处理期间由拆分算法赋予额外权重的字符。 这是对于 :RFC:`2822` 中 " +"'更高层级语法拆分' 的很粗略的支持:在拆分期间会首选在 splitchar 之前的拆分点,字符的优先级是基于它们在字符串中的出现顺序。 " +"字符串中可包含空格和制表符以指明当其他拆分字符未在被拆分行中出现时是否要将某个字符作为优先于另一个字符的首选拆分点。 拆分字符不会影响以 " +":RFC:`2047` 编码的行。" + +#: ../../library/email.header.rst:135 +msgid "" +"*maxlinelen*, if given, overrides the instance's value for the maximum line " +"length." +msgstr "如果给出 *maxlinelen*,它将覆盖实例的最大行长度值。" + +#: ../../library/email.header.rst:138 +msgid "" +"*linesep* specifies the characters used to separate the lines of the folded " +"header. It defaults to the most useful value for Python application code " +"(``\\n``), but ``\\r\\n`` can be specified in order to produce headers with " +"RFC-compliant line separators." +msgstr "" +"*linesep* 指定用来分隔已折叠标头行的字符。 它默认为 Python 应用程序代码中最常用的值 (``\\n``),但也可以指定为 " +"``\\r\\n`` 以便产生带有符合 RFC 的行分隔符的标头。" + +#: ../../library/email.header.rst:143 +msgid "Added the *linesep* argument." +msgstr "增加了 *linesep* 参数。" + +#: ../../library/email.header.rst:147 +msgid "" +"The :class:`Header` class also provides a number of methods to support " +"standard operators and built-in functions." +msgstr ":class:`Header` 类还提供了一些方法以支持标准运算符和内置函数。" + +#: ../../library/email.header.rst:152 +msgid "" +"Returns an approximation of the :class:`Header` as a string, using an " +"unlimited line length. All pieces are converted to unicode using the " +"specified encoding and joined together appropriately. Any pieces with a " +"charset of ``'unknown-8bit'`` are decoded as ASCII using the ``'replace'`` " +"error handler." +msgstr "" +"以字符串形式返回 :class:`Header` 的近似表示,使用不受限制的行长度。 所有部分都会使用指定编码格式转换为 unicode " +"并适当地连接起来。 任何带有 ``'unknown-8bit'`` 字符集的部分都会使用 ``'replace'`` 错误处理程序解码为 ASCII。" + +#: ../../library/email.header.rst:158 +msgid "Added handling for the ``'unknown-8bit'`` charset." +msgstr "增加对 ``'unknown-8bit'`` 字符集的处理。" + +#: ../../library/email.header.rst:164 +msgid "" +"This method allows you to compare two :class:`Header` instances for " +"equality." +msgstr "这个方法允许你对两个 :class:`Header` 实例进行相等比较。" + +#: ../../library/email.header.rst:170 +msgid "" +"This method allows you to compare two :class:`Header` instances for " +"inequality." +msgstr "这个方法允许你对两个 :class:`Header` 实例进行不等比较。" + +#: ../../library/email.header.rst:173 +msgid "" +"The :mod:`email.header` module also provides the following convenient " +"functions." +msgstr ":mod:`email.header` 模块还提供了下列便捷函数。" + +#: ../../library/email.header.rst:178 +msgid "" +"Decode a message header value without converting the character set. The " +"header value is in *header*." +msgstr "在不转换字符集的情况下对消息标头值进行解码。 *header* 为标头值。" + +#: ../../library/email.header.rst:181 +msgid "" +"This function returns a list of ``(decoded_string, charset)`` pairs " +"containing each of the decoded parts of the header. *charset* is ``None`` " +"for non-encoded parts of the header, otherwise a lower case string " +"containing the name of the character set specified in the encoded string." +msgstr "" +"这个函数返回一个 ``(decoded_string, charset)`` 对的列表,其中包含标头的每个已解码部分。 对于标头的未编码部分 " +"*charset* 为 ``None``,在其他情况下则为一个包含已编码字符串中所指定字符集名称的小写字符串。" + +#: ../../library/email.header.rst:186 +msgid "Here's an example::" +msgstr "以下是为示例代码::" + +#: ../../library/email.header.rst:195 +msgid "" +"Create a :class:`Header` instance from a sequence of pairs as returned by " +":func:`decode_header`." +msgstr "基于 :func:`decode_header` 所返回的数据对序列创建一个 :class:`Header` 实例。" + +#: ../../library/email.header.rst:198 +msgid "" +":func:`decode_header` takes a header value string and returns a sequence of " +"pairs of the format ``(decoded_string, charset)`` where *charset* is the " +"name of the character set." +msgstr "" +":func:`decode_header` 接受一个标头值字符串并返回格式为 ``(decoded_string, charset)`` " +"的数据对序列,其中 *charset* 是字符集名称。" + +#: ../../library/email.header.rst:202 +msgid "" +"This function takes one of those sequence of pairs and returns a " +":class:`Header` instance. Optional *maxlinelen*, *header_name*, and " +"*continuation_ws* are as in the :class:`Header` constructor." +msgstr "" +"这个函数接受这样的数据对序列并返回一个 :class:`Header` 实例。 可选的 *maxlinelen*, *header_name* 和 " +"*continuation_ws* 与 :class:`Header` 构造器中的含义相同。" diff --git a/library/email.headerregistry.po b/library/email.headerregistry.po new file mode 100644 index 000000000..f8981f4c7 --- /dev/null +++ b/library/email.headerregistry.po @@ -0,0 +1,756 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) 2001-2024, Python Software Foundation +# This file is distributed under the same license as the Python package. +# FIRST AUTHOR , YEAR. +# +# Translators: +# dogn he , 2019 +# cdarlint , 2019 +# Freesand Leo , 2021 +# Rafael Fontenelle , 2024 +# +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: Python 3.9\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2024-01-12 22:01+0000\n" +"PO-Revision-Date: 2017-02-16 23:08+0000\n" +"Last-Translator: Rafael Fontenelle , 2024\n" +"Language-Team: Chinese (China) (https://app.transifex.com/python-doc/teams/5390/zh_CN/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: zh_CN\n" +"Plural-Forms: nplurals=1; plural=0;\n" + +#: ../../library/email.headerregistry.rst:2 +msgid ":mod:`email.headerregistry`: Custom Header Objects" +msgstr ":mod:`email.headerregistry`: 自定义标头对象" + +#: ../../library/email.headerregistry.rst:10 +msgid "**Source code:** :source:`Lib/email/headerregistry.py`" +msgstr "**源代码:** :source:`Lib/email/headerregistry.py`" + +#: ../../library/email.headerregistry.rst:14 +msgid "[1]_" +msgstr "[1]_" + +#: ../../library/email.headerregistry.rst:16 +msgid "" +"Headers are represented by customized subclasses of :class:`str`. The " +"particular class used to represent a given header is determined by the " +":attr:`~email.policy.EmailPolicy.header_factory` of the :mod:`~email.policy`" +" in effect when the headers are created. This section documents the " +"particular ``header_factory`` implemented by the email package for handling " +":RFC:`5322` compliant email messages, which not only provides customized " +"header objects for various header types, but also provides an extension " +"mechanism for applications to add their own custom header types." +msgstr "" +"标头是由 :class:`str` 的自定义子类来表示的。 用于表示给定标头的特定类则由创建标头时生效的 :mod:`~email.policy` 的 " +":attr:`~email.policy.EmailPolicy.header_factory` 确定。 这一节记录了 email 包为处理兼容 " +":RFC:`5322` 的电子邮件消息所实现的特定 " +"``header_factory``,它不仅为各种标头类型提供了自定义的标头对象,还为应用程序提供了添加其自定义标头类型的扩展机制。" + +#: ../../library/email.headerregistry.rst:25 +msgid "" +"When using any of the policy objects derived from " +":data:`~email.policy.EmailPolicy`, all headers are produced by " +":class:`.HeaderRegistry` and have :class:`.BaseHeader` as their last base " +"class. Each header class has an additional base class that is determined by" +" the type of the header. For example, many headers have the class " +":class:`.UnstructuredHeader` as their other base class. The specialized " +"second class for a header is determined by the name of the header, using a " +"lookup table stored in the :class:`.HeaderRegistry`. All of this is managed" +" transparently for the typical application program, but interfaces are " +"provided for modifying the default behavior for use by more complex " +"applications." +msgstr "" +"当使用派生自 :data:`~email.policy.EmailPolicy` 的任何策略对象时,所有标头都通过 " +":class:`.HeaderRegistry` 产生并且以 :class:`.BaseHeader` 作为其最后一个基类。 " +"每个标头类都有一个由该标头类型确定的附加基类。 例如,许多标头都以 :class:`.UnstructuredHeader` 类作为其另一个基类。 " +"一个标头专用的第二个类是由标头名称使用存储在 :class:`.HeaderRegistry` 中的查找表来确定的。 " +"所有这些都针对典型应用程序进行透明的管理,但也为修改默认行为提供了接口,以便由更复杂的应用使用。" + +#: ../../library/email.headerregistry.rst:36 +msgid "" +"The sections below first document the header base classes and their " +"attributes, followed by the API for modifying the behavior of " +":class:`.HeaderRegistry`, and finally the support classes used to represent " +"the data parsed from structured headers." +msgstr "" +"以下各节首先记录了标头基类及其属性,然后是用于修改 :class:`.HeaderRegistry` 行为的 " +"API,最后是用于表示从结构化标头解析的数据的支持类。" + +#: ../../library/email.headerregistry.rst:44 +msgid "" +"*name* and *value* are passed to ``BaseHeader`` from the " +":attr:`~email.policy.EmailPolicy.header_factory` call. The string value of " +"any header object is the *value* fully decoded to unicode." +msgstr "" +"*name* 和 *value* 会从 :attr:`~email.policy.EmailPolicy.header_factory` 调用传递给 " +"``BaseHeader``。 任何标头对象的字符串值都是完成解码为 unicode 的 *value*。" + +#: ../../library/email.headerregistry.rst:48 +msgid "This base class defines the following read-only properties:" +msgstr "这个基类定义了下列只读属性:" + +#: ../../library/email.headerregistry.rst:53 +msgid "" +"The name of the header (the portion of the field before the ':'). This is " +"exactly the value passed in the " +":attr:`~email.policy.EmailPolicy.header_factory` call for *name*; that is, " +"case is preserved." +msgstr "" +"标头的名称(字段在 ':' 之前的部分)。 这就是 *name* 的 " +":attr:`~email.policy.EmailPolicy.header_factory` 调用所传递的值;也就是说会保持大小写形式。" + +#: ../../library/email.headerregistry.rst:61 +msgid "" +"A tuple of :exc:`~email.errors.HeaderDefect` instances reporting any RFC " +"compliance problems found during parsing. The email package tries to be " +"complete about detecting compliance issues. See the :mod:`~email.errors` " +"module for a discussion of the types of defects that may be reported." +msgstr "" +"一个包含 :exc:`~email.errors.HeaderDefect` 实例的元组,这些实例报告了在解析期间发现的任何 RFC 合规性问题。 " +"email 包会尝试尽可能地检测合规性问题。 请参阅 :mod:`~email.errors` 模块了解可能被报告的缺陷类型的相关讨论。" + +#: ../../library/email.headerregistry.rst:69 +msgid "" +"The maximum number of headers of this type that can have the same ``name``." +" A value of ``None`` means unlimited. The ``BaseHeader`` value for this " +"attribute is ``None``; it is expected that specialized header classes will " +"override this value as needed." +msgstr "" +"此类型标头可具有相同 ``name`` 的最大数量。 ``None`` 值表示无限制。 此属性的 ``BaseHeader`` 值为 " +"``None``;专用的标头类预期将根据需要覆盖这个值。" + +#: ../../library/email.headerregistry.rst:74 +msgid "" +"``BaseHeader`` also provides the following method, which is called by the " +"email library code and should not in general be called by application " +"programs:" +msgstr "``BaseHeader`` 还提供了以下方法,它由 email 库代码调用,通常不应当由应用程序来调用。" + +#: ../../library/email.headerregistry.rst:80 +msgid "" +"Return a string containing :attr:`~email.policy.Policy.linesep` characters " +"as required to correctly fold the header according to *policy*. A " +":attr:`~email.policy.Policy.cte_type` of ``8bit`` will be treated as if it " +"were ``7bit``, since headers may not contain arbitrary binary data. If " +":attr:`~email.policy.EmailPolicy.utf8` is ``False``, non-ASCII data will be " +":rfc:`2047` encoded." +msgstr "" +"返回一个字符串,其中包含用来根据 *policy* 正确地折叠标头的 :attr:`~email.policy.Policy.linesep` 字符。" +" :attr:`~email.policy.Policy.cte_type` 为 ``8bit`` 时将被作为 ``7bit`` " +"来处理,因为标头不能包含任意二进制数据。 如果 :attr:`~email.policy.EmailPolicy.utf8` 为 " +"``False``,则非 ASCII 数据将根据 :rfc:`2047` 来编码。" + +#: ../../library/email.headerregistry.rst:88 +msgid "" +"``BaseHeader`` by itself cannot be used to create a header object. It " +"defines a protocol that each specialized header cooperates with in order to " +"produce the header object. Specifically, ``BaseHeader`` requires that the " +"specialized class provide a :func:`classmethod` named ``parse``. This " +"method is called as follows::" +msgstr "" +"``BaseHeader`` 本身不能被用于创建标头对象。 它定义了一个与每个专用标头相配合的协议以便生成标头对象。 " +"具体来说,``BaseHeader`` 要求专用类提供一个名为 ``parse`` 的 :func:`classmethod`。 " +"此方法的调用形式如下::" + +#: ../../library/email.headerregistry.rst:96 +msgid "" +"``kwds`` is a dictionary containing one pre-initialized key, ``defects``. " +"``defects`` is an empty list. The parse method should append any detected " +"defects to this list. On return, the ``kwds`` dictionary *must* contain " +"values for at least the keys ``decoded`` and ``defects``. ``decoded`` " +"should be the string value for the header (that is, the header value fully " +"decoded to unicode). The parse method should assume that *string* may " +"contain content-transfer-encoded parts, but should correctly handle all " +"valid unicode characters as well so that it can parse un-encoded header " +"values." +msgstr "" +"``kwds`` 是包含了一个预初始化键 ``defects`` 的字典。 ``defects`` 是一个空列表。 parse " +"方法应当将任何已检测到的缺陷添加到此列表中。 在返回时,``kwds`` 字典 *必须* 至少包含 ``decoded`` 和 ``defects`` " +"等键的值。 ``decoded`` 应当是标头的字符串值(即完全解码为 unicode 的标头值)。 parse 方法应当假定 *string* " +"可能包含 content-transfer-encoded 部分,但也应当正确地处理全部有效的 unicode 字符以便它能解析未经编码的标头值。" + +#: ../../library/email.headerregistry.rst:105 +msgid "" +"``BaseHeader``'s ``__new__`` then creates the header instance, and calls its" +" ``init`` method. The specialized class only needs to provide an ``init`` " +"method if it wishes to set additional attributes beyond those provided by " +"``BaseHeader`` itself. Such an ``init`` method should look like this::" +msgstr "" +"随后 ``BaseHeader`` 的 ``__new__`` 会创建标头实例,并调用其 ``init`` 方法。 专属类如果想要设置 " +"``BaseHeader`` 自身所提供的属性之外的附加属性,只需提供一个 ``init`` 方法。 这样的 ``init`` 看起来应该是这样::" + +#: ../../library/email.headerregistry.rst:114 +msgid "" +"That is, anything extra that the specialized class puts in to the ``kwds`` " +"dictionary should be removed and handled, and the remaining contents of " +"``kw`` (and ``args``) passed to the ``BaseHeader`` ``init`` method." +msgstr "" +"也就是说,专属类放入 ``kwds`` 字典的任何额外内容都应当被移除和处理,并且 ``kw`` (和 ``args``) 的剩余内容会被传递给 " +"``BaseHeader`` ``init`` 方法。" + +#: ../../library/email.headerregistry.rst:121 +msgid "" +"An \"unstructured\" header is the default type of header in :rfc:`5322`. Any" +" header that does not have a specified syntax is treated as unstructured. " +"The classic example of an unstructured header is the :mailheader:`Subject` " +"header." +msgstr "" +"\"非结构化\" 标头是 :rfc:`5322` 中默认的标头类型。 任何没有指定语法的标头都会被视为是非结构化的。 非结构化标头的经典例子是 " +":mailheader:`Subject` 标头。" + +#: ../../library/email.headerregistry.rst:126 +msgid "" +"In :rfc:`5322`, an unstructured header is a run of arbitrary text in the " +"ASCII character set. :rfc:`2047`, however, has an :rfc:`5322` compatible " +"mechanism for encoding non-ASCII text as ASCII characters within a header " +"value. When a *value* containing encoded words is passed to the " +"constructor, the ``UnstructuredHeader`` parser converts such encoded words " +"into unicode, following the :rfc:`2047` rules for unstructured text. The " +"parser uses heuristics to attempt to decode certain non-compliant encoded " +"words. Defects are registered in such cases, as well as defects for issues " +"such as invalid characters within the encoded words or the non-encoded text." +msgstr "" +"在 :rfc:`5322` 中,非结构化标头是指一段以 ASCII 字符集表示的任意文本。 但是 :rfc:`2047` 具有一个 " +":rfc:`5322` 兼容机制用来将标头值中的非 ASCII 文本编码为 ASCII 字符。 当包含已编码字的 *value* " +"被传递给构造器时,``UnstructuredHeader`` 解析器会按照非结构化文本的 :rfc:`2047` 规则将此类已编码字转换为 " +"unicode。 解析器会使用启发式机制来尝试解码一些不合规的已编码字。 " +"在此种情况下各类缺陷,例如已编码字或未编码文本中的无效字符问题等缺陷将会被注册。" + +#: ../../library/email.headerregistry.rst:136 +msgid "This header type provides no additional attributes." +msgstr "此标头类型未提供附加属性。" + +#: ../../library/email.headerregistry.rst:141 +msgid "" +":rfc:`5322` specifies a very specific format for dates within email headers." +" The ``DateHeader`` parser recognizes that date format, as well as " +"recognizing a number of variant forms that are sometimes found \"in the " +"wild\"." +msgstr "" +":rfc:`5322` 为电子邮件标头内的日期指定了非常明确的格式。 ``DateHeader`` " +"解析器会识别该日期格式,并且也能识别间或出现的一些“不规范”变种形式。" + +#: ../../library/email.headerregistry.rst:146 +#: ../../library/email.headerregistry.rst:188 +msgid "This header type provides the following additional attributes:" +msgstr "这个标头类型提供了以下附加属性。" + +#: ../../library/email.headerregistry.rst:150 +msgid "" +"If the header value can be recognized as a valid date of one form or " +"another, this attribute will contain a :class:`~datetime.datetime` instance " +"representing that date. If the timezone of the input date is specified as " +"``-0000`` (indicating it is in UTC but contains no information about the " +"source timezone), then :attr:`.datetime` will be a naive " +":class:`~datetime.datetime`. If a specific timezone offset is found " +"(including `+0000`), then :attr:`.datetime` will contain an aware " +"``datetime`` that uses :class:`datetime.timezone` to record the timezone " +"offset." +msgstr "" +"如果标头值能被识别为某一种有效的日期形式,此属性将包含一个代表该日期的 :class:`~datetime.datetime` 实例。 " +"如果输入日期的时区被指定为 ``-0000`` (表示为 UTC 但不包含源时区的相关信息),则 :attr:`.datetime` 将为简单型 " +":class:`~datetime.datetime`。 如果找到了特定的时区时差值 (包括 `+0000`),则 :attr:`.datetime` " +"将包含使用 :class:`datetime.timezone` 来记录时区时差时的感知型 ``datetime``。" + +#: ../../library/email.headerregistry.rst:160 +msgid "" +"The ``decoded`` value of the header is determined by formatting the " +"``datetime`` according to the :rfc:`5322` rules; that is, it is set to::" +msgstr "" +"标头的 ``decoded`` 值是由按照 :rfc:`5322` 对 ``datetime`` 进行格式化来确定的;也就是说,它会被设为::" + +#: ../../library/email.headerregistry.rst:165 +msgid "" +"When creating a ``DateHeader``, *value* may be :class:`~datetime.datetime` " +"instance. This means, for example, that the following code is valid and " +"does what one would expect::" +msgstr "" +"当创建 ``DateHeader`` 时,*value* 可以为 :class:`~datetime.datetime` 实例。 " +"例如这意味着以下代码是有效的并能实现人们预期的行为::" + +#: ../../library/email.headerregistry.rst:171 +msgid "" +"Because this is a naive ``datetime`` it will be interpreted as a UTC " +"timestamp, and the resulting value will have a timezone of ``-0000``. Much " +"more useful is to use the :func:`~email.utils.localtime` function from the " +":mod:`~email.utils` module::" +msgstr "" +"因为这是个简单型 ``datetime`` 它将被解读为 UTC 时间戳,并且结果值的时区将为 ``-0000``。 使用来自 " +":mod:`~email.utils` 模块的 :func:`~email.utils.localtime` 函数会更有用::" + +#: ../../library/email.headerregistry.rst:178 +msgid "" +"This example sets the date header to the current time and date using the " +"current timezone offset." +msgstr "这个例子将日期标头设为使用当前时区时差值的当前时间和日期。" + +#: ../../library/email.headerregistry.rst:184 +msgid "" +"Address headers are one of the most complex structured header types. The " +"``AddressHeader`` class provides a generic interface to any address header." +msgstr "地址标头是最复杂的结构化标头类型之一。 ``AddressHeader`` 类提供了适合任何地址标头的泛用型接口。" + +#: ../../library/email.headerregistry.rst:193 +msgid "" +"A tuple of :class:`.Group` objects encoding the addresses and groups found " +"in the header value. Addresses that are not part of a group are represented" +" in this list as single-address ``Groups`` whose " +":attr:`~.Group.display_name` is ``None``." +msgstr "" +"编码了在标头值中找到的地址和分组的 :class:`.Group` 对象的元组。 非分组成员的地址在此列表中表示为 " +":attr:`~.Group.display_name` 为 ``None`` 的单地址 ``Groups``。" + +#: ../../library/email.headerregistry.rst:201 +msgid "" +"A tuple of :class:`.Address` objects encoding all of the individual " +"addresses from the header value. If the header value contains any groups, " +"the individual addresses from the group are included in the list at the " +"point where the group occurs in the value (that is, the list of addresses is" +" \"flattened\" into a one dimensional list)." +msgstr "" +"编码了来自标头值的所有单独地址的 :class:`.Address` 对象的元组。 " +"如果标头值包含任何分组,则来自分组的单个地址将包含在该分组出现在值中的点上列出(也就是说,地址列表会被“展平”为一维列表)。" + +#: ../../library/email.headerregistry.rst:207 +msgid "" +"The ``decoded`` value of the header will have all encoded words decoded to " +"unicode. :class:`~encodings.idna` encoded domain names are also decoded to " +"unicode. The ``decoded`` value is set by :attr:`~str.join`\\ ing the " +":class:`str` value of the elements of the ``groups`` attribute with ``', " +"'``." +msgstr "" +"标头的 ``decoded`` 值将为所有已编码字解码为 unicode 的结果。 :class:`~encodings.idna` " +"编码的域名也将被解码为 unicode。 ``decoded`` 值是通过对 ``groups`` 属性的元素的 :class:`str` 值使用 " +"``', '`` 进行 :attr:`~str.join` 来设置的。" + +#: ../../library/email.headerregistry.rst:213 +msgid "" +"A list of :class:`.Address` and :class:`.Group` objects in any combination " +"may be used to set the value of an address header. ``Group`` objects whose " +"``display_name`` is ``None`` will be interpreted as single addresses, which " +"allows an address list to be copied with groups intact by using the list " +"obtained from the ``groups`` attribute of the source header." +msgstr "" +"可以使用 :class:`.Address` 与 :class:`.Group` 对象的任意组合的列表来设置一个地址标头的值。 " +"``display_name`` 为 ``None`` 的 ``Group`` 对象将被解读为单独地址,这允许一个地址列表可以附带通过使用从源标头的 " +"``groups`` 属性获取的列表而保留原分组。" + +#: ../../library/email.headerregistry.rst:222 +msgid "" +"A subclass of :class:`.AddressHeader` that adds one additional attribute:" +msgstr ":class:`.AddressHeader` 的子类,添加了一个额外的属性:" + +#: ../../library/email.headerregistry.rst:228 +msgid "" +"The single address encoded by the header value. If the header value " +"actually contains more than one address (which would be a violation of the " +"RFC under the default :mod:`~email.policy`), accessing this attribute will " +"result in a :exc:`ValueError`." +msgstr "" +"由标头值编码的单个地址。 如果标头值实际上包含一个以上的地址(这在默认 :mod:`~email.policy` 下将违反 RFC),则访问此属性将导致" +" :exc:`ValueError`。" + +#: ../../library/email.headerregistry.rst:234 +msgid "" +"Many of the above classes also have a ``Unique`` variant (for example, " +"``UniqueUnstructuredHeader``). The only difference is that in the " +"``Unique`` variant, :attr:`~.BaseHeader.max_count` is set to 1." +msgstr "" +"上述类中许多还具有一个 ``Unique`` 变体 (例如 ``UniqueUnstructuredHeader``)。 其唯一差别是在 " +"``Unique`` 变体中 :attr:`~.BaseHeader.max_count` 被设为 1。" + +#: ../../library/email.headerregistry.rst:241 +msgid "" +"There is really only one valid value for the :mailheader:`MIME-Version` " +"header, and that is ``1.0``. For future proofing, this header class " +"supports other valid version numbers. If a version number has a valid value" +" per :rfc:`2045`, then the header object will have non-``None`` values for " +"the following attributes:" +msgstr "" +"实际上 :mailheader:`MIME-Version` 标头只有一个有效的值,即 ``1.0``。 " +"为了将来的扩展,这个标头类还支持其他的有效版本号。 如果一个版本号是 :rfc:`2045` 的有效值,则标头对象的以下属性将具有不为 ``None``" +" 的值:" + +#: ../../library/email.headerregistry.rst:249 +msgid "" +"The version number as a string, with any whitespace and/or comments removed." +msgstr "字符串形式的版本号。 任何空格和/或注释都会被移除。" + +#: ../../library/email.headerregistry.rst:254 +msgid "The major version number as an integer" +msgstr "整数形式的主版本号" + +#: ../../library/email.headerregistry.rst:258 +msgid "The minor version number as an integer" +msgstr "整数形式的次版本号" + +#: ../../library/email.headerregistry.rst:263 +msgid "" +"MIME headers all start with the prefix 'Content-'. Each specific header has" +" a certain value, described under the class for that header. Some can also " +"take a list of supplemental parameters, which have a common format. This " +"class serves as a base for all the MIME headers that take parameters." +msgstr "" +"MIME 标头都以前缀 'Content-' 打头。 每个特定标头都具有特定的值,其描述在该标头的类之中。 " +"有些也可以接受一个具有通用格式的补充形参形表。 这个类被用作所有接受形参的 MIME 标头的基类。" + +#: ../../library/email.headerregistry.rst:270 +msgid "A dictionary mapping parameter names to parameter values." +msgstr "一个将形参名映射到形参值的字典。" + +#: ../../library/email.headerregistry.rst:275 +msgid "" +"A :class:`ParameterizedMIMEHeader` class that handles the " +":mailheader:`Content-Type` header." +msgstr "" +"处理 :mailheader:`Content-Type` 标头的 :class:`ParameterizedMIMEHeader` 类。" + +#: ../../library/email.headerregistry.rst:280 +msgid "The content type string, in the form ``maintype/subtype``." +msgstr "``maintype/subtype`` 形式的内容类型字符串。" + +#: ../../library/email.headerregistry.rst:289 +msgid "" +"A :class:`ParameterizedMIMEHeader` class that handles the " +":mailheader:`Content-Disposition` header." +msgstr "" +"处理 :mailheader:`Content-Disposition` 标头的 :class:`ParameterizedMIMEHeader` 类。" + +#: ../../library/email.headerregistry.rst:294 +msgid "``inline`` and ``attachment`` are the only valid values in common use." +msgstr "``inline`` 和 ``attachment`` 是仅有的常用有效值。" + +#: ../../library/email.headerregistry.rst:299 +msgid "Handles the :mailheader:`Content-Transfer-Encoding` header." +msgstr "处理 :mailheader:`Content-Transfer-Encoding` 标头。" + +#: ../../library/email.headerregistry.rst:303 +msgid "" +"Valid values are ``7bit``, ``8bit``, ``base64``, and ``quoted-printable``. " +"See :rfc:`2045` for more information." +msgstr "" +"可用的有效值为 ``7bit``, ``8bit``, ``base64`` 和 ``quoted-printable``。 更多信息请参阅 " +":rfc:`2045`。" + +#: ../../library/email.headerregistry.rst:312 +msgid "" +"This is the factory used by :class:`~email.policy.EmailPolicy` by default. " +"``HeaderRegistry`` builds the class used to create a header instance " +"dynamically, using *base_class* and a specialized class retrieved from a " +"registry that it holds. When a given header name does not appear in the " +"registry, the class specified by *default_class* is used as the specialized " +"class. When *use_default_map* is ``True`` (the default), the standard " +"mapping of header names to classes is copied in to the registry during " +"initialization. *base_class* is always the last class in the generated " +"class's ``__bases__`` list." +msgstr "" +"这是由 :class:`~email.policy.EmailPolicy` 在默认情况下使用的工厂函数。 ``HeaderRegistry`` 会使用" +" *base_class* 和从它所保存的注册表中获取的专用类来构建用于动态地创建标头实例的类。 当给定的标头名称未在注册表中出现时,则会使用由 " +"*default_class* 所指定的类作为专用类。 当 *use_default_map* 为 ``True`` (默认值) " +"时,则会在初始化期间把将标头名称与类的标准映射拷贝到注册表中。 *base_class* 始终会是所生成类的 ``__bases__`` " +"列表中的最后一个类。" + +#: ../../library/email.headerregistry.rst:322 +msgid "The default mappings are:" +msgstr "默认的映射有:" + +#: ../../library/email.headerregistry.rst:0 +msgid "subject" +msgstr "subject" + +#: ../../library/email.headerregistry.rst:324 +msgid "UniqueUnstructuredHeader" +msgstr "UniqueUnstructuredHeader" + +#: ../../library/email.headerregistry.rst:0 +msgid "date" +msgstr "date" + +#: ../../library/email.headerregistry.rst:325 +#: ../../library/email.headerregistry.rst:327 +msgid "UniqueDateHeader" +msgstr "UniqueDateHeader" + +#: ../../library/email.headerregistry.rst:0 +msgid "resent-date" +msgstr "resent-date" + +#: ../../library/email.headerregistry.rst:326 +msgid "DateHeader" +msgstr "DateHeader" + +#: ../../library/email.headerregistry.rst:0 +msgid "orig-date" +msgstr "orig-date" + +#: ../../library/email.headerregistry.rst:0 +msgid "sender" +msgstr "sender" + +#: ../../library/email.headerregistry.rst:328 +msgid "UniqueSingleAddressHeader" +msgstr "UniqueSingleAddressHeader" + +#: ../../library/email.headerregistry.rst:0 +msgid "resent-sender" +msgstr "resent-sender" + +#: ../../library/email.headerregistry.rst:329 +msgid "SingleAddressHeader" +msgstr "SingleAddressHeader" + +#: ../../library/email.headerregistry.rst:0 +msgid "to" +msgstr "to" + +#: ../../library/email.headerregistry.rst:330 +#: ../../library/email.headerregistry.rst:332 +#: ../../library/email.headerregistry.rst:334 +#: ../../library/email.headerregistry.rst:336 +#: ../../library/email.headerregistry.rst:338 +msgid "UniqueAddressHeader" +msgstr "UniqueAddressHeader" + +#: ../../library/email.headerregistry.rst:0 +msgid "resent-to" +msgstr "resent-to" + +#: ../../library/email.headerregistry.rst:331 +#: ../../library/email.headerregistry.rst:333 +#: ../../library/email.headerregistry.rst:335 +#: ../../library/email.headerregistry.rst:337 +msgid "AddressHeader" +msgstr "AddressHeader" + +#: ../../library/email.headerregistry.rst:0 +msgid "cc" +msgstr "cc" + +#: ../../library/email.headerregistry.rst:0 +msgid "resent-cc" +msgstr "resent-cc" + +#: ../../library/email.headerregistry.rst:0 +msgid "bcc" +msgstr "bcc" + +#: ../../library/email.headerregistry.rst:0 +msgid "resent-bcc" +msgstr "resent-bcc" + +#: ../../library/email.headerregistry.rst:0 +msgid "from" +msgstr "from" + +#: ../../library/email.headerregistry.rst:0 +msgid "resent-from" +msgstr "resent-from" + +#: ../../library/email.headerregistry.rst:0 +msgid "reply-to" +msgstr "reply-to" + +#: ../../library/email.headerregistry.rst:0 +msgid "mime-version" +msgstr "mime-version" + +#: ../../library/email.headerregistry.rst:339 +msgid "MIMEVersionHeader" +msgstr "MIMEVersionHeader" + +#: ../../library/email.headerregistry.rst:0 +msgid "content-type" +msgstr "content-type" + +#: ../../library/email.headerregistry.rst:340 +msgid "ContentTypeHeader" +msgstr "ContentTypeHeader" + +#: ../../library/email.headerregistry.rst:0 +msgid "content-disposition" +msgstr "content-disposition" + +#: ../../library/email.headerregistry.rst:341 +msgid "ContentDispositionHeader" +msgstr "ContentDispositionHeader" + +#: ../../library/email.headerregistry.rst:0 +msgid "content-transfer-encoding" +msgstr "content-transfer-encoding" + +#: ../../library/email.headerregistry.rst:342 +msgid "ContentTransferEncodingHeader" +msgstr "ContentTransferEncodingHeader" + +#: ../../library/email.headerregistry.rst:0 +msgid "message-id" +msgstr "message-id" + +#: ../../library/email.headerregistry.rst:343 +msgid "MessageIDHeader" +msgstr "MessageIDHeader" + +#: ../../library/email.headerregistry.rst:345 +msgid "``HeaderRegistry`` has the following methods:" +msgstr "``HeaderRegistry`` 具有下列方法:" + +#: ../../library/email.headerregistry.rst:350 +msgid "" +"*name* is the name of the header to be mapped. It will be converted to " +"lower case in the registry. *cls* is the specialized class to be used, " +"along with *base_class*, to create the class used to instantiate headers " +"that match *name*." +msgstr "" +"*name* 是要映射的标头名称。 它将在注册表中被转换为小写形式。 *cls* 是要与 *base_class* 一起被用来创建用于实例化与 " +"*name* 相匹配的标头的类的专用类。" + +#: ../../library/email.headerregistry.rst:358 +msgid "Construct and return a class to handle creating a *name* header." +msgstr "构造并返回一个类来处理 *name* 标头的创建。" + +#: ../../library/email.headerregistry.rst:363 +msgid "" +"Retrieves the specialized header associated with *name* from the registry " +"(using *default_class* if *name* does not appear in the registry) and " +"composes it with *base_class* to produce a class, calls the constructed " +"class's constructor, passing it the same argument list, and finally returns " +"the class instance created thereby." +msgstr "" +"从注册表获得与 *name* 相关联的专用标头 (如果 *name* 未在注册表中出现则使用 *default_class*) 并将其与 " +"*base_class* 相组合以产生类,调用被构造类的构造器,传入相同的参数列表,并最终返回由此创建的类实例。" + +#: ../../library/email.headerregistry.rst:370 +msgid "" +"The following classes are the classes used to represent data parsed from " +"structured headers and can, in general, be used by an application program to" +" construct structured values to assign to specific headers." +msgstr "以下的类是用于表示从结构化标头解析的数据的类,并且通常会由应用程序使用以构造结构化的值并赋给特定的标头。" + +#: ../../library/email.headerregistry.rst:377 +msgid "" +"The class used to represent an email address. The general form of an " +"address is::" +msgstr "用于表示电子邮件地址的类。 地址的一般形式为::" + +#: ../../library/email.headerregistry.rst:382 +msgid "or::" +msgstr "或者:" + +#: ../../library/email.headerregistry.rst:386 +msgid "" +"where each part must conform to specific syntax rules spelled out in " +":rfc:`5322`." +msgstr "其中每个部分都必须符合在 :rfc:`5322` 中阐述的特定语法规则。" + +#: ../../library/email.headerregistry.rst:389 +msgid "" +"As a convenience *addr_spec* can be specified instead of *username* and " +"*domain*, in which case *username* and *domain* will be parsed from the " +"*addr_spec*. An *addr_spec* must be a properly RFC quoted string; if it is " +"not ``Address`` will raise an error. Unicode characters are allowed and " +"will be property encoded when serialized. However, per the RFCs, unicode is" +" *not* allowed in the username portion of the address." +msgstr "" +"为了方便起见可以指定 *addr_spec* 来替代 *username* 和 *domain*,在此情况下 *username* 和 *domain*" +" 将从 *addr_spec* 中解析。 *addr_spec* 应当是一个正确地引用了 RFC 的字符串;如果它不是 ``Address`` " +"则将引发错误。 Unicode 字符也允许使用并将在序列化时被正确地编码。 但是,根据 RFC,地址的 username 部分 *不允许* 有 " +"unicode。" + +#: ../../library/email.headerregistry.rst:398 +msgid "" +"The display name portion of the address, if any, with all quoting removed. " +"If the address does not have a display name, this attribute will be an empty" +" string." +msgstr "地址的显示名称部分(如果有的话)并去除所有引用项。 如果地址没有显示名称,则此属性将为空字符串。" + +#: ../../library/email.headerregistry.rst:404 +msgid "The ``username`` portion of the address, with all quoting removed." +msgstr "地址的 ``username`` 部分,去除所有引用项。" + +#: ../../library/email.headerregistry.rst:408 +msgid "The ``domain`` portion of the address." +msgstr "地址的 ``domain`` 部分。" + +#: ../../library/email.headerregistry.rst:412 +msgid "" +"The ``username@domain`` portion of the address, correctly quoted for use as " +"a bare address (the second form shown above). This attribute is not " +"mutable." +msgstr "地址的 ``username@domain`` 部分,经过正确引用处理以作为纯地址使用(上面显示的第二种形式)。 此属性不可变。" + +#: ../../library/email.headerregistry.rst:418 +msgid "" +"The ``str`` value of the object is the address quoted according to " +":rfc:`5322` rules, but with no Content Transfer Encoding of any non-ASCII " +"characters." +msgstr "" +"对象的 ``str`` 值是根据 :rfc:`5322` 规则进行引用处理的地址,但不带任何非 ASCII 字符的 Content Transfer " +"Encoding。" + +#: ../../library/email.headerregistry.rst:422 +msgid "" +"To support SMTP (:rfc:`5321`), ``Address`` handles one special case: if " +"``username`` and ``domain`` are both the empty string (or ``None``), then " +"the string value of the ``Address`` is ``<>``." +msgstr "" +"为了支持 SMTP (:rfc:`5321`),``Address`` 会处理一种特殊情况:如果 ``username`` 和 ``domain`` " +"均为空字符串 (或为 ``None``),则 ``Address`` 的字符串值为 ``<>``。" + +#: ../../library/email.headerregistry.rst:429 +msgid "" +"The class used to represent an address group. The general form of an " +"address group is::" +msgstr "用于表示地址组的类。 地址组的一般形式为::" + +#: ../../library/email.headerregistry.rst:434 +msgid "" +"As a convenience for processing lists of addresses that consist of a mixture" +" of groups and single addresses, a ``Group`` may also be used to represent " +"single addresses that are not part of a group by setting *display_name* to " +"``None`` and providing a list of the single address as *addresses*." +msgstr "" +"作为处理由组和单个地址混合构成的列表的便捷方式,``Group`` 也可以通过将 *display_name* 设为 ``None`` " +"以用来表示不是某个组的一部分的单独地址并提供单独地址的列表作为 *addresses*。" + +#: ../../library/email.headerregistry.rst:441 +msgid "" +"The ``display_name`` of the group. If it is ``None`` and there is exactly " +"one ``Address`` in ``addresses``, then the ``Group`` represents a single " +"address that is not in a group." +msgstr "" +"组的 ``display_name``。 如果其为 ``None`` 并且恰好有一个 ``Address`` 在 ``addresses`` 中,则 " +"``Group`` 表示一个不在某个组中的单独地址。" + +#: ../../library/email.headerregistry.rst:447 +msgid "" +"A possibly empty tuple of :class:`.Address` objects representing the " +"addresses in the group." +msgstr "一个可能为空的表示组中地址的包含 :class:`.Address` 对象的元组。" + +#: ../../library/email.headerregistry.rst:452 +msgid "" +"The ``str`` value of a ``Group`` is formatted according to :rfc:`5322`, but " +"with no Content Transfer Encoding of any non-ASCII characters. If " +"``display_name`` is none and there is a single ``Address`` in the " +"``addresses`` list, the ``str`` value will be the same as the ``str`` of " +"that single ``Address``." +msgstr "" +"``Group`` 的 ``str`` 值会根据 :rfc:`5322` 进行格式化,但不带任何非 ASCII 字符的 Content Transfer" +" Encoding。 如果 ``display_name`` 为空值且只有一个单独 ``Address`` 在 ``addresses`` 列表中,则 " +"``str`` 值将与该单独 ``Address`` 的 ``str`` 相同。" + +#: ../../library/email.headerregistry.rst:460 +msgid "Footnotes" +msgstr "备注" + +#: ../../library/email.headerregistry.rst:461 +msgid "" +"Originally added in 3.3 as a :term:`provisional module `" +msgstr "最初在 3.3 中作为 :term:`暂定模块 ` 添加" diff --git a/library/email.iterators.po b/library/email.iterators.po new file mode 100644 index 000000000..c19b0f0ea --- /dev/null +++ b/library/email.iterators.po @@ -0,0 +1,107 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) 2001-2024, Python Software Foundation +# This file is distributed under the same license as the Python package. +# FIRST AUTHOR , YEAR. +# +# Translators: +# Freesand Leo , 2019 +# Rafael Fontenelle , 2024 +# +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: Python 3.9\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2024-02-16 21:12+0000\n" +"PO-Revision-Date: 2017-02-16 23:08+0000\n" +"Last-Translator: Rafael Fontenelle , 2024\n" +"Language-Team: Chinese (China) (https://app.transifex.com/python-doc/teams/5390/zh_CN/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: zh_CN\n" +"Plural-Forms: nplurals=1; plural=0;\n" + +#: ../../library/email.iterators.rst:2 +msgid ":mod:`email.iterators`: Iterators" +msgstr ":mod:`email.iterators`: 迭代器" + +#: ../../library/email.iterators.rst:7 +msgid "**Source code:** :source:`Lib/email/iterators.py`" +msgstr "**源代码:** :source:`Lib/email/iterators.py`" + +#: ../../library/email.iterators.rst:11 +msgid "" +"Iterating over a message object tree is fairly easy with the " +":meth:`Message.walk ` method. The " +":mod:`email.iterators` module provides some useful higher level iterations " +"over message object trees." +msgstr "" +"通过 :meth:`Message.walk ` 方法来迭代消息对象树是相当容易的。 " +":mod:`email.iterators` 模块提供了一些适用于消息对象树的高层级迭代器。" + +#: ../../library/email.iterators.rst:19 +msgid "" +"This iterates over all the payloads in all the subparts of *msg*, returning " +"the string payloads line-by-line. It skips over all the subpart headers, " +"and it skips over any subpart with a payload that isn't a Python string. " +"This is somewhat equivalent to reading the flat text representation of the " +"message from a file using :meth:`~io.TextIOBase.readline`, skipping over all" +" the intervening headers." +msgstr "" +"此函数会迭代 *msg* 的所有子部分中的所有载荷,逐行返回字符串载荷。 它会跳过所有子部分的标头,并且它也会跳过任何包含不为 Python " +"字符串的载荷的子部分。 这基本上等价于使用 :meth:`~io.TextIOBase.readline` " +"从一个文件读取消息的纯文本表示形式,并跳过所有中间的标头。" + +#: ../../library/email.iterators.rst:26 +msgid "" +"Optional *decode* is passed through to :meth:`Message.get_payload " +"`." +msgstr "" +"可选的 *decode* 会被传递给 :meth:`Message.get_payload " +"`。" + +#: ../../library/email.iterators.rst:32 +msgid "" +"This iterates over all the subparts of *msg*, returning only those subparts " +"that match the MIME type specified by *maintype* and *subtype*." +msgstr "" +"此函数会迭代 *msg* 的所有子部分,只返回其中与 *maintype* 和 *subtype* 所指定的 MIME 类型相匹配的子部分。" + +#: ../../library/email.iterators.rst:35 +msgid "" +"Note that *subtype* is optional; if omitted, then subpart MIME type matching" +" is done only with the main type. *maintype* is optional too; it defaults " +"to :mimetype:`text`." +msgstr "" +"请注意 *subtype* 是可选项;如果省略,则仅使用主类型来进行子部分 MIME 类型的匹配。 *maintype* 也是可选项;它的默认值为 " +":mimetype:`text`。" + +#: ../../library/email.iterators.rst:39 +msgid "" +"Thus, by default :func:`typed_subpart_iterator` returns each subpart that " +"has a MIME type of :mimetype:`text/\\*`." +msgstr "" +"因此,在默认情况下 :func:`typed_subpart_iterator` 会返回每一个 MIME 类型为 " +":mimetype:`text/\\*` 的子部分。" + +#: ../../library/email.iterators.rst:43 +msgid "" +"The following function has been added as a useful debugging tool. It should" +" *not* be considered part of the supported public interface for the package." +msgstr "增加了以下函数作为有用的调试工具。 它 *不应当* 被视为该包所支持的公共接口的组成部分。" + +#: ../../library/email.iterators.rst:48 +msgid "" +"Prints an indented representation of the content types of the message object" +" structure. For example:" +msgstr "打印消息对象结构的内容类型的缩进表示形式。 例如:" + +#: ../../library/email.iterators.rst:81 +msgid "" +"Optional *fp* is a file-like object to print the output to. It must be " +"suitable for Python's :func:`print` function. *level* is used internally. " +"*include_default*, if true, prints the default type as well." +msgstr "" +"可选项 *fp* 是一个作为打印输出目标的文件型对象。 它必须适用于 Python 的 :func:`print` 函数。 *level* " +"是供内部使用的。 *include_default* 如果为真值,则会同时打印默认类型。" diff --git a/library/email.message.po b/library/email.message.po new file mode 100644 index 000000000..772845f1f --- /dev/null +++ b/library/email.message.po @@ -0,0 +1,1050 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) 2001-2024, Python Software Foundation +# This file is distributed under the same license as the Python package. +# FIRST AUTHOR , YEAR. +# +# Translators: +# cdarlint , 2018 +# Kevin Deng , 2020 +# Freesand Leo , 2021 +# Rafael Fontenelle , 2024 +# +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: Python 3.9\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2024-01-12 22:01+0000\n" +"PO-Revision-Date: 2017-02-16 23:08+0000\n" +"Last-Translator: Rafael Fontenelle , 2024\n" +"Language-Team: Chinese (China) (https://app.transifex.com/python-doc/teams/5390/zh_CN/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: zh_CN\n" +"Plural-Forms: nplurals=1; plural=0;\n" + +#: ../../library/email.message.rst:2 +msgid ":mod:`email.message`: Representing an email message" +msgstr ":mod:`email.message`: 表示一封电子邮件信息" + +#: ../../library/email.message.rst:10 +msgid "**Source code:** :source:`Lib/email/message.py`" +msgstr "**源代码:** :source:`Lib/email/message.py`" + +#: ../../library/email.message.rst:14 +msgid "[1]_" +msgstr "[1]_" + +#: ../../library/email.message.rst:16 +msgid "" +"The central class in the :mod:`email` package is the :class:`EmailMessage` " +"class, imported from the :mod:`email.message` module. It is the base class " +"for the :mod:`email` object model. :class:`EmailMessage` provides the core " +"functionality for setting and querying header fields, for accessing message " +"bodies, and for creating or modifying structured messages." +msgstr "" +"位于 :mod:`email` 包的中心的类就是 :class:`EmailMessage` 类。这个类导入自 :mod:`email.message`" +" 模块。它是 :mod:`email` 对象模型的基类。:class:`EmailMessage` " +"为设置和查询头字段内容、访问信息体的内容、以及创建和修改结构化信息提供了核心功能。" + +#: ../../library/email.message.rst:22 +msgid "" +"An email message consists of *headers* and a *payload* (which is also " +"referred to as the *content*). Headers are :rfc:`5322` or :rfc:`6532` style" +" field names and values, where the field name and value are separated by a " +"colon. The colon is not part of either the field name or the field value. " +"The payload may be a simple text message, or a binary object, or a " +"structured sequence of sub-messages each with their own set of headers and " +"their own payload. The latter type of payload is indicated by the message " +"having a MIME type such as :mimetype:`multipart/\\*` or " +":mimetype:`message/rfc822`." +msgstr "" +"一份电子邮件信息由 *标头* 和 *载荷* (又被称为 *内容* )组成。 标头遵循 :rfc:`5322` 或者 :rfc:`6532` " +"风格的字段名和值,字段名和字段值之间由一个冒号隔开。 " +"这个冒号既不属于字段名,也不属于字段值。信息的载荷可能是一段简单的文字消息,也可能是一个二进制的对象,更可能是由多个拥有各自标头和载荷的子信息组成的结构化子信息序列。" +" 对于后者类型的载荷,信息的 MIME 类型将会被指明为诸如 :mimetype:`multipart/\\*` 或 " +":mimetype:`message/rfc822` 的类型。" + +#: ../../library/email.message.rst:31 +msgid "" +"The conceptual model provided by an :class:`EmailMessage` object is that of " +"an ordered dictionary of headers coupled with a *payload* that represents " +"the :rfc:`5322` body of the message, which might be a list of " +"sub-``EmailMessage`` objects. In addition to the normal dictionary methods " +"for accessing the header names and values, there are methods for accessing " +"specialized information from the headers (for example the MIME content " +"type), for operating on the payload, for generating a serialized version of " +"the message, and for recursively walking over the object tree." +msgstr "" +":class:`EmailMessage` 对象所提供的抽象概念模型是一个头字段组成的有序字典加一个代表 :rfc:`5322` 标准的信息体的 " +"*载荷* 。 载荷有可能是一系列子 ``EmailMessage`` " +"对象的列表。你除了可以通过一般的字典方法来访问头字段名和值,还可以使用特制方法来访问头的特定字段(比如说 MIME " +"内容类型字段)、操纵载荷、生成信息的序列化版本、递归遍历对象树。" + +#: ../../library/email.message.rst:40 +msgid "" +"The :class:`EmailMessage` dictionary-like interface is indexed by the header" +" names, which must be ASCII values. The values of the dictionary are " +"strings with some extra methods. Headers are stored and returned in case-" +"preserving form, but field names are matched case-insensitively. Unlike a " +"real dict, there is an ordering to the keys, and there can be duplicate " +"keys. Additional methods are provided for working with headers that have " +"duplicate keys." +msgstr "" +":class:`EmailMessage` " +"的类字典接口的字典索引是头字段名,头字段名必须是ASCII值。字典值是带有一些附加方法的字符串。虽然头字段的存储和获取都是保留其原始大小写的,但是字段名的匹配是大小写不敏感的。与真正的字典不同,键与键之间不但存在顺序关系,还可以重复。我们提供了额外的方法来处理含有重复键的头。" + +#: ../../library/email.message.rst:47 +msgid "" +"The *payload* is either a string or bytes object, in the case of simple " +"message objects, or a list of :class:`EmailMessage` objects, for MIME " +"container documents such as :mimetype:`multipart/\\*` and " +":mimetype:`message/rfc822` message objects." +msgstr "" +"*载荷* 是多样的。对于简单的信息对象,它是字符串或字节对象;对于诸如 :mimetype:`multipart/\\*` 和 " +":mimetype:`message/rfc822` 信息对象的 MIME 容器文档,它是一个 :class:`EmailMessage` 对象列表。" + +#: ../../library/email.message.rst:55 +msgid "" +"If *policy* is specified use the rules it specifies to update and serialize " +"the representation of the message. If *policy* is not set, use the " +":class:`~email.policy.default` policy, which follows the rules of the email " +"RFCs except for line endings (instead of the RFC mandated ``\\r\\n``, it " +"uses the Python standard ``\\n`` line endings). For more information see " +"the :mod:`~email.policy` documentation." +msgstr "" +"如果指定了 *policy* ,消息将由这个 *policy* 所指定的规则来更新和序列化信息的表达。如果没有指定 *policy* ,其将默认使用 " +":class:`~email.policy.default` 策略。这个策略遵循电子邮件的RFC标准,除了行终止符号(RFC要求使用 " +"``\\r\\n`` ,此策略使用Python标准的 ``\\n`` 行终止符)。请前往 :mod:`~email.policy` 的文档获取更多信息。" + +#: ../../library/email.message.rst:64 +msgid "" +"Return the entire message flattened as a string. When optional *unixfrom* " +"is true, the envelope header is included in the returned string. *unixfrom*" +" defaults to ``False``. For backward compatibility with the base " +":class:`~email.message.Message` class *maxheaderlen* is accepted, but " +"defaults to ``None``, which means that by default the line length is " +"controlled by the :attr:`~email.policy.EmailPolicy.max_line_length` of the " +"policy. The *policy* argument may be used to override the default policy " +"obtained from the message instance. This can be used to control some of the" +" formatting produced by the method, since the specified *policy* will be " +"passed to the :class:`~email.generator.Generator`." +msgstr "" +"以一段字符串的形式返回整个消息对象。 若可选的 *unixform* 参数为真,返回的字符串会包含信封头。 *unixform* 的默认值是 " +"``False``。 为了保持与基类 :class:`~email.message.Message` 的兼容性,*maxheaderlen* " +"是被接受的,但是其默认值是 ``None``。 这个默认值表示行长度由策略的 " +":attr:`~email.policy.EmailPolicy.max_line_length` 属性所控制。从信息实例所获取到的策略可以通过 " +"*policy* 参数重写。 这样可以对该方法所产生的输出进行略微的控制,因为指定的 *policy* 会被传递到 " +":class:`~email.generator.Generator` 当中。" + +#: ../../library/email.message.rst:76 ../../library/email.message.rst:114 +msgid "" +"Flattening the message may trigger changes to the :class:`EmailMessage` if " +"defaults need to be filled in to complete the transformation to a string " +"(for example, MIME boundaries may be generated or modified)." +msgstr "" +"扁平化信息可能会对 :class:`EmailMessage` 做出修改。这是因为为了完成向字符串的转换,一些内容需要使用默认值填入(举个例子,MIME" +" 边界字段可能会被生成或被修改)。" + +#: ../../library/email.message.rst:80 +msgid "" +"Note that this method is provided as a convenience and may not be the most " +"useful way to serialize messages in your application, especially if you are " +"dealing with multiple messages. See :class:`email.generator.Generator` for " +"a more flexible API for serializing messages. Note also that this method is" +" restricted to producing messages serialized as \"7 bit clean\" when " +":attr:`~email.policy.EmailPolicy.utf8` is ``False``, which is the default." +msgstr "" +"请注意,这个方法是为了便利而提供,不一定是适合你的应用程序的最理想的序列化信息的方法。这在你处理多封信息的时候尤甚。如果你需要使用更加灵活的API来序列化信息,请参见" +" :class:`email.generator.Generator` 。同时请注意,当 " +":attr:`~email.policy.EmailPolicy.utf8` 属性为其默认值 ``False`` 的时候,本方法将限制其行为为生成以“7" +" bit clean”方式序列化的信息。" + +#: ../../library/email.message.rst:88 +msgid "" +"the default behavior when *maxheaderlen* is not specified was changed from " +"defaulting to 0 to defaulting to the value of *max_line_length* from the " +"policy." +msgstr "*maxheaderlen* 没有被指定时的默认行为从默认为0修改为默认为策略的 *max_line_length* 值。" + +#: ../../library/email.message.rst:95 +msgid "" +"Equivalent to ``as_string(policy=self.policy.clone(utf8=True))``. Allows " +"``str(msg)`` to produce a string containing the serialized message in a " +"readable format." +msgstr "" +"与 ``as_string(policy=self.policy.clone(utf8=True))`` 等价。这将让 ``str(msg)`` " +"产生的字符串包含人类可读的的序列化信息内容。" + +#: ../../library/email.message.rst:99 +msgid "" +"the method was changed to use ``utf8=True``, thus producing an " +":rfc:`6531`-like message representation, instead of being a direct alias for" +" :meth:`as_string`." +msgstr "" +"本方法开始使用 ``utf8=True`` ,而非 :meth:`as_string` 的直接替身。使用 ``utf8=True`` 会产生类似于 " +":rfc:`6531` 的信息表达。" + +#: ../../library/email.message.rst:106 +msgid "" +"Return the entire message flattened as a bytes object. When optional " +"*unixfrom* is true, the envelope header is included in the returned string." +" *unixfrom* defaults to ``False``. The *policy* argument may be used to " +"override the default policy obtained from the message instance. This can be " +"used to control some of the formatting produced by the method, since the " +"specified *policy* will be passed to the " +":class:`~email.generator.BytesGenerator`." +msgstr "" +"以字节串对象的形式返回整个扁平化后的消息。 当可选的 *unixfrom* 为真值时,返回的字符串会包含信封标头。 *unixfrom* 的默认值为 " +"``False``。 *policy* 参数可被用于覆盖从消息实例获取的默认 policy。 这可被用来控制该方法所产生的部分格式效果,因为指定的 " +"*policy* 将被传递给 :class:`~email.generator.BytesGenerator`。" + +#: ../../library/email.message.rst:118 +msgid "" +"Note that this method is provided as a convenience and may not be the most " +"useful way to serialize messages in your application, especially if you are " +"dealing with multiple messages. See :class:`email.generator.BytesGenerator`" +" for a more flexible API for serializing messages." +msgstr "" +"请注意,这个方法是为了便利而提供,不一定是适合你的应用程序的最理想的序列化信息的方法。这在你处理多封信息的时候尤甚。如果你需要使用更加灵活的API来序列化信息,请参见" +" :class:`email.generator.BytesGenerator` 。" + +#: ../../library/email.message.rst:127 +msgid "" +"Equivalent to :meth:`.as_bytes()`. Allows ``bytes(msg)`` to produce a bytes" +" object containing the serialized message." +msgstr "与 :meth:`.as_bytes()` 等价。这将让 ``bytes(msg)`` 产生一个包含序列化信息内容的字节序列对象。" + +#: ../../library/email.message.rst:133 +msgid "" +"Return ``True`` if the message's payload is a list of sub-\\ " +":class:`EmailMessage` objects, otherwise return ``False``. When " +":meth:`is_multipart` returns ``False``, the payload should be a string " +"object (which might be a CTE encoded binary payload). Note that " +":meth:`is_multipart` returning ``True`` does not necessarily mean that " +"\"msg.get_content_maintype() == 'multipart'\" will return the ``True``. For " +"example, ``is_multipart`` will return ``True`` when the " +":class:`EmailMessage` is of type ``message/rfc822``." +msgstr "" +"如果该信息的载荷是一个子 :class:`EmailMessage` 对象列表,返回 ``True`` ;否则返回 ``False`` 。在 " +":meth:`is_multipart` 返回 ``True`` " +"的场合下,载荷应当是一个字符串对象(有可能是一个使用了内容传输编码进行编码的二进制载荷)。请注意, :meth:`is_multipart` 返回 " +"``True`` 不意味着 ``msg.get_content_maintype() == 'multipart'`` 也会返回 ``True`` " +"。举个例子, ``is_multipart`` 在 :class:`EmailMessage` 是 ``message/rfc822`` " +"类型的信息的情况下,其返回值也是 ``True`` 。" + +#: ../../library/email.message.rst:145 +msgid "" +"Set the message's envelope header to *unixfrom*, which should be a string. " +"(See :class:`~mailbox.mboxMessage` for a brief description of this header.)" +msgstr "" +"将信息的信封头设置为 *unixform* ,这应当是一个字符串。(在 :class:`~mailbox.mboxMessage` " +"中有关于这个头的一段简短介绍。)" + +#: ../../library/email.message.rst:152 +msgid "" +"Return the message's envelope header. Defaults to ``None`` if the envelope " +"header was never set." +msgstr "返回消息的信封头。如果信封头从未被设置过,默认返回 ``None`` 。" + +#: ../../library/email.message.rst:156 +msgid "" +"The following methods implement the mapping-like interface for accessing the" +" message's headers. Note that there are some semantic differences between " +"these methods and a normal mapping (i.e. dictionary) interface. For " +"example, in a dictionary there are no duplicate keys, but here there may be " +"duplicate message headers. Also, in dictionaries there is no guaranteed " +"order to the keys returned by :meth:`keys`, but in an :class:`EmailMessage` " +"object, headers are always returned in the order they appeared in the " +"original message, or in which they were added to the message later. Any " +"header deleted and then re-added is always appended to the end of the header" +" list." +msgstr "" +"以下方法实现了对信息的头字段进行访问的类映射接口。请留意,只是类映射接口,这与平常的映射接口(比如说字典映射)有一些语义上的不同。举个例子,在一个字典当中,键之间不可重复,但是信息头字段是可以重复的。不光如此,在字典当中调用" +" :meth:`keys` 方法返回的结果,其顺序没有保证;但是在一个 :class:`EmailMessage` " +"对象当中,返回的头字段永远以其在原信息当中出现的顺序,或以其加入信息的顺序为序。任何删了后又重新加回去的头字段总是添加在当时列表的末尾。" + +#: ../../library/email.message.rst:167 +msgid "" +"These semantic differences are intentional and are biased toward convenience" +" in the most common use cases." +msgstr "这些语义上的不同是刻意而为之的,是出于在绝大多数常见使用情景中都方便的初衷下设计的。" + +#: ../../library/email.message.rst:170 +msgid "" +"Note that in all cases, any envelope header present in the message is not " +"included in the mapping interface." +msgstr "请注意在任何情况下,消息当中的任何封包标头都不会包含在映射接口当中。" + +#: ../../library/email.message.rst:176 +msgid "Return the total number of headers, including duplicates." +msgstr "返回标头的总数,包括重复项。" + +#: ../../library/email.message.rst:181 +msgid "" +"Return ``True`` if the message object has a field named *name*. Matching is " +"done without regard to case and *name* does not include the trailing colon." +" Used for the ``in`` operator. For example::" +msgstr "" +"如果消息对象中有一个名为 *name* 的字段,其返回值为 ``True`` 。匹配无视大小写差异, *name* 也不包含末尾的的冒号。 " +"``in`` 操作符的实现中用到了这个方法,比如说:" + +#: ../../library/email.message.rst:191 +msgid "" +"Return the value of the named header field. *name* does not include the " +"colon field separator. If the header is missing, ``None`` is returned; a " +":exc:`KeyError` is never raised." +msgstr "" +"返回头字段名对应的字段值。 *name* 不含冒号分隔符。如果字段未找到,返回 ``None`` 。 :exc:`KeyError` 异常永不抛出。" + +#: ../../library/email.message.rst:195 +msgid "" +"Note that if the named field appears more than once in the message's " +"headers, exactly which of those field values will be returned is undefined." +" Use the :meth:`get_all` method to get the values of all the extant headers" +" named *name*." +msgstr "" +"请注意,如果对应名字的字段找到了多个,具体返回哪个字段值是未定义的。请使用 :meth:`get_all` 方法获取当前匹配字段名的所有字段值。" + +#: ../../library/email.message.rst:200 +msgid "" +"Using the standard (non-``compat32``) policies, the returned value is an " +"instance of a subclass of :class:`email.headerregistry.BaseHeader`." +msgstr "" +"使用标准策略(非 ``compat32``)时,返回值是 :class:`email.headerregistry.BaseHeader` " +"的某个子类的一个实例。" + +#: ../../library/email.message.rst:206 +msgid "" +"Add a header to the message with field name *name* and value *val*. The " +"field is appended to the end of the message's existing headers." +msgstr "在信息头中添加名为 *name* 值为 *val* 的字段。这个字段会被添加在已有字段列表的结尾处。" + +#: ../../library/email.message.rst:209 +msgid "" +"Note that this does *not* overwrite or delete any existing header with the " +"same name. If you want to ensure that the new header is the only one " +"present in the message with field name *name*, delete the field first, " +"e.g.::" +msgstr "" +"请注意,这个方法 *既不会* 覆盖 *也不会* 删除任何字段名重名的已有字段。如果你确实想保证新字段是整个信息头当中唯一拥有 *name* " +"字段名的字段,你需要先把旧字段删除。例如:" + +#: ../../library/email.message.rst:216 +msgid "" +"If the :mod:`policy` defines certain headers to be unique (as the standard " +"policies do), this method may raise a :exc:`ValueError` when an attempt is " +"made to assign a value to such a header when one already exists. This " +"behavior is intentional for consistency's sake, but do not depend on it as " +"we may choose to make such assignments do an automatic deletion of the " +"existing header in the future." +msgstr "" +"如果 :mod:`policy` " +"明确要求某些字段是唯一的(至少标准策略就有这么做),对这些字段在已有同名字段的情况下仍然调用此方法尝试为字段名赋值会引发 " +":exc:`ValueError` " +"异常。这是为了一致性而刻意设计出的行为,不过我们随时可能会突然觉得“还是在这种情况下自动把旧字段删除比较好吧”而把这个行为改掉,所以不要以为这是特性而依赖这个行为。" + +#: ../../library/email.message.rst:226 +msgid "" +"Delete all occurrences of the field with name *name* from the message's " +"headers. No exception is raised if the named field isn't present in the " +"headers." +msgstr "删除信息头当中字段名匹配 *name* 的所有字段。如果匹配指定名称的字段没有找到,也不会抛出任何异常。" + +#: ../../library/email.message.rst:233 +msgid "Return a list of all the message's header field names." +msgstr "以列表形式返回消息头中所有的字段名。" + +#: ../../library/email.message.rst:238 +msgid "Return a list of all the message's field values." +msgstr "以列表形式返回消息头中所有的字段值。" + +#: ../../library/email.message.rst:243 +msgid "" +"Return a list of 2-tuples containing all the message's field headers and " +"values." +msgstr "以二元元组的列表形式返回消息头中所有的字段名和字段值。" + +#: ../../library/email.message.rst:249 +msgid "" +"Return the value of the named header field. This is identical to " +":meth:`__getitem__` except that optional *failobj* is returned if the named " +"header is missing (*failobj* defaults to ``None``)." +msgstr "" +"返回对应字段名的字段值。这个方法与 :meth:`__getitem__` 是一样的,只不过如果对应字段名的字段没有找到,该方法会返回 " +"*failobj* 。这个参数是可选的(默认值为 ``None`` )。" + +#: ../../library/email.message.rst:254 +msgid "Here are some additional useful header related methods:" +msgstr "以下是一些与头有关的更多有用方法:" + +#: ../../library/email.message.rst:259 +msgid "" +"Return a list of all the values for the field named *name*. If there are no " +"such named headers in the message, *failobj* is returned (defaults to " +"``None``)." +msgstr "返回字段名为 *name* 的所有字段值的列表。如果信息内不存在匹配的字段,返回 *failobj* (其默认值为 ``None`` )。" + +#: ../../library/email.message.rst:266 +msgid "" +"Extended header setting. This method is similar to :meth:`__setitem__` " +"except that additional header parameters can be provided as keyword " +"arguments. *_name* is the header field to add and *_value* is the *primary*" +" value for the header." +msgstr "" +"高级头字段设定。这个方法与 :meth:`__setitem__` 类似,不过你可以使用关键字参数为字段提供附加参数。 *_name* 是字段名, " +"*_value* 是字段 *主* 值。" + +#: ../../library/email.message.rst:271 +msgid "" +"For each item in the keyword argument dictionary *_params*, the key is taken" +" as the parameter name, with underscores converted to dashes (since dashes " +"are illegal in Python identifiers). Normally, the parameter will be added " +"as ``key=\"value\"`` unless the value is ``None``, in which case only the " +"key will be added." +msgstr "" +"对于关键字参数字典 *_params* " +"的每个键值对而言,它的键被用作参数的名字,其中下划线被替换为短横杠(毕竟短横杠不是合法的Python标识符)。一般来讲,参数以 ``键=\"值\"`` " +"的方式添加,除非值是 ``None`` 。要真的是这样的话,只有键会被添加。" + +#: ../../library/email.message.rst:277 +msgid "" +"If the value contains non-ASCII characters, the charset and language may be " +"explicitly controlled by specifying the value as a three tuple in the format" +" ``(CHARSET, LANGUAGE, VALUE)``, where ``CHARSET`` is a string naming the " +"charset to be used to encode the value, ``LANGUAGE`` can usually be set to " +"``None`` or the empty string (see :rfc:`2231` for other possibilities), and " +"``VALUE`` is the string value containing non-ASCII code points. If a three " +"tuple is not passed and the value contains non-ASCII characters, it is " +"automatically encoded in :rfc:`2231` format using a ``CHARSET`` of ``utf-8``" +" and a ``LANGUAGE`` of ``None``." +msgstr "" +"如果值含有非 ASCII 字符,你可以将值写成 ``(CHARSET, LANGUAGE, VALUE)`` " +"形式的三元组,这样你可以人为控制字符的字符集和语言。 ``CHARSET`` 是一个字符串,它为你的值的编码命名; ``LANGUAGE`` " +"一般可以直接设为 ``None`` ,也可以直接设为空字符串(其他可能取值参见 :rfc:`2231` ); ``VALUE`` " +"是一个字符串值,其包含非ASCII的码点。如果你没有使用三元组,你的字符串又含有非 ASCII 字符,那么它就会使用 :rfc:`2231` 中, " +"``CHARSET`` 为 ``utf-8`` , ``LANGUAGE`` 为 ``None`` 的格式编码。" + +#: ../../library/email.message.rst:287 +msgid "Here is an example::" +msgstr "例如:" + +#: ../../library/email.message.rst:291 +msgid "This will add a header that looks like ::" +msgstr "会添加一个形如下文的头字段:" + +#: ../../library/email.message.rst:295 +msgid "An example of the extended interface with non-ASCII characters::" +msgstr "带有非ASCII字符的拓展接口:" + +#: ../../library/email.message.rst:303 +msgid "" +"Replace a header. Replace the first header found in the message that " +"matches *_name*, retaining header order and field name case of the original " +"header. If no matching header is found, raise a :exc:`KeyError`." +msgstr "" +"替换头字段。只会替换掉信息内找到的第一个字段名匹配 *_name* 的字段值。字段的顺序不变,原字段名的大小写也不变。如果没有找到匹配的字段,抛出 " +":exc:`KeyError` 异常。" + +#: ../../library/email.message.rst:311 +msgid "" +"Return the message's content type, coerced to lower case of the form " +":mimetype:`maintype/subtype`. If there is no :mailheader:`Content-Type` " +"header in the message return the value returned by :meth:`get_default_type`." +" If the :mailheader:`Content-Type` header is invalid, return " +"``text/plain``." +msgstr "" +"返回信息的内容类型,其形如 :mimetype:`maintype/subtype` ,强制全小写。如果信息的 " +":mailheader:`Content-Type` 头字段不存在则返回 :meth:`get_default_type` 的返回值;如果信息的 " +":mailheader:`Content-Type` 头字段无效则返回 ``text/plain`` 。" + +#: ../../library/email.message.rst:317 +msgid "" +"(According to :rfc:`2045`, messages always have a default type, " +":meth:`get_content_type` will always return a value. :rfc:`2045` defines a " +"message's default type to be :mimetype:`text/plain` unless it appears inside" +" a :mimetype:`multipart/digest` container, in which case it would be " +":mimetype:`message/rfc822`. If the :mailheader:`Content-Type` header has an" +" invalid type specification, :rfc:`2045` mandates that the default type be " +":mimetype:`text/plain`.)" +msgstr "" +"(根据 :rfc:`2045` 所述,信息永远都有一个默认类型,所以 :meth:`get_content_type` 一定会返回一个值。 " +":rfc:`2045` 定义信息的默认类型为 :mimetype:`text/plain` 或 :mimetype:`message/rfc822` " +",其中后者仅出现在消息头位于一个 :mimetype:`multipart/digest` 容器中的场合中。如果消息头的 " +":mailheader:`Content-Type` 字段所指定的类型是无效的, :rfc:`2045` 令其默认类型为 " +":mimetype:`text/plain` 。)" + +#: ../../library/email.message.rst:328 +msgid "" +"Return the message's main content type. This is the :mimetype:`maintype` " +"part of the string returned by :meth:`get_content_type`." +msgstr "" +"返回信息的主要内容类型。准确来说,此方法返回的是 :meth:`get_content_type` 方法所返回的形如 " +":mimetype:`maintype/subtype` 的字符串当中的 :mimetype:`maintype` 部分。" + +#: ../../library/email.message.rst:334 +msgid "" +"Return the message's sub-content type. This is the :mimetype:`subtype` part" +" of the string returned by :meth:`get_content_type`." +msgstr "" +"返回信息的子内容类型。准确来说,此方法返回的是 :meth:`get_content_type` 方法所返回的形如 " +":mimetype:`maintype/subtype` 的字符串当中的 :mimetype:`subtype` 部分。" + +#: ../../library/email.message.rst:340 +msgid "" +"Return the default content type. Most messages have a default content type " +"of :mimetype:`text/plain`, except for messages that are subparts of " +":mimetype:`multipart/digest` containers. Such subparts have a default " +"content type of :mimetype:`message/rfc822`." +msgstr "" +"返回默认的内容类型。绝大多数的信息,其默认内容类型都是 :mimetype:`text/plain` 。作为 " +":mimetype:`multipart/digest` 容器内子部分的信息除外,它们的默认内容类型是 " +":mimetype:`message/rfc822` 。" + +#: ../../library/email.message.rst:348 +msgid "" +"Set the default content type. *ctype* should either be " +":mimetype:`text/plain` or :mimetype:`message/rfc822`, although this is not " +"enforced. The default content type is not stored in the " +":mailheader:`Content-Type` header, so it only affects the return value of " +"the ``get_content_type`` methods when no :mailheader:`Content-Type` header " +"is present in the message." +msgstr "" +"设置默认的内容类型。 尽管并非强制,但是 *ctype* 仍应当是 :mimetype:`text/plain` 或 " +":mimetype:`message/rfc822` 二者取一。默认内容类型并不存储在 :mailheader:`Content-Type` " +"头字段当中,所以设置此项的唯一作用就是决定当 :mailheader:`Content-Type` " +"头字段在信息中不存在时,``get_content_type`` 方法的返回值。" + +#: ../../library/email.message.rst:359 +msgid "" +"Set a parameter in the :mailheader:`Content-Type` header. If the parameter " +"already exists in the header, replace its value with *value*. When *header* " +"is ``Content-Type`` (the default) and the header does not yet exist in the " +"message, add it, set its value to :mimetype:`text/plain`, and append the new" +" parameter value. Optional *header* specifies an alternative header to " +":mailheader:`Content-Type`." +msgstr "" +"在 :mailheader:`Content-Type` 头字段当中设置一个参数。如果该参数已于字段中存在,将其旧值替换为 *value* 。如果 " +"*header* 是 ``Content-Type`` (默认值),并且该头字段于信息中尚未存在,则会先添加该字段,将其值设置为 " +":mimetype:`text/plain` ,并附加参数值。可选的 *header* 可以让你指定 :mailheader:`Content-" +"Type` 之外的另一个头字段。" + +#: ../../library/email.message.rst:366 +msgid "" +"If the value contains non-ASCII characters, the charset and language may be " +"explicitly specified using the optional *charset* and *language* parameters." +" Optional *language* specifies the :rfc:`2231` language, defaulting to the " +"empty string. Both *charset* and *language* should be strings. The default" +" is to use the ``utf8`` *charset* and ``None`` for the *language*." +msgstr "" +"如果值包含非ASCII字符,其字符集和语言可以通过可选参数 *charset* 和 *language* 显式指定。可选参数 *language* 指定" +" :rfc:`2231` 当中的语言,其默认值是空字符串。 *charset* 和 *language* 都应当字符串。默认使用的是 ``utf8`` " +"*charset* ,*language* 为 ``None`` 。" + +#: ../../library/email.message.rst:373 +msgid "" +"If *replace* is ``False`` (the default) the header is moved to the end of " +"the list of headers. If *replace* is ``True``, the header will be updated " +"in place." +msgstr "" +"如果 *replace* 为 ``False`` (默认值),该头字段会被移动到所有头字段列表的末尾。如果 *replace* 为 ``True`` " +",字段会被原地更新。" + +#: ../../library/email.message.rst:377 ../../library/email.message.rst:394 +msgid "" +"Use of the *requote* parameter with :class:`EmailMessage` objects is " +"deprecated." +msgstr "于 :class:`EmailMessage` 对象而言, *requote* 参数已被弃用。" + +#: ../../library/email.message.rst:380 +msgid "" +"Note that existing parameter values of headers may be accessed through the " +":attr:`~email.headerregistry.BaseHeader.params` attribute of the header " +"value (for example, ``msg['Content-Type'].params['charset']``)." +msgstr "" +"请注意,头字段已有的参数值可以通过头字段的 :attr:`~email.headerregistry.BaseHeader.params` " +"属性来访问(举例: ``msg['Content-Type'].params['charset']`` )。" + +#: ../../library/email.message.rst:384 +msgid "``replace`` keyword was added." +msgstr "添加了 ``replace`` 关键字。" + +#: ../../library/email.message.rst:389 +msgid "" +"Remove the given parameter completely from the :mailheader:`Content-Type` " +"header. The header will be re-written in place without the parameter or its" +" value. Optional *header* specifies an alternative to :mailheader:`Content-" +"Type`." +msgstr "" +"从 :mailheader:`Content-Type` 头字段中完全移去给定的参数。头字段会被原地重写,重写后的字段不含参数和值。可选的 " +"*header* 可以让你指定 :mailheader:`Content-Type` 之外的另一个字段。" + +#: ../../library/email.message.rst:400 +msgid "" +"Return the value of the ``filename`` parameter of the :mailheader:`Content-" +"Disposition` header of the message. If the header does not have a " +"``filename`` parameter, this method falls back to looking for the ``name`` " +"parameter on the :mailheader:`Content-Type` header. If neither is found, or" +" the header is missing, then *failobj* is returned. The returned string will" +" always be unquoted as per :func:`email.utils.unquote`." +msgstr "" +"返回信息头当中 :mailheader:`Content-Disposition` 字段当中名为 ``filename`` " +"的参数值。如果该字段当中没有此参数,该方法会退而寻找 :mailheader:`Content-Type` 字段当中的 ``name`` " +"参数值。如果这个也没有找到,或者这些个字段压根就不存在,返回 *failobj* 。返回的字符串永远按照 " +":func:`email.utils.unquote` 方法去除引号。" + +#: ../../library/email.message.rst:411 +msgid "" +"Return the value of the ``boundary`` parameter of the :mailheader:`Content-" +"Type` header of the message, or *failobj* if either the header is missing, " +"or has no ``boundary`` parameter. The returned string will always be " +"unquoted as per :func:`email.utils.unquote`." +msgstr "" +"返回信息头当中 :mailheader:`Content-Type` 字段当中名为 ``boundary`` " +"的参数值。如果字段当中没有此参数,或者这些个字段压根就不存在,返回 *failobj* 。返回的字符串永远按照 " +":func:`email.utils.unquote` 方法去除引号。" + +#: ../../library/email.message.rst:419 +msgid "" +"Set the ``boundary`` parameter of the :mailheader:`Content-Type` header to " +"*boundary*. :meth:`set_boundary` will always quote *boundary* if necessary." +" A :exc:`~email.errors.HeaderParseError` is raised if the message object " +"has no :mailheader:`Content-Type` header." +msgstr "" +"将 :mailheader:`Content-Type` 头字段的 ``boundary`` 参数设置为 *boundary* 。 " +":meth:`set_boundary` 方法永远都会在必要的时候为 *boundary* 添加引号。如果信息对象中没有 " +":mailheader:`Content-Type` 头字段,抛出 :exc:`~email.errors.HeaderParseError` 异常。" + +#: ../../library/email.message.rst:424 +msgid "" +"Note that using this method is subtly different from deleting the old " +":mailheader:`Content-Type` header and adding a new one with the new boundary" +" via :meth:`add_header`, because :meth:`set_boundary` preserves the order of" +" the :mailheader:`Content-Type` header in the list of headers." +msgstr "" +"请注意使用这个方法与直接删除旧的 :mailheader:`Content-Type` 头字段然后使用 :meth:`add_header` " +"方法添加一个带有新边界值参数的 :mailheader:`Content-Type` 头字段有细微差距。 :meth:`set_boundary` " +"方法会保留 :mailheader:`Content-Type` 头字段在原信息头当中的位置。" + +#: ../../library/email.message.rst:433 +msgid "" +"Return the ``charset`` parameter of the :mailheader:`Content-Type` header, " +"coerced to lower case. If there is no :mailheader:`Content-Type` header, or" +" if that header has no ``charset`` parameter, *failobj* is returned." +msgstr "" +"返回 :mailheader:`Content-Type` 头字段中的 ``charset`` " +"参数,强制小写。如果字段当中没有此参数,或者这个字段压根不存在,返回 *failobj* 。" + +#: ../../library/email.message.rst:440 +msgid "" +"Return a list containing the character set names in the message. If the " +"message is a :mimetype:`multipart`, then the list will contain one element " +"for each subpart in the payload, otherwise, it will be a list of length 1." +msgstr "" +"返回一个包含了信息内所有字符集名字的列表。 如果信息是 :mimetype:`multipart` " +"类型的,那么列表当中的每一项都对应其载荷的子部分的字符集名字。 否则,该列表是一个长度为 1 的列表。" + +#: ../../library/email.message.rst:444 +msgid "" +"Each item in the list will be a string which is the value of the ``charset``" +" parameter in the :mailheader:`Content-Type` header for the represented " +"subpart. If the subpart has no :mailheader:`Content-Type` header, no " +"``charset`` parameter, or is not of the :mimetype:`text` main MIME type, " +"then that item in the returned list will be *failobj*." +msgstr "" +"列表当中的每一项都是一个字符串,其值为对应子部分的 :mailheader:`Content-Type` 头字段的 ``charset`` " +"参数值。如果该子部分没有此头字段,或者没有此参数,或者其主要 MIME 类型并非 :mimetype:`text` ,那么列表中的那一项即为 " +"*failobj* 。" + +#: ../../library/email.message.rst:453 +msgid "" +"Return ``True`` if there is a :mailheader:`Content-Disposition` header and " +"its (case insensitive) value is ``attachment``, ``False`` otherwise." +msgstr "" +"如果信息头当中存在一个名为 :mailheader:`Content-Disposition` 的字段,且该字段的值为 ``attachment`` " +"(大小写无关),返回 ``True`` 。否则,返回 ``False`` 。" + +#: ../../library/email.message.rst:456 +msgid "" +"is_attachment is now a method instead of a property, for consistency with " +":meth:`~email.message.Message.is_multipart`." +msgstr "" +"为了与 :meth:`~email.message.Message.is_multipart` 方法一致,is_attachment " +"现在是一个方法,不再是属性了。" + +#: ../../library/email.message.rst:463 +msgid "" +"Return the lowercased value (without parameters) of the message's " +":mailheader:`Content-Disposition` header if it has one, or ``None``. The " +"possible values for this method are *inline*, *attachment* or ``None`` if " +"the message follows :rfc:`2183`." +msgstr "" +"如果信息的 :mailheader:`Content-Disposition` 头字段存在,返回其字段值;否则返回 ``None`` " +"。返回的值均为小写,不包含参数。如果信息遵循 :rfc:`2183` 标准,则此方法的返回值只可能在 *inline* 、 *attachment* 和" +" ``None`` 之间选择。" + +#: ../../library/email.message.rst:471 +msgid "" +"The following methods relate to interrogating and manipulating the content " +"(payload) of the message." +msgstr "下列方法与信息内容(载荷)之访问与操控有关。" + +#: ../../library/email.message.rst:477 +msgid "" +"The :meth:`walk` method is an all-purpose generator which can be used to " +"iterate over all the parts and subparts of a message object tree, in depth-" +"first traversal order. You will typically use :meth:`walk` as the iterator " +"in a ``for`` loop; each iteration returns the next subpart." +msgstr "" +":meth:`walk` 方法是一个多功能生成器。它可以被用来以深度优先顺序遍历信息对象树的所有部分和子部分。一般而言, :meth:`walk` " +"会被用作 ``for`` 循环的迭代器,每一次迭代都返回其下一个子部分。" + +#: ../../library/email.message.rst:482 +msgid "" +"Here's an example that prints the MIME type of every part of a multipart " +"message structure:" +msgstr "以下例子会打印出一封具有多部分结构之信息的每个部分的 MIME 类型。" + +#: ../../library/email.message.rst:503 +msgid "" +"``walk`` iterates over the subparts of any part where :meth:`is_multipart` " +"returns ``True``, even though ``msg.get_content_maintype() == 'multipart'`` " +"may return ``False``. We can see this in our example by making use of the " +"``_structure`` debug helper function:" +msgstr "" +"``walk`` 会遍历所有 :meth:`is_multipart` 方法返回 ``True`` 的部分之子部分,哪怕 " +"``msg.get_content_maintype() == 'multipart'`` 返回的是 ``False`` 。使用 " +"``_structure`` 除错帮助函数可以帮助我们在下面这个例子当中看清楚这一点:" + +#: ../../library/email.message.rst:531 +msgid "" +"Here the ``message`` parts are not ``multiparts``, but they do contain " +"subparts. ``is_multipart()`` returns ``True`` and ``walk`` descends into the" +" subparts." +msgstr "" +"在这里, ``message`` 的部分并非 ``multiparts`` ,但是它们真的包含子部分! ``is_multipart()`` 返回 " +"``True`` , ``walk`` 也深入进这些子部分中。" + +#: ../../library/email.message.rst:538 +msgid "" +"Return the MIME part that is the best candidate to be the \"body\" of the " +"message." +msgstr "返回信息的 MIME 部分。这个部分是最可能成为信息体的部分。" + +#: ../../library/email.message.rst:541 +msgid "" +"*preferencelist* must be a sequence of strings from the set ``related``, " +"``html``, and ``plain``, and indicates the order of preference for the " +"content type of the part returned." +msgstr "" +"*preferencelist* 必须是一个字符串序列,其内容从 ``related`` 、 ``html`` 和 ``plain`` " +"这三者组成的集合中选取。这个序列代表着返回的部分的内容类型之偏好。" + +#: ../../library/email.message.rst:545 +msgid "" +"Start looking for candidate matches with the object on which the " +"``get_body`` method is called." +msgstr "在 ``get_body`` 方法被调用的对象上寻找匹配的候选者。" + +#: ../../library/email.message.rst:548 +msgid "" +"If ``related`` is not included in *preferencelist*, consider the root part " +"(or subpart of the root part) of any related encountered as a candidate if " +"the (sub-)part matches a preference." +msgstr "" +"如果 ``related`` 未包括在 *preferencelist* " +"中,可考虑将所遇到的任意相关的根部分(或根部分的子部分)在该(子)部分与一个首选项相匹配时作为候选项。" + +#: ../../library/email.message.rst:552 +msgid "" +"When encountering a ``multipart/related``, check the ``start`` parameter and" +" if a part with a matching :mailheader:`Content-ID` is found, consider only " +"it when looking for candidate matches. Otherwise consider only the first " +"(default root) part of the ``multipart/related``." +msgstr "" +"当遇到一个 ``multipart/related`` 时,将检查 ``start`` 形参并且如果找到了一个匹配 " +":mailheader:`Content-ID` 的部分,在查找候选匹配时只考虑它。 在其他情况下则只考虑 ``multipart/related`` " +"的第一个(默认的根)部分。" + +#: ../../library/email.message.rst:557 +msgid "" +"If a part has a :mailheader:`Content-Disposition` header, only consider the " +"part a candidate match if the value of the header is ``inline``." +msgstr "" +"如果一个部分具有 :mailheader:`Content-Disposition` 标头,则当标头值为 ``inline`` " +"时将只考虑将该部分作为候选匹配。" + +#: ../../library/email.message.rst:560 +msgid "" +"If none of the candidates matches any of the preferences in " +"*preferencelist*, return ``None``." +msgstr "如果没有任何候选部分匹配 *preferencelist* 中的任何首选项,则返回 ``None``。" + +#: ../../library/email.message.rst:563 +msgid "" +"Notes: (1) For most applications the only *preferencelist* combinations that" +" really make sense are ``('plain',)``, ``('html', 'plain')``, and the " +"default ``('related', 'html', 'plain')``. (2) Because matching starts with " +"the object on which ``get_body`` is called, calling ``get_body`` on a " +"``multipart/related`` will return the object itself unless *preferencelist* " +"has a non-default value. (3) Messages (or message parts) that do not specify" +" a :mailheader:`Content-Type` or whose :mailheader:`Content-Type` header is " +"invalid will be treated as if they are of type ``text/plain``, which may " +"occasionally cause ``get_body`` to return unexpected results." +msgstr "" +"注: (1) 对于大多数应用来说有意义的 *preferencelist* 组合仅有 ``('plain',)``, ``('html', " +"'plain')`` 以及默认的 ``('related', 'html', 'plain')``。 (2) 由于匹配是从调用 ``get_body``" +" 的对象开始的,因此在 ``multipart/related`` 上调用 ``get_body`` 将返回对象本身,除非 " +"*preferencelist* 具有非默认值。 (3) 未指定 :mailheader:`Content-Type` 或者 " +":mailheader:`Content-Type` 标头无效的消息(或消息部分)将被当作具有 ``text/plain`` 类型来处理,这有时可能导致" +" ``get_body`` 返回非预期的结果。" + +#: ../../library/email.message.rst:577 +msgid "" +"Return an iterator over all of the immediate sub-parts of the message that " +"are not candidate \"body\" parts. That is, skip the first occurrence of " +"each of ``text/plain``, ``text/html``, ``multipart/related``, or " +"``multipart/alternative`` (unless they are explicitly marked as attachments " +"via :mailheader:`Content-Disposition: attachment`), and return all remaining" +" parts. When applied directly to a ``multipart/related``, return an " +"iterator over the all the related parts except the root part (ie: the part " +"pointed to by the ``start`` parameter, or the first part if there is no " +"``start`` parameter or the ``start`` parameter doesn't match the " +":mailheader:`Content-ID` of any of the parts). When applied directly to a " +"``multipart/alternative`` or a non-``multipart``, return an empty iterator." +msgstr "" +"返回包含所有不是候选 \"body\" 部分的消息的直接子部分的迭代器。 也就是说,跳过首次出现的每个 ``text/plain``, " +"``text/html``, ``multipart/related`` 或 ``multipart/alternative`` (除非通过 " +":mailheader:`Content-Disposition: attachment` 将它们显式地标记为附件),并返回所有的其余部分。 " +"当直接应用于 ``multipart/related`` 时,将返回包含除根部分之外所有相关部分的迭代器(即由 ``start`` " +"形参所指向的部分,或者当没有 ``start`` 形参或 ``start`` 形参不能匹配任何部分的 :mailheader:`Content-ID` " +"时则为第一部分)。 当直接应用于 ``multipart/alternative`` 或非 ``multipart`` 时,将返回一个空迭代器。" + +#: ../../library/email.message.rst:593 +msgid "" +"Return an iterator over all of the immediate sub-parts of the message, which" +" will be empty for a non-``multipart``. (See also " +":meth:`~email.message.EmailMessage.walk`.)" +msgstr "" +"返回包含消息的所有直接子部分的迭代器,对于非 ``multipart`` 将为空对象。 (另请参阅 " +":meth:`~email.message.EmailMessage.walk`。)" + +#: ../../library/email.message.rst:600 +msgid "" +"Call the :meth:`~email.contentmanager.ContentManager.get_content` method of " +"the *content_manager*, passing self as the message object, and passing along" +" any other arguments or keywords as additional arguments. If " +"*content_manager* is not specified, use the ``content_manager`` specified by" +" the current :mod:`~email.policy`." +msgstr "" +"调用 *content_manager* 的 " +":meth:`~email.contentmanager.ContentManager.get_content` " +"方法,将自身作为消息对象传入,并将其他参数或关键字作为额外参数传入。 如果未指定 *content_manager*,则会使用当前 " +":mod:`~email.policy` 所指定的 ``content_manager``。" + +#: ../../library/email.message.rst:609 +msgid "" +"Call the :meth:`~email.contentmanager.ContentManager.set_content` method of " +"the *content_manager*, passing self as the message object, and passing along" +" any other arguments or keywords as additional arguments. If " +"*content_manager* is not specified, use the ``content_manager`` specified by" +" the current :mod:`~email.policy`." +msgstr "" +"调用 *content_manager* 的 " +":meth:`~email.contentmanager.ContentManager.set_content` " +"方法,将自身作为消息传入,并将其他参数或关键字作为额外参数传入。 如果未指定 *content_manager*,则会使用当前 " +":mod:`~email.policy` 所指定的 ``content_manager``。" + +#: ../../library/email.message.rst:618 +msgid "" +"Convert a non-``multipart`` message into a ``multipart/related`` message, " +"moving any existing :mailheader:`Content-` headers and payload into a (new) " +"first part of the ``multipart``. If *boundary* is specified, use it as the " +"boundary string in the multipart, otherwise leave the boundary to be " +"automatically created when it is needed (for example, when the message is " +"serialized)." +msgstr "" +"将非 ``multipart`` 消息转换为 ``multipart/related`` 消息,将任何现有的 " +":mailheader:`Content-` 标头和载荷移入 ``multipart`` 的(新加)首部分。 如果指定了 " +"*boundary*,会用它作为 multipart 中的分界字符串,否则会在必要时自动创建分界(例如当消息被序列化时)。" + +#: ../../library/email.message.rst:628 +msgid "" +"Convert a non-``multipart`` or a ``multipart/related`` into a " +"``multipart/alternative``, moving any existing :mailheader:`Content-` " +"headers and payload into a (new) first part of the ``multipart``. If " +"*boundary* is specified, use it as the boundary string in the multipart, " +"otherwise leave the boundary to be automatically created when it is needed " +"(for example, when the message is serialized)." +msgstr "" +"将非 ``multipart`` 或 ``multipart/related`` 转换为 " +"``multipart/alternative``,将任何现有的 :mailheader:`Content-` 标头和载荷移入 " +"``multipart`` 的(新加)首部分。 如果指定了 *boundary*,会用它作为 multipart " +"中的分界字符串,否则会在必要时自动创建分界(例如当消息被序列化时)。" + +#: ../../library/email.message.rst:638 +msgid "" +"Convert a non-``multipart``, a ``multipart/related``, or a ``multipart-" +"alternative`` into a ``multipart/mixed``, moving any existing " +":mailheader:`Content-` headers and payload into a (new) first part of the " +"``multipart``. If *boundary* is specified, use it as the boundary string in" +" the multipart, otherwise leave the boundary to be automatically created " +"when it is needed (for example, when the message is serialized)." +msgstr "" +"将非 ``multipart``, ``multipart/related`` 或 ``multipart-alternative`` 转换为 " +"``multipart/mixed``,将任何现有的 :mailheader:`Content-` 标头和载荷移入 ``multipart`` " +"的(新加)首部分。 如果指定了 *boundary*,会用它作为 multipart " +"中的分界字符串,否则会在必要时自动创建分界(例如当消息被序列化时)。" + +#: ../../library/email.message.rst:648 +msgid "" +"If the message is a ``multipart/related``, create a new message object, pass" +" all of the arguments to its :meth:`set_content` method, and " +":meth:`~email.message.Message.attach` it to the ``multipart``. If the " +"message is a non-``multipart``, call :meth:`make_related` and then proceed " +"as above. If the message is any other type of ``multipart``, raise a " +":exc:`TypeError`. If *content_manager* is not specified, use the " +"``content_manager`` specified by the current :mod:`~email.policy`. If the " +"added part has no :mailheader:`Content-Disposition` header, add one with the" +" value ``inline``." +msgstr "" +"如果消息为 ``multipart/related``,则创建一个新的消息对象,将所有参数传给其 :meth:`set_content` 方法,并将其 " +":meth:`~email.message.Message.attach` 到 ``multipart``。 如果消息为非 " +"``multipart``,则先调用 :meth:`make_related` 然后再继续上述步骤。 如果消息为任何其他类型的 " +"``multipart``,则会引发 :exc:`TypeError`。 如果未指定 *content_manager*,则使用当前 " +":mod:`~email.policy` 所指定的 ``content_manager``。 如果添加的部分没有 " +":mailheader:`Content-Disposition` 标头,则会添加一个值为 ``inline`` 的标头。" + +#: ../../library/email.message.rst:661 +msgid "" +"If the message is a ``multipart/alternative``, create a new message object, " +"pass all of the arguments to its :meth:`set_content` method, and " +":meth:`~email.message.Message.attach` it to the ``multipart``. If the " +"message is a non-``multipart`` or ``multipart/related``, call " +":meth:`make_alternative` and then proceed as above. If the message is any " +"other type of ``multipart``, raise a :exc:`TypeError`. If *content_manager* " +"is not specified, use the ``content_manager`` specified by the current " +":mod:`~email.policy`." +msgstr "" +"如果消息为 ``multipart/alternative``,则创建一个新的消息对象,将所有参数传给其 :meth:`set_content` " +"方法,并将其 :meth:`~email.message.Message.attach` 到 ``multipart``。 如果消息为非 " +"``multipart`` 或 ``multipart/related``,则先调用 :meth:`make_alternative` " +"然后再继续上述步骤。 如果消息为任何其他类型的 ``multipart``,则会引发 :exc:`TypeError`。 如果未指定 " +"*content_manager*,则会使用当前 :mod:`~email.policy` 所指定的 ``content_manager``。" + +#: ../../library/email.message.rst:673 +msgid "" +"If the message is a ``multipart/mixed``, create a new message object, pass " +"all of the arguments to its :meth:`set_content` method, and " +":meth:`~email.message.Message.attach` it to the ``multipart``. If the " +"message is a non-``multipart``, ``multipart/related``, or " +"``multipart/alternative``, call :meth:`make_mixed` and then proceed as " +"above. If *content_manager* is not specified, use the ``content_manager`` " +"specified by the current :mod:`~email.policy`. If the added part has no " +":mailheader:`Content-Disposition` header, add one with the value " +"``attachment``. This method can be used both for explicit attachments " +"(:mailheader:`Content-Disposition: attachment`) and ``inline`` attachments " +"(:mailheader:`Content-Disposition: inline`), by passing appropriate options " +"to the ``content_manager``." +msgstr "" +"如果消息为 ``multipart/mixed``,则创建一个新的消息对象,将所有参数传给其 :meth:`set_content` 方法,并将其 " +":meth:`~email.message.Message.attach` 到 ``multipart``。 如果消息为非 ``multipart``," +" ``multipart/related`` 或 ``multipart/alternative``,则先调用 :meth:`make_mixed` " +"然后再继续上述步骤。 如果未指定 *content_manager*,则使用当前 :mod:`~email.policy` 所指定的 " +"``content_manager``。 如果添加的部分没有 :mailheader:`Content-Disposition` 标头,则会添加一个值为" +" ``attachment`` 的标头。 此方法对于显式附件 (:mailheader:`Content-Disposition: " +"attachment`) 和 ``inline`` 附件 (:mailheader:`Content-Disposition: inline`) " +"均可使用,只须向 ``content_manager`` 传入适当的选项即可。" + +#: ../../library/email.message.rst:689 +msgid "Remove the payload and all of the headers." +msgstr "移除所有载荷和所有标头。" + +#: ../../library/email.message.rst:694 +msgid "" +"Remove the payload and all of the :exc:`Content-` headers, leaving all other" +" headers intact and in their original order." +msgstr "移除载荷以及所有 :exc:`Content-` 标头,其他标头不加改变并且保持其原有顺序。" + +#: ../../library/email.message.rst:698 +msgid ":class:`EmailMessage` objects have the following instance attributes:" +msgstr ":class:`EmailMessage` 对象具有下列实例属性:" + +#: ../../library/email.message.rst:703 +msgid "" +"The format of a MIME document allows for some text between the blank line " +"following the headers, and the first multipart boundary string. Normally, " +"this text is never visible in a MIME-aware mail reader because it falls " +"outside the standard MIME armor. However, when viewing the raw text of the " +"message, or when viewing the message in a non-MIME aware reader, this text " +"can become visible." +msgstr "" +"MIME 文档格式在标头之后的空白行以及第一个多部分的分界字符串之间允许添加一些文本, 通常,此文本在支持 MIME " +"的邮件阅读器中永远不可见,因为它处在标准 MIME 保护范围之外。 但是,当查看消息的原始文本,或当在不支持 MIME " +"的阅读器中查看消息时,此文本会变得可见。" + +#: ../../library/email.message.rst:710 +msgid "" +"The *preamble* attribute contains this leading extra-armor text for MIME " +"documents. When the :class:`~email.parser.Parser` discovers some text after" +" the headers but before the first boundary string, it assigns this text to " +"the message's *preamble* attribute. When the " +":class:`~email.generator.Generator` is writing out the plain text " +"representation of a MIME message, and it finds the message has a *preamble* " +"attribute, it will write this text in the area between the headers and the " +"first boundary. See :mod:`email.parser` and :mod:`email.generator` for " +"details." +msgstr "" +"*preamble* 属性包含 MIME 文档开头部分的这些处于保护范围之外的文本。 当 :class:`~email.parser.Parser` " +"在标头之后及第一个分界字符串之前发现一些文本时,它会将这些文本赋值给消息的 *preamble* 属性。 当 " +":class:`~email.generator.Generator` 写出 MIME 消息的纯文本表示形式时,如果它发现消息具有 *preamble*" +" 属性,它将在标头及第一个分界之间区域写出这些文本。 请参阅 :mod:`email.parser` 和 :mod:`email.generator` " +"了解更多细节。" + +#: ../../library/email.message.rst:720 +msgid "" +"Note that if the message object has no preamble, the *preamble* attribute " +"will be ``None``." +msgstr "请注意如果消息对象没有前导文本,则 *preamble* 属性将为 ``None``。" + +#: ../../library/email.message.rst:726 +msgid "" +"The *epilogue* attribute acts the same way as the *preamble* attribute, " +"except that it contains text that appears between the last boundary and the " +"end of the message. As with the :attr:`~EmailMessage.preamble`, if there is" +" no epilog text this attribute will be ``None``." +msgstr "" +"*epilogue* 属性的作用方式与 *preamble* 相同,区别在于它包含在最后一个分界及消息结尾之间出现的文本。 与 " +":attr:`~EmailMessage.preamble` 类似,如果没有附加文本,则此属性将为 ``None``。" + +#: ../../library/email.message.rst:734 +msgid "" +"The *defects* attribute contains a list of all the problems found when " +"parsing this message. See :mod:`email.errors` for a detailed description of" +" the possible parsing defects." +msgstr "" +"*defects* 属性包含在解析消息时发现的所有问题的列表。 请参阅 :mod:`email.errors` 了解可能的解析缺陷的详细描述。" + +#: ../../library/email.message.rst:741 +msgid "" +"This class represents a subpart of a MIME message. It is identical to " +":class:`EmailMessage`, except that no :mailheader:`MIME-Version` headers are" +" added when :meth:`~EmailMessage.set_content` is called, since sub-parts do " +"not need their own :mailheader:`MIME-Version` headers." +msgstr "" +"这个类代表 MIME 消息的子部分。 它与 :class:`EmailMessage` 相似,不同之处在于当 " +":meth:`~EmailMessage.set_content` 被调用时不会添加 :mailheader:`MIME-Version` " +"标头,因为子部分不需要有它们自己的 :mailheader:`MIME-Version` 标头。" + +#: ../../library/email.message.rst:748 +msgid "Footnotes" +msgstr "备注" + +#: ../../library/email.message.rst:749 +msgid "" +"Originally added in 3.4 as a :term:`provisional module `. Docs for legacy message class moved to :ref:`compat32_message`." +msgstr "" +"原先在3.4版本中以 :term:`provisional module ` 添加。过时的文档被移动至 " +":ref:`compat32_message` 。" diff --git a/library/email.mime.po b/library/email.mime.po new file mode 100644 index 000000000..495759a30 --- /dev/null +++ b/library/email.mime.po @@ -0,0 +1,386 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) 2001-2022, Python Software Foundation +# This file is distributed under the same license as the Python package. +# FIRST AUTHOR , YEAR. +# +# Translators: +# Freesand Leo , 2021 +# +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: Python 3.9\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2022-11-04 14:34+0000\n" +"PO-Revision-Date: 2017-02-16 23:09+0000\n" +"Last-Translator: Freesand Leo , 2021\n" +"Language-Team: Chinese (China) (https://www.transifex.com/python-doc/teams/5390/zh_CN/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: zh_CN\n" +"Plural-Forms: nplurals=1; plural=0;\n" + +#: ../../library/email.mime.rst:2 +msgid ":mod:`email.mime`: Creating email and MIME objects from scratch" +msgstr ":mod:`email.mime`: 从头创建电子邮件和 MIME 对象" + +#: ../../library/email.mime.rst:7 +msgid "**Source code:** :source:`Lib/email/mime/`" +msgstr "**源代码:** :source:`Lib/email/mime/`" + +#: ../../library/email.mime.rst:11 +msgid "" +"This module is part of the legacy (``Compat32``) email API. Its " +"functionality is partially replaced by the :mod:`~email.contentmanager` in " +"the new API, but in certain applications these classes may still be useful, " +"even in non-legacy code." +msgstr "" +"此模块是旧版 (``Compat32``) 电子邮件 API 的组成部分。 它的功能在新版 API 中被 " +":mod:`~email.contentmanager` 部分替代,但在某些应用中这些类仍可能有用,即使是在非旧版代码中。" + +#: ../../library/email.mime.rst:16 +msgid "" +"Ordinarily, you get a message object structure by passing a file or some " +"text to a parser, which parses the text and returns the root message object." +" However you can also build a complete message structure from scratch, or " +"even individual :class:`~email.message.Message` objects by hand. In fact, " +"you can also take an existing structure and add new " +":class:`~email.message.Message` objects, move them around, etc. This makes " +"a very convenient interface for slicing-and-dicing MIME messages." +msgstr "" +"通常,你是通过传递一个文件或一些文本到解析器来获得消息对象结构体的,解析器会解析文本并返回根消息对象。 " +"不过你也可以从头开始构建一个完整的消息结构体,甚至是手动构建单独的 :class:`~email.message.Message` 对象。 " +"实际上,你也可以接受一个现有的结构体并添加新的 :class:`~email.message.Message` 对象并移动它们。 这为切片和分割 " +"MIME 消息提供了非常方便的接口。" + +#: ../../library/email.mime.rst:24 +msgid "" +"You can create a new object structure by creating " +":class:`~email.message.Message` instances, adding attachments and all the " +"appropriate headers manually. For MIME messages though, the :mod:`email` " +"package provides some convenient subclasses to make things easier." +msgstr "" +"你可以通过创建 :class:`~email.message.Message` 实例并手动添加附件和所有适当的标头来创建一个新的对象结构体。 不过对于" +" MIME 消息来说,:mod:`email` 包提供了一些便捷子类来让事情变得更容易。" + +#: ../../library/email.mime.rst:29 +msgid "Here are the classes:" +msgstr "这些类列示如下:" + +#: ../../library/email.mime.rst:35 +msgid "Module: :mod:`email.mime.base`" +msgstr "模块: :mod:`email.mime.base`" + +#: ../../library/email.mime.rst:37 +msgid "" +"This is the base class for all the MIME-specific subclasses of " +":class:`~email.message.Message`. Ordinarily you won't create instances " +"specifically of :class:`MIMEBase`, although you could. :class:`MIMEBase` is" +" provided primarily as a convenient base class for more specific MIME-aware " +"subclasses." +msgstr "" +"这是 :class:`~email.message.Message` 的所有 MIME 专属子类。 通常你不会创建专门的 " +":class:`MIMEBase` 实例,尽管你可以这样做。 :class:`MIMEBase` 主要被提供用来作为更具体的 MIME " +"感知子类的便捷基类。" + +#: ../../library/email.mime.rst:43 +msgid "" +"*_maintype* is the :mailheader:`Content-Type` major type (e.g. " +":mimetype:`text` or :mimetype:`image`), and *_subtype* is the " +":mailheader:`Content-Type` minor type (e.g. :mimetype:`plain` or " +":mimetype:`gif`). *_params* is a parameter key/value dictionary and is " +"passed directly to :meth:`Message.add_header " +"`." +msgstr "" +"*_maintype* 是 :mailheader:`Content-Type` 的主类型 (例如 :mimetype:`text` 或 " +":mimetype:`image`),而 *_subtype* 是 :mailheader:`Content-Type` 的次类型 (例如 " +":mimetype:`plain` 或 :mimetype:`gif`)。 *_params* 是一个形参键/值字典并会被直接传递给 " +":meth:`Message.add_header `。" + +#: ../../library/email.mime.rst:49 +msgid "" +"If *policy* is specified, (defaults to the :class:`compat32 " +"` policy) it will be passed to " +":class:`~email.message.Message`." +msgstr "" +"如果指定了 *policy* (默认为 :class:`compat32 ` 策略),它将被传递给 " +":class:`~email.message.Message`。" + +#: ../../library/email.mime.rst:53 +msgid "" +"The :class:`MIMEBase` class always adds a :mailheader:`Content-Type` header " +"(based on *_maintype*, *_subtype*, and *_params*), and a :mailheader:`MIME-" +"Version` header (always set to ``1.0``)." +msgstr "" +":class:`MIMEBase` 类总是会添加一个 :mailheader:`Content-Type` 标头 (基于 *_maintype*, " +"*_subtype* 和 *_params*),以及一个 :mailheader:`MIME-Version` 标头 (总是设为 ``1.0``)。" + +#: ../../library/email.mime.rst:57 ../../library/email.mime.rst:104 +#: ../../library/email.mime.rst:135 ../../library/email.mime.rst:169 +#: ../../library/email.mime.rst:204 ../../library/email.mime.rst:224 +#: ../../library/email.mime.rst:258 +msgid "Added *policy* keyword-only parameter." +msgstr "添加了 *policy* 仅限关键字形参。" + +#: ../../library/email.mime.rst:65 +msgid "Module: :mod:`email.mime.nonmultipart`" +msgstr "模块: :mod:`email.mime.nonmultipart`" + +#: ../../library/email.mime.rst:67 +msgid "" +"A subclass of :class:`~email.mime.base.MIMEBase`, this is an intermediate " +"base class for MIME messages that are not :mimetype:`multipart`. The " +"primary purpose of this class is to prevent the use of the " +":meth:`~email.message.Message.attach` method, which only makes sense for " +":mimetype:`multipart` messages. If :meth:`~email.message.Message.attach` is" +" called, a :exc:`~email.errors.MultipartConversionError` exception is " +"raised." +msgstr "" +":class:`~email.mime.base.MIMEBase` 的子类,这是用于非 :mimetype:`multipart` MIME " +"消息的中间基类。 这个类的主要目标是避免使用 :meth:`~email.message.Message.attach` 方法,该方法仅对 " +":mimetype:`multipart` 消息有意义。 如果 :meth:`~email.message.Message.attach` " +"被调用,则会引发 :exc:`~email.errors.MultipartConversionError` 异常。" + +#: ../../library/email.mime.rst:80 +msgid "Module: :mod:`email.mime.multipart`" +msgstr "模块: :mod:`email.mime.multipart`" + +#: ../../library/email.mime.rst:82 +msgid "" +"A subclass of :class:`~email.mime.base.MIMEBase`, this is an intermediate " +"base class for MIME messages that are :mimetype:`multipart`. Optional " +"*_subtype* defaults to :mimetype:`mixed`, but can be used to specify the " +"subtype of the message. A :mailheader:`Content-Type` header of " +":mimetype:`multipart/_subtype` will be added to the message object. A " +":mailheader:`MIME-Version` header will also be added." +msgstr "" +":class:`~email.mime.base.MIMEBase` 的子类,这是用于 :mimetype:`multipart` MIME " +"消息的中间基类。 可选的 *_subtype* 默认为 :mimetype:`mixed`,但可被用来指定消息的子类型。 " +"将会在消息对象中添加一个:mimetype:`multipart/_subtype` 的 :mailheader:`Content-Type` 标头。 " +"并还将添加一个 :mailheader:`MIME-Version` 标头。" + +#: ../../library/email.mime.rst:89 +msgid "" +"Optional *boundary* is the multipart boundary string. When ``None`` (the " +"default), the boundary is calculated when needed (for example, when the " +"message is serialized)." +msgstr "可选的 *boundary* 是多部分边界字符串。 当为 ``None`` (默认值) 时,则会在必要时(例如当消息被序列化时)计算边界。" + +#: ../../library/email.mime.rst:93 +msgid "" +"*_subparts* is a sequence of initial subparts for the payload. It must be " +"possible to convert this sequence to a list. You can always attach new " +"subparts to the message by using the :meth:`Message.attach " +"` method." +msgstr "" +"*_subparts* 是载荷初始子部分的序列。 此序列必须可以被转换为列表。 你总是可以使用 :meth:`Message.attach " +"` 方法将新的子部分附加到消息中。" + +#: ../../library/email.mime.rst:98 ../../library/email.mime.rst:131 +#: ../../library/email.mime.rst:165 ../../library/email.mime.rst:199 +#: ../../library/email.mime.rst:222 ../../library/email.mime.rst:253 +msgid "" +"Optional *policy* argument defaults to :class:`compat32 " +"`." +msgstr "可选的 *policy* 参数默认为 :class:`compat32 `。" + +#: ../../library/email.mime.rst:100 +msgid "" +"Additional parameters for the :mailheader:`Content-Type` header are taken " +"from the keyword arguments, or passed into the *_params* argument, which is " +"a keyword dictionary." +msgstr "" +"用于 :mailheader:`Content-Type` 标头的附加形参会从关键字参数中获取,或者传入到 *_params* " +"参数,该参数是一个关键字的字典。" + +#: ../../library/email.mime.rst:113 +msgid "Module: :mod:`email.mime.application`" +msgstr "模块: :mod:`email.mime.application`" + +#: ../../library/email.mime.rst:115 +msgid "" +"A subclass of :class:`~email.mime.nonmultipart.MIMENonMultipart`, the " +":class:`MIMEApplication` class is used to represent MIME message objects of " +"major type :mimetype:`application`. *_data* is a string containing the raw " +"byte data. Optional *_subtype* specifies the MIME subtype and defaults to " +":mimetype:`octet-stream`." +msgstr "" +":class:`~email.mime.nonmultipart.MIMENonMultipart` " +"的子类,:class:`MIMEApplication` 类被用来表示主类型为 :mimetype:`application` 的 MIME 消息。 " +"*_data* 是包含原始字节数据的字符串。 可选的 *_subtype* 指定 MIME 子类型并默认为 :mimetype:`octet-" +"stream`。" + +#: ../../library/email.mime.rst:121 +msgid "" +"Optional *_encoder* is a callable (i.e. function) which will perform the " +"actual encoding of the data for transport. This callable takes one " +"argument, which is the :class:`MIMEApplication` instance. It should use " +":meth:`~email.message.Message.get_payload` and " +":meth:`~email.message.Message.set_payload` to change the payload to encoded " +"form. It should also add any :mailheader:`Content-Transfer-Encoding` or " +"other headers to the message object as necessary. The default encoding is " +"base64. See the :mod:`email.encoders` module for a list of the built-in " +"encoders." +msgstr "" +"可选的 *_encoder* 是一个可调用对象(即函数),它将执行实际的数据编码以便传输。 这个可调用对象接受一个参数,该参数是 " +":class:`MIMEApplication` 的实例。 它应当使用 " +":meth:`~email.message.Message.get_payload` 和 " +":meth:`~email.message.Message.set_payload` 来将载荷改为已编码形式。 它还应根据需要将任何 " +":mailheader:`Content-Transfer-Encoding` 或其他标头添加到消息对象中。 默认编码格式为 base64。 请参阅 " +":mod:`email.encoders` 模块来查看内置编码器列表。" + +#: ../../library/email.mime.rst:133 ../../library/email.mime.rst:167 +msgid "*_params* are passed straight through to the base class constructor." +msgstr "*_params* 会被直接传递给基类的构造器。" + +#: ../../library/email.mime.rst:144 +msgid "Module: :mod:`email.mime.audio`" +msgstr "模块: :mod:`email.mime.audio`" + +#: ../../library/email.mime.rst:146 +msgid "" +"A subclass of :class:`~email.mime.nonmultipart.MIMENonMultipart`, the " +":class:`MIMEAudio` class is used to create MIME message objects of major " +"type :mimetype:`audio`. *_audiodata* is a string containing the raw audio " +"data. If this data can be decoded by the standard Python module " +":mod:`sndhdr`, then the subtype will be automatically included in the " +":mailheader:`Content-Type` header. Otherwise you can explicitly specify the " +"audio subtype via the *_subtype* argument. If the minor type could not be " +"guessed and *_subtype* was not given, then :exc:`TypeError` is raised." +msgstr "" +":class:`~email.mime.nonmultipart.MIMENonMultipart` 的子类,:class:`MIMEAudio` " +"类被用来创建主类型为 :mimetype:`audio` 的 MIME 消息。 *_audiodata* 是包含原始音频数据的字符串。 " +"如果此数据可由标准 Python 模块 :mod:`sndhdr` 来解码,则其子类型将被自动包括在 :mailheader:`Content-" +"Type` 标头中。 在其他情况下你可以通过 *_subtype* 参数显式地指定音频子类型 。 如果无法猜测出主类型并且未给出 " +"*_subtype*,则会引发 :exc:`TypeError`。" + +#: ../../library/email.mime.rst:155 +msgid "" +"Optional *_encoder* is a callable (i.e. function) which will perform the " +"actual encoding of the audio data for transport. This callable takes one " +"argument, which is the :class:`MIMEAudio` instance. It should use " +":meth:`~email.message.Message.get_payload` and " +":meth:`~email.message.Message.set_payload` to change the payload to encoded " +"form. It should also add any :mailheader:`Content-Transfer-Encoding` or " +"other headers to the message object as necessary. The default encoding is " +"base64. See the :mod:`email.encoders` module for a list of the built-in " +"encoders." +msgstr "" +"可选的 *_encoder* 是一个可调用对象(即函数),它将执行实际的音频数据编码以便传输。 这个可调用对象接受一个参数,该参数是 " +":class:`MIMEAudio` 的实例。 它应当使用 :meth:`~email.message.Message.get_payload` 和 " +":meth:`~email.message.Message.set_payload` 来将载荷改为已编码形式。 它还应根据需要将任何 " +":mailheader:`Content-Transfer-Encoding` 或其他标头添加到消息对象中。 默认编码格式为 base64。 请参阅 " +":mod:`email.encoders` 模块来查看内置编码器列表。" + +#: ../../library/email.mime.rst:178 +msgid "Module: :mod:`email.mime.image`" +msgstr "模块: :mod:`email.mime.image`" + +#: ../../library/email.mime.rst:180 +msgid "" +"A subclass of :class:`~email.mime.nonmultipart.MIMENonMultipart`, the " +":class:`MIMEImage` class is used to create MIME message objects of major " +"type :mimetype:`image`. *_imagedata* is a string containing the raw image " +"data. If this data can be decoded by the standard Python module " +":mod:`imghdr`, then the subtype will be automatically included in the " +":mailheader:`Content-Type` header. Otherwise you can explicitly specify the " +"image subtype via the *_subtype* argument. If the minor type could not be " +"guessed and *_subtype* was not given, then :exc:`TypeError` is raised." +msgstr "" +":class:`~email.mime.nonmultipart.MIMENonMultipart` 的子类,:class:`MIMEImage` " +"类被用来创建主类型为 :mimetype:`image` 的 MIME 消息对象。 *_imagedata* 是包含原始图像数据的字符串。 " +"如果此数据可由标准 Python 模块 :mod:`imghdr` 来解码,则其子类型将被自动包括在 :mailheader:`Content-" +"Type` 标头中。 在其他情况下你可以通过 *_subtype* 参数显式地指定图像子类型。 如果无法猜测出主类型并且未给出 " +"*_subtype*,则会引发 :exc:`TypeError`。" + +#: ../../library/email.mime.rst:189 +msgid "" +"Optional *_encoder* is a callable (i.e. function) which will perform the " +"actual encoding of the image data for transport. This callable takes one " +"argument, which is the :class:`MIMEImage` instance. It should use " +":meth:`~email.message.Message.get_payload` and " +":meth:`~email.message.Message.set_payload` to change the payload to encoded " +"form. It should also add any :mailheader:`Content-Transfer-Encoding` or " +"other headers to the message object as necessary. The default encoding is " +"base64. See the :mod:`email.encoders` module for a list of the built-in " +"encoders." +msgstr "" +"可选的 *_encoder* 是一个可调用对象(即函数),它将执行实际的图像数据编码以便传输。 这个可调用对象接受一个参数,该参数是 " +":class:`MIMEImage` 的实例。 它应当使用 :meth:`~email.message.Message.get_payload` 和 " +":meth:`~email.message.Message.set_payload` 来将载荷改为已编码形式。 它还应根据需要将任何 " +":mailheader:`Content-Transfer-Encoding` 或其他标头添加到消息对象中。 默认编码格式为 base64。 请参阅 " +":mod:`email.encoders` 模块来查看内置编码器列表。" + +#: ../../library/email.mime.rst:201 +msgid "" +"*_params* are passed straight through to the " +":class:`~email.mime.base.MIMEBase` constructor." +msgstr "*_params* 会被直接传递给 :class:`~email.mime.base.MIMEBase` 构造器。" + +#: ../../library/email.mime.rst:211 +msgid "Module: :mod:`email.mime.message`" +msgstr "模块: :mod:`email.mime.message`" + +#: ../../library/email.mime.rst:213 +msgid "" +"A subclass of :class:`~email.mime.nonmultipart.MIMENonMultipart`, the " +":class:`MIMEMessage` class is used to create MIME objects of main type " +":mimetype:`message`. *_msg* is used as the payload, and must be an instance " +"of class :class:`~email.message.Message` (or a subclass thereof), otherwise " +"a :exc:`TypeError` is raised." +msgstr "" +":class:`~email.mime.nonmultipart.MIMENonMultipart` 的子类,:class:`MIMEMessage` " +"类被用来创建主类型为 :mimetype:`message` 的 MIME 对象。 *_msg* 将被用作载荷,并且必须为 " +":class:`~email.message.Message` 类(或其子类)的实例,否则会引发 :exc:`TypeError`。" + +#: ../../library/email.mime.rst:219 +msgid "" +"Optional *_subtype* sets the subtype of the message; it defaults to " +":mimetype:`rfc822`." +msgstr "可选的 *_subtype* 设置消息的子类型;它的默认值为 :mimetype:`rfc822`。" + +#: ../../library/email.mime.rst:231 +msgid "Module: :mod:`email.mime.text`" +msgstr "模块: :mod:`email.mime.text`" + +#: ../../library/email.mime.rst:233 +msgid "" +"A subclass of :class:`~email.mime.nonmultipart.MIMENonMultipart`, the " +":class:`MIMEText` class is used to create MIME objects of major type " +":mimetype:`text`. *_text* is the string for the payload. *_subtype* is the " +"minor type and defaults to :mimetype:`plain`. *_charset* is the character " +"set of the text and is passed as an argument to the " +":class:`~email.mime.nonmultipart.MIMENonMultipart` constructor; it defaults " +"to ``us-ascii`` if the string contains only ``ascii`` code points, and " +"``utf-8`` otherwise. The *_charset* parameter accepts either a string or a " +":class:`~email.charset.Charset` instance." +msgstr "" +":class:`~email.mime.nonmultipart.MIMENonMultipart` 的子类,:class:`MIMEText` " +"类被用来创建主类型为 :mimetype:`text` 的 MIME 对象。 *_text* 是用作载荷的字符串。 *_subtype* " +"指定子类型并且默认为 :mimetype:`plain`。 *_charset* 是文本的字符集并会作为参数传递给 " +":class:`~email.mime.nonmultipart.MIMENonMultipart` 构造器;如果该字符串仅包含 ``ascii`` " +"码位则其默认值为 ``us-ascii``,否则为 ``utf-8``。 *_charset* 形参接受一个字符串或是一个 " +":class:`~email.charset.Charset` 实例。" + +#: ../../library/email.mime.rst:243 +msgid "" +"Unless the *_charset* argument is explicitly set to ``None``, the MIMEText " +"object created will have both a :mailheader:`Content-Type` header with a " +"``charset`` parameter, and a :mailheader:`Content-Transfer-Encoding` header." +" This means that a subsequent ``set_payload`` call will not result in an " +"encoded payload, even if a charset is passed in the ``set_payload`` command." +" You can \"reset\" this behavior by deleting the ``Content-Transfer-" +"Encoding`` header, after which a ``set_payload`` call will automatically " +"encode the new payload (and add a new :mailheader:`Content-Transfer-" +"Encoding` header)." +msgstr "" +"除非 *_charset* 参数被显式地设为 ``None``,否则所创建的 MIMEText 对象将同时具有附带 ``charset`` 形参的 " +":mailheader:`Content-Type` 标头,以及 :mailheader:`Content-Transfer-Encoding` 标头。" +" 这意味着后续的 ``set_payload`` 调用将不再产生已编码的载荷,即使它在 ``set_payload`` 命令中被传入。 你可以通过删除 " +"``Content-Transfer-Encoding`` 标头来“重置”此行为,在此之后的 ``set_payload`` " +"调用将自动编码新的载荷(并添加新的 :mailheader:`Content-Transfer-Encoding` 标头)。" + +#: ../../library/email.mime.rst:255 +msgid "*_charset* also accepts :class:`~email.charset.Charset` instances." +msgstr "*_charset* 也可接受 :class:`~email.charset.Charset` 实例。" diff --git a/library/email.parser.po b/library/email.parser.po new file mode 100644 index 000000000..c21aed1fd --- /dev/null +++ b/library/email.parser.po @@ -0,0 +1,474 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) 2001-2024, Python Software Foundation +# This file is distributed under the same license as the Python package. +# FIRST AUTHOR , YEAR. +# +# Translators: +# Freesand Leo , 2020 +# Kevin Deng , 2020 +# Rafael Fontenelle , 2024 +# +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: Python 3.9\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2024-02-16 21:12+0000\n" +"PO-Revision-Date: 2017-02-16 23:09+0000\n" +"Last-Translator: Rafael Fontenelle , 2024\n" +"Language-Team: Chinese (China) (https://app.transifex.com/python-doc/teams/5390/zh_CN/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: zh_CN\n" +"Plural-Forms: nplurals=1; plural=0;\n" + +#: ../../library/email.parser.rst:2 +msgid ":mod:`email.parser`: Parsing email messages" +msgstr ":mod:`email.parser`: 解析电子邮件信息" + +#: ../../library/email.parser.rst:7 +msgid "**Source code:** :source:`Lib/email/parser.py`" +msgstr "**源代码**: :source:`Lib/email/parser.py`" + +#: ../../library/email.parser.rst:11 +msgid "" +"Message object structures can be created in one of two ways: they can be " +"created from whole cloth by creating an :class:`~email.message.EmailMessage`" +" object, adding headers using the dictionary interface, and adding " +"payload(s) using :meth:`~email.message.EmailMessage.set_content` and related" +" methods, or they can be created by parsing a serialized representation of " +"the email message." +msgstr "" +"使用以下两种方法的其中一种以创建消息对象结构:直接创建一个 :class:`~email.message.EmailMessage` " +"对象,使用字典接口添加消息头,并且使用 :meth:`~email.message.EmailMessage.set_content` " +"和其他相关方法添加消息负载;或者通过解析一个电子邮件消息的序列化表达来创建消息对象结构。" + +#: ../../library/email.parser.rst:18 +msgid "" +"The :mod:`email` package provides a standard parser that understands most " +"email document structures, including MIME documents. You can pass the " +"parser a bytes, string or file object, and the parser will return to you the" +" root :class:`~email.message.EmailMessage` instance of the object structure." +" For simple, non-MIME messages the payload of this root object will likely " +"be a string containing the text of the message. For MIME messages, the root" +" object will return ``True`` from its " +":meth:`~email.message.EmailMessage.is_multipart` method, and the subparts " +"can be accessed via the payload manipulation methods, such as " +":meth:`~email.message.EmailMessage.get_body`, " +":meth:`~email.message.EmailMessage.iter_parts`, and " +":meth:`~email.message.EmailMessage.walk`." +msgstr "" +":mod:`email` 包提供了一个可以理解包含 MIME 文档在内的绝大多数电子邮件文档结构的标准语法分析程序。 " +"你可以传递给语法分析程序一个字节串、字符串或者文件对象,语法分析程序会返回给你对应于该对象结构的根 " +":class:`~email.message.EmailMessage` 实例。 对于简单的、非 MIME " +"的消息,这个根对象的负载很可能就是一个包含了该消息文字内容的字符串。 对于 MIME 消息,调用根对象的 " +":meth:`~email.message.EmailMessage.is_multipart` 方法会返回 " +"``True``,其子项可以通过负载操纵方法来进行访问,例如 " +":meth:`~email.message.EmailMessage.get_body`、:meth:`~email.message.EmailMessage.iter_parts`" +" 还有 :meth:`~email.message.EmailMessage.walk`。" + +#: ../../library/email.parser.rst:30 +msgid "" +"There are actually two parser interfaces available for use, the " +":class:`Parser` API and the incremental :class:`FeedParser` API. The " +":class:`Parser` API is most useful if you have the entire text of the " +"message in memory, or if the entire message lives in a file on the file " +"system. :class:`FeedParser` is more appropriate when you are reading the " +"message from a stream which might block waiting for more input (such as " +"reading an email message from a socket). The :class:`FeedParser` can " +"consume and parse the message incrementally, and only returns the root " +"object when you close the parser." +msgstr "" +"事实上你可以使用的语法分析程序接口有两种: :class:`Parser` API 和增量式的 :class:`FeedParser` " +"API。当你的全部消息内容都在内存当中,或者整个消息都保存在文件系统内的一个文件当中的时候,:class:`Parser` " +"API非常有用。当你从可能会为了等待更多输入而阻塞的数据流当中读取消息(比如从套接字当中读取电子邮件消息)的时候,:class:`FeedParser`" +" 会更合适。:class:`FeedParser` 会增量读取并解析消息,并且只有在你关闭语法分析程序的时候才会返回根对象。" + +#: ../../library/email.parser.rst:39 +msgid "" +"Note that the parser can be extended in limited ways, and of course you can " +"implement your own parser completely from scratch. All of the logic that " +"connects the :mod:`email` package's bundled parser and the " +":class:`~email.message.EmailMessage` class is embodied in the :mod:`policy` " +"class, so a custom parser can create message object trees any way it finds " +"necessary by implementing custom versions of the appropriate :mod:`policy` " +"methods." +msgstr "" +"请注意,语法分析程序可以进行有限的拓展,你当然也可以完全从零开始实现你自己的语法分析程序。将 :mod:`email` 包中内置的语法分析程序和 " +":class:`~email.message.EmailMessage` 类连接起来的所有逻辑代码都包含在 :mod:`policy` " +"类当中,所以如有必要,自定义的语法分析程序可以通过实现自定义的对应 :mod:`policy` 方法来创建对应的消息对象树。" + +#: ../../library/email.parser.rst:49 +msgid "FeedParser API" +msgstr "FeedParser API" + +#: ../../library/email.parser.rst:51 +msgid "" +"The :class:`BytesFeedParser`, imported from the :mod:`email.feedparser` " +"module, provides an API that is conducive to incremental parsing of email " +"messages, such as would be necessary when reading the text of an email " +"message from a source that can block (such as a socket). The " +":class:`BytesFeedParser` can of course be used to parse an email message " +"fully contained in a :term:`bytes-like object`, string, or file, but the " +":class:`BytesParser` API may be more convenient for such use cases. The " +"semantics and results of the two parser APIs are identical." +msgstr "" +"从 :mod:`email.feedparser` 模块导入的 :class:`BytesFeedParser` " +"类提供了一个适合于增量解析电子邮件消息的API,比如说在从一个可能会阻塞(例如套接字)的源当中读取消息文字的场合中它就会变得很有用。当然, " +":class:`BytesFeedParser` 也可以用来解析一个已经完整包含在一个 :term:`bytes-like object` " +"、字符串或文件内的电子邮件消息,但是在这些场合下使用 :class:`BytesParser` " +"API可能会更加方便。这两个语法分析程序API的语义和最终结果是一致的。" + +#: ../../library/email.parser.rst:60 +msgid "" +"The :class:`BytesFeedParser`'s API is simple; you create an instance, feed " +"it a bunch of bytes until there's no more to feed it, then close the parser " +"to retrieve the root message object. The :class:`BytesFeedParser` is " +"extremely accurate when parsing standards-compliant messages, and it does a " +"very good job of parsing non-compliant messages, providing information about" +" how a message was deemed broken. It will populate a message object's " +":attr:`~email.message.EmailMessage.defects` attribute with a list of any " +"problems it found in a message. See the :mod:`email.errors` module for the " +"list of defects that it can find." +msgstr "" +":class:`BytesFeedParser` " +"的API十分简洁易懂:你创建一个语法分析程序的实例,向它不断输入大量的字节直到尽头,然后关闭这个语法分析程序就可以拿到根消息对象了。 " +"在处理符合标准的消息的时候 :class:`BytesFeedParser` " +"非常准确;在处理不符合标准的消息的时候它做的也不差,但这视消息损坏的程度而定。它会向消息对象的 " +":attr:`~email.message.EmailMessage.defects` " +"属性中写入它从消息中找到的问题列表。关于它能找到的所有问题类型的列表,详见 :mod:`email.errors` 模块。" + +#: ../../library/email.parser.rst:70 +msgid "Here is the API for the :class:`BytesFeedParser`:" +msgstr "这里是 :class:`BytesFeedParser` 的 API:" + +#: ../../library/email.parser.rst:75 +msgid "" +"Create a :class:`BytesFeedParser` instance. Optional *_factory* is a no-" +"argument callable; if not specified use the " +":attr:`~email.policy.Policy.message_factory` from the *policy*. Call " +"*_factory* whenever a new message object is needed." +msgstr "" +"创建一个 :class:`BytesFeedParser` 实例。可选的 *_factory* 参数是一个不带参数的可调用对象;如果没有被指定,就会使用" +" *policy* 参数的 :attr:`~email.policy.Policy.message_factory` 属性。 " +"每当需要一个新的消息对象的时候,*_factory* 都会被调用。" + +#: ../../library/email.parser.rst:80 +msgid "" +"If *policy* is specified use the rules it specifies to update the " +"representation of the message. If *policy* is not set, use the " +":class:`compat32 ` policy, which maintains backward " +"compatibility with the Python 3.2 version of the email package and provides " +":class:`~email.message.Message` as the default factory. All other policies " +"provide :class:`~email.message.EmailMessage` as the default *_factory*. For " +"more information on what else *policy* controls, see the " +":mod:`~email.policy` documentation." +msgstr "" +"如果指定了 *policy* 参数,它就会使用这个参数所指定的规则来更新消息的表达方式。 如果没有设定 *policy* 参数,它就会使用 " +":class:`compat32 ` 策略。 这个策略维持了对 Python 3.2 版本的 email " +"包的后向兼容性,并且使用 :class:`~email.message.Message` 作为默认的工厂。 其他策略使用 " +":class:`~email.message.EmailMessage` 作为默认的 *_factory*。 关于 *policy* 还会控制什么,参见" +" :mod:`~email.policy` 的文档。" + +#: ../../library/email.parser.rst:89 ../../library/email.parser.rst:145 +msgid "" +"Note: **The policy keyword should always be specified**; The default will " +"change to :data:`email.policy.default` in a future version of Python." +msgstr "" +"注: **一定要指定policy关键字**。 在未来版本的 Python 当中,它的默认值会变成 " +":data:`email.policy.default`。" + +#: ../../library/email.parser.rst:94 ../../library/email.parser.rst:122 +msgid "Added the *policy* keyword." +msgstr "添加了 *policy* 关键字。" + +#: ../../library/email.parser.rst:95 +msgid "*_factory* defaults to the policy ``message_factory``." +msgstr "*_factory* 默认为策略 ``message_factory``。" + +#: ../../library/email.parser.rst:100 +msgid "" +"Feed the parser some more data. *data* should be a :term:`bytes-like " +"object` containing one or more lines. The lines can be partial and the " +"parser will stitch such partial lines together properly. The lines can have" +" any of the three common line endings: carriage return, newline, or carriage" +" return and newline (they can even be mixed)." +msgstr "" +"向语法分析程序输入更多数据。*data* 应当是一个包含一行或多行内容的 :term:`bytes-like object`。 " +"行内容可以是不完整的,语法分析程序会妥善的将这些不完整的行缝合在一起。每一行可以使用以下三种常见的终止符号的其中一种:回车符、换行符或回车符加换行符(三者甚至可以混合使用)。" + +#: ../../library/email.parser.rst:109 +msgid "" +"Complete the parsing of all previously fed data and return the root message " +"object. It is undefined what happens if :meth:`~feed` is called after this " +"method has been called." +msgstr "完成之前输入的所有数据的解析并返回根消息对象。 如果在这个方法被调用之后仍然调用 :meth:`~feed` 方法,结果是未定义的。" + +#: ../../library/email.parser.rst:116 +msgid "" +"Works like :class:`BytesFeedParser` except that the input to the " +":meth:`~BytesFeedParser.feed` method must be a string. This is of limited " +"utility, since the only way for such a message to be valid is for it to " +"contain only ASCII text or, if :attr:`~email.policy.Policy.utf8` is " +"``True``, no binary attachments." +msgstr "" +"行为跟 :class:`BytesFeedParser` 类一致,只不过向 :meth:`~BytesFeedParser.feed` " +"方法输入的内容必须是字符串。它的实用性有限,因为这种消息只有在其只含有ASCII文字,或者 " +":attr:`~email.policy.Policy.utf8` 被设置为 ``True`` 且没有二进制格式的附件的时候,才会有效。" + +#: ../../library/email.parser.rst:126 +msgid "Parser API" +msgstr "Parser API" + +#: ../../library/email.parser.rst:128 +msgid "" +"The :class:`BytesParser` class, imported from the :mod:`email.parser` " +"module, provides an API that can be used to parse a message when the " +"complete contents of the message are available in a :term:`bytes-like " +"object` or file. The :mod:`email.parser` module also provides " +":class:`Parser` for parsing strings, and header-only parsers, " +":class:`BytesHeaderParser` and :class:`HeaderParser`, which can be used if " +"you're only interested in the headers of the message. " +":class:`BytesHeaderParser` and :class:`HeaderParser` can be much faster in " +"these situations, since they do not attempt to parse the message body, " +"instead setting the payload to the raw body." +msgstr "" +":class:`BytesParser` 类从 :mod:`email.parser` 模块导入,当消息的完整内容包含在一个 :term:`bytes-" +"like object` 或文件中时它提供了可用于解析消息的 API。 :mod:`email.parser` 模块还提供了 " +":class:`Parser` 用来解析字符串,以及只用来解析消息头的 :class:`BytesHeaderParser` 和 " +":class:`HeaderParser`,如果你只对消息头感兴趣就可以使用后两者。 在这种场合下 :class:`BytesHeaderParser`" +" 和 :class:`HeaderParser` 速度非常快,因为它们并不会尝试解析消息体,而是将载荷设为原始数据。" + +#: ../../library/email.parser.rst:141 +msgid "" +"Create a :class:`BytesParser` instance. The *_class* and *policy* arguments" +" have the same meaning and semantics as the *_factory* and *policy* " +"arguments of :class:`BytesFeedParser`." +msgstr "" +"创建一个 :class:`BytesParser` 实例。 *_class* 和 *policy* 参数在含义和语义上与 " +":class:`BytesFeedParser` 的 *_factory* 和 *policy* 参数一致。" + +#: ../../library/email.parser.rst:148 +msgid "" +"Removed the *strict* argument that was deprecated in 2.4. Added the " +"*policy* keyword." +msgstr "移除了在2.4版本中被弃用的 *strict* 参数。新增了 *policy* 关键字。" + +#: ../../library/email.parser.rst:151 ../../library/email.parser.rst:200 +#: ../../library/email.parser.rst:280 +msgid "*_class* defaults to the policy ``message_factory``." +msgstr "*_class* 默认为策略 ``message_factory``。" + +#: ../../library/email.parser.rst:156 +msgid "" +"Read all the data from the binary file-like object *fp*, parse the resulting" +" bytes, and return the message object. *fp* must support both the " +":meth:`~io.IOBase.readline` and the :meth:`~io.IOBase.read` methods." +msgstr "" +"从二进制的类文件对象 *fp* 中读取全部数据、解析其字节内容、并返回消息对象。 *fp* 必须同时支持 " +":meth:`~io.IOBase.readline` 方法和 :meth:`~io.IOBase.read` 方法。" + +#: ../../library/email.parser.rst:161 +msgid "" +"The bytes contained in *fp* must be formatted as a block of :rfc:`5322` (or," +" if :attr:`~email.policy.Policy.utf8` is ``True``, :rfc:`6532`) style " +"headers and header continuation lines, optionally preceded by an envelope " +"header. The header block is terminated either by the end of the data or by " +"a blank line. Following the header block is the body of the message (which " +"may contain MIME-encoded subparts, including subparts with a " +":mailheader:`Content-Transfer-Encoding` of ``8bit``)." +msgstr "" +"*fp* 内包含的字节内容必须是一块遵循 :rfc:`5322` (如果 :attr:`~email.policy.Policy.utf8` 为 " +"``True``,则为 :rfc:`6532` )格式风格的消息头和消息头延续行,并可能紧跟一个信封头。 头块要么以数据结束,要么以一个空行为终止。 " +"跟着头块的是消息体(消息体内可能包含 MIME 编码的子部分,这也包括 :mailheader:`Content-Transfer-Encoding` " +"字段为 ``8bit`` 的子部分)。" + +#: ../../library/email.parser.rst:169 +msgid "" +"Optional *headersonly* is a flag specifying whether to stop parsing after " +"reading the headers or not. The default is ``False``, meaning it parses the" +" entire contents of the file." +msgstr "" +"可选的 *headersonly* 指示了是否应当在读取完消息头后就终止。默认值为 ``False`` ,意味着它会解析整个文件的全部内容。" + +#: ../../library/email.parser.rst:176 +msgid "" +"Similar to the :meth:`parse` method, except it takes a :term:`bytes-like " +"object` instead of a file-like object. Calling this method on a " +":term:`bytes-like object` is equivalent to wrapping *bytes* in a " +":class:`~io.BytesIO` instance first and calling :meth:`parse`." +msgstr "" +"与 :meth:`parse` 方法类似,只不过它要求输入为一个 :term:`bytes-like object` 而不是类文件对象。于一个 " +":term:`bytes-like object` 调用此方法相当于先将这些字节包装于一个 :class:`~io.BytesIO` 实例中,然后调用 " +":meth:`parse` 方法。" + +#: ../../library/email.parser.rst:181 ../../library/email.parser.rst:221 +msgid "Optional *headersonly* is as with the :meth:`parse` method." +msgstr "可选的 *headersonly* 与 :meth:`parse` 方法中的 *headersonly* 是一致的。" + +#: ../../library/email.parser.rst:188 +msgid "" +"Exactly like :class:`BytesParser`, except that *headersonly* defaults to " +"``True``." +msgstr "除了 *headersonly* 默认为 ``True``,其他与 :class:`BytesParser` 类完全一样。" + +#: ../../library/email.parser.rst:196 +msgid "" +"This class is parallel to :class:`BytesParser`, but handles string input." +msgstr "这个类与 :class:`BytesParser` 一样,但是处理字符串输入。" + +#: ../../library/email.parser.rst:198 ../../library/email.parser.rst:245 +#: ../../library/email.parser.rst:258 ../../library/email.parser.rst:268 +#: ../../library/email.parser.rst:278 +msgid "Removed the *strict* argument. Added the *policy* keyword." +msgstr "移除了 *strict* 参数。添加了 *policy* 关键字。" + +#: ../../library/email.parser.rst:205 +msgid "" +"Read all the data from the text-mode file-like object *fp*, parse the " +"resulting text, and return the root message object. *fp* must support both " +"the :meth:`~io.TextIOBase.readline` and the :meth:`~io.TextIOBase.read` " +"methods on file-like objects." +msgstr "" +"从文本模式的文件型对象 *fp* 读取所有数据,解析所读取的文本,并返回根消息对象。 *fp* 必须同时支持文件型对象上的 " +":meth:`~io.TextIOBase.readline` 和 :meth:`~io.TextIOBase.read` 方法。" + +#: ../../library/email.parser.rst:210 +msgid "" +"Other than the text mode requirement, this method operates like " +":meth:`BytesParser.parse`." +msgstr "除了文字模式的要求外,这个方法跟 :meth:`BytesParser.parse` 的运行方式一致。" + +#: ../../library/email.parser.rst:216 +msgid "" +"Similar to the :meth:`parse` method, except it takes a string object instead" +" of a file-like object. Calling this method on a string is equivalent to " +"wrapping *text* in a :class:`~io.StringIO` instance first and calling " +":meth:`parse`." +msgstr "" +"与 :meth:`parse` 方法类似,只不过它要求输入为一个字符串而不是类文件对象。于一个字符串对象调用此方法相当于先将 *text* 包装于一个 " +":class:`~io.StringIO` 实例中,然后调用 :meth:`parse` 方法。" + +#: ../../library/email.parser.rst:226 +msgid "" +"Exactly like :class:`Parser`, except that *headersonly* defaults to " +"``True``." +msgstr "除了 *headersonly* 默认为 ``True`` ,其他与 :class:`Parser` 类完全一样。" + +#: ../../library/email.parser.rst:230 +msgid "" +"Since creating a message object structure from a string or a file object is " +"such a common task, four functions are provided as a convenience. They are " +"available in the top-level :mod:`email` package namespace." +msgstr "" +"考虑到从一个字符串或一个文件对象中创建一个消息对象是非常常见的任务,我们提供了四个方便的函数。它们于顶层 :mod:`email` 包命名空间内可用。" + +#: ../../library/email.parser.rst:239 +msgid "" +"Return a message object structure from a :term:`bytes-like object`. This is" +" equivalent to ``BytesParser().parsebytes(s)``. Optional *_class* and " +"*policy* are interpreted as with the :class:`~email.parser.BytesParser` " +"class constructor." +msgstr "" +"从一个 :term:`bytes-like object` 中返回消息对象。 这与 ``BytesParser().parsebytes(s)`` " +"等价。 可选的 *_class* 和 *policy* 参数与 :class:`~email.parser.BytesParser` " +"类的构造函数的参数含义一致。" + +#: ../../library/email.parser.rst:252 +msgid "" +"Return a message object structure tree from an open binary :term:`file " +"object`. This is equivalent to ``BytesParser().parse(fp)``. *_class* and " +"*policy* are interpreted as with the :class:`~email.parser.BytesParser` " +"class constructor." +msgstr "" +"从打开的二进制 :term:`file object` 中返回消息对象。 这与 ``BytesParser().parse(fp)`` 等价。 " +"*_class* 和 *policy* 参数与 :class:`~email.parser.BytesParser` 类的构造函数的参数含义一致。" + +#: ../../library/email.parser.rst:264 +msgid "" +"Return a message object structure from a string. This is equivalent to " +"``Parser().parsestr(s)``. *_class* and *policy* are interpreted as with the" +" :class:`~email.parser.Parser` class constructor." +msgstr "" +"从一个字符串中返回消息对象。 这与 ``Parser().parsestr(s)`` 等价。 *_class* 和 *policy* 参数与 " +":class:`~email.parser.Parser` 类的构造函数的参数含义一致。" + +#: ../../library/email.parser.rst:274 +msgid "" +"Return a message object structure tree from an open :term:`file object`. " +"This is equivalent to ``Parser().parse(fp)``. *_class* and *policy* are " +"interpreted as with the :class:`~email.parser.Parser` class constructor." +msgstr "" +"从一个打开的 :term:`file object` 中返回消息对象。 这与 ``Parser().parse(fp)`` 等价。 *_class* 和" +" *policy* 参数与 :class:`~email.parser.Parser` 类的构造函数的参数含义一致。" + +#: ../../library/email.parser.rst:283 +msgid "" +"Here's an example of how you might use :func:`message_from_bytes` at an " +"interactive Python prompt::" +msgstr "这里是一个展示了你如何在Python交互式命令行中使用 :func:`message_from_bytes` 的例子:" + +#: ../../library/email.parser.rst:291 +msgid "Additional notes" +msgstr "附加说明" + +#: ../../library/email.parser.rst:293 +msgid "Here are some notes on the parsing semantics:" +msgstr "在解析语义的时候请注意:" + +#: ../../library/email.parser.rst:295 +msgid "" +"Most non-\\ :mimetype:`multipart` type messages are parsed as a single " +"message object with a string payload. These objects will return ``False`` " +"for :meth:`~email.message.EmailMessage.is_multipart`, and " +":meth:`~email.message.EmailMessage.iter_parts` will yield an empty list." +msgstr "" +"大多数非 :mimetype:`multipart` 类型的消息都会被解析为一个带有字符串负载的消息对象。这些对象在调用 " +":meth:`~email.message.EmailMessage.is_multipart` 的时候会返回 ``False`` ,调用 " +":meth:`~email.message.EmailMessage.iter_parts` 的时候会产生一个空列表。" + +#: ../../library/email.parser.rst:300 +msgid "" +"All :mimetype:`multipart` type messages will be parsed as a container " +"message object with a list of sub-message objects for their payload. The " +"outer container message will return ``True`` for " +":meth:`~email.message.EmailMessage.is_multipart`, and " +":meth:`~email.message.EmailMessage.iter_parts` will yield a list of " +"subparts." +msgstr "" +"所有 :mimetype:`multipart` 类型的消息都会被解析成一个容器消息对象。该对象的负载是一个子消息对象列表。外层的容器消息在调用 " +":meth:`~email.message.EmailMessage.is_multipart` 的时候会返回 ``True`` ,在调用 " +":meth:`~email.message.EmailMessage.iter_parts` 的时候会产生一个子部分列表。" + +#: ../../library/email.parser.rst:306 +msgid "" +"Most messages with a content type of :mimetype:`message/\\*` (such as " +":mimetype:`message/delivery-status` and :mimetype:`message/rfc822`) will " +"also be parsed as container object containing a list payload of length 1. " +"Their :meth:`~email.message.EmailMessage.is_multipart` method will return " +"``True``. The single element yielded by " +":meth:`~email.message.EmailMessage.iter_parts` will be a sub-message object." +msgstr "" +"大多数内容类型为 :mimetype:`message/\\*` (例如 :mimetype:`message/delivery-status` 和 " +":mimetype:`message/rfc822` )的消息也会被解析为一个负载是长度为1的列表的容器对象。在它们身上调用 " +":meth:`~email.message.EmailMessage.is_multipart` 方法会返回 ``True`` ,调用 " +":meth:`~email.message.EmailMessage.iter_parts` 所产生的单个元素会是一个子消息对象。" + +#: ../../library/email.parser.rst:313 +msgid "" +"Some non-standards-compliant messages may not be internally consistent about" +" their :mimetype:`multipart`\\ -edness. Such messages may have a " +":mailheader:`Content-Type` header of type :mimetype:`multipart`, but their " +":meth:`~email.message.EmailMessage.is_multipart` method may return " +"``False``. If such messages were parsed with the " +":class:`~email.parser.FeedParser`, they will have an instance of the " +":class:`~email.errors.MultipartInvariantViolationDefect` class in their " +"*defects* attribute list. See :mod:`email.errors` for details." +msgstr "" +"一些不遵循标准的消息在其内部关于它是否为 :mimetype:`multipart` 类型前后不一。这些消息可能在消息头的 " +":mailheader:`Content-Type` 字段中写明为 :mimetype:`multipart` ,但它们的 " +":meth:`~email.message.EmailMessage.is_multipart` 方法的返回值可能是 ``False`` " +"。如果这种消息被 :class:`~email.parser.FeedParser` 类解析,它们的 *defects* 属性列表当中会有一个 " +":class:`~email.errors.MultipartInvariantViolationDefect` 类的实例。关于更多信息,详见 " +":mod:`email.errors` 。" diff --git a/library/email.po b/library/email.po new file mode 100644 index 000000000..90e0e90bb --- /dev/null +++ b/library/email.po @@ -0,0 +1,250 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) 2001-2022, Python Software Foundation +# This file is distributed under the same license as the Python package. +# FIRST AUTHOR , YEAR. +# +# Translators: +# Arisaka97 , 2021 +# Freesand Leo , 2021 +# +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: Python 3.9\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2022-11-04 14:34+0000\n" +"PO-Revision-Date: 2017-02-16 23:09+0000\n" +"Last-Translator: Freesand Leo , 2021\n" +"Language-Team: Chinese (China) (https://www.transifex.com/python-doc/teams/5390/zh_CN/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: zh_CN\n" +"Plural-Forms: nplurals=1; plural=0;\n" + +#: ../../library/email.rst:2 +msgid ":mod:`email` --- An email and MIME handling package" +msgstr ":mod:`email` --- 电子邮件与 MIME 处理包" + +#: ../../library/email.rst:11 +msgid "**Source code:** :source:`Lib/email/__init__.py`" +msgstr "**源代码:** :source:`Lib/email/__init__.py`" + +#: ../../library/email.rst:15 +msgid "" +"The :mod:`email` package is a library for managing email messages. It is " +"specifically *not* designed to do any sending of email messages to SMTP " +"(:rfc:`2821`), NNTP, or other servers; those are functions of modules such " +"as :mod:`smtplib` and :mod:`nntplib`. The :mod:`email` package attempts to " +"be as RFC-compliant as possible, supporting :rfc:`5322` and :rfc:`6532`, as " +"well as such MIME-related RFCs as :rfc:`2045`, :rfc:`2046`, :rfc:`2047`, " +":rfc:`2183`, and :rfc:`2231`." +msgstr "" +":mod:`email` 包是一个用于管理电子邮件消息的库。 它 *并非* 被设计为执行向 SMTP (:rfc:`2821`), NNTP " +"或其他服务器发送电子邮件消息的操作;这些是 :mod:`smtplib` 和 :mod:`nntplib` 等模块的功能。 :mod:`email` " +"包试图尽可能地遵循 RFC,支持 :rfc:`5322` 和 :rfc:`6532`,以及与 MIME 相关的各个 RFC 例如 " +":rfc:`2045`, :rfc:`2046`, :rfc:`2047`, :rfc:`2183` 和 :rfc:`2231`。" + +#: ../../library/email.rst:23 +msgid "" +"The overall structure of the email package can be divided into three major " +"components, plus a fourth component that controls the behavior of the other " +"components." +msgstr "email 包的总体结构可以分为三个主要组件,另外还有第四个组件用于控制其他组件的行为。" + +#: ../../library/email.rst:27 +msgid "" +"The central component of the package is an \"object model\" that represents " +"email messages. An application interacts with the package primarily through" +" the object model interface defined in the :mod:`~email.message` sub-module." +" The application can use this API to ask questions about an existing email," +" to construct a new email, or to add or remove email subcomponents that " +"themselves use the same object model interface. That is, following the " +"nature of email messages and their MIME subcomponents, the email object " +"model is a tree structure of objects that all provide the " +":class:`~email.message.EmailMessage` API." +msgstr "" +"这个包的中心组件是代表电子邮件消息的“对象模型”。 应用程序主要通过在 :mod:`~email.message` " +"子模块中定义的对象模型接口与这个包进行交互。 应用程序可以使用此 API " +"来询问有关现有电子邮件的问题、构造新的电子邮件,或者添加或移除自身也使用相同对象模型接口的电子邮件子组件。 也就是说,遵循电子邮件消息及其 MIME " +"子组件的性质,电子邮件对象模型是所有提供 :class:`~email.message.EmailMessage` API 的对象所构成的树状结构。" + +#: ../../library/email.rst:37 +msgid "" +"The other two major components of the package are the :mod:`~email.parser` " +"and the :mod:`~email.generator`. The parser takes the serialized version of" +" an email message (a stream of bytes) and converts it into a tree of " +":class:`~email.message.EmailMessage` objects. The generator takes an " +":class:`~email.message.EmailMessage` and turns it back into a serialized " +"byte stream. (The parser and generator also handle streams of text " +"characters, but this usage is discouraged as it is too easy to end up with " +"messages that are not valid in one way or another.)" +msgstr "" +"这个包的另外两个主要组件是 :mod:`~email.parser` 和 :mod:`~email.generator`。 parser " +"接受电子邮件消息的序列化版本(字节流)并将其转换为 :class:`~email.message.EmailMessage` 对象树。 " +"generator 接受 :class:`~email.message.EmailMessage` 并将其转回序列化的字节流。 (parser 和 " +"generator 还能处理文本字符流,但不建议这种用法,因为这很容易导致某种形式的无效消息。" + +#: ../../library/email.rst:46 +msgid "" +"The control component is the :mod:`~email.policy` module. Every " +":class:`~email.message.EmailMessage`, every :mod:`~email.generator`, and " +"every :mod:`~email.parser` has an associated :mod:`~email.policy` object " +"that controls its behavior. Usually an application only needs to specify " +"the policy when an :class:`~email.message.EmailMessage` is created, either " +"by directly instantiating an :class:`~email.message.EmailMessage` to create" +" a new email, or by parsing an input stream using a :mod:`~email.parser`. " +"But the policy can be changed when the message is serialized using a " +":mod:`~email.generator`. This allows, for example, a generic email message " +"to be parsed from disk, but to serialize it using standard SMTP settings " +"when sending it to an email server." +msgstr "" +"控制组件是 :mod:`~email.policy` 模块。 每一个 :class:`~email.message.EmailMessage`、每一个 " +":mod:`~email.generator` 和每一个 :mod:`~email.parser` 都有一个相关联的 " +":mod:`~email.policy` 对象来控制其行为。 通常应用程序只有在 " +":class:`~email.message.EmailMessage` 被创建时才需要指明控制策略,或者通过直接实例代 " +":class:`~email.message.EmailMessage` 来新建电子邮件,或者通过使用 :mod:`~email.parser` " +"来解析输入流。 但是策略也可以在使用 :mod:`~email.generator` 序列化消息时被更改。 " +"例如,这允许从磁盘解析通用电子邮件消息,而在将消息发送到电子邮件服务器时使用标准 SMTP 设置对其进行序列化。" + +#: ../../library/email.rst:58 +msgid "" +"The email package does its best to hide the details of the various governing" +" RFCs from the application. Conceptually the application should be able to " +"treat the email message as a structured tree of unicode text and binary " +"attachments, without having to worry about how these are represented when " +"serialized. In practice, however, it is often necessary to be aware of at " +"least some of the rules governing MIME messages and their structure, " +"specifically the names and nature of the MIME \"content types\" and how they" +" identify multipart documents. For the most part this knowledge should only" +" be required for more complex applications, and even then it should only be " +"the high level structure in question, and not the details of how those " +"structures are represented. Since MIME content types are used widely in " +"modern internet software (not just email), this will be a familiar concept " +"to many programmers." +msgstr "" +"email 包会尽量地对应用程序隐藏各种控制类 RFC 的细节。 从概念上讲应用程序应当能够将电子邮件消息视为 Unicode " +"文本和二进制附件的结构化树,而不必担心在序列化时要如何表示它们。 但在实际中,经常有必要至少了解一部分控制类 MIME 消息及其结构的规划,特别是 " +"MIME \"内容类型\" 的名称和性质以及它们是如何标识多部分文档的。 " +"在大多数情况下这些知识应当仅对于更复杂的应用程序来说才是必需的,并且即便在那时它也应当仅是特定的高层级结构,而不是如何表示这些结构的细节信息。 由于 " +"MIME 内容类型被广泛应用于现代因特网软件(而非只是电子邮件),因此这对许多程序员来说将是很熟悉的概念。" + +#: ../../library/email.rst:71 +msgid "" +"The following sections describe the functionality of the :mod:`email` " +"package. We start with the :mod:`~email.message` object model, which is the " +"primary interface an application will use, and follow that with the " +":mod:`~email.parser` and :mod:`~email.generator` components. Then we cover " +"the :mod:`~email.policy` controls, which completes the treatment of the main" +" components of the library." +msgstr "" +"以下小节描述了 :mod:`email` 包的具体功能。 我们会从 :mod:`~email.message` " +"对象模型开始,它是应用程序将要使用的主要接口,之后是 :mod:`~email.parser` 和 :mod:`~email.generator` " +"组件。 然后我们会介绍 :mod:`~email.policy` 控制组件,它将完成对这个库的主要组件的处理。" + +#: ../../library/email.rst:78 +msgid "" +"The next three sections cover the exceptions the package may raise and the " +"defects (non-compliance with the RFCs) that the :mod:`~email.parser` may " +"detect. Then we cover the :mod:`~email.headerregistry` and the " +":mod:`~email.contentmanager` sub-components, which provide tools for doing " +"more detailed manipulation of headers and payloads, respectively. Both of " +"these components contain features relevant to consuming and producing non-" +"trivial messages, but also document their extensibility APIs, which will be " +"of interest to advanced applications." +msgstr "" +"接下来的三个小节会介绍这个包可能引发的异常以及 :mod:`~email.parser` 可能检测到的缺陷(即与 RFC 不相符)。 然后我们会介绍 " +":mod:`~email.headerregistry` 和 :mod:`~email.contentmanager` " +"子组件,它们分别提供了用于更精细地操纵标题和载荷的工具。 这两个组件除了包含使用与生成非简单消息的相关特性,还记录了它们的可扩展性 " +"API,这将是高级应用程序所感兴趣的内容。" + +#: ../../library/email.rst:87 +msgid "" +"Following those is a set of examples of using the fundamental parts of the " +"APIs covered in the preceding sections." +msgstr "在此之后是一组使用之前小节所介绍的 API 的基本部分的示例。" + +#: ../../library/email.rst:90 +msgid "" +"The foregoing represent the modern (unicode friendly) API of the email " +"package. The remaining sections, starting with the " +":class:`~email.message.Message` class, cover the legacy " +":data:`~email.policy.compat32` API that deals much more directly with the " +"details of how email messages are represented. The " +":data:`~email.policy.compat32` API does *not* hide the details of the RFCs " +"from the application, but for applications that need to operate at that " +"level, they can be useful tools. This documentation is also relevant for " +"applications that are still using the :mod:`~email.policy.compat32` API for " +"backward compatibility reasons." +msgstr "" +"前面的内容是 email 包的现代(对 Unicode 支持良好)API。 从 :class:`~email.message.Message` " +"类开始的其余小节则介绍了旧式 :data:`~email.policy.compat32` API,它会更直接地处理如何表示电子邮件消息的细节。 " +":data:`~email.policy.compat32` API *不会* 向应用程序隐藏 RFC " +"的相关细节,但对于需要进行此种层级操作的应用程序来说将是很有用的工具。 此文档对于因向下兼容理由而仍然使用 " +":mod:`~email.policy.compat32` API 的应用程序也是很适合的。" + +#: ../../library/email.rst:100 +msgid "" +"Docs reorganized and rewritten to promote the new " +":class:`~email.message.EmailMessage`/:class:`~email.policy.EmailPolicy` API." +msgstr "" +"文档经过重新组织和撰写以鼓励使用新的 " +":class:`~email.message.EmailMessage`/:class:`~email.policy.EmailPolicy` API。" + +#: ../../library/email.rst:105 +msgid "Contents of the :mod:`email` package documentation:" +msgstr ":mod:`email` 包文档的内容:" + +#: ../../library/email.rst:120 +msgid "Legacy API:" +msgstr "旧式 API:" + +#: ../../library/email.rst:136 +msgid "Module :mod:`smtplib`" +msgstr ":mod:`smtplib` 模块" + +#: ../../library/email.rst:136 +msgid "SMTP (Simple Mail Transport Protocol) client" +msgstr "SMTP (简单邮件传输协议) 客户端" + +#: ../../library/email.rst:139 +msgid "Module :mod:`poplib`" +msgstr ":mod:`poplib` 模块" + +#: ../../library/email.rst:139 +msgid "POP (Post Office Protocol) client" +msgstr "POP (邮局协议) 客户端" + +#: ../../library/email.rst:142 +msgid "Module :mod:`imaplib`" +msgstr ":mod:`imaplib` 模块" + +#: ../../library/email.rst:142 +msgid "IMAP (Internet Message Access Protocol) client" +msgstr "IMAP (互联网消息访问协议) 客户端" + +#: ../../library/email.rst:145 +msgid "Module :mod:`nntplib`" +msgstr ":mod:`nntplib` 模块" + +#: ../../library/email.rst:145 +msgid "NNTP (Net News Transport Protocol) client" +msgstr "NNTP (网络新闻传输协议) 客户端" + +#: ../../library/email.rst:149 +msgid "Module :mod:`mailbox`" +msgstr ":mod:`mailbox` 模块" + +#: ../../library/email.rst:148 +msgid "" +"Tools for creating, reading, and managing collections of messages on disk " +"using a variety standard formats." +msgstr "创建、读取和管理使用保存在磁盘中的多种标准格式的消息集的工具。" + +#: ../../library/email.rst:151 +msgid "Module :mod:`smtpd`" +msgstr ":mod:`smtpd` 模块" + +#: ../../library/email.rst:152 +msgid "SMTP server framework (primarily useful for testing)" +msgstr "SMTP 服务器框架 (主要适用于测试)" diff --git a/library/email.policy.po b/library/email.policy.po new file mode 100644 index 000000000..0ee0fad99 --- /dev/null +++ b/library/email.policy.po @@ -0,0 +1,920 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) 2001-2024, Python Software Foundation +# This file is distributed under the same license as the Python package. +# FIRST AUTHOR , YEAR. +# +# Translators: +# ppcfish , 2019 +# cdarlint , 2019 +# Rafael Fontenelle , 2024 +# Freesand Leo , 2024 +# +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: Python 3.9\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2024-09-06 19:48+0000\n" +"PO-Revision-Date: 2017-02-16 23:09+0000\n" +"Last-Translator: Freesand Leo , 2024\n" +"Language-Team: Chinese (China) (https://app.transifex.com/python-doc/teams/5390/zh_CN/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: zh_CN\n" +"Plural-Forms: nplurals=1; plural=0;\n" + +#: ../../library/email.policy.rst:2 +msgid ":mod:`email.policy`: Policy Objects" +msgstr ":mod:`email.policy`: Policy 对象" + +#: ../../library/email.policy.rst:12 +msgid "**Source code:** :source:`Lib/email/policy.py`" +msgstr "**源代码:** :source:`Lib/email/policy.py`" + +#: ../../library/email.policy.rst:16 +msgid "" +"The :mod:`email` package's prime focus is the handling of email messages as " +"described by the various email and MIME RFCs. However, the general format " +"of email messages (a block of header fields each consisting of a name " +"followed by a colon followed by a value, the whole block followed by a blank" +" line and an arbitrary 'body'), is a format that has found utility outside " +"of the realm of email. Some of these uses conform fairly closely to the " +"main email RFCs, some do not. Even when working with email, there are times" +" when it is desirable to break strict compliance with the RFCs, such as " +"generating emails that interoperate with email servers that do not " +"themselves follow the standards, or that implement extensions you want to " +"use in ways that violate the standards." +msgstr "" +":mod:`email` 的主要焦点是按照各种电子邮件和 MIME RFC 的描述来处理电子邮件消息。 " +"但是电子邮件消息的基本格式(一个由名称加冒号加值的标头字段构成的区块,后面再加一个空白行和任意的‘消息体’)是在电子邮件领域以外也获得应用的格式。 " +"这些应用的规则有些与主要电子邮件 RFC 十分接近,有些则很不相同。 即使是操作电子邮件,有时也可能需要打破严格的 RFC " +"规则,例如生成可与某些并不遵循标准的电子邮件服务器互联的电子邮件,或者是实现希望应用某些破坏标准的操作方式的扩展。" + +#: ../../library/email.policy.rst:28 +msgid "" +"Policy objects give the email package the flexibility to handle all these " +"disparate use cases." +msgstr "Policy 对象给予 email 包处理这些不同用例的灵活性。" + +#: ../../library/email.policy.rst:31 +msgid "" +"A :class:`Policy` object encapsulates a set of attributes and methods that " +"control the behavior of various components of the email package during use. " +":class:`Policy` instances can be passed to various classes and methods in " +"the email package to alter the default behavior. The settable values and " +"their defaults are described below." +msgstr "" +":class:`Policy` 对象封装了一组属性和方法用来在使用期间控制 email 包中各个组件的行为。 :class:`Policy` " +"实例可以被传给 email 包中的多个类和方法以更改它们的默认行为。 可设置的值及其默认值如下所述。" + +#: ../../library/email.policy.rst:37 +msgid "" +"There is a default policy used by all classes in the email package. For all" +" of the :mod:`~email.parser` classes and the related convenience functions, " +"and for the :class:`~email.message.Message` class, this is the " +":class:`Compat32` policy, via its corresponding pre-defined instance " +":const:`compat32`. This policy provides for complete backward compatibility" +" (in some cases, including bug compatibility) with the pre-Python3.3 version" +" of the email package." +msgstr "" +"在 email 包中的所有类会使用一个默认的策略。 对于所有 :mod:`~email.parser` 类及相关的便捷函数,还有对于 " +":class:`~email.message.Message` 类来说,它是 :class:`Compat32` 策略,通过其对应的预定义实例 " +":const:`compat32` 来使用。 这个策略提供了与 Python3.3 版之前的 email " +"包的完全向下兼容性(在某些情况下,也包括对缺陷的兼容性)。" + +#: ../../library/email.policy.rst:44 +msgid "" +"This default value for the *policy* keyword to " +":class:`~email.message.EmailMessage` is the :class:`EmailPolicy` policy, via" +" its pre-defined instance :data:`~default`." +msgstr "" +"传给 :class:`~email.message.EmailMessage` 的 *policy* 关键字的默认值是 " +":class:`EmailPolicy` 策略,表示为其预定义的实例 :data:`~default`。" + +#: ../../library/email.policy.rst:48 +msgid "" +"When a :class:`~email.message.Message` or " +":class:`~email.message.EmailMessage` object is created, it acquires a " +"policy. If the message is created by a :mod:`~email.parser`, a policy " +"passed to the parser will be the policy used by the message it creates. If " +"the message is created by the program, then the policy can be specified when" +" it is created. When a message is passed to a :mod:`~email.generator`, the " +"generator uses the policy from the message by default, but you can also pass" +" a specific policy to the generator that will override the one stored on the" +" message object." +msgstr "" +"在创建 :class:`~email.message.Message` 或 :class:`~email.message.EmailMessage` " +"对象时,它需要一个策略。 如果消息是由 :mod:`~email.parser` 创建的,则传给该解析器的策略将是它所创建的消息所使用的策略。 " +"如果消息是由程序创建的,则该策略可以在创建它的时候指定。 当消息被传递给 :mod:`~email.generator` " +"时,生成器默认会使用来自该消息的策略,但你也可以将指定的策略传递给生成器,这将覆盖存储在消息对象上的策略。" + +#: ../../library/email.policy.rst:57 +msgid "" +"The default value for the *policy* keyword for the :mod:`email.parser` " +"classes and the parser convenience functions **will be changing** in a " +"future version of Python. Therefore you should **always specify explicitly " +"which policy you want to use** when calling any of the classes and functions" +" described in the :mod:`~email.parser` module." +msgstr "" +":mod:`email.parser` 类和解析器便捷函数的 *policy* 关键字的默认值在未来的 Python 版本中 **将会改变**。 " +"因此在调用任何 :mod:`~email.parser` 模块所描述的类和函数时你应当 **总是显式地指定你想要使用的策略**。" + +#: ../../library/email.policy.rst:63 +msgid "" +"The first part of this documentation covers the features of :class:`Policy`," +" an :term:`abstract base class` that defines the features that are common to" +" all policy objects, including :const:`compat32`. This includes certain " +"hook methods that are called internally by the email package, which a custom" +" policy could override to obtain different behavior. The second part " +"describes the concrete classes :class:`EmailPolicy` and :class:`Compat32`, " +"which implement the hooks that provide the standard behavior and the " +"backward compatible behavior and features, respectively." +msgstr "" +"本文档的第一部分介绍了 :class:`Policy` 的特性,它是一个 :term:`abstract base class`,定义了所有策略对象包括" +" :const:`compat32` 的共有特性。 这些特性包括一些由 email 包内部调用的特定钩子方法,自定义策略可以重写这些方法以获得不同行为。" +" 第二部分描述了实体类 :class:`EmailPolicy` 和 " +":class:`Compat32`,它们分别实现了提供标准行为和向下兼容行为与特性的钩子。" + +#: ../../library/email.policy.rst:72 +msgid "" +":class:`Policy` instances are immutable, but they can be cloned, accepting " +"the same keyword arguments as the class constructor and returning a new " +":class:`Policy` instance that is a copy of the original but with the " +"specified attributes values changed." +msgstr "" +":class:`Policy` 实例是不可变的,但它们可以被克隆,接受与类构造器一致的关键字参数并返回一个新的 :class:`Policy` " +"实例,新实例是原实例的副本,但具有被改变的指定属性。" + +#: ../../library/email.policy.rst:77 +msgid "" +"As an example, the following code could be used to read an email message " +"from a file on disk and pass it to the system ``sendmail`` program on a Unix" +" system:" +msgstr "例如,以下代码可以被用来从一个 Unix 系统的磁盘文件中读取电子邮件消息并将其传递给系统的 ``sendmail`` 程序:" + +#: ../../library/email.policy.rst:113 +msgid "" +"Here we are telling :class:`~email.generator.BytesGenerator` to use the RFC " +"correct line separator characters when creating the binary string to feed " +"into ``sendmail's`` ``stdin``, where the default policy would use ``\\n`` " +"line separators." +msgstr "" +"这里我们让 :class:`~email.generator.BytesGenerator` 在创建要送入 ``sendmail's`` " +"``stdin`` 的二进制字串时使用符合 RFC 的行分隔字符,默认的策略将会使用 ``\\n`` 行分隔符。" + +#: ../../library/email.policy.rst:118 +msgid "" +"Some email package methods accept a *policy* keyword argument, allowing the " +"policy to be overridden for that method. For example, the following code " +"uses the :meth:`~email.message.Message.as_bytes` method of the *msg* object " +"from the previous example and writes the message to a file using the native " +"line separators for the platform on which it is running::" +msgstr "" +"某些 email 包的方法接受一个 *policy* 关键字参数,允许为该方法覆盖原有策略。 例如,以下代码使用了来自之前示例的 *msg* 对象的 " +":meth:`~email.message.Message.as_bytes` 方法并使用其运行所在平台的本机行分隔符将消息写入一个文件::" + +#: ../../library/email.policy.rst:129 +msgid "" +"Policy objects can also be combined using the addition operator, producing a" +" policy object whose settings are a combination of the non-default values of" +" the summed objects::" +msgstr "Policy 对象也可使用加法运算符进行组合来产生一个新策略对象,其设置是被加总对象的非默认值的组合::" + +#: ../../library/email.policy.rst:137 +msgid "" +"This operation is not commutative; that is, the order in which the objects " +"are added matters. To illustrate::" +msgstr "此运算不满足交换律;也就是说对象的添加顺序很重要。 见以下演示::" + +#: ../../library/email.policy.rst:152 +msgid "" +"This is the :term:`abstract base class` for all policy classes. It provides" +" default implementations for a couple of trivial methods, as well as the " +"implementation of the immutability property, the :meth:`clone` method, and " +"the constructor semantics." +msgstr "" +"这是所有策略类的 :term:`abstract base class`。 " +"它提供了一些简单方法的默认实现,以及不可变特征属性,:meth:`clone` 方法以及构造器语义的实现。" + +#: ../../library/email.policy.rst:157 +msgid "" +"The constructor of a policy class can be passed various keyword arguments. " +"The arguments that may be specified are any non-method properties on this " +"class, plus any additional non-method properties on the concrete class. A " +"value specified in the constructor will override the default value for the " +"corresponding attribute." +msgstr "" +"可以向策略类的构造器传入各种关键字参数。 可以指定的参数是该类的任何非方法特征属性,以及实体类的任何额外非方法特征属性。 " +"在构造器中指定的值将覆盖相应属性的默认值。" + +#: ../../library/email.policy.rst:163 +msgid "" +"This class defines the following properties, and thus values for the " +"following may be passed in the constructor of any policy class:" +msgstr "这个类定义了下列特征属性,因此下列值可以被传给任何策略类的构造器:" + +#: ../../library/email.policy.rst:169 +msgid "" +"The maximum length of any line in the serialized output, not counting the " +"end of line character(s). Default is 78, per :rfc:`5322`. A value of ``0``" +" or :const:`None` indicates that no line wrapping should be done at all." +msgstr "" +"序列化输出中任何行的最大长度,不计入行字符的末尾。 默认值为 78,基于 :rfc:`5322`。 值为 ``0`` 或 :const:`None` " +"表示完全没有行包装。" + +#: ../../library/email.policy.rst:177 +msgid "" +"The string to be used to terminate lines in serialized output. The default " +"is ``\\n`` because that's the internal end-of-line discipline used by " +"Python, though ``\\r\\n`` is required by the RFCs." +msgstr "" +"用来在序列化输出中确定行的字符串。 默认值为 ``\\n`` 因为这是 Python 所使用的内部行结束符规范,但 RFC 的要求是 " +"``\\r\\n``。" + +#: ../../library/email.policy.rst:184 +msgid "" +"Controls the type of Content Transfer Encodings that may be or are required " +"to be used. The possible values are:" +msgstr "控制可能要求使用的内容传输编码格式类型。 可能的值包括:" + +#: ../../library/email.policy.rst:190 +msgid "``7bit``" +msgstr "``7bit``" + +#: ../../library/email.policy.rst:190 +msgid "" +"all data must be \"7 bit clean\" (ASCII-only). This means that where " +"necessary data will be encoded using either quoted-printable or base64 " +"encoding." +msgstr "所有数据必须为 \"纯 7 比特位\" (仅 ASCII)。 这意味着在必要情况下数据将使用可打印引用形式或 base64 编码格式进行编码。" + +#: ../../library/email.policy.rst:194 +msgid "``8bit``" +msgstr "``8bit``" + +#: ../../library/email.policy.rst:194 +msgid "" +"data is not constrained to be 7 bit clean. Data in headers is still " +"required to be ASCII-only and so will be encoded (see :meth:`fold_binary` " +"and :attr:`~EmailPolicy.utf8` below for exceptions), but body parts may use " +"the ``8bit`` CTE." +msgstr "" +"数据不会被限制为纯 7 比特位。 标头中的数据仍要求仅 ASCII 因此将被编码(参阅下文的 :meth:`fold_binary` 和 " +":attr:`~EmailPolicy.utf8` 了解例外情况),但消息体部分可能使用 ``8bit`` CTE。" + +#: ../../library/email.policy.rst:200 +msgid "" +"A ``cte_type`` value of ``8bit`` only works with ``BytesGenerator``, not " +"``Generator``, because strings cannot contain binary data. If a " +"``Generator`` is operating under a policy that specifies ``cte_type=8bit``, " +"it will act as if ``cte_type`` is ``7bit``." +msgstr "" +"``cte_type`` 值为 ``8bit`` 仅适用于 ``BytesGenerator`` 而非 " +"``Generator``,因为字符串不能包含二进制数据。 如果 ``Generator`` 运行于指定了 ``cte_type=8bit`` " +"的策略,它的行为将与 ``cte_type`` 为 ``7bit`` 相同。" + +#: ../../library/email.policy.rst:208 +msgid "" +"If :const:`True`, any defects encountered will be raised as errors. If " +":const:`False` (the default), defects will be passed to the " +":meth:`register_defect` method." +msgstr "" +"如为 :const:`True`,则遇到的任何缺陷都将引发错误。 如为 :const:`False` (默认值),则缺陷将被传递给 " +":meth:`register_defect` 方法。" + +#: ../../library/email.policy.rst:215 +msgid "" +"If :const:`True`, lines starting with *\"From \"* in the body are escaped by" +" putting a ``>`` in front of them. This parameter is used when the message " +"is being serialized by a generator. Default: :const:`False`." +msgstr "" +"如为 :const:`True`,则消息体中以 *\"From \"* 开头的行会通过在其前面放一个 ``>`` 来进行转义。 " +"当消息被生成器执行序列化时会使用此形参。 默认值t: :const:`False`。" + +#: ../../library/email.policy.rst:220 +msgid "The *mangle_from_* parameter." +msgstr "*mangle_from_* 形参。" + +#: ../../library/email.policy.rst:226 +msgid "" +"A factory function for constructing a new empty message object. Used by the" +" parser when building messages. Defaults to ``None``, in which case " +":class:`~email.message.Message` is used." +msgstr "" +"用来构造新的空消息对象的工厂函数。 在构建消息时由解析器使用。 默认为 ``None``,在此情况下会使用 " +":class:`~email.message.Message`。" + +#: ../../library/email.policy.rst:235 +msgid "" +"If ``True`` (the default), the generator will raise " +":exc:`~email.errors.HeaderWriteError` instead of writing a header that is " +"improperly folded or delimited, such that it would be parsed as multiple " +"headers or joined with adjacent data. Such headers can be generated by " +"custom header classes or bugs in the ``email`` module." +msgstr "" +"如为 ``True`` (默认值),则生成器会引发 raise :exc:`~email.errors.HeaderWriteError` " +"而不是写入一个不正确地折叠或设限的标头,以便它可以被解析为多重标头或与相邻数据合并。 这样的标头可通过自定义标头类或 ``email`` " +"模块中的程序错误来生成。" + +#: ../../library/email.policy.rst:242 +msgid "" +"As it's a security feature, this defaults to ``True`` even in the " +":class:`~email.policy.Compat32` policy. For backwards compatible, but " +"unsafe, behavior, it must be set to ``False`` explicitly." +msgstr "" +"由于它是一个安全特性,即使是在 :class:`~email.policy.Compat32` 策略中该值也默认为 ``True``。 " +"为了保持向下兼容但是不安全的行为,它必须显式地被设为 ``False``。" + +#: ../../library/email.policy.rst:250 +msgid "" +"The following :class:`Policy` method is intended to be called by code using " +"the email library to create policy instances with custom settings:" +msgstr "下列 :class:`Policy` 方法是由使用 email 库的代码来调用以创建具有自室外设置的策略实例:" + +#: ../../library/email.policy.rst:256 +msgid "" +"Return a new :class:`Policy` instance whose attributes have the same values " +"as the current instance, except where those attributes are given new values " +"by the keyword arguments." +msgstr "返回一个新的 :class:`Policy` 实例,其属性与当前实例具有相同的值,除非是那些由关键字参数给出了新值的属性。" + +#: ../../library/email.policy.rst:261 +msgid "" +"The remaining :class:`Policy` methods are called by the email package code, " +"and are not intended to be called by an application using the email package." +" A custom policy must implement all of these methods." +msgstr "" +"其余的 :class:`Policy` 方法是由 email 包代码来调用的,而不应当被使用 email 包的应用程序所调用。 " +"自定义的策略必须实现所有这些方法。" + +#: ../../library/email.policy.rst:268 +msgid "" +"Handle a *defect* found on *obj*. When the email package calls this method," +" *defect* will always be a subclass of :class:`~email.errors.Defect`." +msgstr "" +"处理在 *obj* 上发现的 *defect*。 当 email 包调用此方法时,*defect* 将总是 " +":class:`~email.errors.Defect` 的一个子类。" + +#: ../../library/email.policy.rst:272 +msgid "" +"The default implementation checks the :attr:`raise_on_defect` flag. If it " +"is ``True``, *defect* is raised as an exception. If it is ``False`` (the " +"default), *obj* and *defect* are passed to :meth:`register_defect`." +msgstr "" +"默认实现会检查 :attr:`raise_on_defect` 旗标。 如果其为 ``True``,则 *defect* 会被作为异常来引发。 如果其为" +" ``False`` (默认值),则 *obj* 和 *defect* 会被传递给 :meth:`register_defect`。" + +#: ../../library/email.policy.rst:279 +msgid "" +"Register a *defect* on *obj*. In the email package, *defect* will always be" +" a subclass of :class:`~email.errors.Defect`." +msgstr "" +"在 *obj* 上注册一个 *defect*。 在 email 包中,*defect* 将总是 " +":class:`~email.errors.Defect` 的一个子类。" + +#: ../../library/email.policy.rst:282 +msgid "" +"The default implementation calls the ``append`` method of the ``defects`` " +"attribute of *obj*. When the email package calls :attr:`handle_defect`, " +"*obj* will normally have a ``defects`` attribute that has an ``append`` " +"method. Custom object types used with the email package (for example, " +"custom ``Message`` objects) should also provide such an attribute, otherwise" +" defects in parsed messages will raise unexpected errors." +msgstr "" +"默认实现会调用 *obj* 的 ``defects`` 属性的 ``append`` 方法。 当 email 包调用 " +":attr:`handle_defect` 时,*obj* 通常将具有一个带 ``append`` 方法的 ``defects`` 属性。 配合 " +"email 包使用的自定义对象类型(例如自定义的 ``Message`` 对象)也应当提供这样的属性,否则在被解析消息中的缺陷将引发非预期的错误。" + +#: ../../library/email.policy.rst:292 +msgid "Return the maximum allowed number of headers named *name*." +msgstr "返回名为 *name* 的标头的最大允许数量。" + +#: ../../library/email.policy.rst:294 +msgid "" +"Called when a header is added to an :class:`~email.message.EmailMessage` or " +":class:`~email.message.Message` object. If the returned value is not ``0`` " +"or ``None``, and there are already a number of headers with the name *name* " +"greater than or equal to the value returned, a :exc:`ValueError` is raised." +msgstr "" +"当添加一个标头到 :class:`~email.message.EmailMessage` 或 " +":class:`~email.message.Message` 对象时被调用。 如果返回值不为 ``0`` 或 ``None``,并且已有的名称为 " +"*name* 的标头数量大于等于所返回的值,则会引发 :exc:`ValueError`。" + +#: ../../library/email.policy.rst:300 +msgid "" +"Because the default behavior of ``Message.__setitem__`` is to append the " +"value to the list of headers, it is easy to create duplicate headers without" +" realizing it. This method allows certain headers to be limited in the " +"number of instances of that header that may be added to a ``Message`` " +"programmatically. (The limit is not observed by the parser, which will " +"faithfully produce as many headers as exist in the message being parsed.)" +msgstr "" +"由于 ``Message.__setitem__`` 的默认行为是将值添加到标头列表,因此很容易不知情地创建重复的标头。 " +"此方法允许在程序中限制可以被添加到 ``Message`` 中的特定标头的实例数量。 " +"(解析器不会考虑此限制,它将忠实地产生被解析消息中存在的任意数量的标头。)" + +#: ../../library/email.policy.rst:308 +msgid "The default implementation returns ``None`` for all header names." +msgstr "默认实现对于所有标头名称都返回 ``None``。" + +#: ../../library/email.policy.rst:313 +msgid "" +"The email package calls this method with a list of strings, each string " +"ending with the line separation characters found in the source being parsed." +" The first line includes the field header name and separator. All " +"whitespace in the source is preserved. The method should return the " +"``(name, value)`` tuple that is to be stored in the ``Message`` to represent" +" the parsed header." +msgstr "" +"email 包调用此方法时将传入一个字符串列表,其中每个字符串以在被解析源中找到的行分隔符结束。 第一行包括字段标头名称和分隔符。 " +"源中的所有空白符都会被保留。 此方法应当返回 ``(name, value)`` 元组以保存至 ``Message`` 中来代表被解析的标头。" + +#: ../../library/email.policy.rst:320 +msgid "" +"If an implementation wishes to retain compatibility with the existing email " +"package policies, *name* should be the case preserved name (all characters " +"up to the '``:``' separator), while *value* should be the unfolded value " +"(all line separator characters removed, but whitespace kept intact), " +"stripped of leading whitespace." +msgstr "" +"如果一个实现希望保持与现有 email 包策略的兼容性,则 *name* 应当为保留大小写形式的名称(所有字符直至 '``:``' 分隔符),而 " +"*value* 应当为展开后的值(移除所有行分隔符,但空白符保持不变),并移除开头的空白符。" + +#: ../../library/email.policy.rst:326 +msgid "*sourcelines* may contain surrogateescaped binary data." +msgstr "*sourcelines* 可以包含经替代转义的二进制数据。" + +#: ../../library/email.policy.rst:328 ../../library/email.policy.rst:344 +#: ../../library/email.policy.rst:360 +msgid "There is no default implementation" +msgstr "此方法没有默认实现" + +#: ../../library/email.policy.rst:333 +msgid "" +"The email package calls this method with the name and value provided by the " +"application program when the application program is modifying a ``Message`` " +"programmatically (as opposed to a ``Message`` created by a parser). The " +"method should return the ``(name, value)`` tuple that is to be stored in the" +" ``Message`` to represent the header." +msgstr "" +"当一个应用通过程序代码修改 ``Message`` (而不是由解析器创建 ``Message``) 时,email " +"包会调用此方法并附带应用程序所提供的名称和值。 此方法应当返回 ``(name, value)`` 元组以保存至 ``Message`` " +"中用来表示标头。" + +#: ../../library/email.policy.rst:339 +msgid "" +"If an implementation wishes to retain compatibility with the existing email " +"package policies, the *name* and *value* should be strings or string " +"subclasses that do not change the content of the passed in arguments." +msgstr "" +"如果一个实现希望保持与现有 email 包策略的兼容性,则 *name* 和 *value* " +"应当为字符串或字符串的子类,它们不会修改在参数中传入的内容。" + +#: ../../library/email.policy.rst:349 +msgid "" +"The email package calls this method with the *name* and *value* currently " +"stored in the ``Message`` when that header is requested by the application " +"program, and whatever the method returns is what is passed back to the " +"application as the value of the header being retrieved. Note that there may " +"be more than one header with the same name stored in the ``Message``; the " +"method is passed the specific name and value of the header destined to be " +"returned to the application." +msgstr "" +"当标头被应用程序所请求时,email 包会调用此方法并附带当前保存在 ``Message`` 中的 *name* 和 " +"*value*,并且无论此方法返回什么它都会被回传给应用程序作为被提取标头的值。 请注意可能会有多个相同名称的标头被保存在 ``Message`` " +"中;此方法会将指定标头的名称和值返回给应用程序。" + +#: ../../library/email.policy.rst:357 +msgid "" +"*value* may contain surrogateescaped binary data. There should be no " +"surrogateescaped binary data in the value returned by the method." +msgstr "*value* 可能包含经替代转义的二进制数据。 此方法所返回的值应当没有经替代转义的二进制数据。" + +#: ../../library/email.policy.rst:365 +msgid "" +"The email package calls this method with the *name* and *value* currently " +"stored in the ``Message`` for a given header. The method should return a " +"string that represents that header \"folded\" correctly (according to the " +"policy settings) by composing the *name* with the *value* and inserting " +":attr:`linesep` characters at the appropriate places. See :rfc:`5322` for a" +" discussion of the rules for folding email headers." +msgstr "" +"email 包调用此方法时会附带当前保存在 ``Message`` 中的给定标头的 *name* 和 *value*。 " +"此方法应当返回一个代表该标头的(根据策略设置)通过处理 *name* 和 *value* 并在适当位置插入 :attr:`linesep` " +"字符来正确地“折叠”的字符串。 请参阅 :rfc:`5322` 了解有关折叠电子邮件标头的规则的讨论。" + +#: ../../library/email.policy.rst:372 +msgid "" +"*value* may contain surrogateescaped binary data. There should be no " +"surrogateescaped binary data in the string returned by the method." +msgstr "*value* 可能包含经替代转义的二进制数据。 此方法所返回的字符串应当没有经替代转义的二进制数据。" + +#: ../../library/email.policy.rst:378 +msgid "" +"The same as :meth:`fold`, except that the returned value should be a bytes " +"object rather than a string." +msgstr "与 :meth:`fold` 类似,不同之处在于返回的值应当为字节串对象而非字符串。" + +#: ../../library/email.policy.rst:381 +msgid "" +"*value* may contain surrogateescaped binary data. These could be converted " +"back into binary data in the returned bytes object." +msgstr "*value* 可能包含经替代转义的二进制数据。 这些数据可以在被返回的字节串对象中被转换回二进制数据。" + +#: ../../library/email.policy.rst:388 +msgid "" +"This concrete :class:`Policy` provides behavior that is intended to be fully" +" compliant with the current email RFCs. These include (but are not limited " +"to) :rfc:`5322`, :rfc:`2047`, and the current MIME RFCs." +msgstr "" +"这个实体 :class:`Policy` 提供了完全遵循当前电子邮件 RFC 的行为。 这包括 (但不限于) :rfc:`5322`, " +":rfc:`2047` 以及当前的各种 MIME RFC。" + +#: ../../library/email.policy.rst:392 +msgid "" +"This policy adds new header parsing and folding algorithms. Instead of " +"simple strings, headers are ``str`` subclasses with attributes that depend " +"on the type of the field. The parsing and folding algorithm fully implement" +" :rfc:`2047` and :rfc:`5322`." +msgstr "" +"此策略添加了新的标头解析和折叠算法。 标头不是简单的字符串,而是带有依赖于字段类型的属性的 ``str`` 的子类。 这个解析和折叠算法完整实现了 " +":rfc:`2047` 和 :rfc:`5322`。" + +#: ../../library/email.policy.rst:397 +msgid "" +"The default value for the :attr:`~email.policy.Policy.message_factory` " +"attribute is :class:`~email.message.EmailMessage`." +msgstr "" +":attr:`~email.policy.Policy.message_factory` 属性的默认值为 " +":class:`~email.message.EmailMessage`。" + +#: ../../library/email.policy.rst:400 +msgid "" +"In addition to the settable attributes listed above that apply to all " +"policies, this policy adds the following additional attributes:" +msgstr "除了上面列出的适用于所有策略的可设置属性,此策略还添加了下列额外属性:" + +#: ../../library/email.policy.rst:403 +msgid "[1]_" +msgstr "[1]_" + +#: ../../library/email.policy.rst:408 +msgid "" +"If ``False``, follow :rfc:`5322`, supporting non-ASCII characters in headers" +" by encoding them as \"encoded words\". If ``True``, follow :rfc:`6532` and" +" use ``utf-8`` encoding for headers. Messages formatted in this way may be " +"passed to SMTP servers that support the ``SMTPUTF8`` extension " +"(:rfc:`6531`)." +msgstr "" +"如为 ``False``,则遵循 :rfc:`5322`,通过编码为“已编码字”来支持标头中的非 ASCII 字符。 如为 ``True``,则遵循 " +":rfc:`6532` 并对标头使用 ``utf-8`` 编码格式。 以此方式格式化的消息可被传递给支持 ``SMTPUTF8`` 扩展 " +"(:rfc:`6531`) 的 SMTP 服务器。" + +#: ../../library/email.policy.rst:417 +msgid "" +"If the value for a header in the ``Message`` object originated from a " +":mod:`~email.parser` (as opposed to being set by a program), this attribute " +"indicates whether or not a generator should refold that value when " +"transforming the message back into serialized form. The possible values " +"are:" +msgstr "" +"如果 ``Message`` 对象中标头的值源自 :mod:`~email.parser` " +"(而非由程序设置),此属性会表明当将消息转换回序列化形式时是否应当由生成器来重新折叠该值。 可能的值如下:" + +#: ../../library/email.policy.rst:424 +msgid "``none``" +msgstr "``none``" + +#: ../../library/email.policy.rst:424 +msgid "all source values use original folding" +msgstr "所有源值使用原始折叠" + +#: ../../library/email.policy.rst:426 +msgid "``long``" +msgstr "``long``" + +#: ../../library/email.policy.rst:426 +msgid "" +"source values that have any line that is longer than ``max_line_length`` " +"will be refolded" +msgstr "具有任何长度超过 ``max_line_length`` 的行的源值将被折叠" + +#: ../../library/email.policy.rst:429 +msgid "``all``" +msgstr "``all``" + +#: ../../library/email.policy.rst:429 +msgid "all values are refolded." +msgstr "所有值会被重新折叠。" + +#: ../../library/email.policy.rst:432 +msgid "The default is ``long``." +msgstr "默认值为 ``long``。" + +#: ../../library/email.policy.rst:437 +msgid "" +"A callable that takes two arguments, ``name`` and ``value``, where ``name`` " +"is a header field name and ``value`` is an unfolded header field value, and " +"returns a string subclass that represents that header. A default " +"``header_factory`` (see :mod:`~email.headerregistry`) is provided that " +"supports custom parsing for the various address and date :RFC:`5322` header " +"field types, and the major MIME header field stypes. Support for additional" +" custom parsing will be added in the future." +msgstr "" +"该可调用对象接受两个参数,``name`` 和 ``value``,其中 ``name`` 为标头字段名而 ``value`` " +"为展开后的标头字段值,并返回一个表示该标头的字符串子类。 已提供的默认 ``header_factory`` (参见 " +":mod:`~email.headerregistry`) 支持对各种地址和日期 :RFC:`5322` 标头字段类型及主要 MIME " +"标头字段类型的自定义解析。 未来还将添加对其他自定义解析的支持。" + +#: ../../library/email.policy.rst:448 +msgid "" +"An object with at least two methods: get_content and set_content. When the " +":meth:`~email.message.EmailMessage.get_content` or " +":meth:`~email.message.EmailMessage.set_content` method of an " +":class:`~email.message.EmailMessage` object is called, it calls the " +"corresponding method of this object, passing it the message object as its " +"first argument, and any arguments or keywords that were passed to it as " +"additional arguments. By default ``content_manager`` is set to " +":data:`~email.contentmanager.raw_data_manager`." +msgstr "" +"此对象至少有两个方法: get_content 和 set_content。 当一个 " +":class:`~email.message.EmailMessage` 对象的 " +":meth:`~email.message.EmailMessage.get_content` 或 " +":meth:`~email.message.EmailMessage.set_content` " +"方法被调用时,它会调用此对象的相应方法,将消息对象作为其第一个参数,并将传给它的任何参数或关键字作为附加参数传入。 默认情况下 " +"``content_manager`` 会被设为 :data:`~email.contentmanager.raw_data_manager`。" + +#: ../../library/email.policy.rst:460 ../../library/email.policy.rst:618 +msgid "" +"The class provides the following concrete implementations of the abstract " +"methods of :class:`Policy`:" +msgstr "这个类提供了下列对 :class:`Policy` 的抽象方法的具体实现:" + +#: ../../library/email.policy.rst:466 +msgid "" +"Returns the value of the :attr:`~email.headerregistry.BaseHeader.max_count` " +"attribute of the specialized class used to represent the header with the " +"given name." +msgstr "" +"返回用来表示具有给定名称的标头的专用类的 :attr:`~email.headerregistry.BaseHeader.max_count` " +"属性的值。" + +#: ../../library/email.policy.rst:474 ../../library/email.policy.rst:624 +msgid "" +"The name is parsed as everything up to the '``:``' and returned unmodified." +" The value is determined by stripping leading whitespace off the remainder " +"of the first line, joining all subsequent lines together, and stripping any " +"trailing carriage return or linefeed characters." +msgstr "" +"此名称会被作为到 '``:``' 止的所有内容来解析。 " +"该值是通过从第一行的剩余部分去除前导空格,再将所有后续行连接到一起,并去除所有末尾回车符或换行符来确定的。" + +#: ../../library/email.policy.rst:482 +msgid "" +"The name is returned unchanged. If the input value has a ``name`` attribute" +" and it matches *name* ignoring case, the value is returned unchanged. " +"Otherwise the *name* and *value* are passed to ``header_factory``, and the " +"resulting header object is returned as the value. In this case a " +"``ValueError`` is raised if the input value contains CR or LF characters." +msgstr "" +"name 将会被原样返回。 如果输入值具有 ``name`` 属性并可在忽略大小写的情况下匹配 *name*,则 value 也会被原样返回。 " +"在其他情况下 *name* 和 *value* 会被传递给 ``header_factory``,并将结果标头对象作为值返回。 在此情况下如果输入值包含" +" CR 或 LF 字符则会引发 ``ValueError``。" + +#: ../../library/email.policy.rst:492 +msgid "" +"If the value has a ``name`` attribute, it is returned to unmodified. " +"Otherwise the *name*, and the *value* with any CR or LF characters removed, " +"are passed to the ``header_factory``, and the resulting header object is " +"returned. Any surrogateescaped bytes get turned into the unicode unknown-" +"character glyph." +msgstr "" +"如果值具有 ``name`` 属性,它会被原样返回。 在其他情况下 *name* 和移除了所有 CR 和 LF 字符的 *value* 会被传递给 " +"``header_factory``,并返回结果标头对象。 任何经替代转义的字节串会被转换为 unicode 未知字符字形。" + +#: ../../library/email.policy.rst:501 +msgid "" +"Header folding is controlled by the :attr:`refold_source` policy setting. A " +"value is considered to be a 'source value' if and only if it does not have a" +" ``name`` attribute (having a ``name`` attribute means it is a header object" +" of some sort). If a source value needs to be refolded according to the " +"policy, it is converted into a header object by passing the *name* and the " +"*value* with any CR and LF characters removed to the ``header_factory``. " +"Folding of a header object is done by calling its ``fold`` method with the " +"current policy." +msgstr "" +"标头折叠是由 :attr:`refold_source` 策略设置来控制的。 当且仅当一个值没有 ``name`` 属性(具有 ``name`` " +"属性就意味着它是某种标头对象)它才会被当作是“源值”。 如果一个原值需要按照策略来重新折叠,则会通过将 *name* 和去除了所有 CR 和 LF " +"字符的 *value* 传递给 ``header_factory`` 来将其转换为标头对象。 标头对象的折叠是通过调用其 ``fold`` " +"方法并附带当前策略来完成的。" + +#: ../../library/email.policy.rst:510 +msgid "" +"Source values are split into lines using :meth:`~str.splitlines`. If the " +"value is not to be refolded, the lines are rejoined using the ``linesep`` " +"from the policy and returned. The exception is lines containing non-ascii " +"binary data. In that case the value is refolded regardless of the " +"``refold_source`` setting, which causes the binary data to be CTE encoded " +"using the ``unknown-8bit`` charset." +msgstr "" +"源值会使用 :meth:`~str.splitlines` 来拆分成多行。 如果该值不被重新折叠,则会使用策略中的 ``linesep`` " +"重新合并这些行并将其返回。 例外的是包含非 ascii 二进制数据的行。 在此情况下无论 ``refold_source`` " +"如何设置该值都会被重新折叠,这会导致二进制数据使用 ``unknown-8bit`` 字符集进行 CTE 编码。" + +#: ../../library/email.policy.rst:520 +msgid "" +"The same as :meth:`fold` if :attr:`~Policy.cte_type` is ``7bit``, except " +"that the returned value is bytes." +msgstr "" +"如果 :attr:`~Policy.cte_type` 为 ``7bit`` 则与 :meth:`fold` 类似,不同之处在于返回的值是字节串。" + +#: ../../library/email.policy.rst:523 +msgid "" +"If :attr:`~Policy.cte_type` is ``8bit``, non-ASCII binary data is converted " +"back into bytes. Headers with binary data are not refolded, regardless of " +"the ``refold_header`` setting, since there is no way to know whether the " +"binary data consists of single byte characters or multibyte characters." +msgstr "" +"如果 :attr:`~Policy.cte_type` 为 ``8bit``,则将非 ASCII 二进制数据转换回字节串。 " +"带有二进制数据的标头不会被重新折叠,无论 ``refold_header`` 设置如何,因为无法知晓该二进制数据是由单字节字符还是多字节字符组成的。" + +#: ../../library/email.policy.rst:530 +msgid "" +"The following instances of :class:`EmailPolicy` provide defaults suitable " +"for specific application domains. Note that in the future the behavior of " +"these instances (in particular the ``HTTP`` instance) may be adjusted to " +"conform even more closely to the RFCs relevant to their domains." +msgstr "" +"以下 :class:`EmailPolicy` 的实例提供了适用于特定应用领域的默认值。 请注意在未来这些实例(特别是 ``HTTP`` " +"实例)的行为可能会被调整以便更严格地遵循与其领域相关的 RFC。" + +#: ../../library/email.policy.rst:538 +msgid "" +"An instance of ``EmailPolicy`` with all defaults unchanged. This policy " +"uses the standard Python ``\\n`` line endings rather than the RFC-correct " +"``\\r\\n``." +msgstr "" +"一个未改变任何默认值的 ``EmailPolicy`` 实例。 此策略使用标准的 Python ``\\n`` 行结束符而非遵循 RFC 的 " +"``\\r\\n``。" + +#: ../../library/email.policy.rst:545 +msgid "" +"Suitable for serializing messages in conformance with the email RFCs. Like " +"``default``, but with ``linesep`` set to ``\\r\\n``, which is RFC compliant." +msgstr "" +"适用于按照符合电子邮件 RFC 的方式来序列化消息。 与 ``default`` 类似,但 ``linesep`` 被设为遵循 RFC 的 " +"``\\r\\n``。" + +#: ../../library/email.policy.rst:552 +msgid "" +"The same as ``SMTP`` except that :attr:`~EmailPolicy.utf8` is ``True``. " +"Useful for serializing messages to a message store without using encoded " +"words in the headers. Should only be used for SMTP transmission if the " +"sender or recipient addresses have non-ASCII characters (the " +":meth:`smtplib.SMTP.send_message` method handles this automatically)." +msgstr "" +"与 ``SMTP`` 类似但是 :attr:`~EmailPolicy.utf8` 为 ``True``。 " +"适用于在不使用标头内已编码字的情况下对消息进行序列化。 如果发送方或接收方地址具有非 ASCII 字符则应当只被用于 SMTP 传输 " +"(:meth:`smtplib.SMTP.send_message` 方法会自动如此处理)。" + +#: ../../library/email.policy.rst:561 +msgid "" +"Suitable for serializing headers with for use in HTTP traffic. Like " +"``SMTP`` except that ``max_line_length`` is set to ``None`` (unlimited)." +msgstr "" +"适用于序列化标头以在 HTTP 通信中使用。 与 ``SMTP`` 类似但是 ``max_line_length`` 被设为 ``None`` " +"(无限制)。" + +#: ../../library/email.policy.rst:567 +msgid "" +"Convenience instance. The same as ``default`` except that " +"``raise_on_defect`` is set to ``True``. This allows any policy to be made " +"strict by writing::" +msgstr "" +"便捷实例。 与 ``default`` 类似但是 ``raise_on_defect`` 被设为 ``True``。 " +"这样可以允许通过以下写法来严格地设置任何策略::" + +#: ../../library/email.policy.rst:574 +msgid "" +"With all of these :class:`EmailPolicies <.EmailPolicy>`, the effective API " +"of the email package is changed from the Python 3.2 API in the following " +"ways:" +msgstr "" +"因为所有这些 :class:`EmailPolicies <.EmailPolicy>`,email 包的高效 API 相比 Python 3.2 " +"API 发生了以下几方面变化:" + +#: ../../library/email.policy.rst:577 +msgid "" +"Setting a header on a :class:`~email.message.Message` results in that header" +" being parsed and a header object created." +msgstr "在 :class:`~email.message.Message` 中设置标头将使得该标头被解析并创建一个标头对象。" + +#: ../../library/email.policy.rst:580 +msgid "" +"Fetching a header value from a :class:`~email.message.Message` results in " +"that header being parsed and a header object created and returned." +msgstr "从 :class:`~email.message.Message` 提取标头将使得该标头被解析并创建和返回一个标头对象。" + +#: ../../library/email.policy.rst:584 +msgid "" +"Any header object, or any header that is refolded due to the policy " +"settings, is folded using an algorithm that fully implements the RFC folding" +" algorithms, including knowing where encoded words are required and allowed." +msgstr "" +"任何标头对象或任何由于策略设置而被重新折叠的标头都会使用一种完全实现了 RFC 折叠算法的算法来进行折叠,包括知道在休息需要并允许已编码字。" + +#: ../../library/email.policy.rst:589 +msgid "" +"From the application view, this means that any header obtained through the " +":class:`~email.message.EmailMessage` is a header object with extra " +"attributes, whose string value is the fully decoded unicode value of the " +"header. Likewise, a header may be assigned a new value, or a new header " +"created, using a unicode string, and the policy will take care of converting" +" the unicode string into the correct RFC encoded form." +msgstr "" +"从应用程序的视角来看,这意味着任何通过 :class:`~email.message.EmailMessage` " +"获得的标头都是具有附加属性的标头对象,其字符串值都是该标头的完全解码后的 unicode 值。 类似地,可以使用 unicode " +"对象为一个标头赋予新的值,或创建一个新的标头对象,并且该策略将负责把该 unicode 字符串转换为正确的 RFC 已编码形式。" + +#: ../../library/email.policy.rst:596 +msgid "" +"The header objects and their attributes are described in " +":mod:`~email.headerregistry`." +msgstr "标头对象及其属性的描述见 :mod:`~email.headerregistry`。" + +#: ../../library/email.policy.rst:603 +msgid "" +"This concrete :class:`Policy` is the backward compatibility policy. It " +"replicates the behavior of the email package in Python 3.2. The " +":mod:`~email.policy` module also defines an instance of this class, " +":const:`compat32`, that is used as the default policy. Thus the default " +"behavior of the email package is to maintain compatibility with Python 3.2." +msgstr "" +"这个实体 :class:`Policy` 为向下兼容策略。 它复制了 Python 3.2 中 email 包的行为。 " +":mod:`~email.policy` 模块还定义了该类的一个实例 :const:`compat32`,用来作为默认策略。 因此 email " +"包的默认行为会保持与 Python 3.2 的兼容性。" + +#: ../../library/email.policy.rst:609 +msgid "" +"The following attributes have values that are different from the " +":class:`Policy` default:" +msgstr "下列属性具有与 :class:`Policy` 默认值不同的值:" + +#: ../../library/email.policy.rst:615 +msgid "The default is ``True``." +msgstr "默认值为 ``True``。" + +#: ../../library/email.policy.rst:632 +msgid "The name and value are returned unmodified." +msgstr "name 和 value 会被原样返回。" + +#: ../../library/email.policy.rst:637 +msgid "" +"If the value contains binary data, it is converted into a " +":class:`~email.header.Header` object using the ``unknown-8bit`` charset. " +"Otherwise it is returned unmodified." +msgstr "" +"如果 value 包含二进制数据,则会使用 ``unknown-8bit`` 字符集来将其转换为 " +":class:`~email.header.Header` 对象。 在其他情况下它会被原样返回。" + +#: ../../library/email.policy.rst:644 +msgid "" +"Headers are folded using the :class:`~email.header.Header` folding " +"algorithm, which preserves existing line breaks in the value, and wraps each" +" resulting line to the ``max_line_length``. Non-ASCII binary data are CTE " +"encoded using the ``unknown-8bit`` charset." +msgstr "" +"标头会使用 :class:`~email.header.Header` 折叠算法进行折叠,该算法保留 value " +"中现有的换行,并将每个结果行的长度折叠至 ``max_line_length``。 非 ASCII 二进制数据会使用 ``unknown-8bit`` " +"字符串进行 CTE 编码。" + +#: ../../library/email.policy.rst:652 +msgid "" +"Headers are folded using the :class:`~email.header.Header` folding " +"algorithm, which preserves existing line breaks in the value, and wraps each" +" resulting line to the ``max_line_length``. If ``cte_type`` is ``7bit``, " +"non-ascii binary data is CTE encoded using the ``unknown-8bit`` charset. " +"Otherwise the original source header is used, with its existing line breaks " +"and any (RFC invalid) binary data it may contain." +msgstr "" +"标头会使用 :class:`~email.header.Header` 折叠算法进行折叠,该算法保留 value " +"中现有的换行,并将每个结果行的长度折叠至 ``max_line_length``。 如果 ``cte_type`` 为 ``7bit``,则非 " +"ascii 二进制数据会使用 ``unknown-8bit`` 字符集进行 CTE 编码。 " +"在其他情况下则会使用原始的源标头,这将保留其现有的换行和所包含的任何(不符合 RFC 的)二进制数据。" + +#: ../../library/email.policy.rst:662 +msgid "" +"An instance of :class:`Compat32`, providing backward compatibility with the" +" behavior of the email package in Python 3.2." +msgstr ":class:`Compat32` 的实例,提供与 Python 3.2 中的 email 包行为的向下兼容性。" + +#: ../../library/email.policy.rst:667 +msgid "Footnotes" +msgstr "备注" + +#: ../../library/email.policy.rst:668 +msgid "" +"Originally added in 3.3 as a :term:`provisional feature `." +msgstr "最初在 3.3 中作为 :term:`暂定特性 ` 添加。" diff --git a/library/email.utils.po b/library/email.utils.po new file mode 100644 index 000000000..95ecdc894 --- /dev/null +++ b/library/email.utils.po @@ -0,0 +1,325 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) 2001-2024, Python Software Foundation +# This file is distributed under the same license as the Python package. +# FIRST AUTHOR , YEAR. +# +# Translators: +# eric R , 2018 +# Larry Wang , 2019 +# Xu Siyuan, 2020 +# Rafael Fontenelle , 2024 +# Freesand Leo , 2024 +# +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: Python 3.9\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2024-09-06 19:48+0000\n" +"PO-Revision-Date: 2018-11-22 01:00+0000\n" +"Last-Translator: Freesand Leo , 2024\n" +"Language-Team: Chinese (China) (https://app.transifex.com/python-doc/teams/5390/zh_CN/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: zh_CN\n" +"Plural-Forms: nplurals=1; plural=0;\n" + +#: ../../library/email.utils.rst:2 +msgid ":mod:`email.utils`: Miscellaneous utilities" +msgstr ":mod:`email.utils`: 其他工具" + +#: ../../library/email.utils.rst:7 +msgid "**Source code:** :source:`Lib/email/utils.py`" +msgstr "**源代码:** :source:`Lib/email/utils.py`" + +#: ../../library/email.utils.rst:11 +msgid "" +"There are a couple of useful utilities provided in the :mod:`email.utils` " +"module:" +msgstr ":mod:`email.utils` 模块提供如下几个工具" + +#: ../../library/email.utils.rst:16 +msgid "" +"Return local time as an aware datetime object. If called without arguments," +" return current time. Otherwise *dt* argument should be a " +":class:`~datetime.datetime` instance, and it is converted to the local time " +"zone according to the system time zone database. If *dt* is naive (that is," +" ``dt.tzinfo`` is ``None``), it is assumed to be in local time. In this " +"case, a positive or zero value for *isdst* causes ``localtime`` to presume " +"initially that summer time (for example, Daylight Saving Time) is or is not " +"(respectively) in effect for the specified time. A negative value for " +"*isdst* causes the ``localtime`` to attempt to divine whether summer time is" +" in effect for the specified time." +msgstr "" +"以感知型 datetime 对象返回当地时间。 如果调用时参数为空,则返回当前时间。 否则 *dt* 参数应该是一个 " +":class:`~datetime.datetime` 实例,并根据系统时区数据库转换为当地时区。 如果 *dt* 是简单型的 (即 " +"``dt.tzinfo`` 是 ``None`` ),则假定为当地时间。 在这种情况下,为正值或零的 *isdst* 会使 ``localtime`` " +"假定夏季时间(例如,夏令时)对指定时间(分别)生效或不生效。 负值 *isdst* 会使 ``localtime`` 预测夏季时间对指定时间是否生效。" + +#: ../../library/email.utils.rst:32 +msgid "" +"Returns a string suitable for an :rfc:`2822`\\ -compliant " +":mailheader:`Message-ID` header. Optional *idstring* if given, is a string " +"used to strengthen the uniqueness of the message id. Optional *domain* if " +"given provides the portion of the msgid after the '@'. The default is the " +"local hostname. It is not normally necessary to override this default, but " +"may be useful certain cases, such as a constructing distributed system that " +"uses a consistent domain name across multiple hosts." +msgstr "" +"返回一个适合作为兼容 :rfc:`2822` 的 :mailheader:`Message-ID` 标头的字符串。可选参数 *idstring* " +"可传入一字符串以增强该消息 ID 的唯一性。可选参数 *domain* 可用于提供消息 ID 中字符 '@' " +"之后的部分,其默认值是本机的主机名。正常情况下无需覆盖此默认值,但在特定情况下覆盖默认值可能会有用,比如构建一个分布式系统,在多台主机上采用一致的域名。" + +#: ../../library/email.utils.rst:40 +msgid "Added the *domain* keyword." +msgstr "增加了关键字 *domain*" + +#: ../../library/email.utils.rst:44 +msgid "" +"The remaining functions are part of the legacy (``Compat32``) email API. " +"There is no need to directly use these with the new API, since the parsing " +"and formatting they provide is done automatically by the header parsing " +"machinery of the new API." +msgstr "" +"下列函数是旧(``Compat32``)电子邮件 API 的一部分。新 API 提供的解析和格式化在标头解析机制中已经被自动完成,故在使用新 API " +"时没有必要直接使用它们函数。" + +#: ../../library/email.utils.rst:52 +msgid "" +"Return a new string with backslashes in *str* replaced by two backslashes, " +"and double quotes replaced by backslash-double quote." +msgstr "返回一个新的字符串, *str* 中的反斜杠被替换为两个反斜杠,并且双引号被替换为反斜杠加双引号。" + +#: ../../library/email.utils.rst:58 +msgid "" +"Return a new string which is an *unquoted* version of *str*. If *str* ends " +"and begins with double quotes, they are stripped off. Likewise if *str* " +"ends and begins with angle brackets, they are stripped off." +msgstr "" +"返回 *str* 被去除引用版本的字符串。如果 *str* 开头和结尾均是双引号,则这对双引号被去除。类似地,如果 *str* " +"开头和结尾都是尖角括号,这对尖角括号会被去除。" + +#: ../../library/email.utils.rst:65 +msgid "" +"Parse address -- which should be the value of some address-containing field " +"such as :mailheader:`To` or :mailheader:`Cc` -- into its constituent " +"*realname* and *email address* parts. Returns a tuple of that information, " +"unless the parse fails, in which case a 2-tuple of ``('', '')`` is returned." +msgstr "" +"将地址(应为诸如 :mailheader:`To` 或者 :mailheader:`Cc` 之类包含地址的字段值)解析为构成之的 *真实名字* 和 " +"*电子邮件地址* 部分。返回包含这两个信息的一个元组;如若解析失败,则返回一个二元组 ``('', '')`` 。" + +#: ../../library/email.utils.rst:70 ../../library/email.utils.rst:98 +msgid "" +"If *strict* is true, use a strict parser which rejects malformed inputs." +msgstr "如果 *strict* 为真值,将使用拒绝错误形式输入的严格解析器。" + +#: ../../library/email.utils.rst:72 ../../library/email.utils.rst:110 +msgid "" +"Add *strict* optional parameter and reject malformed inputs by default." +msgstr "增加了 *strict* 可选形参并将默认拒绝错误形式输入。" + +#: ../../library/email.utils.rst:78 +msgid "" +"The inverse of :meth:`parseaddr`, this takes a 2-tuple of the form " +"``(realname, email_address)`` and returns the string value suitable for a " +":mailheader:`To` or :mailheader:`Cc` header. If the first element of *pair*" +" is false, then the second element is returned unmodified." +msgstr "" +"是 :meth:`parseaddr` 的逆操作,接受一个 ``(真实名字, 电子邮件地址)`` 的二元组,并返回适合于 " +":mailheader:`To` or :mailheader:`Cc` 标头的字符串。如果第一个元素为假性值,则第二个元素将被原样返回。" + +#: ../../library/email.utils.rst:83 +msgid "" +"Optional *charset* is the character set that will be used in the :rfc:`2047`" +" encoding of the ``realname`` if the ``realname`` contains non-ASCII " +"characters. Can be an instance of :class:`str` or a " +":class:`~email.charset.Charset`. Defaults to ``utf-8``." +msgstr "" +"可选地,如果指定 *charset*,则被视为一符合 :rfc:`2047` 的编码字符集,用于编码 ``真实名字`` 中的非 ASCII " +"字符。可以是一个 :class:`str` 类的实例,或者一个 :class:`~email.charset.Charset` 类。默认为 " +"``utf-8`` 。" + +#: ../../library/email.utils.rst:88 +msgid "Added the *charset* option." +msgstr "添加了 *charset* 选项。" + +#: ../../library/email.utils.rst:94 +msgid "" +"This method returns a list of 2-tuples of the form returned by " +"``parseaddr()``. *fieldvalues* is a sequence of header field values as might" +" be returned by :meth:`Message.get_all `." +msgstr "" +"该方法返回一个与 ``parseaddr()`` 返回值形式相同的 2 元组。 *fieldvalues* 是与 " +":meth:`Message.get_all ` 返回值形式相同的由标头字段值组成的序列。" + +#: ../../library/email.utils.rst:100 +msgid "Here's a simple example that gets all the recipients of a message::" +msgstr "下面简单示例可获取一条消息的所有接收方::" + +#: ../../library/email.utils.rst:116 +msgid "" +"Attempts to parse a date according to the rules in :rfc:`2822`. however, " +"some mailers don't follow that format as specified, so :func:`parsedate` " +"tries to guess correctly in such cases. *date* is a string containing an " +":rfc:`2822` date, such as ``\"Mon, 20 Nov 1995 19:12:08 -0500\"``. If it " +"succeeds in parsing the date, :func:`parsedate` returns a 9-tuple that can " +"be passed directly to :func:`time.mktime`; otherwise ``None`` will be " +"returned. Note that indexes 6, 7, and 8 of the result tuple are not usable." +msgstr "" +"尝试根据 :rfc:`2822` 的规则解析一个日期。然而,有些寄信人不严格遵守这一格式,所以这种情况下 :func:`parsedate` " +"会尝试猜测其形式。*date* 是一个字符串包含了一个形如 ``\"Mon, 20 Nov 1995 19:12:08 -0500\"`` 的 " +":rfc:`2822` 格式日期。如果日期解析成功, :func:`parsedate` 将返回一个九元组,可直接传递给 " +":func:`time.mktime`;否则返回 ``None``。注意返回的元组中下标为 6、7、8 的部分是无用的。" + +#: ../../library/email.utils.rst:127 +msgid "" +"Performs the same function as :func:`parsedate`, but returns either ``None``" +" or a 10-tuple; the first 9 elements make up a tuple that can be passed " +"directly to :func:`time.mktime`, and the tenth is the offset of the date's " +"timezone from UTC (which is the official term for Greenwich Mean Time) [#]_." +" If the input string has no timezone, the last element of the tuple " +"returned is ``0``, which represents UTC. Note that indexes 6, 7, and 8 of " +"the result tuple are not usable." +msgstr "" +"执行与 :func:`parsedate` 相同的功能,但会返回 ``None`` 或是一个 10 元组;前 9 个元素构成一个可以直接传给 " +":func:`time.mktime` 的元组,而第十个元素则是该日期的时区与 UTC (格林威治平均时 GMT 的正式名称) [#]_ 的时差。 " +"如果输入字符串不带时区,则所返回元组的最后一个元素将为 ``0``,这表示 UTC。 请注意结果元组的索引号 6, 7 和 8 是不可用的。" + +#: ../../library/email.utils.rst:137 +msgid "" +"The inverse of :func:`format_datetime`. Performs the same function as " +":func:`parsedate`, but on success returns a :mod:`~datetime.datetime`. If " +"the input date has a timezone of ``-0000``, the ``datetime`` will be a naive" +" ``datetime``, and if the date is conforming to the RFCs it will represent a" +" time in UTC but with no indication of the actual source timezone of the " +"message the date comes from. If the input date has any other valid timezone" +" offset, the ``datetime`` will be an aware ``datetime`` with the " +"corresponding a :class:`~datetime.timezone` :class:`~datetime.tzinfo`." +msgstr "" +":func:`format_datetime` 的逆操作。 执行与 :func:`parsedate` 相同的功能,但会在成功时返回一个 " +":mod:`~datetime.datetime`。 如果输入日期的时区值为 ``-0000``,则 ``datetime`` 将为一个简单型 " +"``datetime``,而如果日期符合 RFC 标准则它将代表一个 UTC 时间,但是并不指明日期所在消息的实际源时区。 " +"如果输入日期具有任何其他有效的时区差值,则 ``datetime`` 将为一个感知型 ``datetime`` 并与 " +":class:`~datetime.timezone` :class:`~datetime.tzinfo` 相对应。" + +#: ../../library/email.utils.rst:151 +msgid "" +"Turn a 10-tuple as returned by :func:`parsedate_tz` into a UTC timestamp " +"(seconds since the Epoch). If the timezone item in the tuple is ``None``, " +"assume local time." +msgstr "" +"将 :func:`parsedate_tz` 所返回的 10 元组转换为一个 UTC 时间戳(相距 Epoch 纪元初始的秒数)。 如果元组中的时区项为" +" ``None``,则视为当地时间。" + +#: ../../library/email.utils.rst:158 +msgid "Returns a date string as per :rfc:`2822`, e.g.::" +msgstr "返回 :rfc:`2822` 标准的日期字符串,例如::" + +#: ../../library/email.utils.rst:162 +msgid "" +"Optional *timeval* if given is a floating point time value as accepted by " +":func:`time.gmtime` and :func:`time.localtime`, otherwise the current time " +"is used." +msgstr "" +"可选的 *timeval* 如果给出,则是一个可被 :func:`time.gmtime` 和 :func:`time.localtime` " +"接受的浮点数时间值,否则会使用当前时间。" + +#: ../../library/email.utils.rst:166 +msgid "" +"Optional *localtime* is a flag that when ``True``, interprets *timeval*, and" +" returns a date relative to the local timezone instead of UTC, properly " +"taking daylight savings time into account. The default is ``False`` meaning " +"UTC is used." +msgstr "" +"可选的 *localtime* 是一个旗标,当为 ``True`` 时,将会解析 *timeval*,并返回一个相对于当地时区而非 UTC " +"的日期值,并会适当地考虑夏令时。 默认值 ``False`` 表示使用 UTC。" + +#: ../../library/email.utils.rst:171 +msgid "" +"Optional *usegmt* is a flag that when ``True``, outputs a date string with " +"the timezone as an ascii string ``GMT``, rather than a numeric ``-0000``. " +"This is needed for some protocols (such as HTTP). This only applies when " +"*localtime* is ``False``. The default is ``False``." +msgstr "" +"可选的 *usegmt* 是一个旗标,当为 ``True`` 时,将会输出一个日期字符串,其中时区表示为 ascii 字符串 ``GMT`` " +"而非数字形式的 ``-0000``。 这对某些协议(例如 HTTP)来说是必要的。 这仅在 *localtime* 为 ``False`` 时应用。 " +"默认值为 ``False``。" + +#: ../../library/email.utils.rst:179 +msgid "" +"Like ``formatdate``, but the input is a :mod:`datetime` instance. If it is " +"a naive datetime, it is assumed to be \"UTC with no information about the " +"source timezone\", and the conventional ``-0000`` is used for the timezone. " +"If it is an aware ``datetime``, then the numeric timezone offset is used. If" +" it is an aware timezone with offset zero, then *usegmt* may be set to " +"``True``, in which case the string ``GMT`` is used instead of the numeric " +"timezone offset. This provides a way to generate standards conformant HTTP " +"date headers." +msgstr "" +"类似于 ``formatdate``,但输入的是一个 :mod:`datetime` 实例。 如果实例是一个简单型 datetime,它会被视为 " +"\"不带源时区信息的 UTC\",并且使用传统的 ``-0000`` 作为时区。 如果实例是一个感知型 " +"``datetime``,则会使用数字形式的时区时差。 如果实例是感知型且时区时差为零,则 *usegmt* 可能会被设为 " +"``True``,在这种情况下将使用字符串 ``GMT`` 而非数字形式的时区时差。 这提供了一种生成符合标准 HTTP 日期标头的方式。" + +#: ../../library/email.utils.rst:193 +msgid "Decode the string *s* according to :rfc:`2231`." +msgstr "根据 :rfc:`2231` 解码字符串 *s*。" + +#: ../../library/email.utils.rst:198 +msgid "" +"Encode the string *s* according to :rfc:`2231`. Optional *charset* and " +"*language*, if given is the character set name and language name to use. If" +" neither is given, *s* is returned as-is. If *charset* is given but " +"*language* is not, the string is encoded using the empty string for " +"*language*." +msgstr "" +"根据 :rfc:`2231` 对字符串 *s* 进行编码。 可选的 *charset* 和 *language* " +"如果给出,则为指明要使用的字符集名称和语言名称。 如果两者均未给出,则会原样返回 *s*。 如果给出 *charset* 但未给出 " +"*language*,则会使用空字符串作为 *language* 值来对字符串进行编码。" + +#: ../../library/email.utils.rst:206 +msgid "" +"When a header parameter is encoded in :rfc:`2231` format, " +":meth:`Message.get_param ` may return a " +"3-tuple containing the character set, language, and value. " +":func:`collapse_rfc2231_value` turns this into a unicode string. Optional " +"*errors* is passed to the *errors* argument of :class:`str`'s " +":func:`~str.encode` method; it defaults to ``'replace'``. Optional " +"*fallback_charset* specifies the character set to use if the one in the " +":rfc:`2231` header is not known by Python; it defaults to ``'us-ascii'``." +msgstr "" +"当以 :rfc:`2231` 格式来编码标头形参时,:meth:`Message.get_param " +"` 可能返回一个包含字符集、语言和值的 3 元组。 " +":func:`collapse_rfc2231_value` 会将此返回为一个 unicode 字符串。 可选的 *errors* 会被传递给 " +":class:`str` 的 :func:`~str.encode` 方法的 *errors* 参数;它的默认值为 ``'replace'``。 可选的" +" *fallback_charset* 指定当 :rfc:`2231` 标头中的字符集无法被 Python 识别时要使用的字符集;它的默认值为 " +"``'us-ascii'``。" + +#: ../../library/email.utils.rst:215 +msgid "" +"For convenience, if the *value* passed to :func:`collapse_rfc2231_value` is " +"not a tuple, it should be a string and it is returned unquoted." +msgstr "" +"为方便起见,如果传给 :func:`collapse_rfc2231_value` 的 *value* 不是一个元组,则应为一个字符串并会将其原样返回。" + +#: ../../library/email.utils.rst:221 +msgid "" +"Decode parameters list according to :rfc:`2231`. *params* is a sequence of " +"2-tuples containing elements of the form ``(content-type, string-value)``." +msgstr "" +"根据 :rfc:`2231` 解码参数列表。 *params* 是一个包含 ``(content-type, string-value)`` " +"形式的元素的 2 元组的序列。" + +#: ../../library/email.utils.rst:226 +msgid "Footnotes" +msgstr "备注" + +#: ../../library/email.utils.rst:227 +msgid "" +"Note that the sign of the timezone offset is the opposite of the sign of the" +" ``time.timezone`` variable for the same timezone; the latter variable " +"follows the POSIX standard while this module follows :rfc:`2822`." +msgstr "" +"请注意时区时差的符号与同一时区的 ``time.timezone`` 变量的符号相反;后者遵循 POSIX 标准而此模块遵循 :rfc:`2822`。" diff --git a/library/ensurepip.po b/library/ensurepip.po new file mode 100644 index 000000000..0c900f6e7 --- /dev/null +++ b/library/ensurepip.po @@ -0,0 +1,237 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) 2001-2025, Python Software Foundation +# This file is distributed under the same license as the Python package. +# FIRST AUTHOR , YEAR. +# +# Translators: +# ww song , 2018 +# Kevin Deng , 2022 +# Freesand Leo , 2022 +# Rafael Fontenelle , 2025 +# +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: Python 3.9\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2025-02-07 16:40+0000\n" +"PO-Revision-Date: 2017-02-16 23:09+0000\n" +"Last-Translator: Rafael Fontenelle , 2025\n" +"Language-Team: Chinese (China) (https://app.transifex.com/python-doc/teams/5390/zh_CN/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: zh_CN\n" +"Plural-Forms: nplurals=1; plural=0;\n" + +#: ../../library/ensurepip.rst:2 +msgid ":mod:`ensurepip` --- Bootstrapping the ``pip`` installer" +msgstr ":mod:`ensurepip` --- 引导 ``pip`` 安装器" + +#: ../../library/ensurepip.rst:12 +msgid "" +"The :mod:`ensurepip` package provides support for bootstrapping the ``pip`` " +"installer into an existing Python installation or virtual environment. This " +"bootstrapping approach reflects the fact that ``pip`` is an independent " +"project with its own release cycle, and the latest available stable version " +"is bundled with maintenance and feature releases of the CPython reference " +"interpreter." +msgstr "" +":mod:`ensurepip` 包为在已有的Python安装实例或虚拟环境中引导 ``pip`` " +"安装器提供了支持。需要使用引导才能使用pip的这一事实也正好反映了 ``pip`` " +"是一个独立的项目,有其自己的发布周期,其最新版本随CPython解释器的维护版本和新特性版本一同捆绑。" + +#: ../../library/ensurepip.rst:19 +msgid "" +"In most cases, end users of Python shouldn't need to invoke this module " +"directly (as ``pip`` should be bootstrapped by default), but it may be " +"needed if installing ``pip`` was skipped when installing Python (or when " +"creating a virtual environment) or after explicitly uninstalling ``pip``." +msgstr "" +"在大多数情况下,Python的终端使用者不需要直接调用这个模块( ``pip`` " +"默认应该已被引导),不过,如果在安装Python(或创建虚拟环境)之时跳过了安装 ``pip`` 步骤,或者日后特意卸载了 ``pip`` " +",则需要使用这个模块。" + +#: ../../library/ensurepip.rst:27 +msgid "" +"This module *does not* access the internet. All of the components needed to " +"bootstrap ``pip`` are included as internal parts of the package." +msgstr "这个模块 *无需* 访问互联网。引导启动 ``pip`` 所需的全部组件均包含在包的内部。" + +#: ../../library/ensurepip.rst:34 +msgid ":ref:`installing-index`" +msgstr ":ref:`installing-index`" + +#: ../../library/ensurepip.rst:34 +msgid "The end user guide for installing Python packages" +msgstr "安装Python包的终端使用者教程" + +#: ../../library/ensurepip.rst:36 +msgid ":pep:`453`: Explicit bootstrapping of pip in Python installations" +msgstr ":pep:`453`: 在Python安装实例中显式引导启动pip" + +#: ../../library/ensurepip.rst:37 +msgid "The original rationale and specification for this module." +msgstr "这个模块的原始缘由以及规范文档" + +#: ../../library/ensurepip.rst:41 +msgid "Command line interface" +msgstr "命令行界面" + +#: ../../library/ensurepip.rst:43 +msgid "" +"The command line interface is invoked using the interpreter's ``-m`` switch." +msgstr "使用解释器的 ``-m`` 参数调用命令行接口。" + +#: ../../library/ensurepip.rst:45 +msgid "The simplest possible invocation is::" +msgstr "最简单的调用方式为:" + +#: ../../library/ensurepip.rst:49 +msgid "" +"This invocation will install ``pip`` if it is not already installed, but " +"otherwise does nothing. To ensure the installed version of ``pip`` is at " +"least as recent as the one bundled with ``ensurepip``, pass the " +"``--upgrade`` option::" +msgstr "" + +#: ../../library/ensurepip.rst:56 +msgid "" +"By default, ``pip`` is installed into the current virtual environment (if " +"one is active) or into the system site packages (if there is no active " +"virtual environment). The installation location can be controlled through " +"two additional command line options:" +msgstr "" +"在默认情况下,``pip`` 会被安装到当前虚拟环境(如果激活了虚拟环境)或系统的包目录(如果未激活虚拟环境)。 " +"安装位置可通过两个额外的命令行选项来控制:" + +#: ../../library/ensurepip.rst:61 +msgid "" +"``--root ``: Installs ``pip`` relative to the given root directory " +"rather than the root of the currently active virtual environment (if any) or" +" the default root for the current Python installation." +msgstr "" +"``--root 1``: 相对于给定的根目录而不是当前已激活虚拟环境(如果存在)的根目录或当前 Python 安装版的默认根目录来安装 " +"``pip``。" + +#: ../../library/ensurepip.rst:64 +msgid "" +"``--user``: Installs ``pip`` into the user site packages directory rather " +"than globally for the current Python installation (this option is not " +"permitted inside an active virtual environment)." +msgstr "" +"``--user``: 将 ``pip`` 安装到用户包目录而不是全局安装到当前 Python 安装版(此选项不允许在已激活虚拟环境中使用)。" + +#: ../../library/ensurepip.rst:68 +msgid "" +"By default, the scripts ``pipX`` and ``pipX.Y`` will be installed (where X.Y" +" stands for the version of Python used to invoke ``ensurepip``). The scripts" +" installed can be controlled through two additional command line options:" +msgstr "" +"在默认情况下,脚本 ``pipX`` 和 ``pipX.Y`` 将被安装(其中 X.Y 表示被用来唤起 ``ensurepip`` 的 Python " +"的版本)。 所安装的脚本可通过两个额外的命令行选项来控制:" + +#: ../../library/ensurepip.rst:73 +msgid "" +"``--altinstall``: if an alternate installation is requested, the ``pipX`` " +"script will *not* be installed." +msgstr "``--altinstall``: 如果请求了一个替代安装版,则 ``pipX`` 脚本将 *不会* 被安装。" + +#: ../../library/ensurepip.rst:76 +msgid "" +"``--default-pip``: if a \"default pip\" installation is requested, the " +"``pip`` script will be installed in addition to the two regular scripts." +msgstr "``--default-pip``: 如果请求了一个 \"默认的 pip\" 安装版,则除了两个常规脚本之外还将安装 ``pip`` 脚本。" + +#: ../../library/ensurepip.rst:79 +msgid "" +"Providing both of the script selection options will trigger an exception." +msgstr "同时提供这两个脚本选择选项将会触发异常。" + +#: ../../library/ensurepip.rst:83 +msgid "Module API" +msgstr "模块 API" + +#: ../../library/ensurepip.rst:85 +msgid ":mod:`ensurepip` exposes two functions for programmatic use:" +msgstr ":mod:`ensurepip` 暴露了两个函数用于编程:" + +#: ../../library/ensurepip.rst:89 +msgid "" +"Returns a string specifying the bundled version of pip that will be " +"installed when bootstrapping an environment." +msgstr "" + +#: ../../library/ensurepip.rst:96 +msgid "Bootstraps ``pip`` into the current or designated environment." +msgstr "初始创建 ``pip`` 到当前的或指定的环境中。" + +#: ../../library/ensurepip.rst:98 +msgid "" +"*root* specifies an alternative root directory to install relative to. If " +"*root* is ``None``, then installation uses the default install location for " +"the current environment." +msgstr "*root* 指明要作为相对安装路径的替代根目录。 如果 *root* 为 ``None``,则安装会使用当前环境的默认安装位置。" + +#: ../../library/ensurepip.rst:102 +msgid "" +"*upgrade* indicates whether or not to upgrade an existing installation of an" +" earlier version of ``pip`` to the bundled version." +msgstr "" + +#: ../../library/ensurepip.rst:105 +msgid "" +"*user* indicates whether to use the user scheme rather than installing " +"globally." +msgstr "*user* 指明是否使用针对用户的安装方案而不是全局安装。" + +#: ../../library/ensurepip.rst:108 +msgid "" +"By default, the scripts ``pipX`` and ``pipX.Y`` will be installed (where X.Y" +" stands for the current version of Python)." +msgstr "在默认情况下,将会安装 ``pipX`` 和 ``pipX.Y`` 脚本(其中 X.Y 表示 Python 的当前版本)。" + +#: ../../library/ensurepip.rst:111 +msgid "If *altinstall* is set, then ``pipX`` will *not* be installed." +msgstr "如果设置了 *altinstall*,则 ``pipX`` 将 *不会* 被安装。" + +#: ../../library/ensurepip.rst:113 +msgid "" +"If *default_pip* is set, then ``pip`` will be installed in addition to the " +"two regular scripts." +msgstr "如果设置了 *default_pip*,则除了两个常规脚本外还将安装 ``pip``。" + +#: ../../library/ensurepip.rst:116 +msgid "" +"Setting both *altinstall* and *default_pip* will trigger :exc:`ValueError`." +msgstr "同时设置 *altinstall* 和 *default_pip* 将触发 :exc:`ValueError`。" + +#: ../../library/ensurepip.rst:119 +msgid "" +"*verbosity* controls the level of output to :data:`sys.stdout` from the " +"bootstrapping operation." +msgstr "*verbosity* 控制初始创建操作对 :data:`sys.stdout` 的输出信息级别。" + +#: ../../library/ensurepip.rst:122 +msgid "" +"Raises an :ref:`auditing event ` ``ensurepip.bootstrap`` with " +"argument ``root``." +msgstr "引发一个 :ref:`审计事件 ` ``ensurepip.bootstrap`` 并附带参数 ``root``。" + +#: ../../library/ensurepip.rst:126 +msgid "" +"The bootstrapping process has side effects on both ``sys.path`` and " +"``os.environ``. Invoking the command line interface in a subprocess instead " +"allows these side effects to be avoided." +msgstr "" +"创建创建过程对于 ``sys.path`` 和 ``os.environ`` 都会有附带影响。 改为在子进程中唤起命令行接口可以避免这些附带影响。" + +#: ../../library/ensurepip.rst:132 +msgid "" +"The bootstrapping process may install additional modules required by " +"``pip``, but other software should not assume those dependencies will always" +" be present by default (as the dependencies may be removed in a future " +"version of ``pip``)." +msgstr "" +"初始创建过程可能会安装 ``pip`` 所需的额外模块,但其他软件不应假定这些依赖将总是会默认存在(因为这些依赖可能会在未来的 ``pip`` " +"版本中被移除)。" diff --git a/library/enum.po b/library/enum.po new file mode 100644 index 000000000..e53b44bf5 --- /dev/null +++ b/library/enum.po @@ -0,0 +1,1167 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) 2001-2024, Python Software Foundation +# This file is distributed under the same license as the Python package. +# FIRST AUTHOR , YEAR. +# +# Translators: +# dannyvi , 2018 +# Arisaka97 , 2019 +# jaystone776 <1732865113@qq.com>, 2020 +# Freesand Leo , 2021 +# WH-2099 , 2021 +# Alpha Du , 2022 +# Rafael Fontenelle , 2024 +# +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: Python 3.9\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2024-05-31 16:34+0000\n" +"PO-Revision-Date: 2017-02-16 23:09+0000\n" +"Last-Translator: Rafael Fontenelle , 2024\n" +"Language-Team: Chinese (China) (https://app.transifex.com/python-doc/teams/5390/zh_CN/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: zh_CN\n" +"Plural-Forms: nplurals=1; plural=0;\n" + +#: ../../library/enum.rst:2 +msgid ":mod:`enum` --- Support for enumerations" +msgstr ":mod:`enum` --- 对枚举的支持" + +#: ../../library/enum.rst:14 +msgid "**Source code:** :source:`Lib/enum.py`" +msgstr "**源代码:** :source:`Lib/enum.py`" + +#: ../../library/enum.rst:18 +msgid "" +"An enumeration is a set of symbolic names (members) bound to unique, " +"constant values. Within an enumeration, the members can be compared by " +"identity, and the enumeration itself can be iterated over." +msgstr "枚举是与多个唯一常量值绑定的一组符号名(即成员)。枚举中的成员可以进行身份比较,并且枚举自身也可迭代。" + +#: ../../library/enum.rst:22 +msgid "Case of Enum Members" +msgstr "枚举成员名的大小写" + +#: ../../library/enum.rst:24 +msgid "" +"Because Enums are used to represent constants we recommend using UPPER_CASE " +"names for enum members, and will be using that style in our examples." +msgstr "枚举表示的是常量,因此,建议枚举成员名称使用大写字母,本篇的示例将用此种风格。" + +#: ../../library/enum.rst:30 +msgid "Module Contents" +msgstr "模块内容" + +#: ../../library/enum.rst:32 +msgid "" +"This module defines four enumeration classes that can be used to define " +"unique sets of names and values: :class:`Enum`, :class:`IntEnum`, " +":class:`Flag`, and :class:`IntFlag`. It also defines one decorator, " +":func:`unique`, and one helper, :class:`auto`." +msgstr "" +"本模块定义了四个枚举类,用来定义名称与值的唯一组合: :class:`Enum`、:class:`IntEnum`、:class:`Flag` 和 " +":class:`IntFlag`。此外,还定义了一个装饰器,:func:`unique`, 和一个辅助类,:class:`auto`。" + +#: ../../library/enum.rst:39 +msgid "" +"Base class for creating enumerated constants. See section `Functional API`_" +" for an alternate construction syntax." +msgstr "创建枚举常量的基类。 如需了解另一种构建语法,请参阅 `Functional API`_ 小节。" + +#: ../../library/enum.rst:44 +msgid "" +"Base class for creating enumerated constants that are also subclasses of " +":class:`int`." +msgstr "创建 :class:`int` 子类枚举常量的基类。" + +#: ../../library/enum.rst:49 +msgid "" +"Base class for creating enumerated constants that can be combined using the " +"bitwise operators without losing their :class:`IntFlag` membership. " +":class:`IntFlag` members are also subclasses of :class:`int`." +msgstr "" +"创建可与位运算符搭配使用,又不失去 :class:`IntFlag` 成员资格的枚举常量的基类。:class:`IntFlag` 成员也是 " +":class:`int` 的子类。" + +#: ../../library/enum.rst:55 +msgid "" +"Base class for creating enumerated constants that can be combined using the " +"bitwise operations without losing their :class:`Flag` membership." +msgstr "创建可与位运算符搭配使用,又不会失去 :class:`Flag` 成员资格的枚举常量的基类。" + +#: ../../library/enum.rst:61 +msgid "" +"Enum class decorator that ensures only one name is bound to any one value." +msgstr "确保一个名称只绑定一个值的 Enum 类装饰器。" + +#: ../../library/enum.rst:65 +msgid "" +"Instances are replaced with an appropriate value for Enum members. By " +"default, the initial value starts at 1." +msgstr "以合适的值代替 Enum 成员的实例。 初始值默认从 1 开始。" + +#: ../../library/enum.rst:67 +msgid "``Flag``, ``IntFlag``, ``auto``" +msgstr "``Flag``, ``IntFlag``, ``auto``" + +#: ../../library/enum.rst:71 +msgid "Creating an Enum" +msgstr "创建 Enum" + +#: ../../library/enum.rst:73 +msgid "" +"Enumerations are created using the :keyword:`class` syntax, which makes them" +" easy to read and write. An alternative creation method is described in " +"`Functional API`_. To define an enumeration, subclass :class:`Enum` as " +"follows::" +msgstr "" +"枚举是由 :keyword:`class` 句法创建的,这种方式易读、易写。 另一种创建方法请参阅 `Functional " +"API`_。:class:`Enum` 以如下定义枚举:" + +#: ../../library/enum.rst:85 +msgid "Enum member values" +msgstr "Enum 成员值" + +#: ../../library/enum.rst:87 +msgid "" +"Member values can be anything: :class:`int`, :class:`str`, etc.. If the " +"exact value is unimportant you may use :class:`auto` instances and an " +"appropriate value will be chosen for you. Care must be taken if you mix " +":class:`auto` with other values." +msgstr "" +"成员值可以是 :class:`int`、:class:`str` 等。若无需设定确切值,:class:`auto` 实例可以自动为成员分配合适 的值。将" +" :class:`auto` 与其他值混用时必须要慎重。" + +#: ../../library/enum.rst:92 +msgid "Nomenclature" +msgstr "命名法" + +#: ../../library/enum.rst:94 +msgid "The class :class:`Color` is an *enumeration* (or *enum*)" +msgstr "类 :class:`Color` 是 *枚举* (或称为 *enum* )。" + +#: ../../library/enum.rst:95 +msgid "" +"The attributes :attr:`Color.RED`, :attr:`Color.GREEN`, etc., are " +"*enumeration members* (or *enum members*) and are functionally constants." +msgstr ":attr:`Color.RED`、:attr:`Color.GREEN` 等属性是 *枚举成员* (或 *enum 成员*),也是常量。" + +#: ../../library/enum.rst:97 +msgid "" +"The enum members have *names* and *values* (the name of :attr:`Color.RED` is" +" ``RED``, the value of :attr:`Color.BLUE` is ``3``, etc.)" +msgstr "" +"枚举成员具有 *名称* 和 *值* (例如 :attr:`Color.RED` 的名称为 ``RED``,:attr:`Color.BLUE` 的值为 " +"``3`` 等等)" + +#: ../../library/enum.rst:103 +msgid "" +"Even though we use the :keyword:`class` syntax to create Enums, Enums are " +"not normal Python classes. See `How are Enums different?`_ for more " +"details." +msgstr "" +"虽然 Enum 由 :keyword:`class` 语法创建,但 Enum 并不是常规的 Python 类。详见 `How are Enums " +"different?`_。" + +#: ../../library/enum.rst:107 +msgid "Enumeration members have human readable string representations::" +msgstr "枚举成员的字符串表现形式更容易理解:" + +#: ../../library/enum.rst:112 +msgid "...while their ``repr`` has more information::" +msgstr "同时,它的 ``repr`` 包含更多信息:" + +#: ../../library/enum.rst:117 +msgid "The *type* of an enumeration member is the enumeration it belongs to::" +msgstr "枚举成员的 *类型* 就是它所属的枚举:" + +#: ../../library/enum.rst:125 +msgid "Enum members also have a property that contains just their item name::" +msgstr "Enum 成员还包含 name 属性:" + +#: ../../library/enum.rst:130 +msgid "Enumerations support iteration, in definition order::" +msgstr "枚举按定义的顺序进行迭代:" + +#: ../../library/enum.rst:146 +msgid "" +"Enumeration members are hashable, so they can be used in dictionaries and " +"sets::" +msgstr "枚举成员可哈希,可用于字典和集合:" + +#: ../../library/enum.rst:156 +msgid "Programmatic access to enumeration members and their attributes" +msgstr "枚举成员及其属性的编程访问" + +#: ../../library/enum.rst:158 +msgid "" +"Sometimes it's useful to access members in enumerations programmatically " +"(i.e. situations where ``Color.RED`` won't do because the exact color is not" +" known at program-writing time). ``Enum`` allows such access::" +msgstr "" +"有时,要在程序中访问枚举成员(如,开发时不知道颜色的确切值,``Color.RED`` 不适用的情况)。``Enum`` 支持如下访问方式::" + +#: ../../library/enum.rst:167 +msgid "If you want to access enum members by *name*, use item access::" +msgstr "若要用 *名称* 访问枚举成员时,可使用枚举项::" + +#: ../../library/enum.rst:174 +msgid "" +"If you have an enum member and need its :attr:`name` or :attr:`value`::" +msgstr "若有了枚举成员,需要获取 :attr:`name` 或 :attr:`value`::" + +#: ../../library/enum.rst:184 +msgid "Duplicating enum members and values" +msgstr "重复的枚举成员和值" + +#: ../../library/enum.rst:186 +msgid "Having two enum members with the same name is invalid::" +msgstr "两个枚举成员的名称不能相同::" + +#: ../../library/enum.rst:196 +msgid "" +"However, two enum members are allowed to have the same value. Given two " +"members A and B with the same value (and A defined first), B is an alias to " +"A. By-value lookup of the value of A and B will return A. By-name lookup " +"of B will also return A::" +msgstr "" +"但是,两个枚举成员可以有相同的值。假设,成员 A 和 B 的值相同(先定义的是 A),则 B 是 A 的别名。按值查找 A 和 B 的值返回的是 " +"A。按名称查找 B,返回的也是 A:" + +#: ../../library/enum.rst:216 +msgid "" +"Attempting to create a member with the same name as an already defined " +"attribute (another member, a method, etc.) or attempting to create an " +"attribute with the same name as a member is not allowed." +msgstr "不允许创建与已定义属性(其他成员、方法等)同名的成员,也不支持创建与现有成员同名的属性。" + +#: ../../library/enum.rst:222 +msgid "Ensuring unique enumeration values" +msgstr "确保枚举值唯一" + +#: ../../library/enum.rst:224 +msgid "" +"By default, enumerations allow multiple names as aliases for the same value." +" When this behavior isn't desired, the following decorator can be used to " +"ensure each value is used only once in the enumeration:" +msgstr "默认情况下,枚举允许多个名称作为一个值的别名。如需禁用此行为,下述装饰器可以确保枚举中的值仅能只用一次:" + +#: ../../library/enum.rst:230 +msgid "" +"A :keyword:`class` decorator specifically for enumerations. It searches an " +"enumeration's :attr:`__members__` gathering any aliases it finds; if any are" +" found :exc:`ValueError` is raised with the details::" +msgstr "" +"专用于枚举的 :keyword:`class` 装饰器。 它会搜索一个枚举的 :attr:`__members__` " +"并收集所找到的任何别名;只要找到任何别名就会引发 :exc:`ValueError` 并附带相关细节信息::" + +#: ../../library/enum.rst:248 +msgid "Using automatic values" +msgstr "使用自动设定的值" + +#: ../../library/enum.rst:250 +msgid "If the exact value is unimportant you can use :class:`auto`::" +msgstr "如果具体的枚举值无所谓是什么,可以使用 :class:`auto`::" + +#: ../../library/enum.rst:261 +msgid "" +"The values are chosen by :func:`_generate_next_value_`, which can be " +"overridden::" +msgstr "枚举值将交由 :func:`_generate_next_value_` 选取,该函数可以被重写::" + +#: ../../library/enum.rst:279 +msgid "" +"The goal of the default :meth:`_generate_next_value_` method is to provide " +"the next :class:`int` in sequence with the last :class:`int` provided, but " +"the way it does this is an implementation detail and may change." +msgstr "" +"默认 :meth:`_generate_next_value_` 方法的目标是提供所给出的最后一个 :class:`int` 所在序列的下一个 " +":class:`int`,但这种行为方式属于实现细节并且可能发生改变。" + +#: ../../library/enum.rst:285 +msgid "" +"The :meth:`_generate_next_value_` method must be defined before any members." +msgstr ":meth:`_generate_next_value_` 方法的定义必须在任何其他成员之前。" + +#: ../../library/enum.rst:288 +msgid "Iteration" +msgstr "迭代" + +#: ../../library/enum.rst:290 +msgid "Iterating over the members of an enum does not provide the aliases::" +msgstr "对枚举成员的迭代遍历不会列出别名::" + +#: ../../library/enum.rst:295 +msgid "" +"The special attribute ``__members__`` is a read-only ordered mapping of " +"names to members. It includes all names defined in the enumeration, " +"including the aliases::" +msgstr "特殊属性 ``__members__`` 是一个名称与成员间的只读有序映射。包含了枚举中定义的所有名称,包括别名::" + +#: ../../library/enum.rst:307 +msgid "" +"The ``__members__`` attribute can be used for detailed programmatic access " +"to the enumeration members. For example, finding all the aliases::" +msgstr "``__members__`` 属性可用于获取枚举成员的详细信息。比如查找所有别名::" + +#: ../../library/enum.rst:315 +msgid "Comparisons" +msgstr "比较运算" + +#: ../../library/enum.rst:317 +msgid "Enumeration members are compared by identity::" +msgstr "枚举成员是按 ID 进行比较的::" + +#: ../../library/enum.rst:326 +msgid "" +"Ordered comparisons between enumeration values are *not* supported. Enum " +"members are not integers (but see `IntEnum`_ below)::" +msgstr "枚举值之间无法进行有序的比较。枚举的成员不是整数(另请参阅下文 `IntEnum`_)::" + +#: ../../library/enum.rst:334 +msgid "Equality comparisons are defined though::" +msgstr "相等性比较的定义如下::" + +#: ../../library/enum.rst:343 +msgid "" +"Comparisons against non-enumeration values will always compare not equal " +"(again, :class:`IntEnum` was explicitly designed to behave differently, see " +"below)::" +msgstr "与非枚举值的比较将总是不等的(同样 :class:`IntEnum` 有意设计为其他的做法,参见下文)::" + +#: ../../library/enum.rst:352 +msgid "Allowed members and attributes of enumerations" +msgstr "合法的枚举成员和属性" + +#: ../../library/enum.rst:354 +msgid "" +"The examples above use integers for enumeration values. Using integers is " +"short and handy (and provided by default by the `Functional API`_), but not " +"strictly enforced. In the vast majority of use-cases, one doesn't care what" +" the actual value of an enumeration is. But if the value *is* important, " +"enumerations can have arbitrary values." +msgstr "" +"以上示例使用整数作为枚举值。 使用整数相当简洁方便(并由 `Functional API`_ 默认提供),但并不强制要求使用。 " +"在大部分用例中,开发者都关心枚举的实际值是什么。 但如果值 *确实* 重要,则枚举可以使用任意的值。" + +#: ../../library/enum.rst:360 +msgid "" +"Enumerations are Python classes, and can have methods and special methods as" +" usual. If we have this enumeration::" +msgstr "枚举是 Python 的类,可带有普通方法和特殊方法。假设有如下枚举::" + +#: ../../library/enum.rst:380 +msgid "Then::" +msgstr "那么::" + +#: ../../library/enum.rst:389 +msgid "" +"The rules for what is allowed are as follows: names that start and end with " +"a single underscore are reserved by enum and cannot be used; all other " +"attributes defined within an enumeration will become members of this " +"enumeration, with the exception of special methods (:meth:`__str__`, " +":meth:`__add__`, etc.), descriptors (methods are also descriptors), and " +"variable names listed in :attr:`_ignore_`." +msgstr "" +"合法的规则如下:以单下划线开头和结尾的名称是保留值,不能使用;在枚举中定义的其他所有属性都将成为该枚举的成员,但特殊方法(:meth:`__str__`" +" 、:meth:`__add__` 等)、描述符(方法也是描述符)和在 :attr:`_ignore_` 中列出的变量名除外。" + +#: ../../library/enum.rst:396 +msgid "" +"Note: if your enumeration defines :meth:`__new__` and/or :meth:`__init__` " +"then any value(s) given to the enum member will be passed into those " +"methods. See `Planet`_ for an example." +msgstr "" +"注意:如果枚举定义了 :meth:`__new__` 或 :meth:`__init__` ,那么赋给枚举成员的任何值都会被传入这些方法。请参阅示例 " +"`Planet`_ 。" + +#: ../../library/enum.rst:402 +msgid "Restricted Enum subclassing" +msgstr "受限的 Enum 子类化" + +#: ../../library/enum.rst:404 +msgid "" +"A new :class:`Enum` class must have one base Enum class, up to one concrete " +"data type, and as many :class:`object`-based mixin classes as needed. The " +"order of these base classes is::" +msgstr "" +"一个新的 :class:`Enum` 类必须基于一个 Enum 类,至多一个实体数据类型以及出于实际需要的任意多个基于 :class:`object` " +"的 mixin 类。 这些基类的顺序为::" + +#: ../../library/enum.rst:411 +msgid "" +"Also, subclassing an enumeration is allowed only if the enumeration does not" +" define any members. So this is forbidden::" +msgstr "仅当未定义任何成员时,枚举类才允许被子类化。因此不得有以下写法::" + +#: ../../library/enum.rst:421 +msgid "But this is allowed::" +msgstr "但以下代码是可以的::" + +#: ../../library/enum.rst:432 +msgid "" +"Allowing subclassing of enums that define members would lead to a violation " +"of some important invariants of types and instances. On the other hand, it " +"makes sense to allow sharing some common behavior between a group of " +"enumerations. (See `OrderedEnum`_ for an example.)" +msgstr "" +"如果定义了成员的枚举也能被子类化,则类型与实例的某些重要不可变规则将会被破坏。另一方面,一组枚举类共享某些操作也是合理的。(请参阅例程 " +"`OrderedEnum`_ )" + +#: ../../library/enum.rst:439 +msgid "Pickling" +msgstr "打包(pickle)" + +#: ../../library/enum.rst:441 +msgid "Enumerations can be pickled and unpickled::" +msgstr "枚举类型可以被打包和解包::" + +#: ../../library/enum.rst:448 +msgid "" +"The usual restrictions for pickling apply: picklable enums must be defined " +"in the top level of a module, since unpickling requires them to be " +"importable from that module." +msgstr "打包的常规限制同样适用于枚举类型:必须在模块的最高层级定义,因为解包操作要求可从该模块导入。" + +#: ../../library/enum.rst:454 +msgid "" +"With pickle protocol version 4 it is possible to easily pickle enums nested " +"in other classes." +msgstr "用 pickle 协议版本 4 可以轻松地将嵌入其他类中的枚举进行打包。" + +#: ../../library/enum.rst:457 +msgid "" +"It is possible to modify how Enum members are pickled/unpickled by defining " +":meth:`__reduce_ex__` in the enumeration class." +msgstr "通过在枚举类中定义 :meth:`__reduce_ex__` 可以对 Enum 成员的封存/解封方式进行修改。" + +#: ../../library/enum.rst:462 +msgid "Functional API" +msgstr "函数式 API" + +#: ../../library/enum.rst:464 +msgid "" +"The :class:`Enum` class is callable, providing the following functional " +"API::" +msgstr ":class:`Enum` 类可调用并提供了以下函数式 API:" + +#: ../../library/enum.rst:476 +msgid "" +"The semantics of this API resemble :class:`~collections.namedtuple`. The " +"first argument of the call to :class:`Enum` is the name of the enumeration." +msgstr "" +"该 API 的语义类似于 :class:`~collections.namedtuple`。调用 :class:`Enum` 的第一个参数是枚举的名称。" + +#: ../../library/enum.rst:479 +msgid "" +"The second argument is the *source* of enumeration member names. It can be " +"a whitespace-separated string of names, a sequence of names, a sequence of " +"2-tuples with key/value pairs, or a mapping (e.g. dictionary) of names to " +"values. The last two options enable assigning arbitrary values to " +"enumerations; the others auto-assign increasing integers starting with 1 " +"(use the ``start`` parameter to specify a different starting value). A new " +"class derived from :class:`Enum` is returned. In other words, the above " +"assignment to :class:`Animal` is equivalent to::" +msgstr "" +"第二个参数是枚举成员名称的 *来源*。可以是个用空格分隔的名称字符串、名称序列、表示键/值对的二元组的序列,或者名称到值的映射(如字典)。 " +"最后两种可以为枚举赋任意值;其他类型则会自动赋成由 1 开始递增的整数值(利用 ``start`` 形参可指定为其他起始值)。返回值是一个派生自 " +":class:`Enum` 的新类。换句话说,上述对 :class:`Animal` 的赋值等价于::" + +#: ../../library/enum.rst:495 +msgid "" +"The reason for defaulting to ``1`` as the starting number and not ``0`` is " +"that ``0`` is ``False`` in a boolean sense, but enum members all evaluate to" +" ``True``." +msgstr "" +"默认以 ``1`` 而以 ``0`` 作为起始数值的原因在于 ``0`` 的布尔值为 ``False``,但所有枚举成员都应被求值为 ``True``。" + +#: ../../library/enum.rst:499 +msgid "" +"Pickling enums created with the functional API can be tricky as frame stack " +"implementation details are used to try and figure out which module the " +"enumeration is being created in (e.g. it will fail if you use a utility " +"function in separate module, and also may not work on IronPython or Jython)." +" The solution is to specify the module name explicitly as follows::" +msgstr "" +"对使用功能性 API " +"创建的枚举执行封存可能会很麻烦,因为要使用帧堆栈的实现细节来尝试并找出枚举是在哪个模块中创建的(例如当你使用了另一个模块中的工具函数就可能失败,在 " +"IronPython 或 Jython 上也可能无效)。 解决办法是显式地指定模块名称,如下所示::" + +#: ../../library/enum.rst:509 +msgid "" +"If ``module`` is not supplied, and Enum cannot determine what it is, the new" +" Enum members will not be unpicklable; to keep errors closer to the source, " +"pickling will be disabled." +msgstr "" +"如果未提供 ``module``,且 Enum 无法确定是哪个模块,新的 Enum 成员将不可被解封;为了让错误尽量靠近源头,封存将被禁用。" + +#: ../../library/enum.rst:513 +msgid "" +"The new pickle protocol 4 also, in some circumstances, relies on " +":attr:`~definition.__qualname__` being set to the location where pickle will" +" be able to find the class. For example, if the class was made available in" +" class SomeData in the global scope::" +msgstr "" +"新的 pickle 协议版本 4 在某些情况下同样依赖于 :attr:`~definition.__qualname__` 被设为特定位置以便 " +"pickle 能够找到相应的类。 例如,类是否存在于全局作用域的 SomeData 类中::" + +#: ../../library/enum.rst:520 +msgid "The complete signature is::" +msgstr "完整的签名为::" + +#: ../../library/enum.rst:0 +msgid "value" +msgstr "value" + +#: ../../library/enum.rst:524 +msgid "What the new Enum class will record as its name." +msgstr "将被新 Enum 类将记录为其名称的数据。" + +#: ../../library/enum.rst:0 +msgid "names" +msgstr "names" + +#: ../../library/enum.rst:526 +msgid "" +"The Enum members. This can be a whitespace or comma separated string " +"(values will start at 1 unless otherwise specified)::" +msgstr "Enum 的成员。 这可以是一个空格或逗号分隔的字符串 (起始值将为 1,除非另行指定)::" + +#: ../../library/enum.rst:531 +msgid "or an iterator of names::" +msgstr "或是一个名称的迭代器对象::" + +#: ../../library/enum.rst:535 +msgid "or an iterator of (name, value) pairs::" +msgstr "或是一个 (名称, 值) 对的迭代器对象::" + +#: ../../library/enum.rst:539 +msgid "or a mapping::" +msgstr "或是一个映射对象::" + +#: ../../library/enum.rst:0 +msgid "module" +msgstr "module" + +#: ../../library/enum.rst:543 +msgid "name of module where new Enum class can be found." +msgstr "新 Enum 类所在模块的名称。" + +#: ../../library/enum.rst:0 +msgid "qualname" +msgstr "qualname" + +#: ../../library/enum.rst:545 +msgid "where in module new Enum class can be found." +msgstr "新 Enum 类在模块中的具体位置。" + +#: ../../library/enum.rst:0 +msgid "type" +msgstr "type" + +#: ../../library/enum.rst:547 +msgid "type to mix in to new Enum class." +msgstr "要加入新 Enum 类的类型。" + +#: ../../library/enum.rst:0 +msgid "start" +msgstr "start" + +#: ../../library/enum.rst:549 +msgid "number to start counting at if only names are passed in." +msgstr "当只传入名称时要使用的起始数值。" + +#: ../../library/enum.rst:551 +msgid "The *start* parameter was added." +msgstr "增加了 *start* 形参。" + +#: ../../library/enum.rst:556 +msgid "Derived Enumerations" +msgstr "派生的枚举" + +#: ../../library/enum.rst:559 +msgid "IntEnum" +msgstr "IntEnum" + +#: ../../library/enum.rst:561 +msgid "" +"The first variation of :class:`Enum` that is provided is also a subclass of " +":class:`int`. Members of an :class:`IntEnum` can be compared to integers; " +"by extension, integer enumerations of different types can also be compared " +"to each other::" +msgstr "" +"所提供的第一个变种 :class:`Enum` 同时也是 :class:`int` 的一个子类。 :class:`IntEnum` " +"的成员可与整数进行比较;通过扩展,不同类型的整数枚举也可以相互进行比较::" + +#: ../../library/enum.rst:582 +msgid "" +"However, they still can't be compared to standard :class:`Enum` " +"enumerations::" +msgstr "不过,它们仍然不可与标准 :class:`Enum` 枚举进行比较::" + +#: ../../library/enum.rst:595 +msgid "" +":class:`IntEnum` values behave like integers in other ways you'd expect::" +msgstr ":class:`IntEnum` 值在其他方面的行为都如你预期的一样类似于整数::" + +#: ../../library/enum.rst:606 +msgid "IntFlag" +msgstr "IntFlag" + +#: ../../library/enum.rst:608 +msgid "" +"The next variation of :class:`Enum` provided, :class:`IntFlag`, is also " +"based on :class:`int`. The difference being :class:`IntFlag` members can be" +" combined using the bitwise operators (&, \\|, ^, ~) and the result is still" +" an :class:`IntFlag` member. However, as the name implies, :class:`IntFlag`" +" members also subclass :class:`int` and can be used wherever an :class:`int`" +" is used. Any operation on an :class:`IntFlag` member besides the bit-wise " +"operations will lose the :class:`IntFlag` membership." +msgstr "" +"所提供的下一个 :class:`Enum` 的变种 :class:`IntFlag` 同样是基于 :class:`int` 的,不同之处在于 " +":class:`IntFlag` 成员可使用按位运算符 (&, \\|, ^, ~) 进行组合且结果仍然为 :class:`IntFlag` 成员。 " +"如果,正如名称所表明的,:class:`IntFlag` 成员同时也是 :class:`int` 的子类,并能在任何使用 :class:`int` " +"的场合被使用。 :class:`IntFlag` 成员进行除按位运算以外的其他运算都将导致失去 :class:`IntFlag` 成员资格。" + +#: ../../library/enum.rst:618 +msgid "Sample :class:`IntFlag` class::" +msgstr "示例 :class:`IntFlag` 类::" + +#: ../../library/enum.rst:634 +msgid "It is also possible to name the combinations::" +msgstr "对于组合同样可以进行命名::" + +#: ../../library/enum.rst:646 +msgid "" +"Another important difference between :class:`IntFlag` and :class:`Enum` is " +"that if no flags are set (the value is 0), its boolean evaluation is " +":data:`False`::" +msgstr "" +":class:`IntFlag` 和 :class:`Enum` 的另一个重要区别在于如果没有设置任何旗标(值为 0),则其布尔值为 " +":data:`False`::" + +#: ../../library/enum.rst:654 +msgid "" +"Because :class:`IntFlag` members are also subclasses of :class:`int` they " +"can be combined with them::" +msgstr "由于 :class:`IntFlag` 成员同时也是 :class:`int` 的子类,因此它们可以相互组合::" + +#: ../../library/enum.rst:662 +msgid "Flag" +msgstr "标志位" + +#: ../../library/enum.rst:664 +msgid "" +"The last variation is :class:`Flag`. Like :class:`IntFlag`, :class:`Flag` " +"members can be combined using the bitwise operators (&, \\|, ^, ~). Unlike " +":class:`IntFlag`, they cannot be combined with, nor compared against, any " +"other :class:`Flag` enumeration, nor :class:`int`. While it is possible to " +"specify the values directly it is recommended to use :class:`auto` as the " +"value and let :class:`Flag` select an appropriate value." +msgstr "" +"最后一个变体是 :class:`Flag`。与 :class:`IntFlag` 类似,:class:`Flag` 成员可用按位运算符 (&, \\|," +" ^, ~) 组合。与 :class:`IntFlag` 不同的是,它们不可与其它 :class:`Flag` 枚举或 :class:`int` " +"进行组合或比较。 虽然可以直接指定值,但推荐使用 :class:`auto` 作为值来让 :class:`Flag` 选择适当的值。" + +#: ../../library/enum.rst:673 +msgid "" +"Like :class:`IntFlag`, if a combination of :class:`Flag` members results in " +"no flags being set, the boolean evaluation is :data:`False`::" +msgstr "" +"与 :class:`IntFlag` 类似,如果 :class:`Flag` 成员的某种组合导致没有设置任何旗标,则其布尔值为 " +":data:`False`::" + +#: ../../library/enum.rst:687 +msgid "" +"Individual flags should have values that are powers of two (1, 2, 4, 8, " +"...), while combinations of flags won't::" +msgstr "单个标志的值应当为二的乘方 (1, 2, 4, 8, ...),标志的组合则无此限制::" + +#: ../../library/enum.rst:699 +msgid "" +"Giving a name to the \"no flags set\" condition does not change its boolean " +"value::" +msgstr "对 \"no flags set\" 条件指定一个名称并不会改变其布尔值::" + +#: ../../library/enum.rst:715 +msgid "" +"For the majority of new code, :class:`Enum` and :class:`Flag` are strongly " +"recommended, since :class:`IntEnum` and :class:`IntFlag` break some semantic" +" promises of an enumeration (by being comparable to integers, and thus by " +"transitivity to other unrelated enumerations). :class:`IntEnum` and " +":class:`IntFlag` should be used only in cases where :class:`Enum` and " +":class:`Flag` will not do; for example, when integer constants are replaced " +"with enumerations, or for interoperability with other systems." +msgstr "" +"对于大多数新代码,强烈推荐使用 :class:`Enum` 和 :class:`Flag`,因为 :class:`IntEnum` 和 " +":class:`IntFlag` 打破了枚举的某些语义约定(例如可以同整数进行比较,并因而导致此行为被传递给其他无关的枚举)。 " +":class:`IntEnum` 和 :class:`IntFlag` 的使用应当仅限于 :class:`Enum` 和 :class:`Flag` " +"无法使用的场合;例如,当使用枚举替代整数常量时,或是与其他系统进行交互操作时。" + +#: ../../library/enum.rst:725 +msgid "Others" +msgstr "其他事项" + +#: ../../library/enum.rst:727 +msgid "" +"While :class:`IntEnum` is part of the :mod:`enum` module, it would be very " +"simple to implement independently::" +msgstr "虽然 :class:`IntEnum` 是 :mod:`enum` 模块的一部分,但要独立实现也应该相当容易::" + +#: ../../library/enum.rst:733 +msgid "" +"This demonstrates how similar derived enumerations can be defined; for " +"example a :class:`StrEnum` that mixes in :class:`str` instead of " +":class:`int`." +msgstr "" +"这里演示了如何定义类似的派生枚举;例如一个混合了 :class:`str` 而不是 :class:`int` 的 :class:`StrEnum`。" + +#: ../../library/enum.rst:736 +msgid "Some rules:" +msgstr "几条规则:" + +#: ../../library/enum.rst:738 +msgid "" +"When subclassing :class:`Enum`, mix-in types must appear before " +":class:`Enum` itself in the sequence of bases, as in the :class:`IntEnum` " +"example above." +msgstr "" +"当子类化 :class:`Enum` 时,在基类序列中的混合类型必须出现于 :class:`Enum` 本身之前,如以上 " +":class:`IntEnum` 的例子所示。" + +#: ../../library/enum.rst:741 +msgid "" +"While :class:`Enum` can have members of any type, once you mix in an " +"additional type, all the members must have values of that type, e.g. " +":class:`int` above. This restriction does not apply to mix-ins which only " +"add methods and don't specify another type." +msgstr "" +"虽然 :class:`Enum` 可以拥有任意类型的成员,不过一旦你混合了附加类型,则所有成员必须为相应类型的值,如在上面的例子中即为 " +":class:`int`。 此限制不适用于仅添加方法而未指定另一数据类型的混合类。" + +#: ../../library/enum.rst:745 +msgid "" +"When another data type is mixed in, the :attr:`value` attribute is *not the " +"same* as the enum member itself, although it is equivalent and will compare " +"equal." +msgstr "当混合了另一数据类型时,:attr:`value` 属性会 *不同于* 枚举成员自身,但它们仍保持等价且比较结果也相等。" + +#: ../../library/enum.rst:748 +msgid "" +"%-style formatting: `%s` and `%r` call the :class:`Enum` class's " +":meth:`__str__` and :meth:`__repr__` respectively; other codes (such as `%i`" +" or `%h` for IntEnum) treat the enum member as its mixed-in type." +msgstr "" +"%-style formatting: `%s` 和 `%r` 会分别调用 :class:`Enum` 类的 :meth:`__str__` 和 " +":meth:`__repr__`;其他代码 (例如表示 IntEnum 的 `%i` 或 `%h`) 会将枚举成员视为对应的混合类型。" + +#: ../../library/enum.rst:751 +msgid "" +":ref:`Formatted string literals `, :meth:`str.format`, and " +":func:`format` will use the mixed-in type's :meth:`__format__` unless " +":meth:`__str__` or :meth:`__format__` is overridden in the subclass, in " +"which case the overridden methods or :class:`Enum` methods will be used. Use" +" the !s and !r format codes to force usage of the :class:`Enum` class's " +":meth:`__str__` and :meth:`__repr__` methods." +msgstr "" +":ref:`格式化字符串字面值 `, :meth:`str.format` 和 :func:`format` 将使用混合类型的 " +":meth:`__format__` 除非在子类中重载了 :meth:`__str__` 或 " +":meth:`__format__`,在这种情况下将使用被重载的方法或 :class:`Enum` 的方法。 请使用 !s 和 !r 格式代码来强制使用" +" :class:`Enum` 类的 :meth:`__str__` 和 :meth:`__repr__` 方法。" + +#: ../../library/enum.rst:759 +msgid "When to use :meth:`__new__` vs. :meth:`__init__`" +msgstr "何时使用 :meth:`__new__` 与 :meth:`__init__`" + +#: ../../library/enum.rst:761 +msgid "" +":meth:`__new__` must be used whenever you want to customize the actual value" +" of the :class:`Enum` member. Any other modifications may go in either " +":meth:`__new__` or :meth:`__init__`, with :meth:`__init__` being preferred." +msgstr "" +"当你想要定制 :class:`Enum` 成员的实际值时必须使用 :meth:`__new__`。 任何其他修改可以用 :meth:`__new__` " +"也可以用 :meth:`__init__`,应优先使用 :meth:`__init__`。" + +#: ../../library/enum.rst:765 +msgid "" +"For example, if you want to pass several items to the constructor, but only " +"want one of them to be the value::" +msgstr "举例来说,如果你要向构造器传入多个条目,但只希望将其中一个作为值::" + +#: ../../library/enum.rst:791 +msgid "Interesting examples" +msgstr "有趣的示例" + +#: ../../library/enum.rst:793 +msgid "" +"While :class:`Enum`, :class:`IntEnum`, :class:`IntFlag`, and :class:`Flag` " +"are expected to cover the majority of use-cases, they cannot cover them all." +" Here are recipes for some different types of enumerations that can be used" +" directly, or as examples for creating one's own." +msgstr "" +"虽然 :class:`Enum`, :class:`IntEnum`, :class:`IntFlag` 和 :class:`Flag` " +"预期可覆盖大多数应用场景,但它们无法覆盖全部。 这里有一些不同类型枚举的方案,它们可以被直接使用,或是作为自行创建的参考示例。" + +#: ../../library/enum.rst:800 +msgid "Omitting values" +msgstr "省略值" + +#: ../../library/enum.rst:802 +msgid "" +"In many use-cases one doesn't care what the actual value of an enumeration " +"is. There are several ways to define this type of simple enumeration:" +msgstr "在许多应用场景中人们都不关心枚举的实际值是什么。 有几个方式可以定义此种类型的简单枚举:" + +#: ../../library/enum.rst:805 +msgid "use instances of :class:`auto` for the value" +msgstr "使用 :class:`auto` 的实例作为值" + +#: ../../library/enum.rst:806 +msgid "use instances of :class:`object` as the value" +msgstr "使用 :class:`object` 的实例作为值" + +#: ../../library/enum.rst:807 +msgid "use a descriptive string as the value" +msgstr "使用描述性的字符串作为值" + +#: ../../library/enum.rst:808 +msgid "" +"use a tuple as the value and a custom :meth:`__new__` to replace the tuple " +"with an :class:`int` value" +msgstr "使用元组作为值并用自定义的 :meth:`__new__` 以一个 :class:`int` 值来替代该元组" + +#: ../../library/enum.rst:811 +msgid "" +"Using any of these methods signifies to the user that these values are not " +"important, and also enables one to add, remove, or reorder members without " +"having to renumber the remaining members." +msgstr "使用以上任何一种方法均可向用户指明值并不重要,并且使人能够添加、移除或重排序成员而不必改变其余成员的数值。" + +#: ../../library/enum.rst:815 +msgid "" +"Whichever method you choose, you should provide a :meth:`repr` that also " +"hides the (unimportant) value::" +msgstr "无论你选择何种方法,你都应当提供一个 :meth:`repr` 并且它也需要隐藏(不重要的)值::" + +#: ../../library/enum.rst:825 +msgid "Using :class:`auto`" +msgstr "使用 :class:`auto`" + +#: ../../library/enum.rst:827 +msgid "Using :class:`auto` would look like::" +msgstr "使用 :class:`auto` 的形式如下::" + +#: ../../library/enum.rst:839 +msgid "Using :class:`object`" +msgstr "使用 :class:`object`" + +#: ../../library/enum.rst:841 +msgid "Using :class:`object` would look like::" +msgstr "使用 :class:`object` 的形式如下::" + +#: ../../library/enum.rst:853 +msgid "Using a descriptive string" +msgstr "使用描述性字符串" + +#: ../../library/enum.rst:855 +msgid "Using a string as the value would look like::" +msgstr "使用字符串作为值的形式如下::" + +#: ../../library/enum.rst:869 +msgid "Using a custom :meth:`__new__`" +msgstr "使用自定义的 :meth:`__new__`" + +#: ../../library/enum.rst:871 +msgid "Using an auto-numbering :meth:`__new__` would look like::" +msgstr "使用自动编号 :meth:`__new__` 的形式如下::" + +#: ../../library/enum.rst:890 +msgid "" +"To make a more general purpose ``AutoNumber``, add ``*args`` to the " +"signature::" +msgstr "要实现更通用的 ``AutoNumber``,请添加 ``*args`` 到签名中::" + +#: ../../library/enum.rst:900 +msgid "" +"Then when you inherit from ``AutoNumber`` you can write your own " +"``__init__`` to handle any extra arguments::" +msgstr "这样当你从 ``AutoNumber`` 继承时你将可以编写你自己的 ``__init__`` 来处理任何附加参数::" + +#: ../../library/enum.rst:919 +msgid "" +"The :meth:`__new__` method, if defined, is used during creation of the Enum " +"members; it is then replaced by Enum's :meth:`__new__` which is used after " +"class creation for lookup of existing members." +msgstr "" +"如果定义了 :meth:`__new__` 则它会在创建 Enum 成员期间被使用;随后它将被 Enum 的 :meth:`__new__` " +"所替换,该方法会在类创建后被用来查找现有成员。" + +#: ../../library/enum.rst:925 +msgid "OrderedEnum" +msgstr "OrderedEnum" + +#: ../../library/enum.rst:927 +msgid "" +"An ordered enumeration that is not based on :class:`IntEnum` and so " +"maintains the normal :class:`Enum` invariants (such as not being comparable " +"to other enumerations)::" +msgstr "" +"一个有序枚举,它不是基于 :class:`IntEnum`,因此保持了正常的 :class:`Enum` 不变特性(例如不可与其他枚举进行比较)::" + +#: ../../library/enum.rst:961 +msgid "DuplicateFreeEnum" +msgstr "DuplicateFreeEnum" + +#: ../../library/enum.rst:963 +msgid "" +"Raises an error if a duplicate member name is found instead of creating an " +"alias::" +msgstr "如果发现重复的成员名称则将引发错误而不是创建别名::" + +#: ../../library/enum.rst:988 +msgid "" +"This is a useful example for subclassing Enum to add or change other " +"behaviors as well as disallowing aliases. If the only desired change is " +"disallowing aliases, the :func:`unique` decorator can be used instead." +msgstr "" +"这个例子适用于子类化 Enum 来添加或改变禁用别名以及其他行为。 如果需要的改变只是禁用别名,也可以选择使用 :func:`unique` 装饰器。" + +#: ../../library/enum.rst:994 +msgid "Planet" +msgstr "Planet" + +#: ../../library/enum.rst:996 +msgid "" +"If :meth:`__new__` or :meth:`__init__` is defined the value of the enum " +"member will be passed to those methods::" +msgstr "如果定义了 :meth:`__new__` 或 :meth:`__init__` 则枚举成员的值将被传给这些方法::" + +#: ../../library/enum.rst:1024 +msgid "TimePeriod" +msgstr "TimePeriod" + +#: ../../library/enum.rst:1026 +msgid "An example to show the :attr:`_ignore_` attribute in use::" +msgstr "一个演示如何使用 :attr:`_ignore_` 属性的例子::" + +#: ../../library/enum.rst:1043 +msgid "How are Enums different?" +msgstr "各种枚举有何区别?" + +#: ../../library/enum.rst:1045 +msgid "" +"Enums have a custom metaclass that affects many aspects of both derived Enum" +" classes and their instances (members)." +msgstr "枚举具有自定义的元类,它会影响所派生枚举类及其实例(成员)的各个方面。" + +#: ../../library/enum.rst:1050 +msgid "Enum Classes" +msgstr "枚举类" + +#: ../../library/enum.rst:1052 +msgid "" +"The :class:`EnumMeta` metaclass is responsible for providing the " +":meth:`__contains__`, :meth:`__dir__`, :meth:`__iter__` and other methods " +"that allow one to do things with an :class:`Enum` class that fail on a " +"typical class, such as `list(Color)` or `some_enum_var in Color`. " +":class:`EnumMeta` is responsible for ensuring that various other methods on " +"the final :class:`Enum` class are correct (such as :meth:`__new__`, " +":meth:`__getnewargs__`, :meth:`__str__` and :meth:`__repr__`)." +msgstr "" +":class:`EnumMeta` 元类负责提供 :meth:`__contains__`, :meth:`__dir__`, " +":meth:`__iter__` 及其他方法以允许用户通过 :class:`Enum` 类来完成一般类做不到的事情,例如 `list(Color)` 或" +" `some_enum_var in Color`。 :class:`EnumMeta` 会负责确保最终 :class:`Enum` " +"类中的各种其他方法是正确的 (例如 :meth:`__new__`, :meth:`__getnewargs__`, :meth:`__str__` 和" +" :meth:`__repr__`)。" + +#: ../../library/enum.rst:1062 +msgid "Enum Members (aka instances)" +msgstr "枚举成员(即实例)" + +#: ../../library/enum.rst:1064 +msgid "" +"The most interesting thing about Enum members is that they are singletons. " +":class:`EnumMeta` creates them all while it is creating the :class:`Enum` " +"class itself, and then puts a custom :meth:`__new__` in place to ensure that" +" no new ones are ever instantiated by returning only the existing member " +"instances." +msgstr "" +"有关枚举成员最有趣的特点是它们都是单例对象。 :class:`EnumMeta` 会在创建 :class:`Enum` " +"类本身时将它们全部创建完成,然后准备好一个自定义的 :meth:`__new__`,通过只返回现有的成员实例来确保不会再实例化新的对象。" + +#: ../../library/enum.rst:1072 +msgid "Finer Points" +msgstr "细节要点" + +#: ../../library/enum.rst:1075 +msgid "Supported ``__dunder__`` names" +msgstr "支持的 ``__dunder__`` 名称" + +#: ../../library/enum.rst:1077 +msgid "" +":attr:`__members__` is a read-only ordered mapping of " +"``member_name``:``member`` items. It is only available on the class." +msgstr "" +":attr:`__members__` 是一个 ``member_name``:``member`` 条目的只读有序映射。 它只在类上可用。" + +#: ../../library/enum.rst:1080 +msgid "" +":meth:`__new__`, if specified, must create and return the enum members; it " +"is also a very good idea to set the member's :attr:`_value_` appropriately." +" Once all the members are created it is no longer used." +msgstr "" +"如果指定了 :meth:`__new__`,它必须创建并返回枚举成员;相应地设定成员的 :attr:`_value_` 也是一个很好的主意。 " +"一旦所有成员都创建完成它就不会再被使用。" + +#: ../../library/enum.rst:1086 +msgid "Supported ``_sunder_`` names" +msgstr "支持的 ``_sunder_`` 名称" + +#: ../../library/enum.rst:1088 +msgid "``_name_`` -- name of the member" +msgstr "``_name_`` -- 成员的名称" + +#: ../../library/enum.rst:1089 +msgid "" +"``_value_`` -- value of the member; can be set / modified in ``__new__``" +msgstr "``_value_`` -- 成员的值;可以在 ``__new__`` 中设置 / 修改" + +#: ../../library/enum.rst:1091 +msgid "" +"``_missing_`` -- a lookup function used when a value is not found; may be " +"overridden" +msgstr "``_missing_`` -- 当未发现某个值时所使用的查找函数;可被重写" + +#: ../../library/enum.rst:1093 +msgid "" +"``_ignore_`` -- a list of names, either as a :class:`list` or a " +":class:`str`, that will not be transformed into members, and will be removed" +" from the final class" +msgstr "" +"``_ignore_`` -- 一个名称列表,可以为 :class:`list` 或 :class:`str`,它不会被转化为成员,并将从最终类中被移除" + +#: ../../library/enum.rst:1096 +msgid "" +"``_order_`` -- used in Python 2/3 code to ensure member order is consistent " +"(class attribute, removed during class creation)" +msgstr "``_order_`` -- 用于 Python 2/3 代码以确保成员顺序一致(类属性,在类创建期间会被移除)" + +#: ../../library/enum.rst:1098 +msgid "" +"``_generate_next_value_`` -- used by the `Functional API`_ and by " +":class:`auto` to get an appropriate value for an enum member; may be " +"overridden" +msgstr "" +"``_generate_next_value_`` -- `Functional API`_ 和 :class:`auto` " +"用它为枚举成员获取适当的值;可被重写" + +#: ../../library/enum.rst:1102 +msgid "``_missing_``, ``_order_``, ``_generate_next_value_``" +msgstr "``_missing_``, ``_order_``, ``_generate_next_value_``" + +#: ../../library/enum.rst:1103 +msgid "``_ignore_``" +msgstr "``_ignore_``" + +#: ../../library/enum.rst:1105 +msgid "" +"To help keep Python 2 / Python 3 code in sync an :attr:`_order_` attribute " +"can be provided. It will be checked against the actual order of the " +"enumeration and raise an error if the two do not match::" +msgstr "" +"用来帮助 Python 2 / Python 3 代码保持同步提供 :attr:`_order_` 属性。 " +"它将与枚举的实际顺序进行对照检查,如果两者不匹配则会引发错误::" + +#: ../../library/enum.rst:1121 +msgid "" +"In Python 2 code the :attr:`_order_` attribute is necessary as definition " +"order is lost before it can be recorded." +msgstr "在 Python 2 代码中 :attr:`_order_` 属性是必须的,因为定义顺序在被记录之前就会丢失。" + +#: ../../library/enum.rst:1126 +msgid "_Private__names" +msgstr "_Private__names" + +#: ../../library/enum.rst:1128 +msgid "" +":ref:`Private names ` will be normal attributes in " +"Python 3.11 instead of either an error or a member (depending on if the name" +" ends with an underscore). Using these names in 3.9 and 3.10 will issue a " +":exc:`DeprecationWarning`." +msgstr "" + +#: ../../library/enum.rst:1134 +msgid "``Enum`` member type" +msgstr "``Enum`` 成员类型" + +#: ../../library/enum.rst:1136 +msgid "" +":class:`Enum` members are instances of their :class:`Enum` class, and are " +"normally accessed as ``EnumClass.member``. Under certain circumstances they" +" can also be accessed as ``EnumClass.member.member``, but you should never " +"do this as that lookup may fail or, worse, return something besides the " +":class:`Enum` member you are looking for (this is another good reason to use" +" all-uppercase names for members)::" +msgstr "" +":class:`Enum` 成员是其 :class:`Enum` 类的实例,一般通过 ``EnumClass.member`` 的形式来访问。 " +"在特定情况下它们也可通过 ``EnumClass.member.member`` " +"的形式来访问,但你绝对不应这样做,因为查找可能失败,或者更糟糕地返回你所查找的 :class:`Enum` " +"成员以外的对象(这也是成员应使用全大写名称的另一个好理由)::" + +#: ../../library/enum.rst:1155 +msgid "This behavior is deprecated and will be removed in 3.11." +msgstr "这一行为已被废弃,并将在 3.11 中被删除。" + +#: ../../library/enum.rst:1161 +msgid "Boolean value of ``Enum`` classes and members" +msgstr "``Enum`` 类和成员的布尔值" + +#: ../../library/enum.rst:1163 +msgid "" +":class:`Enum` members that are mixed with non-:class:`Enum` types (such as " +":class:`int`, :class:`str`, etc.) are evaluated according to the mixed-in " +"type's rules; otherwise, all members evaluate as :data:`True`. To make your" +" own Enum's boolean evaluation depend on the member's value add the " +"following to your class::" +msgstr "" +"混合了非 :class:`Enum` 类型(例如 :class:`int`, :class:`str` 等)的 :class:`Enum` " +"成员会按所混合类型的规则被求值;在其他情况下,所有成员都将被求值为 :data:`True`。 要使你的自定义 Enum " +"的布尔值取决于成员的值,请在你的类中添加以下代码::" + +#: ../../library/enum.rst:1172 +msgid ":class:`Enum` classes always evaluate as :data:`True`." +msgstr ":class:`Enum` 类总是会被求值为 :data:`True`。" + +#: ../../library/enum.rst:1176 +msgid "``Enum`` classes with methods" +msgstr "带有方法的 ``Enum`` 类" + +#: ../../library/enum.rst:1178 +msgid "" +"If you give your :class:`Enum` subclass extra methods, like the `Planet`_ " +"class above, those methods will show up in a :func:`dir` of the member, but " +"not of the class::" +msgstr "" +"如果你为你的 :class:`Enum` 子类添加了额外的方法,如同上述的 `Planet`_ 类一样,这些方法将在对成员执行 :func:`dir` " +"时显示出来,但对类执行时则不会显示::" + +#: ../../library/enum.rst:1189 +msgid "Combining members of ``Flag``" +msgstr "组合 ``Flag`` 的成员" + +#: ../../library/enum.rst:1191 +msgid "" +"If a combination of Flag members is not named, the :func:`repr` will include" +" all named flags and all named combinations of flags that are in the value::" +msgstr "如果 Flag 成员的某种组合未被命名,则 :func:`repr` 将包含所有已命名的标志和值中所有已命名的标志组合:" + +#: ../../library/enum.rst:1209 +msgid "" +"In 3.11 unnamed combinations of flags will only produce the canonical flag " +"members (aka single-value flags). So ``Color(7)`` would produce something " +"like ````." +msgstr "" diff --git a/library/errno.po b/library/errno.po new file mode 100644 index 000000000..f52857be3 --- /dev/null +++ b/library/errno.po @@ -0,0 +1,585 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) 2001-2022, Python Software Foundation +# This file is distributed under the same license as the Python package. +# FIRST AUTHOR , YEAR. +# +# Translators: +# Sean Chao , 2020 +# Freesand Leo , 2020 +# Alpha Du , 2022 +# +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: Python 3.9\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2022-11-04 14:34+0000\n" +"PO-Revision-Date: 2017-02-16 23:09+0000\n" +"Last-Translator: Alpha Du , 2022\n" +"Language-Team: Chinese (China) (https://www.transifex.com/python-doc/teams/5390/zh_CN/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: zh_CN\n" +"Plural-Forms: nplurals=1; plural=0;\n" + +#: ../../library/errno.rst:2 +msgid ":mod:`errno` --- Standard errno system symbols" +msgstr ":mod:`errno` --- 标准 errno 系统符号" + +#: ../../library/errno.rst:9 +msgid "" +"This module makes available standard ``errno`` system symbols. The value of " +"each symbol is the corresponding integer value. The names and descriptions " +"are borrowed from :file:`linux/include/errno.h`, which should be all-" +"inclusive." +msgstr "" +"该模块提供了标准的 ``errno`` 系统符号。每个符号的值都是相应的整数值。名称和描述借用自 " +":file:`linux/include/errno.h` ,它应该是全包含的。" + +#: ../../library/errno.rst:17 +msgid "" +"Dictionary providing a mapping from the errno value to the string name in " +"the underlying system. For instance, ``errno.errorcode[errno.EPERM]`` maps " +"to ``'EPERM'``." +msgstr "" +"提供从 errno 值到底层系统中字符串名称的映射的字典。例如, ``errno.errorcode[errno.EPERM]`` 映射为 " +"``'EPERM'`` 。" + +#: ../../library/errno.rst:21 +msgid "" +"To translate a numeric error code to an error message, use " +":func:`os.strerror`." +msgstr "如果要将数字的错误代码转换为错误信息,请使用 :func:`os.strerror`。" + +#: ../../library/errno.rst:23 +msgid "" +"Of the following list, symbols that are not used on the current platform are" +" not defined by the module. The specific list of defined symbols is " +"available as ``errno.errorcode.keys()``. Symbols available can include:" +msgstr "" +"在下面的列表中,当前平台上没有使用的符号没有被本模块定义。 已定义的符号的具体列表可参见 ``errno.errorcode.keys()``。 " +"可用的符号包括:" + +#: ../../library/errno.rst:30 +msgid "" +"Operation not permitted. This error is mapped to the exception " +":exc:`PermissionError`." +msgstr "操作不允许。这个错误被映射到异常 :exc:`PermissionError` 。" + +#: ../../library/errno.rst:36 +msgid "" +"No such file or directory. This error is mapped to the exception " +":exc:`FileNotFoundError`." +msgstr "没有这样的文件或目录。这个错误被映射到异常 :exc:`FileNotFoundError` 。" + +#: ../../library/errno.rst:42 +msgid "" +"No such process. This error is mapped to the exception " +":exc:`ProcessLookupError`." +msgstr "没有这样的进程。这个错误被映射到异常 :exc:`ProcessLookupError` 。" + +#: ../../library/errno.rst:48 +msgid "" +"Interrupted system call. This error is mapped to the exception " +":exc:`InterruptedError`." +msgstr "系统调用中断。这个错误被映射到异常 :exc:`InterruptedError` 。" + +#: ../../library/errno.rst:54 +msgid "I/O error" +msgstr "I/O 错误" + +#: ../../library/errno.rst:59 +msgid "No such device or address" +msgstr "无此设备或地址" + +#: ../../library/errno.rst:64 +msgid "Arg list too long" +msgstr "参数列表过长" + +#: ../../library/errno.rst:69 +msgid "Exec format error" +msgstr "执行格式错误" + +#: ../../library/errno.rst:74 +msgid "Bad file number" +msgstr "错误的文件号" + +#: ../../library/errno.rst:79 +msgid "" +"No child processes. This error is mapped to the exception " +":exc:`ChildProcessError`." +msgstr "没有子进程。这个错误被映射到异常 :exc:`ChildProcessError` 。" + +#: ../../library/errno.rst:85 +msgid "" +"Try again. This error is mapped to the exception :exc:`BlockingIOError`." +msgstr "再试一次。这个错误被映射到异常 :exc:`BlockingIOError` 。" + +#: ../../library/errno.rst:90 +msgid "Out of memory" +msgstr "内存不足" + +#: ../../library/errno.rst:95 +msgid "" +"Permission denied. This error is mapped to the exception " +":exc:`PermissionError`." +msgstr "权限被拒绝。 这个错误被映射到异常 :exc:`PermissionError` 。" + +#: ../../library/errno.rst:101 +msgid "Bad address" +msgstr "错误的地址" + +#: ../../library/errno.rst:106 +msgid "Block device required" +msgstr "需要块设备" + +#: ../../library/errno.rst:111 +msgid "Device or resource busy" +msgstr "设备或资源忙" + +#: ../../library/errno.rst:116 +msgid "" +"File exists. This error is mapped to the exception :exc:`FileExistsError`." +msgstr "文件存在。这个错误被映射到异常 :exc:`FileExistsError` 。" + +#: ../../library/errno.rst:122 +msgid "Cross-device link" +msgstr "跨设备链接" + +#: ../../library/errno.rst:127 +msgid "No such device" +msgstr "无此设备" + +#: ../../library/errno.rst:132 +msgid "" +"Not a directory. This error is mapped to the exception " +":exc:`NotADirectoryError`." +msgstr "不是一个目录。这个错误被映射到异常 :exc:`NotADirectoryError` 。" + +#: ../../library/errno.rst:138 +msgid "" +"Is a directory. This error is mapped to the exception " +":exc:`IsADirectoryError`." +msgstr "是一个目录。这个错误被映射到异常 :exc:`IsADirectoryError` 。" + +#: ../../library/errno.rst:144 +msgid "Invalid argument" +msgstr "无效的参数" + +#: ../../library/errno.rst:149 +msgid "File table overflow" +msgstr "文件表溢出" + +#: ../../library/errno.rst:154 +msgid "Too many open files" +msgstr "打开的文件过多" + +#: ../../library/errno.rst:159 +msgid "Not a typewriter" +msgstr "不是打字机" + +#: ../../library/errno.rst:164 +msgid "Text file busy" +msgstr "文本文件忙" + +#: ../../library/errno.rst:169 +msgid "File too large" +msgstr "文件过大" + +#: ../../library/errno.rst:174 +msgid "No space left on device" +msgstr "设备已无可用空间" + +#: ../../library/errno.rst:179 +msgid "Illegal seek" +msgstr "非法查找" + +#: ../../library/errno.rst:184 +msgid "Read-only file system" +msgstr "只读文件系统" + +#: ../../library/errno.rst:189 +msgid "Too many links" +msgstr "链接过多" + +#: ../../library/errno.rst:194 +msgid "" +"Broken pipe. This error is mapped to the exception :exc:`BrokenPipeError`." +msgstr "管道中断。这个错误被映射到异常 :exc:`BrokenPipeError` 。" + +#: ../../library/errno.rst:200 +msgid "Math argument out of domain of func" +msgstr "数学参数超出函数范围" + +#: ../../library/errno.rst:205 +msgid "Math result not representable" +msgstr "数学运算结果无法表示" + +#: ../../library/errno.rst:210 +msgid "Resource deadlock would occur" +msgstr "将发生资源死锁" + +#: ../../library/errno.rst:215 +msgid "File name too long" +msgstr "文件名过长" + +#: ../../library/errno.rst:220 +msgid "No record locks available" +msgstr "没有可用的记录锁" + +#: ../../library/errno.rst:225 +msgid "Function not implemented" +msgstr "功能未实现" + +#: ../../library/errno.rst:230 +msgid "Directory not empty" +msgstr "目录非空" + +#: ../../library/errno.rst:235 +msgid "Too many symbolic links encountered" +msgstr "遇到过多的符号链接" + +#: ../../library/errno.rst:240 +msgid "" +"Operation would block. This error is mapped to the exception " +":exc:`BlockingIOError`." +msgstr "操作会阻塞。这个错误被映射到异常 :exc:`BlockingIOError` 。" + +#: ../../library/errno.rst:246 +msgid "No message of desired type" +msgstr "没有所需类型的消息" + +#: ../../library/errno.rst:251 +msgid "Identifier removed" +msgstr "标识符被移除" + +#: ../../library/errno.rst:256 +msgid "Channel number out of range" +msgstr "信道编号超出范围" + +#: ../../library/errno.rst:261 +msgid "Level 2 not synchronized" +msgstr "级别 2 未同步" + +#: ../../library/errno.rst:266 +msgid "Level 3 halted" +msgstr "级别 3 已停止" + +#: ../../library/errno.rst:271 +msgid "Level 3 reset" +msgstr "级别 3 重置" + +#: ../../library/errno.rst:276 +msgid "Link number out of range" +msgstr "链接编号超出范围" + +#: ../../library/errno.rst:281 +msgid "Protocol driver not attached" +msgstr "未附加协议驱动" + +#: ../../library/errno.rst:286 +msgid "No CSI structure available" +msgstr "没有可用的 CSI 结构" + +#: ../../library/errno.rst:291 +msgid "Level 2 halted" +msgstr "级别 2 已停止" + +#: ../../library/errno.rst:296 +msgid "Invalid exchange" +msgstr "无效的交换" + +#: ../../library/errno.rst:301 +msgid "Invalid request descriptor" +msgstr "无效的请求描述符" + +#: ../../library/errno.rst:306 +msgid "Exchange full" +msgstr "交换已满" + +#: ../../library/errno.rst:311 +msgid "No anode" +msgstr "没有阳极" + +#: ../../library/errno.rst:316 +msgid "Invalid request code" +msgstr "无效的请求码·" + +#: ../../library/errno.rst:321 +msgid "Invalid slot" +msgstr "无效的槽位" + +#: ../../library/errno.rst:326 +msgid "File locking deadlock error" +msgstr "文件锁定死锁错误" + +#: ../../library/errno.rst:331 +msgid "Bad font file format" +msgstr "错误的字体文件格式" + +#: ../../library/errno.rst:336 +msgid "Device not a stream" +msgstr "设备不是流" + +#: ../../library/errno.rst:341 +msgid "No data available" +msgstr "没有可用的数据" + +#: ../../library/errno.rst:346 +msgid "Timer expired" +msgstr "计时器已到期" + +#: ../../library/errno.rst:351 +msgid "Out of streams resources" +msgstr "流资源不足" + +#: ../../library/errno.rst:356 +msgid "Machine is not on the network" +msgstr "机器不在网络上" + +#: ../../library/errno.rst:361 +msgid "Package not installed" +msgstr "包未安装" + +#: ../../library/errno.rst:366 +msgid "Object is remote" +msgstr "对象是远程的" + +#: ../../library/errno.rst:371 +msgid "Link has been severed" +msgstr "链接已被切断" + +#: ../../library/errno.rst:376 +msgid "Advertise error" +msgstr "广告错误" + +#: ../../library/errno.rst:381 +msgid "Srmount error" +msgstr "挂载错误" + +#: ../../library/errno.rst:386 +msgid "Communication error on send" +msgstr "发送时通讯错误" + +#: ../../library/errno.rst:391 +msgid "Protocol error" +msgstr "协议错误" + +#: ../../library/errno.rst:396 +msgid "Multihop attempted" +msgstr "已尝试多跳" + +#: ../../library/errno.rst:401 +msgid "RFS specific error" +msgstr "RFS 专属错误" + +#: ../../library/errno.rst:406 +msgid "Not a data message" +msgstr "非数据消息" + +#: ../../library/errno.rst:411 +msgid "Value too large for defined data type" +msgstr "值相对于已定义数据类型过大" + +#: ../../library/errno.rst:416 +msgid "Name not unique on network" +msgstr "名称在网络上不唯一" + +#: ../../library/errno.rst:421 +msgid "File descriptor in bad state" +msgstr "文件描述符处于错误状态" + +#: ../../library/errno.rst:426 +msgid "Remote address changed" +msgstr "远端地址已改变" + +#: ../../library/errno.rst:431 +msgid "Can not access a needed shared library" +msgstr "无法访问所需的共享库" + +#: ../../library/errno.rst:436 +msgid "Accessing a corrupted shared library" +msgstr "访问已损坏的共享库" + +#: ../../library/errno.rst:441 +msgid ".lib section in a.out corrupted" +msgstr "a.out 中的 .lib 部分已损坏" + +#: ../../library/errno.rst:446 +msgid "Attempting to link in too many shared libraries" +msgstr "尝试链接过多的共享库" + +#: ../../library/errno.rst:451 +msgid "Cannot exec a shared library directly" +msgstr "无法直接执行共享库" + +#: ../../library/errno.rst:456 +msgid "Illegal byte sequence" +msgstr "非法字节序列" + +#: ../../library/errno.rst:461 +msgid "Interrupted system call should be restarted" +msgstr "已中断系统调用需要重启" + +#: ../../library/errno.rst:466 +msgid "Streams pipe error" +msgstr "流管道错误" + +#: ../../library/errno.rst:471 +msgid "Too many users" +msgstr "用户过多" + +#: ../../library/errno.rst:476 +msgid "Socket operation on non-socket" +msgstr "在非套接字上执行套接字操作" + +#: ../../library/errno.rst:481 +msgid "Destination address required" +msgstr "需要目标地址" + +#: ../../library/errno.rst:486 +msgid "Message too long" +msgstr "消息过长" + +#: ../../library/errno.rst:491 +msgid "Protocol wrong type for socket" +msgstr "套接字的协议类型错误" + +#: ../../library/errno.rst:496 +msgid "Protocol not available" +msgstr "协议不可用" + +#: ../../library/errno.rst:501 +msgid "Protocol not supported" +msgstr "协议不受支持" + +#: ../../library/errno.rst:506 +msgid "Socket type not supported" +msgstr "套接字类型不受支持" + +#: ../../library/errno.rst:511 +msgid "Operation not supported on transport endpoint" +msgstr "操作在传输端点上不受支持" + +#: ../../library/errno.rst:516 +msgid "Protocol family not supported" +msgstr "协议族不受支持" + +#: ../../library/errno.rst:521 +msgid "Address family not supported by protocol" +msgstr "地址族不受协议支持" + +#: ../../library/errno.rst:526 +msgid "Address already in use" +msgstr "地址已被使用" + +#: ../../library/errno.rst:531 +msgid "Cannot assign requested address" +msgstr "无法分配要求的地址" + +#: ../../library/errno.rst:536 +msgid "Network is down" +msgstr "网络已断开" + +#: ../../library/errno.rst:541 +msgid "Network is unreachable" +msgstr "网络不可达" + +#: ../../library/errno.rst:546 +msgid "Network dropped connection because of reset" +msgstr "网络因重置而断开连接" + +#: ../../library/errno.rst:551 +msgid "" +"Software caused connection abort. This error is mapped to the exception " +":exc:`ConnectionAbortedError`." +msgstr "软件导致连接中止。这个错误被映射到异常 :exc:`ConnectionAbortedError` 。" + +#: ../../library/errno.rst:557 +msgid "" +"Connection reset by peer. This error is mapped to the exception " +":exc:`ConnectionResetError`." +msgstr "连接被对方重置。这个错误被映射到异常 :exc:`ConnectionResetError` 。" + +#: ../../library/errno.rst:563 +msgid "No buffer space available" +msgstr "没有可用的缓冲区空间" + +#: ../../library/errno.rst:568 +msgid "Transport endpoint is already connected" +msgstr "传输端点已连接" + +#: ../../library/errno.rst:573 +msgid "Transport endpoint is not connected" +msgstr "传输端点未连接" + +#: ../../library/errno.rst:578 +msgid "" +"Cannot send after transport endpoint shutdown. This error is mapped to the " +"exception :exc:`BrokenPipeError`." +msgstr "在传输端点关闭后无法发送。这个错误被映射到异常 :exc:`BrokenPipeError` 。" + +#: ../../library/errno.rst:584 +msgid "Too many references: cannot splice" +msgstr "引用过多:无法拼接" + +#: ../../library/errno.rst:589 +msgid "" +"Connection timed out. This error is mapped to the exception " +":exc:`TimeoutError`." +msgstr "连接超时。这个错误被映射到异常 :exc:`TimeoutError` 。" + +#: ../../library/errno.rst:595 +msgid "" +"Connection refused. This error is mapped to the exception " +":exc:`ConnectionRefusedError`." +msgstr "连接被拒绝。这个错误被映射到异常 :exc:`ConnectionRefusedError` 。" + +#: ../../library/errno.rst:601 +msgid "Host is down" +msgstr "主机已关闭" + +#: ../../library/errno.rst:606 +msgid "No route to host" +msgstr "没有到主机的路由" + +#: ../../library/errno.rst:611 +msgid "" +"Operation already in progress. This error is mapped to the exception " +":exc:`BlockingIOError`." +msgstr "操作已经在进行中。这个错误被映射到异常 :exc:`BlockingIOError` 。" + +#: ../../library/errno.rst:617 +msgid "" +"Operation now in progress. This error is mapped to the exception " +":exc:`BlockingIOError`." +msgstr "操作现在正在进行中。这个错误被映射到异常 :exc:`BlockingIOError` 。" + +#: ../../library/errno.rst:623 +msgid "Stale NFS file handle" +msgstr "过期的 NFS 文件句柄" + +#: ../../library/errno.rst:628 +msgid "Structure needs cleaning" +msgstr "结构需要清理" + +#: ../../library/errno.rst:633 +msgid "Not a XENIX named type file" +msgstr "不是 XENIX 命名类型文件" + +#: ../../library/errno.rst:638 +msgid "No XENIX semaphores available" +msgstr "没有可用的 XENIX 信标" + +#: ../../library/errno.rst:643 +msgid "Is a named type file" +msgstr "是命名类型文件" + +#: ../../library/errno.rst:648 +msgid "Remote I/O error" +msgstr "远程 I/O 错误" + +#: ../../library/errno.rst:653 +msgid "Quota exceeded" +msgstr "超出配额" diff --git a/library/exceptions.po b/library/exceptions.po new file mode 100644 index 000000000..6660ef485 --- /dev/null +++ b/library/exceptions.po @@ -0,0 +1,1081 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) 2001-2024, Python Software Foundation +# This file is distributed under the same license as the Python package. +# FIRST AUTHOR , YEAR. +# +# Translators: +# Alpha Du , 2019 +# Freesand Leo , 2022 +# Rafael Fontenelle , 2024 +# +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: Python 3.9\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2024-01-12 22:01+0000\n" +"PO-Revision-Date: 2017-02-16 23:10+0000\n" +"Last-Translator: Rafael Fontenelle , 2024\n" +"Language-Team: Chinese (China) (https://app.transifex.com/python-doc/teams/5390/zh_CN/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: zh_CN\n" +"Plural-Forms: nplurals=1; plural=0;\n" + +#: ../../library/exceptions.rst:4 +msgid "Built-in Exceptions" +msgstr "内置异常" + +#: ../../library/exceptions.rst:10 +msgid "" +"In Python, all exceptions must be instances of a class that derives from " +":class:`BaseException`. In a :keyword:`try` statement with an " +":keyword:`except` clause that mentions a particular class, that clause also " +"handles any exception classes derived from that class (but not exception " +"classes from which *it* is derived). Two exception classes that are not " +"related via subclassing are never equivalent, even if they have the same " +"name." +msgstr "" +"在 Python 中,所有异常必须为一个派生自 :class:`BaseException` 的类的实例。 在带有提及一个特定类的 " +":keyword:`except` 子句的 :keyword:`try` 语句中,该子句也会处理任何派生自该类的异常类(但不处理 *它* " +"所派生出的异常类)。 通过子类化创建的两个不相关异常类永远是不等效的,既使它们具有相同的名称。" + +#: ../../library/exceptions.rst:19 +msgid "" +"The built-in exceptions listed below can be generated by the interpreter or " +"built-in functions. Except where mentioned, they have an \"associated " +"value\" indicating the detailed cause of the error. This may be a string or" +" a tuple of several items of information (e.g., an error code and a string " +"explaining the code). The associated value is usually passed as arguments " +"to the exception class's constructor." +msgstr "" +"下面列出的内置异常可通过解释器或内置函数来生成。除非另有说明,它们都会具有一个提示导致错误详细原因的“关联值”。 " +"这可以是一个字符串或由多个信息项(例如一个错误码和一个解释错误的字符串)组成的元组。 关联值通常会作为参数被传递给异常类的构造器。" + +#: ../../library/exceptions.rst:26 +msgid "" +"User code can raise built-in exceptions. This can be used to test an " +"exception handler or to report an error condition \"just like\" the " +"situation in which the interpreter raises the same exception; but beware " +"that there is nothing to prevent user code from raising an inappropriate " +"error." +msgstr "" +"用户代码可以引发内置异常。 这可被用于测试异常处理程序或报告错误条件,“就像” " +"在解释器引发了相同异常的情况时一样;但是请注意,没有任何机制能防止用户代码引发不适当的错误。" + +#: ../../library/exceptions.rst:31 +msgid "" +"The built-in exception classes can be subclassed to define new exceptions; " +"programmers are encouraged to derive new exceptions from the " +":exc:`Exception` class or one of its subclasses, and not from " +":exc:`BaseException`. More information on defining exceptions is available " +"in the Python Tutorial under :ref:`tut-userexceptions`." +msgstr "" +"内置异常类可以被子类化以定义新的异常;鼓励程序员从 :exc:`Exception` 类或它的某个子类而不是从 :exc:`BaseException`" +" 来派生新的异常。 关于定义异常的更多信息可以在 Python 教程的 :ref:`tut-userexceptions` 部分查看。" + +#: ../../library/exceptions.rst:39 +msgid "Exception context" +msgstr "异常上下文" + +#: ../../library/exceptions.rst:41 +msgid "" +"When raising a new exception while another exception is already being " +"handled, the new exception's :attr:`__context__` attribute is automatically " +"set to the handled exception. An exception may be handled when an " +":keyword:`except` or :keyword:`finally` clause, or a :keyword:`with` " +"statement, is used." +msgstr "" +"当有其他异常已经被处理的情况下又引发一个新异常的时候,新异常的 :attr:`__context__` 属性会被自动设为已经被处理的异常。 " +"异常可以在使用了 :keyword:`except` 或 :keyword:`finally` 子句,或者 :keyword:`with` " +"语句的时候被处理。" + +#: ../../library/exceptions.rst:47 +msgid "" +"This implicit exception context can be supplemented with an explicit cause " +"by using :keyword:`!from` with :keyword:`raise`::" +msgstr "这个隐式异常上下文可以通过使用 :keyword:`!from` 配合 :keyword:`raise` 来补充一个显式的原因::" + +#: ../../library/exceptions.rst:53 +msgid "" +"The expression following :keyword:`from` must be an exception or " +"``None``. It will be set as :attr:`__cause__` on the raised exception. " +"Setting :attr:`__cause__` also implicitly sets the " +":attr:`__suppress_context__` attribute to ``True``, so that using ``raise " +"new_exc from None`` effectively replaces the old exception with the new one " +"for display purposes (e.g. converting :exc:`KeyError` to " +":exc:`AttributeError`), while leaving the old exception available in " +":attr:`__context__` for introspection when debugging." +msgstr "" +"跟在 :keyword:`from` 之后一表达式必须为一个异常或 ``None``。 它将在所引发的异常上被设置为 " +":attr:`__cause__`。 设置 :attr:`__cause__` 还会隐式地将 :attr:`__suppress_context__` " +"属性设为 ``True``,这样使用 ``raise new_exc from None`` 可以有效地将旧异常替换为新异常来显示其目的 (例如将 " +":exc:`KeyError` 转换为 :exc:`AttributeError`),同时让旧异常在 :attr:`__context__` " +"中保持可用状态以便在调试时进行内省。" + +#: ../../library/exceptions.rst:62 +msgid "" +"The default traceback display code shows these chained exceptions in " +"addition to the traceback for the exception itself. An explicitly chained " +"exception in :attr:`__cause__` is always shown when present. An implicitly " +"chained exception in :attr:`__context__` is shown only if :attr:`__cause__` " +"is :const:`None` and :attr:`__suppress_context__` is false." +msgstr "" +"除了异常本身的回溯以外,默认的回溯还会显示这些串连的异常。 :attr:`__cause__` 中的显式串连异常如果存在将总是显示。 " +":attr:`__context__` 中的隐式串连异常仅在 :attr:`__cause__` 为 :const:`None` 并且 " +":attr:`__suppress_context__` 为假值时显示。" + +#: ../../library/exceptions.rst:68 +msgid "" +"In either case, the exception itself is always shown after any chained " +"exceptions so that the final line of the traceback always shows the last " +"exception that was raised." +msgstr "不论在哪种情况下,异常本身总会在任何串连异常之后显示,以便回溯的最后一行总是显示所引发的最后一个异常。" + +#: ../../library/exceptions.rst:74 +msgid "Inheriting from built-in exceptions" +msgstr "从内置异常继承" + +#: ../../library/exceptions.rst:76 +msgid "" +"User code can create subclasses that inherit from an exception type. It's " +"recommended to only subclass one exception type at a time to avoid any " +"possible conflicts between how the bases handle the ``args`` attribute, as " +"well as due to possible memory layout incompatibilities." +msgstr "" +"用户代码可以创建继承自某个异常类型的子类。 建议每次仅子类化一个异常类型以避免多个基类处理 ``args`` " +"属性的不同方式,以及内存布局不兼容可能导致的冲突。" + +#: ../../library/exceptions.rst:83 +msgid "" +"Most built-in exceptions are implemented in C for efficiency, see: " +":source:`Objects/exceptions.c`. Some have custom memory layouts which makes" +" it impossible to create a subclass that inherits from multiple exception " +"types. The memory layout of a type is an implementation detail and might " +"change between Python versions, leading to new conflicts in the future. " +"Therefore, it's recommended to avoid subclassing multiple exception types " +"altogether." +msgstr "" +"大多数内置异常都用 C 实现以保证运行效率,参见: :source:`Objects/exceptions.c`。 " +"其中一些具有自定义内存布局,这使得创建继承自多个异常类型的子类成为不可能。 一个类型的内存布局属于实现细节并可能随着 Python " +"版本升级而改变,导致在未来可能产生新的冲突。 因此,建议完全避免子类化多个异常类型。" + +#: ../../library/exceptions.rst:93 +msgid "Base classes" +msgstr "基类" + +#: ../../library/exceptions.rst:95 +msgid "" +"The following exceptions are used mostly as base classes for other " +"exceptions." +msgstr "下列异常主要被用作其他异常的基类。" + +#: ../../library/exceptions.rst:99 +msgid "" +"The base class for all built-in exceptions. It is not meant to be directly " +"inherited by user-defined classes (for that, use :exc:`Exception`). If " +":func:`str` is called on an instance of this class, the representation of " +"the argument(s) to the instance are returned, or the empty string when there" +" were no arguments." +msgstr "" +"所有内置异常的基类。 它不应该被用户自定义类直接继承 (这种情况请使用 :exc:`Exception`)。 如果在此类的实例上调用 " +":func:`str`,则会返回实例的参数表示,或者当没有参数时返回空字符串。" + +#: ../../library/exceptions.rst:107 +msgid "" +"The tuple of arguments given to the exception constructor. Some built-in " +"exceptions (like :exc:`OSError`) expect a certain number of arguments and " +"assign a special meaning to the elements of this tuple, while others are " +"usually called only with a single string giving an error message." +msgstr "" +"传给异常构造器的参数元组。 某些内置异常 (例如 :exc:`OSError`) " +"接受特定数量的参数并赋予此元组中的元素特殊的含义,而其他异常通常只接受一个给出错误信息的单独字符串。" + +#: ../../library/exceptions.rst:114 +msgid "" +"This method sets *tb* as the new traceback for the exception and returns the" +" exception object. It is usually used in exception handling code like " +"this::" +msgstr "此方法将 *tb* 设为异常的新回溯信息并返回该异常对象。 它通常以如下的形式在异常处理程序中使用::" + +#: ../../library/exceptions.rst:127 +msgid "" +"All built-in, non-system-exiting exceptions are derived from this class. " +"All user-defined exceptions should also be derived from this class." +msgstr "所有内置的非系统退出类异常都派生自此类。 所有用户自定义异常也应当派生自此类。" + +#: ../../library/exceptions.rst:133 +msgid "" +"The base class for those built-in exceptions that are raised for various " +"arithmetic errors: :exc:`OverflowError`, :exc:`ZeroDivisionError`, " +":exc:`FloatingPointError`." +msgstr "" +"此基类用于派生针对各种算术类错误而引发的内置异常: :exc:`OverflowError`, :exc:`ZeroDivisionError`, " +":exc:`FloatingPointError`。" + +#: ../../library/exceptions.rst:140 +msgid "" +"Raised when a :ref:`buffer ` related operation cannot be " +"performed." +msgstr "当与 :ref:`缓冲区 ` 相关的操作无法执行时将被引发。" + +#: ../../library/exceptions.rst:146 +msgid "" +"The base class for the exceptions that are raised when a key or index used " +"on a mapping or sequence is invalid: :exc:`IndexError`, :exc:`KeyError`. " +"This can be raised directly by :func:`codecs.lookup`." +msgstr "" +"此基类用于派生当映射或序列所使用的键或索引无效时引发的异常: :exc:`IndexError`, :exc:`KeyError`。 这可以通过 " +":func:`codecs.lookup` 来直接引发。" + +#: ../../library/exceptions.rst:152 +msgid "Concrete exceptions" +msgstr "具体异常" + +#: ../../library/exceptions.rst:154 +msgid "The following exceptions are the exceptions that are usually raised." +msgstr "以下异常属于经常被引发的异常。" + +#: ../../library/exceptions.rst:160 +msgid "Raised when an :keyword:`assert` statement fails." +msgstr "当 :keyword:`assert` 语句失败时将被引发。" + +#: ../../library/exceptions.rst:165 +msgid "" +"Raised when an attribute reference (see :ref:`attribute-references`) or " +"assignment fails. (When an object does not support attribute references or " +"attribute assignments at all, :exc:`TypeError` is raised.)" +msgstr "" +"当属性引用 (参见 :ref:`attribute-references`) 或赋值失败时将被引发。 (当一个对象根本不支持属性引用或属性赋值时则将引发" +" :exc:`TypeError`。)" + +#: ../../library/exceptions.rst:172 +msgid "" +"Raised when the :func:`input` function hits an end-of-file condition (EOF) " +"without reading any data. (N.B.: the :meth:`io.IOBase.read` and " +":meth:`io.IOBase.readline` methods return an empty string when they hit " +"EOF.)" +msgstr "" +"当 :func:`input` 函数未读取任何数据即达到文件结束条件 (EOF) 时将被引发。 (另外,:meth:`io.IOBase.read` 和" +" :meth:`io.IOBase.readline` 方法在遇到 EOF 则将返回一个空字符串。)" + +#: ../../library/exceptions.rst:179 +msgid "Not currently used." +msgstr "目前未被使用。" + +#: ../../library/exceptions.rst:184 +msgid "" +"Raised when a :term:`generator` or :term:`coroutine` is closed; see " +":meth:`generator.close` and :meth:`coroutine.close`. It directly inherits " +"from :exc:`BaseException` instead of :exc:`Exception` since it is " +"technically not an error." +msgstr "" +"当一个 :term:`generator` 或 :term:`coroutine` 被关闭时将被引发;参见 " +":meth:`generator.close` 和 :meth:`coroutine.close`。 它直接继承自 " +":exc:`BaseException` 而不是 :exc:`Exception`,因为从技术上来说它并不是一个错误。" + +#: ../../library/exceptions.rst:192 +msgid "" +"Raised when the :keyword:`import` statement has troubles trying to load a " +"module. Also raised when the \"from list\" in ``from ... import`` has a " +"name that cannot be found." +msgstr "" +"当 :keyword:`import` 语句尝试加载模块遇到麻烦时将被引发。 并且当 ``from ... import`` 中的 \"from " +"list\" 存在无法找到的名称时也会被引发。" + +#: ../../library/exceptions.rst:196 +msgid "" +"The :attr:`name` and :attr:`path` attributes can be set using keyword-only " +"arguments to the constructor. When set they represent the name of the module" +" that was attempted to be imported and the path to any file which triggered " +"the exception, respectively." +msgstr "" +":attr:`name` 与 :attr:`path` 属性可通过对构造器使用仅关键字参数来设定。 " +"设定后它们将分别表示被尝试导入的模块名称与触发异常的任意文件所在路径。" + +#: ../../library/exceptions.rst:201 +msgid "Added the :attr:`name` and :attr:`path` attributes." +msgstr "添加了 :attr:`name` 与 :attr:`path` 属性。" + +#: ../../library/exceptions.rst:206 +msgid "" +"A subclass of :exc:`ImportError` which is raised by :keyword:`import` when a" +" module could not be located. It is also raised when ``None`` is found in " +":data:`sys.modules`." +msgstr "" +":exc:`ImportError` 的子类,当一个模块无法被定位时将由 :keyword:`import` 引发。 当在 " +":data:`sys.modules` 中找到 ``None`` 时也会被引发。" + +#: ../../library/exceptions.rst:215 +msgid "" +"Raised when a sequence subscript is out of range. (Slice indices are " +"silently truncated to fall in the allowed range; if an index is not an " +"integer, :exc:`TypeError` is raised.)" +msgstr "当序列抽取超出范围时将被引发。 (切片索引会被静默截短到允许的范围;如果指定索引不是整数则 :exc:`TypeError` 会被引发。)" + +#: ../../library/exceptions.rst:224 +msgid "" +"Raised when a mapping (dictionary) key is not found in the set of existing " +"keys." +msgstr "当在现有键集合中找不到指定的映射(字典)键时将被引发。" + +#: ../../library/exceptions.rst:231 +msgid "" +"Raised when the user hits the interrupt key (normally :kbd:`Control-C` or " +":kbd:`Delete`). During execution, a check for interrupts is made regularly." +" The exception inherits from :exc:`BaseException` so as to not be " +"accidentally caught by code that catches :exc:`Exception` and thus prevent " +"the interpreter from exiting." +msgstr "" +"当用户按下中断键 (通常为 :kbd:`Control-C` 或 :kbd:`Delete`) 时将被引发。 在执行期间,会定期检测中断信号。 " +"该异常继承自 :exc:`BaseException` 以确保不会被处理 :exc:`Exception` 的代码意外捕获,这样可以避免退出解释器。" + +#: ../../library/exceptions.rst:239 +msgid "" +"Catching a :exc:`KeyboardInterrupt` requires special consideration. Because " +"it can be raised at unpredictable points, it may, in some circumstances, " +"leave the running program in an inconsistent state. It is generally best to " +"allow :exc:`KeyboardInterrupt` to end the program as quickly as possible or " +"avoid raising it entirely. (See :ref:`handlers-and-exceptions`.)" +msgstr "" +"捕获 :exc:`KeyboardInterrupt` 需要特别考虑。 " +"因为它可能会在不可预知的点位被引发,在某些情况下,它可能使运行中的程序陷入不一致的状态。 通常最好是让 :exc:`KeyboardInterrupt`" +" 尽快结束程序或者完全避免引发它。 (参见 :ref:`handlers-and-exceptions`。)" + +#: ../../library/exceptions.rst:249 +msgid "" +"Raised when an operation runs out of memory but the situation may still be " +"rescued (by deleting some objects). The associated value is a string " +"indicating what kind of (internal) operation ran out of memory. Note that " +"because of the underlying memory management architecture (C's " +":c:func:`malloc` function), the interpreter may not always be able to " +"completely recover from this situation; it nevertheless raises an exception " +"so that a stack traceback can be printed, in case a run-away program was the" +" cause." +msgstr "" +"当一个操作耗尽内存但情况仍可(通过删除一些对象)进行挽救时将被引发。 关联的值是一个字符串,指明是哪种(内部)操作耗尽了内存。 " +"请注意由于底层的内存管理架构(C 的 :c:func:`malloc` " +"函数),解释器也许并不总是能够从这种情况下完全恢复;但它毕竟可以引发一个异常,这样就能打印出栈回溯信息,以便找出导致问题的失控程序。" + +#: ../../library/exceptions.rst:260 +msgid "" +"Raised when a local or global name is not found. This applies only to " +"unqualified names. The associated value is an error message that includes " +"the name that could not be found." +msgstr "当某个局部或全局名称未找到时将被引发。 此异常仅用于非限定名称。 关联的值是一条错误信息,其中包含未找到的名称。" + +#: ../../library/exceptions.rst:267 +msgid "" +"This exception is derived from :exc:`RuntimeError`. In user defined base " +"classes, abstract methods should raise this exception when they require " +"derived classes to override the method, or while the class is being " +"developed to indicate that the real implementation still needs to be added." +msgstr "" +"此异常派生自 :exc:`RuntimeError`。 " +"在用户自定义的基类中,抽象方法应当在其要求所派生类重写该方法,或是在其要求所开发的类提示具体实现尚待添加时引发此异常。" + +#: ../../library/exceptions.rst:274 +msgid "" +"It should not be used to indicate that an operator or method is not meant to" +" be supported at all -- in that case either leave the operator / method " +"undefined or, if a subclass, set it to :data:`None`." +msgstr "" +"它不应当用来表示一个运算符或方法根本不能被支持 -- 在此情况下应当让特定运算符 / 方法保持未定义,或者在子类中将其设为 :data:`None`。" + +#: ../../library/exceptions.rst:280 +msgid "" +"``NotImplementedError`` and ``NotImplemented`` are not interchangeable, even" +" though they have similar names and purposes. See :data:`NotImplemented` " +"for details on when to use it." +msgstr "" +"``NotImplementedError`` 和 ``NotImplemented`` 不可互换,即使它们有相似的名称和用途。 请参阅 " +":data:`NotImplemented` 了解有关何时使用它们的详细说明。" + +#: ../../library/exceptions.rst:289 +msgid "" +"This exception is raised when a system function returns a system-related " +"error, including I/O failures such as \"file not found\" or \"disk full\" " +"(not for illegal argument types or other incidental errors)." +msgstr "" +"此异常在一个系统函数返回系统相关的错误时将被引发,此类错误包括 I/O 操作失败例如 \"文件未找到\" 或 \"磁盘已满\" " +"等(不包括非法参数类型或其他偶然性错误)。" + +#: ../../library/exceptions.rst:293 +msgid "" +"The second form of the constructor sets the corresponding attributes, " +"described below. The attributes default to :const:`None` if not specified." +" For backwards compatibility, if three arguments are passed, the " +":attr:`~BaseException.args` attribute contains only a 2-tuple of the first " +"two constructor arguments." +msgstr "" +"构造器的第二种形式可设置如下所述的相应属性。 如果未指定这些属性则默认为 :const:`None`。 为了能向下兼容,如果传入了三个参数,则 " +":attr:`~BaseException.args` 属性将仅包含由前两个构造器参数组成的 2 元组。" + +#: ../../library/exceptions.rst:299 +msgid "" +"The constructor often actually returns a subclass of :exc:`OSError`, as " +"described in `OS exceptions`_ below. The particular subclass depends on the" +" final :attr:`.errno` value. This behaviour only occurs when constructing " +":exc:`OSError` directly or via an alias, and is not inherited when " +"subclassing." +msgstr "" +"构造器实际返回的往往是 :exc:`OSError` 的某个子类,如下文 `OS exceptions`_ 中所描述的。 具体的子类取决于最终的 " +":attr:`.errno` 值。 此行为仅在直接或通过别名来构造 :exc:`OSError` 时发生,并且在子类化时不会被继承。" + +#: ../../library/exceptions.rst:307 +msgid "A numeric error code from the C variable :c:data:`errno`." +msgstr "来自于 C 变量 :c:data:`errno` 的数字错误码。" + +#: ../../library/exceptions.rst:311 +msgid "" +"Under Windows, this gives you the native Windows error code. The " +":attr:`.errno` attribute is then an approximate translation, in POSIX terms," +" of that native error code." +msgstr "" +"在 Windows 下,此参数将给出原生的 Windows 错误码。 而 :attr:`.errno` 属性将是该原生错误码在 POSIX " +"平台下的近似转换形式。" + +#: ../../library/exceptions.rst:315 +msgid "" +"Under Windows, if the *winerror* constructor argument is an integer, the " +":attr:`.errno` attribute is determined from the Windows error code, and the " +"*errno* argument is ignored. On other platforms, the *winerror* argument is" +" ignored, and the :attr:`winerror` attribute does not exist." +msgstr "" +"在 Windows 下,如果 *winerror* 构造器参数是一个整数,则 :attr:`.errno` 属性会根据 Windows 错误码来确定,而" +" *errno* 参数会被忽略。 在其他平台上,*winerror* 参数会被忽略,并且 :attr:`winerror` 属性将不存在。" + +#: ../../library/exceptions.rst:323 +msgid "" +"The corresponding error message, as provided by the operating system. It is" +" formatted by the C functions :c:func:`perror` under POSIX, and " +":c:func:`FormatMessage` under Windows." +msgstr "" +"操作系统所提供的相应错误信息。 它在 POSIX 平台中由 C 函数 :c:func:`perror` 来格式化,在 Windows 中则是由 " +":c:func:`FormatMessage`。" + +#: ../../library/exceptions.rst:331 +msgid "" +"For exceptions that involve a file system path (such as :func:`open` or " +":func:`os.unlink`), :attr:`filename` is the file name passed to the " +"function. For functions that involve two file system paths (such as " +":func:`os.rename`), :attr:`filename2` corresponds to the second file name " +"passed to the function." +msgstr "" +"对于与文件系统路径有关 (例如 :func:`open` 或 :func:`os.unlink`) 的异常,:attr:`filename` " +"是传给函数的文件名。 对于涉及两个文件系统路径的函数 (例如 :func:`os.rename`),:attr:`filename2` " +"将是传给函数的第二个文件名。" + +#: ../../library/exceptions.rst:338 +msgid "" +":exc:`EnvironmentError`, :exc:`IOError`, :exc:`WindowsError`, " +":exc:`socket.error`, :exc:`select.error` and :exc:`mmap.error` have been " +"merged into :exc:`OSError`, and the constructor may return a subclass." +msgstr "" +":exc:`EnvironmentError`, :exc:`IOError`, :exc:`WindowsError`, " +":exc:`socket.error`, :exc:`select.error` 与 :exc:`mmap.error` 已被合并到 " +":exc:`OSError`,构造器可能返回其中一个子类。" + +#: ../../library/exceptions.rst:344 +msgid "" +"The :attr:`filename` attribute is now the original file name passed to the " +"function, instead of the name encoded to or decoded from the filesystem " +"encoding. Also, the *filename2* constructor argument and attribute was " +"added." +msgstr "" +":attr:`filename` 属性现在将是传给函数的原始文件名,而不是经过编码或基于文件系统编码进行解码之后的名称。 此外还添加了 " +"*filename2* 构造器参数和属性。" + +#: ../../library/exceptions.rst:353 +msgid "" +"Raised when the result of an arithmetic operation is too large to be " +"represented. This cannot occur for integers (which would rather raise " +":exc:`MemoryError` than give up). However, for historical reasons, " +"OverflowError is sometimes raised for integers that are outside a required " +"range. Because of the lack of standardization of floating point exception " +"handling in C, most floating point operations are not checked." +msgstr "" +"当算术运算的结果大到无法表示时将被引发。 这对整数来说不可能发生(宁可引发 :exc:`MemoryError` 也不会放弃尝试)。 " +"但是出于历史原因,有时也会在整数超出要求范围的情况下引发 OverflowError。 因为在 C " +"中缺少对浮点异常处理的标准化,大多数浮点运算都不会做检查。" + +#: ../../library/exceptions.rst:363 +msgid "" +"This exception is derived from :exc:`RuntimeError`. It is raised when the " +"interpreter detects that the maximum recursion depth (see " +":func:`sys.getrecursionlimit`) is exceeded." +msgstr "" +"此异常派生自 :exc:`RuntimeError`。 它会在解释器检测发现超过最大递归深度 (参见 " +":func:`sys.getrecursionlimit`) 时被引发。" + +#: ../../library/exceptions.rst:367 +msgid "Previously, a plain :exc:`RuntimeError` was raised." +msgstr "在此之前将只引发 :exc:`RuntimeError`。" + +#: ../../library/exceptions.rst:373 +msgid "" +"This exception is raised when a weak reference proxy, created by the " +":func:`weakref.proxy` function, is used to access an attribute of the " +"referent after it has been garbage collected. For more information on weak " +"references, see the :mod:`weakref` module." +msgstr "" +"此异常将在使用 :func:`weakref.proxy` 函数所创建的弱引用来访问该引用的某个已被作为垃圾回收的属性时被引发。 " +"有关弱引用的更多信息请参阅 :mod:`weakref` 模块。" + +#: ../../library/exceptions.rst:381 +msgid "" +"Raised when an error is detected that doesn't fall in any of the other " +"categories. The associated value is a string indicating what precisely went" +" wrong." +msgstr "当检测到一个不归属于任何其他类别的错误时将被引发。 关联的值是一个指明究竟发生了什么问题的字符串。" + +#: ../../library/exceptions.rst:388 +msgid "" +"Raised by built-in function :func:`next` and an :term:`iterator`\\'s " +":meth:`~iterator.__next__` method to signal that there are no further items " +"produced by the iterator." +msgstr "" +"由内置函数 :func:`next` 和 :term:`iterator` 的 :meth:`~iterator.__next__` " +"方法所引发,用来表示该迭代器不能产生下一项。" + +#: ../../library/exceptions.rst:392 +msgid "" +"The exception object has a single attribute :attr:`value`, which is given as" +" an argument when constructing the exception, and defaults to :const:`None`." +msgstr "该异常对象只有一个属性 :attr:`value`,它在构造该异常时作为参数给出,默认值为 :const:`None`。" + +#: ../../library/exceptions.rst:396 +msgid "" +"When a :term:`generator` or :term:`coroutine` function returns, a new " +":exc:`StopIteration` instance is raised, and the value returned by the " +"function is used as the :attr:`value` parameter to the constructor of the " +"exception." +msgstr "" +"当一个 :term:`generator` 或 :term:`coroutine` 函数返回时,将引发一个新的 :exc:`StopIteration`" +" 实例,函数返回的值将被用作异常构造器的 :attr:`value` 形参。" + +#: ../../library/exceptions.rst:401 +msgid "" +"If a generator code directly or indirectly raises :exc:`StopIteration`, it " +"is converted into a :exc:`RuntimeError` (retaining the :exc:`StopIteration` " +"as the new exception's cause)." +msgstr "" +"如果某个生成器代码直接或间接地引发了 :exc:`StopIteration`,它会被转换为 :exc:`RuntimeError` (并将 " +":exc:`StopIteration` 保留为导致新异常的原因)。" + +#: ../../library/exceptions.rst:405 +msgid "" +"Added ``value`` attribute and the ability for generator functions to use it " +"to return a value." +msgstr "添加了 ``value`` 属性及其被生成器函数用作返回值的功能。" + +#: ../../library/exceptions.rst:409 +msgid "" +"Introduced the RuntimeError transformation via ``from __future__ import " +"generator_stop``, see :pep:`479`." +msgstr "" +"引入了通过 ``from __future__ import generator_stop`` 来实现 RuntimeError 转换,参见 " +":pep:`479`。" + +#: ../../library/exceptions.rst:413 +msgid "" +"Enable :pep:`479` for all code by default: a :exc:`StopIteration` error " +"raised in a generator is transformed into a :exc:`RuntimeError`." +msgstr "" +"默认对所有代码启用 :pep:`479`: 在生成器中引发的 :exc:`StopIteration` 错误将被转换为 " +":exc:`RuntimeError`。" + +#: ../../library/exceptions.rst:419 +msgid "" +"Must be raised by :meth:`__anext__` method of an :term:`asynchronous " +"iterator` object to stop the iteration." +msgstr "" +"必须由一个 :term:`asynchronous iterator` 对象的 :meth:`__anext__` 方法来引发以停止迭代操作。" + +#: ../../library/exceptions.rst:426 +msgid "" +"Raised when the parser encounters a syntax error. This may occur in an " +":keyword:`import` statement, in a call to the built-in functions " +":func:`compile`, :func:`exec`, or :func:`eval`, or when reading the initial " +"script or standard input (also interactively)." +msgstr "" +"当解析器遇到语法错误时引发。 这可以发生在 :keyword:`import` 语句,对内置函数 :func:`compile`, " +":func:`exec` 或 :func:`eval` 的调用,或是读取原始脚本或标准输入(也包括交互模式)的时候。" + +#: ../../library/exceptions.rst:432 +msgid "" +"The :func:`str` of the exception instance returns only the error message. " +"Details is a tuple whose members are also available as separate attributes." +msgstr "异常实例的 :func:`str` 只返回错误消息。 错误详情为一个元组,其成员也可在单独的属性中分别获取。" + +#: ../../library/exceptions.rst:437 +msgid "The name of the file the syntax error occurred in." +msgstr "发生语法错误所在文件的名称。" + +#: ../../library/exceptions.rst:441 +msgid "" +"Which line number in the file the error occurred in. This is 1-indexed: the " +"first line in the file has a ``lineno`` of 1." +msgstr "发生错误所在文件中的行号。 行号索引从 1 开始:文件中首行的 ``lineno`` 为 1。" + +#: ../../library/exceptions.rst:446 +msgid "" +"The column in the line where the error occurred. This is 1-indexed: the " +"first character in the line has an ``offset`` of 1." +msgstr "发生错误所在文件中的列号。 列号索引从 1 开始:行中首个字符的 ``offset`` 为 1。" + +#: ../../library/exceptions.rst:451 +msgid "The source code text involved in the error." +msgstr "错误所涉及的源代码文本。" + +#: ../../library/exceptions.rst:453 +msgid "" +"For errors in f-string fields, the message is prefixed by \"f-string: \" and" +" the offsets are offsets in a text constructed from the replacement " +"expression. For example, compiling f'Bad {a b} field' results in this args " +"attribute: ('f-string: ...', ('', 1, 4, '(a b)\\n'))." +msgstr "" +"对于 f-字符串字段中的错误,消息会带有 \"f-string: \" 前缀并且其位置是基于替换表达式构建的文本中的位置。 例如,编译 f'Bad {a" +" b} field' 将产生以下 args 属性: ('f-string: ...', ('', 1, 4, '(a b)\\n'))。" + +#: ../../library/exceptions.rst:461 +msgid "" +"Base class for syntax errors related to incorrect indentation. This is a " +"subclass of :exc:`SyntaxError`." +msgstr "与不正确的缩进相关的语法错误的基类。 这是 :exc:`SyntaxError` 的一个子类。" + +#: ../../library/exceptions.rst:467 +msgid "" +"Raised when indentation contains an inconsistent use of tabs and spaces. " +"This is a subclass of :exc:`IndentationError`." +msgstr "当缩进包含对制表符和空格符不一致的使用时将被引发。 这是 :exc:`IndentationError` 的一个子类。" + +#: ../../library/exceptions.rst:473 +msgid "" +"Raised when the interpreter finds an internal error, but the situation does " +"not look so serious to cause it to abandon all hope. The associated value is" +" a string indicating what went wrong (in low-level terms)." +msgstr "当解释器发现内部错误,但情况看起来尚未严重到要放弃所有希望时将被引发。 关联的值是一个指明发生了什么问题的字符串(表示为低层级的符号)。" + +#: ../../library/exceptions.rst:477 +msgid "" +"You should report this to the author or maintainer of your Python " +"interpreter. Be sure to report the version of the Python interpreter " +"(``sys.version``; it is also printed at the start of an interactive Python " +"session), the exact error message (the exception's associated value) and if " +"possible the source of the program that triggered the error." +msgstr "" +"你应当将此问题报告给你所用 Python 解释器的作者或维护人员。 请确认报告 Python 解释器的版本号 (``sys.version``; " +"它也会在交互式 Python 会话开始时被打印出来),具体的错误消息(异常所关联的值)以及可能触发该错误的程序源码。" + +#: ../../library/exceptions.rst:486 +msgid "" +"This exception is raised by the :func:`sys.exit` function. It inherits from" +" :exc:`BaseException` instead of :exc:`Exception` so that it is not " +"accidentally caught by code that catches :exc:`Exception`. This allows the " +"exception to properly propagate up and cause the interpreter to exit. When " +"it is not handled, the Python interpreter exits; no stack traceback is " +"printed. The constructor accepts the same optional argument passed to " +":func:`sys.exit`. If the value is an integer, it specifies the system exit " +"status (passed to C's :c:func:`exit` function); if it is ``None``, the exit " +"status is zero; if it has another type (such as a string), the object's " +"value is printed and the exit status is one." +msgstr "" +"此异常由 :func:`sys.exit` 函数引发。 它继承自 :exc:`BaseException` 而不是 :exc:`Exception` " +"以确保不会被处理 :exc:`Exception` 的代码意外捕获。 这允许此异常正确地向上传播并导致解释器退出。 如果它未被处理,则 Python " +"解释器就将退出;不会打印任何栈回溯信息。 构造器接受的可选参数与传递给 :func:`sys.exit` 的相同。 " +"如果该值为一个整数,则它指明系统退出状态码(会传递给 C 的 :c:func:`exit` 函数);如果该值为 " +"``None``,则退出状态码为零;如果该值为其他类型(例如字符串),则会打印对象的值并将退出状态码设为一。" + +#: ../../library/exceptions.rst:497 +msgid "" +"A call to :func:`sys.exit` is translated into an exception so that clean-up " +"handlers (:keyword:`finally` clauses of :keyword:`try` statements) can be " +"executed, and so that a debugger can execute a script without running the " +"risk of losing control. The :func:`os._exit` function can be used if it is " +"absolutely positively necessary to exit immediately (for example, in the " +"child process after a call to :func:`os.fork`)." +msgstr "" +"对 :func:`sys.exit` 的调用会被转换为一个异常以便能执行清理处理程序 (:keyword:`try` 语句的 " +":keyword:`finally` 子句),并且使得调试器可以执行一段脚本而不必冒失去控制的风险。 如果绝对确实地需要立即退出(例如在调用 " +":func:`os.fork` 之后的子进程中)则可使用 :func:`os._exit`." + +#: ../../library/exceptions.rst:506 +msgid "" +"The exit status or error message that is passed to the constructor. " +"(Defaults to ``None``.)" +msgstr "传给构造器的退出状态码或错误信息(默认为 ``None``。)" + +#: ../../library/exceptions.rst:512 +msgid "" +"Raised when an operation or function is applied to an object of " +"inappropriate type. The associated value is a string giving details about " +"the type mismatch." +msgstr "当一个操作或函数被应用于类型不适当的对象时将被引发。 关联的值是一个字符串,给出有关类型不匹配的详情。" + +#: ../../library/exceptions.rst:515 +msgid "" +"This exception may be raised by user code to indicate that an attempted " +"operation on an object is not supported, and is not meant to be. If an " +"object is meant to support a given operation but has not yet provided an " +"implementation, :exc:`NotImplementedError` is the proper exception to raise." +msgstr "" +"此异常可以由用户代码引发,以表明尝试对某个对象进行的操作不受支持也不应当受支持。 " +"如果某个对象应当支持给定的操作但尚未提供相应的实现,所要引发的适当异常应为 :exc:`NotImplementedError`。" + +#: ../../library/exceptions.rst:520 +msgid "" +"Passing arguments of the wrong type (e.g. passing a :class:`list` when an " +":class:`int` is expected) should result in a :exc:`TypeError`, but passing " +"arguments with the wrong value (e.g. a number outside expected boundaries) " +"should result in a :exc:`ValueError`." +msgstr "" +"传入参数的类型错误 (例如在要求 :class:`int` 时却传入了 :class:`list`) 应当导致 " +":exc:`TypeError`,但传入参数的值错误 (例如传入要求范围之外的数值) 则应当导致 :exc:`ValueError`。" + +#: ../../library/exceptions.rst:527 +msgid "" +"Raised when a reference is made to a local variable in a function or method," +" but no value has been bound to that variable. This is a subclass of " +":exc:`NameError`." +msgstr "当在函数或方法中对某个局部变量进行引用,但该变量并未绑定任何值时将被引发。 此异常是 :exc:`NameError` 的一个子类。" + +#: ../../library/exceptions.rst:534 +msgid "" +"Raised when a Unicode-related encoding or decoding error occurs. It is a " +"subclass of :exc:`ValueError`." +msgstr "当发生与 Unicode 相关的编码或解码错误时将被引发。 此异常是 :exc:`ValueError` 的一个子类。" + +#: ../../library/exceptions.rst:537 +msgid "" +":exc:`UnicodeError` has attributes that describe the encoding or decoding " +"error. For example, ``err.object[err.start:err.end]`` gives the particular " +"invalid input that the codec failed on." +msgstr "" +":exc:`UnicodeError` 具有一些描述编码或解码错误的属性。 例如 ``err.object[err.start:err.end]`` " +"会给出导致编解码器失败的特定无效输入。" + +#: ../../library/exceptions.rst:543 +msgid "The name of the encoding that raised the error." +msgstr "引发错误的编码名称。" + +#: ../../library/exceptions.rst:547 +msgid "A string describing the specific codec error." +msgstr "描述特定编解码器错误的字符串。" + +#: ../../library/exceptions.rst:551 +msgid "The object the codec was attempting to encode or decode." +msgstr "编解码器试图要编码或解码的对象。" + +#: ../../library/exceptions.rst:555 +msgid "The first index of invalid data in :attr:`object`." +msgstr ":attr:`object` 中无效数据的开始位置索引。" + +#: ../../library/exceptions.rst:559 +msgid "The index after the last invalid data in :attr:`object`." +msgstr ":attr:`object` 中无效数据的末尾位置索引(不含)。" + +#: ../../library/exceptions.rst:564 +msgid "" +"Raised when a Unicode-related error occurs during encoding. It is a " +"subclass of :exc:`UnicodeError`." +msgstr "当在编码过程中发生与 Unicode 相关的错误时将被引发。 此异常是 :exc:`UnicodeError` 的一个子类。" + +#: ../../library/exceptions.rst:570 +msgid "" +"Raised when a Unicode-related error occurs during decoding. It is a " +"subclass of :exc:`UnicodeError`." +msgstr "当在解码过程中发生与 Unicode 相关的错误时将被引发。 此异常是 :exc:`UnicodeError` 的一个子类。" + +#: ../../library/exceptions.rst:576 +msgid "" +"Raised when a Unicode-related error occurs during translating. It is a " +"subclass of :exc:`UnicodeError`." +msgstr "在转写过程中发生与 Unicode 相关的错误时将被引发。 此异常是 :exc:`UnicodeError` 的一个子类。" + +#: ../../library/exceptions.rst:582 +msgid "" +"Raised when an operation or function receives an argument that has the right" +" type but an inappropriate value, and the situation is not described by a " +"more precise exception such as :exc:`IndexError`." +msgstr "当操作或函数接收到具有正确类型但值不适合的参数,并且情况不能用更精确的异常例如 :exc:`IndexError` 来描述时将被引发。" + +#: ../../library/exceptions.rst:589 +msgid "" +"Raised when the second argument of a division or modulo operation is zero. " +"The associated value is a string indicating the type of the operands and the" +" operation." +msgstr "当除法或取余运算的第二个参数为零时将被引发。 关联的值是一个字符串,指明操作数和运算的类型。" + +#: ../../library/exceptions.rst:594 +msgid "" +"The following exceptions are kept for compatibility with previous versions; " +"starting from Python 3.3, they are aliases of :exc:`OSError`." +msgstr "下列异常被保留以与之前的版本相兼容;从 Python 3.3 开始,它们都是 :exc:`OSError` 的别名。" + +#: ../../library/exceptions.rst:603 +msgid "Only available on Windows." +msgstr "限在 Windows 中可用。" + +#: ../../library/exceptions.rst:607 +msgid "OS exceptions" +msgstr "OS 异常" + +#: ../../library/exceptions.rst:609 +msgid "" +"The following exceptions are subclasses of :exc:`OSError`, they get raised " +"depending on the system error code." +msgstr "下列异常均为 :exc:`OSError` 的子类,它们将根据系统错误代码被引发。" + +#: ../../library/exceptions.rst:614 +msgid "" +"Raised when an operation would block on an object (e.g. socket) set for non-" +"blocking operation. Corresponds to :c:data:`errno` :py:data:`~errno.EAGAIN`," +" :py:data:`~errno.EALREADY`, :py:data:`~errno.EWOULDBLOCK` and " +":py:data:`~errno.EINPROGRESS`." +msgstr "" +"当一个操作将会在设置为非阻塞操作的对象(例如套接字)上发生阻塞时将被引发。 对应于 :c:data:`errno` " +":py:data:`~errno.EAGAIN`, :py:data:`~errno.EALREADY`, " +":py:data:`~errno.EWOULDBLOCK` 和 :py:data:`~errno.EINPROGRESS`。" + +#: ../../library/exceptions.rst:619 +msgid "" +"In addition to those of :exc:`OSError`, :exc:`BlockingIOError` can have one " +"more attribute:" +msgstr "除了 :exc:`OSError` 已有的属性,:exc:`BlockingIOError` 还有一个额外属性:" + +#: ../../library/exceptions.rst:624 +msgid "" +"An integer containing the number of characters written to the stream before " +"it blocked. This attribute is available when using the buffered I/O classes" +" from the :mod:`io` module." +msgstr "一个整数,表示在被阻塞前已写入到流的字符数。 当使用来自 :mod:`io` 模块的带缓冲 I/O 类时此属性可用。" + +#: ../../library/exceptions.rst:630 +msgid "" +"Raised when an operation on a child process failed. Corresponds to " +":c:data:`errno` :py:data:`~errno.ECHILD`." +msgstr "当一个子进程上的操作失败时将被引发。 对应于 :c:data:`errno` :py:data:`~errno.ECHILD`。" + +#: ../../library/exceptions.rst:635 +msgid "A base class for connection-related issues." +msgstr "与连接相关问题的基类。" + +#: ../../library/exceptions.rst:637 +msgid "" +"Subclasses are :exc:`BrokenPipeError`, :exc:`ConnectionAbortedError`, " +":exc:`ConnectionRefusedError` and :exc:`ConnectionResetError`." +msgstr "" +"其子类有 :exc:`BrokenPipeError`, :exc:`ConnectionAbortedError`, " +":exc:`ConnectionRefusedError` 和 :exc:`ConnectionResetError`。" + +#: ../../library/exceptions.rst:642 +msgid "" +"A subclass of :exc:`ConnectionError`, raised when trying to write on a pipe " +"while the other end has been closed, or trying to write on a socket which " +"has been shutdown for writing. Corresponds to :c:data:`errno` " +":py:data:`~errno.EPIPE` and :py:data:`~errno.ESHUTDOWN`." +msgstr "" +":exc:`ConnectionError` 的子类,当试图写入一个管道而该管道的另一端已关闭,或者试图写入一个套接字而该套接字已关闭写入时将被引发。 " +"对应于 :c:data:`errno` :py:data:`~errno.EPIPE` 和 :py:data:`~errno.ESHUTDOWN`。" + +#: ../../library/exceptions.rst:649 +msgid "" +"A subclass of :exc:`ConnectionError`, raised when a connection attempt is " +"aborted by the peer. Corresponds to :c:data:`errno` " +":py:data:`~errno.ECONNABORTED`." +msgstr "" +":exc:`ConnectionError` 的子类,当一个连接尝试被对端中止时将被引发。 对应于 :c:data:`errno` " +":py:data:`~errno.ECONNABORTED`。" + +#: ../../library/exceptions.rst:655 +msgid "" +"A subclass of :exc:`ConnectionError`, raised when a connection attempt is " +"refused by the peer. Corresponds to :c:data:`errno` " +":py:data:`~errno.ECONNREFUSED`." +msgstr "" +":exc:`ConnectionError` 的子类,当一个连接尝试被对端拒绝时将被引发。 对应于 :c:data:`errno` " +":py:data:`~errno.ECONNREFUSED`。" + +#: ../../library/exceptions.rst:661 +msgid "" +"A subclass of :exc:`ConnectionError`, raised when a connection is reset by " +"the peer. Corresponds to :c:data:`errno` :py:data:`~errno.ECONNRESET`." +msgstr "" +":exc:`ConnectionError` 的子类,当一个连接尝试被对端重置时将被引发。 对应于 :c:data:`errno` " +":py:data:`~errno.ECONNRESET`。" + +#: ../../library/exceptions.rst:667 +msgid "" +"Raised when trying to create a file or directory which already exists. " +"Corresponds to :c:data:`errno` :py:data:`~errno.EEXIST`." +msgstr "当试图创建一个已存在的文件或目录时将被引发。 对应于 :c:data:`errno` :py:data:`~errno.EEXIST`。" + +#: ../../library/exceptions.rst:672 +msgid "" +"Raised when a file or directory is requested but doesn't exist. Corresponds " +"to :c:data:`errno` :py:data:`~errno.ENOENT`." +msgstr "将所请求的文件或目录不存在时将被引发。 对应于 :c:data:`errno` :py:data:`~errno.ENOENT`。" + +#: ../../library/exceptions.rst:677 +msgid "" +"Raised when a system call is interrupted by an incoming signal. Corresponds " +"to :c:data:`errno` :py:data:`~errno.EINTR`." +msgstr "当系统调用被输入信号中断时将被引发。 对应于 :c:data:`errno` :py:data:`~errno.EINTR`。" + +#: ../../library/exceptions.rst:680 +msgid "" +"Python now retries system calls when a syscall is interrupted by a signal, " +"except if the signal handler raises an exception (see :pep:`475` for the " +"rationale), instead of raising :exc:`InterruptedError`." +msgstr "" +"当系统调用被某个信号中断时,Python 现在会重试系统调用,除非该信号的处理程序引发了其它异常 (原理参见 :pep:`475`) 而不是引发 " +":exc:`InterruptedError`。" + +#: ../../library/exceptions.rst:687 +msgid "" +"Raised when a file operation (such as :func:`os.remove`) is requested on a " +"directory. Corresponds to :c:data:`errno` :py:data:`~errno.EISDIR`." +msgstr "" +"当请求对一个目录执行文件操作 (例如 :func:`os.remove`) 时将被引发。 对应于 :c:data:`errno` " +":py:data:`~errno.EISDIR`。" + +#: ../../library/exceptions.rst:693 +msgid "" +"Raised when a directory operation (such as :func:`os.listdir`) is requested " +"on something which is not a directory. On most POSIX platforms, it may also" +" be raised if an operation attempts to open or traverse a non-directory file" +" as if it were a directory. Corresponds to :c:data:`errno` " +":py:data:`~errno.ENOTDIR`." +msgstr "" +"当请求对一个非目录执行目录操作 (例如 :func:`os.listdir`) 时将被引发。 在大多数 POSIX " +"平台上,它还可能在某个操作试图将一个非目录作为目录打开或遍历时被引发。 对应于 :c:data:`errno` " +":py:data:`~errno.ENOTDIR`。" + +#: ../../library/exceptions.rst:701 +msgid "" +"Raised when trying to run an operation without the adequate access rights - " +"for example filesystem permissions. Corresponds to :c:data:`errno` " +":py:data:`~errno.EACCES` and :py:data:`~errno.EPERM`." +msgstr "" +"当在没有足够访问权限的情况下试图执行某个操作时将被引发 —— 例如文件系统权限。 对应于 :c:data:`errno` " +":py:data:`~errno.EACCES` 和 :py:data:`~errno.EPERM`。" + +#: ../../library/exceptions.rst:707 +msgid "" +"Raised when a given process doesn't exist. Corresponds to :c:data:`errno` " +":py:data:`~errno.ESRCH`." +msgstr "当给定的进程不存在时将被引发。 对应于 :c:data:`errno` :py:data:`~errno.ESRCH`。" + +#: ../../library/exceptions.rst:712 +msgid "" +"Raised when a system function timed out at the system level. Corresponds to " +":c:data:`errno` :py:data:`~errno.ETIMEDOUT`." +msgstr "" +"当一个系统函数在系统层级发生超时的情况下将被引发。 对应于 :c:data:`errno` :py:data:`~errno.ETIMEDOUT`。" + +#: ../../library/exceptions.rst:715 +msgid "All the above :exc:`OSError` subclasses were added." +msgstr "添加了以上所有 :exc:`OSError` 的子类。" + +#: ../../library/exceptions.rst:721 +msgid ":pep:`3151` - Reworking the OS and IO exception hierarchy" +msgstr ":pep:`3151` - 重写 OS 和 IO 异常的层次结构" + +#: ../../library/exceptions.rst:727 +msgid "Warnings" +msgstr "警告" + +#: ../../library/exceptions.rst:729 +msgid "" +"The following exceptions are used as warning categories; see the " +":ref:`warning-categories` documentation for more details." +msgstr "下列异常被用作警告类别;请参阅 :ref:`warning-categories` 文档了解详情。" + +#: ../../library/exceptions.rst:734 +msgid "Base class for warning categories." +msgstr "警告类别的基类。" + +#: ../../library/exceptions.rst:739 +msgid "Base class for warnings generated by user code." +msgstr "用户代码所产生警告的基类。" + +#: ../../library/exceptions.rst:744 +msgid "" +"Base class for warnings about deprecated features when those warnings are " +"intended for other Python developers." +msgstr "如果所发出的警告是针对其他 Python 开发者的,则以此作为与已弃用特性相关警告的基类。" + +#: ../../library/exceptions.rst:747 +msgid "" +"Ignored by the default warning filters, except in the ``__main__`` module " +"(:pep:`565`). Enabling the :ref:`Python Development Mode ` shows " +"this warning." +msgstr "" +"会被默认警告过滤器忽略,在 ``__main__`` 模块中的情况除外 (:pep:`565`)。 启用 :ref:`Python 开发模式 " +"` 时会显示此警告。" + +#: ../../library/exceptions.rst:751 ../../library/exceptions.rst:767 +msgid "The deprecation policy is described in :pep:`387`." +msgstr "这个弃用政策是在 :pep:`387` 中描述的。" + +#: ../../library/exceptions.rst:756 +msgid "" +"Base class for warnings about features which are obsolete and expected to be" +" deprecated in the future, but are not deprecated at the moment." +msgstr "对于已过时并预计在未来弃用,但目前尚未弃用的特性相关警告的基类。" + +#: ../../library/exceptions.rst:760 +msgid "" +"This class is rarely used as emitting a warning about a possible upcoming " +"deprecation is unusual, and :exc:`DeprecationWarning` is preferred for " +"already active deprecations." +msgstr "" +"这个类很少被使用,因为针对未来可能的弃用发出警告的做法并不常见,而针对当前已有的弃用则推荐使用 :exc:`DeprecationWarning`。" + +#: ../../library/exceptions.rst:764 ../../library/exceptions.rst:790 +#: ../../library/exceptions.rst:808 +msgid "" +"Ignored by the default warning filters. Enabling the :ref:`Python " +"Development Mode ` shows this warning." +msgstr "会被默认警告过滤器忽略。 启用 :ref:`Python 开发模式 ` 时会显示此警告。" + +#: ../../library/exceptions.rst:772 +msgid "Base class for warnings about dubious syntax." +msgstr "与模糊的语法相关的警告的基类。" + +#: ../../library/exceptions.rst:777 +msgid "Base class for warnings about dubious runtime behavior." +msgstr "与模糊的运行时行为相关的警告的基类。" + +#: ../../library/exceptions.rst:782 +msgid "" +"Base class for warnings about deprecated features when those warnings are " +"intended for end users of applications that are written in Python." +msgstr "如果所发出的警告是针对以 Python 所编写应用的最终用户的,则以此作为与已弃用特性相关警告的基类。" + +#: ../../library/exceptions.rst:788 +msgid "Base class for warnings about probable mistakes in module imports." +msgstr "与在模块导入中可能的错误相关的警告的基类。" + +#: ../../library/exceptions.rst:796 +msgid "Base class for warnings related to Unicode." +msgstr "与 Unicode 相关的警告的基类。" + +#: ../../library/exceptions.rst:801 +msgid "" +"Base class for warnings related to :class:`bytes` and :class:`bytearray`." +msgstr "与 :class:`bytes` 和 :class:`bytearray` 相关的警告的基类。" + +#: ../../library/exceptions.rst:806 +msgid "Base class for warnings related to resource usage." +msgstr "资源使用相关警告的基类。" + +#: ../../library/exceptions.rst:816 +msgid "Exception hierarchy" +msgstr "异常层次结构" + +#: ../../library/exceptions.rst:818 +msgid "The class hierarchy for built-in exceptions is:" +msgstr "内置异常的类层级结构如下:" diff --git a/library/faulthandler.po b/library/faulthandler.po new file mode 100644 index 000000000..5d93983e7 --- /dev/null +++ b/library/faulthandler.po @@ -0,0 +1,260 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) 2001-2022, Python Software Foundation +# This file is distributed under the same license as the Python package. +# FIRST AUTHOR , YEAR. +# +# Translators: +# Menghua Xiao , 2018 +# Dai Xu , 2021 +# Freesand Leo , 2021 +# +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: Python 3.9\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2022-11-04 14:34+0000\n" +"PO-Revision-Date: 2017-02-16 23:10+0000\n" +"Last-Translator: Freesand Leo , 2021\n" +"Language-Team: Chinese (China) (https://www.transifex.com/python-doc/teams/5390/zh_CN/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: zh_CN\n" +"Plural-Forms: nplurals=1; plural=0;\n" + +#: ../../library/faulthandler.rst:2 +msgid ":mod:`faulthandler` --- Dump the Python traceback" +msgstr ":mod:`faulthandler` —— 转储 Python 的跟踪信息" + +#: ../../library/faulthandler.rst:11 +msgid "" +"This module contains functions to dump Python tracebacks explicitly, on a " +"fault, after a timeout, or on a user signal. Call " +":func:`faulthandler.enable` to install fault handlers for the " +":const:`SIGSEGV`, :const:`SIGFPE`, :const:`SIGABRT`, :const:`SIGBUS`, and " +":const:`SIGILL` signals. You can also enable them at startup by setting the " +":envvar:`PYTHONFAULTHANDLER` environment variable or by using the " +":option:`-X` ``faulthandler`` command line option." +msgstr "" +"当故障、超时或收到用户信号时,利用本模块内的函数可转储 Python 跟踪信息。调用 :func:`faulthandler.enable` 可安装 " +":const:`SIGSEGV` 、 :const:`SIGFPE` 、 :const:`SIGABRT` 、 :const:`SIGBUS` 和 " +":const:`SIGILL` 信号的故障处理程序。通过设置 :envvar:`PYTHONFAULTHANDLER` 环境变量或 " +":option:`-X` ``faulthandler`` 命令行参数,还可以在启动时开启这些设置。" + +#: ../../library/faulthandler.rst:18 +msgid "" +"The fault handler is compatible with system fault handlers like Apport or " +"the Windows fault handler. The module uses an alternative stack for signal " +"handlers if the :c:func:`sigaltstack` function is available. This allows it " +"to dump the traceback even on a stack overflow." +msgstr "" +"故障处理程序与操作系统的故障处理程序兼容,比如 Apport 或 Windows 故障处理程序等。如果 :c:func:`sigaltstack` " +"函数可用,本模块将为信号处理程序使用备用堆栈。这样即便堆栈溢出也能转储跟踪信息。" + +#: ../../library/faulthandler.rst:23 +msgid "" +"The fault handler is called on catastrophic cases and therefore can only use" +" signal-safe functions (e.g. it cannot allocate memory on the heap). Because" +" of this limitation traceback dumping is minimal compared to normal Python " +"tracebacks:" +msgstr "" +"故障处理程序将在灾难性场合调用,因此只能使用信号安全的函数(比如不能在堆上分配内存)。由于这一限制,与正常的 Python 跟踪相比,转储量是最小的。" + +#: ../../library/faulthandler.rst:28 +msgid "" +"Only ASCII is supported. The ``backslashreplace`` error handler is used on " +"encoding." +msgstr "只支持 ASCII 码。编码时会用到 ``backslashreplace`` 错误处理程序。" + +#: ../../library/faulthandler.rst:30 +msgid "Each string is limited to 500 characters." +msgstr "每个字符串限制在 500 个字符以内。" + +#: ../../library/faulthandler.rst:31 +msgid "" +"Only the filename, the function name and the line number are displayed. (no " +"source code)" +msgstr "只会显式文件名、函数名和行号。(不显示源代码)" + +#: ../../library/faulthandler.rst:33 +msgid "It is limited to 100 frames and 100 threads." +msgstr "上限是 100 页内存帧和 100 个线程。" + +#: ../../library/faulthandler.rst:34 +msgid "The order is reversed: the most recent call is shown first." +msgstr "反序排列:最近的调用最先显示。" + +#: ../../library/faulthandler.rst:36 +msgid "" +"By default, the Python traceback is written to :data:`sys.stderr`. To see " +"tracebacks, applications must be run in the terminal. A log file can " +"alternatively be passed to :func:`faulthandler.enable`." +msgstr "" +"默认情况下,Python 的跟踪信息会写入 :data:`sys.stderr`。为了能看到跟踪信息,应用程序必须运行于终端中。日志文件也可以传给 " +":func:`faulthandler.enable`。" + +#: ../../library/faulthandler.rst:40 +msgid "" +"The module is implemented in C, so tracebacks can be dumped on a crash or " +"when Python is deadlocked." +msgstr "本模块是用 C 语言实现的,所以才能在崩溃或 Python 死锁时转储跟踪信息。" + +#: ../../library/faulthandler.rst:43 +msgid "" +"The :ref:`Python Development Mode ` calls " +":func:`faulthandler.enable` at Python startup." +msgstr "" +"在 Python 启动时, :ref:`Python 开发模式 ` 会调用 :func:`faulthandler.enable`。" + +#: ../../library/faulthandler.rst:48 +msgid "Dumping the traceback" +msgstr "转储跟踪信息" + +#: ../../library/faulthandler.rst:52 +msgid "" +"Dump the tracebacks of all threads into *file*. If *all_threads* is " +"``False``, dump only the current thread." +msgstr "将所有线程的跟踪数据转储到 *file* 中。如果 *all_threads* 为 ``False``,则只转储当前线程。" + +#: ../../library/faulthandler.rst:55 ../../library/faulthandler.rst:73 +#: ../../library/faulthandler.rst:111 ../../library/faulthandler.rst:133 +msgid "Added support for passing file descriptor to this function." +msgstr "增加了向本函数传入文件描述符的支持。" + +#: ../../library/faulthandler.rst:60 +msgid "Fault handler state" +msgstr "错误处理程序的状态" + +#: ../../library/faulthandler.rst:64 +msgid "" +"Enable the fault handler: install handlers for the :const:`SIGSEGV`, " +":const:`SIGFPE`, :const:`SIGABRT`, :const:`SIGBUS` and :const:`SIGILL` " +"signals to dump the Python traceback. If *all_threads* is ``True``, produce " +"tracebacks for every running thread. Otherwise, dump only the current " +"thread." +msgstr "" +"启用故障处理程序:为 :const:`SIGSEGV` 、 :const:`SIGFPE` 、 :const:`SIGABRT` 、 " +":const:`SIGBUS` 和 :const:`SIGILL` 信号安装处理程序,以转储 Python 跟踪信息。如果 *all_threads* " +"为 ``True``,则会为每个运行中的线程生成跟踪信息。否则只转储当前线程。" + +#: ../../library/faulthandler.rst:70 +msgid "" +"The *file* must be kept open until the fault handler is disabled: see " +":ref:`issue with file descriptors `." +msgstr "该 *文件* 必须保持打开状态,直至禁用故障处理程序为止:参见 :ref:`文件描述符相关话题 `。" + +#: ../../library/faulthandler.rst:76 +msgid "On Windows, a handler for Windows exception is also installed." +msgstr "在 Windows 系统中,同时会安装一个 Windows 异常处理程序。" + +#: ../../library/faulthandler.rst:81 +msgid "" +"Disable the fault handler: uninstall the signal handlers installed by " +":func:`enable`." +msgstr "停用故障处理程序:卸载由 :func:`enable` 安装的信号处理程序。" + +#: ../../library/faulthandler.rst:86 +msgid "Check if the fault handler is enabled." +msgstr "检查故障处理程序是否被启用。" + +#: ../../library/faulthandler.rst:90 +msgid "Dumping the tracebacks after a timeout" +msgstr "一定时间后转储跟踪数据。" + +#: ../../library/faulthandler.rst:94 +msgid "" +"Dump the tracebacks of all threads, after a timeout of *timeout* seconds, or" +" every *timeout* seconds if *repeat* is ``True``. If *exit* is ``True``, " +"call :c:func:`_exit` with status=1 after dumping the tracebacks. (Note " +":c:func:`_exit` exits the process immediately, which means it doesn't do any" +" cleanup like flushing file buffers.) If the function is called twice, the " +"new call replaces previous parameters and resets the timeout. The timer has " +"a sub-second resolution." +msgstr "" +"在 *timeout* 秒超时后,转储所有线程的跟踪信息,如果 *repeat* 为 ``True``,则每隔 *timeout* 秒转储一次。如果 " +"*exit* 为 ``True``,则在转储跟踪信息后调用 :c:func:`_exit`,参数 status=1。请注意, " +":c:func:`_exit` " +"会立即关闭进程,这意味着不做任何清理工作,如刷新文件缓冲区等。如果调用两次函数,则新的调用将取代之前的参数,超时时间也会重置。计时器的精度为亚秒级。" + +#: ../../library/faulthandler.rst:102 +msgid "" +"The *file* must be kept open until the traceback is dumped or " +":func:`cancel_dump_traceback_later` is called: see :ref:`issue with file " +"descriptors `." +msgstr "" +"*file* 必须保持打开状态,直至跟踪信息转储完毕,或调用了 :func:`cancel_dump_traceback_later` :参见 " +":ref:`文件描述符相关话题 `。" + +#: ../../library/faulthandler.rst:106 +msgid "This function is implemented using a watchdog thread." +msgstr "本函数用一个看门狗线程实现。" + +#: ../../library/faulthandler.rst:108 +msgid "This function is now always available." +msgstr "该函数现在总是可用。" + +#: ../../library/faulthandler.rst:116 +msgid "Cancel the last call to :func:`dump_traceback_later`." +msgstr "取消 :func:`dump_traceback_later` 的最后一次调用。" + +#: ../../library/faulthandler.rst:120 +msgid "Dumping the traceback on a user signal" +msgstr "转储用户信号的跟踪信息。" + +#: ../../library/faulthandler.rst:124 +msgid "" +"Register a user signal: install a handler for the *signum* signal to dump " +"the traceback of all threads, or of the current thread if *all_threads* is " +"``False``, into *file*. Call the previous handler if chain is ``True``." +msgstr "" +"注册一个用户信号:为 *signum* 信号安装一个处理程序,将所有线程或当前线程(*all_threads* 为 ``False`` " +"时)的跟踪信息转储到 *file* 中。如果 chain 为 ``True``,则调用前一个处理程序。" + +#: ../../library/faulthandler.rst:128 +msgid "" +"The *file* must be kept open until the signal is unregistered by " +":func:`unregister`: see :ref:`issue with file descriptors `." +msgstr "" +"*file* 必须保持打开状态,直至信号被 :func:`unregister` 注销:参见 :ref:`文件描述符相关话题 " +"`。" + +#: ../../library/faulthandler.rst:131 ../../library/faulthandler.rst:142 +msgid "Not available on Windows." +msgstr "Windows 中不可用。" + +#: ../../library/faulthandler.rst:138 +msgid "" +"Unregister a user signal: uninstall the handler of the *signum* signal " +"installed by :func:`register`. Return ``True`` if the signal was registered," +" ``False`` otherwise." +msgstr "" +"注销一个用户信号:卸载由 :func:`register` 安装的 *signum* 信号处理程序。如果信号已注册,返回 ``True``,否则返回 " +"``False``。" + +#: ../../library/faulthandler.rst:148 +msgid "Issue with file descriptors" +msgstr "文件描述符相关话题" + +#: ../../library/faulthandler.rst:150 +msgid "" +":func:`enable`, :func:`dump_traceback_later` and :func:`register` keep the " +"file descriptor of their *file* argument. If the file is closed and its file" +" descriptor is reused by a new file, or if :func:`os.dup2` is used to " +"replace the file descriptor, the traceback will be written into a different " +"file. Call these functions again each time that the file is replaced." +msgstr "" +":func:`enable` 、 :func:`dump_traceback_later` 和 :func:`register` 保留其 *file* " +"参数给出的文件描述符。 如果文件关闭,文件描述符将被一个新文件重新使用;或者用 :func:`os.dup2` " +"替换了文件描述符,则跟踪信息将被写入另一个文件。 每次文件被替换时,都会再次调用这些函数。" + +#: ../../library/faulthandler.rst:158 +msgid "Example" +msgstr "示例" + +#: ../../library/faulthandler.rst:160 +msgid "" +"Example of a segmentation fault on Linux with and without enabling the fault" +" handler:" +msgstr "在 Linux 中启用和停用内存段故障的默认处理程序:" diff --git a/library/fcntl.po b/library/fcntl.po new file mode 100644 index 000000000..ef53bd549 --- /dev/null +++ b/library/fcntl.po @@ -0,0 +1,323 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) 2001-2024, Python Software Foundation +# This file is distributed under the same license as the Python package. +# FIRST AUTHOR , YEAR. +# +# Translators: +# Alpha Du , 2019 +# allenjuly7 , 2019 +# nick <2330458484@qq.com>, 2019 +# Dai Xu , 2021 +# Freesand Leo , 2022 +# Rafael Fontenelle , 2024 +# +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: Python 3.9\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2024-08-30 16:51+0000\n" +"PO-Revision-Date: 2017-02-16 23:10+0000\n" +"Last-Translator: Rafael Fontenelle , 2024\n" +"Language-Team: Chinese (China) (https://app.transifex.com/python-doc/teams/5390/zh_CN/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: zh_CN\n" +"Plural-Forms: nplurals=1; plural=0;\n" + +#: ../../library/fcntl.rst:2 +msgid ":mod:`fcntl` --- The ``fcntl`` and ``ioctl`` system calls" +msgstr ":mod:`fcntl` —— 系统调用 ``fcntl`` 和 ``ioctl``" + +#: ../../library/fcntl.rst:16 +msgid "" +"This module performs file control and I/O control on file descriptors. It is" +" an interface to the :c:func:`fcntl` and :c:func:`ioctl` Unix routines. For" +" a complete description of these calls, see :manpage:`fcntl(2)` and " +":manpage:`ioctl(2)` Unix manual pages." +msgstr "" +"本模块基于文件描述符来进行文件控制和 I/O 控制。它是 Unix 系统调用 :c:func:`fcntl` 和 :c:func:`ioctl` " +"的接口。关于这些调用的完整描述,请参阅 Unix 手册的 :manpage:`fcntl(2)` 和 :manpage:`ioctl(2)` 页面。" + +#: ../../library/fcntl.rst:21 +msgid "" +"All functions in this module take a file descriptor *fd* as their first " +"argument. This can be an integer file descriptor, such as returned by " +"``sys.stdin.fileno()``, or an :class:`io.IOBase` object, such as " +"``sys.stdin`` itself, which provides a :meth:`~io.IOBase.fileno` that " +"returns a genuine file descriptor." +msgstr "" +"本模块的所有函数都接受文件描述符 *fd* 作为第一个参数。可以是一个整数形式的文件描述符,比如 ``sys.stdin.fileno()`` " +"的返回结果,或为 :class:`io.IOBase` 对象,比如 ``sys.stdin`` 提供一个 " +":meth:`~io.IOBase.fileno`,可返回一个真正的文件描述符。" + +#: ../../library/fcntl.rst:27 +msgid "" +"Operations in this module used to raise an :exc:`IOError` where they now " +"raise an :exc:`OSError`." +msgstr "本模块的操作以前触发的是 :exc:`IOError`,现在则会触发 :exc:`OSError`。" + +#: ../../library/fcntl.rst:31 +msgid "" +"The fcntl module now contains ``F_ADD_SEALS``, ``F_GET_SEALS``, and " +"``F_SEAL_*`` constants for sealing of :func:`os.memfd_create` file " +"descriptors." +msgstr "" +"fcntl 模块现在有了 ``F_ADD_SEALS`` 、``F_GET_SEALS`` 和 ``F_SEAL_*`` 常量,用于文件描述符 " +":func:`os.memfd_create` 的封装。" + +#: ../../library/fcntl.rst:36 +msgid "" +"On macOS, the fcntl module exposes the ``F_GETPATH`` constant, which obtains" +" the path of a file from a file descriptor. On Linux(>=3.15), the fcntl " +"module exposes the ``F_OFD_GETLK``, ``F_OFD_SETLK`` and ``F_OFD_SETLKW`` " +"constants, which are used when working with open file description locks." +msgstr "" +"在 macOS 上,fcntl 模块提供了 ``F_GETPATH`` 常量,从文件描述符获取文件的路径。 在 Linux(>=3.15) " +"上,fcntl 模块提供了 ``F_OFD_GETLK``, ``F_OFD_SETLK`` 和 ``F_OFD_SETLKW`` " +"常量,它们将在处理打开文件描述锁时被使用。" + +#: ../../library/fcntl.rst:43 +msgid "The module defines the following functions:" +msgstr "这个模块定义了以下函数:" + +#: ../../library/fcntl.rst:48 +msgid "" +"Perform the operation *cmd* on file descriptor *fd* (file objects providing " +"a :meth:`~io.IOBase.fileno` method are accepted as well). The values used " +"for *cmd* are operating system dependent, and are available as constants in " +"the :mod:`fcntl` module, using the same names as used in the relevant C " +"header files. The argument *arg* can either be an integer value, or a " +":class:`bytes` object. With an integer value, the return value of this " +"function is the integer return value of the C :c:func:`fcntl` call. When " +"the argument is bytes it represents a binary structure, e.g. created by " +":func:`struct.pack`. The binary data is copied to a buffer whose address is " +"passed to the C :c:func:`fcntl` call. The return value after a successful " +"call is the contents of the buffer, converted to a :class:`bytes` object. " +"The length of the returned object will be the same as the length of the " +"*arg* argument. This is limited to 1024 bytes. If the information returned " +"in the buffer by the operating system is larger than 1024 bytes, this is " +"most likely to result in a segmentation violation or a more subtle data " +"corruption." +msgstr "" +"对文件描述符 *fd* 执行 *cmd* 操作(能够提供 :meth:`~io.IOBase.fileno` 方法的文件对象也可以接受)。 *cmd* " +"可用的值与操作系统有关,在 :mod:`fcntl` 模块中可作为常量使用,名称与相关 C 语言头文件中的一样。参数 *arg* 可以是整数或 " +":class:`bytes` 对象。若为整数值,则本函数的返回值是 C 语言 :c:func:`fcntl` " +"调用的整数返回值。若为字节串,则其代表一个二进制结构,比如由 :func:`struct.pack` " +"创建的数据。该二进制数据将被复制到一个缓冲区,缓冲区地址传给 C 调用 :c:func:`fcntl`。调用成功后的返回值位于缓冲区内,转换为一个 " +":class:`bytes` 对象。返回的对象长度将与 *arg* 参数的长度相同。上限为 1024 字节。如果操作系统在缓冲区中返回的信息大于 " +"1024 字节,很可能导致内存段冲突,或更为不易察觉的数据错误。" + +#: ../../library/fcntl.rst:65 +msgid "If the :c:func:`fcntl` fails, an :exc:`OSError` is raised." +msgstr "如果 :c:func:`fcntl` 调用失败,会触发 :exc:`OSError` 。" + +#: ../../library/fcntl.rst:67 +msgid "" +"Raises an :ref:`auditing event ` ``fcntl.fcntl`` with arguments " +"``fd``, ``cmd``, ``arg``." +msgstr "" +"引发一个 :ref:`审计事件 ` ``fcntl.fcntl`` 并附带参数 ``fd``, ``cmd``, ``arg``。" + +#: ../../library/fcntl.rst:72 +msgid "" +"This function is identical to the :func:`~fcntl.fcntl` function, except that" +" the argument handling is even more complicated." +msgstr "本函数与 :func:`~fcntl.fcntl` 函数相同,只是参数的处理更加复杂。" + +#: ../../library/fcntl.rst:75 +msgid "" +"The *request* parameter is limited to values that can fit in 32-bits. " +"Additional constants of interest for use as the *request* argument can be " +"found in the :mod:`termios` module, under the same names as used in the " +"relevant C header files." +msgstr "" +"*request* 参数的上限是 32位。:mod:`termios` 模块中包含了可用作 *request* 参数其他常量,名称与相关 C " +"头文件中定义的相同。" + +#: ../../library/fcntl.rst:80 +msgid "" +"The parameter *arg* can be one of an integer, an object supporting the read-" +"only buffer interface (like :class:`bytes`) or an object supporting the " +"read-write buffer interface (like :class:`bytearray`)." +msgstr "" +"参数 *arg* 可为整数、支持只读缓冲区接口的对象(如 :class:`bytes` )或支持读写缓冲区接口的对象(如 " +":class:`bytearray` )。" + +#: ../../library/fcntl.rst:84 +msgid "" +"In all but the last case, behaviour is as for the :func:`~fcntl.fcntl` " +"function." +msgstr "除了最后一种情况,其他情况下的行为都与 :func:`~fcntl.fcntl` 函数一样。" + +#: ../../library/fcntl.rst:87 +msgid "" +"If a mutable buffer is passed, then the behaviour is determined by the value" +" of the *mutate_flag* parameter." +msgstr "如果传入的是个可变缓冲区,那么行为就由 *mutate_flag* 参数决定。" + +#: ../../library/fcntl.rst:90 +msgid "" +"If it is false, the buffer's mutability is ignored and behaviour is as for a" +" read-only buffer, except that the 1024 byte limit mentioned above is " +"avoided -- so long as the buffer you pass is at least as long as what the " +"operating system wants to put there, things should work." +msgstr "" +"如果 *mutate_flag* 为 False,缓冲区的可变性将被忽略,行为与只读缓冲区一样,只是没有了上述 1024 " +"字节的上限——只要传入的缓冲区能容纳操作系统放入的数据即可。" + +#: ../../library/fcntl.rst:95 +msgid "" +"If *mutate_flag* is true (the default), then the buffer is (in effect) " +"passed to the underlying :func:`ioctl` system call, the latter's return code" +" is passed back to the calling Python, and the buffer's new contents reflect" +" the action of the :func:`ioctl`. This is a slight simplification, because " +"if the supplied buffer is less than 1024 bytes long it is first copied into " +"a static buffer 1024 bytes long which is then passed to :func:`ioctl` and " +"copied back into the supplied buffer." +msgstr "" +"如果 *mutate_flag* 为 True(默认值),那么缓冲区(实际上)会传给底层的 系统调用 :func:`ioctl` " +",其返回代码则会回传给调用它的 Python,而缓冲区的新数据则反映了 :func:`ioctl` " +"的运行结果。这里做了一点简化,因为若是给出的缓冲区少于 1024 字节,首先会被复制到一个 1024 字节长的静态缓冲区再传给 " +":func:`ioctl` ,然后把结果复制回给出的缓冲区去。" + +#: ../../library/fcntl.rst:103 +msgid "If the :c:func:`ioctl` fails, an :exc:`OSError` exception is raised." +msgstr "如果 :c:func:`ioctl` 调用失败,则会触发 :exc:`OSError` 异常。" + +#: ../../library/fcntl.rst:105 +msgid "An example::" +msgstr "举个例子:" + +#: ../../library/fcntl.rst:118 +msgid "" +"Raises an :ref:`auditing event ` ``fcntl.ioctl`` with arguments " +"``fd``, ``request``, ``arg``." +msgstr "" +"引发一个 :ref:`审计事件 ` ``fcntl.ioctl`` 并附带参数 ``fd``, ``request``, " +"``arg``。" + +#: ../../library/fcntl.rst:123 +msgid "" +"Perform the lock operation *operation* on file descriptor *fd* (file objects" +" providing a :meth:`~io.IOBase.fileno` method are accepted as well). See the" +" Unix manual :manpage:`flock(2)` for details. (On some systems, this " +"function is emulated using :c:func:`fcntl`.)" +msgstr "" +"在文件描述符 *fd* 上执行加锁操作 *operation* (也接受能提供 :meth:`~io.IOBase.fileno` 方法的文件对象)。 " +"详见 Unix 手册 :manpage:`flock(2)`。 (在某些系统中,此函数是用 :c:func:`fcntl` 模拟出来的。)" + +#: ../../library/fcntl.rst:128 +msgid "If the :c:func:`flock` fails, an :exc:`OSError` exception is raised." +msgstr "如果 :c:func:`flock` 调用失败,就会触发 :exc:`OSError` 异常。" + +#: ../../library/fcntl.rst:130 +msgid "" +"Raises an :ref:`auditing event ` ``fcntl.flock`` with arguments " +"``fd``, ``operation``." +msgstr "" +"引发一个 :ref:`审计事件 ` ``fcntl.flock`` 并附带参数 ``fd``, ``operation``。" + +#: ../../library/fcntl.rst:135 +msgid "" +"This is essentially a wrapper around the :func:`~fcntl.fcntl` locking calls." +" *fd* is the file descriptor (file objects providing a " +":meth:`~io.IOBase.fileno` method are accepted as well) of the file to lock " +"or unlock, and *cmd* is one of the following values:" +msgstr "" +"本质上是对 :func:`~fcntl.fcntl` 加锁调用的封装。*fd* 是要加解锁的文件描述符(也接受能提供 " +":meth:`~io.IOBase.fileno` 方法的文件对象),*cmd* 是以下值之一:" + +#: ../../library/fcntl.rst:140 +msgid ":const:`LOCK_UN` -- unlock" +msgstr ":const:`LOCK_UN` ——解锁" + +#: ../../library/fcntl.rst:141 +msgid ":const:`LOCK_SH` -- acquire a shared lock" +msgstr ":const:`LOCK_SH` —— 获取一个共享锁" + +#: ../../library/fcntl.rst:142 +msgid ":const:`LOCK_EX` -- acquire an exclusive lock" +msgstr ":const:`LOCK_EX` —— 获取一个独占锁" + +#: ../../library/fcntl.rst:144 +msgid "" +"When *cmd* is :const:`LOCK_SH` or :const:`LOCK_EX`, it can also be bitwise " +"ORed with :const:`LOCK_NB` to avoid blocking on lock acquisition. If " +":const:`LOCK_NB` is used and the lock cannot be acquired, an :exc:`OSError` " +"will be raised and the exception will have an *errno* attribute set to " +":const:`EACCES` or :const:`EAGAIN` (depending on the operating system; for " +"portability, check for both values). On at least some systems, " +":const:`LOCK_EX` can only be used if the file descriptor refers to a file " +"opened for writing." +msgstr "" +"如果 *cmd* 为 :const:`LOCK_SH` 或 :const:`LOCK_EX`,则还可以与 :const:`LOCK_NB` " +"进行按位或运算,以避免在获取锁时出现阻塞。 如果用了 :const:`LOCK_NB`,无法获取锁时将触发 :exc:`OSError`,此异常的 " +"*errno* 属性将被设为 :const:`EACCES` 或 :const:`EAGAIN` (视操作系统而定;为了保证可移植性,请检查这两个值)。" +" 至少在某些系统上,只有当文件描述符指向需要写入而打开的文件时,才可以使用 :const:`LOCK_EX`。" + +#: ../../library/fcntl.rst:153 +msgid "" +"*len* is the number of bytes to lock, *start* is the byte offset at which " +"the lock starts, relative to *whence*, and *whence* is as with " +":func:`io.IOBase.seek`, specifically:" +msgstr "" +"*len* 是要锁定的字节数,*start* 是自 *whence* 开始锁定的字节偏移量,*whence* 与 " +":func:`io.IOBase.seek` 的定义一样。" + +#: ../../library/fcntl.rst:157 +msgid ":const:`0` -- relative to the start of the file (:data:`os.SEEK_SET`)" +msgstr ":const:`0` —— 自文件起始位置(:data:`os.SEEK_SET`)。" + +#: ../../library/fcntl.rst:158 +msgid "" +":const:`1` -- relative to the current buffer position (:data:`os.SEEK_CUR`)" +msgstr ":const:`1` —— 自缓冲区当前位置( :data:`os.SEEK_CUR` )" + +#: ../../library/fcntl.rst:159 +msgid ":const:`2` -- relative to the end of the file (:data:`os.SEEK_END`)" +msgstr ":const:`2`—— 自文件末尾(:data:`os.SEEK_END`)" + +#: ../../library/fcntl.rst:161 +msgid "" +"The default for *start* is 0, which means to start at the beginning of the " +"file. The default for *len* is 0 which means to lock to the end of the file." +" The default for *whence* is also 0." +msgstr "" +"*start* 的默认值为 0,表示从文件起始位置开始。*len* 的默认值是 0,表示加锁至文件末尾。 *whence* 的默认值也是 0。" + +#: ../../library/fcntl.rst:165 +msgid "" +"Raises an :ref:`auditing event ` ``fcntl.lockf`` with arguments " +"``fd``, ``cmd``, ``len``, ``start``, ``whence``." +msgstr "" +"引发一个 :ref:`审计事件 ` ``fcntl.lockf`` 并附带参数 ``fd``, ``cmd``, ``len``, " +"``start``, ``whence``。" + +#: ../../library/fcntl.rst:167 +msgid "Examples (all on a SVR4 compliant system)::" +msgstr "示例(都是运行于符合 SVR4 的系统):" + +#: ../../library/fcntl.rst:177 +msgid "" +"Note that in the first example the return value variable *rv* will hold an " +"integer value; in the second example it will hold a :class:`bytes` object. " +"The structure lay-out for the *lockdata* variable is system dependent --- " +"therefore using the :func:`flock` call may be better." +msgstr "" +"注意,在第一个例子中,返回值变量 *rv* 将存有整数;在第二个例子中,该变量中将存有一个 :class:`bytes` 对象。*lockdata* " +"变量的结构布局视系统而定——因此采用 :func:`flock` 调用可能会更好。" + +#: ../../library/fcntl.rst:188 +msgid "Module :mod:`os`" +msgstr "模块 :mod:`os`" + +#: ../../library/fcntl.rst:186 +msgid "" +"If the locking flags :data:`~os.O_SHLOCK` and :data:`~os.O_EXLOCK` are " +"present in the :mod:`os` module (on BSD only), the :func:`os.open` function " +"provides an alternative to the :func:`lockf` and :func:`flock` functions." +msgstr "" +"如果 :mod:`os` 模块中存在加锁标志 :data:`~os.O_SHLOCK` 和 :data:`~os.O_EXLOCK` " +"(仅在BSD上),那么 :func:`os.open` 函数提供了 :func:`lockf` 和 :func:`flock` 函数的替代方案。" diff --git a/library/filecmp.po b/library/filecmp.po new file mode 100644 index 000000000..015588582 --- /dev/null +++ b/library/filecmp.po @@ -0,0 +1,250 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) 2001-2022, Python Software Foundation +# This file is distributed under the same license as the Python package. +# FIRST AUTHOR , YEAR. +# +# Translators: +# 胡谷歌 , 2019 +# Freesand Leo , 2021 +# +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: Python 3.9\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2022-11-04 14:34+0000\n" +"PO-Revision-Date: 2017-02-16 23:10+0000\n" +"Last-Translator: Freesand Leo , 2021\n" +"Language-Team: Chinese (China) (https://www.transifex.com/python-doc/teams/5390/zh_CN/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: zh_CN\n" +"Plural-Forms: nplurals=1; plural=0;\n" + +#: ../../library/filecmp.rst:2 +msgid ":mod:`filecmp` --- File and Directory Comparisons" +msgstr ":mod:`filecmp` --- 文件及目录的比较" + +#: ../../library/filecmp.rst:9 +msgid "**Source code:** :source:`Lib/filecmp.py`" +msgstr "**源代码:** :source:`Lib/filecmp.py`" + +#: ../../library/filecmp.rst:13 +msgid "" +"The :mod:`filecmp` module defines functions to compare files and " +"directories, with various optional time/correctness trade-offs. For " +"comparing files, see also the :mod:`difflib` module." +msgstr "" +":mod:`filecmp` 模块定义了用于比较文件及目录的函数,并且可以选取多种关于时间和准确性的折衷方案。对于文件的比较,另见 " +":mod:`difflib` 模块。" + +#: ../../library/filecmp.rst:17 +msgid "The :mod:`filecmp` module defines the following functions:" +msgstr ":mod:`filecmp` 模块定义了如下函数:" + +#: ../../library/filecmp.rst:22 +msgid "" +"Compare the files named *f1* and *f2*, returning ``True`` if they seem " +"equal, ``False`` otherwise." +msgstr "比较名为 *f1* 和 *f2* 的文件,如果它们似乎相等则返回 ``True`` ,否则返回 ``False`` 。" + +#: ../../library/filecmp.rst:25 +msgid "" +"If *shallow* is true and the :func:`os.stat` signatures (file type, size, " +"and modification time) of both files are identical, the files are taken to " +"be equal." +msgstr "" +"如果 *shallow* 为真值且两个文件的 :func:`os.stat` 签名信息(文件类型、大小和修改时间)一致,则文件会被视为相同。" + +#: ../../library/filecmp.rst:29 +msgid "" +"Otherwise, the files are treated as different if their sizes or contents " +"differ." +msgstr "在其他情况下,如果文件大小或内容不同则它们会被视为不同。" + +#: ../../library/filecmp.rst:31 +msgid "" +"Note that no external programs are called from this function, giving it " +"portability and efficiency." +msgstr "需要注意,没有外部程序被该函数调用,这赋予了该函数可移植性与效率。" + +#: ../../library/filecmp.rst:34 +msgid "" +"This function uses a cache for past comparisons and the results, with cache " +"entries invalidated if the :func:`os.stat` information for the file changes." +" The entire cache may be cleared using :func:`clear_cache`." +msgstr "" +"该函数会缓存过去的比较及其结果,且在文件的 :func:`os.stat` 信息变化后缓存条目失效。所有的缓存可以通过 " +":func:`clear_cache` 清除。" + +#: ../../library/filecmp.rst:41 +msgid "" +"Compare the files in the two directories *dir1* and *dir2* whose names are " +"given by *common*." +msgstr "比较在两个目录 *dir1* 和 *dir2* 中,由 *common* 所确定名称的文件。" + +#: ../../library/filecmp.rst:44 +msgid "" +"Returns three lists of file names: *match*, *mismatch*, *errors*. *match* " +"contains the list of files that match, *mismatch* contains the names of " +"those that don't, and *errors* lists the names of files which could not be " +"compared. Files are listed in *errors* if they don't exist in one of the " +"directories, the user lacks permission to read them or if the comparison " +"could not be done for some other reason." +msgstr "" +"返回三组文件名列表: *match*, *mismatch*, *errors* 。 *match* 含有相匹配的文件, *mismatch* " +"含有那些不匹配的,然后 *errors* " +"列出那些未被比较文件的名称。如果文件不存在于两目录中的任一个,或者用户缺少读取它们的权限,又或者因为其他的一些原因而无法比较,那么这些文件将会被列在 " +"*errors* 中。" + +#: ../../library/filecmp.rst:51 +msgid "" +"The *shallow* parameter has the same meaning and default value as for " +":func:`filecmp.cmp`." +msgstr "参数 *shallow* 具有同 :func:`filecmp.cmp` 一致的含义与默认值。" + +#: ../../library/filecmp.rst:54 +msgid "" +"For example, ``cmpfiles('a', 'b', ['c', 'd/e'])`` will compare ``a/c`` with " +"``b/c`` and ``a/d/e`` with ``b/d/e``. ``'c'`` and ``'d/e'`` will each be in" +" one of the three returned lists." +msgstr "" +"例如, ``cmpfiles('a', 'b', ['c', 'd/e'])`` 将会比较 ``a/c`` 与 ``b/c`` 以及 ``a/d/e``" +" 与 ``b/d/e`` 。 ``'c'`` 和 ``'d/e'`` 将会各自出现在返回的三个列表里的某一个列表中。" + +#: ../../library/filecmp.rst:61 +msgid "" +"Clear the filecmp cache. This may be useful if a file is compared so quickly" +" after it is modified that it is within the mtime resolution of the " +"underlying filesystem." +msgstr "清除 filecmp 缓存。如果一个文件过快地修改,以至于超过底层文件系统记录修改时间的精度,那么该函数可能有助于比较该类文件。" + +#: ../../library/filecmp.rst:71 +msgid "The :class:`dircmp` class" +msgstr ":class:`dircmp` 类" + +#: ../../library/filecmp.rst:75 +msgid "" +"Construct a new directory comparison object, to compare the directories *a* " +"and *b*. *ignore* is a list of names to ignore, and defaults to " +":attr:`filecmp.DEFAULT_IGNORES`. *hide* is a list of names to hide, and " +"defaults to ``[os.curdir, os.pardir]``." +msgstr "" +"创建一个用于比较目录 *a* 和 *b* 的新的目录比较对象。 *ignore* 是需要忽略的文件名列表,且默认为 " +":attr:`filecmp.DEFAULT_IGNORES` 。 *hide* 是需要隐藏的文件名列表,且默认为 ``[os.curdir, " +"os.pardir]`` 。" + +#: ../../library/filecmp.rst:80 +msgid "" +"The :class:`dircmp` class compares files by doing *shallow* comparisons as " +"described for :func:`filecmp.cmp`." +msgstr ":class:`dircmp` 类如 :func:`filecmp.cmp` 中所描述的那样对文件进行 *shallow* 比较。" + +#: ../../library/filecmp.rst:83 +msgid "The :class:`dircmp` class provides the following methods:" +msgstr ":class:`dircmp` 类提供以下方法:" + +#: ../../library/filecmp.rst:87 +msgid "Print (to :data:`sys.stdout`) a comparison between *a* and *b*." +msgstr "将 *a* 与 *b* 之间的比较打印(到 :data:`sys.stdout` )。" + +#: ../../library/filecmp.rst:91 +msgid "" +"Print a comparison between *a* and *b* and common immediate subdirectories." +msgstr "打印 *a* 与 *b* 及共同直接子目录的比较结果。" + +#: ../../library/filecmp.rst:96 +msgid "" +"Print a comparison between *a* and *b* and common subdirectories " +"(recursively)." +msgstr "打印 *a* 与 *b* 及共同子目录比较结果(递归地)。" + +#: ../../library/filecmp.rst:99 +msgid "" +"The :class:`dircmp` class offers a number of interesting attributes that may" +" be used to get various bits of information about the directory trees being " +"compared." +msgstr ":class:`dircmp` 类提供了一些有趣的属性,用以得到关于参与比较的目录树的各种信息。" + +#: ../../library/filecmp.rst:103 +msgid "" +"Note that via :meth:`__getattr__` hooks, all attributes are computed lazily," +" so there is no speed penalty if only those attributes which are lightweight" +" to compute are used." +msgstr "" +"需要注意,通过 :meth:`__getattr__` 钩子,所有的属性将会惰性求值,因此如果只使用那些计算简便的属性,将不会有速度损失。" + +#: ../../library/filecmp.rst:110 +msgid "The directory *a*." +msgstr "目录 *a* 。" + +#: ../../library/filecmp.rst:115 +msgid "The directory *b*." +msgstr "目录 *b* 。" + +#: ../../library/filecmp.rst:120 +msgid "Files and subdirectories in *a*, filtered by *hide* and *ignore*." +msgstr "经 *hide* 和 *ignore* 过滤,目录 *a* 中的文件与子目录。" + +#: ../../library/filecmp.rst:125 +msgid "Files and subdirectories in *b*, filtered by *hide* and *ignore*." +msgstr "经 *hide* 和 *ignore* 过滤,目录 *b* 中的文件与子目录。" + +#: ../../library/filecmp.rst:130 +msgid "Files and subdirectories in both *a* and *b*." +msgstr "同时存在于目录 *a* 和 *b* 中的文件和子目录。" + +#: ../../library/filecmp.rst:135 +msgid "Files and subdirectories only in *a*." +msgstr "仅在目录 *a* 中的文件和子目录。" + +#: ../../library/filecmp.rst:140 +msgid "Files and subdirectories only in *b*." +msgstr "仅在目录 *b* 中的文件和子目录。" + +#: ../../library/filecmp.rst:145 +msgid "Subdirectories in both *a* and *b*." +msgstr "同时存在于目录 *a* 和 *b* 中的子目录。" + +#: ../../library/filecmp.rst:150 +msgid "Files in both *a* and *b*." +msgstr "同时存在于目录 *a* 和 *b* 中的文件。" + +#: ../../library/filecmp.rst:155 +msgid "" +"Names in both *a* and *b*, such that the type differs between the " +"directories, or names for which :func:`os.stat` reports an error." +msgstr "在目录 *a* 和 *b* 中类型不同的名字,或者那些 :func:`os.stat` 报告错误的名字。" + +#: ../../library/filecmp.rst:161 +msgid "" +"Files which are identical in both *a* and *b*, using the class's file " +"comparison operator." +msgstr "在目录 *a* 和 *b* 中使用类的文件比较操作符相等的文件。" + +#: ../../library/filecmp.rst:167 +msgid "" +"Files which are in both *a* and *b*, whose contents differ according to the " +"class's file comparison operator." +msgstr "在目录 *a* 和 *b* 中,根据类的文件比较操作符判定内容不等的文件。" + +#: ../../library/filecmp.rst:173 +msgid "Files which are in both *a* and *b*, but could not be compared." +msgstr "在目录 *a* 和 *b* 中无法比较的文件。" + +#: ../../library/filecmp.rst:178 +msgid "" +"A dictionary mapping names in :attr:`common_dirs` to :class:`dircmp` " +"objects." +msgstr "一个将 :attr:`common_dirs` 中名称映射为 :class:`dircmp` 对象的字典。" + +#: ../../library/filecmp.rst:185 +msgid "List of directories ignored by :class:`dircmp` by default." +msgstr "默认被 :class:`dircmp` 忽略的目录列表。" + +#: ../../library/filecmp.rst:188 +msgid "" +"Here is a simplified example of using the ``subdirs`` attribute to search " +"recursively through two directories to show common different files::" +msgstr "下面是一个简单的例子,使用 ``subdirs`` 属性递归搜索两个目录以显示公共差异文件:" diff --git a/library/fileformats.po b/library/fileformats.po new file mode 100644 index 000000000..811e982c8 --- /dev/null +++ b/library/fileformats.po @@ -0,0 +1,32 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) 2001-2022, Python Software Foundation +# This file is distributed under the same license as the Python package. +# FIRST AUTHOR , YEAR. +# +# Translators: +# Alpha Du , 2019 +# +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: Python 3.9\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2022-11-04 14:34+0000\n" +"PO-Revision-Date: 2017-02-16 23:10+0000\n" +"Last-Translator: Alpha Du , 2019\n" +"Language-Team: Chinese (China) (https://www.transifex.com/python-doc/teams/5390/zh_CN/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: zh_CN\n" +"Plural-Forms: nplurals=1; plural=0;\n" + +#: ../../library/fileformats.rst:5 +msgid "File Formats" +msgstr "文件格式" + +#: ../../library/fileformats.rst:7 +msgid "" +"The modules described in this chapter parse various miscellaneous file " +"formats that aren't markup languages and are not related to e-mail." +msgstr "本章中描述的模块解析各种不是标记语言且与电子邮件无关的杂项文件格式。" diff --git a/library/fileinput.po b/library/fileinput.po new file mode 100644 index 000000000..52f9543e1 --- /dev/null +++ b/library/fileinput.po @@ -0,0 +1,321 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) 2001-2024, Python Software Foundation +# This file is distributed under the same license as the Python package. +# FIRST AUTHOR , YEAR. +# +# Translators: +# Freesand Leo , 2019 +# Rafael Fontenelle , 2024 +# +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: Python 3.9\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2024-02-16 21:12+0000\n" +"PO-Revision-Date: 2017-02-16 23:10+0000\n" +"Last-Translator: Rafael Fontenelle , 2024\n" +"Language-Team: Chinese (China) (https://app.transifex.com/python-doc/teams/5390/zh_CN/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: zh_CN\n" +"Plural-Forms: nplurals=1; plural=0;\n" + +#: ../../library/fileinput.rst:2 +msgid ":mod:`fileinput` --- Iterate over lines from multiple input streams" +msgstr ":mod:`fileinput` --- 迭代来自多个输入流的行" + +#: ../../library/fileinput.rst:10 +msgid "**Source code:** :source:`Lib/fileinput.py`" +msgstr "**源代码:** :source:`Lib/fileinput.py`" + +#: ../../library/fileinput.rst:14 +msgid "" +"This module implements a helper class and functions to quickly write a loop " +"over standard input or a list of files. If you just want to read or write " +"one file see :func:`open`." +msgstr "此模块实现了一个辅助类和一些函数用来快速编写访问标准输入或文件列表的循环。 如果你只想要读写一个文件请参阅 :func:`open`。" + +#: ../../library/fileinput.rst:18 +msgid "The typical use is::" +msgstr "典型用法为::" + +#: ../../library/fileinput.rst:24 +msgid "" +"This iterates over the lines of all files listed in ``sys.argv[1:]``, " +"defaulting to ``sys.stdin`` if the list is empty. If a filename is ``'-'``," +" it is also replaced by ``sys.stdin`` and the optional arguments *mode* and " +"*openhook* are ignored. To specify an alternative list of filenames, pass " +"it as the first argument to :func:`.input`. A single file name is also " +"allowed." +msgstr "" +"此程序会迭代 ``sys.argv[1:]`` 中列出的所有文件内的行,如果列表为空则会使用 ``sys.stdin``。 如果有一个文件名为 " +"``'-'``,它也会被替换为 ``sys.stdin`` 并且可选参数 *mode* 和 *openhook* 会被忽略。 " +"要指定替代文件列表,请将其作为第一个参数传给 :func:`.input`。 也允许使用单个文件。" + +#: ../../library/fileinput.rst:30 +msgid "" +"All files are opened in text mode by default, but you can override this by " +"specifying the *mode* parameter in the call to :func:`.input` or " +":class:`FileInput`. If an I/O error occurs during opening or reading a " +"file, :exc:`OSError` is raised." +msgstr "" +"所有文件都默认以文本模式打开,但你可以通过在调用 :func:`.input` 或 :class:`FileInput` 时指定 *mode* " +"形参来覆盖此行为。 如果在打开或读取文件时发生了 I/O 错误,将会引发 :exc:`OSError`。" + +#: ../../library/fileinput.rst:35 +msgid "" +":exc:`IOError` used to be raised; it is now an alias of :exc:`OSError`." +msgstr "原来会引发 :exc:`IOError`;现在它是 :exc:`OSError` 的别名。" + +#: ../../library/fileinput.rst:38 +msgid "" +"If ``sys.stdin`` is used more than once, the second and further use will " +"return no lines, except perhaps for interactive use, or if it has been " +"explicitly reset (e.g. using ``sys.stdin.seek(0)``)." +msgstr "" +"如果 ``sys.stdin`` 被使用超过一次,则第二次之后的使用将不返回任何行,除非是被交互式的使用,或都是被显式地重置 (例如使用 " +"``sys.stdin.seek(0)``)。" + +#: ../../library/fileinput.rst:42 +msgid "" +"Empty files are opened and immediately closed; the only time their presence " +"in the list of filenames is noticeable at all is when the last file opened " +"is empty." +msgstr "空文件打开后将立即被关闭;它们在文件列表中会被注意到的唯一情况只有当最后打开的文件为空的时候。" + +#: ../../library/fileinput.rst:46 +msgid "" +"Lines are returned with any newlines intact, which means that the last line " +"in a file may not have one." +msgstr "反回的行不会对换行符做任何处理,这意味着文件中的最后一行可能不带换行符。" + +#: ../../library/fileinput.rst:49 +msgid "" +"You can control how files are opened by providing an opening hook via the " +"*openhook* parameter to :func:`fileinput.input` or :class:`FileInput()`. The" +" hook must be a function that takes two arguments, *filename* and *mode*, " +"and returns an accordingly opened file-like object. Two useful hooks are " +"already provided by this module." +msgstr "" +"想要控制文件的打开方式,你可以通过将 *openhook* 形参传给 :func:`fileinput.input` 或 " +":class:`FileInput()` 来提供一个打开钩子。 此钩子必须为一个函数,它接受两个参数,*filename* 和 " +"*mode*,并返回一个以相应模式打开的文件类对象。 此模块已经提供了两个有用的钩子。" + +#: ../../library/fileinput.rst:55 +msgid "The following function is the primary interface of this module:" +msgstr "以下函数是此模块的初始接口:" + +#: ../../library/fileinput.rst:60 +msgid "" +"Create an instance of the :class:`FileInput` class. The instance will be " +"used as global state for the functions of this module, and is also returned " +"to use during iteration. The parameters to this function will be passed " +"along to the constructor of the :class:`FileInput` class." +msgstr "" +"创建一个 :class:`FileInput` 类的实例。 该实例将被用作此模块中函数的全局状态,并且还将在迭代期间被返回使用。 " +"此函数的形参将被继续传递给 :class:`FileInput` 类的构造器。" + +#: ../../library/fileinput.rst:65 +msgid "" +"The :class:`FileInput` instance can be used as a context manager in the " +":keyword:`with` statement. In this example, *input* is closed after the " +":keyword:`!with` statement is exited, even if an exception occurs::" +msgstr "" +":class:`FileInput` 实例可以在 :keyword:`with` 语句中被用作上下文管理器。 在这个例子中,*input* 在 " +":keyword:`!with` 语句结束后将会被关闭,即使发生了异常也是如此::" + +#: ../../library/fileinput.rst:73 ../../library/fileinput.rst:166 +msgid "Can be used as a context manager." +msgstr "可以被用作上下文管理器。" + +#: ../../library/fileinput.rst:76 +msgid "The keyword parameters *mode* and *openhook* are now keyword-only." +msgstr "关键字形参 *mode* 和 *openhook* 现在是仅限关键字形参。" + +#: ../../library/fileinput.rst:80 +msgid "" +"The following functions use the global state created by " +":func:`fileinput.input`; if there is no active state, :exc:`RuntimeError` is" +" raised." +msgstr "" +"下列函数会使用 :func:`fileinput.input` 所创建的全局状态;如果没有活动的状态,则会引发 :exc:`RuntimeError`。" + +#: ../../library/fileinput.rst:86 +msgid "" +"Return the name of the file currently being read. Before the first line has" +" been read, returns ``None``." +msgstr "返回当前被读取的文件名。 在第一行被读取之前,返回 ``None``。" + +#: ../../library/fileinput.rst:92 +msgid "" +"Return the integer \"file descriptor\" for the current file. When no file is" +" opened (before the first line and between files), returns ``-1``." +msgstr "返回以整数表示的当前文件“文件描述符”。 当未打开文件时(处在第一行和文件之间),返回 ``-1``。" + +#: ../../library/fileinput.rst:98 +msgid "" +"Return the cumulative line number of the line that has just been read. " +"Before the first line has been read, returns ``0``. After the last line of " +"the last file has been read, returns the line number of that line." +msgstr "返回已被读取的累计行号。 在第一行被读取之前,返回 ``0``。 在最后一个文件的最后一行被读取之后,返回该行的行号。" + +#: ../../library/fileinput.rst:105 +msgid "" +"Return the line number in the current file. Before the first line has been " +"read, returns ``0``. After the last line of the last file has been read, " +"returns the line number of that line within the file." +msgstr "返回当前文件中的行号。 在第一行被读取之前,返回 ``0``。 在最后一个文件的最后一行被读取之后,返回此文件中该行的行号。" + +#: ../../library/fileinput.rst:112 +msgid "" +"Return ``True`` if the line just read is the first line of its file, " +"otherwise return ``False``." +msgstr "如果刚读取的行是其所在文件的第一行则返回 ``True``,否则返回 ``False``。" + +#: ../../library/fileinput.rst:118 +msgid "" +"Return ``True`` if the last line was read from ``sys.stdin``, otherwise " +"return ``False``." +msgstr "如果最后读取的行来自 ``sys.stdin`` 则返回 ``True``,否则返回 ``False``。" + +#: ../../library/fileinput.rst:124 +msgid "" +"Close the current file so that the next iteration will read the first line " +"from the next file (if any); lines not read from the file will not count " +"towards the cumulative line count. The filename is not changed until after " +"the first line of the next file has been read. Before the first line has " +"been read, this function has no effect; it cannot be used to skip the first " +"file. After the last line of the last file has been read, this function has" +" no effect." +msgstr "" +"关闭当前文件以使下次迭代将从下一个文件(如果存在)读取第一行;不是从该文件读取的行将不会被计入累计行数。 " +"直到下一个文件的第一行被读取之后文件名才会改变。 在第一行被读取之前,此函数将不会生效;它不能被用来跳过第一个文件。 " +"在最后一个文件的最后一行被读取之后,此函数将不再生效。" + +#: ../../library/fileinput.rst:134 +msgid "Close the sequence." +msgstr "关闭序列。" + +#: ../../library/fileinput.rst:136 +msgid "" +"The class which implements the sequence behavior provided by the module is " +"available for subclassing as well:" +msgstr "此模块所提供的实现了序列行为的类同样也可用于子类化:" + +#: ../../library/fileinput.rst:142 +msgid "" +"Class :class:`FileInput` is the implementation; its methods " +":meth:`filename`, :meth:`fileno`, :meth:`lineno`, :meth:`filelineno`, " +":meth:`isfirstline`, :meth:`isstdin`, :meth:`nextfile` and :meth:`close` " +"correspond to the functions of the same name in the module. In addition it " +"has a :meth:`~io.TextIOBase.readline` method which returns the next input " +"line, and a :meth:`__getitem__` method which implements the sequence " +"behavior. The sequence must be accessed in strictly sequential order; random" +" access and :meth:`~io.TextIOBase.readline` cannot be mixed." +msgstr "" +"类 :class:`FileInput` 是一个实现;它的方法 :meth:`filename`, :meth:`fileno`, " +":meth:`lineno`, :meth:`filelineno`, :meth:`isfirstline`, :meth:`isstdin`, " +":meth:`nextfile` 和 :meth:`close` 对应于此模块中具有相同名称的函数。 此外它还有一个 " +":meth:`~io.TextIOBase.readline` 方法可返回下一个输入行,以及一个 :meth:`__getitem__` " +"方法,该方法实现了序列行为。 这种序列必须以严格的序列顺序来读写;随机读写和 :meth:`~io.TextIOBase.readline` " +"不可以被混用。" + +#: ../../library/fileinput.rst:151 +msgid "" +"With *mode* you can specify which file mode will be passed to :func:`open`. " +"It must be one of ``'r'``, ``'rU'``, ``'U'`` and ``'rb'``." +msgstr "" +"通过 *mode* 你可以指定要传给 :func:`open` 的文件模式。 它必须为 ``'r'``, ``'rU'``, ``'U'`` 和 " +"``'rb'`` 中的一个。" + +#: ../../library/fileinput.rst:154 +msgid "" +"The *openhook*, when given, must be a function that takes two arguments, " +"*filename* and *mode*, and returns an accordingly opened file-like object. " +"You cannot use *inplace* and *openhook* together." +msgstr "" +"*openhook* 如果给出则必须为一个函数,它接受两个参数 *filename* 和 *mode*,并相应地返回一个打开的文件型对象。 " +"你不能同时使用 *inplace* 和 *openhook*。" + +#: ../../library/fileinput.rst:158 +msgid "" +"A :class:`FileInput` instance can be used as a context manager in the " +":keyword:`with` statement. In this example, *input* is closed after the " +":keyword:`!with` statement is exited, even if an exception occurs::" +msgstr "" +":class:`FileInput` 实例可以在 :keyword:`with` 语句中被用作上下文管理器。 在这个例子中,*input* 在 " +":keyword:`!with` 语句结束后将会被关闭,即使发生了异常也是如此::" + +#: ../../library/fileinput.rst:169 +msgid "The ``'rU'`` and ``'U'`` modes." +msgstr "``'rU'`` 和 ``'U'`` 模式。" + +#: ../../library/fileinput.rst:172 +msgid "Support for :meth:`__getitem__` method is deprecated." +msgstr "对 :meth:`__getitem__` 方法的支持已弃用。" + +#: ../../library/fileinput.rst:175 +msgid "The keyword parameter *mode* and *openhook* are now keyword-only." +msgstr "关键字形参 *mode* 和 *openhook* 现在是仅限关键字形参。" + +#: ../../library/fileinput.rst:180 +msgid "" +"**Optional in-place filtering:** if the keyword argument ``inplace=True`` is" +" passed to :func:`fileinput.input` or to the :class:`FileInput` constructor," +" the file is moved to a backup file and standard output is directed to the " +"input file (if a file of the same name as the backup file already exists, it" +" will be replaced silently). This makes it possible to write a filter that " +"rewrites its input file in place. If the *backup* parameter is given " +"(typically as ``backup='.'``), it specifies the extension " +"for the backup file, and the backup file remains around; by default, the " +"extension is ``'.bak'`` and it is deleted when the output file is closed. " +"In-place filtering is disabled when standard input is read." +msgstr "" +"**可选的原地过滤:** 如果传递了关键字参数 ``inplace=True`` 给 :func:`fileinput.input` 或 " +":class:`FileInput` 构造器,则文件会被移至备份文件并将标准输出定向到输入文件(如果已存在与备份文件同名的文件,它将被静默地替换)。 " +"这使得编写一个能够原地重写其输入文件的过滤器成为可能。 如果给出了 *backup* 形参 (通常形式为 ``backup='.'``),它将指定备份文件的扩展名,并且备份文件会被保留;默认情况下扩展名为 ``'.bak'`` 并且它会在输出文件关闭时被删除。" +" 在读取标准输入时原地过滤会被禁用。" + +#: ../../library/fileinput.rst:192 +msgid "The two following opening hooks are provided by this module:" +msgstr "此模块提供了以下两种打开文件钩子:" + +#: ../../library/fileinput.rst:196 +msgid "" +"Transparently opens files compressed with gzip and bzip2 (recognized by the " +"extensions ``'.gz'`` and ``'.bz2'``) using the :mod:`gzip` and :mod:`bz2` " +"modules. If the filename extension is not ``'.gz'`` or ``'.bz2'``, the file" +" is opened normally (ie, using :func:`open` without any decompression)." +msgstr "" +"使用 :mod:`gzip` 和 :mod:`bz2` 模块透明地打开 gzip 和 bzip2 压缩的文件(通过扩展名 ``'.gz'`` 和 " +"``'.bz2'`` 来识别)。 如果文件扩展名不是 ``'.gz'`` 或 ``'.bz2'``,文件会以正常方式打开(即使用 " +":func:`open` 并且不带任何解压操作)。" + +#: ../../library/fileinput.rst:201 +msgid "" +"Usage example: ``fi = " +"fileinput.FileInput(openhook=fileinput.hook_compressed)``" +msgstr "" +"使用示例: ``fi = fileinput.FileInput(openhook=fileinput.hook_compressed)``" + +#: ../../library/fileinput.rst:206 +msgid "" +"Returns a hook which opens each file with :func:`open`, using the given " +"*encoding* and *errors* to read the file." +msgstr "返回一个通过 :func:`open` 打开每个文件的钩子,使用给定的 *encoding* 和 *errors* 来读取文件。" + +#: ../../library/fileinput.rst:209 +msgid "" +"Usage example: ``fi = " +"fileinput.FileInput(openhook=fileinput.hook_encoded(\"utf-8\", " +"\"surrogateescape\"))``" +msgstr "" +"使用示例: ``fi = fileinput.FileInput(openhook=fileinput.hook_encoded(\"utf-8\", " +"\"surrogateescape\"))``" + +#: ../../library/fileinput.rst:213 +msgid "Added the optional *errors* parameter." +msgstr "添加了可选的 *errors* 形参。" diff --git a/library/filesys.po b/library/filesys.po new file mode 100644 index 000000000..c44b6fbad --- /dev/null +++ b/library/filesys.po @@ -0,0 +1,64 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) 2001-2022, Python Software Foundation +# This file is distributed under the same license as the Python package. +# FIRST AUTHOR , YEAR. +# +# Translators: +# Alpha Du , 2019 +# Freesand Leo , 2019 +# +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: Python 3.9\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2022-11-04 14:34+0000\n" +"PO-Revision-Date: 2017-02-16 23:10+0000\n" +"Last-Translator: Freesand Leo , 2019\n" +"Language-Team: Chinese (China) (https://www.transifex.com/python-doc/teams/5390/zh_CN/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: zh_CN\n" +"Plural-Forms: nplurals=1; plural=0;\n" + +#: ../../library/filesys.rst:5 +msgid "File and Directory Access" +msgstr "文件和目录访问" + +#: ../../library/filesys.rst:7 +msgid "" +"The modules described in this chapter deal with disk files and directories." +" For example, there are modules for reading the properties of files, " +"manipulating paths in a portable way, and creating temporary files. The " +"full list of modules in this chapter is:" +msgstr "" +"本章中描述的模块处理磁盘文件和目录。 例如,有一些模块用于读取文件的属性,以可移植的方式操作路径以及创建临时文件。 本章的完整模块列表如下:" + +#: ../../library/filesys.rst:31 +msgid "Module :mod:`os`" +msgstr "模块 :mod:`os`" + +#: ../../library/filesys.rst:30 +msgid "" +"Operating system interfaces, including functions to work with files at a " +"lower level than Python :term:`file objects `." +msgstr "操作系统接口,包括处理比 Python :term:`文件对象 ` 更低级别文件的功能。" + +#: ../../library/filesys.rst:35 +msgid "Module :mod:`io`" +msgstr "模块 :mod:`io`" + +#: ../../library/filesys.rst:34 +msgid "" +"Python's built-in I/O library, including both abstract classes and some " +"concrete classes such as file I/O." +msgstr "Python的内置 I/O 库,包括抽象类和一些具体的类,如文件 I/O 。" + +#: ../../library/filesys.rst:37 +msgid "Built-in function :func:`open`" +msgstr "内置函数 :func:`open`" + +#: ../../library/filesys.rst:38 +msgid "The standard way to open files for reading and writing with Python." +msgstr "使用 Python 打开文件进行读写的标准方法。" diff --git a/library/fnmatch.po b/library/fnmatch.po new file mode 100644 index 000000000..97c52335e --- /dev/null +++ b/library/fnmatch.po @@ -0,0 +1,154 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) 2001-2022, Python Software Foundation +# This file is distributed under the same license as the Python package. +# FIRST AUTHOR , YEAR. +# +# Translators: +# 操旭 , 2017 +# dannyvi , 2018 +# ppcfish , 2019 +# Freesand Leo , 2022 +# +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: Python 3.9\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2022-11-04 14:34+0000\n" +"PO-Revision-Date: 2017-02-16 23:10+0000\n" +"Last-Translator: Freesand Leo , 2022\n" +"Language-Team: Chinese (China) (https://www.transifex.com/python-doc/teams/5390/zh_CN/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: zh_CN\n" +"Plural-Forms: nplurals=1; plural=0;\n" + +#: ../../library/fnmatch.rst:2 +msgid ":mod:`fnmatch` --- Unix filename pattern matching" +msgstr ":mod:`fnmatch` --- Unix 文件名模式匹配" + +#: ../../library/fnmatch.rst:7 +msgid "**Source code:** :source:`Lib/fnmatch.py`" +msgstr "**源代码:** :source:`Lib/fnmatch.py`" + +#: ../../library/fnmatch.rst:15 +msgid "" +"This module provides support for Unix shell-style wildcards, which are *not*" +" the same as regular expressions (which are documented in the :mod:`re` " +"module). The special characters used in shell-style wildcards are:" +msgstr "" +"此模块提供了 Unix shell 风格的通配符,它们 *并不* 等同于正则表达式(关于后者的文档参见 :mod:`re` 模块)。 shell " +"风格通配符所使用的特殊字符如下:" + +#: ../../library/fnmatch.rst:27 +msgid "Pattern" +msgstr "模式" + +#: ../../library/fnmatch.rst:27 +msgid "Meaning" +msgstr "意义" + +#: ../../library/fnmatch.rst:29 +msgid "``*``" +msgstr "``*``" + +#: ../../library/fnmatch.rst:29 +msgid "matches everything" +msgstr "匹配所有" + +#: ../../library/fnmatch.rst:31 +msgid "``?``" +msgstr "``?``" + +#: ../../library/fnmatch.rst:31 +msgid "matches any single character" +msgstr "匹配任何单个字符" + +#: ../../library/fnmatch.rst:33 +msgid "``[seq]``" +msgstr "``[seq]``" + +#: ../../library/fnmatch.rst:33 +msgid "matches any character in *seq*" +msgstr "匹配 *seq* 中的任何字符" + +#: ../../library/fnmatch.rst:35 +msgid "``[!seq]``" +msgstr "``[!seq]``" + +#: ../../library/fnmatch.rst:35 +msgid "matches any character not in *seq*" +msgstr "匹配任何不在 *seq* 中的字符" + +#: ../../library/fnmatch.rst:38 +msgid "" +"For a literal match, wrap the meta-characters in brackets. For example, " +"``'[?]'`` matches the character ``'?'``." +msgstr "对于字面值匹配,请将原字符用方括号括起来。 例如,``'[?]'`` 将匹配字符 ``'?'``。" + +#: ../../library/fnmatch.rst:43 +msgid "" +"Note that the filename separator (``'/'`` on Unix) is *not* special to this " +"module. See module :mod:`glob` for pathname expansion (:mod:`glob` uses " +":func:`.filter` to match pathname segments). Similarly, filenames starting " +"with a period are not special for this module, and are matched by the ``*`` " +"and ``?`` patterns." +msgstr "" +"注意文件名分隔符 (Unix 上为 ``'/'``) *不会* 被此模块特别对待。 请参见 :mod:`glob` 模块了解文件名扩展 " +"(:mod:`glob` 使用 :func:`.filter` 来匹配文件名的各个部分)。 " +"类似地,以一个句点打头的文件名也不会被此模块特别对待,可以通过 ``*`` 和 ``?`` 模式来匹配。" + +#: ../../library/fnmatch.rst:52 +msgid "" +"Test whether the *filename* string matches the *pattern* string, returning " +":const:`True` or :const:`False`. Both parameters are case-normalized using " +":func:`os.path.normcase`. :func:`fnmatchcase` can be used to perform a case-" +"sensitive comparison, regardless of whether that's standard for the " +"operating system." +msgstr "" +"检测 *filename* 字符串是否匹配 *pattern* 字符串,返回 :const:`True` 或 :const:`False`。 " +"两个形参都会使用 :func:`os.path.normcase` 进行大小写正规化。 :func:`fnmatchcase` " +"可被用于执行大小写敏感的比较,无论这是否为所在操作系统的标准。" + +#: ../../library/fnmatch.rst:58 +msgid "" +"This example will print all file names in the current directory with the " +"extension ``.txt``::" +msgstr "这个例子将打印当前目录下带有扩展名 ``.txt`` 的所有文件名::" + +#: ../../library/fnmatch.rst:71 +msgid "" +"Test whether *filename* matches *pattern*, returning :const:`True` or " +":const:`False`; the comparison is case-sensitive and does not apply " +":func:`os.path.normcase`." +msgstr "" +"检测 *filename* 是否匹配 *pattern*,返回 :const:`True` 或 " +":const:`False`;此比较是大小写敏感的,并且不会应用 :func:`os.path.normcase`。" + +#: ../../library/fnmatch.rst:78 +msgid "" +"Construct a list from those elements of the iterable *names* that match " +"*pattern*. It is the same as ``[n for n in names if fnmatch(n, pattern)]``, " +"but implemented more efficiently." +msgstr "" +"基于可迭代对象 *names* 中匹配 *pattern* 的元素构造一个列表。 它等价于 ``[n for n in names if " +"fnmatch(n, pattern)]``,但实现得更有效率。" + +#: ../../library/fnmatch.rst:84 +msgid "" +"Return the shell-style *pattern* converted to a regular expression for using" +" with :func:`re.match`." +msgstr "返回 shell 风格 *pattern* 转换成的正则表达式以便用于 :func:`re.match`。" + +#: ../../library/fnmatch.rst:87 +msgid "Example:" +msgstr "示例:" + +#: ../../library/fnmatch.rst:101 +msgid "Module :mod:`glob`" +msgstr "模块 :mod:`glob`" + +#: ../../library/fnmatch.rst:102 +msgid "Unix shell-style path expansion." +msgstr "Unix shell 风格路径扩展。" diff --git a/library/formatter.po b/library/formatter.po new file mode 100644 index 000000000..f0deb283d --- /dev/null +++ b/library/formatter.po @@ -0,0 +1,388 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) 2001-2022, Python Software Foundation +# This file is distributed under the same license as the Python package. +# FIRST AUTHOR , YEAR. +# +# Translators: +# 君 码侬 , 2020 +# +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: Python 3.9\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2022-11-04 14:34+0000\n" +"PO-Revision-Date: 2017-02-16 23:11+0000\n" +"Last-Translator: 君 码侬 , 2020\n" +"Language-Team: Chinese (China) (https://www.transifex.com/python-doc/teams/5390/zh_CN/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: zh_CN\n" +"Plural-Forms: nplurals=1; plural=0;\n" + +#: ../../library/formatter.rst:2 +msgid ":mod:`formatter` --- Generic output formatting" +msgstr ":mod:`formatter` --- 通用格式化输出" + +#: ../../library/formatter.rst:8 +msgid "Due to lack of usage, the formatter module has been deprecated." +msgstr "因为被使用的次数很少,此格式化模块已经被弃用了。" + +#: ../../library/formatter.rst:13 +msgid "" +"This module supports two interface definitions, each with multiple " +"implementations: The *formatter* interface, and the *writer* interface which" +" is required by the formatter interface." +msgstr "" + +#: ../../library/formatter.rst:17 +msgid "" +"Formatter objects transform an abstract flow of formatting events into " +"specific output events on writer objects. Formatters manage several stack " +"structures to allow various properties of a writer object to be changed and " +"restored; writers need not be able to handle relative changes nor any sort " +"of \"change back\" operation. Specific writer properties which may be " +"controlled via formatter objects are horizontal alignment, font, and left " +"margin indentations. A mechanism is provided which supports providing " +"arbitrary, non-exclusive style settings to a writer as well. Additional " +"interfaces facilitate formatting events which are not reversible, such as " +"paragraph separation." +msgstr "" + +#: ../../library/formatter.rst:27 +msgid "" +"Writer objects encapsulate device interfaces. Abstract devices, such as " +"file formats, are supported as well as physical devices. The provided " +"implementations all work with abstract devices. The interface makes " +"available mechanisms for setting the properties which formatter objects " +"manage and inserting data into the output." +msgstr "" + +#: ../../library/formatter.rst:37 +msgid "The Formatter Interface" +msgstr "" + +#: ../../library/formatter.rst:39 +msgid "" +"Interfaces to create formatters are dependent on the specific formatter " +"class being instantiated. The interfaces described below are the required " +"interfaces which all formatters must support once initialized." +msgstr "" + +#: ../../library/formatter.rst:43 +msgid "One data element is defined at the module level:" +msgstr "" + +#: ../../library/formatter.rst:48 +msgid "" +"Value which can be used in the font specification passed to the " +"``push_font()`` method described below, or as the new value to any other " +"``push_property()`` method. Pushing the ``AS_IS`` value allows the " +"corresponding ``pop_property()`` method to be called without having to track" +" whether the property was changed." +msgstr "" + +#: ../../library/formatter.rst:53 +msgid "The following attributes are defined for formatter instance objects:" +msgstr "" + +#: ../../library/formatter.rst:58 +msgid "The writer instance with which the formatter interacts." +msgstr "" + +#: ../../library/formatter.rst:63 +msgid "" +"Close any open paragraphs and insert at least *blanklines* before the next " +"paragraph." +msgstr "" + +#: ../../library/formatter.rst:69 +msgid "" +"Add a hard line break if one does not already exist. This does not break " +"the logical paragraph." +msgstr "" + +#: ../../library/formatter.rst:75 +msgid "" +"Insert a horizontal rule in the output. A hard break is inserted if there " +"is data in the current paragraph, but the logical paragraph is not broken. " +"The arguments and keywords are passed on to the writer's " +":meth:`send_line_break` method." +msgstr "" + +#: ../../library/formatter.rst:83 +msgid "" +"Provide data which should be formatted with collapsed whitespace. Whitespace" +" from preceding and successive calls to :meth:`add_flowing_data` is " +"considered as well when the whitespace collapse is performed. The data " +"which is passed to this method is expected to be word-wrapped by the output " +"device. Note that any word-wrapping still must be performed by the writer " +"object due to the need to rely on device and font information." +msgstr "" + +#: ../../library/formatter.rst:93 +msgid "" +"Provide data which should be passed to the writer unchanged. Whitespace, " +"including newline and tab characters, are considered legal in the value of " +"*data*." +msgstr "" + +#: ../../library/formatter.rst:100 +msgid "" +"Insert a label which should be placed to the left of the current left " +"margin. This should be used for constructing bulleted or numbered lists. If" +" the *format* value is a string, it is interpreted as a format specification" +" for *counter*, which should be an integer. The result of this formatting " +"becomes the value of the label; if *format* is not a string it is used as " +"the label value directly. The label value is passed as the only argument to " +"the writer's :meth:`send_label_data` method. Interpretation of non-string " +"label values is dependent on the associated writer." +msgstr "" + +#: ../../library/formatter.rst:109 +msgid "" +"Format specifications are strings which, in combination with a counter " +"value, are used to compute label values. Each character in the format " +"string is copied to the label value, with some characters recognized to " +"indicate a transform on the counter value. Specifically, the character " +"``'1'`` represents the counter value formatter as an Arabic number, the " +"characters ``'A'`` and ``'a'`` represent alphabetic representations of the " +"counter value in upper and lower case, respectively, and ``'I'`` and ``'i'``" +" represent the counter value in Roman numerals, in upper and lower case. " +"Note that the alphabetic and roman transforms require that the counter value" +" be greater than zero." +msgstr "" + +#: ../../library/formatter.rst:122 +msgid "" +"Send any pending whitespace buffered from a previous call to " +":meth:`add_flowing_data` to the associated writer object. This should be " +"called before any direct manipulation of the writer object." +msgstr "" + +#: ../../library/formatter.rst:129 +msgid "" +"Push a new alignment setting onto the alignment stack. This may be " +":const:`AS_IS` if no change is desired. If the alignment value is changed " +"from the previous setting, the writer's :meth:`new_alignment` method is " +"called with the *align* value." +msgstr "" + +#: ../../library/formatter.rst:137 +msgid "Restore the previous alignment." +msgstr "" + +#: ../../library/formatter.rst:142 +msgid "" +"Change some or all font properties of the writer object. Properties which " +"are not set to :const:`AS_IS` are set to the values passed in while others " +"are maintained at their current settings. The writer's :meth:`new_font` " +"method is called with the fully resolved font specification." +msgstr "" + +#: ../../library/formatter.rst:150 +msgid "Restore the previous font." +msgstr "" + +#: ../../library/formatter.rst:155 +msgid "" +"Increase the number of left margin indentations by one, associating the " +"logical tag *margin* with the new indentation. The initial margin level is " +"``0``. Changed values of the logical tag must be true values; false values " +"other than :const:`AS_IS` are not sufficient to change the margin." +msgstr "" + +#: ../../library/formatter.rst:163 +msgid "Restore the previous margin." +msgstr "" + +#: ../../library/formatter.rst:168 +msgid "" +"Push any number of arbitrary style specifications. All styles are pushed " +"onto the styles stack in order. A tuple representing the entire stack, " +"including :const:`AS_IS` values, is passed to the writer's " +":meth:`new_styles` method." +msgstr "" + +#: ../../library/formatter.rst:175 +msgid "" +"Pop the last *n* style specifications passed to :meth:`push_style`. A tuple" +" representing the revised stack, including :const:`AS_IS` values, is passed " +"to the writer's :meth:`new_styles` method." +msgstr "" + +#: ../../library/formatter.rst:182 +msgid "Set the spacing style for the writer." +msgstr "" + +#: ../../library/formatter.rst:187 +msgid "" +"Inform the formatter that data has been added to the current paragraph out-" +"of-band. This should be used when the writer has been manipulated directly." +" The optional *flag* argument can be set to false if the writer " +"manipulations produced a hard line break at the end of the output." +msgstr "" + +#: ../../library/formatter.rst:196 +msgid "Formatter Implementations" +msgstr "" + +#: ../../library/formatter.rst:198 +msgid "" +"Two implementations of formatter objects are provided by this module. Most " +"applications may use one of these classes without modification or " +"subclassing." +msgstr "" + +#: ../../library/formatter.rst:204 +msgid "" +"A formatter which does nothing. If *writer* is omitted, a " +":class:`NullWriter` instance is created. No methods of the writer are " +"called by :class:`NullFormatter` instances. Implementations should inherit " +"from this class if implementing a writer interface but don't need to inherit" +" any implementation." +msgstr "" + +#: ../../library/formatter.rst:213 +msgid "" +"The standard formatter. This implementation has demonstrated wide " +"applicability to many writers, and may be used directly in most " +"circumstances. It has been used to implement a full-featured World Wide Web" +" browser." +msgstr "" + +#: ../../library/formatter.rst:221 +msgid "The Writer Interface" +msgstr "" + +#: ../../library/formatter.rst:223 +msgid "" +"Interfaces to create writers are dependent on the specific writer class " +"being instantiated. The interfaces described below are the required " +"interfaces which all writers must support once initialized. Note that while " +"most applications can use the :class:`AbstractFormatter` class as a " +"formatter, the writer must typically be provided by the application." +msgstr "" + +#: ../../library/formatter.rst:232 +msgid "Flush any buffered output or device control events." +msgstr "" + +#: ../../library/formatter.rst:237 +msgid "" +"Set the alignment style. The *align* value can be any object, but by " +"convention is a string or ``None``, where ``None`` indicates that the " +"writer's \"preferred\" alignment should be used. Conventional *align* values" +" are ``'left'``, ``'center'``, ``'right'``, and ``'justify'``." +msgstr "" + +#: ../../library/formatter.rst:245 +msgid "" +"Set the font style. The value of *font* will be ``None``, indicating that " +"the device's default font should be used, or a tuple of the form ``(size, " +"italic, bold, teletype)``. Size will be a string indicating the size of " +"font that should be used; specific strings and their interpretation must be " +"defined by the application. The *italic*, *bold*, and *teletype* values are" +" Boolean values specifying which of those font attributes should be used." +msgstr "" + +#: ../../library/formatter.rst:255 +msgid "" +"Set the margin level to the integer *level* and the logical tag to *margin*." +" Interpretation of the logical tag is at the writer's discretion; the only " +"restriction on the value of the logical tag is that it not be a false value " +"for non-zero values of *level*." +msgstr "" + +#: ../../library/formatter.rst:263 +msgid "Set the spacing style to *spacing*." +msgstr "" + +#: ../../library/formatter.rst:268 +msgid "" +"Set additional styles. The *styles* value is a tuple of arbitrary values; " +"the value :const:`AS_IS` should be ignored. The *styles* tuple may be " +"interpreted either as a set or as a stack depending on the requirements of " +"the application and writer implementation." +msgstr "" + +#: ../../library/formatter.rst:276 +msgid "Break the current line." +msgstr "" + +#: ../../library/formatter.rst:281 +msgid "" +"Produce a paragraph separation of at least *blankline* blank lines, or the " +"equivalent. The *blankline* value will be an integer. Note that the " +"implementation will receive a call to :meth:`send_line_break` before this " +"call if a line break is needed; this method should not include ending the " +"last line of the paragraph. It is only responsible for vertical spacing " +"between paragraphs." +msgstr "" + +#: ../../library/formatter.rst:291 +msgid "" +"Display a horizontal rule on the output device. The arguments to this " +"method are entirely application- and writer-specific, and should be " +"interpreted with care. The method implementation may assume that a line " +"break has already been issued via :meth:`send_line_break`." +msgstr "" + +#: ../../library/formatter.rst:299 +msgid "" +"Output character data which may be word-wrapped and re-flowed as needed. " +"Within any sequence of calls to this method, the writer may assume that " +"spans of multiple whitespace characters have been collapsed to single space " +"characters." +msgstr "" + +#: ../../library/formatter.rst:306 +msgid "" +"Output character data which has already been formatted for display. " +"Generally, this should be interpreted to mean that line breaks indicated by " +"newline characters should be preserved and no new line breaks should be " +"introduced. The data may contain embedded newline and tab characters, " +"unlike data provided to the :meth:`send_formatted_data` interface." +msgstr "" + +#: ../../library/formatter.rst:315 +msgid "" +"Set *data* to the left of the current left margin, if possible. The value of" +" *data* is not restricted; treatment of non-string values is entirely " +"application- and writer-dependent. This method will only be called at the " +"beginning of a line." +msgstr "" + +#: ../../library/formatter.rst:324 +msgid "Writer Implementations" +msgstr "" + +#: ../../library/formatter.rst:326 +msgid "" +"Three implementations of the writer object interface are provided as " +"examples by this module. Most applications will need to derive new writer " +"classes from the :class:`NullWriter` class." +msgstr "" + +#: ../../library/formatter.rst:333 +msgid "" +"A writer which only provides the interface definition; no actions are taken " +"on any methods. This should be the base class for all writers which do not " +"need to inherit any implementation methods." +msgstr "" + +#: ../../library/formatter.rst:340 +msgid "" +"A writer which can be used in debugging formatters, but not much else. Each" +" method simply announces itself by printing its name and arguments on " +"standard output." +msgstr "" + +#: ../../library/formatter.rst:347 +msgid "" +"Simple writer class which writes output on the :term:`file object` passed in" +" as *file* or, if *file* is omitted, on standard output. The output is " +"simply word-wrapped to the number of columns specified by *maxcol*. This " +"class is suitable for reflowing a sequence of paragraphs." +msgstr "" diff --git a/library/fractions.po b/library/fractions.po new file mode 100644 index 000000000..9e51f69b4 --- /dev/null +++ b/library/fractions.po @@ -0,0 +1,199 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) 2001-2022, Python Software Foundation +# This file is distributed under the same license as the Python package. +# FIRST AUTHOR , YEAR. +# +# Translators: +# Zhe He , 2019 +# Dingyuan Wang , 2019 +# Freesand Leo , 2020 +# +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: Python 3.9\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2022-11-04 14:34+0000\n" +"PO-Revision-Date: 2017-02-16 23:11+0000\n" +"Last-Translator: Freesand Leo , 2020\n" +"Language-Team: Chinese (China) (https://www.transifex.com/python-doc/teams/5390/zh_CN/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: zh_CN\n" +"Plural-Forms: nplurals=1; plural=0;\n" + +#: ../../library/fractions.rst:2 +msgid ":mod:`fractions` --- Rational numbers" +msgstr ":mod:`fractions` --- 分数" + +#: ../../library/fractions.rst:10 +msgid "**Source code:** :source:`Lib/fractions.py`" +msgstr "**源代码** :source:`Lib/fractions.py`" + +#: ../../library/fractions.rst:14 +msgid "" +"The :mod:`fractions` module provides support for rational number arithmetic." +msgstr ":mod:`fractions` 模块支持分数运算。" + +#: ../../library/fractions.rst:17 +msgid "" +"A Fraction instance can be constructed from a pair of integers, from another" +" rational number, or from a string." +msgstr "分数实例可以由一对整数,一个分数,或者一个字符串构建而成。" + +#: ../../library/fractions.rst:26 +msgid "" +"The first version requires that *numerator* and *denominator* are instances " +"of :class:`numbers.Rational` and returns a new :class:`Fraction` instance " +"with value ``numerator/denominator``. If *denominator* is :const:`0`, it " +"raises a :exc:`ZeroDivisionError`. The second version requires that " +"*other_fraction* is an instance of :class:`numbers.Rational` and returns a " +":class:`Fraction` instance with the same value. The next two versions " +"accept either a :class:`float` or a :class:`decimal.Decimal` instance, and " +"return a :class:`Fraction` instance with exactly the same value. Note that " +"due to the usual issues with binary floating-point (see :ref:`tut-fp-" +"issues`), the argument to ``Fraction(1.1)`` is not exactly equal to 11/10, " +"and so ``Fraction(1.1)`` does *not* return ``Fraction(11, 10)`` as one might" +" expect. (But see the documentation for the :meth:`limit_denominator` method" +" below.) The last version of the constructor expects a string or unicode " +"instance. The usual form for this instance is::" +msgstr "" +"第一个版本要求 *numerator* 和 *denominator* 是 :class:`numbers.Rational` 的实例,并返回一个新的 " +":class:`Fraction` 实例,其值为 ``numerator/denominator``。 如果 *denominator* 为 " +":const:`0` 将会引发 :exc:`ZeroDivisionError`。 第二个版本要求 *other_fraction* 是 " +":class:`numbers.Rational` 的实例,并返回一个 :class:`Fraction` 实例且与传入值相等。 下两个版本接受 " +":class:`float` 或 :class:`decimal.Decimal` 的实例,并返回一个 :class:`Fraction` " +"实例且与传入值完全相等。 请注意由于二进制浮点数通常存在的问题 (参见 :ref:`tut-fp-issues`),``Fraction(1.1)`` " +"的参数并不会精确等于 11/10,因此 ``Fraction(1.1)`` 也 *不会* 返回用户所期望的 ``Fraction(11, 10)``。 " +"(请参阅下文中 :meth:`limit_denominator` 方法的文档。) 构造器的最后一个版本接受一个字符串或 unicode 实例。 " +"此实例的通常形式为::" + +#: ../../library/fractions.rst:43 +msgid "" +"where the optional ``sign`` may be either '+' or '-' and ``numerator`` and " +"``denominator`` (if present) are strings of decimal digits. In addition, " +"any string that represents a finite value and is accepted by the " +":class:`float` constructor is also accepted by the :class:`Fraction` " +"constructor. In either form the input string may also have leading and/or " +"trailing whitespace. Here are some examples::" +msgstr "" +"其中的可选项 ``sign`` 可以为 '+' 或 '-' 并且 ``numerator`` 和 ``denominator`` (如果存在) " +"是十进制数码的字符串。 此外,:class:`float` 构造器所接受的任何表示一个有限值的字符串也都为 :class:`Fraction` " +"构造器所接受。 不论哪种形式的输入字符串也都可以带有前缀和/或后缀的空格符。 这里是一些示例::" + +#: ../../library/fractions.rst:77 +msgid "" +"The :class:`Fraction` class inherits from the abstract base class " +":class:`numbers.Rational`, and implements all of the methods and operations " +"from that class. :class:`Fraction` instances are hashable, and should be " +"treated as immutable. In addition, :class:`Fraction` has the following " +"properties and methods:" +msgstr "" +":class:`Fraction` 类继承自抽象基类 :class:`numbers.Rational`,并实现了该类的所有方法和操作。 " +":class:`Fraction` 实例是可哈希的,并应当被视为不可变对象。 此外,:class:`Fraction` 还具有以下属性和方法:" + +#: ../../library/fractions.rst:83 +msgid "" +"The :class:`Fraction` constructor now accepts :class:`float` and " +":class:`decimal.Decimal` instances." +msgstr "" +":class:`Fraction` 构造器现在接受 :class:`float` 和 :class:`decimal.Decimal` 实例。" + +#: ../../library/fractions.rst:87 +msgid "" +"The :func:`math.gcd` function is now used to normalize the *numerator* and " +"*denominator*. :func:`math.gcd` always return a :class:`int` type. " +"Previously, the GCD type depended on *numerator* and *denominator*." +msgstr "" +"现在会使用 :func:`math.gcd` 函数来正规化 *numerator* 和 *denominator*。 :func:`math.gcd` " +"总是返回 :class:`int` 类型。 在之前版本中,GCD 的类型取决于 *numerator* 和 *denominator* 的类型。" + +#: ../../library/fractions.rst:94 +msgid "Numerator of the Fraction in lowest term." +msgstr "最简分数形式的分子。" + +#: ../../library/fractions.rst:98 +msgid "Denominator of the Fraction in lowest term." +msgstr "最简分数形式的分母。" + +#: ../../library/fractions.rst:103 +msgid "" +"Return a tuple of two integers, whose ratio is equal to the Fraction and " +"with a positive denominator." +msgstr "返回由两个整数组成的元组,两数之比等于该分数的值且其分母为正数。" + +#: ../../library/fractions.rst:110 +msgid "" +"This class method constructs a :class:`Fraction` representing the exact " +"value of *flt*, which must be a :class:`float`. Beware that " +"``Fraction.from_float(0.3)`` is not the same value as ``Fraction(3, 10)``." +msgstr "" +"此类方法可构造一个 :class:`Fraction` 来表示 *flt* 的精确值,该参数必须是一个 :class:`float`。 请注意 " +"``Fraction.from_float(0.3)`` 的值并不等于 ``Fraction(3, 10)``。" + +#: ../../library/fractions.rst:116 +msgid "" +"From Python 3.2 onwards, you can also construct a :class:`Fraction` instance" +" directly from a :class:`float`." +msgstr "从 Python 3.2 开始,在构造 :class:`Fraction` 实例时可以直接使用 :class:`float`。" + +#: ../../library/fractions.rst:122 +msgid "" +"This class method constructs a :class:`Fraction` representing the exact " +"value of *dec*, which must be a :class:`decimal.Decimal` instance." +msgstr "" +"此类方法可构造一个 :class:`Fraction` 来表示 *dec* 的精确值,该参数必须是一个 :class:`decimal.Decimal`" +" 实例。" + +#: ../../library/fractions.rst:127 +msgid "" +"From Python 3.2 onwards, you can also construct a :class:`Fraction` instance" +" directly from a :class:`decimal.Decimal` instance." +msgstr "" +"从 Python 3.2 开始,在构造 :class:`Fraction` 实例时可以直接使用 :class:`decimal.Decimal` 实例。" + +#: ../../library/fractions.rst:134 +msgid "" +"Finds and returns the closest :class:`Fraction` to ``self`` that has " +"denominator at most max_denominator. This method is useful for finding " +"rational approximations to a given floating-point number:" +msgstr "" +"找到并返回一个 :class:`Fraction` 使得其值最接近 ``self`` 并且分母不大于 max_denominator。 " +"此方法适用于找出给定浮点数的有理数近似值:" + +#: ../../library/fractions.rst:142 +msgid "or for recovering a rational number that's represented as a float:" +msgstr "或是用来恢复被表示为一个浮点数的有理数:" + +#: ../../library/fractions.rst:155 +msgid "" +"Returns the greatest :class:`int` ``<= self``. This method can also be " +"accessed through the :func:`math.floor` function:" +msgstr "返回最大的 :class:`int` ``<= self``。 此方法也可通过 :func:`math.floor` 函数来使用:" + +#: ../../library/fractions.rst:165 +msgid "" +"Returns the least :class:`int` ``>= self``. This method can also be " +"accessed through the :func:`math.ceil` function." +msgstr "返回最小的 :class:`int` ``>= self``。 此方法也可通过 :func:`math.ceil` 函数来使用。" + +#: ../../library/fractions.rst:172 +msgid "" +"The first version returns the nearest :class:`int` to ``self``, rounding " +"half to even. The second version rounds ``self`` to the nearest multiple of " +"``Fraction(1, 10**ndigits)`` (logically, if ``ndigits`` is negative), again " +"rounding half toward even. This method can also be accessed through the " +":func:`round` function." +msgstr "" +"第一个版本返回一个 :class:`int` 使得其值最接近 ``self``,位值为二分之一时只对偶数舍入。第二个版本会将 ``self`` " +"舍入到最接近 ``Fraction(1, 10**ndigits)`` 的倍数(如果 ``ndigits`` " +"为负值则为逻辑运算),位值为二分之一时同样只对偶数舍入。 此方法也可通过 :func:`round` 函数来使用。" + +#: ../../library/fractions.rst:181 +msgid "Module :mod:`numbers`" +msgstr ":mod:`numbers` 模块" + +#: ../../library/fractions.rst:182 +msgid "The abstract base classes making up the numeric tower." +msgstr "构成数字塔的所有抽象基类。" diff --git a/library/frameworks.po b/library/frameworks.po new file mode 100644 index 000000000..a4b8d4ea8 --- /dev/null +++ b/library/frameworks.po @@ -0,0 +1,37 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) 2001-2022, Python Software Foundation +# This file is distributed under the same license as the Python package. +# FIRST AUTHOR , YEAR. +# +# Translators: +# Alpha Du , 2019 +# +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: Python 3.9\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2022-11-04 14:34+0000\n" +"PO-Revision-Date: 2017-02-16 23:11+0000\n" +"Last-Translator: Alpha Du , 2019\n" +"Language-Team: Chinese (China) (https://www.transifex.com/python-doc/teams/5390/zh_CN/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: zh_CN\n" +"Plural-Forms: nplurals=1; plural=0;\n" + +#: ../../library/frameworks.rst:5 +msgid "Program Frameworks" +msgstr "程序框架" + +#: ../../library/frameworks.rst:7 +msgid "" +"The modules described in this chapter are frameworks that will largely " +"dictate the structure of your program. Currently the modules described " +"here are all oriented toward writing command-line interfaces." +msgstr "本章中描述的模块是很大程度上决定程序结构的框架。 目前,这里描述的模块都面向编写命令行接口。" + +#: ../../library/frameworks.rst:11 +msgid "The full list of modules described in this chapter is:" +msgstr "本章描述的完整模块列表如下:" diff --git a/library/ftplib.po b/library/ftplib.po new file mode 100644 index 000000000..f013c812e --- /dev/null +++ b/library/ftplib.po @@ -0,0 +1,562 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) 2001-2025, Python Software Foundation +# This file is distributed under the same license as the Python package. +# FIRST AUTHOR , YEAR. +# +# Translators: +# sgqy , 2019 +# Yi Cao <1783250036@qq.com>, 2019 +# Arisaka97 , 2021 +# Freesand Leo , 2021 +# Rafael Fontenelle , 2025 +# +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: Python 3.9\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2025-02-07 16:40+0000\n" +"PO-Revision-Date: 2017-02-16 23:11+0000\n" +"Last-Translator: Rafael Fontenelle , 2025\n" +"Language-Team: Chinese (China) (https://app.transifex.com/python-doc/teams/5390/zh_CN/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: zh_CN\n" +"Plural-Forms: nplurals=1; plural=0;\n" + +#: ../../library/ftplib.rst:2 +msgid ":mod:`ftplib` --- FTP protocol client" +msgstr ":mod:`ftplib` --- FTP 协议客户端" + +#: ../../library/ftplib.rst:7 +msgid "**Source code:** :source:`Lib/ftplib.py`" +msgstr "**源代码:** :source:`Lib/ftplib.py`" + +#: ../../library/ftplib.rst:15 +msgid "" +"This module defines the class :class:`FTP` and a few related items. The " +":class:`FTP` class implements the client side of the FTP protocol. You can " +"use this to write Python programs that perform a variety of automated FTP " +"jobs, such as mirroring other FTP servers. It is also used by the module " +":mod:`urllib.request` to handle URLs that use FTP. For more information on " +"FTP (File Transfer Protocol), see Internet :rfc:`959`." +msgstr "" +"本模块定义了 :class:`FTP` 类和一些相关项目。:class:`FTP` 类实现了 FTP 协议的客户端。可以用该类编写 Python " +"程序,执行各种自动化的 FTP 任务,如镜像其他 FTP 服务器。:mod:`urllib.request` 模块也用它来处理使用了 FTP 的 " +"URL。关于 FTP(文件传输协议)的详情请参阅 Internet :rfc:`959`。" + +#: ../../library/ftplib.rst:22 +msgid "The default encoding is UTF-8, following :rfc:`2640`." +msgstr "默认编码为 UTF-8,遵循 :rfc:`2640`。" + +#: ../../library/ftplib.rst:24 +msgid "Here's a sample session using the :mod:`ftplib` module::" +msgstr "以下是使用 :mod:`ftplib` 模块的会话示例::" + +#: ../../library/ftplib.rst:46 +msgid "The module defines the following items:" +msgstr "这个模块定义了以下内容:" + +#: ../../library/ftplib.rst:50 +msgid "" +"Return a new instance of the :class:`FTP` class. When *host* is given, the " +"method call ``connect(host)`` is made. When *user* is given, additionally " +"the method call ``login(user, passwd, acct)`` is made (where *passwd* and " +"*acct* default to the empty string when not given). The optional *timeout* " +"parameter specifies a timeout in seconds for blocking operations like the " +"connection attempt (if is not specified, the global default timeout setting " +"will be used). *source_address* is a 2-tuple ``(host, port)`` for the socket" +" to bind to as its source address before connecting. The *encoding* " +"parameter specifies the encoding for directories and filenames." +msgstr "" +"返回一个 :class:`FTP` 类的新实例。当传入 *host* 时,将调用 ``connect(host)`` 方法。当传入 *user* " +"时,将额外调用 ``login(user, passwd, acct)`` 方法(其中 *passwd* 和 *acct* " +"若没有传入则默认为空字符串)。可选参数 *timeout* " +"指定阻塞操作(如连接尝试)的超时(以秒为单位,如果未指定超时,将使用全局默认超时设置)。*source_address* 是一个 2 元组 " +"``(host, port)``,套接字在连接前绑定它,作为其源地址。*encoding* 参数指定目录和文件名的编码。" + +#: ../../library/ftplib.rst:60 +msgid "The :class:`FTP` class supports the :keyword:`with` statement, e.g.:" +msgstr ":class:`FTP` 类支持 :keyword:`with` 语句,例如:" + +#: ../../library/ftplib.rst:74 +msgid "Support for the :keyword:`with` statement was added." +msgstr "添加了对 :keyword:`with` 语句的支持。" + +#: ../../library/ftplib.rst:77 ../../library/ftplib.rst:103 +#: ../../library/ftplib.rst:212 +msgid "*source_address* parameter was added." +msgstr "添加了 *source_address* 参数。" + +#: ../../library/ftplib.rst:80 ../../library/ftplib.rst:118 +msgid "" +"If the *timeout* parameter is set to be zero, it will raise a " +":class:`ValueError` to prevent the creation of a non-blocking socket. The " +"*encoding* parameter was added, and the default was changed from Latin-1 to " +"UTF-8 to follow :rfc:`2640`." +msgstr "" +"如果 *timeout* 参数设置为 0,创建非阻塞套接字时,它将引发 :class:`ValueError` 来阻止该操作。添加了 " +"*encoding* 参数,且为了遵循 :rfc:`2640`,该参数默认值从 Latin-1 改为了 UTF-8。" + +#: ../../library/ftplib.rst:88 +msgid "" +"A :class:`FTP` subclass which adds TLS support to FTP as described in " +":rfc:`4217`. Connect as usual to port 21 implicitly securing the FTP control" +" connection before authenticating. Securing the data connection requires the" +" user to explicitly ask for it by calling the :meth:`prot_p` method. " +"*context* is a :class:`ssl.SSLContext` object which allows bundling SSL " +"configuration options, certificates and private keys into a single " +"(potentially long-lived) structure. Please read :ref:`ssl-security` for " +"best practices." +msgstr "" +"一个 :class:`FTP` 的子类,它为 FTP 添加了 TLS 支持,如 :rfc:`4217` 所述。它将像通常一样连接到 21 " +"端口,暗中保护在身份验证前的 FTP 控制连接。而保护数据连接需要用户明确调用 :meth:`prot_p` 方法。*context* 是一个 " +":class:`ssl.SSLContext` 对象,该对象可以将 SSL 配置选项、证书和私钥打包放入一个单独的(可以长久存在的)结构中。请阅读 " +":ref:`ssl-security` 以获取最佳实践。" + +#: ../../library/ftplib.rst:97 +msgid "" +"*keyfile* and *certfile* are a legacy alternative to *context* -- they can " +"point to PEM-formatted private key and certificate chain files " +"(respectively) for the SSL connection." +msgstr "" +"*keyfile* 和 *certfile* 是可以代替 *context* 的传统方案,它们可以分别指向 PEM 格式的私钥和证书链文件,用于进行 " +"SSL 连接。" + +#: ../../library/ftplib.rst:106 +msgid "" +"The class now supports hostname check with " +":attr:`ssl.SSLContext.check_hostname` and *Server Name Indication* (see " +":data:`ssl.HAS_SNI`)." +msgstr "" +"本类现在支持使用 :attr:`ssl.SSLContext.check_hostname` 和 *服务器名称指示* (参阅 " +":data:`ssl.HAS_SNI`)进行主机名检查。" + +#: ../../library/ftplib.rst:113 +msgid "" +"*keyfile* and *certfile* are deprecated in favor of *context*. Please use " +":meth:`ssl.SSLContext.load_cert_chain` instead, or let " +":func:`ssl.create_default_context` select the system's trusted CA " +"certificates for you." +msgstr "" +"*keyfile* 和 *certfile* 已弃用并转而推荐 *context*。 请改用 " +":meth:`ssl.SSLContext.load_cert_chain` 或让 :func:`ssl.create_default_context`" +" 为你选择系统所信任的 CA 证书。" + +#: ../../library/ftplib.rst:124 +msgid "Here's a sample session using the :class:`FTP_TLS` class::" +msgstr "以下是使用 :class:`FTP_TLS` 类的会话示例::" + +#: ../../library/ftplib.rst:137 +msgid "Exception raised when an unexpected reply is received from the server." +msgstr "从服务器收到意外答复时,将引发本异常。" + +#: ../../library/ftplib.rst:142 +msgid "" +"Exception raised when an error code signifying a temporary error (response " +"codes in the range 400--499) is received." +msgstr "收到表示临时错误的错误代码(响应代码在 400--499 范围内)时,将引发本异常。" + +#: ../../library/ftplib.rst:148 +msgid "" +"Exception raised when an error code signifying a permanent error (response " +"codes in the range 500--599) is received." +msgstr "收到表示永久性错误的错误代码(响应代码在 500--599 范围内)时,将引发本异常。" + +#: ../../library/ftplib.rst:154 +msgid "" +"Exception raised when a reply is received from the server that does not fit " +"the response specifications of the File Transfer Protocol, i.e. begin with a" +" digit in the range 1--5." +msgstr "从服务器收到不符合 FTP 响应规范的答复,比如以数字 1--5 开头时,将引发本异常。" + +#: ../../library/ftplib.rst:161 +msgid "" +"The set of all exceptions (as a tuple) that methods of :class:`FTP` " +"instances may raise as a result of problems with the FTP connection (as " +"opposed to programming errors made by the caller). This set includes the " +"four exceptions listed above as well as :exc:`OSError` and :exc:`EOFError`." +msgstr "" +"所有异常的集合(一个元组),由于 FTP 连接出现问题(并非调用者的编码错误),:class:`FTP` " +"实例的方法可能会引发这些异常。该集合包括上面列出的四个异常以及 :exc:`OSError` 和 :exc:`EOFError`。" + +#: ../../library/ftplib.rst:171 +msgid "Module :mod:`netrc`" +msgstr ":mod:`netrc` 模块" + +#: ../../library/ftplib.rst:170 +msgid "" +"Parser for the :file:`.netrc` file format. The file :file:`.netrc` is " +"typically used by FTP clients to load user authentication information before" +" prompting the user." +msgstr "" +":file:`.netrc` 文件格式解析器。FTP 客户端在响应用户之前,通常使用 :file:`.netrc` 文件来加载用户认证信息。" + +#: ../../library/ftplib.rst:178 +msgid "FTP Objects" +msgstr "FTP 对象" + +#: ../../library/ftplib.rst:180 +msgid "" +"Several methods are available in two flavors: one for handling text files " +"and another for binary files. These are named for the command which is used" +" followed by ``lines`` for the text version or ``binary`` for the binary " +"version." +msgstr "" +"一些方法可以按照两种方式来使用:一种处理文本文件,另一种处理二进制文件。方法名称与相应的命令相同,文本版中命令后面跟着 " +"``lines``,二进制版中命令后面跟着 ``binary``。" + +#: ../../library/ftplib.rst:184 +msgid ":class:`FTP` instances have the following methods:" +msgstr ":class:`FTP` 实例具有下列方法:" + +#: ../../library/ftplib.rst:189 +msgid "" +"Set the instance's debugging level. This controls the amount of debugging " +"output printed. The default, ``0``, produces no debugging output. A value " +"of ``1`` produces a moderate amount of debugging output, generally a single " +"line per request. A value of ``2`` or higher produces the maximum amount of" +" debugging output, logging each line sent and received on the control " +"connection." +msgstr "" +"设置实例的调试级别,它控制着调试信息的数量。默认值 ``0`` 不产生调试信息。值 ``1`` 产生中等数量的调试信息,通常每个请求产生一行。大于或等于" +" ``2`` 的值产生的调试信息最多,FTP 控制连接上发送和接收的每一行都将被记录下来。" + +#: ../../library/ftplib.rst:198 +msgid "" +"Connect to the given host and port. The default port number is ``21``, as " +"specified by the FTP protocol specification. It is rarely needed to specify" +" a different port number. This function should be called only once for each" +" instance; it should not be called at all if a host was given when the " +"instance was created. All other methods can only be used after a connection" +" has been made. The optional *timeout* parameter specifies a timeout in " +"seconds for the connection attempt. If no *timeout* is passed, the global " +"default timeout setting will be used. *source_address* is a 2-tuple ``(host," +" port)`` for the socket to bind to as its source address before connecting." +msgstr "" +"连接到给定的主机和端口。默认端口号由 FTP 协议规范规定,为 " +"``21``。偶尔才需要指定其他端口号。每个实例只应调用一次本函数,如果在创建实例时就传入了 " +"host,则根本不应调用它。所有其他方法只能在建立连接后使用。可选参数 *timeout* 指定连接尝试的超时(以秒为单位)。如果没有传入 " +"*timeout*,将使用全局默认超时设置。*source_address* 是一个 2 元组 ``(host, " +"port)``,套接字在连接前绑定它,作为其源地址。" + +#: ../../library/ftplib.rst:210 +msgid "" +"Raises an :ref:`auditing event ` ``ftplib.connect`` with arguments" +" ``self``, ``host``, ``port``." +msgstr "" +"引发一个 :ref:`审计事件 ` ``ftplib.connect`` 并附带参数 ``self``, ``host``, " +"``port``。" + +#: ../../library/ftplib.rst:218 +msgid "" +"Return the welcome message sent by the server in reply to the initial " +"connection. (This message sometimes contains disclaimers or help " +"information that may be relevant to the user.)" +msgstr "返回服务器发送的欢迎消息,作为连接开始的回复。(该消息有时包含与用户有关的免责声明或帮助信息。)" + +#: ../../library/ftplib.rst:225 +msgid "" +"Log in as the given *user*. The *passwd* and *acct* parameters are optional" +" and default to the empty string. If no *user* is specified, it defaults to" +" ``'anonymous'``. If *user* is ``'anonymous'``, the default *passwd* is " +"``'anonymous@'``. This function should be called only once for each " +"instance, after a connection has been established; it should not be called " +"at all if a host and user were given when the instance was created. Most " +"FTP commands are only allowed after the client has logged in. The *acct* " +"parameter supplies \"accounting information\"; few systems implement this." +msgstr "" +"以 *user* 的身份登录。*passwd* 和 *acct* 是可选参数,默认为空字符串。如果没有指定 *user*,则默认为 " +"``'anonymous'``。如果 *user* 为 ``'anonymous'``,那么默认的 *passwd* 是 " +"``'anonymous@'``。连接建立后,每个实例只应调用一次本函数;如果在创建实例时传入了 host 和 " +"user,则完全不应该调用本函数。在客户端登录后,才允许执行大多数 FTP 命令。*acct* 参数提供记账信息 (\"accounting " +"information\");仅少数系统实现了该特性。" + +#: ../../library/ftplib.rst:237 +msgid "" +"Abort a file transfer that is in progress. Using this does not always work," +" but it's worth a try." +msgstr "中止正在进行的文件传输。本方法并不总是有效,但值得一试。" + +#: ../../library/ftplib.rst:243 +msgid "" +"Send a simple command string to the server and return the response string." +msgstr "将一条简单的命令字符串发送到服务器,返回响应的字符串。" + +#: ../../library/ftplib.rst:245 ../../library/ftplib.rst:254 +msgid "" +"Raises an :ref:`auditing event ` ``ftplib.sendcmd`` with arguments" +" ``self``, ``cmd``." +msgstr "" +"引发一个 :ref:`审计事件 ` ``ftplib.sendcmd`` 并附带参数 ``self``, ``cmd``。" + +#: ../../library/ftplib.rst:250 +msgid "" +"Send a simple command string to the server and handle the response. Return " +"nothing if a response code corresponding to success (codes in the range 200" +"--299) is received. Raise :exc:`error_reply` otherwise." +msgstr "" +"将一条简单的命令字符串发送到服务器,并处理响应内容。如果收到的响应代码表示的是成功(代码范围 200--299),则不返回任何内容。否则将引发 " +":exc:`error_reply`。" + +#: ../../library/ftplib.rst:259 +msgid "" +"Retrieve a file in binary transfer mode. *cmd* should be an appropriate " +"``RETR`` command: ``'RETR filename'``. The *callback* function is called for" +" each block of data received, with a single bytes argument giving the data " +"block. The optional *blocksize* argument specifies the maximum chunk size to" +" read on the low-level socket object created to do the actual transfer " +"(which will also be the largest size of the data blocks passed to " +"*callback*). A reasonable default is chosen. *rest* means the same thing as" +" in the :meth:`transfercmd` method." +msgstr "" +"以二进制传输模式下载文件。*cmd* 应为恰当的 ``RETR`` 命令:``'RETR 文件名'``。*callback* " +"函数会在收到每个数据块时调用,传入的参数是表示数据块的一个字节。为执行实际传输,创建了底层套接字对象,可选参数 *blocksize* " +"指定了读取该对象时的最大块大小(这也是传入 *callback* 的数据块的最大大小)。已经选择了合理的默认值。*rest* 的含义与 " +":meth:`transfercmd` 方法中的含义相同。" + +#: ../../library/ftplib.rst:271 +msgid "" +"Retrieve a file or directory listing in the encoding specified by the " +"*encoding* parameter at initialization. *cmd* should be an appropriate " +"``RETR`` command (see :meth:`retrbinary`) or a command such as ``LIST`` or " +"``NLST`` (usually just the string ``'LIST'``). ``LIST`` retrieves a list of " +"files and information about those files. ``NLST`` retrieves a list of file " +"names. The *callback* function is called for each line with a string " +"argument containing the line with the trailing CRLF stripped. The default " +"*callback* prints the line to ``sys.stdout``." +msgstr "" +"按照初始化时的 *encoding* 参数指定的编码,获取文件或目录列表。*cmd* 应是恰当的 ``RETR`` 命令(参阅 " +":meth:`retrbinary`),也可以是诸如 ``LIST`` 或 ``NLST`` 之类的命令(通常就只是字符串 " +"``'LIST'``)。``LIST`` 获取文件列表以及那些文件的信息。``NLST`` 获取文件名称列表。*callback* " +"函数会在每一行都调用,参数就是包含一行的字符串,删除了尾部的 CRLF。默认的 *callback* 会把行打印到 ``sys.stdout``。" + +#: ../../library/ftplib.rst:284 +msgid "" +"Enable \"passive\" mode if *val* is true, otherwise disable passive mode. " +"Passive mode is on by default." +msgstr "如果 *val* 为 true,则打开“被动”模式,否则禁用被动模式。默认下被动模式是打开的。" + +#: ../../library/ftplib.rst:290 +msgid "" +"Store a file in binary transfer mode. *cmd* should be an appropriate " +"``STOR`` command: ``\"STOR filename\"``. *fp* is a :term:`file object` " +"(opened in binary mode) which is read until EOF using its " +":meth:`~io.IOBase.read` method in blocks of size *blocksize* to provide the " +"data to be stored. The *blocksize* argument defaults to 8192. *callback* is" +" an optional single parameter callable that is called on each block of data " +"after it is sent. *rest* means the same thing as in the :meth:`transfercmd` " +"method." +msgstr "" +"以二进制传输模式存储文件。 *cmd* 应为恰当的 ``STOR`` 命令: ``\"STOR filename\"``。*fp* 是一个 " +":term:`文件对象 ` (以二进制模式打开),将使用它的 :meth:`~io.IOBase.read` " +"方法读取它,用于提供要存储的数据,直到遇到 EOF,读取时的块大小为 *blocksize*。 参数 *blocksize* 的默认值为 8192。 " +"可选参数 *callback* 是单参数函数,在每个数据块发送后都会以该数据块作为参数来调用它。*rest* 的含义与 " +":meth:`transfercmd` 方法中的含义相同。" + +#: ../../library/ftplib.rst:298 +msgid "*rest* parameter added." +msgstr "添加了 *rest* 参数。" + +#: ../../library/ftplib.rst:304 +msgid "" +"Store a file in line mode. *cmd* should be an appropriate ``STOR`` command " +"(see :meth:`storbinary`). Lines are read until EOF from the :term:`file " +"object` *fp* (opened in binary mode) using its :meth:`~io.IOBase.readline` " +"method to provide the data to be stored. *callback* is an optional single " +"parameter callable that is called on each line after it is sent." +msgstr "" +"以文本行模式存储文件。*cmd* 应为恰当的 ``STOR`` 命令 (请参阅 :meth:`storbinary`)。 *fp* 是一个 " +":term:`文件对象 ` (以二进制模式打开),将使用它的 :meth:`~io.IOBase.readline` " +"方法读取它的每一行,用于提供要存储的数据,直到遇到 EOF。 可选参数 *callback* 是单参数函数,在每行发送后都会以该行作为参数来调用它。" + +#: ../../library/ftplib.rst:313 +msgid "" +"Initiate a transfer over the data connection. If the transfer is active, " +"send an ``EPRT`` or ``PORT`` command and the transfer command specified by " +"*cmd*, and accept the connection. If the server is passive, send an " +"``EPSV`` or ``PASV`` command, connect to it, and start the transfer command." +" Either way, return the socket for the connection." +msgstr "" +"在 FTP 数据连接上开始传输数据。如果传输处于活动状态,传输命令由 *cmd* 指定,需发送 ``EPRT`` 或 ``PORT`` " +"命令,然后接受连接 (accept)。如果服务器是被动服务器,需发送 ``EPSV`` 或 ``PASV`` 命令,连接到服务器 " +"(connect),然后启动传输命令。两种方式都将返回用于连接的套接字。" + +#: ../../library/ftplib.rst:319 +msgid "" +"If optional *rest* is given, a ``REST`` command is sent to the server, " +"passing *rest* as an argument. *rest* is usually a byte offset into the " +"requested file, telling the server to restart sending the file's bytes at " +"the requested offset, skipping over the initial bytes. Note however that " +"the :meth:`transfercmd` method converts *rest* to a string with the " +"*encoding* parameter specified at initialization, but no check is performed " +"on the string's contents. If the server does not recognize the ``REST`` " +"command, an :exc:`error_reply` exception will be raised. If this happens, " +"simply call :meth:`transfercmd` without a *rest* argument." +msgstr "" +"如果传入了可选参数 *rest*,则一条 ``REST`` 命令会被发送到服务器,并以 *rest* 作为参数。*rest* " +"通常表示请求文件中的字节偏移量,它告诉服务器重新开始发送文件的字节,从请求的偏移量处开始,跳过起始字节。但是请注意,:meth:`transfercmd`" +" 方法会将 *rest* 转换为字符串,但是不检查字符串的内容,转换用的编码是在初始化时指定的 *encoding* 参数。如果服务器无法识别 " +"``REST`` 命令,将引发 :exc:`error_reply` 异常。如果发生这种情况,只需不带 *rest* 参数调用 " +":meth:`transfercmd`。" + +#: ../../library/ftplib.rst:332 +msgid "" +"Like :meth:`transfercmd`, but returns a tuple of the data connection and the" +" expected size of the data. If the expected size could not be computed, " +"``None`` will be returned as the expected size. *cmd* and *rest* means the " +"same thing as in :meth:`transfercmd`." +msgstr "" +"类似于 :meth:`transfercmd`,但返回一个元组,包括数据连接和数据的预计大小。如果预计大小无法计算,则返回的预计大小为 " +"``None``。*cmd* 和 *rest* 的含义与 :meth:`transfercmd` 中的相同。" + +#: ../../library/ftplib.rst:340 +msgid "" +"List a directory in a standardized format by using ``MLSD`` command " +"(:rfc:`3659`). If *path* is omitted the current directory is assumed. " +"*facts* is a list of strings representing the type of information desired " +"(e.g. ``[\"type\", \"size\", \"perm\"]``). Return a generator object " +"yielding a tuple of two elements for every file found in path. First " +"element is the file name, the second one is a dictionary containing facts " +"about the file name. Content of this dictionary might be limited by the " +"*facts* argument but server is not guaranteed to return all requested facts." +msgstr "" +"使用 ``MLSD`` 命令以标准格式列出目录内容 (:rfc:`3659`)。如果省略 *path* 则使用当前目录。*facts* " +"是字符串列表,表示所需的信息类型(如 ``[\"type\", \"size\", \"perm\"]``)。返回一个生成器对象,每个在 path " +"中找到的文件都将在该对象中生成两个元素的元组。第一个元素是文件名,第二个元素是该文件的 facts 的字典。该字典的内容受 *facts* " +"参数限制,但不能保证服务器会返回所有请求的 facts。" + +#: ../../library/ftplib.rst:354 +msgid "" +"Return a list of file names as returned by the ``NLST`` command. The " +"optional *argument* is a directory to list (default is the current server " +"directory). Multiple arguments can be used to pass non-standard options to " +"the ``NLST`` command." +msgstr "" +"返回一个文件名列表,文件名由 ``NLST`` 命令返回。可选参数 *argument* " +"是待列出的目录(默认为当前服务器目录)。可以使用多个参数,将非标准选项传递给 ``NLST`` 命令。" + +#: ../../library/ftplib.rst:359 ../../library/ftplib.rst:371 +msgid "If your server supports the command, :meth:`mlsd` offers a better API." +msgstr "如果目标服务器支持相关命令,那么 :meth:`mlsd` 提供的 API 更好。" + +#: ../../library/ftplib.rst:364 +msgid "" +"Produce a directory listing as returned by the ``LIST`` command, printing it" +" to standard output. The optional *argument* is a directory to list " +"(default is the current server directory). Multiple arguments can be used " +"to pass non-standard options to the ``LIST`` command. If the last argument " +"is a function, it is used as a *callback* function as for :meth:`retrlines`;" +" the default prints to ``sys.stdout``. This method returns ``None``." +msgstr "" +"生成目录列表,即 ``LIST`` 命令所返回的结果,并将其打印到标准输出。可选参数 *argument* " +"是待列出的目录(默认为当前服务器目录)。可以使用多个参数,将非标准选项传递给 ``LIST`` 命令。如果最后一个参数是一个函数,它将被用作 " +"*callback* 函数,与 :meth:`retrlines` 中的相同,默认将打印到 ``sys.stdout``。本方法返回 ``None``。" + +#: ../../library/ftplib.rst:376 +msgid "Rename file *fromname* on the server to *toname*." +msgstr "将服务器上的文件 *fromname* 重命名为 *toname*。" + +#: ../../library/ftplib.rst:381 +msgid "" +"Remove the file named *filename* from the server. If successful, returns " +"the text of the response, otherwise raises :exc:`error_perm` on permission " +"errors or :exc:`error_reply` on other errors." +msgstr "" +"将服务器上名为 *filename* 的文件删除。如果删除成功,返回响应文本,如果删除失败,在权限错误时引发 " +":exc:`error_perm`,在其他错误时引发 :exc:`error_reply`。" + +#: ../../library/ftplib.rst:388 +msgid "Set the current directory on the server." +msgstr "设置服务器端的当前目录。" + +#: ../../library/ftplib.rst:393 +msgid "Create a new directory on the server." +msgstr "在服务器上创建一个新目录。" + +#: ../../library/ftplib.rst:398 +msgid "Return the pathname of the current directory on the server." +msgstr "返回服务器上当前目录的路径。" + +#: ../../library/ftplib.rst:403 +msgid "Remove the directory named *dirname* on the server." +msgstr "将服务器上名为 *dirname* 的目录删除。" + +#: ../../library/ftplib.rst:408 +msgid "" +"Request the size of the file named *filename* on the server. On success, " +"the size of the file is returned as an integer, otherwise ``None`` is " +"returned. Note that the ``SIZE`` command is not standardized, but is " +"supported by many common server implementations." +msgstr "" +"请求服务器上名为 *filename* 的文件大小。成功后以整数返回文件大小,未成功则返回 ``None``。注意,``SIZE`` " +"不是标准命令,但通常许多服务器的实现都支持该命令。" + +#: ../../library/ftplib.rst:416 +msgid "" +"Send a ``QUIT`` command to the server and close the connection. This is the " +"\"polite\" way to close a connection, but it may raise an exception if the " +"server responds with an error to the ``QUIT`` command. This implies a call " +"to the :meth:`close` method which renders the :class:`FTP` instance useless " +"for subsequent calls (see below)." +msgstr "" +"向服务器发送 ``QUIT`` 命令并关闭连接。 这是关闭一个连接的“礼貌”方式,但是如果服务器对 ``QUIT`` " +"命令的响应带有错误消息则这会引发一个异常。 这意味着对 :meth:`close` 方法的调用,它将使得 :class:`FTP` " +"实例对后继调用无效(见下文)。" + +#: ../../library/ftplib.rst:425 +msgid "" +"Close the connection unilaterally. This should not be applied to an already" +" closed connection such as after a successful call to :meth:`~FTP.quit`. " +"After this call the :class:`FTP` instance should not be used any more (after" +" a call to :meth:`close` or :meth:`~FTP.quit` you cannot reopen the " +"connection by issuing another :meth:`login` method)." +msgstr "" +"单方面关闭连接。 这不该被应用于已经关闭的连接,例如成功调用 :meth:`~FTP.quit` 之后的连接。 在此调用之后 :class:`FTP` " +"实例不应被继续使用(在调用 :meth:`close` 或 :meth:`~FTP.quit` 之后你不能通过再次唤起 :meth:`login` " +"方法重新打开连接)。" + +#: ../../library/ftplib.rst:433 +msgid "FTP_TLS Objects" +msgstr "FTP_TLS 对象" + +#: ../../library/ftplib.rst:435 +msgid "" +":class:`FTP_TLS` class inherits from :class:`FTP`, defining these additional" +" objects:" +msgstr ":class:`FTP_TLS` 类继承自 :class:`FTP`,它定义了下述其他对象:" + +#: ../../library/ftplib.rst:439 +msgid "The SSL version to use (defaults to :attr:`ssl.PROTOCOL_SSLv23`)." +msgstr "欲采用的 SSL 版本(默认为 :attr:`ssl.PROTOCOL_SSLv23`)。" + +#: ../../library/ftplib.rst:443 +msgid "" +"Set up a secure control connection by using TLS or SSL, depending on what is" +" specified in the :attr:`ssl_version` attribute." +msgstr "通过使用 TLS 或 SSL 来设置一个安全控制连接,具体取决于 :attr:`ssl_version` 属性是如何设置的。" + +#: ../../library/ftplib.rst:446 +msgid "" +"The method now supports hostname check with " +":attr:`ssl.SSLContext.check_hostname` and *Server Name Indication* (see " +":data:`ssl.HAS_SNI`)." +msgstr "" +"此方法现在支持使用 :attr:`ssl.SSLContext.check_hostname` 和 *服务器名称指示* (参见 " +":data:`ssl.HAS_SNI`) 进行主机名检查。" + +#: ../../library/ftplib.rst:453 +msgid "" +"Revert control channel back to plaintext. This can be useful to take " +"advantage of firewalls that know how to handle NAT with non-secure FTP " +"without opening fixed ports." +msgstr "将控制通道回复为纯文本。 这适用于发挥知道如何使用非安全 FTP 处理 NAT 而无需打开固定端口的防火墙的优势。" + +#: ../../library/ftplib.rst:461 +msgid "Set up secure data connection." +msgstr "设置加密数据连接。" + +#: ../../library/ftplib.rst:465 +msgid "Set up clear text data connection." +msgstr "设置明文数据连接。" diff --git a/library/functional.po b/library/functional.po new file mode 100644 index 000000000..4c7c4e016 --- /dev/null +++ b/library/functional.po @@ -0,0 +1,36 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) 2001-2022, Python Software Foundation +# This file is distributed under the same license as the Python package. +# FIRST AUTHOR , YEAR. +# +# Translators: +# zc Jin , 2018 +# +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: Python 3.9\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2022-11-04 14:34+0000\n" +"PO-Revision-Date: 2017-02-16 23:11+0000\n" +"Last-Translator: zc Jin , 2018\n" +"Language-Team: Chinese (China) (https://www.transifex.com/python-doc/teams/5390/zh_CN/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: zh_CN\n" +"Plural-Forms: nplurals=1; plural=0;\n" + +#: ../../library/functional.rst:3 +msgid "Functional Programming Modules" +msgstr "函数式编程模块" + +#: ../../library/functional.rst:5 +msgid "" +"The modules described in this chapter provide functions and classes that " +"support a functional programming style, and general operations on callables." +msgstr "本章里描述的模块提供了函数和类,以支持函数式编程风格和在可调用对象上的通用操作。" + +#: ../../library/functional.rst:8 +msgid "The following modules are documented in this chapter:" +msgstr "本章对下列模块进行说明:" diff --git a/library/functions.po b/library/functions.po new file mode 100644 index 000000000..549717c58 --- /dev/null +++ b/library/functions.po @@ -0,0 +1,2907 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) 2001-2025, Python Software Foundation +# This file is distributed under the same license as the Python package. +# FIRST AUTHOR , YEAR. +# +# Translators: +# emrich , 2017 +# cdarlint , 2017 +# Shengjing Zhu , 2018 +# Konge , 2019 +# Arisaka97 , 2020 +# WH-2099 , 2020 +# ww song , 2021 +# Alpha Du , 2022 +# Freesand Leo , 2024 +# 择远 尹, 2024 +# Rafael Fontenelle , 2025 +# +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: Python 3.9\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2025-02-07 16:40+0000\n" +"PO-Revision-Date: 2017-02-16 23:11+0000\n" +"Last-Translator: Rafael Fontenelle , 2025\n" +"Language-Team: Chinese (China) (https://app.transifex.com/python-doc/teams/5390/zh_CN/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: zh_CN\n" +"Plural-Forms: nplurals=1; plural=0;\n" + +#: ../../library/functions.rst:5 ../../library/functions.rst:11 +msgid "Built-in Functions" +msgstr "内置函数" + +#: ../../library/functions.rst:7 +msgid "" +"The Python interpreter has a number of functions and types built into it " +"that are always available. They are listed here in alphabetical order." +msgstr "Python 解释器内置了很多函数和类型,任何时候都能使用。以下按字母顺序给出列表。" + +#: ../../library/functions.rst:13 +msgid ":func:`abs`" +msgstr ":func:`abs`" + +#: ../../library/functions.rst:13 +msgid ":func:`delattr`" +msgstr ":func:`delattr`" + +#: ../../library/functions.rst:13 +msgid ":func:`hash`" +msgstr ":func:`hash`" + +#: ../../library/functions.rst:13 +msgid "|func-memoryview|_" +msgstr "|func-memoryview|_" + +#: ../../library/functions.rst:13 +msgid "|func-set|_" +msgstr "|func-set|_" + +#: ../../library/functions.rst:14 +msgid ":func:`all`" +msgstr ":func:`all`" + +#: ../../library/functions.rst:14 +msgid "|func-dict|_" +msgstr "|func-dict|_" + +#: ../../library/functions.rst:14 +msgid ":func:`help`" +msgstr ":func:`help`" + +#: ../../library/functions.rst:14 +msgid ":func:`min`" +msgstr ":func:`min`" + +#: ../../library/functions.rst:14 +msgid ":func:`setattr`" +msgstr ":func:`setattr`" + +#: ../../library/functions.rst:15 +msgid ":func:`any`" +msgstr ":func:`any`" + +#: ../../library/functions.rst:15 +msgid ":func:`dir`" +msgstr ":func:`dir`" + +#: ../../library/functions.rst:15 +msgid ":func:`hex`" +msgstr ":func:`hex`" + +#: ../../library/functions.rst:15 +msgid ":func:`next`" +msgstr ":func:`next`" + +#: ../../library/functions.rst:15 +msgid ":func:`slice`" +msgstr ":func:`slice`" + +#: ../../library/functions.rst:16 +msgid ":func:`ascii`" +msgstr ":func:`ascii`" + +#: ../../library/functions.rst:16 +msgid ":func:`divmod`" +msgstr ":func:`divmod`" + +#: ../../library/functions.rst:16 +msgid ":func:`id`" +msgstr ":func:`id`" + +#: ../../library/functions.rst:16 +msgid ":func:`object`" +msgstr ":func:`object`" + +#: ../../library/functions.rst:16 +msgid ":func:`sorted`" +msgstr ":func:`sorted`" + +#: ../../library/functions.rst:17 +msgid ":func:`bin`" +msgstr ":func:`bin`" + +#: ../../library/functions.rst:17 +msgid ":func:`enumerate`" +msgstr ":func:`enumerate`" + +#: ../../library/functions.rst:17 +msgid ":func:`input`" +msgstr ":func:`input`" + +#: ../../library/functions.rst:17 +msgid ":func:`oct`" +msgstr ":func:`oct`" + +#: ../../library/functions.rst:17 +msgid ":func:`staticmethod`" +msgstr ":func:`staticmethod`" + +#: ../../library/functions.rst:18 +msgid ":func:`bool`" +msgstr ":func:`bool`" + +#: ../../library/functions.rst:18 +msgid ":func:`eval`" +msgstr ":func:`eval`" + +#: ../../library/functions.rst:18 +msgid ":func:`int`" +msgstr ":func:`int`" + +#: ../../library/functions.rst:18 +msgid ":func:`open`" +msgstr ":func:`open`" + +#: ../../library/functions.rst:18 +msgid "|func-str|_" +msgstr "|func-str|_" + +#: ../../library/functions.rst:19 +msgid ":func:`breakpoint`" +msgstr ":func:`breakpoint`" + +#: ../../library/functions.rst:19 +msgid ":func:`exec`" +msgstr ":func:`exec`" + +#: ../../library/functions.rst:19 +msgid ":func:`isinstance`" +msgstr ":func:`isinstance`" + +#: ../../library/functions.rst:19 +msgid ":func:`ord`" +msgstr ":func:`ord`" + +#: ../../library/functions.rst:19 +msgid ":func:`sum`" +msgstr ":func:`sum`" + +#: ../../library/functions.rst:20 +msgid "|func-bytearray|_" +msgstr "|func-bytearray|_" + +#: ../../library/functions.rst:20 +msgid ":func:`filter`" +msgstr ":func:`filter`" + +#: ../../library/functions.rst:20 +msgid ":func:`issubclass`" +msgstr ":func:`issubclass`" + +#: ../../library/functions.rst:20 +msgid ":func:`pow`" +msgstr ":func:`pow`" + +#: ../../library/functions.rst:20 +msgid ":func:`super`" +msgstr ":func:`super`" + +#: ../../library/functions.rst:21 +msgid "|func-bytes|_" +msgstr "|func-bytes|_" + +#: ../../library/functions.rst:21 +msgid ":func:`float`" +msgstr ":func:`float`" + +#: ../../library/functions.rst:21 +msgid ":func:`iter`" +msgstr ":func:`iter`" + +#: ../../library/functions.rst:21 +msgid ":func:`print`" +msgstr ":func:`print`" + +#: ../../library/functions.rst:21 +msgid "|func-tuple|_" +msgstr "|func-tuple|_" + +#: ../../library/functions.rst:22 +msgid ":func:`callable`" +msgstr ":func:`callable`" + +#: ../../library/functions.rst:22 +msgid ":func:`format`" +msgstr ":func:`format`" + +#: ../../library/functions.rst:22 +msgid ":func:`len`" +msgstr ":func:`len`" + +#: ../../library/functions.rst:22 +msgid ":func:`property`" +msgstr ":func:`property`" + +#: ../../library/functions.rst:22 +msgid ":func:`type`" +msgstr ":func:`type`" + +#: ../../library/functions.rst:23 +msgid ":func:`chr`" +msgstr ":func:`chr`" + +#: ../../library/functions.rst:23 +msgid "|func-frozenset|_" +msgstr "|func-frozenset|_" + +#: ../../library/functions.rst:23 +msgid "|func-list|_" +msgstr "|func-list|_" + +#: ../../library/functions.rst:23 +msgid "|func-range|_" +msgstr "|func-range|_" + +#: ../../library/functions.rst:23 +msgid ":func:`vars`" +msgstr ":func:`vars`" + +#: ../../library/functions.rst:24 +msgid ":func:`classmethod`" +msgstr ":func:`classmethod`" + +#: ../../library/functions.rst:24 +msgid ":func:`getattr`" +msgstr ":func:`getattr`" + +#: ../../library/functions.rst:24 +msgid ":func:`locals`" +msgstr ":func:`locals`" + +#: ../../library/functions.rst:24 +msgid ":func:`repr`" +msgstr ":func:`repr`" + +#: ../../library/functions.rst:24 +msgid ":func:`zip`" +msgstr ":func:`zip`" + +#: ../../library/functions.rst:25 +msgid ":func:`compile`" +msgstr ":func:`compile`" + +#: ../../library/functions.rst:25 +msgid ":func:`globals`" +msgstr ":func:`globals`" + +#: ../../library/functions.rst:25 +msgid ":func:`map`" +msgstr ":func:`map`" + +#: ../../library/functions.rst:25 +msgid ":func:`reversed`" +msgstr ":func:`reversed`" + +#: ../../library/functions.rst:25 +msgid ":func:`__import__`" +msgstr ":func:`__import__`" + +#: ../../library/functions.rst:26 +msgid ":func:`complex`" +msgstr ":func:`complex`" + +#: ../../library/functions.rst:26 +msgid ":func:`hasattr`" +msgstr ":func:`hasattr`" + +#: ../../library/functions.rst:26 +msgid ":func:`max`" +msgstr ":func:`max`" + +#: ../../library/functions.rst:26 +msgid ":func:`round`" +msgstr ":func:`round`" + +#: ../../library/functions.rst:45 +msgid "" +"Return the absolute value of a number. The argument may be an integer, a " +"floating point number, or an object implementing :meth:`__abs__`. If the " +"argument is a complex number, its magnitude is returned." +msgstr "返回一个数的绝对值。 参数可以是整数、浮点数或任何实现了 :meth:`__abs__` 的对象。 如果参数是一个复数,则返回它的模。" + +#: ../../library/functions.rst:52 +msgid "" +"Return ``True`` if all elements of the *iterable* are true (or if the " +"iterable is empty). Equivalent to::" +msgstr "如果 *iterable* 的所有元素均为真值(或可迭代对象为空)则返回 ``True`` 。 等价于:" + +#: ../../library/functions.rst:64 +msgid "" +"Return ``True`` if any element of the *iterable* is true. If the iterable " +"is empty, return ``False``. Equivalent to::" +msgstr "如果 *iterable* 的任一元素为真值则返回 ``True``。 如果可迭代对象为空,返回 ``False``。 等价于::" + +#: ../../library/functions.rst:76 +msgid "" +"As :func:`repr`, return a string containing a printable representation of an" +" object, but escape the non-ASCII characters in the string returned by " +":func:`repr` using ``\\x``, ``\\u`` or ``\\U`` escapes. This generates a " +"string similar to that returned by :func:`repr` in Python 2." +msgstr "" +"与 :func:`repr` 类似,返回一个包含对象的可打印表示形式的字符串,但是使用 ``\\x``、``\\u`` 和 ``\\U`` 对 " +":func:`repr` 返回的字符串中非 ASCII 编码的字符进行转义。 生成的字符串和 Python 2 的 :func:`repr` " +"返回的结果相似。" + +#: ../../library/functions.rst:84 +msgid "" +"Convert an integer number to a binary string prefixed with \"0b\". The " +"result is a valid Python expression. If *x* is not a Python :class:`int` " +"object, it has to define an :meth:`__index__` method that returns an " +"integer. Some examples:" +msgstr "" +"将整数转变为以“0b”前缀的二进制字符串。结果是一个合法的 Python 表达式。如果 *x* 不是 Python 的 :class:`int` " +"对象,它必须定义 :meth:`__index__` 方法,以便返回整数值。下面是一些例子:" + +#: ../../library/functions.rst:94 +msgid "" +"If prefix \"0b\" is desired or not, you can use either of the following " +"ways." +msgstr "如果不一定需要前缀“0b”,还可以使用如下的方法。" + +#: ../../library/functions.rst:101 ../../library/functions.rst:757 +#: ../../library/functions.rst:1053 +msgid "See also :func:`format` for more information." +msgstr "另见 :func:`format` 获取更多信息。" + +#: ../../library/functions.rst:106 +msgid "" +"Return a Boolean value, i.e. one of ``True`` or ``False``. *x* is converted" +" using the standard :ref:`truth testing procedure `. If *x* is false" +" or omitted, this returns ``False``; otherwise it returns ``True``. The " +":class:`bool` class is a subclass of :class:`int` (see :ref:`typesnumeric`)." +" It cannot be subclassed further. Its only instances are ``False`` and " +"``True`` (see :ref:`bltin-boolean-values`)." +msgstr "" +"返回一个布尔值,``True`` 或者 ``False``。 *x* 使用标准的 :ref:`真值测试过程 ` 来转换。 如果 *x* " +"是假值或者被省略,返回 ``False``;其他情况返回 ``True``。 :class:`bool` 类是 :class:`int` 的子类(参见 " +":ref:`typesnumeric` )。其他类不能继承自它。它只有 ``False`` 和 ``True`` 两个实例(参见 " +":ref:`bltin-boolean-values` )。" + +#: ../../library/functions.rst:115 ../../library/functions.rst:625 +#: ../../library/functions.rst:841 +msgid "*x* is now a positional-only parameter." +msgstr "*x* 现在只能作为位置参数。" + +#: ../../library/functions.rst:120 +msgid "" +"This function drops you into the debugger at the call site. Specifically, " +"it calls :func:`sys.breakpointhook`, passing ``args`` and ``kws`` straight " +"through. By default, ``sys.breakpointhook()`` calls :func:`pdb.set_trace()`" +" expecting no arguments. In this case, it is purely a convenience function " +"so you don't have to explicitly import :mod:`pdb` or type as much code to " +"enter the debugger. However, :func:`sys.breakpointhook` can be set to some " +"other function and :func:`breakpoint` will automatically call that, allowing" +" you to drop into the debugger of choice." +msgstr "" +"此函数会在调用时将你陷入调试器中。具体来说,它调用 :func:`sys.breakpointhook` ,直接传递 ``args`` 和 " +"``kws`` 。默认情况下, ``sys.breakpointhook()`` 调用 :func:`pdb.set_trace()` " +"且没有参数。在这种情况下,它纯粹是一个便利函数,因此您不必显式导入 :mod:`pdb` 且键入尽可能少的代码即可进入调试器。但是, " +":func:`sys.breakpointhook` 可以设置为其他一些函数并被 :func:`breakpoint` " +"自动调用,以允许进入你想用的调试器。" + +#: ../../library/functions.rst:130 +msgid "" +"Raises an :ref:`auditing event ` ``builtins.breakpoint`` with " +"argument ``breakpointhook``." +msgstr "" +"引发一个 :ref:`审计事件 ` ``builtins.breakpoint`` 并附带参数 " +"``breakpointhook``。" + +#: ../../library/functions.rst:138 +msgid "" +"Return a new array of bytes. The :class:`bytearray` class is a mutable " +"sequence of integers in the range 0 <= x < 256. It has most of the usual " +"methods of mutable sequences, described in :ref:`typesseq-mutable`, as well " +"as most methods that the :class:`bytes` type has, see :ref:`bytes-methods`." +msgstr "" +"返回一个新的 bytes 数组。 :class:`bytearray` 类是一个可变序列,包含范围为 0 <= x < 256 " +"的整数。它有可变序列大部分常见的方法,见 :ref:`typesseq-mutable` 的描述;同时有 :class:`bytes` " +"类型的大部分方法,参见 :ref:`bytes-methods`。" + +#: ../../library/functions.rst:143 +msgid "" +"The optional *source* parameter can be used to initialize the array in a few" +" different ways:" +msgstr "可选形参 *source* 可以用不同的方式来初始化数组:" + +#: ../../library/functions.rst:146 +msgid "" +"If it is a *string*, you must also give the *encoding* (and optionally, " +"*errors*) parameters; :func:`bytearray` then converts the string to bytes " +"using :meth:`str.encode`." +msgstr "" +"如果是一个 *string*,您必须提供 *encoding* 参数(*errors* 参数仍是可选的);:func:`bytearray` 会使用 " +":meth:`str.encode` 方法来将 string 转变成 bytes。" + +#: ../../library/functions.rst:150 +msgid "" +"If it is an *integer*, the array will have that size and will be initialized" +" with null bytes." +msgstr "如果是一个 *integer*,会初始化大小为该数字的数组,并使用 null 字节填充。" + +#: ../../library/functions.rst:153 +msgid "" +"If it is an object conforming to the :ref:`buffer interface " +"`, a read-only buffer of the object will be used to " +"initialize the bytes array." +msgstr "如果是一个遵循 :ref:`缓冲区接口 ` 的对象,该对象的只读缓冲区将被用来初始化字节数组。" + +#: ../../library/functions.rst:156 +msgid "" +"If it is an *iterable*, it must be an iterable of integers in the range ``0 " +"<= x < 256``, which are used as the initial contents of the array." +msgstr "如果是一个 *iterable* 可迭代对象,它的元素的范围必须是 ``0 <= x < 256`` 的整数,它会被用作数组的初始内容。" + +#: ../../library/functions.rst:159 +msgid "Without an argument, an array of size 0 is created." +msgstr "如果没有实参,则创建大小为 0 的数组。" + +#: ../../library/functions.rst:161 +msgid "See also :ref:`binaryseq` and :ref:`typebytearray`." +msgstr "另见 :ref:`binaryseq` 和 :ref:`typebytearray`。" + +#: ../../library/functions.rst:168 +msgid "" +"Return a new \"bytes\" object, which is an immutable sequence of integers in" +" the range ``0 <= x < 256``. :class:`bytes` is an immutable version of " +":class:`bytearray` -- it has the same non-mutating methods and the same " +"indexing and slicing behavior." +msgstr "" +"返回一个新的“bytes”对象, 是一个不可变序列,包含范围为 ``0 <= x < 256`` 的整数。:class:`bytes` 是 " +":class:`bytearray` 的不可变版本 - 它有其中不改变序列的方法和相同的索引、切片操作。" + +#: ../../library/functions.rst:173 +msgid "" +"Accordingly, constructor arguments are interpreted as for :func:`bytearray`." +msgstr "因此,构造函数的实参和 :func:`bytearray` 相同。" + +#: ../../library/functions.rst:175 +msgid "Bytes objects can also be created with literals, see :ref:`strings`." +msgstr "字节对象还可以用字面值创建,参见 :ref:`strings`。" + +#: ../../library/functions.rst:177 +msgid "See also :ref:`binaryseq`, :ref:`typebytes`, and :ref:`bytes-methods`." +msgstr "另见 :ref:`binaryseq`,:ref:`typebytes` 和 :ref:`bytes-methods`。" + +#: ../../library/functions.rst:182 +msgid "" +"Return :const:`True` if the *object* argument appears callable, " +":const:`False` if not. If this returns ``True``, it is still possible that " +"a call fails, but if it is ``False``, calling *object* will never succeed. " +"Note that classes are callable (calling a class returns a new instance); " +"instances are callable if their class has a :meth:`__call__` method." +msgstr "" +"如果参数 *object* 是可调用的就返回 :const:`True`,否则返回 :const:`False`。 如果返回 " +"``True``,调用仍可能失败,但如果返回 ``False``,则调用 *object* 将肯定不会成功。 " +"请注意类是可调用的(调用类将返回一个新的实例);如果实例所属的类有 :meth:`__call__` 则它就是可调用的。" + +#: ../../library/functions.rst:188 +msgid "" +"This function was first removed in Python 3.0 and then brought back in " +"Python 3.2." +msgstr "这个函数一开始在 Python 3.0 被移除了,但在 Python 3.2 被重新加入。" + +#: ../../library/functions.rst:195 +msgid "" +"Return the string representing a character whose Unicode code point is the " +"integer *i*. For example, ``chr(97)`` returns the string ``'a'``, while " +"``chr(8364)`` returns the string ``'€'``. This is the inverse of " +":func:`ord`." +msgstr "" +"返回 Unicode 码位为整数 *i* 的字符的字符串格式。例如,``chr(97)`` 返回字符串 ``'a'``,``chr(8364)`` " +"返回字符串 ``'€'``。这是 :func:`ord` 的逆函数。" + +#: ../../library/functions.rst:199 +msgid "" +"The valid range for the argument is from 0 through 1,114,111 (0x10FFFF in " +"base 16). :exc:`ValueError` will be raised if *i* is outside that range." +msgstr "" +"实参的合法范围是 0 到 1,114,111(16 进制表示是 0x10FFFF)。如果 *i* 超过这个范围,会触发 " +":exc:`ValueError` 异常。" + +#: ../../library/functions.rst:205 +msgid "Transform a method into a class method." +msgstr "把一个方法封装成类方法。" + +#: ../../library/functions.rst:207 +msgid "" +"A class method receives the class as implicit first argument, just like an " +"instance method receives the instance. To declare a class method, use this " +"idiom::" +msgstr "一个类方法把类自己作为第一个实参,就像一个实例方法把实例自己作为第一个实参。请用以下习惯来声明类方法::" + +#: ../../library/functions.rst:215 +msgid "" +"The ``@classmethod`` form is a function :term:`decorator` -- see " +":ref:`function` for details." +msgstr "" +"``@classmethod`` 这样的形式称为函数的 :term:`decorator` -- 详情参阅 :ref:`function`。" + +#: ../../library/functions.rst:218 +msgid "" +"A class method can be called either on the class (such as ``C.f()``) or on " +"an instance (such as ``C().f()``). The instance is ignored except for its " +"class. If a class method is called for a derived class, the derived class " +"object is passed as the implied first argument." +msgstr "" +"类方法的调用可以在类上进行 (例如 ``C.f()``) 也可以在实例上进行 (例如 ``C().f()``)。 其所属类以外的类实例会被忽略。 " +"如果类方法在其所属类的派生类上调用,则该派生类对象会被作为隐含的第一个参数被传入。" + +#: ../../library/functions.rst:223 +msgid "" +"Class methods are different than C++ or Java static methods. If you want " +"those, see :func:`staticmethod` in this section. For more information on " +"class methods, see :ref:`types`." +msgstr "" +"类方法与 C++ 或 Java 中的静态方法不同。 如果你需要后者,请参阅本节中的 :func:`staticmethod`。 " +"有关类方法的更多信息,请参阅 :ref:`types`。" + +#: ../../library/functions.rst:227 +msgid "" +"Class methods can now wrap other :term:`descriptors ` such as " +":func:`property`." +msgstr "类方法现在可以包装其他 :term:`描述器 ` 例如 :func:`property`。" + +#: ../../library/functions.rst:233 +msgid "" +"Compile the *source* into a code or AST object. Code objects can be " +"executed by :func:`exec` or :func:`eval`. *source* can either be a normal " +"string, a byte string, or an AST object. Refer to the :mod:`ast` module " +"documentation for information on how to work with AST objects." +msgstr "" +"将 *source* 编译成代码或 AST 对象。代码对象可以被 :func:`exec` 或 :func:`eval` 执行。*source* " +"可以是常规的字符串、字节字符串,或者 AST 对象。参见 :mod:`ast` 模块的文档了解如何使用 AST 对象。" + +#: ../../library/functions.rst:238 +msgid "" +"The *filename* argument should give the file from which the code was read; " +"pass some recognizable value if it wasn't read from a file (``''`` " +"is commonly used)." +msgstr "" +"*filename* 实参需要是代码读取的文件名;如果代码不需要从文件中读取,可以传入一些可辨识的值(经常会使用 ``''``)。" + +#: ../../library/functions.rst:242 +msgid "" +"The *mode* argument specifies what kind of code must be compiled; it can be " +"``'exec'`` if *source* consists of a sequence of statements, ``'eval'`` if " +"it consists of a single expression, or ``'single'`` if it consists of a " +"single interactive statement (in the latter case, expression statements that" +" evaluate to something other than ``None`` will be printed)." +msgstr "" +"*mode* 实参指定了编译代码必须用的模式。如果 *source* 是语句序列,可以是 ``'exec'``;如果是单一表达式,可以是 " +"``'eval'``;如果是单个交互式语句,可以是 ``'single'``。(在最后一种情况下,如果表达式执行结果不是 ``None`` " +"将会被打印出来。)" + +#: ../../library/functions.rst:248 +msgid "" +"The optional arguments *flags* and *dont_inherit* control which " +":ref:`compiler options ` should be activated and which " +":ref:`future features ` should be allowed. If neither is present (or" +" both are zero) the code is compiled with the same flags that affect the " +"code that is calling :func:`compile`. If the *flags* argument is given and " +"*dont_inherit* is not (or is zero) then the compiler options and the future " +"statements specified by the *flags* argument are used in addition to those " +"that would be used anyway. If *dont_inherit* is a non-zero integer then the " +"*flags* argument is it -- the flags (future features and compiler options) " +"in the surrounding code are ignored." +msgstr "" +"可选参数 *flags* 和 *dont_inherit* 控制应当激活哪个 :ref:`编译器选项 ` " +"以及应当允许哪个 :ref:`future 特性 `。 如果两者都未提供 (或都为零) 则代码会应用与调用 " +":func:`compile` 的代码相同的旗标来编译。 如果给出了 *flags* 参数而未给出 *dont_inherit* (或者为零) " +"则会在无论如何都将被使用的旗标之外还会额外使用 *flags* 参数所指定的编译器选项和 future 语句。 如果 *dont_inherit* " +"为非零整数,则只使用 *flags* 参数 -- 外围代码中的旗标 (future 特性和编译器选项) 会被忽略。" + +#: ../../library/functions.rst:259 +msgid "" +"Compiler options and future statements are specified by bits which can be " +"bitwise ORed together to specify multiple options. The bitfield required to " +"specify a given future feature can be found as the " +":attr:`~__future__._Feature.compiler_flag` attribute on the " +":class:`~__future__._Feature` instance in the :mod:`__future__` module. " +":ref:`Compiler flags ` can be found in :mod:`ast` " +"module, with ``PyCF_`` prefix." +msgstr "" +"编译器选项和 future 语句是由比特位来指明的。 比特位可以通过一起按位 OR 来指明多个选项。 指明特定 future 特性所需的比特位可以在 " +":mod:`__future__` 模块的 :class:`~__future__._Feature` 实例的 " +":attr:`~__future__._Feature.compiler_flag` 属性中找到。 :ref:`编译器旗标 ` 可以在 :mod:`ast` 模块中查找带有 ``PyCF_`` 前缀的名称。" + +#: ../../library/functions.rst:267 +msgid "" +"The argument *optimize* specifies the optimization level of the compiler; " +"the default value of ``-1`` selects the optimization level of the " +"interpreter as given by :option:`-O` options. Explicit levels are ``0`` (no" +" optimization; ``__debug__`` is true), ``1`` (asserts are removed, " +"``__debug__`` is false) or ``2`` (docstrings are removed too)." +msgstr "" +"*optimize* 实参指定编译器的优化级别;默认值 ``-1`` 选择与解释器的 :option:`-O` 选项相同的优化级别。显式级别为 " +"``0`` (没有优化;``__debug__`` 为真)、``1`` (断言被删除, ``__debug__`` 为假)或 ``2`` " +"(文档字符串也被删除)。" + +#: ../../library/functions.rst:273 +msgid "" +"This function raises :exc:`SyntaxError` if the compiled source is invalid, " +"and :exc:`ValueError` if the source contains null bytes." +msgstr "" +"如果编译的源码不合法,此函数会触发 :exc:`SyntaxError` 异常;如果源码包含 null 字节,则会触发 " +":exc:`ValueError` 异常。" + +#: ../../library/functions.rst:276 +msgid "" +"If you want to parse Python code into its AST representation, see " +":func:`ast.parse`." +msgstr "如果您想分析 Python 代码的 AST 表示,请参阅 :func:`ast.parse`。" + +#: ../../library/functions.rst:279 +msgid "" +"Raises an :ref:`auditing event ` ``compile`` with arguments " +"``source``, ``filename``." +msgstr "" +"引发一个 :ref:`审计事件 ` ``compile`` 附带参数 ``source``, ``filename``。" + +#: ../../library/functions.rst:281 +msgid "" +"Raises an :ref:`auditing event ` ``compile`` with arguments " +"``source`` and ``filename``. This event may also be raised by implicit " +"compilation." +msgstr "" +"引发一个 :ref:`审计事件 ` ``compile`` 附带参数 ``source`` 和 ``filename``。 " +"此事件也可通过隐式编译来引发。" + +#: ../../library/functions.rst:287 +msgid "" +"When compiling a string with multi-line code in ``'single'`` or ``'eval'`` " +"mode, input must be terminated by at least one newline character. This is " +"to facilitate detection of incomplete and complete statements in the " +":mod:`code` module." +msgstr "" +"在 ``'single'`` 或 ``'eval'`` 模式编译多行代码字符串时,输入必须以至少一个换行符结尾。 这使 :mod:`code` " +"模块更容易检测语句的完整性。" + +#: ../../library/functions.rst:294 +msgid "" +"It is possible to crash the Python interpreter with a sufficiently " +"large/complex string when compiling to an AST object due to stack depth " +"limitations in Python's AST compiler." +msgstr "在将足够大或者足够复杂的字符串编译成 AST 对象时,Python 解释器有可能因为 Python AST 编译器的栈深度限制而崩溃。" + +#: ../../library/functions.rst:298 +msgid "" +"Allowed use of Windows and Mac newlines. Also input in ``'exec'`` mode does" +" not have to end in a newline anymore. Added the *optimize* parameter." +msgstr "允许使用 Windows 和 Mac 的换行符。在 ``'exec'`` 模式不再需要以换行符结尾。增加了 *optimize* 形参。" + +#: ../../library/functions.rst:302 +msgid "" +"Previously, :exc:`TypeError` was raised when null bytes were encountered in " +"*source*." +msgstr "之前 *source* 中包含 null 字节的话会触发 :exc:`TypeError` 异常。" + +#: ../../library/functions.rst:306 +msgid "" +"``ast.PyCF_ALLOW_TOP_LEVEL_AWAIT`` can now be passed in flags to enable " +"support for top-level ``await``, ``async for``, and ``async with``." +msgstr "" +"``ast.PyCF_ALLOW_TOP_LEVEL_AWAIT`` 现在可在旗标中传入以启用对最高层级 ``await``, ``async " +"for`` 和 ``async with`` 的支持。" + +#: ../../library/functions.rst:313 +msgid "" +"Return a complex number with the value *real* + *imag*\\*1j or convert a " +"string or number to a complex number. If the first parameter is a string, " +"it will be interpreted as a complex number and the function must be called " +"without a second parameter. The second parameter can never be a string. " +"Each argument may be any numeric type (including complex). If *imag* is " +"omitted, it defaults to zero and the constructor serves as a numeric " +"conversion like :class:`int` and :class:`float`. If both arguments are " +"omitted, returns ``0j``." +msgstr "" +"返回值为 *real* + *imag*\\*1j " +"的复数,或将字符串或数字转换为复数。如果第一个形参是字符串,则它被解释为一个复数,并且函数调用时必须没有第二个形参。第二个形参不能是字符串。每个实参都可以是任意的数值类型(包括复数)。如果省略了" +" *imag*,则默认值为零,构造函数会像 :class:`int` 和 :class:`float` 一样进行数值转换。如果两个实参都省略,则返回 " +"``0j``。" + +#: ../../library/functions.rst:322 +msgid "" +"For a general Python object ``x``, ``complex(x)`` delegates to " +"``x.__complex__()``. If ``__complex__()`` is not defined then it falls back" +" to :meth:`__float__`. If ``__float__()`` is not defined then it falls back" +" to :meth:`__index__`." +msgstr "" +"对于一个普通 Python 对象 ``x``,``complex(x)`` 会委托给 ``x.__complex__()``。 如果 " +"``__complex__()`` 未定义则将回退至 :meth:`__float__`。 如果 ``__float__()`` 未定义则将回退至 " +":meth:`__index__`。" + +#: ../../library/functions.rst:329 +msgid "" +"When converting from a string, the string must not contain whitespace around" +" the central ``+`` or ``-`` operator. For example, ``complex('1+2j')`` is " +"fine, but ``complex('1 + 2j')`` raises :exc:`ValueError`." +msgstr "" +"当从字符串转换时,字符串在 ``+`` 或 ``-`` 的周围必须不能有空格。例如 ``complex('1+2j')`` 是合法的,但 " +"``complex('1 + 2j')`` 会触发 :exc:`ValueError` 异常。" + +#: ../../library/functions.rst:334 +msgid "The complex type is described in :ref:`typesnumeric`." +msgstr ":ref:`typesnumeric` 描述了复数类型。" + +#: ../../library/functions.rst:336 ../../library/functions.rst:622 +#: ../../library/functions.rst:838 +msgid "Grouping digits with underscores as in code literals is allowed." +msgstr "您可以使用下划线将代码文字中的数字进行分组。" + +#: ../../library/functions.rst:339 +msgid "" +"Falls back to :meth:`__index__` if :meth:`__complex__` and :meth:`__float__`" +" are not defined." +msgstr "如果 :meth:`__complex__` 和 :meth:`__float__` 未定义则回退至 :meth:`__index__`。" + +#: ../../library/functions.rst:346 +msgid "" +"This is a relative of :func:`setattr`. The arguments are an object and a " +"string. The string must be the name of one of the object's attributes. The" +" function deletes the named attribute, provided the object allows it. For " +"example, ``delattr(x, 'foobar')`` is equivalent to ``del x.foobar``." +msgstr "" +":func:`setattr` 相关的函数。实参是一个对象和一个字符串。该字符串必须是对象的某个属性。如果对象允许,该函数将删除指定的属性。例如 " +"``delattr(x, 'foobar')`` 等价于 ``del x.foobar`` 。" + +#: ../../library/functions.rst:358 +msgid "" +"Create a new dictionary. The :class:`dict` object is the dictionary class. " +"See :class:`dict` and :ref:`typesmapping` for documentation about this " +"class." +msgstr "" +"创建一个新的字典。:class:`dict` 对象是一个字典类。参见 :class:`dict` 和 :ref:`typesmapping` " +"了解这个类。" + +#: ../../library/functions.rst:361 +msgid "" +"For other containers see the built-in :class:`list`, :class:`set`, and " +":class:`tuple` classes, as well as the :mod:`collections` module." +msgstr "" +"其他容器类型,请参见内置的 :class:`list`、:class:`set` 和 :class:`tuple` 类,以及 " +":mod:`collections` 模块。" + +#: ../../library/functions.rst:367 +msgid "" +"Without arguments, return the list of names in the current local scope. " +"With an argument, attempt to return a list of valid attributes for that " +"object." +msgstr "如果没有实参,则返回当前本地作用域中的名称列表。如果有实参,它会尝试返回该对象的有效属性列表。" + +#: ../../library/functions.rst:370 +msgid "" +"If the object has a method named :meth:`__dir__`, this method will be called" +" and must return the list of attributes. This allows objects that implement " +"a custom :func:`__getattr__` or :func:`__getattribute__` function to " +"customize the way :func:`dir` reports their attributes." +msgstr "" +"如果对象有一个名为 :meth:`__dir__` 的方法,那么该方法将被调用,并且必须返回一个属性列表。这允许实现自定义 " +":func:`__getattr__` 或 :func:`__getattribute__` 函数的对象能够自定义 :func:`dir` " +"来报告它们的属性。" + +#: ../../library/functions.rst:375 +msgid "" +"If the object does not provide :meth:`__dir__`, the function tries its best " +"to gather information from the object's :attr:`~object.__dict__` attribute, " +"if defined, and from its type object. The resulting list is not necessarily" +" complete, and may be inaccurate when the object has a custom " +":func:`__getattr__`." +msgstr "" +"如果对象不提供 :meth:`__dir__`,这个函数会尝试从对象已定义的 :attr:`~object.__dict__` " +"属性和类型对象收集信息。结果列表并不总是完整的,如果对象有自定义 :func:`__getattr__`,那结果可能不准确。" + +#: ../../library/functions.rst:380 +msgid "" +"The default :func:`dir` mechanism behaves differently with different types " +"of objects, as it attempts to produce the most relevant, rather than " +"complete, information:" +msgstr "默认的 :func:`dir` 机制对不同类型的对象行为不同,它会试图返回最相关而不是最全的信息:" + +#: ../../library/functions.rst:384 +msgid "" +"If the object is a module object, the list contains the names of the " +"module's attributes." +msgstr "如果对象是模块对象,则列表包含模块的属性名称。" + +#: ../../library/functions.rst:387 +msgid "" +"If the object is a type or class object, the list contains the names of its " +"attributes, and recursively of the attributes of its bases." +msgstr "如果对象是类型或类对象,则列表包含它们的属性名称,并且递归查找所有基类的属性。" + +#: ../../library/functions.rst:390 +msgid "" +"Otherwise, the list contains the object's attributes' names, the names of " +"its class's attributes, and recursively of the attributes of its class's " +"base classes." +msgstr "否则,列表包含对象的属性名称,它的类属性名称,并且递归查找它的类的所有基类的属性。" + +#: ../../library/functions.rst:394 +msgid "The resulting list is sorted alphabetically. For example:" +msgstr "返回的列表按字母表排序。例如:" + +#: ../../library/functions.rst:413 +msgid "" +"Because :func:`dir` is supplied primarily as a convenience for use at an " +"interactive prompt, it tries to supply an interesting set of names more than" +" it tries to supply a rigorously or consistently defined set of names, and " +"its detailed behavior may change across releases. For example, metaclass " +"attributes are not in the result list when the argument is a class." +msgstr "" +"因为 :func:`dir` " +"主要是为了便于在交互式时使用,所以它会试图返回人们感兴趣的名字集合,而不是试图保证结果的严格性或一致性,它具体的行为也可能在不同版本之间改变。例如,当实参是一个类时,metaclass" +" 的属性不包含在结果列表中。" + +#: ../../library/functions.rst:423 +msgid "" +"Take two (non complex) numbers as arguments and return a pair of numbers " +"consisting of their quotient and remainder when using integer division. " +"With mixed operand types, the rules for binary arithmetic operators apply. " +"For integers, the result is the same as ``(a // b, a % b)``. For floating " +"point numbers the result is ``(q, a % b)``, where *q* is usually " +"``math.floor(a / b)`` but may be 1 less than that. In any case ``q * b + a " +"% b`` is very close to *a*, if ``a % b`` is non-zero it has the same sign as" +" *b*, and ``0 <= abs(a % b) < abs(b)``." +msgstr "" +"它将两个(非复数)数字作为实参,并在执行整数除法时返回一对商和余数。对于混合操作数类型,适用双目算术运算符的规则。对于整数,结果和 ``(a // b," +" a % b)`` 一致。对于浮点数,结果是 ``(q, a % b)`` ,*q* 通常是 ``math.floor(a / b)`` 但可能会比 1" +" 小。在任何情况下, ``q * b + a % b`` 和 *a* 基本相等;如果 ``a % b`` 非零,它的符号和 *b* 一样,并且 ``0" +" <= abs(a % b) < abs(b)`` 。" + +#: ../../library/functions.rst:435 +msgid "" +"Return an enumerate object. *iterable* must be a sequence, an " +":term:`iterator`, or some other object which supports iteration. The " +":meth:`~iterator.__next__` method of the iterator returned by " +":func:`enumerate` returns a tuple containing a count (from *start* which " +"defaults to 0) and the values obtained from iterating over *iterable*." +msgstr "" +"返回一个枚举对象。*iterable* 必须是一个序列,或 :term:`iterator`,或其他支持迭代的对象。 :func:`enumerate`" +" 返回的迭代器的 :meth:`~iterator.__next__` 方法返回一个元组,里面包含一个计数值(从 *start* 开始,默认为 " +"0)和通过迭代 *iterable* 获得的值。" + +#: ../../library/functions.rst:447 +msgid "Equivalent to::" +msgstr "等价于::" + +#: ../../library/functions.rst:458 +msgid "" +"The arguments are a string and optional globals and locals. If provided, " +"*globals* must be a dictionary. If provided, *locals* can be any mapping " +"object." +msgstr "" +"实参是一个字符串,以及可选的 globals 和 locals。*globals* 实参必须是一个字典。*locals* 可以是任何映射对象。" + +#: ../../library/functions.rst:462 +msgid "" +"The *expression* argument is parsed and evaluated as a Python expression " +"(technically speaking, a condition list) using the *globals* and *locals* " +"dictionaries as global and local namespace. If the *globals* dictionary is " +"present and does not contain a value for the key ``__builtins__``, a " +"reference to the dictionary of the built-in module :mod:`builtins` is " +"inserted under that key before *expression* is parsed. This means that " +"*expression* normally has full access to the standard :mod:`builtins` module" +" and restricted environments are propagated. If the *locals* dictionary is " +"omitted it defaults to the *globals* dictionary. If both dictionaries are " +"omitted, the expression is executed with the *globals* and *locals* in the " +"environment where :func:`eval` is called. Note, *eval()* does not have " +"access to the :term:`nested scopes ` (non-locals) in the " +"enclosing environment." +msgstr "" +"*expression* 参数会作为一个 Python 表达式(从技术上说是一个条件列表)被解析并求值,并使用 *globals* 和 *locals*" +" 字典作为全局和局部命名空间。 如果 *globals* 字典存在且不包含以 ``__builtins__`` 为键的值,则会在解析 " +"*expression* 之前插入以此为键的对内置模块 :mod:`builtins` 的引用。 这意味着 *expression* 通常具有对标准 " +":mod:`builtins` 模块的完全访问权限且受限的环境会被传播。 如果省略 *locals* 字典则其默认值为 *globals* 字典。 " +"如果两个字典同时省略,则表达式执行时会使用 :func:`eval` 被调用的环境中的 *globals* 和 *locals*。 " +"请注意,*eval()* 并没有对外围环境下的 (非局部) :term:`嵌套作用域 ` 的访问权限。" + +#: ../../library/functions.rst:476 +msgid "" +"The return value is the result of the evaluated expression. Syntax errors " +"are reported as exceptions. Example:" +msgstr "返回值就是表达式的求值结果。 语法错误将作为异常被报告。 例如:" + +#: ../../library/functions.rst:483 +msgid "" +"This function can also be used to execute arbitrary code objects (such as " +"those created by :func:`compile`). In this case pass a code object instead " +"of a string. If the code object has been compiled with ``'exec'`` as the " +"*mode* argument, :func:`eval`\\'s return value will be ``None``." +msgstr "" +"这个函数也可以用来执行任何代码对象(如 :func:`compile` 创建的)。这种情况下,参数是代码对象,而不是字符串。如果编译该对象时的 " +"*mode* 实参是 ``'exec'`` 那么 :func:`eval` 返回值为 ``None`` 。" + +#: ../../library/functions.rst:488 +msgid "" +"Hints: dynamic execution of statements is supported by the :func:`exec` " +"function. The :func:`globals` and :func:`locals` functions returns the " +"current global and local dictionary, respectively, which may be useful to " +"pass around for use by :func:`eval` or :func:`exec`." +msgstr "" +"提示: :func:`exec` 函数支持动态执行语句。 :func:`globals` 和 :func:`locals` " +"函数各自返回当前的全局和本地字典,因此您可以将它们传递给 :func:`eval` 或 :func:`exec` 来使用。" + +#: ../../library/functions.rst:493 +msgid "" +"See :func:`ast.literal_eval` for a function that can safely evaluate strings" +" with expressions containing only literals." +msgstr "另外可以参阅 :func:`ast.literal_eval`,该函数可以安全执行仅包含文字的表达式字符串。" + +#: ../../library/functions.rst:496 ../../library/functions.rst:532 +msgid "" +"Raises an :ref:`auditing event ` ``exec`` with argument " +"``code_object``." +msgstr "引发一个 :ref:`审计事件 ` ``exec`` 附带参数 ``code_object``。" + +#: ../../library/functions.rst:498 ../../library/functions.rst:534 +msgid "" +"Raises an :ref:`auditing event ` ``exec`` with the code object as " +"the argument. Code compilation events may also be raised." +msgstr "引发一个 :ref:`审计事件 ` ``exec`` 附带代码对象作为参数。 代码编译事件也可能被引发。" + +#: ../../library/functions.rst:505 +msgid "" +"This function supports dynamic execution of Python code. *object* must be " +"either a string or a code object. If it is a string, the string is parsed " +"as a suite of Python statements which is then executed (unless a syntax " +"error occurs). [#]_ If it is a code object, it is simply executed. In all " +"cases, the code that's executed is expected to be valid as file input (see " +"the section :ref:`file-input` in the Reference Manual). Be aware that the " +":keyword:`nonlocal`, :keyword:`yield`, and :keyword:`return` statements may" +" not be used outside of function definitions even within the context of code" +" passed to the :func:`exec` function. The return value is ``None``." +msgstr "" +"这个函数支持动态执行 Python 代码。 *object* 必须是字符串或者代码对象。 如果是字符串,那么该字符串将被解析为一系列 Python " +"语句并执行(除非发生语法错误)。 [#]_ 如果是代码对象,它将被直接执行。 在任何情况下,被执行的代码都应当是有效的文件输入(见参考手册中的 " +":ref:`file-input` 一节)。 请注意即使在传递给 :func:`exec` " +"函数的代码的上下文中,:keyword:`nonlocal`, :keyword:`yield` 和 :keyword:`return` " +"语句也不能在函数定义以外使用。 该函数的返回值是 ``None``。" + +#: ../../library/functions.rst:516 +msgid "" +"In all cases, if the optional parts are omitted, the code is executed in the" +" current scope. If only *globals* is provided, it must be a dictionary (and" +" not a subclass of dictionary), which will be used for both the global and " +"the local variables. If *globals* and *locals* are given, they are used for" +" the global and local variables, respectively. If provided, *locals* can be" +" any mapping object. Remember that at module level, globals and locals are " +"the same dictionary. If exec gets two separate objects as *globals* and " +"*locals*, the code will be executed as if it were embedded in a class " +"definition." +msgstr "" +"无论哪种情况,如果省略了可选项,代码将在当前作用域内执行。 如果只提供了 " +"*globals*,则它必须是一个字典(不能是字典的子类),该字典将同时被用于全局和局部变量。 如果同时提供了 *globals* 和 " +"*locals*,它们会分别被用于全局和局部变量。 如果提供了 *locals*,则它可以是任何映射对象。 请记住在模块层级上,globals 和 " +"locals 是同一个字典。 如果 exec 得到两个单独对象作为 *globals* 和 *locals*,则代码将如同嵌入类定义的情况一样执行。" + +#: ../../library/functions.rst:526 +msgid "" +"If the *globals* dictionary does not contain a value for the key " +"``__builtins__``, a reference to the dictionary of the built-in module " +":mod:`builtins` is inserted under that key. That way you can control what " +"builtins are available to the executed code by inserting your own " +"``__builtins__`` dictionary into *globals* before passing it to " +":func:`exec`." +msgstr "" +"如果 *globals* 字典不包含 ``__builtins__`` 键值,则将为该键插入对内建 :mod:`builtins` " +"模块字典的引用。因此,在将执行的代码传递给 :func:`exec` 之前,可以通过将自己的 ``__builtins__`` 字典插入到 " +"*globals* 中来控制可以使用哪些内置代码。" + +#: ../../library/functions.rst:539 +msgid "" +"The built-in functions :func:`globals` and :func:`locals` return the current" +" global and local dictionary, respectively, which may be useful to pass " +"around for use as the second and third argument to :func:`exec`." +msgstr "" +"内置 :func:`globals` 和 :func:`locals` 函数各自返回当前的全局和本地字典,因此可以将它们传递给 :func:`exec`" +" 的第二个和第三个实参。" + +#: ../../library/functions.rst:545 +msgid "" +"The default *locals* act as described for function :func:`locals` below: " +"modifications to the default *locals* dictionary should not be attempted. " +"Pass an explicit *locals* dictionary if you need to see effects of the code " +"on *locals* after function :func:`exec` returns." +msgstr "" +"默认情况下,*locals* 的行为如下面 :func:`locals` 函数描述的一样:不要试图改变默认的 *locals* 字典。 如果您需要在 " +":func:`exec` 函数返回时查看代码对 *locals* 的影响,请明确地传递 *locals* 字典。" + +#: ../../library/functions.rst:553 +msgid "" +"Construct an iterator from those elements of *iterable* for which *function*" +" returns true. *iterable* may be either a sequence, a container which " +"supports iteration, or an iterator. If *function* is ``None``, the identity" +" function is assumed, that is, all elements of *iterable* that are false are" +" removed." +msgstr "" +"用 *iterable* 中函数 *function* 返回真的那些元素,构建一个新的迭代器。*iterable* " +"可以是一个序列,一个支持迭代的容器,或一个迭代器。如果 *function* 是 ``None`` ,则会假设它是一个身份函数,即 *iterable*" +" 中所有返回假的元素会被移除。" + +#: ../../library/functions.rst:559 +msgid "" +"Note that ``filter(function, iterable)`` is equivalent to the generator " +"expression ``(item for item in iterable if function(item))`` if function is " +"not ``None`` and ``(item for item in iterable if item)`` if function is " +"``None``." +msgstr "" +"请注意, ``filter(function, iterable)`` 相当于一个生成器表达式,当 function 不是 ``None`` 的时候为 " +"``(item for item in iterable if function(item))``;function 是 ``None`` 的时候为 " +"``(item for item in iterable if item)`` 。" + +#: ../../library/functions.rst:564 +msgid "" +"See :func:`itertools.filterfalse` for the complementary function that " +"returns elements of *iterable* for which *function* returns false." +msgstr "" +"请参阅 :func:`itertools.filterfalse` 了解,只有 *function* 返回 false 时才选取 *iterable* " +"中元素的补充函数。" + +#: ../../library/functions.rst:574 +msgid "" +"Return a floating point number constructed from a number or string *x*." +msgstr "返回从数字或字符串 *x* 生成的浮点数。" + +#: ../../library/functions.rst:576 +msgid "" +"If the argument is a string, it should contain a decimal number, optionally " +"preceded by a sign, and optionally embedded in whitespace. The optional " +"sign may be ``'+'`` or ``'-'``; a ``'+'`` sign has no effect on the value " +"produced. The argument may also be a string representing a NaN (not-a-" +"number), or a positive or negative infinity. More precisely, the input must" +" conform to the following grammar after leading and trailing whitespace " +"characters are removed:" +msgstr "" +"如果实参是字符串,则它必须是包含十进制数字的字符串,字符串前面可以有符号,之前也可以有空格。可选的符号有 ``'+'`` 和 ``'-'`` ; " +"``'+'`` 对创建的值没有影响。实参也可以是 NaN(非数字)、正负无穷大的字符串。确切地说,除去首尾的空格后,输入必须遵循以下语法:" + +#: ../../library/functions.rst:591 +msgid "" +"Here ``floatnumber`` is the form of a Python floating-point literal, " +"described in :ref:`floating`. Case is not significant, so, for example, " +"\"inf\", \"Inf\", \"INFINITY\" and \"iNfINity\" are all acceptable spellings" +" for positive infinity." +msgstr "" +"这里, ``floatnumber`` 是 Python 浮点数的字符串形式,详见 " +":ref:`floating`。字母大小写都可以,例如,“inf”、“Inf”、“INFINITY”、“iNfINity” 都可以表示正无穷大。" + +#: ../../library/functions.rst:596 +msgid "" +"Otherwise, if the argument is an integer or a floating point number, a " +"floating point number with the same value (within Python's floating point " +"precision) is returned. If the argument is outside the range of a Python " +"float, an :exc:`OverflowError` will be raised." +msgstr "" +"另一方面,如果实参是整数或浮点数,则返回具有相同值(在 Python 浮点精度范围内)的浮点数。如果实参在 Python 浮点精度范围外,则会触发 " +":exc:`OverflowError`。" + +#: ../../library/functions.rst:601 +msgid "" +"For a general Python object ``x``, ``float(x)`` delegates to " +"``x.__float__()``. If ``__float__()`` is not defined then it falls back to " +":meth:`__index__`." +msgstr "" +"对于一个普通 Python 对象 ``x``,``float(x)`` 会委托给 ``x.__float__()``。 如果 " +"``__float__()`` 未定义则将回退至 :meth:`__index__`。" + +#: ../../library/functions.rst:605 +msgid "If no argument is given, ``0.0`` is returned." +msgstr "如果没有实参,则返回 ``0.0`` 。" + +#: ../../library/functions.rst:607 +msgid "Examples::" +msgstr "示例::" + +#: ../../library/functions.rst:620 +msgid "The float type is described in :ref:`typesnumeric`." +msgstr ":ref:`typesnumeric` 描述了浮点类型。" + +#: ../../library/functions.rst:628 +msgid "Falls back to :meth:`__index__` if :meth:`__float__` is not defined." +msgstr "如果 :meth:`__float__` 未定义则回退至 :meth:`__index__`。" + +#: ../../library/functions.rst:638 +msgid "" +"Convert a *value* to a \"formatted\" representation, as controlled by " +"*format_spec*. The interpretation of *format_spec* will depend on the type " +"of the *value* argument, however there is a standard formatting syntax that " +"is used by most built-in types: :ref:`formatspec`." +msgstr "" +"将 *value* 转换为 *format_spec* 控制的“格式化”表示。*format_spec* 的解释取决于 *value* " +"实参的类型,但是大多数内置类型使用标准格式化语法::ref:`formatspec`。" + +#: ../../library/functions.rst:643 +msgid "" +"The default *format_spec* is an empty string which usually gives the same " +"effect as calling :func:`str(value) `." +msgstr "默认的 *format_spec* 是一个空字符串,它通常给出与调用 :func:`str(value)` 相同的结果。" + +#: ../../library/functions.rst:646 +msgid "" +"A call to ``format(value, format_spec)`` is translated to " +"``type(value).__format__(value, format_spec)`` which bypasses the instance " +"dictionary when searching for the value's :meth:`__format__` method. A " +":exc:`TypeError` exception is raised if the method search reaches " +":mod:`object` and the *format_spec* is non-empty, or if either the " +"*format_spec* or the return value are not strings." +msgstr "" +"调用 ``format(value, format_spec)`` 会转换成 ``type(value).__format__(value, " +"format_spec)`` ,所以实例字典中的 :meth:`__format__` 方法将不会调用。如果方法搜索回退到 :mod:`object` " +"类但 *format_spec* 不为空,或者如果 *format_spec* 或返回值不是字符串,则会触发 :exc:`TypeError` 异常。" + +#: ../../library/functions.rst:653 +msgid "" +"``object().__format__(format_spec)`` raises :exc:`TypeError` if " +"*format_spec* is not an empty string." +msgstr "" +"当 *format_spec* 不是空字符串时, ``object().__format__(format_spec)`` 会触发 " +":exc:`TypeError`。" + +#: ../../library/functions.rst:662 +msgid "" +"Return a new :class:`frozenset` object, optionally with elements taken from " +"*iterable*. ``frozenset`` is a built-in class. See :class:`frozenset` and " +":ref:`types-set` for documentation about this class." +msgstr "" +"返回一个新的 :class:`frozenset` 对象,它包含可选参数 *iterable* 中的元素。 ``frozenset`` " +"是一个内置的类。有关此类的文档,请参阅 :class:`frozenset` 和 :ref:`types-set`。" + +#: ../../library/functions.rst:666 +msgid "" +"For other containers see the built-in :class:`set`, :class:`list`, " +":class:`tuple`, and :class:`dict` classes, as well as the :mod:`collections`" +" module." +msgstr "" +"请参阅内建的 :class:`set`、:class:`list`、:class:`tuple` 和 :class:`dict` 类,以及 " +":mod:`collections` 模块来了解其它的容器。" + +#: ../../library/functions.rst:673 +msgid "" +"Return the value of the named attribute of *object*. *name* must be a " +"string. If the string is the name of one of the object's attributes, the " +"result is the value of that attribute. For example, ``getattr(x, " +"'foobar')`` is equivalent to ``x.foobar``. If the named attribute does not " +"exist, *default* is returned if provided, otherwise :exc:`AttributeError` is" +" raised." +msgstr "" +"返回对象命名属性的值。*name* 必须是字符串。如果该字符串是对象的属性之一,则返回该属性的值。例如, ``getattr(x, " +"'foobar')`` 等同于 ``x.foobar``。如果指定的属性不存在,且提供了 *default* 值,则返回它,否则触发 " +":exc:`AttributeError`。" + +#: ../../library/functions.rst:681 +msgid "" +"Since :ref:`private name mangling ` happens at " +"compilation time, one must manually mangle a private attribute's (attributes" +" with two leading underscores) name in order to retrieve it with " +":func:`getattr`." +msgstr "" +"由于 :ref:`私有名称混合 ` " +"发生在编译时,因此必须手动混合私有属性(以两个下划线打头的属性)名称以使用 :func:`getattr` 来提取它。" + +#: ../../library/functions.rst:689 +msgid "" +"Return the dictionary implementing the current module namespace. For code " +"within functions, this is set when the function is defined and remains the " +"same regardless of where the function is called." +msgstr "返回实现当前模块命名空间的字典。对于函数内的代码,这是在定义函数时设置的,无论函数在哪里被调用都保持不变。" + +#: ../../library/functions.rst:696 +msgid "" +"The arguments are an object and a string. The result is ``True`` if the " +"string is the name of one of the object's attributes, ``False`` if not. " +"(This is implemented by calling ``getattr(object, name)`` and seeing whether" +" it raises an :exc:`AttributeError` or not.)" +msgstr "" +"该实参是一个对象和一个字符串。如果字符串是对象的属性之一的名称,则返回 ``True``,否则返回 ``False``。(此功能是通过调用 " +"``getattr(object, name)`` 看是否有 :exc:`AttributeError` 异常来实现的。)" + +#: ../../library/functions.rst:704 +msgid "" +"Return the hash value of the object (if it has one). Hash values are " +"integers. They are used to quickly compare dictionary keys during a " +"dictionary lookup. Numeric values that compare equal have the same hash " +"value (even if they are of different types, as is the case for 1 and 1.0)." +msgstr "" +"返回该对象的哈希值(如果它有的话)。哈希值是整数。它们在字典查找元素时用来快速比较字典的键。相同大小的数字变量有相同的哈希值(即使它们类型不同,如 1 " +"和 1.0)。" + +#: ../../library/functions.rst:711 +msgid "" +"For objects with custom :meth:`__hash__` methods, note that :func:`hash` " +"truncates the return value based on the bit width of the host machine. See " +":meth:`__hash__` for details." +msgstr "" +"如果对象实现了自己的 :meth:`__hash__` 方法,请注意,:func:`hash` 根据机器的字长来截断返回值。另请参阅 " +":meth:`__hash__`。" + +#: ../../library/functions.rst:717 +msgid "" +"Invoke the built-in help system. (This function is intended for interactive" +" use.) If no argument is given, the interactive help system starts on the " +"interpreter console. If the argument is a string, then the string is looked" +" up as the name of a module, function, class, method, keyword, or " +"documentation topic, and a help page is printed on the console. If the " +"argument is any other kind of object, a help page on the object is " +"generated." +msgstr "" +"启动内置的帮助系统(此函数主要在交互式中使用)。如果没有实参,解释器控制台里会启动交互式帮助系统。如果实参是一个字符串,则在模块、函数、类、方法、关键字或文档主题中搜索该字符串,并在控制台上打印帮助信息。如果实参是其他任意对象,则会生成该对象的帮助页。" + +#: ../../library/functions.rst:724 +msgid "" +"Note that if a slash(/) appears in the parameter list of a function, when " +"invoking :func:`help`, it means that the parameters prior to the slash are " +"positional-only. For more info, see :ref:`the FAQ entry on positional-only " +"parameters `." +msgstr "" +"请注意如果在函数的形参列表中出现了斜杠 (/),则它在发起调用 :func:`help` 的时候意味着斜杠之前的均为仅限位置形参。 更多相关信息,请参阅" +" :ref:`有关仅限位置形参的 FAQ 条目 `。" + +#: ../../library/functions.rst:729 +msgid "" +"This function is added to the built-in namespace by the :mod:`site` module." +msgstr "该函数通过 :mod:`site` 模块加入到内置命名空间。" + +#: ../../library/functions.rst:731 +msgid "" +"Changes to :mod:`pydoc` and :mod:`inspect` mean that the reported signatures" +" for callables are now more comprehensive and consistent." +msgstr ":mod:`pydoc` 和 :mod:`inspect` 的变更使得可调用对象的签名信息更加全面和一致。" + +#: ../../library/functions.rst:738 +msgid "" +"Convert an integer number to a lowercase hexadecimal string prefixed with " +"\"0x\". If *x* is not a Python :class:`int` object, it has to define an " +":meth:`__index__` method that returns an integer. Some examples:" +msgstr "" +"将整数转换为以“0x”为前缀的小写十六进制字符串。如果 *x* 不是 Python :class:`int` 对象,则必须定义返回整数的 " +":meth:`__index__` 方法。一些例子:" + +#: ../../library/functions.rst:747 +msgid "" +"If you want to convert an integer number to an uppercase or lower " +"hexadecimal string with prefix or not, you can use either of the following " +"ways:" +msgstr "如果要将整数转换为大写或小写的十六进制字符串,并可选择有无“0x”前缀,则可以使用如下方法:" + +#: ../../library/functions.rst:759 +msgid "" +"See also :func:`int` for converting a hexadecimal string to an integer using" +" a base of 16." +msgstr "另请参阅 :func:`int` 将十六进制字符串转换为以 16 为基数的整数。" + +#: ../../library/functions.rst:764 +msgid "" +"To obtain a hexadecimal string representation for a float, use the " +":meth:`float.hex` method." +msgstr "如果要获取浮点数的十六进制字符串形式,请使用 :meth:`float.hex` 方法。" + +#: ../../library/functions.rst:770 +msgid "" +"Return the \"identity\" of an object. This is an integer which is " +"guaranteed to be unique and constant for this object during its lifetime. " +"Two objects with non-overlapping lifetimes may have the same :func:`id` " +"value." +msgstr "" +"返回对象的“标识值”。该值是一个整数,在此对象的生命周期中保证是唯一且恒定的。两个生命期不重叠的对象可能具有相同的 :func:`id` 值。" + +#: ../../library/functions.rst:777 +msgid "" +"Raises an :ref:`auditing event ` ``builtins.id`` with argument " +"``id``." +msgstr "引发一个 :ref:`审计事件 ` ``builtins.id`` 并附带参数 ``id``。" + +#: ../../library/functions.rst:782 +msgid "" +"If the *prompt* argument is present, it is written to standard output " +"without a trailing newline. The function then reads a line from input, " +"converts it to a string (stripping a trailing newline), and returns that. " +"When EOF is read, :exc:`EOFError` is raised. Example::" +msgstr "" +"如果存在 *prompt* " +"实参,则将其写入标准输出,末尾不带换行符。接下来,该函数从输入中读取一行,将其转换为字符串(除了末尾的换行符)并返回。当读取到 EOF 时,则触发 " +":exc:`EOFError`。例如::" + +#: ../../library/functions.rst:792 +msgid "" +"If the :mod:`readline` module was loaded, then :func:`input` will use it to " +"provide elaborate line editing and history features." +msgstr "如果加载了 :mod:`readline` 模块,:func:`input` 将使用它来提供复杂的行编辑和历史记录功能。" + +#: ../../library/functions.rst:795 +msgid "" +"Raises an :ref:`auditing event ` ``builtins.input`` with argument " +"``prompt``." +msgstr "引发一个 :ref:`审计事件 ` ``builtins.input`` 附带参数 ``prompt``。" + +#: ../../library/functions.rst:797 +msgid "" +"Raises an :ref:`auditing event ` ``builtins.input`` with argument " +"``prompt`` before reading input" +msgstr "在读取输入前引发一个 :ref:`审计事件 ` ``builtins.input`` 附带参数 ``prompt``" + +#: ../../library/functions.rst:800 +msgid "" +"Raises an :ref:`auditing event ` ``builtins.input/result`` with " +"argument ``result``." +msgstr "" +"Raises an :ref:`auditing event ` ``builtins.input/result`` with " +"argument ``result``." + +#: ../../library/functions.rst:802 +msgid "" +"Raises an auditing event ``builtins.input/result`` with the result after " +"successfully reading input." +msgstr "在成功读取输入之后引发一个审计事件 ``builtins.input/result`` 附带结果。" + +#: ../../library/functions.rst:809 +msgid "" +"Return an integer object constructed from a number or string *x*, or return " +"``0`` if no arguments are given. If *x* defines :meth:`__int__`, ``int(x)``" +" returns ``x.__int__()``. If *x* defines :meth:`__index__`, it returns " +"``x.__index__()``. If *x* defines :meth:`__trunc__`, it returns " +"``x.__trunc__()``. For floating point numbers, this truncates towards zero." +msgstr "" +"返回一个基于数字或字符串 *x* 构造的整数对象,或者在未给出参数时返回 ``0``。 如果 *x* 定义了 " +":meth:`__int__`,``int(x)`` 将返回 ``x.__int__()``。 如果 *x* 定义了 " +":meth:`__index__`,它将返回 ``x.__index__()``。 如果 *x* 定义了 :meth:`__trunc__`,它将返回 " +"``x.__trunc__()``。 对于浮点数,它将向零舍入。" + +#: ../../library/functions.rst:816 +msgid "" +"If *x* is not a number or if *base* is given, then *x* must be a string, " +":class:`bytes`, or :class:`bytearray` instance representing an :ref:`integer" +" literal ` in radix *base*. Optionally, the literal can be " +"preceded by ``+`` or ``-`` (with no space in between) and surrounded by " +"whitespace. A base-n literal consists of the digits 0 to n-1, with ``a`` to" +" ``z`` (or ``A`` to ``Z``) having values 10 to 35. The default *base* is " +"10. The allowed values are 0 and 2--36. Base-2, -8, and -16 literals can be " +"optionally prefixed with ``0b``/``0B``, ``0o``/``0O``, or ``0x``/``0X``, as " +"with integer literals in code. Base 0 means to interpret exactly as a code " +"literal, so that the actual base is 2, 8, 10, or 16, and so that " +"``int('010', 0)`` is not legal, while ``int('010')`` is, as well as " +"``int('010', 8)``." +msgstr "" +"如果 *x* 不是数字,或者有 *base* 参数,*x* 必须是字符串、:class:`bytes`、表示进制为 *base* 的 " +":ref:`整数字面值` 的 :class:`bytearray` 实例。该文字前可以有 ``+`` 或 ``-`` " +"(中间不能有空格),前后可以有空格。一个进制为 n 的数字包含 0 到 n-1 的数,其中 ``a`` 到 ``z`` (或 ``A`` 到 ``Z``" +" )表示 10 到 35。默认的 *base* 为 10 ,允许的进制有 0、2-36。2、8、16 进制的数字可以在代码中用 " +"``0b``/``0B`` 、 ``0o``/``0O`` 、 ``0x``/``0X`` 前缀来表示。进制为 0 " +"将安照代码的字面量来精确解释,最后的结果会是 2、8、10、16 进制中的一个。所以 ``int('010', 0)`` 是非法的,但 " +"``int('010')`` 和 ``int('010', 8)`` 是合法的。" + +#: ../../library/functions.rst:829 +msgid "The integer type is described in :ref:`typesnumeric`." +msgstr "整数类型定义请参阅 :ref:`typesnumeric` 。" + +#: ../../library/functions.rst:831 +msgid "" +"If *base* is not an instance of :class:`int` and the *base* object has a " +":meth:`base.__index__ ` method, that method is called to " +"obtain an integer for the base. Previous versions used :meth:`base.__int__ " +"` instead of :meth:`base.__index__ `." +msgstr "" +"如果 *base* 不是 :class:`int` 的实例,但 *base* 对象有 :meth:`base.__index__ " +"` 方法,则会调用该方法来获取进制数。以前的版本使用 :meth:`base.__int__ " +"` 而不是 :meth:`base.__index__ `。" + +#: ../../library/functions.rst:844 +msgid "Falls back to :meth:`__index__` if :meth:`__int__` is not defined." +msgstr "如果 :meth:`__int__` 未定义则回退至 :meth:`__index__`。" + +#: ../../library/functions.rst:847 +msgid "" +":class:`int` string inputs and string representations can be limited to help" +" avoid denial of service attacks. A :exc:`ValueError` is raised when the " +"limit is exceeded while converting a string *x* to an :class:`int` or when " +"converting an :class:`int` into a string would exceed the limit. See the " +":ref:`integer string conversion length limitation ` " +"documentation." +msgstr "" +":class:`int` 字符串输入和字符串表示形式可受到限制以帮助避免拒绝服务攻击。 当将一个字符串 *x* 转换为 :class:`int` " +"或者当将一个 :class:`int` 转换为字符串的操作超出限制则会引发 :exc:`ValueError`。 请参阅 " +":ref:`整数字符串转换长度限制 ` 文档。" + +#: ../../library/functions.rst:858 +msgid "" +"Return ``True`` if the *object* argument is an instance of the *classinfo* " +"argument, or of a (direct, indirect or :term:`virtual `) subclass thereof. If *object* is not an object of the given type, " +"the function always returns ``False``. If *classinfo* is a tuple of type " +"objects (or recursively, other such tuples), return ``True`` if *object* is " +"an instance of any of the types. If *classinfo* is not a type or tuple of " +"types and such tuples, a :exc:`TypeError` exception is raised." +msgstr "" +"如果参数 *object* 是参数 *classinfo* 的实例或者是其 (直接、间接或 :term:`虚拟 `) 子类则返回 ``True``。 如果 *object* 不是给定类型的对象,函数将总是返回 ``False``。 如果 " +"*classinfo* 是类型对象元组(或由其他此类元组递归组成的元组),那么如果 *object* 是其中任何一个类型的实例就返回 ``True``。" +" 如果 *classinfo* 既不是类型,也不是类型元组或类型元组的元组,则将引发 :exc:`TypeError` 异常。" + +#: ../../library/functions.rst:870 +msgid "" +"Return ``True`` if *class* is a subclass (direct, indirect or :term:`virtual" +" `) of *classinfo*. A class is considered a subclass " +"of itself. *classinfo* may be a tuple of class objects (or recursively, " +"other such tuples), in which case return ``True`` if *class* is a subclass " +"of any entry in *classinfo*. In any other case, a :exc:`TypeError` " +"exception is raised." +msgstr "" + +#: ../../library/functions.rst:880 +msgid "" +"Return an :term:`iterator` object. The first argument is interpreted very " +"differently depending on the presence of the second argument. Without a " +"second argument, *object* must be a collection object which supports the " +"iteration protocol (the :meth:`__iter__` method), or it must support the " +"sequence protocol (the :meth:`__getitem__` method with integer arguments " +"starting at ``0``). If it does not support either of those protocols, " +":exc:`TypeError` is raised. If the second argument, *sentinel*, is given, " +"then *object* must be a callable object. The iterator created in this case " +"will call *object* with no arguments for each call to its " +":meth:`~iterator.__next__` method; if the value returned is equal to " +"*sentinel*, :exc:`StopIteration` will be raised, otherwise the value will be" +" returned." +msgstr "" +"返回一个 :term:`iterator` 对象。根据是否存在第二个实参,第一个实参的解释是非常不同的。如果没有第二个实参,*object* " +"必须是支持迭代协议(有 :meth:`__iter__` 方法)的集合对象,或必须支持序列协议(有 :meth:`__getitem__` " +"方法,且数字参数从 ``0`` 开始)。如果它不支持这些协议,会触发 :exc:`TypeError`。如果有第二个实参 *sentinel*,那么 " +"*object* 必须是可调用的对象。这种情况下生成的迭代器,每次迭代调用它的 :meth:`~iterator.__next__` " +"方法时都会不带实参地调用 *object*;如果返回的结果是 *sentinel* 则触发 :exc:`StopIteration`,否则返回调用结果。" + +#: ../../library/functions.rst:893 +msgid "See also :ref:`typeiter`." +msgstr "另请参阅 :ref:`typeiter`。" + +#: ../../library/functions.rst:895 +msgid "" +"One useful application of the second form of :func:`iter` is to build a " +"block-reader. For example, reading fixed-width blocks from a binary database" +" file until the end of file is reached::" +msgstr "适合 :func:`iter` 的第二种形式的应用之一是构建块读取器。 例如,从二进制数据库文件中读取固定宽度的块,直至到达文件的末尾::" + +#: ../../library/functions.rst:907 +msgid "" +"Return the length (the number of items) of an object. The argument may be a" +" sequence (such as a string, bytes, tuple, list, or range) or a collection " +"(such as a dictionary, set, or frozen set)." +msgstr "" +"返回对象的长度(元素个数)。实参可以是序列(如 string、bytes、tuple、list 或 range 等)或集合(如 " +"dictionary、set 或 frozen set 等)。" + +#: ../../library/functions.rst:913 +msgid "" +"``len`` raises :exc:`OverflowError` on lengths larger than " +":data:`sys.maxsize`, such as :class:`range(2 ** 100) `." +msgstr "" +"``len`` 对于大于 :data:`sys.maxsize` 的长度如 :class:`range(2 ** 100) ` 会引发 " +":exc:`OverflowError`。" + +#: ../../library/functions.rst:921 +msgid "" +"Rather than being a function, :class:`list` is actually a mutable sequence " +"type, as documented in :ref:`typesseq-list` and :ref:`typesseq`." +msgstr "" +"虽然被称为函数,:class:`list` 实际上是一种可变序列类型,详情请参阅 :ref:`typesseq-list` 和 " +":ref:`typesseq`。" + +#: ../../library/functions.rst:927 +msgid "" +"Update and return a dictionary representing the current local symbol table. " +"Free variables are returned by :func:`locals` when it is called in function " +"blocks, but not in class blocks. Note that at the module level, " +":func:`locals` and :func:`globals` are the same dictionary." +msgstr "" +"更新并返回表示当前本地符号表的字典。 在函数代码块但不是类代码块中调用 :func:`locals` 时将返回自由变量。 " +"请注意在模块层级上,:func:`locals` 和 :func:`globals` 是同一个字典。" + +#: ../../library/functions.rst:933 +msgid "" +"The contents of this dictionary should not be modified; changes may not " +"affect the values of local and free variables used by the interpreter." +msgstr "不要更改此字典的内容;更改不会影响解释器使用的局部变量或自由变量的值。" + +#: ../../library/functions.rst:938 +msgid "" +"Return an iterator that applies *function* to every item of *iterable*, " +"yielding the results. If additional *iterable* arguments are passed, " +"*function* must take that many arguments and is applied to the items from " +"all iterables in parallel. With multiple iterables, the iterator stops when" +" the shortest iterable is exhausted. For cases where the function inputs " +"are already arranged into argument tuples, see :func:`itertools.starmap`\\." +msgstr "" +"返回一个将 *function* 应用于 *iterable* 中每一项并输出其结果的迭代器。 如果传入了额外的 *iterable* " +"参数,*function* 必须接受相同个数的实参并被应用于从所有可迭代对象中并行获取的项。 " +"当有多个可迭代对象时,最短的可迭代对象耗尽则整个迭代就将结束。 对于函数的输入已经是参数元组的情况,请参阅 " +":func:`itertools.starmap`。" + +#: ../../library/functions.rst:949 +msgid "" +"Return the largest item in an iterable or the largest of two or more " +"arguments." +msgstr "返回可迭代对象中最大的元素,或者返回两个及以上实参中最大的。" + +#: ../../library/functions.rst:952 +msgid "" +"If one positional argument is provided, it should be an :term:`iterable`. " +"The largest item in the iterable is returned. If two or more positional " +"arguments are provided, the largest of the positional arguments is returned." +msgstr "" +"如果只提供了一个位置参数,它必须是非空 " +":term:`iterable`,返回可迭代对象中最大的元素;如果提供了两个及以上的位置参数,则返回最大的位置参数。" + +#: ../../library/functions.rst:957 ../../library/functions.rst:994 +msgid "" +"There are two optional keyword-only arguments. The *key* argument specifies " +"a one-argument ordering function like that used for :meth:`list.sort`. The " +"*default* argument specifies an object to return if the provided iterable is" +" empty. If the iterable is empty and *default* is not provided, a " +":exc:`ValueError` is raised." +msgstr "" +"有两个可选只能用关键字的实参。*key* 实参指定排序函数用的参数,如传给 :meth:`list.sort` 的。*default* " +"实参是当可迭代对象为空时返回的值。如果可迭代对象为空,并且没有给 *default* ,则会触发 :exc:`ValueError`。" + +#: ../../library/functions.rst:963 +msgid "" +"If multiple items are maximal, the function returns the first one " +"encountered. This is consistent with other sort-stability preserving tools " +"such as ``sorted(iterable, key=keyfunc, reverse=True)[0]`` and " +"``heapq.nlargest(1, iterable, key=keyfunc)``." +msgstr "" +"如果有多个最大元素,则此函数将返回第一个找到的。这和其他稳定排序工具如 ``sorted(iterable, key=keyfunc, " +"reverse=True)[0]`` 和 ``heapq.nlargest(1, iterable, key=keyfunc)`` 保持一致。" + +#: ../../library/functions.rst:968 ../../library/functions.rst:1005 +msgid "The *default* keyword-only argument." +msgstr "keyword-only 实参 *default* 。" + +#: ../../library/functions.rst:971 ../../library/functions.rst:1008 +msgid "The *key* can be ``None``." +msgstr "*key* 可以为 ``None``。" + +#: ../../library/functions.rst:979 +msgid "" +"Return a \"memory view\" object created from the given argument. See " +":ref:`typememoryview` for more information." +msgstr "返回由给定实参创建的“内存视图”对象。有关详细信息,请参阅 :ref:`typememoryview`。" + +#: ../../library/functions.rst:986 +msgid "" +"Return the smallest item in an iterable or the smallest of two or more " +"arguments." +msgstr "返回可迭代对象中最小的元素,或者返回两个及以上实参中最小的。" + +#: ../../library/functions.rst:989 +msgid "" +"If one positional argument is provided, it should be an :term:`iterable`. " +"The smallest item in the iterable is returned. If two or more positional " +"arguments are provided, the smallest of the positional arguments is " +"returned." +msgstr "" +"如果只提供了一个位置参数,它必须是 :term:`iterable`,返回可迭代对象中最小的元素;如果提供了两个及以上的位置参数,则返回最小的位置参数。" + +#: ../../library/functions.rst:1000 +msgid "" +"If multiple items are minimal, the function returns the first one " +"encountered. This is consistent with other sort-stability preserving tools " +"such as ``sorted(iterable, key=keyfunc)[0]`` and ``heapq.nsmallest(1, " +"iterable, key=keyfunc)``." +msgstr "" +"如果有多个最小元素,则此函数将返回第一个找到的。这和其他稳定排序工具如 ``sorted(iterable, key=keyfunc)[0]`` 和 " +"``heapq.nsmallest(1, iterable, key=keyfunc)`` 保持一致。" + +#: ../../library/functions.rst:1014 +msgid "" +"Retrieve the next item from the *iterator* by calling its " +":meth:`~iterator.__next__` method. If *default* is given, it is returned if" +" the iterator is exhausted, otherwise :exc:`StopIteration` is raised." +msgstr "" +"通过调用 *iterator* 的 :meth:`~iterator.__next__` 方法获取下一个元素。如果迭代器耗尽,则返回给定的 " +"*default*,如果没有默认值则触发 :exc:`StopIteration`。" + +#: ../../library/functions.rst:1021 +msgid "" +"Return a new featureless object. :class:`object` is a base for all classes." +" It has the methods that are common to all instances of Python classes. " +"This function does not accept any arguments." +msgstr "" +"返回一个没有特征的新对象。:class:`object` 是所有类的基类。它具有所有 Python 类实例的通用方法。这个函数不接受任何实参。" + +#: ../../library/functions.rst:1027 +msgid "" +":class:`object` does *not* have a :attr:`~object.__dict__`, so you can't " +"assign arbitrary attributes to an instance of the :class:`object` class." +msgstr "" +"由于 :class:`object` 没有 :attr:`~object.__dict__`,因此无法将任意属性赋给 :class:`object` " +"的实例。" + +#: ../../library/functions.rst:1033 +msgid "" +"Convert an integer number to an octal string prefixed with \"0o\". The " +"result is a valid Python expression. If *x* is not a Python :class:`int` " +"object, it has to define an :meth:`__index__` method that returns an " +"integer. For example:" +msgstr "" +"将一个整数转变为一个前缀为“0o”的八进制字符串。结果是一个合法的 Python 表达式。如果 *x* 不是 Python 的 :class:`int`" +" 对象,那它需要定义 :meth:`__index__` 方法返回一个整数。一些例子:" + +#: ../../library/functions.rst:1043 +msgid "" +"If you want to convert an integer number to octal string either with prefix " +"\"0o\" or not, you can use either of the following ways." +msgstr "如果要将整数转换为八进制字符串,并可选择有无“0o”前缀,则可以使用如下方法:" + +#: ../../library/functions.rst:1060 +msgid "" +"Open *file* and return a corresponding :term:`file object`. If the file " +"cannot be opened, an :exc:`OSError` is raised. See :ref:`tut-files` for more" +" examples of how to use this function." +msgstr "" +"打开 *file* 并返回对应的 :term:`file object`。 如果该文件不能被打开,则引发 :exc:`OSError`。 请参阅 " +":ref:`tut-files` 获取此函数的更多用法示例。" + +#: ../../library/functions.rst:1064 +msgid "" +"*file* is a :term:`path-like object` giving the pathname (absolute or " +"relative to the current working directory) of the file to be opened or an " +"integer file descriptor of the file to be wrapped. (If a file descriptor is" +" given, it is closed when the returned I/O object is closed, unless " +"*closefd* is set to ``False``.)" +msgstr "" +"*file* 是一个 :term:`path-like " +"object`,表示将要打开的文件的路径(绝对路径或者当前工作目录的相对路径),也可以是要被封装的整数类型文件描述符。(如果是文件描述符,它会随着返回的" +" I/O 对象关闭而关闭,除非 *closefd* 被设为 ``False`` 。)" + +#: ../../library/functions.rst:1070 +msgid "" +"*mode* is an optional string that specifies the mode in which the file is " +"opened. It defaults to ``'r'`` which means open for reading in text mode. " +"Other common values are ``'w'`` for writing (truncating the file if it " +"already exists), ``'x'`` for exclusive creation and ``'a'`` for appending " +"(which on *some* Unix systems, means that *all* writes append to the end of " +"the file regardless of the current seek position). In text mode, if " +"*encoding* is not specified the encoding used is platform dependent: " +"``locale.getpreferredencoding(False)`` is called to get the current locale " +"encoding. (For reading and writing raw bytes use binary mode and leave " +"*encoding* unspecified.) The available modes are:" +msgstr "" +"*mode* 是一个可选字符串,用于指定打开文件的模式。默认值是 ``'r'`` ,这意味着它以文本模式打开并读取。其他常见模式有:写入 " +"``'w'`` (截断已经存在的文件);排它性创建 ``'x'`` ;追加写 ``'a'`` (在 *一些* Unix " +"系统上,无论当前的文件指针在什么位置,*所有* 写入都会追加到文件末尾)。在文本模式,如果 *encoding* " +"没有指定,则根据平台来决定使用的编码:使用 ``locale.getpreferredencoding(False)`` " +"来获取本地编码。(要读取和写入原始字节,请使用二进制模式并不要指定 *encoding*。)可用的模式有:" + +#: ../../library/functions.rst:1087 +msgid "Character" +msgstr "字符" + +#: ../../library/functions.rst:1087 +msgid "Meaning" +msgstr "含意" + +#: ../../library/functions.rst:1089 +msgid "``'r'``" +msgstr "``'r'``" + +#: ../../library/functions.rst:1089 +msgid "open for reading (default)" +msgstr "读取(默认)" + +#: ../../library/functions.rst:1090 +msgid "``'w'``" +msgstr "``'w'``" + +#: ../../library/functions.rst:1090 +msgid "open for writing, truncating the file first" +msgstr "写入,并先截断文件" + +#: ../../library/functions.rst:1091 +msgid "``'x'``" +msgstr "``'x'``" + +#: ../../library/functions.rst:1091 +msgid "open for exclusive creation, failing if the file already exists" +msgstr "排它性创建,如果文件已存在则失败" + +#: ../../library/functions.rst:1092 +msgid "``'a'``" +msgstr "``'a'``" + +#: ../../library/functions.rst:1092 +msgid "open for writing, appending to the end of the file if it exists" +msgstr "写入,如果文件存在则在末尾追加" + +#: ../../library/functions.rst:1093 +msgid "``'b'``" +msgstr "``'b'``" + +#: ../../library/functions.rst:1093 +msgid "binary mode" +msgstr "二进制模式" + +#: ../../library/functions.rst:1094 +msgid "``'t'``" +msgstr "``'t'``" + +#: ../../library/functions.rst:1094 +msgid "text mode (default)" +msgstr "文本模式(默认)" + +#: ../../library/functions.rst:1095 +msgid "``'+'``" +msgstr "``'+'``" + +#: ../../library/functions.rst:1095 +msgid "open for updating (reading and writing)" +msgstr "打开用于更新(读取与写入)" + +#: ../../library/functions.rst:1098 +msgid "" +"The default mode is ``'r'`` (open for reading text, synonym of ``'rt'``). " +"Modes ``'w+'`` and ``'w+b'`` open and truncate the file. Modes ``'r+'`` and" +" ``'r+b'`` open the file with no truncation." +msgstr "" +"默认模式为 ``'r'`` (打开用于读取文本,与 ``'rt'`` 同义)。 模式 ``'w+'`` 与 ``'w+b'`` 将打开文件并清空内容。 " +"模式 ``'r+'`` 与 ``'r+b'`` 将打开文件并不清空内容。" + +#: ../../library/functions.rst:1102 +msgid "" +"As mentioned in the :ref:`io-overview`, Python distinguishes between binary " +"and text I/O. Files opened in binary mode (including ``'b'`` in the *mode* " +"argument) return contents as :class:`bytes` objects without any decoding. " +"In text mode (the default, or when ``'t'`` is included in the *mode* " +"argument), the contents of the file are returned as :class:`str`, the bytes " +"having been first decoded using a platform-dependent encoding or using the " +"specified *encoding* if given." +msgstr "" +"正如在 :ref:`io-overview` 中提到的,Python区分二进制和文本I/O。以二进制模式打开的文件(包括 *mode* 参数中的 " +"``'b'`` )返回的内容为 :class:`bytes` 对象,不进行任何解码。在文本模式下(默认情况下,或者在 *mode* 参数中包含 " +"``'t'`` )时,文件内容返回为 :class:`str` ,首先使用指定的 *encoding* (如果给定)或者使用平台默认的的字节编码解码。" + +#: ../../library/functions.rst:1110 +msgid "" +"There is an additional mode character permitted, ``'U'``, which no longer " +"has any effect, and is considered deprecated. It previously enabled " +":term:`universal newlines` in text mode, which became the default behaviour " +"in Python 3.0. Refer to the documentation of the :ref:`newline ` parameter for further details." +msgstr "" +"此外还允许使用一个模式字符 ``'U'``,该字符已不再具有任何效果,并被视为已弃用。 之前它会在文本模式中启用 :term:`universal " +"newlines`,这在 Python 3.0 中成为默认行为。 请参阅 :ref:`newline `" +" 形参的文档了解更多细节。" + +#: ../../library/functions.rst:1118 +msgid "" +"Python doesn't depend on the underlying operating system's notion of text " +"files; all the processing is done by Python itself, and is therefore " +"platform-independent." +msgstr "Python不依赖于底层操作系统的文本文件概念;所有处理都由Python本身完成,因此与平台无关。" + +#: ../../library/functions.rst:1122 +msgid "" +"*buffering* is an optional integer used to set the buffering policy. Pass 0" +" to switch buffering off (only allowed in binary mode), 1 to select line " +"buffering (only usable in text mode), and an integer > 1 to indicate the " +"size in bytes of a fixed-size chunk buffer. Note that specifying a buffer " +"size this way applies for binary buffered I/O, but ``TextIOWrapper`` (i.e., " +"files opened with ``mode='r+'``) would have another buffering. To disable " +"buffering in ``TextIOWrapper``, consider using the ``write_through`` flag " +"for :func:`io.TextIOWrapper.reconfigure`. When no *buffering* argument is " +"given, the default buffering policy works as follows:" +msgstr "" +"*buffering* 是一个可选的整数,用于设置缓冲策略。 传入 0 来关闭缓冲(只允许在二进制模式下),传入 1 " +"来选择行缓冲(只在文本模式下可用),传入一个整数 > 1 来表示固定大小的块缓冲区的字节大小。注意,这样指定缓冲区的大小适用于二进制缓冲的 I/O ,但" +" ``TextIOWrapper`` (即用 ``mode='r+'`` 打开的文件)会有另一种缓冲。要禁用在 ``TextIOWrapper`` " +"缓冲,考虑使用 :func:`io.TextIOWrapper.reconfigure` 的 ``write_through`` 标志来。当没有给出 " +"*buffering* 参数时,默认的缓冲策略工作如下。" + +#: ../../library/functions.rst:1132 +msgid "" +"Binary files are buffered in fixed-size chunks; the size of the buffer is " +"chosen using a heuristic trying to determine the underlying device's \"block" +" size\" and falling back on :attr:`io.DEFAULT_BUFFER_SIZE`. On many " +"systems, the buffer will typically be 4096 or 8192 bytes long." +msgstr "" +"二进制文件以固定大小的块进行缓冲;使用启发式方法选择缓冲区的大小,尝试确定底层设备的“块大小”或使用 " +":attr:`io.DEFAULT_BUFFER_SIZE`。在许多系统上,缓冲区的长度通常为4096或8192字节。" + +#: ../../library/functions.rst:1137 +msgid "" +"\"Interactive\" text files (files for which :meth:`~io.IOBase.isatty` " +"returns ``True``) use line buffering. Other text files use the policy " +"described above for binary files." +msgstr "" +"“交互式”文本文件( :meth:`~io.IOBase.isatty` 返回 ``True`` " +"的文件)使用行缓冲。其他文本文件使用上述策略用于二进制文件。" + +#: ../../library/functions.rst:1141 +msgid "" +"*encoding* is the name of the encoding used to decode or encode the file. " +"This should only be used in text mode. The default encoding is platform " +"dependent (whatever :func:`locale.getpreferredencoding` returns), but any " +":term:`text encoding` supported by Python can be used. See the " +":mod:`codecs` module for the list of supported encodings." +msgstr "" +"*encoding* 是用于解码或编码文件的编码的名称。这应该只在文本模式下使用。默认编码是依赖于平台的(不 管 " +":func:`locale.getpreferredencoding` 返回何值),但可以使用任何Python支持的 :term:`text " +"encoding` 。有关支持的编码列表,请参阅 :mod:`codecs` 模块。" + +#: ../../library/functions.rst:1148 +msgid "" +"*errors* is an optional string that specifies how encoding and decoding " +"errors are to be handled—this cannot be used in binary mode. A variety of " +"standard error handlers are available (listed under :ref:`error-handlers`), " +"though any error handling name that has been registered with " +":func:`codecs.register_error` is also valid. The standard names include:" +msgstr "" +"*errors* 是一个可选的字符串参数,用于指定如何处理编码和解码错误 - 这不能在二进制模式下使用。可以使用各种标准错误处理程序(列在 " +":ref:`error-handlers` ),但是使用 :func:`codecs.register_error` " +"注册的任何错误处理名称也是有效的。标准名称包括:" + +#: ../../library/functions.rst:1156 +msgid "" +"``'strict'`` to raise a :exc:`ValueError` exception if there is an encoding " +"error. The default value of ``None`` has the same effect." +msgstr "如果存在编码错误,``'strict'`` 会引发 :exc:`ValueError` 异常。 默认值 ``None`` 具有相同的效果。" + +#: ../../library/functions.rst:1160 +msgid "" +"``'ignore'`` ignores errors. Note that ignoring encoding errors can lead to" +" data loss." +msgstr "``'ignore'`` 忽略错误。请注意,忽略编码错误可能会导致数据丢失。" + +#: ../../library/functions.rst:1163 +msgid "" +"``'replace'`` causes a replacement marker (such as ``'?'``) to be inserted " +"where there is malformed data." +msgstr "``'replace'`` 会将替换标记(例如 ``'?'`` )插入有错误数据的地方。" + +#: ../../library/functions.rst:1166 +msgid "" +"``'surrogateescape'`` will represent any incorrect bytes as low surrogate " +"code units ranging from U+DC80 to U+DCFF. These surrogate code units will " +"then be turned back into the same bytes when the ``surrogateescape`` error " +"handler is used when writing data. This is useful for processing files in " +"an unknown encoding." +msgstr "" +"``'surrogateescape'`` 将把任何不正确的字节表示为 U+DC80 至 U+DCFF 范围内的下方替代码位。 当在写入数据时使用 " +"``surrogateescape`` 错误处理器时这些替代码位会被转回到相同的字节。 这适用于处理具有未知编码格式的文件。" + +#: ../../library/functions.rst:1173 +msgid "" +"``'xmlcharrefreplace'`` is only supported when writing to a file. Characters" +" not supported by the encoding are replaced with the appropriate XML " +"character reference ``&#nnn;``." +msgstr "" +"只有在写入文件时才支持 ``'xmlcharrefreplace'``。编码不支持的字符将替换为相应的XML字符引用 ``&#nnn;``。" + +#: ../../library/functions.rst:1177 +msgid "" +"``'backslashreplace'`` replaces malformed data by Python's backslashed " +"escape sequences." +msgstr "``'backslashreplace'`` 用Python的反向转义序列替换格式错误的数据。" + +#: ../../library/functions.rst:1180 +msgid "" +"``'namereplace'`` (also only supported when writing) replaces unsupported " +"characters with ``\\N{...}`` escape sequences." +msgstr "``'namereplace'`` (也只在编写时支持)用 ``\\N{...}`` 转义序列替换不支持的字符。" + +#: ../../library/functions.rst:1188 +msgid "" +"*newline* controls how :term:`universal newlines` mode works (it only " +"applies to text mode). It can be ``None``, ``''``, ``'\\n'``, ``'\\r'``, " +"and ``'\\r\\n'``. It works as follows:" +msgstr "" +"*newline* 控制 :term:`universal newlines` 模式如何生效(它仅适用于文本模式)。它可以是 " +"``None``,``''``,``'\\n'``,``'\\r'`` 和 ``'\\r\\n'``。它的工作原理:" + +#: ../../library/functions.rst:1192 +msgid "" +"When reading input from the stream, if *newline* is ``None``, universal " +"newlines mode is enabled. Lines in the input can end in ``'\\n'``, " +"``'\\r'``, or ``'\\r\\n'``, and these are translated into ``'\\n'`` before " +"being returned to the caller. If it is ``''``, universal newlines mode is " +"enabled, but line endings are returned to the caller untranslated. If it " +"has any of the other legal values, input lines are only terminated by the " +"given string, and the line ending is returned to the caller untranslated." +msgstr "" +"从流中读取输入时,如果 *newline* 为 ``None``,则启用通用换行模式。输入中的行可以以 ``'\\n'``,``'\\r'`` 或 " +"``'\\r\\n'`` 结尾,这些行被翻译成 ``'\\n'`` 在返回呼叫者之前。如果它是 " +"``''``,则启用通用换行模式,但行结尾将返回给调用者未翻译。如果它具有任何其他合法值,则输入行仅由给定字符串终止,并且返回给调用者时行结尾不会被转换。" + +#: ../../library/functions.rst:1200 +msgid "" +"When writing output to the stream, if *newline* is ``None``, any ``'\\n'`` " +"characters written are translated to the system default line separator, " +":data:`os.linesep`. If *newline* is ``''`` or ``'\\n'``, no translation " +"takes place. If *newline* is any of the other legal values, any ``'\\n'`` " +"characters written are translated to the given string." +msgstr "" +"将输出写入流时,如果 *newline* 为 ``None``,则写入的任何 ``'\\n'`` 字符都将转换为系统默认行分隔符 " +":data:`os.linesep`。如果 *newline* 是 ``''`` 或 ``'\\n'``,则不进行翻译。如果 *newline* " +"是任何其他合法值,则写入的任何 ``'\\n'`` 字符将被转换为给定的字符串。" + +#: ../../library/functions.rst:1206 +msgid "" +"If *closefd* is ``False`` and a file descriptor rather than a filename was " +"given, the underlying file descriptor will be kept open when the file is " +"closed. If a filename is given *closefd* must be ``True`` (the default) " +"otherwise an error will be raised." +msgstr "" +"如果 *closefd* 是 ``False`` 并且给出了文件描述符而不是文件名,那么当文件关闭时,底层文件描述符将保持打开状态。如果给出文件名则 " +"*closefd* 必须为 ``True`` (默认值),否则将引发错误。" + +#: ../../library/functions.rst:1211 +msgid "" +"A custom opener can be used by passing a callable as *opener*. The " +"underlying file descriptor for the file object is then obtained by calling " +"*opener* with (*file*, *flags*). *opener* must return an open file " +"descriptor (passing :mod:`os.open` as *opener* results in functionality " +"similar to passing ``None``)." +msgstr "" +"可以通过传递可调用的 *opener* 来使用自定义开启器。然后通过使用参数( *file*,*flags* )调用 *opener* " +"获得文件对象的基础文件描述符。 *opener* 必须返回一个打开的文件描述符(使用 :mod:`os.open` as *opener* 时与传递 " +"``None`` 的效果相同)。" + +#: ../../library/functions.rst:1217 +msgid "The newly created file is :ref:`non-inheritable `." +msgstr "新创建的文件是 :ref:`不可继承的 `。" + +#: ../../library/functions.rst:1219 +msgid "" +"The following example uses the :ref:`dir_fd ` parameter of the " +":func:`os.open` function to open a file relative to a given directory::" +msgstr "" +"下面的示例使用 :func:`os.open` 函数的 :ref:`dir_fd ` 的形参,从给定的目录中用相对路径打开文件::" + +#: ../../library/functions.rst:1232 +msgid "" +"The type of :term:`file object` returned by the :func:`open` function " +"depends on the mode. When :func:`open` is used to open a file in a text " +"mode (``'w'``, ``'r'``, ``'wt'``, ``'rt'``, etc.), it returns a subclass of " +":class:`io.TextIOBase` (specifically :class:`io.TextIOWrapper`). When used " +"to open a file in a binary mode with buffering, the returned class is a " +"subclass of :class:`io.BufferedIOBase`. The exact class varies: in read " +"binary mode, it returns an :class:`io.BufferedReader`; in write binary and " +"append binary modes, it returns an :class:`io.BufferedWriter`, and in " +"read/write mode, it returns an :class:`io.BufferedRandom`. When buffering " +"is disabled, the raw stream, a subclass of :class:`io.RawIOBase`, " +":class:`io.FileIO`, is returned." +msgstr "" +":func:`open` 函数所返回的 :term:`file object` 类型取决于所用模式。 当使用 :func:`open` 以文本模式 " +"(``'w'``, ``'r'``, ``'wt'``, ``'rt'`` 等) 打开文件时,它将返回 :class:`io.TextIOBase` " +"(具体为 :class:`io.TextIOWrapper`) 的一个子类。 当使用缓冲以二进制模式打开文件时,返回的类是 " +":class:`io.BufferedIOBase` 的一个子类。 具体的类会有多种:在只读的二进制模式下,它将返回 " +":class:`io.BufferedReader`;在写入二进制和追加二进制模式下,它将返回 " +":class:`io.BufferedWriter`,而在读/写模式下,它将返回 :class:`io.BufferedRandom`。 " +"当禁用缓冲时,则会返回原始流,即 :class:`io.RawIOBase` 的一个子类 :class:`io.FileIO`。" + +#: ../../library/functions.rst:1253 +msgid "" +"See also the file handling modules, such as, :mod:`fileinput`, :mod:`io` " +"(where :func:`open` is declared), :mod:`os`, :mod:`os.path`, " +":mod:`tempfile`, and :mod:`shutil`." +msgstr "" +"另请参阅文件操作模块,例如 :mod:`fileinput`、:mod:`io` (声明了 " +":func:`open`)、:mod:`os`、:mod:`os.path`、:mod:`tempfile` 和 :mod:`shutil`。" + +#: ../../library/functions.rst:1257 +msgid "" +"Raises an :ref:`auditing event ` ``open`` with arguments ``file``," +" ``mode``, ``flags``." +msgstr "" +"引发一个 :ref:`审计事件 ` ``open`` 附带参数 ``file``, ``mode``, ``flags``。" + +#: ../../library/functions.rst:1259 +msgid "" +"The ``mode`` and ``flags`` arguments may have been modified or inferred from" +" the original call." +msgstr "``mode`` 与 ``flags`` 参数可以在原始调用的基础上被修改或传递。" + +#: ../../library/functions.rst:1265 +msgid "The *opener* parameter was added." +msgstr "增加了 *opener* 形参。" + +#: ../../library/functions.rst:1266 +msgid "The ``'x'`` mode was added." +msgstr "增加了 ``'x'`` 模式。" + +#: ../../library/functions.rst:1267 +msgid "" +":exc:`IOError` used to be raised, it is now an alias of :exc:`OSError`." +msgstr "过去触发的 :exc:`IOError`,现在是 :exc:`OSError` 的别名。" + +#: ../../library/functions.rst:1268 +msgid "" +":exc:`FileExistsError` is now raised if the file opened in exclusive " +"creation mode (``'x'``) already exists." +msgstr "如果文件已存在但使用了排它性创建模式( ``'x'`` ),现在会触发 :exc:`FileExistsError`。" + +#: ../../library/functions.rst:1274 +msgid "The file is now non-inheritable." +msgstr "文件现在禁止继承。" + +#: ../../library/functions.rst:1278 +msgid "The ``'U'`` mode." +msgstr "``'U'`` 模式。" + +#: ../../library/functions.rst:1283 +msgid "" +"If the system call is interrupted and the signal handler does not raise an " +"exception, the function now retries the system call instead of raising an " +":exc:`InterruptedError` exception (see :pep:`475` for the rationale)." +msgstr "" +"如果系统调用被中断,但信号处理程序没有触发异常,此函数现在会重试系统调用,而不是触发 :exc:`InterruptedError` 异常 (原因详见 " +":pep:`475`)。" + +#: ../../library/functions.rst:1286 +msgid "The ``'namereplace'`` error handler was added." +msgstr "增加了 ``'namereplace'`` 错误处理接口。" + +#: ../../library/functions.rst:1291 +msgid "Support added to accept objects implementing :class:`os.PathLike`." +msgstr "增加对实现了 :class:`os.PathLike` 对象的支持。" + +#: ../../library/functions.rst:1292 +msgid "" +"On Windows, opening a console buffer may return a subclass of " +":class:`io.RawIOBase` other than :class:`io.FileIO`." +msgstr "" +"在 Windows 上,打开一个控制台缓冲区将返回 :class:`io.RawIOBase` 的子类,而不是 :class:`io.FileIO`。" + +#: ../../library/functions.rst:1297 +msgid "" +"Given a string representing one Unicode character, return an integer " +"representing the Unicode code point of that character. For example, " +"``ord('a')`` returns the integer ``97`` and ``ord('€')`` (Euro sign) returns" +" ``8364``. This is the inverse of :func:`chr`." +msgstr "" +"对表示单个 Unicode 字符的字符串,返回代表它 Unicode 码点的整数。例如 ``ord('a')`` 返回整数 ``97``, " +"``ord('€')`` (欧元符号)返回 ``8364`` 。这是 :func:`chr` 的逆函数。" + +#: ../../library/functions.rst:1305 +msgid "" +"Return *base* to the power *exp*; if *mod* is present, return *base* to the " +"power *exp*, modulo *mod* (computed more efficiently than ``pow(base, exp) %" +" mod``). The two-argument form ``pow(base, exp)`` is equivalent to using the" +" power operator: ``base**exp``." +msgstr "" +"返回 *base* 的 *exp* 次幂;如果 *mod* 存在,则返回 *base* 的 *exp* 次幂对 *mod* 取余(比 " +"``pow(base, exp) % mod`` 更高效)。 两参数形式 ``pow(base, exp)`` 等价于乘方运算符: " +"``base**exp``。" + +#: ../../library/functions.rst:1310 +msgid "" +"The arguments must have numeric types. With mixed operand types, the " +"coercion rules for binary arithmetic operators apply. For :class:`int` " +"operands, the result has the same type as the operands (after coercion) " +"unless the second argument is negative; in that case, all arguments are " +"converted to float and a float result is delivered. For example, ``pow(10, " +"2)`` returns ``100``, but ``pow(10, -2)`` returns ``0.01``. For a negative " +"base of type :class:`int` or :class:`float` and a non-integral exponent, a " +"complex result is delivered. For example, ``pow(-9, 0.5)`` returns a value " +"close to ``3j``." +msgstr "" +"参数必须为数值类型。 对于混用的操作数类型,则适用二元算术运算符的类型强制转换规则。 对于 :class:`int` " +"操作数,结果具有与操作数相同的类型(转换后),除非第二个参数为负值;在这种情况下,所有参数将被转换为浮点数并输出浮点数结果。 例如,``pow(10, " +"2)`` 返回 ``100``,但 ``pow(10, -2)`` 返回 ``0.01``。 对于 :class:`int` 或 " +":class:`float` 类型的负基和一个非整数的指数,会产生一个复数作为结果。 例如, ``pow(-9, 0.5)`` 返回一个接近于 " +"``3j`` 的值。" + +#: ../../library/functions.rst:1320 +msgid "" +"For :class:`int` operands *base* and *exp*, if *mod* is present, *mod* must " +"also be of integer type and *mod* must be nonzero. If *mod* is present and " +"*exp* is negative, *base* must be relatively prime to *mod*. In that case, " +"``pow(inv_base, -exp, mod)`` is returned, where *inv_base* is an inverse to " +"*base* modulo *mod*." +msgstr "" +"对于 :class:`int` 操作数 *base* 和 *exp*,如果给出 *mod*,则 *mod* 必须为整数类型并且 *mod* 必须不为零。" +" 如果给出 *mod* 并且 *exp* 为负值,则 *base* 必须相对于 *mod* 不可整除。 在这种情况下,将会返回 " +"``pow(inv_base, -exp, mod)``,其中 *inv_base* 为 *base* 的倒数对 *mod* 取余。" + +#: ../../library/functions.rst:1326 +msgid "Here's an example of computing an inverse for ``38`` modulo ``97``::" +msgstr "下面的例子是 ``38`` 的倒数对 ``97`` 取余::" + +#: ../../library/functions.rst:1333 +msgid "" +"For :class:`int` operands, the three-argument form of ``pow`` now allows the" +" second argument to be negative, permitting computation of modular inverses." +msgstr "对于 :class:`int` 操作数,三参数形式的 ``pow`` 现在允许第二个参数为负值,即可以计算倒数的余数。" + +#: ../../library/functions.rst:1338 +msgid "" +"Allow keyword arguments. Formerly, only positional arguments were " +"supported." +msgstr "允许关键字参数。 之前只支持位置参数。" + +#: ../../library/functions.rst:1345 +msgid "" +"Print *objects* to the text stream *file*, separated by *sep* and followed " +"by *end*. *sep*, *end*, *file* and *flush*, if present, must be given as " +"keyword arguments." +msgstr "" +"将 *objects* 打印到 *file* 指定的文本流,以 *sep* 分隔并在末尾加上 *end*。 *sep*, *end*, *file* 和" +" *flush* 如果存在,它们必须以关键字参数的形式给出。" + +#: ../../library/functions.rst:1349 +msgid "" +"All non-keyword arguments are converted to strings like :func:`str` does and" +" written to the stream, separated by *sep* and followed by *end*. Both " +"*sep* and *end* must be strings; they can also be ``None``, which means to " +"use the default values. If no *objects* are given, :func:`print` will just " +"write *end*." +msgstr "" +"所有非关键字参数都会被转换为字符串,就像是执行了 :func:`str` 一样,并会被写入到流,以 *sep* 分隔并在末尾加上 *end*。 " +"*sep* 和 *end* 都必须为字符串;它们也可以为 ``None``,这意味着使用默认值。 如果没有给出 *objects*,则 " +":func:`print` 将只写入 *end*。" + +#: ../../library/functions.rst:1355 +msgid "" +"The *file* argument must be an object with a ``write(string)`` method; if it" +" is not present or ``None``, :data:`sys.stdout` will be used. Since printed" +" arguments are converted to text strings, :func:`print` cannot be used with " +"binary mode file objects. For these, use ``file.write(...)`` instead." +msgstr "" +"*file* 参数必须是一个具有 ``write(string)`` 方法的对象;如果参数不存在或为 ``None``,则将使用 " +":data:`sys.stdout`。 由于要打印的参数会被转换为文本字符串,因此 :func:`print` 不能用于二进制模式的文件对象。 " +"对于这些对象,应改用 ``file.write(...)``。" + +#: ../../library/functions.rst:1360 +msgid "" +"Whether output is buffered is usually determined by *file*, but if the " +"*flush* keyword argument is true, the stream is forcibly flushed." +msgstr "输出是否被缓存通常决定于 *file*,但如果 *flush* 关键字参数为真值,流会被强制刷新。" + +#: ../../library/functions.rst:1363 +msgid "Added the *flush* keyword argument." +msgstr "增加了 *flush* 关键字参数。" + +#: ../../library/functions.rst:1369 +msgid "Return a property attribute." +msgstr "返回 property 属性。" + +#: ../../library/functions.rst:1371 +msgid "" +"*fget* is a function for getting an attribute value. *fset* is a function " +"for setting an attribute value. *fdel* is a function for deleting an " +"attribute value. And *doc* creates a docstring for the attribute." +msgstr "" +"*fget* 是获取属性值的函数。 *fset* 是用于设置属性值的函数。 *fdel* 是用于删除属性值的函数。并且 *doc* " +"为属性对象创建文档字符串。" + +#: ../../library/functions.rst:1375 +msgid "A typical use is to define a managed attribute ``x``::" +msgstr "一个典型的用法是定义一个托管属性 ``x``::" + +#: ../../library/functions.rst:1392 +msgid "" +"If *c* is an instance of *C*, ``c.x`` will invoke the getter, ``c.x = " +"value`` will invoke the setter and ``del c.x`` the deleter." +msgstr "" +"如果 *c* 是 *C* 的实例,``c.x`` 将调用getter,``c.x = value`` 将调用setter, ``del c.x`` " +"将调用deleter。" + +#: ../../library/functions.rst:1395 +msgid "" +"If given, *doc* will be the docstring of the property attribute. Otherwise, " +"the property will copy *fget*'s docstring (if it exists). This makes it " +"possible to create read-only properties easily using :func:`property` as a " +":term:`decorator`::" +msgstr "" +"如果给出,*doc* 将成为该 property 属性的文档字符串。 否则该 property 将拷贝 *fget* 的文档字符串(如果存在)。 " +"这令使用 :func:`property` 作为 :term:`decorator` 来创建只读的特征属性可以很容易地实现::" + +#: ../../library/functions.rst:1408 +msgid "" +"The ``@property`` decorator turns the :meth:`voltage` method into a " +"\"getter\" for a read-only attribute with the same name, and it sets the " +"docstring for *voltage* to \"Get the current voltage.\"" +msgstr "" +"以上 ``@property`` 装饰器会将 :meth:`voltage` 方法转化为一个具有相同名称的只读属性的 \"getter\",并将 " +"*voltage* 的文档字符串设置为 \"Get the current voltage.\"" + +#: ../../library/functions.rst:1412 +msgid "" +"A property object has :attr:`~property.getter`, :attr:`~property.setter`, " +"and :attr:`~property.deleter` methods usable as decorators that create a " +"copy of the property with the corresponding accessor function set to the " +"decorated function. This is best explained with an example::" +msgstr "" +"特征属性对象具有 :attr:`~property.getter`, :attr:`~property.setter` 以及 " +":attr:`~property.deleter` 方法,它们可用作装饰器来创建该特征属性的副本,并将相应的访问函数设为所装饰的函数。 " +"这最好是用一个例子来解释::" + +#: ../../library/functions.rst:1434 +msgid "" +"This code is exactly equivalent to the first example. Be sure to give the " +"additional functions the same name as the original property (``x`` in this " +"case.)" +msgstr "上述代码与第一个例子完全等价。 注意一定要给附加函数与原始的特征属性相同的名称 (在本例中为 ``x``。)" + +#: ../../library/functions.rst:1438 +msgid "" +"The returned property object also has the attributes ``fget``, ``fset``, and" +" ``fdel`` corresponding to the constructor arguments." +msgstr "返回的特征属性对象同样具有与构造器参数相对应的属性 ``fget``, ``fset`` 和 ``fdel``。" + +#: ../../library/functions.rst:1441 +msgid "The docstrings of property objects are now writeable." +msgstr "特征属性对象的文档字符串现在是可写的。" + +#: ../../library/functions.rst:1450 +msgid "" +"Rather than being a function, :class:`range` is actually an immutable " +"sequence type, as documented in :ref:`typesseq-range` and :ref:`typesseq`." +msgstr "" +"虽然被称为函数,但 :class:`range` 实际上是一个不可变的序列类型,参见在 :ref:`typesseq-range` 与 " +":ref:`typesseq` 中的文档说明。" + +#: ../../library/functions.rst:1456 +msgid "" +"Return a string containing a printable representation of an object. For " +"many types, this function makes an attempt to return a string that would " +"yield an object with the same value when passed to :func:`eval`, otherwise " +"the representation is a string enclosed in angle brackets that contains the " +"name of the type of the object together with additional information often " +"including the name and address of the object. A class can control what this" +" function returns for its instances by defining a :meth:`__repr__` method." +msgstr "" +"返回包含一个对象的可打印表示形式的字符串。 对于许多类型来说,该函数会尝试返回的字符串将会与该对象被传递给 :func:`eval` " +"时所生成的对象具有相同的值,在其他情况下表示形式会是一个括在尖括号中的字符串,其中包含对象类型的名称与通常包括对象名称和地址的附加信息。 类可以通过定义" +" :meth:`__repr__` 方法来控制此函数为它的实例所返回的内容。" + +#: ../../library/functions.rst:1467 +msgid "" +"Return a reverse :term:`iterator`. *seq* must be an object which has a " +":meth:`__reversed__` method or supports the sequence protocol (the " +":meth:`__len__` method and the :meth:`__getitem__` method with integer " +"arguments starting at ``0``)." +msgstr "" +"返回一个反向的 :term:`iterator`。 *seq* 必须是一个具有 :meth:`__reversed__` " +"方法的对象或者是支持该序列协议(具有从 ``0`` 开始的整数类型参数的 :meth:`__len__` 方法和 :meth:`__getitem__`" +" 方法)。" + +#: ../../library/functions.rst:1475 +msgid "" +"Return *number* rounded to *ndigits* precision after the decimal point. If " +"*ndigits* is omitted or is ``None``, it returns the nearest integer to its " +"input." +msgstr "" +"返回 *number* 舍入到小数点后 *ndigits* 位精度的值。 如果 *ndigits* 被省略或为 " +"``None``,则返回最接近输入值的整数。" + +#: ../../library/functions.rst:1479 +msgid "" +"For the built-in types supporting :func:`round`, values are rounded to the " +"closest multiple of 10 to the power minus *ndigits*; if two multiples are " +"equally close, rounding is done toward the even choice (so, for example, " +"both ``round(0.5)`` and ``round(-0.5)`` are ``0``, and ``round(1.5)`` is " +"``2``). Any integer value is valid for *ndigits* (positive, zero, or " +"negative). The return value is an integer if *ndigits* is omitted or " +"``None``. Otherwise the return value has the same type as *number*." +msgstr "" +"对于支持 :func:`round` 的内置类型,值会被舍入到最接近的 10 的负 *ndigits* 次幂的倍数;如果与两个倍数的距离相等,则选择偶数" +" (因此,``round(0.5)`` 和 ``round(-0.5)`` 均为 ``0`` 而 ``round(1.5)`` 为 ``2``)。 " +"任何整数值都可作为有效的 *ndigits* (正数、零或负数)。 如果 *ndigits* 被省略或为 ``None`` 则返回值将为整数。 " +"否则返回值与 *number* 的类型相同。" + +#: ../../library/functions.rst:1488 +msgid "" +"For a general Python object ``number``, ``round`` delegates to " +"``number.__round__``." +msgstr "对于一般的 Python 对象 ``number``, ``round`` 将委托给 ``number.__round__``。" + +#: ../../library/functions.rst:1493 +msgid "" +"The behavior of :func:`round` for floats can be surprising: for example, " +"``round(2.675, 2)`` gives ``2.67`` instead of the expected ``2.68``. This is" +" not a bug: it's a result of the fact that most decimal fractions can't be " +"represented exactly as a float. See :ref:`tut-fp-issues` for more " +"information." +msgstr "" +"对浮点数执行 :func:`round` 的行为可能会令人惊讶:例如,``round(2.675, 2)`` 将给出 ``2.67`` 而不是期望的 " +"``2.68``。 这不算是程序错误:这一结果是由于大多数十进制小数实际上都不能以浮点数精确地表示。 请参阅 :ref:`tut-fp-issues` " +"了解更多信息。" + +#: ../../library/functions.rst:1504 +msgid "" +"Return a new :class:`set` object, optionally with elements taken from " +"*iterable*. ``set`` is a built-in class. See :class:`set` and :ref:`types-" +"set` for documentation about this class." +msgstr "" +"返回一个新的 :class:`set` 对象,可以选择带有从 *iterable* 获取的元素。 ``set`` 是一个内置类型。 请查看 " +":class:`set` 和 :ref:`types-set` 获取关于这个类的文档。" + +#: ../../library/functions.rst:1508 +msgid "" +"For other containers see the built-in :class:`frozenset`, :class:`list`, " +":class:`tuple`, and :class:`dict` classes, as well as the :mod:`collections`" +" module." +msgstr "" +"有关其他容器请参看内置的 :class:`frozenset`, :class:`list`, :class:`tuple` 和 " +":class:`dict` 类,以及 :mod:`collections` 模块。" + +#: ../../library/functions.rst:1515 +msgid "" +"This is the counterpart of :func:`getattr`. The arguments are an object, a " +"string and an arbitrary value. The string may name an existing attribute or" +" a new attribute. The function assigns the value to the attribute, provided" +" the object allows it. For example, ``setattr(x, 'foobar', 123)`` is " +"equivalent to ``x.foobar = 123``." +msgstr "" +"此函数与 :func:`getattr` 两相对应。 其参数为一个对象、一个字符串和一个任意值。 字符串指定一个现有属性或者新增属性。 " +"函数会将值赋给该属性,只要对象允许这种操作。 例如,``setattr(x, 'foobar', 123)`` 等价于 ``x.foobar = " +"123``。" + +#: ../../library/functions.rst:1523 +msgid "" +"Since :ref:`private name mangling ` happens at " +"compilation time, one must manually mangle a private attribute's (attributes" +" with two leading underscores) name in order to set it with :func:`setattr`." +msgstr "" +"由于 :ref:`私有名称混合 ` " +"发生在编译时,因此必须手动混合私有属性(以两个下划线打头的属性)名称以便使用 :func:`setattr` 来设置它。" + +#: ../../library/functions.rst:1532 +msgid "" +"Return a :term:`slice` object representing the set of indices specified by " +"``range(start, stop, step)``. The *start* and *step* arguments default to " +"``None``. Slice objects have read-only data attributes " +":attr:`~slice.start`, :attr:`~slice.stop` and :attr:`~slice.step` which " +"merely return the argument values (or their default). They have no other " +"explicit functionality; however they are used by NumPy and other third party" +" packages. Slice objects are also generated when extended indexing syntax is" +" used. For example: ``a[start:stop:step]`` or ``a[start:stop, i]``. See " +":func:`itertools.islice` for an alternate version that returns an iterator." +msgstr "" + +#: ../../library/functions.rst:1545 +msgid "Return a new sorted list from the items in *iterable*." +msgstr "根据 *iterable* 中的项返回一个新的已排序列表。" + +#: ../../library/functions.rst:1547 +msgid "" +"Has two optional arguments which must be specified as keyword arguments." +msgstr "具有两个可选参数,它们都必须指定为关键字参数。" + +#: ../../library/functions.rst:1549 +msgid "" +"*key* specifies a function of one argument that is used to extract a " +"comparison key from each element in *iterable* (for example, " +"``key=str.lower``). The default value is ``None`` (compare the elements " +"directly)." +msgstr "" +"*key* 指定带有单个参数的函数,用于从 *iterable* 的每个元素中提取用于比较的键 (例如 ``key=str.lower``)。 默认值为" +" ``None`` (直接比较元素)。" + +#: ../../library/functions.rst:1553 +msgid "" +"*reverse* is a boolean value. If set to ``True``, then the list elements " +"are sorted as if each comparison were reversed." +msgstr "*reverse* 为一个布尔值。 如果设为 ``True``,则每个列表元素将按反向顺序比较进行排序。" + +#: ../../library/functions.rst:1556 +msgid "" +"Use :func:`functools.cmp_to_key` to convert an old-style *cmp* function to a" +" *key* function." +msgstr "使用 :func:`functools.cmp_to_key` 可将老式的 *cmp* 函数转换为 *key* 函数。" + +#: ../../library/functions.rst:1559 +msgid "" +"The built-in :func:`sorted` function is guaranteed to be stable. A sort is " +"stable if it guarantees not to change the relative order of elements that " +"compare equal --- this is helpful for sorting in multiple passes (for " +"example, sort by department, then by salary grade)." +msgstr "" +"内置的 :func:`sorted` 确保是稳定的。 如果一个排序确保不会改变比较结果相等的元素的相对顺序就称其为稳定的 --- " +"这有利于进行多重排序(例如先按部门、再按薪级排序)。" + +#: ../../library/functions.rst:1564 +msgid "" +"The sort algorithm uses only ``<`` comparisons between items. While " +"defining an :meth:`~object.__lt__` method will suffice for sorting, :PEP:`8`" +" recommends that all six :ref:`rich comparisons ` be " +"implemented. This will help avoid bugs when using the same data with other " +"ordering tools such as :func:`max` that rely on a different underlying " +"method. Implementing all six comparisons also helps avoid confusion for " +"mixed type comparisons which can call reflected the :meth:`~object.__gt__` " +"method." +msgstr "" +"排序算法只使用 ``<`` 在项目之间比较。 虽然定义一个 :meth:`~object.__lt__` 方法就足以进行排序,但 :PEP:`8` " +"建议实现所有六个 :ref:`富比较 ` 。 这将有助于避免在与其他排序工具(如 :func:`max` " +")使用相同的数据时出现错误,这些工具依赖于不同的底层方法。实现所有六个比较也有助于避免混合类型比较的混乱,因为混合类型比较可以调用反射到 " +":meth:`~object.__gt__` 的方法。" + +#: ../../library/functions.rst:1573 +msgid "" +"For sorting examples and a brief sorting tutorial, see :ref:`sortinghowto`." +msgstr "有关排序示例和简要排序教程,请参阅 :ref:`sortinghowto` 。" + +#: ../../library/functions.rst:1577 +msgid "Transform a method into a static method." +msgstr "将方法转换为静态方法。" + +#: ../../library/functions.rst:1579 +msgid "" +"A static method does not receive an implicit first argument. To declare a " +"static method, use this idiom::" +msgstr "静态方法不会接收隐式的第一个参数。要声明一个静态方法,请使用此语法 ::" + +#: ../../library/functions.rst:1586 +msgid "" +"The ``@staticmethod`` form is a function :term:`decorator` -- see " +":ref:`function` for details." +msgstr "" +"``@staticmethod`` 这样的形式称为函数的 :term:`decorator` -- 详情参阅 :ref:`function`。" + +#: ../../library/functions.rst:1589 +msgid "" +"A static method can be called either on the class (such as ``C.f()``) or on " +"an instance (such as ``C().f()``)." +msgstr "静态方法的调用可以在类上进行 (例如 ``C.f()``) 也可以在实例上进行 (例如 ``C().f()``)。" + +#: ../../library/functions.rst:1592 +msgid "" +"Static methods in Python are similar to those found in Java or C++. Also see" +" :func:`classmethod` for a variant that is useful for creating alternate " +"class constructors." +msgstr "" +"Python中的静态方法与Java或C ++中的静态方法类似。另请参阅 :func:`classmethod` ,用于创建备用类构造函数的变体。" + +#: ../../library/functions.rst:1596 +msgid "" +"Like all decorators, it is also possible to call ``staticmethod`` as a " +"regular function and do something with its result. This is needed in some " +"cases where you need a reference to a function from a class body and you " +"want to avoid the automatic transformation to instance method. For these " +"cases, use this idiom::" +msgstr "" +"像所有装饰器一样,也可以像常规函数一样调用 ``staticmethod`` " +",并对其结果执行某些操作。比如某些情况下需要从类主体引用函数并且您希望避免自动转换为实例方法。对于这些情况,请使用此语法::" + +#: ../../library/functions.rst:1605 +msgid "For more information on static methods, see :ref:`types`." +msgstr "想了解更多有关静态方法的信息,请参阅 :ref:`types` 。" + +#: ../../library/functions.rst:1616 +msgid "" +"Return a :class:`str` version of *object*. See :func:`str` for details." +msgstr "返回一个 :class:`str` 版本的 *object* 。有关详细信息,请参阅 :func:`str` 。" + +#: ../../library/functions.rst:1618 +msgid "" +"``str`` is the built-in string :term:`class`. For general information about" +" strings, see :ref:`textseq`." +msgstr "``str`` 是内置字符串 :term:`class` 。更多关于字符串的信息查看 :ref:`textseq`。" + +#: ../../library/functions.rst:1624 +msgid "" +"Sums *start* and the items of an *iterable* from left to right and returns " +"the total. The *iterable*'s items are normally numbers, and the start value" +" is not allowed to be a string." +msgstr "" +"从 *start* 开始自左向右对 *iterable* 的项求和并返回总计值。 *iterable* 的项通常为数字,而 start " +"值则不允许为字符串。" + +#: ../../library/functions.rst:1628 +msgid "" +"For some use cases, there are good alternatives to :func:`sum`. The " +"preferred, fast way to concatenate a sequence of strings is by calling " +"``''.join(sequence)``. To add floating point values with extended " +"precision, see :func:`math.fsum`\\. To concatenate a series of iterables, " +"consider using :func:`itertools.chain`." +msgstr "" +"对某些用例来说,存在 :func:`sum` 的更好替代。 拼接字符串序列的更好更快方式是调用 ``''.join(sequence)``。 " +"要以扩展精度对浮点值求和,请参阅 :func:`math.fsum`。 要拼接一系列可迭代对象,请考虑使用 " +":func:`itertools.chain`。" + +#: ../../library/functions.rst:1634 +msgid "The *start* parameter can be specified as a keyword argument." +msgstr "*start* 形参可用关键字参数形式来指定。" + +#: ../../library/functions.rst:1639 +msgid "" +"Return a proxy object that delegates method calls to a parent or sibling " +"class of *type*. This is useful for accessing inherited methods that have " +"been overridden in a class." +msgstr "返回一个代理对象,它会将方法调用委托给 *type* 的父类或兄弟类。 这对于访问已在类中被重写的继承方法很有用。" + +#: ../../library/functions.rst:1643 +msgid "" +"The *object-or-type* determines the :term:`method resolution order` to be " +"searched. The search starts from the class right after the *type*." +msgstr "" +"*object-or-type* 确定用于搜索的 :term:`method resolution order`。 搜索会从 *type* " +"之后的类开始。" + +#: ../../library/functions.rst:1647 +msgid "" +"For example, if :attr:`~class.__mro__` of *object-or-type* is ``D -> B -> C " +"-> A -> object`` and the value of *type* is ``B``, then :func:`super` " +"searches ``C -> A -> object``." +msgstr "" +"举例来说,如果 *object-or-type* 的 :attr:`~class.__mro__` 为 ``D -> B -> C -> A -> " +"object`` 并且 *type* 的值为 ``B``,则 :func:`super` 将会搜索 ``C -> A -> object``。" + +#: ../../library/functions.rst:1651 +msgid "" +"The :attr:`~class.__mro__` attribute of the *object-or-type* lists the " +"method resolution search order used by both :func:`getattr` and " +":func:`super`. The attribute is dynamic and can change whenever the " +"inheritance hierarchy is updated." +msgstr "" +"*object-or-type* 的 :attr:`~class.__mro__` 属性列出了 :func:`getattr` 和 " +":func:`super` 所共同使用的方法解析搜索顺序。 该属性是动态的,可以在任何继承层级结构发生更新的时候被改变。" + +#: ../../library/functions.rst:1656 +msgid "" +"If the second argument is omitted, the super object returned is unbound. If" +" the second argument is an object, ``isinstance(obj, type)`` must be true. " +"If the second argument is a type, ``issubclass(type2, type)`` must be true " +"(this is useful for classmethods)." +msgstr "" +"如果省略第二个参数,则返回的超类对象是未绑定的。 如果第二个参数为一个对象,则 ``isinstance(obj, type)`` 必须为真值。 " +"如果第二个参数为一个类型,则 ``issubclass(type2, type)`` 必须为真值(这适用于类方法)。" + +#: ../../library/functions.rst:1661 +msgid "" +"There are two typical use cases for *super*. In a class hierarchy with " +"single inheritance, *super* can be used to refer to parent classes without " +"naming them explicitly, thus making the code more maintainable. This use " +"closely parallels the use of *super* in other programming languages." +msgstr "" +"*super* 有两个典型用例。 在具有单继承的类层级结构中,*super* 可用来引用父类而不必显式地指定它们的名称,从而令代码更易维护。 " +"这种用法与其他编程语言中 *super* 的用法非常相似。" + +#: ../../library/functions.rst:1666 +msgid "" +"The second use case is to support cooperative multiple inheritance in a " +"dynamic execution environment. This use case is unique to Python and is not" +" found in statically compiled languages or languages that only support " +"single inheritance. This makes it possible to implement \"diamond " +"diagrams\" where multiple base classes implement the same method. Good " +"design dictates that such implementations have the same calling signature in" +" every case (because the order of calls is determined at runtime, because " +"that order adapts to changes in the class hierarchy, and because that order " +"can include sibling classes that are unknown prior to runtime)." +msgstr "" +"第二个用例是在动态执行环境中支持协作多重继承。 此用例为 Python 所独有而不存在于静态编码语言或仅支持单继承的语言当中。 " +"这使用实现“菱形图”成为可能,即有多个基类实现相同的方法。 " +"好的设计强制要求这样的方法在每个情况下都具有相同的调用签名(因为调用顺序是在运行时确定的,也因为这个顺序要适应类层级结构的更改,还因为这个顺序可能包括在运行时之前未知的兄弟类)。" + +#: ../../library/functions.rst:1676 +msgid "For both use cases, a typical superclass call looks like this::" +msgstr "对于以上两个用例,典型的超类调用看起来是这样的::" + +#: ../../library/functions.rst:1683 +msgid "" +"In addition to method lookups, :func:`super` also works for attribute " +"lookups. One possible use case for this is calling :term:`descriptors " +"` in a parent or sibling class." +msgstr "" +"除了方法查找之外,:func:`super` 也可用于属性查找。 一个可能的应用场合是在上级或同级类中调用 :term:`描述器 " +"`。" + +#: ../../library/functions.rst:1687 +msgid "" +"Note that :func:`super` is implemented as part of the binding process for " +"explicit dotted attribute lookups such as ``super().__getitem__(name)``. It " +"does so by implementing its own :meth:`__getattribute__` method for " +"searching classes in a predictable order that supports cooperative multiple " +"inheritance. Accordingly, :func:`super` is undefined for implicit lookups " +"using statements or operators such as ``super()[name]``." +msgstr "" +"请注意 :func:`super` 是作为显式加点属性查找的绑定过程的一部分来实现的,例如 ``super().__getitem__(name)``。" +" 它做到这一点是通过实现自己的 :meth:`__getattribute__` 方法,这样就能以可预测的顺序搜索类,并且支持协作多重继承。 " +"对应地,:func:`super` 在像 ``super()[name]`` 这样使用语句或操作符进行隐式查找时则未被定义。" + +#: ../../library/functions.rst:1694 +msgid "" +"Also note that, aside from the zero argument form, :func:`super` is not " +"limited to use inside methods. The two argument form specifies the " +"arguments exactly and makes the appropriate references. The zero argument " +"form only works inside a class definition, as the compiler fills in the " +"necessary details to correctly retrieve the class being defined, as well as " +"accessing the current instance for ordinary methods." +msgstr "" +"还要注意的是,除了零个参数的形式以外,:func:`super` 并不限于在方法内部使用。 两个参数的形式明确指定参数并进行相应的引用。 " +"零个参数的形式仅适用于类定义内部,因为编译器需要填入必要的细节以正确地检索到被定义的类,还需要让普通方法访问当前实例。" + +#: ../../library/functions.rst:1701 +msgid "" +"For practical suggestions on how to design cooperative classes using " +":func:`super`, see `guide to using super() " +"`_." +msgstr "" +"对于有关如何使用 :func:`super` 来如何设计协作类的实用建议,请参阅 `使用 super() 的指南 " +"`_。" + +#: ../../library/functions.rst:1710 +msgid "" +"Rather than being a function, :class:`tuple` is actually an immutable " +"sequence type, as documented in :ref:`typesseq-tuple` and :ref:`typesseq`." +msgstr "" +"虽然被称为函数,但 :class:`tuple` 实际上是一个不可变的序列类型,参见在 :ref:`typesseq-tuple` 与 " +":ref:`typesseq` 中的文档说明。" + +#: ../../library/functions.rst:1719 +msgid "" +"With one argument, return the type of an *object*. The return value is a " +"type object and generally the same object as returned by " +":attr:`object.__class__ `." +msgstr "" +"传入一个参数时,返回 *object* 的类型。 返回值是一个 type 对象,通常与 :attr:`object.__class__ " +"` 所返回的对象相同。" + +#: ../../library/functions.rst:1723 +msgid "" +"The :func:`isinstance` built-in function is recommended for testing the type" +" of an object, because it takes subclasses into account." +msgstr "推荐使用 :func:`isinstance` 内置函数来检测对象的类型,因为它会考虑子类的情况。" + +#: ../../library/functions.rst:1727 +msgid "" +"With three arguments, return a new type object. This is essentially a " +"dynamic form of the :keyword:`class` statement. The *name* string is the " +"class name and becomes the :attr:`~definition.__name__` attribute. The " +"*bases* tuple contains the base classes and becomes the " +":attr:`~class.__bases__` attribute; if empty, :class:`object`, the ultimate " +"base of all classes, is added. The *dict* dictionary contains attribute and" +" method definitions for the class body; it may be copied or wrapped before " +"becoming the :attr:`~object.__dict__` attribute. The following two " +"statements create identical :class:`type` objects:" +msgstr "" +"传入三个参数时,返回一个新的 type 对象。 这在本质上是 :keyword:`class` 语句的一种动态形式,*name* 字符串即类名并会成为 " +":attr:`~definition.__name__` 属性;*bases* 元组包含基类并会成为 :attr:`~class.__bases__` " +"属性;如果为空则会添加所有类的终极基类 :class:`object`。 *dict* 字典包含类主体的属性和方法定义;它在成为 " +":attr:`~object.__dict__` 属性之前可能会被拷贝或包装。 下面两条语句会创建相同的 :class:`type` 对象:" + +#: ../../library/functions.rst:1742 +msgid "See also :ref:`bltin-type-objects`." +msgstr "另请参阅 :ref:`bltin-type-objects`。" + +#: ../../library/functions.rst:1744 +msgid "" +"Keyword arguments provided to the three argument form are passed to the " +"appropriate metaclass machinery (usually :meth:`~object.__init_subclass__`) " +"in the same way that keywords in a class definition (besides *metaclass*) " +"would." +msgstr "" +"提供给三参数形式的关键字参数会被传递给适当的元类机制 (通常为 " +":meth:`~object.__init_subclass__`),相当于类定义中关键字 (除了 *metaclass*) 的行为方式。" + +#: ../../library/functions.rst:1749 +msgid "See also :ref:`class-customization`." +msgstr "另请参阅 :ref:`class-customization`。" + +#: ../../library/functions.rst:1751 +msgid "" +"Subclasses of :class:`type` which don't override ``type.__new__`` may no " +"longer use the one-argument form to get the type of an object." +msgstr ":class:`type` 的子类如果未重载 ``type.__new__``,将不再能使用一个参数的形式来获取对象的类型。" + +#: ../../library/functions.rst:1757 +msgid "" +"Return the :attr:`~object.__dict__` attribute for a module, class, instance," +" or any other object with a :attr:`~object.__dict__` attribute." +msgstr "" +"返回模块、类、实例或任何其它具有 :attr:`~object.__dict__` 属性的对象的 :attr:`~object.__dict__` " +"属性。" + +#: ../../library/functions.rst:1760 +msgid "" +"Objects such as modules and instances have an updateable " +":attr:`~object.__dict__` attribute; however, other objects may have write " +"restrictions on their :attr:`~object.__dict__` attributes (for example, " +"classes use a :class:`types.MappingProxyType` to prevent direct dictionary " +"updates)." +msgstr "" +"模块和实例这样的对象具有可更新的 :attr:`~object.__dict__` 属性;但是,其它对象的 " +":attr:`~object.__dict__` 属性可能会设为限制写入(例如,类会使用 :class:`types.MappingProxyType`" +" 来防止直接更新字典)。" + +#: ../../library/functions.rst:1765 +msgid "" +"Without an argument, :func:`vars` acts like :func:`locals`. Note, the " +"locals dictionary is only useful for reads since updates to the locals " +"dictionary are ignored." +msgstr "" +"不带参数时,:func:`vars` 的行为类似 :func:`locals`。 请注意,locals 字典仅对于读取起作用,因为对 locals " +"字典的更新会被忽略。" + +#: ../../library/functions.rst:1769 +msgid "" +"A :exc:`TypeError` exception is raised if an object is specified but it " +"doesn't have a :attr:`~object.__dict__` attribute (for example, if its class" +" defines the :attr:`~object.__slots__` attribute)." +msgstr "" +"如果指定了一个对象但它没有 :attr:`~object.__dict__` 属性(例如,当它所属的类定义了 " +":attr:`~object.__slots__` 属性时)则会引发 :exc:`TypeError` 异常。" + +#: ../../library/functions.rst:1775 +msgid "Make an iterator that aggregates elements from each of the iterables." +msgstr "创建一个聚合了来自每个可迭代对象中的元素的迭代器。" + +#: ../../library/functions.rst:1777 +msgid "" +"Returns an iterator of tuples, where the *i*-th tuple contains the *i*-th " +"element from each of the argument sequences or iterables. The iterator " +"stops when the shortest input iterable is exhausted. With a single iterable " +"argument, it returns an iterator of 1-tuples. With no arguments, it returns" +" an empty iterator. Equivalent to::" +msgstr "" +"返回一个元组的迭代器,其中的第 *i* 个元组包含来自每个参数序列或可迭代对象的第 *i* 个元素。 " +"当所输入可迭代对象中最短的一个被耗尽时,迭代器将停止迭代。 当只有一个可迭代对象参数时,它将返回一个单元组的迭代器。 不带参数时,它将返回一个空迭代器。" +" 相当于::" + +#: ../../library/functions.rst:1796 +msgid "" +"The left-to-right evaluation order of the iterables is guaranteed. This " +"makes possible an idiom for clustering a data series into n-length groups " +"using ``zip(*[iter(s)]*n)``. This repeats the *same* iterator ``n`` times " +"so that each output tuple has the result of ``n`` calls to the iterator. " +"This has the effect of dividing the input into n-length chunks." +msgstr "" +"函数会保证可迭代对象按从左至右的顺序被求值。 使得可以通过 ``zip(*[iter(s)]*n)`` 这样的惯用形式将一系列数据聚类为长度为 n " +"的分组。 这将重复 *同样的* 迭代器 ``n`` 次,以便每个输出的元组具有第 ``n`` 次调用该迭代器的结果。 它的作用效果就是将输入拆分为长度为" +" n 的数据块。" + +#: ../../library/functions.rst:1802 +msgid "" +":func:`zip` should only be used with unequal length inputs when you don't " +"care about trailing, unmatched values from the longer iterables. If those " +"values are important, use :func:`itertools.zip_longest` instead." +msgstr "" +"当你不用关心较长可迭代对象末尾不匹配的值时,则 :func:`zip` 只须使用长度不相等的输入即可。 如果那些值很重要,则应改用 " +":func:`itertools.zip_longest`。" + +#: ../../library/functions.rst:1806 +msgid "" +":func:`zip` in conjunction with the ``*`` operator can be used to unzip a " +"list::" +msgstr ":func:`zip` 与 ``*`` 运算符相结合可以用来拆解一个列表::" + +#: ../../library/functions.rst:1827 +msgid "" +"This is an advanced function that is not needed in everyday Python " +"programming, unlike :func:`importlib.import_module`." +msgstr "与 :func:`importlib.import_module` 不同,这是一个日常 Python 编程中不需要用到的高级函数。" + +#: ../../library/functions.rst:1830 +msgid "" +"This function is invoked by the :keyword:`import` statement. It can be " +"replaced (by importing the :mod:`builtins` module and assigning to " +"``builtins.__import__``) in order to change semantics of the " +":keyword:`!import` statement, but doing so is **strongly** discouraged as it" +" is usually simpler to use import hooks (see :pep:`302`) to attain the same " +"goals and does not cause issues with code which assumes the default import " +"implementation is in use. Direct use of :func:`__import__` is also " +"discouraged in favor of :func:`importlib.import_module`." +msgstr "" +"此函数会由 :keyword:`import` 语句唤起。 它可以被替换 (通过导入 :mod:`builtins` 模块并赋值给 " +"``builtins.__import__``) 以便修改 :keyword:`!import` 语句的语义,但是 **强烈** " +"不建议这样做,因为使用导入钩子 (参见 :pep:`302`) 通常更容易实现同样的目标,并且不会导致代码问题,因为许多代码都会假定所用的是默认实现。 " +"同样也不建议直接使用 :func:`__import__` 而应该用 :func:`importlib.import_module`。" + +#: ../../library/functions.rst:1839 +msgid "" +"The function imports the module *name*, potentially using the given " +"*globals* and *locals* to determine how to interpret the name in a package " +"context. The *fromlist* gives the names of objects or submodules that should" +" be imported from the module given by *name*. The standard implementation " +"does not use its *locals* argument at all, and uses its *globals* only to " +"determine the package context of the :keyword:`import` statement." +msgstr "" +"该函数会导入 *name* 模块,有可能使用给定的 *globals* 和 *locals* 来确定如何在包的上下文中解读名称。 *fromlist* " +"给出了应该从由 *name* 指定的模块导入对象或子模块的名称。 标准实现完全不使用其 *locals* 参数,而仅使用 *globals* 参数来确定" +" :keyword:`import` 语句的包上下文。" + +#: ../../library/functions.rst:1846 +msgid "" +"*level* specifies whether to use absolute or relative imports. ``0`` (the " +"default) means only perform absolute imports. Positive values for *level* " +"indicate the number of parent directories to search relative to the " +"directory of the module calling :func:`__import__` (see :pep:`328` for the " +"details)." +msgstr "" +"*level* 指定是使用绝对还是相对导入。 ``0`` (默认值) 意味着仅执行绝对导入。 *level* 为正数值表示相对于模块调用 " +":func:`__import__` 的目录,将要搜索的父目录层数 (详情参见 :pep:`328`)。" + +#: ../../library/functions.rst:1852 +msgid "" +"When the *name* variable is of the form ``package.module``, normally, the " +"top-level package (the name up till the first dot) is returned, *not* the " +"module named by *name*. However, when a non-empty *fromlist* argument is " +"given, the module named by *name* is returned." +msgstr "" +"当 *name* 变量的形式为 ``package.module`` 时,通常将会返回最高层级的包(第一个点号之前的名称),而 *不是* 以 " +"*name* 命名的模块。 但是,当给出了非空的 *fromlist* 参数时,则将返回以 *name* 命名的模块。" + +#: ../../library/functions.rst:1857 +msgid "" +"For example, the statement ``import spam`` results in bytecode resembling " +"the following code::" +msgstr "例如,语句 ``import spam`` 的结果将为与以下代码作用相同的字节码::" + +#: ../../library/functions.rst:1862 +msgid "The statement ``import spam.ham`` results in this call::" +msgstr "语句 ``import spam.ham`` 的结果将为以下调用::" + +#: ../../library/functions.rst:1866 +msgid "" +"Note how :func:`__import__` returns the toplevel module here because this is" +" the object that is bound to a name by the :keyword:`import` statement." +msgstr "" +"请注意在这里 :func:`__import__` 是如何返回顶层模块的,因为这是通过 :keyword:`import` 语句被绑定到特定名称的对象。" + +#: ../../library/functions.rst:1869 +msgid "" +"On the other hand, the statement ``from spam.ham import eggs, sausage as " +"saus`` results in ::" +msgstr "另一方面,语句 ``from spam.ham import eggs, sausage as saus`` 的结果将为 ::" + +#: ../../library/functions.rst:1876 +msgid "" +"Here, the ``spam.ham`` module is returned from :func:`__import__`. From " +"this object, the names to import are retrieved and assigned to their " +"respective names." +msgstr "" +"在这里, ``spam.ham`` 模块会由 :func:`__import__` 返回。 要导入的对象将从此对象中提取并赋值给它们对应的名称。" + +#: ../../library/functions.rst:1880 +msgid "" +"If you simply want to import a module (potentially within a package) by " +"name, use :func:`importlib.import_module`." +msgstr "如果您只想按名称导入模块(可能在包中),请使用 :func:`importlib.import_module`" + +#: ../../library/functions.rst:1883 +msgid "" +"Negative values for *level* are no longer supported (which also changes the " +"default value to 0)." +msgstr "*level* 的值不再支持负数(默认值也修改为0)。" + +#: ../../library/functions.rst:1887 +msgid "" +"When the command line options :option:`-E` or :option:`-I` are being used, " +"the environment variable :envvar:`PYTHONCASEOK` is now ignored." +msgstr "" +"当使用了命令行参数 :option:`-E` 或 :option:`-I` 时,环境变量 :envvar:`PYTHONCASEOK` 现在将被忽略。" + +#: ../../library/functions.rst:1892 +msgid "Footnotes" +msgstr "备注" + +#: ../../library/functions.rst:1893 +msgid "" +"Note that the parser only accepts the Unix-style end of line convention. If " +"you are reading the code from a file, make sure to use newline conversion " +"mode to convert Windows or Mac-style newlines." +msgstr "解析器只接受 Unix 风格的行结束符。如果您从文件中读取代码,请确保用换行符转换模式转换 Windows 或 Mac 风格的换行符。" diff --git a/library/functools.po b/library/functools.po new file mode 100644 index 000000000..ef0a54c8a --- /dev/null +++ b/library/functools.po @@ -0,0 +1,681 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) 2001-2025, Python Software Foundation +# This file is distributed under the same license as the Python package. +# FIRST AUTHOR , YEAR. +# +# Translators: +# ww song , 2018 +# zc Jin , 2018 +# akira asura , 2019 +# Konge , 2019 +# MustAndy , 2019 +# Makdon , 2019 +# MuSheng Chen , 2019 +# Alpha Du , 2022 +# Freesand Leo , 2022 +# Rafael Fontenelle , 2025 +# +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: Python 3.9\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2025-02-07 16:40+0000\n" +"PO-Revision-Date: 2017-02-16 23:12+0000\n" +"Last-Translator: Rafael Fontenelle , 2025\n" +"Language-Team: Chinese (China) (https://app.transifex.com/python-doc/teams/5390/zh_CN/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: zh_CN\n" +"Plural-Forms: nplurals=1; plural=0;\n" + +#: ../../library/functools.rst:2 +msgid "" +":mod:`functools` --- Higher-order functions and operations on callable " +"objects" +msgstr ":mod:`functools` --- 高阶函数和可调用对象上的操作" + +#: ../../library/functools.rst:14 +msgid "**Source code:** :source:`Lib/functools.py`" +msgstr "**源代码:** :source:`Lib/functools.py`" + +#: ../../library/functools.rst:23 +msgid "" +"The :mod:`functools` module is for higher-order functions: functions that " +"act on or return other functions. In general, any callable object can be " +"treated as a function for the purposes of this module." +msgstr ":mod:`functools` 模块应用于高阶函数,即参数或(和)返回值为其他函数的函数。 通常来说,此模块的功能适用于所有可调用对象。" + +#: ../../library/functools.rst:27 +msgid "The :mod:`functools` module defines the following functions:" +msgstr ":mod:`functools` 模块定义了以下函数:" + +#: ../../library/functools.rst:31 +msgid "" +"Simple lightweight unbounded function cache. Sometimes called `\"memoize\" " +"`_." +msgstr "" +"简单轻量级未绑定函数缓存。 有时称为 `\"memoize\" " +"`_。" + +#: ../../library/functools.rst:34 +msgid "" +"Returns the same as ``lru_cache(maxsize=None)``, creating a thin wrapper " +"around a dictionary lookup for the function arguments. Because it never " +"needs to evict old values, this is smaller and faster than " +":func:`lru_cache()` with a size limit." +msgstr "" +"返回值与 ``lru_cache(maxsize=None)`` 相同,创建一个查找函数参数的字典的简单包装器。 " +"因为它不需要移出旧值,所以比带有大小限制的 :func:`lru_cache()` 更小更快。" + +#: ../../library/functools.rst:39 ../../library/functools.rst:255 +msgid "For example::" +msgstr "例如:" + +#: ../../library/functools.rst:57 +msgid "" +"Transform a method of a class into a property whose value is computed once " +"and then cached as a normal attribute for the life of the instance. Similar " +"to :func:`property`, with the addition of caching. Useful for expensive " +"computed properties of instances that are otherwise effectively immutable." +msgstr "" +"将一个类方法转换为特征属性,一次性计算该特征属性的值,然后将其缓存为实例生命周期内的普通属性。 类似于 :func:`property` " +"但增加了缓存功能。 对于在其他情况下实际不可变的高计算资源消耗的实例特征属性来说该函数非常有用。" + +#: ../../library/functools.rst:62 ../../library/functools.rst:127 +#: ../../library/functools.rst:340 +msgid "Example::" +msgstr "示例::" + +#: ../../library/functools.rst:73 +msgid "" +"The mechanics of :func:`cached_property` are somewhat different from " +":func:`property`. A regular property blocks attribute writes unless a " +"setter is defined. In contrast, a *cached_property* allows writes." +msgstr "" +":func:`cached_property` 的设定与 :func:`property` 有所不同。 常规的 property " +"会阻止属性写入,除非定义了 setter。 与之相反,*cached_property* 则允许写入。" + +#: ../../library/functools.rst:77 +msgid "" +"The *cached_property* decorator only runs on lookups and only when an " +"attribute of the same name doesn't exist. When it does run, the " +"*cached_property* writes to the attribute with the same name. Subsequent " +"attribute reads and writes take precedence over the *cached_property* method" +" and it works like a normal attribute." +msgstr "" +"*cached_property* 装饰器仅在执行查找且不存在同名属性时才会运行。 当运行时,*cached_property* 会写入同名的属性。 " +"后续的属性读取和写入操作会优先于 *cached_property* 方法,其行为就像普通的属性一样。" + +#: ../../library/functools.rst:83 +msgid "" +"The cached value can be cleared by deleting the attribute. This allows the " +"*cached_property* method to run again." +msgstr "缓存的值可通过删除该属性来清空。 这允许 *cached_property* 方法再次运行。" + +#: ../../library/functools.rst:86 +msgid "" +"Note, this decorator interferes with the operation of :pep:`412` key-sharing" +" dictionaries. This means that instance dictionaries can take more space " +"than usual." +msgstr "注意,这个装饰器会影响 :pep:`412` 键共享字典的操作。 这意味着相应的字典实例可能占用比通常时更多的空间。" + +#: ../../library/functools.rst:90 +msgid "" +"Also, this decorator requires that the ``__dict__`` attribute on each " +"instance be a mutable mapping. This means it will not work with some types, " +"such as metaclasses (since the ``__dict__`` attributes on type instances are" +" read-only proxies for the class namespace), and those that specify " +"``__slots__`` without including ``__dict__`` as one of the defined slots (as" +" such classes don't provide a ``__dict__`` attribute at all)." +msgstr "" +"而且,这个装饰器要求每个实例上的 ``__dict__`` 是可变的映射。 这意味着它将不适用于某些类型,例如元类(因为类型实例上的 " +"``__dict__`` 属性是类命名空间的只读代理),以及那些指定了 ``__slots__`` 但未包括 ``__dict__`` " +"作为所定义的空位之一的类(因为这样的类根本没有提供 ``__dict__`` 属性)。" + +#: ../../library/functools.rst:97 +msgid "" +"If a mutable mapping is not available or if space-efficient key sharing is " +"desired, an effect similar to :func:`cached_property` can be achieved by a " +"stacking :func:`property` on top of :func:`cache`::" +msgstr "" +"如果可变的映射不可用或者如果想要节省空间的键共享,可以通过在 :func:`cache` 之上堆叠一个 :func:`property` 来实现类似 " +":func:`cached_property` 的效果::" + +#: ../../library/functools.rst:115 +msgid "" +"Transform an old-style comparison function to a :term:`key function`. Used " +"with tools that accept key functions (such as :func:`sorted`, :func:`min`, " +":func:`max`, :func:`heapq.nlargest`, :func:`heapq.nsmallest`, " +":func:`itertools.groupby`). This function is primarily used as a transition" +" tool for programs being converted from Python 2 which supported the use of " +"comparison functions." +msgstr "" +"将(旧式的)比较函数转换为新式的 :term:`key function` . 在类似于 :func:`sorted` , :func:`min` ," +" :func:`max` , :func:`heapq.nlargest` , :func:`heapq.nsmallest` , " +":func:`itertools.groupby` 等函数的 `key` 参数中使用。此函数主要用作将 Python 2 " +"程序转换至新版的转换工具,以保持对比较函数的兼容。" + +#: ../../library/functools.rst:122 +msgid "" +"A comparison function is any callable that accept two arguments, compares " +"them, and returns a negative number for less-than, zero for equality, or a " +"positive number for greater-than. A key function is a callable that accepts" +" one argument and returns another value to be used as the sort key." +msgstr "" +"比较函数意为一个可调用对象,该对象接受两个参数并比较它们,结果为小于则返回一个负数,相等则返回零,大于则返回一个正数。key " +"function则是一个接受一个参数,并返回另一个用以排序的值的可调用对象。" + +#: ../../library/functools.rst:131 +msgid "" +"For sorting examples and a brief sorting tutorial, see :ref:`sortinghowto`." +msgstr "有关排序示例和简要排序教程,请参阅 :ref:`sortinghowto` 。" + +#: ../../library/functools.rst:139 +msgid "" +"Decorator to wrap a function with a memoizing callable that saves up to the " +"*maxsize* most recent calls. It can save time when an expensive or I/O " +"bound function is periodically called with the same arguments." +msgstr "" +"一个为函数提供缓存功能的装饰器,缓存 *maxsize* 组传入参数,在下次以相同参数调用时直接返回上一次的结果。用以节约高开销或I/O函数的调用时间。" + +#: ../../library/functools.rst:143 +msgid "" +"Since a dictionary is used to cache results, the positional and keyword " +"arguments to the function must be hashable." +msgstr "由于使用了字典存储缓存,所以该函数的固定参数和关键字参数必须是可哈希的。" + +#: ../../library/functools.rst:146 +msgid "" +"Distinct argument patterns may be considered to be distinct calls with " +"separate cache entries. For example, `f(a=1, b=2)` and `f(b=2, a=1)` differ" +" in their keyword argument order and may have two separate cache entries." +msgstr "" +"不同模式的参数可能被视为不同从而产生多个缓存项,例如, `f(a=1, b=2)` 和 `f(b=2, a=1)` 因其参数顺序不同,可能会被缓存两次。" + +#: ../../library/functools.rst:151 +msgid "" +"If *user_function* is specified, it must be a callable. This allows the " +"*lru_cache* decorator to be applied directly to a user function, leaving the" +" *maxsize* at its default value of 128::" +msgstr "" +"如果指定了 *user_function*,它必须是一个可调用对象。 这允许 *lru_cache* 装饰器被直接应用于一个用户自定义函数,让 " +"*maxsize* 保持其默认值 128::" + +#: ../../library/functools.rst:160 +msgid "" +"If *maxsize* is set to ``None``, the LRU feature is disabled and the cache " +"can grow without bound." +msgstr "如果 *maxsize* 设为 ``None``,LRU 特性将被禁用且缓存可无限增长。" + +#: ../../library/functools.rst:163 +msgid "" +"If *typed* is set to true, function arguments of different types will be " +"cached separately. For example, ``f(3)`` and ``f(3.0)`` will be treated as " +"distinct calls with distinct results." +msgstr "" +"如果 *typed* 设置为true,不同类型的函数参数将被分别缓存。例如, ``f(3)`` 和 ``f(3.0)`` 将被视为不同而分别缓存。" + +#: ../../library/functools.rst:167 +msgid "" +"The wrapped function is instrumented with a :func:`cache_parameters` " +"function that returns a new :class:`dict` showing the values for *maxsize* " +"and *typed*. This is for information purposes only. Mutating the values " +"has no effect." +msgstr "" +"被包装的函数配有一个 :func:`cache_parameters` 函数,该函数返回一个新的 :class:`dict` 用来显示 " +"*maxsize* 和 *typed* 的值。 这只是出于显示信息的目的。 改变值没有任何效果。" + +#: ../../library/functools.rst:172 +msgid "" +"To help measure the effectiveness of the cache and tune the *maxsize* " +"parameter, the wrapped function is instrumented with a :func:`cache_info` " +"function that returns a :term:`named tuple` showing *hits*, *misses*, " +"*maxsize* and *currsize*. In a multi-threaded environment, the hits and " +"misses are approximate." +msgstr "" +"为了衡量缓存的有效性以便调整 *maxsize* 形参,被装饰的函数带有一个 :func:`cache_info` 函数。当调用 " +":func:`cache_info` 函数时,返回一个具名元组,包含命中次数 *hits*,未命中次数 *misses* ,最大缓存数量 " +"*maxsize* 和 当前缓存大小 *currsize*。在多线程环境中,命中数与未命中数是不完全准确的。" + +#: ../../library/functools.rst:178 +msgid "" +"The decorator also provides a :func:`cache_clear` function for clearing or " +"invalidating the cache." +msgstr "该装饰器也提供了一个用于清理/使缓存失效的函数 :func:`cache_clear` 。" + +#: ../../library/functools.rst:181 +msgid "" +"The original underlying function is accessible through the " +":attr:`__wrapped__` attribute. This is useful for introspection, for " +"bypassing the cache, or for rewrapping the function with a different cache." +msgstr "" +"原始的未经装饰的函数可以通过 :attr:`__wrapped__` 属性访问。它可以用于检查、绕过缓存,或使用不同的缓存再次装饰原始函数。" + +#: ../../library/functools.rst:185 +msgid "" +"An `LRU (least recently used) cache " +"`_" +" works best when the most recent calls are the best predictors of upcoming " +"calls (for example, the most popular articles on a news server tend to " +"change each day). The cache's size limit assures that the cache does not " +"grow without bound on long-running processes such as web servers." +msgstr "" +"`LRU(最久未使用算法)缓存 " +"`_" +" 在最近的调用是即将到来的调用的最佳预测值时性能最好(例如,新闻服务器上最热门文章倾向于每天更改)。 " +"缓存的大小限制可确保缓存不会在长期运行进程如网站服务器上无限制地增长。" + +#: ../../library/functools.rst:192 +msgid "" +"In general, the LRU cache should only be used when you want to reuse " +"previously computed values. Accordingly, it doesn't make sense to cache " +"functions with side-effects, functions that need to create distinct mutable " +"objects on each call, or impure functions such as time() or random()." +msgstr "" +"一般来说,LRU缓存只在当你想要重用之前计算的结果时使用。因此,用它缓存具有副作用的函数、需要在每次调用时创建不同、易变的对象的函数或者诸如time()或random()之类的不纯函数是没有意义的。" + +#: ../../library/functools.rst:197 +msgid "Example of an LRU cache for static web content::" +msgstr "静态 Web 内容的 LRU 缓存示例::" + +#: ../../library/functools.rst:216 +msgid "" +"Example of efficiently computing `Fibonacci numbers " +"`_ using a cache to " +"implement a `dynamic programming " +"`_ technique::" +msgstr "" +"以下是使用缓存通过 `动态规划 `_ 计算 `斐波那契数列 " +"`_ 的例子。" + +#: ../../library/functools.rst:236 +msgid "Added the *typed* option." +msgstr "添加 *typed* 选项。" + +#: ../../library/functools.rst:239 +msgid "Added the *user_function* option." +msgstr "添加了 *user_function* 选项。" + +#: ../../library/functools.rst:242 +msgid "Added the function :func:`cache_parameters`" +msgstr "新增函数 :func:`cache_parameters`" + +#: ../../library/functools.rst:247 +msgid "" +"Given a class defining one or more rich comparison ordering methods, this " +"class decorator supplies the rest. This simplifies the effort involved in " +"specifying all of the possible rich comparison operations:" +msgstr "给定一个声明一个或多个全比较排序方法的类,这个类装饰器实现剩余的方法。这减轻了指定所有可能的全比较操作的工作。" + +#: ../../library/functools.rst:251 +msgid "" +"The class must define one of :meth:`__lt__`, :meth:`__le__`, :meth:`__gt__`," +" or :meth:`__ge__`. In addition, the class should supply an :meth:`__eq__` " +"method." +msgstr "" +"此类必须包含以下方法之一::meth:`__lt__` 、:meth:`__le__`、:meth:`__gt__` 或 " +":meth:`__ge__`。另外,此类必须支持 :meth:`__eq__` 方法。" + +#: ../../library/functools.rst:275 +msgid "" +"While this decorator makes it easy to create well behaved totally ordered " +"types, it *does* come at the cost of slower execution and more complex stack" +" traces for the derived comparison methods. If performance benchmarking " +"indicates this is a bottleneck for a given application, implementing all six" +" rich comparison methods instead is likely to provide an easy speed boost." +msgstr "" +"虽然此装饰器使得创建具有良好行为的完全有序类型变得非常容易,但它 *确实* 是以执行速度更缓慢和派生比较方法的堆栈回溯更复杂为代价的。 " +"如果性能基准测试表明这是特定应用的瓶颈所在,则改为实现全部六个富比较方法应该会轻松提升速度。" + +#: ../../library/functools.rst:284 +msgid "" +"Returning NotImplemented from the underlying comparison function for " +"unrecognised types is now supported." +msgstr "现在已支持从未识别类型的下层比较函数返回 NotImplemented 异常。" + +#: ../../library/functools.rst:290 +msgid "" +"Return a new :ref:`partial object` which when called will " +"behave like *func* called with the positional arguments *args* and keyword " +"arguments *keywords*. If more arguments are supplied to the call, they are " +"appended to *args*. If additional keyword arguments are supplied, they " +"extend and override *keywords*. Roughly equivalent to::" +msgstr "" +"返回一个新的 :ref:`部分对象`,当被调用时其行为类似于 *func* 附带位置参数 *args* 和关键字参数 " +"*keywords* 被调用。 如果为调用提供了更多的参数,它们会被附加到 *args*。 如果提供了额外的关键字参数,它们会扩展并重写 " +"*keywords*。 大致等价于::" + +#: ../../library/functools.rst:306 +msgid "" +"The :func:`partial` is used for partial function application which " +"\"freezes\" some portion of a function's arguments and/or keywords resulting" +" in a new object with a simplified signature. For example, :func:`partial` " +"can be used to create a callable that behaves like the :func:`int` function " +"where the *base* argument defaults to two:" +msgstr "" +":func:`partial` 会被“冻结了”一部分函数参数和/或关键字的部分函数应用所使用,从而得到一个具有简化签名的新对象。 " +"例如,:func:`partial` 可用来创建一个行为类似于 :func:`int` 函数的可调用对象,其中 *base* 参数默认为二:" + +#: ../../library/functools.rst:321 +msgid "" +"Return a new :class:`partialmethod` descriptor which behaves like " +":class:`partial` except that it is designed to be used as a method " +"definition rather than being directly callable." +msgstr "" +"返回一个新的 :class:`partialmethod` 描述器,其行为类似 :class:`partial` " +"但它被设计用作方法定义而非直接用作可调用对象。" + +#: ../../library/functools.rst:325 +msgid "" +"*func* must be a :term:`descriptor` or a callable (objects which are both, " +"like normal functions, are handled as descriptors)." +msgstr "*func* 必须是一个 :term:`descriptor` 或可调用对象(同属两者的对象例如普通函数会被当作描述器来处理)。" + +#: ../../library/functools.rst:328 +msgid "" +"When *func* is a descriptor (such as a normal Python function, " +":func:`classmethod`, :func:`staticmethod`, :func:`abstractmethod` or another" +" instance of :class:`partialmethod`), calls to ``__get__`` are delegated to " +"the underlying descriptor, and an appropriate :ref:`partial object` returned as the result." +msgstr "" +"当 *func* 是一个描述器(例如普通 Python 函数, :func:`classmethod`, :func:`staticmethod`, " +":func:`abstractmethod` 或其他 :class:`partialmethod` 的实例)时, 对 ``__get__`` " +"的调用会被委托给底层的描述器,并会返回一个适当的 :ref:`部分对象` 作为结果。" + +#: ../../library/functools.rst:334 +msgid "" +"When *func* is a non-descriptor callable, an appropriate bound method is " +"created dynamically. This behaves like a normal Python function when used as" +" a method: the *self* argument will be inserted as the first positional " +"argument, even before the *args* and *keywords* supplied to the " +":class:`partialmethod` constructor." +msgstr "" +"当 *func* 是一个非描述器类可调用对象时,则会动态创建一个适当的绑定方法。 当用作方法时其行为类似普通 Python 函数:将会插入 *self*" +" 参数作为第一个位置参数,其位置甚至会处于提供给 :class:`partialmethod` 构造器的 *args* 和 *keywords* 之前。" + +#: ../../library/functools.rst:365 +msgid "" +"Apply *function* of two arguments cumulatively to the items of *iterable*, " +"from left to right, so as to reduce the iterable to a single value. For " +"example, ``reduce(lambda x, y: x+y, [1, 2, 3, 4, 5])`` calculates " +"``((((1+2)+3)+4)+5)``. The left argument, *x*, is the accumulated value and " +"the right argument, *y*, is the update value from the *iterable*. If the " +"optional *initializer* is present, it is placed before the items of the " +"iterable in the calculation, and serves as a default when the iterable is " +"empty. If *initializer* is not given and *iterable* contains only one item," +" the first item is returned." +msgstr "" +"将两个参数的 *function* 从左至右积累地应用到 *iterable* 的条目,以便将该可迭代对象缩减为单一的值。 " +"例如,``reduce(lambda x, y: x+y, [1, 2, 3, 4, 5])`` 是计算 ``((((1+2)+3)+4)+5)`` " +"的值。 左边的参数 *x* 是积累值而右边的参数 *y* 则是来自 *iterable* 的更新值。 如果存在可选项 " +"*initializer*,它会被放在参与计算的可迭代对象的条目之前,并在可迭代对象为空时作为默认值。 如果没有给出 *initializer* 并且 " +"*iterable* 仅包含一个条目,则将返回第一项。" + +#: ../../library/functools.rst:374 +msgid "Roughly equivalent to::" +msgstr "大致相当于:" + +#: ../../library/functools.rst:386 +msgid "" +"See :func:`itertools.accumulate` for an iterator that yields all " +"intermediate values." +msgstr "请参阅 :func:`itertools.accumulate` 了解有关可产生所有中间值的迭代器。" + +#: ../../library/functools.rst:391 +msgid "" +"Transform a function into a :term:`single-dispatch ` " +":term:`generic function`." +msgstr "将一个函数转换为 :term:`单分派 ` :term:`generic function`。" + +#: ../../library/functools.rst:394 +msgid "" +"To define a generic function, decorate it with the ``@singledispatch`` " +"decorator. When defining a function using ``@singledispatch``, note that the" +" dispatch happens on the type of the first argument::" +msgstr "" +"要定义一个泛型函数,用装饰器 ``@singledispatch`` 来装饰它。当使用 ``@singledispatch`` " +"定义一个函数时,请注意调度发生在第一个参数的类型上::" + +#: ../../library/functools.rst:405 +msgid "" +"To add overloaded implementations to the function, use the :func:`register` " +"attribute of the generic function, which can be used as a decorator. For " +"functions annotated with types, the decorator will infer the type of the " +"first argument automatically::" +msgstr "" +"要将重载的实现添加到函数中,请使用泛型函数的 :func:`register` 属性,它可以被用作装饰器。 " +"对于带有类型标注的函数,该装饰器将自动推断第一个参数的类型::" + +#: ../../library/functools.rst:423 +msgid "" +"For code which doesn't use type annotations, the appropriate type argument " +"can be passed explicitly to the decorator itself::" +msgstr "对于不使用类型标注的代码,可以将适当的类型参数显式地传给装饰器本身::" + +#: ../../library/functools.rst:434 +msgid "" +"To enable registering :term:`lambdas` and pre-existing functions, " +"the :func:`register` attribute can also be used in a functional form::" +msgstr "要启用注册 :term:`lambda ` 和现有的函数,也可以使用 :func:`register` 属性的函数形式::" + +#: ../../library/functools.rst:442 +msgid "" +"The :func:`register` attribute returns the undecorated function. This " +"enables decorator stacking, :mod:`pickling`, and the creation of " +"unit tests for each variant independently::" +msgstr "" +":func:`register` 属性会返回未被装饰的函数。 这将启用装饰器栈、:mod:`封存 `,并为每个变量单独创建单元测试::" + +#: ../../library/functools.rst:456 +msgid "" +"When called, the generic function dispatches on the type of the first " +"argument::" +msgstr "在调用时,泛型函数会根据第一个参数的类型进行分派::" + +#: ../../library/functools.rst:476 +msgid "" +"Where there is no registered implementation for a specific type, its method " +"resolution order is used to find a more generic implementation. The original" +" function decorated with ``@singledispatch`` is registered for the base " +":class:`object` type, which means it is used if no better implementation is " +"found." +msgstr "" +"在没有针对特定类型的已注册实现的情况下,会使用其方法解析顺序来查找更通用的实现。 使用 ``@singledispatch`` 装饰的原始函数将为基本的" +" :class:`object` 类型进行注册,这意味着它将在找不到更好的实现时被使用。" + +#: ../../library/functools.rst:482 +msgid "" +"If an implementation is registered to an :term:`abstract base class`, " +"virtual subclasses of the base class will be dispatched to that " +"implementation::" +msgstr "如果一个实现被注册到 :term:`abstract base class`,则基类的虚拟子类将被发送到该实现::" + +#: ../../library/functools.rst:497 +msgid "" +"To check which implementation the generic function will choose for a given " +"type, use the ``dispatch()`` attribute::" +msgstr "要检查泛型函数将为给定的类型选择哪个实现,请使用 ``dispatch()`` 属性::" + +#: ../../library/functools.rst:505 +msgid "" +"To access all registered implementations, use the read-only ``registry`` " +"attribute::" +msgstr "要访问所有已注册实现,请使用只读的 ``registry`` 属性::" + +#: ../../library/functools.rst:519 +msgid "The :func:`register` attribute now supports using type annotations." +msgstr ":func:`register` 属性现在支持使用类型标注。" + +#: ../../library/functools.rst:525 +msgid "" +"Transform a method into a :term:`single-dispatch ` " +":term:`generic function`." +msgstr "将一个方法转换为 :term:`单分派 ` :term:`generic function`。" + +#: ../../library/functools.rst:528 +msgid "" +"To define a generic method, decorate it with the ``@singledispatchmethod`` " +"decorator. When defining a function using ``@singledispatchmethod``, note " +"that the dispatch happens on the type of the first non-*self* or non-*cls* " +"argument::" +msgstr "" +"要定义一个泛型方法,请用 ``@singledispatchmethod`` 装饰器来装饰它。 当使用 " +"``@singledispatchmethod`` 定义一个函数时,请注意发送操作将针对第一个非 *self* 或非 *cls* 参数的类型上::" + +#: ../../library/functools.rst:546 +msgid "" +"``@singledispatchmethod`` supports nesting with other decorators such as " +":func:`@classmethod`. Note that to allow for " +"``dispatcher.register``, ``singledispatchmethod`` must be the *outer most* " +"decorator. Here is the ``Negator`` class with the ``neg`` methods bound to " +"the class, rather than an instance of the class::" +msgstr "" +"``@singledispatchmethod`` 支持与其他装饰器如 :func:`@classmethod` 相嵌套。 " +"请注意为了允许 ``dispatcher.register``,``singledispatchmethod`` 必须是 *最外层的* 装饰器。 " +"下面是一个 ``Negator`` 类包含绑定到类的 ``neg`` 方法,而不是一个类实例::" + +#: ../../library/functools.rst:568 +msgid "" +"The same pattern can be used for other similar decorators: " +":func:`@staticmethod`, " +":func:`@abstractmethod`, and others." +msgstr "" +"同样的模式也可被用于其他类似的装饰器: :func:`@staticmethod`, " +":func:`@abstractmethod` 等等。" + +#: ../../library/functools.rst:577 +msgid "" +"Update a *wrapper* function to look like the *wrapped* function. The " +"optional arguments are tuples to specify which attributes of the original " +"function are assigned directly to the matching attributes on the wrapper " +"function and which attributes of the wrapper function are updated with the " +"corresponding attributes from the original function. The default values for " +"these arguments are the module level constants ``WRAPPER_ASSIGNMENTS`` " +"(which assigns to the wrapper function's ``__module__``, ``__name__``, " +"``__qualname__``, ``__annotations__`` and ``__doc__``, the documentation " +"string) and ``WRAPPER_UPDATES`` (which updates the wrapper function's " +"``__dict__``, i.e. the instance dictionary)." +msgstr "" +"更新一个 *wrapper* 函数以使其类似于 *wrapped* 函数。 可选参数为指明原函数的哪些属性要直接被赋值给 wrapper " +"函数的匹配属性的元组,并且这些 wrapper 函数的属性将使用原函数的对应属性来更新。 这些参数的默认值是模块级常量 " +"``WRAPPER_ASSIGNMENTS`` (它将被赋值给 wrapper 函数的 ``__module__``, ``__name__``, " +"``__qualname__``, ``__annotations__`` 和 ``__doc__`` 即文档字符串) 以及 " +"``WRAPPER_UPDATES`` (它将更新 wrapper 函数的 ``__dict__`` 即实例字典)。" + +#: ../../library/functools.rst:587 +msgid "" +"To allow access to the original function for introspection and other " +"purposes (e.g. bypassing a caching decorator such as :func:`lru_cache`), " +"this function automatically adds a ``__wrapped__`` attribute to the wrapper " +"that refers to the function being wrapped." +msgstr "" +"为了允许出于内省和其他目的访问原始函数(例如绕过 :func:`lru_cache` 之类的缓存装饰器),此函数会自动为 wrapper " +"添加一个指向被包装函数的 ``__wrapped__`` 属性。" + +#: ../../library/functools.rst:592 +msgid "" +"The main intended use for this function is in :term:`decorator` functions " +"which wrap the decorated function and return the wrapper. If the wrapper " +"function is not updated, the metadata of the returned function will reflect " +"the wrapper definition rather than the original function definition, which " +"is typically less than helpful." +msgstr "" +"此函数的主要目的是在 :term:`decorator` 函数中用来包装被装饰的函数并返回包装器。 " +"如果包装器函数未被更新,则被返回函数的元数据将反映包装器定义而不是原始函数定义,这通常没有什么用处。" + +#: ../../library/functools.rst:598 +msgid "" +":func:`update_wrapper` may be used with callables other than functions. Any " +"attributes named in *assigned* or *updated* that are missing from the object" +" being wrapped are ignored (i.e. this function will not attempt to set them " +"on the wrapper function). :exc:`AttributeError` is still raised if the " +"wrapper function itself is missing any attributes named in *updated*." +msgstr "" +":func:`update_wrapper` 可以与函数之外的可调用对象一同使用。 在 *assigned* 或 *updated* " +"中命名的任何属性如果不存在于被包装对象则会被忽略(即该函数将不会尝试在包装器函数上设置它们)。 如果包装器函数自身缺少在 *updated* " +"中命名的任何属性则仍将引发 :exc:`AttributeError`。" + +#: ../../library/functools.rst:604 +msgid "Automatic addition of the ``__wrapped__`` attribute." +msgstr "自动添加 ``__wrapped__`` 属性。" + +#: ../../library/functools.rst:607 +msgid "Copying of the ``__annotations__`` attribute by default." +msgstr "默认拷贝 ``__annotations__`` 属性。" + +#: ../../library/functools.rst:610 +msgid "Missing attributes no longer trigger an :exc:`AttributeError`." +msgstr "不存在的属性将不再触发 :exc:`AttributeError`。" + +#: ../../library/functools.rst:613 +msgid "" +"The ``__wrapped__`` attribute now always refers to the wrapped function, " +"even if that function defined a ``__wrapped__`` attribute. (see " +":issue:`17482`)" +msgstr "" +"``__wrapped__`` 属性现在总是指向被包装的函数,即使该函数定义了 ``__wrapped__`` 属性。 (参见 " +":issue:`17482`)" + +#: ../../library/functools.rst:621 +msgid "" +"This is a convenience function for invoking :func:`update_wrapper` as a " +"function decorator when defining a wrapper function. It is equivalent to " +"``partial(update_wrapper, wrapped=wrapped, assigned=assigned, " +"updated=updated)``. For example::" +msgstr "" +"这是一个便捷函数,用于在定义包装器函数时唤起 :func:`update_wrapper` 作为函数装饰器。 它等价于 " +"``partial(update_wrapper, wrapped=wrapped, assigned=assigned, " +"updated=updated)``。 例如::" + +#: ../../library/functools.rst:647 +msgid "" +"Without the use of this decorator factory, the name of the example function " +"would have been ``'wrapper'``, and the docstring of the original " +":func:`example` would have been lost." +msgstr "" +"如果不使用这个装饰器工厂函数,则 example 函数的名称将变为 ``'wrapper'``,并且 :func:`example` " +"原本的文档字符串将会丢失。" + +#: ../../library/functools.rst:655 +msgid ":class:`partial` Objects" +msgstr ":class:`partial` 对象" + +#: ../../library/functools.rst:657 +msgid "" +":class:`partial` objects are callable objects created by :func:`partial`. " +"They have three read-only attributes:" +msgstr ":class:`partial` 对象是由 :func:`partial` 创建的可调用对象。 它们具有三个只读属性:" + +#: ../../library/functools.rst:663 +msgid "" +"A callable object or function. Calls to the :class:`partial` object will be" +" forwarded to :attr:`func` with new arguments and keywords." +msgstr "一个可调用对象或函数。 对 :class:`partial` 对象的调用将被转发给 :attr:`func` 并附带新的参数和关键字。" + +#: ../../library/functools.rst:669 +msgid "" +"The leftmost positional arguments that will be prepended to the positional " +"arguments provided to a :class:`partial` object call." +msgstr "最左边的位置参数将放置在提供给 :class:`partial` 对象调用的位置参数之前。" + +#: ../../library/functools.rst:675 +msgid "" +"The keyword arguments that will be supplied when the :class:`partial` object" +" is called." +msgstr "当调用 :class:`partial` 对象时将要提供的关键字参数。" + +#: ../../library/functools.rst:678 +msgid "" +":class:`partial` objects are like :class:`function` objects in that they are" +" callable, weak referencable, and can have attributes. There are some " +"important differences. For instance, the :attr:`~definition.__name__` and " +":attr:`__doc__` attributes are not created automatically. Also, " +":class:`partial` objects defined in classes behave like static methods and " +"do not transform into bound methods during instance attribute look-up." +msgstr "" +":class:`partial` 对象与 :class:`function` 对象的类似之处在于它们都是可调用、可弱引用的对象并可拥有属性。 " +"但两者也存在一些重要的区别。 例如前者不会自动创建 :attr:`~definition.__name__` 和 :attr:`__doc__` 属性。" +" 而且,在类中定义的 :class:`partial` 对象的行为类似于静态方法,并且不会在实例属性查找期间转换为绑定方法。" diff --git a/library/gc.po b/library/gc.po new file mode 100644 index 000000000..b3a099281 --- /dev/null +++ b/library/gc.po @@ -0,0 +1,424 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) 2001-2024, Python Software Foundation +# This file is distributed under the same license as the Python package. +# FIRST AUTHOR , YEAR. +# +# Translators: +# Konge , 2019 +# Makdon , 2019 +# Freesand Leo , 2022 +# Rafael Fontenelle , 2024 +# +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: Python 3.9\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2024-08-30 16:51+0000\n" +"PO-Revision-Date: 2017-02-16 23:12+0000\n" +"Last-Translator: Rafael Fontenelle , 2024\n" +"Language-Team: Chinese (China) (https://app.transifex.com/python-doc/teams/5390/zh_CN/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: zh_CN\n" +"Plural-Forms: nplurals=1; plural=0;\n" + +#: ../../library/gc.rst:2 +msgid ":mod:`gc` --- Garbage Collector interface" +msgstr ":mod:`gc` --- 垃圾回收器接口" + +#: ../../library/gc.rst:12 +msgid "" +"This module provides an interface to the optional garbage collector. It " +"provides the ability to disable the collector, tune the collection " +"frequency, and set debugging options. It also provides access to " +"unreachable objects that the collector found but cannot free. Since the " +"collector supplements the reference counting already used in Python, you can" +" disable the collector if you are sure your program does not create " +"reference cycles. Automatic collection can be disabled by calling " +"``gc.disable()``. To debug a leaking program call " +"``gc.set_debug(gc.DEBUG_LEAK)``. Notice that this includes " +"``gc.DEBUG_SAVEALL``, causing garbage-collected objects to be saved in " +"gc.garbage for inspection." +msgstr "" +"此模块提供可选的垃圾回收器的接口,提供的功能包括:关闭收集器、调整收集频率、设置调试选项。它同时提供对回收器找到但是无法释放的不可达对象的访问。由于 " +"Python 使用了带有引用计数的回收器,如果你确定你的程序不会产生循环引用,你可以关闭回收器。可以通过调用 ``gc.disable()`` " +"关闭自动垃圾回收。若要调试一个存在内存泄漏的程序,调用 ``gc.set_debug(gc.DEBUG_LEAK)`` ;需要注意的是,它包含 " +"``gc.DEBUG_SAVEALL`` ,使得被垃圾回收的对象会被存放在 gc.garbage 中以待检查。" + +#: ../../library/gc.rst:23 +msgid "The :mod:`gc` module provides the following functions:" +msgstr ":mod:`gc` 模块提供下列函数:" + +#: ../../library/gc.rst:28 +msgid "Enable automatic garbage collection." +msgstr "启用自动垃圾回收" + +#: ../../library/gc.rst:33 +msgid "Disable automatic garbage collection." +msgstr "停用自动垃圾回收" + +#: ../../library/gc.rst:38 +msgid "Return ``True`` if automatic collection is enabled." +msgstr "如果启用了自动回收则返回 ``True``。" + +#: ../../library/gc.rst:43 +msgid "" +"With no arguments, run a full collection. The optional argument " +"*generation* may be an integer specifying which generation to collect (from " +"0 to 2). A :exc:`ValueError` is raised if the generation number is " +"invalid. The number of unreachable objects found is returned." +msgstr "" +"若被调用时不包含参数,则启动完全的垃圾回收。可选的参数 *generation* 可以是一个整数,指明需要回收哪一代(从 0 到 2 )的垃圾。当参数 " +"*generation* 无效时,会引发 :exc:`ValueError` 异常。返回发现的不可达对象的数目。" + +#: ../../library/gc.rst:48 +msgid "" +"The free lists maintained for a number of built-in types are cleared " +"whenever a full collection or collection of the highest generation (2) is " +"run. Not all items in some free lists may be freed due to the particular " +"implementation, in particular :class:`float`." +msgstr "" +"每当运行完整收集或最高代 (2) 收集时,为多个内置类型所维护的空闲列表会被清空。 由于特定类型特别是 :class:`float` " +"的实现,在某些空闲列表中并非所有项都会被释放。" + +#: ../../library/gc.rst:56 +msgid "" +"Set the garbage collection debugging flags. Debugging information will be " +"written to ``sys.stderr``. See below for a list of debugging flags which " +"can be combined using bit operations to control debugging." +msgstr "" +"设置垃圾回收器的调试标识位。调试信息会被写入 ``sys.stderr`` " +"。此文档末尾列出了各个标志位及其含义;可以使用位操作对多个标志位进行设置以控制调试器。" + +#: ../../library/gc.rst:63 +msgid "Return the debugging flags currently set." +msgstr "返回当前调试标识位。" + +#: ../../library/gc.rst:68 +msgid "" +"Returns a list of all objects tracked by the collector, excluding the list " +"returned. If *generation* is not None, return only the objects tracked by " +"the collector that are in that generation." +msgstr "" +"返回一个收集器所跟踪的所有对象的列表,所返回的列表除外。 如果 *generation* 不为 None,则只返回收集器所跟踪的属于该生成的对象。" + +#: ../../library/gc.rst:72 +msgid "New *generation* parameter." +msgstr "新的 *generation* 形参。" + +#: ../../library/gc.rst:75 +msgid "" +"Raises an :ref:`auditing event ` ``gc.get_objects`` with argument " +"``generation``." +msgstr "引发一个 :ref:`审计事件 ` ``gc.get_objects`` 并附带参数 ``generation``。" + +#: ../../library/gc.rst:79 +msgid "" +"Return a list of three per-generation dictionaries containing collection " +"statistics since interpreter start. The number of keys may change in the " +"future, but currently each dictionary will contain the following items:" +msgstr "" +"返回一个包含三个字典对象的列表,每个字典分别包含对应代的从解释器开始运行的垃圾回收统计数据。字典的键的数目在将来可能发生改变,目前每个字典包含以下内容:" + +#: ../../library/gc.rst:84 +msgid "``collections`` is the number of times this generation was collected;" +msgstr "``collections`` 是该代被回收的次数;" + +#: ../../library/gc.rst:86 +msgid "" +"``collected`` is the total number of objects collected inside this " +"generation;" +msgstr "``collected`` 是该代中被回收的对象总数;" + +#: ../../library/gc.rst:89 +msgid "" +"``uncollectable`` is the total number of objects which were found to be " +"uncollectable (and were therefore moved to the :data:`garbage` list) inside " +"this generation." +msgstr "``uncollectable`` 是在这一代中被发现无法收集的对象总数 (因此被移动到 :data:`garbage` 列表中)。" + +#: ../../library/gc.rst:98 +msgid "" +"Set the garbage collection thresholds (the collection frequency). Setting " +"*threshold0* to zero disables collection." +msgstr "设置垃圾回收阈值(收集频率)。 将 *threshold0* 设为零会禁用回收。" + +#: ../../library/gc.rst:101 +msgid "" +"The GC classifies objects into three generations depending on how many " +"collection sweeps they have survived. New objects are placed in the " +"youngest generation (generation ``0``). If an object survives a collection " +"it is moved into the next older generation. Since generation ``2`` is the " +"oldest generation, objects in that generation remain there after a " +"collection. In order to decide when to run, the collector keeps track of " +"the number object allocations and deallocations since the last collection. " +"When the number of allocations minus the number of deallocations exceeds " +"*threshold0*, collection starts. Initially only generation ``0`` is " +"examined. If generation ``0`` has been examined more than *threshold1* " +"times since generation ``1`` has been examined, then generation ``1`` is " +"examined as well. With the third generation, things are a bit more " +"complicated, see `Collecting the oldest generation " +"`_ for more information." +msgstr "" +"垃圾回收器把所有对象分类为三代,其依据是对象在多少次垃圾回收后幸存。 新建对象会被放在最年轻代(第 ``0`` 代)。 " +"如果一个对象在一次垃圾回收后幸存,它会被移入下一个较老代。 由于第 ``2`` 代是最老代,这一代的对象在一次垃圾回收后仍会保留原样。 " +"为了确定何时要运行,垃圾回收器会跟踪自上一次回收后对象分配和释放的数量。 当分配数量减去释放数量的结果值大于 *threshold0* " +"时,垃圾回收就会开始。 初始时只有第 ``0`` 代会被检查。 如果自第 ``1`` 代被检查后第 ``0`` 代已被检查超过 *threshold1*" +" 次,则第 ``1`` 也会被检查。 对于第三代来说情况还会更复杂,请参阅 `Collecting the oldest generation " +"`_ 来了解详情。" + +#: ../../library/gc.rst:118 +msgid "" +"Return the current collection counts as a tuple of ``(count0, count1, " +"count2)``." +msgstr "将当前回收计数以形为 ``(count0, count1, count2)`` 的元组返回。" + +#: ../../library/gc.rst:124 +msgid "" +"Return the current collection thresholds as a tuple of ``(threshold0, " +"threshold1, threshold2)``." +msgstr "将当前回收阈值以形为 ``(threshold0, threshold1, threshold2)`` 的元组返回。" + +#: ../../library/gc.rst:130 +msgid "" +"Return the list of objects that directly refer to any of objs. This function" +" will only locate those containers which support garbage collection; " +"extension types which do refer to other objects but do not support garbage " +"collection will not be found." +msgstr "返回直接引用任意一个 *objs* 的对象列表。这个函数只定位支持垃圾回收的容器;引用了其它对象但不支持垃圾回收的扩展类型不会被找到。" + +#: ../../library/gc.rst:135 +msgid "" +"Note that objects which have already been dereferenced, but which live in " +"cycles and have not yet been collected by the garbage collector can be " +"listed among the resulting referrers. To get only currently live objects, " +"call :func:`collect` before calling :func:`get_referrers`." +msgstr "" +"需要注意的是,已经解除对 *objs* 引用的对象,但仍存在于循环引用中未被回收时,仍然会被作为引用者出现在返回的列表当中。若要获取当前正在引用 " +"*objs* 的对象,需要调用 :func:`collect` 然后再调用 :func:`get_referrers` 。" + +#: ../../library/gc.rst:141 +msgid "" +"Care must be taken when using objects returned by :func:`get_referrers` " +"because some of them could still be under construction and hence in a " +"temporarily invalid state. Avoid using :func:`get_referrers` for any purpose" +" other than debugging." +msgstr "" +"在使用 :func:`get_referrers` 返回的对象时必须要小心,因为其中一些对象可能仍在构造中因此处于暂时的无效状态。不要把 " +":func:`get_referrers` 用于调试以外的其它目的。" + +#: ../../library/gc.rst:146 +msgid "" +"Raises an :ref:`auditing event ` ``gc.get_referrers`` with " +"argument ``objs``." +msgstr "引发一个 :ref:`审计事件 ` ``gc.get_referrers`` 并附带参数 ``objs``。" + +#: ../../library/gc.rst:151 +msgid "" +"Return a list of objects directly referred to by any of the arguments. The " +"referents returned are those objects visited by the arguments' C-level " +":c:member:`~PyTypeObject.tp_traverse` methods (if any), and may not be all " +"objects actually directly reachable. :c:member:`~PyTypeObject.tp_traverse` " +"methods are supported only by objects that support garbage collection, and " +"are only required to visit objects that may be involved in a cycle. So, for" +" example, if an integer is directly reachable from an argument, that integer" +" object may or may not appear in the result list." +msgstr "" +"返回被任意一个参数中的对象直接引用的对象的列表。返回的被引用对象是被参数中的对象的C语言级别方法(若存在) " +":c:member:`~PyTypeObject.tp_traverse` 访问到的对象,可能不是所有的实际直接可达对象。只有支持垃圾回收的对象支持 " +":c:member:`~PyTypeObject.tp_traverse`  " +"方法,并且此方法只会在需要访问涉及循环引用的对象时使用。因此,可以有以下例子:一个整数对其中一个参数是直接可达的,这个整数有可能出现或不出现在返回的结果列表当中。" + +#: ../../library/gc.rst:159 +msgid "" +"Raises an :ref:`auditing event ` ``gc.get_referents`` with " +"argument ``objs``." +msgstr "引发一个 :ref:`审计事件 ` ``gc.get_referents`` 并附带参数 ``objs``。" + +#: ../../library/gc.rst:163 +msgid "" +"Returns ``True`` if the object is currently tracked by the garbage " +"collector, ``False`` otherwise. As a general rule, instances of atomic " +"types aren't tracked and instances of non-atomic types (containers, user-" +"defined objects...) are. However, some type-specific optimizations can be " +"present in order to suppress the garbage collector footprint of simple " +"instances (e.g. dicts containing only atomic keys and values)::" +msgstr "" +"当对象正在被垃圾回收器监控时返回 ``True`` ,否则返回 ``False`` " +"。一般来说,原子类的实例不会被监控,而非原子类(如容器、用户自定义的对象)会被监控。然而,会有一些特定类型的优化以便减少垃圾回收器在简单实例(如只含有原子性的键和值的字典)上的消耗。" + +#: ../../library/gc.rst:188 +msgid "" +"Returns ``True`` if the given object has been finalized by the garbage " +"collector, ``False`` otherwise. ::" +msgstr "如果给定对象已被垃圾回收器终结则返回 ``True``,否则返回 ``False``。 ::" + +#: ../../library/gc.rst:209 +msgid "" +"Freeze all the objects tracked by gc - move them to a permanent generation " +"and ignore all the future collections. This can be used before a POSIX " +"fork() call to make the gc copy-on-write friendly or to speed up collection." +" Also collection before a POSIX fork() call may free pages for future " +"allocation which can cause copy-on-write too so it's advised to disable gc " +"in parent process and freeze before fork and enable gc in child process." +msgstr "" +"冻结 gc 所跟踪的所有对象 —— 将它们移至永久代并忽略所有未来的集合。 这可以在 POSIX fork() " +"调用之前使用以便令对写入复制保持友好或加速收集。 并且在 POSIX fork() " +"调用之前的收集也可以释放页面以供未来分配,这也可能导致写入时复制,因此建议在主进程中禁用 gc 并在 fork 之前冻结,而在子进程中启用 gc。" + +#: ../../library/gc.rst:221 +msgid "" +"Unfreeze the objects in the permanent generation, put them back into the " +"oldest generation." +msgstr "解冻永久代中的对象,并将它们放回到年老代中。" + +#: ../../library/gc.rst:229 +msgid "Return the number of objects in the permanent generation." +msgstr "返回永久代中的对象数量。" + +#: ../../library/gc.rst:234 +msgid "" +"The following variables are provided for read-only access (you can mutate " +"the values but should not rebind them):" +msgstr "提供以下变量仅供只读访问(你可以修改但不应该重绑定它们):" + +#: ../../library/gc.rst:239 +msgid "" +"A list of objects which the collector found to be unreachable but could not " +"be freed (uncollectable objects). Starting with Python 3.4, this list " +"should be empty most of the time, except when using instances of C extension" +" types with a non-``NULL`` ``tp_del`` slot." +msgstr "" +"一个回收器发现不可达而又无法被释放的对象(不可回收对象)列表。 从 Python 3.4 开始,该列表在大多数时候都应该是空的,除非使用了含有非 " +"``NULL`` ``tp_del`` 空位的 C 扩展类型的实例。" + +#: ../../library/gc.rst:244 +msgid "" +"If :const:`DEBUG_SAVEALL` is set, then all unreachable objects will be added" +" to this list rather than freed." +msgstr "如果设置了 :const:`DEBUG_SAVEALL` ,则所有不可访问对象将被添加至该列表而不会被释放。" + +#: ../../library/gc.rst:247 +msgid "" +"If this list is non-empty at :term:`interpreter shutdown`, a " +":exc:`ResourceWarning` is emitted, which is silent by default. If " +":const:`DEBUG_UNCOLLECTABLE` is set, in addition all uncollectable objects " +"are printed." +msgstr "" +"当 :term:`interpreter shutdown` 即解释器关闭时,若此列表非空,会产生 :exc:`ResourceWarning` " +",即资源警告,在默认情况下此警告不会被提醒。如果设置了 :const:`DEBUG_UNCOLLECTABLE` ,所有无法被回收的对象会被打印。" + +#: ../../library/gc.rst:253 +msgid "" +"Following :pep:`442`, objects with a :meth:`__del__` method don't end up in " +":attr:`gc.garbage` anymore." +msgstr "根据 :pep:`442` ,带有 :meth:`__del__` 方法的对象最终不再会进入 :attr:`gc.garbage` 。" + +#: ../../library/gc.rst:259 +msgid "" +"A list of callbacks that will be invoked by the garbage collector before and" +" after collection. The callbacks will be called with two arguments, *phase*" +" and *info*." +msgstr "在垃圾回收器开始前和完成后会被调用的一系列回调函数。这些回调函数在被调用时使用两个参数: *phase* 和 *info* 。" + +#: ../../library/gc.rst:263 +msgid "*phase* can be one of two values:" +msgstr "*phase* 可为以下两值之一:" + +#: ../../library/gc.rst:265 +msgid "\"start\": The garbage collection is about to start." +msgstr "\"start\": 垃圾回收即将开始。" + +#: ../../library/gc.rst:267 +msgid "\"stop\": The garbage collection has finished." +msgstr "\"stop\": 垃圾回收已结束。" + +#: ../../library/gc.rst:269 +msgid "" +"*info* is a dict providing more information for the callback. The following" +" keys are currently defined:" +msgstr " *info* 是一个字典,提供了回调函数更多信息。已有定义的键有:" + +#: ../../library/gc.rst:272 +msgid "\"generation\": The oldest generation being collected." +msgstr "\"generation\"(代) :正在被回收的最久远的一代。" + +#: ../../library/gc.rst:274 +msgid "" +"\"collected\": When *phase* is \"stop\", the number of objects successfully " +"collected." +msgstr "\"collected\"(已回收的 ): 当*phase* 为 \"stop\" 时,被成功回收的对象的数目。" + +#: ../../library/gc.rst:277 +msgid "" +"\"uncollectable\": When *phase* is \"stop\", the number of objects that " +"could not be collected and were put in :data:`garbage`." +msgstr "" +"\"uncollectable\"(不可回收的): 当 *phase* 为 \"stop\" 时,不能被回收并被放入 :data:`garbage` " +"的对象的数目。" + +#: ../../library/gc.rst:280 +msgid "" +"Applications can add their own callbacks to this list. The primary use " +"cases are:" +msgstr "应用程序可以把他们自己的回调函数加入此列表。主要的使用场景有:" + +#: ../../library/gc.rst:283 +msgid "" +"Gathering statistics about garbage collection, such as how often various " +"generations are collected, and how long the collection takes." +msgstr "统计垃圾回收的数据,如:不同代的回收频率、回收所花费的时间。" + +#: ../../library/gc.rst:287 +msgid "" +"Allowing applications to identify and clear their own uncollectable types " +"when they appear in :data:`garbage`." +msgstr "使应用程序可以识别和清理他们自己的在 :data:`garbage` 中的不可回收类型的对象。" + +#: ../../library/gc.rst:293 +msgid "The following constants are provided for use with :func:`set_debug`:" +msgstr "以下常量被用于 :func:`set_debug` :" + +#: ../../library/gc.rst:298 +msgid "" +"Print statistics during collection. This information can be useful when " +"tuning the collection frequency." +msgstr "在回收完成后打印统计信息。当回收频率设置较高时,这些信息会比较有用。" + +#: ../../library/gc.rst:304 +msgid "Print information on collectable objects found." +msgstr "当发现可回收对象时打印信息。" + +#: ../../library/gc.rst:309 +msgid "" +"Print information of uncollectable objects found (objects which are not " +"reachable but cannot be freed by the collector). These objects will be " +"added to the ``garbage`` list." +msgstr "打印找到的不可回收对象的信息(指不能被回收器回收的不可达对象)。这些对象会被添加到 ``garbage`` 列表中。" + +#: ../../library/gc.rst:313 +msgid "" +"Also print the contents of the :data:`garbage` list at :term:`interpreter " +"shutdown`, if it isn't empty." +msgstr "" +"当 :term:`interpreter shutdown` 时,即解释器关闭时,若 :data:`garbage` " +"列表中存在对象,这些对象也会被打印输出。" + +#: ../../library/gc.rst:319 +msgid "" +"When set, all unreachable objects found will be appended to *garbage* rather" +" than being freed. This can be useful for debugging a leaking program." +msgstr "设置后,所有回收器找到的不可达对象会被添加进 *garbage* 而不是直接被释放。这在调试一个内存泄漏的程序时会很有用。" + +#: ../../library/gc.rst:325 +msgid "" +"The debugging flags necessary for the collector to print information about a" +" leaking program (equal to ``DEBUG_COLLECTABLE | DEBUG_UNCOLLECTABLE | " +"DEBUG_SAVEALL``)." +msgstr "" +"调试内存泄漏的程序时,使回收器打印信息的调试标识位。(等价于 ``DEBUG_COLLECTABLE | DEBUG_UNCOLLECTABLE | " +"DEBUG_SAVEALL`` )。" diff --git a/library/getopt.po b/library/getopt.po new file mode 100644 index 000000000..2066e1519 --- /dev/null +++ b/library/getopt.po @@ -0,0 +1,177 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) 2001-2022, Python Software Foundation +# This file is distributed under the same license as the Python package. +# FIRST AUTHOR , YEAR. +# +# Translators: +# Freesand Leo , 2020 +# +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: Python 3.9\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2022-11-04 14:34+0000\n" +"PO-Revision-Date: 2017-02-16 23:12+0000\n" +"Last-Translator: Freesand Leo , 2020\n" +"Language-Team: Chinese (China) (https://www.transifex.com/python-doc/teams/5390/zh_CN/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: zh_CN\n" +"Plural-Forms: nplurals=1; plural=0;\n" + +#: ../../library/getopt.rst:2 +msgid ":mod:`getopt` --- C-style parser for command line options" +msgstr ":mod:`getopt` --- C 风格的命令行选项解析器" + +#: ../../library/getopt.rst:8 +msgid "**Source code:** :source:`Lib/getopt.py`" +msgstr "**源代码:** :source:`Lib/getopt.py`" + +#: ../../library/getopt.rst:12 +msgid "" +"The :mod:`getopt` module is a parser for command line options whose API is " +"designed to be familiar to users of the C :c:func:`getopt` function. Users " +"who are unfamiliar with the C :c:func:`getopt` function or who would like to" +" write less code and get better help and error messages should consider " +"using the :mod:`argparse` module instead." +msgstr "" +":mod:`getopt` 模块是一个命令行选项解析器,其 API 设计会让 C :c:func:`getopt` 函数的用户感到熟悉。 不熟悉 C " +":c:func:`getopt` 函数或者希望写更少代码并获得更完善帮助和错误消息的用户应当考虑改用 :mod:`argparse` 模块。" + +#: ../../library/getopt.rst:20 +msgid "" +"This module helps scripts to parse the command line arguments in " +"``sys.argv``. It supports the same conventions as the Unix :c:func:`getopt` " +"function (including the special meanings of arguments of the form '``-``' " +"and '``--``'). Long options similar to those supported by GNU software may " +"be used as well via an optional third argument." +msgstr "" +"此模块可协助脚本解析 ``sys.argv`` 中的命令行参数。 它支持与 Unix :c:func:`getopt` 函数相同的惯例(包括形式如 " +"'``-``' 与 '``--``' 的参数的特殊含义)。 也能通过可选的第三个参数来使用与 GNU 软件所支持形式相类似的长选项。" + +#: ../../library/getopt.rst:26 +msgid "This module provides two functions and an exception:" +msgstr "此模块提供了两个函数和一个异常:" + +#: ../../library/getopt.rst:32 +msgid "" +"Parses command line options and parameter list. *args* is the argument list" +" to be parsed, without the leading reference to the running program. " +"Typically, this means ``sys.argv[1:]``. *shortopts* is the string of option " +"letters that the script wants to recognize, with options that require an " +"argument followed by a colon (``':'``; i.e., the same format that Unix " +":c:func:`getopt` uses)." +msgstr "" +"解析命令行选项与形参列表。 *args* 为要解析的参数列表,不包含最开头的对正在运行的程序的引用。 通常这意味着 ``sys.argv[1:]``。 " +"*shortopts* 为脚本所要识别的字母选项,包含要求后缀一个冒号 (``':'``;即与 Unix :c:func:`getopt` " +"所用的格式相同) 的选项。" + +#: ../../library/getopt.rst:40 +msgid "" +"Unlike GNU :c:func:`getopt`, after a non-option argument, all further " +"arguments are considered also non-options. This is similar to the way non-" +"GNU Unix systems work." +msgstr "" +"与 GNU :c:func:`getopt` 不同,在非选项参数之后,所有后续参数都会被视为非选项。 这类似于非 GNU Unix 系统的运作方式。" + +#: ../../library/getopt.rst:44 +msgid "" +"*longopts*, if specified, must be a list of strings with the names of the " +"long options which should be supported. The leading ``'--'`` characters " +"should not be included in the option name. Long options which require an " +"argument should be followed by an equal sign (``'='``). Optional arguments " +"are not supported. To accept only long options, *shortopts* should be an " +"empty string. Long options on the command line can be recognized so long as" +" they provide a prefix of the option name that matches exactly one of the " +"accepted options. For example, if *longopts* is ``['foo', 'frob']``, the " +"option ``--fo`` will match as ``--foo``, but ``--f`` will not match " +"uniquely, so :exc:`GetoptError` will be raised." +msgstr "" +"如果指定了 *longopts*,则必须为一个由应当被支持的长选项名称组成的列表。 开头的 ``'--'`` 字符不应被包括在选项名称中。 " +"要求参数的长选项后应当带一个等号 (``'='``)。 可选参数不被支持。 如果想仅接受长选项,则 *shortopts* 应为一个空字符串。 " +"命令行中的长选项只要提供了恰好能匹配可接受选项之一的选项名称前缀即可被识别。 举例来说,如果 *longopts* 为 ``['foo', " +"'frob']``,则选项 ``--fo`` 将匹配为 ``--foo``,但 ``--f`` 将不能得到唯一匹配,因此将引发 " +":exc:`GetoptError`。" + +#: ../../library/getopt.rst:55 +msgid "" +"The return value consists of two elements: the first is a list of ``(option," +" value)`` pairs; the second is the list of program arguments left after the " +"option list was stripped (this is a trailing slice of *args*). Each option-" +"and-value pair returned has the option as its first element, prefixed with a" +" hyphen for short options (e.g., ``'-x'``) or two hyphens for long options " +"(e.g., ``'--long-option'``), and the option argument as its second element, " +"or an empty string if the option has no argument. The options occur in the " +"list in the same order in which they were found, thus allowing multiple " +"occurrences. Long and short options may be mixed." +msgstr "" +"返回值由两个元素组成:第一个是 ``(option, value)`` 对的列表;第二个是在去除该选项列表后余下的程序参数列表(这也就是 *args* " +"的尾部切片)。每个被返回的选项与值对的第一个元素是选项,短选项前缀一个连字符 (例如 ``'-x'``),长选项则前缀两个连字符 (例如 ``'--" +"long-option'``),第二个元素是选项参数,如果选项不带参数则为空字符串。 列表中选项的排列顺序与它们被解析的顺序相同,因此允许多次出现。 " +"长选项与短选项可以混用。" + +#: ../../library/getopt.rst:68 +msgid "" +"This function works like :func:`getopt`, except that GNU style scanning mode" +" is used by default. This means that option and non-option arguments may be " +"intermixed. The :func:`getopt` function stops processing options as soon as " +"a non-option argument is encountered." +msgstr "" +"此函数与 :func:`getopt` 类似,区别在于它默认使用 GNU 风格的扫描模式。 这意味着选项和非选项参数可能会混在一起。 " +":func:`getopt` 函数将在遇到非选项参数时立即停止处理选项。" + +#: ../../library/getopt.rst:73 +msgid "" +"If the first character of the option string is ``'+'``, or if the " +"environment variable :envvar:`POSIXLY_CORRECT` is set, then option " +"processing stops as soon as a non-option argument is encountered." +msgstr "" +"如果选项字符串的第一个字符为 ``'+'``,或者如果设置了环境变量 " +":envvar:`POSIXLY_CORRECT`,则选项处理会在遇到非选项参数时立即停止。" + +#: ../../library/getopt.rst:80 +msgid "" +"This is raised when an unrecognized option is found in the argument list or " +"when an option requiring an argument is given none. The argument to the " +"exception is a string indicating the cause of the error. For long options, " +"an argument given to an option which does not require one will also cause " +"this exception to be raised. The attributes :attr:`msg` and :attr:`opt` " +"give the error message and related option; if there is no specific option to" +" which the exception relates, :attr:`opt` is an empty string." +msgstr "" +"This is raised当参数列表中出现不可识别的选项或者当一个需要参数的选项未带参数时将引发此异常。 此异常的参数是一个指明错误原因的字符串。 " +"对于长选项,将一个参数传给不需要参数的选项也将导致引发此异常。 :attr:`msg` 和 :attr:`opt` " +"属性会给出错误消息和关联的选项;如果没有关联到异常的特定选项,则 :attr:`opt` 将为空字符串。" + +#: ../../library/getopt.rst:91 +msgid "Alias for :exc:`GetoptError`; for backward compatibility." +msgstr ":exc:`GetoptError` 的别名;用于向后兼容。" + +#: ../../library/getopt.rst:93 +msgid "An example using only Unix style options:" +msgstr "一个仅使用 Unix 风格选项的例子:" + +#: ../../library/getopt.rst:105 +msgid "Using long option names is equally easy:" +msgstr "使用长选项名也同样容易:" + +#: ../../library/getopt.rst:118 +msgid "In a script, typical usage is something like this::" +msgstr "在脚本中,典型的用法类似这样::" + +#: ../../library/getopt.rst:147 +msgid "" +"Note that an equivalent command line interface could be produced with less " +"code and more informative help and error messages by using the " +":mod:`argparse` module::" +msgstr "请注意通过 :mod:`argparse` 模块可以使用更少的代码并附带更详细的帮助与错误消息生成等价的命令行接口::" + +#: ../../library/getopt.rst:162 +msgid "Module :mod:`argparse`" +msgstr "模块 :mod:`argparse`" + +#: ../../library/getopt.rst:163 +msgid "Alternative command line option and argument parsing library." +msgstr "替代的命令行选项和参数解析库。" diff --git a/library/getpass.po b/library/getpass.po new file mode 100644 index 000000000..0a3bab0d3 --- /dev/null +++ b/library/getpass.po @@ -0,0 +1,92 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) 2001-2024, Python Software Foundation +# This file is distributed under the same license as the Python package. +# FIRST AUTHOR , YEAR. +# +# Translators: +# Konge , 2019 +# Freesand Leo , 2019 +# Hissy , 2020 +# Rafael Fontenelle , 2024 +# +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: Python 3.9\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2024-02-16 21:12+0000\n" +"PO-Revision-Date: 2017-02-16 23:12+0000\n" +"Last-Translator: Rafael Fontenelle , 2024\n" +"Language-Team: Chinese (China) (https://app.transifex.com/python-doc/teams/5390/zh_CN/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: zh_CN\n" +"Plural-Forms: nplurals=1; plural=0;\n" + +#: ../../library/getpass.rst:2 +msgid ":mod:`getpass` --- Portable password input" +msgstr ":mod:`getpass` --- 便携式密码输入工具" + +#: ../../library/getpass.rst:11 +msgid "**Source code:** :source:`Lib/getpass.py`" +msgstr "**源代码:** :source:`Lib/getpass.py`" + +#: ../../library/getpass.rst:15 +msgid "The :mod:`getpass` module provides two functions:" +msgstr ":mod:`getpass` 模块提供了两个函数:" + +#: ../../library/getpass.rst:20 +msgid "" +"Prompt the user for a password without echoing. The user is prompted using " +"the string *prompt*, which defaults to ``'Password: '``. On Unix, the " +"prompt is written to the file-like object *stream* using the replace error " +"handler if needed. *stream* defaults to the controlling terminal " +"(:file:`/dev/tty`) or if that is unavailable to ``sys.stderr`` (this " +"argument is ignored on Windows)." +msgstr "" +"提示用户输入一个密码且不会回显。 用户会看到字符串 *prompt* 作为提示,其默认值为 ``'Password: '``。 在 Unix " +"上,如有必要提示会使用替换错误句柄写入到文件型对象 *stream*。 *stream* 默认指向控制终端 " +"(:file:`/dev/tty`),如果不可用则指向 ``sys.stderr`` (此参数在 Windows 上会被忽略)。" + +#: ../../library/getpass.rst:27 +msgid "" +"If echo free input is unavailable getpass() falls back to printing a warning" +" message to *stream* and reading from ``sys.stdin`` and issuing a " +":exc:`GetPassWarning`." +msgstr "" +"如果回显自由输入不可用则 getpass() 将回退为打印一条警告消息到 *stream* 并且从 ``sys.stdin`` 读取同时发出 " +":exc:`GetPassWarning`。" + +#: ../../library/getpass.rst:32 +msgid "" +"If you call getpass from within IDLE, the input may be done in the terminal " +"you launched IDLE from rather than the idle window itself." +msgstr "如果你从 IDLE 内部调用 getpass,输入可能是在你启动 IDLE 的终端中而非在 IDLE 窗口本身中完成。" + +#: ../../library/getpass.rst:37 +msgid "" +"A :exc:`UserWarning` subclass issued when password input may be echoed." +msgstr "一个当密码输入可能被回显时发出的 :exc:`UserWarning` 子类。" + +#: ../../library/getpass.rst:42 +msgid "Return the \"login name\" of the user." +msgstr "返回用户的“登录名称”。" + +#: ../../library/getpass.rst:44 +msgid "" +"This function checks the environment variables :envvar:`LOGNAME`, " +":envvar:`USER`, :envvar:`LNAME` and :envvar:`USERNAME`, in order, and " +"returns the value of the first one which is set to a non-empty string. If " +"none are set, the login name from the password database is returned on " +"systems which support the :mod:`pwd` module, otherwise, an exception is " +"raised." +msgstr "" +"此函数会按顺序检查环境变量 :envvar:`LOGNAME`, :envvar:`USER`, :envvar:`LNAME` 和 " +":envvar:`USERNAME`,并返回其中第一个被设置为非空字符串的值。 如果均未设置,则在支持 :mod:`pwd` " +"模块的系统上将返回来自密码数据库的登录名,否则将引发一个异常。" + +#: ../../library/getpass.rst:51 +msgid "" +"In general, this function should be preferred over :func:`os.getlogin()`." +msgstr "通常情况下,此函数应优先于 :func:`os.getlogin()` 使用。" diff --git a/library/gettext.po b/library/gettext.po new file mode 100644 index 000000000..6076bb742 --- /dev/null +++ b/library/gettext.po @@ -0,0 +1,975 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) 2001-2022, Python Software Foundation +# This file is distributed under the same license as the Python package. +# FIRST AUTHOR , YEAR. +# +# Translators: +# Jerry Chen , 2017 +# 钢 彭 , 2019 +# ppcfish , 2019 +# Naisen Xu <723648649@qq.com>, 2020 +# Kevin Deng , 2020 +# Freesand Leo , 2020 +# Arisaka97 , 2020 +# +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: Python 3.9\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2022-11-04 14:34+0000\n" +"PO-Revision-Date: 2017-02-16 23:12+0000\n" +"Last-Translator: Arisaka97 , 2020\n" +"Language-Team: Chinese (China) (https://www.transifex.com/python-doc/teams/5390/zh_CN/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: zh_CN\n" +"Plural-Forms: nplurals=1; plural=0;\n" + +#: ../../library/gettext.rst:2 +msgid ":mod:`gettext` --- Multilingual internationalization services" +msgstr ":mod:`gettext` --- 多语种国际化服务" + +#: ../../library/gettext.rst:10 +msgid "**Source code:** :source:`Lib/gettext.py`" +msgstr "**源代码:** :source:`Lib/gettext.py`" + +#: ../../library/gettext.rst:14 +msgid "" +"The :mod:`gettext` module provides internationalization (I18N) and " +"localization (L10N) services for your Python modules and applications. It " +"supports both the GNU :program:`gettext` message catalog API and a higher " +"level, class-based API that may be more appropriate for Python files. The " +"interface described below allows you to write your module and application " +"messages in one natural language, and provide a catalog of translated " +"messages for running under different natural languages." +msgstr "" +":mod:`gettext` 模块为 Python 模块和应用程序提供国际化 (Internationalization, I18N) 和本地化 " +"(Localization, L10N) 服务。它同时支持 GNU :program:`gettext` 消息编目 API 和更高级的、基于类的 " +"API,后者可能更适合于 Python " +"文件。下方描述的接口允许用户使用一种自然语言编写模块和应用程序消息,并提供翻译后的消息编目,以便在不同的自然语言下运行。" + +#: ../../library/gettext.rst:22 +msgid "" +"Some hints on localizing your Python modules and applications are also " +"given." +msgstr "同时还给出一些本地化 Python 模块及应用程序的小技巧。" + +#: ../../library/gettext.rst:26 +msgid "GNU :program:`gettext` API" +msgstr "GNU :program:`gettext` API" + +#: ../../library/gettext.rst:28 +msgid "" +"The :mod:`gettext` module defines the following API, which is very similar " +"to the GNU :program:`gettext` API. If you use this API you will affect the " +"translation of your entire application globally. Often this is what you " +"want if your application is monolingual, with the choice of language " +"dependent on the locale of your user. If you are localizing a Python " +"module, or if your application needs to switch languages on the fly, you " +"probably want to use the class-based API instead." +msgstr "" +"模块 :mod:`gettext` 定义了下列 API,这与 :program:`gettext` API 类似。如果你使用该 " +"API,将会对整个应用程序产生全局的影响。如果你的应用程序支持多语种,而语言选择取决于用户的语言环境设置,这通常正是你所想要的。而如果你正在本地化某个 " +"Python 模块,或者你的应用程序需要在运行时切换语言,相反你或许想用基于类的API。" + +#: ../../library/gettext.rst:39 +msgid "" +"Bind the *domain* to the locale directory *localedir*. More concretely, " +":mod:`gettext` will look for binary :file:`.mo` files for the given domain " +"using the path (on Unix): " +":file:`{localedir}/{language}/LC_MESSAGES/{domain}.mo`, where *language* is " +"searched for in the environment variables :envvar:`LANGUAGE`, " +":envvar:`LC_ALL`, :envvar:`LC_MESSAGES`, and :envvar:`LANG` respectively." +msgstr "" +"将 *domain* 绑定到本地目录 *localedir*。 更具体地来说,模块 :mod:`gettext` 将使用路径 (在 Unix 系统中):" +" :file:`{localedir}/{language}/LC_MESSAGES/{domain}.mo` 查找二进制 :file:`.mo` " +"文件,此处对应地查找 *language* 的位置是环境变量 :envvar:`LANGUAGE`, :envvar:`LC_ALL`, " +":envvar:`LC_MESSAGES` 和 :envvar:`LANG` 中。" + +#: ../../library/gettext.rst:45 +msgid "" +"If *localedir* is omitted or ``None``, then the current binding for *domain*" +" is returned. [#]_" +msgstr "如果遗漏了 *localedir* 或者设置为 ``None``,那么将返回当前 *domain* 所绑定的值 [#]_" + +#: ../../library/gettext.rst:51 +msgid "" +"Bind the *domain* to *codeset*, changing the encoding of byte strings " +"returned by the :func:`lgettext`, :func:`ldgettext`, :func:`lngettext` and " +":func:`ldngettext` functions. If *codeset* is omitted, then the current " +"binding is returned." +msgstr "" +"将 *domain* 绑定到 *codeset*,修改 :func:`lgettext`, :func:`ldgettext`, " +":func:`lngettext` 和 :func:`ldngettext` 函数返回的字节串的字符编码。如果省略了 " +"*codeset*,则返回当前绑定的编码集。" + +#: ../../library/gettext.rst:61 +msgid "" +"Change or query the current global domain. If *domain* is ``None``, then " +"the current global domain is returned, otherwise the global domain is set to" +" *domain*, which is returned." +msgstr "" +"修改或查询当前的全局域。如果 *domain* 为 ``None``,则返回当前的全局域,不为 ``None`` 则将全局域设置为 " +"*domain*,并返回它。" + +#: ../../library/gettext.rst:69 +msgid "" +"Return the localized translation of *message*, based on the current global " +"domain, language, and locale directory. This function is usually aliased as" +" :func:`_` in the local namespace (see examples below)." +msgstr "" +"返回 *message* 的本地化翻译,依据包括当前的全局域、语言和语言环境目录。本函数在本地命名空间中通常有别名 :func:`_` " +"(参考下面的示例)。" + +#: ../../library/gettext.rst:76 +msgid "" +"Like :func:`.gettext`, but look the message up in the specified *domain*." +msgstr "与 :func:`.gettext` 类似,但在指定的 *domain* 中查找 message。" + +#: ../../library/gettext.rst:81 +msgid "" +"Like :func:`.gettext`, but consider plural forms. If a translation is found," +" apply the plural formula to *n*, and return the resulting message (some " +"languages have more than two plural forms). If no translation is found, " +"return *singular* if *n* is 1; return *plural* otherwise." +msgstr "" +"与 :func:`.gettext` 类似,但考虑了复数形式。如果找到了翻译,则将 *n* " +"代入复数公式,然后返回得出的消息(某些语言具有两种以上的复数形式)。如果未找到翻译,则 *n* 为 1 时返回 *singular*,为其他数时返回 " +"*plural*。" + +#: ../../library/gettext.rst:86 +msgid "" +"The Plural formula is taken from the catalog header. It is a C or Python " +"expression that has a free variable *n*; the expression evaluates to the " +"index of the plural in the catalog. See `the GNU gettext documentation " +"`__ for the " +"precise syntax to be used in :file:`.po` files and the formulas for a " +"variety of languages." +msgstr "" +"复数公式取自编目头文件。它是 C 或 Python 表达式,有一个自变量 *n*,该表达式计算的是所需复数形式在编目中的索引号。关于在 " +":file:`.po` 文件中使用的确切语法和各种语言的公式,请参阅 `GNU gettext 文档 " +"`__ 。" + +#: ../../library/gettext.rst:96 +msgid "" +"Like :func:`ngettext`, but look the message up in the specified *domain*." +msgstr "与 :func:`ngettext` 类似,但在指定的 *domain* 中查找 message。" + +#: ../../library/gettext.rst:104 +msgid "" +"Similar to the corresponding functions without the ``p`` in the prefix (that" +" is, :func:`gettext`, :func:`dgettext`, :func:`ngettext`, " +":func:`dngettext`), but the translation is restricted to the given message " +"*context*." +msgstr "" +"与前缀中没有 ``p`` 的相应函数类似(即 :func:`gettext`, :func:`dgettext`, :func:`ngettext`, " +":func:`dngettext` ),但是仅翻译给定的 message *context*。" + +#: ../../library/gettext.rst:116 +msgid "" +"Equivalent to the corresponding functions without the ``l`` prefix " +"(:func:`.gettext`, :func:`dgettext`, :func:`ngettext` and " +":func:`dngettext`), but the translation is returned as a byte string encoded" +" in the preferred system encoding if no other encoding was explicitly set " +"with :func:`bind_textdomain_codeset`." +msgstr "" +"与前缀中没有 ``l`` 的相应函数等效( :func:`.gettext`, :func:`dgettext`, :func:`ngettext` 和" +" :func:`dngettext` ),但是如果没有用 :func:`bind_textdomain_codeset` " +"显式设置其他编码,则返回的翻译将以首选系统编码来编码字节串。" + +#: ../../library/gettext.rst:124 +msgid "" +"These functions should be avoided in Python 3, because they return encoded " +"bytes. It's much better to use alternatives which return Unicode strings " +"instead, since most Python applications will want to manipulate human " +"readable text as strings instead of bytes. Further, it's possible that you " +"may get unexpected Unicode-related exceptions if there are encoding problems" +" with the translated strings." +msgstr "" +"在 Python 3 中应避免使用这些函数,因为它们返回的是编码后的字节串。最好使用返回 Unicode 字符串的其他方法,因为大多数 Python " +"应用程序都希望将人类可读的文本作为字符串而不是字节来处理。此外,如果翻译后的字符串存在编码问题,则可能会意外出现与 Unicode 相关的异常。" + +#: ../../library/gettext.rst:134 +msgid "" +"Note that GNU :program:`gettext` also defines a :func:`dcgettext` method, " +"but this was deemed not useful and so it is currently unimplemented." +msgstr "" +"注意,GNU :program:`gettext` 还定义了 :func:`dcgettext` 方法,但它被认为不实用,因此目前没有实现它。" + +#: ../../library/gettext.rst:137 +msgid "Here's an example of typical usage for this API::" +msgstr "这是该 API 的典型用法示例::" + +#: ../../library/gettext.rst:148 +msgid "Class-based API" +msgstr "基于类的 API" + +#: ../../library/gettext.rst:150 +msgid "" +"The class-based API of the :mod:`gettext` module gives you more flexibility " +"and greater convenience than the GNU :program:`gettext` API. It is the " +"recommended way of localizing your Python applications and modules. " +":mod:`!gettext` defines a :class:`GNUTranslations` class which implements " +"the parsing of GNU :file:`.mo` format files, and has methods for returning " +"strings. Instances of this class can also install themselves in the built-in" +" namespace as the function :func:`_`." +msgstr "" +"与 GNU :program:`gettext` API 相比,:mod:`gettext` 模块的基于类的 API " +"提供了更多的灵活性和更强的便利性。这是本地化 Python 应用程序和模块的推荐方法。:mod:`!gettext` 定义了一个 " +":class:`GNUTranslations` 类,该类实现了 GNU :file:`.mo` " +"格式文件的解析,并且具有用于返回字符串的方法。本类的实例也可以将自身作为函数 :func:`_` 安装到内建命名空间中。" + +#: ../../library/gettext.rst:160 +msgid "" +"This function implements the standard :file:`.mo` file search algorithm. It" +" takes a *domain*, identical to what :func:`textdomain` takes. Optional " +"*localedir* is as in :func:`bindtextdomain`. Optional *languages* is a list " +"of strings, where each string is a language code." +msgstr "" +"本函数实现了标准的 :file:`.mo` 文件搜索算法。它接受一个 *domain*,它与 :func:`textdomain` " +"接受的域相同。可选参数 *localedir* 与 :func:`bindtextdomain` 中的相同。可选参数 *languages* " +"是多条字符串的列表,其中每条字符串都是一种语言代码。" + +#: ../../library/gettext.rst:165 +msgid "" +"If *localedir* is not given, then the default system locale directory is " +"used. [#]_ If *languages* is not given, then the following environment " +"variables are searched: :envvar:`LANGUAGE`, :envvar:`LC_ALL`, " +":envvar:`LC_MESSAGES`, and :envvar:`LANG`. The first one returning a non-" +"empty value is used for the *languages* variable. The environment variables " +"should contain a colon separated list of languages, which will be split on " +"the colon to produce the expected list of language code strings." +msgstr "" +"如果没有传入 *localedir*,则使用默认的系统语言环境目录。 [#]_ 如果没有传入 " +"*languages*,则搜索以下环境变量::envvar:`LANGUAGE`、:envvar:`LC_ALL`、:envvar:`LC_MESSAGES`" +" 和 :envvar:`LANG`。从这些变量返回的第一个非空值将用作 *languages* " +"变量。环境变量应包含一个语言列表,由冒号分隔,该列表会被按冒号拆分,以产生所需的语言代码字符串列表。" + +#: ../../library/gettext.rst:173 +msgid "" +":func:`find` then expands and normalizes the languages, and then iterates " +"through them, searching for an existing file built of these components:" +msgstr ":func:`find` 将扩展并规范化 language,然后遍历它们,搜索由这些组件构建的现有文件:" + +#: ../../library/gettext.rst:176 +msgid ":file:`{localedir}/{language}/LC_MESSAGES/{domain}.mo`" +msgstr ":file:`{localedir}/{language}/LC_MESSAGES/{domain}.mo`" + +#: ../../library/gettext.rst:178 +msgid "" +"The first such file name that exists is returned by :func:`find`. If no such" +" file is found, then ``None`` is returned. If *all* is given, it returns a " +"list of all file names, in the order in which they appear in the languages " +"list or the environment variables." +msgstr "" +":func:`find` 返回找到类似的第一个文件名。如果找不到这样的文件,则返回 ``None``。如果传入了 " +"*all*,它将返回一个列表,包含所有文件名,并按它们在语言列表或环境变量中出现的顺序排列。" + +#: ../../library/gettext.rst:186 +msgid "" +"Return a :class:`*Translations` instance based on the *domain*, *localedir*," +" and *languages*, which are first passed to :func:`find` to get a list of " +"the associated :file:`.mo` file paths. Instances with identical :file:`.mo`" +" file names are cached. The actual class instantiated is *class_* if " +"provided, otherwise :class:`GNUTranslations`. The class's constructor must " +"take a single :term:`file object` argument. If provided, *codeset* will " +"change the charset used to encode translated strings in the " +":meth:`~NullTranslations.lgettext` and :meth:`~NullTranslations.lngettext` " +"methods." +msgstr "" +"根据 *domain*、*localedir* 和 *languages*,返回 :class:`*Translations` " +"实例,首先应将前述参数传入 :func:`find` 以获取关联的 :file:`.mo` 文件路径的列表。名字与 :file:`.mo` " +"文件名相同的实例将被缓存。如果传入 *class_*,它将是实际被实例化的类,否则实例化 " +":class:`GNUTranslations`。类的构造函数必须只接受一个 :term:`文件对象 ` 参数。如果传入 " +"*codeset*,那么在 :meth:`~NullTranslations.lgettext` 和 " +":meth:`~NullTranslations.lngettext` 方法中,对翻译后的字符串进行编码的字符集将被改变。" + +#: ../../library/gettext.rst:196 +msgid "" +"If multiple files are found, later files are used as fallbacks for earlier " +"ones. To allow setting the fallback, :func:`copy.copy` is used to clone each" +" translation object from the cache; the actual instance data is still shared" +" with the cache." +msgstr "" +"如果找到多个文件,后找到的文件将用作先前文件的替补。为了设置替补,将使用 :func:`copy.copy` 从缓存中克隆每个 translation " +"对象。实际的实例数据仍在缓存中共享。" + +#: ../../library/gettext.rst:201 +msgid "" +"If no :file:`.mo` file is found, this function raises :exc:`OSError` if " +"*fallback* is false (which is the default), and returns a " +":class:`NullTranslations` instance if *fallback* is true." +msgstr "" +"如果 :file:`.mo` 文件未找到,且 *fallback* 为 false(默认值),则本函数引发 :exc:`OSError` 异常,如果 " +"*fallback* 为 true,则返回一个 :class:`NullTranslations` 实例。" + +#: ../../library/gettext.rst:205 +msgid ":exc:`IOError` used to be raised instead of :exc:`OSError`." +msgstr ":exc:`IOError` 代替 :exc:`OSError` 被引发。" + +#: ../../library/gettext.rst:209 ../../library/gettext.rst:232 +msgid "The *codeset* parameter." +msgstr "*codeset* 参数。" + +#: ../../library/gettext.rst:214 +msgid "" +"This installs the function :func:`_` in Python's builtins namespace, based " +"on *domain*, *localedir*, and *codeset* which are passed to the function " +":func:`translation`." +msgstr "" +"根据传入 :func:`translation` 函数的 *domain*、*localedir* 和 *codeset*,在 Python " +"内建命名空间中安装 :func:`_` 函数。" + +#: ../../library/gettext.rst:218 +msgid "" +"For the *names* parameter, please see the description of the translation " +"object's :meth:`~NullTranslations.install` method." +msgstr "" +"*names* 参数的信息请参阅 translation 对象的 :meth:`~NullTranslations.install` 方法的描述。" + +#: ../../library/gettext.rst:221 +msgid "" +"As seen below, you usually mark the strings in your application that are " +"candidates for translation, by wrapping them in a call to the :func:`_` " +"function, like this::" +msgstr "如下所示,通常将字符串包括在 :func:`_` 函数的调用中,以标记应用程序中待翻译的字符串,就像这样::" + +#: ../../library/gettext.rst:227 +msgid "" +"For convenience, you want the :func:`_` function to be installed in Python's" +" builtins namespace, so it is easily accessible in all modules of your " +"application." +msgstr "为了方便,一般将 :func:`_` 函数安装在 Python 内建命名空间中,以便在应用程序的所有模块中轻松访问它。" + +#: ../../library/gettext.rst:236 +msgid "The :class:`NullTranslations` class" +msgstr ":class:`NullTranslations` 类" + +#: ../../library/gettext.rst:238 +msgid "" +"Translation classes are what actually implement the translation of original " +"source file message strings to translated message strings. The base class " +"used by all translation classes is :class:`NullTranslations`; this provides " +"the basic interface you can use to write your own specialized translation " +"classes. Here are the methods of :class:`!NullTranslations`:" +msgstr "" +"translation 类实际实现的是,将原始源文件消息字符串转换为已翻译的消息字符串。所有 translation 类使用的基类为 " +":class:`NullTranslations`,它提供了基本的接口,可用于编写自己定制的 translation 类。以下是 " +":class:`!NullTranslations` 的方法:" + +#: ../../library/gettext.rst:247 +msgid "" +"Takes an optional :term:`file object` *fp*, which is ignored by the base " +"class. Initializes \"protected\" instance variables *_info* and *_charset* " +"which are set by derived classes, as well as *_fallback*, which is set " +"through :meth:`add_fallback`. It then calls ``self._parse(fp)`` if *fp* is " +"not ``None``." +msgstr "" +"接受一个可选参数 :term:`文件对象 ` *fp*,该参数会被基类忽略。初始化由派生类设置的 \"protected\" " +"(受保护的)实例变量 *_info* 和 *_charset*,与 *_fallback* 类似,但它是通过 :meth:`add_fallback` " +"来设置的。如果 *fp* 不为 ``None``,就会调用 ``self._parse(fp)``。" + +#: ../../library/gettext.rst:255 +msgid "" +"No-op in the base class, this method takes file object *fp*, and reads the " +"data from the file, initializing its message catalog. If you have an " +"unsupported message catalog file format, you should override this method to " +"parse your format." +msgstr "" +"在基类中没有操作,本方法接受文件对象 " +"*fp*,从该文件读取数据,用来初始化消息编目。如果你手头的消息编目文件的格式不受支持,则应重写本方法来解析你的格式。" + +#: ../../library/gettext.rst:263 +msgid "" +"Add *fallback* as the fallback object for the current translation object. A " +"translation object should consult the fallback if it cannot provide a " +"translation for a given message." +msgstr "" +"添加 *fallback* 为当前 translation 对象的替补对象。如果 translation 对象无法为指定消息提供翻译,则应向替补查询。" + +#: ../../library/gettext.rst:270 +msgid "" +"If a fallback has been set, forward :meth:`!gettext` to the fallback. " +"Otherwise, return *message*. Overridden in derived classes." +msgstr "如果设置了替补,则转发 :meth:`!gettext` 给替补。否则返回 *message*。在派生类中被重写。" + +#: ../../library/gettext.rst:276 +msgid "" +"If a fallback has been set, forward :meth:`!ngettext` to the fallback. " +"Otherwise, return *singular* if *n* is 1; return *plural* otherwise. " +"Overridden in derived classes." +msgstr "" +"如果设置了替补,则转发 :meth:`!ngettext` 给替补。否则,*n* 为 1 时返回 *singular*,为其他时返回 " +"*plural*。在派生类中被重写。" + +#: ../../library/gettext.rst:283 +msgid "" +"If a fallback has been set, forward :meth:`pgettext` to the fallback. " +"Otherwise, return the translated message. Overridden in derived classes." +msgstr "如果设置了替补,则转发 :meth:`pgettext` 给替补。否则返回已翻译的消息。在派生类中被重写。" + +#: ../../library/gettext.rst:291 +msgid "" +"If a fallback has been set, forward :meth:`npgettext` to the fallback. " +"Otherwise, return the translated message. Overridden in derived classes." +msgstr "如果设置了替补,则转发 :meth:`npgettext` 给替补。否则返回已翻译的消息。在派生类中被重写。" + +#: ../../library/gettext.rst:300 +msgid "" +"Equivalent to :meth:`.gettext` and :meth:`.ngettext`, but the translation is" +" returned as a byte string encoded in the preferred system encoding if no " +"encoding was explicitly set with :meth:`set_output_charset`. Overridden in " +"derived classes." +msgstr "" +"与 :meth:`.gettext` 和 :meth:`.ngettext` 等效,但是如果没有用 :meth:`set_output_charset`" +" 显式设置编码,则返回的翻译将以首选系统编码来编码字节串。在派生类中被重写。" + +#: ../../library/gettext.rst:307 ../../library/gettext.rst:463 +msgid "" +"These methods should be avoided in Python 3. See the warning for the " +":func:`lgettext` function." +msgstr "应避免在 Python 3 中使用这些方法。请参阅 :func:`lgettext` 函数的警告。" + +#: ../../library/gettext.rst:315 +msgid "" +"Return the \"protected\" :attr:`_info` variable, a dictionary containing the" +" metadata found in the message catalog file." +msgstr "返回 \"protected\"(受保护的) :attr:`_info` 变量,它是一个字典,包含在消息编目文件中找到的元数据。" + +#: ../../library/gettext.rst:321 +msgid "Return the encoding of the message catalog file." +msgstr "返回消息编目文件的编码。" + +#: ../../library/gettext.rst:326 +msgid "" +"Return the encoding used to return translated messages in :meth:`.lgettext` " +"and :meth:`.lngettext`." +msgstr "返回由 :meth:`.lgettext` 和 :meth:`.lngettext` 翻译出的消息的编码。" + +#: ../../library/gettext.rst:334 +msgid "Change the encoding used to return translated messages." +msgstr "更改翻译出的消息的编码。" + +#: ../../library/gettext.rst:341 +msgid "" +"This method installs :meth:`.gettext` into the built-in namespace, binding " +"it to ``_``." +msgstr "本方法将 :meth:`.gettext` 安装至内建命名空间,并绑定为 ``_``。" + +#: ../../library/gettext.rst:344 +msgid "" +"If the *names* parameter is given, it must be a sequence containing the " +"names of functions you want to install in the builtins namespace in addition" +" to :func:`_`. Supported names are ``'gettext'``, ``'ngettext'``, " +"``'pgettext'``, ``'npgettext'``, ``'lgettext'``, and ``'lngettext'``." +msgstr "" +"如果传入 *names* 参数,该参数必须是一个序列,包含除 :func:`_` 外其他要安装在内建命名空间中的函数的名称。支持的名称有 " +"``'gettext'``, ``'ngettext'``, ``'pgettext'``, ``'npgettext'``, " +"``'lgettext'`` 和 ``'lngettext'``。" + +#: ../../library/gettext.rst:349 +msgid "" +"Note that this is only one way, albeit the most convenient way, to make the " +":func:`_` function available to your application. Because it affects the " +"entire application globally, and specifically the built-in namespace, " +"localized modules should never install :func:`_`. Instead, they should use " +"this code to make :func:`_` available to their module::" +msgstr "" +"注意,这仅仅是使 :func:`_` " +"函数在应用程序中生效的一种方法,尽管也是最方便的方法。由于它会影响整个应用程序全局,特别是内建命名空间,因此已经本地化的模块不应该安装 " +":func:`_`,而是应该用下列代码使 :func:`_` 在各自模块中生效::" + +#: ../../library/gettext.rst:359 +msgid "" +"This puts :func:`_` only in the module's global namespace and so only " +"affects calls within this module." +msgstr "这只将 :func:`_` 放在其模块的全局命名空间中,所以只影响其模块内的调用。" + +#: ../../library/gettext.rst:362 +msgid "Added ``'pgettext'`` and ``'npgettext'``." +msgstr "添加了 ``'pgettext'`` 和 ``'npgettext'``。" + +#: ../../library/gettext.rst:367 +msgid "The :class:`GNUTranslations` class" +msgstr ":class:`GNUTranslations` 类" + +#: ../../library/gettext.rst:369 +msgid "" +"The :mod:`gettext` module provides one additional class derived from " +":class:`NullTranslations`: :class:`GNUTranslations`. This class overrides " +":meth:`_parse` to enable reading GNU :program:`gettext` format :file:`.mo` " +"files in both big-endian and little-endian format." +msgstr "" +":mod:`gettext` 模块提供了一个派生自 :class:`NullTranslations` " +"的其他类::class:`GNUTranslations`。该类重写了 :meth:`_parse`,同时能以大端序和小端序格式读取 GNU " +":program:`gettext` 格式的 :file:`.mo` 文件。" + +#: ../../library/gettext.rst:374 +msgid "" +":class:`GNUTranslations` parses optional metadata out of the translation " +"catalog. It is convention with GNU :program:`gettext` to include metadata as" +" the translation for the empty string. This metadata is in :rfc:`822`\\ " +"-style ``key: value`` pairs, and should contain the ``Project-Id-Version`` " +"key. If the key ``Content-Type`` is found, then the ``charset`` property is" +" used to initialize the \"protected\" :attr:`_charset` instance variable, " +"defaulting to ``None`` if not found. If the charset encoding is specified, " +"then all message ids and message strings read from the catalog are converted" +" to Unicode using this encoding, else ASCII is assumed." +msgstr "" +":class:`GNUTranslations` 从翻译编目中解析出可选的元数据。GNU :program:`gettext` " +"约定,将元数据包括在空字符串的翻译中。该元数据采用 :rfc:`822` 样式的 ``key: value`` 键值对,且应该包含 ``Project-" +"Id-Version`` 键。如果找到 ``Content-Type`` 键,那么将用 ``charset`` 属性去初始化 " +"\"protected\"(受保护的) :attr:`_charset` 实例变量,而该变量在未找到键的情况下默认为 " +"``None``。如果指定了字符编码,那么从编目中读取的所有消息 ID 和消息字符串都将使用此编码转换为 Unicode,若未指定编码,则假定编码为 " +"ASCII。" + +#: ../../library/gettext.rst:384 +msgid "" +"Since message ids are read as Unicode strings too, all :meth:`*gettext` " +"methods will assume message ids as Unicode strings, not byte strings." +msgstr "" +"由于消息 ID 也是作为 Unicode 字符串读取的,因此所有 :meth:`*gettext` 方法都假定消息 ID 为 Unicode " +"字符串,而不是字节串。" + +#: ../../library/gettext.rst:387 +msgid "" +"The entire set of key/value pairs are placed into a dictionary and set as " +"the \"protected\" :attr:`_info` instance variable." +msgstr "整个键/值对集合将被放入一个字典,并设置为 \"protected\"(受保护的) :attr:`_info` 实例变量。" + +#: ../../library/gettext.rst:390 +msgid "" +"If the :file:`.mo` file's magic number is invalid, the major version number " +"is unexpected, or if other problems occur while reading the file, " +"instantiating a :class:`GNUTranslations` class can raise :exc:`OSError`." +msgstr "" +"如果 :file:`.mo` 文件的魔法值 (magic number) 无效,或遇到意外的主版本号,或在读取文件时发生其他问题,则实例化 " +":class:`GNUTranslations` 类会引发 :exc:`OSError`。" + +#: ../../library/gettext.rst:396 +msgid "" +"The following methods are overridden from the base class implementation:" +msgstr "下列方法是根据基类实现重写的:" + +#: ../../library/gettext.rst:400 +msgid "" +"Look up the *message* id in the catalog and return the corresponding message" +" string, as a Unicode string. If there is no entry in the catalog for the " +"*message* id, and a fallback has been set, the look up is forwarded to the " +"fallback's :meth:`~NullTranslations.gettext` method. Otherwise, the " +"*message* id is returned." +msgstr "" +"在编目中查找 *message* ID,并以 Unicode 字符串形式返回相应的消息字符串。如果在编目中没有 *message* ID " +"条目,且配置了替补,则查找请求将被转发到替补的 :meth:`~NullTranslations.gettext` 方法。否则,返回 *message*" +" ID。" + +#: ../../library/gettext.rst:409 +msgid "" +"Do a plural-forms lookup of a message id. *singular* is used as the message" +" id for purposes of lookup in the catalog, while *n* is used to determine " +"which plural form to use. The returned message string is a Unicode string." +msgstr "" +"查找消息 ID 的复数形式。*singular* 用作消息 ID,用于在编目中查找,同时 *n* 用于确定使用哪种复数形式。返回的消息字符串是 " +"Unicode 字符串。" + +#: ../../library/gettext.rst:413 +msgid "" +"If the message id is not found in the catalog, and a fallback is specified, " +"the request is forwarded to the fallback's " +":meth:`~NullTranslations.ngettext` method. Otherwise, when *n* is 1 " +"*singular* is returned, and *plural* is returned in all other cases." +msgstr "" +"如果在编目中没有找到消息 ID,且配置了替补,则查找请求将被转发到替补的 :meth:`~NullTranslations.ngettext` " +"方法。否则,当 *n* 为 1 时返回 *singular*,其他情况返回 *plural*。" + +#: ../../library/gettext.rst:418 +msgid "Here is an example::" +msgstr "例如:" + +#: ../../library/gettext.rst:430 +msgid "" +"Look up the *context* and *message* id in the catalog and return the " +"corresponding message string, as a Unicode string. If there is no entry in " +"the catalog for the *message* id and *context*, and a fallback has been set," +" the look up is forwarded to the fallback's :meth:`pgettext` method. " +"Otherwise, the *message* id is returned." +msgstr "" +"在编目中查找 *context* 和 *message* ID,并以 Unicode 字符串形式返回相应的消息字符串。如果在编目中没有 " +"*message* ID 和 *context* 条目,且配置了替补,则查找请求将被转发到替补的 :meth:`pgettext` 方法。否则,返回 " +"*message* ID。" + +#: ../../library/gettext.rst:441 +msgid "" +"Do a plural-forms lookup of a message id. *singular* is used as the message" +" id for purposes of lookup in the catalog, while *n* is used to determine " +"which plural form to use." +msgstr "查找消息 ID 的复数形式。*singular* 用作消息 ID,用于在编目中查找,同时 *n* 用于确定使用哪种复数形式。" + +#: ../../library/gettext.rst:445 +msgid "" +"If the message id for *context* is not found in the catalog, and a fallback " +"is specified, the request is forwarded to the fallback's :meth:`npgettext` " +"method. Otherwise, when *n* is 1 *singular* is returned, and *plural* is " +"returned in all other cases." +msgstr "" +"如果在编目中没有找到 *context* 对应的消息 ID,且配置了替补,则查找请求将被转发到替补的 :meth:`npgettext` 方法。否则,当" +" *n* 为 1 时返回 *singular*,其他情况返回 *plural*。" + +#: ../../library/gettext.rst:456 +msgid "" +"Equivalent to :meth:`.gettext` and :meth:`.ngettext`, but the translation is" +" returned as a byte string encoded in the preferred system encoding if no " +"encoding was explicitly set with " +":meth:`~NullTranslations.set_output_charset`." +msgstr "" +"与 :meth:`.gettext` 和 :meth:`.ngettext` 等效,但是如果没有用 " +":meth:`~NullTranslations.set_output_charset` 显式设置编码,则返回的翻译将以首选系统编码来编码字节串。" + +#: ../../library/gettext.rst:470 +msgid "Solaris message catalog support" +msgstr "Solaris 消息编目支持" + +#: ../../library/gettext.rst:472 +msgid "" +"The Solaris operating system defines its own binary :file:`.mo` file format," +" but since no documentation can be found on this format, it is not supported" +" at this time." +msgstr "Solaris 操作系统定义了自己的二进制 :file:`.mo` 文件格式,但由于找不到该格式的文档,因此目前不支持该格式。" + +#: ../../library/gettext.rst:478 +msgid "The Catalog constructor" +msgstr "编目构造器" + +#: ../../library/gettext.rst:482 +msgid "" +"GNOME uses a version of the :mod:`gettext` module by James Henstridge, but " +"this version has a slightly different API. Its documented usage was::" +msgstr "" +"GNOME 用的 :mod:`gettext` 模块是 James Henstridge 写的版本,但该版本的 API 略有不同。它文档中的用法是::" + +#: ../../library/gettext.rst:490 +msgid "" +"For compatibility with this older module, the function :func:`Catalog` is an" +" alias for the :func:`translation` function described above." +msgstr "为了与本模块的旧版本兼容,:func:`Catalog` 函数是上述 :func:`translation` 函数的别名。" + +#: ../../library/gettext.rst:493 +msgid "" +"One difference between this module and Henstridge's: his catalog objects " +"supported access through a mapping API, but this appears to be unused and so" +" is not currently supported." +msgstr "" +"本模块与 Henstridge 的模块有一个区别:他的编目对象支持通过映射 API 进行访问,但是该特性似乎从未使用过,因此目前不支持该特性。" + +#: ../../library/gettext.rst:499 +msgid "Internationalizing your programs and modules" +msgstr "国际化 (I18N) 你的程序和模块" + +#: ../../library/gettext.rst:501 +msgid "" +"Internationalization (I18N) refers to the operation by which a program is " +"made aware of multiple languages. Localization (L10N) refers to the " +"adaptation of your program, once internationalized, to the local language " +"and cultural habits. In order to provide multilingual messages for your " +"Python programs, you need to take the following steps:" +msgstr "" +"国际化 (I18N) 是指使程序可切换多种语言的操作。本地化 (L10N) 是指程序的适配能力,一旦程序被国际化,就能适配当地的语言和文化习惯。为了向 " +"Python 程序提供不同语言的消息,需要执行以下步骤:" + +#: ../../library/gettext.rst:507 +msgid "" +"prepare your program or module by specially marking translatable strings" +msgstr "准备程序或模块,将可翻译的字符串特别标记起来" + +#: ../../library/gettext.rst:509 +msgid "" +"run a suite of tools over your marked files to generate raw messages " +"catalogs" +msgstr "在已标记的文件上运行一套工具,用来生成原始消息编目" + +#: ../../library/gettext.rst:511 +msgid "create language-specific translations of the message catalogs" +msgstr "创建消息编目的不同语言的翻译" + +#: ../../library/gettext.rst:513 +msgid "" +"use the :mod:`gettext` module so that message strings are properly " +"translated" +msgstr "使用 :mod:`gettext` 模块,以便正确翻译消息字符串" + +#: ../../library/gettext.rst:515 +msgid "" +"In order to prepare your code for I18N, you need to look at all the strings " +"in your files. Any string that needs to be translated should be marked by " +"wrapping it in ``_('...')`` --- that is, a call to the function :func:`_`. " +"For example::" +msgstr "" +"为了准备代码以达成 I18N,需要巡视文件中的所有字符串。所有要翻译的字符串都应包括在 ``_('...')`` 内,以此打上标记——也就是调用 " +":func:`_` 函数。例如::" + +#: ../../library/gettext.rst:524 +msgid "" +"In this example, the string ``'writing a log message'`` is marked as a " +"candidate for translation, while the strings ``'mylog.txt'`` and ``'w'`` are" +" not." +msgstr "" +"在这个例子中,字符串 ``'writing a log message'`` 被标记为待翻译,而字符串 ``'mylog.txt'`` 和 " +"``'w'`` 没有被标记。" + +#: ../../library/gettext.rst:527 +msgid "" +"There are a few tools to extract the strings meant for translation. The " +"original GNU :program:`gettext` only supported C or C++ source code but its " +"extended version :program:`xgettext` scans code written in a number of " +"languages, including Python, to find strings marked as translatable. `Babel" +" `__ is a Python internationalization library that " +"includes a :file:`pybabel` script to extract and compile message catalogs. " +"François Pinard's program called :program:`xpot` does a similar job and is " +"available as part of his `po-utils package `__." +msgstr "" +"有一些工具可以将待翻译的字符串提取出来。原版的 GNU :program:`gettext` 仅支持 C 或 C++ 源代码,但其扩展版 " +":program:`xgettext` 可以扫描多种语言的代码(包括 Python),来找出标记为可翻译的字符串。`Babel " +"`__ 是一个 Python 国际化库,其中包含一个 :file:`pybabel` " +"脚本,用于提取并编译消息编目。François Pinard 写的称为 :program:`xpot` 的程序也能完成类似的工作,可从他的 `po-" +"utils 软件包 `__ 中获取。" + +#: ../../library/gettext.rst:537 +msgid "" +"(Python also includes pure-Python versions of these programs, called " +":program:`pygettext.py` and :program:`msgfmt.py`; some Python distributions " +"will install them for you. :program:`pygettext.py` is similar to " +":program:`xgettext`, but only understands Python source code and cannot " +"handle other programming languages such as C or C++. :program:`pygettext.py`" +" supports a command-line interface similar to :program:`xgettext`; for " +"details on its use, run ``pygettext.py --help``. :program:`msgfmt.py` is " +"binary compatible with GNU :program:`msgfmt`. With these two programs, you " +"may not need the GNU :program:`gettext` package to internationalize your " +"Python applications.)" +msgstr "" +"(Python 还包括了这些程序的纯 Python 版本,称为 :program:`pygettext.py` 和 " +":program:`msgfmt.py`,某些 Python 发行版已经安装了它们。:program:`pygettext.py` 类似于 " +":program:`xgettext`,但只能理解 Python 源代码,无法处理诸如 C 或 C++ " +"的其他编程语言。:program:`pygettext.py` 支持的命令行界面类似于 :program:`xgettext`,查看其详细用法请运行 " +"``pygettext.py --help``。:program:`msgfmt.py` 与 GNU :program:`msgfmt` " +"是二进制兼容的。有了这两个程序,可以不需要 GNU :program:`gettext` 包来国际化 Python 应用程序。)" + +#: ../../library/gettext.rst:549 +msgid "" +":program:`xgettext`, :program:`pygettext`, and similar tools generate " +":file:`.po` files that are message catalogs. They are structured human-" +"readable files that contain every marked string in the source code, along " +"with a placeholder for the translated versions of these strings." +msgstr "" +":program:`xgettext`、:program:`pygettext` 或类似工具生成的 :file:`.po` " +"文件就是消息编目。它们是结构化的人类可读文件,包含源代码中所有被标记的字符串,以及这些字符串的翻译的占位符。" + +#: ../../library/gettext.rst:555 +msgid "" +"Copies of these :file:`.po` files are then handed over to the individual " +"human translators who write translations for every supported natural " +"language. They send back the completed language-specific versions as a " +":file:`.po` file that's compiled into a machine-readable " +":file:`.mo` binary catalog file using the :program:`msgfmt` program. The " +":file:`.mo` files are used by the :mod:`gettext` module for the actual " +"translation processing at run-time." +msgstr "" +"然后把这些 :file:`.po` 文件的副本交给各个人工译者,他们为所支持的每种自然语言编写翻译。译者以 :file:`<语言名称>.po` " +"文件的形式发送回翻译完的某个语言的版本,将该文件用 :program:`msgfmt` 程序编译为机器可读的 :file:`.mo` " +"二进制编目文件。:mod:`gettext` 模块使用 :file:`.mo` 文件在运行时进行实际的翻译处理。" + +#: ../../library/gettext.rst:564 +msgid "" +"How you use the :mod:`gettext` module in your code depends on whether you " +"are internationalizing a single module or your entire application. The next " +"two sections will discuss each case." +msgstr "如何在代码中使用 :mod:`gettext` 模块取决于国际化单个模块还是整个应用程序。接下来的两节将讨论每种情况。" + +#: ../../library/gettext.rst:570 +msgid "Localizing your module" +msgstr "本地化你的模块" + +#: ../../library/gettext.rst:572 +msgid "" +"If you are localizing your module, you must take care not to make global " +"changes, e.g. to the built-in namespace. You should not use the GNU " +":program:`gettext` API but instead the class-based API." +msgstr "" +"如果要本地化模块,则切忌进行全局性的更改,如更改内建命名空间。不应使用 GNU :program:`gettext` API,而应使用基于类的 API。" + +#: ../../library/gettext.rst:576 +msgid "" +"Let's say your module is called \"spam\" and the module's various natural " +"language translation :file:`.mo` files reside in :file:`/usr/share/locale` " +"in GNU :program:`gettext` format. Here's what you would put at the top of " +"your module::" +msgstr "" +"假设你的模块叫做 \"spam\",并且该模块的各种自然语言翻译 :file:`.mo` 文件存放于 " +":file:`/usr/share/locale`,为 GNU :program:`gettext` 格式。以下内容应放在模块顶部::" + +#: ../../library/gettext.rst:587 +msgid "Localizing your application" +msgstr "本地化你的应用程序" + +#: ../../library/gettext.rst:589 +msgid "" +"If you are localizing your application, you can install the :func:`_` " +"function globally into the built-in namespace, usually in the main driver " +"file of your application. This will let all your application-specific files" +" just use ``_('...')`` without having to explicitly install it in each file." +msgstr "" +"如果正在本地化应用程序,可以将 :func:`_` 函数全局安装到内建命名空间中,通常在应用程序的主文件中安装。这将使某个应用程序的所有文件都能使用 " +"``_('...')``,而不必在每个文件中显式安装它。" + +#: ../../library/gettext.rst:594 +msgid "" +"In the simple case then, you need only add the following bit of code to the " +"main driver file of your application::" +msgstr "最简单的情况,就只需将以下代码添加到应用程序的主程序文件中::" + +#: ../../library/gettext.rst:600 +msgid "" +"If you need to set the locale directory, you can pass it into the " +":func:`install` function::" +msgstr "如果需要设置语言环境目录,可以将其传递给 :func:`install` 函数::" + +#: ../../library/gettext.rst:608 +msgid "Changing languages on the fly" +msgstr "即时更改语言" + +#: ../../library/gettext.rst:610 +msgid "" +"If your program needs to support many languages at the same time, you may " +"want to create multiple translation instances and then switch between them " +"explicitly, like so::" +msgstr "如果程序需要同时支持多种语言,则可能需要创建多个翻译实例,然后在它们之间进行显式切换,如下所示::" + +#: ../../library/gettext.rst:631 +msgid "Deferred translations" +msgstr "延迟翻译" + +#: ../../library/gettext.rst:633 +msgid "" +"In most coding situations, strings are translated where they are coded. " +"Occasionally however, you need to mark strings for translation, but defer " +"actual translation until later. A classic example is::" +msgstr "在大多数代码中,字符串会在编写位置进行翻译。但偶尔需要将字符串标记为待翻译,实际翻译却推迟到后面。一个典型的例子是::" + +#: ../../library/gettext.rst:646 +msgid "" +"Here, you want to mark the strings in the ``animals`` list as being " +"translatable, but you don't actually want to translate them until they are " +"printed." +msgstr "此处希望将 ``animals`` 列表中的字符串标记为可翻译,但不希望在打印之前对它们进行翻译。" + +#: ../../library/gettext.rst:650 +msgid "Here is one way you can handle this situation::" +msgstr "这是处理该情况的一种方式::" + +#: ../../library/gettext.rst:666 +msgid "" +"This works because the dummy definition of :func:`_` simply returns the " +"string unchanged. And this dummy definition will temporarily override any " +"definition of :func:`_` in the built-in namespace (until the :keyword:`del` " +"command). Take care, though if you have a previous definition of :func:`_` " +"in the local namespace." +msgstr "" +"该方法之所以可行,是因为 :func:`_` 的虚定义只是简单地返回了原本的字符串。并且该虚定义将临时覆盖内建命名空间中 :func:`_` " +"的定义(直到 :keyword:`del` 命令)。即使先前在本地命名空间中已经有了 :func:`_` 的定义也请注意。" + +#: ../../library/gettext.rst:672 +msgid "" +"Note that the second use of :func:`_` will not identify \"a\" as being " +"translatable to the :program:`gettext` program, because the parameter is not" +" a string literal." +msgstr "" +"注意,第二次使用 :func:`_` 不会认为 \"a\" 可以传递给 :program:`gettext` 程序去翻译,因为该参数不是字符串文字。" + +#: ../../library/gettext.rst:676 +msgid "Another way to handle this is with the following example::" +msgstr "解决该问题的另一种方法是下面这个例子::" + +#: ../../library/gettext.rst:690 +msgid "" +"In this case, you are marking translatable strings with the function " +":func:`N_`, which won't conflict with any definition of :func:`_`. However, " +"you will need to teach your message extraction program to look for " +"translatable strings marked with :func:`N_`. :program:`xgettext`, " +":program:`pygettext`, ``pybabel extract``, and :program:`xpot` all support " +"this through the use of the :option:`!-k` command-line switch. The choice of" +" :func:`N_` here is totally arbitrary; it could have just as easily been " +":func:`MarkThisStringForTranslation`." +msgstr "" +"这种情况下标记可翻译的字符串使用的是函数 :func:`N_`,该函数不会与 :func:`_` 的任何定义冲突。但是,需要教会消息提取程序去寻找用 " +":func:`N_` 标记的可翻译字符串。:program:`xgettext`, :program:`pygettext`, ``pybabel " +"extract`` 和 :program:`xpot` 都支持此功能,使用 :option:`!-k` 命令行开关即可。这里选择 :func:`N_` " +"为名称完全是任意的,它也能轻易改为 :func:`MarkThisStringForTranslation`。" + +#: ../../library/gettext.rst:701 +msgid "Acknowledgements" +msgstr "致谢" + +#: ../../library/gettext.rst:703 +msgid "" +"The following people contributed code, feedback, design suggestions, " +"previous implementations, and valuable experience to the creation of this " +"module:" +msgstr "以下人员为创建此模块贡献了代码、反馈、设计建议、早期实现和宝贵的经验:" + +#: ../../library/gettext.rst:706 +msgid "Peter Funk" +msgstr "Peter Funk" + +#: ../../library/gettext.rst:708 +msgid "James Henstridge" +msgstr "James Henstridge" + +#: ../../library/gettext.rst:710 +msgid "Juan David Ibáñez Palomar" +msgstr "Juan David Ibáñez Palomar" + +#: ../../library/gettext.rst:712 +msgid "Marc-André Lemburg" +msgstr "Marc-André Lemburg" + +#: ../../library/gettext.rst:714 +msgid "Martin von Löwis" +msgstr "Martin von Löwis" + +#: ../../library/gettext.rst:716 +msgid "François Pinard" +msgstr "François Pinard" + +#: ../../library/gettext.rst:718 +msgid "Barry Warsaw" +msgstr "Barry Warsaw" + +#: ../../library/gettext.rst:720 +msgid "Gustavo Niemeyer" +msgstr "Gustavo Niemeyer" + +#: ../../library/gettext.rst:723 +msgid "Footnotes" +msgstr "脚注" + +#: ../../library/gettext.rst:724 +msgid "" +"The default locale directory is system dependent; for example, on RedHat " +"Linux it is :file:`/usr/share/locale`, but on Solaris it is " +":file:`/usr/lib/locale`. The :mod:`gettext` module does not try to support " +"these system dependent defaults; instead its default is " +":file:`{sys.base_prefix}/share/locale` (see :data:`sys.base_prefix`). For " +"this reason, it is always best to call :func:`bindtextdomain` with an " +"explicit absolute path at the start of your application." +msgstr "" +"不同系统的默认语言环境目录是不同的;比如在 RedHat Linux 上是 :file:`/usr/share/locale`,在 Solaris 上是" +" :file:`/usr/lib/locale`。:mod:`gettext` 模块不会支持这些基于不同系统的默认值;而它的默认值为 " +":file:`{sys.base_prefix}/share/locale` (请参阅 " +":data:`sys.base_prefix`)。基于上述原因,最好每次都在应用程序的开头使用明确的绝对路径来调用 " +":func:`bindtextdomain`。" + +#: ../../library/gettext.rst:732 +msgid "See the footnote for :func:`bindtextdomain` above." +msgstr "参阅上方 :func:`bindtextdomain` 的脚注。" diff --git a/library/glob.po b/library/glob.po new file mode 100644 index 000000000..535b53796 --- /dev/null +++ b/library/glob.po @@ -0,0 +1,157 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) 2001-2025, Python Software Foundation +# This file is distributed under the same license as the Python package. +# FIRST AUTHOR , YEAR. +# +# Translators: +# Zombie110year , 2019 +# ppcfish , 2019 +# Freesand Leo , 2022 +# Rafael Fontenelle , 2025 +# +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: Python 3.9\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2025-02-07 16:40+0000\n" +"PO-Revision-Date: 2017-02-16 23:12+0000\n" +"Last-Translator: Rafael Fontenelle , 2025\n" +"Language-Team: Chinese (China) (https://app.transifex.com/python-doc/teams/5390/zh_CN/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: zh_CN\n" +"Plural-Forms: nplurals=1; plural=0;\n" + +#: ../../library/glob.rst:2 +msgid ":mod:`glob` --- Unix style pathname pattern expansion" +msgstr ":mod:`glob` --- Unix 风格路径名模式扩展" + +#: ../../library/glob.rst:7 +msgid "**Source code:** :source:`Lib/glob.py`" +msgstr "**源代码:** :source:`Lib/glob.py`" + +#: ../../library/glob.rst:21 +msgid "" +"The :mod:`glob` module finds all the pathnames matching a specified pattern " +"according to the rules used by the Unix shell, although results are returned" +" in arbitrary order. No tilde expansion is done, but ``*``, ``?``, and " +"character ranges expressed with ``[]`` will be correctly matched. This is " +"done by using the :func:`os.scandir` and :func:`fnmatch.fnmatch` functions " +"in concert, and not by actually invoking a subshell." +msgstr "" +":mod:`glob` 模块会按照 Unix shell 所使用的规则找出所有匹配特定模式的路径名称,但返回结果的顺序是不确定的。 " +"波浪号扩展不会生效,但 ``*``, ``?`` 以及用 ``[]`` 表示的字符范围将被正确地匹配。 这是通过配合使用 " +":func:`os.scandir` 和 :func:`fnmatch.fnmatch` 函数来实现的,而不是通过实际唤起子 shell。" + +#: ../../library/glob.rst:28 +msgid "" +"Note that files beginning with a dot (``.``) can only be matched by patterns" +" that also start with a dot, unlike :func:`fnmatch.fnmatch` or " +":func:`pathlib.Path.glob`. (For tilde and shell variable expansion, use " +":func:`os.path.expanduser` and :func:`os.path.expandvars`.)" +msgstr "" +"请注意以点号 (``.``) 打头的文件只能用同样以点号打头的模式来匹配,这不同于 :func:`fnmatch.fnmatch` 或 " +":func:`pathlib.Path.glob`。 (对于波浪号和 shell 变量扩展,请使用 :func:`os.path.expanduser`" +" 和 :func:`os.path.expandvars`。)" + +#: ../../library/glob.rst:34 +msgid "" +"For a literal match, wrap the meta-characters in brackets. For example, " +"``'[?]'`` matches the character ``'?'``." +msgstr "对于字面值匹配,请将原字符用方括号括起来。 例如,``'[?]'`` 将匹配字符 ``'?'``。" + +#: ../../library/glob.rst:39 +msgid "The :mod:`pathlib` module offers high-level path objects." +msgstr ":mod:`pathlib` 模块提供高级路径对象。" + +#: ../../library/glob.rst:44 +msgid "" +"Return a possibly-empty list of path names that match *pathname*, which must" +" be a string containing a path specification. *pathname* can be either " +"absolute (like :file:`/usr/src/Python-1.5/Makefile`) or relative (like " +":file:`../../Tools/\\*/\\*.gif`), and can contain shell-style wildcards. " +"Broken symlinks are included in the results (as in the shell). Whether or " +"not the results are sorted depends on the file system. If a file that " +"satisfies conditions is removed or added during the call of this function, " +"whether a path name for that file be included is unspecified." +msgstr "" +"返回匹配 *pathname* 的可能为空的路径名列表,其中的元素必须为包含路径信息的字符串。 *pathname* 可以是绝对路径 (如 " +":file:`/usr/src/Python-1.5/Makefile`) 或相对路径 (如 " +":file:`../../Tools/\\*/\\*.gif`),并且可包含 shell 风格的通配符。 结果也将包含无效的符号链接(与在 shell " +"中一样)。 结果是否排序取决于具体文件系统。 如果某个符合条件的文件在调用此函数期间被移除或添加,是否包括该文件的路径是没有规定的。" + +#: ../../library/glob.rst:56 +msgid "" +"If *recursive* is true, the pattern \"``**``\" will match any files and zero" +" or more directories, subdirectories and symbolic links to directories. If " +"the pattern is followed by an :data:`os.sep` or :data:`os.altsep` then files" +" will not match." +msgstr "" +"如果 *recursive* 为真值,则模式 \"``**``\" 将匹配目录中的任何文件以及零个或多个目录、子目录和符号链接。 如果模式加了一个 " +":data:`os.sep` 或 :data:`os.altsep` 则将不匹配文件。" + +#: ../../library/glob.rst:61 ../../library/glob.rst:76 +msgid "" +"Raises an :ref:`auditing event ` ``glob.glob`` with arguments " +"``pathname``, ``recursive``." +msgstr "" +"引发一个 :ref:`审计事件 ` ``glob.glob`` 并附带参数 ``pathname``, ``recursive``。" + +#: ../../library/glob.rst:64 +msgid "" +"Using the \"``**``\" pattern in large directory trees may consume an " +"inordinate amount of time." +msgstr "在一个较大的目录树中使用 \"``**``\" 模式可能会消耗非常多的时间。" + +#: ../../library/glob.rst:67 +msgid "Support for recursive globs using \"``**``\"." +msgstr "支持使用 \"``**``\" 的递归 glob。" + +#: ../../library/glob.rst:73 +msgid "" +"Return an :term:`iterator` which yields the same values as :func:`glob` " +"without actually storing them all simultaneously." +msgstr "返回一个 :term:`iterator`,它会产生与 :func:`glob` 相同的结果,但不会实际地同时保存它们。" + +#: ../../library/glob.rst:81 +msgid "" +"Escape all special characters (``'?'``, ``'*'`` and ``'['``). This is useful" +" if you want to match an arbitrary literal string that may have special " +"characters in it. Special characters in drive/UNC sharepoints are not " +"escaped, e.g. on Windows ``escape('//?/c:/Quo vadis?.txt')`` returns " +"``'//?/c:/Quo vadis[?].txt'``." +msgstr "" +"转义所有特殊字符 (``'?'``, ``'*'`` 和 ``'['``)。 这适用于当你想要匹配可能带有特殊字符的任意字符串字面值的情况。 在 " +"drive/UNC 共享点中的特殊字符不会被转义,例如在 Windows 上 ``escape('//?/c:/Quo vadis?.txt')`` " +"将返回 ``'//?/c:/Quo vadis[?].txt'``。" + +#: ../../library/glob.rst:90 +msgid "" +"For example, consider a directory containing the following files: " +":file:`1.gif`, :file:`2.txt`, :file:`card.gif` and a subdirectory " +":file:`sub` which contains only the file :file:`3.txt`. :func:`glob` will " +"produce the following results. Notice how any leading components of the " +"path are preserved. ::" +msgstr "" +"例如,考虑一个包含以下内容的目录:文件 :file:`1.gif`, :file:`2.txt`, :file:`card.gif` 以及一个子目录 " +":file:`sub` 其中只包含一个文件 :file:`3.txt`. :func:`glob` 将产生如下结果。 " +"请注意路径的任何开头部分都将被保留。::" + +#: ../../library/glob.rst:108 +msgid "" +"If the directory contains files starting with ``.`` they won't be matched by" +" default. For example, consider a directory containing :file:`card.gif` and " +":file:`.card.gif`::" +msgstr "" +"如果目录包含以 ``.`` 打头的文件,它们默认将不会被匹配。 例如,考虑一个包含 :file:`card.gif` 和 " +":file:`.card.gif` 的目录::" + +#: ../../library/glob.rst:120 +msgid "Module :mod:`fnmatch`" +msgstr "模块 :mod:`fnmatch`" + +#: ../../library/glob.rst:121 +msgid "Shell-style filename (not path) expansion" +msgstr "Shell 风格文件名(而非路径)扩展" diff --git a/library/graphlib.po b/library/graphlib.po new file mode 100644 index 000000000..647301fa0 --- /dev/null +++ b/library/graphlib.po @@ -0,0 +1,272 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) 2001-2022, Python Software Foundation +# This file is distributed under the same license as the Python package. +# FIRST AUTHOR , YEAR. +# +# Translators: +# ww song , 2020 +# Freesand Leo , 2021 +# +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: Python 3.9\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2022-11-04 14:34+0000\n" +"PO-Revision-Date: 2020-06-01 03:18+0000\n" +"Last-Translator: Freesand Leo , 2021\n" +"Language-Team: Chinese (China) (https://www.transifex.com/python-doc/teams/5390/zh_CN/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: zh_CN\n" +"Plural-Forms: nplurals=1; plural=0;\n" + +#: ../../library/graphlib.rst:2 +msgid "" +":mod:`graphlib` --- Functionality to operate with graph-like structures" +msgstr ":mod:`graphlib` --- 操作类似图的结构的功能" + +#: ../../library/graphlib.rst:8 +msgid "**Source code:** :source:`Lib/graphlib.py`" +msgstr "**源代码:** :source:`Lib/graphlib.py`" + +#: ../../library/graphlib.rst:20 +msgid "" +"Provides functionality to topologically sort a graph of hashable nodes." +msgstr "提供以拓扑方式对可哈希节点的图进行排序的功能。" + +#: ../../library/graphlib.rst:22 +msgid "" +"A topological order is a linear ordering of the vertices in a graph such " +"that for every directed edge u -> v from vertex u to vertex v, vertex u " +"comes before vertex v in the ordering. For instance, the vertices of the " +"graph may represent tasks to be performed, and the edges may represent " +"constraints that one task must be performed before another; in this example," +" a topological ordering is just a valid sequence for the tasks. A complete " +"topological ordering is possible if and only if the graph has no directed " +"cycles, that is, if it is a directed acyclic graph." +msgstr "" +"拓扑排序是指图中顶点的线性排序,使得对于每条从顶点 u 到顶点 v 的有向边 u -> v,顶点 u 都排在顶点 v 之前。 " +"例如,图的顶点可以代表要执行的任务,而边代表某一个任务必须在另一个任务之前执行的约束条件;在这个例子中,拓扑排序只是任务的有效序列。 完全拓扑排序 " +"当且仅当图不包含有向环,也就是说为有向无环图时,完全拓扑排序才是可能的。" + +#: ../../library/graphlib.rst:31 +msgid "" +"If the optional *graph* argument is provided it must be a dictionary " +"representing a directed acyclic graph where the keys are nodes and the " +"values are iterables of all predecessors of that node in the graph (the " +"nodes that have edges that point to the value in the key). Additional nodes " +"can be added to the graph using the :meth:`~TopologicalSorter.add` method." +msgstr "" +"如果提供了可选的 *graph* " +"参数则它必须为一个表示有向无环图的字典,其中的键为节点而值为包含图中该节点的所有上级节点(即具有指向键中的值的边的节点)的可迭代对象。 " +"额外的节点可以使用 :meth:`~TopologicalSorter.add` 方法添加到图中。" + +#: ../../library/graphlib.rst:37 +msgid "" +"In the general case, the steps required to perform the sorting of a given " +"graph are as follows:" +msgstr "在通常情况下,对给定的图执行排序所需的步骤如下:" + +#: ../../library/graphlib.rst:40 +msgid "" +"Create an instance of the :class:`TopologicalSorter` with an optional " +"initial graph." +msgstr "通过可选的初始图创建一个 :class:`TopologicalSorter` 的实例。" + +#: ../../library/graphlib.rst:42 +msgid "Add additional nodes to the graph." +msgstr "添加额外的节点到图中。" + +#: ../../library/graphlib.rst:43 +msgid "Call :meth:`~TopologicalSorter.prepare` on the graph." +msgstr "在图上调用 :meth:`~TopologicalSorter.prepare`。" + +#: ../../library/graphlib.rst:44 +msgid "" +"While :meth:`~TopologicalSorter.is_active` is ``True``, iterate over the " +"nodes returned by :meth:`~TopologicalSorter.get_ready` and process them. " +"Call :meth:`~TopologicalSorter.done` on each node as it finishes processing." +msgstr "" +"当 :meth:`~TopologicalSorter.is_active` 为 ``True`` 时,迭代 " +":meth:`~TopologicalSorter.get_ready` 所返回的节点并加以处理。 完成处理后在每个节点上调用 " +":meth:`~TopologicalSorter.done`。" + +#: ../../library/graphlib.rst:49 +msgid "" +"In case just an immediate sorting of the nodes in the graph is required and " +"no parallelism is involved, the convenience method " +":meth:`TopologicalSorter.static_order` can be used directly:" +msgstr "" +"在只需要对图中的节点进行立即排序并且不涉及并行性的情况下,可以直接使用便捷方法 " +":meth:`TopologicalSorter.static_order`:" + +#: ../../library/graphlib.rst:60 +msgid "" +"The class is designed to easily support parallel processing of the nodes as " +"they become ready. For instance::" +msgstr "这个类被设计用来在节点就绪时方便地支持对其并行处理。 例如::" + +#: ../../library/graphlib.rst:87 +msgid "" +"Add a new node and its predecessors to the graph. Both the *node* and all " +"elements in *predecessors* must be hashable." +msgstr "将一个新节点及其上级节点添加到图中。 *node* 以及 *predecessors* 中的所有元素都必须为可哈希对象。" + +#: ../../library/graphlib.rst:90 +msgid "" +"If called multiple times with the same node argument, the set of " +"dependencies will be the union of all dependencies passed in." +msgstr "如果附带相同的节点参数多次调用,则依赖项的集合将为所有被传入依赖项的并集。" + +#: ../../library/graphlib.rst:93 +msgid "" +"It is possible to add a node with no dependencies (*predecessors* is not " +"provided) or to provide a dependency twice. If a node that has not been " +"provided before is included among *predecessors* it will be automatically " +"added to the graph with no predecessors of its own." +msgstr "" +"可以添加不带依赖项的节点 (即不提供 *predecessors*) 或者重复提供依赖项。 如果有先前未提供的节点包含在 *predecessors* " +"中则它将被自动添加到图中并且不带自己的上级节点。" + +#: ../../library/graphlib.rst:98 +msgid "" +"Raises :exc:`ValueError` if called after :meth:`~TopologicalSorter.prepare`." +msgstr "如果在 :meth:`~TopologicalSorter.prepare` 之后被调用则会引发 :exc:`ValueError`。" + +#: ../../library/graphlib.rst:102 +msgid "" +"Mark the graph as finished and check for cycles in the graph. If any cycle " +"is detected, :exc:`CycleError` will be raised, but " +":meth:`~TopologicalSorter.get_ready` can still be used to obtain as many " +"nodes as possible until cycles block more progress. After a call to this " +"function, the graph cannot be modified, and therefore no more nodes can be " +"added using :meth:`~TopologicalSorter.add`." +msgstr "" +"将图标记为已完成并检查图中是否存在环。 如何检测到任何环,则将引发 :exc:`CycleError`,但 " +":meth:`~TopologicalSorter.get_ready` 仍可被用来获取尽可能多的节点直到环阻塞了操作过程。 " +"在调用此函数后,图将无法再修改,因此不能再使用 :meth:`~TopologicalSorter.add` 添加更多的节点。" + +#: ../../library/graphlib.rst:111 +msgid "" +"Returns ``True`` if more progress can be made and ``False`` otherwise. " +"Progress can be made if cycles do not block the resolution and either there " +"are still nodes ready that haven't yet been returned by " +":meth:`TopologicalSorter.get_ready` or the number of nodes marked " +":meth:`TopologicalSorter.done` is less than the number that have been " +"returned by :meth:`TopologicalSorter.get_ready`." +msgstr "" +"如果可以取得更多进展则返回 ``True``,否则返回 ``False``。 如果环没有阻塞操作,并且还存在尚未被 " +":meth:`TopologicalSorter.get_ready` 返回的已就绪节点或者已标记为 " +":meth:`TopologicalSorter.done` 的节点数量少于已被 :meth:`TopologicalSorter.get_ready`" +" 所返回的节点数量则还可以取得进展。" + +#: ../../library/graphlib.rst:118 +msgid "" +"The :meth:`~TopologicalSorter.__bool__` method of this class defers to this " +"function, so instead of::" +msgstr "该类的 :meth:`~TopologicalSorter.__bool__` 方法要使用此函数,因此除了::" + +#: ../../library/graphlib.rst:124 +msgid "it is possible to simply do::" +msgstr "可能会简单地执行::" + +#: ../../library/graphlib.rst:129 ../../library/graphlib.rst:152 +msgid "" +"Raises :exc:`ValueError` if called without calling " +":meth:`~TopologicalSorter.prepare` previously." +msgstr "" +"如果之前未调用 :meth:`~TopologicalSorter.prepare` 就调用此函数则会引发 :exc:`ValueError`。" + +#: ../../library/graphlib.rst:134 +msgid "" +"Marks a set of nodes returned by :meth:`TopologicalSorter.get_ready` as " +"processed, unblocking any successor of each node in *nodes* for being " +"returned in the future by a call to :meth:`TopologicalSorter.get_ready`." +msgstr "" +"将 :meth:`TopologicalSorter.get_ready` 所返回的节点集合标记为已处理,解除对 *nodes* " +"中每个节点的后续节点的阻塞以便在将来通过对 :meth:`TopologicalSorter.get_ready` 的调用来返回它们。" + +#: ../../library/graphlib.rst:138 +msgid "" +"Raises :exc:`ValueError` if any node in *nodes* has already been marked as " +"processed by a previous call to this method or if a node was not added to " +"the graph by using :meth:`TopologicalSorter.add`, if called without calling " +":meth:`~TopologicalSorter.prepare` or if node has not yet been returned by " +":meth:`~TopologicalSorter.get_ready`." +msgstr "" +"如果 *nodes* 中的任何节点已经被之前对该方法的调用标记为已处理或者如果未通过使用 :meth:`TopologicalSorter.add` " +"将一个节点添加到图中,如果未调用 :meth:`~TopologicalSorter.prepare` 即调用此方法或者如果节点尚未被 " +":meth:`~TopologicalSorter.get_ready` 所返回则将引发 :exc:`ValueError`。" + +#: ../../library/graphlib.rst:146 +msgid "" +"Returns a ``tuple`` with all the nodes that are ready. Initially it returns " +"all nodes with no predecessors, and once those are marked as processed by " +"calling :meth:`TopologicalSorter.done`, further calls will return all new " +"nodes that have all their predecessors already processed. Once no more " +"progress can be made, empty tuples are returned." +msgstr "" +"返回由所有已就绪节点组成的 ``tuple``。 初始状态下它将返回所有不带上级节点的节点,并且一旦通过调用 " +":meth:`TopologicalSorter.done` 将它们标记为已处理,之后的调用将返回所有上级节点已被处理的新节点。 " +"一旦无法再取得进展,则会返回空元组。" + +#: ../../library/graphlib.rst:157 +msgid "" +"Returns an iterator object which will iterate over nodes in a topological " +"order. When using this method, :meth:`~TopologicalSorter.prepare` and " +":meth:`~TopologicalSorter.done` should not be called. This method is " +"equivalent to::" +msgstr "" +"返回一个迭代器,它将按照拓扑顺序来迭代所有节点。 当使用此方法时,:meth:`~TopologicalSorter.prepare` 和 " +":meth:`~TopologicalSorter.done` 不应被调用。 此方法等价于::" + +#: ../../library/graphlib.rst:169 +msgid "" +"The particular order that is returned may depend on the specific order in " +"which the items were inserted in the graph. For example:" +msgstr "所返回的特定顺序可能取决于条目被插入图中的顺序。 例如:" + +#: ../../library/graphlib.rst:186 +msgid "" +"This is due to the fact that \"0\" and \"2\" are in the same level in the " +"graph (they would have been returned in the same call to " +":meth:`~TopologicalSorter.get_ready`) and the order between them is " +"determined by the order of insertion." +msgstr "" +"这是由于实际上 \"0\" 和 \"2\" 在图中的级别相同(它们将在对 :meth:`~TopologicalSorter.get_ready` " +"的同一次调用中被返回) 并且它们之间的顺序是由插入顺序决定的。" + +#: ../../library/graphlib.rst:192 +msgid "If any cycle is detected, :exc:`CycleError` will be raised." +msgstr "如果检测到任何环,则将引发 :exc:`CycleError`。" + +#: ../../library/graphlib.rst:198 +msgid "Exceptions" +msgstr "异常" + +#: ../../library/graphlib.rst:199 +msgid "The :mod:`graphlib` module defines the following exception classes:" +msgstr ":mod:`graphlib` 模块定义了以下异常类:" + +#: ../../library/graphlib.rst:203 +msgid "" +"Subclass of :exc:`ValueError` raised by :meth:`TopologicalSorter.prepare` if" +" cycles exist in the working graph. If multiple cycles exist, only one " +"undefined choice among them will be reported and included in the exception." +msgstr "" +":exc:`ValueError` 的子类,当特定的图中存在环时将由 :meth:`TopologicalSorter.prepare` 引发。 " +"如果存在多个环,则将只报告其中一个未定义的选项并将其包括在异常中。" + +#: ../../library/graphlib.rst:207 +msgid "" +"The detected cycle can be accessed via the second element in the " +":attr:`~CycleError.args` attribute of the exception instance and consists in" +" a list of nodes, such that each node is, in the graph, an immediate " +"predecessor of the next node in the list. In the reported list, the first " +"and the last node will be the same, to make it clear that it is cyclic." +msgstr "" +"检测到的环可以通过异常实例的 :attr:`~CycleError.args` " +"属性的第二个元素来访问,它由一个节点列表组成,其中的每个节点在图中都是列表中下一个节点的直接上级节点。 " +"在报告的列表中,开头和末尾的节点将是同一对象,以表明它是一个环。" diff --git a/library/grp.po b/library/grp.po new file mode 100644 index 000000000..948c8c098 --- /dev/null +++ b/library/grp.po @@ -0,0 +1,159 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) 2001-2022, Python Software Foundation +# This file is distributed under the same license as the Python package. +# FIRST AUTHOR , YEAR. +# +# Translators: +# 操旭 , 2017 +# cdarlint , 2019 +# Alpha Du , 2020 +# Freesand Leo , 2022 +# +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: Python 3.9\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2022-11-04 14:34+0000\n" +"PO-Revision-Date: 2017-02-16 23:12+0000\n" +"Last-Translator: Freesand Leo , 2022\n" +"Language-Team: Chinese (China) (https://www.transifex.com/python-doc/teams/5390/zh_CN/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: zh_CN\n" +"Plural-Forms: nplurals=1; plural=0;\n" + +#: ../../library/grp.rst:2 +msgid ":mod:`grp` --- The group database" +msgstr ":mod:`grp` --- 组数据库" + +#: ../../library/grp.rst:10 +msgid "" +"This module provides access to the Unix group database. It is available on " +"all Unix versions." +msgstr "该模块提供对Unix组数据库的访问。 它在所有Unix版本上都可用。" + +#: ../../library/grp.rst:13 +msgid "" +"Group database entries are reported as a tuple-like object, whose attributes" +" correspond to the members of the ``group`` structure (Attribute field " +"below, see ````):" +msgstr "组数据库条目被报告为类似元组的对象,其属性对应于 ``group`` 结构的成员 (下面的属性字段,请参见 ````):" + +#: ../../library/grp.rst:18 +msgid "Index" +msgstr "索引" + +#: ../../library/grp.rst:18 +msgid "Attribute" +msgstr "属性" + +#: ../../library/grp.rst:18 +msgid "Meaning" +msgstr "意义" + +#: ../../library/grp.rst:20 +msgid "0" +msgstr "0" + +#: ../../library/grp.rst:20 +msgid "gr_name" +msgstr "gr_name" + +#: ../../library/grp.rst:20 +msgid "the name of the group" +msgstr "组名" + +#: ../../library/grp.rst:22 +msgid "1" +msgstr "1" + +#: ../../library/grp.rst:22 +msgid "gr_passwd" +msgstr "gr_passwd" + +#: ../../library/grp.rst:22 +msgid "the (encrypted) group password; often empty" +msgstr "(加密的)组密码; 通常为空" + +#: ../../library/grp.rst:25 +msgid "2" +msgstr "2" + +#: ../../library/grp.rst:25 +msgid "gr_gid" +msgstr "gr_gid" + +#: ../../library/grp.rst:25 +msgid "the numerical group ID" +msgstr "数字组ID" + +#: ../../library/grp.rst:27 +msgid "3" +msgstr "3" + +#: ../../library/grp.rst:27 +msgid "gr_mem" +msgstr "gr_mem" + +#: ../../library/grp.rst:27 +msgid "all the group member's user names" +msgstr "组内所有成员的用户名" + +#: ../../library/grp.rst:31 +msgid "" +"The gid is an integer, name and password are strings, and the member list is" +" a list of strings. (Note that most users are not explicitly listed as " +"members of the group they are in according to the password database. Check " +"both databases to get complete membership information. Also note that a " +"``gr_name`` that starts with a ``+`` or ``-`` is likely to be a YP/NIS " +"reference and may not be accessible via :func:`getgrnam` or " +":func:`getgrgid`.)" +msgstr "" +"gid是整数,名称和密码是字符串,成员列表是字符串列表。 " +"(注意,大多数用户未根据密码数据库显式列为所属组的成员。请检查两个数据库以获取完整的成员资格信息。还要注意,以 ``+`` 或 ``-`` 开头的 " +"``gr_name`` 可能是 YP/NIS 引用,可能无法通过 :func:`getgrnam` 或 :func:`getgrgid` 访问。)" + +#: ../../library/grp.rst:38 +msgid "It defines the following items:" +msgstr "本模块定义如下内容:" + +#: ../../library/grp.rst:43 +msgid "" +"Return the group database entry for the given numeric group ID. " +":exc:`KeyError` is raised if the entry asked for cannot be found." +msgstr "返回给定数字组ID的组数据库条目。 如果找不到要求的条目,则会引发 :exc:`KeyError` 错误。" + +#: ../../library/grp.rst:46 +msgid "" +"Since Python 3.6 the support of non-integer arguments like floats or strings" +" in :func:`getgrgid` is deprecated." +msgstr "" +"从 Python 3.6 开始,弃用对 :func:`getgrgid` 中的 float 或 string 等非 integer 参数的支持。" + +#: ../../library/grp.rst:52 +msgid "" +"Return the group database entry for the given group name. :exc:`KeyError` is" +" raised if the entry asked for cannot be found." +msgstr "返回给定组名的组数据库条目。 如果找不到要求的条目,则会引发 :exc:`KeyError` 错误。" + +#: ../../library/grp.rst:58 +msgid "Return a list of all available group entries, in arbitrary order." +msgstr "以任意顺序返回所有可用组条目的列表。" + +#: ../../library/grp.rst:64 +msgid "Module :mod:`pwd`" +msgstr "模块 :mod:`pwd`" + +#: ../../library/grp.rst:64 +msgid "An interface to the user database, similar to this." +msgstr "用户数据库的接口,与此类似。" + +#: ../../library/grp.rst:66 +msgid "Module :mod:`spwd`" +msgstr "模块 :mod:`spwd`" + +#: ../../library/grp.rst:67 +msgid "An interface to the shadow password database, similar to this." +msgstr "针对影子密码数据库的接口,与本模块类似。" diff --git a/library/gzip.po b/library/gzip.po new file mode 100644 index 000000000..44c82e89c --- /dev/null +++ b/library/gzip.po @@ -0,0 +1,404 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) 2001-2024, Python Software Foundation +# This file is distributed under the same license as the Python package. +# FIRST AUTHOR , YEAR. +# +# Translators: +# sgqy , 2024 +# 汪心禾 , 2024 +# Freesand Leo , 2024 +# 1lin24 <1lin24@sina.com>, 2024 +# Rafael Fontenelle , 2024 +# +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: Python 3.9\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2024-06-20 08:51+0000\n" +"PO-Revision-Date: 2017-02-16 23:12+0000\n" +"Last-Translator: Rafael Fontenelle , 2024\n" +"Language-Team: Chinese (China) (https://app.transifex.com/python-doc/teams/5390/zh_CN/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: zh_CN\n" +"Plural-Forms: nplurals=1; plural=0;\n" + +#: ../../library/gzip.rst:2 +msgid ":mod:`gzip` --- Support for :program:`gzip` files" +msgstr ":mod:`gzip` --- 对 :program:`gzip` 格式的支持" + +#: ../../library/gzip.rst:7 +msgid "**Source code:** :source:`Lib/gzip.py`" +msgstr "**源代码:** :source:`Lib/gzip.py`" + +#: ../../library/gzip.rst:11 +msgid "" +"This module provides a simple interface to compress and decompress files " +"just like the GNU programs :program:`gzip` and :program:`gunzip` would." +msgstr "" +"此模块提供的简单接口帮助用户压缩和解压缩文件,功能类似于 GNU 应用程序 :program:`gzip` 和 :program:`gunzip`。" + +#: ../../library/gzip.rst:14 +msgid "The data compression is provided by the :mod:`zlib` module." +msgstr "数据压缩由 :mod:`zlib` 模块提供。" + +#: ../../library/gzip.rst:16 +msgid "" +"The :mod:`gzip` module provides the :class:`GzipFile` class, as well as the " +":func:`.open`, :func:`compress` and :func:`decompress` convenience " +"functions. The :class:`GzipFile` class reads and writes :program:`gzip`\\ " +"-format files, automatically compressing or decompressing the data so that " +"it looks like an ordinary :term:`file object`." +msgstr "" +":mod:`gzip` 模块提供 :class:`GzipFile` 类和 " +":func:`.open`、:func:`compress`、:func:`decompress` 几个便利的函数。:class:`GzipFile` " +"类可以读写 :program:`gzip` 格式的文件,还能自动压缩和解压缩数据,这让操作压缩文件如同操作普通的 :term:`file object`" +" 一样方便。" + +#: ../../library/gzip.rst:22 +msgid "" +"Note that additional file formats which can be decompressed by the " +":program:`gzip` and :program:`gunzip` programs, such as those produced by " +":program:`compress` and :program:`pack`, are not supported by this module." +msgstr "" +"注意,此模块不支持部分可以被 :program:`gzip` 和 :program:`gunzip` 解压的格式,如利用 " +":program:`compress` 或 :program:`pack` 压缩所得的文件。" + +#: ../../library/gzip.rst:26 +msgid "The module defines the following items:" +msgstr "这个模块定义了以下内容:" + +#: ../../library/gzip.rst:31 +msgid "" +"Open a gzip-compressed file in binary or text mode, returning a :term:`file " +"object`." +msgstr "以二进制方式或者文本方式打开一个 gzip 格式的压缩文件,返回一个 :term:`file object`。" + +#: ../../library/gzip.rst:34 +msgid "" +"The *filename* argument can be an actual filename (a :class:`str` or " +":class:`bytes` object), or an existing file object to read from or write to." +msgstr "" +"*filename* 参数可以是一个实际的文件名(一个 :class:`str` 对象或者 :class:`bytes` " +"对象),或者是一个用来读写的已存在的文件对象。" + +#: ../../library/gzip.rst:37 +msgid "" +"The *mode* argument can be any of ``'r'``, ``'rb'``, ``'a'``, ``'ab'``, " +"``'w'``, ``'wb'``, ``'x'`` or ``'xb'`` for binary mode, or ``'rt'``, " +"``'at'``, ``'wt'``, or ``'xt'`` for text mode. The default is ``'rb'``." +msgstr "" +"*mode* 参数可以是二进制模式: ``'r'``, ``'rb'``, ``'a'``, ``'ab'``, ``'w'``, ``'wb'``, " +"``'x'`` or ``'xb'`` , 或者是文本模式 ``'rt'``, ``'at'``, ``'wt'``, or ``'xt'``。默认值是" +" ``'rb'``。" + +#: ../../library/gzip.rst:41 +msgid "" +"The *compresslevel* argument is an integer from 0 to 9, as for the " +":class:`GzipFile` constructor." +msgstr " *compresslevel* 参数是一个用于 :class:`GzipFile` 构造器的从 0 到 9 的整数。" + +#: ../../library/gzip.rst:44 +msgid "" +"For binary mode, this function is equivalent to the :class:`GzipFile` " +"constructor: ``GzipFile(filename, mode, compresslevel)``. In this case, the " +"*encoding*, *errors* and *newline* arguments must not be provided." +msgstr "" +"对于二进制模式,这个函数等价于 :class:`GzipFile` 构造器:``GzipFile(filename, mode, " +"compresslevel)``。在这个例子中,*encoding*, *errors* 和 *newline* 三个参数一定不要设置。" + +#: ../../library/gzip.rst:48 +msgid "" +"For text mode, a :class:`GzipFile` object is created, and wrapped in an " +":class:`io.TextIOWrapper` instance with the specified encoding, error " +"handling behavior, and line ending(s)." +msgstr "" +"对于文本模式,将会创建一个 :class:`GzipFile` 对象,并将它封装到一个 :class:`io.TextIOWrapper` 实例中, " +"这个实例默认了指定编码,错误抓获行为和行。" + +#: ../../library/gzip.rst:52 +msgid "" +"Added support for *filename* being a file object, support for text mode, and" +" the *encoding*, *errors* and *newline* arguments." +msgstr "支持 *filename* 为一个文件对象,支持文本模式和 *encoding*, *errors* 和 *newline* 参数。" + +#: ../../library/gzip.rst:56 +msgid "Added support for the ``'x'``, ``'xb'`` and ``'xt'`` modes." +msgstr "支持 ``'x'``, ``'xb'`` 和 ``'xt'`` 三种模式。" + +#: ../../library/gzip.rst:59 ../../library/gzip.rst:165 +msgid "Accepts a :term:`path-like object`." +msgstr "接受一个 :term:`path-like object`。" + +#: ../../library/gzip.rst:64 +msgid "" +"An exception raised for invalid gzip files. It inherits :exc:`OSError`. " +":exc:`EOFError` and :exc:`zlib.error` can also be raised for invalid gzip " +"files." +msgstr "" +"针对无效 gzip 文件引发的异常。 它继承自 :exc:`OSError`。 针对无效 gzip 文件也可能引发 :exc:`EOFError` 和 " +":exc:`zlib.error`。" + +#: ../../library/gzip.rst:72 +msgid "" +"Constructor for the :class:`GzipFile` class, which simulates most of the " +"methods of a :term:`file object`, with the exception of the :meth:`truncate`" +" method. At least one of *fileobj* and *filename* must be given a non-" +"trivial value." +msgstr "" +":class:`GzipFile` 类的构造器支持 :meth:`truncate` 的异常,与 :term:`file object` " +"的大多数方法非常相似。*fileobj* 和 *filename* 至少有一个不为空。" + +#: ../../library/gzip.rst:77 +msgid "" +"The new class instance is based on *fileobj*, which can be a regular file, " +"an :class:`io.BytesIO` object, or any other object which simulates a file. " +"It defaults to ``None``, in which case *filename* is opened to provide a " +"file object." +msgstr "" +"新的实例基于 *fileobj*,它可以是一个普通文件,一个 :class:`io.BytesIO` 对象,或者任何一个与文件相似的对象。当 " +"*filename* 是一个文件对象时,它的默认值是 ``None``。" + +#: ../../library/gzip.rst:82 +msgid "" +"When *fileobj* is not ``None``, the *filename* argument is only used to be " +"included in the :program:`gzip` file header, which may include the original " +"filename of the uncompressed file. It defaults to the filename of " +"*fileobj*, if discernible; otherwise, it defaults to the empty string, and " +"in this case the original filename is not included in the header." +msgstr "" +"当 *fileobj* 为 ``None`` 时, *filename* 参数只用于 :program:`gzip` " +"文件头中,这个文件有可能包含未压缩文件的源文件名。如果文件可以被识别,默认 *fileobj* " +"的文件名;否则默认为空字符串,在这种情况下文件头将不包含源文件名。" + +#: ../../library/gzip.rst:88 +msgid "" +"The *mode* argument can be any of ``'r'``, ``'rb'``, ``'a'``, ``'ab'``, " +"``'w'``, ``'wb'``, ``'x'``, or ``'xb'``, depending on whether the file will " +"be read or written. The default is the mode of *fileobj* if discernible; " +"otherwise, the default is ``'rb'``. In future Python releases the mode of " +"*fileobj* will not be used. It is better to always specify *mode* for " +"writing." +msgstr "" +"*mode* 参数可以是 ``'r'``, ``'rb'``, ``'a'``, ``'ab'``, ``'w'``, ``'wb'``, " +"``'x'`` 或 ``'xb'`` 中的一个,具体取决于文件将被读取还是被写入。 如果可识别则默认为 *fileobj* 的模式;否则默认为 " +"``'rb'``。 在未来的 Python 发布版中将不再使用 *fileobj* 的模式。 最好总是指定 *mode* 为写入模式。" + +#: ../../library/gzip.rst:94 +msgid "" +"Note that the file is always opened in binary mode. To open a compressed " +"file in text mode, use :func:`.open` (or wrap your :class:`GzipFile` with an" +" :class:`io.TextIOWrapper`)." +msgstr "" +"需要注意的是,文件默认使用二进制模式打开。 如果要以文本模式打开一个压缩文件,请使用 :func:`.open` 方法 (或者使用 " +":class:`io.TextIOWrapper` 包装 :class:`GzipFile`)。" + +#: ../../library/gzip.rst:98 +msgid "" +"The *compresslevel* argument is an integer from ``0`` to ``9`` controlling " +"the level of compression; ``1`` is fastest and produces the least " +"compression, and ``9`` is slowest and produces the most compression. ``0`` " +"is no compression. The default is ``9``." +msgstr "" +"*compresslevel* 参数是一个从 ``0`` 到 ``9`` 的整数,用于控制压缩等级;``1`` 最快但压缩比例最小,``9`` " +"最慢但压缩比例最大。 ``0`` 不压缩。默认为 ``9``。" + +#: ../../library/gzip.rst:103 +msgid "" +"The *mtime* argument is an optional numeric timestamp to be written to the " +"last modification time field in the stream when compressing. It should only" +" be provided in compression mode. If omitted or ``None``, the current time " +"is used. See the :attr:`mtime` attribute for more details." +msgstr "" +"*mtime* 参数是一个可选的数字时间戳用于写入流的最后修改字段,。*mtime* 只在压缩模式中使用。如果省略或者值为 " +"``None``,则使用当前时间。更多细节,详见 :attr:`mtime` 属性。" + +#: ../../library/gzip.rst:108 +msgid "" +"Calling a :class:`GzipFile` object's :meth:`close` method does not close " +"*fileobj*, since you might wish to append more material after the compressed" +" data. This also allows you to pass an :class:`io.BytesIO` object opened " +"for writing as *fileobj*, and retrieve the resulting memory buffer using the" +" :class:`io.BytesIO` object's :meth:`~io.BytesIO.getvalue` method." +msgstr "" +"调用 :class:`GzipFile` 的 :meth:`close` 方法不会关闭 " +"*fileobj*,因为你可以希望增加其它内容到已经压缩的数中。你可以将一个 :class:`io.BytesIO` 对象作为 " +"*fileobj*,也可以使用 :class:`io.BytesIO` 的 :meth:`~io.BytesIO.getvalue` " +"方法从内存缓存中恢复数据。" + +#: ../../library/gzip.rst:114 +msgid "" +":class:`GzipFile` supports the :class:`io.BufferedIOBase` interface, " +"including iteration and the :keyword:`with` statement. Only the " +":meth:`truncate` method isn't implemented." +msgstr "" +":class:`GzipFile` 支持 :class:`io.BufferedIOBase` 类的接口, 包括迭代和 :keyword:`with` " +"语句。只有 :meth:`truncate` 方法没有实现。" + +#: ../../library/gzip.rst:118 +msgid ":class:`GzipFile` also provides the following method and attribute:" +msgstr ":class:`GzipFile` 还提供了以下的方法和属性:" + +#: ../../library/gzip.rst:122 +msgid "" +"Read *n* uncompressed bytes without advancing the file position. At most one" +" single read on the compressed stream is done to satisfy the call. The " +"number of bytes returned may be more or less than requested." +msgstr "在不移动文件指针的情况下读取 *n* 个未压缩字节。最多只有一个单独的读取流来服务这个方法调用。返回的字节数不一定刚好等于要求的数量。" + +#: ../../library/gzip.rst:127 +msgid "" +"While calling :meth:`peek` does not change the file position of the " +":class:`GzipFile`, it may change the position of the underlying file object " +"(e.g. if the :class:`GzipFile` was constructed with the *fileobj* " +"parameter)." +msgstr "" +"调用 :meth:`peek` 并没有改变 :class:`GzipFile` 的文件指针,它可能改变潜在文件对象(例如: " +":class:`GzipFile` 使用 *fileobj* 参数进行初始化)。" + +#: ../../library/gzip.rst:136 +msgid "" +"When decompressing, the value of the last modification time field in the " +"most recently read header may be read from this attribute, as an integer. " +"The initial value before reading any headers is ``None``." +msgstr "在解压的过程中,最后修改时间字段的值可能来自于这个属性,以整数的形式出现。在读取任何文件头信息前,初始值为 ``None``。" + +#: ../../library/gzip.rst:140 +msgid "" +"All :program:`gzip` compressed streams are required to contain this " +"timestamp field. Some programs, such as :program:`gunzip`\\ , make use of " +"the timestamp. The format is the same as the return value of " +":func:`time.time` and the :attr:`~os.stat_result.st_mtime` attribute of the " +"object returned by :func:`os.stat`." +msgstr "" +"所有 :program:`gzip` 东方压缩流中必须包含时间戳这个字段。以便于像 :program:`gunzip`\\ " +"这样的程序可以使用时间戳。格式与 :func:`time.time` 的返回值和 :func:`os.stat` 对象的 " +":attr:`~os.stat_result.st_mtime` 属性值一样。" + +#: ../../library/gzip.rst:146 +msgid "" +"Support for the :keyword:`with` statement was added, along with the *mtime* " +"constructor argument and :attr:`mtime` attribute." +msgstr "支持 :keyword:`with` 语句,构造器参数 *mtime* 和 :attr:`mtime` 属性。" + +#: ../../library/gzip.rst:150 +msgid "Support for zero-padded and unseekable files was added." +msgstr "添加了对零填充和不可搜索文件的支持。" + +#: ../../library/gzip.rst:153 +msgid "The :meth:`io.BufferedIOBase.read1` method is now implemented." +msgstr "实现 :meth:`io.BufferedIOBase.read1` 方法。" + +#: ../../library/gzip.rst:156 +msgid "Added support for the ``'x'`` and ``'xb'`` modes." +msgstr "支持 ``'x'`` and ``'xb'`` 两种模式。" + +#: ../../library/gzip.rst:159 +msgid "" +"Added support for writing arbitrary :term:`bytes-like objects `. The :meth:`~io.BufferedIOBase.read` method now accepts an argument" +" of ``None``." +msgstr "" +"支持写入任意 :term:`bytes-like objects `。:meth:`~io.BufferedIOBase.read` 方法可以接受 ``None`` 为参数。" + +#: ../../library/gzip.rst:168 +msgid "" +"Opening :class:`GzipFile` for writing without specifying the *mode* argument" +" is deprecated." +msgstr "打开 :class:`GzipFile` 用于写入而不指定 *mode* 参数的做法已被弃用。" + +#: ../../library/gzip.rst:175 +msgid "" +"Compress the *data*, returning a :class:`bytes` object containing the " +"compressed data. *compresslevel* and *mtime* have the same meaning as in " +"the :class:`GzipFile` constructor above." +msgstr "" +"压缩 *data*,返回一个包含压缩数据的 :class:`bytes` 对象。 *compresslevel* 和 *mtime* 的含义与上文中 " +":class:`GzipFile` 构造器的相同。" + +#: ../../library/gzip.rst:180 +msgid "Added the *mtime* parameter for reproducible output." +msgstr "添加了 *mtime* 形参用于可重复的输出。" + +#: ../../library/gzip.rst:185 +msgid "" +"Decompress the *data*, returning a :class:`bytes` object containing the " +"uncompressed data." +msgstr "解压缩 *data*,返回一个包含未压缩数据的 :class:`bytes` 对象。" + +#: ../../library/gzip.rst:194 +msgid "Examples of usage" +msgstr "用法示例" + +#: ../../library/gzip.rst:196 +msgid "Example of how to read a compressed file::" +msgstr "读取压缩文件示例:" + +#: ../../library/gzip.rst:202 +msgid "Example of how to create a compressed GZIP file::" +msgstr "创建GZIP 文件示例:" + +#: ../../library/gzip.rst:209 +msgid "Example of how to GZIP compress an existing file::" +msgstr "使用 GZIP 压缩已有的文件示例:" + +#: ../../library/gzip.rst:217 +msgid "Example of how to GZIP compress a binary string::" +msgstr "使用 GZIP 压缩二进制字符串示例:" + +#: ../../library/gzip.rst:226 +msgid "Module :mod:`zlib`" +msgstr "模块 :mod:`zlib`" + +#: ../../library/gzip.rst:226 +msgid "" +"The basic data compression module needed to support the :program:`gzip` file" +" format." +msgstr "支持 :program:`gzip` 格式所需要的基本压缩模块。" + +#: ../../library/gzip.rst:233 +msgid "Command Line Interface" +msgstr "命令行界面" + +#: ../../library/gzip.rst:235 +msgid "" +"The :mod:`gzip` module provides a simple command line interface to compress " +"or decompress files." +msgstr ":mod:`gzip` 模块提供了简单的命令行界面用于压缩和解压缩文件。" + +#: ../../library/gzip.rst:238 +msgid "Once executed the :mod:`gzip` module keeps the input file(s)." +msgstr "在执行后 :mod:`gzip` 模块会保留输入文件。" + +#: ../../library/gzip.rst:242 +msgid "" +"Add a new command line interface with a usage. By default, when you will " +"execute the CLI, the default compression level is 6." +msgstr "添加一个带有用法说明的新命令行界面命令。 默认情况下,当你要执行 CLI 时,默认压缩等级为 6。" + +#: ../../library/gzip.rst:246 +msgid "Command line options" +msgstr "命令行选项" + +#: ../../library/gzip.rst:250 +msgid "If *file* is not specified, read from :attr:`sys.stdin`." +msgstr "如果 *file* 未指定,则从 :attr:`sys.stdin` 读取。" + +#: ../../library/gzip.rst:254 +msgid "Indicates the fastest compression method (less compression)." +msgstr "指明最快速的压缩方法(较低压缩率)。" + +#: ../../library/gzip.rst:258 +msgid "Indicates the slowest compression method (best compression)." +msgstr "指明最慢速的压缩方法(最高压缩率)。" + +#: ../../library/gzip.rst:262 +msgid "Decompress the given file." +msgstr "解压缩给定的文件。" + +#: ../../library/gzip.rst:266 +msgid "Show the help message." +msgstr "显示帮助消息。" diff --git a/library/hashlib.po b/library/hashlib.po new file mode 100644 index 000000000..0a0c37f20 --- /dev/null +++ b/library/hashlib.po @@ -0,0 +1,923 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) 2001-2022, Python Software Foundation +# This file is distributed under the same license as the Python package. +# FIRST AUTHOR , YEAR. +# +# Translators: +# Fred , 2018 +# Konge , 2019 +# focusheart , 2019 +# walkinrain , 2019 +# ppcfish , 2019 +# lishoujun , 2020 +# st z , 2020 +# Freesand Leo , 2022 +# +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: Python 3.9\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2022-11-04 14:34+0000\n" +"PO-Revision-Date: 2017-02-16 23:12+0000\n" +"Last-Translator: Freesand Leo , 2022\n" +"Language-Team: Chinese (China) (https://www.transifex.com/python-doc/teams/5390/zh_CN/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: zh_CN\n" +"Plural-Forms: nplurals=1; plural=0;\n" + +#: ../../library/hashlib.rst:2 +msgid ":mod:`hashlib` --- Secure hashes and message digests" +msgstr ":mod:`hashlib` --- 安全哈希与消息摘要" + +#: ../../library/hashlib.rst:10 +msgid "**Source code:** :source:`Lib/hashlib.py`" +msgstr "**源码:** :source:`Lib/hashlib.py`" + +#: ../../library/hashlib.rst:23 +msgid "" +"This module implements a common interface to many different secure hash and " +"message digest algorithms. Included are the FIPS secure hash algorithms " +"SHA1, SHA224, SHA256, SHA384, and SHA512 (defined in FIPS 180-2) as well as " +"RSA's MD5 algorithm (defined in Internet :rfc:`1321`). The terms \"secure " +"hash\" and \"message digest\" are interchangeable. Older algorithms were " +"called message digests. The modern term is secure hash." +msgstr "" +"这个模块针对不同的安全哈希和消息摘要算法实现了一个通用的接口。包括 FIPS 的 SHA1, SHA224, SHA256, SHA384, and " +"SHA512 (定义于 FIPS 180-2) 算法,以及 RSA 的 MD5 算法( 定义于 Internet " +":rfc:`1321`)。术语“安全哈希”和“消息摘要”是可互换的,较旧的算法被称为消息摘要,现代术语是安全哈希。" + +#: ../../library/hashlib.rst:32 +msgid "" +"If you want the adler32 or crc32 hash functions, they are available in the " +":mod:`zlib` module." +msgstr "如果你想找到 adler32 或 crc32 哈希函数,它们在 :mod:`zlib` 模块中。" + +#: ../../library/hashlib.rst:37 +msgid "" +"Some algorithms have known hash collision weaknesses, refer to the \"See " +"also\" section at the end." +msgstr "有些算法已知存在哈希碰撞弱点,请参考最后的“另请参阅”段。" + +#: ../../library/hashlib.rst:44 +msgid "Hash algorithms" +msgstr "哈希算法" + +#: ../../library/hashlib.rst:46 +msgid "" +"There is one constructor method named for each type of :dfn:`hash`. All " +"return a hash object with the same simple interface. For example: use " +":func:`sha256` to create a SHA-256 hash object. You can now feed this object" +" with :term:`bytes-like objects ` (normally " +":class:`bytes`) using the :meth:`update` method. At any point you can ask it" +" for the :dfn:`digest` of the concatenation of the data fed to it so far " +"using the :meth:`digest` or :meth:`hexdigest` methods." +msgstr "" +"每种类型的 :dfn:`hash` 都有一个构造器方法。 它们都返回一个具有相同的简单接口的 hash 对象。 例如,使用 use " +":func:`sha256` 创建一个 SHA-256 hash 对象。 你可以使用 :meth:`update` 方法向这个对象输入 " +":term:`字节类对象 ` (通常是 :class:`bytes`)。 在任何时候你都可以使用 " +":meth:`digest` 或 :meth:`hexdigest` 方法获得到目前为止输入这个对象的拼接数据的 :dfn:`digest`。" + +#: ../../library/hashlib.rst:56 +msgid "" +"For better multithreading performance, the Python :term:`GIL` is released " +"for data larger than 2047 bytes at object creation or on update." +msgstr "为了更好的多线程性能,在对象创建或者更新时,若数据大于2047字节则 Python 的 :term:`GIL` 会被释放。" + +#: ../../library/hashlib.rst:61 +msgid "" +"Feeding string objects into :meth:`update` is not supported, as hashes work " +"on bytes, not on characters." +msgstr "向 :meth:`update` 输入字符串对象是不被支持的,因为哈希基于字节而非字符。" + +#: ../../library/hashlib.rst:66 +msgid "" +"Constructors for hash algorithms that are always present in this module are " +":func:`sha1`, :func:`sha224`, :func:`sha256`, :func:`sha384`, " +":func:`sha512`, :func:`blake2b`, and :func:`blake2s`. :func:`md5` is " +"normally available as well, though it may be missing or blocked if you are " +"using a rare \"FIPS compliant\" build of Python. Additional algorithms may " +"also be available depending upon the OpenSSL library that Python uses on " +"your platform. On most platforms the :func:`sha3_224`, :func:`sha3_256`, " +":func:`sha3_384`, :func:`sha3_512`, :func:`shake_128`, :func:`shake_256` are" +" also available." +msgstr "" +"此模块中总是可用的哈希算法构造器有 :func:`sha1`, :func:`sha224`, :func:`sha256`, " +":func:`sha384`, :func:`sha512`, :func:`blake2b` 和 :func:`blake2s`。 " +":func:`md5` 通常也是可用的,但如果你在使用少见的 \"FIPS 兼容\" 的 Python 编译版本则可能会找不到它。 " +"此外还可能有一些附加的算法,具体取决于你的平台上的 Python 所使用的 OpenSSL 库。 在大部分平台上可用的还有 " +":func:`sha3_224`, :func:`sha3_256`, :func:`sha3_384`, :func:`sha3_512`, " +":func:`shake_128`, :func:`shake_256` 等等。·" + +#: ../../library/hashlib.rst:76 +msgid "" +"SHA3 (Keccak) and SHAKE constructors :func:`sha3_224`, :func:`sha3_256`, " +":func:`sha3_384`, :func:`sha3_512`, :func:`shake_128`, :func:`shake_256`." +msgstr "" +"SHA3 (Keccak) 和 SHAKE 构造器 :func:`sha3_224`, :func:`sha3_256`, " +":func:`sha3_384`, :func:`sha3_512`, :func:`shake_128`, :func:`shake_256`." + +#: ../../library/hashlib.rst:80 +msgid ":func:`blake2b` and :func:`blake2s` were added." +msgstr "添加了 :func:`blake2b` 和 :func:`blake2s` 。" + +#: ../../library/hashlib.rst:85 +msgid "" +"All hashlib constructors take a keyword-only argument *usedforsecurity* with" +" default value ``True``. A false value allows the use of insecure and " +"blocked hashing algorithms in restricted environments. ``False`` indicates " +"that the hashing algorithm is not used in a security context, e.g. as a non-" +"cryptographic one-way compression function." +msgstr "" +"所有 hashlib 的构造器都接受仅限关键字参数 *usedforsecurity* 且其默认值为 ``True``。 " +"设为假值即允许在受限的环境中使用不安全且阻塞的哈希算法。 ``False`` 表示此哈希算法不可用于安全场景,例如用作非加密的单向压缩函数。" + +#: ../../library/hashlib.rst:92 +msgid "Hashlib now uses SHA3 and SHAKE from OpenSSL 1.1.1 and newer." +msgstr "现在 hashlib 会使用 OpenSSL 1.1.1 或更新版本的 SHA3 和 SHAKE。" + +#: ../../library/hashlib.rst:94 +msgid "" +"For example, to obtain the digest of the byte string ``b'Nobody inspects the" +" spammish repetition'``::" +msgstr "例如,如果想获取字节串 ``b'Nobody inspects the spammish repetition'`` 的摘要::" + +#: ../../library/hashlib.rst:108 +msgid "More condensed:" +msgstr "更简要的写法:" + +#: ../../library/hashlib.rst:115 +msgid "" +"Is a generic constructor that takes the string *name* of the desired " +"algorithm as its first parameter. It also exists to allow access to the " +"above listed hashes as well as any other algorithms that your OpenSSL " +"library may offer. The named constructors are much faster than :func:`new` " +"and should be preferred." +msgstr "" +"一个接受所希望的算法对应的字符串 *name* 作为第一个形参的通用构造器。 它还允许访问上面列出的哈希算法以及你的 OpenSSL " +"库可能提供的任何其他算法。 同名的构造器要比 :func:`new` 更快所以应当优先使用。" + +#: ../../library/hashlib.rst:121 +msgid "Using :func:`new` with an algorithm provided by OpenSSL:" +msgstr "使用 :func:`new` 并附带由 OpenSSL 所提供了算法:" + +#: ../../library/hashlib.rst:128 +msgid "Hashlib provides the following constant attributes:" +msgstr "Hashlib 提供下列常量属性:" + +#: ../../library/hashlib.rst:132 +msgid "" +"A set containing the names of the hash algorithms guaranteed to be supported" +" by this module on all platforms. Note that 'md5' is in this list despite " +"some upstream vendors offering an odd \"FIPS compliant\" Python build that " +"excludes it." +msgstr "" +"一个集合,其中包含此模块在所有平台上都保证支持的哈希算法的名称。 请注意 'md5' 也在此清单中,虽然某些上游厂商提供了一个怪异的排除了此算法的 " +"\"FIPS 兼容\" Python 编译版本。" + +#: ../../library/hashlib.rst:141 +msgid "" +"A set containing the names of the hash algorithms that are available in the " +"running Python interpreter. These names will be recognized when passed to " +":func:`new`. :attr:`algorithms_guaranteed` will always be a subset. The " +"same algorithm may appear multiple times in this set under different names " +"(thanks to OpenSSL)." +msgstr "" +"一个集合,其中包含在所运行的 Python 解释器上可用的哈希算法的名称。 将这些名称传给 :func:`new` 时将可被识别。 " +":attr:`algorithms_guaranteed` 将总是它的一个子集。 同样的算法在此集合中可能以不同的名称出现多次(这是 OpenSSL " +"的原因)。" + +#: ../../library/hashlib.rst:149 +msgid "" +"The following values are provided as constant attributes of the hash objects" +" returned by the constructors:" +msgstr "下列值会以构造器所返回的哈希对象的常量属性的形式被提供:" + +#: ../../library/hashlib.rst:155 +msgid "The size of the resulting hash in bytes." +msgstr "以字节表示的结果哈希对象的大小。" + +#: ../../library/hashlib.rst:159 +msgid "The internal block size of the hash algorithm in bytes." +msgstr "以字节表示的哈希算法的内部块大小。" + +#: ../../library/hashlib.rst:161 +msgid "A hash object has the following attributes:" +msgstr "hash 对象具有以下属性:" + +#: ../../library/hashlib.rst:165 +msgid "" +"The canonical name of this hash, always lowercase and always suitable as a " +"parameter to :func:`new` to create another hash of this type." +msgstr "此哈希对象的规范名称,总是为小写形式并且总是可以作为 :func:`new` 的形参用来创建另一个此类型的哈希对象。" + +#: ../../library/hashlib.rst:168 +msgid "" +"The name attribute has been present in CPython since its inception, but " +"until Python 3.4 was not formally specified, so may not exist on some " +"platforms." +msgstr "该属性名称自被引入起即存在于 CPython 中,但在 Python 3.4 之前并未正式指明,因此可能不存在于某些平台上。" + +#: ../../library/hashlib.rst:173 +msgid "A hash object has the following methods:" +msgstr "哈希对象具有下列方法:" + +#: ../../library/hashlib.rst:178 +msgid "" +"Update the hash object with the :term:`bytes-like object`. Repeated calls " +"are equivalent to a single call with the concatenation of all the arguments:" +" ``m.update(a); m.update(b)`` is equivalent to ``m.update(a+b)``." +msgstr "" +"用 :term:`bytes-like object` 来更新哈希对象。 重复调用相当于单次调用并传入所有参数的拼接结果: ``m.update(a);" +" m.update(b)`` 等价于 ``m.update(a+b)``。" + +#: ../../library/hashlib.rst:183 +msgid "" +"The Python GIL is released to allow other threads to run while hash updates " +"on data larger than 2047 bytes is taking place when using hash algorithms " +"supplied by OpenSSL." +msgstr "当使用 OpenSSL 提供的哈希算法在大于 2047 字节的数据上执行哈希更新时 Python GIL 会被释放以允许其他线程运行。" + +#: ../../library/hashlib.rst:191 +msgid "" +"Return the digest of the data passed to the :meth:`update` method so far. " +"This is a bytes object of size :attr:`digest_size` which may contain bytes " +"in the whole range from 0 to 255." +msgstr "" +"返回当前已传给 :meth:`update` 方法的数据摘要。 这是一个大小为 :attr:`digest_size` 的字节串对象,字节串中可包含 0" +" 至 255 的完整取值范围。" + +#: ../../library/hashlib.rst:198 ../../library/hashlib.rst:226 +msgid "" +"Like :meth:`digest` except the digest is returned as a string object of " +"double length, containing only hexadecimal digits. This may be used to " +"exchange the value safely in email or other non-binary environments." +msgstr "" +"类似于 :meth:`digest` 但摘要会以两倍长度字符串对象的形式返回,其中仅包含十六进制数码。 " +"这可以被用于在电子邮件或其他非二进制环境中安全地交换数据值。" + +#: ../../library/hashlib.rst:205 +msgid "" +"Return a copy (\"clone\") of the hash object. This can be used to " +"efficiently compute the digests of data sharing a common initial substring." +msgstr "返回哈希对象的副本(“克隆”)。 这可被用来高效地计算共享相同初始子串的数据的摘要。" + +#: ../../library/hashlib.rst:210 +msgid "SHAKE variable length digests" +msgstr "SHAKE 可变长度摘要" + +#: ../../library/hashlib.rst:212 +msgid "" +"The :func:`shake_128` and :func:`shake_256` algorithms provide variable " +"length digests with length_in_bits//2 up to 128 or 256 bits of security. As " +"such, their digest methods require a length. Maximum length is not limited " +"by the SHAKE algorithm." +msgstr "" +":func:`shake_128` 和 :func:`shake_256` 算法提供安全的 length_in_bits//2 至 128 或 256 " +"位可变长度摘要。 为此,它们的摘要需指定一个长度。 SHAKE 算法不限制最大长度。" + +#: ../../library/hashlib.rst:219 +msgid "" +"Return the digest of the data passed to the :meth:`update` method so far. " +"This is a bytes object of size *length* which may contain bytes in the whole" +" range from 0 to 255." +msgstr "" +"返回当前已传给 :meth:`update` 方法的数据摘要。 这是一个大小为 *length* 的字节串对象,字节串中可包含 0 to 255 " +"的完整取值范围。" + +#: ../../library/hashlib.rst:232 +msgid "Key derivation" +msgstr "密钥派生" + +#: ../../library/hashlib.rst:234 +msgid "" +"Key derivation and key stretching algorithms are designed for secure " +"password hashing. Naive algorithms such as ``sha1(password)`` are not " +"resistant against brute-force attacks. A good password hashing function must" +" be tunable, slow, and include a `salt " +"`_." +msgstr "" +"密钥派生和密钥延展算法被设计用于安全密码哈希。 ``sha1(password)`` 这样的简单算法无法防御暴力攻击。 " +"好的密码哈希函数必须可以微调、放慢步调,并且包含 `加盐 " +"`_。" + +#: ../../library/hashlib.rst:242 +msgid "" +"The function provides PKCS#5 password-based key derivation function 2. It " +"uses HMAC as pseudorandom function." +msgstr "此函数提供 PKCS#5 基于密码的密钥派生函数 2。 它使用 HMAC 作为伪随机函数。" + +#: ../../library/hashlib.rst:245 +msgid "" +"The string *hash_name* is the desired name of the hash digest algorithm for " +"HMAC, e.g. 'sha1' or 'sha256'. *password* and *salt* are interpreted as " +"buffers of bytes. Applications and libraries should limit *password* to a " +"sensible length (e.g. 1024). *salt* should be about 16 or more bytes from a " +"proper source, e.g. :func:`os.urandom`." +msgstr "" +"字符串 *hash_name* 是要求用于 HMAC 的哈希摘要算法的名称,例如 'sha1' 或 'sha256'。 *password* 和 " +"*salt* 会以字节串缓冲区的形式被解析。 应用和库应当将 *password* 限制在合理长度 (例如 1024)。 *salt* " +"应当为适当来源例如 :func:`os.urandom` 的大约 16 个或更多的字节串数据。" + +#: ../../library/hashlib.rst:251 +msgid "" +"The number of *iterations* should be chosen based on the hash algorithm and " +"computing power. As of 2013, at least 100,000 iterations of SHA-256 are " +"suggested." +msgstr "*iterations* 数值应当基于哈希算法和算力来选择。 在 2013 年时,建议至少为 100,000 次 SHA-256 迭代。" + +#: ../../library/hashlib.rst:255 +msgid "" +"*dklen* is the length of the derived key. If *dklen* is ``None`` then the " +"digest size of the hash algorithm *hash_name* is used, e.g. 64 for SHA-512." +msgstr "" +"*dklen* 为派生密钥的长度。 如果 *dklen* 为 ``None`` 则会使用哈希算法 *hash_name* 的摘要大小,例如 " +"SHA-512 为 64。" + +#: ../../library/hashlib.rst:267 +msgid "" +"A fast implementation of *pbkdf2_hmac* is available with OpenSSL. The " +"Python implementation uses an inline version of :mod:`hmac`. It is about " +"three times slower and doesn't release the GIL." +msgstr "" +"随同 OpenSSL 提供了一个快速的 *pbkdf2_hmac* 实现。 Python 实现是使用 :mod:`hmac` 的内联版本。 " +"它的速度大约要慢上三倍并且不会释放 GIL。" + +#: ../../library/hashlib.rst:273 +msgid "" +"The function provides scrypt password-based key derivation function as " +"defined in :rfc:`7914`." +msgstr "此函数提供基于密码加密的密钥派生函数,其定义参见 :rfc:`7914`。" + +#: ../../library/hashlib.rst:276 +msgid "" +"*password* and *salt* must be :term:`bytes-like objects `. Applications and libraries should limit *password* to a sensible " +"length (e.g. 1024). *salt* should be about 16 or more bytes from a proper " +"source, e.g. :func:`os.urandom`." +msgstr "" +"*password* 和 *salt* 必须为 :term:`字节类对象 `。 应用和库应当将 " +"*password* 限制在合理长度 (例如 1024)。 *salt* 应当为适当来源例如 :func:`os.urandom` 的大约 16 " +"个或更多的字节串数据。" + +#: ../../library/hashlib.rst:281 +msgid "" +"*n* is the CPU/Memory cost factor, *r* the block size, *p* parallelization " +"factor and *maxmem* limits memory (OpenSSL 1.1.0 defaults to 32 MiB). " +"*dklen* is the length of the derived key." +msgstr "" +"*n* 为 CPU/内存开销因子,*r* 为块大小,*p* 为并行化因子,*maxmem* 为内存限制 (OpenSSL 1.1.0 默认为 32 " +"MiB)。 *dklen* 为派生密钥的长度。" + +#: ../../library/hashlib.rst:286 +msgid ":ref:`Availability `: OpenSSL 1.1+." +msgstr ":ref:`可用性 `: OpenSSL 1.1+。" + +#: ../../library/hashlib.rst:291 +msgid "BLAKE2" +msgstr "BLAKE2" + +#: ../../library/hashlib.rst:298 +msgid "" +"BLAKE2_ is a cryptographic hash function defined in :rfc:`7693` that comes " +"in two flavors:" +msgstr "BLAKE2_ 是在 :rfc:`7693` 中定义的加密哈希函数,它有两种形式:" + +#: ../../library/hashlib.rst:301 +msgid "" +"**BLAKE2b**, optimized for 64-bit platforms and produces digests of any size" +" between 1 and 64 bytes," +msgstr "**BLAKE2b**,针对 64 位平台进行优化,并会生成长度介于 1 和 64 字节之间任意大小的摘要。" + +#: ../../library/hashlib.rst:304 +msgid "" +"**BLAKE2s**, optimized for 8- to 32-bit platforms and produces digests of " +"any size between 1 and 32 bytes." +msgstr "**BLAKE2s**,针对 8 至 32 位平台进行优化,并会生成长度介于 1 和 32 字节之间任意大小的摘要。" + +#: ../../library/hashlib.rst:307 +msgid "" +"BLAKE2 supports **keyed mode** (a faster and simpler replacement for HMAC_)," +" **salted hashing**, **personalization**, and **tree hashing**." +msgstr "" +"BLAKE2 支持 **keyed mode** (HMAC_ 的更快速更简单的替代), **salted hashing**, " +"**personalization** 和 **tree hashing**." + +#: ../../library/hashlib.rst:310 +msgid "" +"Hash objects from this module follow the API of standard library's " +":mod:`hashlib` objects." +msgstr "此模块的哈希对象遵循标准库 :mod:`hashlib` 对象的 API。" + +#: ../../library/hashlib.rst:315 +msgid "Creating hash objects" +msgstr "创建哈希对象" + +#: ../../library/hashlib.rst:317 +msgid "New hash objects are created by calling constructor functions:" +msgstr "新哈希对象可通过调用构造器函数来创建:" + +#: ../../library/hashlib.rst:331 +msgid "" +"These functions return the corresponding hash objects for calculating " +"BLAKE2b or BLAKE2s. They optionally take these general parameters:" +msgstr "这些函数返回用于计算 BLAKE2b 或 BLAKE2s 的相应的哈希对象。 它们接受下列可选通用形参:" + +#: ../../library/hashlib.rst:334 +msgid "" +"*data*: initial chunk of data to hash, which must be :term:`bytes-like " +"object`. It can be passed only as positional argument." +msgstr "*data*: 要哈希的初始数据块,它必须为 :term:`bytes-like object`。 它只能作为位置参数传入。" + +#: ../../library/hashlib.rst:337 +msgid "*digest_size*: size of output digest in bytes." +msgstr "*digest_size*: 以字节数表示的输出摘要大小。" + +#: ../../library/hashlib.rst:339 +msgid "" +"*key*: key for keyed hashing (up to 64 bytes for BLAKE2b, up to 32 bytes for" +" BLAKE2s)." +msgstr "*key*: 用于密钥哈希的密钥(对于 BLAKE2b 最长 64 字节,对于 BLAKE2s 最长 32 字节)。" + +#: ../../library/hashlib.rst:342 +msgid "" +"*salt*: salt for randomized hashing (up to 16 bytes for BLAKE2b, up to 8 " +"bytes for BLAKE2s)." +msgstr "*salt*: 用于随机哈希的盐值(对于 BLAKE2b 最长 16 字节,对于 BLAKE2s 最长 8 字节)。" + +#: ../../library/hashlib.rst:345 +msgid "" +"*person*: personalization string (up to 16 bytes for BLAKE2b, up to 8 bytes " +"for BLAKE2s)." +msgstr "*person*: 个性化字符串(对于 BLAKE2b 最长 16 字节,对于 BLAKE2s 最长 8 字节)。" + +#: ../../library/hashlib.rst:348 +msgid "The following table shows limits for general parameters (in bytes):" +msgstr "下表显示了常规参数的限制(以字节为单位):" + +#: ../../library/hashlib.rst:351 +msgid "Hash" +msgstr "Hash" + +#: ../../library/hashlib.rst:351 +msgid "digest_size" +msgstr "目标长度" + +#: ../../library/hashlib.rst:351 +msgid "len(key)" +msgstr "长度(键)" + +#: ../../library/hashlib.rst:351 +msgid "len(salt)" +msgstr "长度(盐)" + +#: ../../library/hashlib.rst:351 +msgid "len(person)" +msgstr "长度(个人)" + +#: ../../library/hashlib.rst:353 +msgid "BLAKE2b" +msgstr "BLAKE2b" + +#: ../../library/hashlib.rst:353 ../../library/hashlib.rst:353 +msgid "64" +msgstr "64" + +#: ../../library/hashlib.rst:353 ../../library/hashlib.rst:353 +msgid "16" +msgstr "16" + +#: ../../library/hashlib.rst:354 +msgid "BLAKE2s" +msgstr "BLAKE2s" + +#: ../../library/hashlib.rst:354 ../../library/hashlib.rst:354 +msgid "32" +msgstr "32" + +#: ../../library/hashlib.rst:354 ../../library/hashlib.rst:354 +msgid "8" +msgstr "8" + +#: ../../library/hashlib.rst:359 +msgid "" +"BLAKE2 specification defines constant lengths for salt and personalization " +"parameters, however, for convenience, this implementation accepts byte " +"strings of any size up to the specified length. If the length of the " +"parameter is less than specified, it is padded with zeros, thus, for " +"example, ``b'salt'`` and ``b'salt\\x00'`` is the same value. (This is not " +"the case for *key*.)" +msgstr "" +"BLAKE2 规格描述为盐值和个性化形参定义了固定的长度,但是为了方便起见,此实现接受指定在长度以内的任意大小的字节串。 " +"如果形参长度小于指定值,它将以零值进行填充,因此举例来说,``b'salt'`` 和 ``b'salt\\x00'`` 为相同的值 (*key* " +"的情况则并非如此。)" + +#: ../../library/hashlib.rst:366 +msgid "These sizes are available as module `constants`_ described below." +msgstr "如下面的模块 `constants`_ 所描述,这些是可用的大小取值。" + +#: ../../library/hashlib.rst:368 +msgid "" +"Constructor functions also accept the following tree hashing parameters:" +msgstr "构造器函数还接受下列树形哈希形参:" + +#: ../../library/hashlib.rst:370 +msgid "*fanout*: fanout (0 to 255, 0 if unlimited, 1 in sequential mode)." +msgstr "*fanout*: 扇出值 (0 至 255,如无限制即为 0,连续模式下为 1)。" + +#: ../../library/hashlib.rst:372 +msgid "" +"*depth*: maximal depth of tree (1 to 255, 255 if unlimited, 1 in sequential " +"mode)." +msgstr "*depth*: 树的最大深度 (1 至 255,如无限制则为 255,连续模式下为 1)。" + +#: ../../library/hashlib.rst:375 +msgid "" +"*leaf_size*: maximal byte length of leaf (0 to ``2**32-1``, 0 if unlimited " +"or in sequential mode)." +msgstr "*leaf_size*: 叶子的最大字节长度 (0 至 ``2**32-1``,如无限制或在连续模式下则为 0)。" + +#: ../../library/hashlib.rst:378 +msgid "" +"*node_offset*: node offset (0 to ``2**64-1`` for BLAKE2b, 0 to ``2**48-1`` " +"for BLAKE2s, 0 for the first, leftmost, leaf, or in sequential mode)." +msgstr "" +"*node_offset*: 节点的偏移量 (对于 BLAKE2b 为 0 至 ``2**64-1``,对于 BLAKE2s 为 0 至 " +"``2**48-1``,对于最多边的第一个叶子或在连续模式下则为 0)。" + +#: ../../library/hashlib.rst:381 +msgid "" +"*node_depth*: node depth (0 to 255, 0 for leaves, or in sequential mode)." +msgstr "*node_depth*: 节点深度 (0 至 255,对于叶子或在连续模式下则为 0)。" + +#: ../../library/hashlib.rst:383 +msgid "" +"*inner_size*: inner digest size (0 to 64 for BLAKE2b, 0 to 32 for BLAKE2s, 0" +" in sequential mode)." +msgstr "" +"*inner_size*: 内部摘要大小 (对于 BLAKE2b 为 0 至 64,对于 BLAKE2s 为 0 至 32,连续模式下则为 0)。" + +#: ../../library/hashlib.rst:386 +msgid "" +"*last_node*: boolean indicating whether the processed node is the last one " +"(`False` for sequential mode)." +msgstr "*last_node*: 一个布尔值,指明所处理的节点是否为最后一个 (连续模式下则为 `False`)。" + +#: ../../library/hashlib.rst:392 +msgid "" +"See section 2.10 in `BLAKE2 specification " +"`_ for comprehensive review of tree " +"hashing." +msgstr "" +"请参阅 `BLAKE2 规格描述 `_ 第 2.10 " +"节获取有关树形哈希的完整说明。" + +#: ../../library/hashlib.rst:398 +msgid "Constants" +msgstr "常数" + +#: ../../library/hashlib.rst:403 +msgid "Salt length (maximum length accepted by constructors)." +msgstr "盐值长度(构造器所接受的最大长度)。" + +#: ../../library/hashlib.rst:409 +msgid "" +"Personalization string length (maximum length accepted by constructors)." +msgstr "个性化字符串长度(构造器所接受的最大长度)。" + +#: ../../library/hashlib.rst:415 +msgid "Maximum key size." +msgstr "最大密钥长度。" + +#: ../../library/hashlib.rst:421 +msgid "Maximum digest size that the hash function can output." +msgstr "哈希函数可输出的最大摘要长度。" + +#: ../../library/hashlib.rst:425 +msgid "Examples" +msgstr "示例" + +#: ../../library/hashlib.rst:428 +msgid "Simple hashing" +msgstr "简单哈希" + +#: ../../library/hashlib.rst:430 +msgid "" +"To calculate hash of some data, you should first construct a hash object by " +"calling the appropriate constructor function (:func:`blake2b` or " +":func:`blake2s`), then update it with the data by calling :meth:`update` on " +"the object, and, finally, get the digest out of the object by calling " +":meth:`digest` (or :meth:`hexdigest` for hex-encoded string)." +msgstr "" +"要计算某个数据的哈希值,你应该首先通过调用适当的构造器函数 (:func:`blake2b` 或 :func:`blake2s`) " +"来构造一个哈希对象,然后通过在该对象上调用 :meth:`update` 来更新目标数据,最后通过调用 :meth:`digest` " +"(或针对十六进制编码字符串的 :meth:`hexdigest`) 来获取该对象的摘要。" + +#: ../../library/hashlib.rst:443 +msgid "" +"As a shortcut, you can pass the first chunk of data to update directly to " +"the constructor as the positional argument:" +msgstr "作为快捷方式,你可以直接以位置参数的形式向构造器传入第一个数据块来直接更新:" + +#: ../../library/hashlib.rst:450 +msgid "" +"You can call :meth:`hash.update` as many times as you need to iteratively " +"update the hash:" +msgstr "你可以多次调用 :meth:`hash.update` 至你所想要的任意次数以迭代地更新哈希值:" + +#: ../../library/hashlib.rst:463 +msgid "Using different digest sizes" +msgstr "使用不同的摘要大小" + +#: ../../library/hashlib.rst:465 +msgid "" +"BLAKE2 has configurable size of digests up to 64 bytes for BLAKE2b and up to" +" 32 bytes for BLAKE2s. For example, to replace SHA-1 with BLAKE2b without " +"changing the size of output, we can tell BLAKE2b to produce 20-byte digests:" +msgstr "" +"BLAKE2 具有可配置的摘要大小,对于 BLAKE2b 最多 64 字节,对于 BLAKE2s 最多 32 字节。 例如,要使用 BLAKE2b " +"来替代 SHA-1 而不改变输出大小,我们可以让 BLAKE2b 产生 20 个字节的摘要:" + +#: ../../library/hashlib.rst:479 +msgid "" +"Hash objects with different digest sizes have completely different outputs " +"(shorter hashes are *not* prefixes of longer hashes); BLAKE2b and BLAKE2s " +"produce different outputs even if the output length is the same:" +msgstr "" +"不同摘要大小的哈希对象具有完全不同的输出(较短哈希值 *并非* 较长哈希值的前缀);即使输出长度相同,BLAKE2b 和 BLAKE2s " +"也会产生不同的输出:" + +#: ../../library/hashlib.rst:495 +msgid "Keyed hashing" +msgstr "密钥哈希" + +#: ../../library/hashlib.rst:497 +msgid "" +"Keyed hashing can be used for authentication as a faster and simpler " +"replacement for `Hash-based message authentication code " +"`_ (HMAC). BLAKE2 can be securely used " +"in prefix-MAC mode thanks to the indifferentiability property inherited from" +" BLAKE." +msgstr "" +"带密钥的哈希运算可被用于身份验证,作为 `基于哈希的消息验证代码 `_ " +"(HMAC) 的一种更快速更简单的替代。 BLAKE2 可被安全地用于前缀 MAC 模式,这是由于它从 BLAKE 继承而来的不可区分特性。" + +#: ../../library/hashlib.rst:503 +msgid "" +"This example shows how to get a (hex-encoded) 128-bit authentication code " +"for message ``b'message data'`` with key ``b'pseudorandom key'``::" +msgstr "" +"这个例子演示了如何使用密钥 ``b'pseudorandom key'`` 来为 ``b'message data'`` " +"获取一个(十六进制编码的)128 位验证代码::" + +#: ../../library/hashlib.rst:513 +msgid "" +"As a practical example, a web application can symmetrically sign cookies " +"sent to users and later verify them to make sure they weren't tampered " +"with::" +msgstr "作为实际的例子,一个 Web 应用可为发送给用户的 cookies 进行对称签名,并在之后对其进行验证以确保它们没有被篡改::" + +#: ../../library/hashlib.rst:542 +msgid "" +"Even though there's a native keyed hashing mode, BLAKE2 can, of course, be " +"used in HMAC construction with :mod:`hmac` module::" +msgstr "即使存在原生的密钥哈希模式,BLAKE2 也同样可在 :mod:`hmac` 模块的 HMAC 构造过程中使用::" + +#: ../../library/hashlib.rst:553 +msgid "Randomized hashing" +msgstr "随机哈希" + +#: ../../library/hashlib.rst:555 +msgid "" +"By setting *salt* parameter users can introduce randomization to the hash " +"function. Randomized hashing is useful for protecting against collision " +"attacks on the hash function used in digital signatures." +msgstr "用户可通过设置 *salt* 形参来为哈希函数引入随机化。 随机哈希适用于防止对数字签名中使用的哈希函数进行碰撞攻击。" + +#: ../../library/hashlib.rst:559 +msgid "" +"Randomized hashing is designed for situations where one party, the message " +"preparer, generates all or part of a message to be signed by a second party," +" the message signer. If the message preparer is able to find cryptographic " +"hash function collisions (i.e., two messages producing the same hash value)," +" then they might prepare meaningful versions of the message that would " +"produce the same hash value and digital signature, but with different " +"results (e.g., transferring $1,000,000 to an account, rather than $10). " +"Cryptographic hash functions have been designed with collision resistance as" +" a major goal, but the current concentration on attacking cryptographic hash" +" functions may result in a given cryptographic hash function providing less " +"collision resistance than expected. Randomized hashing offers the signer " +"additional protection by reducing the likelihood that a preparer can " +"generate two or more messages that ultimately yield the same hash value " +"during the digital signature generation process --- even if it is practical " +"to find collisions for the hash function. However, the use of randomized " +"hashing may reduce the amount of security provided by a digital signature " +"when all portions of the message are prepared by the signer." +msgstr "" +"随机哈希被设计用来处理当一方(消息准备者)要生成由另一方(消息签名者)进行签名的全部或部分消息的情况。 " +"如果消息准备者能够找到加密哈希函数的碰撞现象(即两条消息产生相同的哈希值),则他们就可以准备将产生相同哈希值和数字签名但却具有不同结果的有意义的消息版本(例如向某个账户转入" +" $1,000,000 而不是 $10)。 " +"加密哈希函数的设计都是以防碰撞性能为其主要目标之一的,但是当前针对加密哈希函数的集中攻击可能导致特定加密哈希函数所提供的防碰撞性能低于预期。 " +"随机哈希为签名者提供了额外的保护,可以降低准备者在数字签名生成过程中使得两条或更多条消息最终产生相同哈希值的可能性 --- " +"即使为特定哈希函数找到碰撞现象是可行的。 但是,当消息的所有部分均由签名者准备时,使用随机哈希可能降低数字签名所提供的安全性。" + +#: ../../library/hashlib.rst:578 +msgid "" +"(`NIST SP-800-106 \"Randomized Hashing for Digital Signatures\" " +"`_)" +msgstr "" +"(`NIST SP-800-106 \"数字签名的随机哈希\" " +"`_)" + +#: ../../library/hashlib.rst:581 +msgid "" +"In BLAKE2 the salt is processed as a one-time input to the hash function " +"during initialization, rather than as an input to each compression function." +msgstr "在 BLAKE2 中,盐值会在初始化期间作为对哈希函数的一次性输入而不是对每个压缩函数的输入来处理。" + +#: ../../library/hashlib.rst:586 +msgid "" +"*Salted hashing* (or just hashing) with BLAKE2 or any other general-purpose " +"cryptographic hash function, such as SHA-256, is not suitable for hashing " +"passwords. See `BLAKE2 FAQ `_ for more information." +msgstr "" +"使用 BLAKE2 或任何其他通用加密哈希函数例如 SHA-256 进行 *加盐哈希* (或纯哈希) 并不适用于哈希密码。 请参阅 `BLAKE2 " +"FAQ `_ 了解更多信息。" + +#: ../../library/hashlib.rst:609 +msgid "Personalization" +msgstr "个性化" + +#: ../../library/hashlib.rst:611 +msgid "" +"Sometimes it is useful to force hash function to produce different digests " +"for the same input for different purposes. Quoting the authors of the Skein " +"hash function:" +msgstr "出于不同的目的强制让哈希函数为相同的输入生成不同的摘要有时也是有用的。 正如 Skein 哈希函数的作者所言:" + +#: ../../library/hashlib.rst:615 +msgid "" +"We recommend that all application designers seriously consider doing this; " +"we have seen many protocols where a hash that is computed in one part of the" +" protocol can be used in an entirely different part because two hash " +"computations were done on similar or related data, and the attacker can " +"force the application to make the hash inputs the same. Personalizing each " +"hash function used in the protocol summarily stops this type of attack." +msgstr "" +"我们建议所有应用设计者慎重考虑这种做法;我们已看到有许多协议在协议的某一部分中计算出来的哈希值在另一个完全不同的部分中也可以被使用,因为两次哈希计算是针对类似或相关的数据进行的,这样攻击者可以强制应用为相同的输入生成哈希值。" +" 个性化协议中所使用的每个哈希函数将有效地阻止这种类型的攻击。" + +#: ../../library/hashlib.rst:622 +msgid "" +"(`The Skein Hash Function Family `_, p. 21)" +msgstr "" +"(`Skein 哈希函数族 `_, p. 21)" + +#: ../../library/hashlib.rst:626 +msgid "BLAKE2 can be personalized by passing bytes to the *person* argument::" +msgstr "BLAKE2 可通过向 *person* 参数传入字节串来进行个性化::" + +#: ../../library/hashlib.rst:640 +msgid "" +"Personalization together with the keyed mode can also be used to derive " +"different keys from a single one." +msgstr "个性化配合密钥模式也可被用来从单个密钥派生出多个不同密钥。" + +#: ../../library/hashlib.rst:654 +msgid "Tree mode" +msgstr "树形模式" + +#: ../../library/hashlib.rst:656 +msgid "Here's an example of hashing a minimal tree with two leaf nodes::" +msgstr "以下是对包含两个叶子节点的最小树进行哈希的例子::" + +#: ../../library/hashlib.rst:662 +msgid "" +"This example uses 64-byte internal digests, and returns the 32-byte final " +"digest::" +msgstr "这个例子使用 64 字节内部摘要,返回 32 字节最终摘要::" + +#: ../../library/hashlib.rst:692 +msgid "Credits" +msgstr "开发人员" + +#: ../../library/hashlib.rst:694 +msgid "" +"BLAKE2_ was designed by *Jean-Philippe Aumasson*, *Samuel Neves*, *Zooko " +"Wilcox-O'Hearn*, and *Christian Winnerlein* based on SHA-3_ finalist BLAKE_ " +"created by *Jean-Philippe Aumasson*, *Luca Henzen*, *Willi Meier*, and " +"*Raphael C.-W. Phan*." +msgstr "" +"BLAKE2_ 是由 *Jean-Philippe Aumasson*, *Samuel Neves*, *Zooko Wilcox-O'Hearn* " +"和 *Christian Winnerlein* 基于 *Jean-Philippe Aumasson*, *Luca Henzen*, *Willi " +"Meier* 和 *Raphael C.-W. Phan* 所创造的 SHA-3_ 入围方案 BLAKE_ 进行设计的。" + +#: ../../library/hashlib.rst:699 +msgid "" +"It uses core algorithm from ChaCha_ cipher designed by *Daniel J. " +"Bernstein*." +msgstr "它使用的核心算法来自由 *Daniel J. Bernstein* 所设计的 ChaCha_ 加密。" + +#: ../../library/hashlib.rst:701 +msgid "" +"The stdlib implementation is based on pyblake2_ module. It was written by " +"*Dmitry Chestnykh* based on C implementation written by *Samuel Neves*. The " +"documentation was copied from pyblake2_ and written by *Dmitry Chestnykh*." +msgstr "" +"stdlib 实现是基于 pyblake2_ 模块的。 它由 *Dmitry Chestnykh* 在 *Samuel Neves* 所编写的 C " +"实现的基础上编写。 此文档拷贝自 pyblake2_ 并由 *Dmitry Chestnykh* 撰写。" + +#: ../../library/hashlib.rst:705 +msgid "The C code was partly rewritten for Python by *Christian Heimes*." +msgstr "C 代码由 *Christian Heimes* 针对 Python 进行了部分的重写。" + +#: ../../library/hashlib.rst:707 +msgid "" +"The following public domain dedication applies for both C hash function " +"implementation, extension code, and this documentation:" +msgstr "以下公共领域贡献同时适用于 C 哈希函数实现、扩展代码和本文档:" + +#: ../../library/hashlib.rst:710 +msgid "" +"To the extent possible under law, the author(s) have dedicated all copyright" +" and related and neighboring rights to this software to the public domain " +"worldwide. This software is distributed without any warranty." +msgstr "在法律许可的范围内,作者已将此软件的全部版权以及关联和邻接权利贡献到全球公共领域。 此软件的发布不附带任何担保。" + +#: ../../library/hashlib.rst:714 +msgid "" +"You should have received a copy of the CC0 Public Domain Dedication along " +"with this software. If not, see " +"https://creativecommons.org/publicdomain/zero/1.0/." +msgstr "" +"你应该已收到此软件附带的 CC0 公共领域专属证书的副本。 如果没有,请参阅 " +"https://creativecommons.org/publicdomain/zero/1.0/。" + +#: ../../library/hashlib.rst:718 +msgid "" +"The following people have helped with development or contributed their " +"changes to the project and the public domain according to the Creative " +"Commons Public Domain Dedication 1.0 Universal:" +msgstr "根据创意分享公共领域贡献 1.0 通用规范,下列人士为此项目的开发提供了帮助或对公共领域的修改作出了贡献:" + +#: ../../library/hashlib.rst:722 +msgid "*Alexandr Sokolovskiy*" +msgstr "*Alexandr Sokolovskiy*" + +#: ../../library/hashlib.rst:736 +msgid "Module :mod:`hmac`" +msgstr "模块 :mod:`hmac`" + +#: ../../library/hashlib.rst:736 +msgid "A module to generate message authentication codes using hashes." +msgstr "使用哈希运算来生成消息验证代码的模块。" + +#: ../../library/hashlib.rst:739 +msgid "Module :mod:`base64`" +msgstr "模块 :mod:`base64`" + +#: ../../library/hashlib.rst:739 +msgid "Another way to encode binary hashes for non-binary environments." +msgstr "针对非二进制环境对二进制哈希值进行编辑的另一种方式。" + +#: ../../library/hashlib.rst:742 +msgid "https://blake2.net" +msgstr "https://blake2.net" + +#: ../../library/hashlib.rst:742 +msgid "Official BLAKE2 website." +msgstr "BLAKE2 官方网站" + +#: ../../library/hashlib.rst:745 +msgid "" +"https://csrc.nist.gov/csrc/media/publications/fips/180/2/archive/2002-08-01/documents/fips180-2.pdf" +msgstr "" +"https://csrc.nist.gov/csrc/media/publications/fips/180/2/archive/2002-08-01/documents/fips180-2.pdf" + +#: ../../library/hashlib.rst:745 +msgid "The FIPS 180-2 publication on Secure Hash Algorithms." +msgstr "有关安全哈希算法的 FIPS 180-2 出版物。" + +#: ../../library/hashlib.rst:749 +msgid "" +"https://en.wikipedia.org/wiki/Cryptographic_hash_function#Cryptographic_hash_algorithms" +msgstr "" +"https://en.wikipedia.org/wiki/Cryptographic_hash_function#Cryptographic_hash_algorithms" + +#: ../../library/hashlib.rst:748 +msgid "" +"Wikipedia article with information on which algorithms have known issues and" +" what that means regarding their use." +msgstr "包含关于哪些算法存在已知问题以及对其使用所造成的影响的信息的 Wikipedia 文章。" + +#: ../../library/hashlib.rst:751 +msgid "https://www.ietf.org/rfc/rfc2898.txt" +msgstr "https://www.ietf.org/rfc/rfc2898.txt" + +#: ../../library/hashlib.rst:752 +msgid "PKCS #5: Password-Based Cryptography Specification Version 2.0" +msgstr "PKCS #5: 基于密码的加密规范描述 2.0 版" diff --git a/library/heapq.po b/library/heapq.po new file mode 100644 index 000000000..e3c51ddd2 --- /dev/null +++ b/library/heapq.po @@ -0,0 +1,456 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) 2001-2022, Python Software Foundation +# This file is distributed under the same license as the Python package. +# FIRST AUTHOR , YEAR. +# +# Translators: +# Jerry Chen , 2017 +# Alpha Du , 2019 +# iceyasha , 2019 +# Freesand Leo , 2022 +# +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: Python 3.9\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2022-11-04 14:34+0000\n" +"PO-Revision-Date: 2017-02-16 23:13+0000\n" +"Last-Translator: Freesand Leo , 2022\n" +"Language-Team: Chinese (China) (https://www.transifex.com/python-doc/teams/5390/zh_CN/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: zh_CN\n" +"Plural-Forms: nplurals=1; plural=0;\n" + +#: ../../library/heapq.rst:2 +msgid ":mod:`heapq` --- Heap queue algorithm" +msgstr ":mod:`heapq` --- 堆队列算法" + +#: ../../library/heapq.rst:12 +msgid "**Source code:** :source:`Lib/heapq.py`" +msgstr "**源码:**:source:`Lib/heapq.py`" + +#: ../../library/heapq.rst:16 +msgid "" +"This module provides an implementation of the heap queue algorithm, also " +"known as the priority queue algorithm." +msgstr "这个模块提供了堆队列算法的实现,也称为优先队列算法。" + +#: ../../library/heapq.rst:19 +msgid "" +"Heaps are binary trees for which every parent node has a value less than or " +"equal to any of its children. This implementation uses arrays for which " +"``heap[k] <= heap[2*k+1]`` and ``heap[k] <= heap[2*k+2]`` for all *k*, " +"counting elements from zero. For the sake of comparison, non-existing " +"elements are considered to be infinite. The interesting property of a heap " +"is that its smallest element is always the root, ``heap[0]``." +msgstr "" +"堆是一个二叉树,它的每个父节点的值都只会小于或等于所有孩子节点(的值)。 它使用了数组来实现:从零开始计数,对于所有的 *k* ,都有 " +"``heap[k] <= heap[2*k+1]`` 和 ``heap[k] <= heap[2*k+2]``。 " +"为了便于比较,不存在的元素被认为是无限大。 堆最有趣的特性在于最小的元素总是在根结点:``heap[0]``。" + +#: ../../library/heapq.rst:26 +msgid "" +"The API below differs from textbook heap algorithms in two aspects: (a) We " +"use zero-based indexing. This makes the relationship between the index for " +"a node and the indexes for its children slightly less obvious, but is more " +"suitable since Python uses zero-based indexing. (b) Our pop method returns " +"the smallest item, not the largest (called a \"min heap\" in textbooks; a " +"\"max heap\" is more common in texts because of its suitability for in-place" +" sorting)." +msgstr "" +"这个API与教材的堆算法实现有所不同,具体区别有两方面:(a)我们使用了从零开始的索引。这使得节点和其孩子节点索引之间的关系不太直观但更加适合,因为 " +"Python 使用从零开始的索引。 (b)我们的 pop " +"方法返回最小的项而不是最大的项(这在教材中称为“最小堆”;而“最大堆”在教材中更为常见,因为它更适用于原地排序)。" + +#: ../../library/heapq.rst:33 +msgid "" +"These two make it possible to view the heap as a regular Python list without" +" surprises: ``heap[0]`` is the smallest item, and ``heap.sort()`` maintains " +"the heap invariant!" +msgstr "" +"基于这两方面,把堆看作原生的Python list也没什么奇怪的: ``heap[0]`` 表示最小的元素,同时 ``heap.sort()`` " +"维护了堆的不变性!" + +#: ../../library/heapq.rst:37 +msgid "" +"To create a heap, use a list initialized to ``[]``, or you can transform a " +"populated list into a heap via function :func:`heapify`." +msgstr "" +"要创建一个堆,可以使用list来初始化为 ``[]`` ,或者你可以通过一个函数 :func:`heapify` ,来把一个list转换成堆。" + +#: ../../library/heapq.rst:40 +msgid "The following functions are provided:" +msgstr "定义了以下函数:" + +#: ../../library/heapq.rst:45 +msgid "Push the value *item* onto the *heap*, maintaining the heap invariant." +msgstr "将 *item* 的值加入 *heap* 中,保持堆的不变性。" + +#: ../../library/heapq.rst:50 +msgid "" +"Pop and return the smallest item from the *heap*, maintaining the heap " +"invariant. If the heap is empty, :exc:`IndexError` is raised. To access " +"the smallest item without popping it, use ``heap[0]``." +msgstr "" +"弹出并返回 *heap* 的最小的元素,保持堆的不变性。如果堆为空,抛出 :exc:`IndexError` 。使用 ``heap[0]`` " +",可以只访问最小的元素而不弹出它。" + +#: ../../library/heapq.rst:57 +msgid "" +"Push *item* on the heap, then pop and return the smallest item from the " +"*heap*. The combined action runs more efficiently than :func:`heappush` " +"followed by a separate call to :func:`heappop`." +msgstr "" +"将 *item* 放入堆中,然后弹出并返回 *heap* 的最小元素。该组合操作比先调用  :func:`heappush` 再调用 " +":func:`heappop` 运行起来更有效率。" + +#: ../../library/heapq.rst:64 +msgid "Transform list *x* into a heap, in-place, in linear time." +msgstr "将list *x* 转换成堆,原地,线性时间内。" + +#: ../../library/heapq.rst:69 +msgid "" +"Pop and return the smallest item from the *heap*, and also push the new " +"*item*. The heap size doesn't change. If the heap is empty, " +":exc:`IndexError` is raised." +msgstr "" +"弹出并返回 *heap* 中最小的一项,同时推入新的 *item*。 堆的大小不变。 如果堆为空则引发 :exc:`IndexError`。" + +#: ../../library/heapq.rst:72 +msgid "" +"This one step operation is more efficient than a :func:`heappop` followed by" +" :func:`heappush` and can be more appropriate when using a fixed-size heap. " +"The pop/push combination always returns an element from the heap and " +"replaces it with *item*." +msgstr "" +"这个单步骤操作比 :func:`heappop` 加 :func:`heappush` 更高效,并且在使用固定大小的堆时更为适宜。 pop/push " +"组合总是会从堆中返回一个元素并将其替换为 *item*。" + +#: ../../library/heapq.rst:77 +msgid "" +"The value returned may be larger than the *item* added. If that isn't " +"desired, consider using :func:`heappushpop` instead. Its push/pop " +"combination returns the smaller of the two values, leaving the larger value " +"on the heap." +msgstr "" +"返回的值可能会比添加的 *item* 更大。 如果不希望如此,可考虑改用 :func:`heappushpop`。 它的 push/pop " +"组合会返回两个值中较小的一个,将较大的值留在堆中。" + +#: ../../library/heapq.rst:83 +msgid "The module also offers three general purpose functions based on heaps." +msgstr "该模块还提供了三个基于堆的通用功能函数。" + +#: ../../library/heapq.rst:88 +msgid "" +"Merge multiple sorted inputs into a single sorted output (for example, merge" +" timestamped entries from multiple log files). Returns an :term:`iterator` " +"over the sorted values." +msgstr "" +"将多个已排序的输入合并为一个已排序的输出(例如,合并来自多个日志文件的带时间戳的条目)。 返回已排序值的 :term:`iterator`。" + +#: ../../library/heapq.rst:92 +msgid "" +"Similar to ``sorted(itertools.chain(*iterables))`` but returns an iterable, " +"does not pull the data into memory all at once, and assumes that each of the" +" input streams is already sorted (smallest to largest)." +msgstr "" +"类似于 ``sorted(itertools.chain(*iterables))`` " +"但返回一个可迭代对象,不会一次性地将数据全部放入内存,并假定每个输入流都是已排序的(从小到大)。" + +#: ../../library/heapq.rst:96 +msgid "" +"Has two optional arguments which must be specified as keyword arguments." +msgstr "具有两个可选参数,它们都必须指定为关键字参数。" + +#: ../../library/heapq.rst:98 +msgid "" +"*key* specifies a :term:`key function` of one argument that is used to " +"extract a comparison key from each input element. The default value is " +"``None`` (compare the elements directly)." +msgstr "" +"*key* 指定带有单个参数的 :term:`key function`,用于从每个输入元素中提取比较键。 默认值为 ``None`` " +"(直接比较元素)。" + +#: ../../library/heapq.rst:102 +msgid "" +"*reverse* is a boolean value. If set to ``True``, then the input elements " +"are merged as if each comparison were reversed. To achieve behavior similar " +"to ``sorted(itertools.chain(*iterables), reverse=True)``, all iterables must" +" be sorted from largest to smallest." +msgstr "" +"*reverse* 为一个布尔值。 如果设为 ``True``,则输入元素将按比较结果逆序进行合并。 要达成与 " +"``sorted(itertools.chain(*iterables), reverse=True)`` " +"类似的行为,所有可迭代对象必须是已从大到小排序的。" + +#: ../../library/heapq.rst:107 +msgid "Added the optional *key* and *reverse* parameters." +msgstr "添加了可选的 *key* 和 *reverse* 形参。" + +#: ../../library/heapq.rst:113 +msgid "" +"Return a list with the *n* largest elements from the dataset defined by " +"*iterable*. *key*, if provided, specifies a function of one argument that " +"is used to extract a comparison key from each element in *iterable* (for " +"example, ``key=str.lower``). Equivalent to: ``sorted(iterable, key=key, " +"reverse=True)[:n]``." +msgstr "" +"从 *iterable* 所定义的数据集中返回前 *n* 个最大元素组成的列表。 如果提供了 *key* 则其应指定一个单参数的函数,用于从 " +"*iterable* 的每个元素中提取比较键 (例如 ``key=str.lower``)。 等价于: ``sorted(iterable, " +"key=key, reverse=True)[:n]``。" + +#: ../../library/heapq.rst:122 +msgid "" +"Return a list with the *n* smallest elements from the dataset defined by " +"*iterable*. *key*, if provided, specifies a function of one argument that " +"is used to extract a comparison key from each element in *iterable* (for " +"example, ``key=str.lower``). Equivalent to: ``sorted(iterable, " +"key=key)[:n]``." +msgstr "" +"从 *iterable* 所定义的数据集中返回前 *n* 个最小元素组成的列表。 如果提供了 *key* 则其应指定一个单参数的函数,用于从 " +"*iterable* 的每个元素中提取比较键 (例如 ``key=str.lower``)。 等价于: ``sorted(iterable, " +"key=key)[:n]``。" + +#: ../../library/heapq.rst:128 +msgid "" +"The latter two functions perform best for smaller values of *n*. For larger" +" values, it is more efficient to use the :func:`sorted` function. Also, " +"when ``n==1``, it is more efficient to use the built-in :func:`min` and " +":func:`max` functions. If repeated usage of these functions is required, " +"consider turning the iterable into an actual heap." +msgstr "" +"后两个函数在 *n* 值较小时性能最好。 对于更大的值,使用 :func:`sorted` 函数会更有效率。 此外,当 ``n==1`` 时,使用内置的" +" :func:`min` 和 :func:`max` 函数会更有效率。 如果需要重复使用这些函数,请考虑将可迭代对象转为真正的堆。" + +#: ../../library/heapq.rst:136 +msgid "Basic Examples" +msgstr "基本示例" + +#: ../../library/heapq.rst:138 +msgid "" +"A `heapsort `_ can be implemented by" +" pushing all values onto a heap and then popping off the smallest values one" +" at a time::" +msgstr "" +"`堆排序 `_ 可以通过将所有值推入堆中然后每次弹出一个最小值项来实现。" + +#: ../../library/heapq.rst:151 +msgid "" +"This is similar to ``sorted(iterable)``, but unlike :func:`sorted`, this " +"implementation is not stable." +msgstr "这类似于 ``sorted(iterable)``,但与 :func:`sorted` 不同的是这个实现是不稳定的。" + +#: ../../library/heapq.rst:154 +msgid "" +"Heap elements can be tuples. This is useful for assigning comparison values" +" (such as task priorities) alongside the main record being tracked::" +msgstr "堆元素可以为元组。 这适用于将比较值(例如任务优先级)与跟踪的主记录进行赋值的场合::" + +#: ../../library/heapq.rst:167 +msgid "Priority Queue Implementation Notes" +msgstr "优先队列实现说明" + +#: ../../library/heapq.rst:169 +msgid "" +"A `priority queue `_ is common" +" use for a heap, and it presents several implementation challenges:" +msgstr "" +"`优先队列 `_ " +"是堆的常用场合,并且它的实现包含了多个挑战:" + +#: ../../library/heapq.rst:172 +msgid "" +"Sort stability: how do you get two tasks with equal priorities to be " +"returned in the order they were originally added?" +msgstr "排序稳定性:你该如何令相同优先级的两个任务按它们最初被加入时的顺序返回?" + +#: ../../library/heapq.rst:175 +msgid "" +"Tuple comparison breaks for (priority, task) pairs if the priorities are " +"equal and the tasks do not have a default comparison order." +msgstr "如果优先级相同且任务没有默认比较顺序,则 (priority, task) 对的元组比较将会中断。" + +#: ../../library/heapq.rst:178 +msgid "" +"If the priority of a task changes, how do you move it to a new position in " +"the heap?" +msgstr "如果任务优先级发生改变,你该如何将其移至堆中的新位置?" + +#: ../../library/heapq.rst:181 +msgid "" +"Or if a pending task needs to be deleted, how do you find it and remove it " +"from the queue?" +msgstr "或者如果一个挂起的任务需要被删除,你该如何找到它并将其移出队列?" + +#: ../../library/heapq.rst:184 +msgid "" +"A solution to the first two challenges is to store entries as 3-element list" +" including the priority, an entry count, and the task. The entry count " +"serves as a tie-breaker so that two tasks with the same priority are " +"returned in the order they were added. And since no two entry counts are the" +" same, the tuple comparison will never attempt to directly compare two " +"tasks." +msgstr "" +"针对前两项挑战的一种解决方案是将条目保存为包含优先级、条目计数和任务对象 3 个元素的列表。 " +"条目计数可用来打破平局,这样具有相同优先级的任务将按它们的添加顺序返回。 并且由于没有哪两个条目计数是相同的,元组比较将永远不会直接比较两个任务。" + +#: ../../library/heapq.rst:190 +msgid "" +"Another solution to the problem of non-comparable tasks is to create a " +"wrapper class that ignores the task item and only compares the priority " +"field::" +msgstr "不可比较任务问题的另一种解决方案是创建一个忽略任务条目并且只比较优先级字段的包装器类::" + +#: ../../library/heapq.rst:201 +msgid "" +"The remaining challenges revolve around finding a pending task and making " +"changes to its priority or removing it entirely. Finding a task can be done" +" with a dictionary pointing to an entry in the queue." +msgstr "其余的挑战主要包括找到挂起的任务并修改其优先级或将其完全移除。 找到一个任务可使用一个指向队列中条目的字典来实现。" + +#: ../../library/heapq.rst:205 +msgid "" +"Removing the entry or changing its priority is more difficult because it " +"would break the heap structure invariants. So, a possible solution is to " +"mark the entry as removed and add a new entry with the revised priority::" +msgstr "" +"移除条目或改变其优先级的操作实现起来更为困难,因为它会破坏堆结构不变量。 " +"因此,一种可能的解决方案是将条目标记为已移除,再添加一个改变了优先级的新条目::" + +#: ../../library/heapq.rst:239 +msgid "Theory" +msgstr "理论" + +#: ../../library/heapq.rst:241 +msgid "" +"Heaps are arrays for which ``a[k] <= a[2*k+1]`` and ``a[k] <= a[2*k+2]`` for" +" all *k*, counting elements from 0. For the sake of comparison, non-" +"existing elements are considered to be infinite. The interesting property " +"of a heap is that ``a[0]`` is always its smallest element." +msgstr "" +"堆是通过数组来实现的,其中的元素从 0 开始计数,对于所有的 *k* 都有 ``a[k] <= a[2*k+1]`` 且 ``a[k] <= " +"a[2*k+2]``。 为了便于比较,不存在的元素被视为无穷大。 堆最有趣的特性在于 ``a[0]`` 总是其中最小的元素。" + +#: ../../library/heapq.rst:246 +msgid "" +"The strange invariant above is meant to be an efficient memory " +"representation for a tournament. The numbers below are *k*, not ``a[k]``::" +msgstr "上面的特殊不变量是用来作为一场锦标赛的高效内存表示。 下面的数字是 *k* 而不是 ``a[k]``::" + +#: ../../library/heapq.rst:259 +msgid "" +"In the tree above, each cell *k* is topping ``2*k+1`` and ``2*k+2``. In a " +"usual binary tournament we see in sports, each cell is the winner over the " +"two cells it tops, and we can trace the winner down the tree to see all " +"opponents s/he had. However, in many computer applications of such " +"tournaments, we do not need to trace the history of a winner. To be more " +"memory efficient, when a winner is promoted, we try to replace it by " +"something else at a lower level, and the rule becomes that a cell and the " +"two cells it tops contain three different items, but the top cell \"wins\" " +"over the two topped cells." +msgstr "" +"在上面的树中,每个 *k* 单元都位于 ``2*k+1`` 和 ``2*k+2`` 之上。 " +"体育运动中我们经常见到二元锦标赛模式,每个胜者单元都位于另两个单元之上,并且我们可以沿着树形图向下追溯胜者所遇到的所有对手。 " +"但是,在许多采用这种锦标赛模式的计算机应用程序中,我们并不需要追溯胜者的历史。 " +"为了获得更高的内存利用效率,当一个胜者晋级时,我们会用较低层级的另一条目来替代它,因此规则变为一个单元和它之下的两个单元包含三个不同条目,上方单元“胜过”了两个下方单元。" + +#: ../../library/heapq.rst:268 +msgid "" +"If this heap invariant is protected at all time, index 0 is clearly the " +"overall winner. The simplest algorithmic way to remove it and find the " +"\"next\" winner is to move some loser (let's say cell 30 in the diagram " +"above) into the 0 position, and then percolate this new 0 down the tree, " +"exchanging values, until the invariant is re-established. This is clearly " +"logarithmic on the total number of items in the tree. By iterating over all " +"items, you get an O(n log n) sort." +msgstr "" +"如果此堆的不变性质始终受到保护,则序号 0 显然是总的赢家。 删除它并找出“下一个”赢家的最简单算法方式是将某个输家(让我们假定是上图中的 30 " +"号单元)移至 0 号位置,然后将这个新的 0 号沿树下行,不断进行值的交换,直到不变性质得到重建。 这显然会是树中条目总数的对数。 " +"通过迭代所有条目,你将得到一个 O(n log n) 复杂度的排序。" + +#: ../../library/heapq.rst:275 +msgid "" +"A nice feature of this sort is that you can efficiently insert new items " +"while the sort is going on, provided that the inserted items are not " +"\"better\" than the last 0'th element you extracted. This is especially " +"useful in simulation contexts, where the tree holds all incoming events, and" +" the \"win\" condition means the smallest scheduled time. When an event " +"schedules other events for execution, they are scheduled into the future, so" +" they can easily go into the heap. So, a heap is a good structure for " +"implementing schedulers (this is what I used for my MIDI sequencer :-)." +msgstr "" +"此排序有一个很好的特性就是你可以在排序进行期间高效地插入新条目,前提是插入的条目不比你最近取出的 0 号元素“更好”。 " +"这在模拟上下文时特别有用,在这种情况下树保存的是所有传入事件,“胜出”条件是最小调度时间。 " +"当一个事件将其他事件排入执行计划时,它们的调试时间向未来方向延长,这样它们可方便地入堆。 因此,堆结构很适宜用来实现调度器,我的 MIDI " +"音序器就是用的这个 :-)。" + +#: ../../library/heapq.rst:284 +msgid "" +"Various structures for implementing schedulers have been extensively " +"studied, and heaps are good for this, as they are reasonably speedy, the " +"speed is almost constant, and the worst case is not much different than the " +"average case. However, there are other representations which are more " +"efficient overall, yet the worst cases might be terrible." +msgstr "" +"用于实现调度器的各种结构都得到了充分的研究,堆是非常适宜的一种,因为它们的速度相当快,并且几乎是恒定的,最坏的情况与平均情况没有太大差别。 " +"虽然还存在其他总体而言更高效的实现方式,但其最坏的情况却可能非常糟糕。" + +#: ../../library/heapq.rst:290 +msgid "" +"Heaps are also very useful in big disk sorts. You most probably all know " +"that a big sort implies producing \"runs\" (which are pre-sorted sequences, " +"whose size is usually related to the amount of CPU memory), followed by a " +"merging passes for these runs, which merging is often very cleverly " +"organised [#]_. It is very important that the initial sort produces the " +"longest runs possible. Tournaments are a good way to achieve that. If, " +"using all the memory available to hold a tournament, you replace and " +"percolate items that happen to fit the current run, you'll produce runs " +"which are twice the size of the memory for random input, and much better for" +" input fuzzily ordered." +msgstr "" +"堆在大磁盘排序中也非常有用。 你应该已经了解大规模排序会有多个“运行轮次”(即预排序的序列,其大小通常与 CPU " +"内存容量相关),随后这些轮次会进入合并通道,轮次合并的组织往往非常巧妙 [#]_。 非常重要的一点是初始排序应产生尽可能长的运行轮次。 " +"锦标赛模式是达成此目标的好办法。 " +"如果你使用全部有用内存来进行锦标赛,替换和安排恰好适合当前运行轮次的条目,你将可以对于随机输入生成两倍于内存大小的运行轮次,对于模糊排序的输入还会有更好的效果。" + +#: ../../library/heapq.rst:300 +msgid "" +"Moreover, if you output the 0'th item on disk and get an input which may not" +" fit in the current tournament (because the value \"wins\" over the last " +"output value), it cannot fit in the heap, so the size of the heap decreases." +" The freed memory could be cleverly reused immediately for progressively " +"building a second heap, which grows at exactly the same rate the first heap " +"is melting. When the first heap completely vanishes, you switch heaps and " +"start a new run. Clever and quite effective!" +msgstr "" +"另外,如果你输出磁盘上的第 0 个条目并获得一个可能不适合当前锦标赛的输入(因为其值要“胜过”上一个输出值),它无法被放入堆中,因此堆的尺寸将缩小。 " +"被释放的内存可以被巧妙地立即重用以逐步构建第二个堆,其增长速度与第一个堆的缩减速度正好相同。 当第一个堆完全消失时,你可以切换新堆并启动新的运行轮次。 " +"这样做既聪明又高效!" + +#: ../../library/heapq.rst:308 +msgid "" +"In a word, heaps are useful memory structures to know. I use them in a few " +"applications, and I think it is good to keep a 'heap' module around. :-)" +msgstr "总之,堆是值得了解的有用内存结构。 我在一些应用中用到了它们,并且认为保留一个 'heap' 模块是很有意义的。 :-)" + +#: ../../library/heapq.rst:312 +msgid "Footnotes" +msgstr "脚注" + +#: ../../library/heapq.rst:313 +msgid "" +"The disk balancing algorithms which are current, nowadays, are more annoying" +" than clever, and this is a consequence of the seeking capabilities of the " +"disks. On devices which cannot seek, like big tape drives, the story was " +"quite different, and one had to be very clever to ensure (far in advance) " +"that each tape movement will be the most effective possible (that is, will " +"best participate at \"progressing\" the merge). Some tapes were even able " +"to read backwards, and this was also used to avoid the rewinding time. " +"Believe me, real good tape sorts were quite spectacular to watch! From all " +"times, sorting has always been a Great Art! :-)" +msgstr "" +"当前时代的磁盘平衡算法与其说是巧妙,不如说是麻烦,这是由磁盘的寻址能力导致的结果。 " +"在无法寻址的设备例如大型磁带机上,情况则相当不同,开发者必须非常聪明地(极为提前地)确保每次磁带转动都尽可能地高效(就是说能够最好地加入到合并“进程”中)。" +" 有些磁带甚至能够反向读取,这也被用来避免倒带的耗时。 请相信我,真正优秀的磁带机排序看起来是极其壮观的,排序从来都是一门伟大的艺术! :-)" diff --git a/library/hmac.po b/library/hmac.po new file mode 100644 index 000000000..7705c8304 --- /dev/null +++ b/library/hmac.po @@ -0,0 +1,212 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) 2001-2022, Python Software Foundation +# This file is distributed under the same license as the Python package. +# FIRST AUTHOR , YEAR. +# +# Translators: +# Pan Felix , 2019 +# st z , 2020 +# Freesand Leo , 2020 +# +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: Python 3.9\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2022-11-04 14:34+0000\n" +"PO-Revision-Date: 2017-02-16 23:13+0000\n" +"Last-Translator: Freesand Leo , 2020\n" +"Language-Team: Chinese (China) (https://www.transifex.com/python-doc/teams/5390/zh_CN/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: zh_CN\n" +"Plural-Forms: nplurals=1; plural=0;\n" + +#: ../../library/hmac.rst:2 +msgid ":mod:`hmac` --- Keyed-Hashing for Message Authentication" +msgstr ":mod:`hmac` --- 基于密钥的消息验证" + +#: ../../library/hmac.rst:10 +msgid "**Source code:** :source:`Lib/hmac.py`" +msgstr "**源代码:** :source:`Lib/hmac.py`" + +#: ../../library/hmac.rst:14 +msgid "This module implements the HMAC algorithm as described by :rfc:`2104`." +msgstr "此模块实现了 HMAC 算法,算法的描述参见 :rfc:`2104`。" + +#: ../../library/hmac.rst:19 +msgid "" +"Return a new hmac object. *key* is a bytes or bytearray object giving the " +"secret key. If *msg* is present, the method call ``update(msg)`` is made. " +"*digestmod* is the digest name, digest constructor or module for the HMAC " +"object to use. It may be any name suitable to :func:`hashlib.new`. Despite " +"its argument position, it is required." +msgstr "" +"返回一个新的 hmac 对象。 *key* 是一个指定密钥的 bytes 或 bytearray 对象。 如果提供了 *msg*,将会调用 " +"``update(msg)`` 方法。 *digestmod* 为 HMAC 对象所用的摘要名称、摘要构造器或模块。 它可以是适用于 " +":func:`hashlib.new` 的任何名称。 虽然该参数位置靠后,但它却是必须的。" + +#: ../../library/hmac.rst:25 +msgid "" +"Parameter *key* can be a bytes or bytearray object. Parameter *msg* can be " +"of any type supported by :mod:`hashlib`. Parameter *digestmod* can be the " +"name of a hash algorithm." +msgstr "" +"形参 *key* 可以为 bytes 或 bytearray 对象。 形参 *msg* 可以为 :mod:`hashlib` 所支持的任意类型。 形参 " +"*digestmod* 可以为某种哈希算法的名称。" + +#: ../../library/hmac.rst:33 +msgid "" +"MD5 as implicit default digest for *digestmod* is deprecated. The digestmod " +"parameter is now required. Pass it as a keyword argument to avoid " +"awkwardness when you do not have an initial msg." +msgstr "" +"MD5 作为 *digestmod* 的隐式默认摘要已被弃用。 digestmod 形参现在是必须的。 请将其作为关键字参数传入以避免当你没有初始 " +"msg 时将导致的麻烦。" + +#: ../../library/hmac.rst:38 +msgid "" +"Return digest of *msg* for given secret *key* and *digest*. The function is " +"equivalent to ``HMAC(key, msg, digest).digest()``, but uses an optimized C " +"or inline implementation, which is faster for messages that fit into memory." +" The parameters *key*, *msg*, and *digest* have the same meaning as in " +":func:`~hmac.new`." +msgstr "" +"基于给定密钥 *key* 和 *digest* 返回 *msg* 的摘要。 此函数等价于 ``HMAC(key, msg, " +"digest).digest()``,但使用了优化的 C 或内联实现,对放入内存的消息能处理得更快。 形参 *key*, *msg* 和 " +"*digest* 具有与 :func:`~hmac.new` 中相同的含义。" + +#: ../../library/hmac.rst:44 +msgid "" +"CPython implementation detail, the optimized C implementation is only used " +"when *digest* is a string and name of a digest algorithm, which is supported" +" by OpenSSL." +msgstr "" +"作为 CPython 的实现细节,优化的 C 实现仅当 *digest* 为字符串并且是一个 OpenSSL 所支持的摘要算法的名称时才会被使用。" + +#: ../../library/hmac.rst:51 +msgid "An HMAC object has the following methods:" +msgstr "HMAC 对象具有下列方法:" + +#: ../../library/hmac.rst:55 +msgid "" +"Update the hmac object with *msg*. Repeated calls are equivalent to a " +"single call with the concatenation of all the arguments: ``m.update(a); " +"m.update(b)`` is equivalent to ``m.update(a + b)``." +msgstr "" +"用 *msg* 来更新 hmac 对象。 重复调用相当于单次调用并传入所有参数的拼接结果: ``m.update(a); m.update(b)`` " +"等价于 ``m.update(a + b)``。" + +#: ../../library/hmac.rst:59 +msgid "Parameter *msg* can be of any type supported by :mod:`hashlib`." +msgstr "形参 *msg* 可以为 :mod:`hashlib` 所支持的任何类型。" + +#: ../../library/hmac.rst:65 +msgid "" +"Return the digest of the bytes passed to the :meth:`update` method so far. " +"This bytes object will be the same length as the *digest_size* of the digest" +" given to the constructor. It may contain non-ASCII bytes, including NUL " +"bytes." +msgstr "" +"返回当前已传给 :meth:`update` 方法的字节串数据的摘要。 这个字节串数据的长度将与传给构造器的摘要的长度 *digest_size* " +"相同。 它可以包含非 ASCII 的字节,包括 NUL 字节。" + +#: ../../library/hmac.rst:72 +msgid "" +"When comparing the output of :meth:`digest` to an externally-supplied digest" +" during a verification routine, it is recommended to use the " +":func:`compare_digest` function instead of the ``==`` operator to reduce the" +" vulnerability to timing attacks." +msgstr "" +"在验证例程运行期间将 :meth:`digest` 的输出与外部提供的摘要进行比较时,建议使用 :func:`compare_digest` 函数而不是" +" ``==`` 运算符以减少定时攻击防御力的不足。" + +#: ../../library/hmac.rst:80 +msgid "" +"Like :meth:`digest` except the digest is returned as a string twice the " +"length containing only hexadecimal digits. This may be used to exchange the" +" value safely in email or other non-binary environments." +msgstr "" +"类似于 :meth:`digest` 但摘要会以两倍长度字符串的形式返回,其中仅包含十六进制数码。 " +"这可以被用于在电子邮件或其他非二进制环境中安全地交换数据值。" + +#: ../../library/hmac.rst:86 +msgid "" +"When comparing the output of :meth:`hexdigest` to an externally-supplied " +"digest during a verification routine, it is recommended to use the " +":func:`compare_digest` function instead of the ``==`` operator to reduce the" +" vulnerability to timing attacks." +msgstr "" +"在验证例程运行期间将 :meth:`hexdigest` 的输出与外部提供的摘要进行比较时,建议使用 :func:`compare_digest` " +"函数而不是 ``==`` 运算符以减少定时攻击防御力的不足。" + +#: ../../library/hmac.rst:94 +msgid "" +"Return a copy (\"clone\") of the hmac object. This can be used to " +"efficiently compute the digests of strings that share a common initial " +"substring." +msgstr "返回 hmac 对象的副本(“克隆)。 这可被用来高效地计算共享相同初始子串的数据的摘要。" + +#: ../../library/hmac.rst:98 +msgid "A hash object has the following attributes:" +msgstr "hash 对象具有以下属性:" + +#: ../../library/hmac.rst:102 +msgid "The size of the resulting HMAC digest in bytes." +msgstr "以字节表示的结果 HMAC 摘要的大小。" + +#: ../../library/hmac.rst:106 +msgid "The internal block size of the hash algorithm in bytes." +msgstr "以字节表示的哈希算法的内部块大小。" + +#: ../../library/hmac.rst:112 +msgid "The canonical name of this HMAC, always lowercase, e.g. ``hmac-md5``." +msgstr "HMAC 的规范名称,总是为小写形式,例如 ``hmac-md5``。" + +#: ../../library/hmac.rst:119 +msgid "" +"The undocumented attributes ``HMAC.digest_cons``, ``HMAC.inner``, and " +"``HMAC.outer`` are internal implementation details and will be removed in " +"Python 3.10." +msgstr "" +"未写入文档的属性 ``HMAC.digest_cons``, ``HMAC.inner`` 和 ``HMAC.outer`` 属于内部实现细节,将在 " +"Python 3.10 中被移除。" + +#: ../../library/hmac.rst:123 +msgid "This module also provides the following helper function:" +msgstr "这个模块还提供了下列辅助函数:" + +#: ../../library/hmac.rst:127 +msgid "" +"Return ``a == b``. This function uses an approach designed to prevent " +"timing analysis by avoiding content-based short circuiting behaviour, making" +" it appropriate for cryptography. *a* and *b* must both be of the same " +"type: either :class:`str` (ASCII only, as e.g. returned by " +":meth:`HMAC.hexdigest`), or a :term:`bytes-like object`." +msgstr "" +"返回 ``a == b``。 此函数使用一种经专门设计的方式通过避免基于内容的短路行为来防止定时分析,使得它适合处理密码。 *a* 和 *b* " +"必须为相同的类型:或者是 :class:`str` (仅限 ASCII 字符,如 :meth:`HMAC.hexdigest` 的返回值),或者是 " +":term:`bytes-like object`。" + +#: ../../library/hmac.rst:135 +msgid "" +"If *a* and *b* are of different lengths, or if an error occurs, a timing " +"attack could theoretically reveal information about the types and lengths of" +" *a* and *b*—but not their values." +msgstr "" +"如果 *a* 和 *b* 具有不同的长度,或者如果发生了错误,定时攻击在理论上可以获取有关 *a* 和 *b* 的类型和长度信息 — " +"但不能获取它们的值。" + +#: ../../library/hmac.rst:143 +msgid "" +"The function uses OpenSSL's ``CRYPTO_memcmp()`` internally when available." +msgstr "此函数在可能的情况下会在内部使用 OpenSSL 的 ``CRYPTO_memcmp()``。" + +#: ../../library/hmac.rst:149 +msgid "Module :mod:`hashlib`" +msgstr "模块 :mod:`hashlib`" + +#: ../../library/hmac.rst:150 +msgid "The Python module providing secure hash functions." +msgstr "提供安全哈希函数的 Python 模块。" diff --git a/library/html.entities.po b/library/html.entities.po new file mode 100644 index 000000000..4d3fba71f --- /dev/null +++ b/library/html.entities.po @@ -0,0 +1,79 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) 2001-2022, Python Software Foundation +# This file is distributed under the same license as the Python package. +# FIRST AUTHOR , YEAR. +# +# Translators: +# Jerry Chen , 2017 +# Alpha Du , 2019 +# Freesand Leo , 2022 +# +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: Python 3.9\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2022-11-04 14:34+0000\n" +"PO-Revision-Date: 2017-02-16 23:13+0000\n" +"Last-Translator: Freesand Leo , 2022\n" +"Language-Team: Chinese (China) (https://www.transifex.com/python-doc/teams/5390/zh_CN/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: zh_CN\n" +"Plural-Forms: nplurals=1; plural=0;\n" + +#: ../../library/html.entities.rst:2 +msgid ":mod:`html.entities` --- Definitions of HTML general entities" +msgstr ":mod:`html.entities` --- HTML 一般实体的定义" + +#: ../../library/html.entities.rst:9 +msgid "**Source code:** :source:`Lib/html/entities.py`" +msgstr "**源码:** :source:`Lib/html/entities.py`" + +#: ../../library/html.entities.rst:13 +msgid "" +"This module defines four dictionaries, :data:`html5`, " +":data:`name2codepoint`, :data:`codepoint2name`, and :data:`entitydefs`." +msgstr "" +"该模块定义了四个词典, :data:`html5`、 :data:`name2codepoint`、 :data:`codepoint2name`、以及" +" :data:`entitydefs`。" + +#: ../../library/html.entities.rst:19 +msgid "" +"A dictionary that maps HTML5 named character references [#]_ to the " +"equivalent Unicode character(s), e.g. ``html5['gt;'] == '>'``. Note that the" +" trailing semicolon is included in the name (e.g. ``'gt;'``), however some " +"of the names are accepted by the standard even without the semicolon: in " +"this case the name is present with and without the ``';'``. See also " +":func:`html.unescape`." +msgstr "" +"将 HTML5 命名字符引用 [#]_ 映射到等效的 Unicode 字符的字典,例如 ``html5['gt;'] == '>'``。 " +"请注意,尾随的分号包含在名称中(例如 ``'gt;'`` ),但是即使没有分号,一些名称也会被标准接受,在这种情况下,名称出现时带有和不带有 " +"``';'``。另见 :func:`html.unescape`。" + +#: ../../library/html.entities.rst:31 +msgid "" +"A dictionary mapping XHTML 1.0 entity definitions to their replacement text " +"in ISO Latin-1." +msgstr "将 XHTML 1.0 实体定义映射到 ISO Latin-1 中的替换文本的字典。" + +#: ../../library/html.entities.rst:37 +msgid "A dictionary that maps HTML entity names to the Unicode code points." +msgstr "将 HTML 实体名称映射到 Unicode 代码点的字典。" + +#: ../../library/html.entities.rst:42 +msgid "A dictionary that maps Unicode code points to HTML entity names." +msgstr "将 Unicode 代码点映射到 HTML 实体名称的字典。" + +#: ../../library/html.entities.rst:46 +msgid "Footnotes" +msgstr "脚注" + +#: ../../library/html.entities.rst:47 +msgid "" +"See https://html.spec.whatwg.org/multipage/syntax.html#named-character-" +"references" +msgstr "" +"参见 https://html.spec.whatwg.org/multipage/syntax.html#named-character-" +"references" diff --git a/library/html.parser.po b/library/html.parser.po new file mode 100644 index 000000000..3ff7f50b7 --- /dev/null +++ b/library/html.parser.po @@ -0,0 +1,349 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) 2001-2024, Python Software Foundation +# This file is distributed under the same license as the Python package. +# FIRST AUTHOR , YEAR. +# +# Translators: +# Shengjing Zhu , 2019 +# walkinrain , 2019 +# Freesand Leo , 2022 +# Rafael Fontenelle , 2024 +# +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: Python 3.9\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2024-01-12 22:01+0000\n" +"PO-Revision-Date: 2017-02-16 23:13+0000\n" +"Last-Translator: Rafael Fontenelle , 2024\n" +"Language-Team: Chinese (China) (https://app.transifex.com/python-doc/teams/5390/zh_CN/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: zh_CN\n" +"Plural-Forms: nplurals=1; plural=0;\n" + +#: ../../library/html.parser.rst:2 +msgid ":mod:`html.parser` --- Simple HTML and XHTML parser" +msgstr ":mod:`html.parser` --- 简单的 HTML 和 XHTML 解析器" + +#: ../../library/html.parser.rst:7 +msgid "**Source code:** :source:`Lib/html/parser.py`" +msgstr "**源代码:** :source:`Lib/html/parser.py`" + +#: ../../library/html.parser.rst:15 +msgid "" +"This module defines a class :class:`HTMLParser` which serves as the basis " +"for parsing text files formatted in HTML (HyperText Mark-up Language) and " +"XHTML." +msgstr "这个模块定义了一个 :class:`HTMLParser` 类,为 HTML(超文本标记语言)和 XHTML 文本文件解析提供基础。" + +#: ../../library/html.parser.rst:20 +msgid "Create a parser instance able to parse invalid markup." +msgstr "创建一个能解析无效标记的解析器实例。" + +#: ../../library/html.parser.rst:22 +msgid "" +"If *convert_charrefs* is ``True`` (the default), all character references " +"(except the ones in ``script``/``style`` elements) are automatically " +"converted to the corresponding Unicode characters." +msgstr "" +"如果 *convert_charrefs* 为 ``True`` (默认值),则所有字符引用( ``script``/``style`` " +"元素中的除外)都会自动转换为相应的 Unicode 字符。" + +#: ../../library/html.parser.rst:26 +msgid "" +"An :class:`.HTMLParser` instance is fed HTML data and calls handler methods " +"when start tags, end tags, text, comments, and other markup elements are " +"encountered. The user should subclass :class:`.HTMLParser` and override its" +" methods to implement the desired behavior." +msgstr "" +"一个 :class:`.HTMLParser` 类的实例用来接受 HTML " +"数据,并在标记开始、标记结束、文本、注释和其他元素标记出现的时候调用对应的方法。要实现具体的行为,请使用 :class:`.HTMLParser` " +"的子类并重写其方法。" + +#: ../../library/html.parser.rst:31 +msgid "" +"This parser does not check that end tags match start tags or call the end-" +"tag handler for elements which are closed implicitly by closing an outer " +"element." +msgstr "这个解析器不检查结束标记是否与开始标记匹配,也不会因外层元素完毕而隐式关闭了的元素引发结束标记处理。" + +#: ../../library/html.parser.rst:34 +msgid "*convert_charrefs* keyword argument added." +msgstr "*convert_charrefs* 关键字参数被添加。" + +#: ../../library/html.parser.rst:37 +msgid "The default value for argument *convert_charrefs* is now ``True``." +msgstr "*convert_charrefs* 参数的默认值现在为 ``True``。" + +#: ../../library/html.parser.rst:42 +msgid "Example HTML Parser Application" +msgstr "HTML 解析器的示例程序" + +#: ../../library/html.parser.rst:44 +msgid "" +"As a basic example, below is a simple HTML parser that uses the " +":class:`HTMLParser` class to print out start tags, end tags, and data as " +"they are encountered::" +msgstr "" +"下面是简单的 HTML 解析器的一个基本示例,使用 :class:`HTMLParser` 类,当遇到开始标记、结束标记以及数据的时候将内容打印出来。" + +#: ../../library/html.parser.rst:64 +msgid "The output will then be:" +msgstr "输出是:" + +#: ../../library/html.parser.rst:83 +msgid ":class:`.HTMLParser` Methods" +msgstr ":class:`.HTMLParser` 方法" + +#: ../../library/html.parser.rst:85 +msgid ":class:`HTMLParser` instances have the following methods:" +msgstr ":class:`HTMLParser` 实例有下列方法:" + +#: ../../library/html.parser.rst:90 +msgid "" +"Feed some text to the parser. It is processed insofar as it consists of " +"complete elements; incomplete data is buffered until more data is fed or " +":meth:`close` is called. *data* must be :class:`str`." +msgstr "" +"填充一些文本到解析器中。如果包含完整的元素,则被处理;如果数据不完整,将被缓冲直到更多的数据被填充,或者 :meth:`close` " +"被调用。*data* 必须为 :class:`str` 类型。" + +#: ../../library/html.parser.rst:97 +msgid "" +"Force processing of all buffered data as if it were followed by an end-of-" +"file mark. This method may be redefined by a derived class to define " +"additional processing at the end of the input, but the redefined version " +"should always call the :class:`HTMLParser` base class method :meth:`close`." +msgstr "" +"如同后面跟着一个文件结束标记一样,强制处理所有缓冲数据。这个方法能被派生类重新定义,用于在输入的末尾定义附加处理,但是重定义的版本应当始终调用基类 " +":class:`HTMLParser` 的 :meth:`close` 方法。" + +#: ../../library/html.parser.rst:105 +msgid "" +"Reset the instance. Loses all unprocessed data. This is called implicitly " +"at instantiation time." +msgstr "重置实例。丢失所有未处理的数据。在实例化阶段被隐式调用。" + +#: ../../library/html.parser.rst:111 +msgid "Return current line number and offset." +msgstr "返回当前行号和偏移值。" + +#: ../../library/html.parser.rst:116 +msgid "" +"Return the text of the most recently opened start tag. This should not " +"normally be needed for structured processing, but may be useful in dealing " +"with HTML \"as deployed\" or for re-generating input with minimal changes " +"(whitespace between attributes can be preserved, etc.)." +msgstr "" +"返回最近打开的开始标记中的文本。 结构化处理时通常应该不需要这个,但在处理“已部署”的 HTML " +"或是在以最小改变来重新生成输入时可能会有用处(例如可以保留属性间的空格等)。" + +#: ../../library/html.parser.rst:122 +msgid "" +"The following methods are called when data or markup elements are " +"encountered and they are meant to be overridden in a subclass. The base " +"class implementations do nothing (except for " +":meth:`~HTMLParser.handle_startendtag`):" +msgstr "" +"下列方法将在遇到数据或者标记元素的时候被调用。他们需要在子类中重写。基类的实现中没有任何实际操作(除了 " +":meth:`~HTMLParser.handle_startendtag` ):" + +#: ../../library/html.parser.rst:129 +msgid "" +"This method is called to handle the start tag of an element (e.g. ``
``)." +msgstr "调用此方法来处理一个元素的开始标记 (例如 ````)." +msgstr "此方法被用来处理元素的结束标记(例如: ``
`` )。" + +#: ../../library/html.parser.rst:148 +msgid "The *tag* argument is the name of the tag converted to lower case." +msgstr "*tag* 参数是小写的标签名。" + +#: ../../library/html.parser.rst:153 +msgid "" +"Similar to :meth:`handle_starttag`, but called when the parser encounters an" +" XHTML-style empty tag (````). This method may be overridden by " +"subclasses which require this particular lexical information; the default " +"implementation simply calls :meth:`handle_starttag` and " +":meth:`handle_endtag`." +msgstr "" +"类似于 :meth:`handle_starttag`, 只是在解析器遇到 XHTML 样式的空标记时被调用( ````)。这个方法能被需要这种特殊词法信息的子类重写;默认实现仅简单调用 :meth:`handle_starttag` 和 " +":meth:`handle_endtag` 。" + +#: ../../library/html.parser.rst:161 +msgid "" +"This method is called to process arbitrary data (e.g. text nodes and the " +"content of ```` and ````)." +msgstr "" +"这个方法被用来处理任意数据(例如:文本节点和 ```` 以及 ```` " +"中的内容)。" + +#: ../../library/html.parser.rst:167 +msgid "" +"This method is called to process a named character reference of the form " +"``&name;`` (e.g. ``>``), where *name* is a general entity reference (e.g." +" ``'gt'``). This method is never called if *convert_charrefs* is ``True``." +msgstr "" +"这个方法被用于处理 ``&name;`` 形式的命名字符引用(例如 ``>``),其中 *name* 是通用的实体引用(例如: " +"``'gt'``)。如果 *convert_charrefs* 为 ``True``,该方法永远不会被调用。" + +#: ../../library/html.parser.rst:175 +msgid "" +"This method is called to process decimal and hexadecimal numeric character " +"references of the form ``&#NNN;`` and ``&#xNNN;``. For example, the decimal" +" equivalent for ``>`` is ``>``, whereas the hexadecimal is " +"``>``; in this case the method will receive ``'62'`` or ``'x3E'``. " +"This method is never called if *convert_charrefs* is ``True``." +msgstr "" +"这个方法被用来处理 ``&#NNN;`` 和 ``&#xNNN;`` 形式的十进制和十六进制字符引用。例如,``>`` 等效的十进制形式为 " +"``>`` ,而十六进制形式为 ``>`` ;在这种情况下,方法将收到 ``'62'`` 或 ``'x3E'`` 。如果 " +"*convert_charrefs* 为 ``True`` ,则该方法永远不会被调用。" + +#: ../../library/html.parser.rst:184 +msgid "" +"This method is called when a comment is encountered (e.g. ````)." +msgstr "这个方法在遇到注释的时候被调用(例如: ```` )。" + +#: ../../library/html.parser.rst:186 +msgid "" +"For example, the comment ```` will cause this method to be " +"called with the argument ``' comment '``." +msgstr "例如, ```` 这个注释会用 ``' comment '`` 作为参数调用此方法。" + +#: ../../library/html.parser.rst:189 +msgid "" +"The content of Internet Explorer conditional comments (condcoms) will also " +"be sent to this method, so, for ````, this method will receive ``'[if IE 9]>IE9-specific " +"contentIE9-specific content`` ,这个方法将接收到 ``'[if IE 9]>IE9-specific " +"content``)." +msgstr "这个方法用来处理 HTML doctype 申明(例如 ```` )。" + +#: ../../library/html.parser.rst:199 +msgid "" +"The *decl* parameter will be the entire contents of the declaration inside " +"the ```` markup (e.g. ``'DOCTYPE html'``)." +msgstr "*decl* 形参为 ```` 标记中的所有内容(例如: ``'DOCTYPE html'`` )。" + +#: ../../library/html.parser.rst:205 +msgid "" +"Method called when a processing instruction is encountered. The *data* " +"parameter will contain the entire processing instruction. For example, for " +"the processing instruction ````, this method would be " +"called as ``handle_pi(\"proc color='red'\")``. It is intended to be " +"overridden by a derived class; the base class implementation does nothing." +msgstr "" +"此方法在遇到处理指令的时候被调用。*data* 形参将包含整个处理指令。例如,对于处理指令 ```` " +",这个方法将以 ``handle_pi(\"proc color='red'\")`` 形式被调用。它旨在被派生类重写;基类实现中无任何实际操作。" + +#: ../../library/html.parser.rst:213 +msgid "" +"The :class:`HTMLParser` class uses the SGML syntactic rules for processing " +"instructions. An XHTML processing instruction using the trailing ``'?'`` " +"will cause the ``'?'`` to be included in *data*." +msgstr "" +":class:`HTMLParser` 类使用 SGML 语法规则处理指令。使用 ``'?'`` 结尾的 XHTML 处理指令将导致 ``'?'`` " +"包含在 *data* 中。" + +#: ../../library/html.parser.rst:220 +msgid "" +"This method is called when an unrecognized declaration is read by the " +"parser." +msgstr "当解析器读到无法识别的声明时,此方法被调用。" + +#: ../../library/html.parser.rst:222 +msgid "" +"The *data* parameter will be the entire contents of the declaration inside " +"the ```` markup. It is sometimes useful to be overridden by a " +"derived class. The base class implementation does nothing." +msgstr "*data* 形参为 ```` 标记中的所有内容。某些时候对派生类的重写很有用。基类实现中无任何实际操作。" + +#: ../../library/html.parser.rst:230 +msgid "Examples" +msgstr "例子" + +#: ../../library/html.parser.rst:232 +msgid "" +"The following class implements a parser that will be used to illustrate more" +" examples::" +msgstr "下面的类实现了一个解析器,用于更多示例的演示::" + +#: ../../library/html.parser.rst:269 +msgid "Parsing a doctype::" +msgstr "解析一个文档类型声明::" + +#: ../../library/html.parser.rst:275 +msgid "Parsing an element with a few attributes and a title::" +msgstr "解析一个具有一些属性和标题的元素::" + +#: ../../library/html.parser.rst:287 +msgid "" +"The content of ``script`` and ``style`` elements is returned as is, without " +"further parsing::" +msgstr "``script`` 和 ``style`` 元素中的内容原样返回,无需进一步解析::" + +#: ../../library/html.parser.rst:303 +msgid "Parsing comments::" +msgstr "解析注释::" + +#: ../../library/html.parser.rst:310 +msgid "" +"Parsing named and numeric character references and converting them to the " +"correct char (note: these 3 references are all equivalent to ``'>'``)::" +msgstr "解析命名或数字形式的字符引用,并把他们转换到正确的字符(注意:这 3 种转义都是 ``'>'`` )::" + +#: ../../library/html.parser.rst:318 +msgid "" +"Feeding incomplete chunks to :meth:`~HTMLParser.feed` works, but " +":meth:`~HTMLParser.handle_data` might be called more than once (unless " +"*convert_charrefs* is set to ``True``)::" +msgstr "" +"填充不完整的块给 :meth:`~HTMLParser.feed` 执行,:meth:`~HTMLParser.handle_data` " +"可能会多次调用(除非 *convert_charrefs* 被设置为 ``True`` )::" + +#: ../../library/html.parser.rst:331 +msgid "Parsing invalid HTML (e.g. unquoted attributes) also works::" +msgstr "解析无效的 HTML (例如:未引用的属性)也能正常运行::" diff --git a/library/html.po b/library/html.po new file mode 100644 index 000000000..3afdcaef4 --- /dev/null +++ b/library/html.po @@ -0,0 +1,71 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) 2001-2022, Python Software Foundation +# This file is distributed under the same license as the Python package. +# FIRST AUTHOR , YEAR. +# +# Translators: +# Freesand Leo , 2019 +# Alpha Du , 2019 +# +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: Python 3.9\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2022-11-04 14:34+0000\n" +"PO-Revision-Date: 2017-02-16 23:13+0000\n" +"Last-Translator: Alpha Du , 2019\n" +"Language-Team: Chinese (China) (https://www.transifex.com/python-doc/teams/5390/zh_CN/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: zh_CN\n" +"Plural-Forms: nplurals=1; plural=0;\n" + +#: ../../library/html.rst:2 +msgid ":mod:`html` --- HyperText Markup Language support" +msgstr ":mod:`html` --- 超文本标记语言支持" + +#: ../../library/html.rst:7 +msgid "**Source code:** :source:`Lib/html/__init__.py`" +msgstr "**源码:** :source:`Lib/html/__init__.py`" + +#: ../../library/html.rst:11 +msgid "This module defines utilities to manipulate HTML." +msgstr "该模块定义了操作HTML的工具。" + +#: ../../library/html.rst:15 +msgid "" +"Convert the characters ``&``, ``<`` and ``>`` in string *s* to HTML-safe " +"sequences. Use this if you need to display text that might contain such " +"characters in HTML. If the optional flag *quote* is true, the characters " +"(``\"``) and (``'``) are also translated; this helps for inclusion in an " +"HTML attribute value delimited by quotes, as in ````." +msgstr "" +"将字符串 *s* 中的字符``&`` 、 ``<`` 和 ``>`` 转换为安全的HTML序列。 如果需要在 HTML " +"中显示可能包含此类字符的文本,请使用此选项。 如果可选的标志 *quote* 为真值,则字符 (``\"``) 和 (``'``) " +"也被转换;这有助于包含在由引号分隔的 HTML 属性中,如 ````。" + +#: ../../library/html.rst:26 +msgid "" +"Convert all named and numeric character references (e.g. ``>``, " +"``>``, ``>``) in the string *s* to the corresponding Unicode " +"characters. This function uses the rules defined by the HTML 5 standard for" +" both valid and invalid character references, and the :data:`list of HTML 5 " +"named character references `." +msgstr "" +"将字符串 *s* 中的所有命名和数字字符引用 (例如 ``>``, ``>``, ``>``) 转换为相应的Unicode字符。" +" 此函数使用HTML 5标准为有效和无效字符引用定义的规则,以及 :data:`HTML 5 命名字符引用列表 " +"`。" + +#: ../../library/html.rst:36 +msgid "Submodules in the ``html`` package are:" +msgstr "``html`` 包中的子模块是:" + +#: ../../library/html.rst:38 +msgid ":mod:`html.parser` -- HTML/XHTML parser with lenient parsing mode" +msgstr ":mod:`html.parser` —— 具有宽松解析模式的HTML / XHTML解析器" + +#: ../../library/html.rst:39 +msgid ":mod:`html.entities` -- HTML entity definitions" +msgstr ":mod:`html.entities` -- HTML 实体定义" diff --git a/library/http.client.po b/library/http.client.po new file mode 100644 index 000000000..56fa9fe70 --- /dev/null +++ b/library/http.client.po @@ -0,0 +1,696 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) 2001-2022, Python Software Foundation +# This file is distributed under the same license as the Python package. +# FIRST AUTHOR , YEAR. +# +# Translators: +# Fred , 2018 +# df2dc1c92e792f7ae8417c51df43db8f_594d92a <0f49be28017426edb1db1a2ab6e67088_717605>, 2018 +# Sonny <758896823@qq.com>, 2019 +# 汪心禾 , 2019 +# chen_chao , 2019 +# Shengjing Zhu , 2019 +# Freesand Leo , 2019 +# Claude Manchester , 2021 +# Jiuh-star , 2021 +# Dai Xu , 2021 +# +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: Python 3.9\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2022-11-04 14:34+0000\n" +"PO-Revision-Date: 2017-02-16 23:13+0000\n" +"Last-Translator: Dai Xu , 2021\n" +"Language-Team: Chinese (China) (https://www.transifex.com/python-doc/teams/5390/zh_CN/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: zh_CN\n" +"Plural-Forms: nplurals=1; plural=0;\n" + +#: ../../library/http.client.rst:2 +msgid ":mod:`http.client` --- HTTP protocol client" +msgstr ":mod:`http.client` --- HTTP 协议客户端" + +#: ../../library/http.client.rst:7 +msgid "**Source code:** :source:`Lib/http/client.py`" +msgstr "**源代码:** :source:`Lib/http/client.py`" + +#: ../../library/http.client.rst:17 +msgid "" +"This module defines classes which implement the client side of the HTTP and " +"HTTPS protocols. It is normally not used directly --- the module " +":mod:`urllib.request` uses it to handle URLs that use HTTP and HTTPS." +msgstr "" +"这个模块定义了实现 HTTP 和 HTTPS 协议客户端的类。 它通常不直接使用 --- 模块 :mod:`urllib.request` " +"用它来处理使用 HTTP 和 HTTPS 的 URL。" + +#: ../../library/http.client.rst:23 +msgid "" +"The `Requests package `_ is " +"recommended for a higher-level HTTP client interface." +msgstr "" +"对于更高级别的 HTTP 客户端接口,建议使用 `Requests " +"`_ 。" + +#: ../../library/http.client.rst:28 +msgid "" +"HTTPS support is only available if Python was compiled with SSL support " +"(through the :mod:`ssl` module)." +msgstr "HTTPS 支持仅在编译 Python 时启用了 SSL 支持的情况下(通过 :mod:`ssl` 模块)可用。" + +#: ../../library/http.client.rst:31 +msgid "The module provides the following classes:" +msgstr "该模块支持以下类:" + +#: ../../library/http.client.rst:37 +msgid "" +"An :class:`HTTPConnection` instance represents one transaction with an HTTP " +"server. It should be instantiated passing it a host and optional port " +"number. If no port number is passed, the port is extracted from the host " +"string if it has the form ``host:port``, else the default HTTP port (80) is " +"used. If the optional *timeout* parameter is given, blocking operations " +"(like connection attempts) will timeout after that many seconds (if it is " +"not given, the global default timeout setting is used). The optional " +"*source_address* parameter may be a tuple of a (host, port) to use as the " +"source address the HTTP connection is made from. The optional *blocksize* " +"parameter sets the buffer size in bytes for sending a file-like message " +"body." +msgstr "" +":class:`HTTPConnection` 的实例代表与 HTTP 的一个连接事务。 它的实例化应当传入一个主机和可选的端口号。 " +"如果没有传入端口号,如果主机字符串的形式为 ``主机:端口`` 则会从中提取端口,否则将使用默认的 HTTP 端口(80)。 如果给出了可选的 " +"*timeout* 参数,则阻塞操作(例如连接尝试)将在指定的秒数之后超时(如果未给出,则使用全局默认超时设置)。 可选的 " +"*source_address* 参数可以为一个 (主机, 端口) 元组,用作进行 HTTP 连接的源地址。 可选的 *blocksize* " +"参数可以字节为单位设置缓冲区的大小,用来发送文件类消息体。" + +#: ../../library/http.client.rst:49 +msgid "" +"For example, the following calls all create instances that connect to the " +"server at the same host and port::" +msgstr "举个例子,以下调用都是创建连接到同一主机和端口的服务器的实例:" + +#: ../../library/http.client.rst:57 +msgid "*source_address* was added." +msgstr "添加了 *source_address*。" + +#: ../../library/http.client.rst:60 +msgid "" +"The *strict* parameter was removed. HTTP 0.9-style \"Simple Responses\" are" +" not longer supported." +msgstr "删除了 *strict* 参数,不再支持 HTTP 0.9 风格的“简单响应”。" + +#: ../../library/http.client.rst:64 +msgid "*blocksize* parameter was added." +msgstr "添加了 *blocksize* 参数。" + +#: ../../library/http.client.rst:73 +msgid "" +"A subclass of :class:`HTTPConnection` that uses SSL for communication with " +"secure servers. Default port is ``443``. If *context* is specified, it " +"must be a :class:`ssl.SSLContext` instance describing the various SSL " +"options." +msgstr "" +":class:`HTTPConnection` 的子类,使用 SSL 与安全服务器进行通信。 默认端口为 ``443``。 如果指定了 " +"*context*,它必须为一个描述 SSL 各选项的 :class:`ssl.SSLContext` 实例。" + +#: ../../library/http.client.rst:78 +msgid "" +"Please read :ref:`ssl-security` for more information on best practices." +msgstr "请参阅 :ref:`ssl-security` 了解有关最佳实践的更多信息。" + +#: ../../library/http.client.rst:80 +msgid "*source_address*, *context* and *check_hostname* were added." +msgstr "添加了 *source_address*, *context* 和 *check_hostname*。" + +#: ../../library/http.client.rst:83 +msgid "" +"This class now supports HTTPS virtual hosts if possible (that is, if " +":data:`ssl.HAS_SNI` is true)." +msgstr "这个类目前会在可能的情况下(即如果 :data:`ssl.HAS_SNI` 为真值)支持 HTTPS 虚拟主机。" + +#: ../../library/http.client.rst:87 +msgid "" +"The *strict* parameter was removed. HTTP 0.9-style \"Simple Responses\" are " +"no longer supported." +msgstr "删除了 *strict* 参数,不再支持 HTTP 0.9 风格的“简单响应”。" + +#: ../../library/http.client.rst:91 +msgid "" +"This class now performs all the necessary certificate and hostname checks by" +" default. To revert to the previous, unverified, behavior " +":func:`ssl._create_unverified_context` can be passed to the *context* " +"parameter." +msgstr "" +"目前这个类在默认情况下会执行所有必要的证书和主机检查。 要回复到先前的非验证行为,可以将 " +":func:`ssl._create_unverified_context` 传递给 *context* 参数。" + +#: ../../library/http.client.rst:97 +msgid "" +"This class now enables TLS 1.3 :attr:`ssl.SSLContext.post_handshake_auth` " +"for the default *context* or when *cert_file* is passed with a custom " +"*context*." +msgstr "" +"该类现在对于默认的 *context* 或在传入 *cert_file* 并附带自定义 *context* 时会启用 TLS 1.3 " +":attr:`ssl.SSLContext.post_handshake_auth`。" + +#: ../../library/http.client.rst:104 +msgid "" +"*key_file* and *cert_file* are deprecated in favor of *context*. Please use " +":meth:`ssl.SSLContext.load_cert_chain` instead, or let " +":func:`ssl.create_default_context` select the system's trusted CA " +"certificates for you." +msgstr "" +"*key_file* 和 *cert_file* 已弃用并转而推荐 *context*。 请改用 " +":meth:`ssl.SSLContext.load_cert_chain` 或让 :func:`ssl.create_default_context`" +" 为你选择系统所信任的 CA 证书。" + +#: ../../library/http.client.rst:109 +msgid "" +"The *check_hostname* parameter is also deprecated; the " +":attr:`ssl.SSLContext.check_hostname` attribute of *context* should be used " +"instead." +msgstr "" +"*check_hostname* 参数也已弃用;应当改用 *context* 的 " +":attr:`ssl.SSLContext.check_hostname` 属性。" + +#: ../../library/http.client.rst:116 +msgid "" +"Class whose instances are returned upon successful connection. Not " +"instantiated directly by user." +msgstr "在成功连接后返回类的实例,而不是由用户直接实例化。" + +#: ../../library/http.client.rst:119 +msgid "" +"The *strict* parameter was removed. HTTP 0.9 style \"Simple Responses\" are " +"no longer supported." +msgstr "删除了 *strict* 参数,不再支持HTTP 0.9 风格的“简单响应”。" + +#: ../../library/http.client.rst:123 +msgid "This module provides the following function:" +msgstr "这个模块定义了以下函数:" + +#: ../../library/http.client.rst:127 +msgid "" +"Parse the headers from a file pointer *fp* representing a HTTP " +"request/response. The file has to be a :class:`BufferedIOBase` reader (i.e. " +"not text) and must provide a valid :rfc:`2822` style header." +msgstr "" +"从文件指针 *fp* 中解析头部信息,该文件代表 HTTP 请求/响应。该文件必须是 :class:`BufferedIOBase` reader " +"对象(即不是文本),并且必须提供符合 :rfc:`2822` 格式的头部。" + +#: ../../library/http.client.rst:131 +msgid "" +"This function returns an instance of :class:`http.client.HTTPMessage` that " +"holds the header fields, but no payload (the same as " +":attr:`HTTPResponse.msg` and " +":attr:`http.server.BaseHTTPRequestHandler.headers`). After returning, the " +"file pointer *fp* is ready to read the HTTP body." +msgstr "" +"该函数返回 :class:`http.client.HTTPMessage` 的实例,带有头部各个字段,但不带正文数据(与 " +":attr:`HTTPResponse.msg` 和 " +":attr:`http.server.BaseHTTPRequestHandler.headers` 一样)。返回之后,文件指针 *fp* 已为读取 " +"HTTP 正文做好准备了。" + +#: ../../library/http.client.rst:138 +msgid "" +":meth:`parse_headers` does not parse the start-line of a HTTP message; it " +"only parses the ``Name: value`` lines. The file has to be ready to read " +"these field lines, so the first line should already be consumed before " +"calling the function." +msgstr "" +":meth:`parse_headers` 不会解析 HTTP 消息的开始行;只会解析各 ``Name: value`` " +"行。文件必须为读取这些字段做好准备,所以在调用该函数之前,第一行应该已经被读取过了。" + +#: ../../library/http.client.rst:143 +msgid "The following exceptions are raised as appropriate:" +msgstr "下列异常可以适当地被引发:" + +#: ../../library/http.client.rst:148 +msgid "" +"The base class of the other exceptions in this module. It is a subclass of " +":exc:`Exception`." +msgstr "此模块中其他异常的基类。 它是 :exc:`Exception` 的一个子类。" + +#: ../../library/http.client.rst:154 ../../library/http.client.rst:165 +#: ../../library/http.client.rst:170 ../../library/http.client.rst:175 +#: ../../library/http.client.rst:180 ../../library/http.client.rst:185 +msgid "A subclass of :exc:`HTTPException`." +msgstr ":exc:`HTTPException` 的一个子类。" + +#: ../../library/http.client.rst:159 +msgid "" +"A subclass of :exc:`HTTPException`, raised if a port is given and is either " +"non-numeric or empty." +msgstr ":exc:`HTTPException` 的一个子类,如果给出了一个非数字或为空值的端口就会被引发。" + +#: ../../library/http.client.rst:190 ../../library/http.client.rst:195 +#: ../../library/http.client.rst:200 +msgid "A subclass of :exc:`ImproperConnectionState`." +msgstr ":exc:`ImproperConnectionState` 的一个子类。" + +#: ../../library/http.client.rst:205 +msgid "" +"A subclass of :exc:`HTTPException`. Raised if a server responds with a HTTP" +" status code that we don't understand." +msgstr ":exc:`HTTPException` 的一个子类。 如果服务器反馈了一个我们不理解的 HTTP 状态码就会被引发。" + +#: ../../library/http.client.rst:211 +msgid "" +"A subclass of :exc:`HTTPException`. Raised if an excessively long line is " +"received in the HTTP protocol from the server." +msgstr ":exc:`HTTPException` 的一个子类。 如果在 HTTP 协议中从服务器接收到过长的行就会被引发。" + +#: ../../library/http.client.rst:217 +msgid "" +"A subclass of :exc:`ConnectionResetError` and :exc:`BadStatusLine`. Raised " +"by :meth:`HTTPConnection.getresponse` when the attempt to read the response " +"results in no data read from the connection, indicating that the remote end " +"has closed the connection." +msgstr "" +":exc:`ConnectionResetError` 和 :exc:`BadStatusLine` 的一个子类。 " +"当尝试读取响应时的结果是未从连接读取到数据时由 :meth:`HTTPConnection.getresponse` 引发,表明远端已关闭连接。" + +#: ../../library/http.client.rst:222 +msgid "Previously, :exc:`BadStatusLine`\\ ``('')`` was raised." +msgstr "在此之前引发的异常为 :exc:`BadStatusLine`\\ ``('')``。" + +#: ../../library/http.client.rst:226 +msgid "The constants defined in this module are:" +msgstr "此模块中定义的常量为:" + +#: ../../library/http.client.rst:230 +msgid "The default port for the HTTP protocol (always ``80``)." +msgstr "HTTP 协议默认的端口号 (总是 ``80``)。" + +#: ../../library/http.client.rst:234 +msgid "The default port for the HTTPS protocol (always ``443``)." +msgstr "HTTPS 协议默认的端口号 (总是 ``443``)。" + +#: ../../library/http.client.rst:238 +msgid "This dictionary maps the HTTP 1.1 status codes to the W3C names." +msgstr "这个字典把 HTTP 1.1 状态码映射到 W3C 名称。" + +#: ../../library/http.client.rst:240 +msgid "" +"Example: ``http.client.responses[http.client.NOT_FOUND]`` is ``'Not " +"Found'``." +msgstr "" +"例如:``http.client.responses[http.client.NOT_FOUND]`` 是 ``'NOT FOUND`` (未发现)。" + +#: ../../library/http.client.rst:242 +msgid "" +"See :ref:`http-status-codes` for a list of HTTP status codes that are " +"available in this module as constants." +msgstr "本模块中可用的 HTTP 状态码常量可以参见 :ref:`http-status-codes` 。" + +#: ../../library/http.client.rst:249 +msgid "HTTPConnection Objects" +msgstr "HTTPConnection 对象" + +#: ../../library/http.client.rst:251 +msgid ":class:`HTTPConnection` instances have the following methods:" +msgstr ":class:`HTTPConnection` 实例拥有以下方法:" + +#: ../../library/http.client.rst:257 +msgid "" +"This will send a request to the server using the HTTP request method " +"*method* and the selector *url*." +msgstr "这会使用 HTTP 请求方法 *method* 和选择器 *url* 向服务器发送请求。" + +#: ../../library/http.client.rst:260 +msgid "" +"If *body* is specified, the specified data is sent after the headers are " +"finished. It may be a :class:`str`, a :term:`bytes-like object`, an open " +":term:`file object`, or an iterable of :class:`bytes`. If *body* is a " +"string, it is encoded as ISO-8859-1, the default for HTTP. If it is a " +"bytes-like object, the bytes are sent as is. If it is a :term:`file " +"object`, the contents of the file is sent; this file object should support " +"at least the ``read()`` method. If the file object is an instance of " +":class:`io.TextIOBase`, the data returned by the ``read()`` method will be " +"encoded as ISO-8859-1, otherwise the data returned by ``read()`` is sent as " +"is. If *body* is an iterable, the elements of the iterable are sent as is " +"until the iterable is exhausted." +msgstr "" +"如果给定 *body*,那么给定的数据会在信息头完成之后发送。它可能是一个 :class:`str` 、一个 :term:`bytes-like " +"object` 、一个打开的 :term:`file object`,或者 :class:`bytes` 迭代器。如果 *body* 是字符串,它会按 " +"HTTP 默认的 ISO-8859-1 编码;如果是一个字节类对象,它会按原样发送;如果是 :term:`file object` " +",文件的内容会被发送,这个文件对象应该支持 ``read()`` 方法。如果这个文件对象是一个 :class:`io.TextIOBase` 实例, " +"``read()`` 方法返回的数据会按 ISO-8859-1 编码,否则 ``read()`` 方法返回的数据会按原样发送;如果 *body* " +"是一个迭代器,迭代器中的元素会被发送,直到迭代器耗尽。" + +#: ../../library/http.client.rst:272 +msgid "" +"The *headers* argument should be a mapping of extra HTTP headers to send " +"with the request." +msgstr "*headers* 参数应是额外的随请求发送的 HTTP 信息头的字典。" + +#: ../../library/http.client.rst:275 +msgid "" +"If *headers* contains neither Content-Length nor Transfer-Encoding, but " +"there is a request body, one of those header fields will be added " +"automatically. If *body* is ``None``, the Content-Length header is set to " +"``0`` for methods that expect a body (``PUT``, ``POST``, and ``PATCH``). If" +" *body* is a string or a bytes-like object that is not also a :term:`file " +"`, the Content-Length header is set to its length. Any other " +"type of *body* (files and iterables in general) will be chunk-encoded, and " +"the Transfer-Encoding header will automatically be set instead of Content-" +"Length." +msgstr "" +"如果 *headers* 既不包含 Content-Length 也没有 Transfer-" +"Encoding,但存在请求正文,那么这些头字段中的一个会自动设定。如果 *body* 是 ``None``,那么对于要求正文的方法 " +"(``PUT``,``POST``,和 ``PATCH``),Content-Length 头会被设为 ``0``。如果 *body* " +"是字符串或者类似字节的对象,并且也不是 :term:`文件`,Content-Length 头会设为正文的长度。任何其他类型的" +" *body* (一般是文件或迭代器)会按块编码,这时会自动设定 Transfer-Encoding 头以代替 Content-Length。" + +#: ../../library/http.client.rst:287 +msgid "" +"The *encode_chunked* argument is only relevant if Transfer-Encoding is " +"specified in *headers*. If *encode_chunked* is ``False``, the " +"HTTPConnection object assumes that all encoding is handled by the calling " +"code. If it is ``True``, the body will be chunk-encoded." +msgstr "" +"在 *headers* 中指定 Transfer-Encoding 时, *encode_chunked* 是唯一相关的参数。如果 " +"*encode_chunked* 为 ``False``,HTTPConnection 对象会假定所有的编码都由调用代码处理。如果为 " +"``True``,正文会按块编码。" + +#: ../../library/http.client.rst:293 +msgid "" +"Chunked transfer encoding has been added to the HTTP protocol version 1.1. " +"Unless the HTTP server is known to handle HTTP 1.1, the caller must either " +"specify the Content-Length, or must pass a :class:`str` or bytes-like object" +" that is not also a file as the body representation." +msgstr "" +"HTTP 协议在 1.1 版中添加了块传输编码。除非明确知道 HTTP 服务器可以处理 HTTP 1.1,调用者要么必须指定 Content-" +"Length,要么必须传入 :class:`str` 或字节类对象,注意该对象不能是表达 body 的文件。" + +#: ../../library/http.client.rst:299 +msgid "*body* can now be an iterable." +msgstr "*body* 现在可以是可迭代对象了。" + +#: ../../library/http.client.rst:302 +msgid "" +"If neither Content-Length nor Transfer-Encoding are set in *headers*, file " +"and iterable *body* objects are now chunk-encoded. The *encode_chunked* " +"argument was added. No attempt is made to determine the Content-Length for " +"file objects." +msgstr "" +"如果 Content-Length 和 Transfer-Encoding 都没有在 *headers* 中设置,文件和可迭代的 *body* " +"对象现在会按块编码。添加了 *encode_chunked* 参数。不会尝试去确定文件对象的 Content-Length。" + +#: ../../library/http.client.rst:311 +msgid "" +"Should be called after a request is sent to get the response from the " +"server. Returns an :class:`HTTPResponse` instance." +msgstr "应当在发送一个请求从服务器获取响应时被调用。 返回一个 :class:`HTTPResponse` 的实例。" + +#: ../../library/http.client.rst:316 +msgid "" +"Note that you must have read the whole response before you can send a new " +"request to the server." +msgstr "请注意你必须在读取了整个响应之后才能向服务器发送新的请求。" + +#: ../../library/http.client.rst:319 +msgid "" +"If a :exc:`ConnectionError` or subclass is raised, the " +":class:`HTTPConnection` object will be ready to reconnect when a new request" +" is sent." +msgstr "" +"如果引发了 :exc:`ConnectionError` 或其子类, :class:`HTTPConnection` " +"对象将在发送新的请求时准备好重新连接。" + +#: ../../library/http.client.rst:327 +msgid "" +"Set the debugging level. The default debug level is ``0``, meaning no " +"debugging output is printed. Any value greater than ``0`` will cause all " +"currently defined debug output to be printed to stdout. The ``debuglevel`` " +"is passed to any new :class:`HTTPResponse` objects that are created." +msgstr "" +"设置调试等级。 默认的调试等级为 ``0``,意味着不会打印调试输出。 任何大于 ``0`` 的值将使得所有当前定义的调试输出被打印到 stdout。 " +"``debuglevel`` 会被传给任何新创建的 :class:`HTTPResponse` 对象。" + +#: ../../library/http.client.rst:337 +msgid "" +"Set the host and the port for HTTP Connect Tunnelling. This allows running " +"the connection through a proxy server." +msgstr "为 HTTP 连接隧道设置主机和端口。 这将允许通过代理服务器运行连接。" + +#: ../../library/http.client.rst:340 +msgid "" +"The host and port arguments specify the endpoint of the tunneled connection " +"(i.e. the address included in the CONNECT request, *not* the address of the " +"proxy server)." +msgstr "host 和 port 参数指明隧道连接的位置(即 CONNECT 请求所包含的地址,而 *不是* 代理服务器的地址)。" + +#: ../../library/http.client.rst:344 +msgid "" +"The headers argument should be a mapping of extra HTTP headers to send with " +"the CONNECT request." +msgstr "headers 参数应为一个随 CONNECT 请求发送的额外 HTTP 标头的映射。" + +#: ../../library/http.client.rst:347 +msgid "" +"For example, to tunnel through a HTTPS proxy server running locally on port " +"8080, we would pass the address of the proxy to the :class:`HTTPSConnection`" +" constructor, and the address of the host that we eventually want to reach " +"to the :meth:`~HTTPConnection.set_tunnel` method::" +msgstr "" +"例如,要通过一个运行于本机 8080 端口的 HTTPS 代理服务器隧道,我们应当向 :class:`HTTPSConnection` " +"构造器传入代理的地址,并将我们最终想要访问的主机地址传给 :meth:`~HTTPConnection.set_tunnel` 方法::" + +#: ../../library/http.client.rst:362 +msgid "" +"Connect to the server specified when the object was created. By default, " +"this is called automatically when making a request if the client does not " +"already have a connection." +msgstr "当对象被创建后连接到指定的服务器。 默认情况下,如果客户端还未建立连接,此函数会在发送请求时自动被调用。" + +#: ../../library/http.client.rst:369 +msgid "Close the connection to the server." +msgstr "关闭到服务器的连接。" + +#: ../../library/http.client.rst:374 +msgid "Buffer size in bytes for sending a file-like message body." +msgstr "用于发送文件类消息体的缓冲区大小。" + +#: ../../library/http.client.rst:379 +msgid "" +"As an alternative to using the :meth:`request` method described above, you " +"can also send your request step by step, by using the four functions below." +msgstr "作为对使用上述 :meth:`request` 方法的替代同,你也可以通过使用下面的四个函数,分步骤发送请的请求。" + +#: ../../library/http.client.rst:386 +msgid "" +"This should be the first call after the connection to the server has been " +"made. It sends a line to the server consisting of the *method* string, the " +"*url* string, and the HTTP version (``HTTP/1.1``). To disable automatic " +"sending of ``Host:`` or ``Accept-Encoding:`` headers (for example to accept " +"additional content encodings), specify *skip_host* or *skip_accept_encoding*" +" with non-False values." +msgstr "" +"应为连接服务器之后首先调用的函数。将向服务器发送一行数据,包含 *method* 字符串、*url* 字符串和 HTTP " +"版本(``HTTP/1.1``)。若要禁止自动发送 ``Host:`` 或 ``Accept-Encoding:`` " +"头部信息(比如需要接受其他编码格式的内容),请将 *skip_host* 或 *skip_accept_encoding* 设为非 False 值。" + +#: ../../library/http.client.rst:396 +msgid "" +"Send an :rfc:`822`\\ -style header to the server. It sends a line to the " +"server consisting of the header, a colon and a space, and the first " +"argument. If more arguments are given, continuation lines are sent, each " +"consisting of a tab and an argument." +msgstr "" +"向服务器发送一个 :rfc:`822` 格式的头部。将向服务器发送一行由头、冒号和空格以及第一个参数组成的数据。 " +"如果还给出了其他参数,将在后续行中发送,每行由一个制表符和一个参数组成。" + +#: ../../library/http.client.rst:404 +msgid "" +"Send a blank line to the server, signalling the end of the headers. The " +"optional *message_body* argument can be used to pass a message body " +"associated with the request." +msgstr "向服务器发送一个空行,表示头部文件结束。可选的 *message_body* 参数可用于传入一个与请求相关的消息体。" + +#: ../../library/http.client.rst:408 +msgid "" +"If *encode_chunked* is ``True``, the result of each iteration of " +"*message_body* will be chunk-encoded as specified in :rfc:`7230`, Section " +"3.3.1. How the data is encoded is dependent on the type of *message_body*." +" If *message_body* implements the :ref:`buffer interface ` " +"the encoding will result in a single chunk. If *message_body* is a " +":class:`collections.abc.Iterable`, each iteration of *message_body* will " +"result in a chunk. If *message_body* is a :term:`file object`, each call to" +" ``.read()`` will result in a chunk. The method automatically signals the " +"end of the chunk-encoded data immediately after *message_body*." +msgstr "" +"如果 *encode_chunked* 为 ``True``,则对 *message_body* 的每次迭代结果将依照 :rfc:`7230` " +"3.3.1 节的规范进行分块编码。数据如何编码取决于 *message_body* 的类型。 如果 *message_body* 实现了 " +":ref:`buffer 接口 `,编码将生成一个数据块。如果 *message_body* 是 " +":class:`collections.abc.Iterable`,则 *message_body* 的每次迭代都会产生一个块。 如果 " +"*message_body* 为 :term:`file object`,那么每次调用 ``.read()`` 都会产生一个数据块。在 " +"*message_body* 结束后,本方法立即会自动标记块编码数据的结束。" + +#: ../../library/http.client.rst:419 +msgid "" +"Due to the chunked encoding specification, empty chunks yielded by an " +"iterator body will be ignored by the chunk-encoder. This is to avoid " +"premature termination of the read of the request by the target server due to" +" malformed encoding." +msgstr "由于分块编码的规范要求,迭代器本身产生的空块将被分块编码器忽略。这是为了避免目标服务器因错误编码而过早终止对请求的读取。" + +#: ../../library/http.client.rst:424 +msgid "Chunked encoding support. The *encode_chunked* parameter was added." +msgstr "支持分块编码。加入了 *encode_chunked* 参数。" + +#: ../../library/http.client.rst:431 +msgid "" +"Send data to the server. This should be used directly only after the " +":meth:`endheaders` method has been called and before :meth:`getresponse` is " +"called." +msgstr "" +"发送数据到服务器。本函数只应在调用 :meth:`endheaders` 方法之后且调用 :meth:`getresponse` 之前直接调用。" + +#: ../../library/http.client.rst:439 +msgid "HTTPResponse Objects" +msgstr "HTTPResponse 对象" + +#: ../../library/http.client.rst:441 +msgid "" +"An :class:`HTTPResponse` instance wraps the HTTP response from the server. " +"It provides access to the request headers and the entity body. The response" +" is an iterable object and can be used in a with statement." +msgstr "" +":class:`HTTPResponse` 实例封装了来自服务器的 HTTP 响应。通过它可以访问请求头和响应体。响应是可迭代对象,可在 with " +"语句中使用。" + +#: ../../library/http.client.rst:446 +msgid "" +"The :class:`io.BufferedIOBase` interface is now implemented and all of its " +"reader operations are supported." +msgstr "现在已实现了 :class:`io.BufferedIOBase` 接口,并且支持所有的读取操作。" + +#: ../../library/http.client.rst:453 +msgid "Reads and returns the response body, or up to the next *amt* bytes." +msgstr "读取并返回响应体,或后续 *amt* 个字节。" + +#: ../../library/http.client.rst:457 +msgid "" +"Reads up to the next len(b) bytes of the response body into the buffer *b*. " +"Returns the number of bytes read." +msgstr "读取响应体的后续 len(b) 个字节到缓冲区 *b*。返回读取的字节数。" + +#: ../../library/http.client.rst:464 +msgid "" +"Return the value of the header *name*, or *default* if there is no header " +"matching *name*. If there is more than one header with the name *name*, " +"return all of the values joined by ', '. If 'default' is any iterable other" +" than a single string, its elements are similarly returned joined by commas." +msgstr "" +"返回头部信息中的 *name* 值,如果没有与 *name* 匹配的字段,则返回*default*。如果名为 *name* " +"的字段不止一个,则返回所有字段,中间用 ', ' 连接。 如果 'default' 不是单个字符串,而是其他可迭代对象,则其元素同样以逗号连接并返回。" + +#: ../../library/http.client.rst:471 +msgid "Return a list of (header, value) tuples." +msgstr "返回 (header, value) 元组构成的列表。" + +#: ../../library/http.client.rst:475 +msgid "Return the ``fileno`` of the underlying socket." +msgstr "返回底层套接字的 ``fileno``。" + +#: ../../library/http.client.rst:479 +msgid "" +"A :class:`http.client.HTTPMessage` instance containing the response headers." +" :class:`http.client.HTTPMessage` is a subclass of " +":class:`email.message.Message`." +msgstr "" +"包含响应头的 :class:`http.client.HTTPMessage` 实例。:class:`http.client.HTTPMessage` " +"是 :class:`email.message` 的子类。" + +#: ../../library/http.client.rst:485 +msgid "" +"HTTP protocol version used by server. 10 for HTTP/1.0, 11 for HTTP/1.1." +msgstr "服务器使用的 HTTP 协议版本。10 代表 HTTP/1.0,11 代表 HTTP/1.1。" + +#: ../../library/http.client.rst:489 +msgid "" +"URL of the resource retrieved, commonly used to determine if a redirect was " +"followed." +msgstr "已读取资源的 URL,通常用于确定是否进行了重定向。" + +#: ../../library/http.client.rst:493 +msgid "" +"Headers of the response in the form of an " +":class:`email.message.EmailMessage` instance." +msgstr "响应的头部信息,形式为 :class:`email.message.EmailMessage` 的实例。" + +#: ../../library/http.client.rst:497 +msgid "Status code returned by server." +msgstr "由服务器返回的状态码。" + +#: ../../library/http.client.rst:501 +msgid "Reason phrase returned by server." +msgstr "服务器返回的原因短语。" + +#: ../../library/http.client.rst:505 +msgid "" +"A debugging hook. If :attr:`debuglevel` is greater than zero, messages will" +" be printed to stdout as the response is read and parsed." +msgstr "一个调试钩子。如果 :attr:`debuglevel` 大于零,状态信息将在读取和解析响应数据时打印输出到 stdout。" + +#: ../../library/http.client.rst:510 +msgid "Is ``True`` if the stream is closed." +msgstr "如果流被关闭,则为``True``。" + +#: ../../library/http.client.rst:514 +msgid "Deprecated in favor of :attr:`~HTTPResponse.url`." +msgstr "已弃用,建议用 :attr:`~HTTPResponse.url`。" + +#: ../../library/http.client.rst:519 +msgid "Deprecated in favor of :attr:`~HTTPResponse.headers`." +msgstr "已弃用,建议用 :attr:`~HTTPResponse.headers`。" + +#: ../../library/http.client.rst:524 +msgid "Deprecated in favor of :attr:`~HTTPResponse.status`." +msgstr "已弃用,建议用 :attr:`~HTTPResponse.status` 。" + +#: ../../library/http.client.rst:528 +msgid "Examples" +msgstr "示例" + +#: ../../library/http.client.rst:530 +msgid "Here is an example session that uses the ``GET`` method::" +msgstr "下面是使用 ``GET`` 方法的会话示例:" + +#: ../../library/http.client.rst:555 +msgid "" +"Here is an example session that uses the ``HEAD`` method. Note that the " +"``HEAD`` method never returns any data. ::" +msgstr "以下是使用 ``HEAD`` 方法的会话示例。 请注意,``HEAD`` 方法从不返回任何数据。" + +#: ../../library/http.client.rst:570 +msgid "Here is an example session that shows how to ``POST`` requests::" +msgstr "下面是用 ``POST`` 发送请求的会话示例:" + +#: ../../library/http.client.rst:586 +msgid "" +"Client side ``HTTP PUT`` requests are very similar to ``POST`` requests. The" +" difference lies only the server side where HTTP server will allow resources" +" to be created via ``PUT`` request. It should be noted that custom HTTP " +"methods are also handled in :class:`urllib.request.Request` by setting the " +"appropriate method attribute. Here is an example session that shows how to " +"send a ``PUT`` request using http.client::" +msgstr "" +"在客户端, ``HTTP PUT`` 请求与 ``POST`` 请求非常相似。区别只在于服务器端,HTTP 服务器将允许通过 ``PUT`` " +"请求创建资源。应该注意的是,自定义的 HTTP 方法也可以在 :class:`urllib.request.Request` " +"中通过设置适当的方法属性来进行处理。下面是一个会话示例,演示了如何利用 http.client 发送 ``PUT`` 请求。" + +#: ../../library/http.client.rst:608 +msgid "HTTPMessage Objects" +msgstr "HTTPMessage 对象" + +#: ../../library/http.client.rst:610 +msgid "" +"An :class:`http.client.HTTPMessage` instance holds the headers from an HTTP " +"response. It is implemented using the :class:`email.message.Message` class." +msgstr "" +":class:`http.client.HTTPMessage` 的实例存有 HTTP 响应的头部信息。利用 " +":class:`email.message.Message` 类实现。" diff --git a/library/http.cookiejar.po b/library/http.cookiejar.po new file mode 100644 index 000000000..672c41639 --- /dev/null +++ b/library/http.cookiejar.po @@ -0,0 +1,1094 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) 2001-2024, Python Software Foundation +# This file is distributed under the same license as the Python package. +# FIRST AUTHOR , YEAR. +# +# Translators: +# 汪心禾 , 2024 +# Shengjing Zhu , 2024 +# Zombie110year , 2024 +# ppcfish , 2024 +# Rafael Fontenelle , 2024 +# Alpha Du , 2024 +# Freesand Leo , 2024 +# +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: Python 3.9\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2024-06-20 08:51+0000\n" +"PO-Revision-Date: 2017-02-16 23:13+0000\n" +"Last-Translator: Freesand Leo , 2024\n" +"Language-Team: Chinese (China) (https://app.transifex.com/python-doc/teams/5390/zh_CN/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: zh_CN\n" +"Plural-Forms: nplurals=1; plural=0;\n" + +#: ../../library/http.cookiejar.rst:2 +msgid ":mod:`http.cookiejar` --- Cookie handling for HTTP clients" +msgstr ":mod:`http.cookiejar` —— HTTP 客户端的 Cookie 处理" + +#: ../../library/http.cookiejar.rst:10 +msgid "**Source code:** :source:`Lib/http/cookiejar.py`" +msgstr "**源代码:** :source:`Lib/http/cookiejar.py`" + +#: ../../library/http.cookiejar.rst:14 +msgid "" +"The :mod:`http.cookiejar` module defines classes for automatic handling of " +"HTTP cookies. It is useful for accessing web sites that require small " +"pieces of data -- :dfn:`cookies` -- to be set on the client machine by an " +"HTTP response from a web server, and then returned to the server in later " +"HTTP requests." +msgstr "" +":mod:`http.cookiejar` 模块定义了用于自动处理 HTTP cookie 的类。这对访问需要小段数据 —— " +":dfn:`cookies` 的网站很有用,这些数据由 Web 服务器的 HTTP 响应在客户端计算机上设置,然后在以后的 HTTP " +"请求中返回给服务器。" + +#: ../../library/http.cookiejar.rst:19 +msgid "" +"Both the regular Netscape cookie protocol and the protocol defined by " +":rfc:`2965` are handled. RFC 2965 handling is switched off by default. " +":rfc:`2109` cookies are parsed as Netscape cookies and subsequently treated " +"either as Netscape or RFC 2965 cookies according to the 'policy' in effect. " +"Note that the great majority of cookies on the Internet are Netscape " +"cookies. :mod:`http.cookiejar` attempts to follow the de-facto Netscape " +"cookie protocol (which differs substantially from that set out in the " +"original Netscape specification), including taking note of the ``max-age`` " +"and ``port`` cookie-attributes introduced with RFC 2965." +msgstr "" +"常规的 Netscape Cookie 协议和 :rfc:`2965` 定义的协议都可以处理。RFC 2965 处理默认情况下处于关闭状态。 " +":rfc:`2109` cookie 被解析为 Netscape cookie,随后根据有效的 'policy' 被视为 Netscape 或 RFC " +"2965 cookie。 请注意,Internet 上的大多数 cookie 是 Netscape cookie。 " +":mod:`http.cookiejar` 尝试遵循事实上的 Netscape cookie 协议(与原始 Netscape " +"规范中所设定的协议大不相同),包括注意 ``max-age`` 和 ``port`` RFC 2965 引入的 cookie 属性。" + +#: ../../library/http.cookiejar.rst:31 +msgid "" +"The various named parameters found in :mailheader:`Set-Cookie` and " +":mailheader:`Set-Cookie2` headers (eg. ``domain`` and ``expires``) are " +"conventionally referred to as :dfn:`attributes`. To distinguish them from " +"Python attributes, the documentation for this module uses the term " +":dfn:`cookie-attribute` instead." +msgstr "" +"在 :mailheader:`Set-Cookie` 和 :mailheader:`Set-Cookie2` 头中找到的各种命名参数通常指 " +":dfn:`attributes`。为了不与 Python 属性相混淆,模块文档使用 :dfn:`cookie-attribute` 代替。" + +#: ../../library/http.cookiejar.rst:38 +msgid "The module defines the following exception:" +msgstr "此模块定义了以下异常:" + +#: ../../library/http.cookiejar.rst:43 +msgid "" +"Instances of :class:`FileCookieJar` raise this exception on failure to load " +"cookies from a file. :exc:`LoadError` is a subclass of :exc:`OSError`." +msgstr "" +":class:`FileCookieJar` 实例在从文件加载 cookies 出错时抛出这个异常。 :exc:`LoadError` 是 " +":exc:`OSError` 的一个子类。" + +#: ../../library/http.cookiejar.rst:46 +msgid "" +"LoadError was made a subclass of :exc:`OSError` instead of :exc:`IOError`." +msgstr "LoadError 成为 :exc:`OSError` 的子类而不是 :exc:`IOError`。" + +#: ../../library/http.cookiejar.rst:51 +msgid "The following classes are provided:" +msgstr "提供了以下类:" + +#: ../../library/http.cookiejar.rst:56 +msgid "" +"*policy* is an object implementing the :class:`CookiePolicy` interface." +msgstr "*policy* 是实现了 :class:`CookiePolicy` 接口的一个对象。" + +#: ../../library/http.cookiejar.rst:58 +msgid "" +"The :class:`CookieJar` class stores HTTP cookies. It extracts cookies from " +"HTTP requests, and returns them in HTTP responses. :class:`CookieJar` " +"instances automatically expire contained cookies when necessary. Subclasses" +" are also responsible for storing and retrieving cookies from a file or " +"database." +msgstr "" +":class:`CookieJar` 类储存 HTTP cookies。它从 HTTP 请求提取 cookies,并在 HTTP 响应中返回它们。 " +":class:`CookieJar` 实例在必要时自动处理包含 cookie 的到期情况。子类还负责储存和从文件或数据库中查找 cookies。" + +#: ../../library/http.cookiejar.rst:66 +msgid "" +"*policy* is an object implementing the :class:`CookiePolicy` interface. For" +" the other arguments, see the documentation for the corresponding " +"attributes." +msgstr "*policy* 是实现了 :class:`CookiePolicy` 接口的一个对象。对于其他参数,参考相应属性的文档。" + +#: ../../library/http.cookiejar.rst:69 +msgid "" +"A :class:`CookieJar` which can load cookies from, and perhaps save cookies " +"to, a file on disk. Cookies are **NOT** loaded from the named file until " +"either the :meth:`load` or :meth:`revert` method is called. Subclasses of " +"this class are documented in section :ref:`file-cookie-jar-classes`." +msgstr "" +"一个可以从硬盘中文件加载或保存 cookie 的 :class:`CookieJar`。 Cookies **不** 会在 :meth:`load` 或" +" :meth:`revert` 方法调用前从命名的文件中加载。子类的文档位于段落 :ref:`file-cookie-jar-classes`。" + +#: ../../library/http.cookiejar.rst:76 ../../library/http.cookiejar.rst:350 +msgid "The filename parameter supports a :term:`path-like object`." +msgstr "文件名形参支持 :term:`path-like object`。" + +#: ../../library/http.cookiejar.rst:81 +msgid "" +"This class is responsible for deciding whether each cookie should be " +"accepted from / returned to the server." +msgstr "此类负责确定是否应从服务器接受每个 cookie 或将其返回给服务器。" + +#: ../../library/http.cookiejar.rst:87 +msgid "" +"Constructor arguments should be passed as keyword arguments only. " +"*blocked_domains* is a sequence of domain names that we never accept cookies" +" from, nor return cookies to. *allowed_domains* if not :const:`None`, this " +"is a sequence of the only domains for which we accept and return cookies. " +"*secure_protocols* is a sequence of protocols for which secure cookies can " +"be added to. By default *https* and *wss* (secure websocket) are considered " +"secure protocols. For all other arguments, see the documentation for " +":class:`CookiePolicy` and :class:`DefaultCookiePolicy` objects." +msgstr "" +"构造参数只能以关键字参数传递,*blocked_domains* 是一个我们既不会接受也不会返回 cookie " +"的域名序列。*allowed_domains* 如果不是 " +":const:`None`,则是仅有的我们会接受或返回的域名序列。*secure_protocols* 是可以添加安全 cookies " +"的协议序列。默认将 *https* 和 *wss* (安全 WebSocket)考虑为安全协议。对于其他参数,参考 " +":class:`CookiePolicy` 和 :class:`DefaultCookiePolicy` 对象的文档。" + +#: ../../library/http.cookiejar.rst:96 +msgid "" +":class:`DefaultCookiePolicy` implements the standard accept / reject rules " +"for Netscape and :rfc:`2965` cookies. By default, :rfc:`2109` cookies (ie. " +"cookies received in a :mailheader:`Set-Cookie` header with a version cookie-" +"attribute of 1) are treated according to the RFC 2965 rules. However, if " +"RFC 2965 handling is turned off or :attr:`rfc2109_as_netscape` is ``True``, " +"RFC 2109 cookies are 'downgraded' by the :class:`CookieJar` instance to " +"Netscape cookies, by setting the :attr:`version` attribute of the " +":class:`Cookie` instance to 0. :class:`DefaultCookiePolicy` also provides " +"some parameters to allow some fine-tuning of policy." +msgstr "" +":class:`DefaultCookiePolicy` 实现了 Netscape 和 :rfc:`2965` cookies 的标准接受 / " +"拒绝规则。 默认情况下,:rfc:`2109` cookies(即在 :mailheader:`Set-Cookie` 头中收到的 cookie-" +"attribute 版本为 1 的 cookies )将按照 RFC 2965 规则处理。 然而,如果 RFC 2965 的处理被关闭,或者 " +":attr:`rfc2109_as_netscape` 为 ``True``,:class:`Cookie` 实例的 :attr:`version` " +"属性设置将被为 0, RFC 2109 cookies :class:`CookieJar` 实例将 \"降级\" 为 Netscape " +"cookies。 :class:`DefaultCookiePolicy` 也提供一些参数以允许一些策略微调。" + +#: ../../library/http.cookiejar.rst:109 +msgid "" +"This class represents Netscape, :rfc:`2109` and :rfc:`2965` cookies. It is " +"not expected that users of :mod:`http.cookiejar` construct their own " +":class:`Cookie` instances. Instead, if necessary, call :meth:`make_cookies`" +" on a :class:`CookieJar` instance." +msgstr "" +"这个类代表 Netscape、:rfc:`2109` 和 :rfc:`2965` 的 cookie 。 我们不希望 " +":mod:`http.cookiejar` 的用户构建他们自己的 :class:`Cookie` 实例。 如果有必要,请在一个 " +":class:`CookieJar` 实例上调用 :meth:`make_cookies` 。" + +#: ../../library/http.cookiejar.rst:118 +msgid "Module :mod:`urllib.request`" +msgstr "模块 :mod:`urllib.request`" + +#: ../../library/http.cookiejar.rst:118 +msgid "URL opening with automatic cookie handling." +msgstr "URL 打开带有自动的 cookie 处理。" + +#: ../../library/http.cookiejar.rst:123 +msgid "Module :mod:`http.cookies`" +msgstr "模块 :mod:`http.cookies`" + +#: ../../library/http.cookiejar.rst:121 +msgid "" +"HTTP cookie classes, principally useful for server-side code. The " +":mod:`http.cookiejar` and :mod:`http.cookies` modules do not depend on each " +"other." +msgstr "" +"HTTP cookie类,主要是对服务端代码有用。 :mod:`http.cookiejar` 和 :mod:`http.cookies` " +"模块不相互依赖。" + +#: ../../library/http.cookiejar.rst:129 +msgid "https://curl.se/rfc/cookie_spec.html" +msgstr "https://curl.se/rfc/cookie_spec.html" + +#: ../../library/http.cookiejar.rst:126 +msgid "" +"The specification of the original Netscape cookie protocol. Though this is " +"still the dominant protocol, the 'Netscape cookie protocol' implemented by " +"all the major browsers (and :mod:`http.cookiejar`) only bears a passing " +"resemblance to the one sketched out in ``cookie_spec.html``." +msgstr "" +"原始 Netscape cookie 协议的规范。 虽然这仍然是主流协议,但所有主要浏览器(以及 :mod:`http.cookiejar` )实现的 " +"\"Netscape cookie协议\" 与 ``cookie_spec.html`` 中描述的协议仅有几分相似之处。" + +#: ../../library/http.cookiejar.rst:132 +msgid ":rfc:`2109` - HTTP State Management Mechanism" +msgstr ":rfc:`2109` - HTTP状态管理机制" + +#: ../../library/http.cookiejar.rst:132 +msgid "" +"Obsoleted by :rfc:`2965`. Uses :mailheader:`Set-Cookie` with version=1." +msgstr "被 :rfc:`2965` 所取代。使用 :mailheader:`Set-Cookie` version=1 。" + +#: ../../library/http.cookiejar.rst:136 +msgid ":rfc:`2965` - HTTP State Management Mechanism" +msgstr ":rfc:`2965` - HTTP状态管理机制" + +#: ../../library/http.cookiejar.rst:135 +msgid "" +"The Netscape protocol with the bugs fixed. Uses :mailheader:`Set-Cookie2` " +"in place of :mailheader:`Set-Cookie`. Not widely used." +msgstr "" +"修正了错误的 Netscape 协议。 使用 :mailheader:`Set-Cookie2` 来代替 :mailheader:`Set-" +"Cookie` 。 没有广泛被使用。" + +#: ../../library/http.cookiejar.rst:139 +msgid "http://kristol.org/cookie/errata.html" +msgstr "http://kristol.org/cookie/errata.html" + +#: ../../library/http.cookiejar.rst:139 +msgid "Unfinished errata to :rfc:`2965`." +msgstr "未完成的 :rfc:`2965` 勘误表。" + +#: ../../library/http.cookiejar.rst:141 +msgid ":rfc:`2964` - Use of HTTP State Management" +msgstr ":rfc:`2964` - HTTP状态管理使用方法" + +#: ../../library/http.cookiejar.rst:146 +msgid "CookieJar and FileCookieJar Objects" +msgstr "CookieJar 和 FileCookieJar 对象" + +#: ../../library/http.cookiejar.rst:148 +msgid "" +":class:`CookieJar` objects support the :term:`iterator` protocol for " +"iterating over contained :class:`Cookie` objects." +msgstr "" +":class:`CookieJar` 对象支持 :term:`iterator` 协议,用于迭代包含的 :class:`Cookie` 对象。" + +#: ../../library/http.cookiejar.rst:151 +msgid ":class:`CookieJar` has the following methods:" +msgstr ":class:`CookieJar` 有以下方法:" + +#: ../../library/http.cookiejar.rst:156 +msgid "Add correct :mailheader:`Cookie` header to *request*." +msgstr "在 *request* 中添加正确的 :mailheader:`Cookie` 头。" + +#: ../../library/http.cookiejar.rst:158 +msgid "" +"If policy allows (ie. the :attr:`rfc2965` and :attr:`hide_cookie2` " +"attributes of the :class:`CookieJar`'s :class:`CookiePolicy` instance are " +"true and false respectively), the :mailheader:`Cookie2` header is also added" +" when appropriate." +msgstr "" +"如果策略允许(即 :attr:`rfc2965` 和 :attr:`hide_cookie2` 属性在 :class:`CookieJar` 的 " +":class:`CookiePolicy` 实例中分别为 True 和 False ), :mailheader:`Cookie2` " +"标头也会在适当时候添加。" + +#: ../../library/http.cookiejar.rst:162 +msgid "" +"The *request* object (usually a :class:`urllib.request.Request` instance) " +"must support the methods :meth:`get_full_url`, :meth:`get_host`, " +":meth:`get_type`, :meth:`unverifiable`, :meth:`has_header`, " +":meth:`get_header`, :meth:`header_items`, :meth:`add_unredirected_header` " +"and :attr:`origin_req_host` attribute as documented by " +":mod:`urllib.request`." +msgstr "" +"如 :mod:`urllib.request` 所记载的, *request* 对象(通常是一个 " +":class:`urllib.request.Request` 实例)必须支持 :meth:`get_full_url` , " +":meth:`get_host`, :meth:`get_type`, :meth:`unverifiable`, " +":meth:`has_header`, :meth:`get_header`, :meth:`header_items`, " +":meth:`add_unredirected_header` 和 :attr:`origin_req_host` 属性。" + +#: ../../library/http.cookiejar.rst:171 ../../library/http.cookiejar.rst:197 +msgid "" +"*request* object needs :attr:`origin_req_host` attribute. Dependency on a " +"deprecated method :meth:`get_origin_req_host` has been removed." +msgstr "" +"*request* 对象需要 :attr:`origin_req_host` 属性。对已废弃的方法 " +":meth:`get_origin_req_host` 的依赖已被移除。" + +#: ../../library/http.cookiejar.rst:177 +msgid "" +"Extract cookies from HTTP *response* and store them in the " +":class:`CookieJar`, where allowed by policy." +msgstr "从HTTP *response* 中提取 cookie,并在政策允许的情况下,将它们存储在 :class:`CookieJar` 中。" + +#: ../../library/http.cookiejar.rst:180 +msgid "" +"The :class:`CookieJar` will look for allowable :mailheader:`Set-Cookie` and " +":mailheader:`Set-Cookie2` headers in the *response* argument, and store " +"cookies as appropriate (subject to the :meth:`CookiePolicy.set_ok` method's " +"approval)." +msgstr "" +":class:`CookieJar` 将 在*response* 参数中寻找允许的 :mailheader:`Set-Cookie` 和 " +":mailheader:`Set-Cookie2` 头信息,并适当地存储cookies(须经 :meth:`CookiePolicy.set_ok` " +"方法批准)。" + +#: ../../library/http.cookiejar.rst:184 +msgid "" +"The *response* object (usually the result of a call to " +":meth:`urllib.request.urlopen`, or similar) should support an :meth:`info` " +"method, which returns an :class:`email.message.Message` instance." +msgstr "" +"*response* 对象(通常是调用 :meth:`urllib.request.urlopen` 或类似方法的结果)应该支持 " +":meth:`info` 方法,它返回 :class:`email.message.Message` 实例。" + +#: ../../library/http.cookiejar.rst:188 +msgid "" +"The *request* object (usually a :class:`urllib.request.Request` instance) " +"must support the methods :meth:`get_full_url`, :meth:`get_host`, " +":meth:`unverifiable`, and :attr:`origin_req_host` attribute, as documented " +"by :mod:`urllib.request`. The request is used to set default values for " +"cookie-attributes as well as for checking that the cookie is allowed to be " +"set." +msgstr "" +"如 :mod:`urllib.request` 的文档所说,*request* 对象(通常是一个 " +":class:`urllib.request.Request` 实例)必须支持 :meth:`get_full_url`, " +":meth:`get_host`, :meth:`unverifiable` 和 :attr:`origin_req_host` 属性。 该请求用于设置" +" cookie-attributes 的默认值,以及检查 cookie 是否允许被设置。" + +#: ../../library/http.cookiejar.rst:202 +msgid "Set the :class:`CookiePolicy` instance to be used." +msgstr "设置要使用的 :class:`CookiePolicy` 实例。" + +#: ../../library/http.cookiejar.rst:207 +msgid "" +"Return sequence of :class:`Cookie` objects extracted from *response* object." +msgstr "返回从 *response* 对象中提取的 :class:`Cookie` 对象的序列。" + +#: ../../library/http.cookiejar.rst:209 +msgid "" +"See the documentation for :meth:`extract_cookies` for the interfaces " +"required of the *response* and *request* arguments." +msgstr "关于 *response* 和 *request* 参数所需的接口,请参见 :meth:`extract_cookies` 的文档。" + +#: ../../library/http.cookiejar.rst:215 +msgid "Set a :class:`Cookie` if policy says it's OK to do so." +msgstr "如果策略规定可以这样做,就设置一个 :class:`Cookie` 。" + +#: ../../library/http.cookiejar.rst:220 +msgid "" +"Set a :class:`Cookie`, without checking with policy to see whether or not it" +" should be set." +msgstr "设置一个 :class:`Cookie`,不需要检查策略是否应该被设置。" + +#: ../../library/http.cookiejar.rst:226 +msgid "Clear some cookies." +msgstr "清除一些cookie。" + +#: ../../library/http.cookiejar.rst:228 +msgid "" +"If invoked without arguments, clear all cookies. If given a single " +"argument, only cookies belonging to that *domain* will be removed. If given " +"two arguments, cookies belonging to the specified *domain* and URL *path* " +"are removed. If given three arguments, then the cookie with the specified " +"*domain*, *path* and *name* is removed." +msgstr "" +"如果调用时没有参数,则清除所有的cookie。 如果给定一个参数,只有属于该 *domain* " +"的cookies将被删除。如果给定两个参数,那么属于指定的 *domain* 和 URL *path* 的cookie将被删除。 " +"如果给定三个参数,那么属于指定的 *domain* 、*path* 和 *name* 的cookie将被删除" + +#: ../../library/http.cookiejar.rst:234 +msgid "Raises :exc:`KeyError` if no matching cookie exists." +msgstr "如果不存在匹配的 cookie,则会引发 :exc:`KeyError`。" + +#: ../../library/http.cookiejar.rst:239 +msgid "Discard all session cookies." +msgstr "丢弃所有的会话 cookie。" + +#: ../../library/http.cookiejar.rst:241 +msgid "" +"Discards all contained cookies that have a true :attr:`discard` attribute " +"(usually because they had either no ``max-age`` or ``expires`` cookie-" +"attribute, or an explicit ``discard`` cookie-attribute). For interactive " +"browsers, the end of a session usually corresponds to closing the browser " +"window." +msgstr "" +"丢弃所有 :attr:`discard` 属性为真值的已包含 cookie(通常是因为它们没有 ``max-age`` 或 ``expires`` " +"cookie 属性,或者显式的 ``discard`` cookie 属性)。 对于交互式浏览器,会话的结束通常对应于关闭浏览器窗口。" + +#: ../../library/http.cookiejar.rst:246 +msgid "" +"Note that the :meth:`save` method won't save session cookies anyway, unless " +"you ask otherwise by passing a true *ignore_discard* argument." +msgstr "" +"请注意 :meth:`save` 方法并不会保存会话的 cookie,除非你通过传入一个真值给 *ignore_discard* 参数来提出明确的要求。" + +#: ../../library/http.cookiejar.rst:249 +msgid ":class:`FileCookieJar` implements the following additional methods:" +msgstr ":class:`FileCookieJar` 实现了下列附加方法:" + +#: ../../library/http.cookiejar.rst:254 +msgid "Save cookies to a file." +msgstr "将 cookie 保存到文件。" + +#: ../../library/http.cookiejar.rst:256 +msgid "" +"This base class raises :exc:`NotImplementedError`. Subclasses may leave " +"this method unimplemented." +msgstr "基类会引发 :exc:`NotImplementedError`。 子类可以继续不实现该方法。" + +#: ../../library/http.cookiejar.rst:259 +msgid "" +"*filename* is the name of file in which to save cookies. If *filename* is " +"not specified, :attr:`self.filename` is used (whose default is the value " +"passed to the constructor, if any); if :attr:`self.filename` is " +":const:`None`, :exc:`ValueError` is raised." +msgstr "" +"*filename* 为要用来保存 cookie 的文件名称。 如果未指定 *filename*,则会使用 :attr:`self.filename` " +"(该属性默认为传给构造器的值,如果有传入的话);如果 :attr:`self.filename` 为 :const:`None`,则会引发 " +":exc:`ValueError`。" + +#: ../../library/http.cookiejar.rst:264 +msgid "" +"*ignore_discard*: save even cookies set to be discarded. *ignore_expires*: " +"save even cookies that have expired" +msgstr "" +"*ignore_discard*: 即使设定了丢弃 cookie 仍然保存它们。 *ignore_expires*: 即使 cookie " +"已超期仍然保存它们" + +#: ../../library/http.cookiejar.rst:267 +msgid "" +"The file is overwritten if it already exists, thus wiping all the cookies it" +" contains. Saved cookies can be restored later using the :meth:`load` or " +":meth:`revert` methods." +msgstr "" +"文件如果已存在则会被覆盖,这将清除其所包含的全部 cookie。 已保存的 cookie 可以使用 :meth:`load` 或 " +":meth:`revert` 方法来恢复。" + +#: ../../library/http.cookiejar.rst:274 +msgid "Load cookies from a file." +msgstr "从文件加载 cookie。" + +#: ../../library/http.cookiejar.rst:276 +msgid "Old cookies are kept unless overwritten by newly loaded ones." +msgstr "旧的 cookie 将被保留,除非是被新加载的 cookie 所覆盖。" + +#: ../../library/http.cookiejar.rst:278 +msgid "Arguments are as for :meth:`save`." +msgstr "其参数与 :meth:`save` 的相同。" + +#: ../../library/http.cookiejar.rst:280 +msgid "" +"The named file must be in the format understood by the class, or " +":exc:`LoadError` will be raised. Also, :exc:`OSError` may be raised, for " +"example if the file does not exist." +msgstr "" +"指定的文件必须为该类所能理解的格式,否则将引发 :exc:`LoadError`。 也可能会引发 :exc:`OSError`,例如当文件不存在的时候。" + +#: ../../library/http.cookiejar.rst:284 +msgid "" +":exc:`IOError` used to be raised, it is now an alias of :exc:`OSError`." +msgstr "过去触发的 :exc:`IOError`,现在是 :exc:`OSError` 的别名。" + +#: ../../library/http.cookiejar.rst:290 +msgid "Clear all cookies and reload cookies from a saved file." +msgstr "清除所有 cookie 并从保存的文件重新加载 cookie。" + +#: ../../library/http.cookiejar.rst:292 +msgid "" +":meth:`revert` can raise the same exceptions as :meth:`load`. If there is a " +"failure, the object's state will not be altered." +msgstr ":meth:`revert` 可以引发与 :meth:`load` 相同的异常。 如果执行失败,对象的状态将不会被改变。" + +#: ../../library/http.cookiejar.rst:295 +msgid ":class:`FileCookieJar` instances have the following public attributes:" +msgstr ":class:`FileCookieJar` 实例具有下列公有属性:" + +#: ../../library/http.cookiejar.rst:300 +msgid "" +"Filename of default file in which to keep cookies. This attribute may be " +"assigned to." +msgstr "默认的保存 cookie 的文件的文件名。 该属性可以被赋值。" + +#: ../../library/http.cookiejar.rst:306 +msgid "" +"If true, load cookies lazily from disk. This attribute should not be " +"assigned to. This is only a hint, since this only affects performance, not " +"behaviour (unless the cookies on disk are changing). A :class:`CookieJar` " +"object may ignore it. None of the :class:`FileCookieJar` classes included " +"in the standard library lazily loads cookies." +msgstr "" +"如为真值,则惰性地从磁盘加载 cookie。 该属性不应当被赋值。 这只是一个提示,因为它只会影响性能,而不会影响行为(除非磁盘中的 cookie " +"被改变了)。 :class:`CookieJar` 对象可能会忽略它。 任何包括在标准库中的 :class:`FileCookieJar` " +"类都不会惰性地加载 cookie。" + +#: ../../library/http.cookiejar.rst:316 +msgid "FileCookieJar subclasses and co-operation with web browsers" +msgstr "FileCookieJar 的子类及其与 Web 浏览器的协同" + +#: ../../library/http.cookiejar.rst:318 +msgid "" +"The following :class:`CookieJar` subclasses are provided for reading and " +"writing." +msgstr "提供了以下 :class:`CookieJar` 子类用于读取和写入。" + +#: ../../library/http.cookiejar.rst:323 +msgid "" +"A :class:`FileCookieJar` that can load from and save cookies to disk in the " +"Mozilla ``cookies.txt`` file format (which is also used by the Lynx and " +"Netscape browsers)." +msgstr "" +"一个能够以 Mozilla ``cookies.txt`` 文件格式(该格式也被 Lynx 和 Netscape 浏览器所使用)从磁盘加载和存储 " +"cookie 的 :class:`FileCookieJar`。" + +#: ../../library/http.cookiejar.rst:329 +msgid "" +"This loses information about :rfc:`2965` cookies, and also about newer or " +"non-standard cookie-attributes such as ``port``." +msgstr "这会丢失有关 :rfc:`2965` cookie 的信息,以及有关较新或非标准的 cookie 属性例如 ``port``。" + +#: ../../library/http.cookiejar.rst:334 +msgid "" +"Back up your cookies before saving if you have cookies whose loss / " +"corruption would be inconvenient (there are some subtleties which may lead " +"to slight changes in the file over a load / save round-trip)." +msgstr "" +"在存储之前备份你的 cookie,如果你的 cookie " +"丢失/损坏会造成麻烦的话(有一些微妙的因素可能导致文件在加载/保存的往返过程中发生细微的变化)。" + +#: ../../library/http.cookiejar.rst:338 +msgid "" +"Also note that cookies saved while Mozilla is running will get clobbered by " +"Mozilla." +msgstr "还要注意在 Mozilla 运行期间保存的 cookie 将可能被 Mozilla 清除。" + +#: ../../library/http.cookiejar.rst:344 +msgid "" +"A :class:`FileCookieJar` that can load from and save cookies to disk in " +"format compatible with the libwww-perl library's ``Set-Cookie3`` file " +"format. This is convenient if you want to store cookies in a human-readable" +" file." +msgstr "" +"一个能够以 libwww-perl 库的 ``Set-Cookie3`` 文件格式从磁盘加载和存储 cookie 的 " +":class:`FileCookieJar`。 这适用于当你想以人类可读的文件来保存 cookie 的情况。" + +#: ../../library/http.cookiejar.rst:355 +msgid "CookiePolicy Objects" +msgstr "CookiePolicy 对象" + +#: ../../library/http.cookiejar.rst:357 +msgid "" +"Objects implementing the :class:`CookiePolicy` interface have the following " +"methods:" +msgstr "实现了 :class:`CookiePolicy` 接口的对象具有下列方法:" + +#: ../../library/http.cookiejar.rst:363 +msgid "" +"Return boolean value indicating whether cookie should be accepted from " +"server." +msgstr "返回指明是否应当从服务器接受 cookie 的布尔值。" + +#: ../../library/http.cookiejar.rst:365 +msgid "" +"*cookie* is a :class:`Cookie` instance. *request* is an object implementing" +" the interface defined by the documentation for " +":meth:`CookieJar.extract_cookies`." +msgstr "" +"*cookie* 是一个 :class:`Cookie` 实例。 *request* 是一个实现了由 " +":meth:`CookieJar.extract_cookies` 的文档所定义的接口的对象。" + +#: ../../library/http.cookiejar.rst:372 +msgid "" +"Return boolean value indicating whether cookie should be returned to server." +msgstr "返回指明是否应当将 cookie 返回给服务器的布尔值。" + +#: ../../library/http.cookiejar.rst:374 +msgid "" +"*cookie* is a :class:`Cookie` instance. *request* is an object implementing" +" the interface defined by the documentation for " +":meth:`CookieJar.add_cookie_header`." +msgstr "" +"*cookie* 是一个 :class:`Cookie` 实例。 *request* 是一个实现了 " +":meth:`CookieJar.add_cookie_header` 的文档所定义的接口的对象。" + +#: ../../library/http.cookiejar.rst:381 +msgid "" +"Return ``False`` if cookies should not be returned, given cookie domain." +msgstr "对于给定的 cookie 域如果不应当返回 cookie 则返回 ``False``。" + +#: ../../library/http.cookiejar.rst:383 +msgid "" +"This method is an optimization. It removes the need for checking every " +"cookie with a particular domain (which might involve reading many files). " +"Returning true from :meth:`domain_return_ok` and :meth:`path_return_ok` " +"leaves all the work to :meth:`return_ok`." +msgstr "" +"此方法是一种优化操作。 它消除了检查每个具有特定域的 cookie 的必要性(这可能会涉及读取许多文件)。 从 " +":meth:`domain_return_ok` 和 :meth:`path_return_ok` 返回真值并将所有工作留给 " +":meth:`return_ok`。" + +#: ../../library/http.cookiejar.rst:388 +msgid "" +"If :meth:`domain_return_ok` returns true for the cookie domain, " +":meth:`path_return_ok` is called for the cookie path. Otherwise, " +":meth:`path_return_ok` and :meth:`return_ok` are never called for that " +"cookie domain. If :meth:`path_return_ok` returns true, :meth:`return_ok` is" +" called with the :class:`Cookie` object itself for a full check. Otherwise," +" :meth:`return_ok` is never called for that cookie path." +msgstr "" +"如果 :meth:`domain_return_ok` 为 cookie 域返回真值,则会为 cookie 路径调用 " +":meth:`path_return_ok`。 在其他情况下,则不会为该 cookie 域调用 :meth:`path_return_ok` 和 " +":meth:`return_ok`。 如果 :meth:`path_return_ok` 返回真值,则会调用 :meth:`return_ok` 并附带" +" :class:`Cookie` 对象本身以进行全面检查。 在其他情况下,都永远不会为该 cookie 路径调用 :meth:`return_ok`。" + +#: ../../library/http.cookiejar.rst:395 +msgid "" +"Note that :meth:`domain_return_ok` is called for every *cookie* domain, not " +"just for the *request* domain. For example, the function might be called " +"with both ``\".example.com\"`` and ``\"www.example.com\"`` if the request " +"domain is ``\"www.example.com\"``. The same goes for " +":meth:`path_return_ok`." +msgstr "" +"请注意 :meth:`domain_return_ok` 会针对每个 *cookie* 域被调用,而非只针对 *request* 域。 " +"例如,该函数会针对 ``\".example.com\"`` 和 ``\"www.example.com\"`` 被调用,如果 request 域为 " +"``\"www.example.com\"`` 的话。 对于 :meth:`path_return_ok` 也是如此。" + +#: ../../library/http.cookiejar.rst:400 +msgid "The *request* argument is as documented for :meth:`return_ok`." +msgstr "*request* 参数与 :meth:`return_ok` 的文档所说明的一致。" + +#: ../../library/http.cookiejar.rst:405 +msgid "Return ``False`` if cookies should not be returned, given cookie path." +msgstr "对于给定的 cookie 路径如果不应当返回 cookie 返回 ``False``。" + +#: ../../library/http.cookiejar.rst:407 +msgid "See the documentation for :meth:`domain_return_ok`." +msgstr "请参阅 :meth:`domain_return_ok` 的文档。" + +#: ../../library/http.cookiejar.rst:409 +msgid "" +"In addition to implementing the methods above, implementations of the " +":class:`CookiePolicy` interface must also supply the following attributes, " +"indicating which protocols should be used, and how. All of these attributes" +" may be assigned to." +msgstr "" +"除了实现上述方法,:class:`CookiePolicy` 接口的实现还必须提供下列属性,指明应当使用哪种协议以及如何使用。 " +"所有这些属性都可以被赋值。" + +#: ../../library/http.cookiejar.rst:417 +msgid "Implement Netscape protocol." +msgstr "实现 Netscape 协议。" + +#: ../../library/http.cookiejar.rst:422 +msgid "Implement :rfc:`2965` protocol." +msgstr "实现 :rfc:`2965` 协议。" + +#: ../../library/http.cookiejar.rst:427 +msgid "" +"Don't add :mailheader:`Cookie2` header to requests (the presence of this " +"header indicates to the server that we understand :rfc:`2965` cookies)." +msgstr "不要向请求添加 :mailheader:`Cookie2` 标头(此标头是提示服务器请求方能识别 :rfc:`2965` cookie)。" + +#: ../../library/http.cookiejar.rst:430 +msgid "" +"The most useful way to define a :class:`CookiePolicy` class is by " +"subclassing from :class:`DefaultCookiePolicy` and overriding some or all of " +"the methods above. :class:`CookiePolicy` itself may be used as a 'null " +"policy' to allow setting and receiving any and all cookies (this is unlikely" +" to be useful)." +msgstr "" +"定义 :class:`CookiePolicy` 类的最适用方式是通过子类化 :class:`DefaultCookiePolicy` " +"并重写部分或全部上述的方法。 :class:`CookiePolicy` 本身可被用作 '空策略' 以允许设置和接收所有的 " +"cookie(但这没有什么用处)。" + +#: ../../library/http.cookiejar.rst:439 +msgid "DefaultCookiePolicy Objects" +msgstr "DefaultCookiePolicy 对象" + +#: ../../library/http.cookiejar.rst:441 +msgid "Implements the standard rules for accepting and returning cookies." +msgstr "实现接收和返回 cookie 的标准规则。" + +#: ../../library/http.cookiejar.rst:443 +msgid "" +"Both :rfc:`2965` and Netscape cookies are covered. RFC 2965 handling is " +"switched off by default." +msgstr ":rfc:`2965` 和 Netscape cookie 均被涵盖。 RFC 2965 处理默认关闭。" + +#: ../../library/http.cookiejar.rst:446 +msgid "" +"The easiest way to provide your own policy is to override this class and " +"call its methods in your overridden implementations before adding your own " +"additional checks::" +msgstr "提供自定义策略的最容易方式是重写此类并在你重写的实现中添加你自己的额外检查之前调用其方法::" + +#: ../../library/http.cookiejar.rst:459 +msgid "" +"In addition to the features required to implement the :class:`CookiePolicy` " +"interface, this class allows you to block and allow domains from setting and" +" receiving cookies. There are also some strictness switches that allow you " +"to tighten up the rather loose Netscape protocol rules a little bit (at the " +"cost of blocking some benign cookies)." +msgstr "" +"在实现 :class:`CookiePolicy` 接口所要求的特性之外,该类还允许你阻止和允许特定的域设置和接收 cookie。 " +"还有一些严格性开关允许你将相当宽松的 Netscape 协议规则收紧一点(代价是可能会阻止某些无害的 cookie)。" + +#: ../../library/http.cookiejar.rst:465 +msgid "" +"A domain blacklist and whitelist is provided (both off by default). Only " +"domains not in the blacklist and present in the whitelist (if the whitelist " +"is active) participate in cookie setting and returning. Use the " +"*blocked_domains* constructor argument, and :meth:`blocked_domains` and " +":meth:`set_blocked_domains` methods (and the corresponding argument and " +"methods for *allowed_domains*). If you set a whitelist, you can turn it off" +" again by setting it to :const:`None`." +msgstr "" +"提供域名黑名单和白名单(默认情况下均关闭)。只有不在黑名单中和在白名单中(如果白名单处于激活状态)的域名才能使用 cookie 的设置和发送。 请使用" +" *blocked_domains* 构造参数、 :meth:`blocked_domains` 和 " +":meth:`set_blocked_domains` 方法(以及 *allowed_domains* 的相应参数和方法)。 " +"如果你设置了白名单,可以通过将其设置为 :const:`None` 再次将其关闭。" + +#: ../../library/http.cookiejar.rst:473 +msgid "" +"Domains in block or allow lists that do not start with a dot must equal the " +"cookie domain to be matched. For example, ``\"example.com\"`` matches a " +"blacklist entry of ``\"example.com\"``, but ``\"www.example.com\"`` does " +"not. Domains that do start with a dot are matched by more specific domains " +"too. For example, both ``\"www.example.com\"`` and " +"``\"www.coyote.example.com\"`` match ``\".example.com\"`` (but " +"``\"example.com\"`` itself does not). IP addresses are an exception, and " +"must match exactly. For example, if blocked_domains contains " +"``\"192.168.1.2\"`` and ``\".168.1.2\"``, 192.168.1.2 is blocked, but " +"193.168.1.2 is not." +msgstr "" +"阻止或允许列表中不以点开头的域名必须与 cookie 域名相等才能匹配。 例如, ``\"example.com\"`` 与黑名单条目 " +"``\"example.com\"`` 匹配,但 ``\"www.example.com\"`` 不匹配。 以点开头的域也会与更具体的域匹配。例如, " +"``\"www.example.com\"`` 和 ``\"www.coyote.example.com\"`` 都匹配 " +"``\".example.com\"`` (但 ``\"example.com\"`` 本身不匹配)。 IP 地址是个例外,必须完全匹配。 " +"例如,如果 blocked_domains 包含 ``\"192.168.1.2\"`` 和 ``\".168.1.2\"`` ,则 " +"192.168.1.2 会被屏蔽,但 193.168.1.2 不会。" + +#: ../../library/http.cookiejar.rst:482 +msgid "" +":class:`DefaultCookiePolicy` implements the following additional methods:" +msgstr ":class:`DefaultCookiePolicy` 实现了下列附加方法:" + +#: ../../library/http.cookiejar.rst:487 +msgid "Return the sequence of blocked domains (as a tuple)." +msgstr "返回被阻止域的序列(元组类型)。" + +#: ../../library/http.cookiejar.rst:492 +msgid "Set the sequence of blocked domains." +msgstr "设置被阻止域的序列。" + +#: ../../library/http.cookiejar.rst:497 +msgid "" +"Return whether *domain* is on the blacklist for setting or receiving " +"cookies." +msgstr "返回 *domain* 是否在设置或接收 cookie 的黑名单上。" + +#: ../../library/http.cookiejar.rst:502 +msgid "Return :const:`None`, or the sequence of allowed domains (as a tuple)." +msgstr "返回 :const:`None`,或者被允许域的序列(元组类型)。" + +#: ../../library/http.cookiejar.rst:507 +msgid "Set the sequence of allowed domains, or :const:`None`." +msgstr "设置被允许域的序列,或者为 :const:`None`。" + +#: ../../library/http.cookiejar.rst:512 +msgid "" +"Return whether *domain* is not on the whitelist for setting or receiving " +"cookies." +msgstr "返回 *domain* 是否不在设置或接收 cookie 的白名单上。" + +#: ../../library/http.cookiejar.rst:515 +msgid "" +":class:`DefaultCookiePolicy` instances have the following attributes, which " +"are all initialised from the constructor arguments of the same name, and " +"which may all be assigned to." +msgstr ":class:`DefaultCookiePolicy` 实例具有下列属性,它们都是基于同名的构造器参数来初始化的,并且都可以被赋值。" + +#: ../../library/http.cookiejar.rst:522 +msgid "" +"If true, request that the :class:`CookieJar` instance downgrade :rfc:`2109` " +"cookies (ie. cookies received in a :mailheader:`Set-Cookie` header with a " +"version cookie-attribute of 1) to Netscape cookies by setting the version " +"attribute of the :class:`Cookie` instance to 0. The default value is " +":const:`None`, in which case RFC 2109 cookies are downgraded if and only if " +":rfc:`2965` handling is turned off. Therefore, RFC 2109 cookies are " +"downgraded by default." +msgstr "" +"如为真值,则请求 :class:`CookieJar` 实例将 :rfc:`2109` cookie (即在带有 version 值为 1 的 " +"cookie 属性的 :mailheader:`Set-Cookie` 标头中接收到的 cookie) 降级为 Netscape cookie: 即将 " +":class:`Cookie` 实例的 version 属性设为 0。 默认值为 :const:`None`,在此情况下 RFC 2109 cookie" +" 仅在s are downgraded if and only if :rfc:`2965` 处理被关闭时才会被降级。 因此,RFC 2109 " +"cookie 默认会被降级。" + +#: ../../library/http.cookiejar.rst:530 +msgid "General strictness switches:" +msgstr "通用严格性开关:" + +#: ../../library/http.cookiejar.rst:534 +msgid "" +"Don't allow sites to set two-component domains with country-code top-level " +"domains like ``.co.uk``, ``.gov.uk``, ``.co.nz``.etc. This is far from " +"perfect and isn't guaranteed to work!" +msgstr "" +"不允许网站设置带国家码顶级域的包含两部分的域名例如 ``.co.uk``, ``.gov.uk``, ``.co.nz`` 等。 " +"此开关尚未十分完善,并不保证有效!" + +#: ../../library/http.cookiejar.rst:539 +msgid ":rfc:`2965` protocol strictness switches:" +msgstr ":rfc:`2965` 协议严格性开关:" + +#: ../../library/http.cookiejar.rst:543 +msgid "" +"Follow :rfc:`2965` rules on unverifiable transactions (usually, an " +"unverifiable transaction is one resulting from a redirect or a request for " +"an image hosted on another site). If this is false, cookies are *never* " +"blocked on the basis of verifiability" +msgstr "" +"遵循针对不可验证事务的 :rfc:`2965` 规则(不可验证事务通常是由重定向或请求发布在其它网站的图片导致的)。 如果该属性为假值,则 *永远不会*" +" 基于可验证性而阻止 cookie。" + +#: ../../library/http.cookiejar.rst:549 +msgid "Netscape protocol strictness switches:" +msgstr "Netscape 协议严格性开关:" + +#: ../../library/http.cookiejar.rst:553 +msgid "" +"Apply :rfc:`2965` rules on unverifiable transactions even to Netscape " +"cookies." +msgstr "即便是对 Netscape cookie 也要应用 :rfc:`2965` 规则。" + +#: ../../library/http.cookiejar.rst:558 +msgid "" +"Flags indicating how strict to be with domain-matching rules for Netscape " +"cookies. See below for acceptable values." +msgstr "指明针对 Netscape cookie 的域匹配规则的严格程度。 可接受的值见下文。" + +#: ../../library/http.cookiejar.rst:564 +msgid "" +"Ignore cookies in Set-Cookie: headers that have names starting with ``'$'``." +msgstr "忽略 Set-Cookie 中的 cookie: 即名称前缀为 ``'{TX-PL-LABEL}#x27;`` 的标头。" + +#: ../../library/http.cookiejar.rst:569 +msgid "Don't allow setting cookies whose path doesn't path-match request URI." +msgstr "不允许设置路径与请求 URL 路径不匹配的 cookie。" + +#: ../../library/http.cookiejar.rst:571 +msgid "" +":attr:`strict_ns_domain` is a collection of flags. Its value is constructed" +" by or-ing together (for example, " +"``DomainStrictNoDots|DomainStrictNonDomain`` means both flags are set)." +msgstr "" +":attr:`strict_ns_domain` 是一组旗标。 " +"其值是通过或运算来构造的(例如,``DomainStrictNoDots|DomainStrictNonDomain`` 表示同时设置两个旗标)。" + +#: ../../library/http.cookiejar.rst:578 +msgid "" +"When setting cookies, the 'host prefix' must not contain a dot (eg. " +"``www.foo.bar.com`` can't set a cookie for ``.bar.com``, because ``www.foo``" +" contains a dot)." +msgstr "" +"当设置 cookie 是,'host prefix' 不可包含点号(例如 ``www.foo.bar.com`` 不能为 ``.bar.com`` 设置" +" cookie,因为 ``www.foo`` 包含了一个点号)。" + +#: ../../library/http.cookiejar.rst:585 +msgid "" +"Cookies that did not explicitly specify a ``domain`` cookie-attribute can " +"only be returned to a domain equal to the domain that set the cookie (eg. " +"``spam.example.com`` won't be returned cookies from ``example.com`` that had" +" no ``domain`` cookie-attribute)." +msgstr "" +"没有显式指明Cookies that did not explicitly specify a ``domain`` cookie 属性的 cookie" +" 只能被返回给与设置 cookie 的域相同的域(例如 ``spam.example.com`` 不会是来自 ``example.com`` 的返回 " +"cookie,如果该域名没有 ``domain`` cookie 属性的话)。" + +#: ../../library/http.cookiejar.rst:593 +msgid "When setting cookies, require a full :rfc:`2965` domain-match." +msgstr "当设置 cookie 时,要求完整的 :rfc:`2965` 域匹配。" + +#: ../../library/http.cookiejar.rst:595 +msgid "" +"The following attributes are provided for convenience, and are the most " +"useful combinations of the above flags:" +msgstr "下列属性是为方便使用而提供的,是上述旗标的几种最常用组合:" + +#: ../../library/http.cookiejar.rst:601 +msgid "" +"Equivalent to 0 (ie. all of the above Netscape domain strictness flags " +"switched off)." +msgstr "等价于 0 (即所有上述 Netscape 域严格性旗标均停用)。" + +#: ../../library/http.cookiejar.rst:607 +msgid "Equivalent to ``DomainStrictNoDots|DomainStrictNonDomain``." +msgstr "等价于 ``DomainStrictNoDots|DomainStrictNonDomain``。" + +#: ../../library/http.cookiejar.rst:611 +msgid "Cookie Objects" +msgstr "Cookie 对象" + +#: ../../library/http.cookiejar.rst:613 +msgid "" +":class:`Cookie` instances have Python attributes roughly corresponding to " +"the standard cookie-attributes specified in the various cookie standards. " +"The correspondence is not one-to-one, because there are complicated rules " +"for assigning default values, because the ``max-age`` and ``expires`` " +"cookie-attributes contain equivalent information, and because :rfc:`2109` " +"cookies may be 'downgraded' by :mod:`http.cookiejar` from version 1 to " +"version 0 (Netscape) cookies." +msgstr "" +":class:`Cookie` 实例具有与各种 cookie 标准中定义的标准 cookie 属性大致对应的 Python 属性。 " +"这并非一一对应,因为存在复杂的赋默认值的规则,因为 ``max-age`` 和 ``expires`` cookie 属性包含相同信息,也因为 " +":rfc:`2109` cookie 可以被 :mod:`http.cookiejar` 从第 1 版 '降级为' 第 0 版 (Netscape) " +"cookie。" + +#: ../../library/http.cookiejar.rst:621 +msgid "" +"Assignment to these attributes should not be necessary other than in rare " +"circumstances in a :class:`CookiePolicy` method. The class does not enforce" +" internal consistency, so you should know what you're doing if you do that." +msgstr "" +"对这些属性的赋值在 :class:`CookiePolicy` 方法的极少数情况以外应该都是不必要的。 " +"该类不会强制内部一致性,因此如果这样做则你应当清楚自己在做什么。" + +#: ../../library/http.cookiejar.rst:628 +msgid "" +"Integer or :const:`None`. Netscape cookies have :attr:`version` 0. " +":rfc:`2965` and :rfc:`2109` cookies have a ``version`` cookie-attribute of " +"1. However, note that :mod:`http.cookiejar` may 'downgrade' RFC 2109 " +"cookies to Netscape cookies, in which case :attr:`version` is 0." +msgstr "" +"整数或 :const:`None`。 Netscape cookie 的 :attr:`version` 值为 0。 :rfc:`2965` 和 " +":rfc:`2109` cookie 的 ``version`` cookie 属性值为 1。 但是,请注意 :mod:`http.cookiejar`" +" 可以将 RFC 2109 cookie '降级' 为 Netscape cookie,在此情况下 :attr:`version` 值也为 0。" + +#: ../../library/http.cookiejar.rst:636 +msgid "Cookie name (a string)." +msgstr "Cookie 名称(一个字符串)。" + +#: ../../library/http.cookiejar.rst:641 +msgid "Cookie value (a string), or :const:`None`." +msgstr "Cookie 值(一个字符串),或为 :const:`None`。" + +#: ../../library/http.cookiejar.rst:646 +msgid "" +"String representing a port or a set of ports (eg. '80', or '80,8080'), or " +":const:`None`." +msgstr "代表一个端口或一组端口(例如 '80' 或 '80,8080')的字符串,或为 :const:`None`。" + +#: ../../library/http.cookiejar.rst:652 +msgid "Cookie path (a string, eg. ``'/acme/rocket_launchers'``)." +msgstr "Cookie 路径 (字符串类型,例如 ``'/acme/rocket_launchers'``)。" + +#: ../../library/http.cookiejar.rst:657 +msgid "``True`` if cookie should only be returned over a secure connection." +msgstr "如果 cookie 应当只能通过安全连接返回则为 ``True``。" + +#: ../../library/http.cookiejar.rst:662 +msgid "" +"Integer expiry date in seconds since epoch, or :const:`None`. See also the " +":meth:`is_expired` method." +msgstr "" +"整数类型的过期时间,以距离 Unix 纪元的秒数表示,或者为 :const:`None`。 另请参阅 :meth:`is_expired` 方法。" + +#: ../../library/http.cookiejar.rst:668 +msgid "``True`` if this is a session cookie." +msgstr "如果是会话 cookie 则为 ``True``。" + +#: ../../library/http.cookiejar.rst:673 +msgid "" +"String comment from the server explaining the function of this cookie, or " +":const:`None`." +msgstr "来自服务器的解释此 cookie 功能的字符串形式的注释,或者为 :const:`None`。" + +#: ../../library/http.cookiejar.rst:679 +msgid "" +"URL linking to a comment from the server explaining the function of this " +"cookie, or :const:`None`." +msgstr "链接到来自服务器的解释此 cookie 功能的注释的 URL,或者为 :const:`None`。" + +#: ../../library/http.cookiejar.rst:685 +msgid "" +"``True`` if this cookie was received as an :rfc:`2109` cookie (ie. the " +"cookie arrived in a :mailheader:`Set-Cookie` header, and the value of the " +"Version cookie-attribute in that header was 1). This attribute is provided " +"because :mod:`http.cookiejar` may 'downgrade' RFC 2109 cookies to Netscape " +"cookies, in which case :attr:`version` is 0." +msgstr "" +"如果 cookie 是作为 :rfc:`2109` cookie 被接收(即该 cookie 是在 :mailheader:`Set-Cookie` " +"标头中送达,且该标头的 Version cookie 属性的值为 1)则为 ``True``。 之所以要提供该属性是因为 " +":mod:`http.cookiejar` 可能会从 RFC 2109 cookies '降级' 为 Netscape cookie,在此情况下 " +":attr:`version` 值为 0。" + +#: ../../library/http.cookiejar.rst:694 +msgid "" +"``True`` if a port or set of ports was explicitly specified by the server " +"(in the :mailheader:`Set-Cookie` / :mailheader:`Set-Cookie2` header)." +msgstr "" +"如果服务器显式地指定了一个端口或一组端口(在 :mailheader:`Set-Cookie` / :mailheader:`Set-Cookie2` " +"标头中)则为 ``True``。" + +#: ../../library/http.cookiejar.rst:700 +msgid "``True`` if a domain was explicitly specified by the server." +msgstr "如果服务器显式地指定了一个域则为 ``True``。" + +#: ../../library/http.cookiejar.rst:705 +msgid "" +"``True`` if the domain explicitly specified by the server began with a dot " +"(``'.'``)." +msgstr "该属性为 ``True`` 表示服务器显式地指定了以一个点号 (``'.'``) 打头的域。" + +#: ../../library/http.cookiejar.rst:708 +msgid "" +"Cookies may have additional non-standard cookie-attributes. These may be " +"accessed using the following methods:" +msgstr "Cookie 可能还有额外的非标准 cookie 属性。 这些属性可以通过下列方法来访问:" + +#: ../../library/http.cookiejar.rst:714 +msgid "Return ``True`` if cookie has the named cookie-attribute." +msgstr "如果 cookie 具有相应名称的 cookie 属性则返回 ``True``。" + +#: ../../library/http.cookiejar.rst:719 +msgid "" +"If cookie has the named cookie-attribute, return its value. Otherwise, " +"return *default*." +msgstr "如果 cookie 具有相应名称的 cookie 属性,则返回其值。 否则,返回 *default*。" + +#: ../../library/http.cookiejar.rst:725 +msgid "Set the value of the named cookie-attribute." +msgstr "设置指定名称的 cookie 属性的值。" + +#: ../../library/http.cookiejar.rst:727 +msgid "The :class:`Cookie` class also defines the following method:" +msgstr ":class:`Cookie` 类还定义了下列方法:" + +#: ../../library/http.cookiejar.rst:732 +msgid "" +"``True`` if cookie has passed the time at which the server requested it " +"should expire. If *now* is given (in seconds since the epoch), return " +"whether the cookie has expired at the specified time." +msgstr "" +"如果 cookie 传入了服务器请求其所应过期的时间则为 ``True``。 如果给出 *now* 值(距离 Unix 纪元的秒数),则返回在指定的时间" +" cookie 是否已过期。" + +#: ../../library/http.cookiejar.rst:738 +msgid "Examples" +msgstr "例子" + +#: ../../library/http.cookiejar.rst:740 +msgid "" +"The first example shows the most common usage of :mod:`http.cookiejar`::" +msgstr "第一个例子显示了 :mod:`http.cookiejar` 的最常见用法::" + +#: ../../library/http.cookiejar.rst:747 +msgid "" +"This example illustrates how to open a URL using your Netscape, Mozilla, or " +"Lynx cookies (assumes Unix/Netscape convention for location of the cookies " +"file)::" +msgstr "" +"这个例子演示了如何使用你的 Netscape, Mozilla 或 Lynx cookie 打开一个 URL (假定 cookie 文件位置采用 " +"Unix/Netscape 惯例)::" + +#: ../../library/http.cookiejar.rst:756 +msgid "" +"The next example illustrates the use of :class:`DefaultCookiePolicy`. Turn " +"on :rfc:`2965` cookies, be more strict about domains when setting and " +"returning Netscape cookies, and block some domains from setting cookies or " +"having them returned::" +msgstr "" +"下一个例子演示了 :class:`DefaultCookiePolicy` 的使用。 启用 :rfc:`2965` cookie,在设置和返回 " +"Netscape cookie 时更严格地限制域,以及阻止某些域设置 cookie 或返回它们::" diff --git a/library/http.cookies.po b/library/http.cookies.po new file mode 100644 index 000000000..eade99f80 --- /dev/null +++ b/library/http.cookies.po @@ -0,0 +1,362 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) 2001-2022, Python Software Foundation +# This file is distributed under the same license as the Python package. +# FIRST AUTHOR , YEAR. +# +# Translators: +# Menghua Xiao , 2018 +# ppcfish , 2019 +# Alpha Du , 2021 +# Dai Xu , 2021 +# Freesand Leo , 2021 +# +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: Python 3.9\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2022-11-04 14:34+0000\n" +"PO-Revision-Date: 2017-02-16 23:13+0000\n" +"Last-Translator: Freesand Leo , 2021\n" +"Language-Team: Chinese (China) (https://www.transifex.com/python-doc/teams/5390/zh_CN/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: zh_CN\n" +"Plural-Forms: nplurals=1; plural=0;\n" + +#: ../../library/http.cookies.rst:2 +msgid ":mod:`http.cookies` --- HTTP state management" +msgstr ":mod:`http.cookies` --- HTTP状态管理" + +#: ../../library/http.cookies.rst:10 +msgid "**Source code:** :source:`Lib/http/cookies.py`" +msgstr "**源代码:** :source:`Lib/http/cookies.py`" + +#: ../../library/http.cookies.rst:14 +msgid "" +"The :mod:`http.cookies` module defines classes for abstracting the concept " +"of cookies, an HTTP state management mechanism. It supports both simple " +"string-only cookies, and provides an abstraction for having any serializable" +" data-type as cookie value." +msgstr "" +":mod:`http.cookies` 模块定义的类将 cookie 的概念抽象了出来,这是一种 HTTP 状态的管理机制。它既支持简单的纯字符串形式的" +" cookie,也为任何可序列化数据类型的 cookie 提供抽象。" + +#: ../../library/http.cookies.rst:19 +msgid "" +"The module formerly strictly applied the parsing rules described in the " +":rfc:`2109` and :rfc:`2068` specifications. It has since been discovered " +"that MSIE 3.0x doesn't follow the character rules outlined in those specs " +"and also many current day browsers and servers have relaxed parsing rules " +"when comes to Cookie handling. As a result, the parsing rules used are a " +"bit less strict." +msgstr "" +"以前,该模块严格套用 :rfc:`2109` 和 :rfc:`2068` 规范中描述的解析规则。后来人们发现,MSIE 3.0 " +"并不遵循这些规范中的字符规则,而且目前许多浏览器和服务器在处理 cookie 时也放宽了解析规则。 因此,这里用到的解析规则没有那么严格。" + +#: ../../library/http.cookies.rst:25 +msgid "" +"The character set, :data:`string.ascii_letters`, :data:`string.digits` and " +"``!#$%&'*+-.^_`|~:`` denote the set of valid characters allowed by this " +"module in Cookie name (as :attr:`~Morsel.key`)." +msgstr "" +"字符集 :data:`string.ascii_letters` 、 :data:`string.digits` 和 " +"``!#$%&'*+-.^_`|~:`` 给出了本模块允许出现在 cookie 名称中的有效字符集(如 :attr:`~Morsel.key`)。" + +#: ../../library/http.cookies.rst:29 +msgid "Allowed ':' as a valid Cookie name character." +msgstr "“:”字符可用于有效的 cookie 名称。" + +#: ../../library/http.cookies.rst:35 +msgid "" +"On encountering an invalid cookie, :exc:`CookieError` is raised, so if your " +"cookie data comes from a browser you should always prepare for invalid data " +"and catch :exc:`CookieError` on parsing." +msgstr "" +"当遇到无效 cookie 时会触发 :exc:`CookieError`,所以若 cookie " +"数据来自浏览器,一定要做好应对无效数据的准备,并在解析时捕获 :exc:`CookieError`。" + +#: ../../library/http.cookies.rst:42 +msgid "" +"Exception failing because of :rfc:`2109` invalidity: incorrect attributes, " +"incorrect :mailheader:`Set-Cookie` header, etc." +msgstr "出现异常的原因,可能是不符合 :rfc:`2109` :属性不正确、:mailheader:`Set-Cookie` 头部信息不正确等等。" + +#: ../../library/http.cookies.rst:48 +msgid "" +"This class is a dictionary-like object whose keys are strings and whose " +"values are :class:`Morsel` instances. Note that upon setting a key to a " +"value, the value is first converted to a :class:`Morsel` containing the key " +"and the value." +msgstr "" +"类似字典的对象,字典键为字符串,字典值是 :class:`Morsel` 实例。请注意,在将键值关联时,首先会把值转换为包含键和值的 " +":class:`Morsel` 对象。" + +#: ../../library/http.cookies.rst:52 +msgid "If *input* is given, it is passed to the :meth:`load` method." +msgstr "若给出 *input* ,将会传给 :meth:`load` 方法。" + +#: ../../library/http.cookies.rst:57 +msgid "" +"This class derives from :class:`BaseCookie` and overrides " +":meth:`value_decode` and :meth:`value_encode`. SimpleCookie supports strings" +" as cookie values. When setting the value, SimpleCookie calls the builtin " +":func:`str()` to convert the value to a string. Values received from HTTP " +"are kept as strings." +msgstr "" +"该类派生于 :class:`BaseCookie`,并覆盖了 :meth:`value_decode` 和 :meth:`value_encode` " +"方法。SimpleCookie 允许用字符串作为 cookie 值。在设置值时,SimpleCookie 将调用内置的 :func:`str()` " +"将其转换为字符串。从 HTTP 接收到的值将作为字符串保存。" + +#: ../../library/http.cookies.rst:66 +msgid "Module :mod:`http.cookiejar`" +msgstr ":mod:`http.cookiejar` 模块" + +#: ../../library/http.cookies.rst:65 +msgid "" +"HTTP cookie handling for web *clients*. The :mod:`http.cookiejar` and " +":mod:`http.cookies` modules do not depend on each other." +msgstr "" +"处理网络 *客户端* 的 HTTP cookie。 :mod:`http.cookiejar` 和 :mod:`http.cookies` " +"模块相互没有依赖关系。" + +#: ../../library/http.cookies.rst:68 +msgid ":rfc:`2109` - HTTP State Management Mechanism" +msgstr ":rfc:`2109` - HTTP状态管理机制" + +#: ../../library/http.cookies.rst:69 +msgid "This is the state management specification implemented by this module." +msgstr "这是本模块实现的状态管理规范。" + +#: ../../library/http.cookies.rst:75 +msgid "Cookie Objects" +msgstr "Cookie 对象" + +#: ../../library/http.cookies.rst:80 +msgid "" +"Return a tuple ``(real_value, coded_value)`` from a string representation. " +"``real_value`` can be any type. This method does no decoding in " +":class:`BaseCookie` --- it exists so it can be overridden." +msgstr "" +"由字符串返回元组 ``(real_value, coded_value)``。``real_value`` " +"可为任意类型。:class:`BaseCookie` 中的此方法未实现任何解码工作——只为能被子类重写。" + +#: ../../library/http.cookies.rst:87 +msgid "" +"Return a tuple ``(real_value, coded_value)``. *val* can be any type, but " +"``coded_value`` will always be converted to a string. This method does no " +"encoding in :class:`BaseCookie` --- it exists so it can be overridden." +msgstr "" +"返回元组 ``(real_value, coded_value)``。*val* 可为任意类型,``coded_value`` 则会转换为字符串。 " +":class:`BaseCookie` 中的此方法未实现任何编码工作——只为能被子类重写。" + +#: ../../library/http.cookies.rst:92 +msgid "" +"In general, it should be the case that :meth:`value_encode` and " +":meth:`value_decode` are inverses on the range of *value_decode*." +msgstr "" +"通常在 *value_decode* 的取值范围内,:meth:`value_encode` 和 :meth:`value_decode` " +"应为可互逆操作。" + +#: ../../library/http.cookies.rst:98 +msgid "" +"Return a string representation suitable to be sent as HTTP headers. *attrs* " +"and *header* are sent to each :class:`Morsel`'s :meth:`output` method. *sep*" +" is used to join the headers together, and is by default the combination " +"``'\\r\\n'`` (CRLF)." +msgstr "" +"返回可作为 HTTP 标头信息发送的字符串表示。 *attrs* 和 *header* 会传给每个 :class:`Morsel` 的 " +":meth:`output` 方法。 *sep* 用来将标头连接在一起,默认为 ``'\\r\\n'`` (CRLF) 组合。" + +#: ../../library/http.cookies.rst:106 +msgid "" +"Return an embeddable JavaScript snippet, which, if run on a browser which " +"supports JavaScript, will act the same as if the HTTP headers was sent." +msgstr "返回一段可供嵌入的 JavaScript 代码,若在支持 JavaScript 的浏览器上运行,其作用如同发送 HTTP 头部信息一样。" + +#: ../../library/http.cookies.rst:109 ../../library/http.cookies.rst:205 +#: ../../library/http.cookies.rst:213 +msgid "The meaning for *attrs* is the same as in :meth:`output`." +msgstr "*attrs* 的含义与 :meth:`output` 的相同。" + +#: ../../library/http.cookies.rst:114 +msgid "" +"If *rawdata* is a string, parse it as an ``HTTP_COOKIE`` and add the values " +"found there as :class:`Morsel`\\ s. If it is a dictionary, it is equivalent " +"to::" +msgstr "" +"若 *rawdata* 为字符串,则会作为 ``HTTP_COOKIE`` 进行解析,并将找到的值添加为 :class:`Morsel`。 " +"如果是字典值,则等价于::" + +#: ../../library/http.cookies.rst:124 +msgid "Morsel Objects" +msgstr "Morsel 对象" + +#: ../../library/http.cookies.rst:129 +msgid "Abstract a key/value pair, which has some :rfc:`2109` attributes." +msgstr "对键/值对的抽象,带有 :rfc:`2109` 的部分属性。" + +#: ../../library/http.cookies.rst:131 +msgid "" +"Morsels are dictionary-like objects, whose set of keys is constant --- the " +"valid :rfc:`2109` attributes, which are" +msgstr "morsel 对象类似于字典,键的组成是常量——均为有效的 :rfc:`2109` 属性,包括:" + +#: ../../library/http.cookies.rst:134 +msgid "``expires``" +msgstr "``expires``" + +#: ../../library/http.cookies.rst:135 +msgid "``path``" +msgstr "``path``" + +#: ../../library/http.cookies.rst:136 +msgid "``comment``" +msgstr "``comment``" + +#: ../../library/http.cookies.rst:137 +msgid "``domain``" +msgstr "``domain``" + +#: ../../library/http.cookies.rst:138 +msgid "``max-age``" +msgstr "``max-age``" + +#: ../../library/http.cookies.rst:139 +msgid "``secure``" +msgstr "``secure``" + +#: ../../library/http.cookies.rst:140 +msgid "``version``" +msgstr "``version``" + +#: ../../library/http.cookies.rst:141 +msgid "``httponly``" +msgstr "``httponly``" + +#: ../../library/http.cookies.rst:142 +msgid "``samesite``" +msgstr "``samesite``" + +#: ../../library/http.cookies.rst:144 +msgid "" +"The attribute :attr:`httponly` specifies that the cookie is only transferred" +" in HTTP requests, and is not accessible through JavaScript. This is " +"intended to mitigate some forms of cross-site scripting." +msgstr "" +":attr:`httponly` 属性指明了该 cookie 仅在 HTTP 请求中传输,且不能通过 JavaScript " +"访问。这是为了减轻某些跨站脚本攻击的危害。" + +#: ../../library/http.cookies.rst:148 +msgid "" +"The attribute :attr:`samesite` specifies that the browser is not allowed to " +"send the cookie along with cross-site requests. This helps to mitigate CSRF " +"attacks. Valid values for this attribute are \"Strict\" and \"Lax\"." +msgstr "" +":attr:`samesite` 属性指明了浏览器不得与跨站请求一起发送该 cookie。这有助于减轻 CSRF 攻击的危害。此属性的有效值为 " +"“Strict”和“Lax”。" + +#: ../../library/http.cookies.rst:152 +msgid "The keys are case-insensitive and their default value is ``''``." +msgstr "键不区分大小写,默认值为 ``''``。" + +#: ../../library/http.cookies.rst:154 +msgid "" +":meth:`~Morsel.__eq__` now takes :attr:`~Morsel.key` and " +":attr:`~Morsel.value` into account." +msgstr "" +"现在,:meth:`~Morsel.__eq__` 会同时考虑 :attr:`~Morsel.key` 和 :attr:`~Morsel.value` " +"。" + +#: ../../library/http.cookies.rst:158 +msgid "" +"Attributes :attr:`~Morsel.key`, :attr:`~Morsel.value` and " +":attr:`~Morsel.coded_value` are read-only. Use :meth:`~Morsel.set` for " +"setting them." +msgstr "" +" :attr:`~Morsel.key` 、 :attr:`~Morsel.value` 和 :attr:`~Morsel.coded_value` " +"是只读属性。可用 :meth:`~Morsel.set` 进行设置。" + +#: ../../library/http.cookies.rst:163 +msgid "Added support for the :attr:`samesite` attribute." +msgstr "增加对 :attr:`samesite` 属性的支持。" + +#: ../../library/http.cookies.rst:169 +msgid "The value of the cookie." +msgstr "Cookie的值。" + +#: ../../library/http.cookies.rst:174 +msgid "The encoded value of the cookie --- this is what should be sent." +msgstr "编码后的 cookie 值——也即要发送的内容。" + +#: ../../library/http.cookies.rst:179 +msgid "The name of the cookie." +msgstr "cookie 名称" + +#: ../../library/http.cookies.rst:184 +msgid "Set the *key*, *value* and *coded_value* attributes." +msgstr "设置 *key*、*value* 和 *coded_value* 属性。" + +#: ../../library/http.cookies.rst:189 +msgid "Whether *K* is a member of the set of keys of a :class:`Morsel`." +msgstr "*K* 是否属于 :class:`Morsel` 的键。" + +#: ../../library/http.cookies.rst:194 +msgid "" +"Return a string representation of the Morsel, suitable to be sent as an HTTP" +" header. By default, all the attributes are included, unless *attrs* is " +"given, in which case it should be a list of attributes to use. *header* is " +"by default ``\"Set-Cookie:\"``." +msgstr "" +"返回 morsel 的字符串形式,适用于作为 HTTP 头部信息进行发送。默认包含所有属性,除非给出 *attrs* 属性列表。*header* 默认为" +" ``\"Set-Cookie:\"``。" + +#: ../../library/http.cookies.rst:202 +msgid "" +"Return an embeddable JavaScript snippet, which, if run on a browser which " +"supports JavaScript, will act the same as if the HTTP header was sent." +msgstr "返回一段可供嵌入的 JavaScript 代码,若在支持 JavaScript 的浏览器上运行,其作用如同发送 HTTP 头部信息一样。" + +#: ../../library/http.cookies.rst:210 +msgid "" +"Return a string representing the Morsel, without any surrounding HTTP or " +"JavaScript." +msgstr "返回 morsel 的字符串形式,不含 HTTP 或 JavaScript 数据。" + +#: ../../library/http.cookies.rst:218 +msgid "" +"Update the values in the Morsel dictionary with the values in the dictionary" +" *values*. Raise an error if any of the keys in the *values* dict is not a " +"valid :rfc:`2109` attribute." +msgstr "" +"用字典 *values* 中的值更新 morsel 字典中的值。若有 *values* 字典中的键不是有效的 :rfc:`2109` " +"属性,则会触发错误。" + +#: ../../library/http.cookies.rst:222 +msgid "an error is raised for invalid keys." +msgstr "无效键会触发错误。" + +#: ../../library/http.cookies.rst:228 +msgid "Return a shallow copy of the Morsel object." +msgstr "返回 morsel 对象的浅表复制副本。" + +#: ../../library/http.cookies.rst:230 +msgid "return a Morsel object instead of a dict." +msgstr "返回一个 morsel 对象,而非字典。" + +#: ../../library/http.cookies.rst:236 +msgid "" +"Raise an error if key is not a valid :rfc:`2109` attribute, otherwise behave" +" the same as :meth:`dict.setdefault`." +msgstr "若 key 不是有效的 :rfc:`2109` 属性则触发错误,否则与 :meth:`dict.setdefault` 相同。" + +#: ../../library/http.cookies.rst:243 +msgid "Example" +msgstr "示例" + +#: ../../library/http.cookies.rst:245 +msgid "" +"The following example demonstrates how to use the :mod:`http.cookies` " +"module." +msgstr "以下例子演示了 :mod:`http.cookies` 模块的用法。" diff --git a/library/http.po b/library/http.po new file mode 100644 index 000000000..b1c0bc081 --- /dev/null +++ b/library/http.po @@ -0,0 +1,868 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) 2001-2022, Python Software Foundation +# This file is distributed under the same license as the Python package. +# FIRST AUTHOR , YEAR. +# +# Translators: +# SKY H. , 2018 +# Sonny <758896823@qq.com>, 2019 +# ppcfish , 2019 +# Freesand Leo , 2020 +# +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: Python 3.9\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2022-11-04 14:34+0000\n" +"PO-Revision-Date: 2017-02-16 23:14+0000\n" +"Last-Translator: Freesand Leo , 2020\n" +"Language-Team: Chinese (China) (https://www.transifex.com/python-doc/teams/5390/zh_CN/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: zh_CN\n" +"Plural-Forms: nplurals=1; plural=0;\n" + +#: ../../library/http.rst:2 +msgid ":mod:`http` --- HTTP modules" +msgstr ":mod:`http` --- HTTP 模块" + +#: ../../library/http.rst:7 +msgid "**Source code:** :source:`Lib/http/__init__.py`" +msgstr "**源代码:** :source:`Lib/http/__init__.py`" + +#: ../../library/http.rst:15 +msgid "" +":mod:`http` is a package that collects several modules for working with the " +"HyperText Transfer Protocol:" +msgstr ":mod:`http` 是一个包,它收集了多个用于处理超文本传输协议的模块:" + +#: ../../library/http.rst:18 +msgid "" +":mod:`http.client` is a low-level HTTP protocol client; for high-level URL " +"opening use :mod:`urllib.request`" +msgstr "" +":mod:`http.client` 是一个低层级的 HTTP 协议客户端;对于高层级的 URL 访问请使用 :mod:`urllib.request`" + +#: ../../library/http.rst:20 +msgid "" +":mod:`http.server` contains basic HTTP server classes based on " +":mod:`socketserver`" +msgstr ":mod:`http.server` 包含基于 :mod:`socketserver` 的基本 HTTP 服务类" + +#: ../../library/http.rst:21 +msgid "" +":mod:`http.cookies` has utilities for implementing state management with " +"cookies" +msgstr ":mod:`http.cookies` 包含一些有用来实现通过 cookies 进行状态管理的工具" + +#: ../../library/http.rst:22 +msgid ":mod:`http.cookiejar` provides persistence of cookies" +msgstr ":mod:`http.cookiejar` 提供了 cookies 的持久化" + +#: ../../library/http.rst:24 +msgid "" +":mod:`http` is also a module that defines a number of HTTP status codes and " +"associated messages through the :class:`http.HTTPStatus` enum:" +msgstr "" +":mod:`http` 也是一个通过 :class:`http.HTTPStatus` 枚举定义了一些 HTTP 状态码以及相关联消息的模块" + +#: ../../library/http.rst:31 +msgid "" +"A subclass of :class:`enum.IntEnum` that defines a set of HTTP status codes," +" reason phrases and long descriptions written in English." +msgstr ":class:`enum.IntEnum` 的子类,它定义了组 HTTP 状态码,原理短语以及用英语书写的长描述文本。" + +#: ../../library/http.rst:34 +msgid "Usage::" +msgstr "用法::" + +#: ../../library/http.rst:53 +msgid "HTTP status codes" +msgstr "HTTP 状态码" + +#: ../../library/http.rst:55 +msgid "" +"Supported, `IANA-registered `_ status codes available in " +":class:`http.HTTPStatus` are:" +msgstr "" +"已支持并且已在 :class:`http.HTTPStatus` `IANA 注册 " +"`_ 的状态码有:" + +#: ../../library/http.rst:60 +msgid "Code" +msgstr "状态码" + +#: ../../library/http.rst:60 +msgid "Enum Name" +msgstr "映射名" + +#: ../../library/http.rst:60 +msgid "Details" +msgstr "详情" + +#: ../../library/http.rst:62 +msgid "``100``" +msgstr "``100``" + +#: ../../library/http.rst:62 +msgid "``CONTINUE``" +msgstr "``CONTINUE``" + +#: ../../library/http.rst:62 +msgid "HTTP/1.1 :rfc:`7231`, Section 6.2.1" +msgstr "HTTP/1.1 :rfc:`7231`, 6.2.1 节" + +#: ../../library/http.rst:63 +msgid "``101``" +msgstr "``101``" + +#: ../../library/http.rst:63 +msgid "``SWITCHING_PROTOCOLS``" +msgstr "``SWITCHING_PROTOCOLS``" + +#: ../../library/http.rst:63 +msgid "HTTP/1.1 :rfc:`7231`, Section 6.2.2" +msgstr "HTTP/1.1 RFC 7231, 6.2.2 节" + +#: ../../library/http.rst:64 +msgid "``102``" +msgstr "``102``" + +#: ../../library/http.rst:64 +msgid "``PROCESSING``" +msgstr "``PROCESSING``" + +#: ../../library/http.rst:64 +msgid "WebDAV :rfc:`2518`, Section 10.1" +msgstr "WebDAV RFC 2518, 10.1 节" + +#: ../../library/http.rst:65 +msgid "``103``" +msgstr "``103``" + +#: ../../library/http.rst:65 +msgid "``EARLY_HINTS``" +msgstr "``EARLY_HINTS``" + +#: ../../library/http.rst:65 +msgid "An HTTP Status Code for Indicating Hints :rfc:`8297`" +msgstr "用于指定提示 :rfc:`8297` 的 HTTP 状态码" + +#: ../../library/http.rst:66 +msgid "``200``" +msgstr "``200``" + +#: ../../library/http.rst:66 +msgid "``OK``" +msgstr "``OK``" + +#: ../../library/http.rst:66 +msgid "HTTP/1.1 :rfc:`7231`, Section 6.3.1" +msgstr "HTTP/1.1 RFC 7231, 6.3.1 节" + +#: ../../library/http.rst:67 +msgid "``201``" +msgstr "``201``" + +#: ../../library/http.rst:67 +msgid "``CREATED``" +msgstr "``CREATED``" + +#: ../../library/http.rst:67 +msgid "HTTP/1.1 :rfc:`7231`, Section 6.3.2" +msgstr "HTTP/1.1 RFC 7231, 6.3.2 节" + +#: ../../library/http.rst:68 +msgid "``202``" +msgstr "``202``" + +#: ../../library/http.rst:68 +msgid "``ACCEPTED``" +msgstr "``ACCEPTED``" + +#: ../../library/http.rst:68 +msgid "HTTP/1.1 :rfc:`7231`, Section 6.3.3" +msgstr "HTTP/1.1 RFC 7231, 6.3.3 节" + +#: ../../library/http.rst:69 +msgid "``203``" +msgstr "``203``" + +#: ../../library/http.rst:69 +msgid "``NON_AUTHORITATIVE_INFORMATION``" +msgstr "``NON_AUTHORITATIVE_INFORMATION``" + +#: ../../library/http.rst:69 +msgid "HTTP/1.1 :rfc:`7231`, Section 6.3.4" +msgstr "HTTP/1.1 RFC 7231, 6.3.4 节" + +#: ../../library/http.rst:70 +msgid "``204``" +msgstr "``204``" + +#: ../../library/http.rst:70 +msgid "``NO_CONTENT``" +msgstr "``NO_CONTENT``" + +#: ../../library/http.rst:70 +msgid "HTTP/1.1 :rfc:`7231`, Section 6.3.5" +msgstr "HTTP/1.1 RFC 7231, 6.3.5 节" + +#: ../../library/http.rst:71 +msgid "``205``" +msgstr "``205``" + +#: ../../library/http.rst:71 +msgid "``RESET_CONTENT``" +msgstr "``RESET_CONTENT``" + +#: ../../library/http.rst:71 +msgid "HTTP/1.1 :rfc:`7231`, Section 6.3.6" +msgstr "HTTP/1.1 RFC 7231, 6.3.6 节" + +#: ../../library/http.rst:72 +msgid "``206``" +msgstr "``206``" + +#: ../../library/http.rst:72 +msgid "``PARTIAL_CONTENT``" +msgstr "``PARTIAL_CONTENT``" + +#: ../../library/http.rst:72 +msgid "HTTP/1.1 :rfc:`7233`, Section 4.1" +msgstr "HTTP/1.1 RFC 7233, 4.1 节" + +#: ../../library/http.rst:73 +msgid "``207``" +msgstr "``207``" + +#: ../../library/http.rst:73 +msgid "``MULTI_STATUS``" +msgstr "``MULTI_STATUS``" + +#: ../../library/http.rst:73 +msgid "WebDAV :rfc:`4918`, Section 11.1" +msgstr "WebDAV RFC 4918, 11.1 节" + +#: ../../library/http.rst:74 +msgid "``208``" +msgstr "``208``" + +#: ../../library/http.rst:74 +msgid "``ALREADY_REPORTED``" +msgstr "``ALREADY_REPORTED``" + +#: ../../library/http.rst:74 +msgid "WebDAV Binding Extensions :rfc:`5842`, Section 7.1 (Experimental)" +msgstr "WebDAV Binding Extensions RFC 5842, 7.1 节(实验性)" + +#: ../../library/http.rst:75 +msgid "``226``" +msgstr "``226``" + +#: ../../library/http.rst:75 +msgid "``IM_USED``" +msgstr "``IM_USED``" + +#: ../../library/http.rst:75 +msgid "Delta Encoding in HTTP :rfc:`3229`, Section 10.4.1" +msgstr "Delta Encoding in HTTP RFC 3229, 10.4.1 节" + +#: ../../library/http.rst:76 +msgid "``300``" +msgstr "``300``" + +#: ../../library/http.rst:76 +msgid "``MULTIPLE_CHOICES``" +msgstr "``MULTIPLE_CHOICES``:有多种资源可选择" + +#: ../../library/http.rst:76 +msgid "HTTP/1.1 :rfc:`7231`, Section 6.4.1" +msgstr "HTTP/1.1 RFC 7231, 6.4.1 节" + +#: ../../library/http.rst:77 +msgid "``301``" +msgstr "``301``" + +#: ../../library/http.rst:77 +msgid "``MOVED_PERMANENTLY``" +msgstr "``MOVED_PERMANENTLY``:永久移动" + +#: ../../library/http.rst:77 +msgid "HTTP/1.1 :rfc:`7231`, Section 6.4.2" +msgstr "HTTP/1.1 RFC 7231, 6.4.2 节" + +#: ../../library/http.rst:78 +msgid "``302``" +msgstr "``302``" + +#: ../../library/http.rst:78 +msgid "``FOUND``" +msgstr "``FOUND``:临时移动" + +#: ../../library/http.rst:78 +msgid "HTTP/1.1 :rfc:`7231`, Section 6.4.3" +msgstr "HTTP/1.1 RFC 7231, 6.4.3 节" + +#: ../../library/http.rst:79 +msgid "``303``" +msgstr "``303``" + +#: ../../library/http.rst:79 +msgid "``SEE_OTHER``" +msgstr "``SEE_OTHER``:已经移动" + +#: ../../library/http.rst:79 +msgid "HTTP/1.1 :rfc:`7231`, Section 6.4.4" +msgstr "HTTP/1.1 RFC 7231, 6.4.4 节" + +#: ../../library/http.rst:80 +msgid "``304``" +msgstr "``304``" + +#: ../../library/http.rst:80 +msgid "``NOT_MODIFIED``" +msgstr "``NOT_MODIFIED``:没有修改" + +#: ../../library/http.rst:80 +msgid "HTTP/1.1 :rfc:`7232`, Section 4.1" +msgstr "HTTP/1.1 RFC 7232, 4.1 节" + +#: ../../library/http.rst:81 +msgid "``305``" +msgstr "``305``" + +#: ../../library/http.rst:81 +msgid "``USE_PROXY``" +msgstr "``USE_PROXY``:使用代理" + +#: ../../library/http.rst:81 +msgid "HTTP/1.1 :rfc:`7231`, Section 6.4.5" +msgstr "HTTP/1.1 RFC 7231, 6.4.5 节" + +#: ../../library/http.rst:82 +msgid "``307``" +msgstr "``307``" + +#: ../../library/http.rst:82 +msgid "``TEMPORARY_REDIRECT``" +msgstr "``TEMPORARY_REDIRECT``:临时重定向" + +#: ../../library/http.rst:82 +msgid "HTTP/1.1 :rfc:`7231`, Section 6.4.7" +msgstr "HTTP/1.1 :rfc:`7231`, 6.4.7 节" + +#: ../../library/http.rst:83 +msgid "``308``" +msgstr "``308``" + +#: ../../library/http.rst:83 +msgid "``PERMANENT_REDIRECT``" +msgstr "``PERMANENT_REDIRECT``:永久重定向" + +#: ../../library/http.rst:83 +msgid "Permanent Redirect :rfc:`7238`, Section 3 (Experimental)" +msgstr " Permanent Redirect RFC 7238, 3 节(实验性)" + +#: ../../library/http.rst:84 +msgid "``400``" +msgstr "``400``" + +#: ../../library/http.rst:84 +msgid "``BAD_REQUEST``" +msgstr "``BAD_REQUEST``:错误请求" + +#: ../../library/http.rst:84 +msgid "HTTP/1.1 :rfc:`7231`, Section 6.5.1" +msgstr "HTTP/1.1 RFC 7231, 6.5.1 节" + +#: ../../library/http.rst:85 +msgid "``401``" +msgstr "``401``" + +#: ../../library/http.rst:85 +msgid "``UNAUTHORIZED``" +msgstr "``UNAUTHORIZED``:未授权" + +#: ../../library/http.rst:85 +msgid "HTTP/1.1 Authentication :rfc:`7235`, Section 3.1" +msgstr "HTTP/1.1 Authentication RFC 7235, 3.1 节" + +#: ../../library/http.rst:86 +msgid "``402``" +msgstr "``402``" + +#: ../../library/http.rst:86 +msgid "``PAYMENT_REQUIRED``" +msgstr "``PAYMENT_REQUIRED``:保留,将来使用" + +#: ../../library/http.rst:86 +msgid "HTTP/1.1 :rfc:`7231`, Section 6.5.2" +msgstr "HTTP/1.1 RFC 7231, 6.5.2 节" + +#: ../../library/http.rst:87 +msgid "``403``" +msgstr "``403``" + +#: ../../library/http.rst:87 +msgid "``FORBIDDEN``" +msgstr "``FORBIDDEN``:禁止" + +#: ../../library/http.rst:87 +msgid "HTTP/1.1 :rfc:`7231`, Section 6.5.3" +msgstr "HTTP/1.1 RFC 7231, 6.5.3 节" + +#: ../../library/http.rst:88 +msgid "``404``" +msgstr "``404``" + +#: ../../library/http.rst:88 +msgid "``NOT_FOUND``" +msgstr "``NOT_FOUND``:没有找到" + +#: ../../library/http.rst:88 +msgid "HTTP/1.1 :rfc:`7231`, Section 6.5.4" +msgstr "HTTP/1.1 RFC 7231, 6.5.4 节" + +#: ../../library/http.rst:89 +msgid "``405``" +msgstr "``405``" + +#: ../../library/http.rst:89 +msgid "``METHOD_NOT_ALLOWED``" +msgstr "``METHOD_NOT_ALLOWED``:该请求方法不允许" + +#: ../../library/http.rst:89 +msgid "HTTP/1.1 :rfc:`7231`, Section 6.5.5" +msgstr "HTTP/1.1 RFC 7231, 6.5.5 节" + +#: ../../library/http.rst:90 +msgid "``406``" +msgstr "``406``" + +#: ../../library/http.rst:90 +msgid "``NOT_ACCEPTABLE``" +msgstr "``NOT_ACCEPTABLE``:不可接受" + +#: ../../library/http.rst:90 +msgid "HTTP/1.1 :rfc:`7231`, Section 6.5.6" +msgstr "HTTP/1.1 RFC 7231, 6.5.6 节" + +#: ../../library/http.rst:91 +msgid "``407``" +msgstr "``407``" + +#: ../../library/http.rst:91 +msgid "``PROXY_AUTHENTICATION_REQUIRED``" +msgstr "``PROXY_AUTHENTICATION_REQUIRED``:要求使用代理验证身份" + +#: ../../library/http.rst:91 +msgid "HTTP/1.1 Authentication :rfc:`7235`, Section 3.2" +msgstr "HTTP/1.1 Authentication RFC 7235, 3.1 节" + +#: ../../library/http.rst:92 +msgid "``408``" +msgstr "``408``" + +#: ../../library/http.rst:92 +msgid "``REQUEST_TIMEOUT``" +msgstr "``REQUEST_TIMEOUT``:请求超时" + +#: ../../library/http.rst:92 +msgid "HTTP/1.1 :rfc:`7231`, Section 6.5.7" +msgstr "HTTP/1.1 :rfc:`7231`, 6.5.7 节" + +#: ../../library/http.rst:93 +msgid "``409``" +msgstr "``409``" + +#: ../../library/http.rst:93 +msgid "``CONFLICT``" +msgstr "``CONFLICT``:冲突" + +#: ../../library/http.rst:93 +msgid "HTTP/1.1 :rfc:`7231`, Section 6.5.8" +msgstr "HTTP/1.1 RFC 7231, 6.5.8 节" + +#: ../../library/http.rst:94 +msgid "``410``" +msgstr "``410``" + +#: ../../library/http.rst:94 +msgid "``GONE``" +msgstr "``GONE``:已经不在了" + +#: ../../library/http.rst:94 +msgid "HTTP/1.1 :rfc:`7231`, Section 6.5.9" +msgstr "HTTP/1.1 RFC 7231, 6.5.9 节" + +#: ../../library/http.rst:95 +msgid "``411``" +msgstr "``411``" + +#: ../../library/http.rst:95 +msgid "``LENGTH_REQUIRED``" +msgstr "``LENGTH_REQUIRED``:长度要求" + +#: ../../library/http.rst:95 +msgid "HTTP/1.1 :rfc:`7231`, Section 6.5.10" +msgstr "HTTP/1.1 RFC 7231, 6.5.10 节" + +#: ../../library/http.rst:96 +msgid "``412``" +msgstr "``412``" + +#: ../../library/http.rst:96 +msgid "``PRECONDITION_FAILED``" +msgstr "``PRECONDITION_FAILED``:前提条件错误" + +#: ../../library/http.rst:96 +msgid "HTTP/1.1 :rfc:`7232`, Section 4.2" +msgstr "HTTP/1.1 RFC 7232, 4.2 节" + +#: ../../library/http.rst:97 +msgid "``413``" +msgstr "``413``" + +#: ../../library/http.rst:97 +msgid "``REQUEST_ENTITY_TOO_LARGE``" +msgstr "``REQUEST_ENTITY_TOO_LARGE``:请求体太大了" + +#: ../../library/http.rst:97 +msgid "HTTP/1.1 :rfc:`7231`, Section 6.5.11" +msgstr "HTTP/1.1 RFC 7231, 6.5.11 节" + +#: ../../library/http.rst:98 +msgid "``414``" +msgstr "``414``" + +#: ../../library/http.rst:98 +msgid "``REQUEST_URI_TOO_LONG``" +msgstr "``REQUEST_URI_TOO_LONG``:请求URI太长了" + +#: ../../library/http.rst:98 +msgid "HTTP/1.1 :rfc:`7231`, Section 6.5.12" +msgstr "HTTP/1.1 RFC 7231, 6.5.12 节" + +#: ../../library/http.rst:99 +msgid "``415``" +msgstr "``415``" + +#: ../../library/http.rst:99 +msgid "``UNSUPPORTED_MEDIA_TYPE``" +msgstr "``UNSUPPORTED_MEDIA_TYPE``:不支持的媒体格式" + +#: ../../library/http.rst:99 +msgid "HTTP/1.1 :rfc:`7231`, Section 6.5.13" +msgstr "HTTP/1.1 RFC 7231, 6.5.13 节" + +#: ../../library/http.rst:100 +msgid "``416``" +msgstr "``416``" + +#: ../../library/http.rst:100 +msgid "``REQUESTED_RANGE_NOT_SATISFIABLE``" +msgstr "``REQUESTED_RANGE_NOT_SATISFIABLE``" + +#: ../../library/http.rst:100 +msgid "HTTP/1.1 Range Requests :rfc:`7233`, Section 4.4" +msgstr "HTTP/1.1 Range Requests RFC 7233, 4.4 节" + +#: ../../library/http.rst:101 +msgid "``417``" +msgstr "``417``" + +#: ../../library/http.rst:101 +msgid "``EXPECTATION_FAILED``" +msgstr "``EXPECTATION_FAILED``:期望失败" + +#: ../../library/http.rst:101 +msgid "HTTP/1.1 :rfc:`7231`, Section 6.5.14" +msgstr "HTTP/1.1 RFC 7231, 6.5.14 节" + +#: ../../library/http.rst:102 +msgid "``418``" +msgstr "``418``" + +#: ../../library/http.rst:102 +msgid "``IM_A_TEAPOT``" +msgstr "``IM_A_TEAPOT``" + +#: ../../library/http.rst:102 +msgid "HTCPCP/1.0 :rfc:`2324`, Section 2.3.2" +msgstr "HTCPCP/1.0 :rfc:`2324`, Section 2.3.2" + +#: ../../library/http.rst:103 +msgid "``421``" +msgstr "``421``" + +#: ../../library/http.rst:103 +msgid "``MISDIRECTED_REQUEST``" +msgstr "``MISDIRECTED_REQUEST``" + +#: ../../library/http.rst:103 +msgid "HTTP/2 :rfc:`7540`, Section 9.1.2" +msgstr "HTTP/2 :rfc:`7540`, 9.1.2 节" + +#: ../../library/http.rst:104 +msgid "``422``" +msgstr "``422``" + +#: ../../library/http.rst:104 +msgid "``UNPROCESSABLE_ENTITY``" +msgstr "``UNPROCESSABLE_ENTITY``:可加工实体" + +#: ../../library/http.rst:104 +msgid "WebDAV :rfc:`4918`, Section 11.2" +msgstr "WebDAV RFC 4918, 11.2 节" + +#: ../../library/http.rst:105 +msgid "``423``" +msgstr "``423``" + +#: ../../library/http.rst:105 +msgid "``LOCKED``" +msgstr "``LOCKED``:锁着" + +#: ../../library/http.rst:105 +msgid "WebDAV :rfc:`4918`, Section 11.3" +msgstr "WebDAV RFC 4918, 11.3 节" + +#: ../../library/http.rst:106 +msgid "``424``" +msgstr "``424``" + +#: ../../library/http.rst:106 +msgid "``FAILED_DEPENDENCY``" +msgstr "``FAILED_DEPENDENCY``:失败的依赖" + +#: ../../library/http.rst:106 +msgid "WebDAV :rfc:`4918`, Section 11.4" +msgstr "WebDAV RFC 4918, 11.4 节" + +#: ../../library/http.rst:107 +msgid "``425``" +msgstr "``425``" + +#: ../../library/http.rst:107 +msgid "``TOO_EARLY``" +msgstr "``TOO_EARLY``" + +#: ../../library/http.rst:107 +msgid "Using Early Data in HTTP :rfc:`8470`" +msgstr "使用 HTTP :rfc:`8470` 中的早期数据" + +#: ../../library/http.rst:108 +msgid "``426``" +msgstr "``426``" + +#: ../../library/http.rst:108 +msgid "``UPGRADE_REQUIRED``" +msgstr "``UPGRADE_REQUIRED``:升级需要" + +#: ../../library/http.rst:108 +msgid "HTTP/1.1 :rfc:`7231`, Section 6.5.15" +msgstr "HTTP/1.1 RFC 7231, 6.5.15 节" + +#: ../../library/http.rst:109 +msgid "``428``" +msgstr "``428``" + +#: ../../library/http.rst:109 +msgid "``PRECONDITION_REQUIRED``" +msgstr "``PRECONDITION_REQUIRED``:先决条件要求" + +#: ../../library/http.rst:109 ../../library/http.rst:110 +#: ../../library/http.rst:111 +msgid "Additional HTTP Status Codes :rfc:`6585`" +msgstr "Additional HTTP Status Codes RFC 6585" + +#: ../../library/http.rst:110 +msgid "``429``" +msgstr "``429``" + +#: ../../library/http.rst:110 +msgid "``TOO_MANY_REQUESTS``" +msgstr "``TOO_MANY_REQUESTS``:太多的请求" + +#: ../../library/http.rst:111 +msgid "``431``" +msgstr "``431``" + +#: ../../library/http.rst:111 +msgid "``REQUEST_HEADER_FIELDS_TOO_LARGE``" +msgstr "``REQUEST_HEADER_FIELDS_TOO_LARGE``:请求头太大" + +#: ../../library/http.rst:112 +msgid "``451``" +msgstr "``451``" + +#: ../../library/http.rst:112 +msgid "``UNAVAILABLE_FOR_LEGAL_REASONS``" +msgstr "``UNAVAILABLE_FOR_LEGAL_REASONS``" + +#: ../../library/http.rst:112 +msgid "An HTTP Status Code to Report Legal Obstacles :rfc:`7725`" +msgstr "HTTP 状态码用于报告法律障碍 :rfc:`7725`" + +#: ../../library/http.rst:113 +msgid "``500``" +msgstr "``500``" + +#: ../../library/http.rst:113 +msgid "``INTERNAL_SERVER_ERROR``" +msgstr "``INTERNAL_SERVER_ERROR``:内部服务错误" + +#: ../../library/http.rst:113 +msgid "HTTP/1.1 :rfc:`7231`, Section 6.6.1" +msgstr "HTTP/1.1 RFC 7231, 6.6.1 节" + +#: ../../library/http.rst:114 +msgid "``501``" +msgstr "``501``" + +#: ../../library/http.rst:114 +msgid "``NOT_IMPLEMENTED``" +msgstr "``NOT_IMPLEMENTED``:不可执行" + +#: ../../library/http.rst:114 +msgid "HTTP/1.1 :rfc:`7231`, Section 6.6.2" +msgstr "HTTP/1.1 RFC 7231, 6.6.2 节" + +#: ../../library/http.rst:115 +msgid "``502``" +msgstr "``502``" + +#: ../../library/http.rst:115 +msgid "``BAD_GATEWAY``" +msgstr "``BAD_GATEWAY``:无效网关" + +#: ../../library/http.rst:115 +msgid "HTTP/1.1 :rfc:`7231`, Section 6.6.3" +msgstr "HTTP/1.1 RFC 7231, 6.6.3 节" + +#: ../../library/http.rst:116 +msgid "``503``" +msgstr "``503``" + +#: ../../library/http.rst:116 +msgid "``SERVICE_UNAVAILABLE``" +msgstr "``SERVICE_UNAVAILABLE``:服务不可用" + +#: ../../library/http.rst:116 +msgid "HTTP/1.1 :rfc:`7231`, Section 6.6.4" +msgstr "HTTP/1.1 RFC 7231, 6.6.4 节" + +#: ../../library/http.rst:117 +msgid "``504``" +msgstr "``504``" + +#: ../../library/http.rst:117 +msgid "``GATEWAY_TIMEOUT``" +msgstr "``GATEWAY_TIMEOUT``:网关超时" + +#: ../../library/http.rst:117 +msgid "HTTP/1.1 :rfc:`7231`, Section 6.6.5" +msgstr "HTTP/1.1 RFC 7231, 6.6.5 节" + +#: ../../library/http.rst:118 +msgid "``505``" +msgstr "``505``" + +#: ../../library/http.rst:118 +msgid "``HTTP_VERSION_NOT_SUPPORTED``" +msgstr "``HTTP_VERSION_NOT_SUPPORTED``:HTTP版本不支持" + +#: ../../library/http.rst:118 +msgid "HTTP/1.1 :rfc:`7231`, Section 6.6.6" +msgstr "HTTP/1.1 RFC 7231, 6.6.6 节" + +#: ../../library/http.rst:119 +msgid "``506``" +msgstr "``506``" + +#: ../../library/http.rst:119 +msgid "``VARIANT_ALSO_NEGOTIATES``" +msgstr "``VARIANT_ALSO_NEGOTIATES``:服务器存在内部配置错误" + +#: ../../library/http.rst:119 +msgid "" +"Transparent Content Negotiation in HTTP :rfc:`2295`, Section 8.1 " +"(Experimental)" +msgstr "透明内容协商在: HTTP :rfc:`2295`, 8.1 节(实验性)" + +#: ../../library/http.rst:120 +msgid "``507``" +msgstr "``507``" + +#: ../../library/http.rst:120 +msgid "``INSUFFICIENT_STORAGE``" +msgstr "``INSUFFICIENT_STORAGE``:存储不足" + +#: ../../library/http.rst:120 +msgid "WebDAV :rfc:`4918`, Section 11.5" +msgstr "WebDAV RFC 4918, 11.5 节" + +#: ../../library/http.rst:121 +msgid "``508``" +msgstr "``508``" + +#: ../../library/http.rst:121 +msgid "``LOOP_DETECTED``" +msgstr "``LOOP_DETECTED``:循环检测" + +#: ../../library/http.rst:121 +msgid "WebDAV Binding Extensions :rfc:`5842`, Section 7.2 (Experimental)" +msgstr "WebDAV Binding Extensions RFC 5842, 7.2 节(实验性)" + +#: ../../library/http.rst:122 +msgid "``510``" +msgstr "``510``" + +#: ../../library/http.rst:122 +msgid "``NOT_EXTENDED``" +msgstr "``NOT_EXTENDED``:不扩展" + +#: ../../library/http.rst:122 +msgid "An HTTP Extension Framework :rfc:`2774`, Section 7 (Experimental)" +msgstr "WebDAV Binding Extensions RFC 5842, 7.2 节(实验性)" + +#: ../../library/http.rst:123 +msgid "``511``" +msgstr "``511``" + +#: ../../library/http.rst:123 +msgid "``NETWORK_AUTHENTICATION_REQUIRED``" +msgstr "``NETWORK_AUTHENTICATION_REQUIRED``:要求网络身份验证" + +#: ../../library/http.rst:123 +msgid "Additional HTTP Status Codes :rfc:`6585`, Section 6" +msgstr "Additional HTTP Status Codes :rfc:`6585`, 6 节" + +#: ../../library/http.rst:126 +msgid "" +"In order to preserve backwards compatibility, enum values are also present " +"in the :mod:`http.client` module in the form of constants. The enum name is " +"equal to the constant name (i.e. ``http.HTTPStatus.OK`` is also available as" +" ``http.client.OK``)." +msgstr "" +"为了保持向后兼容性,枚举值也以常量形式出现在 :mod:`http.client` 模块中,。 枚举名等于常量名 (例如 " +"``http.HTTPStatus.OK`` 也可以是 ``http.client.OK``)。" + +#: ../../library/http.rst:131 +msgid "Added ``421 MISDIRECTED_REQUEST`` status code." +msgstr "添加了 ``421 MISDIRECTED_REQUEST`` 状态码。" + +#: ../../library/http.rst:134 +msgid "Added ``451 UNAVAILABLE_FOR_LEGAL_REASONS`` status code." +msgstr "添加了 ``451 UNAVAILABLE_FOR_LEGAL_REASONS`` 状态码。" + +#: ../../library/http.rst:137 +msgid "" +"Added ``103 EARLY_HINTS``, ``418 IM_A_TEAPOT`` and ``425 TOO_EARLY`` status " +"codes." +msgstr "增加了 ``103 EARLY_HINTS``, ``418 IM_A_TEAPOT`` 和 ``425 TOO_EARLY`` 状态码" diff --git a/library/http.server.po b/library/http.server.po new file mode 100644 index 000000000..d31c13ed1 --- /dev/null +++ b/library/http.server.po @@ -0,0 +1,724 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) 2001-2025, Python Software Foundation +# This file is distributed under the same license as the Python package. +# FIRST AUTHOR , YEAR. +# +# Translators: +# Konge , 2019 +# John Wick , 2021 +# Kevin Deng , 2021 +# Dai Xu , 2021 +# Zombie110year , 2022 +# Alpha Du , 2022 +# Fw[a]rd , 2022 +# Freesand Leo , 2022 +# Rafael Fontenelle , 2025 +# +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: Python 3.9\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2025-02-07 16:40+0000\n" +"PO-Revision-Date: 2017-02-16 23:14+0000\n" +"Last-Translator: Rafael Fontenelle , 2025\n" +"Language-Team: Chinese (China) (https://app.transifex.com/python-doc/teams/5390/zh_CN/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: zh_CN\n" +"Plural-Forms: nplurals=1; plural=0;\n" + +#: ../../library/http.server.rst:2 +msgid ":mod:`http.server` --- HTTP servers" +msgstr ":mod:`http.server` --- HTTP 服务器" + +#: ../../library/http.server.rst:7 +msgid "**Source code:** :source:`Lib/http/server.py`" +msgstr "**源代码:** :source:`Lib/http/server.py`" + +#: ../../library/http.server.rst:17 +msgid "" +"This module defines classes for implementing HTTP servers (Web servers)." +msgstr "这个模块定义了实现 HTTP 服务器( Web 服务器)的类。" + +#: ../../library/http.server.rst:22 +msgid "" +":mod:`http.server` is not recommended for production. It only implements " +":ref:`basic security checks `." +msgstr "" +":mod:`http.server` 不推荐用于生产环境。它仅仅实现了 :ref:`basic security checks " +"` 的要求。" + +#: ../../library/http.server.rst:25 +msgid "" +"One class, :class:`HTTPServer`, is a :class:`socketserver.TCPServer` " +"subclass. It creates and listens at the HTTP socket, dispatching the " +"requests to a handler. Code to create and run the server looks like this::" +msgstr "" +":class:`HTTPServer` 是 :class:`socketserver.TCPServer` 的一个子类。它会创建和侦听 HTTP " +"套接字,并将请求分发给处理程序。创建和运行 HTTP 服务器的代码类似如下所示:" + +#: ../../library/http.server.rst:37 +msgid "" +"This class builds on the :class:`~socketserver.TCPServer` class by storing " +"the server address as instance variables named :attr:`server_name` and " +":attr:`server_port`. The server is accessible by the handler, typically " +"through the handler's :attr:`server` instance variable." +msgstr "" +"该类基于 :class:`~socketserver.TCPServer` 类,并在实例变量 :attr:`server_name` 和 " +":attr:`server_port` 中保存 HTTP 服务器地址。处理程序可通过实例变量 :attr:`server` 访问 HTTP 服务器。" + +#: ../../library/http.server.rst:44 +msgid "" +"This class is identical to HTTPServer but uses threads to handle requests by" +" using the :class:`~socketserver.ThreadingMixIn`. This is useful to handle " +"web browsers pre-opening sockets, on which :class:`HTTPServer` would wait " +"indefinitely." +msgstr "" +"该类相似于 HTTPServer ,只是会利用 :class:`~socketserver.ThreadingMixIn` " +"对请求进行多线程处理。当需要对 Web 浏览器预先打开套接字进行处理时,这就很有用,这时 :class:`HTTPServer` 会一直等待请求。" + +#: ../../library/http.server.rst:52 +msgid "" +"The :class:`HTTPServer` and :class:`ThreadingHTTPServer` must be given a " +"*RequestHandlerClass* on instantiation, of which this module provides three " +"different variants:" +msgstr "" +"实例化 :class:`HTTPServer` 和 :class:`ThreadingHTTPServer` 时,必须给出一个 " +"*RequestHandlerClass*,本模块提供了该对象的三种变体:" + +#: ../../library/http.server.rst:58 +msgid "" +"This class is used to handle the HTTP requests that arrive at the server. " +"By itself, it cannot respond to any actual HTTP requests; it must be " +"subclassed to handle each request method (e.g. GET or POST). " +":class:`BaseHTTPRequestHandler` provides a number of class and instance " +"variables, and methods for use by subclasses." +msgstr "" +"这个类用于处理到达服务器的 HTTP 请求。 它本身无法响应任何实际的 HTTP 请求;它必须被子类化以处理每个请求方法(例如 GET 或 POST)。" +" :class:`BaseHTTPRequestHandler` 提供了许多供子类使用的类和实例变量以及方法。" + +#: ../../library/http.server.rst:64 +msgid "" +"The handler will parse the request and the headers, then call a method " +"specific to the request type. The method name is constructed from the " +"request. For example, for the request method ``SPAM``, the :meth:`do_SPAM` " +"method will be called with no arguments. All of the relevant information is " +"stored in instance variables of the handler. Subclasses should not need to " +"override or extend the :meth:`__init__` method." +msgstr "" +"这个处理程序将解析请求和标头,然后调用特定请求类型对应的方法。 方法名称将根据请求来构造。 例如,对于请求方法 ``SPAM``,将不带参数地调用 " +":meth:`do_SPAM` 方法。 所有相关信息会被保存在该处理程序的实际变量中。 子类不需要重载或扩展 :meth:`__init__` 方法。" + +#: ../../library/http.server.rst:71 +msgid ":class:`BaseHTTPRequestHandler` has the following instance variables:" +msgstr ":class:`BaseHTTPRequestHandler` 具有下列实例变量:" + +#: ../../library/http.server.rst:75 +msgid "" +"Contains a tuple of the form ``(host, port)`` referring to the client's " +"address." +msgstr "包含 ``(host, port)`` 形式的指向客户端地址的元组。" + +#: ../../library/http.server.rst:80 +msgid "Contains the server instance." +msgstr "包含服务器实例。" + +#: ../../library/http.server.rst:84 +msgid "" +"Boolean that should be set before :meth:`handle_one_request` returns, " +"indicating if another request may be expected, or if the connection should " +"be shut down." +msgstr "应当在 :meth:`handle_one_request` 返回之前设定的布尔值,指明是否要期待另一个请求,还是应当关闭连接。" + +#: ../../library/http.server.rst:90 +msgid "" +"Contains the string representation of the HTTP request line. The terminating" +" CRLF is stripped. This attribute should be set by " +":meth:`handle_one_request`. If no valid request line was processed, it " +"should be set to the empty string." +msgstr "" +"包含 HTTP 请求行的字符串表示。 末尾的 CRLF 会被去除。 该属性应当由 :meth:`handle_one_request` 来设定。 " +"如果无有效请求行被处理,则它应当被设为空字符串。" + +#: ../../library/http.server.rst:97 +msgid "Contains the command (request type). For example, ``'GET'``." +msgstr "包含具体的命令(请求类型)。 例如 ``'GET'``。" + +#: ../../library/http.server.rst:101 +msgid "" +"Contains the request path. If query component of the URL is present, then " +"``path`` includes the query. Using the terminology of :rfc:`3986`, ``path`` " +"here includes ``hier-part`` and the ``query``." +msgstr "" +"包含请求路径。如果URL的查询部分存在, ``path`` 会包含这个查询部分。使用 :rfc:`3986` 的术语来说,在这里, ``path`` " +"包含 ``hier-part`` 和 ``query`` 。" + +#: ../../library/http.server.rst:107 +msgid "" +"Contains the version string from the request. For example, ``'HTTP/1.0'``." +msgstr "包含请求的版本字符串。 例如 ``'HTTP/1.0'``。" + +#: ../../library/http.server.rst:111 +msgid "" +"Holds an instance of the class specified by the :attr:`MessageClass` class " +"variable. This instance parses and manages the headers in the HTTP request. " +"The :func:`~http.client.parse_headers` function from :mod:`http.client` is " +"used to parse the headers and it requires that the HTTP request provide a " +"valid :rfc:`2822` style header." +msgstr "" +"存放由 :attr:`MessageClass` 类变量所指定的类的实例。 该实例会解析并管理 HTTP 请求中的标头。 " +":mod:`http.client` 中的 :func:`~http.client.parse_headers` 函数将被用来解析标头并且它需要 " +"HTTP 请求提供一个有效的 :rfc:`2822` 风格的标头。" + +#: ../../library/http.server.rst:119 +msgid "" +"An :class:`io.BufferedIOBase` input stream, ready to read from the start of " +"the optional input data." +msgstr "一个 :class:`io.BufferedIOBase` 输入流,准备从可选的输入数据的开头进行读取。" + +#: ../../library/http.server.rst:124 +msgid "" +"Contains the output stream for writing a response back to the client. Proper" +" adherence to the HTTP protocol must be used when writing to this stream in " +"order to achieve successful interoperation with HTTP clients." +msgstr "包含用于写入响应并发回给客户端的输出流。 在写入流时必须正确遵守 HTTP 协议以便成功地实现与 HTTP 客户端的互操作。" + +#: ../../library/http.server.rst:129 +msgid "This is an :class:`io.BufferedIOBase` stream." +msgstr "这是一个 :class:`io.BufferedIOBase` 流。" + +#: ../../library/http.server.rst:132 +msgid ":class:`BaseHTTPRequestHandler` has the following attributes:" +msgstr ":class:`BaseHTTPRequestHandler` 具有下列属性:" + +#: ../../library/http.server.rst:136 +msgid "" +"Specifies the server software version. You may want to override this. The " +"format is multiple whitespace-separated strings, where each string is of the" +" form name[/version]. For example, ``'BaseHTTP/0.2'``." +msgstr "" +"指定服务器软件版本。 你可能会想要重写该属性。 该属性的格式为多个以空格分隔的字符串,其中每个字符串的形式为 name[/version]。 例如 " +"``'BaseHTTP/0.2'``。" + +#: ../../library/http.server.rst:142 +msgid "" +"Contains the Python system version, in a form usable by the " +":attr:`version_string` method and the :attr:`server_version` class variable." +" For example, ``'Python/1.4'``." +msgstr "" +"包含 Python 系统版本,采用 :attr:`version_string` 方法和 :attr:`server_version` " +"类变量所支持的形式。 例如 ``'Python/1.4'``。" + +#: ../../library/http.server.rst:148 +msgid "" +"Specifies a format string that should be used by :meth:`send_error` method " +"for building an error response to the client. The string is filled by " +"default with variables from :attr:`responses` based on the status code that " +"passed to :meth:`send_error`." +msgstr "" +"指定应当被 :meth:`send_error` 方法用来构建发给客户端的错误响应的格式字符串。 该字符串应使用来自 :attr:`responses`" +" 的变量根据传给 :meth:`send_error` 的状态码来填充默认值。" + +#: ../../library/http.server.rst:155 +msgid "" +"Specifies the Content-Type HTTP header of error responses sent to the " +"client. The default value is ``'text/html'``." +msgstr "指定发送给客户端的错误响应的 Content-Type HTTP 标头。 默认值为 ``'text/html'``。" + +#: ../../library/http.server.rst:160 +msgid "" +"This specifies the HTTP protocol version used in responses. If set to " +"``'HTTP/1.1'``, the server will permit HTTP persistent connections; however," +" your server *must* then include an accurate ``Content-Length`` header " +"(using :meth:`send_header`) in all of its responses to clients. For " +"backwards compatibility, the setting defaults to ``'HTTP/1.0'``." +msgstr "" +"该属性指定在响应中使用的 HTTP 协议版本。 如果设为 ``'HTTP/1.1'``,服务器将允许 HTTP 永久连接;但是,这样你的服务器 *必须*" +" 在发给客户端的所有响应中包括一个准确的 ``Content-Length`` 标头 (使用 :meth:`send_header`)。 " +"为了向下兼容,该设置默认为 ``'HTTP/1.0'``。" + +#: ../../library/http.server.rst:168 +msgid "" +"Specifies an :class:`email.message.Message`\\ -like class to parse HTTP " +"headers. Typically, this is not overridden, and it defaults to " +":class:`http.client.HTTPMessage`." +msgstr "" +"指定一个 :class:`email.message.Message` 这样的类来解析 HTTP 标头。 通常该属性不会被重写,其默认值为 " +":class:`http.client.HTTPMessage`。" + +#: ../../library/http.server.rst:174 +msgid "" +"This attribute contains a mapping of error code integers to two-element " +"tuples containing a short and long message. For example, ``{code: " +"(shortmessage, longmessage)}``. The *shortmessage* is usually used as the " +"*message* key in an error response, and *longmessage* as the *explain* key." +" It is used by :meth:`send_response_only` and :meth:`send_error` methods." +msgstr "" +"该属性包含一个整数错误代码与由短消息和长消息组成的二元组的映射。 例如,``{code: (shortmessage, longmessage)}``。" +" *shortmessage* 通常是作为消息响应中的 *message* 键,而 *longmessage* 则是作为 *explain* 键。 " +"该属性会被 :meth:`send_response_only` 和 :meth:`send_error` 方法所使用。" + +#: ../../library/http.server.rst:180 +msgid "A :class:`BaseHTTPRequestHandler` instance has the following methods:" +msgstr ":class:`BaseHTTPRequestHandler` 实例具有下列方法:" + +#: ../../library/http.server.rst:184 +msgid "" +"Calls :meth:`handle_one_request` once (or, if persistent connections are " +"enabled, multiple times) to handle incoming HTTP requests. You should never " +"need to override it; instead, implement appropriate :meth:`do_\\*` methods." +msgstr "" +"调用 :meth:`handle_one_request` 一次(或者如果启用了永久连接则为多次)来处理传入的 HTTP 请求。 " +"你应该完全不需要重载它;而是要实现适当的 :meth:`do_\\*` 方法。" + +#: ../../library/http.server.rst:191 +msgid "" +"This method will parse and dispatch the request to the appropriate " +":meth:`do_\\*` method. You should never need to override it." +msgstr "此方法将解析并将请求分配给适当的 :meth:`do_\\*` 方法。 你应该完全不需要重载它。" + +#: ../../library/http.server.rst:196 +msgid "" +"When a HTTP/1.1 compliant server receives an ``Expect: 100-continue`` " +"request header it responds back with a ``100 Continue`` followed by ``200 " +"OK`` headers. This method can be overridden to raise an error if the server " +"does not want the client to continue. For e.g. server can choose to send " +"``417 Expectation Failed`` as a response header and ``return False``." +msgstr "" +"当一个符合 HTTP/1.1 标准的服务器收到 ``Expect: 100-continue`` 请求标头时它会以 ``100 Continue`` 加" +" ``200 OK`` 的标头作为响应。 如果服务器不希望客户端继续则可以重载此方法引发一个错误。 例如服务器可以选择发送 ``417 " +"Expectation Failed`` 作为响应标头并 ``return False``。" + +#: ../../library/http.server.rst:207 +msgid "" +"Sends and logs a complete error reply to the client. The numeric *code* " +"specifies the HTTP error code, with *message* as an optional, short, human " +"readable description of the error. The *explain* argument can be used to " +"provide more detailed information about the error; it will be formatted " +"using the :attr:`error_message_format` attribute and emitted, after a " +"complete set of headers, as the response body. The :attr:`responses` " +"attribute holds the default values for *message* and *explain* that will be " +"used if no value is provided; for unknown codes the default value for both " +"is the string ``???``. The body will be empty if the method is HEAD or the " +"response code is one of the following: ``1xx``, ``204 No Content``, ``205 " +"Reset Content``, ``304 Not Modified``." +msgstr "" +"发送并记录回复给客户端的完整错误信息。 数字形式的 *code* 指明 HTTP 错误代码,可选的 *message* 为简短的易于人类阅读的错误描述。" +" *explain* 参数可被用于提供更详细的错误信息;它将使用 :attr:`error_message_format` " +"属性来进行格式化并在一组完整的标头之后作为响应体被发送。 :attr:`responses` 属性存放了 *message* 和 *explain* " +"的默认值,它们将在未提供时被使用;对于未知代码两者的默认值均为字符串 ``???``。 如果方法为 HEAD 或响应代码是下列值之一则响应体将为空: " +"``1xx``, ``204 No Content``, ``205 Reset Content``, ``304 Not Modified``。" + +#: ../../library/http.server.rst:219 +msgid "" +"The error response includes a Content-Length header. Added the *explain* " +"argument." +msgstr "错误响应包括一个 Content-Length 标头。 增加了 *explain* 参数。" + +#: ../../library/http.server.rst:225 +msgid "" +"Adds a response header to the headers buffer and logs the accepted request. " +"The HTTP response line is written to the internal buffer, followed by " +"*Server* and *Date* headers. The values for these two headers are picked up " +"from the :meth:`version_string` and :meth:`date_time_string` methods, " +"respectively. If the server does not intend to send any other headers using " +"the :meth:`send_header` method, then :meth:`send_response` should be " +"followed by an :meth:`end_headers` call." +msgstr "" +"将一个响应标头添加到标头缓冲区并记录被接受的请求。 HTTP 响应行会被写入到内部缓冲区,后面是 *Server* 和 *Date* 标头。 " +"这两个标头的值将分别通过 :meth:`version_string` 和 :meth:`date_time_string` 方法获取。 " +"如果服务器不打算使用 :meth:`send_header` 方法发送任何其他标头,则 :meth:`send_response` 后面应该跟一个 " +":meth:`end_headers` 调用。" + +#: ../../library/http.server.rst:234 +msgid "" +"Headers are stored to an internal buffer and :meth:`end_headers` needs to be" +" called explicitly." +msgstr "标头会被存储到内部缓冲区并且需要显式地调用 :meth:`end_headers`。" + +#: ../../library/http.server.rst:240 +msgid "" +"Adds the HTTP header to an internal buffer which will be written to the " +"output stream when either :meth:`end_headers` or :meth:`flush_headers` is " +"invoked. *keyword* should specify the header keyword, with *value* " +"specifying its value. Note that, after the send_header calls are done, " +":meth:`end_headers` MUST BE called in order to complete the operation." +msgstr "" +"将 HTTP 标头添加到内部缓冲区,它将在 :meth:`end_headers` 或 :meth:`flush_headers` 被唤起时写入输出流。" +" *keyword* 应当指定标头关键字,并以 *value* 指定其值。 请注意,在 send_header 调用结束之后,必须调用 " +":meth:`end_headers` 以便完成操作。" + +#: ../../library/http.server.rst:246 +msgid "Headers are stored in an internal buffer." +msgstr "标头将被存入内部缓冲区。" + +#: ../../library/http.server.rst:251 +msgid "" +"Sends the response header only, used for the purposes when ``100 Continue`` " +"response is sent by the server to the client. The headers not buffered and " +"sent directly the output stream.If the *message* is not specified, the HTTP " +"message corresponding the response *code* is sent." +msgstr "" +"只发送响应标头,用于当 ``100 Continue`` 响应被服务器发送给客户端的场合。 标头不会被缓冲而是直接发送到输出流。 如果未指定 " +"*message*,则会发送与响应 *code* 相对应的 HTTP 消息。" + +#: ../../library/http.server.rst:260 +msgid "" +"Adds a blank line (indicating the end of the HTTP headers in the response) " +"to the headers buffer and calls :meth:`flush_headers()`." +msgstr "将一个空行(指明响应中 HTTP 标头的结束)添加到标头缓冲区并调用 :meth:`flush_headers()`。" + +#: ../../library/http.server.rst:264 +msgid "The buffered headers are written to the output stream." +msgstr "已缓冲的标头会被写入到输出流。" + +#: ../../library/http.server.rst:269 +msgid "" +"Finally send the headers to the output stream and flush the internal headers" +" buffer." +msgstr "最终将标头发送到输出流并清空内部标头缓冲区。" + +#: ../../library/http.server.rst:276 +msgid "" +"Logs an accepted (successful) request. *code* should specify the numeric " +"HTTP code associated with the response. If a size of the response is " +"available, then it should be passed as the *size* parameter." +msgstr "" +"记录一次被接受(成功)的请求。 *code* 应当指定与请求相关联的 HTTP 代码。 如果请求的大小可用,则它应当作为 *size* 形参传入。" + +#: ../../library/http.server.rst:282 +msgid "" +"Logs an error when a request cannot be fulfilled. By default, it passes the " +"message to :meth:`log_message`, so it takes the same arguments (*format* and" +" additional values)." +msgstr "" +"当请求无法完成时记录一次错误。 默认情况下,它会将消息传给 :meth:`log_message`,因此它接受同样的参数 (*format* " +"和一些额外的值)。" + +#: ../../library/http.server.rst:289 +msgid "" +"Logs an arbitrary message to ``sys.stderr``. This is typically overridden to" +" create custom error logging mechanisms. The *format* argument is a standard" +" printf-style format string, where the additional arguments to " +":meth:`log_message` are applied as inputs to the formatting. The client ip " +"address and current date and time are prefixed to every message logged." +msgstr "" +"将任意一条消息记录到 ``sys.stderr``。 此方法通常会被重写以创建自定义的错误日志记录机制。 *format* 参数是标准 printf " +"风格的格式字符串,其中会将传给 :meth:`log_message` 的额外参数用作格式化操作的输入。 每条消息日志记录的开头都会加上客户端 IP " +"地址和当前日期时间。" + +#: ../../library/http.server.rst:297 +msgid "" +"Returns the server software's version string. This is a combination of the " +":attr:`server_version` and :attr:`sys_version` attributes." +msgstr "" +"返回服务器软件的版本字符串。 该值为 :attr:`server_version` 与 :attr:`sys_version` 属性的组合。" + +#: ../../library/http.server.rst:302 +msgid "" +"Returns the date and time given by *timestamp* (which must be ``None`` or in" +" the format returned by :func:`time.time`), formatted for a message header. " +"If *timestamp* is omitted, it uses the current date and time." +msgstr "" +"返回由 *timestamp* 所给定的日期和时间(参数应为 ``None`` 或为 :func:`time.time` " +"所返回的格式),格式化为一个消息标头。 如果省略 *timestamp*,则会使用当前日期和时间。" + +#: ../../library/http.server.rst:306 +msgid "The result looks like ``'Sun, 06 Nov 1994 08:49:37 GMT'``." +msgstr "结果看起来像 ``'Sun, 06 Nov 1994 08:49:37 GMT'``。" + +#: ../../library/http.server.rst:310 +msgid "Returns the current date and time, formatted for logging." +msgstr "返回当前的日期和时间,为日志格式化" + +#: ../../library/http.server.rst:314 +msgid "Returns the client address." +msgstr "返回客户端的地址" + +#: ../../library/http.server.rst:316 +msgid "" +"Previously, a name lookup was performed. To avoid name resolution delays, it" +" now always returns the IP address." +msgstr "在之前版本中,会执行一次名称查找。 为了避免名称解析的时延,现在将总是返回 IP 地址。" + +#: ../../library/http.server.rst:323 +msgid "" +"This class serves files from the directory *directory* and below, or the " +"current directory if *directory* is not provided, directly mapping the " +"directory structure to HTTP requests." +msgstr "" +"这个类会为目录 *directory* 及以下的文件提供发布服务,或者如果未提供 *directory* 则为当前目录,直接将目录结构映射到 HTTP " +"请求。" + +#: ../../library/http.server.rst:327 +msgid "The *directory* parameter." +msgstr "*directory* 形参。" + +#: ../../library/http.server.rst:330 +msgid "The *directory* parameter accepts a :term:`path-like object`." +msgstr "*directory* 形参接受一个 :term:`path-like object`。" + +#: ../../library/http.server.rst:333 +msgid "" +"A lot of the work, such as parsing the request, is done by the base class " +":class:`BaseHTTPRequestHandler`. This class implements the :func:`do_GET` " +"and :func:`do_HEAD` functions." +msgstr "" +"诸如解析请求之类的大量工作都是由基类 :class:`BaseHTTPRequestHandler` 完成的。本类实现了 :func:`do_GET` " +"和 :func:`do_HEAD` 函数。" + +#: ../../library/http.server.rst:337 +msgid "" +"The following are defined as class-level attributes of " +":class:`SimpleHTTPRequestHandler`:" +msgstr "以下是 :class:`SimpleHTTPRequestHandler` 的类属性。" + +#: ../../library/http.server.rst:342 +msgid "" +"This will be ``\"SimpleHTTP/\" + __version__``, where ``__version__`` is " +"defined at the module level." +msgstr "这会是 ``\"SimpleHTTP/\" + __version__``,其中 ``__version__`` 定义于模块级别。" + +#: ../../library/http.server.rst:347 +msgid "" +"A dictionary mapping suffixes into MIME types, contains custom overrides for" +" the default system mappings. The mapping is used case-insensitively, and so" +" should contain only lower-cased keys." +msgstr "将后缀映射为 MIME 类型的字典,其中包含了覆盖系统默认值的自定义映射关系。不区分大小写,因此字典键只应为小写值。" + +#: ../../library/http.server.rst:351 +msgid "" +"This dictionary is no longer filled with the default system mappings, but " +"only contains overrides." +msgstr "此字典不再填充默认的系统映射,而只包含覆盖值。" + +#: ../../library/http.server.rst:355 +msgid "" +"The :class:`SimpleHTTPRequestHandler` class defines the following methods:" +msgstr ":class:`SimpleHTTPRequestHandler` 类定义了以下方法:" + +#: ../../library/http.server.rst:359 +msgid "" +"This method serves the ``'HEAD'`` request type: it sends the headers it " +"would send for the equivalent ``GET`` request. See the :meth:`do_GET` method" +" for a more complete explanation of the possible headers." +msgstr "" +"本方法为 ``'HEAD'`` 请求提供服务:它将发送等同于 ``GET`` 请求的头文件。关于合法头部信息的更完整解释,请参阅 " +":meth:`do_GET` 方法。" + +#: ../../library/http.server.rst:365 +msgid "" +"The request is mapped to a local file by interpreting the request as a path " +"relative to the current working directory." +msgstr "通过将请求解释为相对于当前工作目录的路径,将请求映射到某个本地文件。" + +#: ../../library/http.server.rst:368 +msgid "" +"If the request was mapped to a directory, the directory is checked for a " +"file named ``index.html`` or ``index.htm`` (in that order). If found, the " +"file's contents are returned; otherwise a directory listing is generated by " +"calling the :meth:`list_directory` method. This method uses " +":func:`os.listdir` to scan the directory, and returns a ``404`` error " +"response if the :func:`~os.listdir` fails." +msgstr "" +"如果请求被映射到目录,则会依次检查该目录是否存在 ``index.html`` 或 ``index.htm`` 文件。若存在则返回文件内容;否则会调用" +" :meth:`list_directory` 方法生成目录列表。本方法将利用 :func:`os.listdir` 扫描目录,如果 " +":func:`~os.listdir` 失败,则返回 ``404`` 出错应答。" + +#: ../../library/http.server.rst:375 +msgid "" +"If the request was mapped to a file, it is opened. Any :exc:`OSError` " +"exception in opening the requested file is mapped to a ``404``, ``'File not " +"found'`` error. If there was a ``'If-Modified-Since'`` header in the " +"request, and the file was not modified after this time, a ``304``, ``'Not " +"Modified'`` response is sent. Otherwise, the content type is guessed by " +"calling the :meth:`guess_type` method, which in turn uses the " +"*extensions_map* variable, and the file contents are returned." +msgstr "" +"如果请求被映射到文件,则会打开该文件。 打开文件时的任何 :exc:`OSError` 异常都会被映射为 ``404``, ``'File not " +"found'`` 错误。 如果请求中带有 ``'If-Modified-Since'`` 标头,而在此时间点之后文件未作修改,则会发送 ``304``," +" ``'Not Modified'`` 的响应。 否则会调用 :meth:`guess_type` 方法猜测内容的类型,该方法会反过来用到 " +"*extensions_map* 变量,并返回文件内容。" + +#: ../../library/http.server.rst:383 +msgid "" +"A ``'Content-type:'`` header with the guessed content type is output, " +"followed by a ``'Content-Length:'`` header with the file's size and a " +"``'Last-Modified:'`` header with the file's modification time." +msgstr "" +"将会输出 ``'Content-type:'`` 头部信息,带上猜出的内容类型,然后是 ``'Content-Length:'`` " +"头部信息,带有文件的大小,以及 ``'Last-Modified:'`` 头部信息,带有文件的修改时间。" + +#: ../../library/http.server.rst:387 +msgid "" +"Then follows a blank line signifying the end of the headers, and then the " +"contents of the file are output. If the file's MIME type starts with " +"``text/`` the file is opened in text mode; otherwise binary mode is used." +msgstr "" +"后面是一个空行,标志着头部信息的结束,然后输出文件的内容。如果文件的 MIME 类型以 ``text/`` " +"开头,文件将以文本模式打开;否则将使用二进制模式。" + +#: ../../library/http.server.rst:391 +msgid "" +"For example usage, see the implementation of the :func:`test` function " +"invocation in the :mod:`http.server` module." +msgstr "用法示例请参阅 :mod:`http.server` 模块中的 :func:`test` 函数的实现。" + +#: ../../library/http.server.rst:394 +msgid "Support of the ``'If-Modified-Since'`` header." +msgstr "为 ``'If-Modified-Since'`` 头部信息提供支持。" + +#: ../../library/http.server.rst:397 +msgid "" +"The :class:`SimpleHTTPRequestHandler` class can be used in the following " +"manner in order to create a very basic webserver serving files relative to " +"the current directory::" +msgstr "" +":class:`SimpleHTTPRequestHandler` 类的用法可如下所示,以便创建一个非常简单的 Web " +"服务,为相对于当前目录的文件提供服务:" + +#: ../../library/http.server.rst:414 +msgid "" +":mod:`http.server` can also be invoked directly using the :option:`-m` " +"switch of the interpreter. Similar to the previous example, this serves " +"files relative to the current directory::" +msgstr "" +":mod:`http.server` 也可以使用解释器的 :option:`-m` 参数直接调用。 与前面的例子类似,这将提供相对于当前目录的文件::" + +#: ../../library/http.server.rst:420 +msgid "" +"The server listens to port 8000 by default. The default can be overridden by" +" passing the desired port number as an argument::" +msgstr "服务器默认监听端口为8000。可以通过传递所需的端口号作为参数来覆盖默认值::" + +#: ../../library/http.server.rst:425 +msgid "" +"By default, the server binds itself to all interfaces. The option " +"``-b/--bind`` specifies a specific address to which it should bind. Both " +"IPv4 and IPv6 addresses are supported. For example, the following command " +"causes the server to bind to localhost only::" +msgstr "" +"默认情况下,服务器将自己绑定到所有接口。 选项 `-b/--bind` 指定了一个特定的地址,它应该与之绑定。 IPv4 和 IPv6 " +"地址都被支持。例如,下面的命令使服务器只绑定到 localhost::" + +#: ../../library/http.server.rst:432 +msgid "``--bind`` argument was introduced." +msgstr "引入了 ``--bind`` 参数。" + +#: ../../library/http.server.rst:435 +msgid "``--bind`` argument enhanced to support IPv6" +msgstr "为了支持 IPv6 改进了 ``--bind`` 参数。" + +#: ../../library/http.server.rst:438 +msgid "" +"By default, the server uses the current directory. The option " +"``-d/--directory`` specifies a directory to which it should serve the files." +" For example, the following command uses a specific directory::" +msgstr "" +"默认情况下,服务器使用当前目录。选项 ``-d/--directory`` 指定了一个它应该提供文件的目录。例如,下面的命令使用一个特定的目录::" + +#: ../../library/http.server.rst:444 +msgid "``--directory`` argument was introduced." +msgstr "``--directory`` 参数被引入。" + +#: ../../library/http.server.rst:449 +msgid "" +"This class is used to serve either files or output of CGI scripts from the " +"current directory and below. Note that mapping HTTP hierarchic structure to " +"local directory structure is exactly as in " +":class:`SimpleHTTPRequestHandler`." +msgstr "" +"该类可为当前及以下目录中的文件或输出 CGI 脚本提供服务。注意,把 HTTP 分层结构映射到本地目录结构,这与 " +":class:`SimpleHTTPRequestHandler` 完全一样。" + +#: ../../library/http.server.rst:455 +msgid "" +"CGI scripts run by the :class:`CGIHTTPRequestHandler` class cannot execute " +"redirects (HTTP code 302), because code 200 (script output follows) is sent " +"prior to execution of the CGI script. This pre-empts the status code." +msgstr "" +"由 :class:`CGIHTTPRequestHandler` 类运行的 CGI 脚本不能进行重定向操作(HTTP 代码302),因为在执行 CGI " +"脚本之前会发送代码 200(接下来就输出脚本)。这样状态码就冲突了。" + +#: ../../library/http.server.rst:460 +msgid "" +"The class will however, run the CGI script, instead of serving it as a file," +" if it guesses it to be a CGI script. Only directory-based CGI are used ---" +" the other common server configuration is to treat special extensions as " +"denoting CGI scripts." +msgstr "" +"然而,如果这个类猜测它是一个 CGI 脚本,那么就会运行该 CGI 脚本,而不是作为文件提供出去。 只会识别基于目录的 CGI —— " +"另有一种常用的服务器设置,即标识 CGI 脚本是通过特殊的扩展名。" + +#: ../../library/http.server.rst:465 +msgid "" +"The :func:`do_GET` and :func:`do_HEAD` functions are modified to run CGI " +"scripts and serve the output, instead of serving files, if the request leads" +" to somewhere below the ``cgi_directories`` path." +msgstr "" +"如果请求指向 ``cgi_directories`` 以下的路径,:func:`do_GET` 和 :func:`do_HEAD` " +"函数已作修改,不是给出文件,而是运行 CGI 脚本并输出结果。" + +#: ../../library/http.server.rst:469 +msgid "The :class:`CGIHTTPRequestHandler` defines the following data member:" +msgstr ":class:`CGIHTTPRequestHandler` 定义了以下数据成员:" + +#: ../../library/http.server.rst:473 +msgid "" +"This defaults to ``['/cgi-bin', '/htbin']`` and describes directories to " +"treat as containing CGI scripts." +msgstr "默认为 ``['/cgi-bin', '/htbin']``,视作 CGI 脚本所在目录。" + +#: ../../library/http.server.rst:476 +msgid "The :class:`CGIHTTPRequestHandler` defines the following method:" +msgstr ":class:`CGIHTTPRequestHandler` 定义了以下方法:" + +#: ../../library/http.server.rst:480 +msgid "" +"This method serves the ``'POST'`` request type, only allowed for CGI " +"scripts. Error 501, \"Can only POST to CGI scripts\", is output when trying" +" to POST to a non-CGI url." +msgstr "" +"本方法服务于 ``'POST'`` 请求,仅用于 CGI 脚本。如果试图向非 CGI 网址发送 POST 请求,则会输出错误 501:Can only" +" POST to CGI scripts\"。" + +#: ../../library/http.server.rst:484 +msgid "" +"Note that CGI scripts will be run with UID of user nobody, for security " +"reasons. Problems with the CGI script will be translated to error 403." +msgstr "请注意,为了保证安全性,CGI 脚本将以用户 nobody 的 UID 运行。CGI 脚本运行错误将被转换为错误 403。" + +#: ../../library/http.server.rst:487 +msgid "" +":class:`CGIHTTPRequestHandler` can be enabled in the command line by passing" +" the ``--cgi`` option::" +msgstr "通过在命令行传入 ``--cgi`` 参数,可以启用 :class:`CGIHTTPRequestHandler` :" + +#: ../../library/http.server.rst:495 +msgid "Security Considerations" +msgstr "安全考量" + +#: ../../library/http.server.rst:499 +msgid "" +":class:`SimpleHTTPRequestHandler` will follow symbolic links when handling " +"requests, this makes it possible for files outside of the specified " +"directory to be served." +msgstr "当处理请求时,:class:`SimpleHTTPRequestHandler` 会解析符号链接,这有可能使得指定文件夹以外的文件被暴露。" + +#: ../../library/http.server.rst:503 +msgid "" +"Earlier versions of Python did not scrub control characters from the log " +"messages emitted to stderr from ``python -m http.server`` or the default " +":class:`BaseHTTPRequestHandler` ``.log_message`` implementation. This could " +"allow remote clients connecting to your server to send nefarious control " +"codes to your terminal." +msgstr "" +"较早版本的 Python 不会擦除从 ``python -m http.server`` 或默认的 " +":class:`BaseHTTPRequestHandler` ``.log_message`` 实现发送到 stderr 的日志消息中的控制字符。 " +"这可以允许连接到你的服务器的远程客户端向你的终端发送邪恶的控制代码。" + +#: ../../library/http.server.rst:509 +msgid "scrubbing control characters from log messages" +msgstr "" diff --git a/library/i18n.po b/library/i18n.po new file mode 100644 index 000000000..c0a272da5 --- /dev/null +++ b/library/i18n.po @@ -0,0 +1,39 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) 2001-2022, Python Software Foundation +# This file is distributed under the same license as the Python package. +# FIRST AUTHOR , YEAR. +# +# Translators: +# Kaizhao Zhang , 2018 +# Alpha Du , 2019 +# +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: Python 3.9\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2022-11-04 14:34+0000\n" +"PO-Revision-Date: 2017-02-16 23:14+0000\n" +"Last-Translator: Alpha Du , 2019\n" +"Language-Team: Chinese (China) (https://www.transifex.com/python-doc/teams/5390/zh_CN/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: zh_CN\n" +"Plural-Forms: nplurals=1; plural=0;\n" + +#: ../../library/i18n.rst:5 +msgid "Internationalization" +msgstr "国际化" + +#: ../../library/i18n.rst:7 +msgid "" +"The modules described in this chapter help you write software that is " +"independent of language and locale by providing mechanisms for selecting a " +"language to be used in program messages or by tailoring output to match " +"local conventions." +msgstr "本章中介绍的模块通过提供选择要在程序信息中使用的语言的机制或通过定制输出以匹配本地约定来帮助你编写不依赖于语言和区域设置的软件。" + +#: ../../library/i18n.rst:12 +msgid "The list of modules described in this chapter is:" +msgstr "本章中描述的模块列表是:" diff --git a/library/idle.po b/library/idle.po new file mode 100644 index 000000000..d1ac10109 --- /dev/null +++ b/library/idle.po @@ -0,0 +1,1758 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) 2001-2024, Python Software Foundation +# This file is distributed under the same license as the Python package. +# FIRST AUTHOR , YEAR. +# +# Translators: +# Shengjing Zhu , 2018 +# 8af080f2e6702c64bedd01873aed27e8_25aec74 , 2019 +# ppcfish , 2021 +# Freesand Leo , 2022 +# Rafael Fontenelle , 2024 +# +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: Python 3.9\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2024-11-08 16:35+0000\n" +"PO-Revision-Date: 2017-02-16 23:14+0000\n" +"Last-Translator: Rafael Fontenelle , 2024\n" +"Language-Team: Chinese (China) (https://app.transifex.com/python-doc/teams/5390/zh_CN/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: zh_CN\n" +"Plural-Forms: nplurals=1; plural=0;\n" + +#: ../../library/idle.rst:4 +msgid "IDLE" +msgstr "IDLE" + +#: ../../library/idle.rst:8 +msgid "**Source code:** :source:`Lib/idlelib/`" +msgstr "**源代码:** :source:`Lib/idlelib/`" + +#: ../../library/idle.rst:17 +msgid "IDLE is Python's Integrated Development and Learning Environment." +msgstr "IDLE 是 Python 所内置的开发与学习环境。" + +#: ../../library/idle.rst:19 +msgid "IDLE has the following features:" +msgstr "IDLE 具有以下特性:" + +#: ../../library/idle.rst:21 +msgid "coded in 100% pure Python, using the :mod:`tkinter` GUI toolkit" +msgstr "编码于 100% 纯正的 Python,使用名为 :mod:`tkinter` 的图形用户界面工具" + +#: ../../library/idle.rst:23 +msgid "cross-platform: works mostly the same on Windows, Unix, and macOS" +msgstr "跨平台:在 Windows、Unix 和 macOS 上工作近似。" + +#: ../../library/idle.rst:25 +msgid "" +"Python shell window (interactive interpreter) with colorizing of code input," +" output, and error messages" +msgstr "提供输入输出高亮和错误信息的 Python 命令行窗口 (交互解释器)" + +#: ../../library/idle.rst:28 +msgid "" +"multi-window text editor with multiple undo, Python colorizing, smart " +"indent, call tips, auto completion, and other features" +msgstr "提供多次撤销操作、Python 语法高亮、智能缩进、函数调用提示、自动补全等功能的多窗口文本编辑器" + +#: ../../library/idle.rst:31 +msgid "" +"search within any window, replace within editor windows, and search through " +"multiple files (grep)" +msgstr "在多个窗口中检索,在编辑器中替换文本,以及在多个文件中检索(通过 grep)" + +#: ../../library/idle.rst:34 +msgid "" +"debugger with persistent breakpoints, stepping, and viewing of global and " +"local namespaces" +msgstr "提供持久保存的断点调试、单步调试、查看本地和全局命名空间功能的调试器" + +#: ../../library/idle.rst:37 +msgid "configuration, browsers, and other dialogs" +msgstr "配置、浏览以及其它对话框" + +#: ../../library/idle.rst:40 +msgid "Menus" +msgstr "目录" + +#: ../../library/idle.rst:42 +msgid "" +"IDLE has two main window types, the Shell window and the Editor window. It " +"is possible to have multiple editor windows simultaneously. On Windows and " +"Linux, each has its own top menu. Each menu documented below indicates " +"which window type it is associated with." +msgstr "" +"IDEL 有两种主要的窗口类型:Shell窗口和编辑器窗口。其中编辑器窗口可以同时打开多个。并且对于 Windows 和 Linux " +"平台,窗口顶部主菜单各不相同。以下每个菜单说明项,都标识了与之关联的平台类型。" + +#: ../../library/idle.rst:47 +msgid "" +"Output windows, such as used for Edit => Find in Files, are a subtype of " +"editor window. They currently have the same top menu but a different " +"default title and context menu." +msgstr "导出窗口,例如使用 编辑=>在文件中查找 是编辑器窗口的的一个子类型。它们目前有着相同的主菜单,但是默认标题和上下文菜单不同。" + +#: ../../library/idle.rst:51 +msgid "" +"On macOS, there is one application menu. It dynamically changes according " +"to the window currently selected. It has an IDLE menu, and some entries " +"described below are moved around to conform to Apple guidelines." +msgstr "" +"在macOS上,只有一个应用程序菜单。它会根据当前选择的窗口动态变化。它具有一个IDLE菜单,并且下面描述的某些条目已移动到符合Apple准则的位置。" + +#: ../../library/idle.rst:56 +msgid "File menu (Shell and Editor)" +msgstr "文件菜单 (命令行和编辑器)" + +#: ../../library/idle.rst:59 +msgid "New File" +msgstr "新建文件" + +#: ../../library/idle.rst:59 +msgid "Create a new file editing window." +msgstr "创建一个文件编辑器窗口。" + +#: ../../library/idle.rst:62 +msgid "Open..." +msgstr "打开..." + +#: ../../library/idle.rst:62 +msgid "Open an existing file with an Open dialog." +msgstr "使用打开窗口以打开一个已存在的文件。" + +#: ../../library/idle.rst:65 +msgid "Recent Files" +msgstr "近期文件" + +#: ../../library/idle.rst:65 +msgid "Open a list of recent files. Click one to open it." +msgstr "打开一个近期文件列表,选取一个以打开它。" + +#: ../../library/idle.rst:68 +msgid "Open Module..." +msgstr "打开模块..." + +#: ../../library/idle.rst:68 +msgid "Open an existing module (searches sys.path)." +msgstr "打开一个已存在的模块 (搜索 sys.path)" + +#: ../../library/idle.rst:76 +msgid "Class Browser" +msgstr "类浏览器" + +#: ../../library/idle.rst:75 +msgid "" +"Show functions, classes, and methods in the current Editor file in a tree " +"structure. In the shell, open a module first." +msgstr "于当前所编辑的文件中使用树形结构展示函数、类以及方法。在命令行中,首先打开一个模块。" + +#: ../../library/idle.rst:80 +msgid "Path Browser" +msgstr "路径浏览" + +#: ../../library/idle.rst:79 +msgid "" +"Show sys.path directories, modules, functions, classes and methods in a tree" +" structure." +msgstr "在树状结构中展示 sys.path 目录、模块、函数、类和方法。" + +#: ../../library/idle.rst:86 +msgid "Save" +msgstr "保存" + +#: ../../library/idle.rst:83 +msgid "" +"Save the current window to the associated file, if there is one. Windows " +"that have been changed since being opened or last saved have a \\* before " +"and after the window title. If there is no associated file, do Save As " +"instead." +msgstr "" +"如果文件已经存在,则将当前窗口保存至对应的文件。自打开或上次保存之后经过修改的文件的窗口标题栏首尾将出现星号 \\* " +"。如果没有对应的文件,则使用“另存为”代替。" + +#: ../../library/idle.rst:90 +msgid "Save As..." +msgstr "保存为..." + +#: ../../library/idle.rst:89 +msgid "" +"Save the current window with a Save As dialog. The file saved becomes the " +"new associated file for the window." +msgstr "使用“保存为”对话框保存当前窗口。被保存的文件将作为当前窗口新的对应文件。" + +#: ../../library/idle.rst:94 +msgid "Save Copy As..." +msgstr "另存为副本..." + +#: ../../library/idle.rst:93 +msgid "" +"Save the current window to different file without changing the associated " +"file." +msgstr "保存当前窗口至另一个文件,而不修改当前对应文件。" + +#: ../../library/idle.rst:97 +msgid "Print Window" +msgstr "打印窗口" + +#: ../../library/idle.rst:97 +msgid "Print the current window to the default printer." +msgstr "通过默认打印机打印当前窗口。" + +#: ../../library/idle.rst:102 +msgid "Close Window" +msgstr "关闭窗口" + +#: ../../library/idle.rst:100 +msgid "" +"Close the current window (if an unsaved editor, ask to save; if an unsaved " +"Shell, ask to quit execution). Calling ``exit()`` or ``close()`` in the " +"Shell window also closes Shell. If this is the only window, also exit IDLE." +msgstr "" +"关闭当前窗口(如果是未保存的编辑器窗口,则会提示保存;如果是未保存的 Shell 窗口,则会提示退出执行)。 在Shell 窗口中调用 " +"``exit()`` 或 ``close()`` 也会关闭 Shell 窗口。 如果这是唯一的窗口,则还会退出 IDLE。" + +#: ../../library/idle.rst:105 +msgid "Exit IDLE" +msgstr "退出 IDLE" + +#: ../../library/idle.rst:105 +msgid "Close all windows and quit IDLE (ask to save unsaved edit windows)." +msgstr "关闭所有窗口并退出 IDLE (将提示保存未保存的编辑窗口)。" + +#: ../../library/idle.rst:108 +msgid "Edit menu (Shell and Editor)" +msgstr "编辑菜单(命令行和编辑器)" + +#: ../../library/idle.rst:112 +msgid "Undo" +msgstr "撤销操作" + +#: ../../library/idle.rst:111 +msgid "" +"Undo the last change to the current window. A maximum of 1000 changes may " +"be undone." +msgstr "撤销当前窗口的最近一次操作。最高可以撤回 1000 条操作记录。" + +#: ../../library/idle.rst:115 +msgid "Redo" +msgstr "重做" + +#: ../../library/idle.rst:115 +msgid "Redo the last undone change to the current window." +msgstr "重做当前窗口最近一次所撤销的操作。" + +#: ../../library/idle.rst:118 ../../library/idle.rst:367 +msgid "Cut" +msgstr "剪切" + +#: ../../library/idle.rst:118 ../../library/idle.rst:367 +msgid "" +"Copy selection into the system-wide clipboard; then delete the selection." +msgstr "复制选区至系统剪贴板,然后删除选区。" + +#: ../../library/idle.rst:121 ../../library/idle.rst:370 +msgid "Copy" +msgstr "复制" + +#: ../../library/idle.rst:121 ../../library/idle.rst:370 +msgid "Copy selection into the system-wide clipboard." +msgstr "复制选区至系统剪贴板。" + +#: ../../library/idle.rst:124 ../../library/idle.rst:373 +msgid "Paste" +msgstr "粘贴" + +#: ../../library/idle.rst:124 ../../library/idle.rst:373 +msgid "Insert contents of the system-wide clipboard into the current window." +msgstr "插入系统剪贴板的内容至当前窗口。" + +#: ../../library/idle.rst:126 +msgid "The clipboard functions are also available in context menus." +msgstr "剪贴板功能也可用于上下文目录。" + +#: ../../library/idle.rst:129 +msgid "Select All" +msgstr "全选" + +#: ../../library/idle.rst:129 +msgid "Select the entire contents of the current window." +msgstr "选择当前窗口的全部内容。" + +#: ../../library/idle.rst:132 +msgid "Find..." +msgstr "查找..." + +#: ../../library/idle.rst:132 +msgid "Open a search dialog with many options" +msgstr "打开一个提供多选项的查找窗口。" + +#: ../../library/idle.rst:135 +msgid "Find Again" +msgstr "再次查找" + +#: ../../library/idle.rst:135 +msgid "Repeat the last search, if there is one." +msgstr "重复上一次搜索(如果有的话)。" + +#: ../../library/idle.rst:138 +msgid "Find Selection" +msgstr "查找选区" + +#: ../../library/idle.rst:138 +msgid "Search for the currently selected string, if there is one." +msgstr "查找当前选中的字符串,如果存在" + +#: ../../library/idle.rst:141 +msgid "Find in Files..." +msgstr "在文件中查找..." + +#: ../../library/idle.rst:141 +msgid "Open a file search dialog. Put results in a new output window." +msgstr "打开文件查找对话框。将结果输出至新的输出窗口。" + +#: ../../library/idle.rst:144 +msgid "Replace..." +msgstr "替换..." + +#: ../../library/idle.rst:144 +msgid "Open a search-and-replace dialog." +msgstr "打开 查找并替换 对话框。" + +#: ../../library/idle.rst:149 +msgid "Go to Line" +msgstr "前往行" + +#: ../../library/idle.rst:147 +msgid "" +"Move the cursor to the beginning of the line requested and make that line " +"visible. A request past the end of the file goes to the end. Clear any " +"selection and update the line and column status." +msgstr "将光标移到所请求行的开头并使该行可见。 对于超过文件尾的请求将会移到文件尾。 清除所有选区并更新行列状态。" + +#: ../../library/idle.rst:153 +msgid "Show Completions" +msgstr "显示补全信息" + +#: ../../library/idle.rst:152 +msgid "" +"Open a scrollable list allowing selection of existing names. See " +":ref:`Completions ` in the Editing and navigation section " +"below." +msgstr "打开一个可滚动列表以允许选择现有的名称。 请参阅下面编辑与导航一节中的 :ref:`自动补全 `。" + +#: ../../library/idle.rst:157 +msgid "Expand Word" +msgstr "展开文本" + +#: ../../library/idle.rst:156 +msgid "" +"Expand a prefix you have typed to match a full word in the same window; " +"repeat to get a different expansion." +msgstr "展开键入的前缀以匹配同一窗口中的完整单词;重复以获得不同的扩展。" + +#: ../../library/idle.rst:162 +msgid "Show call tip" +msgstr "显示调用贴士" + +#: ../../library/idle.rst:160 +msgid "" +"After an unclosed parenthesis for a function, open a small window with " +"function parameter hints. See :ref:`Calltips ` in the Editing and" +" navigation section below." +msgstr "在函数的右括号后,打开一个带有函数参数提示的小窗口。 请参阅下面的“编辑和导航”部分中的 :ref:`调用提示 `。" + +#: ../../library/idle.rst:165 +msgid "Show surrounding parens" +msgstr "显示周围括号" + +#: ../../library/idle.rst:165 +msgid "Highlight the surrounding parenthesis." +msgstr "突出显示周围的括号。" + +#: ../../library/idle.rst:170 +msgid "Format menu (Editor window only)" +msgstr "格式菜单(仅 window 编辑器)" + +#: ../../library/idle.rst:173 +msgid "Indent Region" +msgstr "增加缩进" + +#: ../../library/idle.rst:173 +msgid "Shift selected lines right by the indent width (default 4 spaces)." +msgstr "将选定的行右缩进(默认为4个空格)。" + +#: ../../library/idle.rst:176 +msgid "Dedent Region" +msgstr "减少缩进" + +#: ../../library/idle.rst:176 +msgid "Shift selected lines left by the indent width (default 4 spaces)." +msgstr "将选定的行左缩进(默认为4个空格)。" + +#: ../../library/idle.rst:179 +msgid "Comment Out Region" +msgstr "注释" + +#: ../../library/idle.rst:179 +msgid "Insert ## in front of selected lines." +msgstr "在所选行的前面插入 ##。" + +#: ../../library/idle.rst:182 +msgid "Uncomment Region" +msgstr "取消注释" + +#: ../../library/idle.rst:182 +msgid "Remove leading # or ## from selected lines." +msgstr "从所选行中删除开头的 # 或 ##。" + +#: ../../library/idle.rst:186 +msgid "Tabify Region" +msgstr "制表符化" + +#: ../../library/idle.rst:185 +msgid "" +"Turn *leading* stretches of spaces into tabs. (Note: We recommend using 4 " +"space blocks to indent Python code.)" +msgstr "将 *前导* 空格变成制表符。 (注意:我们建议使用4个空格来缩进Python代码。)" + +#: ../../library/idle.rst:189 +msgid "Untabify Region" +msgstr "取消制表符化" + +#: ../../library/idle.rst:189 +msgid "Turn *all* tabs into the correct number of spaces." +msgstr "将 *所有* 制表符转换为正确的空格数。" + +#: ../../library/idle.rst:192 +msgid "Toggle Tabs" +msgstr "缩进方式切换" + +#: ../../library/idle.rst:192 +msgid "Open a dialog to switch between indenting with spaces and tabs." +msgstr "打开一个对话框,以在制表符和空格之间切换。" + +#: ../../library/idle.rst:196 +msgid "New Indent Width" +msgstr "缩进宽度调整" + +#: ../../library/idle.rst:195 +msgid "" +"Open a dialog to change indent width. The accepted default by the Python " +"community is 4 spaces." +msgstr "打开一个对话框以更改缩进宽度。 Python社区接受的默认值为4个空格。" + +#: ../../library/idle.rst:201 +msgid "Format Paragraph" +msgstr "格式段落" + +#: ../../library/idle.rst:199 +msgid "" +"Reformat the current blank-line-delimited paragraph in comment block or " +"multiline string or selected line in a string. All lines in the paragraph " +"will be formatted to less than N columns, where N defaults to 72." +msgstr "在注释块或多行字符串或字符串中的选定行中,重新格式化当前以空行分隔的段落。段落中的所有行的格式都将少于N列,其中N默认为72。" + +#: ../../library/idle.rst:207 +msgid "Strip trailing whitespace" +msgstr "删除尾随空格" + +#: ../../library/idle.rst:204 +msgid "" +"Remove trailing space and other whitespace characters after the last non-" +"whitespace character of a line by applying str.rstrip to each line, " +"including lines within multiline strings. Except for Shell windows, remove " +"extra newlines at the end of the file." +msgstr "" +"通过将 str.rstrip " +"应用于每行(包括多行字符串中的行),删除行尾非空白字符之后的尾随空格和其他空白字符。除Shell窗口外,在文件末尾删除多余的换行符。" + +#: ../../library/idle.rst:213 +msgid "Run menu (Editor window only)" +msgstr "运行菜单(仅 window 编辑器)" + +#: ../../library/idle.rst:224 +msgid "Run Module" +msgstr "运行模块" + +#: ../../library/idle.rst:218 +msgid "" +"Do :ref:`Check Module `. If no error, restart the shell to " +"clean the environment, then execute the module. Output is displayed in the " +"Shell window. Note that output requires use of ``print`` or ``write``. When" +" execution is complete, the Shell retains focus and displays a prompt. At " +"this point, one may interactively explore the result of execution. This is " +"similar to executing a file with ``python -i file`` at a command line." +msgstr "" +"执行 :ref:`检查模块 ` 。如果没有错误,重新启动 shell 以清理环境,然后执行模块。输出显示在 shell " +"窗口中。请注意,输出需要使用 “打印” 或 “写入”。执行完成后,Shell " +"将保留焦点并显示提示。此时,可以交互地探索执行的结果。这类似于在命令行执行带有 ``python -i file`` 的文件。" + +#: ../../library/idle.rst:231 +msgid "Run... Customized" +msgstr "运行... 定制" + +#: ../../library/idle.rst:229 +msgid "" +"Same as :ref:`Run Module `, but run the module with customized " +"settings. *Command Line Arguments* extend :data:`sys.argv` as if passed on " +"a command line. The module can be run in the Shell without restarting." +msgstr "" +"与 :ref:`运行模块 ` 相同,但使用自定义设置运行该模块。*命令行参数* 扩展 :data:`sys.argv` " +",就像在命令行上传递一样。该模块可以在命令行管理程序中运行,而无需重新启动。" + +#: ../../library/idle.rst:240 +msgid "Check Module" +msgstr "检查模块" + +#: ../../library/idle.rst:236 +msgid "" +"Check the syntax of the module currently open in the Editor window. If the " +"module has not been saved IDLE will either prompt the user to save or " +"autosave, as selected in the General tab of the Idle Settings dialog. If " +"there is a syntax error, the approximate location is indicated in the Editor" +" window." +msgstr "" +"检查 “编辑器” 窗口中当前打开的模块的语法。如果尚未保存该模块,则 IDLE会提示用户保存或自动保存,如在 “空闲设置” 对话框的 “常规” " +"选项卡中所选择的那样。如果存在语法错误,则会在 “编辑器” 窗口中指示大概位置。" + +#: ../../library/idle.rst:246 +msgid "Python Shell" +msgstr "Python Shell" + +#: ../../library/idle.rst:245 +msgid "Open or wake up the Python Shell window." +msgstr "打开或唤醒Python Shell窗口。" + +#: ../../library/idle.rst:249 +msgid "Shell menu (Shell window only)" +msgstr "Shell 菜单(仅限 Shell 窗口)" + +#: ../../library/idle.rst:252 +msgid "View Last Restart" +msgstr "查看最近重启" + +#: ../../library/idle.rst:252 +msgid "Scroll the shell window to the last Shell restart." +msgstr "将Shell窗口滚动到上一次Shell重启。" + +#: ../../library/idle.rst:255 +msgid "Restart Shell" +msgstr "重启Shell" + +#: ../../library/idle.rst:255 +msgid "" +"Restart the shell to clean the environment and reset display and exception " +"handling." +msgstr "重启 shell 以清理环境,重置显示和异常处理。" + +#: ../../library/idle.rst:258 +msgid "Previous History" +msgstr "上一条历史记录" + +#: ../../library/idle.rst:258 +msgid "" +"Cycle through earlier commands in history which match the current entry." +msgstr "循环浏览历史记录中与当前条目匹配的早期命令。" + +#: ../../library/idle.rst:261 +msgid "Next History" +msgstr "下一条历史记录" + +#: ../../library/idle.rst:261 +msgid "Cycle through later commands in history which match the current entry." +msgstr "循环浏览历史记录中与当前条目匹配的后续命令。" + +#: ../../library/idle.rst:264 +msgid "Interrupt Execution" +msgstr "中断执行" + +#: ../../library/idle.rst:264 +msgid "Stop a running program." +msgstr "停止正在运行的程序。" + +#: ../../library/idle.rst:267 +msgid "Debug menu (Shell window only)" +msgstr "调试菜单(仅限 Shell 窗口)" + +#: ../../library/idle.rst:274 +msgid "Go to File/Line" +msgstr "跳转到文件/行" + +#: ../../library/idle.rst:270 +msgid "" +"Look on the current line. with the cursor, and the line above for a filename" +" and line number. If found, open the file if not already open, and show the" +" line. Use this to view source lines referenced in an exception traceback " +"and lines found by Find in Files. Also available in the context menu of the " +"Shell window and Output windows." +msgstr "" +"查看当前行。 以光标提示,且上一行为文件名和行号。 如果找到目标,如果文件尚未打开则打开该文件,并显示目标行。 " +"使用此菜单项来查看异常回溯中引用的源代码行以及用文件中查找功能找到的行。 也可在 Shell 窗口和 Output 窗口的上下文菜单中使用。" + +#: ../../library/idle.rst:283 +msgid "Debugger (toggle)" +msgstr "调试器(切换)" + +#: ../../library/idle.rst:281 +msgid "" +"When activated, code entered in the Shell or run from an Editor will run " +"under the debugger. In the Editor, breakpoints can be set with the context " +"menu. This feature is still incomplete and somewhat experimental." +msgstr "激活后,在Shell中输入的代码或从编辑器中运行的代码将在调试器下运行。在编辑器中,可以使用上下文菜单设置断点。此功能不完整,具有实验性。" + +#: ../../library/idle.rst:287 +msgid "Stack Viewer" +msgstr "堆栈查看器" + +#: ../../library/idle.rst:286 +msgid "" +"Show the stack traceback of the last exception in a tree widget, with access" +" to locals and globals." +msgstr "在树状目录中显示最后一个异常的堆栈回溯,可以访问本地和全局。" + +#: ../../library/idle.rst:290 +msgid "Auto-open Stack Viewer" +msgstr "自动打开堆栈查看器" + +#: ../../library/idle.rst:290 +msgid "" +"Toggle automatically opening the stack viewer on an unhandled exception." +msgstr "在未处理的异常上切换自动打开堆栈查看器。" + +#: ../../library/idle.rst:293 +msgid "Options menu (Shell and Editor)" +msgstr "选项菜单(命令行和编辑器)" + +#: ../../library/idle.rst:301 +msgid "Configure IDLE" +msgstr "配置 IDLE" + +#: ../../library/idle.rst:296 +msgid "" +"Open a configuration dialog and change preferences for the following: fonts," +" indentation, keybindings, text color themes, startup windows and size, " +"additional help sources, and extensions. On macOS, open the configuration " +"dialog by selecting Preferences in the application menu. For more details, " +"see :ref:`Setting preferences ` under Help and preferences." +msgstr "" +"打开配置对话框并更改以下各项的首选项:字体、缩进、键绑定、文本颜色主题、启动窗口和大小、其他帮助源和扩展名。在MacOS上,通过在应用程序菜单中选择首选项来打开配置对话框。有关详细信息,请参阅:帮助和首选项下的" +" :ref:`首选项设置 `。" + +#: ../../library/idle.rst:303 +msgid "" +"Most configuration options apply to all windows or all future windows. The " +"option items below only apply to the active window." +msgstr "大多数配置选项适用于所有窗口或将来的所有窗口。以下选项仅适用于活动窗口。" + +#: ../../library/idle.rst:310 +msgid "Show/Hide Code Context (Editor Window only)" +msgstr "显示/隐藏代码上下文(仅限编辑器窗口)" + +#: ../../library/idle.rst:307 +msgid "" +"Open a pane at the top of the edit window which shows the block context of " +"the code which has scrolled above the top of the window. See :ref:`Code " +"Context ` in the Editing and Navigation section below." +msgstr "" +"在编辑窗口顶部打开一个面板来显示在窗口顶部滚动的代码块上下文。 请参阅下文“编辑与导航”章节中的 :ref:`代码上下文 `。" + +#: ../../library/idle.rst:315 +msgid "Show/Hide Line Numbers (Editor Window only)" +msgstr "显示/隐藏行号(仅限 Editor 窗口)" + +#: ../../library/idle.rst:313 +msgid "" +"Open a column to the left of the edit window which shows the number of each " +"line of text. The default is off, which may be changed in the preferences " +"(see :ref:`Setting preferences `)." +msgstr "" +"在编辑窗口左侧打开一个显示代码文本行编号的列。 默认为关闭显示,这可以在首选项中修改 (参见 :ref:`设置首选项 `)。" + +#: ../../library/idle.rst:323 +msgid "Zoom/Restore Height" +msgstr "缩放/还原高度" + +#: ../../library/idle.rst:318 +msgid "" +"Toggles the window between normal size and maximum height. The initial size " +"defaults to 40 lines by 80 chars unless changed on the General tab of the " +"Configure IDLE dialog. The maximum height for a screen is determined by " +"momentarily maximizing a window the first time one is zoomed on the screen. " +"Changing screen settings may invalidate the saved height. This toggle has " +"no effect when a window is maximized." +msgstr "" +"在窗口的正常尺寸和最大高度之间进行切换。 初始尺寸默认为 40 行每行 80 字符,除非在配置 IDLE 对话框的通用选项卡中做了修改。 " +"屏幕的最大高度由首次在屏幕上将缩小的窗口最大化的操作来确定。 改变屏幕设置可能使保存的高度失效。 此切换操作在窗口最大化状态下无效。" + +#: ../../library/idle.rst:326 +msgid "Window menu (Shell and Editor)" +msgstr "Window 菜单(命令行和编辑器)" + +#: ../../library/idle.rst:328 +msgid "" +"Lists the names of all open windows; select one to bring it to the " +"foreground (deiconifying it if necessary)." +msgstr "列出所有打开的窗口的名称;选择一个将其带到前台(必要时对其进行去符号化)。" + +#: ../../library/idle.rst:332 +msgid "Help menu (Shell and Editor)" +msgstr "帮助菜单(命令行和编辑器)" + +#: ../../library/idle.rst:335 +msgid "About IDLE" +msgstr "关于 IDLE" + +#: ../../library/idle.rst:335 +msgid "Display version, copyright, license, credits, and more." +msgstr "显示版本,版权,许可证,荣誉等。" + +#: ../../library/idle.rst:339 +msgid "IDLE Help" +msgstr "IDLE 帮助" + +#: ../../library/idle.rst:338 +msgid "" +"Display this IDLE document, detailing the menu options, basic editing and " +"navigation, and other tips." +msgstr "显示此 IDLE 文档,详细介绍菜单选项,基本编辑和导航以及其他技巧。" + +#: ../../library/idle.rst:343 +msgid "Python Docs" +msgstr "Python 文档" + +#: ../../library/idle.rst:342 +msgid "" +"Access local Python documentation, if installed, or start a web browser and " +"open docs.python.org showing the latest Python documentation." +msgstr "访问本地Python文档(如果已安装),或启动Web浏览器并打开docs.python.org显示最新的Python文档。" + +#: ../../library/idle.rst:346 +msgid "Turtle Demo" +msgstr "海龟演示" + +#: ../../library/idle.rst:346 +msgid "" +"Run the turtledemo module with example Python code and turtle drawings." +msgstr "使用示例 Python 代码运行 turtledemo 模块和海龟绘图" + +#: ../../library/idle.rst:348 +msgid "" +"Additional help sources may be added here with the Configure IDLE dialog " +"under the General tab. See the :ref:`Help sources ` subsection" +" below for more on Help menu choices." +msgstr "" +"可以在 “常规” 选项卡下的 “配置IDLE” 对话框中添加其他帮助源。有关“帮助”菜单选项的更多信息,请参见下面的 :ref:`帮助源 ` 小节。" + +#: ../../library/idle.rst:361 +msgid "Context Menus" +msgstr "上下文菜单" + +#: ../../library/idle.rst:363 +msgid "" +"Open a context menu by right-clicking in a window (Control-click on macOS). " +"Context menus have the standard clipboard functions also on the Edit menu." +msgstr "通过在窗口中右击(在 macOS 上则为按住 Control 键点击)来打开一个上下文菜单。 上下文菜单也具有编辑菜单中的标准剪贴板功能。" + +#: ../../library/idle.rst:375 +msgid "" +"Editor windows also have breakpoint functions. Lines with a breakpoint set " +"are specially marked. Breakpoints only have an effect when running under " +"the debugger. Breakpoints for a file are saved in the user's ``.idlerc`` " +"directory." +msgstr "" +"编辑器窗口也具有断点功能。 设置了断点的行会被特别标记。 断点仅在启用调试器运行时有效。 文件的断点会被保存在用户的 ``.idlerc`` 目录中。" + +#: ../../library/idle.rst:381 +msgid "Set Breakpoint" +msgstr "设置断点" + +#: ../../library/idle.rst:381 +msgid "Set a breakpoint on the current line." +msgstr "在当前行设置断点" + +#: ../../library/idle.rst:384 +msgid "Clear Breakpoint" +msgstr "清除断点" + +#: ../../library/idle.rst:384 +msgid "Clear the breakpoint on that line." +msgstr "清除当前行断点" + +#: ../../library/idle.rst:386 +msgid "Shell and Output windows also have the following." +msgstr "shell 和输出窗口还具有以下内容。" + +#: ../../library/idle.rst:389 +msgid "Go to file/line" +msgstr "跳转到文件/行" + +#: ../../library/idle.rst:389 +msgid "Same as in Debug menu." +msgstr "与调试菜单相同。" + +#: ../../library/idle.rst:391 +msgid "" +"The Shell window also has an output squeezing facility explained in the " +"*Python Shell window* subsection below." +msgstr "Shell 窗口也有一个输出折叠功能,参见下文的 *Python Shell 窗口* 小节。" + +#: ../../library/idle.rst:397 +msgid "Squeeze" +msgstr "压缩" + +#: ../../library/idle.rst:395 +msgid "" +"If the cursor is over an output line, squeeze all the output between the " +"code above and the prompt below down to a 'Squeezed text' label." +msgstr "如果将光标位于输出行上,则会折叠在上方代码和下方提示直到 'Squeezed text' 标签之间的所有输出。" + +#: ../../library/idle.rst:402 +msgid "Editing and navigation" +msgstr "编辑和导航" + +#: ../../library/idle.rst:405 +msgid "Editor windows" +msgstr "编辑窗口" + +#: ../../library/idle.rst:407 +msgid "" +"IDLE may open editor windows when it starts, depending on settings and how " +"you start IDLE. Thereafter, use the File menu. There can be only one open " +"editor window for a given file." +msgstr "" +"IDLE 可以在启动时打开编辑器窗口,这取决于选项设置和你启动 IDLE 的方式。 在此之后,请使用 File 菜单。 " +"对于给定的文件只能打开一个编辑器窗口。" + +#: ../../library/idle.rst:411 +msgid "" +"The title bar contains the name of the file, the full path, and the version " +"of Python and IDLE running the window. The status bar contains the line " +"number ('Ln') and column number ('Col'). Line numbers start with 1; column " +"numbers with 0." +msgstr "" +"标题栏包含文件名称、完整路径,以及运行该窗口的 Python 和 IDLE 版本。 状态栏包含行号 ('Ln') 和列号 ('Col')。 行号从 1 " +"开始;列号则从 0 开始。" + +#: ../../library/idle.rst:416 +msgid "" +"IDLE assumes that files with a known .py* extension contain Python code and " +"that other files do not. Run Python code with the Run menu." +msgstr "IDE 会定扩展名为 .py* 的文件包含 Python 代码而其他文件不包含。 可使用 Run 菜单来运行 Python 代码。" + +#: ../../library/idle.rst:420 +msgid "Key bindings" +msgstr "按键绑定" + +#: ../../library/idle.rst:422 +msgid "" +"In this section, 'C' refers to the :kbd:`Control` key on Windows and Unix " +"and the :kbd:`Command` key on macOS." +msgstr "" +"在本节中,'C' 是指 Windows 和 Unix 上的 :kbd:`Control` 键,以及 macOS 上的 :kbd:`Command` 键。" + +#: ../../library/idle.rst:425 +msgid ":kbd:`Backspace` deletes to the left; :kbd:`Del` deletes to the right" +msgstr ":kbd:`Backspace` 向左删除; :kbd:`Del` 向右删除" + +#: ../../library/idle.rst:427 +msgid "" +":kbd:`C-Backspace` delete word left; :kbd:`C-Del` delete word to the right" +msgstr ":kbd:`C-Backspace` 向左删除单词; :kbd:`C-Del` 向右删除单词" + +#: ../../library/idle.rst:429 +msgid "Arrow keys and :kbd:`Page Up`/:kbd:`Page Down` to move around" +msgstr "方向键和 :kbd:`Page Up`/:kbd:`Page Down` 移动" + +#: ../../library/idle.rst:431 +msgid ":kbd:`C-LeftArrow` and :kbd:`C-RightArrow` moves by words" +msgstr ":kbd:`C-LeftArrow` 和 :kbd:`C-RightArrow` 按单词移动" + +#: ../../library/idle.rst:433 +msgid ":kbd:`Home`/:kbd:`End` go to begin/end of line" +msgstr ":kbd:`Home`/:kbd:`End` 跳转到行首/尾" + +#: ../../library/idle.rst:435 +msgid ":kbd:`C-Home`/:kbd:`C-End` go to begin/end of file" +msgstr ":kbd:`C-Home`/:kbd:`C-End` 跳转到文档首/尾" + +#: ../../library/idle.rst:437 +msgid "Some useful Emacs bindings are inherited from Tcl/Tk:" +msgstr "一些有用的Emacs绑定是从Tcl / Tk继承的:" + +#: ../../library/idle.rst:439 +msgid ":kbd:`C-a` beginning of line" +msgstr ":kbd:`C-a` 行首" + +#: ../../library/idle.rst:441 +msgid ":kbd:`C-e` end of line" +msgstr ":kbd:`C-e` 行尾" + +#: ../../library/idle.rst:443 +msgid ":kbd:`C-k` kill line (but doesn't put it in clipboard)" +msgstr ":kbd:`C-k` 删除行(但未将其放入剪贴板)" + +#: ../../library/idle.rst:445 +msgid ":kbd:`C-l` center window around the insertion point" +msgstr ":kbd:`C-l` 将插入点设为窗口中心" + +#: ../../library/idle.rst:447 +msgid "" +":kbd:`C-b` go backward one character without deleting (usually you can also " +"use the cursor key for this)" +msgstr ":kbd:`C-b` 后退一个字符而不删除该字符(通常你也可以用方向键进行此操作)" + +#: ../../library/idle.rst:450 +msgid "" +":kbd:`C-f` go forward one character without deleting (usually you can also " +"use the cursor key for this)" +msgstr ":kbd:`C-f` 前进一个字符而不删除该字符(通常你也可以用方向键进行此操作)" + +#: ../../library/idle.rst:453 +msgid "" +":kbd:`C-p` go up one line (usually you can also use the cursor key for this)" +msgstr ":kbd:`C-p` 向上一行(通常你也可以用方向键进行此操作)" + +#: ../../library/idle.rst:456 +msgid ":kbd:`C-d` delete next character" +msgstr ":kbd:`C-d` 删除下一个字符" + +#: ../../library/idle.rst:458 +msgid "" +"Standard keybindings (like :kbd:`C-c` to copy and :kbd:`C-v` to paste) may " +"work. Keybindings are selected in the Configure IDLE dialog." +msgstr "标准的键绑定(例如 :kbd:`C-c` 复制和 :kbd:`C-v` 粘贴)仍会有效。 键绑定可在配置 IDLE 对话框中选择。" + +#: ../../library/idle.rst:462 +msgid "Automatic indentation" +msgstr "自动缩进" + +#: ../../library/idle.rst:464 +msgid "" +"After a block-opening statement, the next line is indented by 4 spaces (in " +"the Python Shell window by one tab). After certain keywords (break, return " +"etc.) the next line is dedented. In leading indentation, :kbd:`Backspace` " +"deletes up to 4 spaces if they are there. :kbd:`Tab` inserts spaces (in the " +"Python Shell window one tab), number depends on Indent width. Currently, " +"tabs are restricted to four spaces due to Tcl/Tk limitations." +msgstr "" +"在一个代码块开头的语句之后,下一行会缩进 4 个空格符(在 Python Shell 窗口中是一个制表符)。 在特定关键字之后(break, " +"return 等),下一行将不再缩进。 在开头的缩进中,按 :kbd:`Backspace` 将会删除 4 个空格符。 :kbd:`Tab` " +"则会插入空格符(在 Python Shell 窗口中是一个制表符),具体数量取决于缩进宽度。 目前,Tab 键按照 Tcl/Tk " +"的规定设置为四个空格符。" + +#: ../../library/idle.rst:471 +msgid "" +"See also the indent/dedent region commands on the :ref:`Format menu `." +msgstr "另请参阅 :ref:`Format 菜单 ` 的缩进/取消缩进区的命令。" + +#: ../../library/idle.rst:477 +msgid "Completions" +msgstr "补全" + +#: ../../library/idle.rst:479 +msgid "" +"Completions are supplied, when requested and available, for module names, " +"attributes of classes or functions, or filenames. Each request method " +"displays a completion box with existing names. (See tab completions below " +"for an exception.) For any box, change the name being completed and the item" +" highlighted in the box by typing and deleting characters; by hitting " +":kbd:`Up`, :kbd:`Down`, :kbd:`PageUp`, :kbd:`PageDown`, :kbd:`Home`, and " +":kbd:`End` keys; and by a single click within the box. Close the box with " +":kbd:`Escape`, :kbd:`Enter`, and double :kbd:`Tab` keys or clicks outside " +"the box. A double click within the box selects and closes." +msgstr "" +"当被请求并且可用时,将为模块名、类属性、函数或文件名提供补全。 每次请求方法将显示包含现有名称的补全提示框。 (例外情况参见下文的 Tab 补全。) " +"对于任意提示框,要改变被补全的名称和提示框中被高亮的条目,可以通过输入和删除字符、按 :kbd:`Up`, :kbd:`Down`, " +":kbd:`PageUp`, :kbd:`PageDown`, :kbd:`Home` 和 :kbd:`End` 键;或是在提示框中单击。 " +"要关闭补全提示框可以通过 :kbd:`Escape`, :kbd:`Enter` 或按两次 :kbd:`Tab` 键或是在提示框外单击。 " +"在提示框内双击则将执行选择并关闭。" + +#: ../../library/idle.rst:490 +msgid "" +"One way to open a box is to type a key character and wait for a predefined " +"interval. This defaults to 2 seconds; customize it in the settings dialog." +" (To prevent auto popups, set the delay to a large number of milliseconds, " +"such as 100000000.) For imported module names or class or function " +"attributes, type '.'. For filenames in the root directory, type " +":data:`os.sep` or :data:`os.altsep` immediately after an opening quote. (On" +" Windows, one can specify a drive first.) Move into subdirectories by " +"typing a directory name and a separator." +msgstr "" +"有一种打开提示框的方式是输入一个关键字符并等待预设的一段间隔。 此间隔默认为 2 秒;这可以在设置对话框中定制。 " +"(要防止自动弹出,可将时延设为一个很大的豪秒数值,例如 100000000。) 对于导入的模块名或者类和函数属性,请输入 '.'。 " +"对于根目录下的文件名,请在开头引号之后立即输入 :data:`os.sep` 或 :data:`os.altsep`。 (在 Windows " +"下,可以先指定一个驱动器。) 可通过输入目录名和分隔符来进入子目录。" + +#: ../../library/idle.rst:500 +msgid "" +"Instead of waiting, or after a box is closed, open a completion box " +"immediately with Show Completions on the Edit menu. The default hot key is " +":kbd:`C-space`. If one types a prefix for the desired name before opening " +"the box, the first match or near miss is made visible. The result is the " +"same as if one enters a prefix after the box is displayed. Show Completions" +" after a quote completes filenames in the current directory instead of a " +"root directory." +msgstr "" +"除了等待,或是在提示框关闭之后,可以使用 Edit 菜单的 Show Completions 来立即打开一个补全提示框。 默认的热键是 " +":kbd:`C-space`。 如果在打开提示框之前输入一某个名称的前缀,则将显示第一个匹配项或最接近的项。 结果将与在提示框已显示之后输入前缀时相同。" +" 在一个引号之后执行 Show Completions 将会实例当前目录下的文件名而不是根目录下的。" + +#: ../../library/idle.rst:508 +msgid "" +"Hitting :kbd:`Tab` after a prefix usually has the same effect as Show " +"Completions. (With no prefix, it indents.) However, if there is only one " +"match to the prefix, that match is immediately added to the editor text " +"without opening a box." +msgstr "" +"在输入前缀后按 :kbd:`Tab` 键的效果通常与 Show Completions 相同。 (如果未输入前缀则为缩进。) " +"但是,如果输入的前缀只有一个匹配项,则该匹配项会立即被添加到编辑器文本中而不打开补全提示框。" + +#: ../../library/idle.rst:513 +msgid "" +"Invoking 'Show Completions', or hitting :kbd:`Tab` after a prefix, outside " +"of a string and without a preceding '.' opens a box with keywords, builtin " +"names, and available module-level names." +msgstr "" +"在字符串以外且开头不带 '.' 地输入前缀并执行 'Show Completions' 或按 :kbd:`Tab` " +"键将打开一个包含关键字、内置名称和现有模块级名称的补全提示框。" + +#: ../../library/idle.rst:517 +msgid "" +"When editing code in an editor (as oppose to Shell), increase the available " +"module-level names by running your code and not restarting the Shell " +"thereafter. This is especially useful after adding imports at the top of a " +"file. This also increases possible attribute completions." +msgstr "" +"当在编辑器(而非 Shell)中编辑代码时,可以通过运行你的代码并在此后不重启 Shell 来增加可用的模块级名称。 " +"这在文件顶部添加了导入语句之后会特别有用。 这还会增加可用的属性补全。" + +#: ../../library/idle.rst:523 +msgid "" +"Completion boxes initially exclude names beginning with '_' or, for modules," +" not included in '__all__'. The hidden names can be accessed by typing '_' " +"after '.', either before or after the box is opened." +msgstr "" +"补全提示框在初始时会排除以 '_' 打头的名称,对于模块还会排除未包括在 '__all__' 中的名称。 这些隐藏名称可通过在 '.' 之后输入 '_'" +" 来访问,这在提示框打开之前或之后都是有效的。" + +#: ../../library/idle.rst:530 +msgid "Calltips" +msgstr "提示" + +#: ../../library/idle.rst:532 +msgid "" +"A calltip is shown automatically when one types :kbd:`(` after the name of " +"an *accessible* function. A function name expression may include dots and " +"subscripts. A calltip remains until it is clicked, the cursor is moved out " +"of the argument area, or :kbd:`)` is typed. Whenever the cursor is in the " +"argument part of a definition, select Edit and \"Show Call Tip\" on the menu" +" or enter its shortcut to display a calltip." +msgstr "" +"当在一个 *可用的* 函数名称之后输入 :kbd:`(` 时将自动显示一个调用提示。 函数名称表达式可以包括点号和方括号索引操作。 " +"调用提示将保持打开直到它被点击、光标移出参数区、或是输入了 :kbd:`)`。 当光标位于某个定义的参数区时,可以在菜单中选择 Edit 的 " +"\"Show Call Tip\" 或是输入其快捷键来显示调用提示。" + +#: ../../library/idle.rst:539 +msgid "" +"The calltip consists of the function's signature and docstring up to the " +"latter's first blank line or the fifth non-blank line. (Some builtin " +"functions lack an accessible signature.) A '/' or '*' in the signature " +"indicates that the preceding or following arguments are passed by position " +"or name (keyword) only. Details are subject to change." +msgstr "" +"调用提示是由函数的签名和文档字符串到第一个空行或第五个非空行为止的内容组成的。 (某些内置函数没有可访问的签名。) 签名中的 '/' 或 '*' " +"指明其前面或后面的参数仅限以位置或名称(关键字)方式传入。 具体细节可能会改变。" + +#: ../../library/idle.rst:545 +msgid "" +"In Shell, the accessible functions depends on what modules have been " +"imported into the user process, including those imported by Idle itself, and" +" which definitions have been run, all since the last restart." +msgstr "" +"在 Shell 中,可访问的函数取决于有哪些模块已被导入用户进程,包括由 IDLE 本身导入的模块,以及哪些定义已被运行,以上均从最近的重启动开始算起。" + +#: ../../library/idle.rst:549 +msgid "" +"For example, restart the Shell and enter ``itertools.count(``. A calltip " +"appears because Idle imports itertools into the user process for its own " +"use. (This could change.) Enter ``turtle.write(`` and nothing appears. " +"Idle does not itself import turtle. The menu entry and shortcut also do " +"nothing. Enter ``import turtle``. Thereafter, ``turtle.write(`` will " +"display a calltip." +msgstr "" +"例如,重启动 Shell 并输入 ``itertools.count(``。 将显示调用提示,因为 IDLE 出于自身需要已将 itertools " +"导入了用户进程。 (此行为可能会改变。) 输入 ``turtle.write(`` 则不显示任何提示。 因为 IDLE 本身不会导入 turtle。 " +"菜单项和快捷键同样不会有任何反应。 输入 ``import turtle``。 则在此之后,``turtle.write(`` 将显示调用提示。" + +#: ../../library/idle.rst:556 +msgid "" +"In an editor, import statements have no effect until one runs the file. One " +"might want to run a file after writing import statements, after adding " +"function definitions, or after opening an existing file." +msgstr "" +"在编辑器中,import 语句在文件运行之前是没有效果的。 在输入 import " +"语句之后、添加函数定义之后,或是打开一个现有文件之后可以先运行一下文件。" + +#: ../../library/idle.rst:563 +msgid "Code Context" +msgstr "代码上下文" + +#: ../../library/idle.rst:565 +msgid "" +"Within an editor window containing Python code, code context can be toggled " +"in order to show or hide a pane at the top of the window. When shown, this " +"pane freezes the opening lines for block code, such as those beginning with " +"``class``, ``def``, or ``if`` keywords, that would have otherwise scrolled " +"out of view. The size of the pane will be expanded and contracted as needed" +" to show the all current levels of context, up to the maximum number of " +"lines defined in the Configure IDLE dialog (which defaults to 15). If there" +" are no current context lines and the feature is toggled on, a single blank " +"line will display. Clicking on a line in the context pane will move that " +"line to the top of the editor." +msgstr "" +"在一个包含 Python 代码的编辑器窗口内部,可以切换代码上下文以便显示或隐藏窗口顶部的面板。 当显示时,此面板可以冻结代码块的开头行,例如以 " +"``class``, ``def`` 或 ``if`` 关键字开头的行,这样的行在不显示时面板时可能离开视野。 " +"此面板的大小将根据需要扩展和收缩以显示当前层级的全部上下文,直至达到配置 IDLE 对话框中所定义的最大行数(默认为 15)。 " +"如果如果没有当前上下文行而此功能被启用,则将显示一个空行。 点击上下文面板中的某一行将把该行移至编辑器顶部。" + +#: ../../library/idle.rst:576 +msgid "" +"The text and background colors for the context pane can be configured under " +"the Highlights tab in the Configure IDLE dialog." +msgstr "上下文面板的文本和背景颜色可在配置 IDLE 对话框的 Highlights 选项卡中进行配置。" + +#: ../../library/idle.rst:580 +msgid "Python Shell window" +msgstr "Python Shell 窗口" + +#: ../../library/idle.rst:582 +msgid "" +"With IDLE's Shell, one enters, edits, and recalls complete statements. Most " +"consoles and terminals only work with a single physical line at a time." +msgstr "通过 IDLE 的 Shell 可以输入、编辑和召回整条语句。 大部分控制台和终端在同一时刻只能处理单个物理行。" + +#: ../../library/idle.rst:585 +msgid "" +"When one pastes code into Shell, it is not compiled and possibly executed " +"until one hits :kbd:`Return`. One may edit pasted code first. If one pastes" +" more that one statement into Shell, the result will be a :exc:`SyntaxError`" +" when multiple statements are compiled as if they were one." +msgstr "" +"当向 Shell 粘贴代码时,它并不会被编译和执行,直到按下 :kbd:`Return` 键。 在此之前可以先编辑所粘贴的代码。 如果向 Shell " +"粘贴了多行代码,多条语句会被当作一条语句来编译,结果将引发 :exc:`SyntaxError`。" + +#: ../../library/idle.rst:590 +msgid "" +"The editing features described in previous subsections work when entering " +"code interactively. IDLE's Shell window also responds to the following " +"keys." +msgstr "之前小节中描述的编辑功能在交互式地输入代码时也可使用。 IDLE 的 Shell 窗口还会响应以下按键。" + +#: ../../library/idle.rst:593 +msgid ":kbd:`C-c` interrupts executing command" +msgstr ":kbd:`C-c` 中断执行命令" + +#: ../../library/idle.rst:595 +msgid "" +":kbd:`C-d` sends end-of-file; closes window if typed at a ``>>>`` prompt" +msgstr ":kbd:`C-d` 发送文件结束命令;如果在 ``>>>`` 提示符后按下会关闭窗口。" + +#: ../../library/idle.rst:597 +msgid ":kbd:`Alt-/` (Expand word) is also useful to reduce typing" +msgstr ":kbd:`Alt-/` (扩展单词) 也有助于减少按键量" + +#: ../../library/idle.rst:599 +msgid "Command history" +msgstr "历史命令" + +#: ../../library/idle.rst:601 +msgid "" +":kbd:`Alt-p` retrieves previous command matching what you have typed. On " +"macOS use :kbd:`C-p`." +msgstr ":kbd:`Alt-p` 提取与你所输入键匹配的前一条命令。 在 macOS 上请使用 :kbd:`C-p`。" + +#: ../../library/idle.rst:604 +msgid ":kbd:`Alt-n` retrieves next. On macOS use :kbd:`C-n`." +msgstr ":kbd:`Alt-n` 提取下一条命令。 在 macOS 上请使用 :kbd:`C-n`。" + +#: ../../library/idle.rst:606 +msgid ":kbd:`Return` while on any previous command retrieves that command" +msgstr "在任意的前一条命令上按 :kbd:`Return` 将提取该命令" + +#: ../../library/idle.rst:609 +msgid "Text colors" +msgstr "文本颜色" + +#: ../../library/idle.rst:611 +msgid "" +"Idle defaults to black on white text, but colors text with special meanings." +" For the shell, these are shell output, shell error, user output, and user " +"error. For Python code, at the shell prompt or in an editor, these are " +"keywords, builtin class and function names, names following ``class`` and " +"``def``, strings, and comments. For any text window, these are the cursor " +"(when present), found text (when possible), and selected text." +msgstr "" +"IDLE 文本默认为白底黑字,但有特殊含义的文本将以彩色显示。 对于 Shell 来说包括 Shell 输出,Shell 错误,用户输出和用户错误。 " +"对于 Shell 提示符下或编辑器中的 Python 代码来说则包括关键字,内置类和函数名称,``class`` 和 ``def`` " +"之后的名称,字符串和注释等。 对于任意文本窗口来说则包括光标(如果存在)、找到的文本(如果可能)和选定的文本。" + +#: ../../library/idle.rst:618 +msgid "" +"Text coloring is done in the background, so uncolorized text is occasionally" +" visible. To change the color scheme, use the Configure IDLE dialog " +"Highlighting tab. The marking of debugger breakpoint lines in the editor " +"and text in popups and dialogs is not user-configurable." +msgstr "" +"广西着色是在背景上完成的,因此有时会看到非着色的文本。 要改变颜色方案,请使用配置 IDLE 对话框的高亮选项卡。 " +"编辑器中的调试器断点行标记和弹出面板和对话框中的文本则是用户不可配置的。" + +#: ../../library/idle.rst:625 +msgid "Startup and code execution" +msgstr "启动和代码执行" + +#: ../../library/idle.rst:627 +msgid "" +"Upon startup with the ``-s`` option, IDLE will execute the file referenced " +"by the environment variables :envvar:`IDLESTARTUP` or " +":envvar:`PYTHONSTARTUP`. IDLE first checks for ``IDLESTARTUP``; if " +"``IDLESTARTUP`` is present the file referenced is run. If ``IDLESTARTUP`` " +"is not present, IDLE checks for ``PYTHONSTARTUP``. Files referenced by " +"these environment variables are convenient places to store functions that " +"are used frequently from the IDLE shell, or for executing import statements " +"to import common modules." +msgstr "" +"在附带 ``-s`` 选项启用的情况下,IDLE 将会执行环境变量 :envvar:`IDLESTARTUP` 或 " +":envvar:`PYTHONSTARTUP` 所引用的文件。 IDLE 会先检查 ``IDLESTARTUP``;如果 ``IDLESTARTUP``" +" 存在则会运行被引用的文件。 如果 ``IDLESTARTUP`` 不存在,则 IDLE 会检查 ``PYTHONSTARTUP``。 " +"这些环境变量所引用的文件是存放经常被 IDLE Shell 所使用的函数,或者执行导入常用模块的 import 语句的便捷场所。" + +#: ../../library/idle.rst:635 +msgid "" +"In addition, ``Tk`` also loads a startup file if it is present. Note that " +"the Tk file is loaded unconditionally. This additional file is ``.Idle.py``" +" and is looked for in the user's home directory. Statements in this file " +"will be executed in the Tk namespace, so this file is not useful for " +"importing functions to be used from IDLE's Python shell." +msgstr "" +"此外,``Tk`` 也会在存在启动文件时加载它。 请注意 Tk 文件会被无条件地加载。 此附加文件名为 ``.Idle.py`` " +"并且会在用户的家目录下查找。 此文件中的语句将在 Tk 的命名空间中执行,所以此文件不适用于导入要在 IDLE 的 Python Shell " +"中使用的函数。" + +#: ../../library/idle.rst:642 +msgid "Command line usage" +msgstr "命令行语法" + +#: ../../library/idle.rst:658 +msgid "If there are arguments:" +msgstr "如果有参数:" + +#: ../../library/idle.rst:660 +msgid "" +"If ``-``, ``-c``, or ``r`` is used, all arguments are placed in " +"``sys.argv[1:...]`` and ``sys.argv[0]`` is set to ``''``, ``'-c'``, or " +"``'-r'``. No editor window is opened, even if that is the default set in " +"the Options dialog." +msgstr "" +"如果使用了 ``-``, ``-c`` 或 ``r``,则放在 ``sys.argv[1:...]`` 和 ``sys.argv[0]`` " +"中的所有参数都会被设为 ``''``, ``'-c'`` 或 ``'-r'``。 不会打开任何编辑器窗口,即使是在选项对话框中的默认设置。" + +#: ../../library/idle.rst:665 +msgid "" +"Otherwise, arguments are files opened for editing and ``sys.argv`` reflects " +"the arguments passed to IDLE itself." +msgstr "在其他情况下,参数为要打开编辑的文件而 ``sys.argv`` 反映的是传给 IDLE 本身的参数。" + +#: ../../library/idle.rst:669 +msgid "Startup failure" +msgstr "启动失败" + +#: ../../library/idle.rst:671 +msgid "" +"IDLE uses a socket to communicate between the IDLE GUI process and the user " +"code execution process. A connection must be established whenever the Shell" +" starts or restarts. (The latter is indicated by a divider line that says " +"'RESTART'). If the user process fails to connect to the GUI process, it " +"usually displays a ``Tk`` error box with a 'cannot connect' message that " +"directs the user here. It then exits." +msgstr "" +"IDLE 使用一个套接字在 IDLE GUI 进程和用户代码执行进程之间通信。 当 Shell 启动或重启动时必须建立一个连接。 (重启动会以一个内容为" +" 'RESTART' 的分隔行来标示)。 如果用户进程无法连接到 GUI 进程,它通常会显示一个包含 'cannot connect' 消息的 " +"``Tk`` 错误提示框来引导用户。 随后将会退出程序。" + +#: ../../library/idle.rst:678 +msgid "" +"One specific connection failure on Unix systems results from misconfigured " +"masquerading rules somewhere in a system's network setup. When IDLE is " +"started from a terminal, one will see a message starting with ``** Invalid " +"host:``. The valid value is ``127.0.0.1 (idlelib.rpc.LOCALHOST)``. One can " +"diagnose with ``tcpconnect -irv 127.0.0.1 6543`` in one terminal window and " +"``tcplisten `` in another." +msgstr "" +"有一个 Unix 系统专属的连接失败是由系统网络设置中错误配置的掩码规则导致的。 当从一个终端启动 IDLE 时,用户将看到一条以 ``** " +"Invalid host:`` 开头的消息。 有效的值为 ``127.0.0.1 (idlelib.rpc.LOCALHOST)``。 " +"用户可以在一个终端窗口输入 ``tcpconnect -irv 127.0.0.1 6543`` 并在另一个终端窗口中输入 ``tcplisten " +"`` 来进行诊断。" + +#: ../../library/idle.rst:686 +msgid "" +"A common cause of failure is a user-written file with the same name as a " +"standard library module, such as *random.py* and *tkinter.py*. When such a " +"file is located in the same directory as a file that is about to be run, " +"IDLE cannot import the stdlib file. The current fix is to rename the user " +"file." +msgstr "" +"导致连接失败的一个常见原因是用户创建的文件与标准库模块同名,例如 *random.py* 和 *tkinter.py*。 " +"当这样的文件与要运行的文件位于同一目录中时,IDLE 将无法导入标准库模块。 可用的解决办法是重命名用户文件。" + +#: ../../library/idle.rst:692 +msgid "" +"Though less common than in the past, an antivirus or firewall program may " +"stop the connection. If the program cannot be taught to allow the " +"connection, then it must be turned off for IDLE to work. It is safe to " +"allow this internal connection because no data is visible on external ports." +" A similar problem is a network mis-configuration that blocks connections." +msgstr "" +"虽然现在已不太常见,但杀毒软件或防火墙程序也有可能会阻止连接。 如果无法将此类程序设为允许连接,那么为了运行 IDLE 就必须将其关闭。 " +"允许这样的内部连接是安全的,因为数据在外部端口上不可见。 一个类似的问题是错误的网络配置阻止了连接。" + +#: ../../library/idle.rst:699 +msgid "" +"Python installation issues occasionally stop IDLE: multiple versions can " +"clash, or a single installation might need admin access. If one undo the " +"clash, or cannot or does not want to run as admin, it might be easiest to " +"completely remove Python and start over." +msgstr "" +"Python 的安装问题有时会使 IDLE 退出:存在多个版本时可能导致程序崩溃,或者单独安装时可能需要管理员权限。 " +"如果想要避免程序崩溃,或是不想以管理员身份运行,最简单的做法是完全卸载 Python 并重新安装。" + +#: ../../library/idle.rst:704 +msgid "" +"A zombie pythonw.exe process could be a problem. On Windows, use Task " +"Manager to check for one and stop it if there is. Sometimes a restart " +"initiated by a program crash or Keyboard Interrupt (control-C) may fail to " +"connect. Dismissing the error box or using Restart Shell on the Shell menu " +"may fix a temporary problem." +msgstr "" +"有时会出现 pythonw.exe 僵尸进程问题。 在 Windows 上,可以使用任务管理员来检查并停止该进程。 " +"有时由程序崩溃或键盘中断(control-C)所发起的重启动可能会出现连接失败。 关闭错误提示框或使用 Shell 菜单中的 Restart Shell" +" 可能会修复此类临时性错误。" + +#: ../../library/idle.rst:710 +msgid "" +"When IDLE first starts, it attempts to read user configuration files in " +"``~/.idlerc/`` (~ is one's home directory). If there is a problem, an error" +" message should be displayed. Leaving aside random disk glitches, this can " +"be prevented by never editing the files by hand. Instead, use the " +"configuration dialog, under Options. Once there is an error in a user " +"configuration file, the best solution may be to delete it and start over " +"with the settings dialog." +msgstr "" +"当 IDLE 首次启动时,它会尝试读取 ``~/.idlerc/`` 中的用户配置文件(~ 是用户的家目录)。 如果配置有问题,则应当显示一条错误消息。" +" 除随机磁盘错误之外,此类错误均可通过不手动编辑这些文件来避免。 请使用 Options 菜单来打开配置对话框。 " +"一旦用户配置文件出现错误,最好的解决办法就是删除它并使用配置对话框重新设置。" + +#: ../../library/idle.rst:718 +msgid "" +"If IDLE quits with no message, and it was not started from a console, try " +"starting it from a console or terminal (``python -m idlelib``) and see if " +"this results in an error message." +msgstr "" +"如果 IDLE 退出时没有发出任何错误消息,并且它不是通过控制台启动的,请尝试通过控制台或终端 (``python -m idlelib``) " +"来启动它以查看是否会出现错误消息。" + +#: ../../library/idle.rst:722 +msgid "" +"On Unix-based systems with tcl/tk older than ``8.6.11`` (see ``About IDLE``)" +" certain characters of certain fonts can cause a tk failure with a message " +"to the terminal. This can happen either if one starts IDLE to edit a file " +"with such a character or later when entering such a character. If one " +"cannot upgrade tcl/tk, then re-configure IDLE to use a font that works " +"better." +msgstr "" +"在基于 Unix 的系统上使用 tcl/tk 低于 ``8.6.11`` 的版本 (查看 ``About IDLE``) " +"时特定字体的特定字符可能导致终端提示 tk 错误消息。 这可能发生在启动 IDLE 编辑包此种字符的文件或是在之后输入此种字符的时候。 如果无法升级 " +"tcl/tk,可以重新配置 IDLE 来使用其他的字体。" + +#: ../../library/idle.rst:730 +msgid "Running user code" +msgstr "运行用户代码" + +#: ../../library/idle.rst:732 +msgid "" +"With rare exceptions, the result of executing Python code with IDLE is " +"intended to be the same as executing the same code by the default method, " +"directly with Python in a text-mode system console or terminal window. " +"However, the different interface and operation occasionally affect visible " +"results. For instance, ``sys.modules`` starts with more entries, and " +"``threading.active_count()`` returns 2 instead of 1." +msgstr "" +"除了少量例外,使用 IDLE 执行 Python 代码的结果应当与使用默认方法,即在文本模式的系统控制台或终端窗口中直接通过 Python " +"解释器执行同样的代码相同。 但是,不同的界面和操作有时会影响显示的结果。 例如,``sys.modules`` 初始时具有更多条目,而 " +"``threading.active_count()`` 将返回 2 而不是 1。" + +#: ../../library/idle.rst:739 +msgid "" +"By default, IDLE runs user code in a separate OS process rather than in the " +"user interface process that runs the shell and editor. In the execution " +"process, it replaces ``sys.stdin``, ``sys.stdout``, and ``sys.stderr`` with " +"objects that get input from and send output to the Shell window. The " +"original values stored in ``sys.__stdin__``, ``sys.__stdout__``, and " +"``sys.__stderr__`` are not touched, but may be ``None``." +msgstr "" +"在默认情况下,IDLE 会在单独的 OS 进程中运行用户代码而不是在运行 Shell 和编辑器的用户界面进程中运行。 在执行进程中,它会将 " +"``sys.stdin``, ``sys.stdout`` 和 ``sys.stderr`` 替换为从 Shell 窗口获取输入并向其发送输出的对象。 " +"保存在 ``sys.__stdin__``, ``sys.__stdout__`` 和 ``sys.__stderr__`` " +"中的原始值不会被改变,但可能会为 ``None``。" + +#: ../../library/idle.rst:746 +msgid "" +"Sending print output from one process to a text widget in another is slower " +"than printing to a system terminal in the same process. This has the most " +"effect when printing multiple arguments, as the string for each argument, " +"each separator, the newline are sent separately. For development, this is " +"usually not a problem, but if one wants to print faster in IDLE, format and " +"join together everything one wants displayed together and then print a " +"single string. Both format strings and :meth:`str.join` can help combine " +"fields and lines." +msgstr "" +"将打印输出从一个进程发送到另一个进程中的文本部件要比打印到同一个进程中的系统终端慢。 " +"这在打印多个参数时将有更明显的影响,因为每个参数、每个分隔符和换行符对应的字符串都要单独发送。 在开发中,这通常不算是问题,但如果希望能在 IDLE " +"中更快地打印,可以将想要显示的所有内容先格式化并拼接到一起然后打印单个字符串。 格式字符串和 :meth:`str.join` " +"都可以被用于合并字段和文本行。" + +#: ../../library/idle.rst:755 +msgid "" +"IDLE's standard stream replacements are not inherited by subprocesses " +"created in the execution process, whether directly by user code or by " +"modules such as multiprocessing. If such subprocess use ``input`` from " +"sys.stdin or ``print`` or ``write`` to sys.stdout or sys.stderr, IDLE should" +" be started in a command line window. The secondary subprocess will then be" +" attached to that window for input and output." +msgstr "" +"IDLE 的标准流替换不会被执行进程中创建的子进程所继承,不论它是由用户代码直接创建还是由 multiprocessing 之类的模块创建的。 " +"如果这样的子进程使用了 ``input`` 获取 sys.stdin 或者使用了 ``print`` 或 ``write`` 输出到 " +"sys.stdout 或 sys.stderr,则应当在命令行窗口中启动 IDLE。 这样二级子进程将会被附加到该窗口进行输出和输出。" + +#: ../../library/idle.rst:762 +msgid "" +"If ``sys`` is reset by user code, such as with ``importlib.reload(sys)``, " +"IDLE's changes are lost and input from the keyboard and output to the screen" +" will not work correctly." +msgstr "" +"如果 ``sys`` 被用户代码重置,例如使用了 ``importlib.reload(sys)``,则 IDLE " +"的修改将丢失,来自键盘的输入和向屏幕的输出将无法正确运作。" + +#: ../../library/idle.rst:766 +msgid "" +"When Shell has the focus, it controls the keyboard and screen. This is " +"normally transparent, but functions that directly access the keyboard and " +"screen will not work. These include system-specific functions that " +"determine whether a key has been pressed and if so, which." +msgstr "" +"当 Shell 获得焦点时,它将控制键盘与屏幕。 这通常会保持透明,但一些直接访问键盘和屏幕的函数将会不起作用。 " +"这也包括那些确定是否有键被按下以及是哪个键被按下的系统专属函数。" + +#: ../../library/idle.rst:771 +msgid "" +"The IDLE code running in the execution process adds frames to the call stack" +" that would not be there otherwise. IDLE wraps ``sys.getrecursionlimit`` " +"and ``sys.setrecursionlimit`` to reduce the effect of the additional stack " +"frames." +msgstr "" +"在执行进程中运行的 IDLE 代码会向调用栈添加在其他情况下不存在的帧。 IDLE 包装了 ``sys.getrecursionlimit`` 和 " +"``sys.setrecursionlimit`` 以减少额外栈帧的影响。" + +#: ../../library/idle.rst:776 +msgid "" +"When user code raises SystemExit either directly or by calling sys.exit, " +"IDLE returns to a Shell prompt instead of exiting." +msgstr "当用户代码直接或者通过调用 sys.exit 引发 SystemExit 时,IDLE 将返回 Shell 提示符而非完全退出。" + +#: ../../library/idle.rst:780 +msgid "User output in Shell" +msgstr "Shell中的用户输出" + +#: ../../library/idle.rst:782 +msgid "" +"When a program outputs text, the result is determined by the corresponding " +"output device. When IDLE executes user code, ``sys.stdout`` and " +"``sys.stderr`` are connected to the display area of IDLE's Shell. Some of " +"its features are inherited from the underlying Tk Text widget. Others are " +"programmed additions. Where it matters, Shell is designed for development " +"rather than production runs." +msgstr "" +"当一个程序输出文本时,结果将由相应的输出设备来确定。 当 IDLE 执行用户代码时,``sys.stdout`` 和 ``sys.stderr`` " +"会被连接到 IDLE Shell 的显示区。 它的某些特性是从底层的 Tk Text 部件继承而来。 其他特性则是程序所添加的。 总之,Shell " +"被设计用于开发环境而非生产环境运行。" + +#: ../../library/idle.rst:789 +msgid "" +"For instance, Shell never throws away output. A program that sends " +"unlimited output to Shell will eventually fill memory, resulting in a memory" +" error. In contrast, some system text windows only keep the last n lines of " +"output. A Windows console, for instance, keeps a user-settable 1 to 9999 " +"lines, with 300 the default." +msgstr "" +"例如,Shell 绝不会丢弃输出。 一个向 Shell 发送无限输出的程序将最终占满内存,导致内存错误。 " +"作为对比,某些系统文本模式窗口只会保留输出的最后 n 行。 例如,Windows 控制台可由用户设置保留 1 至 9999 行,默认为 300 行。" + +#: ../../library/idle.rst:795 +msgid "" +"A Tk Text widget, and hence IDLE's Shell, displays characters (codepoints) " +"in the BMP (Basic Multilingual Plane) subset of Unicode. Which characters " +"are displayed with a proper glyph and which with a replacement box depends " +"on the operating system and installed fonts. Tab characters cause the " +"following text to begin after the next tab stop. (They occur every 8 " +"'characters'). Newline characters cause following text to appear on a new " +"line. Other control characters are ignored or displayed as a space, box, or" +" something else, depending on the operating system and font. (Moving the " +"text cursor through such output with arrow keys may exhibit some surprising " +"spacing behavior.) ::" +msgstr "" +"IDLE 的 Shell 所使用的 Tk Text 部件可显示的字符 (码位) 为 Unicode 的 BMP (基本多语言平面) 子集。 " +"具体哪些字符会显示为正确的字形而哪些会以方框代替取决于操作系统和所安装的字体。 制表符会使之后的文本从下一个制表位开始。 (每 8 个 '字符' " +"对应一个制表位)。 换行符会使之后的文本开始新的一行。 其他控制符会被忽略或是显示为空格、方框或其他形式,具体取决于操作系统和字体。 " +"(使用方向键在这样的输出中移动文本光标有可能让显示间距发生怪异的变化。) ::" + +#: ../../library/idle.rst:813 +msgid "" +"The ``repr`` function is used for interactive echo of expression values. It" +" returns an altered version of the input string in which control codes, some" +" BMP codepoints, and all non-BMP codepoints are replaced with escape codes. " +"As demonstrated above, it allows one to identify the characters in a string," +" regardless of how they are displayed." +msgstr "" +"``repr`` 函数会被用于表达式值的交互式回显。 它将返回输入字符串的一个修改版本,其中的控制代码、部分 BMP 码位以及所有非 BMP " +"码位都将被替换为转义代码。 如上面所演示的,它使用户可以辨识字符串中的字符,无论它们会如何显示。" + +#: ../../library/idle.rst:819 +msgid "" +"Normal and error output are generally kept separate (on separate lines) from" +" code input and each other. They each get different highlight colors." +msgstr "普通的与错误的输出通常会在与代码输入和彼此之间保持区分 (显示于不同的行)。 它们也会分别使用不同的高亮颜色。" + +#: ../../library/idle.rst:822 +msgid "" +"For SyntaxError tracebacks, the normal '^' marking where the error was " +"detected is replaced by coloring the text with an error highlight. When code" +" run from a file causes other exceptions, one may right click on a traceback" +" line to jump to the corresponding line in an IDLE editor. The file will be " +"opened if necessary." +msgstr "" +"对于 SyntaxError 回溯信息,表示检测到错误位置的正常 '^' 标记被替换为带有代表错误的文本颜色高亮。 " +"当从文件运行的代码导致了其他异常时,用户可以右击回溯信息行在 IDLE 编辑器中跳转到相应的行。 如有必要将打开相应的文件。" + +#: ../../library/idle.rst:828 +msgid "" +"Shell has a special facility for squeezing output lines down to a 'Squeezed " +"text' label. This is done automatically for output over N lines (N = 50 by " +"default). N can be changed in the PyShell section of the General page of the" +" Settings dialog. Output with fewer lines can be squeezed by right clicking" +" on the output. This can be useful lines long enough to slow down " +"scrolling." +msgstr "" +"Shell 具有将输出行折叠为一个 'Squeezed text' 标签的特殊功能。 此功能将自动应用于超过 N 行的输出 (默认 N = 50)。 N" +" 可以在设置对话框中 General 页的 PyShell 区域中修改。 行数更少的输出也可通过在输出上右击来折叠。 " +"此功能适用于过多的输出行数导致滚动操作变慢的情况。" + +#: ../../library/idle.rst:836 +msgid "" +"Squeezed output is expanded in place by double-clicking the label. It can " +"also be sent to the clipboard or a separate view window by right-clicking " +"the label." +msgstr "已折叠的输出可通过双击该标签来原地展开。 也可通过右击该标签将其发送到剪贴板或单独的查看窗口。" + +#: ../../library/idle.rst:841 +msgid "Developing tkinter applications" +msgstr "开发 tkinter 应用程序" + +#: ../../library/idle.rst:843 +msgid "" +"IDLE is intentionally different from standard Python in order to facilitate " +"development of tkinter programs. Enter ``import tkinter as tk; root = " +"tk.Tk()`` in standard Python and nothing appears. Enter the same in IDLE " +"and a tk window appears. In standard Python, one must also enter " +"``root.update()`` to see the window. IDLE does the equivalent in the " +"background, about 20 times a second, which is about every 50 milliseconds. " +"Next enter ``b = tk.Button(root, text='button'); b.pack()``. Again, nothing" +" visibly changes in standard Python until one enters ``root.update()``." +msgstr "" +"IDLE 有意与标准 Python 保持区别以方便 tkinter 程序的开发。 在标准 Python 中输入 ``import tkinter as " +"tk; root = tk.Tk()`` 不会显示任何东西。 在 IDLE 中输入同样的代码则会显示一个 tk 窗口。 在标准 Python " +"中,还必须输入 ``root.update()`` 才会将窗口显示出来。 IDLE 会在幕后执行同样的方法,每秒大约 20 次,即每隔大约 50 毫秒。" +" 下面输入 ``b = tk.Button(root, text='button'); b.pack()``。 在标准 Python " +"中仍然不会有任何可见的变化,直到输入 ``root.update()``。" + +#: ../../library/idle.rst:852 +msgid "" +"Most tkinter programs run ``root.mainloop()``, which usually does not return" +" until the tk app is destroyed. If the program is run with ``python -i`` or" +" from an IDLE editor, a ``>>>`` shell prompt does not appear until " +"``mainloop()`` returns, at which time there is nothing left to interact " +"with." +msgstr "" +"大多数 tkinter 程序都会运行 ``root.mainloop()``,它通常直到 tk 应用被销毁时才会返回。 如果程序是通过 ``python" +" -i`` 或 IDLE 编辑器运行的,则 ``>>>`` Shell 提示符将直到 ``mainloop()`` " +"返回时才会出现,这时将结束程序的交互。" + +#: ../../library/idle.rst:858 +msgid "" +"When running a tkinter program from an IDLE editor, one can comment out the " +"mainloop call. One then gets a shell prompt immediately and can interact " +"with the live application. One just has to remember to re-enable the " +"mainloop call when running in standard Python." +msgstr "" +"当通过 IDLE 编辑器运行 tkinter 程序时,可以注释掉 mainloop 调用。 这样将立即回到 Shell " +"提示符并可与正在运行的应用程序交互。 请记得当在标准 Python 中运行时重新启用 mainloop 调用。" + +#: ../../library/idle.rst:864 +msgid "Running without a subprocess" +msgstr "在没有子进程的情况下运行" + +#: ../../library/idle.rst:866 +msgid "" +"By default, IDLE executes user code in a separate subprocess via a socket, " +"which uses the internal loopback interface. This connection is not " +"externally visible and no data is sent to or received from the Internet. If " +"firewall software complains anyway, you can ignore it." +msgstr "" + +#: ../../library/idle.rst:871 +msgid "" +"If the attempt to make the socket connection fails, Idle will notify you. " +"Such failures are sometimes transient, but if persistent, the problem may be" +" either a firewall blocking the connection or misconfiguration of a " +"particular system. Until the problem is fixed, one can run Idle with the -n" +" command line switch." +msgstr "" +"如果创建套接字连接的尝试失败,IDLE 将会通知你。 这样的失败可能是暂时性的,但是如果持续存在,问题可能是防火墙阻止了连接或某个系统配置错误。 " +"在问题得到解决之前,可以使用 -n 命令行开关来运行 IDLE。" + +#: ../../library/idle.rst:877 +msgid "" +"If IDLE is started with the -n command line switch it will run in a single " +"process and will not create the subprocess which runs the RPC Python " +"execution server. This can be useful if Python cannot create the subprocess" +" or the RPC socket interface on your platform. However, in this mode user " +"code is not isolated from IDLE itself. Also, the environment is not " +"restarted when Run/Run Module (F5) is selected. If your code has been " +"modified, you must reload() the affected modules and re-import any specific " +"items (e.g. from foo import baz) if the changes are to take effect. For " +"these reasons, it is preferable to run IDLE with the default subprocess if " +"at all possible." +msgstr "" +"如果 IDLE 启动时使用了 -n 命令行开关则它将在单个进程中运行并且将不再创建运行 RPC Python 执行服务器的子进程。 这适用于 " +"Python 无法在你的系统平台上创建子进程或 RPC 套接字接口的情况。 但是,在这种模式下用户代码没有与 IDLE 本身相隔离。 而且,当选择 " +"Run/Run Module (F5) 时运行环境也不会重启。 如果你的代码已被修改,你必须为受影响的模块执行 reload() 并重新导入特定的条目 " +"(例如 from foo import baz) 才能让修改生效。 出于这些原因,在可能的情况下最好还是使用默认的子进程来运行 IDLE。" + +#: ../../library/idle.rst:892 +msgid "Help and preferences" +msgstr "帮助和偏好" + +#: ../../library/idle.rst:897 +msgid "Help sources" +msgstr "帮助源" + +#: ../../library/idle.rst:899 +msgid "" +"Help menu entry \"IDLE Help\" displays a formatted html version of the IDLE " +"chapter of the Library Reference. The result, in a read-only tkinter text " +"window, is close to what one sees in a web browser. Navigate through the " +"text with a mousewheel, the scrollbar, or up and down arrow keys held down. " +"Or click the TOC (Table of Contents) button and select a section header in " +"the opened box." +msgstr "" +"Help 菜单项 \"IDLE Help\" 会显示标准库参考中 IDLE 一章的带格式 HTML 版本。 这些内容放在只读的 tkinter " +"文本窗口中,与在浏览器中看到的内容类似。 可使用鼠标滚轮、滚动条或上下方向键来浏览文本。 或是点击 TOC (Table of Contents) " +"按钮并在打开的选项框中选择一个节标题。" + +#: ../../library/idle.rst:907 +msgid "" +"Help menu entry \"Python Docs\" opens the extensive sources of help, " +"including tutorials, available at ``docs.python.org/x.y``, where 'x.y' is " +"the currently running Python version. If your system has an off-line copy " +"of the docs (this may be an installation option), that will be opened " +"instead." +msgstr "" +"Help 菜单项 \"Python Docs\" 会打开更丰富的帮助源,包括教程,通过 ``docs.python.org/x.y`` 来访问,其中 " +"'x.y' 是当前运行的 Python 版本。 如果你的系统有此文档的离线副本 (这可能是一个安装选项),则将打开这个副本。" + +#: ../../library/idle.rst:913 +msgid "" +"Selected URLs can be added or removed from the help menu at any time using " +"the General tab of the Configure IDLE dialog." +msgstr "选定的 URL 可以使用配置 IDLE 对话框的 General 选项卡随时在帮助菜单中添加或移除。" + +#: ../../library/idle.rst:919 +msgid "Setting preferences" +msgstr "首选项设置" + +#: ../../library/idle.rst:921 +msgid "" +"The font preferences, highlighting, keys, and general preferences can be " +"changed via Configure IDLE on the Option menu. Non-default user settings are" +" saved in a ``.idlerc`` directory in the user's home directory. Problems " +"caused by bad user configuration files are solved by editing or deleting one" +" or more of the files in ``.idlerc``." +msgstr "" +"字体首选项、高亮、按键和通用首选项可通过 Option 菜单的配置 IDLE 项来修改。 非默认的用户设置将保存在用户家目录下的 ``.idlerc``" +" 目录中。 用户配置文件错误导致的问题可通过编辑或删除 ``.idlerc`` 中的一个或多个文件来解决。" + +#: ../../library/idle.rst:927 +msgid "" +"On the Font tab, see the text sample for the effect of font face and size on" +" multiple characters in multiple languages. Edit the sample to add other " +"characters of personal interest. Use the sample to select monospaced fonts." +" If particular characters have problems in Shell or an editor, add them to " +"the top of the sample and try changing first size and then font." +msgstr "" +"在 Font 选项卡中,可以查看使用多种语言的多个字符的示例文本来了解字体或字号效果。 可以编辑示例文本来添加想要的其他字符。 " +"请使用示例文本选择等宽字体。 如果某些字符在 Shell 或编辑器中的显示有问题,可以将它们添加到示例文本的开头并尝试改变字号和字体。" + +#: ../../library/idle.rst:934 +msgid "" +"On the Highlights and Keys tab, select a built-in or custom color theme and " +"key set. To use a newer built-in color theme or key set with older IDLEs, " +"save it as a new custom theme or key set and it well be accessible to older " +"IDLEs." +msgstr "" +"在 Highlights 和 Keys 选项卡中,可以选择内置或自定义的颜色主题和按键集合。 要将更新的内置颜色主题或按键集合与旧版 IDLE " +"一起使用,可以将其保存为新的自定义主题或按键集合就将可在旧版 IDLE 中使用。" + +#: ../../library/idle.rst:940 +msgid "IDLE on macOS" +msgstr "macOS 上的IDLE" + +#: ../../library/idle.rst:942 +msgid "" +"Under System Preferences: Dock, one can set \"Prefer tabs when opening " +"documents\" to \"Always\". This setting is not compatible with the " +"tk/tkinter GUI framework used by IDLE, and it breaks a few IDLE features." +msgstr "" +"在 System Preferences: Dock 中,可以将 \"Prefer tabs when opening documents\" 设为 " +"\"Always\"。 但是该设置不能兼容 IDLE 所使用的 tk/tkinter GUI 框架,并会使得部分 IDLE 特性失效。" + +#: ../../library/idle.rst:947 +msgid "Extensions" +msgstr "扩展" + +#: ../../library/idle.rst:949 +msgid "" +"IDLE contains an extension facility. Preferences for extensions can be " +"changed with the Extensions tab of the preferences dialog. See the beginning" +" of config-extensions.def in the idlelib directory for further information." +" The only current default extension is zzdummy, an example also used for " +"testing." +msgstr "" +"IDLE 可以包含扩展插件。 扩展插件的首选项可通过首选项对话框的 Extensions 选项卡来修改。 请查看 idlelib 目录下 config-" +"extensions.def 的开头来了解详情。 目前唯一的扩展插件是 zzdummy,它也是一个测试用的示例。" diff --git a/library/imaplib.po b/library/imaplib.po new file mode 100644 index 000000000..e4596aae7 --- /dev/null +++ b/library/imaplib.po @@ -0,0 +1,792 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) 2001-2024, Python Software Foundation +# This file is distributed under the same license as the Python package. +# FIRST AUTHOR , YEAR. +# +# Translators: +# Arisaka97 , 2021 +# Kevin Deng , 2021 +# Dai Xu , 2021 +# Freesand Leo , 2021 +# Rafael Fontenelle , 2024 +# +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: Python 3.9\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2024-08-30 16:51+0000\n" +"PO-Revision-Date: 2017-02-16 23:14+0000\n" +"Last-Translator: Rafael Fontenelle , 2024\n" +"Language-Team: Chinese (China) (https://app.transifex.com/python-doc/teams/5390/zh_CN/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: zh_CN\n" +"Plural-Forms: nplurals=1; plural=0;\n" + +#: ../../library/imaplib.rst:2 +msgid ":mod:`imaplib` --- IMAP4 protocol client" +msgstr ":mod:`imaplib` --- IMAP4 协议客户端" + +#: ../../library/imaplib.rst:14 +msgid "**Source code:** :source:`Lib/imaplib.py`" +msgstr "**源代码:** :source:`Lib/imaplib.py`" + +#: ../../library/imaplib.rst:23 +msgid "" +"This module defines three classes, :class:`IMAP4`, :class:`IMAP4_SSL` and " +":class:`IMAP4_stream`, which encapsulate a connection to an IMAP4 server and" +" implement a large subset of the IMAP4rev1 client protocol as defined in " +":rfc:`2060`. It is backward compatible with IMAP4 (:rfc:`1730`) servers, but" +" note that the ``STATUS`` command is not supported in IMAP4." +msgstr "" +"本模块定义了三个类: :class:`IMAP4` 、 :class:`IMAP4_SSL` 和 :class:`IMAP4_stream` " +"。这三个类封装了与IMAP4服务器的连接并实现了 :rfc:`2060` 当中定义的大多数IMAP4rev1客户端协议。其与IMAP4( " +":rfc:`1730` )服务器后向兼容,但是 ``STATUS`` 指令在IMAP4中不支持。" + +#: ../../library/imaplib.rst:29 +msgid "" +"Three classes are provided by the :mod:`imaplib` module, :class:`IMAP4` is " +"the base class:" +msgstr ":mod:`imaplib` 模块提供了三个类,其中 :class:`IMAP4` 是基类:" + +#: ../../library/imaplib.rst:35 +msgid "" +"This class implements the actual IMAP4 protocol. The connection is created " +"and protocol version (IMAP4 or IMAP4rev1) is determined when the instance is" +" initialized. If *host* is not specified, ``''`` (the local host) is used. " +"If *port* is omitted, the standard IMAP4 port (143) is used. The optional " +"*timeout* parameter specifies a timeout in seconds for the connection " +"attempt. If timeout is not given or is None, the global default socket " +"timeout is used." +msgstr "" +"这个类实现了实际的 IMAP4 协议。 当其实例被实例化时会创建连接并确定协议版本 (IMAP4 或 IMAP4rev1)。 如果未指明 " +"*host*,则会使用 ``''`` (本地主机)。 如果省略 *port*,则会使用标准 IMAP4 端口 (143)。 可选的 *timeout* " +"形参指定连接尝试的超时秒数。 如果未指定超时或为 None,则会使用全局默认的套接字超时。" + +#: ../../library/imaplib.rst:42 +msgid "" +"The :class:`IMAP4` class supports the :keyword:`with` statement. When used " +"like this, the IMAP4 ``LOGOUT`` command is issued automatically when the " +":keyword:`!with` statement exits. E.g.::" +msgstr "" +":class:`IMAP4` 类支持 :keyword:`with` 语句。 当这样使用时,IMAP4 ``LOGOUT`` 命令会在 " +":keyword:`!with` 语句退出时自动发出。 例如::" + +#: ../../library/imaplib.rst:52 +msgid "Support for the :keyword:`with` statement was added." +msgstr "添加了对 :keyword:`with` 语句的支持。" + +#: ../../library/imaplib.rst:55 ../../library/imaplib.rst:122 +msgid "The optional *timeout* parameter was added." +msgstr "添加了可选的 *timeout* 形参。" + +#: ../../library/imaplib.rst:58 +msgid "" +"Three exceptions are defined as attributes of the :class:`IMAP4` class:" +msgstr "有三个异常被定义为 :class:`IMAP4` 类的属性:" + +#: ../../library/imaplib.rst:63 +msgid "" +"Exception raised on any errors. The reason for the exception is passed to " +"the constructor as a string." +msgstr "任何错误都将引发该异常。 异常的原因会以字符串的形式传递给构造器。" + +#: ../../library/imaplib.rst:69 +msgid "" +"IMAP4 server errors cause this exception to be raised. This is a sub-class " +"of :exc:`IMAP4.error`. Note that closing the instance and instantiating a " +"new one will usually allow recovery from this exception." +msgstr "" +"IMAP4 服务器错误会导致引发该异常。 这是 :exc:`IMAP4.error` 的子类。 " +"请注意关闭此实例并实例化一个新实例通常将会允许从该异常中恢复。" + +#: ../../library/imaplib.rst:76 +msgid "" +"This exception is raised when a writable mailbox has its status changed by " +"the server. This is a sub-class of :exc:`IMAP4.error`. Some other client " +"now has write permission, and the mailbox will need to be re-opened to re-" +"obtain write permission." +msgstr "" +"当一个可写邮箱的状态被服务器修改时会引发此异常。 此异常是 :exc:`IMAP4.error` 的子类。 " +"某个其他客户端现在会具有写入权限,将需要重新打开该邮箱以重新获得写入权限。" + +#: ../../library/imaplib.rst:82 +msgid "There's also a subclass for secure connections:" +msgstr "另外还有一个针对安全连接的子类:" + +#: ../../library/imaplib.rst:88 +msgid "" +"This is a subclass derived from :class:`IMAP4` that connects over an SSL " +"encrypted socket (to use this class you need a socket module that was " +"compiled with SSL support). If *host* is not specified, ``''`` (the local " +"host) is used. If *port* is omitted, the standard IMAP4-over-SSL port (993) " +"is used. *ssl_context* is a :class:`ssl.SSLContext` object which allows " +"bundling SSL configuration options, certificates and private keys into a " +"single (potentially long-lived) structure. Please read :ref:`ssl-security` " +"for best practices." +msgstr "" +"这是一个派生自 :class:`IMAP4` 的子类,它使用经 SSL 加密的套接字进行连接 (为了使用这个类你需要编译时附带 SSL 支持的 " +"socket 模块)。 如果未指定 *host*,则会使用 ``''`` (本地主机)。 如果省略了 *port*,则会使用标准的 " +"IMAP4-over-SSL 端口 (993)。 *ssl_context* 是一个 :class:`ssl.SSLContext` 对象,它允许将 " +"SSL 配置选项、证书和私钥打包放入一个单独的 (可以长久存在的) 结构体中。 请阅读 :ref:`ssl-security` 以获取最佳实践。" + +#: ../../library/imaplib.rst:97 +msgid "" +"*keyfile* and *certfile* are a legacy alternative to *ssl_context* - they " +"can point to PEM-formatted private key and certificate chain files for the " +"SSL connection. Note that the *keyfile*/*certfile* parameters are mutually " +"exclusive with *ssl_context*, a :class:`ValueError` is raised if " +"*keyfile*/*certfile* is provided along with *ssl_context*." +msgstr "" +"*keyfile* 和 *certfile* 是 *ssl_context* 的旧式替代品 —— 它们可以指向 PEM 格式的私钥和证书链文件用于 " +"SSL 连接。 请注意 *keyfile*/*certfile* 形参不能与 *ssl_context* 共存,如果 " +"*keyfile*/*certfile* 与 *ssl_context* 一同被提供则会引发 :class:`ValueError`。" + +#: ../../library/imaplib.rst:103 +msgid "" +"The optional *timeout* parameter specifies a timeout in seconds for the " +"connection attempt. If timeout is not given or is None, the global default " +"socket timeout is used." +msgstr "可选的 *timeout* 形参指明连接尝试的超时秒数。 如果参数未给出或为 None,则会使用全局默认的套接字超时设置。" + +#: ../../library/imaplib.rst:107 +msgid "*ssl_context* parameter was added." +msgstr "增加了 *ssl_context* 形参。" + +#: ../../library/imaplib.rst:110 +msgid "" +"The class now supports hostname check with " +":attr:`ssl.SSLContext.check_hostname` and *Server Name Indication* (see " +":data:`ssl.HAS_SNI`)." +msgstr "" +"本类现在支持使用 :attr:`ssl.SSLContext.check_hostname` 和 *服务器名称指示* (参阅 " +":data:`ssl.HAS_SNI`)进行主机名检查。" + +#: ../../library/imaplib.rst:117 +msgid "" +"*keyfile* and *certfile* are deprecated in favor of *ssl_context*. Please " +"use :meth:`ssl.SSLContext.load_cert_chain` instead, or let " +":func:`ssl.create_default_context` select the system's trusted CA " +"certificates for you." +msgstr "" +"*keyfile* 和 *certfile* 已弃用并转而推荐 *ssl_context*。 请改用 " +":meth:`ssl.SSLContext.load_cert_chain`,或让 :func:`ssl.create_default_context`" +" 为你选择系统所信任的 CA 证书。" + +#: ../../library/imaplib.rst:125 +msgid "The second subclass allows for connections created by a child process:" +msgstr "第二个子类允许由子进程所创建的连接:" + +#: ../../library/imaplib.rst:130 +msgid "" +"This is a subclass derived from :class:`IMAP4` that connects to the " +"``stdin/stdout`` file descriptors created by passing *command* to " +"``subprocess.Popen()``." +msgstr "" +"这是一个派生自 :class:`IMAP4` 的子类,它可以连接 ``stdin/stdout`` 文件描述符,此种文件是通过向 " +"``subprocess.Popen()`` 传入 *command* 来创建的。" + +#: ../../library/imaplib.rst:135 +msgid "The following utility functions are defined:" +msgstr "定义了下列工具函数:" + +#: ../../library/imaplib.rst:140 +msgid "" +"Parse an IMAP4 ``INTERNALDATE`` string and return corresponding local time." +" The return value is a :class:`time.struct_time` tuple or ``None`` if the " +"string has wrong format." +msgstr "" +"解析一个 IMAP4 ``INTERNALDATE`` 字符串并返回对应的本地时间。 返回值是一个 :class:`time.struct_time` " +"元组或者如果字符串格式错误则为 ``None``。" + +#: ../../library/imaplib.rst:146 +msgid "" +"Converts an integer into a bytes representation using characters from the " +"set [``A`` .. ``P``]." +msgstr "将一个整数转换为使用字符集 [``A`` .. ``P``] 的字节串表示形式。" + +#: ../../library/imaplib.rst:152 +msgid "Converts an IMAP4 ``FLAGS`` response to a tuple of individual flags." +msgstr "将一个 IMAP4 ``FLAGS`` 响应转换为包含单独旗标的元组。" + +#: ../../library/imaplib.rst:157 +msgid "" +"Convert *date_time* to an IMAP4 ``INTERNALDATE`` representation. The return " +"value is a string in the form: ``\"DD-Mmm-YYYY HH:MM:SS +HHMM\"`` (including" +" double-quotes). The *date_time* argument can be a number (int or float) " +"representing seconds since epoch (as returned by :func:`time.time`), a " +"9-tuple representing local time an instance of :class:`time.struct_time` (as" +" returned by :func:`time.localtime`), an aware instance of " +":class:`datetime.datetime`, or a double-quoted string. In the last case, it" +" is assumed to already be in the correct format." +msgstr "" +"将 *date_time* 转换为 IMAP4 ``INTERNALDATE`` 表示形式。 返回值是以下形式的字符串: ``\"DD-Mmm-YYYY" +" HH:MM:SS +HHMM\"`` (包括双引号)。 *date_time* 参数可以是一个代表距离纪元起始的秒数 (如 " +":func:`time.time` 的返回值) 的数字 (整数或浮点数),一个代表本地时间的 9 元组,一个 " +":class:`time.struct_time` 实例 (如 :func:`time.localtime` 的返回值),一个感知型的 " +":class:`datetime.datetime` 实例,或一个双引号字符串。 在最后一种情况下,它会被假定已经具有正确的格式。" + +#: ../../library/imaplib.rst:167 +msgid "" +"Note that IMAP4 message numbers change as the mailbox changes; in " +"particular, after an ``EXPUNGE`` command performs deletions the remaining " +"messages are renumbered. So it is highly advisable to use UIDs instead, with" +" the UID command." +msgstr "" +"请注意 IMAP4 消息编号会随邮箱的改变而改变;特别是在使用 ``EXPUNGE`` 命令执行删除后剩余的消息会被重新编号。 因此高度建议通过 UID" +" 命令来改用 UID。" + +#: ../../library/imaplib.rst:171 +msgid "" +"At the end of the module, there is a test section that contains a more " +"extensive example of usage." +msgstr "模块的最后有一段测试,其中包含的用法示例更加广泛。" + +#: ../../library/imaplib.rst:177 +msgid "" +"Documents describing the protocol, sources for servers implementing it, by " +"the University of Washington's IMAP Information Center can all be found at " +"(**Source Code**) https://github.com/uw-imap/imap (**Not Maintained**)." +msgstr "" +"描述该协议的文档,实现该协议的服务器源代码,由华盛顿大学 IMAP 信息中心提供 (**源代码**) https://github.com/uw-" +"imap/imap (**不再维护**)。" + +#: ../../library/imaplib.rst:185 +msgid "IMAP4 Objects" +msgstr "IMAP4 对象" + +#: ../../library/imaplib.rst:187 +msgid "" +"All IMAP4rev1 commands are represented by methods of the same name, either " +"upper-case or lower-case." +msgstr "所有 IMAP4rev1 命令都表示为同名的方法,可以为大写或小写形式。" + +#: ../../library/imaplib.rst:190 +msgid "" +"All arguments to commands are converted to strings, except for " +"``AUTHENTICATE``, and the last argument to ``APPEND`` which is passed as an " +"IMAP4 literal. If necessary (the string contains IMAP4 protocol-sensitive " +"characters and isn't enclosed with either parentheses or double quotes) each" +" string is quoted. However, the *password* argument to the ``LOGIN`` command" +" is always quoted. If you want to avoid having an argument string quoted " +"(eg: the *flags* argument to ``STORE``) then enclose the string in " +"parentheses (eg: ``r'(\\Deleted)'``)." +msgstr "" +"命令的所有参数都会被转换为字符串,只有 ``AUTHENTICATE`` 例外,而 ``APPEND`` 的最后一个参数会被作为 IMAP4 " +"字面值传入。 如有必要 (字符串包含 IMAP4 协议中的敏感字符并且未加圆括号或双引号) 每个字符串都会被转码。 但是,``LOGIN`` 命令的 " +"*password* 参数总是会被转码。 如果你想让某个参数字符串免于被转码 (例如: ``STORE`` 的 *flags* 参数) " +"则要为该字符串加上圆括号 (例如: ``r'(\\Deleted)'``)。" + +#: ../../library/imaplib.rst:198 +msgid "" +"Each command returns a tuple: ``(type, [data, ...])`` where *type* is " +"usually ``'OK'`` or ``'NO'``, and *data* is either the text from the command" +" response, or mandated results from the command. Each *data* is either a " +"``bytes``, or a tuple. If a tuple, then the first part is the header of the " +"response, and the second part contains the data (ie: 'literal' value)." +msgstr "" +"每条命令均返回一个元组: ``(type, [data, ...])`` 其中 *type* 通常为 ``'OK'`` 或 ``'NO'``,而 " +"*data* 为来自命令响应的文本,或为来自命令的规定结果。 每个 *data* 均为 ``bytes`` 或者元组。 " +"如果为元组,则其第一部分是响应的标头,而第二部分将包含数据 (例如: 'literal' 值)。" + +#: ../../library/imaplib.rst:204 +msgid "" +"The *message_set* options to commands below is a string specifying one or " +"more messages to be acted upon. It may be a simple message number " +"(``'1'``), a range of message numbers (``'2:4'``), or a group of non-" +"contiguous ranges separated by commas (``'1:3,6:9'``). A range can contain " +"an asterisk to indicate an infinite upper bound (``'3:*'``)." +msgstr "" +"以下命令的 *message_set* 选项为指定要操作的一条或多条消息的字符串。 它可以是一个简单的消息编号 (``'1'``),一段消息编号区间 " +"(``'2:4'``),或者一组以逗号分隔的非连续区间 (``'1:3,6:9'``)。 区间可以包含一个星号来表示无限的上界 (``'3:*'``)。" + +#: ../../library/imaplib.rst:210 +msgid "An :class:`IMAP4` instance has the following methods:" +msgstr ":class:`IMAP4` 实例具有下列方法:" + +#: ../../library/imaplib.rst:215 +msgid "Append *message* to named mailbox." +msgstr "将 *message* 添加到指定的邮箱。" + +#: ../../library/imaplib.rst:220 +msgid "Authenticate command --- requires response processing." +msgstr "认证命令 --- 要求对响应进行处理。" + +#: ../../library/imaplib.rst:222 +msgid "" +"*mechanism* specifies which authentication mechanism is to be used - it " +"should appear in the instance variable ``capabilities`` in the form " +"``AUTH=mechanism``." +msgstr "" +"*mechanism* 指明要使用哪种认证机制 —— 它应当在实例变量 ``capabilities`` 中以 ``AUTH=mechanism`` " +"的形式出现。" + +#: ../../library/imaplib.rst:225 +msgid "*authobject* must be a callable object::" +msgstr "*authobject* 必须是一个可调用对象::" + +#: ../../library/imaplib.rst:229 +msgid "" +"It will be called to process server continuation responses; the *response* " +"argument it is passed will be ``bytes``. It should return ``bytes`` *data* " +"that will be base64 encoded and sent to the server. It should return " +"``None`` if the client abort response ``*`` should be sent instead." +msgstr "" +"它将被调用以便处理服务器连续响应;传给它的 *response* 参数将为 ``bytes`` 类型。 它应当返回 base64 编码的 " +"``bytes`` *数据* 并发送给服务器。 或者在客户端中止响应时返回 ``None`` 并应改为发送 ``*``。" + +#: ../../library/imaplib.rst:234 +msgid "" +"string usernames and passwords are now encoded to ``utf-8`` instead of being" +" limited to ASCII." +msgstr "字符串形式的用户名和密码现在会被执行 ``utf-8`` 编码而不限于 ASCII 字符。" + +#: ../../library/imaplib.rst:241 +msgid "Checkpoint mailbox on server." +msgstr "为服务器上的邮箱设置检查点。" + +#: ../../library/imaplib.rst:246 +msgid "" +"Close currently selected mailbox. Deleted messages are removed from writable" +" mailbox. This is the recommended command before ``LOGOUT``." +msgstr "关闭当前选定的邮箱。 已删除的消息会从可写邮箱中被移除。 在 ``LOGOUT`` 之前建议执行此命令。" + +#: ../../library/imaplib.rst:252 +msgid "Copy *message_set* messages onto end of *new_mailbox*." +msgstr "将 *message_set* 消息拷贝到 *new_mailbox* 的末尾。" + +#: ../../library/imaplib.rst:257 +msgid "Create new mailbox named *mailbox*." +msgstr "新建名为 *mailbox* 新邮箱。" + +#: ../../library/imaplib.rst:262 +msgid "Delete old mailbox named *mailbox*." +msgstr "删除名为 *mailbox* 的旧邮箱。" + +#: ../../library/imaplib.rst:267 +msgid "Delete the ACLs (remove any rights) set for who on mailbox." +msgstr "删除邮箱上某人的 ACL (移除任何权限)。" + +#: ../../library/imaplib.rst:272 +msgid "" +"Enable *capability* (see :rfc:`5161`). Most capabilities do not need to be " +"enabled. Currently only the ``UTF8=ACCEPT`` capability is supported (see " +":RFC:`6855`)." +msgstr "" +"启用 *capability* (参见 :rfc:`5161`)。 大多数功能都不需要被启用。 目前只有 ``UTF8=ACCEPT`` 功能受到支持 " +"(参见 :RFC:`6855`)。" + +#: ../../library/imaplib.rst:276 +msgid "The :meth:`enable` method itself, and :RFC:`6855` support." +msgstr ":meth:`enable` 方法本身,以及 :RFC:`6855` 支持。" + +#: ../../library/imaplib.rst:282 +msgid "" +"Permanently remove deleted items from selected mailbox. Generates an " +"``EXPUNGE`` response for each deleted message. Returned data contains a list" +" of ``EXPUNGE`` message numbers in order received." +msgstr "" +"从选定的邮箱中永久移除被删除的条目。 为每条被删除的消息各生成一个 ``EXPUNGE`` 响应。 返回包含按接收时间排序的 ``EXPUNGE`` " +"消息编号的列表。" + +#: ../../library/imaplib.rst:289 +msgid "" +"Fetch (parts of) messages. *message_parts* should be a string of message " +"part names enclosed within parentheses, eg: ``\"(UID BODY[TEXT])\"``. " +"Returned data are tuples of message part envelope and data." +msgstr "" +"获取消息(的各个部分)。 *message_parts* 应为加圆标号的消息部分名称字符串,例如: ``\"(UID BODY[TEXT])\"``。 " +"返回的数据是由消息部分封包和数据组成的元组。" + +#: ../../library/imaplib.rst:296 +msgid "" +"Get the ``ACL``\\ s for *mailbox*. The method is non-standard, but is " +"supported by the ``Cyrus`` server." +msgstr "获取 *mailbox* 的 ``ACL``。 此方法是非标准的,但是被 ``Cyrus`` 服务器所支持。" + +#: ../../library/imaplib.rst:302 +msgid "" +"Retrieve the specified ``ANNOTATION``\\ s for *mailbox*. The method is non-" +"standard, but is supported by the ``Cyrus`` server." +msgstr "提取 *mailbox* 的特定 ``ANNOTATION``。 此方法是非标准的,但是被 ``Cyrus`` 服务器所支持。" + +#: ../../library/imaplib.rst:308 +msgid "" +"Get the ``quota`` *root*'s resource usage and limits. This method is part of" +" the IMAP4 QUOTA extension defined in rfc2087." +msgstr "获取 ``quota`` *root* 的资源使用和限制。 此方法是 rfc2087 定义的 IMAP4 QUOTA 扩展的组成部分。" + +#: ../../library/imaplib.rst:314 +msgid "" +"Get the list of ``quota`` ``roots`` for the named *mailbox*. This method is " +"part of the IMAP4 QUOTA extension defined in rfc2087." +msgstr "" +"获取指定 *mailbox* 的 ``quota`` ``roots`` 列表。 此方法是 rfc2087 定义的 IMAP4 QUOTA " +"扩展的组成部分。" + +#: ../../library/imaplib.rst:320 +msgid "" +"List mailbox names in *directory* matching *pattern*. *directory* defaults " +"to the top-level mail folder, and *pattern* defaults to match anything. " +"Returned data contains a list of ``LIST`` responses." +msgstr "" +"列出 *directory* 中与 *pattern* 相匹配的邮箱名称。 *directory* 默认为最高层级的电邮文件夹,而 *pattern* " +"默认为匹配任何文本。 返回的数据包含 ``LIST`` 响应列表。" + +#: ../../library/imaplib.rst:327 +msgid "" +"Identify the client using a plaintext password. The *password* will be " +"quoted." +msgstr "使用纯文本密码标识客户。 *password* 将被转码。" + +#: ../../library/imaplib.rst:332 +msgid "" +"Force use of ``CRAM-MD5`` authentication when identifying the client to " +"protect the password. Will only work if the server ``CAPABILITY`` response " +"includes the phrase ``AUTH=CRAM-MD5``." +msgstr "" +"在标识用户以保护密码时强制使用 ``CRAM-MD5`` 认证。 将只在服务器 ``CAPABILITY`` 响应包含 ``AUTH=CRAM-" +"MD5`` 阶段时才有效。" + +#: ../../library/imaplib.rst:339 +msgid "Shutdown connection to server. Returns server ``BYE`` response." +msgstr "关闭对服务器的连接。 返回服务器 ``BYE`` 响应。" + +#: ../../library/imaplib.rst:341 +msgid "The method no longer ignores silently arbitrary exceptions." +msgstr "此方法不会再忽略静默的任意异常。" + +#: ../../library/imaplib.rst:347 +msgid "" +"List subscribed mailbox names in directory matching pattern. *directory* " +"defaults to the top level directory and *pattern* defaults to match any " +"mailbox. Returned data are tuples of message part envelope and data." +msgstr "" +"列出 directory 中抽取的与 pattern 相匹配的邮箱。 *directory* 默认为最高层级目录而 *pattern* " +"默认为匹配任何邮箱。 返回的数据为消息部分封包和数据的元组。" + +#: ../../library/imaplib.rst:354 +msgid "Show my ACLs for a mailbox (i.e. the rights that I have on mailbox)." +msgstr "显示某个邮箱的本人 ACL (即本人在邮箱中的权限)。" + +#: ../../library/imaplib.rst:359 +msgid "Returns IMAP namespaces as defined in :rfc:`2342`." +msgstr "返回 :rfc:`2342` 中定义的 IMAP 命名空间。" + +#: ../../library/imaplib.rst:364 +msgid "Send ``NOOP`` to server." +msgstr "将 ``NOOP`` 发送给服务器。" + +#: ../../library/imaplib.rst:369 +msgid "" +"Opens socket to *port* at *host*. The optional *timeout* parameter specifies" +" a timeout in seconds for the connection attempt. If timeout is not given or" +" is None, the global default socket timeout is used. Also note that if the " +"*timeout* parameter is set to be zero, it will raise a :class:`ValueError` " +"to reject creating a non-blocking socket. This method is implicitly called " +"by the :class:`IMAP4` constructor. The connection objects established by " +"this method will be used in the :meth:`IMAP4.read`, :meth:`IMAP4.readline`, " +":meth:`IMAP4.send`, and :meth:`IMAP4.shutdown` methods. You may override " +"this method." +msgstr "" +"打开连接 *host* 上 *port* 的套接字。 可选的 *timeout* 形参指定连接尝试的超时秒数。 如果 timeout 未给出或为 " +"None,则会使用全局默认的套接字超时。 另外请注意如果 *timeout* 形参被设为零,它将引发 :class:`ValueError` " +"以拒绝创建非阻塞套接字。 此方法会由 :class:`IMAP4` 构造器隐式地调用。 此方法所建立的连接对象将在 " +":meth:`IMAP4.read`, :meth:`IMAP4.readline`, :meth:`IMAP4.send` 和 " +":meth:`IMAP4.shutdown` 等方法中被使用。 你可以重写此方法。" + +#: ../../library/imaplib.rst:379 +msgid "" +"Raises an :ref:`auditing event ` ``imaplib.open`` with arguments " +"``self``, ``host``, ``port``." +msgstr "" +"引发一个 :ref:`审计事件 ` ``imaplib.open`` 并附带参数 ``self``, ``host``, " +"``port``。" + +#: ../../library/imaplib.rst:381 +msgid "The *timeout* parameter was added." +msgstr "加入 *timeout* 参数。" + +#: ../../library/imaplib.rst:386 +msgid "" +"Fetch truncated part of a message. Returned data is a tuple of message part " +"envelope and data." +msgstr "获取消息被截断的部分。 返回的数据是由消息部分封包和数据组成的元组。" + +#: ../../library/imaplib.rst:392 +msgid "" +"Assume authentication as *user*. Allows an authorised administrator to proxy" +" into any user's mailbox." +msgstr "作为 *user* 进行认证。 允许经权限的管理员通过代理进入任意用户的邮箱。" + +#: ../../library/imaplib.rst:398 +msgid "" +"Reads *size* bytes from the remote server. You may override this method." +msgstr "从远程服务器读取 *size* 字节。 你可以重写此方法。" + +#: ../../library/imaplib.rst:403 +msgid "Reads one line from the remote server. You may override this method." +msgstr "从远程服务器读取一行。 你可以重写此方法。" + +#: ../../library/imaplib.rst:408 +msgid "" +"Prompt server for an update. Returned data is ``None`` if no new messages, " +"else value of ``RECENT`` response." +msgstr "提示服务器进行更新。 如果没有新消息则返回的数据为 ``None``,否则为 ``RECENT`` 响应的值。" + +#: ../../library/imaplib.rst:414 +msgid "Rename mailbox named *oldmailbox* to *newmailbox*." +msgstr "将名为 *oldmailbox* 的邮箱重命名为 *newmailbox*。" + +#: ../../library/imaplib.rst:419 +msgid "" +"Return data for response *code* if received, or ``None``. Returns the given " +"code, instead of the usual type." +msgstr "如果收到响应 *code* 则返回其数据,否则返回 ``None``。 返回给定的代码,而不是普通的类型。" + +#: ../../library/imaplib.rst:425 +msgid "" +"Search mailbox for matching messages. *charset* may be ``None``, in which " +"case no ``CHARSET`` will be specified in the request to the server. The " +"IMAP protocol requires that at least one criterion be specified; an " +"exception will be raised when the server returns an error. *charset* must " +"be ``None`` if the ``UTF8=ACCEPT`` capability was enabled using the " +":meth:`enable` command." +msgstr "" +"在邮箱中搜索匹配的消息。 *charset* 可以为 ``None``,在这种情况下在发给服务器的请求中将不指定 ``CHARSET``。 IMAP " +"协议要求至少指定一个标准;当服务器返回错误时将会引发异常。 *charset* 为 ``None`` 对应使用 :meth:`enable` 命令启用了" +" ``UTF8=ACCEPT`` 功能的情况。" + +#: ../../library/imaplib.rst:432 +msgid "Example::" +msgstr "示例::" + +#: ../../library/imaplib.rst:443 +msgid "" +"Select a mailbox. Returned data is the count of messages in *mailbox* " +"(``EXISTS`` response). The default *mailbox* is ``'INBOX'``. If the " +"*readonly* flag is set, modifications to the mailbox are not allowed." +msgstr "" +"选择一个邮箱。 返回的数据是 *mailbox* 中消息的数量 (``EXISTS`` 响应)。 默认的 *mailbox* 为 " +"``'INBOX'``。 如果设置了 *readonly* 旗标,则不允许修改该邮箱。" + +#: ../../library/imaplib.rst:450 +msgid "Sends ``data`` to the remote server. You may override this method." +msgstr "将 ``data`` 发送给远程服务器。 你可以重写此方法。" + +#: ../../library/imaplib.rst:452 +msgid "" +"Raises an :ref:`auditing event ` ``imaplib.send`` with arguments " +"``self``, ``data``." +msgstr "" +"引发一个 :ref:`审计事件 ` ``imaplib.send`` 并附带参数 ``self``, ``data``。" + +#: ../../library/imaplib.rst:457 +msgid "" +"Set an ``ACL`` for *mailbox*. The method is non-standard, but is supported " +"by the ``Cyrus`` server." +msgstr "发送 *mailbox* 的 ``ACL``。 此方法是非标准的,但是被 ``Cyrus`` 服务器所支持。" + +#: ../../library/imaplib.rst:463 +msgid "" +"Set ``ANNOTATION``\\ s for *mailbox*. The method is non-standard, but is " +"supported by the ``Cyrus`` server." +msgstr "设置 *mailbox* 的 ``ANNOTATION``。 此方法是非标准的,但是被 ``Cyrus`` 服务器所支持。" + +#: ../../library/imaplib.rst:469 +msgid "" +"Set the ``quota`` *root*'s resource *limits*. This method is part of the " +"IMAP4 QUOTA extension defined in rfc2087." +msgstr "" +"设置 ``quota`` *root* 的资源限制为 *limits*。 此方法是 rfc2087 定义的 IMAP4 QUOTA 扩展的组成部分。" + +#: ../../library/imaplib.rst:475 +msgid "" +"Close connection established in ``open``. This method is implicitly called " +"by :meth:`IMAP4.logout`. You may override this method." +msgstr "关闭在 ``open`` 中建立的连接。 此方法会由 :meth:`IMAP4.logout` 隐式地调用。 你可以重写此方法。" + +#: ../../library/imaplib.rst:481 +msgid "Returns socket instance used to connect to server." +msgstr "返回用于连接服务器的套接字实例。" + +#: ../../library/imaplib.rst:486 +msgid "" +"The ``sort`` command is a variant of ``search`` with sorting semantics for " +"the results. Returned data contains a space separated list of matching " +"message numbers." +msgstr "``sort`` 命令是 ``search`` 的变化形式,带有结果排序语句。 返回的数据包含以空格分隔的匹配消息编号列表。" + +#: ../../library/imaplib.rst:490 +msgid "" +"Sort has two arguments before the *search_criterion* argument(s); a " +"parenthesized list of *sort_criteria*, and the searching *charset*. Note " +"that unlike ``search``, the searching *charset* argument is mandatory. " +"There is also a ``uid sort`` command which corresponds to ``sort`` the way " +"that ``uid search`` corresponds to ``search``. The ``sort`` command first " +"searches the mailbox for messages that match the given searching criteria " +"using the charset argument for the interpretation of strings in the " +"searching criteria. It then returns the numbers of matching messages." +msgstr "" +"sort 命令在 *search_criterion* 参数之前还有两个参数;一个带圆括号的 *sort_criteria* 列表,和搜索的 " +"*charset*。 请注意不同于 ``search``,搜索的 *charset* 参数是强制性的。 还有一个 ``uid sort`` 命令与 " +"``sort`` 对应,如同 ``uid search`` 与 ``search`` 对应一样。 ``sort`` " +"命令首先在邮箱中搜索匹配给定搜索条件的消息,使用 charset 参数来解读搜索条件中的字符串。 然后它将返回所匹配消息的编号。" + +#: ../../library/imaplib.rst:499 ../../library/imaplib.rst:570 +msgid "This is an ``IMAP4rev1`` extension command." +msgstr "这是一个 ``IMAP4rev1`` 扩展命令。" + +#: ../../library/imaplib.rst:504 +msgid "" +"Send a ``STARTTLS`` command. The *ssl_context* argument is optional and " +"should be a :class:`ssl.SSLContext` object. This will enable encryption on " +"the IMAP connection. Please read :ref:`ssl-security` for best practices." +msgstr "" +"发送一个 ``STARTTLS`` 命令。 *ssl_context* 参数是可选的并且应为一个 :class:`ssl.SSLContext` 对象。" +" 这将在 IMAP 连接上启用加密。 请阅读 :ref:`ssl-security` 来了解最佳实践。" + +#: ../../library/imaplib.rst:511 +msgid "" +"The method now supports hostname check with " +":attr:`ssl.SSLContext.check_hostname` and *Server Name Indication* (see " +":data:`ssl.HAS_SNI`)." +msgstr "" +"此方法现在支持使用 :attr:`ssl.SSLContext.check_hostname` 和 *服务器名称指示* (参见 " +":data:`ssl.HAS_SNI`) 进行主机名检查。" + +#: ../../library/imaplib.rst:519 +msgid "Request named status conditions for *mailbox*." +msgstr "针对 *mailbox* 请求指定的状态条件。" + +#: ../../library/imaplib.rst:524 +msgid "" +"Alters flag dispositions for messages in mailbox. *command* is specified by" +" section 6.4.6 of :rfc:`2060` as being one of \"FLAGS\", \"+FLAGS\", or " +"\"-FLAGS\", optionally with a suffix of \".SILENT\"." +msgstr "" +"改变邮箱中消息的旗标处理。 *command* 由 :rfc:`2060` 的 6.4.6 小节指明,应为 \"FLAGS\", \"+FLAGS\" " +"或 \"-FLAGS\" 之一,并可选择附带 \".SILENT\" 后缀。" + +#: ../../library/imaplib.rst:528 +msgid "For example, to set the delete flag on all messages::" +msgstr "例如,要在所有消息上设置删除旗标::" + +#: ../../library/imaplib.rst:537 +msgid "" +"Creating flags containing ']' (for example: \"[test]\") violates :rfc:`3501`" +" (the IMAP protocol). However, imaplib has historically allowed creation of" +" such tags, and popular IMAP servers, such as Gmail, accept and produce such" +" flags. There are non-Python programs which also create such tags. " +"Although it is an RFC violation and IMAP clients and servers are supposed to" +" be strict, imaplib nonetheless continues to allow such tags to be created " +"for backward compatibility reasons, and as of Python 3.6, handles them if " +"they are sent from the server, since this improves real-world compatibility." +msgstr "" +"创建包含 ']' 的旗标 (例如: \"[test]\") 会违反 :rfc:`3501` (IMAP 协议)。 但是,imaplib " +"在历史上曾经允许创建这样的标签,并且流行的 IMAP 服务器如 Gmail 都会接受并生成这样的旗标。 有些非 Python 程序也会创建这样的旗标。 " +"虽然它违反 RFC 并且 IMAP 客户端和服务器应当严格遵守规范,但是 imaplib 出于向下兼容的理由仍然继续允许创建这样的标签,并且在 " +"Python 3.6 中会在其被服务器所发送时处理它们,因为这能提升实际的兼容性。" + +#: ../../library/imaplib.rst:549 +msgid "Subscribe to new mailbox." +msgstr "订阅新邮箱。" + +#: ../../library/imaplib.rst:554 +msgid "" +"The ``thread`` command is a variant of ``search`` with threading semantics " +"for the results. Returned data contains a space separated list of thread " +"members." +msgstr "``thread`` 命令是 ``search`` 的变化形式,带有针对结果的消息串句法。 返回的数据包含以空格分隔的消息串成员列表。" + +#: ../../library/imaplib.rst:557 +msgid "" +"Thread members consist of zero or more messages numbers, delimited by " +"spaces, indicating successive parent and child." +msgstr "消息串成员由零个或多个消息编号组成,以空格分隔,标示了连续的上下级关系。" + +#: ../../library/imaplib.rst:560 +msgid "" +"Thread has two arguments before the *search_criterion* argument(s); a " +"*threading_algorithm*, and the searching *charset*. Note that unlike " +"``search``, the searching *charset* argument is mandatory. There is also a " +"``uid thread`` command which corresponds to ``thread`` the way that ``uid " +"search`` corresponds to ``search``. The ``thread`` command first searches " +"the mailbox for messages that match the given searching criteria using the " +"charset argument for the interpretation of strings in the searching " +"criteria. It then returns the matching messages threaded according to the " +"specified threading algorithm." +msgstr "" +"thread 命令在 *search_criterion* 参数之前还有两个参数;一个 *threading_algorithm*,以及搜索使用的 " +"*charset*。 请注意不同于 ``search``,搜索使用的 *charset* 参数是强制性的。 还有一个 ``uid thread`` " +"命令与 ``thread`` 对应,如同 ``uid search`` 与 ``search`` 对应一个。 ``thread`` " +"命令首先在邮箱中搜索匹配给定搜索条件的消息,使用 charset 参数来解读搜索条件中的字符串。 然后它将按照指定的消息串算法返回所匹配的消息串。" + +#: ../../library/imaplib.rst:575 +msgid "" +"Execute command args with messages identified by UID, rather than message " +"number. Returns response appropriate to command. At least one argument " +"must be supplied; if none are provided, the server will return an error and " +"an exception will be raised." +msgstr "" +"执行 command arg 并附带用 UID 所标识的消息,而不是用消息编号。 返回与命令对应的响应。 " +"必须至少提供一个参数;如果不提供任何参数,服务器将返回错误并引发异常。" + +#: ../../library/imaplib.rst:583 +msgid "Unsubscribe from old mailbox." +msgstr "取消订阅原有邮箱。" + +#: ../../library/imaplib.rst:587 +msgid "" +":meth:`imaplib.IMAP4.unselect` frees server's resources associated with the " +"selected mailbox and returns the server to the authenticated state. This " +"command performs the same actions as :meth:`imaplib.IMAP4.close`, except " +"that no messages are permanently removed from the currently selected " +"mailbox." +msgstr "" +":meth:`imaplib.IMAP4.unselect` 会释放关联到选定邮箱的服务器资源并将服务器返回到已认证状态。 此命令会执行与 " +":meth:`imaplib.IMAP4.close` 相同的动作,区别在于它不会从当前选定邮箱中永久性地移除消息。" + +#: ../../library/imaplib.rst:597 +msgid "" +"Allow simple extension commands notified by server in ``CAPABILITY`` " +"response." +msgstr "允许服务器在 ``CAPABILITY`` 响应中通知简单的扩展命令。" + +#: ../../library/imaplib.rst:600 +msgid "The following attributes are defined on instances of :class:`IMAP4`:" +msgstr "在 :class:`IMAP4` 的实例上定义了下列属性:" + +#: ../../library/imaplib.rst:604 +msgid "" +"The most recent supported protocol in the ``CAPABILITY`` response from the " +"server." +msgstr "在服务器的 ``CAPABILITY`` 响应中最新的受支持协议。" + +#: ../../library/imaplib.rst:610 +msgid "" +"Integer value to control debugging output. The initialize value is taken " +"from the module variable ``Debug``. Values greater than three trace each " +"command." +msgstr "控制调试输出的整数值。 初始值会从模块变量 ``Debug`` 中获取。 大于三的值表示将追踪每一条命令。" + +#: ../../library/imaplib.rst:616 +msgid "" +"Boolean value that is normally ``False``, but is set to ``True`` if an " +":meth:`enable` command is successfully issued for the ``UTF8=ACCEPT`` " +"capability." +msgstr "" +"通常为 ``False`` 的布尔值,但也可以被设为 ``True``,如果成功地为 ``UTF8=ACCEPT`` 功能发送了 " +":meth:`enable` 命令的话。" + +#: ../../library/imaplib.rst:626 +msgid "IMAP4 Example" +msgstr "IMAP4 示例" + +#: ../../library/imaplib.rst:628 +msgid "" +"Here is a minimal example (without error checking) that opens a mailbox and " +"retrieves and prints all messages::" +msgstr "以下是一个最短示例(不带错误检查),该示例将打开邮箱,检索并打印所有消息::" diff --git a/library/imghdr.po b/library/imghdr.po new file mode 100644 index 000000000..ff0588cb5 --- /dev/null +++ b/library/imghdr.po @@ -0,0 +1,208 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) 2001-2022, Python Software Foundation +# This file is distributed under the same license as the Python package. +# FIRST AUTHOR , YEAR. +# +# Translators: +# Zombie110year , 2019 +# Freesand Leo , 2022 +# +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: Python 3.9\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2022-11-04 14:34+0000\n" +"PO-Revision-Date: 2017-02-16 23:14+0000\n" +"Last-Translator: Freesand Leo , 2022\n" +"Language-Team: Chinese (China) (https://www.transifex.com/python-doc/teams/5390/zh_CN/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: zh_CN\n" +"Plural-Forms: nplurals=1; plural=0;\n" + +#: ../../library/imghdr.rst:2 +msgid ":mod:`imghdr` --- Determine the type of an image" +msgstr ":mod:`imghdr` --- 推测图像类型" + +#: ../../library/imghdr.rst:8 +msgid "**Source code:** :source:`Lib/imghdr.py`" +msgstr "**源代码** :source:`Lib/imghdr.py`" + +#: ../../library/imghdr.rst:10 +msgid "" +"The :mod:`imghdr` module is deprecated (see :pep:`PEP 594 <594#imghdr>` for " +"details and alternatives)." +msgstr ":mod:`imghdr` 模块已被弃用(请参阅 :pep:`PEP 594 <594#imghdr>` 了解详情及其替代品)。" + +#: ../../library/imghdr.rst:16 +msgid "" +"The :mod:`imghdr` module determines the type of image contained in a file or" +" byte stream." +msgstr ":mod:`imghdr` 模块推测文件或字节流中的图像的类型。" + +#: ../../library/imghdr.rst:19 +msgid "The :mod:`imghdr` module defines the following function:" +msgstr ":mod:`imghdr` 模块定义了以下类型:" + +#: ../../library/imghdr.rst:24 +msgid "" +"Tests the image data contained in the file named by *filename*, and returns " +"a string describing the image type. If optional *h* is provided, the " +"*filename* is ignored and *h* is assumed to contain the byte stream to test." +msgstr "" +"测试包含在命名为 *filename* 的文件中的图像数据,并且返回描述此类图片的字符串。如果可选的 *h* 被提供, *filename* " +"将被忽略并且 *h* 包含将被测试的二进制流。" + +#: ../../library/imghdr.rst:28 +msgid "Accepts a :term:`path-like object`." +msgstr "接受一个 :term:`类路径对象 `。" + +#: ../../library/imghdr.rst:31 +msgid "" +"The following image types are recognized, as listed below with the return " +"value from :func:`what`:" +msgstr "接下来的图像类型是可识别的,返回值来自 :func:`what`:" + +#: ../../library/imghdr.rst:35 +msgid "Value" +msgstr "值" + +#: ../../library/imghdr.rst:35 +msgid "Image format" +msgstr "图像格式" + +#: ../../library/imghdr.rst:37 +msgid "``'rgb'``" +msgstr "``'rgb'``" + +#: ../../library/imghdr.rst:37 +msgid "SGI ImgLib Files" +msgstr "SGI 图像库文件" + +#: ../../library/imghdr.rst:39 +msgid "``'gif'``" +msgstr "``'gif'``" + +#: ../../library/imghdr.rst:39 +msgid "GIF 87a and 89a Files" +msgstr "GIF 87a 和 89a 文件" + +#: ../../library/imghdr.rst:41 +msgid "``'pbm'``" +msgstr "``'pbm'``" + +#: ../../library/imghdr.rst:41 +msgid "Portable Bitmap Files" +msgstr "便携式位图文件" + +#: ../../library/imghdr.rst:43 +msgid "``'pgm'``" +msgstr "``'pgm'``" + +#: ../../library/imghdr.rst:43 +msgid "Portable Graymap Files" +msgstr "便携式灰度图文件" + +#: ../../library/imghdr.rst:45 +msgid "``'ppm'``" +msgstr "``'ppm'``" + +#: ../../library/imghdr.rst:45 +msgid "Portable Pixmap Files" +msgstr "便携式像素表文件" + +#: ../../library/imghdr.rst:47 +msgid "``'tiff'``" +msgstr "``'tiff'``" + +#: ../../library/imghdr.rst:47 +msgid "TIFF Files" +msgstr "TIFF 文件" + +#: ../../library/imghdr.rst:49 +msgid "``'rast'``" +msgstr "``'rast'``" + +#: ../../library/imghdr.rst:49 +msgid "Sun Raster Files" +msgstr "Sun 光栅文件" + +#: ../../library/imghdr.rst:51 +msgid "``'xbm'``" +msgstr "``'xbm'``" + +#: ../../library/imghdr.rst:51 +msgid "X Bitmap Files" +msgstr "X 位图文件" + +#: ../../library/imghdr.rst:53 +msgid "``'jpeg'``" +msgstr "``'jpeg'``" + +#: ../../library/imghdr.rst:53 +msgid "JPEG data in JFIF or Exif formats" +msgstr "JFIF 或 Exif 格式的 JPEG 数据" + +#: ../../library/imghdr.rst:55 +msgid "``'bmp'``" +msgstr "``'bmp'``" + +#: ../../library/imghdr.rst:55 +msgid "BMP files" +msgstr "BMP 文件" + +#: ../../library/imghdr.rst:57 +msgid "``'png'``" +msgstr "``'png'``" + +#: ../../library/imghdr.rst:57 +msgid "Portable Network Graphics" +msgstr "便携式网络图像" + +#: ../../library/imghdr.rst:59 +msgid "``'webp'``" +msgstr "``'webp'``" + +#: ../../library/imghdr.rst:59 +msgid "WebP files" +msgstr "WebP 文件" + +#: ../../library/imghdr.rst:61 +msgid "``'exr'``" +msgstr "``'exr'``" + +#: ../../library/imghdr.rst:61 +msgid "OpenEXR Files" +msgstr "OpenEXR 文件" + +#: ../../library/imghdr.rst:64 +msgid "The *exr* and *webp* formats were added." +msgstr "*exr* 和 *webp* 格式被添加。" + +#: ../../library/imghdr.rst:68 +msgid "" +"You can extend the list of file types :mod:`imghdr` can recognize by " +"appending to this variable:" +msgstr "你可以扩展此 :mod:`imghdr` 可以被追加的这个变量识别的文件格式的列表:" + +#: ../../library/imghdr.rst:74 +msgid "" +"A list of functions performing the individual tests. Each function takes " +"two arguments: the byte-stream and an open file-like object. When " +":func:`what` is called with a byte-stream, the file-like object will be " +"``None``." +msgstr "" +"执行单个测试的函数列表。每个函数都有两个参数:字节流和类似开放文件的对象。当 :func:`what` 用字节流调用时,类文件对象将是 " +"``None``。" + +#: ../../library/imghdr.rst:78 +msgid "" +"The test function should return a string describing the image type if the " +"test succeeded, or ``None`` if it failed." +msgstr "如果测试成功,这个测试函数应当返回一个描述图像类型的字符串,否则返回 ``None``。" + +#: ../../library/imghdr.rst:81 +msgid "Example::" +msgstr "示例::" diff --git a/library/imp.po b/library/imp.po new file mode 100644 index 000000000..00b10c5a8 --- /dev/null +++ b/library/imp.po @@ -0,0 +1,545 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) 2001-2024, Python Software Foundation +# This file is distributed under the same license as the Python package. +# FIRST AUTHOR , YEAR. +# +# Translators: +# leollon , 2019 +# Dai Xu , 2021 +# Freesand Leo , 2022 +# Rafael Fontenelle , 2024 +# +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: Python 3.9\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2024-04-19 21:47+0000\n" +"PO-Revision-Date: 2017-02-16 23:14+0000\n" +"Last-Translator: Rafael Fontenelle , 2024\n" +"Language-Team: Chinese (China) (https://app.transifex.com/python-doc/teams/5390/zh_CN/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: zh_CN\n" +"Plural-Forms: nplurals=1; plural=0;\n" + +#: ../../library/imp.rst:2 +msgid ":mod:`imp` --- Access the :ref:`import ` internals" +msgstr ":mod:`imp` --- 访问 :ref:`import ` 内部对象" + +#: ../../library/imp.rst:8 +msgid "**Source code:** :source:`Lib/imp.py`" +msgstr "**源代码:** :source:`Lib/imp.py`" + +#: ../../library/imp.rst:10 +msgid "The :mod:`imp` module is deprecated in favor of :mod:`importlib`." +msgstr ":mod:`imp` 模块已被废弃,请改用 :mod:`importlib`。" + +#: ../../library/imp.rst:17 +msgid "" +"This module provides an interface to the mechanisms used to implement the " +":keyword:`import` statement. It defines the following constants and " +"functions:" +msgstr "本模块提供了一个接口,用于实现 :keyword:`import` 语句的机制。这里定义了以下常量和函数:" + +#: ../../library/imp.rst:25 +msgid "" +"Return the magic string value used to recognize byte-compiled code files " +"(:file:`.pyc` files). (This value may be different for each Python " +"version.)" +msgstr "返回用于识别字节编译代码文件 (:file:`.pyc` files) 的魔术字符串值。 (该值对于各个 Python 版本可能不同。)" + +#: ../../library/imp.rst:28 +msgid "Use :attr:`importlib.util.MAGIC_NUMBER` instead." +msgstr "改用 :attr:`importlib.util.MAGIC_NUMBER`。" + +#: ../../library/imp.rst:34 +msgid "" +"Return a list of 3-element tuples, each describing a particular type of " +"module. Each triple has the form ``(suffix, mode, type)``, where *suffix* is" +" a string to be appended to the module name to form the filename to search " +"for, *mode* is the mode string to pass to the built-in :func:`open` function" +" to open the file (this can be ``'r'`` for text files or ``'rb'`` for binary" +" files), and *type* is the file type, which has one of the values " +":const:`PY_SOURCE`, :const:`PY_COMPILED`, or :const:`C_EXTENSION`, described" +" below." +msgstr "" +"返回一个 3 元素元组的列表,每个元组描述了一个特定的模块类型。 每个三元组的形式为 ``(suffix, mode, type)``,其中 " +"*suffix* 是要附加到模块名称上以组成要搜索的文件名的字符串,*mode* 是要传给内置 :func:`open` 函数以打开该文件的模式字符串 " +"(可以为针对文本文件的 ``'r'`` 或针对二进制文件的 ``'rb'``),而 *type* 是文件类型,它的值为 " +":const:`PY_SOURCE`, :const:`PY_COMPILED` 之一 :const:`C_EXTENSION`,具体说明如下。" + +#: ../../library/imp.rst:43 +msgid "Use the constants defined on :mod:`importlib.machinery` instead." +msgstr "改用在 :mod:`importlib.machinery` 上定义的常量。" + +#: ../../library/imp.rst:49 +msgid "" +"Try to find the module *name*. If *path* is omitted or ``None``, the list " +"of directory names given by ``sys.path`` is searched, but first a few " +"special places are searched: the function tries to find a built-in module " +"with the given name (:const:`C_BUILTIN`), then a frozen module " +"(:const:`PY_FROZEN`), and on some systems some other places are looked in as" +" well (on Windows, it looks in the registry which may point to a specific " +"file)." +msgstr "" +"尝试找到模块 *name*。 如果 *path* 被省略或为 ``None``,则会搜索 ``sys.path`` " +"给出的目录名列表,但在此前会先搜索几个特殊位置:该函数将尝试找到具有给定名称的内置模块 (:const:`C_BUILTIN`),然后是冻结模块 " +"(:const:`PY_FROZEN`),并且在某些系统上还会查找其他几个位置(在 Windows 上,它将查看注册表,其中可能指向某一特定文件)。" + +#: ../../library/imp.rst:56 +msgid "" +"Otherwise, *path* must be a list of directory names; each directory is " +"searched for files with any of the suffixes returned by :func:`get_suffixes`" +" above. Invalid names in the list are silently ignored (but all list items " +"must be strings)." +msgstr "" +"在其他情况下,*path* 必须是一个目录名列表;将在每个目录中搜索具有上述 :func:`get_suffixes` 所返回的任何后缀的文件。 " +"列表中的无效名称将被静默地忽略(但是所有列表条目都必须为字符串)。" + +#: ../../library/imp.rst:61 +msgid "" +"If search is successful, the return value is a 3-element tuple ``(file, " +"pathname, description)``:" +msgstr "如果搜索成功,返回值将是一个 3 元素元组 ``(file, pathname, description)``:" + +#: ../../library/imp.rst:64 +msgid "" +"*file* is an open :term:`file object` positioned at the beginning, " +"*pathname* is the pathname of the file found, and *description* is a " +"3-element tuple as contained in the list returned by :func:`get_suffixes` " +"describing the kind of module found." +msgstr "" +"*file* 是一个放在最前面的已打开的 :term:`file object`,*pathname* 是打到的文件的路径名,而 " +"*description* 是一个描述所找到的模块种类的 3 元素元组,如 :func:`get_suffixes` 所返回的列表中包含的内容。" + +#: ../../library/imp.rst:69 +msgid "" +"If the module is built-in or frozen then *file* and *pathname* are both " +"``None`` and the *description* tuple contains empty strings for its suffix " +"and mode; the module type is indicated as given in parentheses above. If " +"the search is unsuccessful, :exc:`ImportError` is raised. Other exceptions " +"indicate problems with the arguments or environment." +msgstr "" +"如果模块为内置或冻结模块则 *file* 和 *pathname* 都将为 ``None`` 并且 *description* " +"元组将包含空字符串来表示其后缀和模式;模块类型按上述圆括号中所给出的内容来指明。 如果搜索未成功,则会引发 :exc:`ImportError`。 " +"其他异常被用于指示参数或环境问题。" + +#: ../../library/imp.rst:75 +msgid "" +"If the module is a package, *file* is ``None``, *pathname* is the package " +"path and the last item in the *description* tuple is :const:`PKG_DIRECTORY`." +msgstr "" +"如果模块是一个包,则 *file* 将为 ``None``,*pathname* 将为包路径而 *description* 元组的最后一项将为 " +":const:`PKG_DIRECTORY`。" + +#: ../../library/imp.rst:78 +msgid "" +"This function does not handle hierarchical module names (names containing " +"dots). In order to find *P.M*, that is, submodule *M* of package *P*, use " +":func:`find_module` and :func:`load_module` to find and load package *P*, " +"and then use :func:`find_module` with the *path* argument set to " +"``P.__path__``. When *P* itself has a dotted name, apply this recipe " +"recursively." +msgstr "" +"此函数不会处理多层级的模块名称(包含点号的名称)。 为了找到 *P.M*,也就是 *P* 包的的子模块 *M*,请使用 " +":func:`find_module` 和 :func:`load_module` 来找到并载入 *P* 包,然后使用 " +":func:`find_module` 并将 *path* 参数设为 ``P.__path__``。 当 *P* " +"本身也具有带点号的名称时,请递归地应用此步骤。" + +#: ../../library/imp.rst:84 +msgid "" +"Use :func:`importlib.util.find_spec` instead unless Python 3.3 compatibility" +" is required, in which case use :func:`importlib.find_loader`. For example " +"usage of the former case, see the :ref:`importlib-examples` section of the " +":mod:`importlib` documentation." +msgstr "" +"请改用 :func:`importlib.util.find_spec` 除非需要兼容 Python 3.3,对于后一种情况请使用 " +":func:`importlib.find_loader`。 要查看对于前一种情况的示例用法,请参阅 :mod:`importlib` 文档的 " +":ref:`importlib-examples` 小节。" + +#: ../../library/imp.rst:94 +msgid "" +"Load a module that was previously found by :func:`find_module` (or by an " +"otherwise conducted search yielding compatible results). This function does" +" more than importing the module: if the module was already imported, it will" +" reload the module! The *name* argument indicates the full module name " +"(including the package name, if this is a submodule of a package). The " +"*file* argument is an open file, and *pathname* is the corresponding file " +"name; these can be ``None`` and ``''``, respectively, when the module is a " +"package or not being loaded from a file. The *description* argument is a " +"tuple, as would be returned by :func:`get_suffixes`, describing what kind of" +" module must be loaded." +msgstr "" +"加载之前由 :func:`find_module` 所找到的模块(或由其他方式执行搜索所产生的兼容的结果)。 " +"此函数所做的不只是导入模块:如果模块已经被导入,它将重新加载此模块! *name* 参数指明完整的模块名称(包括包名,如果它是一个包的子模块的话)。 " +"*file* 参数是一个打开的文件,而 *pathname* 是相应的文件名;当模块是一个包或者不是从文档加载时,它们可以分别为 ``None`` 和 " +"``''``。 *description* 参数是一个元组,如 :func:`get_suffixes` 将返回的内容一样,描述了必须加载什么样的模块。" + +#: ../../library/imp.rst:105 +msgid "" +"If the load is successful, the return value is the module object; otherwise," +" an exception (usually :exc:`ImportError`) is raised." +msgstr "如果加载成功,则返回值为相应的模块对象;否则,将引发一个异常 (通常为 :exc:`ImportError`)。" + +#: ../../library/imp.rst:108 +msgid "" +"**Important:** the caller is responsible for closing the *file* argument, if" +" it was not ``None``, even when an exception is raised. This is best done " +"using a :keyword:`try` ... :keyword:`finally` statement." +msgstr "" +"**重要:** 调用方需负责关闭 *file* 参数,如果它不为 ``None`` 的话,即使是在有异常被引发时。 这最好是使用 " +":keyword:`try` ... :keyword:`finally` 语句来实现。" + +#: ../../library/imp.rst:112 +msgid "" +"If previously used in conjunction with :func:`imp.find_module` then consider" +" using :func:`importlib.import_module`, otherwise use the loader returned by" +" the replacement you chose for :func:`imp.find_module`. If you called " +":func:`imp.load_module` and related functions directly with file path " +"arguments then use a combination of " +":func:`importlib.util.spec_from_file_location` and " +":func:`importlib.util.module_from_spec`. See the :ref:`importlib-examples` " +"section of the :mod:`importlib` documentation for details of the various " +"approaches." +msgstr "" +"如果之前是与 :func:`imp.find_module` 一起使用则可考虑使用 " +":func:`importlib.import_module`,在其他情况下请使用你选择的 :func:`imp.find_module` " +"替代品所返回的加载器。 如果你直接附带文件路径参数调用 :func:`imp.load_module` 和相关函数则请使用 " +":func:`importlib.util.spec_from_file_location` 和 " +":func:`importlib.util.module_from_spec` 的组合。 参见 :mod:`importlib` 文档的 " +":ref:`importlib-examples` 小节来了解各种方式的细节。" + +#: ../../library/imp.rst:126 +msgid "" +"Return a new empty module object called *name*. This object is *not* " +"inserted in ``sys.modules``." +msgstr "返回一个新的名为 *name* 的空模块对象。 此对象 *不会* 被插入到 ``sys.modules`` 中。 " + +#: ../../library/imp.rst:129 +msgid "Use :func:`importlib.util.module_from_spec` instead." +msgstr "请改用 :func:`importlib.util.module_from_spec`。" + +#: ../../library/imp.rst:135 +msgid "" +"Reload a previously imported *module*. The argument must be a module " +"object, so it must have been successfully imported before. This is useful " +"if you have edited the module source file using an external editor and want " +"to try out the new version without leaving the Python interpreter. The " +"return value is the module object (the same as the *module* argument)." +msgstr "" +"重新加载之前导入的 *module*。 该参数必须是一个模块对象,因此它之前必须已经被成功导入了。 " +"这在当你已使用外部编辑器编辑过模块源代码文件并想在不退出 Python 解释器的情况下尝试新版本时会很有用处。 返回值为模块对象(与 *module* " +"参数所指向的相同)。" + +#: ../../library/imp.rst:141 +msgid "When ``reload(module)`` is executed:" +msgstr "当 ``reload(module)`` 被执行时:" + +#: ../../library/imp.rst:143 +msgid "" +"Python modules' code is recompiled and the module-level code reexecuted, " +"defining a new set of objects which are bound to names in the module's " +"dictionary. The ``init`` function of extension modules is not called a " +"second time." +msgstr "" +"Python 模块的代码会被重新编译并且模块层级的代码将重新执行,定义一个新的绑定到模块字典中的名称的对象集合。 扩展模块的 ``init`` " +"函数不会被重复调用。" + +#: ../../library/imp.rst:148 +msgid "" +"As with all other objects in Python the old objects are only reclaimed after" +" their reference counts drop to zero." +msgstr "与Python中的所有的其它对象一样,旧的对象只有在它们的引用计数为0之后才会被回收。" + +#: ../../library/imp.rst:151 +msgid "" +"The names in the module namespace are updated to point to any new or changed" +" objects." +msgstr "模块命名空间中的名称重新指向任何新的或更改后的对象。" + +#: ../../library/imp.rst:154 +msgid "" +"Other references to the old objects (such as names external to the module) " +"are not rebound to refer to the new objects and must be updated in each " +"namespace where they occur if that is desired." +msgstr "其他旧对象的引用(例如那个模块的外部名称)不会被重新绑定到引用的新对象的,并且如果有需要,必须在出现的每个命名空间中进行更新。" + +#: ../../library/imp.rst:158 +msgid "There are a number of other caveats:" +msgstr "有一些其他注意事项:" + +#: ../../library/imp.rst:160 +msgid "" +"When a module is reloaded, its dictionary (containing the module's global " +"variables) is retained. Redefinitions of names will override the old " +"definitions, so this is generally not a problem. If the new version of a " +"module does not define a name that was defined by the old version, the old " +"definition remains. This feature can be used to the module's advantage if " +"it maintains a global table or cache of objects --- with a :keyword:`try` " +"statement it can test for the table's presence and skip its initialization " +"if desired::" +msgstr "" +"当一个模块被重新加载的时候,它的字典(包含了那个模块的全区变量)会被保留。名称的重新定义会覆盖旧的定义,所以通常来说这不是问题。如果一个新模块没有定义在旧版本模块中定义的名称,则将保留旧版本中的定义。这一特性可用于作为那个模块的优点,如果它维护一个全局表或者对象的缓存" +" —— 使用 :keyword:`try` 语句,就可以测试表的存在并且跳过它的初始化,如果有需要的话::" + +#: ../../library/imp.rst:173 +msgid "" +"It is legal though generally not very useful to reload built-in or " +"dynamically loaded modules, except for :mod:`sys`, :mod:`__main__` and " +":mod:`builtins`. In many cases, however, extension modules are not designed " +"to be initialized more than once, and may fail in arbitrary ways when " +"reloaded." +msgstr "" +"重新加载内置或动态加载的模块是合法操作但通常不是很有用处,除非是 :mod:`sys`, :mod:`__main__` 和 " +":mod:`builtins`。 但是在许多情况下,扩展模块并不是被设计为可被多次初始化的,并可能在重新加载时以任意方式失败。" + +#: ../../library/imp.rst:178 +msgid "" +"If a module imports objects from another module using :keyword:`from` ... " +":keyword:`import` ..., calling :func:`reload` for the other module does not " +"redefine the objects imported from it --- one way around this is to re-" +"execute the :keyword:`!from` statement, another is to use :keyword:`!import`" +" and qualified names (*module*.*name*) instead." +msgstr "" +"如果一个模块使用 :keyword:`from` ... :keyword:`import` ... 导入来自另一个模块的对象,则为另一个模块调用 " +":func:`reload` 并不会重新定义从其中导入的对象 --- 绕过此问题的一种方式是重新执行 :keyword:`!from` " +"语句,另一种方式是使用 :keyword:`!import` 和限定名称 (*module*.*name*) 来代替。" + +#: ../../library/imp.rst:184 +msgid "" +"If a module instantiates instances of a class, reloading the module that " +"defines the class does not affect the method definitions of the instances " +"--- they continue to use the old class definition. The same is true for " +"derived classes." +msgstr "如果一个模块创建一个类的实例,重新加载定义那个类的模块不影响那些实例的方法定义———它们继续使用旧类中的定义。对于子类来说同样是正确的。" + +#: ../../library/imp.rst:188 +msgid "" +"Relies on both ``__name__`` and ``__loader__`` being defined on the module " +"being reloaded instead of just ``__name__``." +msgstr "依赖于 ``__name__`` 和 ``__loader__`` 而不仅是 ``__name__`` 同时定义在被重新加载的模块上。" + +#: ../../library/imp.rst:192 +msgid "Use :func:`importlib.reload` instead." +msgstr "使用 :func:`importlib.reload` 来代替。" + +#: ../../library/imp.rst:196 +msgid "" +"The following functions are conveniences for handling :pep:`3147` byte-" +"compiled file paths." +msgstr "下列函数可以方便地处理 :pep:`3147` 字节编译的文件路径。" + +#: ../../library/imp.rst:203 +msgid "" +"Return the :pep:`3147` path to the byte-compiled file associated with the " +"source *path*. For example, if *path* is ``/foo/bar/baz.py`` the return " +"value would be ``/foo/bar/__pycache__/baz.cpython-32.pyc`` for Python 3.2. " +"The ``cpython-32`` string comes from the current magic tag (see " +":func:`get_tag`; if :attr:`sys.implementation.cache_tag` is not defined then" +" :exc:`NotImplementedError` will be raised). By passing in ``True`` or " +"``False`` for *debug_override* you can override the system's value for " +"``__debug__``, leading to optimized bytecode." +msgstr "" +"返回与源 :pep:`3147` 定义的 *path* 相关联的已编译字节码文件的路径。 举例来说,如果 *path* 为 " +"``/foo/bar/baz.py`` 则 Python 3.2 中的返回值将是 " +"``/foo/bar/__pycache__/baz.cpython-32.pyc``。 字符串 ``cpython-32`` 来自于当前的魔术标签 " +"(参见 :func:`get_tag`; 如果 :attr:`sys.implementation.cache_tag` 未定义则将引发 " +":exc:`NotImplementedError`)。 通过为 *debug_override* 传入 ``True`` 或 ``False`` " +"你可以覆盖系统设置的 ``__debug__`` 值,以生成优化的字节码。" + +#: ../../library/imp.rst:212 +msgid "*path* need not exist." +msgstr "*path* 不必存在。" + +#: ../../library/imp.rst:214 +msgid "" +"If :attr:`sys.implementation.cache_tag` is ``None``, then " +":exc:`NotImplementedError` is raised." +msgstr "" +"如果 :attr:`sys.implementation.cache_tag` 为 ``None``,则会引发 " +":exc:`NotImplementedError`。" + +#: ../../library/imp.rst:218 +msgid "Use :func:`importlib.util.cache_from_source` instead." +msgstr "使用 :func:`importlib.util.cache_from_source` 来代替。" + +#: ../../library/imp.rst:221 +msgid "The *debug_override* parameter no longer creates a ``.pyo`` file." +msgstr "*debug_override* 形参不会再创建 ``.pyo`` 文件。" + +#: ../../library/imp.rst:227 +msgid "" +"Given the *path* to a :pep:`3147` file name, return the associated source " +"code file path. For example, if *path* is " +"``/foo/bar/__pycache__/baz.cpython-32.pyc`` the returned path would be " +"``/foo/bar/baz.py``. *path* need not exist, however if it does not conform " +"to :pep:`3147` format, a :exc:`ValueError` is raised. If " +":attr:`sys.implementation.cache_tag` is not defined, " +":exc:`NotImplementedError` is raised." +msgstr "" +"根据给定的 :pep:`3147` 文件名的 *path*,返回相关联的源代码文件路径。 举例来说,如果 *path* 为 " +"``/foo/bar/__pycache__/baz.cpython-32.pyc`` 则返回的路径将是 ``/foo/bar/baz.py``。 " +"*path* 不必已存在,但是如果它未遵循 :pep:`3147` 格式,则会引发 :exc:`ValueError`。 如果未定义 " +":attr:`sys.implementation.cache_tag`,则会引发 :exc:`NotImplementedError`。" + +#: ../../library/imp.rst:235 +msgid "" +"Raise :exc:`NotImplementedError` when :attr:`sys.implementation.cache_tag` " +"is not defined." +msgstr "" +"当未定义 :attr:`sys.implementation.cache_tag` 时将引发 :exc:`NotImplementedError`。" + +#: ../../library/imp.rst:239 +msgid "Use :func:`importlib.util.source_from_cache` instead." +msgstr "使用 :func:`importlib.util.source_from_cache` 来代替。" + +#: ../../library/imp.rst:245 +msgid "" +"Return the :pep:`3147` magic tag string matching this version of Python's " +"magic number, as returned by :func:`get_magic`." +msgstr "返回与此 Python 版本魔数相匹配的 :pep:`3147` 魔术标签字符串,如 :func:`get_magic` 所返回的。" + +#: ../../library/imp.rst:248 +msgid "" +"Use :attr:`sys.implementation.cache_tag` directly starting in Python 3.3." +msgstr "从 Python 3.3 开始直接使用 :attr:`sys.implementation.cache_tag`。" + +#: ../../library/imp.rst:253 +msgid "" +"The following functions help interact with the import system's internal " +"locking mechanism. Locking semantics of imports are an implementation " +"detail which may vary from release to release. However, Python ensures that" +" circular imports work without any deadlocks." +msgstr "" +"以下函数可以帮助与导入系统的内部锁定机制进行交互。 导入的锁定语义是一个可能在不同发布版之间发生改变的实现细节。 但是,Python " +"会确保循环导入操作不会出现任何死锁。" + +#: ../../library/imp.rst:261 +msgid "" +"Return ``True`` if the global import lock is currently held, else ``False``." +" On platforms without threads, always return ``False``." +msgstr "如果当前持有全局导入锁则返回 ``True``,否则返回 ``False``。 在没有线程的系统平台上,将总是返回 ``False``。" + +#: ../../library/imp.rst:264 +msgid "" +"On platforms with threads, a thread executing an import first holds a global" +" import lock, then sets up a per-module lock for the rest of the import. " +"This blocks other threads from importing the same module until the original " +"import completes, preventing other threads from seeing incomplete module " +"objects constructed by the original thread. An exception is made for " +"circular imports, which by construction have to expose an incomplete module " +"object at some point." +msgstr "" +"在有线程的平台上,执行导入的线程首先会持有一个全局导入锁,然后为导入其余部分设置模块专属锁。 " +"这将阻止其他线程导入相同的模块直到原始导入完成,防止其他线程看到由原始线程构建的不完整的模块对象。 " +"循环导入是个例外情况,它在构造上就必须在某一时刻暴露不完整的模块对象。" + +#: ../../library/imp.rst:272 ../../library/imp.rst:292 +#: ../../library/imp.rst:305 +msgid "" +"The locking scheme has changed to per-module locks for the most part. A " +"global import lock is kept for some critical tasks, such as initializing the" +" per-module locks." +msgstr "锁定方案在大多数情况下都已改为按模块锁定。 对于某些关键任务会保留一个全局导入锁,比如初始化每个模块的锁。" + +#: ../../library/imp.rst:282 +msgid "" +"Acquire the interpreter's global import lock for the current thread. This " +"lock should be used by import hooks to ensure thread-safety when importing " +"modules." +msgstr "为当前线程获取解释器的全局导入锁。 这个锁应当由导入钩子来使用以确保导入模块时的线程安全。" + +#: ../../library/imp.rst:286 +msgid "" +"Once a thread has acquired the import lock, the same thread may acquire it " +"again without blocking; the thread must release it once for each time it has" +" acquired it." +msgstr "一旦某个线程获取了导入锁,同一个线程可以再次获取它而不会阻塞;该线程每次获得它都必须再释放它一次。" + +#: ../../library/imp.rst:290 +msgid "On platforms without threads, this function does nothing." +msgstr "在没有线程的平台上,此函数将不做任何操作。" + +#: ../../library/imp.rst:302 +msgid "" +"Release the interpreter's global import lock. On platforms without threads, " +"this function does nothing." +msgstr "释放解释器的全局导入锁。 在没有线程的平台上,此函数将不做任何操作。" + +#: ../../library/imp.rst:313 +msgid "" +"The following constants with integer values, defined in this module, are " +"used to indicate the search result of :func:`find_module`." +msgstr "以下是在本模块中定义的具有整数值的常量,用来表示 :func:`find_module` 的搜索结果。" + +#: ../../library/imp.rst:319 +msgid "The module was found as a source file." +msgstr "模块作为一个源文件被发现。" + +#: ../../library/imp.rst:326 +msgid "The module was found as a compiled code object file." +msgstr "模块作为一个已编译代码对象文件被发现。" + +#: ../../library/imp.rst:333 +msgid "The module was found as dynamically loadable shared library." +msgstr "模块作为动态可加载共享库被发现。" + +#: ../../library/imp.rst:340 +msgid "The module was found as a package directory." +msgstr "模块作为一个包目录被发现。" + +#: ../../library/imp.rst:347 +msgid "The module was found as a built-in module." +msgstr "模块作为一个内置模块被发现。" + +#: ../../library/imp.rst:354 +msgid "The module was found as a frozen module." +msgstr "模块作为一个冻结模块被发现。" + +#: ../../library/imp.rst:361 +msgid "" +"The :class:`NullImporter` type is a :pep:`302` import hook that handles non-" +"directory path strings by failing to find any modules. Calling this type " +"with an existing directory or empty string raises :exc:`ImportError`. " +"Otherwise, a :class:`NullImporter` instance is returned." +msgstr "" +":class:`NullImporter` 类型是一个在无法找到任何模块时处理非目录路径字符串 :pep:`302` 导入钩子。 " +"调用此类型时传入一个现有目录或空字符串将引发 :exc:`ImportError`。 在其他情况下,将返回一个 " +":class:`NullImporter` 实例。" + +#: ../../library/imp.rst:366 +msgid "Instances have only one method:" +msgstr "这些实例只有一个方法:" + +#: ../../library/imp.rst:370 +msgid "" +"This method always returns ``None``, indicating that the requested module " +"could not be found." +msgstr "此方法总是返回 ``None``,表示所请求的模块无法找到。" + +#: ../../library/imp.rst:373 +msgid "" +"``None`` is inserted into ``sys.path_importer_cache`` instead of an instance" +" of :class:`NullImporter`." +msgstr "" +"将把 ``None`` 插入到 ``sys.path_importer_cache`` 而不是 :class:`NullImporter` 的实例。" + +#: ../../library/imp.rst:377 +msgid "Insert ``None`` into ``sys.path_importer_cache`` instead." +msgstr "改为将 ``None`` 插入到 ``sys.path_importer_cache``。" + +#: ../../library/imp.rst:384 +msgid "Examples" +msgstr "例子" + +#: ../../library/imp.rst:386 +msgid "" +"The following function emulates what was the standard import statement up to" +" Python 1.4 (no hierarchical module names). (This *implementation* wouldn't" +" work in that version, since :func:`find_module` has been extended and " +":func:`load_module` has been added in 1.4.) ::" +msgstr "" +"以下函数模拟了 Python 1.4 及之前版本的标准导入语句(没有多层级的模块名称)。 (这个 *实现* 不可用于那些版本,因为 " +":func:`find_module` 已经被扩展而 :func:`load_module` 在 1.4 中已被添加。) ::" diff --git a/library/importlib.metadata.po b/library/importlib.metadata.po new file mode 100644 index 000000000..442945bb2 --- /dev/null +++ b/library/importlib.metadata.po @@ -0,0 +1,321 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) 2001-2024, Python Software Foundation +# This file is distributed under the same license as the Python package. +# FIRST AUTHOR , YEAR. +# +# Translators: +# eric R , 2019 +# Alpha Du , 2019 +# Nyuan Zhang, 2022 +# Rafael Fontenelle , 2024 +# +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: Python 3.9\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2024-07-12 16:21+0000\n" +"PO-Revision-Date: 2019-09-01 14:41+0000\n" +"Last-Translator: Rafael Fontenelle , 2024\n" +"Language-Team: Chinese (China) (https://app.transifex.com/python-doc/teams/5390/zh_CN/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: zh_CN\n" +"Plural-Forms: nplurals=1; plural=0;\n" + +#: ../../library/importlib.metadata.rst:5 +msgid "Using :mod:`!importlib.metadata`" +msgstr "使用 :mod:`!importlib.metadata`" + +#: ../../library/importlib.metadata.rst:10 +msgid "**Source code:** :source:`Lib/importlib/metadata.py`" +msgstr "**源代码:** :source:`Lib/importlib/metadata.py`" + +#: ../../library/importlib.metadata.rst:15 +msgid "" +"This functionality is provisional and may deviate from the usual version " +"semantics of the standard library." +msgstr "这个功能是暂定的,可能会偏离标准库通常的版本语义。" + +#: ../../library/importlib.metadata.rst:18 +msgid "" +"``importlib.metadata`` is a library that provides for access to installed " +"package metadata. Built in part on Python's import system, this library " +"intends to replace similar functionality in the `entry point API`_ and " +"`metadata API`_ of ``pkg_resources``. Along with :mod:`importlib.resources`" +" in Python 3.7 and newer (backported as `importlib_resources`_ for older " +"versions of Python), this can eliminate the need to use the older and less " +"efficient ``pkg_resources`` package." +msgstr "" +"``importlib.metadata`` 是一个提供对已安装包的元数据访问的库。这个库部分建立在 Python 的导入系统上,旨在取代 " +"``pkg_resources`` 的 `entry point API`_ 和 `metadata API`_ 中的类似功能。 通过和 Python " +"3.7 或更高版本中的 :mod:`importlib.resources` 一同使用(对于旧版本的 Python 则作为 " +"`importlib_resources`_ 向后移植),这可以消除对使用较旧且较为低效的 ``pkg_resources`` 包的需要。" + +#: ../../library/importlib.metadata.rst:27 +msgid "" +"By \"installed package\" we generally mean a third-party package installed " +"into Python's ``site-packages`` directory via tools such as `pip " +"`_. Specifically, it means a package with " +"either a discoverable ``dist-info`` or ``egg-info`` directory, and metadata " +"defined by :pep:`566` or its older specifications. By default, package " +"metadata can live on the file system or in zip archives on :data:`sys.path`." +" Through an extension mechanism, the metadata can live almost anywhere." +msgstr "" +"此处所说的 “已安装的包” 通常指通过 `pip `_ 等工具安装在 Python " +"``site-packages`` 目录下的第三方包。具体来说,它指的是一个具有可发现的 ``dist-info`` 或 ``egg-info`` " +"目录以及 :pep:`566` 或其更早的规范所定义的元数据的包。默认情况下,包的元数据可以存在于文件系统中或 :data:`sys.path` " +"上的压缩文件中。 通过扩展机制,元数据几乎可以存在于任何地方。" + +#: ../../library/importlib.metadata.rst:38 +msgid "Overview" +msgstr "概述" + +#: ../../library/importlib.metadata.rst:40 +msgid "" +"Let's say you wanted to get the version string for a package you've " +"installed using ``pip``. We start by creating a virtual environment and " +"installing something into it:" +msgstr "假设你想得到你用 ``pip`` 安装的一个包的版本字符串。我们在创建的虚拟环境中安装一些东西:" + +#: ../../library/importlib.metadata.rst:50 +msgid "You can get the version string for ``wheel`` by running the following:" +msgstr "你可以通过运行以下代码得到 ``wheel`` 的版本字符串:" + +#: ../../library/importlib.metadata.rst:59 +msgid "" +"You can also get the set of entry points keyed by group, such as " +"``console_scripts``, ``distutils.commands`` and others. Each group contains" +" a sequence of :ref:`EntryPoint ` objects." +msgstr "" +"你也可以获得以组名为关键字的入口点集合,比如 ``console_scripts`` 和 ``distutils.commands`` 。每个组包含一个" +" :ref:`入口点 ` 对象的序列。" + +#: ../../library/importlib.metadata.rst:63 +msgid "You can get the :ref:`metadata for a distribution `::" +msgstr "你可以获得 :ref:`分发的元数据 `:" + +#: ../../library/importlib.metadata.rst:68 +msgid "" +"You can also get a :ref:`distribution's version number `, list its " +":ref:`constituent files `, and get a list of the distribution's " +":ref:`requirements`." +msgstr "" +"你也可以获得 :ref:`分发包的版本号 `,列出它的 :ref:`构成文件 `,并且得到分发包的 " +":ref:`requirements` 列表。" + +#: ../../library/importlib.metadata.rst:74 +msgid "Functional API" +msgstr "函数式 API" + +#: ../../library/importlib.metadata.rst:76 +msgid "This package provides the following functionality via its public API." +msgstr "这个包的公开 API 提供了以下功能。" + +#: ../../library/importlib.metadata.rst:82 +msgid "Entry points" +msgstr "入口点" + +#: ../../library/importlib.metadata.rst:84 +msgid "" +"The ``entry_points()`` function returns a dictionary of all entry points, " +"keyed by group. Entry points are represented by ``EntryPoint`` instances; " +"each ``EntryPoint`` has a ``.name``, ``.group``, and ``.value`` attributes " +"and a ``.load()`` method to resolve the value. There are also ``.module``, " +"``.attr``, and ``.extras`` attributes for getting the components of the " +"``.value`` attribute::" +msgstr "" + +#: ../../library/importlib.metadata.rst:108 +msgid "" +"The ``group`` and ``name`` are arbitrary values defined by the package " +"author and usually a client will wish to resolve all entry points for a " +"particular group. Read `the setuptools docs " +"`_ for more information on entry points, " +"their definition, and usage." +msgstr "" +"``group`` 和 ``name`` 是由软件包作者定义的任意值,通常客户端会希望解析某个特定组的所有入口点。阅读 `the setuptools " +"docs `_ 以了解更多关于入口点、其定义和用法的信息。" + +#: ../../library/importlib.metadata.rst:118 +msgid "Distribution metadata" +msgstr "分发的元数据" + +#: ../../library/importlib.metadata.rst:120 +msgid "" +"Every distribution includes some metadata, which you can extract using the " +"``metadata()`` function::" +msgstr "每个分发都包含某些元数据,你可以通过 ``metadata()`` 函数提取它们:" + +#: ../../library/importlib.metadata.rst:125 +msgid "" +"The keys of the returned data structure [#f1]_ name the metadata keywords, " +"and their values are returned unparsed from the distribution metadata::" +msgstr "" + +#: ../../library/importlib.metadata.rst:135 +msgid "Distribution versions" +msgstr "分发包的版本" + +#: ../../library/importlib.metadata.rst:137 +msgid "" +"The ``version()`` function is the quickest way to get a distribution's " +"version number, as a string::" +msgstr "``version()`` 函数是以字符串形式获取分发的版本号的最快方式:" + +#: ../../library/importlib.metadata.rst:147 +msgid "Distribution files" +msgstr "分发包的文件" + +#: ../../library/importlib.metadata.rst:149 +msgid "" +"You can also get the full set of files contained within a distribution. The" +" ``files()`` function takes a distribution package name and returns all of " +"the files installed by this distribution. Each file object returned is a " +"``PackagePath``, a :class:`pathlib.PurePath` derived object with additional " +"``dist``, ``size``, and ``hash`` properties as indicated by the metadata. " +"For example::" +msgstr "" +"你可以获得分发内包含的所有文件的集合。 ``files()`` 函数传入一个分发包的名字并返回所有这个分发安装的文件。每个返回的文件对象都是一个 " +":class:`pathlib.PurePath` 的具有额外由元数据指定的 ``dist``, ``size`` 和 ``hash`` 属性的子类 " +"``PackagePath`` 的实例。例如:" + +#: ../../library/importlib.metadata.rst:165 +msgid "Once you have the file, you can also read its contents::" +msgstr "当你获得了文件对象,你可以读取其内容:" + +#: ../../library/importlib.metadata.rst:176 +msgid "" +"You can also use the ``locate`` method to get a the absolute path to the " +"file::" +msgstr "你也可以使用 ``locate`` 方法来获得文件的绝对路径:" + +#: ../../library/importlib.metadata.rst:182 +msgid "" +"In the case where the metadata file listing files (RECORD or SOURCES.txt) is" +" missing, ``files()`` will return ``None``. The caller may wish to wrap " +"calls to ``files()`` in `always_iterable `_" +" or otherwise guard against this condition if the target distribution is not" +" known to have the metadata present." +msgstr "" +"当列出包含文件的元数据文件(RECORD 或 SOURCES.txt)不存在时, ``files()`` 函数将返回 ``None`` " +"。调用者可能会想要将对 ``files()`` 的调用封装在 `always_iterable `_" +" 中,或者用其他方法来应对目标分发元数据存在性未知的情况。" + +#: ../../library/importlib.metadata.rst:193 +msgid "Distribution requirements" +msgstr "分发包的依赖" + +#: ../../library/importlib.metadata.rst:195 +msgid "" +"To get the full set of requirements for a distribution, use the " +"``requires()`` function::" +msgstr "使用 ``requires()`` 函数来获得一个 分发 的所有依赖:" + +#: ../../library/importlib.metadata.rst:205 +msgid "Distributions" +msgstr "分发包对象" + +#: ../../library/importlib.metadata.rst:207 +msgid "" +"While the above API is the most common and convenient usage, you can get all" +" of that information from the ``Distribution`` class. A ``Distribution`` is" +" an abstract object that represents the metadata for a Python package. You " +"can get the ``Distribution`` instance::" +msgstr "" +"以上的 API 是最常见而方便的用法,但是你也可以通过 ``Distribution`` 类获得以上所有信息。 ``Distribution`` " +"是一个代表 Python 包的元数据的抽象对象。你可以这样获取 ``Distribution`` 实例:" + +#: ../../library/importlib.metadata.rst:215 +msgid "" +"Thus, an alternative way to get the version number is through the " +"``Distribution`` instance::" +msgstr "因此,可以通过 ``Distribution`` 实例获得版本号:" + +#: ../../library/importlib.metadata.rst:221 +msgid "" +"There are all kinds of additional metadata available on the ``Distribution``" +" instance::" +msgstr "``Distribution`` 实例具有所有可用的附加元数据:" + +#: ../../library/importlib.metadata.rst:229 +msgid "" +"The full set of available metadata is not described here. See :pep:`566` " +"for additional details." +msgstr "此处并未描述全部可用的元数据集合。 请参见 :pep:`566` 以了解更多细节。" + +#: ../../library/importlib.metadata.rst:234 +msgid "Extending the search algorithm" +msgstr "扩展搜索算法" + +#: ../../library/importlib.metadata.rst:236 +msgid "" +"Because package metadata is not available through :data:`sys.path` searches," +" or package loaders directly, the metadata for a package is found through " +"import system :ref:`finders `. To find a distribution " +"package's metadata, ``importlib.metadata`` queries the list of :term:`meta " +"path finders ` on :data:`sys.meta_path`." +msgstr "" +"包的元数据无法通过搜索 :data:`sys.path` 或通过包加载器获得,而是通过导入系统的 :ref:`查找器 ` 找到的。 ``importlib.metadata`` 查询在 :data:`sys.meta_path` 上的 " +":term:`元数据查找器 ` 列表以获得分发包的元数据。" + +#: ../../library/importlib.metadata.rst:242 +msgid "" +"The default ``PathFinder`` for Python includes a hook that calls into " +"``importlib.metadata.MetadataPathFinder`` for finding distributions loaded " +"from typical file-system-based paths." +msgstr "" +"Python 默认的 ``PathFinder`` 包含一个调用 ``importlib.metadata.MetadataPathFinder`` " +"来查找从典型的文件系统路径加载发布的钩子。" + +#: ../../library/importlib.metadata.rst:246 +msgid "" +"The abstract class :py:class:`importlib.abc.MetaPathFinder` defines the " +"interface expected of finders by Python's import system. " +"``importlib.metadata`` extends this protocol by looking for an optional " +"``find_distributions`` callable on the finders from :data:`sys.meta_path` " +"and presents this extended interface as the ``DistributionFinder`` abstract " +"base class, which defines this abstract method::" +msgstr "" +"抽象基类 :py:class:`importlib.abc.MetaPathFinder` 定义了 Python 导入系统期望的查找器接口。 " +"``importlib.metadata`` 通过寻找 :data:`sys.meta_path` 上查找器可选的 " +"``find_distributions`` 可调用的属性扩展这个协议,并将这个扩展接口作为 ``DistributionFinder`` " +"抽象基类提供,它定义了这个抽象方法:" + +#: ../../library/importlib.metadata.rst:260 +msgid "" +"The ``DistributionFinder.Context`` object provides ``.path`` and ``.name`` " +"properties indicating the path to search and name to match and may supply " +"other relevant context." +msgstr "" +"``DistributionFinder.Context`` 对象提供了指示搜索路径和匹配名称的属性 ``.path`` 和 ``.name`` " +",也可能提供其他相关的上下文。" + +#: ../../library/importlib.metadata.rst:264 +msgid "" +"What this means in practice is that to support finding distribution package " +"metadata in locations other than the file system, subclass ``Distribution`` " +"and implement the abstract methods. Then from a custom finder, return " +"instances of this derived ``Distribution`` in the ``find_distributions()`` " +"method." +msgstr "" +"这在实践中意味着要支持在文件系统外的其他位置查找分发包的元数据,你需要子类化 ``Distribution`` 并实现抽象方法,之后从一个自定义查找器的" +" ``find_distributions()`` 方法返回这个派生的 ``Distribution`` 实例。" + +#: ../../library/importlib.metadata.rst:277 +msgid "Footnotes" +msgstr "备注" + +#: ../../library/importlib.metadata.rst:278 +msgid "" +"Technically, the returned distribution metadata object is an " +":class:`email.message.EmailMessage` instance, but this is an implementation " +"detail, and not part of the stable API. You should only use dictionary-like" +" methods and syntax to access the metadata contents." +msgstr "" diff --git a/library/importlib.po b/library/importlib.po new file mode 100644 index 000000000..0dda12d31 --- /dev/null +++ b/library/importlib.po @@ -0,0 +1,2361 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) 2001-2024, Python Software Foundation +# This file is distributed under the same license as the Python package. +# FIRST AUTHOR , YEAR. +# +# Translators: +# Fei Yin , 2018 +# Alpha Du , 2019 +# Shengjing Zhu , 2019 +# Yixin Qian , 2019 +# leollon , 2019 +# Dai Xu , 2021 +# Freesand Leo , 2022 +# Rafael Fontenelle , 2024 +# +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: Python 3.9\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2024-04-19 21:47+0000\n" +"PO-Revision-Date: 2017-02-16 23:15+0000\n" +"Last-Translator: Rafael Fontenelle , 2024\n" +"Language-Team: Chinese (China) (https://app.transifex.com/python-doc/teams/5390/zh_CN/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: zh_CN\n" +"Plural-Forms: nplurals=1; plural=0;\n" + +#: ../../library/importlib.rst:2 +msgid ":mod:`!importlib` --- The implementation of :keyword:`!import`" +msgstr ":mod:`!importlib` --- :keyword:`!import` 的实现" + +#: ../../library/importlib.rst:12 +msgid "**Source code:** :source:`Lib/importlib/__init__.py`" +msgstr "**源代码** :source:`Lib/importlib/__init__.py`" + +#: ../../library/importlib.rst:17 +msgid "Introduction" +msgstr "概述" + +#: ../../library/importlib.rst:19 +msgid "" +"The purpose of the :mod:`importlib` package is two-fold. One is to provide " +"the implementation of the :keyword:`import` statement (and thus, by " +"extension, the :func:`__import__` function) in Python source code. This " +"provides an implementation of :keyword:`!import` which is portable to any " +"Python interpreter. This also provides an implementation which is easier to " +"comprehend than one implemented in a programming language other than Python." +msgstr "" +":mod:`importlib` 包的目的有两个。 第一个目的是在 Python 源代码中提供 :keyword:`import` " +"语句的实现(并且因此而扩展 :func:`__import__` 函数)。 这提供了一个可移植到任何 Python 解释器的 " +":keyword:`!import` 实现。 相比使用 Python 以外的编程语言实现方式,这一实现更加易于理解。" + +#: ../../library/importlib.rst:26 +msgid "" +"Two, the components to implement :keyword:`import` are exposed in this " +"package, making it easier for users to create their own custom objects " +"(known generically as an :term:`importer`) to participate in the import " +"process." +msgstr "" +"第二个目的是实现 :keyword:`import` 的部分被公开在这个包中,使得用户更容易创建他们自己的自定义对象 (通常被称为 " +":term:`importer`) 来参与到导入过程中。" + +#: ../../library/importlib.rst:33 +msgid ":ref:`import`" +msgstr ":ref:`import`" + +#: ../../library/importlib.rst:33 +msgid "The language reference for the :keyword:`import` statement." +msgstr ":keyword:`import` 语句的语言参考" + +#: ../../library/importlib.rst:38 +msgid "" +"`Packages specification `__" +msgstr "`包规格说明 `__" + +#: ../../library/importlib.rst:36 +msgid "" +"Original specification of packages. Some semantics have changed since the " +"writing of this document (e.g. redirecting based on ``None`` in " +":data:`sys.modules`)." +msgstr "" +"包的初始规范。自从编写这个文档开始,一些语义已经发生改变了(比如基于 :data:`sys.modules` 中 ``None`` 的重定向)。" + +#: ../../library/importlib.rst:41 +msgid "The :func:`.__import__` function" +msgstr ":func:`.__import__` 函数" + +#: ../../library/importlib.rst:41 +msgid "The :keyword:`import` statement is syntactic sugar for this function." +msgstr ":keyword:`import` 语句是这个函数的语法糖。" + +#: ../../library/importlib.rst:44 +msgid ":pep:`235`" +msgstr ":pep:`235`" + +#: ../../library/importlib.rst:44 +msgid "Import on Case-Insensitive Platforms" +msgstr "在忽略大小写的平台上进行导入" + +#: ../../library/importlib.rst:47 +msgid ":pep:`263`" +msgstr ":pep:`263`" + +#: ../../library/importlib.rst:47 +msgid "Defining Python Source Code Encodings" +msgstr "定义 Python 源代码编码" + +#: ../../library/importlib.rst:50 +msgid ":pep:`302`" +msgstr ":pep:`302`" + +#: ../../library/importlib.rst:50 +msgid "New Import Hooks" +msgstr "新导入钩子" + +#: ../../library/importlib.rst:53 +msgid ":pep:`328`" +msgstr ":pep:`328`" + +#: ../../library/importlib.rst:53 +msgid "Imports: Multi-Line and Absolute/Relative" +msgstr "导入:多行和绝对/相对" + +#: ../../library/importlib.rst:56 +msgid ":pep:`366`" +msgstr ":pep:`366`" + +#: ../../library/importlib.rst:56 +msgid "Main module explicit relative imports" +msgstr "主模块显式相对导入" + +#: ../../library/importlib.rst:59 +msgid ":pep:`420`" +msgstr ":pep:`420`" + +#: ../../library/importlib.rst:59 +msgid "Implicit namespace packages" +msgstr "隐式命名空间包" + +#: ../../library/importlib.rst:62 +msgid ":pep:`451`" +msgstr ":pep:`451`" + +#: ../../library/importlib.rst:62 +msgid "A ModuleSpec Type for the Import System" +msgstr "导入系统的一个模块规范类型" + +#: ../../library/importlib.rst:65 +msgid ":pep:`488`" +msgstr ":pep:`488`" + +#: ../../library/importlib.rst:65 +msgid "Elimination of PYO files" +msgstr "消除PYO文件" + +#: ../../library/importlib.rst:68 +msgid ":pep:`489`" +msgstr ":pep:`489`" + +#: ../../library/importlib.rst:68 +msgid "Multi-phase extension module initialization" +msgstr "多阶段扩展模块初始化" + +#: ../../library/importlib.rst:71 +msgid ":pep:`552`" +msgstr ":pep:`552`" + +#: ../../library/importlib.rst:71 +msgid "Deterministic pycs" +msgstr "确定性的 pyc 文件" + +#: ../../library/importlib.rst:74 +msgid ":pep:`3120`" +msgstr ":pep:`3120`" + +#: ../../library/importlib.rst:74 +msgid "Using UTF-8 as the Default Source Encoding" +msgstr "使用 UTF-8 作为默认的源编码" + +#: ../../library/importlib.rst:76 +msgid ":pep:`3147`" +msgstr ":pep:`3147`" + +#: ../../library/importlib.rst:77 +msgid "PYC Repository Directories" +msgstr "PYC 仓库目录" + +#: ../../library/importlib.rst:81 +msgid "Functions" +msgstr "函数" + +#: ../../library/importlib.rst:85 +msgid "An implementation of the built-in :func:`__import__` function." +msgstr "内置 :func:`__import__` 函数的实现。" + +#: ../../library/importlib.rst:88 +msgid "" +"Programmatic importing of modules should use :func:`import_module` instead " +"of this function." +msgstr "程序式地导入模块应该使用 :func:`import_module` 而不是这个函数。" + +#: ../../library/importlib.rst:93 +msgid "" +"Import a module. The *name* argument specifies what module to import in " +"absolute or relative terms (e.g. either ``pkg.mod`` or ``..mod``). If the " +"name is specified in relative terms, then the *package* argument must be set" +" to the name of the package which is to act as the anchor for resolving the " +"package name (e.g. ``import_module('..mod', 'pkg.subpkg')`` will import " +"``pkg.mod``)." +msgstr "" +"导入一个模块。 参数 *name* 指定了以绝对或相对导入方式导入什么模块 (比如要么像这样 ``pkg.mod`` 或者这样 ``..mod``)。 " +"如果参数 name 使用相对导入的方式来指定,那么 *package* 参数必须设置为那个包名,这个包名作为解析这个包名的锚点 (比如 " +"``import_module('..mod', 'pkg.subpkg')`` 将会导入 ``pkg.mod``)。" + +#: ../../library/importlib.rst:101 +msgid "" +"The :func:`import_module` function acts as a simplifying wrapper around " +":func:`importlib.__import__`. This means all semantics of the function are " +"derived from :func:`importlib.__import__`. The most important difference " +"between these two functions is that :func:`import_module` returns the " +"specified package or module (e.g. ``pkg.mod``), while :func:`__import__` " +"returns the top-level package or module (e.g. ``pkg``)." +msgstr "" +":func:`import_module` 函数是一个对 :func:`importlib.__import__` 进行简化的包装器。 " +"这意味着该函数的所有语义都来自于 :func:`importlib.__import__`。 这两个函数之间最重要的不同点在于 " +":func:`import_module` 返回指定的包或模块 (例如 ``pkg.mod``),而 :func:`__import__` " +"返回最高层级的包或模块 (例如 ``pkg``)。" + +#: ../../library/importlib.rst:108 +msgid "" +"If you are dynamically importing a module that was created since the " +"interpreter began execution (e.g., created a Python source file), you may " +"need to call :func:`invalidate_caches` in order for the new module to be " +"noticed by the import system." +msgstr "" +"如果动态导入一个自解释器开始执行以来被创建的模块(即创建了一个 Python 源代码文件),为了让导入系统知道这个新模块,可能需要调用 " +":func:`invalidate_caches`。" + +#: ../../library/importlib.rst:113 +msgid "Parent packages are automatically imported." +msgstr "父包会被自动导入。" + +#: ../../library/importlib.rst:118 +msgid "" +"Find the loader for a module, optionally within the specified *path*. If the" +" module is in :attr:`sys.modules`, then ``sys.modules[name].__loader__`` is " +"returned (unless the loader would be ``None`` or is not set, in which case " +":exc:`ValueError` is raised). Otherwise a search using :attr:`sys.meta_path`" +" is done. ``None`` is returned if no loader is found." +msgstr "" +"查找一个模块的加载器,可选择地在指定的 *path* 里面。如果这个模块是在 :attr:`sys.modules`,那么返回 " +"``sys.modules[name].__loader__`` (除非这个加载器是 ``None`` 或者是没有被设置, 在这样的情况下,会引起 " +":exc:`ValueError` 异常)。 否则使用 :attr:`sys.meta_path` 的一次搜索就结束。如果未发现加载器,则返回 " +"``None``。" + +#: ../../library/importlib.rst:124 +msgid "" +"A dotted name does not have its parents implicitly imported as that requires" +" loading them and that may not be desired. To properly import a submodule " +"you will need to import all parent packages of the submodule and use the " +"correct argument to *path*." +msgstr "" +"点状的名称没有使得它父包或模块隐式地导入,因为它需要加载它们并且可能不需要。为了适当地导入一个子模块,需要导入子模块的所有父包并且使用正确的参数提供给 " +"*path*。" + +#: ../../library/importlib.rst:131 +msgid "" +"If ``__loader__`` is not set, raise :exc:`ValueError`, just like when the " +"attribute is set to ``None``." +msgstr "" +"如果没有设置 ``__loader__``,会引起 :exc:`ValueError` 异常,就像属性设置为 ``None`` 的时候一样。" + +#: ../../library/importlib.rst:135 +msgid "Use :func:`importlib.util.find_spec` instead." +msgstr "使用 :func:`importlib.util.find_spec` 来代替。" + +#: ../../library/importlib.rst:140 +msgid "" +"Invalidate the internal caches of finders stored at :data:`sys.meta_path`. " +"If a finder implements ``invalidate_caches()`` then it will be called to " +"perform the invalidation. This function should be called if any modules are" +" created/installed while your program is running to guarantee all finders " +"will notice the new module's existence." +msgstr "" +"使查找器存储在 :data:`sys.meta_path` 中的内部缓存无效。如果一个查找器实现了 " +"``invalidate_caches()``,那么它会被调用来执行那个无效过程。 " +"如果创建/安装任何模块,同时正在运行的程序是为了保证所有的查找器知道新模块的存在,那么应该调用这个函数。" + +#: ../../library/importlib.rst:150 +msgid "" +"Reload a previously imported *module*. The argument must be a module " +"object, so it must have been successfully imported before. This is useful " +"if you have edited the module source file using an external editor and want " +"to try out the new version without leaving the Python interpreter. The " +"return value is the module object (which can be different if re-importing " +"causes a different object to be placed in :data:`sys.modules`)." +msgstr "" +"重新加载之前导入的 *module*。 那个参数必须是一个模块对象,所以它之前必须已经成功导入了。 " +"这在你已经使用外部编辑器编辑过了那个模块的源代码文件并且想在退出 Python 解释器之前试验这个新版本的模块的时候将很适用。 " +"函数的返回值是那个模块对象(如果重新导入导致一个不同的对象放置在 :data:`sys.modules` 中,那么那个模块对象是有可能会不同)。" + +#: ../../library/importlib.rst:157 +msgid "When :func:`reload` is executed:" +msgstr "当执行 :func:`reload` 的时候:" + +#: ../../library/importlib.rst:159 +msgid "" +"Python module's code is recompiled and the module-level code re-executed, " +"defining a new set of objects which are bound to names in the module's " +"dictionary by reusing the :term:`loader` which originally loaded the module." +" The ``init`` function of extension modules is not called a second time." +msgstr "" +"Python 模块的代码会被重新编译并且那个模块级的代码被重新执行,通过重新使用一开始加载那个模块的 " +":term:`loader`,定义一个新的绑定在那个模块字典中的名称的对象集合。扩展模块的 ``init`` 函数不会被调用第二次。" + +#: ../../library/importlib.rst:165 +msgid "" +"As with all other objects in Python the old objects are only reclaimed after" +" their reference counts drop to zero." +msgstr "与Python中的所有的其它对象一样,旧的对象只有在它们的引用计数为0之后才会被回收。" + +#: ../../library/importlib.rst:168 +msgid "" +"The names in the module namespace are updated to point to any new or changed" +" objects." +msgstr "模块命名空间中的名称重新指向任何新的或更改后的对象。" + +#: ../../library/importlib.rst:171 +msgid "" +"Other references to the old objects (such as names external to the module) " +"are not rebound to refer to the new objects and must be updated in each " +"namespace where they occur if that is desired." +msgstr "其他旧对象的引用(例如那个模块的外部名称)不会被重新绑定到引用的新对象的,并且如果有需要,必须在出现的每个命名空间中进行更新。" + +#: ../../library/importlib.rst:175 +msgid "There are a number of other caveats:" +msgstr "有一些其他注意事项:" + +#: ../../library/importlib.rst:177 +msgid "" +"When a module is reloaded, its dictionary (containing the module's global " +"variables) is retained. Redefinitions of names will override the old " +"definitions, so this is generally not a problem. If the new version of a " +"module does not define a name that was defined by the old version, the old " +"definition remains. This feature can be used to the module's advantage if " +"it maintains a global table or cache of objects --- with a :keyword:`try` " +"statement it can test for the table's presence and skip its initialization " +"if desired::" +msgstr "" +"当一个模块被重新加载的时候,它的字典(包含了那个模块的全区变量)会被保留。名称的重新定义会覆盖旧的定义,所以通常来说这不是问题。如果一个新模块没有定义在旧版本模块中定义的名称,则将保留旧版本中的定义。这一特性可用于作为那个模块的优点,如果它维护一个全局表或者对象的缓存" +" —— 使用 :keyword:`try` 语句,就可以测试表的存在并且跳过它的初始化,如果有需要的话::" + +#: ../../library/importlib.rst:191 +msgid "" +"It is generally not very useful to reload built-in or dynamically loaded " +"modules. Reloading :mod:`sys`, :mod:`__main__`, :mod:`builtins` and other " +"key modules is not recommended. In many cases extension modules are not " +"designed to be initialized more than once, and may fail in arbitrary ways " +"when reloaded." +msgstr "" +"重新加载内置的或者动态加载模块,通常来说不是很有用处。不推荐重新加载\":mod:`sys`,:mod:`__main__`,:mod:`builtins`" +" 和其它关键模块。在很多例子中,扩展模块并不是设计为不止一次的初始化,并且当重新加载时,可能会以任意方式失败。" + +#: ../../library/importlib.rst:197 +msgid "" +"If a module imports objects from another module using :keyword:`from` ... " +":keyword:`import` ..., calling :func:`reload` for the other module does not " +"redefine the objects imported from it --- one way around this is to re-" +"execute the :keyword:`!from` statement, another is to use :keyword:`!import`" +" and qualified names (*module.name*) instead." +msgstr "" +"如果一个模块使用 :keyword:`from` ... :keyword:`import` ... 导入的对象来自另外一个模块,给其它模块调用 " +":func:`reload` 不会重新定义来自这个模块的对象 —— 解决这个问题的一种方式是重新执行 :keyword:`!from` " +"语句,另一种方式是使用 :keyword:`!import` 和限定名称(*module.name*)来代替。" + +#: ../../library/importlib.rst:203 +msgid "" +"If a module instantiates instances of a class, reloading the module that " +"defines the class does not affect the method definitions of the instances " +"--- they continue to use the old class definition. The same is true for " +"derived classes." +msgstr "如果一个模块创建一个类的实例,重新加载定义那个类的模块不影响那些实例的方法定义———它们继续使用旧类中的定义。对于子类来说同样是正确的。" + +#: ../../library/importlib.rst:209 +msgid "" +":exc:`ModuleNotFoundError` is raised when the module being reloaded lacks a " +":class:`ModuleSpec`." +msgstr "" +"当重新加载的那个模块缺少 :class:`ModuleSpec` 的时候,会引起 :exc:`ModuleNotFoundError` 异常。" + +#: ../../library/importlib.rst:215 +msgid ":mod:`importlib.abc` -- Abstract base classes related to import" +msgstr ":mod:`importlib.abc` —— 关于导入的抽象基类" + +#: ../../library/importlib.rst:220 +msgid "**Source code:** :source:`Lib/importlib/abc.py`" +msgstr "**源代码:** :source:`Lib/importlib/abc.py`" + +#: ../../library/importlib.rst:225 +msgid "" +"The :mod:`importlib.abc` module contains all of the core abstract base " +"classes used by :keyword:`import`. Some subclasses of the core abstract base" +" classes are also provided to help in implementing the core ABCs." +msgstr "" +":mod:`importlib.abc` 模块包含了 :keyword:`import` 使用到的所有核心抽象基类。在实现核心的 ABCs " +"中,核心抽象基类的一些子类也提供了帮助。" + +#: ../../library/importlib.rst:229 +msgid "ABC hierarchy::" +msgstr "ABC 类的层次结构:" + +#: ../../library/importlib.rst:245 +msgid "An abstract base class representing a :term:`finder`." +msgstr "代表 :term:`finder` 的一个抽象基类" + +#: ../../library/importlib.rst:247 +msgid "Use :class:`MetaPathFinder` or :class:`PathEntryFinder` instead." +msgstr "使用 :class:`MetaPathFinder` 或 :class:`PathEntryFinder` 来代替。" + +#: ../../library/importlib.rst:252 +msgid "" +"An abstract method for finding a :term:`loader` for the specified module. " +"Originally specified in :pep:`302`, this method was meant for use in " +":data:`sys.meta_path` and in the path-based import subsystem." +msgstr "" +"为指定的模块查找 :term:`loader` 定义的抽象方法。本来是在 :pep:`302` 指定的,这个方法是在 " +":data:`sys.meta_path` 和基于路径的导入子系统中使用。" + +#: ../../library/importlib.rst:256 +msgid "" +"Returns ``None`` when called instead of raising :exc:`NotImplementedError`." +msgstr "当被调用的时候,返回 ``None`` 而不是引发 :exc:`NotImplementedError`。" + +#: ../../library/importlib.rst:263 +msgid "" +"An abstract base class representing a :term:`meta path finder`. For " +"compatibility, this is a subclass of :class:`Finder`." +msgstr "" +"代表 :term:`meta path finder` 的一个抽象基类。 为了保持兼容性,这是 :class:`Finder` 的一个子类。" + +#: ../../library/importlib.rst:270 +msgid "" +"An abstract method for finding a :term:`spec ` for the " +"specified module. If this is a top-level import, *path* will be ``None``. " +"Otherwise, this is a search for a subpackage or module and *path* will be " +"the value of :attr:`__path__` from the parent package. If a spec cannot be " +"found, ``None`` is returned. When passed in, ``target`` is a module object " +"that the finder may use to make a more educated guess about what spec to " +"return. :func:`importlib.util.spec_from_loader` may be useful for " +"implementing concrete ``MetaPathFinders``." +msgstr "" +"一个抽象方法,用于查找指定模块的 :term:`spec ` 。若是顶层导入,*path* 将为 ``None``。 " +"否则就是查找子包或模块,*path* 将是父级包的 :attr:`__path__` 值。找不到则会返回 ``None``。传入的 ``target``" +" 是一个模块对象,查找器可以用来对返回的规格进行更有依据的猜测。在实现具体的 ``MetaPathFinders`` 代码时,可能会用到 " +":func:`importlib.util.spec_from_loader` 。" + +#: ../../library/importlib.rst:284 +msgid "" +"A legacy method for finding a :term:`loader` for the specified module. If " +"this is a top-level import, *path* will be ``None``. Otherwise, this is a " +"search for a subpackage or module and *path* will be the value of " +":attr:`__path__` from the parent package. If a loader cannot be found, " +"``None`` is returned." +msgstr "" +"一个用于查找指定的模块中 :term:`loader` 的遗留方法。如果这是最高层级的导入,*path* 的值将会是 " +"``None``。否则,这是一个查找子包或者模块的方法,并且 *path* 的值将会是来自父包的 :attr:`__path__` " +"的值。如果未发现加载器,返回 ``None``。" + +#: ../../library/importlib.rst:290 +msgid "" +"If :meth:`find_spec` is defined, backwards-compatible functionality is " +"provided." +msgstr "如果定义了 :meth:`find_spec` 方法,则提供了向后兼容的功能。" + +#: ../../library/importlib.rst:293 +msgid "" +"Returns ``None`` when called instead of raising :exc:`NotImplementedError`. " +"Can use :meth:`find_spec` to provide functionality." +msgstr "" +"当调用这个方法的时候返回 ``None`` 而不是引发 :exc:`NotImplementedError`。 可以使用 " +":meth:`find_spec` 来提供功能。" + +#: ../../library/importlib.rst:298 ../../library/importlib.rst:352 +#: ../../library/importlib.rst:360 ../../library/importlib.rst:1180 +msgid "Use :meth:`find_spec` instead." +msgstr "使用 :meth:`find_spec` 代替。" + +#: ../../library/importlib.rst:303 +msgid "" +"An optional method which, when called, should invalidate any internal cache " +"used by the finder. Used by :func:`importlib.invalidate_caches` when " +"invalidating the caches of all finders on :data:`sys.meta_path`." +msgstr "" +"当被调用的时候,一个可选的方法应该将查找器使用的任何内部缓存进行无效。将在 :data:`sys.meta_path` " +"上的所有查找器的缓存进行无效的时候,这个函数被 :func:`importlib.invalidate_caches` 所使用。" + +#: ../../library/importlib.rst:307 +msgid "Returns ``None`` when called instead of ``NotImplemented``." +msgstr "当方法被调用的时候,方法返回是 ``None`` 而不是 ``NotImplemented`` 。" + +#: ../../library/importlib.rst:313 +msgid "" +"An abstract base class representing a :term:`path entry finder`. Though it " +"bears some similarities to :class:`MetaPathFinder`, ``PathEntryFinder`` is " +"meant for use only within the path-based import subsystem provided by " +":class:`PathFinder`. This ABC is a subclass of :class:`Finder` for " +"compatibility reasons only." +msgstr "" +":term:`path entry finder` 的一个抽象基类。尽管这个基类和 :class:`MetaPathFinder` 有一些相似之处,但是" +" ``PathEntryFinder`` 只在由 :class:`PathFinder` 提供的基于路径导入子系统中使用。这个抽象类是 " +":term:`Finder` 的一个子类,仅仅是因为兼容性的原因。" + +#: ../../library/importlib.rst:323 +msgid "" +"An abstract method for finding a :term:`spec ` for the " +"specified module. The finder will search for the module only within the " +":term:`path entry` to which it is assigned. If a spec cannot be found, " +"``None`` is returned. When passed in, ``target`` is a module object that " +"the finder may use to make a more educated guess about what spec to return. " +":func:`importlib.util.spec_from_loader` may be useful for implementing " +"concrete ``PathEntryFinders``." +msgstr "" +"一个抽象方法,用于查找指定模块的 :term:`spec `。搜索器将只在指定的 :term:`path entry` " +"内搜索该模块。找不到则会返回 ``None``。在实现具体的 ``PathEntryFinders`` 代码时,可能会用到 " +":func:`importlib.util.spec_from_loader` 。" + +#: ../../library/importlib.rst:335 +msgid "" +"A legacy method for finding a :term:`loader` for the specified module. " +"Returns a 2-tuple of ``(loader, portion)`` where ``portion`` is a sequence " +"of file system locations contributing to part of a namespace package. The " +"loader may be ``None`` while specifying ``portion`` to signify the " +"contribution of the file system locations to a namespace package. An empty " +"list can be used for ``portion`` to signify the loader is not part of a " +"namespace package. If ``loader`` is ``None`` and ``portion`` is the empty " +"list then no loader or location for a namespace package were found (i.e. " +"failure to find anything for the module)." +msgstr "" +"一个用于在模块中查找一个 :term:`loader` 的遗留方法。 返回一个 ``(loader, portion)`` " +"的2元组,``portion`` 是一个贡献给命名空间包部分的文件系统位置的序列。 加载器可能是 ``None``,同时正在指定的 " +"``portion`` 表示的是贡献给命名空间包的文件系统位置。``portion`` 可以使用一个空列表来表示加载器不是命名空间包的一部分。 如果 " +"``loader`` 是 ``None`` 并且 ``portion`` " +"是一个空列表,那么命名空间包中无加载器或者文件系统位置可查找到(即在那个模块中未能找到任何东西)。" + +#: ../../library/importlib.rst:345 +msgid "" +"If :meth:`find_spec` is defined then backwards-compatible functionality is " +"provided." +msgstr "如果定义了 :meth:`find_spec` ,则提供了向后兼容的功能。" + +#: ../../library/importlib.rst:348 +msgid "" +"Returns ``(None, [])`` instead of raising :exc:`NotImplementedError`. Uses " +":meth:`find_spec` when available to provide functionality." +msgstr "" +"返回 ``(None, [])`` 而不是引发 :exc:`NotImplementedError`。 当可于提供相应的功能的时候,使用 " +":meth:`find_spec`。" + +#: ../../library/importlib.rst:357 +msgid "" +"A concrete implementation of :meth:`Finder.find_module` which is equivalent " +"to ``self.find_loader(fullname)[0]``." +msgstr "" +":meth:`Finder.find_module`的具体实现,该方法等价于``self.find_loader(fullname)[0]``。" + +#: ../../library/importlib.rst:365 +msgid "" +"An optional method which, when called, should invalidate any internal cache " +"used by the finder. Used by :meth:`PathFinder.invalidate_caches` when " +"invalidating the caches of all cached finders." +msgstr "" +"当被调用的时候,一个可选的方法应该将查找器使用的任何内部缓存进行无效。当将所有缓存的查找器的缓存进行无效的时候,该函数被 " +":meth:`PathFinder.invalidate_caches` 使用。" + +#: ../../library/importlib.rst:372 +msgid "" +"An abstract base class for a :term:`loader`. See :pep:`302` for the exact " +"definition for a loader." +msgstr ":term:`loader` 的抽象基类。 关于一个加载器的实际定义请查看 :pep:`302`。" + +#: ../../library/importlib.rst:375 ../../library/importlib.rst:901 +msgid "" +"Loaders that wish to support resource reading should implement a " +"``get_resource_reader(fullname)`` method as specified by " +":class:`importlib.abc.ResourceReader`." +msgstr "" +"加载器想要支持资源读取应该实现一个由 :class:`importlib.abc.ResourceReader` " +"指定的``get_resource_reader(fullname)`` 方法。" + +#: ../../library/importlib.rst:379 +msgid "Introduced the optional ``get_resource_reader()`` method." +msgstr "引入了可选的 ``get_resource_reader()`` 方法。" + +#: ../../library/importlib.rst:384 +msgid "" +"A method that returns the module object to use when importing a module. " +"This method may return ``None``, indicating that default module creation " +"semantics should take place." +msgstr "当导入一个模块的时候,一个返回将要使用的那个模块对象的方法。这个方法可能返回 ``None`` ,这暗示着应该发生默认的模块创建语义。\"" + +#: ../../library/importlib.rst:390 +msgid "" +"Starting in Python 3.6, this method will not be optional when " +":meth:`exec_module` is defined." +msgstr "从 Python 3.6 开始,当定义了 :meth:`exec_module` 的时候,这个方法将不会是可选的。" + +#: ../../library/importlib.rst:396 +msgid "" +"An abstract method that executes the module in its own namespace when a " +"module is imported or reloaded. The module should already be initialized " +"when ``exec_module()`` is called. When this method exists, " +":meth:`~importlib.abc.Loader.create_module` must be defined." +msgstr "" +"当一个模块被导入或重新加载时,一个抽象方法在它自己的命名空间中执行那个模块。当调用 ``exec_module()`` 的时候,那个模块应该已经被初始化" +" 了。当这个方法存在时,必须定义 :meth:`~importlib.abc.Loader.create_module` 。" + +#: ../../library/importlib.rst:403 +msgid ":meth:`~importlib.abc.Loader.create_module` must also be defined." +msgstr ":meth:`~importlib.abc.Loader.create_module` 也必须被定义。" + +#: ../../library/importlib.rst:408 +msgid "" +"A legacy method for loading a module. If the module cannot be loaded, " +":exc:`ImportError` is raised, otherwise the loaded module is returned." +msgstr "用于加载一个模块的传统方法。如果这个模块不能被导入,将引起 :exc:`ImportError` 异常,否则返回那个被加载的模块。" + +#: ../../library/importlib.rst:412 +msgid "" +"If the requested module already exists in :data:`sys.modules`, that module " +"should be used and reloaded. Otherwise the loader should create a new module" +" and insert it into :data:`sys.modules` before any loading begins, to " +"prevent recursion from the import. If the loader inserted a module and the " +"load fails, it must be removed by the loader from :data:`sys.modules`; " +"modules already in :data:`sys.modules` before the loader began execution " +"should be left alone (see :func:`importlib.util.module_for_loader`)." +msgstr "" +"如果请求的模块已经存在 :data:`sys.modules`,应该使用并且重新加载那个模块。 " +"否则加载器应该是创建一个新的模块并且在任何家过程开始之前将这个新模块插入到 :data:`sys.modules` 中,来阻止递归导入。 " +"如果加载器插入了一个模块并且加载失败了,加载器必须从 :data:`sys.modules` 中将这个模块移除。在加载器开始执行之前,已经在 " +":data:`sys.modules` 中的模块应该被忽略 (查看 :func:`importlib.util.module_for_loader`)。" + +#: ../../library/importlib.rst:421 +msgid "" +"The loader should set several attributes on the module. (Note that some of " +"these attributes can change when a module is reloaded):" +msgstr "加载器应该在模块上面设置几个属性。(要知道当重新加载一个模块的时候,那些属性某部分可以改变):" + +#: ../../library/importlib.rst:426 +msgid ":attr:`__name__`" +msgstr ":attr:`__name__`" + +#: ../../library/importlib.rst:426 +msgid "The name of the module." +msgstr "模块的名字" + +#: ../../library/importlib.rst:430 +msgid ":attr:`__file__`" +msgstr ":attr:`__file__`" + +#: ../../library/importlib.rst:429 +msgid "" +"The path to where the module data is stored (not set for built-in modules)." +msgstr "模块数据存储的路径(不是为了内置的模块而设置)" + +#: ../../library/importlib.rst:434 +msgid ":attr:`__cached__`" +msgstr ":attr:`__cached__`" + +#: ../../library/importlib.rst:433 +msgid "" +"The path to where a compiled version of the module is/should be stored (not " +"set when the attribute would be inappropriate)." +msgstr "被存储或应该被存储的模块的编译版本的路径(当这个属性不恰当的时候不设置)。" + +#: ../../library/importlib.rst:438 +msgid ":attr:`__path__`" +msgstr ":attr:`__path__`" + +#: ../../library/importlib.rst:437 +msgid "" +"A list of strings specifying the search path within a package. This " +"attribute is not set on modules." +msgstr "指定在一个包中搜索路径的一个字符串列表。这个属性不在模块上面进行设置。" + +#: ../../library/importlib.rst:445 +msgid ":attr:`__package__`" +msgstr ":attr:`__package__`" + +#: ../../library/importlib.rst:441 +msgid "" +"The fully-qualified name of the package under which the module was loaded as" +" a submodule (or the empty string for top-level modules). For packages, it " +"is the same as :attr:`__name__`. The " +":func:`importlib.util.module_for_loader` decorator can handle the details " +"for :attr:`__package__`." +msgstr "" +"当模块作为子模块加载时,其所在包的完全限定名称(顶层模块则为空字符串)。对于包而言,与 :attr:`__name__` 相同。 " +":func:`importlib.util.module_for_loader` 装饰器能够处理 :attr:`__package__` 的细节。" + +#: ../../library/importlib.rst:450 +msgid ":attr:`__loader__`" +msgstr ":attr:`__loader__`" + +#: ../../library/importlib.rst:448 +msgid "" +"The loader used to load the module. The " +":func:`importlib.util.module_for_loader` decorator can handle the details " +"for :attr:`__package__`." +msgstr "" +"用来加载那个模块的加载器。 :func:`importlib.util.module_for_loader` 装饰器可以处理 " +":attr:`__package__` 的细节。" + +#: ../../library/importlib.rst:452 +msgid "" +"When :meth:`exec_module` is available then backwards-compatible " +"functionality is provided." +msgstr "当 :meth:`exec_module` 可用的时候,那么则提供了向后兼容的功能。" + +#: ../../library/importlib.rst:455 +msgid "" +"Raise :exc:`ImportError` when called instead of :exc:`NotImplementedError`. " +"Functionality provided when :meth:`exec_module` is available." +msgstr "" +"当这个方法被调用的时候,触发 :exc:`ImportError` 异常而不是 :exc:`NotImplementedError`。当 " +":meth:`exec_module` 可用的时候,使用它的功能。" + +#: ../../library/importlib.rst:460 +msgid "" +"The recommended API for loading a module is :meth:`exec_module` (and " +":meth:`create_module`). Loaders should implement it instead of " +"load_module(). The import machinery takes care of all the other " +"responsibilities of load_module() when exec_module() is implemented." +msgstr "" +"加载模块推荐的使用的 API 是 :meth:`exec_module` (和 :meth:`create_module`)。 加载器应该实现它而不是 " +"load_module()。 当 exec_module() 被实现的时候,导入机制关心的是 load_module() 所有其他的责任。" + +#: ../../library/importlib.rst:469 +msgid "" +"A legacy method which when implemented calculates and returns the given " +"module's repr, as a string. The module type's default repr() will use the " +"result of this method as appropriate." +msgstr "一个遗留方法,在实现时计算并返回给定模块的 repr,作为字符串。 模块类型的默认 repr() 将根据需要使用此方法的结果。" + +#: ../../library/importlib.rst:475 +msgid "Made optional instead of an abstractmethod." +msgstr "是可选的方法而不是一个抽象方法。" + +#: ../../library/importlib.rst:478 +msgid "The import machinery now takes care of this automatically." +msgstr "现在导入机制会自动地关注这个方法。" + +#: ../../library/importlib.rst:484 +msgid "*Superseded by TraversableResources*" +msgstr "*被 TraversableResources* 取代" + +#: ../../library/importlib.rst:486 +msgid "" +"An :term:`abstract base class` to provide the ability to read *resources*." +msgstr "提供读取 *resources* 能力的一个 :term:`abstract base class` 。" + +#: ../../library/importlib.rst:489 +msgid "" +"From the perspective of this ABC, a *resource* is a binary artifact that is " +"shipped within a package. Typically this is something like a data file that " +"lives next to the ``__init__.py`` file of the package. The purpose of this " +"class is to help abstract out the accessing of such data files so that it " +"does not matter if the package and its data file(s) are stored in a e.g. zip" +" file versus on the file system." +msgstr "" +"从这个 ABC 的视角出发,*resource* 指一个包附带的二进制文件。常见的如在包的 ``__init__.py`` " +"文件旁的数据文件。这个类存在的目的是为了将对数据文件的访问进行抽象,这样包就和其数据文件的存储方式无关了。不论这些文件是存放在一个 zip " +"文件里还是直接在文件系统内。" + +#: ../../library/importlib.rst:497 +msgid "" +"For any of methods of this class, a *resource* argument is expected to be a " +":term:`path-like object` which represents conceptually just a file name. " +"This means that no subdirectory paths should be included in the *resource* " +"argument. This is because the location of the package the reader is for, " +"acts as the \"directory\". Hence the metaphor for directories and file names" +" is packages and resources, respectively. This is also why instances of this" +" class are expected to directly correlate to a specific package (instead of " +"potentially representing multiple packages or a module)." +msgstr "" +"对于该类中的任一方法,*resource* 参数的值都需要是一个在概念上表示文件名称的 :term:`path-like object`。 " +"这意味着任何子目录的路径都不该出现在 *resouce* 参数值内。 因为对于阅读器而言,包的位置就代表着「目录」。 " +"因此目录和文件名就分别对应于包和资源。 这也是该类的实例都需要和一个包直接关联(而不是潜在指代很多包或者一整个模块)的原因。" + +#: ../../library/importlib.rst:508 +msgid "" +"Loaders that wish to support resource reading are expected to provide a " +"method called ``get_resource_reader(fullname)`` which returns an object " +"implementing this ABC's interface. If the module specified by fullname is " +"not a package, this method should return :const:`None`. An object compatible" +" with this ABC should only be returned when the specified module is a " +"package." +msgstr "" +"想支持资源读取的加载器需要提供一个返回实现了此 ABC 的接口的 ``get_resource_reader(fullname)`` " +"方法。如果通过全名指定的模块不是一个包,这个方法应该返回 :const:`None`。 " +"当指定的模块是一个包时,应该只返回一个与这个抽象类ABC兼容的对象。" + +#: ../../library/importlib.rst:519 +msgid "" +"Returns an opened, :term:`file-like object` for binary reading of the " +"*resource*." +msgstr "返回一个打开的 :term:`file-like object` 用于 *resource* 的二进制读取。" + +#: ../../library/importlib.rst:522 +msgid "If the resource cannot be found, :exc:`FileNotFoundError` is raised." +msgstr "如果无法找到资源,将会引发 :exc:`FileNotFoundError`。" + +#: ../../library/importlib.rst:527 +msgid "Returns the file system path to the *resource*." +msgstr "返回 *resource* 的文件系统路径。" + +#: ../../library/importlib.rst:529 +msgid "" +"If the resource does not concretely exist on the file system, raise " +":exc:`FileNotFoundError`." +msgstr "如果资源并不实际存在于文件系统中,将会引发 :exc:`FileNotFoundError`。" + +#: ../../library/importlib.rst:534 +msgid "" +"Returns ``True`` if the named *name* is considered a resource. " +":exc:`FileNotFoundError` is raised if *name* does not exist." +msgstr "" +"如果 *name* 被视作资源,则返回True。如果 *name* 不存在,则引发 :exc:`FileNotFoundError` 异常。" + +#: ../../library/importlib.rst:539 +msgid "" +"Returns an :term:`iterable` of strings over the contents of the package. Do " +"note that it is not required that all names returned by the iterator be " +"actual resources, e.g. it is acceptable to return names for which " +":meth:`is_resource` would be false." +msgstr "" +"反回由字符串组成的 :term:`iterable`,表示这个包的所有内容。 请注意并不要求迭代器返回的所有名称都是实际的资源,例如返回 " +":meth:`is_resource` 为假值的名称也是可接受的。" + +#: ../../library/importlib.rst:545 +msgid "" +"Allowing non-resource names to be returned is to allow for situations where " +"how a package and its resources are stored are known a priori and the non-" +"resource names would be useful. For instance, returning subdirectory names " +"is allowed so that when it is known that the package and resources are " +"stored on the file system then those subdirectory names can be used " +"directly." +msgstr "" +"允许非资源名字被返回是为了允许存储的一个包和它的资源的方式是已知先验的并且非资源名字会有用的情况。比如,允许返回子目录名字,目的是当得知包和资源存储在文件系统上面的时候,能够直接使用子目录的名字。" + +#: ../../library/importlib.rst:553 +msgid "The abstract method returns an iterable of no items." +msgstr "这个抽象方法返回了一个不包含任何内容的可迭代对象。" + +#: ../../library/importlib.rst:558 +msgid "" +"An abstract base class for a :term:`loader` which implements the optional " +":pep:`302` protocol for loading arbitrary resources from the storage back-" +"end." +msgstr "一个 :term:`loader` 的抽象基类,它实现了可选的 :pep:`302` 协议用于从存储后端加载任意资源。" + +#: ../../library/importlib.rst:562 +msgid "" +"This ABC is deprecated in favour of supporting resource loading through " +":class:`importlib.abc.ResourceReader`." +msgstr "由于要支持使用 :class:`importlib.abc.ResourceReader` 类来加载资源,这个 ABC 已经被弃用了。" + +#: ../../library/importlib.rst:568 +msgid "" +"An abstract method to return the bytes for the data located at *path*. " +"Loaders that have a file-like storage back-end that allows storing arbitrary" +" data can implement this abstract method to give direct access to the data " +"stored. :exc:`OSError` is to be raised if the *path* cannot be found. The " +"*path* is expected to be constructed using a module's :attr:`__file__` " +"attribute or an item from a package's :attr:`__path__`." +msgstr "" +"一个用于返回位于 *path* " +"的字节数据的抽象方法。有一个允许存储任意数据的类文件存储后端的加载器能够实现这个抽象方法来直接访问这些被存储的数据。如果不能够找到 " +"*path*,则会引发 :exc:`OSError` 异常。*path* 被希望使用一个模块的 :attr:`__file` 属性或来自一个包的 " +":attr:`__path__` 来构建。" + +#: ../../library/importlib.rst:576 +msgid "Raises :exc:`OSError` instead of :exc:`NotImplementedError`." +msgstr "引发 :exc:`OSError` 异常而不是 :exc:`NotImplementedError` 异常。" + +#: ../../library/importlib.rst:582 +msgid "" +"An abstract base class for a :term:`loader` which implements the optional " +":pep:`302` protocol for loaders that inspect modules." +msgstr "一个实现加载器检查模块可选的 :pep:`302` 协议的 :term:`loader` 的抽象基类。" + +#: ../../library/importlib.rst:587 +msgid "" +"Return the code object for a module, or ``None`` if the module does not have" +" a code object (as would be the case, for example, for a built-in module). " +"Raise an :exc:`ImportError` if loader cannot find the requested module." +msgstr "" +"返回一个模块的代码对象,或如果模块没有一个代码对象(例如,对于内置的模块来说,这会是这种情况),则为 ``None``。 " +"如果加载器不能找到请求的模块,则引发 :exc:`ImportError` 异常。" + +#: ../../library/importlib.rst:593 +msgid "" +"While the method has a default implementation, it is suggested that it be " +"overridden if possible for performance." +msgstr "当这个方法有一个默认的实现的时候,出于性能方面的考虑,如果有可能的话,建议覆盖它。" + +#: ../../library/importlib.rst:599 +msgid "No longer abstract and a concrete implementation is provided." +msgstr "不再抽象并且提供一个具体的实现。" + +#: ../../library/importlib.rst:604 +msgid "" +"An abstract method to return the source of a module. It is returned as a " +"text string using :term:`universal newlines`, translating all recognized " +"line separators into ``'\\n'`` characters. Returns ``None`` if no source is" +" available (e.g. a built-in module). Raises :exc:`ImportError` if the loader" +" cannot find the module specified." +msgstr "" +"一个返回模块源的抽象方法。使用 :term:`universal newlines` 作为文本字符串被返回,将所有可识别行分割符翻译成 " +"``'\\n'`` 字符。 如果没有可用的源(例如,一个内置模块),则返回 ``None``。 如果加载器不能找到指定的模块,则引发 " +":exc:`ImportError` 异常。" + +#: ../../library/importlib.rst:610 ../../library/importlib.rst:619 +#: ../../library/importlib.rst:669 +msgid "Raises :exc:`ImportError` instead of :exc:`NotImplementedError`." +msgstr "引发 :exc:`ImportError` 而不是 :exc:`NotImplementedError`。" + +#: ../../library/importlib.rst:615 +msgid "" +"An optional method to return a true value if the module is a package, a " +"false value otherwise. :exc:`ImportError` is raised if the :term:`loader` " +"cannot find the module." +msgstr "" +"可选方法,如果模块为包,则返回 True,否则返回 False。 如果 :term:`loader` 找不到模块,则会触发 " +":exc:`ImportError`。" + +#: ../../library/importlib.rst:624 +msgid "Create a code object from Python source." +msgstr "创建一个来自Python源码的代码对象。" + +#: ../../library/importlib.rst:626 +msgid "" +"The *data* argument can be whatever the :func:`compile` function supports " +"(i.e. string or bytes). The *path* argument should be the \"path\" to where " +"the source code originated from, which can be an abstract concept (e.g. " +"location in a zip file)." +msgstr "" +"参数 *data* 可以是任意 :func:`compile` 函数支持的类型(例如字符串或字节串)。 参数 *path* " +"应该是源代码来源的路径,这可能是一个抽象概念(例如位于一个 zip 文件中)。" + +#: ../../library/importlib.rst:631 +msgid "" +"With the subsequent code object one can execute it in a module by running " +"``exec(code, module.__dict__)``." +msgstr "在有后续代码对象的情况下,可以在一个模块中通过运行 ``exec(code, module.__dict__)`` 来执行它。" + +#: ../../library/importlib.rst:636 +msgid "Made the method static." +msgstr "使得这个方法变成静态的。" + +#: ../../library/importlib.rst:641 +msgid "Implementation of :meth:`Loader.exec_module`." +msgstr ":meth:`Loader.exec_module` 的实现。" + +#: ../../library/importlib.rst:647 +msgid "Implementation of :meth:`Loader.load_module`." +msgstr ":meth:`Loader.load_module` 的实现。" + +#: ../../library/importlib.rst:649 +msgid "use :meth:`exec_module` instead." +msgstr "使用 :meth:`exec_module` 来代替。" + +#: ../../library/importlib.rst:655 +msgid "" +"An abstract base class which inherits from :class:`InspectLoader` that, when" +" implemented, helps a module to be executed as a script. The ABC represents " +"an optional :pep:`302` protocol." +msgstr "" +"一个继承自 :class:`InspectLoader` 的抽象基类,当被实现时,帮助一个模块作为脚本来执行。 这个抽象基类表示可选的 " +":pep:`302` 协议。" + +#: ../../library/importlib.rst:661 +msgid "" +"An abstract method that is to return the value of :attr:`__file__` for the " +"specified module. If no path is available, :exc:`ImportError` is raised." +msgstr "一个用来为指定模块返回 :attr:`__file__` 的值的抽象方法。如果无路径可用,则引发 :exc:`ImportError`。" + +#: ../../library/importlib.rst:665 +msgid "" +"If source code is available, then the method should return the path to the " +"source file, regardless of whether a bytecode was used to load the module." +msgstr "如果源代码可用,那么这个方法返回源文件的路径,不管是否是用来加载模块的字节码。" + +#: ../../library/importlib.rst:675 +msgid "" +"An abstract base class which inherits from :class:`ResourceLoader` and " +":class:`ExecutionLoader`, providing concrete implementations of " +":meth:`ResourceLoader.get_data` and :meth:`ExecutionLoader.get_filename`." +msgstr "" +"一个继承自 :class:`ResourceLoader` 和 :class:`ExecutionLoader`,提供 " +":meth:`ResourceLoader.get_data` 和 :meth:`ExecutionLoader.get_filename` " +"具体实现的抽象基类。" + +#: ../../library/importlib.rst:679 +msgid "" +"The *fullname* argument is a fully resolved name of the module the loader is" +" to handle. The *path* argument is the path to the file for the module." +msgstr "参数 *fullname* 是加载器要处理的模块的完全解析的名字。参数 *path* 是模块文件的路径。" + +#: ../../library/importlib.rst:686 +msgid "The name of the module the loader can handle." +msgstr "加载器可以处理的模块的名字。" + +#: ../../library/importlib.rst:690 +msgid "Path to the file of the module." +msgstr "模块的文件路径" + +#: ../../library/importlib.rst:694 +msgid "Calls super's ``load_module()``." +msgstr "调用super的 ``load_module()``。" + +#: ../../library/importlib.rst:696 +msgid "Use :meth:`Loader.exec_module` instead." +msgstr "使用 :meth:`Loader.exec_module` 来代替。" + +#: ../../library/importlib.rst:701 ../../library/importlib.rst:1379 +msgid "Returns :attr:`path`." +msgstr "返回 :attr:`path`。" + +#: ../../library/importlib.rst:705 +msgid "Reads *path* as a binary file and returns the bytes from it." +msgstr "读取 *path* 作为二进制文件并且返回来自它的字节数据。" + +#: ../../library/importlib.rst:710 +msgid "" +"An abstract base class for implementing source (and optionally bytecode) " +"file loading. The class inherits from both :class:`ResourceLoader` and " +":class:`ExecutionLoader`, requiring the implementation of:" +msgstr "" +"一个用于实现源文件(和可选地字节码)加载的抽象基类。这个类继承自 :class:`ResourceLoader` 和 " +":class:`ExecutionLoader`,需要实现:" + +#: ../../library/importlib.rst:714 +msgid ":meth:`ResourceLoader.get_data`" +msgstr ":meth:`ResourceLoader.get_data`" + +#: ../../library/importlib.rst:717 +msgid ":meth:`ExecutionLoader.get_filename`" +msgstr ":meth:`ExecutionLoader.get_filename`" + +#: ../../library/importlib.rst:716 +msgid "" +"Should only return the path to the source file; sourceless loading is not " +"supported." +msgstr "应该是只返回源文件的路径;不支持无源加载。" + +#: ../../library/importlib.rst:719 +msgid "" +"The abstract methods defined by this class are to add optional bytecode file" +" support. Not implementing these optional methods (or causing them to raise " +":exc:`NotImplementedError`) causes the loader to only work with source code." +" Implementing the methods allows the loader to work with source *and* " +"bytecode files; it does not allow for *sourceless* loading where only " +"bytecode is provided. Bytecode files are an optimization to speed up " +"loading by removing the parsing step of Python's compiler, and so no " +"bytecode-specific API is exposed." +msgstr "" +"由这个类定义的抽象方法用来添加可选的字节码文件支持。不实现这些可选的方法(或导致它们引发 :exc:`NotImplementedError` " +"异常)导致这个加载器只能与源代码一起工作。 实现这些方法允许加载器能与源 *和* 字节码文件一起工作。不允许只提供字节码的 *无源式* " +"加载。字节码文件是通过移除 Python 编译器的解析步骤来加速加载的优化,并且因此没有开放出字节码专用的 API。" + +#: ../../library/importlib.rst:730 +msgid "" +"Optional abstract method which returns a :class:`dict` containing metadata " +"about the specified path. Supported dictionary keys are:" +msgstr "返回一个包含关于指定路径的元数据的 :class:`dict` 的可选的抽象方法。 支持的字典键有:" + +#: ../../library/importlib.rst:733 +msgid "" +"``'mtime'`` (mandatory): an integer or floating-point number representing " +"the modification time of the source code;" +msgstr "``'mtime'`` (必选项): 一个表示源码修改时间的整数或浮点数;" + +#: ../../library/importlib.rst:735 +msgid "``'size'`` (optional): the size in bytes of the source code." +msgstr "``'size'`` (可选项):源码的字节大小。" + +#: ../../library/importlib.rst:737 +msgid "" +"Any other keys in the dictionary are ignored, to allow for future " +"extensions. If the path cannot be handled, :exc:`OSError` is raised." +msgstr "字典中任何其他键会被忽略,以允许将来的扩展。 如果不能处理该路径,则会引发 :exc:`OSError`。" + +#: ../../library/importlib.rst:742 ../../library/importlib.rst:755 +msgid "Raise :exc:`OSError` instead of :exc:`NotImplementedError`." +msgstr "引发 :exc:`OSError` 而不是 :exc:`NotImplemented`。" + +#: ../../library/importlib.rst:747 +msgid "" +"Optional abstract method which returns the modification time for the " +"specified path." +msgstr "返回指定文件路径修改时间的可选的抽象方法。" + +#: ../../library/importlib.rst:750 +msgid "" +"This method is deprecated in favour of :meth:`path_stats`. You don't have " +"to implement it, but it is still available for compatibility purposes. Raise" +" :exc:`OSError` if the path cannot be handled." +msgstr "" +"在有了 :meth:`path_stats` 的情况下,这个方法被弃用了。 没必要去实现它了,但是为了兼容性,它依然处于可用状态。 " +"如果文件路径不能被处理,则引发 :exc:`OSError` 异常。" + +#: ../../library/importlib.rst:760 +msgid "" +"Optional abstract method which writes the specified bytes to a file path. " +"Any intermediate directories which do not exist are to be created " +"automatically." +msgstr "往一个文件路径写入指定字节的的可选的抽象方法。任何中间不存在的目录不会被自动创建。" + +#: ../../library/importlib.rst:764 +msgid "" +"When writing to the path fails because the path is read-only " +"(:attr:`errno.EACCES`/:exc:`PermissionError`), do not propagate the " +"exception." +msgstr "" +"由于路径是只读的,当写入的路径产生错误时(:attr:`errno.EACCES`/:exc:`PermissionError`),不会传播异常。" + +#: ../../library/importlib.rst:768 +msgid "No longer raises :exc:`NotImplementedError` when called." +msgstr "当被调用时,不再引起 :exc:`NotImplementedError` 异常。" + +#: ../../library/importlib.rst:773 +msgid "Concrete implementation of :meth:`InspectLoader.get_code`." +msgstr ":meth:`InspectLoader.get_code` 的具体实现。" + +#: ../../library/importlib.rst:777 +msgid "Concrete implementation of :meth:`Loader.exec_module`." +msgstr ":meth:`Loader.exec_module` 的具体实现。" + +#: ../../library/importlib.rst:783 +msgid "Concrete implementation of :meth:`Loader.load_module`." +msgstr " :meth:`Loader.load_module` 的具体实现。" + +#: ../../library/importlib.rst:785 +msgid "Use :meth:`exec_module` instead." +msgstr "使用 :meth:`exec_module` 来代替。" + +#: ../../library/importlib.rst:790 +msgid "Concrete implementation of :meth:`InspectLoader.get_source`." +msgstr ":meth:`InspectLoader.get_source` 的具体实现。" + +#: ../../library/importlib.rst:794 +msgid "" +"Concrete implementation of :meth:`InspectLoader.is_package`. A module is " +"determined to be a package if its file path (as provided by " +":meth:`ExecutionLoader.get_filename`) is a file named ``__init__`` when the " +"file extension is removed **and** the module name itself does not end in " +"``__init__``." +msgstr "" +":meth:`InspectLoader.is_package` 的具体实现。一个模块被确定为一个包的条件是:它的文件路径(由 " +":meth:`ExecutionLoader.get_filename` 提供)当文件扩展名被移除时是一个命名为 ``__init__`` " +"的文件,**并且** 这个模块名字本身不是以 ``__init__`` 结束。" + +#: ../../library/importlib.rst:803 +msgid "" +"An object with a subset of pathlib.Path methods suitable for traversing " +"directories and opening files." +msgstr "拥有部分 pathlib.Path 方法的对象,适用于遍历目录和打开文件。" + +#: ../../library/importlib.rst:810 +msgid "The base name of this object without any parent references." +msgstr "此对象不带任何父引用的基准名。" + +#: ../../library/importlib.rst:814 +msgid "Yield Traversable objects in self." +msgstr "产出自身内部的可遍历对象。" + +#: ../../library/importlib.rst:818 +msgid "Return True if self is a directory." +msgstr "如果自身是一个目录则返回 True。" + +#: ../../library/importlib.rst:822 +msgid "Return True if self is a file." +msgstr "如果自身是一个文件则返回 True。" + +#: ../../library/importlib.rst:826 ../../library/importlib.rst:830 +msgid "Return Traversable child in self." +msgstr "返回自身中可遍历的子对象。" + +#: ../../library/importlib.rst:834 +msgid "" +"*mode* may be 'r' or 'rb' to open as text or binary. Return a handle " +"suitable for reading (same as :attr:`pathlib.Path.open`)." +msgstr "" +"*mode* 可以为 'r' 或 'rb' 即以文本或二进制模式打开。 返回一个适用于读取的句柄(与 :attr:`pathlib.Path.open`" +" 样同)。" + +#: ../../library/importlib.rst:837 +msgid "" +"When opening as text, accepts encoding parameters such as those accepted by " +":attr:`io.TextIOWrapper`." +msgstr "当以文本模式打开时,接受与 :attr:`io.TextIOWrapper` 所接受的相同的编码格式形参。" + +#: ../../library/importlib.rst:842 +msgid "Read contents of self as bytes." +msgstr "以字节串形式读取自身的内容。" + +#: ../../library/importlib.rst:846 +msgid "Read contents of self as text." +msgstr "以文本形式读取自身的内容。" + +#: ../../library/importlib.rst:848 ../../library/importlib.rst:861 +msgid "" +"Note: In Python 3.11 and later, this class is found in " +"``importlib.resources.abc``." +msgstr "" + +#: ../../library/importlib.rst:853 +msgid "" +"An abstract base class for resource readers capable of serving the ``files``" +" interface. Subclasses ResourceReader and provides concrete implementations " +"of the ResourceReader's abstract methods. Therefore, any loader supplying " +"TraversableReader also supplies ResourceReader." +msgstr "" +"用作资源读取器的抽象基类,能够为 ``files`` 接口提供服务。其为ResourceReader 的子类,并具体实现了 ResourceReader" +" 的抽象方法。因此,任何提供 TraversableReader 的加载器也提供 ResourceReader。" + +#: ../../library/importlib.rst:865 +msgid ":mod:`importlib.resources` -- Resources" +msgstr ":mod:`importlib.resources` -- 资源" + +#: ../../library/importlib.rst:870 +msgid "**Source code:** :source:`Lib/importlib/resources.py`" +msgstr "**源码:** :source:`Lib/importlib/resources.py`" + +#: ../../library/importlib.rst:876 +msgid "" +"This module leverages Python's import system to provide access to " +"*resources* within *packages*. If you can import a package, you can access " +"resources within that package. Resources can be opened or read, in either " +"binary or text mode." +msgstr "" +"这个模块使得Python的导入系统提供了访问 *包* 内的 *资源* " +"的功能。如果能够导入一个包,那么就能够访问那个包里面的资源。资源可以以二进制或文本模式方式被打开或读取。" + +#: ../../library/importlib.rst:881 +msgid "" +"Resources are roughly akin to files inside directories, though it's " +"important to keep in mind that this is just a metaphor. Resources and " +"packages **do not** have to exist as physical files and directories on the " +"file system." +msgstr "资源非常类似于目录内部的文件,要牢记的是这仅仅是一个比喻。资源和包不是与文件系统上的物理文件和目录一样存在着。" + +#: ../../library/importlib.rst:887 +msgid "" +"This module provides functionality similar to `pkg_resources " +"`_ `Basic " +"Resource Access " +"`_ without the performance overhead of that package. This " +"makes reading resources included in packages easier, with more stable and " +"consistent semantics." +msgstr "" +"本模块提供了类似于 `pkg_resources " +"`_ `Basic " +"Resource Access " +"`_ 的功能,但没有该包的性能开销。这样读取包中的资源就更为容易,语义也更稳定一致。" + +#: ../../library/importlib.rst:895 +msgid "" +"The standalone backport of this module provides more information on `using " +"importlib.resources `_ and `migrating from " +"pkg_resources to importlib.resources `_." +msgstr "" +"该模块有独立的向下移植版本, `using importlib.resources `_ 和 `migrating from " +"pkg_resources to importlib.resources `_ 提供了更多信息。" + +#: ../../library/importlib.rst:905 +msgid "The following types are defined." +msgstr "定义了以下类型。" + +#: ../../library/importlib.rst:909 +msgid "" +"The ``Package`` type is defined as ``Union[str, ModuleType]``. This means " +"that where the function describes accepting a ``Package``, you can pass in " +"either a string or a module. Module objects must have a resolvable " +"``__spec__.submodule_search_locations`` that is not ``None``." +msgstr "" +"``Package`` 类型定义为 ``Union[str, ModuleType]`` 。这意味着只要函数说明接受 ``Package`` " +"的地方,就可以传入字符串或模块。模块对象必须拥有一个可解析的 ``__spec__.submodule_search_locations``,不能是 " +"``None``。" + +#: ../../library/importlib.rst:916 +msgid "" +"This type describes the resource names passed into the various functions in " +"this package. This is defined as ``Union[str, os.PathLike]``." +msgstr "此类型描述了传入本包各函数的资源名称。定义为 ``Union[str, os.PathLike]``。" + +#: ../../library/importlib.rst:920 +msgid "The following functions are available." +msgstr "有以下函数可用:" + +#: ../../library/importlib.rst:925 +msgid "" +"Returns an :class:`importlib.abc.Traversable` object representing the " +"resource container for the package (think directory) and its resources " +"(think files). A Traversable may contain other containers (think " +"subdirectories)." +msgstr "" + +#: ../../library/importlib.rst:930 ../../library/importlib.rst:1031 +msgid "" +"*package* is either a name or a module object which conforms to the " +"``Package`` requirements." +msgstr "*package* 是包名或符合 ``Package`` 要求的模块对象。" + +#: ../../library/importlib.rst:937 +msgid "" +"Given a :class:`importlib.abc.Traversable` object representing a file, " +"typically from :func:`importlib.resources.files`, return a context manager " +"for use in a :keyword:`with` statement. The context manager provides a " +":class:`pathlib.Path` object." +msgstr "" + +#: ../../library/importlib.rst:942 +msgid "" +"Exiting the context manager cleans up any temporary file created when the " +"resource was extracted from e.g. a zip file." +msgstr "退出上下文管理程序时,可以清理所有临时文件,比如从压缩文件中提取资源时创建的那些文件。" + +#: ../../library/importlib.rst:945 +msgid "" +"Use ``as_file`` when the Traversable methods (``read_text``, etc) are " +"insufficient and an actual file on the file system is required." +msgstr "如果 Traversable 方法(``read_text`` 等)不够用,需要文件系统中的实际文件时,请使用 ``as_file``。" + +#: ../../library/importlib.rst:953 +msgid "Open for binary reading the *resource* within *package*." +msgstr "以二进制读方式打开 *package* 内的 *resource*。" + +#: ../../library/importlib.rst:955 +msgid "" +"*package* is either a name or a module object which conforms to the " +"``Package`` requirements. *resource* is the name of the resource to open " +"within *package*; it may not contain path separators and it may not have " +"sub-resources (i.e. it cannot be a directory). This function returns a " +"``typing.BinaryIO`` instance, a binary I/O stream open for reading." +msgstr "" +"*package* 是包名或符合 ``Package`` 要求的模块对象。 *resource* 是要在 *package* " +"内打开的资源名;不能包含路径分隔符,也不能有子资源(即不能为目录)。本函数将返回一个 ``typing.BinaryIO`` " +"实例以供读取,即一个已打开的二进制 I/O 流。" + +#: ../../library/importlib.rst:964 +msgid "" +"Open for text reading the *resource* within *package*. By default, the " +"resource is opened for reading as UTF-8." +msgstr "以文本读方式打开 *package* 内的 *resource*。默认情况下,资源将以 UTF-8 格式打开以供读取。" + +#: ../../library/importlib.rst:967 +msgid "" +"*package* is either a name or a module object which conforms to the " +"``Package`` requirements. *resource* is the name of the resource to open " +"within *package*; it may not contain path separators and it may not have " +"sub-resources (i.e. it cannot be a directory). *encoding* and *errors* have" +" the same meaning as with built-in :func:`open`." +msgstr "" +"*package* 是包名或符合 ``Package`` 要求的模块对象。 *resource* 是要在 *package* " +"内打开的资源名;不能包含路径分隔符,也不能有子资源(即不能是目录)。*encoding* 和 *errors* 的含义与内置 :func:`open` " +"的一样。" + +#: ../../library/importlib.rst:973 +msgid "" +"This function returns a ``typing.TextIO`` instance, a text I/O stream open " +"for reading." +msgstr "本函数返回一个 ``typing.TextIO`` 实例,即一个打开的文本 I/O 流对象以供读取。" + +#: ../../library/importlib.rst:979 +msgid "" +"Read and return the contents of the *resource* within *package* as " +"``bytes``." +msgstr "读取并返回 *package* 中的 *resource* 内容,格式为 ``bytes``。" + +#: ../../library/importlib.rst:982 +msgid "" +"*package* is either a name or a module object which conforms to the " +"``Package`` requirements. *resource* is the name of the resource to open " +"within *package*; it may not contain path separators and it may not have " +"sub-resources (i.e. it cannot be a directory). This function returns the " +"contents of the resource as :class:`bytes`." +msgstr "" +"*package* 是包名或符合 ``Package`` 要求的模块对象。 *resource* 是要在 *package* " +"内打开的资源名;不能包含路径分隔符,也不能有子资源(即不能是目录)。资源内容以 :class:`bytes` 的形式返回。" + +#: ../../library/importlib.rst:991 +msgid "" +"Read and return the contents of *resource* within *package* as a ``str``. By" +" default, the contents are read as strict UTF-8." +msgstr "" +"读取并返回 *package* 中 *resource* 的内容,格式为 ``str``。默认情况下,资源内容将以严格的 UTF-8 格式读取。" + +#: ../../library/importlib.rst:994 +msgid "" +"*package* is either a name or a module object which conforms to the " +"``Package`` requirements. *resource* is the name of the resource to open " +"within *package*; it may not contain path separators and it may not have " +"sub-resources (i.e. it cannot be a directory). *encoding* and *errors* have" +" the same meaning as with built-in :func:`open`. This function returns the " +"contents of the resource as :class:`str`." +msgstr "" +"*package* 是包名或符合 ``Package`` 要求的模块对象。 *resource* 是要在 *package* " +"内打开的资源名;不能包含路径分隔符,也不能有子资源(即不能是目录)。*encoding* 和 *errors* 的含义与内置 :func:`open` " +"的一样。资源内容将以 :class:`str` 的形式返回。" + +#: ../../library/importlib.rst:1004 +msgid "" +"Return the path to the *resource* as an actual file system path. This " +"function returns a context manager for use in a :keyword:`with` statement. " +"The context manager provides a :class:`pathlib.Path` object." +msgstr "" +"返回 *resource* 实际的文件系统路径。本函数返回一个上下文管理器,以供 :keyword:`with` 语句中使用。上下文管理器提供一个 " +":class:`pathlib.Path` 对象。" + +#: ../../library/importlib.rst:1008 +msgid "" +"Exiting the context manager cleans up any temporary file created when the " +"resource needs to be extracted from e.g. a zip file." +msgstr "退出上下文管理程序时,可以清理所有临时文件,比如从压缩文件中提取资源时创建的那些文件。" + +#: ../../library/importlib.rst:1011 +msgid "" +"*package* is either a name or a module object which conforms to the " +"``Package`` requirements. *resource* is the name of the resource to open " +"within *package*; it may not contain path separators and it may not have " +"sub-resources (i.e. it cannot be a directory)." +msgstr "" +"*package* 是包名或符合 ``Package`` 要求的模块对象。 *resource* 是要在 *package* " +"内打开的资源名;不能包含路径分隔符,也不能有子资源(即不能是目录)。" + +#: ../../library/importlib.rst:1019 +msgid "" +"Return ``True`` if there is a resource named *name* in the package, " +"otherwise ``False``. Remember that directories are *not* resources! " +"*package* is either a name or a module object which conforms to the " +"``Package`` requirements." +msgstr "" +"如果包中存在名为 *name* 的资源,则返回 ``True``,否则返回 ``False``。 请记住,目录 *不是* 资源! *package* " +"为包名或符合 ``Package`` 要求的模块对象。" + +#: ../../library/importlib.rst:1027 +msgid "" +"Return an iterable over the named items within the package. The iterable " +"returns :class:`str` resources (e.g. files) and non-resources (e.g. " +"directories). The iterable does not recurse into subdirectories." +msgstr "" +"返回一个用于遍历包内各命名项的可迭代对象。该可迭代对象将返回 :class:`str` 资源(如文件)及非资源(如目录)。该迭代器不会递归进入子目录。" + +#: ../../library/importlib.rst:1036 +msgid ":mod:`importlib.machinery` -- Importers and path hooks" +msgstr ":mod:`importlib.machinery` —— 导入器和路径钩子函数。" + +#: ../../library/importlib.rst:1041 +msgid "**Source code:** :source:`Lib/importlib/machinery.py`" +msgstr "**源代码:** :source:`Lib/importlib/machinery.py`" + +#: ../../library/importlib.rst:1045 +msgid "" +"This module contains the various objects that help :keyword:`import` find " +"and load modules." +msgstr "本模块包含多个对象,以帮助 :keyword:`import` 查找并加载模块。" + +#: ../../library/importlib.rst:1050 +msgid "" +"A list of strings representing the recognized file suffixes for source " +"modules." +msgstr "一个字符串列表,表示源模块的可识别的文件后缀。" + +#: ../../library/importlib.rst:1057 +msgid "" +"A list of strings representing the file suffixes for non-optimized bytecode " +"modules." +msgstr "一个字符串列表,表示未经优化字节码模块的文件后缀。" + +#: ../../library/importlib.rst:1062 ../../library/importlib.rst:1072 +msgid "Use :attr:`BYTECODE_SUFFIXES` instead." +msgstr "改用 :attr:`BYTECODE_SUFFIXES` 。" + +#: ../../library/importlib.rst:1067 +msgid "" +"A list of strings representing the file suffixes for optimized bytecode " +"modules." +msgstr "一个字符串列表,表示已优化字节码模块的文件后缀。" + +#: ../../library/importlib.rst:1077 +msgid "" +"A list of strings representing the recognized file suffixes for bytecode " +"modules (including the leading dot)." +msgstr "一个字符串列表,表示字节码模块的可识别的文件后缀(包含前导的句点符号)。" + +#: ../../library/importlib.rst:1082 +msgid "The value is no longer dependent on ``__debug__``." +msgstr "该值不再依赖于 ``__debug__`` 。" + +#: ../../library/importlib.rst:1087 +msgid "" +"A list of strings representing the recognized file suffixes for extension " +"modules." +msgstr "一个字符串列表,表示扩展模块的可识别的文件后缀。" + +#: ../../library/importlib.rst:1094 +msgid "" +"Returns a combined list of strings representing all file suffixes for " +"modules recognized by the standard import machinery. This is a helper for " +"code which simply needs to know if a filesystem path potentially refers to a" +" module without needing any details on the kind of module (for example, " +":func:`inspect.getmodulename`)." +msgstr "" +"返回字符串的组合列表,代表标准导入机制可识别模块的所有文件后缀。这是个助手函数,只需知道某个文件系统路径是否会指向模块,而不需要任何关于模块种类的细节(例如" +" :func:`inspect.getmodulename`)。" + +#: ../../library/importlib.rst:1105 +msgid "" +"An :term:`importer` for built-in modules. All known built-in modules are " +"listed in :data:`sys.builtin_module_names`. This class implements the " +":class:`importlib.abc.MetaPathFinder` and " +":class:`importlib.abc.InspectLoader` ABCs." +msgstr "" +"用于导入内置模块的 :term:`importer`。 所有已知的内置模块都已列入 :data:`sys.builtin_module_names`。 " +"此类实现了 :class:`importlib.abc.MetaPathFinder` 和 " +":class:`importlib.abc.InspectLoader` 抽象基类。" + +#: ../../library/importlib.rst:1110 ../../library/importlib.rst:1124 +#: ../../library/importlib.rst:1137 ../../library/importlib.rst:1152 +msgid "" +"Only class methods are defined by this class to alleviate the need for " +"instantiation." +msgstr "此类只定义类的方法,以减轻实例化的开销。" + +#: ../../library/importlib.rst:1113 +msgid "" +"As part of :pep:`489`, the builtin importer now implements " +":meth:`Loader.create_module` and :meth:`Loader.exec_module`" +msgstr "" +"作为 :pep:`489` 的一部分,现在内置模块导入器实现了 :meth:`Loader.create_module` 和 " +":meth:`Loader.exec_module`。" + +#: ../../library/importlib.rst:1120 +msgid "" +"An :term:`importer` for frozen modules. This class implements the " +":class:`importlib.abc.MetaPathFinder` and " +":class:`importlib.abc.InspectLoader` ABCs." +msgstr "" +"用于已冻结模块的 :term:`importer`。 此类实现了 :class:`importlib.abc.MetaPathFinder` 和 " +":class:`importlib.abc.InspectLoader` 抽象基类。" + +#: ../../library/importlib.rst:1127 +msgid "" +"Gained :meth:`~Loader.create_module` and :meth:`~Loader.exec_module` " +"methods." +msgstr "有了 :meth:`~Loader.create_module` 和 :meth:`~Loader.exec_module` 方法。" + +#: ../../library/importlib.rst:1134 +msgid "" +":term:`Finder ` for modules declared in the Windows registry. This " +"class implements the :class:`importlib.abc.MetaPathFinder` ABC." +msgstr "" +":term:`Finder ` 用于查找在 Windows 注册表中声明的模块。该类实现了基础的 " +":class:`importlib.abc.MetaPathFinder` 。" + +#: ../../library/importlib.rst:1142 +msgid "" +"Use :mod:`site` configuration instead. Future versions of Python may not " +"enable this finder by default." +msgstr "改用 :mod:`site` 配置。未来版本的 Python 可能不会默认启用该查找器。" + +#: ../../library/importlib.rst:1149 +msgid "" +"A :term:`Finder ` for :data:`sys.path` and package ``__path__`` " +"attributes. This class implements the :class:`importlib.abc.MetaPathFinder` " +"ABC." +msgstr "" +"用于 :data:`sys.path` 和包的 ``__path__`` 属性的 :term:`Finder ` 。该类实现了基础的 " +":class:`importlib.abc.MetaPathFinder`。" + +#: ../../library/importlib.rst:1157 +msgid "" +"Class method that attempts to find a :term:`spec ` for the " +"module specified by *fullname* on :data:`sys.path` or, if defined, on " +"*path*. For each path entry that is searched, " +":data:`sys.path_importer_cache` is checked. If a non-false object is found " +"then it is used as the :term:`path entry finder` to look for the module " +"being searched for. If no entry is found in :data:`sys.path_importer_cache`," +" then :data:`sys.path_hooks` is searched for a finder for the path entry " +"and, if found, is stored in :data:`sys.path_importer_cache` along with being" +" queried about the module. If no finder is ever found then ``None`` is both " +"stored in the cache and returned." +msgstr "" +"类方法试图在 :data:`sys.path` 或 *path* 上为 *fullname* 指定的模块查找 :term:`spec `。对于每个路径条目,都会查看 :data:`sys.path_importer_cache` 。如果找到非 False 的对象,则将其用作" +" :term:`path entry finder` 来查找要搜索的模块。如果在 :data:`sys.path_importer_cache` " +"中没有找到条目,那会在 :data:`sys.path_hooks` 检索该路径条目的查找器,找到了则和查到的模块信息一起存入 " +":data:`sys.path_importer_cache` 。如果查找器没有找到,则缓存中的查找器和模块信息都存为 ``None`` ,然后返回。" + +#: ../../library/importlib.rst:1171 +msgid "" +"If the current working directory -- represented by an empty string -- is no " +"longer valid then ``None`` is returned but no value is cached in " +":data:`sys.path_importer_cache`." +msgstr "" +"如果当前工作目录不再有效(用空字符串表示),则返回 ``None``,但在 :data:`sys.path_importer_cache` " +"中不会有缓存值。" + +#: ../../library/importlib.rst:1178 +msgid "A legacy wrapper around :meth:`find_spec`." +msgstr "一个过时的 :meth:`find_spec` 封装对象。" + +#: ../../library/importlib.rst:1185 +msgid "" +"Calls :meth:`importlib.abc.PathEntryFinder.invalidate_caches` on all finders" +" stored in :data:`sys.path_importer_cache` that define the method. Otherwise" +" entries in :data:`sys.path_importer_cache` set to ``None`` are deleted." +msgstr "" +"为所有存于 :data:`sys.path_importer_cache` 中的查找器,调用其 " +":meth:`importlib.abc.PathEntryFinder.invalidate_caches` 方法。 " +":data:`sys.path_importer_cache` 中为 ``None`` 的条目将被删除。" + +#: ../../library/importlib.rst:1190 +msgid "Entries of ``None`` in :data:`sys.path_importer_cache` are deleted." +msgstr ":data:`sys.path_importer_cache` 中为 ``None`` 的条目将被删除。" + +#: ../../library/importlib.rst:1193 +msgid "" +"Calls objects in :data:`sys.path_hooks` with the current working directory " +"for ``''`` (i.e. the empty string)." +msgstr "调用 :data:`sys.path_hooks` 中的对象,当前工作目录为 ``''`` (即空字符串)。" + +#: ../../library/importlib.rst:1200 +msgid "" +"A concrete implementation of :class:`importlib.abc.PathEntryFinder` which " +"caches results from the file system." +msgstr ":class:`importlib.abc.PathEntryFinder` 的一个具体实现,它会缓存来自文件系统的结果。" + +#: ../../library/importlib.rst:1203 +msgid "" +"The *path* argument is the directory for which the finder is in charge of " +"searching." +msgstr "参数 *path* 是查找器负责搜索的目录。" + +#: ../../library/importlib.rst:1206 +msgid "" +"The *loader_details* argument is a variable number of 2-item tuples each " +"containing a loader and a sequence of file suffixes the loader recognizes. " +"The loaders are expected to be callables which accept two arguments of the " +"module's name and the path to the file found." +msgstr "" +"*loader_details* " +"参数是数量不定的二元组,每个元组包含加载器及其可识别的文件后缀列表。加载器应为可调用对象,可接受两个参数,即模块的名称和已找到文件的路径。" + +#: ../../library/importlib.rst:1211 +msgid "" +"The finder will cache the directory contents as necessary, making stat calls" +" for each module search to verify the cache is not outdated. Because cache " +"staleness relies upon the granularity of the operating system's state " +"information of the file system, there is a potential race condition of " +"searching for a module, creating a new file, and then searching for the " +"module the new file represents. If the operations happen fast enough to fit " +"within the granularity of stat calls, then the module search will fail. To " +"prevent this from happening, when you create a module dynamically, make sure" +" to call :func:`importlib.invalidate_caches`." +msgstr "" +"查找器将按需对目录内容进行缓存,通过对每个模块的检索进行状态统计,验证缓存是否过期。因为缓存的滞后性依赖于操作系统文件系统状态信息的粒度,所以搜索模块、新建文件、然后搜索新文件代表的模块,这会存在竞争状态。如果这些操作的频率太快,甚至小于状态统计的粒度,那么模块搜索将会失败。为了防止这种情况发生,在动态创建模块时,请确保调用" +" :func:`importlib.invalidate_caches`。" + +#: ../../library/importlib.rst:1225 +msgid "The path the finder will search in." +msgstr "查找器将要搜索的路径。" + +#: ../../library/importlib.rst:1229 +msgid "Attempt to find the spec to handle *fullname* within :attr:`path`." +msgstr "尝试在 :attr:`path` 中找到处理 *fullname* 的规格。" + +#: ../../library/importlib.rst:1235 +msgid "Attempt to find the loader to handle *fullname* within :attr:`path`." +msgstr "试图在 :attr:`path` 内找到处理 *fullname* 的加载器。" + +#: ../../library/importlib.rst:1239 +msgid "Clear out the internal cache." +msgstr "清理内部缓存。" + +#: ../../library/importlib.rst:1243 +msgid "" +"A class method which returns a closure for use on :attr:`sys.path_hooks`. An" +" instance of :class:`FileFinder` is returned by the closure using the path " +"argument given to the closure directly and *loader_details* indirectly." +msgstr "" +"一个类方法,返回供 :attr:`sys.path_hooks` 使用的闭包。根据直接给出的路径参数和间接给出的 " +"*loader_details*,闭包会返回一个 :class:`FileFinder` 的实例。" + +#: ../../library/importlib.rst:1248 +msgid "" +"If the argument to the closure is not an existing directory, " +":exc:`ImportError` is raised." +msgstr "如果给闭包的参数不是已存在的目录,将会触发 :exc:`ImportError`。" + +#: ../../library/importlib.rst:1254 +msgid "" +"A concrete implementation of :class:`importlib.abc.SourceLoader` by " +"subclassing :class:`importlib.abc.FileLoader` and providing some concrete " +"implementations of other methods." +msgstr "" +":class:`importlib.abc.SourceLoader` 的一个具体实现,该实现子类化了 " +":class:`importlib.abc.FileLoader` 并提供了其他一些方法的具体实现。" + +#: ../../library/importlib.rst:1262 +msgid "The name of the module that this loader will handle." +msgstr "该加载器将要处理的模块名称。" + +#: ../../library/importlib.rst:1266 +msgid "The path to the source file." +msgstr "源文件的路径" + +#: ../../library/importlib.rst:1270 +msgid "Return ``True`` if :attr:`path` appears to be for a package." +msgstr "如果 :attr:`path` 看似包的路径,则返回 ``True``。" + +#: ../../library/importlib.rst:1274 +msgid "" +"Concrete implementation of :meth:`importlib.abc.SourceLoader.path_stats`." +msgstr ":meth:`importlib.abc.SourceLoader.path_stats` 的具体代码实现。" + +#: ../../library/importlib.rst:1278 +msgid "" +"Concrete implementation of :meth:`importlib.abc.SourceLoader.set_data`." +msgstr ":meth:`importlib.abc.SourceLoader.set_data` 的具体代码实现。" + +#: ../../library/importlib.rst:1282 ../../library/importlib.rst:1325 +msgid "" +"Concrete implementation of :meth:`importlib.abc.Loader.load_module` where " +"specifying the name of the module to load is optional." +msgstr ":meth:`importlib.abc.Loader.load_module` 的具体代码实现,这里要加载的模块名是可选的。" + +#: ../../library/importlib.rst:1287 ../../library/importlib.rst:1330 +msgid "Use :meth:`importlib.abc.Loader.exec_module` instead." +msgstr "改用 :meth:`importlib.abc.Loader.exec_module` 。" + +#: ../../library/importlib.rst:1292 +msgid "" +"A concrete implementation of :class:`importlib.abc.FileLoader` which can " +"import bytecode files (i.e. no source code files exist)." +msgstr ":class:`importlib.abc.FileLoader` 的具体代码实现,可导入字节码文件(也即源代码文件不存在)。" + +#: ../../library/importlib.rst:1295 +msgid "" +"Please note that direct use of bytecode files (and thus not source code " +"files) inhibits your modules from being usable by all Python implementations" +" or new versions of Python which change the bytecode format." +msgstr "请注意,直接用字节码文件(而不是源代码文件),会让模块无法应用于所有的 Python 版本或字节码格式有所改动的新版本 Python。" + +#: ../../library/importlib.rst:1304 +msgid "The name of the module the loader will handle." +msgstr "加载器将要处理的模块名。" + +#: ../../library/importlib.rst:1308 +msgid "The path to the bytecode file." +msgstr "二进制码文件的路径。" + +#: ../../library/importlib.rst:1312 +msgid "Determines if the module is a package based on :attr:`path`." +msgstr "根据 :attr:`path` 确定该模块是否为包。" + +#: ../../library/importlib.rst:1316 +msgid "Returns the code object for :attr:`name` created from :attr:`path`." +msgstr "返回由 :attr:`path` 创建的 :attr:`name` 的代码对象。" + +#: ../../library/importlib.rst:1320 +msgid "" +"Returns ``None`` as bytecode files have no source when this loader is used." +msgstr "因为用此加载器时字节码文件没有源码文件,所以返回 ``None``。" + +#: ../../library/importlib.rst:1335 +msgid "" +"A concrete implementation of :class:`importlib.abc.ExecutionLoader` for " +"extension modules." +msgstr ":class:`importlib.abc.ExecutionLoader` 的具体代码实现,用于扩展模块。" + +#: ../../library/importlib.rst:1338 +msgid "" +"The *fullname* argument specifies the name of the module the loader is to " +"support. The *path* argument is the path to the extension module's file." +msgstr "参数 *fullname* 指定了加载器要支持的模块名。参数 *path* 是指向扩展模块文件的路径。" + +#: ../../library/importlib.rst:1345 +msgid "Name of the module the loader supports." +msgstr "装载器支持的模块名。" + +#: ../../library/importlib.rst:1349 +msgid "Path to the extension module." +msgstr "扩展模块的路径。" + +#: ../../library/importlib.rst:1353 +msgid "" +"Creates the module object from the given specification in accordance with " +":pep:`489`." +msgstr "根据 :pep:`489` ,由给定规范创建模块对象。" + +#: ../../library/importlib.rst:1360 +msgid "Initializes the given module object in accordance with :pep:`489`." +msgstr "根据 :pep:`489`,初始化给定的模块对象。" + +#: ../../library/importlib.rst:1366 +msgid "" +"Returns ``True`` if the file path points to a package's ``__init__`` module " +"based on :attr:`EXTENSION_SUFFIXES`." +msgstr "" +"根据 :attr:`EXTENSION_SUFFIXES` ,如果文件路径指向某个包的 ``__init__`` 模块,则返回 ``True``。" + +#: ../../library/importlib.rst:1371 +msgid "Returns ``None`` as extension modules lack a code object." +msgstr "返回 ``None``,因为扩展模块缺少代码对象。" + +#: ../../library/importlib.rst:1375 +msgid "Returns ``None`` as extension modules do not have source code." +msgstr "返回 ``None``,因为扩展模块没有源代码。" + +#: ../../library/importlib.rst:1386 +msgid "" +"A specification for a module's import-system-related state. This is " +"typically exposed as the module's ``__spec__`` attribute. In the " +"descriptions below, the names in parentheses give the corresponding " +"attribute available directly on the module object. E.g. " +"``module.__spec__.origin == module.__file__``. Note however that while the " +"*values* are usually equivalent, they can differ since there is no " +"synchronization between the two objects. Thus it is possible to update the " +"module's ``__path__`` at runtime, and this will not be automatically " +"reflected in ``__spec__.submodule_search_locations``." +msgstr "" +"关于模块导入系统相关状态的规范。通常这是作为模块的 ``__spec__`` 属性暴露出来。 " +"在以下描述中,括号里的名字给出了模块对象中直接可用的属性。比如 ``module.__spec__.origin == " +"module.__file__``。 但是请注意,虽然 *值* 通常是相等的,但它们可以不同,因为两个对象之间没有进行同步。因此 " +"``__path__`` 有可能在运行时做过更新,而这不会自动反映在 ``__spec__.submodule_search_locations`` " +"中。" + +#: ../../library/importlib.rst:1400 +msgid "(``__name__``)" +msgstr "(``__name__``)" + +#: ../../library/importlib.rst:1402 +msgid "A string for the fully-qualified name of the module." +msgstr "一个字符串,表示模块的完全限定名称。" + +#: ../../library/importlib.rst:1406 +msgid "(``__loader__``)" +msgstr "(``__loader__``)" + +#: ../../library/importlib.rst:1408 +msgid "" +"The :term:`Loader ` that should be used when loading the module. " +":term:`Finders ` should always set this." +msgstr "" +"模块加载时应采用的 :term:`Loader ` 。 :term:`Finders ` 应确保设置本属性。" + +#: ../../library/importlib.rst:1413 +msgid "(``__file__``)" +msgstr "(``__file__``)" + +#: ../../library/importlib.rst:1415 +msgid "" +"Name of the place from which the module is loaded, e.g. \"builtin\" for " +"built-in modules and the filename for modules loaded from source. Normally " +"\"origin\" should be set, but it may be ``None`` (the default) which " +"indicates it is unspecified (e.g. for namespace packages)." +msgstr "" +"装载模块所在位置的名称,如内置模块为 “buildin”,从源代码加载的模块为文件名。通常应设置 “origin” ,但它可能为 ``None`` " +"(默认值),表示未指定 (如命名空间包)。" + +#: ../../library/importlib.rst:1422 +msgid "(``__path__``)" +msgstr "(``__path__``)" + +#: ../../library/importlib.rst:1424 +msgid "" +"List of strings for where to find submodules, if a package (``None`` " +"otherwise)." +msgstr "如果是包(否则为 ),子模块所在位置的字符串列表(否则为 ``None``)。" + +#: ../../library/importlib.rst:1429 +msgid "" +"Container of extra module-specific data for use during loading (or " +"``None``)." +msgstr "依模块不同的额外数据的容器,以供加载过程中使用(或 ``None``)。" + +#: ../../library/importlib.rst:1434 +msgid "(``__cached__``)" +msgstr "(``__cached__``)" + +#: ../../library/importlib.rst:1436 +msgid "String for where the compiled module should be stored (or ``None``)." +msgstr "字符串,表示经过编译的模块所在位置(或 ``None``)。" + +#: ../../library/importlib.rst:1440 +msgid "(``__package__``)" +msgstr "(``__package__``)" + +#: ../../library/importlib.rst:1442 +msgid "" +"(Read-only) The fully-qualified name of the package under which the module " +"should be loaded as a submodule (or the empty string for top-level modules)." +" For packages, it is the same as :attr:`__name__`." +msgstr "" +"包的完全限定名称(只读),模块应作为其子模块进行加载(对于顶层模块则为空字符串)。对于包而言,其值与 :attr:`__name__` 相同。" + +#: ../../library/importlib.rst:1448 +msgid "" +"Boolean indicating whether or not the module's \"origin\" attribute refers " +"to a loadable location." +msgstr "布尔值,表示模块的“origin”属性是否指向可加载的位置。" + +#: ../../library/importlib.rst:1452 +msgid ":mod:`importlib.util` -- Utility code for importers" +msgstr ":mod:`importlib.util` —— 导入器的工具程序代码" + +#: ../../library/importlib.rst:1458 +msgid "**Source code:** :source:`Lib/importlib/util.py`" +msgstr "**源代码:** :source:`Lib/importlib/util.py`" + +#: ../../library/importlib.rst:1462 +msgid "" +"This module contains the various objects that help in the construction of an" +" :term:`importer`." +msgstr "本模块包含了帮助构建 :term:`importer` 的多个对象。" + +#: ../../library/importlib.rst:1467 +msgid "" +"The bytes which represent the bytecode version number. If you need help with" +" loading/writing bytecode then consider :class:`importlib.abc.SourceLoader`." +msgstr "" +"代表字节码版本号的字节串。若要有助于加载/写入字节码,可考虑采用 :class:`importlib.abc.SourceLoader`。" + +#: ../../library/importlib.rst:1474 +msgid "" +"Return the :pep:`3147`/:pep:`488` path to the byte-compiled file associated " +"with the source *path*. For example, if *path* is ``/foo/bar/baz.py`` the " +"return value would be ``/foo/bar/__pycache__/baz.cpython-32.pyc`` for Python" +" 3.2. The ``cpython-32`` string comes from the current magic tag (see " +":func:`get_tag`; if :attr:`sys.implementation.cache_tag` is not defined then" +" :exc:`NotImplementedError` will be raised)." +msgstr "" +"返回 :pep:`3147`/:pep:`488` 定义的,与源 *path* 相关联的已编译字节码文件的路径。 例如,如果 *path* 为 " +"``/foo/bar/baz.py`` 则 Python 3.2 中的返回值将是 " +"``/foo/bar/__pycache__/baz.cpython-32.pyc``。 字符串 ``cpython-32`` 来自于当前的魔法标签 " +"(参见 :func:`get_tag`; 如果 :attr:`sys.implementation.cache_tag` 未定义则将会引发 " +":exc:`NotImplementedError`)。" + +#: ../../library/importlib.rst:1481 +msgid "" +"The *optimization* parameter is used to specify the optimization level of " +"the bytecode file. An empty string represents no optimization, so " +"``/foo/bar/baz.py`` with an *optimization* of ``''`` will result in a " +"bytecode path of ``/foo/bar/__pycache__/baz.cpython-32.pyc``. ``None`` " +"causes the interpreter's optimization level to be used. Any other value's " +"string representation is used, so ``/foo/bar/baz.py`` with an *optimization*" +" of ``2`` will lead to the bytecode path of " +"``/foo/bar/__pycache__/baz.cpython-32.opt-2.pyc``. The string representation" +" of *optimization* can only be alphanumeric, else :exc:`ValueError` is " +"raised." +msgstr "" +"参数 *optimization* 用于指定字节码文件的优化级别。空字符串代表没有优化,所以 *optimization* 为 的 " +"``/foo/bar/baz.py``,将会得到字节码路径为 " +"``/foo/bar/__pycache__/baz.cpython-32.pyc``。``None`` " +"会导致采用解释器的优化。任何其他字符串都会被采用,所以 *optimization* 为 ``''`` 的 ``/foo/bar/baz.py`` " +"会导致字节码路径为 ``/foo/bar/__pycache__/baz.cpython-32.opt-2.pyc``。*optimization* " +"字符串只能是字母数字,否则会触发 :exc:`ValueError`。" + +#: ../../library/importlib.rst:1491 +msgid "" +"The *debug_override* parameter is deprecated and can be used to override the" +" system's value for ``__debug__``. A ``True`` value is the equivalent of " +"setting *optimization* to the empty string. A ``False`` value is the same as" +" setting *optimization* to ``1``. If both *debug_override* an *optimization*" +" are not ``None`` then :exc:`TypeError` is raised." +msgstr "" +"*debug_override* 参数已废弃,可用于覆盖系统的 ``__debug__`` 值。``True`` 值相当于将 " +"*optimization* 设为空字符串。``False`` 则相当于*optimization* 设为 ``1``。如果 " +"*debug_override* 和 *optimization* 都不为 ``None``,则会触发 :exc:`TypeError`。" + +#: ../../library/importlib.rst:1499 +msgid "" +"The *optimization* parameter was added and the *debug_override* parameter " +"was deprecated." +msgstr "增加了 *optimization* 参数,废弃了 *debug_override* 参数。" + +#: ../../library/importlib.rst:1503 ../../library/importlib.rst:1519 +#: ../../library/importlib.rst:1668 +msgid "Accepts a :term:`path-like object`." +msgstr "接受一个 :term:`path-like object`。" + +#: ../../library/importlib.rst:1509 +msgid "" +"Given the *path* to a :pep:`3147` file name, return the associated source " +"code file path. For example, if *path* is " +"``/foo/bar/__pycache__/baz.cpython-32.pyc`` the returned path would be " +"``/foo/bar/baz.py``. *path* need not exist, however if it does not conform " +"to :pep:`3147` or :pep:`488` format, a :exc:`ValueError` is raised. If " +":attr:`sys.implementation.cache_tag` is not defined, " +":exc:`NotImplementedError` is raised." +msgstr "" +"根据指向一个 :pep:`3147` 文件名的 *path*,返回相关联的源代码文件路径。 举例来说,如果 *path* 为 " +"``/foo/bar/__pycache__/baz.cpython-32.pyc`` 则返回的路径将是 ``/foo/bar/baz.py``。 " +"*path* 不需要已存在,但如果它未遵循 :pep:`3147` 或 :pep:`488` 的格式,则会引发 :exc:`ValueError`。 " +"如果未定义 :attr:`sys.implementation.cache_tag`,则会引发 :exc:`NotImplementedError`。" + +#: ../../library/importlib.rst:1524 +msgid "" +"Decode the given bytes representing source code and return it as a string " +"with universal newlines (as required by " +":meth:`importlib.abc.InspectLoader.get_source`)." +msgstr "" +"对代表源代码的字节串进行解码,并将其作为带有通用换行符的字符串返回(符合 " +":meth:`importlib.abc.InspectLoader.get_source` 要求)。" + +#: ../../library/importlib.rst:1532 +msgid "Resolve a relative module name to an absolute one." +msgstr "将模块的相对名称解析为绝对名称。" + +#: ../../library/importlib.rst:1534 +msgid "" +"If **name** has no leading dots, then **name** is simply returned. This " +"allows for usage such as ``importlib.util.resolve_name('sys', " +"__spec__.parent)`` without doing a check to see if the **package** argument " +"is needed." +msgstr "" +"如果 **name** 前面没有句点,那就简单地返回 **name**。这样就能采用 " +"``importlib.util.resolve_name('sys', __spec__.parent)`` 之类的写法,而无需检查是否需要 " +"**package** 参数。" + +#: ../../library/importlib.rst:1539 +msgid "" +":exc:`ImportError` is raised if **name** is a relative module name but " +"**package** is a false value (e.g. ``None`` or the empty string). " +":exc:`ImportError` is also raised a relative name would escape its " +"containing package (e.g. requesting ``..bacon`` from within the ``spam`` " +"package)." +msgstr "" +"如果 **name** 是相对模块名称,但 **package** 为 False 值(如 ``None`` 或空字符串),则会触发 " +":exc:`ImportError`。 如果相对名称会离开所在的包(如从 ``spam`` 包中请求 ``..bacon``),则还会触发 " +":exc:`ImportError`。" + +#: ../../library/importlib.rst:1546 +msgid "" +"To improve consistency with import statements, raise :exc:`ImportError` " +"instead of :exc:`ValueError` for invalid relative import attempts." +msgstr "" +"为了改善与 import 语句的一致性,对于无效的相对导入尝试会引发 :exc:`ImportError` 而不是 :exc:`ValueError`。" + +#: ../../library/importlib.rst:1553 +msgid "" +"Find the :term:`spec ` for a module, optionally relative to the" +" specified **package** name. If the module is in :attr:`sys.modules`, then " +"``sys.modules[name].__spec__`` is returned (unless the spec would be " +"``None`` or is not set, in which case :exc:`ValueError` is raised). " +"Otherwise a search using :attr:`sys.meta_path` is done. ``None`` is returned" +" if no spec is found." +msgstr "" +"查找模块的 :term:`spec `,相对指定的 **package** 名为可选参数。如果该模块位于 " +":attr:`sys.modules` 中,则会返回 ``sys.modules[name].__spec__`` (除非 spec为 ``None``" +" 或未作设置,这时会触发 :exc:`ValueError`)。否则将用 :attr:`sys.meta_path` 进行搜索。若找不到则返回 " +"``None``。" + +#: ../../library/importlib.rst:1560 +msgid "" +"If **name** is for a submodule (contains a dot), the parent module is " +"automatically imported." +msgstr "如果 **name** 为一个子模块(带有一个句点),则会自动导入父级模块。" + +#: ../../library/importlib.rst:1563 +msgid "**name** and **package** work the same as for :func:`import_module`." +msgstr "**name** 和 **package** 的用法与 :func:`import_module` 相同。" + +#: ../../library/importlib.rst:1567 +msgid "" +"Raises :exc:`ModuleNotFoundError` instead of :exc:`AttributeError` if " +"**package** is in fact not a package (i.e. lacks a :attr:`__path__` " +"attribute)." +msgstr "" +"如果 **package** 实际上不是一个包(即缺少 :attr:`__path__` 属性)则会引发 " +":exc:`ModuleNotFoundError` 而不是 :exc:`AttributeError`。" + +#: ../../library/importlib.rst:1574 +msgid "" +"Create a new module based on **spec** and :meth:`spec.loader.create_module " +"`." +msgstr "" +"基于 **spec** 和 :meth:`spec.loader.create_module " +"` 创建一个新模块。" + +#: ../../library/importlib.rst:1577 +msgid "" +"If :meth:`spec.loader.create_module ` " +"does not return ``None``, then any pre-existing attributes will not be " +"reset. Also, no :exc:`AttributeError` will be raised if triggered while " +"accessing **spec** or setting an attribute on the module." +msgstr "" +"如果 :meth:`spec.loader.create_module ` " +"未返回 ``None``,那么先前已存在的属性不会被重置。另外,如果 :exc:`AttributeError` 是在访问 **spec** " +"或设置模块属性时触发的,则不会触发 。" + +#: ../../library/importlib.rst:1582 +msgid "" +"This function is preferred over using :class:`types.ModuleType` to create a " +"new module as **spec** is used to set as many import-controlled attributes " +"on the module as possible." +msgstr "" +"本函数比 :class:`types.ModuleType` 创建新模块要好,因为用到 **spec** 模块设置了尽可能多的导入控制属性。" + +#: ../../library/importlib.rst:1590 +msgid "" +"A :term:`decorator` for :meth:`importlib.abc.Loader.load_module` to handle " +"selecting the proper module object to load with. The decorated method is " +"expected to have a call signature taking two positional arguments (e.g. " +"``load_module(self, module)``) for which the second argument will be the " +"module **object** to be used by the loader. Note that the decorator will not" +" work on static methods because of the assumption of two arguments." +msgstr "" +":meth:`importlib.abc.Loader.load_module` 的一个 " +":term:`decorator`,用来选取合适的模块对象以供加载。被装饰方法的签名应带有两个位置参数(如:``load_module(self, " +"module)``),其中第二个参数将是加载器用到的模块 **对象**。请注意,由于假定有两个参数,所以装饰器对静态方法不起作用。" + +#: ../../library/importlib.rst:1599 +msgid "" +"The decorated method will take in the **name** of the module to be loaded as" +" expected for a :term:`loader`. If the module is not found in " +":data:`sys.modules` then a new one is constructed. Regardless of where the " +"module came from, :attr:`__loader__` set to **self** and :attr:`__package__`" +" is set based on what :meth:`importlib.abc.InspectLoader.is_package` returns" +" (if available). These attributes are set unconditionally to support " +"reloading." +msgstr "" +"装饰的方法将接受要加载的模块的 **name**,正如 :term:`loader` 一样。如果在 :data:`sys.modules` " +"中没有找到该模块,那么将构造一个新模块。不管模块来自哪里, :attr:`__loader__` 设置为 **self** ,并且 " +":attr:`__package__` 是根据 :meth:`importlib.abc.InspectLoader.is_package` " +"的返回值设置的。这些属性会无条件进行设置以便支持再次加载。" + +#: ../../library/importlib.rst:1607 +msgid "" +"If an exception is raised by the decorated method and a module was added to " +":data:`sys.modules`, then the module will be removed to prevent a partially " +"initialized module from being in left in :data:`sys.modules`. If the module " +"was already in :data:`sys.modules` then it is left alone." +msgstr "" +"如果被装饰的方法触发异常,并且已有模块加入 :data:`sys.modules` 中,那么该模块将被移除,以防 :data:`sys.modules`" +" 中残留一个部分初始化的模块。如果该模块原先已在 :data:`sys.modules` 中,则会保留不变。" + +#: ../../library/importlib.rst:1612 +msgid "" +":attr:`__loader__` and :attr:`__package__` are automatically set (when " +"possible)." +msgstr "有可能时自动设置 :attr:`__loader__` 和 :attr:`__package__` 。" + +#: ../../library/importlib.rst:1616 +msgid "" +"Set :attr:`__name__`, :attr:`__loader__` :attr:`__package__` unconditionally" +" to support reloading." +msgstr "" +"无条件设置 :attr:`__name__` 、 :attr:`__loader__` 、 :attr:`__package__` 以支持再次加载。" + +#: ../../library/importlib.rst:1620 +msgid "" +"The import machinery now directly performs all the functionality provided by" +" this function." +msgstr "现在,导入机制直接执行本函数提供的所有功能。" + +#: ../../library/importlib.rst:1626 +msgid "" +"A :term:`decorator` for :meth:`importlib.abc.Loader.load_module` to set the " +":attr:`__loader__` attribute on the returned module. If the attribute is " +"already set the decorator does nothing. It is assumed that the first " +"positional argument to the wrapped method (i.e. ``self``) is what " +":attr:`__loader__` should be set to." +msgstr "" +"一个 :term:`decorator`,用于 :meth:`importlib.abc.Loader.load_module` 在返回的模块上设置 " +":attr:`__loader__` 属性。如果该属性已被设置,装饰器就什么都不做。这里假定被封装方法的第一个位置参数(即 ``self``)就是 " +":attr:`__loader__` 要设置的。" + +#: ../../library/importlib.rst:1633 +msgid "" +"Set ``__loader__`` if set to ``None``, as if the attribute does not exist." +msgstr "如果设为 ``None`` ,则会去设置 ``__loader__`` ,就像该属性不存在一样。" + +#: ../../library/importlib.rst:1637 ../../library/importlib.rst:1646 +msgid "The import machinery takes care of this automatically." +msgstr "导入机制会自动进行处理。" + +#: ../../library/importlib.rst:1642 +msgid "" +"A :term:`decorator` for :meth:`importlib.abc.Loader.load_module` to set the " +":attr:`__package__` attribute on the returned module. If :attr:`__package__`" +" is set and has a value other than ``None`` it will not be changed." +msgstr "" +"一个用于 :meth:`importlib.abc.Loader.load_module` 的 :term:`decorator` ,以便设置返回模块的" +" :attr:`__package__` 属性。如果 :attr:`__package__` 已设置且不为 ``None``,则不会做改动。" + +#: ../../library/importlib.rst:1651 +msgid "" +"A factory function for creating a :class:`ModuleSpec` instance based on a " +"loader. The parameters have the same meaning as they do for ModuleSpec. " +"The function uses available :term:`loader` APIs, such as " +":meth:`InspectLoader.is_package`, to fill in any missing information on the " +"spec." +msgstr "" +"一个工厂函数,用于创建基于加载器的 :class:`ModuleSpec` 实例。 形参的含义与 ModuleSpec 的相同。 该函数会利用当前可用的" +" :term:`loader` API,比如 :meth:`InspectLoader.is_package`,以填充所有缺失的规格信息。" + +#: ../../library/importlib.rst:1661 +msgid "" +"A factory function for creating a :class:`ModuleSpec` instance based on the " +"path to a file. Missing information will be filled in on the spec by making" +" use of loader APIs and by the implication that the module will be file-" +"based." +msgstr "" +"一个工厂函数,用于创建基于文件路径的 :class:`ModuleSpec` 实例。 缺失的信息将通过利用加载器 API " +"以及模块将基于文件的隐含条件在 spec 上进行填充。" + +#: ../../library/importlib.rst:1673 +msgid "" +"Return the hash of *source_bytes* as bytes. A hash-based ``.pyc`` file " +"embeds the :func:`source_hash` of the corresponding source file's contents " +"in its header." +msgstr "" +"以字节串的形式返回 *source_bytes* 的哈希值。基于哈希值的 ``.pyc`` 文件在头部嵌入了对应源文件内容的 " +":func:`source_hash`。" + +#: ../../library/importlib.rst:1681 +msgid "" +"A class which postpones the execution of the loader of a module until the " +"module has an attribute accessed." +msgstr "此类会延迟执行模块加载器,直至该模块有一个属性被访问到。" + +#: ../../library/importlib.rst:1684 +msgid "" +"This class **only** works with loaders that define " +":meth:`~importlib.abc.Loader.exec_module` as control over what module type " +"is used for the module is required. For those same reasons, the loader's " +":meth:`~importlib.abc.Loader.create_module` method must return ``None`` or a" +" type for which its ``__class__`` attribute can be mutated along with not " +"using :term:`slots <__slots__>`. Finally, modules which substitute the " +"object placed into :attr:`sys.modules` will not work as there is no way to " +"properly replace the module references throughout the interpreter safely; " +":exc:`ValueError` is raised if such a substitution is detected." +msgstr "" +"此类 **只** 适用于定义了 :meth:`~importlib.abc.Loader.exec_module` 的加载器,因为需要控制模块的类型。 " +"同理,加载器的 :meth:`~importlib.abc.Loader.create_module` 方法必须返回 ``None`` 或 " +"``__class__`` 属性可被改变且不用 :term:`slots <__slots__>` 的类型。 最后,用于替换 " +":attr:`sys.modules` 内容的模块将无法工作,因为无法在整个解释器中安全地替换模块的引用;如果检测到这种替换,将触发 " +":exc:`ValueError`。" + +#: ../../library/importlib.rst:1695 +msgid "" +"For projects where startup time is critical, this class allows for " +"potentially minimizing the cost of loading a module if it is never used. For" +" projects where startup time is not essential then use of this class is " +"**heavily** discouraged due to error messages created during loading being " +"postponed and thus occurring out of context." +msgstr "" +"如果项目对启动时间要求很高,只要模块未被用过,此类能够最小化加载模块的开销。对于启动时间并不重要的项目来说,由于加载过程中产生的错误信息会被暂时搁置,因此强烈不建议使用此类。" + +#: ../../library/importlib.rst:1703 +msgid "" +"Began calling :meth:`~importlib.abc.Loader.create_module`, removing the " +"compatibility warning for :class:`importlib.machinery.BuiltinImporter` and " +":class:`importlib.machinery.ExtensionFileLoader`." +msgstr "" +"开始调用 :meth:`~importlib.abc.Loader.create_module`,移除 " +":class:`importlib.machinery.BuiltinImporter` 和 " +":class:`importlib.machinery.ExtensionFileLoader` 的兼容性警告。" + +#: ../../library/importlib.rst:1710 +msgid "" +"A static method which returns a callable that creates a lazy loader. This is" +" meant to be used in situations where the loader is passed by class instead " +"of by instance. ::" +msgstr "静态方法,返回创建延迟加载器的可调用对象。就是说用在加载器用类而不是实例传递的场合。" + +#: ../../library/importlib.rst:1723 +msgid "Examples" +msgstr "例子" + +#: ../../library/importlib.rst:1726 +msgid "Importing programmatically" +msgstr "用编程方式导入" + +#: ../../library/importlib.rst:1728 +msgid "" +"To programmatically import a module, use :func:`importlib.import_module`. ::" +msgstr "要以编程方式导入一个模块,请使用 :func:`importlib.import_module` :" + +#: ../../library/importlib.rst:1737 +msgid "Checking if a module can be imported" +msgstr "检查某模块可否导入。" + +#: ../../library/importlib.rst:1739 +msgid "" +"If you need to find out if a module can be imported without actually doing " +"the import, then you should use :func:`importlib.util.find_spec`. ::" +msgstr "若要查看某个模块是否可导入,但不需要实际执行导入,则应使用 :func:`importlib.util.find_spec` :" + +#: ../../library/importlib.rst:1762 +msgid "Importing a source file directly" +msgstr "直接导入源码文件。" + +#: ../../library/importlib.rst:1764 +msgid "" +"To import a Python source file directly, use the following recipe (Python " +"3.5 and newer only)::" +msgstr "若要直接导入 Python 源码文件,请使用一下方案(仅 Python 3.5 以上版本有效):" + +#: ../../library/importlib.rst:1783 +msgid "Setting up an importer" +msgstr "导入器的配置" + +#: ../../library/importlib.rst:1785 +msgid "" +"For deep customizations of import, you typically want to implement an " +":term:`importer`. This means managing both the :term:`finder` and " +":term:`loader` side of things. For finders there are two flavours to choose " +"from depending on your needs: a :term:`meta path finder` or a :term:`path " +"entry finder`. The former is what you would put on :attr:`sys.meta_path` " +"while the latter is what you create using a :term:`path entry hook` on " +":attr:`sys.path_hooks` which works with :attr:`sys.path` entries to " +"potentially create a finder. This example will show you how to register your" +" own importers so that import will use them (for creating an importer for " +"yourself, read the documentation for the appropriate classes defined within " +"this package)::" +msgstr "" +"对于深度定制的导入,通常需要实现一个 :term:`importer`。 这意味着得同时管理 :term:`finder` 和 " +":term:`loader`。 根据不同的需求,有两种类型的查找器可供选择: :term:`meta path finder` 或 " +":term:`path entry finder`。 前者应位于 :attr:`sys.meta_path` 之上,而后者是用 :term:`path " +"entry hook` 在 :attr:`sys.path_hooks` 上创建但与 :attr:`sys.path` " +"一起工作,可能会创建一个查找器。以下例子将演示如何注册自己的导入器,以供导入使用(关于自建导入器请阅读本包内定义的类文档):" + +#: ../../library/importlib.rst:1817 +msgid "Approximating :func:`importlib.import_module`" +msgstr ":func:`importlib.import_module` 的近似实现" + +#: ../../library/importlib.rst:1819 +msgid "" +"Import itself is implemented in Python code, making it possible to expose " +"most of the import machinery through importlib. The following helps " +"illustrate the various APIs that importlib exposes by providing an " +"approximate implementation of :func:`importlib.import_module` (Python 3.4 " +"and newer for the importlib usage, Python 3.6 and newer for other parts of " +"the code). ::" +msgstr "" +"导入过程本身是用 Python 代码实现的,这样就能通过 importlib 将大多数导入机制暴露出来。以下代码近似实现了 " +":func:`importlib.import_module` ,以帮助说明 importlib 暴露出来的各种 API (importlib " +"的用法适用于 Python 3.4 以上版本 ,其他代码适用于 Python 3.6 以上版本)。" diff --git a/library/index.po b/library/index.po new file mode 100644 index 000000000..dc04830f7 --- /dev/null +++ b/library/index.po @@ -0,0 +1,74 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) 2001-2022, Python Software Foundation +# This file is distributed under the same license as the Python package. +# FIRST AUTHOR , YEAR. +# +# Translators: +# Freesand Leo , 2019 +# +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: Python 3.9\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2022-11-04 14:34+0000\n" +"PO-Revision-Date: 2017-02-16 23:15+0000\n" +"Last-Translator: Freesand Leo , 2019\n" +"Language-Team: Chinese (China) (https://www.transifex.com/python-doc/teams/5390/zh_CN/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: zh_CN\n" +"Plural-Forms: nplurals=1; plural=0;\n" + +#: ../../library/index.rst:5 +msgid "The Python Standard Library" +msgstr "Python 标准库" + +#: ../../library/index.rst:7 +msgid "" +"While :ref:`reference-index` describes the exact syntax and semantics of the" +" Python language, this library reference manual describes the standard " +"library that is distributed with Python. It also describes some of the " +"optional components that are commonly included in Python distributions." +msgstr "" +":ref:`reference-index` 描述了 Python 语言的具体语法和语义,这份库参考则介绍了与 Python " +"一同发行的标准库。它还描述了通常包含在 Python 发行版中的一些可选组件。" + +#: ../../library/index.rst:13 +msgid "" +"Python's standard library is very extensive, offering a wide range of " +"facilities as indicated by the long table of contents listed below. The " +"library contains built-in modules (written in C) that provide access to " +"system functionality such as file I/O that would otherwise be inaccessible " +"to Python programmers, as well as modules written in Python that provide " +"standardized solutions for many problems that occur in everyday programming." +" Some of these modules are explicitly designed to encourage and enhance the " +"portability of Python programs by abstracting away platform-specifics into " +"platform-neutral APIs." +msgstr "" +"Python 标准库非常庞大,所提供的组件涉及范围十分广泛,正如以下内容目录所显示的。这个库包含了多个内置模块 (以 C 编写),Python " +"程序员必须依靠它们来实现系统级功能,例如文件 I/O,此外还有大量以 Python " +"编写的模块,提供了日常编程中许多问题的标准解决方案。其中有些模块经过专门设计,通过将特定平台功能抽象化为平台中立的 API 来鼓励和加强 Python " +"程序的可移植性。" + +#: ../../library/index.rst:23 +msgid "" +"The Python installers for the Windows platform usually include the entire " +"standard library and often also include many additional components. For " +"Unix-like operating systems Python is normally provided as a collection of " +"packages, so it may be necessary to use the packaging tools provided with " +"the operating system to obtain some or all of the optional components." +msgstr "" +"Windows 版本的 Python 安装程序通常包含整个标准库,往往还包含许多额外组件。对于类 Unix 操作系统,Python " +"通常会分成一系列的软件包,因此可能需要使用操作系统所提供的包管理工具来获取部分或全部可选组件。" + +#: ../../library/index.rst:30 +msgid "" +"In addition to the standard library, there is a growing collection of " +"several thousand components (from individual programs and modules to " +"packages and entire application development frameworks), available from the " +"`Python Package Index `_." +msgstr "" +"在这个标准库以外还存在成千上万并且不断增加的其他组件 (从单独的程序、模块、软件包直到完整的应用开发框架),访问 `Python 包索引 " +"`_ 即可获取这些第三方包。" diff --git a/library/inspect.po b/library/inspect.po new file mode 100644 index 000000000..2fb921092 --- /dev/null +++ b/library/inspect.po @@ -0,0 +1,1914 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) 2001-2024, Python Software Foundation +# This file is distributed under the same license as the Python package. +# FIRST AUTHOR , YEAR. +# +# Translators: +# 8af080f2e6702c64bedd01873aed27e8_25aec74 , 2019 +# ruoyu zhang , 2019 +# Makdon , 2019 +# ppcfish , 2019 +# Jiuh.star , 2021 +# ww song , 2022 +# Xu Siyuan, 2022 +# Freesand Leo , 2023 +# Rafael Fontenelle , 2024 +# +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: Python 3.9\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2024-04-15 06:01+0000\n" +"PO-Revision-Date: 2017-02-16 23:15+0000\n" +"Last-Translator: Rafael Fontenelle , 2024\n" +"Language-Team: Chinese (China) (https://app.transifex.com/python-doc/teams/5390/zh_CN/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: zh_CN\n" +"Plural-Forms: nplurals=1; plural=0;\n" + +#: ../../library/inspect.rst:2 +msgid ":mod:`inspect` --- Inspect live objects" +msgstr ":mod:`inspect` --- 检查对象" + +#: ../../library/inspect.rst:10 +msgid "**Source code:** :source:`Lib/inspect.py`" +msgstr "**源代码:** :source:`Lib/inspect.py`" + +#: ../../library/inspect.rst:14 +msgid "" +"The :mod:`inspect` module provides several useful functions to help get " +"information about live objects such as modules, classes, methods, functions," +" tracebacks, frame objects, and code objects. For example, it can help you " +"examine the contents of a class, retrieve the source code of a method, " +"extract and format the argument list for a function, or get all the " +"information you need to display a detailed traceback." +msgstr "" +":mod:`inspect` " +"模块提供了一些有用的函数帮助获取对象的信息,例如模块、类、方法、函数、回溯、帧对象以及代码对象。例如它可以帮助你检查类的内容,获取某个方法的源代码,取得并格式化某个函数的参数列表,或者获取你需要显示的回溯的详细信息。" + +#: ../../library/inspect.rst:21 +msgid "" +"There are four main kinds of services provided by this module: type " +"checking, getting source code, inspecting classes and functions, and " +"examining the interpreter stack." +msgstr "该模块提供了4种主要的功能:类型检查、获取源代码、检查类与函数、检查解释器的调用堆栈。" + +#: ../../library/inspect.rst:29 +msgid "Types and members" +msgstr "类型和成员" + +#: ../../library/inspect.rst:31 +msgid "" +"The :func:`getmembers` function retrieves the members of an object such as a" +" class or module. The functions whose names begin with \"is\" are mainly " +"provided as convenient choices for the second argument to " +":func:`getmembers`. They also help you determine when you can expect to find" +" the following special attributes:" +msgstr "" +":func:`getmembers` 函数获取对象的成员,例如类或模块。函数名以\"is\"开始的函数主要作为 :func:`getmembers` " +"的第2个参数使用。它们也可用于判定某对象是否有如下的特殊属性:" + +#: ../../library/inspect.rst:41 +msgid "Type" +msgstr "类型" + +#: ../../library/inspect.rst:41 +msgid "Attribute" +msgstr "属性" + +#: ../../library/inspect.rst:41 +msgid "Description" +msgstr "描述" + +#: ../../library/inspect.rst:43 +msgid "module" +msgstr "module" + +#: ../../library/inspect.rst:43 ../../library/inspect.rst:48 +#: ../../library/inspect.rst:58 ../../library/inspect.rst:76 +#: ../../library/inspect.rst:231 +msgid "__doc__" +msgstr "__doc__" + +#: ../../library/inspect.rst:43 ../../library/inspect.rst:48 +#: ../../library/inspect.rst:58 ../../library/inspect.rst:76 +#: ../../library/inspect.rst:231 +msgid "documentation string" +msgstr "文档字符串" + +#: ../../library/inspect.rst:45 +msgid "__file__" +msgstr "__file__" + +#: ../../library/inspect.rst:45 +msgid "filename (missing for built-in modules)" +msgstr "文件名(内置模块没有文件名)" + +#: ../../library/inspect.rst:48 +msgid "class" +msgstr "class" + +#: ../../library/inspect.rst:50 ../../library/inspect.rst:60 +#: ../../library/inspect.rst:78 ../../library/inspect.rst:200 +#: ../../library/inspect.rst:214 ../../library/inspect.rst:233 +msgid "__name__" +msgstr "__name__" + +#: ../../library/inspect.rst:50 +msgid "name with which this class was defined" +msgstr "类定义时所使用的名称" + +#: ../../library/inspect.rst:53 ../../library/inspect.rst:63 +#: ../../library/inspect.rst:81 ../../library/inspect.rst:202 +#: ../../library/inspect.rst:216 ../../library/inspect.rst:236 +msgid "__qualname__" +msgstr "__qualname__" + +#: ../../library/inspect.rst:53 ../../library/inspect.rst:63 +#: ../../library/inspect.rst:81 ../../library/inspect.rst:202 +#: ../../library/inspect.rst:216 ../../library/inspect.rst:236 +msgid "qualified name" +msgstr "qualified name -- 限定名称" + +#: ../../library/inspect.rst:55 ../../library/inspect.rst:73 +#: ../../library/inspect.rst:104 +msgid "__module__" +msgstr "__module__" + +#: ../../library/inspect.rst:55 +msgid "name of module in which this class was defined" +msgstr "该类型被定义时所在的模块的名称" + +#: ../../library/inspect.rst:58 +msgid "method" +msgstr "method -- 方法" + +#: ../../library/inspect.rst:60 +msgid "name with which this method was defined" +msgstr "该方法定义时所使用的名称" + +#: ../../library/inspect.rst:65 +msgid "__func__" +msgstr "__func__" + +#: ../../library/inspect.rst:65 +msgid "function object containing implementation of method" +msgstr "实现该方法的函数对象" + +#: ../../library/inspect.rst:69 ../../library/inspect.rst:238 +msgid "__self__" +msgstr "__self__" + +#: ../../library/inspect.rst:69 +msgid "instance to which this method is bound, or ``None``" +msgstr "该方法被绑定的实例,若没有绑定则为 ``None``" + +#: ../../library/inspect.rst:73 +msgid "name of module in which this method was defined" +msgstr "定义此方法的模块的名称" + +#: ../../library/inspect.rst:76 +msgid "function" +msgstr "function -- 函数" + +#: ../../library/inspect.rst:78 +msgid "name with which this function was defined" +msgstr "用于定义此函数的名称" + +#: ../../library/inspect.rst:83 +msgid "__code__" +msgstr "__code__" + +#: ../../library/inspect.rst:83 +msgid "code object containing compiled function :term:`bytecode`" +msgstr "包含已编译函数的代码对象 :term:`bytecode`" + +#: ../../library/inspect.rst:87 +msgid "__defaults__" +msgstr "__defaults__" + +#: ../../library/inspect.rst:87 +msgid "tuple of any default values for positional or keyword parameters" +msgstr "所有位置或关键字参数的默认值的元组" + +#: ../../library/inspect.rst:91 +msgid "__kwdefaults__" +msgstr "__kwdefaults__" + +#: ../../library/inspect.rst:91 +msgid "mapping of any default values for keyword-only parameters" +msgstr "保存仅关键字参数的所有默认值的映射" + +#: ../../library/inspect.rst:95 +msgid "__globals__" +msgstr "__globals__" + +#: ../../library/inspect.rst:95 +msgid "global namespace in which this function was defined" +msgstr "此函数定义所在的全局命名空间" + +#: ../../library/inspect.rst:98 +msgid "__annotations__" +msgstr "__annotations__" + +#: ../../library/inspect.rst:98 +msgid "" +"mapping of parameters names to annotations; ``\"return\"`` key is reserved " +"for return annotations." +msgstr "参数名称到注解的映射;保留键 ``\"return\"`` 用于返回值注解。" + +#: ../../library/inspect.rst:104 +msgid "name of module in which this function was defined" +msgstr "此函数定义所在的模块名称" + +#: ../../library/inspect.rst:107 +msgid "traceback" +msgstr "回溯" + +#: ../../library/inspect.rst:107 +msgid "tb_frame" +msgstr "tb_frame" + +#: ../../library/inspect.rst:107 +msgid "frame object at this level" +msgstr "此层的帧对象" + +#: ../../library/inspect.rst:110 +msgid "tb_lasti" +msgstr "tb_lasti" + +#: ../../library/inspect.rst:110 ../../library/inspect.rst:132 +msgid "index of last attempted instruction in bytecode" +msgstr "在字节码中最后尝试的指令的索引" + +#: ../../library/inspect.rst:113 +msgid "tb_lineno" +msgstr "tb_lineno" + +#: ../../library/inspect.rst:113 ../../library/inspect.rst:135 +msgid "current line number in Python source code" +msgstr "当前行在 Python 源代码中的行号" + +#: ../../library/inspect.rst:116 +msgid "tb_next" +msgstr "tb_next" + +#: ../../library/inspect.rst:116 +msgid "next inner traceback object (called by this level)" +msgstr "下一个内部回溯对象(由本层调用)" + +#: ../../library/inspect.rst:120 ../../library/inspect.rst:204 +#: ../../library/inspect.rst:221 +msgid "frame" +msgstr "frame -- 帧" + +#: ../../library/inspect.rst:120 +msgid "f_back" +msgstr "f_back" + +#: ../../library/inspect.rst:120 +msgid "next outer frame object (this frame's caller)" +msgstr "下一个外部帧对象(此帧的调用者)" + +#: ../../library/inspect.rst:123 +msgid "f_builtins" +msgstr "f_builtins" + +#: ../../library/inspect.rst:123 +msgid "builtins namespace seen by this frame" +msgstr "此帧执行时所在的 builtins 命名空间" + +#: ../../library/inspect.rst:126 +msgid "f_code" +msgstr "f_code" + +#: ../../library/inspect.rst:126 +msgid "code object being executed in this frame" +msgstr "在此帧中执行的代码对象" + +#: ../../library/inspect.rst:129 +msgid "f_globals" +msgstr "f_globals" + +#: ../../library/inspect.rst:129 +msgid "global namespace seen by this frame" +msgstr "此帧执行时所在的全局命名空间" + +#: ../../library/inspect.rst:132 +msgid "f_lasti" +msgstr "f_lasti" + +#: ../../library/inspect.rst:135 +msgid "f_lineno" +msgstr "f_lineno" + +#: ../../library/inspect.rst:138 +msgid "f_locals" +msgstr "f_locals" + +#: ../../library/inspect.rst:138 +msgid "local namespace seen by this frame" +msgstr "此帧所看到的局部命名空间" + +#: ../../library/inspect.rst:141 +msgid "f_trace" +msgstr "f_trace" + +#: ../../library/inspect.rst:141 +msgid "tracing function for this frame, or ``None``" +msgstr "此帧的追踪函数,或 ``None``" + +#: ../../library/inspect.rst:144 ../../library/inspect.rst:208 +#: ../../library/inspect.rst:225 +msgid "code" +msgstr "code" + +#: ../../library/inspect.rst:144 +msgid "co_argcount" +msgstr "co_argcount" + +#: ../../library/inspect.rst:144 +msgid "" +"number of arguments (not including keyword only arguments, \\* or \\*\\* " +"args)" +msgstr "参数数量(不包括仅关键字参数、\\* 或 \\*\\* 参数)" + +#: ../../library/inspect.rst:149 +msgid "co_code" +msgstr "co_code" + +#: ../../library/inspect.rst:149 +msgid "string of raw compiled bytecode" +msgstr "字符串形式的原始字节码" + +#: ../../library/inspect.rst:152 +msgid "co_cellvars" +msgstr "co_cellvars" + +#: ../../library/inspect.rst:152 +msgid "tuple of names of cell variables (referenced by containing scopes)" +msgstr "单元变量名称的元组(通过包含作用域引用)" + +#: ../../library/inspect.rst:156 +msgid "co_consts" +msgstr "co_consts" + +#: ../../library/inspect.rst:156 +msgid "tuple of constants used in the bytecode" +msgstr "字节码中使用的常量元组" + +#: ../../library/inspect.rst:159 +msgid "co_filename" +msgstr "co_filename" + +#: ../../library/inspect.rst:159 +msgid "name of file in which this code object was created" +msgstr "创建此代码对象的文件的名称" + +#: ../../library/inspect.rst:163 +msgid "co_firstlineno" +msgstr "co_firstlineno" + +#: ../../library/inspect.rst:163 +msgid "number of first line in Python source code" +msgstr "第一行在Python源代码中的行号" + +#: ../../library/inspect.rst:166 +msgid "co_flags" +msgstr "co_flags" + +#: ../../library/inspect.rst:166 +msgid "" +"bitmap of ``CO_*`` flags, read more :ref:`here `" +msgstr "``CO_*`` 标志的位图,详见 :ref:`此处 `" + +#: ../../library/inspect.rst:170 +msgid "co_lnotab" +msgstr "co_lnotab" + +#: ../../library/inspect.rst:170 +msgid "encoded mapping of line numbers to bytecode indices" +msgstr "编码的行号到字节码索引的映射" + +#: ../../library/inspect.rst:174 +msgid "co_freevars" +msgstr "co_freevars" + +#: ../../library/inspect.rst:174 +msgid "tuple of names of free variables (referenced via a function's closure)" +msgstr "自由变量的名字组成的元组(通过函数闭包引用)" + +#: ../../library/inspect.rst:178 +msgid "co_posonlyargcount" +msgstr "co_posonlyargcount" + +#: ../../library/inspect.rst:178 +msgid "number of positional only arguments" +msgstr "仅限位置参数的数量" + +#: ../../library/inspect.rst:181 +msgid "co_kwonlyargcount" +msgstr "co_kwonlyargcount" + +#: ../../library/inspect.rst:181 +msgid "number of keyword only arguments (not including \\*\\* arg)" +msgstr "仅限关键字参数的数量(不包括 \\*\\* 参数)" + +#: ../../library/inspect.rst:185 +msgid "co_name" +msgstr "co_name" + +#: ../../library/inspect.rst:185 +msgid "name with which this code object was defined" +msgstr "定义此代码对象的名称" + +#: ../../library/inspect.rst:188 +msgid "co_names" +msgstr "co_names" + +#: ../../library/inspect.rst:188 +msgid "tuple of names of local variables" +msgstr "局部变量名称的元组" + +#: ../../library/inspect.rst:191 +msgid "co_nlocals" +msgstr "co_nlocals" + +#: ../../library/inspect.rst:191 +msgid "number of local variables" +msgstr "局部变量的数量" + +#: ../../library/inspect.rst:193 +msgid "co_stacksize" +msgstr "co_stacksize" + +#: ../../library/inspect.rst:193 +msgid "virtual machine stack space required" +msgstr "需要虚拟机堆栈空间" + +#: ../../library/inspect.rst:196 +msgid "co_varnames" +msgstr "co_varnames" + +#: ../../library/inspect.rst:196 +msgid "tuple of names of arguments and local variables" +msgstr "参数名和局部变量的元组" + +#: ../../library/inspect.rst:200 +msgid "generator" +msgstr "generator -- 生成器" + +#: ../../library/inspect.rst:200 ../../library/inspect.rst:214 +msgid "name" +msgstr "name" + +#: ../../library/inspect.rst:204 +msgid "gi_frame" +msgstr "gi_frame" + +#: ../../library/inspect.rst:206 +msgid "gi_running" +msgstr "gi_running" + +#: ../../library/inspect.rst:206 +msgid "is the generator running?" +msgstr "生成器在运行吗?" + +#: ../../library/inspect.rst:208 +msgid "gi_code" +msgstr "gi_code" + +#: ../../library/inspect.rst:210 +msgid "gi_yieldfrom" +msgstr "gi_yieldfrom" + +#: ../../library/inspect.rst:210 +msgid "object being iterated by ``yield from``, or ``None``" +msgstr "通过 ``yield from``迭代的对象,或``None``" + +#: ../../library/inspect.rst:214 +msgid "coroutine" +msgstr "coroutine -- 协程" + +#: ../../library/inspect.rst:218 +msgid "cr_await" +msgstr "cr_await" + +#: ../../library/inspect.rst:218 +msgid "object being awaited on, or ``None``" +msgstr "正在等待的对象,或 ``None``" + +#: ../../library/inspect.rst:221 +msgid "cr_frame" +msgstr "cr_frame" + +#: ../../library/inspect.rst:223 +msgid "cr_running" +msgstr "cr_running" + +#: ../../library/inspect.rst:223 +msgid "is the coroutine running?" +msgstr "这个协程正在运行吗?" + +#: ../../library/inspect.rst:225 +msgid "cr_code" +msgstr "cr_code" + +#: ../../library/inspect.rst:227 +msgid "cr_origin" +msgstr "cr_origin" + +#: ../../library/inspect.rst:227 +msgid "where coroutine was created, or ``None``. See |coroutine-origin-link|" +msgstr "协程被创建的位置,或 ``None``。参见 |coroutine-origin-link|" + +#: ../../library/inspect.rst:231 +msgid "builtin" +msgstr "builtin" + +#: ../../library/inspect.rst:233 +msgid "original name of this function or method" +msgstr "此函数或方法的原始名称" + +#: ../../library/inspect.rst:238 +msgid "instance to which a method is bound, or ``None``" +msgstr "方法绑定到的实例,或 ``None``" + +#: ../../library/inspect.rst:245 +msgid "Add ``__qualname__`` and ``gi_yieldfrom`` attributes to generators." +msgstr "为生成器添加 ``__qualname__`` 和 ``gi_yieldfrom`` 属性。" + +#: ../../library/inspect.rst:247 +msgid "" +"The ``__name__`` attribute of generators is now set from the function name, " +"instead of the code name, and it can now be modified." +msgstr "生成器的 ``__name__`` 属性现在由函数名称设置,而不是代码对象名称,并且现在可以被修改。" + +#: ../../library/inspect.rst:252 +msgid "Add ``cr_origin`` attribute to coroutines." +msgstr "为协程添加 ``cr_origin`` 属性。" + +#: ../../library/inspect.rst:256 +msgid "" +"Return all the members of an object in a list of ``(name, value)`` pairs " +"sorted by name. If the optional *predicate* argument—which will be called " +"with the ``value`` object of each member—is supplied, only members for which" +" the predicate returns a true value are included." +msgstr "" +"返回一个对象上的所有成员,组成以 ``(名称, 值)`` 对为元素的列表,按名称排序。如果提供了可选的 *predicate* 参数(会对每个成员的 " +"``值`` 对象进行一次调用),则仅包含该断言为真的成员。" + +#: ../../library/inspect.rst:263 +msgid "" +":func:`getmembers` will only return class attributes defined in the " +"metaclass when the argument is a class and those attributes have been listed" +" in the metaclass' custom :meth:`__dir__`." +msgstr "" +"如果要让 :func:`getmembers` 返回元类中定义的类属性,那么实参须为一个类且这些属性在元类的自定义方法 :meth:`__dir__` " +"中列出。" + +#: ../../library/inspect.rst:270 +msgid "" +"Return the name of the module named by the file *path*, without including " +"the names of enclosing packages. The file extension is checked against all " +"of the entries in :func:`importlib.machinery.all_suffixes`. If it matches, " +"the final path component is returned with the extension removed. Otherwise, " +"``None`` is returned." +msgstr "" +"返回由文件名 *path* 表示的模块名字,但不包括外层的包名。文件扩展名会检查是否在 " +":func:`importlib.machinery.all_suffixes` " +"列出的条目中。如果符合,则文件路径的最后一个组成部分会去掉后缀名后被返回;否则返回 ``None``。" + +#: ../../library/inspect.rst:276 +msgid "" +"Note that this function *only* returns a meaningful name for actual Python " +"modules - paths that potentially refer to Python packages will still return " +"``None``." +msgstr "" +"值得注意的是,这个函数 *仅* 返回可以作为 Python 模块的名字,而有可能指向一个 Python 包的路径仍然会返回 ``None``。" + +#: ../../library/inspect.rst:280 +msgid "The function is based directly on :mod:`importlib`." +msgstr "该函数直接基于 :mod:`importlib`。" + +#: ../../library/inspect.rst:286 +msgid "Return ``True`` if the object is a module." +msgstr "当该对象是一个模块时返回 ``True``。" + +#: ../../library/inspect.rst:291 +msgid "" +"Return ``True`` if the object is a class, whether built-in or created in " +"Python code." +msgstr "当该对象是一个类时返回 ``True``,无论是内置类或者 Python 代码中定义的类。" + +#: ../../library/inspect.rst:297 +msgid "Return ``True`` if the object is a bound method written in Python." +msgstr "当该对象是一个 Python 写成的绑定方法时返回 ``True``。" + +#: ../../library/inspect.rst:302 +msgid "" +"Return ``True`` if the object is a Python function, which includes functions" +" created by a :term:`lambda` expression." +msgstr "当该对象是一个 Python 函数时(包括使用 :term:`lambda` 表达式创造的函数),返回 ``True``。" + +#: ../../library/inspect.rst:308 +msgid "Return ``True`` if the object is a Python generator function." +msgstr "当该对象是一个 Python 生成器函数时返回 ``True``。" + +#: ../../library/inspect.rst:310 +msgid "" +"Functions wrapped in :func:`functools.partial` now return ``True`` if the " +"wrapped function is a Python generator function." +msgstr "" +"对于使用 :func:`functools.partial` 封装的函数,如果被封装的函数是一个 Python 生成器函数,现在也会返回 " +"``True``。" + +#: ../../library/inspect.rst:317 +msgid "Return ``True`` if the object is a generator." +msgstr "当该对象是一个生成器时返回 ``True``。" + +#: ../../library/inspect.rst:322 +msgid "" +"Return ``True`` if the object is a :term:`coroutine function` (a function " +"defined with an :keyword:`async def` syntax)." +msgstr "" +"当该对象是一个 :term:`协程函数 ` (通过 :keyword:`async def` " +"语法定义的函数)时返回``True``。" + +#: ../../library/inspect.rst:327 +msgid "" +"Functions wrapped in :func:`functools.partial` now return ``True`` if the " +"wrapped function is a :term:`coroutine function`." +msgstr "" +"对于使用 :func:`functools.partial` 封装的函数,如果被封装的函数是一个 :term:`协程函数 ` ,现在也会返回 ``True``。" + +#: ../../library/inspect.rst:334 +msgid "" +"Return ``True`` if the object is a :term:`coroutine` created by an " +":keyword:`async def` function." +msgstr "" +"当该对象是一个由 :keyword:`async def` 函数创建的 :term:`协程 ` 时返回 ``True``。" + +#: ../../library/inspect.rst:342 +msgid "" +"Return ``True`` if the object can be used in :keyword:`await` expression." +msgstr "如果该对象可以在 :keyword:`await` 表达式中使用时返回 ``True``。" + +#: ../../library/inspect.rst:344 +msgid "" +"Can also be used to distinguish generator-based coroutines from regular " +"generators::" +msgstr "也可以用于区分基于生成器的协程和常规的生成器:" + +#: ../../library/inspect.rst:361 +msgid "" +"Return ``True`` if the object is an :term:`asynchronous generator` function," +" for example::" +msgstr "如果该对象是一个 :term:`异步生成器 ` 函数则返回 ``True``,例如:" + +#: ../../library/inspect.rst:372 +msgid "" +"Functions wrapped in :func:`functools.partial` now return ``True`` if the " +"wrapped function is a :term:`asynchronous generator` function." +msgstr "" +"对于使用 :func:`functools.partial` 封装的函数,如果被封装的函数是一个 :term:`异步生成器 ` ,现在也会返回 ``True``。" + +#: ../../library/inspect.rst:379 +msgid "" +"Return ``True`` if the object is an :term:`asynchronous generator iterator` " +"created by an :term:`asynchronous generator` function." +msgstr "" +"如果该对象是一个由 :term:`异步生成器 ` 函数创建的 :term:`异步生成器迭代器 " +"`,则返回 ``True``。" + +#: ../../library/inspect.rst:386 +msgid "Return ``True`` if the object is a traceback." +msgstr "如果该对象是一个回溯则返回 ``True``。" + +#: ../../library/inspect.rst:391 +msgid "Return ``True`` if the object is a frame." +msgstr "如果该对象是一个帧对象则返回 ``True``。" + +#: ../../library/inspect.rst:396 +msgid "Return ``True`` if the object is a code." +msgstr "如果该对象是一个代码对象则返回 ``True``。" + +#: ../../library/inspect.rst:401 +msgid "" +"Return ``True`` if the object is a built-in function or a bound built-in " +"method." +msgstr "如果该对象是一个内置函数或一个绑定的内置方法,则返回 ``True``。" + +#: ../../library/inspect.rst:406 +msgid "" +"Return ``True`` if the object is a user-defined or built-in function or " +"method." +msgstr "如果该对象是一个用户定义的或内置的函数或者方法,则返回 ``True``。" + +#: ../../library/inspect.rst:411 +msgid "Return ``True`` if the object is an abstract base class." +msgstr "如果该对象是一个抽象基类则返回 ``True``。" + +#: ../../library/inspect.rst:416 +msgid "" +"Return ``True`` if the object is a method descriptor, but not if " +":func:`ismethod`, :func:`isclass`, :func:`isfunction` or :func:`isbuiltin` " +"are true." +msgstr "" +"如果该对象是一个方法描述器,但 :func:`ismethod` 、 :func:`isclass` 、 :func:`isfunction` 及 " +":func:`isbuiltin` 均不为真,则返回 ``True``。" + +#: ../../library/inspect.rst:420 +msgid "" +"This, for example, is true of ``int.__add__``. An object passing this test " +"has a :meth:`~object.__get__` method but not a :meth:`~object.__set__` " +"method, but beyond that the set of attributes varies. A " +":attr:`~definition.__name__` attribute is usually sensible, and " +":attr:`__doc__` often is." +msgstr "" +"例如,该函数对于 ``int.__add__`` 为真。一个通过此测试的对象可以有 :meth:`~object.__get__` 方法,但不能有 " +":meth:`~object.__set__` 方法,除此以外的属性集合是可变的。一个 :attr:`~definition.__name__` " +"属性通常是合理的,而 :attr:`__doc__` 属性常常也是。" + +#: ../../library/inspect.rst:426 +msgid "" +"Methods implemented via descriptors that also pass one of the other tests " +"return ``False`` from the :func:`ismethoddescriptor` test, simply because " +"the other tests promise more -- you can, e.g., count on having the " +":attr:`__func__` attribute (etc) when an object passes :func:`ismethod`." +msgstr "" +"即使是通过描述器实现的函数,如果通过其他某一个测试,则 :func:`ismethoddescriptor` 测试则会返回 " +"``False``。这单纯是因为其他测试提供了更多保证。比如,当一个对象通过 :func:`ismethod` 测试时,你可以使用 " +":attr:`__func__` 等属性。" + +#: ../../library/inspect.rst:434 +msgid "Return ``True`` if the object is a data descriptor." +msgstr "如果该对象是一个数据描述器则返回 ``True``。" + +#: ../../library/inspect.rst:436 +msgid "" +"Data descriptors have a :attr:`~object.__set__` or a " +":attr:`~object.__delete__` method. Examples are properties (defined in " +"Python), getsets, and members. The latter two are defined in C and there " +"are more specific tests available for those types, which is robust across " +"Python implementations. Typically, data descriptors will also have " +":attr:`~definition.__name__` and :attr:`__doc__` attributes (properties, " +"getsets, and members have both of these attributes), but this is not " +"guaranteed." +msgstr "" +"数据描述器拥有 :attr:`~object.__set__` 或 :attr:`~object.__delete__` 方法。比如属性(通过 " +"Python 定义)、getset 和成员。后二者是通过 C 定义的,并且也有对应的更具体的测试,并且在不同的 Python " +"实现中也是健壮的。典型地,数据描述器会拥有 :attr:`~definition.__name__` 和 :attr:`__doc__` " +"属性(属性、getset 和成员都包含这两个属性),但这并无保证。" + +#: ../../library/inspect.rst:447 +msgid "Return ``True`` if the object is a getset descriptor." +msgstr "如果该对象是一个 getset 描述器则返回 ``True``。" + +#: ../../library/inspect.rst:451 +msgid "" +"getsets are attributes defined in extension modules via " +":c:type:`PyGetSetDef` structures. For Python implementations without such " +"types, this method will always return ``False``." +msgstr "" +"getset 是在扩展模块中通过 :c:type:`PyGetSetDef` 结构体定义的属性。对于不包含这种类型的 Python " +"实现,这个方法将永远返回 ``False``。" + +#: ../../library/inspect.rst:458 +msgid "Return ``True`` if the object is a member descriptor." +msgstr "如果该对象是一个成员描述器则返回 ``True``。" + +#: ../../library/inspect.rst:462 +msgid "" +"Member descriptors are attributes defined in extension modules via " +":c:type:`PyMemberDef` structures. For Python implementations without such " +"types, this method will always return ``False``." +msgstr "" +"成员描述器是在扩展模块中通过 :c:type:`PyMemberDef` 结构体定义的属性。对于不包含这种类型的 Python 实现,这个方法将永远返回" +" ``False``。" + +#: ../../library/inspect.rst:470 +msgid "Retrieving source code" +msgstr "获取源代码" + +#: ../../library/inspect.rst:474 +msgid "" +"Get the documentation string for an object, cleaned up with " +":func:`cleandoc`. If the documentation string for an object is not provided " +"and the object is a class, a method, a property or a descriptor, retrieve " +"the documentation string from the inheritance hierarchy." +msgstr "" +"获取对象的文档字符串并通过 :func:`cleandoc` " +"进行清理。如果对象本身并未提供文档字符串并且这个对象是一个类、一个方法、一个属性或者一个描述器,将通过继承层级结构获取文档字符串。" + +#: ../../library/inspect.rst:479 +msgid "Documentation strings are now inherited if not overridden." +msgstr "文档字符串没有被重写的话现在会被继承。" + +#: ../../library/inspect.rst:485 +msgid "" +"Return in a single string any lines of comments immediately preceding the " +"object's source code (for a class, function, or method), or at the top of " +"the Python source file (if the object is a module). If the object's source " +"code is unavailable, return ``None``. This could happen if the object has " +"been defined in C or the interactive shell." +msgstr "" +"任意多行注释作为单一一个字符串返回。对于类、函数和方法,选取紧贴在该对象的源代码之前的注释;对于模块,选取 Python " +"源文件顶部的注释。如果对象的源代码不可获得,返回 ``None``。这可能是因为对象是 C 语言中或者是在交互式命令行中定义的。" + +#: ../../library/inspect.rst:494 +msgid "" +"Return the name of the (text or binary) file in which an object was defined." +" This will fail with a :exc:`TypeError` if the object is a built-in module, " +"class, or function." +msgstr "" +"返回定义了这个对象的文件名(包括文本文件或二进制文件)。如果该对象是一个内置模块、类或函数则会失败并引发一个 :exc:`TypeError`。" + +#: ../../library/inspect.rst:501 +msgid "Try to guess which module an object was defined in." +msgstr "尝试猜测该对象是在哪个模块中定义的。" + +#: ../../library/inspect.rst:506 +msgid "" +"Return the name of the Python source file in which an object was defined. " +"This will fail with a :exc:`TypeError` if the object is a built-in module, " +"class, or function." +msgstr "返回定义了这个对象的 Python 源文件名。如果该对象是一个内置模块、类或函数则会失败并引发一个 :exc:`TypeError`。" + +#: ../../library/inspect.rst:513 +msgid "" +"Return a list of source lines and starting line number for an object. The " +"argument may be a module, class, method, function, traceback, frame, or code" +" object. The source code is returned as a list of the lines corresponding " +"to the object and the line number indicates where in the original source " +"file the first line of code was found. An :exc:`OSError` is raised if the " +"source code cannot be retrieved." +msgstr "" +"返回一个源代码行的列表和对象的起始行。实参可以是一个模块、类、方法、函数、回溯、帧或者代码对象。与该对象相关的源代码会按行构成一个列表,并且会有一个行号表示其中第一行代码出现在源文件的第几行。如果源代码不能被获取,则会引发一个" +" :exc:`OSError`。" + +#: ../../library/inspect.rst:520 ../../library/inspect.rst:532 +msgid "" +":exc:`OSError` is raised instead of :exc:`IOError`, now an alias of the " +"former." +msgstr "现在会引发 :exc:`OSError` 而不是 :exc:`IOError`,后者现在是前者的一个别名。" + +#: ../../library/inspect.rst:527 +msgid "" +"Return the text of the source code for an object. The argument may be a " +"module, class, method, function, traceback, frame, or code object. The " +"source code is returned as a single string. An :exc:`OSError` is raised if " +"the source code cannot be retrieved." +msgstr "" +"返回对象的源代码文本。实参可以是一个模块、类、方法、函数、回溯、帧或者代码对象。源代码会作为单一一个字符串被返回。如果源代码不能被获取,则会引发一个 " +":exc:`OSError`。" + +#: ../../library/inspect.rst:539 +msgid "" +"Clean up indentation from docstrings that are indented to line up with " +"blocks of code." +msgstr "清理文档字符串中为对齐当前代码块进行的缩进" + +#: ../../library/inspect.rst:542 +msgid "" +"All leading whitespace is removed from the first line. Any leading " +"whitespace that can be uniformly removed from the second line onwards is " +"removed. Empty lines at the beginning and end are subsequently removed. " +"Also, all tabs are expanded to spaces." +msgstr "" +"第一行的所有前缀空白符会被移除。从第二行开始所有可以被统一去除的空白符也会被去除。之后,首尾的空白行也会被移除。同时,所有制表符会被展开到空格。" + +#: ../../library/inspect.rst:551 +msgid "Introspecting callables with the Signature object" +msgstr "使用 Signature 对象对可调用对象进行内省" + +#: ../../library/inspect.rst:555 +msgid "" +"The Signature object represents the call signature of a callable object and " +"its return annotation. To retrieve a Signature object, use the " +":func:`signature` function." +msgstr "" +"Signature 对象代表了一个可调用对象的调用签名和返回值标注。要获取一个 Signature 对象,使用 :func:`signature` " +"函数。" + +#: ../../library/inspect.rst:561 +msgid "Return a :class:`Signature` object for the given ``callable``::" +msgstr "返回给定的 ``callable`` 的一个 :class:`Signature` 对象:" + +#: ../../library/inspect.rst:578 +msgid "" +"Accepts a wide range of Python callables, from plain functions and classes " +"to :func:`functools.partial` objects." +msgstr "接受各类的 Python 可调用对象,包括单纯的函数、类,到 :func:`functools.partial` 对象。" + +#: ../../library/inspect.rst:581 +msgid "" +"Raises :exc:`ValueError` if no signature can be provided, and " +":exc:`TypeError` if that type of object is not supported." +msgstr "如果无法提供签名,则会引发 :exc:`ValueError`,如果不支持该类型的对象,则会引发 :exc:`TypeError`。" + +#: ../../library/inspect.rst:584 +msgid "" +"A slash(/) in the signature of a function denotes that the parameters prior " +"to it are positional-only. For more info, see :ref:`the FAQ entry on " +"positional-only parameters `." +msgstr "" +"函数签名中的斜杠(/)表示在它之前的参数是仅限位置的。详见 :ref:`编程常见问题中关于仅限位置参数的条目 `" + +#: ../../library/inspect.rst:588 +msgid "" +"``follow_wrapped`` parameter. Pass ``False`` to get a signature of " +"``callable`` specifically (``callable.__wrapped__`` will not be used to " +"unwrap decorated callables.)" +msgstr "" +"``follow_wrapped`` 形参。传递 ``False`` 来获得特定关于 ``callable`` " +"的签名(``callable.__wrapped__`` 将不会用来解包被修饰的可调用对象)。" + +#: ../../library/inspect.rst:595 +msgid "" +"Some callables may not be introspectable in certain implementations of " +"Python. For example, in CPython, some built-in functions defined in C " +"provide no metadata about their arguments." +msgstr "" +"一些可调用对象可能在特定 Python 实现中无法被内省。例如,在 CPython 中,部分通过 C 语言定义的内置函数不提供关于其参数的元数据。" + +#: ../../library/inspect.rst:602 +msgid "" +"A Signature object represents the call signature of a function and its " +"return annotation. For each parameter accepted by the function it stores a " +":class:`Parameter` object in its :attr:`parameters` collection." +msgstr "" +"一个 Signature 对象代表了一个函数的调用签名和返回值标注。对于函数接受的每个参数,它对应地在自身的 :attr:`parameters` " +"容器中存储一个 :class:`Parameter` 对象。" + +#: ../../library/inspect.rst:606 +msgid "" +"The optional *parameters* argument is a sequence of :class:`Parameter` " +"objects, which is validated to check that there are no parameters with " +"duplicate names, and that the parameters are in the right order, i.e. " +"positional-only first, then positional-or-keyword, and that parameters with " +"defaults follow parameters without defaults." +msgstr "" +"可选参数 *parameters* 是一个 :class:`Parameter` " +"对象组成的序列,它会在之后被验证不存在名字重复的参数,并且参数处于正确的顺序,即仅限位置参数最前,之后紧接着可位置可关键字参数,并且有默认值参数在无默认值参数之前。" + +#: ../../library/inspect.rst:612 +msgid "" +"The optional *return_annotation* argument, can be an arbitrary Python " +"object, is the \"return\" annotation of the callable." +msgstr "可选参数 *return_annotation* 可以是任意 Python 对象,是该可调用对象中“返回值”的标注。" + +#: ../../library/inspect.rst:615 +msgid "" +"Signature objects are *immutable*. Use :meth:`Signature.replace` to make a " +"modified copy." +msgstr " Signature 对象是 *不可变* 的。使用 :meth:`Signature.replace` 来构造一个修改后的副本。" + +#: ../../library/inspect.rst:618 +msgid "Signature objects are picklable and hashable." +msgstr " Signature 对象既可封存又可哈希。" + +#: ../../library/inspect.rst:623 +msgid "" +"A special class-level marker to specify absence of a return annotation." +msgstr "该类的一个特殊标记来明确指出返回值标注缺失。" + +#: ../../library/inspect.rst:627 +msgid "" +"An ordered mapping of parameters' names to the corresponding " +":class:`Parameter` objects. Parameters appear in strict definition order, " +"including keyword-only parameters." +msgstr "一个参数名字到对应 :class:`Parameter` 对象的有序映射。参数以严格的定义顺序出现,包括仅关键字参数。" + +#: ../../library/inspect.rst:631 ../../library/inspect.rst:971 +msgid "" +"Python only explicitly guaranteed that it preserved the declaration order of" +" keyword-only parameters as of version 3.7, although in practice this order " +"had always been preserved in Python 3." +msgstr "Python 从 3.7 版起才显式地保证了它保持仅关键字参数的定义顺序,尽管实践上在 Python 3 中一直保持了这个顺序。" + +#: ../../library/inspect.rst:638 +msgid "" +"The \"return\" annotation for the callable. If the callable has no " +"\"return\" annotation, this attribute is set to :attr:`Signature.empty`." +msgstr "可调用对象的“返回值”标注。如果可调用对象没有“返回值”标注,这个属性会被设置为 :attr:`Signature.empty`。" + +#: ../../library/inspect.rst:643 +msgid "" +"Create a mapping from positional and keyword arguments to parameters. " +"Returns :class:`BoundArguments` if ``*args`` and ``**kwargs`` match the " +"signature, or raises a :exc:`TypeError`." +msgstr "" +"构造一个位置和关键字实参到形参的映射。如果 ``*args`` 和 ``**kwargs`` 符合签名,则返回一个 " +":class:`BoundArguments`;否则引发一个 :exc:`TypeError` 。" + +#: ../../library/inspect.rst:649 +msgid "" +"Works the same way as :meth:`Signature.bind`, but allows the omission of " +"some required arguments (mimics :func:`functools.partial` behavior.) Returns" +" :class:`BoundArguments`, or raises a :exc:`TypeError` if the passed " +"arguments do not match the signature." +msgstr "" +"与 :meth:`Signature.bind` 作用方式相同,但允许省略部分必要的参数(模仿 :func:`functools.partial` " +"的行为)。返回 :class:`BoundArguments`,或者在传入参数不符合签名的情况下,引发一个 :exc:`TypeError`。" + +#: ../../library/inspect.rst:656 +msgid "" +"Create a new Signature instance based on the instance replace was invoked " +"on. It is possible to pass different ``parameters`` and/or " +"``return_annotation`` to override the corresponding properties of the base " +"signature. To remove return_annotation from the copied Signature, pass in " +":attr:`Signature.empty`." +msgstr "" +"基于 replace 函数被调用的目标,创建一个新的 Signature 实例。可以传递不同的 ``parameters`` 和/或 " +"``return_annotation`` 来覆盖原本签名的对应的属性。要从复制的 Signature 中移除 " +"return_annotation,可以传入 :attr:`Signature.empty` 。" + +#: ../../library/inspect.rst:673 +msgid "" +"Return a :class:`Signature` (or its subclass) object for a given callable " +"``obj``. Pass ``follow_wrapped=False`` to get a signature of ``obj`` " +"without unwrapping its ``__wrapped__`` chain." +msgstr "" + +#: ../../library/inspect.rst:677 +msgid "This method simplifies subclassing of :class:`Signature`::" +msgstr "该函数简化了创建 :class:`Signature` 的子类的过程:" + +#: ../../library/inspect.rst:689 +msgid "" +"Parameter objects are *immutable*. Instead of modifying a Parameter object," +" you can use :meth:`Parameter.replace` to create a modified copy." +msgstr "" +" Parameter 对象是 *不可变* 的。不要直接修改 Parameter 对象,而是通过 :meth:`Parameter.replace` " +"来创建一个修改后的副本。" + +#: ../../library/inspect.rst:692 +msgid "Parameter objects are picklable and hashable." +msgstr " Parameter 对象既可封存(pickle)又可哈希。" + +#: ../../library/inspect.rst:697 +msgid "" +"A special class-level marker to specify absence of default values and " +"annotations." +msgstr "该类的一个特殊标记来明确指出默认值和标注的缺失。" + +#: ../../library/inspect.rst:702 +msgid "" +"The name of the parameter as a string. The name must be a valid Python " +"identifier." +msgstr "参数的名字字符串。这个名字必须是一个合法的 Python 标识符。" + +#: ../../library/inspect.rst:707 +msgid "" +"CPython generates implicit parameter names of the form ``.0`` on the code " +"objects used to implement comprehensions and generator expressions." +msgstr "CPython 会为用于实现推导式和生成器表达式的代码对象构造形如 ``.0`` 的隐式形参名。" + +#: ../../library/inspect.rst:711 +msgid "" +"These parameter names are exposed by this module as names like " +"``implicit0``." +msgstr "这些形参名会被此模块暴露为形如 ``implicit0`` 一样的名字。" + +#: ../../library/inspect.rst:717 +msgid "" +"The default value for the parameter. If the parameter has no default value," +" this attribute is set to :attr:`Parameter.empty`." +msgstr "该参数的默认值。如果该参数没有默认值,这个属性会被设置为 :attr:`Parameter.empty` 。" + +#: ../../library/inspect.rst:722 +msgid "" +"The annotation for the parameter. If the parameter has no annotation, this " +"attribute is set to :attr:`Parameter.empty`." +msgstr "该参数的标注。如果该参数没有标注,这个属性会被设置为 :attr:`Parameter.empty` 。" + +#: ../../library/inspect.rst:727 +msgid "" +"Describes how argument values are bound to the parameter. Possible values " +"(accessible via :class:`Parameter`, like ``Parameter.KEYWORD_ONLY``):" +msgstr "" +"描述实参值会如何绑定到形参。可能的取值(可以通过 :class:`Parameter` 获得,比如 ``Parameter.KEYWORD_ONLY``" +" ):" + +#: ../../library/inspect.rst:733 +msgid "Name" +msgstr "名称" + +#: ../../library/inspect.rst:733 +msgid "Meaning" +msgstr "含意" + +#: ../../library/inspect.rst:735 +msgid "*POSITIONAL_ONLY*" +msgstr "*POSITIONAL_ONLY*" + +#: ../../library/inspect.rst:735 +msgid "" +"Value must be supplied as a positional argument. Positional only parameters " +"are those which appear before a ``/`` entry (if present) in a Python " +"function definition." +msgstr "值必须以位置参数的方式提供。仅限位置参数是在函数定义中出现在 ``/`` 之前(如果有)的条目。" + +#: ../../library/inspect.rst:740 +msgid "*POSITIONAL_OR_KEYWORD*" +msgstr "*POSITIONAL_OR_KEYWORD*" + +#: ../../library/inspect.rst:740 +msgid "" +"Value may be supplied as either a keyword or positional argument (this is " +"the standard binding behaviour for functions implemented in Python.)" +msgstr "值既可以以关键字参数的形式提供,也可以以位置参数的形式提供(这是 Python 写成的函数的标准绑定行为的)。" + +#: ../../library/inspect.rst:745 +msgid "*VAR_POSITIONAL*" +msgstr "*VAR_POSITIONAL*" + +#: ../../library/inspect.rst:745 +msgid "" +"A tuple of positional arguments that aren't bound to any other parameter. " +"This corresponds to a ``*args`` parameter in a Python function definition." +msgstr "没有绑定到其他形参的位置实参组成的元组。这对应于 Python 函数定义中的 ``*args`` 形参。" + +#: ../../library/inspect.rst:750 +msgid "*KEYWORD_ONLY*" +msgstr "*KEYWORD_ONLY*" + +#: ../../library/inspect.rst:750 +msgid "" +"Value must be supplied as a keyword argument. Keyword only parameters are " +"those which appear after a ``*`` or ``*args`` entry in a Python function " +"definition." +msgstr "值必须以关键字参数的形式提供。仅限关键字形参是在 Python 函数定义中出现在 ``*`` 或 ``*args`` 之后的条目。" + +#: ../../library/inspect.rst:755 +msgid "*VAR_KEYWORD*" +msgstr "*VAR_KEYWORD*" + +#: ../../library/inspect.rst:755 +msgid "" +"A dict of keyword arguments that aren't bound to any other parameter. This " +"corresponds to a ``**kwargs`` parameter in a Python function definition." +msgstr "一个未绑定到其他形参的关键字参数的字典。这对应于 Python 函数定义中的 ``**kwargs`` 形参。" + +#: ../../library/inspect.rst:761 +msgid "Example: print all keyword-only arguments without default values::" +msgstr "例如,打印所有没有默认值的仅关键字参数:" + +#: ../../library/inspect.rst:775 +msgid "Describes a enum value of Parameter.kind." +msgstr "描述 Parameter.kind 的枚举值。" + +#: ../../library/inspect.rst:779 +msgid "Example: print all descriptions of arguments::" +msgstr "例子:打印所有参数的描述:" + +#: ../../library/inspect.rst:794 +msgid "" +"Create a new Parameter instance based on the instance replaced was invoked " +"on. To override a :class:`Parameter` attribute, pass the corresponding " +"argument. To remove a default value or/and an annotation from a Parameter, " +"pass :attr:`Parameter.empty`." +msgstr "" +"基于 replace 函数被调用的目标,创建一个新的 Parameter 实例。要覆写 :class:`Parameter` " +"的属性,传递对应的参数。要移除 Parameter 的默认值和/或标注,传递 :attr:`Parameter.empty`。" + +#: ../../library/inspect.rst:812 +msgid "" +"In Python 3.3 Parameter objects were allowed to have ``name`` set to " +"``None`` if their ``kind`` was set to ``POSITIONAL_ONLY``. This is no longer" +" permitted." +msgstr "" +"在 Python 3.3 中, Parameter 对象当 ``kind`` 为 ``POSITIONAL_ONLY`` 时允许 ``name`` " +"被设置为 ``None``。这现在已不再被允许。" + +#: ../../library/inspect.rst:819 +msgid "" +"Result of a :meth:`Signature.bind` or :meth:`Signature.bind_partial` call. " +"Holds the mapping of arguments to the function's parameters." +msgstr "" +"调用 :meth:`Signature.bind` 或 :meth:`Signature.bind_partial` " +"的结果。容纳实参到函数的形参的映射。" + +#: ../../library/inspect.rst:824 +msgid "" +"A mutable mapping of parameters' names to arguments' values. Contains only " +"explicitly bound arguments. Changes in :attr:`arguments` will reflect in " +":attr:`args` and :attr:`kwargs`." +msgstr "" +"一个形参名到实参值的可变映射。仅包含显式绑定的参数。对 :attr:`arguments` 的修改会反映到 :attr:`args` 和 " +":attr:`kwargs` 上。" + +#: ../../library/inspect.rst:828 +msgid "" +"Should be used in conjunction with :attr:`Signature.parameters` for any " +"argument processing purposes." +msgstr "应当在任何参数处理目的中与 :attr:`Signature.parameters` 结合使用。" + +#: ../../library/inspect.rst:833 +msgid "" +"Arguments for which :meth:`Signature.bind` or :meth:`Signature.bind_partial`" +" relied on a default value are skipped. However, if needed, use " +":meth:`BoundArguments.apply_defaults` to add them." +msgstr "" +" :meth:`Signature.bind` 和 :meth:`Signature.bind_partial` " +"中采用默认值的参数被跳过。然而,如果有需要的话,可以使用 :meth:`BoundArguments.apply_defaults` 来添加它们。" + +#: ../../library/inspect.rst:838 +msgid "" +":attr:`arguments` is now of type :class:`dict`. Formerly, it was of type " +":class:`collections.OrderedDict`." +msgstr "" +" :attr:`arguments` 现在的类型是 :class:`dict`。之前,它的类型是 " +":class:`collections.OrderedDict`。" + +#: ../../library/inspect.rst:844 +msgid "" +"A tuple of positional arguments values. Dynamically computed from the " +":attr:`arguments` attribute." +msgstr "位置参数的值的元组。由 :attr:`arguments` 属性动态计算。" + +#: ../../library/inspect.rst:849 +msgid "" +"A dict of keyword arguments values. Dynamically computed from the " +":attr:`arguments` attribute." +msgstr "关键字参数值的字典。由 :attr:`arguments` 属性动态计算。" + +#: ../../library/inspect.rst:854 +msgid "A reference to the parent :class:`Signature` object." +msgstr "向所属 :class:`Signature` 对象的一个引用。" + +#: ../../library/inspect.rst:858 +msgid "Set default values for missing arguments." +msgstr "设置缺失的参数的默认值。" + +#: ../../library/inspect.rst:860 +msgid "" +"For variable-positional arguments (``*args``) the default is an empty tuple." +msgstr "对于变长位置参数(``*args``),默认值是一个空元组。" + +#: ../../library/inspect.rst:863 +msgid "" +"For variable-keyword arguments (``**kwargs``) the default is an empty dict." +msgstr "对于变长关键字参数(``**kwargs``)默认值是一个空字典。" + +#: ../../library/inspect.rst:876 +msgid "" +"The :attr:`args` and :attr:`kwargs` properties can be used to invoke " +"functions::" +msgstr " :attr:`args` 和 :attr:`kwargs` 属性可以被用于调用函数:" + +#: ../../library/inspect.rst:889 +msgid ":pep:`362` - Function Signature Object." +msgstr ":pep:`362` - 函数签名对象。" + +#: ../../library/inspect.rst:890 +msgid "The detailed specification, implementation details and examples." +msgstr "包含具体的规范,实现细节和样例。" + +#: ../../library/inspect.rst:896 +msgid "Classes and functions" +msgstr "类与函数" + +#: ../../library/inspect.rst:900 +msgid "" +"Arrange the given list of classes into a hierarchy of nested lists. Where a " +"nested list appears, it contains classes derived from the class whose entry " +"immediately precedes the list. Each entry is a 2-tuple containing a class " +"and a tuple of its base classes. If the *unique* argument is true, exactly " +"one entry appears in the returned structure for each class in the given " +"list. Otherwise, classes using multiple inheritance and their descendants " +"will appear multiple times." +msgstr "" +"将给定的类的列表组织成嵌套列表的层级结构。每当一个内层列表出现时,它包含的类均派生自紧接着该列表之前的条目的类。每个条目均是一个二元组,包含一个类和它的基类组成的元组。如果" +" *unique* 参数为真值,则给定列表中的每个类将恰有一个对应条目。否则,运用了多重继承的类和它们的后代将出现多次。" + +#: ../../library/inspect.rst:911 +msgid "" +"Get the names and default values of a Python function's parameters. A " +":term:`named tuple` ``ArgSpec(args, varargs, keywords, defaults)`` is " +"returned. *args* is a list of the parameter names. *varargs* and *keywords* " +"are the names of the ``*`` and ``**`` parameters or ``None``. *defaults* is " +"a tuple of default argument values or ``None`` if there are no default " +"arguments; if this tuple has *n* elements, they correspond to the last *n* " +"elements listed in *args*." +msgstr "" +"获取一个 Python 函数的形参的名字和默认值。将返回一个 :term:`具名元组 ` ``ArgSpec(args, " +"varargs, keywords, defaults)``。 *args* 是一个形参名字的列表。 *varargs* 和 *keywords* 是 " +"``*`` 和 ``**`` 形参的名字或 ``None``。 *defaults* 是一个默认参数值的元组或没有默认值时取 " +"``None``。如果该元组有 *n* 个元素,则它们对应 *args* 中的最后 *n* 个元素。" + +#: ../../library/inspect.rst:919 +msgid "" +"Use :func:`getfullargspec` for an updated API that is usually a drop-in " +"replacement, but also correctly handles function annotations and keyword-" +"only parameters." +msgstr "通常可以替换为使用更新后的 API :func:`getfullargspec`,后者还能正确处理函数标注和仅限关键字形参。" + +#: ../../library/inspect.rst:924 +msgid "" +"Alternatively, use :func:`signature` and :ref:`Signature Object `, which provide a more structured introspection API for " +"callables." +msgstr "" +"又或者,使用 :func:`signature` 和 :ref:`Signature 对象 `,这提供一个更加结构化的处理可调用对象的内省 API。" + +#: ../../library/inspect.rst:931 +msgid "" +"Get the names and default values of a Python function's parameters. A " +":term:`named tuple` is returned:" +msgstr "获取一个 Python 函数的形参的名字和默认值。将返回一个 :term:`具名元组 `:" + +#: ../../library/inspect.rst:934 +msgid "" +"``FullArgSpec(args, varargs, varkw, defaults, kwonlyargs, kwonlydefaults, " +"annotations)``" +msgstr "" +"``FullArgSpec(args, varargs, varkw, defaults, kwonlyargs, kwonlydefaults, " +"annotations)``" + +#: ../../library/inspect.rst:937 +msgid "" +"*args* is a list of the positional parameter names. *varargs* is the name of" +" the ``*`` parameter or ``None`` if arbitrary positional arguments are not " +"accepted. *varkw* is the name of the ``**`` parameter or ``None`` if " +"arbitrary keyword arguments are not accepted. *defaults* is an *n*-tuple of " +"default argument values corresponding to the last *n* positional parameters," +" or ``None`` if there are no such defaults defined. *kwonlyargs* is a list " +"of keyword-only parameter names in declaration order. *kwonlydefaults* is a " +"dictionary mapping parameter names from *kwonlyargs* to the default values " +"used if no argument is supplied. *annotations* is a dictionary mapping " +"parameter names to annotations. The special key ``\"return\"`` is used to " +"report the function return value annotation (if any)." +msgstr "" +"*args* 是一个位置参数的名字的列表。 *varargs* 是 ``*`` 形参的名字或 ``None`` 表示不接受任意长位置参数时。 " +"*varkw* 是 ``**`` 参数的名字,或 ``None`` 表示不接受任意关键字参数。 *defaults* 是一个包含了默认参数值的 *n* " +"元组分别对应最后 *n* 个位置参数,或 ``None`` 则表示没有默认值。 *kwonlyargs* 是一个仅关键词参数列表,保持定义时的顺序。 " +"*kwonlydefaults* 是一个字典映射自 *kwonlyargs* 中包含的形参名。 *annotations* " +"是一个字典,包含形参值到标注的映射。其中包含一个特殊的键 ``\"return\"`` 代表函数返回值的标注(如果有的话)。" + +#: ../../library/inspect.rst:952 +msgid "" +"Note that :func:`signature` and :ref:`Signature Object ` provide the recommended API for callable introspection, and support" +" additional behaviours (like positional-only arguments) that are sometimes " +"encountered in extension module APIs. This function is retained primarily " +"for use in code that needs to maintain compatibility with the Python 2 " +"``inspect`` module API." +msgstr "" +"注意: :func:`signature` 和 :ref:`Signature 对象 ` " +"提供可调用对象内省更推荐的 API,并且支持扩展模块 API 中可能出现的额外的行为(比如仅限位置参数)。该函数被保留的主要原因是保持兼容 Python" +" 2 的 ``inspect`` 模块 API。" + +#: ../../library/inspect.rst:959 +msgid "" +"This function is now based on :func:`signature`, but still ignores " +"``__wrapped__`` attributes and includes the already bound first parameter in" +" the signature output for bound methods." +msgstr "" +"该函数现在基于 :func:`signature` 但仍然忽略 ``__wrapped__`` 属性,并且在签名中包含绑定方法中的第一个绑定参数。" + +#: ../../library/inspect.rst:964 +msgid "" +"This method was previously documented as deprecated in favour of " +":func:`signature` in Python 3.5, but that decision has been reversed in " +"order to restore a clearly supported standard interface for single-source " +"Python 2/3 code migrating away from the legacy :func:`getargspec` API." +msgstr "" +"该方法在 Python 3.5 中曾因 :func:`signature` " +"被文档归为弃用。但该决定已被推翻以恢复一个明确受支持的标准接口,以便运用一份源码通用 Python 2/3 间遗留的 " +":func:`getargspec` API 的迁移。" + +#: ../../library/inspect.rst:979 +msgid "" +"Get information about arguments passed into a particular frame. A " +":term:`named tuple` ``ArgInfo(args, varargs, keywords, locals)`` is " +"returned. *args* is a list of the argument names. *varargs* and *keywords* " +"are the names of the ``*`` and ``**`` arguments or ``None``. *locals* is " +"the locals dictionary of the given frame." +msgstr "" +"获取传入特定的帧的实参的信息。将返回一个 :term:`具名元组 ` ``ArgInfo(args, varargs, " +"keywords, locals)``。 *args* 是一个参数名字的列表。 *varargs* 和 *keyword* 是 ``*`` 和 " +"``**`` 参数的名字或 ``None``。 *locals* 是给定的帧的局部环境字典。" + +#: ../../library/inspect.rst:986 ../../library/inspect.rst:1023 +msgid "This function was inadvertently marked as deprecated in Python 3.5." +msgstr "该函数因疏忽在 Python 3.5 中被错误地标记为弃用。" + +#: ../../library/inspect.rst:991 +msgid "" +"Format a pretty argument spec from the values returned by " +":func:`getfullargspec`." +msgstr "将 :func:`getfullargspec` 的返回值格式化为美观的参数规格。" + +#: ../../library/inspect.rst:994 +msgid "" +"The first seven arguments are (``args``, ``varargs``, ``varkw``, " +"``defaults``, ``kwonlyargs``, ``kwonlydefaults``, ``annotations``)." +msgstr "" +"最初的七个参数是 (``args``, ``varargs``, ``varkw``, ``defaults``, ``kwonlyargs``, " +"``kwonlydefaults``, ``annotations``) 。" + +#: ../../library/inspect.rst:997 +msgid "" +"The other six arguments are functions that are called to turn argument " +"names, ``*`` argument name, ``**`` argument name, default values, return " +"annotation and individual annotations into strings, respectively." +msgstr "其他6个参数分别是会被调用以转化参数名、``*`` 参数名、``**`` 参数名、默认值、返回标注和独立标注为字符串的函数。" + +#: ../../library/inspect.rst:1001 +msgid "For example:" +msgstr "例如:" + +#: ../../library/inspect.rst:1010 +msgid "" +"Use :func:`signature` and :ref:`Signature Object `, which provide a better introspecting API for callables." +msgstr "" +"使用 :func:`signature` 和 :ref:`Signature 对象 `,它为可调用对象提供一个更好的内省 API。" + +#: ../../library/inspect.rst:1018 +msgid "" +"Format a pretty argument spec from the four values returned by " +":func:`getargvalues`. The format\\* arguments are the corresponding " +"optional formatting functions that are called to turn names and values into " +"strings." +msgstr "" +"将 :func:`getargvalues` 返回的四个值格式化为美观的参数规格。 format\\* " +"的参数是对应的可选格式化函数以转化名字和值为字符串。" + +#: ../../library/inspect.rst:1028 +msgid "" +"Return a tuple of class cls's base classes, including cls, in method " +"resolution order. No class appears more than once in this tuple. Note that " +"the method resolution order depends on cls's type. Unless a very peculiar " +"user-defined metatype is in use, cls will be the first element of the tuple." +msgstr "" +"返回由类 cls 的全部基类按方法解析顺序组成的元组,包括 cls 本身。所有类不会在此元组中出现多于一次。注意方法解析顺序取决于 cls " +"的类型。除非使用一个非常奇怪的用户定义元类型,否则 cls 会是元组的第一个元素。" + +#: ../../library/inspect.rst:1036 +msgid "" +"Bind the *args* and *kwds* to the argument names of the Python function or " +"method *func*, as if it was called with them. For bound methods, bind also " +"the first argument (typically named ``self``) to the associated instance. A " +"dict is returned, mapping the argument names (including the names of the " +"``*`` and ``**`` arguments, if any) to their values from *args* and *kwds*. " +"In case of invoking *func* incorrectly, i.e. whenever ``func(*args, " +"**kwds)`` would raise an exception because of incompatible signature, an " +"exception of the same type and the same or similar message is raised. For " +"example::" +msgstr "" +"仿照调用方式绑定 *args* 和 *kwds* 到 Python 函数或方法 *func* 参数名。对于绑定方法,也绑定第一个参数(通常命名为 " +"``self``)到关联的实例。返回一个字典,映射自参数名(包括可能存在的 ``*`` 和 ``**`` 参数)到他们对应于 *args* 和 " +"*kwds* 中的值。假使 *func* 被错误地调用,即是说 ``func(*args, **kwds)`` " +"会因函数签名不一致引发一个异常,那么也会引发一个相同种类的异常,并附上相同或类似的消息。例如:" + +#: ../../library/inspect.rst:1059 +msgid "Use :meth:`Signature.bind` and :meth:`Signature.bind_partial` instead." +msgstr "改使用 :meth:`Signature.bind` 和 :meth:`Signature.bind_partial`。" + +#: ../../library/inspect.rst:1065 +msgid "" +"Get the mapping of external name references in a Python function or method " +"*func* to their current values. A :term:`named tuple` " +"``ClosureVars(nonlocals, globals, builtins, unbound)`` is returned. " +"*nonlocals* maps referenced names to lexical closure variables, *globals* to" +" the function's module globals and *builtins* to the builtins visible from " +"the function body. *unbound* is the set of names referenced in the function " +"that could not be resolved at all given the current module globals and " +"builtins." +msgstr "" +"获取自 Python 函数或方法 *func* 引用的外部名字到它们的值的映射。返回一个 :term:`具名元组 ` " +"``ClosureVars(nonlocals, globals, builtins, unbound)``。 *nonlocals* " +"映射引用的名字到词法闭包变量,*globals* 映射到函数的模块级全局, *builtins* 映射到函数体内可见的内置变量。 *unbound* " +"是在函数中引用但不能解析到给定的模块全局和内置变量的名字的集合。" + +#: ../../library/inspect.rst:1074 +msgid "" +":exc:`TypeError` is raised if *func* is not a Python function or method." +msgstr "如果 *func* 不是 Python 函数或方法,将引发 :exc:`TypeError`。" + +#: ../../library/inspect.rst:1081 +msgid "" +"Get the object wrapped by *func*. It follows the chain of " +":attr:`__wrapped__` attributes returning the last object in the chain." +msgstr "获取 *func* 所包装的对象。它追踪 :attr:`__wrapped__` 属性链并返回最后一个对象。" + +#: ../../library/inspect.rst:1084 +msgid "" +"*stop* is an optional callback accepting an object in the wrapper chain as " +"its sole argument that allows the unwrapping to be terminated early if the " +"callback returns a true value. If the callback never returns a true value, " +"the last object in the chain is returned as usual. For example, " +":func:`signature` uses this to stop unwrapping if any object in the chain " +"has a ``__signature__`` attribute defined." +msgstr "" +"*stop* " +"是一个可选的回调,接受包装链的一个对象作为唯一参数,以允许通过让回调返回真值使解包装更早中止。如果回调不曾返回一个真值,将如常返回链中的最后一个对象。例如," +" :func:`signature` 使用该参数来在遇到具有 ``__signature__`` 参数的对象时停止解包装。" + +#: ../../library/inspect.rst:1091 +msgid ":exc:`ValueError` is raised if a cycle is encountered." +msgstr "如果遇到循环,则引发 :exc:`ValueError`。" + +#: ../../library/inspect.rst:1099 +msgid "The interpreter stack" +msgstr "解释器栈" + +#: ../../library/inspect.rst:1101 +msgid "" +"When the following functions return \"frame records,\" each record is a " +":term:`named tuple` ``FrameInfo(frame, filename, lineno, function, " +"code_context, index)``. The tuple contains the frame object, the filename, " +"the line number of the current line, the function name, a list of lines of " +"context from the source code, and the index of the current line within that " +"list." +msgstr "" +"当下列函数返回“帧记录”时,每个记录是一个 :term:`具名元组 ` ``FrameInfo(frame, " +"filename, lineno, function, code_context, " +"index)``。该元组包含帧对象、文件名、当前行的行号、函数名、来源于源代码的若干行上下文组成的列表和当前行在该列表中的索引。" + +#: ../../library/inspect.rst:1109 +msgid "Return a named tuple instead of a tuple." +msgstr "不再返回一个元组而是返回一个具名元组。" + +#: ../../library/inspect.rst:1114 +msgid "" +"Keeping references to frame objects, as found in the first element of the " +"frame records these functions return, can cause your program to create " +"reference cycles. Once a reference cycle has been created, the lifespan of " +"all objects which can be accessed from the objects which form the cycle can " +"become much longer even if Python's optional cycle detector is enabled. If " +"such cycles must be created, it is important to ensure they are explicitly " +"broken to avoid the delayed destruction of objects and increased memory " +"consumption which occurs." +msgstr "" +"保留帧对象的引用(可见于这些函数返回的帧记录的第一个元素)会导致你的程序产生循环引用。每当一个循环引用被创建,所有可从产生循环的对象访问的对象的生命周期将会被大幅度延长,即便" +" Python 的可选的循环检测器被启用。如果这类循环必须被创建,确保它们会被显式地打破以避免对象销毁被延迟从而导致占用内存增加。" + +#: ../../library/inspect.rst:1122 +msgid "" +"Though the cycle detector will catch these, destruction of the frames (and " +"local variables) can be made deterministic by removing the cycle in a " +":keyword:`finally` clause. This is also important if the cycle detector was" +" disabled when Python was compiled or using :func:`gc.disable`. For " +"example::" +msgstr "" +"尽管循环检测器能够处理这种情况,这些帧(包括其局部变量)的销毁可以通过在 :keyword:`finally` " +"子句中移除循环来产生确定的行为。对于循环检测器在编译 Python 时被禁用或者使用 :func:`gc.disable` " +"时,这样处理更加尤为重要。比如:" + +#: ../../library/inspect.rst:1134 +msgid "" +"If you want to keep the frame around (for example to print a traceback " +"later), you can also break reference cycles by using the :meth:`frame.clear`" +" method." +msgstr "如果你希望保持帧更长的时间(比如在之后打印回溯),你也可以通过 :meth:`frame.clear` 方法打破循环引用。" + +#: ../../library/inspect.rst:1138 +msgid "" +"The optional *context* argument supported by most of these functions " +"specifies the number of lines of context to return, which are centered " +"around the current line." +msgstr "大部分这些函数支持的可选的 *context* 参数指定返回时包含的上下文的行数,以当前行为中心。" + +#: ../../library/inspect.rst:1145 +msgid "" +"Get information about a frame or traceback object. A :term:`named tuple` " +"``Traceback(filename, lineno, function, code_context, index)`` is returned." +msgstr "" +"获取一个帧或者一个回溯对象的信息。返回一个 :term:`具名元组 ` ``Traceback(filename, " +"lineno, function, code_context, index)``。" + +#: ../../library/inspect.rst:1151 +msgid "" +"Get a list of frame records for a frame and all outer frames. These frames " +"represent the calls that lead to the creation of *frame*. The first entry in" +" the returned list represents *frame*; the last entry represents the " +"outermost call on *frame*'s stack." +msgstr "" +"获取某帧及其所有外部帧的帧记录的列表。这些帧表示了导致 *frame* 被创建的一系列调用。返回的列表中的第一个记录代表了 *frame* " +"本身;最后一个记录代表了 *frame* 的栈上的最外层的调用。" + +#: ../../library/inspect.rst:1156 ../../library/inspect.rst:1169 +#: ../../library/inspect.rst:1193 ../../library/inspect.rst:1206 +msgid "" +"A list of :term:`named tuples ` ``FrameInfo(frame, filename, " +"lineno, function, code_context, index)`` is returned." +msgstr "" +"返回一个 :term:`具名元组 ` ``FrameInfo(frame, filename, lineno, " +"function, code_context, index)`` 的列表。" + +#: ../../library/inspect.rst:1164 +msgid "" +"Get a list of frame records for a traceback's frame and all inner frames. " +"These frames represent calls made as a consequence of *frame*. The first " +"entry in the list represents *traceback*; the last entry represents where " +"the exception was raised." +msgstr "" +"获取一个回溯所在的帧和它所有的内部的帧的列表。这些帧代表了作为 *frame* 的后续的帧。第一条记录代表了 *traceback* " +"本身;最后一条记录代表了引发异常的位置。" + +#: ../../library/inspect.rst:1177 +msgid "Return the frame object for the caller's stack frame." +msgstr "返回调用者的栈帧对应的帧对象。" + +#: ../../library/inspect.rst:1181 +msgid "" +"This function relies on Python stack frame support in the interpreter, which" +" isn't guaranteed to exist in all implementations of Python. If running in " +"an implementation without Python stack frame support this function returns " +"``None``." +msgstr "" +"该函数依赖于 Python 解释器对于栈帧的支持,这并非在 Python 的所有实现中被保证。该函数在不支持Python 栈帧的实现中运行会返回 " +"``None``。" + +#: ../../library/inspect.rst:1189 +msgid "" +"Return a list of frame records for the caller's stack. The first entry in " +"the returned list represents the caller; the last entry represents the " +"outermost call on the stack." +msgstr "返回调用者的栈的帧记录列表。返回的列表中的第一个记录代表调用者,最后一个记录代表了栈上最外层的调用。" + +#: ../../library/inspect.rst:1201 +msgid "" +"Return a list of frame records for the stack between the current frame and " +"the frame in which an exception currently being handled was raised in. The " +"first entry in the list represents the caller; the last entry represents " +"where the exception was raised." +msgstr "返回介于当前帧和引发了当前正在处理的异常的帧之间的所有帧记录的列表。列表中的第一条记录代表调用者;最后一条记录代表了引发异常的地方。" + +#: ../../library/inspect.rst:1213 +msgid "Fetching attributes statically" +msgstr "静态地获取属性" + +#: ../../library/inspect.rst:1215 +msgid "" +"Both :func:`getattr` and :func:`hasattr` can trigger code execution when " +"fetching or checking for the existence of attributes. Descriptors, like " +"properties, will be invoked and :meth:`__getattr__` and " +":meth:`__getattribute__` may be called." +msgstr "" +" :func:`getattr` 和 :func:`hasattr` 都可能会在获取或者判断属性是否存在时触发代码执行。描述符,就和特性一样,会被调用," +" :meth:`__getattr__` 和 :meth:`__getattribute__` 可能会被调用。" + +#: ../../library/inspect.rst:1220 +msgid "" +"For cases where you want passive introspection, like documentation tools, " +"this can be inconvenient. :func:`getattr_static` has the same signature as " +":func:`getattr` but avoids executing code when it fetches attributes." +msgstr "" +"对于你想要静态地内省的情况,比如文档工具,这会显得不方便。 :func:`getattr_static` 拥有与 :func:`getattr` " +"相同的签名,但避免了获取属性时执行代码。" + +#: ../../library/inspect.rst:1226 +msgid "" +"Retrieve attributes without triggering dynamic lookup via the descriptor " +"protocol, :meth:`__getattr__` or :meth:`__getattribute__`." +msgstr "获取属性而不触发描述器协议的动态查找能力 :meth:`__getattr__` 或 :meth:`__getattribute__`。" + +#: ../../library/inspect.rst:1229 +msgid "" +"Note: this function may not be able to retrieve all attributes that getattr " +"can fetch (like dynamically created attributes) and may find attributes that" +" getattr can't (like descriptors that raise AttributeError). It can also " +"return descriptors objects instead of instance members." +msgstr "" +"注意:该函数可能无法获取 getattr 能获取的全部的属性(比如动态地创建的属性),并且可能发现一些 getattr 无法找到的属性(比如描述器会引发" +" AttributeError)。它也能够返回描述器对象本身而非实例成员。" + +#: ../../library/inspect.rst:1235 +msgid "" +"If the instance :attr:`~object.__dict__` is shadowed by another member (for " +"example a property) then this function will be unable to find instance " +"members." +msgstr "如果实例的 :attr:`~object.__dict__` 被其他成员遮盖(比如一个特性)则该函数无法找到实例成员。" + +#: ../../library/inspect.rst:1241 +msgid "" +":func:`getattr_static` does not resolve descriptors, for example slot " +"descriptors or getset descriptors on objects implemented in C. The " +"descriptor object is returned instead of the underlying attribute." +msgstr "" +" :func:`getattr_static` 不解析描述器。比如槽描述器或 C 语言中实现的 getset " +"描述器。该描述器对象会被直接返回,而不处理底层属性。" + +#: ../../library/inspect.rst:1245 +msgid "" +"You can handle these with code like the following. Note that for arbitrary " +"getset descriptors invoking these may trigger code execution::" +msgstr "你可以用类似下方的代码的方法处理此事。注意,对于任意 getset 描述符,使用这段代码仍可能触发代码执行。" + +#: ../../library/inspect.rst:1271 +msgid "Current State of Generators and Coroutines" +msgstr "生成器和协程的当前状态" + +#: ../../library/inspect.rst:1273 +msgid "" +"When implementing coroutine schedulers and for other advanced uses of " +"generators, it is useful to determine whether a generator is currently " +"executing, is waiting to start or resume or execution, or has already " +"terminated. :func:`getgeneratorstate` allows the current state of a " +"generator to be determined easily." +msgstr "" +"当实现协程调度器或其他更高级的生成器用途时,判断一个生成器是正在执行、等待启动或继续或执行,又或者已经被终止是非常有用的。 " +":func:`getgeneratorstate` 允许方便地判断一个生成器的当前状态。" + +#: ../../library/inspect.rst:1281 +msgid "Get current state of a generator-iterator." +msgstr "获取生成器迭代器的当前状态。" + +#: ../../library/inspect.rst:1287 ../../library/inspect.rst:1302 +msgid "Possible states are:" +msgstr "可能的状态是:" + +#: ../../library/inspect.rst:1284 +msgid "GEN_CREATED: Waiting to start execution." +msgstr "GEN_CREATED:等待开始执行。" + +#: ../../library/inspect.rst:1285 +msgid "GEN_RUNNING: Currently being executed by the interpreter." +msgstr "GEN_RUNNING:正在被解释器执行。" + +#: ../../library/inspect.rst:1286 +msgid "GEN_SUSPENDED: Currently suspended at a yield expression." +msgstr "GEN_SUSPENDED:当前挂起于一个 yield 表达式。" + +#: ../../library/inspect.rst:1287 +msgid "GEN_CLOSED: Execution has completed." +msgstr "GEN_CLOSED:执行已经完成。" + +#: ../../library/inspect.rst:1293 +msgid "" +"Get current state of a coroutine object. The function is intended to be " +"used with coroutine objects created by :keyword:`async def` functions, but " +"will accept any coroutine-like object that has ``cr_running`` and " +"``cr_frame`` attributes." +msgstr "" +"获取协程对象的当前状态。该函数设计为用于使用 :keyword:`async def` 函数创建的协程函数,但也能接受任何包括 " +"``cr_running`` 和 ``cr_frame`` 的类似协程的对象。" + +#: ../../library/inspect.rst:1299 +msgid "CORO_CREATED: Waiting to start execution." +msgstr "CORO_CREATED:等待开始执行。" + +#: ../../library/inspect.rst:1300 +msgid "CORO_RUNNING: Currently being executed by the interpreter." +msgstr "CORO_RUNNING:当前正在被解释器执行。" + +#: ../../library/inspect.rst:1301 +msgid "CORO_SUSPENDED: Currently suspended at an await expression." +msgstr "CORO_SUSPENDED:当前挂起于一个 await 表达式。" + +#: ../../library/inspect.rst:1302 +msgid "CORO_CLOSED: Execution has completed." +msgstr "CORO_CLOSED:执行已经完成。" + +#: ../../library/inspect.rst:1306 +msgid "" +"The current internal state of the generator can also be queried. This is " +"mostly useful for testing purposes, to ensure that internal state is being " +"updated as expected:" +msgstr "生成器当前的内部状态也可以被查询。这通常在测试目的中最为有用,来保证内部状态如预期一样被更新:" + +#: ../../library/inspect.rst:1312 +msgid "" +"Get the mapping of live local variables in *generator* to their current " +"values. A dictionary is returned that maps from variable names to values. " +"This is the equivalent of calling :func:`locals` in the body of the " +"generator, and all the same caveats apply." +msgstr "" +"获取 *generator* 里的实时局部变量到当前值的映射。返回一个由名字映射到值的字典。这与在生成器的主体内调用 :func:`locals` " +"是等效的,并且相同的警告也适用。" + +#: ../../library/inspect.rst:1317 +msgid "" +"If *generator* is a :term:`generator` with no currently associated frame, " +"then an empty dictionary is returned. :exc:`TypeError` is raised if " +"*generator* is not a Python generator object." +msgstr "" +"如果 *generator* 是一个没有关联帧的 :term:`生成器 `,则返回一个空字典。如果 *generator* " +"不是一个 Python 生成器对象,则引发 :exc:`TypeError`。" + +#: ../../library/inspect.rst:1323 +msgid "" +"This function relies on the generator exposing a Python stack frame for " +"introspection, which isn't guaranteed to be the case in all implementations " +"of Python. In such cases, this function will always return an empty " +"dictionary." +msgstr "" +"该函数依赖于生成器为内省暴露一个 Python 栈帧,这并非在 Python 的所有实现中被保证。在这种情况下,该函数将永远返回一个空字典。" + +#: ../../library/inspect.rst:1332 +msgid "" +"This function is analogous to :func:`~inspect.getgeneratorlocals`, but works" +" for coroutine objects created by :keyword:`async def` functions." +msgstr "" +"该函数可类比于 :func:`~inspect.getgeneratorlocals`,只是作用于由 :keyword:`async def` " +"函数创建的协程。" + +#: ../../library/inspect.rst:1341 +msgid "Code Objects Bit Flags" +msgstr "代码对象位标志" + +#: ../../library/inspect.rst:1343 +msgid "" +"Python code objects have a ``co_flags`` attribute, which is a bitmap of the " +"following flags:" +msgstr "Python 代码对象有一个 ``co_flags`` 属性,它是下列标志的位图。" + +#: ../../library/inspect.rst:1348 +msgid "The code object is optimized, using fast locals." +msgstr "代码对象已经经过优化,会采用快速局部变量。" + +#: ../../library/inspect.rst:1352 +msgid "" +"If set, a new dict will be created for the frame's ``f_locals`` when the " +"code object is executed." +msgstr "如果被置位,当代码对象被执行时会创建一个新的字典作为帧的 ``f_locals``。" + +#: ../../library/inspect.rst:1357 +msgid "The code object has a variable positional parameter (``*args``-like)." +msgstr "代码对象拥有一个变长位置形参(类似 ``*args``)。" + +#: ../../library/inspect.rst:1361 +msgid "The code object has a variable keyword parameter (``**kwargs``-like)." +msgstr "代码对象拥有一个可变关键字形参 (类似 ``**kwrags``)。" + +#: ../../library/inspect.rst:1365 +msgid "The flag is set when the code object is a nested function." +msgstr "该标志当代码对象是一个嵌套函数时被置位。" + +#: ../../library/inspect.rst:1369 +msgid "" +"The flag is set when the code object is a generator function, i.e. a " +"generator object is returned when the code object is executed." +msgstr "当代码对象是一个生成器函数,即调用时会返回一个生成器对象,则该标志被置位。" + +#: ../../library/inspect.rst:1374 +msgid "The flag is set if there are no free or cell variables." +msgstr "当没有自由或单元变量时,标志被置位。" + +#: ../../library/inspect.rst:1378 +msgid "" +"The flag is set when the code object is a coroutine function. When the code " +"object is executed it returns a coroutine object. See :pep:`492` for more " +"details." +msgstr "当代码对象是一个协程函数时被置位。当代码对象被执行时它返回一个协程。详见 :pep:`492`。" + +#: ../../library/inspect.rst:1386 +msgid "" +"The flag is used to transform generators into generator-based coroutines. " +"Generator objects with this flag can be used in ``await`` expression, and " +"can ``yield from`` coroutine objects. See :pep:`492` for more details." +msgstr "" +"该标志被用于将生成器转变为基于生成器的协程。包含此标志的生成器对象可以被用于 ``await`` 表达式,并可以 ``yield from`` " +"协程对象。详见 :pep:`492`。" + +#: ../../library/inspect.rst:1395 +msgid "" +"The flag is set when the code object is an asynchronous generator function." +" When the code object is executed it returns an asynchronous generator " +"object. See :pep:`525` for more details." +msgstr "当代码对象是一个异步生成器函数时该标志被置位。当代码对象被运行时它将返回一个异步生成器对象。详见 :pep:`525`。" + +#: ../../library/inspect.rst:1402 +msgid "" +"The flags are specific to CPython, and may not be defined in other Python " +"implementations. Furthermore, the flags are an implementation detail, and " +"can be removed or deprecated in future Python releases. It's recommended to " +"use public APIs from the :mod:`inspect` module for any introspection needs." +msgstr "" +"这些标志特指于 CPython,并且在其他 Python 实现中可能从未被定义。更进一步地说,这些标志是一种实现细节,并且可能在将来的 Python " +"发行中被移除或弃用。推荐使用 :mod:`inspect` 模块的公共 API 来进行任何内省需求。" + +#: ../../library/inspect.rst:1412 +msgid "Command Line Interface" +msgstr "命令行界面" + +#: ../../library/inspect.rst:1414 +msgid "" +"The :mod:`inspect` module also provides a basic introspection capability " +"from the command line." +msgstr ":mod:`inspect` 模块也提供一个从命令行使用基本的内省能力。" + +#: ../../library/inspect.rst:1419 +msgid "" +"By default, accepts the name of a module and prints the source of that " +"module. A class or function within the module can be printed instead by " +"appended a colon and the qualified name of the target object." +msgstr "默认地,命令行接受一个模块的名字并打印模块的源代码。也可通过后缀一个冒号和目标对象的限定名称来打印一个类或者一个函数。" + +#: ../../library/inspect.rst:1425 +msgid "" +"Print information about the specified object rather than the source code" +msgstr "打印特定对象的信息而非源码。" diff --git a/library/internet.po b/library/internet.po new file mode 100644 index 000000000..92f9fbcaa --- /dev/null +++ b/library/internet.po @@ -0,0 +1,37 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) 2001-2022, Python Software Foundation +# This file is distributed under the same license as the Python package. +# FIRST AUTHOR , YEAR. +# +# Translators: +# Alpha Du , 2019 +# +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: Python 3.9\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2022-11-04 14:34+0000\n" +"PO-Revision-Date: 2017-02-16 23:15+0000\n" +"Last-Translator: Alpha Du , 2019\n" +"Language-Team: Chinese (China) (https://www.transifex.com/python-doc/teams/5390/zh_CN/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: zh_CN\n" +"Plural-Forms: nplurals=1; plural=0;\n" + +#: ../../library/internet.rst:5 +msgid "Internet Protocols and Support" +msgstr "互联网协议和支持" + +#: ../../library/internet.rst:14 +msgid "" +"The modules described in this chapter implement Internet protocols and " +"support for related technology. They are all implemented in Python. Most of" +" these modules require the presence of the system-dependent module " +":mod:`socket`, which is currently supported on most popular platforms. Here" +" is an overview:" +msgstr "" +"本章介绍的模块实现了互联网协议并支持相关技术。 它们都是用 Python 实现的。 这些模块中的大多数都需要存在依赖于系统的模块 " +":mod:`socket` ,目前大多数流行平台都支持它。 这是一个概述:" diff --git a/library/intro.po b/library/intro.po new file mode 100644 index 000000000..aa3fcd6a5 --- /dev/null +++ b/library/intro.po @@ -0,0 +1,121 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) 2001-2022, Python Software Foundation +# This file is distributed under the same license as the Python package. +# FIRST AUTHOR , YEAR. +# +# Translators: +# Fei Yin , 2018 +# df2dc1c92e792f7ae8417c51df43db8f_594d92a <0f49be28017426edb1db1a2ab6e67088_717605>, 2018 +# Freesand Leo , 2022 +# +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: Python 3.9\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2022-11-04 14:34+0000\n" +"PO-Revision-Date: 2017-02-16 23:15+0000\n" +"Last-Translator: Freesand Leo , 2022\n" +"Language-Team: Chinese (China) (https://www.transifex.com/python-doc/teams/5390/zh_CN/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: zh_CN\n" +"Plural-Forms: nplurals=1; plural=0;\n" + +#: ../../library/intro.rst:5 +msgid "Introduction" +msgstr "概述" + +#: ../../library/intro.rst:7 +msgid "The \"Python library\" contains several different kinds of components." +msgstr "\"Python 库\"中包含了几种不同的组件。" + +#: ../../library/intro.rst:9 +msgid "" +"It contains data types that would normally be considered part of the " +"\"core\" of a language, such as numbers and lists. For these types, the " +"Python language core defines the form of literals and places some " +"constraints on their semantics, but does not fully define the semantics. " +"(On the other hand, the language core does define syntactic properties like " +"the spelling and priorities of operators.)" +msgstr "" +"它包含通常被视为语言“核心”中的一部分的数据类型,例如数字和列表。对于这些类型,Python语言核心定义了文字的形式,并对它们的语义设置了一些约束,但没有完全定义语义。(另一方面,语言核心确实定义了语法属性,如操作符的拼写和优先级。)" + +#: ../../library/intro.rst:15 +msgid "" +"The library also contains built-in functions and exceptions --- objects that" +" can be used by all Python code without the need of an :keyword:`import` " +"statement. Some of these are defined by the core language, but many are not " +"essential for the core semantics and are only described here." +msgstr "" +"这个库也包含了内置函数和异常 --- 不需要 :keyword:`import` " +"语句就可以在所有Python代码中使用的对象。有一些是由语言核心定义的,但是许多对于核心语义不是必需的,并且仅在这里描述。" + +#: ../../library/intro.rst:20 +msgid "" +"The bulk of the library, however, consists of a collection of modules. There" +" are many ways to dissect this collection. Some modules are written in C " +"and built in to the Python interpreter; others are written in Python and " +"imported in source form. Some modules provide interfaces that are highly " +"specific to Python, like printing a stack trace; some provide interfaces " +"that are specific to particular operating systems, such as access to " +"specific hardware; others provide interfaces that are specific to a " +"particular application domain, like the World Wide Web. Some modules are " +"available in all versions and ports of Python; others are only available " +"when the underlying system supports or requires them; yet others are " +"available only when a particular configuration option was chosen at the time" +" when Python was compiled and installed." +msgstr "" +"不过这个库主要是由一系列的模块组成。这些模块集可以不同方式分类。有些模块是用 C 编写并内置于 Python 解释器中;另一些模块则是用 Python " +"编写并以源码形式导入。有些模块提供专用于 Python " +"的接口,例如打印栈追踪信息;有些模块提供专用于特定操作系统的接口,例如操作特定的硬件;另一些模块则提供针对特定应用领域的接口,例如万维网。有些模块在所有更新和移植版本的" +" Python 中可用;另一些模块仅在底层系统支持或要求时可用;还有些模块则仅当编译和安装 Python 时选择了特定配置选项时才可用。" + +#: ../../library/intro.rst:32 +msgid "" +"This manual is organized \"from the inside out:\" it first describes the " +"built-in functions, data types and exceptions, and finally the modules, " +"grouped in chapters of related modules." +msgstr "本手册以 \"从内到外\" 的顺序组织:首先描述内置函数、数据类型和异常,最后是根据相关性进行分组的各种模块。" + +#: ../../library/intro.rst:36 +msgid "" +"This means that if you start reading this manual from the start, and skip to" +" the next chapter when you get bored, you will get a reasonable overview of " +"the available modules and application areas that are supported by the Python" +" library. Of course, you don't *have* to read it like a novel --- you can " +"also browse the table of contents (in front of the manual), or look for a " +"specific function, module or term in the index (in the back). And finally, " +"if you enjoy learning about random subjects, you choose a random page number" +" (see module :mod:`random`) and read a section or two. Regardless of the " +"order in which you read the sections of this manual, it helps to start with " +"chapter :ref:`built-in-funcs`, as the remainder of the manual assumes " +"familiarity with this material." +msgstr "" +"这意味着如果你从头开始阅读本手册,并在感到厌烦时跳到下一章,你仍能对 Python 库的可用模块和所支持的应用领域有个大致了解。当然,你并非 *必须* " +"如同读小说一样从头读到尾 --- 你也可以先浏览内容目录 (在手册开头),或在索引 (在手册末尾) " +"中查找某个特定函数、模块或条目。最后,如果你喜欢随意学习某个主题,你可以选择一个随机页码 (参见 :mod:`random` 模块) " +"并读上一两小节。无论你想以怎样的顺序阅读本手册,还是建议先从 :ref:`built-in-funcs` " +"这一章开始,因为本手册的其余内容都需要你熟悉其中的基本概念。" + +#: ../../library/intro.rst:48 +msgid "Let the show begin!" +msgstr "让我们开始吧!" + +#: ../../library/intro.rst:54 +msgid "Notes on availability" +msgstr "可用性注释" + +#: ../../library/intro.rst:56 +msgid "" +"An \"Availability: Unix\" note means that this function is commonly found on" +" Unix systems. It does not make any claims about its existence on a " +"specific operating system." +msgstr "如果出现“可用性:Unix”注释,意味着相应函数通常存在于 Unix 系统中。 但这并不保证其存在于某个特定的操作系统中。" + +#: ../../library/intro.rst:60 +msgid "" +"If not separately noted, all functions that claim \"Availability: Unix\" are" +" supported on macOS, which builds on a Unix core." +msgstr "如果没有单独说明,所有注明 \"可用性: Unix\" 的函数都在 macOS 上受到支持,因为此系统是基于 Unix 内核的。" diff --git a/library/io.po b/library/io.po new file mode 100644 index 000000000..32adda3f1 --- /dev/null +++ b/library/io.po @@ -0,0 +1,1664 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) 2001-2024, Python Software Foundation +# This file is distributed under the same license as the Python package. +# FIRST AUTHOR , YEAR. +# +# Translators: +# ww song , 2018 +# Wu Pipi, 2019 +# Konge , 2019 +# ppcfish , 2020 +# Shengjing Zhu , 2020 +# Sean Chao , 2020 +# Freesand Leo , 2021 +# Alpha Du , 2022 +# Rafael Fontenelle , 2024 +# +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: Python 3.9\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2024-08-30 16:51+0000\n" +"PO-Revision-Date: 2017-02-16 23:15+0000\n" +"Last-Translator: Rafael Fontenelle , 2024\n" +"Language-Team: Chinese (China) (https://app.transifex.com/python-doc/teams/5390/zh_CN/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: zh_CN\n" +"Plural-Forms: nplurals=1; plural=0;\n" + +#: ../../library/io.rst:2 +msgid ":mod:`io` --- Core tools for working with streams" +msgstr ":mod:`io` --- 处理流的核心工具" + +#: ../../library/io.rst:15 +msgid "**Source code:** :source:`Lib/io.py`" +msgstr "**源代码:** :source:`Lib/io.py`" + +#: ../../library/io.rst:22 +msgid "Overview" +msgstr "概述" + +#: ../../library/io.rst:27 +msgid "" +"The :mod:`io` module provides Python's main facilities for dealing with " +"various types of I/O. There are three main types of I/O: *text I/O*, " +"*binary I/O* and *raw I/O*. These are generic categories, and various " +"backing stores can be used for each of them. A concrete object belonging to" +" any of these categories is called a :term:`file object`. Other common " +"terms are *stream* and *file-like object*." +msgstr "" +":mod:`io` 模块提供了 Python 用于处理各种 I/O 类型的主要工具。三种主要的 I/O类型分别为: *文本 I/O*, *二进制 " +"I/O* 和 *原始 I/O*。这些是泛型类型,有很多种后端存储可以用在他们上面。一个隶属于任何这些类型的具体对象被称作 :term:`file " +"object`。 其他同类的术语还有 *流* 和 *类文件对象*。" + +#: ../../library/io.rst:34 +msgid "" +"Independent of its category, each concrete stream object will also have " +"various capabilities: it can be read-only, write-only, or read-write. It can" +" also allow arbitrary random access (seeking forwards or backwards to any " +"location), or only sequential access (for example in the case of a socket or" +" pipe)." +msgstr "" +"独立于其类别,每个具体流对象也将具有各种功能:它可以是只读,只写或读写。它还可以允许任意随机访问(向前或向后寻找任何位置),或仅允许顺序访问(例如在套接字或管道的情况下)。" + +#: ../../library/io.rst:40 +msgid "" +"All streams are careful about the type of data you give to them. For " +"example giving a :class:`str` object to the ``write()`` method of a binary " +"stream will raise a :exc:`TypeError`. So will giving a :class:`bytes` " +"object to the ``write()`` method of a text stream." +msgstr "" +"所有流对提供给它们的数据类型都很敏感。例如将 :class:`str` 对象给二进制流的 ``write()`` 方法会引发 " +":exc:`TypeError`。将 :class:`bytes` 对象提供给文本流的 ``write()`` 方法也是如此。" + +#: ../../library/io.rst:45 +msgid "" +"Operations that used to raise :exc:`IOError` now raise :exc:`OSError`, since" +" :exc:`IOError` is now an alias of :exc:`OSError`." +msgstr "" +"由于 :exc:`IOError` 现在是 :exc:`OSError` 的别名,因此用于引发 :exc:`IOError` 的操作现在会引发 " +":exc:`OSError` 。" + +#: ../../library/io.rst:51 ../../library/io.rst:772 ../../library/io.rst:1028 +msgid "Text I/O" +msgstr "文本 I/O" + +#: ../../library/io.rst:53 +msgid "" +"Text I/O expects and produces :class:`str` objects. This means that " +"whenever the backing store is natively made of bytes (such as in the case of" +" a file), encoding and decoding of data is made transparently as well as " +"optional translation of platform-specific newline characters." +msgstr "" +"文本I/O预期并生成 :class:`str` " +"对象。这意味着,无论何时后台存储是由字节组成的(例如在文件的情况下),数据的编码和解码都是透明的,并且可以选择转换特定于平台的换行符。" + +#: ../../library/io.rst:58 +msgid "" +"The easiest way to create a text stream is with :meth:`open()`, optionally " +"specifying an encoding::" +msgstr "创建文本流的最简单方法是使用 :meth:`open()`,可以选择指定编码:" + +#: ../../library/io.rst:63 +msgid "" +"In-memory text streams are also available as :class:`StringIO` objects::" +msgstr "内存中文本流也可以作为 :class:`StringIO` 对象使用:" + +#: ../../library/io.rst:67 +msgid "" +"The text stream API is described in detail in the documentation of " +":class:`TextIOBase`." +msgstr ":class:`TextIOBase` 的文档中详细描述了文本流的API" + +#: ../../library/io.rst:72 ../../library/io.rst:1016 +msgid "Binary I/O" +msgstr "二进制 I/O" + +#: ../../library/io.rst:74 +msgid "" +"Binary I/O (also called *buffered I/O*) expects :term:`bytes-like objects " +"` and produces :class:`bytes` objects. No encoding, " +"decoding, or newline translation is performed. This category of streams can" +" be used for all kinds of non-text data, and also when manual control over " +"the handling of text data is desired." +msgstr "" +"二进制I/O(也称为缓冲I/O)预期 :term:`bytes-like objects ` 并生成 " +":class:`bytes` 对象。不执行编码、解码或换行转换。这种类型的流可以用于所有类型的非文本数据,并且还可以在需要手动控制文本数据的处理时使用。" + +#: ../../library/io.rst:80 +msgid "" +"The easiest way to create a binary stream is with :meth:`open()` with " +"``'b'`` in the mode string::" +msgstr "创建二进制流的最简单方法是使用 :meth:`open()`,并在模式字符串中指定 ``'b'`` :" + +#: ../../library/io.rst:85 +msgid "" +"In-memory binary streams are also available as :class:`BytesIO` objects::" +msgstr "内存中二进制流也可以作为 :class:`BytesIO` 对象使用:" + +#: ../../library/io.rst:89 +msgid "" +"The binary stream API is described in detail in the docs of " +":class:`BufferedIOBase`." +msgstr ":class:`BufferedIOBase` 的文档中详细描述了二进制流 API。" + +#: ../../library/io.rst:92 +msgid "" +"Other library modules may provide additional ways to create text or binary " +"streams. See :meth:`socket.socket.makefile` for example." +msgstr "其他库模块可以提供额外的方式来创建文本或二进制流。参见 :meth:`socket.socket.makefile` 的示例。" + +#: ../../library/io.rst:97 +msgid "Raw I/O" +msgstr "原始 I/O" + +#: ../../library/io.rst:99 +msgid "" +"Raw I/O (also called *unbuffered I/O*) is generally used as a low-level " +"building-block for binary and text streams; it is rarely useful to directly " +"manipulate a raw stream from user code. Nevertheless, you can create a raw " +"stream by opening a file in binary mode with buffering disabled::" +msgstr "" +"原始 I/O(也称为 *非缓冲 " +"I/O*)通常用作二进制和文本流的低级构建块。用户代码直接操作原始流的用法非常罕见。不过,可以通过在禁用缓冲的情况下以二进制模式打开文件来创建原始流:" + +#: ../../library/io.rst:106 +msgid "" +"The raw stream API is described in detail in the docs of :class:`RawIOBase`." +msgstr ":class:`RawIOBase` 的文档中详细描述了原始流的API" + +#: ../../library/io.rst:110 +msgid "High-level Module Interface" +msgstr "高阶模块接口" + +#: ../../library/io.rst:114 +msgid "" +"An int containing the default buffer size used by the module's buffered I/O " +"classes. :func:`open` uses the file's blksize (as obtained by " +":func:`os.stat`) if possible." +msgstr "" +"包含模块缓冲 I/O 类使用的默认缓冲区大小的 int。 在可能的情况下 :func:`open` 将使用文件的 blksize(由 " +":func:`os.stat` 获得)。" + +#: ../../library/io.rst:121 +msgid "This is an alias for the builtin :func:`open` function." +msgstr "这是内置的 :func:`open` 函数的别名。" + +#: ../../library/io.rst:123 +msgid "" +"Raises an :ref:`auditing event ` ``open`` with arguments ``path``," +" ``mode``, ``flags``." +msgstr "" +"引发一个 :ref:`审计事件 ` ``open`` 并附带参数 ``path``, ``mode``, ``flags``。" + +#: ../../library/io.rst:125 +msgid "" +"This function raises an :ref:`auditing event ` ``open`` with " +"arguments ``path``, ``mode`` and ``flags``. The ``mode`` and ``flags`` " +"arguments may have been modified or inferred from the original call." +msgstr "" +"该 ``open`` 函数带有 ``path``, ``mode`` 和 ``flags`` 参数的,将引发 :ref:`审计事件 " +"` 。此外,``mode`` 和 ``flags`` 参数可以在原始调用的基础上被修改或传递。" + +#: ../../library/io.rst:132 +msgid "" +"Opens the provided file with mode ``'rb'``. This function should be used " +"when the intent is to treat the contents as executable code." +msgstr "以 ``'rb'`` 模式打开提供的文件。如果目的是将文件内容做为可执行代码,则应使用此函数。" + +#: ../../library/io.rst:135 +msgid "``path`` should be a :class:`str` and an absolute path." +msgstr "``path`` 应当为 :class:`str` 类型并且是一个绝对路径。" + +#: ../../library/io.rst:137 +msgid "" +"The behavior of this function may be overridden by an earlier call to the " +":c:func:`PyFile_SetOpenCodeHook`. However, assuming that ``path`` is a " +":class:`str` and an absolute path, ``open_code(path)`` should always behave " +"the same as ``open(path, 'rb')``. Overriding the behavior is intended for " +"additional validation or preprocessing of the file." +msgstr "" +"此函数的行为可以由对 :c:func:`PyFile_SetOpenCodeHook` 的先期调用所重载。 但是,如果 ``path`` 为 " +":class:`str` 类型并且是一个绝对路径,``open_code(path)`` 的行为应当总是与 ``open(path, 'rb')`` " +"一致。 重载此行为的目的是为了给文件附加额外的验证或预处理。" + +#: ../../library/io.rst:148 +msgid "" +"This is a compatibility alias for the builtin :exc:`BlockingIOError` " +"exception." +msgstr "这是内置的 :exc:`BlockingIOError` 异常的兼容性别名。" + +#: ../../library/io.rst:154 +msgid "" +"An exception inheriting :exc:`OSError` and :exc:`ValueError` that is raised " +"when an unsupported operation is called on a stream." +msgstr "在流上调用不支持的操作时引发的继承 :exc:`OSError` 和 :exc:`ValueError` 的异常。" + +#: ../../library/io.rst:161 +msgid ":mod:`sys`" +msgstr ":mod:`sys`" + +#: ../../library/io.rst:161 +msgid "" +"contains the standard IO streams: :data:`sys.stdin`, :data:`sys.stdout`, and" +" :data:`sys.stderr`." +msgstr "包含标准IO流: :data:`sys.stdin`, :data:`sys.stdout` 和 :data:`sys.stderr` 。" + +#: ../../library/io.rst:166 +msgid "Class hierarchy" +msgstr "类的层次结构" + +#: ../../library/io.rst:168 +msgid "" +"The implementation of I/O streams is organized as a hierarchy of classes. " +"First :term:`abstract base classes ` (ABCs), which are " +"used to specify the various categories of streams, then concrete classes " +"providing the standard stream implementations." +msgstr "" +"I/O 流被安排为按类的层次结构实现。 首先是 :term:`抽象基类 ` " +"(ABC),用于指定流的各种类别,然后是提供标准流实现的具体类。" + +#: ../../library/io.rst:175 +msgid "" +"The abstract base classes also provide default implementations of some " +"methods in order to help implementation of concrete stream classes. For " +"example, :class:`BufferedIOBase` provides unoptimized implementations of " +":meth:`~IOBase.readinto` and :meth:`~IOBase.readline`." +msgstr "" +"抽象基类还提供某些方法的默认实现,以帮助实现具体的流类。例如 :class:`BufferedIOBase` 提供了 " +":meth:`~IOBase.readinto` 和 :meth:`~IOBase.readline` 的未优化实现。" + +#: ../../library/io.rst:180 +msgid "" +"At the top of the I/O hierarchy is the abstract base class :class:`IOBase`." +" It defines the basic interface to a stream. Note, however, that there is " +"no separation between reading and writing to streams; implementations are " +"allowed to raise :exc:`UnsupportedOperation` if they do not support a given " +"operation." +msgstr "" +"I/O层次结构的顶部是抽象基类 :class:`IOBase` " +"。它定义了流的基本接口。但是请注意,对流的读取和写入之间没有分离。如果实现不支持指定的操作,则会引发 " +":exc:`UnsupportedOperation` 。" + +#: ../../library/io.rst:185 +msgid "" +"The :class:`RawIOBase` ABC extends :class:`IOBase`. It deals with the " +"reading and writing of bytes to a stream. :class:`FileIO` subclasses " +":class:`RawIOBase` to provide an interface to files in the machine's file " +"system." +msgstr "" +"抽象基类 :class:`RawIOBase` 是 :class:`IOBase` 的子类。它负责将字节读取和写入流中。 " +":class:`RawIOBase` 的子类 :class:`FileIO` 提供计算机文件系统中文件的接口。" + +#: ../../library/io.rst:189 +msgid "" +"The :class:`BufferedIOBase` ABC extends :class:`IOBase`. It deals with " +"buffering on a raw binary stream (:class:`RawIOBase`). Its subclasses, " +":class:`BufferedWriter`, :class:`BufferedReader`, and " +":class:`BufferedRWPair` buffer raw binary streams that are readable, " +"writable, and both readable and writable, respectively. " +":class:`BufferedRandom` provides a buffered interface to seekable streams. " +"Another :class:`BufferedIOBase` subclass, :class:`BytesIO`, is a stream of " +"in-memory bytes." +msgstr "" +"抽象基类 :class:`BufferedIOBase` 继承了 :class:`IOBase` ,处理原始二进制流( " +":class:`RawIOBase` )上的缓冲。其子类 :class:`BufferedWriter` 、 " +":class:`BufferedReader` 和 :class:`BufferedRWPair` 分别缓冲可读、可写以及可读写的原始二进制流。 " +":class:`BufferedRandom` 提供了带缓冲的可随机访问流接口。 :class:`BufferedIOBase` 的另一个子类 " +":class:`BytesIO` 是内存中字节流。 " + +#: ../../library/io.rst:197 +msgid "" +"The :class:`TextIOBase` ABC extends :class:`IOBase`. It deals with streams " +"whose bytes represent text, and handles encoding and decoding to and from " +"strings. :class:`TextIOWrapper`, which extends :class:`TextIOBase`, is a " +"buffered text interface to a buffered raw stream (:class:`BufferedIOBase`)." +" Finally, :class:`StringIO` is an in-memory stream for text." +msgstr "" +"抽象基类 :class:`TextIOBase` 继承了 :class:`IOBase` 。它处理可表示文本的流,并处理字符串的编码和解码。类 " +":class:`TextIOWrapper` 继承了 :class:`TextIOBase` ,是原始缓冲流( " +":class:`BufferedIOBase` )的缓冲文本接口。最后, :class:`StringIO` 是文本的内存流。" + +#: ../../library/io.rst:203 +msgid "" +"Argument names are not part of the specification, and only the arguments of " +":func:`open` are intended to be used as keyword arguments." +msgstr "参数名不是规范的一部分,只有 :func:`open` 的参数才用作关键字参数。" + +#: ../../library/io.rst:206 +msgid "" +"The following table summarizes the ABCs provided by the :mod:`io` module:" +msgstr "下表总结了抽象基类提供的 :mod:`io` 模块:" + +#: ../../library/io.rst:211 +msgid "ABC" +msgstr "抽象基类" + +#: ../../library/io.rst:211 +msgid "Inherits" +msgstr "继承" + +#: ../../library/io.rst:211 +msgid "Stub Methods" +msgstr "抽象方法" + +#: ../../library/io.rst:211 +msgid "Mixin Methods and Properties" +msgstr "Mixin方法和属性" + +#: ../../library/io.rst:213 ../../library/io.rst:218 ../../library/io.rst:220 +#: ../../library/io.rst:222 +msgid ":class:`IOBase`" +msgstr ":class:`IOBase`" + +#: ../../library/io.rst:213 +msgid "``fileno``, ``seek``, and ``truncate``" +msgstr "``fileno``, ``seek``, 和 ``truncate``" + +#: ../../library/io.rst:213 +msgid "" +"``close``, ``closed``, ``__enter__``, ``__exit__``, ``flush``, ``isatty``, " +"``__iter__``, ``__next__``, ``readable``, ``readline``, ``readlines``, " +"``seekable``, ``tell``, ``writable``, and ``writelines``" +msgstr "" +"``close``, ``closed``, ``__enter__``, ``__exit__``, ``flush``, ``isatty``, " +"``__iter__``, ``__next__``, ``readable``, ``readline``, ``readlines``, " +"``seekable``, ``tell``, ``writable`` 和 ``writelines``" + +#: ../../library/io.rst:218 +msgid ":class:`RawIOBase`" +msgstr ":class:`RawIOBase`" + +#: ../../library/io.rst:218 +msgid "``readinto`` and ``write``" +msgstr "``readinto`` 和 ``write``" + +#: ../../library/io.rst:218 +msgid "Inherited :class:`IOBase` methods, ``read``, and ``readall``" +msgstr "继承 :class:`IOBase` 方法, ``read``, 和 ``readall``" + +#: ../../library/io.rst:220 +msgid ":class:`BufferedIOBase`" +msgstr ":class:`BufferedIOBase`" + +#: ../../library/io.rst:220 +msgid "``detach``, ``read``, ``read1``, and ``write``" +msgstr "``detach``, ``read``, ``read1``, 和 ``write``" + +#: ../../library/io.rst:220 +msgid "Inherited :class:`IOBase` methods, ``readinto``, and ``readinto1``" +msgstr "继承 :class:`IOBase` 方法, ``readinto``, 和 ``readinto1``" + +#: ../../library/io.rst:222 +msgid ":class:`TextIOBase`" +msgstr ":class:`TextIOBase`" + +#: ../../library/io.rst:222 +msgid "``detach``, ``read``, ``readline``, and ``write``" +msgstr "``detach``, ``read``, ``readline``, 和 ``write``" + +#: ../../library/io.rst:222 +msgid "" +"Inherited :class:`IOBase` methods, ``encoding``, ``errors``, and " +"``newlines``" +msgstr "继承 :class:`IOBase` 方法, ``encoding``, ``errors``, 和 ``newlines``" + +#: ../../library/io.rst:229 +msgid "I/O Base Classes" +msgstr "I/O 基类" + +#: ../../library/io.rst:233 +msgid "The abstract base class for all I/O classes." +msgstr "所有 I/O 类的抽象基类。" + +#: ../../library/io.rst:235 +msgid "" +"This class provides empty abstract implementations for many methods that " +"derived classes can override selectively; the default implementations " +"represent a file that cannot be read, written or seeked." +msgstr "此类为许多方法提供了空的抽象实现,派生类可以有选择地重写。默认实现代表一个无法读取、写入或查找的文件。" + +#: ../../library/io.rst:240 +msgid "" +"Even though :class:`IOBase` does not declare :meth:`read` or :meth:`write` " +"because their signatures will vary, implementations and clients should " +"consider those methods part of the interface. Also, implementations may " +"raise a :exc:`ValueError` (or :exc:`UnsupportedOperation`) when operations " +"they do not support are called." +msgstr "" +"尽管 :class:`IOBase` 没有声明 :meth:`read` 或 :meth:`write` " +",因为它们的签名会有所不同,但是实现和客户端应该将这些方法视为接口的一部分。此外,当调用不支持的操作时可能会引发 :exc:`ValueError` " +"(或 :exc:`UnsupportedOperation` )。" + +#: ../../library/io.rst:246 +msgid "" +"The basic type used for binary data read from or written to a file is " +":class:`bytes`. Other :term:`bytes-like objects ` are " +"accepted as method arguments too. Text I/O classes work with :class:`str` " +"data." +msgstr "" +"从文件读取或写入文件的二进制数据的基本类型为 :class:`bytes` 。其他 :term:`bytes-like objects ` 也可以作为方法参数。文本I/O类使用 :class:`str` 数据。" + +#: ../../library/io.rst:250 +msgid "" +"Note that calling any method (even inquiries) on a closed stream is " +"undefined. Implementations may raise :exc:`ValueError` in this case." +msgstr "" +"请注意,在关闭的流上调用任何方法(甚至查询)都是未定义的(undefined)。在这种情况下,实现可能会引发 :exc:`ValueError` 。" + +#: ../../library/io.rst:253 +msgid "" +":class:`IOBase` (and its subclasses) supports the iterator protocol, meaning" +" that an :class:`IOBase` object can be iterated over yielding the lines in a" +" stream. Lines are defined slightly differently depending on whether the " +"stream is a binary stream (yielding bytes), or a text stream (yielding " +"character strings). See :meth:`~IOBase.readline` below." +msgstr "" +":class:`IOBase` (及其子类)支持迭代器协议,这意味着可以迭代 :class:`IOBase` " +"对象以产生流中的行。根据流是二进制流(产生字节)还是文本流(产生字符串),行的定义略有不同。请参见下面的 " +":meth:`~IOBase.readline` 。" + +#: ../../library/io.rst:259 +msgid "" +":class:`IOBase` is also a context manager and therefore supports the " +":keyword:`with` statement. In this example, *file* is closed after the " +":keyword:`!with` statement's suite is finished---even if an exception " +"occurs::" +msgstr "" +":class:`IOBase` 也是一个上下文管理器,因此支持 :keyword:`with` 语句。 在这个示例中,*file* 将在 " +":keyword:`!with` 语句块执行完成之后被关闭 --- 即使是发生了异常::" + +#: ../../library/io.rst:266 +msgid ":class:`IOBase` provides these data attributes and methods:" +msgstr ":class:`IOBase` 提供以下数据属性和方法:" + +#: ../../library/io.rst:270 +msgid "" +"Flush and close this stream. This method has no effect if the file is " +"already closed. Once the file is closed, any operation on the file (e.g. " +"reading or writing) will raise a :exc:`ValueError`." +msgstr "" +"刷新并关闭此流。如果文件已经关闭,则此方法无效。文件关闭后,对文件的任何操作(例如读取或写入)都会引发 :exc:`ValueError` 。" + +#: ../../library/io.rst:274 +msgid "" +"As a convenience, it is allowed to call this method more than once; only the" +" first call, however, will have an effect." +msgstr "为方便起见,允许多次调用此方法。但是,只有第一个调用才会生效。" + +#: ../../library/io.rst:279 +msgid "``True`` if the stream is closed." +msgstr "如果流已关闭,则返回 True。" + +#: ../../library/io.rst:283 +msgid "" +"Return the underlying file descriptor (an integer) of the stream if it " +"exists. An :exc:`OSError` is raised if the IO object does not use a file " +"descriptor." +msgstr "返回流的底层文件描述符(整数)---如果存在。如果 IO 对象不使用文件描述符,则会引发 :exc:`OSError` 。" + +#: ../../library/io.rst:289 +msgid "" +"Flush the write buffers of the stream if applicable. This does nothing for " +"read-only and non-blocking streams." +msgstr "刷新流的写入缓冲区(如果适用)。这对只读和非阻塞流不起作用。" + +#: ../../library/io.rst:294 +msgid "" +"Return ``True`` if the stream is interactive (i.e., connected to a " +"terminal/tty device)." +msgstr "如果流是交互式的(即连接到终端/tty设备),则返回 ``True`` 。" + +#: ../../library/io.rst:299 +msgid "" +"Return ``True`` if the stream can be read from. If ``False``, :meth:`read` " +"will raise :exc:`OSError`." +msgstr "" +"如果可以读取流,则返回 ``True`` 。否则为 ``False`` ,且 :meth:`read` 将引发 :exc:`OSError` 错误。" + +#: ../../library/io.rst:304 +msgid "" +"Read and return one line from the stream. If *size* is specified, at most " +"*size* bytes will be read." +msgstr "从流中读取并返回一行。如果指定了 *size*,将至多读取 *size* 个字节。" + +#: ../../library/io.rst:307 +msgid "" +"The line terminator is always ``b'\\n'`` for binary files; for text files, " +"the *newline* argument to :func:`open` can be used to select the line " +"terminator(s) recognized." +msgstr "" +"对于二进制文件行结束符总是 ``b'\\n'``;对于文本文件,可以用将 *newline* 参数传给 :func:`open` " +"的方式来选择要识别的行结束符。" + +#: ../../library/io.rst:313 +msgid "" +"Read and return a list of lines from the stream. *hint* can be specified to" +" control the number of lines read: no more lines will be read if the total " +"size (in bytes/characters) of all lines so far exceeds *hint*." +msgstr "" +"从流中读取并返回包含多行的列表。可以指定 *hint* 来控制要读取的行数:如果(以字节/字符数表示的)所有行的总大小超出了 *hint* " +"则将不会读取更多的行。" + +#: ../../library/io.rst:317 +msgid "" +"*hint* values of ``0`` or less, as well as ``None``, are treated as no hint." +msgstr "``0`` 或更小的 *hint* 值以及 ``None``,会被视为没有 hint。" + +#: ../../library/io.rst:320 +msgid "" +"Note that it's already possible to iterate on file objects using ``for line " +"in file: ...`` without calling ``file.readlines()``." +msgstr "" +"请注意使用 ``for line in file: ...`` 就足够对文件对象进行迭代了,可以不必调用 ``file.readlines()``。" + +#: ../../library/io.rst:325 +msgid "" +"Change the stream position to the given byte *offset*. *offset* is " +"interpreted relative to the position indicated by *whence*. The default " +"value for *whence* is :data:`SEEK_SET`. Values for *whence* are:" +msgstr "" +"将流位置修改到给定的字节 *offset*。 *offset* 将相对于由 *whence* 指定的位置进行解析。 *whence* 的默认值为 " +":data:`SEEK_SET`。 *whence* 的可用值有:" + +#: ../../library/io.rst:329 +msgid "" +":data:`SEEK_SET` or ``0`` -- start of the stream (the default); *offset* " +"should be zero or positive" +msgstr ":data:`SEEK_SET` 或 ``0`` -- 流的开头(默认值);*offset* 应为零或正值" + +#: ../../library/io.rst:331 +msgid "" +":data:`SEEK_CUR` or ``1`` -- current stream position; *offset* may be " +"negative" +msgstr ":data:`SEEK_CUR` or ``1`` -- 当前流位置;*offset* 可以为负值" + +#: ../../library/io.rst:333 +msgid "" +":data:`SEEK_END` or ``2`` -- end of the stream; *offset* is usually negative" +msgstr ":data:`SEEK_END` or ``2`` -- 流的末尾;*offset* 通常为负值" + +#: ../../library/io.rst:336 +msgid "Return the new absolute position." +msgstr "返回新的绝对位置。" + +#: ../../library/io.rst:338 ../../library/io.rst:847 +msgid "The ``SEEK_*`` constants." +msgstr "``SEEK_*`` 常量." + +#: ../../library/io.rst:341 +msgid "" +"Some operating systems could support additional values, like " +":data:`os.SEEK_HOLE` or :data:`os.SEEK_DATA`. The valid values for a file " +"could depend on it being open in text or binary mode." +msgstr "" +"某些操作系统还可支持其他的值,例如 :data:`os.SEEK_HOLE` 或 " +":data:`os.SEEK_DATA`。特定文件的可用值还会取决于它是以文本还是二进制模式打开。" + +#: ../../library/io.rst:348 +msgid "" +"Return ``True`` if the stream supports random access. If ``False``, " +":meth:`seek`, :meth:`tell` and :meth:`truncate` will raise :exc:`OSError`." +msgstr "" +"如果流支持随机访问则返回 ``True``。 如为 ``False``,则 :meth:`seek`, :meth:`tell` 和 " +":meth:`truncate` 将引发 :exc:`OSError`。" + +#: ../../library/io.rst:353 +msgid "Return the current stream position." +msgstr "返回当前流的位置。" + +#: ../../library/io.rst:357 +msgid "" +"Resize the stream to the given *size* in bytes (or the current position if " +"*size* is not specified). The current stream position isn't changed. This " +"resizing can extend or reduce the current file size. In case of extension, " +"the contents of the new file area depend on the platform (on most systems, " +"additional bytes are zero-filled). The new file size is returned." +msgstr "" +"将流的大小调整为给定的 *size* 个字节(如果未指定 *size* 则调整至当前位置)。 当前的流位置不变。 这个调整操作可扩展或减小当前文件大小。" +" 在扩展的情况下,新文件区域的内容取决于具体平台(在大多数系统上,额外的字节会填充为零)。 返回新的文件大小。" + +#: ../../library/io.rst:364 +msgid "Windows will now zero-fill files when extending." +msgstr "现在Windows在扩展时将文件填充为零。" + +#: ../../library/io.rst:369 +msgid "" +"Return ``True`` if the stream supports writing. If ``False``, :meth:`write`" +" and :meth:`truncate` will raise :exc:`OSError`." +msgstr "" +"如果流支持写入则返回 ``True``。 如为 ``False``,则 :meth:`write` 和 :meth:`truncate` 将引发 " +":exc:`OSError`。" + +#: ../../library/io.rst:374 +msgid "" +"Write a list of lines to the stream. Line separators are not added, so it " +"is usual for each of the lines provided to have a line separator at the end." +msgstr "将行列表写入到流。 不会添加行分隔符,因此通常所提供的每一行都带有末尾行分隔符。" + +#: ../../library/io.rst:380 +msgid "" +"Prepare for object destruction. :class:`IOBase` provides a default " +"implementation of this method that calls the instance's " +":meth:`~IOBase.close` method." +msgstr "" +"为对象销毁进行准备。 :class:`IOBase` 提供了此方法的默认实现,该实现会调用实例的 :meth:`~IOBase.close` 方法。" + +#: ../../library/io.rst:387 +msgid "Base class for raw binary streams. It inherits :class:`IOBase`." +msgstr "原始二进制流的基类。 它继承自 :class:`IOBase` 。" + +#: ../../library/io.rst:389 +msgid "" +"Raw binary streams typically provide low-level access to an underlying OS " +"device or API, and do not try to encapsulate it in high-level primitives " +"(this functionality is done at a higher-level in buffered binary streams and" +" text streams, described later in this page)." +msgstr "" +"原始二进制流通常会提供对下层 OS 设备或 API " +"的低层级访问,而不是尝试将其封装到高层级的基元中(此功能是在更高层级的缓冲二进制流和文本流中实现的,将在下文中描述)。" + +#: ../../library/io.rst:394 +msgid "" +":class:`RawIOBase` provides these methods in addition to those from " +":class:`IOBase`:" +msgstr ":class:`RawIOBase` 在 :class:`IOBase` 的现有成员以外还提供了下列方法:" + +#: ../../library/io.rst:399 +msgid "" +"Read up to *size* bytes from the object and return them. As a convenience, " +"if *size* is unspecified or -1, all bytes until EOF are returned. Otherwise," +" only one system call is ever made. Fewer than *size* bytes may be returned" +" if the operating system call returns fewer than *size* bytes." +msgstr "" +"从对象中读取 *size* 个字节并将其返回。 作为一个便捷选项,如果 *size* 未指定或为 -1,则返回所有字节直到 EOF。 " +"在其他情况下,仅会执行一次系统调用。 如果操作系统调用返回字节数少于 *size* 则此方法也可能返回少于 *size* 个字节。" + +#: ../../library/io.rst:404 +msgid "" +"If 0 bytes are returned, and *size* was not 0, this indicates end of file. " +"If the object is in non-blocking mode and no bytes are available, ``None`` " +"is returned." +msgstr "如果返回 0 个字节而 *size* 不为零 0,这表明到达文件末尾。 如果处于非阻塞模式并且没有更多字节可用,则返回 ``None``。" + +#: ../../library/io.rst:408 +msgid "" +"The default implementation defers to :meth:`readall` and :meth:`readinto`." +msgstr "默认实现会转至 :meth:`readall` 和 :meth:`readinto`。" + +#: ../../library/io.rst:413 +msgid "" +"Read and return all the bytes from the stream until EOF, using multiple " +"calls to the stream if necessary." +msgstr "从流中读取并返回所有字节直到 EOF,如有必要将对流执行多次调用。" + +#: ../../library/io.rst:418 +msgid "" +"Read bytes into a pre-allocated, writable :term:`bytes-like object` *b*, and" +" return the number of bytes read. For example, *b* might be a " +":class:`bytearray`. If the object is in non-blocking mode and no bytes are " +"available, ``None`` is returned." +msgstr "" +"将字节数据读入预先分配的可写 :term:`bytes-like object` *b*,并返回所读取的字节数。 例如,*b* 可以是一个 " +":class:`bytearray`。 如果对象处理非阻塞模式并且没有更多字节可用,则返回 ``None``。" + +#: ../../library/io.rst:426 +msgid "" +"Write the given :term:`bytes-like object`, *b*, to the underlying raw " +"stream, and return the number of bytes written. This can be less than the " +"length of *b* in bytes, depending on specifics of the underlying raw stream," +" and especially if it is in non-blocking mode. ``None`` is returned if the " +"raw stream is set not to block and no single byte could be readily written " +"to it. The caller may release or mutate *b* after this method returns, so " +"the implementation should only access *b* during the method call." +msgstr "" +"将给定的 :term:`bytes-like object` *b* 写入到下层的原始流,并返回所写入的字节数。 这可以少于 *b* " +"的总字节数,具体取决于下层原始流的设定,特别是如果它处于非阻塞模式的话。 如果原始流设为非阻塞并且不能真正向其写入单个字节时则返回 ``None``。 " +"调用者可以在此方法返回后释放或改变 *b*,因此该实现应该仅在方法调用期间访问 *b*。" + +#: ../../library/io.rst:439 +msgid "" +"Base class for binary streams that support some kind of buffering. It " +"inherits :class:`IOBase`." +msgstr "支持某种缓冲的二进制流的基类。 它继承自 :class:`IOBase`。" + +#: ../../library/io.rst:442 +msgid "" +"The main difference with :class:`RawIOBase` is that methods :meth:`read`, " +":meth:`readinto` and :meth:`write` will try (respectively) to read as much " +"input as requested or to consume all given output, at the expense of making " +"perhaps more than one system call." +msgstr "" +"与 :class:`RawIOBase` 的主要差别在于 :meth:`read`, :meth:`readinto` 和 :meth:`write` " +"等方法将(分别)尝试按照要求读取尽可能多的输入或是耗尽所有给定的输出,其代价是可能会执行一次以上的系统调用。" + +#: ../../library/io.rst:447 +msgid "" +"In addition, those methods can raise :exc:`BlockingIOError` if the " +"underlying raw stream is in non-blocking mode and cannot take or give enough" +" data; unlike their :class:`RawIOBase` counterparts, they will never return " +"``None``." +msgstr "" +"除此之外,那些方法还可能引发 " +":exc:`BlockingIOError`,如果下层的原始数据流处于非阻塞模式并且无法接受或给出足够数据的话;不同于对应的 " +":class:`RawIOBase` 方法,它们将永远不会返回 ``None``。" + +#: ../../library/io.rst:452 +msgid "" +"Besides, the :meth:`read` method does not have a default implementation that" +" defers to :meth:`readinto`." +msgstr "并且,:meth:`read` 方法也没有转向 :meth:`readinto` 的默认实现。" + +#: ../../library/io.rst:455 +msgid "" +"A typical :class:`BufferedIOBase` implementation should not inherit from a " +":class:`RawIOBase` implementation, but wrap one, like " +":class:`BufferedWriter` and :class:`BufferedReader` do." +msgstr "" +"典型的 :class:`BufferedIOBase` 实现不应当继承自 :class:`RawIOBase` 实现,而要包装一个该实现,正如 " +":class:`BufferedWriter` 和 :class:`BufferedReader` 所做的那样。" + +#: ../../library/io.rst:459 +msgid "" +":class:`BufferedIOBase` provides or overrides these data attributes and " +"methods in addition to those from :class:`IOBase`:" +msgstr ":class:`BufferedIOBase` 在 :class:`IOBase` 的现有成员以外还提供或重写了下列数据属性和方法:" + +#: ../../library/io.rst:464 +msgid "" +"The underlying raw stream (a :class:`RawIOBase` instance) that " +":class:`BufferedIOBase` deals with. This is not part of the " +":class:`BufferedIOBase` API and may not exist on some implementations." +msgstr "" +"由 :class:`BufferedIOBase` 处理的下层原始流 (:class:`RawIOBase` 的实例)。 它不是 " +":class:`BufferedIOBase` API 的组成部分并且不存在于某些实现中。" + +#: ../../library/io.rst:470 +msgid "Separate the underlying raw stream from the buffer and return it." +msgstr "从缓冲区分离出下层原始流并将其返回。" + +#: ../../library/io.rst:472 +msgid "" +"After the raw stream has been detached, the buffer is in an unusable state." +msgstr "在原始流被分离之后,缓冲区将处于不可用的状态。" + +#: ../../library/io.rst:475 +msgid "" +"Some buffers, like :class:`BytesIO`, do not have the concept of a single raw" +" stream to return from this method. They raise :exc:`UnsupportedOperation`." +msgstr "" +"某些缓冲区例如 :class:`BytesIO` 并无可从此方法返回的单独原始流的概念。 它们将会引发 " +":exc:`UnsupportedOperation`。" + +#: ../../library/io.rst:483 +msgid "" +"Read and return up to *size* bytes. If the argument is omitted, ``None``, " +"or negative, data is read and returned until EOF is reached. An empty " +":class:`bytes` object is returned if the stream is already at EOF." +msgstr "" +"读取并返回最多 *size* 个字节。 如果此参数被省略、为 ``None`` 或为负值,则读取并返回所有数据直到 EOF。 如果流已经到达 EOF " +"则返回一个空的 :class:`bytes` 对象。" + +#: ../../library/io.rst:487 +msgid "" +"If the argument is positive, and the underlying raw stream is not " +"interactive, multiple raw reads may be issued to satisfy the byte count " +"(unless EOF is reached first). But for interactive raw streams, at most one" +" raw read will be issued, and a short result does not imply that EOF is " +"imminent." +msgstr "" +"如果此参数为正值,并且下层原始流不可交互,则可能发起多个原始读取以满足字节计数(直至先遇到 EOF)。 " +"但对于可交互原始流,则将至多发起一个原始读取,并且简短的结果并不意味着已到达 EOF。" + +#: ../../library/io.rst:493 ../../library/io.rst:516 ../../library/io.rst:526 +msgid "" +"A :exc:`BlockingIOError` is raised if the underlying raw stream is in non " +"blocking-mode, and has no data available at the moment." +msgstr ":exc:`BlockingIOError` 会在下层原始流不处于阻塞模式,并且当前没有可用数据时被引发。" + +#: ../../library/io.rst:498 +msgid "" +"Read and return up to *size* bytes, with at most one call to the underlying " +"raw stream's :meth:`~RawIOBase.read` (or :meth:`~RawIOBase.readinto`) " +"method. This can be useful if you are implementing your own buffering on " +"top of a :class:`BufferedIOBase` object." +msgstr "" +"通过至多一次对下层流的 :meth:`~RawIOBase.read` (或 :meth:`~RawIOBase.readinto`) " +"方法的调用读取并返回至多 *size* 个字节。 这适用于在 :class:`BufferedIOBase` 对象之上实现你自己的缓冲区的情况。" + +#: ../../library/io.rst:504 +msgid "" +"If *size* is ``-1`` (the default), an arbitrary number of bytes are returned" +" (more than zero unless EOF is reached)." +msgstr "如果 *size* 为 ``-1`` (默认值),则返回任意数量的字节(多于零字节,除非已到达 EOF)。" + +#: ../../library/io.rst:509 +msgid "" +"Read bytes into a pre-allocated, writable :term:`bytes-like object` *b* and " +"return the number of bytes read. For example, *b* might be a " +":class:`bytearray`." +msgstr "" +"将字节数据读入预先分配的可写 :term:`bytes-like object` *b* 并返回所读取的字节数。 例如,*b* 可以是一个 " +":class:`bytearray`。" + +#: ../../library/io.rst:513 +msgid "" +"Like :meth:`read`, multiple reads may be issued to the underlying raw " +"stream, unless the latter is interactive." +msgstr "类似于 :meth:`read`,可能对下层原始流发起多次读取,除非后者为交互式。" + +#: ../../library/io.rst:521 +msgid "" +"Read bytes into a pre-allocated, writable :term:`bytes-like object` *b*, " +"using at most one call to the underlying raw stream's " +":meth:`~RawIOBase.read` (or :meth:`~RawIOBase.readinto`) method. Return the " +"number of bytes read." +msgstr "" +"将字节数据读入预先分配的可写 :term:`bytes-like object` *b*,其中至多使用一次对下层原始流 " +":meth:`~RawIOBase.read` (或 :meth:`~RawIOBase.readinto`) 方法的调用。 返回所读取的字节数。" + +#: ../../library/io.rst:533 +msgid "" +"Write the given :term:`bytes-like object`, *b*, and return the number of " +"bytes written (always equal to the length of *b* in bytes, since if the " +"write fails an :exc:`OSError` will be raised). Depending on the actual " +"implementation, these bytes may be readily written to the underlying stream," +" or held in a buffer for performance and latency reasons." +msgstr "" +"写入给定的 :term:`bytes-like object` *b*,并返回写入的字节数 (总是等于 *b* 的字节长度,因为如果写入失败则会引发 " +":exc:`OSError`)。 根据具体实现的不同,这些字节可能被实际写入下层流,或是出于运行效率和冗余等考虑而暂存于缓冲区。" + +#: ../../library/io.rst:540 +msgid "" +"When in non-blocking mode, a :exc:`BlockingIOError` is raised if the data " +"needed to be written to the raw stream but it couldn't accept all the data " +"without blocking." +msgstr "当处于非阻塞模式时,如果需要将数据写入原始流但它无法在不阻塞的情况下接受所有数据则将引发 :exc:`BlockingIOError`。" + +#: ../../library/io.rst:544 +msgid "" +"The caller may release or mutate *b* after this method returns, so the " +"implementation should only access *b* during the method call." +msgstr "调用者可能会在此方法返回后释放或改变 *b*,因此该实现应当仅在方法调用期间访问 *b*。" + +#: ../../library/io.rst:549 +msgid "Raw File I/O" +msgstr "原始文件 I/O" + +#: ../../library/io.rst:553 +msgid "" +"A raw binary stream representing an OS-level file containing bytes data. It" +" inherits :class:`RawIOBase`." +msgstr "代表一个包含字节数据的 OS 层级文件的原始二进制流。 它继承自 :class:`RawIOBase`。" + +#: ../../library/io.rst:556 +msgid "The *name* can be one of two things:" +msgstr "*name* 可以是以下两项之一:" + +#: ../../library/io.rst:558 +msgid "" +"a character string or :class:`bytes` object representing the path to the " +"file which will be opened. In this case closefd must be ``True`` (the " +"default) otherwise an error will be raised." +msgstr "" +"代表将被打开的文件路径的字符串或 :class:`bytes` 对象。 在此情况下 closefd 必须为 ``True`` (默认值) " +"否则将会引发异常。" + +#: ../../library/io.rst:561 +msgid "" +"an integer representing the number of an existing OS-level file descriptor " +"to which the resulting :class:`FileIO` object will give access. When the " +"FileIO object is closed this fd will be closed as well, unless *closefd* is " +"set to ``False``." +msgstr "" +"代表一个现有 OS 层级文件描述符的号码的整数,作为结果的 :class:`FileIO` 对象将可访问该文件。 当 FileIO 对象被关闭时此 fd" +" 也将被关闭,除非 *closefd* 设为 ``False``。" + +#: ../../library/io.rst:566 +msgid "" +"The *mode* can be ``'r'``, ``'w'``, ``'x'`` or ``'a'`` for reading " +"(default), writing, exclusive creation or appending. The file will be " +"created if it doesn't exist when opened for writing or appending; it will be" +" truncated when opened for writing. :exc:`FileExistsError` will be raised if" +" it already exists when opened for creating. Opening a file for creating " +"implies writing, so this mode behaves in a similar way to ``'w'``. Add a " +"``'+'`` to the mode to allow simultaneous reading and writing." +msgstr "" +"*mode* 可以为 ``'r'``, ``'w'``, ``'x'`` 或 ``'a'`` 分别表示读取(默认模式)、写入、独占新建或添加。 " +"如果以写入或添加模式打开的文件不存在将自动新建;当以写入模式打开时文件将先清空。 以新建模式打开时如果文件已存在则将引发 " +":exc:`FileExistsError`。 以新建模式打开文件也意味着要写入,因此该模式的行为与 ``'w'`` 类似。 在模式中附带 " +"``'+'`` 将允许同时读取和写入。" + +#: ../../library/io.rst:574 +msgid "" +"The :meth:`read` (when called with a positive argument), :meth:`readinto` " +"and :meth:`write` methods on this class will only make one system call." +msgstr "" +"该类的 :meth:`read` (当附带正值参数调用时), :meth:`readinto` 和 :meth:`write` " +"方法将只执行一次系统调用。" + +#: ../../library/io.rst:577 +msgid "" +"A custom opener can be used by passing a callable as *opener*. The " +"underlying file descriptor for the file object is then obtained by calling " +"*opener* with (*name*, *flags*). *opener* must return an open file " +"descriptor (passing :mod:`os.open` as *opener* results in functionality " +"similar to passing ``None``)." +msgstr "" +"可以通过传入一个可调用对象作为 *opener* 来使用自定义文件打开器。 然后通过调用 *opener* 并传入 (*name*, *flags*) " +"来获取文件对象所对应的下层文件描述符。 *opener* 必须返回一个打开文件描述符(传入 :mod:`os.open` 作为 *opener* " +"的结果在功能上将与传入 ``None`` 类似)。" + +#: ../../library/io.rst:583 +msgid "The newly created file is :ref:`non-inheritable `." +msgstr "新创建的文件是 :ref:`不可继承的 `。" + +#: ../../library/io.rst:585 +msgid "" +"See the :func:`open` built-in function for examples on using the *opener* " +"parameter." +msgstr "有关 opener 参数的示例,请参见内置函数 :func:`open` 。" + +#: ../../library/io.rst:588 +msgid "The *opener* parameter was added. The ``'x'`` mode was added." +msgstr "增加了 *opener* 参数。增加了 ``'x'`` 模式。" + +#: ../../library/io.rst:592 +msgid "The file is now non-inheritable." +msgstr "文件现在禁止继承。" + +#: ../../library/io.rst:595 +msgid "" +":class:`FileIO` provides these data attributes in addition to those from " +":class:`RawIOBase` and :class:`IOBase`:" +msgstr "" +":class:`FileIO` 在继承自 :class:`RawIOBase` 和 :class:`IOBase` " +"的现有成员以外还提供了以下数据属性和方法:" + +#: ../../library/io.rst:600 +msgid "The mode as given in the constructor." +msgstr "构造函数中给定的模式。" + +#: ../../library/io.rst:604 +msgid "" +"The file name. This is the file descriptor of the file when no name is " +"given in the constructor." +msgstr "文件名。当构造函数中没有给定名称时,这是文件的文件描述符。" + +#: ../../library/io.rst:609 +msgid "Buffered Streams" +msgstr "缓冲流" + +#: ../../library/io.rst:611 +msgid "" +"Buffered I/O streams provide a higher-level interface to an I/O device than " +"raw I/O does." +msgstr "相比原始 I/O,缓冲 I/O 流提供了针对 I/O 设备的更高层级接口。" + +#: ../../library/io.rst:616 +msgid "" +"A binary stream using an in-memory bytes buffer. It inherits " +":class:`BufferedIOBase`. The buffer is discarded when the " +":meth:`~IOBase.close` method is called." +msgstr "" +"一个使用内在字节缓冲区的二进制流。 它继承自 :class:`BufferedIOBase`。 在 :meth:`~IOBase.close` " +"方法被调用时将会丢弃缓冲区。" + +#: ../../library/io.rst:620 +msgid "" +"The optional argument *initial_bytes* is a :term:`bytes-like object` that " +"contains initial data." +msgstr "可选参数 *initial_bytes* 是一个包含初始数据的 :term:`bytes-like object`。" + +#: ../../library/io.rst:623 +msgid "" +":class:`BytesIO` provides or overrides these methods in addition to those " +"from :class:`BufferedIOBase` and :class:`IOBase`:" +msgstr "" +":class:`BytesIO` 在继承自 :class:`BufferedIOBase` 和 :class:`IOBase` " +"的成员以外还提供或重写了下列方法:" + +#: ../../library/io.rst:628 +msgid "" +"Return a readable and writable view over the contents of the buffer without " +"copying them. Also, mutating the view will transparently update the " +"contents of the buffer::" +msgstr "返回一个对应于缓冲区内容的可读写视图而不必拷贝其数据。 此外,改变视图将透明地更新缓冲区内容::" + +#: ../../library/io.rst:639 +msgid "" +"As long as the view exists, the :class:`BytesIO` object cannot be resized or" +" closed." +msgstr "只要视图保持存在,:class:`BytesIO` 对象就无法被改变大小或关闭。" + +#: ../../library/io.rst:646 +msgid "Return :class:`bytes` containing the entire contents of the buffer." +msgstr "返回包含整个缓冲区内容的 :class:`bytes`。" + +#: ../../library/io.rst:651 +msgid "In :class:`BytesIO`, this is the same as :meth:`~BufferedIOBase.read`." +msgstr "在 :class:`BytesIO` 中,这与 :meth:`~BufferedIOBase.read` 相同。" + +#: ../../library/io.rst:653 ../../library/io.rst:696 +msgid "The *size* argument is now optional." +msgstr "*size* 参数现在是可选的。" + +#: ../../library/io.rst:658 +msgid "" +"In :class:`BytesIO`, this is the same as :meth:`~BufferedIOBase.readinto`." +msgstr "在 :class:`BytesIO` 中,这与 :meth:`~BufferedIOBase.readinto` 相同。" + +#: ../../library/io.rst:664 +msgid "" +"A buffered binary stream providing higher-level access to a readable, non " +"seekable :class:`RawIOBase` raw binary stream. It inherits " +":class:`BufferedIOBase`." +msgstr "" +"一个提供对可读、不可查找的 :class:`RawIOBase` 原始二进制流的高层级访问的缓冲二进制流。 它继承自 " +":class:`BufferedIOBase`。" + +#: ../../library/io.rst:668 +msgid "" +"When reading data from this object, a larger amount of data may be requested" +" from the underlying raw stream, and kept in an internal buffer. The " +"buffered data can then be returned directly on subsequent reads." +msgstr "当从此对象读取数据时,可能会从下层原始流请求更大量的数据,并存放到内部缓冲区中。 接下来可以在后续读取时直接返回缓冲数据。" + +#: ../../library/io.rst:672 +msgid "" +"The constructor creates a :class:`BufferedReader` for the given readable " +"*raw* stream and *buffer_size*. If *buffer_size* is omitted, " +":data:`DEFAULT_BUFFER_SIZE` is used." +msgstr "" +"根据给定的可读 *raw* 流和 *buffer_size* 创建 :class:`BufferedReader` 的构造器。 如果省略 " +"*buffer_size*,则会使用 :data:`DEFAULT_BUFFER_SIZE`。" + +#: ../../library/io.rst:676 +msgid "" +":class:`BufferedReader` provides or overrides these methods in addition to " +"those from :class:`BufferedIOBase` and :class:`IOBase`:" +msgstr "" +":class:`BufferedReader` 在继承自 :class:`BufferedIOBase` 和 :class:`IOBase` " +"的成员以外还提供或重写了下列方法:" + +#: ../../library/io.rst:681 +msgid "" +"Return bytes from the stream without advancing the position. At most one " +"single read on the raw stream is done to satisfy the call. The number of " +"bytes returned may be less or more than requested." +msgstr "从流返回字节数据而不前移位置。 完成此调用将至多读取一次原始流。 返回的字节数量可能少于或多于请求的数量。" + +#: ../../library/io.rst:687 +msgid "" +"Read and return *size* bytes, or if *size* is not given or negative, until " +"EOF or if the read call would block in non-blocking mode." +msgstr "读取并返回 *size* 个字节,如果 *size* 未给定或为负值,则读取至 EOF 或是在非阻塞模式下读取调用将会阻塞。" + +#: ../../library/io.rst:692 +msgid "" +"Read and return up to *size* bytes with only one call on the raw stream. If " +"at least one byte is buffered, only buffered bytes are returned. Otherwise, " +"one raw stream read call is made." +msgstr "" +"在原始流上通过单次调用读取并返回至多 *size* 个字节。 如果至少缓冲了一个字节,则只返回缓冲的字节。 在其他情况下,将执行一次原始流读取。" + +#: ../../library/io.rst:702 +msgid "" +"A buffered binary stream providing higher-level access to a writeable, non " +"seekable :class:`RawIOBase` raw binary stream. It inherits " +":class:`BufferedIOBase`." +msgstr "" +"一个提供对可写、不可查找的 :class:`RawIOBase` 原始二进制流的高层级访问的缓冲二进制流。 它继承自 " +":class:`BufferedIOBase`。" + +#: ../../library/io.rst:706 +msgid "" +"When writing to this object, data is normally placed into an internal " +"buffer. The buffer will be written out to the underlying :class:`RawIOBase`" +" object under various conditions, including:" +msgstr "" +"当写入到此对象时,数据通常会被放入到内部缓冲区中。 缓冲区将在满足某些条件的情况下被写到下层的 :class:`RawIOBase` 对象,包括:" + +#: ../../library/io.rst:710 +msgid "when the buffer gets too small for all pending data;" +msgstr "当缓冲区对于所有挂起数据而言太小时;" + +#: ../../library/io.rst:711 +msgid "when :meth:`flush()` is called;" +msgstr "当 :meth:`flush()` 被调用时" + +#: ../../library/io.rst:712 +msgid "" +"when a :meth:`seek()` is requested (for :class:`BufferedRandom` objects);" +msgstr "当(为 :class:`BufferedRandom` 对象)请求 :meth:`seek()` 时;" + +#: ../../library/io.rst:713 +msgid "when the :class:`BufferedWriter` object is closed or destroyed." +msgstr "当 :class:`BufferedWriter` 对象被关闭或销毁时。" + +#: ../../library/io.rst:715 +msgid "" +"The constructor creates a :class:`BufferedWriter` for the given writeable " +"*raw* stream. If the *buffer_size* is not given, it defaults to " +":data:`DEFAULT_BUFFER_SIZE`." +msgstr "" +"该构造器会为给定的可写 *raw* 流创建一个 :class:`BufferedWriter`。 如果未给定 *buffer_size*,则使用默认的 " +":data:`DEFAULT_BUFFER_SIZE`。" + +#: ../../library/io.rst:719 +msgid "" +":class:`BufferedWriter` provides or overrides these methods in addition to " +"those from :class:`BufferedIOBase` and :class:`IOBase`:" +msgstr "" +":class:`BufferedWriter` 在继承自 :class:`BufferedIOBase` 和 :class:`IOBase` " +"的成员以外还提供或重写了下列方法:" + +#: ../../library/io.rst:724 +msgid "" +"Force bytes held in the buffer into the raw stream. A " +":exc:`BlockingIOError` should be raised if the raw stream blocks." +msgstr "将缓冲区中保存的字节数据强制放入原始流。 如果原始流发生阻塞则应当引发 :exc:`BlockingIOError`。" + +#: ../../library/io.rst:729 +msgid "" +"Write the :term:`bytes-like object`, *b*, and return the number of bytes " +"written. When in non-blocking mode, a :exc:`BlockingIOError` is raised if " +"the buffer needs to be written out but the raw stream blocks." +msgstr "" +"写入 :term:`bytes-like object` *b* 并返回写入的字节数。 当处于非阻塞模式时,如果缓冲区需要被写入但原始流发生阻塞则将引发" +" :exc:`BlockingIOError`。" + +#: ../../library/io.rst:737 +msgid "" +"A buffered binary stream providing higher-level access to a seekable " +":class:`RawIOBase` raw binary stream. It inherits :class:`BufferedReader` " +"and :class:`BufferedWriter`." +msgstr "" +"一个提供对不可查找的 :class:`RawIOBase` 原始二进制流的高层级访问的缓冲二进制流。 它继承自 " +":class:`BufferedReader` 和 :class:`BufferedWriter`。" + +#: ../../library/io.rst:741 +msgid "" +"The constructor creates a reader and writer for a seekable raw stream, given" +" in the first argument. If the *buffer_size* is omitted it defaults to " +":data:`DEFAULT_BUFFER_SIZE`." +msgstr "" +"该构造器会为在第一个参数中给定的可查找原始流创建一个读取器和写入器。 如果省略 *buffer_size* 则使用默认的 " +":data:`DEFAULT_BUFFER_SIZE`。" + +#: ../../library/io.rst:745 +msgid "" +":class:`BufferedRandom` is capable of anything :class:`BufferedReader` or " +":class:`BufferedWriter` can do. In addition, :meth:`seek` and :meth:`tell` " +"are guaranteed to be implemented." +msgstr "" +":class:`BufferedRandom` 能做到 :class:`BufferedReader` 或 " +":class:`BufferedWriter` 所能做的任何事。 此外,还会确保实现 :meth:`seek` 和 :meth:`tell`。" + +#: ../../library/io.rst:752 +msgid "" +"A buffered binary stream providing higher-level access to two non seekable " +":class:`RawIOBase` raw binary streams---one readable, the other writeable. " +"It inherits :class:`BufferedIOBase`." +msgstr "" +"一个提供对两个不可查找的 :class:`RawIOBase` 原始二进制流的高层级访问的缓冲二进制流 --- 一个可读,另一个可写。 它继承自 " +":class:`BufferedIOBase`。" + +#: ../../library/io.rst:756 +msgid "" +"*reader* and *writer* are :class:`RawIOBase` objects that are readable and " +"writeable respectively. If the *buffer_size* is omitted it defaults to " +":data:`DEFAULT_BUFFER_SIZE`." +msgstr "" +"*reader* 和 *writer* 分别是可读和可写的 :class:`RawIOBase` 对象。 如果省略 *buffer_size* " +"则使用默认的 :data:`DEFAULT_BUFFER_SIZE`。" + +#: ../../library/io.rst:760 +msgid "" +":class:`BufferedRWPair` implements all of :class:`BufferedIOBase`\\'s " +"methods except for :meth:`~BufferedIOBase.detach`, which raises " +":exc:`UnsupportedOperation`." +msgstr "" +":class:`BufferedRWPair` 实现了 :class:`BufferedIOBase` 的所有方法,但 " +":meth:`~BufferedIOBase.detach` 除外,调用该方法将引发 :exc:`UnsupportedOperation`。" + +#: ../../library/io.rst:766 +msgid "" +":class:`BufferedRWPair` does not attempt to synchronize accesses to its " +"underlying raw streams. You should not pass it the same object as reader " +"and writer; use :class:`BufferedRandom` instead." +msgstr "" +":class:`BufferedRWPair` 不会尝试同步访问其下层的原始流。 你不应当将传给它与读取器和写入器相同的对象;而要改用 " +":class:`BufferedRandom`。" + +#: ../../library/io.rst:776 +msgid "" +"Base class for text streams. This class provides a character and line based" +" interface to stream I/O. It inherits :class:`IOBase`." +msgstr "文本流的基类。 该类提供了基于字符和行的流 I/O 接口。 它继承自 :class:`IOBase`。" + +#: ../../library/io.rst:779 +msgid "" +":class:`TextIOBase` provides or overrides these data attributes and methods " +"in addition to those from :class:`IOBase`:" +msgstr ":class:`TextIOBase` 在来自 :class:`IOBase` 的成员以外还提供或重写了以下数据属性和方法:" + +#: ../../library/io.rst:784 +msgid "" +"The name of the encoding used to decode the stream's bytes into strings, and" +" to encode strings into bytes." +msgstr "用于将流的字节串解码为字符串以及将字符串编码为字节串的编码格式名称。" + +#: ../../library/io.rst:789 +msgid "The error setting of the decoder or encoder." +msgstr "解码器或编码器的错误设置。" + +#: ../../library/io.rst:793 +msgid "" +"A string, a tuple of strings, or ``None``, indicating the newlines " +"translated so far. Depending on the implementation and the initial " +"constructor flags, this may not be available." +msgstr "一个字符串、字符串元组或者 ``None``,表示目前已经转写的新行。 根据具体实现和初始构造器旗标的不同,此属性或许会不可用。" + +#: ../../library/io.rst:799 +msgid "" +"The underlying binary buffer (a :class:`BufferedIOBase` instance) that " +":class:`TextIOBase` deals with. This is not part of the :class:`TextIOBase`" +" API and may not exist in some implementations." +msgstr "" +"由 :class:`TextIOBase` 处理的下层二进制缓冲区(为一个 :class:`BufferedIOBase` 的实例)。 它不是 " +":class:`TextIOBase` API 的组成部分并且不存在于某些实现中。" + +#: ../../library/io.rst:805 +msgid "" +"Separate the underlying binary buffer from the :class:`TextIOBase` and " +"return it." +msgstr "从 :class:`TextIOBase` 分离出下层二进制缓冲区并将其返回。" + +#: ../../library/io.rst:808 +msgid "" +"After the underlying buffer has been detached, the :class:`TextIOBase` is in" +" an unusable state." +msgstr "在下层缓冲区被分离后,:class:`TextIOBase` 将处于不可用的状态。" + +#: ../../library/io.rst:811 +msgid "" +"Some :class:`TextIOBase` implementations, like :class:`StringIO`, may not " +"have the concept of an underlying buffer and calling this method will raise " +":exc:`UnsupportedOperation`." +msgstr "" +"某些 :class:`TextIOBase` 的实现,例如 :class:`StringIO` 可能并无下层缓冲区的概念,因此调用此方法将引发 " +":exc:`UnsupportedOperation`。" + +#: ../../library/io.rst:819 +msgid "" +"Read and return at most *size* characters from the stream as a single " +":class:`str`. If *size* is negative or ``None``, reads until EOF." +msgstr "" +"从流中读取至多 *size* 个字符并以单个 :class:`str` 的形式返回。 如果 *size* 为负值或 ``None``,则读取至 EOF。" + +#: ../../library/io.rst:824 +msgid "" +"Read until newline or EOF and return a single ``str``. If the stream is " +"already at EOF, an empty string is returned." +msgstr "读取至换行符或 EOF 并返回单个 ``str``。 如果流已经到达 EOF,则将返回一个空字符串。" + +#: ../../library/io.rst:827 +msgid "If *size* is specified, at most *size* characters will be read." +msgstr "如果指定了 *size* ,最多将读取 *size* 个字符。" + +#: ../../library/io.rst:831 +msgid "" +"Change the stream position to the given *offset*. Behaviour depends on the " +"*whence* parameter. The default value for *whence* is :data:`SEEK_SET`." +msgstr "" +"将流位置改为给定的偏移位置 *offset*。 具体行为取决于 *whence* 形参。 *whence* 的默认值为 " +":data:`SEEK_SET`。" + +#: ../../library/io.rst:835 +msgid "" +":data:`SEEK_SET` or ``0``: seek from the start of the stream (the default); " +"*offset* must either be a number returned by :meth:`TextIOBase.tell`, or " +"zero. Any other *offset* value produces undefined behaviour." +msgstr "" +":data:`SEEK_SET` 或 ``0``: 从流的开始位置起查找(默认值);*offset* 必须为 " +":meth:`TextIOBase.tell` 所返回的数值或为零。 任何其他 *offset* 值都将导致未定义的行为。" + +#: ../../library/io.rst:839 +msgid "" +":data:`SEEK_CUR` or ``1``: \"seek\" to the current position; *offset* must " +"be zero, which is a no-operation (all other values are unsupported)." +msgstr ":data:`SEEK_CUR` 或 ``1``: \"查找\" 到当前位置;*offset* 必须为零,表示无操作(所有其他值均不受支持)。" + +#: ../../library/io.rst:842 +msgid "" +":data:`SEEK_END` or ``2``: seek to the end of the stream; *offset* must be " +"zero (all other values are unsupported)." +msgstr ":data:`SEEK_END` 或 ``2``: 查找到流的末尾;*offset* 必须为零(所有其他值均不受支持)。" + +#: ../../library/io.rst:845 +msgid "Return the new absolute position as an opaque number." +msgstr "以不透明数字形式返回新的绝对位置。" + +#: ../../library/io.rst:852 +msgid "" +"Return the current stream position as an opaque number. The number does not" +" usually represent a number of bytes in the underlying binary storage." +msgstr "以不透明数字形式返回当前流的位置。 该数字通常并不代表下层二进制存储中对应的字节数。" + +#: ../../library/io.rst:858 +msgid "" +"Write the string *s* to the stream and return the number of characters " +"written." +msgstr "将字符串 *s* 写入到流并返回写入的字符数。" + +#: ../../library/io.rst:865 +msgid "" +"A buffered text stream providing higher-level access to a " +":class:`BufferedIOBase` buffered binary stream. It inherits " +":class:`TextIOBase`." +msgstr "" +"一个提供对 :class:`BufferedIOBase` 缓冲二进制流的高层级访问的缓冲文本流。 它继承自 :class:`TextIOBase`。" + +#: ../../library/io.rst:869 +msgid "" +"*encoding* gives the name of the encoding that the stream will be decoded or" +" encoded with. It defaults to :func:`locale.getpreferredencoding(False) " +"`." +msgstr "" +"*encoding* 给出流被解码或编码时将使用的编码格式。 它默认为 " +":func:`locale.getpreferredencoding(False) `。" + +#: ../../library/io.rst:873 +msgid "" +"*errors* is an optional string that specifies how encoding and decoding " +"errors are to be handled. Pass ``'strict'`` to raise a :exc:`ValueError` " +"exception if there is an encoding error (the default of ``None`` has the " +"same effect), or pass ``'ignore'`` to ignore errors. (Note that ignoring " +"encoding errors can lead to data loss.) ``'replace'`` causes a replacement " +"marker (such as ``'?'``) to be inserted where there is malformed data. " +"``'backslashreplace'`` causes malformed data to be replaced by a backslashed" +" escape sequence. When writing, ``'xmlcharrefreplace'`` (replace with the " +"appropriate XML character reference) or ``'namereplace'`` (replace with " +"``\\N{...}`` escape sequences) can be used. Any other error handling name " +"that has been registered with :func:`codecs.register_error` is also valid." +msgstr "" +"*errors* 是一个可选的字符串,它指明编码格式和编码格式错误的处理方式。 传入 ``'strict'`` 将在出现编码格式错误时引发 " +":exc:`ValueError` (默认值 ``None`` 具有相同的效果),传入 ``'ignore'`` 将忽略错误。 " +"(请注意忽略编码格式错误会导致数据丢失。) ``'replace'`` 会在出现错误数据时插入一个替换标记 (例如 ``'?'``)。 " +"``'backslashreplace'`` 将把错误数据替换为一个反斜杠转义序列。 在写入时,还可以使用 " +"``'xmlcharrefreplace'`` (替换为适当的 XML 字符引用) 或 ``'namereplace'`` (替换为 " +"``\\N{...}`` 转义序列)。 任何其他通过 :func:`codecs.register_error` 注册的错误处理方式名称也可以被接受。" + +#: ../../library/io.rst:889 +msgid "" +"*newline* controls how line endings are handled. It can be ``None``, " +"``''``, ``'\\n'``, ``'\\r'``, and ``'\\r\\n'``. It works as follows:" +msgstr "" +"*newline* 控制行结束符处理方式。 它可以为 ``None``, ``''``, ``'\\n'``, ``'\\r'`` 和 " +"``'\\r\\n'``。 其工作原理如下:" + +#: ../../library/io.rst:892 +msgid "" +"When reading input from the stream, if *newline* is ``None``, " +":term:`universal newlines` mode is enabled. Lines in the input can end in " +"``'\\n'``, ``'\\r'``, or ``'\\r\\n'``, and these are translated into " +"``'\\n'`` before being returned to the caller. If *newline* is ``''``, " +"universal newlines mode is enabled, but line endings are returned to the " +"caller untranslated. If *newline* has any of the other legal values, input " +"lines are only terminated by the given string, and the line ending is " +"returned to the caller untranslated." +msgstr "" +"当从流读取输入时,如果 *newline* 为 ``None``,则将启用 :term:`universal newlines` 模式。 " +"输入中的行结束符可以为 ``'\\n'``, ``'\\r'`` 或 ``'\\r\\n'``,在返回给调用者之前它们会被统一转写为 " +"``'\\n'``。 如果 *newline* 为 ``''``,也会启用通用换行模式,但行结束符会不加转写即返回给调用者。 如果 *newline* " +"具有任何其他合法的值,则输入行将仅由给定的字符串结束,并且行结束符会不加转写即返回给调用者。" + +#: ../../library/io.rst:901 +msgid "" +"When writing output to the stream, if *newline* is ``None``, any ``'\\n'`` " +"characters written are translated to the system default line separator, " +":data:`os.linesep`. If *newline* is ``''`` or ``'\\n'``, no translation " +"takes place. If *newline* is any of the other legal values, any ``'\\n'`` " +"characters written are translated to the given string." +msgstr "" +"将输出写入流时,如果 *newline* 为 ``None``,则写入的任何 ``'\\n'`` 字符都将转换为系统默认行分隔符 " +":data:`os.linesep`。如果 *newline* 是 ``''`` 或 ``'\\n'``,则不进行翻译。如果 *newline* " +"是任何其他合法值,则写入的任何 ``'\\n'`` 字符将被转换为给定的字符串。" + +#: ../../library/io.rst:907 +msgid "" +"If *line_buffering* is ``True``, :meth:`flush` is implied when a call to " +"write contains a newline character or a carriage return." +msgstr "如果 *line_buffering* 为 ``True``,则当一个写入调用包含换行符或回车时将会应用 :meth:`flush`。" + +#: ../../library/io.rst:910 +msgid "" +"If *write_through* is ``True``, calls to :meth:`write` are guaranteed not to" +" be buffered: any data written on the :class:`TextIOWrapper` object is " +"immediately handled to its underlying binary *buffer*." +msgstr "" +"如果 *write_through* 为 ``True``,对 :meth:`write` 的调用会确保不被缓冲:在 " +":class:`TextIOWrapper` 对象上写入的任何数据会立即交给其下层的 *buffer* 来处理。" + +#: ../../library/io.rst:914 +msgid "The *write_through* argument has been added." +msgstr "已添加 *write_through* 参数" + +#: ../../library/io.rst:917 +msgid "" +"The default *encoding* is now ``locale.getpreferredencoding(False)`` instead" +" of ``locale.getpreferredencoding()``. Don't change temporary the locale " +"encoding using :func:`locale.setlocale`, use the current locale encoding " +"instead of the user preferred encoding." +msgstr "" +"默认的 *encoding* 现在将为 ``locale.getpreferredencoding(False)`` 而非 " +"``locale.getpreferredencoding()``。 不要使用 :func:`locale.setlocale` " +"来临时改变区域编码格式,要使用当前区域编码格式而不是用户的首选编码格式。" + +#: ../../library/io.rst:923 +msgid "" +":class:`TextIOWrapper` provides these data attributes and methods in " +"addition to those from :class:`TextIOBase` and :class:`IOBase`:" +msgstr "" +":class:`TextIOWrapper` 在继承自 :class:`TextIOBase` 和 :class:`IOBase` " +"的现有成员以外还提供了以下数据属性和方法:" + +#: ../../library/io.rst:928 +msgid "Whether line buffering is enabled." +msgstr "是否启用行缓冲。" + +#: ../../library/io.rst:932 +msgid "Whether writes are passed immediately to the underlying binary buffer." +msgstr "写入是否要立即传给下层的二进制缓冲。" + +#: ../../library/io.rst:940 +msgid "" +"Reconfigure this text stream using new settings for *encoding*, *errors*, " +"*newline*, *line_buffering* and *write_through*." +msgstr "" +"使用 *encoding*, *errors*, *newline*, *line_buffering* 和 *write_through* " +"的新设置来重新配置此文本流。" + +#: ../../library/io.rst:943 +msgid "" +"Parameters not specified keep current settings, except ``errors='strict'`` " +"is used when *encoding* is specified but *errors* is not specified." +msgstr "" +"未指定的形参将保留当前设定,例外情况是当指定了 *encoding* 但未指定 *errors* 时将会使用 ``errors='strict'``。" + +#: ../../library/io.rst:947 +msgid "" +"It is not possible to change the encoding or newline if some data has " +"already been read from the stream. On the other hand, changing encoding " +"after write is possible." +msgstr "如果已经有数据从流中被读取则将无法再改变编码格式或行结束符。 另一方面,在写入数据之后再改变编码格式则是可以的。" + +#: ../../library/io.rst:951 +msgid "" +"This method does an implicit stream flush before setting the new parameters." +msgstr "此方法会在设置新的形参之前执行隐式的流刷新。" + +#: ../../library/io.rst:959 +msgid "" +"A text stream using an in-memory text buffer. It inherits " +":class:`TextIOBase`." +msgstr "一个使用内存文本缓冲的文本流。 它继承自 :class:`TextIOBase`。" + +#: ../../library/io.rst:962 +msgid "" +"The text buffer is discarded when the :meth:`~IOBase.close` method is " +"called." +msgstr "当 :meth:`~IOBase.close` 方法被调用时将会丢弃文本缓冲区。" + +#: ../../library/io.rst:965 +msgid "" +"The initial value of the buffer can be set by providing *initial_value*. If " +"newline translation is enabled, newlines will be encoded as if by " +":meth:`~TextIOBase.write`. The stream is positioned at the start of the " +"buffer." +msgstr "" +"缓冲区的初始值可通过提供 *initial_value* 来设置。 如果启用了行结束符转写,换行将以 :meth:`~TextIOBase.write`" +" 所用的方式被编码。 数据流位置将被设为缓冲区的开头。" + +#: ../../library/io.rst:970 +msgid "" +"The *newline* argument works like that of :class:`TextIOWrapper`, except " +"that when writing output to the stream, if *newline* is ``None``, newlines " +"are written as ``\\n`` on all platforms." +msgstr "" +"*newline* 参数的规则与 :class:`TextIOWrapper` 所用的一致,不同之处在于当将输出写入到流时,如果 *newline* 为" +" ``None``,则在所有平台上换行符都会被写入为 ``\\n``。" + +#: ../../library/io.rst:974 +msgid "" +":class:`StringIO` provides this method in addition to those from " +":class:`TextIOBase` and :class:`IOBase`:" +msgstr "" +":class:`StringIO` 在继承自 :class:`TextIOBase` 和 :class:`IOBase` " +"的现有成员以外还提供了以下方法:" + +#: ../../library/io.rst:979 +msgid "" +"Return a ``str`` containing the entire contents of the buffer. Newlines are " +"decoded as if by :meth:`~TextIOBase.read`, although the stream position is " +"not changed." +msgstr "" +"返回一个包含缓冲区全部内容的 ``str``。 换行符会以与 :meth:`~TextIOBase.read` " +"相同的方式被编码,但是流的位置不会被改变。" + +#: ../../library/io.rst:983 +msgid "Example usage::" +msgstr "用法示例::" + +#: ../../library/io.rst:1005 +msgid "" +"A helper codec that decodes newlines for :term:`universal newlines` mode. It" +" inherits :class:`codecs.IncrementalDecoder`." +msgstr "" +"用于在 :term:`universal newlines` 模式下解码换行符的辅助编解码器。 它继承自 " +":class:`codecs.IncrementalDecoder`。" + +#: ../../library/io.rst:1010 +msgid "Performance" +msgstr "性能" + +#: ../../library/io.rst:1012 +msgid "" +"This section discusses the performance of the provided concrete I/O " +"implementations." +msgstr "本节讨论所提供的具体 I/O 实现的性能。" + +#: ../../library/io.rst:1018 +msgid "" +"By reading and writing only large chunks of data even when the user asks for" +" a single byte, buffered I/O hides any inefficiency in calling and executing" +" the operating system's unbuffered I/O routines. The gain depends on the OS" +" and the kind of I/O which is performed. For example, on some modern OSes " +"such as Linux, unbuffered disk I/O can be as fast as buffered I/O. The " +"bottom line, however, is that buffered I/O offers predictable performance " +"regardless of the platform and the backing device. Therefore, it is almost " +"always preferable to use buffered I/O rather than unbuffered I/O for binary " +"data." +msgstr "" +"即使在用户请求单个字节时,也只读取和写入大块数据。通过该方法,缓冲 I/O 隐藏了操作系统调用和执行无缓冲 I/O " +"例程时的任何低效性。增益取决于操作系统和执行的 I/O 类型。例如,在某些现代操作系统上(例如 Linux),无缓冲磁盘 I/O 可以与缓冲 I/O " +"一样快。但最重要的是,无论平台和支持设备如何,缓冲 I/O 都能提供可预测的性能。因此,对于二进制数据,应首选使用缓冲的 I/O 而不是未缓冲的 I/O" +" 。" + +#: ../../library/io.rst:1030 +msgid "" +"Text I/O over a binary storage (such as a file) is significantly slower than" +" binary I/O over the same storage, because it requires conversions between " +"unicode and binary data using a character codec. This can become noticeable" +" handling huge amounts of text data like large log files. Also, " +":meth:`TextIOWrapper.tell` and :meth:`TextIOWrapper.seek` are both quite " +"slow due to the reconstruction algorithm used." +msgstr "" +"二进制存储(如文件)上的文本 I/O 比同一存储上的二进制 I/O " +"慢得多,因为它需要使用字符编解码器在Unicode和二进制数据之间进行转换。这在处理大量文本数据(如大型日志文件)时会变得非常明显。此外,由于使用的重构算法" +" :meth:`TextIOWrapper.tell` 和 :meth:`TextIOWrapper.seek` 都相当慢。" + +#: ../../library/io.rst:1037 +msgid "" +":class:`StringIO`, however, is a native in-memory unicode container and will" +" exhibit similar speed to :class:`BytesIO`." +msgstr ":class:`StringIO` 是原生的内存 Unicode 容器,速度与 :class:`BytesIO` 相似。" + +#: ../../library/io.rst:1041 +msgid "Multi-threading" +msgstr "多线程" + +#: ../../library/io.rst:1043 +msgid "" +":class:`FileIO` objects are thread-safe to the extent that the operating " +"system calls (such as ``read(2)`` under Unix) they wrap are thread-safe too." +msgstr ":class:`FileIO` 对象是线程安全的,只要它们封装的操作系统调用(比如Unix下的 ``read(2)`` )也是线程安全的。" + +#: ../../library/io.rst:1046 +msgid "" +"Binary buffered objects (instances of :class:`BufferedReader`, " +":class:`BufferedWriter`, :class:`BufferedRandom` and " +":class:`BufferedRWPair`) protect their internal structures using a lock; it " +"is therefore safe to call them from multiple threads at once." +msgstr "" +"二进制缓冲对象(例如 :class:`BufferedReader`, :class:`BufferedWriter`, " +":class:`BufferedRandom` 和 " +":class:`BufferedRWPair`)使用锁来保护其内部结构;因此,可以安全地一次从多个线程中调用它们。" + +#: ../../library/io.rst:1051 +msgid ":class:`TextIOWrapper` objects are not thread-safe." +msgstr ":class:`TextIOWrapper` 对象不再是线程安全的。" + +#: ../../library/io.rst:1054 +msgid "Reentrancy" +msgstr "可重入性" + +#: ../../library/io.rst:1056 +msgid "" +"Binary buffered objects (instances of :class:`BufferedReader`, " +":class:`BufferedWriter`, :class:`BufferedRandom` and " +":class:`BufferedRWPair`) are not reentrant. While reentrant calls will not " +"happen in normal situations, they can arise from doing I/O in a " +":mod:`signal` handler. If a thread tries to re-enter a buffered object " +"which it is already accessing, a :exc:`RuntimeError` is raised. Note this " +"doesn't prohibit a different thread from entering the buffered object." +msgstr "" +"二进制缓冲对象( :class:`BufferedReader` , :class:`BufferedWriter` , " +":class:`BufferedRandom` 和 :class:`BufferedRWPair` " +"的实例)不是可重入的。虽然在正常情况下不会发生可重入调用,但仍可能会在 :mod:`signal` 处理程序执行 I/O " +"时产生。如果线程尝试重入已经访问的缓冲对象,则会引发 :exc:`RuntimeError` 。注意,这并不禁止其他线程进入缓冲对象。" + +#: ../../library/io.rst:1064 +msgid "" +"The above implicitly extends to text files, since the :func:`open()` " +"function will wrap a buffered object inside a :class:`TextIOWrapper`. This " +"includes standard streams and therefore affects the built-in :func:`print()`" +" function as well." +msgstr "" +"上面的内容隐式地扩展到文本文件中,因为 :func:`open()` 函数将把缓冲对象封装在 :class:`TextIOWrapper` 中。 " +"这包括标准流,因而也会影响内置的 :func:`print()` 函数。" diff --git a/library/ipaddress.po b/library/ipaddress.po new file mode 100644 index 000000000..7ea63a5ff --- /dev/null +++ b/library/ipaddress.po @@ -0,0 +1,1140 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) 2001-2024, Python Software Foundation +# This file is distributed under the same license as the Python package. +# FIRST AUTHOR , YEAR. +# +# Translators: +# Sean Chao , 2020 +# Kevin Deng , 2021 +# Leo Li , 2021 +# Alpha Du , 2022 +# Rafael Fontenelle , 2023 +# Freesand Leo , 2024 +# +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: Python 3.9\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2024-05-10 15:50+0000\n" +"PO-Revision-Date: 2017-02-16 23:15+0000\n" +"Last-Translator: Freesand Leo , 2024\n" +"Language-Team: Chinese (China) (https://app.transifex.com/python-doc/teams/5390/zh_CN/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: zh_CN\n" +"Plural-Forms: nplurals=1; plural=0;\n" + +#: ../../library/ipaddress.rst:2 +msgid ":mod:`ipaddress` --- IPv4/IPv6 manipulation library" +msgstr ":mod:`ipaddress` --- IPv4/IPv6 操作库" + +#: ../../library/ipaddress.rst:9 +msgid "**Source code:** :source:`Lib/ipaddress.py`" +msgstr "**源代码:** :source:`Lib/ipaddress.py`" + +#: ../../library/ipaddress.rst:13 +msgid "" +":mod:`ipaddress` provides the capabilities to create, manipulate and operate" +" on IPv4 and IPv6 addresses and networks." +msgstr ":mod:`ipaddress` 提供了创建、处理和操作 IPv4 和 IPv6 地址和网络的功能。" + +#: ../../library/ipaddress.rst:16 +msgid "" +"The functions and classes in this module make it straightforward to handle " +"various tasks related to IP addresses, including checking whether or not two" +" hosts are on the same subnet, iterating over all hosts in a particular " +"subnet, checking whether or not a string represents a valid IP address or " +"network definition, and so on." +msgstr "" +"该模块中的函数和类可以直接处理与IP地址相关的各种任务,包括检查两个主机是否在同一个子网中,遍历某个子网中的所有主机,检查一个字符串是否是一个有效的IP地址或网络定义等等。" + +#: ../../library/ipaddress.rst:22 +msgid "" +"This is the full module API reference—for an overview and introduction, see " +":ref:`ipaddress-howto`." +msgstr "这是完整的模块 API 参考—若要查看概述,请见 :ref:`ipaddress-howto`." + +#: ../../library/ipaddress.rst:35 +msgid "Convenience factory functions" +msgstr "方便的工厂函数" + +#: ../../library/ipaddress.rst:37 +msgid "" +"The :mod:`ipaddress` module provides factory functions to conveniently " +"create IP addresses, networks and interfaces:" +msgstr ":mod:`ipaddress` 模块提供来工厂函数来方便地创建 IP 地址,网络和接口:" + +#: ../../library/ipaddress.rst:42 +msgid "" +"Return an :class:`IPv4Address` or :class:`IPv6Address` object depending on " +"the IP address passed as argument. Either IPv4 or IPv6 addresses may be " +"supplied; integers less than ``2**32`` will be considered to be IPv4 by " +"default. A :exc:`ValueError` is raised if *address* does not represent a " +"valid IPv4 or IPv6 address." +msgstr "" +"返回一个 :class:`IPv4Address` 或 :class:`IPv6Address` 对象,取决于作为参数传递的 IP " +"地址。可以提供IPv4或IPv6地址,小于 ``2**32`` 的整数默认被认为是 IPv4。如果 *address* 不是有效的 IPv4 或 " +"IPv6 地址,则会抛出 :exc:`ValueError`。" + +#: ../../library/ipaddress.rst:56 +msgid "" +"Return an :class:`IPv4Network` or :class:`IPv6Network` object depending on " +"the IP address passed as argument. *address* is a string or integer " +"representing the IP network. Either IPv4 or IPv6 networks may be supplied; " +"integers less than ``2**32`` will be considered to be IPv4 by default. " +"*strict* is passed to :class:`IPv4Network` or :class:`IPv6Network` " +"constructor. A :exc:`ValueError` is raised if *address* does not represent " +"a valid IPv4 or IPv6 address, or if the network has host bits set." +msgstr "" +"返回一个 :class:`IPv4Network` 或 :class:`IPv6Network` 对象,具体取决于作为参数传入的 IP 地址。 " +"*address* 是表示 IP 网址的字符串或整数。 可以提供 IPv4 或 IPv6 网址;小于 ``2**32`` 的整数默认被视为 IPv4。 " +"*strict* 会被传给 :class:`IPv4Network` 或 :class:`IPv6Network` 构造器。 如果 *address* " +"不表示有效的 IPv4 或 IPv6 网址,或者网络设置了 host 比特位,则会引发 :exc:`ValueError`。" + +#: ../../library/ipaddress.rst:70 +msgid "" +"Return an :class:`IPv4Interface` or :class:`IPv6Interface` object depending " +"on the IP address passed as argument. *address* is a string or integer " +"representing the IP address. Either IPv4 or IPv6 addresses may be supplied;" +" integers less than ``2**32`` will be considered to be IPv4 by default. A " +":exc:`ValueError` is raised if *address* does not represent a valid IPv4 or " +"IPv6 address." +msgstr "" +"返回一个 :class:`IPv4Interface` 或 :class:`IPv6Interface` 对象,取决于作为参数传递的 IP 地址。 " +"*address* 是代表 IP 地址的字符串或整数。 可以提供 IPv4 或 IPv6 地址,小于 ``2**32`` 的整数默认认为是 IPv4。 " +"如果 *address* 不是有效的IPv4 或 IPv6 地址,则会抛出一个 :exc:`ValueError`。" + +#: ../../library/ipaddress.rst:77 +msgid "" +"One downside of these convenience functions is that the need to handle both " +"IPv4 and IPv6 formats means that error messages provide minimal information " +"on the precise error, as the functions don't know whether the IPv4 or IPv6 " +"format was intended. More detailed error reporting can be obtained by " +"calling the appropriate version specific class constructors directly." +msgstr "" +"这些方便的函数的一个缺点是需要同时处理IPv4和IPv6格式,这意味着提供的错误信息并不精准,因为函数不知道是打算采用IPv4还是IPv6格式。更详细的错误报告可以通过直接调用相应版本的类构造函数来获得。" + +#: ../../library/ipaddress.rst:86 +msgid "IP Addresses" +msgstr "IP 地址" + +#: ../../library/ipaddress.rst:89 +msgid "Address objects" +msgstr "地址对象" + +#: ../../library/ipaddress.rst:91 +msgid "" +"The :class:`IPv4Address` and :class:`IPv6Address` objects share a lot of " +"common attributes. Some attributes that are only meaningful for IPv6 " +"addresses are also implemented by :class:`IPv4Address` objects, in order to " +"make it easier to write code that handles both IP versions correctly. " +"Address objects are :term:`hashable`, so they can be used as keys in " +"dictionaries." +msgstr "" +":class:`IPv4Address` 和 :class:`IPv6Address` 对象有很多共同的属性。一些只对IPv6 地址有意义的属性也在 " +":class:`IPv4Address` 对象实现,以便更容易编写正确处理两种 IP 版本的代码。地址对象是可哈希的 " +":term:`hashable`,所以它们可以作为字典中的键来使用。" + +#: ../../library/ipaddress.rst:99 +msgid "" +"Construct an IPv4 address. An :exc:`AddressValueError` is raised if " +"*address* is not a valid IPv4 address." +msgstr "" +"构造一个 IPv4 地址。 如果 *address* 不是一个有效的 IPv4 地址,会抛出 :exc:`AddressValueError` 。" + +#: ../../library/ipaddress.rst:102 +msgid "The following constitutes a valid IPv4 address:" +msgstr "以下是有效的 IPv4 地址:" + +#: ../../library/ipaddress.rst:104 +msgid "" +"A string in decimal-dot notation, consisting of four decimal integers in the" +" inclusive range 0--255, separated by dots (e.g. ``192.168.0.1``). Each " +"integer represents an octet (byte) in the address. Leading zeroes are not " +"tolerated to prevent confusion with octal notation." +msgstr "" +"以十进制小数点表示的字符串,由四个十进制整数组成,范围为0--255,用点隔开(例如 ``192.168.0.1`` " +")。每个整数代表地址中的八位(一个字节)。不允许使用前导零,以免与八进制表示产生歧义。" + +#: ../../library/ipaddress.rst:108 +msgid "An integer that fits into 32 bits." +msgstr "一个32位可容纳的整数。" + +#: ../../library/ipaddress.rst:109 +msgid "" +"An integer packed into a :class:`bytes` object of length 4 (most significant" +" octet first)." +msgstr "一个长度为 4 的封装在 :class:`bytes` 对象中的整数(高位优先)。" + +#: ../../library/ipaddress.rst:121 +msgid "" +"Leading zeros are tolerated, even in ambiguous cases that look like octal " +"notation." +msgstr "前导零可被接受,即使是在可能与八进制表示混淆的情况下也会被接受。" + +#: ../../library/ipaddress.rst:126 +msgid "" +"Leading zeros are no longer tolerated and are treated as an error. IPv4 " +"address strings are now parsed as strict as glibc :func:`~socket.inet_pton`." +msgstr "" +"前导零不再被接受,并且会被视作错误。IPv4地址字符串现在严格按照glibc的 :func:`~socket.inet_pton` 函数进行解析。" + +#: ../../library/ipaddress.rst:132 +msgid "" +"The above change was also included in Python 3.9 starting with version " +"3.9.5." +msgstr "上述变更也在自3.9.5版本起的Python 3.9当中被包含。" + +#: ../../library/ipaddress.rst:137 +msgid "" +"The above change was also included in Python 3.8 starting with version " +"3.8.12." +msgstr "从3.8.12版本开始,Python 3.8中也包含了上述变化。" + +#: ../../library/ipaddress.rst:142 +msgid "The appropriate version number: ``4`` for IPv4, ``6`` for IPv6." +msgstr "合适的版本号:IPv4为 ``4`` ,IPv6为 ``6`` 。" + +#: ../../library/ipaddress.rst:146 +msgid "" +"The total number of bits in the address representation for this version: " +"``32`` for IPv4, ``128`` for IPv6." +msgstr "在该版本的地址表示中,比特数的总数:IPv4为 ``32`` ;IPv6为 ``128`` 。" + +#: ../../library/ipaddress.rst:149 +msgid "" +"The prefix defines the number of leading bits in an address that are " +"compared to determine whether or not an address is part of a network." +msgstr "前缀定义了地址中的前导位数量,通过比较来确定一个地址是否是网络的一部分。" + +#: ../../library/ipaddress.rst:156 +msgid "" +"The string representation in dotted decimal notation. Leading zeroes are " +"never included in the representation." +msgstr "以点符号分割十进制表示的字符串。表示中不包括前导零。" + +#: ../../library/ipaddress.rst:159 +msgid "" +"As IPv4 does not define a shorthand notation for addresses with octets set " +"to zero, these two attributes are always the same as ``str(addr)`` for IPv4 " +"addresses. Exposing these attributes makes it easier to write display code " +"that can handle both IPv4 and IPv6 addresses." +msgstr "" +"由于IPv4没有为八位数设为零的地址定义速记符号,这两个属性始终与IPv4地址的 ``str(addr)`` " +"相同。暴露这些属性使得编写能够处理IPv4和IPv6地址的显示代码变得更加容易。" + +#: ../../library/ipaddress.rst:166 +msgid "" +"The binary representation of this address - a :class:`bytes` object of the " +"appropriate length (most significant octet first). This is 4 bytes for IPv4 " +"and 16 bytes for IPv6." +msgstr "" +"这个地址的二进制表示——一个适当长度的 :class:`bytes` 对象(最高的八位在最前)。 对于 IPv4 来说是 4 字节,对于 IPv6 " +"来说是 16 字节。" + +#: ../../library/ipaddress.rst:172 +msgid "The name of the reverse DNS PTR record for the IP address, e.g.::" +msgstr "IP地址的反向DNS PTR记录的名称,例如::" + +#: ../../library/ipaddress.rst:179 +msgid "" +"This is the name that could be used for performing a PTR lookup, not the " +"resolved hostname itself." +msgstr "这是可用于执行PTR查询的名称,而不是已解析的主机名本身。" + +#: ../../library/ipaddress.rst:186 +msgid "" +"``True`` if the address is reserved for multicast use. See :RFC:`3171` (for" +" IPv4) or :RFC:`2373` (for IPv6)." +msgstr "" +"如果该地址被保留用作多播用途,返回 ``True`` 。关于多播地址,请参见 :RFC:`3171` (IPv4)和 :RFC:`2373` " +"(IPv6)。" + +#: ../../library/ipaddress.rst:191 +msgid "" +"``True`` if the address is defined as not globally reachable by iana-" +"ipv4-special-registry_ (for IPv4) or iana-ipv6-special-registry_ (for IPv6) " +"with the following exceptions:" +msgstr "" +"如果地址被 iana-ipv4-special-registry_ (针对 IPv4) 或 iana-ipv6-special-registry_ " +"(针对 IPv6) 定义为非全局可用则为 ``True``,例外情况如下:" + +#: ../../library/ipaddress.rst:195 +msgid "" +"``is_private`` is ``False`` for the shared address space (``100.64.0.0/10``)" +msgstr "对于共享地址空间 (``100.64.0.0/10``) ``is_private`` 为 ``False``" + +#: ../../library/ipaddress.rst:196 ../../library/ipaddress.rst:223 +msgid "" +"For IPv4-mapped IPv6-addresses the ``is_private`` value is determined by the" +" semantics of the underlying IPv4 addresses and the following condition " +"holds (see :attr:`IPv6Address.ipv4_mapped`)::" +msgstr "" +"对于映射 IPv4 的 IPv6 地址来说 ``is_private`` 值由下层 IPv4 地址的语义决定并且以下条件将保持成立 (见 " +":attr:`IPv6Address.ipv4_mapped`)::" + +#: ../../library/ipaddress.rst:202 +msgid "" +"``is_private`` has value opposite to :attr:`is_global`, except for the " +"shared address space (``100.64.0.0/10`` range) where they are both " +"``False``." +msgstr "" +"``is_private`` 具有与 :attr:`is_global` 相反的值,除了对于共享的地址空间(即 ``100.64.0.0/10`` " +"范围)来说它们均为 ``False``。" + +#: ../../library/ipaddress.rst:207 +msgid "Fixed some false positives and false negatives." +msgstr "修复了一些错误的正值和错误的负值。" + +#: ../../library/ipaddress.rst:209 +msgid "" +"``192.0.0.0/24`` is considered private with the exception of " +"``192.0.0.9/32`` and ``192.0.0.10/32`` (previously: only the " +"``192.0.0.0/29`` sub-range was considered private)." +msgstr "" +"``192.0.0.0/24`` 被视为私有但 ``192.0.0.9/32`` 和 ``192.0.0.10/32`` 除外(之前:只有 " +"``192.0.0.0/29`` 子范围被视为私有)。" + +#: ../../library/ipaddress.rst:211 +msgid "``64:ff9b:1::/48`` is considered private." +msgstr "``64:ff9b:1::/48`` 被视为私有。" + +#: ../../library/ipaddress.rst:212 +msgid "``2002::/16`` is considered private." +msgstr "``2002::/16`` 被视为私有。" + +#: ../../library/ipaddress.rst:213 +msgid "" +"There are exceptions within ``2001::/23`` (otherwise considered private): " +"``2001:1::1/128``, ``2001:1::2/128``, ``2001:3::/32``, ``2001:4:112::/48``, " +"``2001:20::/28``, ``2001:30::/28``. The exceptions are not considered " +"private." +msgstr "" +"在 ``2001::/23`` 中存在例外(其余范围被视为私有): ``2001:1::1/128``, ``2001:1::2/128``, " +"``2001:3::/32``, ``2001:4:112::/48``, ``2001:20::/28``, ``2001:30::/28``。 " +"这些例外不被视为私有。" + +#: ../../library/ipaddress.rst:219 +msgid "" +"``True`` if the address is defined as globally reachable by iana-" +"ipv4-special-registry_ (for IPv4) or iana-ipv6-special-registry_ (for IPv6) " +"with the following exception:" +msgstr "" +"如果地址被 iana-ipv4-special-registry_ (针对 IPv4) 或 iana-ipv6-special-registry_ " +"(针对 IPv6) 定义为全局可用则为 ``True``,例外情况如下:" + +#: ../../library/ipaddress.rst:229 +msgid "" +"``is_global`` has value opposite to :attr:`is_private`, except for the " +"shared address space (``100.64.0.0/10`` range) where they are both " +"``False``." +msgstr "" +"``is_global`` 具有与 :attr:`is_private` 相反的值,除了对于共享的地址空间(即 ``100.64.0.0/10`` " +"范围)来说它们均为 ``False``。" + +#: ../../library/ipaddress.rst:236 +msgid "" +"Fixed some false positives and false negatives, see :attr:`is_private` for " +"details." +msgstr "修复了一些错误的正值和错误的负值,请参阅 :attr:`is_private` 了解详情。" + +#: ../../library/ipaddress.rst:240 +msgid "" +"``True`` if the address is unspecified. See :RFC:`5735` (for IPv4) or " +":RFC:`2373` (for IPv6)." +msgstr "当地址未指定时为 ``True`` 。 参见 :RFC:`5735` (IPv4) 或 :RFC:`2373` (IPv6)." + +#: ../../library/ipaddress.rst:245 +msgid "``True`` if the address is otherwise IETF reserved." +msgstr "如果该地址属于互联网工程任务组(IETF)所规定的其他保留地址,返回 ``True`` 。" + +#: ../../library/ipaddress.rst:249 +msgid "" +"``True`` if this is a loopback address. See :RFC:`3330` (for IPv4) or " +":RFC:`2373` (for IPv6)." +msgstr "" +"如果该地址为一个回环地址,返回 ``True`` 。关于回环地址,请见 :RFC:`3330` (IPv4)和 :RFC:`2373` (IPv6)。" + +#: ../../library/ipaddress.rst:254 +msgid "" +"``True`` if the address is reserved for link-local usage. See :RFC:`3927`." +msgstr "如果该地址被保留用于本地链接则为 ``True``。 参见 :RFC:`3927`。" + +#: ../../library/ipaddress.rst:262 +msgid "" +"Returns a string representation of the IP address, controlled by an explicit" +" format string. *fmt* can be one of the following: ``'s'``, the default " +"option, equivalent to :func:`str`, ``'b'`` for a zero-padded binary string, " +"``'X'`` or ``'x'`` for an uppercase or lowercase hexadecimal representation," +" or ``'n'``, which is equivalent to ``'b'`` for IPv4 addresses and ``'x'`` " +"for IPv6. For binary and hexadecimal representations, the form specifier " +"``'#'`` and the grouping option ``'_'`` are available. ``__format__`` is " +"used by ``format``, ``str.format`` and f-strings." +msgstr "" +"返回一个IP地址的字符串表示,由一个明确的格式字符串控制。*fmt* 可以是以下之一: ``'s'``,默认选项,相当于 " +":func:`str`,``'b'`` 用于零填充的二进制字符串,``'X'`` 或者 ``'x'`` 用于大写或小写的十六进制表示,或者 " +"``'n'`` 相当于 ``'b'`` 用于 IPv4 地址和 ``'x'`` 用于 IPv6 地址。 对于二进制和十六进制表示法,可以使用形式指定器 " +"``'#'`` 和分组选项 ``'_'``。 ``__format__`` 被 ``format``、 ``str.format`` 和 f " +"字符串使用。" + +#: ../../library/ipaddress.rst:289 +msgid "" +"Construct an IPv6 address. An :exc:`AddressValueError` is raised if " +"*address* is not a valid IPv6 address." +msgstr "" +"构造一个 IPv6 地址。 如果 *address* 不是一个有效的 IPv6 地址,会抛出 :exc:`AddressValueError` 。" + +#: ../../library/ipaddress.rst:292 +msgid "The following constitutes a valid IPv6 address:" +msgstr "以下是有效的 IPv6 地址:" + +#: ../../library/ipaddress.rst:294 +msgid "" +"A string consisting of eight groups of four hexadecimal digits, each group " +"representing 16 bits. The groups are separated by colons. This describes an" +" *exploded* (longhand) notation. The string can also be *compressed* " +"(shorthand notation) by various means. See :RFC:`4291` for details. For " +"example, ``\"0000:0000:0000:0000:0000:0abc:0007:0def\"`` can be compressed " +"to ``\"::abc:7:def\"``." +msgstr "" +"一个由八组四个16进制数字组成的字符串, 每组展示为16位. 以冒号分隔. 这可以描述为 *分解* (普通书写). 此字符可以被 *压缩* " +"(速记书写) . 详见 :RFC:`4291` . 例如, " +"``\"0000:0000:0000:0000:0000:0abc:0007:0def\"`` 可以被精简为 ``\"::abc:7:def\"``." + +#: ../../library/ipaddress.rst:302 +msgid "" +"Optionally, the string may also have a scope zone ID, expressed with a " +"suffix ``%scope_id``. If present, the scope ID must be non-empty, and may " +"not contain ``%``. See :RFC:`4007` for details. For example, " +"``fe80::1234%1`` might identify address ``fe80::1234`` on the first link of " +"the node." +msgstr "" +"可选择的是,该字符串也可以有一个作用域ID,用后缀 ``%scope_id`` 表示。如果存在,作用域ID必须是非空的,并且不能包含 ``%``。详见 " +":RFC:`4007`。例如,``fe80::1234%1`` 可以识别节点第一条链路上的地址 ``fe80::1234``" + +#: ../../library/ipaddress.rst:307 +msgid "An integer that fits into 128 bits." +msgstr "适合 128 位的整数." + +#: ../../library/ipaddress.rst:308 +msgid "" +"An integer packed into a :class:`bytes` object of length 16, big-endian." +msgstr "一个打包在长度为 16 字节的大端序 :class:`bytes` 对象中的整数。" + +#: ../../library/ipaddress.rst:318 +msgid "" +"The short form of the address representation, with leading zeroes in groups " +"omitted and the longest sequence of groups consisting entirely of zeroes " +"collapsed to a single empty group." +msgstr "地址表示的简短形式,省略了组中的前导零,完全由零组成的最长的组序列被折叠成一个空组。" + +#: ../../library/ipaddress.rst:322 +msgid "This is also the value returned by ``str(addr)`` for IPv6 addresses." +msgstr "这也是 ``str(addr)`` 对IPv6地址返回的值。" + +#: ../../library/ipaddress.rst:326 +msgid "" +"The long form of the address representation, with all leading zeroes and " +"groups consisting entirely of zeroes included." +msgstr "地址的长形式表示,包括所有前导零和完全由零组成的组。" + +#: ../../library/ipaddress.rst:330 +msgid "" +"For the following attributes and methods, see the corresponding " +"documentation of the :class:`IPv4Address` class:" +msgstr "关于以下属性和方法,请参见 :class:`IPv4Address` 类的相应文档。" + +#: ../../library/ipaddress.rst:345 +msgid "is_global" +msgstr "is_global" + +#: ../../library/ipaddress.rst:350 +msgid "" +"``True`` if the address is reserved for site-local usage. Note that the " +"site-local address space has been deprecated by :RFC:`3879`. Use " +":attr:`~IPv4Address.is_private` to test if this address is in the space of " +"unique local addresses as defined by :RFC:`4193`." +msgstr "" +"如果地址被保留用于本地站点则为 ``True``。 请注意本地站点地址空间已被 :RFC:`3879` 弃用。 请使用 " +":attr:`~IPv4Address.is_private` 来检测此地址是否位于 :RFC:`4193` 所定义的本地唯一地址空间中。" + +#: ../../library/ipaddress.rst:357 +msgid "" +"For addresses that appear to be IPv4 mapped addresses (starting with " +"``::FFFF/96``), this property will report the embedded IPv4 address. For any" +" other address, this property will be ``None``." +msgstr "" +"地址为映射的IPv4地址 (起始为 ``::FFFF/96``), 此属性记录为嵌入IPv4地址. 其他的任何地址, 此属性为 ``None``." + +#: ../../library/ipaddress.rst:363 +msgid "" +"For scoped addresses as defined by :RFC:`4007`, this property identifies the" +" particular zone of the address's scope that the address belongs to, as a " +"string. When no scope zone is specified, this property will be ``None``." +msgstr "" +"对于 :RFC:`4007` 定义的作用域地址,此属性以字符串的形式确定地址所属的作用域的特定区域。当没有指定作用域时,该属性将是 ``None``。" + +#: ../../library/ipaddress.rst:369 +msgid "" +"For addresses that appear to be 6to4 addresses (starting with " +"``2002::/16``) as defined by :RFC:`3056`, this property will report the " +"embedded IPv4 address. For any other address, this property will be " +"``None``." +msgstr "" +"对于看起来是6to4的地址(以 ``2002::/16``开头),如 :RFC:`3056` 所定义的,此属性将返回嵌入的IPv4地址。 " +"对于任何其他地址,该属性将是``None``。" + +#: ../../library/ipaddress.rst:376 +msgid "" +"For addresses that appear to be Teredo addresses (starting with " +"``2001::/32``) as defined by :RFC:`4380`, this property will report the " +"embedded ``(server, client)`` IP address pair. For any other address, this " +"property will be ``None``." +msgstr "" +"对于看起来是 :RFC:`4380` 定义的Teredo地址(以 ``2001::/32`` 开头)的地址,此属性将返回嵌入式IP地址对 " +"``(server, client)``。 对于任何其他地址,该属性将是 ``None``。" + +#: ../../library/ipaddress.rst:383 +msgid "" +"Refer to the corresponding method documentation in :class:`IPv4Address`." +msgstr "请参考 :class:`IPv4Address` 中对应的方法文档。" + +#: ../../library/ipaddress.rst:389 +msgid "Conversion to Strings and Integers" +msgstr "转换字符串和整数" + +#: ../../library/ipaddress.rst:391 +msgid "" +"To interoperate with networking interfaces such as the socket module, " +"addresses must be converted to strings or integers. This is handled using " +"the :func:`str` and :func:`int` builtin functions::" +msgstr "与网络模块互操作像套接字模块, 地址必须转换为字符串或整数. 这是使用 :func:`str` 和 :func:`int` 内置函数::" + +#: ../../library/ipaddress.rst:404 +msgid "" +"Note that IPv6 scoped addresses are converted to integers without scope zone" +" ID." +msgstr "请注意,IPv6范围内的地址被转换为没有范围区域ID的整数。" + +#: ../../library/ipaddress.rst:408 ../../library/ipaddress.rst:792 +#: ../../library/ipaddress.rst:928 +msgid "Operators" +msgstr "运算符" + +#: ../../library/ipaddress.rst:410 +msgid "" +"Address objects support some operators. Unless stated otherwise, operators " +"can only be applied between compatible objects (i.e. IPv4 with IPv4, IPv6 " +"with IPv6)." +msgstr "地址对象支持一些运算符。 除非另有说明,运算符只能在兼容对象之间应用(即IPv4与IPv4,IPv6与IPv6)。" + +#: ../../library/ipaddress.rst:416 +msgid "Comparison operators" +msgstr "比较运算符" + +#: ../../library/ipaddress.rst:418 +msgid "" +"Address objects can be compared with the usual set of comparison operators. " +"Same IPv6 addresses with different scope zone IDs are not equal. Some " +"examples::" +msgstr "地址对象可以用通常的一组比较运算符进行比较。具有不同范围区域ID的相同IPv6地址是不平等的。一些例子::" + +#: ../../library/ipaddress.rst:435 +msgid "Arithmetic operators" +msgstr "算术运算符" + +#: ../../library/ipaddress.rst:437 +msgid "" +"Integers can be added to or subtracted from address objects. Some " +"examples::" +msgstr "整数可以被添加到地址对象或从地址对象中减去。 一些例子::" + +#: ../../library/ipaddress.rst:450 +msgid "IP Network definitions" +msgstr "IP网络的定义" + +#: ../../library/ipaddress.rst:452 +msgid "" +"The :class:`IPv4Network` and :class:`IPv6Network` objects provide a " +"mechanism for defining and inspecting IP network definitions. A network " +"definition consists of a *mask* and a *network address*, and as such defines" +" a range of IP addresses that equal the network address when masked (binary " +"AND) with the mask. For example, a network definition with the mask " +"``255.255.255.0`` and the network address ``192.168.1.0`` consists of IP " +"addresses in the inclusive range ``192.168.1.0`` to ``192.168.1.255``." +msgstr "" +":class:`IPv4Network` 和 :class:`IPv6Network` 对象提供了一个定义和检查IP网络定义的机制。一个网络定义由一个 " +"*掩码* 和一个 *网络地址* 组成,因此定义了一个IP地址的范围,当用掩码屏蔽(二进制AND)时,等于网络地址。 例如,一个带有掩码 " +"``255.255.255.0`` 和网络地址 ``192.168.1.0`` 的网络定义由包括 ``192.168.1.0`` 到 " +"``192.168.1.255`` 的IP地址组成。" + +#: ../../library/ipaddress.rst:462 +msgid "Prefix, net mask and host mask" +msgstr "前缀、网络掩码和主机掩码" + +#: ../../library/ipaddress.rst:464 +msgid "" +"There are several equivalent ways to specify IP network masks. A *prefix* " +"``/`` is a notation that denotes how many high-order bits are set in " +"the network mask. A *net mask* is an IP address with some number of high-" +"order bits set. Thus the prefix ``/24`` is equivalent to the net mask " +"``255.255.255.0`` in IPv4, or ``ffff:ff00::`` in IPv6. In addition, a *host" +" mask* is the logical inverse of a *net mask*, and is sometimes used (for " +"example in Cisco access control lists) to denote a network mask. The host " +"mask equivalent to ``/24`` in IPv4 is ``0.0.0.255``." +msgstr "" +"有几种相等的方法来指定IP网络掩码。 *前缀* ``/`` 是一个符号,表示在网络掩码中设置了多少个高阶位。 一个 *网络掩码* " +"是一个设置了一定数量高阶位的IP地址。 因此,前缀 ``/24`` 等同于IPv4中的网络掩码 ``255.255.255.0`` " +"或IPv6中的网络掩码 ``ffff:ff00::`` 。 此外,*主机掩码* 是 *网络掩码* " +"的逻辑取反,有时被用来表示网络掩码(例如在Cisco访问控制列表中)。 在IPv4中,相当于主机掩码 ``0.0.0.255`` 的是 ``/24`` " +"。" + +#: ../../library/ipaddress.rst:475 +msgid "Network objects" +msgstr "网络对象" + +#: ../../library/ipaddress.rst:477 +msgid "" +"All attributes implemented by address objects are implemented by network " +"objects as well. In addition, network objects implement additional " +"attributes. All of these are common between :class:`IPv4Network` and " +":class:`IPv6Network`, so to avoid duplication they are only documented for " +":class:`IPv4Network`. Network objects are :term:`hashable`, so they can be " +"used as keys in dictionaries." +msgstr "" +"所有由地址对象实现的属性也由网络对象实现。 此外,网络对象还实现了额外的属性。所有这些在 :class:`IPv4Network` 和 " +":class:`IPv6Network` 之间是共同的,所以为了避免重复,它们只在 :class:`IPv4Network` 中记录。网络对象是 " +":term:`hashable`,所以它们可以作为字典中的键使用。" + +#: ../../library/ipaddress.rst:486 +msgid "" +"Construct an IPv4 network definition. *address* can be one of the " +"following:" +msgstr "构建一个 IPv4 网络定义。 *address* 可以是以下之一:" + +#: ../../library/ipaddress.rst:488 +msgid "" +"A string consisting of an IP address and an optional mask, separated by a " +"slash (``/``). The IP address is the network address, and the mask can be " +"either a single number, which means it's a *prefix*, or a string " +"representation of an IPv4 address. If it's the latter, the mask is " +"interpreted as a *net mask* if it starts with a non-zero field, or as a " +"*host mask* if it starts with a zero field, with the single exception of an " +"all-zero mask which is treated as a *net mask*. If no mask is provided, " +"it's considered to be ``/32``." +msgstr "" +"一个由 IP 地址和可选掩码组成的字符串,用斜线 (``/``) 分开。 IP 地址是网络地址,掩码可以是一个单一的数字,这意味着它是一个 " +"*前缀*,或者是一个 IPv4 地址的字符串表示。 如果是后者,如果掩码以非零字段开始,则被解释为 *网络掩码*,如果以零字段开始,则被解释为 " +"*主机掩码*,唯一的例外是全零的掩码被视为 *网络掩码*。 如果没有提供掩码,它就被认为是 ``/32``。" + +#: ../../library/ipaddress.rst:497 +msgid "" +"For example, the following *address* specifications are equivalent: " +"``192.168.1.0/24``, ``192.168.1.0/255.255.255.0`` and " +"``192.168.1.0/0.0.0.255``." +msgstr "" +"例如,以下的*地址*描述是等同的:``192.168.1.0/24``,``192.168.1.0/255.255.255.0``和``192.168.1.0/0.0.0.255``" + +#: ../../library/ipaddress.rst:501 +msgid "" +"An integer that fits into 32 bits. This is equivalent to a single-address " +"network, with the network address being *address* and the mask being " +"``/32``." +msgstr "一个可转化为32位的整数。 这相当于一个单地址的网络,网络地址是*address*,掩码是 ``/32``。" + +#: ../../library/ipaddress.rst:505 +msgid "" +"An integer packed into a :class:`bytes` object of length 4, big-endian. The " +"interpretation is similar to an integer *address*." +msgstr "一个整数被打包成一个长度为 4 的大端序 :class:`bytes` 对象。 其解释类似于一个整数 *address*。" + +#: ../../library/ipaddress.rst:508 +msgid "" +"A two-tuple of an address description and a netmask, where the address " +"description is either a string, a 32-bits integer, a 4-bytes packed integer," +" or an existing IPv4Address object; and the netmask is either an integer " +"representing the prefix length (e.g. ``24``) or a string representing the " +"prefix mask (e.g. ``255.255.255.0``)." +msgstr "" +"一个地址描述和一个网络掩码的双元组,其中地址描述是一个字符串,一个 32 位的整数,一个 4 字节的打包整数,或一个现有的 IPv4Address " +"对象;而网络掩码是一个代表前缀长度的整数 (例如 ``24``) 或一个代表前缀掩码的字符串 (例如 ``255.255.255.0``)。" + +#: ../../library/ipaddress.rst:514 +msgid "" +"An :exc:`AddressValueError` is raised if *address* is not a valid IPv4 " +"address. A :exc:`NetmaskValueError` is raised if the mask is not valid for " +"an IPv4 address." +msgstr "" +"如果 *address* 不是一个有效的 IPv4 地址则会引发 :exc:`AddressValueError`。 如果掩码不是有效的 IPv4 " +"地址则会引发 :exc:`NetmaskValueError`。" + +#: ../../library/ipaddress.rst:518 ../../library/ipaddress.rst:738 +msgid "" +"If *strict* is ``True`` and host bits are set in the supplied address, then " +":exc:`ValueError` is raised. Otherwise, the host bits are masked out to " +"determine the appropriate network address." +msgstr "" +"如果 *strict* 是 ``True``,并且在提供的地址中设置了主机位,那么 :exc:`ValueError` 将被触发。 " +"否则,主机位将被屏蔽掉,以确定适当的网络地址。" + +#: ../../library/ipaddress.rst:522 +msgid "" +"Unless stated otherwise, all network methods accepting other network/address" +" objects will raise :exc:`TypeError` if the argument's IP version is " +"incompatible to ``self``." +msgstr "" +"除非另有说明,如果参数的 IP 版本与 ``self`` 不兼容,所有接受其他网络/地址对象的网络方法都将引发 :exc:`TypeError`。" + +#: ../../library/ipaddress.rst:528 ../../library/ipaddress.rst:744 +msgid "Added the two-tuple form for the *address* constructor parameter." +msgstr "为*address*构造函数参数添加了双元组形式。" + +#: ../../library/ipaddress.rst:533 +msgid "" +"Refer to the corresponding attribute documentation in :class:`IPv4Address`." +msgstr "请参考 :class:`IPv4Address` 中的相应属性文档。" + +#: ../../library/ipaddress.rst:543 +msgid "" +"These attributes are true for the network as a whole if they are true for " +"both the network address and the broadcast address." +msgstr "如果这些属性对网络地址和广播地址都是True,那么它们对整个网络来说就是True。" + +#: ../../library/ipaddress.rst:548 +msgid "" +"The network address for the network. The network address and the prefix " +"length together uniquely define a network." +msgstr "网络的网络地址。网络地址和前缀长度一起唯一地定义了一个网络。" + +#: ../../library/ipaddress.rst:553 +msgid "" +"The broadcast address for the network. Packets sent to the broadcast address" +" should be received by every host on the network." +msgstr "网络的广播地址。发送到广播地址的数据包应该被网络上的每台主机所接收。" + +#: ../../library/ipaddress.rst:558 +msgid "The host mask, as an :class:`IPv4Address` object." +msgstr "主机掩码,作为一个 :class:`IPv4Address` 对象。" + +#: ../../library/ipaddress.rst:562 +msgid "The net mask, as an :class:`IPv4Address` object." +msgstr "网络掩码,作为一个 :class:`IPv4Address` 对象。" + +#: ../../library/ipaddress.rst:568 +msgid "" +"A string representation of the network, with the mask in prefix notation." +msgstr "网络的字符串表示,其中掩码为前缀符号。" + +#: ../../library/ipaddress.rst:571 +msgid "" +"``with_prefixlen`` and ``compressed`` are always the same as " +"``str(network)``. ``exploded`` uses the exploded form the network address." +msgstr "" +"``with_prefixlen`` 和 ``compressed`` 总是与 ``str(network)`` 相同,``exploded`` " +"使用分解形式的网络地址。" + +#: ../../library/ipaddress.rst:577 +msgid "" +"A string representation of the network, with the mask in net mask notation." +msgstr "网络的字符串表示,掩码用网络掩码符号表示。" + +#: ../../library/ipaddress.rst:582 +msgid "" +"A string representation of the network, with the mask in host mask notation." +msgstr "网络的字符串表示,其中的掩码为主机掩码符号。" + +#: ../../library/ipaddress.rst:587 +msgid "The total number of addresses in the network." +msgstr "网络中的地址总数。" + +#: ../../library/ipaddress.rst:591 +msgid "Length of the network prefix, in bits." +msgstr "网络前缀的长度,以比特为单位。" + +#: ../../library/ipaddress.rst:595 +msgid "" +"Returns an iterator over the usable hosts in the network. The usable hosts " +"are all the IP addresses that belong to the network, except the network " +"address itself and the network broadcast address. For networks with a mask " +"length of 31, the network address and network broadcast address are also " +"included in the result. Networks with a mask of 32 will return a list " +"containing the single host address." +msgstr "" +"返回一个网络中可用主机的迭代器。 可用的主机是属于该网络的所有IP地址,除了网络地址本身和网络广播地址。 " +"对于掩码长度为31的网络,网络地址和网络广播地址也包括在结果中。掩码为32的网络将返回一个包含单一主机地址的列表。" + +#: ../../library/ipaddress.rst:613 +msgid "" +"``True`` if this network is partly or wholly contained in *other* or *other*" +" is wholly contained in this network." +msgstr "如果这个网络部分或全部包含在*other*中,或者*other*全部包含在这个网络中,则为 ``True``。" + +#: ../../library/ipaddress.rst:618 +msgid "" +"Computes the network definitions resulting from removing the given *network*" +" from this one. Returns an iterator of network objects. Raises " +":exc:`ValueError` if *network* is not completely contained in this network." +msgstr "" +"计算从这个网络中移除给定的 *network* 后产生的网络定义。 返回一个网络对象的迭代器。 如果 *network* 不完全包含在这个网络中则会引发" +" :exc:`ValueError`。" + +#: ../../library/ipaddress.rst:631 +msgid "" +"The subnets that join to make the current network definition, depending on " +"the argument values. *prefixlen_diff* is the amount our prefix length " +"should be increased by. *new_prefix* is the desired new prefix of the " +"subnets; it must be larger than our prefix. One and only one of " +"*prefixlen_diff* and *new_prefix* must be set. Returns an iterator of " +"network objects." +msgstr "" +"根据参数值,加入的子网构成当前的网络定义。 *prefixlen_diff* 是我们的前缀长度应该增加的数量。 *new_prefix* " +"是所需的子网的新前缀;它必须大于我们的前缀。 必须设置 *prefixlen_diff* 和 *new_prefix* 中的一个,且只有一个。 " +"返回一个网络对象的迭代器。" + +#: ../../library/ipaddress.rst:656 +msgid "" +"The supernet containing this network definition, depending on the argument " +"values. *prefixlen_diff* is the amount our prefix length should be " +"decreased by. *new_prefix* is the desired new prefix of the supernet; it " +"must be smaller than our prefix. One and only one of *prefixlen_diff* and " +"*new_prefix* must be set. Returns a single network object." +msgstr "" +"包含这个网络定义的超级网,取决于参数值。 *prefixlen_diff* 是我们的前缀长度应该减少的数量。 *new_prefix* " +"是超级网的新前缀;它必须比我们的前缀小。 必须设置 *prefixlen_diff* 和 *new_prefix* 中的一个,而且只有一个。 " +"返回一个单一的网络对象。" + +#: ../../library/ipaddress.rst:672 +msgid "Return ``True`` if this network is a subnet of *other*." +msgstr "如果这个网络是*other*的子网,则返回 ``True``。" + +#: ../../library/ipaddress.rst:683 +msgid "Return ``True`` if this network is a supernet of *other*." +msgstr "如果这个网络是*other*的超网,则返回 ``True``。" + +#: ../../library/ipaddress.rst:694 +msgid "" +"Compare this network to *other*. In this comparison only the network " +"addresses are considered; host bits aren't. Returns either ``-1``, ``0`` or" +" ``1``." +msgstr "将这个网络与*ohter*网络进行比较。 在这个比较中,只考虑网络地址;不考虑主机位。 返回是 ``-1`` 、 ``0``或``1``。" + +#: ../../library/ipaddress.rst:705 +msgid "It uses the same ordering and comparison algorithm as \"<\", \"==\", and \">\"" +msgstr "它使用与\"<\"、\"==\"和\">\"相同的排序和比较算法。" + +#: ../../library/ipaddress.rst:711 +msgid "" +"Construct an IPv6 network definition. *address* can be one of the " +"following:" +msgstr "构建一个 IPv6 网络定义。 *address* 可以是以下之一:" + +#: ../../library/ipaddress.rst:713 +msgid "" +"A string consisting of an IP address and an optional prefix length, " +"separated by a slash (``/``). The IP address is the network address, and " +"the prefix length must be a single number, the *prefix*. If no prefix " +"length is provided, it's considered to be ``/128``." +msgstr "" +"一个由IP地址和可选前缀长度组成的字符串,用斜线( ``/``)分开。 IP地址是网络地址,前缀长度必须是一个数字,即*prefix*。 " +"如果没有提供前缀长度,就认为是 ``/128``。" + +#: ../../library/ipaddress.rst:718 +msgid "" +"Note that currently expanded netmasks are not supported. That means " +"``2001:db00::0/24`` is a valid argument while ``2001:db00::0/ffff:ff00::`` " +"is not." +msgstr "" +"请注意,目前不支持扩展的网络掩码。 这意味着 ``2001:db00::0/24`` 是一个有效的参数,而 " +"``2001:db00::0/ffff:ff00::`` 不是。" + +#: ../../library/ipaddress.rst:722 +msgid "" +"An integer that fits into 128 bits. This is equivalent to a single-address " +"network, with the network address being *address* and the mask being " +"``/128``." +msgstr "一个适合128位的整数。 这相当于一个单地址网络,网络地址是*address*,掩码是 ``/128``。" + +#: ../../library/ipaddress.rst:726 +msgid "" +"An integer packed into a :class:`bytes` object of length 16, big-endian. The" +" interpretation is similar to an integer *address*." +msgstr "一个整数被打包成一个长度为 16 的大端序 :class:`bytes` 对象。 其解释类似于一个整数的 *address*。" + +#: ../../library/ipaddress.rst:729 +msgid "" +"A two-tuple of an address description and a netmask, where the address " +"description is either a string, a 128-bits integer, a 16-bytes packed " +"integer, or an existing IPv6Address object; and the netmask is an integer " +"representing the prefix length." +msgstr "" +"一个地址描述和一个网络掩码的双元组,其中地址描述是一个字符串,一个 128 位的整数,一个 16 字节的打包整数,或者一个现有的 IPv6Address" +" 对象;而网络掩码是一个代表前缀长度的整数。" + +#: ../../library/ipaddress.rst:734 +msgid "" +"An :exc:`AddressValueError` is raised if *address* is not a valid IPv6 " +"address. A :exc:`NetmaskValueError` is raised if the mask is not valid for " +"an IPv6 address." +msgstr "" +"如果 *address* 不是一个有效的 IPv6 地址则会引发 :exc:`AddressValueError`。 如果掩码对 IPv6 " +"地址无效则会引发 :exc:`NetmaskValueError`。" + +#: ../../library/ipaddress.rst:767 +msgid "" +"Returns an iterator over the usable hosts in the network. The usable hosts " +"are all the IP addresses that belong to the network, except the Subnet-" +"Router anycast address. For networks with a mask length of 127, the Subnet-" +"Router anycast address is also included in the result. Networks with a mask " +"of 128 will return a list containing the single host address." +msgstr "" +"返回一个网络中可用主机的迭代器。 可用的主机是属于该网络的所有IP地址,除了Subnet-Router任播的地址。 对于掩码长度为127的网络,子网-" +"路由器任播地址也包括在结果中。掩码为128的网络将返回一个包含单一主机地址的列表。" + +#: ../../library/ipaddress.rst:782 +msgid "" +"Refer to the corresponding attribute documentation in :class:`IPv4Network`." +msgstr "请参考 :class:`IPv4Network` 中的相应属性文档。" + +#: ../../library/ipaddress.rst:787 +msgid "" +"These attribute is true for the network as a whole if it is true for both " +"the network address and the broadcast address." +msgstr "如果这些属性对网络地址和广播地址都是True,那么对整个网络来说就是True。" + +#: ../../library/ipaddress.rst:794 +msgid "" +"Network objects support some operators. Unless stated otherwise, operators " +"can only be applied between compatible objects (i.e. IPv4 with IPv4, IPv6 " +"with IPv6)." +msgstr "网络对象支持一些运算符。 除非另有说明,运算符只能在兼容的对象之间应用(例如,IPv4与IPv4,IPv6与IPv6)。" + +#: ../../library/ipaddress.rst:800 ../../library/ipaddress.rst:936 +msgid "Logical operators" +msgstr "逻辑运算符" + +#: ../../library/ipaddress.rst:802 +msgid "" +"Network objects can be compared with the usual set of logical operators. " +"Network objects are ordered first by network address, then by net mask." +msgstr "网络对象可以用常规的逻辑运算符集进行比较。网络对象首先按网络地址排序,然后按网络掩码排序。" + +#: ../../library/ipaddress.rst:807 +msgid "Iteration" +msgstr "迭代" + +#: ../../library/ipaddress.rst:809 +msgid "" +"Network objects can be iterated to list all the addresses belonging to the " +"network. For iteration, *all* hosts are returned, including unusable hosts " +"(for usable hosts, use the :meth:`~IPv4Network.hosts` method). An example::" +msgstr "" +"网络对象可以被迭代,以列出属于该网络的所有地址。 对于迭代,*所有* 主机都会被返回,包括不可用的主机(对于可用的主机,使用 " +":meth:`~IPv4Network.hosts` 方法)。 一个例子::" + +#: ../../library/ipaddress.rst:836 +msgid "Networks as containers of addresses" +msgstr "作为地址容器的网络" + +#: ../../library/ipaddress.rst:838 +msgid "Network objects can act as containers of addresses. Some examples::" +msgstr "网络对象可以作为地址的容器。 一些例子::" + +#: ../../library/ipaddress.rst:851 +msgid "Interface objects" +msgstr "接口对象" + +#: ../../library/ipaddress.rst:853 +msgid "" +"Interface objects are :term:`hashable`, so they can be used as keys in " +"dictionaries." +msgstr "接口对象是 :term:`hashable` 的,所以它们可以作为字典中的键使用。" + +#: ../../library/ipaddress.rst:858 +msgid "" +"Construct an IPv4 interface. The meaning of *address* is as in the " +"constructor of :class:`IPv4Network`, except that arbitrary host addresses " +"are always accepted." +msgstr "" +"构建一个 IPv4 接口。 *address* 的含义与 :class:`IPv4Network` " +"构造器中的一样,不同之处在于任意主机地址总是会被接受。" + +#: ../../library/ipaddress.rst:862 +msgid "" +":class:`IPv4Interface` is a subclass of :class:`IPv4Address`, so it inherits" +" all the attributes from that class. In addition, the following attributes " +"are available:" +msgstr "" +":class:`IPv4Interface` 是 :class:`IPv4Address` 的一个子类,所以它继承了该类的所有属性。 " +"此外,还有以下属性可用:" + +#: ../../library/ipaddress.rst:868 +msgid "The address (:class:`IPv4Address`) without network information." +msgstr "地址(:class:`IPv4Address`)没有网络信息。" + +#: ../../library/ipaddress.rst:876 +msgid "The network (:class:`IPv4Network`) this interface belongs to." +msgstr "该接口所属的网络(:class:`IPv4Network`)。" + +#: ../../library/ipaddress.rst:884 +msgid "" +"A string representation of the interface with the mask in prefix notation." +msgstr "用前缀符号表示的接口与掩码的字符串。" + +#: ../../library/ipaddress.rst:892 +msgid "" +"A string representation of the interface with the network as a net mask." +msgstr "带有网络的接口的网络掩码字符串表示。" + +#: ../../library/ipaddress.rst:900 +msgid "" +"A string representation of the interface with the network as a host mask." +msgstr "带有网络的接口的主机掩码字符串表示。" + +#: ../../library/ipaddress.rst:909 +msgid "" +"Construct an IPv6 interface. The meaning of *address* is as in the " +"constructor of :class:`IPv6Network`, except that arbitrary host addresses " +"are always accepted." +msgstr "" +"构建一个 IPv6 接口。 *address* 的含义与 :class:`IPv6Network` " +"构造器中的一样,不同之处在于任意主机地址总是会被接受。" + +#: ../../library/ipaddress.rst:913 +msgid "" +":class:`IPv6Interface` is a subclass of :class:`IPv6Address`, so it inherits" +" all the attributes from that class. In addition, the following attributes " +"are available:" +msgstr "" +":class:`IPv6Interface` 是 :class:`IPv6Address` 的一个子类,所以它继承了该类的所有属性。 " +"此外,还有以下属性可用:" + +#: ../../library/ipaddress.rst:923 +msgid "" +"Refer to the corresponding attribute documentation in " +":class:`IPv4Interface`." +msgstr "请参考 :class:`IPv4Interface` 中的相应属性文档。" + +#: ../../library/ipaddress.rst:930 +msgid "" +"Interface objects support some operators. Unless stated otherwise, " +"operators can only be applied between compatible objects (i.e. IPv4 with " +"IPv4, IPv6 with IPv6)." +msgstr "接口对象支持一些运算符。 除非另有说明,运算符只能在兼容的对象之间应用(即IPv4与IPv4,IPv6与IPv6)。" + +#: ../../library/ipaddress.rst:938 +msgid "" +"Interface objects can be compared with the usual set of logical operators." +msgstr "接口对象可以用通常的逻辑运算符集进行比较。" + +#: ../../library/ipaddress.rst:940 +msgid "" +"For equality comparison (``==`` and ``!=``), both the IP address and network" +" must be the same for the objects to be equal. An interface will not " +"compare equal to any address or network object." +msgstr "对于相等比较(``==`` 和 ``!=``),IP地址和网络都必须是相同的对象才会相等。 一个接口不会与任何地址或网络对象相等。" + +#: ../../library/ipaddress.rst:944 +msgid "" +"For ordering (``<``, ``>``, etc) the rules are different. Interface and " +"address objects with the same IP version can be compared, and the address " +"objects will always sort before the interface objects. Two interface " +"objects are first compared by their networks and, if those are the same, " +"then by their IP addresses." +msgstr "" +"对于排序 (``<``、``>`` 等),规则是不同的。 具有相同 IP 版本的接口和地址对象可以被比较,而地址对象总是在接口对象之前排序。 " +"两个接口对象首先通过它们的网络进行比较,如果它们是相同的,则通过它们的 IP 地址进行比较。" + +#: ../../library/ipaddress.rst:952 +msgid "Other Module Level Functions" +msgstr "其他模块级别函数" + +#: ../../library/ipaddress.rst:954 +msgid "The module also provides the following module level functions:" +msgstr "该模块还提供以下模块级函数:" + +#: ../../library/ipaddress.rst:958 +msgid "" +"Represent an address as 4 packed bytes in network (big-endian) order. " +"*address* is an integer representation of an IPv4 IP address. A " +":exc:`ValueError` is raised if the integer is negative or too large to be an" +" IPv4 IP address." +msgstr "" +"以网络(大端序)顺序将一个地址表示为 4 个打包的字节。*address* 是一个 IPv4 IP 地址的整数表示。 如果整数是负数或太大而不满足 " +"IPv4 IP 地址要求,会触发一个 :exc:`ValueError`。" + +#: ../../library/ipaddress.rst:971 +msgid "" +"Represent an address as 16 packed bytes in network (big-endian) order. " +"*address* is an integer representation of an IPv6 IP address. A " +":exc:`ValueError` is raised if the integer is negative or too large to be an" +" IPv6 IP address." +msgstr "" +"以网络(大端序)顺序将一个地址表示为 4 个打包的字节。*address* 是一个IPv6 IP地址的整数表示。 如果整数是负数或太大而不满足 IPv6" +" IP 地址要求,会触发一个 :exc:`ValueError`。" + +#: ../../library/ipaddress.rst:979 +msgid "" +"Return an iterator of the summarized network range given the first and last " +"IP addresses. *first* is the first :class:`IPv4Address` or " +":class:`IPv6Address` in the range and *last* is the last " +":class:`IPv4Address` or :class:`IPv6Address` in the range. A " +":exc:`TypeError` is raised if *first* or *last* are not IP addresses or are " +"not of the same version. A :exc:`ValueError` is raised if *last* is not " +"greater than *first* or if *first* address version is not 4 or 6." +msgstr "" +"给出第一个和最后一个 IP 地址,返回总结的网络范围的迭代器。 *first* 是范围内的第一个 :class:`IPv4Address` 或 " +":class:`IPv6Address`,*last* 是范围内的最后一个 :class:`IPv4Address` 或 " +":class:`IPv6Address`。 如果 *first* 或 *last* 不是IP地址或不是同一版本则会引发 " +":exc:`TypeError`。 如果 *last* 不大于 *first*,或者 *first* 的地址版本不是 4 或 6 则会引发 " +":exc:`ValueError`。" + +#: ../../library/ipaddress.rst:995 +msgid "" +"Return an iterator of the collapsed :class:`IPv4Network` or " +":class:`IPv6Network` objects. *addresses* is an iterator of " +":class:`IPv4Network` or :class:`IPv6Network` objects. A :exc:`TypeError` is" +" raised if *addresses* contains mixed version objects." +msgstr "" +"返回一个 :class:`IPv4Network` 或 :class:`IPv6Network` 对象的迭代器。 *addresses* 是一个 " +":class:`IPv4Network` 或 :class:`IPv6Network` 对象的迭代器。 如果 *addresses* " +"包含混合版本的对象则会引发 :exc:`TypeError`。" + +#: ../../library/ipaddress.rst:1008 +msgid "" +"Return a key suitable for sorting between networks and addresses. Address " +"and Network objects are not sortable by default; they're fundamentally " +"different, so the expression::" +msgstr "返回一个适合在网络和地址之间进行排序的键。 地址和网络对象在默认情况下是不可排序的;它们在本质上是不同的,所以表达式::" + +#: ../../library/ipaddress.rst:1014 +msgid "" +"doesn't make sense. There are some times however, where you may wish to " +"have :mod:`ipaddress` sort these anyway. If you need to do this, you can " +"use this function as the *key* argument to :func:`sorted()`." +msgstr "" +"是没有意义的。 然而,有些时候,你可能希望让 :mod:`ipaddress` 对这些进行排序。 如果你需要这样做,你可以使用这个函数作为 " +":func:`sorted()` 的 *key* 参数。" + +#: ../../library/ipaddress.rst:1018 +msgid "*obj* is either a network or address object." +msgstr "*obj* 是一个网络或地址对象。" + +#: ../../library/ipaddress.rst:1022 +msgid "Custom Exceptions" +msgstr "自定义异常" + +#: ../../library/ipaddress.rst:1024 +msgid "" +"To support more specific error reporting from class constructors, the module" +" defines the following exceptions:" +msgstr "为了支持来自类构造函数的更具体的错误报告,模块定义了以下异常:" + +#: ../../library/ipaddress.rst:1029 +msgid "Any value error related to the address." +msgstr "与地址有关的任何数值错误。" + +#: ../../library/ipaddress.rst:1034 +msgid "Any value error related to the net mask." +msgstr "与网络掩码有关的任何数值错误。" diff --git a/library/ipc.po b/library/ipc.po new file mode 100644 index 000000000..571dee063 --- /dev/null +++ b/library/ipc.po @@ -0,0 +1,47 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) 2001-2022, Python Software Foundation +# This file is distributed under the same license as the Python package. +# FIRST AUTHOR , YEAR. +# +# Translators: +# Kaizhao Zhang , 2018 +# Alpha Du , 2019 +# Freesand Leo , 2019 +# +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: Python 3.9\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2022-11-04 14:34+0000\n" +"PO-Revision-Date: 2017-02-16 23:16+0000\n" +"Last-Translator: Freesand Leo , 2019\n" +"Language-Team: Chinese (China) (https://www.transifex.com/python-doc/teams/5390/zh_CN/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: zh_CN\n" +"Plural-Forms: nplurals=1; plural=0;\n" + +#: ../../library/ipc.rst:5 +msgid "Networking and Interprocess Communication" +msgstr "网络和进程间通信" + +#: ../../library/ipc.rst:7 +msgid "" +"The modules described in this chapter provide mechanisms for networking and " +"inter-processes communication." +msgstr "本章介绍的模块提供了网络和进程间通信的机制。" + +#: ../../library/ipc.rst:10 +msgid "" +"Some modules only work for two processes that are on the same machine, e.g. " +":mod:`signal` and :mod:`mmap`. Other modules support networking protocols " +"that two or more processes can use to communicate across machines." +msgstr "" +"某些模块仅适用于同一台机器上的两个进程,例如 :mod:`signal` 和 :mod:`mmap` 。 " +"其他模块支持两个或多个进程可用于跨机器通信的网络协议。" + +#: ../../library/ipc.rst:14 +msgid "The list of modules described in this chapter is:" +msgstr "本章中描述的模块列表是:" diff --git a/library/itertools.po b/library/itertools.po new file mode 100644 index 000000000..ff2550d48 --- /dev/null +++ b/library/itertools.po @@ -0,0 +1,882 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) 2001-2022, Python Software Foundation +# This file is distributed under the same license as the Python package. +# FIRST AUTHOR , YEAR. +# +# Translators: +# Menghua Xiao , 2018 +# zc Jin , 2018 +# nick <2330458484@qq.com>, 2019 +# Freesand Leo , 2021 +# +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: Python 3.9\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2022-11-04 14:34+0000\n" +"PO-Revision-Date: 2017-02-16 23:16+0000\n" +"Last-Translator: Freesand Leo , 2021\n" +"Language-Team: Chinese (China) (https://www.transifex.com/python-doc/teams/5390/zh_CN/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: zh_CN\n" +"Plural-Forms: nplurals=1; plural=0;\n" + +#: ../../library/itertools.rst:2 +msgid "" +":mod:`itertools` --- Functions creating iterators for efficient looping" +msgstr ":mod:`itertools` --- 为高效循环而创建迭代器的函数" + +#: ../../library/itertools.rst:16 +msgid "" +"This module implements a number of :term:`iterator` building blocks inspired" +" by constructs from APL, Haskell, and SML. Each has been recast in a form " +"suitable for Python." +msgstr "" +"本模块实现一系列 :term:`iterator` ,这些迭代器受到APL,Haskell和SML的启发。为了适用于Python,它们都被重新写过。" + +#: ../../library/itertools.rst:20 +msgid "" +"The module standardizes a core set of fast, memory efficient tools that are " +"useful by themselves or in combination. Together, they form an \"iterator " +"algebra\" making it possible to construct specialized tools succinctly and " +"efficiently in pure Python." +msgstr "" +"本模块标准化了一个快速、高效利用内存的核心工具集,这些工具本身或组合都很有用。它们一起形成了“迭代器代数”,这使得在纯Python中有可能创建简洁又高效的专用工具。" + +#: ../../library/itertools.rst:25 +msgid "" +"For instance, SML provides a tabulation tool: ``tabulate(f)`` which produces" +" a sequence ``f(0), f(1), ...``. The same effect can be achieved in Python " +"by combining :func:`map` and :func:`count` to form ``map(f, count())``." +msgstr "" +"例如,SML有一个制表工具: ``tabulate(f)``,它可产生一个序列 ``f(0), f(1), ...``。在Python中可以组合 " +":func:`map` 和 :func:`count` 实现: ``map(f, count())``。" + +#: ../../library/itertools.rst:29 +msgid "" +"These tools and their built-in counterparts also work well with the high-" +"speed functions in the :mod:`operator` module. For example, the " +"multiplication operator can be mapped across two vectors to form an " +"efficient dot-product: ``sum(map(operator.mul, vector1, vector2))``." +msgstr "" +"这些内置工具同时也能很好地与 :mod:`operator` 模块中的高效函数配合使用。例如,我们可以将两个向量的点积映射到乘法运算符: " +"``sum(map(operator.mul, vector1, vector2))`` 。" + +#: ../../library/itertools.rst:35 +msgid "**Infinite iterators:**" +msgstr "**无穷迭代器:**" + +#: ../../library/itertools.rst:38 ../../library/itertools.rst:48 +#: ../../library/itertools.rst:67 +msgid "Iterator" +msgstr "迭代器" + +#: ../../library/itertools.rst:38 ../../library/itertools.rst:48 +#: ../../library/itertools.rst:67 +msgid "Arguments" +msgstr "实参" + +#: ../../library/itertools.rst:38 ../../library/itertools.rst:48 +#: ../../library/itertools.rst:67 ../../library/itertools.rst:76 +msgid "Results" +msgstr "结果" + +#: ../../library/itertools.rst:38 ../../library/itertools.rst:48 +msgid "Example" +msgstr "示例" + +#: ../../library/itertools.rst:40 +msgid ":func:`count`" +msgstr ":func:`count`" + +#: ../../library/itertools.rst:40 +msgid "start, [step]" +msgstr "start, [step]" + +#: ../../library/itertools.rst:40 +msgid "start, start+step, start+2*step, ..." +msgstr "start, start+step, start+2*step, ..." + +#: ../../library/itertools.rst:40 +msgid "``count(10) --> 10 11 12 13 14 ...``" +msgstr "``count(10) --> 10 11 12 13 14 ...``" + +#: ../../library/itertools.rst:41 +msgid ":func:`cycle`" +msgstr ":func:`cycle`" + +#: ../../library/itertools.rst:41 +msgid "p" +msgstr "p" + +#: ../../library/itertools.rst:41 +msgid "p0, p1, ... plast, p0, p1, ..." +msgstr "p0, p1, ... plast, p0, p1, ..." + +#: ../../library/itertools.rst:41 +msgid "``cycle('ABCD') --> A B C D A B C D ...``" +msgstr "``cycle('ABCD') --> A B C D A B C D ...``" + +#: ../../library/itertools.rst:42 +msgid ":func:`repeat`" +msgstr ":func:`repeat`" + +#: ../../library/itertools.rst:42 +msgid "elem [,n]" +msgstr "elem [,n]" + +#: ../../library/itertools.rst:42 +msgid "elem, elem, elem, ... endlessly or up to n times" +msgstr "elem, elem, elem, ... 重复无限次或n次" + +#: ../../library/itertools.rst:42 +msgid "``repeat(10, 3) --> 10 10 10``" +msgstr "``repeat(10, 3) --> 10 10 10``" + +#: ../../library/itertools.rst:45 +msgid "**Iterators terminating on the shortest input sequence:**" +msgstr "**根据最短输入序列长度停止的迭代器:**" + +#: ../../library/itertools.rst:50 +msgid ":func:`accumulate`" +msgstr ":func:`accumulate`" + +#: ../../library/itertools.rst:50 +msgid "p [,func]" +msgstr "p [,func]" + +#: ../../library/itertools.rst:50 +msgid "p0, p0+p1, p0+p1+p2, ..." +msgstr "p0, p0+p1, p0+p1+p2, ..." + +#: ../../library/itertools.rst:50 +msgid "``accumulate([1,2,3,4,5]) --> 1 3 6 10 15``" +msgstr "``accumulate([1,2,3,4,5]) --> 1 3 6 10 15``" + +#: ../../library/itertools.rst:51 +msgid ":func:`chain`" +msgstr ":func:`chain`" + +#: ../../library/itertools.rst:51 ../../library/itertools.rst:61 +msgid "p, q, ..." +msgstr "p, q, ..." + +#: ../../library/itertools.rst:51 ../../library/itertools.rst:52 +msgid "p0, p1, ... plast, q0, q1, ..." +msgstr "p0, p1, ... plast, q0, q1, ..." + +#: ../../library/itertools.rst:51 +msgid "``chain('ABC', 'DEF') --> A B C D E F``" +msgstr "``chain('ABC', 'DEF') --> A B C D E F``" + +#: ../../library/itertools.rst:52 +msgid ":func:`chain.from_iterable`" +msgstr ":func:`chain.from_iterable`" + +#: ../../library/itertools.rst:52 +msgid "iterable" +msgstr "iterable" + +#: ../../library/itertools.rst:52 +msgid "``chain.from_iterable(['ABC', 'DEF']) --> A B C D E F``" +msgstr "``chain.from_iterable(['ABC', 'DEF']) --> A B C D E F``" + +#: ../../library/itertools.rst:53 +msgid ":func:`compress`" +msgstr ":func:`compress`" + +#: ../../library/itertools.rst:53 +msgid "data, selectors" +msgstr "data, selectors" + +#: ../../library/itertools.rst:53 +msgid "(d[0] if s[0]), (d[1] if s[1]), ..." +msgstr "(d[0] if s[0]), (d[1] if s[1]), ..." + +#: ../../library/itertools.rst:53 +msgid "``compress('ABCDEF', [1,0,1,0,1,1]) --> A C E F``" +msgstr "``compress('ABCDEF', [1,0,1,0,1,1]) --> A C E F``" + +#: ../../library/itertools.rst:54 +msgid ":func:`dropwhile`" +msgstr ":func:`dropwhile`" + +#: ../../library/itertools.rst:54 ../../library/itertools.rst:55 +#: ../../library/itertools.rst:59 +msgid "pred, seq" +msgstr "pred, seq" + +#: ../../library/itertools.rst:54 +msgid "seq[n], seq[n+1], starting when pred fails" +msgstr "seq[n], seq[n+1], ... 从pred首次真值测试失败开始" + +#: ../../library/itertools.rst:54 +msgid "``dropwhile(lambda x: x<5, [1,4,6,4,1]) --> 6 4 1``" +msgstr "``dropwhile(lambda x: x<5, [1,4,6,4,1]) --> 6 4 1``" + +#: ../../library/itertools.rst:55 +msgid ":func:`filterfalse`" +msgstr ":func:`filterfalse`" + +#: ../../library/itertools.rst:55 +msgid "elements of seq where pred(elem) is false" +msgstr "seq中pred(x)为假值的元素,x是seq中的元素。" + +#: ../../library/itertools.rst:55 +msgid "``filterfalse(lambda x: x%2, range(10)) --> 0 2 4 6 8``" +msgstr "``filterfalse(lambda x: x%2, range(10)) --> 0 2 4 6 8``" + +#: ../../library/itertools.rst:56 +msgid ":func:`groupby`" +msgstr ":func:`groupby`" + +#: ../../library/itertools.rst:56 +msgid "iterable[, key]" +msgstr "iterable[, key]" + +#: ../../library/itertools.rst:56 +msgid "sub-iterators grouped by value of key(v)" +msgstr "根据key(v)值分组的迭代器" + +#: ../../library/itertools.rst:57 +msgid ":func:`islice`" +msgstr ":func:`islice`" + +#: ../../library/itertools.rst:57 +msgid "seq, [start,] stop [, step]" +msgstr "seq, [start,] stop [, step]" + +#: ../../library/itertools.rst:57 +msgid "elements from seq[start:stop:step]" +msgstr "seq[start:stop:step]中的元素" + +#: ../../library/itertools.rst:57 +msgid "``islice('ABCDEFG', 2, None) --> C D E F G``" +msgstr "``islice('ABCDEFG', 2, None) --> C D E F G``" + +#: ../../library/itertools.rst:58 +msgid ":func:`starmap`" +msgstr ":func:`starmap`" + +#: ../../library/itertools.rst:58 +msgid "func, seq" +msgstr "func, seq" + +#: ../../library/itertools.rst:58 +msgid "func(\\*seq[0]), func(\\*seq[1]), ..." +msgstr "func(\\*seq[0]), func(\\*seq[1]), ..." + +#: ../../library/itertools.rst:58 +msgid "``starmap(pow, [(2,5), (3,2), (10,3)]) --> 32 9 1000``" +msgstr "``starmap(pow, [(2,5), (3,2), (10,3)]) --> 32 9 1000``" + +#: ../../library/itertools.rst:59 +msgid ":func:`takewhile`" +msgstr ":func:`takewhile`" + +#: ../../library/itertools.rst:59 +msgid "seq[0], seq[1], until pred fails" +msgstr "seq[0], seq[1], ..., 直到pred真值测试失败" + +#: ../../library/itertools.rst:59 +msgid "``takewhile(lambda x: x<5, [1,4,6,4,1]) --> 1 4``" +msgstr "``takewhile(lambda x: x<5, [1,4,6,4,1]) --> 1 4``" + +#: ../../library/itertools.rst:60 +msgid ":func:`tee`" +msgstr ":func:`tee`" + +#: ../../library/itertools.rst:60 +msgid "it, n" +msgstr "it, n" + +#: ../../library/itertools.rst:60 +msgid "it1, it2, ... itn splits one iterator into n" +msgstr "it1, it2, ... itn 将一个迭代器拆分为n个迭代器" + +#: ../../library/itertools.rst:61 +msgid ":func:`zip_longest`" +msgstr ":func:`zip_longest`" + +#: ../../library/itertools.rst:61 +msgid "(p[0], q[0]), (p[1], q[1]), ..." +msgstr "(p[0], q[0]), (p[1], q[1]), ..." + +#: ../../library/itertools.rst:61 +msgid "``zip_longest('ABCD', 'xy', fillvalue='-') --> Ax By C- D-``" +msgstr "``zip_longest('ABCD', 'xy', fillvalue='-') --> Ax By C- D-``" + +#: ../../library/itertools.rst:64 +msgid "**Combinatoric iterators:**" +msgstr "**排列组合迭代器:**" + +#: ../../library/itertools.rst:69 +msgid ":func:`product`" +msgstr ":func:`product`" + +#: ../../library/itertools.rst:69 +msgid "p, q, ... [repeat=1]" +msgstr "p, q, ... [repeat=1]" + +#: ../../library/itertools.rst:69 +msgid "cartesian product, equivalent to a nested for-loop" +msgstr "笛卡尔积,相当于嵌套的for循环" + +#: ../../library/itertools.rst:70 +msgid ":func:`permutations`" +msgstr ":func:`permutations`" + +#: ../../library/itertools.rst:70 +msgid "p[, r]" +msgstr "p[, r]" + +#: ../../library/itertools.rst:70 +msgid "r-length tuples, all possible orderings, no repeated elements" +msgstr "长度r元组,所有可能的排列,无重复元素" + +#: ../../library/itertools.rst:71 +msgid ":func:`combinations`" +msgstr ":func:`combinations`" + +#: ../../library/itertools.rst:71 ../../library/itertools.rst:72 +msgid "p, r" +msgstr "p, r" + +#: ../../library/itertools.rst:71 +msgid "r-length tuples, in sorted order, no repeated elements" +msgstr "长度r元组,有序,无重复元素" + +#: ../../library/itertools.rst:72 +msgid ":func:`combinations_with_replacement`" +msgstr ":func:`combinations_with_replacement`" + +#: ../../library/itertools.rst:72 +msgid "r-length tuples, in sorted order, with repeated elements" +msgstr "长度r元组,有序,元素可重复" + +#: ../../library/itertools.rst:76 +msgid "Examples" +msgstr "例子" + +#: ../../library/itertools.rst:78 +msgid "``product('ABCD', repeat=2)``" +msgstr "``product('ABCD', repeat=2)``" + +#: ../../library/itertools.rst:78 +msgid "``AA AB AC AD BA BB BC BD CA CB CC CD DA DB DC DD``" +msgstr "``AA AB AC AD BA BB BC BD CA CB CC CD DA DB DC DD``" + +#: ../../library/itertools.rst:79 +msgid "``permutations('ABCD', 2)``" +msgstr "``permutations('ABCD', 2)``" + +#: ../../library/itertools.rst:79 +msgid "``AB AC AD BA BC BD CA CB CD DA DB DC``" +msgstr "``AB AC AD BA BC BD CA CB CD DA DB DC``" + +#: ../../library/itertools.rst:80 +msgid "``combinations('ABCD', 2)``" +msgstr "``combinations('ABCD', 2)``" + +#: ../../library/itertools.rst:80 +msgid "``AB AC AD BC BD CD``" +msgstr "``AB AC AD BC BD CD``" + +#: ../../library/itertools.rst:81 +msgid "``combinations_with_replacement('ABCD', 2)``" +msgstr "``combinations_with_replacement('ABCD', 2)``" + +#: ../../library/itertools.rst:81 +msgid "``AA AB AC AD BB BC BD CC CD DD``" +msgstr "``AA AB AC AD BB BC BD CC CD DD``" + +#: ../../library/itertools.rst:88 +msgid "Itertool functions" +msgstr "Itertool函数" + +#: ../../library/itertools.rst:90 +msgid "" +"The following module functions all construct and return iterators. Some " +"provide streams of infinite length, so they should only be accessed by " +"functions or loops that truncate the stream." +msgstr "下列模块函数均创建并返回迭代器。有些迭代器不限制输出流长度,所以它们只应在能截断输出流的函数或循环中使用。" + +#: ../../library/itertools.rst:96 +msgid "" +"Make an iterator that returns accumulated sums, or accumulated results of " +"other binary functions (specified via the optional *func* argument)." +msgstr "创建一个迭代器,返回累积汇总值或其他双目运算函数的累积结果值(通过可选的 *func* 参数指定)。" + +#: ../../library/itertools.rst:100 +msgid "" +"If *func* is supplied, it should be a function of two arguments. Elements of" +" the input *iterable* may be any type that can be accepted as arguments to " +"*func*. (For example, with the default operation of addition, elements may " +"be any addable type including :class:`~decimal.Decimal` or " +":class:`~fractions.Fraction`.)" +msgstr "" +"如果提供了 *func*,它应当为带有两个参数的函数。 输入 *iterable* 的元素可以是能被 *func* 接受为参数的任意类型。 " +"(例如,对于默认的加法运算,元素可以是任何可相加的类型包括 :class:`~decimal.Decimal` 或 " +":class:`~fractions.Fraction`。)" + +#: ../../library/itertools.rst:107 +msgid "" +"Usually, the number of elements output matches the input iterable. However, " +"if the keyword argument *initial* is provided, the accumulation leads off " +"with the *initial* value so that the output has one more element than the " +"input iterable." +msgstr "" +"通常,输出的元素数量与输入的可迭代对象是一致的。 但是,如果提供了关键字参数 *initial*,则累加会以 *initial* " +"值开始,这样输出就比输入的可迭代对象多一个元素。" + +#: ../../library/itertools.rst:112 ../../library/itertools.rst:210 +#: ../../library/itertools.rst:259 ../../library/itertools.rst:495 +#: ../../library/itertools.rst:577 ../../library/itertools.rst:630 +msgid "Roughly equivalent to::" +msgstr "大致相当于:" + +#: ../../library/itertools.rst:131 +msgid "" +"There are a number of uses for the *func* argument. It can be set to " +":func:`min` for a running minimum, :func:`max` for a running maximum, or " +":func:`operator.mul` for a running product. Amortization tables can be " +"built by accumulating interest and applying payments. First-order " +"`recurrence relations `_ " +"can be modeled by supplying the initial value in the iterable and using only" +" the accumulated total in *func* argument::" +msgstr "" +"*func* 参数有几种用法。它可以被设为 :func:`min` 最终得到一个最小值,或者设为 :func:`max` 最终得到一个最大值,或设为 " +":func:`operator.mul` 最终得到一个乘积。摊销表可通过累加利息和支付款项得到。给iterable设置初始值并只将参数 *func* " +"设为累加总数可以对一阶 `递归关系 `_ 建模。" + +#: ../../library/itertools.rst:161 +msgid "" +"See :func:`functools.reduce` for a similar function that returns only the " +"final accumulated value." +msgstr "参考一个类似函数 :func:`functools.reduce` ,它只返回一个最终累积值。" + +#: ../../library/itertools.rst:166 +msgid "Added the optional *func* parameter." +msgstr "增加可选参数 *func* 。" + +#: ../../library/itertools.rst:169 +msgid "Added the optional *initial* parameter." +msgstr "添加了可选的 *initial* 形参。" + +#: ../../library/itertools.rst:174 +msgid "" +"Make an iterator that returns elements from the first iterable until it is " +"exhausted, then proceeds to the next iterable, until all of the iterables " +"are exhausted. Used for treating consecutive sequences as a single " +"sequence. Roughly equivalent to::" +msgstr "" +"创建一个迭代器,它首先返回第一个可迭代对象中所有元素,接着返回下一个可迭代对象中所有元素,直到耗尽所有可迭代对象中的元素。可将多个序列处理为单个序列。大致相当于:" + +#: ../../library/itertools.rst:188 +msgid "" +"Alternate constructor for :func:`chain`. Gets chained inputs from a single " +"iterable argument that is evaluated lazily. Roughly equivalent to::" +msgstr "构建类似 :func:`chain` 迭代器的另一个选择。从一个单独的可迭代参数中得到链式输入,该参数是延迟计算的。大致相当于: " + +#: ../../library/itertools.rst:200 +msgid "Return *r* length subsequences of elements from the input *iterable*." +msgstr "返回由输入 *iterable* 中元素组成长度为 *r* 的子序列。" + +#: ../../library/itertools.rst:202 ../../library/itertools.rst:251 +msgid "" +"The combination tuples are emitted in lexicographic ordering according to " +"the order of the input *iterable*. So, if the input *iterable* is sorted, " +"the combination tuples will be produced in sorted order." +msgstr "" +"组合元组会以字典顺序根据所输入 *iterable* 的顺序发出。 因此,如果所输入 *iterable* 是已排序的,组合元组也将按已排序的顺序生成。" + +#: ../../library/itertools.rst:206 +msgid "" +"Elements are treated as unique based on their position, not on their value." +" So if the input elements are unique, there will be no repeat values in " +"each combination." +msgstr "即使元素的值相同,不同位置的元素也被认为是不同的。如果元素各自不同,那么每个组合中没有重复元素。" + +#: ../../library/itertools.rst:232 +msgid "" +"The code for :func:`combinations` can be also expressed as a subsequence of " +":func:`permutations` after filtering entries where the elements are not in " +"sorted order (according to their position in the input pool)::" +msgstr "" +":func:`combinations` 的代码可被改写为 :func:`permutations` " +"过滤后的子序列,(相对于元素在输入中的位置)元素不是有序的。" + +#: ../../library/itertools.rst:243 +msgid "" +"The number of items returned is ``n! / r! / (n-r)!`` when ``0 <= r <= n`` or" +" zero when ``r > n``." +msgstr "" +"当 ``0 <= r <= n`` 时,返回项的个数是 ``n! / r! / (n-r)!``;当 ``r > n`` 时,返回项个数为0。" + +#: ../../library/itertools.rst:248 +msgid "" +"Return *r* length subsequences of elements from the input *iterable* " +"allowing individual elements to be repeated more than once." +msgstr "返回由输入 *iterable* 中元素组成的长度为 *r* 的子序列,允许每个元素可重复出现。" + +#: ../../library/itertools.rst:255 +msgid "" +"Elements are treated as unique based on their position, not on their value." +" So if the input elements are unique, the generated combinations will also " +"be unique." +msgstr "不同位置的元素是不同的,即使它们的值相同。因此如果输入中的元素都是不同的话,返回的组合中元素也都会不同。" + +#: ../../library/itertools.rst:278 +msgid "" +"The code for :func:`combinations_with_replacement` can be also expressed as " +"a subsequence of :func:`product` after filtering entries where the elements " +"are not in sorted order (according to their position in the input pool)::" +msgstr "" +":func:`combinations_with_replacement` 的代码可被改写为 :func:`production` " +"过滤后的子序列,(相对于元素在输入中的位置)元素不是有序的。" + +#: ../../library/itertools.rst:289 +msgid "" +"The number of items returned is ``(n+r-1)! / r! / (n-1)!`` when ``n > 0``." +msgstr "当 ``n > 0`` 时,返回项个数为 ``(n+r-1)! / r! / (n-1)!``." + +#: ../../library/itertools.rst:296 +msgid "" +"Make an iterator that filters elements from *data* returning only those that" +" have a corresponding element in *selectors* that evaluates to ``True``. " +"Stops when either the *data* or *selectors* iterables has been exhausted. " +"Roughly equivalent to::" +msgstr "" +"创建一个迭代器,它返回 *data* 中经 *selectors* 真值测试为 ``True`` 的元素。迭代器在两者较短的长度处停止。大致相当于:" + +#: ../../library/itertools.rst:310 +msgid "" +"Make an iterator that returns evenly spaced values starting with number " +"*start*. Often used as an argument to :func:`map` to generate consecutive " +"data points. Also, used with :func:`zip` to add sequence numbers. Roughly " +"equivalent to::" +msgstr "" +"创建一个迭代器,它从 *start* 值开始,返回均匀间隔的值。常用于 :func:`map` 中的实参来生成连续的数据点。此外,还用于 " +":func:`zip` 来添加序列号。大致相当于:" + +#: ../../library/itertools.rst:322 +msgid "" +"When counting with floating point numbers, better accuracy can sometimes be " +"achieved by substituting multiplicative code such as: ``(start + step * i " +"for i in count())``." +msgstr "当对浮点数计数时,替换为乘法代码有时精度会更好,例如: ``(start + step * i for i in count())`` 。" + +#: ../../library/itertools.rst:326 +msgid "Added *step* argument and allowed non-integer arguments." +msgstr "增加参数 *step* ,允许非整型。" + +#: ../../library/itertools.rst:331 +msgid "" +"Make an iterator returning elements from the iterable and saving a copy of " +"each. When the iterable is exhausted, return elements from the saved copy. " +"Repeats indefinitely. Roughly equivalent to::" +msgstr "" +"创建一个迭代器,返回 *iterable* 中所有元素并保存一个副本。当取完 *iterable* " +"中所有元素,返回副本中的所有元素。无限重复。大致相当于:" + +#: ../../library/itertools.rst:345 +msgid "" +"Note, this member of the toolkit may require significant auxiliary storage " +"(depending on the length of the iterable)." +msgstr "注意,该函数可能需要相当大的辅助空间(取决于 *iterable* 的长度)。" + +#: ../../library/itertools.rst:351 +msgid "" +"Make an iterator that drops elements from the iterable as long as the " +"predicate is true; afterwards, returns every element. Note, the iterator " +"does not produce *any* output until the predicate first becomes false, so it" +" may have a lengthy start-up time. Roughly equivalent to::" +msgstr "" +"创建一个迭代器,如果 *predicate* 为true,迭代器丢弃这些元素,然后返回其他元素。注意,迭代器在 *predicate* " +"首次为false之前不会产生任何输出,所以可能需要一定长度的启动时间。大致相当于:" + +#: ../../library/itertools.rst:368 +msgid "" +"Make an iterator that filters elements from iterable returning only those " +"for which the predicate is ``False``. If *predicate* is ``None``, return the" +" items that are false. Roughly equivalent to::" +msgstr "" +"创建一个迭代器,只返回 *iterable* 中 *predicate* 为 ``False`` 的元素。如果 *predicate* 是 " +"``None``,返回真值测试为false的元素。大致相当于:" + +#: ../../library/itertools.rst:383 +msgid "" +"Make an iterator that returns consecutive keys and groups from the " +"*iterable*. The *key* is a function computing a key value for each element." +" If not specified or is ``None``, *key* defaults to an identity function " +"and returns the element unchanged. Generally, the iterable needs to already" +" be sorted on the same key function." +msgstr "" +"创建一个迭代器,返回 *iterable* 中连续的键和组。*key* 是一个计算元素键值函数。如果未指定或为 ``None``,*key* " +"缺省为恒等函数(identity function),返回元素不变。一般来说,*iterable* 需用同一个键值函数预先排序。" + +#: ../../library/itertools.rst:389 +msgid "" +"The operation of :func:`groupby` is similar to the ``uniq`` filter in Unix." +" It generates a break or new group every time the value of the key function" +" changes (which is why it is usually necessary to have sorted the data using" +" the same key function). That behavior differs from SQL's GROUP BY which " +"aggregates common elements regardless of their input order." +msgstr "" +":func:`groupby` 操作类似于Unix中的 ``uniq``。当每次 *key* " +"函数产生的键值改变时,迭代器会分组或生成一个新组(这就是为什么通常需要使用同一个键值函数先对数据进行排序)。这种行为与SQL的GROUP " +"BY操作不同,SQL的操作会忽略输入的顺序将相同键值的元素分在同组中。" + +#: ../../library/itertools.rst:395 +msgid "" +"The returned group is itself an iterator that shares the underlying iterable" +" with :func:`groupby`. Because the source is shared, when the " +":func:`groupby` object is advanced, the previous group is no longer visible." +" So, if that data is needed later, it should be stored as a list::" +msgstr "" +"返回的组本身也是一个迭代器,它与 :func:`groupby` 共享底层的可迭代对象。因为源是共享的,当 :func:`groupby` " +"对象向后迭代时,前一个组将消失。因此如果稍后还需要返回结果,可保存为列表:" + +#: ../../library/itertools.rst:407 +msgid ":func:`groupby` is roughly equivalent to::" +msgstr ":func:`groupby` 大致相当于:" + +#: ../../library/itertools.rst:440 +msgid "" +"Make an iterator that returns selected elements from the iterable. If " +"*start* is non-zero, then elements from the iterable are skipped until start" +" is reached. Afterward, elements are returned consecutively unless *step* is" +" set higher than one which results in items being skipped. If *stop* is " +"``None``, then iteration continues until the iterator is exhausted, if at " +"all; otherwise, it stops at the specified position. Unlike regular slicing," +" :func:`islice` does not support negative values for *start*, *stop*, or " +"*step*. Can be used to extract related fields from data where the internal " +"structure has been flattened (for example, a multi-line report may list a " +"name field on every third line). Roughly equivalent to::" +msgstr "" +"创建一个迭代器,返回从 *iterable* 里选中的元素。如果 *start* 不是0,跳过 *iterable* 中的元素,直到到达 *start*" +" 这个位置。之后迭代器连续返回元素,除非 *step* 设置的值很高导致被跳过。如果 *stop* 为 " +"``None``,迭代器耗光为止;否则,在指定的位置停止。与普通的切片不同,:func:`islice` 不支持将 *start* , *stop* " +",或 *step* 设为负值。可用来从内部数据结构被压平的数据中提取相关字段(例如一个多行报告,它的名称字段出现在每三行上)。大致相当于:" + +#: ../../library/itertools.rst:475 +msgid "" +"If *start* is ``None``, then iteration starts at zero. If *step* is " +"``None``, then the step defaults to one." +msgstr "如果 *start* 为 ``None``,迭代从0开始。如果 *step* 为 ``None`` ,步长缺省为1。" + +#: ../../library/itertools.rst:481 +msgid "" +"Return successive *r* length permutations of elements in the *iterable*." +msgstr "连续返回由 *iterable* 元素生成长度为 *r* 的排列。" + +#: ../../library/itertools.rst:483 +msgid "" +"If *r* is not specified or is ``None``, then *r* defaults to the length of " +"the *iterable* and all possible full-length permutations are generated." +msgstr "如果 *r* 未指定或为 ``None`` ,*r* 默认设置为 *iterable* 的长度,这种情况下,生成所有全长排列。" + +#: ../../library/itertools.rst:487 +msgid "" +"The permutation tuples are emitted in lexicographic ordering according to " +"the order of the input *iterable*. So, if the input *iterable* is sorted, " +"the combination tuples will be produced in sorted order." +msgstr "" +"排列元组会以字典顺序根据所输入 *iterable* 的顺序发出。 因此,如果所输入 *iterable* 是已排序的,组合元组也将按已排序的顺序生成。" + +#: ../../library/itertools.rst:491 +msgid "" +"Elements are treated as unique based on their position, not on their value." +" So if the input elements are unique, there will be no repeat values in " +"each permutation." +msgstr "即使元素的值相同,不同位置的元素也被认为是不同的。如果元素值都不同,每个排列中的元素值不会重复。" + +#: ../../library/itertools.rst:522 +msgid "" +"The code for :func:`permutations` can be also expressed as a subsequence of " +":func:`product`, filtered to exclude entries with repeated elements (those " +"from the same position in the input pool)::" +msgstr "" +":func:`permutations` 的代码也可被改写为 :func:`product` " +"的子序列,只要将含有重复元素(来自输入中同一位置的)的项排除。" + +#: ../../library/itertools.rst:534 +msgid "" +"The number of items returned is ``n! / (n-r)!`` when ``0 <= r <= n`` or zero" +" when ``r > n``." +msgstr "当 ``0 <= r <= n`` ,返回项个数为 ``n! / (n-r)!`` ;当 ``r > n`` ,返回项个数为0。" + +#: ../../library/itertools.rst:539 +msgid "Cartesian product of input iterables." +msgstr "可迭代对象输入的笛卡儿积。" + +#: ../../library/itertools.rst:541 +msgid "" +"Roughly equivalent to nested for-loops in a generator expression. For " +"example, ``product(A, B)`` returns the same as ``((x,y) for x in A for y in " +"B)``." +msgstr "" +"大致相当于生成器表达式中的嵌套循环。例如, ``product(A, B)`` 和 ``((x,y) for x in A for y in B)`` " +"返回结果一样。" + +#: ../../library/itertools.rst:544 +msgid "" +"The nested loops cycle like an odometer with the rightmost element advancing" +" on every iteration. This pattern creates a lexicographic ordering so that " +"if the input's iterables are sorted, the product tuples are emitted in " +"sorted order." +msgstr "" +"嵌套循环像里程表那样循环变动,每次迭代时将最右侧的元素向后迭代。这种模式形成了一种字典序,因此如果输入的可迭代对象是已排序的,笛卡尔积元组依次序发出。" + +#: ../../library/itertools.rst:549 +msgid "" +"To compute the product of an iterable with itself, specify the number of " +"repetitions with the optional *repeat* keyword argument. For example, " +"``product(A, repeat=4)`` means the same as ``product(A, A, A, A)``." +msgstr "" +"要计算可迭代对象自身的笛卡尔积,将可选参数 *repeat* 设定为要重复的次数。例如,``product(A, repeat=4)`` 和 " +"``product(A, A, A, A)`` 是一样的。" + +#: ../../library/itertools.rst:553 +msgid "" +"This function is roughly equivalent to the following code, except that the " +"actual implementation does not build up intermediate results in memory::" +msgstr "该函数大致相当于下面的代码,只不过实际实现方案不会在内存中创建中间结果。" + +#: ../../library/itertools.rst:566 +msgid "" +"Before :func:`product` runs, it completely consumes the input iterables, " +"keeping pools of values in memory to generate the products. Accordingly, it" +" is only useful with finite inputs." +msgstr "" +"在 :func:`product` 运行之前,它会完全耗尽输入的可迭代对象,在内存中保留值的临时池以生成结果积。 相应地,它只适用于有限的输入。" + +#: ../../library/itertools.rst:572 +msgid "" +"Make an iterator that returns *object* over and over again. Runs " +"indefinitely unless the *times* argument is specified. Used as argument to " +":func:`map` for invariant parameters to the called function. Also used with" +" :func:`zip` to create an invariant part of a tuple record." +msgstr "" +"创建一个迭代器,不断重复 *object* 。除非设定参数 *times* ,否则将无限重复。可用于 :func:`map` " +"函数中的参数,被调用函数可得到一个不变参数。也可用于 :func:`zip` 的参数以在元组记录中创建一个不变的部分。" + +#: ../../library/itertools.rst:588 +msgid "" +"A common use for *repeat* is to supply a stream of constant values to *map* " +"or *zip*::" +msgstr "*repeat* 最常见的用途就是在 *map* 或 *zip* 提供一个常量流:" + +#: ../../library/itertools.rst:596 +msgid "" +"Make an iterator that computes the function using arguments obtained from " +"the iterable. Used instead of :func:`map` when argument parameters are " +"already grouped in tuples from a single iterable (the data has been \"pre-" +"zipped\"). The difference between :func:`map` and :func:`starmap` parallels" +" the distinction between ``function(a,b)`` and ``function(*c)``. Roughly " +"equivalent to::" +msgstr "" +"创建一个迭代器,使用从可迭代对象中获取的参数来计算该函数。当参数对应的形参已从一个单独可迭代对象组合为元组时(数据已被“预组对”)可用此函数代替 " +":func:`map`。:func:`map` 与 :func:`starmap` 之间的区别可以类比 ``function(a,b)`` 与 " +"``function(*c)`` 的区别。大致相当于::" + +#: ../../library/itertools.rst:610 +msgid "" +"Make an iterator that returns elements from the iterable as long as the " +"predicate is true. Roughly equivalent to::" +msgstr "创建一个迭代器,只要 predicate 为真就从可迭代对象中返回元素。大致相当于::" + +#: ../../library/itertools.rst:624 +msgid "Return *n* independent iterators from a single iterable." +msgstr "从一个可迭代对象中返回 *n* 个独立的迭代器。" + +#: ../../library/itertools.rst:626 +msgid "" +"The following Python code helps explain what *tee* does (although the actual" +" implementation is more complex and uses only a single underlying " +":abbr:`FIFO (first-in, first-out)` queue)." +msgstr "" +"下面的Python代码能帮助解释 *tee* 做了什么(尽管实际的实现更复杂,而且仅使用了一个底层的 :abbr:`FIFO (first in, " +"first-out)` 队列)。" + +#: ../../library/itertools.rst:647 +msgid "" +"Once :func:`tee` has made a split, the original *iterable* should not be " +"used anywhere else; otherwise, the *iterable* could get advanced without the" +" tee objects being informed." +msgstr "" +"一旦 :func:`tee` 实施了一次分裂,原有的 *iterable* 不应再被使用;否则tee对象无法得知 *iterable* 可能已向后迭代。" + +#: ../../library/itertools.rst:651 +msgid "" +"``tee`` iterators are not threadsafe. A :exc:`RuntimeError` may be raised " +"when using simultaneously iterators returned by the same :func:`tee` call, " +"even if the original *iterable* is threadsafe." +msgstr "" +"``tee`` 迭代器不是线程安全的。当同时使用由同一个 :func:`tee` 调用所返回的迭代器时可能引发 " +":exc:`RuntimeError`,即使原本的 *iterable* 是线程安全的。" + +#: ../../library/itertools.rst:655 +msgid "" +"This itertool may require significant auxiliary storage (depending on how " +"much temporary data needs to be stored). In general, if one iterator uses " +"most or all of the data before another iterator starts, it is faster to use " +":func:`list` instead of :func:`tee`." +msgstr "" +"该迭代工具可能需要相当大的辅助存储空间(这取决于要保存多少临时数据)。通常,如果一个迭代器在另一个迭代器开始之前就要使用大部份或全部数据,使用 " +":func:`list` 会比 :func:`tee` 更快。" + +#: ../../library/itertools.rst:663 +msgid "" +"Make an iterator that aggregates elements from each of the iterables. If the" +" iterables are of uneven length, missing values are filled-in with " +"*fillvalue*. Iteration continues until the longest iterable is exhausted. " +"Roughly equivalent to::" +msgstr "" +"创建一个迭代器,从每个可迭代对象中收集元素。如果可迭代对象的长度未对齐,将根据 *fillvalue* " +"填充缺失值。迭代持续到耗光最长的可迭代对象。大致相当于:" + +#: ../../library/itertools.rst:687 +msgid "" +"If one of the iterables is potentially infinite, then the " +":func:`zip_longest` function should be wrapped with something that limits " +"the number of calls (for example :func:`islice` or :func:`takewhile`). If " +"not specified, *fillvalue* defaults to ``None``." +msgstr "" +"如果其中一个可迭代对象有无限长度,:func:`zip_longest` 函数应封装在限制调用次数的场景中(例如 :func:`islice` 或 " +":func:`takewhile`)。除非指定, *fillvalue* 默认为 ``None`` 。" + +#: ../../library/itertools.rst:696 +msgid "Itertools Recipes" +msgstr "itertools 配方" + +#: ../../library/itertools.rst:698 +msgid "" +"This section shows recipes for creating an extended toolset using the " +"existing itertools as building blocks." +msgstr "本节将展示如何使用现有的 itertools 作为基础构件来创建扩展的工具集。" + +#: ../../library/itertools.rst:701 +msgid "" +"Substantially all of these recipes and many, many others can be installed " +"from the `more-itertools project `_ found on the Python Package Index::" +msgstr "" +"基本上所有这些西方和许许多多其他的配方都可以通过 Python Package Index 上的 `more-itertools 项目 " +"`_ 来安装::" + +#: ../../library/itertools.rst:707 +msgid "" +"The extended tools offer the same high performance as the underlying " +"toolset. The superior memory performance is kept by processing elements one " +"at a time rather than bringing the whole iterable into memory all at once. " +"Code volume is kept small by linking the tools together in a functional " +"style which helps eliminate temporary variables. High speed is retained by " +"preferring \"vectorized\" building blocks over the use of for-loops and " +":term:`generator`\\s which incur interpreter overhead." +msgstr "" +"扩展的工具提供了与底层工具集相同的高性能。保持了超棒的内存利用率,因为一次只处理一个元素,而不是将整个可迭代对象加载到内存。代码量保持得很小,以函数式风格将这些工具连接在一起,有助于消除临时变量。速度依然很快,因为倾向于使用“矢量化”构件来取代解释器开销大的" +" for 循环和 :term:`generator` 。" diff --git a/library/json.po b/library/json.po new file mode 100644 index 000000000..8850231e3 --- /dev/null +++ b/library/json.po @@ -0,0 +1,966 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) 2001-2024, Python Software Foundation +# This file is distributed under the same license as the Python package. +# FIRST AUTHOR , YEAR. +# +# Translators: +# dannyvi , 2024 +# 叶浚安 , 2024 +# CCXXXI , 2024 +# Jiu Hong Jiang , 2024 +# sgqy , 2024 +# ww song , 2024 +# Naisen Xu <723648649@qq.com>, 2024 +# Freesand Leo , 2024 +# Xu Siyuan, 2024 +# Rafael Fontenelle , 2024 +# +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: Python 3.9\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2024-06-20 08:51+0000\n" +"PO-Revision-Date: 2017-02-16 23:16+0000\n" +"Last-Translator: Rafael Fontenelle , 2024\n" +"Language-Team: Chinese (China) (https://app.transifex.com/python-doc/teams/5390/zh_CN/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: zh_CN\n" +"Plural-Forms: nplurals=1; plural=0;\n" + +#: ../../library/json.rst:2 +msgid ":mod:`json` --- JSON encoder and decoder" +msgstr ":mod:`json` --- JSON 编码和解码器" + +#: ../../library/json.rst:10 +msgid "**Source code:** :source:`Lib/json/__init__.py`" +msgstr "**源代码:** :source:`Lib/json/__init__.py`" + +#: ../../library/json.rst:14 +msgid "" +"`JSON (JavaScript Object Notation) `_, specified by " +":rfc:`7159` (which obsoletes :rfc:`4627`) and by `ECMA-404 " +"`_, is a lightweight data interchange format " +"inspired by `JavaScript `_ object " +"literal syntax (although it is not a strict subset of JavaScript [#rfc-" +"errata]_ )." +msgstr "" +"`JSON (JavaScript Object Notation) `_,由 :rfc:`7159` (它取代了 " +":rfc:`4627`) 和 `ECMA-404 `_ 指定,是一个受 `JavaScript" +" `_ " +"的对象字面值句法启发的轻量级数据交换格式,尽管它不仅仅是一个严格意义上的 JavaScript 的子集 [#rfc-errata]_。" + +#: ../../library/json.rst:22 +msgid "" +"Be cautious when parsing JSON data from untrusted sources. A malicious JSON " +"string may cause the decoder to consume considerable CPU and memory " +"resources. Limiting the size of data to be parsed is recommended." +msgstr "" +"在解析来自不受信任恶劣的 JSON 数据时要小心谨慎。 恶意的 JSON 字符串可能导致解码器消耗大量 CPU 和内存资源。 " +"建议对要解析的数据大小进行限制。" + +#: ../../library/json.rst:26 +msgid "" +":mod:`json` exposes an API familiar to users of the standard library " +":mod:`marshal` and :mod:`pickle` modules." +msgstr ":mod:`json` 提供了与标准库 :mod:`marshal` 和 :mod:`pickle` 相似的API接口。" + +#: ../../library/json.rst:29 +msgid "Encoding basic Python object hierarchies::" +msgstr "对基本的 Python 对象层次结构进行编码:" + +#: ../../library/json.rst:48 +msgid "Compact encoding::" +msgstr "紧凑编码:" + +#: ../../library/json.rst:54 +msgid "Pretty printing::" +msgstr "美化输出:" + +#: ../../library/json.rst:63 +msgid "Decoding JSON::" +msgstr "JSON解码:" + +#: ../../library/json.rst:75 +msgid "Specializing JSON object decoding::" +msgstr "特殊 JSON 对象解码:" + +#: ../../library/json.rst:90 +msgid "Extending :class:`JSONEncoder`::" +msgstr "扩展 :class:`JSONEncoder`:" + +#: ../../library/json.rst:108 +msgid "Using :mod:`json.tool` from the shell to validate and pretty-print:" +msgstr "从命令行使用 :mod:`json.tool` 来验证并美化输出:" + +#: ../../library/json.rst:119 +msgid "See :ref:`json-commandline` for detailed documentation." +msgstr "详细文档请参见 :ref:`json-commandline`。" + +#: ../../library/json.rst:123 +msgid "" +"JSON is a subset of `YAML `_ 1.2. The JSON produced by " +"this module's default settings (in particular, the default *separators* " +"value) is also a subset of YAML 1.0 and 1.1. This module can thus also be " +"used as a YAML serializer." +msgstr "" +"JSON 是 `YAML `_ 1.2 的一个子集。由该模块的默认设置生成的 JSON (尤其是默认的 “分隔符” " +"设置值)也是 YAML 1.0 and 1.1 的一个子集。因此该模块也能够用于序列化为 YAML。" + +#: ../../library/json.rst:130 +msgid "" +"This module's encoders and decoders preserve input and output order by " +"default. Order is only lost if the underlying containers are unordered." +msgstr "这个模块的编码器和解码器默认保护输入和输出的顺序。仅当底层的容器未排序时才会失去顺序。" + +#: ../../library/json.rst:135 +msgid "Basic Usage" +msgstr "基本使用" + +#: ../../library/json.rst:142 +msgid "" +"Serialize *obj* as a JSON formatted stream to *fp* (a " +"``.write()``-supporting :term:`file-like object`) using this " +":ref:`conversion table `." +msgstr "" +"使用这个 :ref:`转换表 ` 将 *obj* 序列化为 JSON 格式化流形式的 *fp* (支持 " +"``.write()`` 的 :term:`file-like object`)。" + +#: ../../library/json.rst:146 +msgid "" +"If *skipkeys* is true (default: ``False``), then dict keys that are not of a" +" basic type (:class:`str`, :class:`int`, :class:`float`, :class:`bool`, " +"``None``) will be skipped instead of raising a :exc:`TypeError`." +msgstr "" +"如果 *skipkeys* 是 true (默认为 ``False``),那么那些不是基本对象(包括 :class:`str`, " +":class:`int`、:class:`float`、:class:`bool`、``None``)的字典的键会被跳过;否则引发一个 " +":exc:`TypeError`。" + +#: ../../library/json.rst:150 +msgid "" +"The :mod:`json` module always produces :class:`str` objects, not " +":class:`bytes` objects. Therefore, ``fp.write()`` must support :class:`str` " +"input." +msgstr "" +":mod:`json` 模块始终产生 :class:`str` 对象而非 :class:`bytes` 对象。因此,``fp.write()`` " +"必须支持 :class:`str` 输入。" + +#: ../../library/json.rst:154 ../../library/json.rst:433 +msgid "" +"If *ensure_ascii* is true (the default), the output is guaranteed to have " +"all incoming non-ASCII characters escaped. If *ensure_ascii* is false, " +"these characters will be output as-is." +msgstr "" +"如果 *ensure_ascii* 是 true (即默认值),输出保证将所有输入的非 ASCII 字符转义。如果 *ensure_ascii* 是 " +"false,这些字符会原样输出。" + +#: ../../library/json.rst:158 +msgid "" +"If *check_circular* is false (default: ``True``), then the circular " +"reference check for container types will be skipped and a circular reference" +" will result in an :exc:`RecursionError` (or worse)." +msgstr "" +"如果 *check_circular* 是为假值 (默认为 ``True``),那么容器类型的循环引用检验会被跳过并且循环引用会引发一个 " +":exc:`RecursionError` (或者更糟的情况)。" + +#: ../../library/json.rst:162 +msgid "" +"If *allow_nan* is false (default: ``True``), then it will be a " +":exc:`ValueError` to serialize out of range :class:`float` values (``nan``, " +"``inf``, ``-inf``) in strict compliance of the JSON specification. If " +"*allow_nan* is true, their JavaScript equivalents (``NaN``, ``Infinity``, " +"``-Infinity``) will be used." +msgstr "" +"如果 *allow_nan* 是 false(默认为 ``True``),那么在对严格 JSON 规格范围外的 :class:`float` " +"类型值(``nan``、``inf`` 和 ``-inf``)进行序列化时会引发一个 :exc:`ValueError`。如果 *allow_nan* " +"是 true,则使用它们的 JavaScript 等价形式(``NaN``、``Infinity`` 和 ``-Infinity``)。" + +#: ../../library/json.rst:168 ../../library/json.rst:452 +msgid "" +"If *indent* is a non-negative integer or string, then JSON array elements " +"and object members will be pretty-printed with that indent level. An indent" +" level of 0, negative, or ``\"\"`` will only insert newlines. ``None`` (the" +" default) selects the most compact representation. Using a positive integer " +"indent indents that many spaces per level. If *indent* is a string (such as" +" ``\"\\t\"``), that string is used to indent each level." +msgstr "" +"如果 *indent* 是一个非负整数或者字符串,那么 JSON 数组元素和对象成员会被美化输出为该值指定的缩进等级。 如果缩进等级为零、负数或者 " +"``\"\"``,则只会添加换行符。 ``None`` (默认值) 选择最紧凑的表达。 使用一个正整数会让每一层缩进同样数量的空格。 如果 " +"*indent* 是一个字符串 (比如 ``\"\\t\"``),那个字符串会被用于缩进每一层。" + +#: ../../library/json.rst:175 ../../library/json.rst:459 +msgid "Allow strings for *indent* in addition to integers." +msgstr "现允许使用字符串作为 *indent* 而不再仅仅是整数。" + +#: ../../library/json.rst:178 ../../library/json.rst:462 +msgid "" +"If specified, *separators* should be an ``(item_separator, key_separator)`` " +"tuple. The default is ``(', ', ': ')`` if *indent* is ``None`` and ``(',', " +"': ')`` otherwise. To get the most compact JSON representation, you should " +"specify ``(',', ':')`` to eliminate whitespace." +msgstr "" +"当被指定时,*separators* 应当是一个 ``(item_separator, key_separator)`` 元组。当 *indent* 为" +" ``None`` 时,默认值取 ``(', ', ': ')``,否则取 ``(',', ': ')``。为了得到最紧凑的 JSON " +"表达式,你应该指定其为 ``(',', ':')`` 以消除空白字符。" + +#: ../../library/json.rst:183 ../../library/json.rst:467 +msgid "Use ``(',', ': ')`` as default if *indent* is not ``None``." +msgstr "现当 *indent* 不是 ``None`` 时,采用 ``(',', ': ')`` 作为默认值。" + +#: ../../library/json.rst:186 ../../library/json.rst:470 +msgid "" +"If specified, *default* should be a function that gets called for objects " +"that can't otherwise be serialized. It should return a JSON encodable " +"version of the object or raise a :exc:`TypeError`. If not specified, " +":exc:`TypeError` is raised." +msgstr "" +"当 *default* 被指定时,其应该是一个函数,每当某个对象无法被序列化时它会被调用。它应该返回该对象的一个可以被 JSON 编码的版本或者引发一个" +" :exc:`TypeError`。如果没有被指定,则会直接引发 :exc:`TypeError`。" + +#: ../../library/json.rst:191 +msgid "" +"If *sort_keys* is true (default: ``False``), then the output of dictionaries" +" will be sorted by key." +msgstr "如果 *sort_keys* 是 true(默认为 ``False``),那么字典的输出会以键的顺序排序。" + +#: ../../library/json.rst:194 +msgid "" +"To use a custom :class:`JSONEncoder` subclass (e.g. one that overrides the " +":meth:`default` method to serialize additional types), specify it with the " +"*cls* kwarg; otherwise :class:`JSONEncoder` is used." +msgstr "" +"为了使用一个自定义的 :class:`JSONEncoder` 子类(比如:覆盖了 :meth:`default` 方法来序列化额外的类型), 通过 " +"*cls* 关键字参数来指定;否则将使用 :class:`JSONEncoder`。" + +#: ../../library/json.rst:198 ../../library/json.rst:277 +msgid "" +"All optional parameters are now :ref:`keyword-only `." +msgstr "所有可选形参现在都是 :ref:`仅限关键字参数 `。" + +#: ../../library/json.rst:203 +msgid "" +"Unlike :mod:`pickle` and :mod:`marshal`, JSON is not a framed protocol, so " +"trying to serialize multiple objects with repeated calls to :func:`dump` " +"using the same *fp* will result in an invalid JSON file." +msgstr "" +"与 :mod:`pickle` 和 :mod:`marshal` 不同,JSON 不是一个具有框架的协议,所以尝试多次使用同一个 *fp* 调用 " +":func:`dump` 来序列化多个对象会产生一个不合规的 JSON 文件。" + +#: ../../library/json.rst:212 +msgid "" +"Serialize *obj* to a JSON formatted :class:`str` using this :ref:`conversion" +" table `. The arguments have the same meaning as in " +":func:`dump`." +msgstr "" +"使用这个 :ref:`转换表 ` 将 *obj* 序列化为 JSON 格式的 :class:`str`。 " +"其参数的含义与 :func:`dump` 中的相同。" + +#: ../../library/json.rst:218 +msgid "" +"Keys in key/value pairs of JSON are always of the type :class:`str`. When a " +"dictionary is converted into JSON, all the keys of the dictionary are " +"coerced to strings. As a result of this, if a dictionary is converted into " +"JSON and then back into a dictionary, the dictionary may not equal the " +"original one. That is, ``loads(dumps(x)) != x`` if x has non-string keys." +msgstr "" +"JSON 中的键-值对中的键永远是 :class:`str` 类型的。当一个对象被转化为 JSON " +"时,字典中所有的键都会被强制转换为字符串。这所造成的结果是字典被转换为 JSON 然后转换回字典时可能和原来的不相等。换句话说,如果 x " +"具有非字符串的键,则有 ``loads(dumps(x)) != x``。" + +#: ../../library/json.rst:227 +msgid "" +"Deserialize *fp* (a ``.read()``-supporting :term:`text file` or " +":term:`binary file` containing a JSON document) to a Python object using " +"this :ref:`conversion table `." +msgstr "" +"使用这个 :ref:`转换表` 将 *fp* (一个支持 ``.read()`` 并包含一个 JSON 文档的 " +":term:`text file` 或者 :term:`binary file`) 反序列化为一个 Python 对象。" + +#: ../../library/json.rst:231 +msgid "" +"*object_hook* is an optional function that will be called with the result of" +" any object literal decoded (a :class:`dict`). The return value of " +"*object_hook* will be used instead of the :class:`dict`. This feature can " +"be used to implement custom decoders (e.g. `JSON-RPC " +"`_ class hinting)." +msgstr "" +"*object_hook* 是一个可选的函数,它会被调用于每一个解码出的对象字面量(即一个 :class:`dict`)。*object_hook* " +"的返回值会取代原本的 :class:`dict`。这一特性能够被用于实现自定义解码器(如 `JSON-RPC " +"`_ 的类型提示)。" + +#: ../../library/json.rst:237 +msgid "" +"*object_pairs_hook* is an optional function that will be called with the " +"result of any object literal decoded with an ordered list of pairs. The " +"return value of *object_pairs_hook* will be used instead of the " +":class:`dict`. This feature can be used to implement custom decoders. If " +"*object_hook* is also defined, the *object_pairs_hook* takes priority." +msgstr "" +"*object_pairs_hook* 是一个可选的函数,它会被调用于每一个有序列表对解码出的对象字面量。 *object_pairs_hook* " +"的返回值将会取代原本的 :class:`dict` 。这一特性能够被用于实现自定义解码器。如果 *object_hook* 也被定义, " +"*object_pairs_hook* 优先。" + +#: ../../library/json.rst:243 ../../library/json.rst:348 +msgid "Added support for *object_pairs_hook*." +msgstr "添加了对 *object_pairs_hook* 的支持。" + +#: ../../library/json.rst:246 ../../library/json.rst:351 +msgid "" +"*parse_float*, if specified, will be called with the string of every JSON " +"float to be decoded. By default, this is equivalent to ``float(num_str)``. " +"This can be used to use another datatype or parser for JSON floats (e.g. " +":class:`decimal.Decimal`)." +msgstr "" +"*parse_float* ,如果指定,将与每个要解码 JSON 浮点数的字符串一同调用。默认状态下,相当于 ``float(num_str)`` " +"。可以用于对 JSON 浮点数使用其它数据类型和语法分析程序 (比如 :class:`decimal.Decimal` )。" + +#: ../../library/json.rst:251 ../../library/json.rst:356 +msgid "" +"*parse_int*, if specified, will be called with the string of every JSON int " +"to be decoded. By default, this is equivalent to ``int(num_str)``. This " +"can be used to use another datatype or parser for JSON integers (e.g. " +":class:`float`)." +msgstr "" +"*parse_int* ,如果指定,将与每个要解码 JSON 整数的字符串一同调用。默认状态下,相当于 ``int(num_str)`` 。可以用于对 " +"JSON 整数使用其它数据类型和语法分析程序 (比如 :class:`float` )。" + +#: ../../library/json.rst:256 +msgid "" +"The default *parse_int* of :func:`int` now limits the maximum length of the " +"integer string via the interpreter's :ref:`integer string conversion length " +"limitation ` to help avoid denial of service attacks." +msgstr "" +"现在 :func:`int` 默认的 *parse_int* 会通过解释器的 :ref:`整数字符串长度上限 `" +" 来限制整数字符串的最大长度以帮助避免拒绝服务攻击。" + +#: ../../library/json.rst:262 ../../library/json.rst:361 +msgid "" +"*parse_constant*, if specified, will be called with one of the following " +"strings: ``'-Infinity'``, ``'Infinity'``, ``'NaN'``. This can be used to " +"raise an exception if invalid JSON numbers are encountered." +msgstr "" +"*parse_constant* ,如果指定,将要与以下字符串中的一个一同调用: ``'-Infinity'`` , ``'Infinity'`` , " +"``'NaN'`` 。如果遇到无效的 JSON 数字则可以使用它引发异常。" + +#: ../../library/json.rst:267 +msgid "" +"*parse_constant* doesn't get called on 'null', 'true', 'false' anymore." +msgstr "*parse_constant* 不再调用 'null' , 'true' , 'false' 。" + +#: ../../library/json.rst:270 +msgid "" +"To use a custom :class:`JSONDecoder` subclass, specify it with the ``cls`` " +"kwarg; otherwise :class:`JSONDecoder` is used. Additional keyword arguments" +" will be passed to the constructor of the class." +msgstr "" +"要使用自定义的 :class:`JSONDecoder` 子类,用 ``cls`` 指定他;否则使用 :class:`JSONDecoder` " +"。额外的关键词参数会通过类的构造函数传递。" + +#: ../../library/json.rst:274 ../../library/json.rst:292 +#: ../../library/json.rst:371 +msgid "" +"If the data being deserialized is not a valid JSON document, a " +":exc:`JSONDecodeError` will be raised." +msgstr "如果反序列化的数据不是有效 JSON 文档,引发 :exc:`JSONDecodeError` 错误。" + +#: ../../library/json.rst:280 +msgid "" +"*fp* can now be a :term:`binary file`. The input encoding should be UTF-8, " +"UTF-16 or UTF-32." +msgstr "*fp* 现在可以是 :term:`binary file` 。输入编码应当是 UTF-8 , UTF-16 或者 UTF-32 。" + +#: ../../library/json.rst:286 +msgid "" +"Deserialize *s* (a :class:`str`, :class:`bytes` or :class:`bytearray` " +"instance containing a JSON document) to a Python object using this " +":ref:`conversion table `." +msgstr "" +"使用这个 :ref:`转换表 ` 将 *s* (一个包含 JSON 文档的 :class:`str`, " +":class:`bytes` 或 :class:`bytearray` 实例) 反序列化为 Python 对象。" + +#: ../../library/json.rst:290 +msgid "The other arguments have the same meaning as in :func:`load`." +msgstr "其他参数的含义与 :func:`load` 中的相同。" + +#: ../../library/json.rst:295 +msgid "" +"*s* can now be of type :class:`bytes` or :class:`bytearray`. The input " +"encoding should be UTF-8, UTF-16 or UTF-32." +msgstr "" +"*s* 现在可以为 :class:`bytes` 或 :class:`bytearray` 类型。 输入编码应为 UTF-8, UTF-16 或 " +"UTF-32。" + +#: ../../library/json.rst:299 +msgid "The keyword argument *encoding* has been removed." +msgstr "关键字参数 *encoding* 已被移除。" + +#: ../../library/json.rst:304 +msgid "Encoders and Decoders" +msgstr "编码器和解码器" + +#: ../../library/json.rst:308 +msgid "Simple JSON decoder." +msgstr "简单的JSON解码器。" + +#: ../../library/json.rst:310 +msgid "Performs the following translations in decoding by default:" +msgstr "默认情况下,解码执行以下翻译:" + +#: ../../library/json.rst:315 ../../library/json.rst:404 +msgid "JSON" +msgstr "JSON" + +#: ../../library/json.rst:315 ../../library/json.rst:404 +msgid "Python" +msgstr "Python" + +#: ../../library/json.rst:317 ../../library/json.rst:406 +msgid "object" +msgstr "object -- 对象" + +#: ../../library/json.rst:317 ../../library/json.rst:406 +msgid "dict" +msgstr "dict" + +#: ../../library/json.rst:319 ../../library/json.rst:408 +msgid "array" +msgstr "array" + +#: ../../library/json.rst:319 +msgid "list" +msgstr "list" + +#: ../../library/json.rst:321 ../../library/json.rst:410 +msgid "string" +msgstr "string" + +#: ../../library/json.rst:321 ../../library/json.rst:410 +msgid "str" +msgstr "str" + +#: ../../library/json.rst:323 +msgid "number (int)" +msgstr "number (int)" + +#: ../../library/json.rst:323 +msgid "int" +msgstr "int" + +#: ../../library/json.rst:325 +msgid "number (real)" +msgstr "number (real)" + +#: ../../library/json.rst:325 +msgid "float" +msgstr "float" + +#: ../../library/json.rst:327 ../../library/json.rst:414 +msgid "true" +msgstr "true" + +#: ../../library/json.rst:327 ../../library/json.rst:414 +msgid "True" +msgstr "True" + +#: ../../library/json.rst:329 ../../library/json.rst:416 +msgid "false" +msgstr "false" + +#: ../../library/json.rst:329 ../../library/json.rst:416 +msgid "False" +msgstr "False" + +#: ../../library/json.rst:331 ../../library/json.rst:418 +msgid "null" +msgstr "null" + +#: ../../library/json.rst:331 ../../library/json.rst:418 +msgid "None" +msgstr "None" + +#: ../../library/json.rst:334 +msgid "" +"It also understands ``NaN``, ``Infinity``, and ``-Infinity`` as their " +"corresponding ``float`` values, which is outside the JSON spec." +msgstr "它还将“NaN”、“Infinity”和“-Infinity”理解为它们对应的“float”值,这超出了JSON规范。" + +#: ../../library/json.rst:337 +msgid "" +"*object_hook*, if specified, will be called with the result of every JSON " +"object decoded and its return value will be used in place of the given " +":class:`dict`. This can be used to provide custom deserializations (e.g. to" +" support `JSON-RPC `_ class hinting)." +msgstr "" +"如果指定了 *object_hook*,它将被调用并传入每个已解码 JSON 对象的结果,并且其返回值将被用来替代给定的 :class:`dict`。 " +"它可被用于提供自定义的反序列化操作(例如支持 `JSON-RPC `_ 类提示)。" + +#: ../../library/json.rst:342 +msgid "" +"*object_pairs_hook*, if specified will be called with the result of every " +"JSON object decoded with an ordered list of pairs. The return value of " +"*object_pairs_hook* will be used instead of the :class:`dict`. This feature" +" can be used to implement custom decoders. If *object_hook* is also " +"defined, the *object_pairs_hook* takes priority." +msgstr "" +"如果指定了 *object_pairs_hook* 则它将被调用并传入以对照值有序列表进行解码的每个 JSON 对象的结果。 " +"*object_pairs_hook* 的结果值将被用来替代 :class:`dict`。 这一特性可被用于实现自定义解码器。 如果还定义了 " +"*object_hook*,则 *object_pairs_hook* 的优先级更高。" + +#: ../../library/json.rst:366 +msgid "" +"If *strict* is false (``True`` is the default), then control characters will" +" be allowed inside strings. Control characters in this context are those " +"with character codes in the 0--31 range, including ``'\\t'`` (tab), " +"``'\\n'``, ``'\\r'`` and ``'\\0'``." +msgstr "" +"如果 *strict* 为 false (默认为 ``True`` ),那么控制字符将被允许在字符串内。在此上下文中的控制字符编码在范围 0--31 " +"内的字符,包括 ``'\\t'`` (制表符), ``'\\n'`` , ``'\\r'`` 和 ``'\\0'`` 。" + +#: ../../library/json.rst:374 ../../library/json.rst:475 +msgid "All parameters are now :ref:`keyword-only `." +msgstr "所有形参现在都是 :ref:`仅限关键字参数 `。" + +#: ../../library/json.rst:379 +msgid "" +"Return the Python representation of *s* (a :class:`str` instance containing " +"a JSON document)." +msgstr "返回 *s* 的 Python 表示形式(包含一个 JSON 文档的 :class:`str` 实例)。" + +#: ../../library/json.rst:382 +msgid "" +":exc:`JSONDecodeError` will be raised if the given JSON document is not " +"valid." +msgstr "如果给定的 JSON 文档无效则将引发 :exc:`JSONDecodeError`。" + +#: ../../library/json.rst:387 +msgid "" +"Decode a JSON document from *s* (a :class:`str` beginning with a JSON " +"document) and return a 2-tuple of the Python representation and the index in" +" *s* where the document ended." +msgstr "" +"从 *s* 中解码出 JSON 文档(以 JSON 文档开头的一个 :class:`str` 对象)并返回一个 Python 表示形式为 2 " +"元组以及指明该文档在 *s* 中结束位置的序号。" + +#: ../../library/json.rst:391 +msgid "" +"This can be used to decode a JSON document from a string that may have " +"extraneous data at the end." +msgstr "这可以用于从一个字符串解码JSON文档,该字符串的末尾可能有无关的数据。" + +#: ../../library/json.rst:397 +msgid "Extensible JSON encoder for Python data structures." +msgstr "用于Python数据结构的可扩展JSON编码器。" + +#: ../../library/json.rst:399 +msgid "Supports the following objects and types by default:" +msgstr "默认支持以下对象和类型:" + +#: ../../library/json.rst:408 +msgid "list, tuple" +msgstr "list, tuple" + +#: ../../library/json.rst:412 +msgid "int, float, int- & float-derived Enums" +msgstr "int, float, int 和 float 派生的枚举" + +#: ../../library/json.rst:412 +msgid "number" +msgstr "数字" + +#: ../../library/json.rst:421 +msgid "Added support for int- and float-derived Enum classes." +msgstr "添加了对 int 和 float 派生的枚举类的支持" + +#: ../../library/json.rst:424 +msgid "" +"To extend this to recognize other objects, subclass and implement a " +":meth:`default` method with another method that returns a serializable " +"object for ``o`` if possible, otherwise it should call the superclass " +"implementation (to raise :exc:`TypeError`)." +msgstr "" +"为了将其拓展至识别其他对象,需要子类化并实现 :meth:`default` 方法于另一种返回 ``o`` " +"的可序列化对象的方法如果可行,否则它应该调用超类实现(来引发 :exc:`TypeError` )。" + +#: ../../library/json.rst:429 +msgid "" +"If *skipkeys* is false (the default), a :exc:`TypeError` will be raised when" +" trying to encode keys that are not :class:`str`, :class:`int`, " +":class:`float` or ``None``. If *skipkeys* is true, such items are simply " +"skipped." +msgstr "" +"如果 *skipkeys* 为假值(默认),则当尝试对非 :class:`str`, :class:`int`, :class:`float` 或 " +"``None`` 的键进行编码时将会引发 :exc:`TypeError`。 如果 *skipkeys* 为真值,这些条目将被直接跳过。" + +#: ../../library/json.rst:437 +msgid "" +"If *check_circular* is true (the default), then lists, dicts, and custom " +"encoded objects will be checked for circular references during encoding to " +"prevent an infinite recursion (which would cause an :exc:`RecursionError`). " +"Otherwise, no such check takes place." +msgstr "" +"如果 *check_circular* 为 true " +"(默认),那么列表,字典,和自定义编码的对象在编码期间会被检查重复循环引用防止无限递归(无限递归将导致 :exc:`RecursionError` " +")。否则,这样进行检查。" + +#: ../../library/json.rst:442 +msgid "" +"If *allow_nan* is true (the default), then ``NaN``, ``Infinity``, and " +"``-Infinity`` will be encoded as such. This behavior is not JSON " +"specification compliant, but is consistent with most JavaScript based " +"encoders and decoders. Otherwise, it will be a :exc:`ValueError` to encode " +"such floats." +msgstr "" +"如果 *allow_nan* 为 true (默认),那么 ``NaN`` , ``Infinity`` ,和 ``-Infinity`` " +"进行编码。此行为不符合 JSON 规范,但与大多数的基于 Javascript 的编码器和解码器一致。否则,它将是一个 " +":exc:`ValueError` 来编码这些浮点数。" + +#: ../../library/json.rst:448 +msgid "" +"If *sort_keys* is true (default: ``False``), then the output of dictionaries" +" will be sorted by key; this is useful for regression tests to ensure that " +"JSON serializations can be compared on a day-to-day basis." +msgstr "" +"如果 *sort_keys* 为 true (默认为: ``False`` ),那么字典的输出是按照键排序;这对回归测试很有用,以确保可以每天比较 " +"JSON 序列化。" + +#: ../../library/json.rst:481 +msgid "" +"Implement this method in a subclass such that it returns a serializable " +"object for *o*, or calls the base implementation (to raise a " +":exc:`TypeError`)." +msgstr "在子类中实现这种方法使其返回 *o* 的可序列化对象,或者调用基础实现(引发 :exc:`TypeError` )。" + +#: ../../library/json.rst:485 +msgid "" +"For example, to support arbitrary iterators, you could implement " +":meth:`default` like this::" +msgstr "例如,为了支持任意的迭代器,你可以这样来实现 :meth:`default`::" + +#: ../../library/json.rst:501 +msgid "" +"Return a JSON string representation of a Python data structure, *o*. For " +"example::" +msgstr "返回 Python *o* 数据结构的 JSON 字符串表达方式。例如::" + +#: ../../library/json.rst:510 +msgid "" +"Encode the given object, *o*, and yield each string representation as " +"available. For example::" +msgstr "编码给定对象 *o* ,并且让每个可用的字符串表达方式。例如::" + +#: ../../library/json.rst:518 +msgid "Exceptions" +msgstr "异常" + +#: ../../library/json.rst:522 +msgid "" +"Subclass of :exc:`ValueError` with the following additional attributes:" +msgstr "拥有以下附加属性的 :exc:`ValueError` 的子类:" + +#: ../../library/json.rst:526 +msgid "The unformatted error message." +msgstr "未格式化的错误消息。" + +#: ../../library/json.rst:530 +msgid "The JSON document being parsed." +msgstr "正在解析的 JSON 文档。" + +#: ../../library/json.rst:534 +msgid "The start index of *doc* where parsing failed." +msgstr " *doc* 解析失败的起始索引位置。" + +#: ../../library/json.rst:538 +msgid "The line corresponding to *pos*." +msgstr " *pos* 的对应行数。" + +#: ../../library/json.rst:542 +msgid "The column corresponding to *pos*." +msgstr " *pos* 的对应列数。" + +#: ../../library/json.rst:548 +msgid "Standard Compliance and Interoperability" +msgstr "标准符合性和互操作性" + +#: ../../library/json.rst:550 +msgid "" +"The JSON format is specified by :rfc:`7159` and by `ECMA-404 " +"`_. This section details this module's level " +"of compliance with the RFC. For simplicity, :class:`JSONEncoder` and " +":class:`JSONDecoder` subclasses, and parameters other than those explicitly " +"mentioned, are not considered." +msgstr "" +"JSON 格式由 :rfc:`7159` 和 `ECMA-404 `_ 指定。此段落详细讲了这个模块符合 " +"RFC 的级别。简单来说, :class:`JSONEncoder` 和 :class:`JSONDecoder` " +"子类,和明确提到的参数以外的参数,不作考虑。" + +#: ../../library/json.rst:556 +msgid "" +"This module does not comply with the RFC in a strict fashion, implementing " +"some extensions that are valid JavaScript but not valid JSON. In " +"particular:" +msgstr "此模块不严格遵循于 RFC ,它实现了一些扩展是有效的 Javascript 但不是有效的 JSON。尤其是:" + +#: ../../library/json.rst:559 +msgid "Infinite and NaN number values are accepted and output;" +msgstr "无限和 NaN 数值是被接受并输出;" + +#: ../../library/json.rst:560 +msgid "" +"Repeated names within an object are accepted, and only the value of the last" +" name-value pair is used." +msgstr "对象内的重复名称是接受的,并且仅使用最后一对属性-值对的值。" + +#: ../../library/json.rst:563 +msgid "" +"Since the RFC permits RFC-compliant parsers to accept input texts that are " +"not RFC-compliant, this module's deserializer is technically RFC-compliant " +"under default settings." +msgstr "自从 RFC 允许符合 RFC 的语法分析程序接收 不符合 RFC 的输入文本以来,这个模块的解串器在默认状态下默认符合 RFC 。" + +#: ../../library/json.rst:568 +msgid "Character Encodings" +msgstr "字符编码" + +#: ../../library/json.rst:570 +msgid "" +"The RFC requires that JSON be represented using either UTF-8, UTF-16, or " +"UTF-32, with UTF-8 being the recommended default for maximum " +"interoperability." +msgstr "RFC 要求使用 UTF-8 , UTF-16 ,或 UTF-32 之一来表示 JSON ,为了最大互通性推荐使用 UTF-8 。" + +#: ../../library/json.rst:573 +msgid "" +"As permitted, though not required, by the RFC, this module's serializer sets" +" *ensure_ascii=True* by default, thus escaping the output so that the " +"resulting strings only contain ASCII characters." +msgstr "" +"RFC允许,尽管不是必须的,这个模块的序列化默认设置为 *ensure_ascii=True* ,这样消除输出以便结果字符串至容纳 ASCII 字符。" + +#: ../../library/json.rst:577 +msgid "" +"Other than the *ensure_ascii* parameter, this module is defined strictly in " +"terms of conversion between Python objects and :class:`Unicode strings " +"`, and thus does not otherwise directly address the issue of character " +"encodings." +msgstr "" +"*ensure_ascii* 参数以外,此模块是严格的按照在 Python 对象和 :class:`Unicode strings ` " +"间的转换定义的,并且因此不能直接解决字符编码的问题。" + +#: ../../library/json.rst:582 +msgid "" +"The RFC prohibits adding a byte order mark (BOM) to the start of a JSON " +"text, and this module's serializer does not add a BOM to its output. The RFC" +" permits, but does not require, JSON deserializers to ignore an initial BOM " +"in their input. This module's deserializer raises a :exc:`ValueError` when " +"an initial BOM is present." +msgstr "" +"RFC 禁止添加字符顺序标记( BOM )在 JSON 文本的开头,这个模块的序列化器不添加 BOM 标记在它的输出上。 RFC,准许 JSON " +"反序列化器忽略它们输入中的初始 BOM 标记,但不要求。此模块的反序列化器引发 :exc:`ValueError` 当存在初始 BOM 标记。" + +#: ../../library/json.rst:588 +msgid "" +"The RFC does not explicitly forbid JSON strings which contain byte sequences" +" that don't correspond to valid Unicode characters (e.g. unpaired UTF-16 " +"surrogates), but it does note that they may cause interoperability problems." +" By default, this module accepts and outputs (when present in the original " +":class:`str`) code points for such sequences." +msgstr "" +"RFC 不会明确禁止包含字节序列的 JSON 字符串这不对应有效的 Unicode 字符(比如 不成对的 UTF-16 " +"的替代物),但是它确实指出它们可能会导致互操作性问题。默认下,模块对这样的序列接受和输出(当在原始 :class:`str` 存在时)代码点。" + +#: ../../library/json.rst:596 +msgid "Infinite and NaN Number Values" +msgstr "Infinite 和 NaN 数值" + +#: ../../library/json.rst:598 +msgid "" +"The RFC does not permit the representation of infinite or NaN number values." +" Despite that, by default, this module accepts and outputs ``Infinity``, " +"``-Infinity``, and ``NaN`` as if they were valid JSON number literal " +"values::" +msgstr "" +"RFC 不允许 infinite 或者 NaN 数值的表达方式。尽管这样,默认情况下,此模块接受并且输出 ``Infinity`` , " +"``-Infinity``,和 ``NaN`` 好像它们是有效的JSON数字字面值 ::" + +#: ../../library/json.rst:613 +msgid "" +"In the serializer, the *allow_nan* parameter can be used to alter this " +"behavior. In the deserializer, the *parse_constant* parameter can be used " +"to alter this behavior." +msgstr "序列化器中, *allow_nan* 参数可用于替代这个行为。反序列化器中, *parse_constant* 参数,可用于替代这个行为。" + +#: ../../library/json.rst:619 +msgid "Repeated Names Within an Object" +msgstr "对象中的重复名称" + +#: ../../library/json.rst:621 +msgid "" +"The RFC specifies that the names within a JSON object should be unique, but " +"does not mandate how repeated names in JSON objects should be handled. By " +"default, this module does not raise an exception; instead, it ignores all " +"but the last name-value pair for a given name::" +msgstr "" +"RFC 具体说明了 在 " +"JSON对象里的名字应该是唯一的,但没有规定如何处理JSON对象中的重复名称。默认下,此模块不引发异常;作为替代,对于给定名它将忽略除姓-" +"值对之外的所有对::" + +#: ../../library/json.rst:630 +msgid "The *object_pairs_hook* parameter can be used to alter this behavior." +msgstr " *object_pairs_hook* 参数可用于替代此行为。" + +#: ../../library/json.rst:634 +msgid "Top-level Non-Object, Non-Array Values" +msgstr "顶级非对象,非数组值" + +#: ../../library/json.rst:636 +msgid "" +"The old version of JSON specified by the obsolete :rfc:`4627` required that " +"the top-level value of a JSON text must be either a JSON object or array " +"(Python :class:`dict` or :class:`list`), and could not be a JSON null, " +"boolean, number, or string value. :rfc:`7159` removed that restriction, and" +" this module does not and has never implemented that restriction in either " +"its serializer or its deserializer." +msgstr "" +"过时的 :rfc:`4627` 指定的旧版本 JSON 要求 JSON 文本顶级值必须是 JSON 对象或数组( Python " +":class:`dict` 或 :class:`list` ),并且不能是 JSON null 值,布尔值,数值或者字符串值。 :rfc:`7159` " +"移除这个限制,此模块没有并且从未在序列化器和反序列化器中实现这个限制。" + +#: ../../library/json.rst:643 +msgid "" +"Regardless, for maximum interoperability, you may wish to voluntarily adhere" +" to the restriction yourself." +msgstr "无论如何,为了最大化地获取互操作性,你可能希望自己遵守该原则。" + +#: ../../library/json.rst:648 +msgid "Implementation Limitations" +msgstr "实现限制" + +#: ../../library/json.rst:650 +msgid "Some JSON deserializer implementations may set limits on:" +msgstr "一些 JSON 反序列化器的实现应该在以下方面做出限制:" + +#: ../../library/json.rst:652 +msgid "the size of accepted JSON texts" +msgstr "可接受的 JSON 文本大小" + +#: ../../library/json.rst:653 +msgid "the maximum level of nesting of JSON objects and arrays" +msgstr "嵌套 JSON 对象和数组的最高水平" + +#: ../../library/json.rst:654 +msgid "the range and precision of JSON numbers" +msgstr "JSON 数字的范围和精度" + +#: ../../library/json.rst:655 +msgid "the content and maximum length of JSON strings" +msgstr "JSON 字符串的内容和最大长度" + +#: ../../library/json.rst:657 +msgid "" +"This module does not impose any such limits beyond those of the relevant " +"Python datatypes themselves or the Python interpreter itself." +msgstr "此模块不强制执行任何上述限制,除了相关的 Python 数据类型本身或者 Python 解释器本身的限制以外。" + +#: ../../library/json.rst:660 +msgid "" +"When serializing to JSON, beware any such limitations in applications that " +"may consume your JSON. In particular, it is common for JSON numbers to be " +"deserialized into IEEE 754 double precision numbers and thus subject to that" +" representation's range and precision limitations. This is especially " +"relevant when serializing Python :class:`int` values of extremely large " +"magnitude, or when serializing instances of \"exotic\" numerical types such " +"as :class:`decimal.Decimal`." +msgstr "" +"当序列化为 JSON ,在应用中当心此类限制这可能破坏你的 JSON 。特别是,通常将 JSON 数字反序列化为 IEEE 754 " +"双精度数字,从而受到该表示方式的范围和精度限制。这是特别相关的,当序列化非常大的 Python :class:`int` 值时,或者当序列化 " +"\"exotic\" 数值类型的实例时比如 :class:`decimal.Decimal` 。" + +#: ../../library/json.rst:673 +msgid "Command Line Interface" +msgstr "命令行界面" + +#: ../../library/json.rst:678 +msgid "**Source code:** :source:`Lib/json/tool.py`" +msgstr "**源代码:** :source:`Lib/json/tool.py`" + +#: ../../library/json.rst:682 +msgid "" +"The :mod:`json.tool` module provides a simple command line interface to " +"validate and pretty-print JSON objects." +msgstr " :mod:`json.tool` 模块提供了一个简单的命令行接口验证并打印漂亮的 JSON 对象。" + +#: ../../library/json.rst:685 +msgid "" +"If the optional ``infile`` and ``outfile`` arguments are not specified, " +":attr:`sys.stdin` and :attr:`sys.stdout` will be used respectively:" +msgstr "" +"如果未指定可选的 ``infile`` 和 ``outfile`` 参数,则将分别使用 :attr:`sys.stdin` 和 " +":attr:`sys.stdout`:" + +#: ../../library/json.rst:697 +msgid "" +"The output is now in the same order as the input. Use the :option:`--sort-" +"keys` option to sort the output of dictionaries alphabetically by key." +msgstr "输出现在将与输入顺序保持一致。 请使用 :option:`--sort-keys` 选项来将输出按照键的字母顺序排序。" + +#: ../../library/json.rst:704 +msgid "Command line options" +msgstr "命令行选项" + +#: ../../library/json.rst:708 +msgid "The JSON file to be validated or pretty-printed:" +msgstr "要被验证或美化打印的 JSON 文件:" + +#: ../../library/json.rst:724 +msgid "If *infile* is not specified, read from :attr:`sys.stdin`." +msgstr "如果 *infile* 未指定,则从 :attr:`sys.stdin` 读取。" + +#: ../../library/json.rst:728 +msgid "" +"Write the output of the *infile* to the given *outfile*. Otherwise, write it" +" to :attr:`sys.stdout`." +msgstr "将 *infile* 输出写入到给定的 *outfile*。 在其他情况下写入到 :attr:`sys.stdout`。" + +#: ../../library/json.rst:733 +msgid "Sort the output of dictionaries alphabetically by key." +msgstr "将字典输出按照键的字母顺序排序。" + +#: ../../library/json.rst:739 +msgid "" +"Disable escaping of non-ascii characters, see :func:`json.dumps` for more " +"information." +msgstr "禁用非 ASCII 字符的转义,详情参见 :func:`json.dumps`。" + +#: ../../library/json.rst:745 +msgid "Parse every input line as separate JSON object." +msgstr "将每个输入行解析为单独的 JSON 对象。" + +#: ../../library/json.rst:751 +msgid "Mutually exclusive options for whitespace control." +msgstr "用于空白符控制的互斥选项。" + +#: ../../library/json.rst:757 +msgid "Show the help message." +msgstr "显示帮助消息。" + +#: ../../library/json.rst:761 +msgid "Footnotes" +msgstr "备注" + +#: ../../library/json.rst:762 +msgid "" +"As noted in `the errata for RFC 7159 `_, JSON permits literal U+2028 (LINE " +"SEPARATOR) and U+2029 (PARAGRAPH SEPARATOR) characters in strings, whereas " +"JavaScript (as of ECMAScript Edition 5.1) does not." +msgstr "" +"正如 `RFC 7159 的勘误表 `_ " +"所说明的,JSON 允许以字符串表示字面值字符 U+2028 (LINE SEPARATOR) 和 U+2029 (PARAGRAPH " +"SEPARATOR),而 JavaScript (在 ECMAScript 5.1 版中) 不允许。" diff --git a/library/keyword.po b/library/keyword.po new file mode 100644 index 000000000..f83fe8d97 --- /dev/null +++ b/library/keyword.po @@ -0,0 +1,64 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) 2001-2022, Python Software Foundation +# This file is distributed under the same license as the Python package. +# FIRST AUTHOR , YEAR. +# +# Translators: +# Alpha Du , 2019 +# Freesand Leo , 2020 +# +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: Python 3.9\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2022-11-04 14:34+0000\n" +"PO-Revision-Date: 2017-02-16 23:16+0000\n" +"Last-Translator: Freesand Leo , 2020\n" +"Language-Team: Chinese (China) (https://www.transifex.com/python-doc/teams/5390/zh_CN/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: zh_CN\n" +"Plural-Forms: nplurals=1; plural=0;\n" + +#: ../../library/keyword.rst:2 +msgid ":mod:`keyword` --- Testing for Python keywords" +msgstr ":mod:`keyword` --- 检验Python关键字" + +#: ../../library/keyword.rst:7 +msgid "**Source code:** :source:`Lib/keyword.py`" +msgstr "**源码:** :source:`Lib/keyword.py`" + +#: ../../library/keyword.rst:11 +msgid "" +"This module allows a Python program to determine if a string is a " +":ref:`keyword `." +msgstr "此模块允许 Python 程序确定某个字符串是否为 :ref:`关键字 `。" + +#: ../../library/keyword.rst:17 +msgid "Return ``True`` if *s* is a Python :ref:`keyword `." +msgstr "如果 *s* 是一个 Python :ref:`关键字 ` 则返回 ``True``。" + +#: ../../library/keyword.rst:22 +msgid "" +"Sequence containing all the :ref:`keywords ` defined for the " +"interpreter. If any keywords are defined to only be active when particular " +":mod:`__future__` statements are in effect, these will be included as well." +msgstr "" +"包含解释器定义的所有 :ref:`关键字 ` 的序列。 如果所定义的任何关键字仅在特定 :mod:`__future__` " +"语句生效时被激活,它们也将被包含在内。" + +#: ../../library/keyword.rst:29 +msgid "Return ``True`` if *s* is a Python soft :ref:`keyword `." +msgstr "如果 *s* 是一个 Python 的软 :ref:`关键字 ` 则返回 ``True``。" + +#: ../../library/keyword.rst:36 +msgid "" +"Sequence containing all the soft :ref:`keywords ` defined for the " +"interpreter. If any soft keywords are defined to only be active when " +"particular :mod:`__future__` statements are in effect, these will be " +"included as well." +msgstr "" +"包含解释器定义的所有软 :ref:`关键字 ` 的序列。 如果所定义的任何软关键字仅在特定 :mod:`__future__` " +"语句生效时被激活,它们也将被包含在内。" diff --git a/library/language.po b/library/language.po new file mode 100644 index 000000000..cca86448f --- /dev/null +++ b/library/language.po @@ -0,0 +1,37 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) 2001-2022, Python Software Foundation +# This file is distributed under the same license as the Python package. +# FIRST AUTHOR , YEAR. +# +# Translators: +# Alpha Du , 2019 +# +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: Python 3.9\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2022-11-04 14:34+0000\n" +"PO-Revision-Date: 2017-02-16 23:16+0000\n" +"Last-Translator: Alpha Du , 2019\n" +"Language-Team: Chinese (China) (https://www.transifex.com/python-doc/teams/5390/zh_CN/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: zh_CN\n" +"Plural-Forms: nplurals=1; plural=0;\n" + +#: ../../library/language.rst:5 +msgid "Python Language Services" +msgstr "Python 语言服务" + +#: ../../library/language.rst:7 +msgid "" +"Python provides a number of modules to assist in working with the Python " +"language. These modules support tokenizing, parsing, syntax analysis, " +"bytecode disassembly, and various other facilities." +msgstr "Python 提供了许多模块来帮助使用 Python 语言。 这些模块支持标记化、解析、语法分析、字节码反汇编以及各种其他工具。" + +#: ../../library/language.rst:11 +msgid "These modules include:" +msgstr "这些模块包括:" diff --git a/library/linecache.po b/library/linecache.po new file mode 100644 index 000000000..8ca57f588 --- /dev/null +++ b/library/linecache.po @@ -0,0 +1,105 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) 2001-2022, Python Software Foundation +# This file is distributed under the same license as the Python package. +# FIRST AUTHOR , YEAR. +# +# Translators: +# Freesand Leo , 2019 +# +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: Python 3.9\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2022-11-04 14:34+0000\n" +"PO-Revision-Date: 2017-02-16 23:16+0000\n" +"Last-Translator: Freesand Leo , 2019\n" +"Language-Team: Chinese (China) (https://www.transifex.com/python-doc/teams/5390/zh_CN/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: zh_CN\n" +"Plural-Forms: nplurals=1; plural=0;\n" + +#: ../../library/linecache.rst:2 +msgid ":mod:`linecache` --- Random access to text lines" +msgstr ":mod:`linecache` --- 随机读写文本行" + +#: ../../library/linecache.rst:9 +msgid "**Source code:** :source:`Lib/linecache.py`" +msgstr "**源代码:** :source:`Lib/linecache.py`" + +#: ../../library/linecache.rst:13 +msgid "" +"The :mod:`linecache` module allows one to get any line from a Python source " +"file, while attempting to optimize internally, using a cache, the common " +"case where many lines are read from a single file. This is used by the " +":mod:`traceback` module to retrieve source lines for inclusion in the " +"formatted traceback." +msgstr "" +":mod:`linecache` 模块允许从一个 Python 源文件中获取任意的行,并会尝试使用缓存进行内部优化,常应用于从单个文件读取多行的场合。 " +"此模块被 :mod:`traceback` 模块用来提取源码行以便包含在格式化的回溯中。" + +#: ../../library/linecache.rst:18 +msgid "" +"The :func:`tokenize.open` function is used to open files. This function uses" +" :func:`tokenize.detect_encoding` to get the encoding of the file; in the " +"absence of an encoding token, the file encoding defaults to UTF-8." +msgstr "" +":func:`tokenize.open` 函数被用于打开文件。 此函数使用 :func:`tokenize.detect_encoding` " +"来获取文件的编码格式;如果未指明编码格式,则默认编码为 UTF-8。" + +#: ../../library/linecache.rst:22 +msgid "The :mod:`linecache` module defines the following functions:" +msgstr ":mod:`linecache` 模块定义了下列函数:" + +#: ../../library/linecache.rst:27 +msgid "" +"Get line *lineno* from file named *filename*. This function will never raise" +" an exception --- it will return ``''`` on errors (the terminating newline " +"character will be included for lines that are found)." +msgstr "" +"从名为 *filename* 的文件中获取 *lineno* 行,此函数绝不会引发异常 --- 出现错误时它将返回 ``''`` " +"(所有找到的行都将包含换行符作为结束)。" + +#: ../../library/linecache.rst:33 +msgid "" +"If a file named *filename* is not found, the function first checks for a " +":pep:`302` ``__loader__`` in *module_globals*. If there is such a loader and" +" it defines a ``get_source`` method, then that determines the source lines " +"(if ``get_source()`` returns ``None``, then ``''`` is returned). Finally, if" +" *filename* is a relative filename, it is looked up relative to the entries " +"in the module search path, ``sys.path``." +msgstr "" +"如果找不到名为 *filename* 的文件,此函数会先在 *module_globals* 中检查 :pep:`302` " +"``__loader__``。 如果存在这样的加载器并且它定义了 ``get_source`` 方法,则由该方法来确定源行 (如果 " +"``get_source()`` 返回 ``None``,则该函数返回 ``''``)。 最后,如果 *filename* " +"是一个相对路径文件名,则它会在模块搜索路径 ``sys.path`` 中按条目的相对位置进行查找。" + +#: ../../library/linecache.rst:44 +msgid "" +"Clear the cache. Use this function if you no longer need lines from files " +"previously read using :func:`getline`." +msgstr "清空缓存。 如果你不再需要之前使用 :func:`getline` 从文件读取的行即可使用此函数。" + +#: ../../library/linecache.rst:50 +msgid "" +"Check the cache for validity. Use this function if files in the cache may " +"have changed on disk, and you require the updated version. If *filename* is" +" omitted, it will check all the entries in the cache." +msgstr "" +"检查缓存有效性。 如果缓存中的文件在磁盘上发生了改变,而你需要更新后的版本即可使用此函数。 如果省略了 *filename*,它会检查缓存中的所有条目。" + +#: ../../library/linecache.rst:56 +msgid "" +"Capture enough detail about a non-file-based module to permit getting its " +"lines later via :func:`getline` even if *module_globals* is ``None`` in the " +"later call. This avoids doing I/O until a line is actually needed, without " +"having to carry the module globals around indefinitely." +msgstr "" +"捕获有关某个非基于文件的模块的足够细节信息,以允许稍后再通过 :func:`getline` 来获取其中的行,即使当稍后调用时 " +"*module_globals* 为 ``None``。 这可以避免在实际需要读取行之前执行 I/O,也不必始终保持模块全局变量。" + +#: ../../library/linecache.rst:63 +msgid "Example::" +msgstr "示例::" diff --git a/library/locale.po b/library/locale.po new file mode 100644 index 000000000..e7695818e --- /dev/null +++ b/library/locale.po @@ -0,0 +1,907 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) 2001-2024, Python Software Foundation +# This file is distributed under the same license as the Python package. +# FIRST AUTHOR , YEAR. +# +# Translators: +# 操旭 , 2017 +# Zombie110year , 2019 +# 钢 彭 , 2019 +# ppcfish , 2019 +# Dai Xu , 2021 +# Freesand Leo , 2022 +# Rafael Fontenelle , 2024 +# +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: Python 3.9\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2024-04-15 06:01+0000\n" +"PO-Revision-Date: 2017-02-16 23:16+0000\n" +"Last-Translator: Rafael Fontenelle , 2024\n" +"Language-Team: Chinese (China) (https://app.transifex.com/python-doc/teams/5390/zh_CN/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: zh_CN\n" +"Plural-Forms: nplurals=1; plural=0;\n" + +#: ../../library/locale.rst:2 +msgid ":mod:`locale` --- Internationalization services" +msgstr ":mod:`locale` --- 国际化服务" + +#: ../../library/locale.rst:10 +msgid "**Source code:** :source:`Lib/locale.py`" +msgstr "**源代码:** :source:`Lib/locale.py`" + +#: ../../library/locale.rst:14 +msgid "" +"The :mod:`locale` module opens access to the POSIX locale database and " +"functionality. The POSIX locale mechanism allows programmers to deal with " +"certain cultural issues in an application, without requiring the programmer " +"to know all the specifics of each country where the software is executed." +msgstr "" +":mod:`locale` 模块开通了 POSIX 本地化数据库和功能的访问。POSIX " +"本地化机制让程序员能够为应用程序处理某些本地化的问题,而不需要去了解运行软件的每个国家的全部语言习惯。" + +#: ../../library/locale.rst:21 +msgid "" +"The :mod:`locale` module is implemented on top of the :mod:`_locale` module," +" which in turn uses an ANSI C locale implementation if available." +msgstr "" +":mod:`locale` 模块是在 :mod:`_locale` 模块的基础上实现的,而 _locale 则又用到了 ANSI C " +"语言实现的本地化功能。" + +#: ../../library/locale.rst:24 +msgid "" +"The :mod:`locale` module defines the following exception and functions:" +msgstr ":mod:`locale` 模块定义了以下异常和函数:" + +#: ../../library/locale.rst:29 +msgid "" +"Exception raised when the locale passed to :func:`setlocale` is not " +"recognized." +msgstr "当传给 :func:`setlocale` 的 locale 无法识别时,会触发异常。" + +#: ../../library/locale.rst:35 +msgid "" +"If *locale* is given and not ``None``, :func:`setlocale` modifies the locale" +" setting for the *category*. The available categories are listed in the data" +" description below. *locale* may be a string, or an iterable of two strings " +"(language code and encoding). If it's an iterable, it's converted to a " +"locale name using the locale aliasing engine. An empty string specifies the " +"user's default settings. If the modification of the locale fails, the " +"exception :exc:`Error` is raised. If successful, the new locale setting is " +"returned." +msgstr "" +"如果给定了 *locale* 而不是 ``None``,:func:`setlocale` 会修改 *category* 的 locale " +"设置。可用的类别会在下面的数据描述中列出。*locale* " +"可以是一个字符串,也可以是两个字符串(语言代码和编码)组成的可迭代对象。若为可迭代对象,则会用地区别名引擎转换为一个地区名称。若为空字符串则指明采用用户的默认设置。如果" +" locale 设置修改失败,会触发 :exc:`Error` 异常。如果成功则返回新的 locale 设置。" + +#: ../../library/locale.rst:43 +msgid "" +"If *locale* is omitted or ``None``, the current setting for *category* is " +"returned." +msgstr "如果省略 *locale* 或为 ``None``,将返回 *category* 但当前设置。" + +#: ../../library/locale.rst:46 +msgid "" +":func:`setlocale` is not thread-safe on most systems. Applications typically" +" start with a call of ::" +msgstr ":func:`setlocale` 在大多数系统上都不是线程安全的。应用程序通常会如下调用:" + +#: ../../library/locale.rst:52 +msgid "" +"This sets the locale for all categories to the user's default setting " +"(typically specified in the :envvar:`LANG` environment variable). If the " +"locale is not changed thereafter, using multithreading should not cause " +"problems." +msgstr "" +"这会把所有类别的 locale 都设为用户的默认设置(通常在 :envvar:`LANG` 环境变量中指定)。如果后续 locale " +"没有改动,则使用多线程应该不会产生问题。" + +#: ../../library/locale.rst:59 +msgid "" +"Returns the database of the local conventions as a dictionary. This " +"dictionary has the following strings as keys:" +msgstr "以字典的形式返回本地约定的数据库。此字典具有以下字符串作为键:" + +#: ../../library/locale.rst:65 +msgid "Category" +msgstr "类别" + +#: ../../library/locale.rst:65 +msgid "Key" +msgstr "键" + +#: ../../library/locale.rst:65 +msgid "Meaning" +msgstr "含意" + +#: ../../library/locale.rst:67 +msgid ":const:`LC_NUMERIC`" +msgstr ":const:`LC_NUMERIC`" + +#: ../../library/locale.rst:67 +msgid "``'decimal_point'``" +msgstr "``'decimal_point'``" + +#: ../../library/locale.rst:67 +msgid "Decimal point character." +msgstr "小数点字符。" + +#: ../../library/locale.rst:69 +msgid "``'grouping'``" +msgstr "``'grouping'``" + +#: ../../library/locale.rst:69 +msgid "" +"Sequence of numbers specifying which relative positions the " +"``'thousands_sep'`` is expected. If the sequence is terminated with " +":const:`CHAR_MAX`, no further grouping is performed. If the sequence " +"terminates with a ``0``, the last group size is repeatedly used." +msgstr "" +"数字列表,指定 ``'thousands_sep'`` 应该出现的位置。 如果列表以 :const:`CHAR_MAX` 结束,则不会作分组。如果列表以" +" ``0`` 结束,则重复使用最后的分组大小。" + +#: ../../library/locale.rst:80 +msgid "``'thousands_sep'``" +msgstr "``'thousands_sep'``" + +#: ../../library/locale.rst:80 +msgid "Character used between groups." +msgstr "组之间使用的字符。" + +#: ../../library/locale.rst:82 +msgid ":const:`LC_MONETARY`" +msgstr ":const:`LC_MONETARY`" + +#: ../../library/locale.rst:82 +msgid "``'int_curr_symbol'``" +msgstr "``'int_curr_symbol'``" + +#: ../../library/locale.rst:82 +msgid "International currency symbol." +msgstr "国际货币符号。" + +#: ../../library/locale.rst:84 +msgid "``'currency_symbol'``" +msgstr "``'currency_symbol'``" + +#: ../../library/locale.rst:84 +msgid "Local currency symbol." +msgstr "当地货币符号。" + +#: ../../library/locale.rst:86 +msgid "``'p_cs_precedes/n_cs_precedes'``" +msgstr "``'p_cs_precedes/n_cs_precedes'``" + +#: ../../library/locale.rst:86 +msgid "" +"Whether the currency symbol precedes the value (for positive resp. negative " +"values)." +msgstr "货币符号是否在值之前(对于正值或负值)。" + +#: ../../library/locale.rst:91 +msgid "``'p_sep_by_space/n_sep_by_space'``" +msgstr "``'p_sep_by_space/n_sep_by_space'``" + +#: ../../library/locale.rst:91 +msgid "" +"Whether the currency symbol is separated from the value by a space (for " +"positive resp. negative values)." +msgstr "货币符号是否通过空格与值分隔(对于正值或负值)。" + +#: ../../library/locale.rst:96 +msgid "``'mon_decimal_point'``" +msgstr "``'mon_decimal_point'``" + +#: ../../library/locale.rst:96 +msgid "Decimal point used for monetary values." +msgstr "用于货币金额的小数点。" + +#: ../../library/locale.rst:99 +msgid "``'frac_digits'``" +msgstr "``'frac_digits'``" + +#: ../../library/locale.rst:99 +msgid "" +"Number of fractional digits used in local formatting of monetary values." +msgstr "货币值的本地格式中使用的小数位数。" + +#: ../../library/locale.rst:103 +msgid "``'int_frac_digits'``" +msgstr "``'int_frac_digits'``" + +#: ../../library/locale.rst:103 +msgid "" +"Number of fractional digits used in international formatting of monetary " +"values." +msgstr "货币价值的国际格式中使用的小数位数。" + +#: ../../library/locale.rst:107 +msgid "``'mon_thousands_sep'``" +msgstr "``'mon_thousands_sep'``" + +#: ../../library/locale.rst:107 +msgid "Group separator used for monetary values." +msgstr "用于货币值的组分隔符。" + +#: ../../library/locale.rst:110 +msgid "``'mon_grouping'``" +msgstr "``'mon_grouping'``" + +#: ../../library/locale.rst:110 +msgid "Equivalent to ``'grouping'``, used for monetary values." +msgstr "相当于 ``'grouping'`` ,用于货币价值。" + +#: ../../library/locale.rst:113 +msgid "``'positive_sign'``" +msgstr "``'positive_sign'``" + +#: ../../library/locale.rst:113 +msgid "Symbol used to annotate a positive monetary value." +msgstr "用于标注正货币价值的符号。" + +#: ../../library/locale.rst:116 +msgid "``'negative_sign'``" +msgstr "``'negative_sign'``" + +#: ../../library/locale.rst:116 +msgid "Symbol used to annotate a negative monetary value." +msgstr "用于注释负货币价值的符号。" + +#: ../../library/locale.rst:119 +msgid "``'p_sign_posn/n_sign_posn'``" +msgstr "``'p_sign_posn/n_sign_posn'``" + +#: ../../library/locale.rst:119 +msgid "" +"The position of the sign (for positive resp. negative values), see below." +msgstr "符号的位置(对于正值或负值),见下文。" + +#: ../../library/locale.rst:124 +msgid "" +"All numeric values can be set to :const:`CHAR_MAX` to indicate that there is" +" no value specified in this locale." +msgstr "可以将所有数值设置为 :const:`CHAR_MAX` ,以指示本 locale 中未指定任何值。" + +#: ../../library/locale.rst:127 +msgid "" +"The possible values for ``'p_sign_posn'`` and ``'n_sign_posn'`` are given " +"below." +msgstr "下面给出了 ``'p_sign_posn'`` 和 ``'n_sign_posn'`` 的可能值。" + +#: ../../library/locale.rst:130 +msgid "Value" +msgstr "值" + +#: ../../library/locale.rst:130 +msgid "Explanation" +msgstr "说明" + +#: ../../library/locale.rst:132 +msgid "``0``" +msgstr "``0``" + +#: ../../library/locale.rst:132 +msgid "Currency and value are surrounded by parentheses." +msgstr "被括号括起来的货币和金额。" + +#: ../../library/locale.rst:135 +msgid "``1``" +msgstr "``1``" + +#: ../../library/locale.rst:135 +msgid "The sign should precede the value and currency symbol." +msgstr "该标志应位于值和货币符号之前。" + +#: ../../library/locale.rst:138 +msgid "``2``" +msgstr "``2``" + +#: ../../library/locale.rst:138 +msgid "The sign should follow the value and currency symbol." +msgstr "该标志应位于值和货币符号之后。" + +#: ../../library/locale.rst:141 +msgid "``3``" +msgstr "``3``" + +#: ../../library/locale.rst:141 +msgid "The sign should immediately precede the value." +msgstr "标志应该紧跟在值之前。" + +#: ../../library/locale.rst:144 +msgid "``4``" +msgstr "``4``" + +#: ../../library/locale.rst:144 +msgid "The sign should immediately follow the value." +msgstr "标志应该紧跟在值之后。" + +#: ../../library/locale.rst:147 +msgid "``CHAR_MAX``" +msgstr "``CHAR_MAX``" + +#: ../../library/locale.rst:147 +msgid "Nothing is specified in this locale." +msgstr "该地区未指定内容。" + +#: ../../library/locale.rst:150 +msgid "" +"The function sets temporarily the ``LC_CTYPE`` locale to the ``LC_NUMERIC`` " +"locale or the ``LC_MONETARY`` locale if locales are different and numeric or" +" monetary strings are non-ASCII. This temporary change affects other " +"threads." +msgstr "" +"该函数将 ``LC_CTYPE`` 地区设为 ``LC_NUMERIC`` 地区,若地区不同且数字或货币字符为非 ASCII,则设置为 " +"``LC_MONETARY`` 地区。这个临时的改变会影响到其他线程。" + +#: ../../library/locale.rst:154 +msgid "" +"The function now sets temporarily the ``LC_CTYPE`` locale to the " +"``LC_NUMERIC`` locale in some cases." +msgstr "现在在某些情况下,该函数会将 ``LC_CTYPE`` 地区设为 ``LC_NUMERIC`` 地区。" + +#: ../../library/locale.rst:161 +msgid "" +"Return some locale-specific information as a string. This function is not " +"available on all systems, and the set of possible options might also vary " +"across platforms. The possible argument values are numbers, for which " +"symbolic constants are available in the locale module." +msgstr "" +"以字符串形式返回一些地区相关的信息。本函数并非在所有系统都可用,而且可用的 option 在不同平台上也可能不同。可填的参数值为数值,在 locale " +"模块中提供了对应的符号常量。" + +#: ../../library/locale.rst:166 +msgid "" +"The :func:`nl_langinfo` function accepts one of the following keys. Most " +"descriptions are taken from the corresponding description in the GNU C " +"library." +msgstr ":func:`nl_langinfo` 函数可接受以下值。大部分含义都取自 GNU C 库。" + +#: ../../library/locale.rst:172 +msgid "" +"Get a string with the name of the character encoding used in the selected " +"locale." +msgstr "获取一个字符串,代表所选地区采用的字符编码名称。" + +#: ../../library/locale.rst:177 +msgid "" +"Get a string that can be used as a format string for :func:`time.strftime` " +"to represent date and time in a locale-specific way." +msgstr "获取一个字符串,可用作 :func:`time.strftime` 的格式串,以便以地区特定格式表示日期和时间。" + +#: ../../library/locale.rst:182 +msgid "" +"Get a string that can be used as a format string for :func:`time.strftime` " +"to represent a date in a locale-specific way." +msgstr "获取一个字符串,可用作 :func:`time.strftime` 的格式串,以便以地区特定格式表示日期。" + +#: ../../library/locale.rst:187 +msgid "" +"Get a string that can be used as a format string for :func:`time.strftime` " +"to represent a time in a locale-specific way." +msgstr "获取一个字符串,可用作 :func:`time.strftime` 的格式串,以便以地区特定格式表示时间。" + +#: ../../library/locale.rst:192 +msgid "" +"Get a format string for :func:`time.strftime` to represent time in the am/pm" +" format." +msgstr "获取一个字符串,可用作 :func:`time.strftime` 的格式串,以便以 am/pm 的格式表示时间。" + +#: ../../library/locale.rst:197 +msgid "Get the name of the n-th day of the week." +msgstr "获取一周中第 n 天的名称。" + +#: ../../library/locale.rst:201 +msgid "" +"This follows the US convention of :const:`DAY_1` being Sunday, not the " +"international convention (ISO 8601) that Monday is the first day of the " +"week." +msgstr "这里遵循美国惯例,即 :const:`DAY_1` 是星期天,而不是国际惯例(ISO 8601),即星期一是一周的第一天。" + +#: ../../library/locale.rst:207 +msgid "Get the abbreviated name of the n-th day of the week." +msgstr "获取一周中第 n 天的缩写名称。" + +#: ../../library/locale.rst:211 +msgid "Get the name of the n-th month." +msgstr "获取第 n 个月的名称。" + +#: ../../library/locale.rst:215 +msgid "Get the abbreviated name of the n-th month." +msgstr "获取第 n 个月的缩写名称。" + +#: ../../library/locale.rst:219 +msgid "Get the radix character (decimal dot, decimal comma, etc.)." +msgstr "获取小数点字符(小数点、小数逗号等)。" + +#: ../../library/locale.rst:223 +msgid "Get the separator character for thousands (groups of three digits)." +msgstr "获取千位数(三位数一组)的分隔符。" + +#: ../../library/locale.rst:227 +msgid "" +"Get a regular expression that can be used with the regex function to " +"recognize a positive response to a yes/no question." +msgstr "获取一个可供 regex 函数使用的正则表达式,用于识别需要回答是或否的问题的肯定回答。" + +#: ../../library/locale.rst:232 +msgid "" +"The expression is in the syntax suitable for the :c:func:`regex` function " +"from the C library, which might differ from the syntax used in :mod:`re`." +msgstr "该表达式的语法适用于 C 库的 :c:func:`regex` 函数,可能与 :mod:`re` 中的语法不一样。" + +#: ../../library/locale.rst:237 +msgid "" +"Get a regular expression that can be used with the regex(3) function to " +"recognize a negative response to a yes/no question." +msgstr "获取一个可供 regex(3) 函数使用的正则表达式,用于识别需要回答是或否的问题的否定回答。" + +#: ../../library/locale.rst:242 +msgid "" +"Get the currency symbol, preceded by \"-\" if the symbol should appear " +"before the value, \"+\" if the symbol should appear after the value, or " +"\".\" if the symbol should replace the radix character." +msgstr "" +"获取货币符号,如果符号应位于数字之前,则在其前面加上“-”;如果符号应位于数字之后,则前面加“+”;如果符号应取代小数点字符,则前面加“.”。" + +#: ../../library/locale.rst:248 +msgid "Get a string that represents the era used in the current locale." +msgstr "获取一个字符串,代表当前地区使用的纪元。" + +#: ../../library/locale.rst:250 +msgid "" +"Most locales do not define this value. An example of a locale which does " +"define this value is the Japanese one. In Japan, the traditional " +"representation of dates includes the name of the era corresponding to the " +"then-emperor's reign." +msgstr "大多数地区都没有定义该值。定义了该值的一个案例日本。日本传统的日期表示方法中,包含了当时天皇统治朝代的名称。" + +#: ../../library/locale.rst:255 +msgid "" +"Normally it should not be necessary to use this value directly. Specifying " +"the ``E`` modifier in their format strings causes the :func:`time.strftime` " +"function to use this information. The format of the returned string is not " +"specified, and therefore you should not assume knowledge of it on different " +"systems." +msgstr "" +"通常没有必要直接使用该值。在格式串中指定 ``E`` 符号,会让 :func:`time.strftime` " +"函数启用此信息。返回字符串的格式并没有定义,因此不得假定各个系统都能理解。" + +#: ../../library/locale.rst:263 +msgid "" +"Get a format string for :func:`time.strftime` to represent date and time in " +"a locale-specific era-based way." +msgstr "获取一个字符串,可用作 :func:`time.strftime` 的格式串,以便以地区特定格式表示带纪元的日期和时间。" + +#: ../../library/locale.rst:268 +msgid "" +"Get a format string for :func:`time.strftime` to represent a date in a " +"locale-specific era-based way." +msgstr "获取一个字符串,可用作 :func:`time.strftime` 的格式串,以便以地区特定格式表示带纪元的日期。" + +#: ../../library/locale.rst:273 +msgid "" +"Get a format string for :func:`time.strftime` to represent a time in a " +"locale-specific era-based way." +msgstr "获取一个字符串,可用作 :func:`time.strftime` 的格式串,以便以地区特定格式表示带纪元的时间。" + +#: ../../library/locale.rst:278 +msgid "" +"Get a representation of up to 100 values used to represent the values 0 to " +"99." +msgstr "获取 0 到 99 的表示法,最多不超过 100 个值。" + +#: ../../library/locale.rst:284 +msgid "" +"Tries to determine the default locale settings and returns them as a tuple " +"of the form ``(language code, encoding)``." +msgstr "尝试确定默认的地区设置,并以 ``(language code, encoding)`` 元组的形式返回。" + +#: ../../library/locale.rst:287 +msgid "" +"According to POSIX, a program which has not called ``setlocale(LC_ALL, '')``" +" runs using the portable ``'C'`` locale. Calling ``setlocale(LC_ALL, '')`` " +"lets it use the default locale as defined by the :envvar:`LANG` variable. " +"Since we do not want to interfere with the current locale setting we thus " +"emulate the behavior in the way described above." +msgstr "" +"根据 POSIX 的规范,未调用 ``setlocale(LC_ALL, '')`` 的程序采用可移植的 ``'C'`` 区域设置运行。 调用 " +"``setlocale(LC_ALL, '')`` 则可采用 :envvar:`LANG` 变量定义的默认区域。 " +"由于不想干扰当前的区域设置,因此就以上述方式进行了模拟。" + +#: ../../library/locale.rst:293 +msgid "" +"To maintain compatibility with other platforms, not only the :envvar:`LANG` " +"variable is tested, but a list of variables given as envvars parameter. The" +" first found to be defined will be used. *envvars* defaults to the search " +"path used in GNU gettext; it must always contain the variable name " +"``'LANG'``. The GNU gettext search path contains ``'LC_ALL'``, " +"``'LC_CTYPE'``, ``'LANG'`` and ``'LANGUAGE'``, in that order." +msgstr "" +"为了维持与其他平台的兼容性,不仅需要检测 :envvar:`LANG` 变量,还需要检测 envvars 参数给出的变量列表。首先发现的定义将被采用。 " +"*envvars* 默认为 GNU gettext 采用的搜索路径;必须包含 ``'LANG'`` 变量。 GNU gettext 的搜索路径依次包含了" +" ``'LC_ALL'``、``'LC_CTYPE'``、``'LANG'`` 和 ``'LANGUAGE'``。" + +#: ../../library/locale.rst:300 ../../library/locale.rst:311 +msgid "" +"Except for the code ``'C'``, the language code corresponds to :rfc:`1766`. " +"*language code* and *encoding* may be ``None`` if their values cannot be " +"determined." +msgstr "" +"除了 ``'C'`` 之外,语言代码对应 :rfc:`1766` 标准。若 *语言代码* 和 *编码* 无法确定,则可为 ``None``。" + +#: ../../library/locale.rst:307 +msgid "" +"Returns the current setting for the given locale category as sequence " +"containing *language code*, *encoding*. *category* may be one of the " +":const:`LC_\\*` values except :const:`LC_ALL`. It defaults to " +":const:`LC_CTYPE`." +msgstr "" +"以列表的形式返回指定地区类别的当前设置,结果包括 *语言代码* 、*编码*。*category* 可以是 :const:`LC_\\*` 之一, " +":const:`LC_ALL` 除外。默认为 :const:`LC_CTYPE`。" + +#: ../../library/locale.rst:318 +msgid "" +"Return the encoding used for text data, according to user preferences. User" +" preferences are expressed differently on different systems, and might not " +"be available programmatically on some systems, so this function only returns" +" a guess." +msgstr "" + +#: ../../library/locale.rst:323 +msgid "" +"On some systems, it is necessary to invoke :func:`setlocale` to obtain the " +"user preferences, so this function is not thread-safe. If invoking setlocale" +" is not necessary or desired, *do_setlocale* should be set to ``False``." +msgstr "" +"某些系统必须调用 :func:`setlocale` 才能获取用户偏好,所以本函数不是线程安全的。如果不需要或不希望调用 " +"setlocale,*do_setlocale* 应设为 ``False``。" + +#: ../../library/locale.rst:327 +msgid "" +"On Android or in the UTF-8 mode (:option:`-X` ``utf8`` option), always " +"return ``'UTF-8'``, the locale and the *do_setlocale* argument are ignored." +msgstr "" + +#: ../../library/locale.rst:330 +msgid "" +"The function now always returns ``UTF-8`` on Android or if the UTF-8 mode is" +" enabled." +msgstr "" + +#: ../../library/locale.rst:337 +msgid "" +"Returns a normalized locale code for the given locale name. The returned " +"locale code is formatted for use with :func:`setlocale`. If normalization " +"fails, the original name is returned unchanged." +msgstr "" +"为给定的区域名称返回标准代码。返回的区域代码已经格式化,可供 :func:`setlocale` 使用。 如果标准化操作失败,则返回原名称。" + +#: ../../library/locale.rst:341 +msgid "" +"If the given encoding is not known, the function defaults to the default " +"encoding for the locale code just like :func:`setlocale`." +msgstr "如果给出的编码无法识别,则本函数默认采用区域代码的默认编码,这正类似于 :func:`setlocale`。" + +#: ../../library/locale.rst:347 +msgid "Sets the locale for *category* to the default setting." +msgstr "将 *category* 的区域设为默认值。" + +#: ../../library/locale.rst:349 +msgid "" +"The default setting is determined by calling :func:`getdefaultlocale`. " +"*category* defaults to :const:`LC_ALL`." +msgstr "默认设置通过调用 :func:`getdefaultlocale` 确定。*category* 默认为 :const:`LC_ALL`。" + +#: ../../library/locale.rst:355 +msgid "" +"Compares two strings according to the current :const:`LC_COLLATE` setting. " +"As any other compare function, returns a negative, or a positive value, or " +"``0``, depending on whether *string1* collates before or after *string2* or " +"is equal to it." +msgstr "" +"根据当前的 :const:`LC_COLLATE` 设置,对两个字符串进行比较。与其他比较函数一样,根据 *string1* 位于 *string2* " +"之前、之后或是相同,返回负值、、正值或者 ``0``。" + +#: ../../library/locale.rst:363 +msgid "" +"Transforms a string to one that can be used in locale-aware comparisons. " +"For example, ``strxfrm(s1) < strxfrm(s2)`` is equivalent to ``strcoll(s1, " +"s2) < 0``. This function can be used when the same string is compared " +"repeatedly, e.g. when collating a sequence of strings." +msgstr "" +"将字符串转换为可用于本地化比较的字符串。例如 ``strxfrm(s1) < strxfrm(s2)`` 相当于 ``strcoll(s1, s2) <" +" 0``。在重复比较同一个字符串时,可能会用到本函数,比如整理字符串列表时。" + +#: ../../library/locale.rst:372 +msgid "" +"Formats a number *val* according to the current :const:`LC_NUMERIC` setting." +" The format follows the conventions of the ``%`` operator. For floating " +"point values, the decimal point is modified if appropriate. If *grouping* " +"is true, also takes the grouping into account." +msgstr "" +"根据当前的 :const:`LC_NUMERIC` 设置,对数字 *val* 进行格式化。格式将遵循 ``%`` " +"运算符的约定。浮点值的小数点会按需修改。若 *grouping* 为 True,则还会考虑分组。" + +#: ../../library/locale.rst:377 +msgid "" +"If *monetary* is true, the conversion uses monetary thousands separator and " +"grouping strings." +msgstr "若 *monetary* 为 True,则会用到货币千位分隔符和分组字符串。" + +#: ../../library/locale.rst:380 +msgid "" +"Processes formatting specifiers as in ``format % val``, but takes the " +"current locale settings into account." +msgstr "格式化符的处理类似 ``format % val`` ,但会考虑到当前的区域设置。" + +#: ../../library/locale.rst:383 +msgid "The *monetary* keyword parameter was added." +msgstr "增加了关键字参数 *monetary* 。" + +#: ../../library/locale.rst:389 +msgid "" +"Please note that this function works like :meth:`format_string` but will " +"only work for exactly one ``%char`` specifier. For example, ``'%f'`` and " +"``'%.0f'`` are both valid specifiers, but ``'%f KiB'`` is not." +msgstr "" +"请注意,本函数的工作原理与 :meth:`format_string` 类似,但只认一种 ``%char`` 格式符。 比如 ``'%f'`` 和 " +"``'%.0f'`` 都是有效的格式符,但 ``'%f KiB'`` 则不是。" + +#: ../../library/locale.rst:393 +msgid "For whole format strings, use :func:`format_string`." +msgstr "若想用到全部的格式化串,请采用 :func:`format_string`。" + +#: ../../library/locale.rst:395 +msgid "Use :meth:`format_string` instead." +msgstr "请改用 :meth:`format_string` 。" + +#: ../../library/locale.rst:401 +msgid "" +"Formats a number *val* according to the current :const:`LC_MONETARY` " +"settings." +msgstr "根据当前的 :const:`LC_MONETARY` 设置,对数字 *val* 进行格式化。" + +#: ../../library/locale.rst:403 +msgid "" +"The returned string includes the currency symbol if *symbol* is true, which " +"is the default. If *grouping* is true (which is not the default), grouping " +"is done with the value. If *international* is true (which is not the " +"default), the international currency symbol is used." +msgstr "" +"如果 *symbol* 为 True(默认值),则返回的字符串将包含货币符号。如果 *grouping* 为 True(非默认值),则会进行分组。如果 " +"*international* 为 True(非默认值),将采用国际货币符号。" + +#: ../../library/locale.rst:408 +msgid "" +"Note that this function will not work with the 'C' locale, so you have to " +"set a locale via :func:`setlocale` first." +msgstr "请注意,本函数对区域 “C” 无效,所以必须先通过 :func:`setlocale` 设置一个区域。" + +#: ../../library/locale.rst:414 +msgid "" +"Formats a floating point number using the same format as the built-in " +"function ``str(float)``, but takes the decimal point into account." +msgstr "对浮点数进行格式化,格式要求与内置函数 ``str(float)`` 相同,但会考虑小数点。" + +#: ../../library/locale.rst:420 +msgid "" +"Converts a string into a normalized number string, following the " +":const:`LC_NUMERIC` settings." +msgstr "根据 :const:`LC_NUMERIC` 的设置,将字符串转换为标准化的数字字符串。" + +#: ../../library/locale.rst:428 +msgid "" +"Converts a string to a number, following the :const:`LC_NUMERIC` settings, " +"by calling *func* on the result of calling :func:`delocalize` on *string*." +msgstr "" +"将一个字符串转换为数字,遵循 :const:`LC_NUMERIC` 设置,通过在 *string* 上调用 :func:`delocalize` " +"的结果上调用 *func* 来实现。" + +#: ../../library/locale.rst:434 +msgid "" +"Converts a string to an integer, following the :const:`LC_NUMERIC` " +"conventions." +msgstr "按照 :const:`LC_NUMERIC` 的约定,将字符串转换为整数。" + +#: ../../library/locale.rst:441 +msgid "" +"Locale category for the character type functions. Depending on the settings" +" of this category, the functions of module :mod:`string` dealing with case " +"change their behaviour." +msgstr "字符型函数的区域类别。根据该类别的设置,模块 :mod:`string` 中处理大小写的函数会改变操作方式。" + +#: ../../library/locale.rst:448 +msgid "" +"Locale category for sorting strings. The functions :func:`strcoll` and " +":func:`strxfrm` of the :mod:`locale` module are affected." +msgstr "" +"字符串排序会用到的区域类别。 将会影响 :mod:`locale` 模块的 :func:`strcoll` 和 :func:`strxfrm` 函数。" + +#: ../../library/locale.rst:454 +msgid "" +"Locale category for the formatting of time. The function " +":func:`time.strftime` follows these conventions." +msgstr "格式化时间时会用到的区域类别。 :func:`time.strftime` 函数会参考这些约定。" + +#: ../../library/locale.rst:460 +msgid "" +"Locale category for formatting of monetary values. The available options " +"are available from the :func:`localeconv` function." +msgstr "格式化货币值时会用到的区域类别。可用值可由 :func:`localeconv` 函数获取。" + +#: ../../library/locale.rst:466 +msgid "" +"Locale category for message display. Python currently does not support " +"application specific locale-aware messages. Messages displayed by the " +"operating system, like those returned by :func:`os.strerror` might be " +"affected by this category." +msgstr "" +"显示消息时用到的区域类别。目前 Python 不支持应用定制的本地化消息。 由操作系统显示的消息,比如由 :func:`os.strerror` " +"返回的消息可能会受到该类别的影响。" + +#: ../../library/locale.rst:474 +msgid "" +"Locale category for formatting numbers. The functions :func:`.format`, " +":func:`atoi`, :func:`atof` and :func:`.str` of the :mod:`locale` module are " +"affected by that category. All other numeric formatting operations are not " +"affected." +msgstr "" +"格式化数字时用到的区域类别。 :mod:`locale` 模块的 :func:`.format` 、 :func:`atoi` 、 " +":func:`atof` 和 :func:`.str` 函数会受到该类别的影响。其他所有数字格式化操作不受影响。" + +#: ../../library/locale.rst:482 +msgid "" +"Combination of all locale settings. If this flag is used when the locale is" +" changed, setting the locale for all categories is attempted. If that fails " +"for any category, no category is changed at all. When the locale is " +"retrieved using this flag, a string indicating the setting for all " +"categories is returned. This string can be later used to restore the " +"settings." +msgstr "" +"混合所有的区域设置。如果在区域改动时使用该标志,将尝试设置所有类别的区域参数。只要有任何一个类别设置失败,就不会修改任何类别。在使用此标志获取区域设置时,会返回一个代表所有类别设置的字符串。之后可用此字符串恢复设置。" + +#: ../../library/locale.rst:491 +msgid "" +"This is a symbolic constant used for different values returned by " +":func:`localeconv`." +msgstr "一个符号常量, :func:`localeconv` 返回多个值时将会用到。" + +#: ../../library/locale.rst:495 +msgid "Example::" +msgstr "示例::" + +#: ../../library/locale.rst:508 +msgid "Background, details, hints, tips and caveats" +msgstr "背景、细节、提示、技巧和注意事项" + +#: ../../library/locale.rst:510 +msgid "" +"The C standard defines the locale as a program-wide property that may be " +"relatively expensive to change. On top of that, some implementation are " +"broken in such a way that frequent locale changes may cause core dumps. " +"This makes the locale somewhat painful to use correctly." +msgstr "" + +#: ../../library/locale.rst:515 +msgid "" +"Initially, when a program is started, the locale is the ``C`` locale, no " +"matter what the user's preferred locale is. There is one exception: the " +":data:`LC_CTYPE` category is changed at startup to set the current locale " +"encoding to the user's preferred locale encoding. The program must " +"explicitly say that it wants the user's preferred locale settings for other " +"categories by calling ``setlocale(LC_ALL, '')``." +msgstr "" +"当程序第一次启动时,无论用户偏好定义成什么,区域值都是 ``C``。不过有一个例外,就是在启动时修改 :data:`LC_CTYPE` " +"类别,设置当前区域编码为用户偏好编码。程序必须调用 ``setlocale(LC_ALL, '')`` 明确表示用户偏好区域将设为其他类别。" + +#: ../../library/locale.rst:522 +msgid "" +"It is generally a bad idea to call :func:`setlocale` in some library " +"routine, since as a side effect it affects the entire program. Saving and " +"restoring it is almost as bad: it is expensive and affects other threads " +"that happen to run before the settings have been restored." +msgstr "" +"若要从库程序中调用 :func:`setlocale` " +",通常这不是个好主意,因为副作用是会影响整个程序。保存和恢复区域设置也几乎一样糟糕:不仅代价高昂,而且会影响到恢复之前运行的其他线程。" + +#: ../../library/locale.rst:527 +msgid "" +"If, when coding a module for general use, you need a locale independent " +"version of an operation that is affected by the locale (such as certain " +"formats used with :func:`time.strftime`), you will have to find a way to do " +"it without using the standard library routine. Even better is convincing " +"yourself that using locale settings is okay. Only as a last resort should " +"you document that your module is not compatible with non-\\ ``C`` locale " +"settings." +msgstr "" +"如果是要编写通用模块,需要有一种不受区域设置影响的操作方式(比如某些用到 :func:`time.strftime` " +"的格式),将不得不寻找一种不用标准库的方案。更好的办法是说服自己,可以采纳区域设置。只有在万不得已的情况下,才能用文档标注出模块与非 ``C`` " +"区域设置不兼容。" + +#: ../../library/locale.rst:534 +msgid "" +"The only way to perform numeric operations according to the locale is to use" +" the special functions defined by this module: :func:`atof`, :func:`atoi`, " +":func:`.format`, :func:`.str`." +msgstr "" +"根据区域设置进行数字运算的唯一方法,就是采用本模块定义的函数::func:`atof` 、 :func:`atoi` 、 :func:`.format`" +" 、 :func:`.str`。" + +#: ../../library/locale.rst:538 +msgid "" +"There is no way to perform case conversions and character classifications " +"according to the locale. For (Unicode) text strings these are done " +"according to the character value only, while for byte strings, the " +"conversions and classifications are done according to the ASCII value of the" +" byte, and bytes whose high bit is set (i.e., non-ASCII bytes) are never " +"converted or considered part of a character class such as letter or " +"whitespace." +msgstr "" +"无法根据区域设置进行大小写转换和字符分类。对于(Unicode)文本字符串来说,这些操作都是根据字符值进行的;而对于字节符串来说,转换和分类则是根据字节的" +" ASCII 值进行的,高位被置位的字节(即非 ASCII 字节)永远不会被转换或被视作字母或空白符之类。" + +#: ../../library/locale.rst:549 +msgid "For extension writers and programs that embed Python" +msgstr "针对扩展程序编写人员和嵌入Python 运行的程序" + +#: ../../library/locale.rst:551 +msgid "" +"Extension modules should never call :func:`setlocale`, except to find out " +"what the current locale is. But since the return value can only be used " +"portably to restore it, that is not very useful (except perhaps to find out " +"whether or not the locale is ``C``)." +msgstr "" +"除了要查询当前区域,扩展模块不应去调用 :func:`setlocale`。但由于返回值只能用于恢复设置,所以也没什么用(也许只能用于确认是否为 " +"``C``)。" + +#: ../../library/locale.rst:556 +msgid "" +"When Python code uses the :mod:`locale` module to change the locale, this " +"also affects the embedding application. If the embedding application " +"doesn't want this to happen, it should remove the :mod:`_locale` extension " +"module (which does all the work) from the table of built-in modules in the " +":file:`config.c` file, and make sure that the :mod:`_locale` module is not " +"accessible as a shared library." +msgstr "" +"当 Python 代码利用 :mod:`locale` 模块修改区域设置时,也会影响到嵌入 Python " +"运行的应用程序。如果嵌入运行的程序不希望发生这种情况,则应从 :file:`config.c` 文件的内置模块表中删除 :mod:`_locale` " +"扩展模块(所有操作均是由它完成的),并确保 :mod:`_locale` 模块不能成为一个共享库。" + +#: ../../library/locale.rst:567 +msgid "Access to message catalogs" +msgstr "访问消息目录" + +#: ../../library/locale.rst:575 +msgid "" +"The locale module exposes the C library's gettext interface on systems that " +"provide this interface. It consists of the functions :func:`!gettext`, " +":func:`!dgettext`, :func:`!dcgettext`, :func:`!textdomain`, " +":func:`!bindtextdomain`, and :func:`!bind_textdomain_codeset`. These are " +"similar to the same functions in the :mod:`gettext` module, but use the C " +"library's binary format for message catalogs, and the C library's search " +"algorithms for locating message catalogs." +msgstr "" +"在提供 gettext 接口的系统中,locale 模块暴露出了 C 库的接口。它由 :func:`!gettext` " +"、:func:`!dgettext` 、:func:`!dcgettext` 、 :func:`!textdomain` " +"、:func:`!bindtextdomain` 和 :func:`!bind_textdomain_codeset` 等函数组成。 他们与 " +":mod:`gettext` 模块中的同名函数类似,但采用了 C 库二进制格式的消息目录,以及 C 库的搜索算法来查找消息目录。" + +#: ../../library/locale.rst:582 +msgid "" +"Python applications should normally find no need to invoke these functions, " +"and should use :mod:`gettext` instead. A known exception to this rule are " +"applications that link with additional C libraries which internally invoke " +":c:func:`gettext` or :c:func:`dcgettext`. For these applications, it may be" +" necessary to bind the text domain, so that the libraries can properly " +"locate their message catalogs." +msgstr "" +"Python 应用程序通常不需要调用这些函数,而应改用 :mod:`gettext`。这条规则的一个已知例外,是与附加 C " +"库链接的应用程序,他们在内部调用了 :c:func:`gettext` 或 " +":c:func:`dcgettext`。对于这些应用程序,可能有必要绑定文本域,以便库可以准确找到其消息目录。" diff --git a/library/logging.config.po b/library/logging.config.po new file mode 100644 index 000000000..88823da4d --- /dev/null +++ b/library/logging.config.po @@ -0,0 +1,1088 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) 2001-2024, Python Software Foundation +# This file is distributed under the same license as the Python package. +# FIRST AUTHOR , YEAR. +# +# Translators: +# 叶浚安 , 2019 +# Alpha Du , 2019 +# ppcfish , 2019 +# Freesand Leo , 2022 +# WH-2099 , 2022 +# Rafael Fontenelle , 2024 +# +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: Python 3.9\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2024-04-15 06:01+0000\n" +"PO-Revision-Date: 2017-02-16 23:16+0000\n" +"Last-Translator: Rafael Fontenelle , 2024\n" +"Language-Team: Chinese (China) (https://app.transifex.com/python-doc/teams/5390/zh_CN/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: zh_CN\n" +"Plural-Forms: nplurals=1; plural=0;\n" + +#: ../../library/logging.config.rst:2 +msgid ":mod:`logging.config` --- Logging configuration" +msgstr ":mod:`logging.config` --- 日志记录配置" + +#: ../../library/logging.config.rst:10 +msgid "**Source code:** :source:`Lib/logging/config.py`" +msgstr "**源代码:** :source:`Lib/logging/config.py`" + +#: ../../library/logging.config.rst:14 +msgid "" +"This page contains only reference information. For tutorials, please see" +msgstr "此页面仅包含参考信息。有关教程,请参阅" + +#: ../../library/logging.config.rst:17 +msgid ":ref:`Basic Tutorial `" +msgstr ":ref:`基础教程 `" + +#: ../../library/logging.config.rst:18 +msgid ":ref:`Advanced Tutorial `" +msgstr ":ref:`进阶教程 `" + +#: ../../library/logging.config.rst:19 +msgid ":ref:`Logging Cookbook `" +msgstr ":ref:`日志记录操作手册 `" + +#: ../../library/logging.config.rst:23 +msgid "This section describes the API for configuring the logging module." +msgstr "这一节描述了用于配置 logging 模块的 API。" + +#: ../../library/logging.config.rst:28 +msgid "Configuration functions" +msgstr "配置函数" + +#: ../../library/logging.config.rst:30 +msgid "" +"The following functions configure the logging module. They are located in " +"the :mod:`logging.config` module. Their use is optional --- you can " +"configure the logging module using these functions or by making calls to the" +" main API (defined in :mod:`logging` itself) and defining handlers which are" +" declared either in :mod:`logging` or :mod:`logging.handlers`." +msgstr "" +"下列函数可配置 logging 模块。 它们位于 :mod:`logging.config` 模块中。 它们的使用是可选的 --- 要配置 " +"logging 模块你可以使用这些函数,也可以通过调用主 API (在 :mod:`logging` 本身定义) 并定义在 :mod:`logging`" +" 或 :mod:`logging.handlers` 中声明的处理器。" + +#: ../../library/logging.config.rst:38 +msgid "" +"Takes the logging configuration from a dictionary. The contents of this " +"dictionary are described in :ref:`logging-config-dictschema` below." +msgstr "从一个字典获取日志记录配置。 字典的内容描述见下文的 :ref:`logging-config-dictschema`。" + +#: ../../library/logging.config.rst:42 +msgid "" +"If an error is encountered during configuration, this function will raise a " +":exc:`ValueError`, :exc:`TypeError`, :exc:`AttributeError` or " +":exc:`ImportError` with a suitably descriptive message. The following is a " +"(possibly incomplete) list of conditions which will raise an error:" +msgstr "" +"如果在配置期间遇到错误,此函数将引发 :exc:`ValueError`, :exc:`TypeError`, " +":exc:`AttributeError` 或 :exc:`ImportError` 并附带适当的描述性消息。 " +"下面是将会引发错误的(可能不完整的)条件列表:" + +#: ../../library/logging.config.rst:48 +msgid "" +"A ``level`` which is not a string or which is a string not corresponding to " +"an actual logging level." +msgstr "``level`` 不是字符串或者不是对应于实际日志记录级别的字符串。" + +#: ../../library/logging.config.rst:50 +msgid "A ``propagate`` value which is not a boolean." +msgstr "``propagate`` 值不是布尔类型。" + +#: ../../library/logging.config.rst:51 +msgid "An id which does not have a corresponding destination." +msgstr "id 没有对应的目标。" + +#: ../../library/logging.config.rst:52 +msgid "A non-existent handler id found during an incremental call." +msgstr "在增量调用期间发现不存在的处理器 id。" + +#: ../../library/logging.config.rst:53 +msgid "An invalid logger name." +msgstr "无效的日志记录器名称。" + +#: ../../library/logging.config.rst:54 +msgid "Inability to resolve to an internal or external object." +msgstr "无法解析为内部或外部对象。" + +#: ../../library/logging.config.rst:56 +msgid "" +"Parsing is performed by the :class:`DictConfigurator` class, whose " +"constructor is passed the dictionary used for configuration, and has a " +":meth:`configure` method. The :mod:`logging.config` module has a callable " +"attribute :attr:`dictConfigClass` which is initially set to " +":class:`DictConfigurator`. You can replace the value of " +":attr:`dictConfigClass` with a suitable implementation of your own." +msgstr "" +"解析由 :class:`DictConfigurator` 类执行,该类的构造器可传入用于配置的字典,并且具有 :meth:`configure` " +"方法。 :mod:`logging.config` 模块具有可调用属性 :attr:`dictConfigClass`,其初始值设为 " +":class:`DictConfigurator`。 你可以使用你自己的适当实现来替换 :attr:`dictConfigClass` 的值。" + +#: ../../library/logging.config.rst:64 +msgid "" +":func:`dictConfig` calls :attr:`dictConfigClass` passing the specified " +"dictionary, and then calls the :meth:`configure` method on the returned " +"object to put the configuration into effect::" +msgstr "" +":func:`dictConfig` 会调用 :attr:`dictConfigClass` 并传入指定的字典,然后在所返回的对象上调用 " +":meth:`configure` 方法以使配置生效::" + +#: ../../library/logging.config.rst:71 +msgid "" +"For example, a subclass of :class:`DictConfigurator` could call " +"``DictConfigurator.__init__()`` in its own :meth:`__init__()`, then set up " +"custom prefixes which would be usable in the subsequent :meth:`configure` " +"call. :attr:`dictConfigClass` would be bound to this new subclass, and then " +":func:`dictConfig` could be called exactly as in the default, uncustomized " +"state." +msgstr "" +"例如,:class:`DictConfigurator` 的子类可以在它自己的 :meth:`__init__()` 中调用 " +"``DictConfigurator.__init__()``,然后设置可以在后续 :meth:`configure` 调用中使用的自定义前缀。 " +":attr:`dictConfigClass` 将被绑定到这个新的子类,然后就可以与在默认的未定制状态下完全相同的方式调用 " +":func:`dictConfig`。" + +#: ../../library/logging.config.rst:82 +msgid "" +"Reads the logging configuration from a :mod:`configparser`\\-format file. " +"The format of the file should be as described in :ref:`logging-config-" +"fileformat`. This function can be called several times from an application, " +"allowing an end user to select from various pre-canned configurations (if " +"the developer provides a mechanism to present the choices and load the " +"chosen configuration)." +msgstr "" +"从一个 :mod:`configparser` 格式文件中读取日志记录配置。 文件格式应当与 :ref:`logging-config-" +"fileformat` 中的描述一致。 " +"此函数可在应用程序中被多次调用,以允许最终用户在多个预设配置中进行选择(如果开发者提供了展示选项并加载选定配置的机制)。" + +#: ../../library/logging.config.rst:0 +msgid "Parameters" +msgstr "参数" + +#: ../../library/logging.config.rst:90 +msgid "" +"A filename, or a file-like object, or an instance derived from " +":class:`~configparser.RawConfigParser`. If a ``RawConfigParser``-derived " +"instance is passed, it is used as is. Otherwise, a " +":class:`~configparser.Configparser` is instantiated, and the configuration " +"read by it from the object passed in ``fname``. If that has a " +":meth:`readline` method, it is assumed to be a file-like object and read " +"using :meth:`~configparser.ConfigParser.read_file`; otherwise, it is assumed" +" to be a filename and passed to :meth:`~configparser.ConfigParser.read`." +msgstr "" +"一个文件名,或一个文件类对象,或是一个派生自 :class:`~configparser.RawConfigParser` 的实例。 " +"如果传入了一个派生自 ``RawConfigParser`` 的实例,它会被原样使用。 否则,将会实例化一个 " +":class:`~configparser.Configparser`,并且它会从作为 ``fname`` 传入的对象中读取配置。 如果存在 " +":meth:`readline` 方法,则它会被当作一个文件类对象并使用 " +":meth:`~configparser.ConfigParser.read_file` 来读取;在其它情况下,它会被当作一个文件名并传递给 " +":meth:`~configparser.ConfigParser.read`。" + +#: ../../library/logging.config.rst:102 +msgid "" +"Defaults to be passed to the ConfigParser can be specified in this argument." +msgstr "要传递给 ConfigParser 的默认值可在此参数中指定。" + +#: ../../library/logging.config.rst:105 +msgid "" +"If specified as ``False``, loggers which exist when this call is made are " +"left enabled. The default is ``True`` because this enables old behaviour in " +"a backward-compatible way. This behaviour is to disable any existing non-" +"root loggers unless they or their ancestors are explicitly named in the " +"logging configuration." +msgstr "" +"如果指定为 ``False``,则当执行此调用时已存在的日志记录器会保持启用。 默认值为 ``True`` 因为这将以向下兼容方式启用旧行为。 " +"此行为是禁用任何现有的非根日志记录器除非它们或它们的上级在日志记录配置中被显式地命名。" + +#: ../../library/logging.config.rst:114 +msgid "" +"An instance of a subclass of :class:`~configparser.RawConfigParser` is now " +"accepted as a value for ``fname``. This facilitates:" +msgstr "" +"现在接受 :class:`~configparser.RawConfigParser` 子类的实例作为 ``fname`` 的值。 这有助于:" + +#: ../../library/logging.config.rst:118 +msgid "" +"Use of a configuration file where logging configuration is just part of the " +"overall application configuration." +msgstr "使用一个配置文件,其中日志记录配置只是全部应用程序配置的一部分。" + +#: ../../library/logging.config.rst:120 +msgid "" +"Use of a configuration read from a file, and then modified by the using " +"application (e.g. based on command-line parameters or other aspects of the " +"runtime environment) before being passed to ``fileConfig``." +msgstr "" +"使用从一个文件读取的配置,它随后会在被传给 ``fileConfig`` 之前由使用配置的应用程序来修改(例如基于命令行参数或运行时环境的其他部分)。" + +#: ../../library/logging.config.rst:126 +msgid "" +"Starts up a socket server on the specified port, and listens for new " +"configurations. If no port is specified, the module's default " +":const:`DEFAULT_LOGGING_CONFIG_PORT` is used. Logging configurations will be" +" sent as a file suitable for processing by :func:`dictConfig` or " +":func:`fileConfig`. Returns a :class:`~threading.Thread` instance on which " +"you can call :meth:`~threading.Thread.start` to start the server, and which " +"you can :meth:`~threading.Thread.join` when appropriate. To stop the server," +" call :func:`stopListening`." +msgstr "" +"在指定的端口上启动套接字服务器,并监听新的配置。 如果未指定端口,则会使用模块默认的 " +":const:`DEFAULT_LOGGING_CONFIG_PORT`。 日志记录配置将作为适合由 :func:`dictConfig` 或 " +":func:`fileConfig` 进行处理的文件来发送。 返回一个 :class:`~threading.Thread` 实例,你可以在该实例上调用" +" :meth:`~threading.Thread.start` 来启动服务器,对该服务器你可以在适当的时候执行 " +":meth:`~threading.Thread.join`。 要停止该服务器,请调用 :func:`stopListening`。" + +#: ../../library/logging.config.rst:135 +msgid "" +"The ``verify`` argument, if specified, should be a callable which should " +"verify whether bytes received across the socket are valid and should be " +"processed. This could be done by encrypting and/or signing what is sent " +"across the socket, such that the ``verify`` callable can perform signature " +"verification and/or decryption. The ``verify`` callable is called with a " +"single argument - the bytes received across the socket - and should return " +"the bytes to be processed, or ``None`` to indicate that the bytes should be " +"discarded. The returned bytes could be the same as the passed in bytes (e.g." +" when only verification is done), or they could be completely different " +"(perhaps if decryption were performed)." +msgstr "" +"如果指定 ``verify`` 参数,则它应当是一个可调用对象,该对象应当验证通过套接字接收的字节数据是否有效且应被处理。 " +"这可以通过对通过套接字发送的内容进行加密和/或签名来完成,这样 ``verify`` 可调用对象就能执行签名验证和/或解密。 ``verify`` " +"可调用对象的调用会附带一个参数 —— 通过套接字接收的字节数据 —— 并应当返回要处理的字节数据,或者返回 ``None`` " +"来指明这些字节数据应当被丢弃。 返回的字节数据可以与传入的字节数据相同(例如在只执行验证的时候),或者也可以完全不同(例如在可能执行了解密的时候)。" + +#: ../../library/logging.config.rst:146 +msgid "" +"To send a configuration to the socket, read in the configuration file and " +"send it to the socket as a sequence of bytes preceded by a four-byte length " +"string packed in binary using ``struct.pack('>L', n)``." +msgstr "" +"要将配置发送到套接字,请读取配置文件并将其作为字节序列发送到套接字,字节序列要以使用 ``struct.pack('>L', n)`` " +"打包为二进制格式的四字节长度的字符串打头。" + +#: ../../library/logging.config.rst:154 +msgid "" +"Because portions of the configuration are passed through :func:`eval`, use " +"of this function may open its users to a security risk. While the function " +"only binds to a socket on ``localhost``, and so does not accept connections " +"from remote machines, there are scenarios where untrusted code could be run " +"under the account of the process which calls :func:`listen`. Specifically, " +"if the process calling :func:`listen` runs on a multi-user machine where " +"users cannot trust each other, then a malicious user could arrange to run " +"essentially arbitrary code in a victim user's process, simply by connecting " +"to the victim's :func:`listen` socket and sending a configuration which runs" +" whatever code the attacker wants to have executed in the victim's process. " +"This is especially easy to do if the default port is used, but not hard even" +" if a different port is used. To avoid the risk of this happening, use the " +"``verify`` argument to :func:`listen` to prevent unrecognised configurations" +" from being applied." +msgstr "" +"因为配置的各部分是通过 :func:`eval` 传递的,使用此函数可能让用户面临安全风险。虽然此函数仅绑定到 ``localhost`` " +"上的套接字,因此并不接受来自远端机器的连接,但在某些场景中不受信任的代码可以在调用 :func:`listen` " +"的进程的账户下运行。具体来说,如果如果调用 :func:`listen` " +"的进程在用户无法彼此信任的多用户机器上运行,则恶意用户就能简单地通过连接到受害者的 :func:`listen` " +"套接字并发送运行攻击者想在受害者的进程上执行的任何代码的配置的方式,安排运行几乎任意的代码。如果是使用默认端口这会特别容易做到,即便使用了不同端口也不难做到。要避免发生这种情况的风险,请在" +" :func:`listen` 中使用 ``verify`` 参数来防止未经认可的配置被应用。" + +#: ../../library/logging.config.rst:170 +msgid "The ``verify`` argument was added." +msgstr "添加了 ``verify`` 参数。" + +#: ../../library/logging.config.rst:175 +msgid "" +"If you want to send configurations to the listener which don't disable " +"existing loggers, you will need to use a JSON format for the configuration, " +"which will use :func:`dictConfig` for configuration. This method allows you " +"to specify ``disable_existing_loggers`` as ``False`` in the configuration " +"you send." +msgstr "" +"如果你希望将配置发送给未禁用现有日志记录器的监听器,你将需要使用 JSON 格式的配置,该格式将使用 :func:`dictConfig` 进行配置。 " +"此方法允许你在你发送的配置中将 ``disable_existing_loggers`` 指定为 ``False``。" + +#: ../../library/logging.config.rst:184 +msgid "" +"Stops the listening server which was created with a call to :func:`listen`. " +"This is typically called before calling :meth:`join` on the return value " +"from :func:`listen`." +msgstr "" +"停止通过对 :func:`listen` 的调用所创建的监听服务器。 此函数的调用通常会先于在 :func:`listen` 的返回值上调用 " +":meth:`join`。" + +#: ../../library/logging.config.rst:190 +msgid "Security considerations" +msgstr "安全考量" + +#: ../../library/logging.config.rst:192 +msgid "" +"The logging configuration functionality tries to offer convenience, and in " +"part this is done by offering the ability to convert text in configuration " +"files into Python objects used in logging configuration - for example, as " +"described in :ref:`logging-config-dict-userdef`. However, these same " +"mechanisms (importing callables from user-defined modules and calling them " +"with parameters from the configuration) could be used to invoke any code you" +" like, and for this reason you should treat configuration files from " +"untrusted sources with *extreme caution* and satisfy yourself that nothing " +"bad can happen if you load them, before actually loading them." +msgstr "" +"日志配置功能试图提供便利,从某种角度来说,这是通过将配置文件中的文本转换为日志配置中使用的 Python 对象来完成的 —— 如 " +":ref:`logging-config-dict-userdef` " +"中所述。但是,这些相同的机制(从用户定义的模块中导入可调用对象并使用配置中的参数调用它们)可用于调用您指定的任何代码,因此您应该*非常谨慎*地处理来自非信任源的配置文件。并且在实际加载前,您应该确信加载不会导致坏事情。" + +#: ../../library/logging.config.rst:206 +msgid "Configuration dictionary schema" +msgstr "配置字典架构" + +#: ../../library/logging.config.rst:208 +msgid "" +"Describing a logging configuration requires listing the various objects to " +"create and the connections between them; for example, you may create a " +"handler named 'console' and then say that the logger named 'startup' will " +"send its messages to the 'console' handler. These objects aren't limited to " +"those provided by the :mod:`logging` module because you might write your own" +" formatter or handler class. The parameters to these classes may also need " +"to include external objects such as ``sys.stderr``. The syntax for " +"describing these objects and connections is defined in :ref:`logging-config-" +"dict-connections` below." +msgstr "" +"描述日志记录配置需要列出要创建的不同对象及它们之间的连接;例如,你可以创建一个名为 'console' 的处理器,然后名为 'startup' " +"的日志记录器将可以把它的消息发送给 'console' 处理器。 这些对象并不仅限于 :mod:`logging` " +"模块所提供的对象,因为你还可以编写你自己的格式化或处理器类。 这些类的形参可能还需要包括 ``sys.stderr`` 这样的外部对象。 " +"描述这些对象和连接的语法会在下面的 :ref:`logging-config-dict-connections` 中定义。" + +#: ../../library/logging.config.rst:220 +msgid "Dictionary Schema Details" +msgstr "字典架构细节" + +#: ../../library/logging.config.rst:222 +msgid "" +"The dictionary passed to :func:`dictConfig` must contain the following keys:" +msgstr "传给 :func:`dictConfig` 的字典必须包含以下的键:" + +#: ../../library/logging.config.rst:225 +msgid "" +"*version* - to be set to an integer value representing the schema version. " +"The only valid value at present is 1, but having this key allows the schema " +"to evolve while still preserving backwards compatibility." +msgstr "*version* - 应设为代表架构版本的整数值。 目前唯一有效的值是 1,使用此键可允许架构在继续演化的同时保持向下兼容性。" + +#: ../../library/logging.config.rst:230 +msgid "" +"All other keys are optional, but if present they will be interpreted as " +"described below. In all cases below where a 'configuring dict' is " +"mentioned, it will be checked for the special ``'()'`` key to see if a " +"custom instantiation is required. If so, the mechanism described in " +":ref:`logging-config-dict-userdef` below is used to create an instance; " +"otherwise, the context is used to determine what to instantiate." +msgstr "" +"所有其他键都是可选项,但如存在它们将根据下面的描述来解读。 在下面提到 'configuring dict' 的所有情况下,都将检查它的特殊键 " +"``'()'`` 以确定是否需要自定义实例化。 如果需要,则会使用下面 :ref:`logging-config-dict-userdef` " +"所描述的机制来创建一个实例;否则,会使用上下文来确定要实例化的对象。" + +#: ../../library/logging.config.rst:237 +msgid "" +"*formatters* - the corresponding value will be a dict in which each key is a" +" formatter id and each value is a dict describing how to configure the " +"corresponding :class:`~logging.Formatter` instance." +msgstr "" +"*formatters* - 对应的值将是一个字典,其中每个键是一个格式器 ID 而每个值则是一个描述如何配置相应 " +":class:`~logging.Formatter` 实例的字典。" + +#: ../../library/logging.config.rst:241 +msgid "" +"The configuring dict is searched for keys ``format`` and ``datefmt`` (with " +"defaults of ``None``) and these are used to construct a " +":class:`~logging.Formatter` instance." +msgstr "" +"将在配置字典中搜索键 ``format`` 和 ``datefmt`` (默认值均为 ``None``) 并且这些键会被用于构造 " +":class:`~logging.Formatter` 实例。" + +#: ../../library/logging.config.rst:245 +msgid "" +"a ``validate`` key (with default of ``True``) can be added into the " +"``formatters`` section of the configuring dict, this is to validate the " +"format." +msgstr "" +"一个 ``validate`` 键 (默认值为 ``True``) 可被添加到配置字典的 ``formatters`` " +"部分,这会被用来验证格式的有效性。" + +#: ../../library/logging.config.rst:250 +msgid "" +"*filters* - the corresponding value will be a dict in which each key is a " +"filter id and each value is a dict describing how to configure the " +"corresponding Filter instance." +msgstr "*filters* - 对应的值将是一个字典,其中每个键是一个过滤器 ID 而每个值则是一个描述如何配置相应 Filter 实例的字典。" + +#: ../../library/logging.config.rst:254 +msgid "" +"The configuring dict is searched for the key ``name`` (defaulting to the " +"empty string) and this is used to construct a :class:`logging.Filter` " +"instance." +msgstr "将在配置字典中搜索键 ``name`` (默认值为空字符串) 并且该键会被用于构造 :class:`logging.Filter` 实例。" + +#: ../../library/logging.config.rst:258 +msgid "" +"*handlers* - the corresponding value will be a dict in which each key is a " +"handler id and each value is a dict describing how to configure the " +"corresponding Handler instance." +msgstr "" +"*handlers* - 对应的值将是一个字典,其中每个键是一个处理器 ID 而每个值则是一个描述如何配置相应 Handler 实例的字典。" + +#: ../../library/logging.config.rst:262 ../../library/logging.config.rst:304 +msgid "The configuring dict is searched for the following keys:" +msgstr "将在配置字典中搜索下列键:" + +#: ../../library/logging.config.rst:264 +msgid "" +"``class`` (mandatory). This is the fully qualified name of the handler " +"class." +msgstr "``class`` (强制)。 这是处理器类的完整限定名称。" + +#: ../../library/logging.config.rst:267 +msgid "``level`` (optional). The level of the handler." +msgstr "``level`` (可选)。 处理器的级别。" + +#: ../../library/logging.config.rst:269 +msgid "``formatter`` (optional). The id of the formatter for this handler." +msgstr "``formatter`` (可选)。 处理器所对应格式化器的 ID。" + +#: ../../library/logging.config.rst:272 +msgid "" +"``filters`` (optional). A list of ids of the filters for this handler." +msgstr "``filters`` (可选)。 由处理器所对应过滤器的 ID 组成的列表。" + +#: ../../library/logging.config.rst:275 +msgid "" +"All *other* keys are passed through as keyword arguments to the handler's " +"constructor. For example, given the snippet:" +msgstr "所有 *其他* 键会被作为关键字参数传递给处理器类的构造器。 例如,给定如下配置:" + +#: ../../library/logging.config.rst:294 +msgid "" +"the handler with id ``console`` is instantiated as a " +":class:`logging.StreamHandler`, using ``sys.stdout`` as the underlying " +"stream. The handler with id ``file`` is instantiated as a " +":class:`logging.handlers.RotatingFileHandler` with the keyword arguments " +"``filename='logconfig.log', maxBytes=1024, backupCount=3``." +msgstr "" +"ID 为 ``console`` 的处理器会被实例化为 :class:`logging.StreamHandler`,并使用 " +"``sys.stdout`` 作为下层流。 ID 为 ``file`` 的处理器会被实例化为 " +":class:`logging.handlers.RotatingFileHandler`,并附带关键字参数 " +"``filename='logconfig.log', maxBytes=1024, backupCount=3``。" + +#: ../../library/logging.config.rst:300 +msgid "" +"*loggers* - the corresponding value will be a dict in which each key is a " +"logger name and each value is a dict describing how to configure the " +"corresponding Logger instance." +msgstr "*loggers* - 对应的值将是一个字典,其中每个键是一个日志记录器名称而每个值则是一个描述如何配置相应 Logger 实例的字典。" + +#: ../../library/logging.config.rst:306 +msgid "``level`` (optional). The level of the logger." +msgstr "``level`` (可选)。 日志记录器的级别。" + +#: ../../library/logging.config.rst:308 +msgid "``propagate`` (optional). The propagation setting of the logger." +msgstr "``propagate`` (可选)。 日志记录器的传播设置。" + +#: ../../library/logging.config.rst:310 +msgid "``filters`` (optional). A list of ids of the filters for this logger." +msgstr "``filters`` (可选)。 由日志记录器对应过滤器的 ID 组成的列表。" + +#: ../../library/logging.config.rst:313 +msgid "" +"``handlers`` (optional). A list of ids of the handlers for this logger." +msgstr "``handlers`` (可选)。 由日志记录器对应处理器的 ID 组成的列表。" + +#: ../../library/logging.config.rst:316 +msgid "" +"The specified loggers will be configured according to the level, " +"propagation, filters and handlers specified." +msgstr "指定的记录器将根据指定的级别、传播、过滤器和处理器来配置。" + +#: ../../library/logging.config.rst:319 +msgid "" +"*root* - this will be the configuration for the root logger. Processing of " +"the configuration will be as for any logger, except that the ``propagate`` " +"setting will not be applicable." +msgstr "" +"*root* - 这将成为根日志记录器对应的配置。 配置的处理方式将与所有日志记录器一致,除了 ``propagate`` 设置将不可用之外。" + +#: ../../library/logging.config.rst:323 +msgid "" +"*incremental* - whether the configuration is to be interpreted as " +"incremental to the existing configuration. This value defaults to " +"``False``, which means that the specified configuration replaces the " +"existing configuration with the same semantics as used by the existing " +":func:`fileConfig` API." +msgstr "" +"*incremental* - 配置是否要被解读为在现有配置上新增。 该值默认为 ``False``,这意味着指定的配置将以与当前 " +":func:`fileConfig` API 所使用的相同语义来替代现有的配置。" + +#: ../../library/logging.config.rst:329 +msgid "" +"If the specified value is ``True``, the configuration is processed as " +"described in the section on :ref:`logging-config-dict-incremental`." +msgstr "" +"如果指定的值为 ``True``,配置会按照 :ref:`logging-config-dict-incremental` 部分所描述的方式来处理。" + +#: ../../library/logging.config.rst:332 +msgid "" +"*disable_existing_loggers* - whether any existing non-root loggers are to be" +" disabled. This setting mirrors the parameter of the same name in " +":func:`fileConfig`. If absent, this parameter defaults to ``True``. This " +"value is ignored if *incremental* is ``True``." +msgstr "" +"*disable_existing_loggers* - 是否要禁用任何现有的非根日志记录器。 该设置对应于 :func:`fileConfig` " +"中的同名形参。 如果省略,则此形参默认为 ``True``。 如果 *incremental* 为 ``True`` 则该省会被忽略。" + +#: ../../library/logging.config.rst:340 +msgid "Incremental Configuration" +msgstr "增量配置" + +#: ../../library/logging.config.rst:342 +msgid "" +"It is difficult to provide complete flexibility for incremental " +"configuration. For example, because objects such as filters and formatters " +"are anonymous, once a configuration is set up, it is not possible to refer " +"to such anonymous objects when augmenting a configuration." +msgstr "为增量配置提供完全的灵活性是很困难的。 例如,由于过滤器和格式化器这样的对象是匿名的,一旦完成配置,在增加配置时就不可能引用这些匿名对象。" + +#: ../../library/logging.config.rst:348 +msgid "" +"Furthermore, there is not a compelling case for arbitrarily altering the " +"object graph of loggers, handlers, filters, formatters at run-time, once a " +"configuration is set up; the verbosity of loggers and handlers can be " +"controlled just by setting levels (and, in the case of loggers, propagation " +"flags). Changing the object graph arbitrarily in a safe way is problematic " +"in a multi-threaded environment; while not impossible, the benefits are not " +"worth the complexity it adds to the implementation." +msgstr "" +"此外,一旦完成了配置,在运行时任意改变日志记录器、处理器、过滤器、格式化器的对象图就不是很有必要;日志记录器和处理器的详细程度只需通过设置级别即可实现控制(对于日志记录器则可设置传播旗标)。" +" 在多线程环境中以安全的方式任意改变对象图也许会导致问题;虽然并非不可能,但这样做的好处不足以抵销其所增加的实现复杂度。" + +#: ../../library/logging.config.rst:357 +msgid "" +"Thus, when the ``incremental`` key of a configuration dict is present and is" +" ``True``, the system will completely ignore any ``formatters`` and " +"``filters`` entries, and process only the ``level`` settings in the " +"``handlers`` entries, and the ``level`` and ``propagate`` settings in the " +"``loggers`` and ``root`` entries." +msgstr "" +"这样,当配置字典的 ``incremental`` 键存在且为 ``True`` 时,系统将完全忽略任何 ``formatters`` 和 " +"``filters`` 条目,并仅会处理 ``handlers`` 条目中的 ``level`` 设置,以及 ``loggers`` 和 " +"``root`` 条目中的 ``level`` 和 ``propagate`` 设置。" + +#: ../../library/logging.config.rst:363 +msgid "" +"Using a value in the configuration dict lets configurations to be sent over " +"the wire as pickled dicts to a socket listener. Thus, the logging verbosity " +"of a long-running application can be altered over time with no need to stop " +"and restart the application." +msgstr "" +"使用配置字典中的值可让配置以封存字典对象的形式通过线路传送给套接字监听器。 " +"这样,长时间运行的应用程序的日志记录的详细程度可随时间改变而无须停止并重新启动应用程序。" + +#: ../../library/logging.config.rst:371 +msgid "Object connections" +msgstr "对象连接" + +#: ../../library/logging.config.rst:373 +msgid "" +"The schema describes a set of logging objects - loggers, handlers, " +"formatters, filters - which are connected to each other in an object graph." +" Thus, the schema needs to represent connections between the objects. For " +"example, say that, once configured, a particular logger has attached to it a" +" particular handler. For the purposes of this discussion, we can say that " +"the logger represents the source, and the handler the destination, of a " +"connection between the two. Of course in the configured objects this is " +"represented by the logger holding a reference to the handler. In the " +"configuration dict, this is done by giving each destination object an id " +"which identifies it unambiguously, and then using the id in the source " +"object's configuration to indicate that a connection exists between the " +"source and the destination object with that id." +msgstr "" +"该架构描述了一组日志记录对象 —— 日志记录器、处理器、格式化器、过滤器 —— 它们在对象图中彼此连接。 因此,该架构需要能表示对象之间的连接。 " +"例如,在配置完成后,一个特定的日志记录器关联到了一个特定的处理器。 " +"出于讨论的目的,我们可以说该日志记录器代表两者间连接的源头,而处理器则代表对应的目标。 当然在已配置对象中这是由包含对处理器的引用的日志记录器来代表的。" +" 在配置字典中,这是通过给每个目标对象一个 ID 来无歧义地标识它,然后在源头对象中使用该 ID 来实现的。" + +#: ../../library/logging.config.rst:387 +msgid "So, for example, consider the following YAML snippet:" +msgstr "因此,举例来说,考虑以下 YAML 代码段:" + +#: ../../library/logging.config.rst:408 +msgid "" +"(Note: YAML used here because it's a little more readable than the " +"equivalent Python source form for the dictionary.)" +msgstr "(注:这里使用 YAML 是因为它的可读性比表示字典的等价 Python 源码形式更好。)" + +#: ../../library/logging.config.rst:411 +msgid "" +"The ids for loggers are the logger names which would be used " +"programmatically to obtain a reference to those loggers, e.g. " +"``foo.bar.baz``. The ids for Formatters and Filters can be any string value" +" (such as ``brief``, ``precise`` above) and they are transient, in that they" +" are only meaningful for processing the configuration dictionary and used to" +" determine connections between objects, and are not persisted anywhere when " +"the configuration call is complete." +msgstr "" +"日志记录器 ID 就是日志记录器的名称,它会在程序中被用来获取对日志记录器的引用,例如 ``foo.bar.baz``。 格式化器和过滤器的 ID " +"可以是任意字符串值 (例如上面的 ``brief``, ``precise``) " +"并且它们是瞬态的,因为它们仅对处理配置字典有意义并会被用来确定对象之间的连接,而当配置调用完成时不会在任何地方保留。" + +#: ../../library/logging.config.rst:419 +msgid "" +"The above snippet indicates that logger named ``foo.bar.baz`` should have " +"two handlers attached to it, which are described by the handler ids ``h1`` " +"and ``h2``. The formatter for ``h1`` is that described by id ``brief``, and " +"the formatter for ``h2`` is that described by id ``precise``." +msgstr "" +"上面的代码片段指明名为 ``foo.bar.baz`` 的日志记录器应当关联到两个处理器,它们的 ID 是 ``h1`` 和 ``h2``。 " +"``h1`` 的格式化器的 ID 是 ``brief``,而 ``h2`` 的格式化器的 ID 是 ``precise``。" + +#: ../../library/logging.config.rst:429 +msgid "User-defined objects" +msgstr "用户定义对象" + +#: ../../library/logging.config.rst:431 +msgid "" +"The schema supports user-defined objects for handlers, filters and " +"formatters. (Loggers do not need to have different types for different " +"instances, so there is no support in this configuration schema for user-" +"defined logger classes.)" +msgstr "" +"此架构支持用户定义对象作为处理器、过滤器和格式化器。 (日志记录器的不同实例不需要具有不同类型,因此这个配置架构并不支持用户定义日志记录器类。)" + +#: ../../library/logging.config.rst:436 +msgid "" +"Objects to be configured are described by dictionaries which detail their " +"configuration. In some places, the logging system will be able to infer " +"from the context how an object is to be instantiated, but when a user-" +"defined object is to be instantiated, the system will not know how to do " +"this. In order to provide complete flexibility for user-defined object " +"instantiation, the user needs to provide a 'factory' - a callable which is " +"called with a configuration dictionary and which returns the instantiated " +"object. This is signalled by an absolute import path to the factory being " +"made available under the special key ``'()'``. Here's a concrete example:" +msgstr "" +"要配置的对象是由字典描述的,其中包含它们的配置详情。 " +"在某些地方,日志记录系统将能够从上下文中推断出如何实例化一个对象,但是当要实例化一个用户自定义对象时,系统将不知道要如何做。 " +"为了提供用户自定义对象实例化的完全灵活性,用户需要提供一个‘工厂’函数 —— 即在调用时传入配置字典并返回实例化对象的可调用对象。 这是用一个通过特殊键" +" ``'()'`` 来访问的工厂函数的绝对导入路径来标示的。 下面是一个实际的例子:" + +#: ../../library/logging.config.rst:462 +msgid "" +"The above YAML snippet defines three formatters. The first, with id " +"``brief``, is a standard :class:`logging.Formatter` instance with the " +"specified format string. The second, with id ``default``, has a longer " +"format and also defines the time format explicitly, and will result in a " +":class:`logging.Formatter` initialized with those two format strings. Shown" +" in Python source form, the ``brief`` and ``default`` formatters have " +"configuration sub-dictionaries::" +msgstr "" +"上面的 YAML 代码片段定义了三个格式化器。 第一个的 ID 为 ``brief``,是带有特殊格式字符串的标准 " +":class:`logging.Formatter` 实例。 第二个的 ID 为 " +"``default``,具有更长的格式同时还显式地定义了时间格式,并将最终实例化一个带有这两个格式字符串的 " +":class:`logging.Formatter`。 以 Python 源代码形式显示的 ``brief`` 和 ``default`` " +"格式化器分别具有下列配置子字典::" + +#: ../../library/logging.config.rst:474 +msgid "and::" +msgstr "和::" + +#: ../../library/logging.config.rst:481 +msgid "" +"respectively, and as these dictionaries do not contain the special key " +"``'()'``, the instantiation is inferred from the context: as a result, " +"standard :class:`logging.Formatter` instances are created. The " +"configuration sub-dictionary for the third formatter, with id ``custom``, " +"is::" +msgstr "" +"并且由于这些字典不包含特殊键 ``'()'``,实例化方式是从上下文中推断出来的:结果会创建标准的 :class:`logging.Formatter`" +" 实例。 第三个格式器的 ID 为 ``custom``,对应配置子字典为::" + +#: ../../library/logging.config.rst:494 +msgid "" +"and this contains the special key ``'()'``, which means that user-defined " +"instantiation is wanted. In this case, the specified factory callable will " +"be used. If it is an actual callable it will be used directly - otherwise, " +"if you specify a string (as in the example) the actual callable will be " +"located using normal import mechanisms. The callable will be called with the" +" **remaining** items in the configuration sub-dictionary as keyword " +"arguments. In the above example, the formatter with id ``custom`` will be " +"assumed to be returned by the call::" +msgstr "" +"并且它包含特殊键 ``'()'``,这意味着需要用户自定义实例化方式。 在此情况下,将使用指定的工厂可调用对象。 " +"如果它本身就是一个可调用对象则将被直接使用 —— 否则如果你指定了一个字符串(如这个例子所示)则将使用正常的导入机制来定位实例的可调用对象。 " +"调用该可调用对象将传入配置子字典中 **剩余的** 条目作为关键字参数。 在上面的例子中,调用将预期返回 ID 为 ``custom`` 的格式化器::" + +#: ../../library/logging.config.rst:506 +msgid "" +"The key ``'()'`` has been used as the special key because it is not a valid " +"keyword parameter name, and so will not clash with the names of the keyword " +"arguments used in the call. The ``'()'`` also serves as a mnemonic that the" +" corresponding value is a callable." +msgstr "" +"将 ``'()'`` 用作特殊键是因为它不是一个有效的关键字形参名称,这样就不会与调用中使用的关键字参数发生冲突。 ``'()'`` " +"还被用作表明对应值为可调用对象的助记符。" + +#: ../../library/logging.config.rst:515 +msgid "Access to external objects" +msgstr "访问外部对象" + +#: ../../library/logging.config.rst:517 +msgid "" +"There are times where a configuration needs to refer to objects external to " +"the configuration, for example ``sys.stderr``. If the configuration dict is" +" constructed using Python code, this is straightforward, but a problem " +"arises when the configuration is provided via a text file (e.g. JSON, YAML)." +" In a text file, there is no standard way to distinguish ``sys.stderr`` " +"from the literal string ``'sys.stderr'``. To facilitate this distinction, " +"the configuration system looks for certain special prefixes in string values" +" and treat them specially. For example, if the literal string " +"``'ext://sys.stderr'`` is provided as a value in the configuration, then the" +" ``ext://`` will be stripped off and the remainder of the value processed " +"using normal import mechanisms." +msgstr "" +"有时一个配置需要引用配置以外的对象,例如 ``sys.stderr``。 如果配置字典是使用 Python " +"代码构造的,这会很直观,但是当配置是通过文本文件(例如 JSON, YAML)提供的时候就会引发问题。 在一个文本文件中,没有将 " +"``sys.stderr`` 与字符串字面值 ``'sys.stderr'`` 区分开来的标准方式。 " +"为了实现这种区分,配置系统会在字符串值中查找规定的特殊前缀并对其做特殊处理。 例如,如果在配置中将字符串字面值 " +"``'ext://sys.stderr'`` 作为一个值来提供,则 ``ext://`` 将被去除而该值的剩余部分将使用正常导入机制来处理。" + +#: ../../library/logging.config.rst:530 +msgid "" +"The handling of such prefixes is done in a way analogous to protocol " +"handling: there is a generic mechanism to look for prefixes which match the " +"regular expression ``^(?P[a-z]+)://(?P.*)$`` whereby, if the" +" ``prefix`` is recognised, the ``suffix`` is processed in a prefix-dependent" +" manner and the result of the processing replaces the string value. If the " +"prefix is not recognised, then the string value will be left as-is." +msgstr "" +"此类前缀的处理方式类似于协议处理:存在一种通用机制来查找与正则表达式 ``^(?P[a-z]+)://(?P.*)$``" +" 相匹配的前缀,如果识别出了 ``prefix``,则 ``suffix`` 会以与前缀相对应的方式来处理并且处理的结果将替代原字符串值。 " +"如果未识别出前缀,则原字符串将保持不变。" + +#: ../../library/logging.config.rst:542 +msgid "Access to internal objects" +msgstr "访问内部对象" + +#: ../../library/logging.config.rst:544 +msgid "" +"As well as external objects, there is sometimes also a need to refer to " +"objects in the configuration. This will be done implicitly by the " +"configuration system for things that it knows about. For example, the " +"string value ``'DEBUG'`` for a ``level`` in a logger or handler will " +"automatically be converted to the value ``logging.DEBUG``, and the " +"``handlers``, ``filters`` and ``formatter`` entries will take an object id " +"and resolve to the appropriate destination object." +msgstr "" +"除了外部对象,有时还需要引用配置中的对象。 这将由配置系统针对它所了解的内容隐式地完成。 例如,在日志记录器或处理器中表示 ``level`` " +"的字符串值 ``'DEBUG'`` 将被自动转换为值 ``logging.DEBUG``,而 ``handlers``, ``filters`` 和 " +"``formatter`` 条目将接受一个对象 ID 并解析为适当的目标对象。" + +#: ../../library/logging.config.rst:552 +msgid "" +"However, a more generic mechanism is needed for user-defined objects which " +"are not known to the :mod:`logging` module. For example, consider " +":class:`logging.handlers.MemoryHandler`, which takes a ``target`` argument " +"which is another handler to delegate to. Since the system already knows " +"about this class, then in the configuration, the given ``target`` just needs" +" to be the object id of the relevant target handler, and the system will " +"resolve to the handler from the id. If, however, a user defines a " +"``my.package.MyHandler`` which has an ``alternate`` handler, the " +"configuration system would not know that the ``alternate`` referred to a " +"handler. To cater for this, a generic resolution system allows the user to " +"specify:" +msgstr "" +"但是,对于 :mod:`logging` 模块所不了解的用户自定义对象则需要一种更通用的机制。 例如,考虑 " +":class:`logging.handlers.MemoryHandler`,它接受一个 ``target`` 参数即其所委托的另一个处理器。 " +"由于系统已经知道存在该类,因而在配置中,给定的 ``target`` 只需为相应目标处理器的的对象 ID 即可,而系统将根据该 ID 解析出处理器。 " +"但是,如果用户定义了一个具有 ``alternate`` 处理器的 ``my.package.MyHandler``,则配置程序将不知道 " +"``alternate`` 指向的是一个处理器。 为了应对这种情况,通用解析系统允许用户指定:" + +#: ../../library/logging.config.rst:574 +msgid "" +"The literal string ``'cfg://handlers.file'`` will be resolved in an " +"analogous way to strings with the ``ext://`` prefix, but looking in the " +"configuration itself rather than the import namespace. The mechanism allows" +" access by dot or by index, in a similar way to that provided by " +"``str.format``. Thus, given the following snippet:" +msgstr "" +"字符串字面值 ``'cfg://handlers.file'`` 将按照与 ``ext://`` " +"前缀类似的方式被解析为结果字符串,但查找操作是在配置自身而不是在导入命名空间中进行。 该机制允许按点号或按索引来访问,与 ``str.format`` " +"所提供的方式类似。 这样,给定以下代码段:" + +#: ../../library/logging.config.rst:592 +msgid "" +"in the configuration, the string ``'cfg://handlers'`` would resolve to the " +"dict with key ``handlers``, the string ``'cfg://handlers.email`` would " +"resolve to the dict with key ``email`` in the ``handlers`` dict, and so on." +" The string ``'cfg://handlers.email.toaddrs[1]`` would resolve to " +"``'dev_team.domain.tld'`` and the string " +"``'cfg://handlers.email.toaddrs[0]'`` would resolve to the value " +"``'support_team@domain.tld'``. The ``subject`` value could be accessed using" +" either ``'cfg://handlers.email.subject'`` or, equivalently, " +"``'cfg://handlers.email[subject]'``. The latter form only needs to be used " +"if the key contains spaces or non-alphanumeric characters. If an index " +"value consists only of decimal digits, access will be attempted using the " +"corresponding integer value, falling back to the string value if needed." +msgstr "" +"在该配置中,字符串 ``'cfg://handlers'`` 将解析为带有 ``handlers`` 键的字典,字符串 " +"``'cfg://handlers.email`` 将解析为 ``handlers`` 字典中带有 ``email`` 键的字典,依此类推。 字符串 " +"``'cfg://handlers.email.toaddrs[1]`` 将解析为 ``'dev_team.domain.tld'`` 而字符串 " +"``'cfg://handlers.email.toaddrs[0]'`` 将解析为值 ``'support_team@domain.tld'``。 " +"``subject`` 值可以使用 ``'cfg://handlers.email.subject'`` 或者等价的 " +"``'cfg://handlers.email[subject]'`` 来访问。 后一种形式仅在键包含空格或非字母数字类字符的情况下才需要使用。 " +"如果一个索引仅由十进制数码构成,则将尝试使用相应的整数值来访问,如果有必要则将回退为字符串值。" + +#: ../../library/logging.config.rst:606 +msgid "" +"Given a string ``cfg://handlers.myhandler.mykey.123``, this will resolve to " +"``config_dict['handlers']['myhandler']['mykey']['123']``. If the string is " +"specified as ``cfg://handlers.myhandler.mykey[123]``, the system will " +"attempt to retrieve the value from " +"``config_dict['handlers']['myhandler']['mykey'][123]``, and fall back to " +"``config_dict['handlers']['myhandler']['mykey']['123']`` if that fails." +msgstr "" +"给定字符串 ``cfg://handlers.myhandler.mykey.123``,这将解析为 " +"``config_dict['handlers']['myhandler']['mykey']['123']``。 如果字符串被指定为 " +"``cfg://handlers.myhandler.mykey[123]``,系统将尝试从 " +"``config_dict['handlers']['myhandler']['mykey'][123]`` 中提取值,并在尝试失败时回退为 " +"``config_dict['handlers']['myhandler']['mykey']['123']``。" + +#: ../../library/logging.config.rst:618 +msgid "Import resolution and custom importers" +msgstr "导入解析与定制导入器" + +#: ../../library/logging.config.rst:620 +msgid "" +"Import resolution, by default, uses the builtin :func:`__import__` function " +"to do its importing. You may want to replace this with your own importing " +"mechanism: if so, you can replace the :attr:`importer` attribute of the " +":class:`DictConfigurator` or its superclass, the :class:`BaseConfigurator` " +"class. However, you need to be careful because of the way functions are " +"accessed from classes via descriptors. If you are using a Python callable to" +" do your imports, and you want to define it at class level rather than " +"instance level, you need to wrap it with :func:`staticmethod`. For example::" +msgstr "" +"导入解析默认使用内置的 :func:`__import__` 函数来执行导入。 你可能想要将其替换为你自己的导入机制:如果是这样的话,你可以替换 " +":class:`DictConfigurator` 或其超类 :class:`BaseConfigurator` 类的 :attr:`importer`" +" 属性。 但是你必须小心谨慎,因为函数是从类中通过描述器方式来访问的。 如果你使用 Python " +"可调用对象来执行导入,并且你希望在类层级而不是在实例层级上定义它,则你需要用 :func:`staticmethod` 来装饰它。 例如::" + +#: ../../library/logging.config.rst:635 +msgid "" +"You don't need to wrap with :func:`staticmethod` if you're setting the " +"import callable on a configurator *instance*." +msgstr "如果你是在一个配置器的 *实例* 上设置导入可调用对象则你不需要用 :func:`staticmethod` 来装饰。" + +#: ../../library/logging.config.rst:642 +msgid "Configuration file format" +msgstr "配置文件格式" + +#: ../../library/logging.config.rst:644 +msgid "" +"The configuration file format understood by :func:`fileConfig` is based on " +":mod:`configparser` functionality. The file must contain sections called " +"``[loggers]``, ``[handlers]`` and ``[formatters]`` which identify by name " +"the entities of each type which are defined in the file. For each such " +"entity, there is a separate section which identifies how that entity is " +"configured. Thus, for a logger named ``log01`` in the ``[loggers]`` " +"section, the relevant configuration details are held in a section " +"``[logger_log01]``. Similarly, a handler called ``hand01`` in the " +"``[handlers]`` section will have its configuration held in a section called " +"``[handler_hand01]``, while a formatter called ``form01`` in the " +"``[formatters]`` section will have its configuration specified in a section " +"called ``[formatter_form01]``. The root logger configuration must be " +"specified in a section called ``[logger_root]``." +msgstr "" +":func:`fileConfig` 所能理解的配置文件格式是基于 :mod:`configparser` 功能的。 该文件必须包含 " +"``[loggers]``, ``[handlers]`` 和 ``[formatters]`` 等小节,它们通过名称来标识文件中定义的每种类型的实体。" +" 对于每个这样的实体,都有单独的小节来标识实体的配置方式。 因此,对于 ``[loggers]`` 小节中名为 ``log01`` " +"的日志记录器,相应的配置详情保存在 ``[logger_log01]`` 小节中。 类似地,对于 ``[handlers]`` 小节中名为 " +"``hand01`` 的处理器,其配置将保存在名为 ``[handler_hand01]`` 的小节中,而对于 ``[formatters]`` " +"小节中名为 ``form01`` 的格式化器,其配置将在名为 ``[formatter_form01]`` 的小节中指定。 根日志记录器的配置必须在名为" +" ``[logger_root]`` 的小节中指定。" + +#: ../../library/logging.config.rst:659 +msgid "" +"The :func:`fileConfig` API is older than the :func:`dictConfig` API and does" +" not provide functionality to cover certain aspects of logging. For example," +" you cannot configure :class:`~logging.Filter` objects, which provide for " +"filtering of messages beyond simple integer levels, using " +":func:`fileConfig`. If you need to have instances of " +":class:`~logging.Filter` in your logging configuration, you will need to use" +" :func:`dictConfig`. Note that future enhancements to configuration " +"functionality will be added to :func:`dictConfig`, so it's worth considering" +" transitioning to this newer API when it's convenient to do so." +msgstr "" +":func:`fileConfig` API 比 :func:`dictConfig` API 更旧因而没有提供涵盖日志记录特定方面的功能。 " +"例如,你无法配置 :class:`~logging.Filter` 对象,该对象使用 :func:`fileConfig` " +"提供超出简单整数级别的消息过滤功能。 如果你想要在你的日志记录配置中包含 :class:`~logging.Filter` 的实例,你将必须使用 " +":func:`dictConfig`。 请注意未来还将向 :func:`dictConfig` " +"添加对配置功能的强化,因此值得考虑在方便的时候转换到这个新 API。" + +#: ../../library/logging.config.rst:669 +msgid "Examples of these sections in the file are given below." +msgstr "在文件中这些小节的例子如下所示。" + +#: ../../library/logging.config.rst:682 +msgid "" +"The root logger must specify a level and a list of handlers. An example of a" +" root logger section is given below." +msgstr "根日志记录器必须指定一个级别和一个处理器列表。 根日志小节的例子如下所示。" + +#: ../../library/logging.config.rst:691 +msgid "" +"The ``level`` entry can be one of ``DEBUG, INFO, WARNING, ERROR, CRITICAL`` " +"or ``NOTSET``. For the root logger only, ``NOTSET`` means that all messages " +"will be logged. Level values are :func:`eval`\\ uated in the context of the " +"``logging`` package's namespace." +msgstr "" +"``level`` 条目可以为 ``DEBUG, INFO, WARNING, ERROR, CRITICAL`` 或 ``NOTSET`` 之一。 " +"其中 ``NOTSET`` 仅适用于根日志记录器,表示将会记录所有消息。 级别值会在 ``logging`` 包命名空间的上下文中通过 " +":func:`eval` 来得出。" + +#: ../../library/logging.config.rst:696 +msgid "" +"The ``handlers`` entry is a comma-separated list of handler names, which " +"must appear in the ``[handlers]`` section. These names must appear in the " +"``[handlers]`` section and have corresponding sections in the configuration " +"file." +msgstr "``handlers`` 条目是以逗号分隔的处理器名称列表,它必须出现于 ``[handlers]`` 小节并且在配置文件中有相应的小节。" + +#: ../../library/logging.config.rst:701 +msgid "" +"For loggers other than the root logger, some additional information is " +"required. This is illustrated by the following example." +msgstr "对于根日志记录器以外的日志记录器,还需要某些附加信息。 下面的例子演示了这些信息。" + +#: ../../library/logging.config.rst:712 +msgid "" +"The ``level`` and ``handlers`` entries are interpreted as for the root " +"logger, except that if a non-root logger's level is specified as ``NOTSET``," +" the system consults loggers higher up the hierarchy to determine the " +"effective level of the logger. The ``propagate`` entry is set to 1 to " +"indicate that messages must propagate to handlers higher up the logger " +"hierarchy from this logger, or 0 to indicate that messages are **not** " +"propagated to handlers up the hierarchy. The ``qualname`` entry is the " +"hierarchical channel name of the logger, that is to say the name used by the" +" application to get the logger." +msgstr "" +"``level`` 和 ``handlers`` 条目的解释方式与根日志记录器的一致,不同之处在于如果一个非根日志记录器的级别被指定为 " +"``NOTSET``,则系统会咨询更高层级的日志记录器来确定该日志记录器的有效级别。 ``propagate`` 条目设为 1 " +"表示消息必须从此日志记录器传播到更高层级的处理器,设为 0 表示消息 **不会** 传播到更高层级的处理器。 ``qualname`` " +"条目是日志记录器的层级通道名称,也就是应用程序获取日志记录器所用的名称。" + +#: ../../library/logging.config.rst:721 +msgid "" +"Sections which specify handler configuration are exemplified by the " +"following." +msgstr "指定处理器配置的小节说明如下。" + +#: ../../library/logging.config.rst:731 +msgid "" +"The ``class`` entry indicates the handler's class (as determined by " +":func:`eval` in the ``logging`` package's namespace). The ``level`` is " +"interpreted as for loggers, and ``NOTSET`` is taken to mean 'log " +"everything'." +msgstr "" +"``class`` 条目指明处理器的类(由 ``logging`` 包命名空间中的 :func:`eval` 来确定)。 ``level`` " +"会以与日志记录器相同的方式来解读,``NOTSET`` 会被视为表示‘记录一切消息’。" + +#: ../../library/logging.config.rst:735 +msgid "" +"The ``formatter`` entry indicates the key name of the formatter for this " +"handler. If blank, a default formatter (``logging._defaultFormatter``) is " +"used. If a name is specified, it must appear in the ``[formatters]`` section" +" and have a corresponding section in the configuration file." +msgstr "" +"``formatter`` 条目指明此处理器的格式化器的键名称。 如为空白,则会使用默认的格式化器 " +"(``logging._defaultFormatter``)。 如果指定了名称,则它必须出现于 ``[formatters]`` " +"小节并且在配置文件中有相应的小节。" + +#: ../../library/logging.config.rst:740 +msgid "" +"The ``args`` entry, when :func:`eval`\\ uated in the context of the " +"``logging`` package's namespace, is the list of arguments to the constructor" +" for the handler class. Refer to the constructors for the relevant handlers," +" or to the examples below, to see how typical entries are constructed. If " +"not provided, it defaults to ``()``." +msgstr "" +"``args`` 条目,当在 ``logging`` 包命名空间的上下文中执行 :func:`eval` 时将是传给处理器类构造器的参数列表。 " +"请参阅相应处理器的构造器说明或者下面的示例,以了解典型的条目是如何构造的。 如果未提供,则默认为 ``()``。" + +#: ../../library/logging.config.rst:746 +msgid "" +"The optional ``kwargs`` entry, when :func:`eval`\\ uated in the context of " +"the ``logging`` package's namespace, is the keyword argument dict to the " +"constructor for the handler class. If not provided, it defaults to ``{}``." +msgstr "" +"可选的 ``kwargs`` 条目,当在 ``logging`` 包命名空间的上下文中执行 :func:`eval` " +"时将是传给处理器的构造器的关键字参数字典。 如果未提供,则默认为 ``{}``。" + +#: ../../library/logging.config.rst:803 +msgid "" +"Sections which specify formatter configuration are typified by the " +"following." +msgstr "指定格式化器配置的小节说明如下。" + +#: ../../library/logging.config.rst:812 +msgid "" +"The ``format`` entry is the overall format string, and the ``datefmt`` entry" +" is the :func:`strftime`\\ -compatible date/time format string. If empty, " +"the package substitutes something which is almost equivalent to specifying " +"the date format string ``'%Y-%m-%d %H:%M:%S'``. This format also specifies " +"milliseconds, which are appended to the result of using the above format " +"string, with a comma separator. An example time in this format is " +"``2003-01-23 00:29:50,411``." +msgstr "" +"``format`` 是整个格式字符串,而 ``datefmt`` 条目则是兼容 :func:`strftime` 的日期/时间格式字符串。 " +"如果为空,此包将替换任何接近于日期格式字符串 ``'%Y-%m-%d %H:%M:%S'`` 的内容。 " +"此格式还指定了毫秒,并使用逗号分隔符将其附加到结果当中。 此格式的时间示例如 ``2003-01-23 00:29:50,411``。" + +#: ../../library/logging.config.rst:819 +msgid "" +"The ``class`` entry is optional. It indicates the name of the formatter's " +"class (as a dotted module and class name.) This option is useful for " +"instantiating a :class:`~logging.Formatter` subclass. Subclasses of " +":class:`~logging.Formatter` can present exception tracebacks in an expanded " +"or condensed format." +msgstr "" +"``class`` 条目是可选的。 它指明格式化器类的名称(形式为带点号的模块名加类名。) 此选项适用于实例化 " +":class:`~logging.Formatter` 的子类。 :class:`~logging.Formatter` " +"的子类可通过扩展或收缩格式来显示异常回溯信息。" + +#: ../../library/logging.config.rst:827 +msgid "" +"Due to the use of :func:`eval` as described above, there are potential " +"security risks which result from using the :func:`listen` to send and " +"receive configurations via sockets. The risks are limited to where multiple " +"users with no mutual trust run code on the same machine; see the " +":func:`listen` documentation for more information." +msgstr "" +"由于如上所述使用了 :func:`eval`,因此使用 :func:`listen` 通过套接字来发送和接收配置会导致潜在的安全风险。 " +"此风险仅限于相互间没有信任的多个用户在同一台机器上运行代码的情况;请参阅 :func:`listen` 了解更多信息。" + +#: ../../library/logging.config.rst:836 +msgid "Module :mod:`logging`" +msgstr "模块 :mod:`logging`" + +#: ../../library/logging.config.rst:836 +msgid "API reference for the logging module." +msgstr "日志记录模块的 API 参考。" + +#: ../../library/logging.config.rst:838 +msgid "Module :mod:`logging.handlers`" +msgstr ":mod:`logging.handlers` 模块" + +#: ../../library/logging.config.rst:839 +msgid "Useful handlers included with the logging module." +msgstr "日志记录模块附带的有用处理器。" diff --git a/library/logging.handlers.po b/library/logging.handlers.po new file mode 100644 index 000000000..61692bd4f --- /dev/null +++ b/library/logging.handlers.po @@ -0,0 +1,1800 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) 2001-2024, Python Software Foundation +# This file is distributed under the same license as the Python package. +# FIRST AUTHOR , YEAR. +# +# Translators: +# Alpha Du , 2019 +# Zombie110year , 2019 +# ppcfish , 2019 +# Freesand Leo , 2022 +# Rafael Fontenelle , 2024 +# +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: Python 3.9\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2024-05-03 21:11+0000\n" +"PO-Revision-Date: 2017-02-16 23:17+0000\n" +"Last-Translator: Rafael Fontenelle , 2024\n" +"Language-Team: Chinese (China) (https://app.transifex.com/python-doc/teams/5390/zh_CN/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: zh_CN\n" +"Plural-Forms: nplurals=1; plural=0;\n" + +#: ../../library/logging.handlers.rst:2 +msgid ":mod:`logging.handlers` --- Logging handlers" +msgstr ":mod:`logging.handlers` --- 日志处理程序" + +#: ../../library/logging.handlers.rst:10 +msgid "**Source code:** :source:`Lib/logging/handlers.py`" +msgstr "**源代码:** :source:`Lib/logging/handlers.py`" + +#: ../../library/logging.handlers.rst:14 +msgid "" +"This page contains only reference information. For tutorials, please see" +msgstr "此页面仅包含参考信息。有关教程,请参阅" + +#: ../../library/logging.handlers.rst:17 +msgid ":ref:`Basic Tutorial `" +msgstr ":ref:`基础教程 `" + +#: ../../library/logging.handlers.rst:18 +msgid ":ref:`Advanced Tutorial `" +msgstr ":ref:`进阶教程 `" + +#: ../../library/logging.handlers.rst:19 +msgid ":ref:`Logging Cookbook `" +msgstr ":ref:`日志记录操作手册 `" + +#: ../../library/logging.handlers.rst:25 +msgid "" +"The following useful handlers are provided in the package. Note that three " +"of the handlers (:class:`StreamHandler`, :class:`FileHandler` and " +":class:`NullHandler`) are actually defined in the :mod:`logging` module " +"itself, but have been documented here along with the other handlers." +msgstr "" +"这个包提供了以下有用的处理程序。 请注意有三个处理程序类 (:class:`StreamHandler`, :class:`FileHandler` 和" +" :class:`NullHandler`) 实际上是在 :mod:`logging` 模块本身定义的,但其文档与其他处理程序一同记录在此。" + +#: ../../library/logging.handlers.rst:33 +msgid "StreamHandler" +msgstr "StreamHandler" + +#: ../../library/logging.handlers.rst:35 +msgid "" +"The :class:`StreamHandler` class, located in the core :mod:`logging` " +"package, sends logging output to streams such as *sys.stdout*, *sys.stderr* " +"or any file-like object (or, more precisely, any object which supports " +":meth:`write` and :meth:`flush` methods)." +msgstr "" +":class:`StreamHandler` 类位于核心 :mod:`logging` 包,它可将日志记录输出发送到数据流例如 " +"*sys.stdout*, *sys.stderr* 或任何文件型对象(或者更精确地说,任何支持 :meth:`write` 和 " +":meth:`flush` 方法的对象)。" + +#: ../../library/logging.handlers.rst:43 +msgid "" +"Returns a new instance of the :class:`StreamHandler` class. If *stream* is " +"specified, the instance will use it for logging output; otherwise, " +"*sys.stderr* will be used." +msgstr "" +"返回一个新的 :class:`StreamHandler` 类。 如果指定了 *stream*,则实例将用它作为日志记录输出;在其他情况下将使用 " +"*sys.stderr*。" + +#: ../../library/logging.handlers.rst:50 +msgid "" +"If a formatter is specified, it is used to format the record. The record is " +"then written to the stream followed by :attr:`terminator`. If exception " +"information is present, it is formatted using " +":func:`traceback.print_exception` and appended to the stream." +msgstr "" +"如果指定了一个格式化器,它会被用来格式化记录。 随后记录会被写入到 :attr:`terminator` 之后的流中。 如果存在异常信息,则会使用 " +":func:`traceback.print_exception` 来格式化并添加到流中。" + +#: ../../library/logging.handlers.rst:58 +msgid "" +"Flushes the stream by calling its :meth:`flush` method. Note that the " +":meth:`close` method is inherited from :class:`~logging.Handler` and so does" +" no output, so an explicit :meth:`flush` call may be needed at times." +msgstr "" +"通过调用流的 :meth:`flush` 方法来刷新它。 请注意 :meth:`close` 方法是继承自 " +":class:`~logging.Handler` 的所以没有输出,因此有时可能需要显式地调用 :meth:`flush`。" + +#: ../../library/logging.handlers.rst:64 +msgid "" +"Sets the instance's stream to the specified value, if it is different. The " +"old stream is flushed before the new stream is set." +msgstr "将实例的流设为指定值,如果两者不一致的话。 旧的流会在设置新的流之前被刷新。" + +#: ../../library/logging.handlers.rst:0 ../../library/logging.handlers.rst:0 +#: ../../library/logging.handlers.rst:0 +msgid "Parameters" +msgstr "参数" + +#: ../../library/logging.handlers.rst:67 +msgid "The stream that the handler should use." +msgstr "处理程序应当使用的流。" + +#: ../../library/logging.handlers.rst:0 +msgid "Returns" +msgstr "返回" + +#: ../../library/logging.handlers.rst:69 +msgid "the old stream, if the stream was changed, or *None* if it wasn't." +msgstr "旧的流,如果流已被改变的话,如果未被改变则为 *None*。" + +#: ../../library/logging.handlers.rst:75 +msgid "" +"String used as the terminator when writing a formatted record to a stream. " +"Default value is ``'\\n'``." +msgstr "当将已格式化的记录写入到流时被用作终止符的字符串。 默认值为 ``'\\n'``。" + +#: ../../library/logging.handlers.rst:78 +msgid "" +"If you don't want a newline termination, you can set the handler instance's " +"``terminator`` attribute to the empty string." +msgstr "如果你不希望以换行符终止,你可以将处理程序类实例的 ``terminator`` 属性设为空字符串。" + +#: ../../library/logging.handlers.rst:81 +msgid "In earlier versions, the terminator was hardcoded as ``'\\n'``." +msgstr "在较早的版本中,终止符被硬编码为 ``'\\n'``。" + +#: ../../library/logging.handlers.rst:89 +msgid "FileHandler" +msgstr "FileHandler" + +#: ../../library/logging.handlers.rst:91 +msgid "" +"The :class:`FileHandler` class, located in the core :mod:`logging` package, " +"sends logging output to a disk file. It inherits the output functionality " +"from :class:`StreamHandler`." +msgstr "" +":class:`FileHandler` 类位于核心 :mod:`logging` 包,它可将日志记录输出到磁盘文件中。 它从 " +":class:`StreamHandler` 继承了输出功能。" + +#: ../../library/logging.handlers.rst:98 +msgid "" +"Returns a new instance of the :class:`FileHandler` class. The specified file" +" is opened and used as the stream for logging. If *mode* is not specified, " +":const:`'a'` is used. If *encoding* is not ``None``, it is used to open the" +" file with that encoding. If *delay* is true, then file opening is deferred" +" until the first call to :meth:`emit`. By default, the file grows " +"indefinitely. If *errors* is specified, it's used to determine how encoding " +"errors are handled." +msgstr "" +"返回一个 :class:`FileHandler` 类的新实例。 将打开指定的文件并将其用作日志记录流。 如果未指定 *mode*,则会使用 " +":const:`'a'`。 如果 *encoding* 不为 ``None``,则会将其用作打开文件的编码格式。 如果 *delay* " +"为真值,则文件打开会被推迟至第一次调用 :meth:`emit` 时。 默认情况下,文件会无限增长。 如果指定了 " +"*errors*,它会被用于确定编码格式错误的处理方式。" + +#: ../../library/logging.handlers.rst:105 +#: ../../library/logging.handlers.rst:187 +#: ../../library/logging.handlers.rst:335 +#: ../../library/logging.handlers.rst:441 +msgid "" +"As well as string values, :class:`~pathlib.Path` objects are also accepted " +"for the *filename* argument." +msgstr "除了字符串值,也接受 :class:`~pathlib.Path` 对象作为 *filename* 参数。" + +#: ../../library/logging.handlers.rst:109 +#: ../../library/logging.handlers.rst:191 +#: ../../library/logging.handlers.rst:339 +#: ../../library/logging.handlers.rst:445 +msgid "The *errors* parameter was added." +msgstr "增加了 *errors* 形参。" + +#: ../../library/logging.handlers.rst:114 +msgid "Closes the file." +msgstr "关闭文件。" + +#: ../../library/logging.handlers.rst:118 +msgid "Outputs the record to the file." +msgstr "将记录输出到文件。" + +#: ../../library/logging.handlers.rst:124 +msgid "NullHandler" +msgstr "NullHandler" + +#: ../../library/logging.handlers.rst:128 +msgid "" +"The :class:`NullHandler` class, located in the core :mod:`logging` package, " +"does not do any formatting or output. It is essentially a 'no-op' handler " +"for use by library developers." +msgstr "" +":class:`NullHandler` 类位于核心 :mod:`logging` 包,它不执行任何格式化或输出。 " +"它实际上是一个供库开发者使用的‘无操作’处理程序。" + +#: ../../library/logging.handlers.rst:134 +msgid "Returns a new instance of the :class:`NullHandler` class." +msgstr "返回一个 :class:`NullHandler` 类的新实例。" + +#: ../../library/logging.handlers.rst:138 +#: ../../library/logging.handlers.rst:142 +msgid "This method does nothing." +msgstr "此方法不执行任何操作。" + +#: ../../library/logging.handlers.rst:146 +msgid "" +"This method returns ``None`` for the lock, since there is no underlying I/O " +"to which access needs to be serialized." +msgstr "此方法会对锁返回 ``None``,因为没有下层 I/O 的访问需要被序列化。" + +#: ../../library/logging.handlers.rst:150 +msgid "" +"See :ref:`library-config` for more information on how to use " +":class:`NullHandler`." +msgstr "请参阅 :ref:`library-config` 了解有关如何使用 :class:`NullHandler` 的更多信息。" + +#: ../../library/logging.handlers.rst:156 +msgid "WatchedFileHandler" +msgstr "WatchedFileHandler" + +#: ../../library/logging.handlers.rst:160 +msgid "" +"The :class:`WatchedFileHandler` class, located in the " +":mod:`logging.handlers` module, is a :class:`FileHandler` which watches the " +"file it is logging to. If the file changes, it is closed and reopened using " +"the file name." +msgstr "" +":class:`WatchedFileHandler` 类位于 :mod:`logging.handlers` 模块,这个 " +":class:`FileHandler` 用于监视它所写入日志记录的文件。 如果文件发生变化,它会被关闭并使用文件名重新打开。" + +#: ../../library/logging.handlers.rst:164 +msgid "" +"A file change can happen because of usage of programs such as *newsyslog* " +"and *logrotate* which perform log file rotation. This handler, intended for " +"use under Unix/Linux, watches the file to see if it has changed since the " +"last emit. (A file is deemed to have changed if its device or inode have " +"changed.) If the file has changed, the old file stream is closed, and the " +"file opened to get a new stream." +msgstr "" +"发生文件更改可能是由于使用了执行文件轮换的程序例如 *newsyslog* 和 *logrotate*。 这个处理程序在 Unix/Linux " +"下使用,它会监视文件来查看自上次发出数据后是否有更改。 (如果文件的设备或 inode 发生变化就认为已被更改。) " +"如果文件被更改,则会关闭旧文件流,并再打开文件以获得新文件流。" + +#: ../../library/logging.handlers.rst:171 +msgid "" +"This handler is not appropriate for use under Windows, because under Windows" +" open log files cannot be moved or renamed - logging opens the files with " +"exclusive locks - and so there is no need for such a handler. Furthermore, " +"*ST_INO* is not supported under Windows; :func:`~os.stat` always returns " +"zero for this value." +msgstr "" +"这个处理程序不适合在 Windows 下使用,因为在 Windows 下打开的日志文件无法被移动或改名 —— 日志记录会使用排他的锁来打开文件 —— " +"因此这样的处理程序是没有必要的。 此外,*ST_INO* 在 Windows 下不受支持;:func:`~os.stat` 将总是为该值返回零。" + +#: ../../library/logging.handlers.rst:180 +msgid "" +"Returns a new instance of the :class:`WatchedFileHandler` class. The " +"specified file is opened and used as the stream for logging. If *mode* is " +"not specified, :const:`'a'` is used. If *encoding* is not ``None``, it is " +"used to open the file with that encoding. If *delay* is true, then file " +"opening is deferred until the first call to :meth:`emit`. By default, the " +"file grows indefinitely. If *errors* is provided, it determines how encoding" +" errors are handled." +msgstr "" +"返回一个 :class:`WatchedFileHandler` 类的新实例。 将打开指定的文件并将其用作日志记录流。 如果未指定 " +"*mode*,则会使用 :const:`'a'`。 如果 *encoding* 不为 ``None``,则会将其用作打开文件的编码格式。 如果 " +"*delay* 为真值,则文件打开会被推迟至第一次调用 :meth:`emit` 时。 默认情况下,文件会无限增长。 如果提供了 " +"*errors*,它会被用于确定编码格式错误的处理方式。" + +#: ../../library/logging.handlers.rst:196 +msgid "" +"Checks to see if the file has changed. If it has, the existing stream is " +"flushed and closed and the file opened again, typically as a precursor to " +"outputting the record to the file." +msgstr "检查文件是否已更改。 如果已更改,则会刷新并关闭现有流然后重新打开文件,这通常是将记录输出到文件的先导操作。" + +#: ../../library/logging.handlers.rst:205 +msgid "" +"Outputs the record to the file, but first calls :meth:`reopenIfNeeded` to " +"reopen the file if it has changed." +msgstr "将记录输出到文件,但如果文件已更改则会先调用 :meth:`reopenIfNeeded` 来重新打开它。" + +#: ../../library/logging.handlers.rst:211 +msgid "BaseRotatingHandler" +msgstr "BaseRotatingHandler" + +#: ../../library/logging.handlers.rst:213 +msgid "" +"The :class:`BaseRotatingHandler` class, located in the " +":mod:`logging.handlers` module, is the base class for the rotating file " +"handlers, :class:`RotatingFileHandler` and " +":class:`TimedRotatingFileHandler`. You should not need to instantiate this " +"class, but it has attributes and methods you may need to override." +msgstr "" +":class:`BaseRotatingHandler` 类位于 :mod:`logging.handlers` 模块中,它是轮换文件处理程序类 " +":class:`RotatingFileHandler` 和 :class:`TimedRotatingFileHandler` 的基类。 " +"你不需要实例化此类,但它具有你可能需要重写的属性和方法。" + +#: ../../library/logging.handlers.rst:221 +msgid "The parameters are as for :class:`FileHandler`. The attributes are:" +msgstr "类的形参与 :class:`FileHandler` 的相同。 其属性有:" + +#: ../../library/logging.handlers.rst:225 +msgid "" +"If this attribute is set to a callable, the :meth:`rotation_filename` method" +" delegates to this callable. The parameters passed to the callable are those" +" passed to :meth:`rotation_filename`." +msgstr "" +"如果此属性被设为一个可调用对象,则 :meth:`rotation_filename` 方法会委托给该可调用对象。 传给该可调用对象的形参与传给 " +":meth:`rotation_filename` 的相同。" + +#: ../../library/logging.handlers.rst:229 +msgid "" +"The namer function is called quite a few times during rollover, so it should" +" be as simple and as fast as possible. It should also return the same output" +" every time for a given input, otherwise the rollover behaviour may not work" +" as expected." +msgstr "" +"namer 函数会在轮换期间被多次调用,因此它应当尽可能的简单快速。 它还应当对给定的输入每次都返回相同的输出,否则轮换行为可能无法按预期工作。" + +#: ../../library/logging.handlers.rst:234 +msgid "" +"It's also worth noting that care should be taken when using a namer to " +"preserve certain attributes in the filename which are used during rotation. " +"For example, :class:`RotatingFileHandler` expects to have a set of log files" +" whose names contain successive integers, so that rotation works as " +"expected, and :class:`TimedRotatingFileHandler` deletes old log files (based" +" on the ``backupCount`` parameter passed to the handler's initializer) by " +"determining the oldest files to delete. For this to happen, the filenames " +"should be sortable using the date/time portion of the filename, and a namer " +"needs to respect this. (If a namer is wanted that doesn't respect this " +"scheme, it will need to be used in a subclass of " +":class:`TimedRotatingFileHandler` which overrides the " +":meth:`~TimedRotatingFileHandler.getFilesToDelete` method to fit in with the" +" custom naming scheme.)" +msgstr "" +"还有一点值得注意的是当使用命名器来保存文件名中要在轮换中使用的特定属性时必须小心处理。 例如,:class:`RotatingFileHandler` " +"会要求有一组名称中包含连续整数的日志文件,以便轮换的效果能满足预期,而 :class:`TimedRotatingFileHandler` " +"会通过确定要删除的最旧文件(根据传递纵使中处理器的初始化器的 ``backupCount`` 形参)来删除旧的日志文件。 " +"为了达成这样的效果,文件名应当是可以使用文件名的日期/时间部分来排序的,而且命名器需要遵循此排序。 (如果想使用不遵循此规则的命名器,则需要在一个重写了" +" :meth:`~TimedRotatingFileHandler.getFilesToDelete` 方法的 " +":class:`TimedRotatingFileHandler` 的子类中使用它以便与自定义的命名规则进行配合。)" + +#: ../../library/logging.handlers.rst:252 +msgid "" +"If this attribute is set to a callable, the :meth:`rotate` method delegates " +"to this callable. The parameters passed to the callable are those passed to" +" :meth:`rotate`." +msgstr "" +"如果此属性被设为一个可调用对象,则 :meth:`rotate` 方法会委托给该可调用对象。 传给该可调用对象的形参与传给 :meth:`rotate`" +" 的相同。" + +#: ../../library/logging.handlers.rst:260 +msgid "Modify the filename of a log file when rotating." +msgstr "当轮换时修改日志文件的文件名。" + +#: ../../library/logging.handlers.rst:262 +msgid "This is provided so that a custom filename can be provided." +msgstr "提供该属性以便可以提供自定义文件名。" + +#: ../../library/logging.handlers.rst:264 +msgid "" +"The default implementation calls the 'namer' attribute of the handler, if " +"it's callable, passing the default name to it. If the attribute isn't " +"callable (the default is ``None``), the name is returned unchanged." +msgstr "" +"默认实现会调用处理程序的 'namer' 属性,如果它是可调用对象的话,并传给它默认的名称。 如果该属性不是可调用对象 (默认值为 " +"``None``),则将名称原样返回。" + +#: ../../library/logging.handlers.rst:268 +msgid "The default name for the log file." +msgstr "日志文件的默认名称。" + +#: ../../library/logging.handlers.rst:275 +msgid "When rotating, rotate the current log." +msgstr "当执行轮换时,轮换当前日志。" + +#: ../../library/logging.handlers.rst:277 +msgid "" +"The default implementation calls the 'rotator' attribute of the handler, if " +"it's callable, passing the source and dest arguments to it. If the attribute" +" isn't callable (the default is ``None``), the source is simply renamed to " +"the destination." +msgstr "" +"默认实现会调用处理程序的 'rotator' 属性,如果它是可调用对象的话,并传给它 source 和 dest 参数。 如果该属性不是可调用对象 " +"(默认值为 ``None``),则将源简单地重命名为目标。" + +#: ../../library/logging.handlers.rst:282 +msgid "" +"The source filename. This is normally the base filename, e.g. 'test.log'." +msgstr "源文件名。 这通常为基本文件名,例如 'test.log'。" + +#: ../../library/logging.handlers.rst:284 +msgid "" +"The destination filename. This is normally what the source is rotated to, " +"e.g. 'test.log.1'." +msgstr "目标文件名。 这通常是源被轮换后的名称,例如 'test.log.1'。" + +#: ../../library/logging.handlers.rst:289 +msgid "" +"The reason the attributes exist is to save you having to subclass - you can " +"use the same callables for instances of :class:`RotatingFileHandler` and " +":class:`TimedRotatingFileHandler`. If either the namer or rotator callable " +"raises an exception, this will be handled in the same way as any other " +"exception during an :meth:`emit` call, i.e. via the :meth:`handleError` " +"method of the handler." +msgstr "" +"该属性存在的理由是让你不必进行子类化 —— 你可以使用与 :class:`RotatingFileHandler` 和 " +":class:`TimedRotatingFileHandler` 的实例相同的可调用对象。 如果 namer 或 rotator " +"可调用对象引发了异常,将会按照与 :meth:`emit` 调用期间的任何其他异常相同的方式来处理,例如通过处理程序的 " +":meth:`handleError` 方法。" + +#: ../../library/logging.handlers.rst:296 +msgid "" +"If you need to make more significant changes to rotation processing, you can" +" override the methods." +msgstr "如果你需要对轮换进程执行更多的修改,你可以重写这些方法。" + +#: ../../library/logging.handlers.rst:299 +msgid "For an example, see :ref:`cookbook-rotator-namer`." +msgstr "请参阅 :ref:`cookbook-rotator-namer` 获取具体示例。" + +#: ../../library/logging.handlers.rst:305 +msgid "RotatingFileHandler" +msgstr "RotatingFileHandler" + +#: ../../library/logging.handlers.rst:307 +msgid "" +"The :class:`RotatingFileHandler` class, located in the " +":mod:`logging.handlers` module, supports rotation of disk log files." +msgstr "" +":class:`RotatingFileHandler` 类位于 :mod:`logging.handlers` 模块,它支持磁盘日志文件的轮换。" + +#: ../../library/logging.handlers.rst:313 +msgid "" +"Returns a new instance of the :class:`RotatingFileHandler` class. The " +"specified file is opened and used as the stream for logging. If *mode* is " +"not specified, ``'a'`` is used. If *encoding* is not ``None``, it is used " +"to open the file with that encoding. If *delay* is true, then file opening " +"is deferred until the first call to :meth:`emit`. By default, the file " +"grows indefinitely. If *errors* is provided, it determines how encoding " +"errors are handled." +msgstr "" +"返回一个 :class:`RotatingFileHandler` 类的新实例。 将打开指定的文件并将其用作日志记录流。 如果未指定 " +"*mode*,则会使用 ``'a'``。 如果 *encoding* 不为 ``None``,则会将其用作打开文件的编码格式。 如果 *delay* " +"为真值,则文件打开会被推迟至第一次调用 :meth:`emit`。 默认情况下,文件会无限增长。 如果提供了 " +"*errors*,它会被用于确定编码格式错误的处理方式。" + +#: ../../library/logging.handlers.rst:320 +msgid "" +"You can use the *maxBytes* and *backupCount* values to allow the file to " +":dfn:`rollover` at a predetermined size. When the size is about to be " +"exceeded, the file is closed and a new file is silently opened for output. " +"Rollover occurs whenever the current log file is nearly *maxBytes* in " +"length; but if either of *maxBytes* or *backupCount* is zero, rollover never" +" occurs, so you generally want to set *backupCount* to at least 1, and have " +"a non-zero *maxBytes*. When *backupCount* is non-zero, the system will save " +"old log files by appending the extensions '.1', '.2' etc., to the filename. " +"For example, with a *backupCount* of 5 and a base file name of " +":file:`app.log`, you would get :file:`app.log`, :file:`app.log.1`, " +":file:`app.log.2`, up to :file:`app.log.5`. The file being written to is " +"always :file:`app.log`. When this file is filled, it is closed and renamed " +"to :file:`app.log.1`, and if files :file:`app.log.1`, :file:`app.log.2`, " +"etc. exist, then they are renamed to :file:`app.log.2`, :file:`app.log.3` " +"etc. respectively." +msgstr "" +"你可以使用 *maxBytes* 和 *backupCount* 值来允许文件以预定的大小执行 :dfn:`rollover`。 " +"当即将超出预定大小时,将关闭旧文件并打开一个新文件用于输出。 只要当前日志文件长度接近 *maxBytes* 就会发生轮换;但是如果 " +"*maxBytes* 或 *backupCount* 两者之一的值为零,就不会发生轮换,因此你通常要设置 *backupCount* 至少为 1,而 " +"*maxBytes* 不能为零。 当 *backupCount* 为非零值时,系统将通过为原文件名添加扩展名 '.1', '.2' 等来保存旧日志文件。" +" 例如,当 *backupCount* 为 5 而基本文件名为 :file:`app.log` 时,你将得到 :file:`app.log`, " +":file:`app.log.1`, :file:`app.log.2` 直至 :file:`app.log.5`。 当前被写入的文件总是 " +":file:`app.log`。 当此文件写满时,它会被关闭并重户名为 :file:`app.log.1`,而如果文件 " +":file:`app.log.1`, :file:`app.log.2` 等存在,则它们会被分别重命名为 :file:`app.log.2`, " +":file:`app.log.3` 等等。" + +#: ../../library/logging.handlers.rst:344 +#: ../../library/logging.handlers.rst:450 +msgid "Does a rollover, as described above." +msgstr "执行上文所描述的轮换。" + +#: ../../library/logging.handlers.rst:349 +msgid "" +"Outputs the record to the file, catering for rollover as described " +"previously." +msgstr "将记录输出到文件,以适应上文所描述的轮换。" + +#: ../../library/logging.handlers.rst:355 +msgid "TimedRotatingFileHandler" +msgstr "TimedRotatingFileHandler" + +#: ../../library/logging.handlers.rst:357 +msgid "" +"The :class:`TimedRotatingFileHandler` class, located in the " +":mod:`logging.handlers` module, supports rotation of disk log files at " +"certain timed intervals." +msgstr "" +":class:`TimedRotatingFileHandler` 类位于 :mod:`logging.handlers` " +"模块,它支持基于特定时间间隔的磁盘日志文件轮换。" + +#: ../../library/logging.handlers.rst:364 +msgid "" +"Returns a new instance of the :class:`TimedRotatingFileHandler` class. The " +"specified file is opened and used as the stream for logging. On rotating it " +"also sets the filename suffix. Rotating happens based on the product of " +"*when* and *interval*." +msgstr "" +"返回一个新的 :class:`TimedRotatingFileHandler` 类实例。 指定的文件会被打开并用作日志记录的流。 " +"对于轮换操作它还会设置文件名前缀。 轮换的发生是基于 *when* 和 *interval* 的积。" + +#: ../../library/logging.handlers.rst:369 +msgid "" +"You can use the *when* to specify the type of *interval*. The list of " +"possible values is below. Note that they are not case sensitive." +msgstr "你可以使用 *when* 来指定 *interval* 的类型。 可能的值列表如下。 请注意它们不是大小写敏感的。" + +#: ../../library/logging.handlers.rst:373 +msgid "Value" +msgstr "值" + +#: ../../library/logging.handlers.rst:373 +msgid "Type of interval" +msgstr "间隔类型" + +#: ../../library/logging.handlers.rst:373 +msgid "If/how *atTime* is used" +msgstr "如果/如何使用 *atTime*" + +#: ../../library/logging.handlers.rst:375 +msgid "``'S'``" +msgstr "``'S'``" + +#: ../../library/logging.handlers.rst:375 +msgid "Seconds" +msgstr "秒" + +#: ../../library/logging.handlers.rst:375 +#: ../../library/logging.handlers.rst:377 +#: ../../library/logging.handlers.rst:379 +#: ../../library/logging.handlers.rst:381 +msgid "Ignored" +msgstr "忽略" + +#: ../../library/logging.handlers.rst:377 +msgid "``'M'``" +msgstr "``'M'``" + +#: ../../library/logging.handlers.rst:377 +msgid "Minutes" +msgstr "分钟" + +#: ../../library/logging.handlers.rst:379 +msgid "``'H'``" +msgstr "``'H'``" + +#: ../../library/logging.handlers.rst:379 +msgid "Hours" +msgstr "小时" + +#: ../../library/logging.handlers.rst:381 +msgid "``'D'``" +msgstr "``'D'``" + +#: ../../library/logging.handlers.rst:381 +msgid "Days" +msgstr "天" + +#: ../../library/logging.handlers.rst:383 +msgid "``'W0'-'W6'``" +msgstr "``'W0'-'W6'``" + +#: ../../library/logging.handlers.rst:383 +msgid "Weekday (0=Monday)" +msgstr "工作日(0=星期一)" + +#: ../../library/logging.handlers.rst:383 +#: ../../library/logging.handlers.rst:386 +msgid "Used to compute initial rollover time" +msgstr "用于计算初始轮换时间" + +#: ../../library/logging.handlers.rst:386 +msgid "``'midnight'``" +msgstr "``'midnight'``" + +#: ../../library/logging.handlers.rst:386 +msgid "" +"Roll over at midnight, if *atTime* not specified, else at time *atTime*" +msgstr "如果未指定 *atTime* 则在午夜执行轮换,否则将使用 *atTime*。" + +#: ../../library/logging.handlers.rst:391 +msgid "" +"When using weekday-based rotation, specify 'W0' for Monday, 'W1' for " +"Tuesday, and so on up to 'W6' for Sunday. In this case, the value passed for" +" *interval* isn't used." +msgstr "" +"当使用基于星期的轮换时,星期一为 'W0',星期二为 'W1',以此类推直至星期日为 'W6'。 在这种情况下,传入的 *interval* " +"值不会被使用。" + +#: ../../library/logging.handlers.rst:395 +msgid "" +"The system will save old log files by appending extensions to the filename. " +"The extensions are date-and-time based, using the strftime format " +"``%Y-%m-%d_%H-%M-%S`` or a leading portion thereof, depending on the " +"rollover interval." +msgstr "" +"系统将通过为文件名添加扩展名来保存旧日志文件。 扩展名是基于日期和时间的,根据轮换间隔的长短使用 strftime 格式 " +"``%Y-%m-%d_%H-%M-%S`` 或是其中有变动的部分。" + +#: ../../library/logging.handlers.rst:400 +msgid "" +"When computing the next rollover time for the first time (when the handler " +"is created), the last modification time of an existing log file, or else the" +" current time, is used to compute when the next rotation will occur." +msgstr "当首次计算下次轮换的时间时(即当处理程序被创建时),现有日志文件的上次被修改时间或者当前时间会被用来计算下次轮换的发生时间。" + +#: ../../library/logging.handlers.rst:404 +msgid "" +"If the *utc* argument is true, times in UTC will be used; otherwise local " +"time is used." +msgstr "如果 *utc* 参数为真值,将使用 UTC 时间;否则会使用本地时间。" + +#: ../../library/logging.handlers.rst:407 +msgid "" +"If *backupCount* is nonzero, at most *backupCount* files will be kept, and " +"if more would be created when rollover occurs, the oldest one is deleted. " +"The deletion logic uses the interval to determine which files to delete, so " +"changing the interval may leave old files lying around." +msgstr "" +"如果 *backupCount* 不为零,则最多将保留 *backupCount* 个文件,而如果当轮换发生时创建了更多的文件,则最旧的文件会被删除。 " +"删除逻辑使用间隔时间来确定要删除的文件,因此改变间隔时间可能导致旧文件被继续保留。" + +#: ../../library/logging.handlers.rst:412 +msgid "" +"If *delay* is true, then file opening is deferred until the first call to " +":meth:`emit`." +msgstr "如果 *delay* 为真值,则会将文件打开延迟到首次调用 :meth:`emit` 的时候。" + +#: ../../library/logging.handlers.rst:415 +msgid "" +"If *atTime* is not ``None``, it must be a ``datetime.time`` instance which " +"specifies the time of day when rollover occurs, for the cases where rollover" +" is set to happen \"at midnight\" or \"on a particular weekday\". Note that " +"in these cases, the *atTime* value is effectively used to compute the " +"*initial* rollover, and subsequent rollovers would be calculated via the " +"normal interval calculation." +msgstr "" +"如果 *atTime* 不为 ``None``,则它必须是一个 ``datetime.time`` " +"的实例,该实例指定轮换在一天内的发生时间,用于轮换被设为“在午夜”或“在每星期的某一天”之类的情况。 请注意在这些情况下,*atTime* " +"值实际上会被用于计算 *初始* 轮换,而后续轮换将会通过正常的间隔时间计算来得出。" + +#: ../../library/logging.handlers.rst:422 +msgid "" +"If *errors* is specified, it's used to determine how encoding errors are " +"handled." +msgstr "如果指定了 *errors*,它会被用来确定编码错误的处理方式。" + +#: ../../library/logging.handlers.rst:425 +msgid "" +"Calculation of the initial rollover time is done when the handler is " +"initialised. Calculation of subsequent rollover times is done only when " +"rollover occurs, and rollover occurs only when emitting output. If this is " +"not kept in mind, it might lead to some confusion. For example, if an " +"interval of \"every minute\" is set, that does not mean you will always see " +"log files with times (in the filename) separated by a minute; if, during " +"application execution, logging output is generated more frequently than once" +" a minute, *then* you can expect to see log files with times separated by a " +"minute. If, on the other hand, logging messages are only output once every " +"five minutes (say), then there will be gaps in the file times corresponding " +"to the minutes where no output (and hence no rollover) occurred." +msgstr "" +"初始轮换时间的计算是在处理程序被初始化时执行的。 后续轮换时间的计算则仅在轮换发生时执行,而只有当提交输出时轮换才会发生。 " +"如果不记住这一点,你就可能会感到困惑。 " +"例如,如果设置时间间隔为“每分钟”,那并不意味着你总会看到(文件名中)带有间隔一分钟时间的日志文件;如果在应用程序执行期间,日志记录输出的生成频率高于每分钟一次,*那么*" +" 你可以预期看到间隔一分钟时间的日志文件。 " +"另一方面,如果(假设)日志记录消息每五分钟才输出一次,那么文件时间将会存在对应于没有输出(因而没有轮换)的缺失。" + +#: ../../library/logging.handlers.rst:438 +msgid "*atTime* parameter was added." +msgstr "添加了 *atTime* 形参。" + +#: ../../library/logging.handlers.rst:454 +msgid "" +"Outputs the record to the file, catering for rollover as described above." +msgstr "将记录输出到文件,以适应上文所描述的轮换。" + +#: ../../library/logging.handlers.rst:458 +msgid "" +"Returns a list of filenames which should be deleted as part of rollover. " +"These are the absolute paths of the oldest backup log files written by the " +"handler." +msgstr "返回由应当作为轮转的一部分被删除的文件名组成的列表。 它们是由处理程序写入的最旧的备份日志文件的绝对路径。" + +#: ../../library/logging.handlers.rst:464 +msgid "SocketHandler" +msgstr "SocketHandler" + +#: ../../library/logging.handlers.rst:466 +msgid "" +"The :class:`SocketHandler` class, located in the :mod:`logging.handlers` " +"module, sends logging output to a network socket. The base class uses a TCP " +"socket." +msgstr "" +":class:`SocketHandler` 类位于 :mod:`logging.handlers` 模块,它会将日志记录输出发送到网络套接字。 " +"基类所使用的是 TCP 套接字。" + +#: ../../library/logging.handlers.rst:472 +msgid "" +"Returns a new instance of the :class:`SocketHandler` class intended to " +"communicate with a remote machine whose address is given by *host* and " +"*port*." +msgstr "" +"返回一个 :class:`SocketHandler` 类的新实例,该实例旨在与使用 *host* 与 *port* 给定地址的远程主机进行通信。" + +#: ../../library/logging.handlers.rst:475 +msgid "" +"If ``port`` is specified as ``None``, a Unix domain socket is created using " +"the value in ``host`` - otherwise, a TCP socket is created." +msgstr "" +"如果 ``port`` 指定为 ``None``,会使用 ``host`` 中的值来创建一个 Unix 域套接字 —— 在其他情况下,则会创建一个 " +"TCP 套接字。" + +#: ../../library/logging.handlers.rst:481 +msgid "Closes the socket." +msgstr "关闭套接字。" + +#: ../../library/logging.handlers.rst:486 +msgid "" +"Pickles the record's attribute dictionary and writes it to the socket in " +"binary format. If there is an error with the socket, silently drops the " +"packet. If the connection was previously lost, re-establishes the " +"connection. To unpickle the record at the receiving end into a " +":class:`~logging.LogRecord`, use the :func:`~logging.makeLogRecord` " +"function." +msgstr "" +"对记录的属性字典执行封存并以二进制格式将其写入套接字。 如果套接字存在错误,则静默地丢弃数据包。 如果连接在此之前丢失,则重新建立连接。 " +"要在接收端将记录解封并输出到 :class:`~logging.LogRecord`,请使用 " +":func:`~logging.makeLogRecord` 函数。" + +#: ../../library/logging.handlers.rst:496 +msgid "" +"Handles an error which has occurred during :meth:`emit`. The most likely " +"cause is a lost connection. Closes the socket so that we can retry on the " +"next event." +msgstr "处理在 :meth:`emit` 期间发生的错误。 最可能的原因是连接丢失。 关闭套接字以便我们能在下次事件时重新尝试。" + +#: ../../library/logging.handlers.rst:503 +msgid "" +"This is a factory method which allows subclasses to define the precise type " +"of socket they want. The default implementation creates a TCP socket " +"(:const:`socket.SOCK_STREAM`)." +msgstr "" +"这是一个工厂方法,它允许子类定义它们想要的套接字的准确类型。 默认实现会创建一个 TCP 套接字 " +"(:const:`socket.SOCK_STREAM`)。" + +#: ../../library/logging.handlers.rst:510 +msgid "" +"Pickles the record's attribute dictionary in binary format with a length " +"prefix, and returns it ready for transmission across the socket. The details" +" of this operation are equivalent to::" +msgstr "将记录的属性字典封存为带有长度前缀的二进制格式,并将其返回以准备通过套接字进行传输。 此操作在细节上相当于::" + +#: ../../library/logging.handlers.rst:518 +msgid "" +"Note that pickles aren't completely secure. If you are concerned about " +"security, you may want to override this method to implement a more secure " +"mechanism. For example, you can sign pickles using HMAC and then verify them" +" on the receiving end, or alternatively you can disable unpickling of global" +" objects on the receiving end." +msgstr "" +"请注意封存操作不是绝对安全的。 如果你关心安全问题,你可能会想要重写此方法以实现更安全的机制。 例如,你可以使用 HMAC " +"对封存对象进行签名然后在接收端验证它们,或者你也可以在接收端禁用全局对象的解封操作。" + +#: ../../library/logging.handlers.rst:527 +msgid "" +"Send a pickled byte-string *packet* to the socket. The format of the sent " +"byte-string is as described in the documentation for " +":meth:`~SocketHandler.makePickle`." +msgstr "" +"将封存后的字节串 *packet* 发送到套接字。 所发送字节串的格式与 :meth:`~SocketHandler.makePickle` " +"文档中的描述一致。" + +#: ../../library/logging.handlers.rst:531 +msgid "" +"This function allows for partial sends, which can happen when the network is" +" busy." +msgstr "此函数允许部分发送,这可能会在网络繁忙时发生。" + +#: ../../library/logging.handlers.rst:537 +msgid "" +"Tries to create a socket; on failure, uses an exponential back-off " +"algorithm. On initial failure, the handler will drop the message it was " +"trying to send. When subsequent messages are handled by the same instance, " +"it will not try connecting until some time has passed. The default " +"parameters are such that the initial delay is one second, and if after that " +"delay the connection still can't be made, the handler will double the delay " +"each time up to a maximum of 30 seconds." +msgstr "" +"尝试创建一个套接字;失败时将使用指数化回退算法处理。 在失败初次发生时,处理程序将丢弃它正尝试发送的消息。 " +"当后续消息交由同一实例处理时,它将不会尝试连接直到经过一段时间以后。 " +"默认形参设置为初始延迟一秒,如果在延迟之后连接仍然无法建立,处理程序将每次把延迟翻倍直至达到 30 秒的最大值。" + +#: ../../library/logging.handlers.rst:545 +msgid "This behaviour is controlled by the following handler attributes:" +msgstr "此行为由下列处理程序属性控制:" + +#: ../../library/logging.handlers.rst:547 +msgid "``retryStart`` (initial delay, defaulting to 1.0 seconds)." +msgstr "``retryStart`` (初始延迟,默认为 1.0 秒)。" + +#: ../../library/logging.handlers.rst:548 +msgid "``retryFactor`` (multiplier, defaulting to 2.0)." +msgstr "``retryFactor`` (倍数,默认为 2.0)。" + +#: ../../library/logging.handlers.rst:549 +msgid "``retryMax`` (maximum delay, defaulting to 30.0 seconds)." +msgstr "``retryMax`` (最大延迟,默认为 30.0 秒)。" + +#: ../../library/logging.handlers.rst:551 +msgid "" +"This means that if the remote listener starts up *after* the handler has " +"been used, you could lose messages (since the handler won't even attempt a " +"connection until the delay has elapsed, but just silently drop messages " +"during the delay period)." +msgstr "" +"这意味着如果远程监听器在处理程序被使用 *之后* 启动,你可能会丢失消息(因为处理程序在延迟结束之前甚至不会尝试连接,而在延迟期间静默地丢弃消息)。" + +#: ../../library/logging.handlers.rst:560 +msgid "DatagramHandler" +msgstr "DatagramHandler" + +#: ../../library/logging.handlers.rst:562 +msgid "" +"The :class:`DatagramHandler` class, located in the :mod:`logging.handlers` " +"module, inherits from :class:`SocketHandler` to support sending logging " +"messages over UDP sockets." +msgstr "" +":class:`DatagramHandler` 类位于 :mod:`logging.handlers` 模块,它继承自 " +":class:`SocketHandler`,支持通过 UDP 套接字发送日志记录消息。" + +#: ../../library/logging.handlers.rst:569 +msgid "" +"Returns a new instance of the :class:`DatagramHandler` class intended to " +"communicate with a remote machine whose address is given by *host* and " +"*port*." +msgstr "" +"返回一个 :class:`DatagramHandler` 类的新实例,该实例旨在与使用 *host* 与 *port* 给定地址的远程主机进行通信。" + +#: ../../library/logging.handlers.rst:572 +msgid "" +"If ``port`` is specified as ``None``, a Unix domain socket is created using " +"the value in ``host`` - otherwise, a UDP socket is created." +msgstr "" +"如果 ``port`` 指定为 ``None``,会使用 ``host`` 中的值来创建一个 Unix 域套接字 —— 在其他情况下,则会创建一个 " +"UDP 套接字。" + +#: ../../library/logging.handlers.rst:578 +msgid "" +"Pickles the record's attribute dictionary and writes it to the socket in " +"binary format. If there is an error with the socket, silently drops the " +"packet. To unpickle the record at the receiving end into a " +":class:`~logging.LogRecord`, use the :func:`~logging.makeLogRecord` " +"function." +msgstr "" +"对记录的属性字典执行封存并以二进制格式将其写入套接字。 如果套接字存在错误,则静默地丢弃数据包。 要在接收端将记录解封并输出到 " +":class:`~logging.LogRecord`,请使用 :func:`~logging.makeLogRecord` 函数。" + +#: ../../library/logging.handlers.rst:587 +msgid "" +"The factory method of :class:`SocketHandler` is here overridden to create a " +"UDP socket (:const:`socket.SOCK_DGRAM`)." +msgstr "" +":class:`SocketHandler` 的工厂方法会在此被重写以创建一个 UDP 套接字 " +"(:const:`socket.SOCK_DGRAM`)。" + +#: ../../library/logging.handlers.rst:593 +msgid "" +"Send a pickled byte-string to a socket. The format of the sent byte-string " +"is as described in the documentation for :meth:`SocketHandler.makePickle`." +msgstr "将封存后的字节串发送到套接字。 所发送字节串的格式与 :meth:`SocketHandler.makePickle` 文档中的描述一致。" + +#: ../../library/logging.handlers.rst:600 +msgid "SysLogHandler" +msgstr "SysLogHandler" + +#: ../../library/logging.handlers.rst:602 +msgid "" +"The :class:`SysLogHandler` class, located in the :mod:`logging.handlers` " +"module, supports sending logging messages to a remote or local Unix syslog." +msgstr "" +":class:`SysLogHandler` 类位于 :mod:`logging.handlers` 模块,它支持将日志记录消息发送到远程或本地 " +"Unix syslog。" + +#: ../../library/logging.handlers.rst:608 +msgid "" +"Returns a new instance of the :class:`SysLogHandler` class intended to " +"communicate with a remote Unix machine whose address is given by *address* " +"in the form of a ``(host, port)`` tuple. If *address* is not specified, " +"``('localhost', 514)`` is used. The address is used to open a socket. An " +"alternative to providing a ``(host, port)`` tuple is providing an address as" +" a string, for example '/dev/log'. In this case, a Unix domain socket is " +"used to send the message to the syslog. If *facility* is not specified, " +":const:`LOG_USER` is used. The type of socket opened depends on the " +"*socktype* argument, which defaults to :const:`socket.SOCK_DGRAM` and thus " +"opens a UDP socket. To open a TCP socket (for use with the newer syslog " +"daemons such as rsyslog), specify a value of :const:`socket.SOCK_STREAM`." +msgstr "" +"返回一个 :class:`SysLogHandler` 类的新实例用来与通过 *address* 以 ``(host, port)`` " +"元组形式给出地址的远程 Unix 机器进行通讯。 如果未指定 *address*,则使用 ``('localhost', 514)``。 " +"该地址会被用于打开套接字。 提供 ``(host, port)`` 元组的一种替代方式是提供字符串形式的地址,例如 '/dev/log'。 " +"在这种情况下,会使用 Unix 域套接字将消息发送到 syslog。 如果未指定 *facility*,则使用 :const:`LOG_USER`。 " +"打开的套接字类型取决于 *socktype* 参数,该参数的默认值为 :const:`socket.SOCK_DGRAM` 即打开一个 UDP 套接字。" +" 要打开一个 TCP 套接字(用来配合较新的 syslog 守护程序例如 rsyslog 使用),请指定值为 " +":const:`socket.SOCK_STREAM`。" + +#: ../../library/logging.handlers.rst:620 +msgid "" +"Note that if your server is not listening on UDP port 514, " +":class:`SysLogHandler` may appear not to work. In that case, check what " +"address you should be using for a domain socket - it's system dependent. For" +" example, on Linux it's usually '/dev/log' but on OS/X it's " +"'/var/run/syslog'. You'll need to check your platform and use the " +"appropriate address (you may need to do this check at runtime if your " +"application needs to run on several platforms). On Windows, you pretty much " +"have to use the UDP option." +msgstr "" +"请注意如果你的服务器不是在 UDP 端口 514 上进行侦听,则 :class:`SysLogHandler` 可能无法正常工作。 " +"在这种情况下,请检查你应当为域套接字所使用的地址 —— 它依赖于具体的系统。 例如,在 Linux 上通常为 '/dev/log' 而在 OS/X " +"上则为 '/var/run/syslog'。 " +"你需要检查你的系统平台并使用适当的地址(如果你的应用程序需要在多个平台上运行则可能需要在运行时进行这样的检查)。 在 Windows " +"上,你大概必须要使用 UDP 选项。" + +#: ../../library/logging.handlers.rst:629 +msgid "*socktype* was added." +msgstr "添加了 *socktype*。" + +#: ../../library/logging.handlers.rst:635 +msgid "Closes the socket to the remote host." +msgstr "关闭连接远程主机的套接字。" + +#: ../../library/logging.handlers.rst:640 +msgid "" +"The record is formatted, and then sent to the syslog server. If exception " +"information is present, it is *not* sent to the server." +msgstr "记录会被格式化,然后发送到 syslog 服务器。 如果存在异常信息,则它 *不会* 被发送到服务器。" + +#: ../../library/logging.handlers.rst:643 +msgid "" +"(See: :issue:`12168`.) In earlier versions, the message sent to the syslog " +"daemons was always terminated with a NUL byte, because early versions of " +"these daemons expected a NUL terminated message - even though it's not in " +"the relevant specification (:rfc:`5424`). More recent versions of these " +"daemons don't expect the NUL byte but strip it off if it's there, and even " +"more recent daemons (which adhere more closely to RFC 5424) pass the NUL " +"byte on as part of the message." +msgstr "" +"(参见: :issue:`12168`。) 在较早的版本中,发送至 syslog 守护程序的消息总是以一个 NUL " +"字节结束,因为守护程序的早期版本期望接收一个以 NUL 结束的消息 —— 即使它不包含于对应的规范说明 (:rfc:`5424`)。 " +"这些守护程序的较新版本不再期望接收 NUL 字节,如果其存在则会将其去除,而最新的守护程序(更紧密地遵循 RFC 5424)会将 NUL " +"字节作为消息的一部分传递出去。" + +#: ../../library/logging.handlers.rst:652 +msgid "" +"To enable easier handling of syslog messages in the face of all these " +"differing daemon behaviours, the appending of the NUL byte has been made " +"configurable, through the use of a class-level attribute, ``append_nul``. " +"This defaults to ``True`` (preserving the existing behaviour) but can be set" +" to ``False`` on a ``SysLogHandler`` instance in order for that instance to " +"*not* append the NUL terminator." +msgstr "" +"为了在面对所有这些不同守护程序行为时能够更方便地处理 syslog 消息,通过使用类层级属性 ``append_nul``,添加 NUL " +"字节的操作已被作为可配置项。 该属性默认为 ``True`` (保留现有行为) 但可在 ``SysLogHandler`` 实例上设为 " +"``False`` 以便让实例 *不会* 添加 NUL 结束符。" + +#: ../../library/logging.handlers.rst:659 +msgid "" +"(See: :issue:`12419`.) In earlier versions, there was no facility for an " +"\"ident\" or \"tag\" prefix to identify the source of the message. This can " +"now be specified using a class-level attribute, defaulting to ``\"\"`` to " +"preserve existing behaviour, but which can be overridden on a " +"``SysLogHandler`` instance in order for that instance to prepend the ident " +"to every message handled. Note that the provided ident must be text, not " +"bytes, and is prepended to the message exactly as is." +msgstr "" +"(参见: :issue:`12419`。) 在较早的版本中,没有 \"ident\" 或 \"tag\" 前缀工具可以用来标识消息的来源。 " +"现在则可以使用一个类层级属性来设置它,该属性默认为 ``\"\"`` 表示保留现有行为,但可在 ``SysLogHandler`` " +"实例上重写以便让实例不会为所处理的每条消息添加标识。 请注意所提供的标识必须为文本而非字节串,并且它会被原封不动地添加到消息中。" + +#: ../../library/logging.handlers.rst:670 +msgid "" +"Encodes the facility and priority into an integer. You can pass in strings " +"or integers - if strings are passed, internal mapping dictionaries are used " +"to convert them to integers." +msgstr "将功能和优先级编码为一个整数。 你可以传入字符串或者整数 —— 如果传入的是字符串,则会使用内部的映射字典将其转换为整数。" + +#: ../../library/logging.handlers.rst:674 +msgid "" +"The symbolic ``LOG_`` values are defined in :class:`SysLogHandler` and " +"mirror the values defined in the ``sys/syslog.h`` header file." +msgstr "" +"符号 ``LOG_`` 的值在 :class:`SysLogHandler` 中定义并且是 ``sys/syslog.h`` 头文件中所定义值的镜像。" + +#: ../../library/logging.handlers.rst:677 +msgid "**Priorities**" +msgstr "**优先级**" + +#: ../../library/logging.handlers.rst:680 +#: ../../library/logging.handlers.rst:702 +msgid "Name (string)" +msgstr "名称(字符串)" + +#: ../../library/logging.handlers.rst:680 +#: ../../library/logging.handlers.rst:702 +msgid "Symbolic value" +msgstr "符号值" + +#: ../../library/logging.handlers.rst:682 +msgid "``alert``" +msgstr "``alert``" + +#: ../../library/logging.handlers.rst:682 +msgid "LOG_ALERT" +msgstr "LOG_ALERT" + +#: ../../library/logging.handlers.rst:684 +msgid "``crit`` or ``critical``" +msgstr "``crit`` 或 ``critical``" + +#: ../../library/logging.handlers.rst:684 +msgid "LOG_CRIT" +msgstr "LOG_CRIT" + +#: ../../library/logging.handlers.rst:686 +msgid "``debug``" +msgstr "``debug``" + +#: ../../library/logging.handlers.rst:686 +msgid "LOG_DEBUG" +msgstr "LOG_DEBUG" + +#: ../../library/logging.handlers.rst:688 +msgid "``emerg`` or ``panic``" +msgstr "``emerg`` 或 ``panic``" + +#: ../../library/logging.handlers.rst:688 +msgid "LOG_EMERG" +msgstr "LOG_EMERG" + +#: ../../library/logging.handlers.rst:690 +msgid "``err`` or ``error``" +msgstr "``err`` 或 ``error``" + +#: ../../library/logging.handlers.rst:690 +msgid "LOG_ERR" +msgstr "LOG_ERR" + +#: ../../library/logging.handlers.rst:692 +msgid "``info``" +msgstr "``info``" + +#: ../../library/logging.handlers.rst:692 +msgid "LOG_INFO" +msgstr "LOG_INFO" + +#: ../../library/logging.handlers.rst:694 +msgid "``notice``" +msgstr "``notice``" + +#: ../../library/logging.handlers.rst:694 +msgid "LOG_NOTICE" +msgstr "LOG_NOTICE" + +#: ../../library/logging.handlers.rst:696 +msgid "``warn`` or ``warning``" +msgstr "``warn`` 或 ``warning``" + +#: ../../library/logging.handlers.rst:696 +msgid "LOG_WARNING" +msgstr "LOG_WARNING" + +#: ../../library/logging.handlers.rst:699 +msgid "**Facilities**" +msgstr "**设备**" + +#: ../../library/logging.handlers.rst:704 +msgid "``auth``" +msgstr "``auth``" + +#: ../../library/logging.handlers.rst:704 +msgid "LOG_AUTH" +msgstr "LOG_AUTH" + +#: ../../library/logging.handlers.rst:706 +msgid "``authpriv``" +msgstr "``authpriv``" + +#: ../../library/logging.handlers.rst:706 +msgid "LOG_AUTHPRIV" +msgstr "LOG_AUTHPRIV" + +#: ../../library/logging.handlers.rst:708 +msgid "``cron``" +msgstr "``cron``" + +#: ../../library/logging.handlers.rst:708 +msgid "LOG_CRON" +msgstr "LOG_CRON" + +#: ../../library/logging.handlers.rst:710 +msgid "``daemon``" +msgstr "``daemon``" + +#: ../../library/logging.handlers.rst:710 +msgid "LOG_DAEMON" +msgstr "LOG_DAEMON" + +#: ../../library/logging.handlers.rst:712 +msgid "``ftp``" +msgstr "``ftp``" + +#: ../../library/logging.handlers.rst:712 +msgid "LOG_FTP" +msgstr "LOG_FTP" + +#: ../../library/logging.handlers.rst:714 +msgid "``kern``" +msgstr "``kern``" + +#: ../../library/logging.handlers.rst:714 +msgid "LOG_KERN" +msgstr "LOG_KERN" + +#: ../../library/logging.handlers.rst:716 +msgid "``lpr``" +msgstr "``lpr``" + +#: ../../library/logging.handlers.rst:716 +msgid "LOG_LPR" +msgstr "LOG_LPR" + +#: ../../library/logging.handlers.rst:718 +msgid "``mail``" +msgstr "``mail``" + +#: ../../library/logging.handlers.rst:718 +msgid "LOG_MAIL" +msgstr "LOG_MAIL" + +#: ../../library/logging.handlers.rst:720 +msgid "``news``" +msgstr "``news``" + +#: ../../library/logging.handlers.rst:720 +msgid "LOG_NEWS" +msgstr "LOG_NEWS" + +#: ../../library/logging.handlers.rst:722 +msgid "``syslog``" +msgstr "``syslog``" + +#: ../../library/logging.handlers.rst:722 +msgid "LOG_SYSLOG" +msgstr "LOG_SYSLOG" + +#: ../../library/logging.handlers.rst:724 +msgid "``user``" +msgstr "``user``" + +#: ../../library/logging.handlers.rst:724 +msgid "LOG_USER" +msgstr "LOG_USER" + +#: ../../library/logging.handlers.rst:726 +msgid "``uucp``" +msgstr "``uucp``" + +#: ../../library/logging.handlers.rst:726 +msgid "LOG_UUCP" +msgstr "LOG_UUCP" + +#: ../../library/logging.handlers.rst:728 +msgid "``local0``" +msgstr "``local0``" + +#: ../../library/logging.handlers.rst:728 +msgid "LOG_LOCAL0" +msgstr "LOG_LOCAL0" + +#: ../../library/logging.handlers.rst:730 +msgid "``local1``" +msgstr "``local1``" + +#: ../../library/logging.handlers.rst:730 +msgid "LOG_LOCAL1" +msgstr "LOG_LOCAL1" + +#: ../../library/logging.handlers.rst:732 +msgid "``local2``" +msgstr "``local2``" + +#: ../../library/logging.handlers.rst:732 +msgid "LOG_LOCAL2" +msgstr "LOG_LOCAL2" + +#: ../../library/logging.handlers.rst:734 +msgid "``local3``" +msgstr "``local3``" + +#: ../../library/logging.handlers.rst:734 +msgid "LOG_LOCAL3" +msgstr "LOG_LOCAL3" + +#: ../../library/logging.handlers.rst:736 +msgid "``local4``" +msgstr "``local4``" + +#: ../../library/logging.handlers.rst:736 +msgid "LOG_LOCAL4" +msgstr "LOG_LOCAL4" + +#: ../../library/logging.handlers.rst:738 +msgid "``local5``" +msgstr "``local5``" + +#: ../../library/logging.handlers.rst:738 +msgid "LOG_LOCAL5" +msgstr "LOG_LOCAL5" + +#: ../../library/logging.handlers.rst:740 +msgid "``local6``" +msgstr "``local6``" + +#: ../../library/logging.handlers.rst:740 +msgid "LOG_LOCAL6" +msgstr "LOG_LOCAL6" + +#: ../../library/logging.handlers.rst:742 +msgid "``local7``" +msgstr "``local7``" + +#: ../../library/logging.handlers.rst:742 +msgid "LOG_LOCAL7" +msgstr "LOG_LOCAL7" + +#: ../../library/logging.handlers.rst:747 +msgid "" +"Maps a logging level name to a syslog priority name. You may need to " +"override this if you are using custom levels, or if the default algorithm is" +" not suitable for your needs. The default algorithm maps ``DEBUG``, " +"``INFO``, ``WARNING``, ``ERROR`` and ``CRITICAL`` to the equivalent syslog " +"names, and all other level names to 'warning'." +msgstr "" +"将日志记录级别名称映射到 syslog 优先级名称。 如果你使用自定义级别,或者如果默认算法不适合你的需要,你可能需要重写此方法。 默认算法将 " +"``DEBUG``, ``INFO``, ``WARNING``, ``ERROR`` 和 ``CRITICAL`` 映射到等价的 syslog " +"名称,并将所有其他级别名称映射到 'warning'。" + +#: ../../library/logging.handlers.rst:757 +msgid "NTEventLogHandler" +msgstr "NTEventLogHandler" + +#: ../../library/logging.handlers.rst:759 +msgid "" +"The :class:`NTEventLogHandler` class, located in the :mod:`logging.handlers`" +" module, supports sending logging messages to a local Windows NT, Windows " +"2000 or Windows XP event log. Before you can use it, you need Mark Hammond's" +" Win32 extensions for Python installed." +msgstr "" +":class:`NTEventLogHandler` 类位于 :mod:`logging.handlers` 模块,它支持将日志记录消息发送到本地 " +"Windows NT, Windows 2000 或 Windows XP 事件日志。 在你使用它之前,你需要安装 Mark Hammond 的 " +"Python Win32 扩展。" + +#: ../../library/logging.handlers.rst:767 +msgid "" +"Returns a new instance of the :class:`NTEventLogHandler` class. The " +"*appname* is used to define the application name as it appears in the event " +"log. An appropriate registry entry is created using this name. The *dllname*" +" should give the fully qualified pathname of a .dll or .exe which contains " +"message definitions to hold in the log (if not specified, " +"``'win32service.pyd'`` is used - this is installed with the Win32 extensions" +" and contains some basic placeholder message definitions. Note that use of " +"these placeholders will make your event logs big, as the entire message " +"source is held in the log. If you want slimmer logs, you have to pass in the" +" name of your own .dll or .exe which contains the message definitions you " +"want to use in the event log). The *logtype* is one of ``'Application'``, " +"``'System'`` or ``'Security'``, and defaults to ``'Application'``." +msgstr "" +"返回一个 :class:`NTEventLogHandler` 类的新实例。 *appname* 用来定义出现在事件日志中的应用名称。 " +"将使用此名称创建适当的注册表条目。 *dllname* 应当给出要包含在日志中的消息定义的 .dll 或 .exe 的完整限定路径名称(如未指定则会使用" +" ``'win32service.pyd'`` —— 此文件随 Win32 扩展安装且包含一些基本的消息定义占位符。 " +"请注意使用这些占位符将使你的事件日志变得很大,因为整个消息源都会被放入日志。 " +"如果你希望有较小的日志,你必须自行传入包含你想要在事件日志中使用的消息定义的 .dll 或 .exe 名称)。 *logtype* 为 " +"``'Application'``, ``'System'`` 或 ``'Security'`` 之一,且默认值为 ``'Application'``。" + +#: ../../library/logging.handlers.rst:783 +msgid "" +"At this point, you can remove the application name from the registry as a " +"source of event log entries. However, if you do this, you will not be able " +"to see the events as you intended in the Event Log Viewer - it needs to be " +"able to access the registry to get the .dll name. The current version does " +"not do this." +msgstr "" +"这时,你就可以从注册表中移除作为事件日志条目来源的应用名称。 但是,如果你这样做,你将无法如你所预期的那样在事件日志查看器中看到这些事件 —— " +"它必须能访问注册表来获取 .dll 名称。 当前版本并不会这样做。" + +#: ../../library/logging.handlers.rst:792 +msgid "" +"Determines the message ID, event category and event type, and then logs the " +"message in the NT event log." +msgstr "确定消息 ID,事件类别和事件类型,然后将消息记录到 NT 事件日志中。" + +#: ../../library/logging.handlers.rst:798 +msgid "" +"Returns the event category for the record. Override this if you want to " +"specify your own categories. This version returns 0." +msgstr "返回记录的事件类别。 如果你希望指定你自己的类别就要重写此方法。 此版本将返回 0。" + +#: ../../library/logging.handlers.rst:804 +msgid "" +"Returns the event type for the record. Override this if you want to specify " +"your own types. This version does a mapping using the handler's typemap " +"attribute, which is set up in :meth:`__init__` to a dictionary which " +"contains mappings for :const:`DEBUG`, :const:`INFO`, :const:`WARNING`, " +":const:`ERROR` and :const:`CRITICAL`. If you are using your own levels, you " +"will either need to override this method or place a suitable dictionary in " +"the handler's *typemap* attribute." +msgstr "" +"返回记录的事件类型。 如果你希望指定你自己的类型就要重写此方法。 此版本将使用处理程序的 typemap 属性来执行映射,该属性在 " +":meth:`__init__` 被设置为一个字典,其中包含 :const:`DEBUG`, :const:`INFO`, " +":const:`WARNING`, :const:`ERROR` 和 :const:`CRITICAL` 的映射。 " +"如果你使用你自己的级别,你将需要重写此方法或者在处理程序的 *typemap* 属性中放置一个合适的字典。" + +#: ../../library/logging.handlers.rst:815 +msgid "" +"Returns the message ID for the record. If you are using your own messages, " +"you could do this by having the *msg* passed to the logger being an ID " +"rather than a format string. Then, in here, you could use a dictionary " +"lookup to get the message ID. This version returns 1, which is the base " +"message ID in :file:`win32service.pyd`." +msgstr "" +"返回记录的消息 ID。 如果你使用你自己的消息,你可以通过将 *msg* 传给日志记录器作为 ID 而非格式字符串实现此功能。 " +"然后,你可以在这里使用字典查找来获取消息 ID。 此版本将返回 1,是 :file:`win32service.pyd` 中的基本消息 ID。" + +#: ../../library/logging.handlers.rst:824 +msgid "SMTPHandler" +msgstr "SMTPHandler" + +#: ../../library/logging.handlers.rst:826 +msgid "" +"The :class:`SMTPHandler` class, located in the :mod:`logging.handlers` " +"module, supports sending logging messages to an email address via SMTP." +msgstr "" +":class:`SMTPHandler` 类位于 :mod:`logging.handlers` 模块,它支持将日志记录消息通过 SMTP " +"发送到一个电子邮件地址。" + +#: ../../library/logging.handlers.rst:832 +msgid "" +"Returns a new instance of the :class:`SMTPHandler` class. The instance is " +"initialized with the from and to addresses and subject line of the email. " +"The *toaddrs* should be a list of strings. To specify a non-standard SMTP " +"port, use the (host, port) tuple format for the *mailhost* argument. If you " +"use a string, the standard SMTP port is used. If your SMTP server requires " +"authentication, you can specify a (username, password) tuple for the " +"*credentials* argument." +msgstr "" +"返回一个 :class:`SMTPHandler` 类的新实例。 该实例使用电子邮件的发件人、收件人地址和主题行进行初始化。 *toaddrs* " +"应当为字符串列表。 要指定一个非标准 SMTP 端口,请使用 (host, port) 元组格式作为 *mailhost* 参数。 " +"如果你使用一个字符串,则会使用标准 SMTP 端口。 如果你的 SMTP 服务器要求验证,你可以指定一个 (username, password) " +"元组作为 *credentials* 参数。" + +#: ../../library/logging.handlers.rst:839 +msgid "" +"To specify the use of a secure protocol (TLS), pass in a tuple to the " +"*secure* argument. This will only be used when authentication credentials " +"are supplied. The tuple should be either an empty tuple, or a single-value " +"tuple with the name of a keyfile, or a 2-value tuple with the names of the " +"keyfile and certificate file. (This tuple is passed to the " +":meth:`smtplib.SMTP.starttls` method.)" +msgstr "" +"要指定使用安全协议 (TLS),请传入一个元组作为 *secure* 参数。 这将仅在提供了验证凭据时才能被使用。 " +"元组应当或是一个空元组,或是一个包含密钥文件名的单值元组,或是一个包含密钥文件和证书文件的 2 值元组。 (此元组会被传给 " +":meth:`smtplib.SMTP.starttls` 方法。)" + +#: ../../library/logging.handlers.rst:846 +msgid "" +"A timeout can be specified for communication with the SMTP server using the " +"*timeout* argument." +msgstr "可以使用 *timeout* 参数为与 SMTP 服务器的通信指定超时限制。" + +#: ../../library/logging.handlers.rst:849 +msgid "The *timeout* argument was added." +msgstr "增加了 *timeout* 参数。" + +#: ../../library/logging.handlers.rst:854 +msgid "Formats the record and sends it to the specified addressees." +msgstr "对记录执行格式化并将其发送到指定的地址。" + +#: ../../library/logging.handlers.rst:859 +msgid "" +"If you want to specify a subject line which is record-dependent, override " +"this method." +msgstr "如果你想要指定一个基于记录的主题行,请重写此方法。" + +#: ../../library/logging.handlers.rst:865 +msgid "MemoryHandler" +msgstr "MemoryHandler" + +#: ../../library/logging.handlers.rst:867 +msgid "" +"The :class:`MemoryHandler` class, located in the :mod:`logging.handlers` " +"module, supports buffering of logging records in memory, periodically " +"flushing them to a :dfn:`target` handler. Flushing occurs whenever the " +"buffer is full, or when an event of a certain severity or greater is seen." +msgstr "" +":class:`MemoryHandler` 类位于 :mod:`logging.handlers` 模块,它支持在内存中缓冲日志记录,并定期将其刷新到" +" :dfn:`target` 处理程序中。 刷新会在缓冲区满的时候,或是在遇到特定或更高严重程度事件的时候发生。" + +#: ../../library/logging.handlers.rst:872 +msgid "" +":class:`MemoryHandler` is a subclass of the more general " +":class:`BufferingHandler`, which is an abstract class. This buffers logging " +"records in memory. Whenever each record is added to the buffer, a check is " +"made by calling :meth:`shouldFlush` to see if the buffer should be flushed." +" If it should, then :meth:`flush` is expected to do the flushing." +msgstr "" +":class:`MemoryHandler` 是更通用的 :class:`BufferingHandler` 的子类,后者属于抽象类。 " +"它会在内存中缓冲日志记录。 当每条记录被添加到缓冲区时,会通过调用 :meth:`shouldFlush` 来检查缓冲区是否应当刷新。 " +"如果应当刷新,则要使用 :meth:`flush` 来执行刷新。" + +#: ../../library/logging.handlers.rst:881 +msgid "" +"Initializes the handler with a buffer of the specified capacity. Here, " +"*capacity* means the number of logging records buffered." +msgstr "使用指定容量的缓冲区初始化处理程序。 这里,*capacity* 是指缓冲的日志记录数量。" + +#: ../../library/logging.handlers.rst:887 +msgid "" +"Append the record to the buffer. If :meth:`shouldFlush` returns true, call " +":meth:`flush` to process the buffer." +msgstr "将记录添加到缓冲区。 如果 :meth:`shouldFlush` 返回真值,则会调用 :meth:`flush` 来处理缓冲区。" + +#: ../../library/logging.handlers.rst:893 +msgid "" +"You can override this to implement custom flushing behavior. This version " +"just zaps the buffer to empty." +msgstr "你可以重载此方法来实现自定义的刷新行为。 此版本只是将缓冲区清空。" + +#: ../../library/logging.handlers.rst:899 +msgid "" +"Return ``True`` if the buffer is up to capacity. This method can be " +"overridden to implement custom flushing strategies." +msgstr "如果缓冲区容量已满则返回 ``True``。 可以重写此方法以实现自定义的刷新策略。" + +#: ../../library/logging.handlers.rst:905 +msgid "" +"Returns a new instance of the :class:`MemoryHandler` class. The instance is " +"initialized with a buffer size of *capacity* (number of records buffered). " +"If *flushLevel* is not specified, :const:`ERROR` is used. If no *target* is " +"specified, the target will need to be set using :meth:`setTarget` before " +"this handler does anything useful. If *flushOnClose* is specified as " +"``False``, then the buffer is *not* flushed when the handler is closed. If " +"not specified or specified as ``True``, the previous behaviour of flushing " +"the buffer will occur when the handler is closed." +msgstr "" +"返回一个 :class:`MemoryHandler` 类的新实例。 该实例使用 *capacity* 指定的缓冲区大小(要缓冲的记录数量)来初始化。 " +"如果 *flushLevel* 未指定,则使用 :const:`ERROR`。 如果未指定 *target*,则需要在此处理程序执行任何实际操作之前使用" +" :meth:`setTarget` 来设置目标。 如果 *flushOnClose* 指定为 ``False``,则当处理程序被关闭时 *不会* " +"刷新缓冲区。 如果未指定或指定为 ``True``,则当处理程序被关闭时将会发生之前的缓冲区刷新行为。" + +#: ../../library/logging.handlers.rst:914 +msgid "The *flushOnClose* parameter was added." +msgstr "增加了 *flushOnClose* 形参。" + +#: ../../library/logging.handlers.rst:920 +msgid "" +"Calls :meth:`flush`, sets the target to ``None`` and clears the buffer." +msgstr "调用 :meth:`flush`,设置目标为 ``None`` 并清空缓冲区。" + +#: ../../library/logging.handlers.rst:926 +msgid "" +"For a :class:`MemoryHandler`, flushing means just sending the buffered " +"records to the target, if there is one. The buffer is also cleared when this" +" happens. Override if you want different behavior." +msgstr "" +"对于 :class:`MemoryHandler`,刷新是指将缓冲的记录发送到目标,如果存在目标的话。 当此行为发生时缓冲区也将被清空。 " +"如果你想要不同的行为请重载此方法。" + +#: ../../library/logging.handlers.rst:933 +msgid "Sets the target handler for this handler." +msgstr "设置此处理程序的目标处理程序。" + +#: ../../library/logging.handlers.rst:938 +msgid "Checks for buffer full or a record at the *flushLevel* or higher." +msgstr "检测缓冲区是否已满或是有记录为 *flushLevel* 或更高级别。" + +#: ../../library/logging.handlers.rst:944 +msgid "HTTPHandler" +msgstr "HTTPHandler" + +#: ../../library/logging.handlers.rst:946 +msgid "" +"The :class:`HTTPHandler` class, located in the :mod:`logging.handlers` " +"module, supports sending logging messages to a Web server, using either " +"``GET`` or ``POST`` semantics." +msgstr "" +":class:`HTTPHandler` 类位于 :mod:`logging.handlers` 模块,它支持使用 ``GET`` 或 ``POST``" +" 语义将日志记录消息发送到 Web 服务器。" + +#: ../../library/logging.handlers.rst:953 +msgid "" +"Returns a new instance of the :class:`HTTPHandler` class. The *host* can be " +"of the form ``host:port``, should you need to use a specific port number. " +"If no *method* is specified, ``GET`` is used. If *secure* is true, a HTTPS " +"connection will be used. The *context* parameter may be set to a " +":class:`ssl.SSLContext` instance to configure the SSL settings used for the " +"HTTPS connection. If *credentials* is specified, it should be a 2-tuple " +"consisting of userid and password, which will be placed in a HTTP " +"'Authorization' header using Basic authentication. If you specify " +"credentials, you should also specify secure=True so that your userid and " +"password are not passed in cleartext across the wire." +msgstr "" +"返回一个 :class:`HTTPHandler` 类的新实例。 *host* 可以为 ``host:port`` " +"的形式,如果你需要使用指定端口号的话。 如果没有指定 *method*,则会使用 ``GET``。 如果 *secure* 为真值,则将使用 HTTPS" +" 连接。 *context* 形参可以设为一个 :class:`ssl.SSLContext` 实例以配置用于 HTTPS 连接的 SSL 设置。 " +"如果指定了 *credentials*,它应当为包含 userid 和 password 的二元组,该元组将被放入使用 Basic 验证的 HTTP " +"'Authorization' 标头中。 如果你指定了 credentials,你还应当指定 secure=True 这样你的 userid 和 " +"password 就不会以明文在线路上传输。" + +#: ../../library/logging.handlers.rst:964 +msgid "The *context* parameter was added." +msgstr "增加了 *context* 形参。" + +#: ../../library/logging.handlers.rst:969 +msgid "" +"Provides a dictionary, based on ``record``, which is to be URL-encoded and " +"sent to the web server. The default implementation just returns " +"``record.__dict__``. This method can be overridden if e.g. only a subset of " +":class:`~logging.LogRecord` is to be sent to the web server, or if more " +"specific customization of what's sent to the server is required." +msgstr "" +"基于 ``record`` 提供一个字典,它将被执行 URL 编码并发送至 Web 服务器。 默认实现仅返回 ``record.__dict__``。 " +"在只需将 :class:`~logging.LogRecord` 的某个子集发送至 Web " +"服务器,或者需要对发送至服务器的内容进行更多定制时可以重写此方法。" + +#: ../../library/logging.handlers.rst:977 +msgid "" +"Sends the record to the Web server as a URL-encoded dictionary. The " +":meth:`mapLogRecord` method is used to convert the record to the dictionary " +"to be sent." +msgstr "将记录以经 URL 编码的形式发送至 Web 服务器。 会使用 :meth:`mapLogRecord` 方法来将要发送的记录转换为字典。" + +#: ../../library/logging.handlers.rst:981 +msgid "" +"Since preparing a record for sending it to a Web server is not the same as a" +" generic formatting operation, using :meth:`~logging.Handler.setFormatter` " +"to specify a :class:`~logging.Formatter` for a :class:`HTTPHandler` has no " +"effect. Instead of calling :meth:`~logging.Handler.format`, this handler " +"calls :meth:`mapLogRecord` and then :func:`urllib.parse.urlencode` to encode" +" the dictionary in a form suitable for sending to a Web server." +msgstr "" +"由于记录发送至 Web 服务器所需的预处理与通用的格式化操作不同,使用 :meth:`~logging.Handler.setFormatter` " +"来指定一个 :class:`~logging.Formatter` 用于 :class:`HTTPHandler` 是没有效果的。 此处理程序不会调用 " +":meth:`~logging.Handler.format`,而是调用 :meth:`mapLogRecord` 然后再调用 " +":func:`urllib.parse.urlencode` 来以适合发送至 Web 服务器的形式对字典进行编码。" + +#: ../../library/logging.handlers.rst:994 +msgid "QueueHandler" +msgstr "QueueHandler" + +#: ../../library/logging.handlers.rst:998 +msgid "" +"The :class:`QueueHandler` class, located in the :mod:`logging.handlers` " +"module, supports sending logging messages to a queue, such as those " +"implemented in the :mod:`queue` or :mod:`multiprocessing` modules." +msgstr "" +":class:`QueueHandler` 类位于 :mod:`logging.handlers` 模块,它支持将日志记录消息发送到一个队列,例如在 " +":mod:`queue` 或 :mod:`multiprocessing` 模块中实现的队列。" + +#: ../../library/logging.handlers.rst:1002 +msgid "" +"Along with the :class:`QueueListener` class, :class:`QueueHandler` can be " +"used to let handlers do their work on a separate thread from the one which " +"does the logging. This is important in Web applications and also other " +"service applications where threads servicing clients need to respond as " +"quickly as possible, while any potentially slow operations (such as sending " +"an email via :class:`SMTPHandler`) are done on a separate thread." +msgstr "" +"配合 :class:`QueueListener` 类使用,:class:`QueueHandler` " +"可用来使处理程序在与执行日志记录的线程不同的线程上完成工作。 这对 Web " +"应用程序以及其他服务于客户端的线程需要尽可能快地响应的服务应用程序来说很重要,任何潜在的慢速操作(例如通过 :class:`SMTPHandler` " +"发送邮件)都要在单独的线程上完成。" + +#: ../../library/logging.handlers.rst:1011 +msgid "" +"Returns a new instance of the :class:`QueueHandler` class. The instance is " +"initialized with the queue to send messages to. The *queue* can be any " +"queue-like object; it's used as-is by the :meth:`enqueue` method, which " +"needs to know how to send messages to it. The queue is not *required* to " +"have the task tracking API, which means that you can use " +":class:`~queue.SimpleQueue` instances for *queue*." +msgstr "" +"返回一个 :class:`QueueHandler` 类的新实例。 该实例使用队列来初始化以向其发送消息。 *queue* 可以为任何队列类对象;它由 " +":meth:`enqueue` 方法来使用,该方法需要知道如何向其发送消息。 队列 *不要求* 具有任务跟踪 API,这意味着你可以为 *queue* " +"使用 :class:`~queue.SimpleQueue` 实例。" + +#: ../../library/logging.handlers.rst:1021 +msgid "" +"Enqueues the result of preparing the LogRecord. Should an exception occur " +"(e.g. because a bounded queue has filled up), the " +":meth:`~logging.Handler.handleError` method is called to handle the error. " +"This can result in the record silently being dropped (if " +":attr:`logging.raiseExceptions` is ``False``) or a message printed to " +"``sys.stderr`` (if :attr:`logging.raiseExceptions` is ``True``)." +msgstr "" +"将准备 LogRecord 的结果排入队列。 如果发生了异常(例如由于有界队列已满),则会调用 " +":meth:`~logging.Handler.handleError` 方法来处理错误。 这可能导致记录被静默地丢弃 (如果 " +":attr:`logging.raiseExceptions` 为 ``False``) 或者消息被打印到 ``sys.stderr`` (如果 " +":attr:`logging.raiseExceptions` 为 ``True``)。" + +#: ../../library/logging.handlers.rst:1030 +msgid "" +"Prepares a record for queuing. The object returned by this method is " +"enqueued." +msgstr "准备用于队列的记录。 此方法返回的对象会被排入队列。" + +#: ../../library/logging.handlers.rst:1033 +msgid "" +"The base implementation formats the record to merge the message, arguments, " +"and exception information, if present. It also removes unpickleable items " +"from the record in-place." +msgstr "基本实现会格式化记录以合并消息、参数以及可能存在的异常信息。 它还会从记录中原地移除无法封存的条目。" + +#: ../../library/logging.handlers.rst:1037 +msgid "" +"You might want to override this method if you want to convert the record to " +"a dict or JSON string, or send a modified copy of the record while leaving " +"the original intact." +msgstr "如果你想要将记录转换为 dict 或 JSON 字符串,或者发送记录被修改后的副本而让初始记录保持原样,则你可能会想要重写此方法。" + +#: ../../library/logging.handlers.rst:1043 +msgid "" +"Enqueues the record on the queue using ``put_nowait()``; you may want to " +"override this if you want to use blocking behaviour, or a timeout, or a " +"customized queue implementation." +msgstr "使用 ``put_nowait()`` 将记录排入队列;如果你想要使用阻塞行为,或超时设置,或自定义的队列实现,则你可能会想要重写此方法。" + +#: ../../library/logging.handlers.rst:1052 +msgid "QueueListener" +msgstr "QueueListener" + +#: ../../library/logging.handlers.rst:1056 +msgid "" +"The :class:`QueueListener` class, located in the :mod:`logging.handlers` " +"module, supports receiving logging messages from a queue, such as those " +"implemented in the :mod:`queue` or :mod:`multiprocessing` modules. The " +"messages are received from a queue in an internal thread and passed, on the " +"same thread, to one or more handlers for processing. While " +":class:`QueueListener` is not itself a handler, it is documented here " +"because it works hand-in-hand with :class:`QueueHandler`." +msgstr "" +":class:`QueueListener` 类位于 :mod:`logging.handlers` 模块,它支持从一个队列接收日志记录消息,例如在 " +":mod:`queue` 或 :mod:`multiprocessing` 模块中实现的队列。 " +"消息是在内部线程中从队列接收并在同一线程上传递到一个或多个处理程序进行处理的。 尽管 :class:`QueueListener` " +"本身并不是一个处理程序,但由于它要与 :class:`QueueHandler` 配合工作,因此也在此处介绍。" + +#: ../../library/logging.handlers.rst:1064 +msgid "" +"Along with the :class:`QueueHandler` class, :class:`QueueListener` can be " +"used to let handlers do their work on a separate thread from the one which " +"does the logging. This is important in Web applications and also other " +"service applications where threads servicing clients need to respond as " +"quickly as possible, while any potentially slow operations (such as sending " +"an email via :class:`SMTPHandler`) are done on a separate thread." +msgstr "" +"配合 :class:`QueueHandler` 类使用,:class:`QueueListener` " +"可用来使处理程序在与执行日志记录的线程不同的线程上完成工作。 这对 Web " +"应用程序以及其他服务与客户端的线程需要尽可能快地响应的服务应用程序来说很重要,任何潜在的慢速动作(例如通过 :class:`SMTPHandler` " +"发送邮件)都要在单独的线程上完成。" + +#: ../../library/logging.handlers.rst:1073 +msgid "" +"Returns a new instance of the :class:`QueueListener` class. The instance is " +"initialized with the queue to send messages to and a list of handlers which " +"will handle entries placed on the queue. The queue can be any queue-like " +"object; it's passed as-is to the :meth:`dequeue` method, which needs to know" +" how to get messages from it. The queue is not *required* to have the task " +"tracking API (though it's used if available), which means that you can use " +":class:`~queue.SimpleQueue` instances for *queue*." +msgstr "" +"返回一个 :class:`QueueListener` 类的新实例。 " +"该实例初始化时要传入一个队列以向其发送消息,还要传入一个处理程序列表用来处理放置在队列中的条目。 队列可以是任何队列类对象;它会被原样传给 " +":meth:`dequeue` 方法,该方法需要知道如何从其获取消息。 队列 *不要求* 具有任务跟踪 API(但如提供则会使用它),这意味着你可以为 " +"*queue* 使用 :class:`~queue.SimpleQueue` 实例。" + +#: ../../library/logging.handlers.rst:1081 +msgid "" +"If ``respect_handler_level`` is ``True``, a handler's level is respected " +"(compared with the level for the message) when deciding whether to pass " +"messages to that handler; otherwise, the behaviour is as in previous Python " +"versions - to always pass each message to each handler." +msgstr "" +"如果 ``respect_handler_level`` 为 " +"``True``,则在决定是否将消息传递给处理程序之前会遵循处理程序的级别(与消息的级别进行比较);在其他情况下,其行为与之前的 Python 版本一致" +" —— 总是将每条消息传递给每个处理程序。" + +#: ../../library/logging.handlers.rst:1086 +msgid "The ``respect_handler_level`` argument was added." +msgstr "增加了 ``respect_handler_level`` 参数。" + +#: ../../library/logging.handlers.rst:1091 +msgid "Dequeues a record and return it, optionally blocking." +msgstr "从队列移出一条记录并将其返回,可以选择阻塞。" + +#: ../../library/logging.handlers.rst:1093 +msgid "" +"The base implementation uses ``get()``. You may want to override this method" +" if you want to use timeouts or work with custom queue implementations." +msgstr "基本实现使用 ``get()``。 如果你想要使用超时设置或自定义的队列实现,则你可能会想要重写此方法。" + +#: ../../library/logging.handlers.rst:1099 +msgid "Prepare a record for handling." +msgstr "准备一条要处理的记录。" + +#: ../../library/logging.handlers.rst:1101 +msgid "" +"This implementation just returns the passed-in record. You may want to " +"override this method if you need to do any custom marshalling or " +"manipulation of the record before passing it to the handlers." +msgstr "" +"该实现只是返回传入的记录。 如果你想要对记录执行任何自定义的 marshal 操作或在将其传给处理程序之前进行调整,则你可能会想要重写此方法。" + +#: ../../library/logging.handlers.rst:1107 +msgid "Handle a record." +msgstr "处理一条记录。" + +#: ../../library/logging.handlers.rst:1109 +msgid "" +"This just loops through the handlers offering them the record to handle. The" +" actual object passed to the handlers is that which is returned from " +":meth:`prepare`." +msgstr "此方法简单地循环遍历处理程序,向它们提供要处理的记录。 实际传给处理程序的对象就是从 :meth:`prepare` 返回的对象。" + +#: ../../library/logging.handlers.rst:1115 +msgid "Starts the listener." +msgstr "启动监听器。" + +#: ../../library/logging.handlers.rst:1117 +msgid "" +"This starts up a background thread to monitor the queue for LogRecords to " +"process." +msgstr "此方法启动一个后台线程来监视 LogRecords 队列以进行处理。" + +#: ../../library/logging.handlers.rst:1122 +msgid "Stops the listener." +msgstr "停止监听器。" + +#: ../../library/logging.handlers.rst:1124 +msgid "" +"This asks the thread to terminate, and then waits for it to do so. Note that" +" if you don't call this before your application exits, there may be some " +"records still left on the queue, which won't be processed." +msgstr "" +"此方法要求线程终止,然后等待它完成终止操作。 请注意在你的应用程序退出之前如果你没有调用此方法,则可能会有一些记录在留在队列中,它们将不会被处理。" + +#: ../../library/logging.handlers.rst:1130 +msgid "" +"Writes a sentinel to the queue to tell the listener to quit. This " +"implementation uses ``put_nowait()``. You may want to override this method " +"if you want to use timeouts or work with custom queue implementations." +msgstr "" +"将一个标记写入队列以通知监听器退出。 此实现会使用 ``put_nowait()``。 " +"如果你想要使得超时设置或自定义的队列实现,则你可能会想要重写此方法。" + +#: ../../library/logging.handlers.rst:1141 +msgid "Module :mod:`logging`" +msgstr "模块 :mod:`logging`" + +#: ../../library/logging.handlers.rst:1141 +msgid "API reference for the logging module." +msgstr "日志记录模块的 API 参考。" + +#: ../../library/logging.handlers.rst:1143 +msgid "Module :mod:`logging.config`" +msgstr ":mod:`logging.config` 模块" + +#: ../../library/logging.handlers.rst:1144 +msgid "Configuration API for the logging module." +msgstr "日志记录模块的配置 API 。" diff --git a/library/logging.po b/library/logging.po new file mode 100644 index 000000000..cb6f6606c --- /dev/null +++ b/library/logging.po @@ -0,0 +1,2256 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) 2001-2025, Python Software Foundation +# This file is distributed under the same license as the Python package. +# FIRST AUTHOR , YEAR. +# +# Translators: +# Yan Gao , 2018 +# Alpha Du , 2019 +# MuSheng Chen , 2019 +# Zombie110year , 2019 +# 1lin24 <1lin24@sina.com>, 2019 +# Shengjing Zhu , 2019 +# ppcfish , 2019 +# Leo Li , 2020 +# jaystone776 <1732865113@qq.com>, 2021 +# Freesand Leo , 2021 +# WH-2099 , 2022 +# Rafael Fontenelle , 2025 +# +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: Python 3.9\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2025-02-07 16:40+0000\n" +"PO-Revision-Date: 2017-02-16 23:17+0000\n" +"Last-Translator: Rafael Fontenelle , 2025\n" +"Language-Team: Chinese (China) (https://app.transifex.com/python-doc/teams/5390/zh_CN/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: zh_CN\n" +"Plural-Forms: nplurals=1; plural=0;\n" + +#: ../../library/logging.rst:2 +msgid ":mod:`logging` --- Logging facility for Python" +msgstr ":mod:`logging` --- Python 的日志记录工具" + +#: ../../library/logging.rst:10 +msgid "**Source code:** :source:`Lib/logging/__init__.py`" +msgstr "**源代码:** :source:`Lib/logging/__init__.py`" + +#: ../../library/logging.rst:16 +msgid "" +"This page contains the API reference information. For tutorial information " +"and discussion of more advanced topics, see" +msgstr "此页面仅包含 API 参考信息。教程信息和更多高级用法的讨论,请参阅" + +#: ../../library/logging.rst:19 +msgid ":ref:`Basic Tutorial `" +msgstr ":ref:`基础教程 `" + +#: ../../library/logging.rst:20 +msgid ":ref:`Advanced Tutorial `" +msgstr ":ref:`进阶教程 `" + +#: ../../library/logging.rst:21 +msgid ":ref:`Logging Cookbook `" +msgstr ":ref:`日志记录操作手册 `" + +#: ../../library/logging.rst:25 +msgid "" +"This module defines functions and classes which implement a flexible event " +"logging system for applications and libraries." +msgstr "这个模块为应用与库实现了灵活的事件日志系统的函数与类。" + +#: ../../library/logging.rst:28 +msgid "" +"The key benefit of having the logging API provided by a standard library " +"module is that all Python modules can participate in logging, so your " +"application log can include your own messages integrated with messages from " +"third-party modules." +msgstr "" +"使用标准库提供的 logging API 最主要的好处是,所有的 Python 模块都可能参与日志输出,包括你自己的日志消息和第三方模块的日志消息。" + +#: ../../library/logging.rst:33 +msgid "" +"The module provides a lot of functionality and flexibility. If you are " +"unfamiliar with logging, the best way to get to grips with it is to see the " +"tutorials (see the links on the right)." +msgstr "这个模块提供许多强大而灵活的功能。如果对 logging 不太熟悉, 掌握它最好的方式就是查看它对应的教程(详见右侧的链接)。" + +#: ../../library/logging.rst:37 +msgid "" +"The basic classes defined by the module, together with their functions, are " +"listed below." +msgstr "该模块定义的基础类和函数都列在下面。" + +#: ../../library/logging.rst:40 +msgid "Loggers expose the interface that application code directly uses." +msgstr "记录器暴露了应用程序代码直接使用的接口。" + +#: ../../library/logging.rst:41 +msgid "" +"Handlers send the log records (created by loggers) to the appropriate " +"destination." +msgstr "处理器将日志记录(由记录器创建)发送到适当的目标。" + +#: ../../library/logging.rst:43 +msgid "" +"Filters provide a finer grained facility for determining which log records " +"to output." +msgstr "过滤器提供了更细粒度的功能,用于确定要输出的日志记录。" + +#: ../../library/logging.rst:45 +msgid "Formatters specify the layout of log records in the final output." +msgstr "格式器指定最终输出中日志记录的样式。" + +#: ../../library/logging.rst:51 +msgid "Logger Objects" +msgstr "记录器对象" + +#: ../../library/logging.rst:53 +msgid "" +"Loggers have the following attributes and methods. Note that Loggers should" +" *NEVER* be instantiated directly, but always through the module-level " +"function ``logging.getLogger(name)``. Multiple calls to :func:`getLogger` " +"with the same name will always return a reference to the same Logger object." +msgstr "" +"记录器有以下的属性和方法。注意 *永远* 不要直接实例化记录器,应当通过模块级别的函数 ``logging.getLogger(name)`` " +"。多次使用相同的名字调用 :func:`getLogger` 会一直返回相同的 Logger 对象的引用。" + +#: ../../library/logging.rst:58 +msgid "" +"The ``name`` is potentially a period-separated hierarchical value, like " +"``foo.bar.baz`` (though it could also be just plain ``foo``, for example). " +"Loggers that are further down in the hierarchical list are children of " +"loggers higher up in the list. For example, given a logger with a name of " +"``foo``, loggers with names of ``foo.bar``, ``foo.bar.baz``, and ``foo.bam``" +" are all descendants of ``foo``. The logger name hierarchy is analogous to " +"the Python package hierarchy, and identical to it if you organise your " +"loggers on a per-module basis using the recommended construction " +"``logging.getLogger(__name__)``. That's because in a module, ``__name__`` " +"is the module's name in the Python package namespace." +msgstr "" +"``name`` 一般是句点分割的层级值, 像 ``foo.bar.baz`` (尽管也可以只是普通的 " +"``foo``)。层次结构列表中位于下方的记录器是列表中较高位置的记录器的子级。例如,有个名叫 ``foo`` 的记录器,而名字是 " +"``foo.bar``, ``foo.bar.baz``,和 ``foo.bam`` 的记录器都是 ``foo`` 的子级。记录器的名字分级类似 " +"Python 包的层级,如果您使用建议的结构 ``logging.getLogger(__name__)`` " +"在每个模块的基础上组织记录器,则与之完全相同。这是因为在模块里, ``__name__`` 是该模块在 Python 包命名空间中的名字。" + +#: ../../library/logging.rst:74 +msgid "" +"If this attribute evaluates to true, events logged to this logger will be " +"passed to the handlers of higher level (ancestor) loggers, in addition to " +"any handlers attached to this logger. Messages are passed directly to the " +"ancestor loggers' handlers - neither the level nor filters of the ancestor " +"loggers in question are considered." +msgstr "" +"如果这个属性为真,记录到这个记录器的事件除了会发送到此记录器的所有处理程序外,还会传递给更高级别(祖先)记录器的处理器,此外任何关联到这个记录器的处理器。消息会直接传递给祖先记录器的处理器" +" —— 不考虑祖先记录器的级别和过滤器。" + +#: ../../library/logging.rst:80 +msgid "" +"If this evaluates to false, logging messages are not passed to the handlers " +"of ancestor loggers." +msgstr "如果为假,记录消息将不会传递给当前记录器的祖先记录器的处理器。" + +#: ../../library/logging.rst:83 +msgid "" +"Spelling it out with an example: If the propagate attribute of the logger " +"named ``A.B.C`` evaluates to true, any event logged to ``A.B.C`` via a " +"method call such as ``logging.getLogger('A.B.C').error(...)`` will [subject " +"to passing that logger's level and filter settings] be passed in turn to any" +" handlers attached to loggers named ``A.B``, ``A`` and the root logger, " +"after first being passed to any handlers attached to ``A.B.C``. If any " +"logger in the chain ``A.B.C``, ``A.B``, ``A`` has its ``propagate`` " +"attribute set to false, then that is the last logger whose handlers are " +"offered the event to handle, and propagation stops at that point." +msgstr "" +"举例说明:如果名为 ``A.B.C`` 的记录器的传播属性求值为真,则任何通过调用诸如 " +"``logging.getLogger('A.B.C').error(...)`` 之类的方法记录到 ``A.B.C`` 的事件,在第一次被传递到 " +"``A.B.C`` 上附加的处理器后,将[取决于传递该记录器的级别和过滤器设置]依次传递给附加到名为 ``A.B``,``A`` " +"的记录器和根记录器的所有处理器。如果 ``A.B.C``、``A.B``、``A`` 组成的链中,任一记录器的 ``propagate`` " +"属性设置为假,那么这将是最后一个其处理器会收到事件的记录器,此后传播在该点停止。" + +#: ../../library/logging.rst:92 +msgid "The constructor sets this attribute to ``True``." +msgstr "构造器将这个属性初始化为 ``True``。" + +#: ../../library/logging.rst:94 +msgid "" +"If you attach a handler to a logger *and* one or more of its ancestors, it " +"may emit the same record multiple times. In general, you should not need to " +"attach a handler to more than one logger - if you just attach it to the " +"appropriate logger which is highest in the logger hierarchy, then it will " +"see all events logged by all descendant loggers, provided that their " +"propagate setting is left set to ``True``. A common scenario is to attach " +"handlers only to the root logger, and to let propagation take care of the " +"rest." +msgstr "" +"如果你将一个处理器附加到一个记录器 *和* 其一个或多个祖先记录器,它可能发出多次相同的记录。通常,您不需要将一个处理器附加到一个以上的记录器上 —— " +"如果您将它附加到记录器层次结构中最高的适当记录器上,则它将看到所有后代记录器记录的所有事件,前提是它们的传播设置保留为 " +"``True``。一种常见的方案是仅将处理器附加到根记录器,通过传播来处理其余部分。" + +#: ../../library/logging.rst:105 +msgid "" +"Sets the threshold for this logger to *level*. Logging messages which are " +"less severe than *level* will be ignored; logging messages which have " +"severity *level* or higher will be emitted by whichever handler or handlers " +"service this logger, unless a handler's level has been set to a higher " +"severity level than *level*." +msgstr "" +"给记录器设置阈值为 *level* 。日志等级小于 *level* 会被忽略。严重性为 *level* " +"或更高的日志消息将由该记录器的任何一个或多个处理器发出,除非将处理器的级别设置为比 *level* 更高的级别。" + +#: ../../library/logging.rst:110 +msgid "" +"When a logger is created, the level is set to :const:`NOTSET` (which causes " +"all messages to be processed when the logger is the root logger, or " +"delegation to the parent when the logger is a non-root logger). Note that " +"the root logger is created with level :const:`WARNING`." +msgstr "" +"创建记录器时,级别默认设置为 :const:`NOTSET` " +"(当记录器是根记录器时,将处理所有消息;如果记录器不是根记录器,则将委托给父级)。请注意,根记录器的默认级别为 :const:`WARNING` 。" + +#: ../../library/logging.rst:115 +msgid "" +"The term 'delegation to the parent' means that if a logger has a level of " +"NOTSET, its chain of ancestor loggers is traversed until either an ancestor " +"with a level other than NOTSET is found, or the root is reached." +msgstr "" +"委派给父级的意思是如果一个记录器的级别设置为 NOTSET,将遍历其祖先记录器,直到找到级别不是 NOTSET 的记录器,或者到根记录器为止。" + +#: ../../library/logging.rst:119 +msgid "" +"If an ancestor is found with a level other than NOTSET, then that ancestor's" +" level is treated as the effective level of the logger where the ancestor " +"search began, and is used to determine how a logging event is handled." +msgstr "如果发现某个父级的级别不是 NOTSET ,那么该父级的级别将被视为发起搜索的记录器的有效级别,并用于确定如何处理日志事件。" + +#: ../../library/logging.rst:123 +msgid "" +"If the root is reached, and it has a level of NOTSET, then all messages will" +" be processed. Otherwise, the root's level will be used as the effective " +"level." +msgstr "如果搜索到达根记录器,并且其级别为 NOTSET,则将处理所有消息。否则,将使用根记录器的级别作为有效级别。" + +#: ../../library/logging.rst:126 ../../library/logging.rst:435 +msgid "See :ref:`levels` for a list of levels." +msgstr "参见 :ref:`levels` 级别列表。" + +#: ../../library/logging.rst:128 +msgid "" +"The *level* parameter now accepts a string representation of the level such " +"as 'INFO' as an alternative to the integer constants such as :const:`INFO`. " +"Note, however, that levels are internally stored as integers, and methods " +"such as e.g. :meth:`getEffectiveLevel` and :meth:`isEnabledFor` will " +"return/expect to be passed integers." +msgstr "" +"现在 *level* 参数可以接受形如 'INFO' 的级别字符串表示形式,以代替形如 :const:`INFO` 的整数常量。 " +"但是请注意,级别在内部存储为整数,并且 :meth:`getEffectiveLevel` 和 :meth:`isEnabledFor` " +"等方法的传入/返回值也为整数。" + +#: ../../library/logging.rst:138 +msgid "" +"Indicates if a message of severity *level* would be processed by this " +"logger. This method checks first the module-level level set by " +"``logging.disable(level)`` and then the logger's effective level as " +"determined by :meth:`getEffectiveLevel`." +msgstr "" +"指示此记录器是否将处理级别为 *level* 的消息。此方法首先检查由 ``logging.disable(level)`` " +"设置的模块级的级别,然后检查由 :meth:`getEffectiveLevel` 确定的记录器的有效级别。" + +#: ../../library/logging.rst:146 +msgid "" +"Indicates the effective level for this logger. If a value other than " +":const:`NOTSET` has been set using :meth:`setLevel`, it is returned. " +"Otherwise, the hierarchy is traversed towards the root until a value other " +"than :const:`NOTSET` is found, and that value is returned. The value " +"returned is an integer, typically one of :const:`logging.DEBUG`, " +":const:`logging.INFO` etc." +msgstr "" +"指示此记录器的有效级别。如果通过 :meth:`setLevel` 设置了除 :const:`NOTSET` " +"以外的值,则返回该值。否则,将层次结构遍历到根,直到找到除 :const:`NOTSET` 以外的其他值,然后返回该值。返回的值是一个整数,通常为 " +":const:`logging.DEBUG`、 :const:`logging.INFO` 等等。" + +#: ../../library/logging.rst:156 +msgid "" +"Returns a logger which is a descendant to this logger, as determined by the " +"suffix. Thus, ``logging.getLogger('abc').getChild('def.ghi')`` would return " +"the same logger as would be returned by " +"``logging.getLogger('abc.def.ghi')``. This is a convenience method, useful " +"when the parent logger is named using e.g. ``__name__`` rather than a " +"literal string." +msgstr "" +"返回由后缀确定的该记录器的后代记录器。 因此,``logging.getLogger('abc').getChild('def.ghi')`` 与 " +"``logging.getLogger('abc.def.ghi')`` 将返回相同的记录器。 这是一个便捷方法,当使用如 ``__name__`` " +"而不是字符串字面值命名父记录器时很有用。" + +#: ../../library/logging.rst:167 +msgid "" +"Logs a message with level :const:`DEBUG` on this logger. The *msg* is the " +"message format string, and the *args* are the arguments which are merged " +"into *msg* using the string formatting operator. (Note that this means that " +"you can use keywords in the format string, together with a single dictionary" +" argument.) No % formatting operation is performed on *msg* when no *args* " +"are supplied." +msgstr "" +"在此记录器上记录 :const:`DEBUG` 级别的消息。 *msg* 是消息格式字符串,而 *args* 是用于字符串格式化操作合并到 *msg* " +"的参数。(请注意,这意味着您可以在格式字符串中使用关键字以及单个字典参数。)当未提供 *args* 时,不会对 *msg* 执行 % 格式化操作。" + +#: ../../library/logging.rst:173 +msgid "" +"There are four keyword arguments in *kwargs* which are inspected: " +"*exc_info*, *stack_info*, *stacklevel* and *extra*." +msgstr "" +"在 *kwargs* 中会检查四个关键字参数: *exc_info* ,*stack_info* ,*stacklevel* 和 *extra* 。" + +#: ../../library/logging.rst:176 +msgid "" +"If *exc_info* does not evaluate as false, it causes exception information to" +" be added to the logging message. If an exception tuple (in the format " +"returned by :func:`sys.exc_info`) or an exception instance is provided, it " +"is used; otherwise, :func:`sys.exc_info` is called to get the exception " +"information." +msgstr "" +"如果 *exc_info* 的求值结果不为 false ,则它将异常信息添加到日志消息中。如果提供了一个异常元组(按照 " +":func:`sys.exc_info` 返回的格式)或一个异常实例,则它将被使用;否则,调用 :func:`sys.exc_info` " +"以获取异常信息。" + +#: ../../library/logging.rst:181 ../../library/logging.rst:979 +msgid "" +"The second optional keyword argument is *stack_info*, which defaults to " +"``False``. If true, stack information is added to the logging message, " +"including the actual logging call. Note that this is not the same stack " +"information as that displayed through specifying *exc_info*: The former is " +"stack frames from the bottom of the stack up to the logging call in the " +"current thread, whereas the latter is information about stack frames which " +"have been unwound, following an exception, while searching for exception " +"handlers." +msgstr "" +"第二个可选关键字参数是 *stack_info*,默认为 ``False``。如果为 " +"True,则将堆栈信息添加到日志消息中,包括实际的日志调用。请注意,这与通过指定 *exc_info* " +"显示的堆栈信息不同:前者是从堆栈底部到当前线程中的日志记录调用的堆栈帧,而后者是在搜索异常处理程序时,跟踪异常而打开的堆栈帧的信息。" + +#: ../../library/logging.rst:190 ../../library/logging.rst:988 +msgid "" +"You can specify *stack_info* independently of *exc_info*, e.g. to just show " +"how you got to a certain point in your code, even when no exceptions were " +"raised. The stack frames are printed following a header line which says:" +msgstr "" +"您可以独立于 *exc_info* 来指定 " +"*stack_info*,例如,即使在未引发任何异常的情况下,也可以显示如何到达代码中的特定点。堆栈帧在标题行之后打印:" + +#: ../../library/logging.rst:198 ../../library/logging.rst:996 +msgid "" +"This mimics the ``Traceback (most recent call last):`` which is used when " +"displaying exception frames." +msgstr "这模仿了显示异常帧时所使用的 ``Traceback (most recent call last):`` 。" + +#: ../../library/logging.rst:201 +msgid "" +"The third optional keyword argument is *stacklevel*, which defaults to " +"``1``. If greater than 1, the corresponding number of stack frames are " +"skipped when computing the line number and function name set in the " +":class:`LogRecord` created for the logging event. This can be used in " +"logging helpers so that the function name, filename and line number recorded" +" are not the information for the helper function/method, but rather its " +"caller. The name of this parameter mirrors the equivalent one in the " +":mod:`warnings` module." +msgstr "" +"第三个可选关键字参数是 *stacklevel* ,默认为 ``1`` 。如果大于 1 ,则在为日志记录事件创建的 :class:`LogRecord`" +" " +"中计算行号和函数名时,将跳过相应数量的堆栈帧。可以在记录帮助器时使用它,以便记录的函数名称,文件名和行号不是帮助器的函数/方法的信息,而是其调用方的信息。此参数是" +" :mod:`warnings` 模块中的同名等效参数。" + +#: ../../library/logging.rst:209 +msgid "" +"The fourth keyword argument is *extra* which can be used to pass a " +"dictionary which is used to populate the __dict__ of the :class:`LogRecord` " +"created for the logging event with user-defined attributes. These custom " +"attributes can then be used as you like. For example, they could be " +"incorporated into logged messages. For example::" +msgstr "" +"第四个关键字参数是 *extra* ,传递一个字典,该字典用于填充为日志记录事件创建的、带有用户自定义属性的 :class:`LogRecord` 中的" +" __dict__ 。然后可以按照需求使用这些自定义属性。例如,可以将它们合并到已记录的消息中:" + +#: ../../library/logging.rst:221 +msgid "would print something like" +msgstr "输出类似于" + +#: ../../library/logging.rst:227 ../../library/logging.rst:1016 +msgid "" +"The keys in the dictionary passed in *extra* should not clash with the keys " +"used by the logging system. (See the :class:`Formatter` documentation for " +"more information on which keys are used by the logging system.)" +msgstr "" +"*extra* 中传入的字典的键不应与日志系统使用的键冲突。(有关日志系统使用哪些键的更多信息,请参见 :class:`Formatter` 的文档。)" + +#: ../../library/logging.rst:231 +msgid "" +"If you choose to use these attributes in logged messages, you need to " +"exercise some care. In the above example, for instance, the " +":class:`Formatter` has been set up with a format string which expects " +"'clientip' and 'user' in the attribute dictionary of the :class:`LogRecord`." +" If these are missing, the message will not be logged because a string " +"formatting exception will occur. So in this case, you always need to pass " +"the *extra* dictionary with these keys." +msgstr "" +"如果在已记录的消息中使用这些属性,则需要格外小心。例如,在上面的示例中,:class:`Formatter` 已设置了格式字符串,其在 " +":class:`LogRecord` 的属性字典中键值为 “clientip” 和 " +"“user”。如果缺少这些内容,则将不会记录该消息,因为会引发字符串格式化异常。因此,在这种情况下,您始终需要使用 *extra* 字典传递这些键。" + +#: ../../library/logging.rst:238 ../../library/logging.rst:1027 +msgid "" +"While this might be annoying, this feature is intended for use in " +"specialized circumstances, such as multi-threaded servers where the same " +"code executes in many contexts, and interesting conditions which arise are " +"dependent on this context (such as remote client IP address and " +"authenticated user name, in the above example). In such circumstances, it is" +" likely that specialized :class:`Formatter`\\ s would be used with " +"particular :class:`Handler`\\ s." +msgstr "" +"尽管这可能很烦人,但此功能旨在用于特殊情况,例如在多个上下文中执行相同代码的多线程服务器,并且出现的有趣条件取决于此上下文(例如在上面的示例中就是远程客户端IP地址和已验证用户名)。在这种情况下,很可能将专门的" +" :class:`Formatter` 与特定的 :class:`Handler` 一起使用。" + +#: ../../library/logging.rst:245 ../../library/logging.rst:1034 +msgid "The *stack_info* parameter was added." +msgstr "增加了 *stack_info* 参数。" + +#: ../../library/logging.rst:248 +msgid "The *exc_info* parameter can now accept exception instances." +msgstr "*exc_info* 参数现在可以接受异常实例。" + +#: ../../library/logging.rst:251 +msgid "The *stacklevel* parameter was added." +msgstr "增加了 *stacklevel* 参数。" + +#: ../../library/logging.rst:257 +msgid "" +"Logs a message with level :const:`INFO` on this logger. The arguments are " +"interpreted as for :meth:`debug`." +msgstr "在此记录器上记录 :const:`INFO` 级别的消息。参数解释同 :meth:`debug`。" + +#: ../../library/logging.rst:263 +msgid "" +"Logs a message with level :const:`WARNING` on this logger. The arguments are" +" interpreted as for :meth:`debug`." +msgstr "在此记录器上记录 :const:`WARNING` 级别的消息。参数解释同 :meth:`debug`。" + +#: ../../library/logging.rst:266 +msgid "" +"There is an obsolete method ``warn`` which is functionally identical to " +"``warning``. As ``warn`` is deprecated, please do not use it - use " +"``warning`` instead." +msgstr "" +"有一个功能上与 ``warning`` 一致的方法 ``warn``。由于 ``warn`` 已被弃用,请不要使用它 —— 改为使用 " +"``warning``。" + +#: ../../library/logging.rst:272 +msgid "" +"Logs a message with level :const:`ERROR` on this logger. The arguments are " +"interpreted as for :meth:`debug`." +msgstr "在此记录器上记录 :const:`ERROR` 级别的消息。参数解释同 :meth:`debug`。" + +#: ../../library/logging.rst:278 +msgid "" +"Logs a message with level :const:`CRITICAL` on this logger. The arguments " +"are interpreted as for :meth:`debug`." +msgstr "在此记录器上记录 :const:`CRITICAL` 级别的消息。参数解释同 :meth:`debug`。" + +#: ../../library/logging.rst:284 +msgid "" +"Logs a message with integer level *level* on this logger. The other " +"arguments are interpreted as for :meth:`debug`." +msgstr "在此记录器上记录 *level* 整数代表的级别的消息。参数解释同 :meth:`debug`。" + +#: ../../library/logging.rst:290 +msgid "" +"Logs a message with level :const:`ERROR` on this logger. The arguments are " +"interpreted as for :meth:`debug`. Exception info is added to the logging " +"message. This method should only be called from an exception handler." +msgstr "" +"在此记录器上记录 :const:`ERROR` 级别的消息。参数解释同 " +":meth:`debug`。异常信息将添加到日志消息中。仅应从异常处理程序中调用此方法。" + +#: ../../library/logging.rst:297 +msgid "Adds the specified filter *filter* to this logger." +msgstr "将指定的过滤器 *filter* 添加到此记录器。" + +#: ../../library/logging.rst:302 +msgid "Removes the specified filter *filter* from this logger." +msgstr "从此记录器中删除指定的过滤器 *filter*。" + +#: ../../library/logging.rst:307 +msgid "" +"Apply this logger's filters to the record and return ``True`` if the record " +"is to be processed. The filters are consulted in turn, until one of them " +"returns a false value. If none of them return a false value, the record will" +" be processed (passed to handlers). If one returns a false value, no further" +" processing of the record occurs." +msgstr "" +"将此记录器的过滤器应用于记录,如果记录能被处理则返回 " +"``True``。过滤器会被依次使用,直到其中一个返回假值为止。如果它们都不返回假值,则记录将被处理(传递给处理器)。如果返回任一为假值,则不会对该记录做进一步处理。" + +#: ../../library/logging.rst:316 +msgid "Adds the specified handler *hdlr* to this logger." +msgstr "将指定的处理器 *hdlr* 添加到此记录器。" + +#: ../../library/logging.rst:321 +msgid "Removes the specified handler *hdlr* from this logger." +msgstr "从此记录器中删除指定的处理器 *hdlr*。" + +#: ../../library/logging.rst:326 +msgid "" +"Finds the caller's source filename and line number. Returns the filename, " +"line number, function name and stack information as a 4-element tuple. The " +"stack information is returned as ``None`` unless *stack_info* is ``True``." +msgstr "" +"查找调用源的文件名和行号,以 文件名,行号,函数名称和堆栈信息 4元素元组的形式返回。堆栈信息将返回 ``None``,除非 *stack_info* " +"为 ``True``。" + +#: ../../library/logging.rst:330 +msgid "" +"The *stacklevel* parameter is passed from code calling the :meth:`debug` and" +" other APIs. If greater than 1, the excess is used to skip stack frames " +"before determining the values to be returned. This will generally be useful " +"when calling logging APIs from helper/wrapper code, so that the information " +"in the event log refers not to the helper/wrapper code, but to the code that" +" calls it." +msgstr "" +"*stacklevel* 参数用于调用 :meth:`debug` 和其他 API。如果大于 " +"1,则多余部分将用于跳过堆栈帧,然后再确定要返回的值。当从帮助器/包装器代码调用日志记录 API " +"时,这通常很有用,以便事件日志中的信息不是来自帮助器/包装器代码,而是来自调用它的代码。" + +#: ../../library/logging.rst:340 +msgid "" +"Handles a record by passing it to all handlers associated with this logger " +"and its ancestors (until a false value of *propagate* is found). This method" +" is used for unpickled records received from a socket, as well as those " +"created locally. Logger-level filtering is applied using " +":meth:`~Logger.filter`." +msgstr "" +"通过将记录传递给与此记录器及其祖先关联的所有处理器来处理(直到某个 *propagate* 值为 " +"false)。此方法用于从套接字接收的未序列化的以及在本地创建的记录。使用 :meth:`~Logger.filter` 进行记录器级别过滤。" + +#: ../../library/logging.rst:348 +msgid "" +"This is a factory method which can be overridden in subclasses to create " +"specialized :class:`LogRecord` instances." +msgstr "这是一种工厂方法,可以在子类中对其进行重写以创建专门的 :class:`LogRecord` 实例。" + +#: ../../library/logging.rst:353 +msgid "" +"Checks to see if this logger has any handlers configured. This is done by " +"looking for handlers in this logger and its parents in the logger hierarchy." +" Returns ``True`` if a handler was found, else ``False``. The method stops " +"searching up the hierarchy whenever a logger with the 'propagate' attribute " +"set to false is found - that will be the last logger which is checked for " +"the existence of handlers." +msgstr "" +"检查此记录器是否配置了任何处理器。通过在此记录器及其记录器层次结构中的父级中查找处理器完成此操作。如果找到处理器则返回 ``True``,否则返回 " +"``False``。只要找到 “propagate” 属性设置为假值的记录器,该方法就会停止搜索层次结构 —— " +"其将是最后一个检查处理器是否存在的记录器。" + +#: ../../library/logging.rst:362 +msgid "Loggers can now be pickled and unpickled." +msgstr "现在可以对处理器进行序列化和反序列化。" + +#: ../../library/logging.rst:368 +msgid "Logging Levels" +msgstr "日志级别" + +#: ../../library/logging.rst:370 +msgid "" +"The numeric values of logging levels are given in the following table. These" +" are primarily of interest if you want to define your own levels, and need " +"them to have specific values relative to the predefined levels. If you " +"define a level with the same numeric value, it overwrites the predefined " +"value; the predefined name is lost." +msgstr "" +"日志记录级别的数值在下表中给出。如果你想要定义自己的级别,并且需要它们具有相对于预定义级别的特定值,那么这你可能对以下内容感兴趣。如果你定义具有相同数值的级别,它将覆盖预定义的值;预定义的名称将失效。" + +#: ../../library/logging.rst:377 +msgid "Level" +msgstr "级别" + +#: ../../library/logging.rst:377 +msgid "Numeric value" +msgstr "数值" + +#: ../../library/logging.rst:379 +msgid "``CRITICAL``" +msgstr "``CRITICAL``" + +#: ../../library/logging.rst:379 +msgid "50" +msgstr "50" + +#: ../../library/logging.rst:381 +msgid "``ERROR``" +msgstr "``ERROR``" + +#: ../../library/logging.rst:381 +msgid "40" +msgstr "40" + +#: ../../library/logging.rst:383 +msgid "``WARNING``" +msgstr "``WARNING``" + +#: ../../library/logging.rst:383 +msgid "30" +msgstr "30" + +#: ../../library/logging.rst:385 +msgid "``INFO``" +msgstr "``INFO``" + +#: ../../library/logging.rst:385 +msgid "20" +msgstr "20" + +#: ../../library/logging.rst:387 +msgid "``DEBUG``" +msgstr "``DEBUG``" + +#: ../../library/logging.rst:387 +msgid "10" +msgstr "10" + +#: ../../library/logging.rst:389 +msgid "``NOTSET``" +msgstr "``NOTSET``" + +#: ../../library/logging.rst:389 +msgid "0" +msgstr "0" + +#: ../../library/logging.rst:396 +msgid "Handler Objects" +msgstr "处理器对象" + +#: ../../library/logging.rst:398 +msgid "" +"Handlers have the following attributes and methods. Note that " +":class:`Handler` is never instantiated directly; this class acts as a base " +"for more useful subclasses. However, the :meth:`__init__` method in " +"subclasses needs to call :meth:`Handler.__init__`." +msgstr "" +"Handler 有以下属性和方法。注意不要直接实例化 :class:`Handler` ;这个类用来派生其他更有用的子类。但是,子类的 " +":meth:`__init__` 方法需要调用 :meth:`Handler.__init__` 。" + +#: ../../library/logging.rst:407 +msgid "" +"Initializes the :class:`Handler` instance by setting its level, setting the " +"list of filters to the empty list and creating a lock (using " +":meth:`createLock`) for serializing access to an I/O mechanism." +msgstr "" +"初始化 :class:`Handler` 实例时,需要设置它的级别,将过滤列表置为空,并且创建锁(通过 :meth:`createLock` " +")来序列化对 I/O 的访问。" + +#: ../../library/logging.rst:414 +msgid "" +"Initializes a thread lock which can be used to serialize access to " +"underlying I/O functionality which may not be threadsafe." +msgstr "初始化一个线程锁,用来序列化对底层的 I/O 功能的访问,底层的 I/O 功能可能不是线程安全的。" + +#: ../../library/logging.rst:420 +msgid "Acquires the thread lock created with :meth:`createLock`." +msgstr "获取由 :meth:`createLock` 创建的线程锁。" + +#: ../../library/logging.rst:425 +msgid "Releases the thread lock acquired with :meth:`acquire`." +msgstr "释放由 :meth:`acquire` 获取的线程锁。" + +#: ../../library/logging.rst:430 +msgid "" +"Sets the threshold for this handler to *level*. Logging messages which are " +"less severe than *level* will be ignored. When a handler is created, the " +"level is set to :const:`NOTSET` (which causes all messages to be processed)." +msgstr "" +"给处理器设置阈值为 *level* 。日志级别小于 *level* 将被忽略。创建处理器时,日志级别被设置为 :const:`NOTSET` " +"(所有的消息都会被处理)。" + +#: ../../library/logging.rst:437 +msgid "" +"The *level* parameter now accepts a string representation of the level such " +"as 'INFO' as an alternative to the integer constants such as :const:`INFO`." +msgstr "*level* 形参现在接受像 'INFO' 这样的字符串形式的级别表达方式,也可以使用像 :const:`INFO` 这样的整数常量。" + +#: ../../library/logging.rst:445 +msgid "Sets the :class:`Formatter` for this handler to *fmt*." +msgstr "将此处理器的 :class:`Formatter` 设置为 *fmt*。" + +#: ../../library/logging.rst:450 +msgid "Adds the specified filter *filter* to this handler." +msgstr "将指定的过滤器 *filter* 添加到此处理器。" + +#: ../../library/logging.rst:455 +msgid "Removes the specified filter *filter* from this handler." +msgstr "从此处理器中删除指定的过滤器 *filter* 。" + +#: ../../library/logging.rst:460 +msgid "" +"Apply this handler's filters to the record and return ``True`` if the record" +" is to be processed. The filters are consulted in turn, until one of them " +"returns a false value. If none of them return a false value, the record will" +" be emitted. If one returns a false value, the handler will not emit the " +"record." +msgstr "" +"将此处理器的过滤器应用于记录,在要处理记录时返回 ``True`` " +"。依次查询过滤器,直到其中一个返回假值为止。如果它们都不返回假值,则将发出记录。如果返回一个假值,则处理器将不会发出记录。" + +#: ../../library/logging.rst:469 +msgid "" +"Ensure all logging output has been flushed. This version does nothing and is" +" intended to be implemented by subclasses." +msgstr "确保所有日志记录从缓存输出。此版本不执行任何操作,并且应由子类实现。" + +#: ../../library/logging.rst:475 +msgid "" +"Tidy up any resources used by the handler. This version does no output but " +"removes the handler from an internal list of handlers which is closed when " +":func:`shutdown` is called. Subclasses should ensure that this gets called " +"from overridden :meth:`close` methods." +msgstr "" +"回收处理器使用的所有资源。此版本不输出,但从内部处理器列表中删除处理器,内部处理器在 :func:`shutdown` 被调用时关闭 " +"。子类应确保从重写的 :meth:`close` 方法中调用此方法。" + +#: ../../library/logging.rst:483 +msgid "" +"Conditionally emits the specified logging record, depending on filters which" +" may have been added to the handler. Wraps the actual emission of the record" +" with acquisition/release of the I/O thread lock." +msgstr "经已添加到处理器的过滤器过滤后,有条件地发出指定的日志记录。用获取/释放 I/O 线程锁包装了记录的实际发出行为。" + +#: ../../library/logging.rst:490 +msgid "" +"This method should be called from handlers when an exception is encountered " +"during an :meth:`emit` call. If the module-level attribute " +"``raiseExceptions`` is ``False``, exceptions get silently ignored. This is " +"what is mostly wanted for a logging system - most users will not care about " +"errors in the logging system, they are more interested in application " +"errors. You could, however, replace this with a custom handler if you wish. " +"The specified record is the one which was being processed when the exception" +" occurred. (The default value of ``raiseExceptions`` is ``True``, as that is" +" more useful during development)." +msgstr "" +"调用 :meth:`emit` 期间遇到异常时,应从处理器中调用此方法。如果模块级属性 ``raiseExceptions`` 是 " +"``False``,则异常将被静默忽略。这是大多数情况下日志系统需要的 —— " +"大多数用户不会关心日志系统中的错误,他们对应用程序错误更感兴趣。但是,你可以根据需要将其替换为自定义处理器。指定的记录是发生异常时正在处理的记录。(``raiseExceptions``" +" 的默认值是 ``True``,因为这在开发过程中是比较有用的)。" + +#: ../../library/logging.rst:503 +msgid "" +"Do formatting for a record - if a formatter is set, use it. Otherwise, use " +"the default formatter for the module." +msgstr "如果设置了格式器则用其对记录进行格式化。否则,使用模块的默认格式器。" + +#: ../../library/logging.rst:509 +msgid "" +"Do whatever it takes to actually log the specified logging record. This " +"version is intended to be implemented by subclasses and so raises a " +":exc:`NotImplementedError`." +msgstr "执行实际记录给定日志记录所需的操作。这个版本应由子类实现,因此这里直接引发 :exc:`NotImplementedError` 异常。" + +#: ../../library/logging.rst:513 +msgid "" +"For a list of handlers included as standard, see :mod:`logging.handlers`." +msgstr "有关作为标准随附的处理器列表,请参见 :mod:`logging.handlers`。" + +#: ../../library/logging.rst:518 +msgid "Formatter Objects" +msgstr "格式器对象" + +#: ../../library/logging.rst:522 +msgid "" +":class:`Formatter` objects have the following attributes and methods. They " +"are responsible for converting a :class:`LogRecord` to (usually) a string " +"which can be interpreted by either a human or an external system. The base " +":class:`Formatter` allows a formatting string to be specified. If none is " +"supplied, the default value of ``'%(message)s'`` is used, which just " +"includes the message in the logging call. To have additional items of " +"information in the formatted output (such as a timestamp), keep reading." +msgstr "" +":class:`Formatter` 对象拥有以下的属性和方法。一般情况下,它们负责将 :class:`LogRecord` " +"转换为可由人或外部系统解释的字符串。基础的 :class:`Formatter` 允许指定格式字符串。如果未提供任何值,则使用默认值 " +"``'%(message)s'`` ,它仅将消息包括在日志记录调用中。要在格式化输出中包含其他信息(如时间戳),请阅读下文。 " + +#: ../../library/logging.rst:530 +msgid "" +"A Formatter can be initialized with a format string which makes use of " +"knowledge of the :class:`LogRecord` attributes - such as the default value " +"mentioned above making use of the fact that the user's message and arguments" +" are pre-formatted into a :class:`LogRecord`'s *message* attribute. This " +"format string contains standard Python %-style mapping keys. See section " +":ref:`old-string-formatting` for more information on string formatting." +msgstr "" +"格式器可以使用格式化字符串来初始化,该字符串利用 :class:`LogRecord` 的属性 —— 例如上述默认值,用户的消息和参数预先格式化为 " +":class:`LogRecord` 的 *message* 属性后被使用。此格式字符串包含标准的 Python %-s " +"样式映射键。有关字符串格式的更多信息,请参见 :ref:`old-string-formatting`。" + +#: ../../library/logging.rst:537 +msgid "" +"The useful mapping keys in a :class:`LogRecord` are given in the section on " +":ref:`logrecord-attributes`." +msgstr ":ref:`logrecord-attributes` 一节中给出了 :class:`LogRecord` 中有用的映射键。" + +#: ../../library/logging.rst:543 +msgid "" +"Returns a new instance of the :class:`Formatter` class. The instance is " +"initialized with a format string for the message as a whole, as well as a " +"format string for the date/time portion of a message. If no *fmt* is " +"specified, ``'%(message)s'`` is used. If no *datefmt* is specified, a " +"format is used which is described in the :meth:`formatTime` documentation." +msgstr "" +"返回 :class:`Formatter` 类的新实例。实例将使用整个消息的格式字符串以及消息的日期/时间部分的格式字符串进行初始化。如果未指定 " +"*fmt* ,则使用 ``'%(message)s'``。如果未指定 *datefmt*,则使用 :meth:`formatTime` " +"文档中描述的格式。" + +#: ../../library/logging.rst:549 +msgid "" +"The *style* parameter can be one of '%', '{' or '$' and determines how the " +"format string will be merged with its data: using one of %-formatting, " +":meth:`str.format` or :class:`string.Template`. This only applies to the " +"format string *fmt* (e.g. ``'%(message)s'`` or ``{message}``), not to the " +"actual log messages passed to ``Logger.debug`` etc; see :ref:`formatting-" +"styles` for more information on using {- and $-formatting for log messages." +msgstr "" +"*style* 形参可以是 '%', '{' 或 '$' 之一,它决定格式字符串将如何与数据进行合并:使用 %-formatting, " +":meth:`str.format` 或是 :class:`string.Template`。 这仅适用于格式字符串 *fmt* (例如 " +"``'%(message)s'`` 或 ``{message}``),不适用于传递给 ``Logger.debug`` 的实际日志消息等;请参阅 " +":ref:`formatting-styles` 了解有关在日志消息中使用 {- 和 $-formatting 的更多详情。" + +#: ../../library/logging.rst:557 +msgid "The *style* parameter was added." +msgstr "加入了 *style* 形参。" + +#: ../../library/logging.rst:560 +msgid "" +"The *validate* parameter was added. Incorrect or mismatched style and fmt " +"will raise a ``ValueError``. For example: ``logging.Formatter('%(asctime)s -" +" %(message)s', style='{')``." +msgstr "" +"加入*validate* 参数。不正确或不匹配的样式和格式将引发 ``ValueError`` 错误。例如: " +"``logging.Formatter('%(asctime)s - %(message)s', style='{')``。" + +#: ../../library/logging.rst:567 +msgid "" +"The record's attribute dictionary is used as the operand to a string " +"formatting operation. Returns the resulting string. Before formatting the " +"dictionary, a couple of preparatory steps are carried out. The *message* " +"attribute of the record is computed using *msg* % *args*. If the formatting " +"string contains ``'(asctime)'``, :meth:`formatTime` is called to format the " +"event time. If there is exception information, it is formatted using " +":meth:`formatException` and appended to the message. Note that the formatted" +" exception information is cached in attribute *exc_text*. This is useful " +"because the exception information can be pickled and sent across the wire, " +"but you should be careful if you have more than one :class:`Formatter` " +"subclass which customizes the formatting of exception information. In this " +"case, you will have to clear the cached value after a formatter has done its" +" formatting, so that the next formatter to handle the event doesn't use the " +"cached value but recalculates it afresh." +msgstr "" +"记录的属性字典用作字符串格式化操作的参数。返回结果字符串。在格式化字典之前,需要执行几个准备步骤。 使用 *msg* % *args* 计算记录的 " +"*message* 属性。如果格式化字符串包含 ``'(asctime)'``,则调用 :meth:`formatTime` " +"来格式化事件时间。如果有异常信息,则使用 :meth:`formatException` 将其格式化并附加到消息中。请注意,格式化的异常信息缓存在属性 " +"*exc_text* 中。这很有用,因为可以对异常信息进行序列化并通过网络发送,但是如果您有不止一个定制了异常信息格式的 " +":class:`Formatter` " +"子类,则应格外小心。在这种情况下,您必须在格式器完成格式化后清除缓存的值,以便下一个处理事件的格式器不使用缓存的值,而是重新计算它。" + +#: ../../library/logging.rst:583 +msgid "" +"If stack information is available, it's appended after the exception " +"information, using :meth:`formatStack` to transform it if necessary." +msgstr "如果栈信息可用,它将被添加在异常信息之后,如有必要请使用 :meth:`formatStack` 来转换它。" + +#: ../../library/logging.rst:589 +msgid "" +"This method should be called from :meth:`format` by a formatter which wants " +"to make use of a formatted time. This method can be overridden in formatters" +" to provide for any specific requirement, but the basic behavior is as " +"follows: if *datefmt* (a string) is specified, it is used with " +":func:`time.strftime` to format the creation time of the record. Otherwise, " +"the format '%Y-%m-%d %H:%M:%S,uuu' is used, where the uuu part is a " +"millisecond value and the other letters are as per the :func:`time.strftime`" +" documentation. An example time in this format is ``2003-01-23 " +"00:29:50,411``. The resulting string is returned." +msgstr "" +"此方法应由想要使用格式化时间的格式器中的 :meth:`format` 调用。可以在格式器中重写此方法以提供任何特定要求,但是基本行为如下:如果指定了 " +"*datefmt* (字符串),则将其用于 :func:`time.strftime` 来格式化记录的创建时间。否则,使用格式 '%Y-%m-%d " +"%H:%M:%S,uuu',其中 uuu 部分是毫秒值,其他字母根据 :func:`time.strftime` 文档。这种时间格式的示例为 " +"``2003-01-23 00:29:50,411``。返回结果字符串。" + +#: ../../library/logging.rst:599 +msgid "" +"This function uses a user-configurable function to convert the creation time" +" to a tuple. By default, :func:`time.localtime` is used; to change this for " +"a particular formatter instance, set the ``converter`` attribute to a " +"function with the same signature as :func:`time.localtime` or " +":func:`time.gmtime`. To change it for all formatters, for example if you " +"want all logging times to be shown in GMT, set the ``converter`` attribute " +"in the ``Formatter`` class." +msgstr "" +"此函数使用一个用户可配置函数将创建时间转换为元组。 默认情况下,使用 " +":func:`time.localtime`;要为特定格式化程序实例更改此项,请将实例的 ``converter`` 属性设为具有与 " +":func:`time.localtime` 或 :func:`time.gmtime` 相同签名的函数。 " +"要为所有格式化程序更改此项,例如当你希望所有日志时间都显示为 GMT,请在 ``Formatter`` 类中设置 ``converter`` 属性。" + +#: ../../library/logging.rst:607 +msgid "" +"Previously, the default format was hard-coded as in this example: " +"``2010-09-06 22:38:15,292`` where the part before the comma is handled by a " +"strptime format string (``'%Y-%m-%d %H:%M:%S'``), and the part after the " +"comma is a millisecond value. Because strptime does not have a format " +"placeholder for milliseconds, the millisecond value is appended using " +"another format string, ``'%s,%03d'`` --- and both of these format strings " +"have been hardcoded into this method. With the change, these strings are " +"defined as class-level attributes which can be overridden at the instance " +"level when desired. The names of the attributes are ``default_time_format`` " +"(for the strptime format string) and ``default_msec_format`` (for appending " +"the millisecond value)." +msgstr "" +"在之前版本中,默认格式是被硬编码的,例如这个例子: ``2010-09-06 22:38:15,292`` 其中逗号之前的部分由 strptime " +"格式字符串 (``'%Y-%m-%d %H:%M:%S'``) 处理,而逗号之后的部分为毫秒值。 因为 strptime " +"没有表示毫秒的占位符,毫秒值使用了另外的格式字符串来添加 ``'%s,%03d'`` --- 这两个格式字符串代码都是硬编码在该方法中的。 " +"经过修改,这些字符串被定义为类层级的属性,当需要时可以在实例层级上被重写。 属性的名称为 ``default_time_format`` (用于 " +"strptime 格式字符串) 和 ``default_msec_format`` (用于添加毫秒值)。" + +#: ../../library/logging.rst:620 +msgid "The ``default_msec_format`` can be ``None``." +msgstr "``default_msec_format`` 可以为 ``None``。" + +#: ../../library/logging.rst:625 +msgid "" +"Formats the specified exception information (a standard exception tuple as " +"returned by :func:`sys.exc_info`) as a string. This default implementation " +"just uses :func:`traceback.print_exception`. The resulting string is " +"returned." +msgstr "" +"将指定的异常信息(由 :func:`sys.exc_info` 返回的标准异常元组)格式化为字符串。默认实现只是使用了 " +":func:`traceback.print_exception`。 结果字符串将被返回。" + +#: ../../library/logging.rst:632 +msgid "" +"Formats the specified stack information (a string as returned by " +":func:`traceback.print_stack`, but with the last newline removed) as a " +"string. This default implementation just returns the input value." +msgstr "" +"将指定的堆栈信息(由 :func:`traceback.print_stack` 返回的字符串,但移除末尾的换行符)格式化为字符串。 " +"默认实现只是返回输入值。" + +#: ../../library/logging.rst:639 +msgid "Filter Objects" +msgstr "过滤器对象" + +#: ../../library/logging.rst:641 +msgid "" +"``Filters`` can be used by ``Handlers`` and ``Loggers`` for more " +"sophisticated filtering than is provided by levels. The base filter class " +"only allows events which are below a certain point in the logger hierarchy. " +"For example, a filter initialized with 'A.B' will allow events logged by " +"loggers 'A.B', 'A.B.C', 'A.B.C.D', 'A.B.D' etc. but not 'A.BB', 'B.A.B' etc." +" If initialized with the empty string, all events are passed." +msgstr "" +"``Filters`` 可被 ``Handlers`` 和 ``Loggers`` 用来实现比按层级提供更复杂的过滤操作。 " +"基本过滤器类只允许低于日志记录器层级结构中低于特定层级的事件。 例如,一个用 'A.B' 初始化的过滤器将允许 'A.B', 'A.B.C', " +"'A.B.C.D', 'A.B.D' 等日志记录器所记录的事件。 但 'A.BB', 'B.A.B' 等则不允许。 " +"如果用空字符串初始化,则所有事件都会通过。" + +#: ../../library/logging.rst:651 +msgid "" +"Returns an instance of the :class:`Filter` class. If *name* is specified, it" +" names a logger which, together with its children, will have its events " +"allowed through the filter. If *name* is the empty string, allows every " +"event." +msgstr "" +"返回一个 :class:`Filter` 类的实例。 如果指定了 " +"*name*,则它将被用来为日志记录器命名,该类及其子类将通过该过滤器允许指定事件通过。 如果 *name* 为空字符串,则允许所有事件通过。" + +#: ../../library/logging.rst:658 +msgid "" +"Is the specified record to be logged? Returns zero for no, nonzero for yes. " +"If deemed appropriate, the record may be modified in-place by this method." +msgstr "是否要记录指定的记录?返回零表示否,非零表示是。如果认为合适,则可以通过此方法就地修改记录。" + +#: ../../library/logging.rst:662 +msgid "" +"Note that filters attached to handlers are consulted before an event is " +"emitted by the handler, whereas filters attached to loggers are consulted " +"whenever an event is logged (using :meth:`debug`, :meth:`info`, etc.), " +"before sending an event to handlers. This means that events which have been " +"generated by descendant loggers will not be filtered by a logger's filter " +"setting, unless the filter has also been applied to those descendant " +"loggers." +msgstr "" +"请注意关联到处理器的过滤器会在事件由处理器发出之前被查询,而关联到日志记录器的过滤器则会在有事件被记录的的任何时候(使用 :meth:`debug`, " +":meth:`info` 等等)在将事件发送给处理器之前被查询。 " +"这意味着由后代日志记录器生成的事件将不会被父代日志记录器的过滤器设置所过滤,除非该过滤器也已被应用于后代日志记录器。" + +#: ../../library/logging.rst:669 +msgid "" +"You don't actually need to subclass ``Filter``: you can pass any instance " +"which has a ``filter`` method with the same semantics." +msgstr "你实际上不需要子类化 ``Filter`` :你可以传入任何一个包含有相同语义的 ``filter`` 方法的实例。" + +#: ../../library/logging.rst:672 +msgid "" +"You don't need to create specialized ``Filter`` classes, or use other " +"classes with a ``filter`` method: you can use a function (or other callable)" +" as a filter. The filtering logic will check to see if the filter object has" +" a ``filter`` attribute: if it does, it's assumed to be a ``Filter`` and its" +" :meth:`~Filter.filter` method is called. Otherwise, it's assumed to be a " +"callable and called with the record as the single parameter. The returned " +"value should conform to that returned by :meth:`~Filter.filter`." +msgstr "" +"你不需要创建专门的 ``Filter`` 类,或使用具有 ``filter`` 方法的其他类:你可以使用一个函数(或其他可调用对象)作为过滤器。 " +"过滤逻辑将检查过滤器对象是否具有 ``filter`` 属性:如果有,就会将它当作是 ``Filter`` 并调用它的 " +":meth:`~Filter.filter` 方法。 在其他情况下,则会将它当作是可调用对象并将记录作为唯一的形参进行调用。 返回值应当与 " +":meth:`~Filter.filter` 的返回值相一致。" + +#: ../../library/logging.rst:682 +msgid "" +"Although filters are used primarily to filter records based on more " +"sophisticated criteria than levels, they get to see every record which is " +"processed by the handler or logger they're attached to: this can be useful " +"if you want to do things like counting how many records were processed by a " +"particular logger or handler, or adding, changing or removing attributes in " +"the :class:`LogRecord` being processed. Obviously changing the LogRecord " +"needs to be done with some care, but it does allow the injection of " +"contextual information into logs (see :ref:`filters-contextual`)." +msgstr "" +"尽管过滤器主要被用来构造比层级更复杂的规则以过滤记录,但它们可以查看由它们关联的处理器或记录器所处理的每条记录:当你想要执行统计特定记录器或处理器共处理了多少条记录,或是在所处理的" +" :class:`LogRecord` 中添加、修改或移除属性这样的任务时该特性将很有用处。 显然改变 LogRecord " +"时需要相当小心,但将上下文信息注入日志确实是被允许的 (参见 :ref:`filters-contextual`)。" + +#: ../../library/logging.rst:694 +msgid "LogRecord Objects" +msgstr "LogRecord 属性" + +#: ../../library/logging.rst:696 +msgid "" +":class:`LogRecord` instances are created automatically by the " +":class:`Logger` every time something is logged, and can be created manually " +"via :func:`makeLogRecord` (for example, from a pickled event received over " +"the wire)." +msgstr "" +":class:`LogRecord` 实例是每当有日志被记录时由 :class:`Logger` 自动创建的,并且可通过 " +":func:`makeLogRecord` 手动创建(例如根据从网络接收的已封存事件创建)。" + +#: ../../library/logging.rst:704 +msgid "Contains all the information pertinent to the event being logged." +msgstr "包含与被记录的事件相关的所有信息。" + +#: ../../library/logging.rst:706 +msgid "" +"The primary information is passed in :attr:`msg` and :attr:`args`, which are" +" combined using ``msg % args`` to create the :attr:`message` field of the " +"record." +msgstr "" +"主要信息是在 :attr:`msg` 和 :attr:`args` 中传递的,它们使用 ``msg % args`` 组合到一起以创建记录的 " +":attr:`message` 字段。" + +#: ../../library/logging.rst:0 ../../library/logging.rst:0 +msgid "Parameters" +msgstr "参数" + +#: ../../library/logging.rst:710 +msgid "" +"The name of the logger used to log the event represented by this LogRecord. " +"Note that this name will always have this value, even though it may be " +"emitted by a handler attached to a different (ancestor) logger." +msgstr "" +"用于记录由此 LogRecord 所表示事件的记录器名称。 请注意此名称将始终为该值,即使它可能是由附加到不同(祖先)日志记录器的处理器所发出的。" + +#: ../../library/logging.rst:714 +msgid "" +"The numeric level of the logging event (one of DEBUG, INFO etc.) Note that " +"this is converted to *two* attributes of the LogRecord: ``levelno`` for the " +"numeric value and ``levelname`` for the corresponding level name." +msgstr "" +"以数字表示的日志记录事件层级(如 DEBUG, INFO 等)。 请注意这会转换为 LogRecord 的 *两个* 属性: ``levelno`` " +"为数字值而 ``levelname`` 为对应的层级名称。" + +#: ../../library/logging.rst:718 +msgid "The full pathname of the source file where the logging call was made." +msgstr "进行日志记录调用的文件的完整路径名。" + +#: ../../library/logging.rst:720 +msgid "The line number in the source file where the logging call was made." +msgstr "记录调用所在源文件中的行号。" + +#: ../../library/logging.rst:722 +msgid "" +"The event description message, possibly a format string with placeholders " +"for variable data." +msgstr "事件描述消息,可能为带有可变数据占位符的格式字符串。" + +#: ../../library/logging.rst:724 +msgid "" +"Variable data to merge into the *msg* argument to obtain the event " +"description." +msgstr "要合并到 *msg* 参数以获得事件描述的可变数据。" + +#: ../../library/logging.rst:726 +msgid "" +"An exception tuple with the current exception information, or ``None`` if no" +" exception information is available." +msgstr "包含当前异常信息的异常元组,或者如果没有可用异常信息则为 ``None``。" + +#: ../../library/logging.rst:728 +msgid "" +"The name of the function or method from which the logging call was invoked." +msgstr "唤起日志记录调用的函数或方法名称。" + +#: ../../library/logging.rst:730 +msgid "" +"A text string representing stack information from the base of the stack in " +"the current thread, up to the logging call." +msgstr "一个文本字符串,表示当前线程中从堆栈底部直到日志记录调用的堆栈信息。" + +#: ../../library/logging.rst:735 +msgid "" +"Returns the message for this :class:`LogRecord` instance after merging any " +"user-supplied arguments with the message. If the user-supplied message " +"argument to the logging call is not a string, :func:`str` is called on it to" +" convert it to a string. This allows use of user-defined classes as " +"messages, whose ``__str__`` method can return the actual format string to be" +" used." +msgstr "" +"在将 :class:`LogRecord` 实例与任何用户提供的参数合并之后,返回此实例的消息。 " +"如果用户提供给日志记录调用的消息参数不是字符串,则会在其上调用 :func:`str` 以将它转换为字符串。 此方法允许将用户定义的类用作消息,类的 " +"``__str__`` 方法可以返回要使用的实际格式字符串。" + +#: ../../library/logging.rst:742 +msgid "" +"The creation of a :class:`LogRecord` has been made more configurable by " +"providing a factory which is used to create the record. The factory can be " +"set using :func:`getLogRecordFactory` and :func:`setLogRecordFactory` (see " +"this for the factory's signature)." +msgstr "" +"通过提供用于创建记录的工厂方法已使得 :class:`LogRecord` 的创建更易于配置。 该工厂方法可使用 " +":func:`getLogRecordFactory` 和 :func:`setLogRecordFactory` (在此可查看工厂方法的签名)来设置。" + +#: ../../library/logging.rst:748 +msgid "" +"This functionality can be used to inject your own values into a " +":class:`LogRecord` at creation time. You can use the following pattern::" +msgstr "在创建时可使用此功能将你自己的值注入 :class:`LogRecord`。 你可以使用以下模式::" + +#: ../../library/logging.rst:760 +msgid "" +"With this pattern, multiple factories could be chained, and as long as they " +"don't overwrite each other's attributes or unintentionally overwrite the " +"standard attributes listed above, there should be no surprises." +msgstr "通过此模式,多个工厂方法可以被链接起来,并且只要它们不重写彼此的属性或是在无意中覆盖了上面列出的标准属性,就不会发生意外。" + +#: ../../library/logging.rst:769 +msgid "LogRecord attributes" +msgstr "LogRecord 属性" + +#: ../../library/logging.rst:771 +msgid "" +"The LogRecord has a number of attributes, most of which are derived from the" +" parameters to the constructor. (Note that the names do not always " +"correspond exactly between the LogRecord constructor parameters and the " +"LogRecord attributes.) These attributes can be used to merge data from the " +"record into the format string. The following table lists (in alphabetical " +"order) the attribute names, their meanings and the corresponding placeholder" +" in a %-style format string." +msgstr "" +"LogRecord 具有许多属性,它们大多数来自于传递给构造器的形参。 (请注意 LogRecord 构造器形参与 LogRecord " +"属性的名称并不总是完全彼此对应的。) 这些属性可被用于将来自记录的数据合并到格式字符串中。 下面的表格(按字母顺序)列出了属性名称、它们的含义以及相应的" +" %-style 格式字符串内占位符。" + +#: ../../library/logging.rst:779 +msgid "" +"If you are using {}-formatting (:func:`str.format`), you can use " +"``{attrname}`` as the placeholder in the format string. If you are using " +"$-formatting (:class:`string.Template`), use the form ``${attrname}``. In " +"both cases, of course, replace ``attrname`` with the actual attribute name " +"you want to use." +msgstr "" +"如果是使用 {}-格式化(:func:`str.format`),你可以将 ``{attrname}`` 用作格式字符串内的占位符。 如果是使用 " +"$-格式化(:class:`string.Template`),则会使用 ``${attrname}`` 的形式。 当然在这两种情况下,都应当将 " +"``attrname`` 替换为你想要使用的实际属性名称。" + +#: ../../library/logging.rst:785 +msgid "" +"In the case of {}-formatting, you can specify formatting flags by placing " +"them after the attribute name, separated from it with a colon. For example: " +"a placeholder of ``{msecs:03d}`` would format a millisecond value of ``4`` " +"as ``004``. Refer to the :meth:`str.format` documentation for full details " +"on the options available to you." +msgstr "" +"在 {}-格式化的情况下,你可以在属性名称之后放置指定的格式化旗标,并用冒号来分隔两者。 例如,占位符 ``{msecs:03d}`` 会将毫秒值 " +"``4`` 格式化为 ``004``。 请参看 :meth:`str.format` 文档了解你所能使用的选项的完整细节。" + +#: ../../library/logging.rst:792 +msgid "Attribute name" +msgstr "属性名称" + +#: ../../library/logging.rst:792 ../../library/logging.rst:1171 +msgid "Format" +msgstr "格式" + +#: ../../library/logging.rst:792 ../../library/logging.rst:1171 +msgid "Description" +msgstr "描述" + +#: ../../library/logging.rst:794 ../../library/logging.rst:0 +msgid "args" +msgstr "args" + +#: ../../library/logging.rst:794 ../../library/logging.rst:808 +#: ../../library/logging.rst:836 ../../library/logging.rst:854 +msgid "You shouldn't need to format this yourself." +msgstr "此属性不需要用户进行格式化。" + +#: ../../library/logging.rst:794 +msgid "" +"The tuple of arguments merged into ``msg`` to produce ``message``, or a dict" +" whose values are used for the merge (when there is only one argument, and " +"it is a dictionary)." +msgstr "" +"合并到 ``msg`` 以产生 ``message`` 的包含参数的元组,或是其中的值将被用于合并的字典(当只有一个参数且其类型为字典时)。" + +#: ../../library/logging.rst:799 +msgid "asctime" +msgstr "asctime" + +#: ../../library/logging.rst:799 +msgid "``%(asctime)s``" +msgstr "``%(asctime)s``" + +#: ../../library/logging.rst:799 +msgid "" +"Human-readable time when the :class:`LogRecord` was created. By default " +"this is of the form '2003-07-08 16:49:45,896' (the numbers after the comma " +"are millisecond portion of the time)." +msgstr "" +"表示人类易读的 :class:`LogRecord` 生成时间。 默认形式为 '2003-07-08 16:49:45,896' " +"(逗号之后的数字为时间的毫秒部分)。" + +#: ../../library/logging.rst:805 +msgid "created" +msgstr "created" + +#: ../../library/logging.rst:805 +msgid "``%(created)f``" +msgstr "``%(created)f``" + +#: ../../library/logging.rst:805 +msgid "" +"Time when the :class:`LogRecord` was created (as returned by " +":func:`time.time`)." +msgstr ":class:`LogRecord` 被创建的时间(即 :func:`time.time` 的返回值)。" + +#: ../../library/logging.rst:808 ../../library/logging.rst:0 +msgid "exc_info" +msgstr "exc_info" + +#: ../../library/logging.rst:808 +msgid "" +"Exception tuple (à la ``sys.exc_info``) or, if no exception has occurred, " +"``None``." +msgstr "异常元组(例如 ``sys.exc_info``)或者如未发生异常则为 ``None``。" + +#: ../../library/logging.rst:811 +msgid "filename" +msgstr "文件名" + +#: ../../library/logging.rst:811 +msgid "``%(filename)s``" +msgstr "``%(filename)s``" + +#: ../../library/logging.rst:811 +msgid "Filename portion of ``pathname``." +msgstr "``pathname`` 的文件名部分。" + +#: ../../library/logging.rst:813 +msgid "funcName" +msgstr "funcName" + +#: ../../library/logging.rst:813 +msgid "``%(funcName)s``" +msgstr "``%(funcName)s``" + +#: ../../library/logging.rst:813 +msgid "Name of function containing the logging call." +msgstr "函数名包括调用日志记录." + +#: ../../library/logging.rst:815 +msgid "levelname" +msgstr "levelname" + +#: ../../library/logging.rst:815 +msgid "``%(levelname)s``" +msgstr "``%(levelname)s``" + +#: ../../library/logging.rst:815 +msgid "" +"Text logging level for the message (``'DEBUG'``, ``'INFO'``, ``'WARNING'``, " +"``'ERROR'``, ``'CRITICAL'``)." +msgstr "" +"消息文本记录级别(``'DEBUG'``,``'INFO'``,``'WARNING'``,``'ERROR'``,``'CRITICAL'``)。" + +#: ../../library/logging.rst:819 +msgid "levelno" +msgstr "levelno" + +#: ../../library/logging.rst:819 +msgid "``%(levelno)s``" +msgstr "``%(levelno)s``" + +#: ../../library/logging.rst:819 +msgid "" +"Numeric logging level for the message (:const:`DEBUG`, :const:`INFO`, " +":const:`WARNING`, :const:`ERROR`, :const:`CRITICAL`)." +msgstr "" +"消息数字的记录级别 (:const:`DEBUG`, :const:`INFO`, :const:`WARNING`, :const:`ERROR`, " +":const:`CRITICAL`)." + +#: ../../library/logging.rst:824 +msgid "lineno" +msgstr "lineno" + +#: ../../library/logging.rst:824 +msgid "``%(lineno)d``" +msgstr "``%(lineno)d``" + +#: ../../library/logging.rst:824 +msgid "Source line number where the logging call was issued (if available)." +msgstr "发出日志记录调用所在的源行号(如果可用)。" + +#: ../../library/logging.rst:827 +msgid "message" +msgstr "message" + +#: ../../library/logging.rst:827 +msgid "``%(message)s``" +msgstr "``%(message)s``" + +#: ../../library/logging.rst:827 +msgid "" +"The logged message, computed as ``msg % args``. This is set when " +":meth:`Formatter.format` is invoked." +msgstr "记入日志的消息,即 ``msg % args`` 的结果。 这是在唤起 :meth:`Formatter.format` 时设置的。" + +#: ../../library/logging.rst:831 +msgid "module" +msgstr "module" + +#: ../../library/logging.rst:831 +msgid "``%(module)s``" +msgstr "``%(module)s``" + +#: ../../library/logging.rst:831 +msgid "Module (name portion of ``filename``)." +msgstr "模块 (``filename`` 的名称部分)。" + +#: ../../library/logging.rst:833 +msgid "msecs" +msgstr "msecs" + +#: ../../library/logging.rst:833 +msgid "``%(msecs)d``" +msgstr "``%(msecs)d``" + +#: ../../library/logging.rst:833 +msgid "" +"Millisecond portion of the time when the :class:`LogRecord` was created." +msgstr ":class:`LogRecord` 被创建的时间的毫秒部分。" + +#: ../../library/logging.rst:836 ../../library/logging.rst:0 +msgid "msg" +msgstr "msg" + +#: ../../library/logging.rst:836 +msgid "" +"The format string passed in the original logging call. Merged with ``args`` " +"to produce ``message``, or an arbitrary object (see :ref:`arbitrary-object-" +"messages`)." +msgstr "" +"在原始日志记录调用中传入的格式字符串。 与 ``args`` 合并以产生 ``message``,或是一个任意对象 (参见 " +":ref:`arbitrary-object-messages`)。" + +#: ../../library/logging.rst:841 ../../library/logging.rst:0 +msgid "name" +msgstr "name" + +#: ../../library/logging.rst:841 +msgid "``%(name)s``" +msgstr "``%(name)s``" + +#: ../../library/logging.rst:841 +msgid "Name of the logger used to log the call." +msgstr "用于记录调用的日志记录器名称。" + +#: ../../library/logging.rst:843 +msgid "pathname" +msgstr "pathname" + +#: ../../library/logging.rst:843 +msgid "``%(pathname)s``" +msgstr "``%(pathname)s``" + +#: ../../library/logging.rst:843 +msgid "" +"Full pathname of the source file where the logging call was issued (if " +"available)." +msgstr "发出日志记录调用的源文件的完整路径名(如果可用)。" + +#: ../../library/logging.rst:846 +msgid "process" +msgstr "process" + +#: ../../library/logging.rst:846 +msgid "``%(process)d``" +msgstr "``%(process)d``" + +#: ../../library/logging.rst:846 +msgid "Process ID (if available)." +msgstr "进程ID(如果可用)" + +#: ../../library/logging.rst:848 +msgid "processName" +msgstr "processName" + +#: ../../library/logging.rst:848 +msgid "``%(processName)s``" +msgstr "``%(processName)s``" + +#: ../../library/logging.rst:848 +msgid "Process name (if available)." +msgstr "进程名(如果可用)" + +#: ../../library/logging.rst:850 +msgid "relativeCreated" +msgstr "relativeCreated" + +#: ../../library/logging.rst:850 +msgid "``%(relativeCreated)d``" +msgstr "``%(relativeCreated)d``" + +#: ../../library/logging.rst:850 +msgid "" +"Time in milliseconds when the LogRecord was created, relative to the time " +"the logging module was loaded." +msgstr "以毫秒数表示的 LogRecord 被创建的时间,即相对于 logging 模块被加载时间的差值。" + +#: ../../library/logging.rst:854 +msgid "stack_info" +msgstr "stack_info" + +#: ../../library/logging.rst:854 +msgid "" +"Stack frame information (where available) from the bottom of the stack in " +"the current thread, up to and including the stack frame of the logging call " +"which resulted in the creation of this record." +msgstr "当前线程中从堆栈底部起向上直到包括日志记录调用并引发创建当前记录堆栈帧创建的堆栈帧信息(如果可用)。" + +#: ../../library/logging.rst:860 +msgid "thread" +msgstr "thread" + +#: ../../library/logging.rst:860 +msgid "``%(thread)d``" +msgstr "``%(thread)d``" + +#: ../../library/logging.rst:860 +msgid "Thread ID (if available)." +msgstr "线程ID(如果可用)" + +#: ../../library/logging.rst:862 +msgid "threadName" +msgstr "threadName" + +#: ../../library/logging.rst:862 +msgid "``%(threadName)s``" +msgstr "``%(threadName)s``" + +#: ../../library/logging.rst:862 +msgid "Thread name (if available)." +msgstr "线程名(如果可用)" + +#: ../../library/logging.rst:865 +msgid "*processName* was added." +msgstr "添加了 *processName* " + +#: ../../library/logging.rst:872 +msgid "LoggerAdapter Objects" +msgstr "LoggerAdapter 对象" + +#: ../../library/logging.rst:874 +msgid "" +":class:`LoggerAdapter` instances are used to conveniently pass contextual " +"information into logging calls. For a usage example, see the section on " +":ref:`adding contextual information to your logging output `." +msgstr "" +":class:`LoggerAdapter` 实例会被用来方便地将上下文信息传入日志记录调用。 要获取用法示例,请参阅 " +":ref:`添加上下文信息到你的日志记录输出 ` 部分。" + +#: ../../library/logging.rst:880 +msgid "" +"Returns an instance of :class:`LoggerAdapter` initialized with an underlying" +" :class:`Logger` instance and a dict-like object." +msgstr "" +"返回一个 :class:`LoggerAdapter` 的实例,该实例的初始化使用了下层的 :class:`Logger` 实例和一个字典类对象。" + +#: ../../library/logging.rst:885 +msgid "" +"Modifies the message and/or keyword arguments passed to a logging call in " +"order to insert contextual information. This implementation takes the object" +" passed as *extra* to the constructor and adds it to *kwargs* using key " +"'extra'. The return value is a (*msg*, *kwargs*) tuple which has the " +"(possibly modified) versions of the arguments passed in." +msgstr "" +"修改传递给日志记录调用的消息和/或关键字参数以便插入上下文信息。 此实现接受以 *extra* 形式传给构造器的对象并使用 'extra' 键名将其加入" +" *kwargs*。 返回值为一个 (*msg*, *kwargs*) 元组,其包含(可能经过修改的)传入参数。" + +#: ../../library/logging.rst:891 +msgid "" +"In addition to the above, :class:`LoggerAdapter` supports the following " +"methods of :class:`Logger`: :meth:`~Logger.debug`, :meth:`~Logger.info`, " +":meth:`~Logger.warning`, :meth:`~Logger.error`, :meth:`~Logger.exception`, " +":meth:`~Logger.critical`, :meth:`~Logger.log`, :meth:`~Logger.isEnabledFor`," +" :meth:`~Logger.getEffectiveLevel`, :meth:`~Logger.setLevel` and " +":meth:`~Logger.hasHandlers`. These methods have the same signatures as their" +" counterparts in :class:`Logger`, so you can use the two types of instances " +"interchangeably." +msgstr "" +"在上述方法之外,:class:`LoggerAdapter` 还支持 :class:`Logger` 的下列方法: " +":meth:`~Logger.debug`, " +":meth:`~Logger.info`,:meth:`~Logger.warning`,:meth:`~Logger.error`, " +":meth:`~Logger.exception`, " +":meth:`~Logger.critical`,:meth:`~Logger.log`,:meth:`~Logger.isEnabledFor`,:meth:`~Logger.getEffectiveLevel`,:meth:`~Logger.setLevel`" +" 以及 :meth:`~Logger.hasHandlers`。 这些方法具有与它们在 :class:`Logger` " +"中的对应方法相同的签名,因此你可以互换使用这两种类型的实例。" + +#: ../../library/logging.rst:900 +msgid "" +"The :meth:`~Logger.isEnabledFor`, :meth:`~Logger.getEffectiveLevel`, " +":meth:`~Logger.setLevel` and :meth:`~Logger.hasHandlers` methods were added " +"to :class:`LoggerAdapter`. These methods delegate to the underlying logger." +msgstr "" +":meth:`~Logger.isEnabledFor`, :meth:`~Logger.getEffectiveLevel`, " +":meth:`~Logger.setLevel` 和 :meth:`~Logger.hasHandlers` 方法已被添加到 " +":class:`LoggerAdapter`。 这些方法会委托给下层的日志记录器。" + +#: ../../library/logging.rst:905 +msgid "" +"Attribute :attr:`manager` and method :meth:`_log` were added, which delegate" +" to the underlying logger and allow adapters to be nested." +msgstr "增加了 :attr:`manager` 属性和 :meth:`_log` 方法,它们会委托给下层的日志记录器并允许适配器嵌套。" + +#: ../../library/logging.rst:911 +msgid "Thread Safety" +msgstr "线程安全" + +#: ../../library/logging.rst:913 +msgid "" +"The logging module is intended to be thread-safe without any special work " +"needing to be done by its clients. It achieves this though using threading " +"locks; there is one lock to serialize access to the module's shared data, " +"and each handler also creates a lock to serialize access to its underlying " +"I/O." +msgstr "" +"logging 模块的目标是使客户端不必执行任何特殊操作即可确保线程安全。 " +"它通过使用线程锁来达成这个目标;用一个锁来序列化对模块共享数据的访问,并且每个处理程序也会创建一个锁来序列化对其下层 I/O 的访问。" + +#: ../../library/logging.rst:918 +msgid "" +"If you are implementing asynchronous signal handlers using the :mod:`signal`" +" module, you may not be able to use logging from within such handlers. This " +"is because lock implementations in the :mod:`threading` module are not " +"always re-entrant, and so cannot be invoked from such signal handlers." +msgstr "" +"如果你要使用 :mod:`signal` 模块来实现异步信号处理程序,则可能无法在这些处理程序中使用 logging。 这是因为 " +":mod:`threading` 模块中的锁实现并非总是可重入的,所以无法从此类信号处理程序唤起。" + +#: ../../library/logging.rst:925 +msgid "Module-Level Functions" +msgstr "模块级函数" + +#: ../../library/logging.rst:927 +msgid "" +"In addition to the classes described above, there are a number of module-" +"level functions." +msgstr "在上述的类之外,还有一些模块级的函数。" + +#: ../../library/logging.rst:933 +msgid "" +"Return a logger with the specified name or, if name is ``None``, return a " +"logger which is the root logger of the hierarchy. If specified, the name is " +"typically a dot-separated hierarchical name like *'a'*, *'a.b'* or " +"*'a.b.c.d'*. Choice of these names is entirely up to the developer who is " +"using logging." +msgstr "" +"返回具有指定 name 的日志记录器,或者当 name 为 ``None`` 时返回层级结构中的根日志记录器。 如果指定了 " +"name,它通常是以点号分隔的带层级结构的名称,如 *'a'*、*'a.b'* 或 *'a.b.c.d'*。 这些名称的选择完全取决于使用 " +"logging 的开发者。" + +#: ../../library/logging.rst:938 +msgid "" +"All calls to this function with a given name return the same logger " +"instance. This means that logger instances never need to be passed between " +"different parts of an application." +msgstr "所有用给定的 name 对该函数的调用都将返回相同的日志记录器实例。 这意味着日志记录器实例不需要在应用的各部分间传递。" + +#: ../../library/logging.rst:945 +msgid "" +"Return either the standard :class:`Logger` class, or the last class passed " +"to :func:`setLoggerClass`. This function may be called from within a new " +"class definition, to ensure that installing a customized :class:`Logger` " +"class will not undo customizations already applied by other code. For " +"example::" +msgstr "" +"返回标准的 :class:`Logger` 类,或是最近传给 :func:`setLoggerClass` 的类。 " +"此函数可以从一个新的类定义中调用,以确保安装自定义的 :class:`Logger` 类不会撤销其他代码已经应用的自定义操作。 例如::" + +#: ../../library/logging.rst:956 +msgid "Return a callable which is used to create a :class:`LogRecord`." +msgstr "返回一个被用来创建 :class:`LogRecord` 的可调用对象。" + +#: ../../library/logging.rst:958 +msgid "" +"This function has been provided, along with :func:`setLogRecordFactory`, to " +"allow developers more control over how the :class:`LogRecord` representing a" +" logging event is constructed." +msgstr "" +"此函数与 :func:`setLogRecordFactory` 一起提供,以允许开发者对表示日志记录事件的 :class:`LogRecord` " +"的构造有更好的控制。" + +#: ../../library/logging.rst:963 +msgid "" +"See :func:`setLogRecordFactory` for more information about the how the " +"factory is called." +msgstr "请参阅 :func:`setLogRecordFactory` 了解有关如何调用该工厂方法的更多信息。" + +#: ../../library/logging.rst:968 +msgid "" +"Logs a message with level :const:`DEBUG` on the root logger. The *msg* is " +"the message format string, and the *args* are the arguments which are merged" +" into *msg* using the string formatting operator. (Note that this means that" +" you can use keywords in the format string, together with a single " +"dictionary argument.)" +msgstr "" +"在根日志记录器上记录一条 :const:`DEBUG` 级别的消息。 *msg* 是消息格式字符串,而 *args* 是要使用字符串格式化运算符合并到 " +"*msg* 的参数。 (请注意这意味着你可以在格式字符串中使用关键字以及单个字典参数。)" + +#: ../../library/logging.rst:973 +msgid "" +"There are three keyword arguments in *kwargs* which are inspected: " +"*exc_info* which, if it does not evaluate as false, causes exception " +"information to be added to the logging message. If an exception tuple (in " +"the format returned by :func:`sys.exc_info`) or an exception instance is " +"provided, it is used; otherwise, :func:`sys.exc_info` is called to get the " +"exception information." +msgstr "" +"在 *kwargs* 中有三个关键字参数会被检查: *exc_info* 参数如果不为假值则会将异常信息添加到日志记录消息。 如果提供了异常元组(为 " +":func:`sys.exc_info` 的返回值格式)或异常实例则它会被使用;在其他情况下,会调用 :func:`sys.exc_info` " +"以获取异常信息。" + +#: ../../library/logging.rst:999 +msgid "" +"The third optional keyword argument is *extra* which can be used to pass a " +"dictionary which is used to populate the __dict__ of the LogRecord created " +"for the logging event with user-defined attributes. These custom attributes " +"can then be used as you like. For example, they could be incorporated into " +"logged messages. For example::" +msgstr "" +"第三个可选关键字参数是 *extra*,它可被用来传递一个字典,该字典会被用来填充为日志记录事件创建并附带用户自定义属性的 LogRecord 的 " +"__dict__。 之后将可按你的需要使用这些自定义属性。 例如,可以将它们合并到已记录的消息中。 举例来说::" + +#: ../../library/logging.rst:1010 +msgid "would print something like:" +msgstr "应当会打印出这样的内容:" + +#: ../../library/logging.rst:1020 +msgid "" +"If you choose to use these attributes in logged messages, you need to " +"exercise some care. In the above example, for instance, the " +":class:`Formatter` has been set up with a format string which expects " +"'clientip' and 'user' in the attribute dictionary of the LogRecord. If these" +" are missing, the message will not be logged because a string formatting " +"exception will occur. So in this case, you always need to pass the *extra* " +"dictionary with these keys." +msgstr "" +"如果你选择在已记录的消息中使用这些属性,则需要格外小心。 例如在上面的示例中,:class:`Formatter` 已设置了格式字符串,其在 " +"LogRecord 的属性字典中应有 'clientip' 和 'user'。 " +"如果缺少这些属性,消息将不被记录,因为会引发字符串格式化异常,你始终需要传入带有这些键的 *extra* 字典。" + +#: ../../library/logging.rst:1039 +msgid "" +"Logs a message with level :const:`INFO` on the root logger. The arguments " +"are interpreted as for :func:`debug`." +msgstr "在根日志记录器上记录一条 :const:`INFO` 级别的消息。 参数解释同 :func:`debug`。" + +#: ../../library/logging.rst:1045 +msgid "" +"Logs a message with level :const:`WARNING` on the root logger. The arguments" +" are interpreted as for :func:`debug`." +msgstr "在根日志记录器上记录一条 :const:`WARNING` 级别的消息。 参数解释同 :func:`debug`。" + +#: ../../library/logging.rst:1048 +msgid "" +"There is an obsolete function ``warn`` which is functionally identical to " +"``warning``. As ``warn`` is deprecated, please do not use it - use " +"``warning`` instead." +msgstr "" +"有一个已过时方法 ``warn`` 其功能与 ``warning`` 一致。 由于 ``warn`` 已被弃用,请不要使用它 —— 而是改用 " +"``warning``。" + +#: ../../library/logging.rst:1055 +msgid "" +"Logs a message with level :const:`ERROR` on the root logger. The arguments " +"are interpreted as for :func:`debug`." +msgstr "在根日志记录器上记录一条 :const:`ERROR` 级别的消息。 参数解释同 :func:`debug`。" + +#: ../../library/logging.rst:1061 +msgid "" +"Logs a message with level :const:`CRITICAL` on the root logger. The " +"arguments are interpreted as for :func:`debug`." +msgstr "在根日志记录器上记录一条 :const:`CRITICAL` 级别的消息。 参数解释同 :func:`debug`。" + +#: ../../library/logging.rst:1067 +msgid "" +"Logs a message with level :const:`ERROR` on the root logger. The arguments " +"are interpreted as for :func:`debug`. Exception info is added to the logging" +" message. This function should only be called from an exception handler." +msgstr "" +"在根日志记录器上记录一条 :const:`ERROR` 级别的消息。 参数解释同 :func:`debug`。 异常信息将被添加到日志消息中。 " +"此函数应当仅从异常处理程序中调用。" + +#: ../../library/logging.rst:1073 +msgid "" +"Logs a message with level *level* on the root logger. The other arguments " +"are interpreted as for :func:`debug`." +msgstr "在根日志记录器上记录一条 *level* 级别的消息。 其他参数解释同 :func:`debug`。" + +#: ../../library/logging.rst:1078 +msgid "" +"Provides an overriding level *level* for all loggers which takes precedence " +"over the logger's own level. When the need arises to temporarily throttle " +"logging output down across the whole application, this function can be " +"useful. Its effect is to disable all logging calls of severity *level* and " +"below, so that if you call it with a value of INFO, then all INFO and DEBUG " +"events would be discarded, whereas those of severity WARNING and above would" +" be processed according to the logger's effective level. If " +"``logging.disable(logging.NOTSET)`` is called, it effectively removes this " +"overriding level, so that logging output again depends on the effective " +"levels of individual loggers." +msgstr "" +"为所有日志记录器提供重写的级别 *level*,其优先级高于日志记录器自己的级别。 当需要临时限制整个应用程序中的日志记录输出时,此功能会很有用。 " +"它的效果是禁用所有重要程度为 *level* 及以下的日志记录调用,因此如果你附带 INFO 值调用它,则所有 INFO 和 DEBUG " +"事件就会被丢弃,而重要程度为 WARNING 以及上的事件将根据日志记录器的当前有效级别来处理。 如果 " +"``logging.disable(logging.NOTSET)`` " +"被调用,它将移除这个重写的级别,因此日志记录输出会再次取决于单个日志记录器的有效级别。" + +#: ../../library/logging.rst:1089 +msgid "" +"Note that if you have defined any custom logging level higher than " +"``CRITICAL`` (this is not recommended), you won't be able to rely on the " +"default value for the *level* parameter, but will have to explicitly supply " +"a suitable value." +msgstr "" +"请注意如果你定义了任何高于 ``CRITICAL`` 的自定义日志级别(并不建议这样做),你就将无法沿用 *level* " +"形参的默认值,而必须显式地提供适当的值。" + +#: ../../library/logging.rst:1094 +msgid "" +"The *level* parameter was defaulted to level ``CRITICAL``. See " +":issue:`28524` for more information about this change." +msgstr "*level* 形参默认级别为 ``CRITICAL``。 请参阅 :issue:`28524` 了解此项改变的更多细节。" + +#: ../../library/logging.rst:1100 +msgid "" +"Associates level *level* with text *levelName* in an internal dictionary, " +"which is used to map numeric levels to a textual representation, for example" +" when a :class:`Formatter` formats a message. This function can also be used" +" to define your own levels. The only constraints are that all levels used " +"must be registered using this function, levels should be positive integers " +"and they should increase in increasing order of severity." +msgstr "" +"在一个内部字典中关联级别 *level* 与文本 *levelName*,该字典会被用来将数字级别映射为文本表示形式,例如在 " +":class:`Formatter` 格式化消息的时候。 此函数也可被用来定义你自己的级别。 " +"唯一的限制是自定义的所有级别必须使用此函数来注册,级别值必须为正整数并且其应随严重程度而递增。" + +#: ../../library/logging.rst:1107 +msgid "" +"If you are thinking of defining your own levels, please see the section on " +":ref:`custom-levels`." +msgstr "如果你考虑要定义你自己的级别,请参阅 :ref:`custom-levels` 部分。" + +#: ../../library/logging.rst:1112 +msgid "" +"Returns the textual or numeric representation of logging level *level*." +msgstr "返回日志记录级别 *level* 的字符串表示。" + +#: ../../library/logging.rst:1114 +msgid "" +"If *level* is one of the predefined levels :const:`CRITICAL`, " +":const:`ERROR`, :const:`WARNING`, :const:`INFO` or :const:`DEBUG` then you " +"get the corresponding string. If you have associated levels with names using" +" :func:`addLevelName` then the name you have associated with *level* is " +"returned. If a numeric value corresponding to one of the defined levels is " +"passed in, the corresponding string representation is returned." +msgstr "" +"如果 *level* 为预定义的级别 :const:`CRITICAL`, :const:`ERROR`, :const:`WARNING`, " +":const:`INFO` 或 :const:`DEBUG` 之一则你会得到相应的字符串。 如果你使用 :func:`addLevelName` " +"将级别关联到名称则返回你为 *level* 所关联的名称。 如果传入了与已定义级别相对应的数字值,则返回对应的字符串表示。" + +#: ../../library/logging.rst:1121 +msgid "" +"The *level* parameter also accepts a string representation of the level such" +" as 'INFO'. In such cases, this functions returns the corresponding numeric " +"value of the level." +msgstr "*level* 形参也接受级别的字符串表示例如 'INFO'。 在这种情况下,此函数将返回级别所对应的数字值。" + +#: ../../library/logging.rst:1125 +msgid "" +"If no matching numeric or string value is passed in, the string 'Level %s' %" +" level is returned." +msgstr "如果未传入可匹配的数字或字符串值,则返回字符串 'Level %s' % level。" + +#: ../../library/logging.rst:1128 +msgid "" +"Levels are internally integers (as they need to be compared in the logging " +"logic). This function is used to convert between an integer level and the " +"level name displayed in the formatted log output by means of the " +"``%(levelname)s`` format specifier (see :ref:`logrecord-attributes`), and " +"vice versa." +msgstr "" +"级别在内部以整数表示(因为它们在日志记录逻辑中需要进行比较)。 此函数被用于在整数级别与通过 ``%(levelname)s`` " +"格式描述符方式在格式化日志输出中显示的级别名称之间进行相互的转换 (参见 :ref:`logrecord-attributes`)。" + +#: ../../library/logging.rst:1134 +msgid "" +"In Python versions earlier than 3.4, this function could also be passed a " +"text level, and would return the corresponding numeric value of the level. " +"This undocumented behaviour was considered a mistake, and was removed in " +"Python 3.4, but reinstated in 3.4.2 due to retain backward compatibility." +msgstr "" +"在早于 3.4 的 Python 版本中,此函数也可传入一个字符串形式的级别名称,并将返回对应的级别数字值。 此未记入文档的行为被视为是一个错误,并在 " +"Python 3.4 中被移除,但又在 3.4.2 中被恢复以保持向下兼容性。" + +#: ../../library/logging.rst:1142 +msgid "" +"Creates and returns a new :class:`LogRecord` instance whose attributes are " +"defined by *attrdict*. This function is useful for taking a pickled " +":class:`LogRecord` attribute dictionary, sent over a socket, and " +"reconstituting it as a :class:`LogRecord` instance at the receiving end." +msgstr "" +"创建并返回一个新的 :class:`LogRecord` 实例,实例属性由 *attrdict* 定义。 此函数适用于接受一个通过套接字传输的封存好的 " +":class:`LogRecord` 属性字典,并在接收端将其重建为一个 :class:`LogRecord` 实例。" + +#: ../../library/logging.rst:1150 +msgid "" +"Does basic configuration for the logging system by creating a " +":class:`StreamHandler` with a default :class:`Formatter` and adding it to " +"the root logger. The functions :func:`debug`, :func:`info`, :func:`warning`," +" :func:`error` and :func:`critical` will call :func:`basicConfig` " +"automatically if no handlers are defined for the root logger." +msgstr "" +"通过使用默认的 :class:`Formatter` 创建一个 :class:`StreamHandler` " +"并将其加入根日志记录器来为日志记录系统执行基本配置。 如果没有为根日志记录器定义处理器则 :func:`debug`, :func:`info`, " +":func:`warning`, :func:`error` 和 :func:`critical` 等函数将自动调用 " +":func:`basicConfig`。" + +#: ../../library/logging.rst:1156 +msgid "" +"This function does nothing if the root logger already has handlers " +"configured, unless the keyword argument *force* is set to ``True``." +msgstr "如果根日志记录器已配置了处理器则此函数将不执行任何操作,除非关键字参数 *force* 被设为 ``True``。" + +#: ../../library/logging.rst:1159 +msgid "" +"This function should be called from the main thread before other threads are" +" started. In versions of Python prior to 2.7.1 and 3.2, if this function is " +"called from multiple threads, it is possible (in rare circumstances) that a " +"handler will be added to the root logger more than once, leading to " +"unexpected results such as messages being duplicated in the log." +msgstr "" +"此函数应当在其他线程启动之前从主线程被调用。 在 2.7.1 和 3.2 之前的 Python " +"版本中,如果此函数从多个线程被调用,一个处理器(在极少的情况下)有可能被多次加入根日志记录器,导致非预期的结果例如日志中的消息出现重复。" + +#: ../../library/logging.rst:1166 +msgid "The following keyword arguments are supported." +msgstr "支持以下关键字参数。" + +#: ../../library/logging.rst:1173 +msgid "*filename*" +msgstr "*filename*" + +#: ../../library/logging.rst:1173 +msgid "" +"Specifies that a FileHandler be created, using the specified filename, " +"rather than a StreamHandler." +msgstr "使用指定的文件名而不是 StreamHandler 创建 FileHandler。" + +#: ../../library/logging.rst:1177 +msgid "*filemode*" +msgstr "*filemode*" + +#: ../../library/logging.rst:1177 +msgid "" +"If *filename* is specified, open the file in this :ref:`mode `. " +"Defaults to ``'a'``." +msgstr "如果指定了 *filename*,则用此 :ref:`模式 ` 打开该文件。 默认模式为 ``'a'``。" + +#: ../../library/logging.rst:1181 +msgid "*format*" +msgstr "*format*" + +#: ../../library/logging.rst:1181 +msgid "" +"Use the specified format string for the handler. Defaults to attributes " +"``levelname``, ``name`` and ``message`` separated by colons." +msgstr "使用指定的格式字符串作为处理器。 默认为属性以冒号分隔的 ``levelname``, ``name`` 和 ``message``。" + +#: ../../library/logging.rst:1186 +msgid "*datefmt*" +msgstr "*datefmt*" + +#: ../../library/logging.rst:1186 +msgid "" +"Use the specified date/time format, as accepted by :func:`time.strftime`." +msgstr "使用指定的日期/时间格式,与 :func:`time.strftime` 所接受的格式相同。" + +#: ../../library/logging.rst:1189 +msgid "*style*" +msgstr "*style*" + +#: ../../library/logging.rst:1189 +msgid "" +"If *format* is specified, use this style for the format string. One of " +"``'%'``, ``'{'`` or ``'$'`` for :ref:`printf-style `," +" :meth:`str.format` or :class:`string.Template` respectively. Defaults to " +"``'%'``." +msgstr "" +"如果指定了 *format*,将为格式字符串使用此风格。 ``'%'``, ``'{'`` 或 ``'$'`` 分别对应于 :ref:`printf " +"风格 `, :meth:`str.format` 或 :class:`string.Template`。 " +"默认为 ``'%'``。" + +#: ../../library/logging.rst:1197 +msgid "*level*" +msgstr "*level*" + +#: ../../library/logging.rst:1197 +msgid "Set the root logger level to the specified :ref:`level `." +msgstr "设置根记录器级别为指定的 :ref:`level `." + +#: ../../library/logging.rst:1200 +msgid "*stream*" +msgstr "*stream*" + +#: ../../library/logging.rst:1200 +msgid "" +"Use the specified stream to initialize the StreamHandler. Note that this " +"argument is incompatible with *filename* - if both are present, a " +"``ValueError`` is raised." +msgstr "" +"使用指定的流初始化 StreamHandler。 请注意此参数与 *filename* 是不兼容的 - 如果两者同时存在,则会引发 " +"``ValueError``。" + +#: ../../library/logging.rst:1205 +msgid "*handlers*" +msgstr "*handlers*" + +#: ../../library/logging.rst:1205 +msgid "" +"If specified, this should be an iterable of already created handlers to add " +"to the root logger. Any handlers which don't already have a formatter set " +"will be assigned the default formatter created in this function. Note that " +"this argument is incompatible with *filename* or *stream* - if both are " +"present, a ``ValueError`` is raised." +msgstr "" +"如果指定,这应为一个包含要加入根日志记录器的已创建处理器的可迭代对象。 任何尚未设置格式描述符的处理器将被设置为在此函数中创建的默认格式描述符。 " +"请注意此参数与 *filename* 或 *stream* 不兼容 —— 如果两者同时存在,则会引发 ``ValueError``。" + +#: ../../library/logging.rst:1214 +msgid "*force*" +msgstr "*force*" + +#: ../../library/logging.rst:1214 +msgid "" +"If this keyword argument is specified as true, any existing handlers " +"attached to the root logger are removed and closed, before carrying out the " +"configuration as specified by the other arguments." +msgstr "如果将此关键字参数指定为 true,则在执行其他参数指定的配置之前,将移除并关闭附加到根记录器的所有现有处理器。" + +#: ../../library/logging.rst:1220 +msgid "*encoding*" +msgstr "*encoding*" + +#: ../../library/logging.rst:1220 +msgid "" +"If this keyword argument is specified along with *filename*, its value is " +"used when the FileHandler is created, and thus used when opening the output " +"file." +msgstr "如果此关键字参数与 *filename* 一同被指定,则该值会在创建 FileHandler 时被使用,因而也会在打开输出文件时被使用。" + +#: ../../library/logging.rst:1225 +msgid "*errors*" +msgstr "*errors*" + +#: ../../library/logging.rst:1225 +msgid "" +"If this keyword argument is specified along with *filename*, its value is " +"used when the FileHandler is created, and thus used when opening the output " +"file. If not specified, the value 'backslashreplace' is used. Note that if " +"``None`` is specified, it will be passed as such to func:`open`, which means" +" that it will be treated the same as passing 'errors'." +msgstr "" +"如果此关键字参数与 *filename* 一同被指定,则该值会在创建 FileHandler 时被使用,因而也会在打开输出文件时被使用。 " +"如果未指定,则会使用值 'backslashreplace'。 请注意如果指定为 ``None``,它将被原样传给 " +"func:`open`,这意味着将会与传入 'errors' 一样处理。" + +#: ../../library/logging.rst:1236 +msgid "The *style* argument was added." +msgstr "增加了 *style* 参数。" + +#: ../../library/logging.rst:1239 +msgid "" +"The *handlers* argument was added. Additional checks were added to catch " +"situations where incompatible arguments are specified (e.g. *handlers* " +"together with *stream* or *filename*, or *stream* together with *filename*)." +msgstr "" +"增加了 *handlers* 参数。 增加了额外的检查来捕获指定不兼容参数的情况 (例如同时指定 *handlers* 与 *stream* 或 " +"*filename*,或者同时指定 *stream* 与 *filename*)。" + +#: ../../library/logging.rst:1245 +msgid "The *force* argument was added." +msgstr "增加了 *force* 参数。" + +#: ../../library/logging.rst:1248 +msgid "The *encoding* and *errors* arguments were added." +msgstr "增加了 *encoding* 和 *errors* 参数。" + +#: ../../library/logging.rst:1253 +msgid "" +"Informs the logging system to perform an orderly shutdown by flushing and " +"closing all handlers. This should be called at application exit and no " +"further use of the logging system should be made after this call." +msgstr "通过刷新和关闭所有处理程序来通知日志记录系统执行有序停止。 此函数应当在应用退出时被调用并且在此调用之后不应再使用日志记录系统。" + +#: ../../library/logging.rst:1257 +msgid "" +"When the logging module is imported, it registers this function as an exit " +"handler (see :mod:`atexit`), so normally there's no need to do that " +"manually." +msgstr "当 logging 模块被导入时,它会将此函数注册为退出处理程序 (参见 :mod:`atexit`),因此通常不需要手动执行该操作。" + +#: ../../library/logging.rst:1264 +msgid "" +"Tells the logging system to use the class *klass* when instantiating a " +"logger. The class should define :meth:`__init__` such that only a name " +"argument is required, and the :meth:`__init__` should call " +":meth:`Logger.__init__`. This function is typically called before any " +"loggers are instantiated by applications which need to use custom logger " +"behavior. After this call, as at any other time, do not instantiate loggers " +"directly using the subclass: continue to use the :func:`logging.getLogger` " +"API to get your loggers." +msgstr "" +"通知日志记录系统在实例化日志记录器时使用 *klass* 类。 该类应当定义 :meth:`__init__` 使其只要求一个 name 参数,并且 " +":meth:`__init__` 应当调用 :meth:`Logger.__init__`。 " +"此函数通常会在需要使用自定义日志记录器行为的应用程序实例化任何日志记录器之前被调用。 " +"在此调用之后,在任何其他时刻都不要使用该子类来直接实例化日志记录器:请继续使用 :func:`logging.getLogger` API " +"来获取你的日志记录器。" + +#: ../../library/logging.rst:1275 +msgid "Set a callable which is used to create a :class:`LogRecord`." +msgstr "设置一个用来创建 :class:`LogRecord` 的可调用对象。" + +#: ../../library/logging.rst:1277 +msgid "The factory callable to be used to instantiate a log record." +msgstr "用来实例化日志记录的工厂可调用对象。" + +#: ../../library/logging.rst:1279 +msgid "" +"This function has been provided, along with :func:`getLogRecordFactory`, to " +"allow developers more control over how the :class:`LogRecord` representing a" +" logging event is constructed." +msgstr "" +"此函数与 :func:`getLogRecordFactory` 一起提供,以便允许开发者对如何构造表示日志记录事件的 " +":class:`LogRecord` 有更好的控制。" + +#: ../../library/logging.rst:1284 +msgid "The factory has the following signature:" +msgstr "可调用对象 factory 具有如下签名:" + +#: ../../library/logging.rst:1286 +msgid "" +"``factory(name, level, fn, lno, msg, args, exc_info, func=None, sinfo=None, " +"**kwargs)``" +msgstr "" +"``factory(name, level, fn, lno, msg, args, exc_info, func=None, sinfo=None, " +"**kwargs)``" + +#: ../../library/logging.rst:1288 +msgid "The logger name." +msgstr "日志记录器名称" + +#: ../../library/logging.rst:0 +msgid "level" +msgstr "level" + +#: ../../library/logging.rst:1289 +msgid "The logging level (numeric)." +msgstr "日志记录级别(数字)。" + +#: ../../library/logging.rst:0 +msgid "fn" +msgstr "fn" + +#: ../../library/logging.rst:1290 +msgid "The full pathname of the file where the logging call was made." +msgstr "进行日志记录调用的文件的完整路径名。" + +#: ../../library/logging.rst:0 +msgid "lno" +msgstr "lno" + +#: ../../library/logging.rst:1291 +msgid "The line number in the file where the logging call was made." +msgstr "记录调用所在文件中的行号。" + +#: ../../library/logging.rst:1292 +msgid "The logging message." +msgstr "日志消息。" + +#: ../../library/logging.rst:1293 +msgid "The arguments for the logging message." +msgstr "日志记录消息的参数。" + +#: ../../library/logging.rst:1294 +msgid "An exception tuple, or ``None``." +msgstr "异常元组,或 ``None`` 。" + +#: ../../library/logging.rst:0 +msgid "func" +msgstr "func" + +#: ../../library/logging.rst:1295 +msgid "The name of the function or method which invoked the logging call." +msgstr "调用日志记录调用的函数或方法的名称。" + +#: ../../library/logging.rst:0 +msgid "sinfo" +msgstr "sinfo" + +#: ../../library/logging.rst:1297 +msgid "" +"A stack traceback such as is provided by :func:`traceback.print_stack`, " +"showing the call hierarchy." +msgstr "与 :func:`traceback.print_stack` 所提供的类似的栈回溯信息,显示调用的层级结构。" + +#: ../../library/logging.rst:0 +msgid "kwargs" +msgstr "kwargs" + +#: ../../library/logging.rst:1299 +msgid "Additional keyword arguments." +msgstr "其他关键字参数。" + +#: ../../library/logging.rst:1303 +msgid "Module-Level Attributes" +msgstr "模块级属性" + +#: ../../library/logging.rst:1307 +msgid "" +"A \"handler of last resort\" is available through this attribute. This is a " +":class:`StreamHandler` writing to ``sys.stderr`` with a level of " +"``WARNING``, and is used to handle logging events in the absence of any " +"logging configuration. The end result is to just print the message to " +"``sys.stderr``. This replaces the earlier error message saying that \"no " +"handlers could be found for logger XYZ\". If you need the earlier behaviour " +"for some reason, ``lastResort`` can be set to ``None``." +msgstr "" +"通过此属性提供的“最后处理者”。 这是一个以 ``WARNING`` 级别写入到 ``sys.stderr`` 的 " +":class:`StreamHandler`,用于在没有任何日志记录配置的情况下处理日志记录事件。 最终结果就是将消息打印到 " +"``sys.stderr``,这会替代先前形式为 \"no handlers could be found for logger XYZ\" " +"的错误消息。 如果出于某种原因你需要先前的行为,可将 ``lastResort`` 设为 ``None``。" + +#: ../../library/logging.rst:1318 +msgid "Integration with the warnings module" +msgstr "与警告模块集成" + +#: ../../library/logging.rst:1320 +msgid "" +"The :func:`captureWarnings` function can be used to integrate :mod:`logging`" +" with the :mod:`warnings` module." +msgstr ":func:`captureWarnings` 函数可用来将 :mod:`logging` 和 :mod:`warnings` 模块集成。" + +#: ../../library/logging.rst:1325 +msgid "" +"This function is used to turn the capture of warnings by logging on and off." +msgstr "此函数用于打开和关闭日志系统对警告的捕获。" + +#: ../../library/logging.rst:1328 +msgid "" +"If *capture* is ``True``, warnings issued by the :mod:`warnings` module will" +" be redirected to the logging system. Specifically, a warning will be " +"formatted using :func:`warnings.formatwarning` and the resulting string " +"logged to a logger named ``'py.warnings'`` with a severity of " +":const:`WARNING`." +msgstr "" +"如果 *capture* 是 ``True``,则 :mod:`warnings` 模块发出的警告将重定向到日志记录系统。具体来说,将使用 " +":func:`warnings.formatwarning` 格式化警告信息,并将结果字符串使用 :const:`WARNING` 等级记录到名为 " +"``'py.warnings'`` 的记录器中。" + +#: ../../library/logging.rst:1333 +msgid "" +"If *capture* is ``False``, the redirection of warnings to the logging system" +" will stop, and warnings will be redirected to their original destinations " +"(i.e. those in effect before ``captureWarnings(True)`` was called)." +msgstr "" +"如果 *capture* 是 ``False``,则将停止将警告重定向到日志记录系统,并且将警告重定向到其原始目标(即在 " +"``captureWarnings(True)`` 调用之前的有效目标)。" + +#: ../../library/logging.rst:1341 +msgid "Module :mod:`logging.config`" +msgstr ":mod:`logging.config` 模块" + +#: ../../library/logging.rst:1341 +msgid "Configuration API for the logging module." +msgstr "日志记录模块的配置 API 。" + +#: ../../library/logging.rst:1344 +msgid "Module :mod:`logging.handlers`" +msgstr ":mod:`logging.handlers` 模块" + +#: ../../library/logging.rst:1344 +msgid "Useful handlers included with the logging module." +msgstr "日志记录模块附带的有用处理器。" + +#: ../../library/logging.rst:1348 +msgid ":pep:`282` - A Logging System" +msgstr ":pep:`282` - Logging 系统" + +#: ../../library/logging.rst:1347 +msgid "" +"The proposal which described this feature for inclusion in the Python " +"standard library." +msgstr "该提案描述了Python标准库中包含的这个特性。" + +#: ../../library/logging.rst:1353 +msgid "" +"`Original Python logging package `_" +msgstr "" +"`Original Python logging package `_" + +#: ../../library/logging.rst:1351 +msgid "" +"This is the original source for the :mod:`logging` package. The version of " +"the package available from this site is suitable for use with Python 1.5.2, " +"2.1.x and 2.2.x, which do not include the :mod:`logging` package in the " +"standard library." +msgstr "" +"这是该 :mod:`logging` 包的原始来源。该站点提供的软件包版本适用于 Python 1.5.2、2.1.x 和 2.2.x,它们不被 " +":mod:`logging` 包含在标准库中。" diff --git a/library/lzma.po b/library/lzma.po new file mode 100644 index 000000000..fe86cdb67 --- /dev/null +++ b/library/lzma.po @@ -0,0 +1,723 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) 2001-2024, Python Software Foundation +# This file is distributed under the same license as the Python package. +# FIRST AUTHOR , YEAR. +# +# Translators: +# Dingyuan Wang , 2019 +# ppcfish , 2019 +# 汪心禾 , 2019 +# Freesand Leo , 2020 +# Rafael Fontenelle , 2024 +# +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: Python 3.9\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2024-07-20 02:59+0000\n" +"PO-Revision-Date: 2017-02-16 23:17+0000\n" +"Last-Translator: Rafael Fontenelle , 2024\n" +"Language-Team: Chinese (China) (https://app.transifex.com/python-doc/teams/5390/zh_CN/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: zh_CN\n" +"Plural-Forms: nplurals=1; plural=0;\n" + +#: ../../library/lzma.rst:2 +msgid ":mod:`lzma` --- Compression using the LZMA algorithm" +msgstr ":mod:`lzma` --- 用 LZMA 算法压缩" + +#: ../../library/lzma.rst:12 +msgid "**Source code:** :source:`Lib/lzma.py`" +msgstr "**源代码:** :source:`Lib/lzma.py`" + +#: ../../library/lzma.rst:16 +msgid "" +"This module provides classes and convenience functions for compressing and " +"decompressing data using the LZMA compression algorithm. Also included is a " +"file interface supporting the ``.xz`` and legacy ``.lzma`` file formats used" +" by the :program:`xz` utility, as well as raw compressed streams." +msgstr "" +"此模块提供了可以压缩和解压缩使用 LZMA 压缩算法的数据的类和便携函数。 其中还包含支持 :program:`xz` 工具所使用的 ``.xz`` " +"和旧式 ``.lzma`` 文件格式的文件接口,以及相应的原始压缩数据流。" + +#: ../../library/lzma.rst:21 +msgid "" +"The interface provided by this module is very similar to that of the " +":mod:`bz2` module. However, note that :class:`LZMAFile` is *not* thread-" +"safe, unlike :class:`bz2.BZ2File`, so if you need to use a single " +":class:`LZMAFile` instance from multiple threads, it is necessary to protect" +" it with a lock." +msgstr "" +"此模块所提供的接口与 :mod:`bz2` 模块的非常类似。 但是,请注意 :class:`LZMAFile` *不是* 线程安全的,这与 " +":class:`bz2.BZ2File` 不同,因此如果你需要在多个线程中使用单个 :class:`LZMAFile` 实例,则需要通过锁来保护它。" + +#: ../../library/lzma.rst:29 +msgid "" +"This exception is raised when an error occurs during compression or " +"decompression, or while initializing the compressor/decompressor state." +msgstr "当在压缩或解压缩期间或是在初始化压缩器/解压缩器的状态期间发生错误时此异常会被引发。" + +#: ../../library/lzma.rst:34 +msgid "Reading and writing compressed files" +msgstr "读写压缩文件" + +#: ../../library/lzma.rst:38 +msgid "" +"Open an LZMA-compressed file in binary or text mode, returning a :term:`file" +" object`." +msgstr "以二进制或文本模式打开 LZMA 压缩文件,返回一个 :term:`file object`。" + +#: ../../library/lzma.rst:41 +msgid "" +"The *filename* argument can be either an actual file name (given as a " +":class:`str`, :class:`bytes` or :term:`path-like ` " +"object), in which case the named file is opened, or it can be an existing " +"file object to read from or write to." +msgstr "" +"*filename* 参数可以是一个实际的文件名(以 :class:`str`, :class:`bytes` 或 :term:`路径类 ` 对象的形式给出),在此情况下会打开指定名称的文件,或者可以是一个用于读写的现有文件对象。" + +#: ../../library/lzma.rst:46 +msgid "" +"The *mode* argument can be any of ``\"r\"``, ``\"rb\"``, ``\"w\"``, " +"``\"wb\"``, ``\"x\"``, ``\"xb\"``, ``\"a\"`` or ``\"ab\"`` for binary mode, " +"or ``\"rt\"``, ``\"wt\"``, ``\"xt\"``, or ``\"at\"`` for text mode. The " +"default is ``\"rb\"``." +msgstr "" +"*mode* 参数可以是二进制模式的 ``\"r\"``, ``\"rb\"``, ``\"w\"``, ``\"wb\"``, ``\"x\"``, " +"``\"xb\"``, ``\"a\"`` 或 ``\"ab\"``,或者文本模式的 ``\"rt\"``, ``\"wt\"``, " +"``\"xt\"`` 或 ``\"at\"``。 默认值为 ``\"rb\"``。" + +#: ../../library/lzma.rst:50 ../../library/lzma.rst:95 +msgid "" +"When opening a file for reading, the *format* and *filters* arguments have " +"the same meanings as for :class:`LZMADecompressor`. In this case, the " +"*check* and *preset* arguments should not be used." +msgstr "" +"当打开一个文件用于读取时,*format* 和 *filters* 参数具有与 :class:`LZMADecompressor` 的参数相同的含义。 " +"在此情况下,*check* 和 *preset* 参数不应被使用。" + +#: ../../library/lzma.rst:54 ../../library/lzma.rst:99 +msgid "" +"When opening a file for writing, the *format*, *check*, *preset* and " +"*filters* arguments have the same meanings as for :class:`LZMACompressor`." +msgstr "" +"当打开一个文件用于写入的,*format*, *check*, *preset* 和 *filters* 参数具有与 " +":class:`LZMACompressor` 的参数相同的含义。" + +#: ../../library/lzma.rst:57 +msgid "" +"For binary mode, this function is equivalent to the :class:`LZMAFile` " +"constructor: ``LZMAFile(filename, mode, ...)``. In this case, the " +"*encoding*, *errors* and *newline* arguments must not be provided." +msgstr "" +"对于二进制模式,这个函数等价于 :class:`LZMAFile` 构造器: ``LZMAFile(filename, mode, ...)``。 " +"在这种情况下,不可提供 *encoding*, *errors* 和 *newline* 参数。" + +#: ../../library/lzma.rst:61 +msgid "" +"For text mode, a :class:`LZMAFile` object is created, and wrapped in an " +":class:`io.TextIOWrapper` instance with the specified encoding, error " +"handling behavior, and line ending(s)." +msgstr "" +"对于文本模式,将会创建一个 :class:`LZMAFile` 对象,并将它包装到一个 :class:`io.TextIOWrapper` " +"实例中,此实例带有指定的编码格式、错误处理行为和行结束符。" + +#: ../../library/lzma.rst:65 +msgid "Added support for the ``\"x\"``, ``\"xb\"`` and ``\"xt\"`` modes." +msgstr "增加了对 ``\"x\"``, ``\"xb\"`` 和 ``\"xt\"`` 模式的支持。" + +#: ../../library/lzma.rst:68 ../../library/lzma.rst:126 +msgid "Accepts a :term:`path-like object`." +msgstr "接受一个 :term:`path-like object`。" + +#: ../../library/lzma.rst:74 +msgid "Open an LZMA-compressed file in binary mode." +msgstr "以二进制模式打开一个 LZMA 压缩文件。" + +#: ../../library/lzma.rst:76 +msgid "" +"An :class:`LZMAFile` can wrap an already-open :term:`file object`, or " +"operate directly on a named file. The *filename* argument specifies either " +"the file object to wrap, or the name of the file to open (as a :class:`str`," +" :class:`bytes` or :term:`path-like ` object). When " +"wrapping an existing file object, the wrapped file will not be closed when " +"the :class:`LZMAFile` is closed." +msgstr "" +":class:`LZMAFile` 可以包装在一个已打开的 :term:`file object` 中,或者是在给定名称的文件上直接操作。 " +"*filename* 参数指定所包装的文件对象,或是要打开的文件名称(类型为 :class:`str`, :class:`bytes` 或 " +":term:`路径类 ` 对象)。 如果是包装现有的文件对象,被包装的文件在 :class:`LZMAFile` " +"被关闭时将不会被关闭。" + +#: ../../library/lzma.rst:83 +msgid "" +"The *mode* argument can be either ``\"r\"`` for reading (default), ``\"w\"``" +" for overwriting, ``\"x\"`` for exclusive creation, or ``\"a\"`` for " +"appending. These can equivalently be given as ``\"rb\"``, ``\"wb\"``, " +"``\"xb\"`` and ``\"ab\"`` respectively." +msgstr "" +"*mode* 参数可以是表示读取的 ``\"r\"`` (默认值),表示覆写的 ``\"w\"``,表示单独创建的 ``\"x\"``,或表示添加的 " +"``\"a\"``。 这些模式还可以分别以 ``\"rb\"``, ``\"wb\"``, ``\"xb\"`` 和 ``\"ab\"`` " +"的等价形式给出。" + +#: ../../library/lzma.rst:88 +msgid "" +"If *filename* is a file object (rather than an actual file name), a mode of " +"``\"w\"`` does not truncate the file, and is instead equivalent to " +"``\"a\"``." +msgstr "如果 *filename* 是一个文件对象(而不是实际的文件名),则 ``\"w\"`` 模式并不会截断文件,而会等价于 ``\"a\"``。" + +#: ../../library/lzma.rst:91 +msgid "" +"When opening a file for reading, the input file may be the concatenation of " +"multiple separate compressed streams. These are transparently decoded as a " +"single logical stream." +msgstr "当打开一个文件用于读取时,输入文件可以为多个独立压缩流的拼接。 它们会被作为单个逻辑流被透明地解码。" + +#: ../../library/lzma.rst:102 +msgid "" +":class:`LZMAFile` supports all the members specified by " +":class:`io.BufferedIOBase`, except for :meth:`detach` and :meth:`truncate`. " +"Iteration and the :keyword:`with` statement are supported." +msgstr "" +":class:`LZMAFile` 支持 :class:`io.BufferedIOBase` 所指定的所有成员,但 :meth:`detach` 和 " +":meth:`truncate` 除外。 并支持迭代和 :keyword:`with` 语句。" + +#: ../../library/lzma.rst:106 +msgid "The following method is also provided:" +msgstr "还提供了以下方法:" + +#: ../../library/lzma.rst:110 +msgid "" +"Return buffered data without advancing the file position. At least one byte " +"of data will be returned, unless EOF has been reached. The exact number of " +"bytes returned is unspecified (the *size* argument is ignored)." +msgstr "返回缓冲的数据而不前移文件位置。 至少将返回一个字节的数据,除非已经到达 EOF。 实际返回的字节数不确定(会忽略 *size* 参数)。" + +#: ../../library/lzma.rst:114 +msgid "" +"While calling :meth:`peek` does not change the file position of the " +":class:`LZMAFile`, it may change the position of the underlying file object " +"(e.g. if the :class:`LZMAFile` was constructed by passing a file object for " +"*filename*)." +msgstr "" +"虽然调用 :meth:`peek` 不会改变 :class:`LZMAFile` 的文件位置,但它可能改变下层文件对象的位置(举例来说如果 " +":class:`LZMAFile` 是通过传入一个文件对象作为 *filename* 的话)。" + +#: ../../library/lzma.rst:119 +msgid "Added support for the ``\"x\"`` and ``\"xb\"`` modes." +msgstr "增加了对 ``\"x\"`` 和 ``\"xb\"`` 模式的支持。" + +#: ../../library/lzma.rst:122 +msgid "" +"The :meth:`~io.BufferedIOBase.read` method now accepts an argument of " +"``None``." +msgstr ":meth:`~io.BufferedIOBase.read` 方法现在接受 ``None`` 作为参数。" + +#: ../../library/lzma.rst:131 +msgid "Compressing and decompressing data in memory" +msgstr "在内存中压缩和解压缩数据" + +#: ../../library/lzma.rst:135 +msgid "" +"Create a compressor object, which can be used to compress data " +"incrementally." +msgstr "创建一个压缩器对象,此对象可被用来执行增量压缩。" + +#: ../../library/lzma.rst:137 +msgid "" +"For a more convenient way of compressing a single chunk of data, see " +":func:`compress`." +msgstr "压缩单个数据块的更便捷方式请参阅 :func:`compress`。" + +#: ../../library/lzma.rst:140 +msgid "" +"The *format* argument specifies what container format should be used. " +"Possible values are:" +msgstr "*format* 参数指定应当使用哪种容器格式。 可能的值有:" + +#: ../../library/lzma.rst:144 +msgid ":const:`FORMAT_XZ`: The ``.xz`` container format." +msgstr ":const:`FORMAT_XZ`: ``.xz`` 容器格式。" + +#: ../../library/lzma.rst:144 +msgid "This is the default format." +msgstr "这是默认格式。" + +#: ../../library/lzma.rst:148 +msgid ":const:`FORMAT_ALONE`: The legacy ``.lzma`` container format." +msgstr ":const:`FORMAT_ALONE`: 传统的 ``.lzma`` 容器格式。" + +#: ../../library/lzma.rst:147 +msgid "" +"This format is more limited than ``.xz`` -- it does not support integrity " +"checks or multiple filters." +msgstr "这种格式相比 ``.xz`` 更为受限 -- 它不支持一致性检查或多重过滤器。" + +#: ../../library/lzma.rst:154 +msgid "" +":const:`FORMAT_RAW`: A raw data stream, not using any container format." +msgstr ":const:`FORMAT_RAW`: 原始数据流,不使用任何容器格式。" + +#: ../../library/lzma.rst:151 +msgid "" +"This format specifier does not support integrity checks, and requires that " +"you always specify a custom filter chain (for both compression and " +"decompression). Additionally, data compressed in this manner cannot be " +"decompressed using :const:`FORMAT_AUTO` (see :class:`LZMADecompressor`)." +msgstr "" +"这个格式描述器不支持一致性检查,并且要求你必须指定一个自定义的过滤器链(用于压缩和解压缩)。 此外,以这种方式压缩的数据不可使用 " +":const:`FORMAT_AUTO` 来解压缩 (参见 :class:`LZMADecompressor`)。" + +#: ../../library/lzma.rst:156 +msgid "" +"The *check* argument specifies the type of integrity check to include in the" +" compressed data. This check is used when decompressing, to ensure that the " +"data has not been corrupted. Possible values are:" +msgstr "*check* 参数指定要包含在压缩数据中的一致性检查类型。 这种检查在解压缩时使用,以确保数据没有被破坏。 可能的值是:" + +#: ../../library/lzma.rst:160 +msgid "" +":const:`CHECK_NONE`: No integrity check. This is the default (and the only " +"acceptable value) for :const:`FORMAT_ALONE` and :const:`FORMAT_RAW`." +msgstr "" +":const:`CHECK_NONE`: 没有一致性检查。 这是 :const:`FORMAT_ALONE` 和 :const:`FORMAT_RAW`" +" 的默认值(也是唯一可接受的值)。" + +#: ../../library/lzma.rst:164 +msgid ":const:`CHECK_CRC32`: 32-bit Cyclic Redundancy Check." +msgstr ":const:`CHECK_CRC32`: 32 位循环冗余检查。" + +#: ../../library/lzma.rst:166 +msgid "" +":const:`CHECK_CRC64`: 64-bit Cyclic Redundancy Check. This is the default " +"for :const:`FORMAT_XZ`." +msgstr ":const:`CHECK_CRC64`: 64 位循环冗余检查。 这是 :const:`FORMAT_XZ` 的默认值。" + +#: ../../library/lzma.rst:169 +msgid ":const:`CHECK_SHA256`: 256-bit Secure Hash Algorithm." +msgstr ":const:`CHECK_SHA256`: 256 位安全哈希算法。" + +#: ../../library/lzma.rst:171 +msgid "" +"If the specified check is not supported, an :class:`LZMAError` is raised." +msgstr "如果指定的检查不受支持,则会引发 :class:`LZMAError`。" + +#: ../../library/lzma.rst:173 +msgid "" +"The compression settings can be specified either as a preset compression " +"level (with the *preset* argument), or in detail as a custom filter chain " +"(with the *filters* argument)." +msgstr "压缩设置可被指定为一个预设的压缩等级(通过 *preset* 参数)或以自定义过滤器链来详细设置(通过 *filters* 参数)。" + +#: ../../library/lzma.rst:177 +msgid "" +"The *preset* argument (if provided) should be an integer between ``0`` and " +"``9`` (inclusive), optionally OR-ed with the constant " +":const:`PRESET_EXTREME`. If neither *preset* nor *filters* are given, the " +"default behavior is to use :const:`PRESET_DEFAULT` (preset level ``6``). " +"Higher presets produce smaller output, but make the compression process " +"slower." +msgstr "" +"*preset* 参数(如果提供)应当为一个 ``0`` 到 ``9`` (包括边界) 之间的整数,可以选择与常数 " +":const:`PRESET_EXTREME` 进行 OR 运算。 如果 *preset* 和 *filters* 均未给出,则默认行为是使用 " +":const:`PRESET_DEFAULT` (预设等级 ``6``)。 更高的预设等级会产生更小的输出,但会使得压缩过程更缓慢。" + +#: ../../library/lzma.rst:186 +msgid "" +"In addition to being more CPU-intensive, compression with higher presets " +"also requires much more memory (and produces output that needs more memory " +"to decompress). With preset ``9`` for example, the overhead for an " +":class:`LZMACompressor` object can be as high as 800 MiB. For this reason, " +"it is generally best to stick with the default preset." +msgstr "" +"除了更加 CPU 密集,使用更高的预设等级来压缩还需要更多的内存(并产生需要更多内存来解压缩的输出)。 例如使用预设等级 ``9`` 时,一个 " +":class:`LZMACompressor` 对象的开销可以高达 800 MiB。 出于这样的原因,通常最好是保持使用默认预设等级。" + +#: ../../library/lzma.rst:192 +msgid "" +"The *filters* argument (if provided) should be a filter chain specifier. See" +" :ref:`filter-chain-specs` for details." +msgstr "*filters* 参数(如果提供)应当指定一个过滤器链。 详情参见 :ref:`filter-chain-specs`。" + +#: ../../library/lzma.rst:197 +msgid "" +"Compress *data* (a :class:`bytes` object), returning a :class:`bytes` object" +" containing compressed data for at least part of the input. Some of *data* " +"may be buffered internally, for use in later calls to :meth:`compress` and " +":meth:`flush`. The returned data should be concatenated with the output of " +"any previous calls to :meth:`compress`." +msgstr "" +"压缩 *data* (一个 :class:`bytes` object),返回包含针对输入的至少一部分已压缩数据的 :class:`bytes` 对象。" +" 一部 *data* 可能会被放入内部缓冲区,以便用于后续的 :meth:`compress` 和 :meth:`flush` 调用。 " +"返回的数据应当与之前任何 :meth:`compress` 调用的输出进行拼接。" + +#: ../../library/lzma.rst:205 +msgid "" +"Finish the compression process, returning a :class:`bytes` object containing" +" any data stored in the compressor's internal buffers." +msgstr "结束压缩进程,返回包含保存在压缩器的内部缓冲区中的任意数据的 :class:`bytes` 对象。" + +#: ../../library/lzma.rst:208 +msgid "The compressor cannot be used after this method has been called." +msgstr "调用此方法之后压缩器将不可再被使用。" + +#: ../../library/lzma.rst:213 +msgid "" +"Create a decompressor object, which can be used to decompress data " +"incrementally." +msgstr "创建一个压缩器对象,此对象可被用来执行增量解压缩。" + +#: ../../library/lzma.rst:216 +msgid "" +"For a more convenient way of decompressing an entire compressed stream at " +"once, see :func:`decompress`." +msgstr "一次性解压缩整个压缩数据流的更便捷方式请参阅 :func:`decompress`。" + +#: ../../library/lzma.rst:219 +msgid "" +"The *format* argument specifies the container format that should be used. " +"The default is :const:`FORMAT_AUTO`, which can decompress both ``.xz`` and " +"``.lzma`` files. Other possible values are :const:`FORMAT_XZ`, " +":const:`FORMAT_ALONE`, and :const:`FORMAT_RAW`." +msgstr "" +"*format* 参数指定应当被使用的容器格式。 默认值为 :const:`FORMAT_AUTO`,它可以解压缩 ``.xz`` 和 " +"``.lzma`` 文件。 其他可能的值为 :const:`FORMAT_XZ`, :const:`FORMAT_ALONE` 和 " +":const:`FORMAT_RAW`。" + +#: ../../library/lzma.rst:224 +msgid "" +"The *memlimit* argument specifies a limit (in bytes) on the amount of memory" +" that the decompressor can use. When this argument is used, decompression " +"will fail with an :class:`LZMAError` if it is not possible to decompress the" +" input within the given memory limit." +msgstr "" +"*memlimit* 参数指定解压缩器可以使用的内存上限(字节数)。 当使用此参数时,如果不可能在给定内存上限之内解压缩输入数据则解压缩将失败并引发 " +":class:`LZMAError`。" + +#: ../../library/lzma.rst:229 +msgid "" +"The *filters* argument specifies the filter chain that was used to create " +"the stream being decompressed. This argument is required if *format* is " +":const:`FORMAT_RAW`, but should not be used for other formats. See " +":ref:`filter-chain-specs` for more information about filter chains." +msgstr "" +"*filters* 参数指定用于创建被解压缩数据流的过滤器链。 此参数在 *format* 为 :const:`FORMAT_RAW` " +"时要求提供,但对于其他格式不应使用。 有关过滤器链的更多信息请参阅 :ref:`filter-chain-specs`。" + +#: ../../library/lzma.rst:235 +msgid "" +"This class does not transparently handle inputs containing multiple " +"compressed streams, unlike :func:`decompress` and :class:`LZMAFile`. To " +"decompress a multi-stream input with :class:`LZMADecompressor`, you must " +"create a new decompressor for each stream." +msgstr "" +"这个类不会透明地处理包含多个已压缩数据流的输入,这不同于 :func:`decompress` 和 :class:`LZMAFile`。 要通过 " +":class:`LZMADecompressor` 来解压缩多个数据流输入,你必须为每个数据流都创建一个新的解压缩器。" + +#: ../../library/lzma.rst:242 +msgid "" +"Decompress *data* (a :term:`bytes-like object`), returning uncompressed data" +" as bytes. Some of *data* may be buffered internally, for use in later calls" +" to :meth:`decompress`. The returned data should be concatenated with the " +"output of any previous calls to :meth:`decompress`." +msgstr "" +"解压缩 *data* (一个 :term:`bytes-like object`),返回字节串形式的解压缩数据。 某些 *data* " +"可以在内部被缓冲,以便用于后续的 :meth:`decompress` 调用。 返回的数据应当与之前任何 :meth:`decompress` " +"调用的输出进行拼接。" + +#: ../../library/lzma.rst:248 +msgid "" +"If *max_length* is nonnegative, returns at most *max_length* bytes of " +"decompressed data. If this limit is reached and further output can be " +"produced, the :attr:`~.needs_input` attribute will be set to ``False``. In " +"this case, the next call to :meth:`~.decompress` may provide *data* as " +"``b''`` to obtain more of the output." +msgstr "" +"如果 *max_length* 为非负数,将返回至多 *max_length* 个字节的解压缩数据。 如果达到此限制并且可以产生后续输出,则 " +":attr:`~.needs_input` 属性将被设为 ``False``。 在这种情况下,下一次 :meth:`~.decompress` " +"调用提供的 *data* 可以为 ``b''`` 以获取更多的输出。" + +#: ../../library/lzma.rst:255 +msgid "" +"If all of the input data was decompressed and returned (either because this " +"was less than *max_length* bytes, or because *max_length* was negative), the" +" :attr:`~.needs_input` attribute will be set to ``True``." +msgstr "" +"如果所有输入数据都已被解压缩并返回(或是因为它少于 *max_length* 个字节,或是因为 *max_length* 为负数),则 " +":attr:`~.needs_input` 属性将被设为 ``True``。" + +#: ../../library/lzma.rst:260 +msgid "" +"Attempting to decompress data after the end of stream is reached raises an " +"`EOFError`. Any data found after the end of the stream is ignored and saved" +" in the :attr:`~.unused_data` attribute." +msgstr "" +"在到达数据流末尾之后再尝试解压缩数据会引发 `EOFError`。 在数据流末尾之后获取的任何数据都会被忽略并存储至 " +":attr:`~.unused_data` 属性。" + +#: ../../library/lzma.rst:264 +msgid "Added the *max_length* parameter." +msgstr "添加了 *max_length* 形参。" + +#: ../../library/lzma.rst:269 +msgid "" +"The ID of the integrity check used by the input stream. This may be " +":const:`CHECK_UNKNOWN` until enough of the input has been decoded to " +"determine what integrity check it uses." +msgstr "" +"输入流使用的一致性检查的 ID。 这可能为 :const:`CHECK_UNKNOWN` 直到已解压了足够的输入数据来确定它所使用的一致性检查。" + +#: ../../library/lzma.rst:275 +msgid "``True`` if the end-of-stream marker has been reached." +msgstr "若达到了数据流的末尾标记则为 ``True``。" + +#: ../../library/lzma.rst:279 +msgid "Data found after the end of the compressed stream." +msgstr "在压缩数据流的末尾之后获取的数据。" + +#: ../../library/lzma.rst:281 +msgid "Before the end of the stream is reached, this will be ``b\"\"``." +msgstr "在达到数据流末尾之前,这个值将为 ``b\"\"``。" + +#: ../../library/lzma.rst:285 +msgid "" +"``False`` if the :meth:`.decompress` method can provide more decompressed " +"data before requiring new uncompressed input." +msgstr "如果在要求新的未解压缩输入之前 :meth:`.decompress` 方法可以提供更多的解压缩数据则为 ``False``。" + +#: ../../library/lzma.rst:292 +msgid "" +"Compress *data* (a :class:`bytes` object), returning the compressed data as " +"a :class:`bytes` object." +msgstr "压缩 *data* (一个 :class:`bytes` 对象),返回包含压缩数据的 :class:`bytes` 对象。" + +#: ../../library/lzma.rst:295 +msgid "" +"See :class:`LZMACompressor` above for a description of the *format*, " +"*check*, *preset* and *filters* arguments." +msgstr "" +"参见上文的 :class:`LZMACompressor` 了解有关 *format*, *check*, *preset* 和 *filters* " +"参数的说明。" + +#: ../../library/lzma.rst:301 +msgid "" +"Decompress *data* (a :class:`bytes` object), returning the uncompressed data" +" as a :class:`bytes` object." +msgstr "解压缩 *data* (一个 :class:`bytes` 对象),返回包含解压缩数据的 :class:`bytes` 对象。" + +#: ../../library/lzma.rst:304 +msgid "" +"If *data* is the concatenation of multiple distinct compressed streams, " +"decompress all of these streams, and return the concatenation of the " +"results." +msgstr "如果 *data* 是多个单独压缩数据流的拼接,则解压缩所有相应数据流,并返回结果的拼接。" + +#: ../../library/lzma.rst:307 +msgid "" +"See :class:`LZMADecompressor` above for a description of the *format*, " +"*memlimit* and *filters* arguments." +msgstr "" +"参见上文的 :class:`LZMADecompressor` 了解有关 *format*, *memlimit* 和 *filters* 参数的说明。" + +#: ../../library/lzma.rst:312 +msgid "Miscellaneous" +msgstr "杂项" + +#: ../../library/lzma.rst:316 +msgid "" +"Return ``True`` if the given integrity check is supported on this system." +msgstr "如果本系统支持给定的一致性检查则返回 ``True``。" + +#: ../../library/lzma.rst:318 +msgid "" +":const:`CHECK_NONE` and :const:`CHECK_CRC32` are always supported. " +":const:`CHECK_CRC64` and :const:`CHECK_SHA256` may be unavailable if you are" +" using a version of :program:`liblzma` that was compiled with a limited " +"feature set." +msgstr "" +":const:`CHECK_NONE` 和 :const:`CHECK_CRC32` 总是受支持。 :const:`CHECK_CRC64` 和 " +":const:`CHECK_SHA256` 或许不可用,如果你正在使用基于受限制特性集编译的 :program:`liblzma` 版本的话。" + +#: ../../library/lzma.rst:327 +msgid "Specifying custom filter chains" +msgstr "指定自定义的过滤器链" + +#: ../../library/lzma.rst:329 +msgid "" +"A filter chain specifier is a sequence of dictionaries, where each " +"dictionary contains the ID and options for a single filter. Each dictionary " +"must contain the key ``\"id\"``, and may contain additional keys to specify " +"filter-dependent options. Valid filter IDs are as follows:" +msgstr "" +"过滤器链描述符是由字典组成的序列,其中每个字典包含单个过滤器的 ID 和选项。 每个字典必须包含键 " +"``\"id\"``,并可能包含额外的键用来指定基于过滤器的选项。 有效的过滤器 ID 如下:" + +#: ../../library/lzma.rst:336 +msgid "Compression filters:" +msgstr "压缩过滤器:" + +#: ../../library/lzma.rst:335 +msgid ":const:`FILTER_LZMA1` (for use with :const:`FORMAT_ALONE`)" +msgstr ":const:`FILTER_LZMA1` (配合 :const:`FORMAT_ALONE` 使用)" + +#: ../../library/lzma.rst:336 +msgid "" +":const:`FILTER_LZMA2` (for use with :const:`FORMAT_XZ` and " +":const:`FORMAT_RAW`)" +msgstr "" +":const:`FILTER_LZMA2` (配合 :const:`FORMAT_XZ` 和 :const:`FORMAT_RAW` 使用)" + +#: ../../library/lzma.rst:339 +msgid "Delta filter:" +msgstr "Delta 过滤器:" + +#: ../../library/lzma.rst:339 +msgid ":const:`FILTER_DELTA`" +msgstr ":const:`FILTER_DELTA`" + +#: ../../library/lzma.rst:347 +msgid "Branch-Call-Jump (BCJ) filters:" +msgstr "Branch-Call-Jump (BCJ) 过滤器:" + +#: ../../library/lzma.rst:342 +msgid ":const:`FILTER_X86`" +msgstr ":const:`FILTER_X86`" + +#: ../../library/lzma.rst:343 +msgid ":const:`FILTER_IA64`" +msgstr ":const:`FILTER_IA64`" + +#: ../../library/lzma.rst:344 +msgid ":const:`FILTER_ARM`" +msgstr ":const:`FILTER_ARM`" + +#: ../../library/lzma.rst:345 +msgid ":const:`FILTER_ARMTHUMB`" +msgstr ":const:`FILTER_ARMTHUMB`" + +#: ../../library/lzma.rst:346 +msgid ":const:`FILTER_POWERPC`" +msgstr ":const:`FILTER_POWERPC`" + +#: ../../library/lzma.rst:347 +msgid ":const:`FILTER_SPARC`" +msgstr ":const:`FILTER_SPARC`" + +#: ../../library/lzma.rst:349 +msgid "" +"A filter chain can consist of up to 4 filters, and cannot be empty. The last" +" filter in the chain must be a compression filter, and any other filters " +"must be delta or BCJ filters." +msgstr "" +"一个过滤器链最多可由 4 个过滤器组成,并且不能为空。 过滤器链中的最后一个过滤器必须为压缩过滤器,其他过滤器必须为 Delta 或 BCJ 过滤器。" + +#: ../../library/lzma.rst:353 +msgid "" +"Compression filters support the following options (specified as additional " +"entries in the dictionary representing the filter):" +msgstr "压缩过滤器支持下列选项(指定为表示过滤器的字典中的附加条目):" + +#: ../../library/lzma.rst:356 +msgid "" +"``preset``: A compression preset to use as a source of default values for " +"options that are not specified explicitly." +msgstr "``preset``: 压缩预设选项,用于作为未显式指定的选项的默认值的来源。" + +#: ../../library/lzma.rst:358 +msgid "" +"``dict_size``: Dictionary size in bytes. This should be between 4 KiB and " +"1.5 GiB (inclusive)." +msgstr "``dict_size``: 以字节表示的字典大小。 这应当在 4 KiB 和 1.5 GiB 之间(包含边界)。" + +#: ../../library/lzma.rst:360 +msgid "``lc``: Number of literal context bits." +msgstr "``lc``: 字面值上下文的比特数。" + +#: ../../library/lzma.rst:361 +msgid "" +"``lp``: Number of literal position bits. The sum ``lc + lp`` must be at most" +" 4." +msgstr "``lp``: 字面值位置的比特数。 总计值 ``lc + lp`` 必须不大于 4。" + +#: ../../library/lzma.rst:363 +msgid "``pb``: Number of position bits; must be at most 4." +msgstr "``pb``: 位置的比特数;必须不大于 4。" + +#: ../../library/lzma.rst:364 +msgid "``mode``: :const:`MODE_FAST` or :const:`MODE_NORMAL`." +msgstr "``mode``: :const:`MODE_FAST` 或 :const:`MODE_NORMAL`。" + +#: ../../library/lzma.rst:365 +msgid "" +"``nice_len``: What should be considered a \"nice length\" for a match. This " +"should be 273 or less." +msgstr "``nice_len``: 对于一个匹配应当被视为“适宜长度”的值。 这应当小于或等于 273。" + +#: ../../library/lzma.rst:367 +msgid "" +"``mf``: What match finder to use -- :const:`MF_HC3`, :const:`MF_HC4`, " +":const:`MF_BT2`, :const:`MF_BT3`, or :const:`MF_BT4`." +msgstr "" +"``mf``: 要使用的匹配查找器 -- :const:`MF_HC3`, :const:`MF_HC4`, :const:`MF_BT2`, " +":const:`MF_BT3` 或 :const:`MF_BT4`。" + +#: ../../library/lzma.rst:369 +msgid "" +"``depth``: Maximum search depth used by match finder. 0 (default) means to " +"select automatically based on other filter options." +msgstr "``depth``: 匹配查找器使用的最大查找深度。 0 (默认值) 表示基于其他过滤器选项自动选择。" + +#: ../../library/lzma.rst:372 +msgid "" +"The delta filter stores the differences between bytes, producing more " +"repetitive input for the compressor in certain circumstances. It supports " +"one option, ``dist``. This indicates the distance between bytes to be " +"subtracted. The default is 1, i.e. take the differences between adjacent " +"bytes." +msgstr "" +"Delta 过滤器保存字节数据之间的差值,在特定环境下可产生更具重复性的输入。 它支持一个 ``dist`` 选项,指明要减去的字节之间的差值大小。 " +"默认值为 1,即相邻字节之间的差值。" + +#: ../../library/lzma.rst:377 +msgid "" +"The BCJ filters are intended to be applied to machine code. They convert " +"relative branches, calls and jumps in the code to use absolute addressing, " +"with the aim of increasing the redundancy that can be exploited by the " +"compressor. These filters support one option, ``start_offset``. This " +"specifies the address that should be mapped to the beginning of the input " +"data. The default is 0." +msgstr "" +"BCJ 过滤器主要作用于机器码。 它们会转换机器码内的相对分支、调用和跳转以使用绝对寻址,其目标是提升冗余度以供压缩器利用。 这些过滤器支持一个 " +"``start_offset`` 选项,指明应当被映射到输入数据开头的地址。 默认值为 0。" + +#: ../../library/lzma.rst:385 +msgid "Examples" +msgstr "例子" + +#: ../../library/lzma.rst:387 +msgid "Reading in a compressed file::" +msgstr "在已压缩的数据中读取::" + +#: ../../library/lzma.rst:393 +msgid "Creating a compressed file::" +msgstr "创建一个压缩文件::" + +#: ../../library/lzma.rst:400 +msgid "Compressing data in memory::" +msgstr "在内存中压缩文件::" + +#: ../../library/lzma.rst:406 +msgid "Incremental compression::" +msgstr "增量压缩::" + +#: ../../library/lzma.rst:417 +msgid "Writing compressed data to an already-open file::" +msgstr "写入已压缩数据到已打开的文件::" + +#: ../../library/lzma.rst:426 +msgid "Creating a compressed file using a custom filter chain::" +msgstr "使用自定义过滤器链创建一个已压缩文件::" diff --git a/library/mailbox.po b/library/mailbox.po new file mode 100644 index 000000000..dbc4d24cd --- /dev/null +++ b/library/mailbox.po @@ -0,0 +1,2010 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) 2001-2024, Python Software Foundation +# This file is distributed under the same license as the Python package. +# FIRST AUTHOR , YEAR. +# +# Translators: +# ww song , 2018 +# ppcfish , 2019 +# Freesand Leo , 2021 +# Rafael Fontenelle , 2024 +# +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: Python 3.9\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2024-05-31 16:34+0000\n" +"PO-Revision-Date: 2017-02-16 23:17+0000\n" +"Last-Translator: Rafael Fontenelle , 2024\n" +"Language-Team: Chinese (China) (https://app.transifex.com/python-doc/teams/5390/zh_CN/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: zh_CN\n" +"Plural-Forms: nplurals=1; plural=0;\n" + +#: ../../library/mailbox.rst:2 +msgid ":mod:`mailbox` --- Manipulate mailboxes in various formats" +msgstr ":mod:`mailbox` --- 操作多种格式的邮箱" + +#: ../../library/mailbox.rst:10 +msgid "**Source code:** :source:`Lib/mailbox.py`" +msgstr "**源代码:** :source:`Lib/mailbox.py`" + +#: ../../library/mailbox.rst:14 +msgid "" +"This module defines two classes, :class:`Mailbox` and :class:`Message`, for " +"accessing and manipulating on-disk mailboxes and the messages they contain. " +":class:`Mailbox` offers a dictionary-like mapping from keys to messages. " +":class:`Message` extends the :mod:`email.message` module's " +":class:`~email.message.Message` class with format-specific state and " +"behavior. Supported mailbox formats are Maildir, mbox, MH, Babyl, and MMDF." +msgstr "" +"本模块定义了两个类,:class:`Mailbox` 和 :class:`Message`,用于访问和操作磁盘中的邮箱及其所包含的电子邮件。 " +":class:`Mailbox` 提供了类似字典的从键到消息的映射。 :class:`Message` 为 :mod:`email.message` " +"模块的 :class:`~email.message.Message` 类增加了特定格式专属的状态和行为。 支持的邮箱格式有 Maildir, " +"mbox, MH, Babyl 以及 MMDF。" + +#: ../../library/mailbox.rst:24 +msgid "Module :mod:`email`" +msgstr "模块 :mod:`email`" + +#: ../../library/mailbox.rst:25 +msgid "Represent and manipulate messages." +msgstr "表示和操作邮件消息。" + +#: ../../library/mailbox.rst:31 +msgid ":class:`Mailbox` objects" +msgstr ":class:`Mailbox` 对象" + +#: ../../library/mailbox.rst:35 +msgid "A mailbox, which may be inspected and modified." +msgstr "一个邮箱,它可以被检视和修改。" + +#: ../../library/mailbox.rst:37 +msgid "" +"The :class:`Mailbox` class defines an interface and is not intended to be " +"instantiated. Instead, format-specific subclasses should inherit from " +":class:`Mailbox` and your code should instantiate a particular subclass." +msgstr "" +":class:`Mailbox` 类定义了一个接口并且它不应被实例化。 而是应该让格式专属的子类继承 :class:`Mailbox` " +"并且你的代码应当实例化一个特定的子类。" + +#: ../../library/mailbox.rst:41 +msgid "" +"The :class:`Mailbox` interface is dictionary-like, with small keys " +"corresponding to messages. Keys are issued by the :class:`Mailbox` instance " +"with which they will be used and are only meaningful to that " +":class:`Mailbox` instance. A key continues to identify a message even if the" +" corresponding message is modified, such as by replacing it with another " +"message." +msgstr "" +":class:`Mailbox` 接口类似于字典,其中每个小键都有对应的消息。 键是由 :class:`Mailbox` " +"实例发出的,它们将由实例来使用并且只对该 :class:`Mailbox` 实例有意义。 " +"键会持续标识一条消息,即使对应的消息已被修改,例如被另一条消息所替代。" + +#: ../../library/mailbox.rst:47 +msgid "" +"Messages may be added to a :class:`Mailbox` instance using the set-like " +"method :meth:`add` and removed using a ``del`` statement or the set-like " +"methods :meth:`remove` and :meth:`discard`." +msgstr "" +"可以使用 set 型方法 :meth:`add` 将消息添加到 :class:`Mailbox` 并可以使用 ``del`` 语句或 set 型方法 " +":meth:`remove` 和 :meth:`discard` 将其移除。" + +#: ../../library/mailbox.rst:51 +msgid "" +":class:`Mailbox` interface semantics differ from dictionary semantics in " +"some noteworthy ways. Each time a message is requested, a new representation" +" (typically a :class:`Message` instance) is generated based upon the current" +" state of the mailbox. Similarly, when a message is added to a " +":class:`Mailbox` instance, the provided message representation's contents " +"are copied. In neither case is a reference to the message representation " +"kept by the :class:`Mailbox` instance." +msgstr "" +":class:`Mailbox` 接口语义在某些值得注意的方面与字典语义有所不同。 每次请求消息时,都会基于邮箱的当前状态生成一个新的表示形式(通常为 " +":class:`Message` 实例)。 类似地,当向 :class:`Mailbox` 实例添加消息时,所提供的消息表示形式的内容将被复制。 " +"无论在哪种情况下 :class:`Mailbox` 实例都不会保留对消息表示形式的引用。" + +#: ../../library/mailbox.rst:59 +msgid "" +"The default :class:`Mailbox` iterator iterates over message representations," +" not keys as the default dictionary iterator does. Moreover, modification of" +" a mailbox during iteration is safe and well-defined. Messages added to the " +"mailbox after an iterator is created will not be seen by the iterator. " +"Messages removed from the mailbox before the iterator yields them will be " +"silently skipped, though using a key from an iterator may result in a " +":exc:`KeyError` exception if the corresponding message is subsequently " +"removed." +msgstr "" +"默认的 :class:`Mailbox` 迭代器会迭代消息表示形式,而不像默认的字典迭代器那样迭代键。 此外,在迭代期间修改邮箱是安全且有明确定义的。 " +"在创建迭代器之后被添加到邮箱的消息将对该迭代不可见。 在迭代器产出消息之前被从邮箱移除的消息将被静默地跳过,但是使用来自迭代器的键也有可能导致 " +":exc:`KeyError` 异常,如果对应的消息后来被移除的话。" + +#: ../../library/mailbox.rst:70 +msgid "" +"Be very cautious when modifying mailboxes that might be simultaneously " +"changed by some other process. The safest mailbox format to use for such " +"tasks is Maildir; try to avoid using single-file formats such as mbox for " +"concurrent writing. If you're modifying a mailbox, you *must* lock it by " +"calling the :meth:`lock` and :meth:`unlock` methods *before* reading any " +"messages in the file or making any changes by adding or deleting a message." +" Failing to lock the mailbox runs the risk of losing messages or corrupting" +" the entire mailbox." +msgstr "" +"在修改可能同时被其他某个进程修改的邮箱时要非常小心。 用于此种任务的最安全邮箱格式是 Maildir;请尽量避免使用 mbox " +"之类的单文件格式进行并发写入。 如果你正在修改一个邮箱,你 *必须* 在读取文件中的任何消息或者执行添加或删除消息等修改操作 *之前* 通过调用 " +":meth:`lock` 以及 :meth:`unlock` 方法来锁定它。 如果未锁定邮箱则将导致丢失消息或损坏整个邮箱的风险。" + +#: ../../library/mailbox.rst:79 +msgid ":class:`Mailbox` instances have the following methods:" +msgstr ":class:`Mailbox` 实例具有下列方法:" + +#: ../../library/mailbox.rst:84 +msgid "" +"Add *message* to the mailbox and return the key that has been assigned to " +"it." +msgstr "将 *message* 添加到邮箱并返回分配给它的键。" + +#: ../../library/mailbox.rst:87 +msgid "" +"Parameter *message* may be a :class:`Message` instance, an " +":class:`email.message.Message` instance, a string, a byte string, or a file-" +"like object (which should be open in binary mode). If *message* is an " +"instance of the appropriate format-specific :class:`Message` subclass (e.g.," +" if it's an :class:`mboxMessage` instance and this is an :class:`mbox` " +"instance), its format-specific information is used. Otherwise, reasonable " +"defaults for format-specific information are used." +msgstr "" +"形参 *message* 可以是 :class:`Message` 实例、:class:`email.message.Message` " +"实例、字符串、字节串或文件型对象(应当以二进制模式打开)。 如果 *message* 是适当的格式专属 :class:`Message` " +"子类的实例(举例来说,如果它是一个 :class:`mboxMessage` 实例而这是一个 :class:`mbox` " +"实例),将使用其格式专属的信息。 在其他情况下,则会使用合理的默认值作为格式专属的信息。" + +#: ../../library/mailbox.rst:96 +msgid "Support for binary input was added." +msgstr "增加了对二进制输入的支持。" + +#: ../../library/mailbox.rst:104 +msgid "Delete the message corresponding to *key* from the mailbox." +msgstr "从邮箱中删除对应于 *key* 的消息。" + +#: ../../library/mailbox.rst:106 +msgid "" +"If no such message exists, a :exc:`KeyError` exception is raised if the " +"method was called as :meth:`remove` or :meth:`__delitem__` but no exception " +"is raised if the method was called as :meth:`discard`. The behavior of " +":meth:`discard` may be preferred if the underlying mailbox format supports " +"concurrent modification by other processes." +msgstr "" +"当消息不存在时,如果此方法是作为 :meth:`remove` 或 :meth:`__delitem__` 调用则会引发 :exc:`KeyError`" +" 异常,而如果此方法是作为 :meth:`discard` 调用则不会引发异常。 如果下层邮箱格式支持来自其他进程的并发修改则 " +":meth:`discard` 的行为可能是更为适合的。" + +#: ../../library/mailbox.rst:115 +msgid "" +"Replace the message corresponding to *key* with *message*. Raise a " +":exc:`KeyError` exception if no message already corresponds to *key*." +msgstr "" +"将 *key* 所对应的消息替换为 *message*。 如果没有与 *key* 所对应的消息则会引发 :exc:`KeyError` 异常。" + +#: ../../library/mailbox.rst:118 +msgid "" +"As with :meth:`add`, parameter *message* may be a :class:`Message` instance," +" an :class:`email.message.Message` instance, a string, a byte string, or a " +"file-like object (which should be open in binary mode). If *message* is an " +"instance of the appropriate format-specific :class:`Message` subclass (e.g.," +" if it's an :class:`mboxMessage` instance and this is an :class:`mbox` " +"instance), its format-specific information is used. Otherwise, the format-" +"specific information of the message that currently corresponds to *key* is " +"left unchanged." +msgstr "" +"与 :meth:`add` 一样,形参 *message* 可以是 :class:`Message` " +"实例、:class:`email.message.Message` 实例、字符串、字节串或文件型对象(应当以二进制模式打开)。 如果 *message*" +" 是适当的格式专属 :class:`Message` 子类的实例(举例来说,如果它是一个 :class:`mboxMessage` 实例而这是一个 " +":class:`mbox` 实例),将使用其格式专属的信息。 在其他情况下,当前与 *key* 所对应的消息的格式专属信息则会保持不变。" + +#: ../../library/mailbox.rst:132 +msgid "" +"Return an iterator over all keys if called as :meth:`iterkeys` or return a " +"list of keys if called as :meth:`keys`." +msgstr "" +"如果通过 :meth:`iterkeys` 调用则返回一个迭代所有键的迭代器,或者如果通过 :meth:`keys` 调用则返回一个键列表。" + +#: ../../library/mailbox.rst:140 +msgid "" +"Return an iterator over representations of all messages if called as " +":meth:`itervalues` or :meth:`__iter__` or return a list of such " +"representations if called as :meth:`values`. The messages are represented as" +" instances of the appropriate format-specific :class:`Message` subclass " +"unless a custom message factory was specified when the :class:`Mailbox` " +"instance was initialized." +msgstr "" +"如果通过 :meth:`itervalues` 或 :meth:`__iter__` 调用则返回一个迭代所有消息的表示形式的迭代器,或者如果通过 " +":meth:`values` 调用则返回一个由这些表示形式组成的列表。 消息会被表示为适当的格式专属 :class:`Message` " +"子类的实例,除非当 :class:`Mailbox` 实例被初始化时指定了自定义的消息工厂函数。" + +#: ../../library/mailbox.rst:149 +msgid "" +"The behavior of :meth:`__iter__` is unlike that of dictionaries, which " +"iterate over keys." +msgstr ":meth:`__iter__` 的行为与字典不同,后者是对键进行迭代。" + +#: ../../library/mailbox.rst:156 +msgid "" +"Return an iterator over (*key*, *message*) pairs, where *key* is a key and " +"*message* is a message representation, if called as :meth:`iteritems` or " +"return a list of such pairs if called as :meth:`items`. The messages are " +"represented as instances of the appropriate format-specific :class:`Message`" +" subclass unless a custom message factory was specified when the " +":class:`Mailbox` instance was initialized." +msgstr "" +"如果通过 :meth:`iteritems` 调用则返回一个迭代 (*key*, *message*) 对的迭代器,其中 *key* 为键而 " +"*message* 为消息的表示形式,或者如果通过 :meth:`items` 调用则返回一个由这种键值对组成的列表。 消息会被表示为适当的格式专属 " +":class:`Message` 子类的实例,除非当 :class:`Mailbox` 实例被初始化时指定了自定义的消息工厂函数。" + +#: ../../library/mailbox.rst:167 +msgid "" +"Return a representation of the message corresponding to *key*. If no such " +"message exists, *default* is returned if the method was called as " +":meth:`get` and a :exc:`KeyError` exception is raised if the method was " +"called as :meth:`__getitem__`. The message is represented as an instance of " +"the appropriate format-specific :class:`Message` subclass unless a custom " +"message factory was specified when the :class:`Mailbox` instance was " +"initialized." +msgstr "" +"返回对应于 *key* 的消息的表示形式。 当对应的消息不存在时,如果通过 :meth:`get` 调用则返回 *default* 而如果通过 " +":meth:`__getitem__` 调用此方法则会引发 :exc:`KeyError` 异常。 消息会被表示为适当的格式专属 " +":class:`Message` 子类的实例,除非当 :class:`Mailbox` 实例被初始化时指定了自定义的消息工厂函数。" + +#: ../../library/mailbox.rst:178 +msgid "" +"Return a representation of the message corresponding to *key* as an instance" +" of the appropriate format-specific :class:`Message` subclass, or raise a " +":exc:`KeyError` exception if no such message exists." +msgstr "" +"将对应于 *key* 的消息的表示形式作为适当的格式专属 :class:`Message` 子类的实例返回,或者如果对应的消息不存在则会引发 " +":exc:`KeyError` 异常。" + +#: ../../library/mailbox.rst:185 +msgid "" +"Return a byte representation of the message corresponding to *key*, or raise" +" a :exc:`KeyError` exception if no such message exists." +msgstr "返回对应于 *key* 的消息的字节表示形式,或者如果对应的消息不存在则会引发 :exc:`KeyError` 异常。" + +#: ../../library/mailbox.rst:193 +msgid "" +"Return a string representation of the message corresponding to *key*, or " +"raise a :exc:`KeyError` exception if no such message exists. The message is" +" processed through :class:`email.message.Message` to convert it to a 7bit " +"clean representation." +msgstr "" +"返回对应于 *key* 的消息的字符串表示形式,或者如果对应的消息不存在则会引发 :exc:`KeyError` 异常。 消息是通过 " +":class:`email.message.Message` 处理来将其转换为纯 7bit 表示形式的。" + +#: ../../library/mailbox.rst:201 +msgid "" +"Return a file-like representation of the message corresponding to *key*, or " +"raise a :exc:`KeyError` exception if no such message exists. The file-like " +"object behaves as if open in binary mode. This file should be closed once " +"it is no longer needed." +msgstr "" +"返回对应于 *key* 的消息的文件类表示形式,或者如果对应的消息不存在则会引发 :exc:`KeyError` 异常。 " +"文件类对象的行为相当于以二进制模式打开。 当不再需要此文件时应当将其关闭。" + +#: ../../library/mailbox.rst:206 +msgid "" +"The file object really is a binary file; previously it was incorrectly " +"returned in text mode. Also, the file-like object now supports the context " +"management protocol: you can use a :keyword:`with` statement to " +"automatically close it." +msgstr "" +"此文件对象实际上是二进制文件;之前它被不正确地以文本模式返回。 并且,此文件类对象现在还支持上下文管理协议:你可以使用 :keyword:`with` " +"语句来自动关闭它。" + +#: ../../library/mailbox.rst:214 +msgid "" +"Unlike other representations of messages, file-like representations are not " +"necessarily independent of the :class:`Mailbox` instance that created them " +"or of the underlying mailbox. More specific documentation is provided by " +"each subclass." +msgstr "" +"不同于其他消息表示形式,文件类表示形式并不一定独立于创建它们的 :class:`Mailbox` 实例或下层的邮箱。 每个子类都会提供更具体的文档。" + +#: ../../library/mailbox.rst:222 +msgid "" +"Return ``True`` if *key* corresponds to a message, ``False`` otherwise." +msgstr "如果 *key* 有对应的消息则返回 ``True``,否则返回 ``False``。" + +#: ../../library/mailbox.rst:227 +msgid "Return a count of messages in the mailbox." +msgstr "返回邮箱中消息的数量。" + +#: ../../library/mailbox.rst:232 +msgid "Delete all messages from the mailbox." +msgstr "从邮箱中删除所有消息。" + +#: ../../library/mailbox.rst:237 +msgid "" +"Return a representation of the message corresponding to *key* and delete the" +" message. If no such message exists, return *default*. The message is " +"represented as an instance of the appropriate format-specific " +":class:`Message` subclass unless a custom message factory was specified when" +" the :class:`Mailbox` instance was initialized." +msgstr "" +"返回对应于 *key* 的消息的表示形式并删除该消息。 如果对应的消息不存在则返回 *default*。 消息会被表示为适当的格式专属 " +":class:`Message` 子类的实例,除非当 :class:`Mailbox` 实例被初始化时指定了自定义的消息工厂函数。" + +#: ../../library/mailbox.rst:246 +msgid "" +"Return an arbitrary (*key*, *message*) pair, where *key* is a key and " +"*message* is a message representation, and delete the corresponding message." +" If the mailbox is empty, raise a :exc:`KeyError` exception. The message is " +"represented as an instance of the appropriate format-specific " +":class:`Message` subclass unless a custom message factory was specified when" +" the :class:`Mailbox` instance was initialized." +msgstr "" +"返回一个任意的 (*key*, *message*) 对,其中 *key* 为键而 *message* 为消息的表示形式,并删除对应的消息。 " +"如果邮箱为空,则会引发 :exc:`KeyError` 异常。 消息会被表示为适当的格式专属 :class:`Message` 子类的实例,除非当 " +":class:`Mailbox` 实例被初始化时指定了自定义的消息工厂函数。" + +#: ../../library/mailbox.rst:256 +msgid "" +"Parameter *arg* should be a *key*-to-*message* mapping or an iterable of " +"(*key*, *message*) pairs. Updates the mailbox so that, for each given *key* " +"and *message*, the message corresponding to *key* is set to *message* as if " +"by using :meth:`__setitem__`. As with :meth:`__setitem__`, each *key* must " +"already correspond to a message in the mailbox or else a :exc:`KeyError` " +"exception will be raised, so in general it is incorrect for *arg* to be a " +":class:`Mailbox` instance." +msgstr "" +"形参 *arg* 应当是 *key* 到 *message* 的映射或 (*key*, *message*) 对的可迭代对象。 " +"用来更新邮箱以使得对于每个给定的 *key* 和 *message*,与 *key* 相对应的消息会被设为 *message*,就像通过使用 " +":meth:`__setitem__` 一样。 类似于 :meth:`__setitem__`,每个 *key* " +"都必须在邮箱中有一个对应的消息否则将会引发 :exc:`KeyError` 异常,因此在通常情况下将 *arg* 设为 :class:`Mailbox`" +" 实例是不正确的。" + +#: ../../library/mailbox.rst:266 +msgid "Unlike with dictionaries, keyword arguments are not supported." +msgstr "与字典不同,关键字参数是不受支持的。" + +#: ../../library/mailbox.rst:271 +msgid "" +"Write any pending changes to the filesystem. For some :class:`Mailbox` " +"subclasses, changes are always written immediately and :meth:`flush` does " +"nothing, but you should still make a habit of calling this method." +msgstr "" +"将所有待定的更改写入到文件系统。 对于某些 :class:`Mailbox` 子类来说,更改总是被立即写入因而 :meth:`flush` " +"并不会做任何事,但您仍然应当养成调用此方法的习惯。" + +#: ../../library/mailbox.rst:278 +msgid "" +"Acquire an exclusive advisory lock on the mailbox so that other processes " +"know not to modify it. An :exc:`ExternalClashError` is raised if the lock is" +" not available. The particular locking mechanisms used depend upon the " +"mailbox format. You should *always* lock the mailbox before making any " +"modifications to its contents." +msgstr "" +"在邮箱上获取一个独占式咨询锁以使其他进程知道不能修改它。 如果锁无法被获取则会引发 :exc:`ExternalClashError`。 " +"所使用的具体锁机制取决于邮箱的格式。 在对邮箱内容进行任何修改之前你应当 *总是* 锁定它。" + +#: ../../library/mailbox.rst:287 +msgid "Release the lock on the mailbox, if any." +msgstr "释放邮箱上的锁,如果存在的话。" + +#: ../../library/mailbox.rst:292 +msgid "" +"Flush the mailbox, unlock it if necessary, and close any open files. For " +"some :class:`Mailbox` subclasses, this method does nothing." +msgstr "刷新邮箱,如果必要则将其解锁。 并关闭所有打开的文件。 对于某些 :class:`Mailbox` 子类来说,此方法并不会做任何事。" + +#: ../../library/mailbox.rst:299 +msgid ":class:`Maildir`" +msgstr ":class:`Maildir`" + +#: ../../library/mailbox.rst:304 +msgid "" +"A subclass of :class:`Mailbox` for mailboxes in Maildir format. Parameter " +"*factory* is a callable object that accepts a file-like message " +"representation (which behaves as if opened in binary mode) and returns a " +"custom representation. If *factory* is ``None``, :class:`MaildirMessage` is " +"used as the default message representation. If *create* is ``True``, the " +"mailbox is created if it does not exist." +msgstr "" +":class:`Mailbox` 的一个子类,用于 Maildir 格式的邮箱。 形参 *factory* " +"是一个可调用对象,它接受一个文件类消息表示形式(其行为相当于以二进制模式打开)并返回一个自定义的表示形式。 如果 *factory* 为 " +"``None``,则会使用 :class:`MaildirMessage` 作为默认的消息表示形式。 如果 *create* 为 " +"``True``,则当邮箱不存在时会创建它。" + +#: ../../library/mailbox.rst:311 +msgid "" +"If *create* is ``True`` and the *dirname* path exists, it will be treated as" +" an existing maildir without attempting to verify its directory layout." +msgstr "" +"如果 *create* 为 ``True`` 且 *dirname* 路径存在,它将被视为已有的 maildir 而无需尝试验证其目录布局。" + +#: ../../library/mailbox.rst:314 +msgid "" +"It is for historical reasons that *dirname* is named as such rather than " +"*path*." +msgstr "使用 *dirname* 这个名称而不使用 *path* 是出于历史原因。" + +#: ../../library/mailbox.rst:316 +msgid "" +"Maildir is a directory-based mailbox format invented for the qmail mail " +"transfer agent and now widely supported by other programs. Messages in a " +"Maildir mailbox are stored in separate files within a common directory " +"structure. This design allows Maildir mailboxes to be accessed and modified " +"by multiple unrelated programs without data corruption, so file locking is " +"unnecessary." +msgstr "" +"Maildir 是一种基于目录的邮箱格式,它是针对 qmail 邮件传输代理而发明的,现在也得到了其他程序的广泛支持。 Maildir " +"邮箱中的消息存储在一个公共目录结构中的单独文件内。 这样的设计允许 Maildir " +"邮箱被多个彼此无关的程序访问和修改而不会导致数据损坏,因此文件锁定操作是不必要的。" + +#: ../../library/mailbox.rst:323 +msgid "" +"Maildir mailboxes contain three subdirectories, namely: :file:`tmp`, " +":file:`new`, and :file:`cur`. Messages are created momentarily in the " +":file:`tmp` subdirectory and then moved to the :file:`new` subdirectory to " +"finalize delivery. A mail user agent may subsequently move the message to " +"the :file:`cur` subdirectory and store information about the state of the " +"message in a special \"info\" section appended to its file name." +msgstr "" +"Maildir 邮箱包含三个子目录,分别是: :file:`tmp`, :file:`new` 和 :file:`cur`。 消息会不时地在 " +":file:`tmp` 子目录中创建然后移至 :file:`new` 子目录来结束投递。 后续电子邮件客户端可能将消息移至 :file:`cur` " +"子目录并将有关消息状态的信息存储在附带到其文件名的特殊 \"info\" 小节中。" + +#: ../../library/mailbox.rst:330 +msgid "" +"Folders of the style introduced by the Courier mail transfer agent are also " +"supported. Any subdirectory of the main mailbox is considered a folder if " +"``'.'`` is the first character in its name. Folder names are represented by " +":class:`Maildir` without the leading ``'.'``. Each folder is itself a " +"Maildir mailbox but should not contain other folders. Instead, a logical " +"nesting is indicated using ``'.'`` to delimit levels, e.g., " +"\"Archived.2005.07\"." +msgstr "" +"Courier 电子邮件传输代理所引入的文件夹风格也是受支持的。 主邮箱中任何子目录只要其名称的第一个字符是 ``'.'`` 就会被视为文件夹。 " +"文件夹名称会被 :class:`Maildir` 表示为不带前缀 ``'.'`` 的形式。 每个文件夹自身都是一个 Maildir " +"邮箱但不应包含其他文件夹。 逻辑嵌套关系是使用 ``'.'`` 来划定层级,例如 \"Archived.2005.07\"。" + +#: ../../library/mailbox.rst:339 +msgid "" +"The Maildir specification requires the use of a colon (``':'``) in certain " +"message file names. However, some operating systems do not permit this " +"character in file names, If you wish to use a Maildir-like format on such an" +" operating system, you should specify another character to use instead. The " +"exclamation point (``'!'``) is a popular choice. For example::" +msgstr "" +"Maildir 规范要求使用在特定消息文件名中使用冒号 (``':'``)。 " +"但是,某些操作系统不允许将此字符用于文件名,如果你希望在这些操作系统上使用类似 Maildir 的格式,你应当指定改用另一个字符。 叹号 " +"(``'!'``) 是一个受欢迎的选择。 例如::" + +#: ../../library/mailbox.rst:349 +msgid "The :attr:`colon` attribute may also be set on a per-instance basis." +msgstr ":attr:`colon` 属性也可以在每个实例上分别设置。" + +#: ../../library/mailbox.rst:351 +msgid "" +":class:`Maildir` instances have all of the methods of :class:`Mailbox` in " +"addition to the following:" +msgstr ":class:`Maildir` 实例具有 :class:`Mailbox` 的所有方法及下列附加方法:" + +#: ../../library/mailbox.rst:357 ../../library/mailbox.rst:529 +msgid "Return a list of the names of all folders." +msgstr "返回所有文件夹名称的列表。" + +#: ../../library/mailbox.rst:362 +msgid "" +"Return a :class:`Maildir` instance representing the folder whose name is " +"*folder*. A :exc:`NoSuchMailboxError` exception is raised if the folder does" +" not exist." +msgstr "" +"返回表示名称为 *folder* 的文件夹的 :class:`Maildir` 实例。 如果文件夹不存在则会引发 " +":exc:`NoSuchMailboxError` 异常。" + +#: ../../library/mailbox.rst:369 +msgid "" +"Create a folder whose name is *folder* and return a :class:`Maildir` " +"instance representing it." +msgstr "创建名称为 *folder* 的文件夹并返回表示它的 :class:`Maildir` 实例。" + +#: ../../library/mailbox.rst:375 ../../library/mailbox.rst:547 +msgid "" +"Delete the folder whose name is *folder*. If the folder contains any " +"messages, a :exc:`NotEmptyError` exception will be raised and the folder " +"will not be deleted." +msgstr "" +"删除名称为 *folder* 的文件夹。 如果文件夹包含任何消息,则将引发 :exc:`NotEmptyError` 异常且该文件夹将不会被删除。" + +#: ../../library/mailbox.rst:382 +msgid "" +"Delete temporary files from the mailbox that have not been accessed in the " +"last 36 hours. The Maildir specification says that mail-reading programs " +"should do this occasionally." +msgstr "从邮箱中删除最近 36 小时内未被访问过的临时文件。 Maildir 规范要求邮件阅读程序应当时常进行此操作。" + +#: ../../library/mailbox.rst:386 +msgid "" +"Some :class:`Mailbox` methods implemented by :class:`Maildir` deserve " +"special remarks:" +msgstr ":class:`Maildir` 所实现的某些 :class:`Mailbox` 方法值得进行特别的说明:" + +#: ../../library/mailbox.rst:396 +msgid "" +"These methods generate unique file names based upon the current process ID. " +"When using multiple threads, undetected name clashes may occur and cause " +"corruption of the mailbox unless threads are coordinated to avoid using " +"these methods to manipulate the same mailbox simultaneously." +msgstr "" +"这些方法会基于当前进程 ID 来生成唯一文件名。 " +"当使用多线程时,可能发生未被检测到的名称冲突并导致邮箱损坏,除非是对线程进行协调以避免使用这些方法同时操作同一个邮箱。" + +#: ../../library/mailbox.rst:404 +msgid "" +"All changes to Maildir mailboxes are immediately applied, so this method " +"does nothing." +msgstr "对 Maildir 邮箱的所有更改都会立即被应用,所以此方法并不会做任何事情。" + +#: ../../library/mailbox.rst:411 +msgid "" +"Maildir mailboxes do not support (or require) locking, so these methods do " +"nothing." +msgstr "Maildir 邮箱不支持(或要求)锁定操作,所以此方法并不会做任何事情。" + +#: ../../library/mailbox.rst:417 +msgid "" +":class:`Maildir` instances do not keep any open files and the underlying " +"mailboxes do not support locking, so this method does nothing." +msgstr ":class:`Maildir` 实例不保留任何打开的文件并且下层的邮箱不支持锁定操作,所以此方法不会做任何事情。" + +#: ../../library/mailbox.rst:423 +msgid "" +"Depending upon the host platform, it may not be possible to modify or remove" +" the underlying message while the returned file remains open." +msgstr "根据主机平台的不同,当返回的文件保持打开状态时可能无法修改或移除下层的消息。" + +#: ../../library/mailbox.rst:431 +msgid "" +"`maildir man page from Courier `_" +msgstr "`Courier 上的 maildir 指南页面 `_" + +#: ../../library/mailbox.rst:430 +msgid "" +"A specification of the format. Describes a common extension for supporting " +"folders." +msgstr "该格式的规格说明。 描述了用于支持文件夹的通用扩展。" + +#: ../../library/mailbox.rst:434 +msgid "`Using maildir format `_" +msgstr "`使用 maildir 格式 `_" + +#: ../../library/mailbox.rst:434 +msgid "" +"Notes on Maildir by its inventor. Includes an updated name-creation scheme " +"and details on \"info\" semantics." +msgstr "Maildir 发明者对它的说明。 包括已更新的名称创建方案和 \"info\" 语义的相关细节。" + +#: ../../library/mailbox.rst:441 +msgid ":class:`mbox`" +msgstr ":class:`mbox`" + +#: ../../library/mailbox.rst:446 +msgid "" +"A subclass of :class:`Mailbox` for mailboxes in mbox format. Parameter " +"*factory* is a callable object that accepts a file-like message " +"representation (which behaves as if opened in binary mode) and returns a " +"custom representation. If *factory* is ``None``, :class:`mboxMessage` is " +"used as the default message representation. If *create* is ``True``, the " +"mailbox is created if it does not exist." +msgstr "" +":class:`Mailbox` 的子类,用于 mbox 格式的邮箱。 形参 *factory* " +"是一个可调用对象,它接受一个文件类消息表示形式(其行为相当于以二进制模式打开)并返回一个自定义的表示形式。 如果 *factory* 为 " +"``None``,则会使用 :class:`mboxMessage` 作为默认的消息表示形式。 如果 *create* 为 " +"``True``,则当邮箱不存在时会创建它。" + +#: ../../library/mailbox.rst:453 +msgid "" +"The mbox format is the classic format for storing mail on Unix systems. All " +"messages in an mbox mailbox are stored in a single file with the beginning " +"of each message indicated by a line whose first five characters are \"From " +"\"." +msgstr "" +"mbox 格式是在 Unix 系统上存储电子邮件的经典格式。 mbox 邮箱中的所有消息都存储在一个单独文件中,每条消息的开头由前五个字符为 " +"\"From \" 的行来指明。" + +#: ../../library/mailbox.rst:457 +msgid "" +"Several variations of the mbox format exist to address perceived " +"shortcomings in the original. In the interest of compatibility, " +":class:`mbox` implements the original format, which is sometimes referred to" +" as :dfn:`mboxo`. This means that the :mailheader:`Content-Length` header, " +"if present, is ignored and that any occurrences of \"From \" at the " +"beginning of a line in a message body are transformed to \">From \" when " +"storing the message, although occurrences of \">From \" are not transformed " +"to \"From \" when reading the message." +msgstr "" +"还有一些 mbox 格式变种对原始格式中发现的缺点做了改进,:class:`mbox` 只实现原始格式,有时被称为 :dfn:`mboxo`。 " +"这意味着当存储消息时 :mailheader:`Content-Length` 标头如果存在则会被忽略并且消息体中出现于行开头的任何 \"From \"" +" 会被转换为 \">From \",但是当读取消息时 \">From \" 则不会被转换为 \"From \"。" + +#: ../../library/mailbox.rst:465 +msgid "" +"Some :class:`Mailbox` methods implemented by :class:`mbox` deserve special " +"remarks:" +msgstr ":class:`mbox` 所实现的某些 :class:`Mailbox` 方法值得进行特别的说明:" + +#: ../../library/mailbox.rst:471 +msgid "" +"Using the file after calling :meth:`flush` or :meth:`close` on the " +":class:`mbox` instance may yield unpredictable results or raise an " +"exception." +msgstr "" +"在 :class:`mbox` 实例上调用 :meth:`flush` 或 :meth:`close` " +"之后再使用文件可能产生无法预料的结果或者引发异常。" + +#: ../../library/mailbox.rst:479 ../../library/mailbox.rst:688 +#: ../../library/mailbox.rst:739 +msgid "" +"Three locking mechanisms are used---dot locking and, if available, the " +":c:func:`flock` and :c:func:`lockf` system calls." +msgstr "使用三种锁机制 --- dot 锁,以及可能情况下的 :c:func:`flock` 和 :c:func:`lockf` 系统调用。" + +#: ../../library/mailbox.rst:486 +msgid "" +"`mbox man page from tin " +"`_" +msgstr "" +"`tin 上的 mbox 指南页面 `_" + +#: ../../library/mailbox.rst:486 +msgid "A specification of the format, with details on locking." +msgstr "该格式的规格说明,包括有关锁的详情。" + +#: ../../library/mailbox.rst:489 +msgid "" +"`Configuring Netscape Mail on Unix: Why The Content-Length Format is Bad " +"`_" +msgstr "" +"`在 Unix 上配置 Netscape Mail: 为何 Content-Length 格式是不好的 " +"`_" + +#: ../../library/mailbox.rst:489 +msgid "" +"An argument for using the original mbox format rather than a variation." +msgstr "使用原始 mbox 格式而非其变种的一些理由。" + +#: ../../library/mailbox.rst:491 +msgid "" +"`\"mbox\" is a family of several mutually incompatible mailbox formats " +"`_" +msgstr "" +"`\"mbox\" 是由多个彼此不兼容的邮箱格式构成的家族 " +"`_" + +#: ../../library/mailbox.rst:492 +msgid "A history of mbox variations." +msgstr "有关 mbox 变种的历史。" + +#: ../../library/mailbox.rst:498 +msgid ":class:`MH`" +msgstr ":class:`MH`" + +#: ../../library/mailbox.rst:503 +msgid "" +"A subclass of :class:`Mailbox` for mailboxes in MH format. Parameter " +"*factory* is a callable object that accepts a file-like message " +"representation (which behaves as if opened in binary mode) and returns a " +"custom representation. If *factory* is ``None``, :class:`MHMessage` is used " +"as the default message representation. If *create* is ``True``, the mailbox " +"is created if it does not exist." +msgstr "" +":class:`Mailbox` 的子类,用于 MH 格式的邮箱。 形参 *factory* " +"是一个可调用对象,它接受一个文件类消息表示形式(其行为相当于以二进制模式打开)并返回一个自定义的表示形式。 如果 *factory* 为 " +"``None``,则会使用 :class:`MHMessage` 作为默认的消息表示形式。 如果 *create* 为 " +"``True``,则当邮箱不存在时会创建它。" + +#: ../../library/mailbox.rst:510 +msgid "" +"MH is a directory-based mailbox format invented for the MH Message Handling " +"System, a mail user agent. Each message in an MH mailbox resides in its own " +"file. An MH mailbox may contain other MH mailboxes (called :dfn:`folders`) " +"in addition to messages. Folders may be nested indefinitely. MH mailboxes " +"also support :dfn:`sequences`, which are named lists used to logically group" +" messages without moving them to sub-folders. Sequences are defined in a " +"file called :file:`.mh_sequences` in each folder." +msgstr "" +"MH 是一种基于目录的邮箱格式,它是针对 MH Message Handling System 电子邮件用户代理而发明的。 在 MH " +"邮箱的每条消息都放在单独文件中。 MH 邮箱中除了邮件消息还可以包含其他 MH 邮箱 (称为 :dfn:`文件夹`)。 文件夹可以无限嵌套。 MH " +"邮箱还支持 :dfn:`序列`,这是一种命名列表,用来对消息进行逻辑分组而不必将其移入子文件夹。 序列是在每个文件夹中名为 " +":file:`.mh_sequences` 的文件内定义的。" + +#: ../../library/mailbox.rst:518 +msgid "" +"The :class:`MH` class manipulates MH mailboxes, but it does not attempt to " +"emulate all of :program:`mh`'s behaviors. In particular, it does not modify " +"and is not affected by the :file:`context` or :file:`.mh_profile` files that" +" are used by :program:`mh` to store its state and configuration." +msgstr "" +":class:`MH` 类可以操作 MH 邮箱,但它并不试图模拟 :program:`mh` 的所有行为。 特别地,它并不会修改 " +":file:`context` 或 :file:`.mh_profile` 文件也不会受其影响,这两个文件是 :program:`mh` " +"用来存储状态和配置数据的。" + +#: ../../library/mailbox.rst:523 +msgid "" +":class:`MH` instances have all of the methods of :class:`Mailbox` in " +"addition to the following:" +msgstr ":class:`MH` 实例具有 :class:`Mailbox` 的所有方法及下列附加方法:" + +#: ../../library/mailbox.rst:534 +msgid "" +"Return an :class:`MH` instance representing the folder whose name is " +"*folder*. A :exc:`NoSuchMailboxError` exception is raised if the folder does" +" not exist." +msgstr "" +"返回表示名称为 *folder* 的文件夹的 :class:`MH` 实例。 如果文件夹不存在则会引发 " +":exc:`NoSuchMailboxError` 异常。" + +#: ../../library/mailbox.rst:541 +msgid "" +"Create a folder whose name is *folder* and return an :class:`MH` instance " +"representing it." +msgstr "创建名称为 *folder* 的文件夹并返回表示它的 :class:`MH` 实例。" + +#: ../../library/mailbox.rst:554 +msgid "" +"Return a dictionary of sequence names mapped to key lists. If there are no " +"sequences, the empty dictionary is returned." +msgstr "返回映射到键列表的序列名称字典。 如果不存在任何序列,则返回空字典。" + +#: ../../library/mailbox.rst:560 +msgid "" +"Re-define the sequences that exist in the mailbox based upon *sequences*, a " +"dictionary of names mapped to key lists, like returned by " +":meth:`get_sequences`." +msgstr "" +"根据由映射到键列表的名称组成的字典 *sequences* 来重新定义邮箱中的序列,该字典与 :meth:`get_sequences` " +"返回值的形式一样。" + +#: ../../library/mailbox.rst:567 +msgid "" +"Rename messages in the mailbox as necessary to eliminate gaps in numbering." +" Entries in the sequences list are updated correspondingly." +msgstr "根据需要重命名邮箱中的消息以消除序号中的空缺。 序列列表中的条目会做相应的修改。" + +#: ../../library/mailbox.rst:572 +msgid "" +"Already-issued keys are invalidated by this operation and should not be " +"subsequently used." +msgstr "已发送的键会因此操作而失效并且不应当被继续使用。" + +#: ../../library/mailbox.rst:575 +msgid "" +"Some :class:`Mailbox` methods implemented by :class:`MH` deserve special " +"remarks:" +msgstr ":class:`MH` 所实现的某些 :class:`Mailbox` 方法值得进行特别的说明:" + +#: ../../library/mailbox.rst:583 +msgid "" +"These methods immediately delete the message. The MH convention of marking a" +" message for deletion by prepending a comma to its name is not used." +msgstr "这些方法会立即删除消息。 通过在名称前加缀一个冒号作为消息删除标记的 MH 惯例不会被使用。" + +#: ../../library/mailbox.rst:590 +msgid "" +"Three locking mechanisms are used---dot locking and, if available, the " +":c:func:`flock` and :c:func:`lockf` system calls. For MH mailboxes, locking " +"the mailbox means locking the :file:`.mh_sequences` file and, only for the " +"duration of any operations that affect them, locking individual message " +"files." +msgstr "" +"使用三种锁机制 --- dot 锁,以及可能情况下下 :c:func:`flock` 和 :c:func:`lockf` 系统调用。 对于 MH " +"邮箱来说,锁定邮箱意味着锁定 :file:`.mh_sequences` 文件,并且仅在执行会影响单独消息文件的操作期间锁定单独消息文件。" + +#: ../../library/mailbox.rst:599 +msgid "" +"Depending upon the host platform, it may not be possible to remove the " +"underlying message while the returned file remains open." +msgstr "根据主机平台的不同,当返回的文件保持打开状态时可能无法移除下层的消息。" + +#: ../../library/mailbox.rst:605 +msgid "" +"All changes to MH mailboxes are immediately applied, so this method does " +"nothing." +msgstr "对 MH 邮箱的所有更改都会立即被应用,所以此方法并不会做任何事情。" + +#: ../../library/mailbox.rst:611 +msgid "" +":class:`MH` instances do not keep any open files, so this method is " +"equivalent to :meth:`unlock`." +msgstr ":class:`MH` 实例不保留任何打开的文件,所以此方法等价于 :meth:`unlock`。" + +#: ../../library/mailbox.rst:618 +msgid "`nmh - Message Handling System `_" +msgstr "`nmh - Message Handling System `_" + +#: ../../library/mailbox.rst:618 +msgid "" +"Home page of :program:`nmh`, an updated version of the original " +":program:`mh`." +msgstr ":program:`nmh` 的主页,这是原始 :program:`mh` 的更新版本。" + +#: ../../library/mailbox.rst:621 +msgid "" +"`MH & nmh: Email for Users & Programmers `_" +msgstr "" +"`MH & nmh: Email for Users & Programmers `_" + +#: ../../library/mailbox.rst:621 +msgid "" +"A GPL-licensed book on :program:`mh` and :program:`nmh`, with some " +"information on the mailbox format." +msgstr "使用 GPL 许可证的介绍 :program:`mh` 与 :program:`nmh` 的图书,包含有关该邮箱格式的各种信息。" + +#: ../../library/mailbox.rst:628 +msgid ":class:`Babyl`" +msgstr ":class:`Babyl`" + +#: ../../library/mailbox.rst:633 +msgid "" +"A subclass of :class:`Mailbox` for mailboxes in Babyl format. Parameter " +"*factory* is a callable object that accepts a file-like message " +"representation (which behaves as if opened in binary mode) and returns a " +"custom representation. If *factory* is ``None``, :class:`BabylMessage` is " +"used as the default message representation. If *create* is ``True``, the " +"mailbox is created if it does not exist." +msgstr "" +":class:`Mailbox` 的子类,用于 Babyl 格式的邮箱。 形参 *factory* " +"是一个可调用对象,它接受一个文件类表示形式(其行为相当于以二进制模式打开)并返回一个自定义的表示形式。 如果 *factory* 为 " +"``None``,则会使用 :class:`BabylMessage` 作为默认的消息表示形式。 如果 *create* 为 " +"``True``,则当邮箱不存在时会创建它。" + +#: ../../library/mailbox.rst:640 +msgid "" +"Babyl is a single-file mailbox format used by the Rmail mail user agent " +"included with Emacs. The beginning of a message is indicated by a line " +"containing the two characters Control-Underscore (``'\\037'``) and Control-L" +" (``'\\014'``). The end of a message is indicated by the start of the next " +"message or, in the case of the last message, a line containing a Control-" +"Underscore (``'\\037'``) character." +msgstr "" +"Babyl 是 Rmail 电子邮箱用户代理所使用单文件邮箱格式,包括在 Emacs 中。 每条消息的开头由一个包含 Control-" +"Underscore (``'\\037'``) 和 Control-L (``'\\014'``) 这两个字符的行来指明。 " +"消息的结束由下一条消息的开头来指明,或者当为最后一条消息时则由一个包含 Control-Underscore (``'\\037'``) " +"字符的行来指明。" + +#: ../../library/mailbox.rst:647 +msgid "" +"Messages in a Babyl mailbox have two sets of headers, original headers and " +"so-called visible headers. Visible headers are typically a subset of the " +"original headers that have been reformatted or abridged to be more " +"attractive. Each message in a Babyl mailbox also has an accompanying list of" +" :dfn:`labels`, or short strings that record extra information about the " +"message, and a list of all user-defined labels found in the mailbox is kept " +"in the Babyl options section." +msgstr "" +"Babyl 邮箱中的消息带有两组标头:原始标头和所谓的可见标头。 可见标头通常为原始标头经过重格式化和删减以更易读的子集。 Babyl " +"邮箱中的每条消息都附带了一个 :dfn:`标签` 列表,即记录消息相关额外信息的短字符串,邮箱中所有的用户定义标签列表会存储于 Babyl 的选项部分。" + +#: ../../library/mailbox.rst:655 +msgid "" +":class:`Babyl` instances have all of the methods of :class:`Mailbox` in " +"addition to the following:" +msgstr ":class:`Babyl` 实例具有 :class:`Mailbox` 的所有方法及下列附加方法:" + +#: ../../library/mailbox.rst:661 +msgid "" +"Return a list of the names of all user-defined labels used in the mailbox." +msgstr "返回邮箱中使用的所有用户定义标签名称的列表。" + +#: ../../library/mailbox.rst:665 +msgid "" +"The actual messages are inspected to determine which labels exist in the " +"mailbox rather than consulting the list of labels in the Babyl options " +"section, but the Babyl section is updated whenever the mailbox is modified." +msgstr "邮箱中存在哪些标签会通过检查实际的消息而非查询 Babyl 选项部分的标签列表,但 Babyl 选项部分会在邮箱被修改时更新。" + +#: ../../library/mailbox.rst:670 +msgid "" +"Some :class:`Mailbox` methods implemented by :class:`Babyl` deserve special " +"remarks:" +msgstr ":class:`Babyl` 所实现的某些 :class:`Mailbox` 方法使得进行特别的说明:" + +#: ../../library/mailbox.rst:676 +msgid "" +"In Babyl mailboxes, the headers of a message are not stored contiguously " +"with the body of the message. To generate a file-like representation, the " +"headers and body are copied together into an :class:`io.BytesIO` instance, " +"which has an API identical to that of a file. As a result, the file-like " +"object is truly independent of the underlying mailbox but does not save " +"memory compared to a string representation." +msgstr "" +"在 Babyl 邮箱中,消息的标头并不是与消息体存储在一起的。 要生成文件类表示形式,标头和消息体会被一起拷贝到一个 " +":class:`io.BytesIO` 实例中,它具有与文件相似的 API。 " +"因此,文件型对象实际上独立于下层邮箱,但与字符串表达形式相比并不会更节省内存。" + +#: ../../library/mailbox.rst:695 +msgid "" +"`Format of Version 5 Babyl Files `_" +msgstr "" +"`Format of Version 5 Babyl Files `_" + +#: ../../library/mailbox.rst:695 +msgid "A specification of the Babyl format." +msgstr "Babyl 格式的规格说明。" + +#: ../../library/mailbox.rst:697 +msgid "" +"`Reading Mail with Rmail " +"`_" +msgstr "" +"`Reading Mail with Rmail " +"`_" + +#: ../../library/mailbox.rst:698 +msgid "The Rmail manual, with some information on Babyl semantics." +msgstr "Rmail 的帮助手册,包含了有关 Babyl 语义的一些信息。" + +#: ../../library/mailbox.rst:704 +msgid ":class:`MMDF`" +msgstr ":class:`MMDF`" + +#: ../../library/mailbox.rst:709 +msgid "" +"A subclass of :class:`Mailbox` for mailboxes in MMDF format. Parameter " +"*factory* is a callable object that accepts a file-like message " +"representation (which behaves as if opened in binary mode) and returns a " +"custom representation. If *factory* is ``None``, :class:`MMDFMessage` is " +"used as the default message representation. If *create* is ``True``, the " +"mailbox is created if it does not exist." +msgstr "" +":class:`Mailbox` 的子类,用于 MMDF 格式的邮箱。 形参 *factory* " +"是一个可调用对象,它接受一个文件类消息表示形式(其行为相当于以二进制模式打开)并返回一个自定义的表示形式。 如果 *factory* 为 " +"``None``,则会使用 :class:`MMDFMessage` 作为默认的消息表示形式。 如果 *create* 为 " +"``True``,则当邮箱不存在时会创建它。" + +#: ../../library/mailbox.rst:716 +msgid "" +"MMDF is a single-file mailbox format invented for the Multichannel " +"Memorandum Distribution Facility, a mail transfer agent. Each message is in " +"the same form as an mbox message but is bracketed before and after by lines " +"containing four Control-A (``'\\001'``) characters. As with the mbox format," +" the beginning of each message is indicated by a line whose first five " +"characters are \"From \", but additional occurrences of \"From \" are not " +"transformed to \">From \" when storing messages because the extra message " +"separator lines prevent mistaking such occurrences for the starts of " +"subsequent messages." +msgstr "" +"MMDF 是一种专用于电子邮件传输代理 Multichannel Memorandum Distribution Facility 的单文件邮箱格式。 " +"每条消息使用与 mbox 消息相同的形式,但其前后各有包含四个 Control-A (``'\\001'``) 字符的行。 与 mbox " +"格式一样,每条消息的开头由一个前五个字符为 \"From \" 的行来指明,但当存储消息时额外出现的 \"From \" 不会被转换为 \">From " +"\" 因为附加的消息分隔符可防止将这些内容误认为是后续消息的开头。" + +#: ../../library/mailbox.rst:725 +msgid "" +"Some :class:`Mailbox` methods implemented by :class:`MMDF` deserve special " +"remarks:" +msgstr ":class:`MMDF` 所实现的某些 :class:`Mailbox` 方法值得进行特别的说明:" + +#: ../../library/mailbox.rst:731 +msgid "" +"Using the file after calling :meth:`flush` or :meth:`close` on the " +":class:`MMDF` instance may yield unpredictable results or raise an " +"exception." +msgstr "" +"在 :class:`MMDF` 实例上调用 :meth:`flush` 或 :meth:`close` " +"之后再使用文件可能产生无法预料的结果或者引发异常。" + +#: ../../library/mailbox.rst:746 +msgid "" +"`mmdf man page from tin " +"`_" +msgstr "" +"`tin 上的 mmdf 指南页面 `_" + +#: ../../library/mailbox.rst:746 +msgid "" +"A specification of MMDF format from the documentation of tin, a newsreader." +msgstr "MMDF 格式的规格说明,来自新闻阅读器 tin 的文档。" + +#: ../../library/mailbox.rst:749 +msgid "`MMDF `_" +msgstr "`MMDF `_" + +#: ../../library/mailbox.rst:749 +msgid "" +"A Wikipedia article describing the Multichannel Memorandum Distribution " +"Facility." +msgstr "一篇描述 Multichannel Memorandum Distribution Facility 的维基百科文章。" + +#: ../../library/mailbox.rst:756 +msgid ":class:`Message` objects" +msgstr ":class:`Message` 对象" + +#: ../../library/mailbox.rst:761 +msgid "" +"A subclass of the :mod:`email.message` module's " +":class:`~email.message.Message`. Subclasses of :class:`mailbox.Message` add " +"mailbox-format-specific state and behavior." +msgstr "" +":mod:`email.message` 模块的 :class:`~email.message.Message` 的子类。 " +":class:`mailbox.Message` 的子类添加了特定邮箱格式专属的状态和行为。" + +#: ../../library/mailbox.rst:765 +msgid "" +"If *message* is omitted, the new instance is created in a default, empty " +"state. If *message* is an :class:`email.message.Message` instance, its " +"contents are copied; furthermore, any format-specific information is " +"converted insofar as possible if *message* is a :class:`Message` instance. " +"If *message* is a string, a byte string, or a file, it should contain an " +":rfc:`2822`\\ -compliant message, which is read and parsed. Files should be" +" open in binary mode, but text mode files are accepted for backward " +"compatibility." +msgstr "" +"如果省略了 *message*,则新实例会以默认的空状态被创建。 如果 *message* 是一个 " +":class:`email.message.Message` 实例,其内容会被拷贝;此外,如果 *message* 是一个 " +":class:`Message` 实例,则任何格式专属信息会尽可能地被拷贝。 如果 *message* 是一个字符串、字节串或文件,则它应当包含兼容 " +":rfc:`2822` 的消息,该消息会被读取和解析。 文档应当以二进制模式打开,但文本模式的文件也会被接受以向下兼容。" + +#: ../../library/mailbox.rst:774 +msgid "" +"The format-specific state and behaviors offered by subclasses vary, but in " +"general it is only the properties that are not specific to a particular " +"mailbox that are supported (although presumably the properties are specific " +"to a particular mailbox format). For example, file offsets for single-file " +"mailbox formats and file names for directory-based mailbox formats are not " +"retained, because they are only applicable to the original mailbox. But " +"state such as whether a message has been read by the user or marked as " +"important is retained, because it applies to the message itself." +msgstr "" +"各个子类所提供的格式专属状态和行为各有不同,但总的来说只有那些不仅限于特定邮箱的特性才会被支持(虽然这些特性可能专属于特定邮箱格式)。 " +"例如,例如,单文件邮箱格式的文件偏移量和基于目录的邮箱格式的文件名都不会被保留,因为它们都仅适用于对应的原始邮箱。 " +"但消息是否已被用户读取或标记为重要等状态则会被保留,因为它们适用于消息本身。" + +#: ../../library/mailbox.rst:783 +msgid "" +"There is no requirement that :class:`Message` instances be used to represent" +" messages retrieved using :class:`Mailbox` instances. In some situations, " +"the time and memory required to generate :class:`Message` representations " +"might not be acceptable. For such situations, :class:`Mailbox` instances " +"also offer string and file-like representations, and a custom message " +"factory may be specified when a :class:`Mailbox` instance is initialized." +msgstr "" +"不要求用 :class:`Message` 实例来表示使用 :class:`Mailbox` 实例所提取到的消息。 在某些情况下,生成 " +":class:`Message` 表示形式所需的时间和内存空间可能是不可接受的。 对于此类情况,:class:`Mailbox` " +"实例还提供了字符串和文件类表示形式,并可在初始化 :class:`Mailbox` 实例时指定自定义的消息工厂函数。" + +#: ../../library/mailbox.rst:794 +msgid ":class:`MaildirMessage`" +msgstr ":class:`MaildirMessage`" + +#: ../../library/mailbox.rst:799 +msgid "" +"A message with Maildir-specific behaviors. Parameter *message* has the same " +"meaning as with the :class:`Message` constructor." +msgstr "具有 Maildir 专属行为的消息。 形参 *message* 的含义与 :class:`Message` 构造器一致。" + +#: ../../library/mailbox.rst:802 +msgid "" +"Typically, a mail user agent application moves all of the messages in the " +":file:`new` subdirectory to the :file:`cur` subdirectory after the first " +"time the user opens and closes the mailbox, recording that the messages are " +"old whether or not they've actually been read. Each message in :file:`cur` " +"has an \"info\" section added to its file name to store information about " +"its state. (Some mail readers may also add an \"info\" section to messages " +"in :file:`new`.) The \"info\" section may take one of two forms: it may " +"contain \"2,\" followed by a list of standardized flags (e.g., \"2,FR\") or " +"it may contain \"1,\" followed by so-called experimental information. " +"Standard flags for Maildir messages are as follows:" +msgstr "" +"通常,邮件用户代理应用程序会在用户第一次打开并关闭邮箱之后将 :file:`new` 子目录中的所有消息移至 :file:`cur` " +"子目录,将这些消息记录为旧消息,无论它们是否真的已被阅读。 :file:`cur` 下的每条消息都有一个 \"info\" " +"部分被添加到其文件名中以存储有关其状态的信息。 (某些邮件阅读器还会把 \"info\" 部分也添加到 :file:`new` 下的消息中。) " +"\"info\" 部分可以采用两种形式之一:它可能包含 \"2,\" 后面跟一个经标准化的旗标列表(例如 \"2,FR\")或者它可能包含 \"1,\"" +" 后面跟所谓的实验性信息。 Maildir 消息的标准旗标如下:" + +#: ../../library/mailbox.rst:814 ../../library/mailbox.rst:981 +#: ../../library/mailbox.rst:1351 +msgid "Flag" +msgstr "标志位" + +#: ../../library/mailbox.rst:814 ../../library/mailbox.rst:981 +#: ../../library/mailbox.rst:1351 +msgid "Meaning" +msgstr "含意" + +#: ../../library/mailbox.rst:814 ../../library/mailbox.rst:981 +#: ../../library/mailbox.rst:1131 ../../library/mailbox.rst:1218 +#: ../../library/mailbox.rst:1351 +msgid "Explanation" +msgstr "说明" + +#: ../../library/mailbox.rst:816 ../../library/mailbox.rst:987 +#: ../../library/mailbox.rst:1357 +msgid "D" +msgstr "D" + +#: ../../library/mailbox.rst:816 +msgid "Draft" +msgstr "草稿" + +#: ../../library/mailbox.rst:816 +msgid "Under composition" +msgstr "正在撰写中" + +#: ../../library/mailbox.rst:818 ../../library/mailbox.rst:989 +#: ../../library/mailbox.rst:1359 +msgid "F" +msgstr "F" + +#: ../../library/mailbox.rst:818 ../../library/mailbox.rst:989 +#: ../../library/mailbox.rst:1359 +msgid "Flagged" +msgstr "已标记" + +#: ../../library/mailbox.rst:818 ../../library/mailbox.rst:989 +#: ../../library/mailbox.rst:1137 ../../library/mailbox.rst:1359 +msgid "Marked as important" +msgstr "已被标记为重要" + +#: ../../library/mailbox.rst:820 +msgid "P" +msgstr "P" + +#: ../../library/mailbox.rst:820 +msgid "Passed" +msgstr "已检视" + +#: ../../library/mailbox.rst:820 +msgid "Forwarded, resent, or bounced" +msgstr "转发,重新发送或退回" + +#: ../../library/mailbox.rst:822 ../../library/mailbox.rst:983 +#: ../../library/mailbox.rst:1353 +msgid "R" +msgstr "R" + +#: ../../library/mailbox.rst:822 +msgid "Replied" +msgstr "已回复" + +#: ../../library/mailbox.rst:822 ../../library/mailbox.rst:991 +#: ../../library/mailbox.rst:1135 ../../library/mailbox.rst:1226 +#: ../../library/mailbox.rst:1361 +msgid "Replied to" +msgstr "回复给" + +#: ../../library/mailbox.rst:824 +msgid "S" +msgstr "S" + +#: ../../library/mailbox.rst:824 +msgid "Seen" +msgstr "已查看" + +#: ../../library/mailbox.rst:824 ../../library/mailbox.rst:983 +#: ../../library/mailbox.rst:983 ../../library/mailbox.rst:1353 +#: ../../library/mailbox.rst:1353 +msgid "Read" +msgstr "已阅读" + +#: ../../library/mailbox.rst:826 +msgid "T" +msgstr "T" + +#: ../../library/mailbox.rst:826 +msgid "Trashed" +msgstr "已删除" + +#: ../../library/mailbox.rst:826 ../../library/mailbox.rst:987 +#: ../../library/mailbox.rst:1222 ../../library/mailbox.rst:1357 +msgid "Marked for subsequent deletion" +msgstr "标记为可被删除" + +#: ../../library/mailbox.rst:829 +msgid ":class:`MaildirMessage` instances offer the following methods:" +msgstr ":class:`MaildirMessage` 实例提供以下方法:" + +#: ../../library/mailbox.rst:834 +msgid "" +"Return either \"new\" (if the message should be stored in the :file:`new` " +"subdirectory) or \"cur\" (if the message should be stored in the :file:`cur`" +" subdirectory)." +msgstr "" +"返回 \"new\" (如果消息应当被存储在 :file:`new` 子目录下) 或者 \"cur\" (如果消息应当被存储在 :file:`cur` " +"子目录下)。" + +#: ../../library/mailbox.rst:840 +msgid "" +"A message is typically moved from :file:`new` to :file:`cur` after its " +"mailbox has been accessed, whether or not the message is has been read. A " +"message ``msg`` has been read if ``\"S\" in msg.get_flags()`` is ``True``." +msgstr "" +"消息通常会在其邮箱被访问后被从 :file:`new` 移至 :file:`cur`,无论该消息是否已被阅读。如果 ``\"S\" in " +"msg.get_flags()`` 为 ``True`` 则说明消息 ``msg`` 已被阅读。" + +#: ../../library/mailbox.rst:848 +msgid "" +"Set the subdirectory the message should be stored in. Parameter *subdir* " +"must be either \"new\" or \"cur\"." +msgstr "设置消息应当被存储到的子目录。 形参 *subdir* 必须为 \"new\" 或 \"cur\"。" + +#: ../../library/mailbox.rst:854 +msgid "" +"Return a string specifying the flags that are currently set. If the message " +"complies with the standard Maildir format, the result is the concatenation " +"in alphabetical order of zero or one occurrence of each of ``'D'``, ``'F'``," +" ``'P'``, ``'R'``, ``'S'``, and ``'T'``. The empty string is returned if no " +"flags are set or if \"info\" contains experimental semantics." +msgstr "" +"返回一个指明当前所设旗标的字符串。 如果消息符合标准的 Maildir 格式,则结果为零或按字母顺序各自出现一次的 ``'D'``, ``'F'``, " +"``'P'``, ``'R'``, ``'S'`` 和 ``'T'`` 的拼接。 如果未设任何旗标或者如果 \"info\" " +"包含实验性语义则返回空字符串。" + +#: ../../library/mailbox.rst:864 +msgid "Set the flags specified by *flags* and unset all others." +msgstr "设置由 *flags* 所指定的旗标并重置所有其它旗标。" + +#: ../../library/mailbox.rst:869 +msgid "" +"Set the flag(s) specified by *flag* without changing other flags. To add " +"more than one flag at a time, *flag* may be a string of more than one " +"character. The current \"info\" is overwritten whether or not it contains " +"experimental information rather than flags." +msgstr "" +"设置由 *flag* 所指明的旗标而不改变其他旗标。 要一次性添加一个以上的旗标,*flag* 可以为包含一个以上字符的字符串。 当前 \"info\"" +" 会被覆盖,无论它是否只包含实验性信息而非旗标。" + +#: ../../library/mailbox.rst:877 +msgid "" +"Unset the flag(s) specified by *flag* without changing other flags. To " +"remove more than one flag at a time, *flag* maybe a string of more than one " +"character. If \"info\" contains experimental information rather than flags," +" the current \"info\" is not modified." +msgstr "" +"重置由 *flag* 所指明的旗标而不改变其他旗标。 要一次性移除一个以上的旗标,*flag* 可以为包含一个以上字符的字符串。 如果 \"info\"" +" 包含实验性信息而非旗标,则当前的 \"info\" 不会被修改。" + +#: ../../library/mailbox.rst:885 +msgid "" +"Return the delivery date of the message as a floating-point number " +"representing seconds since the epoch." +msgstr "以表示 Unix 纪元秒数的浮点数形式返回消息的发送日期。" + +#: ../../library/mailbox.rst:891 +msgid "" +"Set the delivery date of the message to *date*, a floating-point number " +"representing seconds since the epoch." +msgstr "将消息的发送日期设为 *date*,一个表示 Unix 纪元秒数的浮点数。" + +#: ../../library/mailbox.rst:897 +msgid "" +"Return a string containing the \"info\" for a message. This is useful for " +"accessing and modifying \"info\" that is experimental (i.e., not a list of " +"flags)." +msgstr "返回一个包含消息的 \"info\" 的字符串。 这适用于访问和修改实验性的 \"info\" (即不是由旗标组成的列表)。" + +#: ../../library/mailbox.rst:904 +msgid "Set \"info\" to *info*, which should be a string." +msgstr "将 \"info\" 设为 *info*,这应当是一个字符串。" + +#: ../../library/mailbox.rst:906 +msgid "" +"When a :class:`MaildirMessage` instance is created based upon an " +":class:`mboxMessage` or :class:`MMDFMessage` instance, the " +":mailheader:`Status` and :mailheader:`X-Status` headers are omitted and the " +"following conversions take place:" +msgstr "" +"当一个 :class:`MaildirMessage` 实例基于 :class:`mboxMessage` 或 :class:`MMDFMessage`" +" 实例被创建时,将会忽略 :mailheader:`Status` 和 :mailheader:`X-Status` 标头并进行下列转换:" + +#: ../../library/mailbox.rst:912 ../../library/mailbox.rst:930 +#: ../../library/mailbox.rst:945 ../../library/mailbox.rst:1052 +#: ../../library/mailbox.rst:1069 ../../library/mailbox.rst:1084 +#: ../../library/mailbox.rst:1099 ../../library/mailbox.rst:1166 +#: ../../library/mailbox.rst:1181 ../../library/mailbox.rst:1195 +#: ../../library/mailbox.rst:1292 ../../library/mailbox.rst:1309 +#: ../../library/mailbox.rst:1323 ../../library/mailbox.rst:1423 +#: ../../library/mailbox.rst:1440 ../../library/mailbox.rst:1455 +#: ../../library/mailbox.rst:1471 +msgid "Resulting state" +msgstr "结果状态" + +#: ../../library/mailbox.rst:912 ../../library/mailbox.rst:1181 +#: ../../library/mailbox.rst:1309 +msgid ":class:`mboxMessage` or :class:`MMDFMessage` state" +msgstr ":class:`mboxMessage` 或 :class:`MMDFMessage` 状态" + +#: ../../library/mailbox.rst:915 ../../library/mailbox.rst:932 +#: ../../library/mailbox.rst:947 ../../library/mailbox.rst:1056 +#: ../../library/mailbox.rst:1427 +msgid "\"cur\" subdirectory" +msgstr "\"cur\" 子目录" + +#: ../../library/mailbox.rst:915 ../../library/mailbox.rst:1056 +#: ../../library/mailbox.rst:1073 ../../library/mailbox.rst:1088 +#: ../../library/mailbox.rst:1103 ../../library/mailbox.rst:1103 +#: ../../library/mailbox.rst:1427 ../../library/mailbox.rst:1444 +#: ../../library/mailbox.rst:1459 ../../library/mailbox.rst:1475 +#: ../../library/mailbox.rst:1475 +msgid "O flag" +msgstr "O 旗标" + +#: ../../library/mailbox.rst:917 ../../library/mailbox.rst:917 +#: ../../library/mailbox.rst:936 ../../library/mailbox.rst:1060 +#: ../../library/mailbox.rst:1060 ../../library/mailbox.rst:1075 +#: ../../library/mailbox.rst:1107 ../../library/mailbox.rst:1107 +#: ../../library/mailbox.rst:1172 ../../library/mailbox.rst:1188 +#: ../../library/mailbox.rst:1431 ../../library/mailbox.rst:1431 +#: ../../library/mailbox.rst:1446 ../../library/mailbox.rst:1479 +#: ../../library/mailbox.rst:1479 +msgid "F flag" +msgstr "F 旗标" + +#: ../../library/mailbox.rst:919 ../../library/mailbox.rst:921 +#: ../../library/mailbox.rst:938 ../../library/mailbox.rst:953 +#: ../../library/mailbox.rst:1054 ../../library/mailbox.rst:1062 +#: ../../library/mailbox.rst:1101 ../../library/mailbox.rst:1101 +#: ../../library/mailbox.rst:1170 ../../library/mailbox.rst:1298 +#: ../../library/mailbox.rst:1425 ../../library/mailbox.rst:1433 +#: ../../library/mailbox.rst:1473 ../../library/mailbox.rst:1473 +msgid "R flag" +msgstr "R 旗标" + +#: ../../library/mailbox.rst:919 ../../library/mailbox.rst:1062 +#: ../../library/mailbox.rst:1077 ../../library/mailbox.rst:1092 +#: ../../library/mailbox.rst:1109 ../../library/mailbox.rst:1109 +#: ../../library/mailbox.rst:1186 ../../library/mailbox.rst:1316 +#: ../../library/mailbox.rst:1433 ../../library/mailbox.rst:1448 +#: ../../library/mailbox.rst:1463 ../../library/mailbox.rst:1481 +#: ../../library/mailbox.rst:1481 +msgid "A flag" +msgstr "A 旗标" + +#: ../../library/mailbox.rst:921 ../../library/mailbox.rst:1054 +#: ../../library/mailbox.rst:1425 +msgid "S flag" +msgstr "S 旗标" + +#: ../../library/mailbox.rst:923 ../../library/mailbox.rst:955 +#: ../../library/mailbox.rst:1058 ../../library/mailbox.rst:1296 +#: ../../library/mailbox.rst:1429 +msgid "T flag" +msgstr "T 旗标" + +#: ../../library/mailbox.rst:923 ../../library/mailbox.rst:1058 +#: ../../library/mailbox.rst:1090 ../../library/mailbox.rst:1105 +#: ../../library/mailbox.rst:1105 ../../library/mailbox.rst:1314 +#: ../../library/mailbox.rst:1429 ../../library/mailbox.rst:1461 +#: ../../library/mailbox.rst:1477 ../../library/mailbox.rst:1477 +msgid "D flag" +msgstr "D 旗标" + +#: ../../library/mailbox.rst:926 +msgid "" +"When a :class:`MaildirMessage` instance is created based upon an " +":class:`MHMessage` instance, the following conversions take place:" +msgstr "当一个 :class:`MaildirMessage` 实例基于 :class:`MHMessage` 实例被创建时,将进行下列转换:" + +#: ../../library/mailbox.rst:930 ../../library/mailbox.rst:1069 +#: ../../library/mailbox.rst:1323 ../../library/mailbox.rst:1440 +msgid ":class:`MHMessage` state" +msgstr ":class:`MHMessage` 状态" + +#: ../../library/mailbox.rst:932 ../../library/mailbox.rst:1073 +#: ../../library/mailbox.rst:1168 ../../library/mailbox.rst:1184 +#: ../../library/mailbox.rst:1197 ../../library/mailbox.rst:1325 +#: ../../library/mailbox.rst:1444 +msgid "\"unseen\" sequence" +msgstr "\"unseen\" 序列" + +#: ../../library/mailbox.rst:934 ../../library/mailbox.rst:949 +msgid "\"cur\" subdirectory and S flag" +msgstr "\"cur\" 子目录和 S 旗标" + +#: ../../library/mailbox.rst:934 ../../library/mailbox.rst:1071 +#: ../../library/mailbox.rst:1442 +msgid "no \"unseen\" sequence" +msgstr "非 \"unseen\" 序列" + +#: ../../library/mailbox.rst:936 ../../library/mailbox.rst:1075 +#: ../../library/mailbox.rst:1172 ../../library/mailbox.rst:1188 +#: ../../library/mailbox.rst:1446 +msgid "\"flagged\" sequence" +msgstr "\"flagged\" 序列" + +#: ../../library/mailbox.rst:938 ../../library/mailbox.rst:1077 +#: ../../library/mailbox.rst:1170 ../../library/mailbox.rst:1186 +#: ../../library/mailbox.rst:1199 ../../library/mailbox.rst:1327 +#: ../../library/mailbox.rst:1448 +msgid "\"replied\" sequence" +msgstr "\"replied\" 序列" + +#: ../../library/mailbox.rst:941 +msgid "" +"When a :class:`MaildirMessage` instance is created based upon a " +":class:`BabylMessage` instance, the following conversions take place:" +msgstr "" +"当一个 :class:`MaildirMessage` 实例基于 :class:`BabylMessage` 实例被创建时,将进行下列转换:" + +#: ../../library/mailbox.rst:945 ../../library/mailbox.rst:1084 +#: ../../library/mailbox.rst:1195 ../../library/mailbox.rst:1455 +msgid ":class:`BabylMessage` state" +msgstr ":class:`BabylMessage` 状态" + +#: ../../library/mailbox.rst:947 ../../library/mailbox.rst:1088 +#: ../../library/mailbox.rst:1197 ../../library/mailbox.rst:1294 +#: ../../library/mailbox.rst:1312 ../../library/mailbox.rst:1325 +#: ../../library/mailbox.rst:1459 +msgid "\"unseen\" label" +msgstr "\"unseen\" 标签" + +#: ../../library/mailbox.rst:949 ../../library/mailbox.rst:1086 +#: ../../library/mailbox.rst:1457 +msgid "no \"unseen\" label" +msgstr "非 \"unseen\" 标签" + +#: ../../library/mailbox.rst:951 ../../library/mailbox.rst:1300 +msgid "P flag" +msgstr "P 旗标" + +#: ../../library/mailbox.rst:951 +msgid "\"forwarded\" or \"resent\" label" +msgstr "\"forwarded\" 或 \"resent\" 标签" + +#: ../../library/mailbox.rst:953 ../../library/mailbox.rst:1092 +#: ../../library/mailbox.rst:1199 ../../library/mailbox.rst:1298 +#: ../../library/mailbox.rst:1316 ../../library/mailbox.rst:1327 +#: ../../library/mailbox.rst:1463 +msgid "\"answered\" label" +msgstr "\"answered\" 标签" + +#: ../../library/mailbox.rst:955 ../../library/mailbox.rst:1090 +#: ../../library/mailbox.rst:1296 ../../library/mailbox.rst:1314 +#: ../../library/mailbox.rst:1461 +msgid "\"deleted\" label" +msgstr "\"deleted\" 标签" + +#: ../../library/mailbox.rst:962 +msgid ":class:`mboxMessage`" +msgstr ":class:`mboxMessage`" + +#: ../../library/mailbox.rst:967 +msgid "" +"A message with mbox-specific behaviors. Parameter *message* has the same " +"meaning as with the :class:`Message` constructor." +msgstr "具有 mbox 专属行为的消息。 形参 *message* 的含义与 :class:`Message` 构造器一致。" + +#: ../../library/mailbox.rst:970 +msgid "" +"Messages in an mbox mailbox are stored together in a single file. The " +"sender's envelope address and the time of delivery are typically stored in a" +" line beginning with \"From \" that is used to indicate the start of a " +"message, though there is considerable variation in the exact format of this " +"data among mbox implementations. Flags that indicate the state of the " +"message, such as whether it has been read or marked as important, are " +"typically stored in :mailheader:`Status` and :mailheader:`X-Status` headers." +msgstr "" +"mbox 邮箱中的消息会一起存储在单个文件中。 发件人的信封地址和发送时间通常存储在指明每条消息的起始的以 \"From \" 打头的行中,不过在 " +"mbox 的各种实现之间此数据的确切格式具有相当大的差异。 指明消息状态的各种旗标,例如是否已读或标记为重要等等通常存储在 " +":mailheader:`Status` 和 :mailheader:`X-Status` 标头中。" + +#: ../../library/mailbox.rst:978 +msgid "Conventional flags for mbox messages are as follows:" +msgstr "传统的 mbox 消息旗标如下:" + +#: ../../library/mailbox.rst:985 ../../library/mailbox.rst:1355 +msgid "O" +msgstr "O" + +#: ../../library/mailbox.rst:985 ../../library/mailbox.rst:1355 +msgid "Old" +msgstr "旧消息" + +#: ../../library/mailbox.rst:985 ../../library/mailbox.rst:1355 +msgid "Previously detected by MUA" +msgstr "之前已经过 MUA 检测" + +#: ../../library/mailbox.rst:987 ../../library/mailbox.rst:1357 +msgid "Deleted" +msgstr "已删除" + +#: ../../library/mailbox.rst:991 ../../library/mailbox.rst:1361 +msgid "A" +msgstr "A" + +#: ../../library/mailbox.rst:991 ../../library/mailbox.rst:1361 +msgid "Answered" +msgstr "已回复" + +#: ../../library/mailbox.rst:994 ../../library/mailbox.rst:1364 +msgid "" +"The \"R\" and \"O\" flags are stored in the :mailheader:`Status` header, and" +" the \"D\", \"F\", and \"A\" flags are stored in the :mailheader:`X-Status` " +"header. The flags and headers typically appear in the order mentioned." +msgstr "" +"\"R\" 和 \"O\" 旗标存储在 :mailheader:`Status` 标头中,而 \"D\", \"F\" 和 \"A\" 旗标存储在 " +":mailheader:`X-Status` 标头中。 旗标和标头通常会按上述顺序显示。" + +#: ../../library/mailbox.rst:998 +msgid ":class:`mboxMessage` instances offer the following methods:" +msgstr ":class:`mboxMessage` 实例提供了下列方法:" + +#: ../../library/mailbox.rst:1003 ../../library/mailbox.rst:1374 +msgid "" +"Return a string representing the \"From \" line that marks the start of the " +"message in an mbox mailbox. The leading \"From \" and the trailing newline " +"are excluded." +msgstr "返回一个表示在 mbox 邮箱中标记消息起始的 \"From \" 行的字符串。 开头的 \"From \" 和末尾的换行符会被去除。" + +#: ../../library/mailbox.rst:1010 ../../library/mailbox.rst:1381 +msgid "" +"Set the \"From \" line to *from_*, which should be specified without a " +"leading \"From \" or trailing newline. For convenience, *time_* may be " +"specified and will be formatted appropriately and appended to *from_*. If " +"*time_* is specified, it should be a :class:`time.struct_time` instance, a " +"tuple suitable for passing to :meth:`time.strftime`, or ``True`` (to use " +":meth:`time.gmtime`)." +msgstr "" +"将 \"From \" 行设为 *from_*,这应当被指定为不带开头的 \"From \" 或末尾的换行符。 为方便起见,可以指定 *time_* " +"并将经过适当的格式化再添加到 *from_*。 如果指定了 *time_*,它应当是一个 :class:`time.struct_time` " +"实例,适合传入 :meth:`time.strftime` 的元组或者 ``True`` (以使用 :meth:`time.gmtime`)。" + +#: ../../library/mailbox.rst:1020 ../../library/mailbox.rst:1391 +msgid "" +"Return a string specifying the flags that are currently set. If the message " +"complies with the conventional format, the result is the concatenation in " +"the following order of zero or one occurrence of each of ``'R'``, ``'O'``, " +"``'D'``, ``'F'``, and ``'A'``." +msgstr "" +"返回一个指明当前所设旗标的字符串。 如果消息符合规范格式,则结果为零或各自出现一次的 ``'R'``, ``'O'``, ``'D'``, " +"``'F'`` 和 ``'A'`` 按上述顺序的拼接。" + +#: ../../library/mailbox.rst:1028 ../../library/mailbox.rst:1399 +msgid "" +"Set the flags specified by *flags* and unset all others. Parameter *flags* " +"should be the concatenation in any order of zero or more occurrences of each" +" of ``'R'``, ``'O'``, ``'D'``, ``'F'``, and ``'A'``." +msgstr "" +"设置由 *flags* 所指明的旗标并重启所有其他旗标。 形参 *flags* 应当为零或各自出现多次的 ``'R'``, ``'O'``, " +"``'D'``, ``'F'`` 和 ``'A'`` 按任意顺序的拼接。" + +#: ../../library/mailbox.rst:1035 ../../library/mailbox.rst:1406 +msgid "" +"Set the flag(s) specified by *flag* without changing other flags. To add " +"more than one flag at a time, *flag* may be a string of more than one " +"character." +msgstr "设置由 *flag* 所指明的旗标而不改变其他旗标。 要一次性添加一个以上的旗标,*flag* 可以为包含一个以上字符的字符串。" + +#: ../../library/mailbox.rst:1042 ../../library/mailbox.rst:1413 +msgid "" +"Unset the flag(s) specified by *flag* without changing other flags. To " +"remove more than one flag at a time, *flag* maybe a string of more than one " +"character." +msgstr "重置由 *flag* 所指明的旗标而不改变其他旗标。 要一次性移除一个以上的旗标,*flag* 可以为包含一个以上字符的字符串。" + +#: ../../library/mailbox.rst:1046 +msgid "" +"When an :class:`mboxMessage` instance is created based upon a " +":class:`MaildirMessage` instance, a \"From \" line is generated based upon " +"the :class:`MaildirMessage` instance's delivery date, and the following " +"conversions take place:" +msgstr "" +"当一个 :class:`mboxMessage` 实例基于 :class:`MaildirMessage` 实例被创建时,\"From \" 行会基于 " +":class:`MaildirMessage` 实例的发送时间被生成,并进行下列转换:" + +#: ../../library/mailbox.rst:1052 ../../library/mailbox.rst:1166 +#: ../../library/mailbox.rst:1292 ../../library/mailbox.rst:1423 +msgid ":class:`MaildirMessage` state" +msgstr ":class:`MaildirMessage` 状态" + +#: ../../library/mailbox.rst:1065 +msgid "" +"When an :class:`mboxMessage` instance is created based upon an " +":class:`MHMessage` instance, the following conversions take place:" +msgstr "当一个 :class:`mboxMessage` 实例基于 :class:`MHMessage` 实例被创建时,将进行下列转换:" + +#: ../../library/mailbox.rst:1071 ../../library/mailbox.rst:1086 +#: ../../library/mailbox.rst:1442 ../../library/mailbox.rst:1457 +msgid "R flag and O flag" +msgstr "R 旗标 和 O 旗标" + +#: ../../library/mailbox.rst:1080 +msgid "" +"When an :class:`mboxMessage` instance is created based upon a " +":class:`BabylMessage` instance, the following conversions take place:" +msgstr "当一个 :class:`mboxMessage` 实例基于 :class:`BabylMessage` 实例被创建时,将进行下列转换:" + +#: ../../library/mailbox.rst:1095 +msgid "" +"When a :class:`Message` instance is created based upon an " +":class:`MMDFMessage` instance, the \"From \" line is copied and all flags " +"directly correspond:" +msgstr "" +"当一个 :class:`Message` 实例基于 :class:`MMDFMessage` 实例被创建时,\"From \" " +"行会被拷贝并直接对应所有旗标。" + +#: ../../library/mailbox.rst:1099 +msgid ":class:`MMDFMessage` state" +msgstr ":class:`MMDFMessage` 状态" + +#: ../../library/mailbox.rst:1116 +msgid ":class:`MHMessage`" +msgstr ":class:`MHMessage`" + +#: ../../library/mailbox.rst:1121 +msgid "" +"A message with MH-specific behaviors. Parameter *message* has the same " +"meaning as with the :class:`Message` constructor." +msgstr "具有 MH 专属行为的消息。 形参 *message* 的含义与 :class:`Message` 构造器一致。" + +#: ../../library/mailbox.rst:1124 +msgid "" +"MH messages do not support marks or flags in the traditional sense, but they" +" do support sequences, which are logical groupings of arbitrary messages. " +"Some mail reading programs (although not the standard :program:`mh` and " +":program:`nmh`) use sequences in much the same way flags are used with other" +" formats, as follows:" +msgstr "" +"MH 消息不支持传统意义上的标记或旗标,但它们支持序列,即对任意消息的逻辑分组。 某些邮件阅读程序 (但不包括标准 :program:`mh` 和 " +":program:`nmh`) 以与其他格式使用旗标类似的方式来使用序列,如下所示:" + +#: ../../library/mailbox.rst:1131 +msgid "Sequence" +msgstr "序列" + +#: ../../library/mailbox.rst:1133 ../../library/mailbox.rst:1220 +msgid "unseen" +msgstr "unseen" + +#: ../../library/mailbox.rst:1133 ../../library/mailbox.rst:1220 +msgid "Not read, but previously detected by MUA" +msgstr "未阅读,但之前已经过 MUA 检测" + +#: ../../library/mailbox.rst:1135 +msgid "replied" +msgstr "已回复" + +#: ../../library/mailbox.rst:1137 +msgid "flagged" +msgstr "已标记" + +#: ../../library/mailbox.rst:1140 +msgid ":class:`MHMessage` instances offer the following methods:" +msgstr ":class:`MHMessage` 实例提供了下列方法:" + +#: ../../library/mailbox.rst:1145 +msgid "Return a list of the names of sequences that include this message." +msgstr "返回一个包含此消息的序列的名称的列表。" + +#: ../../library/mailbox.rst:1150 +msgid "Set the list of sequences that include this message." +msgstr "设置包含此消息的序列的列表。" + +#: ../../library/mailbox.rst:1155 +msgid "Add *sequence* to the list of sequences that include this message." +msgstr "将 *sequence* 添加到包含此消息的序列的列表。" + +#: ../../library/mailbox.rst:1160 +msgid "" +"Remove *sequence* from the list of sequences that include this message." +msgstr "将 *sequence* 从包含此消息的序列的列表中移除。" + +#: ../../library/mailbox.rst:1162 +msgid "" +"When an :class:`MHMessage` instance is created based upon a " +":class:`MaildirMessage` instance, the following conversions take place:" +msgstr "当一个 :class:`MHMessage` 实例基于 :class:`MaildirMessage` 实例被创建时,将进行下列转换:" + +#: ../../library/mailbox.rst:1168 ../../library/mailbox.rst:1294 +msgid "no S flag" +msgstr "非 S 旗标" + +#: ../../library/mailbox.rst:1175 +msgid "" +"When an :class:`MHMessage` instance is created based upon an " +":class:`mboxMessage` or :class:`MMDFMessage` instance, the " +":mailheader:`Status` and :mailheader:`X-Status` headers are omitted and the " +"following conversions take place:" +msgstr "" +"当一个 :class:`MHMessage` 实例基于 :class:`mboxMessage` 或 :class:`MMDFMessage` " +"实例被创建时,将会忽略 :mailheader:`Status` 和 :mailheader:`X-Status` 标头并进行下列转换:" + +#: ../../library/mailbox.rst:1184 ../../library/mailbox.rst:1312 +msgid "no R flag" +msgstr "非 R 旗标" + +#: ../../library/mailbox.rst:1191 +msgid "" +"When an :class:`MHMessage` instance is created based upon a " +":class:`BabylMessage` instance, the following conversions take place:" +msgstr "当一个 :class:`MHMessage` 实例基于 :class:`BabylMessage` 实例被创建时,将进入下列转换:" + +#: ../../library/mailbox.rst:1206 +msgid ":class:`BabylMessage`" +msgstr ":class:`BabylMessage`" + +#: ../../library/mailbox.rst:1211 +msgid "" +"A message with Babyl-specific behaviors. Parameter *message* has the same " +"meaning as with the :class:`Message` constructor." +msgstr "具有 Babyl 专属行为的消息。 形参 *message* 的含义与 :class:`Message` 构造器一致。" + +#: ../../library/mailbox.rst:1214 +msgid "" +"Certain message labels, called :dfn:`attributes`, are defined by convention " +"to have special meanings. The attributes are as follows:" +msgstr "某些消息标签被称为 :dfn:`属性`,根据惯例被定义为具有特殊的含义。 这些属性如下所示:" + +#: ../../library/mailbox.rst:1218 +msgid "Label" +msgstr "标签" + +#: ../../library/mailbox.rst:1222 +msgid "deleted" +msgstr "deleted" + +#: ../../library/mailbox.rst:1224 +msgid "filed" +msgstr "filed" + +#: ../../library/mailbox.rst:1224 +msgid "Copied to another file or mailbox" +msgstr "复制到另一个文件或邮箱" + +#: ../../library/mailbox.rst:1226 +msgid "answered" +msgstr "answered" + +#: ../../library/mailbox.rst:1228 +msgid "forwarded" +msgstr "forwarded" + +#: ../../library/mailbox.rst:1228 +msgid "Forwarded" +msgstr "已转发" + +#: ../../library/mailbox.rst:1230 +msgid "edited" +msgstr "edited" + +#: ../../library/mailbox.rst:1230 +msgid "Modified by the user" +msgstr "已被用户修改" + +#: ../../library/mailbox.rst:1232 +msgid "resent" +msgstr "resent" + +#: ../../library/mailbox.rst:1232 +msgid "Resent" +msgstr "已重发" + +#: ../../library/mailbox.rst:1235 +msgid "" +"By default, Rmail displays only visible headers. The :class:`BabylMessage` " +"class, though, uses the original headers because they are more complete. " +"Visible headers may be accessed explicitly if desired." +msgstr "" +"默认情况下,Rmail 只显示可见标头。 不过 :class:`BabylMessage` 类会使用原始标头因为它们更完整。 " +"如果需要可以显式地访问可见标头。" + +#: ../../library/mailbox.rst:1239 +msgid ":class:`BabylMessage` instances offer the following methods:" +msgstr ":class:`BabylMessage` 实例提供了下列方法:" + +#: ../../library/mailbox.rst:1244 +msgid "Return a list of labels on the message." +msgstr "返回邮件上的标签列表。" + +#: ../../library/mailbox.rst:1249 +msgid "Set the list of labels on the message to *labels*." +msgstr "将消息上的标签列表设置为 *labels* 。" + +#: ../../library/mailbox.rst:1254 +msgid "Add *label* to the list of labels on the message." +msgstr "将 *label* 添加到消息上的标签列表中。" + +#: ../../library/mailbox.rst:1259 +msgid "Remove *label* from the list of labels on the message." +msgstr "从消息上的标签列表中删除 *label* 。" + +#: ../../library/mailbox.rst:1264 +msgid "" +"Return an :class:`Message` instance whose headers are the message's visible " +"headers and whose body is empty." +msgstr "返回一个 :class:`Message` 实例,其标头为消息的可见标头而其消息体为空。" + +#: ../../library/mailbox.rst:1270 +msgid "" +"Set the message's visible headers to be the same as the headers in " +"*message*. Parameter *visible* should be a :class:`Message` instance, an " +":class:`email.message.Message` instance, a string, or a file-like object " +"(which should be open in text mode)." +msgstr "" +"将消息的可见标头设为与 *message* 中的标头一致。 形参 *visible* 应当是一个 :class:`Message` " +"实例,:class:`email.message.Message` 实例,字符串或文件型对象(且应当以文本模式打开)。" + +#: ../../library/mailbox.rst:1278 +msgid "" +"When a :class:`BabylMessage` instance's original headers are modified, the " +"visible headers are not automatically modified to correspond. This method " +"updates the visible headers as follows: each visible header with a " +"corresponding original header is set to the value of the original header, " +"each visible header without a corresponding original header is removed, and " +"any of :mailheader:`Date`, :mailheader:`From`, :mailheader:`Reply-To`, " +":mailheader:`To`, :mailheader:`CC`, and :mailheader:`Subject` that are " +"present in the original headers but not the visible headers are added to the" +" visible headers." +msgstr "" +"当一个 :class:`BabylMessage` 实例的原始标头被修改时,可见标头不会自动进行对应修改。 " +"此方法将按以下方式更新可见标头:每个具有对应原始标头的可见标头会被设为原始标头的值,每个没有对应原始标头的可见标头会被移除,而任何存在于原始标头但不存在于可见标头中的" +" :mailheader:`Date`, :mailheader:`From`, :mailheader:`Reply-To`, " +":mailheader:`To`, :mailheader:`CC` 和 :mailheader:`Subject` 会被添加至可见标头。" + +#: ../../library/mailbox.rst:1288 +msgid "" +"When a :class:`BabylMessage` instance is created based upon a " +":class:`MaildirMessage` instance, the following conversions take place:" +msgstr "" +"当一个 :class:`BabylMessage` 实例基于 :class:`MaildirMessage` 实例被创建时,将进行下列转换:" + +#: ../../library/mailbox.rst:1300 +msgid "\"forwarded\" label" +msgstr "\"forwarded\" 标签" + +#: ../../library/mailbox.rst:1303 +msgid "" +"When a :class:`BabylMessage` instance is created based upon an " +":class:`mboxMessage` or :class:`MMDFMessage` instance, the " +":mailheader:`Status` and :mailheader:`X-Status` headers are omitted and the " +"following conversions take place:" +msgstr "" +"当一个 :class:`BabylMessage` 实例基于 :class:`mboxMessage` 或 :class:`MMDFMessage` " +"实例被创建时,将会忽略 :mailheader:`Status` 和 :mailheader:`X-Status` 标头并进入下列转换:" + +#: ../../library/mailbox.rst:1319 +msgid "" +"When a :class:`BabylMessage` instance is created based upon an " +":class:`MHMessage` instance, the following conversions take place:" +msgstr "当一个 :class:`BabylMessage` 实例基于 :class:`MHMessage` 实例被创建时,将进入下列转换:" + +#: ../../library/mailbox.rst:1334 +msgid ":class:`MMDFMessage`" +msgstr ":class:`MMDFMessage`" + +#: ../../library/mailbox.rst:1339 +msgid "" +"A message with MMDF-specific behaviors. Parameter *message* has the same " +"meaning as with the :class:`Message` constructor." +msgstr "具有 MMDF 专属行为的消息。 形参 *message* 的含义与 :class:`Message` 构造器一致。" + +#: ../../library/mailbox.rst:1342 +msgid "" +"As with message in an mbox mailbox, MMDF messages are stored with the " +"sender's address and the delivery date in an initial line beginning with " +"\"From \". Likewise, flags that indicate the state of the message are " +"typically stored in :mailheader:`Status` and :mailheader:`X-Status` headers." +msgstr "" +"与 mbox 邮箱中的消息类似,MMDF 消息会与将发件人的地址和发送日期作为以 \"From \" 打头的初始行一起存储。 " +"同样地,指明消息状态的旗标通常存储在 :mailheader:`Status` 和 :mailheader:`X-Status` 标头中。" + +#: ../../library/mailbox.rst:1347 +msgid "" +"Conventional flags for MMDF messages are identical to those of mbox message " +"and are as follows:" +msgstr "传统的 MMDF 消息旗标与 mbox 消息的类似,如下所示:" + +#: ../../library/mailbox.rst:1368 +msgid "" +":class:`MMDFMessage` instances offer the following methods, which are " +"identical to those offered by :class:`mboxMessage`:" +msgstr ":class:`MMDFMessage` 实例提供了下列方法,与 :class:`mboxMessage` 所提供的类似:" + +#: ../../library/mailbox.rst:1417 +msgid "" +"When an :class:`MMDFMessage` instance is created based upon a " +":class:`MaildirMessage` instance, a \"From \" line is generated based upon " +"the :class:`MaildirMessage` instance's delivery date, and the following " +"conversions take place:" +msgstr "" +"当一个 :class:`MMDFMessage` 实例基于 :class:`MaildirMessage` 实例被创建时,\"From \" 行会基于 " +":class:`MaildirMessage` 实例的发送日期被生成,并进入下列转换:" + +#: ../../library/mailbox.rst:1436 +msgid "" +"When an :class:`MMDFMessage` instance is created based upon an " +":class:`MHMessage` instance, the following conversions take place:" +msgstr "当一个 :class:`MMDFMessage` 实例基于 :class:`MHMessage` 实例被创建时,将进行下列转换:" + +#: ../../library/mailbox.rst:1451 +msgid "" +"When an :class:`MMDFMessage` instance is created based upon a " +":class:`BabylMessage` instance, the following conversions take place:" +msgstr "当一个 :class:`MMDFMessage` 实例基于 :class:`BabylMessage` 实例被创建时,将进行下列转换:" + +#: ../../library/mailbox.rst:1466 +msgid "" +"When an :class:`MMDFMessage` instance is created based upon an " +":class:`mboxMessage` instance, the \"From \" line is copied and all flags " +"directly correspond:" +msgstr "" +"当一个 :class:`MMDFMessage` 实例基于 :class:`mboxMessage` 实例被创建时,\"From \" " +"行会被拷贝并直接对应所有旗标:" + +#: ../../library/mailbox.rst:1471 +msgid ":class:`mboxMessage` state" +msgstr ":class:`mboxMessage` 状态" + +#: ../../library/mailbox.rst:1486 +msgid "Exceptions" +msgstr "异常" + +#: ../../library/mailbox.rst:1488 +msgid "" +"The following exception classes are defined in the :mod:`mailbox` module:" +msgstr ":mod:`mailbox` 模块中定义了下列异常类:" + +#: ../../library/mailbox.rst:1493 +msgid "The based class for all other module-specific exceptions." +msgstr "所有其他模块专属异常的基类。" + +#: ../../library/mailbox.rst:1498 +msgid "" +"Raised when a mailbox is expected but is not found, such as when " +"instantiating a :class:`Mailbox` subclass with a path that does not exist " +"(and with the *create* parameter set to ``False``), or when opening a folder" +" that does not exist." +msgstr "" +"在期望获得一个邮箱但未找到时被引发,例如当使用不存在的路径来实例化一个 :class:`Mailbox` 子类时 (且将 *create* 形参设为 " +"``False``),或是当打开一个不存在的路径时。" + +#: ../../library/mailbox.rst:1505 +msgid "" +"Raised when a mailbox is not empty but is expected to be, such as when " +"deleting a folder that contains messages." +msgstr "在期望一个邮箱为空但不为空时被引发,例如当删除一个包含消息的文件夹时。" + +#: ../../library/mailbox.rst:1511 +msgid "" +"Raised when some mailbox-related condition beyond the control of the program" +" causes it to be unable to proceed, such as when failing to acquire a lock " +"that another program already holds a lock, or when a uniquely-generated file" +" name already exists." +msgstr "在某些邮箱相关条件超出了程序控制范围导致其无法继续运行时被引发,例如当要获取的锁已被另一个程序获取时,或是当要生成的唯一性文件名已存在时。" + +#: ../../library/mailbox.rst:1519 +msgid "" +"Raised when the data in a file cannot be parsed, such as when an :class:`MH`" +" instance attempts to read a corrupted :file:`.mh_sequences` file." +msgstr "" +"在某个文件中的数据无法被解析时被引发,例如当一个 :class:`MH` 实例尝试读取已损坏的 :file:`.mh_sequences` 文件时。" + +#: ../../library/mailbox.rst:1526 +msgid "Examples" +msgstr "例子" + +#: ../../library/mailbox.rst:1528 +msgid "" +"A simple example of printing the subjects of all messages in a mailbox that " +"seem interesting::" +msgstr "一个打印指定邮箱中所有消息的主题的简单示例::" + +#: ../../library/mailbox.rst:1537 +msgid "" +"To copy all mail from a Babyl mailbox to an MH mailbox, converting all of " +"the format-specific information that can be converted::" +msgstr "要将所有邮件从 Babyl 邮箱拷贝到 MH 邮箱,请转换所有可转换的格式专属信息::" + +#: ../../library/mailbox.rst:1548 +msgid "" +"This example sorts mail from several mailing lists into different mailboxes," +" being careful to avoid mail corruption due to concurrent modification by " +"other programs, mail loss due to interruption of the program, or premature " +"termination due to malformed messages in the mailbox::" +msgstr "" +"这个示例将来自多个邮件列表的邮件分类放入不同的邮箱,小心避免由于其他程序的并发修改导致的邮件损坏,由于程序中断导致的邮件丢失,或是由于邮箱中消息格式错误导致的意外终止::" diff --git a/library/mailcap.po b/library/mailcap.po new file mode 100644 index 000000000..5472d1fce --- /dev/null +++ b/library/mailcap.po @@ -0,0 +1,172 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) 2001-2024, Python Software Foundation +# This file is distributed under the same license as the Python package. +# FIRST AUTHOR , YEAR. +# +# Translators: +# Freesand Leo , 2022 +# Rafael Fontenelle , 2024 +# +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: Python 3.9\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2024-01-12 22:01+0000\n" +"PO-Revision-Date: 2017-02-16 23:17+0000\n" +"Last-Translator: Rafael Fontenelle , 2024\n" +"Language-Team: Chinese (China) (https://app.transifex.com/python-doc/teams/5390/zh_CN/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: zh_CN\n" +"Plural-Forms: nplurals=1; plural=0;\n" + +#: ../../library/mailcap.rst:2 +msgid ":mod:`mailcap` --- Mailcap file handling" +msgstr ":mod:`mailcap` --- Mailcap 文件处理" + +#: ../../library/mailcap.rst:8 +msgid "**Source code:** :source:`Lib/mailcap.py`" +msgstr "**源代码:** :source:`Lib/mailcap.py`" + +#: ../../library/mailcap.rst:10 +msgid "" +"The :mod:`mailcap` module is deprecated (see :pep:`PEP 594 <594#mailcap>` " +"for details). The :mod:`mimetypes` module provides an alternative." +msgstr "" +":mod:`mailcap` 模块已被弃用(请参阅 :pep:`PEP 594 <594#mailcap>` 了解详情)。 " +":mod:`mimetypes` 模块提供了一个替代品。" + +#: ../../library/mailcap.rst:17 +msgid "" +"Mailcap files are used to configure how MIME-aware applications such as mail" +" readers and Web browsers react to files with different MIME types. (The " +"name \"mailcap\" is derived from the phrase \"mail capability\".) For " +"example, a mailcap file might contain a line like ``video/mpeg; xmpeg %s``." +" Then, if the user encounters an email message or Web document with the " +"MIME type :mimetype:`video/mpeg`, ``%s`` will be replaced by a filename " +"(usually one belonging to a temporary file) and the :program:`xmpeg` program" +" can be automatically started to view the file." +msgstr "" +"Mailcap 文件可用来配置支持 MIME 的应用例如邮件阅读器和 Web 浏览器如何响应具有不同 MIME 类型的文件。 (\"mailcap\" " +"这个名称源自短语\"mail capability\"。) 例如,一个 mailcap 文件可能包含 ``video/mpeg; xmpeg %s`` " +"这样的行。 然后,如果用户遇到 MIME 类型为 :mimetype:`video/mpeg` 的邮件消息或 Web 文档时,``%s`` " +"将被替换为一个文件名(通常是一个临时文件)并且将自动启动 :program:`xmpeg` 程序来查看该文件。" + +#: ../../library/mailcap.rst:26 +msgid "" +"The mailcap format is documented in :rfc:`1524`, \"A User Agent " +"Configuration Mechanism For Multimedia Mail Format Information\", but is not" +" an Internet standard. However, mailcap files are supported on most Unix " +"systems." +msgstr "" +"mailcap 格式的文档见 :rfc:`1524`, \"A User Agent Configuration Mechanism For " +"Multimedia Mail Format Information\",但它并不是一个因特网标准。 不过,mailcap 文件在大多数 Unix " +"系统上都受到支持。" + +#: ../../library/mailcap.rst:33 +msgid "" +"Return a 2-tuple; the first element is a string containing the command line " +"to be executed (which can be passed to :func:`os.system`), and the second " +"element is the mailcap entry for a given MIME type. If no matching MIME " +"type can be found, ``(None, None)`` is returned." +msgstr "" +"返回一个 2 元组;其中第一个元素是包含所要执行命令的字符串 (它可被传递给 :func:`os.system`),第二个元素是对应于给定 MIME " +"类型的 mailcap 条目。 如果找不到匹配的 MIME 类型,则将返回 ``(None, None)``。" + +#: ../../library/mailcap.rst:38 +msgid "" +"*key* is the name of the field desired, which represents the type of " +"activity to be performed; the default value is 'view', since in the most " +"common case you simply want to view the body of the MIME-typed data. Other " +"possible values might be 'compose' and 'edit', if you wanted to create a new" +" body of the given MIME type or alter the existing body data. See " +":rfc:`1524` for a complete list of these fields." +msgstr "" +"*key* 是所需字段的名称,它代表要执行的活动类型;默认值是 'view',因为在最通常的情况下你只是想要查看 MIME 类型数据的正文。 " +"其他可能的值还有 'compose' 和 'edit',分别用于想要创建给定 MIME 类型正文或修改现有正文数据的情况。 请参阅 " +":rfc:`1524` 获取这些字段的完整列表。" + +#: ../../library/mailcap.rst:45 +msgid "" +"*filename* is the filename to be substituted for ``%s`` in the command line;" +" the default value is ``'/dev/null'`` which is almost certainly not what you" +" want, so usually you'll override it by specifying a filename." +msgstr "" +"*filename* 是在命令行中用来替换 ``%s`` 的文件名;默认值 ``'/dev/null'`` " +"几乎肯定不是你想要的,因此通常你要通过指定一个文件名来覆盖它。" + +#: ../../library/mailcap.rst:49 +msgid "" +"*plist* can be a list containing named parameters; the default value is " +"simply an empty list. Each entry in the list must be a string containing " +"the parameter name, an equals sign (``'='``), and the parameter's value. " +"Mailcap entries can contain named parameters like ``%{foo}``, which will be" +" replaced by the value of the parameter named 'foo'. For example, if the " +"command line ``showpartial %{id} %{number} %{total}`` was in a mailcap file," +" and *plist* was set to ``['id=1', 'number=2', 'total=3']``, the resulting " +"command line would be ``'showpartial 1 2 3'``." +msgstr "" +"*plist* 可以是一个包含命名形参的列表;默认值只是一个空列表。 列表中的每个条目必须为包含形参名称的字符串、等于号 (``'='``) " +"以及形参的值。 Mailcap 条目可以包含形如 ``%{foo}`` 的命名形参,它将由名为 'foo' 的形参的值所替换。 例如,如果命令行 " +"``showpartial %{id} %{number} %{total}`` 是在一个 mailcap 文件中,并且 *plist* 被设为 " +"``['id=1', 'number=2', 'total=3']``,则结果命令行将为 ``'showpartial 1 2 3'``。" + +#: ../../library/mailcap.rst:58 +msgid "" +"In a mailcap file, the \"test\" field can optionally be specified to test " +"some external condition (such as the machine architecture, or the window " +"system in use) to determine whether or not the mailcap line applies. " +":func:`findmatch` will automatically check such conditions and skip the " +"entry if the check fails." +msgstr "" +"在 mailcap 文件中,可以指定可选的 \"test\" 字段来检测某些外部条件(例如所使用的机器架构或窗口系统)来确定是否要应用 mailcap " +"行。 :func:`findmatch` 将自动检查此类条件并在检查未通过时跳过条目。" + +#: ../../library/mailcap.rst:65 +msgid "" +"To prevent security issues with shell metacharacters (symbols that have " +"special effects in a shell command line), ``findmatch`` will refuse to " +"inject ASCII characters other than alphanumerics and ``@+=:,./-_`` into the " +"returned command line." +msgstr "" +"为了防止使用 shell 元字符(在 shell 命令行中具有特殊效果的符号)的安全问题,``findmatch`` 会拒绝把字母数字和 " +"``@+=:,./-_`` 以外的 ASCII 字符注入被返回的命令行。" + +#: ../../library/mailcap.rst:70 +msgid "" +"If a disallowed character appears in *filename*, ``findmatch`` will always " +"return ``(None, None)`` as if no entry was found. If such a character " +"appears elsewhere (a value in *plist* or in *MIMEtype*), ``findmatch`` will " +"ignore all mailcap entries which use that value. A :mod:`warning `" +" will be raised in either case." +msgstr "" +"如果有不被允许的字符出现在 *filename* 中,``findmatch`` 将总是返回 ``(None, None)`` " +"就如同未找到任何条目一样。 如果这样的字符出现在其他地方(在 *plist* 或 *MIMEtype* 中的值,``findmatch`` " +"将忽略所有使用这些值的 mailcap 条目。 在两种情况下都将引发 :mod:`警告 `。" + +#: ../../library/mailcap.rst:78 +msgid "" +"Returns a dictionary mapping MIME types to a list of mailcap file entries. " +"This dictionary must be passed to the :func:`findmatch` function. An entry " +"is stored as a list of dictionaries, but it shouldn't be necessary to know " +"the details of this representation." +msgstr "" +"返回一个将 MIME 类型映射到 mailcap 文件条目列表的字典。 此字典必须被传给 :func:`findmatch` 函数。 " +"条目会被存储为字典列表,但并不需要了解此表示形式的细节。" + +#: ../../library/mailcap.rst:83 +msgid "" +"The information is derived from all of the mailcap files found on the " +"system. Settings in the user's mailcap file :file:`$HOME/.mailcap` will " +"override settings in the system mailcap files :file:`/etc/mailcap`, " +":file:`/usr/etc/mailcap`, and :file:`/usr/local/etc/mailcap`." +msgstr "" +"此信息来自在系统中找到的所有 mailcap 文件。 用户的 mailcap 文件 :file:`$HOME/.mailcap` 中的设置将覆盖系统 " +"mailcap 文件 :file:`/etc/mailcap`, :file:`/usr/etc/mailcap` 和 " +":file:`/usr/local/etc/mailcap` 中的设置。" + +#: ../../library/mailcap.rst:88 +msgid "An example usage::" +msgstr "一个用法示例::" diff --git a/library/markup.po b/library/markup.po new file mode 100644 index 000000000..933c94ea9 --- /dev/null +++ b/library/markup.po @@ -0,0 +1,37 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) 2001-2022, Python Software Foundation +# This file is distributed under the same license as the Python package. +# FIRST AUTHOR , YEAR. +# +# Translators: +# Alpha Du , 2019 +# +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: Python 3.9\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2022-11-04 14:34+0000\n" +"PO-Revision-Date: 2017-02-16 23:17+0000\n" +"Last-Translator: Alpha Du , 2019\n" +"Language-Team: Chinese (China) (https://www.transifex.com/python-doc/teams/5390/zh_CN/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: zh_CN\n" +"Plural-Forms: nplurals=1; plural=0;\n" + +#: ../../library/markup.rst:5 +msgid "Structured Markup Processing Tools" +msgstr "结构化标记处理工具" + +#: ../../library/markup.rst:7 +msgid "" +"Python supports a variety of modules to work with various forms of " +"structured data markup. This includes modules to work with the Standard " +"Generalized Markup Language (SGML) and the Hypertext Markup Language (HTML)," +" and several interfaces for working with the Extensible Markup Language " +"(XML)." +msgstr "" +"Python 支持各种模块,以处理各种形式的结构化数据标记。 " +"这包括使用标准通用标记语言(SGML)和超文本标记语言(HTML)的模块,以及使用可扩展标记语言(XML)的几个接口。" diff --git a/library/marshal.po b/library/marshal.po new file mode 100644 index 000000000..89d010419 --- /dev/null +++ b/library/marshal.po @@ -0,0 +1,227 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) 2001-2024, Python Software Foundation +# This file is distributed under the same license as the Python package. +# FIRST AUTHOR , YEAR. +# +# Translators: +# Freesand Leo , 2021 +# Rafael Fontenelle , 2024 +# +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: Python 3.9\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2024-08-30 16:51+0000\n" +"PO-Revision-Date: 2017-02-16 23:18+0000\n" +"Last-Translator: Rafael Fontenelle , 2024\n" +"Language-Team: Chinese (China) (https://app.transifex.com/python-doc/teams/5390/zh_CN/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: zh_CN\n" +"Plural-Forms: nplurals=1; plural=0;\n" + +#: ../../library/marshal.rst:2 +msgid ":mod:`marshal` --- Internal Python object serialization" +msgstr ":mod:`marshal` --- 内部 Python 对象序列化" + +#: ../../library/marshal.rst:10 +msgid "" +"This module contains functions that can read and write Python values in a " +"binary format. The format is specific to Python, but independent of machine" +" architecture issues (e.g., you can write a Python value to a file on a PC, " +"transport the file to a Sun, and read it back there). Details of the format" +" are undocumented on purpose; it may change between Python versions " +"(although it rarely does). [#]_" +msgstr "" +"此模块包含一此能以二进制格式来读写 Python 值的函数。 这种格式是 Python 专属的,但是独立于特定的机器架构(即你可以在一台 PC " +"上写入某个 Python 值,将文件传到一台 Sun 上并在那里读取它)。 这种格式的细节有意不带文档说明;它可能在不同 Python " +"版本中发生改变(但这种情况极少发生)。 [#]_" + +#: ../../library/marshal.rst:21 +msgid "" +"This is not a general \"persistence\" module. For general persistence and " +"transfer of Python objects through RPC calls, see the modules :mod:`pickle` " +"and :mod:`shelve`. The :mod:`marshal` module exists mainly to support " +"reading and writing the \"pseudo-compiled\" code for Python modules of " +":file:`.pyc` files. Therefore, the Python maintainers reserve the right to " +"modify the marshal format in backward incompatible ways should the need " +"arise. If you're serializing and de-serializing Python objects, use the " +":mod:`pickle` module instead -- the performance is comparable, version " +"independence is guaranteed, and pickle supports a substantially wider range " +"of objects than marshal." +msgstr "" +"这不是一个通用的“持久化”模块。 对于通用的持久化以及通过 RPC 调用传递 Python 对象,请参阅 :mod:`pickle` 和 " +":mod:`shelve` 等模块。 :mod:`marshal` 模块主要是为了支持读写 :file:`.pyc` 文件形式“伪编译”代码的 " +"Python 模块。 因此,Python 维护者保留在必要时以不向下兼容的方式修改 marshal 格式的权利。 如果你要序列化和反序列化 Python" +" 对象,请改用 :mod:`pickle` 模块 -- 其执行效率相当,版本独立性有保证,并且 pickle 还支持比 marshal " +"更多样的对象类型。" + +#: ../../library/marshal.rst:33 +msgid "" +"The :mod:`marshal` module is not intended to be secure against erroneous or " +"maliciously constructed data. Never unmarshal data received from an " +"untrusted or unauthenticated source." +msgstr "" +":mod:`marshal` 模块对于错误或恶意构建的数据来说是不安全的。 永远不要 unmarshal 来自不受信任的或未经验证的来源的数据。" + +#: ../../library/marshal.rst:39 +msgid "" +"Not all Python object types are supported; in general, only objects whose " +"value is independent from a particular invocation of Python can be written " +"and read by this module. The following types are supported: booleans, " +"integers, floating point numbers, complex numbers, strings, bytes, " +"bytearrays, tuples, lists, sets, frozensets, dictionaries, and code objects," +" where it should be understood that tuples, lists, sets, frozensets and " +"dictionaries are only supported as long as the values contained therein are " +"themselves supported. The singletons :const:`None`, :const:`Ellipsis` and " +":exc:`StopIteration` can also be marshalled and unmarshalled. For format " +"*version* lower than 3, recursive lists, sets and dictionaries cannot be " +"written (see below)." +msgstr "" +"不是所有 Python 对象类型都受支持;一般来说,此模块只能写入和读取不依赖于特定 Python 调用的对象。 " +"下列类型是受支持的:布尔值、整数、浮点数、复数、字符串、字节串、字节数组、元组、列表、集合、冻结集合、字典和代码对象,需要了解的一点是元组、列表、集合、冻结集合和字典只在其所包含的值也是这些值时才受支持。" +" 单例对象 :const:`None`, :const:`Ellipsis` and :exc:`StopIteration` 也可以被 marshal" +" 和 unmarshal。 对于 *version* 低于 3 的格式,递归列表、集合和字典无法被写入(见下文)。" + +#: ../../library/marshal.rst:51 +msgid "" +"There are functions that read/write files as well as functions operating on " +"bytes-like objects." +msgstr "有些函数可以读/写文件,还有些函数可以操作字节类对象。" + +#: ../../library/marshal.rst:54 +msgid "The module defines these functions:" +msgstr "这个模块定义了以下函数:" + +#: ../../library/marshal.rst:59 +msgid "" +"Write the value on the open file. The value must be a supported type. The " +"file must be a writeable :term:`binary file`." +msgstr "向打开的文件写入值。 值必须为受支持的类型。 文件必须为可写的 :term:`binary file`。" + +#: ../../library/marshal.rst:62 +msgid "" +"If the value has (or contains an object that has) an unsupported type, a " +":exc:`ValueError` exception is raised --- but garbage data will also be " +"written to the file. The object will not be properly read back by " +":func:`load`." +msgstr "" +"如果值具有(或所包含的对象具有)不受支持的类型,则会引发 :exc:`ValueError` --- 但是将向文件写入垃圾数据。 对象也将不能正确地通过" +" :func:`load` 重新读取。" + +#: ../../library/marshal.rst:66 +msgid "" +"The *version* argument indicates the data format that ``dump`` should use " +"(see below)." +msgstr "*version* 参数指明 ``dump`` 应当使用的数据格式(见下文)。" + +#: ../../library/marshal.rst:69 ../../library/marshal.rst:101 +msgid "" +"Raises an :ref:`auditing event ` ``marshal.dumps`` with arguments " +"``value``, ``version``." +msgstr "" +"引发一个 :ref:`审计事件 ` ``marshal.dumps`` 并附带参数 ``value``, ``version``。" + +#: ../../library/marshal.rst:74 +msgid "" +"Read one value from the open file and return it. If no valid value is read " +"(e.g. because the data has a different Python version's incompatible marshal" +" format), raise :exc:`EOFError`, :exc:`ValueError` or :exc:`TypeError`. The" +" file must be a readable :term:`binary file`." +msgstr "" +"从打开的文件读取一个值并返回。 如果读不到有效的值(例如由于数据为不同 Python 版本的不兼容 marshal 格式),则会引发 " +":exc:`EOFError`, :exc:`ValueError` 或 :exc:`TypeError`。 文件必须为可读的 " +":term:`binary file`。" + +#: ../../library/marshal.rst:79 +msgid "" +"Raises an :ref:`auditing event ` ``marshal.load`` with no " +"arguments." +msgstr "引发一个不带参数的 :ref:`审计事件 ` ``marshal.load``。" + +#: ../../library/marshal.rst:83 +msgid "" +"If an object containing an unsupported type was marshalled with " +":func:`dump`, :func:`load` will substitute ``None`` for the unmarshallable " +"type." +msgstr "" +"如果通过 :func:`dump` marshal 了一个包含不受支持类型的对象,:func:`load` 将为不可 marshal 的类型替换 " +"``None``。" + +#: ../../library/marshal.rst:88 +msgid "" +"This call used to raise a ``code.__new__`` audit event for each code object." +" Now it raises a single ``marshal.load`` event for the entire load " +"operation." +msgstr "" +"使用此调用为每个代码对象引发一个 ``code.__new__`` 审计事件。 现在它会为整个载入操作引发单个 ``marshal.load`` 事件。" + +#: ../../library/marshal.rst:94 +msgid "" +"Return the bytes object that would be written to a file by ``dump(value, " +"file)``. The value must be a supported type. Raise a :exc:`ValueError` " +"exception if value has (or contains an object that has) an unsupported type." +msgstr "" +"返回将通过 ``dump(value, file)`` 被写入一个文件的字节串对象。 值必须属于受支持的类型。 " +"如果值属于(或包含的对象属于)不受支持的类型则会引发 :exc:`ValueError`。" + +#: ../../library/marshal.rst:98 +msgid "" +"The *version* argument indicates the data format that ``dumps`` should use " +"(see below)." +msgstr "*version* 参数指明 ``dumps`` 应当使用的数据类型(见下文)。" + +#: ../../library/marshal.rst:106 +msgid "" +"Convert the :term:`bytes-like object` to a value. If no valid value is " +"found, raise :exc:`EOFError`, :exc:`ValueError` or :exc:`TypeError`. Extra " +"bytes in the input are ignored." +msgstr "" +"将 :term:`bytes-like object` 转换为一个值。 如果找不到有效的值,则会引发 :exc:`EOFError`, " +":exc:`ValueError` 或 :exc:`TypeError`。 输入的额外字节串会被忽略。" + +#: ../../library/marshal.rst:110 +msgid "" +"Raises an :ref:`auditing event ` ``marshal.loads`` with argument " +"``bytes``." +msgstr "引发一个 :ref:`审计事件 ` ``marshal.loads`` 并附带参数 ``bytes``。" + +#: ../../library/marshal.rst:114 +msgid "" +"This call used to raise a ``code.__new__`` audit event for each code object." +" Now it raises a single ``marshal.loads`` event for the entire load " +"operation." +msgstr "" +"使用此调用为每个代码对象引发一个 ``code.__new__`` 审计事件。 现在它会为整个载入操作引发单个 ``marshal.loads`` " +"事件。" + +#: ../../library/marshal.rst:118 +msgid "In addition, the following constants are defined:" +msgstr "此外,还定义了以下常量:" + +#: ../../library/marshal.rst:122 +msgid "" +"Indicates the format that the module uses. Version 0 is the historical " +"format, version 1 shares interned strings and version 2 uses a binary format" +" for floating point numbers. Version 3 adds support for object instancing " +"and recursion. The current version is 4." +msgstr "" +"指明模块所使用的格式。 第 0 版为历史格式,第 1 版为共享固化的字符串,第 2 版对浮点数使用二进制格式。 第 3 " +"版添加了对于对象实例化和递归的支持。 目前使用的为第 4 版。" + +#: ../../library/marshal.rst:130 +msgid "Footnotes" +msgstr "备注" + +#: ../../library/marshal.rst:131 +msgid "" +"The name of this module stems from a bit of terminology used by the " +"designers of Modula-3 (amongst others), who use the term \"marshalling\" for" +" shipping of data around in a self-contained form. Strictly speaking, \"to " +"marshal\" means to convert some data from internal to external form (in an " +"RPC buffer for instance) and \"unmarshalling\" for the reverse process." +msgstr "" +"此模块的名称来源于 Modula-3 (及其他语言) 的设计者所使用的术语,他们使用术语 \"marshal\" 来表示以自包含的形式传输数据。 " +"严格地说,将数据从内部形式转换为外部形式 (例如用于 RPC 缓冲区) 称为 \"marshal\" 而其逆过程则称为 \"unmarshal\"。" diff --git a/library/math.po b/library/math.po new file mode 100644 index 000000000..9a657ef49 --- /dev/null +++ b/library/math.po @@ -0,0 +1,833 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) 2001-2024, Python Software Foundation +# This file is distributed under the same license as the Python package. +# FIRST AUTHOR , YEAR. +# +# Translators: +# focusheart , 2019 +# Dingyuan Wang , 2019 +# ppcfish , 2019 +# zc Jin , 2019 +# Arisaka97 , 2020 +# Freesand Leo , 2021 +# Alpha Du , 2022 +# Rafael Fontenelle , 2024 +# +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: Python 3.9\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2024-11-15 16:34+0000\n" +"PO-Revision-Date: 2017-02-16 23:18+0000\n" +"Last-Translator: Rafael Fontenelle , 2024\n" +"Language-Team: Chinese (China) (https://app.transifex.com/python-doc/teams/5390/zh_CN/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: zh_CN\n" +"Plural-Forms: nplurals=1; plural=0;\n" + +#: ../../library/math.rst:2 +msgid ":mod:`math` --- Mathematical functions" +msgstr ":mod:`math` --- 数学函数" + +#: ../../library/math.rst:13 +msgid "" +"This module provides access to the mathematical functions defined by the C " +"standard." +msgstr "该模块提供了对C标准定义的数学函数的访问。" + +#: ../../library/math.rst:16 +msgid "" +"These functions cannot be used with complex numbers; use the functions of " +"the same name from the :mod:`cmath` module if you require support for " +"complex numbers. The distinction between functions which support complex " +"numbers and those which don't is made since most users do not want to learn " +"quite as much mathematics as required to understand complex numbers. " +"Receiving an exception instead of a complex result allows earlier detection " +"of the unexpected complex number used as a parameter, so that the programmer" +" can determine how and why it was generated in the first place." +msgstr "" +"这些函数不适用于复数;如果你需要计算复数,请使用 :mod:`cmath` " +"模块中的同名函数。将支持计算复数的函数区分开的目的,在于大多数用户并不愿意为了理解复数而去学习太多数学知识。得到一个异常而不是一个复数结果能让复数当作参数的情况更早被监测到,进而程序员可以第一时间调查其产生的原因。" + +#: ../../library/math.rst:25 +msgid "" +"The following functions are provided by this module. Except when explicitly" +" noted otherwise, all return values are floats." +msgstr "该模块提供了以下函数。除非另有明确说明,否则所有返回值均为浮点数。" + +#: ../../library/math.rst:30 +msgid "Number-theoretic and representation functions" +msgstr "数论与表示函数" + +#: ../../library/math.rst:34 +msgid "" +"Return the ceiling of *x*, the smallest integer greater than or equal to " +"*x*. If *x* is not a float, delegates to :meth:`x.__ceil__ " +"`, which should return an :class:`~numbers.Integral` value." +msgstr "" +"返回 *x* 的向上取整,即大于或等于 *x* 的最小的整数。如果 *x* 不是浮点数,委托给 :meth:`x.__ceil__ " +"` ,它应该返回一个 :class:`~numbers.Integral` 的值。" + +#: ../../library/math.rst:41 +msgid "" +"Return the number of ways to choose *k* items from *n* items without " +"repetition and without order." +msgstr "返回不重复且无顺序地从 *n* 项中选择 *k* 项的方式总数。" + +#: ../../library/math.rst:44 +msgid "" +"Evaluates to ``n! / (k! * (n - k)!)`` when ``k <= n`` and evaluates to zero " +"when ``k > n``." +msgstr "当 ``k <= n`` 时取值为 ``n! / (k! * (n - k)!)``;当 ``k > n`` 时取值为零。" + +#: ../../library/math.rst:47 +msgid "" +"Also called the binomial coefficient because it is equivalent to the " +"coefficient of k-th term in polynomial expansion of the expression ``(1 + x)" +" ** n``." +msgstr "也称为二项式系数,因为它等价于表达式 ``(1 + x) ** n`` 的多项式展开中第 k 项的系数。" + +#: ../../library/math.rst:51 ../../library/math.rst:260 +msgid "" +"Raises :exc:`TypeError` if either of the arguments are not integers. Raises " +":exc:`ValueError` if either of the arguments are negative." +msgstr "如果任一参数不为整数则会引发 :exc:`TypeError`。 如果任一参数为负数则会引发 :exc:`ValueError`。" + +#: ../../library/math.rst:59 +msgid "" +"Return a float with the magnitude (absolute value) of *x* but the sign of " +"*y*. On platforms that support signed zeros, ``copysign(1.0, -0.0)`` " +"returns *-1.0*." +msgstr "" +"返回一个基于 *x* 的绝对值和 *y* 的符号的浮点数。在支持带符号零的平台上,``copysign(1.0, -0.0)`` 返回 *-1.0*." + +#: ../../library/math.rst:66 +msgid "Return the absolute value of *x*." +msgstr "返回 *x* 的绝对值。" + +#: ../../library/math.rst:71 +msgid "" +"Return *x* factorial as an integer. Raises :exc:`ValueError` if *x* is not " +"integral or is negative." +msgstr "以一个整数返回 *x* 的阶乘。 如果 *x* 不是整数或为负数时则将引发 :exc:`ValueError`。" + +#: ../../library/math.rst:74 +msgid "Accepting floats with integral values (like ``5.0``) is deprecated." +msgstr "接受具有整数值的浮点数 (例如 ``5.0``) 的行为已被弃用。" + +#: ../../library/math.rst:80 +msgid "" +"Return the floor of *x*, the largest integer less than or equal to *x*. If " +"*x* is not a float, delegates to :meth:`x.__floor__ `, " +"which should return an :class:`~numbers.Integral` value." +msgstr "" +"返回 *x* 的向下取整,小于或等于 *x* 的最大整数。如果 *x* 不是浮点数,则委托给 :meth:`x.__floor__ " +"` ,它应返回一个 :class:`~numbers.Integral` 值。" + +#: ../../library/math.rst:87 +msgid "" +"Return ``fmod(x, y)``, as defined by the platform C library. Note that the " +"Python expression ``x % y`` may not return the same result. The intent of " +"the C standard is that ``fmod(x, y)`` be exactly (mathematically; to " +"infinite precision) equal to ``x - n*y`` for some integer *n* such that the " +"result has the same sign as *x* and magnitude less than ``abs(y)``. " +"Python's ``x % y`` returns a result with the sign of *y* instead, and may " +"not be exactly computable for float arguments. For example, ``fmod(-1e-100, " +"1e100)`` is ``-1e-100``, but the result of Python's ``-1e-100 % 1e100`` is " +"``1e100-1e-100``, which cannot be represented exactly as a float, and rounds" +" to the surprising ``1e100``. For this reason, function :func:`fmod` is " +"generally preferred when working with floats, while Python's ``x % y`` is " +"preferred when working with integers." +msgstr "" +"返回 ``fmod(x, y)`` ,由平台C库定义。请注意,Python表达式 ``x % y`` 可能不会返回相同的结果。C标准的目的是 " +"``fmod(x, y)`` 完全(数学上;到无限精度)等于 ``x - n*y`` 对于某个整数 *n* ,使得结果具有 与 *x* 相同的符号和小于" +" ``abs(y)`` 的幅度。Python的 ``x % y`` 返回带有 *y* 符号的结果,并且可能不能完全计算浮点参数。 例如, " +"``fmod(-1e-100, 1e100)`` 是 ``-1e-100`` ,但Python的 ``-1e-100 % 1e100`` 的结果是 " +"``1e100-1e-100`` ,它不能完全表示为浮点数,并且取整为令人惊讶的 ``1e100`` 。 出于这个原因,函数 :func:`fmod` " +"在使用浮点数时通常是首选,而Python的 ``x % y`` 在使用整数时是首选。" + +#: ../../library/math.rst:102 +msgid "" +"Return the mantissa and exponent of *x* as the pair ``(m, e)``. *m* is a " +"float and *e* is an integer such that ``x == m * 2**e`` exactly. If *x* is " +"zero, returns ``(0.0, 0)``, otherwise ``0.5 <= abs(m) < 1``. This is used " +"to \"pick apart\" the internal representation of a float in a portable way." +msgstr "" +"以 ``(m, e)`` 对的形式返回 *x* 的尾数和指数。 *m* 是一个浮点数, *e* 是一个整数,正好是 ``x == m * 2**e`` " +"。 如果 *x* 为零,则返回 ``(0.0, 0)`` ,否则返回 ``0.5 <= abs(m) < 1`` " +"。这用于以可移植方式“分离”浮点数的内部表示。" + +#: ../../library/math.rst:110 +msgid "" +"Return an accurate floating point sum of values in the iterable. Avoids " +"loss of precision by tracking multiple intermediate partial sums::" +msgstr "返回迭代中的精确浮点值。通过跟踪多个中间部分和来避免精度损失::" + +#: ../../library/math.rst:118 +msgid "" +"The algorithm's accuracy depends on IEEE-754 arithmetic guarantees and the " +"typical case where the rounding mode is half-even. On some non-Windows " +"builds, the underlying C library uses extended precision addition and may " +"occasionally double-round an intermediate sum causing it to be off in its " +"least significant bit." +msgstr "" +"该算法的准确性取决于IEEE-754算术保证和舍入模式为半偶的典型情况。在某些非Windows版本中,底层C库使用扩展精度添加,并且有时可能会使中间和加倍,导致它在最低有效位中关闭。" + +#: ../../library/math.rst:124 +msgid "" +"For further discussion and two alternative approaches, see the `ASPN " +"cookbook recipes for accurate floating point summation " +"`_\\." +msgstr "" +"有关待进一步讨论和两种替代方法,参见 `ASPN cookbook recipes for accurate floating point " +"summation `_\\ 。" + +#: ../../library/math.rst:131 +msgid "" +"Return the greatest common divisor of the specified integer arguments. If " +"any of the arguments is nonzero, then the returned value is the largest " +"positive integer that is a divisor of all arguments. If all arguments are " +"zero, then the returned value is ``0``. ``gcd()`` without arguments returns" +" ``0``." +msgstr "" +"返回给定的整数参数的最大公约数。 如果有一个参数非零,则返回值将是能同时整除所有参数的最大正整数。 如果所有参数为零,则返回值为 ``0``。 " +"不带参数的 ``gcd()`` 返回 ``0``。" + +#: ../../library/math.rst:139 +msgid "" +"Added support for an arbitrary number of arguments. Formerly, only two " +"arguments were supported." +msgstr "添加了对任意数量的参数的支持。 之前的版本只支持两个参数。" + +#: ../../library/math.rst:146 +msgid "" +"Return ``True`` if the values *a* and *b* are close to each other and " +"``False`` otherwise." +msgstr "若 *a* 和 *b* 的值比较接近则返回 ``True``,否则返回 ``False``。" + +#: ../../library/math.rst:149 +msgid "" +"Whether or not two values are considered close is determined according to " +"given absolute and relative tolerances." +msgstr "根据给定的绝对和相对容差确定两个值是否被认为是接近的。" + +#: ../../library/math.rst:152 +msgid "" +"*rel_tol* is the relative tolerance -- it is the maximum allowed difference " +"between *a* and *b*, relative to the larger absolute value of *a* or *b*. " +"For example, to set a tolerance of 5%, pass ``rel_tol=0.05``. The default " +"tolerance is ``1e-09``, which assures that the two values are the same " +"within about 9 decimal digits. *rel_tol* must be greater than zero." +msgstr "" +"*rel_tol* 是相对容差 —— 它是 *a* 和 *b* 之间允许的最大差值,相对于 *a* 或 *b* " +"的较大绝对值。例如,要设置5%的容差,请传递 ``rel_tol=0.05`` 。默认容差为 ``1e-09``,确保两个值在大约9位十进制数字内相同。" +" *rel_tol* 必须大于零。" + +#: ../../library/math.rst:158 +msgid "" +"*abs_tol* is the minimum absolute tolerance -- useful for comparisons near " +"zero. *abs_tol* must be at least zero." +msgstr "*abs_tol* 是最小绝对容差 —— 对于接近零的比较很有用。 *abs_tol* 必须至少为零。" + +#: ../../library/math.rst:161 +msgid "" +"If no errors occur, the result will be: ``abs(a-b) <= max(rel_tol * " +"max(abs(a), abs(b)), abs_tol)``." +msgstr "" +"如果没有错误发生,结果将是: ``abs(a-b) <= max(rel_tol * max(abs(a), abs(b)), abs_tol)`` 。" + +#: ../../library/math.rst:164 +msgid "" +"The IEEE 754 special values of ``NaN``, ``inf``, and ``-inf`` will be " +"handled according to IEEE rules. Specifically, ``NaN`` is not considered " +"close to any other value, including ``NaN``. ``inf`` and ``-inf`` are only " +"considered close to themselves." +msgstr "" +"IEEE 754特殊值 ``NaN`` , ``inf`` 和 ``-inf`` 将根据IEEE规则处理。具体来说, ``NaN`` " +"不被认为接近任何其他值,包括 ``NaN`` 。 ``inf`` 和 ``-inf`` 只被认为接近自己。" + +#: ../../library/math.rst:173 +msgid ":pep:`485` -- A function for testing approximate equality" +msgstr ":pep:`485` —— 用于测试近似相等的函数" + +#: ../../library/math.rst:178 +msgid "" +"Return ``True`` if *x* is neither an infinity nor a NaN, and ``False`` " +"otherwise. (Note that ``0.0`` *is* considered finite.)" +msgstr "" +"如果 *x* 既不是无穷大也不是NaN,则返回 ``True`` ,否则返回 ``False`` 。 (注意 ``0.0`` 被认为 *是* 有限的。)" + +#: ../../library/math.rst:186 +msgid "" +"Return ``True`` if *x* is a positive or negative infinity, and ``False`` " +"otherwise." +msgstr "如果 *x* 是正或负无穷大,则返回 ``True`` ,否则返回 ``False`` 。" + +#: ../../library/math.rst:192 +msgid "" +"Return ``True`` if *x* is a NaN (not a number), and ``False`` otherwise." +msgstr "如果 *x* 是 NaN(不是数字),则返回 ``True`` ,否则返回 ``False`` 。" + +#: ../../library/math.rst:197 +msgid "" +"Return the integer square root of the nonnegative integer *n*. This is the " +"floor of the exact square root of *n*, or equivalently the greatest integer " +"*a* such that *a*\\ ² |nbsp| ≤ |nbsp| *n*." +msgstr "" +"返回非负整数 *n* 的整数平方根。 这就是对 *n* 的实际平方根向下取整,或者相当于使得 *a*\\ ² |nbsp| ≤ |nbsp| *n* " +"的最大整数 *a*。" + +#: ../../library/math.rst:201 +msgid "" +"For some applications, it may be more convenient to have the least integer " +"*a* such that *n* |nbsp| ≤ |nbsp| *a*\\ ², or in other words the ceiling of " +"the exact square root of *n*. For positive *n*, this can be computed using " +"``a = 1 + isqrt(n - 1)``." +msgstr "" +"对于某些应用来说,可以更适合取值为使得 *n* |nbsp| ≤ |nbsp| *a*\\ ² 的最小整数 *a* ,或者换句话说就是 *n* " +"的实际平方根向上取整。 对于正数 *n*,这可以使用 ``a = 1 + isqrt(n - 1)`` 来计算。" + +#: ../../library/math.rst:211 +msgid "" +"Return the least common multiple of the specified integer arguments. If all " +"arguments are nonzero, then the returned value is the smallest positive " +"integer that is a multiple of all arguments. If any of the arguments is " +"zero, then the returned value is ``0``. ``lcm()`` without arguments returns" +" ``1``." +msgstr "" +"返回给定的整数参数的最小公倍数。 如果所有参数均非零,则返回值将是为所有参数的整数倍的最小正整数。 如果参数之一为零,则返回值为 ``0``。 " +"不带参数的 ``lcm()`` 返回 ``1``。" + +#: ../../library/math.rst:222 +msgid "" +"Return ``x * (2**i)``. This is essentially the inverse of function " +":func:`frexp`." +msgstr "返回 ``x * (2**i)`` 。 这基本上是函数 :func:`frexp` 的反函数。" + +#: ../../library/math.rst:228 +msgid "" +"Return the fractional and integer parts of *x*. Both results carry the sign" +" of *x* and are floats." +msgstr "返回 *x* 的小数和整数部分。两个结果都带有 *x* 的符号并且是浮点数。" + +#: ../../library/math.rst:234 +msgid "Return the next floating-point value after *x* towards *y*." +msgstr "返回 *x* 趋向于 *y* 的最接近的浮点数值。" + +#: ../../library/math.rst:236 +msgid "If *x* is equal to *y*, return *y*." +msgstr "如果 *x* 等于 *y* 则返回 *y*。" + +#: ../../library/math.rst:238 +msgid "Examples:" +msgstr "示例:" + +#: ../../library/math.rst:240 +msgid "``math.nextafter(x, math.inf)`` goes up: towards positive infinity." +msgstr "``math.nextafter(x, math.inf)`` 的方向朝上:趋向于正无穷。" + +#: ../../library/math.rst:241 +msgid "``math.nextafter(x, -math.inf)`` goes down: towards minus infinity." +msgstr "``math.nextafter(x, -math.inf)`` 的方向朝下:趋向于负无穷。" + +#: ../../library/math.rst:242 +msgid "``math.nextafter(x, 0.0)`` goes towards zero." +msgstr "``math.nextafter(x, 0.0)`` 趋向于零。" + +#: ../../library/math.rst:243 +msgid "``math.nextafter(x, math.copysign(math.inf, x))`` goes away from zero." +msgstr "``math.nextafter(x, math.copysign(math.inf, x))`` 趋向于零的反方向。" + +#: ../../library/math.rst:245 +msgid "See also :func:`math.ulp`." +msgstr "另请参阅 :func:`math.ulp`。" + +#: ../../library/math.rst:251 +msgid "" +"Return the number of ways to choose *k* items from *n* items without " +"repetition and with order." +msgstr "返回不重复且有顺序地从 *n* 项中选择 *k* 项的方式总数。" + +#: ../../library/math.rst:254 +msgid "" +"Evaluates to ``n! / (n - k)!`` when ``k <= n`` and evaluates to zero when " +"``k > n``." +msgstr "当 ``k <= n`` 时取值为 ``n! / (n - k)!``;当 ``k > n`` 时取值为零。" + +#: ../../library/math.rst:257 +msgid "" +"If *k* is not specified or is None, then *k* defaults to *n* and the " +"function returns ``n!``." +msgstr "如果 *k* 未指定或为 None,则 *k* 默认值为 *n* 并且函数将返回 ``n!``。" + +#: ../../library/math.rst:268 +msgid "" +"Calculate the product of all the elements in the input *iterable*. The " +"default *start* value for the product is ``1``." +msgstr "计算输入的 *iterable* 中所有元素的积。 积的默认 *start* 值为 ``1``。" + +#: ../../library/math.rst:271 +msgid "" +"When the iterable is empty, return the start value. This function is " +"intended specifically for use with numeric values and may reject non-numeric" +" types." +msgstr "当可迭代对象为空时,返回起始值。 此函数特别针对数字值使用,并会拒绝非数字类型。" + +#: ../../library/math.rst:280 +msgid "" +"Return the IEEE 754-style remainder of *x* with respect to *y*. For finite " +"*x* and finite nonzero *y*, this is the difference ``x - n*y``, where ``n`` " +"is the closest integer to the exact value of the quotient ``x / y``. If ``x" +" / y`` is exactly halfway between two consecutive integers, the nearest " +"*even* integer is used for ``n``. The remainder ``r = remainder(x, y)`` " +"thus always satisfies ``abs(r) <= 0.5 * abs(y)``." +msgstr "" +"返回 IEEE 754 风格的 *x* 相对于 *y* 的余数。对于有限 *x* 和有限非零 *y* ,这是差异 ``x - n*y`` ,其中 " +"``n`` 是与商 ``x / y`` 的精确值最接近的整数。如果 ``x / y`` 恰好位于两个连续整数之间,则将最接近的 *偶数* 用作 " +"``n`` 。 余数 ``r = remainder(x, y)`` 因此总是满足 ``abs(r) <= 0.5 * abs(y)``。" + +#: ../../library/math.rst:287 +msgid "" +"Special cases follow IEEE 754: in particular, ``remainder(x, math.inf)`` is " +"*x* for any finite *x*, and ``remainder(x, 0)`` and ``remainder(math.inf, " +"x)`` raise :exc:`ValueError` for any non-NaN *x*. If the result of the " +"remainder operation is zero, that zero will have the same sign as *x*." +msgstr "" +"特殊情况遵循IEEE 754:特别是 ``remainder(x, math.inf)`` 对于任何有限 *x* 都是 *x* ,而 " +"``remainder(x, 0)`` 和 ``remainder(math.inf, x)`` 引发 :exc:`ValueError` " +"适用于任何非NaN的 *x* 。如果余数运算的结果为零,则该零将具有与 *x* 相同的符号。" + +#: ../../library/math.rst:293 +msgid "" +"On platforms using IEEE 754 binary floating-point, the result of this " +"operation is always exactly representable: no rounding error is introduced." +msgstr "在使用IEEE 754二进制浮点的平台上,此操作的结果始终可以完全表示:不会引入舍入错误。" + +#: ../../library/math.rst:301 +msgid "" +"Return *x* with the fractional part removed, leaving the integer part. This" +" rounds toward 0: ``trunc()`` is equivalent to :func:`floor` for positive " +"*x*, and equivalent to :func:`ceil` for negative *x*. If *x* is not a float," +" delegates to :meth:`x.__trunc__ `, which should return an" +" :class:`~numbers.Integral` value." +msgstr "" +"返回去除小数部分的 *x* ,只留下整数部分。 这样就可以四舍五入到0了: ``trunc()`` 对于正的 *x* 相当于 :func:`floor`" +" ,对于负的 *x* 相当于 :func:`ceil` 。如果 *x* 不是浮点数,委托给 :meth:`x.__trunc__ " +"` ,它应该返回一个 :class:`~numbers.Integral` 值。" + +#: ../../library/math.rst:309 +msgid "Return the value of the least significant bit of the float *x*:" +msgstr "返回浮点数 *x* 的最小有效比特位的值:" + +#: ../../library/math.rst:311 +msgid "If *x* is a NaN (not a number), return *x*." +msgstr "如果 *x* 是 NaN (非数字),则返回 *x*。" + +#: ../../library/math.rst:312 +msgid "If *x* is negative, return ``ulp(-x)``." +msgstr "如果 *x* 为负数,则返回 ``ulp(-x)``。" + +#: ../../library/math.rst:313 +msgid "If *x* is a positive infinity, return *x*." +msgstr "如果 *x* 为正数,则返回 *x*。" + +#: ../../library/math.rst:314 +msgid "" +"If *x* is equal to zero, return the smallest positive *denormalized* " +"representable float (smaller than the minimum positive *normalized* float, " +":data:`sys.float_info.min `)." +msgstr "" +"如果 *x* 等于零,则返回 *去正规化的* 可表示最小正浮点数 (小于 *正规化的* 最小正浮点数 :data:`sys.float_info.min" +" `)。" + +#: ../../library/math.rst:317 +msgid "" +"If *x* is equal to the largest positive representable float, return the " +"value of the least significant bit of *x*, such that the first float smaller" +" than *x* is ``x - ulp(x)``." +msgstr "" +"如果 *x* 等于可表示最大正浮点数,则返回 *x* 的最低有效比特位的值,使得小于 *x* 的第一个浮点数为 ``x - ulp(x)``。" + +#: ../../library/math.rst:320 +msgid "" +"Otherwise (*x* is a positive finite number), return the value of the least " +"significant bit of *x*, such that the first float bigger than *x* is ``x + " +"ulp(x)``." +msgstr "" +"在其他情况下 (*x* 是一个有限的正数),则返回 *x* 的最低有效比特位的值,使得大于 *x* 的第一个浮点数为 ``x + ulp(x)``。" + +#: ../../library/math.rst:324 +msgid "ULP stands for \"Unit in the Last Place\"." +msgstr "ULP 即 \"Unit in the Last Place\" 的缩写。" + +#: ../../library/math.rst:326 +msgid "" +"See also :func:`math.nextafter` and :data:`sys.float_info.epsilon " +"`." +msgstr "" +"另请参阅 :func:`math.nextafter` 和 :data:`sys.float_info.epsilon " +"`。" + +#: ../../library/math.rst:332 +msgid "" +"Note that :func:`frexp` and :func:`modf` have a different call/return " +"pattern than their C equivalents: they take a single argument and return a " +"pair of values, rather than returning their second return value through an " +"'output parameter' (there is no such thing in Python)." +msgstr "" +"注意 :func:`frexp` 和 :func:`modf` 具有与它们的C等价函数不同的调用/返回模式:它们采用单个参数并返回一对值,而不是通过 " +"'输出形参' 返回它们的第二个返回参数(Python中没有这样的东西)。" + +#: ../../library/math.rst:337 +msgid "" +"For the :func:`ceil`, :func:`floor`, and :func:`modf` functions, note that " +"*all* floating-point numbers of sufficiently large magnitude are exact " +"integers. Python floats typically carry no more than 53 bits of precision " +"(the same as the platform C double type), in which case any float *x* with " +"``abs(x) >= 2**52`` necessarily has no fractional bits." +msgstr "" +"对于 :func:`ceil` , :func:`floor` 和 :func:`modf` 函数,请注意 *所有* " +"足够大的浮点数都是精确整数。Python浮点数通常不超过53位的精度(与平台C double类型相同),在这种情况下,任何浮点 *x* 与 " +"``abs(x) >= 2**52`` 必然没有小数位。" + +#: ../../library/math.rst:345 +msgid "Power and logarithmic functions" +msgstr "幂函数与对数函数" + +#: ../../library/math.rst:349 +msgid "" +"Return *e* raised to the power *x*, where *e* = 2.718281... is the base of " +"natural logarithms. This is usually more accurate than ``math.e ** x`` or " +"``pow(math.e, x)``." +msgstr "" +"返回 *e* 的 *x* 次幂,其中 *e* = 2.718281... 是自然对数的基数。这通常比 ``math.e ** x`` 或 " +"``pow(math.e, x)`` 更精确。" + +#: ../../library/math.rst:356 +msgid "" +"Return *e* raised to the power *x*, minus 1. Here *e* is the base of " +"natural logarithms. For small floats *x*, the subtraction in ``exp(x) - 1``" +" can result in a `significant loss of precision " +"`_\\; the :func:`expm1` " +"function provides a way to compute this quantity to full precision::" +msgstr "" +"返回 *e* 的 *x* 次幂,减1。这里 *e* 是自然对数的基数。对于小浮点数 *x* , ``exp(x) - 1`` 中的减法可能导致 " +"`significant loss of precision " +"`_\\ ; :func:`expm1` " +"函数提供了一种将此数量计算为全精度的方法::" + +#: ../../library/math.rst:373 +msgid "With one argument, return the natural logarithm of *x* (to base *e*)." +msgstr "使用一个参数,返回 *x* 的自然对数(底为 *e* )。" + +#: ../../library/math.rst:375 +msgid "" +"With two arguments, return the logarithm of *x* to the given *base*, " +"calculated as ``log(x)/log(base)``." +msgstr "使用两个参数,返回给定的 *base* 的对数 *x* ,计算为 ``log(x)/log(base)`` 。" + +#: ../../library/math.rst:381 +msgid "" +"Return the natural logarithm of *1+x* (base *e*). The result is calculated " +"in a way which is accurate for *x* near zero." +msgstr "返回 *1+x* 的自然对数(以 *e* 为底)。 以对于接近零的 *x* 精确的方式计算结果。" + +#: ../../library/math.rst:387 +msgid "" +"Return the base-2 logarithm of *x*. This is usually more accurate than " +"``log(x, 2)``." +msgstr "返回 *x* 以2为底的对数。这通常比 ``log(x, 2)`` 更准确。" + +#: ../../library/math.rst:394 +msgid "" +":meth:`int.bit_length` returns the number of bits necessary to represent an " +"integer in binary, excluding the sign and leading zeros." +msgstr ":meth:`int.bit_length` 返回表示二进制整数所需的位数,不包括符号和前导零。" + +#: ../../library/math.rst:400 +msgid "" +"Return the base-10 logarithm of *x*. This is usually more accurate than " +"``log(x, 10)``." +msgstr "返回 *x* 底为10的对数。这通常比 ``log(x, 10)`` 更准确。" + +#: ../../library/math.rst:406 +msgid "" +"Return ``x`` raised to the power ``y``. Exceptional cases follow Annex 'F' " +"of the C99 standard as far as possible. In particular, ``pow(1.0, x)`` and " +"``pow(x, 0.0)`` always return ``1.0``, even when ``x`` is a zero or a NaN. " +"If both ``x`` and ``y`` are finite, ``x`` is negative, and ``y`` is not an " +"integer then ``pow(x, y)`` is undefined, and raises :exc:`ValueError`." +msgstr "" +"将返回 ``x`` 的 ``y`` 次幂。特殊情况尽可能遵循C99标准的附录'F'。特别是, ``pow(1.0, x)`` 和 ``pow(x, " +"0.0)`` 总是返回 ``1.0`` ,即使 ``x`` 是零或NaN。 如果 ``x`` 和 ``y`` 都是有限的, ``x`` 是负数, " +"``y`` 不是整数那么 ``pow(x, y)`` 是未定义的,并且引发 :exc:`ValueError` 。" + +#: ../../library/math.rst:413 +msgid "" +"Unlike the built-in ``**`` operator, :func:`math.pow` converts both its " +"arguments to type :class:`float`. Use ``**`` or the built-in :func:`pow` " +"function for computing exact integer powers." +msgstr "" +"与内置的 ``**`` 运算符不同, :func:`math.pow` 将其参数转换为 :class:`float` 类型。使用 ``**`` 或内置的" +" :func:`pow` 函数来计算精确的整数幂。" + +#: ../../library/math.rst:420 +msgid "Return the square root of *x*." +msgstr "返回 *x* 的平方根。" + +#: ../../library/math.rst:424 +msgid "Trigonometric functions" +msgstr "三角函数" + +#: ../../library/math.rst:428 +msgid "" +"Return the arc cosine of *x*, in radians. The result is between ``0`` and " +"``pi``." +msgstr "返回以弧度为单位的 *x* 的反余弦值。 结果范围在 ``0`` 到 ``pi`` 之间。" + +#: ../../library/math.rst:434 +msgid "" +"Return the arc sine of *x*, in radians. The result is between ``-pi/2`` and " +"``pi/2``." +msgstr "返回以弧度为单位的 *x* 的反正弦值。 结果范围在 ``-pi/2`` 到 ``pi/2`` 之间。" + +#: ../../library/math.rst:440 +msgid "" +"Return the arc tangent of *x*, in radians. The result is between ``-pi/2`` " +"and ``pi/2``." +msgstr "返回以弧度为单位的 *x* 的反正切值。 结果范围在 ``-pi/2`` 到 ``pi/2`` 之间。." + +#: ../../library/math.rst:446 +msgid "" +"Return ``atan(y / x)``, in radians. The result is between ``-pi`` and " +"``pi``. The vector in the plane from the origin to point ``(x, y)`` makes " +"this angle with the positive X axis. The point of :func:`atan2` is that the " +"signs of both inputs are known to it, so it can compute the correct quadrant" +" for the angle. For example, ``atan(1)`` and ``atan2(1, 1)`` are both " +"``pi/4``, but ``atan2(-1, -1)`` is ``-3*pi/4``." +msgstr "" +"以弧度为单位返回 ``atan(y / x)`` 。结果是在 ``-pi`` 和 ``pi`` 之间。从原点到点 ``(x, y)`` " +"的平面矢量使该角度与正X轴成正比。 :func:`atan2` 的点的两个输入的符号都是已知的,因此它可以计算角度的正确象限。 例如, " +"``atan(1)`` 和 ``atan2(1, 1)`` 都是 ``pi/4`` ,但 ``atan2(-1, -1)`` 是 " +"``-3*pi/4`` 。" + +#: ../../library/math.rst:456 +msgid "Return the cosine of *x* radians." +msgstr "返回 *x* 弧度的余弦值。" + +#: ../../library/math.rst:461 +msgid "" +"Return the Euclidean distance between two points *p* and *q*, each given as " +"a sequence (or iterable) of coordinates. The two points must have the same " +"dimension." +msgstr "返回 *p* 与 *q* 两点之间的欧几里得距离,以一个坐标序列(或可迭代对象)的形式给出。 两个点必须具有相同的维度。" + +#: ../../library/math.rst:465 +msgid "Roughly equivalent to::" +msgstr "大致相当于:" + +#: ../../library/math.rst:474 +msgid "" +"Return the Euclidean norm, ``sqrt(sum(x**2 for x in coordinates))``. This is" +" the length of the vector from the origin to the point given by the " +"coordinates." +msgstr "返回欧几里得范数,``sqrt(sum(x**2 for x in coordinates))``。 这是从原点到坐标给定点的向量长度。" + +#: ../../library/math.rst:478 +msgid "" +"For a two dimensional point ``(x, y)``, this is equivalent to computing the " +"hypotenuse of a right triangle using the Pythagorean theorem, ``sqrt(x*x + " +"y*y)``." +msgstr "对于一个二维点 ``(x, y)``,这等价于使用毕达哥拉斯定义 ``sqrt(x*x + y*y)`` 计算一个直角三角形的斜边。" + +#: ../../library/math.rst:482 +msgid "" +"Added support for n-dimensional points. Formerly, only the two dimensional " +"case was supported." +msgstr "添加了对 n 维点的支持。 之前的版本只支持二维点。" + +#: ../../library/math.rst:489 +msgid "Return the sine of *x* radians." +msgstr "返回 *x* 弧度的正弦值。" + +#: ../../library/math.rst:494 +msgid "Return the tangent of *x* radians." +msgstr "返回 *x* 弧度的正切值。" + +#: ../../library/math.rst:498 +msgid "Angular conversion" +msgstr "角度转换" + +#: ../../library/math.rst:502 +msgid "Convert angle *x* from radians to degrees." +msgstr "将角度 *x* 从弧度转换为度数。" + +#: ../../library/math.rst:507 +msgid "Convert angle *x* from degrees to radians." +msgstr "将角度 *x* 从度数转换为弧度。" + +#: ../../library/math.rst:511 +msgid "Hyperbolic functions" +msgstr "双曲函数" + +#: ../../library/math.rst:513 +msgid "" +"`Hyperbolic functions `_ " +"are analogs of trigonometric functions that are based on hyperbolas instead " +"of circles." +msgstr "" +"`双曲函数 `_ " +"是基于双曲线而非圆来对三角函数进行模拟。" + +#: ../../library/math.rst:519 +msgid "Return the inverse hyperbolic cosine of *x*." +msgstr "返回 *x* 的反双曲余弦值。" + +#: ../../library/math.rst:524 +msgid "Return the inverse hyperbolic sine of *x*." +msgstr "返回 *x* 的反双曲正弦值。" + +#: ../../library/math.rst:529 +msgid "Return the inverse hyperbolic tangent of *x*." +msgstr "返回 *x* 的反双曲正切值。" + +#: ../../library/math.rst:534 +msgid "Return the hyperbolic cosine of *x*." +msgstr "返回 *x* 的双曲余弦值。" + +#: ../../library/math.rst:539 +msgid "Return the hyperbolic sine of *x*." +msgstr "返回 *x* 的双曲正弦值。" + +#: ../../library/math.rst:544 +msgid "Return the hyperbolic tangent of *x*." +msgstr "返回 *x* 的双曲正切值。" + +#: ../../library/math.rst:548 +msgid "Special functions" +msgstr "特殊函数" + +#: ../../library/math.rst:552 +msgid "" +"Return the `error function `_ " +"at *x*." +msgstr "返回 *x* 处的 `误差函数 `_ 。" + +#: ../../library/math.rst:555 +msgid "" +"The :func:`erf` function can be used to compute traditional statistical " +"functions such as the `cumulative standard normal distribution " +"`_::" +msgstr "" +":func:`erf` 函数可用于计算传统的统计函数,如 `累积标准正态分布 " +"`_" +" ::" + +#: ../../library/math.rst:568 +msgid "" +"Return the complementary error function at *x*. The `complementary error " +"function `_ is defined as " +"``1.0 - erf(x)``. It is used for large values of *x* where a subtraction " +"from one would cause a `loss of significance " +"`_\\." +msgstr "" +"返回 *x* 处的互补误差函数。 `互补误差函数 `_ " +"定义为 ``1.0 - erf(x)``。 它用于大的 *x* 取值,以避免直接用 1 减其误差函数值导致的 `有效位数损失 " +"`_\\。" + +#: ../../library/math.rst:579 +msgid "" +"Return the `Gamma function `_ " +"at *x*." +msgstr "返回 *x* 处的 `伽马函数 `_ 值。" + +#: ../../library/math.rst:587 +msgid "" +"Return the natural logarithm of the absolute value of the Gamma function at " +"*x*." +msgstr "返回Gamma函数在 *x* 绝对值的自然对数。" + +#: ../../library/math.rst:594 +msgid "Constants" +msgstr "常量" + +#: ../../library/math.rst:598 +msgid "The mathematical constant *π* = 3.141592..., to available precision." +msgstr "数学常数 *π* = 3.141592...,精确到可用精度。" + +#: ../../library/math.rst:603 +msgid "The mathematical constant *e* = 2.718281..., to available precision." +msgstr "数学常数 *e* = 2.718281...,精确到可用精度。" + +#: ../../library/math.rst:608 +msgid "" +"The mathematical constant *τ* = 6.283185..., to available precision. Tau is " +"a circle constant equal to 2\\ *π*, the ratio of a circle's circumference to" +" its radius. To learn more about Tau, check out Vi Hart's video `Pi is " +"(still) Wrong `_, and start " +"celebrating `Tau day `_ by eating twice as much pie!" +msgstr "" +"数学常数 *τ* = 6.283185...,精确到可用精度。Tau 是一个圆周常数,等于 2\\ *π*,圆的周长与半径之比。更多关于 Tau " +"的信息可参考 Vi Hart 的视频 `Pi is (still) Wrong " +"`_。吃两倍多的派来庆祝 `Tau 日 " +"`_ 吧!" + +#: ../../library/math.rst:619 +msgid "" +"A floating-point positive infinity. (For negative infinity, use " +"``-math.inf``.) Equivalent to the output of ``float('inf')``." +msgstr "浮点正无穷大。 (对于负无穷大,使用 ``-math.inf`` 。)相当于 ``float('inf')`` 的输出。" + +#: ../../library/math.rst:627 +msgid "" +"A floating-point \"not a number\" (NaN) value. Equivalent to the output of " +"``float('nan')``. Due to the requirements of the `IEEE-754 standard " +"`_, ``math.nan`` and " +"``float('nan')`` are not considered to equal to any other numeric value, " +"including themselves. To check whether a number is a NaN, use the " +":func:`isnan` function to test for NaNs instead of ``is`` or ``==``. " +"Example::" +msgstr "" +"一个浮点的 \"非数字\"(NaN)值。相当于 ``float('nan')`` 的输出。 由于 `IEEE-754标准 " +"`_ 的要求, ``math.nan`` 和 " +"``float('nan')`` 不被认为等于任何其他数值,包括其本身。要检查一个数字是否为NaN,请使用 :func:`isnan` 函数来测试 " +"NaN ,而不是 ``is`` 或 ``==`` 。 例子::" + +#: ../../library/math.rst:650 +msgid "" +"The :mod:`math` module consists mostly of thin wrappers around the platform " +"C math library functions. Behavior in exceptional cases follows Annex F of " +"the C99 standard where appropriate. The current implementation will raise " +":exc:`ValueError` for invalid operations like ``sqrt(-1.0)`` or ``log(0.0)``" +" (where C99 Annex F recommends signaling invalid operation or divide-by-" +"zero), and :exc:`OverflowError` for results that overflow (for example, " +"``exp(1000.0)``). A NaN will not be returned from any of the functions " +"above unless one or more of the input arguments was a NaN; in that case, " +"most functions will return a NaN, but (again following C99 Annex F) there " +"are some exceptions to this rule, for example ``pow(float('nan'), 0.0)`` or " +"``hypot(float('nan'), float('inf'))``." +msgstr "" +":mod:`math` 模块主要包含围绕平台C数学库函数的简单包装器。特殊情况下的行为在适当情况下遵循C99标准的附录F。当前的实现将引发 " +":exc:`ValueError` 用于无效操作,如 ``sqrt(-1.0)`` 或 ``log(0.0)`` " +"(其中C99附件F建议发出无效操作信号或被零除), 和 :exc:`OverflowError` 用于溢出的结果(例如, ``exp(1000.0)``" +" " +")。除非一个或多个输入参数是NaN,否则不会从上述任何函数返回NaN;在这种情况下,大多数函数将返回一个NaN,但是(再次遵循C99附件F)这个规则有一些例外,例如" +" ``pow(float('nan'), 0.0)`` 或 ``hypot(float('nan'), float('inf'))`` 。" + +#: ../../library/math.rst:662 +msgid "" +"Note that Python makes no effort to distinguish signaling NaNs from quiet " +"NaNs, and behavior for signaling NaNs remains unspecified. Typical behavior " +"is to treat all NaNs as though they were quiet." +msgstr "请注意,Python不会将显式NaN与静默NaN区分开来,并且显式NaN的行为仍未明确。典型的行为是将所有NaN视为静默的。" + +#: ../../library/math.rst:669 +msgid "Module :mod:`cmath`" +msgstr ":mod:`cmath` 模块" + +#: ../../library/math.rst:670 +msgid "Complex number versions of many of these functions." +msgstr "这里很多函数的复数版本。" diff --git a/library/mimetypes.po b/library/mimetypes.po new file mode 100644 index 000000000..6a6836740 --- /dev/null +++ b/library/mimetypes.po @@ -0,0 +1,362 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) 2001-2022, Python Software Foundation +# This file is distributed under the same license as the Python package. +# FIRST AUTHOR , YEAR. +# +# Translators: +# cdarlint , 2019 +# Freesand Leo , 2021 +# +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: Python 3.9\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2022-11-04 14:34+0000\n" +"PO-Revision-Date: 2017-02-16 23:18+0000\n" +"Last-Translator: Freesand Leo , 2021\n" +"Language-Team: Chinese (China) (https://www.transifex.com/python-doc/teams/5390/zh_CN/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: zh_CN\n" +"Plural-Forms: nplurals=1; plural=0;\n" + +#: ../../library/mimetypes.rst:2 +msgid ":mod:`mimetypes` --- Map filenames to MIME types" +msgstr ":mod:`mimetypes` --- 映射文件名到 MIME 类型" + +#: ../../library/mimetypes.rst:9 +msgid "**Source code:** :source:`Lib/mimetypes.py`" +msgstr "**源代码:** :source:`Lib/mimetypes.py`" + +#: ../../library/mimetypes.rst:15 +msgid "" +"The :mod:`mimetypes` module converts between a filename or URL and the MIME " +"type associated with the filename extension. Conversions are provided from " +"filename to MIME type and from MIME type to filename extension; encodings " +"are not supported for the latter conversion." +msgstr "" +":mod:`mimetypes` 模块可以在文件名或 URL 和关联到文件扩展名的 MIME 类型之间执行转换。 所提供的转换包括从文件名到 MIME " +"类型和从 MIME 类型到文件扩展名;后一种转换不支持编码格式。" + +#: ../../library/mimetypes.rst:20 +msgid "" +"The module provides one class and a number of convenience functions. The " +"functions are the normal interface to this module, but some applications may" +" be interested in the class as well." +msgstr "该模块提供了一个类和一些便捷函数。 这些函数是该模块通常的接口,但某些应用程序可能也会希望使用类。" + +#: ../../library/mimetypes.rst:24 +msgid "" +"The functions described below provide the primary interface for this module." +" If the module has not been initialized, they will call :func:`init` if " +"they rely on the information :func:`init` sets up." +msgstr "" +"下列函数提供了此模块的主要接口。 如果此模块尚未被初始化,它们将会调用 :func:`init`,如果它们依赖于 :func:`init` " +"所设置的信息的话。" + +#: ../../library/mimetypes.rst:33 +msgid "" +"Guess the type of a file based on its filename, path or URL, given by *url*." +" URL can be a string or a :term:`path-like object`." +msgstr "" +"根据 *url* 给出的文件名、路径或 URL 来猜测文件的类型,URL 可以为字符串或 :term:`path-like object`。" + +#: ../../library/mimetypes.rst:36 +msgid "" +"The return value is a tuple ``(type, encoding)`` where *type* is ``None`` if" +" the type can't be guessed (missing or unknown suffix) or a string of the " +"form ``'type/subtype'``, usable for a MIME :mailheader:`content-type` " +"header." +msgstr "" +"返回值是一个元组 ``(type, encoding)`` 其中 *type* 在无法猜测(后缀不存在或者未知)时为 ``None``,或者为 " +"``'type/subtype'`` 形式的字符串,可以作为 MIME :mailheader:`content-type` 标头。" + +#: ../../library/mimetypes.rst:40 +msgid "" +"*encoding* is ``None`` for no encoding or the name of the program used to " +"encode (e.g. :program:`compress` or :program:`gzip`). The encoding is " +"suitable for use as a :mailheader:`Content-Encoding` header, **not** as a " +":mailheader:`Content-Transfer-Encoding` header. The mappings are table " +"driven. Encoding suffixes are case sensitive; type suffixes are first tried " +"case sensitively, then case insensitively." +msgstr "" +"*encoding* 在无编码格式时为 ``None``,或者为程序所用的编码格式 (例如 :program:`compress` 或 " +":program:`gzip`)。 它可以作为 :mailheader:`Content-Encoding` 标头,但 **不可** 作为 " +":mailheader:`Content-Transfer-Encoding` 标头。 映射是表格驱动的。 " +"编码格式前缀对大小写敏感;类型前缀会先以大小写敏感方式检测再以大小写不敏感方式检测。" + +#: ../../library/mimetypes.rst:47 +msgid "" +"The optional *strict* argument is a flag specifying whether the list of " +"known MIME types is limited to only the official types `registered with IANA" +" `_. When " +"*strict* is ``True`` (the default), only the IANA types are supported; when " +"*strict* is ``False``, some additional non-standard but commonly used MIME " +"types are also recognized." +msgstr "" +"可选的 *strict* 参数是一个旗标,指明要将已知 MIME 类型限制在 `IANA 已注册 " +"`_ 的官方类型之内。 " +"当 *strict* 为 ``True`` 时(默认值),则仅支持 IANA 类型;当 *strict* 为 ``False`` " +"时,则还支持某些附加的非标准但常用的 MIME 类型。" + +#: ../../library/mimetypes.rst:54 +msgid "Added support for url being a :term:`path-like object`." +msgstr "增加了 :term:`path-like object` 作为 url 的支持。" + +#: ../../library/mimetypes.rst:60 +msgid "" +"Guess the extensions for a file based on its MIME type, given by *type*. The" +" return value is a list of strings giving all possible filename extensions, " +"including the leading dot (``'.'``). The extensions are not guaranteed to " +"have been associated with any particular data stream, but would be mapped to" +" the MIME type *type* by :func:`guess_type`." +msgstr "" +"根据由 *type* 给出的文件 MIME 类型猜测其扩展名。 返回值是由所有可能的文件扩展名组成的字符串列表,包括开头的点号 (``'.'``)。 " +"这些扩展名不保证能关联到任何特定的数据流,但是将会由 :func:`guess_type` 映射到 MIME 类型 *type*。" + +#: ../../library/mimetypes.rst:66 ../../library/mimetypes.rst:78 +msgid "" +"The optional *strict* argument has the same meaning as with the " +":func:`guess_type` function." +msgstr "可选的 *strict* 参数具有与 :func:`guess_type` 函数一致的含义。" + +#: ../../library/mimetypes.rst:71 +msgid "" +"Guess the extension for a file based on its MIME type, given by *type*. The " +"return value is a string giving a filename extension, including the leading " +"dot (``'.'``). The extension is not guaranteed to have been associated with" +" any particular data stream, but would be mapped to the MIME type *type* by " +":func:`guess_type`. If no extension can be guessed for *type*, ``None`` is " +"returned." +msgstr "" +"根据由 *type* 给出的文件 MIME 类型猜测其扩展名。 返回值是一个表示文件扩展名的字符串,包括开头的点号 (``'.'``)。 " +"该扩展名不保证能关联到任何特定的数据流,但是将会由 :func:`guess_type` 映射到 MIME 类型 *type*。 如果不能猜测出 " +"*type* 的扩展名,则将返回 ``None``。" + +#: ../../library/mimetypes.rst:80 +msgid "" +"Some additional functions and data items are available for controlling the " +"behavior of the module." +msgstr "有一些附加函数和数据项可被用于控制此模块的行为。" + +#: ../../library/mimetypes.rst:86 +msgid "" +"Initialize the internal data structures. If given, *files* must be a " +"sequence of file names which should be used to augment the default type map." +" If omitted, the file names to use are taken from :const:`knownfiles`; on " +"Windows, the current registry settings are loaded. Each file named in " +"*files* or :const:`knownfiles` takes precedence over those named before it." +" Calling :func:`init` repeatedly is allowed." +msgstr "" +"初始化内部数据结构。 *files* 如果给出则必须是一个文件名序列,它应当被用于协助默认的类型映射。 如果省略则要使用的文件名会从 " +":const:`knownfiles` 中获取; 在 Windows 上,将会载入当前注册表设置。 在 *files* 或 " +":const:`knownfiles` 中指定的每个文件名的优先级将高于在它之前的文件名。 :func:`init` 允许被重复调用。" + +#: ../../library/mimetypes.rst:93 +msgid "" +"Specifying an empty list for *files* will prevent the system defaults from " +"being applied: only the well-known values will be present from a built-in " +"list." +msgstr "为 *files* 指定一个空列表将防止应用系统默认选项:将只保留来自内置列表的常用值。" + +#: ../../library/mimetypes.rst:96 +msgid "" +"If *files* is ``None`` the internal data structure is completely rebuilt to " +"its initial default value. This is a stable operation and will produce the " +"same results when called multiple times." +msgstr "如果 *files* 为 ``None`` 则内部数据结构会完全重建为其初始默认值。 这是一个稳定操作并将在多次调用时产生相同的结果。" + +#: ../../library/mimetypes.rst:100 +msgid "Previously, Windows registry settings were ignored." +msgstr "在之前版本中,Windows 注册表设置会被忽略。" + +#: ../../library/mimetypes.rst:106 +msgid "" +"Load the type map given in the file *filename*, if it exists. The type map " +"is returned as a dictionary mapping filename extensions, including the " +"leading dot (``'.'``), to strings of the form ``'type/subtype'``. If the " +"file *filename* does not exist or cannot be read, ``None`` is returned." +msgstr "" +"载入在文件 *filename* 中给定的类型映射,如果文件存在的话。 返回的类型映射会是一个字典,其中的键值对为文件扩展名包括开头的点号 " +"(``'.'``) 与 ``'type/subtype'`` 形式的字符串。 如果文件 *filename* 不存在或无法被读取,则返回 " +"``None``。" + +#: ../../library/mimetypes.rst:114 +msgid "" +"Add a mapping from the MIME type *type* to the extension *ext*. When the " +"extension is already known, the new type will replace the old one. When the " +"type is already known the extension will be added to the list of known " +"extensions." +msgstr "" +"添加一个从 MIME 类型 *type* 到扩展名 *ext* 的映射。 当扩展名已知时,新类型将替代旧类型。 " +"当类型已知时,扩展名将被添加到已知扩展名列表。" + +#: ../../library/mimetypes.rst:118 +msgid "" +"When *strict* is ``True`` (the default), the mapping will be added to the " +"official MIME types, otherwise to the non-standard ones." +msgstr "当 *strict* 为 ``True`` 时(默认值),映射将被添加到官方 MIME 类型,否则添加到非标准类型。" + +#: ../../library/mimetypes.rst:124 +msgid "" +"Flag indicating whether or not the global data structures have been " +"initialized. This is set to ``True`` by :func:`init`." +msgstr "指明全局数据结构是否已被初始化的旗标。 这会由 :func:`init` 设为 ``True``。" + +#: ../../library/mimetypes.rst:132 +msgid "" +"List of type map file names commonly installed. These files are typically " +"named :file:`mime.types` and are installed in different locations by " +"different packages." +msgstr "通常安装的类型映射文件名列表。 这些文件一般被命名为 :file:`mime.types` 并会由不同的包安装在不同的位置。" + +#: ../../library/mimetypes.rst:139 +msgid "" +"Dictionary mapping suffixes to suffixes. This is used to allow recognition " +"of encoded files for which the encoding and the type are indicated by the " +"same extension. For example, the :file:`.tgz` extension is mapped to " +":file:`.tar.gz` to allow the encoding and type to be recognized separately." +msgstr "" +"将后缀映射到其他后缀的字典。 它被用来允许识别已编码的文件,其编码格式和类型是由相同的扩展名来指明的。 例如,:file:`.tgz` 扩展名被映射到 " +":file:`.tar.gz` 以允许编码格式和类型被分别识别。" + +#: ../../library/mimetypes.rst:147 +msgid "Dictionary mapping filename extensions to encoding types." +msgstr "映射文件扩展名到编码格式类型的字典。" + +#: ../../library/mimetypes.rst:152 +msgid "Dictionary mapping filename extensions to MIME types." +msgstr "映射文件扩展名到 MIME 类型的字典。" + +#: ../../library/mimetypes.rst:157 +msgid "" +"Dictionary mapping filename extensions to non-standard, but commonly found " +"MIME types." +msgstr "映射文件扩展名到非标准但常见的 MIME 类型的字典。" + +#: ../../library/mimetypes.rst:161 +msgid "An example usage of the module::" +msgstr "此模块一个使用示例::" + +#: ../../library/mimetypes.rst:178 +msgid "MimeTypes Objects" +msgstr "MimeTypes 对象" + +#: ../../library/mimetypes.rst:180 +msgid "" +"The :class:`MimeTypes` class may be useful for applications which may want " +"more than one MIME-type database; it provides an interface similar to the " +"one of the :mod:`mimetypes` module." +msgstr "" +":class:`MimeTypes` 类可以被用于那些需要多个 MIME 类型数据库的应用程序;它提供了与 :mod:`mimetypes` " +"模块所提供的类似接口。" + +#: ../../library/mimetypes.rst:187 +msgid "" +"This class represents a MIME-types database. By default, it provides access" +" to the same database as the rest of this module. The initial database is a " +"copy of that provided by the module, and may be extended by loading " +"additional :file:`mime.types`\\ -style files into the database using the " +":meth:`read` or :meth:`readfp` methods. The mapping dictionaries may also " +"be cleared before loading additional data if the default data is not " +"desired." +msgstr "" +"这个类表示 MIME 类型数据库。 默认情况下,它提供了对与此模块其余部分一致的数据库的访问权限。 " +"这个初始数据库是此模块所提供数据库的一个副本,并可以通过使用 :meth:`read` 或 :meth:`readfp` 方法将附加的 " +":file:`mime.types` 样式文载入到数据库中来进行扩展。 如果不需要默认数据的话这个映射字典也可以在载入附加数据之前先被清空。" + +#: ../../library/mimetypes.rst:194 +msgid "" +"The optional *filenames* parameter can be used to cause additional files to " +"be loaded \"on top\" of the default database." +msgstr "可选的 *filenames* 形参可被用来让附加文件被载入到默认数据库“之上”。" + +#: ../../library/mimetypes.rst:200 +msgid "" +"Dictionary mapping suffixes to suffixes. This is used to allow recognition " +"of encoded files for which the encoding and the type are indicated by the " +"same extension. For example, the :file:`.tgz` extension is mapped to " +":file:`.tar.gz` to allow the encoding and type to be recognized separately." +" This is initially a copy of the global :data:`suffix_map` defined in the " +"module." +msgstr "" +"将后缀映射到其他后缀的字典。 它被用来允许识别已编码的文件,其编码格式和类型是由相同的扩展名来指明的。 例如,:file:`.tgz` 扩展名被映射到 " +":file:`.tar.gz` 以允许编码格式和类型被分别识别。 这是在模块中定义的全局 :data:`suffix_map` 的一个副本。" + +#: ../../library/mimetypes.rst:209 +msgid "" +"Dictionary mapping filename extensions to encoding types. This is initially" +" a copy of the global :data:`encodings_map` defined in the module." +msgstr "映射文件扩展名到编码格式类型的字典。 这是在模块中定义的全局 :data:`encodings_map` 的一个副本。" + +#: ../../library/mimetypes.rst:215 +msgid "" +"Tuple containing two dictionaries, mapping filename extensions to MIME " +"types: the first dictionary is for the non-standards types and the second " +"one is for the standard types. They are initialized by :data:`common_types` " +"and :data:`types_map`." +msgstr "" +"包含两个字典的元组,将文件扩展名映射到 MIME 类型:第一个字典针对非标准类型而第二个字典针对标准类型。 它们会由 " +":data:`common_types` 和 :data:`types_map` 来初始化。" + +#: ../../library/mimetypes.rst:223 +msgid "" +"Tuple containing two dictionaries, mapping MIME types to a list of filename " +"extensions: the first dictionary is for the non-standards types and the " +"second one is for the standard types. They are initialized by " +":data:`common_types` and :data:`types_map`." +msgstr "" +"包含两个字典的元组,将 MIME 类型映射到文件扩展名列表:第一个字典针对非标准类型而第二个字典针对标准类型。 它们会由 " +":data:`common_types` 和 :data:`types_map` 来初始化。" + +#: ../../library/mimetypes.rst:231 +msgid "" +"Similar to the :func:`guess_extension` function, using the tables stored as " +"part of the object." +msgstr "类似于 :func:`guess_extension` 函数,使用存储的表作为对象的一部分。" + +#: ../../library/mimetypes.rst:237 +msgid "" +"Similar to the :func:`guess_type` function, using the tables stored as part " +"of the object." +msgstr "类似于 :func:`guess_type` 函数,使用存储的表作为对象的一部分。" + +#: ../../library/mimetypes.rst:243 +msgid "" +"Similar to the :func:`guess_all_extensions` function, using the tables " +"stored as part of the object." +msgstr "类似于 :func:`guess_all_extensions` 函数,使用存储的表作为对象的一部分。" + +#: ../../library/mimetypes.rst:249 +msgid "" +"Load MIME information from a file named *filename*. This uses " +":meth:`readfp` to parse the file." +msgstr "从名称为 *filename* 的文件载入 MIME 信息。 此方法使用 :meth:`readfp` 来解析文件。" + +#: ../../library/mimetypes.rst:252 +msgid "" +"If *strict* is ``True``, information will be added to list of standard " +"types, else to the list of non-standard types." +msgstr "如果 *strict* 为 ``True``,信息将被添加到标准类型列表,否则添加到非标准类型列表。" + +#: ../../library/mimetypes.rst:258 +msgid "" +"Load MIME type information from an open file *fp*. The file must have the " +"format of the standard :file:`mime.types` files." +msgstr "从打开的文件 *fp* 载入 MIME 类型信息。 文件必须具有标准 :file:`mime.types` 文件的格式。" + +#: ../../library/mimetypes.rst:261 ../../library/mimetypes.rst:271 +msgid "" +"If *strict* is ``True``, information will be added to the list of standard " +"types, else to the list of non-standard types." +msgstr "如果 *strict* 为 ``True``,信息将被添加到标准类型列表,否则添加到非标准类型列表。" + +#: ../../library/mimetypes.rst:267 +msgid "Load MIME type information from the Windows registry." +msgstr "从 Windows 注册表载入 MIME 类型信息。" + +#: ../../library/mimetypes.rst:270 +msgid ":ref:`Availability `: Windows." +msgstr ":ref:`可用性 `: Windows。" diff --git a/library/misc.po b/library/misc.po new file mode 100644 index 000000000..800b1c48b --- /dev/null +++ b/library/misc.po @@ -0,0 +1,32 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) 2001-2022, Python Software Foundation +# This file is distributed under the same license as the Python package. +# FIRST AUTHOR , YEAR. +# +# Translators: +# Alpha Du , 2019 +# +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: Python 3.9\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2022-11-04 14:34+0000\n" +"PO-Revision-Date: 2017-02-16 23:18+0000\n" +"Last-Translator: Alpha Du , 2019\n" +"Language-Team: Chinese (China) (https://www.transifex.com/python-doc/teams/5390/zh_CN/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: zh_CN\n" +"Plural-Forms: nplurals=1; plural=0;\n" + +#: ../../library/misc.rst:5 +msgid "Miscellaneous Services" +msgstr "杂项服务" + +#: ../../library/misc.rst:7 +msgid "" +"The modules described in this chapter provide miscellaneous services that " +"are available in all Python versions. Here's an overview:" +msgstr "本章中介绍的模块提供了所有 Python 版本中提供的各种杂项服务。 这是一个概述:" diff --git a/library/mm.po b/library/mm.po new file mode 100644 index 000000000..eae699573 --- /dev/null +++ b/library/mm.po @@ -0,0 +1,33 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) 2001-2022, Python Software Foundation +# This file is distributed under the same license as the Python package. +# FIRST AUTHOR , YEAR. +# +# Translators: +# Alpha Du , 2019 +# +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: Python 3.9\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2022-11-04 14:34+0000\n" +"PO-Revision-Date: 2017-02-16 23:18+0000\n" +"Last-Translator: Alpha Du , 2019\n" +"Language-Team: Chinese (China) (https://www.transifex.com/python-doc/teams/5390/zh_CN/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: zh_CN\n" +"Plural-Forms: nplurals=1; plural=0;\n" + +#: ../../library/mm.rst:5 +msgid "Multimedia Services" +msgstr "多媒体服务" + +#: ../../library/mm.rst:7 +msgid "" +"The modules described in this chapter implement various algorithms or " +"interfaces that are mainly useful for multimedia applications. They are " +"available at the discretion of the installation. Here's an overview:" +msgstr "本章描述的模块实现了主要用于多媒体应用的各种算法或接口。 它们可在安装时自行决定。 这是一个概述:" diff --git a/library/mmap.po b/library/mmap.po new file mode 100644 index 000000000..f5e8b3765 --- /dev/null +++ b/library/mmap.po @@ -0,0 +1,415 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) 2001-2024, Python Software Foundation +# This file is distributed under the same license as the Python package. +# FIRST AUTHOR , YEAR. +# +# Translators: +# 1f8188eb55931f9e2a00b94ad4501daa_6f620ef <34b4f5f8c2e4e8d305e849ed969d1b03_787452>, 2019 +# laazy , 2020 +# Freesand Leo , 2021 +# Rafael Fontenelle , 2024 +# +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: Python 3.9\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2024-08-30 16:51+0000\n" +"PO-Revision-Date: 2017-02-16 23:18+0000\n" +"Last-Translator: Rafael Fontenelle , 2024\n" +"Language-Team: Chinese (China) (https://app.transifex.com/python-doc/teams/5390/zh_CN/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: zh_CN\n" +"Plural-Forms: nplurals=1; plural=0;\n" + +#: ../../library/mmap.rst:2 +msgid ":mod:`mmap` --- Memory-mapped file support" +msgstr ":mod:`mmap` --- 内存映射文件支持" + +#: ../../library/mmap.rst:9 +msgid "" +"Memory-mapped file objects behave like both :class:`bytearray` and like " +":term:`file objects `. You can use mmap objects in most places" +" where :class:`bytearray` are expected; for example, you can use the " +":mod:`re` module to search through a memory-mapped file. You can also " +"change a single byte by doing ``obj[index] = 97``, or change a subsequence " +"by assigning to a slice: ``obj[i1:i2] = b'...'``. You can also read and " +"write data starting at the current file position, and :meth:`seek` through " +"the file to different positions." +msgstr "" +"内存映射文件对象的行为既像 :class:`bytearray` 又像 :term:`文件对象 `。 你可以在大部分接受 " +":class:`bytearray` 的地方使用 mmap 对象;例如,你可以使用 :mod:`re` 模块来搜索一个内存映射文件。 你也可以通过执行 " +"``obj[index] = 97`` 来修改单个字节,或者通过对切片赋值来修改一个子序列: ``obj[i1:i2] = b'...'``。 " +"你还可以在文件的当前位置开始读取和写入数据,并使用 :meth:`seek` 前往另一个位置。" + +#: ../../library/mmap.rst:17 +msgid "" +"A memory-mapped file is created by the :class:`~mmap.mmap` constructor, " +"which is different on Unix and on Windows. In either case you must provide " +"a file descriptor for a file opened for update. If you wish to map an " +"existing Python file object, use its :meth:`fileno` method to obtain the " +"correct value for the *fileno* parameter. Otherwise, you can open the file " +"using the :func:`os.open` function, which returns a file descriptor directly" +" (the file still needs to be closed when done)." +msgstr "" +"内存映射文件是由 :class:`~mmap.mmap` 构造函数创建的,其在 Unix 和 Windows 上是不同的。 " +"无论哪种情况,你都必须为一个打开的文件提供文件描述符以进行更新。 如果你希望映射一个已有的 Python 文件对象,请使用该对象的 " +":meth:`fileno` 方法来获取 *fileno* 参数的正确值。 否则,你可以使用 :func:`os.open` " +"函数来打开这个文件,这会直接返回一个文件描述符(结束时仍然需要关闭该文件)。" + +#: ../../library/mmap.rst:26 +msgid "" +"If you want to create a memory-mapping for a writable, buffered file, you " +"should :func:`~io.IOBase.flush` the file first. This is necessary to ensure" +" that local modifications to the buffers are actually available to the " +"mapping." +msgstr "" +"如果要为可写的缓冲文件创建内存映射,则应当首先 :func:`~io.IOBase.flush` 该文件。 这确保了对缓冲区的本地修改在内存映射中可用。" + +#: ../../library/mmap.rst:31 +msgid "" +"For both the Unix and Windows versions of the constructor, *access* may be " +"specified as an optional keyword parameter. *access* accepts one of four " +"values: :const:`ACCESS_READ`, :const:`ACCESS_WRITE`, or :const:`ACCESS_COPY`" +" to specify read-only, write-through or copy-on-write memory respectively, " +"or :const:`ACCESS_DEFAULT` to defer to *prot*. *access* can be used on both" +" Unix and Windows. If *access* is not specified, Windows mmap returns a " +"write-through mapping. The initial memory values for all three access types" +" are taken from the specified file. Assignment to an :const:`ACCESS_READ` " +"memory map raises a :exc:`TypeError` exception. Assignment to an " +":const:`ACCESS_WRITE` memory map affects both memory and the underlying " +"file. Assignment to an :const:`ACCESS_COPY` memory map affects memory but " +"does not update the underlying file." +msgstr "" +"对于 Unix 和 Windows 版本的构造函数,可以将 *access* 指定为可选的关键字参数。 *access* 接受以下四个值之一: " +":const:`ACCESS_READ` , :const:`ACCESS_WRITE` 或 :const:`ACCESS_COPY` " +"分别指定只读,直写或写时复制内存,或 :const:`ACCESS_DEFAULT` 推迟到 *prot* 。 *access* 可以在 Unix 和 " +"Windows 上使用。如果未指定 *access* ,则 Windows mmap 返回直写映射。这三种访问类型的初始内存值均取自指定的文件。向 " +":const:`ACCESS_READ` 内存映射赋值会引发 :exc:`TypeError` 异常。 向 :const:`ACCESS_WRITE` " +"内存映射赋值会影响内存和底层的文件。 向 :const:`ACCESS_COPY` 内存映射赋值会影响内存,但不会更新底层的文件。" + +#: ../../library/mmap.rst:44 +msgid "Added :const:`ACCESS_DEFAULT` constant." +msgstr "添加了 :const:`ACCESS_DEFAULT` 常量。" + +#: ../../library/mmap.rst:47 +msgid "" +"To map anonymous memory, -1 should be passed as the fileno along with the " +"length." +msgstr "要映射匿名内存,应将 -1 作为 fileno 和 length 一起传递。" + +#: ../../library/mmap.rst:51 +msgid "" +"**(Windows version)** Maps *length* bytes from the file specified by the " +"file handle *fileno*, and creates a mmap object. If *length* is larger than" +" the current size of the file, the file is extended to contain *length* " +"bytes. If *length* is ``0``, the maximum length of the map is the current " +"size of the file, except that if the file is empty Windows raises an " +"exception (you cannot create an empty mapping on Windows)." +msgstr "" +"**( Windows 版本)** 映射被文件句柄 *fileno* 指定的文件的 *length* 个字节,并创建一个 mmap 对象。如果 " +"*length* 大于当前文件大小,则文件将扩展为包含 *length* 个字节。如果 *length* 为 " +"``0``,则映射的最大长度为当前文件大小。如果文件为空, Windows 会引发异常(你无法在Windows上创建空映射)。" + +#: ../../library/mmap.rst:58 +msgid "" +"*tagname*, if specified and not ``None``, is a string giving a tag name for " +"the mapping. Windows allows you to have many different mappings against the" +" same file. If you specify the name of an existing tag, that tag is opened," +" otherwise a new tag of this name is created. If this parameter is omitted " +"or ``None``, the mapping is created without a name. Avoiding the use of the" +" tag parameter will assist in keeping your code portable between Unix and " +"Windows." +msgstr "" +"如果 *tagname* 被指定且不是 ``None`` ,则是为映射提供标签名称的字符串。 Windows " +"允许你对同一文件拥有许多不同的映射。如果指定现有标签的名称,则会打开该标签,否则将创建该名称的新标签。如果省略此参数或设置为 ``None`` " +",则创建的映射不带名称。避免使用 tag 参数将有助于使代码在Unix和Windows之间可移植。" + +#: ../../library/mmap.rst:66 +msgid "" +"*offset* may be specified as a non-negative integer offset. mmap references " +"will be relative to the offset from the beginning of the file. *offset* " +"defaults to 0. *offset* must be a multiple of the " +":const:`ALLOCATIONGRANULARITY`." +msgstr "" +"*offset* 可以被指定为非负整数偏移量。 mmap 引用将相对于从文件开头的偏移。 *offset* 默认为0。 *offeset* 必须是 " +":const:`ALLOCATIONGRANULARITY` 的倍数。" + +#: ../../library/mmap.rst:70 ../../library/mmap.rst:159 +msgid "" +"Raises an :ref:`auditing event ` ``mmap.__new__`` with arguments " +"``fileno``, ``length``, ``access``, ``offset``." +msgstr "" +"引发一个 :ref:`审计事件 ` ``mmap.__new__`` 并附带参数 ``fileno``, ``length``, " +"``access``, ``offset``。" + +#: ../../library/mmap.rst:75 +msgid "" +"**(Unix version)** Maps *length* bytes from the file specified by the file " +"descriptor *fileno*, and returns a mmap object. If *length* is ``0``, the " +"maximum length of the map will be the current size of the file when " +":class:`~mmap.mmap` is called." +msgstr "" +"**(Unix 版本)** 映射文件描述符 *fileno* 指定的文件的 *length* 个字节,并返回一个 mmap 对象。如果 *length*" +" 为 ``0`` ,则当调用 :class:`~mmap.mmap` 时,映射的最大长度将为文件的当前大小。" + +#: ../../library/mmap.rst:80 +msgid "" +"*flags* specifies the nature of the mapping. :const:`MAP_PRIVATE` creates a " +"private copy-on-write mapping, so changes to the contents of the mmap object" +" will be private to this process, and :const:`MAP_SHARED` creates a mapping " +"that's shared with all other processes mapping the same areas of the file. " +"The default value is :const:`MAP_SHARED`." +msgstr "" +"*flags* 指明映射的性质。 :const:`MAP_PRIVATE` 会创建私有的写入时拷贝映射,因此对 mmap " +"对象内容的修改将为该进程所私有,而 :const:`MAP_SHARED` 会创建与其他映射同一文件区域的进程所共享的映射。 默认值为 " +":const:`MAP_SHARED`。" + +#: ../../library/mmap.rst:86 +msgid "" +"*prot*, if specified, gives the desired memory protection; the two most " +"useful values are :const:`PROT_READ` and :const:`PROT_WRITE`, to specify " +"that the pages may be read or written. *prot* defaults to :const:`PROT_READ" +" \\| PROT_WRITE`." +msgstr "" +"如果指明了 *prot*,它将给出所需的内存保护方式;最有用的两个值是 :const:`PROT_READ` 和 " +":const:`PROT_WRITE`,分别指明页面为可读或可写。 *prot* 默认为 :const:`PROT_READ \\| " +"PROT_WRITE`。" + +#: ../../library/mmap.rst:91 +msgid "" +"*access* may be specified in lieu of *flags* and *prot* as an optional " +"keyword parameter. It is an error to specify both *flags*, *prot* and " +"*access*. See the description of *access* above for information on how to " +"use this parameter." +msgstr "" +"可以指定 *access* 作为替代 *flags* 和 *prot* 的可选关键字形参。 同时指定 *flags*, *prot* 和 " +"*access* 将导致错误。 请参阅上文中 *access* 的描述了解有关如何使用此形参的信息。" + +#: ../../library/mmap.rst:96 +msgid "" +"*offset* may be specified as a non-negative integer offset. mmap references " +"will be relative to the offset from the beginning of the file. *offset* " +"defaults to 0. *offset* must be a multiple of :const:`ALLOCATIONGRANULARITY`" +" which is equal to :const:`PAGESIZE` on Unix systems." +msgstr "" +"*offset* 可以被指定为非负整数偏移量。 mmap 引用将相对于从文件开头的偏移。 *offset* 默认为 0。 *offset* 必须是 " +":const:`ALLOCATIONGRANULARITY` 的倍数,它在 Unix 系统上等价于 :const:`PAGESIZE`。" + +#: ../../library/mmap.rst:101 +msgid "" +"To ensure validity of the created memory mapping the file specified by the " +"descriptor *fileno* is internally automatically synchronized with physical " +"backing store on macOS and OpenVMS." +msgstr "" + +#: ../../library/mmap.rst:105 +msgid "This example shows a simple way of using :class:`~mmap.mmap`::" +msgstr "这个例子演示了使用 :class:`~mmap.mmap` 的简单方式::" + +#: ../../library/mmap.rst:130 +msgid "" +":class:`~mmap.mmap` can also be used as a context manager in a " +":keyword:`with` statement::" +msgstr ":class:`~mmap.mmap` 也可以在 :keyword:`with` 语句中被用作上下文管理器::" + +#: ../../library/mmap.rst:138 +msgid "Context manager support." +msgstr "上下文管理器支持。" + +#: ../../library/mmap.rst:142 +msgid "" +"The next example demonstrates how to create an anonymous map and exchange " +"data between the parent and child processes::" +msgstr "下面的例子演示了如何创建一个匿名映射并在父进程和子进程之间交换数据。::" + +#: ../../library/mmap.rst:161 +msgid "Memory-mapped file objects support the following methods:" +msgstr "映射内存的文件对象支持以下方法:" + +#: ../../library/mmap.rst:165 +msgid "" +"Closes the mmap. Subsequent calls to other methods of the object will result" +" in a ValueError exception being raised. This will not close the open file." +msgstr "关闭 mmap。 后续调用该对象的其他方法将导致引发 ValueError 异常。 此方法将不会关闭打开的文件。" + +#: ../../library/mmap.rst:172 +msgid "``True`` if the file is closed." +msgstr "如果文件已关闭则返回 ``True``。" + +#: ../../library/mmap.rst:179 +msgid "" +"Returns the lowest index in the object where the subsequence *sub* is found," +" such that *sub* is contained in the range [*start*, *end*]. Optional " +"arguments *start* and *end* are interpreted as in slice notation. Returns " +"``-1`` on failure." +msgstr "" +"返回子序列 *sub* 在对象内被找到的最小索引号,使得 *sub* 被包含在 [*start*, *end*] 范围中。 可选参数 *start* 和" +" *end* 会被解读为切片表示法。 如果未找到则返回 ``-1``。" + +#: ../../library/mmap.rst:184 ../../library/mmap.rst:265 +#: ../../library/mmap.rst:297 +msgid "Writable :term:`bytes-like object` is now accepted." +msgstr "现在接受可写的 :term:`字节类对象 `。" + +#: ../../library/mmap.rst:190 +msgid "" +"Flushes changes made to the in-memory copy of a file back to disk. Without " +"use of this call there is no guarantee that changes are written back before " +"the object is destroyed. If *offset* and *size* are specified, only changes" +" to the given range of bytes will be flushed to disk; otherwise, the whole " +"extent of the mapping is flushed. *offset* must be a multiple of the " +":const:`PAGESIZE` or :const:`ALLOCATIONGRANULARITY`." +msgstr "" +"将对文件的内存副本的修改刷新至磁盘。 如果不使用此调用则无法保证在对象被销毁前将修改写回存储。 如果指定了 *offset* 和 " +"*size*,则只将对指定范围内字节的修改刷新至磁盘;在其他情况下,映射的全部范围都会被刷新。 *offset* 必须为 " +":const:`PAGESIZE` 或 :const:`ALLOCATIONGRANULARITY` 的倍数。" + +#: ../../library/mmap.rst:197 +msgid "" +"``None`` is returned to indicate success. An exception is raised when the " +"call failed." +msgstr "返回 ``None`` 以表示成功。 当调用失败时将引发异常。" + +#: ../../library/mmap.rst:200 +msgid "" +"Previously, a nonzero value was returned on success; zero was returned on " +"error under Windows. A zero value was returned on success; an exception was" +" raised on error under Unix." +msgstr "" +"在之前版本中,成功时将返回非零值;在 Windows 下当发生错误时将返回零。 在 Unix 下 成功时将返回零值;当发生错误时将引发异常。" + +#: ../../library/mmap.rst:208 +msgid "" +"Send advice *option* to the kernel about the memory region beginning at " +"*start* and extending *length* bytes. *option* must be one of the " +":ref:`MADV_* constants ` available on the system. If " +"*start* and *length* are omitted, the entire mapping is spanned. On some " +"systems (including Linux), *start* must be a multiple of the " +":const:`PAGESIZE`." +msgstr "" +"将有关内存区域的建议 *option* 发送至内核,从 *start* 开始扩展 *length* 个字节。 *option* 必须为系统中可用的 " +":ref:`MADV_* 常量 ` 之一。 如果省略 *start* 和 *length*,则会包含整个映射。 " +"在某些系统中(包括 Linux),*start* 必须为 :const:`PAGESIZE` 的倍数。" + +#: ../../library/mmap.rst:215 +msgid "Availability: Systems with the ``madvise()`` system call." +msgstr "可用性: 具有 ``madvise()`` 系统调用的系统。" + +#: ../../library/mmap.rst:222 +msgid "" +"Copy the *count* bytes starting at offset *src* to the destination index " +"*dest*. If the mmap was created with :const:`ACCESS_READ`, then calls to " +"move will raise a :exc:`TypeError` exception." +msgstr "" +"将从偏移量 *src* 开始的 *count* 个字节拷贝到目标索引号 *dest*。 如果 mmap 创建时设置了 " +":const:`ACCESS_READ`,则调用 move 将引发 :exc:`TypeError` 异常。" + +#: ../../library/mmap.rst:229 +msgid "" +"Return a :class:`bytes` containing up to *n* bytes starting from the current" +" file position. If the argument is omitted, ``None`` or negative, return all" +" bytes from the current file position to the end of the mapping. The file " +"position is updated to point after the bytes that were returned." +msgstr "" +"返回一个 :class:`bytes`,其中包含从当前文件位置开始的至多 *n* 个字节。 如果参数省略,为 ``None`` " +"或负数,则返回从当前文件位置开始直至映射结尾的所有字节。 文件位置会被更新为返回字节数据之后的位置。" + +#: ../../library/mmap.rst:235 +msgid "Argument can be omitted or ``None``." +msgstr "参数可被省略或为 ``None``。" + +#: ../../library/mmap.rst:240 +msgid "" +"Returns a byte at the current file position as an integer, and advances the " +"file position by 1." +msgstr "将当前文件位置上的一个字节以整数形式返回,并让文件位置前进 1。" + +#: ../../library/mmap.rst:246 +msgid "" +"Returns a single line, starting at the current file position and up to the " +"next newline. The file position is updated to point after the bytes that " +"were returned." +msgstr "返回一个单独的行,从当前文件位置开始直到下一个换行符。 文件位置会被更新为返回字节数据之后的位置。" + +#: ../../library/mmap.rst:253 +msgid "" +"Resizes the map and the underlying file, if any. If the mmap was created " +"with :const:`ACCESS_READ` or :const:`ACCESS_COPY`, resizing the map will " +"raise a :exc:`TypeError` exception." +msgstr "" +"改变映射以及下层文件的大小,如果存在的话。 如果 mmap 创建时设置了 :const:`ACCESS_READ` 或 " +":const:`ACCESS_COPY`,则改变映射大小将引发 :exc:`TypeError` 异常。" + +#: ../../library/mmap.rst:260 +msgid "" +"Returns the highest index in the object where the subsequence *sub* is " +"found, such that *sub* is contained in the range [*start*, *end*]. Optional " +"arguments *start* and *end* are interpreted as in slice notation. Returns " +"``-1`` on failure." +msgstr "" +"返回子序列 *sub* 在对象内被找到的最大索引号,使得 *sub* 被包含在 [*start*, *end*] 范围中。 可选参数 *start* 和" +" *end* 会被解读为切片表示法。 如果未找到则返回 ``-1``。" + +#: ../../library/mmap.rst:271 +msgid "" +"Set the file's current position. *whence* argument is optional and defaults" +" to ``os.SEEK_SET`` or ``0`` (absolute file positioning); other values are " +"``os.SEEK_CUR`` or ``1`` (seek relative to the current position) and " +"``os.SEEK_END`` or ``2`` (seek relative to the file's end)." +msgstr "" +"设置文件的当前位置。 *whence* 参数为可选项并且默认为 ``os.SEEK_SET`` 或 ``0`` (绝对文件定位);其他值还有 " +"``os.SEEK_CUR`` 或 ``1`` (相对当前位置查找) 和 ``os.SEEK_END`` 或 ``2`` (相对文件末尾查找)。" + +#: ../../library/mmap.rst:279 +msgid "" +"Return the length of the file, which can be larger than the size of the " +"memory-mapped area." +msgstr "返回文件的长度,该数值可以大于内存映射区域的大小。" + +#: ../../library/mmap.rst:285 +msgid "Returns the current position of the file pointer." +msgstr "返回文件指针的当前位置。" + +#: ../../library/mmap.rst:290 +msgid "" +"Write the bytes in *bytes* into memory at the current position of the file " +"pointer and return the number of bytes written (never less than " +"``len(bytes)``, since if the write fails, a :exc:`ValueError` will be " +"raised). The file position is updated to point after the bytes that were " +"written. If the mmap was created with :const:`ACCESS_READ`, then writing to" +" it will raise a :exc:`TypeError` exception." +msgstr "" +"将 *bytes* 中的字节数据写入文件指针当前位置的内存并返回写入的字节总数 (一定不小于 ``len(bytes)``,因为如果写入失败,将会引发 " +":exc:`ValueError`)。 在字节数据被写入后文件位置将会更新。 如果 mmap 创建时设置了 " +":const:`ACCESS_READ`,则向其写入将引发 :exc:`TypeError` 异常。" + +#: ../../library/mmap.rst:300 +msgid "The number of bytes written is now returned." +msgstr "现在会返回写入的字节总数。" + +#: ../../library/mmap.rst:306 +msgid "" +"Write the integer *byte* into memory at the current position of the file " +"pointer; the file position is advanced by ``1``. If the mmap was created " +"with :const:`ACCESS_READ`, then writing to it will raise a :exc:`TypeError` " +"exception." +msgstr "" +"将整数值 *byte* 写入文件指针当前位置的内存;文件位置前进 ``1``。 如果 mmap 创建时设置了 " +":const:`ACCESS_READ`,则向其写入将引发 :exc:`TypeError` 异常。" + +#: ../../library/mmap.rst:314 +msgid "MADV_* Constants" +msgstr "MADV_* 常量" + +#: ../../library/mmap.rst:339 +msgid "" +"These options can be passed to :meth:`mmap.madvise`. Not every option will " +"be present on every system." +msgstr "这些选项可被传给 :meth:`mmap.madvise`。 不是每个选项都存在于每个系统中。" + +#: ../../library/mmap.rst:342 +msgid "Availability: Systems with the madvise() system call." +msgstr "可用性: 具有 madvise() 系统调用的系统。" diff --git a/library/modulefinder.po b/library/modulefinder.po new file mode 100644 index 000000000..4071d266f --- /dev/null +++ b/library/modulefinder.po @@ -0,0 +1,102 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) 2001-2024, Python Software Foundation +# This file is distributed under the same license as the Python package. +# FIRST AUTHOR , YEAR. +# +# Translators: +# Freesand Leo , 2024 +# Alpha Du , 2024 +# +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: Python 3.9\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2024-06-20 08:51+0000\n" +"PO-Revision-Date: 2017-02-16 23:18+0000\n" +"Last-Translator: Alpha Du , 2024\n" +"Language-Team: Chinese (China) (https://app.transifex.com/python-doc/teams/5390/zh_CN/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: zh_CN\n" +"Plural-Forms: nplurals=1; plural=0;\n" + +#: ../../library/modulefinder.rst:2 +msgid ":mod:`modulefinder` --- Find modules used by a script" +msgstr ":mod:`modulefinder` --- 查找脚本使用的模块" + +#: ../../library/modulefinder.rst:9 +msgid "**Source code:** :source:`Lib/modulefinder.py`" +msgstr "**源码:** :source:`Lib/modulefinder.py`" + +#: ../../library/modulefinder.rst:13 +msgid "" +"This module provides a :class:`ModuleFinder` class that can be used to " +"determine the set of modules imported by a script. ``modulefinder.py`` can " +"also be run as a script, giving the filename of a Python script as its " +"argument, after which a report of the imported modules will be printed." +msgstr "" +"该模块提供了一个 :class:`ModuleFinder` 类,可用于确定脚本导入的模块集。 ``modulefinder.py`` " +"也可以作为脚本运行,给出 Python 脚本的文件名作为参数,之后将打印导入模块的报告。" + +#: ../../library/modulefinder.rst:21 +msgid "" +"Record that the package named *pkg_name* can be found in the specified " +"*path*." +msgstr "记录名为 *pkg_name* 的包可以在指定的 *path* 中找到。" + +#: ../../library/modulefinder.rst:26 +msgid "" +"Allows specifying that the module named *oldname* is in fact the package " +"named *newname*." +msgstr "允许指定名为 *oldname* 的模块实际上是名为 *newname* 的包。" + +#: ../../library/modulefinder.rst:32 +msgid "" +"This class provides :meth:`run_script` and :meth:`report` methods to " +"determine the set of modules imported by a script. *path* can be a list of " +"directories to search for modules; if not specified, ``sys.path`` is used. " +"*debug* sets the debugging level; higher values make the class print " +"debugging messages about what it's doing. *excludes* is a list of module " +"names to exclude from the analysis. *replace_paths* is a list of ``(oldpath," +" newpath)`` tuples that will be replaced in module paths." +msgstr "" +"该类提供 :meth:`run_script` 和 :meth:`report` 方法,用于确定脚本导入的模块集。 *path* " +"可以是搜索模块的目录列表;如果没有指定,则使用 ``sys.path`` 。 *debug* " +"设置调试级别;更高的值使类打印调试消息,关于它正在做什么。 *excludes* 是要从分析中排除的模块名称列表。 *replace_paths* " +"是将在模块路径中替换的 ``(oldpath, newpath)`` 元组的列表。" + +#: ../../library/modulefinder.rst:43 +msgid "" +"Print a report to standard output that lists the modules imported by the " +"script and their paths, as well as modules that are missing or seem to be " +"missing." +msgstr "将报告打印到标准输出,列出脚本导入的模块及其路径,以及缺少或似乎缺失的模块。" + +#: ../../library/modulefinder.rst:49 +msgid "" +"Analyze the contents of the *pathname* file, which must contain Python code." +msgstr "分析 *pathname* 文件的内容,该文件必须包含 Python 代码。" + +#: ../../library/modulefinder.rst:54 +msgid "" +"A dictionary mapping module names to modules. See :ref:`modulefinder-" +"example`." +msgstr "一个将模块名称映射到模块的字典。 请参阅 :ref:`modulefinder-example`。" + +#: ../../library/modulefinder.rst:61 +msgid "Example usage of :class:`ModuleFinder`" +msgstr ":class:`ModuleFinder` 的示例用法" + +#: ../../library/modulefinder.rst:63 +msgid "The script that is going to get analyzed later on (bacon.py)::" +msgstr "稍后将分析的脚本(bacon.py)::" + +#: ../../library/modulefinder.rst:78 +msgid "The script that will output the report of bacon.py::" +msgstr "将输出 bacon.py 报告的脚本::" + +#: ../../library/modulefinder.rst:94 +msgid "Sample output (may vary depending on the architecture)::" +msgstr "输出样例(可能因架构而异)::" diff --git a/library/modules.po b/library/modules.po new file mode 100644 index 000000000..5e8816047 --- /dev/null +++ b/library/modules.po @@ -0,0 +1,36 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) 2001-2022, Python Software Foundation +# This file is distributed under the same license as the Python package. +# FIRST AUTHOR , YEAR. +# +# Translators: +# Alpha Du , 2019 +# +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: Python 3.9\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2022-11-04 14:34+0000\n" +"PO-Revision-Date: 2017-02-16 23:19+0000\n" +"Last-Translator: Alpha Du , 2019\n" +"Language-Team: Chinese (China) (https://www.transifex.com/python-doc/teams/5390/zh_CN/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: zh_CN\n" +"Plural-Forms: nplurals=1; plural=0;\n" + +#: ../../library/modules.rst:5 +msgid "Importing Modules" +msgstr "导入模块" + +#: ../../library/modules.rst:7 +msgid "" +"The modules described in this chapter provide new ways to import other " +"Python modules and hooks for customizing the import process." +msgstr "本章中介绍的模块提供了导入其他Python模块和挂钩以自定义导入过程的新方法。" + +#: ../../library/modules.rst:10 +msgid "The full list of modules described in this chapter is:" +msgstr "本章描述的完整模块列表如下:" diff --git a/library/msilib.po b/library/msilib.po new file mode 100644 index 000000000..ec8f7413f --- /dev/null +++ b/library/msilib.po @@ -0,0 +1,656 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) 2001-2022, Python Software Foundation +# This file is distributed under the same license as the Python package. +# FIRST AUTHOR , YEAR. +# +# Translators: +# Bu Yixin, 2022 +# Freesand Leo , 2022 +# +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: Python 3.9\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2022-11-04 14:34+0000\n" +"PO-Revision-Date: 2017-02-16 23:19+0000\n" +"Last-Translator: Freesand Leo , 2022\n" +"Language-Team: Chinese (China) (https://www.transifex.com/python-doc/teams/5390/zh_CN/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: zh_CN\n" +"Plural-Forms: nplurals=1; plural=0;\n" + +#: ../../library/msilib.rst:2 +msgid ":mod:`msilib` --- Read and write Microsoft Installer files" +msgstr ":mod:`msilib` --- 读写 Microsoft Installer 文件" + +#: ../../library/msilib.rst:12 +msgid "**Source code:** :source:`Lib/msilib/__init__.py`" +msgstr "**源代码:** :source:`Lib/msilib/__init__.py`" + +#: ../../library/msilib.rst:16 +msgid "" +"The :mod:`msilib` module is deprecated (see :pep:`PEP 594 <594#msilib>` for " +"details)." +msgstr ":mod:`msilib` 模块已被弃用(请参阅 :pep:`PEP 594 <594#msilib>` 了解详情)。" + +#: ../../library/msilib.rst:22 +msgid "" +"The :mod:`msilib` supports the creation of Microsoft Installer (``.msi``) " +"files. Because these files often contain an embedded \"cabinet\" file " +"(``.cab``), it also exposes an API to create CAB files. Support for reading " +"``.cab`` files is currently not implemented; read support for the ``.msi`` " +"database is possible." +msgstr "" +":mod:`msilib` 支持创建 Microsoft 安装器 (``.msi``) 文件。 由于这种文件往往包含一个嵌入的 \"cabinet\" " +"文件 (``.cab``),它也暴露了一个用于创建 CAB 文件的 API。 目前没有实现对读取 ``.cab`` 文件的支持;对于读取 " +"``.msi`` 数据库的支持则是可能的。" + +#: ../../library/msilib.rst:27 +msgid "" +"This package aims to provide complete access to all tables in an ``.msi`` " +"file, therefore, it is a fairly low-level API. Two primary applications of " +"this package are the :mod:`distutils` command ``bdist_msi``, and the " +"creation of Python installer package itself (although that currently uses a " +"different version of ``msilib``)." +msgstr "" +"这个包的目标是提供对 ``.msi`` 文件中的全部表的完整访问,因此,它是一个相当低层级的 API。 这个包的两个主要应用是 " +":mod:`distutils` 命令 ``bdist_msi``,以及创建 Python 安装程序包本身 (尽管它目前是使用不同版本的 " +"``msilib``)。" + +#: ../../library/msilib.rst:33 +msgid "" +"The package contents can be roughly split into four parts: low-level CAB " +"routines, low-level MSI routines, higher-level MSI routines, and standard " +"table structures." +msgstr "这个包的内容可以大致分为四个部分:低层级 CAB 例程、低层级 MSI 例程、高层级 MSI 例程以及标准表结构。" + +#: ../../library/msilib.rst:40 +msgid "" +"Create a new CAB file named *cabname*. *files* must be a list of tuples, " +"each containing the name of the file on disk, and the name of the file " +"inside the CAB file." +msgstr "" +"新建一个名为 *cabname* 的 CAB 文件。 *files* 必须是一个元组的列表,其中每个元组包含磁盘文件的名称,以及 CAB " +"文件内文件的名称。" + +#: ../../library/msilib.rst:44 +msgid "" +"The files are added to the CAB file in the order they appear in the list. " +"All files are added into a single CAB file, using the MSZIP compression " +"algorithm." +msgstr "这些文件将按照它们在列表中出现的顺序被添加到 CAB 文件中。 所有文件都会被添加到单个 CAB 文件,使用 MSZIP 压缩算法。" + +#: ../../library/msilib.rst:47 +msgid "" +"Callbacks to Python for the various steps of MSI creation are currently not " +"exposed." +msgstr "目前没有暴露 MSI 创建的各个步骤对 Python 的回调。" + +#: ../../library/msilib.rst:53 +msgid "" +"Return the string representation of a new unique identifier. This wraps the " +"Windows API functions :c:func:`UuidCreate` and :c:func:`UuidToString`." +msgstr "" +"返回一个新的唯一标识符的字符串表示形式。 这封装了 Windows API 函数 :c:func:`UuidCreate` 和 " +":c:func:`UuidToString`。" + +#: ../../library/msilib.rst:59 +msgid "" +"Return a new database object by calling MsiOpenDatabase. *path* is the " +"file name of the MSI file; *persist* can be one of the constants " +"``MSIDBOPEN_CREATEDIRECT``, ``MSIDBOPEN_CREATE``, ``MSIDBOPEN_DIRECT``, " +"``MSIDBOPEN_READONLY``, or ``MSIDBOPEN_TRANSACT``, and may include the flag " +"``MSIDBOPEN_PATCHFILE``. See the Microsoft documentation for the meaning of " +"these flags; depending on the flags, an existing database is opened, or a " +"new one created." +msgstr "" +"通过调用 MsiOpenDatabase 来返回一个新的数据库对象。 *path* 为 MSI 文件的名称;*persist* 可以是常量 " +"``MSIDBOPEN_CREATEDIRECT``, ``MSIDBOPEN_CREATE``, ``MSIDBOPEN_DIRECT``, " +"``MSIDBOPEN_READONLY`` 或 ``MSIDBOPEN_TRANSACT`` 中的一个,并可能包括旗标 " +"``MSIDBOPEN_PATCHFILE``。 请参阅 Microsoft " +"文档了解这些旗标的含义;根据这些旗标,将打开一个现有数据库,或者创建一个新数据库。" + +#: ../../library/msilib.rst:70 +msgid "" +"Return a new record object by calling :c:func:`MSICreateRecord`. *count* is " +"the number of fields of the record." +msgstr "通过调用 :c:func:`MSICreateRecord` 来返回一个新的记录对象。 *count* 为记录的字段数量。" + +#: ../../library/msilib.rst:76 +msgid "" +"Create and return a new database *name*, initialize it with *schema*, and " +"set the properties *ProductName*, *ProductCode*, *ProductVersion*, and " +"*Manufacturer*." +msgstr "" +"创建并返回一个新的数据库 *name*,使用 *schema* 来初始化它,并设置属性 *ProductName*, *ProductCode*, " +"*ProductVersion* 和 *Manufacturer*。" + +#: ../../library/msilib.rst:80 +msgid "" +"*schema* must be a module object containing ``tables`` and " +"``_Validation_records`` attributes; typically, :mod:`msilib.schema` should " +"be used." +msgstr "" +"*schema* 必须是一个包含 ``tables`` 和 ``_Validation_records`` " +"属性的模块对象;在通常情况下,:mod:`msilib.schema` 应当被使用。" + +#: ../../library/msilib.rst:84 +msgid "" +"The database will contain just the schema and the validation records when " +"this function returns." +msgstr "此此函数返回时该数据库将只包含方案和验证记录。" + +#: ../../library/msilib.rst:90 +msgid "Add all *records* to the table named *table* in *database*." +msgstr "将所有 *records* 添加到 *database* 中名为 *table* 的表。" + +#: ../../library/msilib.rst:92 +msgid "" +"The *table* argument must be one of the predefined tables in the MSI schema," +" e.g. ``'Feature'``, ``'File'``, ``'Component'``, ``'Dialog'``, " +"``'Control'``, etc." +msgstr "" +"*table* 参数必须为 MSI 方案中预定义的表之一,即 ``'Feature'``, ``'File'``, ``'Component'``, " +"``'Dialog'``, ``'Control'`` 等等。" + +#: ../../library/msilib.rst:96 +msgid "" +"*records* should be a list of tuples, each one containing all fields of a " +"record according to the schema of the table. For optional fields, ``None`` " +"can be passed." +msgstr "*records* 应当为一个元组的列表,其中的每个元组都包含与表结构对应的记录的所有字段。 对于可选字段,可以传入 ``None``。" + +#: ../../library/msilib.rst:100 +msgid "Field values can be ints, strings, or instances of the Binary class." +msgstr "字段值可以为整数、字符串或 Binary 类的实例。" + +#: ../../library/msilib.rst:105 +msgid "" +"Represents entries in the Binary table; inserting such an object using " +":func:`add_data` reads the file named *filename* into the table." +msgstr "代表 Binary 表中的条目;使用 :func:`add_data` 插入这样的对象会将名为 *filename* 文件读入表中。" + +#: ../../library/msilib.rst:111 +msgid "" +"Add all table content from *module* to *database*. *module* must contain an " +"attribute *tables* listing all tables for which content should be added, and" +" one attribute per table that has the actual content." +msgstr "" +"将来自 *module* 的所有表内容添加到 *database*。 *module* 必须包括一个列出其内容需要被添加的所有表的属性 " +"*tables*,并且每个具有实际内容的表对应一个属性。" + +#: ../../library/msilib.rst:115 +msgid "This is typically used to install the sequence tables." +msgstr "这通常被用来安装序列表。" + +#: ../../library/msilib.rst:120 +msgid "" +"Add the file *path* into the ``_Stream`` table of *database*, with the " +"stream name *name*." +msgstr "将文件 *path* 添加到 *database* 的 ``_Stream`` 表,使用流名称 *name*。" + +#: ../../library/msilib.rst:126 +msgid "" +"Return a new UUID, in the format that MSI typically requires (i.e. in curly " +"braces, and with all hexdigits in upper-case)." +msgstr "" + +#: ../../library/msilib.rst:132 +msgid "" +"`FCICreate `_ " +"`UuidCreate `_ `UuidToString " +"`_" +msgstr "" + +#: ../../library/msilib.rst:139 +msgid "Database Objects" +msgstr "" + +#: ../../library/msilib.rst:144 +msgid "" +"Return a view object, by calling :c:func:`MSIDatabaseOpenView`. *sql* is the" +" SQL statement to execute." +msgstr "" + +#: ../../library/msilib.rst:150 +msgid "" +"Commit the changes pending in the current transaction, by calling " +":c:func:`MSIDatabaseCommit`." +msgstr "" + +#: ../../library/msilib.rst:156 +msgid "" +"Return a new summary information object, by calling " +":c:func:`MsiGetSummaryInformation`. *count* is the maximum number of " +"updated values." +msgstr "" + +#: ../../library/msilib.rst:162 +msgid "Close the database object, through :c:func:`MsiCloseHandle`." +msgstr "" + +#: ../../library/msilib.rst:168 +msgid "" +"`MSIDatabaseOpenView `_ `MSIDatabaseCommit " +"`_ " +"`MSIGetSummaryInformation `_ `MsiCloseHandle " +"`_" +msgstr "" + +#: ../../library/msilib.rst:176 +msgid "View Objects" +msgstr "" + +#: ../../library/msilib.rst:181 +msgid "" +"Execute the SQL query of the view, through :c:func:`MSIViewExecute`. If " +"*params* is not ``None``, it is a record describing actual values of the " +"parameter tokens in the query." +msgstr "" + +#: ../../library/msilib.rst:188 +msgid "" +"Return a record describing the columns of the view, through calling " +":c:func:`MsiViewGetColumnInfo`. *kind* can be either ``MSICOLINFO_NAMES`` or" +" ``MSICOLINFO_TYPES``." +msgstr "" + +#: ../../library/msilib.rst:195 +msgid "" +"Return a result record of the query, through calling :c:func:`MsiViewFetch`." +msgstr "" + +#: ../../library/msilib.rst:200 +msgid "" +"Modify the view, by calling :c:func:`MsiViewModify`. *kind* can be one of " +"``MSIMODIFY_SEEK``, ``MSIMODIFY_REFRESH``, ``MSIMODIFY_INSERT``, " +"``MSIMODIFY_UPDATE``, ``MSIMODIFY_ASSIGN``, ``MSIMODIFY_REPLACE``, " +"``MSIMODIFY_MERGE``, ``MSIMODIFY_DELETE``, ``MSIMODIFY_INSERT_TEMPORARY``, " +"``MSIMODIFY_VALIDATE``, ``MSIMODIFY_VALIDATE_NEW``, " +"``MSIMODIFY_VALIDATE_FIELD``, or ``MSIMODIFY_VALIDATE_DELETE``." +msgstr "" + +#: ../../library/msilib.rst:207 +msgid "*data* must be a record describing the new data." +msgstr "" + +#: ../../library/msilib.rst:212 +msgid "Close the view, through :c:func:`MsiViewClose`." +msgstr "" + +#: ../../library/msilib.rst:217 +msgid "" +"`MsiViewExecute `_ `MSIViewGetColumnInfo " +"`_ " +"`MsiViewFetch `_ `MsiViewModify " +"`_ " +"`MsiViewClose `_" +msgstr "" + +#: ../../library/msilib.rst:226 +msgid "Summary Information Objects" +msgstr "" + +#: ../../library/msilib.rst:231 +msgid "" +"Return a property of the summary, through " +":c:func:`MsiSummaryInfoGetProperty`. *field* is the name of the property, " +"and can be one of the constants ``PID_CODEPAGE``, ``PID_TITLE``, " +"``PID_SUBJECT``, ``PID_AUTHOR``, ``PID_KEYWORDS``, ``PID_COMMENTS``, " +"``PID_TEMPLATE``, ``PID_LASTAUTHOR``, ``PID_REVNUMBER``, " +"``PID_LASTPRINTED``, ``PID_CREATE_DTM``, ``PID_LASTSAVE_DTM``, " +"``PID_PAGECOUNT``, ``PID_WORDCOUNT``, ``PID_CHARCOUNT``, ``PID_APPNAME``, or" +" ``PID_SECURITY``." +msgstr "" + +#: ../../library/msilib.rst:242 +msgid "" +"Return the number of summary properties, through " +":c:func:`MsiSummaryInfoGetPropertyCount`." +msgstr "" + +#: ../../library/msilib.rst:248 +msgid "" +"Set a property through :c:func:`MsiSummaryInfoSetProperty`. *field* can have" +" the same values as in :meth:`GetProperty`, *value* is the new value of the " +"property. Possible value types are integer and string." +msgstr "" + +#: ../../library/msilib.rst:255 +msgid "" +"Write the modified properties to the summary information stream, using " +":c:func:`MsiSummaryInfoPersist`." +msgstr "" + +#: ../../library/msilib.rst:261 +msgid "" +"`MsiSummaryInfoGetProperty `_ `MsiSummaryInfoGetPropertyCount " +"`_ " +"`MsiSummaryInfoSetProperty `_ `MsiSummaryInfoPersist " +"`_" +msgstr "" + +#: ../../library/msilib.rst:269 +msgid "Record Objects" +msgstr "" + +#: ../../library/msilib.rst:274 +msgid "" +"Return the number of fields of the record, through " +":c:func:`MsiRecordGetFieldCount`." +msgstr "" + +#: ../../library/msilib.rst:280 +msgid "" +"Return the value of *field* as an integer where possible. *field* must be " +"an integer." +msgstr "" + +#: ../../library/msilib.rst:286 +msgid "" +"Return the value of *field* as a string where possible. *field* must be an " +"integer." +msgstr "" + +#: ../../library/msilib.rst:292 +msgid "" +"Set *field* to *value* through :c:func:`MsiRecordSetString`. *field* must be" +" an integer; *value* a string." +msgstr "" + +#: ../../library/msilib.rst:298 +msgid "" +"Set *field* to the contents of the file named *value*, through " +":c:func:`MsiRecordSetStream`. *field* must be an integer; *value* a string." +msgstr "" + +#: ../../library/msilib.rst:304 +msgid "" +"Set *field* to *value* through :c:func:`MsiRecordSetInteger`. Both *field* " +"and *value* must be an integer." +msgstr "" + +#: ../../library/msilib.rst:310 +msgid "" +"Set all fields of the record to 0, through :c:func:`MsiRecordClearData`." +msgstr "" + +#: ../../library/msilib.rst:315 +msgid "" +"`MsiRecordGetFieldCount `_ `MsiRecordSetString " +"`_ " +"`MsiRecordSetStream `_ `MsiRecordSetInteger " +"`_ " +"`MsiRecordClearData `_" +msgstr "" + +#: ../../library/msilib.rst:324 +msgid "Errors" +msgstr "" + +#: ../../library/msilib.rst:326 +msgid "" +"All wrappers around MSI functions raise :exc:`MSIError`; the string inside " +"the exception will contain more detail." +msgstr "" + +#: ../../library/msilib.rst:333 +msgid "CAB Objects" +msgstr "" + +#: ../../library/msilib.rst:338 +msgid "" +"The class :class:`CAB` represents a CAB file. During MSI construction, files" +" will be added simultaneously to the ``Files`` table, and to a CAB file. " +"Then, when all files have been added, the CAB file can be written, then " +"added to the MSI file." +msgstr "" + +#: ../../library/msilib.rst:343 +msgid "*name* is the name of the CAB file in the MSI file." +msgstr "" + +#: ../../library/msilib.rst:348 +msgid "" +"Add the file with the pathname *full* to the CAB file, under the name " +"*logical*. If there is already a file named *logical*, a new file name is " +"created." +msgstr "" + +#: ../../library/msilib.rst:352 +msgid "" +"Return the index of the file in the CAB file, and the new name of the file " +"inside the CAB file." +msgstr "" + +#: ../../library/msilib.rst:358 +msgid "" +"Generate a CAB file, add it as a stream to the MSI file, put it into the " +"``Media`` table, and remove the generated file from the disk." +msgstr "" + +#: ../../library/msilib.rst:365 +msgid "Directory Objects" +msgstr "" + +#: ../../library/msilib.rst:370 +msgid "" +"Create a new directory in the Directory table. There is a current component " +"at each point in time for the directory, which is either explicitly created " +"through :meth:`start_component`, or implicitly when files are added for the " +"first time. Files are added into the current component, and into the cab " +"file. To create a directory, a base directory object needs to be specified " +"(can be ``None``), the path to the physical directory, and a logical " +"directory name. *default* specifies the DefaultDir slot in the directory " +"table. *componentflags* specifies the default flags that new components get." +msgstr "" + +#: ../../library/msilib.rst:382 +msgid "" +"Add an entry to the Component table, and make this component the current " +"component for this directory. If no component name is given, the directory " +"name is used. If no *feature* is given, the current feature is used. If no " +"*flags* are given, the directory's default flags are used. If no *keyfile* " +"is given, the KeyPath is left null in the Component table." +msgstr "" + +#: ../../library/msilib.rst:391 +msgid "" +"Add a file to the current component of the directory, starting a new one if " +"there is no current component. By default, the file name in the source and " +"the file table will be identical. If the *src* file is specified, it is " +"interpreted relative to the current directory. Optionally, a *version* and a" +" *language* can be specified for the entry in the File table." +msgstr "" + +#: ../../library/msilib.rst:400 +msgid "" +"Add a list of files to the current component as specified in the glob " +"pattern. Individual files can be excluded in the *exclude* list." +msgstr "" + +#: ../../library/msilib.rst:406 +msgid "Remove ``.pyc`` files on uninstall." +msgstr "" + +#: ../../library/msilib.rst:411 +msgid "" +"`Directory Table `_ `File Table " +"`_ " +"`Component Table `_ `FeatureComponents Table " +"`_" +msgstr "" + +#: ../../library/msilib.rst:419 +msgid "Features" +msgstr "相关特性" + +#: ../../library/msilib.rst:424 +msgid "" +"Add a new record to the ``Feature`` table, using the values *id*, " +"*parent.id*, *title*, *desc*, *display*, *level*, *directory*, and " +"*attributes*. The resulting feature object can be passed to the " +":meth:`start_component` method of :class:`Directory`." +msgstr "" + +#: ../../library/msilib.rst:432 +msgid "" +"Make this feature the current feature of :mod:`msilib`. New components are " +"automatically added to the default feature, unless a feature is explicitly " +"specified." +msgstr "" + +#: ../../library/msilib.rst:439 +msgid "" +"`Feature Table `_" +msgstr "" + +#: ../../library/msilib.rst:444 +msgid "GUI classes" +msgstr "" + +#: ../../library/msilib.rst:446 +msgid "" +":mod:`msilib` provides several classes that wrap the GUI tables in an MSI " +"database. However, no standard user interface is provided; use " +":mod:`~distutils.command.bdist_msi` to create MSI files with a user-" +"interface for installing Python packages." +msgstr "" + +#: ../../library/msilib.rst:454 +msgid "" +"Base class of the dialog controls. *dlg* is the dialog object the control " +"belongs to, and *name* is the control's name." +msgstr "" + +#: ../../library/msilib.rst:460 +msgid "Make an entry into the ``ControlEvent`` table for this control." +msgstr "" + +#: ../../library/msilib.rst:465 +msgid "Make an entry into the ``EventMapping`` table for this control." +msgstr "" + +#: ../../library/msilib.rst:470 +msgid "Make an entry into the ``ControlCondition`` table for this control." +msgstr "" + +#: ../../library/msilib.rst:475 +msgid "" +"Create a radio button control named *name*. *property* is the installer " +"property that gets set when a radio button is selected." +msgstr "" + +#: ../../library/msilib.rst:481 +msgid "" +"Add a radio button named *name* to the group, at the coordinates *x*, *y*, " +"*width*, *height*, and with the label *text*. If *value* is ``None``, it " +"defaults to *name*." +msgstr "" + +#: ../../library/msilib.rst:488 +msgid "" +"Return a new :class:`Dialog` object. An entry in the ``Dialog`` table is " +"made, with the specified coordinates, dialog attributes, title, name of the " +"first, default, and cancel controls." +msgstr "" + +#: ../../library/msilib.rst:495 +msgid "" +"Return a new :class:`Control` object. An entry in the ``Control`` table is " +"made with the specified parameters." +msgstr "" + +#: ../../library/msilib.rst:498 +msgid "" +"This is a generic method; for specific types, specialized methods are " +"provided." +msgstr "" + +#: ../../library/msilib.rst:504 +msgid "Add and return a ``Text`` control." +msgstr "" + +#: ../../library/msilib.rst:509 +msgid "Add and return a ``Bitmap`` control." +msgstr "" + +#: ../../library/msilib.rst:514 +msgid "Add and return a ``Line`` control." +msgstr "" + +#: ../../library/msilib.rst:519 +msgid "Add and return a ``PushButton`` control." +msgstr "" + +#: ../../library/msilib.rst:524 +msgid "Add and return a ``RadioButtonGroup`` control." +msgstr "" + +#: ../../library/msilib.rst:529 +msgid "Add and return a ``CheckBox`` control." +msgstr "" + +#: ../../library/msilib.rst:534 +msgid "" +"`Dialog Table `_ `Control Table " +"`_ " +"`Control Types `_ `ControlCondition Table " +"`_ " +"`ControlEvent Table `_ `EventMapping Table " +"`_ " +"`RadioButton Table `_" +msgstr "" + +#: ../../library/msilib.rst:545 +msgid "Precomputed tables" +msgstr "" + +#: ../../library/msilib.rst:547 +msgid "" +":mod:`msilib` provides a few subpackages that contain only schema and table " +"definitions. Currently, these definitions are based on MSI version 2.0." +msgstr "" + +#: ../../library/msilib.rst:553 +msgid "" +"This is the standard MSI schema for MSI 2.0, with the *tables* variable " +"providing a list of table definitions, and *_Validation_records* providing " +"the data for MSI validation." +msgstr "" + +#: ../../library/msilib.rst:560 +msgid "" +"This module contains table contents for the standard sequence tables: " +"*AdminExecuteSequence*, *AdminUISequence*, *AdvtExecuteSequence*, " +"*InstallExecuteSequence*, and *InstallUISequence*." +msgstr "" +"此模块包含针对标准序列表的表内容: *AdminExecuteSequence*, *AdminUISequence*, " +"*AdvtExecuteSequence*, *InstallExecuteSequence* 和 *InstallUISequence*。" + +#: ../../library/msilib.rst:567 +msgid "" +"This module contains definitions for the UIText and ActionText tables, for " +"the standard installer actions." +msgstr "此模块包含 UIText 和 ActionText 表的定义,用于标准安装器动作。" diff --git a/library/msvcrt.po b/library/msvcrt.po new file mode 100644 index 000000000..cea852f97 --- /dev/null +++ b/library/msvcrt.po @@ -0,0 +1,207 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) 2001-2024, Python Software Foundation +# This file is distributed under the same license as the Python package. +# FIRST AUTHOR , YEAR. +# +# Translators: +# Sean Chao , 2020 +# Freesand Leo , 2020 +# Rafael Fontenelle , 2024 +# +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: Python 3.9\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2024-08-30 16:51+0000\n" +"PO-Revision-Date: 2017-02-16 23:19+0000\n" +"Last-Translator: Rafael Fontenelle , 2024\n" +"Language-Team: Chinese (China) (https://app.transifex.com/python-doc/teams/5390/zh_CN/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: zh_CN\n" +"Plural-Forms: nplurals=1; plural=0;\n" + +#: ../../library/msvcrt.rst:2 +msgid ":mod:`msvcrt` --- Useful routines from the MS VC++ runtime" +msgstr ":mod:`msvcrt` --- 来自 MS VC++ 运行时的有用例程" + +#: ../../library/msvcrt.rst:12 +msgid "" +"These functions provide access to some useful capabilities on Windows " +"platforms. Some higher-level modules use these functions to build the " +"Windows implementations of their services. For example, the :mod:`getpass` " +"module uses this in the implementation of the :func:`getpass` function." +msgstr "" +"这些函数提供了对 Windows 平台上一些有用功能的访问。一些更高级别的模块使用这些函数来构建其服务的 Windows 实现。 例如, " +":mod:`getpass` 模块在实现 :func:`getpass` 函数时使用了这些函数。" + +#: ../../library/msvcrt.rst:17 +msgid "" +"Further documentation on these functions can be found in the Platform API " +"documentation." +msgstr "关于这些函数的更多信息可以在平台 API 文档中找到。" + +#: ../../library/msvcrt.rst:20 +msgid "" +"The module implements both the normal and wide char variants of the console " +"I/O api. The normal API deals only with ASCII characters and is of limited " +"use for internationalized applications. The wide char API should be used " +"where ever possible." +msgstr "" +"该模块实现了控制台 I/O API 的普通和宽字符变体。普通的 API 只处理ASCII字符,国际化应用受限。应该尽可能地使用宽字符 API 。" + +#: ../../library/msvcrt.rst:25 +msgid "" +"Operations in this module now raise :exc:`OSError` where :exc:`IOError` was " +"raised." +msgstr "此模块中过去会引发 :exc:`IOError` 的操作现在将引发 :exc:`OSError`。" + +#: ../../library/msvcrt.rst:33 +msgid "File Operations" +msgstr "文件操作" + +#: ../../library/msvcrt.rst:38 +msgid "" +"Lock part of a file based on file descriptor *fd* from the C runtime. " +"Raises :exc:`OSError` on failure. The locked region of the file extends " +"from the current file position for *nbytes* bytes, and may continue beyond " +"the end of the file. *mode* must be one of the :const:`LK_\\*` constants " +"listed below. Multiple regions in a file may be locked at the same time, but" +" may not overlap. Adjacent regions are not merged; they must be unlocked " +"individually." +msgstr "" +"基于文件描述符 *fd* 从 C 运行时锁定文件的某一部分。 失败时引发 :exc:`OSError`。 锁定的文件区域从当前文件位置开始扩展 " +"*nbytes* 个字节,并可能持续到超出文件末尾。 *mode* 必须为下面列出的 :const:`LK_\\*` 之一。 " +"一个文件中的多个区域可以被同时锁定,但是不能重叠。 相邻区域不会被合并;它们必须单独被解锁。" + +#: ../../library/msvcrt.rst:45 +msgid "" +"Raises an :ref:`auditing event ` ``msvcrt.locking`` with arguments" +" ``fd``, ``mode``, ``nbytes``." +msgstr "" +"引发一个 :ref:`审计事件 ` ``msvcrt.locking`` 并附带参数 ``fd``, ``mode``, " +"``nbytes``。" + +#: ../../library/msvcrt.rst:51 +msgid "" +"Locks the specified bytes. If the bytes cannot be locked, the program " +"immediately tries again after 1 second. If, after 10 attempts, the bytes " +"cannot be locked, :exc:`OSError` is raised." +msgstr "" +"锁定指定的字节数据。 如果字节数据无法被锁定,程序会在 1 秒之后立即重试。 如果在 10 次尝试后字节数据仍无法被锁定,则会引发 " +":exc:`OSError`。" + +#: ../../library/msvcrt.rst:59 +msgid "" +"Locks the specified bytes. If the bytes cannot be locked, :exc:`OSError` is " +"raised." +msgstr "锁定指定的字节数据。 如果字节数据无法被锁定,则会引发 :exc:`OSError`。" + +#: ../../library/msvcrt.rst:65 +msgid "Unlocks the specified bytes, which must have been previously locked." +msgstr "解锁指定的字节数据,该对象必须在之前被锁定。" + +#: ../../library/msvcrt.rst:70 +msgid "" +"Set the line-end translation mode for the file descriptor *fd*. To set it to" +" text mode, *flags* should be :const:`os.O_TEXT`; for binary, it should be " +":const:`os.O_BINARY`." +msgstr "" +"设置文件描述符 *fd* 的行结束符转写模式。 要将其设为文本模式,则 *flags* 应当为 " +":const:`os.O_TEXT`;设为二进制模式,则应当为 :const:`os.O_BINARY`。" + +#: ../../library/msvcrt.rst:77 +msgid "" +"Create a C runtime file descriptor from the file handle *handle*. The " +"*flags* parameter should be a bitwise OR of :const:`os.O_APPEND`, " +":const:`os.O_RDONLY`, and :const:`os.O_TEXT`. The returned file descriptor " +"may be used as a parameter to :func:`os.fdopen` to create a file object." +msgstr "" +"基于文件句柄 *handle* 创建一个 C 运行时文件描述符。 *flags* 形参应当 :const:`os.O_APPEND`, " +":const:`os.O_RDONLY` 和 :const:`os.O_TEXT` 按位 OR 的结果。 返回的文件描述符可以被用作 " +":func:`os.fdopen` 的形参以创建一个文件对象。" + +#: ../../library/msvcrt.rst:82 +msgid "" +"Raises an :ref:`auditing event ` ``msvcrt.open_osfhandle`` with " +"arguments ``handle``, ``flags``." +msgstr "" +"引发一个 :ref:`审计事件 ` ``msvcrt.open_osfhandle`` 并附带参数 ``handle``, " +"``flags``。" + +#: ../../library/msvcrt.rst:87 +msgid "" +"Return the file handle for the file descriptor *fd*. Raises :exc:`OSError` " +"if *fd* is not recognized." +msgstr "返回文件描述符 *fd* 的文件句柄。 如果 *fd* 不能被识别则会引发 :exc:`OSError`。" + +#: ../../library/msvcrt.rst:90 +msgid "" +"Raises an :ref:`auditing event ` ``msvcrt.get_osfhandle`` with " +"argument ``fd``." +msgstr "引发一个 :ref:`审计事件 ` ``msvcrt.get_osfhandle`` 并附带参数 ``fd``。" + +#: ../../library/msvcrt.rst:96 +msgid "Console I/O" +msgstr "控制台 I/O" + +#: ../../library/msvcrt.rst:101 +msgid "Return ``True`` if a keypress is waiting to be read." +msgstr "如果有某个按键正在等待被读取则返回 ``True``。" + +#: ../../library/msvcrt.rst:106 +msgid "" +"Read a keypress and return the resulting character as a byte string. Nothing" +" is echoed to the console. This call will block if a keypress is not " +"already available, but will not wait for :kbd:`Enter` to be pressed. If the " +"pressed key was a special function key, this will return ``'\\000'`` or " +"``'\\xe0'``; the next call will return the keycode. The :kbd:`Control-C` " +"keypress cannot be read with this function." +msgstr "" +"读取一个按键并将结果字符返回为一个字节串。 不会有内容回显到缝制台。 如果还没有任何键被按下此调用将会阻塞,但它将不会等待 :kbd:`Enter` " +"被按下。 如果按下的键是一个特殊功能键,此函数将返回 ``'\\000'`` 或 ``'\\xe0'``;下一次调用将返回键代码。 " +":kbd:`Control-C` 按钮无法使用此函数来读取。" + +#: ../../library/msvcrt.rst:116 +msgid "Wide char variant of :func:`getch`, returning a Unicode value." +msgstr ":func:`getch` 的宽字符版本,返回一个 Unicode 值。" + +#: ../../library/msvcrt.rst:121 +msgid "" +"Similar to :func:`getch`, but the keypress will be echoed if it represents " +"a printable character." +msgstr "类似于 :func:`getch`,但按键如果表示一个可打印字符则它将被回显。" + +#: ../../library/msvcrt.rst:127 +msgid "Wide char variant of :func:`getche`, returning a Unicode value." +msgstr ":func:`getche` 的宽字符版本,返回一个 Unicode 值。" + +#: ../../library/msvcrt.rst:132 +msgid "Print the byte string *char* to the console without buffering." +msgstr "将字符串 *char* 打印到终端,不使用缓冲区。" + +#: ../../library/msvcrt.rst:137 +msgid "Wide char variant of :func:`putch`, accepting a Unicode value." +msgstr ":func:`putch` 的宽字符版本,接受一个 Unicode 值。" + +#: ../../library/msvcrt.rst:142 +msgid "" +"Cause the byte string *char* to be \"pushed back\" into the console buffer; " +"it will be the next character read by :func:`getch` or :func:`getche`." +msgstr "使得字节串 *char* 被“推回”终端缓冲区;它将是被 :func:`getch` 或 :func:`getche` 读取的下一个字符。" + +#: ../../library/msvcrt.rst:148 +msgid "Wide char variant of :func:`ungetch`, accepting a Unicode value." +msgstr ":func:`ungetch` 的宽字符版本,接受一个 Unicode 值。" + +#: ../../library/msvcrt.rst:154 +msgid "Other Functions" +msgstr "其他函数" + +#: ../../library/msvcrt.rst:159 +msgid "" +"Force the :c:func:`malloc` heap to clean itself up and return unused blocks " +"to the operating system. On failure, this raises :exc:`OSError`." +msgstr "强制 :c:func:`malloc` 堆清空自身并将未使用的块返回给操作系统。 失败时,这将引发 :exc:`OSError`。" diff --git a/library/multiprocessing.po b/library/multiprocessing.po new file mode 100644 index 000000000..c64b64dfa --- /dev/null +++ b/library/multiprocessing.po @@ -0,0 +1,3741 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) 2001-2024, Python Software Foundation +# This file is distributed under the same license as the Python package. +# FIRST AUTHOR , YEAR. +# +# Translators: +# Fei Yin , 2018 +# ppcfish , 2019 +# walkinrain , 2019 +# 叶浚安 , 2019 +# Liying Yang , 2019 +# Zombie110year , 2019 +# kevin wong , 2020 +# zeroswan , 2020 +# Alpha Du , 2022 +# Nyuan Zhang, 2023 +# Rafael Fontenelle , 2024 +# Freesand Leo , 2024 +# +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: Python 3.9\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2024-06-07 16:31+0000\n" +"PO-Revision-Date: 2017-02-16 23:19+0000\n" +"Last-Translator: Freesand Leo , 2024\n" +"Language-Team: Chinese (China) (https://app.transifex.com/python-doc/teams/5390/zh_CN/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: zh_CN\n" +"Plural-Forms: nplurals=1; plural=0;\n" + +#: ../../library/multiprocessing.rst:2 +msgid ":mod:`multiprocessing` --- Process-based parallelism" +msgstr ":mod:`multiprocessing` --- 基于进程的并行" + +#: ../../library/multiprocessing.rst:7 +msgid "**Source code:** :source:`Lib/multiprocessing/`" +msgstr "**源代码** :source:`Lib/multiprocessing/`" + +#: ../../library/multiprocessing.rst:12 +msgid "Introduction" +msgstr "概述" + +#: ../../library/multiprocessing.rst:14 +msgid "" +":mod:`multiprocessing` is a package that supports spawning processes using " +"an API similar to the :mod:`threading` module. The :mod:`multiprocessing` " +"package offers both local and remote concurrency, effectively side-stepping " +"the :term:`Global Interpreter Lock ` by using " +"subprocesses instead of threads. Due to this, the :mod:`multiprocessing` " +"module allows the programmer to fully leverage multiple processors on a " +"given machine. It runs on both Unix and Windows." +msgstr "" +":mod:`multiprocessing` 是一个支持使用与 :mod:`threading` 模块类似的 API 来产生进程的包。 " +":mod:`multiprocessing` 包同时提供了本地和远程并发操作,通过使用子进程而非线程有效地绕过了 :term:`全局解释器锁 " +"`。 因此,:mod:`multiprocessing` " +"模块允许程序员充分利用给定机器上的多个处理器。 它在 Unix 和 Windows 上均可运行。" + +#: ../../library/multiprocessing.rst:23 +msgid "" +"The :mod:`multiprocessing` module also introduces APIs which do not have " +"analogs in the :mod:`threading` module. A prime example of this is the " +":class:`~multiprocessing.pool.Pool` object which offers a convenient means " +"of parallelizing the execution of a function across multiple input values, " +"distributing the input data across processes (data parallelism). The " +"following example demonstrates the common practice of defining such " +"functions in a module so that child processes can successfully import that " +"module. This basic example of data parallelism using " +":class:`~multiprocessing.pool.Pool`, ::" +msgstr "" +":mod:`multiprocessing` 模块还引入了在 :mod:`threading` 模块中没有的API。一个主要的例子就是 " +":class:`~multiprocessing.pool.Pool` " +"对象,它提供了一种快捷的方法,赋予函数并行化处理一系列输入值的能力,可以将输入数据分配给不同进程处理(数据并行)。下面的例子演示了在模块中定义此类函数的常见做法,以便子进程可以成功导入该模块。这个数据并行的基本例子使用了" +" :class:`~multiprocessing.pool.Pool` , ::" + +#: ../../library/multiprocessing.rst:41 +msgid "will print to standard output ::" +msgstr "将在标准输出中打印 ::" + +#: ../../library/multiprocessing.rst:47 +msgid "The :class:`Process` class" +msgstr ":class:`Process` 类" + +#: ../../library/multiprocessing.rst:49 +msgid "" +"In :mod:`multiprocessing`, processes are spawned by creating a " +":class:`Process` object and then calling its :meth:`~Process.start` method." +" :class:`Process` follows the API of :class:`threading.Thread`. A trivial " +"example of a multiprocess program is ::" +msgstr "" +"在 :mod:`multiprocessing` 中,通过创建一个 :class:`Process` 对象然后调用它的 " +":meth:`~process.start` 方法来生成进程。 :class:`Process` 和 :class:`threading.Thread`" +" API 相同。 一个简单的多进程程序示例是::" + +#: ../../library/multiprocessing.rst:64 +msgid "" +"To show the individual process IDs involved, here is an expanded example::" +msgstr "要显示所涉及的各个进程ID,这是一个扩展示例::" + +#: ../../library/multiprocessing.rst:85 +msgid "" +"For an explanation of why the ``if __name__ == '__main__'`` part is " +"necessary, see :ref:`multiprocessing-programming`." +msgstr "" +"关于为什么 ``if __name__ == '__main__'`` 部分是必需的解释,请参见 :ref:`multiprocessing-" +"programming`。" + +#: ../../library/multiprocessing.rst:91 +msgid "Contexts and start methods" +msgstr "上下文和启动方法" + +#: ../../library/multiprocessing.rst:95 +msgid "" +"Depending on the platform, :mod:`multiprocessing` supports three ways to " +"start a process. These *start methods* are" +msgstr "根据不同的平台, :mod:`multiprocessing` 支持三种启动进程的方法。这些 *启动方法* 有" + +#: ../../library/multiprocessing.rst:106 +msgid "*spawn*" +msgstr "*spawn*" + +#: ../../library/multiprocessing.rst:99 +msgid "" +"The parent process starts a fresh python interpreter process. The child " +"process will only inherit those resources necessary to run the process " +"object's :meth:`~Process.run` method. In particular, unnecessary file " +"descriptors and handles from the parent process will not be inherited. " +"Starting a process using this method is rather slow compared to using *fork*" +" or *forkserver*." +msgstr "" +"父进程会启动一个全新的 python 解释器进程。 子进程将只继承那些运行进程对象的 :meth:`~Process.run` 方法所必需的资源。 " +"特别地,来自父进程的非必需文件描述符和句柄将不会被继承。 使用此方法启动进程相比使用 *fork* 或 *forkserver* 要慢上许多。" + +#: ../../library/multiprocessing.rst:106 +msgid "Available on Unix and Windows. The default on Windows and macOS." +msgstr "可在 Unix 和 Windows 上使用。 Windows 和 macOS 上的默认设置。" + +#: ../../library/multiprocessing.rst:115 +msgid "*fork*" +msgstr "*fork*" + +#: ../../library/multiprocessing.rst:109 +msgid "" +"The parent process uses :func:`os.fork` to fork the Python interpreter. The" +" child process, when it begins, is effectively identical to the parent " +"process. All resources of the parent are inherited by the child process. " +"Note that safely forking a multithreaded process is problematic." +msgstr "" +"父进程使用 :func:`os.fork` 来产生 Python " +"解释器分叉。子进程在开始时实际上与父进程相同。父进程的所有资源都由子进程继承。请注意,安全分叉多线程进程是棘手的。" + +#: ../../library/multiprocessing.rst:115 +msgid "Available on Unix only. The default on Unix." +msgstr "只存在于 Unix。 Unix 中的默认值。" + +#: ../../library/multiprocessing.rst:126 +msgid "*forkserver*" +msgstr "*forkserver*" + +#: ../../library/multiprocessing.rst:118 +msgid "" +"When the program starts and selects the *forkserver* start method, a server " +"process is started. From then on, whenever a new process is needed, the " +"parent process connects to the server and requests that it fork a new " +"process. The fork server process is single threaded so it is safe for it to" +" use :func:`os.fork`. No unnecessary resources are inherited." +msgstr "" +"程序启动并选择 *forkserver* 启动方法时,将启动服务器进程。 从那时起,每当需要一个新进程时,父进程就会连接到服务器并请求它分叉一个新进程。" +" 分叉服务器进程是单线程的,因此使用 :func:`os.fork` 是安全的。 没有不必要的资源被继承。" + +#: ../../library/multiprocessing.rst:125 +msgid "" +"Available on Unix platforms which support passing file descriptors over Unix" +" pipes." +msgstr "可在Unix平台上使用,支持通过Unix管道传递文件描述符。" + +#: ../../library/multiprocessing.rst:130 +#: ../../library/multiprocessing.rst:1044 +msgid "" +"On macOS, the *spawn* start method is now the default. The *fork* start " +"method should be considered unsafe as it can lead to crashes of the " +"subprocess. See :issue:`33725`." +msgstr "" +"对于 macOS,*spawn* 启动方式是默认方式。 因为 *fork* 可能导致subprocess崩溃,被认为是不安全的,查看 " +":issue:`33725` 。" + +#: ../../library/multiprocessing.rst:134 +msgid "" +"*spawn* added on all unix platforms, and *forkserver* added for some unix " +"platforms. Child processes no longer inherit all of the parents inheritable " +"handles on Windows." +msgstr "" +"在所有unix平台上添加支持了 *spawn* ,并且为一些unix平台添加了 *forkserver* " +"。在Windows上子进程不再继承所有可继承的父进程句柄。" + +#: ../../library/multiprocessing.rst:140 +msgid "" +"On Unix using the *spawn* or *forkserver* start methods will also start a " +"*resource tracker* process which tracks the unlinked named system resources " +"(such as named semaphores or " +":class:`~multiprocessing.shared_memory.SharedMemory` objects) created by " +"processes of the program. When all processes have exited the resource " +"tracker unlinks any remaining tracked object. Usually there should be none, " +"but if a process was killed by a signal there may be some \"leaked\" " +"resources. (Neither leaked semaphores nor shared memory segments will be " +"automatically unlinked until the next reboot. This is problematic for both " +"objects because the system allows only a limited number of named semaphores," +" and shared memory segments occupy some space in the main memory.)" +msgstr "" +"在 Unix 上通过 *spawn* 和 *forkserver* 方式启动多进程会同时启动一个 *资源追踪* " +"进程,负责追踪当前程序的进程产生的、并且不再被使用的命名系统资源(如命名信号量以及 " +":class:`~multiprocessing.shared_memory.SharedMemory` " +"对象)。当所有进程退出后,资源追踪会负责释放这些仍被追踪的的对象。通常情况下是不会有这种对象的,但是假如一个子进程被某个信号杀死,就可能存在这一类资源的“泄露”情况。(泄露的信号量以及共享内存不会被释放,直到下一次系统重启,对于这两类资源来说,这是一个比较大的问题,因为操作系统允许的命名信号量的数量是有限的,而共享内存也会占据主内存的一片空间)" + +#: ../../library/multiprocessing.rst:153 +msgid "" +"To select a start method you use the :func:`set_start_method` in the ``if " +"__name__ == '__main__'`` clause of the main module. For example::" +msgstr "" +"要选择一个启动方法,你应该在主模块的 ``if __name__ == '__main__'`` 子句中调用 " +":func:`set_start_method` 。例如:" + +#: ../../library/multiprocessing.rst:170 +msgid "" +":func:`set_start_method` should not be used more than once in the program." +msgstr "在程序中 :func:`set_start_method` 不应该被多次调用。" + +#: ../../library/multiprocessing.rst:173 +msgid "" +"Alternatively, you can use :func:`get_context` to obtain a context object. " +"Context objects have the same API as the multiprocessing module, and allow " +"one to use multiple start methods in the same program. ::" +msgstr "" +"或者,你可以使用 :func:`get_context` 来获取上下文对象。上下文对象与 multiprocessing " +"模块具有相同的API,并允许在同一程序中使用多种启动方法。::" + +#: ../../library/multiprocessing.rst:191 +msgid "" +"Note that objects related to one context may not be compatible with " +"processes for a different context. In particular, locks created using the " +"*fork* context cannot be passed to processes started using the *spawn* or " +"*forkserver* start methods." +msgstr "" +"请注意,对象在不同上下文创建的进程间可能并不兼容。 特别是,使用 *fork* 上下文创建的锁不能传递给使用 *spawn* 或 " +"*forkserver* 启动方法启动的进程。" + +#: ../../library/multiprocessing.rst:196 +msgid "" +"A library which wants to use a particular start method should probably use " +":func:`get_context` to avoid interfering with the choice of the library " +"user." +msgstr "想要使用特定启动方法的库应该使用 :func:`get_context` 以避免干扰库用户的选择。" + +#: ../../library/multiprocessing.rst:202 +msgid "" +"The ``'spawn'`` and ``'forkserver'`` start methods cannot currently be used " +"with \"frozen\" executables (i.e., binaries produced by packages like " +"**PyInstaller** and **cx_Freeze**) on Unix. The ``'fork'`` start method does" +" work." +msgstr "" +"``'spawn'`` 和 ``'forkserver'`` 启动方法当前不能在Unix上和“冻结的”可执行内容一同使用(例如,有类似 " +"**PyInstaller** 和 **cx_Freeze** 的包产生的二进制文件)。 ``'fork'`` 启动方法可以使用。" + +#: ../../library/multiprocessing.rst:209 +msgid "Exchanging objects between processes" +msgstr "在进程之间交换对象" + +#: ../../library/multiprocessing.rst:211 +msgid "" +":mod:`multiprocessing` supports two types of communication channel between " +"processes:" +msgstr ":mod:`multiprocessing` 支持进程之间的两种通信通道:" + +#: ../../library/multiprocessing.rst:214 +msgid "**Queues**" +msgstr "**队列**" + +#: ../../library/multiprocessing.rst:216 +msgid "" +"The :class:`Queue` class is a near clone of :class:`queue.Queue`. For " +"example::" +msgstr ":class:`Queue` 类是一个近似 :class:`queue.Queue` 的克隆。 例如::" + +#: ../../library/multiprocessing.rst:231 +msgid "Queues are thread and process safe." +msgstr "队列是线程和进程安全的。" + +#: ../../library/multiprocessing.rst:233 +msgid "**Pipes**" +msgstr "**管道**" + +#: ../../library/multiprocessing.rst:235 +msgid "" +"The :func:`Pipe` function returns a pair of connection objects connected by " +"a pipe which by default is duplex (two-way). For example::" +msgstr ":func:`Pipe` 函数返回一个由管道连接的连接对象,默认情况下是双工(双向)。例如::" + +#: ../../library/multiprocessing.rst:251 +msgid "" +"The two connection objects returned by :func:`Pipe` represent the two ends " +"of the pipe. Each connection object has :meth:`~Connection.send` and " +":meth:`~Connection.recv` methods (among others). Note that data in a pipe " +"may become corrupted if two processes (or threads) try to read from or write" +" to the *same* end of the pipe at the same time. Of course there is no risk" +" of corruption from processes using different ends of the pipe at the same " +"time." +msgstr "" +"返回的两个连接对象 :func:`Pipe` 表示管道的两端。每个连接对象都有 :meth:`~Connection.send` 和 " +":meth:`~Connection.recv` 方法(相互之间的)。请注意,如果两个进程(或线程)同时尝试读取或写入管道的 *同一* " +"端,则管道中的数据可能会损坏。当然,在不同进程中同时使用管道的不同端的情况下不存在损坏的风险。" + +#: ../../library/multiprocessing.rst:261 +msgid "Synchronization between processes" +msgstr "进程间同步" + +#: ../../library/multiprocessing.rst:263 +msgid "" +":mod:`multiprocessing` contains equivalents of all the synchronization " +"primitives from :mod:`threading`. For instance one can use a lock to ensure" +" that only one process prints to standard output at a time::" +msgstr "" +":mod:`multiprocessing` 包含来自 :mod:`threading` " +"的所有同步原语的等价物。例如,可以使用锁来确保一次只有一个进程打印到标准输出::" + +#: ../../library/multiprocessing.rst:282 +msgid "" +"Without using the lock output from the different processes is liable to get " +"all mixed up." +msgstr "不使用锁的情况下,来自于多进程的输出很容易产生混淆。" + +#: ../../library/multiprocessing.rst:287 +msgid "Sharing state between processes" +msgstr "进程间共享状态" + +#: ../../library/multiprocessing.rst:289 +msgid "" +"As mentioned above, when doing concurrent programming it is usually best to " +"avoid using shared state as far as possible. This is particularly true when" +" using multiple processes." +msgstr "如上所述,在进行并发编程时,通常最好尽量避免使用共享状态。使用多个进程时尤其如此。" + +#: ../../library/multiprocessing.rst:293 +msgid "" +"However, if you really do need to use some shared data then " +":mod:`multiprocessing` provides a couple of ways of doing so." +msgstr "但是,如果你真的需要使用一些共享数据,那么 :mod:`multiprocessing` 提供了两种方法。" + +#: ../../library/multiprocessing.rst:296 +msgid "**Shared memory**" +msgstr "**共享内存**" + +#: ../../library/multiprocessing.rst:298 +msgid "" +"Data can be stored in a shared memory map using :class:`Value` or " +":class:`Array`. For example, the following code ::" +msgstr "可以使用 :class:`Value` 或 :class:`Array` 将数据存储在共享内存映射中。例如,以下代码::" + +#: ../../library/multiprocessing.rst:319 ../../library/multiprocessing.rst:365 +msgid "will print ::" +msgstr "将打印 ::" + +#: ../../library/multiprocessing.rst:324 +msgid "" +"The ``'d'`` and ``'i'`` arguments used when creating ``num`` and ``arr`` are" +" typecodes of the kind used by the :mod:`array` module: ``'d'`` indicates a " +"double precision float and ``'i'`` indicates a signed integer. These shared" +" objects will be process and thread-safe." +msgstr "" +"创建 ``num`` 和 ``arr`` 时使用的 ``'d'`` 和 ``'i'`` 参数是 :mod:`array` 模块使用的类型的 " +"typecode : ``'d'`` 表示双精度浮点数, ``'i'`` 表示有符号整数。这些共享对象将是进程和线程安全的。" + +#: ../../library/multiprocessing.rst:329 +msgid "" +"For more flexibility in using shared memory one can use the " +":mod:`multiprocessing.sharedctypes` module which supports the creation of " +"arbitrary ctypes objects allocated from shared memory." +msgstr "" +"为了更灵活地使用共享内存,可以使用 :mod:`multiprocessing.sharedctypes` " +"模块,该模块支持创建从共享内存分配的任意ctypes对象。" + +#: ../../library/multiprocessing.rst:333 +msgid "**Server process**" +msgstr "**服务进程**" + +#: ../../library/multiprocessing.rst:335 +msgid "" +"A manager object returned by :func:`Manager` controls a server process which" +" holds Python objects and allows other processes to manipulate them using " +"proxies." +msgstr "由 :func:`Manager` 返回的管理器对象控制一个服务进程,该进程保存Python对象并允许其他进程使用代理操作它们。" + +#: ../../library/multiprocessing.rst:339 +msgid "" +"A manager returned by :func:`Manager` will support types :class:`list`, " +":class:`dict`, :class:`~managers.Namespace`, :class:`Lock`, :class:`RLock`, " +":class:`Semaphore`, :class:`BoundedSemaphore`, :class:`Condition`, " +":class:`Event`, :class:`Barrier`, :class:`Queue`, :class:`Value` and " +":class:`Array`. For example, ::" +msgstr "" +":func:`Manager` 返回的管理器支持类型: :class:`list` 、 :class:`dict` 、 " +":class:`~managers.Namespace` 、 :class:`Lock` 、 :class:`RLock` 、 " +":class:`Semaphore` 、 :class:`BoundedSemaphore` 、 :class:`Condition` 、 " +":class:`Event` 、 :class:`Barrier` 、 :class:`Queue` 、 :class:`Value` 和 " +":class:`Array` 。例如 ::" + +#: ../../library/multiprocessing.rst:370 +msgid "" +"Server process managers are more flexible than using shared memory objects " +"because they can be made to support arbitrary object types. Also, a single " +"manager can be shared by processes on different computers over a network. " +"They are, however, slower than using shared memory." +msgstr "" +"使用服务进程的管理器比使用共享内存对象更灵活,因为它们可以支持任意对象类型。此外,单个管理器可以通过网络由不同计算机上的进程共享。但是,它们比使用共享内存慢。" + +#: ../../library/multiprocessing.rst:377 +msgid "Using a pool of workers" +msgstr "使用工作进程" + +#: ../../library/multiprocessing.rst:379 +msgid "" +"The :class:`~multiprocessing.pool.Pool` class represents a pool of worker " +"processes. It has methods which allows tasks to be offloaded to the worker " +"processes in a few different ways." +msgstr "" +":class:`~multiprocessing.pool.Pool` 类表示一个工作进程池。它具有允许以几种不同方式将任务分配到工作进程的方法。" + +#: ../../library/multiprocessing.rst:383 +msgid "For example::" +msgstr "例如:" + +#: ../../library/multiprocessing.rst:427 +msgid "" +"Note that the methods of a pool should only ever be used by the process " +"which created it." +msgstr "请注意,进程池的方法只能由创建它的进程使用。" + +#: ../../library/multiprocessing.rst:432 +msgid "" +"Functionality within this package requires that the ``__main__`` module be " +"importable by the children. This is covered in :ref:`multiprocessing-" +"programming` however it is worth pointing out here. This means that some " +"examples, such as the :class:`multiprocessing.pool.Pool` examples will not " +"work in the interactive interpreter. For example::" +msgstr "" +"这个包中的功能要求子进程可以导入 ``__main__`` 模块。虽然这在 :ref:`multiprocessing-programming` " +"中有描述,但还是需要提前说明一下。这意味着一些示例在交互式解释器中不起作用,比如 :class:`multiprocessing.pool.Pool` " +"示例。例如::" + +#: ../../library/multiprocessing.rst:455 +msgid "" +"(If you try this it will actually output three full tracebacks interleaved " +"in a semi-random fashion, and then you may have to stop the parent process " +"somehow.)" +msgstr "(如果尝试执行上面的代码,它会以一种半随机的方式将三个完整的堆栈内容交替输出,然后你只能以某种方式停止父进程。)" + +#: ../../library/multiprocessing.rst:461 +msgid "Reference" +msgstr "参考" + +#: ../../library/multiprocessing.rst:463 +msgid "" +"The :mod:`multiprocessing` package mostly replicates the API of the " +":mod:`threading` module." +msgstr ":mod:`multiprocessing` 包主要复制了 :mod:`threading` 模块的API。" + +#: ../../library/multiprocessing.rst:468 +msgid ":class:`Process` and exceptions" +msgstr ":class:`Process` 和异常" + +#: ../../library/multiprocessing.rst:473 +msgid "" +"Process objects represent activity that is run in a separate process. The " +":class:`Process` class has equivalents of all the methods of " +":class:`threading.Thread`." +msgstr "" +"进程对象表示在单独进程中运行的活动。 :class:`Process` 类拥有和 :class:`threading.Thread` 等价的大部分方法。" + +#: ../../library/multiprocessing.rst:477 +msgid "" +"The constructor should always be called with keyword arguments. *group* " +"should always be ``None``; it exists solely for compatibility with " +":class:`threading.Thread`. *target* is the callable object to be invoked by" +" the :meth:`run()` method. It defaults to ``None``, meaning nothing is " +"called. *name* is the process name (see :attr:`name` for more details). " +"*args* is the argument tuple for the target invocation. *kwargs* is a " +"dictionary of keyword arguments for the target invocation. If provided, the" +" keyword-only *daemon* argument sets the process :attr:`daemon` flag to " +"``True`` or ``False``. If ``None`` (the default), this flag will be " +"inherited from the creating process." +msgstr "" +"应始终使用关键字参数调用构造函数。 *group* 应该始终是 ``None`` ;它仅用于兼容 :class:`threading.Thread` 。" +" *target* 是由 :meth:`run()` 方法调用的可调用对象。它默认为 ``None`` ,意味着什么都没有被调用。 *name* " +"是进程名称(有关详细信息,请参阅 :attr:`name` )。 *args* 是目标调用的参数元组。 *kwargs* " +"是目标调用的关键字参数字典。如果提供,则键参数 *daemon* 将进程 :attr:`daemon` 标志设置为 ``True`` 或 " +"``False`` 。如果是 ``None`` (默认值),则该标志将从创建的进程继承。" + +#: ../../library/multiprocessing.rst:488 +msgid "By default, no arguments are passed to *target*." +msgstr "默认情况下,不会将任何参数传递给 *target* 。" + +#: ../../library/multiprocessing.rst:490 +msgid "" +"If a subclass overrides the constructor, it must make sure it invokes the " +"base class constructor (:meth:`Process.__init__`) before doing anything else" +" to the process." +msgstr "如果子类重写构造函数,它必须确保它在对进程执行任何其他操作之前调用基类构造函数( :meth:`Process.__init__` )。" + +#: ../../library/multiprocessing.rst:494 +msgid "Added the *daemon* argument." +msgstr "加入 *daemon* 参数。" + +#: ../../library/multiprocessing.rst:499 +msgid "Method representing the process's activity." +msgstr "表示进程活动的方法。" + +#: ../../library/multiprocessing.rst:501 +msgid "" +"You may override this method in a subclass. The standard :meth:`run` method" +" invokes the callable object passed to the object's constructor as the " +"target argument, if any, with sequential and keyword arguments taken from " +"the *args* and *kwargs* arguments, respectively." +msgstr "" +"你可以在子类中重写此方法。标准 :meth:`run` 方法调用传递给对象构造函数的可调用对象作为目标参数(如果有),分别从 *args* 和 " +"*kwargs* 参数中获取顺序和关键字参数。" + +#: ../../library/multiprocessing.rst:508 +msgid "Start the process's activity." +msgstr "启动进程活动。" + +#: ../../library/multiprocessing.rst:510 +msgid "" +"This must be called at most once per process object. It arranges for the " +"object's :meth:`run` method to be invoked in a separate process." +msgstr "这个方法每个进程对象最多只能调用一次。它会将对象的 :meth:`run` 方法安排在一个单独的进程中调用。" + +#: ../../library/multiprocessing.rst:515 +msgid "" +"If the optional argument *timeout* is ``None`` (the default), the method " +"blocks until the process whose :meth:`join` method is called terminates. If " +"*timeout* is a positive number, it blocks at most *timeout* seconds. Note " +"that the method returns ``None`` if its process terminates or if the method " +"times out. Check the process's :attr:`exitcode` to determine if it " +"terminated." +msgstr "" +"如果可选参数 *timeout* 是 ``None`` (默认值),则该方法将阻塞,直到调用 :meth:`join` 方法的进程终止。如果 " +"*timeout* 是一个正数,它最多会阻塞 *timeout* 秒。请注意,如果进程终止或方法超时,则该方法返回 ``None`` 。检查进程的 " +":attr:`exitcode` 以确定它是否终止。" + +#: ../../library/multiprocessing.rst:522 +msgid "A process can be joined many times." +msgstr "一个进程可以被 join 多次。" + +#: ../../library/multiprocessing.rst:524 +msgid "" +"A process cannot join itself because this would cause a deadlock. It is an " +"error to attempt to join a process before it has been started." +msgstr "进程无法join自身,因为这会导致死锁。尝试在启动进程之前join进程是错误的。" + +#: ../../library/multiprocessing.rst:529 +msgid "" +"The process's name. The name is a string used for identification purposes " +"only. It has no semantics. Multiple processes may be given the same name." +msgstr "进程的名称。该名称是一个字符串,仅用于识别目的。它没有语义。可以为多个进程指定相同的名称。" + +#: ../../library/multiprocessing.rst:533 +msgid "" +"The initial name is set by the constructor. If no explicit name is provided" +" to the constructor, a name of the form 'Process-N\\ :sub:`1`:N\\ " +":sub:`2`:...:N\\ :sub:`k`' is constructed, where each N\\ :sub:`k` is the " +"N-th child of its parent." +msgstr "" +"初始名称由构造器设定。 如果没有为构造器提供显式名称,则会构造一个形式为 'Process-N\\ :sub:`1`:N\\ " +":sub:`2`:...:N\\ :sub:`k`' 的名称,其中每个 N\\ :sub:`k` 是其父亲的第 N 个孩子。" + +#: ../../library/multiprocessing.rst:540 +msgid "Return whether the process is alive." +msgstr "返回进程是否还活着。" + +#: ../../library/multiprocessing.rst:542 +msgid "" +"Roughly, a process object is alive from the moment the :meth:`start` method " +"returns until the child process terminates." +msgstr "粗略地说,从 :meth:`start` 方法返回到子进程终止之前,进程对象仍处于活动状态。" + +#: ../../library/multiprocessing.rst:547 +msgid "" +"The process's daemon flag, a Boolean value. This must be set before " +":meth:`start` is called." +msgstr "进程的守护标志,一个布尔值。这必须在 :meth:`start` 被调用之前设置。" + +#: ../../library/multiprocessing.rst:550 +msgid "The initial value is inherited from the creating process." +msgstr "初始值继承自创建进程。" + +#: ../../library/multiprocessing.rst:552 +msgid "" +"When a process exits, it attempts to terminate all of its daemonic child " +"processes." +msgstr "当进程退出时,它会尝试终止其所有守护进程子进程。" + +#: ../../library/multiprocessing.rst:555 +msgid "" +"Note that a daemonic process is not allowed to create child processes. " +"Otherwise a daemonic process would leave its children orphaned if it gets " +"terminated when its parent process exits. Additionally, these are **not** " +"Unix daemons or services, they are normal processes that will be terminated " +"(and not joined) if non-daemonic processes have exited." +msgstr "" +"请注意,不允许在守护进程中创建子进程。这是因为当守护进程由于父进程退出而中断时,其子进程会变成孤儿进程。 另外,这些 **不是** Unix " +"守护进程或服务,它们是正常进程,如果非守护进程已经退出,它们将被终止(并且不被合并)。" + +#: ../../library/multiprocessing.rst:561 +msgid "" +"In addition to the :class:`threading.Thread` API, :class:`Process` objects " +"also support the following attributes and methods:" +msgstr "除了 :class:`threading.Thread` API ,:class:`Process` 对象还支持以下属性和方法:" + +#: ../../library/multiprocessing.rst:566 +msgid "" +"Return the process ID. Before the process is spawned, this will be " +"``None``." +msgstr "返回进程ID。在生成该进程之前,这将是 ``None`` 。" + +#: ../../library/multiprocessing.rst:571 +msgid "" +"The child's exit code. This will be ``None`` if the process has not yet " +"terminated." +msgstr "子进程的退出代码。如果该进程尚未终止则为 ``None`` 。" + +#: ../../library/multiprocessing.rst:574 +msgid "" +"If the child's :meth:`run` method returned normally, the exit code will be " +"0. If it terminated via :func:`sys.exit` with an integer argument *N*, the " +"exit code will be *N*." +msgstr "" +"如果子进程的 :meth:`run` 方法正常返回,退出代码将是 0 。 如果它通过 :func:`sys.exit` 终止,并有一个整数参数 *N* " +",退出代码将是 *N* 。" + +#: ../../library/multiprocessing.rst:578 +msgid "" +"If the child terminated due to an exception not caught within :meth:`run`, " +"the exit code will be 1. If it was terminated by signal *N*, the exit code " +"will be the negative value *-N*." +msgstr "" +"如果子进程由于在 :meth:`run` 内的未捕获异常而终止,退出代码将是 1 。 如果它是由信号 *N* 终止的,退出代码将是负值 *-N* 。" + +#: ../../library/multiprocessing.rst:584 +msgid "The process's authentication key (a byte string)." +msgstr "进程的身份验证密钥(字节字符串)。" + +#: ../../library/multiprocessing.rst:586 +msgid "" +"When :mod:`multiprocessing` is initialized the main process is assigned a " +"random string using :func:`os.urandom`." +msgstr "当 :mod:`multiprocessing` 初始化时,主进程使用 :func:`os.urandom` 分配一个随机字符串。" + +#: ../../library/multiprocessing.rst:589 +msgid "" +"When a :class:`Process` object is created, it will inherit the " +"authentication key of its parent process, although this may be changed by " +"setting :attr:`authkey` to another byte string." +msgstr "" +"当创建 :class:`Process` 对象时,它将继承其父进程的身份验证密钥,尽管可以通过将 :attr:`authkey` " +"设置为另一个字节字符串来更改。" + +#: ../../library/multiprocessing.rst:593 +msgid "See :ref:`multiprocessing-auth-keys`." +msgstr "参见 :ref:`multiprocessing-auth-keys` 。" + +#: ../../library/multiprocessing.rst:597 +msgid "" +"A numeric handle of a system object which will become \"ready\" when the " +"process ends." +msgstr "系统对象的数字句柄,当进程结束时将变为 \"ready\" 。" + +#: ../../library/multiprocessing.rst:600 +msgid "" +"You can use this value if you want to wait on several events at once using " +":func:`multiprocessing.connection.wait`. Otherwise calling :meth:`join()` " +"is simpler." +msgstr "" +"如果要使用 :func:`multiprocessing.connection.wait` 一次等待多个事件,可以使用此值。否则调用 " +":meth:`join()` 更简单。" + +#: ../../library/multiprocessing.rst:604 +msgid "" +"On Windows, this is an OS handle usable with the ``WaitForSingleObject`` and" +" ``WaitForMultipleObjects`` family of API calls. On Unix, this is a file " +"descriptor usable with primitives from the :mod:`select` module." +msgstr "" +"在Windows上,这是一个操作系统句柄,可以与 ``WaitForSingleObject`` 和 " +"``WaitForMultipleObjects`` 系列API调用一起使用。在Unix上,这是一个文件描述符,可以使用来自 :mod:`select`" +" 模块的原语。" + +#: ../../library/multiprocessing.rst:612 +msgid "" +"Terminate the process. On Unix this is done using the ``SIGTERM`` signal; " +"on Windows :c:func:`TerminateProcess` is used. Note that exit handlers and " +"finally clauses, etc., will not be executed." +msgstr "" +"终止进程。 在Unix上,这是使用 ``SIGTERM`` 信号完成的;在Windows上使用 :c:func:`TerminateProcess` 。" +" 请注意,不会执行退出处理程序和finally子句等。" + +#: ../../library/multiprocessing.rst:616 +msgid "" +"Note that descendant processes of the process will *not* be terminated -- " +"they will simply become orphaned." +msgstr "请注意,进程的后代进程将不会被终止 —— 它们将简单地变成孤立的。" + +#: ../../library/multiprocessing.rst:621 +msgid "" +"If this method is used when the associated process is using a pipe or queue " +"then the pipe or queue is liable to become corrupted and may become unusable" +" by other process. Similarly, if the process has acquired a lock or " +"semaphore etc. then terminating it is liable to cause other processes to " +"deadlock." +msgstr "" +"如果在关联进程使用管道或队列时使用此方法,则管道或队列可能会损坏,并可能无法被其他进程使用。类似地,如果进程已获得锁或信号量等,则终止它可能导致其他进程死锁。" + +#: ../../library/multiprocessing.rst:629 +msgid "Same as :meth:`terminate()` but using the ``SIGKILL`` signal on Unix." +msgstr "与 :meth:`terminate()` 相同,但在Unix上使用 ``SIGKILL`` 信号。" + +#: ../../library/multiprocessing.rst:635 +msgid "" +"Close the :class:`Process` object, releasing all resources associated with " +"it. :exc:`ValueError` is raised if the underlying process is still running." +" Once :meth:`close` returns successfully, most other methods and attributes" +" of the :class:`Process` object will raise :exc:`ValueError`." +msgstr "" +"关闭 :class:`Process` 对象,释放与之关联的所有资源。如果底层进程仍在运行,则会引发 :exc:`ValueError` 。一旦 " +":meth:`close` 成功返回, :class:`Process` 对象的大多数其他方法和属性将引发 :exc:`ValueError` 。" + +#: ../../library/multiprocessing.rst:643 +msgid "" +"Note that the :meth:`start`, :meth:`join`, :meth:`is_alive`, " +":meth:`terminate` and :attr:`exitcode` methods should only be called by the " +"process that created the process object." +msgstr "" +"注意 :meth:`start` 、 :meth:`join` 、 :meth:`is_alive` 、 :meth:`terminate` 和 " +":attr:`exitcode` 方法只能由创建进程对象的进程调用。" + +#: ../../library/multiprocessing.rst:647 +msgid "Example usage of some of the methods of :class:`Process`:" +msgstr ":class:`Process` 一些方法的示例用法:" + +#: ../../library/multiprocessing.rst:668 +msgid "The base class of all :mod:`multiprocessing` exceptions." +msgstr "所有 :mod:`multiprocessing` 异常的基类。" + +#: ../../library/multiprocessing.rst:672 +msgid "" +"Exception raised by :meth:`Connection.recv_bytes_into()` when the supplied " +"buffer object is too small for the message read." +msgstr "当提供的缓冲区对象太小而无法读取消息时, :meth:`Connection.recv_bytes_into()` 引发的异常。" + +#: ../../library/multiprocessing.rst:675 +msgid "" +"If ``e`` is an instance of :exc:`BufferTooShort` then ``e.args[0]`` will " +"give the message as a byte string." +msgstr "如果 ``e`` 是一个 :exc:`BufferTooShort` 实例,那么 ``e.args[0]`` 将把消息作为字节字符串给出。" + +#: ../../library/multiprocessing.rst:680 +msgid "Raised when there is an authentication error." +msgstr "出现身份验证错误时引发。" + +#: ../../library/multiprocessing.rst:684 +msgid "Raised by methods with a timeout when the timeout expires." +msgstr "有超时的方法超时时引发。" + +#: ../../library/multiprocessing.rst:687 +msgid "Pipes and Queues" +msgstr "管道和队列" + +#: ../../library/multiprocessing.rst:689 +msgid "" +"When using multiple processes, one generally uses message passing for " +"communication between processes and avoids having to use any synchronization" +" primitives like locks." +msgstr "使用多进程时,一般使用消息机制实现进程间通信,尽可能避免使用同步原语,例如锁。" + +#: ../../library/multiprocessing.rst:693 +msgid "" +"For passing messages one can use :func:`Pipe` (for a connection between two " +"processes) or a queue (which allows multiple producers and consumers)." +msgstr "消息机制包含: :func:`Pipe` (可以用于在两个进程间传递消息),以及队列(能够在多个生产者和消费者之间通信)。" + +#: ../../library/multiprocessing.rst:696 +msgid "" +"The :class:`Queue`, :class:`SimpleQueue` and :class:`JoinableQueue` types " +"are multi-producer, multi-consumer :abbr:`FIFO (first-in, first-out)` queues" +" modelled on the :class:`queue.Queue` class in the standard library. They " +"differ in that :class:`Queue` lacks the :meth:`~queue.Queue.task_done` and " +":meth:`~queue.Queue.join` methods introduced into Python 2.5's " +":class:`queue.Queue` class." +msgstr "" +":class:`Queue`, :class:`SimpleQueue` 以及 :class:`JoinableQueue` " +"都是多生产者,多消费者,并且实现了 :abbr:`FIFO (first-in, first-out)` 的队列类型,其表现与标准库中的 " +":class:`queue.Queue` 类相似。 不同之处在于 :class:`Queue` 缺少标准库的 :class:`queue.Queue`" +" 从 Python 2.5 开始引入的 :meth:`~queue.Queue.task_done` 和 " +":meth:`~queue.Queue.join` 方法。" + +#: ../../library/multiprocessing.rst:703 +msgid "" +"If you use :class:`JoinableQueue` then you **must** call " +":meth:`JoinableQueue.task_done` for each task removed from the queue or else" +" the semaphore used to count the number of unfinished tasks may eventually " +"overflow, raising an exception." +msgstr "" +"如果你使用了 :class:`JoinableQueue` ,那么你 **必须** 对每个已经移出队列的任务调用 " +":meth:`JoinableQueue.task_done`。 不然的话用于统计未完成任务的信号量最终会溢出并抛出异常。" + +#: ../../library/multiprocessing.rst:708 +msgid "" +"Note that one can also create a shared queue by using a manager object -- " +"see :ref:`multiprocessing-managers`." +msgstr "另外还可以通过使用一个管理器对象创建一个共享队列,详见 :ref:`multiprocessing-managers` 。" + +#: ../../library/multiprocessing.rst:713 +msgid "" +":mod:`multiprocessing` uses the usual :exc:`queue.Empty` and " +":exc:`queue.Full` exceptions to signal a timeout. They are not available in" +" the :mod:`multiprocessing` namespace so you need to import them from " +":mod:`queue`." +msgstr "" +":mod:`multiprocessing` 使用了普通的 :exc:`queue.Empty` 和 :exc:`queue.Full` " +"异常去表示超时。 你需要从 :mod:`queue` 中导入它们,因为它们并不在 :mod:`multiprocessing` 的命名空间中。" + +#: ../../library/multiprocessing.rst:720 +msgid "" +"When an object is put on a queue, the object is pickled and a background " +"thread later flushes the pickled data to an underlying pipe. This has some " +"consequences which are a little surprising, but should not cause any " +"practical difficulties -- if they really bother you then you can instead use" +" a queue created with a :ref:`manager `." +msgstr "" +"当一个对象被放入一个队列中时,这个对象首先会被一个后台线程用 pickle 序列化,并将序列化后的数据通过一个底层管道的管道传递到队列中。 " +"这种做法会有点让人惊讶,但一般不会出现什么问题。 如果它们确实妨碍了你,你可以使用一个由管理器 :ref:`manager " +"` 创建的队列替换它。" + +#: ../../library/multiprocessing.rst:727 +msgid "" +"After putting an object on an empty queue there may be an infinitesimal " +"delay before the queue's :meth:`~Queue.empty` method returns :const:`False` " +"and :meth:`~Queue.get_nowait` can return without raising :exc:`queue.Empty`." +msgstr "" +"将一个对象放入一个空队列后,可能需要极小的延迟,队列的方法 :meth:`~Queue.empty`  才会返回 :const:`False` 。而" +" :meth:`~Queue.get_nowait` 可以不抛出 :exc:`queue.Empty` 直接返回。" + +#: ../../library/multiprocessing.rst:732 +msgid "" +"If multiple processes are enqueuing objects, it is possible for the objects " +"to be received at the other end out-of-order. However, objects enqueued by " +"the same process will always be in the expected order with respect to each " +"other." +msgstr "" +"如果有多个进程同时将对象放入队列,那么在队列的另一端接受到的对象可能是无序的。但是由同一个进程放入的多个对象的顺序在另一端输出时总是一样的。" + +#: ../../library/multiprocessing.rst:739 +msgid "" +"If a process is killed using :meth:`Process.terminate` or :func:`os.kill` " +"while it is trying to use a :class:`Queue`, then the data in the queue is " +"likely to become corrupted. This may cause any other process to get an " +"exception when it tries to use the queue later on." +msgstr "" +"如果一个进程在尝试使用 :class:`Queue` 期间被 :meth:`Process.terminate` 或 :func:`os.kill` " +"调用终止了,那么队列中的数据很可能被破坏。 这可能导致其他进程在尝试使用该队列时发生异常。" + +#: ../../library/multiprocessing.rst:746 +msgid "" +"As mentioned above, if a child process has put items on a queue (and it has " +"not used :meth:`JoinableQueue.cancel_join_thread " +"`), then that process will not " +"terminate until all buffered items have been flushed to the pipe." +msgstr "" +"正如刚才提到的,如果一个子进程将一些对象放进队列中 (并且它没有用 :meth:`JoinableQueue.cancel_join_thread " +"` " +"方法),那么这个进程在所有缓冲区的对象被刷新进管道之前,是不会终止的。" + +#: ../../library/multiprocessing.rst:751 +msgid "" +"This means that if you try joining that process you may get a deadlock " +"unless you are sure that all items which have been put on the queue have " +"been consumed. Similarly, if the child process is non-daemonic then the " +"parent process may hang on exit when it tries to join all its non-daemonic " +"children." +msgstr "" +"这意味着,除非你确定所有放入队列中的对象都已经被消费了,否则如果你试图等待这个进程,你可能会陷入死锁中。相似地,如果该子进程不是后台进程,那么父进程可能在试图等待所有非后台进程退出时挂起。" + +#: ../../library/multiprocessing.rst:756 +msgid "" +"Note that a queue created using a manager does not have this issue. See " +":ref:`multiprocessing-programming`." +msgstr "注意用管理器创建的队列不存在这个问题,详见 :ref:`multiprocessing-programming` 。" + +#: ../../library/multiprocessing.rst:759 +msgid "" +"For an example of the usage of queues for interprocess communication see " +":ref:`multiprocessing-examples`." +msgstr "该 :ref:`multiprocessing-examples` 展示了如何使用队列实现进程间通信。" + +#: ../../library/multiprocessing.rst:765 +msgid "" +"Returns a pair ``(conn1, conn2)`` of " +":class:`~multiprocessing.connection.Connection` objects representing the " +"ends of a pipe." +msgstr "" +"返回一对 :class:`~multiprocessing.connection.Connection` 对象 ``(conn1, conn2)`` ," +" 分别表示管道的两端。" + +#: ../../library/multiprocessing.rst:769 +msgid "" +"If *duplex* is ``True`` (the default) then the pipe is bidirectional. If " +"*duplex* is ``False`` then the pipe is unidirectional: ``conn1`` can only be" +" used for receiving messages and ``conn2`` can only be used for sending " +"messages." +msgstr "" +"如果 *duplex* 被置为 ``True`` (默认值),那么该管道是双向的。如果 *duplex* 被置为 ``False`` " +",那么该管道是单向的,即 ``conn1`` 只能用于接收消息,而 ``conn2`` 仅能用于发送消息。" + +#: ../../library/multiprocessing.rst:777 +msgid "" +"Returns a process shared queue implemented using a pipe and a few " +"locks/semaphores. When a process first puts an item on the queue a feeder " +"thread is started which transfers objects from a buffer into the pipe." +msgstr "返回一个使用一个管道和少量锁和信号量实现的共享队列实例。当一个进程将一个对象放进队列中时,一个写入线程会启动并将对象从缓冲区写入管道中。" + +#: ../../library/multiprocessing.rst:781 +msgid "" +"The usual :exc:`queue.Empty` and :exc:`queue.Full` exceptions from the " +"standard library's :mod:`queue` module are raised to signal timeouts." +msgstr "" +"一旦超时,将抛出标准库 :mod:`queue` 模块中常见的异常 :exc:`queue.Empty` 和 :exc:`queue.Full`。" + +#: ../../library/multiprocessing.rst:784 +msgid "" +":class:`Queue` implements all the methods of :class:`queue.Queue` except for" +" :meth:`~queue.Queue.task_done` and :meth:`~queue.Queue.join`." +msgstr "" +"除了 :meth:`~queue.Queue.task_done` 和 :meth:`~queue.Queue.join` " +"之外,:class:`Queue`  实现了标准库类 :class:`queue.Queue` 中所有的方法。" + +#: ../../library/multiprocessing.rst:789 +msgid "" +"Return the approximate size of the queue. Because of " +"multithreading/multiprocessing semantics, this number is not reliable." +msgstr "返回队列的大致长度。由于多线程或者多进程的上下文,这个数字是不可靠的。" + +#: ../../library/multiprocessing.rst:792 +msgid "" +"Note that this may raise :exc:`NotImplementedError` on Unix platforms like " +"macOS where ``sem_getvalue()`` is not implemented." +msgstr "" +"请注意,这可能会在Unix平台上引起 :exc:`NotImplementedError` ,如 macOS ,因为其上没有实现 " +"``sem_getvalue()`` 。" + +#: ../../library/multiprocessing.rst:797 +msgid "" +"Return ``True`` if the queue is empty, ``False`` otherwise. Because of " +"multithreading/multiprocessing semantics, this is not reliable." +msgstr "如果队列是空的,返回 ``True`` ,反之返回 ``False`` 。 由于多线程或多进程的环境,该状态是不可靠的。" + +#: ../../library/multiprocessing.rst:802 +msgid "" +"Return ``True`` if the queue is full, ``False`` otherwise. Because of " +"multithreading/multiprocessing semantics, this is not reliable." +msgstr "如果队列是满的,返回 ``True`` ,反之返回 ``False`` 。 由于多线程或多进程的环境,该状态是不可靠的。" + +#: ../../library/multiprocessing.rst:807 +msgid "" +"Put obj into the queue. If the optional argument *block* is ``True`` (the " +"default) and *timeout* is ``None`` (the default), block if necessary until a" +" free slot is available. If *timeout* is a positive number, it blocks at " +"most *timeout* seconds and raises the :exc:`queue.Full` exception if no free" +" slot was available within that time. Otherwise (*block* is ``False``), put" +" an item on the queue if a free slot is immediately available, else raise " +"the :exc:`queue.Full` exception (*timeout* is ignored in that case)." +msgstr "" +"将 obj 放入队列。如果可选参数 *block* 是 ``True`` (默认值) 而且 *timeout* 是 ``None`` (默认值), " +"将会阻塞当前进程,直到有空的缓冲槽。如果 *timeout* 是正数,将会在阻塞了最多 *timeout* 秒之后还是没有可用的缓冲槽时抛出 " +":exc:`queue.Full`  异常。反之 (*block* 是 ``False`` 时),仅当有可用缓冲槽时才放入对象,否则抛出 " +":exc:`queue.Full` 异常 (在这种情形下 *timeout* 参数会被忽略)。" + +#: ../../library/multiprocessing.rst:816 +msgid "" +"If the queue is closed, :exc:`ValueError` is raised instead of " +":exc:`AssertionError`." +msgstr "如果队列已经关闭,会抛出 :exc:`ValueError` 而不是 :exc:`AssertionError` 。" + +#: ../../library/multiprocessing.rst:822 +msgid "Equivalent to ``put(obj, False)``." +msgstr "相当于 ``put(obj, False)``。" + +#: ../../library/multiprocessing.rst:826 +msgid "" +"Remove and return an item from the queue. If optional args *block* is " +"``True`` (the default) and *timeout* is ``None`` (the default), block if " +"necessary until an item is available. If *timeout* is a positive number, it" +" blocks at most *timeout* seconds and raises the :exc:`queue.Empty` " +"exception if no item was available within that time. Otherwise (block is " +"``False``), return an item if one is immediately available, else raise the " +":exc:`queue.Empty` exception (*timeout* is ignored in that case)." +msgstr "" +"从队列中取出并返回对象。如果可选参数 *block* 是 ``True`` (默认值) 而且 *timeout* 是 ``None`` (默认值), " +"将会阻塞当前进程,直到队列中出现可用的对象。如果 *timeout* 是正数,将会在阻塞了最多 *timeout* 秒之后还是没有可用的对象时抛出 " +":exc:`queue.Empty` 异常。反之 (*block* 是 ``False`` 时),仅当有可用对象能够取出时返回,否则抛出 " +":exc:`queue.Empty` 异常 (在这种情形下 *timeout* 参数会被忽略)。" + +#: ../../library/multiprocessing.rst:834 +msgid "" +"If the queue is closed, :exc:`ValueError` is raised instead of " +":exc:`OSError`." +msgstr "如果队列已经关闭,会抛出 :exc:`ValueError` 而不是 :exc:`OSError` 。" + +#: ../../library/multiprocessing.rst:840 +msgid "Equivalent to ``get(False)``." +msgstr "相当于 ``get(False)`` 。" + +#: ../../library/multiprocessing.rst:842 +msgid "" +":class:`multiprocessing.Queue` has a few additional methods not found in " +":class:`queue.Queue`. These methods are usually unnecessary for most code:" +msgstr "" +":class:`multiprocessing.Queue` 类有一些在 :class:`queue.Queue` " +"类中没有出现的方法。这些方法在大多数情形下并不是必须的。" + +#: ../../library/multiprocessing.rst:848 +msgid "" +"Indicate that no more data will be put on this queue by the current process." +" The background thread will quit once it has flushed all buffered data to " +"the pipe. This is called automatically when the queue is garbage collected." +msgstr "指示当前进程将不会再往队列中放入对象。一旦所有缓冲区中的数据被写入管道之后,后台的线程会退出。这个方法在队列被gc回收时会自动调用。" + +#: ../../library/multiprocessing.rst:855 +msgid "" +"Join the background thread. This can only be used after :meth:`close` has " +"been called. It blocks until the background thread exits, ensuring that all" +" data in the buffer has been flushed to the pipe." +msgstr "" +"等待后台线程。这个方法仅在调用了 :meth:`close` 方法之后可用。这会阻塞当前进程,直到后台线程退出,确保所有缓冲区中的数据都被写入管道中。" + +#: ../../library/multiprocessing.rst:859 +msgid "" +"By default if a process is not the creator of the queue then on exit it will" +" attempt to join the queue's background thread. The process can call " +":meth:`cancel_join_thread` to make :meth:`join_thread` do nothing." +msgstr "" +"默认情况下,如果一个不是队列创建者的进程试图退出,它会尝试等待这个队列的后台线程。这个进程可以使用 " +":meth:`cancel_join_thread` 让 :meth:`join_thread` 方法什么都不做直接跳过。" + +#: ../../library/multiprocessing.rst:865 +msgid "" +"Prevent :meth:`join_thread` from blocking. In particular, this prevents the" +" background thread from being joined automatically when the process exits --" +" see :meth:`join_thread`." +msgstr "" +"防止 :meth:`join_thread` 方法阻塞当前进程。具体而言,这防止进程退出时自动等待后台线程退出。详见 " +":meth:`join_thread`。" + +#: ../../library/multiprocessing.rst:869 +msgid "" +"A better name for this method might be ``allow_exit_without_flush()``. It " +"is likely to cause enqueued data to lost, and you almost certainly will not " +"need to use it. It is really only there if you need the current process to " +"exit immediately without waiting to flush enqueued data to the underlying " +"pipe, and you don't care about lost data." +msgstr "" +"可能这个方法称为”``allow_exit_without_flush()``“ " +"会更好。这有可能会导致正在排队进入队列的数据丢失,大多数情况下你不需要用到这个方法,仅当你不关心底层管道中可能丢失的数据,只是希望进程能够马上退出时使用。" + +#: ../../library/multiprocessing.rst:878 +msgid "" +"This class's functionality requires a functioning shared semaphore " +"implementation on the host operating system. Without one, the functionality " +"in this class will be disabled, and attempts to instantiate a :class:`Queue`" +" will result in an :exc:`ImportError`. See :issue:`3770` for additional " +"information. The same holds true for any of the specialized queue types " +"listed below." +msgstr "" +"该类的功能依赖于宿主操作系统具有可用的共享信号量实现。否则该类将被禁用,任何试图实例化一个 :class:`Queue` 对象的操作都会抛出 " +":exc:`ImportError` 异常,更多信息详见 :issue:`3770` 。后续说明的任何专用队列对象亦如此。" + +#: ../../library/multiprocessing.rst:887 +msgid "" +"It is a simplified :class:`Queue` type, very close to a locked " +":class:`Pipe`." +msgstr "这是一个简化的 :class:`Queue` 类的实现,很像带锁的 :class:`Pipe` 。" + +#: ../../library/multiprocessing.rst:891 +msgid "Close the queue: release internal resources." +msgstr "关闭队列:释放内部资源。" + +#: ../../library/multiprocessing.rst:893 +msgid "" +"A queue must not be used anymore after it is closed. For example, " +":meth:`get`, :meth:`put` and :meth:`empty` methods must no longer be called." +msgstr "队列在被关闭后就不可再被使用。 例如不可再调用 :meth:`get`, :meth:`put` 和 :meth:`empty` 等方法。" + +#: ../../library/multiprocessing.rst:901 +msgid "Return ``True`` if the queue is empty, ``False`` otherwise." +msgstr "如果队列为空返回 ``True`` ,否则返回 ``False`` 。" + +#: ../../library/multiprocessing.rst:905 +msgid "Remove and return an item from the queue." +msgstr "从队列中移出并返回一个对象。" + +#: ../../library/multiprocessing.rst:909 +msgid "Put *item* into the queue." +msgstr "将 *item* 放入队列。" + +#: ../../library/multiprocessing.rst:914 +msgid "" +":class:`JoinableQueue`, a :class:`Queue` subclass, is a queue which " +"additionally has :meth:`task_done` and :meth:`join` methods." +msgstr "" +":class:`JoinableQueue` 类是 :class:`Queue` 的子类,额外添加了 :meth:`task_done` 和 " +":meth:`join` 方法。" + +#: ../../library/multiprocessing.rst:919 +msgid "" +"Indicate that a formerly enqueued task is complete. Used by queue consumers." +" For each :meth:`~Queue.get` used to fetch a task, a subsequent call to " +":meth:`task_done` tells the queue that the processing on the task is " +"complete." +msgstr "" +"指出之前进入队列的任务已经完成。由队列的消费者进程使用。对于每次调用 :meth:`~Queue.get` 获取的任务,执行完成后调用 " +":meth:`task_done` 告诉队列该任务已经处理完成。" + +#: ../../library/multiprocessing.rst:924 +msgid "" +"If a :meth:`~queue.Queue.join` is currently blocking, it will resume when " +"all items have been processed (meaning that a :meth:`task_done` call was " +"received for every item that had been :meth:`~Queue.put` into the queue)." +msgstr "" +"如果 :meth:`~queue.Queue.join` 方法正在阻塞之中,该方法会在所有对象都被处理完的时候返回 (即对之前使用 " +":meth:`~Queue.put` 放进队列中的所有对象都已经返回了对应的 :meth:`task_done` ) 。" + +#: ../../library/multiprocessing.rst:928 +msgid "" +"Raises a :exc:`ValueError` if called more times than there were items placed" +" in the queue." +msgstr "如果被调用的次数多于放入队列中的项目数量,将引发 :exc:`ValueError` 异常 。" + +#: ../../library/multiprocessing.rst:934 +msgid "Block until all items in the queue have been gotten and processed." +msgstr "阻塞至队列中所有的元素都被接收和处理完毕。" + +#: ../../library/multiprocessing.rst:936 +msgid "" +"The count of unfinished tasks goes up whenever an item is added to the " +"queue. The count goes down whenever a consumer calls :meth:`task_done` to " +"indicate that the item was retrieved and all work on it is complete. When " +"the count of unfinished tasks drops to zero, :meth:`~queue.Queue.join` " +"unblocks." +msgstr "" +"当条目添加到队列的时候,未完成任务的计数就会增加。每当消费者进程调用 :meth:`task_done` " +"表示这个条目已经被回收,该条目所有工作已经完成,未完成计数就会减少。当未完成计数降到零的时候, :meth:`join` 阻塞被解除。" + +#: ../../library/multiprocessing.rst:944 +msgid "Miscellaneous" +msgstr "杂项" + +#: ../../library/multiprocessing.rst:948 +msgid "Return list of all live children of the current process." +msgstr "返回当前进程存活的子进程的列表。" + +#: ../../library/multiprocessing.rst:950 +msgid "" +"Calling this has the side effect of \"joining\" any processes which have " +"already finished." +msgstr "调用该方法有“等待”已经结束的进程的副作用。" + +#: ../../library/multiprocessing.rst:955 +msgid "Return the number of CPUs in the system." +msgstr "返回系统的CPU数量。" + +#: ../../library/multiprocessing.rst:957 +msgid "" +"This number is not equivalent to the number of CPUs the current process can " +"use. The number of usable CPUs can be obtained with " +"``len(os.sched_getaffinity(0))``" +msgstr "" +"该数量不同于当前进程可以使用的CPU数量。可用的CPU数量可以由 ``len(os.sched_getaffinity(0))`` 方法获得。" + +#: ../../library/multiprocessing.rst:961 +msgid "" +"When the number of CPUs cannot be determined a :exc:`NotImplementedError` is" +" raised." +msgstr "当 CPU 的数量无法确定时,会引发 :exc:`NotImplementedError` 。" + +#: ../../library/multiprocessing.rst:965 +msgid ":func:`os.cpu_count`" +msgstr ":func:`os.cpu_count`" + +#: ../../library/multiprocessing.rst:969 +msgid "" +"Return the :class:`Process` object corresponding to the current process." +msgstr "返回与当前进程相对应的 :class:`Process` 对象。" + +#: ../../library/multiprocessing.rst:971 +msgid "An analogue of :func:`threading.current_thread`." +msgstr "和 :func:`threading.current_thread` 相同。" + +#: ../../library/multiprocessing.rst:975 +msgid "" +"Return the :class:`Process` object corresponding to the parent process of " +"the :func:`current_process`. For the main process, ``parent_process`` will " +"be ``None``." +msgstr "" +"返回父进程 :class:`Process`  对象,和父进程调用 :func:`current_process` " +"返回的对象一样。如果一个进程已经是主进程, ``parent_process`` 会返回 ``None``." + +#: ../../library/multiprocessing.rst:983 +msgid "" +"Add support for when a program which uses :mod:`multiprocessing` has been " +"frozen to produce a Windows executable. (Has been tested with **py2exe**, " +"**PyInstaller** and **cx_Freeze**.)" +msgstr "" +"为使用了 :mod:`multiprocessing`  的程序,提供冻结以产生 Windows 可执行文件的支持。(在 **py2exe**, " +"**PyInstaller** 和 **cx_Freeze** 上测试通过)" + +#: ../../library/multiprocessing.rst:987 +msgid "" +"One needs to call this function straight after the ``if __name__ == " +"'__main__'`` line of the main module. For example::" +msgstr "需要在 main 模块的 ``if __name__ == '__main__'`` 该行之后马上调用该函数。例如:" + +#: ../../library/multiprocessing.rst:999 +msgid "" +"If the ``freeze_support()`` line is omitted then trying to run the frozen " +"executable will raise :exc:`RuntimeError`." +msgstr "" +"如果没有调用 ``freeze_support()`` 在尝试运行被冻结的可执行文件时会抛出 :exc:`RuntimeError` 异常。" + +#: ../../library/multiprocessing.rst:1002 +msgid "" +"Calling ``freeze_support()`` has no effect when invoked on any operating " +"system other than Windows. In addition, if the module is being run normally" +" by the Python interpreter on Windows (the program has not been frozen), " +"then ``freeze_support()`` has no effect." +msgstr "" +"对 ``freeze_support()`` 的调用在非 Windows 平台上是无效的。如果该模块在 Windows 平台的 Python " +"解释器中正常运行 (该程序没有被冻结), 调用 ``freeze_support()`` 也是无效的。" + +#: ../../library/multiprocessing.rst:1009 +msgid "" +"Returns a list of the supported start methods, the first of which is the " +"default. The possible start methods are ``'fork'``, ``'spawn'`` and " +"``'forkserver'``. On Windows only ``'spawn'`` is available. On Unix " +"``'fork'`` and ``'spawn'`` are always supported, with ``'fork'`` being the " +"default." +msgstr "" +"返回支持的启动方法的列表,该列表的首项即为默认选项。可能的启动方法有 ``'fork'`` , ``'spawn'`` " +"和``'forkserver'`` 。在 Windows 中,只有 ``'spawn'`` 是可用的。 Unix 平台总是支持 ``'fork'`` " +"和 ``'spawn'`` ,且 ``'fork'`` 是默认值。 " + +#: ../../library/multiprocessing.rst:1019 +msgid "" +"Return a context object which has the same attributes as the " +":mod:`multiprocessing` module." +msgstr "返回一个 Context 对象。该对象具有和 :mod:`multiprocessing` 模块相同的API。" + +#: ../../library/multiprocessing.rst:1022 +msgid "" +"If *method* is ``None`` then the default context is returned. Otherwise " +"*method* should be ``'fork'``, ``'spawn'``, ``'forkserver'``. " +":exc:`ValueError` is raised if the specified start method is not available." +msgstr "" +"如果 *method* 设置成 ``None`` 那么将返回默认上下文对象。否则 *method*  应该是 ``'fork'``, " +"``'spawn'``, ``'forkserver'`` 。 如果指定的启动方法不存在,将抛出 :exc:`ValueError`  异常。 " + +#: ../../library/multiprocessing.rst:1031 +msgid "Return the name of start method used for starting processes." +msgstr "返回启动进程时使用的启动方法名。" + +#: ../../library/multiprocessing.rst:1033 +msgid "" +"If the start method has not been fixed and *allow_none* is false, then the " +"start method is fixed to the default and the name is returned. If the start" +" method has not been fixed and *allow_none* is true then ``None`` is " +"returned." +msgstr "" +"如果启动方法已经固定,并且 *allow_none* 被设置成 False " +",那么启动方法将被固定为默认的启动方法,并且返回其方法名。如果启动方法没有设定,并且 *allow_none* 被设置成 True ,那么将返回 " +"``None``  。" + +#: ../../library/multiprocessing.rst:1038 +msgid "" +"The return value can be ``'fork'``, ``'spawn'``, ``'forkserver'`` or " +"``None``. ``'fork'`` is the default on Unix, while ``'spawn'`` is the " +"default on Windows and macOS." +msgstr "" +"返回值将为 ``'fork'`` , ``'spawn'`` , ``'forkserver'`` 或者 ``None`` 。 " +"``'fork'`` 是 Unix 的默认值, ``'spawn'`` 是 Windows 和 macOS 的默认值。" + +#: ../../library/multiprocessing.rst:1052 +msgid "" +"Set the path of the Python interpreter to use when starting a child process." +" (By default :data:`sys.executable` is used). Embedders will probably need " +"to do some thing like ::" +msgstr "" +"设置在启动子进程时使用的 Python 解释器路径。 ( 默认使用 :data:`sys.executable` ) 嵌入式编程人员可能需要这样做:" + +#: ../../library/multiprocessing.rst:1058 +msgid "before they can create child processes." +msgstr "以使他们可以创建子进程。" + +#: ../../library/multiprocessing.rst:1060 +msgid "Now supported on Unix when the ``'spawn'`` start method is used." +msgstr "现在在 Unix 平台上使用 ``'spawn'`` 启动方法时支持调用该方法。" + +#: ../../library/multiprocessing.rst:1065 +msgid "" +"Set the method which should be used to start child processes. *method* can " +"be ``'fork'``, ``'spawn'`` or ``'forkserver'``." +msgstr "" +"设置启动子进程的方法。 *method* 可以是 ``'fork'`` , ``'spawn'`` 或者 ``'forkserver'`` 。" + +#: ../../library/multiprocessing.rst:1068 +msgid "" +"Note that this should be called at most once, and it should be protected " +"inside the ``if __name__ == '__main__'`` clause of the main module." +msgstr "注意这最多只能调用一次,并且需要藏在 main 模块中,由 ``if __name__ == '__main__'`` 保护着。" + +#: ../../library/multiprocessing.rst:1076 +msgid "" +":mod:`multiprocessing` contains no analogues of " +":func:`threading.active_count`, :func:`threading.enumerate`, " +":func:`threading.settrace`, :func:`threading.setprofile`, " +":class:`threading.Timer`, or :class:`threading.local`." +msgstr "" +":mod:`multiprocessing` 并没有包含类似 :func:`threading.active_count` , " +":func:`threading.enumerate` , :func:`threading.settrace` , " +":func:`threading.setprofile`, :class:`threading.Timer` , 或者 " +":class:`threading.local` 的方法和类。" + +#: ../../library/multiprocessing.rst:1083 +msgid "Connection Objects" +msgstr "连接对象(Connection)" + +#: ../../library/multiprocessing.rst:1087 +msgid "" +"Connection objects allow the sending and receiving of picklable objects or " +"strings. They can be thought of as message oriented connected sockets." +msgstr "Connection 对象允许收发可以序列化的对象或字符串。它们可以看作面向消息的连接套接字。" + +#: ../../library/multiprocessing.rst:1090 +msgid "" +"Connection objects are usually created using :func:`Pipe " +"` -- see also :ref:`multiprocessing-listeners-" +"clients`." +msgstr "" +"通常使用 :func:`Pipe ` 创建 Connection 对象。详见 : " +":ref:`multiprocessing-listeners-clients`." + +#: ../../library/multiprocessing.rst:1098 +msgid "" +"Send an object to the other end of the connection which should be read using" +" :meth:`recv`." +msgstr "将一个对象发送到连接的另一端,可以用 :meth:`recv` 读取。" + +#: ../../library/multiprocessing.rst:1101 +msgid "" +"The object must be picklable. Very large pickles (approximately 32 MiB+, " +"though it depends on the OS) may raise a :exc:`ValueError` exception." +msgstr "" +"发送的对象必须是可以序列化的,过大的对象 ( 接近 32MiB+ ,这个值取决于操作系统 ) 有可能引发 :exc:`ValueError`  " +"异常。" + +#: ../../library/multiprocessing.rst:1106 +msgid "" +"Return an object sent from the other end of the connection using " +":meth:`send`. Blocks until there is something to receive. Raises " +":exc:`EOFError` if there is nothing left to receive and the other end was " +"closed." +msgstr "" +"返回一个由另一端使用 :meth:`send` 发送的对象。该方法会一直阻塞直到接收到对象。 如果对端关闭了连接或者没有东西可接收,将抛出 " +":exc:`EOFError` 异常。" + +#: ../../library/multiprocessing.rst:1113 +msgid "Return the file descriptor or handle used by the connection." +msgstr "返回由连接对象使用的描述符或者句柄。" + +#: ../../library/multiprocessing.rst:1117 +msgid "Close the connection." +msgstr "关闭连接对象。" + +#: ../../library/multiprocessing.rst:1119 +msgid "This is called automatically when the connection is garbage collected." +msgstr "当连接对象被垃圾回收时会自动调用。" + +#: ../../library/multiprocessing.rst:1123 +msgid "Return whether there is any data available to be read." +msgstr "返回连接对象中是否有可以读取的数据。" + +#: ../../library/multiprocessing.rst:1125 +msgid "" +"If *timeout* is not specified then it will return immediately. If *timeout*" +" is a number then this specifies the maximum time in seconds to block. If " +"*timeout* is ``None`` then an infinite timeout is used." +msgstr "" +"如果未指定 *timeout* ,此方法会马上返回。如果 *timeout* 是一个数字,则指定了最大阻塞的秒数。如果 *timeout* 是" +" ``None``,那么将一直等待,不会超时。" + +#: ../../library/multiprocessing.rst:1129 +msgid "" +"Note that multiple connection objects may be polled at once by using " +":func:`multiprocessing.connection.wait`." +msgstr "注意通过使用 :func:`multiprocessing.connection.wait` 可以一次轮询多个连接对象。" + +#: ../../library/multiprocessing.rst:1134 +msgid "Send byte data from a :term:`bytes-like object` as a complete message." +msgstr "从一个 :term:`bytes-like object` 对象中取出字节数组并作为一条完整消息发送。" + +#: ../../library/multiprocessing.rst:1136 +msgid "" +"If *offset* is given then data is read from that position in *buffer*. If " +"*size* is given then that many bytes will be read from buffer. Very large " +"buffers (approximately 32 MiB+, though it depends on the OS) may raise a " +":exc:`ValueError` exception" +msgstr "" +"如果由 *offset*  给定了在 *buffer* 中读取数据的位置。 如果给定了 *size* ,那么将会从缓冲区中读取多个字节。 过大的缓冲区" +" ( 接近 32MiB+ ,此值依赖于操作系统 ) 有可能引发 :exc:`ValueError`  异常。" + +#: ../../library/multiprocessing.rst:1143 +msgid "" +"Return a complete message of byte data sent from the other end of the " +"connection as a string. Blocks until there is something to receive. Raises " +":exc:`EOFError` if there is nothing left to receive and the other end has " +"closed." +msgstr "" +"以字符串形式返回一条从连接对象另一端发送过来的字节数据。此方法在接收到数据前将一直阻塞。 如果连接对象被对端关闭或者没有数据可读取,将抛出 " +":exc:`EOFError` 异常。" + +#: ../../library/multiprocessing.rst:1148 +msgid "" +"If *maxlength* is specified and the message is longer than *maxlength* then " +":exc:`OSError` is raised and the connection will no longer be readable." +msgstr "" +"如果给定了 *maxlength* 并且消息长于 *maxlength* 那么将抛出 :exc:`OSError` 并且该连接对象将不再可读。" + +#: ../../library/multiprocessing.rst:1152 +msgid "" +"This function used to raise :exc:`IOError`, which is now an alias of " +":exc:`OSError`." +msgstr "曾经该函数抛出 :exc:`IOError` ,现在这是 :exc:`OSError` 的别名。" + +#: ../../library/multiprocessing.rst:1159 +msgid "" +"Read into *buffer* a complete message of byte data sent from the other end " +"of the connection and return the number of bytes in the message. Blocks " +"until there is something to receive. Raises :exc:`EOFError` if there is " +"nothing left to receive and the other end was closed." +msgstr "" +"将一条完整的字节数据消息读入 *buffer* 中并返回消息的字节数。 此方法在接收到数据前将一直阻塞。 " +"如果连接对象被对端关闭或者没有数据可读取,将抛出 :exc:`EOFError`  异常。" + +#: ../../library/multiprocessing.rst:1165 +msgid "" +"*buffer* must be a writable :term:`bytes-like object`. If *offset* is given" +" then the message will be written into the buffer from that position. " +"Offset must be a non-negative integer less than the length of *buffer* (in " +"bytes)." +msgstr "" +" *buffer* 必须是一个可写的 :term:`bytes-like object` 。 如果给定了 *offset*  " +"该消息会被写入缓冲区对应的位置。 *offset* 必须是一个小于 *buffer* 长度 ( 以字节计 ) 的非负整数。" + +#: ../../library/multiprocessing.rst:1170 +msgid "" +"If the buffer is too short then a :exc:`BufferTooShort` exception is raised " +"and the complete message is available as ``e.args[0]`` where ``e`` is the " +"exception instance." +msgstr "" +"如果缓冲区太小,则将引发 :exc:`BufferTooShort`  异常,并且完整的消息将会存放在异常实例 ``e`` 的 " +"``e.args[0]`` 中。  " + +#: ../../library/multiprocessing.rst:1174 +msgid "" +"Connection objects themselves can now be transferred between processes using" +" :meth:`Connection.send` and :meth:`Connection.recv`." +msgstr "" +"现在连接对象自身可以通过 :meth:`Connection.send` 和 :meth:`Connection.recv` 在进程之间传递。" + +#: ../../library/multiprocessing.rst:1178 +msgid "" +"Connection objects now support the context management protocol -- see " +":ref:`typecontextmanager`. :meth:`~contextmanager.__enter__` returns the " +"connection object, and :meth:`~contextmanager.__exit__` calls :meth:`close`." +msgstr "" +"连接对象现已支持上下文管理协议 -- 参见 see :ref:`typecontextmanager` 。 " +":meth:`~contextmanager.__enter__` 返回连接对象, " +":meth:`~contextmanager.__exit__` 会调用 :meth:`close` 。" + +#: ../../library/multiprocessing.rst:1183 +msgid "For example:" +msgstr "例如:" + +#: ../../library/multiprocessing.rst:1208 +msgid "" +"The :meth:`Connection.recv` method automatically unpickles the data it " +"receives, which can be a security risk unless you can trust the process " +"which sent the message." +msgstr ":meth:`Connection.recv` 方法会自动解封它收到的数据,除非你能够信任发送消息的进程,否则此处可能有安全风险。" + +#: ../../library/multiprocessing.rst:1212 +msgid "" +"Therefore, unless the connection object was produced using :func:`Pipe` you " +"should only use the :meth:`~Connection.recv` and :meth:`~Connection.send` " +"methods after performing some sort of authentication. See " +":ref:`multiprocessing-auth-keys`." +msgstr "" +"因此, 除非连接对象是由 :func:`Pipe` 产生的,否则你应该仅在使用了某种认证手段之后才使用 " +":meth:`~Connection.recv` 和 :meth:`~Connection.send` 方法。 参考 " +":ref:`multiprocessing-auth-keys`。" + +#: ../../library/multiprocessing.rst:1219 +msgid "" +"If a process is killed while it is trying to read or write to a pipe then " +"the data in the pipe is likely to become corrupted, because it may become " +"impossible to be sure where the message boundaries lie." +msgstr "如果一个进程在试图读写管道时被终止了,那么管道中的数据很可能是不完整的,因为此时可能无法确定消息的边界。" + +#: ../../library/multiprocessing.rst:1225 +msgid "Synchronization primitives" +msgstr "同步原语" + +#: ../../library/multiprocessing.rst:1229 +msgid "" +"Generally synchronization primitives are not as necessary in a multiprocess " +"program as they are in a multithreaded program. See the documentation for " +":mod:`threading` module." +msgstr "通常来说同步原语在多进程环境中并不像它们在多线程环境中那么必要。参考 :mod:`threading` 模块的文档。" + +#: ../../library/multiprocessing.rst:1233 +msgid "" +"Note that one can also create synchronization primitives by using a manager " +"object -- see :ref:`multiprocessing-managers`." +msgstr "注意可以使用管理器对象创建同步原语,参考 :ref:`multiprocessing-managers` 。" + +#: ../../library/multiprocessing.rst:1238 +msgid "A barrier object: a clone of :class:`threading.Barrier`." +msgstr "类似 :class:`threading.Barrier` 的栅栏对象。" + +#: ../../library/multiprocessing.rst:1244 +msgid "" +"A bounded semaphore object: a close analog of " +":class:`threading.BoundedSemaphore`." +msgstr "非常类似 :class:`threading.BoundedSemaphore` 的有界信号量对象。" + +#: ../../library/multiprocessing.rst:1247 +#: ../../library/multiprocessing.rst:1385 +msgid "" +"A solitary difference from its close analog exists: its ``acquire`` method's" +" first argument is named *block*, as is consistent with " +":meth:`Lock.acquire`." +msgstr "" +"一个小小的不同在于,它的 ``acquire``  方法的第一个参数名是和 :meth:`Lock.acquire` 一样的 *block* 。" + +#: ../../library/multiprocessing.rst:1251 +msgid "" +"On macOS, this is indistinguishable from :class:`Semaphore` because " +"``sem_getvalue()`` is not implemented on that platform." +msgstr "" +"在 macOS 平台上, 该对象于 :class:`Semaphore`  不同在于 ``sem_getvalue()`` " +"方法并没有在该平台上实现。" + +#: ../../library/multiprocessing.rst:1256 +msgid "A condition variable: an alias for :class:`threading.Condition`." +msgstr "条件变量: :class:`threading.Condition` 的别名。" + +#: ../../library/multiprocessing.rst:1258 +msgid "" +"If *lock* is specified then it should be a :class:`Lock` or :class:`RLock` " +"object from :mod:`multiprocessing`." +msgstr "" +"指定的 *lock* 参数应该是 :mod:`multiprocessing` 模块中的 :class:`Lock` 或者 " +":class:`RLock` 对象。" + +#: ../../library/multiprocessing.rst:1261 +#: ../../library/multiprocessing.rst:1796 +msgid "The :meth:`~threading.Condition.wait_for` method was added." +msgstr "新增了 :meth:`~threading.Condition.wait_for`  方法。" + +#: ../../library/multiprocessing.rst:1266 +msgid "A clone of :class:`threading.Event`." +msgstr " :class:`threading.Event` 的复制品。" + +#: ../../library/multiprocessing.rst:1271 +msgid "" +"A non-recursive lock object: a close analog of :class:`threading.Lock`. Once" +" a process or thread has acquired a lock, subsequent attempts to acquire it " +"from any process or thread will block until it is released; any process or " +"thread may release it. The concepts and behaviors of " +":class:`threading.Lock` as it applies to threads are replicated here in " +":class:`multiprocessing.Lock` as it applies to either processes or threads, " +"except as noted." +msgstr "" +"原始锁(非递归锁)对象,类似于 :class:`threading.Lock` " +"。一旦一个进程或者线程拿到了锁,后续的任何其他进程或线程的其他请求都会被阻塞直到锁被释放。任何进程或线程都可以释放锁。除非另有说明,否则 " +":class:`multiprocessing.Lock`  用于进程或者线程的概念和行为都和 :class:`threading.Lock`  一致。" + +#: ../../library/multiprocessing.rst:1279 +msgid "" +"Note that :class:`Lock` is actually a factory function which returns an " +"instance of ``multiprocessing.synchronize.Lock`` initialized with a default " +"context." +msgstr "" +"注意 :class:`Lock` 实际上是一个工厂函数。它返回由默认上下文初始化的 " +"``multiprocessing.synchronize.Lock``  对象。" + +#: ../../library/multiprocessing.rst:1283 +msgid "" +":class:`Lock` supports the :term:`context manager` protocol and thus may be " +"used in :keyword:`with` statements." +msgstr "" +" :class:`Lock` 支持 :term:`context manager`  协议,可以在 :keyword:`with` " +"语句中使用。" + +#: ../../library/multiprocessing.rst:1288 +#: ../../library/multiprocessing.rst:1339 +msgid "Acquire a lock, blocking or non-blocking." +msgstr "可以阻塞或非阻塞地获得锁。" + +#: ../../library/multiprocessing.rst:1290 +msgid "" +"With the *block* argument set to ``True`` (the default), the method call " +"will block until the lock is in an unlocked state, then set it to locked and" +" return ``True``. Note that the name of this first argument differs from " +"that in :meth:`threading.Lock.acquire`." +msgstr "" +"如果 *block* 参数被设为 ``True`` ( 默认值 ) , " +"对该方法的调用在锁处于释放状态之前都会阻塞,然后将锁设置为锁住状态并返回 ``True`` 。需要注意的是第一个参数名与 " +":meth:`threading.Lock.acquire` 的不同。" + +#: ../../library/multiprocessing.rst:1295 +msgid "" +"With the *block* argument set to ``False``, the method call does not block." +" If the lock is currently in a locked state, return ``False``; otherwise " +"set the lock to a locked state and return ``True``." +msgstr "" +"如果 *block* 参数被设置成 ``False`` ,方法的调用将不会阻塞。 如果锁当前处于锁住状态,将返回 ``False`` ; " +"否则将锁设置成锁住状态,并返回 ``True`` 。" + +#: ../../library/multiprocessing.rst:1299 +msgid "" +"When invoked with a positive, floating-point value for *timeout*, block for " +"at most the number of seconds specified by *timeout* as long as the lock can" +" not be acquired. Invocations with a negative value for *timeout* are " +"equivalent to a *timeout* of zero. Invocations with a *timeout* value of " +"``None`` (the default) set the timeout period to infinite. Note that the " +"treatment of negative or ``None`` values for *timeout* differs from the " +"implemented behavior in :meth:`threading.Lock.acquire`. The *timeout* " +"argument has no practical implications if the *block* argument is set to " +"``False`` and is thus ignored. Returns ``True`` if the lock has been " +"acquired or ``False`` if the timeout period has elapsed." +msgstr "" +"当 *timeout* 是一个正浮点数时,会在等待锁的过程中最多阻塞等待 *timeout* 秒,当 *timeout* 是负数时,效果和 " +"*timeout* 为0时一样,当 *timeout* 是 ``None`` (默认值)时,等待时间是无限长。需要注意的是,对于 *timeout* " +"参数是负数和 ``None`` 的情况, 其行为与 :meth:`threading.Lock.acquire` 是不一样的。当 *block* 参数" +" 为 ``False`` 时, *timeout* 并没有实际用处,会直接忽略。否则,函数会在拿到锁后返回 ``True`` 或者 超时没拿到锁后返回" +" ``False`` 。" + +#: ../../library/multiprocessing.rst:1314 +msgid "" +"Release a lock. This can be called from any process or thread, not only the" +" process or thread which originally acquired the lock." +msgstr "释放锁,可以在任何进程、线程使用,并不限于锁的拥有者。" + +#: ../../library/multiprocessing.rst:1317 +msgid "" +"Behavior is the same as in :meth:`threading.Lock.release` except that when " +"invoked on an unlocked lock, a :exc:`ValueError` is raised." +msgstr "" +"当尝试释放一个没有被持有的锁时,会抛出 :exc:`ValueError` 异常,除此之外其行为与 " +":meth:`threading.Lock.release` 一样。" + +#: ../../library/multiprocessing.rst:1323 +msgid "" +"A recursive lock object: a close analog of :class:`threading.RLock`. A " +"recursive lock must be released by the process or thread that acquired it. " +"Once a process or thread has acquired a recursive lock, the same process or " +"thread may acquire it again without blocking; that process or thread must " +"release it once for each time it has been acquired." +msgstr "" +"递归锁对象: 类似于 :class:`threading.RLock` " +"。递归锁必须由持有线程、进程亲自释放。如果某个进程或者线程拿到了递归锁,这个进程或者线程可以再次拿到这个锁而不需要等待。但是这个进程或者线程的拿锁操作和释放锁操作的次数必须相同。" + +#: ../../library/multiprocessing.rst:1329 +msgid "" +"Note that :class:`RLock` is actually a factory function which returns an " +"instance of ``multiprocessing.synchronize.RLock`` initialized with a default" +" context." +msgstr "" +"注意 :class:`RLock` 是一个工厂函数,调用后返回一个使用默认 context 初始化的 " +"``multiprocessing.synchronize.RLock`` 实例。" + +#: ../../library/multiprocessing.rst:1333 +msgid "" +":class:`RLock` supports the :term:`context manager` protocol and thus may be" +" used in :keyword:`with` statements." +msgstr "" +":class:`RLock` 支持 :term:`context manager` 协议,因此可在 :keyword:`with` 语句内使用。" + +#: ../../library/multiprocessing.rst:1341 +msgid "" +"When invoked with the *block* argument set to ``True``, block until the lock" +" is in an unlocked state (not owned by any process or thread) unless the " +"lock is already owned by the current process or thread. The current process" +" or thread then takes ownership of the lock (if it does not already have " +"ownership) and the recursion level inside the lock increments by one, " +"resulting in a return value of ``True``. Note that there are several " +"differences in this first argument's behavior compared to the implementation" +" of :meth:`threading.RLock.acquire`, starting with the name of the argument " +"itself." +msgstr "" +"当 *block* 参数设置为 ``True`` " +"时,会一直阻塞直到锁处于空闲状态(没有被任何进程、线程拥有),除非当前进程或线程已经拥有了这把锁。然后当前进程/线程会持有这把锁(在锁没有其他持有者的情况下),锁内的递归等级加一,并返回" +" ``True`` . 注意, 这个函数第一个参数的行为和 :meth:`threading.RLock.acquire` " +"的实现有几个不同点,包括参数名本身。" + +#: ../../library/multiprocessing.rst:1351 +msgid "" +"When invoked with the *block* argument set to ``False``, do not block. If " +"the lock has already been acquired (and thus is owned) by another process or" +" thread, the current process or thread does not take ownership and the " +"recursion level within the lock is not changed, resulting in a return value " +"of ``False``. If the lock is in an unlocked state, the current process or " +"thread takes ownership and the recursion level is incremented, resulting in " +"a return value of ``True``." +msgstr "" +"当 *block* 参数是 ``False`` , " +"将不会阻塞,如果此时锁被其他进程或者线程持有,当前进程、线程获取锁操作失败,锁的递归等级也不会改变,函数返回 ``False`` , " +"如果当前锁已经处于释放状态,则当前进程、线程则会拿到锁,并且锁内的递归等级加一,函数返回 ``True`` 。" + +#: ../../library/multiprocessing.rst:1359 +msgid "" +"Use and behaviors of the *timeout* argument are the same as in " +":meth:`Lock.acquire`. Note that some of these behaviors of *timeout* differ" +" from the implemented behaviors in :meth:`threading.RLock.acquire`." +msgstr "" +"*timeout* 参数的使用方法及行为与 :meth:`Lock.acquire` 一样。但是要注意 *timeout* 的其中一些行为和 " +":meth:`threading.RLock.acquire` 中实现的行为是不同的。" + +#: ../../library/multiprocessing.rst:1366 +msgid "" +"Release a lock, decrementing the recursion level. If after the decrement " +"the recursion level is zero, reset the lock to unlocked (not owned by any " +"process or thread) and if any other processes or threads are blocked waiting" +" for the lock to become unlocked, allow exactly one of them to proceed. If " +"after the decrement the recursion level is still nonzero, the lock remains " +"locked and owned by the calling process or thread." +msgstr "" +"释放锁,使锁内的递归等级减一。如果释放后锁内的递归等级降低为0,则会重置锁的状态为释放状态(即没有被任何进程、线程持有),重置后如果有有其他进程和线程在等待这把锁,他们中的一个会获得这个锁而继续运行。如果释放后锁内的递归等级还没到达0,则这个锁仍将保持未释放状态且当前进程和线程仍然是持有者。" + +#: ../../library/multiprocessing.rst:1374 +msgid "" +"Only call this method when the calling process or thread owns the lock. An " +":exc:`AssertionError` is raised if this method is called by a process or " +"thread other than the owner or if the lock is in an unlocked (unowned) " +"state. Note that the type of exception raised in this situation differs " +"from the implemented behavior in :meth:`threading.RLock.release`." +msgstr "" +"只有当前进程或线程是锁的持有者时,才允许调用这个方法。如果当前进程或线程不是这个锁的拥有者,或者这个锁处于已释放的状态(即没有任何拥有者),调用这个方法会抛出" +" :exc:`AssertionError` 异常。注意这里抛出的异常类型和 :meth:`threading.RLock.release` " +"中实现的行为不一样。" + +#: ../../library/multiprocessing.rst:1383 +msgid "A semaphore object: a close analog of :class:`threading.Semaphore`." +msgstr "一种信号量对象: 类似于 :class:`threading.Semaphore`." + +#: ../../library/multiprocessing.rst:1390 +msgid "" +"On macOS, ``sem_timedwait`` is unsupported, so calling ``acquire()`` with a " +"timeout will emulate that function's behavior using a sleeping loop." +msgstr "" +"在 macOS 上,不支持 ``sem_timedwait`` ,所以,调用 ``acquire()`` 时如果使用 timeout " +"参数,会通过循环sleep来模拟这个函数的行为。" + +#: ../../library/multiprocessing.rst:1395 +msgid "" +"If the SIGINT signal generated by :kbd:`Ctrl-C` arrives while the main " +"thread is blocked by a call to :meth:`BoundedSemaphore.acquire`, " +":meth:`Lock.acquire`, :meth:`RLock.acquire`, :meth:`Semaphore.acquire`, " +":meth:`Condition.acquire` or :meth:`Condition.wait` then the call will be " +"immediately interrupted and :exc:`KeyboardInterrupt` will be raised." +msgstr "" +"假如信号 SIGINT 是来自于 :kbd:`Ctrl-C` ,并且主线程被 :meth:`BoundedSemaphore.acquire`, " +":meth:`Lock.acquire`, :meth:`RLock.acquire`, :meth:`Semaphore.acquire`, " +":meth:`Condition.acquire` 或 :meth:`Condition.wait` 阻塞,则调用会立即中断同时抛出 " +":exc:`KeyboardInterrupt` 异常。" + +#: ../../library/multiprocessing.rst:1401 +msgid "" +"This differs from the behaviour of :mod:`threading` where SIGINT will be " +"ignored while the equivalent blocking calls are in progress." +msgstr "这和 :mod:`threading` 的行为不同,此模块中当执行对应的阻塞式调用时,SIGINT 会被忽略。" + +#: ../../library/multiprocessing.rst:1406 +msgid "" +"Some of this package's functionality requires a functioning shared semaphore" +" implementation on the host operating system. Without one, the " +":mod:`multiprocessing.synchronize` module will be disabled, and attempts to " +"import it will result in an :exc:`ImportError`. See :issue:`3770` for " +"additional information." +msgstr "" +"这个包的某些功能依赖于宿主机系统的共享信号量的实现,如果系统没有这个特性, :mod:`multiprocessing.synchronize` " +"会被禁用,尝试导入这个模块会引发 :exc:`ImportError` 异常,详细信息请查看 :issue:`3770` 。" + +#: ../../library/multiprocessing.rst:1414 +msgid "Shared :mod:`ctypes` Objects" +msgstr "共享 :mod:`ctypes` 对象" + +#: ../../library/multiprocessing.rst:1416 +msgid "" +"It is possible to create shared objects using shared memory which can be " +"inherited by child processes." +msgstr "在共享内存上创建可被子进程继承的共享对象时是可行的。" + +#: ../../library/multiprocessing.rst:1421 +msgid "" +"Return a :mod:`ctypes` object allocated from shared memory. By default the " +"return value is actually a synchronized wrapper for the object. The object " +"itself can be accessed via the *value* attribute of a :class:`Value`." +msgstr "" +"返回一个从共享内存上创建的 :mod:`ctypes` 对象。默认情况下返回的对象实际上是经过了同步器包装过的。可以通过 :class:`Value` " +"的 *value* 属性访问这个对象本身。" + +#: ../../library/multiprocessing.rst:1425 +#: ../../library/multiprocessing.rst:1512 +msgid "" +"*typecode_or_type* determines the type of the returned object: it is either " +"a ctypes type or a one character typecode of the kind used by the " +":mod:`array` module. *\\*args* is passed on to the constructor for the " +"type." +msgstr "" +"*typecode_or_type* 指明了返回的对象类型: 它可能是一个 ctypes 类型或者 :mod:`array`  " +"模块中每个类型对应的单字符长度的字符串。 *\\*args* 会透传给这个类的构造函数。" + +#: ../../library/multiprocessing.rst:1429 +msgid "" +"If *lock* is ``True`` (the default) then a new recursive lock object is " +"created to synchronize access to the value. If *lock* is a :class:`Lock` or" +" :class:`RLock` object then that will be used to synchronize access to the " +"value. If *lock* is ``False`` then access to the returned object will not " +"be automatically protected by a lock, so it will not necessarily be " +"\"process-safe\"." +msgstr "" +"如果 *lock* 参数是 ``True`` (默认值), 将会新建一个递归锁用于同步对于此值的访问操作。 如果 *lock* 是 " +":class:`Lock` 或者 :class:`RLock` 对象,那么这个传入的锁将会用于同步对这个值的访问操作,如果 *lock* 是 " +"``False`` , 那么对这个对象的访问将没有锁保护,也就是说这个变量不是进程安全的。" + +#: ../../library/multiprocessing.rst:1436 +msgid "" +"Operations like ``+=`` which involve a read and write are not atomic. So " +"if, for instance, you want to atomically increment a shared value it is " +"insufficient to just do ::" +msgstr "" +"诸如 ``+=`` " +"这类的操作会引发独立的读操作和写操作,也就是说这类操作符并不具有原子性。所以,如果你想让递增共享变量的操作具有原子性,仅仅以这样的方式并不能达到要求::" + +#: ../../library/multiprocessing.rst:1442 +msgid "" +"Assuming the associated lock is recursive (which it is by default) you can " +"instead do ::" +msgstr "共享对象内部关联的锁是递归锁(默认情况下就是)的情况下, 你可以采用这种方式 ::" + +#: ../../library/multiprocessing.rst:1448 +#: ../../library/multiprocessing.rst:1538 +#: ../../library/multiprocessing.rst:1553 +msgid "Note that *lock* is a keyword-only argument." +msgstr "注意 *lock* 只能是命名参数。" + +#: ../../library/multiprocessing.rst:1452 +msgid "" +"Return a ctypes array allocated from shared memory. By default the return " +"value is actually a synchronized wrapper for the array." +msgstr "从共享内存中申请并返回一个具有ctypes类型的数组对象。默认情况下返回值实际上是被同步器包装过的数组对象。" + +#: ../../library/multiprocessing.rst:1455 +msgid "" +"*typecode_or_type* determines the type of the elements of the returned " +"array: it is either a ctypes type or a one character typecode of the kind " +"used by the :mod:`array` module. If *size_or_initializer* is an integer, " +"then it determines the length of the array, and the array will be initially " +"zeroed. Otherwise, *size_or_initializer* is a sequence which is used to " +"initialize the array and whose length determines the length of the array." +msgstr "" +"*typecode_or_type* 指明了返回的数组中的元素类型: 它可能是一个 ctypes 类型或者 :mod:`array` " +"模块中每个类型对应的单字符长度的字符串。 如果 *size_or_initializer* " +"是一个整数,那就会当做数组的长度,并且整个数组的内存会初始化为0。否则,如果 *size_or_initializer* " +"会被当成一个序列用于初始化数组中的每一个元素,并且会根据元素个数自动判断数组的长度。" + +#: ../../library/multiprocessing.rst:1462 +msgid "" +"If *lock* is ``True`` (the default) then a new lock object is created to " +"synchronize access to the value. If *lock* is a :class:`Lock` or " +":class:`RLock` object then that will be used to synchronize access to the " +"value. If *lock* is ``False`` then access to the returned object will not " +"be automatically protected by a lock, so it will not necessarily be " +"\"process-safe\"." +msgstr "" +"如果 *lock* 为 ``True`` (默认值) 则将创建一个新的锁对象用于同步对值的访问。 如果 *lock* 为一个 :class:`Lock`" +" 或 :class:`RLock` 对象则该对象将被用于同步对值的访问。 如果 *lock* 为 ``False`` " +"则对返回对象的访问将不会自动得到锁的保护,也就是说它不是“进程安全的”。" + +#: ../../library/multiprocessing.rst:1469 +msgid "Note that *lock* is a keyword only argument." +msgstr "请注意 *lock* 是一个仅限关键字参数。" + +#: ../../library/multiprocessing.rst:1471 +msgid "" +"Note that an array of :data:`ctypes.c_char` has *value* and *raw* attributes" +" which allow one to use it to store and retrieve strings." +msgstr "请注意 :data:`ctypes.c_char` 的数组具有 *value* 和 *raw* 属性,允许被用来保存和提取字符串。" + +#: ../../library/multiprocessing.rst:1476 +msgid "The :mod:`multiprocessing.sharedctypes` module" +msgstr ":mod:`multiprocessing.sharedctypes` 模块" + +#: ../../library/multiprocessing.rst:1481 +msgid "" +"The :mod:`multiprocessing.sharedctypes` module provides functions for " +"allocating :mod:`ctypes` objects from shared memory which can be inherited " +"by child processes." +msgstr "" +":mod:`multiprocessing.sharedctypes` 模块提供了一些函数,用于分配来自共享内存的、可被子进程继承的 " +":mod:`ctypes` 对象。" + +#: ../../library/multiprocessing.rst:1487 +msgid "" +"Although it is possible to store a pointer in shared memory remember that " +"this will refer to a location in the address space of a specific process. " +"However, the pointer is quite likely to be invalid in the context of a " +"second process and trying to dereference the pointer from the second process" +" may cause a crash." +msgstr "" +"虽然可以将指针存储在共享内存中,但请记住它所引用的是特定进程地址空间中的位置。 " +"而且,指针很可能在第二个进程的上下文中无效,尝试从第二个进程对指针进行解引用可能会导致崩溃。" + +#: ../../library/multiprocessing.rst:1495 +msgid "Return a ctypes array allocated from shared memory." +msgstr "从共享内存中申请并返回一个 ctypes 数组。" + +#: ../../library/multiprocessing.rst:1497 +msgid "" +"*typecode_or_type* determines the type of the elements of the returned " +"array: it is either a ctypes type or a one character typecode of the kind " +"used by the :mod:`array` module. If *size_or_initializer* is an integer " +"then it determines the length of the array, and the array will be initially " +"zeroed. Otherwise *size_or_initializer* is a sequence which is used to " +"initialize the array and whose length determines the length of the array." +msgstr "" +"*typecode_or_type* 指明了返回的数组中的元素类型: 它可能是一个 ctypes 类型或者 :mod:`array` " +"模块中使用的类型字符。 如果 *size_or_initializer* 是一个整数,那就会当做数组的长度,并且整个数组的内存会初始化为0。否则,如果" +" *size_or_initializer* 会被当成一个序列用于初始化数组中的每一个元素,并且会根据元素个数自动判断数组的长度。" + +#: ../../library/multiprocessing.rst:1504 +msgid "" +"Note that setting and getting an element is potentially non-atomic -- use " +":func:`Array` instead to make sure that access is automatically synchronized" +" using a lock." +msgstr "注意对元素的访问、赋值操作可能是非原子操作 - 使用 :func:`Array` , 从而借助其中的锁保证操作的原子性。" + +#: ../../library/multiprocessing.rst:1510 +msgid "Return a ctypes object allocated from shared memory." +msgstr "从共享内存中申请并返回一个 ctypes 对象。" + +#: ../../library/multiprocessing.rst:1516 +msgid "" +"Note that setting and getting the value is potentially non-atomic -- use " +":func:`Value` instead to make sure that access is automatically synchronized" +" using a lock." +msgstr "注意对 value 的访问、赋值操作可能是非原子操作 - 使用 :func:`Value` ,从而借助其中的锁保证操作的原子性。" + +#: ../../library/multiprocessing.rst:1520 +msgid "" +"Note that an array of :data:`ctypes.c_char` has ``value`` and ``raw`` " +"attributes which allow one to use it to store and retrieve strings -- see " +"documentation for :mod:`ctypes`." +msgstr "" +"请注意 :data:`ctypes.c_char` 的数组具有 *value* 和 *raw* 属性,允许被用来保存和提取字符串 - 请查看 " +":mod:`ctypes` 文档。" + +#: ../../library/multiprocessing.rst:1526 +msgid "" +"The same as :func:`RawArray` except that depending on the value of *lock* a " +"process-safe synchronization wrapper may be returned instead of a raw ctypes" +" array." +msgstr "" +"返回一个纯 ctypes 数组, 或者在此之上经过同步器包装过的进程安全的对象,这取决于 *lock* 参数的值,除此之外,和 " +":func:`RawArray` 一样。" + +#: ../../library/multiprocessing.rst:1530 +#: ../../library/multiprocessing.rst:1546 +msgid "" +"If *lock* is ``True`` (the default) then a new lock object is created to " +"synchronize access to the value. If *lock* is a " +":class:`~multiprocessing.Lock` or :class:`~multiprocessing.RLock` object " +"then that will be used to synchronize access to the value. If *lock* is " +"``False`` then access to the returned object will not be automatically " +"protected by a lock, so it will not necessarily be \"process-safe\"." +msgstr "" +"如果 *lock* 为 ``True`` (默认值) 则将创建一个新的锁对象用于同步对值的访问。 如果 *lock* 为一个 " +":class:`~multiprocessing.Lock` 或 :class:`~multiprocessing.RLock` " +"对象则该对象将被用于同步对值的访问。 如果 *lock* 为 ``False`` " +"则对所返回对象的访问将不会自动得到锁的保护,也就是说它将不是“进程安全的”。" + +#: ../../library/multiprocessing.rst:1542 +msgid "" +"The same as :func:`RawValue` except that depending on the value of *lock* a " +"process-safe synchronization wrapper may be returned instead of a raw ctypes" +" object." +msgstr "" +"返回一个纯 ctypes 数组, 或者在此之上经过同步器包装过的进程安全的对象,这取决于 *lock* 参数的值,除此之外,和 " +":func:`RawArray` 一样。" + +#: ../../library/multiprocessing.rst:1557 +msgid "" +"Return a ctypes object allocated from shared memory which is a copy of the " +"ctypes object *obj*." +msgstr "从共享内存中申请一片空间将 ctypes 对象 *obj* 过来,然后返回一个新的 ctypes 对象。" + +#: ../../library/multiprocessing.rst:1562 +msgid "" +"Return a process-safe wrapper object for a ctypes object which uses *lock* " +"to synchronize access. If *lock* is ``None`` (the default) then a " +":class:`multiprocessing.RLock` object is created automatically." +msgstr "" +"将一个 ctypes 对象包装为进程安全的对象并返回,使用 *lock* 同步对于它的操作。如果 *lock* 是 ``None`` (默认值) " +",则会自动创建一个 :class:`multiprocessing.RLock` 对象。" + +#: ../../library/multiprocessing.rst:1566 +msgid "" +"A synchronized wrapper will have two methods in addition to those of the " +"object it wraps: :meth:`get_obj` returns the wrapped object and " +":meth:`get_lock` returns the lock object used for synchronization." +msgstr "" +"同步器包装后的对象会在原有对象基础上额外增加两个方法: :meth:`get_obj` 返回被包装的对象, :meth:`get_lock` " +"返回内部用于同步的锁。" + +#: ../../library/multiprocessing.rst:1570 +msgid "" +"Note that accessing the ctypes object through the wrapper can be a lot " +"slower than accessing the raw ctypes object." +msgstr "需要注意的是,访问包装后的ctypes对象会比直接访问原来的纯 ctypes 对象慢得多。" + +#: ../../library/multiprocessing.rst:1573 +msgid "Synchronized objects support the :term:`context manager` protocol." +msgstr "同步器包装后的对象支持 :term:`context manager` 协议。" + +#: ../../library/multiprocessing.rst:1577 +msgid "" +"The table below compares the syntax for creating shared ctypes objects from " +"shared memory with the normal ctypes syntax. (In the table ``MyStruct`` is " +"some subclass of :class:`ctypes.Structure`.)" +msgstr "" +"下面的表格对比了创建普通ctypes对象和基于共享内存上创建共享ctypes对象的语法。(表格中的 ``MyStruct`` 是 " +":class:`ctypes.Structure` 的子类)" + +#: ../../library/multiprocessing.rst:1582 +msgid "ctypes" +msgstr "ctypes" + +#: ../../library/multiprocessing.rst:1582 +msgid "sharedctypes using type" +msgstr "使用类型的共享ctypes" + +#: ../../library/multiprocessing.rst:1582 +msgid "sharedctypes using typecode" +msgstr "使用 typecode 的共享 ctypes" + +#: ../../library/multiprocessing.rst:1584 +msgid "c_double(2.4)" +msgstr "c_double(2.4)" + +#: ../../library/multiprocessing.rst:1584 +msgid "RawValue(c_double, 2.4)" +msgstr "RawValue(c_double, 2.4)" + +#: ../../library/multiprocessing.rst:1584 +msgid "RawValue('d', 2.4)" +msgstr "RawValue('d', 2.4)" + +#: ../../library/multiprocessing.rst:1585 +msgid "MyStruct(4, 6)" +msgstr "MyStruct(4, 6)" + +#: ../../library/multiprocessing.rst:1585 +msgid "RawValue(MyStruct, 4, 6)" +msgstr "RawValue(MyStruct, 4, 6)" + +#: ../../library/multiprocessing.rst:1586 +msgid "(c_short * 7)()" +msgstr "(c_short * 7)()" + +#: ../../library/multiprocessing.rst:1586 +msgid "RawArray(c_short, 7)" +msgstr "RawArray(c_short, 7)" + +#: ../../library/multiprocessing.rst:1586 +msgid "RawArray('h', 7)" +msgstr "RawArray('h', 7)" + +#: ../../library/multiprocessing.rst:1587 +msgid "(c_int * 3)(9, 2, 8)" +msgstr "(c_int * 3)(9, 2, 8)" + +#: ../../library/multiprocessing.rst:1587 +msgid "RawArray(c_int, (9, 2, 8))" +msgstr "RawArray(c_int, (9, 2, 8))" + +#: ../../library/multiprocessing.rst:1587 +msgid "RawArray('i', (9, 2, 8))" +msgstr "RawArray('i', (9, 2, 8))" + +#: ../../library/multiprocessing.rst:1591 +msgid "" +"Below is an example where a number of ctypes objects are modified by a child" +" process::" +msgstr "下面是一个在子进程中修改多个ctypes对象的例子。" + +#: ../../library/multiprocessing.rst:1629 +msgid "The results printed are ::" +msgstr "输出如下 ::" + +#: ../../library/multiprocessing.rst:1642 +msgid "Managers" +msgstr "管理器" + +#: ../../library/multiprocessing.rst:1644 +msgid "" +"Managers provide a way to create data which can be shared between different " +"processes, including sharing over a network between processes running on " +"different machines. A manager object controls a server process which manages" +" *shared objects*. Other processes can access the shared objects by using " +"proxies." +msgstr "" +"管理器提供了一种创建共享数据的方法,从而可以在不同进程中共享,甚至可以通过网络跨机器共享数据。管理器维护一个用于管理 *共享对象* " +"的服务。其他进程可以通过代理访问这些共享对象。" + +#: ../../library/multiprocessing.rst:1653 +msgid "" +"Returns a started :class:`~multiprocessing.managers.SyncManager` object " +"which can be used for sharing objects between processes. The returned " +"manager object corresponds to a spawned child process and has methods which " +"will create shared objects and return corresponding proxies." +msgstr "" +"返回一个已启动的 :class:`~multiprocessing.managers.SyncManager` " +"管理器对象,这个对象可以用于在不同进程中共享数据。返回的管理器对象对应了一个已经启动的子进程,并且拥有一系列方法可以用于创建共享对象、返回对应的代理。" + +#: ../../library/multiprocessing.rst:1661 +msgid "" +"Manager processes will be shutdown as soon as they are garbage collected or " +"their parent process exits. The manager classes are defined in the " +":mod:`multiprocessing.managers` module:" +msgstr "" +"当管理器被垃圾回收或者父进程退出时,管理器进程会立即退出。管理器类定义在 :mod:`multiprocessing.managers` 模块:" + +#: ../../library/multiprocessing.rst:1667 +msgid "Create a BaseManager object." +msgstr "创建一个 BaseManager 对象。" + +#: ../../library/multiprocessing.rst:1669 +msgid "" +"Once created one should call :meth:`start` or " +"``get_server().serve_forever()`` to ensure that the manager object refers to" +" a started manager process." +msgstr "" +"一旦创建,应该及时调用 :meth:`start` 或者 ``get_server().serve_forever()`` " +"以确保管理器对象对应的管理进程已经启动。" + +#: ../../library/multiprocessing.rst:1672 +msgid "" +"*address* is the address on which the manager process listens for new " +"connections. If *address* is ``None`` then an arbitrary one is chosen." +msgstr "*address* 是管理器服务进程监听的地址。如果 *address* 是 ``None`` ,则允许和任意主机的请求建立连接。" + +#: ../../library/multiprocessing.rst:1675 +msgid "" +"*authkey* is the authentication key which will be used to check the validity" +" of incoming connections to the server process. If *authkey* is ``None`` " +"then ``current_process().authkey`` is used. Otherwise *authkey* is used and " +"it must be a byte string." +msgstr "" +"*authkey* 是认证标识,用于检查连接服务进程的请求合法性。如果 *authkey* 是 ``None``, 则会使用 " +"``current_process().authkey`` , 否则,就使用 *authkey* , 需要保证它必须是 byte 类型的字符串。" + +#: ../../library/multiprocessing.rst:1682 +msgid "" +"Start a subprocess to start the manager. If *initializer* is not ``None`` " +"then the subprocess will call ``initializer(*initargs)`` when it starts." +msgstr "" +"为管理器开启一个子进程,如果 *initializer* 不是 ``None`` , 子进程在启动时将会调用 " +"``initializer(*initargs)`` 。" + +#: ../../library/multiprocessing.rst:1687 +msgid "" +"Returns a :class:`Server` object which represents the actual server under " +"the control of the Manager. The :class:`Server` object supports the " +":meth:`serve_forever` method::" +msgstr "" +"返回一个 :class:`Server`  对象,它是管理器在后台控制的真实的服务。 :class:`Server`  对象拥有 " +":meth:`serve_forever` 方法。" + +#: ../../library/multiprocessing.rst:1696 +msgid ":class:`Server` additionally has an :attr:`address` attribute." +msgstr ":class:`Server` 额外拥有一个 :attr:`address` 属性。" + +#: ../../library/multiprocessing.rst:1700 +msgid "Connect a local manager object to a remote manager process::" +msgstr "将本地管理器对象连接到一个远程管理器进程::" + +#: ../../library/multiprocessing.rst:1708 +msgid "" +"Stop the process used by the manager. This is only available if " +":meth:`start` has been used to start the server process." +msgstr "停止管理器的进程。这个方法只能用于已经使用 :meth:`start` 启动的服务进程。" + +#: ../../library/multiprocessing.rst:1711 +msgid "This can be called multiple times." +msgstr "它可以被多次调用。" + +#: ../../library/multiprocessing.rst:1715 +msgid "" +"A classmethod which can be used for registering a type or callable with the " +"manager class." +msgstr "一个 classmethod,可以将一个类型或者可调用对象注册到管理器类。" + +#: ../../library/multiprocessing.rst:1718 +msgid "" +"*typeid* is a \"type identifier\" which is used to identify a particular " +"type of shared object. This must be a string." +msgstr "*typeid* 是一种 \"类型标识符\",用于唯一表示某种共享对象类型,必须是一个字符串。" + +#: ../../library/multiprocessing.rst:1721 +msgid "" +"*callable* is a callable used for creating objects for this type identifier." +" If a manager instance will be connected to the server using the " +":meth:`connect` method, or if the *create_method* argument is ``False`` then" +" this can be left as ``None``." +msgstr "" +"*callable* 是一个用来为此类型标识符创建对象的可调用对象。如果一个管理器实例将使用 :meth:`connect` 方法连接到服务器,或者 " +"*create_method* 参数为 ``False``,那么这里可留下 ``None``。" + +#: ../../library/multiprocessing.rst:1727 +msgid "" +"*proxytype* is a subclass of :class:`BaseProxy` which is used to create " +"proxies for shared objects with this *typeid*. If ``None`` then a proxy " +"class is created automatically." +msgstr "" +"*proxytype* 是 :class:`BaseProxy`  的子类,可以根据 *typeid* 为共享对象创建一个代理,如果是 " +"``None`` , 则会自动创建一个代理类。" + +#: ../../library/multiprocessing.rst:1731 +msgid "" +"*exposed* is used to specify a sequence of method names which proxies for " +"this typeid should be allowed to access using :meth:`BaseProxy._callmethod`." +" (If *exposed* is ``None`` then :attr:`proxytype._exposed_` is used instead" +" if it exists.) In the case where no exposed list is specified, all " +"\"public methods\" of the shared object will be accessible. (Here a " +"\"public method\" means any attribute which has a :meth:`~object.__call__` " +"method and whose name does not begin with ``'_'``.)" +msgstr "" +"*exposed* 是一个函数名组成的序列,用来指明只有这些方法可以使用 :meth:`BaseProxy._callmethod` 代理。(如果 " +"*exposed* 是 ``None``, 则会在 :attr:`proxytype._exposed_` 存在的情况下转而使用它) " +"当暴露的方法列表没有指定的时候,共享对象的所有 “公共方法” 都会被代理。(这里的“公共方法”是指所有拥有 " +":meth:`~object.__call__` 方法并且不是以 ``'_'`` 开头的属性)" + +#: ../../library/multiprocessing.rst:1740 +msgid "" +"*method_to_typeid* is a mapping used to specify the return type of those " +"exposed methods which should return a proxy. It maps method names to typeid" +" strings. (If *method_to_typeid* is ``None`` then " +":attr:`proxytype._method_to_typeid_` is used instead if it exists.) If a " +"method's name is not a key of this mapping or if the mapping is ``None`` " +"then the object returned by the method will be copied by value." +msgstr "" +"*method_to_typeid* 是一个映射,用来指定那些应该返回代理对象的暴露方法所返回的类型。(如果 *method_to_typeid* 是 " +"``None``, 则 :attr:`proxytype._method_to_typeid_` " +"会在存在的情况下被使用)如果方法名称不在这个映射中或者映射是 ``None`` ,则方法返回的对象会是一个值拷贝。" + +#: ../../library/multiprocessing.rst:1747 +msgid "" +"*create_method* determines whether a method should be created with name " +"*typeid* which can be used to tell the server process to create a new shared" +" object and return a proxy for it. By default it is ``True``." +msgstr "" +"*create_method* 指明,是否要创建一个以 *typeid* 命名并返回一个代理对象的方法,这个函数会被服务进程用于创建共享对象,默认为 " +"``True`` 。" + +#: ../../library/multiprocessing.rst:1751 +msgid ":class:`BaseManager` instances also have one read-only property:" +msgstr ":class:`BaseManager` 实例也有一个只读属性。" + +#: ../../library/multiprocessing.rst:1755 +msgid "The address used by the manager." +msgstr "管理器所用的地址。" + +#: ../../library/multiprocessing.rst:1757 +msgid "" +"Manager objects support the context management protocol -- see " +":ref:`typecontextmanager`. :meth:`~contextmanager.__enter__` starts the " +"server process (if it has not already started) and then returns the manager " +"object. :meth:`~contextmanager.__exit__` calls :meth:`shutdown`." +msgstr "" +"管理器对象支持上下文管理协议 - 查看 :ref:`typecontextmanager` " +"。:meth:`~contextmanager.__enter__` 启动服务进程(如果它还没有启动)并且返回管理器对象, " +":meth:`~contextmanager.__exit__` 会调用 :meth:`shutdown` 。" + +#: ../../library/multiprocessing.rst:1763 +msgid "" +"In previous versions :meth:`~contextmanager.__enter__` did not start the " +"manager's server process if it was not already started." +msgstr "在之前的版本中,如果管理器服务进程没有启动, :meth:`~contextmanager.__enter__` 不会负责启动它。" + +#: ../../library/multiprocessing.rst:1768 +msgid "" +"A subclass of :class:`BaseManager` which can be used for the synchronization" +" of processes. Objects of this type are returned by " +":func:`multiprocessing.Manager`." +msgstr "" +":class:`BaseManager` 的子类,可用于进程的同步。这个类型的对象使用 :func:`multiprocessing.Manager` " +"创建。" + +#: ../../library/multiprocessing.rst:1772 +msgid "" +"Its methods create and return :ref:`multiprocessing-proxy_objects` for a " +"number of commonly used data types to be synchronized across processes. This" +" notably includes shared lists and dictionaries." +msgstr "" +"它拥有一系列方法,可以为大部分常用数据类型创建并返回 :ref:`multiprocessing-proxy_objects` " +"代理,用于进程间同步。甚至包括共享列表和字典。" + +#: ../../library/multiprocessing.rst:1778 +msgid "" +"Create a shared :class:`threading.Barrier` object and return a proxy for it." +msgstr "创建一个共享的 :class:`threading.Barrier` 对象并返回它的代理。" + +#: ../../library/multiprocessing.rst:1785 +msgid "" +"Create a shared :class:`threading.BoundedSemaphore` object and return a " +"proxy for it." +msgstr "创建一个共享的 :class:`threading.BoundedSemaphore` 对象并返回它的代理。" + +#: ../../library/multiprocessing.rst:1790 +msgid "" +"Create a shared :class:`threading.Condition` object and return a proxy for " +"it." +msgstr "创建一个共享的 :class:`threading.Condition` 对象并返回它的代理。" + +#: ../../library/multiprocessing.rst:1793 +msgid "" +"If *lock* is supplied then it should be a proxy for a " +":class:`threading.Lock` or :class:`threading.RLock` object." +msgstr "" +"如果提供了 *lock* 参数,那它必须是 :class:`threading.Lock` 或 :class:`threading.RLock` " +"的代理对象。" + +#: ../../library/multiprocessing.rst:1801 +msgid "" +"Create a shared :class:`threading.Event` object and return a proxy for it." +msgstr "创建一个共享的 :class:`threading.Event` 对象并返回它的代理。" + +#: ../../library/multiprocessing.rst:1805 +msgid "" +"Create a shared :class:`threading.Lock` object and return a proxy for it." +msgstr "创建一个共享的 :class:`threading.Lock` 对象并返回它的代理。" + +#: ../../library/multiprocessing.rst:1809 +msgid "Create a shared :class:`Namespace` object and return a proxy for it." +msgstr "创建一个共享的 :class:`Namespace` 对象并返回它的代理。" + +#: ../../library/multiprocessing.rst:1813 +msgid "Create a shared :class:`queue.Queue` object and return a proxy for it." +msgstr "创建一个共享的 :class:`queue.Queue` 对象并返回它的代理。" + +#: ../../library/multiprocessing.rst:1817 +msgid "" +"Create a shared :class:`threading.RLock` object and return a proxy for it." +msgstr "创建一个共享的 :class:`threading.RLock` 对象并返回它的代理。" + +#: ../../library/multiprocessing.rst:1821 +msgid "" +"Create a shared :class:`threading.Semaphore` object and return a proxy for " +"it." +msgstr "创建一个共享的 :class:`threading.Semaphore` 对象并返回它的代理。" + +#: ../../library/multiprocessing.rst:1826 +msgid "Create an array and return a proxy for it." +msgstr "创建一个数组并返回它的代理。" + +#: ../../library/multiprocessing.rst:1830 +msgid "" +"Create an object with a writable ``value`` attribute and return a proxy for " +"it." +msgstr "创建一个具有可写 ``value`` 属性的对象并返回它的代理。" + +#: ../../library/multiprocessing.rst:1837 +msgid "Create a shared :class:`dict` object and return a proxy for it." +msgstr "创建一个共享的 :class:`dict` 对象并返回它的代理。" + +#: ../../library/multiprocessing.rst:1842 +msgid "Create a shared :class:`list` object and return a proxy for it." +msgstr "创建一个共享的 :class:`list` 对象并返回它的代理。" + +#: ../../library/multiprocessing.rst:1844 +msgid "" +"Shared objects are capable of being nested. For example, a shared container" +" object such as a shared list can contain other shared objects which will " +"all be managed and synchronized by the :class:`SyncManager`." +msgstr "" +"共享对象能够嵌套。例如, 共享的容器对象如共享列表,可以包含另一个共享对象,他们全都会在 :class:`SyncManager` 中进行管理和同步。" + +#: ../../library/multiprocessing.rst:1851 +msgid "A type that can register with :class:`SyncManager`." +msgstr "一个可以注册到 :class:`SyncManager` 的类型。" + +#: ../../library/multiprocessing.rst:1853 +msgid "" +"A namespace object has no public methods, but does have writable attributes." +" Its representation shows the values of its attributes." +msgstr "命名空间对象没有公共方法,但是拥有可写的属性。直接print会显示所有属性的值。" + +#: ../../library/multiprocessing.rst:1856 +msgid "" +"However, when using a proxy for a namespace object, an attribute beginning " +"with ``'_'`` will be an attribute of the proxy and not an attribute of the " +"referent:" +msgstr "值得一提的是,当对命名空间对象使用代理的时候,访问所有名称以 ``'_'`` 开头的属性都只是代理器上的属性,而不是命名空间对象的属性。" + +#: ../../library/multiprocessing.rst:1872 +msgid "Customized managers" +msgstr "自定义管理器" + +#: ../../library/multiprocessing.rst:1874 +msgid "" +"To create one's own manager, one creates a subclass of :class:`BaseManager` " +"and uses the :meth:`~BaseManager.register` classmethod to register new types" +" or callables with the manager class. For example::" +msgstr "" +"要创建一个自定义的管理器,需要新建一个 :class:`BaseManager` 的子类,然后使用这个管理器类上的 " +":meth:`~BaseManager.register` 类方法将新类型或者可调用方法注册上去。例如::" + +#: ../../library/multiprocessing.rst:1899 +msgid "Using a remote manager" +msgstr "使用远程管理器" + +#: ../../library/multiprocessing.rst:1901 +msgid "" +"It is possible to run a manager server on one machine and have clients use " +"it from other machines (assuming that the firewalls involved allow it)." +msgstr "可以将管理器服务运行在一台机器上,然后使用客户端从其他机器上访问。(假设它们的防火墙允许)" + +#: ../../library/multiprocessing.rst:1904 +msgid "" +"Running the following commands creates a server for a single shared queue " +"which remote clients can access::" +msgstr "运行下面的代码可以启动一个服务,此付包含了一个共享队列,允许远程客户端访问::" + +#: ../../library/multiprocessing.rst:1916 +msgid "One client can access the server as follows::" +msgstr "远程客户端可以通过下面的方式访问服务::" + +#: ../../library/multiprocessing.rst:1926 +msgid "Another client can also use it::" +msgstr "也可以通过下面的方式::" + +#: ../../library/multiprocessing.rst:1937 +msgid "" +"Local processes can also access that queue, using the code from above on the" +" client to access it remotely::" +msgstr "本地进程也可以访问这个队列,利用上面的客户端代码通过远程方式访问::" + +#: ../../library/multiprocessing.rst:1962 +msgid "Proxy Objects" +msgstr "代理对象" + +#: ../../library/multiprocessing.rst:1964 +msgid "" +"A proxy is an object which *refers* to a shared object which lives " +"(presumably) in a different process. The shared object is said to be the " +"*referent* of the proxy. Multiple proxy objects may have the same referent." +msgstr "" +"代理是一个 *指向* 其他共享对象的对象,这个对象(很可能)在另外一个进程中。共享对象也可以说是代理 *指涉* " +"的对象。多个代理对象可能指向同一个指涉对象。" + +#: ../../library/multiprocessing.rst:1968 +msgid "" +"A proxy object has methods which invoke corresponding methods of its " +"referent (although not every method of the referent will necessarily be " +"available through the proxy). In this way, a proxy can be used just like " +"its referent can:" +msgstr "" +"代理对象代理了指涉对象的一系列方法调用(虽然并不是指涉对象的每个方法都有必要被代理)。通过这种方式,代理的使用方法可以和它的指涉对象一样::" + +#: ../../library/multiprocessing.rst:1986 +msgid "" +"Notice that applying :func:`str` to a proxy will return the representation " +"of the referent, whereas applying :func:`repr` will return the " +"representation of the proxy." +msgstr "" +"注意,对代理使用 :func:`str` 函数会返回指涉对象的字符串表示,但是 :func:`repr` 却会返回代理本身的内部字符串表示。" + +#: ../../library/multiprocessing.rst:1990 +msgid "" +"An important feature of proxy objects is that they are picklable so they can" +" be passed between processes. As such, a referent can contain " +":ref:`multiprocessing-proxy_objects`. This permits nesting of these managed" +" lists, dicts, and other :ref:`multiprocessing-proxy_objects`:" +msgstr "" +"被代理的对象很重要的一点是必须可以被序列化,这样才能允许他们在进程间传递。因此,指涉对象可以包含 :ref:`multiprocessing-" +"proxy_objects` 。这允许管理器中列表、字典或者其他 :ref:`multiprocessing-proxy_objects` " +"对象之间的嵌套。" + +#: ../../library/multiprocessing.rst:2006 +msgid "Similarly, dict and list proxies may be nested inside one another::" +msgstr "类似地,字典和列表代理也可以相互嵌套::" + +#: ../../library/multiprocessing.rst:2019 +msgid "" +"If standard (non-proxy) :class:`list` or :class:`dict` objects are contained" +" in a referent, modifications to those mutable values will not be propagated" +" through the manager because the proxy has no way of knowing when the values" +" contained within are modified. However, storing a value in a container " +"proxy (which triggers a ``__setitem__`` on the proxy object) does propagate " +"through the manager and so to effectively modify such an item, one could re-" +"assign the modified value to the container proxy::" +msgstr "" +"如果指涉对象包含了普通 :class:`list` 或 :class:`dict` " +"对象,对这些内部可变对象的修改不会通过管理器传播,因为代理无法得知被包含的值什么时候被修改了。但是把存放在容器代理中的值本身是会通过管理器传播的(会触发代理对象中的" +" ``__setitem__`` )从而有效修改这些对象,所以可以把修改过的值重新赋值给容器代理::" + +#: ../../library/multiprocessing.rst:2038 +msgid "" +"This approach is perhaps less convenient than employing nested " +":ref:`multiprocessing-proxy_objects` for most use cases but also " +"demonstrates a level of control over the synchronization." +msgstr "" +"在大多是使用情形下,这种实现方式并不比嵌套 :ref:`multiprocessing-proxy_objects` " +"方便,但是依然演示了对于同步的一种控制级别。" + +#: ../../library/multiprocessing.rst:2044 +msgid "" +"The proxy types in :mod:`multiprocessing` do nothing to support comparisons " +"by value. So, for instance, we have:" +msgstr ":mod:`multiprocessing` 中的代理类并没有提供任何对于代理值比较的支持。所以,我们会得到如下结果::" + +#: ../../library/multiprocessing.rst:2052 +msgid "" +"One should just use a copy of the referent instead when making comparisons." +msgstr "当需要比较值的时候,应该替换为使用指涉对象的拷贝。" + +#: ../../library/multiprocessing.rst:2056 +msgid "Proxy objects are instances of subclasses of :class:`BaseProxy`." +msgstr "代理对象是 :class:`BaseProxy` 派生类的实例。" + +#: ../../library/multiprocessing.rst:2060 +msgid "Call and return the result of a method of the proxy's referent." +msgstr "调用指涉对象的方法并返回结果。" + +#: ../../library/multiprocessing.rst:2062 +msgid "" +"If ``proxy`` is a proxy whose referent is ``obj`` then the expression ::" +msgstr "如果 ``proxy`` 是一个代理且其指涉的是 ``obj`` , 那么下面的表达式::" + +#: ../../library/multiprocessing.rst:2066 +msgid "will evaluate the expression ::" +msgstr "相当于求取以下表达式的值::" + +#: ../../library/multiprocessing.rst:2070 +msgid "in the manager's process." +msgstr "于管理器进程。" + +#: ../../library/multiprocessing.rst:2072 +msgid "" +"The returned value will be a copy of the result of the call or a proxy to a " +"new shared object -- see documentation for the *method_to_typeid* argument " +"of :meth:`BaseManager.register`." +msgstr "" +"返回结果会是一个值拷贝或者一个新的共享对象的代理 - 见函数 :meth:`BaseManager.register` 中关于参数 " +"*method_to_typeid* 的文档。" + +#: ../../library/multiprocessing.rst:2076 +msgid "" +"If an exception is raised by the call, then is re-raised by " +":meth:`_callmethod`. If some other exception is raised in the manager's " +"process then this is converted into a :exc:`RemoteError` exception and is " +"raised by :meth:`_callmethod`." +msgstr "" +"如果这个调用熬出了异常,则这个异常会被 :meth:`_callmethod` 透传出来。如果是管理器进程本身抛出的一些其他异常,则会被 " +":meth:`_callmethod` 转换为 :exc:`RemoteError` 异常重新抛出。" + +#: ../../library/multiprocessing.rst:2081 +msgid "" +"Note in particular that an exception will be raised if *methodname* has not " +"been *exposed*." +msgstr "特别注意,如果 *methodname* 没有 *暴露* 出来,将会引发一个异常。" + +#: ../../library/multiprocessing.rst:2084 +msgid "An example of the usage of :meth:`_callmethod`:" +msgstr ":meth:`_callmethod` 的一个使用示例:" + +#: ../../library/multiprocessing.rst:2100 +msgid "Return a copy of the referent." +msgstr "返回指涉对象的一份拷贝。" + +#: ../../library/multiprocessing.rst:2102 +msgid "If the referent is unpicklable then this will raise an exception." +msgstr "如果指涉对象无法序列化,则会抛出一个异常。" + +#: ../../library/multiprocessing.rst:2106 +msgid "Return a representation of the proxy object." +msgstr "返回代理对象的内部字符串表示。" + +#: ../../library/multiprocessing.rst:2110 +msgid "Return the representation of the referent." +msgstr "返回指涉对象的内部字符串表示。" + +#: ../../library/multiprocessing.rst:2114 +msgid "Cleanup" +msgstr "清理" + +#: ../../library/multiprocessing.rst:2116 +msgid "" +"A proxy object uses a weakref callback so that when it gets garbage " +"collected it deregisters itself from the manager which owns its referent." +msgstr "代理对象使用了一个弱引用回调函数,当它被垃圾回收时,会将自己从拥有此指涉对象的管理器上反注册," + +#: ../../library/multiprocessing.rst:2119 +msgid "" +"A shared object gets deleted from the manager process when there are no " +"longer any proxies referring to it." +msgstr "当共享对象没有被任何代理器引用时,会被管理器进程删除。" + +#: ../../library/multiprocessing.rst:2124 +msgid "Process Pools" +msgstr "进程池" + +#: ../../library/multiprocessing.rst:2129 +msgid "" +"One can create a pool of processes which will carry out tasks submitted to " +"it with the :class:`Pool` class." +msgstr "可以创建一个进程池,它将使用 :class:`Pool` 类执行提交给它的任务。" + +#: ../../library/multiprocessing.rst:2134 +msgid "" +"A process pool object which controls a pool of worker processes to which " +"jobs can be submitted. It supports asynchronous results with timeouts and " +"callbacks and has a parallel map implementation." +msgstr "一个进程池对象,它控制可以提交作业的工作进程池。它支持带有超时和回调的异步结果,以及一个并行的 map 实现。" + +#: ../../library/multiprocessing.rst:2138 +msgid "" +"*processes* is the number of worker processes to use. If *processes* is " +"``None`` then the number returned by :func:`os.cpu_count` is used." +msgstr "" +"*processes* 是要使用的工作进程数目。如果 *processes* 为 ``None``,则使用 :func:`os.cpu_count` " +"返回的值。" + +#: ../../library/multiprocessing.rst:2141 +#: ../../library/multiprocessing.rst:2702 +msgid "" +"If *initializer* is not ``None`` then each worker process will call " +"``initializer(*initargs)`` when it starts." +msgstr "" +"如果 *initializer* 不为 ``None``,则每个工作进程将会在启动时调用 ``initializer(*initargs)``。" + +#: ../../library/multiprocessing.rst:2144 +msgid "" +"*maxtasksperchild* is the number of tasks a worker process can complete " +"before it will exit and be replaced with a fresh worker process, to enable " +"unused resources to be freed. The default *maxtasksperchild* is ``None``, " +"which means worker processes will live as long as the pool." +msgstr "" +"*maxtasksperchild* 是一个工作进程在它退出或被一个新的工作进程代替之前能完成的任务数量,为了释放未使用的资源。默认的 " +"*maxtasksperchild* 是 ``None``,意味着工作进程寿与池齐。" + +#: ../../library/multiprocessing.rst:2149 +msgid "" +"*context* can be used to specify the context used for starting the worker " +"processes. Usually a pool is created using the function " +":func:`multiprocessing.Pool` or the :meth:`Pool` method of a context object." +" In both cases *context* is set appropriately." +msgstr "" +"*context* 可被用于指定启动的工作进程的上下文。通常一个进程池是使用函数 :func:`multiprocessing.Pool` " +"或者一个上下文对象的 :meth:`Pool` 方法创建的。在这两种情况下, *context* 都是适当设置的。" + +#: ../../library/multiprocessing.rst:2155 +msgid "" +"Note that the methods of the pool object should only be called by the " +"process which created the pool." +msgstr "注意,进程池对象的方法只有创建它的进程能够调用。" + +#: ../../library/multiprocessing.rst:2159 +msgid "" +":class:`multiprocessing.pool` objects have internal resources that need to " +"be properly managed (like any other resource) by using the pool as a context" +" manager or by calling :meth:`close` and :meth:`terminate` manually. Failure" +" to do this can lead to the process hanging on finalization." +msgstr "" +":class:`multiprocessing.pool` 对象具有需要正确管理的内部资源 " +"(像任何其他资源一样),具体方式是将进程池用作上下文管理器,或者手动调用 :meth:`close` 和 :meth:`terminate`。 " +"未做此类操作将导致进程在终结阶段挂起。" + +#: ../../library/multiprocessing.rst:2164 +msgid "" +"Note that is **not correct** to rely on the garbage colletor to destroy the " +"pool as CPython does not assure that the finalizer of the pool will be " +"called (see :meth:`object.__del__` for more information)." +msgstr "" +"请注意依赖垃圾回收器来销毁进程池是 **不正确** 的做法,因为 CPython 并不保证会调用进程池终结程序(请参阅 " +":meth:`object.__del__` 来了解详情)。" + +#: ../../library/multiprocessing.rst:2168 +msgid "*maxtasksperchild*" +msgstr "*maxtasksperchild*" + +#: ../../library/multiprocessing.rst:2171 +msgid "*context*" +msgstr "*context*" + +#: ../../library/multiprocessing.rst:2176 +msgid "" +"Worker processes within a :class:`Pool` typically live for the complete " +"duration of the Pool's work queue. A frequent pattern found in other systems" +" (such as Apache, mod_wsgi, etc) to free resources held by workers is to " +"allow a worker within a pool to complete only a set amount of work before " +"being exiting, being cleaned up and a new process spawned to replace the old" +" one. The *maxtasksperchild* argument to the :class:`Pool` exposes this " +"ability to the end user." +msgstr "" +"通常来说,:class:`Pool` 中的 Worker 进程的生命周期和进程池的工作队列一样长。一些其他系统中(如 Apache, mod_wsgi " +"等)也可以发现另一种模式,他们会让工作进程在完成一些任务后退出,清理、释放资源,然后启动一个新的进程代替旧的工作进程。 :class:`Pool` 的 " +"*maxtasksperchild* 参数给用户提供了这种能力。" + +#: ../../library/multiprocessing.rst:2186 +msgid "" +"Call *func* with arguments *args* and keyword arguments *kwds*. It blocks " +"until the result is ready. Given this blocks, :meth:`apply_async` is better " +"suited for performing work in parallel. Additionally, *func* is only " +"executed in one of the workers of the pool." +msgstr "" +"使用 *args* 参数以及 *kwds* 命名参数调用 *func* , 它会返回结果前阻塞。这种情况下,:meth:`apply_async` " +"更适合并行化工作。另外 *func* 只会在一个进程池中的一个工作进程中执行。" + +#: ../../library/multiprocessing.rst:2193 +msgid "" +"A variant of the :meth:`apply` method which returns a " +":class:`~multiprocessing.pool.AsyncResult` object." +msgstr "" +":meth:`apply` 方法的一个变种,返回一个 :class:`~multiprocessing.pool.AsyncResult` 对象。" + +#: ../../library/multiprocessing.rst:2196 +#: ../../library/multiprocessing.rst:2227 +msgid "" +"If *callback* is specified then it should be a callable which accepts a " +"single argument. When the result becomes ready *callback* is applied to it," +" that is unless the call failed, in which case the *error_callback* is " +"applied instead." +msgstr "" +"如果指定了 *callback* , 它必须是一个接受单个参数的可调用对象。当执行成功时, *callback* " +"会被用于处理执行后的返回结果,否则,调用 *error_callback* 。" + +#: ../../library/multiprocessing.rst:2201 +#: ../../library/multiprocessing.rst:2232 +msgid "" +"If *error_callback* is specified then it should be a callable which accepts " +"a single argument. If the target function fails, then the *error_callback* " +"is called with the exception instance." +msgstr "" +"如果指定了 *error_callback* , 它必须是一个接受单个参数的可调用对象。当目标函数执行失败时, 会将抛出的异常对象作为参数传递给 " +"*error_callback* 执行。" + +#: ../../library/multiprocessing.rst:2205 +#: ../../library/multiprocessing.rst:2236 +msgid "" +"Callbacks should complete immediately since otherwise the thread which " +"handles the results will get blocked." +msgstr "回调函数应该立即执行完成,否则会阻塞负责处理结果的线程。" + +#: ../../library/multiprocessing.rst:2210 +msgid "" +"A parallel equivalent of the :func:`map` built-in function (it supports only" +" one *iterable* argument though, for multiple iterables see " +":meth:`starmap`). It blocks until the result is ready." +msgstr "" +"内置 :func:`map` 函数的并行版本 (但它只支持一个 *iterable* 参数,对于多个可迭代对象请参阅 :meth:`starmap`)。" +" 它会保持阻塞直到获得结果。" + +#: ../../library/multiprocessing.rst:2214 +msgid "" +"This method chops the iterable into a number of chunks which it submits to " +"the process pool as separate tasks. The (approximate) size of these chunks " +"can be specified by setting *chunksize* to a positive integer." +msgstr "这个方法会将可迭代对象分割为许多块,然后提交给进程池。 可以将 *chunksize* 设置为一个正整数来指定每个块的(近似)大小。" + +#: ../../library/multiprocessing.rst:2218 +msgid "" +"Note that it may cause high memory usage for very long iterables. Consider " +"using :meth:`imap` or :meth:`imap_unordered` with explicit *chunksize* " +"option for better efficiency." +msgstr "" +"注意对于很长的迭代对象,可能消耗很多内存。可以考虑使用 :meth:`imap` 或 :meth:`imap_unordered` 并且显式指定 " +"*chunksize* 以提升效率。" + +#: ../../library/multiprocessing.rst:2224 +msgid "" +"A variant of the :meth:`.map` method which returns a " +":class:`~multiprocessing.pool.AsyncResult` object." +msgstr "" +":meth:`.map` 方法的一个变种,返回一个 :class:`~multiprocessing.pool.AsyncResult` 对象。" + +#: ../../library/multiprocessing.rst:2241 +msgid "A lazier version of :meth:`.map`." +msgstr ":meth:`.map` 的延迟执行版本。" + +#: ../../library/multiprocessing.rst:2243 +msgid "" +"The *chunksize* argument is the same as the one used by the :meth:`.map` " +"method. For very long iterables using a large value for *chunksize* can " +"make the job complete **much** faster than using the default value of ``1``." +msgstr "" +"*chunksize* 参数的作用和 :meth:`.map` 方法的一样。对于很长的迭代器,给 *chunksize* 设置一个很大的值会比默认值 " +"``1`` **极大** 地加快执行速度。" + +#: ../../library/multiprocessing.rst:2248 +msgid "" +"Also if *chunksize* is ``1`` then the :meth:`!next` method of the iterator " +"returned by the :meth:`imap` method has an optional *timeout* parameter: " +"``next(timeout)`` will raise :exc:`multiprocessing.TimeoutError` if the " +"result cannot be returned within *timeout* seconds." +msgstr "" +"同样,如果 *chunksize* 是 ``1`` , 那么 :meth:`imap` 方法所返回的迭代器的 :meth:`!next` " +"方法拥有一个可选的 *timeout* 参数: 如果无法在 *timeout* 秒内执行得到结果,则 ``next(timeout)`` 会抛出 " +":exc:`multiprocessing.TimeoutError` 异常。" + +#: ../../library/multiprocessing.rst:2255 +msgid "" +"The same as :meth:`imap` except that the ordering of the results from the " +"returned iterator should be considered arbitrary. (Only when there is only " +"one worker process is the order guaranteed to be \"correct\".)" +msgstr "" +"和 :meth:`imap` 相同,只不过通过迭代器返回的结果是任意的。(当进程池中只有一个工作进程的时候,返回结果的顺序才能认为是\"有序\"的)" + +#: ../../library/multiprocessing.rst:2261 +msgid "" +"Like :meth:`~multiprocessing.pool.Pool.map` except that the elements of the " +"*iterable* are expected to be iterables that are unpacked as arguments." +msgstr "" +"和 :meth:`~multiprocessing.pool.Pool.map` 类似,不过 *iterable* 中的每一项会被解包再作为函数参数。" + +#: ../../library/multiprocessing.rst:2265 +msgid "" +"Hence an *iterable* of ``[(1,2), (3, 4)]`` results in ``[func(1,2), " +"func(3,4)]``." +msgstr "比如可迭代对象 ``[(1,2), (3, 4)]`` 会转化为等价于 ``[func(1,2), func(3,4)]`` 的调用。" + +#: ../../library/multiprocessing.rst:2272 +msgid "" +"A combination of :meth:`starmap` and :meth:`map_async` that iterates over " +"*iterable* of iterables and calls *func* with the iterables unpacked. " +"Returns a result object." +msgstr "" +"相当于 :meth:`starmap` 与 :meth:`map_async` 的结合,迭代 *iterable* 的每一项,解包作为 *func* " +"的参数并执行,返回用于获取结果的对象。" + +#: ../../library/multiprocessing.rst:2280 +msgid "" +"Prevents any more tasks from being submitted to the pool. Once all the " +"tasks have been completed the worker processes will exit." +msgstr "阻止后续任务提交到进程池,当所有任务执行完成后,工作进程会退出。" + +#: ../../library/multiprocessing.rst:2285 +msgid "" +"Stops the worker processes immediately without completing outstanding work." +" When the pool object is garbage collected :meth:`terminate` will be called" +" immediately." +msgstr "不必等待未完成的任务,立即停止工作进程。当进程池对象被垃圾回收时,会立即调用 :meth:`terminate`。" + +#: ../../library/multiprocessing.rst:2291 +msgid "" +"Wait for the worker processes to exit. One must call :meth:`close` or " +":meth:`terminate` before using :meth:`join`." +msgstr "等待工作进程结束。调用 :meth:`join` 前必须先调用 :meth:`close` 或者 :meth:`terminate` 。" + +#: ../../library/multiprocessing.rst:2294 +msgid "" +"Pool objects now support the context management protocol -- see " +":ref:`typecontextmanager`. :meth:`~contextmanager.__enter__` returns the " +"pool object, and :meth:`~contextmanager.__exit__` calls :meth:`terminate`." +msgstr "" +"进程池对象现在支持上下文管理器协议 - 参见 :ref:`typecontextmanager` " +"。:meth:`~contextmanager.__enter__` 返回进程池对象, :meth:`~contextmanager.__exit__`" +" 会调用 :meth:`terminate` 。" + +#: ../../library/multiprocessing.rst:2302 +msgid "" +"The class of the result returned by :meth:`Pool.apply_async` and " +":meth:`Pool.map_async`." +msgstr ":meth:`Pool.apply_async` 和 :meth:`Pool.map_async` 返回对象所属的类。" + +#: ../../library/multiprocessing.rst:2307 +msgid "" +"Return the result when it arrives. If *timeout* is not ``None`` and the " +"result does not arrive within *timeout* seconds then " +":exc:`multiprocessing.TimeoutError` is raised. If the remote call raised an" +" exception then that exception will be reraised by :meth:`get`." +msgstr "" +"用于获取执行结果。如果 *timeout* 不是 ``None`` 并且在 *timeout* 秒内仍然没有执行完得到结果,则抛出 " +":exc:`multiprocessing.TimeoutError` 异常。如果远程调用发生异常,这个异常会通过 :meth:`get` 重新抛出。" + +#: ../../library/multiprocessing.rst:2314 +msgid "Wait until the result is available or until *timeout* seconds pass." +msgstr "阻塞,直到返回结果,或者 *timeout* 秒后超时。" + +#: ../../library/multiprocessing.rst:2318 +msgid "Return whether the call has completed." +msgstr "返回执行状态,是否已经完成。" + +#: ../../library/multiprocessing.rst:2322 +msgid "" +"Return whether the call completed without raising an exception. Will raise " +":exc:`ValueError` if the result is not ready." +msgstr "判断调用是否已经完成并且未引发异常。 如果还未获得结果则将引发 :exc:`ValueError`。" + +#: ../../library/multiprocessing.rst:2325 +msgid "" +"If the result is not ready, :exc:`ValueError` is raised instead of " +":exc:`AssertionError`." +msgstr "如果没有执行完,会抛出 :exc:`ValueError`  异常而不是 :exc:`AssertionError` 。" + +#: ../../library/multiprocessing.rst:2329 +msgid "The following example demonstrates the use of a pool::" +msgstr "下面的例子演示了进程池的用法::" + +#: ../../library/multiprocessing.rst:2356 +msgid "Listeners and Clients" +msgstr "监听器及客户端" + +#: ../../library/multiprocessing.rst:2361 +msgid "" +"Usually message passing between processes is done using queues or by using " +":class:`~Connection` objects returned by :func:`~multiprocessing.Pipe`." +msgstr "" +"通常情况下,进程间通过队列或者 :func:`~multiprocessing.Pipe` 返回的 :class:`~Connection` 传递消息。" + +#: ../../library/multiprocessing.rst:2365 +msgid "" +"However, the :mod:`multiprocessing.connection` module allows some extra " +"flexibility. It basically gives a high level message oriented API for " +"dealing with sockets or Windows named pipes. It also has support for " +"*digest authentication* using the :mod:`hmac` module, and for polling " +"multiple connections at the same time." +msgstr "" +"不过,:mod:`multiprocessing.connection` " +"模块其实提供了一些更灵活的特性。最基础的用法是通过它抽象出来的高级API来操作socket或者Windows命名管道。也提供一些高级用法,如通过 " +":mod:`hmac` 模块来支持 *摘要认证*,以及同时监听多个管道连接。" + +#: ../../library/multiprocessing.rst:2374 +msgid "" +"Send a randomly generated message to the other end of the connection and " +"wait for a reply." +msgstr "发送一个随机生成的消息到另一端,并等待回复。" + +#: ../../library/multiprocessing.rst:2377 +msgid "" +"If the reply matches the digest of the message using *authkey* as the key " +"then a welcome message is sent to the other end of the connection. " +"Otherwise :exc:`~multiprocessing.AuthenticationError` is raised." +msgstr "" +"如果收到的回复与使用 *authkey* 作为键生成的信息摘要匹配成功,就会发送一个欢迎信息给管道另一端。否则抛出 " +":exc:`~multiprocessing.AuthenticationError` 异常。" + +#: ../../library/multiprocessing.rst:2383 +msgid "" +"Receive a message, calculate the digest of the message using *authkey* as " +"the key, and then send the digest back." +msgstr "接收一条信息,使用 *authkey* 作为键计算信息摘要,然后将摘要发送回去。" + +#: ../../library/multiprocessing.rst:2386 +msgid "" +"If a welcome message is not received, then " +":exc:`~multiprocessing.AuthenticationError` is raised." +msgstr "如果没有收到欢迎消息,就抛出 :exc:`~multiprocessing.AuthenticationError` 异常。" + +#: ../../library/multiprocessing.rst:2391 +msgid "" +"Attempt to set up a connection to the listener which is using address " +"*address*, returning a :class:`~Connection`." +msgstr "尝试使用 *address* 地址上的监听器建立一个连接,返回 :class:`~Connection` 。" + +#: ../../library/multiprocessing.rst:2394 +msgid "" +"The type of the connection is determined by *family* argument, but this can " +"generally be omitted since it can usually be inferred from the format of " +"*address*. (See :ref:`multiprocessing-address-formats`)" +msgstr "" +"连接的类型取决于 *family* 参数,但是通常可以省略,因为可以通过 *address* 的格式推导出来。(查看 " +":ref:`multiprocessing-address-formats` )" + +#: ../../library/multiprocessing.rst:2398 +#: ../../library/multiprocessing.rst:2433 +msgid "" +"If *authkey* is given and not None, it should be a byte string and will be " +"used as the secret key for an HMAC-based authentication challenge. No " +"authentication is done if *authkey* is None. " +":exc:`~multiprocessing.AuthenticationError` is raised if authentication " +"fails. See :ref:`multiprocessing-auth-keys`." +msgstr "" +"如果提供了 *authkey* 参数并且不是 None,那它必须是一个字符串并且会被当做基于 HMAC 认证的密钥。如果 *authkey* 是None" +" 则不会有认证行为。认证失败抛出 :exc:`~multiprocessing.AuthenticationError` 异常,请查看 See " +":ref:`multiprocessing-auth-keys` 。" + +#: ../../library/multiprocessing.rst:2406 +msgid "" +"A wrapper for a bound socket or Windows named pipe which is 'listening' for " +"connections." +msgstr "可以监听连接请求,是对于绑定套接字或者 Windows 命名管道的封装。" + +#: ../../library/multiprocessing.rst:2409 +msgid "" +"*address* is the address to be used by the bound socket or named pipe of the" +" listener object." +msgstr "*address* 是监听器对象中的绑定套接字或命名管道使用的地址。" + +#: ../../library/multiprocessing.rst:2414 +msgid "" +"If an address of '0.0.0.0' is used, the address will not be a connectable " +"end point on Windows. If you require a connectable end-point, you should use" +" '127.0.0.1'." +msgstr "" +"如果使用 '0.0.0.0' 作为监听地址,那么在Windows上这个地址无法建立连接。想要建立一个可连接的端点,应该使用 '127.0.0.1' 。" + +#: ../../library/multiprocessing.rst:2418 +msgid "" +"*family* is the type of socket (or named pipe) to use. This can be one of " +"the strings ``'AF_INET'`` (for a TCP socket), ``'AF_UNIX'`` (for a Unix " +"domain socket) or ``'AF_PIPE'`` (for a Windows named pipe). Of these only " +"the first is guaranteed to be available. If *family* is ``None`` then the " +"family is inferred from the format of *address*. If *address* is also " +"``None`` then a default is chosen. This default is the family which is " +"assumed to be the fastest available. See :ref:`multiprocessing-address-" +"formats`. Note that if *family* is ``'AF_UNIX'`` and address is ``None`` " +"then the socket will be created in a private temporary directory created " +"using :func:`tempfile.mkstemp`." +msgstr "" +"*family* 是套接字(或者命名管道)使用的类型。它可以是以下一种: ``'AF_INET'`` ( TCP 套接字类型), " +"``'AF_UNIX'`` ( Unix 域套接字) 或者 ``'AF_PIPE'`` ( Windows " +"命名管道)。其中只有第一个保证各平台可用。如果 *family* 是 ``None`` ,那么 family 会根据 *address* " +"的格式自动推导出来。如果 *address* 也是 ``None`` , 则取默认值。默认值为可用类型中速度最快的。见 " +":ref:`multiprocessing-address-formats` 。注意,如果 *family* 是 ``'AF_UNIX'`` " +"而address是 ``None`` ,套接字会在一个 :func:`tempfile.mkstemp` 创建的私有临时目录中创建。" + +#: ../../library/multiprocessing.rst:2429 +msgid "" +"If the listener object uses a socket then *backlog* (1 by default) is passed" +" to the :meth:`~socket.socket.listen` method of the socket once it has been " +"bound." +msgstr "" +"如果监听器对象使用了套接字,*backlog* (默认值为1) 会在套接字绑定后传递给它的 :meth:`~socket.socket.listen` " +"方法。" + +#: ../../library/multiprocessing.rst:2441 +msgid "" +"Accept a connection on the bound socket or named pipe of the listener object" +" and return a :class:`~Connection` object. If authentication is attempted " +"and fails, then :exc:`~multiprocessing.AuthenticationError` is raised." +msgstr "" +"接受一个连接并返回一个 :class:`~Connection` " +"对象,其连接到的监听器对象已绑定套接字或者命名管道。如果已经尝试过认证并且失败了,则会抛出 " +":exc:`~multiprocessing.AuthenticationError` 异常。" + +#: ../../library/multiprocessing.rst:2448 +msgid "" +"Close the bound socket or named pipe of the listener object. This is called" +" automatically when the listener is garbage collected. However it is " +"advisable to call it explicitly." +msgstr "关闭监听器对象上的绑定套接字或者命名管道。此函数会在监听器被垃圾回收后自动调用。不过仍然建议显式调用函数关闭。" + +#: ../../library/multiprocessing.rst:2452 +msgid "Listener objects have the following read-only properties:" +msgstr "监听器对象拥有下列只读属性:" + +#: ../../library/multiprocessing.rst:2456 +msgid "The address which is being used by the Listener object." +msgstr "监听器对象使用的地址。" + +#: ../../library/multiprocessing.rst:2460 +msgid "" +"The address from which the last accepted connection came. If this is " +"unavailable then it is ``None``." +msgstr "最后一个连接所使用的地址。如果没有的话就是 ``None`` 。" + +#: ../../library/multiprocessing.rst:2463 +msgid "" +"Listener objects now support the context management protocol -- see " +":ref:`typecontextmanager`. :meth:`~contextmanager.__enter__` returns the " +"listener object, and :meth:`~contextmanager.__exit__` calls :meth:`close`." +msgstr "" +"监听器对象现在支持了上下文管理协议 - 见 :ref:`typecontextmanager` 。 " +":meth:`~contextmanager.__enter__` 返回一个监听器对象, " +":meth:`~contextmanager.__exit__` 会调用 :meth:`close` 。" + +#: ../../library/multiprocessing.rst:2470 +msgid "" +"Wait till an object in *object_list* is ready. Returns the list of those " +"objects in *object_list* which are ready. If *timeout* is a float then the " +"call blocks for at most that many seconds. If *timeout* is ``None`` then it" +" will block for an unlimited period. A negative timeout is equivalent to a " +"zero timeout." +msgstr "" +"一直等待直到 *object_list* 中某个对象处于就绪状态。返回 *object_list* 中处于就绪状态的对象。如果 *timeout* " +"是一个浮点型,该方法会最多阻塞这么多秒。如果 *timeout* 是 ``None`` " +",则会允许阻塞的事件没有限制。timeout为负数的情况下和为0的情况相同。" + +#: ../../library/multiprocessing.rst:2476 +msgid "" +"For both Unix and Windows, an object can appear in *object_list* if it is" +msgstr "对于 Unix 和 Windows ,满足下列条件的对象可以出现在 *object_list* 中" + +#: ../../library/multiprocessing.rst:2479 +msgid "a readable :class:`~multiprocessing.connection.Connection` object;" +msgstr "可读的 :class:`~multiprocessing.connection.Connection` 对象;" + +#: ../../library/multiprocessing.rst:2480 +msgid "a connected and readable :class:`socket.socket` object; or" +msgstr "一个已连接并且可读的 :class:`socket.socket` 对象;或者" + +#: ../../library/multiprocessing.rst:2481 +msgid "" +"the :attr:`~multiprocessing.Process.sentinel` attribute of a " +":class:`~multiprocessing.Process` object." +msgstr "" +":class:`~multiprocessing.Process` 对象中的 " +":attr:`~multiprocessing.Process.sentinel` 属性。" + +#: ../../library/multiprocessing.rst:2484 +msgid "" +"A connection or socket object is ready when there is data available to be " +"read from it, or the other end has been closed." +msgstr "当一个连接或者套接字对象拥有有效的数据可被读取的时候,或者另一端关闭后,这个对象就处于就绪状态。" + +#: ../../library/multiprocessing.rst:2487 +msgid "" +"**Unix**: ``wait(object_list, timeout)`` almost equivalent " +"``select.select(object_list, [], [], timeout)``. The difference is that, if" +" :func:`select.select` is interrupted by a signal, it can raise " +":exc:`OSError` with an error number of ``EINTR``, whereas :func:`wait` will " +"not." +msgstr "" +"**Unix**: ``wait(object_list, timeout)`` 和 ``select.select(object_list, [], " +"[], timeout)`` 几乎相同。差别在于,如果 :func:`select.select` 被信号中断,它会抛出一个附带错误号为 " +"``EINTR`` 的 :exc:`OSError` 异常,而 :func:`wait` 不会。" + +#: ../../library/multiprocessing.rst:2493 +msgid "" +"**Windows**: An item in *object_list* must either be an integer handle which" +" is waitable (according to the definition used by the documentation of the " +"Win32 function ``WaitForMultipleObjects()``) or it can be an object with a " +":meth:`fileno` method which returns a socket handle or pipe handle. (Note " +"that pipe handles and socket handles are **not** waitable handles.)" +msgstr "" +"**Windows**: *object_list* 中的元素必须是一个表示为整数的可等待的句柄(按照 Win32 函数 " +"``WaitForMultipleObjects()`` 的文档中所定义) 或者一个拥有 :meth:`fileno` " +"方法的对象,这个对象返回一个套接字句柄或者管道句柄。(注意管道和套接字两种句柄 **不是** 可等待的句柄)" + +#: ../../library/multiprocessing.rst:2503 +msgid "**Examples**" +msgstr "**示例**" + +#: ../../library/multiprocessing.rst:2505 +msgid "" +"The following server code creates a listener which uses ``'secret " +"password'`` as an authentication key. It then waits for a connection and " +"sends some data to the client::" +msgstr "下面的服务代码创建了一个使用 ``'secret password'`` 作为认证密码的监听器。它会等待连接然后发送一些数据给客户端::" + +#: ../../library/multiprocessing.rst:2524 +msgid "" +"The following code connects to the server and receives some data from the " +"server::" +msgstr "下面的代码连接到服务然后从服务器上j接收一些数据::" + +#: ../../library/multiprocessing.rst:2541 +msgid "" +"The following code uses :func:`~multiprocessing.connection.wait` to wait for" +" messages from multiple processes at once::" +msgstr "下面的代码使用了 :func:`~multiprocessing.connection.wait` ,以便在同时等待多个进程发来消息。" + +#: ../../library/multiprocessing.rst:2580 +msgid "Address Formats" +msgstr "地址格式" + +#: ../../library/multiprocessing.rst:2582 +msgid "" +"An ``'AF_INET'`` address is a tuple of the form ``(hostname, port)`` where " +"*hostname* is a string and *port* is an integer." +msgstr "" +"``'AF_INET'`` 地址是 ``(hostname, port)`` 形式的元组类型,其中 *hostname* 是一个字符串,*port* " +"是整数。" + +#: ../../library/multiprocessing.rst:2585 +msgid "" +"An ``'AF_UNIX'`` address is a string representing a filename on the " +"filesystem." +msgstr "``'AF_UNIX'`` 地址是文件系统上文件名的字符串。" + +#: ../../library/multiprocessing.rst:2588 +msgid "" +"An ``'AF_PIPE'`` address is a string of the form " +":samp:`r'\\\\\\\\.\\\\pipe\\\\{PipeName}'`. To use :func:`Client` to " +"connect to a named pipe on a remote computer called *ServerName* one should " +"use an address of the form " +":samp:`r'\\\\\\\\{ServerName}\\\\pipe\\\\{PipeName}'` instead." +msgstr "" +"``'AF_PIPE'`` 地址是一个 :samp:`r'\\\\\\\\.\\\\pipe\\\\{PipeName}'` 形式的字符串。 要使用 " +":func:`Client` 来连接到远程计算机上一个名为 *ServerName* 的命名管道,则应当改用 " +":samp:`r'\\\\\\\\{ServerName}\\\\pipe\\\\{PipeName}'` 形式的地址。" + +#: ../../library/multiprocessing.rst:2593 +msgid "" +"Note that any string beginning with two backslashes is assumed by default to" +" be an ``'AF_PIPE'`` address rather than an ``'AF_UNIX'`` address." +msgstr "注意,使用两个反斜线开头的字符串默认被当做 ``'AF_PIPE'`` 地址而不是 ``'AF_UNIX'`` 地址。" + +#: ../../library/multiprocessing.rst:2600 +msgid "Authentication keys" +msgstr "认证密码" + +#: ../../library/multiprocessing.rst:2602 +msgid "" +"When one uses :meth:`Connection.recv `, the data received " +"is automatically unpickled. Unfortunately unpickling data from an untrusted " +"source is a security risk. Therefore :class:`Listener` and :func:`Client` " +"use the :mod:`hmac` module to provide digest authentication." +msgstr "" +"当使用 :meth:`Connection.recv ` " +"接收数据时,数据会自动被反序列化。不幸的是,对于一个不可信的数据源发来的数据,反序列化是存在安全风险的。所以 :class:`Listener` 和 " +":func:`Client` 之间使用 :mod:`hmac` 模块进行摘要认证。" + +#: ../../library/multiprocessing.rst:2608 +msgid "" +"An authentication key is a byte string which can be thought of as a " +"password: once a connection is established both ends will demand proof that " +"the other knows the authentication key. (Demonstrating that both ends are " +"using the same key does **not** involve sending the key over the " +"connection.)" +msgstr "" +"认证密钥是一个 byte " +"类型的字符串,可以认为是和密码一样的东西,连接建立好后,双方都会要求另一方证明知道认证密钥。(这个证明过程不会通过连接发送密钥)" + +#: ../../library/multiprocessing.rst:2614 +msgid "" +"If authentication is requested but no authentication key is specified then " +"the return value of ``current_process().authkey`` is used (see " +":class:`~multiprocessing.Process`). This value will be automatically " +"inherited by any :class:`~multiprocessing.Process` object that the current " +"process creates. This means that (by default) all processes of a multi-" +"process program will share a single authentication key which can be used " +"when setting up connections between themselves." +msgstr "" +"如果要求认证但是没有指定认证密钥,则会使用 ``current_process().authkey`` 的返回值 (参见 " +":class:`~multiprocessing.Process`)。 这个值将被当前进程所创建的任何 " +":class:`~multiprocessing.Process` 对象自动继承。 这意味着 (在默认情况下) " +"一个包含多进程的程序中的所有进程会在相互间建立连接的时候共享单个认证密钥。" + +#: ../../library/multiprocessing.rst:2622 +msgid "" +"Suitable authentication keys can also be generated by using " +":func:`os.urandom`." +msgstr ":func:`os.urandom` 也可以用来生成合适的认证密钥。" + +#: ../../library/multiprocessing.rst:2626 +msgid "Logging" +msgstr "日志记录" + +#: ../../library/multiprocessing.rst:2628 +msgid "" +"Some support for logging is available. Note, however, that the " +":mod:`logging` package does not use process shared locks so it is possible " +"(depending on the handler type) for messages from different processes to get" +" mixed up." +msgstr "" +"当前模块也提供了一些对 logging 的支持。注意, :mod:`logging` " +"模块本身并没有使用进程间共享的锁,所以来自于多个进程的日志可能(具体取决于使用的日志 handler 类型)相互覆盖或者混杂。" + +#: ../../library/multiprocessing.rst:2635 +msgid "" +"Returns the logger used by :mod:`multiprocessing`. If necessary, a new one " +"will be created." +msgstr "返回 :mod:`multiprocessing` 使用的 logger,必要的话会创建一个新的。" + +#: ../../library/multiprocessing.rst:2638 +msgid "" +"When first created the logger has level :data:`logging.NOTSET` and no " +"default handler. Messages sent to this logger will not by default propagate " +"to the root logger." +msgstr "" +"如果创建的首个 logger 日志级别为 :data:`logging.NOTSET` 并且没有默认 handler。通过这个 logger " +"打印的消息不会传递到根 logger。" + +#: ../../library/multiprocessing.rst:2642 +msgid "" +"Note that on Windows child processes will only inherit the level of the " +"parent process's logger -- any other customization of the logger will not be" +" inherited." +msgstr "注意在 Windows 上,子进程只会继承父进程 logger 的日志级别 - 对于logger的其他自定义项不会继承。" + +#: ../../library/multiprocessing.rst:2649 +msgid "" +"This function performs a call to :func:`get_logger` but in addition to " +"returning the logger created by get_logger, it adds a handler which sends " +"output to :data:`sys.stderr` using format ``'[%(levelname)s/%(processName)s]" +" %(message)s'``. You can modify ``levelname`` of the logger by passing a " +"``level`` argument." +msgstr "" +"此函数会调用 :func:`get_logger` 但是会在返回的 logger 上增加一个 handler,将所有输出都使用 " +"``'[%(levelname)s/%(processName)s] %(message)s'`` 的格式发送到 :data:`sys.stderr` " +"。你可以通过传递一个 ``level`` 参数来修改记录器的 ``levelname`` 。" + +#: ../../library/multiprocessing.rst:2655 +msgid "Below is an example session with logging turned on::" +msgstr "下面是一个在交互式解释器中打开日志功能的例子::" + +#: ../../library/multiprocessing.rst:2670 +msgid "For a full table of logging levels, see the :mod:`logging` module." +msgstr "要查看日志等级的完整列表,见 :mod:`logging` 模块。" + +#: ../../library/multiprocessing.rst:2674 +msgid "The :mod:`multiprocessing.dummy` module" +msgstr ":mod:`multiprocessing.dummy` 模块" + +#: ../../library/multiprocessing.rst:2679 +msgid "" +":mod:`multiprocessing.dummy` replicates the API of :mod:`multiprocessing` " +"but is no more than a wrapper around the :mod:`threading` module." +msgstr "" +":mod:`multiprocessing.dummy` 复制了 :mod:`multiprocessing` 的 API,不过是在 " +":mod:`threading` 模块之上包装了一层。" + +#: ../../library/multiprocessing.rst:2684 +msgid "" +"In particular, the ``Pool`` function provided by " +":mod:`multiprocessing.dummy` returns an instance of :class:`ThreadPool`, " +"which is a subclass of :class:`Pool` that supports all the same method calls" +" but uses a pool of worker threads rather than worker processes." +msgstr "" +"特别地,:mod:`multiprocessing.dummy` 所提供的 ``Pool`` 函数会返回一个 :class:`ThreadPool` " +"的实例,该类是 :class:`Pool` 的子类,它支持所有相同的方法调用但会使用一个工作线程池而非工作进程池。" + +#: ../../library/multiprocessing.rst:2692 +msgid "" +"A thread pool object which controls a pool of worker threads to which jobs " +"can be submitted. :class:`ThreadPool` instances are fully interface " +"compatible with :class:`Pool` instances, and their resources must also be " +"properly managed, either by using the pool as a context manager or by " +"calling :meth:`~multiprocessing.pool.Pool.close` and " +":meth:`~multiprocessing.pool.Pool.terminate` manually." +msgstr "" +"一个线程池对象,用来控制可向其提交任务的工作线程池。 :class:`ThreadPool` 实例与 :class:`Pool` " +"实例是完全接口兼容的,并且它们的资源也必须被正确地管理,或者是将线程池作为上下文管理器来使用,或者是通过手动调用 " +":meth:`~multiprocessing.pool.Pool.close` 和 " +":meth:`~multiprocessing.pool.Pool.terminate`。" + +#: ../../library/multiprocessing.rst:2699 +msgid "" +"*processes* is the number of worker threads to use. If *processes* is " +"``None`` then the number returned by :func:`os.cpu_count` is used." +msgstr "" +"*processes* 是要使用的工作线程数目。 如果 *processes* 为 ``None``,则使用 :func:`os.cpu_count` " +"返回的值。" + +#: ../../library/multiprocessing.rst:2705 +msgid "" +"Unlike :class:`Pool`, *maxtasksperchild* and *context* cannot be provided." +msgstr "不同于 :class:`Pool`,*maxtasksperchild* 和 *context* 不可被提供。" + +#: ../../library/multiprocessing.rst:2709 +msgid "" +"A :class:`ThreadPool` shares the same interface as :class:`Pool`, which is " +"designed around a pool of processes and predates the introduction of the " +":class:`concurrent.futures` module. As such, it inherits some operations " +"that don't make sense for a pool backed by threads, and it has its own type " +"for representing the status of asynchronous jobs, :class:`AsyncResult`, that" +" is not understood by any other libraries." +msgstr "" +":class:`ThreadPool` 具有与 :class:`Pool` 相同的接口,它围绕一个进程池进行设计并且先于 " +":class:`concurrent.futures` 模块的引入。 " +"因此,它继承了一些对于基于线程的池来说没有意义的操作,并且它具有自己的用于表示异步任务状态的类型 " +":class:`AsyncResult`,该类型不为任何其他库所知。" + +#: ../../library/multiprocessing.rst:2716 +msgid "" +"Users should generally prefer to use " +":class:`concurrent.futures.ThreadPoolExecutor`, which has a simpler " +"interface that was designed around threads from the start, and which returns" +" :class:`concurrent.futures.Future` instances that are compatible with many " +"other libraries, including :mod:`asyncio`." +msgstr "" +"用户通常应该倾向于使用 " +":class:`concurrent.futures.ThreadPoolExecutor`,它拥有从一开始就围绕线程进行设计的更简单接口,并且返回与许多其他库相兼容的" +" :class:`concurrent.futures.Future` 实例,包括 :mod:`asyncio` 库。" + +#: ../../library/multiprocessing.rst:2726 +msgid "Programming guidelines" +msgstr "编程指导" + +#: ../../library/multiprocessing.rst:2728 +msgid "" +"There are certain guidelines and idioms which should be adhered to when " +"using :mod:`multiprocessing`." +msgstr "使用 :mod:`multiprocessing` 时,应遵循一些指导原则和习惯用法。" + +#: ../../library/multiprocessing.rst:2733 +msgid "All start methods" +msgstr "所有start方法" + +#: ../../library/multiprocessing.rst:2735 +msgid "The following applies to all start methods." +msgstr "下面这些适用于所有start方法。" + +#: ../../library/multiprocessing.rst:2737 +msgid "Avoid shared state" +msgstr "避免共享状态" + +#: ../../library/multiprocessing.rst:2739 +msgid "" +"As far as possible one should try to avoid shifting large amounts of data " +"between processes." +msgstr "应该尽可能避免在进程间传递大量数据,越少越好。" + +#: ../../library/multiprocessing.rst:2742 +msgid "" +"It is probably best to stick to using queues or pipes for communication " +"between processes rather than using the lower level synchronization " +"primitives." +msgstr "最好坚持使用队列或者管道进行进程间通信,而不是底层的同步原语。" + +#: ../../library/multiprocessing.rst:2746 +msgid "Picklability" +msgstr "可序列化" + +#: ../../library/multiprocessing.rst:2748 +msgid "Ensure that the arguments to the methods of proxies are picklable." +msgstr "保证所代理的方法的参数是可以序列化的。" + +#: ../../library/multiprocessing.rst:2750 +msgid "Thread safety of proxies" +msgstr "代理的线程安全性" + +#: ../../library/multiprocessing.rst:2752 +msgid "" +"Do not use a proxy object from more than one thread unless you protect it " +"with a lock." +msgstr "不要在多线程中同时使用一个代理对象,除非你用锁保护它。" + +#: ../../library/multiprocessing.rst:2755 +msgid "" +"(There is never a problem with different processes using the *same* proxy.)" +msgstr "(而在不同进程中使用 *相同* 的代理对象却没有问题。)" + +#: ../../library/multiprocessing.rst:2757 +msgid "Joining zombie processes" +msgstr "使用 Join 避免僵尸进程" + +#: ../../library/multiprocessing.rst:2759 +msgid "" +"On Unix when a process finishes but has not been joined it becomes a zombie." +" There should never be very many because each time a new process starts (or " +":func:`~multiprocessing.active_children` is called) all completed processes " +"which have not yet been joined will be joined. Also calling a finished " +"process's :meth:`Process.is_alive ` will " +"join the process. Even so it is probably good practice to explicitly join " +"all the processes that you start." +msgstr "" +"在 Unix 上,如果一个进程执行完成但是没有被 join,就会变成僵尸进程。一般来说,僵尸进程不会很多,因为每次新启动进程(或者 " +":func:`~multiprocessing.active_children` 被调用)时,所有已执行完成且没有被 join 的进程都会自动被 " +"join,而且对一个执行完的进程调用 :meth:`Process.is_alive " +"` 也会 join 这个进程。尽管如此,对自己启动的进程显式调用 join " +"依然是最佳实践。" + +#: ../../library/multiprocessing.rst:2767 +msgid "Better to inherit than pickle/unpickle" +msgstr "继承优于序列化、反序列化" + +#: ../../library/multiprocessing.rst:2769 +msgid "" +"When using the *spawn* or *forkserver* start methods many types from " +":mod:`multiprocessing` need to be picklable so that child processes can use " +"them. However, one should generally avoid sending shared objects to other " +"processes using pipes or queues. Instead you should arrange the program so " +"that a process which needs access to a shared resource created elsewhere can" +" inherit it from an ancestor process." +msgstr "" +"当使用 *spawn* 或者 *forkserver* 的启动方式时,:mod:`multiprocessing` " +"中的许多类型都必须是可序列化的,这样子进程才能使用它们。但是通常我们都应该避免使用管道和队列发送共享对象到另外一个进程,而是重新组织代码,对于其他进程创建出来的共享对象,让那些需要访问这些对象的子进程可以直接将这些对象从父进程继承过来。" + +#: ../../library/multiprocessing.rst:2777 +msgid "Avoid terminating processes" +msgstr "避免杀死进程" + +#: ../../library/multiprocessing.rst:2779 +msgid "" +"Using the :meth:`Process.terminate ` " +"method to stop a process is liable to cause any shared resources (such as " +"locks, semaphores, pipes and queues) currently being used by the process to " +"become broken or unavailable to other processes." +msgstr "" +"通过 :meth:`Process.terminate ` " +"停止一个进程很容易导致这个进程正在使用的共享资源(如锁、信号量、管道和队列)损坏或者变得不可用,无法在其他进程中继续使用。" + +#: ../../library/multiprocessing.rst:2785 +msgid "" +"Therefore it is probably best to only consider using " +":meth:`Process.terminate ` on processes " +"which never use any shared resources." +msgstr "" +"所以,最好只对那些从来不使用共享资源的进程调用 :meth:`Process.terminate " +"` 。" + +#: ../../library/multiprocessing.rst:2789 +msgid "Joining processes that use queues" +msgstr "Join 使用队列的进程" + +#: ../../library/multiprocessing.rst:2791 +msgid "" +"Bear in mind that a process that has put items in a queue will wait before " +"terminating until all the buffered items are fed by the \"feeder\" thread to" +" the underlying pipe. (The child process can call the " +":meth:`Queue.cancel_join_thread ` " +"method of the queue to avoid this behaviour.)" +msgstr "" +"记住,往队列放入数据的进程会一直等待直到队列中所有项被\"feeder\" 线程传给底层管道。(子进程可以调用队列的 " +":meth:`Queue.cancel_join_thread ` " +"方法禁止这种行为)" + +#: ../../library/multiprocessing.rst:2797 +msgid "" +"This means that whenever you use a queue you need to make sure that all " +"items which have been put on the queue will eventually be removed before the" +" process is joined. Otherwise you cannot be sure that processes which have " +"put items on the queue will terminate. Remember also that non-daemonic " +"processes will be joined automatically." +msgstr "" +"这意味着,任何使用队列的时候,你都要确保在进程join之前,所有存放到队列中的项将会被其他进程、线程完全消费。否则不能保证这个写过队列的进程可以正常终止。记住非精灵进程会自动" +" join 。" + +#: ../../library/multiprocessing.rst:2803 +msgid "An example which will deadlock is the following::" +msgstr "下面是一个会导致死锁的例子::" + +#: ../../library/multiprocessing.rst:2817 +msgid "" +"A fix here would be to swap the last two lines (or simply remove the " +"``p.join()`` line)." +msgstr "交换最后两行可以修复这个问题(或者直接删掉 ``p.join()``)。" + +#: ../../library/multiprocessing.rst:2820 +msgid "Explicitly pass resources to child processes" +msgstr "显式传递资源给子进程" + +#: ../../library/multiprocessing.rst:2822 +msgid "" +"On Unix using the *fork* start method, a child process can make use of a " +"shared resource created in a parent process using a global resource. " +"However, it is better to pass the object as an argument to the constructor " +"for the child process." +msgstr "" +"在Unix上,使用 *fork* 方式启动的子进程可以使用父进程中全局创建的共享资源。不过,最好是显式将资源对象通过参数的形式传递给子进程。" + +#: ../../library/multiprocessing.rst:2827 +msgid "" +"Apart from making the code (potentially) compatible with Windows and the " +"other start methods this also ensures that as long as the child process is " +"still alive the object will not be garbage collected in the parent process." +" This might be important if some resource is freed when the object is " +"garbage collected in the parent process." +msgstr "" +"除了(部分原因)让代码兼容 Windows " +"以及其他的进程启动方式外,这种形式还保证了在子进程生命期这个对象是不会被父进程垃圾回收的。如果父进程中的某些对象被垃圾回收会导致资源释放,这就变得很重要。" + +#: ../../library/multiprocessing.rst:2834 +msgid "So for instance ::" +msgstr "所以对于实例:" + +#: ../../library/multiprocessing.rst:2846 +msgid "should be rewritten as ::" +msgstr "应当重写成这样:" + +#: ../../library/multiprocessing.rst:2858 +msgid "Beware of replacing :data:`sys.stdin` with a \"file like object\"" +msgstr "谨防将 :data:`sys.stdin` 数据替换为 “类似文件的对象”" + +#: ../../library/multiprocessing.rst:2860 +msgid ":mod:`multiprocessing` originally unconditionally called::" +msgstr ":mod:`multiprocessing` 原本会无条件地这样调用::" + +#: ../../library/multiprocessing.rst:2864 +msgid "" +"in the :meth:`multiprocessing.Process._bootstrap` method --- this resulted " +"in issues with processes-in-processes. This has been changed to::" +msgstr "" +"在 :meth:`multiprocessing.Process._bootstrap`  方法中 —— " +"这会导致与\"进程中的进程\"相关的一些问题。这已经被修改成了::" + +#: ../../library/multiprocessing.rst:2870 +msgid "" +"Which solves the fundamental issue of processes colliding with each other " +"resulting in a bad file descriptor error, but introduces a potential danger " +"to applications which replace :func:`sys.stdin` with a \"file-like object\" " +"with output buffering. This danger is that if multiple processes call " +":meth:`~io.IOBase.close()` on this file-like object, it could result in the " +"same data being flushed to the object multiple times, resulting in " +"corruption." +msgstr "" +"它解决了进程相互冲突导致文件描述符错误的根本问题,但是对使用带缓冲的“文件型对象”替换 :func:`sys.stdin` " +"作为输出的应用程序造成了潜在的危险。如果多个进程调用了此文件型对象的 :meth:`~io.IOBase.close()` " +"方法,会导致相同的数据多次刷写到此对象,损坏数据。" + +#: ../../library/multiprocessing.rst:2877 +msgid "" +"If you write a file-like object and implement your own caching, you can make" +" it fork-safe by storing the pid whenever you append to the cache, and " +"discarding the cache when the pid changes. For example::" +msgstr "" +"如果你写入文件型对象并实现了自己的缓存,可以在每次追加缓存数据时记录当前进程id,从而将其变成 fork " +"安全的,当发现进程id变化后舍弃之前的缓存,例如::" + +#: ../../library/multiprocessing.rst:2889 +msgid "" +"For more information, see :issue:`5155`, :issue:`5313` and :issue:`5331`" +msgstr "需要更多信息,请查看 :issue:`5155`, :issue:`5313` 以及 :issue:`5331`" + +#: ../../library/multiprocessing.rst:2892 +msgid "The *spawn* and *forkserver* start methods" +msgstr "*spawn* 和 *forkserver* 启动方式" + +#: ../../library/multiprocessing.rst:2894 +msgid "" +"There are a few extra restriction which don't apply to the *fork* start " +"method." +msgstr "相对于 *fork* 启动方式,有一些额外的限制。" + +#: ../../library/multiprocessing.rst:2897 +msgid "More picklability" +msgstr "更依赖序列化" + +#: ../../library/multiprocessing.rst:2899 +msgid "" +"Ensure that all arguments to :meth:`Process.__init__` are picklable. Also, " +"if you subclass :class:`~multiprocessing.Process` then make sure that " +"instances will be picklable when the :meth:`Process.start " +"` method is called." +msgstr "" +":meth:`Process.__init__` 的所有参数都必须可序列化。同样的,当你继承 " +":class:`~multiprocessing.Process` 时,需要保证当调用 :meth:`Process.start " +"` 方法时,实例可以被序列化。" + +#: ../../library/multiprocessing.rst:2904 +msgid "Global variables" +msgstr "全局变量" + +#: ../../library/multiprocessing.rst:2906 +msgid "" +"Bear in mind that if code run in a child process tries to access a global " +"variable, then the value it sees (if any) may not be the same as the value " +"in the parent process at the time that :meth:`Process.start " +"` was called." +msgstr "" +"记住,如果子进程中的代码尝试访问一个全局变量,它所看到的值(如果有)可能和父进程中执行 :meth:`Process.start " +"` 那一刻的值不一样。" + +#: ../../library/multiprocessing.rst:2911 +msgid "" +"However, global variables which are just module level constants cause no " +"problems." +msgstr "当全局变量只是模块级别的常量时,是不会有问题的。" + +#: ../../library/multiprocessing.rst:2914 +msgid "Safe importing of main module" +msgstr "安全导入主模块" + +#: ../../library/multiprocessing.rst:2916 +msgid "" +"Make sure that the main module can be safely imported by a new Python " +"interpreter without causing unintended side effects (such a starting a new " +"process)." +msgstr "确保主模块可以被新启动的Python解释器安全导入而不会引发什么副作用(比如又启动了一个子进程)" + +#: ../../library/multiprocessing.rst:2920 +msgid "" +"For example, using the *spawn* or *forkserver* start method running the " +"following module would fail with a :exc:`RuntimeError`::" +msgstr "" +"例如,使用 *spawn* 或 *forkserver* 启动方式执行下面的模块,会引发 :exc:`RuntimeError` 异常而失败。" + +#: ../../library/multiprocessing.rst:2932 +msgid "" +"Instead one should protect the \"entry point\" of the program by using ``if " +"__name__ == '__main__':`` as follows::" +msgstr "应该通过下面的方法使用 ``if __name__ == '__main__':`` ,从而保护程序\"入口点\"::" + +#: ../../library/multiprocessing.rst:2946 +msgid "" +"(The ``freeze_support()`` line can be omitted if the program will be run " +"normally instead of frozen.)" +msgstr "(如果程序将正常运行而不是冻结,则可以省略 ``freeze_support()`` 行)" + +#: ../../library/multiprocessing.rst:2949 +msgid "" +"This allows the newly spawned Python interpreter to safely import the module" +" and then run the module's ``foo()`` function." +msgstr "这允许新启动的 Python 解释器安全导入模块然后运行模块中的 ``foo()`` 函数。" + +#: ../../library/multiprocessing.rst:2952 +msgid "" +"Similar restrictions apply if a pool or manager is created in the main " +"module." +msgstr "如果主模块中创建了进程池或者管理器,这个规则也适用。" + +#: ../../library/multiprocessing.rst:2959 +msgid "Examples" +msgstr "例子" + +#: ../../library/multiprocessing.rst:2961 +msgid "" +"Demonstration of how to create and use customized managers and proxies:" +msgstr "创建和使用自定义管理器、代理的示例::" + +#: ../../library/multiprocessing.rst:2967 +msgid "Using :class:`~multiprocessing.pool.Pool`:" +msgstr "使用 :class:`~multiprocessing.pool.Pool`:" + +#: ../../library/multiprocessing.rst:2973 +msgid "" +"An example showing how to use queues to feed tasks to a collection of worker" +" processes and collect the results:" +msgstr "一个演示如何使用队列来向一组工作进程提供任务并收集结果的例子:" diff --git a/library/multiprocessing.shared_memory.po b/library/multiprocessing.shared_memory.po new file mode 100644 index 000000000..bab0ad0e0 --- /dev/null +++ b/library/multiprocessing.shared_memory.po @@ -0,0 +1,320 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) 2001-2022, Python Software Foundation +# This file is distributed under the same license as the Python package. +# FIRST AUTHOR , YEAR. +# +# Translators: +# Chi Xu , 2019 +# zeroswan , 2020 +# Freesand Leo , 2022 +# +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: Python 3.9\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2022-11-04 14:34+0000\n" +"PO-Revision-Date: 2019-09-01 14:31+0000\n" +"Last-Translator: Freesand Leo , 2022\n" +"Language-Team: Chinese (China) (https://www.transifex.com/python-doc/teams/5390/zh_CN/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: zh_CN\n" +"Plural-Forms: nplurals=1; plural=0;\n" + +#: ../../library/multiprocessing.shared_memory.rst:2 +msgid "" +":mod:`multiprocessing.shared_memory` --- Provides shared memory for direct " +"access across processes" +msgstr ":mod:`multiprocessing.shared_memory` --- 可从进程直接访问的共享内存" + +#: ../../library/multiprocessing.shared_memory.rst:7 +msgid "**Source code:** :source:`Lib/multiprocessing/shared_memory.py`" +msgstr "**源代码:** :source:`Lib/multiprocessing/shared_memory.py`" + +#: ../../library/multiprocessing.shared_memory.rst:18 +msgid "" +"This module provides a class, :class:`SharedMemory`, for the allocation and " +"management of shared memory to be accessed by one or more processes on a " +"multicore or symmetric multiprocessor (SMP) machine. To assist with the " +"life-cycle management of shared memory especially across distinct processes," +" a :class:`~multiprocessing.managers.BaseManager` subclass, " +":class:`SharedMemoryManager`, is also provided in the " +"``multiprocessing.managers`` module." +msgstr "" +"该模块提供了一个 :class:`SharedMemory` " +"类,用于分配和管理多核或对称多处理器(SMP)机器上进程间的共享内存。为了协助管理不同进程间的共享内存生命周期,``multiprocessing.managers``" +" 模块也提供了一个 :class:`~multiprocessing.managers.BaseManager` 的子类: " +":class:`SharedMemoryManager`。" + +#: ../../library/multiprocessing.shared_memory.rst:26 +msgid "" +"In this module, shared memory refers to \"System V style\" shared memory " +"blocks (though is not necessarily implemented explicitly as such) and does " +"not refer to \"distributed shared memory\". This style of shared memory " +"permits distinct processes to potentially read and write to a common (or " +"shared) region of volatile memory. Processes are conventionally limited to " +"only have access to their own process memory space but shared memory permits" +" the sharing of data between processes, avoiding the need to instead send " +"messages between processes containing that data. Sharing data directly via " +"memory can provide significant performance benefits compared to sharing data" +" via disk or socket or other communications requiring the " +"serialization/deserialization and copying of data." +msgstr "" +"本模块中,共享内存是指 \"System V 类型\" 的共享内存块(虽然实现方式可能不完全一致)而不是 " +"“分布式共享内存”。这种类型的的共享内存允许不同进程读写一片公共(或者共享)的易失性存储区域。一般来说,进程被限制只能访问属于自己进程空间的内存,但是共享内存允许跨进程共享数据,从而避免通过进程间发送消息的形式传递数据。与通过磁盘、套接字或者其他要求序列化、反序列化和复制数据的共享形式相比,直接通过内存共享数据拥有更出色的性能。" + +#: ../../library/multiprocessing.shared_memory.rst:41 +msgid "" +"Creates a new shared memory block or attaches to an existing shared memory " +"block. Each shared memory block is assigned a unique name. In this way, one" +" process can create a shared memory block with a particular name and a " +"different process can attach to that same shared memory block using that " +"same name." +msgstr "" +"创建一个新的共享内存块或者连接到一片已经存在的共享内存块。每个共享内存块都被指定了一个全局唯一的名称。通过这种方式,进程可以使用一个特定的名字创建共享内存区块,然后其他进程使用同样的名字连接到这个共享内存块。" + +#: ../../library/multiprocessing.shared_memory.rst:47 +msgid "" +"As a resource for sharing data across processes, shared memory blocks may " +"outlive the original process that created them. When one process no longer " +"needs access to a shared memory block that might still be needed by other " +"processes, the :meth:`close()` method should be called. When a shared memory" +" block is no longer needed by any process, the :meth:`unlink()` method " +"should be called to ensure proper cleanup." +msgstr "" +"作为一种跨进程共享数据的方式,共享内存块的寿命可能超过创建它的原始进程。一个共享内存块可能同时被多个进程使用,当一个进程不再需要访问这个共享内存块的时候,应该调用" +" :meth:`close()` 方法。当一个共享内存块不被任何进程使用的时候,应该调用 :meth:`unlink()` 方法以保证必要的清理。" + +#: ../../library/multiprocessing.shared_memory.rst:54 +msgid "" +"*name* is the unique name for the requested shared memory, specified as a " +"string. When creating a new shared memory block, if ``None`` (the default) " +"is supplied for the name, a novel name will be generated." +msgstr "" +"*name* 是共享内存的唯一名称,字符串类型。如果创建一个新共享内存块的时候,名称指定为 ``None`` (默认值),将会随机产生一个新名称。" + +#: ../../library/multiprocessing.shared_memory.rst:58 +msgid "" +"*create* controls whether a new shared memory block is created (``True``) or" +" an existing shared memory block is attached (``False``)." +msgstr "*create* 指定创建一个新的共享内存块 (``True``) 还是连接到已存在的共享内存块 (``False``) 。" + +#: ../../library/multiprocessing.shared_memory.rst:61 +msgid "" +"*size* specifies the requested number of bytes when creating a new shared " +"memory block. Because some platforms choose to allocate chunks of memory " +"based upon that platform's memory page size, the exact size of the shared " +"memory block may be larger or equal to the size requested. When attaching " +"to an existing shared memory block, the ``size`` parameter is ignored." +msgstr "" +"如果是新创建共享内存块则 *size* " +"用于指定块的大小为多少字节。由于某些平台是以内存页大小为最小单位来分配内存的,最终得到的内存块大小可能大于或等于要求的大小。如果是连接到已经存在的共享内存块," +" ``size`` 参数会被忽略。" + +#: ../../library/multiprocessing.shared_memory.rst:69 +msgid "" +"Closes access to the shared memory from this instance. In order to ensure " +"proper cleanup of resources, all instances should call ``close()`` once the " +"instance is no longer needed. Note that calling ``close()`` does not cause " +"the shared memory block itself to be destroyed." +msgstr "" +"关闭实例对于共享内存的访问连接。所有实例确认自己不再需要使用共享内存的时候都应该调用 ``close()`` ,以保证必要的资源清理。调用 " +"``close()`` 并不会销毁共享内存区域。" + +#: ../../library/multiprocessing.shared_memory.rst:77 +msgid "" +"Requests that the underlying shared memory block be destroyed. In order to " +"ensure proper cleanup of resources, ``unlink()`` should be called once (and " +"only once) across all processes which have need for the shared memory block." +" After requesting its destruction, a shared memory block may or may not be " +"immediately destroyed and this behavior may differ across platforms. " +"Attempts to access data inside the shared memory block after ``unlink()`` " +"has been called may result in memory access errors. Note: the last process " +"relinquishing its hold on a shared memory block may call ``unlink()`` and " +":meth:`close()` in either order." +msgstr "" +"请求销毁底层的共享内存块。 为了执行必要的资源清理,在所有使用这个共享内存块的进程中,``unlink()`` 应该调用一次(且只能调用一次)。 " +"发出此销毁请求后,共享内存块可能会、也可能不会立即销毁,且此行为在不同操作系统之间可能不同。 调用 ``unlink()`` " +"后再尝试访问其中的数据可能导致内存错误。 注意:最后一个关闭共享内存访问权限的进程可以以任意顺序调用 ``unlink()`` 和 " +":meth:`close()`。" + +#: ../../library/multiprocessing.shared_memory.rst:90 +msgid "A memoryview of contents of the shared memory block." +msgstr "共享内存块内容的 memoryview 。" + +#: ../../library/multiprocessing.shared_memory.rst:94 +msgid "Read-only access to the unique name of the shared memory block." +msgstr "共享内存块的唯一标识,只读属性。" + +#: ../../library/multiprocessing.shared_memory.rst:98 +msgid "Read-only access to size in bytes of the shared memory block." +msgstr "共享内存块的字节大小,只读属性。" + +#: ../../library/multiprocessing.shared_memory.rst:101 +msgid "" +"The following example demonstrates low-level use of :class:`SharedMemory` " +"instances::" +msgstr "以下示例展示了 :class:`SharedMemory` 底层的用法::" + +#: ../../library/multiprocessing.shared_memory.rst:127 +msgid "" +"The following example demonstrates a practical use of the " +":class:`SharedMemory` class with `NumPy arrays `_, " +"accessing the same ``numpy.ndarray`` from two distinct Python shells:" +msgstr "" +"以下示例展示了一个现实中的例子,使用 :class:`SharedMemory` 类和 `NumPy arrays " +"`_ 结合, 从两个 Python shell 中访问同一个 ``numpy.ndarray`` :" + +#: ../../library/multiprocessing.shared_memory.rst:181 +msgid "" +"A subclass of :class:`~multiprocessing.managers.BaseManager` which can be " +"used for the management of shared memory blocks across processes." +msgstr ":class:`~multiprocessing.managers.BaseManager` 的子类,可用于管理跨进程的共享内存块。" + +#: ../../library/multiprocessing.shared_memory.rst:184 +msgid "" +"A call to :meth:`~multiprocessing.managers.BaseManager.start` on a " +":class:`SharedMemoryManager` instance causes a new process to be started. " +"This new process's sole purpose is to manage the life cycle of all shared " +"memory blocks created through it. To trigger the release of all shared " +"memory blocks managed by that process, call " +":meth:`~multiprocessing.managers.BaseManager.shutdown()` on the instance. " +"This triggers a :meth:`SharedMemory.unlink()` call on all of the " +":class:`SharedMemory` objects managed by that process and then stops the " +"process itself. By creating ``SharedMemory`` instances through a " +"``SharedMemoryManager``, we avoid the need to manually track and trigger the" +" freeing of shared memory resources." +msgstr "" +"调用 :class:`SharedMemoryManager` 实例上的 " +":meth:`~multiprocessing.managers.BaseManager.start` " +"方法会启动一个新进程。这个新进程的唯一目的就是管理所有由它创建的共享内存块的生命周期。想要释放此进程管理的所有共享内存块,可以调用实例的 " +":meth:`~multiprocessing.managers.BaseManager.shutdown()` 方法。这会触发执行它管理的所有 " +":class:`SharedMemory` 对象的 :meth:`SharedMemory.unlink()` 方法,然后停止这个进程。通过 " +"``SharedMemoryManager`` 创建 ``SharedMemory`` 实例,我们可以避免手动跟踪和释放共享内存资源。" + +#: ../../library/multiprocessing.shared_memory.rst:196 +msgid "" +"This class provides methods for creating and returning :class:`SharedMemory`" +" instances and for creating a list-like object (:class:`ShareableList`) " +"backed by shared memory." +msgstr "" +"这个类提供了创建和返回 :class:`SharedMemory` 实例的方法,以及以共享内存为基础创建一个列表类对象 " +"(:class:`ShareableList`) 的方法。" + +#: ../../library/multiprocessing.shared_memory.rst:200 +msgid "" +"Refer to :class:`multiprocessing.managers.BaseManager` for a description of " +"the inherited *address* and *authkey* optional input arguments and how they " +"may be used to connect to an existing ``SharedMemoryManager`` service from " +"other processes." +msgstr "" +"有关继承的可选输入参数 *address* 和 *authkey* 以及他们如何用于从进程连接已经存在的 " +"``SharedMemoryManager`` 服务,参见 " +":class:`multiprocessing.managers.BaseManager` 。" + +#: ../../library/multiprocessing.shared_memory.rst:207 +msgid "" +"Create and return a new :class:`SharedMemory` object with the specified " +"``size`` in bytes." +msgstr "使用 ``size`` 参数,创建一个新的指定字节大小的 :class:`SharedMemory` 对象并返回。" + +#: ../../library/multiprocessing.shared_memory.rst:212 +msgid "" +"Create and return a new :class:`ShareableList` object, initialized by the " +"values from the input ``sequence``." +msgstr "创建并返回一个新的 :class:`ShareableList` 对象,通过输入参数 ``sequence`` 初始化。" + +#: ../../library/multiprocessing.shared_memory.rst:216 +msgid "" +"The following example demonstrates the basic mechanisms of a " +":class:`SharedMemoryManager`:" +msgstr "下面的案例展示了 :class:`SharedMemoryManager` 的基本机制:" + +#: ../../library/multiprocessing.shared_memory.rst:234 +msgid "" +"The following example depicts a potentially more convenient pattern for " +"using :class:`SharedMemoryManager` objects via the :keyword:`with` statement" +" to ensure that all shared memory blocks are released after they are no " +"longer needed:" +msgstr "" +"以下案例展示了 :class:`SharedMemoryManager` 对象的一种可能更方便的使用方式,通过 :keyword:`with` " +"语句来保证所有共享内存块在使用完后被释放。" + +#: ../../library/multiprocessing.shared_memory.rst:253 +msgid "" +"When using a :class:`SharedMemoryManager` in a :keyword:`with` statement, " +"the shared memory blocks created using that manager are all released when " +"the :keyword:`with` statement's code block finishes execution." +msgstr "" +"在 :keyword:`with` 语句中使用 :class:`SharedMemoryManager`  " +"对象的时候,使用这个管理器创建的共享内存块会在 :keyword:`with` 语句代码块结束后被释放。" + +#: ../../library/multiprocessing.shared_memory.rst:260 +msgid "" +"Provides a mutable list-like object where all values stored within are " +"stored in a shared memory block. This constrains storable values to only " +"the ``int``, ``float``, ``bool``, ``str`` (less than 10M bytes each), " +"``bytes`` (less than 10M bytes each), and ``None`` built-in data types. It " +"also notably differs from the built-in ``list`` type in that these lists can" +" not change their overall length (i.e. no append, insert, etc.) and do not " +"support the dynamic creation of new :class:`ShareableList` instances via " +"slicing." +msgstr "" +"提供一个可修改的类 list 对象,其中所有值都存放在共享内存块中。这限制了可被存储在其中的值只能是 ``int``, ``float``, " +"``bool``, ``str`` (每条数据小于10M), ``bytes`` (每条数据小于10M)以及 ``None`` " +"这些内置类型。它另一个显著区别于内置 ``list`` 类型的地方在于它的长度无法修改(比如,没有 append, insert " +"等操作)且不支持通过切片操作动态创建新的 :class:`ShareableList`  实例。" + +#: ../../library/multiprocessing.shared_memory.rst:269 +msgid "" +"*sequence* is used in populating a new ``ShareableList`` full of values. Set" +" to ``None`` to instead attach to an already existing ``ShareableList`` by " +"its unique shared memory name." +msgstr "" +"*sequence* 会被用来为一个新的 ``ShareableList`` 填充值。 设为 ``None`` " +"则会基于唯一的共享内存名称关联到已经存在的 ``ShareableList``。" + +#: ../../library/multiprocessing.shared_memory.rst:273 +msgid "" +"*name* is the unique name for the requested shared memory, as described in " +"the definition for :class:`SharedMemory`. When attaching to an existing " +"``ShareableList``, specify its shared memory block's unique name while " +"leaving ``sequence`` set to ``None``." +msgstr "" +"*name* 是所请求的共享内存的唯一名称,与 :class:`SharedMemory` 的定义中所描述的一致。 当关联到现有的 " +"``ShareableList`` 时,则指明其共享内存块的唯一名称并将 ``sequence`` 设为 ``None``。" + +#: ../../library/multiprocessing.shared_memory.rst:280 +msgid "Returns the number of occurrences of ``value``." +msgstr "返回 ``value`` 出现的次数。" + +#: ../../library/multiprocessing.shared_memory.rst:284 +msgid "" +"Returns first index position of ``value``. Raises :exc:`ValueError` if " +"``value`` is not present." +msgstr "返回 ``value`` 首次出现的位置,如果 ``value`` 不存在, 则抛出 :exc:`ValueError` 异常。" + +#: ../../library/multiprocessing.shared_memory.rst:289 +msgid "" +"Read-only attribute containing the :mod:`struct` packing format used by all " +"currently stored values." +msgstr "包含由所有当前存储值所使用的 :mod:`struct` 打包格式的只读属性。" + +#: ../../library/multiprocessing.shared_memory.rst:294 +msgid "The :class:`SharedMemory` instance where the values are stored." +msgstr "存储了值的 :class:`SharedMemory` 实例。" + +#: ../../library/multiprocessing.shared_memory.rst:297 +msgid "" +"The following example demonstrates basic use of a :class:`ShareableList` " +"instance:" +msgstr "下面的例子演示了 :class:`ShareableList` 实例的基本用法:" + +#: ../../library/multiprocessing.shared_memory.rst:330 +msgid "" +"The following example depicts how one, two, or many processes may access the" +" same :class:`ShareableList` by supplying the name of the shared memory " +"block behind it:" +msgstr "下面的例子演示了一个、两个或多个进程如何通过提供下层的共享内存块名称来访问同一个 :class:`ShareableList`:" diff --git a/library/netdata.po b/library/netdata.po new file mode 100644 index 000000000..e84bab954 --- /dev/null +++ b/library/netdata.po @@ -0,0 +1,32 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) 2001-2022, Python Software Foundation +# This file is distributed under the same license as the Python package. +# FIRST AUTHOR , YEAR. +# +# Translators: +# 叶浚安 , 2019 +# +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: Python 3.9\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2022-11-04 14:34+0000\n" +"PO-Revision-Date: 2017-02-16 23:19+0000\n" +"Last-Translator: 叶浚安 , 2019\n" +"Language-Team: Chinese (China) (https://www.transifex.com/python-doc/teams/5390/zh_CN/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: zh_CN\n" +"Plural-Forms: nplurals=1; plural=0;\n" + +#: ../../library/netdata.rst:6 +msgid "Internet Data Handling" +msgstr "互联网数据处理" + +#: ../../library/netdata.rst:8 +msgid "" +"This chapter describes modules which support handling data formats commonly " +"used on the Internet." +msgstr "本章介绍了支持处理互联网上常用数据格式的模块。" diff --git a/library/netrc.po b/library/netrc.po new file mode 100644 index 000000000..0ac262f6d --- /dev/null +++ b/library/netrc.po @@ -0,0 +1,133 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) 2001-2022, Python Software Foundation +# This file is distributed under the same license as the Python package. +# FIRST AUTHOR , YEAR. +# +# Translators: +# Freesand Leo , 2020 +# +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: Python 3.9\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2022-11-04 14:34+0000\n" +"PO-Revision-Date: 2017-02-16 23:19+0000\n" +"Last-Translator: Freesand Leo , 2020\n" +"Language-Team: Chinese (China) (https://www.transifex.com/python-doc/teams/5390/zh_CN/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: zh_CN\n" +"Plural-Forms: nplurals=1; plural=0;\n" + +#: ../../library/netrc.rst:3 +msgid ":mod:`netrc` --- netrc file processing" +msgstr ":mod:`netrc` --- netrc 文件处理" + +#: ../../library/netrc.rst:11 +msgid "**Source code:** :source:`Lib/netrc.py`" +msgstr "**源代码:** :source:`Lib/netrc.py`" + +#: ../../library/netrc.rst:15 +msgid "" +"The :class:`~netrc.netrc` class parses and encapsulates the netrc file " +"format used by the Unix :program:`ftp` program and other FTP clients." +msgstr "" +":class:`~netrc.netrc` 类解析并封装了 Unix 的 :program:`ftp` 程序和其他 FTP 客户端所使用的 netrc " +"文件格式。" + +#: ../../library/netrc.rst:21 +msgid "" +"A :class:`~netrc.netrc` instance or subclass instance encapsulates data from" +" a netrc file. The initialization argument, if present, specifies the file" +" to parse. If no argument is given, the file :file:`.netrc` in the user's " +"home directory -- as determined by :func:`os.path.expanduser` -- will be " +"read. Otherwise, a :exc:`FileNotFoundError` exception will be raised. Parse" +" errors will raise :exc:`NetrcParseError` with diagnostic information " +"including the file name, line number, and terminating token. If no argument " +"is specified on a POSIX system, the presence of passwords in the " +":file:`.netrc` file will raise a :exc:`NetrcParseError` if the file " +"ownership or permissions are insecure (owned by a user other than the user " +"running the process, or accessible for read or write by any other user). " +"This implements security behavior equivalent to that of ftp and other " +"programs that use :file:`.netrc`." +msgstr "" +":class:`~netrc.netrc` 的实例或其子类的实例会被用来封装来自 netrc 文件的数据。 如果有初始化参数,它将指明要解析的文件。 " +"如果未给出参数,则位于用户家目录的 :file:`.netrc` 文件 -- 即 :func:`os.path.expanduser` 所确定的文件 " +"-- 将会被读取。 在其他情况下,则将引发 :exc:`FileNotFoundError` 异常。 解析错误将引发 " +":exc:`NetrcParseError` 并附带诊断信息,包括文件名、行号以及终止令牌。 如果在 POSIX 系统上未指明参数,则当 " +":file:`.netrc` 文件中有密码时,如果文件归属或权限不安全(归属的用户不是运行进程的用户,或者可供任何其他用户读取或写入)将引发 " +":exc:`NetrcParseError`。 这实现了与 ftp 和其他使用 :file:`.netrc` 的程序同等的安全行为。" + +#: ../../library/netrc.rst:35 +msgid "Added the POSIX permission check." +msgstr "添加了 POSIX 权限检查。" + +#: ../../library/netrc.rst:37 +msgid "" +":func:`os.path.expanduser` is used to find the location of the " +":file:`.netrc` file when *file* is not passed as argument." +msgstr "" +"当未将 *file* 作为参数传入时会使用 :func:`os.path.expanduser` 来查找 :file:`.netrc` 文件的位置。" + +#: ../../library/netrc.rst:44 +msgid "" +"Exception raised by the :class:`~netrc.netrc` class when syntactical errors " +"are encountered in source text. Instances of this exception provide three " +"interesting attributes: :attr:`msg` is a textual explanation of the error, " +":attr:`filename` is the name of the source file, and :attr:`lineno` gives " +"the line number on which the error was found." +msgstr "" +"当在源文本中遇到语法错误时由 :class:`~netrc.netrc` 类引发的异常。 此异常的实例提供了三个有用属性: :attr:`msg` " +"为错误的文本说明,:attr:`filename` 为源文件的名称,而 :attr:`lineno` 给出了错误所在的行号。" + +#: ../../library/netrc.rst:54 +msgid "netrc Objects" +msgstr "netrc 对象" + +#: ../../library/netrc.rst:56 +msgid "A :class:`~netrc.netrc` instance has the following methods:" +msgstr ":class:`~netrc.netrc` 实例具有下列方法:" + +#: ../../library/netrc.rst:61 +msgid "" +"Return a 3-tuple ``(login, account, password)`` of authenticators for " +"*host*. If the netrc file did not contain an entry for the given host, " +"return the tuple associated with the 'default' entry. If neither matching " +"host nor default entry is available, return ``None``." +msgstr "" +"针对 *host* 的身份验证者返回一个 3 元组 ``(login, account, password)``。 如果 netrc " +"文件不包含针对给定主机的条目,则返回关联到 'default' 条目的元组。 如果匹配的主机或默认条目均不可用,则返回 ``None``。" + +#: ../../library/netrc.rst:69 +msgid "" +"Dump the class data as a string in the format of a netrc file. (This " +"discards comments and may reorder the entries.)" +msgstr "将类数据以 netrc 文件的格式转储为一个字符串。 (这会丢弃注释并可能重排条目顺序。)" + +#: ../../library/netrc.rst:72 +msgid "Instances of :class:`~netrc.netrc` have public instance variables:" +msgstr ":class:`~netrc.netrc` 的实例具有一些公共实例变量:" + +#: ../../library/netrc.rst:77 +msgid "" +"Dictionary mapping host names to ``(login, account, password)`` tuples. The" +" 'default' entry, if any, is represented as a pseudo-host by that name." +msgstr "" +"将主机名映射到 ``(login, account, password)`` 元组的字典。 如果存在 'default' " +"条目,则会表示为使用该名称的伪主机。" + +#: ../../library/netrc.rst:83 +msgid "Dictionary mapping macro names to string lists." +msgstr "将宏名称映射到字符串列表的字典。" + +#: ../../library/netrc.rst:87 +msgid "" +"Passwords are limited to a subset of the ASCII character set. All ASCII " +"punctuation is allowed in passwords, however, note that whitespace and non-" +"printable characters are not allowed in passwords. This is a limitation of " +"the way the .netrc file is parsed and may be removed in the future." +msgstr "" +"密码会被限制为 ASCII 字符集的一个子集。 所有 ASCII 标点符号均可用作密码,但是要注意空白符和非打印字符不允许用作密码。 这是 .netrc" +" 文件解析方式带来的限制,在未来可能会被解除。" diff --git a/library/nis.po b/library/nis.po new file mode 100644 index 000000000..93e769049 --- /dev/null +++ b/library/nis.po @@ -0,0 +1,95 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) 2001-2024, Python Software Foundation +# This file is distributed under the same license as the Python package. +# FIRST AUTHOR , YEAR. +# +# Translators: +# Freesand Leo , 2022 +# Rafael Fontenelle , 2024 +# +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: Python 3.9\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2024-01-12 22:01+0000\n" +"PO-Revision-Date: 2017-02-16 23:19+0000\n" +"Last-Translator: Rafael Fontenelle , 2024\n" +"Language-Team: Chinese (China) (https://app.transifex.com/python-doc/teams/5390/zh_CN/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: zh_CN\n" +"Plural-Forms: nplurals=1; plural=0;\n" + +#: ../../library/nis.rst:3 +msgid ":mod:`nis` --- Interface to Sun's NIS (Yellow Pages)" +msgstr ":mod:`nis` --- Sun 的 NIS (黄页) 接口" + +#: ../../library/nis.rst:13 +msgid "" +"The :mod:`nis` module is deprecated (see :pep:`PEP 594 <594#nis>` for " +"details)." +msgstr ":mod:`nis` 模块已被弃用(请参阅 :pep:`PEP 594 <594#nis>` 了解详情)。" + +#: ../../library/nis.rst:19 +msgid "" +"The :mod:`nis` module gives a thin wrapper around the NIS library, useful " +"for central administration of several hosts." +msgstr ":mod:`nis` 模块提供了对 NIS 库的轻量级包装,适用于多个主机的集中管理。" + +#: ../../library/nis.rst:22 +msgid "" +"Because NIS exists only on Unix systems, this module is only available for " +"Unix." +msgstr "因为 NIS 仅存在于 Unix 系统,此模块仅在 Unix 上可用。" + +#: ../../library/nis.rst:24 +msgid "The :mod:`nis` module defines the following functions:" +msgstr ":mod:`nis` 模块定义了以下函数:" + +#: ../../library/nis.rst:29 +msgid "" +"Return the match for *key* in map *mapname*, or raise an error " +"(:exc:`nis.error`) if there is none. Both should be strings, *key* is 8-bit " +"clean. Return value is an arbitrary array of bytes (may contain ``NULL`` and" +" other joys)." +msgstr "" +"返回 *key* 在映射 *mapname* 中的匹配结果,如无结果则会引发错误 (:exc:`nis.error`)。 " +"两个参数都应为字符串,*key* 定长 8 个比特。 返回值为任意字节数组(可包含 ``NULL`` 和其他特殊值)。" + +#: ../../library/nis.rst:34 ../../library/nis.rst:46 +msgid "" +"Note that *mapname* is first checked if it is an alias to another name." +msgstr "请注意如果 *mapname* 是另一名称的别名则会先检查别名。" + +#: ../../library/nis.rst:36 ../../library/nis.rst:48 ../../library/nis.rst:56 +msgid "" +"The *domain* argument allows overriding the NIS domain used for the lookup. " +"If unspecified, lookup is in the default NIS domain." +msgstr "*domain* 参数可允许覆盖用于查找的 NIS 域。 如果未指定,则会在默认 NIS 域中查找。" + +#: ../../library/nis.rst:42 +msgid "" +"Return a dictionary mapping *key* to *value* such that ``match(key, " +"mapname)==value``. Note that both keys and values of the dictionary are " +"arbitrary arrays of bytes." +msgstr "" +"返回一个字典,其元素为 *key* 到 *value* 的映射使得 ``match(key, mapname)==value``。 " +"请注意字典的键和值均为任意字节数组。" + +#: ../../library/nis.rst:54 +msgid "Return a list of all valid maps." +msgstr "返回全部可用映射的列表。" + +#: ../../library/nis.rst:62 +msgid "Return the system default NIS domain." +msgstr "返回系统默认的 NIS 域。" + +#: ../../library/nis.rst:65 +msgid "The :mod:`nis` module defines the following exception:" +msgstr ":mod:`nis` 模块定义了以下异常:" + +#: ../../library/nis.rst:69 +msgid "An error raised when a NIS function returns an error code." +msgstr "当 NIS 函数返回一个错误码时引发的异常。" diff --git a/library/nntplib.po b/library/nntplib.po new file mode 100644 index 000000000..6d2d7cb23 --- /dev/null +++ b/library/nntplib.po @@ -0,0 +1,667 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) 2001-2022, Python Software Foundation +# This file is distributed under the same license as the Python package. +# FIRST AUTHOR , YEAR. +# +# Translators: +# Zombie110year , 2019 +# Dingyuan Wang , 2019 +# Arisaka97 , 2021 +# Freesand Leo , 2022 +# +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: Python 3.9\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2022-11-04 14:34+0000\n" +"PO-Revision-Date: 2017-02-16 23:20+0000\n" +"Last-Translator: Freesand Leo , 2022\n" +"Language-Team: Chinese (China) (https://www.transifex.com/python-doc/teams/5390/zh_CN/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: zh_CN\n" +"Plural-Forms: nplurals=1; plural=0;\n" + +#: ../../library/nntplib.rst:2 +msgid ":mod:`nntplib` --- NNTP protocol client" +msgstr ":mod:`nntplib` --- NNTP 协议客户端" + +#: ../../library/nntplib.rst:8 +msgid "**Source code:** :source:`Lib/nntplib.py`" +msgstr "**源代码:** :source:`Lib/nntplib.py`" + +#: ../../library/nntplib.rst:14 +msgid "The :mod:`nntplib` module is deprecated (see :pep:`594` for details)." +msgstr ":mod:`nntplib` 模块已被弃用(请参阅 :pep:`594` 了解详情)。" + +#: ../../library/nntplib.rst:19 +msgid "" +"This module defines the class :class:`NNTP` which implements the client side" +" of the Network News Transfer Protocol. It can be used to implement a news " +"reader or poster, or automated news processors. It is compatible with " +":rfc:`3977` as well as the older :rfc:`977` and :rfc:`2980`." +msgstr "" +"此模块定义了 :class:`NNTP` 类来实现网络新闻传输协议的客户端。 它可被用于实现一个新闻阅读或发布器,或是新闻自动处理程序。 它兼容了 " +":rfc:`3977` 以及较旧的 :rfc:`977` 和 :rfc:`2980`。" + +#: ../../library/nntplib.rst:24 +msgid "" +"Here are two small examples of how it can be used. To list some statistics " +"about a newsgroup and print the subjects of the last 10 articles::" +msgstr "下面是此模块的两个简单用法示例。 列出某个新闻组的一些统计数据并打印最近 10 篇文章的主题::" + +#: ../../library/nntplib.rst:48 +msgid "" +"To post an article from a binary file (this assumes that the article has " +"valid headers, and that you have right to post on the particular " +"newsgroup)::" +msgstr "要基于一个二进制文件发布文章 (假定文章包含有效的标头,并且你有在特定新闻组上发布内容的权限)::" + +#: ../../library/nntplib.rst:58 +msgid "The module itself defines the following classes:" +msgstr "此模块本身定义了以下的类:" + +#: ../../library/nntplib.rst:63 +msgid "" +"Return a new :class:`NNTP` object, representing a connection to the NNTP " +"server running on host *host*, listening at port *port*. An optional " +"*timeout* can be specified for the socket connection. If the optional *user*" +" and *password* are provided, or if suitable credentials are present in " +":file:`/.netrc` and the optional flag *usenetrc* is true, the ``AUTHINFO " +"USER`` and ``AUTHINFO PASS`` commands are used to identify and authenticate " +"the user to the server. If the optional flag *readermode* is true, then a " +"``mode reader`` command is sent before authentication is performed. Reader " +"mode is sometimes necessary if you are connecting to an NNTP server on the " +"local machine and intend to call reader-specific commands, such as " +"``group``. If you get unexpected :exc:`NNTPPermanentError`\\ s, you might " +"need to set *readermode*. The :class:`NNTP` class supports the " +":keyword:`with` statement to unconditionally consume :exc:`OSError` " +"exceptions and to close the NNTP connection when done, e.g.:" +msgstr "" +"返回一个新的 :class:`NNTP` 对象,代表一个对运行于主机 *host*,在端口 *port* 上监听的 NNTP 服务器的连接。 " +"可以为套接字连接指定可选的 *timeout*。 如果提供了可选的 *user* 和 *password*,或者如果在 :file:`/.netrc` " +"中存在适合的凭证并且可选的旗标 *usenetrc* 为真值,则会使用 ``AUTHINFO USER`` 和 ``AUTHINFO PASS`` " +"命令在服务器上标识和认证用户。 如果可选的旗标 *readermode* 为真值,则会在执行认证之前发送 ``mode reader`` 命令。 " +"在某些时候如果你是连接本地机器上的 NNTP 服务器并且想要调用读取者专属命令如 ``group`` 那么还必须使用读取者模式。 如果你收到预料之外的 " +":exc:`NNTPPermanentError`,你可能需要设置 *readermode*。 :class:`NNTP` 类支持使用 " +":keyword:`with` 语句来无条件地消费 :exc:`OSError` 异常并在结束时关闭 NNTP 连接,例如:" + +#: ../../library/nntplib.rst:86 ../../library/nntplib.rst:118 +msgid "" +"Raises an :ref:`auditing event ` ``nntplib.connect`` with " +"arguments ``self``, ``host``, ``port``." +msgstr "" +"引发一个 :ref:`审计事件 ` ``nntplib.connect`` 附带参数 ``self``, ``host``, " +"``port``。" + +#: ../../library/nntplib.rst:88 ../../library/nntplib.rst:120 +msgid "" +"Raises an :ref:`auditing event ` ``nntplib.putline`` with " +"arguments ``self``, ``line``." +msgstr "" +"引发一个 :ref:`审计事件 ` ``nntplib.putline``,附带参数 ``self``, ``line``。" + +#: ../../library/nntplib.rst:90 ../../library/nntplib.rst:122 +msgid "" +"All commands will raise an :ref:`auditing event ` " +"``nntplib.putline`` with arguments ``self`` and ``line``, where ``line`` is " +"the bytes about to be sent to the remote host." +msgstr "" +"所有命令都会引发一个 :ref:`审计事件 ` ``nntplib.putline``,附带参数 ``self`` 和 " +"``line``,其中 ``line`` 是即将发送到远程主机的字节串。" + +#: ../../library/nntplib.rst:94 +msgid "*usenetrc* is now ``False`` by default." +msgstr "*usenetrc* 现在默认为 ``False``。" + +#: ../../library/nntplib.rst:97 +msgid "Support for the :keyword:`with` statement was added." +msgstr "支持了 :keyword:`with` 语句。" + +#: ../../library/nntplib.rst:100 ../../library/nntplib.rst:133 +msgid "" +"If the *timeout* parameter is set to be zero, it will raise a " +":class:`ValueError` to prevent the creation of a non-blocking socket." +msgstr "如果 *timeout* 参数设置为 0,创建非阻塞套接字时,它将引发 :class:`ValueError` 来阻止该操作。" + +#: ../../library/nntplib.rst:106 +msgid "" +"Return a new :class:`NNTP_SSL` object, representing an encrypted connection " +"to the NNTP server running on host *host*, listening at port *port*. " +":class:`NNTP_SSL` objects have the same methods as :class:`NNTP` objects. " +"If *port* is omitted, port 563 (NNTPS) is used. *ssl_context* is also " +"optional, and is a :class:`~ssl.SSLContext` object. Please read :ref:`ssl-" +"security` for best practices. All other parameters behave the same as for " +":class:`NNTP`." +msgstr "" +"返回一个新的 :class:`NNTP_SSL` 对象,代表一个对运行于主机 *host*,在端口 *port* 上监听的 NNTP 服务器的连接。 " +":class:`NNTP_SSL` 对象具有与 :class:`NNTP` 对象相同的方法。 如果 *port* 被省略,则会使用端口 563 " +"(NNTPS)。 *ssl_context* 也是可选的,且为一个 :class:`~ssl.SSLContext` 对象。 请阅读 " +":ref:`ssl-security` 来了解最佳实践。 所有其他形参的行为都与 :class:`NNTP` 的相同。" + +#: ../../library/nntplib.rst:114 +msgid "" +"Note that SSL-on-563 is discouraged per :rfc:`4642`, in favor of STARTTLS as" +" described below. However, some servers only support the former." +msgstr "请注意 :rfc:`4642` 不再推荐使用 563 端口的 SSL,建议改用下文描述的 STARTTLS。 但是,某些服务器只支持前者。" + +#: ../../library/nntplib.rst:128 +msgid "" +"The class now supports hostname check with " +":attr:`ssl.SSLContext.check_hostname` and *Server Name Indication* (see " +":data:`ssl.HAS_SNI`)." +msgstr "" +"本类现在支持通过 :attr:`ssl.SSLContext.check_hostname` 和 *服务器名称提示* (参阅 " +":data:`ssl.HAS_SNI`)进行主机名检查。" + +#: ../../library/nntplib.rst:139 +msgid "" +"Derived from the standard exception :exc:`Exception`, this is the base class" +" for all exceptions raised by the :mod:`nntplib` module. Instances of this " +"class have the following attribute:" +msgstr "" +"派生自标准异常 :exc:`Exception`,这是 :mod:`nntplib` 模块中引发的所有异常的基类。 该类的实例具有以下属性:" + +#: ../../library/nntplib.rst:145 +msgid "The response of the server if available, as a :class:`str` object." +msgstr "可用的服务器响应,为一 :class:`str` 对象。" + +#: ../../library/nntplib.rst:150 +msgid "Exception raised when an unexpected reply is received from the server." +msgstr "从服务器收到意外答复时,将引发本异常。" + +#: ../../library/nntplib.rst:155 +msgid "" +"Exception raised when a response code in the range 400--499 is received." +msgstr "收到 400--499 范围内的响应代码时所引发的异常。" + +#: ../../library/nntplib.rst:160 +msgid "" +"Exception raised when a response code in the range 500--599 is received." +msgstr "收到 500--599 范围内的响应代码时所引发的异常。" + +#: ../../library/nntplib.rst:165 +msgid "" +"Exception raised when a reply is received from the server that does not " +"begin with a digit in the range 1--5." +msgstr "当从服务器收到不是以数字 1--5 开头的答复时所引发的异常。" + +#: ../../library/nntplib.rst:171 +msgid "Exception raised when there is some error in the response data." +msgstr "当响应数据中存在错误时所引发的异常。" + +#: ../../library/nntplib.rst:177 +msgid "NNTP Objects" +msgstr "NNTP 对象" + +#: ../../library/nntplib.rst:179 +msgid "" +"When connected, :class:`NNTP` and :class:`NNTP_SSL` objects support the " +"following methods and attributes." +msgstr "当连接时,:class:`NNTP` 和 :class:`NNTP_SSL` 对象支持以下方法和属性。" + +#: ../../library/nntplib.rst:183 +msgid "Attributes" +msgstr "属性" + +#: ../../library/nntplib.rst:187 +msgid "" +"An integer representing the version of the NNTP protocol supported by the " +"server. In practice, this should be ``2`` for servers advertising " +":rfc:`3977` compliance and ``1`` for others." +msgstr "" +"代表服务器所支持的 NNTP 协议版本的整数。 在实践中,这对声明遵循 :rfc:`3977` 的服务器应为 ``2`` 而对其他服务器则为 " +"``1``。" + +#: ../../library/nntplib.rst:195 +msgid "" +"A string describing the software name and version of the NNTP server, or " +":const:`None` if not advertised by the server." +msgstr "描述 NNTP 服务器软件名称和版本的字符串,如果服务器未声明此信息则为 :const:`None`。" + +#: ../../library/nntplib.rst:201 +msgid "Methods" +msgstr "方法" + +#: ../../library/nntplib.rst:203 +msgid "" +"The *response* that is returned as the first item in the return tuple of " +"almost all methods is the server's response: a string beginning with a " +"three-digit code. If the server's response indicates an error, the method " +"raises one of the above exceptions." +msgstr "" +"作为几乎全部方法所返回元组的第一项返回的 *response* 是服务器的响应:以三位数字代码打头的字符串。 " +"如果服务器的响应是提示错误,则方法将引发上述异常之一。" + +#: ../../library/nntplib.rst:208 +msgid "" +"Many of the following methods take an optional keyword-only argument *file*." +" When the *file* argument is supplied, it must be either a :term:`file " +"object` opened for binary writing, or the name of an on-disk file to be " +"written to. The method will then write any data returned by the server " +"(except for the response line and the terminating dot) to the file; any list" +" of lines, tuples or objects that the method normally returns will be empty." +msgstr "" +"以下方法中许多都接受一个可选的仅限关键字参数 *file*。 当提供了 *file* 参数时,它必须为打开用于二进制写入的 :term:`file " +"object`,或要写入的磁盘文件名称。 " +"此类方法随后将把服务器返回的任意数据(除了响应行和表示结束的点号)写入到文件中;此类方法通常返回的任何行列表、元组或对象都将为空值。" + +#: ../../library/nntplib.rst:215 +msgid "" +"Many of the following methods have been reworked and fixed, which makes them" +" incompatible with their 3.1 counterparts." +msgstr "以下方法中许多都已被重写和修正,这使得它们不再与 3.1 中的同名方法相兼容。" + +#: ../../library/nntplib.rst:222 +msgid "" +"Send a ``QUIT`` command and close the connection. Once this method has been" +" called, no other methods of the NNTP object should be called." +msgstr "发送 ``QUIT`` 命令并关闭连接。 一旦此方法被调用,NNTP 对象的其他方法都不应再被调用。" + +#: ../../library/nntplib.rst:228 +msgid "" +"Return the welcome message sent by the server in reply to the initial " +"connection. (This message sometimes contains disclaimers or help " +"information that may be relevant to the user.)" +msgstr "返回服务器发送的欢迎消息,作为连接开始的回复。(该消息有时包含与用户有关的免责声明或帮助信息。)" + +#: ../../library/nntplib.rst:235 +msgid "" +"Return the :rfc:`3977` capabilities advertised by the server, as a " +":class:`dict` instance mapping capability names to (possibly empty) lists of" +" values. On legacy servers which don't understand the ``CAPABILITIES`` " +"command, an empty dictionary is returned instead." +msgstr "" +"返回服务器所声明的 :rfc:`3977` 功能,其形式为将功能名称映射到(可能为空的)值列表的 :class:`dict` 实例。 在不能识别 " +"``CAPABILITIES`` 命令的旧式服务器上,会返回一个空字典。" + +#: ../../library/nntplib.rst:249 +msgid "" +"Send ``AUTHINFO`` commands with the user name and password. If *user* and " +"*password* are ``None`` and *usenetrc* is true, credentials from " +"``~/.netrc`` will be used if possible." +msgstr "" +"发送 ``AUTHINFO`` 命令并附带用户名和密码。 如果 *user* 和 *password* 为 ``None`` 且 *usenetrc* " +"为真值,则会在可能的情况下使用来自 ``~/.netrc`` 的凭证。" + +#: ../../library/nntplib.rst:253 +msgid "" +"Unless intentionally delayed, login is normally performed during the " +":class:`NNTP` object initialization and separately calling this function is " +"unnecessary. To force authentication to be delayed, you must not set *user*" +" or *password* when creating the object, and must set *usenetrc* to False." +msgstr "" +"除非被有意延迟,登录操作通常会在 :class:`NNTP` 对象初始化期间被执行因而没有必要单独调用此函数。 要强制延迟验证,你在创建该对象时不能设置" +" *user* 或 *password*,并必须将 *usenetrc* 设为 False。" + +#: ../../library/nntplib.rst:264 +msgid "" +"Send a ``STARTTLS`` command. This will enable encryption on the NNTP " +"connection. The *context* argument is optional and should be a " +":class:`ssl.SSLContext` object. Please read :ref:`ssl-security` for best " +"practices." +msgstr "" +"发送 ``STARTTLS`` 命令。 这将在 NNTP 连接上启用加密。 *context* 参数是可选的且应为 " +":class:`ssl.SSLContext` 对象。 请阅读 :ref:`ssl-security` 了解最佳实践。" + +#: ../../library/nntplib.rst:269 +msgid "" +"Note that this may not be done after authentication information has been " +"transmitted, and authentication occurs by default if possible during a " +":class:`NNTP` object initialization. See :meth:`NNTP.login` for information" +" on suppressing this behavior." +msgstr "" +"请注意此操作可能不会在传输验证信息之后立即完成,只要有可能验证默认会在 :class:`NNTP` 对象初始化期间发生。 请参阅 " +":meth:`NNTP.login` 了解有关如何屏蔽此行为的信息。" + +#: ../../library/nntplib.rst:276 +msgid "" +"The method now supports hostname check with " +":attr:`ssl.SSLContext.check_hostname` and *Server Name Indication* (see " +":data:`ssl.HAS_SNI`)." +msgstr "" +"此方法现在支持使用 :attr:`ssl.SSLContext.check_hostname` 和 *服务器名称指示* (参见 " +":data:`ssl.HAS_SNI`) 进行主机名检查。" + +#: ../../library/nntplib.rst:283 +msgid "" +"Send a ``NEWGROUPS`` command. The *date* argument should be a " +":class:`datetime.date` or :class:`datetime.datetime` object. Return a pair " +"``(response, groups)`` where *groups* is a list representing the groups that" +" are new since the given *date*. If *file* is supplied, though, then " +"*groups* will be empty." +msgstr "" +"发送 ``NEWGROUPS`` 命令。 *date* 参数应为 :class:`datetime.date` 或 " +":class:`datetime.datetime` 对象。 返回一个 ``(response, groups)`` 对,其中 *groups* " +"是代表给定i *date* 以来所新建的分组。 但是如果提供了 *file*,则 *groups* 将为空值。" + +#: ../../library/nntplib.rst:299 +msgid "" +"Send a ``NEWNEWS`` command. Here, *group* is a group name or ``'*'``, and " +"*date* has the same meaning as for :meth:`newgroups`. Return a pair " +"``(response, articles)`` where *articles* is a list of message ids." +msgstr "" +"发送 ``NEWNEWS`` 命令。 这里,*group* 是新闻组名称或为 ``'*'``,而 *date* 与 :meth:`newgroups` " +"中的含义相同。 返回一个 ``(response, articles)`` 对,其中 *articles* 为消息 ID 列表。" + +#: ../../library/nntplib.rst:303 +msgid "This command is frequently disabled by NNTP server administrators." +msgstr "此命令经常会被 NNTP 服务器管理员禁用。" + +#: ../../library/nntplib.rst:308 +msgid "" +"Send a ``LIST`` or ``LIST ACTIVE`` command. Return a pair ``(response, " +"list)`` where *list* is a list of tuples representing all the groups " +"available from this NNTP server, optionally matching the pattern string " +"*group_pattern*. Each tuple has the form ``(group, last, first, flag)``, " +"where *group* is a group name, *last* and *first* are the last and first " +"article numbers, and *flag* usually takes one of these values:" +msgstr "" +"发送 ``LIST`` 或 ``LIST ACTIVE`` 命令。 返回一个 ``(response, list)`` 对,其中 *list* 是代表此" +" NNTP 服务器上所有可用新闻组的元组列表,并可选择匹配模式字符串 *group_pattern*。 每个元组的形式为 ``(group, last," +" first, flag)``,其中 *group* 为新闻组名称,*last* 和 *first* 是最后一个和第一个文章的编号,而 *flag* " +"通常为下列值之一:" + +#: ../../library/nntplib.rst:316 +msgid "``y``: Local postings and articles from peers are allowed." +msgstr "``y``: 允许来自对等方的本地发帖和文章。" + +#: ../../library/nntplib.rst:317 +msgid "``m``: The group is moderated and all postings must be approved." +msgstr "``m``: 新闻组受到管制因而所有发帖必须经过审核。" + +#: ../../library/nntplib.rst:318 +msgid "``n``: No local postings are allowed, only articles from peers." +msgstr "``n``: 不允许本地发帖,只允许来自组员的文章。" + +#: ../../library/nntplib.rst:319 +msgid "``j``: Articles from peers are filed in the junk group instead." +msgstr "``j``: 来自组员的文章会被转入垃圾分组。" + +#: ../../library/nntplib.rst:320 +msgid "``x``: No local postings, and articles from peers are ignored." +msgstr "``x``: 不允许本地发帖,而来自组员的文章会被忽略。" + +#: ../../library/nntplib.rst:321 +msgid "``=foo.bar``: Articles are filed in the ``foo.bar`` group instead." +msgstr "``=foo.bar``: 文章会被转入 ``foo.bar`` 分组。" + +#: ../../library/nntplib.rst:323 +msgid "" +"If *flag* has another value, then the status of the newsgroup should be " +"considered unknown." +msgstr "如果 *flag* 具有其他值,则新闻组的状态应当被视为未知。" + +#: ../../library/nntplib.rst:326 +msgid "" +"This command can return very large results, especially if *group_pattern* is" +" not specified. It is best to cache the results offline unless you really " +"need to refresh them." +msgstr "此命令可能返回非常庞大的结果,特别是当未指明 *group_pattern* 的时候。 最好是离线缓存其结果,除非你确实需要刷新它们。" + +#: ../../library/nntplib.rst:330 +msgid "*group_pattern* was added." +msgstr "增加了 *group_pattern*。" + +#: ../../library/nntplib.rst:336 +msgid "" +"Send a ``LIST NEWSGROUPS`` command, where *grouppattern* is a wildmat string" +" as specified in :rfc:`3977` (it's essentially the same as DOS or UNIX shell" +" wildcard strings). Return a pair ``(response, descriptions)``, where " +"*descriptions* is a dictionary mapping group names to textual descriptions." +msgstr "" +"发送 ``LIST NEWSGROUPS`` 命令,其中 *grouppattern* 为 :rfc:`3977` 中规定的 wildmat " +"字符串(它实际上与 DOS 或 UNIX shell 通配字符串相同)。 返回一个 ``(response, descriptions)`` 对,其中 " +"*descriptions* 是将新闻组名称映射到文本描述的字典。" + +#: ../../library/nntplib.rst:350 +msgid "" +"Get a description for a single group *group*. If more than one group " +"matches (if 'group' is a real wildmat string), return the first match. If " +"no group matches, return an empty string." +msgstr "" +"获取单个新闻组 *group* 的描述。 如果匹配到一个以上的新闻组(如果 'group' 是一个真实的 wildmat " +"字符串),则返回第一个匹配结果。 如果未匹配到任何新闻组,则返回空字符串。" + +#: ../../library/nntplib.rst:354 +msgid "" +"This elides the response code from the server. If the response code is " +"needed, use :meth:`descriptions`." +msgstr "此方法略去了来自服务器的响应代码。 如果需要响应代码,请使用 :meth:`descriptions`。" + +#: ../../library/nntplib.rst:360 +msgid "" +"Send a ``GROUP`` command, where *name* is the group name. The group is " +"selected as the current group, if it exists. Return a tuple ``(response, " +"count, first, last, name)`` where *count* is the (estimated) number of " +"articles in the group, *first* is the first article number in the group, " +"*last* is the last article number in the group, and *name* is the group " +"name." +msgstr "" +"发送 ``GROUP`` 命令,其中 *name* 为新闻组名称。 该新闻组如果存在,则会被选定为当前新闻组。 返回一个元组 ``(response, " +"count, first, last, name)``,其中 *count* 是该新闻组中(估计的)文章数量,*first* " +"是新闻组中第一篇文章的编号,*last* 是新闻组中最后一篇文章的编号,而 *name* 是新闻组名称。" + +#: ../../library/nntplib.rst:370 +msgid "" +"Send an ``OVER`` command, or an ``XOVER`` command on legacy servers. " +"*message_spec* can be either a string representing a message id, or a " +"``(first, last)`` tuple of numbers indicating a range of articles in the " +"current group, or a ``(first, None)`` tuple indicating a range of articles " +"starting from *first* to the last article in the current group, or " +":const:`None` to select the current article in the current group." +msgstr "" +"发送 ``OVER`` 命令,或是旧式服务器上的 ``XOVER`` 命令。 *message_spec* 可以是表示消息 ID " +"的字符串,或是指明当前新闻组内文章范围的数字元组 ``(first, last)``,或是指明当前新闻组内从 ``(first, None)`` " +"*first* 到最后一篇文章的元组,或者为 :const:`None` 表示选定当前新闻组内的当前文章。" + +#: ../../library/nntplib.rst:377 +msgid "" +"Return a pair ``(response, overviews)``. *overviews* is a list of " +"``(article_number, overview)`` tuples, one for each article selected by " +"*message_spec*. Each *overview* is a dictionary with the same number of " +"items, but this number depends on the server. These items are either " +"message headers (the key is then the lower-cased header name) or metadata " +"items (the key is then the metadata name prepended with ``\":\"``). The " +"following items are guaranteed to be present by the NNTP specification:" +msgstr "" +"返回一个 ``(response, overviews)`` 对。 其中 *overviews* 是一个包含 ``(article_number, " +"overview)`` 元组的列表,每个元组对应 *message_spec* 所选定的一篇文章。 每个 *overview* " +"则是包含同样数量条目的字典,但具体数量取决于服务器。 这些条目或是为消息标头(对应键为小写的标头名称)或是为 metadata 项(对应键为以 " +"``\":\"`` 打头的 metadata 名称)。 以下条目会由 NNTP 规范描述来确保提供:" + +#: ../../library/nntplib.rst:385 +msgid "" +"the ``subject``, ``from``, ``date``, ``message-id`` and ``references`` " +"headers" +msgstr "``subject``, ``from``, ``date``, ``message-id`` 和 ``references`` 标头" + +#: ../../library/nntplib.rst:387 +msgid "" +"the ``:bytes`` metadata: the number of bytes in the entire raw article " +"(including headers and body)" +msgstr "``:bytes`` metadata: 整个原始文章数据的字节数(包括标头和消息体)" + +#: ../../library/nntplib.rst:389 +msgid "the ``:lines`` metadata: the number of lines in the article body" +msgstr "``:lines`` metadata: 文章消息体的行数" + +#: ../../library/nntplib.rst:391 +msgid "" +"The value of each item is either a string, or :const:`None` if not present." +msgstr "每个条目的值或者为字符串,或者在没有值时为 :const:`None`。" + +#: ../../library/nntplib.rst:393 +msgid "" +"It is advisable to use the :func:`decode_header` function on header values " +"when they may contain non-ASCII characters::" +msgstr "建议在标头值可能包含非 ASCII 字符的时候对其使用 :func:`decode_header` 函数::" + +#: ../../library/nntplib.rst:413 +msgid "" +"Send a ``HELP`` command. Return a pair ``(response, list)`` where *list* is" +" a list of help strings." +msgstr "发送 ``HELP`` 命令。 返回一个 ``(response, list)`` 对,其中 *list* 为帮助字符串列表。" + +#: ../../library/nntplib.rst:419 +msgid "" +"Send a ``STAT`` command, where *message_spec* is either a message id " +"(enclosed in ``'<'`` and ``'>'``) or an article number in the current group." +" If *message_spec* is omitted or :const:`None`, the current article in the " +"current group is considered. Return a triple ``(response, number, id)`` " +"where *number* is the article number and *id* is the message id." +msgstr "" +"发送 ``STAT`` 命令,其中 *message_spec* 为消息 ID (包裹在 ``'<'`` 和 ``'>'`` 中) " +"或者当前新闻组中的文章编号。 如果 *message_spec* 被省略或为 :const:`None`,则会选择当前新闻组中的当前文章。 " +"反回一个三元组 ``(response, number, id)``,其中 *number* 为文章编号而 *id* 为消息 ID。" + +#: ../../library/nntplib.rst:433 +msgid "Send a ``NEXT`` command. Return as for :meth:`.stat`." +msgstr "发送 ``NEXT`` 命令。 返回与 :meth:`.stat` 类似的结果。" + +#: ../../library/nntplib.rst:438 +msgid "Send a ``LAST`` command. Return as for :meth:`.stat`." +msgstr "发送 ``LAST`` 命令。 返回与 :meth:`.stat` 类似的结果。" + +#: ../../library/nntplib.rst:443 +msgid "" +"Send an ``ARTICLE`` command, where *message_spec* has the same meaning as " +"for :meth:`.stat`. Return a tuple ``(response, info)`` where *info* is a " +":class:`~collections.namedtuple` with three attributes *number*, " +"*message_id* and *lines* (in that order). *number* is the article number in" +" the group (or 0 if the information is not available), *message_id* the " +"message id as a string, and *lines* a list of lines (without terminating " +"newlines) comprising the raw message including headers and body." +msgstr "" +"发送 ``ARTICLE`` 命令,其中 *message_spec* 的含义与 :meth:`.stat` 中的相同。 返回一个元组 " +"``(response, info)``,其中 *info* 是一个 :class:`~collections.namedtuple`,包含三个属性 " +"*number*, *message_id* 和 *lines* (按此顺序)。 *number* 是新闻组中的文章数量 (或者如果该信息不可用则为 " +"0),*message_id* 为字符串形式的消息 ID,而 *lines* 为由包括标头和消息体的原始消息的行组成的列表 (不带末尾换行符)。" + +#: ../../library/nntplib.rst:468 +msgid "" +"Same as :meth:`article()`, but sends a ``HEAD`` command. The *lines* " +"returned (or written to *file*) will only contain the message headers, not " +"the body." +msgstr "" +"与 :meth:`article()` 类似,但会发送 ``HEAD`` 命令。 返回的 *lines* (或写入到 *file*) " +"将只包含消息标头,不包含消息体。" + +#: ../../library/nntplib.rst:475 +msgid "" +"Same as :meth:`article()`, but sends a ``BODY`` command. The *lines* " +"returned (or written to *file*) will only contain the message body, not the " +"headers." +msgstr "" +"与 :meth:`article()` 类似,但会发送 ``BODY`` 命令。 返回的 *lines* (或写入到 *file*) " +"将只包含消息体,不包含标头。" + +#: ../../library/nntplib.rst:482 +msgid "" +"Post an article using the ``POST`` command. The *data* argument is either a" +" :term:`file object` opened for binary reading, or any iterable of bytes " +"objects (representing raw lines of the article to be posted). It should " +"represent a well-formed news article, including the required headers. The " +":meth:`post` method automatically escapes lines beginning with ``.`` and " +"appends the termination line." +msgstr "" +"使用 ``POST`` 命令发布文章。 *data* 参数是以二进制读取模式打开的 :term:`file " +"object`,或是任意包含字节串对象的可迭代对象 (表示要发布的文章的原始行数据)。 它应当代表一篇适当格式的新闻组文章,包含所需的标头。 " +":meth:`post` 方法会自动对以 ``.`` 打头的行数据进行转义并添加结束行。" + +#: ../../library/nntplib.rst:489 +msgid "" +"If the method succeeds, the server's response is returned. If the server " +"refuses posting, a :class:`NNTPReplyError` is raised." +msgstr "如果此方法执行成功,将返回服务器的响应。 如果服务器拒绝响应,则会引发 :class:`NNTPReplyError`。" + +#: ../../library/nntplib.rst:495 +msgid "" +"Send an ``IHAVE`` command. *message_id* is the id of the message to send to " +"the server (enclosed in ``'<'`` and ``'>'``). The *data* parameter and the" +" return value are the same as for :meth:`post()`." +msgstr "" +"发送 ``IHAVE`` 命令。 *message_id* 为要发给服务器的消息 ID (包裹在 ``'<'`` 和 ``'>'`` 中)。 " +"*data* 形参和返回值与 :meth:`post()` 的一致。" + +#: ../../library/nntplib.rst:502 +msgid "" +"Return a pair ``(response, date)``. *date* is a :class:`~datetime.datetime`" +" object containing the current date and time of the server." +msgstr "" +"返回一个 ``(response, date)`` 对。 *date* 是包含服务器当前日期与时间的 " +":class:`~datetime.datetime` 对象。" + +#: ../../library/nntplib.rst:508 +msgid "Send a ``SLAVE`` command. Return the server's *response*." +msgstr "发送 ``SLAVE`` 命令。 返回服务器的 *响应*。" + +#: ../../library/nntplib.rst:513 +msgid "" +"Set the instance's debugging level. This controls the amount of debugging " +"output printed. The default, ``0``, produces no debugging output. A value " +"of ``1`` produces a moderate amount of debugging output, generally a single " +"line per request or response. A value of ``2`` or higher produces the " +"maximum amount of debugging output, logging each line sent and received on " +"the connection (including message text)." +msgstr "" +"设置实例的调试级别。 它控制着打印调试输出信息的数量。 默认值 ``0`` 不产生调试输出。 值 ``1`` " +"产生中等数量的调试输出,通常每个请求或响应各产生一行。 大于等于 ``2`` " +"的值产生最多的调试输出,在连接上发送和接收的每一行信息都会被记录下来(包括消息文本)。" + +#: ../../library/nntplib.rst:521 +msgid "" +"The following are optional NNTP extensions defined in :rfc:`2980`. Some of " +"them have been superseded by newer commands in :rfc:`3977`." +msgstr "以下是在 :rfc:`2980` 中定义的可选 NNTP 扩展。 其中一些已被 :rfc:`3977` 中的新命令所取代。" + +#: ../../library/nntplib.rst:527 +msgid "" +"Send an ``XHDR`` command. The *hdr* argument is a header keyword, e.g. " +"``'subject'``. The *str* argument should have the form ``'first-last'`` " +"where *first* and *last* are the first and last article numbers to search. " +"Return a pair ``(response, list)``, where *list* is a list of pairs ``(id, " +"text)``, where *id* is an article number (as a string) and *text* is the " +"text of the requested header for that article. If the *file* parameter is " +"supplied, then the output of the ``XHDR`` command is stored in a file. If " +"*file* is a string, then the method will open a file with that name, write " +"to it then close it. If *file* is a :term:`file object`, then it will start" +" calling :meth:`write` on it to store the lines of the command output. If " +"*file* is supplied, then the returned *list* is an empty list." +msgstr "" +"发送 ``XHDR`` 命令。 *hdr* 参数是标头关键字,例如 ``'subject'``。 *str* 参数的形式应为 ``'first-" +"last'``,其中 *first* 和 *last* 是要搜索的首篇和末篇文章编号。 返回一个 ``(response, list)`` 对,其中 " +"*list* 是 ``(id, text)`` 对的列表,其中 *id* 是文章编号(字符串类型)而 *text* 是该文章的请求标头。 如果提供了 " +"*file* 形参,则 ``XHDR`` 命令的输出会保存到文件中。 如果 *file* " +"为字符串,则此方法将打开指定名称的文件,向其写入内容并将其关闭。 如果 *file* 为 :term:`file object`,则将在该文件对象上调用" +" :meth:`write` 方法来保存命令所输出的行信息。 如果提供了 *file*,则返回的 *list* 将为空列表。" + +#: ../../library/nntplib.rst:542 +msgid "" +"Send an ``XOVER`` command. *start* and *end* are article numbers delimiting" +" the range of articles to select. The return value is the same of for " +":meth:`over()`. It is recommended to use :meth:`over()` instead, since it " +"will automatically use the newer ``OVER`` command if available." +msgstr "" +"发送 ``XOVER`` 命令。 *start* 和 *end* 是限制所选取文章范围的文章编号。 返回值与 :meth:`over()` 的相同。 " +"推荐改用 :meth:`over()`,因为它将在可能的情况下自动使用更新的 ``OVER`` 命令。" + +#: ../../library/nntplib.rst:550 +msgid "Utility functions" +msgstr "工具函数" + +#: ../../library/nntplib.rst:552 +msgid "The module also defines the following utility function:" +msgstr "这个模块还定义了下列工具函数:" + +#: ../../library/nntplib.rst:557 +msgid "" +"Decode a header value, un-escaping any escaped non-ASCII characters. " +"*header_str* must be a :class:`str` object. The unescaped value is " +"returned. Using this function is recommended to display some headers in a " +"human readable form::" +msgstr "" +"解码标头值,恢复任何被转义的非 ASCII 字符。 *header_str* 必须为 :class:`str` 对象。 将返回被恢复的值。 " +"推荐使用此函数来以人类可读的形式显示某些标头::" diff --git a/library/numbers.po b/library/numbers.po new file mode 100644 index 000000000..cfa1ba329 --- /dev/null +++ b/library/numbers.po @@ -0,0 +1,238 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) 2001-2022, Python Software Foundation +# This file is distributed under the same license as the Python package. +# FIRST AUTHOR , YEAR. +# +# Translators: +# 心韵 方 , 2019 +# Freesand Leo , 2021 +# +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: Python 3.9\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2022-11-04 14:34+0000\n" +"PO-Revision-Date: 2017-02-16 23:20+0000\n" +"Last-Translator: Freesand Leo , 2021\n" +"Language-Team: Chinese (China) (https://www.transifex.com/python-doc/teams/5390/zh_CN/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: zh_CN\n" +"Plural-Forms: nplurals=1; plural=0;\n" + +#: ../../library/numbers.rst:2 +msgid ":mod:`numbers` --- Numeric abstract base classes" +msgstr ":mod:`numbers` --- 数字的抽象基类" + +#: ../../library/numbers.rst:7 +msgid "**Source code:** :source:`Lib/numbers.py`" +msgstr "**源代码:** :source:`Lib/numbers.py`" + +#: ../../library/numbers.rst:11 +msgid "" +"The :mod:`numbers` module (:pep:`3141`) defines a hierarchy of numeric " +":term:`abstract base classes ` which progressively " +"define more operations. None of the types defined in this module are " +"intended to be instantiated." +msgstr "" +":mod:`numbers` 模块 (:pep:`3141`) 定义了数字 :term:`抽象基类 ` " +"的层级结构,其中逐级定义了更多操作。 此模块中定义的类型都不可被实例化。" + +#: ../../library/numbers.rst:18 +msgid "" +"The root of the numeric hierarchy. If you just want to check if an argument " +"*x* is a number, without caring what kind, use ``isinstance(x, Number)``." +msgstr "数字的层次结构的基础。 如果你只想确认参数 *x* 是不是数字而不关心其类型,则使用 ``isinstance(x, Number)``。" + +#: ../../library/numbers.rst:23 +msgid "The numeric tower" +msgstr "数字的层次" + +#: ../../library/numbers.rst:27 +msgid "" +"Subclasses of this type describe complex numbers and include the operations " +"that work on the built-in :class:`complex` type. These are: conversions to " +":class:`complex` and :class:`bool`, :attr:`.real`, :attr:`.imag`, ``+``, " +"``-``, ``*``, ``/``, ``**``, :func:`abs`, :meth:`conjugate`, ``==``, and " +"``!=``. All except ``-`` and ``!=`` are abstract." +msgstr "" +"这个类型的子类描述了复数并包括了适用于内置 :class:`complex` 类型的操作。 这些操作有: 转换为 :class:`complex` 和 " +":class:`bool`, :attr:`.real`, :attr:`.imag`, ``+``, ``-``, ``*``, ``/``, " +"``**``, :func:`abs`, :meth:`conjugate`, ``==`` 以及 ``!=``。 除 ``-`` 和 ``!=`` " +"之外所有操作都是抽象的。" + +#: ../../library/numbers.rst:35 +msgid "Abstract. Retrieves the real component of this number." +msgstr "抽象的。得到该数字的实数部分。" + +#: ../../library/numbers.rst:39 +msgid "Abstract. Retrieves the imaginary component of this number." +msgstr "抽象的。得到该数字的虚数部分。" + +#: ../../library/numbers.rst:43 +msgid "" +"Abstract. Returns the complex conjugate. For example, ``(1+3j).conjugate() " +"== (1-3j)``." +msgstr "抽象的。返回共轭复数。例如 ``(1+3j).conjugate() == (1-3j)``。" + +#: ../../library/numbers.rst:48 +msgid "" +"To :class:`Complex`, :class:`Real` adds the operations that work on real " +"numbers." +msgstr "相对于 :class:`Complex`,:class:`Real` 加入了只有实数才能进行的操作。" + +#: ../../library/numbers.rst:51 +msgid "" +"In short, those are: a conversion to :class:`float`, :func:`math.trunc`, " +":func:`round`, :func:`math.floor`, :func:`math.ceil`, :func:`divmod`, " +"``//``, ``%``, ``<``, ``<=``, ``>``, and ``>=``." +msgstr "" +"简单的说,它们是:转化至 :class:`float`,:func:`math.trunc`、 :func:`round`、 " +":func:`math.floor`、 :func:`math.ceil`、 :func:`divmod`、 ``//``、 ``%``、 ``<``、" +" ``<=``、 ``>``、 和 ``>=``。" + +#: ../../library/numbers.rst:55 +msgid "" +"Real also provides defaults for :func:`complex`, :attr:`~Complex.real`, " +":attr:`~Complex.imag`, and :meth:`~Complex.conjugate`." +msgstr "" +"实数同样默认支持 :func:`complex`、 :attr:`~Complex.real`、 :attr:`~Complex.imag` 和 " +":meth:`~Complex.conjugate`。" + +#: ../../library/numbers.rst:61 +msgid "" +"Subtypes :class:`Real` and adds :attr:`~Rational.numerator` and " +":attr:`~Rational.denominator` properties, which should be in lowest terms. " +"With these, it provides a default for :func:`float`." +msgstr "" +"子类型 :class:`Real` 并加入 :attr:`~Rational.numerator` 和 " +":attr:`~Rational.denominator` 两种属性,这两种属性应该属于最低的级别。加入后,这默认支持 :func:`float`。" + +#: ../../library/numbers.rst:68 ../../library/numbers.rst:72 +msgid "Abstract." +msgstr "抽象的。" + +#: ../../library/numbers.rst:77 +msgid "" +"Subtypes :class:`Rational` and adds a conversion to :class:`int`. Provides " +"defaults for :func:`float`, :attr:`~Rational.numerator`, and " +":attr:`~Rational.denominator`. Adds abstract methods for :func:`pow` with " +"modulus and bit-string operations: ``<<``, ``>>``, ``&``, ``^``, ``|``, " +"``~``." +msgstr "" +"子类型 :class:`Rational` 还增加了到 :class:`int` 的转换操作。 为 :func:`float`, " +":attr:`~Rational.numerator` 和 :attr:`~Rational.denominator` 提供了默认支持。 为 " +":func:`pow` 方法增加了求余和按位字符串运算的抽象方法: ``<<``, ``>>``, ``&``, ``^``, ``|``, " +"``~``。" + +#: ../../library/numbers.rst:85 +msgid "Notes for type implementors" +msgstr "类型接口注释。" + +#: ../../library/numbers.rst:87 +msgid "" +"Implementors should be careful to make equal numbers equal and hash them to " +"the same values. This may be subtle if there are two different extensions of" +" the real numbers. For example, :class:`fractions.Fraction` implements " +":func:`hash` as follows::" +msgstr "" +"实现者需要注意使相等的数字相等并拥有同样的值。当这两个数使用不同的扩展模块时,这其中的差异是很微妙的。例如,用 " +":class:`fractions.Fraction` 实现 :func:`hash` 如下::" + +#: ../../library/numbers.rst:106 +msgid "Adding More Numeric ABCs" +msgstr "加入更多数字的ABC" + +#: ../../library/numbers.rst:108 +msgid "" +"There are, of course, more possible ABCs for numbers, and this would be a " +"poor hierarchy if it precluded the possibility of adding those. You can add " +"``MyFoo`` between :class:`Complex` and :class:`Real` with::" +msgstr "" +"当然,这里有更多支持数字的ABC,如果不加入这些,就将缺少层次感。你可以用如下方法在 :class:`Complex` 和 :class:`Real` " +"中加入 ``MyFoo``::" + +#: ../../library/numbers.rst:120 +msgid "Implementing the arithmetic operations" +msgstr "实现算术运算" + +#: ../../library/numbers.rst:122 +msgid "" +"We want to implement the arithmetic operations so that mixed-mode operations" +" either call an implementation whose author knew about the types of both " +"arguments, or convert both to the nearest built in type and do the operation" +" there. For subtypes of :class:`Integral`, this means that :meth:`__add__` " +"and :meth:`__radd__` should be defined as::" +msgstr "" +"我们希望实现计算,因此,混合模式操作要么调用一个作者知道参数类型的实现,要么转变成为最接近的内置类型并对这个执行操作。对于子类 " +":class:`Integral`,这意味着 :meth:`__add__` 和 :meth:`__radd__` 必须用如下方式定义:" + +#: ../../library/numbers.rst:153 +msgid "" +"There are 5 different cases for a mixed-type operation on subclasses of " +":class:`Complex`. I'll refer to all of the above code that doesn't refer to " +"``MyIntegral`` and ``OtherTypeIKnowAbout`` as \"boilerplate\". ``a`` will be" +" an instance of ``A``, which is a subtype of :class:`Complex` (``a : A <: " +"Complex``), and ``b : B <: Complex``. I'll consider ``a + b``:" +msgstr "" +":class:`Complex` 有 5 种不同的混合类型的操作。 我将上面提到的所有代码作为“模板”称作 ``MyIntegral`` 和 " +"``OtherTypeIKnowAbout``。 ``a`` 是 :class:`Complex` 的子类型 ``A`` 的实例 (``a : A " +"<: Complex``),同时 ``b : B <: Complex``。 我将要计算 ``a + b``:" + +#: ../../library/numbers.rst:160 +msgid "If ``A`` defines an :meth:`__add__` which accepts ``b``, all is well." +msgstr "如果 ``A`` 被定义成一个承认 ``b`` 的 :meth:`__add__`,一切都没有问题。" + +#: ../../library/numbers.rst:162 +msgid "" +"If ``A`` falls back to the boilerplate code, and it were to return a value " +"from :meth:`__add__`, we'd miss the possibility that ``B`` defines a more " +"intelligent :meth:`__radd__`, so the boilerplate should return " +":const:`NotImplemented` from :meth:`__add__`. (Or ``A`` may not implement " +":meth:`__add__` at all.)" +msgstr "" +"如果 ``A`` 转回成“模板”失败,它将返回一个属于 :meth:`__add__` 的值,我们需要避免 ``B`` 定义了一个更加智能的 " +":meth:`__radd__`,因此模板需要返回一个属于 :meth:`__add__` 的 :const:`NotImplemented` 。(或者" +" ``A`` 可能完全不实现 :meth:`__add__` 。)" + +#: ../../library/numbers.rst:168 +msgid "" +"Then ``B``'s :meth:`__radd__` gets a chance. If it accepts ``a``, all is " +"well." +msgstr "接着看 ``B`` 的 :meth:`__radd__` 。如果它承认 ``a`` ,一切都没有问题。" + +#: ../../library/numbers.rst:170 +msgid "" +"If it falls back to the boilerplate, there are no more possible methods to " +"try, so this is where the default implementation should live." +msgstr "如果没有成功回退到模板,就没有更多的方法可以去尝试,因此这里将使用默认的实现。" + +#: ../../library/numbers.rst:173 +msgid "" +"If ``B <: A``, Python tries ``B.__radd__`` before ``A.__add__``. This is ok," +" because it was implemented with knowledge of ``A``, so it can handle those " +"instances before delegating to :class:`Complex`." +msgstr "" +"如果 ``B <: A`` , Python 在 ``A.__add__`` 之前尝试 ``B.__radd__`` 。 这是可行的,是通过对 " +"``A`` 的认识实现的,因此这可以在交给 :class:`Complex` 处理之前处理这些实例。" + +#: ../../library/numbers.rst:178 +msgid "" +"If ``A <: Complex`` and ``B <: Real`` without sharing any other knowledge, " +"then the appropriate shared operation is the one involving the built in " +":class:`complex`, and both :meth:`__radd__` s land there, so ``a+b == b+a``." +msgstr "" +"如果 ``A <: Complex`` 和 ``B <: Real`` 没有共享任何资源,那么适当的共享操作涉及内置的 :class:`complex`" +" ,并且分别获得 :meth:`__radd__` ,因此 ``a+b == b+a``。" + +#: ../../library/numbers.rst:183 +msgid "" +"Because most of the operations on any given type will be very similar, it " +"can be useful to define a helper function which generates the forward and " +"reverse instances of any given operator. For example, " +":class:`fractions.Fraction` uses::" +msgstr "" +"由于对任何一直类型的大部分操作是十分相似的,可以定义一个帮助函数,即一个生成后续或相反的实例的生成器。例如,使用 " +":class:`fractions.Fraction` 如下:" diff --git a/library/numeric.po b/library/numeric.po new file mode 100644 index 000000000..66ab21882 --- /dev/null +++ b/library/numeric.po @@ -0,0 +1,43 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) 2001-2022, Python Software Foundation +# This file is distributed under the same license as the Python package. +# FIRST AUTHOR , YEAR. +# +# Translators: +# zc Jin , 2018 +# Alpha Du , 2019 +# +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: Python 3.9\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2022-11-04 14:34+0000\n" +"PO-Revision-Date: 2017-02-16 23:20+0000\n" +"Last-Translator: Alpha Du , 2019\n" +"Language-Team: Chinese (China) (https://www.transifex.com/python-doc/teams/5390/zh_CN/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: zh_CN\n" +"Plural-Forms: nplurals=1; plural=0;\n" + +#: ../../library/numeric.rst:6 +msgid "Numeric and Mathematical Modules" +msgstr "数字和数学模块" + +#: ../../library/numeric.rst:8 +msgid "" +"The modules described in this chapter provide numeric and math-related " +"functions and data types. The :mod:`numbers` module defines an abstract " +"hierarchy of numeric types. The :mod:`math` and :mod:`cmath` modules contain" +" various mathematical functions for floating-point and complex numbers. The " +":mod:`decimal` module supports exact representations of decimal numbers, " +"using arbitrary precision arithmetic." +msgstr "" +"本章介绍的模块提供与数字和数学相关的函数和数据类型。 :mod:`numbers` 模块定义了数字类型的抽象层次结构。 :mod:`math` 和 " +":mod:`cmath` 模块包含浮点数和复数的各种数学函数。 :mod:`decimal` 模块支持使用任意精度算术的十进制数的精确表示。" + +#: ../../library/numeric.rst:15 +msgid "The following modules are documented in this chapter:" +msgstr "本章记录以下模块:" diff --git a/library/operator.po b/library/operator.po new file mode 100644 index 000000000..658f5f670 --- /dev/null +++ b/library/operator.po @@ -0,0 +1,848 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) 2001-2022, Python Software Foundation +# This file is distributed under the same license as the Python package. +# FIRST AUTHOR , YEAR. +# +# Translators: +# emrich , 2017 +# 叶浚安 , 2019 +# walkinrain , 2019 +# ruoyu zhang , 2019 +# Makdon , 2019 +# Shengjing Zhu , 2019 +# ppcfish , 2019 +# Freesand Leo , 2021 +# +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: Python 3.9\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2022-11-04 14:34+0000\n" +"PO-Revision-Date: 2017-02-16 23:20+0000\n" +"Last-Translator: Freesand Leo , 2021\n" +"Language-Team: Chinese (China) (https://www.transifex.com/python-doc/teams/5390/zh_CN/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: zh_CN\n" +"Plural-Forms: nplurals=1; plural=0;\n" + +#: ../../library/operator.rst:2 +msgid ":mod:`operator` --- Standard operators as functions" +msgstr ":mod:`operator` --- 标准运算符替代函数" + +#: ../../library/operator.rst:9 +msgid "**Source code:** :source:`Lib/operator.py`" +msgstr "**源代码:** :source:`Lib/operator.py`" + +#: ../../library/operator.rst:18 +msgid "" +"The :mod:`operator` module exports a set of efficient functions " +"corresponding to the intrinsic operators of Python. For example, " +"``operator.add(x, y)`` is equivalent to the expression ``x+y``. Many " +"function names are those used for special methods, without the double " +"underscores. For backward compatibility, many of these have a variant with " +"the double underscores kept. The variants without the double underscores are" +" preferred for clarity." +msgstr "" +":mod:`operator` 模块提供了一套与Python的内置运算符对应的高效率函数。例如,``operator.add(x, y)`` 与表达式 " +"``x+y`` 相同。 " +"许多函数名与特殊方法名相同,只是没有双下划线。为了向后兼容性,也保留了许多包含双下划线的函数。为了表述清楚,建议使用没有双下划线的函数。" + +#: ../../library/operator.rst:25 +msgid "" +"The functions fall into categories that perform object comparisons, logical " +"operations, mathematical operations and sequence operations." +msgstr "函数包含的种类有:对象的比较运算、逻辑运算、数学运算以及序列运算。" + +#: ../../library/operator.rst:28 +msgid "" +"The object comparison functions are useful for all objects, and are named " +"after the rich comparison operators they support:" +msgstr "对象比较函数适用于所有的对象,函数名根据它们对应的比较运算符命名。" + +#: ../../library/operator.rst:45 +msgid "" +"Perform \"rich comparisons\" between *a* and *b*. Specifically, ``lt(a, b)``" +" is equivalent to ``a < b``, ``le(a, b)`` is equivalent to ``a <= b``, " +"``eq(a, b)`` is equivalent to ``a == b``, ``ne(a, b)`` is equivalent to ``a " +"!= b``, ``gt(a, b)`` is equivalent to ``a > b`` and ``ge(a, b)`` is " +"equivalent to ``a >= b``. Note that these functions can return any value, " +"which may or may not be interpretable as a Boolean value. See " +":ref:`comparisons` for more information about rich comparisons." +msgstr "" +"在 *a* 和 *b* 之间进行全比较。具体的,``lt(a, b)`` 与 ``a < b`` 相同, ``le(a, b)`` 与 ``a <= " +"b`` 相同,``eq(a, b)`` 与 ``a == b`` 相同,``ne(a, b)`` 与 ``a != b`` 相同,``gt(a, " +"b)`` 与 ``a > b`` 相同,``ge(a, b)``与 ``a >= b`` " +"相同。注意这些函数可以返回任何值,无论它是否可当作布尔值。关于全比较的更多信息请参考 :ref:`comparisons` 。" + +#: ../../library/operator.rst:54 +msgid "" +"The logical operations are also generally applicable to all objects, and " +"support truth tests, identity tests, and boolean operations:" +msgstr "逻辑运算通常也适用于所有对象,并且支持真值检测、标识检测和布尔运算:" + +#: ../../library/operator.rst:61 +msgid "" +"Return the outcome of :keyword:`not` *obj*. (Note that there is no " +":meth:`__not__` method for object instances; only the interpreter core " +"defines this operation. The result is affected by the :meth:`__bool__` and " +":meth:`__len__` methods.)" +msgstr "" +"返回 :keyword:`not` *obj* 的结果。 (请注意对象实例并没有 :meth:`__not__` 方法;只有解释器核心可定义此操作。 " +"结果会受 :meth:`__bool__` 和 :meth:`__len__` 方法影响。)" + +#: ../../library/operator.rst:69 +msgid "" +"Return :const:`True` if *obj* is true, and :const:`False` otherwise. This " +"is equivalent to using the :class:`bool` constructor." +msgstr "" +"如果 *obj* 为真值则返回 :const:`True`,否则返回 :const:`False`。 这等价于使用 :class:`bool` 构造器。" + +#: ../../library/operator.rst:75 +msgid "Return ``a is b``. Tests object identity." +msgstr "返回 ``a is b``。 检测对象标识。" + +#: ../../library/operator.rst:80 +msgid "Return ``a is not b``. Tests object identity." +msgstr "返回 ``a is not b``。 检测对象标识。" + +#: ../../library/operator.rst:83 +msgid "The mathematical and bitwise operations are the most numerous:" +msgstr "数学和按位运算的种类是最多的:" + +#: ../../library/operator.rst:89 +msgid "Return the absolute value of *obj*." +msgstr "返回 *obj* 的绝对值。" + +#: ../../library/operator.rst:95 +msgid "Return ``a + b``, for *a* and *b* numbers." +msgstr "对于数字 *a* 和 *b*,返回 ``a + b``。" + +#: ../../library/operator.rst:101 +msgid "Return the bitwise and of *a* and *b*." +msgstr "返回 *x* 和 *y* 按位与的结果。" + +#: ../../library/operator.rst:107 +msgid "Return ``a // b``." +msgstr "返回 ``a // b``。" + +#: ../../library/operator.rst:113 +msgid "Return *a* converted to an integer. Equivalent to ``a.__index__()``." +msgstr "返回 *a* 转换为整数的结果。 等价于 ``a.__index__()``。" + +#: ../../library/operator.rst:121 +msgid "" +"Return the bitwise inverse of the number *obj*. This is equivalent to " +"``~obj``." +msgstr "返回数字 *obj* 按位取反的结果。 这等价于 ``~obj``。" + +#: ../../library/operator.rst:127 +msgid "Return *a* shifted left by *b*." +msgstr "返回 *a* 左移 *b* 位的结果。" + +#: ../../library/operator.rst:133 +msgid "Return ``a % b``." +msgstr "返回 ``a % b``。" + +#: ../../library/operator.rst:139 +msgid "Return ``a * b``, for *a* and *b* numbers." +msgstr "对于数字 *a* 和 *b*,返回 ``a * b``。" + +#: ../../library/operator.rst:145 +msgid "Return ``a @ b``." +msgstr "返回 ``a @ b``。" + +#: ../../library/operator.rst:153 +msgid "Return *obj* negated (``-obj``)." +msgstr "返回 *obj* 取负的结果 (``-obj``)。" + +#: ../../library/operator.rst:159 +msgid "Return the bitwise or of *a* and *b*." +msgstr "返回 *a* 和 *b* 按位或的结果。" + +#: ../../library/operator.rst:165 +msgid "Return *obj* positive (``+obj``)." +msgstr "返回 *obj* 取正的结果 (``+obj``)。" + +#: ../../library/operator.rst:171 +msgid "Return ``a ** b``, for *a* and *b* numbers." +msgstr "对于数字 *a* 和 *b*,返回 ``a ** b``。" + +#: ../../library/operator.rst:177 +msgid "Return *a* shifted right by *b*." +msgstr "返回 *a* 右移 *b* 位的结果。" + +#: ../../library/operator.rst:183 +msgid "Return ``a - b``." +msgstr "返回 ``a - b``。" + +#: ../../library/operator.rst:189 +msgid "" +"Return ``a / b`` where 2/3 is .66 rather than 0. This is also known as " +"\"true\" division." +msgstr "返回 ``a / b`` 例如 2/3 将等于 .66 而不是 0。 这也被称为“真”除法。" + +#: ../../library/operator.rst:196 +msgid "Return the bitwise exclusive or of *a* and *b*." +msgstr "返回 *a* 和 *b* 按位异或的结果。" + +#: ../../library/operator.rst:199 +msgid "" +"Operations which work with sequences (some of them with mappings too) " +"include:" +msgstr "适用于序列的操作(其中一些也适用于映射)包括:" + +#: ../../library/operator.rst:204 +msgid "Return ``a + b`` for *a* and *b* sequences." +msgstr "对于序列 *a* 和 *b*,返回 ``a + b``。" + +#: ../../library/operator.rst:210 +msgid "Return the outcome of the test ``b in a``. Note the reversed operands." +msgstr "返回 ``b in a`` 检测的结果。 请注意操作数是反序的。" + +#: ../../library/operator.rst:215 +msgid "Return the number of occurrences of *b* in *a*." +msgstr "返回 *b* 在 *a* 中的出现次数。" + +#: ../../library/operator.rst:221 +msgid "Remove the value of *a* at index *b*." +msgstr "移除 *a* 中索引号为 *b* 的值。" + +#: ../../library/operator.rst:227 +msgid "Return the value of *a* at index *b*." +msgstr "返回 *a* 中索引为 *b* 的值。" + +#: ../../library/operator.rst:232 +msgid "Return the index of the first of occurrence of *b* in *a*." +msgstr "返回 *b* 在 *a* 中首次出现所在的索引号。" + +#: ../../library/operator.rst:238 +msgid "Set the value of *a* at index *b* to *c*." +msgstr "将 *a* 中索引号为 *b* 的值设为 *c*。" + +#: ../../library/operator.rst:243 +msgid "" +"Return an estimated length for the object *o*. First try to return its " +"actual length, then an estimate using :meth:`object.__length_hint__`, and " +"finally return the default value." +msgstr "" +"返回对象 *o* 的估计长度。 首先尝试返回其实际长度,再使用 :meth:`object.__length_hint__` " +"得出估计值,最后返回默认值。" + +#: ../../library/operator.rst:249 +msgid "" +"The :mod:`operator` module also defines tools for generalized attribute and " +"item lookups. These are useful for making fast field extractors as " +"arguments for :func:`map`, :func:`sorted`, :meth:`itertools.groupby`, or " +"other functions that expect a function argument." +msgstr "" +":mod:`operator` 模块还定义了一些用于常规属性和条目查找的工具。 这些工具适合用来编写快速字段提取器作为 :func:`map`, " +":func:`sorted`, :meth:`itertools.groupby` 或其他需要相应函数参数的函数的参数。" + +#: ../../library/operator.rst:258 +msgid "" +"Return a callable object that fetches *attr* from its operand. If more than " +"one attribute is requested, returns a tuple of attributes. The attribute " +"names can also contain dots. For example:" +msgstr "返回一个可从操作数中获取 *attr* 的可调用对象。 如果请求了一个以上的属性,则返回一个属性元组。 属性名称还可包含点号。 例如:" + +#: ../../library/operator.rst:262 +msgid "" +"After ``f = attrgetter('name')``, the call ``f(b)`` returns ``b.name``." +msgstr "在 ``f = attrgetter('name')`` 之后,调用 ``f(b)`` 将返回 ``b.name``。" + +#: ../../library/operator.rst:264 +msgid "" +"After ``f = attrgetter('name', 'date')``, the call ``f(b)`` returns " +"``(b.name, b.date)``." +msgstr "" +"在 ``f = attrgetter('name', 'date')`` 之后,调用 ``f(b)`` 将返回 ``(b.name, " +"b.date)``。" + +#: ../../library/operator.rst:267 +msgid "" +"After ``f = attrgetter('name.first', 'name.last')``, the call ``f(b)`` " +"returns ``(b.name.first, b.name.last)``." +msgstr "" +"在 ``f = attrgetter('name.first', 'name.last')`` 之后,调用 ``f(b)`` 将返回 " +"``(b.name.first, b.name.last)``。" + +#: ../../library/operator.rst:270 ../../library/operator.rst:302 +#: ../../library/operator.rst:350 +msgid "Equivalent to::" +msgstr "等价于::" + +#: ../../library/operator.rst:293 +msgid "" +"Return a callable object that fetches *item* from its operand using the " +"operand's :meth:`__getitem__` method. If multiple items are specified, " +"returns a tuple of lookup values. For example:" +msgstr "" +"返回一个使用操作数的 :meth:`__getitem__` 方法从操作数中获取 *item* 的可调用对象。 " +"如果指定了多个条目,则返回一个查找值的元组。 例如:" + +#: ../../library/operator.rst:297 +msgid "After ``f = itemgetter(2)``, the call ``f(r)`` returns ``r[2]``." +msgstr "在 ``f = itemgetter(2)`` 之后,调用 ``f(r)`` 将返回 ``r[2]``。" + +#: ../../library/operator.rst:299 +msgid "" +"After ``g = itemgetter(2, 5, 3)``, the call ``g(r)`` returns ``(r[2], r[5], " +"r[3])``." +msgstr "" +"在 ``g = itemgetter(2, 5, 3)`` 之后,调用 ``g(r)`` 将返回 ``(r[2], r[5], r[3])``。" + +#: ../../library/operator.rst:314 +msgid "" +"The items can be any type accepted by the operand's :meth:`__getitem__` " +"method. Dictionaries accept any hashable value. Lists, tuples, and strings" +" accept an index or a slice:" +msgstr "" +"传入的条目可以为操作数的 :meth:`__getitem__` 所接受的任何类型。 字典接受任意可哈希的值。 列表、元组和字符串接受 index 或 " +"slice 对象:" + +#: ../../library/operator.rst:328 +msgid "" +"Example of using :func:`itemgetter` to retrieve specific fields from a tuple" +" record:" +msgstr "使用 :func:`itemgetter` 从元组的记录中提取特定字段的例子:" + +#: ../../library/operator.rst:341 +msgid "" +"Return a callable object that calls the method *name* on its operand. If " +"additional arguments and/or keyword arguments are given, they will be given " +"to the method as well. For example:" +msgstr "返回一个在操作数上调用 *name* 方法的可调用对象。 如果给出额外的参数和/或关键字参数,它们也将被传给该方法。 例如:" + +#: ../../library/operator.rst:345 +msgid "" +"After ``f = methodcaller('name')``, the call ``f(b)`` returns ``b.name()``." +msgstr "在 ``f = methodcaller('name')`` 之后,调用 ``f(b)`` 将返回 ``b.name()``。" + +#: ../../library/operator.rst:347 +msgid "" +"After ``f = methodcaller('name', 'foo', bar=1)``, the call ``f(b)`` returns " +"``b.name('foo', bar=1)``." +msgstr "" +"在 ``f = methodcaller('name', 'foo', bar=1)`` 之后,调用 ``f(b)`` 将返回 " +"``b.name('foo', bar=1)``。" + +#: ../../library/operator.rst:361 +msgid "Mapping Operators to Functions" +msgstr "将运算符映射到函数" + +#: ../../library/operator.rst:363 +msgid "" +"This table shows how abstract operations correspond to operator symbols in " +"the Python syntax and the functions in the :mod:`operator` module." +msgstr "以下表格显示了抽象运算是如何对应于 Python 语法中的运算符和 :mod:`operator` 模块中的函数的。" + +#: ../../library/operator.rst:367 +msgid "Operation" +msgstr "运算" + +#: ../../library/operator.rst:367 +msgid "Syntax" +msgstr "语法" + +#: ../../library/operator.rst:367 +msgid "Function" +msgstr "函数" + +#: ../../library/operator.rst:369 +msgid "Addition" +msgstr "加法" + +#: ../../library/operator.rst:369 +msgid "``a + b``" +msgstr "``a + b``" + +#: ../../library/operator.rst:369 +msgid "``add(a, b)``" +msgstr "``add(a, b)``" + +#: ../../library/operator.rst:371 +msgid "Concatenation" +msgstr "字符串拼接" + +#: ../../library/operator.rst:371 +msgid "``seq1 + seq2``" +msgstr "``seq1 + seq2``" + +#: ../../library/operator.rst:371 +msgid "``concat(seq1, seq2)``" +msgstr "``concat(seq1, seq2)``" + +#: ../../library/operator.rst:373 +msgid "Containment Test" +msgstr "包含测试" + +#: ../../library/operator.rst:373 +msgid "``obj in seq``" +msgstr "``obj in seq``" + +#: ../../library/operator.rst:373 +msgid "``contains(seq, obj)``" +msgstr "``contains(seq, obj)``" + +#: ../../library/operator.rst:375 ../../library/operator.rst:377 +msgid "Division" +msgstr "除法" + +#: ../../library/operator.rst:375 +msgid "``a / b``" +msgstr "``a / b``" + +#: ../../library/operator.rst:375 +msgid "``truediv(a, b)``" +msgstr "``truediv(a, b)``" + +#: ../../library/operator.rst:377 +msgid "``a // b``" +msgstr "``a // b``" + +#: ../../library/operator.rst:377 +msgid "``floordiv(a, b)``" +msgstr "``floordiv(a, b)``" + +#: ../../library/operator.rst:379 +msgid "Bitwise And" +msgstr "按位与" + +#: ../../library/operator.rst:379 +msgid "``a & b``" +msgstr "``a & b``" + +#: ../../library/operator.rst:379 +msgid "``and_(a, b)``" +msgstr "``and_(a, b)``" + +#: ../../library/operator.rst:381 +msgid "Bitwise Exclusive Or" +msgstr "按位异或" + +#: ../../library/operator.rst:381 +msgid "``a ^ b``" +msgstr "``a ^ b``" + +#: ../../library/operator.rst:381 +msgid "``xor(a, b)``" +msgstr "``xor(a, b)``" + +#: ../../library/operator.rst:383 +msgid "Bitwise Inversion" +msgstr "按位取反" + +#: ../../library/operator.rst:383 +msgid "``~ a``" +msgstr "``~ a``" + +#: ../../library/operator.rst:383 +msgid "``invert(a)``" +msgstr "``invert(a)``" + +#: ../../library/operator.rst:385 +msgid "Bitwise Or" +msgstr "按位或" + +#: ../../library/operator.rst:385 +msgid "``a | b``" +msgstr "``a | b``" + +#: ../../library/operator.rst:385 +msgid "``or_(a, b)``" +msgstr "``or_(a, b)``" + +#: ../../library/operator.rst:387 +msgid "Exponentiation" +msgstr "取幂" + +#: ../../library/operator.rst:387 +msgid "``a ** b``" +msgstr "``a ** b``" + +#: ../../library/operator.rst:387 +msgid "``pow(a, b)``" +msgstr "``pow(a, b)``" + +#: ../../library/operator.rst:389 ../../library/operator.rst:391 +msgid "Identity" +msgstr "标识" + +#: ../../library/operator.rst:389 +msgid "``a is b``" +msgstr "``a is b``" + +#: ../../library/operator.rst:389 +msgid "``is_(a, b)``" +msgstr "``is_(a, b)``" + +#: ../../library/operator.rst:391 +msgid "``a is not b``" +msgstr "``a is not b``" + +#: ../../library/operator.rst:391 +msgid "``is_not(a, b)``" +msgstr "``is_not(a, b)``" + +#: ../../library/operator.rst:393 +msgid "Indexed Assignment" +msgstr "索引赋值" + +#: ../../library/operator.rst:393 +msgid "``obj[k] = v``" +msgstr "``obj[k] = v``" + +#: ../../library/operator.rst:393 +msgid "``setitem(obj, k, v)``" +msgstr "``setitem(obj, k, v)``" + +#: ../../library/operator.rst:395 +msgid "Indexed Deletion" +msgstr "索引删除" + +#: ../../library/operator.rst:395 +msgid "``del obj[k]``" +msgstr "``del obj[k]``" + +#: ../../library/operator.rst:395 +msgid "``delitem(obj, k)``" +msgstr "``delitem(obj, k)``" + +#: ../../library/operator.rst:397 +msgid "Indexing" +msgstr "索引取值" + +#: ../../library/operator.rst:397 +msgid "``obj[k]``" +msgstr "``obj[k]``" + +#: ../../library/operator.rst:397 +msgid "``getitem(obj, k)``" +msgstr "``getitem(obj, k)``" + +#: ../../library/operator.rst:399 +msgid "Left Shift" +msgstr "左移" + +#: ../../library/operator.rst:399 +msgid "``a << b``" +msgstr "``a << b``" + +#: ../../library/operator.rst:399 +msgid "``lshift(a, b)``" +msgstr "``lshift(a, b)``" + +#: ../../library/operator.rst:401 +msgid "Modulo" +msgstr "取模" + +#: ../../library/operator.rst:401 +msgid "``a % b``" +msgstr "``a % b``" + +#: ../../library/operator.rst:401 +msgid "``mod(a, b)``" +msgstr "``mod(a, b)``" + +#: ../../library/operator.rst:403 +msgid "Multiplication" +msgstr "乘法" + +#: ../../library/operator.rst:403 +msgid "``a * b``" +msgstr "``a * b``" + +#: ../../library/operator.rst:403 +msgid "``mul(a, b)``" +msgstr "``mul(a, b)``" + +#: ../../library/operator.rst:405 +msgid "Matrix Multiplication" +msgstr "矩阵乘法" + +#: ../../library/operator.rst:405 +msgid "``a @ b``" +msgstr "``a @ b``" + +#: ../../library/operator.rst:405 +msgid "``matmul(a, b)``" +msgstr "``matmul(a, b)``" + +#: ../../library/operator.rst:407 +msgid "Negation (Arithmetic)" +msgstr "取反(算术)" + +#: ../../library/operator.rst:407 +msgid "``- a``" +msgstr "``- a``" + +#: ../../library/operator.rst:407 +msgid "``neg(a)``" +msgstr "``neg(a)``" + +#: ../../library/operator.rst:409 +msgid "Negation (Logical)" +msgstr "取反(逻辑)" + +#: ../../library/operator.rst:409 +msgid "``not a``" +msgstr "``not a``" + +#: ../../library/operator.rst:409 +msgid "``not_(a)``" +msgstr "``not_(a)``" + +#: ../../library/operator.rst:411 +msgid "Positive" +msgstr "正数" + +#: ../../library/operator.rst:411 +msgid "``+ a``" +msgstr "``+ a``" + +#: ../../library/operator.rst:411 +msgid "``pos(a)``" +msgstr "``pos(a)``" + +#: ../../library/operator.rst:413 +msgid "Right Shift" +msgstr "右移" + +#: ../../library/operator.rst:413 +msgid "``a >> b``" +msgstr "``a >> b``" + +#: ../../library/operator.rst:413 +msgid "``rshift(a, b)``" +msgstr "``rshift(a, b)``" + +#: ../../library/operator.rst:415 +msgid "Slice Assignment" +msgstr "切片赋值" + +#: ../../library/operator.rst:415 +msgid "``seq[i:j] = values``" +msgstr "``seq[i:j] = values``" + +#: ../../library/operator.rst:415 +msgid "``setitem(seq, slice(i, j), values)``" +msgstr "``setitem(seq, slice(i, j), values)``" + +#: ../../library/operator.rst:417 +msgid "Slice Deletion" +msgstr "切片删除" + +#: ../../library/operator.rst:417 +msgid "``del seq[i:j]``" +msgstr "``del seq[i:j]``" + +#: ../../library/operator.rst:417 +msgid "``delitem(seq, slice(i, j))``" +msgstr "``delitem(seq, slice(i, j))``" + +#: ../../library/operator.rst:419 +msgid "Slicing" +msgstr "切片取值" + +#: ../../library/operator.rst:419 +msgid "``seq[i:j]``" +msgstr "``seq[i:j]``" + +#: ../../library/operator.rst:419 +msgid "``getitem(seq, slice(i, j))``" +msgstr "``getitem(seq, slice(i, j))``" + +#: ../../library/operator.rst:421 +msgid "String Formatting" +msgstr "字符串格式化" + +#: ../../library/operator.rst:421 +msgid "``s % obj``" +msgstr "``s % obj``" + +#: ../../library/operator.rst:421 +msgid "``mod(s, obj)``" +msgstr "``mod(s, obj)``" + +#: ../../library/operator.rst:423 +msgid "Subtraction" +msgstr "减法" + +#: ../../library/operator.rst:423 +msgid "``a - b``" +msgstr "``a - b``" + +#: ../../library/operator.rst:423 +msgid "``sub(a, b)``" +msgstr "``sub(a, b)``" + +#: ../../library/operator.rst:425 +msgid "Truth Test" +msgstr "真值测试" + +#: ../../library/operator.rst:425 +msgid "``obj``" +msgstr "``obj``" + +#: ../../library/operator.rst:425 +msgid "``truth(obj)``" +msgstr "``truth(obj)``" + +#: ../../library/operator.rst:427 ../../library/operator.rst:429 +#: ../../library/operator.rst:435 ../../library/operator.rst:437 +msgid "Ordering" +msgstr "比较" + +#: ../../library/operator.rst:427 +msgid "``a < b``" +msgstr "``a < b``" + +#: ../../library/operator.rst:427 +msgid "``lt(a, b)``" +msgstr "``lt(a, b)``" + +#: ../../library/operator.rst:429 +msgid "``a <= b``" +msgstr "``a <= b``" + +#: ../../library/operator.rst:429 +msgid "``le(a, b)``" +msgstr "``le(a, b)``" + +#: ../../library/operator.rst:431 +msgid "Equality" +msgstr "相等" + +#: ../../library/operator.rst:431 +msgid "``a == b``" +msgstr "``a == b``" + +#: ../../library/operator.rst:431 +msgid "``eq(a, b)``" +msgstr "``eq(a, b)``" + +#: ../../library/operator.rst:433 +msgid "Difference" +msgstr "不等" + +#: ../../library/operator.rst:433 +msgid "``a != b``" +msgstr "``a != b``" + +#: ../../library/operator.rst:433 +msgid "``ne(a, b)``" +msgstr "``ne(a, b)``" + +#: ../../library/operator.rst:435 +msgid "``a >= b``" +msgstr "``a >= b``" + +#: ../../library/operator.rst:435 +msgid "``ge(a, b)``" +msgstr "``ge(a, b)``" + +#: ../../library/operator.rst:437 +msgid "``a > b``" +msgstr "``a > b``" + +#: ../../library/operator.rst:437 +msgid "``gt(a, b)``" +msgstr "``gt(a, b)``" + +#: ../../library/operator.rst:441 +msgid "In-place Operators" +msgstr "原地运算符" + +#: ../../library/operator.rst:443 +msgid "" +"Many operations have an \"in-place\" version. Listed below are functions " +"providing a more primitive access to in-place operators than the usual " +"syntax does; for example, the :term:`statement` ``x += y`` is equivalent to " +"``x = operator.iadd(x, y)``. Another way to put it is to say that ``z = " +"operator.iadd(x, y)`` is equivalent to the compound statement ``z = x; z += " +"y``." +msgstr "" +"许多运算都有“原地”版本。 以下列出的是提供对原地运算符相比通常语法更底层访问的函数,例如 :term:`statement` ``x += y`` " +"相当于 ``x = operator.iadd(x, y)``。 换一种方式来讲就是 ``z = operator.iadd(x, y)`` " +"等价于语句块 ``z = x; z += y``。" + +#: ../../library/operator.rst:450 +msgid "" +"In those examples, note that when an in-place method is called, the " +"computation and assignment are performed in two separate steps. The in-" +"place functions listed below only do the first step, calling the in-place " +"method. The second step, assignment, is not handled." +msgstr "" +"在这些例子中,请注意当调用一个原地方法时,运算和赋值是分成两个步骤来执行的。 下面列出的原地函数只执行第一步即调用原地方法。 第二步赋值则不加处理。" + +#: ../../library/operator.rst:455 +msgid "" +"For immutable targets such as strings, numbers, and tuples, the updated " +"value is computed, but not assigned back to the input variable:" +msgstr "对于不可变的目标例如字符串、数字和元组,更新的值会被计算,但不会被再被赋值给输入变量:" + +#: ../../library/operator.rst:464 +msgid "" +"For mutable targets such as lists and dictionaries, the in-place method will" +" perform the update, so no subsequent assignment is necessary:" +msgstr "对于可变的目标例如列表和字典,原地方法将执行更新,因此不需要后续赋值操作:" + +#: ../../library/operator.rst:476 +msgid "``a = iadd(a, b)`` is equivalent to ``a += b``." +msgstr "``a = iadd(a, b)`` 等价于 ``a += b``。" + +#: ../../library/operator.rst:482 +msgid "``a = iand(a, b)`` is equivalent to ``a &= b``." +msgstr "``a = iand(a, b)`` 等价于 ``a &= b``。" + +#: ../../library/operator.rst:488 +msgid "" +"``a = iconcat(a, b)`` is equivalent to ``a += b`` for *a* and *b* sequences." +msgstr "``a = iconcat(a, b)`` 等价于 ``a += b`` 其中 *a* 和 *b* 为序列。" + +#: ../../library/operator.rst:494 +msgid "``a = ifloordiv(a, b)`` is equivalent to ``a //= b``." +msgstr "``a = ifloordiv(a, b)`` 等价于 ``a //= b``。" + +#: ../../library/operator.rst:500 +msgid "``a = ilshift(a, b)`` is equivalent to ``a <<= b``." +msgstr "``a = ilshift(a, b)`` 等价于 ``a <<= b``。" + +#: ../../library/operator.rst:506 +msgid "``a = imod(a, b)`` is equivalent to ``a %= b``." +msgstr "``a = imod(a, b)`` 等价于 ``a %= b``。" + +#: ../../library/operator.rst:512 +msgid "``a = imul(a, b)`` is equivalent to ``a *= b``." +msgstr "``a = imul(a, b)`` 等价于 ``a *= b``。" + +#: ../../library/operator.rst:518 +msgid "``a = imatmul(a, b)`` is equivalent to ``a @= b``." +msgstr "``a = imatmul(a, b)`` 等价于 ``a @= b``。" + +#: ../../library/operator.rst:526 +msgid "``a = ior(a, b)`` is equivalent to ``a |= b``." +msgstr "``a = ior(a, b)`` 等价于 ``a |= b``。" + +#: ../../library/operator.rst:532 +msgid "``a = ipow(a, b)`` is equivalent to ``a **= b``." +msgstr "``a = ipow(a, b)`` 等价于 ``a **= b``。" + +#: ../../library/operator.rst:538 +msgid "``a = irshift(a, b)`` is equivalent to ``a >>= b``." +msgstr "``a = irshift(a, b)`` 等价于 ``a >>= b``。" + +#: ../../library/operator.rst:544 +msgid "``a = isub(a, b)`` is equivalent to ``a -= b``." +msgstr "``a = isub(a, b)`` 等价于 ``a -= b``。" + +#: ../../library/operator.rst:550 +msgid "``a = itruediv(a, b)`` is equivalent to ``a /= b``." +msgstr "``a = itruediv(a, b)`` 等价于 ``a /= b``。" + +#: ../../library/operator.rst:556 +msgid "``a = ixor(a, b)`` is equivalent to ``a ^= b``." +msgstr "``a = ixor(a, b)`` 等价于 ``a ^= b``。" diff --git a/library/optparse.po b/library/optparse.po new file mode 100644 index 000000000..2c2747b5a --- /dev/null +++ b/library/optparse.po @@ -0,0 +1,2794 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) 2001-2025, Python Software Foundation +# This file is distributed under the same license as the Python package. +# FIRST AUTHOR , YEAR. +# +# Translators: +# 操旭 , 2017 +# cdarlint , 2017 +# zeroswan , 2019 +# ppcfish , 2019 +# Freesand Leo , 2024 +# Rafael Fontenelle , 2025 +# +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: Python 3.9\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2025-02-07 16:40+0000\n" +"PO-Revision-Date: 2017-02-16 23:20+0000\n" +"Last-Translator: Rafael Fontenelle , 2025\n" +"Language-Team: Chinese (China) (https://app.transifex.com/python-doc/teams/5390/zh_CN/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: zh_CN\n" +"Plural-Forms: nplurals=1; plural=0;\n" + +#: ../../library/optparse.rst:2 +msgid ":mod:`optparse` --- Parser for command line options" +msgstr ":mod:`optparse` --- 命令行选项的解析器" + +#: ../../library/optparse.rst:11 +msgid "**Source code:** :source:`Lib/optparse.py`" +msgstr "**源代码:** :source:`Lib/optparse.py`" + +#: ../../library/optparse.rst:13 +msgid "" +"The :mod:`optparse` module is deprecated and will not be developed further; " +"development will continue with the :mod:`argparse` module." +msgstr ":mod:`optparse` 模块已被弃用并且将不再继续开发;开发将转至 :mod:`argparse` 模块进行。" + +#: ../../library/optparse.rst:19 +msgid "" +":mod:`optparse` is a more convenient, flexible, and powerful library for " +"parsing command-line options than the old :mod:`getopt` module. " +":mod:`optparse` uses a more declarative style of command-line parsing: you " +"create an instance of :class:`OptionParser`, populate it with options, and " +"parse the command line. :mod:`optparse` allows users to specify options in " +"the conventional GNU/POSIX syntax, and additionally generates usage and help" +" messages for you." +msgstr "" +":mod:`optparse` 是一个相比原有 :mod:`getopt` 模块更为方便、灵活和强大的命令行选项解析库。 :mod:`optparse`" +" 使用更为显明的命令行解析风格:创建一个 :class:`OptionParser` 的实例,向其中填充选项,然后解析命令行。 " +":mod:`optparse` 允许用户以传统的 GNU/POSIX 语法来指定选项,并为你生成额外的用法和帮助消息。" + +#: ../../library/optparse.rst:26 +msgid "Here's an example of using :mod:`optparse` in a simple script::" +msgstr "下面是在一个简单脚本中使用 :mod:`optparse` 的示例::" + +#: ../../library/optparse.rst:39 +msgid "" +"With these few lines of code, users of your script can now do the \"usual " +"thing\" on the command-line, for example::" +msgstr "通过这几行代码,你的脚本的用户可以在命令行上完成“常见任务”,例如::" + +#: ../../library/optparse.rst:44 +msgid "" +"As it parses the command line, :mod:`optparse` sets attributes of the " +"``options`` object returned by :meth:`parse_args` based on user-supplied " +"command-line values. When :meth:`parse_args` returns from parsing this " +"command line, ``options.filename`` will be ``\"outfile\"`` and " +"``options.verbose`` will be ``False``. :mod:`optparse` supports both long " +"and short options, allows short options to be merged together, and allows " +"options to be associated with their arguments in a variety of ways. Thus, " +"the following command lines are all equivalent to the above example::" +msgstr "" +"在它解析命令行时,:mod:`optparse` 会根据用户提供的命令行值设置 :meth:`parse_args` 所返回的 ``options`` " +"对象的属性。 当 :meth:`parse_args` 从解析此命令行返回时,``options.filename`` 将为 " +"``\"outfile\"`` 而 ``options.verbose`` 将为 ``False``。 :mod:`optparse` " +"支持长短两种形式的选项,允许多个短选项合并到一起,并允许选项以多种方式与其参数相关联。 因此,以下命令行均等价于以上示例::" + +#: ../../library/optparse.rst:58 +msgid "Additionally, users can run one of the following ::" +msgstr "此外,用户还可以运行以下命令之一 ::" + +#: ../../library/optparse.rst:63 +msgid "" +"and :mod:`optparse` will print out a brief summary of your script's options:" +msgstr "这样 :mod:`optparse` 将打印出你的脚本的选项概要:" + +#: ../../library/optparse.rst:74 +msgid "" +"where the value of *yourscript* is determined at runtime (normally from " +"``sys.argv[0]``)." +msgstr "其中 *yourscript* 的值是在运行时确定的 (通常来自 ``sys.argv[0]``)。" + +#: ../../library/optparse.rst:81 +msgid "Background" +msgstr "背景" + +#: ../../library/optparse.rst:83 +msgid "" +":mod:`optparse` was explicitly designed to encourage the creation of " +"programs with straightforward, conventional command-line interfaces. To " +"that end, it supports only the most common command-line syntax and semantics" +" conventionally used under Unix. If you are unfamiliar with these " +"conventions, read this section to acquaint yourself with them." +msgstr "" +":mod:`optparse` 被显式设计为鼓励创建带有简洁直观、符合惯例的命令行接口的程序。 为了这个目标,它仅支持最常见的命令行语法和在 Unix " +"下使用的规范语义。 如果你不熟悉这些惯例,请阅读本小节来使自己熟悉它们。" + +#: ../../library/optparse.rst:93 +msgid "Terminology" +msgstr "术语" + +#: ../../library/optparse.rst:104 +msgid "argument" +msgstr "argument -- 参数" + +#: ../../library/optparse.rst:96 +msgid "" +"a string entered on the command-line, and passed by the shell to ``execl()``" +" or ``execv()``. In Python, arguments are elements of ``sys.argv[1:]`` " +"(``sys.argv[0]`` is the name of the program being executed). Unix shells " +"also use the term \"word\"." +msgstr "" +"在命令行中输入的字符串,并会被 shell 传给 ``execl()`` 或 ``execv()``。 在 Python 中,参数将是 " +"``sys.argv[1:]`` 的元素 (``sys.argv[0]`` 是被执行的程序的名称)。 Unix shell 也使用术语 \"word\"" +" 来指代参数。" + +#: ../../library/optparse.rst:101 +msgid "" +"It is occasionally desirable to substitute an argument list other than " +"``sys.argv[1:]``, so you should read \"argument\" as \"an element of " +"``sys.argv[1:]``, or of some other list provided as a substitute for " +"``sys.argv[1:]``\"." +msgstr "" +"有时替换 ``sys.argv[1:]`` 以外的参数列表也是必要的,所以你应当将 \"参数\" 当作是 \"``sys.argv[1:]`` " +"的一个元素,或者是作为 ``sys.argv[1:]`` 的替代的其他列表\"。" + +#: ../../library/optparse.rst:134 +msgid "option" +msgstr "选项" + +#: ../../library/optparse.rst:107 +msgid "" +"an argument used to supply extra information to guide or customize the " +"execution of a program. There are many different syntaxes for options; the " +"traditional Unix syntax is a hyphen (\"-\") followed by a single letter, " +"e.g. ``-x`` or ``-F``. Also, traditional Unix syntax allows multiple " +"options to be merged into a single argument, e.g. ``-x -F`` is equivalent to" +" ``-xF``. The GNU project introduced ``--`` followed by a series of hyphen-" +"separated words, e.g. ``--file`` or ``--dry-run``. These are the only two " +"option syntaxes provided by :mod:`optparse`." +msgstr "" +"一个用来提供额外信息以指导或定制程序的执行的参数。 对于选项有许多不同的语法;传统的 Unix 语法是一个连字符 (\"-\") 后面跟单个字母,例如 " +"``-x`` 或 ``-F``。 此外,传统的 Unix 语法允许将多个选项合并为一个参数,例如 ``-x -F`` 就等价于 ``-xF``。 GNU" +" 项目引入了 ``--`` 后面跟一串以连字符分隔的单词,例如 ``--file`` 或 ``--dry-run``。 它们是 " +":mod:`optparse` 所提供的仅有的两种选项语法。" + +#: ../../library/optparse.rst:116 +msgid "Some other option syntaxes that the world has seen include:" +msgstr "存在于世上的其他一些选项语法包括:" + +#: ../../library/optparse.rst:118 +msgid "" +"a hyphen followed by a few letters, e.g. ``-pf`` (this is *not* the same as " +"multiple options merged into a single argument)" +msgstr "一个连字符后面跟几个字母,例如 ``-pf`` (这与多个选项合并成单个参数 *并不* 一样)" + +#: ../../library/optparse.rst:121 +msgid "" +"a hyphen followed by a whole word, e.g. ``-file`` (this is technically " +"equivalent to the previous syntax, but they aren't usually seen in the same " +"program)" +msgstr "一个连字符后面跟一个完整单词,例如 ``-file`` (这在技术上等同于前面的语法,但它们通常不在同一个程序中出现)" + +#: ../../library/optparse.rst:125 +msgid "" +"a plus sign followed by a single letter, or a few letters, or a word, e.g. " +"``+f``, ``+rgb``" +msgstr "一个加号后面跟一个字母,或几个字母,或一个单词,例如 ``+f``, ``+rgb``" + +#: ../../library/optparse.rst:128 +msgid "" +"a slash followed by a letter, or a few letters, or a word, e.g. ``/f``, " +"``/file``" +msgstr "一个斜杠后面跟一个字母,或几个字母,或一个单词,例如 ``/f``, ``/file``" + +#: ../../library/optparse.rst:131 +msgid "" +"These option syntaxes are not supported by :mod:`optparse`, and they never " +"will be. This is deliberate: the first three are non-standard on any " +"environment, and the last only makes sense if you're exclusively targeting " +"Windows or certain legacy platforms (e.g. VMS, MS-DOS)." +msgstr "" +"这些选项语法都不被 :mod:`optparse` 所支持,也永远不会支持。 这是有意为之的:前三种在任何环境下都是非标准的,而最后一种只在你专门针对 " +"Windows 或某些旧平台(例如 VMS, MS-DOS)时才有意义。" + +#: ../../library/optparse.rst:160 +msgid "option argument" +msgstr "可选参数:" + +#: ../../library/optparse.rst:137 +msgid "" +"an argument that follows an option, is closely associated with that option, " +"and is consumed from the argument list when that option is. With " +":mod:`optparse`, option arguments may either be in a separate argument from " +"their option:" +msgstr "" +"一个跟在某个选项之后的参数,与该选项紧密相关,并会在该选项被消耗时从参数列表中被消耗。 使用 " +":mod:`optparse`,选项参数可以是其对应选项以外的一个单独参数:" + +#: ../../library/optparse.rst:147 +msgid "or included in the same argument:" +msgstr "或是包括在同一个参数中:" + +#: ../../library/optparse.rst:154 +msgid "" +"Typically, a given option either takes an argument or it doesn't. Lots of " +"people want an \"optional option arguments\" feature, meaning that some " +"options will take an argument if they see it, and won't if they don't. This" +" is somewhat controversial, because it makes parsing ambiguous: if ``-a`` " +"takes an optional argument and ``-b`` is another option entirely, how do we " +"interpret ``-ab``? Because of this ambiguity, :mod:`optparse` does not " +"support this feature." +msgstr "" +"通常,一个给定的选项将接受一个参数或是不接受。 许多人想要“可选的可选参数”特性,即某些选项将在看到特定参数时接受它,而如果没看到特定参数则不接受。 " +"在某种程度上说这一特性是存在争议的,因它它将使解析发生歧义:如果 ``-a`` 接受一个可选参数而 ``-b`` " +"是完全不同的另一个选项,那我们该如何解读 ``-ab`` 呢? 由于这会存在歧义,因此 :mod:`optparse` 不支持这一特性。" + +#: ../../library/optparse.rst:165 +msgid "positional argument" +msgstr "positional argument -- 位置参数" + +#: ../../library/optparse.rst:163 +msgid "" +"something leftover in the argument list after options have been parsed, i.e." +" after options and their arguments have been parsed and removed from the " +"argument list." +msgstr "在解析选项之后,即在选项及其参数解析完成并从参数列表中移除后参数列表中余下的内容。" + +#: ../../library/optparse.rst:171 +msgid "required option" +msgstr "必选选项" + +#: ../../library/optparse.rst:168 +msgid "" +"an option that must be supplied on the command-line; note that the phrase " +"\"required option\" is self-contradictory in English. :mod:`optparse` " +"doesn't prevent you from implementing required options, but doesn't give you" +" much help at it either." +msgstr "" +"必须在命令行中提供的选项;请注意在英文中 \"required option\" 这个短语是自相矛盾的。 :mod:`optparse` " +"不会阻止你实现必须选项,但也不会在这方面给你什么帮助。" + +#: ../../library/optparse.rst:173 +msgid "For example, consider this hypothetical command-line::" +msgstr "例如,考虑这个假设的命令行::" + +#: ../../library/optparse.rst:177 +msgid "" +"``-v`` and ``--report`` are both options. Assuming that ``--report`` takes " +"one argument, ``report.txt`` is an option argument. ``foo`` and ``bar`` are" +" positional arguments." +msgstr "" +"``-v`` 和 ``--report`` 都是选项。 假定 ``--report`` 接受一个参数,``report.txt`` 是一个选项参数。 " +"``foo`` 和 ``bar`` 是位置参数。" + +#: ../../library/optparse.rst:185 +msgid "What are options for?" +msgstr "选项的作用是什么?" + +#: ../../library/optparse.rst:187 +msgid "" +"Options are used to provide extra information to tune or customize the " +"execution of a program. In case it wasn't clear, options are usually " +"*optional*. A program should be able to run just fine with no options " +"whatsoever. (Pick a random program from the Unix or GNU toolsets. Can it " +"run without any options at all and still make sense? The main exceptions " +"are ``find``, ``tar``, and ``dd``\\ ---all of which are mutant oddballs that" +" have been rightly criticized for their non-standard syntax and confusing " +"interfaces.)" +msgstr "" +"选项被用来提供额外信息以便微调或定制程序的执行。 需要明确的一点是,选项通常都是 *可选的*。 一个程序应当能在没有设置任何选项的的情况下正常运行。 " +"(从 Unix 或 GNU 工具集中随机挑选一个程序。 它是否能在未设置任何选项的情况下运行并且仍然得到有意义的结果? 主要的例外有 ``find``," +" ``tar`` 和 ``dd`` --- 它们都是些因为语法不标准和界面混乱而受到公正抨击的变异奇行种。)" + +#: ../../library/optparse.rst:195 +msgid "" +"Lots of people want their programs to have \"required options\". Think " +"about it. If it's required, then it's *not optional*! If there is a piece " +"of information that your program absolutely requires in order to run " +"successfully, that's what positional arguments are for." +msgstr "" +"有很多人希望他们的程序具有“必需选项”。 请再思考一下。 如果某个项是必需的,那么它就 *不是可选的*! " +"如果你的程序必需要有某项信息才能成功运行,则它更适合作为位置参数。" + +#: ../../library/optparse.rst:200 +msgid "" +"As an example of good command-line interface design, consider the humble " +"``cp`` utility, for copying files. It doesn't make much sense to try to " +"copy files without supplying a destination and at least one source. Hence, " +"``cp`` fails if you run it with no arguments. However, it has a flexible, " +"useful syntax that does not require any options at all::" +msgstr "" +"作为良好的命令行界面设计的一个例子,请看基本的用于拷贝文件的 ``cp`` 工具。 试图拷贝文件而不提供一个目标和至少一个源是没有什么意义的。 " +"因此,如果你不带参数地运行 ``cp`` 它将会报错。 不过,它具有一个完全不需要任何选项的灵活、易用的语法::" + +#: ../../library/optparse.rst:209 +msgid "" +"You can get pretty far with just that. Most ``cp`` implementations provide " +"a bunch of options to tweak exactly how the files are copied: you can " +"preserve mode and modification time, avoid following symlinks, ask before " +"clobbering existing files, etc. But none of this distracts from the core " +"mission of ``cp``, which is to copy either one file to another, or several " +"files to another directory." +msgstr "" +"你只使用这个语法就能畅行无阻。 大多数 ``cp`` " +"实现还提供了许多精确调整文件拷贝方式的选项:你可以保留模式和修改时间,避免跟随符号链接,覆盖现有文件之前先询问,诸如此类。 但这些都不会破坏 " +"``cp`` 的核心任务,即将一个文件拷贝为另一个文件,或将多个文件拷贝到另一个目录。" + +#: ../../library/optparse.rst:220 +msgid "What are positional arguments for?" +msgstr "位置参数有什么用?" + +#: ../../library/optparse.rst:222 +msgid "" +"Positional arguments are for those pieces of information that your program " +"absolutely, positively requires to run." +msgstr "位置参数是对于你的程序运行来说绝对、肯定需要的信息片段。" + +#: ../../library/optparse.rst:225 +msgid "" +"A good user interface should have as few absolute requirements as possible." +" If your program requires 17 distinct pieces of information in order to run" +" successfully, it doesn't much matter *how* you get that information from " +"the user---most people will give up and walk away before they successfully " +"run the program. This applies whether the user interface is a command-line," +" a configuration file, or a GUI: if you make that many demands on your " +"users, most of them will simply give up." +msgstr "" +"一个好的用户界面应当尽可能少地设置绝对必需提供的信息。 如果你的程序必需提供 17 项不同的信息片段才能成功运行,那么你要 *如何* " +"从用户获取这些信息将不是问题的关键 --- 大多数人会在他们成功运行此程序之前放弃并离开。 无论用户界面是命令行、配置文件还是 GUI " +"都一样适用:如果你对你的用户提出如此多的要求,它们大多将会直接放弃。" + +#: ../../library/optparse.rst:233 +msgid "" +"In short, try to minimize the amount of information that users are " +"absolutely required to supply---use sensible defaults whenever possible. Of" +" course, you also want to make your programs reasonably flexible. That's " +"what options are for. Again, it doesn't matter if they are entries in a " +"config file, widgets in the \"Preferences\" dialog of a GUI, or command-line" +" options---the more options you implement, the more flexible your program " +"is, and the more complicated its implementation becomes. Too much " +"flexibility has drawbacks as well, of course; too many options can overwhelm" +" users and make your code much harder to maintain." +msgstr "" +"简而言之,请尽量最小化绝对要求用户提供的信息量 --- 只要有可能就使用合理的默认值。 当然,你希望程序足够灵活也是合理的。 这就是选项的作用。 " +"同样,选项是配置文件中的条目,GUI 中的“首选项”对话框中的控件,还是命令行选项不是问题的关键 --- " +"你实现的选项越多,你的程序就越灵活,它的具体实现也会变得更为复杂。 当然,太大的灵活性也存在缺点;过多的选项会让用户更难掌握并使你的代码更难维护。" + +#: ../../library/optparse.rst:246 +msgid "Tutorial" +msgstr "教程" + +#: ../../library/optparse.rst:248 +msgid "" +"While :mod:`optparse` is quite flexible and powerful, it's also " +"straightforward to use in most cases. This section covers the code patterns" +" that are common to any :mod:`optparse`\\ -based program." +msgstr "" +"虽然 :mod:`optparse` 非常灵活和强大,但在大多数情况下它也很简明易用。 本小节介绍了任何基于 :mod:`optparse` " +"的程序中常见的代码模式。" + +#: ../../library/optparse.rst:252 +msgid "" +"First, you need to import the OptionParser class; then, early in the main " +"program, create an OptionParser instance::" +msgstr "首先,你需要导入 OptionParser 类;然后在主程序的开头部分,创建一个 OptionParser 实例::" + +#: ../../library/optparse.rst:259 +msgid "Then you can start defining options. The basic syntax is::" +msgstr "然后你可以开始定义选项。 基本语法如下::" + +#: ../../library/optparse.rst:264 +msgid "" +"Each option has one or more option strings, such as ``-f`` or ``--file``, " +"and several option attributes that tell :mod:`optparse` what to expect and " +"what to do when it encounters that option on the command line." +msgstr "" +"每个选项有一个或多个选项字符串,如 ``-f`` 或 ``--file``,以及一些选项属性用来告诉 :mod:`optparse` " +"当它在命令行中遇到该选项时将得到什么和需要做什么。" + +#: ../../library/optparse.rst:268 +msgid "" +"Typically, each option will have one short option string and one long option" +" string, e.g.::" +msgstr "通常,每个选项都会有一个短选项字符串和一个长选项字符串,例如 ::" + +#: ../../library/optparse.rst:273 +msgid "" +"You're free to define as many short option strings and as many long option " +"strings as you like (including zero), as long as there is at least one " +"option string overall." +msgstr "你可以随你的喜好自由定义任意数量的短选项字符串和任意数量的长选项字符串(包括零个),只要总计至少有一个选项字符串。" + +#: ../../library/optparse.rst:277 +msgid "" +"The option strings passed to :meth:`OptionParser.add_option` are effectively" +" labels for the option defined by that call. For brevity, we will " +"frequently refer to *encountering an option* on the command line; in " +"reality, :mod:`optparse` encounters *option strings* and looks up options " +"from them." +msgstr "" +"传给 :meth:`OptionParser.add_option` 的选项字符串实际上是特定调用所定义的选项的标签。 " +"为了表述简单,我们将经常会说在命令行中 *遇到一个选项*;而实际上,:mod:`optparse` 是遇到了 *选项字符串* 并根据它们来查找选项。" + +#: ../../library/optparse.rst:283 +msgid "" +"Once all of your options are defined, instruct :mod:`optparse` to parse your" +" program's command line::" +msgstr "一旦你定义好所有的选项,即可指令 :mod:`optparse` 来解析你的程序的命令行::" + +#: ../../library/optparse.rst:288 +msgid "" +"(If you like, you can pass a custom argument list to :meth:`parse_args`, but" +" that's rarely necessary: by default it uses ``sys.argv[1:]``.)" +msgstr "" +"(如果你愿意,你可以将自定义的参数列表传给 :meth:`parse_args`,但很少有必要这样做:默认它将使用 ``sys.argv[1:]``。)" + +#: ../../library/optparse.rst:291 +msgid ":meth:`parse_args` returns two values:" +msgstr ":meth:`parse_args` 返回两个值:" + +#: ../../library/optparse.rst:293 +msgid "" +"``options``, an object containing values for all of your options---e.g. if " +"``--file`` takes a single string argument, then ``options.file`` will be the" +" filename supplied by the user, or ``None`` if the user did not supply that " +"option" +msgstr "" +"``options``,一个包含你所有的选项的值的对象 --- 举例来说,如果 ``--file`` 接受一个字符串参数,则 " +"``options.file`` 将为用户所提供的文件名,或者如果用户未提供该选项则为 ``None``" + +#: ../../library/optparse.rst:298 +msgid "" +"``args``, the list of positional arguments leftover after parsing options" +msgstr "``args``,由解析选项之后余下的位置参数组成的列表" + +#: ../../library/optparse.rst:300 +msgid "" +"This tutorial section only covers the four most important option attributes:" +" :attr:`~Option.action`, :attr:`~Option.type`, :attr:`~Option.dest` " +"(destination), and :attr:`~Option.help`. Of these, :attr:`~Option.action` is" +" the most fundamental." +msgstr "" +"本教学章节只介绍了四个最重要的选项属性: :attr:`~Option.action`, :attr:`~Option.type`, " +":attr:`~Option.dest` (destination) 和 :attr:`~Option.help`。 " +"其中,:attr:`~Option.action` 是最基本的一个。" + +#: ../../library/optparse.rst:309 +msgid "Understanding option actions" +msgstr "理解选项动作" + +#: ../../library/optparse.rst:311 +msgid "" +"Actions tell :mod:`optparse` what to do when it encounters an option on the " +"command line. There is a fixed set of actions hard-coded into " +":mod:`optparse`; adding new actions is an advanced topic covered in section " +":ref:`optparse-extending-optparse`. Most actions tell :mod:`optparse` to " +"store a value in some variable---for example, take a string from the command" +" line and store it in an attribute of ``options``." +msgstr "" +"动作是告诉 :mod:`optparse` 当它在命令行中遇到某个选项时要做什么。 有一个固定的动作集被硬编码到 :mod:`optparse` " +"内部;添加新的动作是将在 :ref:`optparse-extending-optparse` 章节中介绍的进阶内容。 大多数动作都是告诉 " +":mod:`optparse` 将特定的值存储到某个变量中 --- 例如,从命令行接收一个字符串并将其存储到 ``options`` 的某个选项中。" + +#: ../../library/optparse.rst:318 +msgid "" +"If you don't specify an option action, :mod:`optparse` defaults to " +"``store``." +msgstr "如果你没有指定一个选项动作,:mod:`optparse` 将默认选择 ``store``。" + +#: ../../library/optparse.rst:324 +msgid "The store action" +msgstr "store 动作" + +#: ../../library/optparse.rst:326 +msgid "" +"The most common option action is ``store``, which tells :mod:`optparse` to " +"take the next argument (or the remainder of the current argument), ensure " +"that it is of the correct type, and store it to your chosen destination." +msgstr "" +"最常用的选项动作是 ``store``,它告诉 :mod:`optparse` " +"接收下一个参数(或当前参数的剩余部分),确认其为正确的类型,并将其保存至你选择的目标。" + +#: ../../library/optparse.rst:330 +msgid "For example::" +msgstr "例如:" + +#: ../../library/optparse.rst:335 +msgid "" +"Now let's make up a fake command line and ask :mod:`optparse` to parse it::" +msgstr "现在让我们编一个虚假的命令行并让 :mod:`optparse` 来解析它::" + +#: ../../library/optparse.rst:340 +msgid "" +"When :mod:`optparse` sees the option string ``-f``, it consumes the next " +"argument, ``foo.txt``, and stores it in ``options.filename``. So, after " +"this call to :meth:`parse_args`, ``options.filename`` is ``\"foo.txt\"``." +msgstr "" +"当 :mod:`optparse` 看到选项字符串 ``-f`` 时,它将获取下一个参数 ``foo.txt``,并将其保存到 " +"``options.filename`` 中。 因此,在这个对 :meth:`parse_args` " +"的调用之后,``options.filename`` 将为 ``\"foo.txt\"``。" + +#: ../../library/optparse.rst:344 +msgid "" +"Some other option types supported by :mod:`optparse` are ``int`` and " +"``float``. Here's an option that expects an integer argument::" +msgstr "受到 :mod:`optparse` 支持的其他一些选项类型有 ``int`` 和 ``float``。 下面是一个接受整数参数的选项::" + +#: ../../library/optparse.rst:349 +msgid "" +"Note that this option has no long option string, which is perfectly " +"acceptable. Also, there's no explicit action, since the default is " +"``store``." +msgstr "请注意这个选项没有长选项字符串,这是完全可接受的。 而且,它也没有显式的动作,因为使用默认的 ``store``。" + +#: ../../library/optparse.rst:352 +msgid "" +"Let's parse another fake command-line. This time, we'll jam the option " +"argument right up against the option: since ``-n42`` (one argument) is " +"equivalent to ``-n 42`` (two arguments), the code ::" +msgstr "" +"让我们解析另一个虚假的命令行。 这一次,我们将让选项参数与选项紧贴在一起:因为 ``-n42`` (一个参数) 与 ``-n 42`` (两个参数) " +"是等价的,以下代码 ::" + +#: ../../library/optparse.rst:359 +msgid "will print ``42``." +msgstr "将会打印 ``42``。" + +#: ../../library/optparse.rst:361 +msgid "" +"If you don't specify a type, :mod:`optparse` assumes ``string``. Combined " +"with the fact that the default action is ``store``, that means our first " +"example can be a lot shorter::" +msgstr "" +"如果你没有指明类型,:mod:`optparse` 会假定类型为 ``string``。 加上默认动作为 ``store`` " +"这一事实,意味着我们的第一个示例可以变得更加简短::" + +#: ../../library/optparse.rst:367 +msgid "" +"If you don't supply a destination, :mod:`optparse` figures out a sensible " +"default from the option strings: if the first long option string is ``--foo-" +"bar``, then the default destination is ``foo_bar``. If there are no long " +"option strings, :mod:`optparse` looks at the first short option string: the " +"default destination for ``-f`` is ``f``." +msgstr "" +"如果你没有提供目标,:mod:`optparse` 会从选项字符串推断出一个合理的默认目标:如果第一个长选项字符串为 ``--foo-" +"bar``,则默认目标为 ``foo_bar``。 如果没有长选项字符串,则 :mod:`optparse` 会查找第一个短选项字符串:针对 " +"``-f`` 的默认目标将为 ``f``。" + +#: ../../library/optparse.rst:373 +msgid "" +":mod:`optparse` also includes the built-in ``complex`` type. Adding types " +"is covered in section :ref:`optparse-extending-optparse`." +msgstr "" +":mod:`optparse` 还包括了内置的 ``complex`` 类型。 添加类型的方式将在 :ref:`optparse-extending-" +"optparse` 一节中介绍。" + +#: ../../library/optparse.rst:380 +msgid "Handling boolean (flag) options" +msgstr "处理布尔值(旗标)选项" + +#: ../../library/optparse.rst:382 +msgid "" +"Flag options---set a variable to true or false when a particular option is " +"seen---are quite common. :mod:`optparse` supports them with two separate " +"actions, ``store_true`` and ``store_false``. For example, you might have a " +"``verbose`` flag that is turned on with ``-v`` and off with ``-q``::" +msgstr "" +"旗标选项 --- 当看到特定选项时将某个变量设为真值或假值 --- 是相当常见的。 :mod:`optparse` " +"通过两个单独的动作支持它们,``store_true`` 和 ``store_false``。 例如,你可能会有个 ``verbose`` 旗标将通过 " +"``-v`` 来启用并通过 ``-q`` 来禁用::" + +#: ../../library/optparse.rst:390 +msgid "" +"Here we have two different options with the same destination, which is " +"perfectly OK. (It just means you have to be a bit careful when setting " +"default values---see below.)" +msgstr "这里我们有两个相同目标的不同选项,这是完全可行的。 (只是这意味着在设置默认值时你必须更加小心 --- 见下文所述。)" + +#: ../../library/optparse.rst:394 +msgid "" +"When :mod:`optparse` encounters ``-v`` on the command line, it sets " +"``options.verbose`` to ``True``; when it encounters ``-q``, " +"``options.verbose`` is set to ``False``." +msgstr "" +"当 :mod:`optparse` 在命令行中遇到 ``-v`` 时,它会将 ``options.verbose`` 设为 ``True``;当它遇到 " +"``-q`` 时,则会将 ``options.verbose`` 设为 ``False``。" + +#: ../../library/optparse.rst:402 +msgid "Other actions" +msgstr "其他动作" + +#: ../../library/optparse.rst:404 +msgid "Some other actions supported by :mod:`optparse` are:" +msgstr "受到 :mod:`optparse` 支持的其他动作还有:" + +#: ../../library/optparse.rst:407 ../../library/optparse.rst:928 +msgid "``\"store_const\"``" +msgstr "``\"store_const\"``" + +#: ../../library/optparse.rst:407 ../../library/optparse.rst:928 +msgid "store a constant value" +msgstr "" + +#: ../../library/optparse.rst:410 ../../library/optparse.rst:937 +msgid "``\"append\"``" +msgstr "``\"append\"``" + +#: ../../library/optparse.rst:410 ../../library/optparse.rst:937 +msgid "append this option's argument to a list" +msgstr "将此选项的参数添加到一个列表" + +#: ../../library/optparse.rst:413 ../../library/optparse.rst:943 +msgid "``\"count\"``" +msgstr "``\"count\"``" + +#: ../../library/optparse.rst:413 ../../library/optparse.rst:943 +msgid "increment a counter by one" +msgstr "让指定的计数器加一" + +#: ../../library/optparse.rst:416 ../../library/optparse.rst:946 +msgid "``\"callback\"``" +msgstr "``\"callback\"``" + +#: ../../library/optparse.rst:416 ../../library/optparse.rst:946 +msgid "call a specified function" +msgstr "调用指定函数" + +#: ../../library/optparse.rst:418 +msgid "" +"These are covered in section :ref:`optparse-reference-guide`, and section " +":ref:`optparse-option-callbacks`." +msgstr "" +"这些在 :ref:`optparse-reference-guide`,以及 :ref:`optparse-option-callbacks` " +"等章节中有说明。" + +#: ../../library/optparse.rst:425 +msgid "Default values" +msgstr "默认值" + +#: ../../library/optparse.rst:427 +msgid "" +"All of the above examples involve setting some variable (the " +"\"destination\") when certain command-line options are seen. What happens " +"if those options are never seen? Since we didn't supply any defaults, they " +"are all set to ``None``. This is usually fine, but sometimes you want more " +"control. :mod:`optparse` lets you supply a default value for each " +"destination, which is assigned before the command line is parsed." +msgstr "" +"上述示例全都涉及当看到特定命令行选项时设置某些变量(即“目标”)的操作。 " +"如果从未看到这些选项那么会发生什么叱?由于我们没有提供任何默认值,它们全都会被设为 ``None``。 这通常是可以的,但有时你会想要更多的控制。 " +":mod:`optparse` 允许你为每个目标提供默认值,它们将在解析命令行之前被赋值。" + +#: ../../library/optparse.rst:434 +msgid "" +"First, consider the verbose/quiet example. If we want :mod:`optparse` to " +"set ``verbose`` to ``True`` unless ``-q`` is seen, then we can do this::" +msgstr "" +"首先,考虑这个 verbose/quiet 示例。 如果我们希望 :mod:`optparse` 将 ``verbose`` 设为 ``True`` " +"除非看到了 ``-q``,那么我们可以这样做::" + +#: ../../library/optparse.rst:440 +msgid "" +"Since default values apply to the *destination* rather than to any " +"particular option, and these two options happen to have the same " +"destination, this is exactly equivalent::" +msgstr "由于默认值将应用到 *destination* 而不是任何特定选项,并且这两个选项正好具有相同的目标,因此这是完全等价的::" + +#: ../../library/optparse.rst:447 +msgid "Consider this::" +msgstr "考虑一下:" + +#: ../../library/optparse.rst:452 +msgid "" +"Again, the default value for ``verbose`` will be ``True``: the last default " +"value supplied for any particular destination is the one that counts." +msgstr "同样地,``verbose`` 的默认值将为 ``True``: 最终生效的将是最后提供给任何特定目标的默认值。" + +#: ../../library/optparse.rst:455 +msgid "" +"A clearer way to specify default values is the :meth:`set_defaults` method " +"of OptionParser, which you can call at any time before calling " +":meth:`parse_args`::" +msgstr "" +"一种更清晰的默认值指定方式是使用 OptionParser 的 :meth:`set_defaults` 方法,你可以在调用 " +":meth:`parse_args` 之前的任何时候调用它::" + +#: ../../library/optparse.rst:462 +msgid "" +"As before, the last value specified for a given option destination is the " +"one that counts. For clarity, try to use one method or the other of setting" +" default values, not both." +msgstr "如前面一样,最终生效的将是最后为特定选项目标指定的值。 为清楚起见,请使用一种或另外一种设置默认值的方法,而不要同时使用。" + +#: ../../library/optparse.rst:470 +msgid "Generating help" +msgstr "生成帮助" + +#: ../../library/optparse.rst:472 +msgid "" +":mod:`optparse`'s ability to generate help and usage text automatically is " +"useful for creating user-friendly command-line interfaces. All you have to " +"do is supply a :attr:`~Option.help` value for each option, and optionally a " +"short usage message for your whole program. Here's an OptionParser " +"populated with user-friendly (documented) options::" +msgstr "" +":mod:`optparse` 自动生成帮助和用法文本的功能适用于创建用户友好的命令行界面。 你所要做的只是为每个选项提供 " +":attr:`~Option.help` 值,并可选项为你的整个程序提供一条简短的用法消息。 下面是一个填充了用户友好的(文档)选项的 " +"OptionParser::" + +#: ../../library/optparse.rst:493 +msgid "" +"If :mod:`optparse` encounters either ``-h`` or ``--help`` on the command-" +"line, or if you just call :meth:`parser.print_help`, it prints the following" +" to standard output:" +msgstr "" +"如果 :mod:`optparse` 在命令行中遇到了 ``-h`` 或 ``--help``,或者如果你调用了 " +":meth:`parser.print_help`,它会把以下内容打印到标准输出:" + +#: ../../library/optparse.rst:510 +msgid "" +"(If the help output is triggered by a help option, :mod:`optparse` exits " +"after printing the help text.)" +msgstr "(如果帮助输出是由 help 选项触发的,:mod:`optparse` 将在打印帮助文本之后退出。)" + +#: ../../library/optparse.rst:513 +msgid "" +"There's a lot going on here to help :mod:`optparse` generate the best " +"possible help message:" +msgstr "在这里为帮助 :mod:`optparse` 生成尽可能好的帮助消息做了很多工作:" + +#: ../../library/optparse.rst:516 +msgid "the script defines its own usage message::" +msgstr "该脚本定义了自己的用法消息::" + +#: ../../library/optparse.rst:520 +msgid "" +":mod:`optparse` expands ``%prog`` in the usage string to the name of the " +"current program, i.e. ``os.path.basename(sys.argv[0])``. The expanded " +"string is then printed before the detailed option help." +msgstr "" +":mod:`optparse` 会将用法字符串中的 ``%prog`` 扩展为当前程序的名称,即 " +"``os.path.basename(sys.argv[0])``。 随后将在详细选项帮助之前打印这个经过扩展的字符串。" + +#: ../../library/optparse.rst:524 +msgid "" +"If you don't supply a usage string, :mod:`optparse` uses a bland but " +"sensible default: ``\"Usage: %prog [options]\"``, which is fine if your " +"script doesn't take any positional arguments." +msgstr "" +"如果你未提供用法字符串,:mod:`optparse` 将使用一个直白而合理的默认值: ``\"Usage: %prog " +"[options]\"``,这在你的脚本不接受任何位置参数时是可以的。" + +#: ../../library/optparse.rst:528 +msgid "" +"every option defines a help string, and doesn't worry about line-" +"wrapping---\\ :mod:`optparse` takes care of wrapping lines and making the " +"help output look good." +msgstr "每个选项都定义了帮助字符串,并且不用担心换行问题 --- :mod:`optparse` 将负责执行换行并使帮助输出有良好的外观格式。" + +#: ../../library/optparse.rst:532 +msgid "" +"options that take a value indicate this fact in their automatically-" +"generated help message, e.g. for the \"mode\" option::" +msgstr "" + +#: ../../library/optparse.rst:537 +msgid "" +"Here, \"MODE\" is called the meta-variable: it stands for the argument that " +"the user is expected to supply to ``-m``/``--mode``. By default, " +":mod:`optparse` converts the destination variable name to uppercase and uses" +" that for the meta-variable. Sometimes, that's not what you want---for " +"example, the ``--filename`` option explicitly sets ``metavar=\"FILE\"``, " +"resulting in this automatically-generated option description::" +msgstr "" + +#: ../../library/optparse.rst:546 +msgid "" +"This is important for more than just saving space, though: the manually " +"written help text uses the meta-variable ``FILE`` to clue the user in that " +"there's a connection between the semi-formal syntax ``-f FILE`` and the " +"informal semantic description \"write output to FILE\". This is a simple but" +" effective way to make your help text a lot clearer and more useful for end " +"users." +msgstr "" +"不过,这具有比节省一点空间更重要的作用:手动编写的帮助文本使用元变量 ``FILE`` 来提示用户在半正式的语法 ``-f FILE`` 和非正式的描述" +" \"write output to FILE\" 之间存在联系。 这是一种使你的帮助文本更清晰并对最终用户来说更易用的简单而有效的方式。" + +#: ../../library/optparse.rst:552 +msgid "" +"options that have a default value can include ``%default`` in the help " +"string---\\ :mod:`optparse` will replace it with :func:`str` of the option's" +" default value. If an option has no default value (or the default value is " +"``None``), ``%default`` expands to ``none``." +msgstr "" +"具有默认值的选项可以在帮助字符串中包括 ``%default`` --- :mod:`optparse` 将用该选项的默认值的 :func:`str` " +"来替代它。 如果一个选项没有默认值 (或默认值为 ``None``),则 ``%default`` 将被扩展为 ``none``。" + +#: ../../library/optparse.rst:558 +msgid "Grouping Options" +msgstr "选项分组" + +#: ../../library/optparse.rst:560 +msgid "" +"When dealing with many options, it is convenient to group these options for " +"better help output. An :class:`OptionParser` can contain several option " +"groups, each of which can contain several options." +msgstr "" +"在处理大量选项时,可以方便地将选项进行分组以提供更好的帮助输出。 :class:`OptionParser` " +"可以包含多个选项分组,每个分组可以包含多个选项。" + +#: ../../library/optparse.rst:564 +msgid "An option group is obtained using the class :class:`OptionGroup`:" +msgstr "选项分组是使用 :class:`OptionGroup` 类来生成的:" + +#: ../../library/optparse.rst:568 ../../library/optparse.rst:1620 +msgid "where" +msgstr "其中" + +#: ../../library/optparse.rst:570 +msgid "" +"parser is the :class:`OptionParser` instance the group will be inserted in " +"to" +msgstr "parser 是分组将被插入的 :class:`OptionParser` 实例" + +#: ../../library/optparse.rst:572 +msgid "title is the group title" +msgstr "title 是分组的标题" + +#: ../../library/optparse.rst:573 +msgid "description, optional, is a long description of the group" +msgstr "description,可选项,是分组的长描述文本" + +#: ../../library/optparse.rst:575 +msgid "" +":class:`OptionGroup` inherits from :class:`OptionContainer` (like " +":class:`OptionParser`) and so the :meth:`add_option` method can be used to " +"add an option to the group." +msgstr "" +":class:`OptionGroup` 继承自 :class:`OptionContainer` (类似 :class:`OptionParser`)" +" 因此 :meth:`add_option` 方法可被用来向分组添加选项。" + +#: ../../library/optparse.rst:579 +msgid "" +"Once all the options are declared, using the :class:`OptionParser` method " +":meth:`add_option_group` the group is added to the previously defined " +"parser." +msgstr "" +"一旦声明了所有选项,使用 :class:`OptionParser` 方法 :meth:`add_option_group` " +"即可将分组添加到之前定义的解析器。" + +#: ../../library/optparse.rst:582 +msgid "" +"Continuing with the parser defined in the previous section, adding an " +":class:`OptionGroup` to a parser is easy::" +msgstr "继续使用前一节定义的解析器,很容易将 :class:`OptionGroup` 添加到解析器中::" + +#: ../../library/optparse.rst:591 +msgid "This would result in the following help output:" +msgstr "这将产生以下帮助输出:" + +#: ../../library/optparse.rst:612 +msgid "" +"A bit more complete example might involve using more than one group: still " +"extending the previous example::" +msgstr "更完整一些的示例可能涉及使用多个分组:继续扩展之前的例子::" + +#: ../../library/optparse.rst:629 +msgid "that results in the following output:" +msgstr "这会产生以下输出:" + +#: ../../library/optparse.rst:655 +msgid "" +"Another interesting method, in particular when working programmatically with" +" option groups is:" +msgstr "另一个有趣的方法,特别适合在编程处理选项分组时使用:" + +#: ../../library/optparse.rst:660 +msgid "" +"Return the :class:`OptionGroup` to which the short or long option string " +"*opt_str* (e.g. ``'-o'`` or ``'--option'``) belongs. If there's no such " +":class:`OptionGroup`, return ``None``." +msgstr "" +"返回短或长选项字符串 *opt_str* (例如 ``'-o'`` 或 ``'--option'``) 所属的 " +":class:`OptionGroup`。 如果没有对应的 :class:`OptionGroup`,则返回 ``None``。" + +#: ../../library/optparse.rst:667 +msgid "Printing a version string" +msgstr "打印版本字符串" + +#: ../../library/optparse.rst:669 +msgid "" +"Similar to the brief usage string, :mod:`optparse` can also print a version " +"string for your program. You have to supply the string as the ``version`` " +"argument to OptionParser::" +msgstr "" +"与简短用法字符串类似,:mod:`optparse` 还可以打印你的程序的版本字符串。 你必须将该字符串作为 ``version`` 参数提供给 " +"OptionParser::" + +#: ../../library/optparse.rst:675 +msgid "" +"``%prog`` is expanded just like it is in ``usage``. Apart from that, " +"``version`` can contain anything you like. When you supply it, " +":mod:`optparse` automatically adds a ``--version`` option to your parser. If" +" it encounters this option on the command line, it expands your ``version`` " +"string (by replacing ``%prog``), prints it to stdout, and exits." +msgstr "" +"``%prog`` 会像在 ``usage`` 中那样被扩展。 除了这一点,``version`` 还可包含你想存放的任何东西。 " +"当你提供它时,:mod:`optparse` 将自动向你的解析器添加一个 ``--version`` 选项。 如果它在命令行中遇到了该选项,它将扩展你的" +" ``version`` 字符串 (通过替换 ``%prog``),将其打印到标准输出,然后退出。" + +#: ../../library/optparse.rst:681 +msgid "For example, if your script is called ``/usr/bin/foo``:" +msgstr "举例来说,如果你的脚本是 ``/usr/bin/foo``:" + +#: ../../library/optparse.rst:688 +msgid "" +"The following two methods can be used to print and get the ``version`` " +"string:" +msgstr "下列两个方法可被用来打印和获取 ``version`` 字符串:" + +#: ../../library/optparse.rst:692 +msgid "" +"Print the version message for the current program (``self.version``) to " +"*file* (default stdout). As with :meth:`print_usage`, any occurrence of " +"``%prog`` in ``self.version`` is replaced with the name of the current " +"program. Does nothing if ``self.version`` is empty or undefined." +msgstr "" +"将当前程序的版本消息 (``self.version``) 打印到 *file* (默认为 stdout)。 就像 " +":meth:`print_usage` 一样,任何在 ``self.version`` 中出现的 ``%prog`` 将被替换为当前程序的名称。 如果 " +"``self.version`` 为空或未定义则不做任何操作。" + +#: ../../library/optparse.rst:699 +msgid "" +"Same as :meth:`print_version` but returns the version string instead of " +"printing it." +msgstr "与 :meth:`print_version` 相似但是会返回版本字符串而不是打印它。" + +#: ../../library/optparse.rst:706 +msgid "How :mod:`optparse` handles errors" +msgstr ":mod:`optparse` 如何处理错误handles errors" + +#: ../../library/optparse.rst:708 +msgid "" +"There are two broad classes of errors that :mod:`optparse` has to worry " +"about: programmer errors and user errors. Programmer errors are usually " +"erroneous calls to :func:`OptionParser.add_option`, e.g. invalid option " +"strings, unknown option attributes, missing option attributes, etc. These " +"are dealt with in the usual way: raise an exception (either " +":exc:`optparse.OptionError` or :exc:`TypeError`) and let the program crash." +msgstr "" +":mod:`optparse` 必须考虑两种宽泛的错误类:程序员错误和用户错误。 程序员错误通常是对 " +":func:`OptionParser.add_option` 的错误调用,例如无效的选项字符串,未知的选项属性,不存在的选项属性等等。 " +"这些错误将以通常的方式来处理:引发一个异常 (或者是 :exc:`optparse.OptionError` 或者是 :exc:`TypeError`)" +" 并让程序崩溃。" + +#: ../../library/optparse.rst:715 +msgid "" +"Handling user errors is much more important, since they are guaranteed to " +"happen no matter how stable your code is. :mod:`optparse` can automatically" +" detect some user errors, such as bad option arguments (passing ``-n 4x`` " +"where ``-n`` takes an integer argument), missing arguments (``-n`` at the " +"end of the command line, where ``-n`` takes an argument of any type). Also," +" you can call :func:`OptionParser.error` to signal an application-defined " +"error condition::" +msgstr "" +"处理用户错误更为重要,因为无论你的代码有多稳定他们都肯定会发生。 :mod:`optparse` 可以自动检测部分用户错误,例如不正确的选项参数(如传入" +" ``-n 4x`` 而 ``-n`` 接受整数参数),缺少参数(如 ``-n`` 位于命令行的末尾,而 ``-n`` 接受任意类型的参数)。 " +"并且,你可以调用 :func:`OptionParser.error` 来指明应用程序自定义的错误条件::" + +#: ../../library/optparse.rst:728 +msgid "" +"In either case, :mod:`optparse` handles the error the same way: it prints " +"the program's usage message and an error message to standard error and exits" +" with error status 2." +msgstr "" +"在两种情况下,:mod:`optparse` 都是以相同方式处理错误的:它会将程序的用法消息和错误消息打印到标准错误并附带错误状态 2 退出。" + +#: ../../library/optparse.rst:732 +msgid "" +"Consider the first example above, where the user passes ``4x`` to an option " +"that takes an integer:" +msgstr "考虑上面的第一个示例,当用户向一个接受整数的选项传入了 ``4x``:" + +#: ../../library/optparse.rst:742 +msgid "Or, where the user fails to pass a value at all:" +msgstr "或者,当用户未传入任何值:" + +#: ../../library/optparse.rst:751 +msgid "" +":mod:`optparse`\\ -generated error messages take care always to mention the " +"option involved in the error; be sure to do the same when calling " +":func:`OptionParser.error` from your application code." +msgstr "" +":mod:`optparse` 生成的错误消息总是会确保提示在错误中涉及的选项;请确保在从你的应用程序代码调用 " +":func:`OptionParser.error` 时也做同样的事。" + +#: ../../library/optparse.rst:755 +msgid "" +"If :mod:`optparse`'s default error-handling behaviour does not suit your " +"needs, you'll need to subclass OptionParser and override its " +":meth:`~OptionParser.exit` and/or :meth:`~OptionParser.error` methods." +msgstr "" +"如果 :mod:`optparse` 的默认错误处理行为不适合你的需求,你需要子类化 OptionParser 并重写它的 " +":meth:`~OptionParser.exit` 和/或 :meth:`~OptionParser.error` 方法。" + +#: ../../library/optparse.rst:763 +msgid "Putting it all together" +msgstr "合并所有代码" + +#: ../../library/optparse.rst:765 +msgid "Here's what :mod:`optparse`\\ -based scripts usually look like::" +msgstr "下面是基于 :mod:`optparse` 的脚本通常的结构::" + +#: ../../library/optparse.rst:793 +msgid "Reference Guide" +msgstr "参考指南" + +#: ../../library/optparse.rst:799 +msgid "Creating the parser" +msgstr "创建解析器" + +#: ../../library/optparse.rst:801 +msgid "" +"The first step in using :mod:`optparse` is to create an OptionParser " +"instance." +msgstr "使用 :mod:`optparse` 的第一步是创建 OptionParser 实例。" + +#: ../../library/optparse.rst:805 +msgid "" +"The OptionParser constructor has no required arguments, but a number of " +"optional keyword arguments. You should always pass them as keyword " +"arguments, i.e. do not rely on the order in which the arguments are " +"declared." +msgstr "" +"OptionParser 构造器没有必需的参数,只有一些可选的关键字参数。 你应当始终以关键字参数形式传入它们,即不要依赖于声明参数所在位置的顺序。" + +#: ../../library/optparse.rst:814 +msgid "``usage`` (default: ``\"%prog [options]\"``)" +msgstr "``usage`` (默认: ``\"%prog [options]\"``)" + +#: ../../library/optparse.rst:810 +msgid "" +"The usage summary to print when your program is run incorrectly or with a " +"help option. When :mod:`optparse` prints the usage string, it expands " +"``%prog`` to ``os.path.basename(sys.argv[0])`` (or to ``prog`` if you passed" +" that keyword argument). To suppress a usage message, pass the special " +"value :data:`optparse.SUPPRESS_USAGE`." +msgstr "" +"当你的程序不正确地运行或附带 help 选项运行时将打印的用法说明。 当 :mod:`optparse` 打印用法字符串时,它会将 ``%prog`` " +"扩展为 ``os.path.basename(sys.argv[0])`` (或者如果你传入 ``prog`` 则为该关键字参数值)。 " +"要屏蔽用法说明,请传入特殊值 :data:`optparse.SUPPRESS_USAGE`。" + +#: ../../library/optparse.rst:821 +msgid "``option_list`` (default: ``[]``)" +msgstr "``option_list`` (默认: ``[]``)" + +#: ../../library/optparse.rst:817 +msgid "" +"A list of Option objects to populate the parser with. The options in " +"``option_list`` are added after any options in ``standard_option_list`` (a " +"class attribute that may be set by OptionParser subclasses), but before any " +"version or help options. Deprecated; use :meth:`add_option` after creating " +"the parser instead." +msgstr "" +"一个用于填充解析器的由 Option 对象组成的列表。 ``option_list`` 中的选项将添加在 " +"``standard_option_list`` (一个可由 OptionParser 的子类设置的类属性) " +"中的任何选项之后,以及任何版本或帮助选项之前。 已被弃用;请改为在创建解析器之后使用 :meth:`add_option`。" + +#: ../../library/optparse.rst:824 +msgid "``option_class`` (default: optparse.Option)" +msgstr "``option_class`` (默认: optparse.Option)" + +#: ../../library/optparse.rst:824 +msgid "Class to use when adding options to the parser in :meth:`add_option`." +msgstr "当在 :meth:`add_option` 中向解析器添加选项时要使用的类。" + +#: ../../library/optparse.rst:830 +msgid "``version`` (default: ``None``)" +msgstr "``version`` (默认: ``None``)" + +#: ../../library/optparse.rst:827 +msgid "" +"A version string to print when the user supplies a version option. If you " +"supply a true value for ``version``, :mod:`optparse` automatically adds a " +"version option with the single option string ``--version``. The substring " +"``%prog`` is expanded the same as for ``usage``." +msgstr "" +"当用户提供了 version 选项时将会打印的版本字符串。 如果你为 ``version`` 提供真值,:mod:`optparse` " +"将自动添加单个选项字符串 ``--version`` 形式的 version 选项。 子字符串 ``%prog`` 会以与 ``usage`` " +"相同的方式扩展。" + +#: ../../library/optparse.rst:835 +msgid "``conflict_handler`` (default: ``\"error\"``)" +msgstr "``conflict_handler`` (默认: ``\"error\"``)" + +#: ../../library/optparse.rst:833 +msgid "" +"Specifies what to do when options with conflicting option strings are added " +"to the parser; see section :ref:`optparse-conflicts-between-options`." +msgstr "" +"指定当有相互冲突的选项字符串的选项被添加到解析器时要如何做;参见 :ref:`optparse-conflicts-between-options` " +"一节。" + +#: ../../library/optparse.rst:841 +msgid "``description`` (default: ``None``)" +msgstr "``description`` (默认: ``None``)" + +#: ../../library/optparse.rst:838 +msgid "" +"A paragraph of text giving a brief overview of your program. :mod:`optparse`" +" reformats this paragraph to fit the current terminal width and prints it " +"when the user requests help (after ``usage``, but before the list of " +"options)." +msgstr "" +"一段提供你的程序的简短介绍的文本。 :mod:`optparse` 会重格式化段落以适合当前终端宽度并在用户请求帮助时打印其内容(在 ``usage``" +" 之后,选项列表之前)。" + +#: ../../library/optparse.rst:846 +msgid "``formatter`` (default: a new :class:`IndentedHelpFormatter`)" +msgstr "``formatter`` (默认: 一个新的 :class:`IndentedHelpFormatter`)" + +#: ../../library/optparse.rst:844 +msgid "" +"An instance of optparse.HelpFormatter that will be used for printing help " +"text. :mod:`optparse` provides two concrete classes for this purpose: " +"IndentedHelpFormatter and TitledHelpFormatter." +msgstr "" +"一个将被用于打印帮助文本的 optparse.HelpFormatter 实例。 :mod:`optparse` 为此目的提供了两个实体类: " +"IndentedHelpFormatter 和 TitledHelpFormatter。" + +#: ../../library/optparse.rst:850 +msgid "``add_help_option`` (default: ``True``)" +msgstr "``add_help_option`` (默认: ``True``)" + +#: ../../library/optparse.rst:849 +msgid "" +"If true, :mod:`optparse` will add a help option (with option strings ``-h`` " +"and ``--help``) to the parser." +msgstr "如为真值,:mod:`optparse` 将向解析器添加一个 help 选项 (使用选项字符串 ``-h`` 和 ``--help``)。" + +#: ../../library/optparse.rst:854 +msgid "``prog``" +msgstr "``prog``" + +#: ../../library/optparse.rst:853 +msgid "" +"The string to use when expanding ``%prog`` in ``usage`` and ``version`` " +"instead of ``os.path.basename(sys.argv[0])``." +msgstr "" +"当在 ``usage`` 和 ``version`` 中用于代替 ``os.path.basename(sys.argv[0])`` 来扩展 " +"``%prog`` 的字符串。" + +#: ../../library/optparse.rst:856 +msgid "``epilog`` (default: ``None``)" +msgstr "``epilog`` (默认: ``None``)" + +#: ../../library/optparse.rst:857 +msgid "A paragraph of help text to print after the option help." +msgstr "一段将在选项帮助之后打印的帮助文本。" + +#: ../../library/optparse.rst:862 +msgid "Populating the parser" +msgstr "填充解析器" + +#: ../../library/optparse.rst:864 +msgid "" +"There are several ways to populate the parser with options. The preferred " +"way is by using :meth:`OptionParser.add_option`, as shown in section " +":ref:`optparse-tutorial`. :meth:`add_option` can be called in one of two " +"ways:" +msgstr "" +"有几种方式可以为解析器填充选项。 最推荐的方式是使用 :meth:`OptionParser.add_option`,如 :ref:`optparse-" +"tutorial` 一节所演示的。 :meth:`add_option` 可以通过两种方式来调用:" + +#: ../../library/optparse.rst:868 +msgid "pass it an Option instance (as returned by :func:`make_option`)" +msgstr "传入一个 Option 实例(即 :func:`make_option` 所返回的对象)" + +#: ../../library/optparse.rst:870 +msgid "" +"pass it any combination of positional and keyword arguments that are " +"acceptable to :func:`make_option` (i.e., to the Option constructor), and it " +"will create the Option instance for you" +msgstr "" +"传入 :func:`make_option` 可接受的(即与 Option 构造器相同的)任意位置和关键字参数组合,它将为你创建 Option 实例" + +#: ../../library/optparse.rst:874 +msgid "" +"The other alternative is to pass a list of pre-constructed Option instances " +"to the OptionParser constructor, as in::" +msgstr "另一种方式是将由预先构造的 Option 实例组成的列表传给 OptionParser 构造器,如下所示::" + +#: ../../library/optparse.rst:885 +msgid "" +"(:func:`make_option` is a factory function for creating Option instances; " +"currently it is an alias for the Option constructor. A future version of " +":mod:`optparse` may split Option into several classes, and " +":func:`make_option` will pick the right class to instantiate. Do not " +"instantiate Option directly.)" +msgstr "" +"(:func:`make_option` 是一个用于创建 Option 实例的工厂函数;目前它是 Option 构造器的一个别名。 未来的 " +":mod:`optparse` 版本可能会将 Option 拆分为多个类,而 :func:`make_option` 将选择适当的类来实例化。 " +"请不要直接实例化 Option。)" + +#: ../../library/optparse.rst:894 +msgid "Defining options" +msgstr "定义选项" + +#: ../../library/optparse.rst:896 +msgid "" +"Each Option instance represents a set of synonymous command-line option " +"strings, e.g. ``-f`` and ``--file``. You can specify any number of short or" +" long option strings, but you must specify at least one overall option " +"string." +msgstr "" +"每个 Option 实例代表一组同义的命令行选项字符串,例如 ``-f`` 和 ``--file``。 " +"你可以指定任意数量的短和长选项字符串,但你必须指定总计至少一个选项字符串。" + +#: ../../library/optparse.rst:900 +msgid "" +"The canonical way to create an :class:`Option` instance is with the " +":meth:`add_option` method of :class:`OptionParser`." +msgstr "" +"创建 :class:`Option` 的正规方式是使用 :class:`OptionParser` 的 :meth:`add_option` 方法。" + +#: ../../library/optparse.rst:906 +msgid "To define an option with only a short option string::" +msgstr "定义只有一个短选项字符串的选项::" + +#: ../../library/optparse.rst:910 +msgid "And to define an option with only a long option string::" +msgstr "以及定义只有一个长选项字符串的选项::" + +#: ../../library/optparse.rst:914 +msgid "" +"The keyword arguments define attributes of the new Option object. The most " +"important option attribute is :attr:`~Option.action`, and it largely " +"determines which other attributes are relevant or required. If you pass " +"irrelevant option attributes, or fail to pass required ones, :mod:`optparse`" +" raises an :exc:`OptionError` exception explaining your mistake." +msgstr "" +"该关键字参数定义新 Option 对象的属性。 最重要的选项属性是 " +":attr:`~Option.action`,它主要负责确定其他的属性是相关的还是必须的。 " +"如果你传入了不相关的选项属性,或是未能传入必须的属性,:mod:`optparse` 将引发一个 :exc:`OptionError` " +"异常来说明你的错误。" + +#: ../../library/optparse.rst:920 +msgid "" +"An option's *action* determines what :mod:`optparse` does when it encounters" +" this option on the command-line. The standard option actions hard-coded " +"into :mod:`optparse` are:" +msgstr "" +"选项的 *action* 决定当 :mod:`optparse` 在命令行中遇到该选项时要做什么。 硬编码在 :mod:`optparse` " +"中的标准选项动作有:" + +#: ../../library/optparse.rst:925 +msgid "``\"store\"``" +msgstr "``\"store\"``" + +#: ../../library/optparse.rst:925 +msgid "store this option's argument (default)" +msgstr "存储此选项的参数(默认)" + +#: ../../library/optparse.rst:931 +msgid "``\"store_true\"``" +msgstr "``\"store_true\"``" + +#: ../../library/optparse.rst:931 +msgid "store ``True``" +msgstr "存储 ``True``" + +#: ../../library/optparse.rst:934 +msgid "``\"store_false\"``" +msgstr "``\"store_false\"``" + +#: ../../library/optparse.rst:934 +msgid "store ``False``" +msgstr "存储 ``False``" + +#: ../../library/optparse.rst:940 +msgid "``\"append_const\"``" +msgstr "``\"append_const\"``" + +#: ../../library/optparse.rst:940 +msgid "append a constant value to a list" +msgstr "将常量值附加到列表" + +#: ../../library/optparse.rst:949 ../../library/optparse.rst:1226 +msgid "``\"help\"``" +msgstr "``\"help\"``" + +#: ../../library/optparse.rst:949 +msgid "" +"print a usage message including all options and the documentation for them" +msgstr "打印用法消息,包括所有选项和它们的文档" + +#: ../../library/optparse.rst:951 +msgid "" +"(If you don't supply an action, the default is ``\"store\"``. For this " +"action, you may also supply :attr:`~Option.type` and :attr:`~Option.dest` " +"option attributes; see :ref:`optparse-standard-option-actions`.)" +msgstr "" +"(如果你没有提供动作,则默认为 ``\"store\"``。 对于此动作,你还可以提供 :attr:`~Option.type` 和 " +":attr:`~Option.dest` 选项属性;参见 :ref:`optparse-standard-option-actions`。)" + +#: ../../library/optparse.rst:955 +msgid "" +"As you can see, most actions involve storing or updating a value somewhere. " +":mod:`optparse` always creates a special object for this, conventionally " +"called ``options`` (it happens to be an instance of " +":class:`optparse.Values`). Option arguments (and various other values) are " +"stored as attributes of this object, according to the :attr:`~Option.dest` " +"(destination) option attribute." +msgstr "" +"如你所见,大多数动作都涉及在某处保存或更新一个值。 :mod:`optparse` 总是会为此创建一个特殊对象,在习惯上命名为 ``options`` " +"(它恰好是 :class:`optparse.Values` 的实例)。 选项参数 (以及几种其他的值) 将根据 " +":attr:`~Option.dest` (目标) 选项属性被保存为该对象的属性。" + +#: ../../library/optparse.rst:961 +msgid "For example, when you call ::" +msgstr "例如,当你调用 ::" + +#: ../../library/optparse.rst:965 +msgid "" +"one of the first things :mod:`optparse` does is create the ``options`` " +"object::" +msgstr ":mod:`optparse` 首先会做的一件事情是创建 ``options`` 对象::" + +#: ../../library/optparse.rst:969 +msgid "If one of the options in this parser is defined with ::" +msgstr "如果该解析器中的某个选项定义带有 ::" + +#: ../../library/optparse.rst:973 +msgid "and the command-line being parsed includes any of the following::" +msgstr "并且被解析的命令行包括以下任意一项::" + +#: ../../library/optparse.rst:980 +msgid "" +"then :mod:`optparse`, on seeing this option, will do the equivalent of ::" +msgstr "那么 :mod:`optparse` 在看到此选项时,将执行这样的操作 ::" + +#: ../../library/optparse.rst:984 +msgid "" +"The :attr:`~Option.type` and :attr:`~Option.dest` option attributes are " +"almost as important as :attr:`~Option.action`, but :attr:`~Option.action` is" +" the only one that makes sense for *all* options." +msgstr "" +":attr:`~Option.type` 和 :attr:`~Option.dest` 选项属性几乎与 :attr:`~Option.action` " +"一样重要,但 :attr:`~Option.action` 是唯一对 *所有* 选项都有意义的。" + +#: ../../library/optparse.rst:992 +msgid "Option attributes" +msgstr "选项属性" + +#: ../../library/optparse.rst:994 +msgid "" +"The following option attributes may be passed as keyword arguments to " +":meth:`OptionParser.add_option`. If you pass an option attribute that is " +"not relevant to a particular option, or fail to pass a required option " +"attribute, :mod:`optparse` raises :exc:`OptionError`." +msgstr "" +"下列选项属性可以作为关键字参数传给 :meth:`OptionParser.add_option`。 " +"如果你传入一个与特定选项无关的选项属性,或是未能传入必要的选项属性,:mod:`optparse` 将会引发 :exc:`OptionError`。" + +#: ../../library/optparse.rst:1001 +msgid "(default: ``\"store\"``)" +msgstr "(默认: ``\"store\"``)" + +#: ../../library/optparse.rst:1003 +msgid "" +"Determines :mod:`optparse`'s behaviour when this option is seen on the " +"command line; the available options are documented :ref:`here `." +msgstr "" +"用于当在命令行中遇到此选项时确定 :mod:`optparse` 的行为;可用的选项记录在 :ref:`这里 `。" + +#: ../../library/optparse.rst:1009 +msgid "(default: ``\"string\"``)" +msgstr "(默认: ``\"string\"``)" + +#: ../../library/optparse.rst:1011 +msgid "" +"The argument type expected by this option (e.g., ``\"string\"`` or " +"``\"int\"``); the available option types are documented :ref:`here " +"`." +msgstr "" +"此选项所接受的参数类型 (例如 ``\"string\"`` 或 ``\"int\"``);可用的选项类型记录在 :ref:`这里 `。" + +#: ../../library/optparse.rst:1017 ../../library/optparse.rst:1067 +msgid "(default: derived from option strings)" +msgstr "(默认: 获取自选项字符串)" + +#: ../../library/optparse.rst:1019 +msgid "" +"If the option's action implies writing or modifying a value somewhere, this " +"tells :mod:`optparse` where to write it: :attr:`~Option.dest` names an " +"attribute of the ``options`` object that :mod:`optparse` builds as it parses" +" the command line." +msgstr "" +"如果此选项的动作涉及在某处写入或修改一个值,该属性将告诉 :mod:`optparse` 将它写入到哪里: :attr:`~Option.dest` " +"指定 :mod:`optparse` 在解析命令行时构建的 ``options`` 对象的某个属性。" + +#: ../../library/optparse.rst:1026 +msgid "" +"The value to use for this option's destination if the option is not seen on " +"the command line. See also :meth:`OptionParser.set_defaults`." +msgstr "当未在命令行中遇到此选项时将被用作此选项的目标的值。 另请参阅 :meth:`OptionParser.set_defaults`。" + +#: ../../library/optparse.rst:1031 +msgid "(default: 1)" +msgstr "(默认: 1)" + +#: ../../library/optparse.rst:1033 +msgid "" +"How many arguments of type :attr:`~Option.type` should be consumed when this" +" option is seen. If > 1, :mod:`optparse` will store a tuple of values to " +":attr:`~Option.dest`." +msgstr "" +"当遇到此选项时应当读取多少个 :attr:`~Option.type` 类型的参数。 如果 > 1,:mod:`optparse` " +"会将由多个值组成的元组保存到 :attr:`~Option.dest`。" + +#: ../../library/optparse.rst:1039 +msgid "For actions that store a constant value, the constant value to store." +msgstr "对于保存常量值的动作,指定要保存的常量值。" + +#: ../../library/optparse.rst:1043 +msgid "" +"For options of type ``\"choice\"``, the list of strings the user may choose " +"from." +msgstr "对于 ``\"choice\"`` 类型的选项,由用户可选择的字符串组成的列表。" + +#: ../../library/optparse.rst:1048 +msgid "" +"For options with action ``\"callback\"``, the callable to call when this " +"option is seen. See section :ref:`optparse-option-callbacks` for detail on " +"the arguments passed to the callable." +msgstr "" +"对于使用 ``\"callback\"`` 动作的选项,当遇到此选项时要调用的可调用对象。 请参阅 :ref:`optparse-option-" +"callbacks` 一节了解关于传给可调用对象的参数的详情。" + +#: ../../library/optparse.rst:1055 +msgid "" +"Additional positional and keyword arguments to pass to ``callback`` after " +"the four standard callback arguments." +msgstr "将在四个标准回调参数之后传给 ``callback`` 的额外的位置和关键字参数。" + +#: ../../library/optparse.rst:1060 +msgid "" +"Help text to print for this option when listing all available options after " +"the user supplies a :attr:`~Option.help` option (such as ``--help``). If no" +" help text is supplied, the option will be listed without help text. To " +"hide this option, use the special value :data:`optparse.SUPPRESS_HELP`." +msgstr "" +"当用户提供 :attr:`~Option.help` 选项 (例如 ``--help``) 之后将在列出所有可用选项时针对此选项打印的帮助文本。 " +"如果没有提供帮助文本,则列出选项时将不附带帮助文本。 要隐藏此选项,请使用特殊值 :data:`optparse.SUPPRESS_HELP`。" + +#: ../../library/optparse.rst:1069 +msgid "" +"Stand-in for the option argument(s) to use when printing help text. See " +"section :ref:`optparse-tutorial` for an example." +msgstr "当打印帮助文本时要使用的代表选项参数的名称。 请参阅 :ref:`optparse-tutorial` 一节查看相应示例。" + +#: ../../library/optparse.rst:1076 +msgid "Standard option actions" +msgstr "标准选项动作" + +#: ../../library/optparse.rst:1078 +msgid "" +"The various option actions all have slightly different requirements and " +"effects. Most actions have several relevant option attributes which you may " +"specify to guide :mod:`optparse`'s behaviour; a few have required " +"attributes, which you must specify for any option using that action." +msgstr "" +"各种选项动作具有略微不同的要求和效果。 大多数动作都具有几个可被你指定的独步选项属性用来控制 :mod:`optparse` " +"的行为;少数还具有一些必需属性,你必须为任何使用该动作的选项指定这些属性。" + +#: ../../library/optparse.rst:1083 +msgid "" +"``\"store\"`` [relevant: :attr:`~Option.type`, :attr:`~Option.dest`, " +":attr:`~Option.nargs`, :attr:`~Option.choices`]" +msgstr "" +"``\"store\"`` [关联: :attr:`~Option.type`, :attr:`~Option.dest`, " +":attr:`~Option.nargs`, :attr:`~Option.choices`]" + +#: ../../library/optparse.rst:1086 +msgid "" +"The option must be followed by an argument, which is converted to a value " +"according to :attr:`~Option.type` and stored in :attr:`~Option.dest`. If " +":attr:`~Option.nargs` > 1, multiple arguments will be consumed from the " +"command line; all will be converted according to :attr:`~Option.type` and " +"stored to :attr:`~Option.dest` as a tuple. See the :ref:`optparse-standard-" +"option-types` section." +msgstr "" +"该选项后必须跟一个参数,它将根据 :attr:`~Option.type` 被转换为相应的值并保存至 :attr:`~Option.dest`。 如果 " +":attr:`~Option.nargs` > 1,则将从命令行读取多个参数;它们将全部根据 :attr:`~Option.type` " +"被转换并以元组形式保存至 :attr:`~Option.dest`。 参见 :ref:`optparse-standard-option-types` " +"一节。" + +#: ../../library/optparse.rst:1093 +msgid "" +"If :attr:`~Option.choices` is supplied (a list or tuple of strings), the " +"type defaults to ``\"choice\"``." +msgstr "如果提供了 :attr:`~Option.choices` (由字符串组成的列表和元组),则类型默认为 ``\"choice\"``。" + +#: ../../library/optparse.rst:1096 +msgid "If :attr:`~Option.type` is not supplied, it defaults to ``\"string\"``." +msgstr "如果未提供 :attr:`~Option.type`,则默认为 ``\"string\"``。" + +#: ../../library/optparse.rst:1098 +msgid "" +"If :attr:`~Option.dest` is not supplied, :mod:`optparse` derives a " +"destination from the first long option string (e.g., ``--foo-bar`` implies " +"``foo_bar``). If there are no long option strings, :mod:`optparse` derives a" +" destination from the first short option string (e.g., ``-f`` implies " +"``f``)." +msgstr "" +"如果未提供 :attr:`~Option.dest`,则 :mod:`optparse` 会从第一个长选项字符串派生出目标 (例如 ``--foo-" +"bar`` 将对应 ``foo_bar``)。 如果不存在长选项字符串,则 :mod:`optparse` 会从第一个短选项字符串派生出目标 (例如 " +"``-f`` 将对应 ``f``)。" + +#: ../../library/optparse.rst:1103 ../../library/optparse.rst:1123 +#: ../../library/optparse.rst:1145 ../../library/optparse.rst:1163 +#: ../../library/optparse.rst:1202 ../../library/optparse.rst:1240 +msgid "Example::" +msgstr "示例::" + +#: ../../library/optparse.rst:1108 +msgid "As it parses the command line ::" +msgstr "当它解析命令行 ::" + +#: ../../library/optparse.rst:1112 +msgid ":mod:`optparse` will set ::" +msgstr ":mod:`optparse` 将设置 ::" + +#: ../../library/optparse.rst:1118 +msgid "" +"``\"store_const\"`` [required: :attr:`~Option.const`; relevant: " +":attr:`~Option.dest`]" +msgstr "``\"store_const\"`` [要求: :attr:`~Option.const`; 关联: :attr:`~Option.dest`]" + +#: ../../library/optparse.rst:1121 +msgid "The value :attr:`~Option.const` is stored in :attr:`~Option.dest`." +msgstr "值 :attr:`~Option.const` 将存放到 :attr:`~Option.dest` 中。" + +#: ../../library/optparse.rst:1132 +msgid "If ``--noisy`` is seen, :mod:`optparse` will set ::" +msgstr "如果看到了 ``--noisy``,:mod:`optparse` 将设置 ::" + +#: ../../library/optparse.rst:1136 +msgid "``\"store_true\"`` [relevant: :attr:`~Option.dest`]" +msgstr "``\"store_true\"`` [关联: :attr:`~Option.dest`]" + +#: ../../library/optparse.rst:1138 +msgid "" +"A special case of ``\"store_const\"`` that stores ``True`` to " +":attr:`~Option.dest`." +msgstr "将 ``True`` 存放到 :attr:`~Option.dest` 中的 ``\"store_const\"`` 的特例。" + +#: ../../library/optparse.rst:1141 +msgid "``\"store_false\"`` [relevant: :attr:`~Option.dest`]" +msgstr "``\"store_false\"`` [关联: :attr:`~Option.dest`]" + +#: ../../library/optparse.rst:1143 +msgid "Like ``\"store_true\"``, but stores ``False``." +msgstr "类似于 ``\"store_true\"``,但是存放 ``False``。" + +#: ../../library/optparse.rst:1150 +msgid "" +"``\"append\"`` [relevant: :attr:`~Option.type`, :attr:`~Option.dest`, " +":attr:`~Option.nargs`, :attr:`~Option.choices`]" +msgstr "" +"``\"append\"`` [关联: :attr:`~Option.type`, :attr:`~Option.dest`, " +":attr:`~Option.nargs`, :attr:`~Option.choices`]" + +#: ../../library/optparse.rst:1153 +msgid "" +"The option must be followed by an argument, which is appended to the list in" +" :attr:`~Option.dest`. If no default value for :attr:`~Option.dest` is " +"supplied, an empty list is automatically created when :mod:`optparse` first " +"encounters this option on the command-line. If :attr:`~Option.nargs` > 1, " +"multiple arguments are consumed, and a tuple of length :attr:`~Option.nargs`" +" is appended to :attr:`~Option.dest`." +msgstr "" +"该选项必须跟一个参数,该参数将被添加到 :attr:`~Option.dest` 的列表中。 如果未提供 :attr:`~Option.dest` " +"的默认值,那么当 :mod:`optparse` 首次在命令行中遇到该选项时将自动创建一个空列表。 如果 :attr:`~Option.nargs` >" +" 1,则会读取多个参数,并将一个长度为 :attr:`~Option.nargs` 的元组添加到 :attr:`~Option.dest`。" + +#: ../../library/optparse.rst:1160 +msgid "" +"The defaults for :attr:`~Option.type` and :attr:`~Option.dest` are the same " +"as for the ``\"store\"`` action." +msgstr ":attr:`~Option.type` 和 :attr:`~Option.dest` 的默认值与 ``\"store\"`` 动作的相同。" + +#: ../../library/optparse.rst:1167 +msgid "" +"If ``-t3`` is seen on the command-line, :mod:`optparse` does the equivalent " +"of::" +msgstr "如果在命令行中遇到 ``-t3``,:mod:`optparse` 将执行这样的操作::" + +#: ../../library/optparse.rst:1173 +msgid "If, a little later on, ``--tracks=4`` is seen, it does::" +msgstr "如果,在稍后的时候,再遇到 ``--tracks=4``,它将执行::" + +#: ../../library/optparse.rst:1177 +msgid "" +"The ``append`` action calls the ``append`` method on the current value of " +"the option. This means that any default value specified must have an " +"``append`` method. It also means that if the default value is non-empty, " +"the default elements will be present in the parsed value for the option, " +"with any values from the command line appended after those default values::" +msgstr "" +"``append`` 动作会在选项的当前值上调用 ``append`` 方法。 这意味着任何被指定的默认值必须具有 ``append`` 方法。 " +"这还意味着如果默认值非空,则其中的默认元素将存在于选项的已解析值中,而任何来自命令行的值将被添加到这些默认值之后::" + +#: ../../library/optparse.rst:1188 +msgid "" +"``\"append_const\"`` [required: :attr:`~Option.const`; relevant: " +":attr:`~Option.dest`]" +msgstr "" +"``\"append_const\"`` [需要: :attr:`~Option.const`; 关联: :attr:`~Option.dest`]" + +#: ../../library/optparse.rst:1191 +msgid "" +"Like ``\"store_const\"``, but the value :attr:`~Option.const` is appended to" +" :attr:`~Option.dest`; as with ``\"append\"``, :attr:`~Option.dest` defaults" +" to ``None``, and an empty list is automatically created the first time the " +"option is encountered." +msgstr "" +"与 ``\"store_const\"`` 类似,但 :attr:`~Option.const` 值将被添加到 " +":attr:`~Option.dest`;与 ``\"append\"`` 一样,:attr:`~Option.dest` 默认为 " +"``None``,并且当首次遇到该选项时将自动创建一个空列表。" + +#: ../../library/optparse.rst:1196 +msgid "``\"count\"`` [relevant: :attr:`~Option.dest`]" +msgstr "``\"count\"`` [关联: :attr:`~Option.dest`]" + +#: ../../library/optparse.rst:1198 +msgid "" +"Increment the integer stored at :attr:`~Option.dest`. If no default value " +"is supplied, :attr:`~Option.dest` is set to zero before being incremented " +"the first time." +msgstr "" +"对保存在 :attr:`~Option.dest` 的整数执行递增。 如果未提供默认值,则 :attr:`~Option.dest` " +"会在第一次执行递增之前被设为零。" + +#: ../../library/optparse.rst:1206 +msgid "" +"The first time ``-v`` is seen on the command line, :mod:`optparse` does the " +"equivalent of::" +msgstr "第一次在命令行中看到 ``-v`` 时,:mod:`optparse` 将执行这样的操作::" + +#: ../../library/optparse.rst:1212 +msgid "Every subsequent occurrence of ``-v`` results in ::" +msgstr "后续每次出现 ``-v`` 都将导致 ::" + +#: ../../library/optparse.rst:1216 +msgid "" +"``\"callback\"`` [required: :attr:`~Option.callback`; relevant: " +":attr:`~Option.type`, :attr:`~Option.nargs`, :attr:`~Option.callback_args`, " +":attr:`~Option.callback_kwargs`]" +msgstr "" +"``\"callback\"`` [需要: :attr:`~Option.callback`; 关联: :attr:`~Option.type`, " +":attr:`~Option.nargs`, :attr:`~Option.callback_args`, " +":attr:`~Option.callback_kwargs`]" + +#: ../../library/optparse.rst:1220 +msgid "" +"Call the function specified by :attr:`~Option.callback`, which is called as " +"::" +msgstr "调用 :attr:`~Option.callback` 所指定的函数,它将以如下形式被调用 ::" + +#: ../../library/optparse.rst:1224 +msgid "See section :ref:`optparse-option-callbacks` for more detail." +msgstr "请参阅 :ref:`optparse-option-callbacks` 一节了解详情。" + +#: ../../library/optparse.rst:1228 +msgid "" +"Prints a complete help message for all the options in the current option " +"parser. The help message is constructed from the ``usage`` string passed to" +" OptionParser's constructor and the :attr:`~Option.help` string passed to " +"every option." +msgstr "" +"为当前选项解析器中所有的选项打印完整帮助消息。 该帮助消息是由传给 OptionParser 的构造器的 ``usage`` 字符串和传给每个选项的 " +":attr:`~Option.help` 字符串构造而成的。" + +#: ../../library/optparse.rst:1233 +msgid "" +"If no :attr:`~Option.help` string is supplied for an option, it will still " +"be listed in the help message. To omit an option entirely, use the special " +"value :data:`optparse.SUPPRESS_HELP`." +msgstr "" +"如果没有为某个选项提供 :attr:`~Option.help` 字符串,它仍将在帮助消息中列出。 要完全略去某个选项,请使用特殊值 " +":data:`optparse.SUPPRESS_HELP`。" + +#: ../../library/optparse.rst:1237 +msgid "" +":mod:`optparse` automatically adds a :attr:`~Option.help` option to all " +"OptionParsers, so you do not normally need to create one." +msgstr "" +":mod:`optparse` 将自动为所有OptionParser 添加 :attr:`~Option.help` 选项,因此你通常不需要创建选项。" + +#: ../../library/optparse.rst:1255 +msgid "" +"If :mod:`optparse` sees either ``-h`` or ``--help`` on the command line, it " +"will print something like the following help message to stdout (assuming " +"``sys.argv[0]`` is ``\"foo.py\"``):" +msgstr "" +"如果 :mod:`optparse` 在命令行中看到 ``-h`` 或 ``--help``,它将将类似下面这样的帮助消息打印到 stdout (假设 " +"``sys.argv[0]`` 为 ``\"foo.py\"``):" + +#: ../../library/optparse.rst:1268 +msgid "" +"After printing the help message, :mod:`optparse` terminates your process " +"with ``sys.exit(0)``." +msgstr "在打印帮助消息之后,:mod:`optparse` 将使用 ``sys.exit(0)`` 来终结你的进程。" + +#: ../../library/optparse.rst:1271 +msgid "``\"version\"``" +msgstr "``\"version\"``" + +#: ../../library/optparse.rst:1273 +msgid "" +"Prints the version number supplied to the OptionParser to stdout and exits. " +"The version number is actually formatted and printed by the " +"``print_version()`` method of OptionParser. Generally only relevant if the " +"``version`` argument is supplied to the OptionParser constructor. As with " +":attr:`~Option.help` options, you will rarely create ``version`` options, " +"since :mod:`optparse` automatically adds them when needed." +msgstr "" +"将提供给 OptionParser 的版本号打印到 stdout 并退出。 该版本号实际上是由 OptionParser 的 " +"``print_version()`` 方法进行格式化并打印的。 这通常只在向 OptionParser 构造器提供了 ``version`` " +"参数时才有意义。 与 :attr:`~Option.help` 选项类似,你很少会创建 ``version`` 选项,因为 " +":mod:`optparse` 会在需要时自动添加它们。" + +#: ../../library/optparse.rst:1284 +msgid "Standard option types" +msgstr "标准选项类型" + +#: ../../library/optparse.rst:1286 +msgid "" +":mod:`optparse` has five built-in option types: ``\"string\"``, ``\"int\"``," +" ``\"choice\"``, ``\"float\"`` and ``\"complex\"``. If you need to add new " +"option types, see section :ref:`optparse-extending-optparse`." +msgstr "" +":mod:`optparse` 有五种内置选项类型: ``\"string\"``, ``\"int\"``, ``\"choice\"``, " +"``\"float\"`` 和 ``\"complex\"``。 如果你需要添加新的选项类型,请参阅 :ref:`optparse-extending-" +"optparse` 一节。" + +#: ../../library/optparse.rst:1290 +msgid "" +"Arguments to string options are not checked or converted in any way: the " +"text on the command line is stored in the destination (or passed to the " +"callback) as-is." +msgstr "传给 string 类型选项的参数不会以任何方式进行检查或转换:命令行中的文本将被原样保存至目标(或传给回调)。" + +#: ../../library/optparse.rst:1293 +msgid "Integer arguments (type ``\"int\"``) are parsed as follows:" +msgstr "整数参数 (``\"int\"`` 类型) 将以如下方式解析:" + +#: ../../library/optparse.rst:1295 +msgid "if the number starts with ``0x``, it is parsed as a hexadecimal number" +msgstr "如果数字开头为 ``0x``,它将被解析为十六进制数" + +#: ../../library/optparse.rst:1297 +msgid "if the number starts with ``0``, it is parsed as an octal number" +msgstr "如果数字开头为 ``0``,它将被解析为八进制数" + +#: ../../library/optparse.rst:1299 +msgid "if the number starts with ``0b``, it is parsed as a binary number" +msgstr "如果数字开头为 ``0b``,它将被解析为二进制数" + +#: ../../library/optparse.rst:1301 +msgid "otherwise, the number is parsed as a decimal number" +msgstr "在其他情况下,数字将被解析为十进制数" + +#: ../../library/optparse.rst:1304 +msgid "" +"The conversion is done by calling :func:`int` with the appropriate base (2, " +"8, 10, or 16). If this fails, so will :mod:`optparse`, although with a more" +" useful error message." +msgstr "" +"转换操作是通过调用 :func:`int` 并传入适当的 base (2, 8, 10 或 16) 来完成的。 如果转换失败, " +":mod:`optparse` 也将失败,但它会附带更有用的错误消息。" + +#: ../../library/optparse.rst:1308 +msgid "" +"``\"float\"`` and ``\"complex\"`` option arguments are converted directly " +"with :func:`float` and :func:`complex`, with similar error-handling." +msgstr "" +"``\"float\"`` 和 ``\"complex\"`` 选项参数会直接通过 :func:`float` 和 :func:`complex` " +"来转换,使用类似的错误处理。" + +#: ../../library/optparse.rst:1311 +msgid "" +"``\"choice\"`` options are a subtype of ``\"string\"`` options. The " +":attr:`~Option.choices` option attribute (a sequence of strings) defines the" +" set of allowed option arguments. :func:`optparse.check_choice` compares " +"user-supplied option arguments against this master list and raises " +":exc:`OptionValueError` if an invalid string is given." +msgstr "" +"``\"choice\"`` 选项是 ``\"string\"`` 选项的子类型。 :attr:`~Option.choices` " +"选项属性(由字符串组成的序列)定义了允许的选项参数的集合。 :func:`optparse.check_choice` " +"将用户提供的选项参数与这个主列表进行比较并会在给出无效的字符串时引发 :exc:`OptionValueError`。" + +#: ../../library/optparse.rst:1321 +msgid "Parsing arguments" +msgstr "解析参数" + +#: ../../library/optparse.rst:1323 +msgid "" +"The whole point of creating and populating an OptionParser is to call its " +":meth:`parse_args` method::" +msgstr "创建和填充 OptionParser 的基本目的是调用其 :meth:`parse_args` 方法::" + +#: ../../library/optparse.rst:1328 +msgid "where the input parameters are" +msgstr "输入参数的位置" + +#: ../../library/optparse.rst:1331 ../../library/optparse.rst:1345 +#: ../../library/optparse.rst:1664 +msgid "``args``" +msgstr "``args``" + +#: ../../library/optparse.rst:1331 +msgid "the list of arguments to process (default: ``sys.argv[1:]``)" +msgstr "要处理的参数列表 (默认: ``sys.argv[1:]``)" + +#: ../../library/optparse.rst:1336 +msgid "``values``" +msgstr "``values``" + +#: ../../library/optparse.rst:1334 +msgid "" +"an :class:`optparse.Values` object to store option arguments in (default: a " +"new instance of :class:`Values`) -- if you give an existing object, the " +"option defaults will not be initialized on it" +msgstr "" +"要用于存储选项参数的 :class:`optparse.Values` 对象 (默认:一个新的 :class:`Values` 实例) -- " +"如果你给出一个现有对象,则不会基于它来初始化选项的默认值" + +#: ../../library/optparse.rst:1338 +msgid "and the return values are" +msgstr "返回值为" + +#: ../../library/optparse.rst:1342 +msgid "``options``" +msgstr "``options``" + +#: ../../library/optparse.rst:1341 +msgid "" +"the same object that was passed in as ``values``, or the optparse.Values " +"instance created by :mod:`optparse`" +msgstr "同一个对象将作为 ``values``,或 :mod:`optparse` 所创建的 optparse.Values 实例传入" + +#: ../../library/optparse.rst:1345 +msgid "" +"the leftover positional arguments after all options have been processed" +msgstr "在所有选项被处理完毕后余下的位置参数" + +#: ../../library/optparse.rst:1347 +msgid "" +"The most common usage is to supply neither keyword argument. If you supply " +"``values``, it will be modified with repeated :func:`setattr` calls (roughly" +" one for every option argument stored to an option destination) and returned" +" by :meth:`parse_args`." +msgstr "" +"最常见的用法是不提供任何关键字参数。 如果你提供了 ``values``,它将通过重复的 :func:`setattr` " +"调用来修改(大致为每个存储到指定选项目标的选项参数调用一次)并由 :meth:`parse_args` 返回。" + +#: ../../library/optparse.rst:1352 +msgid "" +"If :meth:`parse_args` encounters any errors in the argument list, it calls " +"the OptionParser's :meth:`error` method with an appropriate end-user error " +"message. This ultimately terminates your process with an exit status of 2 " +"(the traditional Unix exit status for command-line errors)." +msgstr "" +"如果 :meth:`parse_args` 在参数列表中遇到任何错误,它将调用 OptionParser 的 :meth:`error` " +"方法并附带适当的最终用户错误消息。 这会完全终结你的进程并将退出状态设为 2 (传统的针对命令行错误的 Unix 退出状态)。" + +#: ../../library/optparse.rst:1361 +msgid "Querying and manipulating your option parser" +msgstr "查询和操纵你的选项解析器" + +#: ../../library/optparse.rst:1363 +msgid "" +"The default behavior of the option parser can be customized slightly, and " +"you can also poke around your option parser and see what's there. " +"OptionParser provides several methods to help you out:" +msgstr "" +"选项解析器的默认行为可被轻度地定制,并且你还可以调整你的选项解析器查看实际效果如何。 OptionParser 提供了一些方法来帮助你进行定制:" + +#: ../../library/optparse.rst:1369 +msgid "" +"Set parsing to stop on the first non-option. For example, if ``-a`` and " +"``-b`` are both simple options that take no arguments, :mod:`optparse` " +"normally accepts this syntax::" +msgstr "" +"设置解析在第一个非选项处停止。 举例来说,如果 ``-a`` 和 ``-b`` 都是不接受参数的简单选项,则 :mod:`optparse` " +"通常会接受这样的语法::" + +#: ../../library/optparse.rst:1375 +msgid "and treats it as equivalent to ::" +msgstr "并会这样处理它 ::" + +#: ../../library/optparse.rst:1379 +msgid "" +"To disable this feature, call :meth:`disable_interspersed_args`. This " +"restores traditional Unix syntax, where option parsing stops with the first " +"non-option argument." +msgstr "" +"要禁用此特性,则调用 :meth:`disable_interspersed_args`。 这将恢复传统的 Unix " +"语法,其中选项解析会在第一个非选项参数处停止。" + +#: ../../library/optparse.rst:1383 +msgid "" +"Use this if you have a command processor which runs another command which " +"has options of its own and you want to make sure these options don't get " +"confused. For example, each command might have a different set of options." +msgstr "" +"如果你用一个命令处理程序来运行另一个拥有它自己的选项的命令而你希望参确保这些选项不会被混淆就可以使用此方法。 例如,每个命令可能具有不同的选项集合。" + +#: ../../library/optparse.rst:1389 +msgid "" +"Set parsing to not stop on the first non-option, allowing interspersing " +"switches with command arguments. This is the default behavior." +msgstr "设置解析不在第一个非选项处停止,允许多个命令行参数的插入相互切换。 这是默认的行为。" + +#: ../../library/optparse.rst:1394 +msgid "" +"Returns the Option instance with the option string *opt_str*, or ``None`` if" +" no options have that option string." +msgstr "返回具有选项字符串 *opt_str* 的的 Option 实例,或者如果不存在具有该选项字符串的选项则返回 ``None``。" + +#: ../../library/optparse.rst:1399 +msgid "" +"Return ``True`` if the OptionParser has an option with option string " +"*opt_str* (e.g., ``-q`` or ``--verbose``)." +msgstr "" +"如果 OptionParser 包含一个具有选项字符串 *opt_str* 的选项 (例如 ``-q`` 或 ``--verbose``) 则返回 " +"``True``。" + +#: ../../library/optparse.rst:1404 +msgid "" +"If the :class:`OptionParser` has an option corresponding to *opt_str*, that " +"option is removed. If that option provided any other option strings, all of" +" those option strings become invalid. If *opt_str* does not occur in any " +"option belonging to this :class:`OptionParser`, raises :exc:`ValueError`." +msgstr "" +"如果 :class:`OptionParser` 包含一个对应于 *opt_str* 的选项,则移除该选项。 " +"如果该选项提供了任何其他选项字符串,这些选项字符串将全部不可用。 如果 *opt_str* 不存在于任何属于此 " +":class:`OptionParser` 的选项之中,则会引发 :exc:`ValueError`。" + +#: ../../library/optparse.rst:1413 +msgid "Conflicts between options" +msgstr "选项之间的冲突" + +#: ../../library/optparse.rst:1415 +msgid "" +"If you're not careful, it's easy to define options with conflicting option " +"strings::" +msgstr "如果你不够小心,很容易会定义具有相互冲突的选项字符串的多个选项::" + +#: ../../library/optparse.rst:1422 +msgid "" +"(This is particularly true if you've defined your own OptionParser subclass " +"with some standard options.)" +msgstr "(当你自定义具有某些标准选项的 OptionParser 时特别容易发生这种情况。)" + +#: ../../library/optparse.rst:1425 +msgid "" +"Every time you add an option, :mod:`optparse` checks for conflicts with " +"existing options. If it finds any, it invokes the current conflict-handling" +" mechanism. You can set the conflict-handling mechanism either in the " +"constructor::" +msgstr "" +"每当你添加一个选项时,:mod:`optparse` 会检查它是否与现有选项冲突。 如果发现存在冲突,它将唤起当前的冲突处理机制。 " +"你可以选择在构造器中设置冲突处理机制::" + +#: ../../library/optparse.rst:1431 +msgid "or with a separate call::" +msgstr "或是在单独调用中设置::" + +#: ../../library/optparse.rst:1435 +msgid "The available conflict handlers are:" +msgstr "可用的冲突处理器有:" + +#: ../../library/optparse.rst:1439 +msgid "``\"error\"`` (default)" +msgstr "``\"error\"`` (默认)" + +#: ../../library/optparse.rst:1438 +msgid "" +"assume option conflicts are a programming error and raise " +":exc:`OptionConflictError`" +msgstr "将选项冲突视为编程错误并引发 :exc:`OptionConflictError`" + +#: ../../library/optparse.rst:1443 +msgid "``\"resolve\"``" +msgstr "``\"resolve\"``" + +#: ../../library/optparse.rst:1442 +msgid "resolve option conflicts intelligently (see below)" +msgstr "智能地解决选项冲突(见下文)" + +#: ../../library/optparse.rst:1445 +msgid "" +"As an example, let's define an :class:`OptionParser` that resolves conflicts" +" intelligently and add conflicting options to it::" +msgstr "举例来说,让我们定义一个智能地解决冲突的 :class:`OptionParser` 并向其添加相互冲突的选项::" + +#: ../../library/optparse.rst:1452 +msgid "" +"At this point, :mod:`optparse` detects that a previously-added option is " +"already using the ``-n`` option string. Since ``conflict_handler`` is " +"``\"resolve\"``, it resolves the situation by removing ``-n`` from the " +"earlier option's list of option strings. Now ``--dry-run`` is the only way " +"for the user to activate that option. If the user asks for help, the help " +"message will reflect that::" +msgstr "" + +#: ../../library/optparse.rst:1463 +msgid "" +"It's possible to whittle away the option strings for a previously-added " +"option until there are none left, and the user has no way of invoking that " +"option from the command-line. In that case, :mod:`optparse` removes that " +"option completely, so it doesn't show up in help text or anywhere else. " +"Carrying on with our existing OptionParser::" +msgstr "" + +#: ../../library/optparse.rst:1471 +msgid "" +"At this point, the original ``-n``/``--dry-run`` option is no longer " +"accessible, so :mod:`optparse` removes it, leaving this help text::" +msgstr "" +"这时,原有的 ``-n``/``--dry-run`` 选项将不再可用,因此 :mod:`optparse` 会将其移除,帮助文本将变成这样::" + +#: ../../library/optparse.rst:1483 +msgid "Cleanup" +msgstr "清理" + +#: ../../library/optparse.rst:1485 +msgid "" +"OptionParser instances have several cyclic references. This should not be a" +" problem for Python's garbage collector, but you may wish to break the " +"cyclic references explicitly by calling :meth:`~OptionParser.destroy` on " +"your OptionParser once you are done with it. This is particularly useful in" +" long-running applications where large object graphs are reachable from your" +" OptionParser." +msgstr "" +"OptionParser 实例存在一些循环引用。 这对 Python 的垃圾回收器来说应该不是问题,但你可能希望在你完成对 OptionParser " +"的使用后通过调用其 :meth:`~OptionParser.destroy` 来显式地中断循环引用。 这在可以从你的 OptionParser " +"访问大型对象图的长期运行应用程序中特别有用。" + +#: ../../library/optparse.rst:1496 +msgid "Other methods" +msgstr "其他方法" + +#: ../../library/optparse.rst:1498 +msgid "OptionParser supports several other public methods:" +msgstr "OptionParser 还支持其他一些公有方法:" + +#: ../../library/optparse.rst:1502 +msgid "" +"Set the usage string according to the rules described above for the " +"``usage`` constructor keyword argument. Passing ``None`` sets the default " +"usage string; use :data:`optparse.SUPPRESS_USAGE` to suppress a usage " +"message." +msgstr "" +"根据上述的规则为 ``usage`` 构造器关键字参数设置用法字符串。 传入 ``None`` 将设置默认的用法字符串;使用 " +":data:`optparse.SUPPRESS_USAGE` 将屏蔽用法消息。" + +#: ../../library/optparse.rst:1508 +msgid "" +"Print the usage message for the current program (``self.usage``) to *file* " +"(default stdout). Any occurrence of the string ``%prog`` in ``self.usage`` " +"is replaced with the name of the current program. Does nothing if " +"``self.usage`` is empty or not defined." +msgstr "" +"将当前程序的用法消息 (``self.usage``) 打印到 *file* (默认为 stdout)。 出现在 ``self.usage`` " +"中的字符串 ``%prog`` 将全部被替换为当前程序的名称。 如果 ``self.usage`` 为空或未定义则不做任何事情。" + +#: ../../library/optparse.rst:1515 +msgid "" +"Same as :meth:`print_usage` but returns the usage string instead of printing" +" it." +msgstr "与 :meth:`print_usage` 类似但是将返回用法字符串而不是打印它。" + +#: ../../library/optparse.rst:1520 +msgid "" +"Set default values for several option destinations at once. Using " +":meth:`set_defaults` is the preferred way to set default values for options," +" since multiple options can share the same destination. For example, if " +"several \"mode\" options all set the same destination, any one of them can " +"set the default, and the last one wins::" +msgstr "" +"一次性地为多个选项目标设置默认值。 使用 :meth:`set_defaults` 是为选项设置默认值的推荐方式同,因为多个选项可以共享同一个目标。 " +"举例来说,如果几个 \"mode\" 选项全部设置了相同的目标,则它们中的任何一个都可以设置默认值,而最终生效的将是最后一次设置的默认值::" + +#: ../../library/optparse.rst:1533 +msgid "To avoid this confusion, use :meth:`set_defaults`::" +msgstr "为避免混淆,请使用 :meth:`set_defaults`::" + +#: ../../library/optparse.rst:1545 +msgid "Option Callbacks" +msgstr "选项回调" + +#: ../../library/optparse.rst:1547 +msgid "" +"When :mod:`optparse`'s built-in actions and types aren't quite enough for " +"your needs, you have two choices: extend :mod:`optparse` or define a " +"callback option. Extending :mod:`optparse` is more general, but overkill for" +" a lot of simple cases. Quite often a simple callback is all you need." +msgstr "" +"当 :mod:`optparse` 的内置动作和类型不能满足你的需要时,你有两个选择:扩展 :mod:`optparse` 或定义一个回调选项。 扩展 " +":mod:`optparse` 的方式更为通用,但对许多简单场景来说是大材小用了。 你所需要的往往只是一个简单的回调。" + +#: ../../library/optparse.rst:1552 +msgid "There are two steps to defining a callback option:" +msgstr "定义一个回调选项分为两步:" + +#: ../../library/optparse.rst:1554 +msgid "define the option itself using the ``\"callback\"`` action" +msgstr "使用 ``\"callback\"`` 动作定义选项本身" + +#: ../../library/optparse.rst:1556 +msgid "" +"write the callback; this is a function (or method) that takes at least four " +"arguments, as described below" +msgstr "编写回调;它是一个接受至少四个参数的函数(或方法),如下所述" + +#: ../../library/optparse.rst:1563 +msgid "Defining a callback option" +msgstr "定义回调选项" + +#: ../../library/optparse.rst:1565 +msgid "" +"As always, the easiest way to define a callback option is by using the " +":meth:`OptionParser.add_option` method. Apart from :attr:`~Option.action`, " +"the only option attribute you must specify is ``callback``, the function to " +"call::" +msgstr "" +"一般来说,定义回调选项的最简单方式是使用 :meth:`OptionParser.add_option` 方法。 在 " +":attr:`~Option.action` 之外,你必须指定的唯一选项属性是 ``callback``,即要调用的函数::" + +#: ../../library/optparse.rst:1571 +msgid "" +"``callback`` is a function (or other callable object), so you must have " +"already defined ``my_callback()`` when you create this callback option. In " +"this simple case, :mod:`optparse` doesn't even know if ``-c`` takes any " +"arguments, which usually means that the option takes no arguments---the mere" +" presence of ``-c`` on the command-line is all it needs to know. In some " +"circumstances, though, you might want your callback to consume an arbitrary " +"number of command-line arguments. This is where writing callbacks gets " +"tricky; it's covered later in this section." +msgstr "" +"``callback`` 是一个函数(或其他可调用对象),因此当你创建这个回调选项时你必须已经定义了 ``my_callback()``。 " +"在这个简单的例子中,:mod:`optparse` 甚至不知道 ``-c`` 是否接受任何参数,这通常意味着该选项不接受任何参数 --- " +"它需要知道的就是存在命令行参数 ``-c``。 但是,在某些情况下,你可能希望你的回调接受任意数量的命令行参数。 " +"这是编写回调的一个麻烦之处;本小节将稍后讲解这个问题。" + +#: ../../library/optparse.rst:1580 +msgid "" +":mod:`optparse` always passes four particular arguments to your callback, " +"and it will only pass additional arguments if you specify them via " +":attr:`~Option.callback_args` and :attr:`~Option.callback_kwargs`. Thus, " +"the minimal callback function signature is::" +msgstr "" +":mod:`optparse` 总是会向你的回调传递四个特定参数,它只会在你通过 :attr:`~Option.callback_args` 和 " +":attr:`~Option.callback_kwargs` 进行指定时才传入额外的参数。 因此,最小化的回调函数签名如下::" + +#: ../../library/optparse.rst:1587 +msgid "The four arguments to a callback are described below." +msgstr "对传给回调的四个参数的说明见下文。" + +#: ../../library/optparse.rst:1589 +msgid "" +"There are several other option attributes that you can supply when you " +"define a callback option:" +msgstr "当你定义回调选项时还可以提供一些其他的选项属性:" + +#: ../../library/optparse.rst:1596 +msgid ":attr:`~Option.type`" +msgstr ":attr:`~Option.type`" + +#: ../../library/optparse.rst:1593 +msgid "" +"has its usual meaning: as with the ``\"store\"`` or ``\"append\"`` actions, " +"it instructs :mod:`optparse` to consume one argument and convert it to " +":attr:`~Option.type`. Rather than storing the converted value(s) anywhere, " +"though, :mod:`optparse` passes it to your callback function." +msgstr "" +"具有其通常的含义:与在 ``\"store\"`` 或 ``\"append\"`` 动作中一样,它指示 :mod:`optparse` " +"读取一个参数并将其转换为 :attr:`~Option.type`。 但是,:mod:`optparse` " +"并不会将所转换的值保存到某个地方,而是将其传给你的回调函数。" + +#: ../../library/optparse.rst:1602 +msgid ":attr:`~Option.nargs`" +msgstr ":attr:`~Option.nargs`" + +#: ../../library/optparse.rst:1599 +msgid "" +"also has its usual meaning: if it is supplied and > 1, :mod:`optparse` will " +"consume :attr:`~Option.nargs` arguments, each of which must be convertible " +"to :attr:`~Option.type`. It then passes a tuple of converted values to your" +" callback." +msgstr "" +"同样具有其通常的含义:如果提供了该属性并且其值 > 1,:mod:`optparse` 将读取 :attr:`~Option.nargs` " +"个参数,每个参数都必须可被转换为 :attr:`~Option.type`。 随后它会将被转换值的元组传给你的回调。" + +#: ../../library/optparse.rst:1605 +msgid ":attr:`~Option.callback_args`" +msgstr ":attr:`~Option.callback_args`" + +#: ../../library/optparse.rst:1605 +msgid "a tuple of extra positional arguments to pass to the callback" +msgstr "一个要传给回调的由额外位置参数组成的元组" + +#: ../../library/optparse.rst:1609 +msgid ":attr:`~Option.callback_kwargs`" +msgstr ":attr:`~Option.callback_kwargs`" + +#: ../../library/optparse.rst:1608 +msgid "a dictionary of extra keyword arguments to pass to the callback" +msgstr "一个要传给回调的由额外关键字参数组成的字典" + +#: ../../library/optparse.rst:1614 +msgid "How callbacks are called" +msgstr "回调应当如何调用" + +#: ../../library/optparse.rst:1616 +msgid "All callbacks are called as follows::" +msgstr "所有回调都将使用以下方式调用::" + +#: ../../library/optparse.rst:1623 +msgid "``option``" +msgstr "``option``" + +#: ../../library/optparse.rst:1623 +msgid "is the Option instance that's calling the callback" +msgstr "是调用该回调的 Option 实例" + +#: ../../library/optparse.rst:1630 +msgid "``opt_str``" +msgstr "``opt_str``" + +#: ../../library/optparse.rst:1626 +msgid "" +"is the option string seen on the command-line that's triggering the " +"callback. (If an abbreviated long option was used, ``opt_str`` will be the " +"full, canonical option string---e.g. if the user puts ``--foo`` on the " +"command-line as an abbreviation for ``--foobar``, then ``opt_str`` will be " +"``\"--foobar\"``.)" +msgstr "" +"是在触发回调的命令行参数中出现的选项字符串。 (如果使用了长选项的缩写形式,则 ``opt_str`` 将为完整规范的选项字符串 --- " +"举例来说,如果用户在命令行中将 ``--foo`` 作为 ``--foobar`` 的缩写形式,则 ``opt_str`` 将为 ``\"--" +"foobar\"``。)" + +#: ../../library/optparse.rst:1637 +msgid "``value``" +msgstr "``value``" + +#: ../../library/optparse.rst:1633 +msgid "" +"is the argument to this option seen on the command-line. :mod:`optparse` " +"will only expect an argument if :attr:`~Option.type` is set; the type of " +"``value`` will be the type implied by the option's type. If " +":attr:`~Option.type` for this option is ``None`` (no argument expected), " +"then ``value`` will be ``None``. If :attr:`~Option.nargs` > 1, ``value`` " +"will be a tuple of values of the appropriate type." +msgstr "" +"是在命令行中提供给该选项的参数。 :mod:`optparse` 将只在设置了 :attr:`~Option.type` " +"的时候才接受参数;``value`` 将为该选项的类型所指定的类型。 如果该选项的 :attr:`~Option.type` 为 ``None`` " +"(不接受参数),则 ``value`` 将为 ``None``。 如果 :attr:`~Option.nargs` > 1,则 ``value`` " +"将为由指定类型的值组成的元组。" + +#: ../../library/optparse.rst:1660 +msgid "``parser``" +msgstr "``parser``" + +#: ../../library/optparse.rst:1640 +msgid "" +"is the OptionParser instance driving the whole thing, mainly useful because " +"you can access some other interesting data through its instance attributes:" +msgstr "是驱动选项解析过程的 OptionParser 实例,主要作用在于你可以通过其实例属性访问其他一些相关数据:" + +#: ../../library/optparse.rst:1647 +msgid "``parser.largs``" +msgstr "``parser.largs``" + +#: ../../library/optparse.rst:1644 +msgid "" +"the current list of leftover arguments, ie. arguments that have been " +"consumed but are neither options nor option arguments. Feel free to modify " +"``parser.largs``, e.g. by adding more arguments to it. (This list will " +"become ``args``, the second return value of :meth:`parse_args`.)" +msgstr "" +"当前的剩余参数列表,即已被读取但不属于选项或选项参数的参数。 可以任意修改 ``parser.largs``,例如向其添加更多的参数。 (该列表将成为 " +"``args``,即 :meth:`parse_args` 的第二个返回值。)" + +#: ../../library/optparse.rst:1653 +msgid "``parser.rargs``" +msgstr "``parser.rargs``" + +#: ../../library/optparse.rst:1650 +msgid "" +"the current list of remaining arguments, ie. with ``opt_str`` and ``value`` " +"(if applicable) removed, and only the arguments following them still there." +" Feel free to modify ``parser.rargs``, e.g. by consuming more arguments." +msgstr "" +"当前的保留参数列表,即移除了 ``opt_str`` 和 ``value`` (如果可用),并且只有在它们之后的参数才会被保留。 可以任意修改 " +"``parser.rargs``,例如通过读取更多的参数。" + +#: ../../library/optparse.rst:1660 +msgid "``parser.values``" +msgstr "``parser.values``" + +#: ../../library/optparse.rst:1656 +msgid "" +"the object where option values are by default stored (an instance of " +"optparse.OptionValues). This lets callbacks use the same mechanism as the " +"rest of :mod:`optparse` for storing option values; you don't need to mess " +"around with globals or closures. You can also access or modify the value(s)" +" of any options already encountered on the command-line." +msgstr "" +"作为选项值默认保存位置的对象(一个 optparse.OptionValues 实例)。 这使得回调能使用与 :mod:`optparse` " +"的其他部分相同的机制来保存选项值;你不需要手动处理全局变量或闭包。 你还可以访问或修改在命令行中遇到的任何选项的值。" + +#: ../../library/optparse.rst:1663 +msgid "" +"is a tuple of arbitrary positional arguments supplied via the " +":attr:`~Option.callback_args` option attribute." +msgstr "是一个由通过 :attr:`~Option.callback_args` 选项属性提供的任意位置参数组成的元组。" + +#: ../../library/optparse.rst:1669 +msgid "``kwargs``" +msgstr "``kwargs``" + +#: ../../library/optparse.rst:1667 +msgid "" +"is a dictionary of arbitrary keyword arguments supplied via " +":attr:`~Option.callback_kwargs`." +msgstr "是一个由通过 :attr:`~Option.callback_kwargs` 提供的任意关键字参数组成的字典。" + +#: ../../library/optparse.rst:1674 +msgid "Raising errors in a callback" +msgstr "在回调中引发错误" + +#: ../../library/optparse.rst:1676 +msgid "" +"The callback function should raise :exc:`OptionValueError` if there are any " +"problems with the option or its argument(s). :mod:`optparse` catches this " +"and terminates the program, printing the error message you supply to stderr." +" Your message should be clear, concise, accurate, and mention the option at" +" fault. Otherwise, the user will have a hard time figuring out what they did" +" wrong." +msgstr "" +"如果选项或其参数存在任何问题则回调函数应当引发 :exc:`OptionValueError`。 :mod:`optparse` " +"将捕获该异常并终止程序,将你提供的错误消息打印到 stderr。 你的消息应当清晰、简洁、准确并指明出错的选项。 否则,用户将很难弄清楚自己做错了什么。" + +#: ../../library/optparse.rst:1686 +msgid "Callback example 1: trivial callback" +msgstr "回调示例 1:最简回调" + +#: ../../library/optparse.rst:1688 +msgid "" +"Here's an example of a callback option that takes no arguments, and simply " +"records that the option was seen::" +msgstr "下面是一个不接受任何参数,只是简单地记录所遇见的选项的回调选项示例::" + +#: ../../library/optparse.rst:1696 +msgid "Of course, you could do that with the ``\"store_true\"`` action." +msgstr "当然,你也可以使用 ``\"store_true\"`` 动作做到这一点。" + +#: ../../library/optparse.rst:1702 +msgid "Callback example 2: check option order" +msgstr "回调示例 2:检查选项顺序" + +#: ../../library/optparse.rst:1704 +msgid "" +"Here's a slightly more interesting example: record the fact that ``-a`` is " +"seen, but blow up if it comes after ``-b`` in the command-line. ::" +msgstr "下面是一个更有趣些的示例:当看到 ``-a`` 出现时将会记录,而如果它在命令行中出现于 ``-b`` 之后则将报告错误。 ::" + +#: ../../library/optparse.rst:1719 +msgid "Callback example 3: check option order (generalized)" +msgstr "回调示例 3:检查选项顺序(通用)" + +#: ../../library/optparse.rst:1721 +msgid "" +"If you want to re-use this callback for several similar options (set a flag," +" but blow up if ``-b`` has already been seen), it needs a bit of work: the " +"error message and the flag that it sets must be generalized. ::" +msgstr "" +"如果你希望为多个类似的选项重用此回调(设置旗标,而在看到 ``-b`` 出现时触发),则需要一些额外工作:它设置的错误消息和旗标必须进行通用化。 ::" + +#: ../../library/optparse.rst:1738 +msgid "Callback example 4: check arbitrary condition" +msgstr "回调示例 4:检查任意条件" + +#: ../../library/optparse.rst:1740 +msgid "" +"Of course, you could put any condition in there---you're not limited to " +"checking the values of already-defined options. For example, if you have " +"options that should not be called when the moon is full, all you have to do " +"is this::" +msgstr "当然,你可以设置任何条件 --- 并不限于检查已定义选项的值。 举例来说,如果你有一个不应当在满月时被调用的选项,你就可以这样做::" + +#: ../../library/optparse.rst:1753 +msgid "" +"(The definition of ``is_moon_full()`` is left as an exercise for the " +"reader.)" +msgstr "(定义 ``is_moon_full()`` 的任务将作为留给读者的练习。)" + +#: ../../library/optparse.rst:1759 +msgid "Callback example 5: fixed arguments" +msgstr "回调示例 5:固定的参数" + +#: ../../library/optparse.rst:1761 +msgid "" +"Things get slightly more interesting when you define callback options that " +"take a fixed number of arguments. Specifying that a callback option takes " +"arguments is similar to defining a ``\"store\"`` or ``\"append\"`` option: " +"if you define :attr:`~Option.type`, then the option takes one argument that " +"must be convertible to that type; if you further define " +":attr:`~Option.nargs`, then the option takes :attr:`~Option.nargs` " +"arguments." +msgstr "" +"当你定义接受固定数量参数的 callback 选项时情况会变得更有趣一点。 指定一个 callback 选项接受参数的操作类似于定义一个 " +"``\"store\"`` 或 ``\"append\"`` 选项:如果你定义 " +":attr:`~Option.type`,那么该选项将接受一个必须可被转换为相应类型的参数;如果你进一步定义 " +":attr:`~Option.nargs`,那么该选项将接受 :attr:`~Option.nargs` 个参数。" + +#: ../../library/optparse.rst:1768 +msgid "Here's an example that just emulates the standard ``\"store\"`` action::" +msgstr "下面是一个模拟了标准 ``\"store\"`` 动作的示例::" + +#: ../../library/optparse.rst:1777 +msgid "" +"Note that :mod:`optparse` takes care of consuming 3 arguments and converting" +" them to integers for you; all you have to do is store them. (Or whatever; " +"obviously you don't need a callback for this example.)" +msgstr "" +"请注意 :mod:`optparse` 将为你读取 3 个参数并将它们转换为整数;你所要做的只是保存它们。 " +"(或任何其他操作;对于这个示例显然你不需要使用回调。)" + +#: ../../library/optparse.rst:1785 +msgid "Callback example 6: variable arguments" +msgstr "回调示例 6:可变的参数" + +#: ../../library/optparse.rst:1787 +msgid "" +"Things get hairy when you want an option to take a variable number of " +"arguments. For this case, you must write a callback, as :mod:`optparse` " +"doesn't provide any built-in capabilities for it. And you have to deal with" +" certain intricacies of conventional Unix command-line parsing that " +":mod:`optparse` normally handles for you. In particular, callbacks should " +"implement the conventional rules for bare ``--`` and ``-`` arguments:" +msgstr "" +"当你想要一个选项接受可变数数量的参数时情况会变得更麻烦一点。 对于这种场景,你必须编写一个回调,因为 :mod:`optparse` " +"没有为它提供任何内置的相应功能。 而你必须处理 :mod:`optparse` 通常会为你处理的传统 Unix 命令行的某些细节问题。 " +"特别地,回调应当实现单个 ``--`` 和 ``-`` 参数的惯例规则:" + +#: ../../library/optparse.rst:1794 +msgid "either ``--`` or ``-`` can be option arguments" +msgstr "``--`` 或 ``-`` 都可以作为选项参数" + +#: ../../library/optparse.rst:1796 +msgid "" +"bare ``--`` (if not the argument to some option): halt command-line " +"processing and discard the ``--``" +msgstr "单个 ``--`` (如果不是某个选项的参数): 停止命令行处理并丢弃该 ``--``" + +#: ../../library/optparse.rst:1799 +msgid "" +"bare ``-`` (if not the argument to some option): halt command-line " +"processing but keep the ``-`` (append it to ``parser.largs``)" +msgstr "单个 ``-`` (如果不是某个选项的参数): 停止命令行处理但保留 ``-`` (将其添加到 ``parser.largs``)" + +#: ../../library/optparse.rst:1802 +msgid "" +"If you want an option that takes a variable number of arguments, there are " +"several subtle, tricky issues to worry about. The exact implementation you " +"choose will be based on which trade-offs you're willing to make for your " +"application (which is why :mod:`optparse` doesn't support this sort of thing" +" directly)." +msgstr "" +"如果你想要一个选项接受可变数量的参数,那么有几个微妙、棘手的问题需要考虑到。 你选择的具体实现将基于你的应用程序对于各方面利弊的权衡(这就是为什么 " +":mod:`optparse` 没有直接支持这一功能)。" + +#: ../../library/optparse.rst:1808 +msgid "" +"Nevertheless, here's a stab at a callback for an option with variable " +"arguments::" +msgstr "无论如何,下面是一个对于接受可变参数的选项的回调的尝试::" + +#: ../../library/optparse.rst:1842 +msgid "Extending :mod:`optparse`" +msgstr "扩展 :mod:`optparse`" + +#: ../../library/optparse.rst:1844 +msgid "" +"Since the two major controlling factors in how :mod:`optparse` interprets " +"command-line options are the action and type of each option, the most likely" +" direction of extension is to add new actions and new types." +msgstr "" +"由于控制 :mod:`optparse` 如何读取命令行选项的两个主要因子是每个选项的动作和类型,所以扩展最可能的方向就是添加新的动作和新的类型。" + +#: ../../library/optparse.rst:1852 +msgid "Adding new types" +msgstr "添加新的类型" + +#: ../../library/optparse.rst:1854 +msgid "" +"To add new types, you need to define your own subclass of :mod:`optparse`'s " +":class:`Option` class. This class has a couple of attributes that define " +":mod:`optparse`'s types: :attr:`~Option.TYPES` and " +":attr:`~Option.TYPE_CHECKER`." +msgstr "" +"要添加新的类型,你必须自定义 :mod:`optparse` 的 :class:`Option` 类的子类。 这个类包含几个用来定义 " +":mod:`optparse` 的类型的属性: :attr:`~Option.TYPES` 和 " +":attr:`~Option.TYPE_CHECKER`。" + +#: ../../library/optparse.rst:1860 +msgid "" +"A tuple of type names; in your subclass, simply define a new tuple " +":attr:`TYPES` that builds on the standard one." +msgstr "一个由类型名称组成的元组;在你的子类中,简单地定义一个在标准元组基础上构建的新元组 :attr:`TYPES`。" + +#: ../../library/optparse.rst:1865 +msgid "" +"A dictionary mapping type names to type-checking functions. A type-checking" +" function has the following signature::" +msgstr "一个将类型名称映射到类型检查函数的字典。 类型检查函数具有如下签名::" + +#: ../../library/optparse.rst:1870 +msgid "" +"where ``option`` is an :class:`Option` instance, ``opt`` is an option string" +" (e.g., ``-f``), and ``value`` is the string from the command line that must" +" be checked and converted to your desired type. ``check_mytype()`` should " +"return an object of the hypothetical type ``mytype``. The value returned by" +" a type-checking function will wind up in the OptionValues instance returned" +" by :meth:`OptionParser.parse_args`, or be passed to a callback as the " +"``value`` parameter." +msgstr "" +"其中 ``option`` 是一个 :class:`Option` 实例,``opt`` 是一个选项字符串 (例如 ``-f``),而 " +"``value`` 是来自命令行的必须被检查并转换为你想要的类型的字符串。 ``check_mytype()`` 应当返回假设的类型 " +"``mytype`` 的对象。 类型检查函数所返回的值将最终出现在 :meth:`OptionParser.parse_args` 所返回的 " +"OptionValues 实例中,或是作为 ``value`` 形参传给一个回调。" + +#: ../../library/optparse.rst:1878 +msgid "" +"Your type-checking function should raise :exc:`OptionValueError` if it " +"encounters any problems. :exc:`OptionValueError` takes a single string " +"argument, which is passed as-is to :class:`OptionParser`'s :meth:`error` " +"method, which in turn prepends the program name and the string " +"``\"error:\"`` and prints everything to stderr before terminating the " +"process." +msgstr "" +"如果你的类型检查函数遇到任何问题则应当引发 :exc:`OptionValueError`。 :exc:`OptionValueError` " +"接受一个字符串参数,该参数将被原样传递给 :class:`OptionParser` 的 :meth:`error` " +"方法,该方法将随后附加程序名称和字符串 ``\"error:\"`` 并在终结进程之前将所有信息打印到 stderr。" + +#: ../../library/optparse.rst:1884 +msgid "" +"Here's a silly example that demonstrates adding a ``\"complex\"`` option " +"type to parse Python-style complex numbers on the command line. (This is " +"even sillier than it used to be, because :mod:`optparse` 1.3 added built-in " +"support for complex numbers, but never mind.)" +msgstr "" +"下面这个很傻的例子演示了如何添加一个 ``\"complex\"`` 选项类型以便在命令行中解析 Python 风格的复数。 " +"(现在这个例子比以前更傻了,因为 :mod:`optparse` 1.3 增加了对复数的内置支持,但是不必管它了。)" + +#: ../../library/optparse.rst:1889 +msgid "First, the necessary imports::" +msgstr "首先,必要的导入操作::" + +#: ../../library/optparse.rst:1894 +msgid "" +"You need to define your type-checker first, since it's referred to later (in" +" the :attr:`~Option.TYPE_CHECKER` class attribute of your Option subclass)::" +msgstr "" +"你必须先定义自己的类型检查器,因为以后它会被引用(在你的 Option 子类的 :attr:`~Option.TYPE_CHECKER` 类属性中)::" + +#: ../../library/optparse.rst:1904 +msgid "Finally, the Option subclass::" +msgstr "最后,是 Option 子类::" + +#: ../../library/optparse.rst:1911 +msgid "" +"(If we didn't make a :func:`copy` of :attr:`Option.TYPE_CHECKER`, we would " +"end up modifying the :attr:`~Option.TYPE_CHECKER` attribute of " +":mod:`optparse`'s Option class. This being Python, nothing stops you from " +"doing that except good manners and common sense.)" +msgstr "" +"(如果我们不对 :attr:`Option.TYPE_CHECKER` 执行 :func:`copy`,我们就将修改 :mod:`optparse` 的" +" Option 类的 :attr:`~Option.TYPE_CHECKER` 属性。 Python " +"就是这样,除了礼貌和常识以外没有任何东西能阻止你这样做。)" + +#: ../../library/optparse.rst:1916 +msgid "" +"That's it! Now you can write a script that uses the new option type just " +"like any other :mod:`optparse`\\ -based script, except you have to instruct " +"your OptionParser to use MyOption instead of Option::" +msgstr "" +"就是这样! 现在你可以编写一个脚本以与其他基于 :mod:`optparse` 的脚本相同的方式使用新的选项类型,除了你必须指示你的 " +"OptionParser 使用 MyOption 而不是 Option::" + +#: ../../library/optparse.rst:1923 +msgid "" +"Alternately, you can build your own option list and pass it to OptionParser;" +" if you don't use :meth:`add_option` in the above way, you don't need to " +"tell OptionParser which option class to use::" +msgstr "" +"作为替代选择,你可以构建你自己的选项列表并将它传给 OptionParser;如果你不是以上述方式使用 " +":meth:`add_option`,则你不需要告诉 OptionParser 使用哪个选项类::" + +#: ../../library/optparse.rst:1934 +msgid "Adding new actions" +msgstr "添加新的动作" + +#: ../../library/optparse.rst:1936 +msgid "" +"Adding new actions is a bit trickier, because you have to understand that " +":mod:`optparse` has a couple of classifications for actions:" +msgstr "添加新的动作有一点复杂,因为你必须理解 :mod:`optparse` 对于动作有几种分类:" + +#: ../../library/optparse.rst:1942 +msgid "\"store\" actions" +msgstr "\"store\" 类动作" + +#: ../../library/optparse.rst:1940 +msgid "" +"actions that result in :mod:`optparse` storing a value to an attribute of " +"the current OptionValues instance; these options require a " +":attr:`~Option.dest` attribute to be supplied to the Option constructor." +msgstr "" +"会使得 :mod:`optparse` 将某个值保存到当前 OptionValues 实例的特定属性中的动作;这些选项要求向 Option " +"构造器提供一个 :attr:`~Option.dest` 属性。attribute to be supplied to the constructor." + +#: ../../library/optparse.rst:1948 +msgid "\"typed\" actions" +msgstr "\"typed\" 类动作" + +#: ../../library/optparse.rst:1945 +msgid "" +"actions that take a value from the command line and expect it to be of a " +"certain type; or rather, a string that can be converted to a certain type. " +"These options require a :attr:`~Option.type` attribute to the Option " +"constructor." +msgstr "" +"从命令行接受某个值并预期它是一个特定类型;或者更准确地说,是可被转换为一个特定类型的字符串的动作。 这些选项要求向 Option 构造器提供一个 " +":attr:`~Option.type` 属性。attribute to the constructor." + +#: ../../library/optparse.rst:1950 +msgid "" +"These are overlapping sets: some default \"store\" actions are " +"``\"store\"``, ``\"store_const\"``, ``\"append\"``, and ``\"count\"``, while" +" the default \"typed\" actions are ``\"store\"``, ``\"append\"``, and " +"``\"callback\"``." +msgstr "" +"这些是相互重叠的集合:默认的 \"store\" 类动作有 ``\"store\"``, ``\"store_const\"``, " +"``\"append\"`` 和 ``\"count\"``,而默认的 \"typed\" 类动作有 ``\"store\"``, " +"``\"append\"`` 和 ``\"callback\"``。" + +#: ../../library/optparse.rst:1954 +msgid "" +"When you add an action, you need to categorize it by listing it in at least " +"one of the following class attributes of Option (all are lists of strings):" +msgstr "当你添加一个动作时,你需要将它列在 Option 的以下类属性的至少一个当中以对它进行分类(全部为字符串列表):" + +#: ../../library/optparse.rst:1959 +msgid "All actions must be listed in ACTIONS." +msgstr "所有动作必须在 ACTIONS 中列出。" + +#: ../../library/optparse.rst:1963 +msgid "\"store\" actions are additionally listed here." +msgstr "\"store\" 类动作要额外地在此列出。" + +#: ../../library/optparse.rst:1967 +msgid "\"typed\" actions are additionally listed here." +msgstr "\"typed\" 类动作要额外地在此列出。" + +#: ../../library/optparse.rst:1971 +msgid "" +"Actions that always take a type (i.e. whose options always take a value) are" +" additionally listed here. The only effect of this is that :mod:`optparse` " +"assigns the default type, ``\"string\"``, to options with no explicit type " +"whose action is listed in :attr:`ALWAYS_TYPED_ACTIONS`." +msgstr "" +"总是会接受一个类型的动作(即其选项总是会接受一个值)要额外地在此列出。 它带来的唯一影响是 :mod:`optparse` 会将默认类型 " +"``\"string\"`` 赋值给动作在 :attr:`ALWAYS_TYPED_ACTIONS` 中列出而未显式指定类型的选项。" + +#: ../../library/optparse.rst:1976 +msgid "" +"In order to actually implement your new action, you must override Option's " +":meth:`take_action` method and add a case that recognizes your action." +msgstr "为了真正实现你的新动作,你必须重写 Option 的 :meth:`take_action` 方法并添加一个识别你的动作的分支。" + +#: ../../library/optparse.rst:1979 +msgid "" +"For example, let's add an ``\"extend\"`` action. This is similar to the " +"standard ``\"append\"`` action, but instead of taking a single value from " +"the command-line and appending it to an existing list, ``\"extend\"`` will " +"take multiple values in a single comma-delimited string, and extend an " +"existing list with them. That is, if ``--names`` is an ``\"extend\"`` " +"option of type ``\"string\"``, the command line ::" +msgstr "" +"例如,让我们添加一个 ``\"extend\"`` 动作。 它类似于标准的 ``\"append\"`` 动作,但 ``\"extend\"`` " +"不是从命令行接受单个值并将其添加到现有列表,而是接受形式为以单个逗号分隔的多个值的字符串,并用这些值来扩展现有列表。 也就是说,如果 " +"``--names`` 是一个类型为 ``\"string\"`` 的 ``\"extend\"`` 选项,则命令行 ::" + +#: ../../library/optparse.rst:1988 +msgid "would result in a list ::" +msgstr "将得到一个列表 ::" + +#: ../../library/optparse.rst:1992 +msgid "Again we define a subclass of Option::" +msgstr "我们再定义一个 Option 的子类::" + +#: ../../library/optparse.rst:2009 +msgid "Features of note:" +msgstr "应注意的特性:" + +#: ../../library/optparse.rst:2011 +msgid "" +"``\"extend\"`` both expects a value on the command-line and stores that " +"value somewhere, so it goes in both :attr:`~Option.STORE_ACTIONS` and " +":attr:`~Option.TYPED_ACTIONS`." +msgstr "" +"``\"extend\"`` 既预期在命令行接受一个值又会将该值保存到某处,因此它同时被归类于 " +":attr:`~Option.STORE_ACTIONS` 和 :attr:`~Option.TYPED_ACTIONS`。" + +#: ../../library/optparse.rst:2015 +msgid "" +"to ensure that :mod:`optparse` assigns the default type of ``\"string\"`` to" +" ``\"extend\"`` actions, we put the ``\"extend\"`` action in " +":attr:`~Option.ALWAYS_TYPED_ACTIONS` as well." +msgstr "" +"为确保 :mod:`optparse` 将 ``\"string\"`` 的默认类型赋值给 ``\"extend\"`` 动作,我们同时将 " +"``\"extend\"`` 动作归类于 :attr:`~Option.ALWAYS_TYPED_ACTIONS`。" + +#: ../../library/optparse.rst:2019 +msgid "" +":meth:`MyOption.take_action` implements just this one new action, and passes" +" control back to :meth:`Option.take_action` for the standard :mod:`optparse`" +" actions." +msgstr "" +":meth:`MyOption.take_action` 只实现了这一个新动作,并将控制权回传给 :meth:`Option.take_action` " +"以执行标准的 :mod:`optparse` 动作。" + +#: ../../library/optparse.rst:2023 +msgid "" +"``values`` is an instance of the optparse_parser.Values class, which " +"provides the very useful :meth:`ensure_value` method. :meth:`ensure_value` " +"is essentially :func:`getattr` with a safety valve; it is called as ::" +msgstr "" +"``values`` 是 optparse_parser.Values 类的一个实例,该类提供了非常有用的 :meth:`ensure_value` " +"方法。 :meth:`ensure_value` 实际就是一个带有安全阀的 :func:`getattr`;它的调用形式为 ::" + +#: ../../library/optparse.rst:2029 +msgid "" +"If the ``attr`` attribute of ``values`` doesn't exist or is ``None``, then " +"ensure_value() first sets it to ``value``, and then returns 'value. This is " +"very handy for actions like ``\"extend\"``, ``\"append\"``, and " +"``\"count\"``, all of which accumulate data in a variable and expect that " +"variable to be of a certain type (a list for the first two, an integer for " +"the latter). Using :meth:`ensure_value` means that scripts using your " +"action don't have to worry about setting a default value for the option " +"destinations in question; they can just leave the default as ``None`` and " +":meth:`ensure_value` will take care of getting it right when it's needed." +msgstr "" +"如果 ``values`` 的 ``attr`` 属性不存在或为 ``None``,则 ensure_value() 会先将其设为 " +"``value``,然后返回该值。 这非常适用于 ``\"extend\"``, ``\"append\"`` 和 ``\"count\"`` " +"等动作,它们会将数据累积在一个变量中并预期该变量属于特定的类型(前两项是一个列表,后一项是一个整数)。 使用 :meth:`ensure_value` " +"意味着使用你的动作的脚本无需关心为相应的选项目标设置默认值;可以简单地保持默认的 ``None`` 则 :meth:`ensure_value` " +"将在必要时负责为其设置适当的值。" diff --git a/library/os.path.po b/library/os.path.po new file mode 100644 index 000000000..cb9cc98dd --- /dev/null +++ b/library/os.path.po @@ -0,0 +1,561 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) 2001-2022, Python Software Foundation +# This file is distributed under the same license as the Python package. +# FIRST AUTHOR , YEAR. +# +# Translators: +# Zombie110year , 2019 +# ppcfish , 2019 +# Arisaka97 , 2020 +# Freesand Leo , 2022 +# +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: Python 3.9\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2022-11-04 14:34+0000\n" +"PO-Revision-Date: 2017-02-16 23:20+0000\n" +"Last-Translator: Freesand Leo , 2022\n" +"Language-Team: Chinese (China) (https://www.transifex.com/python-doc/teams/5390/zh_CN/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: zh_CN\n" +"Plural-Forms: nplurals=1; plural=0;\n" + +#: ../../library/os.path.rst:2 +msgid ":mod:`os.path` --- Common pathname manipulations" +msgstr ":mod:`os.path` --- 常用路径操作" + +#: ../../library/os.path.rst:7 +msgid "" +"**Source code:** :source:`Lib/posixpath.py` (for POSIX) and " +":source:`Lib/ntpath.py` (for Windows)." +msgstr "" +"**源代码:** :source:`Lib/posixpath.py` (用于 POSIX) 和 :source:`Lib/ntpath.py` (用于" +" Windows)。" + +#: ../../library/os.path.rst:14 +msgid "" +"This module implements some useful functions on pathnames. To read or write " +"files see :func:`open`, and for accessing the filesystem see the :mod:`os` " +"module. The path parameters can be passed as strings, or bytes, or any " +"object implementing the :class:`os.PathLike` protocol." +msgstr "" +"此模块实现了一些有用的路径名称相关函数。 要读取或写入文件请参见 :func:`open`,对于访问文件系统请参阅 :mod:`os` 模块。 传给 " +"path 形参的可以是字符串、字节串或者任何实现了 :class:`os.PathLike` 协议的对象。" + +#: ../../library/os.path.rst:19 +msgid "" +"Unlike a unix shell, Python does not do any *automatic* path expansions. " +"Functions such as :func:`expanduser` and :func:`expandvars` can be invoked " +"explicitly when an application desires shell-like path expansion. (See also" +" the :mod:`glob` module.)" +msgstr "" +"与unix shell不同,Python不执行任何 *自动* 路径扩展。当应用程序需要类似shell的路径扩展时,可以显式调用诸如 " +":func:`expanduser` 和 :func:`expandvars` 之类的函数。 (另请参见 :mod:`glob` 模块。)" + +#: ../../library/os.path.rst:26 +msgid "The :mod:`pathlib` module offers high-level path objects." +msgstr ":mod:`pathlib` 模块提供高级路径对象。" + +#: ../../library/os.path.rst:31 +msgid "" +"All of these functions accept either only bytes or only string objects as " +"their parameters. The result is an object of the same type, if a path or " +"file name is returned." +msgstr "所有这些函数都仅接受字节或字符串对象作为其参数。如果返回路径或文件名,则结果是相同类型的对象。" + +#: ../../library/os.path.rst:37 +msgid "" +"Since different operating systems have different path name conventions, " +"there are several versions of this module in the standard library. The " +":mod:`os.path` module is always the path module suitable for the operating " +"system Python is running on, and therefore usable for local paths. However," +" you can also import and use the individual modules if you want to " +"manipulate a path that is *always* in one of the different formats. They " +"all have the same interface:" +msgstr "" +"由于不同的操作系统具有不同的路径名称约定,因此标准库中有此模块的几个版本。:mod:`os.path` 模块始终是适合 Python " +"运行的操作系统的路径模块,因此可用于本地路径。但是,如果操作的路径 *总是* " +"以一种不同的格式显示,那么也可以分别导入和使用各个模块。它们都具有相同的接口:" + +#: ../../library/os.path.rst:45 +msgid ":mod:`posixpath` for UNIX-style paths" +msgstr ":mod:`posixpath` 用于Unix 样式的路径" + +#: ../../library/os.path.rst:46 +msgid ":mod:`ntpath` for Windows paths" +msgstr ":mod:`ntpath` 用于 Windows 路径" + +#: ../../library/os.path.rst:51 +msgid "" +":func:`exists`, :func:`lexists`, :func:`isdir`, :func:`isfile`, " +":func:`islink`, and :func:`ismount` now return ``False`` instead of raising " +"an exception for paths that contain characters or bytes unrepresentable at " +"the OS level." +msgstr "" +":func:`exists`、:func:`lexists`、:func:`isdir`、:func:`isfile`、:func:`islink` 和" +" :func:`ismount` 现在遇到系统层面上不可表示的字符或字节的路径时,会返回 ``False``,而不是抛出异常。" + +#: ../../library/os.path.rst:59 +msgid "" +"Return a normalized absolutized version of the pathname *path*. On most " +"platforms, this is equivalent to calling the function :func:`normpath` as " +"follows: ``normpath(join(os.getcwd(), path))``." +msgstr "" +"返回路径 *path* 的绝对路径(标准化的)。在大多数平台上,这等同于用 ``normpath(join(os.getcwd(), path))`` " +"的方式调用 :func:`normpath` 函数。" + +#: ../../library/os.path.rst:63 ../../library/os.path.rst:76 +#: ../../library/os.path.rst:116 ../../library/os.path.rst:125 +#: ../../library/os.path.rst:141 ../../library/os.path.rst:151 +#: ../../library/os.path.rst:177 ../../library/os.path.rst:197 +#: ../../library/os.path.rst:214 ../../library/os.path.rst:226 +#: ../../library/os.path.rst:235 ../../library/os.path.rst:245 +#: ../../library/os.path.rst:255 ../../library/os.path.rst:265 +#: ../../library/os.path.rst:275 ../../library/os.path.rst:294 +#: ../../library/os.path.rst:324 ../../library/os.path.rst:344 +#: ../../library/os.path.rst:358 ../../library/os.path.rst:377 +#: ../../library/os.path.rst:395 ../../library/os.path.rst:408 +#: ../../library/os.path.rst:424 ../../library/os.path.rst:440 +#: ../../library/os.path.rst:465 ../../library/os.path.rst:496 +msgid "Accepts a :term:`path-like object`." +msgstr "接受一个 :term:`类路径对象 `。" + +#: ../../library/os.path.rst:69 +msgid "" +"Return the base name of pathname *path*. This is the second element of the " +"pair returned by passing *path* to the function :func:`split`. Note that " +"the result of this function is different from the Unix :program:`basename` " +"program; where :program:`basename` for ``'/foo/bar/'`` returns ``'bar'``, " +"the :func:`basename` function returns an empty string (``''``)." +msgstr "" +"返回路径 *path* 的基本名称。这是将 *path* 传入函数 :func:`split` " +"之后,返回的一对值中的第二个元素。请注意,此函数的结果与Unix :program:`basename` " +"程序不同。:program:`basename` 在 ``'/foo/bar/'`` 上返回 ``'bar'``,而 :func:`basename` " +"函数返回一个空字符串 (``''``)。" + +#: ../../library/os.path.rst:82 +msgid "" +"Return the longest common sub-path of each pathname in the sequence *paths*." +" Raise :exc:`ValueError` if *paths* contain both absolute and relative " +"pathnames, the *paths* are on the different drives or if *paths* is empty. " +"Unlike :func:`commonprefix`, this returns a valid path." +msgstr "" +"接受包含多个路径的序列 *paths*,返回 *paths* 的最长公共子路径。如果 *paths* 同时包含绝对路径和相对路径,或 *paths* " +"在不同的驱动器上,或 *paths* 为空,则抛出 :exc:`ValueError` 异常。与 :func:`commonprefix` " +"不同,本方法返回有效路径。" + +#: ../../library/os.path.rst:89 ../../library/os.path.rst:376 +#: ../../library/os.path.rst:388 ../../library/os.path.rst:404 +#: ../../library/os.path.rst:420 +msgid ":ref:`Availability `: Unix, Windows." +msgstr ":ref:`可用性 `: Unix, Windows。" + +#: ../../library/os.path.rst:92 +msgid "Accepts a sequence of :term:`path-like objects `." +msgstr "接受一个 :term:`类路径对象 ` 序列。" + +#: ../../library/os.path.rst:98 +msgid "" +"Return the longest path prefix (taken character-by-character) that is a " +"prefix of all paths in *list*. If *list* is empty, return the empty string" +" (``''``)." +msgstr "接受包含多个路径的 *列表*,返回所有路径的最长公共前缀(逐字符比较)。如果 *列表* 为空,则返回空字符串 (``''``)。" + +#: ../../library/os.path.rst:104 +msgid "" +"This function may return invalid paths because it works a character at a " +"time. To obtain a valid path, see :func:`commonpath`." +msgstr "此函数是逐字符比较,因此可能返回无效路径。要获取有效路径,参见 :func:`commonpath`。" + +#: ../../library/os.path.rst:122 +msgid "" +"Return the directory name of pathname *path*. This is the first element of " +"the pair returned by passing *path* to the function :func:`split`." +msgstr "返回路径 *path* 的目录名称。这是将 *path* 传入函数 :func:`split` 之后,返回的一对值中的第一个元素。" + +#: ../../library/os.path.rst:131 +msgid "" +"Return ``True`` if *path* refers to an existing path or an open file " +"descriptor. Returns ``False`` for broken symbolic links. On some " +"platforms, this function may return ``False`` if permission is not granted " +"to execute :func:`os.stat` on the requested file, even if the *path* " +"physically exists." +msgstr "" +"如果 *path* 指向一个已存在的路径或已打开的文件描述符,返回 ``True``。对于失效的符号链接,返回 " +"``False``。在某些平台上,如果使用 :func:`os.stat` 查询到目标文件没有执行权限,即使 *path* 确实存在,本函数也可能返回 " +"``False``。" + +#: ../../library/os.path.rst:137 +msgid "" +"*path* can now be an integer: ``True`` is returned if it is an open file " +"descriptor, ``False`` otherwise." +msgstr "*path* 现在可以是一个整数:如果该整数是一个已打开的文件描述符,返回 ``True``,否则返回 ``False``。" + +#: ../../library/os.path.rst:147 +msgid "" +"Return ``True`` if *path* refers to an existing path. Returns ``True`` for " +"broken symbolic links. Equivalent to :func:`exists` on platforms lacking " +":func:`os.lstat`." +msgstr "" +"如果 *path* 指向一个已存在的路径,返回 ``True``。对于失效的符号链接,也返回 ``True``。在缺失 :func:`os.lstat`" +" 的平台上等同于 :func:`exists`。" + +#: ../../library/os.path.rst:159 +msgid "" +"On Unix and Windows, return the argument with an initial component of ``~`` " +"or ``~user`` replaced by that *user*'s home directory." +msgstr "在 Unix 和 Windows 上,将参数中开头部分的 ``~`` 或 ``~user`` 替换为当前 *用户* 的家目录并返回。" + +#: ../../library/os.path.rst:164 +msgid "" +"On Unix, an initial ``~`` is replaced by the environment variable " +":envvar:`HOME` if it is set; otherwise the current user's home directory is " +"looked up in the password directory through the built-in module :mod:`pwd`. " +"An initial ``~user`` is looked up directly in the password directory." +msgstr "" +"在 Unix 上,开头的 ``~`` 会被环境变量 :envvar:`HOME` 代替,如果变量未设置,则通过内置模块 :mod:`pwd` 在 " +"password 目录中查找当前用户的主目录。以 ``~user`` 开头则直接在 password 目录中查找。" + +#: ../../library/os.path.rst:169 +msgid "" +"On Windows, :envvar:`USERPROFILE` will be used if set, otherwise a " +"combination of :envvar:`HOMEPATH` and :envvar:`HOMEDRIVE` will be used. An " +"initial ``~user`` is handled by stripping the last directory component from " +"the created user path derived above." +msgstr "" +"在 Windows 上,如果设置了 :envvar:`USERPROFILE`,就使用这个变量,否则会将 :envvar:`HOMEPATH` 和 " +":envvar:`HOMEDRIVE` 结合在一起使用。以 ``~user`` 开头则将上述方法生成路径的最后一截目录替换成 user。" + +#: ../../library/os.path.rst:174 +msgid "" +"If the expansion fails or if the path does not begin with a tilde, the path " +"is returned unchanged." +msgstr "如果展开路径失败,或者路径不是以波浪号开头,则路径将保持不变。" + +#: ../../library/os.path.rst:180 +msgid "No longer uses :envvar:`HOME` on Windows." +msgstr "Windows 不再使用 :envvar:`HOME`。" + +#: ../../library/os.path.rst:189 +msgid "" +"Return the argument with environment variables expanded. Substrings of the " +"form ``$name`` or ``${name}`` are replaced by the value of environment " +"variable *name*. Malformed variable names and references to non-existing " +"variables are left unchanged." +msgstr "" +"输入带有环境变量的路径作为参数,返回展开变量以后的路径。``$name`` 或 ``${name}`` 形式的子字符串被环境变量 *name* " +"的值替换。格式错误的变量名称和对不存在变量的引用保持不变。" + +#: ../../library/os.path.rst:194 +msgid "" +"On Windows, ``%name%`` expansions are supported in addition to ``$name`` and" +" ``${name}``." +msgstr "在 Windows 上,除了 ``$name`` 和 ``${name}`` 外,还可以展开 ``%name%``。" + +#: ../../library/os.path.rst:203 +msgid "" +"Return the time of last access of *path*. The return value is a floating " +"point number giving the number of seconds since the epoch (see the " +":mod:`time` module). Raise :exc:`OSError` if the file does not exist or is " +"inaccessible." +msgstr "" +"返回 *path* 的最后访问时间。返回值是一个浮点数,为纪元秒数(参见 :mod:`time` 模块)。如果该文件不存在或不可访问,则抛出 " +":exc:`OSError` 异常。" + +#: ../../library/os.path.rst:210 +msgid "" +"Return the time of last modification of *path*. The return value is a " +"floating point number giving the number of seconds since the epoch (see the" +" :mod:`time` module). Raise :exc:`OSError` if the file does not exist or is" +" inaccessible." +msgstr "" +"返回 *path* 的最后修改时间。返回值是一个浮点数,为纪元秒数(参见 :mod:`time` 模块)。如果该文件不存在或不可访问,则抛出 " +":exc:`OSError` 异常。" + +#: ../../library/os.path.rst:220 +msgid "" +"Return the system's ctime which, on some systems (like Unix) is the time of " +"the last metadata change, and, on others (like Windows), is the creation " +"time for *path*. The return value is a number giving the number of seconds " +"since the epoch (see the :mod:`time` module). Raise :exc:`OSError` if the " +"file does not exist or is inaccessible." +msgstr "" +"返回 *path* 在系统中的 ctime,在有些系统(比如 Unix)上,它是元数据的最后修改时间,其他系统(比如 Windows)上,它是 " +"*path* 的创建时间。返回值是一个数,为纪元秒数(参见 :mod:`time` 模块)。如果该文件不存在或不可访问,则抛出 " +":exc:`OSError` 异常。" + +#: ../../library/os.path.rst:232 +msgid "" +"Return the size, in bytes, of *path*. Raise :exc:`OSError` if the file does" +" not exist or is inaccessible." +msgstr "返回 *path* 的大小,以字节为单位。如果该文件不存在或不可访问,则抛出 :exc:`OSError` 异常。" + +#: ../../library/os.path.rst:241 +msgid "" +"Return ``True`` if *path* is an absolute pathname. On Unix, that means it " +"begins with a slash, on Windows that it begins with a (back)slash after " +"chopping off a potential drive letter." +msgstr "" +"如果 *path* 是一个绝对路径,则返回 ``True``。在 Unix 上,它就是以斜杠开头,而在 Windows " +"上,它可以是去掉驱动器号后以斜杠(或反斜杠)开头。" + +#: ../../library/os.path.rst:251 +msgid "" +"Return ``True`` if *path* is an :func:`existing ` regular file. This" +" follows symbolic links, so both :func:`islink` and :func:`isfile` can be " +"true for the same path." +msgstr "" +"如果 *path* 是 :func:`现有的 ` 常规文件,则返回 " +"``True``。本方法会跟踪符号链接,因此,对于同一路径,:func:`islink` 和 :func:`isfile` 都可能为 ``True``。" + +#: ../../library/os.path.rst:261 +msgid "" +"Return ``True`` if *path* is an :func:`existing ` directory. This " +"follows symbolic links, so both :func:`islink` and :func:`isdir` can be true" +" for the same path." +msgstr "" +"如果 *path* 是 :func:`现有的 ` 目录,则返回 " +"``True``。本方法会跟踪符号链接,因此,对于同一路径,:func:`islink` 和 :func:`isdir` 都可能为 ``True``。" + +#: ../../library/os.path.rst:271 +msgid "" +"Return ``True`` if *path* refers to an :func:`existing ` directory " +"entry that is a symbolic link. Always ``False`` if symbolic links are not " +"supported by the Python runtime." +msgstr "" +"如果 *path* 指向的 :func:`现有 ` 目录条目是一个符号链接,则返回 ``True``。如果 Python " +"运行时不支持符号链接,则总是返回 ``False``。" + +#: ../../library/os.path.rst:281 +msgid "" +"Return ``True`` if pathname *path* is a :dfn:`mount point`: a point in a " +"file system where a different file system has been mounted. On POSIX, the " +"function checks whether *path*'s parent, :file:`{path}/..`, is on a " +"different device than *path*, or whether :file:`{path}/..` and *path* point " +"to the same i-node on the same device --- this should detect mount points " +"for all Unix and POSIX variants. It is not able to reliably detect bind " +"mounts on the same filesystem. On Windows, a drive letter root and a share " +"UNC are always mount points, and for any other path ``GetVolumePathName`` is" +" called to see if it is different from the input path." +msgstr "" +"如果路径 *path* 是 :dfn:`挂载点` (文件系统中挂载其他文件系统的点),则返回 ``True``。在 POSIX 上,该函数检查 " +"*path* 的父目录 :file:`{path}/..` 是否在与 *path* 不同的设备上,或者 :file:`{path}/..` 和 " +"*path* 是否指向同一设备上的同一 inode(这一检测挂载点的方法适用于所有 Unix 和 POSIX " +"变体)。本方法不能可靠地检测同一文件系统上的绑定挂载 (bind mount)。在 Windows 上,盘符和共享 UNC " +"始终是挂载点,对于任何其他路径,将调用 ``GetVolumePathName`` 来查看它是否与输入的路径不同。" + +#: ../../library/os.path.rst:291 +msgid "Support for detecting non-root mount points on Windows." +msgstr "支持在 Windows 上检测非根挂载点。" + +#: ../../library/os.path.rst:300 +msgid "" +"Join one or more path components intelligently. The return value is the " +"concatenation of *path* and any members of *\\*paths* with exactly one " +"directory separator following each non-empty part except the last, meaning " +"that the result will only end in a separator if the last part is empty. If " +"a component is an absolute path, all previous components are thrown away and" +" joining continues from the absolute path component." +msgstr "" +"智能地拼接一个或多个路径部分。 返回值是 *path* 和 *\\*paths* " +"的所有成员的拼接,其中每个非空部分后面都紧跟一个目录分隔符,最后一个部分除外,这意味着如果最后一个部分为空,则结果将以分隔符结尾。 " +"如果某个部分为绝对路径,则之前的所有部分会被丢弃并从绝对路径部分开始继续拼接。" + +#: ../../library/os.path.rst:307 +msgid "" +"On Windows, the drive letter is not reset when an absolute path component " +"(e.g., ``r'\\foo'``) is encountered. If a component contains a drive " +"letter, all previous components are thrown away and the drive letter is " +"reset. Note that since there is a current directory for each drive, " +"``os.path.join(\"c:\", \"foo\")`` represents a path relative to the current " +"directory on drive :file:`C:` (:file:`c:foo`), not :file:`c:\\\\foo`." +msgstr "" +"在 Windows 上,遇到绝对路径部分(例如 " +"``r'\\foo'``)时,不会重置盘符。如果某部分路径包含盘符,则会丢弃所有先前的部分,并重置盘符。请注意,由于每个驱动器都有一个“当前目录”,所以" +" ``os.path.join(\"c:\", \"foo\")`` 表示驱动器 :file:`C:` 上当前目录的相对路径 " +"(:file:`c:foo`),而不是 :file:`c:\\\\foo`。" + +#: ../../library/os.path.rst:314 +msgid "Accepts a :term:`path-like object` for *path* and *paths*." +msgstr "接受一个 :term:`类路径对象 ` 用于 *path* 和 *paths* 。" + +#: ../../library/os.path.rst:320 +msgid "" +"Normalize the case of a pathname. On Windows, convert all characters in the" +" pathname to lowercase, and also convert forward slashes to backward " +"slashes. On other operating systems, return the path unchanged." +msgstr "规范路径的大小写。在 Windows 上,将路径中的所有字符都转换为小写,并将正斜杠转换为反斜杠。在其他操作系统上返回原路径。" + +#: ../../library/os.path.rst:330 +msgid "" +"Normalize a pathname by collapsing redundant separators and up-level " +"references so that ``A//B``, ``A/B/``, ``A/./B`` and ``A/foo/../B`` all " +"become ``A/B``. This string manipulation may change the meaning of a path " +"that contains symbolic links. On Windows, it converts forward slashes to " +"backward slashes. To normalize case, use :func:`normcase`." +msgstr "" +"通过折叠多余的分隔符和对上级目录的引用来标准化路径名,所以 ``A//B``、``A/B/``、``A/./B`` 和 ``A/foo/../B`` " +"都会转换成 ``A/B``。这个字符串操作可能会改变带有符号链接的路径的含义。在 Windows 上,本方法将正斜杠转换为反斜杠。要规范大小写,请使用 " +":func:`normcase`。" + +#: ../../library/os.path.rst:337 +msgid "" +"On POSIX systems, in accordance with `IEEE Std 1003.1 2013 Edition; 4.13 " +"Pathname Resolution " +"`_," +" if a pathname begins with exactly two slashes, the first component " +"following the leading characters may be interpreted in an implementation-" +"defined manner, although more than two leading characters shall be treated " +"as a single character." +msgstr "" +"在 POSIX 系统上,根据 `IEEE Std 1003.1 2013 Edition; 4.13 Pathname Resolution " +"`_,如果一个路径名称以两个斜杠开始,则开始字符之后的第一个部分将以具体实现所定义的方式来解读,但是超过两个开始字符则将被视为单个字符。" + +#: ../../library/os.path.rst:350 +msgid "" +"Return the canonical path of the specified filename, eliminating any " +"symbolic links encountered in the path (if they are supported by the " +"operating system)." +msgstr "返回指定文件的规范路径,消除路径中存在的任何符号链接(如果操作系统支持)。" + +#: ../../library/os.path.rst:355 +msgid "" +"When symbolic link cycles occur, the returned path will be one member of the" +" cycle, but no guarantee is made about which member that will be." +msgstr "当发生符号链接循环时,返回的路径将是该循环的某个组成部分,但不能保证是哪个部分。" + +#: ../../library/os.path.rst:361 +msgid "Symbolic links and junctions are now resolved on Windows." +msgstr "在 Windows 上现在可以正确解析符号链接和交接点 (junction point)。" + +#: ../../library/os.path.rst:367 +msgid "" +"Return a relative filepath to *path* either from the current directory or " +"from an optional *start* directory. This is a path computation: the " +"filesystem is not accessed to confirm the existence or nature of *path* or " +"*start*. On Windows, :exc:`ValueError` is raised when *path* and *start* " +"are on different drives." +msgstr "" +"返回从当前目录或可选的 *start* 目录至 *path* 的相对文件路径。 这只是一个路径计算:不会访问文件系统来确认 *path* 或 " +"*start* 是否存在或其性质。 在 Windows 上,当 *path* 和 *start* 位于不同驱动器时将引发 " +":exc:`ValueError`。" + +#: ../../library/os.path.rst:373 +msgid "*start* defaults to :attr:`os.curdir`." +msgstr "*start* 默认为 :attr:`os.curdir`。" + +#: ../../library/os.path.rst:383 +msgid "" +"Return ``True`` if both pathname arguments refer to the same file or " +"directory. This is determined by the device number and i-node number and " +"raises an exception if an :func:`os.stat` call on either pathname fails." +msgstr "" +"如果两个路径都指向相同的文件或目录,则返回 ``True``。这由设备号和 inode 号确定,在任一路径上调用 :func:`os.stat` " +"失败则抛出异常。" + +#: ../../library/os.path.rst:389 ../../library/os.path.rst:405 +#: ../../library/os.path.rst:421 +msgid "Added Windows support." +msgstr "添加了 Windows 支持。" + +#: ../../library/os.path.rst:392 +msgid "Windows now uses the same implementation as all other platforms." +msgstr "Windows现在使用与其他所有平台相同的实现。" + +#: ../../library/os.path.rst:401 +msgid "" +"Return ``True`` if the file descriptors *fp1* and *fp2* refer to the same " +"file." +msgstr "如果文件描述符 *fp1* 和 *fp2* 指向相同文件,则返回 ``True``。" + +#: ../../library/os.path.rst:414 +msgid "" +"Return ``True`` if the stat tuples *stat1* and *stat2* refer to the same " +"file. These structures may have been returned by :func:`os.fstat`, " +":func:`os.lstat`, or :func:`os.stat`. This function implements the " +"underlying comparison used by :func:`samefile` and :func:`sameopenfile`." +msgstr "" +"如果 stat 元组 *stat1* 和 *stat2* 指向相同文件,则返回 ``True``。这些 stat 元组可能是由 " +":func:`os.fstat`、:func:`os.lstat` 或 :func:`os.stat` 返回的。本函数实现了 " +":func:`samefile` 和 :func:`sameopenfile` 底层所使用的比较过程。" + +#: ../../library/os.path.rst:430 +msgid "" +"Split the pathname *path* into a pair, ``(head, tail)`` where *tail* is the " +"last pathname component and *head* is everything leading up to that. The " +"*tail* part will never contain a slash; if *path* ends in a slash, *tail* " +"will be empty. If there is no slash in *path*, *head* will be empty. If " +"*path* is empty, both *head* and *tail* are empty. Trailing slashes are " +"stripped from *head* unless it is the root (one or more slashes only). In " +"all cases, ``join(head, tail)`` returns a path to the same location as " +"*path* (but the strings may differ). Also see the functions :func:`dirname`" +" and :func:`basename`." +msgstr "" +"将路径 *path* 拆分为一对,即 ``(head, tail)``,其中,*tail* 是路径的最后一部分,而 *head* " +"里是除最后部分外的所有内容。*tail* 部分不会包含斜杠,如果 *path* 以斜杠结尾,则 *tail* 将为空。如果 *path* " +"中没有斜杠,*head* 将为空。如果 *path* 为空,则 *head* 和 *tail* 均为空。*head* " +"末尾的斜杠会被去掉,除非它是根目录(即它仅包含一个或多个斜杠)。在所有情况下,``join(head, tail)`` 指向的位置都与 *path* " +"相同(但字符串可能不同)。另请参见函数 :func:`dirname` 和 :func:`basename`。" + +#: ../../library/os.path.rst:446 +msgid "" +"Split the pathname *path* into a pair ``(drive, tail)`` where *drive* is " +"either a mount point or the empty string. On systems which do not use drive" +" specifications, *drive* will always be the empty string. In all cases, " +"``drive + tail`` will be the same as *path*." +msgstr "" +"将路径 *path* 拆分为一对,即 ``(drive, tail)``,其中 *drive* " +"是挂载点或空字符串。在没有驱动器概念的系统上,*drive* 将始终为空字符串。在所有情况下,``drive + tail`` 都与 *path* " +"相同。" + +#: ../../library/os.path.rst:451 +msgid "" +"On Windows, splits a pathname into drive/UNC sharepoint and relative path." +msgstr "在 Windows 上,本方法将路径拆分为驱动器/UNC 根节点和相对路径。" + +#: ../../library/os.path.rst:453 +msgid "" +"If the path contains a drive letter, drive will contain everything up to and" +" including the colon::" +msgstr "如果路径 path 包含盘符,则 drive 将包含冒号之前的所有内容包括冒号本身::" + +#: ../../library/os.path.rst:459 +msgid "" +"If the path contains a UNC path, drive will contain the host name and share," +" up to but not including the fourth separator::" +msgstr "如果路径 path 包含 UNC 路径,则 drive 将包含主机名和 share,直至第四个分隔符但不包括该分隔符::" + +#: ../../library/os.path.rst:471 +msgid "" +"Split the pathname *path* into a pair ``(root, ext)`` such that ``root + " +"ext == path``, and the extension, *ext*, is empty or begins with a period " +"and contains at most one period." +msgstr "" +"将路径名称 *path* 拆分为 ``(root, ext)`` 对使得 ``root + ext == path``,并且扩展名 *ext* " +"为空或以句点打头并最多只包含一个句点。" + +#: ../../library/os.path.rst:475 +msgid "If the path contains no extension, *ext* will be ``''``::" +msgstr "如果路径 path 不包含扩展名,则 *ext* 将为 ``''``::" + +#: ../../library/os.path.rst:480 +msgid "" +"If the path contains an extension, then *ext* will be set to this extension," +" including the leading period. Note that previous periods will be ignored::" +msgstr "如果路径 path 包含扩展名,则 *ext* 将被设为该扩展名,包括打头的句点。 请注意在其之前的句点将被忽略::" + +#: ../../library/os.path.rst:488 +msgid "" +"Leading periods of the last component of the path are considered to be part " +"of the root::" +msgstr "path 中最后一部分如果以点号开头则会被视为 root 的一部分::" + +#: ../../library/os.path.rst:502 +msgid "" +"``True`` if arbitrary Unicode strings can be used as file names (within " +"limitations imposed by the file system)." +msgstr "如果(在文件系统限制下)允许将任意 Unicode 字符串用作文件名,则为 ``True``。" diff --git a/library/os.po b/library/os.po new file mode 100644 index 000000000..7fcbf9fe1 --- /dev/null +++ b/library/os.po @@ -0,0 +1,5890 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) 2001-2024, Python Software Foundation +# This file is distributed under the same license as the Python package. +# FIRST AUTHOR , YEAR. +# +# Translators: +# SKY H. , 2018 +# sunsol s , 2018 +# Steve Ni , 2018 +# ChenYuan , 2019 +# isombyt , 2019 +# Trim21 , 2019 +# sgqy , 2019 +# 林行众 , 2019 +# cdarlint , 2019 +# Kade For, 2019 +# Liying Yang , 2019 +# Zombie110year , 2019 +# Shengjing Zhu , 2019 +# 96ea86b025a96effe58335f7b3bef4bc_e6c340d , 2019 +# Arisaka97 , 2020 +# Alpha Du , 2022 +# lqks, 2024 +# Freesand Leo , 2024 +# Rafael Fontenelle , 2024 +# +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: Python 3.9\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2024-08-30 16:51+0000\n" +"PO-Revision-Date: 2017-02-16 23:20+0000\n" +"Last-Translator: Rafael Fontenelle , 2024\n" +"Language-Team: Chinese (China) (https://app.transifex.com/python-doc/teams/5390/zh_CN/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: zh_CN\n" +"Plural-Forms: nplurals=1; plural=0;\n" + +#: ../../library/os.rst:2 +msgid ":mod:`os` --- Miscellaneous operating system interfaces" +msgstr ":mod:`os` --- 多种操作系统接口" + +#: ../../library/os.rst:7 +msgid "**Source code:** :source:`Lib/os.py`" +msgstr "**源代码:** :source:`Lib/os.py`" + +#: ../../library/os.rst:11 +msgid "" +"This module provides a portable way of using operating system dependent " +"functionality. If you just want to read or write a file see :func:`open`, " +"if you want to manipulate paths, see the :mod:`os.path` module, and if you " +"want to read all the lines in all the files on the command line see the " +":mod:`fileinput` module. For creating temporary files and directories see " +"the :mod:`tempfile` module, and for high-level file and directory handling " +"see the :mod:`shutil` module." +msgstr "" +"本模块提供了一种使用与操作系统相关的功能的便捷式途径。 如果你只是想读写一个文件,请参阅 :func:`open`,如果你想操作文件路径,请参阅 " +":mod:`os.path` 模块,如果你想读取通过命令行给出的所有文件中的所有行,请参阅 :mod:`fileinput` 模块。 " +"为了创建临时文件和目录,请参阅 :mod:`tempfile` 模块,对于高级文件和目录处理,请参阅 :mod:`shutil` 模块。" + +#: ../../library/os.rst:19 +msgid "Notes on the availability of these functions:" +msgstr "关于这些函数的适用性的说明:" + +#: ../../library/os.rst:21 +msgid "" +"The design of all built-in operating system dependent modules of Python is " +"such that as long as the same functionality is available, it uses the same " +"interface; for example, the function ``os.stat(path)`` returns stat " +"information about *path* in the same format (which happens to have " +"originated with the POSIX interface)." +msgstr "" +"Python中所有依赖于操作系统的内置模块的设计都是这样,只要不同的操作系统某一相同的功能可用,它就使用相同的接口。例如,函数 " +"``os.stat(path)`` 以相同的格式返回关于 *path* 的状态信息(该格式源于 POSIX 接口)。" + +#: ../../library/os.rst:27 +msgid "" +"Extensions peculiar to a particular operating system are also available " +"through the :mod:`os` module, but using them is of course a threat to " +"portability." +msgstr "特定于某一操作系统的扩展通过操作 :mod:`os` 模块也是可用的,但是使用它们当然是对可移植性的一种威胁。" + +#: ../../library/os.rst:31 +msgid "" +"All functions accepting path or file names accept both bytes and string " +"objects, and result in an object of the same type, if a path or file name is" +" returned." +msgstr "所有接受路径或文件名的函数都同时支持字节串和字符串对象,并在返回路径或文件名时使用相应类型的对象作为结果。" + +#: ../../library/os.rst:35 +msgid "On VxWorks, os.fork, os.execv and os.spawn*p* are not supported." +msgstr "在 VxWorks 系统上,os.fork, os.execv 和 os.spawn*p* 不被支持。" + +#: ../../library/os.rst:39 +msgid "" +"All functions in this module raise :exc:`OSError` (or subclasses thereof) in" +" the case of invalid or inaccessible file names and paths, or other " +"arguments that have the correct type, but are not accepted by the operating " +"system." +msgstr "" +"如果使用无效或无法访问的文件名与路径,或者其他类型正确但操作系统不接受的参数,此模块的所有函数都抛出 :exc:`OSError` (或者它的子类)。" + +#: ../../library/os.rst:45 +msgid "An alias for the built-in :exc:`OSError` exception." +msgstr "内建的 :exc:`OSError` 异常的一个别名。" + +#: ../../library/os.rst:50 +msgid "" +"The name of the operating system dependent module imported. The following " +"names have currently been registered: ``'posix'``, ``'nt'``, ``'java'``." +msgstr "导入的依赖特定操作系统的模块的名称。以下名称目前已注册: ``'posix'``, ``'nt'``, ``'java'``." + +#: ../../library/os.rst:55 +msgid "" +":attr:`sys.platform` has a finer granularity. :func:`os.uname` gives " +"system-dependent version information." +msgstr ":attr:`sys.platform` 有更详细的描述. :func:`os.uname` 只给出系统提供的版本信息。" + +#: ../../library/os.rst:58 +msgid "" +"The :mod:`platform` module provides detailed checks for the system's " +"identity." +msgstr ":mod:`platform` 模块对系统的标识有更详细的检查。" + +#: ../../library/os.rst:66 +msgid "File Names, Command Line Arguments, and Environment Variables" +msgstr "文件名,命令行参数,以及环境变量。" + +#: ../../library/os.rst:68 +msgid "" +"In Python, file names, command line arguments, and environment variables are" +" represented using the string type. On some systems, decoding these strings " +"to and from bytes is necessary before passing them to the operating system. " +"Python uses the file system encoding to perform this conversion (see " +":func:`sys.getfilesystemencoding`)." +msgstr "" +"在 Python 中,使用字符串类型表示文件名、命令行参数和环境变量。 在某些系统上,在将这些字符串传递给操作系统之前,必须将这些字符串解码为字节。 " +"Python 使用文件系统编码来执行此转换(请参阅 :func:`sys.getfilesystemencoding` )。" + +#: ../../library/os.rst:74 +msgid "" +"On some systems, conversion using the file system encoding may fail. In this" +" case, Python uses the :ref:`surrogateescape encoding error handler " +"`, which means that undecodable bytes are replaced by a " +"Unicode character U+DCxx on decoding, and these are again translated to the " +"original byte on encoding." +msgstr "" +"在某些系统上,使用文件系统编码进行转换可能会失败。 在这种情况下,Python 会使用 :ref:`代理转义编码错误处理器 " +"`,这意味着在解码时,不可解码的字节被 Unicode 字符 U+DCxx " +"替换,并且这些字节在编码时再次转换为原始字节。" + +#: ../../library/os.rst:82 +msgid "" +"The file system encoding must guarantee to successfully decode all bytes " +"below 128. If the file system encoding fails to provide this guarantee, API " +"functions may raise UnicodeErrors." +msgstr "" +"文件系统编码必须保证成功解码小于 128 的所有字节。如果文件系统编码无法提供此保证, API 函数可能会引发 UnicodeErrors 。" + +#: ../../library/os.rst:90 +msgid "Process Parameters" +msgstr "进程参数" + +#: ../../library/os.rst:92 +msgid "" +"These functions and data items provide information and operate on the " +"current process and user." +msgstr "这些函数和数据项提供了操作当前进程和用户的信息。" + +#: ../../library/os.rst:98 +msgid "" +"Return the filename corresponding to the controlling terminal of the " +"process." +msgstr "返回与进程控制终端对应的文件名。" + +#: ../../library/os.rst:100 ../../library/os.rst:272 ../../library/os.rst:281 +#: ../../library/os.rst:290 ../../library/os.rst:301 ../../library/os.rst:310 +#: ../../library/os.rst:345 ../../library/os.rst:353 ../../library/os.rst:390 +#: ../../library/os.rst:401 ../../library/os.rst:411 ../../library/os.rst:421 +#: ../../library/os.rst:431 ../../library/os.rst:441 ../../library/os.rst:474 +#: ../../library/os.rst:481 ../../library/os.rst:488 ../../library/os.rst:498 +#: ../../library/os.rst:509 ../../library/os.rst:518 ../../library/os.rst:536 +#: ../../library/os.rst:544 ../../library/os.rst:552 ../../library/os.rst:561 +#: ../../library/os.rst:569 ../../library/os.rst:576 ../../library/os.rst:583 +#: ../../library/os.rst:592 ../../library/os.rst:791 ../../library/os.rst:803 +#: ../../library/os.rst:812 ../../library/os.rst:834 ../../library/os.rst:855 +#: ../../library/os.rst:892 ../../library/os.rst:913 ../../library/os.rst:925 +#: ../../library/os.rst:1095 ../../library/os.rst:1110 +#: ../../library/os.rst:1125 ../../library/os.rst:1138 +#: ../../library/os.rst:1207 ../../library/os.rst:1307 +#: ../../library/os.rst:1327 ../../library/os.rst:1339 +#: ../../library/os.rst:1357 ../../library/os.rst:1366 +#: ../../library/os.rst:1374 ../../library/os.rst:1383 +#: ../../library/os.rst:1419 ../../library/os.rst:1667 +#: ../../library/os.rst:1736 ../../library/os.rst:1750 +#: ../../library/os.rst:1763 ../../library/os.rst:1790 +#: ../../library/os.rst:1805 ../../library/os.rst:1818 +#: ../../library/os.rst:2014 ../../library/os.rst:2036 +#: ../../library/os.rst:2080 ../../library/os.rst:2091 +#: ../../library/os.rst:2768 ../../library/os.rst:2922 +#: ../../library/os.rst:3154 ../../library/os.rst:3451 +#: ../../library/os.rst:3459 ../../library/os.rst:3466 +#: ../../library/os.rst:3473 ../../library/os.rst:3480 +#: ../../library/os.rst:3487 ../../library/os.rst:3494 +#: ../../library/os.rst:3501 ../../library/os.rst:3509 +#: ../../library/os.rst:3517 ../../library/os.rst:3524 +#: ../../library/os.rst:3531 ../../library/os.rst:3540 +#: ../../library/os.rst:3548 ../../library/os.rst:3556 +#: ../../library/os.rst:3563 ../../library/os.rst:3570 +#: ../../library/os.rst:3591 ../../library/os.rst:3646 +#: ../../library/os.rst:3653 ../../library/os.rst:3674 +#: ../../library/os.rst:3790 ../../library/os.rst:3838 +#: ../../library/os.rst:4052 ../../library/os.rst:4073 +#: ../../library/os.rst:4084 ../../library/os.rst:4104 +#: ../../library/os.rst:4119 ../../library/os.rst:4174 +#: ../../library/os.rst:4188 ../../library/os.rst:4226 +#: ../../library/os.rst:4242 ../../library/os.rst:4256 +#: ../../library/os.rst:4267 ../../library/os.rst:4279 +#: ../../library/os.rst:4286 ../../library/os.rst:4295 +#: ../../library/os.rst:4304 ../../library/os.rst:4313 +#: ../../library/os.rst:4322 ../../library/os.rst:4468 +#: ../../library/os.rst:4477 ../../library/os.rst:4498 +#: ../../library/os.rst:4508 ../../library/os.rst:4517 +msgid ":ref:`Availability `: Unix." +msgstr ":ref:`可用性 `: Unix。" + +#: ../../library/os.rst:105 +msgid "" +"A :term:`mapping` object where keys and values are strings that represent " +"the process environment. For example, ``environ['HOME']`` is the pathname " +"of your home directory (on some platforms), and is equivalent to " +"``getenv(\"HOME\")`` in C." +msgstr "" +"一个 :term:`mapping` 对象,其中键值是代表进程环境的字符串。 例如,``environ['HOME']`` " +"是你的主目录(在某些平台上)的路径名,相当于 C 中的 ``getenv(\"HOME\")``。" + +#: ../../library/os.rst:110 +msgid "" +"This mapping is captured the first time the :mod:`os` module is imported, " +"typically during Python startup as part of processing :file:`site.py`. " +"Changes to the environment made after this time are not reflected in " +":data:`os.environ`, except for changes made by modifying :data:`os.environ` " +"directly." +msgstr "" +"这个映射是在第一次导入 :mod:`os` 模块时捕获的,通常作为 Python 启动时处理 :file:`site.py` 的一部分。除了通过直接修改" +" :data:`os.environ` 之外,在此之后对环境所做的更改不会反映在 :data:`os.environ` 中。" + +#: ../../library/os.rst:115 +msgid "" +"This mapping may be used to modify the environment as well as query the " +"environment. :func:`putenv` will be called automatically when the mapping " +"is modified." +msgstr "该映射除了可以用于查询环境外,还能用于修改环境。当该映射被修改时,将自动调用 :func:`putenv`。" + +#: ../../library/os.rst:119 +msgid "" +"On Unix, keys and values use :func:`sys.getfilesystemencoding` and " +"``'surrogateescape'`` error handler. Use :data:`environb` if you would like " +"to use a different encoding." +msgstr "" +"在Unix系统上,键和值会使用 :func:`sys.getfilesystemencoding` 和 ``'surrogateescape'`` " +"的错误处理。如果你想使用其他的编码,使用 :data:`environb`。" + +#: ../../library/os.rst:125 +msgid "" +"Calling :func:`putenv` directly does not change :data:`os.environ`, so it's " +"better to modify :data:`os.environ`." +msgstr "" +"直接调用 :func:`putenv` 并不会影响 :data:`os.environ` ,所以推荐直接修改 :data:`os.environ` 。" + +#: ../../library/os.rst:130 +msgid "" +"On some platforms, including FreeBSD and macOS, setting ``environ`` may " +"cause memory leaks. Refer to the system documentation for :c:func:`putenv`." +msgstr "" +"在某些平台上,包括 FreeBSD 和 macOS,设置 ``environ`` 可能导致内存泄漏。 请参阅 :c:func:`putenv` " +"的系统文档。" + +#: ../../library/os.rst:134 +msgid "" +"You can delete items in this mapping to unset environment variables. " +":func:`unsetenv` will be called automatically when an item is deleted from " +":data:`os.environ`, and when one of the :meth:`pop` or :meth:`clear` methods" +" is called." +msgstr "" +"可以删除映射中的元素来删除对应的环境变量。当从 :data:`os.environ` 删除元素时,以及调用 :meth:`pop` 或 " +":meth:`clear` 之一时,将自动调用 :func:`unsetenv`。" + +#: ../../library/os.rst:139 ../../library/os.rst:155 +msgid "" +"Updated to support :pep:`584`'s merge (``|``) and update (``|=``) operators." +msgstr "已更新并支持了 :pep:`584` 的合并 (``|``) 和更新 (``|=``) 运算符。" + +#: ../../library/os.rst:145 +msgid "" +"Bytes version of :data:`environ`: a :term:`mapping` object where both keys " +"and values are :class:`bytes` objects representing the process environment. " +":data:`environ` and :data:`environb` are synchronized (modifying " +":data:`environb` updates :data:`environ`, and vice versa)." +msgstr "" +":data:`environ` 的字节版本:一个 :term:`mapping` 对象,其中键值都是 :class:`bytes` 对象,代表进程环境。" +" :data:`environ` 和 :data:`environb` 是同步的(修改 :data:`environb` 会更新 " +":data:`environ`,反之亦然)。" + +#: ../../library/os.rst:150 +msgid "" +":data:`environb` is only available if :data:`supports_bytes_environ` is " +"``True``." +msgstr "" +"只有在 :data:`supports_bytes_environ` 为 ``True`` 的时候 :data:`environb` 才是可用的。" + +#: ../../library/os.rst:164 +msgid "These functions are described in :ref:`os-file-dir`." +msgstr "以上函数请参阅 :ref:`os-file-dir` 。" + +#: ../../library/os.rst:169 +msgid "" +"Encode :term:`path-like ` *filename* to the filesystem " +"encoding with ``'surrogateescape'`` error handler, or ``'strict'`` on " +"Windows; return :class:`bytes` unchanged." +msgstr "" +"将 :term:`路径类 ` *filename* 编码为文件系统编码,使用 " +"``'surrogateescape'`` 错误回调方法,在 Windows 上会使用 ``'strict'``,:class:`bytes` " +"类型则原样返回。" + +#: ../../library/os.rst:173 +msgid ":func:`fsdecode` is the reverse function." +msgstr ":func:`fsdecode` 是此函数的逆向函数。" + +#: ../../library/os.rst:177 ../../library/os.rst:192 +msgid "" +"Support added to accept objects implementing the :class:`os.PathLike` " +"interface." +msgstr "增加对实现了 :class:`os.PathLike` 接口的对象的支持。" + +#: ../../library/os.rst:184 +msgid "" +"Decode the :term:`path-like ` *filename* from the " +"filesystem encoding with ``'surrogateescape'`` error handler, or " +"``'strict'`` on Windows; return :class:`str` unchanged." +msgstr "" +"将 :term:`路径类 ` *filename* 从文件系统编码方式解码,编码方式应使用的是 " +"``'surrogateescape'`` 错误回调方法,在 Windows 上应使用的是 ``'strict'`` 方法。:class:`str` " +"字符串则原样返回。" + +#: ../../library/os.rst:188 +msgid ":func:`fsencode` is the reverse function." +msgstr ":func:`fsencode` 是此函数的逆向函数。" + +#: ../../library/os.rst:199 +msgid "Return the file system representation of the path." +msgstr "返回路径的文件系统表示。" + +#: ../../library/os.rst:201 +msgid "" +"If :class:`str` or :class:`bytes` is passed in, it is returned unchanged. " +"Otherwise :meth:`~os.PathLike.__fspath__` is called and its value is " +"returned as long as it is a :class:`str` or :class:`bytes` object. In all " +"other cases, :exc:`TypeError` is raised." +msgstr "" +"如果传入的是 :class:`str` 或 :class:`bytes` 类型的字符串,将原样返回。否则 " +":meth:`~os.PathLike.__fspath__` 将被调用,如果得到的是一个 :class:`str` 或 :class:`bytes` " +"类型的对象,那就返回这个值。其他所有情况则会抛出 :exc:`TypeError`  异常。" + +#: ../../library/os.rst:211 +msgid "" +"An :term:`abstract base class` for objects representing a file system path, " +"e.g. :class:`pathlib.PurePath`." +msgstr "" +"某些对象用于表示文件系统中的路径(如 :class:`pathlib.PurePath` 对象),本类是这些对象的 :term:`抽象基类 " +"`。" + +#: ../../library/os.rst:218 +msgid "Return the file system path representation of the object." +msgstr "返回当前对象的文件系统表示。" + +#: ../../library/os.rst:220 +msgid "" +"The method should only return a :class:`str` or :class:`bytes` object, with " +"the preference being for :class:`str`." +msgstr "" +"这个方法只应该返回一个 :class:`str` 字符串或 :class:`bytes` 字节串,请优先选择 :class:`str` 字符串。" + +#: ../../library/os.rst:226 +msgid "" +"Return the value of the environment variable *key* if it exists, or " +"*default* if it doesn't. *key*, *default* and the result are str. Note that " +"since :func:`getenv` uses :data:`os.environ`, the mapping of :func:`getenv` " +"is similarly also captured on import, and the function may not reflect " +"future environment changes." +msgstr "" +"如果环境变量 *key* 存在,则返回它的值;如果不存在,则返回 *default* 。*key* , *default* 和结果都是字符串。注意,由于" +" :func:`getenv` 使用了 :data:`os.environ` ,所以 :func:`getenv` " +"的映射也同样在导入时被捕获,并且该函数可能无法反映未来的环境变化。" + +#: ../../library/os.rst:232 +msgid "" +"On Unix, keys and values are decoded with :func:`sys.getfilesystemencoding` " +"and ``'surrogateescape'`` error handler. Use :func:`os.getenvb` if you would" +" like to use a different encoding." +msgstr "" +"在Unix系统上,键和值会使用 :func:`sys.getfilesystemencoding` 和 ``'surrogateescape'`` " +"错误处理进行解码。如果你想使用其他的编码,使用 :func:`os.getenvb`。" + +#: ../../library/os.rst:236 +msgid ":ref:`Availability `: most flavors of Unix, Windows." +msgstr ":ref:`可用性 `: 大部分的Unix系统,Windows。" + +#: ../../library/os.rst:241 +msgid "" +"Return the value of the environment variable *key* if it exists, or " +"*default* if it doesn't. *key*, *default* and the result are bytes. Note " +"that since :func:`getenvb` uses :data:`os.environb`, the mapping of " +":func:`getenvb` is similarly also captured on import, and the function may " +"not reflect future environment changes." +msgstr "" +"如果环境变量 *key* 存在,则返回它的值;如果不存在,则返回 *default* 。*key* , *default* 和结果都是字节。注意,由于 " +":func:`getenvb` 使用了 :data:`os.environb` ,所以 :func:`getenvb` " +"的映射也同样在导入时被捕获,并且该函数可能无法反映未来的环境变化。" + +#: ../../library/os.rst:248 +msgid "" +":func:`getenvb` is only available if :data:`supports_bytes_environ` is " +"``True``." +msgstr ":func:`getenvb` 仅在 :data:`supports_bytes_environ` 为 ``True`` 时可用。" + +#: ../../library/os.rst:252 +msgid ":ref:`Availability `: most flavors of Unix." +msgstr ":ref:`可用性 `: 大部分的Unix系统。" + +#: ../../library/os.rst:258 +msgid "" +"Returns the list of directories that will be searched for a named " +"executable, similar to a shell, when launching a process. *env*, when " +"specified, should be an environment variable dictionary to lookup the PATH " +"in. By default, when *env* is ``None``, :data:`environ` is used." +msgstr "" +"返回将用于搜索可执行文件的目录列表,与在外壳程序中启动一个进程时相似。指定的 *env* 应为用于搜索 PATH 的环境变量字典。默认情况下,当 " +"*env* 为 ``None`` 时,将会使用 :data:`environ` 。" + +#: ../../library/os.rst:269 +msgid "" +"Return the effective group id of the current process. This corresponds to " +"the \"set id\" bit on the file being executed in the current process." +msgstr "返回当前进程的有效组ID。对应当前进程执行文件的 \"set id\" 位。" + +#: ../../library/os.rst:279 +msgid "Return the current process's effective user id." +msgstr "返回当前进程的有效用户ID。" + +#: ../../library/os.rst:288 +msgid "Return the real group id of the current process." +msgstr "返回当前进程的实际组ID。" + +#: ../../library/os.rst:295 +msgid "" +"Return list of group ids that *user* belongs to. If *group* is not in the " +"list, it is included; typically, *group* is specified as the group ID field " +"from the password record for *user*, because that group ID will otherwise be" +" potentially omitted." +msgstr "" +"返回 *user* 所属的组 ID 列表。 如果 *group* 不在该列表中,它将被包括在内;通常,*group* 将会被指定为来自 *user* " +"的密码记录文件的组 ID 字段,因为在其他情况下该组 ID 有可能会被略去。" + +#: ../../library/os.rst:307 +msgid "" +"Return list of supplemental group ids associated with the current process." +msgstr "返回当前进程关联的附加组ID列表" + +#: ../../library/os.rst:313 +msgid "" +"On macOS, :func:`getgroups` behavior differs somewhat from other Unix " +"platforms. If the Python interpreter was built with a deployment target of " +":const:`10.5` or earlier, :func:`getgroups` returns the list of effective " +"group ids associated with the current user process; this list is limited to " +"a system-defined number of entries, typically 16, and may be modified by " +"calls to :func:`setgroups` if suitably privileged. If built with a " +"deployment target greater than :const:`10.5`, :func:`getgroups` returns the " +"current group access list for the user associated with the effective user id" +" of the process; the group access list may change over the lifetime of the " +"process, it is not affected by calls to :func:`setgroups`, and its length is" +" not limited to 16. The deployment target value, " +":const:`MACOSX_DEPLOYMENT_TARGET`, can be obtained with " +":func:`sysconfig.get_config_var`." +msgstr "" +"在 macOS 中,:func:`getgroups` 会和其他 Unix 平台有所不同。 如果 Python 解释器是在 :const:`10.5` " +"或更早版本中部署的,则 :func:`getgroups` 会返回与当前用户进程相关联的有效组 ID 列表;该列表受限于系统预定义的条目数量,通常为 " +"16,并且在适当的权限下还可通过调用 :func:`setgroups` 来修改。 如果是在高于 :const:`10.5` 的版本中部署的,则 " +":func:`getgroups` 会返回与进程的有效用户 ID 相关联的当前组访问列表;组访问列表可能会在进程的生命周期之内发生改变,它不会受对 " +":func:`setgroups` 的调用影响,且其长度也不被限制为 16。 部署目标值 " +":const:`MACOSX_DEPLOYMENT_TARGET` 可以通过 :func:`sysconfig.get_config_var` 来获取。" + +#: ../../library/os.rst:330 +msgid "" +"Return the name of the user logged in on the controlling terminal of the " +"process. For most purposes, it is more useful to use " +":func:`getpass.getuser` since the latter checks the environment variables " +":envvar:`LOGNAME` or :envvar:`USERNAME` to find out who the user is, and " +"falls back to ``pwd.getpwuid(os.getuid())[0]`` to get the login name of the " +"current real user id." +msgstr "" +"返回通过控制终端进程进行登录的用户名。在多数情况下,使用 :func:`getpass.getuser` 会更有效,因为后者会通过检查环境变量 " +":envvar:`LOGNAME` 或 :envvar:`USERNAME` 来查找用户,再由 " +"``pwd.getpwuid(os.getuid())[0]`` 来获取当前用户 ID 的登录名。" + +#: ../../library/os.rst:337 ../../library/os.rst:372 ../../library/os.rst:867 +#: ../../library/os.rst:879 ../../library/os.rst:1071 +#: ../../library/os.rst:1445 ../../library/os.rst:1834 +#: ../../library/os.rst:2114 ../../library/os.rst:2902 +#: ../../library/os.rst:2936 ../../library/os.rst:3418 +#: ../../library/os.rst:3923 ../../library/os.rst:3934 +#: ../../library/os.rst:4010 ../../library/os.rst:4034 +msgid ":ref:`Availability `: Unix, Windows." +msgstr ":ref:`可用性 `: Unix, Windows。" + +#: ../../library/os.rst:342 +msgid "" +"Return the process group id of the process with process id *pid*. If *pid* " +"is 0, the process group id of the current process is returned." +msgstr "根据进程id *pid* 返回进程的组 ID 列表。如果 *pid* 为 0,则返回当前进程的进程组 ID 列表" + +#: ../../library/os.rst:351 +msgid "Return the id of the current process group." +msgstr "返回当时进程组的ID" + +#: ../../library/os.rst:360 +msgid "Return the current process id." +msgstr "返回当前进程ID" + +#: ../../library/os.rst:367 +msgid "" +"Return the parent's process id. When the parent process has exited, on Unix" +" the id returned is the one of the init process (1), on Windows it is still " +"the same id, which may be already reused by another process." +msgstr "" +"返回父进程ID。当父进程已经结束,在Unix中返回的ID是初始进程(1)中的一个,在Windows中仍然是同一个进程ID,该进程ID有可能已经被进行进程所占用。" + +#: ../../library/os.rst:373 +msgid "Added support for Windows." +msgstr "添加WIndows的支持。" + +#: ../../library/os.rst:381 +msgid "" +"Get program scheduling priority. The value *which* is one of " +":const:`PRIO_PROCESS`, :const:`PRIO_PGRP`, or :const:`PRIO_USER`, and *who* " +"is interpreted relative to *which* (a process identifier for " +":const:`PRIO_PROCESS`, process group identifier for :const:`PRIO_PGRP`, and " +"a user ID for :const:`PRIO_USER`). A zero value for *who* denotes " +"(respectively) the calling process, the process group of the calling " +"process, or the real user ID of the calling process." +msgstr "" +"获取程序调度优先级。*which* 参数值可以是 :const:`PRIO_PROCESS`,:const:`PRIO_PGRP`,或 " +":const:`PRIO_USER` 中的一个,*who* 是相对于 *which* (:const:`PRIO_PROCESS` " +"的进程标识符,:const:`PRIO_PGRP` 的进程组标识符和 :const:`PRIO_USER` 的用户ID)。当 *who* 为 0 " +"时(分别)表示调用的进程,调用进程的进程组或调用进程所属的真实用户 ID。" + +#: ../../library/os.rst:398 +msgid "" +"Parameters for the :func:`getpriority` and :func:`setpriority` functions." +msgstr "函数 :func:`getpriority` 和 :func:`setpriority` 的参数。" + +#: ../../library/os.rst:407 +msgid "" +"Return a tuple (ruid, euid, suid) denoting the current process's real, " +"effective, and saved user ids." +msgstr "返回一个由 (ruid, euid, suid) 所组成的元组,分别表示当前进程的真实用户ID,有效用户ID和暂存用户ID。" + +#: ../../library/os.rst:417 +msgid "" +"Return a tuple (rgid, egid, sgid) denoting the current process's real, " +"effective, and saved group ids." +msgstr "返回一个由 (rgid, egid, sgid) 所组成的元组,分别表示当前进程的真实组ID,有效组ID和暂存组ID。" + +#: ../../library/os.rst:429 +msgid "Return the current process's real user id." +msgstr "返回当前进程的真实用户ID。" + +#: ../../library/os.rst:436 +msgid "" +"Call the system initgroups() to initialize the group access list with all of" +" the groups of which the specified username is a member, plus the specified " +"group id." +msgstr "调用系统 initgroups(),使用指定用户所在的所有值来初始化组访问列表,包括指定的组ID。" + +#: ../../library/os.rst:449 +msgid "" +"Set the environment variable named *key* to the string *value*. Such " +"changes to the environment affect subprocesses started with " +":func:`os.system`, :func:`popen` or :func:`fork` and :func:`execv`." +msgstr "" +"将名为 *key* 的环境变量值设置为 *value*。该变量名修改会影响由 :func:`os.system`, :func:`popen` " +",:func:`fork` 和 :func:`execv` 发起的子进程。" + +#: ../../library/os.rst:453 +msgid "" +"Assignments to items in :data:`os.environ` are automatically translated into" +" corresponding calls to :func:`putenv`; however, calls to :func:`putenv` " +"don't update :data:`os.environ`, so it is actually preferable to assign to " +"items of :data:`os.environ`. This also applies to :func:`getenv` and " +":func:`getenvb`, which respectively use :data:`os.environ` and " +":data:`os.environb` in their implementations." +msgstr "" +"对 :data:`os.environ` 中的项目的赋值会自动转化为对 :func:`putenv` 的相应调用;然而,对 :func:`putenv`" +" 的调用并不更新 :data:`os.environ` ,所以实际上最好是赋值到 :data:`os.environ` 的项目。这也适用于 " +":func:`getenv` 和 :func:`getenvb` ,它们分别使用 :data:`os.environ` 和 " +":data:`os.environb` 在它们的实现中。" + +#: ../../library/os.rst:461 +msgid "" +"On some platforms, including FreeBSD and macOS, setting ``environ`` may " +"cause memory leaks. Refer to the system documentation for :c:func:`putenv`." +msgstr "" +"在某些平台上,包括 FreeBSD 和 macOS,设置 ``environ`` 可能导致内存泄漏。 请参阅 :c:func:`putenv` " +"的系统文档。" + +#: ../../library/os.rst:464 +msgid "" +"Raises an :ref:`auditing event ` ``os.putenv`` with arguments " +"``key``, ``value``." +msgstr "引发一个 :ref:`审计事件 ` ``os.putenv`` 并附带参数 ``key``, ``value``。" + +#: ../../library/os.rst:466 +msgid "The function is now always available." +msgstr "该函数现在总是可用。" + +#: ../../library/os.rst:472 +msgid "Set the current process's effective group id." +msgstr "设置当前进程的有效组ID。" + +#: ../../library/os.rst:479 +msgid "Set the current process's effective user id." +msgstr "设置当前进程的有效用户ID。" + +#: ../../library/os.rst:486 +msgid "Set the current process' group id." +msgstr "设置当前进程的组ID。" + +#: ../../library/os.rst:493 +msgid "" +"Set the list of supplemental group ids associated with the current process " +"to *groups*. *groups* must be a sequence, and each element must be an " +"integer identifying a group. This operation is typically available only to " +"the superuser." +msgstr "" +"将 *group* 参数值设置为与当进程相关联的附加组ID列表。*group* " +"参数必须为一个序列,每个元素应为每个组的数字ID。该操作通常只适用于超级用户。" + +#: ../../library/os.rst:499 +msgid "" +"On macOS, the length of *groups* may not exceed the system-defined maximum " +"number of effective group ids, typically 16. See the documentation for " +":func:`getgroups` for cases where it may not return the same group list set " +"by calling setgroups()." +msgstr "" +"在 macOS 中,*groups* 的长度不能超过系统定义的最大有效组 ID 数量,通常为 16。 对于未返回与调用 setgroups() " +"产生的相同组列表的情况,请参阅 :func:`getgroups` 的文档。" + +#: ../../library/os.rst:506 +msgid "" +"Call the system call :c:func:`setpgrp` or ``setpgrp(0, 0)`` depending on " +"which version is implemented (if any). See the Unix manual for the " +"semantics." +msgstr "" +"根据已实现的版本(如果有)来调用系统 :c:func:`setpgrp` 或 ``setpgrp(0, 0)`` 。相关说明,请参考 Unix 手册。" + +#: ../../library/os.rst:514 +msgid "" +"Call the system call :c:func:`setpgid` to set the process group id of the " +"process with id *pid* to the process group with id *pgrp*. See the Unix " +"manual for the semantics." +msgstr "使用系统调用 :c:func:`setpgid`,将 *pid* 对应进程的组ID设置为 *pgrp*。相关说明,请参考 Unix 手册。" + +#: ../../library/os.rst:525 +msgid "" +"Set program scheduling priority. The value *which* is one of " +":const:`PRIO_PROCESS`, :const:`PRIO_PGRP`, or :const:`PRIO_USER`, and *who* " +"is interpreted relative to *which* (a process identifier for " +":const:`PRIO_PROCESS`, process group identifier for :const:`PRIO_PGRP`, and " +"a user ID for :const:`PRIO_USER`). A zero value for *who* denotes " +"(respectively) the calling process, the process group of the calling " +"process, or the real user ID of the calling process. *priority* is a value " +"in the range -20 to 19. The default priority is 0; lower priorities cause " +"more favorable scheduling." +msgstr "" +"设置程序调度优先级。 *which* 的值为 :const:`PRIO_PROCESS`, :const:`PRIO_PGRP` 或 " +":const:`PRIO_USER` 之一,而 *who* 会相对于 *which* (:const:`PRIO_PROCESS` 的进程标识符, " +":const:`PRIO_PGRP` 的进程组标识符和 :const:`PRIO_USER` 的用户 ID) 被解析。 *who* 值为零 (分别) " +"表示调用进程,调用进程的进程组或调用进程的真实用户 ID。 *priority* 是范围在 -20 至 19 的值。 默认优先级为 " +"0;较小的优先级数值会更优先被调度。" + +#: ../../library/os.rst:542 +msgid "Set the current process's real and effective group ids." +msgstr "设置当前进程的真实和有效组ID。" + +#: ../../library/os.rst:549 +msgid "Set the current process's real, effective, and saved group ids." +msgstr "设置当前进程的真实,有效和暂存组ID。" + +#: ../../library/os.rst:558 +msgid "Set the current process's real, effective, and saved user ids." +msgstr "设置当前进程的真实,有效和暂存用户ID。" + +#: ../../library/os.rst:567 +msgid "Set the current process's real and effective user ids." +msgstr "设置当前进程的真实和有效用户ID。" + +#: ../../library/os.rst:574 +msgid "" +"Call the system call :c:func:`getsid`. See the Unix manual for the " +"semantics." +msgstr "调用系统调用 :c:func:`getsid`。相关说明,请参考 Unix 手册。" + +#: ../../library/os.rst:581 +msgid "" +"Call the system call :c:func:`setsid`. See the Unix manual for the " +"semantics." +msgstr "使用系统调用 :c:func:`getsid`。相关说明,请参考 Unix 手册。 " + +#: ../../library/os.rst:590 +msgid "Set the current process's user id." +msgstr "设置当前进程的用户ID。" + +#: ../../library/os.rst:598 +msgid "" +"Return the error message corresponding to the error code in *code*. On " +"platforms where :c:func:`strerror` returns ``NULL`` when given an unknown " +"error number, :exc:`ValueError` is raised." +msgstr "" +"根据 *code* 中的错误码返回错误消息。 在某些平台上当给出未知错误码时 :c:func:`strerror` 将返回 ``NULL`` 并会引发 " +":exc:`ValueError`。" + +#: ../../library/os.rst:605 +msgid "" +"``True`` if the native OS type of the environment is bytes (eg. ``False`` on" +" Windows)." +msgstr "如果操作系统上原生环境类型是字节型则为 ``True`` (例如在 Windows 上为 ``False``)。" + +#: ../../library/os.rst:613 +msgid "Set the current numeric umask and return the previous umask." +msgstr "设定当前数值掩码并返回之前的掩码。" + +#: ../../library/os.rst:622 +msgid "" +"Returns information identifying the current operating system. The return " +"value is an object with five attributes:" +msgstr "返回当前操作系统的识别信息。返回值是一个有5个属性的对象:" + +#: ../../library/os.rst:625 +msgid ":attr:`sysname` - operating system name" +msgstr ":attr:`sysname` - 操作系统名" + +#: ../../library/os.rst:626 +msgid ":attr:`nodename` - name of machine on network (implementation-defined)" +msgstr ":attr:`nodename` - 机器在网络上的名称(需要先设定)" + +#: ../../library/os.rst:627 +msgid ":attr:`release` - operating system release" +msgstr ":attr:`release` - 操作系统发行信息" + +#: ../../library/os.rst:628 +msgid ":attr:`version` - operating system version" +msgstr ":attr:`version` - 操作系统版本信息" + +#: ../../library/os.rst:629 +msgid ":attr:`machine` - hardware identifier" +msgstr ":attr:`machine` - 硬件标识符" + +#: ../../library/os.rst:631 +msgid "" +"For backwards compatibility, this object is also iterable, behaving like a " +"five-tuple containing :attr:`sysname`, :attr:`nodename`, :attr:`release`, " +":attr:`version`, and :attr:`machine` in that order." +msgstr "" +"为了向后兼容,该对象也是可迭代的,像是一个按照 " +":attr:`sysname`,:attr:`nodename`,:attr:`release`,:attr:`version`,和 " +":attr:`machine` 顺序组成的元组。" + +#: ../../library/os.rst:636 +msgid "" +"Some systems truncate :attr:`nodename` to 8 characters or to the leading " +"component; a better way to get the hostname is :func:`socket.gethostname` " +"or even ``socket.gethostbyaddr(socket.gethostname())``." +msgstr "" +"有些系统会将 :attr:`nodename` 截短为 8 个字符或截短至前缀部分;获取主机名的一个更好方式是 " +":func:`socket.gethostname` 或甚至可以用 " +"``socket.gethostbyaddr(socket.gethostname())``。" + +#: ../../library/os.rst:642 +msgid ":ref:`Availability `: recent flavors of Unix." +msgstr ":ref:`可用性 `: 较新的 Unix 版本。" + +#: ../../library/os.rst:643 ../../library/os.rst:4035 +msgid "" +"Return type changed from a tuple to a tuple-like object with named " +"attributes." +msgstr "返回结果的类型由元组变成一个类似元组的对象,同时具有命名的属性。" + +#: ../../library/os.rst:652 +msgid "" +"Unset (delete) the environment variable named *key*. Such changes to the " +"environment affect subprocesses started with :func:`os.system`, " +":func:`popen` or :func:`fork` and :func:`execv`." +msgstr "" +"取消设置(删除)名为 *key* 的环境变量。变量名的改变会影响由 " +":func:`os.system`,:func:`popen`,:func:`fork` 和 :func:`execv` 触发的子进程。" + +#: ../../library/os.rst:656 +msgid "" +"Deletion of items in :data:`os.environ` is automatically translated into a " +"corresponding call to :func:`unsetenv`; however, calls to :func:`unsetenv` " +"don't update :data:`os.environ`, so it is actually preferable to delete " +"items of :data:`os.environ`." +msgstr "" +"删除 :data:`os.environ` 中的项目会自动转化为对 :func:`unsetenv` 的相应调用;然而,对 " +":func:`unsetenv` 的调用并不更新 :data:`os.environ` ,所以实际上最好是删除 :data:`os.environ` " +"的项目。" + +#: ../../library/os.rst:661 +msgid "" +"Raises an :ref:`auditing event ` ``os.unsetenv`` with argument " +"``key``." +msgstr "引发一个 :ref:`审计事件 ` ``os.unsetenv`` 并附带参数 ``key``。" + +#: ../../library/os.rst:663 +msgid "The function is now always available and is also available on Windows." +msgstr "该函数现在总是可用,并且在 Windows 上也可用。" + +#: ../../library/os.rst:670 +msgid "File Object Creation" +msgstr "创建文件对象" + +#: ../../library/os.rst:672 +msgid "" +"These functions create new :term:`file objects `. (See also " +":func:`~os.open` for opening file descriptors.)" +msgstr "" +"这些函数创建新的 :term:`file objects ` 。(参见 :func:`~os.open` " +"以获取打开文件描述符的相关信息。)" + +#: ../../library/os.rst:678 +msgid "" +"Return an open file object connected to the file descriptor *fd*. This is " +"an alias of the :func:`open` built-in function and accepts the same " +"arguments. The only difference is that the first argument of :func:`fdopen` " +"must always be an integer." +msgstr "" +"返回打开文件描述符 *fd* 对应文件的对象。类似内建 :func:`open` 函数,二者接受同样的参数。不同之处在于 :func:`fdopen` " +"第一个参数应该为整数。" + +#: ../../library/os.rst:687 +msgid "File Descriptor Operations" +msgstr "文件描述符操作" + +#: ../../library/os.rst:689 +msgid "" +"These functions operate on I/O streams referenced using file descriptors." +msgstr "这些函数对文件描述符所引用的 I/O 流进行操作。" + +#: ../../library/os.rst:691 +msgid "" +"File descriptors are small integers corresponding to a file that has been " +"opened by the current process. For example, standard input is usually file " +"descriptor 0, standard output is 1, and standard error is 2. Further files " +"opened by a process will then be assigned 3, 4, 5, and so forth. The name " +"\"file descriptor\" is slightly deceptive; on Unix platforms, sockets and " +"pipes are also referenced by file descriptors." +msgstr "" +"文件描述符是一些小的整数,对应于当前进程所打开的文件。例如,标准输入的文件描述符通常是0,标准输出是1,标准错误是2。之后被进程打开的文件的文件描述符会被依次指定为3,4,5等。“文件描述符”这个词有点误导性,在" +" Unix 平台中套接字和管道也被文件描述符所引用。" + +#: ../../library/os.rst:698 +msgid "" +"The :meth:`~io.IOBase.fileno` method can be used to obtain the file " +"descriptor associated with a :term:`file object` when required. Note that " +"using the file descriptor directly will bypass the file object methods, " +"ignoring aspects such as internal buffering of data." +msgstr "" +"当需要时,可以用 :meth:`~io.IOBase.fileno` 可以获得 :term:`file object` " +"所对应的文件描述符。需要注意的是,直接使用文件描述符会绕过文件对象的方法,会忽略如数据内部缓冲等情况。" + +#: ../../library/os.rst:706 +msgid "Close file descriptor *fd*." +msgstr "关闭文件描述符 *fd*。" + +#: ../../library/os.rst:710 +msgid "" +"This function is intended for low-level I/O and must be applied to a file " +"descriptor as returned by :func:`os.open` or :func:`pipe`. To close a " +"\"file object\" returned by the built-in function :func:`open` or by " +":func:`popen` or :func:`fdopen`, use its :meth:`~io.IOBase.close` method." +msgstr "" +"该功能适用于低级 I/O 操作,必须用于 :func:`os.open` 或 :func:`pipe` 返回的文件描述符。若要关闭由内建函数 " +":func:`open`、:func:`popen` 或 :func:`fdopen` 返回的 \"文件对象\",则应使用其相应的 " +":meth:`~io.IOBase.close` 方法。" + +#: ../../library/os.rst:718 +msgid "" +"Close all file descriptors from *fd_low* (inclusive) to *fd_high* " +"(exclusive), ignoring errors. Equivalent to (but much faster than)::" +msgstr "关闭从 *fd_low* (包括)到 *fd_high* (排除)间的文件描述符,并忽略错误。类似(但快于)::" + +#: ../../library/os.rst:730 +msgid "" +"Copy *count* bytes from file descriptor *src*, starting from offset " +"*offset_src*, to file descriptor *dst*, starting from offset *offset_dst*. " +"If *offset_src* is None, then *src* is read from the current position; " +"respectively for *offset_dst*. The files pointed by *src* and *dst* must " +"reside in the same filesystem, otherwise an :exc:`OSError` is raised with " +":attr:`~OSError.errno` set to :data:`errno.EXDEV`." +msgstr "" +"从文件描述符 *src* 复制 *count* 字节,从偏移量 *offset_src* 开始读取,到文件描述符 *dst*,从偏移量 " +"*offset_dst* 开始写入。如果 *offset_src* 为 None,则 *src* 将从当前位置开始读取;*offset_dst* " +"同理。*src* 和 *dst* 指向的文件必须处于相同的文件系统,否则将会抛出一个 :attr:`~OSError.errno` 被设为 " +":data:`errno.EXDEV` 的 :exc:`OSError` 。" + +#: ../../library/os.rst:737 +msgid "" +"This copy is done without the additional cost of transferring data from the " +"kernel to user space and then back into the kernel. Additionally, some " +"filesystems could implement extra optimizations. The copy is done as if both" +" files are opened as binary." +msgstr "" +"此复制的完成没有额外的从内核到用户空间再回到内核的数据转移花费。另外,一些文件系统可能实现额外的优化。完成复制就如同打开两个二进制文件一样。" + +#: ../../library/os.rst:742 +msgid "" +"The return value is the amount of bytes copied. This could be less than the " +"amount requested." +msgstr "返回值是复制的字节的数目。这可能低于需求的数目。" + +#: ../../library/os.rst:746 +msgid "" +":ref:`Availability `: Linux kernel >= 4.5 or glibc >= 2.27." +msgstr "" +":ref:`Availability `: Linux kernel >= 4.5 或 glibc >= 2.27。" + +#: ../../library/os.rst:752 +msgid "" +"Return a string describing the encoding of the device associated with *fd* " +"if it is connected to a terminal; else return :const:`None`." +msgstr "如果连接到终端,则返回一个与 *fd* 关联的设备描述字符,否则返回 :const:`None`。" + +#: ../../library/os.rst:758 +msgid "" +"Return a duplicate of file descriptor *fd*. The new file descriptor is " +":ref:`non-inheritable `." +msgstr "返回一个文件描述符 *fd* 的副本。该文件描述符的副本是 :ref:`不可继承的`。" + +#: ../../library/os.rst:761 +msgid "" +"On Windows, when duplicating a standard stream (0: stdin, 1: stdout, 2: " +"stderr), the new file descriptor is :ref:`inheritable `." +msgstr "" +"在 Windows 中,当复制一个标准流(0: stdin, 1: stdout, 2: stderr)时,新的文件描述符是 " +":ref:`可继承的`。" + +#: ../../library/os.rst:765 ../../library/os.rst:967 +msgid "The new file descriptor is now non-inheritable." +msgstr "新的文件描述符现在是不可继承的。" + +#: ../../library/os.rst:771 +msgid "" +"Duplicate file descriptor *fd* to *fd2*, closing the latter first if " +"necessary. Return *fd2*. The new file descriptor is :ref:`inheritable " +"` by default or non-inheritable if *inheritable* is " +"``False``." +msgstr "" +"把文件描述符 *fd* 复制为 *fd2*,必要时先关闭后者。返回 *fd2*。新的文件描述符默认是 " +":ref:`可继承的`,除非在 *inheritable* 为 ``False`` 时,是不可继承的。" + +#: ../../library/os.rst:776 +msgid "Add the optional *inheritable* parameter." +msgstr "添加可选参数 *inheritable*。" + +#: ../../library/os.rst:779 +msgid "Return *fd2* on success. Previously, ``None`` was always returned." +msgstr "成功时返回 *fd2*,以过去的版本中,总是返回 ``None``。" + +#: ../../library/os.rst:785 +msgid "" +"Change the mode of the file given by *fd* to the numeric *mode*. See the " +"docs for :func:`chmod` for possible values of *mode*. As of Python 3.3, " +"this is equivalent to ``os.chmod(fd, mode)``." +msgstr "" +"将 *fd* 指定文件的权限状态修改为 *mode*。可以参考 :func:`chmod` 中列出 *mode* 的可用值。从Python " +"3.3开始,这相当于 ``os.chmod(fd, mode)``。" + +#: ../../library/os.rst:789 ../../library/os.rst:1711 +#: ../../library/os.rst:1802 +msgid "" +"Raises an :ref:`auditing event ` ``os.chmod`` with arguments " +"``path``, ``mode``, ``dir_fd``." +msgstr "" +"引发一个 :ref:`审计事件 ` ``os.chmod`` 并附带参数 ``path``, ``mode``, " +"``dir_fd``。" + +#: ../../library/os.rst:796 +msgid "" +"Change the owner and group id of the file given by *fd* to the numeric *uid*" +" and *gid*. To leave one of the ids unchanged, set it to -1. See " +":func:`chown`. As of Python 3.3, this is equivalent to ``os.chown(fd, uid, " +"gid)``." +msgstr "" +"分别将 *fd* 指定文件的所有者和组 ID 修改为 *uid* 和 *gid* 的值。若不想变更其中的某个 ID,可将相应值设为 -1。参考 " +":func:`chown`。从 Python 3.3 开始,这相当于 ``os.chown(fd, uid, gid)``。" + +#: ../../library/os.rst:801 ../../library/os.rst:1733 +#: ../../library/os.rst:1815 +msgid "" +"Raises an :ref:`auditing event ` ``os.chown`` with arguments " +"``path``, ``uid``, ``gid``, ``dir_fd``." +msgstr "" +"引发一个 :ref:`审计事件 ` ``os.chown`` 并附带参数 ``path``, ``uid``, ``gid``, " +"``dir_fd``。" + +#: ../../library/os.rst:808 +msgid "" +"Force write of file with filedescriptor *fd* to disk. Does not force update " +"of metadata." +msgstr "强制将文件描述符 *fd* 指定文件写入磁盘。不强制更新元数据。" + +#: ../../library/os.rst:814 +msgid "This function is not available on MacOS." +msgstr "该功能在 MacOS 中不可用。" + +#: ../../library/os.rst:819 +msgid "" +"Return system configuration information relevant to an open file. *name* " +"specifies the configuration value to retrieve; it may be a string which is " +"the name of a defined system value; these names are specified in a number of" +" standards (POSIX.1, Unix 95, Unix 98, and others). Some platforms define " +"additional names as well. The names known to the host operating system are " +"given in the ``pathconf_names`` dictionary. For configuration variables not" +" included in that mapping, passing an integer for *name* is also accepted." +msgstr "" +"返回与打开的文件有关的系统配置信息。*name* " +"指定要查找的配置名称,它可以是字符串,是一个系统已定义的名称,这些名称定义在不同标准(POSIX.1,Unix 95,Unix 98 " +"等)中。一些平台还定义了额外的其他名称。当前操作系统已定义的名称在 ``pathconf_names`` " +"字典中给出。对于未包含在该映射中的配置名称,也可以传递一个整数作为 *name*。" + +#: ../../library/os.rst:827 ../../library/os.rst:2071 +msgid "" +"If *name* is a string and is not known, :exc:`ValueError` is raised. If a " +"specific value for *name* is not supported by the host system, even if it is" +" included in ``pathconf_names``, an :exc:`OSError` is raised with " +":const:`errno.EINVAL` for the error number." +msgstr "" +"如果 *name* 是一个字符串且不是已定义的名称,将抛出 :exc:`ValueError` 异常。如果当前系统不支持 *name* " +"指定的配置名称,即使该名称存在于 ``pathconf_names``,也会抛出 :exc:`OSError` 异常,错误码为 " +":const:`errno.EINVAL`。" + +#: ../../library/os.rst:832 +msgid "As of Python 3.3, this is equivalent to ``os.pathconf(fd, name)``." +msgstr "从 Python 3.3 起,此功能等价于 ``os.pathconf(fd, name)``。" + +#: ../../library/os.rst:839 +msgid "" +"Get the status of the file descriptor *fd*. Return a :class:`stat_result` " +"object." +msgstr "获取文件描述符 *fd* 的状态. 返回一个 :class:`stat_result` 对象。" + +#: ../../library/os.rst:842 +msgid "As of Python 3.3, this is equivalent to ``os.stat(fd)``." +msgstr "从 Python 3.3 起,此功能等价于 ``os.stat(fd)``。" + +#: ../../library/os.rst:846 ../../library/os.rst:1899 +msgid "The :func:`.stat` function." +msgstr ":func:`.stat` 函数。" + +#: ../../library/os.rst:851 +msgid "" +"Return information about the filesystem containing the file associated with " +"file descriptor *fd*, like :func:`statvfs`. As of Python 3.3, this is " +"equivalent to ``os.statvfs(fd)``." +msgstr "" +"返回文件系统的信息,该文件系统是文件描述符 *fd* 指向的文件所在的文件系统,与 :func:`statvfs` 一样。从 Python 3.3 " +"开始,它等效于 ``os.statvfs(fd)``。" + +#: ../../library/os.rst:860 +msgid "" +"Force write of file with filedescriptor *fd* to disk. On Unix, this calls " +"the native :c:func:`fsync` function; on Windows, the MS :c:func:`_commit` " +"function." +msgstr "" +"强制将文件描述符 *fd* 指向的文件写入磁盘。在 Unix,这将调用原生 :c:func:`fsync` 函数;在 Windows,则是 MS " +":c:func:`_commit` 函数。" + +#: ../../library/os.rst:863 +msgid "" +"If you're starting with a buffered Python :term:`file object` *f*, first do " +"``f.flush()``, and then do ``os.fsync(f.fileno())``, to ensure that all " +"internal buffers associated with *f* are written to disk." +msgstr "" +"如果要写入的是缓冲区内的 Python :term:`文件对象 ` *f*,请先执行 ``f.flush()``,然后执行 " +"``os.fsync(f.fileno())``,以确保与 *f* 关联的所有内部缓冲区都写入磁盘。" + +#: ../../library/os.rst:872 +msgid "" +"Truncate the file corresponding to file descriptor *fd*, so that it is at " +"most *length* bytes in size. As of Python 3.3, this is equivalent to " +"``os.truncate(fd, length)``." +msgstr "" +"截断文件描述符 *fd* 指向的文件,以使其最大为 *length* 字节。从 Python 3.3 开始,它等效于 ``os.truncate(fd," +" length)``。" + +#: ../../library/os.rst:876 +msgid "" +"Raises an :ref:`auditing event ` ``os.truncate`` with arguments " +"``fd``, ``length``." +msgstr "引发一个 :ref:`审计事件 ` ``os.truncate`` 并附带参数 ``fd``, ``length``。" + +#: ../../library/os.rst:880 ../../library/os.rst:2939 +msgid "Added support for Windows" +msgstr "添加了 Windows 支持" + +#: ../../library/os.rst:886 +msgid "" +"Get the blocking mode of the file descriptor: ``False`` if the " +":data:`O_NONBLOCK` flag is set, ``True`` if the flag is cleared." +msgstr "" +"获取文件描述符的阻塞模式:如果设置了 :data:`O_NONBLOCK` 标志位,返回 ``False``,如果该标志位被清除,返回 " +"``True``。" + +#: ../../library/os.rst:889 +msgid "See also :func:`set_blocking` and :meth:`socket.socket.setblocking`." +msgstr "参见 :func:`set_blocking` 和 :meth:`socket.socket.setblocking`。" + +#: ../../library/os.rst:898 +msgid "" +"Return ``True`` if the file descriptor *fd* is open and connected to a " +"tty(-like) device, else ``False``." +msgstr "如果文件描述符 *fd* 打开且已连接至 tty 设备(或类 tty 设备),返回 ``True``,否则返回 ``False``。" + +#: ../../library/os.rst:904 +msgid "" +"Apply, test or remove a POSIX lock on an open file descriptor. *fd* is an " +"open file descriptor. *cmd* specifies the command to use - one of " +":data:`F_LOCK`, :data:`F_TLOCK`, :data:`F_ULOCK` or :data:`F_TEST`. *len* " +"specifies the section of the file to lock." +msgstr "" +"在打开的文件描述符上,使用、测试或删除 POSIX 锁。*fd* 是一个打开的文件描述符。*cmd* 指定要进行的操作,它们是 " +":data:`F_LOCK`、:data:`F_TLOCK`、:data:`F_ULOCK` 或 :data:`F_TEST` 中的一个。*len* " +"指定哪部分文件需要锁定。" + +#: ../../library/os.rst:910 +msgid "" +"Raises an :ref:`auditing event ` ``os.lockf`` with arguments " +"``fd``, ``cmd``, ``len``." +msgstr "" +"引发一个 :ref:`审计事件 ` ``os.lockf`` 并附带参数 ``fd``, ``cmd``, ``len``。" + +#: ../../library/os.rst:922 +msgid "Flags that specify what action :func:`lockf` will take." +msgstr "标志位,用于指定 :func:`lockf` 进行哪一种操作。" + +#: ../../library/os.rst:931 +msgid "" +"Set the current position of file descriptor *fd* to position *pos*, modified" +" by *how*: :const:`SEEK_SET` or ``0`` to set the position relative to the " +"beginning of the file; :const:`SEEK_CUR` or ``1`` to set it relative to the " +"current position; :const:`SEEK_END` or ``2`` to set it relative to the end " +"of the file. Return the new cursor position in bytes, starting from the " +"beginning." +msgstr "" +"将文件描述符 *fd* 的当前位置设置为 *pos*,位置的计算方式 *how* 如下:设置为 :const:`SEEK_SET` 或 ``0`` " +"表示从文件开头计算,设置为 :const:`SEEK_CUR` 或 ``1`` 表示从文件当前位置计算,设置为 :const:`SEEK_END` 或 " +"``2`` 表示文件末尾计算。返回新指针位置,这个位置是从文件开头计算的,单位是字节。" + +#: ../../library/os.rst:942 +msgid "" +"Parameters to the :func:`lseek` function. Their values are 0, 1, and 2, " +"respectively." +msgstr ":func:`lseek` 函数的参数,它们的值分别为 0、1 和 2。" + +#: ../../library/os.rst:945 +msgid "" +"Some operating systems could support additional values, like " +":data:`os.SEEK_HOLE` or :data:`os.SEEK_DATA`." +msgstr "某些操作系统可能支持其他值,例如 :data:`os.SEEK_HOLE` 或 :data:`os.SEEK_DATA`。" + +#: ../../library/os.rst:952 +msgid "" +"Open the file *path* and set various flags according to *flags* and possibly" +" its mode according to *mode*. When computing *mode*, the current umask " +"value is first masked out. Return the file descriptor for the newly opened " +"file. The new file descriptor is :ref:`non-inheritable `." +msgstr "" +"打开文件 *path*,根据 *flags* 设置各种标志位,并根据 *mode* 设置其权限状态。当计算 *mode* 时,会首先根据当前 umask" +" 值将部分权限去除。本方法返回新文件的描述符。新的文件描述符是 :ref:`不可继承 ` 的。" + +#: ../../library/os.rst:957 +msgid "" +"For a description of the flag and mode values, see the C run-time " +"documentation; flag constants (like :const:`O_RDONLY` and :const:`O_WRONLY`)" +" are defined in the :mod:`os` module. In particular, on Windows adding " +":const:`O_BINARY` is needed to open files in binary mode." +msgstr "" +"有关 flag 和 mode 取值的说明,请参见 C 运行时文档。标志位常量(如 :const:`O_RDONLY` 和 " +":const:`O_WRONLY`)在 :mod:`os` 模块中定义。特别地,在 Windows 上需要添加 :const:`O_BINARY` " +"才能以二进制模式打开文件。" + +#: ../../library/os.rst:962 +msgid "" +"This function can support :ref:`paths relative to directory descriptors " +"` with the *dir_fd* parameter." +msgstr "本函数带有 *dir_fd* 参数,支持 :ref:`基于目录描述符的相对路径 `。" + +#: ../../library/os.rst:965 +msgid "" +"Raises an :ref:`auditing event ` ``open`` with arguments ``path``," +" ``mode``, ``flags``." +msgstr "" +"引发一个 :ref:`审计事件 ` ``open`` 并附带参数 ``path``, ``mode``, ``flags``。" + +#: ../../library/os.rst:972 +msgid "" +"This function is intended for low-level I/O. For normal usage, use the " +"built-in function :func:`open`, which returns a :term:`file object` with " +":meth:`~file.read` and :meth:`~file.write` methods (and many more). To wrap" +" a file descriptor in a file object, use :func:`fdopen`." +msgstr "" +"本函数适用于底层的 I/O。常规用途请使用内置函数 :func:`open`,该函数的 :meth:`~file.read` 和 " +":meth:`~file.write` 方法(及其他方法)会返回 :term:`文件对象 `。要将文件描述符包装在文件对象中,请使用 :func:`fdopen`。" + +#: ../../library/os.rst:977 ../../library/os.rst:1944 +#: ../../library/os.rst:2015 ../../library/os.rst:2037 +#: ../../library/os.rst:2118 ../../library/os.rst:2149 +msgid "The *dir_fd* argument." +msgstr "*dir_fd* 参数。" + +#: ../../library/os.rst:980 ../../library/os.rst:1274 +#: ../../library/os.rst:1400 ../../library/os.rst:4156 +msgid "" +"If the system call is interrupted and the signal handler does not raise an " +"exception, the function now retries the system call instead of raising an " +":exc:`InterruptedError` exception (see :pep:`475` for the rationale)." +msgstr "" +"如果系统调用被中断,但信号处理程序没有触发异常,此函数现在会重试系统调用,而不是触发 :exc:`InterruptedError` 异常 (原因详见 " +":pep:`475`)。" + +#: ../../library/os.rst:985 ../../library/os.rst:1608 +#: ../../library/os.rst:1640 ../../library/os.rst:1671 +#: ../../library/os.rst:1717 ../../library/os.rst:1751 +#: ../../library/os.rst:1791 ../../library/os.rst:1806 +#: ../../library/os.rst:1819 ../../library/os.rst:1878 +#: ../../library/os.rst:1907 ../../library/os.rst:1947 +#: ../../library/os.rst:1991 ../../library/os.rst:2018 +#: ../../library/os.rst:2040 ../../library/os.rst:2081 +#: ../../library/os.rst:2152 ../../library/os.rst:2171 +#: ../../library/os.rst:2257 ../../library/os.rst:2530 +#: ../../library/os.rst:2781 ../../library/os.rst:2942 +#: ../../library/os.rst:2958 ../../library/os.rst:2998 +#: ../../library/os.rst:3096 ../../library/os.rst:3157 +#: ../../library/os.rst:3244 ../../library/os.rst:3423 +#: ../../library/os.rst:3911 +msgid "Accepts a :term:`path-like object`." +msgstr "接受一个 :term:`path-like object`。" + +#: ../../library/os.rst:988 +msgid "" +"The following constants are options for the *flags* parameter to the " +":func:`~os.open` function. They can be combined using the bitwise OR " +"operator ``|``. Some of them are not available on all platforms. For " +"descriptions of their availability and use, consult the :manpage:`open(2)` " +"manual page on Unix or `the MSDN `_ on Windows." +msgstr "" +"以下常量是 :func:`~os.open` 函数 *flags* 参数的选项。可以用按位或运算符 ``|`` " +"将它们组合使用。部分常量并非在所有平台上都可用。有关其可用性和用法的说明,请参阅 :manpage:`open(2)` 手册(Unix 上)或 " +"`MSDN `_ (Windows " +"上)。" + +#: ../../library/os.rst:1003 +msgid "The above constants are available on Unix and Windows." +msgstr "上述常量在 Unix 和 Windows 上均可用。" + +#: ../../library/os.rst:1014 +msgid "The above constants are only available on Unix." +msgstr "这个常数仅在 Unix 系统中可用。" + +#: ../../library/os.rst:1016 +msgid "Add :data:`O_CLOEXEC` constant." +msgstr "增加 :data:`O_CLOEXEC` 常量。" + +#: ../../library/os.rst:1027 +msgid "The above constants are only available on Windows." +msgstr "这个常数仅在 Windows 系统中可用。" + +#: ../../library/os.rst:1040 +msgid "" +"The above constants are extensions and not present if they are not defined " +"by the C library." +msgstr "上述常量是扩展常量,如果 C 库未定义它们,则不存在。" + +#: ../../library/os.rst:1043 +msgid "" +"Add :data:`O_PATH` on systems that support it. Add :data:`O_TMPFILE`, only " +"available on Linux Kernel 3.11 or newer." +msgstr "" +"在支持的系统上增加 :data:`O_PATH`。增加 :data:`O_TMPFILE`,仅在 Linux Kernel 3.11 或更高版本可用。" + +#: ../../library/os.rst:1053 +msgid "" +"Open a new pseudo-terminal pair. Return a pair of file descriptors " +"``(master, slave)`` for the pty and the tty, respectively. The new file " +"descriptors are :ref:`non-inheritable `. For a (slightly) " +"more portable approach, use the :mod:`pty` module." +msgstr "" +"打开一对新的伪终端,返回一对文件描述符 ``(主,从)``,分别为 pty 和 tty。新的文件描述符是 :ref:`不可继承 " +"` 的。对于(稍微)轻量一些的方法,请使用 :mod:`pty` 模块。" + +#: ../../library/os.rst:1059 ../../library/os.rst:1085 +#: ../../library/os.rst:3608 +msgid ":ref:`Availability `: some flavors of Unix." +msgstr ":ref:`可用性 `: 某些 Unix。" + +#: ../../library/os.rst:1060 ../../library/os.rst:1072 +msgid "The new file descriptors are now non-inheritable." +msgstr "新的文件描述符不再可继承。" + +#: ../../library/os.rst:1066 +msgid "" +"Create a pipe. Return a pair of file descriptors ``(r, w)`` usable for " +"reading and writing, respectively. The new file descriptor is :ref:`non-" +"inheritable `." +msgstr "" +"创建一个管道,返回一对分别用于读取和写入的文件描述符 ``(r, w)``。新的文件描述符是 :ref:`不可继承 ` " +"的。" + +#: ../../library/os.rst:1078 +msgid "" +"Create a pipe with *flags* set atomically. *flags* can be constructed by " +"ORing together one or more of these values: :data:`O_NONBLOCK`, " +":data:`O_CLOEXEC`. Return a pair of file descriptors ``(r, w)`` usable for " +"reading and writing, respectively." +msgstr "" +"创建带有 *flags* 标志位的管道。可通过对以下一个或多个值进行“或”运算来构造这些 " +"*flags*::data:`O_NONBLOCK`、:data:`O_CLOEXEC`。返回一对分别用于读取和写入的文件描述符 ``(r, w)``。" + +#: ../../library/os.rst:1091 +msgid "" +"Ensures that enough disk space is allocated for the file specified by *fd* " +"starting from *offset* and continuing for *len* bytes." +msgstr "确保为 *fd* 指向的文件分配了足够的磁盘空间,该空间从偏移量 *offset* 开始,到 *len* 字节为止。" + +#: ../../library/os.rst:1101 +msgid "" +"Announces an intention to access data in a specific pattern thus allowing " +"the kernel to make optimizations. The advice applies to the region of the " +"file specified by *fd* starting at *offset* and continuing for *len* bytes. " +"*advice* is one of :data:`POSIX_FADV_NORMAL`, :data:`POSIX_FADV_SEQUENTIAL`," +" :data:`POSIX_FADV_RANDOM`, :data:`POSIX_FADV_NOREUSE`, " +":data:`POSIX_FADV_WILLNEED` or :data:`POSIX_FADV_DONTNEED`." +msgstr "" +"声明即将以特定模式访问数据,使内核可以提前进行优化。数据范围是从 *fd* 所指向文件的 *offset* 开始,持续 *len* " +"个字节。*advice* 的取值是如下之一::data:`POSIX_FADV_NORMAL`, " +":data:`POSIX_FADV_SEQUENTIAL`, :data:`POSIX_FADV_RANDOM`, " +":data:`POSIX_FADV_NOREUSE`, :data:`POSIX_FADV_WILLNEED` 或 " +":data:`POSIX_FADV_DONTNEED`。" + +#: ../../library/os.rst:1121 +msgid "" +"Flags that can be used in *advice* in :func:`posix_fadvise` that specify the" +" access pattern that is likely to be used." +msgstr "用于 :func:`posix_fadvise` 的 *advice* 参数的标志位,指定可能使用的访问模式。" + +#: ../../library/os.rst:1131 +msgid "" +"Read at most *n* bytes from file descriptor *fd* at a position of *offset*, " +"leaving the file offset unchanged." +msgstr "从文件描述符 *fd* 所指向文件的偏移位置 *offset* 开始,读取至多 *n* 个字节,而保持文件偏移量不变。" + +#: ../../library/os.rst:1134 ../../library/os.rst:1263 +msgid "" +"Return a bytestring containing the bytes read. If the end of the file " +"referred to by *fd* has been reached, an empty bytes object is returned." +msgstr "返回所读取字节的字节串 (bytestring)。如果到达了 *fd* 指向的文件末尾,则返回空字节对象。" + +#: ../../library/os.rst:1144 +msgid "" +"Read from a file descriptor *fd* at a position of *offset* into mutable " +":term:`bytes-like objects ` *buffers*, leaving the file " +"offset unchanged. Transfer data into each buffer until it is full and then " +"move on to the next buffer in the sequence to hold the rest of the data." +msgstr "" +"从文件描述符 *fd* 所指向文件的偏移位置 *offset* 开始,将数据读取至可变 :term:`字节类对象 ` 缓冲区 *buffers* " +"中,保持文件偏移量不变。将数据依次存放到每个缓冲区中,填满一个后继续存放到序列中的下一个缓冲区,来保存其余数据。" + +#: ../../library/os.rst:1149 ../../library/os.rst:1219 +msgid "" +"The flags argument contains a bitwise OR of zero or more of the following " +"flags:" +msgstr "flags 参数可以由零个或多个标志位进行按位或运算来得到:" + +#: ../../library/os.rst:1152 +msgid ":data:`RWF_HIPRI`" +msgstr ":data:`RWF_HIPRI`" + +#: ../../library/os.rst:1153 +msgid ":data:`RWF_NOWAIT`" +msgstr ":data:`RWF_NOWAIT`" + +#: ../../library/os.rst:1155 ../../library/os.rst:1350 +msgid "" +"Return the total number of bytes actually read which can be less than the " +"total capacity of all the objects." +msgstr "返回实际读取的字节总数,该总数可以小于所有对象的总容量。" + +#: ../../library/os.rst:1158 ../../library/os.rst:1227 +#: ../../library/os.rst:1353 ../../library/os.rst:1415 +msgid "" +"The operating system may set a limit (:func:`sysconf` value " +"``'SC_IOV_MAX'``) on the number of buffers that can be used." +msgstr "操作系统可能对允许使用的缓冲区数量有限制(使用 :func:`sysconf` 获取 ``'SC_IOV_MAX'`` 值)。" + +#: ../../library/os.rst:1161 +msgid "Combine the functionality of :func:`os.readv` and :func:`os.pread`." +msgstr "本方法结合了 :func:`os.readv` 和 :func:`os.pread` 的功能。" + +#: ../../library/os.rst:1166 +msgid "" +":ref:`Availability `: Linux 2.6.30 and newer, FreeBSD 6.0 and " +"newer, OpenBSD 2.7 and newer, AIX 7.1 and newer. Using flags requires Linux " +"4.6 or newer." +msgstr "" +":ref:`可用性 `:Linux 2.6.30 或更高版本,FreeBSD 6.0 或更高版本,OpenBSD 2.7 " +"或更高版本,AIX 7.1 或更高版本。使用标志位需要 Linux 4.6 或更高版本。" + +#: ../../library/os.rst:1172 +msgid "" +"Do not wait for data which is not immediately available. If this flag is " +"specified, the system call will return instantly if it would have to read " +"data from the backing storage or wait for a lock." +msgstr "不要等待无法立即获得的数据。如果指定了此标志,那么当需要从后备存储器中读取数据,或等待文件锁时,系统调用将立即返回。" + +#: ../../library/os.rst:1176 +msgid "" +"If some data was successfully read, it will return the number of bytes read." +" If no bytes were read, it will return ``-1`` and set errno to " +":data:`errno.EAGAIN`." +msgstr "" +"如果成功读取数据,则返回读取的字节数。如果未读取到数据,则返回 ``-1``,并将错误码 errno 置为 :data:`errno.EAGAIN`。" + +#: ../../library/os.rst:1181 +msgid ":ref:`Availability `: Linux 4.14 and newer." +msgstr ":ref:`可用性 `:Linux 4.14 或更高版本。" + +#: ../../library/os.rst:1187 +msgid "" +"High priority read/write. Allows block-based filesystems to use polling of " +"the device, which provides lower latency, but may use additional resources." +msgstr "高优先级读/写。允许基于块的文件系统对设备进行轮询,这样可以降低延迟,但可能会占用更多资源。" + +#: ../../library/os.rst:1191 +msgid "" +"Currently, on Linux, this feature is usable only on a file descriptor opened" +" using the :data:`O_DIRECT` flag." +msgstr "目前在 Linux 上,此功能仅在使用 :data:`O_DIRECT` 标志打开的文件描述符上可用。" + +#: ../../library/os.rst:1195 +msgid ":ref:`Availability `: Linux 4.6 and newer." +msgstr ":ref:`可用性 `:Linux 4.6 或更高版本。" + +#: ../../library/os.rst:1201 +msgid "" +"Write the bytestring in *str* to file descriptor *fd* at position of " +"*offset*, leaving the file offset unchanged." +msgstr "将 *str* 中的字节串 (bytestring) 写入文件描述符 *fd* 的偏移位置 *offset* 处,保持文件偏移量不变。" + +#: ../../library/os.rst:1204 ../../library/os.rst:1390 +msgid "Return the number of bytes actually written." +msgstr "返回实际写入的字节数。" + +#: ../../library/os.rst:1213 +msgid "" +"Write the *buffers* contents to file descriptor *fd* at a offset *offset*, " +"leaving the file offset unchanged. *buffers* must be a sequence of " +":term:`bytes-like objects `. Buffers are processed in " +"array order. Entire contents of the first buffer is written before " +"proceeding to the second, and so on." +msgstr "" +"将缓冲区 *buffers* 的内容写入文件描述符 *fd* 的偏移位置 *offset* 处,保持文件偏移量不变。缓冲区 *buffers* 必须是由" +" :term:`字节类对象 ` " +"组成的序列。缓冲区以数组顺序处理。先写入第一个缓冲区的全部内容,再写入第二个缓冲区,照此继续。" + +#: ../../library/os.rst:1222 +msgid ":data:`RWF_DSYNC`" +msgstr ":data:`RWF_DSYNC`" + +#: ../../library/os.rst:1223 +msgid ":data:`RWF_SYNC`" +msgstr ":data:`RWF_SYNC`" + +#: ../../library/os.rst:1225 +msgid "Return the total number of bytes actually written." +msgstr "返回实际写入的字节总数。" + +#: ../../library/os.rst:1230 +msgid "Combine the functionality of :func:`os.writev` and :func:`os.pwrite`." +msgstr "本方法结合了 :func:`os.writev` 和 :func:`os.pwrite` 的功能。" + +#: ../../library/os.rst:1235 +msgid "" +":ref:`Availability `: Linux 2.6.30 and newer, FreeBSD 6.0 and " +"newer, OpenBSD 2.7 and newer, AIX 7.1 and newer. Using flags requires Linux " +"4.7 or newer." +msgstr "" +":ref:`可用性 `:Linux 2.6.30 或更高版本,FreeBSD 6.0 或更高版本,OpenBSD 2.7 " +"或更高版本,AIX 7.1 或更高版本。使用标志位需要 Linux 4.7 或更高版本。" + +#: ../../library/os.rst:1241 +msgid "" +"Provide a per-write equivalent of the :data:`O_DSYNC` ``open(2)`` flag. This" +" flag effect applies only to the data range written by the system call." +msgstr "提供立即写入功能,等效于 :data:`O_DSYNC` ``open(2)`` 标志。该标志仅作用于系统调用写入的数据。" + +#: ../../library/os.rst:1245 ../../library/os.rst:1255 +msgid ":ref:`Availability `: Linux 4.7 and newer." +msgstr ":ref:`可用性 `:Linux 4.7 或更高版本。" + +#: ../../library/os.rst:1251 +msgid "" +"Provide a per-write equivalent of the :data:`O_SYNC` ``open(2)`` flag. This " +"flag effect applies only to the data range written by the system call." +msgstr "提供立即写入功能,等效于 :data:`O_SYNC` ``open(2)`` 标志。该标志仅作用于系统调用写入的数据。" + +#: ../../library/os.rst:1261 +msgid "Read at most *n* bytes from file descriptor *fd*." +msgstr "从文件描述符 *fd* 中读取至多 *n* 个字节。" + +#: ../../library/os.rst:1268 +msgid "" +"This function is intended for low-level I/O and must be applied to a file " +"descriptor as returned by :func:`os.open` or :func:`pipe`. To read a \"file" +" object\" returned by the built-in function :func:`open` or by :func:`popen`" +" or :func:`fdopen`, or :data:`sys.stdin`, use its :meth:`~file.read` or " +":meth:`~file.readline` methods." +msgstr "" +"该功能适用于低级 I/O 操作,必须用于 :func:`os.open` 或 :func:`pipe` 返回的文件描述符。若要读取由内建函数 " +":func:`open`、:func:`popen`、:func:`fdopen` 或 :data:`sys.stdin` 返回的 " +"\"文件对象\",则应使用其相应的 :meth:`~file.read` 或 :meth:`~file.readline` 方法。" + +#: ../../library/os.rst:1283 +msgid "" +"Copy *count* bytes from file descriptor *in_fd* to file descriptor *out_fd* " +"starting at *offset*. Return the number of bytes sent. When EOF is reached " +"return ``0``." +msgstr "" +"将文件描述符 *in_fd* 中的 *count* 字节复制到文件描述符 *out_fd* 的偏移位置 *offset* 处。返回复制的字节数,如果到达" +" EOF,返回 ``0``。" + +#: ../../library/os.rst:1287 +msgid "" +"The first function notation is supported by all platforms that define " +":func:`sendfile`." +msgstr "定义了 :func:`sendfile` 的所有平台均支持第一种函数用法。" + +#: ../../library/os.rst:1290 +msgid "" +"On Linux, if *offset* is given as ``None``, the bytes are read from the " +"current position of *in_fd* and the position of *in_fd* is updated." +msgstr "" +"在 Linux 上,将 *offset* 设置为 ``None``,则从 *in_fd* 的当前位置开始读取,并更新 *in_fd* 的位置。" + +#: ../../library/os.rst:1293 +msgid "" +"The second case may be used on macOS and FreeBSD where *headers* and " +"*trailers* are arbitrary sequences of buffers that are written before and " +"after the data from *in_fd* is written. It returns the same as the first " +"case." +msgstr "" +"第二种情况可以被用于 macOS 和 FreeBSD,其中 *headers* 和 *trailers* 是任意的缓冲区序列,它们会在写入来自 " +"*in_fd* 的数据之前被写入。 它的返回内容与第一种情况相同。" + +#: ../../library/os.rst:1297 +msgid "" +"On macOS and FreeBSD, a value of ``0`` for *count* specifies to send until " +"the end of *in_fd* is reached." +msgstr "在 macOS 和 FreeBSD 上,传入 ``0`` 值作为 *count* 将指定持续发送直至到达 *in_fd* 的末尾。" + +#: ../../library/os.rst:1300 +msgid "" +"All platforms support sockets as *out_fd* file descriptor, and some " +"platforms allow other types (e.g. regular file, pipe) as well." +msgstr "所有平台都支持将套接字作为 *out_fd* 文件描述符,有些平台也支持其他类型(如常规文件或管道)。" + +#: ../../library/os.rst:1303 +msgid "" +"Cross-platform applications should not use *headers*, *trailers* and *flags*" +" arguments." +msgstr "跨平台应用程序不应使用 *headers*、*trailers* 和 *flags* 参数。" + +#: ../../library/os.rst:1310 +msgid "" +"For a higher-level wrapper of :func:`sendfile`, see " +":meth:`socket.socket.sendfile`." +msgstr "有关 :func:`sendfile` 的高级封装,参见 :meth:`socket.socket.sendfile`。" + +#: ../../library/os.rst:1315 +msgid "Parameters *out* and *in* was renamed to *out_fd* and *in_fd*." +msgstr "*out* 和 *in* 参数被重命名为 *out_fd* 和 *in_fd*。" + +#: ../../library/os.rst:1321 +msgid "" +"Set the blocking mode of the specified file descriptor. Set the " +":data:`O_NONBLOCK` flag if blocking is ``False``, clear the flag otherwise." +msgstr "" +"设置指定文件描述符的阻塞模式:如果 blocking 为 ``False``,则为该描述符设置 :data:`O_NONBLOCK` " +"标志位,反之则清除该标志位。" + +#: ../../library/os.rst:1324 +msgid "See also :func:`get_blocking` and :meth:`socket.socket.setblocking`." +msgstr "参见 :func:`get_blocking` 和 :meth:`socket.socket.setblocking`。" + +#: ../../library/os.rst:1335 +msgid "" +"Parameters to the :func:`sendfile` function, if the implementation supports " +"them." +msgstr ":func:`sendfile` 函数的参数(假设当前实现支持这些参数)。" + +#: ../../library/os.rst:1345 +msgid "" +"Read from a file descriptor *fd* into a number of mutable :term:`bytes-like " +"objects ` *buffers*. Transfer data into each buffer until" +" it is full and then move on to the next buffer in the sequence to hold the " +"rest of the data." +msgstr "" +"从文件描述符 *fd* 将数据读取至多个可变的 :term:`字节类对象 ` 缓冲区 *buffers* " +"中。将数据依次存放到每个缓冲区中,填满一个后继续存放到序列中的下一个缓冲区,来保存其余数据。" + +#: ../../library/os.rst:1363 +msgid "" +"Return the process group associated with the terminal given by *fd* (an open" +" file descriptor as returned by :func:`os.open`)." +msgstr "返回与 *fd* 指定的终端相关联的进程组(*fd* 是由 :func:`os.open` 返回的已打开的文件描述符)。" + +#: ../../library/os.rst:1371 +msgid "" +"Set the process group associated with the terminal given by *fd* (an open " +"file descriptor as returned by :func:`os.open`) to *pg*." +msgstr "设置与 *fd* 指定的终端相关联的进程组为 *pg*(*fd* 是由 :func:`os.open` 返回的已打开的文件描述符)。" + +#: ../../library/os.rst:1379 +msgid "" +"Return a string which specifies the terminal device associated with file " +"descriptor *fd*. If *fd* is not associated with a terminal device, an " +"exception is raised." +msgstr "返回一个字符串,该字符串表示与文件描述符 *fd* 关联的终端。如果 *fd* 没有与终端关联,则抛出异常。" + +#: ../../library/os.rst:1388 +msgid "Write the bytestring in *str* to file descriptor *fd*." +msgstr "将 *str* 中的字节串 (bytestring) 写入文件描述符 *fd*。" + +#: ../../library/os.rst:1394 +msgid "" +"This function is intended for low-level I/O and must be applied to a file " +"descriptor as returned by :func:`os.open` or :func:`pipe`. To write a " +"\"file object\" returned by the built-in function :func:`open` or by " +":func:`popen` or :func:`fdopen`, or :data:`sys.stdout` or " +":data:`sys.stderr`, use its :meth:`~file.write` method." +msgstr "" +"该功能适用于低级 I/O 操作,必须用于 :func:`os.open` 或 :func:`pipe` 返回的文件描述符。若要写入由内建函数 " +":func:`open`、:func:`popen`、:func:`fdopen`、:data:`sys.stdout` 或 " +":data:`sys.stderr` 返回的 \"文件对象\",则应使用其相应的 :meth:`~file.write` 方法。" + +#: ../../library/os.rst:1408 +msgid "" +"Write the contents of *buffers* to file descriptor *fd*. *buffers* must be a" +" sequence of :term:`bytes-like objects `. Buffers are " +"processed in array order. Entire contents of the first buffer is written " +"before proceeding to the second, and so on." +msgstr "" +"将缓冲区 *buffers* 的内容写入文件描述符 *fd*。缓冲区 *buffers* 必须是由 :term:`字节类对象 ` 组成的序列。缓冲区以数组顺序处理。先写入第一个缓冲区的全部内容,再写入第二个缓冲区,照此继续。" + +#: ../../library/os.rst:1413 +msgid "Returns the total number of bytes actually written." +msgstr "返回实际写入的字节总数。" + +#: ../../library/os.rst:1426 +msgid "Querying the size of a terminal" +msgstr "查询终端的尺寸" + +#: ../../library/os.rst:1432 +msgid "" +"Return the size of the terminal window as ``(columns, lines)``, tuple of " +"type :class:`terminal_size`." +msgstr "返回终端窗口的尺寸,格式为 ``(columns, lines)``,它是类型为 :class:`terminal_size` 的元组。" + +#: ../../library/os.rst:1435 +msgid "" +"The optional argument ``fd`` (default ``STDOUT_FILENO``, or standard output)" +" specifies which file descriptor should be queried." +msgstr "可选参数 ``fd`` (默认为 ``STDOUT_FILENO`` 或标准输出)指定应查询的文件描述符。" + +#: ../../library/os.rst:1438 +msgid "" +"If the file descriptor is not connected to a terminal, an :exc:`OSError` is " +"raised." +msgstr "如果文件描述符未连接到终端,则抛出 :exc:`OSError` 异常。" + +#: ../../library/os.rst:1441 +msgid "" +":func:`shutil.get_terminal_size` is the high-level function which should " +"normally be used, ``os.get_terminal_size`` is the low-level implementation." +msgstr "" +":func:`shutil.get_terminal_size` 是供常规使用的高阶函数,``os.get_terminal_size`` " +"是其底层的实现。" + +#: ../../library/os.rst:1449 +msgid "" +"A subclass of tuple, holding ``(columns, lines)`` of the terminal window " +"size." +msgstr "元组的子类,存储终端窗口尺寸 ``(columns, lines)``。" + +#: ../../library/os.rst:1453 +msgid "Width of the terminal window in characters." +msgstr "终端窗口的宽度,单位为字符。" + +#: ../../library/os.rst:1457 +msgid "Height of the terminal window in characters." +msgstr "终端窗口的高度,单位为字符。" + +#: ../../library/os.rst:1463 +msgid "Inheritance of File Descriptors" +msgstr "文件描述符的继承" + +#: ../../library/os.rst:1467 +msgid "" +"A file descriptor has an \"inheritable\" flag which indicates if the file " +"descriptor can be inherited by child processes. Since Python 3.4, file " +"descriptors created by Python are non-inheritable by default." +msgstr "" +"每个文件描述符都有一个 \"inheritable\"(可继承)标志位,该标志位控制了文件描述符是否可以由子进程继承。从 Python 3.4 开始,由" +" Python 创建的文件描述符默认是不可继承的。" + +#: ../../library/os.rst:1471 +msgid "" +"On UNIX, non-inheritable file descriptors are closed in child processes at " +"the execution of a new program, other file descriptors are inherited." +msgstr "在 UNIX 上,执行新程序时,不可继承的文件描述符在子进程中是关闭的,其他文件描述符将被继承。" + +#: ../../library/os.rst:1474 +msgid "" +"On Windows, non-inheritable handles and file descriptors are closed in child" +" processes, except for standard streams (file descriptors 0, 1 and 2: stdin," +" stdout and stderr), which are always inherited. Using :func:`spawn\\* " +"` functions, all inheritable handles and all inheritable file " +"descriptors are inherited. Using the :mod:`subprocess` module, all file " +"descriptors except standard streams are closed, and inheritable handles are " +"only inherited if the *close_fds* parameter is ``False``." +msgstr "" +"在 Windows 上,不可继承的句柄和文件描述符在子进程中是关闭的,但标准流(文件描述符 0、1 和 2 " +"即标准输入、标准输出和标准错误)是始终继承的。如果使用 :func:`spawn\\* ` " +"函数,所有可继承的句柄和文件描述符都将被继承。如果使用 :mod:`subprocess` 模块,将关闭除标准流以外的所有文件描述符,并且仅当 " +"*close_fds* 参数为 ``False`` 时才继承可继承的句柄。" + +#: ../../library/os.rst:1484 +msgid "Get the \"inheritable\" flag of the specified file descriptor (a boolean)." +msgstr "获取指定文件描述符的“可继承”标志位(为布尔值)。" + +#: ../../library/os.rst:1488 +msgid "Set the \"inheritable\" flag of the specified file descriptor." +msgstr "设置指定文件描述符的“可继承”标志位。" + +#: ../../library/os.rst:1492 +msgid "Get the \"inheritable\" flag of the specified handle (a boolean)." +msgstr "获取指定句柄的“可继承”标志位(为布尔值)。" + +#: ../../library/os.rst:1494 ../../library/os.rst:1500 +#: ../../library/os.rst:3350 ../../library/os.rst:3946 +#: ../../library/os.rst:3977 +msgid ":ref:`Availability `: Windows." +msgstr ":ref:`可用性 `: Windows。" + +#: ../../library/os.rst:1498 +msgid "Set the \"inheritable\" flag of the specified handle." +msgstr "设置指定句柄的“可继承”标志位。" + +#: ../../library/os.rst:1506 +msgid "Files and Directories" +msgstr "文件和目录" + +#: ../../library/os.rst:1508 +msgid "" +"On some Unix platforms, many of these functions support one or more of these" +" features:" +msgstr "在某些 Unix 平台上,许多函数支持以下一项或多项功能:" + +#: ../../library/os.rst:1513 +msgid "" +"**specifying a file descriptor:** Normally the *path* argument provided to " +"functions in the :mod:`os` module must be a string specifying a file path. " +"However, some functions now alternatively accept an open file descriptor for" +" their *path* argument. The function will then operate on the file referred " +"to by the descriptor. (For POSIX systems, Python will call the variant of " +"the function prefixed with ``f`` (e.g. call ``fchdir`` instead of " +"``chdir``).)" +msgstr "" +"**指定文件描述符为参数:** 通常在 :mod:`os` 模块中提供给函数的 *path* " +"参数必须是表示文件路径的字符串,但是,某些函数现在可以接受其 *path* 参数为打开文件描述符,该函数将对描述符指向的文件进行操作。(对于 POSIX" +" 系统,Python 将调用以 ``f`` 开头的函数变体(如调用 ``fchdir`` 而不是 ``chdir``)。)" + +#: ../../library/os.rst:1521 +msgid "" +"You can check whether or not *path* can be specified as a file descriptor " +"for a particular function on your platform using :data:`os.supports_fd`. If " +"this functionality is unavailable, using it will raise a " +":exc:`NotImplementedError`." +msgstr "" +"可以用 :data:`os.supports_fd` 检查某个函数在你的平台上是否支持将 *path* " +"参数指定为文件描述符。如果不支持,使用该功能将抛出 :exc:`NotImplementedError` 异常。" + +#: ../../library/os.rst:1526 +msgid "" +"If the function also supports *dir_fd* or *follow_symlinks* arguments, it's " +"an error to specify one of those when supplying *path* as a file descriptor." +msgstr "" +"如果该函数还支持 *dir_fd* 或 *follow_symlinks* 参数,那么用文件描述符作为 *path* 后就不能再指定上述参数了。" + +#: ../../library/os.rst:1531 +msgid "" +"**paths relative to directory descriptors:** If *dir_fd* is not ``None``, it" +" should be a file descriptor referring to a directory, and the path to " +"operate on should be relative; path will then be relative to that directory." +" If the path is absolute, *dir_fd* is ignored. (For POSIX systems, Python " +"will call the variant of the function with an ``at`` suffix and possibly " +"prefixed with ``f`` (e.g. call ``faccessat`` instead of ``access``)." +msgstr "" +"**基于目录描述符的相对路径:** 如果 *dir_fd* 不是 ``None``,它就应该是一个指向目录的文件描述符,这时待操作的 path " +"应该是相对路径,相对路径是相对于前述目录的。如果 path 是绝对路径,则 *dir_fd* 将被忽略。(对于 POSIX 系统,Python " +"将调用该函数的变体,变体以 ``at`` 结尾,可能以 ``f`` 开头(如调用 ``faccessat`` 而不是 ``access``)。" + +#: ../../library/os.rst:1538 +msgid "" +"You can check whether or not *dir_fd* is supported for a particular function" +" on your platform using :data:`os.supports_dir_fd`. If it's unavailable, " +"using it will raise a :exc:`NotImplementedError`." +msgstr "" +"可以用 :data:`os.supports_dir_fd` 检查某个函数在你的平台上是否支持 *dir_fd*。如果不支持,使用该功能将抛出 " +":exc:`NotImplementedError` 异常。" + +#: ../../library/os.rst:1544 +msgid "" +"**not following symlinks:** If *follow_symlinks* is ``False``, and the last " +"element of the path to operate on is a symbolic link, the function will " +"operate on the symbolic link itself rather than the file pointed to by the " +"link. (For POSIX systems, Python will call the ``l...`` variant of the " +"function.)" +msgstr "" +"**不跟踪符号链接:** 如果 *follow_symlinks* 为 " +"``False``,并且待操作路径的最后一个元素是符号链接,则该函数将在符号链接本身而不是链接所指向的文件上操作。(对于 POSIX 系统,Python" +" 将调用该函数的 ``l...`` 变体。)" + +#: ../../library/os.rst:1550 +msgid "" +"You can check whether or not *follow_symlinks* is supported for a particular" +" function on your platform using :data:`os.supports_follow_symlinks`. If " +"it's unavailable, using it will raise a :exc:`NotImplementedError`." +msgstr "" +"可以用 :data:`os.supports_follow_symlinks` 检查某个函数在你的平台上是否支持 " +"*follow_symlinks*。如果不支持,使用该功能将抛出 :exc:`NotImplementedError` 异常。" + +#: ../../library/os.rst:1558 +msgid "" +"Use the real uid/gid to test for access to *path*. Note that most " +"operations will use the effective uid/gid, therefore this routine can be " +"used in a suid/sgid environment to test if the invoking user has the " +"specified access to *path*. *mode* should be :const:`F_OK` to test the " +"existence of *path*, or it can be the inclusive OR of one or more of " +":const:`R_OK`, :const:`W_OK`, and :const:`X_OK` to test permissions. Return" +" :const:`True` if access is allowed, :const:`False` if not. See the Unix man" +" page :manpage:`access(2)` for more information." +msgstr "" +"使用 实际用户ID/用户组ID 测试对 *path* 的访问。请注意,大多数测试操作将使用 有效用户ID/用户组ID,因此可以在 suid/sgid " +"环境中运用此例程,来测试调用用户是否具有对 *path* 的指定访问权限。*mode* 为 :const:`F_OK` 时用于测试 *path* " +"是否存在,也可以对 :const:`R_OK`、:const:`W_OK` 和 :const:`X_OK` " +"中的一个或多个进行“或”运算来测试指定权限。允许访问则返回 :const:`True`,否则返回 :const:`False`。更多信息请参见 Unix" +" 手册页 :manpage:`access(2)`。" + +#: ../../library/os.rst:1567 +msgid "" +"This function can support specifying :ref:`paths relative to directory " +"descriptors ` and :ref:`not following symlinks `." +msgstr "" +"本函数支持指定 :ref:`基于目录描述符的相对路径 ` 和 :ref:`不跟踪符号链接 `。" + +#: ../../library/os.rst:1570 +msgid "" +"If *effective_ids* is ``True``, :func:`access` will perform its access " +"checks using the effective uid/gid instead of the real uid/gid. " +"*effective_ids* may not be supported on your platform; you can check whether" +" or not it is available using :data:`os.supports_effective_ids`. If it is " +"unavailable, using it will raise a :exc:`NotImplementedError`." +msgstr "" +"如果 *effective_ids* 为 ``True``,:func:`access` 将使用 有效用户ID/用户组ID 而非 " +"实际用户ID/用户组ID 进行访问检查。您的平台可能不支持 *effective_ids*,您可以使用 " +":data:`os.supports_effective_ids` 检查它是否可用。如果不可用,使用它时会抛出 " +":exc:`NotImplementedError` 异常。" + +#: ../../library/os.rst:1578 +msgid "" +"Using :func:`access` to check if a user is authorized to e.g. open a file " +"before actually doing so using :func:`open` creates a security hole, because" +" the user might exploit the short time interval between checking and opening" +" the file to manipulate it. It's preferable to use :term:`EAFP` techniques. " +"For example::" +msgstr "" +"使用 :func:`access` 来检查用户是否具有某项权限(如打开文件的权限),然后再使用 :func:`open` " +"打开文件,这样做存在一个安全漏洞,因为用户可能会在检查和打开文件之间的时间里做其他操作。推荐使用 :term:`EAFP` 技术。如::" + +#: ../../library/os.rst:1589 +msgid "is better written as::" +msgstr "最好写成::" + +#: ../../library/os.rst:1601 +msgid "" +"I/O operations may fail even when :func:`access` indicates that they would " +"succeed, particularly for operations on network filesystems which may have " +"permissions semantics beyond the usual POSIX permission-bit model." +msgstr "" +"即使 :func:`access` 指示 I/O 操作会成功,但实际操作仍可能失败,尤其是对网络文件系统的操作,其权限语义可能超出常规的 POSIX " +"权限位模型。" + +#: ../../library/os.rst:1605 +msgid "Added the *dir_fd*, *effective_ids*, and *follow_symlinks* parameters." +msgstr "添加 *dir_fd*、*effective_ids* 和 *follow_symlinks* 参数。" + +#: ../../library/os.rst:1617 +msgid "" +"Values to pass as the *mode* parameter of :func:`access` to test the " +"existence, readability, writability and executability of *path*, " +"respectively." +msgstr "作为 :func:`access` 的 *mode* 参数的可选值,分别测试 *path* 的存在性、可读性、可写性和可执行性。" + +#: ../../library/os.rst:1626 +msgid "Change the current working directory to *path*." +msgstr "将当前工作目录更改为 *path*。" + +#: ../../library/os.rst:1628 +msgid "" +"This function can support :ref:`specifying a file descriptor `. " +"The descriptor must refer to an opened directory, not an open file." +msgstr "本函数支持 :ref:`指定文件描述符为参数 `。其中,描述符必须指向打开的目录,不能是打开的文件。" + +#: ../../library/os.rst:1631 +msgid "" +"This function can raise :exc:`OSError` and subclasses such as " +":exc:`FileNotFoundError`, :exc:`PermissionError`, and " +":exc:`NotADirectoryError`." +msgstr "" +"本函数可以抛出 :exc:`OSError` 及其子类的异常,如 " +":exc:`FileNotFoundError`、:exc:`PermissionError` 和 :exc:`NotADirectoryError` " +"异常。" + +#: ../../library/os.rst:1634 ../../library/os.rst:1761 +msgid "" +"Raises an :ref:`auditing event ` ``os.chdir`` with argument " +"``path``." +msgstr "引发一个 :ref:`审计事件 ` ``os.chdir`` 并附带参数 ``path``。" + +#: ../../library/os.rst:1636 +msgid "" +"Added support for specifying *path* as a file descriptor on some platforms." +msgstr "在某些平台上新增支持将 *path* 参数指定为文件描述符。" + +#: ../../library/os.rst:1646 +msgid "" +"Set the flags of *path* to the numeric *flags*. *flags* may take a " +"combination (bitwise OR) of the following values (as defined in the " +":mod:`stat` module):" +msgstr "" +"将 *path* 的 flags 设置为其他由数字表示的 *flags*。*flags* 可以用以下值按位或组合起来(以下值在 :mod:`stat` " +"模块中定义):" + +#: ../../library/os.rst:1649 +msgid ":data:`stat.UF_NODUMP`" +msgstr ":data:`stat.UF_NODUMP`" + +#: ../../library/os.rst:1650 +msgid ":data:`stat.UF_IMMUTABLE`" +msgstr ":data:`stat.UF_IMMUTABLE`" + +#: ../../library/os.rst:1651 +msgid ":data:`stat.UF_APPEND`" +msgstr ":data:`stat.UF_APPEND`" + +#: ../../library/os.rst:1652 +msgid ":data:`stat.UF_OPAQUE`" +msgstr ":data:`stat.UF_OPAQUE`" + +#: ../../library/os.rst:1653 +msgid ":data:`stat.UF_NOUNLINK`" +msgstr ":data:`stat.UF_NOUNLINK`" + +#: ../../library/os.rst:1654 +msgid ":data:`stat.UF_COMPRESSED`" +msgstr ":data:`stat.UF_COMPRESSED`" + +#: ../../library/os.rst:1655 +msgid ":data:`stat.UF_HIDDEN`" +msgstr ":data:`stat.UF_HIDDEN`" + +#: ../../library/os.rst:1656 +msgid ":data:`stat.SF_ARCHIVED`" +msgstr ":data:`stat.SF_ARCHIVED`" + +#: ../../library/os.rst:1657 +msgid ":data:`stat.SF_IMMUTABLE`" +msgstr ":data:`stat.SF_IMMUTABLE`" + +#: ../../library/os.rst:1658 +msgid ":data:`stat.SF_APPEND`" +msgstr ":data:`stat.SF_APPEND`" + +#: ../../library/os.rst:1659 +msgid ":data:`stat.SF_NOUNLINK`" +msgstr ":data:`stat.SF_NOUNLINK`" + +#: ../../library/os.rst:1660 +msgid ":data:`stat.SF_SNAPSHOT`" +msgstr ":data:`stat.SF_SNAPSHOT`" + +#: ../../library/os.rst:1662 +msgid "" +"This function can support :ref:`not following symlinks `." +msgstr "本函数支持 :ref:`不跟踪符号链接 `。" + +#: ../../library/os.rst:1664 ../../library/os.rst:1787 +msgid "" +"Raises an :ref:`auditing event ` ``os.chflags`` with arguments " +"``path``, ``flags``." +msgstr "引发一个 :ref:`审计事件 ` ``os.chflags`` 并附带参数 ``path``, ``flags``。" + +#: ../../library/os.rst:1668 +msgid "The *follow_symlinks* argument." +msgstr "*follow_symlinks* 参数。" + +#: ../../library/os.rst:1677 +msgid "" +"Change the mode of *path* to the numeric *mode*. *mode* may take one of the " +"following values (as defined in the :mod:`stat` module) or bitwise ORed " +"combinations of them:" +msgstr "" +"将 *path* 的 mode 更改为其他由数字表示的 *mode*。*mode* 可以用以下值之一,也可以将它们按位或组合起来(以下值在 " +":mod:`stat` 模块中定义):" + +#: ../../library/os.rst:1681 +msgid ":data:`stat.S_ISUID`" +msgstr ":data:`stat.S_ISUID`" + +#: ../../library/os.rst:1682 +msgid ":data:`stat.S_ISGID`" +msgstr ":data:`stat.S_ISGID`" + +#: ../../library/os.rst:1683 +msgid ":data:`stat.S_ENFMT`" +msgstr ":data:`stat.S_ENFMT`" + +#: ../../library/os.rst:1684 +msgid ":data:`stat.S_ISVTX`" +msgstr ":data:`stat.S_ISVTX`" + +#: ../../library/os.rst:1685 +msgid ":data:`stat.S_IREAD`" +msgstr ":data:`stat.S_IREAD`" + +#: ../../library/os.rst:1686 +msgid ":data:`stat.S_IWRITE`" +msgstr ":data:`stat.S_IWRITE`" + +#: ../../library/os.rst:1687 +msgid ":data:`stat.S_IEXEC`" +msgstr ":data:`stat.S_IEXEC`" + +#: ../../library/os.rst:1688 +msgid ":data:`stat.S_IRWXU`" +msgstr ":data:`stat.S_IRWXU`" + +#: ../../library/os.rst:1689 +msgid ":data:`stat.S_IRUSR`" +msgstr ":data:`stat.S_IRUSR`" + +#: ../../library/os.rst:1690 +msgid ":data:`stat.S_IWUSR`" +msgstr ":data:`stat.S_IWUSR`" + +#: ../../library/os.rst:1691 +msgid ":data:`stat.S_IXUSR`" +msgstr ":data:`stat.S_IXUSR`" + +#: ../../library/os.rst:1692 +msgid ":data:`stat.S_IRWXG`" +msgstr ":data:`stat.S_IRWXG`" + +#: ../../library/os.rst:1693 +msgid ":data:`stat.S_IRGRP`" +msgstr ":data:`stat.S_IRGRP`" + +#: ../../library/os.rst:1694 +msgid ":data:`stat.S_IWGRP`" +msgstr ":data:`stat.S_IWGRP`" + +#: ../../library/os.rst:1695 +msgid ":data:`stat.S_IXGRP`" +msgstr ":data:`stat.S_IXGRP`" + +#: ../../library/os.rst:1696 +msgid ":data:`stat.S_IRWXO`" +msgstr ":data:`stat.S_IRWXO`" + +#: ../../library/os.rst:1697 +msgid ":data:`stat.S_IROTH`" +msgstr ":data:`stat.S_IROTH`" + +#: ../../library/os.rst:1698 +msgid ":data:`stat.S_IWOTH`" +msgstr ":data:`stat.S_IWOTH`" + +#: ../../library/os.rst:1699 +msgid ":data:`stat.S_IXOTH`" +msgstr ":data:`stat.S_IXOTH`" + +#: ../../library/os.rst:1701 ../../library/os.rst:1726 +#: ../../library/os.rst:2988 +msgid "" +"This function can support :ref:`specifying a file descriptor `, " +":ref:`paths relative to directory descriptors ` and :ref:`not " +"following symlinks `." +msgstr "" +"本函数支持 :ref:`指定文件描述符 `、:ref:`指定基于目录描述符的相对路径 ` 和 " +":ref:`不跟踪符号链接 `。" + +#: ../../library/os.rst:1707 +msgid "" +"Although Windows supports :func:`chmod`, you can only set the file's read-" +"only flag with it (via the ``stat.S_IWRITE`` and ``stat.S_IREAD`` constants " +"or a corresponding integer value). All other bits are ignored." +msgstr "" +"尽管 Windows 支持 :func:`chmod`,但只能用它设置文件的只读标志(``stat.S_IWRITE`` 和 " +"``stat.S_IREAD`` 常量或对应的整数值)。所有其他标志位都会被忽略。" + +#: ../../library/os.rst:1713 ../../library/os.rst:1737 +msgid "" +"Added support for specifying *path* as an open file descriptor, and the " +"*dir_fd* and *follow_symlinks* arguments." +msgstr "添加了指定 *path* 为文件描述符的支持,以及 *dir_fd* 和 *follow_symlinks* 参数。" + +#: ../../library/os.rst:1723 +msgid "" +"Change the owner and group id of *path* to the numeric *uid* and *gid*. To " +"leave one of the ids unchanged, set it to -1." +msgstr "将 *path* 的用户和组 ID 分别修改为数字形式的 *uid* 和 *gid*。若要使其中某个 ID 保持不变,请将其置为 -1。" + +#: ../../library/os.rst:1730 +msgid "" +"See :func:`shutil.chown` for a higher-level function that accepts names in " +"addition to numeric ids." +msgstr "参见更高阶的函数 :func:`shutil.chown`,除了数字 ID 之外,它也接受名称。" + +#: ../../library/os.rst:1741 +msgid "Supports a :term:`path-like object`." +msgstr "支持 :term:`类路径对象 `。" + +#: ../../library/os.rst:1747 +msgid "Change the root directory of the current process to *path*." +msgstr "将当前进程的根目录更改为 *path*。" + +#: ../../library/os.rst:1757 +msgid "" +"Change the current working directory to the directory represented by the " +"file descriptor *fd*. The descriptor must refer to an opened directory, not" +" an open file. As of Python 3.3, this is equivalent to ``os.chdir(fd)``." +msgstr "" +"将当前工作目录更改为文件描述符 *fd* 指向的目录。fd 必须指向打开的目录而非文件。从 Python 3.3 开始,它等效于 " +"``os.chdir(fd)``。" + +#: ../../library/os.rst:1768 +msgid "Return a string representing the current working directory." +msgstr "返回表示当前工作目录的字符串。" + +#: ../../library/os.rst:1773 +msgid "Return a bytestring representing the current working directory." +msgstr "返回表示当前工作目录的字节串 (bytestring)。" + +#: ../../library/os.rst:1775 +msgid "" +"The function now uses the UTF-8 encoding on Windows, rather than the ANSI " +"code page: see :pep:`529` for the rationale. The function is no longer " +"deprecated on Windows." +msgstr "" +"在 Windows 上,本函数现在会使用 UTF-8 编码格式而不是 ANSI 代码页:请参看 :pep:`529` 了解具体原因。 该函数在 " +"Windows 上不再被弃用。" + +#: ../../library/os.rst:1783 +msgid "" +"Set the flags of *path* to the numeric *flags*, like :func:`chflags`, but do" +" not follow symbolic links. As of Python 3.3, this is equivalent to " +"``os.chflags(path, flags, follow_symlinks=False)``." +msgstr "" +"将 *path* 的 flags 设置为其他由数字表示的 *flags*,与 :func:`chflags` 类似,但不跟踪符号链接。从 Python " +"3.3 开始,它等效于 ``os.chflags(path, flags, follow_symlinks=False)``。" + +#: ../../library/os.rst:1797 +msgid "" +"Change the mode of *path* to the numeric *mode*. If path is a symlink, this " +"affects the symlink rather than the target. See the docs for :func:`chmod` " +"for possible values of *mode*. As of Python 3.3, this is equivalent to " +"``os.chmod(path, mode, follow_symlinks=False)``." +msgstr "" +"将 *path* 的权限状态修改为 *mode*。如果 path 是符号链接,则影响符号链接本身而非链接目标。可以参考 :func:`chmod` " +"中列出 *mode* 的可用值。从 Python 3.3 开始,它等效于 ``os.chmod(path, mode, " +"follow_symlinks=False)``。" + +#: ../../library/os.rst:1811 +msgid "" +"Change the owner and group id of *path* to the numeric *uid* and *gid*. " +"This function will not follow symbolic links. As of Python 3.3, this is " +"equivalent to ``os.chown(path, uid, gid, follow_symlinks=False)``." +msgstr "" +"将 *path* 的用户和组 ID 分别修改为数字形式的 *uid* 和 *gid*,本函数不跟踪符号链接。从 Python 3.3 开始,它等效于 " +"``os.chown(path, uid, gid, follow_symlinks=False)``。" + +#: ../../library/os.rst:1825 +msgid "Create a hard link pointing to *src* named *dst*." +msgstr "创建一个指向 *src* 的硬链接,名为 *dst*。" + +#: ../../library/os.rst:1827 +msgid "" +"This function can support specifying *src_dir_fd* and/or *dst_dir_fd* to " +"supply :ref:`paths relative to directory descriptors `, and " +":ref:`not following symlinks `." +msgstr "" +"本函数支持将 *src_dir_fd* 和 *dst_dir_fd* 中的一个或两个指定为 :ref:`基于目录描述符的相对路径 " +"`,支持 :ref:`不跟踪符号链接 `。" + +#: ../../library/os.rst:1831 +msgid "" +"Raises an :ref:`auditing event ` ``os.link`` with arguments " +"``src``, ``dst``, ``src_dir_fd``, ``dst_dir_fd``." +msgstr "" +"引发一个 :ref:`审计事件 ` ``os.link`` 并附带参数 " +"``src``、``dst``、``src_dir_fd``、``dst_dir_fd``。" + +#: ../../library/os.rst:1835 +msgid "Added Windows support." +msgstr "添加了对 Windows 的支持。" + +#: ../../library/os.rst:1838 +msgid "Added the *src_dir_fd*, *dst_dir_fd*, and *follow_symlinks* arguments." +msgstr "添加 *src_dir_fd*、*dst_dir_fd* 和 *follow_symlinks* 参数。" + +#: ../../library/os.rst:1841 ../../library/os.rst:2201 +#: ../../library/os.rst:2238 ../../library/os.rst:2910 +msgid "Accepts a :term:`path-like object` for *src* and *dst*." +msgstr "接受一个 :term:`类路径对象 ` 作为 *src* 和 *dst*。" + +#: ../../library/os.rst:1847 +msgid "" +"Return a list containing the names of the entries in the directory given by " +"*path*. The list is in arbitrary order, and does not include the special " +"entries ``'.'`` and ``'..'`` even if they are present in the directory. If a" +" file is removed from or added to the directory during the call of this " +"function, whether a name for that file be included is unspecified." +msgstr "" +"返回一个包含由 *path* 指定目录中条目名称组成的列表。 该列表按任意顺序排列,并且不包括特殊条目 ``'.'`` 和 " +"``'..'``,即使它们存在于目录中。 如果有文件在调用此函数期间在被移除或添加到目录中,是否要包括该文件的名称并没有规定。" + +#: ../../library/os.rst:1853 +msgid "" +"*path* may be a :term:`path-like object`. If *path* is of type ``bytes`` " +"(directly or indirectly through the :class:`PathLike` interface), the " +"filenames returned will also be of type ``bytes``; in all other " +"circumstances, they will be of type ``str``." +msgstr "" +"*path* 可以是 :term:`类路径对象 `。如果 *path* 是(直接传入或通过 " +":class:`PathLike` 接口间接传入) ``bytes`` 类型,则返回的文件名也将是 ``bytes`` 类型,其他情况下是 " +"``str`` 类型。" + +#: ../../library/os.rst:1858 ../../library/os.rst:2286 +msgid "" +"This function can also support :ref:`specifying a file descriptor " +"`; the file descriptor must refer to a directory." +msgstr "本函数也支持 :ref:`指定文件描述符为参数 `,其中描述符必须指向目录。" + +#: ../../library/os.rst:1861 +msgid "" +"Raises an :ref:`auditing event ` ``os.listdir`` with argument " +"``path``." +msgstr "引发一个 :ref:`审计事件 ` ``os.listdir`` 并附带参数 ``path``。" + +#: ../../library/os.rst:1864 +msgid "To encode ``str`` filenames to ``bytes``, use :func:`~os.fsencode`." +msgstr "要将 ``str`` 类型的文件名编码为 ``bytes``,请使用 :func:`~os.fsencode`。" + +#: ../../library/os.rst:1868 +msgid "" +"The :func:`scandir` function returns directory entries along with file " +"attribute information, giving better performance for many common use cases." +msgstr ":func:`scandir` 函数返回目录内文件名的同时,也返回文件属性信息,它在某些具体情况下能提供更好的性能。" + +#: ../../library/os.rst:1872 +msgid "The *path* parameter became optional." +msgstr "*path* 变为可选参数。" + +#: ../../library/os.rst:1875 ../../library/os.rst:2772 +msgid "Added support for specifying *path* as an open file descriptor." +msgstr "新增支持将 *path* 参数指定为打开的文件描述符。" + +#: ../../library/os.rst:1884 +msgid "" +"Perform the equivalent of an :c:func:`lstat` system call on the given path. " +"Similar to :func:`~os.stat`, but does not follow symbolic links. Return a " +":class:`stat_result` object." +msgstr "" +"在给定路径上执行本函数,其操作相当于 :c:func:`lstat` 系统调用,类似于 :func:`~os.stat` 但不跟踪符号链接。返回值是 " +":class:`stat_result` 对象。" + +#: ../../library/os.rst:1888 +msgid "" +"On platforms that do not support symbolic links, this is an alias for " +":func:`~os.stat`." +msgstr "在不支持符号链接的平台上,本函数是 :func:`~os.stat` 的别名。" + +#: ../../library/os.rst:1891 +msgid "" +"As of Python 3.3, this is equivalent to ``os.stat(path, dir_fd=dir_fd, " +"follow_symlinks=False)``." +msgstr "" +"从 Python 3.3 起,此功能等价于 ``os.stat(path, dir_fd=dir_fd, " +"follow_symlinks=False)``。" + +#: ../../library/os.rst:1894 ../../library/os.rst:1936 +#: ../../library/os.rst:2004 ../../library/os.rst:2032 +#: ../../library/os.rst:2106 +msgid "" +"This function can also support :ref:`paths relative to directory descriptors" +" `." +msgstr "本函数支持 :ref:`基于目录描述符的相对路径 `。" + +#: ../../library/os.rst:1901 ../../library/os.rst:2115 +#: ../../library/os.rst:2903 +msgid "Added support for Windows 6.0 (Vista) symbolic links." +msgstr "添加对 Windows 6.0 (Vista) 符号链接的支持。" + +#: ../../library/os.rst:1904 +msgid "Added the *dir_fd* parameter." +msgstr "添加了 *dir_fd* 参数。" + +#: ../../library/os.rst:1910 +msgid "" +"On Windows, now opens reparse points that represent another path (name " +"surrogates), including symbolic links and directory junctions. Other kinds " +"of reparse points are resolved by the operating system as for " +":func:`~os.stat`." +msgstr "" +"目前在 Windows 上,遇到表示另一个路径的重解析点(即名称代理,包括符号链接和目录结点),本函数将打开它。其他种类的重解析点由 " +":func:`~os.stat` 交由操作系统解析。" + +#: ../../library/os.rst:1919 +msgid "Create a directory named *path* with numeric mode *mode*." +msgstr "创建一个名为 *path* 的目录,应用以数字表示的权限模式 *mode*。" + +#: ../../library/os.rst:1921 +msgid "" +"If the directory already exists, :exc:`FileExistsError` is raised. If a " +"parent directory in the path does not exist, :exc:`FileNotFoundError` is " +"raised." +msgstr "" +"如果目录已经存在, :exc:`FileExistsError` 会被提出。如果路径中的父目录不存在,则会引发 " +":exc:`FileNotFoundError` 。" + +#: ../../library/os.rst:1926 +msgid "" +"On some systems, *mode* is ignored. Where it is used, the current umask " +"value is first masked out. If bits other than the last 9 (i.e. the last 3 " +"digits of the octal representation of the *mode*) are set, their meaning is " +"platform-dependent. On some platforms, they are ignored and you should call" +" :func:`chmod` explicitly to set them." +msgstr "" +"某些系统会忽略 *mode*。如果没有忽略它,那么将首先从它中减去当前的 umask 值。如果除最后 9 位(即 *mode* 八进制的最后 3 " +"位)之外,还设置了其他位,则其他位的含义取决于各个平台。在某些平台上,它们会被忽略,应显式调用 :func:`chmod` 进行设置。" + +#: ../../library/os.rst:1932 +msgid "" +"On Windows, a *mode* of ``0o700`` is specifically handled to apply access " +"control to the new directory such that only the current user and " +"administrators have access. Other values of *mode* are ignored." +msgstr "" +"在 Windows 系统中,*mode* 值 ``0o700`` 被专门用于对新目录实施访问控制,使其只有当前用户和管理员才能访问。 其他值的 " +"*mode* 将被忽略。" + +#: ../../library/os.rst:1939 +msgid "" +"It is also possible to create temporary directories; see the :mod:`tempfile`" +" module's :func:`tempfile.mkdtemp` function." +msgstr "如果需要创建临时目录,请参阅 :mod:`tempfile` 模块中的 :func:`tempfile.mkdtemp` 函数。" + +#: ../../library/os.rst:1942 ../../library/os.rst:1979 +msgid "" +"Raises an :ref:`auditing event ` ``os.mkdir`` with arguments " +"``path``, ``mode``, ``dir_fd``." +msgstr "" +"引发一个 :ref:`审计事件 ` ``os.mkdir`` 并附带参数 ``path``, ``mode``, " +"``dir_fd``。" + +#: ../../library/os.rst:1950 +msgid "Windows now handles a *mode* of ``0o700``." +msgstr "Windows系统现在使用*mode*值``0o700``" + +#: ../../library/os.rst:1960 +msgid "" +"Recursive directory creation function. Like :func:`mkdir`, but makes all " +"intermediate-level directories needed to contain the leaf directory." +msgstr "递归目录创建函数。与 :func:`mkdir` 类似,但会自动创建到达最后一级目录所需要的中间目录。" + +#: ../../library/os.rst:1963 +msgid "" +"The *mode* parameter is passed to :func:`mkdir` for creating the leaf " +"directory; see :ref:`the mkdir() description ` for how it is" +" interpreted. To set the file permission bits of any newly-created parent " +"directories you can set the umask before invoking :func:`makedirs`. The " +"file permission bits of existing parent directories are not changed." +msgstr "" +"*mode* 参数会传递给 :func:`mkdir`,用来创建最后一级目录,对于该参数的解释,请参阅 :ref:`mkdir() 中的描述 " +"`。要设置某些新建的父目录的权限,可以在调用 :func:`makedirs` 之前设置 " +"umask。现有父目录的权限不会更改。" + +#: ../../library/os.rst:1969 +msgid "" +"If *exist_ok* is ``False`` (the default), an :exc:`FileExistsError` is " +"raised if the target directory already exists." +msgstr "如果 *exist_ok* 为 ``False`` (默认值),则如果目标目录已存在将引发 :exc:`FileExistsError`。" + +#: ../../library/os.rst:1974 +msgid "" +":func:`makedirs` will become confused if the path elements to create include" +" :data:`pardir` (eg. \"..\" on UNIX systems)." +msgstr "" +"如果要创建的路径元素包含 :data:`pardir` (如 UNIX 系统中的 \"..\") :func:`makedirs` 将无法明确目标。" + +#: ../../library/os.rst:1977 +msgid "This function handles UNC paths correctly." +msgstr "本函数能正确处理 UNC 路径。" + +#: ../../library/os.rst:1981 +msgid "The *exist_ok* parameter." +msgstr "*exist_ok* 参数。" + +#: ../../library/os.rst:1986 +msgid "" +"Before Python 3.4.1, if *exist_ok* was ``True`` and the directory existed, " +":func:`makedirs` would still raise an error if *mode* did not match the mode" +" of the existing directory. Since this behavior was impossible to implement " +"safely, it was removed in Python 3.4.1. See :issue:`21082`." +msgstr "" +"在 Python 3.4.1 以前,如果 *exist_ok* 为 ``True``,且目录已存在,且 *mode* " +"与现有目录的权限不匹配,:func:`makedirs` 仍会抛出错误。由于无法安全地实现此行为,因此在 Python 3.4.1 " +"中将该行为删除。请参阅 :issue:`21082`。" + +#: ../../library/os.rst:1994 +msgid "" +"The *mode* argument no longer affects the file permission bits of newly-" +"created intermediate-level directories." +msgstr "*mode* 参数不再影响新创建的中间目录的权限。" + +#: ../../library/os.rst:2001 +msgid "" +"Create a FIFO (a named pipe) named *path* with numeric mode *mode*. The " +"current umask value is first masked out from the mode." +msgstr "" +"创建一个名为 *path* 的 FIFO(命名管道,一种先进先出队列),具有以数字表示的权限状态 *mode*。将从 mode 中首先减去当前的 " +"umask 值。" + +#: ../../library/os.rst:2007 +msgid "" +"FIFOs are pipes that can be accessed like regular files. FIFOs exist until " +"they are deleted (for example with :func:`os.unlink`). Generally, FIFOs are " +"used as rendezvous between \"client\" and \"server\" type processes: the " +"server opens the FIFO for reading, and the client opens it for writing. " +"Note that :func:`mkfifo` doesn't open the FIFO --- it just creates the " +"rendezvous point." +msgstr "" +"FIFO 是可以像常规文件一样访问的管道。FIFO 如果没有被删除(如使用 :func:`os.unlink`),会一直存在。通常,FIFO " +"用作“客户端”和“服务器”进程之间的汇合点:服务器打开 FIFO 进行读取,而客户端打开 FIFO 进行写入。请注意,:func:`mkfifo` " +"不会打开 FIFO --- 它只是创建汇合点。" + +#: ../../library/os.rst:2024 +msgid "" +"Create a filesystem node (file, device special file or named pipe) named " +"*path*. *mode* specifies both the permissions to use and the type of node to" +" be created, being combined (bitwise OR) with one of ``stat.S_IFREG``, " +"``stat.S_IFCHR``, ``stat.S_IFBLK``, and ``stat.S_IFIFO`` (those constants " +"are available in :mod:`stat`). For ``stat.S_IFCHR`` and ``stat.S_IFBLK``, " +"*device* defines the newly created device special file (probably using " +":func:`os.makedev`), otherwise it is ignored." +msgstr "" +"创建一个名为 *path* 的文件系统节点(文件,设备专用文件或命名管道)。*mode* 指定权限和节点类型,方法是将权限与下列节点类型 " +"``stat.S_IFREG``、``stat.S_IFCHR``、``stat.S_IFBLK`` 和 ``stat.S_IFIFO`` " +"之一(按位或)组合(这些常量可以在 :mod:`stat` 模块中找到)。对于 ``stat.S_IFCHR`` 和 " +"``stat.S_IFBLK``,*device* 参数指定了新创建的设备专用文件(可能会用到 " +":func:`os.makedev`),否则该参数将被忽略。" + +#: ../../library/os.rst:2046 +msgid "" +"Extract the device major number from a raw device number (usually the " +":attr:`st_dev` or :attr:`st_rdev` field from :c:type:`stat`)." +msgstr "" +"提取主设备号,提取自原始设备号(通常是 :c:type:`stat` 中的 :attr:`st_dev` 或 :attr:`st_rdev` 字段)。" + +#: ../../library/os.rst:2052 +msgid "" +"Extract the device minor number from a raw device number (usually the " +":attr:`st_dev` or :attr:`st_rdev` field from :c:type:`stat`)." +msgstr "" +"提取次设备号,提取自原始设备号(通常是 :c:type:`stat` 中的 :attr:`st_dev` 或 :attr:`st_rdev` 字段)。" + +#: ../../library/os.rst:2058 +msgid "Compose a raw device number from the major and minor device numbers." +msgstr "将主设备号和次设备号组合成原始设备号。" + +#: ../../library/os.rst:2063 +msgid "" +"Return system configuration information relevant to a named file. *name* " +"specifies the configuration value to retrieve; it may be a string which is " +"the name of a defined system value; these names are specified in a number of" +" standards (POSIX.1, Unix 95, Unix 98, and others). Some platforms define " +"additional names as well. The names known to the host operating system are " +"given in the ``pathconf_names`` dictionary. For configuration variables not" +" included in that mapping, passing an integer for *name* is also accepted." +msgstr "" +"返回所给名称的文件有关的系统配置信息。*name* " +"指定要查找的配置名称,它可以是字符串,是一个系统已定义的名称,这些名称定义在不同标准(POSIX.1,Unix 95,Unix 98 " +"等)中。一些平台还定义了额外的其他名称。当前操作系统已定义的名称在 ``pathconf_names`` " +"字典中给出。对于未包含在该映射中的配置名称,也可以传递一个整数作为 *name*。" + +#: ../../library/os.rst:2076 ../../library/os.rst:2765 +#: ../../library/os.rst:2931 +msgid "" +"This function can support :ref:`specifying a file descriptor `." +msgstr "本函数支持 :ref:`指定文件描述符为参数 `。" + +#: ../../library/os.rst:2087 +msgid "" +"Dictionary mapping names accepted by :func:`pathconf` and :func:`fpathconf` " +"to the integer values defined for those names by the host operating system." +" This can be used to determine the set of names known to the system." +msgstr "" +"字典,表示映射关系,为 :func:`pathconf` 和 :func:`fpathconf` " +"可接受名称与操作系统为这些名称定义的整数值之间的映射。这可用于判断系统已定义了哪些名称。" + +#: ../../library/os.rst:2096 +msgid "" +"Return a string representing the path to which the symbolic link points. " +"The result may be either an absolute or relative pathname; if it is " +"relative, it may be converted to an absolute pathname using " +"``os.path.join(os.path.dirname(path), result)``." +msgstr "" +"返回一个字符串,为符号链接指向的实际路径。其结果可以是绝对或相对路径。如果是相对路径,则可用 " +"``os.path.join(os.path.dirname(path), result)`` 转换为绝对路径。" + +#: ../../library/os.rst:2101 +msgid "" +"If the *path* is a string object (directly or indirectly through a " +":class:`PathLike` interface), the result will also be a string object, and " +"the call may raise a UnicodeDecodeError. If the *path* is a bytes object " +"(direct or indirectly), the result will be a bytes object." +msgstr "" +"如果 *path* 是字符串对象(直接传入或通过 :class:`PathLike` 接口间接传入),则结果也将是字符串对象,且此类调用可能会引发 " +"UnicodeDecodeError。如果 *path* 是字节对象(直接传入或间接传入),则结果将会是字节对象。" + +#: ../../library/os.rst:2109 +msgid "" +"When trying to resolve a path that may contain links, use " +":func:`~os.path.realpath` to properly handle recursion and platform " +"differences." +msgstr "当尝试解析的路径可能含有链接时,请改用 :func:`~os.path.realpath` 以正确处理递归和平台差异。" + +#: ../../library/os.rst:2121 +msgid "Accepts a :term:`path-like object` on Unix." +msgstr "在 Unix 上可以接受一个 :term:`类路径对象 `。" + +#: ../../library/os.rst:2124 +msgid "Accepts a :term:`path-like object` and a bytes object on Windows." +msgstr "在 Windows 上接受 :term:`类路径对象 ` 和字节对象。" + +#: ../../library/os.rst:2127 +msgid "" +"Added support for directory junctions, and changed to return the " +"substitution path (which typically includes ``\\\\?\\`` prefix) rather than " +"the optional \"print name\" field that was previously returned." +msgstr "" +"增加了对目录链接的支持,且返回值改为了“替换路径”的形式(通常带有 ``\\\\?\\`` 前缀),而不是先前那样返回可选的 \"print " +"name\" 字段。" + +#: ../../library/os.rst:2134 +msgid "" +"Remove (delete) the file *path*. If *path* is a directory, an " +":exc:`IsADirectoryError` is raised. Use :func:`rmdir` to remove " +"directories. If the file does not exist, a :exc:`FileNotFoundError` is " +"raised." +msgstr "" +"移除(删除)文件 *path*。 如果 *path* 是目录,则会引发 :exc:`IsADirectoryError`。 请使用 " +":func:`rmdir` 来删除目录。 如果文件不存在,则会引发 :exc:`FileNotFoundError`。" + +#: ../../library/os.rst:2138 ../../library/os.rst:2249 +#: ../../library/os.rst:2885 +msgid "" +"This function can support :ref:`paths relative to directory descriptors " +"`." +msgstr "本函数支持 :ref:`基于目录描述符的相对路径 `。" + +#: ../../library/os.rst:2141 +msgid "" +"On Windows, attempting to remove a file that is in use causes an exception " +"to be raised; on Unix, the directory entry is removed but the storage " +"allocated to the file is not made available until the original file is no " +"longer in use." +msgstr "" +"在 Windows 上,尝试删除正在使用的文件会抛出异常。而在 Unix " +"上,虽然该文件的条目会被删除,但分配给文件的存储空间仍然不可用,直到原始文件不再使用为止。" + +#: ../../library/os.rst:2145 +msgid "This function is semantically identical to :func:`unlink`." +msgstr "本函数在语义上与 :func:`unlink` 相同。" + +#: ../../library/os.rst:2147 ../../library/os.rst:2169 +#: ../../library/os.rst:2953 +msgid "" +"Raises an :ref:`auditing event ` ``os.remove`` with arguments " +"``path``, ``dir_fd``." +msgstr "引发一个 :ref:`审计事件 ` ``os.remove`` 并附带参数 ``path``, ``dir_fd``。" + +#: ../../library/os.rst:2160 +msgid "" +"Remove directories recursively. Works like :func:`rmdir` except that, if " +"the leaf directory is successfully removed, :func:`removedirs` tries to " +"successively remove every parent directory mentioned in *path* until an " +"error is raised (which is ignored, because it generally means that a parent " +"directory is not empty). For example, ``os.removedirs('foo/bar/baz')`` will " +"first remove the directory ``'foo/bar/baz'``, and then remove ``'foo/bar'`` " +"and ``'foo'`` if they are empty. Raises :exc:`OSError` if the leaf directory" +" could not be successfully removed." +msgstr "" +"递归删除目录。工作方式类似于 :func:`rmdir`,不同之处在于,如果成功删除了末尾一级目录,:func:`removedirs` 会尝试依次删除" +" *path* " +"中提到的每个父目录,直到抛出错误为止(但该错误会被忽略,因为这通常表示父目录不是空目录)。例如,``os.removedirs('foo/bar/baz')``" +" 将首先删除目录 ``'foo/bar/baz'``,然后如果 ``'foo/bar'`` 和 ``'foo'`` " +"为空,则继续删除它们。如果无法成功删除末尾一级目录,则抛出 :exc:`OSError` 异常。" + +#: ../../library/os.rst:2177 +msgid "" +"Rename the file or directory *src* to *dst*. If *dst* exists, the operation " +"will fail with an :exc:`OSError` subclass in a number of cases:" +msgstr "" +"将文件或目录 *src* 重命名为 *dst*。如果 *dst* 已存在,则下列情况下将会操作失败,并抛出 :exc:`OSError` 的子类:" + +#: ../../library/os.rst:2180 +msgid "On Windows, if *dst* exists a :exc:`FileExistsError` is always raised." +msgstr "在 Windows 上,如果 *dst* 已存在,则抛出 :exc:`FileExistsError` 异常。" + +#: ../../library/os.rst:2182 +msgid "" +"On Unix, if *src* is a file and *dst* is a directory or vice-versa, an " +":exc:`IsADirectoryError` or a :exc:`NotADirectoryError` will be raised " +"respectively. If both are directories and *dst* is empty, *dst* will be " +"silently replaced. If *dst* is a non-empty directory, an :exc:`OSError` is " +"raised. If both are files, *dst* it will be replaced silently if the user " +"has permission. The operation may fail on some Unix flavors if *src* and " +"*dst* are on different filesystems. If successful, the renaming will be an " +"atomic operation (this is a POSIX requirement)." +msgstr "" +"在 Unix 上,如果 *src* 是文件而 *dst* 是目录,将抛出 :exc:`IsADirectoryError` 异常,反之则抛出 " +":exc:`NotADirectoryError` 异常。如果两者都是目录且 *dst* 为空,则 *dst* 将被静默替换。如果 *dst* " +"是非空目录,则抛出 :exc:`OSError` 异常。如果两者都是文件,则在用户具有权限的情况下,将对 *dst* 进行静默替换。如果 *src* 和" +" *dst* 在不同的文件系统上,则本操作在某些 Unix 分支上可能会失败。如果成功,重命名操作将是一个原子操作(这是 POSIX 的要求)。" + +#: ../../library/os.rst:2191 ../../library/os.rst:2231 +msgid "" +"This function can support specifying *src_dir_fd* and/or *dst_dir_fd* to " +"supply :ref:`paths relative to directory descriptors `." +msgstr "" +"本函数支持将 *src_dir_fd* 和 *dst_dir_fd* 中的一个或两个指定为 :ref:`基于目录描述符的相对路径 `。" + +#: ../../library/os.rst:2194 +msgid "" +"If you want cross-platform overwriting of the destination, use " +":func:`replace`." +msgstr "如果需要在不同平台上都能替换目标,请使用 :func:`replace`。" + +#: ../../library/os.rst:2196 ../../library/os.rst:2217 +#: ../../library/os.rst:2234 +msgid "" +"Raises an :ref:`auditing event ` ``os.rename`` with arguments " +"``src``, ``dst``, ``src_dir_fd``, ``dst_dir_fd``." +msgstr "" +"引发一个 :ref:`审计事件 ` ``os.rename`` 并附带参数 ``src``, ``dst``, " +"``src_dir_fd``, ``dst_dir_fd``。" + +#: ../../library/os.rst:2198 +msgid "The *src_dir_fd* and *dst_dir_fd* arguments." +msgstr "*src_dir_fd* 和 *dst_dir_fd* 参数。" + +#: ../../library/os.rst:2207 +msgid "" +"Recursive directory or file renaming function. Works like :func:`rename`, " +"except creation of any intermediate directories needed to make the new " +"pathname good is attempted first. After the rename, directories " +"corresponding to rightmost path segments of the old name will be pruned away" +" using :func:`removedirs`." +msgstr "" +"递归重命名目录或文件。工作方式类似 :func:`rename`,除了会首先创建新路径所需的中间目录。重命名后,将调用 " +":func:`removedirs` 删除旧路径中不需要的目录。" + +#: ../../library/os.rst:2214 +msgid "" +"This function can fail with the new directory structure made if you lack " +"permissions needed to remove the leaf directory or file." +msgstr "如果用户没有权限删除末级的目录或文件,则本函数可能会无法建立新的目录结构。" + +#: ../../library/os.rst:2219 +msgid "Accepts a :term:`path-like object` for *old* and *new*." +msgstr "接受一个 :term:`类路径对象 ` 作为 *old* 和 *new*。" + +#: ../../library/os.rst:2225 +msgid "" +"Rename the file or directory *src* to *dst*. If *dst* is a non-empty " +"directory, :exc:`OSError` will be raised. If *dst* exists and is a file, it" +" will be replaced silently if the user has permission. The operation may " +"fail if *src* and *dst* are on different filesystems. If successful, the " +"renaming will be an atomic operation (this is a POSIX requirement)." +msgstr "" +"将文件或目录 *src* 重命名为 *dst*。如果 *dst* 是非空目录,将抛出 :exc:`OSError` 异常。如果 *dst* " +"已存在且为文件,则在用户具有权限的情况下,将对其进行静默替换。如果 *src* 和 *dst* " +"在不同的文件系统上,本操作可能会失败。如果成功,重命名操作将是一个原子操作(这是 POSIX 的要求)。" + +#: ../../library/os.rst:2244 +msgid "" +"Remove (delete) the directory *path*. If the directory does not exist or is" +" not empty, an :exc:`FileNotFoundError` or an :exc:`OSError` is raised " +"respectively. In order to remove whole directory trees, " +":func:`shutil.rmtree` can be used." +msgstr "" +"移除(删除)目录 *path*。如果目录不存在或不为空,则会分别抛出 :exc:`FileNotFoundError` 或 :exc:`OSError`" +" 异常。要删除整个目录树,可以使用 :func:`shutil.rmtree`。" + +#: ../../library/os.rst:2252 +msgid "" +"Raises an :ref:`auditing event ` ``os.rmdir`` with arguments " +"``path``, ``dir_fd``." +msgstr "引发一个 :ref:`审计事件 ` ``os.rmdir`` 并附带参数 ``path``, ``dir_fd``。" + +#: ../../library/os.rst:2254 ../../library/os.rst:2955 +msgid "The *dir_fd* parameter." +msgstr "*dir_fd* 参数。" + +#: ../../library/os.rst:2263 +msgid "" +"Return an iterator of :class:`os.DirEntry` objects corresponding to the " +"entries in the directory given by *path*. The entries are yielded in " +"arbitrary order, and the special entries ``'.'`` and ``'..'`` are not " +"included. If a file is removed from or added to the directory after " +"creating the iterator, whether an entry for that file be included is " +"unspecified." +msgstr "" +"返回一个 :class:`os.DirEntry` 对象的迭代器,它们对应于由 *path* 指定目录中的条目。 " +"这些条目会以任意顺序生成,并且不包括特殊条目 ``'.'`` 和 ``'..'``。 " +"如果有文件在迭代器创建之后在目录中被移除或添加,是否要包括该文件对应的条目并没有规定。" + +#: ../../library/os.rst:2270 +msgid "" +"Using :func:`scandir` instead of :func:`listdir` can significantly increase " +"the performance of code that also needs file type or file attribute " +"information, because :class:`os.DirEntry` objects expose this information if" +" the operating system provides it when scanning a directory. All " +":class:`os.DirEntry` methods may perform a system call, but " +":func:`~os.DirEntry.is_dir` and :func:`~os.DirEntry.is_file` usually only " +"require a system call for symbolic links; :func:`os.DirEntry.stat` always " +"requires a system call on Unix but only requires one for symbolic links on " +"Windows." +msgstr "" +"如果需要文件类型或文件属性信息,使用 :func:`scandir` 代替 :func:`listdir` " +"可以大大提高这部分代码的性能,因为如果操作系统在扫描目录时返回的是 :class:`os.DirEntry` 对象,则该对象包含了这些信息。所有 " +":class:`os.DirEntry` 的方法都可能执行一次系统调用,但是 :func:`~os.DirEntry.is_dir` 和 " +":func:`~os.DirEntry.is_file` 通常只在有符号链接时才执行一次系统调用。:func:`os.DirEntry.stat` 在 " +"Unix 上始终需要一次系统调用,而在 Windows 上只在有符号链接时才需要。" + +#: ../../library/os.rst:2280 +msgid "" +"*path* may be a :term:`path-like object`. If *path* is of type ``bytes`` " +"(directly or indirectly through the :class:`PathLike` interface), the type " +"of the :attr:`~os.DirEntry.name` and :attr:`~os.DirEntry.path` attributes of" +" each :class:`os.DirEntry` will be ``bytes``; in all other circumstances, " +"they will be of type ``str``." +msgstr "" +"*path* 可以是 :term:`类路径对象 `。如果 *path* 是(直接传入或通过 " +":class:`PathLike` 接口间接传入的) ``bytes`` 类型,那么每个 :class:`os.DirEntry` 的 " +":attr:`~os.DirEntry.name` 和 :attr:`~os.DirEntry.path` 属性将是 ``bytes`` " +"类型,其他情况下是 ``str`` 类型。" + +#: ../../library/os.rst:2289 +msgid "" +"Raises an :ref:`auditing event ` ``os.scandir`` with argument " +"``path``." +msgstr "引发一个 :ref:`审计事件 ` ``os.scandir`` 并附带参数 ``path``。" + +#: ../../library/os.rst:2291 +msgid "" +"The :func:`scandir` iterator supports the :term:`context manager` protocol " +"and has the following method:" +msgstr ":func:`scandir` 迭代器支持 :term:`上下文管理 ` 协议,并具有以下方法:" + +#: ../../library/os.rst:2296 +msgid "Close the iterator and free acquired resources." +msgstr "关闭迭代器并释放占用的资源。" + +#: ../../library/os.rst:2298 +msgid "" +"This is called automatically when the iterator is exhausted or garbage " +"collected, or when an error happens during iterating. However it is " +"advisable to call it explicitly or use the :keyword:`with` statement." +msgstr "当迭代器迭代完毕,或垃圾回收,或迭代过程出错时,将自动调用本方法。但仍建议显式调用它或使用 :keyword:`with` 语句。" + +#: ../../library/os.rst:2305 +msgid "" +"The following example shows a simple use of :func:`scandir` to display all " +"the files (excluding directories) in the given *path* that don't start with " +"``'.'``. The ``entry.is_file()`` call will generally not make an additional " +"system call::" +msgstr "" +"下面的例子演示了 :func:`scandir` 的简单用法,用来显示给定 *path* 中所有不以 ``'.'`` " +"开头的文件(不包括目录)。``entry.is_file()`` 通常不会增加一次额外的系统调用::" + +#: ../../library/os.rst:2317 +msgid "" +"On Unix-based systems, :func:`scandir` uses the system's `opendir() " +"`_ " +"and `readdir() " +"`_ " +"functions. On Windows, it uses the Win32 `FindFirstFileW " +"`_ and `FindNextFileW " +"`_ functions." +msgstr "" +"在基于 Unix 的系统上,:func:`scandir` 使用系统的 `opendir() " +"`_ 和 " +"`readdir() " +"`_ " +"函数。在 Windows 上,它使用 Win32 `FindFirstFileW `_ 和 `FindNextFileW " +"`_ 函数。" + +#: ../../library/os.rst:2329 +msgid "" +"Added support for the :term:`context manager` protocol and the " +":func:`~scandir.close()` method. If a :func:`scandir` iterator is neither " +"exhausted nor explicitly closed a :exc:`ResourceWarning` will be emitted in " +"its destructor." +msgstr "" +"添加了对 :term:`上下文管理 ` 协议和 :func:`~scandir.close()` 方法的支持。如果 " +":func:`scandir` 迭代器没有迭代完毕且没有显式关闭,其析构函数将发出 :exc:`ResourceWarning` 警告。" + +#: ../../library/os.rst:2335 +msgid "The function accepts a :term:`path-like object`." +msgstr "本函数接受一个 :term:`类路径对象 `。" + +#: ../../library/os.rst:2337 +msgid "Added support for :ref:`file descriptors ` on Unix." +msgstr "在 Unix 上新增支持 :ref:`指定文件描述符为参数 `。" + +#: ../../library/os.rst:2343 +msgid "" +"Object yielded by :func:`scandir` to expose the file path and other file " +"attributes of a directory entry." +msgstr "由 :func:`scandir` 生成的对象,用于显示目录内某个条目的文件路径和其他文件属性。" + +#: ../../library/os.rst:2346 +msgid "" +":func:`scandir` will provide as much of this information as possible without" +" making additional system calls. When a ``stat()`` or ``lstat()`` system " +"call is made, the ``os.DirEntry`` object will cache the result." +msgstr "" +":func:`scandir` 将在不进行额外系统调用的情况下,提供尽可能多的此类信息。每次进行 ``stat()`` 或 ``lstat()`` " +"系统调用时,``os.DirEntry`` 对象会将结果缓存下来。" + +#: ../../library/os.rst:2350 +msgid "" +"``os.DirEntry`` instances are not intended to be stored in long-lived data " +"structures; if you know the file metadata has changed or if a long time has " +"elapsed since calling :func:`scandir`, call ``os.stat(entry.path)`` to fetch" +" up-to-date information." +msgstr "" +"``os.DirEntry`` 实例不适合存储在长期存在的数据结构中,如果你知道文件元数据已更改,或者自调用 :func:`scandir` " +"以来已经经过了很长时间,请调用 ``os.stat(entry.path)`` 来获取最新信息。" + +#: ../../library/os.rst:2355 +msgid "" +"Because the ``os.DirEntry`` methods can make operating system calls, they " +"may also raise :exc:`OSError`. If you need very fine-grained control over " +"errors, you can catch :exc:`OSError` when calling one of the ``os.DirEntry``" +" methods and handle as appropriate." +msgstr "" +"因为 ``os.DirEntry`` 方法可以进行系统调用,所以它也可能抛出 :exc:`OSError` 异常。如需精确定位错误,可以逐个调用 " +"``os.DirEntry`` 中的方法来捕获 :exc:`OSError`,并适当处理。" + +#: ../../library/os.rst:2360 +msgid "" +"To be directly usable as a :term:`path-like object`, ``os.DirEntry`` " +"implements the :class:`PathLike` interface." +msgstr "" +"为了能直接用作 :term:`类路径对象 `,``os.DirEntry`` 实现了 " +":class:`PathLike` 接口。" + +#: ../../library/os.rst:2363 +msgid "Attributes and methods on a ``os.DirEntry`` instance are as follows:" +msgstr "``os.DirEntry`` 实例所包含的属性和方法如下:" + +#: ../../library/os.rst:2367 +msgid "" +"The entry's base filename, relative to the :func:`scandir` *path* argument." +msgstr "本条目的基本文件名,是根据 :func:`scandir` 的 *path* 参数得出的相对路径。" + +#: ../../library/os.rst:2370 +msgid "" +"The :attr:`name` attribute will be ``bytes`` if the :func:`scandir` *path* " +"argument is of type ``bytes`` and ``str`` otherwise. Use " +":func:`~os.fsdecode` to decode byte filenames." +msgstr "" +"如果 :func:`scandir` 的 *path* 参数是 ``bytes`` 类型,则 :attr:`name` 属性也是 ``bytes`` " +"类型,否则为 ``str``。使用 :func:`~os.fsdecode` 解码 byte 类型的文件名。" + +#: ../../library/os.rst:2376 +msgid "" +"The entry's full path name: equivalent to ``os.path.join(scandir_path, " +"entry.name)`` where *scandir_path* is the :func:`scandir` *path* argument. " +"The path is only absolute if the :func:`scandir` *path* argument was " +"absolute. If the :func:`scandir` *path* argument was a :ref:`file " +"descriptor `, the :attr:`path` attribute is the same as the " +":attr:`name` attribute." +msgstr "" +"本条目的完整路径:等效于 ``os.path.join(scandir_path, entry.name)``,其中 *scandir_path* 就是" +" :func:`scandir` 的 *path* 参数。仅当 :func:`scandir` 的 *path* " +"参数为绝对路径时,本路径才是绝对路径。如果 :func:`scandir` 的 *path* 参数是 :ref:`文件描述符 `,则 " +":attr:`path` 属性与上述 :attr:`name` 属性相同。" + +#: ../../library/os.rst:2383 +msgid "" +"The :attr:`path` attribute will be ``bytes`` if the :func:`scandir` *path* " +"argument is of type ``bytes`` and ``str`` otherwise. Use " +":func:`~os.fsdecode` to decode byte filenames." +msgstr "" +"如果 :func:`scandir` 的 *path* 参数是 ``bytes`` 类型,则 :attr:`path` 属性也是 ``bytes`` " +"类型,否则为 ``str``。使用 :func:`~os.fsdecode` 解码 byte 类型的文件名。" + +#: ../../library/os.rst:2389 +msgid "Return the inode number of the entry." +msgstr "返回本条目的索引节点号 (inode number)。" + +#: ../../library/os.rst:2391 +msgid "" +"The result is cached on the ``os.DirEntry`` object. Use " +"``os.stat(entry.path, follow_symlinks=False).st_ino`` to fetch up-to-date " +"information." +msgstr "" +"这一结果是缓存在 ``os.DirEntry`` 对象中的,请调用 ``os.stat(entry.path, " +"follow_symlinks=False).st_ino`` 来获取最新信息。" + +#: ../../library/os.rst:2395 +msgid "" +"On the first, uncached call, a system call is required on Windows but not on" +" Unix." +msgstr "一开始没有缓存时,在 Windows 上需要一次系统调用,但在 Unix 上不需要。" + +#: ../../library/os.rst:2400 +msgid "" +"Return ``True`` if this entry is a directory or a symbolic link pointing to " +"a directory; return ``False`` if the entry is or points to any other kind of" +" file, or if it doesn't exist anymore." +msgstr "" +"如果本条目是目录,或是指向目录的符号链接,则返回 ``True``。如果本条目是文件,或指向任何其他类型的文件,或该目录不再存在,则返回 " +"``False``。" + +#: ../../library/os.rst:2404 +msgid "" +"If *follow_symlinks* is ``False``, return ``True`` only if this entry is a " +"directory (without following symlinks); return ``False`` if the entry is any" +" other kind of file or if it doesn't exist anymore." +msgstr "" +"如果 *follow_symlinks* 是 ``False``,那么仅当本条目为目录时返回 ``True`` " +"(不跟踪符号链接),如果本条目是任何类型的文件,或该文件不再存在,则返回 ``False``。" + +#: ../../library/os.rst:2408 +msgid "" +"The result is cached on the ``os.DirEntry`` object, with a separate cache " +"for *follow_symlinks* ``True`` and ``False``. Call :func:`os.stat` along " +"with :func:`stat.S_ISDIR` to fetch up-to-date information." +msgstr "" +"这一结果是缓存在 ``os.DirEntry`` 对象中的,且 *follow_symlinks* 为 ``True`` 和 ``False`` " +"时的缓存是分开的。请调用 :func:`os.stat` 和 :func:`stat.S_ISDIR` 来获取最新信息。" + +#: ../../library/os.rst:2412 +msgid "" +"On the first, uncached call, no system call is required in most cases. " +"Specifically, for non-symlinks, neither Windows or Unix require a system " +"call, except on certain Unix file systems, such as network file systems, " +"that return ``dirent.d_type == DT_UNKNOWN``. If the entry is a symlink, a " +"system call will be required to follow the symlink unless *follow_symlinks* " +"is ``False``." +msgstr "" +"一开始没有缓存时,大多数情况下不需要系统调用。特别是对于非符号链接,Windows 和 Unix 都不需要系统调用,除非某些 Unix " +"文件系统(如网络文件系统)返回了 ``dirent.d_type == DT_UNKNOWN``。如果本条目是符号链接,则需要一次系统调用来跟踪它(除非" +" *follow_symlinks* 为 ``False``)。" + +#: ../../library/os.rst:2419 ../../library/os.rst:2449 +msgid "" +"This method can raise :exc:`OSError`, such as :exc:`PermissionError`, but " +":exc:`FileNotFoundError` is caught and not raised." +msgstr "" +"本方法可能抛出 :exc:`OSError` 异常,如 :exc:`PermissionError` 异常,但 " +":exc:`FileNotFoundError` 异常会被内部捕获且不会抛出。" + +#: ../../library/os.rst:2424 +msgid "" +"Return ``True`` if this entry is a file or a symbolic link pointing to a " +"file; return ``False`` if the entry is or points to a directory or other " +"non-file entry, or if it doesn't exist anymore." +msgstr "" +"如果本条目是文件,或是指向文件的符号链接,则返回 ``True``。如果本条目是目录,或指向目录,或指向其他非文件条目,或该文件不再存在,则返回 " +"``False``。" + +#: ../../library/os.rst:2428 +msgid "" +"If *follow_symlinks* is ``False``, return ``True`` only if this entry is a " +"file (without following symlinks); return ``False`` if the entry is a " +"directory or other non-file entry, or if it doesn't exist anymore." +msgstr "" +"如果 *follow_symlinks* 是 ``False``,那么仅当本条目为文件时返回 ``True`` " +"(不跟踪符号链接),如果本条目是目录或其他非文件条目,或该文件不再存在,则返回 ``False``。" + +#: ../../library/os.rst:2432 +msgid "" +"The result is cached on the ``os.DirEntry`` object. Caching, system calls " +"made, and exceptions raised are as per :func:`~os.DirEntry.is_dir`." +msgstr "" +"这一结果是缓存在 ``os.DirEntry`` 对象中的。缓存、系统调用、异常抛出都与 :func:`~os.DirEntry.is_dir` 一致。" + +#: ../../library/os.rst:2437 +msgid "" +"Return ``True`` if this entry is a symbolic link (even if broken); return " +"``False`` if the entry points to a directory or any kind of file, or if it " +"doesn't exist anymore." +msgstr "如果本条目是符号链接(即使是断开的链接),返回 ``True``。如果是目录或任何类型的文件,或本条目不再存在,返回 ``False``。" + +#: ../../library/os.rst:2441 +msgid "" +"The result is cached on the ``os.DirEntry`` object. Call " +":func:`os.path.islink` to fetch up-to-date information." +msgstr "这一结果是缓存在 ``os.DirEntry`` 对象中的,请调用 :func:`os.path.islink` 来获取最新信息。" + +#: ../../library/os.rst:2444 +msgid "" +"On the first, uncached call, no system call is required in most cases. " +"Specifically, neither Windows or Unix require a system call, except on " +"certain Unix file systems, such as network file systems, that return " +"``dirent.d_type == DT_UNKNOWN``." +msgstr "" +"一开始没有缓存时,大多数情况下不需要系统调用。其实 Windows 和 Unix 都不需要系统调用,除非某些 Unix 文件系统(如网络文件系统)返回了" +" ``dirent.d_type == DT_UNKNOWN``。" + +#: ../../library/os.rst:2454 +msgid "" +"Return a :class:`stat_result` object for this entry. This method follows " +"symbolic links by default; to stat a symbolic link add the " +"``follow_symlinks=False`` argument." +msgstr "" +"返回本条目对应的 :class:`stat_result` 对象。本方法默认会跟踪符号链接,要获取符号链接本身的 stat,请添加 " +"``follow_symlinks=False`` 参数。" + +#: ../../library/os.rst:2458 +msgid "" +"On Unix, this method always requires a system call. On Windows, it only " +"requires a system call if *follow_symlinks* is ``True`` and the entry is a " +"reparse point (for example, a symbolic link or directory junction)." +msgstr "" +"在 Unix 上,本方法需要一次系统调用。在 Windows 上,仅在 *follow_symlinks* 为 ``True`` " +"且该条目是一个重解析点(如符号链接或目录结点)时,才需要一次系统调用。" + +#: ../../library/os.rst:2463 +msgid "" +"On Windows, the ``st_ino``, ``st_dev`` and ``st_nlink`` attributes of the " +":class:`stat_result` are always set to zero. Call :func:`os.stat` to get " +"these attributes." +msgstr "" +"在 Windows 上,:class:`stat_result` 的 ``st_ino``、``st_dev`` 和 ``st_nlink`` " +"属性总是为零。请调用 :func:`os.stat` 以获得这些属性。" + +#: ../../library/os.rst:2467 +msgid "" +"The result is cached on the ``os.DirEntry`` object, with a separate cache " +"for *follow_symlinks* ``True`` and ``False``. Call :func:`os.stat` to fetch " +"up-to-date information." +msgstr "" +"这一结果是缓存在 ``os.DirEntry`` 对象中的,且 *follow_symlinks* 为 ``True`` 和 ``False`` " +"时的缓存是分开的。请调用 :func:`os.stat` 来获取最新信息。" + +#: ../../library/os.rst:2471 +msgid "" +"Note that there is a nice correspondence between several attributes and " +"methods of ``os.DirEntry`` and of :class:`pathlib.Path`. In particular, the" +" ``name`` attribute has the same meaning, as do the ``is_dir()``, " +"``is_file()``, ``is_symlink()`` and ``stat()`` methods." +msgstr "" +"注意,``os.DirEntry`` 和 :class:`pathlib.Path` 的几个属性和方法之间存在很好的对应关系。具体来说是 " +"``name`` 属性,以及 ``is_dir()``、``is_file()``、``is_symlink()`` 和 ``stat()`` " +"方法,在两个类中具有相同的含义。" + +#: ../../library/os.rst:2479 +msgid "" +"Added support for the :class:`~os.PathLike` interface. Added support for " +":class:`bytes` paths on Windows." +msgstr "" +"添加了对 :class:`~os.PathLike` 接口的支持。在 Windows 上添加了对 :class:`bytes` 类型路径的支持。" + +#: ../../library/os.rst:2486 +msgid "" +"Get the status of a file or a file descriptor. Perform the equivalent of a " +":c:func:`stat` system call on the given path. *path* may be specified as " +"either a string or bytes -- directly or indirectly through the " +":class:`PathLike` interface -- or as an open file descriptor. Return a " +":class:`stat_result` object." +msgstr "" +"获取文件或文件描述符的状态。在所给路径上执行等效于 :c:func:`stat` 系统调用的操作。*path* 可以是字符串类型,或(直接传入或通过 " +":class:`PathLike` 接口间接传入的) bytes 类型,或打开的文件描述符。返回一个 :class:`stat_result` 对象。" + +#: ../../library/os.rst:2492 +msgid "" +"This function normally follows symlinks; to stat a symlink add the argument " +"``follow_symlinks=False``, or use :func:`lstat`." +msgstr "" +"本函数默认会跟踪符号链接,要获取符号链接本身的 stat,请添加 ``follow_symlinks=False`` 参数,或使用 " +":func:`lstat`。" + +#: ../../library/os.rst:2495 ../../library/os.rst:3223 +#: ../../library/os.rst:3239 ../../library/os.rst:3255 +#: ../../library/os.rst:3275 +msgid "" +"This function can support :ref:`specifying a file descriptor ` and " +":ref:`not following symlinks `." +msgstr "本函数支持 :ref:`指定文件描述符为参数 ` 和 :ref:`不跟踪符号链接 `。" + +#: ../../library/os.rst:2498 +msgid "" +"On Windows, passing ``follow_symlinks=False`` will disable following all " +"name-surrogate reparse points, which includes symlinks and directory " +"junctions. Other types of reparse points that do not resemble links or that " +"the operating system is unable to follow will be opened directly. When " +"following a chain of multiple links, this may result in the original link " +"being returned instead of the non-link that prevented full traversal. To " +"obtain stat results for the final path in this case, use the " +":func:`os.path.realpath` function to resolve the path name as far as " +"possible and call :func:`lstat` on the result. This does not apply to " +"dangling symlinks or junction points, which will raise the usual exceptions." +msgstr "" +"在 Windows 上,传入 ``follow_symlinks=False`` " +"将禁用所有名称代理重解析点,其中包括符号链接和目录结点。其他类型的重解析点将直接打开,比如不像链接的或系统无法跟踪的重解析点。当多个链接形成一个链时,本方法可能会返回原始链接的" +" stat,无法完整遍历到非链接的对象。在这种情况下,要获取最终路径的 stat,请使用 :func:`os.path.realpath` " +"函数尽可能地解析路径,并在解析结果上调用 :func:`lstat`。这不适用于空链接或交接点,否则会抛出异常。" + +#: ../../library/os.rst:2511 +msgid "Example::" +msgstr "示例::" + +#: ../../library/os.rst:2524 +msgid ":func:`fstat` and :func:`lstat` functions." +msgstr ":func:`fstat` 和 :func:`lstat` 函数。" + +#: ../../library/os.rst:2526 +msgid "" +"Added the *dir_fd* and *follow_symlinks* arguments, specifying a file " +"descriptor instead of a path." +msgstr "增加 *dir_fd* 和 *follow_symlinks* 参数,可指定文件描述符代替路径。" + +#: ../../library/os.rst:2533 +msgid "" +"On Windows, all reparse points that can be resolved by the operating system " +"are now followed, and passing ``follow_symlinks=False`` disables following " +"all name surrogate reparse points. If the operating system reaches a reparse" +" point that it is not able to follow, *stat* now returns the information for" +" the original path as if ``follow_symlinks=False`` had been specified " +"instead of raising an error." +msgstr "" +"在 Windows 上,本方法将跟踪系统能解析的所有重解析点,并且传入 ``follow_symlinks=False`` " +"会停止跟踪所有名称代理重解析点。现在,如果操作系统遇到无法跟踪的重解析点,*stat* 将返回原始路径的信息,就像已指定 " +"``follow_symlinks=False`` 一样,而不会抛出异常。" + +#: ../../library/os.rst:2544 +msgid "" +"Object whose attributes correspond roughly to the members of the " +":c:type:`stat` structure. It is used for the result of :func:`os.stat`, " +":func:`os.fstat` and :func:`os.lstat`." +msgstr "" +"本对象的属性大致对应于 :c:type:`stat` 结构体成员,主要作为 :func:`os.stat`、:func:`os.fstat` 和 " +":func:`os.lstat` 的返回值。" + +#: ../../library/os.rst:2548 +msgid "Attributes:" +msgstr "属性:" + +#: ../../library/os.rst:2552 +msgid "File mode: file type and file mode bits (permissions)." +msgstr "文件模式:包括文件类型和文件模式位(即权限位)。" + +#: ../../library/os.rst:2556 +msgid "" +"Platform dependent, but if non-zero, uniquely identifies the file for a " +"given value of ``st_dev``. Typically:" +msgstr "与平台有关,但如果不为零,则根据 ``st_dev`` 值唯一地标识文件。通常:" + +#: ../../library/os.rst:2559 +msgid "the inode number on Unix," +msgstr "在 Unix 上该值表示索引节点号 (inode number)。" + +#: ../../library/os.rst:2560 +msgid "" +"the `file index `_ on " +"Windows" +msgstr "" +"在 Windows 上该值表示 `文件索引号 `_" +" 。" + +#: ../../library/os.rst:2566 +msgid "Identifier of the device on which this file resides." +msgstr "该文件所在设备的标识符。" + +#: ../../library/os.rst:2570 +msgid "Number of hard links." +msgstr "硬链接的数量。" + +#: ../../library/os.rst:2574 +msgid "User identifier of the file owner." +msgstr "文件所有者的用户 ID。" + +#: ../../library/os.rst:2578 +msgid "Group identifier of the file owner." +msgstr "文件所有者的用户组 ID。" + +#: ../../library/os.rst:2582 +msgid "" +"Size of the file in bytes, if it is a regular file or a symbolic link. The " +"size of a symbolic link is the length of the pathname it contains, without a" +" terminating null byte." +msgstr "文件大小(以字节为单位),文件可以是常规文件或符号链接。符号链接的大小是它包含的路径的长度,不包括末尾的空字节。" + +#: ../../library/os.rst:2586 +msgid "Timestamps:" +msgstr "时间戳:" + +#: ../../library/os.rst:2590 +msgid "Time of most recent access expressed in seconds." +msgstr "最近的访问时间,以秒为单位。" + +#: ../../library/os.rst:2594 +msgid "Time of most recent content modification expressed in seconds." +msgstr "最近的修改时间,以秒为单位。" + +#: ../../library/os.rst:2598 ../../library/os.rst:2614 +msgid "Platform dependent:" +msgstr "取决于平台:" + +#: ../../library/os.rst:2600 ../../library/os.rst:2616 +msgid "the time of most recent metadata change on Unix," +msgstr "在 Unix 上表示最近的元数据更改时间," + +#: ../../library/os.rst:2601 +msgid "the time of creation on Windows, expressed in seconds." +msgstr "在 Windows 上表示创建时间,以秒为单位。" + +#: ../../library/os.rst:2605 +msgid "Time of most recent access expressed in nanoseconds as an integer." +msgstr "最近的访问时间,以纳秒表示,为整数。" + +#: ../../library/os.rst:2609 +msgid "" +"Time of most recent content modification expressed in nanoseconds as an " +"integer." +msgstr "最近的修改时间,以纳秒表示,为整数。" + +#: ../../library/os.rst:2617 +msgid "" +"the time of creation on Windows, expressed in nanoseconds as an integer." +msgstr "在 Windows 上表示创建时间,以纳秒表示,为整数。" + +#: ../../library/os.rst:2622 +msgid "" +"The exact meaning and resolution of the :attr:`st_atime`, :attr:`st_mtime`, " +"and :attr:`st_ctime` attributes depend on the operating system and the file " +"system. For example, on Windows systems using the FAT or FAT32 file systems," +" :attr:`st_mtime` has 2-second resolution, and :attr:`st_atime` has only " +"1-day resolution. See your operating system documentation for details." +msgstr "" +":attr:`st_atime`、:attr:`st_mtime` 和 :attr:`st_ctime` " +"属性的确切含义和分辨率取决于操作系统和文件系统。例如,在使用 FAT 或 FAT32 文件系统的 Windows 上,:attr:`st_mtime` " +"有 2 秒的分辨率,而 :attr:`st_atime` 仅有 1 天的分辨率。详细信息请参阅操作系统文档。" + +#: ../../library/os.rst:2629 +msgid "" +"Similarly, although :attr:`st_atime_ns`, :attr:`st_mtime_ns`, and " +":attr:`st_ctime_ns` are always expressed in nanoseconds, many systems do not" +" provide nanosecond precision. On systems that do provide nanosecond " +"precision, the floating-point object used to store :attr:`st_atime`, " +":attr:`st_mtime`, and :attr:`st_ctime` cannot preserve all of it, and as " +"such will be slightly inexact. If you need the exact timestamps you should " +"always use :attr:`st_atime_ns`, :attr:`st_mtime_ns`, and " +":attr:`st_ctime_ns`." +msgstr "" +"类似地,尽管 :attr:`st_atime_ns`、:attr:`st_mtime_ns` 和 :attr:`st_ctime_ns` " +"始终以纳秒表示,但许多系统并不提供纳秒精度。在确实提供纳秒精度的系统上,用于存储 :attr:`st_atime`、:attr:`st_mtime` 和" +" :attr:`st_ctime` 的浮点对象无法保留所有精度,因此不够精确。如果需要确切的时间戳,则应始终使用 " +":attr:`st_atime_ns`、:attr:`st_mtime_ns` 和 :attr:`st_ctime_ns`。" + +#: ../../library/os.rst:2638 +msgid "" +"On some Unix systems (such as Linux), the following attributes may also be " +"available:" +msgstr "在某些 Unix 系统上(如 Linux 上),以下属性可能也可用:" + +#: ../../library/os.rst:2643 +msgid "" +"Number of 512-byte blocks allocated for file. This may be smaller than " +":attr:`st_size`/512 when the file has holes." +msgstr "为文件分配的字节块数,每块 512 字节。文件是稀疏文件时,它可能小于 :attr:`st_size`/512。" + +#: ../../library/os.rst:2648 +msgid "" +"\"Preferred\" blocksize for efficient file system I/O. Writing to a file in " +"smaller chunks may cause an inefficient read-modify-rewrite." +msgstr "“首选的” 块大小,用于提高文件系统 I/O 效率。写入文件时块大小太小可能会导致读取-修改-重写效率低下。" + +#: ../../library/os.rst:2653 +msgid "Type of device if an inode device." +msgstr "设备类型(如果是 inode 设备)。" + +#: ../../library/os.rst:2657 +msgid "User defined flags for file." +msgstr "用户定义的文件标志位。" + +#: ../../library/os.rst:2659 +msgid "" +"On other Unix systems (such as FreeBSD), the following attributes may be " +"available (but may be only filled out if root tries to use them):" +msgstr "在其他 Unix 系统上(如 FreeBSD 上),以下属性可能可用(但仅当 root 使用它们时才被填充):" + +#: ../../library/os.rst:2664 +msgid "File generation number." +msgstr "文件生成号。" + +#: ../../library/os.rst:2668 +msgid "Time of file creation." +msgstr "文件创建时的时间。" + +#: ../../library/os.rst:2670 +msgid "" +"On Solaris and derivatives, the following attributes may also be available:" +msgstr "在 Solaris 及其衍生版本上,以下属性可能也可用:" + +#: ../../library/os.rst:2675 +msgid "" +"String that uniquely identifies the type of the filesystem that contains the" +" file." +msgstr "文件所在文件系统的类型的唯一标识,为字符串。" + +#: ../../library/os.rst:2678 +msgid "On macOS systems, the following attributes may also be available:" +msgstr "在 macOS 系统上,以下属性可能也可用:" + +#: ../../library/os.rst:2682 +msgid "Real size of the file." +msgstr "文件的实际大小。" + +#: ../../library/os.rst:2686 +msgid "Creator of the file." +msgstr "文件的创建者。" + +#: ../../library/os.rst:2690 +msgid "File type." +msgstr "文件类型。" + +#: ../../library/os.rst:2692 +msgid "On Windows systems, the following attributes are also available:" +msgstr "在 Windows 系统上,以下属性也可用:" + +#: ../../library/os.rst:2696 +msgid "" +"Windows file attributes: ``dwFileAttributes`` member of the " +"``BY_HANDLE_FILE_INFORMATION`` structure returned by " +":c:func:`GetFileInformationByHandle`. See the ``FILE_ATTRIBUTE_*`` constants" +" in the :mod:`stat` module." +msgstr "" +"Windows 文件属性:``dwFileAttributes``,由 :c:func:`GetFileInformationByHandle` 返回的" +" ``BY_HANDLE_FILE_INFORMATION`` 结构体的成员之一。请参阅 :mod:`stat` 模块中的 " +"``FILE_ATTRIBUTE_*`` 常量。" + +#: ../../library/os.rst:2703 +msgid "" +"When :attr:`st_file_attributes` has the ``FILE_ATTRIBUTE_REPARSE_POINT`` " +"set, this field contains the tag identifying the type of reparse point. See " +"the ``IO_REPARSE_TAG_*`` constants in the :mod:`stat` module." +msgstr "" +"当 :attr:`st_file_attributes` 存在 ``FILE_ATTRIBUTE_REPARSE_POINT`` " +"集合时,本字段包含重解析点类型标记。请参阅 :mod:`stat` 模块中的 ``IO_REPARSE_TAG_*`` 常量。" + +#: ../../library/os.rst:2707 +msgid "" +"The standard module :mod:`stat` defines functions and constants that are " +"useful for extracting information from a :c:type:`stat` structure. (On " +"Windows, some items are filled with dummy values.)" +msgstr "" +"标准模块 :mod:`stat` 中定义了函数和常量,这些函数和常量可用于从 :c:type:`stat` 结构体中提取信息。(在 Windows " +"上,某些项填充的是虚值。)" + +#: ../../library/os.rst:2711 +msgid "" +"For backward compatibility, a :class:`stat_result` instance is also " +"accessible as a tuple of at least 10 integers giving the most important (and" +" portable) members of the :c:type:`stat` structure, in the order " +":attr:`st_mode`, :attr:`st_ino`, :attr:`st_dev`, :attr:`st_nlink`, " +":attr:`st_uid`, :attr:`st_gid`, :attr:`st_size`, :attr:`st_atime`, " +":attr:`st_mtime`, :attr:`st_ctime`. More items may be added at the end by " +"some implementations. For compatibility with older Python versions, " +"accessing :class:`stat_result` as a tuple always returns integers." +msgstr "" +"为了向后兼容,一个 :class:`stat_result` 实例还可以作为至少包含 10 个整数的元组访问,以提供 :c:type:`stat` " +"结构中最重要(和可移植)的成员,整数顺序为 :attr:`st_mode`, :attr:`st_ino`, :attr:`st_dev`, " +":attr:`st_nlink`, :attr:`st_uid`, :attr:`st_gid`, :attr:`st_size`, " +":attr:`st_atime`, :attr:`st_mtime`, :attr:`st_ctime`。某些实现可能在末尾还有更多项。为了与旧版 " +"Python 兼容,以元组形式访问 :class:`stat_result` 始终返回整数。" + +#: ../../library/os.rst:2720 +msgid "" +"Added the :attr:`st_atime_ns`, :attr:`st_mtime_ns`, and :attr:`st_ctime_ns` " +"members." +msgstr "添加了 :attr:`st_atime_ns`、:attr:`st_mtime_ns` 和 :attr:`st_ctime_ns` 成员。" + +#: ../../library/os.rst:2724 +msgid "Added the :attr:`st_file_attributes` member on Windows." +msgstr "在 Windows 上添加了 :attr:`st_file_attributes` 成员。" + +#: ../../library/os.rst:2727 +msgid "Windows now returns the file index as :attr:`st_ino` when available." +msgstr "在 Windows 上,如果可用,会返回文件索引作为 :attr:`st_ino` 的值。" + +#: ../../library/os.rst:2731 +msgid "Added the :attr:`st_fstype` member to Solaris/derivatives." +msgstr "在 Solaris 及其衍生版本上添加了 :attr:`st_fstype` 成员。" + +#: ../../library/os.rst:2734 +msgid "Added the :attr:`st_reparse_tag` member on Windows." +msgstr "在 Windows 上添加了 :attr:`st_reparse_tag` 成员。" + +#: ../../library/os.rst:2737 +msgid "" +"On Windows, the :attr:`st_mode` member now identifies special files as " +":const:`S_IFCHR`, :const:`S_IFIFO` or :const:`S_IFBLK` as appropriate." +msgstr "" +"在 Windows 上,:attr:`st_mode` 成员现在可以根据需要将特殊文件标识为 " +":const:`S_IFCHR`、:const:`S_IFIFO` 或 :const:`S_IFBLK`。" + +#: ../../library/os.rst:2744 +msgid "" +"Perform a :c:func:`statvfs` system call on the given path. The return value" +" is an object whose attributes describe the filesystem on the given path, " +"and correspond to the members of the :c:type:`statvfs` structure, namely: " +":attr:`f_bsize`, :attr:`f_frsize`, :attr:`f_blocks`, :attr:`f_bfree`, " +":attr:`f_bavail`, :attr:`f_files`, :attr:`f_ffree`, :attr:`f_favail`, " +":attr:`f_flag`, :attr:`f_namemax`, :attr:`f_fsid`." +msgstr "" +"在所给的路径上执行 :c:func:`statvfs` 系统调用。返回值是一个对象,其属性描述了所给路径上的文件系统,并且与 " +":c:type:`statvfs` 结构体的成员相对应,即::attr:`f_bsize`, :attr:`f_frsize`, " +":attr:`f_blocks`, :attr:`f_bfree`, :attr:`f_bavail`, :attr:`f_files`, " +":attr:`f_ffree`, :attr:`f_favail`, :attr:`f_flag`, :attr:`f_namemax`, " +":attr:`f_fsid`。" + +#: ../../library/os.rst:2751 +msgid "" +"Two module-level constants are defined for the :attr:`f_flag` attribute's " +"bit-flags: if :const:`ST_RDONLY` is set, the filesystem is mounted read-" +"only, and if :const:`ST_NOSUID` is set, the semantics of setuid/setgid bits " +"are disabled or not supported." +msgstr "" +"为 :attr:`f_flag` 属性位定义了两个模块级常量:如果存在 :const:`ST_RDONLY` 位,则文件系统以只读挂载;如果存在 " +":const:`ST_NOSUID` 位,则文件系统禁用或不支持 setuid/setgid 位。" + +#: ../../library/os.rst:2756 +msgid "" +"Additional module-level constants are defined for GNU/glibc based systems. " +"These are :const:`ST_NODEV` (disallow access to device special files), " +":const:`ST_NOEXEC` (disallow program execution), :const:`ST_SYNCHRONOUS` " +"(writes are synced at once), :const:`ST_MANDLOCK` (allow mandatory locks on " +"an FS), :const:`ST_WRITE` (write on file/directory/symlink), " +":const:`ST_APPEND` (append-only file), :const:`ST_IMMUTABLE` (immutable " +"file), :const:`ST_NOATIME` (do not update access times), " +":const:`ST_NODIRATIME` (do not update directory access times), " +":const:`ST_RELATIME` (update atime relative to mtime/ctime)." +msgstr "" +"为基于 GNU/glibc 的系统还定义了额外的模块级常量。它们是 :const:`ST_NODEV` " +"(禁止访问设备专用文件),:const:`ST_NOEXEC` (禁止执行程序),:const:`ST_SYNCHRONOUS` " +"(写入后立即同步),:const:`ST_MANDLOCK` (允许文件系统上的强制锁定),:const:`ST_WRITE` " +"(写入文件/目录/符号链接),:const:`ST_APPEND` (仅追加文件),:const:`ST_IMMUTABLE` " +"(不可变文件),:const:`ST_NOATIME` (不更新访问时间),:const:`ST_NODIRATIME` " +"(不更新目录访问时间),:const:`ST_RELATIME` (相对于 mtime/ctime 更新访问时间)。" + +#: ../../library/os.rst:2769 +msgid "The :const:`ST_RDONLY` and :const:`ST_NOSUID` constants were added." +msgstr "添加了 :const:`ST_RDONLY` 和 :const:`ST_NOSUID` 常量。" + +#: ../../library/os.rst:2775 +msgid "" +"The :const:`ST_NODEV`, :const:`ST_NOEXEC`, :const:`ST_SYNCHRONOUS`, " +":const:`ST_MANDLOCK`, :const:`ST_WRITE`, :const:`ST_APPEND`, " +":const:`ST_IMMUTABLE`, :const:`ST_NOATIME`, :const:`ST_NODIRATIME`, and " +":const:`ST_RELATIME` constants were added." +msgstr "" +"添加了 " +":const:`ST_NODEV`、:const:`ST_NOEXEC`、:const:`ST_SYNCHRONOUS`、:const:`ST_MANDLOCK`、:const:`ST_WRITE`、:const:`ST_APPEND`、:const:`ST_IMMUTABLE`、:const:`ST_NOATIME`、:const:`ST_NODIRATIME`" +" 和 :const:`ST_RELATIME` 常量。" + +#: ../../library/os.rst:2784 +msgid "Added :attr:`f_fsid`." +msgstr "添加了 :attr:`f_fsid`。" + +#: ../../library/os.rst:2790 +msgid "" +"A :class:`set` object indicating which functions in the :mod:`os` module " +"accept an open file descriptor for their *dir_fd* parameter. Different " +"platforms provide different features, and the underlying functionality " +"Python uses to implement the *dir_fd* parameter is not available on all " +"platforms Python supports. For consistency's sake, functions that may " +"support *dir_fd* always allow specifying the parameter, but will throw an " +"exception if the functionality is used when it's not locally available. " +"(Specifying ``None`` for *dir_fd* is always supported on all platforms.)" +msgstr "" +"一个 :class:`set` 对象,指示 :mod:`os` 模块中的哪些函数接受一个打开的文件描述符作为 *dir_fd* " +"参数。不同平台提供的功能不同,且 Python 用于实现 *dir_fd* 参数的底层函数并非在 Python " +"支持的所有平台上都可用。考虑到一致性,支持 *dir_fd* " +"的函数始终允许指定描述符,但如果在底层不支持时调用了该函数,则会抛出异常。(在所有平台上始终支持将 *dir_fd* 指定为 ``None``。)" + +#: ../../library/os.rst:2800 +msgid "" +"To check whether a particular function accepts an open file descriptor for " +"its *dir_fd* parameter, use the ``in`` operator on ``supports_dir_fd``. As " +"an example, this expression evaluates to ``True`` if :func:`os.stat` accepts" +" open file descriptors for *dir_fd* on the local platform::" +msgstr "" +"要检查某个函数是否接受打开的文件描述符作为 *dir_fd* 参数,请在 ``supports_dir_fd`` 前使用 ``in`` " +"运算符。例如,如果 :func:`os.stat` 在当前平台上接受打开的文件描述符作为 *dir_fd* 参数,则此表达式的计算结果为 " +"``True``::" + +#: ../../library/os.rst:2807 +msgid "" +"Currently *dir_fd* parameters only work on Unix platforms; none of them work" +" on Windows." +msgstr "目前 *dir_fd* 参数仅在 Unix 平台上有效,在 Windows 上均无效。" + +#: ../../library/os.rst:2815 +msgid "" +"A :class:`set` object indicating whether :func:`os.access` permits " +"specifying ``True`` for its *effective_ids* parameter on the local platform." +" (Specifying ``False`` for *effective_ids* is always supported on all " +"platforms.) If the local platform supports it, the collection will contain " +":func:`os.access`; otherwise it will be empty." +msgstr "" +"一个 :class:`set` 对象,指示 :func:`os.access` 是否允许在当前平台上将其 *effective_ids* 参数指定为 " +"``True``。(所有平台都支持将 *effective_ids* 指定为 ``False``。)如果当前平台支持,则集合将包含 " +":func:`os.access`,否则集合为空。" + +#: ../../library/os.rst:2821 +msgid "" +"This expression evaluates to ``True`` if :func:`os.access` supports " +"``effective_ids=True`` on the local platform::" +msgstr "" +"如果当前平台上的 :func:`os.access` 支持 ``effective_ids=True``,则此表达式的计算结果为 ``True``::" + +#: ../../library/os.rst:2826 +msgid "" +"Currently *effective_ids* is only supported on Unix platforms; it does not " +"work on Windows." +msgstr "目前仅 Unix 平台支持 *effective_ids*,Windows 不支持。" + +#: ../../library/os.rst:2834 +msgid "" +"A :class:`set` object indicating which functions in the :mod:`os` module " +"permit specifying their *path* parameter as an open file descriptor on the " +"local platform. Different platforms provide different features, and the " +"underlying functionality Python uses to accept open file descriptors as " +"*path* arguments is not available on all platforms Python supports." +msgstr "" +"一个 :class:`set` 对象,指示在当前平台上 :mod:`os` 模块中的哪些函数接受一个打开的文件描述符作为 *path* " +"参数。不同平台提供的功能不同,且 Python 所使用到的底层函数(用于实现接受描述符作为 *path*)并非在 Python 支持的所有平台上都可用。" + +#: ../../library/os.rst:2841 +msgid "" +"To determine whether a particular function permits specifying an open file " +"descriptor for its *path* parameter, use the ``in`` operator on " +"``supports_fd``. As an example, this expression evaluates to ``True`` if " +":func:`os.chdir` accepts open file descriptors for *path* on your local " +"platform::" +msgstr "" +"要判断某个函数是否接受打开的文件描述符作为 *path* 参数,请在 ``supports_fd`` 前使用 ``in`` 运算符。例如,如果 " +":func:`os.chdir` 在当前平台上接受打开的文件描述符作为 *path* 参数,则此表达式的计算结果为 ``True``::" + +#: ../../library/os.rst:2854 +msgid "" +"A :class:`set` object indicating which functions in the :mod:`os` module " +"accept ``False`` for their *follow_symlinks* parameter on the local " +"platform. Different platforms provide different features, and the underlying" +" functionality Python uses to implement *follow_symlinks* is not available " +"on all platforms Python supports. For consistency's sake, functions that " +"may support *follow_symlinks* always allow specifying the parameter, but " +"will throw an exception if the functionality is used when it's not locally " +"available. (Specifying ``True`` for *follow_symlinks* is always supported " +"on all platforms.)" +msgstr "" +"一个 :class:`set` 对象,指示在当前平台上 :mod:`os` 模块中的哪些函数的 *follow_symlinks* 参数可指定为 " +"``False``。不同平台提供的功能不同,且 Python 用于实现 *follow_symlinks* 的底层函数并非在 Python " +"支持的所有平台上都可用。考虑到一致性,支持 *follow_symlinks* 的函数始终允许将其指定为 " +"``False``,但如果在底层不支持时调用了该函数,则会抛出异常。(在所有平台上始终支持将 *follow_symlinks* 指定为 " +"``True``。)" + +#: ../../library/os.rst:2864 +msgid "" +"To check whether a particular function accepts ``False`` for its " +"*follow_symlinks* parameter, use the ``in`` operator on " +"``supports_follow_symlinks``. As an example, this expression evaluates to " +"``True`` if you may specify ``follow_symlinks=False`` when calling " +":func:`os.stat` on the local platform::" +msgstr "" +"要检查某个函数的 *follow_symlinks* 参数是否可以指定为 ``False``,请在 " +"``supports_follow_symlinks`` 前使用 ``in`` 运算符。例如,如果在当前平台上调用 :func:`os.stat` " +"时可以指定 ``follow_symlinks=False``,则此表达式的计算结果为 ``True``::" + +#: ../../library/os.rst:2877 +msgid "Create a symbolic link pointing to *src* named *dst*." +msgstr "创建一个指向 *src* 的符号链接,名为 *dst*。" + +#: ../../library/os.rst:2879 +msgid "" +"On Windows, a symlink represents either a file or a directory, and does not " +"morph to the target dynamically. If the target is present, the type of the " +"symlink will be created to match. Otherwise, the symlink will be created as " +"a directory if *target_is_directory* is ``True`` or a file symlink (the " +"default) otherwise. On non-Windows platforms, *target_is_directory* is " +"ignored." +msgstr "" +"在 Windows 上,符号链接可以表示文件或目录两种类型,并且不会动态改变类型。如果目标存在,则新建链接的类型将与目标一致。否则,如果 " +"*target_is_directory* 为 ``True``,则符号链接将创建为目录链接,为 ``False`` (默认)将创建为文件链接。在非 " +"Windows 平台上,*target_is_directory* 被忽略。" + +#: ../../library/os.rst:2890 +msgid "" +"On newer versions of Windows 10, unprivileged accounts can create symlinks " +"if Developer Mode is enabled. When Developer Mode is not available/enabled, " +"the *SeCreateSymbolicLinkPrivilege* privilege is required, or the process " +"must be run as an administrator." +msgstr "" +"在 Windows 10 或更高版本上,如果启用了开发人员模式,非特权帐户可以创建符号链接。如果开发人员模式不可用/未启用,则需要 " +"*SeCreateSymbolicLinkPrivilege* 权限,或者该进程必须以管理员身份运行。" + +#: ../../library/os.rst:2896 +msgid "" +":exc:`OSError` is raised when the function is called by an unprivileged " +"user." +msgstr "当本函数由非特权账户调用时,抛出 :exc:`OSError` 异常。" + +#: ../../library/os.rst:2899 +msgid "" +"Raises an :ref:`auditing event ` ``os.symlink`` with arguments " +"``src``, ``dst``, ``dir_fd``." +msgstr "" +"引发一个 :ref:`审计事件 ` ``os.symlink`` 并附带参数 ``src``, ``dst``, " +"``dir_fd``。" + +#: ../../library/os.rst:2906 +msgid "" +"Added the *dir_fd* argument, and now allow *target_is_directory* on non-" +"Windows platforms." +msgstr "添加了 *dir_fd* 参数,现在在非 Windows 平台上允许 *target_is_directory* 参数。" + +#: ../../library/os.rst:2913 +msgid "Added support for unelevated symlinks on Windows with Developer Mode." +msgstr "针对启用了开发人员模式的 Windows,添加了非特权账户创建符号链接的支持。" + +#: ../../library/os.rst:2919 +msgid "Force write of everything to disk." +msgstr "强制将所有内容写入磁盘。" + +#: ../../library/os.rst:2928 +msgid "" +"Truncate the file corresponding to *path*, so that it is at most *length* " +"bytes in size." +msgstr "截断 *path* 对应的文件,以使其最大为 *length* 字节。" + +#: ../../library/os.rst:2933 +msgid "" +"Raises an :ref:`auditing event ` ``os.truncate`` with arguments " +"``path``, ``length``." +msgstr "" +"引发一个 :ref:`审计事件 ` ``os.truncate`` 并附带参数 ``path``, ``length``。" + +#: ../../library/os.rst:2948 +msgid "" +"Remove (delete) the file *path*. This function is semantically identical to" +" :func:`remove`; the ``unlink`` name is its traditional Unix name. Please " +"see the documentation for :func:`remove` for further information." +msgstr "" +"移除(删除)文件 *path*。该函数在语义上与 :func:`remove` 相同,``unlink`` 是其传统的 Unix 名称。请参阅 " +":func:`remove` 的文档以获取更多信息。" + +#: ../../library/os.rst:2964 +msgid "Set the access and modified times of the file specified by *path*." +msgstr "设置文件 *path* 的访问时间和修改时间。" + +#: ../../library/os.rst:2966 +msgid "" +":func:`utime` takes two optional parameters, *times* and *ns*. These specify" +" the times set on *path* and are used as follows:" +msgstr ":func:`utime` 有 *times* 和 *ns* 两个可选参数,它们指定了设置给 *path* 的时间,用法如下:" + +#: ../../library/os.rst:2969 +msgid "" +"If *ns* is specified, it must be a 2-tuple of the form ``(atime_ns, " +"mtime_ns)`` where each member is an int expressing nanoseconds." +msgstr "如果指定 *ns*,它必须是一个 ``(atime_ns, mtime_ns)`` 形式的二元组,其中每个成员都是一个表示纳秒的整数。" + +#: ../../library/os.rst:2972 +msgid "" +"If *times* is not ``None``, it must be a 2-tuple of the form ``(atime, " +"mtime)`` where each member is an int or float expressing seconds." +msgstr "" +"如果 *times* 不为 ``None``,则它必须是 ``(atime, mtime)`` 形式的二元组,其中每个成员都是一个表示秒的 int 或 " +"float。" + +#: ../../library/os.rst:2975 +msgid "" +"If *times* is ``None`` and *ns* is unspecified, this is equivalent to " +"specifying ``ns=(atime_ns, mtime_ns)`` where both times are the current " +"time." +msgstr "" +"如果 *times* 为 ``None`` 且未指定 *ns*,则相当于指定 ``ns=(atime_ns, " +"mtime_ns)``,其中两个时间均为当前时间。" + +#: ../../library/os.rst:2979 +msgid "It is an error to specify tuples for both *times* and *ns*." +msgstr "同时为 *times* 和 *ns* 指定元组会出错。" + +#: ../../library/os.rst:2981 +msgid "" +"Note that the exact times you set here may not be returned by a subsequent " +":func:`~os.stat` call, depending on the resolution with which your operating" +" system records access and modification times; see :func:`~os.stat`. The " +"best way to preserve exact times is to use the *st_atime_ns* and " +"*st_mtime_ns* fields from the :func:`os.stat` result object with the *ns* " +"parameter to `utime`." +msgstr "" +"注意,根据操作系统记录访问时间和修改时间的分辨率,后续的 :func:`~os.stat` 调用可能不会返回此处设置的确切时间。请参阅 " +":func:`~os.stat`。保留精确时间的最佳方法是使用 :func:`os.stat` 结果对象中的 *st_atime_ns* 和 " +"*st_mtime_ns* 字段,并将 *ns* 参数设置为 `utime`。" + +#: ../../library/os.rst:2992 +msgid "" +"Raises an :ref:`auditing event ` ``os.utime`` with arguments " +"``path``, ``times``, ``ns``, ``dir_fd``." +msgstr "" +"引发一个 :ref:`审计事件 ` ``os.utime`` 并附带参数 ``path``, ``times``, ``ns``, " +"``dir_fd``。" + +#: ../../library/os.rst:2994 +msgid "" +"Added support for specifying *path* as an open file descriptor, and the " +"*dir_fd*, *follow_symlinks*, and *ns* parameters." +msgstr "新增支持将 *path* 参数指定为打开的文件描述符,以及支持 *dir_fd*、*follow_symlinks* 和 *ns* 参数。" + +#: ../../library/os.rst:3008 +msgid "" +"Generate the file names in a directory tree by walking the tree either top-" +"down or bottom-up. For each directory in the tree rooted at directory *top* " +"(including *top* itself), it yields a 3-tuple ``(dirpath, dirnames, " +"filenames)``." +msgstr "" +"生成目录树中的文件名,方式是按上->下或下->上顺序浏览目录树。对于以 *top* 为根的目录树中的每个目录(包括 *top* " +"本身),它都会生成一个三元组 ``(dirpath, dirnames, filenames)``。" + +#: ../../library/os.rst:3013 +msgid "" +"*dirpath* is a string, the path to the directory. *dirnames* is a list of " +"the names of the subdirectories in *dirpath* (excluding ``'.'`` and " +"``'..'``). *filenames* is a list of the names of the non-directory files in " +"*dirpath*. Note that the names in the lists contain no path components. To " +"get a full path (which begins with *top*) to a file or directory in " +"*dirpath*, do ``os.path.join(dirpath, name)``. Whether or not the lists are" +" sorted depends on the file system. If a file is removed from or added to " +"the *dirpath* directory during generating the lists, whether a name for that" +" file be included is unspecified." +msgstr "" +"*dirpath* 是表示目录路径的字符串。 *dirnames* 是 *dirpath* 中子目录名称组成的列表 (excluding ``'.'``" +" and ``'..'``)。 *filenames* 是 *dirpath* 中非目录文件名称组成的列表。 请注意列表中的名称不带路径部分。 要获取 " +"*dirpath* 中文件或目录的完整路径(以 *top* 打头),请执行 ``os.path.join(dirpath, name)``。 " +"列表是否排序取决于具体文件系统。 如果有文件或列表生成期间被移除或添加到 *dirpath* 目录中,是否要包括该文件的名称并没有规定。" + +#: ../../library/os.rst:3023 +msgid "" +"If optional argument *topdown* is ``True`` or not specified, the triple for " +"a directory is generated before the triples for any of its subdirectories " +"(directories are generated top-down). If *topdown* is ``False``, the triple" +" for a directory is generated after the triples for all of its " +"subdirectories (directories are generated bottom-up). No matter the value of" +" *topdown*, the list of subdirectories is retrieved before the tuples for " +"the directory and its subdirectories are generated." +msgstr "" +"如果可选参数 *topdown* 为 ``True`` 或未指定,则在所有子目录的三元组之前生成父目录的三元组(目录是自上而下生成的)。如果 " +"*topdown* 为 ``False``,则在所有子目录的三元组生成之后再生成父目录的三元组(目录是自下而上生成的)。无论 *topdown* " +"为何值,在生成目录及其子目录的元组之前,都将检索全部子目录列表。" + +#: ../../library/os.rst:3031 +msgid "" +"When *topdown* is ``True``, the caller can modify the *dirnames* list in-" +"place (perhaps using :keyword:`del` or slice assignment), and :func:`walk` " +"will only recurse into the subdirectories whose names remain in *dirnames*; " +"this can be used to prune the search, impose a specific order of visiting, " +"or even to inform :func:`walk` about directories the caller creates or " +"renames before it resumes :func:`walk` again. Modifying *dirnames* when " +"*topdown* is ``False`` has no effect on the behavior of the walk, because in" +" bottom-up mode the directories in *dirnames* are generated before *dirpath*" +" itself is generated." +msgstr "" +"当 *topdown* 为 ``True`` 时,调用者可以就地修改 *dirnames* 列表(也许用到了 :keyword:`del` 或切片),而" +" :func:`walk` 将仅仅递归到仍保留在 *dirnames* 中的子目录内。这可用于减少搜索、加入特定的访问顺序,甚至可在继续 " +":func:`walk` 之前告知 :func:`walk` 由调用者新建或重命名的目录的信息。当 *topdown* 为 ``False`` 时,修改" +" *dirnames* 对 walk 的行为没有影响,因为在自下而上模式中,*dirnames* 中的目录是在 *dirpath* 本身之前生成的。" + +#: ../../library/os.rst:3040 +msgid "" +"By default, errors from the :func:`scandir` call are ignored. If optional " +"argument *onerror* is specified, it should be a function; it will be called " +"with one argument, an :exc:`OSError` instance. It can report the error to " +"continue with the walk, or raise the exception to abort the walk. Note that" +" the filename is available as the ``filename`` attribute of the exception " +"object." +msgstr "" +"默认将忽略 :func:`scandir` 调用中的错误。如果指定了可选参数 *onerror*,它应该是一个函数。出错时它会被调用,参数是一个 " +":exc:`OSError` 实例。它可以报告错误然后继续遍历,或者抛出异常然后中止遍历。注意,可以从异常对象的 ``filename`` " +"属性中获取出错的文件名。" + +#: ../../library/os.rst:3046 +msgid "" +"By default, :func:`walk` will not walk down into symbolic links that resolve" +" to directories. Set *followlinks* to ``True`` to visit directories pointed " +"to by symlinks, on systems that support them." +msgstr "" +":func:`walk` 默认不会递归进指向目录的符号链接。可以在支持符号链接的系统上将 *followlinks* 设置为 " +"``True``,以访问符号链接指向的目录。" + +#: ../../library/os.rst:3052 +msgid "" +"Be aware that setting *followlinks* to ``True`` can lead to infinite " +"recursion if a link points to a parent directory of itself. :func:`walk` " +"does not keep track of the directories it visited already." +msgstr "" +"注意,如果链接指向自身的父目录,则将 *followlinks* 设置为 ``True`` 可能导致无限递归。:func:`walk` " +"不会记录它已经访问过的目录。" + +#: ../../library/os.rst:3058 +msgid "" +"If you pass a relative pathname, don't change the current working directory " +"between resumptions of :func:`walk`. :func:`walk` never changes the current" +" directory, and assumes that its caller doesn't either." +msgstr "" +"如果传入的是相对路径,请不要在恢复 :func:`walk` 之间更改当前工作目录。:func:`walk` " +"不会更改当前目录,并假定其调用者也不会更改当前目录。" + +#: ../../library/os.rst:3062 ../../library/os.rst:3123 +msgid "" +"This example displays the number of bytes taken by non-directory files in " +"each directory under the starting directory, except that it doesn't look " +"under any CVS subdirectory::" +msgstr "下面的示例遍历起始目录内所有子目录,打印每个目录内的文件占用的字节数,CVS 子目录不会被遍历::" + +#: ../../library/os.rst:3075 +msgid "" +"In the next example (simple implementation of :func:`shutil.rmtree`), " +"walking the tree bottom-up is essential, :func:`rmdir` doesn't allow " +"deleting a directory before the directory is empty::" +msgstr "" +"在下一个示例(:func:`shutil.rmtree` 的简单实现)中,必须使树自下而上遍历,因为 :func:`rmdir` " +"只允许在目录为空时删除目录::" + +#: ../../library/os.rst:3090 +msgid "" +"Raises an :ref:`auditing event ` ``os.walk`` with arguments " +"``top``, ``topdown``, ``onerror``, ``followlinks``." +msgstr "" +"引发一个 :ref:`审计事件 ` ``os.walk`` 并附带参数 ``top``, ``topdown``, " +"``onerror``, ``followlinks``。" + +#: ../../library/os.rst:3092 +msgid "" +"This function now calls :func:`os.scandir` instead of :func:`os.listdir`, " +"making it faster by reducing the number of calls to :func:`os.stat`." +msgstr "" +"现在,本函数调用的是 :func:`os.scandir` 而不是 :func:`os.listdir`,从而减少了调用 :func:`os.stat`" +" 的次数而变得更快。" + +#: ../../library/os.rst:3106 +msgid "" +"This behaves exactly like :func:`walk`, except that it yields a 4-tuple " +"``(dirpath, dirnames, filenames, dirfd)``, and it supports ``dir_fd``." +msgstr "" +"本方法的行为与 :func:`walk` 完全一样,除了它产生的是 4 元组 ``(dirpath, dirnames, filenames, " +"dirfd)``,并且它支持 ``dir_fd``。" + +#: ../../library/os.rst:3109 +msgid "" +"*dirpath*, *dirnames* and *filenames* are identical to :func:`walk` output, " +"and *dirfd* is a file descriptor referring to the directory *dirpath*." +msgstr "" +"*dirpath*、*dirnames* 和 *filenames* 与 :func:`walk` 输出的相同,*dirfd* 是指向目录 " +"*dirpath* 的文件描述符。" + +#: ../../library/os.rst:3112 +msgid "" +"This function always supports :ref:`paths relative to directory descriptors " +"` and :ref:`not following symlinks `. Note however" +" that, unlike other functions, the :func:`fwalk` default value for " +"*follow_symlinks* is ``False``." +msgstr "" +"本函数始终支持 :ref:`基于目录描述符的相对路径 ` 和 :ref:`不跟踪符号链接 " +"`。但是请注意,与其他函数不同,:func:`fwalk` 的 *follow_symlinks* 的默认值为 " +"``False``。" + +#: ../../library/os.rst:3119 +msgid "" +"Since :func:`fwalk` yields file descriptors, those are only valid until the " +"next iteration step, so you should duplicate them (e.g. with :func:`dup`) if" +" you want to keep them longer." +msgstr "" +"由于 :func:`fwalk` 会生成文件描述符,而它们仅在下一个迭代步骤前有效,因此如果要将描述符保留更久,则应复制它们(比如使用 " +":func:`dup`)。" + +#: ../../library/os.rst:3136 +msgid "" +"In the next example, walking the tree bottom-up is essential: :func:`rmdir` " +"doesn't allow deleting a directory before the directory is empty::" +msgstr "在下一个示例中,必须使树自下而上遍历,因为 :func:`rmdir` 只允许在目录为空时删除目录::" + +#: ../../library/os.rst:3151 +msgid "" +"Raises an :ref:`auditing event ` ``os.fwalk`` with arguments " +"``top``, ``topdown``, ``onerror``, ``follow_symlinks``, ``dir_fd``." +msgstr "" +"引发一个 :ref:`审计事件 ` ``os.fwalk`` 并附带参数 ``top``, ``topdown``, " +"``onerror``, ``follow_symlinks``, ``dir_fd``。" + +#: ../../library/os.rst:3160 +msgid "Added support for :class:`bytes` paths." +msgstr "添加了对 :class:`bytes` 类型路径的支持。" + +#: ../../library/os.rst:3166 +msgid "" +"Create an anonymous file and return a file descriptor that refers to it. " +"*flags* must be one of the ``os.MFD_*`` constants available on the system " +"(or a bitwise ORed combination of them). By default, the new file " +"descriptor is :ref:`non-inheritable `." +msgstr "" +"创建一个匿名文件,返回指向该文件的文件描述符。*flags* 必须是系统上可用的 ``os.MFD_*`` " +"常量之一(或将它们按位“或”组合起来)。新文件描述符默认是 :ref:`不可继承的 `。" + +#: ../../library/os.rst:3171 +msgid "" +"The name supplied in *name* is used as a filename and will be displayed as " +"the target of the corresponding symbolic link in the directory " +"``/proc/self/fd/``. The displayed name is always prefixed with ``memfd:`` " +"and serves only for debugging purposes. Names do not affect the behavior of " +"the file descriptor, and as such multiple files can have the same name " +"without any side effects." +msgstr "" +"*name* 提供的名称会被用作文件名,并且 ``/proc/self/fd/`` 目录中相应符号链接的目标将显示为该名称。显示的名称始终以 " +"``memfd:`` 为前缀,并且仅用于调试目的。名称不会影响文件描述符的行为,因此多个文件可以有相同的名称,不会有副作用。" + +#: ../../library/os.rst:3179 +msgid "" +":ref:`Availability `: Linux 3.17 or newer with glibc 2.27 or " +"newer." +msgstr ":ref:`可用性 `:Linux 3.17 或更高版本,且装有 glibc 2.27 或更高版本。" + +#: ../../library/os.rst:3201 +msgid "These flags can be passed to :func:`memfd_create`." +msgstr "以上标志位可以传递给 :func:`memfd_create`。" + +#: ../../library/os.rst:3205 +msgid "" +":ref:`Availability `: Linux 3.17 or newer with glibc 2.27 or " +"newer. The ``MFD_HUGE*`` flags are only available since Linux 4.14." +msgstr "" +":ref:`可用性 `:Linux 3.17 或更高版本,且装有 glibc 2.27 " +"或更高版本。``MFD_HUGE*`` 标志仅在 Linux 4.14 及以上可用。" + +#: ../../library/os.rst:3210 +msgid "Linux extended attributes" +msgstr "Linux 扩展属性" + +#: ../../library/os.rst:3214 +msgid "These functions are all available on Linux only." +msgstr "这些函数仅在 Linux 上可用。" + +#: ../../library/os.rst:3218 +msgid "" +"Return the value of the extended filesystem attribute *attribute* for " +"*path*. *attribute* can be bytes or str (directly or indirectly through the " +":class:`PathLike` interface). If it is str, it is encoded with the " +"filesystem encoding." +msgstr "" +"返回 *path* 的扩展文件系统属性 *attribute* 的值。*attribute* 可以是 bytes 或 str (直接传入或通过 " +":class:`PathLike` 接口间接传入)。如果是 str,则使用文件系统编码来编码字符串。" + +#: ../../library/os.rst:3226 +msgid "" +"Raises an :ref:`auditing event ` ``os.getxattr`` with arguments " +"``path``, ``attribute``." +msgstr "" +"引发一个 :ref:`审计事件 ` ``os.getxattr`` 并附带参数 ``path``, ``attribute``。" + +#: ../../library/os.rst:3228 ../../library/os.rst:3260 +#: ../../library/os.rst:3285 +msgid "Accepts a :term:`path-like object` for *path* and *attribute*." +msgstr "接受一个 :term:`类路径对象 ` 作为 *path* 和 *attribute*。" + +#: ../../library/os.rst:3234 +msgid "" +"Return a list of the extended filesystem attributes on *path*. The " +"attributes in the list are represented as strings decoded with the " +"filesystem encoding. If *path* is ``None``, :func:`listxattr` will examine " +"the current directory." +msgstr "" +"返回一个列表,包含 *path* 的所有扩展文件系统属性。列表中的属性都表示为字符串,它们是根据文件系统编码解码出来的。如果 *path* 为 " +"``None``,则 :func:`listxattr` 将检查当前目录。" + +#: ../../library/os.rst:3242 +msgid "" +"Raises an :ref:`auditing event ` ``os.listxattr`` with argument " +"``path``." +msgstr "引发一个 :ref:`审计事件 ` ``os.listxattr`` 并附带参数 ``path``。" + +#: ../../library/os.rst:3250 +msgid "" +"Removes the extended filesystem attribute *attribute* from *path*. " +"*attribute* should be bytes or str (directly or indirectly through the " +":class:`PathLike` interface). If it is a string, it is encoded with the " +"filesystem encoding." +msgstr "" +"从 *path* 中删除扩展文件系统属性 *attribute*。*attribute* 应该是 bytes 或 str (直接传入或通过 " +":class:`PathLike` 接口间接传入)。如果是 str,则使用文件系统编码来编码字符串。" + +#: ../../library/os.rst:3258 +msgid "" +"Raises an :ref:`auditing event ` ``os.removexattr`` with arguments" +" ``path``, ``attribute``." +msgstr "" +"引发一个 :ref:`审计事件 ` ``os.removexattr`` 并附带参数 ``path``, " +"``attribute``。" + +#: ../../library/os.rst:3266 +msgid "" +"Set the extended filesystem attribute *attribute* on *path* to *value*. " +"*attribute* must be a bytes or str with no embedded NULs (directly or " +"indirectly through the :class:`PathLike` interface). If it is a str, it is " +"encoded with the filesystem encoding. *flags* may be :data:`XATTR_REPLACE` " +"or :data:`XATTR_CREATE`. If :data:`XATTR_REPLACE` is given and the attribute" +" does not exist, ``ENODATA`` will be raised. If :data:`XATTR_CREATE` is " +"given and the attribute already exists, the attribute will not be created " +"and ``EEXISTS`` will be raised." +msgstr "" +"将 *path* 的扩展文件系统属性 *attribute* 设为 *value*。 *attribute* 必须是没有内嵌 NUL " +"的字节串或字符串(直接或通过 :class:`PathLike` 间接传入)。 如果是字符串,则使用文件系统编码格式进行编码。 *flags* 可以为 " +":data:`XATTR_REPLACE` 或 :data:`XATTR_CREATE`。 如果指定 :data:`XATTR_REPLACE` " +"而该属性不存在,则将引发 ``ENODATA``。 如果指定 :data:`XATTR_CREATE` 而该属性已存在,则将不创建该属性并将引发 " +"``EEXISTS``。" + +#: ../../library/os.rst:3280 +msgid "" +"A bug in Linux kernel versions less than 2.6.39 caused the flags argument to" +" be ignored on some filesystems." +msgstr "Linux kernel 2.6.39 以下版本的一个 bug 导致在某些文件系统上,flags 参数会被忽略。" + +#: ../../library/os.rst:3283 +msgid "" +"Raises an :ref:`auditing event ` ``os.setxattr`` with arguments " +"``path``, ``attribute``, ``value``, ``flags``." +msgstr "" +"引发一个 :ref:`审计事件 ` ``os.setxattr`` 并附带参数 ``path``, ``attribute``, " +"``value``, ``flags``。" + +#: ../../library/os.rst:3291 +msgid "" +"The maximum size the value of an extended attribute can be. Currently, this " +"is 64 KiB on Linux." +msgstr "一条扩展属性的值的最大大小。在当前的 Linux 上是 64 KiB。" + +#: ../../library/os.rst:3297 +msgid "" +"This is a possible value for the flags argument in :func:`setxattr`. It " +"indicates the operation must create an attribute." +msgstr "这是 :func:`setxattr` 的 flags 参数的可取值,它表示该操作必须创建一个属性。" + +#: ../../library/os.rst:3303 +msgid "" +"This is a possible value for the flags argument in :func:`setxattr`. It " +"indicates the operation must replace an existing attribute." +msgstr "这是 :func:`setxattr` 的 flags 参数的可取值,它表示该操作必须替换现有属性。" + +#: ../../library/os.rst:3310 +msgid "Process Management" +msgstr "进程管理" + +#: ../../library/os.rst:3312 +msgid "These functions may be used to create and manage processes." +msgstr "下列函数可用于创建和管理进程。" + +#: ../../library/os.rst:3314 +msgid "" +"The various :func:`exec\\* ` functions take a list of arguments for " +"the new program loaded into the process. In each case, the first of these " +"arguments is passed to the new program as its own name rather than as an " +"argument a user may have typed on a command line. For the C programmer, " +"this is the ``argv[0]`` passed to a program's :c:func:`main`. For example, " +"``os.execv('/bin/echo', ['foo', 'bar'])`` will only print ``bar`` on " +"standard output; ``foo`` will seem to be ignored." +msgstr "" +"所有 :func:`exec\\* ` " +"函数都接受一个参数列表,用来给新程序加载到它的进程中。在所有情况下,传递给新程序的第一个参数是程序本身的名称,而不是用户在命令行上输入的参数。对于 C " +"程序员来说,这就是传递给 :c:func:`main` 函数的 ``argv[0]``。例如,``os.execv('/bin/echo', " +"['foo', 'bar'])`` 只会在标准输出上打印 ``bar``,而 ``foo`` 会被忽略。" + +#: ../../library/os.rst:3325 +msgid "" +"Generate a :const:`SIGABRT` signal to the current process. On Unix, the " +"default behavior is to produce a core dump; on Windows, the process " +"immediately returns an exit code of ``3``. Be aware that calling this " +"function will not call the Python signal handler registered for " +":const:`SIGABRT` with :func:`signal.signal`." +msgstr "" +"发送 :const:`SIGABRT` 信号到当前进程。在 Unix 上,默认行为是生成一个核心转储。在 Windows 上,该进程立即返回退出代码 " +"``3``。请注意,使用 :func:`signal.signal` 可以为 :const:`SIGABRT` 注册 Python " +"信号处理程序,而调用本函数将不会调用按前述方法注册的程序。" + +#: ../../library/os.rst:3334 +msgid "Add a path to the DLL search path." +msgstr "将路径添加到 DLL 搜索路径。" + +#: ../../library/os.rst:3336 +msgid "" +"This search path is used when resolving dependencies for imported extension " +"modules (the module itself is resolved through :data:`sys.path`), and also " +"by :mod:`ctypes`." +msgstr "" +"当需要解析扩展模块的依赖时(扩展模块本身通过 :data:`sys.path` 解析),会使用该搜索路径,:mod:`ctypes` " +"也会使用该搜索路径。" + +#: ../../library/os.rst:3340 +msgid "" +"Remove the directory by calling **close()** on the returned object or using " +"it in a :keyword:`with` statement." +msgstr "要移除目录,可以在返回的对象上调用 **close()**,也可以在 :keyword:`with` 语句内使用本方法。" + +#: ../../library/os.rst:3343 +msgid "" +"See the `Microsoft documentation " +"`_ for more" +" information about how DLLs are loaded." +msgstr "" +"参阅 `Microsoft 文档 " +"`_ 获取如何加载 " +"DLL 的信息。" + +#: ../../library/os.rst:3347 +msgid "" +"Raises an :ref:`auditing event ` ``os.add_dll_directory`` with " +"argument ``path``." +msgstr "引发一个 :ref:`审计事件 ` ``os.add_dll_directory`` 并附带参数 ``path``。" + +#: ../../library/os.rst:3351 +msgid "" +"Previous versions of CPython would resolve DLLs using the default behavior " +"for the current process. This led to inconsistencies, such as only sometimes" +" searching :envvar:`PATH` or the current working directory, and OS functions" +" such as ``AddDllDirectory`` having no effect." +msgstr "" +"早期版本的 CPython 解析 DLL 时用的是当前进程的默认行为。这会导致不一致,比如不是每次都会去搜索 :envvar:`PATH` " +"和当前工作目录,且系统函数(如 ``AddDllDirectory`` )失效。" + +#: ../../library/os.rst:3358 +msgid "" +"In 3.8, the two primary ways DLLs are loaded now explicitly override the " +"process-wide behavior to ensure consistency. See the :ref:`porting notes " +"` for information on updating libraries." +msgstr "" +"在 3.8 中,DLL 的两种主要加载方式现在可以显式覆盖进程的行为,以确保一致性。请参阅 :ref:`移植说明 " +"` 了解如何更新你的库。" + +#: ../../library/os.rst:3373 +msgid "" +"These functions all execute a new program, replacing the current process; " +"they do not return. On Unix, the new executable is loaded into the current " +"process, and will have the same process id as the caller. Errors will be " +"reported as :exc:`OSError` exceptions." +msgstr "" +"这些函数都将执行一个新程序,以替换当前进程。它们没有返回值。在 Unix 上,新程序会加载到当前进程中,且进程号与调用者相同。过程中的错误会被报告为 " +":exc:`OSError` 异常。" + +#: ../../library/os.rst:3378 +msgid "" +"The current process is replaced immediately. Open file objects and " +"descriptors are not flushed, so if there may be data buffered on these open " +"files, you should flush them using :func:`sys.stdout.flush` or " +":func:`os.fsync` before calling an :func:`exec\\* ` function." +msgstr "" +"当前进程会被立即替换。打开的文件对象和描述符都不会刷新,因此如果这些文件上可能缓冲了数据,则应在调用 :func:`exec\\* ` " +"函数之前使用 :func:`sys.stdout.flush` 或 :func:`os.fsync` 刷新它们。" + +#: ../../library/os.rst:3384 +msgid "" +"The \"l\" and \"v\" variants of the :func:`exec\\* ` functions differ" +" in how command-line arguments are passed. The \"l\" variants are perhaps " +"the easiest to work with if the number of parameters is fixed when the code " +"is written; the individual parameters simply become additional parameters to" +" the :func:`execl\\*` functions. The \"v\" variants are good when the " +"number of parameters is variable, with the arguments being passed in a list " +"or tuple as the *args* parameter. In either case, the arguments to the " +"child process should start with the name of the command being run, but this " +"is not enforced." +msgstr "" +":func:`exec\\* ` 函数的 \"l\" 和 \"v\" 变体不同在于命令行参数的传递方式。如果在编码时固定了参数数量,则 " +"\"l\" 变体可能是最方便的,各参数作为 :func:`execl\\*` 函数的附加参数传入即可。当参数数量可变时,\"v\" " +"变体更方便,参数以列表或元组的形式作为 *args* 参数传递。在这两种情况下,子进程的第一个参数都应该是即将运行的命令名称,但这不是强制性的。" + +#: ../../library/os.rst:3393 +msgid "" +"The variants which include a \"p\" near the end (:func:`execlp`, " +":func:`execlpe`, :func:`execvp`, and :func:`execvpe`) will use the " +":envvar:`PATH` environment variable to locate the program *file*. When the " +"environment is being replaced (using one of the :func:`exec\\*e ` " +"variants, discussed in the next paragraph), the new environment is used as " +"the source of the :envvar:`PATH` variable. The other variants, " +":func:`execl`, :func:`execle`, :func:`execv`, and :func:`execve`, will not " +"use the :envvar:`PATH` variable to locate the executable; *path* must " +"contain an appropriate absolute or relative path." +msgstr "" +"结尾包含 \"p\" 的变体(:func:`execlp`、:func:`execlpe`、:func:`execvp` 和 " +":func:`execvpe` )将使用 :envvar:`PATH` 环境变量来查找程序 *file*。当环境被替换时(使用下一段讨论的 " +":func:`exec\\*e ` 变体之一),:envvar:`PATH` 变量将来自于新环境。其他变体 " +":func:`execl`、:func:`execle`、:func:`execv` 和 :func:`execve` 不使用 " +":envvar:`PATH` 变量来查找程序,因此 *path* 必须包含正确的绝对或相对路径。" + +#: ../../library/os.rst:3403 +msgid "" +"For :func:`execle`, :func:`execlpe`, :func:`execve`, and :func:`execvpe` " +"(note that these all end in \"e\"), the *env* parameter must be a mapping " +"which is used to define the environment variables for the new process (these" +" are used instead of the current process' environment); the functions " +":func:`execl`, :func:`execlp`, :func:`execv`, and :func:`execvp` all cause " +"the new process to inherit the environment of the current process." +msgstr "" +"对于 :func:`execle`、:func:`execlpe`、:func:`execve` 和 :func:`execvpe` (都以 \"e\"" +" 结尾),*env* 参数是一个映射,用于定义新进程的环境变量(代替当前进程的环境变量)。而函数 " +":func:`execl`、:func:`execlp`、:func:`execv` 和 :func:`execvp` " +"会将当前进程的环境变量过继给新进程。" + +#: ../../library/os.rst:3410 +msgid "" +"For :func:`execve` on some platforms, *path* may also be specified as an " +"open file descriptor. This functionality may not be supported on your " +"platform; you can check whether or not it is available using " +":data:`os.supports_fd`. If it is unavailable, using it will raise a " +":exc:`NotImplementedError`." +msgstr "" +"某些平台上的 :func:`execve` 可以将 *path* 指定为打开的文件描述符。当前平台可能不支持此功能,可以使用 " +":data:`os.supports_fd` 检查它是否支持。如果不可用,则使用它会抛出 :exc:`NotImplementedError` 异常。" + +#: ../../library/os.rst:3415 +msgid "" +"Raises an :ref:`auditing event ` ``os.exec`` with arguments " +"``path``, ``args``, ``env``." +msgstr "" +"引发一个 :ref:`审计事件 ` ``os.exec`` 并附带参数 ``path``, ``args``, ``env``。" + +#: ../../library/os.rst:3419 +msgid "" +"Added support for specifying *path* as an open file descriptor for " +":func:`execve`." +msgstr "新增支持将 :func:`execve` 的 *path* 参数指定为打开的文件描述符。" + +#: ../../library/os.rst:3428 +msgid "" +"Exit the process with status *n*, without calling cleanup handlers, flushing" +" stdio buffers, etc." +msgstr "以状态码 *n* 退出进程,不会调用清理处理程序,不会刷新 stdio,等等。" + +#: ../../library/os.rst:3433 +msgid "" +"The standard way to exit is ``sys.exit(n)``. :func:`_exit` should normally " +"only be used in the child process after a :func:`fork`." +msgstr "" +"退出的标准方法是使用 ``sys.exit(n)``。而 :func:`_exit` 通常只应在 :func:`fork` 出的子进程中使用。" + +#: ../../library/os.rst:3436 +msgid "" +"The following exit codes are defined and can be used with :func:`_exit`, " +"although they are not required. These are typically used for system " +"programs written in Python, such as a mail server's external command " +"delivery program." +msgstr "" +"以下是已定义的退出代码,可以用于 :func:`_exit`,尽管它们不是必需的。这些退出代码通常用于 Python " +"编写的系统程序,例如邮件服务器的外部命令传递程序。" + +#: ../../library/os.rst:3442 +msgid "" +"Some of these may not be available on all Unix platforms, since there is " +"some variation. These constants are defined where they are defined by the " +"underlying platform." +msgstr "其中部分退出代码在部分 Unix 平台上可能不可用,因为平台间存在差异。如果底层平台定义了这些常量,那上层也会定义。" + +#: ../../library/os.rst:3449 +msgid "Exit code that means no error occurred." +msgstr "退出代码,表示未发生任何错误。" + +#: ../../library/os.rst:3456 +msgid "" +"Exit code that means the command was used incorrectly, such as when the " +"wrong number of arguments are given." +msgstr "退出代码,表示命令使用不正确,如给出的参数数量有误。" + +#: ../../library/os.rst:3464 +msgid "Exit code that means the input data was incorrect." +msgstr "退出代码,表示输入数据不正确。" + +#: ../../library/os.rst:3471 +msgid "Exit code that means an input file did not exist or was not readable." +msgstr "退出代码,表示某个输入文件不存在或不可读。" + +#: ../../library/os.rst:3478 +msgid "Exit code that means a specified user did not exist." +msgstr "退出代码,表示指定的用户不存在。" + +#: ../../library/os.rst:3485 +msgid "Exit code that means a specified host did not exist." +msgstr "退出代码,表示指定的主机不存在。" + +#: ../../library/os.rst:3492 +msgid "Exit code that means that a required service is unavailable." +msgstr "退出代码,表示所需的服务不可用。" + +#: ../../library/os.rst:3499 +msgid "Exit code that means an internal software error was detected." +msgstr "退出代码,表示检测到内部软件错误。" + +#: ../../library/os.rst:3506 +msgid "" +"Exit code that means an operating system error was detected, such as the " +"inability to fork or create a pipe." +msgstr "退出代码,表示检测到操作系统错误,例如无法 fork 或创建管道。" + +#: ../../library/os.rst:3514 +msgid "" +"Exit code that means some system file did not exist, could not be opened, or" +" had some other kind of error." +msgstr "退出代码,表示某些系统文件不存在、无法打开或发生其他错误。" + +#: ../../library/os.rst:3522 +msgid "" +"Exit code that means a user specified output file could not be created." +msgstr "退出代码,表示无法创建用户指定的输出文件。" + +#: ../../library/os.rst:3529 +msgid "" +"Exit code that means that an error occurred while doing I/O on some file." +msgstr "退出代码,表示对某些文件进行读写时发生错误。" + +#: ../../library/os.rst:3536 +msgid "" +"Exit code that means a temporary failure occurred. This indicates something" +" that may not really be an error, such as a network connection that couldn't" +" be made during a retryable operation." +msgstr "退出代码,表示发生了暂时性故障。它可能并非意味着真正的错误,例如在可重试的情况下无法建立网络连接。" + +#: ../../library/os.rst:3545 +msgid "" +"Exit code that means that a protocol exchange was illegal, invalid, or not " +"understood." +msgstr "退出代码,表示协议交换是非法的、无效的或无法解读的。" + +#: ../../library/os.rst:3553 +msgid "" +"Exit code that means that there were insufficient permissions to perform the" +" operation (but not intended for file system problems)." +msgstr "退出代码,表示没有足够的权限执行该操作(但不适用于文件系统问题)。" + +#: ../../library/os.rst:3561 +msgid "Exit code that means that some kind of configuration error occurred." +msgstr "退出代码,表示发生某种配置错误。" + +#: ../../library/os.rst:3568 +msgid "Exit code that means something like \"an entry was not found\"." +msgstr "退出代码,表示的内容类似于“找不到条目”。" + +#: ../../library/os.rst:3575 +msgid "" +"Fork a child process. Return ``0`` in the child and the child's process id " +"in the parent. If an error occurs :exc:`OSError` is raised." +msgstr "" +"Fork 出一个子进程。在子进程中返回 ``0``,在父进程中返回子进程的进程号。如果发生错误,则抛出 :exc:`OSError` 异常。" + +#: ../../library/os.rst:3578 +msgid "" +"Note that some platforms including FreeBSD <= 6.3 and Cygwin have known " +"issues when using ``fork()`` from a thread." +msgstr "注意,当从线程中使用 ``fork()`` 时,某些平台(包括 FreeBSD <= 6.3 和 Cygwin)存在已知问题。" + +#: ../../library/os.rst:3581 +msgid "" +"Raises an :ref:`auditing event ` ``os.fork`` with no arguments." +msgstr "引发一个不带参数的 :ref:`审计事件 ` ``os.fork``。" + +#: ../../library/os.rst:3583 +msgid "" +"Calling ``fork()`` in a subinterpreter is no longer supported " +"(:exc:`RuntimeError` is raised)." +msgstr "不再支持在子解释器中调用 ``fork()`` (将抛出 :exc:`RuntimeError` 异常)。" + +#: ../../library/os.rst:3589 +msgid "See :mod:`ssl` for applications that use the SSL module with fork()." +msgstr "有关 SSL 模块与 fork() 结合的应用,请参阅 :mod:`ssl`。" + +#: ../../library/os.rst:3596 +msgid "" +"Fork a child process, using a new pseudo-terminal as the child's controlling" +" terminal. Return a pair of ``(pid, fd)``, where *pid* is ``0`` in the " +"child, the new child's process id in the parent, and *fd* is the file " +"descriptor of the master end of the pseudo-terminal. For a more portable " +"approach, use the :mod:`pty` module. If an error occurs :exc:`OSError` is " +"raised." +msgstr "" +"Fork 出一个子进程,使用新的伪终端作为子进程的控制终端。返回一对 ``(pid, fd)``,其中 *pid* 在子进程中为 " +"``0``,这是父进程中新子进程的进程号,而 *fd* 是伪终端主设备的文件描述符。对于更便于移植的方法,请使用 :mod:`pty` " +"模块。如果发生错误,则抛出 :exc:`OSError` 异常。" + +#: ../../library/os.rst:3602 +msgid "" +"Raises an :ref:`auditing event ` ``os.forkpty`` with no arguments." +msgstr "引发一个不带参数的 :ref:`审计事件 ` ``os.forkpty``。" + +#: ../../library/os.rst:3604 +msgid "" +"Calling ``forkpty()`` in a subinterpreter is no longer supported " +"(:exc:`RuntimeError` is raised)." +msgstr "不再支持在子解释器中调用 ``forkpty()`` (将抛出 :exc:`RuntimeError` 异常)。" + +#: ../../library/os.rst:3617 +msgid "" +"Send signal *sig* to the process *pid*. Constants for the specific signals " +"available on the host platform are defined in the :mod:`signal` module." +msgstr "将信号 *sig* 发送至进程 *pid*。特定平台上可用的信号常量定义在 :mod:`signal` 模块中。" + +#: ../../library/os.rst:3620 +msgid "" +"Windows: The :data:`signal.CTRL_C_EVENT` and :data:`signal.CTRL_BREAK_EVENT`" +" signals are special signals which can only be sent to console processes " +"which share a common console window, e.g., some subprocesses. Any other " +"value for *sig* will cause the process to be unconditionally killed by the " +"TerminateProcess API, and the exit code will be set to *sig*. The Windows " +"version of :func:`kill` additionally takes process handles to be killed." +msgstr "" +"Windows: :data:`signal.CTRL_C_EVENT` 和 :data:`signal.CTRL_BREAK_EVENT` " +"信号是特殊信号,只能发送给共享同一个控制台窗口的控制台进程,如某些子进程。*sig* 取任何其他值将导致该进程被 TerminateProcess " +"API 无条件终止,且退出代码为 *sig*。Windows 版本的 :func:`kill` 还需要传入待结束进程的句柄。" + +#: ../../library/os.rst:3628 +msgid "See also :func:`signal.pthread_kill`." +msgstr "另请参阅 :func:`signal.pthread_kill`。" + +#: ../../library/os.rst:3630 +msgid "" +"Raises an :ref:`auditing event ` ``os.kill`` with arguments " +"``pid``, ``sig``." +msgstr "引发一个 :ref:`审计事件 ` ``os.kill`` 并附带参数 ``pid``, ``sig``。" + +#: ../../library/os.rst:3632 +msgid "Windows support." +msgstr "Windows 支持。" + +#: ../../library/os.rst:3642 +msgid "Send the signal *sig* to the process group *pgid*." +msgstr "将信号 *sig* 发送给进程组 *pgid*。" + +#: ../../library/os.rst:3644 +msgid "" +"Raises an :ref:`auditing event ` ``os.killpg`` with arguments " +"``pgid``, ``sig``." +msgstr "引发一个 :ref:`审计事件 ` ``os.killpg`` 并附带参数 ``pgid``, ``sig``。" + +#: ../../library/os.rst:3651 +msgid "Add *increment* to the process's \"niceness\". Return the new niceness." +msgstr "将进程的优先级(nice 值)增加 *increment*,返回新的 nice 值。" + +#: ../../library/os.rst:3658 +msgid "" +"Return a file descriptor referring to the process *pid*. This descriptor " +"can be used to perform process management without races and signals. The " +"*flags* argument is provided for future extensions; no flag values are " +"currently defined." +msgstr "" +"返回一个文件描述符,它指向进程 *pid*。该描述符可用于管理进程,避免出现竞争和信号。*flags* 参数提供给将来扩展使用,当前没有定义标志值。" + +#: ../../library/os.rst:3663 +msgid "See the :manpage:`pidfd_open(2)` man page for more details." +msgstr "更多详细信息请参阅 :manpage:`pidfd_open(2)` 手册页。" + +#: ../../library/os.rst:3665 +msgid ":ref:`Availability `: Linux 5.3+" +msgstr ":ref:`可用性 `: Linux 5.3+。" + +#: ../../library/os.rst:3671 +msgid "" +"Lock program segments into memory. The value of *op* (defined in " +"````) determines which segments are locked." +msgstr "将程序段锁定到内存中。*op* 的值(定义在 ```` 中)决定了哪些段被锁定。" + +#: ../../library/os.rst:3679 +msgid "" +"Open a pipe to or from command *cmd*. The return value is an open file " +"object connected to the pipe, which can be read or written depending on " +"whether *mode* is ``'r'`` (default) or ``'w'``. The *buffering* argument has" +" the same meaning as the corresponding argument to the built-in :func:`open`" +" function. The returned file object reads or writes text strings rather than" +" bytes." +msgstr "" +"打开一个管道,它通往 / 接受自命令 *cmd*。返回值是连接到管道的文件对象,根据 *mode* 是 ``'r'`` (默认)还是 ``'w'`` " +"决定该对象可以读取还是写入。*buffering* 参数与内置函数 :func:`open` " +"相应的参数含义相同。返回的文件对象只能读写文本字符串,不能是字节类型。" + +#: ../../library/os.rst:3686 +msgid "" +"The ``close`` method returns :const:`None` if the subprocess exited " +"successfully, or the subprocess's return code if there was an error. On " +"POSIX systems, if the return code is positive it represents the return value" +" of the process left-shifted by one byte. If the return code is negative, " +"the process was terminated by the signal given by the negated value of the " +"return code. (For example, the return value might be ``- signal.SIGKILL`` " +"if the subprocess was killed.) On Windows systems, the return value " +"contains the signed integer return code from the child process." +msgstr "" +"如果子进程成功退出,则 ``close`` 方法返回 :const:`None`。如果发生错误,则返回子进程的返回码。在 POSIX " +"系统上,如果返回码为正,则它就是进程返回值左移一个字节后的值。如果返回码为负,则进程是被信号终止的,返回码取反后就是该信号。(例如,如果子进程被终止,则返回值可能是" +" ``- signal.SIGKILL``。)在 Windows 系统上,返回值包含子进程的返回码(有符号整数)。" + +#: ../../library/os.rst:3696 +msgid "" +"On Unix, :func:`waitstatus_to_exitcode` can be used to convert the ``close``" +" method result (exit status) into an exit code if it is not ``None``. On " +"Windows, the ``close`` method result is directly the exit code (or " +"``None``)." +msgstr "" +"在 Unix 上,:func:`waitstatus_to_exitcode` 可以将 ``close`` 方法的返回值(即退出状态,不能是 " +"``None``)转换为退出码。在 Windows 上,``close`` 方法的结果直接就是退出码(或 ``None`` )。" + +#: ../../library/os.rst:3701 +msgid "" +"This is implemented using :class:`subprocess.Popen`; see that class's " +"documentation for more powerful ways to manage and communicate with " +"subprocesses." +msgstr "本方法是使用 :class:`subprocess.Popen` 实现的,如需更强大的方法来管理和沟通子进程,请参阅该类的文档。" + +#: ../../library/os.rst:3710 +msgid "Wraps the :c:func:`posix_spawn` C library API for use from Python." +msgstr "包装 :c:func:`posix_spawn` C 库 API,使其可以从 Python 调用。" + +#: ../../library/os.rst:3712 +msgid "" +"Most users should use :func:`subprocess.run` instead of :func:`posix_spawn`." +msgstr "大多数用户应使用 :func:`subprocess.run` 代替 :func:`posix_spawn`。" + +#: ../../library/os.rst:3714 +msgid "" +"The positional-only arguments *path*, *args*, and *env* are similar to " +":func:`execve`." +msgstr "" +"仅位置参数 (Positional-only arguments) *path*、*args* 和 *env* 与 :func:`execve` " +"中的类似。" + +#: ../../library/os.rst:3717 +msgid "" +"The *path* parameter is the path to the executable file. The *path* should " +"contain a directory. Use :func:`posix_spawnp` to pass an executable file " +"without directory." +msgstr "" +"*path* 形参是可执行文件的路径,*path* 中应当包含目录。 使用 :func:`posix_spawnp` 可传入不带目录的可执行文件。" + +#: ../../library/os.rst:3721 +msgid "" +"The *file_actions* argument may be a sequence of tuples describing actions " +"to take on specific file descriptors in the child process between the C " +"library implementation's :c:func:`fork` and :c:func:`exec` steps. The first " +"item in each tuple must be one of the three type indicator listed below " +"describing the remaining tuple elements:" +msgstr "" +"*file_actions* 参数可以是由元组组成的序列,序列描述了对子进程中指定文件描述符采取的操作,这些操作会在 C 库实现的 " +":c:func:`fork` 和 :c:func:`exec` " +"步骤间完成。每个元组的第一个元素必须是下面列出的三个类型指示符之一,用于描述元组剩余的元素:" + +#: ../../library/os.rst:3729 +msgid "(``os.POSIX_SPAWN_OPEN``, *fd*, *path*, *flags*, *mode*)" +msgstr "(``os.POSIX_SPAWN_OPEN``, *fd*, *path*, *flags*, *mode*)" + +#: ../../library/os.rst:3731 +msgid "Performs ``os.dup2(os.open(path, flags, mode), fd)``." +msgstr "执行 ``os.dup2(os.open(path, flags, mode), fd)``。" + +#: ../../library/os.rst:3735 +msgid "(``os.POSIX_SPAWN_CLOSE``, *fd*)" +msgstr "(``os.POSIX_SPAWN_CLOSE``, *fd*)" + +#: ../../library/os.rst:3737 +msgid "Performs ``os.close(fd)``." +msgstr "执行 ``os.close(fd)``。" + +#: ../../library/os.rst:3741 +msgid "(``os.POSIX_SPAWN_DUP2``, *fd*, *new_fd*)" +msgstr "(``os.POSIX_SPAWN_DUP2``, *fd*, *new_fd*)" + +#: ../../library/os.rst:3743 +msgid "Performs ``os.dup2(fd, new_fd)``." +msgstr "执行 ``os.dup2(fd, new_fd)``。" + +#: ../../library/os.rst:3745 +msgid "" +"These tuples correspond to the C library " +":c:func:`posix_spawn_file_actions_addopen`, " +":c:func:`posix_spawn_file_actions_addclose`, and " +":c:func:`posix_spawn_file_actions_adddup2` API calls used to prepare for the" +" :c:func:`posix_spawn` call itself." +msgstr "" +"这些元组对应于 C 库 :c:func:`posix_spawn_file_actions_addopen`, " +":c:func:`posix_spawn_file_actions_addclose` 和 " +":c:func:`posix_spawn_file_actions_adddup2` API 调用,它们为调用 " +":c:func:`posix_spawn` 自身做准备。" + +#: ../../library/os.rst:3751 +msgid "" +"The *setpgroup* argument will set the process group of the child to the " +"value specified. If the value specified is 0, the child's process group ID " +"will be made the same as its process ID. If the value of *setpgroup* is not " +"set, the child will inherit the parent's process group ID. This argument " +"corresponds to the C library :c:data:`POSIX_SPAWN_SETPGROUP` flag." +msgstr "" +"*setpgroup* 参数将子进程的进程组设置为指定值。如果指定值为 0,则子进程的进程组 ID 将与其进程 ID 相同。如果未设置 " +"*setpgroup* 值,则子进程将继承父进程的进程组 ID。本参数对应于 C 库 :c:data:`POSIX_SPAWN_SETPGROUP` " +"标志。" + +#: ../../library/os.rst:3757 +msgid "" +"If the *resetids* argument is ``True`` it will reset the effective UID and " +"GID of the child to the real UID and GID of the parent process. If the " +"argument is ``False``, then the child retains the effective UID and GID of " +"the parent. In either case, if the set-user-ID and set-group-ID permission " +"bits are enabled on the executable file, their effect will override the " +"setting of the effective UID and GID. This argument corresponds to the C " +"library :c:data:`POSIX_SPAWN_RESETIDS` flag." +msgstr "" +"如果 *resetids* 参数为 ``True``,则会将子进程的有效用户 ID 和有效组 ID 重置为父进程的实际用户 ID 和实际组 " +"ID。如果该参数为 ``False``,则子进程保留父进程的有效用户 ID 和有效组 ID。无论哪种情况,若在可执行文件上启用了 “设置用户 ID” 和" +" “设置组 ID” 权限位,它们将覆盖有效用户 ID 和有效组 ID 的设置。本参数对应于 C 库 " +":c:data:`POSIX_SPAWN_RESETIDS` 标志。" + +#: ../../library/os.rst:3765 +msgid "" +"If the *setsid* argument is ``True``, it will create a new session ID for " +"`posix_spawn`. *setsid* requires :c:data:`POSIX_SPAWN_SETSID` or " +":c:data:`POSIX_SPAWN_SETSID_NP` flag. Otherwise, :exc:`NotImplementedError` " +"is raised." +msgstr "" +"如果 *setsid* 参数为 ``True``,它将为 `posix_spawn` 新建一个会话 ID。*setsid* 需要 " +":c:data:`POSIX_SPAWN_SETSID` 或 :c:data:`POSIX_SPAWN_SETSID_NP` 标志,否则会抛出 " +":exc:`NotImplementedError` 异常。" + +#: ../../library/os.rst:3770 +msgid "" +"The *setsigmask* argument will set the signal mask to the signal set " +"specified. If the parameter is not used, then the child inherits the " +"parent's signal mask. This argument corresponds to the C library " +":c:data:`POSIX_SPAWN_SETSIGMASK` flag." +msgstr "" +"*setsigmask* 参数将信号掩码设置为指定的信号集合。如果未使用该参数,则子进程将继承父进程的信号掩码。本参数对应于 C 库 " +":c:data:`POSIX_SPAWN_SETSIGMASK` 标志。" + +#: ../../library/os.rst:3775 +msgid "" +"The *sigdef* argument will reset the disposition of all signals in the set " +"specified. This argument corresponds to the C library " +":c:data:`POSIX_SPAWN_SETSIGDEF` flag." +msgstr "" +"*sigdef* 参数将集合中所有信号的操作全部重置为默认。本参数对应于 C 库 :c:data:`POSIX_SPAWN_SETSIGDEF` 标志。" + +#: ../../library/os.rst:3779 +msgid "" +"The *scheduler* argument must be a tuple containing the (optional) scheduler" +" policy and an instance of :class:`sched_param` with the scheduler " +"parameters. A value of ``None`` in the place of the scheduler policy " +"indicates that is not being provided. This argument is a combination of the " +"C library :c:data:`POSIX_SPAWN_SETSCHEDPARAM` and " +":c:data:`POSIX_SPAWN_SETSCHEDULER` flags." +msgstr "" +"*scheduler* 参数必须是一个元组,其中包含调度器策略(可选)以及携带了调度器参数的 :class:`sched_param` " +"实例。在调度器策略所在位置为 ``None`` 表示未提供该值。本参数是 C 库 :c:data:`POSIX_SPAWN_SETSCHEDPARAM`" +" 和 :c:data:`POSIX_SPAWN_SETSCHEDULER` 标志的组合。" + +#: ../../library/os.rst:3786 ../../library/os.rst:3802 +msgid "" +"Raises an :ref:`auditing event ` ``os.posix_spawn`` with arguments" +" ``path``, ``argv``, ``env``." +msgstr "" +"引发一个 :ref:`审计事件 ` ``os.posix_spawn`` 并附带参数 ``path``, ``argv``, " +"``env``。" + +#: ../../library/os.rst:3796 +msgid "Wraps the :c:func:`posix_spawnp` C library API for use from Python." +msgstr "包装 :c:func:`posix_spawnp` C 库 API,使其可以从 Python 调用。" + +#: ../../library/os.rst:3798 +msgid "" +"Similar to :func:`posix_spawn` except that the system searches for the " +"*executable* file in the list of directories specified by the :envvar:`PATH`" +" environment variable (in the same way as for ``execvp(3)``)." +msgstr "" +"与 :func:`posix_spawn` 相似,但是系统会在 :envvar:`PATH` 环境变量指定的目录列表中搜索可执行文件 " +"*executable* (与 ``execvp(3)`` 相同)。" + +#: ../../library/os.rst:3806 +msgid "" +":ref:`Availability `: See :func:`posix_spawn` documentation." +msgstr ":ref:`可用性 `: 请参阅 :func:`posix_spawn` 文档。" + +#: ../../library/os.rst:3812 +msgid "" +"Register callables to be executed when a new child process is forked using " +":func:`os.fork` or similar process cloning APIs. The parameters are optional" +" and keyword-only. Each specifies a different call point." +msgstr "" +"注册可调用对象,在使用 :func:`os.fork` 或类似的进程克隆 API 派生新的子进程时,这些对象会运行。参数是可选的,且为仅关键字 " +"(Keyword-only) 参数。每个参数指定一个不同的调用点。" + +#: ../../library/os.rst:3817 +msgid "*before* is a function called before forking a child process." +msgstr "*before* 是一个函数,在 fork 子进程前调用。" + +#: ../../library/os.rst:3818 +msgid "" +"*after_in_parent* is a function called from the parent process after forking" +" a child process." +msgstr "*after_in_parent* 是一个函数,在 fork 子进程后从父进程调用。" + +#: ../../library/os.rst:3820 +msgid "*after_in_child* is a function called from the child process." +msgstr "*after_in_child* 是一个函数,从子进程中调用。" + +#: ../../library/os.rst:3822 +msgid "" +"These calls are only made if control is expected to return to the Python " +"interpreter. A typical :mod:`subprocess` launch will not trigger them as " +"the child is not going to re-enter the interpreter." +msgstr "" +"只有希望控制权回到 Python 解释器时,才进行这些调用。典型的 :mod:`子进程 ` " +"启动时不会触发它们,因为子进程不会重新进入解释器。" + +#: ../../library/os.rst:3826 +msgid "" +"Functions registered for execution before forking are called in reverse " +"registration order. Functions registered for execution after forking " +"(either in the parent or in the child) are called in registration order." +msgstr "在注册的函数中,用于 fork 前运行的函数将按与注册相反的顺序调用。用于 fork 后(从父进程或子进程)运行的函数按注册顺序调用。" + +#: ../../library/os.rst:3831 +msgid "" +"Note that :c:func:`fork` calls made by third-party C code may not call those" +" functions, unless it explicitly calls :c:func:`PyOS_BeforeFork`, " +":c:func:`PyOS_AfterFork_Parent` and :c:func:`PyOS_AfterFork_Child`." +msgstr "" +"注意,第三方 C 代码的 :c:func:`fork` 调用可能不会调用这些函数,除非它显式调用了 " +":c:func:`PyOS_BeforeFork`、:c:func:`PyOS_AfterFork_Parent` 和 " +":c:func:`PyOS_AfterFork_Child`。" + +#: ../../library/os.rst:3835 +msgid "There is no way to unregister a function." +msgstr "函数注册后无法注销。" + +#: ../../library/os.rst:3851 +msgid "Execute the program *path* in a new process." +msgstr "在新进程中执行程序 *path*。" + +#: ../../library/os.rst:3853 +msgid "" +"(Note that the :mod:`subprocess` module provides more powerful facilities " +"for spawning new processes and retrieving their results; using that module " +"is preferable to using these functions. Check especially the " +":ref:`subprocess-replacements` section.)" +msgstr "" +"(注意,:mod:`subprocess` 模块提供了更强大的工具来生成新进程并跟踪执行结果,使用该模块比使用这些函数更好。尤其应当检查 " +":ref:`subprocess-replacements` 部分。)" + +#: ../../library/os.rst:3858 +msgid "" +"If *mode* is :const:`P_NOWAIT`, this function returns the process id of the " +"new process; if *mode* is :const:`P_WAIT`, returns the process's exit code " +"if it exits normally, or ``-signal``, where *signal* is the signal that " +"killed the process. On Windows, the process id will actually be the process" +" handle, so can be used with the :func:`waitpid` function." +msgstr "" +"*mode* 为 :const:`P_NOWAIT` 时,本函数返回新进程的进程号。*mode* 为 :const:`P_WAIT` " +"时,如果进程正常退出,返回退出代码,如果被终止,返回 ``-signal``,其中 *signal* 是终止进程的信号。在 Windows " +"上,进程号实际上是进程句柄,因此可以与 :func:`waitpid` 函数一起使用。" + +#: ../../library/os.rst:3864 +msgid "" +"Note on VxWorks, this function doesn't return ``-signal`` when the new " +"process is killed. Instead it raises OSError exception." +msgstr "注意在 VxWorks 上,新进程被终止时,本函数不会返回 ``-signal``,而是会抛出 OSError 异常。" + +#: ../../library/os.rst:3867 +msgid "" +"The \"l\" and \"v\" variants of the :func:`spawn\\* ` functions " +"differ in how command-line arguments are passed. The \"l\" variants are " +"perhaps the easiest to work with if the number of parameters is fixed when " +"the code is written; the individual parameters simply become additional " +"parameters to the :func:`spawnl\\*` functions. The \"v\" variants are good " +"when the number of parameters is variable, with the arguments being passed " +"in a list or tuple as the *args* parameter. In either case, the arguments " +"to the child process must start with the name of the command being run." +msgstr "" +":func:`spawn\\* ` 函数的 \"l\" 和 \"v\" 变体不同在于命令行参数的传递方式。如果在编码时固定了参数数量,则" +" \"l\" 变体可能是最方便的,各参数作为 :func:`spawnl\\*` 函数的附加参数传入即可。当参数数量可变时,\"v\" " +"变体更方便,参数以列表或元组的形式作为 *args* 参数传递。在这两种情况下,子进程的第一个参数都必须是即将运行的命令名称。" + +#: ../../library/os.rst:3876 +msgid "" +"The variants which include a second \"p\" near the end (:func:`spawnlp`, " +":func:`spawnlpe`, :func:`spawnvp`, and :func:`spawnvpe`) will use the " +":envvar:`PATH` environment variable to locate the program *file*. When the " +"environment is being replaced (using one of the :func:`spawn\\*e ` " +"variants, discussed in the next paragraph), the new environment is used as " +"the source of the :envvar:`PATH` variable. The other variants, " +":func:`spawnl`, :func:`spawnle`, :func:`spawnv`, and :func:`spawnve`, will " +"not use the :envvar:`PATH` variable to locate the executable; *path* must " +"contain an appropriate absolute or relative path." +msgstr "" +"结尾包含第二个 \"p\" 的变体(:func:`spawnlp`、:func:`spawnlpe`、:func:`spawnvp` 和 " +":func:`spawnvpe`)将使用 :envvar:`PATH` 环境变量来查找程序 *file*。当环境被替换时(使用下一段讨论的 " +":func:`spawn\\*e ` 变体之一),:envvar:`PATH` 变量将来自于新环境。其他变体 " +":func:`spawnl`、:func:`spawnle`、:func:`spawnv` 和 :func:`spawnve` 不使用 " +":envvar:`PATH` 变量来查找程序,因此 *path* 必须包含正确的绝对或相对路径。" + +#: ../../library/os.rst:3886 +msgid "" +"For :func:`spawnle`, :func:`spawnlpe`, :func:`spawnve`, and :func:`spawnvpe`" +" (note that these all end in \"e\"), the *env* parameter must be a mapping " +"which is used to define the environment variables for the new process (they " +"are used instead of the current process' environment); the functions " +":func:`spawnl`, :func:`spawnlp`, :func:`spawnv`, and :func:`spawnvp` all " +"cause the new process to inherit the environment of the current process. " +"Note that keys and values in the *env* dictionary must be strings; invalid " +"keys or values will cause the function to fail, with a return value of " +"``127``." +msgstr "" +"对于 :func:`spawnle`、:func:`spawnlpe`、:func:`spawnve` 和 :func:`spawnvpe` (都以 " +"\"e\" 结尾),*env* 参数是一个映射,用于定义新进程的环境变量(代替当前进程的环境变量)。而函数 " +":func:`spawnl`、:func:`spawnlp`、:func:`spawnv` 和 :func:`spawnvp` " +"会将当前进程的环境变量过继给新进程。注意,*env* 字典中的键和值必须是字符串。无效的键或值将导致函数出错,返回值为 ``127``。" + +#: ../../library/os.rst:3895 +msgid "" +"As an example, the following calls to :func:`spawnlp` and :func:`spawnvpe` " +"are equivalent::" +msgstr "例如,以下对 :func:`spawnlp` 和 :func:`spawnvpe` 的调用是等效的::" + +#: ../../library/os.rst:3904 +msgid "" +"Raises an :ref:`auditing event ` ``os.spawn`` with arguments " +"``mode``, ``path``, ``args``, ``env``." +msgstr "" +"引发一个 :ref:`审计事件 ` ``os.spawn`` 并附带参数 ``mode``, ``path``, ``args``," +" ``env``。" + +#: ../../library/os.rst:3910 +msgid "" +":ref:`Availability `: Unix, Windows. :func:`spawnlp`, " +":func:`spawnlpe`, :func:`spawnvp` and :func:`spawnvpe` are not available on " +"Windows. :func:`spawnle` and :func:`spawnve` are not thread-safe on " +"Windows; we advise you to use the :mod:`subprocess` module instead." +msgstr "" +":ref:`可用性 `: Unix, " +"Windows。:func:`spawnlp`、:func:`spawnlpe`、:func:`spawnvp` 和 :func:`spawnvpe` " +"在 Windows 上不可用。:func:`spawnle` 和 :func:`spawnve` 在 Windows 上不是线程安全的,建议使用 " +":mod:`subprocess` 模块替代。" + +#: ../../library/os.rst:3918 +msgid "" +"Possible values for the *mode* parameter to the :func:`spawn\\* ` " +"family of functions. If either of these values is given, the " +":func:`spawn\\*` functions will return as soon as the new process has been " +"created, with the process id as the return value." +msgstr "" +":func:`spawn\\* ` 系列函数的 *mode* 参数的可取值。如果给出这些值中的任何一个,则 " +":func:`spawn\\*` 函数将在创建新进程后立即返回,且返回值为进程号。" + +#: ../../library/os.rst:3928 +msgid "" +"Possible value for the *mode* parameter to the :func:`spawn\\* ` " +"family of functions. If this is given as *mode*, the :func:`spawn\\*` " +"functions will not return until the new process has run to completion and " +"will return the exit code of the process the run is successful, or " +"``-signal`` if a signal kills the process." +msgstr "" +":func:`spawn\\* ` 系列函数的 *mode* 参数的可取值。如果将 *mode* 指定为该值,则 " +":func:`spawn\\*` 函数将在新进程运行完毕后返回,运行成功则返回进程的退出代码,被信号终止则返回 ``-signal``。" + +#: ../../library/os.rst:3940 +msgid "" +"Possible values for the *mode* parameter to the :func:`spawn\\* ` " +"family of functions. These are less portable than those listed above. " +":const:`P_DETACH` is similar to :const:`P_NOWAIT`, but the new process is " +"detached from the console of the calling process. If :const:`P_OVERLAY` is " +"used, the current process will be replaced; the :func:`spawn\\* ` " +"function will not return." +msgstr "" +":func:`spawn\\* ` 系列函数的 *mode* " +"参数的可取值。它们比上面列出的值可移植性差。:const:`P_DETACH` 与 :const:`P_NOWAIT` " +"相似,但是新进程会与父进程的控制台脱离。使用 :const:`P_OVERLAY` 则会替换当前进程,:func:`spawn\\* `" +" 函数将不会返回。" + +#: ../../library/os.rst:3951 +msgid "Start a file with its associated application." +msgstr "使用已关联的应用程序打开文件。" + +#: ../../library/os.rst:3953 +msgid "" +"When *operation* is not specified or ``'open'``, this acts like double-" +"clicking the file in Windows Explorer, or giving the file name as an " +"argument to the :program:`start` command from the interactive command shell:" +" the file is opened with whatever application (if any) its extension is " +"associated." +msgstr "" +"当 *operation* 未指定或指定为 ``'open'`` 时,这类似于在 Windows 资源管理器中双击文件,或在交互式命令行中将文件名作为 " +":program:`start` 命令的参数:通过扩展名相关联的应用程序(如果有)打开文件。" + +#: ../../library/os.rst:3958 +msgid "" +"When another *operation* is given, it must be a \"command verb\" that " +"specifies what should be done with the file. Common verbs documented by " +"Microsoft are ``'print'`` and ``'edit'`` (to be used on files) as well as " +"``'explore'`` and ``'find'`` (to be used on directories)." +msgstr "" +"当指定另一个 *operation* 时,它必须是一个“命令动词” (\"command verb\"),该词指定对文件执行的操作。Microsoft " +"文档中的常用动词有 ``'print'`` 和 ``'edit'`` (用于文件),以及 ``'explore'`` 和 ``'find'`` " +"(用于目录)。" + +#: ../../library/os.rst:3963 +msgid "" +":func:`startfile` returns as soon as the associated application is launched." +" There is no option to wait for the application to close, and no way to " +"retrieve the application's exit status. The *path* parameter is relative to" +" the current directory. If you want to use an absolute path, make sure the " +"first character is not a slash (``'/'``); the underlying Win32 " +":c:func:`ShellExecute` function doesn't work if it is. Use the " +":func:`os.path.normpath` function to ensure that the path is properly " +"encoded for Win32." +msgstr "" +"关联的应用程序启动后 :func:`startfile` 就会立即返回。 本函数没有等待应用程序关闭的选项,也没有办法检索应用程序的退出状态。 " +"*path* 形参是基于当前目录的相对路径。 如果要使用绝对路径,请确保第一个字符不是斜杠 (``'/'``);如果是斜杠的话则底层的 Win32 " +":c:func:`ShellExecute` 函数将失效。 请使用 :func:`os.path.normpath` 函数来确保路径已针对 Win32 " +"正确编码。" + +#: ../../library/os.rst:3971 +msgid "" +"To reduce interpreter startup overhead, the Win32 :c:func:`ShellExecute` " +"function is not resolved until this function is first called. If the " +"function cannot be resolved, :exc:`NotImplementedError` will be raised." +msgstr "" +"为了减少解释器的启动开销,直到第一次调用本函数后,才解析 Win32 :c:func:`ShellExecute` 函数。如果无法解析该函数​​,则抛出" +" :exc:`NotImplementedError` 异常。" + +#: ../../library/os.rst:3975 +msgid "" +"Raises an :ref:`auditing event ` ``os.startfile`` with arguments " +"``path``, ``operation``." +msgstr "" +"引发一个 :ref:`审计事件 ` ``os.startfile`` 并附带参数 ``path``, ``operation``。" + +#: ../../library/os.rst:3982 +msgid "" +"Execute the command (a string) in a subshell. This is implemented by " +"calling the Standard C function :c:func:`system`, and has the same " +"limitations. Changes to :data:`sys.stdin`, etc. are not reflected in the " +"environment of the executed command. If *command* generates any output, it " +"will be sent to the interpreter standard output stream. The C standard does " +"not specify the meaning of the return value of the C function, so the return" +" value of the Python function is system-dependent." +msgstr "" +"在子外壳程序中执行此命令(一个字符串)。 这是通过调用标准 C 函数 :c:func:`system` 来实现的,并受到同样的限制。 对 " +":data:`sys.stdin` 的更改等不会反映在所执行命令的环境中。 如果 *command* 生成了任何输出,它将被发送到解释器的标准输出流。 " +"C 标准没有指明这个 C 函数返回值的含义,因此这个 Python 函数的返回值取决于具体系统。" + +#: ../../library/os.rst:3990 +msgid "" +"On Unix, the return value is the exit status of the process encoded in the " +"format specified for :func:`wait`." +msgstr "在 Unix 上,返回值为进程的退出状态,以针对 :func:`wait` 而指定的格式进行编码。" + +#: ../../library/os.rst:3993 +msgid "" +"On Windows, the return value is that returned by the system shell after " +"running *command*. The shell is given by the Windows environment variable " +":envvar:`COMSPEC`: it is usually :program:`cmd.exe`, which returns the exit " +"status of the command run; on systems using a non-native shell, consult your" +" shell documentation." +msgstr "" +"在 Windows 上,返回值是运行 *command* 后系统 Shell 返回的值。该 Shell 由 Windows 环境变量 " +":envvar:`COMSPEC`: 给出:通常是 :program:`cmd.exe`,它会返回命令的退出状态。在使用非原生 Shell " +"的系统上,请查阅 Shell 的文档。" + +#: ../../library/os.rst:3999 +msgid "" +"The :mod:`subprocess` module provides more powerful facilities for spawning " +"new processes and retrieving their results; using that module is preferable " +"to using this function. See the :ref:`subprocess-replacements` section in " +"the :mod:`subprocess` documentation for some helpful recipes." +msgstr "" +":mod:`subprocess` 模块提供了更强大的工具来生成新进程并跟踪执行结果,使用该模块比使用本函数更好。参阅 " +":mod:`subprocess` 文档中的 :ref:`subprocess-replacements` 部分以获取有用的帮助。" + +#: ../../library/os.rst:4004 +msgid "" +"On Unix, :func:`waitstatus_to_exitcode` can be used to convert the result " +"(exit status) into an exit code. On Windows, the result is directly the exit" +" code." +msgstr "" +"在 Unix 上,:func:`waitstatus_to_exitcode` 可以将返回值(即退出状态)转换为退出码。在 Windows " +"上,返回值就是退出码。" + +#: ../../library/os.rst:4008 +msgid "" +"Raises an :ref:`auditing event ` ``os.system`` with argument " +"``command``." +msgstr "引发一个 :ref:`审计事件 ` ``os.system`` 并附带参数 ``command``。" + +#: ../../library/os.rst:4015 +msgid "" +"Returns the current global process times. The return value is an object with" +" five attributes:" +msgstr "返回当前的全局进程时间。返回值是一个有 5 个属性的对象:" + +#: ../../library/os.rst:4018 +msgid ":attr:`!user` - user time" +msgstr ":attr:`!user` - 用户时间" + +#: ../../library/os.rst:4019 +msgid ":attr:`!system` - system time" +msgstr ":attr:`!system` - 系统时间" + +#: ../../library/os.rst:4020 +msgid ":attr:`!children_user` - user time of all child processes" +msgstr ":attr:`!children_user` - 所有子进程的用户时间" + +#: ../../library/os.rst:4021 +msgid ":attr:`!children_system` - system time of all child processes" +msgstr ":attr:`!children_system` - 所有子进程的系统时间" + +#: ../../library/os.rst:4022 +msgid ":attr:`!elapsed` - elapsed real time since a fixed point in the past" +msgstr ":attr:`!elapsed` - 从过去的固定时间点起,经过的真实时间" + +#: ../../library/os.rst:4024 +msgid "" +"For backwards compatibility, this object also behaves like a five-tuple " +"containing :attr:`!user`, :attr:`!system`, :attr:`!children_user`, " +":attr:`!children_system`, and :attr:`!elapsed` in that order." +msgstr "" +"为了向后兼容,该对象的行为也类似于五元组,按照 " +":attr:`!user`,:attr:`!system`,:attr:`!children_user`,:attr:`!children_system`" +" 和 :attr:`!elapsed` 顺序组成。" + +#: ../../library/os.rst:4028 +msgid "" +"See the Unix manual page :manpage:`times(2)` and :manpage:`times(3)` manual " +"page on Unix or `the GetProcessTimes MSDN " +"`_ on Windows. On Windows, only " +":attr:`!user` and :attr:`!system` are known; the other attributes are zero." +msgstr "" +"在 Unix 上请参阅 :manpage:`times(2)` 和 :manpage:`times(3)` 手册页,在 Windows 上请参阅 " +"`the GetProcessTimes MSDN " +"`_ 。在 Windows 上,只有 :attr:`!user` 和 " +":attr:`!system` 是已知的,其他属性均为零。" + +#: ../../library/os.rst:4042 +msgid "" +"Wait for completion of a child process, and return a tuple containing its " +"pid and exit status indication: a 16-bit number, whose low byte is the " +"signal number that killed the process, and whose high byte is the exit " +"status (if the signal number is zero); the high bit of the low byte is set " +"if a core file was produced." +msgstr "" +"等待子进程执行完毕,返回一个元组,包含其 pid 和退出状态指示:一个 16 " +"位数字,其低字节是终止该进程的信号编号,高字节是退出状态码(信号编号为零的情况下),如果生成了核心文件,则低字节的高位会置位。" + +#: ../../library/os.rst:4048 ../../library/os.rst:4153 +msgid "" +":func:`waitstatus_to_exitcode` can be used to convert the exit status into " +"an exit code." +msgstr "可以使用 :func:`waitstatus_to_exitcode` 来将退出状态转换为退出码。" + +#: ../../library/os.rst:4055 +msgid "" +":func:`waitpid` can be used to wait for the completion of a specific child " +"process and has more options." +msgstr ":func:`waitpid` 可以等待特定的子进程执行完毕,且支持更多选项。" + +#: ../../library/os.rst:4060 +msgid "" +"Wait for the completion of one or more child processes. *idtype* can be " +":data:`P_PID`, :data:`P_PGID`, :data:`P_ALL`, or :data:`P_PIDFD` on Linux. " +"*id* specifies the pid to wait on. *options* is constructed from the ORing " +"of one or more of :data:`WEXITED`, :data:`WSTOPPED` or :data:`WCONTINUED` " +"and additionally may be ORed with :data:`WNOHANG` or :data:`WNOWAIT`. The " +"return value is an object representing the data contained in the " +":c:type:`siginfo_t` structure, namely: :attr:`si_pid`, :attr:`si_uid`, " +":attr:`si_signo`, :attr:`si_status`, :attr:`si_code` or ``None`` if " +":data:`WNOHANG` is specified and there are no children in a waitable state." +msgstr "" +"等待一个或多个子进程执行完毕。*idtype* 可以是 :data:`P_PID`, :data:`P_PGID`, :data:`P_ALL`, 或 " +":data:`P_PIDFD` (Linux 可用)。*id* 指定要等待的 pid。*options* 是由 " +":data:`WEXITED`、:data:`WSTOPPED` 或 :data:`WCONTINUED` 中的一个或多个进行或运算构造的,且额外可以与" +" :data:`WNOHANG` 或 :data:`WNOWAIT` 进行或运算。返回值是一个对象,对应着 :c:type:`siginfo_t` " +"结构体中的数据,即: :attr:`si_pid`, :attr:`si_uid`, :attr:`si_signo`, " +":attr:`si_status`, :attr:`si_code` 或 ``None`` (如果指定了 :data:`WNOHANG` " +"且没有子进程处于等待状态)。" + +#: ../../library/os.rst:4080 +msgid "" +"These are the possible values for *idtype* in :func:`waitid`. They affect " +"how *id* is interpreted." +msgstr ":func:`waitid` 的 *idtype* 参数的可取值。它们影响 *id* 的解释方式。" + +#: ../../library/os.rst:4089 +msgid "" +"This is a Linux-specific *idtype* that indicates that *id* is a file " +"descriptor that refers to a process." +msgstr "这是仅 Linux 上存在的一种 *idtype*,它表示 *id* 是指向一个进程的文件描述符。" + +#: ../../library/os.rst:4093 +msgid ":ref:`Availability `: Linux 5.4+" +msgstr ":ref:`可用性 `: Linux 5.4+" + +#: ../../library/os.rst:4100 +msgid "" +"Flags that can be used in *options* in :func:`waitid` that specify what " +"child signal to wait for." +msgstr "用于 :func:`waitid` 的 *options* 参数的标志位,指定要等待的子进程信号。" + +#: ../../library/os.rst:4115 +msgid "" +"These are the possible values for :attr:`si_code` in the result returned by " +":func:`waitid`." +msgstr ":func:`waitid` 返回的结果中,:attr:`si_code` 的可取值。" + +#: ../../library/os.rst:4122 +msgid "Added :data:`CLD_KILLED` and :data:`CLD_STOPPED` values." +msgstr "添加了 :data:`CLD_KILLED` 和 :data:`CLD_STOPPED` 值。" + +#: ../../library/os.rst:4128 +msgid "The details of this function differ on Unix and Windows." +msgstr "本函数的细节在 Unix 和 Windows 上有不同之处。" + +#: ../../library/os.rst:4130 +msgid "" +"On Unix: Wait for completion of a child process given by process id *pid*, " +"and return a tuple containing its process id and exit status indication " +"(encoded as for :func:`wait`). The semantics of the call are affected by " +"the value of the integer *options*, which should be ``0`` for normal " +"operation." +msgstr "" +"在 Unix 上:等待进程号为 *pid* 的子进程执行完毕,返回一个元组,内含其进程 ID 和退出状态指示(编码与 :func:`wait` " +"相同)。调用的语义受整数 *options* 的影响,常规操作下该值应为 ``0``。" + +#: ../../library/os.rst:4135 +msgid "" +"If *pid* is greater than ``0``, :func:`waitpid` requests status information " +"for that specific process. If *pid* is ``0``, the request is for the status" +" of any child in the process group of the current process. If *pid* is " +"``-1``, the request pertains to any child of the current process. If *pid* " +"is less than ``-1``, status is requested for any process in the process " +"group ``-pid`` (the absolute value of *pid*)." +msgstr "" +"如果 *pid* 大于 ``0``,则 :func:`waitpid` 会获取该指定进程的状态信息。如果 *pid* 为 " +"``0``,则获取当前进程所在进程组中的所有子进程的状态。如果 *pid* 为 ``-1``,则获取当前进程的子进程状态。如果 *pid* 小于 " +"``-1``,则获取进程组 ``-pid`` ( *pid* 的绝对值)中所有进程的状态。" + +#: ../../library/os.rst:4142 +msgid "" +"An :exc:`OSError` is raised with the value of errno when the syscall returns" +" -1." +msgstr "当系统调用返回 -1 时,将抛出带有错误码的 :exc:`OSError` 异常。" + +#: ../../library/os.rst:4145 +msgid "" +"On Windows: Wait for completion of a process given by process handle *pid*, " +"and return a tuple containing *pid*, and its exit status shifted left by 8 " +"bits (shifting makes cross-platform use of the function easier). A *pid* " +"less than or equal to ``0`` has no special meaning on Windows, and raises an" +" exception. The value of integer *options* has no effect. *pid* can refer to" +" any process whose id is known, not necessarily a child process. The " +":func:`spawn\\* ` functions called with :const:`P_NOWAIT` return " +"suitable process handles." +msgstr "" +"在 Windows 上:等待句柄为 *pid* 的进程执行完毕,返回一个元组,内含 *pid* 以及左移 8 " +"位后的退出状态码(移位简化了跨平台使用本函数)。小于或等于 ``0`` 的 *pid* 在 Windows 上没有特殊含义,且会抛出异常。整数值 " +"*options* 无效。*pid* 可以指向任何 ID 已知的进程,不一定是子进程。调用 :func:`spawn\\* ` " +"函数时传入 :const:`P_NOWAIT` 将返回合适的进程句柄。" + +#: ../../library/os.rst:4164 +msgid "" +"Similar to :func:`waitpid`, except no process id argument is given and a " +"3-element tuple containing the child's process id, exit status indication, " +"and resource usage information is returned. Refer to :mod:`resource`.\\ " +":func:`~resource.getrusage` for details on resource usage information. The " +"option argument is the same as that provided to :func:`waitpid` and " +":func:`wait4`." +msgstr "" +"与 :func:`waitpid` 相似,差别在于没有进程 ID 参数,且返回一个 3 元组,其中包括子进程 " +"ID,退出状态指示和资源使用信息。关于资源使用信息的详情,请参考 :mod:`resource`.\\ " +":func:`~resource.getrusage`。option 参数与传入 :func:`waitpid` 和 :func:`wait4` " +"的相同。" + +#: ../../library/os.rst:4171 ../../library/os.rst:4185 +msgid "" +":func:`waitstatus_to_exitcode` can be used to convert the exit status into " +"an exitcode." +msgstr "可以使用 :func:`waitstatus_to_exitcode` 来将退出状态转换为退出码。" + +#: ../../library/os.rst:4179 +msgid "" +"Similar to :func:`waitpid`, except a 3-element tuple, containing the child's" +" process id, exit status indication, and resource usage information is " +"returned. Refer to :mod:`resource`.\\ :func:`~resource.getrusage` for " +"details on resource usage information. The arguments to :func:`wait4` are " +"the same as those provided to :func:`waitpid`." +msgstr "" +"与 :func:`waitpid` 相似,差别在本方法返回一个 3 元组,其中包括子进程 " +"ID,退出状态指示和资源使用信息。关于资源使用信息的详情,请参考 :mod:`resource`.\\ " +":func:`~resource.getrusage`。:func:`wait4` 的参数与 :func:`waitpid` 的参数相同。" + +#: ../../library/os.rst:4193 +msgid "Convert a wait status to an exit code." +msgstr "将等待状态转换为退出码。" + +#: ../../library/os.rst:4195 +msgid "On Unix:" +msgstr "在 Unix 上:" + +#: ../../library/os.rst:4197 +msgid "" +"If the process exited normally (if ``WIFEXITED(status)`` is true), return " +"the process exit status (return ``WEXITSTATUS(status)``): result greater " +"than or equal to 0." +msgstr "" +"如果进程正常退出(当 ``WIFEXITED(status)`` 为真值),则返回进程退出状态 (返回 " +"``WEXITSTATUS(status)``): 结果值大于等于 0。" + +#: ../../library/os.rst:4200 +msgid "" +"If the process was terminated by a signal (if ``WIFSIGNALED(status)`` is " +"true), return ``-signum`` where *signum* is the number of the signal that " +"caused the process to terminate (return ``-WTERMSIG(status)``): result less " +"than 0." +msgstr "" +"如果进程被信号终止(当 ``WIFSIGNALED(status)`` 为真值),则返回 ``-signum`` 其中 *signum* " +"为导致进程终止的信号数值 (返回 ``-WTERMSIG(status)``): 结果值小于 0。" + +#: ../../library/os.rst:4204 +msgid "Otherwise, raise a :exc:`ValueError`." +msgstr "否则将抛出 :exc:`ValueError` 异常。" + +#: ../../library/os.rst:4206 +msgid "On Windows, return *status* shifted right by 8 bits." +msgstr "在 Windows 上,返回 *status* 右移 8 位的结果。" + +#: ../../library/os.rst:4208 +msgid "" +"On Unix, if the process is being traced or if :func:`waitpid` was called " +"with :data:`WUNTRACED` option, the caller must first check if " +"``WIFSTOPPED(status)`` is true. This function must not be called if " +"``WIFSTOPPED(status)`` is true." +msgstr "" +"在 Unix 上,如果进程正被追踪或 :func:`waitpid` 附带 :data:`WUNTRACED` 选项被调用,则调用者必须先检查 " +"``WIFSTOPPED(status)`` 是否为真值。 如果 ``WIFSTOPPED(status)`` 为真值则此函数不可被调用。" + +#: ../../library/os.rst:4215 +msgid "" +":func:`WIFEXITED`, :func:`WEXITSTATUS`, :func:`WIFSIGNALED`, " +":func:`WTERMSIG`, :func:`WIFSTOPPED`, :func:`WSTOPSIG` functions." +msgstr "" +":func:`WIFEXITED`, :func:`WEXITSTATUS`, :func:`WIFSIGNALED`, " +":func:`WTERMSIG`, :func:`WIFSTOPPED`, :func:`WSTOPSIG` 函数。" + +#: ../../library/os.rst:4223 +msgid "" +"The option for :func:`waitpid` to return immediately if no child process " +"status is available immediately. The function returns ``(0, 0)`` in this " +"case." +msgstr "用于 :func:`waitpid` 的选项,如果没有立即可用的子进程状态,则立即返回。在这种情况下,函数返回 ``(0, 0)``。" + +#: ../../library/os.rst:4231 +msgid "" +"This option causes child processes to be reported if they have been " +"continued from a job control stop since their status was last reported." +msgstr "被任务控制 (job control) 停止的子进程,如果上次报告状态后已恢复运行,则此选项将报告这些子进程。" + +#: ../../library/os.rst:4234 +msgid ":ref:`Availability `: some Unix systems." +msgstr ":ref:`可用性 `: 部分 Unix 系统。" + +#: ../../library/os.rst:4239 +msgid "" +"This option causes child processes to be reported if they have been stopped " +"but their current state has not been reported since they were stopped." +msgstr "已停止的子进程,如果自停止以来尚未报告其当前状态,则此选项将报告这些子进程。" + +#: ../../library/os.rst:4245 +msgid "" +"The following functions take a process status code as returned by " +":func:`system`, :func:`wait`, or :func:`waitpid` as a parameter. They may " +"be used to determine the disposition of a process." +msgstr "" +"下列函数采用进程状态码作为参数,状态码由 :func:`system`、:func:`wait` 或 :func:`waitpid` " +"返回。它们可用于确定进程上发生的操作。" + +#: ../../library/os.rst:4251 +msgid "" +"Return ``True`` if a core dump was generated for the process, otherwise " +"return ``False``." +msgstr "如果为该进程生成了核心转储,返回 ``True``,否则返回 ``False``。" + +#: ../../library/os.rst:4254 ../../library/os.rst:4320 +msgid "This function should be employed only if :func:`WIFSIGNALED` is true." +msgstr "此函数应当仅在 :func:`WIFSIGNALED` 为真值时使用。" + +#: ../../library/os.rst:4261 +msgid "" +"Return ``True`` if a stopped child has been resumed by delivery of " +":data:`~signal.SIGCONT` (if the process has been continued from a job " +"control stop), otherwise return ``False``." +msgstr "" +"如果一个已停止的子进程通过传送 :data:`~signal.SIGCONT` 获得恢复(如果该进程是从任务控制停止后再继续的)则返回 " +"``True``,否则返回 ``False``。" + +#: ../../library/os.rst:4265 +msgid "See :data:`WCONTINUED` option." +msgstr "参见 :data:`WCONTINUED` 选项。" + +#: ../../library/os.rst:4272 +msgid "" +"Return ``True`` if the process was stopped by delivery of a signal, " +"otherwise return ``False``." +msgstr "如果进程是通过传送一个信号来停止的则返回 ``True``,否则返回 ``False``。" + +#: ../../library/os.rst:4275 +msgid "" +":func:`WIFSTOPPED` only returns ``True`` if the :func:`waitpid` call was " +"done using :data:`WUNTRACED` option or when the process is being traced (see" +" :manpage:`ptrace(2)`)." +msgstr "" +":func:`WIFSTOPPED` 只有在当 :func:`waitpid` 调用是通过使用 :data:`WUNTRACED` " +"选项来完成或者当该进程正被追踪时 (参见 :manpage:`ptrace(2)`) 才返回 ``True``。" + +#: ../../library/os.rst:4283 +msgid "" +"Return ``True`` if the process was terminated by a signal, otherwise return " +"``False``." +msgstr "如果进程是通过一个信号来终止的则返回 ``True`` ,否则返回 ``False``。" + +#: ../../library/os.rst:4291 +msgid "" +"Return ``True`` if the process exited terminated normally, that is, by " +"calling ``exit()`` or ``_exit()``, or by returning from ``main()``; " +"otherwise return ``False``." +msgstr "" +"如果进程正常终止退出则返回 ``True``,也就是说通过调用 ``exit()`` 或 ``_exit()``,或者通过从 ``main()`` " +"返回;在其他情况下则返回 ``False``。" + +#: ../../library/os.rst:4300 +msgid "Return the process exit status." +msgstr "返回进程退出状态。" + +#: ../../library/os.rst:4302 +msgid "This function should be employed only if :func:`WIFEXITED` is true." +msgstr "此函数应当仅在 :func:`WIFEXITED` 为真值时使用。" + +#: ../../library/os.rst:4309 +msgid "Return the signal which caused the process to stop." +msgstr "返回导致进程停止的信号。" + +#: ../../library/os.rst:4311 +msgid "This function should be employed only if :func:`WIFSTOPPED` is true." +msgstr "此函数应当仅在 :func:`WIFSTOPPED` 为真值时使用。" + +#: ../../library/os.rst:4318 +msgid "Return the number of the signal that caused the process to terminate." +msgstr "返回导致进程终止的信号的编号。" + +#: ../../library/os.rst:4326 +msgid "Interface to the scheduler" +msgstr "调度器接口" + +#: ../../library/os.rst:4328 +msgid "" +"These functions control how a process is allocated CPU time by the operating" +" system. They are only available on some Unix platforms. For more detailed " +"information, consult your Unix manpages." +msgstr "这些函数控制操作系统如何为进程分配 CPU 时间。 它们仅在某些 Unix 平台上可用。 更多细节信息请查阅你所用 Unix 的指南页面。" + +#: ../../library/os.rst:4334 +msgid "" +"The following scheduling policies are exposed if they are supported by the " +"operating system." +msgstr "以下调度策略如果被操作系统支持就会对外公开。" + +#: ../../library/os.rst:4339 +msgid "The default scheduling policy." +msgstr "默认调度策略。" + +#: ../../library/os.rst:4343 +msgid "" +"Scheduling policy for CPU-intensive processes that tries to preserve " +"interactivity on the rest of the computer." +msgstr "用于 CPU 密集型进程的调度策略,它会尽量为计算机中的其余任务保留交互性。" + +#: ../../library/os.rst:4348 +msgid "Scheduling policy for extremely low priority background tasks." +msgstr "用于极低优先级的后台任务的调度策略。" + +#: ../../library/os.rst:4352 +msgid "Scheduling policy for sporadic server programs." +msgstr "用于偶发型服务程序的调度策略。" + +#: ../../library/os.rst:4356 +msgid "A First In First Out scheduling policy." +msgstr "先进先出的调度策略。" + +#: ../../library/os.rst:4360 +msgid "A round-robin scheduling policy." +msgstr "循环式的调度策略。" + +#: ../../library/os.rst:4364 +msgid "" +"This flag can be OR'ed with any other scheduling policy. When a process with" +" this flag set forks, its child's scheduling policy and priority are reset " +"to the default." +msgstr "此旗标可与任何其他调度策略进行 OR 运算。 当带有此旗标的进程设置分叉时,其子进程的调度策略和优先级会被重置为默认值。" + +#: ../../library/os.rst:4371 +msgid "" +"This class represents tunable scheduling parameters used in " +":func:`sched_setparam`, :func:`sched_setscheduler`, and " +":func:`sched_getparam`. It is immutable." +msgstr "" +"这个类表示在 :func:`sched_setparam`, :func:`sched_setscheduler` 和 " +":func:`sched_getparam` 中使用的可修改调度形参。 它属于不可变对象。" + +#: ../../library/os.rst:4375 +msgid "At the moment, there is only one possible parameter:" +msgstr "目前它只有一个可能的形参:" + +#: ../../library/os.rst:4379 +msgid "The scheduling priority for a scheduling policy." +msgstr "一个调度策略的调度优先级。" + +#: ../../library/os.rst:4384 +msgid "" +"Get the minimum priority value for *policy*. *policy* is one of the " +"scheduling policy constants above." +msgstr "获取 *policy* 的最低优先级数值。 *policy* 是以上调度策略常量之一。" + +#: ../../library/os.rst:4390 +msgid "" +"Get the maximum priority value for *policy*. *policy* is one of the " +"scheduling policy constants above." +msgstr "获取 *policy* 的最高优先级数值。 *policy* 是以上调度策略常量之一。" + +#: ../../library/os.rst:4396 +msgid "" +"Set the scheduling policy for the process with PID *pid*. A *pid* of 0 means" +" the calling process. *policy* is one of the scheduling policy constants " +"above. *param* is a :class:`sched_param` instance." +msgstr "" +"设置 PID 为 *pid* 的进程的调度策略。*pid* 为 0 指的是调用本方法的进程。*policy* 是以上调度策略常量之一。*param* " +"是一个 :class:`sched_param` 实例。" + +#: ../../library/os.rst:4403 +msgid "" +"Return the scheduling policy for the process with PID *pid*. A *pid* of 0 " +"means the calling process. The result is one of the scheduling policy " +"constants above." +msgstr "返回 PID 为 *pid* 的进程的调度策略。*pid* 为 0 指的是调用本方法的进程。返回的结果是以上调度策略常量之一。" + +#: ../../library/os.rst:4410 +msgid "" +"Set the scheduling parameters for the process with PID *pid*. A *pid* of 0 " +"means the calling process. *param* is a :class:`sched_param` instance." +msgstr "" +"设置 PID 为 *pid* 的进程的调度参数。 *pid* 为 0 表示调用方过程。 *param* 是一个 " +":class:`sched_param` 实例。" + +#: ../../library/os.rst:4416 +msgid "" +"Return the scheduling parameters as a :class:`sched_param` instance for the " +"process with PID *pid*. A *pid* of 0 means the calling process." +msgstr "" +"返回 PID 为 *pid* 的进程的调度参数为一个 :class:`sched_param` 实例。*pid* 为 0 指的是调用本方法的进程。" + +#: ../../library/os.rst:4422 +msgid "" +"Return the round-robin quantum in seconds for the process with PID *pid*. A " +"*pid* of 0 means the calling process." +msgstr "返回 PID 为 *pid* 的进程在时间片轮转调度下的时间片长度(单位为秒)。*pid* 为 0 指的是调用本方法的进程。" + +#: ../../library/os.rst:4428 +msgid "Voluntarily relinquish the CPU." +msgstr "自愿放弃 CPU。" + +#: ../../library/os.rst:4433 +msgid "" +"Restrict the process with PID *pid* (or the current process if zero) to a " +"set of CPUs. *mask* is an iterable of integers representing the set of CPUs" +" to which the process should be restricted." +msgstr "" +"将 PID 为 *pid* 的进程(为零则为当前进程)限制到一组 CPU 上。*mask* 是整数的可迭代对象,表示应将进程限制在其中的一组 CPU。" + +#: ../../library/os.rst:4440 +msgid "" +"Return the set of CPUs the process with PID *pid* (or the current process if" +" zero) is restricted to." +msgstr "返回 PID 为 *pid* 的进程(为零则为当前进程)被限制到的那一组 CPU。" + +#: ../../library/os.rst:4447 +msgid "Miscellaneous System Information" +msgstr "其他系统信息" + +#: ../../library/os.rst:4452 +msgid "" +"Return string-valued system configuration values. *name* specifies the " +"configuration value to retrieve; it may be a string which is the name of a " +"defined system value; these names are specified in a number of standards " +"(POSIX, Unix 95, Unix 98, and others). Some platforms define additional " +"names as well. The names known to the host operating system are given as the" +" keys of the ``confstr_names`` dictionary. For configuration variables not " +"included in that mapping, passing an integer for *name* is also accepted." +msgstr "" +"返回字符串格式的系统配置信息。*name* 指定要查找的配置名称,它可以是字符串,是一个系统已定义的名称,这些名称定义在不同标准(POSIX,Unix " +"95,Unix 98 等)中。一些平台还定义了额外的其他名称。当前操作系统已定义的名称在 ``confstr_names`` " +"字典的键中给出。对于未包含在该映射中的配置名称,也可以传递一个整数作为 *name*。" + +#: ../../library/os.rst:4460 +msgid "" +"If the configuration value specified by *name* isn't defined, ``None`` is " +"returned." +msgstr "如果 *name* 指定的配置值未定义,返回 ``None``。" + +#: ../../library/os.rst:4463 +msgid "" +"If *name* is a string and is not known, :exc:`ValueError` is raised. If a " +"specific value for *name* is not supported by the host system, even if it is" +" included in ``confstr_names``, an :exc:`OSError` is raised with " +":const:`errno.EINVAL` for the error number." +msgstr "" +"如果 *name* 是一个字符串且不是已定义的名称,将抛出 :exc:`ValueError` 异常。如果当前系统不支持 *name* " +"指定的配置名称,即使该名称存在于 ``confstr_names``,也会抛出 :exc:`OSError` 异常,错误码为 " +":const:`errno.EINVAL`。" + +#: ../../library/os.rst:4473 +msgid "" +"Dictionary mapping names accepted by :func:`confstr` to the integer values " +"defined for those names by the host operating system. This can be used to " +"determine the set of names known to the system." +msgstr "" +"字典,表示映射关系,为 :func:`confstr` 可接受名称与操作系统为这些名称定义的整数值之间的映射。这可用于判断系统已定义了哪些名称。" + +#: ../../library/os.rst:4482 +msgid "" +"Return the number of CPUs in the system. Returns ``None`` if undetermined." +msgstr "返回系统的 CPU 数量。不确定则返回 ``None``。" + +#: ../../library/os.rst:4484 +msgid "" +"This number is not equivalent to the number of CPUs the current process can " +"use. The number of usable CPUs can be obtained with " +"``len(os.sched_getaffinity(0))``" +msgstr "" +"该数量不同于当前进程可以使用的CPU数量。可用的CPU数量可以由 ``len(os.sched_getaffinity(0))`` 方法获得。" + +#: ../../library/os.rst:4494 +msgid "" +"Return the number of processes in the system run queue averaged over the " +"last 1, 5, and 15 minutes or raises :exc:`OSError` if the load average was " +"unobtainable." +msgstr "返回系统运行队列中最近 1、5 和 15 分钟内的平均进程数。无法获得平均负载则抛出 :exc:`OSError` 异常。" + +#: ../../library/os.rst:4503 +msgid "" +"Return integer-valued system configuration values. If the configuration " +"value specified by *name* isn't defined, ``-1`` is returned. The comments " +"regarding the *name* parameter for :func:`confstr` apply here as well; the " +"dictionary that provides information on the known names is given by " +"``sysconf_names``." +msgstr "" +"返回整数格式的系统配置信息。如果 *name* 指定的配置值未定义,返回 ``-1``。对 :func:`confstr` 的 *name* " +"参数的注释在此处也适用。当前已知的配置名称在 ``sysconf_names`` 字典中提供。" + +#: ../../library/os.rst:4513 +msgid "" +"Dictionary mapping names accepted by :func:`sysconf` to the integer values " +"defined for those names by the host operating system. This can be used to " +"determine the set of names known to the system." +msgstr "" +"字典,表示映射关系,为 :func:`sysconf` 可接受名称与操作系统为这些名称定义的整数值之间的映射。这可用于判断系统已定义了哪些名称。" + +#: ../../library/os.rst:4519 +msgid "" +"The following data values are used to support path manipulation operations." +" These are defined for all platforms." +msgstr "以下数据值用于支持对路径本身的操作。所有平台都有定义。" + +#: ../../library/os.rst:4522 +msgid "" +"Higher-level operations on pathnames are defined in the :mod:`os.path` " +"module." +msgstr "对路径的高级操作在 :mod:`os.path` 模块中定义。" + +#: ../../library/os.rst:4528 +msgid "" +"The constant string used by the operating system to refer to the current " +"directory. This is ``'.'`` for Windows and POSIX. Also available via " +":mod:`os.path`." +msgstr "" +"操作系统用来表示当前目录的常量字符串。在 Windows 和 POSIX 上是 ``'.'``。在 :mod:`os.path` 中也可用。" + +#: ../../library/os.rst:4536 +msgid "" +"The constant string used by the operating system to refer to the parent " +"directory. This is ``'..'`` for Windows and POSIX. Also available via " +":mod:`os.path`." +msgstr "" +"操作系统用来表示父目录的常量字符串。在 Windows 和 POSIX 上是 ``'..'``。在 :mod:`os.path` 中也可用。" + +#: ../../library/os.rst:4545 +msgid "" +"The character used by the operating system to separate pathname components. " +"This is ``'/'`` for POSIX and ``'\\\\'`` for Windows. Note that knowing " +"this is not sufficient to be able to parse or concatenate pathnames --- use " +":func:`os.path.split` and :func:`os.path.join` --- but it is occasionally " +"useful. Also available via :mod:`os.path`." +msgstr "" +"操作系统用来分隔路径不同部分的字符。在 POSIX 上是 ``'/'``,在 Windows 上是是 " +"``'\\\\'``。注意,仅了解它不足以能解析或连接路径,请使用 :func:`os.path.split` 和 " +":func:`os.path.join`,但它有时是有用的。在 :mod:`os.path` 中也可用。" + +#: ../../library/os.rst:4555 +msgid "" +"An alternative character used by the operating system to separate pathname " +"components, or ``None`` if only one separator character exists. This is set" +" to ``'/'`` on Windows systems where ``sep`` is a backslash. Also available " +"via :mod:`os.path`." +msgstr "" +"操作系统用来分隔路径不同部分的替代字符。如果仅存在一个分隔符,则为 ``None``。在 ``sep`` 是反斜杠的 Windows 系统上,该值被设为" +" ``'/'``。在 :mod:`os.path` 中也可用。" + +#: ../../library/os.rst:4564 +msgid "" +"The character which separates the base filename from the extension; for " +"example, the ``'.'`` in :file:`os.py`. Also available via :mod:`os.path`." +msgstr "分隔基本文件名与扩展名的字符,如 :file:`os.py` 中的 ``'.'``。在 :mod:`os.path` 中也可用。" + +#: ../../library/os.rst:4572 +msgid "" +"The character conventionally used by the operating system to separate search" +" path components (as in :envvar:`PATH`), such as ``':'`` for POSIX or " +"``';'`` for Windows. Also available via :mod:`os.path`." +msgstr "" +"操作系统通常用于分隔搜索路径(如 :envvar:`PATH`)中不同部分的字符,如 POSIX 上是 ``':'``,Windows 上是 " +"``';'``。在 :mod:`os.path` 中也可用。" + +#: ../../library/os.rst:4579 +msgid "" +"The default search path used by :func:`exec\\*p\\* ` and " +":func:`spawn\\*p\\* ` if the environment doesn't have a ``'PATH'`` " +"key. Also available via :mod:`os.path`." +msgstr "" +"在环境变量没有 ``'PATH'`` 键的情况下,:func:`exec\\*p\\* ` and :func:`spawn\\*p\\*" +" ` 使用的默认搜索路径。在 :mod:`os.path` 中也可用。" + +#: ../../library/os.rst:4586 +msgid "" +"The string used to separate (or, rather, terminate) lines on the current " +"platform. This may be a single character, such as ``'\\n'`` for POSIX, or " +"multiple characters, for example, ``'\\r\\n'`` for Windows. Do not use " +"*os.linesep* as a line terminator when writing files opened in text mode " +"(the default); use a single ``'\\n'`` instead, on all platforms." +msgstr "" +"当前平台用于分隔(或终止)行的字符串。它可以是单个字符,如 POSIX 上是 ``'\\n'``,也可以是多个字符,如 Windows 上是 " +"``'\\r\\n'``。在写入以文本模式(默认模式)打开的文件时,请不要使用 *os.linesep* 作为行终止符,请在所有平台上都使用一个 " +"``'\\n'`` 代替。" + +#: ../../library/os.rst:4595 +msgid "" +"The file path of the null device. For example: ``'/dev/null'`` for POSIX, " +"``'nul'`` for Windows. Also available via :mod:`os.path`." +msgstr "" +"空设备的文件路径。如 POSIX 上为 ``'/dev/null'``,Windows 上为 ``'nul'``。在 :mod:`os.path` " +"中也可用。" + +#: ../../library/os.rst:4606 +msgid "" +"Flags for use with the :func:`~sys.setdlopenflags` and " +":func:`~sys.getdlopenflags` functions. See the Unix manual page " +":manpage:`dlopen(3)` for what the different flags mean." +msgstr "" +":func:`~sys.setdlopenflags` 和 :func:`~sys.getdlopenflags` 函数所使用的标志。请参阅 Unix " +"手册页 :manpage:`dlopen(3)` 获取不同标志的含义。" + +#: ../../library/os.rst:4614 +msgid "Random numbers" +msgstr "随机数" + +#: ../../library/os.rst:4619 +msgid "" +"Get up to *size* random bytes. The function can return less bytes than " +"requested." +msgstr "获得最多为 *size* 的随机字节。本函数返回的字节数可能少于请求的字节数。" + +#: ../../library/os.rst:4622 +msgid "" +"These bytes can be used to seed user-space random number generators or for " +"cryptographic purposes." +msgstr "这些字节可用于为用户空间的随机数生成器提供种子,或用于加密目的。" + +#: ../../library/os.rst:4625 +msgid "" +"``getrandom()`` relies on entropy gathered from device drivers and other " +"sources of environmental noise. Unnecessarily reading large quantities of " +"data will have a negative impact on other users of the ``/dev/random`` and" +" ``/dev/urandom`` devices." +msgstr "" +"``getrandom()`` 依赖于从设备驱动程序和其他环境噪声源收集的熵。不必要地读取大量数据将对使用 ``/dev/random`` 和 " +"``/dev/urandom`` 设备的其他用户产生负面影响。" + +#: ../../library/os.rst:4630 +msgid "" +"The flags argument is a bit mask that can contain zero or more of the " +"following values ORed together: :py:data:`os.GRND_RANDOM` and " +":py:data:`GRND_NONBLOCK`." +msgstr "" +"flags 参数是一个位掩码,可以是零个或多个下列值以或运算组合: :py:data:`os.GRND_RANDOM` 和 " +":py:data:`GRND_NONBLOCK`。" + +#: ../../library/os.rst:4634 +msgid "" +"See also the `Linux getrandom() manual page `_." +msgstr "" +"另请参阅 `Linux getrandom() 手册页 `_ 。" + +#: ../../library/os.rst:4638 +msgid ":ref:`Availability `: Linux 3.17 and newer." +msgstr ":ref:`可用性 `:Linux 3.17 或更高版本。" + +#: ../../library/os.rst:4643 +msgid "" +"Return a bytestring of *size* random bytes suitable for cryptographic use." +msgstr "返回大小为 *size* 的字节串,它是适合加密使用的随机字节。" + +#: ../../library/os.rst:4645 +msgid "" +"This function returns random bytes from an OS-specific randomness source. " +"The returned data should be unpredictable enough for cryptographic " +"applications, though its exact quality depends on the OS implementation." +msgstr "本函数从系统指定的随机源获取随机字节。对于加密应用程序,返回的数据应有足够的不可预测性,尽管其确切的品质取决于操作系统的实现。" + +#: ../../library/os.rst:4649 +msgid "" +"On Linux, if the ``getrandom()`` syscall is available, it is used in " +"blocking mode: block until the system urandom entropy pool is initialized " +"(128 bits of entropy are collected by the kernel). See the :pep:`524` for " +"the rationale. On Linux, the :func:`getrandom` function can be used to get " +"random bytes in non-blocking mode (using the :data:`GRND_NONBLOCK` flag) or " +"to poll until the system urandom entropy pool is initialized." +msgstr "" +"在 Linux 上,如果 ``getrandom()`` 系统调用可用,它将以阻塞模式使用:阻塞直到系统的 urandom 熵池初始化完毕(内核收集了 " +"128 位熵)。原理请参阅 :pep:`524`。在 Linux 上,:func:`getrandom` 可以以非阻塞模式(使用 " +":data:`GRND_NONBLOCK` 标志)获取随机字节,或者轮询直到系统的 urandom 熵池初始化完毕。" + +#: ../../library/os.rst:4656 +msgid "" +"On a Unix-like system, random bytes are read from the ``/dev/urandom`` " +"device. If the ``/dev/urandom`` device is not available or not readable, the" +" :exc:`NotImplementedError` exception is raised." +msgstr "" +"在类 Unix 系统上,随机字节是从 ``/dev/urandom`` 设备读取的。如果 ``/dev/urandom`` 设备不可用或不可读,则抛出 " +":exc:`NotImplementedError` 异常。" + +#: ../../library/os.rst:4660 +msgid "On Windows, it will use ``CryptGenRandom()``." +msgstr "在 Windows 上将使用 ``CryptGenRandom()``。" + +#: ../../library/os.rst:4663 +msgid "" +"The :mod:`secrets` module provides higher level functions. For an easy-to-" +"use interface to the random number generator provided by your platform, " +"please see :class:`random.SystemRandom`." +msgstr "" +":mod:`secrets` 模块提供了更高级的功能。所在平台会提供随机数生成器,有关其易于使用的接口,请参阅 " +":class:`random.SystemRandom`。" + +#: ../../library/os.rst:4667 +msgid "" +"On Linux, ``getrandom()`` is now used in blocking mode to increase the " +"security." +msgstr "在 Linux 上,``getrandom()`` 现在以阻塞模式使用,以提高安全性。" + +#: ../../library/os.rst:4671 +msgid "" +"On Linux, if the ``getrandom()`` syscall blocks (the urandom entropy pool is" +" not initialized yet), fall back on reading ``/dev/urandom``." +msgstr "" +"在 Linux 上,如果 ``getrandom()`` 系统调用阻塞(urandom 熵池尚未初始化完毕),则退回一步读取 " +"``/dev/urandom``。" + +#: ../../library/os.rst:4675 +msgid "" +"On Linux 3.17 and newer, the ``getrandom()`` syscall is now used when " +"available. On OpenBSD 5.6 and newer, the C ``getentropy()`` function is now" +" used. These functions avoid the usage of an internal file descriptor." +msgstr "" +"在 Linux 3.17 和更高版本上,现在使用 ``getrandom()`` 系统调用(如果可用)。在 OpenBSD 5.6 " +"和更高版本上,现在使用 ``getentropy()`` C 函数。这些函数避免了使用内部文件描述符。" + +#: ../../library/os.rst:4683 +msgid "" +"By default, when reading from ``/dev/random``, :func:`getrandom` blocks if " +"no random bytes are available, and when reading from ``/dev/urandom``, it " +"blocks if the entropy pool has not yet been initialized." +msgstr "" +"默认情况下,从 ``/dev/random`` 读取时,如果没有可用的随机字节,则 :func:`getrandom` 会阻塞;从 " +"``/dev/urandom`` 读取时,如果熵池尚未初始化,则会阻塞。" + +#: ../../library/os.rst:4687 +msgid "" +"If the :py:data:`GRND_NONBLOCK` flag is set, then :func:`getrandom` does not" +" block in these cases, but instead immediately raises " +":exc:`BlockingIOError`." +msgstr "" +"如果设置了 :py:data:`GRND_NONBLOCK` 标志,则这些情况下 :func:`getrandom` 不会阻塞,而是立即抛出 " +":exc:`BlockingIOError` 异常。" + +#: ../../library/os.rst:4694 +msgid "" +"If this bit is set, then random bytes are drawn from the " +"``/dev/random`` pool instead of the ``/dev/urandom`` pool." +msgstr "如果设置了此标志位,那么将从 ``/dev/random`` 池而不是 ``/dev/urandom`` 池中提取随机字节。" diff --git a/library/ossaudiodev.po b/library/ossaudiodev.po new file mode 100644 index 000000000..12585c71c --- /dev/null +++ b/library/ossaudiodev.po @@ -0,0 +1,642 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) 2001-2024, Python Software Foundation +# This file is distributed under the same license as the Python package. +# FIRST AUTHOR , YEAR. +# +# Translators: +# ppcfish , 2019 +# Jing Li , 2021 +# Rafael Fontenelle , 2023 +# Freesand Leo , 2024 +# +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: Python 3.9\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2024-04-26 21:29+0000\n" +"PO-Revision-Date: 2017-02-16 23:21+0000\n" +"Last-Translator: Freesand Leo , 2024\n" +"Language-Team: Chinese (China) (https://app.transifex.com/python-doc/teams/5390/zh_CN/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: zh_CN\n" +"Plural-Forms: nplurals=1; plural=0;\n" + +#: ../../library/ossaudiodev.rst:2 +msgid ":mod:`ossaudiodev` --- Access to OSS-compatible audio devices" +msgstr ":mod:`ossaudiodev` --- 访问兼容OSS的音频设备" + +#: ../../library/ossaudiodev.rst:9 +msgid "" +"The :mod:`ossaudiodev` module is deprecated (see :pep:`PEP 594 " +"<594#ossaudiodev>` for details)." +msgstr ":mod:`ossaudiodev` 模块已被弃用(请参阅 :pep:`PEP 594 <594#ossaudiodev>` 了解详情)。" + +#: ../../library/ossaudiodev.rst:15 +msgid "" +"This module allows you to access the OSS (Open Sound System) audio " +"interface. OSS is available for a wide range of open-source and commercial " +"Unices, and is the standard audio interface for Linux and recent versions of" +" FreeBSD." +msgstr "" +"该模块允许您访问 OSS(开放式音响系统)音频接口。 OSS 可用于广泛的开源和商业 Unices,并且是 Linux 和最新版本的 FreeBSD " +"的标准音频接口。" + +#: ../../library/ossaudiodev.rst:47 +msgid "" +"Operations in this module now raise :exc:`OSError` where :exc:`IOError` was " +"raised." +msgstr "此模块中过去会引发 :exc:`IOError` 的操作现在将引发 :exc:`OSError`。" + +#: ../../library/ossaudiodev.rst:55 +msgid "" +"`Open Sound System Programmer's Guide " +"`_" +msgstr "`开放之声系统程序员指南 `_" + +#: ../../library/ossaudiodev.rst:55 +msgid "the official documentation for the OSS C API" +msgstr "OSS C API 的官方文档" + +#: ../../library/ossaudiodev.rst:57 +msgid "" +"The module defines a large number of constants supplied by the OSS device " +"driver; see ```` on either Linux or FreeBSD for a listing." +msgstr "" +"该模块定义了大量由OSS设备驱动提供的常量; 请参阅 ```` Linux 或 FreeBSD 上的列表。" + +#: ../../library/ossaudiodev.rst:60 +msgid ":mod:`ossaudiodev` defines the following variables and functions:" +msgstr ":mod:`ossaudiodev` 定义了下列变量和函数:" + +#: ../../library/ossaudiodev.rst:65 +msgid "" +"This exception is raised on certain errors. The argument is a string " +"describing what went wrong." +msgstr "此异常会针对特定错误被引发。 其参数为一个描述错误信息的字符串。" + +#: ../../library/ossaudiodev.rst:68 +msgid "" +"(If :mod:`ossaudiodev` receives an error from a system call such as " +":c:func:`open`, :c:func:`write`, or :c:func:`ioctl`, it raises " +":exc:`OSError`. Errors detected directly by :mod:`ossaudiodev` result in " +":exc:`OSSAudioError`.)" +msgstr "" +"(如果 :mod:`ossaudiodev` 从系统调用例如 :c:func:`open`, :c:func:`write` 或 " +":c:func:`ioctl` 接收到错误,它将引发 :exc:`OSError`。 由 :mod:`ossaudiodev` 直接检测到的错误将引发 " +":exc:`OSSAudioError`。)" + +#: ../../library/ossaudiodev.rst:72 +msgid "" +"(For backwards compatibility, the exception class is also available as " +"``ossaudiodev.error``.)" +msgstr "(为了向下兼容,此异常类也可通过 ``ossaudiodev.error`` 访问。)" + +#: ../../library/ossaudiodev.rst:79 +msgid "" +"Open an audio device and return an OSS audio device object. This object " +"supports many file-like methods, such as :meth:`read`, :meth:`write`, and " +":meth:`fileno` (although there are subtle differences between conventional " +"Unix read/write semantics and those of OSS audio devices). It also supports" +" a number of audio-specific methods; see below for the complete list of " +"methods." +msgstr "" +"打开一个音频设备并返回 OSS 音频设备对象。 此对象支持许多文件类方法,例如 :meth:`read`, :meth:`write` 和 " +":meth:`fileno` (不过传统的 Unix 读/写语义与 OSS 音频设备的存在一些细微的差异)。 " +"它还支持一些音频专属的方法;完整的方法列表见下文。" + +#: ../../library/ossaudiodev.rst:85 +msgid "" +"*device* is the audio device filename to use. If it is not specified, this " +"module first looks in the environment variable :envvar:`AUDIODEV` for a " +"device to use. If not found, it falls back to :file:`/dev/dsp`." +msgstr "" +"*device* 是要使用的音频设备文件名。 如果未指定,则此模块会先在环境变量 :envvar:`AUDIODEV` 中查找要使用的设备。 " +"如果未找到,它将回退为 :file:`/dev/dsp`。" + +#: ../../library/ossaudiodev.rst:89 +msgid "" +"*mode* is one of ``'r'`` for read-only (record) access, ``'w'`` for write-" +"only (playback) access and ``'rw'`` for both. Since many sound cards only " +"allow one process to have the recorder or player open at a time, it is a " +"good idea to open the device only for the activity needed. Further, some " +"sound cards are half-duplex: they can be opened for reading or writing, but " +"not both at once." +msgstr "" +"*mode* 可以为 ``'r'`` 表示只读(录音)访问,``'w'`` 表示只写(回放)访问以及 ``'rw'`` 表示同时读写。 " +"由于许多声卡在同一时间只允许单个进程打开录音机或播放器,因此好的做法是只根据活动的需要打开设备。 " +"并且,有些声卡是半双工的:它们可以被打开用于读取或写入,但不能同时读写。" + +#: ../../library/ossaudiodev.rst:96 +msgid "" +"Note the unusual calling syntax: the *first* argument is optional, and the " +"second is required. This is a historical artifact for compatibility with " +"the older :mod:`linuxaudiodev` module which :mod:`ossaudiodev` supersedes." +msgstr "" +"请注意这里特殊的调用语法: *first* 参数是可选的,而第二个参数则是必需的。 这是出于历史原因要与 :mod:`ossaudiodev` 所替代的" +" :mod:`linuxaudiodev` 模块保持兼容。" + +#: ../../library/ossaudiodev.rst:107 +msgid "" +"Open a mixer device and return an OSS mixer device object. *device* is the" +" mixer device filename to use. If it is not specified, this module first " +"looks in the environment variable :envvar:`MIXERDEV` for a device to use. " +"If not found, it falls back to :file:`/dev/mixer`." +msgstr "" +"打开一个混音设备并返回 OSS 混音设备对象。 *device* 是要使用的混音设备文件名。 如果未指定,则此模块会先在环境变量 " +":envvar:`MIXERDEV` 中查找要使用的设备。 如果未找到,它将回退为 :file:`/dev/mixer`。" + +#: ../../library/ossaudiodev.rst:116 +msgid "Audio Device Objects" +msgstr "音频设备对象" + +#: ../../library/ossaudiodev.rst:118 +msgid "" +"Before you can write to or read from an audio device, you must call three " +"methods in the correct order:" +msgstr "在你写入或读取音频设备之前,你必须按照正确的顺序调用三个方法:" + +#: ../../library/ossaudiodev.rst:121 +msgid ":meth:`setfmt` to set the output format" +msgstr ":meth:`setfmt` 设置输出格式" + +#: ../../library/ossaudiodev.rst:123 +msgid ":meth:`channels` to set the number of channels" +msgstr ":meth:`channels` 设置声道数量" + +#: ../../library/ossaudiodev.rst:125 +msgid ":meth:`speed` to set the sample rate" +msgstr ":meth:`speed` 设置采样率" + +#: ../../library/ossaudiodev.rst:127 +msgid "" +"Alternately, you can use the :meth:`setparameters` method to set all three " +"audio parameters at once. This is more convenient, but may not be as " +"flexible in all cases." +msgstr "" +"或者,你也可以使用 :meth:`setparameters` 方法一次性地设置全部三个音频参数。 这更为便捷,但可能不会在所有场景下都一样灵活。" + +#: ../../library/ossaudiodev.rst:131 +msgid "" +"The audio device objects returned by :func:`.open` define the following " +"methods and (read-only) attributes:" +msgstr ":func:`.open` 所返回的音频设备对象定义了下列方法和(只读)属性:" + +#: ../../library/ossaudiodev.rst:137 +msgid "" +"Explicitly close the audio device. When you are done writing to or reading " +"from an audio device, you should explicitly close it. A closed device " +"cannot be used again." +msgstr "显式地关闭音频设备。 当你完成写入或读取音频设备后,你应当显式地关闭它。 已关闭的设备不可被再次使用。" + +#: ../../library/ossaudiodev.rst:144 +msgid "Return the file descriptor associated with the device." +msgstr "返回与设备相关联的文件描述符。" + +#: ../../library/ossaudiodev.rst:149 +msgid "" +"Read *size* bytes from the audio input and return them as a Python string. " +"Unlike most Unix device drivers, OSS audio devices in blocking mode (the " +"default) will block :func:`read` until the entire requested amount of data " +"is available." +msgstr "" +"从音频输入设备读取 *size* 个字节并返回为 Python 字节串。 与大多数 Unix 设备驱动不同,处于阻塞模式(默认)的 OSS " +"音频设备将阻塞 :func:`read` 直到所请求大小的数据全部可用。" + +#: ../../library/ossaudiodev.rst:157 +msgid "" +"Write a :term:`bytes-like object` *data* to the audio device and return the " +"number of bytes written. If the audio device is in blocking mode (the " +"default), the entire data is always written (again, this is different from " +"usual Unix device semantics). If the device is in non-blocking mode, some " +"data may not be written---see :meth:`writeall`." +msgstr "" +"将一个 :term:`bytes-like object` *data* 写入音频设备并返回写入的字节数。 " +"如果音频设备处于阻塞模式(默认),则总是会写入完整数据(这还是不同于通常的 Unix 设备语义)。 如果设备处于非阻塞模式,则可能会有部分数据未被写入 " +"--- 参见 :meth:`writeall`。" + +#: ../../library/ossaudiodev.rst:163 ../../library/ossaudiodev.rst:177 +msgid "Writable :term:`bytes-like object` is now accepted." +msgstr "现在接受可写的 :term:`字节类对象 `。" + +#: ../../library/ossaudiodev.rst:169 +msgid "" +"Write a :term:`bytes-like object` *data* to the audio device: waits until " +"the audio device is able to accept data, writes as much data as it will " +"accept, and repeats until *data* has been completely written. If the device " +"is in blocking mode (the default), this has the same effect as " +":meth:`write`; :meth:`writeall` is only useful in non-blocking mode. Has no" +" return value, since the amount of data written is always equal to the " +"amount of data supplied." +msgstr "" +"将一个 :term:`bytes-like object` *data* " +"写入音频设备:等待直到音频设备能够接收数据,将根据其所能接收的数据量尽可能多地写入,并重复操作直至 *data* 被完全写入。 " +"如果设备处于阻塞模式(默认),则其效果与 :meth:`write` 相同;:meth:`writeall` 仅适用于非阻塞模式。 " +"它没有返回值,因为写入的数据量总是等于所提供的数据量。" + +#: ../../library/ossaudiodev.rst:181 +msgid "" +"Audio device objects also support the context management protocol, i.e. they" +" can be used in a :keyword:`with` statement." +msgstr "音频设备对象还支持上下文管理协议,就是说它们可以在 :keyword:`with` 语句中使用。" + +#: ../../library/ossaudiodev.rst:186 +msgid "" +"The following methods each map to exactly one :c:func:`ioctl` system call. " +"The correspondence is obvious: for example, :meth:`setfmt` corresponds to " +"the ``SNDCTL_DSP_SETFMT`` ioctl, and :meth:`sync` to ``SNDCTL_DSP_SYNC`` " +"(this can be useful when consulting the OSS documentation). If the " +"underlying :c:func:`ioctl` fails, they all raise :exc:`OSError`." +msgstr "" +"下列方法各自映射一个 :c:func:`ioctl` 系统调用。 对应关系很明显:例如,:meth:`setfmt` 对应 " +"``SNDCTL_DSP_SETFMT`` ioctl,而 :meth:`sync` 对应 ``SNDCTL_DSP_SYNC`` (这在查阅 OSS " +"文档时很有用)。 如果下层的 :c:func:`ioctl` 失败,它们将引发 :exc:`OSError`。" + +#: ../../library/ossaudiodev.rst:195 +msgid "" +"Put the device into non-blocking mode. Once in non-blocking mode, there is " +"no way to return it to blocking mode." +msgstr "将设备转为非阻塞模式。 一旦处于非阻塞模式,将无法将其转回阻塞模式。" + +#: ../../library/ossaudiodev.rst:201 +msgid "" +"Return a bitmask of the audio output formats supported by the soundcard. " +"Some of the formats supported by OSS are:" +msgstr "返回声卡所支持的音频输出格式的位掩码。 OSS 支持的一部分格式如下:" + +#: ../../library/ossaudiodev.rst:205 +msgid "Format" +msgstr "格式" + +#: ../../library/ossaudiodev.rst:205 ../../library/ossaudiodev.rst:259 +msgid "Description" +msgstr "描述" + +#: ../../library/ossaudiodev.rst:207 +msgid ":const:`AFMT_MU_LAW`" +msgstr ":const:`AFMT_MU_LAW`" + +#: ../../library/ossaudiodev.rst:207 +msgid "" +"a logarithmic encoding (used by Sun ``.au`` files and :file:`/dev/audio`)" +msgstr "一种对数编码格式(被 Sun ``.au`` 文件和 :file:`/dev/audio` 所使用)" + +#: ../../library/ossaudiodev.rst:210 +msgid ":const:`AFMT_A_LAW`" +msgstr ":const:`AFMT_A_LAW`" + +#: ../../library/ossaudiodev.rst:210 +msgid "a logarithmic encoding" +msgstr "一种对数编码格式" + +#: ../../library/ossaudiodev.rst:212 +msgid ":const:`AFMT_IMA_ADPCM`" +msgstr ":const:`AFMT_IMA_ADPCM`" + +#: ../../library/ossaudiodev.rst:212 +msgid "" +"a 4:1 compressed format defined by the Interactive Multimedia Association" +msgstr "一种 4:1 压缩格式,由 Interactive Multimedia Association 定义" + +#: ../../library/ossaudiodev.rst:215 +msgid ":const:`AFMT_U8`" +msgstr ":const:`AFMT_U8`" + +#: ../../library/ossaudiodev.rst:215 +msgid "Unsigned, 8-bit audio" +msgstr "无符号的 8 位音频" + +#: ../../library/ossaudiodev.rst:217 +msgid ":const:`AFMT_S16_LE`" +msgstr ":const:`AFMT_S16_LE`" + +#: ../../library/ossaudiodev.rst:217 +msgid "" +"Signed, 16-bit audio, little-endian byte order (as used by Intel processors)" +msgstr "有符号的 16 位音频,采用小端字节序(如 Intel 处理器所用的)" + +#: ../../library/ossaudiodev.rst:220 +msgid ":const:`AFMT_S16_BE`" +msgstr ":const:`AFMT_S16_BE`" + +#: ../../library/ossaudiodev.rst:220 +msgid "" +"Signed, 16-bit audio, big-endian byte order (as used by 68k, PowerPC, Sparc)" +msgstr "有符号的 16 位音频,采用大端字节序(如 68k, PowerPC, Sparc 所用的)" + +#: ../../library/ossaudiodev.rst:223 +msgid ":const:`AFMT_S8`" +msgstr ":const:`AFMT_S8`" + +#: ../../library/ossaudiodev.rst:223 +msgid "Signed, 8 bit audio" +msgstr "有符号的 8 位音频" + +#: ../../library/ossaudiodev.rst:225 +msgid ":const:`AFMT_U16_LE`" +msgstr ":const:`AFMT_U16_LE`" + +#: ../../library/ossaudiodev.rst:225 +msgid "Unsigned, 16-bit little-endian audio" +msgstr "无符号的 16 位小端字节序音频" + +#: ../../library/ossaudiodev.rst:227 +msgid ":const:`AFMT_U16_BE`" +msgstr ":const:`AFMT_U16_BE`" + +#: ../../library/ossaudiodev.rst:227 +msgid "Unsigned, 16-bit big-endian audio" +msgstr "无符号的 16 位大端字节序音频" + +#: ../../library/ossaudiodev.rst:230 +msgid "" +"Consult the OSS documentation for a full list of audio formats, and note " +"that most devices support only a subset of these formats. Some older " +"devices only support :const:`AFMT_U8`; the most common format used today is " +":const:`AFMT_S16_LE`." +msgstr "" +"请参阅 OSS 文档获取音频格式的完整列表,还要注意大多数设备都只支持这些列表的一个子集。 某些较旧的设备仅支持 " +":const:`AFMT_U8`;目前最为常用的格式是 :const:`AFMT_S16_LE`。" + +#: ../../library/ossaudiodev.rst:238 +msgid "" +"Try to set the current audio format to *format*---see :meth:`getfmts` for a " +"list. Returns the audio format that the device was set to, which may not be" +" the requested format. May also be used to return the current audio format" +"---do this by passing an \"audio format\" of :const:`AFMT_QUERY`." +msgstr "" +"尝试将当前音频格式设为 *format* --- 请参阅 :meth:`getfmts` 获取格式列表。 " +"返回为设备设置的音频格式,这可能并非所请求的格式。 也可被用来返回当前音频格式 --- 这可以通过传入特殊的 \"音频格式\" " +":const:`AFMT_QUERY` 来实现。" + +#: ../../library/ossaudiodev.rst:246 +msgid "" +"Set the number of output channels to *nchannels*. A value of 1 indicates " +"monophonic sound, 2 stereophonic. Some devices may have more than 2 " +"channels, and some high-end devices may not support mono. Returns the number" +" of channels the device was set to." +msgstr "" +"将输出声道数设为 *nchannels*。 值为 1 表示单声道,2 表示立体声。 某些设备可能拥有 2 " +"个以上的声道,并且某些高端设备还可能不支持单声道。 返回为设备设置的声道数。" + +#: ../../library/ossaudiodev.rst:254 +msgid "" +"Try to set the audio sampling rate to *samplerate* samples per second. " +"Returns the rate actually set. Most sound devices don't support arbitrary " +"sampling rates. Common rates are:" +msgstr "尝试将音频采样率设为每秒 *samplerate* 次采样。 返回实际设置的采样率。 大多数设备都不支持任意的采样率。 常见的采样率为:" + +#: ../../library/ossaudiodev.rst:259 +msgid "Rate" +msgstr "采样率" + +#: ../../library/ossaudiodev.rst:261 +msgid "8000" +msgstr "8000" + +#: ../../library/ossaudiodev.rst:261 +msgid "default rate for :file:`/dev/audio`" +msgstr ":file:`/dev/audio` 的默认采样率" + +#: ../../library/ossaudiodev.rst:263 +msgid "11025" +msgstr "11025" + +#: ../../library/ossaudiodev.rst:263 +msgid "speech recording" +msgstr "语音录音" + +#: ../../library/ossaudiodev.rst:265 +msgid "22050" +msgstr "22050" + +#: ../../library/ossaudiodev.rst:267 +msgid "44100" +msgstr "44100" + +#: ../../library/ossaudiodev.rst:267 +msgid "CD quality audio (at 16 bits/sample and 2 channels)" +msgstr "CD品质的音频(16位采样和2通道)" + +#: ../../library/ossaudiodev.rst:270 +msgid "96000" +msgstr "96000" + +#: ../../library/ossaudiodev.rst:270 +msgid "DVD quality audio (at 24 bits/sample)" +msgstr "DVD品质的音频(24位采样)" + +#: ../../library/ossaudiodev.rst:276 +msgid "" +"Wait until the sound device has played every byte in its buffer. (This " +"happens implicitly when the device is closed.) The OSS documentation " +"recommends closing and re-opening the device rather than using :meth:`sync`." +msgstr "" +"等待直到音频设备播放完其缓冲区中的所有字节。 (这会在设备被关闭时隐式地发生。) OSS 建议关闭再重新打开设备而不是使用 :meth:`sync`。" + +#: ../../library/ossaudiodev.rst:283 +msgid "" +"Immediately stop playing or recording and return the device to a state where" +" it can accept commands. The OSS documentation recommends closing and re-" +"opening the device after calling :meth:`reset`." +msgstr "立即停止播放或录制并使设备返回可接受命令的状态。 OSS 文档建议在调用 :meth:`reset` 之后关闭并重新打开设备。" + +#: ../../library/ossaudiodev.rst:290 +msgid "" +"Tell the driver that there is likely to be a pause in the output, making it " +"possible for the device to handle the pause more intelligently. You might " +"use this after playing a spot sound effect, before waiting for user input, " +"or before doing disk I/O." +msgstr "" +"告知设备在输出中可能有暂停,使得设备可以更智能地处理暂停。 你可以在播放一个定点音效之后、等待用户输入之前或执行磁盘 I/O 之前使用此方法。" + +#: ../../library/ossaudiodev.rst:295 +msgid "" +"The following convenience methods combine several ioctls, or one ioctl and " +"some simple calculations." +msgstr "下列便捷方法合并了多个 ioctl,或是合并了一个 ioctl 与某些简单的运算。" + +#: ../../library/ossaudiodev.rst:301 +msgid "" +"Set the key audio sampling parameters---sample format, number of channels, " +"and sampling rate---in one method call. *format*, *nchannels*, and " +"*samplerate* should be as specified in the :meth:`setfmt`, :meth:`channels`," +" and :meth:`speed` methods. If *strict* is true, :meth:`setparameters` " +"checks to see if each parameter was actually set to the requested value, and" +" raises :exc:`OSSAudioError` if not. Returns a tuple (*format*, " +"*nchannels*, *samplerate*) indicating the parameter values that were " +"actually set by the device driver (i.e., the same as the return values of " +":meth:`setfmt`, :meth:`channels`, and :meth:`speed`)." +msgstr "" +"在一次方法调用中设置关键的音频采样参数 --- 采样格式、声道数和采样率。 *format*, *nchannels* 和 *samplerate* " +"应当与在 :meth:`setfmt`, :meth:`channels` 和 :meth:`speed` 方法中所指定的一致。 如果 " +"*strict* 为真值,则 :meth:`setparameters` 会检查每个参数是否确实被设置为所请求的值,如果不是则会引发 " +":exc:`OSSAudioError`。 返回一个元组 (*format*, *nchannels*, *samplerate*) " +"指明由设备驱动实际设置的参数值 (即与 :meth:`setfmt`, :meth:`channels` 和 :meth:`speed` " +"的返回值相同)。" + +#: ../../library/ossaudiodev.rst:311 +msgid "For example, ::" +msgstr "例如,::" + +#: ../../library/ossaudiodev.rst:315 +msgid "is equivalent to ::" +msgstr "等价于 ::" + +#: ../../library/ossaudiodev.rst:324 +msgid "Returns the size of the hardware buffer, in samples." +msgstr "返回硬件缓冲区的大小,以采样数表示。" + +#: ../../library/ossaudiodev.rst:329 +msgid "" +"Returns the number of samples that are in the hardware buffer yet to be " +"played." +msgstr "返回硬件缓冲区中待播放的采样数。" + +#: ../../library/ossaudiodev.rst:334 +msgid "" +"Returns the number of samples that could be queued into the hardware buffer " +"to be played without blocking." +msgstr "返回可以被加入硬件缓冲区队列以非阻塞模式播放的采样数。" + +#: ../../library/ossaudiodev.rst:337 +msgid "Audio device objects also support several read-only attributes:" +msgstr "音频设备对象还支持几个只读属性:" + +#: ../../library/ossaudiodev.rst:342 +msgid "Boolean indicating whether the device has been closed." +msgstr "指明设备是否已被关闭的布尔值。" + +#: ../../library/ossaudiodev.rst:347 +msgid "String containing the name of the device file." +msgstr "包含设备文件名称的字符串。" + +#: ../../library/ossaudiodev.rst:352 +msgid "The I/O mode for the file, either ``\"r\"``, ``\"rw\"``, or ``\"w\"``." +msgstr "文件的 I/O 模式,可以为 ``\"r\"``, ``\"rw\"`` 或 ``\"w\"``。" + +#: ../../library/ossaudiodev.rst:358 +msgid "Mixer Device Objects" +msgstr "混音器设备对象" + +#: ../../library/ossaudiodev.rst:360 +msgid "The mixer object provides two file-like methods:" +msgstr "混音器对象提供了两个文件类方法:" + +#: ../../library/ossaudiodev.rst:365 +msgid "" +"This method closes the open mixer device file. Any further attempts to use " +"the mixer after this file is closed will raise an :exc:`OSError`." +msgstr "此方法会关闭打开的混音器设备文件。 在文件被关闭后任何继续使用混音器的尝试都将引发 :exc:`OSError`。" + +#: ../../library/ossaudiodev.rst:371 +msgid "Returns the file handle number of the open mixer device file." +msgstr "返回打开的混音器设备文件的文件句柄号。" + +#: ../../library/ossaudiodev.rst:373 +msgid "Mixer objects also support the context management protocol." +msgstr "混音器设备还支持上下文管理协议。" + +#: ../../library/ossaudiodev.rst:377 +msgid "The remaining methods are specific to audio mixing:" +msgstr "其余方法都是混音专属的:" + +#: ../../library/ossaudiodev.rst:382 +msgid "" +"This method returns a bitmask specifying the available mixer controls " +"(\"Control\" being a specific mixable \"channel\", such as " +":const:`SOUND_MIXER_PCM` or :const:`SOUND_MIXER_SYNTH`). This bitmask " +"indicates a subset of all available mixer controls---the " +":const:`SOUND_MIXER_\\*` constants defined at module level. To determine if," +" for example, the current mixer object supports a PCM mixer, use the " +"following Python code::" +msgstr "" +"此方法返回一个表示可用的混音控件的位掩码 (\"控件\" 是专用的可混合 \"声道\",例如 :const:`SOUND_MIXER_PCM` 或 " +":const:`SOUND_MIXER_SYNTH`)。 该掩码会指定所有可用混音控件的一个子集 --- 它们是在模块层级上定义的 " +":const:`SOUND_MIXER_\\*` 常量。 举例来说,要确定当前混音器对象是否支持 PCM 混音器,就使用以下 Python 代码::" + +#: ../../library/ossaudiodev.rst:394 +msgid "" +"For most purposes, the :const:`SOUND_MIXER_VOLUME` (master volume) and " +":const:`SOUND_MIXER_PCM` controls should suffice---but code that uses the " +"mixer should be flexible when it comes to choosing mixer controls. On the " +"Gravis Ultrasound, for example, :const:`SOUND_MIXER_VOLUME` does not exist." +msgstr "" +"对于大多数目的来说,:const:`SOUND_MIXER_VOLUME` (主音量) 和 :const:`SOUND_MIXER_PCM` " +"控件应该足够了 --- 但使用混音器的代码应当在选择混音器控件时保持灵活。 例如在 Gravis Ultrasound " +"上,:const:`SOUND_MIXER_VOLUME` 是不存在的。" + +#: ../../library/ossaudiodev.rst:402 +msgid "" +"Returns a bitmask indicating stereo mixer controls. If a bit is set, the " +"corresponding control is stereo; if it is unset, the control is either " +"monophonic or not supported by the mixer (use in combination with " +":meth:`controls` to determine which)." +msgstr "" +"返回一个表示立体声混音控件的位掩码。 如果设置了比特位,则对应的控件就是立体声的;如果未设置,则控件为单声道或者不被混音器所支持(请配合 " +":meth:`controls` 使用以确定是哪种情况)。" + +#: ../../library/ossaudiodev.rst:407 +msgid "" +"See the code example for the :meth:`controls` function for an example of " +"getting data from a bitmask." +msgstr "请查看 :meth:`controls` 函数的代码示例了解如何从位掩码获取数据。" + +#: ../../library/ossaudiodev.rst:413 +msgid "" +"Returns a bitmask specifying the mixer controls that may be used to record." +" See the code example for :meth:`controls` for an example of reading from a" +" bitmask." +msgstr "返回一个指明可被用于录音的混音器控件的位掩码。 请查看 :meth:`controls` 的代码示例了解如何读取位掩码。" + +#: ../../library/ossaudiodev.rst:419 +msgid "" +"Returns the volume of a given mixer control. The returned volume is a " +"2-tuple ``(left_volume,right_volume)``. Volumes are specified as numbers " +"from 0 (silent) to 100 (full volume). If the control is monophonic, a " +"2-tuple is still returned, but both volumes are the same." +msgstr "" +"返回给定混音控件的音量。 返回的音量是一个 2 元组 ``(left_volume,right_volume)``。 音量被表示为从 0 (静音) 到 " +"100 (最大音量) 的数字。 如果控件是单声道的,仍然会返回一个 2 元组,但两个音量必定相同。" + +#: ../../library/ossaudiodev.rst:424 +msgid "" +"Raises :exc:`OSSAudioError` if an invalid control is specified, or " +":exc:`OSError` if an unsupported control is specified." +msgstr "" +"如果指定了无效的控件则会引发 :exc:`OSSAudioError`,或者如果指定了不受支持的控件则会引发 :exc:`OSError`。" + +#: ../../library/ossaudiodev.rst:430 +msgid "" +"Sets the volume for a given mixer control to ``(left,right)``. ``left`` and " +"``right`` must be ints and between 0 (silent) and 100 (full volume). On " +"success, the new volume is returned as a 2-tuple. Note that this may not be " +"exactly the same as the volume specified, because of the limited resolution " +"of some soundcard's mixers." +msgstr "" +"将给定混音控件的音量设为 ``(left,right)``。 ``left`` 和 ``right`` 必须为整数并在 0 (静音) 至 100 " +"(最大音量) 之间。 当执行成功的,新的音量将以 2 元组形式返回。 请注意这可能不完全等于所指定的音量,因为某些声卡的混音器有精度限制。" + +#: ../../library/ossaudiodev.rst:436 +msgid "" +"Raises :exc:`OSSAudioError` if an invalid mixer control was specified, or if" +" the specified volumes were out-of-range." +msgstr "如果指定了无效的混音控件,或者指定的音量超出限制则会引发 :exc:`OSSAudioError`。" + +#: ../../library/ossaudiodev.rst:442 +msgid "" +"This method returns a bitmask indicating which control(s) are currently " +"being used as a recording source." +msgstr "此方法返回一个表示当前被用作录音源的的控件的位掩码。" + +#: ../../library/ossaudiodev.rst:448 +msgid "" +"Call this function to specify a recording source. Returns a bitmask " +"indicating the new recording source (or sources) if successful; raises " +":exc:`OSError` if an invalid source was specified. To set the current " +"recording source to the microphone input::" +msgstr "" +"调用此函数来指定一个录音源。 如果成功则返回一个指明新录音源的位掩码;如果指定了无效的源则会引发 :exc:`OSError`。 " +"如果要将当前录音源设为麦克风输入::" diff --git a/library/othergui.po b/library/othergui.po new file mode 100644 index 000000000..b22522299 --- /dev/null +++ b/library/othergui.po @@ -0,0 +1,132 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) 2001-2021, Python Software Foundation +# This file is distributed under the same license as the Python package. +# FIRST AUTHOR , YEAR. +# +# Translators: +# Azuk 443 , 2019 +# Freesand Leo , 2021 +# +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: Python 3.9\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2021-08-03 07:07+0000\n" +"PO-Revision-Date: 2017-02-16 23:21+0000\n" +"Last-Translator: Freesand Leo , 2021\n" +"Language-Team: Chinese (China) (https://www.transifex.com/python-doc/teams/5390/zh_CN/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: zh_CN\n" +"Plural-Forms: nplurals=1; plural=0;\n" + +#: ../../library/othergui.rst:4 +msgid "Other Graphical User Interface Packages" +msgstr "其他图形用户界面(GUI)包" + +#: ../../library/othergui.rst:6 +msgid "" +"Major cross-platform (Windows, macOS, Unix-like) GUI toolkits are available " +"for Python:" +msgstr "Python 可用的主要跨平台 (Windows, macOS, 类 Unix) GUI 工具:" + +#: ../../library/othergui.rst:17 +msgid "`PyGObject `_" +msgstr "`PyGObject `_" + +#: ../../library/othergui.rst:12 +msgid "" +"PyGObject provides introspection bindings for C libraries using `GObject " +"`_. One of these libraries is " +"the `GTK+ 3 `_ widget set. GTK+ comes with many more " +"widgets than Tkinter provides. An online `Python GTK+ 3 Tutorial " +"`_ is available." +msgstr "" +"PyGObject 使用 `GObject `_ 提供针对 C" +" 库的内省绑定。 `GTK+ 3 `_ 可视化部件集就是此类函数库中的一个。 GTK+ 附带的部件比 " +"Tkinter 所提供的更多。 请在线参阅 `Python GTK+ 3 教程 `_。" + +#: ../../library/othergui.rst:24 +msgid "`PyGTK `_" +msgstr "`PyGTK `_" + +#: ../../library/othergui.rst:20 +msgid "" +"PyGTK provides bindings for an older version of the library, GTK+ 2. It " +"provides an object oriented interface that is slightly higher level than the" +" C one. There are also bindings to `GNOME `_. An " +"online `tutorial `_ is " +"available." +msgstr "" +"PyGTK 提供了对较旧版本的库 GTK+ 2 的绑定。 它使用面向对象接口,比 C 库的抽象层级略高。 此外也有对 `GNOME " +"`_ 的绑定。 请参阅在线 `教程 " +"`_。" + +#: ../../library/othergui.rst:31 +msgid "`PyQt `_" +msgstr "`PyQt `_" + +#: ../../library/othergui.rst:27 +msgid "" +"PyQt is a :program:`sip`\\ -wrapped binding to the Qt toolkit. Qt is an " +"extensive C++ GUI application development framework that is available for " +"Unix, Windows and macOS. :program:`sip` is a tool for generating bindings " +"for C++ libraries as Python classes, and is specifically designed for " +"Python." +msgstr "" +"PyQt 是一个针对 Qt 工具集通过 :program:`sip` 包装的绑定。 Qt 是一个庞大的 C++ GUI 应用程序开发框架,同时适用于 " +"Unix, Windows 和 macOS。 :program:`sip` 是一个用于为 C++ 库生成 Python 类绑定的工具库,它是针对 " +"Python 特别设计的。" + +#: ../../library/othergui.rst:37 +msgid "`PySide2 `_" +msgstr "`PySide2 `_" + +#: ../../library/othergui.rst:34 +msgid "" +"Also known as the Qt for Python project, PySide2 is a newer binding to the " +"Qt toolkit. It is provided by The Qt Company and aims to provide a complete " +"port of PySide to Qt 5. Compared to PyQt, its licensing scheme is friendlier" +" to non-open source applications." +msgstr "" +"或称为 Qt for Python 项目,PySide2 是一个较新的针对 Qt 工具集的绑定。 它由 The Qt Company " +"发布,旨在提供一个完整的用于 Qt 5 的 PySide 移植版。 与 PyQt 相比,它的许可方案对非开源应用更为友好。" + +#: ../../library/othergui.rst:48 +msgid "`wxPython `_" +msgstr "`wxPython `_" + +#: ../../library/othergui.rst:40 +msgid "" +"wxPython is a cross-platform GUI toolkit for Python that is built around the" +" popular `wxWidgets `_ (formerly wxWindows) C++ " +"toolkit. It provides a native look and feel for applications on Windows, " +"macOS, and Unix systems by using each platform's native widgets where ever " +"possible, (GTK+ on Unix-like systems). In addition to an extensive set of " +"widgets, wxPython provides classes for online documentation and context " +"sensitive help, printing, HTML viewing, low-level device context drawing, " +"drag and drop, system clipboard access, an XML-based resource format and " +"more, including an ever growing library of user-contributed modules." +msgstr "" +"wxPython 是一个针对 Python 的跨平台 GUI 工具集,它基于热门的 `wxWidgets " +"`_ (原名 wxWindows) C++ 工具集进行构建。 它为 Windows, macOS" +" 和 Unix 系统上的应用程序提供了原生的外观效果,在可能的情况下尽量使用各平台的原生可视化控件。 (在类 Unix 系统上是使用 GTK+)。 " +"除了包含庞大的可视化控件,wxPython 还提供了许多类用于在线文档和上下文感知帮助、打印、HTML " +"视图、低层级设备上下文绘图、拖放操作、系统剪贴板访问、基于 XML 的资源格式等等,并且包含一个不断增长的用户贡献模块库。" + +#: ../../library/othergui.rst:51 +msgid "" +"PyGTK, PyQt, PySide2, and wxPython, all have a modern look and feel and more" +" widgets than Tkinter. In addition, there are many other GUI toolkits for " +"Python, both cross-platform, and platform-specific. See the `GUI Programming" +" `_ page in the Python Wiki for" +" a much more complete list, and also for links to documents where the " +"different GUI toolkits are compared." +msgstr "" +"PyGTK, PyQt, PySide2 和 wxPython 都拥有比 Tkinter 更现代的外观效果和更多的可视化部件。 此外还存在许多其他适用于" +" Python 的 GUI 工具集,即有跨平台的,也有特定平台专属的。 请参阅 Python Wiki 中的 `GUI 编程 " +"`_ 页面查看更完整的列表,以及不同 GUI " +"工具集对比文档的链接。" diff --git a/library/parser.po b/library/parser.po new file mode 100644 index 000000000..de2b62741 --- /dev/null +++ b/library/parser.po @@ -0,0 +1,403 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) 2001-2022, Python Software Foundation +# This file is distributed under the same license as the Python package. +# FIRST AUTHOR , YEAR. +# +# Translators: +# Leo Li , 2020 +# Freesand Leo , 2020 +# +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: Python 3.9\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2022-11-04 14:34+0000\n" +"PO-Revision-Date: 2017-02-16 23:21+0000\n" +"Last-Translator: Freesand Leo , 2020\n" +"Language-Team: Chinese (China) (https://www.transifex.com/python-doc/teams/5390/zh_CN/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: zh_CN\n" +"Plural-Forms: nplurals=1; plural=0;\n" + +#: ../../library/parser.rst:2 +msgid ":mod:`parser` --- Access Python parse trees" +msgstr ":mod:`parser` --- 访问 Python 解析树" + +#: ../../library/parser.rst:21 +msgid "" +"The :mod:`parser` module provides an interface to Python's internal parser " +"and byte-code compiler. The primary purpose for this interface is to allow " +"Python code to edit the parse tree of a Python expression and create " +"executable code from this. This is better than trying to parse and modify " +"an arbitrary Python code fragment as a string because parsing is performed " +"in a manner identical to the code forming the application. It is also " +"faster." +msgstr "" + +#: ../../library/parser.rst:30 +msgid "" +"The parser module is deprecated and will be removed in future versions of " +"Python. For the majority of use cases you can leverage the Abstract Syntax " +"Tree (AST) generation and compilation stage, using the :mod:`ast` module." +msgstr "" +"parser 模块已被弃用并将在未来的 Python 版本中移除。 对于大多数用例你都可以使用 :mod:`ast` " +"模块来控制抽象语法树(AST)的生成和编译阶段。" + +#: ../../library/parser.rst:34 +msgid "" +"There are a few things to note about this module which are important to " +"making use of the data structures created. This is not a tutorial on " +"editing the parse trees for Python code, but some examples of using the " +":mod:`parser` module are presented." +msgstr "" + +#: ../../library/parser.rst:39 +msgid "" +"Most importantly, a good understanding of the Python grammar processed by " +"the internal parser is required. For full information on the language " +"syntax, refer to :ref:`reference-index`. The parser itself is created from " +"a grammar specification defined in the file :file:`Grammar/Grammar` in the " +"standard Python distribution. The parse trees stored in the ST objects " +"created by this module are the actual output from the internal parser when " +"created by the :func:`expr` or :func:`suite` functions, described below. " +"The ST objects created by :func:`sequence2st` faithfully simulate those " +"structures. Be aware that the values of the sequences which are considered " +"\"correct\" will vary from one version of Python to another as the formal " +"grammar for the language is revised. However, transporting code from one " +"Python version to another as source text will always allow correct parse " +"trees to be created in the target version, with the only restriction being " +"that migrating to an older version of the interpreter will not support more " +"recent language constructs. The parse trees are not typically compatible " +"from one version to another, though source code has usually been forward-" +"compatible within a major release series." +msgstr "" + +#: ../../library/parser.rst:57 +msgid "" +"Each element of the sequences returned by :func:`st2list` or " +":func:`st2tuple` has a simple form. Sequences representing non-terminal " +"elements in the grammar always have a length greater than one. The first " +"element is an integer which identifies a production in the grammar. These " +"integers are given symbolic names in the C header file " +":file:`Include/graminit.h` and the Python module :mod:`symbol`. Each " +"additional element of the sequence represents a component of the production " +"as recognized in the input string: these are always sequences which have the" +" same form as the parent. An important aspect of this structure which " +"should be noted is that keywords used to identify the parent node type, such" +" as the keyword :keyword:`if` in an :const:`if_stmt`, are included in the " +"node tree without any special treatment. For example, the :keyword:`!if` " +"keyword is represented by the tuple ``(1, 'if')``, where ``1`` is the " +"numeric value associated with all :const:`NAME` tokens, including variable " +"and function names defined by the user. In an alternate form returned when " +"line number information is requested, the same token might be represented as" +" ``(1, 'if', 12)``, where the ``12`` represents the line number at which the" +" terminal symbol was found." +msgstr "" + +#: ../../library/parser.rst:74 +msgid "" +"Terminal elements are represented in much the same way, but without any " +"child elements and the addition of the source text which was identified. " +"The example of the :keyword:`if` keyword above is representative. The " +"various types of terminal symbols are defined in the C header file " +":file:`Include/token.h` and the Python module :mod:`token`." +msgstr "" + +#: ../../library/parser.rst:80 +msgid "" +"The ST objects are not required to support the functionality of this module," +" but are provided for three purposes: to allow an application to amortize " +"the cost of processing complex parse trees, to provide a parse tree " +"representation which conserves memory space when compared to the Python list" +" or tuple representation, and to ease the creation of additional modules in " +"C which manipulate parse trees. A simple \"wrapper\" class may be created " +"in Python to hide the use of ST objects." +msgstr "" + +#: ../../library/parser.rst:88 +msgid "" +"The :mod:`parser` module defines functions for a few distinct purposes. The" +" most important purposes are to create ST objects and to convert ST objects " +"to other representations such as parse trees and compiled code objects, but " +"there are also functions which serve to query the type of parse tree " +"represented by an ST object." +msgstr "" + +#: ../../library/parser.rst:98 +msgid "Module :mod:`symbol`" +msgstr "模块 :mod:`symbol`" + +#: ../../library/parser.rst:98 +msgid "Useful constants representing internal nodes of the parse tree." +msgstr "代表解析树内部节点的有用常量。" + +#: ../../library/parser.rst:101 +msgid "Module :mod:`token`" +msgstr "模块 :mod:`token`" + +#: ../../library/parser.rst:101 +msgid "" +"Useful constants representing leaf nodes of the parse tree and functions for" +" testing node values." +msgstr "代表解析树叶子节点和测试节点值的函数的有用常量。" + +#: ../../library/parser.rst:108 +msgid "Creating ST Objects" +msgstr "创建 ST 对象" + +#: ../../library/parser.rst:110 +msgid "" +"ST objects may be created from source code or from a parse tree. When " +"creating an ST object from source, different functions are used to create " +"the ``'eval'`` and ``'exec'`` forms." +msgstr "" + +#: ../../library/parser.rst:117 +msgid "" +"The :func:`expr` function parses the parameter *source* as if it were an " +"input to ``compile(source, 'file.py', 'eval')``. If the parse succeeds, an " +"ST object is created to hold the internal parse tree representation, " +"otherwise an appropriate exception is raised." +msgstr "" + +#: ../../library/parser.rst:125 +msgid "" +"The :func:`suite` function parses the parameter *source* as if it were an " +"input to ``compile(source, 'file.py', 'exec')``. If the parse succeeds, an " +"ST object is created to hold the internal parse tree representation, " +"otherwise an appropriate exception is raised." +msgstr "" + +#: ../../library/parser.rst:133 +msgid "" +"This function accepts a parse tree represented as a sequence and builds an " +"internal representation if possible. If it can validate that the tree " +"conforms to the Python grammar and all nodes are valid node types in the " +"host version of Python, an ST object is created from the internal " +"representation and returned to the called. If there is a problem creating " +"the internal representation, or if the tree cannot be validated, a " +":exc:`ParserError` exception is raised. An ST object created this way " +"should not be assumed to compile correctly; normal exceptions raised by " +"compilation may still be initiated when the ST object is passed to " +":func:`compilest`. This may indicate problems not related to syntax (such " +"as a :exc:`MemoryError` exception), but may also be due to constructs such " +"as the result of parsing ``del f(0)``, which escapes the Python parser but " +"is checked by the bytecode compiler." +msgstr "" + +#: ../../library/parser.rst:146 +msgid "" +"Sequences representing terminal tokens may be represented as either two-" +"element lists of the form ``(1, 'name')`` or as three-element lists of the " +"form ``(1, 'name', 56)``. If the third element is present, it is assumed to" +" be a valid line number. The line number may be specified for any subset of" +" the terminal symbols in the input tree." +msgstr "" + +#: ../../library/parser.rst:155 +msgid "" +"This is the same function as :func:`sequence2st`. This entry point is " +"maintained for backward compatibility." +msgstr "" + +#: ../../library/parser.rst:162 +msgid "Converting ST Objects" +msgstr "转换 ST 对象" + +#: ../../library/parser.rst:164 +msgid "" +"ST objects, regardless of the input used to create them, may be converted to" +" parse trees represented as list- or tuple- trees, or may be compiled into " +"executable code objects. Parse trees may be extracted with or without line " +"numbering information." +msgstr "" + +#: ../../library/parser.rst:172 +msgid "" +"This function accepts an ST object from the caller in *st* and returns a " +"Python list representing the equivalent parse tree. The resulting list " +"representation can be used for inspection or the creation of a new parse " +"tree in list form. This function does not fail so long as memory is " +"available to build the list representation. If the parse tree will only be " +"used for inspection, :func:`st2tuple` should be used instead to reduce " +"memory consumption and fragmentation. When the list representation is " +"required, this function is significantly faster than retrieving a tuple " +"representation and converting that to nested lists." +msgstr "" + +#: ../../library/parser.rst:182 +msgid "" +"If *line_info* is true, line number information will be included for all " +"terminal tokens as a third element of the list representing the token. Note" +" that the line number provided specifies the line on which the token *ends*." +" This information is omitted if the flag is false or omitted." +msgstr "" + +#: ../../library/parser.rst:190 +msgid "" +"This function accepts an ST object from the caller in *st* and returns a " +"Python tuple representing the equivalent parse tree. Other than returning a" +" tuple instead of a list, this function is identical to :func:`st2list`." +msgstr "" + +#: ../../library/parser.rst:194 +msgid "" +"If *line_info* is true, line number information will be included for all " +"terminal tokens as a third element of the list representing the token. This" +" information is omitted if the flag is false or omitted." +msgstr "" + +#: ../../library/parser.rst:205 +msgid "" +"The Python byte compiler can be invoked on an ST object to produce code " +"objects which can be used as part of a call to the built-in :func:`exec` or " +":func:`eval` functions. This function provides the interface to the " +"compiler, passing the internal parse tree from *st* to the parser, using the" +" source file name specified by the *filename* parameter. The default value " +"supplied for *filename* indicates that the source was an ST object." +msgstr "" + +#: ../../library/parser.rst:212 +msgid "" +"Compiling an ST object may result in exceptions related to compilation; an " +"example would be a :exc:`SyntaxError` caused by the parse tree for ``del " +"f(0)``: this statement is considered legal within the formal grammar for " +"Python but is not a legal language construct. The :exc:`SyntaxError` raised" +" for this condition is actually generated by the Python byte-compiler " +"normally, which is why it can be raised at this point by the :mod:`parser` " +"module. Most causes of compilation failure can be diagnosed " +"programmatically by inspection of the parse tree." +msgstr "" + +#: ../../library/parser.rst:225 +msgid "Queries on ST Objects" +msgstr "" + +#: ../../library/parser.rst:227 +msgid "" +"Two functions are provided which allow an application to determine if an ST " +"was created as an expression or a suite. Neither of these functions can be " +"used to determine if an ST was created from source code via :func:`expr` or " +":func:`suite` or from a parse tree via :func:`sequence2st`." +msgstr "" + +#: ../../library/parser.rst:237 +msgid "" +"When *st* represents an ``'eval'`` form, this function returns ``True``, " +"otherwise it returns ``False``. This is useful, since code objects normally" +" cannot be queried for this information using existing built-in functions. " +"Note that the code objects created by :func:`compilest` cannot be queried " +"like this either, and are identical to those created by the built-in " +":func:`compile` function." +msgstr "" + +#: ../../library/parser.rst:246 +msgid "" +"This function mirrors :func:`isexpr` in that it reports whether an ST object" +" represents an ``'exec'`` form, commonly known as a \"suite.\" It is not " +"safe to assume that this function is equivalent to ``not isexpr(st)``, as " +"additional syntactic fragments may be supported in the future." +msgstr "" + +#: ../../library/parser.rst:255 +msgid "Exceptions and Error Handling" +msgstr "异常和错误处理" + +#: ../../library/parser.rst:257 +msgid "" +"The parser module defines a single exception, but may also pass other built-" +"in exceptions from other portions of the Python runtime environment. See " +"each function for information about the exceptions it can raise." +msgstr "" + +#: ../../library/parser.rst:264 +msgid "" +"Exception raised when a failure occurs within the parser module. This is " +"generally produced for validation failures rather than the built-in " +":exc:`SyntaxError` raised during normal parsing. The exception argument is " +"either a string describing the reason of the failure or a tuple containing a" +" sequence causing the failure from a parse tree passed to " +":func:`sequence2st` and an explanatory string. Calls to :func:`sequence2st`" +" need to be able to handle either type of exception, while calls to other " +"functions in the module will only need to be aware of the simple string " +"values." +msgstr "" + +#: ../../library/parser.rst:273 +msgid "" +"Note that the functions :func:`compilest`, :func:`expr`, and :func:`suite` " +"may raise exceptions which are normally raised by the parsing and " +"compilation process. These include the built in exceptions " +":exc:`MemoryError`, :exc:`OverflowError`, :exc:`SyntaxError`, and " +":exc:`SystemError`. In these cases, these exceptions carry all the meaning " +"normally associated with them. Refer to the descriptions of each function " +"for detailed information." +msgstr "" + +#: ../../library/parser.rst:284 +msgid "ST Objects" +msgstr "ST 对象" + +#: ../../library/parser.rst:286 +msgid "" +"Ordered and equality comparisons are supported between ST objects. Pickling " +"of ST objects (using the :mod:`pickle` module) is also supported." +msgstr "" + +#: ../../library/parser.rst:292 +msgid "" +"The type of the objects returned by :func:`expr`, :func:`suite` and " +":func:`sequence2st`." +msgstr " :func:`expr`, :func:`suite` 和 :func:`sequence2st` 返回对象的类型。" + +#: ../../library/parser.rst:295 +msgid "ST objects have the following methods:" +msgstr "ST 对象具有以下方法:" + +#: ../../library/parser.rst:300 +msgid "Same as ``compilest(st, filename)``." +msgstr "和 ``compilest(st, filename)`` 相同." + +#: ../../library/parser.rst:305 +msgid "Same as ``isexpr(st)``." +msgstr "和 ``isexpr(st)`` 相同。" + +#: ../../library/parser.rst:310 +msgid "Same as ``issuite(st)``." +msgstr "和 ``issuite(st)`` 相同。" + +#: ../../library/parser.rst:315 +msgid "Same as ``st2list(st, line_info, col_info)``." +msgstr "和 ``st2list(st, line_info, col_info)`` 相同。" + +#: ../../library/parser.rst:320 +msgid "Same as ``st2tuple(st, line_info, col_info)``." +msgstr "和 ``st2tuple(st, line_info, col_info)`` 相同。" + +#: ../../library/parser.rst:324 +msgid "Example: Emulation of :func:`compile`" +msgstr "示例: :func:`compile` 的模拟" + +#: ../../library/parser.rst:326 +msgid "" +"While many useful operations may take place between parsing and bytecode " +"generation, the simplest operation is to do nothing. For this purpose, " +"using the :mod:`parser` module to produce an intermediate data structure is " +"equivalent to the code ::" +msgstr "" + +#: ../../library/parser.rst:336 +msgid "" +"The equivalent operation using the :mod:`parser` module is somewhat longer, " +"and allows the intermediate internal parse tree to be retained as an ST " +"object::" +msgstr "" + +#: ../../library/parser.rst:346 +msgid "" +"An application which needs both ST and code objects can package this code " +"into readily available functions::" +msgstr "" diff --git a/library/pathlib.po b/library/pathlib.po new file mode 100644 index 000000000..5462131be --- /dev/null +++ b/library/pathlib.po @@ -0,0 +1,1173 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) 2001-2024, Python Software Foundation +# This file is distributed under the same license as the Python package. +# FIRST AUTHOR , YEAR. +# +# Translators: +# walkinrain , 2019 +# Zombie110year , 2019 +# wsyxbcl , 2019 +# jaystone776 <1732865113@qq.com>, 2021 +# Freesand Leo , 2023 +# Rafael Fontenelle , 2024 +# +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: Python 3.9\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2024-08-30 16:51+0000\n" +"PO-Revision-Date: 2017-02-16 23:21+0000\n" +"Last-Translator: Rafael Fontenelle , 2024\n" +"Language-Team: Chinese (China) (https://app.transifex.com/python-doc/teams/5390/zh_CN/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: zh_CN\n" +"Plural-Forms: nplurals=1; plural=0;\n" + +#: ../../library/pathlib.rst:3 +msgid ":mod:`pathlib` --- Object-oriented filesystem paths" +msgstr ":mod:`pathlib` --- 面向对象的文件系统路径" + +#: ../../library/pathlib.rst:10 +msgid "**Source code:** :source:`Lib/pathlib.py`" +msgstr "**源代码:**:source:`Lib/pathlib.py`" + +#: ../../library/pathlib.rst:16 +msgid "" +"This module offers classes representing filesystem paths with semantics " +"appropriate for different operating systems. Path classes are divided " +"between :ref:`pure paths `, which provide purely computational " +"operations without I/O, and :ref:`concrete paths `, which " +"inherit from pure paths but also provide I/O operations." +msgstr "" +"该模块提供表示文件系统路径的类,其语义适用于不同的操作系统。路径类被分为提供纯计算操作而没有 I/O 的 :ref:`纯路径 `,以及从纯路径继承而来但提供 I/O 操作的 :ref:`具体路径 `。" + +#: ../../library/pathlib.rst:25 +msgid "" +"If you've never used this module before or just aren't sure which class is " +"right for your task, :class:`Path` is most likely what you need. It " +"instantiates a :ref:`concrete path ` for the platform the " +"code is running on." +msgstr "" +"如果以前从未用过此模块,或不确定哪个类适合完成任务,那要用的可能就是 :class:`Path`。它在运行代码的平台上实例化为 :ref:`具体路径 " +"`。" + +#: ../../library/pathlib.rst:29 +msgid "Pure paths are useful in some special cases; for example:" +msgstr "在一些用例中纯路径很有用,例如:" + +#: ../../library/pathlib.rst:31 +msgid "" +"If you want to manipulate Windows paths on a Unix machine (or vice versa). " +"You cannot instantiate a :class:`WindowsPath` when running on Unix, but you " +"can instantiate :class:`PureWindowsPath`." +msgstr "" +"如果你想要在 Unix 设备上操作 Windows 路径(或者相反)。你不应在 Unix 上实例化一个 " +":class:`WindowsPath`,但是你可以实例化 :class:`PureWindowsPath`。" + +#: ../../library/pathlib.rst:34 +msgid "" +"You want to make sure that your code only manipulates paths without actually" +" accessing the OS. In this case, instantiating one of the pure classes may " +"be useful since those simply don't have any OS-accessing operations." +msgstr "你只想操作路径但不想实际访问操作系统。在这种情况下,实例化一个纯路径是有用的,因为它们没有任何访问操作系统的操作。" + +#: ../../library/pathlib.rst:39 +msgid ":pep:`428`: The pathlib module -- object-oriented filesystem paths." +msgstr ":pep:`428`:pathlib 模块 -- 面向对象的文件系统路径。" + +#: ../../library/pathlib.rst:42 +msgid "" +"For low-level path manipulation on strings, you can also use the " +":mod:`os.path` module." +msgstr "对于底层的路径字符串操作,你也可以使用 :mod:`os.path` 模块。" + +#: ../../library/pathlib.rst:47 +msgid "Basic use" +msgstr "基础使用" + +#: ../../library/pathlib.rst:49 +msgid "Importing the main class::" +msgstr "导入主类::" + +#: ../../library/pathlib.rst:53 +msgid "Listing subdirectories::" +msgstr "列出子目录::" + +#: ../../library/pathlib.rst:60 +msgid "Listing Python source files in this directory tree::" +msgstr "列出当前目录树下的所有 Python 源代码文件::" + +#: ../../library/pathlib.rst:67 +msgid "Navigating inside a directory tree::" +msgstr "在目录树中移动::" + +#: ../../library/pathlib.rst:76 +msgid "Querying path properties::" +msgstr "查询路径的属性::" + +#: ../../library/pathlib.rst:83 +msgid "Opening a file::" +msgstr "打开一个文件::" + +#: ../../library/pathlib.rst:93 +msgid "Pure paths" +msgstr "纯路径" + +#: ../../library/pathlib.rst:95 +msgid "" +"Pure path objects provide path-handling operations which don't actually " +"access a filesystem. There are three ways to access these classes, which we" +" also call *flavours*:" +msgstr "纯路径对象提供了不实际访问文件系统的路径处理操作。有三种方式来访问这些类,也是不同的风格:" + +#: ../../library/pathlib.rst:101 +msgid "" +"A generic class that represents the system's path flavour (instantiating it " +"creates either a :class:`PurePosixPath` or a :class:`PureWindowsPath`)::" +msgstr "" +"一个通用的类,代表当前系统的路径风格(实例化为 :class:`PurePosixPath` 或者 " +":class:`PureWindowsPath`)::" + +#: ../../library/pathlib.rst:107 +msgid "" +"Each element of *pathsegments* can be either a string representing a path " +"segment, an object implementing the :class:`os.PathLike` interface which " +"returns a string, or another path object::" +msgstr "" +"每一个 *pathsegments* 的元素可能是一个代表路径片段的字符串,一个返回字符串的实现了 :class:`os.PathLike` " +"接口的对象,或者另一个路径对象::" + +#: ../../library/pathlib.rst:116 +msgid "When *pathsegments* is empty, the current directory is assumed::" +msgstr "当 *pathsegments* 为空的时候,假定为当前目录::" + +#: ../../library/pathlib.rst:121 +msgid "" +"When several absolute paths are given, the last is taken as an anchor " +"(mimicking :func:`os.path.join`'s behaviour)::" +msgstr "当给出一些绝对路径,最后一位将被当作锚(模仿 :func:`os.path.join` 的行为)::" + +#: ../../library/pathlib.rst:129 +msgid "" +"However, in a Windows path, changing the local root doesn't discard the " +"previous drive setting::" +msgstr "但是,在 Windows 路径中,改变本地根目录并不会丢弃之前盘符的设置::" + +#: ../../library/pathlib.rst:135 +msgid "" +"Spurious slashes and single dots are collapsed, but double dots (``'..'``) " +"are not, since this would change the meaning of a path in the face of " +"symbolic links::" +msgstr "假斜线和单独的点都会被消除,但是双点 (``‘..’``) 不会,以防改变符号链接的含义。" + +#: ../../library/pathlib.rst:146 +msgid "" +"(a naïve approach would make ``PurePosixPath('foo/../bar')`` equivalent to " +"``PurePosixPath('bar')``, which is wrong if ``foo`` is a symbolic link to " +"another directory)" +msgstr "" +"(一个很 naïve 的做法是让 ``PurePosixPath('foo/../bar')`` 等同于 " +"``PurePosixPath('bar')``,如果 ``foo`` 是一个指向其他目录的符号链接那么这个做法就将出错)" + +#: ../../library/pathlib.rst:150 +msgid "" +"Pure path objects implement the :class:`os.PathLike` interface, allowing " +"them to be used anywhere the interface is accepted." +msgstr "纯路径对象实现了 :class:`os.PathLike` 接口,允许它们在任何接受此接口的地方使用。" + +#: ../../library/pathlib.rst:153 +msgid "Added support for the :class:`os.PathLike` interface." +msgstr "添加了 :class:`os.PathLike` 接口支持。" + +#: ../../library/pathlib.rst:158 +msgid "" +"A subclass of :class:`PurePath`, this path flavour represents non-Windows " +"filesystem paths::" +msgstr "一个 :class:`PurePath` 的子类,路径风格不同于 Windows 文件系统::" + +#: ../../library/pathlib.rst:164 ../../library/pathlib.rst:174 +#: ../../library/pathlib.rst:636 ../../library/pathlib.rst:646 +#: ../../library/pathlib.rst:656 +msgid "*pathsegments* is specified similarly to :class:`PurePath`." +msgstr "*pathsegments* 参数的指定和 :class:`PurePath` 相同。" + +#: ../../library/pathlib.rst:168 +msgid "" +"A subclass of :class:`PurePath`, this path flavour represents Windows " +"filesystem paths::" +msgstr ":class:`PurePath` 的一个子类,路径风格为 Windows 文件系统路径::" + +#: ../../library/pathlib.rst:176 +msgid "" +"Regardless of the system you're running on, you can instantiate all of these" +" classes, since they don't provide any operation that does system calls." +msgstr "无论你正运行什么系统,你都可以实例化这些类,因为它们提供的操作不做任何系统调用。" + +#: ../../library/pathlib.rst:181 +msgid "General properties" +msgstr "通用性质" + +#: ../../library/pathlib.rst:183 +msgid "" +"Paths are immutable and hashable. Paths of a same flavour are comparable " +"and orderable. These properties respect the flavour's case-folding " +"semantics::" +msgstr "路径是不可变并可哈希的。相同风格的路径可以排序与比较。这些性质尊重对应风格的大小写转换语义::" + +#: ../../library/pathlib.rst:196 +msgid "Paths of a different flavour compare unequal and cannot be ordered::" +msgstr "不同风格的路径比较得到不等的结果并且无法被排序::" + +#: ../../library/pathlib.rst:207 +msgid "Operators" +msgstr "运算符" + +#: ../../library/pathlib.rst:209 +msgid "" +"The slash operator helps create child paths, similarly to " +":func:`os.path.join`::" +msgstr "斜杠 ``/`` 操作符有助于创建子路径,就像 :func:`os.path.join` 一样::" + +#: ../../library/pathlib.rst:220 +msgid "" +"A path object can be used anywhere an object implementing " +":class:`os.PathLike` is accepted::" +msgstr "文件对象可用于任何接受 :class:`os.PathLike` 接口实现的地方。" + +#: ../../library/pathlib.rst:228 +msgid "" +"The string representation of a path is the raw filesystem path itself (in " +"native form, e.g. with backslashes under Windows), which you can pass to any" +" function taking a file path as a string::" +msgstr "" +"路径的字符串表示法为它自己原始的文件系统路径(以原生形式,例如在 Windows 下使用反斜杠)。你可以传递给任何需要字符串形式路径的函数。" + +#: ../../library/pathlib.rst:239 +msgid "" +"Similarly, calling :class:`bytes` on a path gives the raw filesystem path as" +" a bytes object, as encoded by :func:`os.fsencode`::" +msgstr "" +"类似地,在路径上调用 :class:`bytes` 将原始文件系统路径作为字节对象给出,就像被 :func:`os.fsencode` 编码一样::" + +#: ../../library/pathlib.rst:246 +msgid "" +"Calling :class:`bytes` is only recommended under Unix. Under Windows, the " +"unicode form is the canonical representation of filesystem paths." +msgstr "只推荐在 Unix 下调用 :class:`bytes`。在 Windows, unicode 形式是文件系统路径的规范表示法。" + +#: ../../library/pathlib.rst:251 +msgid "Accessing individual parts" +msgstr "访问个别部分" + +#: ../../library/pathlib.rst:253 +msgid "" +"To access the individual \"parts\" (components) of a path, use the following" +" property:" +msgstr "为了访问路径独立的部分 (组件),使用以下特征属性:" + +#: ../../library/pathlib.rst:258 +msgid "A tuple giving access to the path's various components::" +msgstr "一个元组,可以访问路径的多个组件::" + +#: ../../library/pathlib.rst:268 +msgid "(note how the drive and local root are regrouped in a single part)" +msgstr "(注意盘符和本地根目录是如何重组的)" + +#: ../../library/pathlib.rst:272 +msgid "Methods and properties" +msgstr "方法和特征属性" + +#: ../../library/pathlib.rst:278 +msgid "Pure paths provide the following methods and properties:" +msgstr "纯路径提供以下方法和特征属性:" + +#: ../../library/pathlib.rst:282 +msgid "A string representing the drive letter or name, if any::" +msgstr "一个表示驱动器盘符或命名的字符串,如果存在::" + +#: ../../library/pathlib.rst:291 +msgid "UNC shares are also considered drives::" +msgstr "UNC 分享也被认作驱动器::" + +#: ../../library/pathlib.rst:298 +msgid "A string representing the (local or global) root, if any::" +msgstr "一个表示(本地或全局)根的字符串,如果存在::" + +#: ../../library/pathlib.rst:307 +msgid "UNC shares always have a root::" +msgstr "UNC 分享一样拥有根::" + +#: ../../library/pathlib.rst:314 +msgid "The concatenation of the drive and root::" +msgstr "驱动器和根的联合::" + +#: ../../library/pathlib.rst:328 +msgid "" +"An immutable sequence providing access to the logical ancestors of the " +"path::" +msgstr "提供访问此路径的逻辑祖先的不可变序列::" + +#: ../../library/pathlib.rst:342 +msgid "The logical parent of the path::" +msgstr "此路径的逻辑父路径::" + +#: ../../library/pathlib.rst:348 +msgid "You cannot go past an anchor, or empty path::" +msgstr "你不能超过一个 anchor 或空路径::" + +#: ../../library/pathlib.rst:358 +msgid "This is a purely lexical operation, hence the following behaviour::" +msgstr "这是一个单纯的词法操作,因此有以下行为::" + +#: ../../library/pathlib.rst:364 +msgid "" +"If you want to walk an arbitrary filesystem path upwards, it is recommended " +"to first call :meth:`Path.resolve` so as to resolve symlinks and eliminate " +"`\"..\"` components." +msgstr "如果要向上遍历任意文件系统路径,建议首先调用 :meth:`Path.resolve` 以解析符号链接并消除 `\"..\"` 部分。" + +#: ../../library/pathlib.rst:371 +msgid "" +"A string representing the final path component, excluding the drive and " +"root, if any::" +msgstr "一个表示最后路径组件的字符串,排除了驱动器与根目录,如果存在的话::" + +#: ../../library/pathlib.rst:377 +msgid "UNC drive names are not considered::" +msgstr "UNC 驱动器名不被考虑::" + +#: ../../library/pathlib.rst:387 +msgid "The file extension of the final component, if any::" +msgstr "最终组件的文件扩展名(如果有):" + +#: ../../library/pathlib.rst:399 +msgid "A list of the path's file extensions::" +msgstr "一个路径文件扩展名的列表:" + +#: ../../library/pathlib.rst:411 +msgid "The final path component, without its suffix::" +msgstr "最后一个路径组件,除去后缀::" + +#: ../../library/pathlib.rst:423 +msgid "" +"Return a string representation of the path with forward slashes (``/``)::" +msgstr "返回使用正斜杠(``/``)的路径字符串::" + +#: ../../library/pathlib.rst:434 +msgid "" +"Represent the path as a ``file`` URI. :exc:`ValueError` is raised if the " +"path isn't absolute." +msgstr "将路径表示为 ``file`` URI。 如果路径不是绝对路径,将引发 :exc:`ValueError`。" + +#: ../../library/pathlib.rst:447 +msgid "" +"Return whether the path is absolute or not. A path is considered absolute " +"if it has both a root and (if the flavour allows) a drive::" +msgstr "返回此路径是否为绝对路径。如果路径同时拥有驱动器符与根路径(如果风格允许)则将被认作绝对路径。" + +#: ../../library/pathlib.rst:467 +msgid "Return whether or not this path is relative to the *other* path." +msgstr "返回此路径是否相对于 *other* 的路径。" + +#: ../../library/pathlib.rst:480 +msgid "" +"With :class:`PureWindowsPath`, return ``True`` if the path is considered " +"reserved under Windows, ``False`` otherwise. With :class:`PurePosixPath`, " +"``False`` is always returned." +msgstr "" +"在 :class:`PureWindowsPath`,如果路径是被 Windows 保留的则返回 ``True``,否则 ``False``。在 " +":class:`PurePosixPath`,总是返回 ``False``。" + +#: ../../library/pathlib.rst:489 +msgid "" +"File system calls on reserved paths can fail mysteriously or have unintended" +" effects." +msgstr "对保留路径的文件系统调用可能会莫名其妙地失败或产生意想不到的效果。" + +#: ../../library/pathlib.rst:495 +msgid "" +"Calling this method is equivalent to combining the path with each of the " +"*other* arguments in turn::" +msgstr "调用此方法等同于将每个 *other* 参数中的项目连接在一起::" + +#: ../../library/pathlib.rst:510 +msgid "" +"Match this path against the provided glob-style pattern. Return ``True`` if" +" matching is successful, ``False`` otherwise." +msgstr "将此路径与所提供的 glob 样式匹配。如果匹配成功,则返回``True``,否则返回``False``。" + +#: ../../library/pathlib.rst:513 +msgid "" +"If *pattern* is relative, the path can be either relative or absolute, and " +"matching is done from the right::" +msgstr "如果 *pattern* 是相对路径,则路径既可以是相对路径,也可以是绝对路径,匹配从右边的开始:" + +#: ../../library/pathlib.rst:523 +msgid "" +"If *pattern* is absolute, the path must be absolute, and the whole path must" +" match::" +msgstr "如果 *pattern* 是绝对的,则路径必须是绝对的,并且路径必须完全匹配::" + +#: ../../library/pathlib.rst:531 +msgid "As with other methods, case-sensitivity follows platform defaults::" +msgstr "与其他方法一样,是否大小写敏感遵循平台的默认规则::" + +#: ../../library/pathlib.rst:541 +msgid "" +"Compute a version of this path relative to the path represented by *other*." +" If it's impossible, ValueError is raised::" +msgstr "计算此路径相对 *other* 表示路径的版本。如果不可计算,则抛出 ValueError::" + +#: ../../library/pathlib.rst:556 +msgid "" +"NOTE: This function is part of :class:`PurePath` and works with strings. It " +"does not check or access the underlying file structure." +msgstr "注意:此函数是 :class:`PurePath` 的一部分并且适用于字符串。 它不会检查或访问下层的文件结构。" + +#: ../../library/pathlib.rst:561 +msgid "" +"Return a new path with the :attr:`name` changed. If the original path " +"doesn't have a name, ValueError is raised::" +msgstr "返回一个新的路径并修改 :attr:`name`。如果原本路径没有 name,ValueError 被抛出::" + +#: ../../library/pathlib.rst:578 +msgid "" +"Return a new path with the :attr:`stem` changed. If the original path " +"doesn't have a name, ValueError is raised::" +msgstr "返回一个带有修改后 :attr:`stem` 的新路径。 如果原路径没有名称,则会引发 ValueError::" + +#: ../../library/pathlib.rst:602 +msgid "" +"Return a new path with the :attr:`suffix` changed. If the original path " +"doesn't have a suffix, the new *suffix* is appended instead. If the " +"*suffix* is an empty string, the original suffix is removed::" +msgstr "" +"返回一个新的路径并修改 :attr:`suffix`。如果原本的路径没有后缀,新的 *suffix* 则被追加以代替。如果 *suffix* " +"是空字符串,则原本的后缀被移除::" + +#: ../../library/pathlib.rst:621 +msgid "Concrete paths" +msgstr "具体路径" + +#: ../../library/pathlib.rst:623 +msgid "" +"Concrete paths are subclasses of the pure path classes. In addition to " +"operations provided by the latter, they also provide methods to do system " +"calls on path objects. There are three ways to instantiate concrete paths:" +msgstr "具体路径是纯路径的子类。除了后者提供的操作之外,它们还提供了对路径对象进行系统调用的方法。有三种方法可以实例化具体路径::" + +#: ../../library/pathlib.rst:629 +msgid "" +"A subclass of :class:`PurePath`, this class represents concrete paths of the" +" system's path flavour (instantiating it creates either a :class:`PosixPath`" +" or a :class:`WindowsPath`)::" +msgstr "" +"一个 :class:`PurePath` 的子类,此类以当前系统的路径风格表示路径(实例化为 :class:`PosixPath` 或 " +":class:`WindowsPath`)::" + +#: ../../library/pathlib.rst:640 +msgid "" +"A subclass of :class:`Path` and :class:`PurePosixPath`, this class " +"represents concrete non-Windows filesystem paths::" +msgstr "" +"一个 :class:`Path` 和 :class:`PurePosixPath` 的子类,此类表示一个非 Windows 文件系统的具体路径::" + +#: ../../library/pathlib.rst:650 +msgid "" +"A subclass of :class:`Path` and :class:`PureWindowsPath`, this class " +"represents concrete Windows filesystem paths::" +msgstr "" +":class:`Path` 和 :class:`PureWindowsPath` 的子类,从类表示一个 Windows 文件系统的具体路径::" + +#: ../../library/pathlib.rst:658 +msgid "" +"You can only instantiate the class flavour that corresponds to your system " +"(allowing system calls on non-compatible path flavours could lead to bugs or" +" failures in your application)::" +msgstr "你只能实例化与当前系统风格相同的类(允许系统调用作用于不兼容的路径风格可能在应用程序中导致缺陷或失败)::" + +#: ../../library/pathlib.rst:678 +msgid "Methods" +msgstr "方法" + +#: ../../library/pathlib.rst:680 +msgid "" +"Concrete paths provide the following methods in addition to pure paths " +"methods. Many of these methods can raise an :exc:`OSError` if a system call" +" fails (for example because the path doesn't exist)." +msgstr "除纯路径方法外,实体路径还提供以下方法。 如果系统调用失败(例如因为路径不存在)这些方法中许多都会引发 :exc:`OSError`。" + +#: ../../library/pathlib.rst:686 +msgid "" +":meth:`~Path.exists()`, :meth:`~Path.is_dir()`, :meth:`~Path.is_file()`, " +":meth:`~Path.is_mount()`, :meth:`~Path.is_symlink()`, " +":meth:`~Path.is_block_device()`, :meth:`~Path.is_char_device()`, " +":meth:`~Path.is_fifo()`, :meth:`~Path.is_socket()` now return ``False`` " +"instead of raising an exception for paths that contain characters " +"unrepresentable at the OS level." +msgstr "" +"对于包含 OS 层级无法表示字符的路径,:meth:`~Path.exists()`, :meth:`~Path.is_dir()`, " +":meth:`~Path.is_file()`, :meth:`~Path.is_mount()`, " +":meth:`~Path.is_symlink()`, :meth:`~Path.is_block_device()`, " +":meth:`~Path.is_char_device()`, :meth:`~Path.is_fifo()`, " +":meth:`~Path.is_socket()` 现在将返回 ``False`` 而不是引发异常。" + +#: ../../library/pathlib.rst:696 +msgid "" +"Return a new path object representing the current directory (as returned by " +":func:`os.getcwd`)::" +msgstr "返回一个新的表示当前目录的路径对象(和 :func:`os.getcwd` 返回的相同)::" + +#: ../../library/pathlib.rst:705 +msgid "" +"Return a new path object representing the user's home directory (as returned" +" by :func:`os.path.expanduser` with ``~`` construct)::" +msgstr "返回一个表示当前用户家目录的新路径对象(和 :func:`os.path.expanduser` 构造含 ``~`` 路径返回的相同)::" + +#: ../../library/pathlib.rst:711 ../../library/pathlib.rst:771 +msgid "" +"Note that unlike :func:`os.path.expanduser`, on POSIX systems a " +":exc:`KeyError` or :exc:`RuntimeError` will be raised, and on Windows " +"systems a :exc:`RuntimeError` will be raised if home directory can't be " +"resolved." +msgstr "" + +#: ../../library/pathlib.rst:720 +msgid "" +"Return a :class:`os.stat_result` object containing information about this " +"path, like :func:`os.stat`. The result is looked up at each call to this " +"method." +msgstr "" +"返回一个 :class:`os.stat_result` 对象,其中包含有关此路径的信息,例如 :func:`os.stat`。 " +"结果会在每次调用此方法时重新搜索。" + +#: ../../library/pathlib.rst:734 +msgid "Change the file mode and permissions, like :func:`os.chmod`::" +msgstr "改变文件的模式和权限,和 :func:`os.chmod` 一样::" + +#: ../../library/pathlib.rst:746 +msgid "Whether the path points to an existing file or directory::" +msgstr "此路径是否指向一个已存在的文件或目录::" + +#: ../../library/pathlib.rst:758 +msgid "" +"If the path points to a symlink, :meth:`exists` returns whether the symlink " +"*points to* an existing file or directory." +msgstr "如果路径指向一个符号链接, :meth:`exists` 返回此符号链接是否指向存在的文件或目录。" + +#: ../../library/pathlib.rst:764 +msgid "" +"Return a new path with expanded ``~`` and ``~user`` constructs, as returned " +"by :meth:`os.path.expanduser`::" +msgstr "返回展开了包含 ``~`` 和 ``~user`` 的构造,就和 :meth:`os.path.expanduser` 一样::" + +#: ../../library/pathlib.rst:780 +msgid "" +"Glob the given relative *pattern* in the directory represented by this path," +" yielding all matching files (of any kind)::" +msgstr "解析相对于此路径的通配符 *pattern*,产生所有匹配的文件::" + +#: ../../library/pathlib.rst:788 +msgid "" +"The \"``**``\" pattern means \"this directory and all subdirectories, " +"recursively\". In other words, it enables recursive globbing::" +msgstr "\"``**``\" 模式表示 “此目录以及所有子目录,递归”。换句话说,它启用递归通配::" + +#: ../../library/pathlib.rst:799 +msgid "" +"Using the \"``**``\" pattern in large directory trees may consume an " +"inordinate amount of time." +msgstr "在一个较大的目录树中使用 \"``**``\" 模式可能会消耗非常多的时间。" + +#: ../../library/pathlib.rst:802 +msgid "" +"Raises an :ref:`auditing event ` ``pathlib.Path.glob`` with " +"arguments ``self``, ``pattern``." +msgstr "" +"引发一个 :ref:`审计事件 ` ``pathlib.Path.glob`` 并附带参数 ``self``, " +"``pattern``。" + +#: ../../library/pathlib.rst:807 +msgid "" +"Return the name of the group owning the file. :exc:`KeyError` is raised if " +"the file's gid isn't found in the system database." +msgstr "返回拥有此文件的用户组。如果文件的 GID 无法在系统数据库中找到,将抛出 :exc:`KeyError` 。" + +#: ../../library/pathlib.rst:813 +msgid "" +"Return ``True`` if the path points to a directory (or a symbolic link " +"pointing to a directory), ``False`` if it points to another kind of file." +msgstr "如果文件指向一个目录(或指向目录的符号链接)则返回 ``True``,指向其他类型的文件则返回 ``False``。" + +#: ../../library/pathlib.rst:816 ../../library/pathlib.rst:825 +#: ../../library/pathlib.rst:854 ../../library/pathlib.rst:863 +#: ../../library/pathlib.rst:872 ../../library/pathlib.rst:881 +msgid "" +"``False`` is also returned if the path doesn't exist or is a broken symlink;" +" other errors (such as permission errors) are propagated." +msgstr "当路径不存在或者是一个破损的符号链接时也会返回 ``False``;其他错误(例如权限错误)被传播。" + +#: ../../library/pathlib.rst:822 +msgid "" +"Return ``True`` if the path points to a regular file (or a symbolic link " +"pointing to a regular file), ``False`` if it points to another kind of file." +msgstr "如果文件指向一个常规文件(或指向常规文件的符号链接)则返回 ``True``,指向其他类型的文件则返回 ``False``。" + +#: ../../library/pathlib.rst:831 +msgid "" +"Return ``True`` if the path is a :dfn:`mount point`: a point in a file " +"system where a different file system has been mounted. On POSIX, the " +"function checks whether *path*'s parent, :file:`path/..`, is on a different " +"device than *path*, or whether :file:`path/..` and *path* point to the same " +"i-node on the same device --- this should detect mount points for all Unix " +"and POSIX variants. Not implemented on Windows." +msgstr "" +"如果路径是一个 :dfn:`挂载点 `: 在文件系统中被其他不同的文件系统挂载的地点则返回 ``True``。在 POSIX " +"系统上,此函数检查 *path* 的父级 —— :file:`path/..` 是否处于一个和 *path* 不同的设备中,或者 " +":file:`path/..` 和 *path* 是否指向相同设备的相同 i-node —— 这能检测所有 Unix 以及 POSIX 变种上的挂载点。" +" Windows 上未实现。" + +#: ../../library/pathlib.rst:843 +msgid "" +"Return ``True`` if the path points to a symbolic link, ``False`` otherwise." +msgstr "如果路径指向符号链接则返回 ``True``, 否则 ``False``。" + +#: ../../library/pathlib.rst:845 +msgid "" +"``False`` is also returned if the path doesn't exist; other errors (such as " +"permission errors) are propagated." +msgstr "如果路径不存在也返回 ``False``;其他错误(例如权限错误)被传播。" + +#: ../../library/pathlib.rst:851 +msgid "" +"Return ``True`` if the path points to a Unix socket (or a symbolic link " +"pointing to a Unix socket), ``False`` if it points to another kind of file." +msgstr "" +"如果路径指向一个 Unix socket 文件(或者指向 Unix socket 文件的符号链接)则返回 ``True``,如果指向其他类型的文件则返回" +" ``False``。" + +#: ../../library/pathlib.rst:860 +msgid "" +"Return ``True`` if the path points to a FIFO (or a symbolic link pointing to" +" a FIFO), ``False`` if it points to another kind of file." +msgstr "如果路径指向一个先进先出存储(或者指向先进先出存储的符号链接)则返回 ``True`` ,指向其他类型的文件则返回 ``False``。" + +#: ../../library/pathlib.rst:869 +msgid "" +"Return ``True`` if the path points to a block device (or a symbolic link " +"pointing to a block device), ``False`` if it points to another kind of file." +msgstr "如果文件指向一个块设备(或者指向块设备的符号链接)则返回 ``True``,指向其他类型的文件则返回 ``False``。" + +#: ../../library/pathlib.rst:878 +msgid "" +"Return ``True`` if the path points to a character device (or a symbolic link" +" pointing to a character device), ``False`` if it points to another kind of " +"file." +msgstr "如果路径指向一个字符设备(或指向字符设备的符号链接)则返回 ``True``,指向其他类型的文件则返回 ``False``。" + +#: ../../library/pathlib.rst:887 +msgid "" +"When the path points to a directory, yield path objects of the directory " +"contents::" +msgstr "当路径指向一个目录时,产生该路径下的对象的路径::" + +#: ../../library/pathlib.rst:901 +msgid "" +"The children are yielded in arbitrary order, and the special entries ``'.'``" +" and ``'..'`` are not included. If a file is removed from or added to the " +"directory after creating the iterator, whether a path object for that file " +"be included is unspecified." +msgstr "" +"子条目会以任意顺序生成,并且不包括特殊条目 ``'.'`` 和 ``'..'``。 " +"如果迭代器创建之后有文件在目录中被移除或添加,是否要包括该文件所对应的路径对象并没有明确规定。" + +#: ../../library/pathlib.rst:908 +msgid "" +"Like :meth:`Path.chmod` but, if the path points to a symbolic link, the " +"symbolic link's mode is changed rather than its target's." +msgstr "就像 :meth:`Path.chmod` 但是如果路径指向符号链接则是修改符号链接的模式,而不是修改符号链接的目标。" + +#: ../../library/pathlib.rst:914 +msgid "" +"Like :meth:`Path.stat` but, if the path points to a symbolic link, return " +"the symbolic link's information rather than its target's." +msgstr "就和 :meth:`Path.stat` 一样,但是如果路径指向符号链接,则是返回符号链接而不是目标的信息。" + +#: ../../library/pathlib.rst:920 +msgid "" +"Create a new directory at this given path. If *mode* is given, it is " +"combined with the process' ``umask`` value to determine the file mode and " +"access flags. If the path already exists, :exc:`FileExistsError` is raised." +msgstr "" +"新建给定路径的目录。如果给出了 *mode* ,它将与当前进程的 ``umask`` 值合并来决定文件模式和访问标志。如果路径已经存在,则抛出 " +":exc:`FileExistsError`。" + +#: ../../library/pathlib.rst:925 +msgid "" +"If *parents* is true, any missing parents of this path are created as " +"needed; they are created with the default permissions without taking *mode* " +"into account (mimicking the POSIX ``mkdir -p`` command)." +msgstr "" +"如果 *parents* 为真值,任何找不到的父目录都会伴随着此路径被创建;它们会以默认权限被创建,而不考虑 *mode* 设置(模仿 POSIX 的 " +"``mkdir -p`` 命令)。" + +#: ../../library/pathlib.rst:929 +msgid "" +"If *parents* is false (the default), a missing parent raises " +":exc:`FileNotFoundError`." +msgstr "如果 *parents* 为假值(默认),则找不到的父级目录会引发 :exc:`FileNotFoundError`。" + +#: ../../library/pathlib.rst:932 +msgid "" +"If *exist_ok* is false (the default), :exc:`FileExistsError` is raised if " +"the target directory already exists." +msgstr "如果 *exist_ok* 为 false(默认),则在目标已存在的情况下抛出 :exc:`FileExistsError`。" + +#: ../../library/pathlib.rst:935 +msgid "" +"If *exist_ok* is true, :exc:`FileExistsError` exceptions will be ignored " +"(same behavior as the POSIX ``mkdir -p`` command), but only if the last path" +" component is not an existing non-directory file." +msgstr "" +"如果 *exist_ok* 为 true, 则 :exc:`FileExistsError` 异常将被忽略(和 POSIX ``mkdir -p`` " +"命令行为相同),但是只有在最后一个路径组件不是现存的非目录文件时才生效。" + +#: ../../library/pathlib.rst:939 +msgid "The *exist_ok* parameter was added." +msgstr "*exist_ok* 形参被加入。" + +#: ../../library/pathlib.rst:945 +msgid "" +"Open the file pointed to by the path, like the built-in :func:`open` " +"function does::" +msgstr "打开路径指向的文件,就像内置的 :func:`open` 函数所做的一样::" + +#: ../../library/pathlib.rst:957 +msgid "" +"Return the name of the user owning the file. :exc:`KeyError` is raised if " +"the file's uid isn't found in the system database." +msgstr "返回拥有此文件的用户名。如果文件的 UID 无法在系统数据库中找到,则抛出 :exc:`KeyError`。" + +#: ../../library/pathlib.rst:963 +msgid "Return the binary contents of the pointed-to file as a bytes object::" +msgstr "以字节对象的形式返回路径指向的文件的二进制内容::" + +#: ../../library/pathlib.rst:976 +msgid "Return the decoded contents of the pointed-to file as a string::" +msgstr "以字符串形式返回路径指向的文件的解码后文本内容。" + +#: ../../library/pathlib.rst:984 +msgid "" +"The file is opened and then closed. The optional parameters have the same " +"meaning as in :func:`open`." +msgstr "文件先被打开然后关闭。有和 :func:`open` 一样的可选形参。" + +#: ../../library/pathlib.rst:992 +msgid "" +"Return the path to which the symbolic link points (as returned by " +":func:`os.readlink`)::" +msgstr "返回符号链接所指向的路径(即 :func:`os.readlink` 的返回值)::" + +#: ../../library/pathlib.rst:1005 +msgid "" +"Rename this file or directory to the given *target*, and return a new Path " +"instance pointing to *target*. On Unix, if *target* exists and is a file, " +"it will be replaced silently if the user has permission. *target* can be " +"either a string or another path object::" +msgstr "" +"将文件或目录重命名为给定的 *target*,并返回一个新的指向 *target* 的 Path 实例。 在 Unix 上,如果 *target* " +"存在且为一个文件,如果用户有足够权限,则它将被静默地替换。 *target* 可以是一个字符串或者另一个路径对象::" + +#: ../../library/pathlib.rst:1019 ../../library/pathlib.rst:1033 +msgid "" +"The target path may be absolute or relative. Relative paths are interpreted " +"relative to the current working directory, *not* the directory of the Path " +"object." +msgstr "目标路径可能为绝对或相对路径。 相对路径将被解释为相对于当前工作目录,而 *不是* 相对于 Path 对象的目录。" + +#: ../../library/pathlib.rst:1023 ../../library/pathlib.rst:1037 +msgid "Added return value, return the new Path instance." +msgstr "添加了返回值,返回新的 Path 实例。" + +#: ../../library/pathlib.rst:1029 +msgid "" +"Rename this file or directory to the given *target*, and return a new Path " +"instance pointing to *target*. If *target* points to an existing file or " +"empty directory, it will be unconditionally replaced." +msgstr "" +"将文件或目录重命名为给定的 *target*,并返回一个新的指向 *target* 的 Path 实例。 如果 *target* " +"指向一个现有文件或空目录,则它将被无条件地替换。" + +#: ../../library/pathlib.rst:1043 +msgid "" +"Make the path absolute, resolving any symlinks. A new path object is " +"returned::" +msgstr "将路径绝对化,解析任何符号链接。返回新的路径对象::" + +#: ../../library/pathlib.rst:1052 +msgid "" +"\"``..``\" components are also eliminated (this is the only method to do " +"so)::" +msgstr "\"``..``\" 组件也将被消除(只有这一种方法这么做)::" + +#: ../../library/pathlib.rst:1058 +msgid "" +"If the path doesn't exist and *strict* is ``True``, :exc:`FileNotFoundError`" +" is raised. If *strict* is ``False``, the path is resolved as far as " +"possible and any remainder is appended without checking whether it exists. " +"If an infinite loop is encountered along the resolution path, " +":exc:`RuntimeError` is raised." +msgstr "" +"如果路径不存在并且 *strict* 设为 ``True``,则抛出 :exc:`FileNotFoundError`。如果 *strict* 为 " +"``False``,则路径将被尽可能地解析并且任何剩余部分都会被不检查是否存在地追加。如果在解析路径上发生无限循环,则抛出 " +":exc:`RuntimeError`。" + +#: ../../library/pathlib.rst:1064 +msgid "The *strict* argument (pre-3.6 behavior is strict)." +msgstr "加入*strict* 参数(3.6之前的版本相当于strict值为True)" + +#: ../../library/pathlib.rst:1069 +msgid "" +"This is like calling :func:`Path.glob` with \"``**/``\" added in front of " +"the given relative *pattern*::" +msgstr "这就像调用 :func:`Path.glob` 并在给定的相对 *pattern* 前面添加了 \"``**/``\"::" + +#: ../../library/pathlib.rst:1079 +msgid "" +"Raises an :ref:`auditing event ` ``pathlib.Path.rglob`` with " +"arguments ``self``, ``pattern``." +msgstr "" +"引发一个 :ref:`审计事件 ` ``pathlib.Path.rglob`` 并附带参数 ``self``, " +"``pattern``。" + +#: ../../library/pathlib.rst:1084 +msgid "Remove this directory. The directory must be empty." +msgstr "移除此目录。此目录必须为空的。" + +#: ../../library/pathlib.rst:1089 +msgid "" +"Return whether this path points to the same file as *other_path*, which can " +"be either a Path object, or a string. The semantics are similar to " +":func:`os.path.samefile` and :func:`os.path.samestat`." +msgstr "" +"返回此目录是否指向与可能是字符串或者另一个路径对象的 *other_path* 相同的文件。语义类似于 :func:`os.path.samefile`" +" 与 :func:`os.path.samestat`。" + +#: ../../library/pathlib.rst:1093 +msgid "" +"An :exc:`OSError` can be raised if either file cannot be accessed for some " +"reason." +msgstr "如果两者都以同一原因无法访问,则抛出 :exc:`OSError`。" + +#: ../../library/pathlib.rst:1110 +msgid "" +"Make this path a symbolic link to *target*. Under Windows, " +"*target_is_directory* must be true (default ``False``) if the link's target " +"is a directory. Under POSIX, *target_is_directory*'s value is ignored." +msgstr "" +"将此路径创建为指向 *target* 的符号链接。在 Windows 下,如果链接的目标是一个目录则 *target_is_directory* 必须为" +" true (默认为 ``False``)。在 POSIX 下, *target_is_directory* 的值将被忽略。" + +#: ../../library/pathlib.rst:1126 +msgid "" +"The order of arguments (link, target) is the reverse of " +":func:`os.symlink`'s." +msgstr "参数的顺序(link, target) 和 :func:`os.symlink` 是相反的。" + +#: ../../library/pathlib.rst:1132 +msgid "Make *target* a hard link to this path." +msgstr "创建硬链接 *target* 指向此路径。" + +#: ../../library/pathlib.rst:1136 +msgid "" +"This function does not make this path a hard link to *target*, despite the " +"implication of the function and argument names. The argument order (target, " +"link) is the reverse of :func:`Path.symlink_to`, but matches that of " +":func:`os.link`." +msgstr "" +"此函数不是将此路径设为指向 *target* 的硬链接,这与函数和参数名的本义不同。 参数顺序 (target, link) 与 " +":func:`Path.symlink_to` 相反,而与 :func:`os.link` 一致。" + +#: ../../library/pathlib.rst:1146 +msgid "" +"Create a file at this given path. If *mode* is given, it is combined with " +"the process' ``umask`` value to determine the file mode and access flags. " +"If the file already exists, the function succeeds if *exist_ok* is true (and" +" its modification time is updated to the current time), otherwise " +":exc:`FileExistsError` is raised." +msgstr "" +"将给定的路径创建为文件。如果给出了 *mode* 它将与当前进程的 ``umask`` 值合并以确定文件的模式和访问标志。如果文件已经存在,则当 " +"*exist_ok* 为 true 则函数仍会成功(并且将它的修改事件更新为当前事件),否则抛出 :exc:`FileExistsError`。" + +#: ../../library/pathlib.rst:1155 +msgid "" +"Remove this file or symbolic link. If the path points to a directory, use " +":func:`Path.rmdir` instead." +msgstr "移除此文件或符号链接。如果路径指向目录,则用 :func:`Path.rmdir` 代替。" + +#: ../../library/pathlib.rst:1158 +msgid "" +"If *missing_ok* is false (the default), :exc:`FileNotFoundError` is raised " +"if the path does not exist." +msgstr "如果 *missing_ok* 为假值(默认),则如果路径不存在将会引发 :exc:`FileNotFoundError`。" + +#: ../../library/pathlib.rst:1161 +msgid "" +"If *missing_ok* is true, :exc:`FileNotFoundError` exceptions will be ignored" +" (same behavior as the POSIX ``rm -f`` command)." +msgstr "" +"如果 *missing_ok* 为真值,则 :exc:`FileNotFoundError` 异常将被忽略(和 POSIX ``rm -f`` " +"命令的行为相同)。" + +#: ../../library/pathlib.rst:1164 +msgid "The *missing_ok* parameter was added." +msgstr "增加了 *missing_ok* 形参。" + +#: ../../library/pathlib.rst:1170 +msgid "" +"Open the file pointed to in bytes mode, write *data* to it, and close the " +"file::" +msgstr "将文件以二进制模式打开,写入 *data* 并关闭::" + +#: ../../library/pathlib.rst:1179 +msgid "An existing file of the same name is overwritten." +msgstr "一个同名的现存文件将被覆盖。" + +#: ../../library/pathlib.rst:1186 +msgid "" +"Open the file pointed to in text mode, write *data* to it, and close the " +"file::" +msgstr "将文件以文本模式打开,写入 *data* 并关闭::" + +#: ../../library/pathlib.rst:1195 +msgid "" +"An existing file of the same name is overwritten. The optional parameters " +"have the same meaning as in :func:`open`." +msgstr "同名的现有文件会被覆盖。 可选形参的含义与 :func:`open` 的相同。" + +#: ../../library/pathlib.rst:1201 +msgid "Correspondence to tools in the :mod:`os` module" +msgstr "对应的 :mod:`os` 模块的工具" + +#: ../../library/pathlib.rst:1203 +msgid "" +"Below is a table mapping various :mod:`os` functions to their corresponding " +":class:`PurePath`/:class:`Path` equivalent." +msgstr "以下是一个映射了 :mod:`os` 与 :class:`PurePath`/:class:`Path` 对应相同的函数的表。" + +#: ../../library/pathlib.rst:1208 +msgid "" +"Although :func:`os.path.relpath` and :meth:`PurePath.relative_to` have some " +"overlapping use-cases, their semantics differ enough to warrant not " +"considering them equivalent." +msgstr "" +"尽管 :func:`os.path.relpath` 和 :meth:`PurePath.relative_to` " +"拥有相同的重叠的用例,但是它们语义相差很大,不能认为它们等价。" + +#: ../../library/pathlib.rst:1213 +msgid "os and os.path" +msgstr "os 和 os.path" + +#: ../../library/pathlib.rst:1213 +msgid "pathlib" +msgstr "pathlib" + +#: ../../library/pathlib.rst:1215 +msgid ":func:`os.path.abspath`" +msgstr ":func:`os.path.abspath`" + +#: ../../library/pathlib.rst:1215 +msgid ":meth:`Path.resolve`" +msgstr ":meth:`Path.resolve`" + +#: ../../library/pathlib.rst:1216 +msgid ":func:`os.chmod`" +msgstr ":func:`os.chmod`" + +#: ../../library/pathlib.rst:1216 +msgid ":meth:`Path.chmod`" +msgstr ":meth:`Path.chmod`" + +#: ../../library/pathlib.rst:1217 +msgid ":func:`os.mkdir`" +msgstr ":func:`os.mkdir`" + +#: ../../library/pathlib.rst:1217 ../../library/pathlib.rst:1218 +msgid ":meth:`Path.mkdir`" +msgstr ":meth:`Path.mkdir`" + +#: ../../library/pathlib.rst:1218 +msgid ":func:`os.makedirs`" +msgstr ":func:`os.makedirs`" + +#: ../../library/pathlib.rst:1219 +msgid ":func:`os.rename`" +msgstr ":func:`os.rename`" + +#: ../../library/pathlib.rst:1219 +msgid ":meth:`Path.rename`" +msgstr ":meth:`Path.rename`" + +#: ../../library/pathlib.rst:1220 +msgid ":func:`os.replace`" +msgstr ":func:`os.replace`" + +#: ../../library/pathlib.rst:1220 +msgid ":meth:`Path.replace`" +msgstr ":meth:`Path.replace`" + +#: ../../library/pathlib.rst:1221 +msgid ":func:`os.rmdir`" +msgstr ":func:`os.rmdir`" + +#: ../../library/pathlib.rst:1221 +msgid ":meth:`Path.rmdir`" +msgstr ":meth:`Path.rmdir`" + +#: ../../library/pathlib.rst:1222 +msgid ":func:`os.remove`, :func:`os.unlink`" +msgstr ":func:`os.remove`, :func:`os.unlink`" + +#: ../../library/pathlib.rst:1222 +msgid ":meth:`Path.unlink`" +msgstr ":meth:`Path.unlink`" + +#: ../../library/pathlib.rst:1223 +msgid ":func:`os.getcwd`" +msgstr ":func:`os.getcwd`" + +#: ../../library/pathlib.rst:1223 +msgid ":func:`Path.cwd`" +msgstr ":func:`Path.cwd`" + +#: ../../library/pathlib.rst:1224 +msgid ":func:`os.path.exists`" +msgstr ":func:`os.path.exists`" + +#: ../../library/pathlib.rst:1224 +msgid ":meth:`Path.exists`" +msgstr ":meth:`Path.exists`" + +#: ../../library/pathlib.rst:1225 +msgid ":func:`os.path.expanduser`" +msgstr ":func:`os.path.expanduser`" + +#: ../../library/pathlib.rst:1225 +msgid ":meth:`Path.expanduser` and :meth:`Path.home`" +msgstr ":meth:`Path.expanduser` 和 :meth:`Path.home`" + +#: ../../library/pathlib.rst:1227 +msgid ":func:`os.listdir`" +msgstr ":func:`os.listdir`" + +#: ../../library/pathlib.rst:1227 +msgid ":meth:`Path.iterdir`" +msgstr ":meth:`Path.iterdir`" + +#: ../../library/pathlib.rst:1228 +msgid ":func:`os.path.isdir`" +msgstr ":func:`os.path.isdir`" + +#: ../../library/pathlib.rst:1228 +msgid ":meth:`Path.is_dir`" +msgstr ":meth:`Path.is_dir`" + +#: ../../library/pathlib.rst:1229 +msgid ":func:`os.path.isfile`" +msgstr ":func:`os.path.isfile`" + +#: ../../library/pathlib.rst:1229 +msgid ":meth:`Path.is_file`" +msgstr ":meth:`Path.is_file`" + +#: ../../library/pathlib.rst:1230 +msgid ":func:`os.path.islink`" +msgstr ":func:`os.path.islink`" + +#: ../../library/pathlib.rst:1230 +msgid ":meth:`Path.is_symlink`" +msgstr ":meth:`Path.is_symlink`" + +#: ../../library/pathlib.rst:1231 +msgid ":func:`os.link`" +msgstr ":func:`os.link`" + +#: ../../library/pathlib.rst:1231 +msgid ":meth:`Path.link_to`" +msgstr ":meth:`Path.link_to`" + +#: ../../library/pathlib.rst:1232 +msgid ":func:`os.symlink`" +msgstr ":func:`os.symlink`" + +#: ../../library/pathlib.rst:1232 +msgid ":meth:`Path.symlink_to`" +msgstr ":meth:`Path.symlink_to`" + +#: ../../library/pathlib.rst:1233 +msgid ":func:`os.readlink`" +msgstr ":func:`os.readlink`" + +#: ../../library/pathlib.rst:1233 +msgid ":meth:`Path.readlink`" +msgstr ":meth:`Path.readlink`" + +#: ../../library/pathlib.rst:1234 +msgid ":func:`os.stat`" +msgstr ":func:`os.stat`" + +#: ../../library/pathlib.rst:1234 +msgid ":meth:`Path.stat`, :meth:`Path.owner`, :meth:`Path.group`" +msgstr ":meth:`Path.stat`, :meth:`Path.owner`, :meth:`Path.group`" + +#: ../../library/pathlib.rst:1237 +msgid ":func:`os.path.isabs`" +msgstr ":func:`os.path.isabs`" + +#: ../../library/pathlib.rst:1237 +msgid ":meth:`PurePath.is_absolute`" +msgstr ":meth:`PurePath.is_absolute`" + +#: ../../library/pathlib.rst:1238 +msgid ":func:`os.path.join`" +msgstr ":func:`os.path.join`" + +#: ../../library/pathlib.rst:1238 +msgid ":func:`PurePath.joinpath`" +msgstr ":func:`PurePath.joinpath`" + +#: ../../library/pathlib.rst:1239 +msgid ":func:`os.path.basename`" +msgstr ":func:`os.path.basename`" + +#: ../../library/pathlib.rst:1239 +msgid ":data:`PurePath.name`" +msgstr ":data:`PurePath.name`" + +#: ../../library/pathlib.rst:1240 +msgid ":func:`os.path.dirname`" +msgstr ":func:`os.path.dirname`" + +#: ../../library/pathlib.rst:1240 +msgid ":data:`PurePath.parent`" +msgstr ":data:`PurePath.parent`" + +#: ../../library/pathlib.rst:1241 +msgid ":func:`os.path.samefile`" +msgstr ":func:`os.path.samefile`" + +#: ../../library/pathlib.rst:1241 +msgid ":meth:`Path.samefile`" +msgstr ":meth:`Path.samefile`" + +#: ../../library/pathlib.rst:1242 +msgid ":func:`os.path.splitext`" +msgstr ":func:`os.path.splitext`" + +#: ../../library/pathlib.rst:1242 +msgid ":data:`PurePath.suffix`" +msgstr ":data:`PurePath.suffix`" diff --git a/library/pdb.po b/library/pdb.po new file mode 100644 index 000000000..18f81db79 --- /dev/null +++ b/library/pdb.po @@ -0,0 +1,728 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) 2001-2024, Python Software Foundation +# This file is distributed under the same license as the Python package. +# FIRST AUTHOR , YEAR. +# +# Translators: +# nick <2330458484@qq.com>, 2019 +# Arisaka97 , 2020 +# Freesand Leo , 2022 +# Rafael Fontenelle , 2024 +# +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: Python 3.9\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2024-08-30 16:51+0000\n" +"PO-Revision-Date: 2017-02-16 23:21+0000\n" +"Last-Translator: Rafael Fontenelle , 2024\n" +"Language-Team: Chinese (China) (https://app.transifex.com/python-doc/teams/5390/zh_CN/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: zh_CN\n" +"Plural-Forms: nplurals=1; plural=0;\n" + +#: ../../library/pdb.rst:4 +msgid ":mod:`pdb` --- The Python Debugger" +msgstr ":mod:`pdb` --- Python 的调试器" + +#: ../../library/pdb.rst:9 +msgid "**Source code:** :source:`Lib/pdb.py`" +msgstr "**源代码:** :source:`Lib/pdb.py`" + +#: ../../library/pdb.rst:15 +msgid "" +"The module :mod:`pdb` defines an interactive source code debugger for Python" +" programs. It supports setting (conditional) breakpoints and single " +"stepping at the source line level, inspection of stack frames, source code " +"listing, and evaluation of arbitrary Python code in the context of any stack" +" frame. It also supports post-mortem debugging and can be called under " +"program control." +msgstr "" +":mod:`pdb` 模块定义了一个交互式源代码调试器,用于 Python " +"程序。它支持在源码行间设置(有条件的)断点和单步执行,检视堆栈帧,列出源码列表,以及在任何堆栈帧的上下文中运行任意 Python " +"代码。它还支持事后调试,可以在程序控制下调用。" + +#: ../../library/pdb.rst:26 +msgid "" +"The debugger is extensible -- it is actually defined as the class " +":class:`Pdb`. This is currently undocumented but easily understood by " +"reading the source. The extension interface uses the modules :mod:`bdb` and" +" :mod:`cmd`." +msgstr "" +"调试器是可扩展的——调试器实际被定义为 :class:`Pdb` 类。该类目前没有文档,但通过阅读源码很容易理解它。扩展接口使用了 :mod:`bdb`" +" 和 :mod:`cmd` 模块。" + +#: ../../library/pdb.rst:30 +msgid "" +"The debugger's prompt is ``(Pdb)``. Typical usage to run a program under " +"control of the debugger is::" +msgstr "调试器的提示符是 ``(Pdb)``。在调试器的控制下运行程序的典型用法是::" + +#: ../../library/pdb.rst:44 +msgid "" +"Tab-completion via the :mod:`readline` module is available for commands and " +"command arguments, e.g. the current global and local names are offered as " +"arguments of the ``p`` command." +msgstr "" +"由 :mod:`readline` 模块实现的 Tab 补全可用于补全本模块的命令和命令的参数,例如,Tab 补全会提供当前的全局变量和局部变量,用作 " +"``p`` 命令的参数。" + +#: ../../library/pdb.rst:49 +msgid "" +":file:`pdb.py` can also be invoked as a script to debug other scripts. For " +"example::" +msgstr "也可以将 :file:`pdb.py` 作为脚本调用,来调试其他脚本。例如::" + +#: ../../library/pdb.rst:54 +msgid "" +"When invoked as a script, pdb will automatically enter post-mortem debugging" +" if the program being debugged exits abnormally. After post-mortem " +"debugging (or after normal exit of the program), pdb will restart the " +"program. Automatic restarting preserves pdb's state (such as breakpoints) " +"and in most cases is more useful than quitting the debugger upon program's " +"exit." +msgstr "" +"当作为脚本调用时,如果要调试的程序异常退出,pdb 调试将自动进入事后调试。事后调试之后(或程序正常退出之后),pdb 将重新启动程序。自动重启会保留 " +"pdb 的状态(如断点),在大多数情况下,这比在退出程序的同时退出调试器更加实用。" + +#: ../../library/pdb.rst:60 +msgid "" +":file:`pdb.py` now accepts a ``-c`` option that executes commands as if " +"given in a :file:`.pdbrc` file, see :ref:`debugger-commands`." +msgstr "" +":file:`pdb.py` 现在接受 ``-c`` 选项,可以执行命令,这与将该命令写入 :file:`.pdbrc` 文件相同,请参阅 " +":ref:`debugger-commands`。" + +#: ../../library/pdb.rst:64 +msgid "" +":file:`pdb.py` now accepts a ``-m`` option that execute modules similar to " +"the way ``python3 -m`` does. As with a script, the debugger will pause " +"execution just before the first line of the module." +msgstr "" +":file:`pdb.py` 现在接受 ``-m`` 选项,该选项用于执行一个模块,类似于 ``python3 " +"-m``。与脚本相同,调试器将暂停在待执行模块第一行前。" + +#: ../../library/pdb.rst:70 +msgid "The typical usage to break into the debugger is to insert::" +msgstr "中断进入调试器的典型用法是插入::" + +#: ../../library/pdb.rst:74 +msgid "" +"at the location you want to break into the debugger, and then run the " +"program. You can then step through the code following this statement, and " +"continue running without the debugger using the :pdbcmd:`continue` command." +msgstr "" +"到你想进入调试器的位置,再运行程序。 然后你可以单步执行这条语句之后的代码,并使用 :pdbcmd:`continue` 命令来关闭调试器继续运行。" + +#: ../../library/pdb.rst:78 +msgid "" +"The built-in :func:`breakpoint()`, when called with defaults, can be used " +"instead of ``import pdb; pdb.set_trace()``." +msgstr "" +"内置函数 :func:`breakpoint()`,当以默认参数调用它时,可以用来代替 ``import pdb; pdb.set_trace()``。" + +#: ../../library/pdb.rst:82 +msgid "The typical usage to inspect a crashed program is::" +msgstr "检查已崩溃程序的典型用法是::" + +#: ../../library/pdb.rst:100 +msgid "" +"The module defines the following functions; each enters the debugger in a " +"slightly different way:" +msgstr "本模块定义了下列函数,每个函数进入调试器的方式略有不同:" + +#: ../../library/pdb.rst:105 +msgid "" +"Execute the *statement* (given as a string or a code object) under debugger " +"control. The debugger prompt appears before any code is executed; you can " +"set breakpoints and type :pdbcmd:`continue`, or you can step through the " +"statement using :pdbcmd:`step` or :pdbcmd:`next` (all these commands are " +"explained below). The optional *globals* and *locals* arguments specify the" +" environment in which the code is executed; by default the dictionary of the" +" module :mod:`__main__` is used. (See the explanation of the built-in " +":func:`exec` or :func:`eval` functions.)" +msgstr "" +"在调试器控制范围内执行 *statement* (以字符串或代码对象的形式提供)。调试器提示符会在执行代码前出现,你可以设置断点并键入 " +":pdbcmd:`continue`,也可以使用 :pdbcmd:`step` 或 :pdbcmd:`next` " +"逐步执行语句(上述所有命令在后文有说明)。可选参数 *globals* 和 *locals* 指定代码执行环境,默认时使用 " +":mod:`__main__` 模块的字典。(请参阅内置函数 :func:`exec` 或 :func:`eval` 的说明。)" + +#: ../../library/pdb.rst:117 +msgid "" +"Evaluate the *expression* (given as a string or a code object) under " +"debugger control. When :func:`runeval` returns, it returns the value of the" +" expression. Otherwise this function is similar to :func:`run`." +msgstr "" +"在调试器控制范围内执行 *expression* (以字符串或代码对象的形式提供)。:func:`runeval` " +"返回时将返回表达式的值。本函数在其他方面与 :func:`run` 类似。" + +#: ../../library/pdb.rst:124 +msgid "" +"Call the *function* (a function or method object, not a string) with the " +"given arguments. When :func:`runcall` returns, it returns whatever the " +"function call returned. The debugger prompt appears as soon as the function" +" is entered." +msgstr "" +"使用给定的参数调用 *function* (以函数或方法对象的形式提供,不能是字符串)。:func:`runcall` " +"返回的是所调用函数的返回值。调试器提示符将在进入函数后立即出现。" + +#: ../../library/pdb.rst:132 +msgid "" +"Enter the debugger at the calling stack frame. This is useful to hard-code " +"a breakpoint at a given point in a program, even if the code is not " +"otherwise being debugged (e.g. when an assertion fails). If given, *header*" +" is printed to the console just before debugging begins." +msgstr "" +"在调用本函数的堆栈帧处进入调试器。用于硬编码一个断点到程序中的固定点处,即使该代码不在调试状态(如断言失败时)。如果传入 " +"*header*,它将在调试开始前被打印到控制台。" + +#: ../../library/pdb.rst:137 +msgid "The keyword-only argument *header*." +msgstr "仅关键字参数 *header*。" + +#: ../../library/pdb.rst:143 +msgid "" +"Enter post-mortem debugging of the given *traceback* object. If no " +"*traceback* is given, it uses the one of the exception that is currently " +"being handled (an exception must be being handled if the default is to be " +"used)." +msgstr "" +"进入 *traceback* 对象的事后调试。如果没有给定 *traceback*,默认使用当前正在处理的异常之一(默认时,必须存在正在处理的异常)。" + +#: ../../library/pdb.rst:151 +msgid "" +"Enter post-mortem debugging of the traceback found in " +":data:`sys.last_traceback`." +msgstr "在 :data:`sys.last_traceback` 中查找 traceback,并进入其事后调试。" + +#: ../../library/pdb.rst:155 +msgid "" +"The ``run*`` functions and :func:`set_trace` are aliases for instantiating " +"the :class:`Pdb` class and calling the method of the same name. If you want" +" to access further features, you have to do this yourself:" +msgstr "" +"``run*`` 函数和 :func:`set_trace` 都是别名,用于实例化 :class:`Pdb` " +"类和调用同名方法。如果要使用其他功能,则必须自己执行以下操作:" + +#: ../../library/pdb.rst:162 +msgid ":class:`Pdb` is the debugger class." +msgstr ":class:`Pdb` 是调试器类。" + +#: ../../library/pdb.rst:164 +msgid "" +"The *completekey*, *stdin* and *stdout* arguments are passed to the " +"underlying :class:`cmd.Cmd` class; see the description there." +msgstr "" +"*completekey*、*stdin* 和 *stdout* 参数都会传递给底层的 :class:`cmd.Cmd` 类,请参考相应的描述。" + +#: ../../library/pdb.rst:167 +msgid "" +"The *skip* argument, if given, must be an iterable of glob-style module name" +" patterns. The debugger will not step into frames that originate in a " +"module that matches one of these patterns. [1]_" +msgstr "" +"如果给出 *skip* 参数,则它必须是一个迭代器,可以迭代出 glob-style " +"样式的模块名称。如果遇到匹配上述样式的模块,调试器将不会进入来自该模块的堆栈帧。 [1]_" + +#: ../../library/pdb.rst:171 +msgid "" +"By default, Pdb sets a handler for the SIGINT signal (which is sent when the" +" user presses :kbd:`Ctrl-C` on the console) when you give a ``continue`` " +"command. This allows you to break into the debugger again by pressing " +":kbd:`Ctrl-C`. If you want Pdb not to touch the SIGINT handler, set " +"*nosigint* to true." +msgstr "" +"默认情况下,当发出 ``continue`` 命令时,Pdb 将为 SIGINT 信号设置一个处理程序(SIGINT 信号是用户在控制台按 " +":kbd:`Ctrl-C` 时发出的)。这使用户可以按 :kbd:`Ctrl-C` 再次进入调试器。如果希望 Pdb 不要修改 SIGINT " +"处理程序,请将 *nosigint* 设置为 true。" + +#: ../../library/pdb.rst:176 +msgid "" +"The *readrc* argument defaults to true and controls whether Pdb will load " +".pdbrc files from the filesystem." +msgstr "*readrc* 参数默认为 true,它控制 Pdb 是否从文件系统加载 .pdbrc 文件。" + +#: ../../library/pdb.rst:179 +msgid "Example call to enable tracing with *skip*::" +msgstr "启用跟踪且带有 *skip* 参数的调用示范::" + +#: ../../library/pdb.rst:183 +msgid "" +"Raises an :ref:`auditing event ` ``pdb.Pdb`` with no arguments." +msgstr "引发一个不带参数的 :ref:`审计事件 ` ``pdb.Pdb``。" + +#: ../../library/pdb.rst:185 +msgid "The *skip* argument." +msgstr "*skip* 参数。" + +#: ../../library/pdb.rst:188 +msgid "" +"The *nosigint* argument. Previously, a SIGINT handler was never set by Pdb." +msgstr "*nosigint* 参数。在这之前,Pdb 不为 SIGINT 设置处理程序。" + +#: ../../library/pdb.rst:192 +msgid "The *readrc* argument." +msgstr "*readrc* 参数。" + +#: ../../library/pdb.rst:200 +msgid "See the documentation for the functions explained above." +msgstr "请参阅上文解释同名函数的文档。" + +#: ../../library/pdb.rst:206 +msgid "Debugger Commands" +msgstr "调试器命令" + +#: ../../library/pdb.rst:208 +msgid "" +"The commands recognized by the debugger are listed below. Most commands can" +" be abbreviated to one or two letters as indicated; e.g. ``h(elp)`` means " +"that either ``h`` or ``help`` can be used to enter the help command (but not" +" ``he`` or ``hel``, nor ``H`` or ``Help`` or ``HELP``). Arguments to " +"commands must be separated by whitespace (spaces or tabs). Optional " +"arguments are enclosed in square brackets (``[]``) in the command syntax; " +"the square brackets must not be typed. Alternatives in the command syntax " +"are separated by a vertical bar (``|``)." +msgstr "" +"下方列出的是调试器可接受的命令。如下所示,大多数命令可以缩写为一个或两个字母。如 ``h(elp)`` 表示可以输入 ``h`` 或 ``help`` " +"来输入帮助命令(但不能输入 ``he`` 或 ``hel``,也不能是 ``H`` 或 ``Help`` 或 " +"``HELP``)。命令的参数必须用空格(空格符或制表符)分隔。在命令语法中,可选参数括在方括号 (``[]``) " +"中,使用时请勿输入方括号。命令语法中的选择项由竖线 (``|``) 分隔。" + +#: ../../library/pdb.rst:217 +msgid "" +"Entering a blank line repeats the last command entered. Exception: if the " +"last command was a :pdbcmd:`list` command, the next 11 lines are listed." +msgstr "输入一个空白行将重复最后输入的命令。例外:如果最后一个命令是 :pdbcmd:`list` 命令,则会列出接下来的 11 行。" + +#: ../../library/pdb.rst:220 +msgid "" +"Commands that the debugger doesn't recognize are assumed to be Python " +"statements and are executed in the context of the program being debugged. " +"Python statements can also be prefixed with an exclamation point (``!``). " +"This is a powerful way to inspect the program being debugged; it is even " +"possible to change a variable or call a function. When an exception occurs " +"in such a statement, the exception name is printed but the debugger's state " +"is not changed." +msgstr "" +"调试器无法识别的命令将被认为是 Python 语句,并在正在调试的程序的上下文中执行。Python 语句也可以用感叹号 (``!``) " +"作为前缀。这是检查正在调试的程序的强大方法,甚至可以修改变量或调用函数。当此类语句发生异常,将打印异常名称,但调试器的状态不会改变。" + +#: ../../library/pdb.rst:228 +msgid "" +"The debugger supports :ref:`aliases `. Aliases can have " +"parameters which allows one a certain level of adaptability to the context " +"under examination." +msgstr "调试器支持 :ref:`别名 `。别名可以有参数,使得调试器对被检查的上下文有一定程度的适应性。" + +#: ../../library/pdb.rst:232 +msgid "" +"Multiple commands may be entered on a single line, separated by ``;;``. (A " +"single ``;`` is not used as it is the separator for multiple commands in a " +"line that is passed to the Python parser.) No intelligence is applied to " +"separating the commands; the input is split at the first ``;;`` pair, even " +"if it is in the middle of a quoted string. A workaround for strings with " +"double semicolons is to use implicit string concatenation ``';'';'`` or " +"``\";\"\";\"``." +msgstr "" +"在一行中可以输入多条命令,以 ``;;`` 分隔。 (不能使用单个 ``;``,因为它已被用作传给 Python 解析器的一行中的多条命令的分隔符。) " +"命令切分所用的方式没有任何智能可言;输入总是会在第一个 ``;;`` 对上被切分,即使它位于带引号的字符串中。 " +"对于带有双分号的字符串可以使用隐式字符串拼接 ``';'';'`` 或 ``\";\"\";\"`` 来变通处理。" + +#: ../../library/pdb.rst:243 +msgid "" +"If a file :file:`.pdbrc` exists in the user's home directory or in the " +"current directory, it is read in and executed as if it had been typed at the" +" debugger prompt. This is particularly useful for aliases. If both files " +"exist, the one in the home directory is read first and aliases defined there" +" can be overridden by the local file." +msgstr "" +"如果文件 :file:`.pdbrc` " +"存在于用户主目录或当前目录中,则将其读入并执行,等同于在调试器提示符下键入该文件。这对于别名很有用。若两个文件都存在则首先读取主目录中的文件,且本地文件可以覆盖其中定义的别名。" + +#: ../../library/pdb.rst:249 +msgid "" +":file:`.pdbrc` can now contain commands that continue debugging, such as " +":pdbcmd:`continue` or :pdbcmd:`next`. Previously, these commands had no " +"effect." +msgstr "" +":file:`.pdbrc` 现在可以包含继续调试的命令,如 :pdbcmd:`continue` 或 " +":pdbcmd:`next`。文件中的这些命令以前是无效的。" + +#: ../../library/pdb.rst:257 +msgid "" +"Without argument, print the list of available commands. With a *command* as" +" argument, print help about that command. ``help pdb`` displays the full " +"documentation (the docstring of the :mod:`pdb` module). Since the *command*" +" argument must be an identifier, ``help exec`` must be entered to get help " +"on the ``!`` command." +msgstr "" +"不带参数时,显示可用的命令列表。参数为 *command* 时,打印有关该命令的帮助。``help pdb`` 显示完整文档(即 :mod:`pdb` " +"模块的文档字符串)。由于 *command* 参数必须是标识符,因此要获取 ``!`` 的帮助必须输入 ``help exec``。" + +#: ../../library/pdb.rst:265 +msgid "" +"Print a stack trace, with the most recent frame at the bottom. An arrow " +"indicates the current frame, which determines the context of most commands." +msgstr "打印堆栈回溯,最新一帧在底部。有一个箭头指向当前帧,该帧决定了大多数命令的上下文。" + +#: ../../library/pdb.rst:270 +msgid "" +"Move the current frame *count* (default one) levels down in the stack trace " +"(to a newer frame)." +msgstr "在堆栈回溯中,将当前帧向下移动 *count* 级(默认为 1 级,移向更新的帧)。" + +#: ../../library/pdb.rst:275 +msgid "" +"Move the current frame *count* (default one) levels up in the stack trace " +"(to an older frame)." +msgstr "在堆栈回溯中,将当前帧向上移动 *count* 级(默认为 1 级,移向更老的帧)。" + +#: ../../library/pdb.rst:280 +msgid "" +"With a *lineno* argument, set a break there in the current file. With a " +"*function* argument, set a break at the first executable statement within " +"that function. The line number may be prefixed with a filename and a colon," +" to specify a breakpoint in another file (probably one that hasn't been " +"loaded yet). The file is searched on :data:`sys.path`. Note that each " +"breakpoint is assigned a number to which all the other breakpoint commands " +"refer." +msgstr "" +"如果带有 *lineno* 参数,则在当前文件相应行处设置一个断点。如果带有 *function* " +"参数,则在该函数的第一条可执行语句处设置一个断点。行号可以加上文件名和冒号作为前缀,以在另一个文件(可能是尚未加载的文件)中设置一个断点。另一个文件将在" +" :data:`sys.path` 范围内搜索。请注意,每个断点都分配有一个编号,其他所有断点命令都引用该编号。" + +#: ../../library/pdb.rst:287 +msgid "" +"If a second argument is present, it is an expression which must evaluate to " +"true before the breakpoint is honored." +msgstr "如果第二个参数存在,它应该是一个表达式,且它的计算值为 true 时断点才起作用。" + +#: ../../library/pdb.rst:290 +msgid "" +"Without argument, list all breaks, including for each breakpoint, the number" +" of times that breakpoint has been hit, the current ignore count, and the " +"associated condition if any." +msgstr "如果不带参数执行,将列出所有中断,包括每个断点、命中该断点的次数、当前的忽略次数以及关联的条件(如果有)。" + +#: ../../library/pdb.rst:296 +msgid "" +"Temporary breakpoint, which is removed automatically when it is first hit. " +"The arguments are the same as for :pdbcmd:`break`." +msgstr "临时断点,在第一次命中时会自动删除。它的参数与 :pdbcmd:`break` 相同。" + +#: ../../library/pdb.rst:301 +msgid "" +"With a *filename:lineno* argument, clear all the breakpoints at this line. " +"With a space separated list of breakpoint numbers, clear those breakpoints. " +"Without argument, clear all breaks (but first ask confirmation)." +msgstr "" +"如果参数是 " +"*filename:lineno*,则清除此行上的所有断点。如果参数是空格分隔的断点编号列表,则清除这些断点。如果不带参数,则清除所有断点(但会先提示确认)。" + +#: ../../library/pdb.rst:307 +msgid "" +"Disable the breakpoints given as a space separated list of breakpoint " +"numbers. Disabling a breakpoint means it cannot cause the program to stop " +"execution, but unlike clearing a breakpoint, it remains in the list of " +"breakpoints and can be (re-)enabled." +msgstr "" +"禁用断点,断点以空格分隔的断点编号列表给出。禁用断点表示它不会导致程序停止执行,但是与清除断点不同,禁用的断点将保留在断点列表中并且可以(重新)启用。" + +#: ../../library/pdb.rst:314 +msgid "Enable the breakpoints specified." +msgstr "启用指定的断点。" + +#: ../../library/pdb.rst:318 +msgid "" +"Set the ignore count for the given breakpoint number. If count is omitted, " +"the ignore count is set to 0. A breakpoint becomes active when the ignore " +"count is zero. When non-zero, the count is decremented each time the " +"breakpoint is reached and the breakpoint is not disabled and any associated " +"condition evaluates to true." +msgstr "" +"为指定的断点编号设置忽略次数。如果省略 count,则忽略次数将设置为 0。忽略次数为 0 " +"时断点将变为活动状态。如果为非零值,在每次达到断点,且断点未禁用,且关联条件计算值为 true 的情况下,该忽略次数会递减。" + +#: ../../library/pdb.rst:326 +msgid "" +"Set a new *condition* for the breakpoint, an expression which must evaluate " +"to true before the breakpoint is honored. If *condition* is absent, any " +"existing condition is removed; i.e., the breakpoint is made unconditional." +msgstr "" +"为断点设置一个新 *condition*,它是一个表达式,且它的计算值为 true 时断点才起作用。如果没有给出 " +"*condition*,则删除现有条件,也就是将断点设为无条件。" + +#: ../../library/pdb.rst:332 +msgid "" +"Specify a list of commands for breakpoint number *bpnumber*. The commands " +"themselves appear on the following lines. Type a line containing just " +"``end`` to terminate the commands. An example::" +msgstr "" +"为编号是 *bpnumber* 的断点指定一系列命令。命令内容将显示在后续的几行中。输入仅包含 ``end`` 的行来结束命令列表。举个例子::" + +#: ../../library/pdb.rst:341 +msgid "" +"To remove all commands from a breakpoint, type ``commands`` and follow it " +"immediately with ``end``; that is, give no commands." +msgstr "要删除断点上的所有命令,请输入 ``commands`` 并立即以 ``end`` 结尾,也就是不指定任何命令。" + +#: ../../library/pdb.rst:344 +msgid "" +"With no *bpnumber* argument, ``commands`` refers to the last breakpoint set." +msgstr "如果不带 *bpnumber* 参数,``commands`` 作用于最后一个被设置的断点。" + +#: ../../library/pdb.rst:346 +msgid "" +"You can use breakpoint commands to start your program up again. Simply use " +"the :pdbcmd:`continue` command, or :pdbcmd:`step`, or any other command that" +" resumes execution." +msgstr "" +"可以为断点指定命令来重新启动程序。只需使用 :pdbcmd:`continue` 或 :pdbcmd:`step` 命令或其他可以继续运行程序的命令。" + +#: ../../library/pdb.rst:350 +msgid "" +"Specifying any command resuming execution (currently :pdbcmd:`continue`, " +":pdbcmd:`step`, :pdbcmd:`next`, :pdbcmd:`return`, :pdbcmd:`jump`, " +":pdbcmd:`quit` and their abbreviations) terminates the command list (as if " +"that command was immediately followed by end). This is because any time you " +"resume execution (even with a simple next or step), you may encounter " +"another breakpoint—which could have its own command list, leading to " +"ambiguities about which list to execute." +msgstr "" +"如果指定了某个继续运行程序的命令(目前包括 :pdbcmd:`continue`, :pdbcmd:`step`, :pdbcmd:`next`, " +":pdbcmd:`return`, :pdbcmd:`jump`, :pdbcmd:`quit` 及它们的缩写)将终止命令列表(就像该命令后紧跟着 " +"end)。因为在任何时候继续运行下去(即使是简单的 next 或 " +"step),都可能会遇到另一个断点,该断点可能具有自己的命令列表,这导致要执行的列表含糊不清。" + +#: ../../library/pdb.rst:359 +msgid "" +"If you use the 'silent' command in the command list, the usual message about" +" stopping at a breakpoint is not printed. This may be desirable for " +"breakpoints that are to print a specific message and then continue. If none" +" of the other commands print anything, you see no sign that the breakpoint " +"was reached." +msgstr "" +"如果在命令列表中加入 'silent' " +"命令,那么在该断点处停下时就不会打印常规信息。如果希望断点打印特定信息后继续运行,这可能是理想的。如果没有其他命令来打印一些信息,则看不到已达到断点的迹象。" + +#: ../../library/pdb.rst:366 +msgid "" +"Execute the current line, stop at the first possible occasion (either in a " +"function that is called or on the next line in the current function)." +msgstr "运行当前行,在第一个可以停止的位置(在被调用的函数内部或在当前函数的下一行)停下。" + +#: ../../library/pdb.rst:371 +msgid "" +"Continue execution until the next line in the current function is reached or" +" it returns. (The difference between :pdbcmd:`next` and :pdbcmd:`step` is " +"that :pdbcmd:`step` stops inside a called function, while :pdbcmd:`next` " +"executes called functions at (nearly) full speed, only stopping at the next " +"line in the current function.)" +msgstr "" +"继续运行,直到运行到当前函数的下一行,或当前函数返回为止。( :pdbcmd:`next` 和 :pdbcmd:`step` " +"之间的区别在于,:pdbcmd:`step` 进入被调用函数内部并停止,而 :pdbcmd:`next` " +"(几乎)全速运行被调用函数,仅在当前函数的下一行停止。)" + +#: ../../library/pdb.rst:379 +msgid "" +"Without argument, continue execution until the line with a number greater " +"than the current one is reached." +msgstr "如果不带参数,则继续运行,直到行号比当前行大时停止。" + +#: ../../library/pdb.rst:382 +msgid "" +"With a line number, continue execution until a line with a number greater or" +" equal to that is reached. In both cases, also stop when the current frame " +"returns." +msgstr "如果带有行号,则继续运行,直到行号大于或等于该行号时停止。在这两种情况下,当前帧返回时也将停止。" + +#: ../../library/pdb.rst:386 +msgid "Allow giving an explicit line number." +msgstr "允许明确给定行号。" + +#: ../../library/pdb.rst:391 +msgid "Continue execution until the current function returns." +msgstr "继续运行,直到当前函数返回。" + +#: ../../library/pdb.rst:395 +msgid "Continue execution, only stop when a breakpoint is encountered." +msgstr "继续运行,仅在遇到断点时停止。" + +#: ../../library/pdb.rst:399 +msgid "" +"Set the next line that will be executed. Only available in the bottom-most " +"frame. This lets you jump back and execute code again, or jump forward to " +"skip code that you don't want to run." +msgstr "设置即将运行的下一行。仅可用于堆栈最底部的帧。它可以往回跳来再次运行代码,也可以往前跳来跳过不想运行的代码。" + +#: ../../library/pdb.rst:403 +msgid "" +"It should be noted that not all jumps are allowed -- for instance it is not " +"possible to jump into the middle of a :keyword:`for` loop or out of a " +":keyword:`finally` clause." +msgstr "" +"需要注意的是,不是所有的跳转都是允许的 -- 例如,不能跳转到 :keyword:`for` 循环的中间或跳出 :keyword:`finally` " +"子句。" + +#: ../../library/pdb.rst:409 +msgid "" +"List source code for the current file. Without arguments, list 11 lines " +"around the current line or continue the previous listing. With ``.`` as " +"argument, list 11 lines around the current line. With one argument, list 11" +" lines around at that line. With two arguments, list the given range; if " +"the second argument is less than the first, it is interpreted as a count." +msgstr "" +"列出当前文件的源代码。如果不带参数,则列出当前行周围的 11 行,或延续前一次列出。如果用 ``.`` 作为参数,则列出当前行周围的 11 " +"行。如果带有一个参数,则列出那一行周围的 11 " +"行。如果带有两个参数,则列出所给的范围中的代码;如果第二个参数小于第一个参数,则将其解释为列出行数的计数。" + +#: ../../library/pdb.rst:415 +msgid "" +"The current line in the current frame is indicated by ``->``. If an " +"exception is being debugged, the line where the exception was originally " +"raised or propagated is indicated by ``>>``, if it differs from the current " +"line." +msgstr "当前帧中的当前行用 ``->`` 标记。如果正在调试异常,且最早抛出或传递该异常的行不是当前行,则那一行用 ``>>`` 标记。" + +#: ../../library/pdb.rst:420 +msgid "The ``>>`` marker." +msgstr "``>>`` 标记。" + +#: ../../library/pdb.rst:425 +msgid "" +"List all source code for the current function or frame. Interesting lines " +"are marked as for :pdbcmd:`list`." +msgstr "列出当前函数或帧的所有源代码。相关行的标记与 :pdbcmd:`list` 相同。" + +#: ../../library/pdb.rst:432 +msgid "Print the argument list of the current function." +msgstr "打印当前函数的参数列表。" + +#: ../../library/pdb.rst:436 +msgid "Evaluate the *expression* in the current context and print its value." +msgstr "在当前上下文中运行 *expression* 并打印它的值。" + +#: ../../library/pdb.rst:440 +msgid "" +"``print()`` can also be used, but is not a debugger command --- this " +"executes the Python :func:`print` function." +msgstr "``print()`` 也可以使用,但它不是一个调试器命令 --- 它执行 Python :func:`print` 函数。" + +#: ../../library/pdb.rst:446 +msgid "" +"Like the :pdbcmd:`p` command, except the value of the expression is pretty-" +"printed using the :mod:`pprint` module." +msgstr "与 :pdbcmd:`p` 命令类似,但表达式的值使用 :mod:`pprint` 模块美观地打印。" + +#: ../../library/pdb.rst:451 +msgid "Print the type of the *expression*." +msgstr "打印 *expression* 的类型。" + +#: ../../library/pdb.rst:455 +msgid "Try to get source code for the given object and display it." +msgstr "尝试获取给定对象的源代码并显示出来。" + +#: ../../library/pdb.rst:461 +msgid "" +"Display the value of the expression if it changed, each time execution stops" +" in the current frame." +msgstr "如果表达式的值发生改变则显示它的值,每次将停止执行当前帧。" + +#: ../../library/pdb.rst:464 +msgid "" +"Without expression, list all display expressions for the current frame." +msgstr "不带表达式则列出当前帧的所有显示表达式。" + +#: ../../library/pdb.rst:470 +msgid "" +"Do not display the expression any more in the current frame. Without " +"expression, clear all display expressions for the current frame." +msgstr "不再显示当前帧中的表达式。 不带表达式则清除当前帧的所有显示表达式。" + +#: ../../library/pdb.rst:477 +msgid "" +"Start an interactive interpreter (using the :mod:`code` module) whose global" +" namespace contains all the (global and local) names found in the current " +"scope." +msgstr "启动一个交互式解释器(使用 :mod:`code` 模块),它的全局命名空间将包含当前作用域中的所有(全局和局部)名称。" + +#: ../../library/pdb.rst:487 +msgid "" +"Create an alias called *name* that executes *command*. The command must " +"*not* be enclosed in quotes. Replaceable parameters can be indicated by " +"``%1``, ``%2``, and so on, while ``%*`` is replaced by all the parameters. " +"If no command is given, the current alias for *name* is shown. If no " +"arguments are given, all aliases are listed." +msgstr "" +"创建一个标识为 *name* 的别名来执行 *command*。 执行的命令 *不可* 加上引号。 可替换形参可通过 ``%1``, ``%2`` " +"等来标示,而 ``%*`` 会被所有形参所替换。 如果没有给出命令,则会显示 *name* 的当前别名。 如果没有给出参数,则会列出所有别名。" + +#: ../../library/pdb.rst:493 +msgid "" +"Aliases may be nested and can contain anything that can be legally typed at " +"the pdb prompt. Note that internal pdb commands *can* be overridden by " +"aliases. Such a command is then hidden until the alias is removed. " +"Aliasing is recursively applied to the first word of the command line; all " +"other words in the line are left alone." +msgstr "" +"别名允许嵌套并可包含能在 pdb 提示符下合法输入的任何内容。 请注意内部 pdb 命令 *可以* 被别名所覆盖。 这样的命令将被隐藏直到别名被移除。 " +"别名会递归地应用到命令行的第一个单词;行内的其他单词不会受影响。" + +#: ../../library/pdb.rst:499 +msgid "" +"As an example, here are two useful aliases (especially when placed in the " +":file:`.pdbrc` file)::" +msgstr "作为示例,这里列出了两个有用的别名(特别适合放在 :file:`.pdbrc` 文件中)::" + +#: ../../library/pdb.rst:509 +msgid "Delete the specified alias." +msgstr "删除指定的别名。" + +#: ../../library/pdb.rst:513 +msgid "" +"Execute the (one-line) *statement* in the context of the current stack " +"frame. The exclamation point can be omitted unless the first word of the " +"statement resembles a debugger command. To set a global variable, you can " +"prefix the assignment command with a :keyword:`global` statement on the same" +" line, e.g.::" +msgstr "" +"在当前堆栈帧的上下文中执行 (单行) *statement*。 感叹号可以被省略,除非语句的第一个单词与调试器命令重名。 " +"要设置全局变量,你可以在同一行上为赋值命令添加前缀的 :keyword:`global` 语句,例如::" + +#: ../../library/pdb.rst:525 +msgid "" +"Restart the debugged Python program. If an argument is supplied, it is " +"split with :mod:`shlex` and the result is used as the new :data:`sys.argv`. " +"History, breakpoints, actions and debugger options are preserved. " +":pdbcmd:`restart` is an alias for :pdbcmd:`run`." +msgstr "" +"重启被调试的 Python 程序。 如果提供了参数,它会用 :mod:`shlex` 来拆分且拆分结果将被用作新的 :data:`sys.argv`。 " +"历史、中断点、动作和调试器选项将被保留。 :pdbcmd:`restart` 是 :pdbcmd:`run` 的一个别名。" + +#: ../../library/pdb.rst:532 +msgid "Quit from the debugger. The program being executed is aborted." +msgstr "退出调试器。 被执行的程序将被中止。" + +#: ../../library/pdb.rst:536 +msgid "" +"Enter a recursive debugger that steps through the code argument (which is an" +" arbitrary expression or statement to be executed in the current " +"environment)." +msgstr "进入一个对代码参数执行步进的递归调试器(该参数是在当前环境中执行的任意表达式或语句)。" + +#: ../../library/pdb.rst:542 +msgid "Print the return value for the last return of a function." +msgstr "打印函数最后一次返回的返回值。" + +#: ../../library/pdb.rst:545 +msgid "Footnotes" +msgstr "备注" + +#: ../../library/pdb.rst:546 +msgid "" +"Whether a frame is considered to originate in a certain module is determined" +" by the ``__name__`` in the frame globals." +msgstr "一个帧是否会被认为源自特定模块是由帧全局变量 ``__name__`` 来决定的。" diff --git a/library/persistence.po b/library/persistence.po new file mode 100644 index 000000000..8f1fdf59f --- /dev/null +++ b/library/persistence.po @@ -0,0 +1,43 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) 2001-2022, Python Software Foundation +# This file is distributed under the same license as the Python package. +# FIRST AUTHOR , YEAR. +# +# Translators: +# Kaizhao Zhang , 2018 +# Alpha Du , 2019 +# +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: Python 3.9\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2022-11-04 14:34+0000\n" +"PO-Revision-Date: 2017-02-16 23:21+0000\n" +"Last-Translator: Alpha Du , 2019\n" +"Language-Team: Chinese (China) (https://www.transifex.com/python-doc/teams/5390/zh_CN/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: zh_CN\n" +"Plural-Forms: nplurals=1; plural=0;\n" + +#: ../../library/persistence.rst:5 +msgid "Data Persistence" +msgstr "数据持久化" + +#: ../../library/persistence.rst:7 +msgid "" +"The modules described in this chapter support storing Python data in a " +"persistent form on disk. The :mod:`pickle` and :mod:`marshal` modules can " +"turn many Python data types into a stream of bytes and then recreate the " +"objects from the bytes. The various DBM-related modules support a family of" +" hash-based file formats that store a mapping of strings to other strings." +msgstr "" +"本章中描述的模块支持在磁盘上以持久形式存储 Python 数据。 :mod:`pickle` 和 :mod:`marshal` 模块可以将许多 " +"Python 数据类型转换为字节流,然后从字节中重新创建对象。 各种与 DBM " +"相关的模块支持一系列基于散列的文件格式,这些格式存储字符串到其他字符串的映射。" + +#: ../../library/persistence.rst:13 +msgid "The list of modules described in this chapter is:" +msgstr "本章中描述的模块列表是:" diff --git a/library/pickle.po b/library/pickle.po new file mode 100644 index 000000000..cb98a419d --- /dev/null +++ b/library/pickle.po @@ -0,0 +1,1629 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) 2001-2025, Python Software Foundation +# This file is distributed under the same license as the Python package. +# FIRST AUTHOR , YEAR. +# +# Translators: +# walkinrain , 2019 +# ppcfish , 2019 +# Xu Siyuan, 2019 +# nick <2330458484@qq.com>, 2019 +# Menghua Xiao , 2019 +# ChenYuan , 2019 +# Naisen Xu <723648649@qq.com>, 2019 +# Arisaka97 , 2019 +# Freesand Leo , 2022 +# Rafael Fontenelle , 2025 +# +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: Python 3.9\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2025-02-07 16:40+0000\n" +"PO-Revision-Date: 2017-02-16 23:22+0000\n" +"Last-Translator: Rafael Fontenelle , 2025\n" +"Language-Team: Chinese (China) (https://app.transifex.com/python-doc/teams/5390/zh_CN/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: zh_CN\n" +"Plural-Forms: nplurals=1; plural=0;\n" + +#: ../../library/pickle.rst:2 +msgid ":mod:`pickle` --- Python object serialization" +msgstr ":mod:`pickle` --- Python 对象序列化" + +#: ../../library/pickle.rst:10 +msgid "**Source code:** :source:`Lib/pickle.py`" +msgstr "**源代码:** :source:`Lib/pickle.py`" + +#: ../../library/pickle.rst:22 +msgid "" +"The :mod:`pickle` module implements binary protocols for serializing and de-" +"serializing a Python object structure. *\"Pickling\"* is the process " +"whereby a Python object hierarchy is converted into a byte stream, and " +"*\"unpickling\"* is the inverse operation, whereby a byte stream (from a " +":term:`binary file` or :term:`bytes-like object`) is converted back into an " +"object hierarchy. Pickling (and unpickling) is alternatively known as " +"\"serialization\", \"marshalling,\" [#]_ or \"flattening\"; however, to " +"avoid confusion, the terms used here are \"pickling\" and \"unpickling\"." +msgstr "" +"模块 :mod:`pickle` 实现了对一个 Python 对象结构的二进制序列化和反序列化。 *\"pickling\"* 是将 Python " +"对象及其所拥有的层次结构转化为一个字节流的过程,而 *\"unpickling\"* 是相反的操作,会将(来自一个 :term:`binary " +"file` 或者 :term:`bytes-like object` 的)字节流转化回一个对象层次结构。 pickling(和 " +"unpickling)也被称为“序列化”, “编组” [#]_ 或者 “平面化”。而为了避免混乱,此处采用术语 “封存 (pickling)” 和 " +"“解封 (unpickling)”。" + +#: ../../library/pickle.rst:33 +msgid "The ``pickle`` module **is not secure**. Only unpickle data you trust." +msgstr "``pickle`` 模块 **并不安全**。 你只应该对你信任的数据进行 unpickle 操作。" + +#: ../../library/pickle.rst:35 +msgid "" +"It is possible to construct malicious pickle data which will **execute " +"arbitrary code during unpickling**. Never unpickle data that could have come" +" from an untrusted source, or that could have been tampered with." +msgstr "构建恶意的 pickle 数据来 **在解封时执行任意代码** 是可能的。 绝对不要对不信任来源的数据和可能被篡改过的数据进行解封。" + +#: ../../library/pickle.rst:39 +msgid "" +"Consider signing data with :mod:`hmac` if you need to ensure that it has not" +" been tampered with." +msgstr "请考虑使用 :mod:`hmac` 来对数据进行签名,确保数据没有被篡改。" + +#: ../../library/pickle.rst:42 +msgid "" +"Safer serialization formats such as :mod:`json` may be more appropriate if " +"you are processing untrusted data. See :ref:`comparison-with-json`." +msgstr "" +"在你处理不信任数据时,更安全的序列化格式如 :mod:`json` 可能更为适合。参见 :ref:`comparison-with-json` 。" + +#: ../../library/pickle.rst:47 +msgid "Relationship to other Python modules" +msgstr "与其他 Python 模块间的关系" + +#: ../../library/pickle.rst:50 +msgid "Comparison with ``marshal``" +msgstr "与 ``marshal`` 间的关系" + +#: ../../library/pickle.rst:52 +msgid "" +"Python has a more primitive serialization module called :mod:`marshal`, but " +"in general :mod:`pickle` should always be the preferred way to serialize " +"Python objects. :mod:`marshal` exists primarily to support Python's " +":file:`.pyc` files." +msgstr "" +"Python 有一个更原始的序列化模块称为 :mod:`marshal`,但一般地 :mod:`pickle` 应该是序列化 Python " +"对象时的首选。:mod:`marshal` 存在主要是为了支持 Python 的 :file:`.pyc` 文件." + +#: ../../library/pickle.rst:57 +msgid "" +"The :mod:`pickle` module differs from :mod:`marshal` in several significant " +"ways:" +msgstr ":mod:`pickle` 模块与 :mod:`marshal` 在如下几方面显著地不同:" + +#: ../../library/pickle.rst:59 +msgid "" +"The :mod:`pickle` module keeps track of the objects it has already " +"serialized, so that later references to the same object won't be serialized " +"again. :mod:`marshal` doesn't do this." +msgstr "" +":mod:`pickle` 模块会跟踪已被序列化的对象,所以该对象之后再次被引用时不会再次被序列化。:mod:`marshal` 不会这么做。" + +#: ../../library/pickle.rst:63 +msgid "" +"This has implications both for recursive objects and object sharing. " +"Recursive objects are objects that contain references to themselves. These " +"are not handled by marshal, and in fact, attempting to marshal recursive " +"objects will crash your Python interpreter. Object sharing happens when " +"there are multiple references to the same object in different places in the " +"object hierarchy being serialized. :mod:`pickle` stores such objects only " +"once, and ensures that all other references point to the master copy. " +"Shared objects remain shared, which can be very important for mutable " +"objects." +msgstr "" +"这隐含了递归对象和共享对象。递归对象指包含对自己的引用的对象。这种对象并不会被 marshal 接受,并且实际上尝试 marshal 递归对象会让你的 " +"Python 解释器崩溃。对象共享发生在对象层级中存在多处引用同一对象时。:mod:`pickle` " +"只会存储这些对象一次,并确保其他的引用指向同一个主副本。共享对象将保持共享,这可能对可变对象非常重要。" + +#: ../../library/pickle.rst:72 +msgid "" +":mod:`marshal` cannot be used to serialize user-defined classes and their " +"instances. :mod:`pickle` can save and restore class instances " +"transparently, however the class definition must be importable and live in " +"the same module as when the object was stored." +msgstr "" +":mod:`marshal` 不能被用于序列化用户定义类及其实例。:mod:`pickle` " +"能够透明地存储并保存类实例,然而此时类定义必须能够从与被存储时相同的模块被引入。" + +#: ../../library/pickle.rst:77 +msgid "" +"The :mod:`marshal` serialization format is not guaranteed to be portable " +"across Python versions. Because its primary job in life is to support " +":file:`.pyc` files, the Python implementers reserve the right to change the " +"serialization format in non-backwards compatible ways should the need arise." +" The :mod:`pickle` serialization format is guaranteed to be backwards " +"compatible across Python releases provided a compatible pickle protocol is " +"chosen and pickling and unpickling code deals with Python 2 to Python 3 type" +" differences if your data is crossing that unique breaking change language " +"boundary." +msgstr "" +"同样用于序列化的 :mod:`marshal` 格式不保证数据能移植到不同的 Python 版本中。因为它的主要任务是支持 :file:`.pyc` " +"文件,必要时会以破坏向后兼容的方式更改这种序列化格式,为此 Python 的实现者保留了更改格式的权利。:mod:`pickle` " +"序列化格式可以在不同版本的 Python 中实现向后兼容,前提是选择了合适的 pickle 协议。如果你的数据要在 Python 2 与 Python " +"3 之间跨越传递,封存和解封的代码在 2 和 3 之间也是不同的。" + +#: ../../library/pickle.rst:90 +msgid "Comparison with ``json``" +msgstr "与 ``json`` 模块的比较" + +#: ../../library/pickle.rst:92 +msgid "" +"There are fundamental differences between the pickle protocols and `JSON " +"(JavaScript Object Notation) `_:" +msgstr "" +"Pickle 协议和 `JSON (JavaScript Object Notation) `_ 间有着本质的不同:" + +#: ../../library/pickle.rst:95 +msgid "" +"JSON is a text serialization format (it outputs unicode text, although most " +"of the time it is then encoded to ``utf-8``), while pickle is a binary " +"serialization format;" +msgstr "" +"JSON 是一个文本序列化格式(它输出 unicode 文本,尽管在大多数时候它会接着以 ``utf-8`` 编码),而 pickle " +"是一个二进制序列化格式;" + +#: ../../library/pickle.rst:99 +msgid "JSON is human-readable, while pickle is not;" +msgstr "JSON 是我们可以直观阅读的,而 pickle 不是;" + +#: ../../library/pickle.rst:101 +msgid "" +"JSON is interoperable and widely used outside of the Python ecosystem, while" +" pickle is Python-specific;" +msgstr "JSON是可互操作的,在Python系统之外广泛使用,而pickle则是Python专用的;" + +#: ../../library/pickle.rst:104 +msgid "" +"JSON, by default, can only represent a subset of the Python built-in types, " +"and no custom classes; pickle can represent an extremely large number of " +"Python types (many of them automatically, by clever usage of Python's " +"introspection facilities; complex cases can be tackled by implementing " +":ref:`specific object APIs `);" +msgstr "" +"默认情况下,JSON 只能表示 Python 内置类型的子集,不能表示自定义的类;但 pickle 可以表示大量的 Python 数据类型(可以合理使用" +" Python 的对象内省功能自动地表示大多数类型,复杂情况可以通过实现 :ref:`specific object APIs ` 来解决)。" + +#: ../../library/pickle.rst:110 +msgid "" +"Unlike pickle, deserializing untrusted JSON does not in itself create an " +"arbitrary code execution vulnerability." +msgstr "不像pickle,对一个不信任的JSON进行反序列化的操作本身不会造成任意代码执行漏洞。" + +#: ../../library/pickle.rst:114 +msgid "" +"The :mod:`json` module: a standard library module allowing JSON " +"serialization and deserialization." +msgstr ":mod:`json` 模块:一个允许JSON序列化和反序列化的标准库模块" + +#: ../../library/pickle.rst:121 +msgid "Data stream format" +msgstr "数据流格式" + +#: ../../library/pickle.rst:126 +msgid "" +"The data format used by :mod:`pickle` is Python-specific. This has the " +"advantage that there are no restrictions imposed by external standards such " +"as JSON or XDR (which can't represent pointer sharing); however it means " +"that non-Python programs may not be able to reconstruct pickled Python " +"objects." +msgstr "" +":mod:`pickle` 所使用的数据格式仅可用于 Python。这样做的好处是没有外部标准给该格式强加限制,比如 JSON 或 " +"XDR(不能表示共享指针)标准;但这也意味着非 Python 程序可能无法重新读取 pickle 封存的 Python 对象。" + +#: ../../library/pickle.rst:131 +msgid "" +"By default, the :mod:`pickle` data format uses a relatively compact binary " +"representation. If you need optimal size characteristics, you can " +"efficiently :doc:`compress ` pickled data." +msgstr "" +"默认情况下,:mod:`pickle` 格式使用相对紧凑的二进制来存储。如果需要让文件更小,可以高效地 :doc:`压缩 ` 由 " +"pickle 封存的数据。" + +#: ../../library/pickle.rst:135 +msgid "" +"The module :mod:`pickletools` contains tools for analyzing data streams " +"generated by :mod:`pickle`. :mod:`pickletools` source code has extensive " +"comments about opcodes used by pickle protocols." +msgstr "" +":mod:`pickletools` 模块包含了相应的工具用于分析 :mod:`pickle` 生成的数据流。:mod:`pickletools` " +"源码中包含了对 pickle 协议使用的操作码的大量注释。" + +#: ../../library/pickle.rst:139 +msgid "" +"There are currently 6 different protocols which can be used for pickling. " +"The higher the protocol used, the more recent the version of Python needed " +"to read the pickle produced." +msgstr "当前共有 6 种不同的协议可用于封存操作。 使用的协议版本越高,读取所生成 pickle 对象所需的 Python 版本就要越新。" + +#: ../../library/pickle.rst:143 +msgid "" +"Protocol version 0 is the original \"human-readable\" protocol and is " +"backwards compatible with earlier versions of Python." +msgstr "v0 版协议是原始的“人类可读”协议,并且向后兼容早期版本的 Python。" + +#: ../../library/pickle.rst:146 +msgid "" +"Protocol version 1 is an old binary format which is also compatible with " +"earlier versions of Python." +msgstr "v1 版协议是较早的二进制格式,它也与早期版本的 Python 兼容。" + +#: ../../library/pickle.rst:149 +msgid "" +"Protocol version 2 was introduced in Python 2.3. It provides much more " +"efficient pickling of :term:`new-style classes `. Refer to" +" :pep:`307` for information about improvements brought by protocol 2." +msgstr "" +"第 2 版协议是在 Python 2.3 中引入的。 它为 :term:`新式类 ` 提供了更高效的封存机制。 请参考" +" :pep:`307` 了解第 2 版协议带来的改进的相关信息。" + +#: ../../library/pickle.rst:153 +msgid "" +"Protocol version 3 was added in Python 3.0. It has explicit support for " +":class:`bytes` objects and cannot be unpickled by Python 2.x. This was the " +"default protocol in Python 3.0--3.7." +msgstr "" +"v3 版协议是在 Python 3.0 中引入的。 它显式地支持 :class:`bytes` 字节对象,不能使用 Python 2.x 解封。这是 " +"Python 3.0-3.7 的默认协议。" + +#: ../../library/pickle.rst:157 +msgid "" +"Protocol version 4 was added in Python 3.4. It adds support for very large " +"objects, pickling more kinds of objects, and some data format optimizations." +" It is the default protocol starting with Python 3.8. Refer to :pep:`3154` " +"for information about improvements brought by protocol 4." +msgstr "" +"v4 版协议添加于 Python 3.4。它支持存储非常大的对象,能存储更多种类的对象,还包括一些针对数据格式的优化。它是Python " +"3.8使用的默认协议。有关第 4 版协议带来改进的信息,请参阅 :pep:`3154`。" + +#: ../../library/pickle.rst:163 +msgid "" +"Protocol version 5 was added in Python 3.8. It adds support for out-of-band" +" data and speedup for in-band data. Refer to :pep:`574` for information " +"about improvements brought by protocol 5." +msgstr "" +"第 5 版协议是在 Python 3.8 中加入的。 它增加了对带外数据的支持,并可加速带内数据处理。 请参阅 :pep:`574` 了解第 5 " +"版协议所带来的改进的详情。" + +#: ../../library/pickle.rst:168 +msgid "" +"Serialization is a more primitive notion than persistence; although " +":mod:`pickle` reads and writes file objects, it does not handle the issue of" +" naming persistent objects, nor the (even more complicated) issue of " +"concurrent access to persistent objects. The :mod:`pickle` module can " +"transform a complex object into a byte stream and it can transform the byte " +"stream into an object with the same internal structure. Perhaps the most " +"obvious thing to do with these byte streams is to write them onto a file, " +"but it is also conceivable to send them across a network or store them in a " +"database. The :mod:`shelve` module provides a simple interface to pickle " +"and unpickle objects on DBM-style database files." +msgstr "" +"序列化是一种比持久化更底层的概念,虽然 :mod:`pickle` " +"读取和写入的是文件对象,但它不处理持久对象的命名问题,也不处理对持久对象的并发访问(甚至更复杂)的问题。:mod:`pickle` " +"模块可以将复杂对象转换为字节流,也可以将字节流转换为具有相同内部结构的对象。处理这些字节流最常见的做法是将它们写入文件,但它们也可以通过网络发送或存储在数据库中。:mod:`shelve`" +" 模块提供了一个简单的接口,用于在 DBM 类型的数据库文件上封存和解封对象。" + +#: ../../library/pickle.rst:181 +msgid "Module Interface" +msgstr "模块接口" + +#: ../../library/pickle.rst:183 +msgid "" +"To serialize an object hierarchy, you simply call the :func:`dumps` " +"function. Similarly, to de-serialize a data stream, you call the " +":func:`loads` function. However, if you want more control over serialization" +" and de-serialization, you can create a :class:`Pickler` or an " +":class:`Unpickler` object, respectively." +msgstr "" +"要序列化某个包含层次结构的对象,只需调用 :func:`dumps` 函数即可。同样,要反序列化数据流,可以调用 :func:`loads` " +"函数。但是,如果要对序列化和反序列化加以更多的控制,可以分别创建 :class:`Pickler` 或 :class:`Unpickler` 对象。" + +#: ../../library/pickle.rst:188 +msgid "The :mod:`pickle` module provides the following constants:" +msgstr ":mod:`pickle` 模块包含了以下常量:" + +#: ../../library/pickle.rst:193 +msgid "" +"An integer, the highest :ref:`protocol version ` " +"available. This value can be passed as a *protocol* value to functions " +":func:`dump` and :func:`dumps` as well as the :class:`Pickler` constructor." +msgstr "" +"整数,可用的最高 :ref:`协议版本 `。此值可以作为 *协议* 值传递给 :func:`dump` 和 " +":func:`dumps` 函数,以及 :class:`Pickler` 的构造函数。" + +#: ../../library/pickle.rst:200 +msgid "" +"An integer, the default :ref:`protocol version ` used for " +"pickling. May be less than :data:`HIGHEST_PROTOCOL`. Currently the default" +" protocol is 4, first introduced in Python 3.4 and incompatible with " +"previous versions." +msgstr "" +"整数,用于 pickle 数据的默认 :ref:`协议版本 `。它可能小于 " +":data:`HIGHEST_PROTOCOL`。当前默认协议是 v4,它在 Python 3.4 中首次引入,与之前的版本不兼容。" + +#: ../../library/pickle.rst:207 +msgid "The default protocol is 3." +msgstr "默认协议版本是 3。" + +#: ../../library/pickle.rst:211 +msgid "The default protocol is 4." +msgstr "默认协议版本是 4。" + +#: ../../library/pickle.rst:213 +msgid "" +"The :mod:`pickle` module provides the following functions to make the " +"pickling process more convenient:" +msgstr ":mod:`pickle` 模块提供了以下方法,让封存过程更加方便:" + +#: ../../library/pickle.rst:218 +msgid "" +"Write the pickled representation of the object *obj* to the open :term:`file" +" object` *file*. This is equivalent to ``Pickler(file, " +"protocol).dump(obj)``." +msgstr "" +"将对象 *obj* 封存以后的对象写入已打开的 :term:`file object` *file*。它等同于 ``Pickler(file, " +"protocol).dump(obj)``。" + +#: ../../library/pickle.rst:222 +msgid "" +"Arguments *file*, *protocol*, *fix_imports* and *buffer_callback* have the " +"same meaning as in the :class:`Pickler` constructor." +msgstr "" +"参数 *file*、*protocol*、*fix_imports* 和 *buffer_callback* 的含义与它们在 " +":class:`Pickler` 的构造函数中的含义相同。" + +#: ../../library/pickle.rst:225 ../../library/pickle.rst:236 +#: ../../library/pickle.rst:328 +msgid "The *buffer_callback* argument was added." +msgstr "加入了 *buffer_callback* 参数。" + +#: ../../library/pickle.rst:230 +msgid "" +"Return the pickled representation of the object *obj* as a :class:`bytes` " +"object, instead of writing it to a file." +msgstr "将 *obj* 封存以后的对象作为 :class:`bytes` 类型直接返回,而不是将其写入到文件。" + +#: ../../library/pickle.rst:233 +msgid "" +"Arguments *protocol*, *fix_imports* and *buffer_callback* have the same " +"meaning as in the :class:`Pickler` constructor." +msgstr "" +"参数 *protocol*、*fix_imports* 和 *buffer_callback* 的含义与它们在 :class:`Pickler` " +"的构造函数中的含义相同。" + +#: ../../library/pickle.rst:241 +msgid "" +"Read the pickled representation of an object from the open :term:`file " +"object` *file* and return the reconstituted object hierarchy specified " +"therein. This is equivalent to ``Unpickler(file).load()``." +msgstr "" +"从已打开的 :term:`file object` *文件* 中读取封存后的对象,重建其中特定对象的层次结构并返回。它相当于 " +"``Unpickler(file).load()``。" + +#: ../../library/pickle.rst:245 ../../library/pickle.rst:260 +msgid "" +"The protocol version of the pickle is detected automatically, so no protocol" +" argument is needed. Bytes past the pickled representation of the object " +"are ignored." +msgstr "Pickle 协议版本是自动检测出来的,所以不需要参数来指定协议。封存对象以外的其他字节将被忽略。" + +#: ../../library/pickle.rst:249 +msgid "" +"Arguments *file*, *fix_imports*, *encoding*, *errors*, *strict* and " +"*buffers* have the same meaning as in the :class:`Unpickler` constructor." +msgstr "" +"参数 *file*、*fix_imports*、*encoding*、*errors*、*strict* 和 *buffers* 的含义与它们在 " +":class:`Unpickler` 的构造函数中的含义相同。" + +#: ../../library/pickle.rst:252 ../../library/pickle.rst:267 +#: ../../library/pickle.rst:429 +msgid "The *buffers* argument was added." +msgstr "加入了 *buffers* 参数。" + +#: ../../library/pickle.rst:257 +msgid "" +"Return the reconstituted object hierarchy of the pickled representation " +"*data* of an object. *data* must be a :term:`bytes-like object`." +msgstr "" +"重建并返回一个对象的封存表示形式 *data* 的对象层级结构。 *data* 必须为 :term:`bytes-like object`。" + +#: ../../library/pickle.rst:264 +msgid "" +"Arguments *fix_imports*, *encoding*, *errors*, *strict* and *buffers* have " +"the same meaning as in the :class:`Unpickler` constructor." +msgstr "" +"参数 *fix_imports*, *encoding*, *errors*, *strict* 和 *buffers* 的含义与在 " +":class:`Unpickler` 构造器中的含义相同。" + +#: ../../library/pickle.rst:271 +msgid "The :mod:`pickle` module defines three exceptions:" +msgstr ":mod:`pickle` 模块定义了以下 3 个异常:" + +#: ../../library/pickle.rst:275 +msgid "" +"Common base class for the other pickling exceptions. It inherits " +":exc:`Exception`." +msgstr "其他 pickle 异常的基类。它是 :exc:`Exception` 的一个子类。" + +#: ../../library/pickle.rst:280 +msgid "" +"Error raised when an unpicklable object is encountered by :class:`Pickler`. " +"It inherits :exc:`PickleError`." +msgstr "当 :class:`Pickler` 遇到无法解封的对象时抛出此错误。它是 :exc:`PickleError` 的子类。" + +#: ../../library/pickle.rst:283 +msgid "" +"Refer to :ref:`pickle-picklable` to learn what kinds of objects can be " +"pickled." +msgstr "参考 :ref:`pickle-picklable` 来了解哪些对象可以被封存。" + +#: ../../library/pickle.rst:288 +msgid "" +"Error raised when there is a problem unpickling an object, such as a data " +"corruption or a security violation. It inherits :exc:`PickleError`." +msgstr "当解封出错时抛出此异常,例如数据损坏或对象不安全。它是 :exc:`PickleError` 的子类。" + +#: ../../library/pickle.rst:291 +msgid "" +"Note that other exceptions may also be raised during unpickling, including " +"(but not necessarily limited to) AttributeError, EOFError, ImportError, and " +"IndexError." +msgstr "" +"注意,解封时可能还会抛出其他异常,包括(但不限于) AttributeError、EOFError、ImportError 和 IndexError。" + +#: ../../library/pickle.rst:296 +msgid "" +"The :mod:`pickle` module exports three classes, :class:`Pickler`, " +":class:`Unpickler` and :class:`PickleBuffer`:" +msgstr "" +":mod:`pickle` 模块包含了 3 个类,:class:`Pickler`、:class:`Unpickler` 和 " +":class:`PickleBuffer`:" + +#: ../../library/pickle.rst:301 +msgid "This takes a binary file for writing a pickle data stream." +msgstr "它接受一个二进制文件用于写入 pickle 数据流。" + +#: ../../library/pickle.rst:303 +msgid "" +"The optional *protocol* argument, an integer, tells the pickler to use the " +"given protocol; supported protocols are 0 to :data:`HIGHEST_PROTOCOL`. If " +"not specified, the default is :data:`DEFAULT_PROTOCOL`. If a negative " +"number is specified, :data:`HIGHEST_PROTOCOL` is selected." +msgstr "" +"可选参数 *protocol* 是一个整数,告知 pickler 使用指定的协议,可选择的协议范围从 0 到 " +":data:`HIGHEST_PROTOCOL`。如果没有指定,这一参数默认值为 " +":data:`DEFAULT_PROTOCOL`。指定一个负数就相当于指定 :data:`HIGHEST_PROTOCOL`。" + +#: ../../library/pickle.rst:308 +msgid "" +"The *file* argument must have a write() method that accepts a single bytes " +"argument. It can thus be an on-disk file opened for binary writing, an " +":class:`io.BytesIO` instance, or any other custom object that meets this " +"interface." +msgstr "" +"参数 *file* 必须有一个 write() 方法,该 write() " +"方法要能接收字节作为其唯一参数。因此,它可以是一个打开的磁盘文件(用于写入二进制内容),也可以是一个 :class:`io.BytesIO` " +"实例,也可以是满足这一接口的其他任何自定义对象。" + +#: ../../library/pickle.rst:313 +msgid "" +"If *fix_imports* is true and *protocol* is less than 3, pickle will try to " +"map the new Python 3 names to the old module names used in Python 2, so that" +" the pickle data stream is readable with Python 2." +msgstr "" +"如果 *fix_imports* 为 True 且 *protocol* 小于 3,pickle 将尝试将 Python 3 中的新名称映射到 " +"Python 2 中的旧模块名称,因此 Python 2 也可以读取封存的数据流。" + +#: ../../library/pickle.rst:317 +msgid "" +"If *buffer_callback* is None (the default), buffer views are serialized into" +" *file* as part of the pickle stream." +msgstr "" +"如果 *buffer_callback* 为 None(默认情况),缓冲区视图(buffer view)将会作为 pickle 流的一部分被序列化到 " +"*file* 中。" + +#: ../../library/pickle.rst:320 +msgid "" +"If *buffer_callback* is not None, then it can be called any number of times " +"with a buffer view. If the callback returns a false value (such as None), " +"the given buffer is :ref:`out-of-band `; otherwise the buffer is" +" serialized in-band, i.e. inside the pickle stream." +msgstr "" +"如果 *buffer_callback* 不为 None,那它可以用缓冲区视图调用任意次。如果某次调用返回了 False 值(例如 " +"None),则给定的缓冲区是 :ref:`带外的 `,否则缓冲区是带内的(例如保存在了 pickle 流里面)。" + +#: ../../library/pickle.rst:325 +msgid "" +"It is an error if *buffer_callback* is not None and *protocol* is None or " +"smaller than 5." +msgstr "如果 *buffer_callback* 不是 None 且 *protocol* 是 None 或小于 5,就会出错。" + +#: ../../library/pickle.rst:333 +msgid "" +"Write the pickled representation of *obj* to the open file object given in " +"the constructor." +msgstr "将 *obj* 封存后的内容写入已打开的文件对象,该文件对象已经在构造函数中指定。" + +#: ../../library/pickle.rst:338 +msgid "Do nothing by default. This exists so a subclass can override it." +msgstr "默认无动作,该方法可被子类重写。" + +#: ../../library/pickle.rst:340 +msgid "" +"If :meth:`persistent_id` returns ``None``, *obj* is pickled as usual. Any " +"other value causes :class:`Pickler` to emit the returned value as a " +"persistent ID for *obj*. The meaning of this persistent ID should be " +"defined by :meth:`Unpickler.persistent_load`. Note that the value returned " +"by :meth:`persistent_id` cannot itself have a persistent ID." +msgstr "" +"如果 :meth:`persistent_id` 返回 ``None``,*obj* 会被照常 " +"pickle。如果返回其他值,:class:`Pickler` 会将这个函数的返回值作为 *obj* 的持久化 ID(Pickler " +"本应得到序列化数据流并将其写入文件,若此函数有返回值,则得到此函数的返回值并写入文件)。这个持久化 ID 的解释应当定义在 " +":meth:`Unpickler.persistent_load` " +"中(该方法定义还原对象的过程,并返回得到的对象)。注意,:meth:`persistent_id` 的返回值本身不能拥有持久化 ID。" + +#: ../../library/pickle.rst:346 ../../library/pickle.rst:447 +msgid "See :ref:`pickle-persistent` for details and examples of uses." +msgstr "参阅 :ref:`pickle-persistent` 获取详情和使用示例。" + +#: ../../library/pickle.rst:350 +msgid "" +"A pickler object's dispatch table is a registry of *reduction functions* of " +"the kind which can be declared using :func:`copyreg.pickle`. It is a " +"mapping whose keys are classes and whose values are reduction functions. A " +"reduction function takes a single argument of the associated class and " +"should conform to the same interface as a :meth:`__reduce__` method." +msgstr "" +"Pickler 对象的 dispatch 表是 :func:`copyreg.pickle` 中用到的 *reduction 函数* " +"的注册。dispatch 表本身是一个 class 到其 reduction 函数的映射键值对。一个 reduction " +"函数只接受一个参数,就是其关联的 class,函数行为应当遵守 :meth:`__reduce__` 接口规范。" + +#: ../../library/pickle.rst:358 +msgid "" +"By default, a pickler object will not have a :attr:`dispatch_table` " +"attribute, and it will instead use the global dispatch table managed by the " +":mod:`copyreg` module. However, to customize the pickling for a specific " +"pickler object one can set the :attr:`dispatch_table` attribute to a dict-" +"like object. Alternatively, if a subclass of :class:`Pickler` has a " +":attr:`dispatch_table` attribute then this will be used as the default " +"dispatch table for instances of that class." +msgstr "" +"Pickler 对象默认并没有 :attr:`dispatch_table` 属性,该对象默认使用 :mod:`copyreg` 模块中定义的全局 " +"dispatch 表。如果要为特定 Pickler 对象自定义序列化过程,可以将 :attr:`dispatch_table` " +"属性设置为类字典对象(dict-like object)。另外,如果 :class:`Pickler` 的子类设置了 " +":attr:`dispatch_table` 属性,则该子类的实例会使用这个表作为默认的 dispatch 表。" + +#: ../../library/pickle.rst:367 +msgid "See :ref:`pickle-dispatch` for usage examples." +msgstr "参阅 :ref:`pickle-dispatch` 获取使用示例。" + +#: ../../library/pickle.rst:373 +msgid "" +"Special reducer that can be defined in :class:`Pickler` subclasses. This " +"method has priority over any reducer in the :attr:`dispatch_table`. It " +"should conform to the same interface as a :meth:`__reduce__` method, and can" +" optionally return ``NotImplemented`` to fallback on " +":attr:`dispatch_table`-registered reducers to pickle ``obj``." +msgstr "" +"可以在 :class:`Pickler` 的子类中定义的特殊 reducer。此方法的优先级高于 :attr:`dispatch_table` 中的任何" +" reducer。它应该与 :meth:`__reduce__` 方法遵循相同的接口,它也可以返回 ``NotImplemented``,这将使用 " +":attr:`dispatch_table` 里注册的 reducer 来封存 ``obj``。" + +#: ../../library/pickle.rst:379 +msgid "For a detailed example, see :ref:`reducer_override`." +msgstr "参阅 :ref:`reducer_override` 获取详细的示例。" + +#: ../../library/pickle.rst:385 +msgid "" +"Deprecated. Enable fast mode if set to a true value. The fast mode disables" +" the usage of memo, therefore speeding the pickling process by not " +"generating superfluous PUT opcodes. It should not be used with self-" +"referential objects, doing otherwise will cause :class:`Pickler` to recurse " +"infinitely." +msgstr "" +"已弃用。设为 True 则启用快速模式。快速模式禁用了“备忘录” (memo) 的使用,即不生成多余的 PUT 操作码来加快封存过程。不应将其与自指 " +"(self-referential) 对象一起使用,否则将导致 :class:`Pickler` 无限递归。" + +#: ../../library/pickle.rst:391 +msgid "Use :func:`pickletools.optimize` if you need more compact pickles." +msgstr "如果需要进一步提高 pickle 的压缩率,请使用 :func:`pickletools.optimize`。" + +#: ../../library/pickle.rst:396 +msgid "This takes a binary file for reading a pickle data stream." +msgstr "它接受一个二进制文件用于读取 pickle 数据流。" + +#: ../../library/pickle.rst:398 +msgid "" +"The protocol version of the pickle is detected automatically, so no protocol" +" argument is needed." +msgstr "Pickle 协议版本是自动检测出来的,所以不需要参数来指定协议。" + +#: ../../library/pickle.rst:401 +msgid "" +"The argument *file* must have three methods, a read() method that takes an " +"integer argument, a readinto() method that takes a buffer argument and a " +"readline() method that requires no arguments, as in the " +":class:`io.BufferedIOBase` interface. Thus *file* can be an on-disk file " +"opened for binary reading, an :class:`io.BytesIO` object, or any other " +"custom object that meets this interface." +msgstr "" +"参数 *file* 必须有三个方法,read() 方法接受一个整数参数,readinto() 方法接受一个缓冲区作为参数,readline() " +"方法不需要参数,这与 :class:`io.BufferedIOBase` 里定义的接口是相同的。因此 *file* " +"可以是一个磁盘上用于二进制读取的文件,也可以是一个 :class:`io.BytesIO` 实例,也可以是满足这一接口的其他任何自定义对象。" + +#: ../../library/pickle.rst:408 +msgid "" +"The optional arguments *fix_imports*, *encoding* and *errors* are used to " +"control compatibility support for pickle stream generated by Python 2. If " +"*fix_imports* is true, pickle will try to map the old Python 2 names to the " +"new names used in Python 3. The *encoding* and *errors* tell pickle how to " +"decode 8-bit string instances pickled by Python 2; these default to 'ASCII' " +"and 'strict', respectively. The *encoding* can be 'bytes' to read these " +"8-bit string instances as bytes objects. Using ``encoding='latin1'`` is " +"required for unpickling NumPy arrays and instances of " +":class:`~datetime.datetime`, :class:`~datetime.date` and " +":class:`~datetime.time` pickled by Python 2." +msgstr "" +"可选的参数是 *fix_imports*, *encoding* 和 *errors*,用于控制由Python 2 生成的 pickle " +"流的兼容性。如果 *fix_imports* 为 True,则 pickle 将尝试将旧的 Python 2 名称映射到 Python 3 " +"中对应的新名称。*encoding* 和 *errors* 参数告诉 pickle 如何解码 Python 2 存储的 8 " +"位字符串实例;这两个参数默认分别为 'ASCII' 和 'strict'。*encoding* 参数可置为 'bytes' 来将这些 8 " +"位字符串实例读取为字节对象。读取 NumPy array 和 Python 2 存储的 " +":class:`~datetime.datetime`、:class:`~datetime.date` 和 " +":class:`~datetime.time` 实例时,请使用 ``encoding='latin1'``。" + +#: ../../library/pickle.rst:419 +msgid "" +"If *buffers* is None (the default), then all data necessary for " +"deserialization must be contained in the pickle stream. This means that the" +" *buffer_callback* argument was None when a :class:`Pickler` was " +"instantiated (or when :func:`dump` or :func:`dumps` was called)." +msgstr "" +"如果 *buffers* 为 None(默认值),则反序列化所需的所有数据都必须包含在 pickle 流中。这意味着在实例化 " +":class:`Pickler` 时(或调用 :func:`dump` 或 :func:`dumps` 时),参数 *buffer_callback* " +"为 None。" + +#: ../../library/pickle.rst:424 +msgid "" +"If *buffers* is not None, it should be an iterable of buffer-enabled objects" +" that is consumed each time the pickle stream references an :ref:`out-of-" +"band ` buffer view. Such buffers have been given in order to " +"the *buffer_callback* of a Pickler object." +msgstr "" +"如果 *buffers* 不为 None,则每次 pickle 流引用 :ref:`带外 ` " +"缓冲区视图时,消耗的对象都应该是可迭代的启用缓冲区的对象。这样的缓冲区应该按顺序地提供给 Pickler 对象的 *buffer_callback* " +"方法。" + +#: ../../library/pickle.rst:434 +msgid "" +"Read the pickled representation of an object from the open file object given" +" in the constructor, and return the reconstituted object hierarchy specified" +" therein. Bytes past the pickled representation of the object are ignored." +msgstr "从构造函数中指定的文件对象里读取封存好的对象,重建其中特定对象的层次结构并返回。封存对象以外的其他字节将被忽略。" + +#: ../../library/pickle.rst:441 +msgid "Raise an :exc:`UnpicklingError` by default." +msgstr "默认抛出 :exc:`UnpicklingError` 异常。" + +#: ../../library/pickle.rst:443 +msgid "" +"If defined, :meth:`persistent_load` should return the object specified by " +"the persistent ID *pid*. If an invalid persistent ID is encountered, an " +":exc:`UnpicklingError` should be raised." +msgstr "" +"如果定义了此方法,:meth:`persistent_load` 应当返回持久化 ID *pid* 所指定的对象。 如果遇到无效的持久化 " +"ID,则应当引发 :exc:`UnpicklingError`。" + +#: ../../library/pickle.rst:451 +msgid "" +"Import *module* if necessary and return the object called *name* from it, " +"where the *module* and *name* arguments are :class:`str` objects. Note, " +"unlike its name suggests, :meth:`find_class` is also used for finding " +"functions." +msgstr "" +"如有必要,导入 *module* 模块并返回其中名叫 *name* 的对象,其中 *module* 和 *name* 参数都是 :class:`str`" +" 对象。注意,不要被这个函数的名字迷惑, :meth:`find_class` 同样可以用来导入函数。" + +#: ../../library/pickle.rst:456 +msgid "" +"Subclasses may override this to gain control over what type of objects and " +"how they can be loaded, potentially reducing security risks. Refer to " +":ref:`pickle-restrict` for details." +msgstr "" +"子类可以重写此方法,来控制加载对象的类型和加载对象的方式,从而尽可能降低安全风险。参阅 :ref:`pickle-restrict` 获取更详细的信息。" + +#: ../../library/pickle.rst:460 +msgid "" +"Raises an :ref:`auditing event ` ``pickle.find_class`` with " +"arguments ``module``, ``name``." +msgstr "" +"引发一个 :ref:`审计事件 ` ``pickle.find_class`` 并附带参数 ``module``, " +"``name``。" + +#: ../../library/pickle.rst:464 +msgid "" +"A wrapper for a buffer representing picklable data. *buffer* must be a " +":ref:`buffer-providing ` object, such as a :term:`bytes-like " +"object` or a N-dimensional array." +msgstr "" +"缓冲区的包装器 (wrapper),缓冲区中包含着可封存的数据。*buffer* 必须是一个 :ref:`buffer-providing " +"` 对象,比如 :term:`bytes-like object` 或多维数组。" + +#: ../../library/pickle.rst:468 +msgid "" +":class:`PickleBuffer` is itself a buffer provider, therefore it is possible " +"to pass it to other APIs expecting a buffer-providing object, such as " +":class:`memoryview`." +msgstr "" +":class:`PickleBuffer` 本身就可以生成缓冲区对象,因此可以将其传递给需要缓冲区生成器的其他 API,比如 " +":class:`memoryview`。" + +#: ../../library/pickle.rst:472 +msgid "" +":class:`PickleBuffer` objects can only be serialized using pickle protocol 5" +" or higher. They are eligible for :ref:`out-of-band serialization `." +msgstr "" +":class:`PickleBuffer` 对象只能用 pickle 版本 5 及以上协议进行序列化。它们符合 :ref:`带外序列化 ` 的条件。" + +#: ../../library/pickle.rst:480 +msgid "" +"Return a :class:`memoryview` of the memory area underlying this buffer. The " +"returned object is a one-dimensional, C-contiguous memoryview with format " +"``B`` (unsigned bytes). :exc:`BufferError` is raised if the buffer is " +"neither C- nor Fortran-contiguous." +msgstr "" +"返回该缓冲区底层内存区域的 :class:`memoryview`。 返回的对象是一维的、C 连续布局的 memoryview,格式为 ``B`` " +"(无符号字节)。 如果缓冲区既不是 C 连续布局也不是 Fortran 连续布局的,则抛出 :exc:`BufferError` 异常。" + +#: ../../library/pickle.rst:487 +msgid "Release the underlying buffer exposed by the PickleBuffer object." +msgstr "释放由 PickleBuffer 占用的底层缓冲区。" + +#: ../../library/pickle.rst:493 +msgid "What can be pickled and unpickled?" +msgstr "可以被封存/解封的对象" + +#: ../../library/pickle.rst:495 +msgid "The following types can be pickled:" +msgstr "下列类型可以被封存:" + +#: ../../library/pickle.rst:497 +msgid "``None``, ``True``, and ``False``;" +msgstr "``None``, ``True`` 和 ``False``;" + +#: ../../library/pickle.rst:499 +msgid "integers, floating-point numbers, complex numbers;" +msgstr "整数、浮点数、复数;" + +#: ../../library/pickle.rst:501 +msgid "strings, bytes, bytearrays;" +msgstr "字符串、字节串、字节数组;" + +#: ../../library/pickle.rst:503 +msgid "" +"tuples, lists, sets, and dictionaries containing only picklable objects;" +msgstr "只包含可封存对象的元组、列表、集合和字典;" + +#: ../../library/pickle.rst:505 +msgid "" +"functions (built-in and user-defined) defined at the top level of a module " +"(using :keyword:`def`, not :keyword:`lambda`);" +msgstr "" + +#: ../../library/pickle.rst:508 +msgid "classes defined at the top level of a module;" +msgstr "" + +#: ../../library/pickle.rst:510 +msgid "" +"instances of such classes whose :attr:`~object.__dict__` or the result of " +"calling :meth:`__getstate__` is picklable (see section :ref:`pickle-inst` " +"for details)." +msgstr "" +"某些类实例,这些类的 :attr:`~object.__dict__` 属性值或 :meth:`__getstate__` " +"函数的返回值可以被封存(详情参阅 :ref:`pickle-inst` 这一段)。" + +#: ../../library/pickle.rst:514 +msgid "" +"Attempts to pickle unpicklable objects will raise the :exc:`PicklingError` " +"exception; when this happens, an unspecified number of bytes may have " +"already been written to the underlying file. Trying to pickle a highly " +"recursive data structure may exceed the maximum recursion depth, a " +":exc:`RecursionError` will be raised in this case. You can carefully raise " +"this limit with :func:`sys.setrecursionlimit`." +msgstr "" +"尝试封存不能被封存的对象会抛出 :exc:`PicklingError` " +"异常,异常发生时,可能有部分字节已经被写入指定文件中。尝试封存递归层级很深的对象时,可能会超出最大递归层级限制,此时会抛出 " +":exc:`RecursionError` 异常,可以通过 :func:`sys.setrecursionlimit` " +"调整递归层级,不过请谨慎使用这个函数,因为可能会导致解释器崩溃。" + +#: ../../library/pickle.rst:521 +msgid "" +"Note that functions (built-in and user-defined) are pickled by fully " +"qualified name, not by value. [#]_ This means that only the function name " +"is pickled, along with the name of the module the function is defined in. " +"Neither the function's code, nor any of its function attributes are pickled." +" Thus the defining module must be importable in the unpickling environment," +" and the module must contain the named object, otherwise an exception will " +"be raised. [#]_" +msgstr "" + +#: ../../library/pickle.rst:528 +msgid "" +"Similarly, classes are pickled by fully qualified name, so the same " +"restrictions in the unpickling environment apply. Note that none of the " +"class's code or data is pickled, so in the following example the class " +"attribute ``attr`` is not restored in the unpickling environment::" +msgstr "" +"类似地,类也是按完整限定名称来封存的,因此在解封环境中也会应用相同的限制。 请注意类的代码或数据都不会被封存,因此在下面的示例中类属性 ``attr``" +" 不会在解封环境中被恢复::" + +#: ../../library/pickle.rst:538 +msgid "" +"These restrictions are why picklable functions and classes must be defined " +"at the top level of a module." +msgstr "这些限制决定了为什么可封存的函数和类必须在一个模块的最高层级上定义。" + +#: ../../library/pickle.rst:541 +msgid "" +"Similarly, when class instances are pickled, their class's code and data are" +" not pickled along with them. Only the instance data are pickled. This is " +"done on purpose, so you can fix bugs in a class or add methods to the class " +"and still load objects that were created with an earlier version of the " +"class. If you plan to have long-lived objects that will see many versions " +"of a class, it may be worthwhile to put a version number in the objects so " +"that suitable conversions can be made by the class's :meth:`__setstate__` " +"method." +msgstr "" +"类似的,在封存类的实例时,其类体和类数据不会跟着实例一起被封存,只有实例数据会被封存。这样设计是有目的的,在将来修复类中的错误、给类增加方法之后,仍然可以载入原来版本类实例的封存数据来还原该实例。如果你准备长期使用一个对象,可能会同时存在较多版本的类体,可以为对象添加版本号,这样就可以通过类的" +" :meth:`__setstate__` 方法将老版本转换成新版本。" + +#: ../../library/pickle.rst:553 +msgid "Pickling Class Instances" +msgstr "封存类实例" + +#: ../../library/pickle.rst:557 +msgid "" +"In this section, we describe the general mechanisms available to you to " +"define, customize, and control how class instances are pickled and " +"unpickled." +msgstr "在本节中,我们描述了可用于定义、自定义和控制如何封存和解封类实例的通用流程。" + +#: ../../library/pickle.rst:560 +msgid "" +"In most cases, no additional code is needed to make instances picklable. By" +" default, pickle will retrieve the class and the attributes of an instance " +"via introspection. When a class instance is unpickled, its :meth:`__init__` " +"method is usually *not* invoked. The default behaviour first creates an " +"uninitialized instance and then restores the saved attributes. The " +"following code shows an implementation of this behaviour::" +msgstr "" +"通常,使一个实例可被封存不需要附加任何代码。Pickle 默认会通过 Python 的内省机制获得实例的类及属性。而当实例解封时,它的 " +":meth:`__init__` 方法通常 *不会* " +"被调用。其默认动作是:先创建一个未初始化的实例,然后还原其属性,下面的代码展示了这种行为的实现机制:" + +#: ../../library/pickle.rst:575 +msgid "" +"Classes can alter the default behaviour by providing one or several special " +"methods:" +msgstr "类可以改变默认行为,只需定义以下一种或几种特殊方法:" + +#: ../../library/pickle.rst:580 +msgid "" +"In protocols 2 and newer, classes that implements the " +":meth:`__getnewargs_ex__` method can dictate the values passed to the " +":meth:`__new__` method upon unpickling. The method must return a pair " +"``(args, kwargs)`` where *args* is a tuple of positional arguments and " +"*kwargs* a dictionary of named arguments for constructing the object. Those" +" will be passed to the :meth:`__new__` method upon unpickling." +msgstr "" +"对于使用第 2 版或更高版协议的 pickle,实现了 :meth:`__getnewargs_ex__` 方法的类可以控制在解封时传给 " +":meth:`__new__` 方法的参数。本方法必须返回一对 ``(args, kwargs)`` 用于构建对象,其中 *args* 是表示位置参数的" +" tuple,而 *kwargs* 是表示命名参数的 dict。它们会在解封时传递给 :meth:`__new__` 方法。" + +#: ../../library/pickle.rst:588 +msgid "" +"You should implement this method if the :meth:`__new__` method of your class" +" requires keyword-only arguments. Otherwise, it is recommended for " +"compatibility to implement :meth:`__getnewargs__`." +msgstr "" +"如果类的 :meth:`__new__` 方法只接受关键字参数,则应当实现这个方法。否则,为了兼容性,更推荐实现 " +":meth:`__getnewargs__` 方法。" + +#: ../../library/pickle.rst:592 +msgid ":meth:`__getnewargs_ex__` is now used in protocols 2 and 3." +msgstr ":meth:`__getnewargs_ex__` 现在可用于第 2 和第 3 版协议。" + +#: ../../library/pickle.rst:598 +msgid "" +"This method serves a similar purpose as :meth:`__getnewargs_ex__`, but " +"supports only positional arguments. It must return a tuple of arguments " +"``args`` which will be passed to the :meth:`__new__` method upon unpickling." +msgstr "" +"这个方法与上一个 :meth:`__getnewargs_ex__` 方法类似,但仅支持位置参数。它要求返回一个 tuple 类型的 " +"``args``,用于解封时传递给 :meth:`__new__` 方法。" + +#: ../../library/pickle.rst:602 +msgid "" +":meth:`__getnewargs__` will not be called if :meth:`__getnewargs_ex__` is " +"defined." +msgstr "如果定义了 :meth:`__getnewargs_ex__`,那么 :meth:`__getnewargs__` 就不会被调用。" + +#: ../../library/pickle.rst:605 +msgid "" +"Before Python 3.6, :meth:`__getnewargs__` was called instead of " +":meth:`__getnewargs_ex__` in protocols 2 and 3." +msgstr "" +"在 Python 3.6 前,第 2、3 版协议会调用 :meth:`__getnewargs__`,更高版本协议会调用 " +":meth:`__getnewargs_ex__`。" + +#: ../../library/pickle.rst:612 +msgid "" +"Classes can further influence how their instances are pickled; if the class " +"defines the method :meth:`__getstate__`, it is called and the returned " +"object is pickled as the contents for the instance, instead of the contents " +"of the instance's dictionary. If the :meth:`__getstate__` method is absent," +" the instance's :attr:`~object.__dict__` is pickled as usual." +msgstr "" +"类还可以进一步控制其实例的封存过程。如果类定义了 " +":meth:`__getstate__`,它就会被调用,其返回的对象是被当做实例内容来封存的,否则封存的是实例的 __dict__。如果 " +":meth:`__getstate__` 未定义,实例的 :attr:`~object.__dict__` 会被照常封存。" + +#: ../../library/pickle.rst:621 +msgid "" +"Upon unpickling, if the class defines :meth:`__setstate__`, it is called " +"with the unpickled state. In that case, there is no requirement for the " +"state object to be a dictionary. Otherwise, the pickled state must be a " +"dictionary and its items are assigned to the new instance's dictionary." +msgstr "" +"当解封时,如果类定义了 :meth:`__setstate__`,就会在已解封状态下调用它。此时不要求实例的 state 对象必须是 " +"dict。没有定义此方法的话,先前封存的 state 对象必须是 dict,且该 dict 内容会在解封时赋给新实例的 __dict__。" + +#: ../../library/pickle.rst:628 +msgid "" +"If :meth:`__getstate__` returns a false value, the :meth:`__setstate__` " +"method will not be called upon unpickling." +msgstr "如果 :meth:`__getstate__` 返回 False,那么在解封时就不会调用 :meth:`__setstate__` 方法。" + +#: ../../library/pickle.rst:632 +msgid "" +"Refer to the section :ref:`pickle-state` for more information about how to " +"use the methods :meth:`__getstate__` and :meth:`__setstate__`." +msgstr "" +"参考 :ref:`pickle-state` 一段获取如何使用 :meth:`__getstate__` 和 :meth:`__setstate__` " +"方法的更多信息。" + +#: ../../library/pickle.rst:637 +msgid "" +"At unpickling time, some methods like :meth:`__getattr__`, " +":meth:`__getattribute__`, or :meth:`__setattr__` may be called upon the " +"instance. In case those methods rely on some internal invariant being true," +" the type should implement :meth:`__new__` to establish such an invariant, " +"as :meth:`__init__` is not called when unpickling an instance." +msgstr "" +"在解封时,实例的某些方法例如 :meth:`__getattr__`, :meth:`__getattribute__` 或 " +":meth:`__setattr__` 可能会被调用。 由于这些方法可能要求某些内部不变量为真值,因此该类型应当实现 :meth:`__new__` " +"以建立这样的不变量,因为当解封一个实例时 :meth:`__init__` 并不会被调用。" + +#: ../../library/pickle.rst:646 +msgid "" +"As we shall see, pickle does not use directly the methods described above. " +"In fact, these methods are part of the copy protocol which implements the " +":meth:`__reduce__` special method. The copy protocol provides a unified " +"interface for retrieving the data necessary for pickling and copying " +"objects. [#]_" +msgstr "" +"可以看出,其实 pickle 并不直接调用上面的几个函数。事实上,这几个函数是复制协议的一部分,它们实现了 :meth:`__reduce__` " +"这一特殊接口。复制协议提供了统一的接口,用于在封存或复制对象的过程中取得所需数据。[#]_" + +#: ../../library/pickle.rst:652 +msgid "" +"Although powerful, implementing :meth:`__reduce__` directly in your classes " +"is error prone. For this reason, class designers should use the high-level " +"interface (i.e., :meth:`__getnewargs_ex__`, :meth:`__getstate__` and " +":meth:`__setstate__`) whenever possible. We will show, however, cases where" +" using :meth:`__reduce__` is the only option or leads to more efficient " +"pickling or both." +msgstr "" +"尽管这个协议功能很强,但是直接在类中实现 :meth:`__reduce__` 接口容易产生错误。因此,设计类时应当尽可能的使用高级接口(比如 " +":meth:`__getnewargs_ex__`、:meth:`__getstate__` 和 " +":meth:`__setstate__`)。后面仍然可以看到直接实现 :meth:`__reduce__` " +"接口的状况,可能别无他法,可能为了获得更好的性能,或者两者皆有之。" + +#: ../../library/pickle.rst:661 +msgid "" +"The interface is currently defined as follows. The :meth:`__reduce__` " +"method takes no argument and shall return either a string or preferably a " +"tuple (the returned object is often referred to as the \"reduce value\")." +msgstr "" +"该接口当前定义如下。:meth:`__reduce__` 方法不带任何参数,并且应返回字符串或最好返回一个元组(返回的对象通常称为“reduce " +"值”)。" + +#: ../../library/pickle.rst:665 +msgid "" +"If a string is returned, the string should be interpreted as the name of a " +"global variable. It should be the object's local name relative to its " +"module; the pickle module searches the module namespace to determine the " +"object's module. This behaviour is typically useful for singletons." +msgstr "" +"如果返回字符串,该字符串会被当做一个全局变量的名称。它应该是对象相对于其模块的本地名称,pickle " +"模块会搜索模块命名空间来确定对象所属的模块。这种行为常在单例模式使用。" + +#: ../../library/pickle.rst:670 +msgid "" +"When a tuple is returned, it must be between two and six items long. " +"Optional items can either be omitted, or ``None`` can be provided as their " +"value. The semantics of each item are in order:" +msgstr "如果返回的是元组,则应当包含 2 到 6 个元素,可选元素可以省略或设置为 ``None``。每个元素代表的意义如下:" + +#: ../../library/pickle.rst:676 +msgid "" +"A callable object that will be called to create the initial version of the " +"object." +msgstr "一个可调用对象,该对象会在创建对象的最初版本时调用。" + +#: ../../library/pickle.rst:679 +msgid "" +"A tuple of arguments for the callable object. An empty tuple must be given " +"if the callable does not accept any argument." +msgstr "可调用对象的参数,是一个元组。如果可调用对象不接受参数,必须提供一个空元组。" + +#: ../../library/pickle.rst:682 +msgid "" +"Optionally, the object's state, which will be passed to the object's " +":meth:`__setstate__` method as previously described. If the object has no " +"such method then, the value must be a dictionary and it will be added to the" +" object's :attr:`~object.__dict__` attribute." +msgstr "" +"可选元素,用于表示对象的状态,将被传给前述的 :meth:`__setstate__` 方法。 " +"如果对象没有此方法,则这个元素必须是字典类型,并会被添加至 :attr:`~object.__dict__` 属性中。" + +#: ../../library/pickle.rst:687 +msgid "" +"Optionally, an iterator (and not a sequence) yielding successive items. " +"These items will be appended to the object either using ``obj.append(item)``" +" or, in batch, using ``obj.extend(list_of_items)``. This is primarily used " +"for list subclasses, but may be used by other classes as long as they have " +":meth:`append` and :meth:`extend` methods with the appropriate signature. " +"(Whether :meth:`append` or :meth:`extend` is used depends on which pickle " +"protocol version is used as well as the number of items to append, so both " +"must be supported.)" +msgstr "" +"可选元素,一个返回连续项的迭代器(而不是序列)。这些项会被 ``obj.append(item)`` 逐个加入对象,或被 " +"``obj.extend(list_of_items)`` 批量加入对象。这个元素主要用于 list 的子类,也可以用于那些正确实现了 " +":meth:`append` 和 :meth:`extend` 方法的类。(具体是使用 :meth:`append` 还是 :meth:`extend`" +" 取决于 pickle 协议版本以及待插入元素的项数,所以这两个方法必须同时被类支持。)" + +#: ../../library/pickle.rst:696 +msgid "" +"Optionally, an iterator (not a sequence) yielding successive key-value " +"pairs. These items will be stored to the object using ``obj[key] = value``." +" This is primarily used for dictionary subclasses, but may be used by other" +" classes as long as they implement :meth:`__setitem__`." +msgstr "" +"可选元素,一个返回连续键值对的迭代器(而不是序列)。这些键值对将会以 ``obj[key] = value`` 的方式存储于对象中。该元素主要用于 " +"dict 子类,也可以用于那些实现了 :meth:`__setitem__` 的类。" + +#: ../../library/pickle.rst:701 +msgid "" +"Optionally, a callable with a ``(obj, state)`` signature. This callable " +"allows the user to programmatically control the state-updating behavior of a" +" specific object, instead of using ``obj``'s static :meth:`__setstate__` " +"method. If not ``None``, this callable will have priority over ``obj``'s " +":meth:`__setstate__`." +msgstr "" +"可选元素,一个带有 ``(obj, state)`` 签名的可调用对象。该可调用对象允许用户以编程方式控制特定对象的状态更新行为,而不是使用 " +"``obj`` 的静态 :meth:`__setstate__` 方法。如果此处不是 ``None``,则此可调用对象的优先级高于 ``obj`` 的 " +":meth:`__setstate__`。" + +#: ../../library/pickle.rst:707 +msgid "The optional sixth tuple item, ``(obj, state)``, was added." +msgstr "新增了元组的第 6 项,可选元素 ``(obj, state)``。" + +#: ../../library/pickle.rst:713 +msgid "" +"Alternatively, a :meth:`__reduce_ex__` method may be defined. The only " +"difference is this method should take a single integer argument, the " +"protocol version. When defined, pickle will prefer it over the " +":meth:`__reduce__` method. In addition, :meth:`__reduce__` automatically " +"becomes a synonym for the extended version. The main use for this method is" +" to provide backwards-compatible reduce values for older Python releases." +msgstr "" +"作为替代选项,也可以实现 :meth:`__reduce_ex__` 方法。 此方法的唯一不同之处在于它应接受一个整型参数用于指定协议版本。 " +"如果定义了这个函数,则会覆盖 :meth:`__reduce__` 的行为。 此外,:meth:`__reduce__` " +"方法会自动成为扩展版方法的同义词。 这个函数主要用于为以前的 Python 版本提供向后兼容的 reduce 值。" + +#: ../../library/pickle.rst:725 +msgid "Persistence of External Objects" +msgstr "持久化外部对象" + +#: ../../library/pickle.rst:731 +msgid "" +"For the benefit of object persistence, the :mod:`pickle` module supports the" +" notion of a reference to an object outside the pickled data stream. Such " +"objects are referenced by a persistent ID, which should be either a string " +"of alphanumeric characters (for protocol 0) [#]_ or just an arbitrary object" +" (for any newer protocol)." +msgstr "" +"为了获取对象持久化的利益, :mod:`pickle` 模块支持引用已封存数据流之外的对象。 这样的对象是通过一个持久化 ID " +"来引用的,它应当是一个由字母数字类字符组成的字符串 (对于第 0 版协议) [#]_ 或是一个任意对象 (用于任意新版协议)。" + +#: ../../library/pickle.rst:737 +msgid "" +"The resolution of such persistent IDs is not defined by the :mod:`pickle` " +"module; it will delegate this resolution to the user-defined methods on the " +"pickler and unpickler, :meth:`~Pickler.persistent_id` and " +":meth:`~Unpickler.persistent_load` respectively." +msgstr "" +":mod:`pickle` 模块不提供对持久化 ID 的解析工作,它将解析工作分配给用户定义的方法,分别是 pickler 中的 " +":meth:`~Pickler.persistent_id` 方法和 unpickler 中的 " +":meth:`~Unpickler.persistent_load` 方法。" + +#: ../../library/pickle.rst:742 +msgid "" +"To pickle objects that have an external persistent ID, the pickler must have" +" a custom :meth:`~Pickler.persistent_id` method that takes an object as an " +"argument and returns either ``None`` or the persistent ID for that object. " +"When ``None`` is returned, the pickler simply pickles the object as normal. " +"When a persistent ID string is returned, the pickler will pickle that " +"object, along with a marker so that the unpickler will recognize it as a " +"persistent ID." +msgstr "" +"要通过持久化 ID 将外部对象封存,必须在 pickler 中实现 :meth:`~Pickler.persistent_id` " +"方法,该方法接受需要被封存的对象作为参数,返回一个 ``None`` 或返回该对象的持久化 ID。如果返回 " +"``None``,该对象会被按照默认方式封存为数据流。如果返回字符串形式的持久化 ID,则会封存这个字符串并加上一个标记,这样 unpickler " +"才能将其识别为持久化 ID。" + +#: ../../library/pickle.rst:749 +msgid "" +"To unpickle external objects, the unpickler must have a custom " +":meth:`~Unpickler.persistent_load` method that takes a persistent ID object " +"and returns the referenced object." +msgstr "" +"要解封外部对象,Unpickler 必须实现 :meth:`~Unpickler.persistent_load` 方法,接受一个持久化 ID " +"对象作为参数并返回一个引用的对象。" + +#: ../../library/pickle.rst:753 +msgid "" +"Here is a comprehensive example presenting how persistent ID can be used to " +"pickle external objects by reference." +msgstr "下面是一个全面的例子,展示了如何使用持久化 ID 来封存外部对象。" + +#: ../../library/pickle.rst:761 +msgid "Dispatch Tables" +msgstr "Dispatch 表" + +#: ../../library/pickle.rst:763 +msgid "" +"If one wants to customize pickling of some classes without disturbing any " +"other code which depends on pickling, then one can create a pickler with a " +"private dispatch table." +msgstr "如果想对某些类进行自定义封存,而又不想在类中增加用于封存的代码,就可以创建带有特殊 dispatch 表的 pickler。" + +#: ../../library/pickle.rst:767 +msgid "" +"The global dispatch table managed by the :mod:`copyreg` module is available " +"as :data:`copyreg.dispatch_table`. Therefore, one may choose to use a " +"modified copy of :data:`copyreg.dispatch_table` as a private dispatch table." +msgstr "" +"在 :mod:`copyreg` 模块的 :data:`copyreg.dispatch_table` 中定义了全局 dispatch " +"表。因此,可以使用 :data:`copyreg.dispatch_table` 修改后的副本作为自有 dispatch 表。" + +#: ../../library/pickle.rst:772 +msgid "For example ::" +msgstr "例如 ::" + +#: ../../library/pickle.rst:779 +msgid "" +"creates an instance of :class:`pickle.Pickler` with a private dispatch table" +" which handles the ``SomeClass`` class specially. Alternatively, the code " +"::" +msgstr "" +"创建了一个带有自有 dispatch 表的 :class:`pickle.Pickler` 实例,它可以对 ``SomeClass`` " +"类进行特殊处理。另外,下列代码 ::" + +#: ../../library/pickle.rst:789 +msgid "" +"does the same but all instances of ``MyPickler`` will by default share the " +"private dispatch table. On the other hand, the code ::" +msgstr "完成同样的操作,但所有 ``MyPickler`` 的实例都会共享一个私有分发表。 另一方面,代码 ::" + +#: ../../library/pickle.rst:796 +msgid "" +"modifies the global dispatch table shared by all users of the :mod:`copyreg`" +" module." +msgstr "会修改由 :mod:`copyreg` 模块的所有用户共享的全局分发表。" + +#: ../../library/pickle.rst:801 +msgid "Handling Stateful Objects" +msgstr "处理有状态的对象" + +#: ../../library/pickle.rst:807 +msgid "" +"Here's an example that shows how to modify pickling behavior for a class. " +"The :class:`TextReader` class opens a text file, and returns the line number" +" and line contents each time its :meth:`!readline` method is called. If a " +":class:`TextReader` instance is pickled, all attributes *except* the file " +"object member are saved. When the instance is unpickled, the file is " +"reopened, and reading resumes from the last location. The " +":meth:`__setstate__` and :meth:`__getstate__` methods are used to implement " +"this behavior. ::" +msgstr "" +"下面的示例展示了如何修改类在封存时的行为。其中 :class:`TextReader` 类打开了一个文本文件,每次调用其 " +":meth:`!readline` 方法则返回行号和该行的字符。 在封存这个 :class:`TextReader` 的实例时,*除了* " +"文件对象,其他属性都会被保存。 当解封实例时,需要重新打开文件,然后从上次的位置开始继续读取。实现这些功能需要实现 " +":meth:`__setstate__` 和 :meth:`__getstate__` 方法。 ::" + +#: ../../library/pickle.rst:853 +msgid "A sample usage might be something like this::" +msgstr "使用方法如下所示:" + +#: ../../library/pickle.rst:867 +msgid "Custom Reduction for Types, Functions, and Other Objects" +msgstr "类型,函数和其他对象的自定义归约" + +#: ../../library/pickle.rst:871 +msgid "" +"Sometimes, :attr:`~Pickler.dispatch_table` may not be flexible enough. In " +"particular we may want to customize pickling based on another criterion than" +" the object's type, or we may want to customize the pickling of functions " +"and classes." +msgstr "" +"有时,:attr:`~Pickler.dispatch_table` 可能不够灵活。 " +"特别是当我们想要基于对象类型以外的其他规则来对封存进行定制,或是当我们想要对函数和类的封存进行定制的时候。" + +#: ../../library/pickle.rst:876 +msgid "" +"For those cases, it is possible to subclass from the :class:`Pickler` class " +"and implement a :meth:`~Pickler.reducer_override` method. This method can " +"return an arbitrary reduction tuple (see :meth:`__reduce__`). It can " +"alternatively return ``NotImplemented`` to fallback to the traditional " +"behavior." +msgstr "" +"对于那些情况,可能要基于 :class:`Pickler` 类进行子类化并实现 :meth:`~Pickler.reducer_override` " +"方法。 此方法可返回任意的归约元组 (参见 :meth:`__reduce__`)。 它也可以选择返回 ``NotImplemented`` " +"来回退到传统行为。" + +#: ../../library/pickle.rst:881 +msgid "" +"If both the :attr:`~Pickler.dispatch_table` and " +":meth:`~Pickler.reducer_override` are defined, then " +":meth:`~Pickler.reducer_override` method takes priority." +msgstr "" +"如果同时定义了 :attr:`~Pickler.dispatch_table` 和 " +":meth:`~Pickler.reducer_override`,则 :meth:`~Pickler.reducer_override` " +"方法具有优先权。" + +#: ../../library/pickle.rst:886 +msgid "" +"For performance reasons, :meth:`~Pickler.reducer_override` may not be called" +" for the following objects: ``None``, ``True``, ``False``, and exact " +"instances of :class:`int`, :class:`float`, :class:`bytes`, :class:`str`, " +":class:`dict`, :class:`set`, :class:`frozenset`, :class:`list` and " +":class:`tuple`." +msgstr "" +"出于性能理由,可能不会为以下对象调用 :meth:`~Pickler.reducer_override`: ``None``, ``True``, " +"``False``, 以及 :class:`int`, :class:`float`, :class:`bytes`, :class:`str`, " +":class:`dict`, :class:`set`, :class:`frozenset`, :class:`list` 和 " +":class:`tuple` 的具体实例。" + +#: ../../library/pickle.rst:892 +msgid "" +"Here is a simple example where we allow pickling and reconstructing a given " +"class::" +msgstr "以下是一个简单的例子,其中我们允许封存并重新构建一个给定的类::" + +#: ../../library/pickle.rst:927 +msgid "Out-of-band Buffers" +msgstr "外部缓冲区" + +#: ../../library/pickle.rst:931 +msgid "" +"In some contexts, the :mod:`pickle` module is used to transfer massive " +"amounts of data. Therefore, it can be important to minimize the number of " +"memory copies, to preserve performance and resource consumption. However, " +"normal operation of the :mod:`pickle` module, as it transforms a graph-like " +"structure of objects into a sequential stream of bytes, intrinsically " +"involves copying data to and from the pickle stream." +msgstr "" +"在某些场景中,:mod:`pickle` 模块会被用来传输海量的数据。 因此,最小化内存复制次数以保证性能和节省资源是很重要的。 但是 " +":mod:`pickle` 模块的正常运作会将图类对象结构转换为字节序列流,因此在本质上就要从封存流中来回复制数据。" + +#: ../../library/pickle.rst:938 +msgid "" +"This constraint can be eschewed if both the *provider* (the implementation " +"of the object types to be transferred) and the *consumer* (the " +"implementation of the communications system) support the out-of-band " +"transfer facilities provided by pickle protocol 5 and higher." +msgstr "" +"如果 *provider* (待传输对象类型的实现) 和 *consumer* (通信系统的实现) 都支持 pickle 第 5 " +"版或更高版本所提供的外部传输功能,则此约束可以被撤销。" + +#: ../../library/pickle.rst:944 +msgid "Provider API" +msgstr "提供方 API" + +#: ../../library/pickle.rst:946 +msgid "" +"The large data objects to be pickled must implement a :meth:`__reduce_ex__` " +"method specialized for protocol 5 and higher, which returns a " +":class:`PickleBuffer` instance (instead of e.g. a :class:`bytes` object) for" +" any large data." +msgstr "" +"大的待封存数据对象必须实现协议 5 及以上版本专属的 :meth:`__reduce_ex__` 方法,该方法将为任意大的数据返回一个 " +":class:`PickleBuffer` 实例(而不是 :class:`bytes` 对象等)。" + +#: ../../library/pickle.rst:951 +msgid "" +"A :class:`PickleBuffer` object *signals* that the underlying buffer is " +"eligible for out-of-band data transfer. Those objects remain compatible " +"with normal usage of the :mod:`pickle` module. However, consumers can also " +"opt-in to tell :mod:`pickle` that they will handle those buffers by " +"themselves." +msgstr "" +":class:`PickleBuffer` 对象会 *表明* 底层缓冲区可被用于外部数据传输。 那些对象仍将保持与 :mod:`pickle` " +"模块的正常用法兼容。 但是,使用方也可以选择告知 :mod:`pickle` 它们将自行处理那些缓冲区。" + +#: ../../library/pickle.rst:958 +msgid "Consumer API" +msgstr "使用方 API" + +#: ../../library/pickle.rst:960 +msgid "" +"A communications system can enable custom handling of the " +":class:`PickleBuffer` objects generated when serializing an object graph." +msgstr "当序列化一个对象图时,通信系统可以启用对所生成 :class:`PickleBuffer` 对象的定制处理。" + +#: ../../library/pickle.rst:963 +msgid "" +"On the sending side, it needs to pass a *buffer_callback* argument to " +":class:`Pickler` (or to the :func:`dump` or :func:`dumps` function), which " +"will be called with each :class:`PickleBuffer` generated while pickling the " +"object graph. Buffers accumulated by the *buffer_callback* will not see " +"their data copied into the pickle stream, only a cheap marker will be " +"inserted." +msgstr "" +"发送端需要传递 *buffer_callback* 参数到 :class:`Pickler` (或是到 :func:`dump` 或 " +":func:`dumps` 函数),该回调函数将在封存对象图时附带每个所生成的 :class:`PickleBuffer` 被调用。 由 " +"*buffer_callback* 所累积的缓冲区的数据将不会被拷贝到 pickle 流,而是仅插入一个简单的标记。" + +#: ../../library/pickle.rst:970 +msgid "" +"On the receiving side, it needs to pass a *buffers* argument to " +":class:`Unpickler` (or to the :func:`load` or :func:`loads` function), which" +" is an iterable of the buffers which were passed to *buffer_callback*. That " +"iterable should produce buffers in the same order as they were passed to " +"*buffer_callback*. Those buffers will provide the data expected by the " +"reconstructors of the objects whose pickling produced the original " +":class:`PickleBuffer` objects." +msgstr "" +"接收端需要传递 *buffers* 参数到 :class:`Unpickler` (或是到 :func:`load` 或 :func:`loads` " +"函数),其值是一个由缓冲区组成的可迭代对象,它会被传递给 *buffer_callback*。 该可迭代对象应当按其被传递给 " +"*buffer_callback* 时的顺序产生缓冲区。 这些缓冲区将提供对象重构造器所期望的数据,对这些数据的封存产生了原本的 " +":class:`PickleBuffer` 对象。" + +#: ../../library/pickle.rst:978 +msgid "" +"Between the sending side and the receiving side, the communications system " +"is free to implement its own transfer mechanism for out-of-band buffers. " +"Potential optimizations include the use of shared memory or datatype-" +"dependent compression." +msgstr "在发送端和接受端之间,通信系统可以自由地实现它自己用于外部缓冲区的传输机制。 潜在的优化包括使用共享内存或基于特定数据类型的压缩等。" + +#: ../../library/pickle.rst:984 +msgid "Example" +msgstr "示例" + +#: ../../library/pickle.rst:986 +msgid "" +"Here is a trivial example where we implement a :class:`bytearray` subclass " +"able to participate in out-of-band buffer pickling::" +msgstr "下面是一个小例子,在其中我们实现了一个 :class:`bytearray` 的子类,能够用于外部缓冲区封存::" + +#: ../../library/pickle.rst:1010 +msgid "" +"The reconstructor (the ``_reconstruct`` class method) returns the buffer's " +"providing object if it has the right type. This is an easy way to simulate " +"zero-copy behaviour on this toy example." +msgstr "" +"重构造器 (``_reconstruct`` 类方法) 会在缓冲区的提供对象具有正确类型时返回该对象。 在此小示例中这是模拟零拷贝行为的便捷方式。" + +#: ../../library/pickle.rst:1014 +msgid "" +"On the consumer side, we can pickle those objects the usual way, which when " +"unserialized will give us a copy of the original object::" +msgstr "在使用方,我们可以按通常方式封存那些对象,它们在反序列化时将提供原始对象的一个副本::" + +#: ../../library/pickle.rst:1023 +msgid "" +"But if we pass a *buffer_callback* and then give back the accumulated " +"buffers when unserializing, we are able to get back the original object::" +msgstr "但是如果我们传入 *buffer_callback* 然后在反序列化时给回累积的缓冲区,我们就能够取回原始对象::" + +#: ../../library/pickle.rst:1033 +msgid "" +"This example is limited by the fact that :class:`bytearray` allocates its " +"own memory: you cannot create a :class:`bytearray` instance that is backed " +"by another object's memory. However, third-party datatypes such as NumPy " +"arrays do not have this limitation, and allow use of zero-copy pickling (or " +"making as few copies as possible) when transferring between distinct " +"processes or systems." +msgstr "" +"这个例子受限于 :class:`bytearray` 会自行分配内存这一事实:你无法基于另一个对象的内存创建 :class:`bytearray` " +"的实例。 但是,第三方数据类型例如 NumPy 数组则没有这种限制,允许在单独进程或系统间传输时使用零拷贝的封存(或是尽可能少地拷贝) 。" + +#: ../../library/pickle.rst:1040 +msgid ":pep:`574` -- Pickle protocol 5 with out-of-band data" +msgstr ":pep:`574` -- 带有外部数据缓冲区的 pickle 协议 5" + +#: ../../library/pickle.rst:1046 +msgid "Restricting Globals" +msgstr "限制全局变量" + +#: ../../library/pickle.rst:1051 +msgid "" +"By default, unpickling will import any class or function that it finds in " +"the pickle data. For many applications, this behaviour is unacceptable as " +"it permits the unpickler to import and invoke arbitrary code. Just consider" +" what this hand-crafted pickle data stream does when loaded::" +msgstr "" +"默认情况下,解封将会导入在 pickle 数据中找到的任何类或函数。 对于许多应用来说,此行为是不可接受的,因为它会允许解封器导入并唤起任意代码。 " +"只须考虑当这个手工构建的 pickle 数据流被加载时会做什么::" + +#: ../../library/pickle.rst:1061 +msgid "" +"In this example, the unpickler imports the :func:`os.system` function and " +"then apply the string argument \"echo hello world\". Although this example " +"is inoffensive, it is not difficult to imagine one that could damage your " +"system." +msgstr "" +"在这个例子里,解封器导入 :func:`os.system` 函数然后应用字符串参数 \"echo hello world\"。 " +"虽然这个例子不具攻击性,但是不难想象别人能够通过此方式对你的系统造成损害。" + +#: ../../library/pickle.rst:1065 +msgid "" +"For this reason, you may want to control what gets unpickled by customizing " +":meth:`Unpickler.find_class`. Unlike its name suggests, " +":meth:`Unpickler.find_class` is called whenever a global (i.e., a class or a" +" function) is requested. Thus it is possible to either completely forbid " +"globals or restrict them to a safe subset." +msgstr "" +"出于这样的理由,你可能会希望通过定制 :meth:`Unpickler.find_class` 来控制要解封的对象。 " +"与其名称所提示的不同,:meth:`Unpickler.find_class` 会在执行对任何全局对象(例如一个类或一个函数)的请求时被调用。 " +"因此可以完全禁止全局对象或是将它们限制在一个安全的子集中。" + +#: ../../library/pickle.rst:1071 +msgid "" +"Here is an example of an unpickler allowing only few safe classes from the " +":mod:`builtins` module to be loaded::" +msgstr "下面的例子是一个解封器,它只允许某一些安全的来自 :mod:`builtins` 模块的类被加载::" + +#: ../../library/pickle.rst:1100 +msgid "A sample usage of our unpickler working as intended::" +msgstr "我们这个解封器完成其功能的一个示例用法::" + +#: ../../library/pickle.rst:1119 +msgid "" +"As our examples shows, you have to be careful with what you allow to be " +"unpickled. Therefore if security is a concern, you may want to consider " +"alternatives such as the marshalling API in :mod:`xmlrpc.client` or third-" +"party solutions." +msgstr "" +"正如我们这个例子所显示的,对于允许解封的对象你必须要保持谨慎。 因此如果要保证安全,你可以考虑其他选择例如 :mod:`xmlrpc.client` " +"中的编组 API 或是第三方解决方案。" + +#: ../../library/pickle.rst:1126 +msgid "Performance" +msgstr "性能" + +#: ../../library/pickle.rst:1128 +msgid "" +"Recent versions of the pickle protocol (from protocol 2 and upwards) feature" +" efficient binary encodings for several common features and built-in types. " +"Also, the :mod:`pickle` module has a transparent optimizer written in C." +msgstr "" +"较新版本的 pickle 协议(第 2 版或更高)具有针对某些常见特性和内置类型的高效二进制编码格式。 此外,:mod:`pickle` " +"模块还拥有一个以 C 编写的透明优化器。" + +#: ../../library/pickle.rst:1136 +msgid "Examples" +msgstr "例子" + +#: ../../library/pickle.rst:1138 +msgid "" +"For the simplest code, use the :func:`dump` and :func:`load` functions. ::" +msgstr "对于最简单的代码,请使用 :func:`dump` 和 :func:`load` 函数。 ::" + +#: ../../library/pickle.rst:1154 +msgid "The following example reads the resulting pickled data. ::" +msgstr "以下示例读取之前封存的数据。 ::" + +#: ../../library/pickle.rst:1171 +msgid "Module :mod:`copyreg`" +msgstr "模块 :mod:`copyreg`" + +#: ../../library/pickle.rst:1171 +msgid "Pickle interface constructor registration for extension types." +msgstr "为扩展类型提供 pickle 接口所需的构造函数。" + +#: ../../library/pickle.rst:1174 +msgid "Module :mod:`pickletools`" +msgstr "模块 :mod:`pickletools`" + +#: ../../library/pickle.rst:1174 +msgid "Tools for working with and analyzing pickled data." +msgstr "用于处理和分析已封存数据的工具。" + +#: ../../library/pickle.rst:1177 +msgid "Module :mod:`shelve`" +msgstr "模块 :mod:`shelve`" + +#: ../../library/pickle.rst:1177 +msgid "Indexed databases of objects; uses :mod:`pickle`." +msgstr "带索引的数据库,用于存放对象,使用了 :mod:`pickle` 模块。" + +#: ../../library/pickle.rst:1180 +msgid "Module :mod:`copy`" +msgstr "模块 :mod:`copy`" + +#: ../../library/pickle.rst:1180 +msgid "Shallow and deep object copying." +msgstr "浅层 (shallow) 和深层 (deep) 复制对象操作" + +#: ../../library/pickle.rst:1182 +msgid "Module :mod:`marshal`" +msgstr "模块 :mod:`marshal`" + +#: ../../library/pickle.rst:1183 +msgid "High-performance serialization of built-in types." +msgstr "高效地序列化内置类型的数据。" + +#: ../../library/pickle.rst:1187 +msgid "Footnotes" +msgstr "备注" + +#: ../../library/pickle.rst:1188 +msgid "Don't confuse this with the :mod:`marshal` module" +msgstr "不要把它与 :mod:`marshal` 模块混淆。" + +#: ../../library/pickle.rst:1190 +msgid "" +"This is why :keyword:`lambda` functions cannot be pickled: all " +":keyword:`!lambda` functions share the same name: ````." +msgstr "这就是为什么 :keyword:`lambda` 函数不可以被封存:所有的匿名函数都有同一个名字:````。" + +#: ../../library/pickle.rst:1193 +msgid "" +"The exception raised will likely be an :exc:`ImportError` or an " +":exc:`AttributeError` but it could be something else." +msgstr "抛出的异常有可能是 :exc:`ImportError` 或 :exc:`AttributeError`,也可能是其他异常。" + +#: ../../library/pickle.rst:1196 +msgid "" +"The :mod:`copy` module uses this protocol for shallow and deep copying " +"operations." +msgstr ":mod:`copy` 模块使用这一协议实现浅层 (shallow) 和深层 (deep) 复制操作。" + +#: ../../library/pickle.rst:1199 +msgid "" +"The limitation on alphanumeric characters is due to the fact that persistent" +" IDs in protocol 0 are delimited by the newline character. Therefore if any" +" kind of newline characters occurs in persistent IDs, the resulting pickled " +"data will become unreadable." +msgstr "" +"对于字符数字类字符的限制是由于持久化 ID 在协议版本 0 中是由分行符来分隔的。 因此如果持久化 ID " +"中出现了任何形式的分行符,封存结果就将变得无法读取。" diff --git a/library/pickletools.po b/library/pickletools.po new file mode 100644 index 000000000..d6348538c --- /dev/null +++ b/library/pickletools.po @@ -0,0 +1,140 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) 2001-2025, Python Software Foundation +# This file is distributed under the same license as the Python package. +# FIRST AUTHOR , YEAR. +# +# Translators: +# ppcfish , 2019 +# Freesand Leo , 2020 +# Rafael Fontenelle , 2025 +# +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: Python 3.9\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2025-03-07 16:50+0000\n" +"PO-Revision-Date: 2017-02-16 23:22+0000\n" +"Last-Translator: Rafael Fontenelle , 2025\n" +"Language-Team: Chinese (China) (https://app.transifex.com/python-doc/teams/5390/zh_CN/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: zh_CN\n" +"Plural-Forms: nplurals=1; plural=0;\n" + +#: ../../library/pickletools.rst:2 +msgid ":mod:`pickletools` --- Tools for pickle developers" +msgstr ":mod:`pickletools` --- pickle 开发者工具集" + +#: ../../library/pickletools.rst:8 +msgid "**Source code:** :source:`Lib/pickletools.py`" +msgstr "**源代码:** :source:`Lib/pickletools.py`" + +#: ../../library/pickletools.rst:13 +msgid "" +"This module contains various constants relating to the intimate details of " +"the :mod:`pickle` module, some lengthy comments about the implementation, " +"and a few useful functions for analyzing pickled data. The contents of this" +" module are useful for Python core developers who are working on the " +":mod:`pickle`; ordinary users of the :mod:`pickle` module probably won't " +"find the :mod:`pickletools` module relevant." +msgstr "" +"此模块包含与 :mod:`pickle` 模块内部细节有关的多个常量,一些关于具体实现的详细注释,以及一些能够分析封存数据的有用函数。 " +"此模块的内容对需要操作 :mod:`pickle` 的 Python 核心开发者来说很有用处;:mod:`pickle` 的一般用户则可能会感觉 " +":mod:`pickletools` 模块与他们无关。" + +#: ../../library/pickletools.rst:21 +msgid "Command line usage" +msgstr "命令行语法" + +#: ../../library/pickletools.rst:25 +msgid "" +"When invoked from the command line, ``python -m pickletools`` will " +"disassemble the contents of one or more pickle files. Note that if you want" +" to see the Python object stored in the pickle rather than the details of " +"pickle format, you may want to use ``-m pickle`` instead. However, when the " +"pickle file that you want to examine comes from an untrusted source, ``-m " +"pickletools`` is a safer option because it does not execute pickle bytecode." +msgstr "" +"当从命令行唤起时,``python -m pickletools`` 将对一个或更多 pickle 文件的内容进行拆解。 请注意如果你查看 pickle" +" 中保存的 Python 对象而非 pickle 格式的细节,你可能需要改用 ``-m pickle``。 但是,当你想检查的 pickle " +"文件来自某个不受信任的源时,``-m pickletools`` 是更安全的选择,因为它不会执行 pickle 字节码。" + +#: ../../library/pickletools.rst:33 +msgid "For example, with a tuple ``(1, 2)`` pickled in file ``x.pickle``:" +msgstr "例如,对于一个封存在文件 ``x.pickle`` 中的元组 ``(1, 2)``:" + +#: ../../library/pickletools.rst:50 +msgid "Command line options" +msgstr "命令行选项" + +#: ../../library/pickletools.rst:56 +msgid "Annotate each line with a short opcode description." +msgstr "使用简短的操作码描述来标注每一行。" + +#: ../../library/pickletools.rst:60 +msgid "Name of a file where the output should be written." +msgstr "输出应当写入到的文件名称。" + +#: ../../library/pickletools.rst:64 +msgid "The number of blanks by which to indent a new MARK level." +msgstr "一个新的 MARK 层级所需缩进的空格数。" + +#: ../../library/pickletools.rst:68 +msgid "" +"When multiple objects are disassembled, preserve memo between disassemblies." +msgstr "当反汇编多个对象时,保留各个反汇编的备忘记录。" + +#: ../../library/pickletools.rst:73 +msgid "" +"When more than one pickle file are specified, print given preamble before " +"each disassembly." +msgstr "当指定一个以上的 pickle 文件时,在每次反汇编之前打印给定的前言。" + +#: ../../library/pickletools.rst:79 +msgid "Programmatic Interface" +msgstr "编程接口" + +#: ../../library/pickletools.rst:84 +msgid "" +"Outputs a symbolic disassembly of the pickle to the file-like object *out*, " +"defaulting to ``sys.stdout``. *pickle* can be a string or a file-like " +"object. *memo* can be a Python dictionary that will be used as the pickle's" +" memo; it can be used to perform disassemblies across multiple pickles " +"created by the same pickler. Successive levels, indicated by ``MARK`` " +"opcodes in the stream, are indented by *indentlevel* spaces. If a nonzero " +"value is given to *annotate*, each opcode in the output is annotated with a " +"short description. The value of *annotate* is used as a hint for the column" +" where annotation should start." +msgstr "" +"将 pickle 的符号化反汇编数据输出到文件型对象 *out*,默认为 ``sys.stdout``。 *pickle* " +"可以是一个字符串或一个文件型对象。 *memo* 可以是一个将被用作 pickle 的备忘记录的 Python " +"字典;它可被用来对由同一封存器创建的多个封存对象执行反汇编。 由 ``MARK`` 操作码指明的每个连续级别将会缩进 *indentlevel* " +"个空格。 如果为 *annotate* 指定了一个非零值,则输出中的每个操作码将以一个简短描述来标注。 *annotate* " +"的值会被用作标注所应开始的列的提示。" + +#: ../../library/pickletools.rst:95 +msgid "The *annotate* argument." +msgstr "*annotate* 参数。" + +#: ../../library/pickletools.rst:100 +msgid "" +"Provides an :term:`iterator` over all of the opcodes in a pickle, returning " +"a sequence of ``(opcode, arg, pos)`` triples. *opcode* is an instance of an" +" :class:`OpcodeInfo` class; *arg* is the decoded value, as a Python object, " +"of the opcode's argument; *pos* is the position at which this opcode is " +"located. *pickle* can be a string or a file-like object." +msgstr "" +"提供包含 pickle 中所有操作码的 :term:`iterator`,返回一个 ``(opcode, arg, pos)`` 三元组的序列。 " +"*opcode* 是 :class:`OpcodeInfo` 类的一个实例;*arg* 是 Python 对象形式的 opcode " +"参数的已解码值;*pos* 是 opcode 所在的位置。 *pickle* 可以是一个字符串或一个文件型对象。" + +#: ../../library/pickletools.rst:108 +msgid "" +"Returns a new equivalent pickle string after eliminating unused ``PUT`` " +"opcodes. The optimized pickle is shorter, takes less transmission time, " +"requires less storage space, and unpickles more efficiently." +msgstr "" +"在消除未使用的 ``PUT`` 操作码之后返回一个新的等效 pickle 字符串。 优化后的 pickle " +"将更为简短,耗费更少的传输时间,要求更少的存储空间并能更高效地解封。" diff --git a/library/pipes.po b/library/pipes.po new file mode 100644 index 000000000..4280252a7 --- /dev/null +++ b/library/pipes.po @@ -0,0 +1,133 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) 2001-2024, Python Software Foundation +# This file is distributed under the same license as the Python package. +# FIRST AUTHOR , YEAR. +# +# Translators: +# nick <2330458484@qq.com>, 2019 +# Freesand Leo , 2022 +# Rafael Fontenelle , 2024 +# +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: Python 3.9\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2024-02-16 21:12+0000\n" +"PO-Revision-Date: 2017-02-16 23:22+0000\n" +"Last-Translator: Rafael Fontenelle , 2024\n" +"Language-Team: Chinese (China) (https://app.transifex.com/python-doc/teams/5390/zh_CN/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: zh_CN\n" +"Plural-Forms: nplurals=1; plural=0;\n" + +#: ../../library/pipes.rst:2 +msgid ":mod:`pipes` --- Interface to shell pipelines" +msgstr ":mod:`pipes` --- 终端管道接口" + +#: ../../library/pipes.rst:11 +msgid "**Source code:** :source:`Lib/pipes.py`" +msgstr "**源代码:** :source:`Lib/pipes.py`" + +#: ../../library/pipes.rst:13 +msgid "" +"The :mod:`pipes` module is deprecated (see :pep:`PEP 594 <594#pipes>` for " +"details). Please use the :mod:`subprocess` module instead." +msgstr "" +":mod:`pipes` 模块已被弃用(请参阅 :pep:`PEP 594 <594#pipes>` 了解详情)。 请改用 " +":mod:`subprocess` 模块。" + +#: ../../library/pipes.rst:20 +msgid "" +"The :mod:`pipes` module defines a class to abstract the concept of a " +"*pipeline* --- a sequence of converters from one file to another." +msgstr ":mod:`pipes` 定义了一个类用来抽象 *pipeline* 的概念 --- 将数据从一个文件转到另一文件的转换器序列。" + +#: ../../library/pipes.rst:23 +msgid "" +"Because the module uses :program:`/bin/sh` command lines, a POSIX or " +"compatible shell for :func:`os.system` and :func:`os.popen` is required." +msgstr "" +"由于模块使用了 :program:`/bin/sh` 命令行,因此要求有 POSIX 或兼容 :func:`os.system` 和 " +":func:`os.popen` 的终端程序。" + +#: ../../library/pipes.rst:26 +msgid "The :mod:`pipes` module defines the following class:" +msgstr ":mod:`pipes` 模块定义了以下的类:" + +#: ../../library/pipes.rst:31 +msgid "An abstraction of a pipeline." +msgstr "对管道的抽象。" + +#: ../../library/pipes.rst:33 +msgid "Example::" +msgstr "示例::" + +#: ../../library/pipes.rst:48 +msgid "Template Objects" +msgstr "模板对象" + +#: ../../library/pipes.rst:50 +msgid "Template objects following methods:" +msgstr "模板对象有以下方法:" + +#: ../../library/pipes.rst:55 +msgid "Restore a pipeline template to its initial state." +msgstr "将一个管道模板恢复为初始状态。" + +#: ../../library/pipes.rst:60 +msgid "Return a new, equivalent, pipeline template." +msgstr "返回一个新的等价的管道模板。" + +#: ../../library/pipes.rst:65 +msgid "" +"If *flag* is true, turn debugging on. Otherwise, turn debugging off. When " +"debugging is on, commands to be executed are printed, and the shell is given" +" ``set -x`` command to be more verbose." +msgstr "" +"如果 *flag* 为真值,则启用调试。 否则禁用调试。 当启用调试时,要执行的命令会被打印出来,并且会给予终端 ``set -x`` " +"命令以输出更详细的信息。" + +#: ../../library/pipes.rst:72 +msgid "" +"Append a new action at the end. The *cmd* variable must be a valid bourne " +"shell command. The *kind* variable consists of two letters." +msgstr "在末尾添加一个新的动作。 *cmd* 变量必须为一个有效的 bourne 终端命令。 *kind* 变量由两个字母组成。" + +#: ../../library/pipes.rst:75 +msgid "" +"The first letter can be either of ``'-'`` (which means the command reads its" +" standard input), ``'f'`` (which means the commands reads a given file on " +"the command line) or ``'.'`` (which means the commands reads no input, and " +"hence must be first.)" +msgstr "" +"第一个字母可以为 ``'-'`` (这表示命令将读取其标准输入), ``'f'`` (这表示命令将读取在命令行中给定的文件) 或 ``'.'`` " +"(这表示命令将不读取输入,因而必须放在前面。)" + +#: ../../library/pipes.rst:80 +msgid "" +"Similarly, the second letter can be either of ``'-'`` (which means the " +"command writes to standard output), ``'f'`` (which means the command writes" +" a file on the command line) or ``'.'`` (which means the command does not " +"write anything, and hence must be last.)" +msgstr "" +"类似地,第二个字母可以为 ``'-'`` (这表示命令将写入到标准输出), ``'f'`` (这表示命令将写入在命令行中给定的文件) 或 ``'.'``" +" (这表示命令将不执行写入,因而必须放在末尾。)" + +#: ../../library/pipes.rst:88 +msgid "" +"Add a new action at the beginning. See :meth:`append` for explanations of " +"the arguments." +msgstr "在开头添加一个新的动作。 请参阅 :meth:`append` 获取相应参数的说明。" + +#: ../../library/pipes.rst:94 +msgid "" +"Return a file-like object, open to *file*, but read from or written to by " +"the pipeline. Note that only one of ``'r'``, ``'w'`` may be given." +msgstr "返回一个文件型对象,打开到 *file*,但是将从管道读取或写入。 请注意只能给出 ``'r'``, ``'w'`` 中的一个。" + +#: ../../library/pipes.rst:100 +msgid "Copy *infile* to *outfile* through the pipe." +msgstr "通过管道将 *infile* 拷贝到 *outfile*。" diff --git a/library/pkgutil.po b/library/pkgutil.po new file mode 100644 index 000000000..68e8b1128 --- /dev/null +++ b/library/pkgutil.po @@ -0,0 +1,378 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) 2001-2025, Python Software Foundation +# This file is distributed under the same license as the Python package. +# FIRST AUTHOR , YEAR. +# +# Translators: +# laazy , 2020 +# Freesand Leo , 2022 +# Rafael Fontenelle , 2025 +# +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: Python 3.9\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2025-02-07 16:40+0000\n" +"PO-Revision-Date: 2017-02-16 23:22+0000\n" +"Last-Translator: Rafael Fontenelle , 2025\n" +"Language-Team: Chinese (China) (https://app.transifex.com/python-doc/teams/5390/zh_CN/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: zh_CN\n" +"Plural-Forms: nplurals=1; plural=0;\n" + +#: ../../library/pkgutil.rst:2 +msgid ":mod:`pkgutil` --- Package extension utility" +msgstr ":mod:`pkgutil` --- 包扩展工具" + +#: ../../library/pkgutil.rst:7 +msgid "**Source code:** :source:`Lib/pkgutil.py`" +msgstr "**源代码:** :source:`Lib/pkgutil.py`" + +#: ../../library/pkgutil.rst:11 +msgid "" +"This module provides utilities for the import system, in particular package " +"support." +msgstr "该模块为导入系统提供了工具,尤其是在包支持方面。" + +#: ../../library/pkgutil.rst:16 +msgid "A namedtuple that holds a brief summary of a module's info." +msgstr "一个包含模块信息的简短摘要的命名元组。" + +#: ../../library/pkgutil.rst:22 +msgid "" +"Extend the search path for the modules which comprise a package. Intended " +"use is to place the following code in a package's :file:`__init__.py`::" +msgstr "扩展组成包的模块的搜索路径。 预期用途是将以下代码放到包的 :file:`__init__.py` 中::" + +#: ../../library/pkgutil.rst:28 +msgid "" +"This will add to the package's ``__path__`` all subdirectories of " +"directories on :data:`sys.path` named after the package. This is useful if " +"one wants to distribute different parts of a single logical package as " +"multiple directories." +msgstr "" +"这将添加到包的 ``__path__`` 所有在 :data:`sys.path` 上以该包命名的目录的子目录。 " +"这在想把一个逻辑包的不同部分作为多个目录来分发时很有用处。" + +#: ../../library/pkgutil.rst:33 +msgid "" +"It also looks for :file:`\\*.pkg` files beginning where ``*`` matches the " +"*name* argument. This feature is similar to :file:`\\*.pth` files (see the " +":mod:`site` module for more information), except that it doesn't special-" +"case lines starting with ``import``. A :file:`\\*.pkg` file is trusted at " +"face value: apart from checking for duplicates, all entries found in a " +":file:`\\*.pkg` file are added to the path, regardless of whether they exist" +" on the filesystem. (This is a feature.)" +msgstr "" +"它还会查找开头部分 ``*`` 与 *name* 参数相匹配的 :file:`\\*.pkg` 文件。 此特性与 :file:`\\*.pth` " +"文件类似(请参阅 :mod:`site` 模块了解更多信息),区别在于它不会对以 ``import`` 开头的行做特别对待。 将按外在值对 " +":file:`\\*.pkg` 文件添加信任:除了检查重复项,,所有在 :file:`\\*.pkg` " +"文件中找到的条目都会被添加到路径中,不管它们是否存在于文件系统中。 (这是特性而非缺陷。)" + +#: ../../library/pkgutil.rst:41 +msgid "" +"If the input path is not a list (as is the case for frozen packages) it is " +"returned unchanged. The input path is not modified; an extended copy is " +"returned. Items are only appended to the copy at the end." +msgstr "如果输入路径不是一个列表(已冻结包就是这种情况)则它将被原样返回。 输入路径不会被修改;将返回一个扩展的副本。 条目将被添加到副本的末尾。" + +#: ../../library/pkgutil.rst:45 +msgid "" +"It is assumed that :data:`sys.path` is a sequence. Items of " +":data:`sys.path` that are not strings referring to existing directories are " +"ignored. Unicode items on :data:`sys.path` that cause errors when used as " +"filenames may cause this function to raise an exception (in line with " +":func:`os.path.isdir` behavior)." +msgstr "" +":data:`sys.path` 会被假定为一个序列。 :data:`sys.path` 中的条目如果不是指向现有目录的字符串则会被忽略。 " +":data:`sys.path` 上当用作文件名时会导致错误的 Unicode 条目可以会使得此函数引发异常(与 " +":func:`os.path.isdir` 的行为一致)。" + +#: ../../library/pkgutil.rst:54 +msgid ":pep:`302` Finder that wraps Python's \"classic\" import algorithm." +msgstr "包装了 Python 的 \"经典\" 导入算法的 :pep:`302` 查找器" + +#: ../../library/pkgutil.rst:56 +msgid "" +"If *dirname* is a string, a :pep:`302` finder is created that searches that " +"directory. If *dirname* is ``None``, a :pep:`302` finder is created that " +"searches the current :data:`sys.path`, plus any modules that are frozen or " +"built-in." +msgstr "" +"如果 *dirname* 是一个字符串,将创建一个 :pep:`302` 查找器来搜索该目录。 如果 *dirname* 为 " +"``None``,则将创建一个 :pep:`302` 来搜索当前 :data:`sys.path`,加上任何已冻结或内置的模块。" + +#: ../../library/pkgutil.rst:61 +msgid "" +"Note that :class:`ImpImporter` does not currently support being used by " +"placement on :data:`sys.meta_path`." +msgstr "请注意 :class:`ImpImporter` 目前并不支持放置在 :data:`sys.meta_path` 上使用。" + +#: ../../library/pkgutil.rst:64 ../../library/pkgutil.rst:73 +msgid "" +"This emulation is no longer needed, as the standard import mechanism is now " +"fully :pep:`302` compliant and available in :mod:`importlib`." +msgstr "这种模拟已不再必要,因为标准的导入机制现在完全兼容 :pep:`302` 并且在 :mod:`importlib` 中可用。" + +#: ../../library/pkgutil.rst:71 +msgid ":term:`Loader ` that wraps Python's \"classic\" import algorithm." +msgstr "包装了 Python 的 \"经典\" 导入算法的 :term:`加载器 `。" + +#: ../../library/pkgutil.rst:80 +msgid "Retrieve a module :term:`loader` for the given *fullname*." +msgstr "为给定的 *fullname* 获取一个模块 :term:`loader`。" + +#: ../../library/pkgutil.rst:82 +msgid "" +"This is a backwards compatibility wrapper around " +":func:`importlib.util.find_spec` that converts most failures to " +":exc:`ImportError` and only returns the loader rather than the full " +":class:`ModuleSpec`." +msgstr "" +"这是针对 :func:`importlib.util.find_spec` 的向下兼容包装器,它将大多数失败转换为 :exc:`ImportError`" +" 并且只返回加载器而不是完整的 :class:`ModuleSpec`。" + +#: ../../library/pkgutil.rst:87 ../../library/pkgutil.rst:104 +#: ../../library/pkgutil.rst:119 ../../library/pkgutil.rst:140 +#: ../../library/pkgutil.rst:161 ../../library/pkgutil.rst:200 +msgid "" +"Updated to be based directly on :mod:`importlib` rather than relying on the " +"package internal :pep:`302` import emulation." +msgstr "更新为直接基于 :mod:`importlib` 而不是依赖于包内部的 :pep:`302` 导入模拟。" + +#: ../../library/pkgutil.rst:91 ../../library/pkgutil.rst:123 +msgid "Updated to be based on :pep:`451`" +msgstr "更新为基于 :pep:`451`" + +#: ../../library/pkgutil.rst:96 +msgid "Retrieve a :term:`finder` for the given *path_item*." +msgstr "为给定的 *path_item* 获取一个 :term:`finder`。" + +#: ../../library/pkgutil.rst:98 +msgid "" +"The returned finder is cached in :data:`sys.path_importer_cache` if it was " +"newly created by a path hook." +msgstr "返回的查找器如果是由一个路径钩子新建的则会被缓存至 :data:`sys.path_importer_cache`。" + +#: ../../library/pkgutil.rst:101 +msgid "" +"The cache (or part of it) can be cleared manually if a rescan of " +":data:`sys.path_hooks` is necessary." +msgstr "如果需要重新扫描 :data:`sys.path_hooks` 则缓存(或其一部分)可以被手动清空。" + +#: ../../library/pkgutil.rst:111 +msgid "Get a :term:`loader` object for *module_or_name*." +msgstr "为 *module_or_name* 获取一个 :term:`loader`。" + +#: ../../library/pkgutil.rst:113 +msgid "" +"If the module or package is accessible via the normal import mechanism, a " +"wrapper around the relevant part of that machinery is returned. Returns " +"``None`` if the module cannot be found or imported. If the named module is " +"not already imported, its containing package (if any) is imported, in order " +"to establish the package ``__path__``." +msgstr "" +"如果模块或包可通过正常导入机制来访问,则会返回该机制相关部分的包装器。 如果模块无法找到或导入则返回 ``None``。 " +"如果指定的模块尚未被导入,则包含它的包(如果存在)会被导入,以便建立包 ``__path__``。" + +#: ../../library/pkgutil.rst:129 +msgid "Yield :term:`finder` objects for the given module name." +msgstr "为给定的模块名称产生 :term:`finder` 对象。" + +#: ../../library/pkgutil.rst:131 +msgid "" +"If fullname contains a ``'.'``, the finders will be for the package " +"containing fullname, otherwise they will be all registered top level finders" +" (i.e. those on both :data:`sys.meta_path` and :data:`sys.path_hooks`)." +msgstr "" +"如果完整名称包含一个 ``'.'``,查找器将针对包含该完整名称的包,否则它们将被注册为最高层级查找器(即同时用于 " +":data:`sys.meta_path` 和 :data:`sys.path_hooks`)。" + +#: ../../library/pkgutil.rst:135 +msgid "" +"If the named module is in a package, that package is imported as a side " +"effect of invoking this function." +msgstr "如果指定的模块位于一个包内,则该包会作为唤起此函数的附带影响被导入。" + +#: ../../library/pkgutil.rst:138 +msgid "If no module name is specified, all top level finders are produced." +msgstr "如果未指定模块名称,则会产生所有的最高层级查找器。" + +#: ../../library/pkgutil.rst:147 +msgid "" +"Yields :class:`ModuleInfo` for all submodules on *path*, or, if *path* is " +"``None``, all top-level modules on :data:`sys.path`." +msgstr "" +"为 *path* 上的所有子模块产生 :class:`ModuleInfo`,或者如果 *path* 为 ``None``,则为 " +":data:`sys.path` 上的所有最高层级模块产生。" + +#: ../../library/pkgutil.rst:150 ../../library/pkgutil.rst:171 +msgid "" +"*path* should be either ``None`` or a list of paths to look for modules in." +msgstr "*path* 应当为 ``None`` 或一个作为查找模块目标的路径的列表。" + +#: ../../library/pkgutil.rst:152 ../../library/pkgutil.rst:173 +msgid "" +"*prefix* is a string to output on the front of every module name on output." +msgstr "*prefix* 是要在输出时输出到每个模块名称之前的字符串。" + +#: ../../library/pkgutil.rst:156 ../../library/pkgutil.rst:195 +msgid "" +"Only works for a :term:`finder` which defines an ``iter_modules()`` method. " +"This interface is non-standard, so the module also provides implementations " +"for :class:`importlib.machinery.FileFinder` and " +":class:`zipimport.zipimporter`." +msgstr "" +"只适用于定义了 ``iter_modules()`` 方法的 :term:`finder`。 该接口是非标准的,因此本模块还提供了针对 " +":class:`importlib.machinery.FileFinder` 和 :class:`zipimport.zipimporter` " +"的实现。" + +#: ../../library/pkgutil.rst:168 +msgid "" +"Yields :class:`ModuleInfo` for all modules recursively on *path*, or, if " +"*path* is ``None``, all accessible modules." +msgstr "" +"在 *path* 上递归地为所有模块产生 :class:`ModuleInfo`,或者如果 *path* 为 " +"``None``,则为所有可访问的模块产生。" + +#: ../../library/pkgutil.rst:175 +msgid "" +"Note that this function must import all *packages* (*not* all modules!) on " +"the given *path*, in order to access the ``__path__`` attribute to find " +"submodules." +msgstr "" +"请注意此函数必须导入给定 *path* 上所有的 *packages* (*而不是* 所有的模块!),以便能访问 ``__path__`` " +"属性来查找子模块。" + +#: ../../library/pkgutil.rst:179 +msgid "" +"*onerror* is a function which gets called with one argument (the name of the" +" package which was being imported) if any exception occurs while trying to " +"import a package. If no *onerror* function is supplied, " +":exc:`ImportError`\\s are caught and ignored, while all other exceptions are" +" propagated, terminating the search." +msgstr "" +"*onerror* 是在当试图导入包如果发生任何异常则将附带一个参数(被导入的包的名称)被调用的函数。 如果没有提供 *onerror* 函数,则 " +":exc:`ImportError` 会被捕获并被忽略,而其他异常则会被传播,导致模块搜索的终结。" + +#: ../../library/pkgutil.rst:185 +msgid "Examples::" +msgstr "示例::" + +#: ../../library/pkgutil.rst:207 +msgid "Get a resource from a package." +msgstr "从包中获取一个资源。" + +#: ../../library/pkgutil.rst:209 +msgid "" +"This is a wrapper for the :term:`loader` :meth:`get_data " +"` API. The *package* argument should" +" be the name of a package, in standard module format (``foo.bar``). The " +"*resource* argument should be in the form of a relative filename, using " +"``/`` as the path separator. The parent directory name ``..`` is not " +"allowed, and nor is a rooted name (starting with a ``/``)." +msgstr "" +"这是一个针对 :term:`loader` :meth:`get_data " +"` API 的包装器。 *package* 参数应为一个标准模块格式 " +"(``foo.bar``) 的包名称。 *resource* 参数应为相对路径文件名的形式,使用 ``/`` 作为路径分隔符。 父目录名 " +"``..``,以及根目录名 (以 ``/`` 打头) 均不允许使用。" + +#: ../../library/pkgutil.rst:216 +msgid "" +"The function returns a binary string that is the contents of the specified " +"resource." +msgstr "返回指定资源内容的二进制串。" + +#: ../../library/pkgutil.rst:219 +msgid "" +"For packages located in the filesystem, which have already been imported, " +"this is the rough equivalent of::" +msgstr "对于位于文件系统中,已经被导入的包来说,这大致等价于::" + +#: ../../library/pkgutil.rst:225 +msgid "" +"If the package cannot be located or loaded, or it uses a :term:`loader` " +"which does not support :meth:`get_data " +"`, then ``None`` is returned. In " +"particular, the :term:`loader` for :term:`namespace packages ` does not support :meth:`get_data " +"`." +msgstr "" +"如果指定的包无法被定位或加载,或者如果它使用了不支持 :meth:`get_data " +"` 的 :term:`loader`,则将返回 ``None``。 " +"特别地,针对 :term:`命名空间包 ` 的 :term:`loader` 不支持 " +":meth:`get_data `。" + +#: ../../library/pkgutil.rst:234 +msgid "Resolve a name to an object." +msgstr "将一个名称解析为对象。" + +#: ../../library/pkgutil.rst:236 +msgid "" +"This functionality is used in numerous places in the standard library (see " +":issue:`12915`) - and equivalent functionality is also in widely used third-" +"party packages such as setuptools, Django and Pyramid." +msgstr "" +"此功能被用在标准库的许多地方 (参见 :issue:`12915`) —— 并且等价的功能也被广泛用于第三方包例如 setuptools, Django" +" 和 Pyramid。" + +#: ../../library/pkgutil.rst:240 +msgid "" +"It is expected that *name* will be a string in one of the following formats," +" where W is shorthand for a valid Python identifier and dot stands for a " +"literal period in these pseudo-regexes:" +msgstr "预期 *name* 将为以下格式之一,其中 W 是一个有效的 Python 标识符的缩写而点号表示这些伪正则表达式中的句点字面值:" + +#: ../../library/pkgutil.rst:244 +msgid "``W(.W)*``" +msgstr "``W(.W)*``" + +#: ../../library/pkgutil.rst:245 +msgid "``W(.W)*:(W(.W)*)?``" +msgstr "``W(.W)*:(W(.W)*)?``" + +#: ../../library/pkgutil.rst:247 +msgid "" +"The first form is intended for backward compatibility only. It assumes that " +"some part of the dotted name is a package, and the rest is an object " +"somewhere within that package, possibly nested inside other objects. Because" +" the place where the package stops and the object hierarchy starts can't be " +"inferred by inspection, repeated attempts to import must be done with this " +"form." +msgstr "" +"第一种形式只是为了保持向下兼容性。 它假定带点号名称的某一部分是包,而其余部分则是该包内部的一个对象,并可能嵌套在其他对象之内。 " +"因为包和对象层级结构之间的分界点无法通过观察来确定,所以使用这种形式必须重复尝试导入。" + +#: ../../library/pkgutil.rst:254 +msgid "" +"In the second form, the caller makes the division point clear through the " +"provision of a single colon: the dotted name to the left of the colon is a " +"package to be imported, and the dotted name to the right is the object " +"hierarchy within that package. Only one import is needed in this form. If it" +" ends with the colon, then a module object is returned." +msgstr "" +"在第二种形式中,调用方通过提供一个单独冒号来明确分界点:冒号左边的带点号名称是要导入的包,而冒号右边的带点号名称则是对象层级结构。 " +"使用这种形式只需要导入一次。 如果它以冒号结尾,则将返回一个模块对象。" + +#: ../../library/pkgutil.rst:260 +msgid "" +"The function will return an object (which might be a module), or raise one " +"of the following exceptions:" +msgstr "此函数将返回一个对象(可能为模块),或是引发下列异常之一:" + +#: ../../library/pkgutil.rst:263 +msgid ":exc:`ValueError` -- if *name* isn't in a recognised format." +msgstr ":exc:`ValueError` -- 如果 *name* 不为可识别的格式。" + +#: ../../library/pkgutil.rst:265 +msgid ":exc:`ImportError` -- if an import failed when it shouldn't have." +msgstr ":exc:`ImportError` -- 如果导入本应成功但却失败。" + +#: ../../library/pkgutil.rst:267 +msgid "" +":exc:`AttributeError` -- If a failure occurred when traversing the object " +"hierarchy within the imported package to get to the desired object." +msgstr ":exc:`AttributeError` -- 当在遍历所导入包的对象层级结构以获取想要的对象时遭遇失败。" diff --git a/library/platform.po b/library/platform.po new file mode 100644 index 000000000..3526de0f8 --- /dev/null +++ b/library/platform.po @@ -0,0 +1,360 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) 2001-2022, Python Software Foundation +# This file is distributed under the same license as the Python package. +# FIRST AUTHOR , YEAR. +# +# Translators: +# nick <2330458484@qq.com>, 2019 +# Freesand Leo , 2021 +# Alpha Du , 2022 +# +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: Python 3.9\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2022-11-04 14:34+0000\n" +"PO-Revision-Date: 2017-02-16 23:22+0000\n" +"Last-Translator: Alpha Du , 2022\n" +"Language-Team: Chinese (China) (https://www.transifex.com/python-doc/teams/5390/zh_CN/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: zh_CN\n" +"Plural-Forms: nplurals=1; plural=0;\n" + +#: ../../library/platform.rst:2 +msgid ":mod:`platform` --- Access to underlying platform's identifying data" +msgstr ":mod:`platform` --- 获取底层平台的标识数据" + +#: ../../library/platform.rst:10 +msgid "**Source code:** :source:`Lib/platform.py`" +msgstr "**源代码:** :source:`Lib/platform.py`" + +#: ../../library/platform.rst:16 +msgid "" +"Specific platforms listed alphabetically, with Linux included in the Unix " +"section." +msgstr "特定平台按字母顺序排列,Linux 包括在 Unix 小节之中。" + +#: ../../library/platform.rst:21 +msgid "Cross Platform" +msgstr "跨平台" + +#: ../../library/platform.rst:26 +msgid "" +"Queries the given executable (defaults to the Python interpreter binary) for" +" various architecture information." +msgstr "查询给定的可执行文件(默认为 Python 解释器二进制码文件)来获取各种架构信息。" + +#: ../../library/platform.rst:29 +msgid "" +"Returns a tuple ``(bits, linkage)`` which contain information about the bit " +"architecture and the linkage format used for the executable. Both values are" +" returned as strings." +msgstr "返回一个元素 ``(bits, linkage)``,其中包含可执行文件所使用的位架构和链接格式信息。 这两个值均以字符串形式返回。" + +#: ../../library/platform.rst:33 +msgid "" +"Values that cannot be determined are returned as given by the parameter " +"presets. If bits is given as ``''``, the ``sizeof(pointer)`` (or " +"``sizeof(long)`` on Python version < 1.5.2) is used as indicator for the " +"supported pointer size." +msgstr "" +"无法确定的值将返回为形参预设所给出的值。 如果给出的位数为 ``''``,则会使用 ``sizeof(pointer)`` (或者当 Python 版本" +" < 1.5.2 时为 ``sizeof(long)``) 作为所支持的指针大小的提示。" + +#: ../../library/platform.rst:38 +msgid "" +"The function relies on the system's :file:`file` command to do the actual " +"work. This is available on most if not all Unix platforms and some non-Unix" +" platforms and then only if the executable points to the Python interpreter." +" Reasonable defaults are used when the above needs are not met." +msgstr "" +"此函数依赖于系统的 :file:`file` 命令来执行实际的操作。 这在几乎所有 Unix 平台和某些非 Unix 平台上只有当可执行文件指向 " +"Python 解释器时才可用。 当以上要求不满足时将会使用合理的默认值。" + +#: ../../library/platform.rst:45 +msgid "" +"On macOS (and perhaps other platforms), executable files may be universal " +"files containing multiple architectures." +msgstr "在 macOS (也许还有其他平台) 上,可执行文件可能是包含多种架构的通用文件。" + +#: ../../library/platform.rst:48 +msgid "" +"To get at the \"64-bitness\" of the current interpreter, it is more reliable" +" to query the :attr:`sys.maxsize` attribute::" +msgstr "要获取当前解释器的“64 位性”,更可靠的做法是查询 :attr:`sys.maxsize` 属性::" + +#: ../../library/platform.rst:56 +msgid "" +"Returns the machine type, e.g. ``'i386'``. An empty string is returned if " +"the value cannot be determined." +msgstr "返回机器类型,例如 ``'i386'``。 如果该值无法确定则会返回一个空字符串。" + +#: ../../library/platform.rst:62 +msgid "" +"Returns the computer's network name (may not be fully qualified!). An empty " +"string is returned if the value cannot be determined." +msgstr "返回计算机的网络名称(可能不是完整限定名称!)。 如果该值无法确定则会返回一个空字符串。" + +#: ../../library/platform.rst:68 +msgid "" +"Returns a single string identifying the underlying platform with as much " +"useful information as possible." +msgstr "返回一个标识底层平台的字符串,其中带有尽可能多的有用信息。" + +#: ../../library/platform.rst:71 +msgid "" +"The output is intended to be *human readable* rather than machine parseable." +" It may look different on different platforms and this is intended." +msgstr "输出信息的目标是“人类易读”而非机器易解析。 它在不同平台上可能看起来不一致,这是有意为之的。" + +#: ../../library/platform.rst:74 +msgid "" +"If *aliased* is true, the function will use aliases for various platforms " +"that report system names which differ from their common names, for example " +"SunOS will be reported as Solaris. The :func:`system_alias` function is " +"used to implement this." +msgstr "" +"如果 *aliased* 为真值,此函数将使用各种平台不同与其通常名称的别名来报告系统名称,例如 SunOS 将被报告为 Solaris。 " +":func:`system_alias` 函数将被用于实现此功能。" + +#: ../../library/platform.rst:79 +msgid "" +"Setting *terse* to true causes the function to return only the absolute " +"minimum information needed to identify the platform." +msgstr "将 *terse* 设为真值将导致此函数只返回标识平台所必须的最小量信息。" + +#: ../../library/platform.rst:82 +msgid "" +"On macOS, the function now uses :func:`mac_ver`, if it returns a non-empty " +"release string, to get the macOS version rather than the darwin version." +msgstr "" +"在 macOS 上,此函数现在会在 :func:`mac_ver` 返回的发布版字符串非空时使用它,以便获取 macOS 版本而非 darwin 版本。" + +#: ../../library/platform.rst:90 +msgid "Returns the (real) processor name, e.g. ``'amdk6'``." +msgstr "返回(真实的)处理器名称,例如 ``'amdk6'``。" + +#: ../../library/platform.rst:92 +msgid "" +"An empty string is returned if the value cannot be determined. Note that " +"many platforms do not provide this information or simply return the same " +"value as for :func:`machine`. NetBSD does this." +msgstr "" +"如果该值无法确定则将返回空字符串。 请注意许多平台都不提供此信息或是简单地返回与 :func:`machine` 相同的值。 NetBSD " +"则会提供此信息。" + +#: ../../library/platform.rst:99 +msgid "" +"Returns a tuple ``(buildno, builddate)`` stating the Python build number and" +" date as strings." +msgstr "返回一个元组 ``(buildno, builddate)``,以字符串表示的 Python 编译代码和日期。" + +#: ../../library/platform.rst:105 +msgid "Returns a string identifying the compiler used for compiling Python." +msgstr "返回一个标识用于编译 Python 的编译器的的字符串。" + +#: ../../library/platform.rst:110 +msgid "Returns a string identifying the Python implementation SCM branch." +msgstr "返回一个标识 Python 实现的 SCM 分支的字符串。" + +#: ../../library/platform.rst:115 +msgid "" +"Returns a string identifying the Python implementation. Possible return " +"values are: 'CPython', 'IronPython', 'Jython', 'PyPy'." +msgstr "" +"返回一个标识 Python 实现的字符串。 可能的返回值有: 'CPython', 'IronPython', 'Jython', 'PyPy'。" + +#: ../../library/platform.rst:121 +msgid "Returns a string identifying the Python implementation SCM revision." +msgstr "返回一个标识 Python 实现的 SCM 修订版的字符串。" + +#: ../../library/platform.rst:126 +msgid "Returns the Python version as string ``'major.minor.patchlevel'``." +msgstr "将 Python 版本以字符串 ``'major.minor.patchlevel'`` 形式返回。" + +#: ../../library/platform.rst:128 +msgid "" +"Note that unlike the Python ``sys.version``, the returned value will always " +"include the patchlevel (it defaults to 0)." +msgstr "请注意此返回值不同于 Python ``sys.version``,它将总是包括 patchlevel (默认为 0)。" + +#: ../../library/platform.rst:134 +msgid "" +"Returns the Python version as tuple ``(major, minor, patchlevel)`` of " +"strings." +msgstr "将 Python 版本以字符串元组 ``(major, minor, patchlevel)`` 形式返回。" + +#: ../../library/platform.rst:136 +msgid "" +"Note that unlike the Python ``sys.version``, the returned value will always " +"include the patchlevel (it defaults to ``'0'``)." +msgstr "请注意此返回值不同于 Python ``sys.version``,它将总是包括 patchlevel (默认为 ``'0'``)。" + +#: ../../library/platform.rst:142 +msgid "" +"Returns the system's release, e.g. ``'2.2.0'`` or ``'NT'``. An empty string " +"is returned if the value cannot be determined." +msgstr "返回系统的发布版本,例如 ``'2.2.0'`` 或 ``'NT'``,如果该值无法确定则将返回一个空字符串。" + +#: ../../library/platform.rst:148 +msgid "" +"Returns the system/OS name, such as ``'Linux'``, ``'Darwin'``, ``'Java'``, " +"``'Windows'``. An empty string is returned if the value cannot be " +"determined." +msgstr "" +"返回系统平台/OS的名称,例如 ``'Linux'``, ``'Darwin'``, ``'Java'``, ``'Windows'``。 " +"如果该值无法确定则将返回一个空字符串。" + +#: ../../library/platform.rst:154 +msgid "" +"Returns ``(system, release, version)`` aliased to common marketing names " +"used for some systems. It also does some reordering of the information in " +"some cases where it would otherwise cause confusion." +msgstr "" +"返回别名为某些系统所使用的常见营销名称的 ``(system, release, version)``。 " +"它还会在可能导致混淆的情况下对信息进行一些重排序操作。" + +#: ../../library/platform.rst:161 +msgid "" +"Returns the system's release version, e.g. ``'#3 on degas'``. An empty " +"string is returned if the value cannot be determined." +msgstr "返回系统的发布版本信息,例如 ``'#3 on degas'``。 如果该值无法确定则将返回一个空字符串。" + +#: ../../library/platform.rst:167 +msgid "" +"Fairly portable uname interface. Returns a :func:`~collections.namedtuple` " +"containing six attributes: :attr:`system`, :attr:`node`, :attr:`release`, " +":attr:`version`, :attr:`machine`, and :attr:`processor`." +msgstr "" +"具有高可移植性的 uname 接口。 返回包含六个属性的 :func:`~collections.namedtuple`: " +":attr:`system`, :attr:`node`, :attr:`release`, :attr:`version`, " +":attr:`machine` 和 :attr:`processor`。" + +#: ../../library/platform.rst:171 +msgid "" +"Note that this adds a sixth attribute (:attr:`processor`) not present in the" +" :func:`os.uname` result. Also, the attribute names are different for the " +"first two attributes; :func:`os.uname` names them :attr:`sysname` and " +":attr:`nodename`." +msgstr "" +"请注意此函数添加的第六个属性 (:attr:`processor`) 并不存在于 :func:`os.uname` 的结果中。 " +"并且前两个属性的属性名称也不一致;:func:`os.uname` 是将它们称为 :attr:`sysname` 和 :attr:`nodename`。" + +#: ../../library/platform.rst:176 +msgid "Entries which cannot be determined are set to ``''``." +msgstr "无法确定的条目会被设为 ``''``。" + +#: ../../library/platform.rst:178 +msgid "Result changed from a tuple to a :func:`~collections.namedtuple`." +msgstr "结果由元组改为 :func:`~collections.namedtuple` 。" + +#: ../../library/platform.rst:183 +msgid "Java Platform" +msgstr "Java平台" + +#: ../../library/platform.rst:188 +msgid "Version interface for Jython." +msgstr "Jython 的版本接口" + +#: ../../library/platform.rst:190 +msgid "" +"Returns a tuple ``(release, vendor, vminfo, osinfo)`` with *vminfo* being a " +"tuple ``(vm_name, vm_release, vm_vendor)`` and *osinfo* being a tuple " +"``(os_name, os_version, os_arch)``. Values which cannot be determined are " +"set to the defaults given as parameters (which all default to ``''``)." +msgstr "" +"返回一个元组 ``(release, vendor, vminfo, osinfo)``,其中 *vminfo* 为元组 ``(vm_name, " +"vm_release, vm_vendor)`` 而 *osinfo* 为元组 ``(os_name, os_version, os_arch)``。 " +"无法确定的值将设为由形参所给出的默认值 (默认均为 ``''``)。" + +#: ../../library/platform.rst:197 +msgid "Windows Platform" +msgstr "Windows平台" + +#: ../../library/platform.rst:202 +msgid "" +"Get additional version information from the Windows Registry and return a " +"tuple ``(release, version, csd, ptype)`` referring to OS release, version " +"number, CSD level (service pack) and OS type (multi/single processor). " +"Values which cannot be determined are set to the defaults given as " +"parameters (which all default to an empty string)." +msgstr "" +"从 Windows 注册表获取额外的版本信息并返回一个元组 ``(release, version, csd, ptype)`` 表示 OS 发行版, " +"版本号, CSD 级别 (Service Pack) 和 OS 类型 " +"(多个/单个处理器)。无法确定的值被设置为作为参数给出的默认值(这些参数都默认为一个空字符串)。" + +#: ../../library/platform.rst:208 +msgid "" +"As a hint: *ptype* is ``'Uniprocessor Free'`` on single processor NT " +"machines and ``'Multiprocessor Free'`` on multi processor machines. The " +"*'Free'* refers to the OS version being free of debugging code. It could " +"also state *'Checked'* which means the OS version uses debugging code, i.e. " +"code that checks arguments, ranges, etc." +msgstr "" +"一点提示: *ptype* 在单个处理器的 NT 机器上为 ``'Uniprocessor Free'`` 而在多个处理器的机器上为 " +"``'Multiprocessor Free'``。 *'Free'* 是指该 OS 版本没有调试代码。 它还可能显示 *'Checked'* 表示该 " +"OS 版本使用了调试代码,即检测参数、范围等的代码。" + +#: ../../library/platform.rst:216 +msgid "" +"Returns a string representing the current Windows edition, or ``None`` if " +"the value cannot be determined. Possible values include but are not limited" +" to ``'Enterprise'``, ``'IoTUAP'``, ``'ServerStandard'``, and " +"``'nanoserver'``." +msgstr "" +"返回一个代表当前 Windows 版本的字符串,或者在该值无法确定时返回 ``None`` 。 可能的值包括但不限于 ``'Enterprise'``," +" ``'IoTUAP'``, ``'ServerStandard'`` 和 ``'nanoserver'``。" + +#: ../../library/platform.rst:224 +msgid "" +"Return ``True`` if the Windows edition returned by :func:`win32_edition` is " +"recognized as an IoT edition." +msgstr "如果 :func:`win32_edition` 返回的 Windows 版本被识别为 IoT 版则返回 ``True``。" + +#: ../../library/platform.rst:231 +msgid "macOS Platform" +msgstr "macOS 平台" + +#: ../../library/platform.rst:236 +msgid "" +"Get macOS version information and return it as tuple ``(release, " +"versioninfo, machine)`` with *versioninfo* being a tuple ``(version, " +"dev_stage, non_release_version)``." +msgstr "" +"获取 macOS 版本信息并将其返回为元组 ``(release, versioninfo, machine)``,其中 *versioninfo* " +"是一个元组 ``(version, dev_stage, non_release_version)``。" + +#: ../../library/platform.rst:240 +msgid "" +"Entries which cannot be determined are set to ``''``. All tuple entries are" +" strings." +msgstr "无法确定的条目会被设为 ``''``。 所有元组条目均为字符串。" + +#: ../../library/platform.rst:245 +msgid "Unix Platforms" +msgstr "Unix 平台" + +#: ../../library/platform.rst:249 +msgid "" +"Tries to determine the libc version against which the file executable " +"(defaults to the Python interpreter) is linked. Returns a tuple of strings " +"``(lib, version)`` which default to the given parameters in case the lookup " +"fails." +msgstr "" +"尝试确定可执行文件(默认为 Python 解释器)所链接到的 libc 版本。 返回一个字符串元组 ``(lib, " +"version)``,当查找失败时其默认值将设为给定的形参值。" + +#: ../../library/platform.rst:253 +msgid "" +"Note that this function has intimate knowledge of how different libc " +"versions add symbols to the executable is probably only usable for " +"executables compiled using :program:`gcc`." +msgstr "" +"请注意此函数对于不同 libc 版本向可执行文件添加符号的方式有深层的关联,可能仅适用于使用 :program:`gcc` 编译出来的可执行文件。" + +#: ../../library/platform.rst:257 +msgid "The file is read and scanned in chunks of *chunksize* bytes." +msgstr "文件将按 *chunksize* 个字节的分块来读取和扫描。" diff --git a/library/plistlib.po b/library/plistlib.po new file mode 100644 index 000000000..81e69a4b2 --- /dev/null +++ b/library/plistlib.po @@ -0,0 +1,249 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) 2001-2022, Python Software Foundation +# This file is distributed under the same license as the Python package. +# FIRST AUTHOR , YEAR. +# +# Translators: +# Fred , 2018 +# 叶浚安 , 2019 +# Freesand Leo , 2022 +# +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: Python 3.9\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2022-11-04 14:34+0000\n" +"PO-Revision-Date: 2017-02-16 23:22+0000\n" +"Last-Translator: Freesand Leo , 2022\n" +"Language-Team: Chinese (China) (https://www.transifex.com/python-doc/teams/5390/zh_CN/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: zh_CN\n" +"Plural-Forms: nplurals=1; plural=0;\n" + +#: ../../library/plistlib.rst:2 +msgid ":mod:`plistlib` --- Generate and parse Apple ``.plist`` files" +msgstr ":mod:`plistlib` --- 生成与解析 Apple ``.plist`` 文件" + +#: ../../library/plistlib.rst:11 +msgid "**Source code:** :source:`Lib/plistlib.py`" +msgstr "**源代码:** :source:`Lib/plistlib.py`" + +#: ../../library/plistlib.rst:19 +msgid "" +"This module provides an interface for reading and writing the \"property " +"list\" files used by Apple, primarily on macOS and iOS. This module supports" +" both binary and XML plist files." +msgstr "" +"此模块提供了可读写 Apple \"property list\" 文件的接口,它主要用于 macOS 和 iOS 系统。 此模块同时支持二进制和 " +"XML plist 文件。" + +#: ../../library/plistlib.rst:23 +msgid "" +"The property list (``.plist``) file format is a simple serialization " +"supporting basic object types, like dictionaries, lists, numbers and " +"strings. Usually the top level object is a dictionary." +msgstr "" +"property list (``.plist``) 文件格式是一种简单的序列化格式,它支持一些基本对象类型,例如字典、列表、数字和字符串等。 " +"通常使用一个字典作为最高层级对象。" + +#: ../../library/plistlib.rst:27 +msgid "" +"To write out and to parse a plist file, use the :func:`dump` and " +":func:`load` functions." +msgstr "要写入和解析 plist 文件,请使用 :func:`dump` 和 :func:`load` 函数。" + +#: ../../library/plistlib.rst:30 +msgid "" +"To work with plist data in bytes objects, use :func:`dumps` and " +":func:`loads`." +msgstr "要以字节串对象形式操作 plist 数据,请使用 :func:`dumps` 和 :func:`loads`。" + +#: ../../library/plistlib.rst:33 +msgid "" +"Values can be strings, integers, floats, booleans, tuples, lists, " +"dictionaries (but only with string keys), :class:`bytes`, :class:`bytearray`" +" or :class:`datetime.datetime` objects." +msgstr "" +"值可以为字符串、整数、浮点数、布尔值、元组、列表、字典(但只允许用字符串作为键)、:class:`bytes`、:class:`bytearray` 或" +" :class:`datetime.datetime` 对象。" + +#: ../../library/plistlib.rst:37 +msgid "New API, old API deprecated. Support for binary format plists added." +msgstr "新版 API,旧版 API 已被弃用。 添加了对二进制 plist 格式的支持。" + +#: ../../library/plistlib.rst:40 +msgid "" +"Support added for reading and writing :class:`UID` tokens in binary plists " +"as used by NSKeyedArchiver and NSKeyedUnarchiver." +msgstr "" +"添加了在二进制 plist 中读写 :class:`UID` 令牌的支持,例如用于 NSKeyedArchiver 和 " +"NSKeyedUnarchiver。" + +#: ../../library/plistlib.rst:44 +msgid "Old API removed." +msgstr "旧 API 已被移除。" + +#: ../../library/plistlib.rst:49 +msgid "" +"`PList manual page " +"`_" +msgstr "" +"`PList 指南页面 " +"`_" + +#: ../../library/plistlib.rst:50 +msgid "Apple's documentation of the file format." +msgstr "针对该文件格式的 Apple 文档。" + +#: ../../library/plistlib.rst:53 +msgid "This module defines the following functions:" +msgstr "这个模块定义了以下函数:" + +#: ../../library/plistlib.rst:57 +msgid "" +"Read a plist file. *fp* should be a readable and binary file object. Return " +"the unpacked root object (which usually is a dictionary)." +msgstr "读取 plist 文件。 *fp* 应当可读并且为二进制文件对象。 返回已解包的根对象(通常是一个字典)。" + +#: ../../library/plistlib.rst:61 +msgid "" +"The *fmt* is the format of the file and the following values are valid:" +msgstr "*fmt* 为文件的格式,有效的值如下:" + +#: ../../library/plistlib.rst:63 +msgid ":data:`None`: Autodetect the file format" +msgstr ":data:`None`: 自动检测文件格式" + +#: ../../library/plistlib.rst:65 +msgid ":data:`FMT_XML`: XML file format" +msgstr ":data:`FMT_XML`: XML 文件格式" + +#: ../../library/plistlib.rst:67 +msgid ":data:`FMT_BINARY`: Binary plist format" +msgstr ":data:`FMT_BINARY`: 二进制 plist 格式" + +#: ../../library/plistlib.rst:69 +msgid "" +"The *dict_type* is the type used for dictionaries that are read from the " +"plist file." +msgstr "*dict_type* 为字典用来从 plist 文件读取的类型。" + +#: ../../library/plistlib.rst:72 +msgid "" +"XML data for the :data:`FMT_XML` format is parsed using the Expat parser " +"from :mod:`xml.parsers.expat` -- see its documentation for possible " +"exceptions on ill-formed XML. Unknown elements will simply be ignored by " +"the plist parser." +msgstr "" +":data:`FMT_XML` 格式的 XML 数据 会使用来自 :mod:`xml.parsers.expat` 的 Expat 解析器 -- " +"请参阅其文档了解错误格式 XML 可能引发的异常。 未知元素将被 plist 解析器直接略过。" + +#: ../../library/plistlib.rst:77 +msgid "" +"The parser for the binary format raises :exc:`InvalidFileException` when the" +" file cannot be parsed." +msgstr "当文件无法被解析时二进制格式的解析器将引发 :exc:`InvalidFileException`。" + +#: ../../library/plistlib.rst:85 +msgid "" +"Load a plist from a bytes object. See :func:`load` for an explanation of the" +" keyword arguments." +msgstr "从一个 bytes 对象加载 plist。 参阅 :func:`load` 获取相应关键字参数的说明。" + +#: ../../library/plistlib.rst:93 +msgid "" +"Write *value* to a plist file. *Fp* should be a writable, binary file " +"object." +msgstr "将 *value* 写入 plist 文件。 *Fp* 应当可写并且为二进制文件对象。" + +#: ../../library/plistlib.rst:96 +msgid "" +"The *fmt* argument specifies the format of the plist file and can be one of " +"the following values:" +msgstr "*fmt* 参数指定 plist 文件的格式,可以是以下值之一:" + +#: ../../library/plistlib.rst:99 +msgid ":data:`FMT_XML`: XML formatted plist file" +msgstr ":data:`FMT_XML`: XML 格式的 plist 文件" + +#: ../../library/plistlib.rst:101 +msgid ":data:`FMT_BINARY`: Binary formatted plist file" +msgstr ":data:`FMT_BINARY`: 二进制格式的 plist 文件" + +#: ../../library/plistlib.rst:103 +msgid "" +"When *sort_keys* is true (the default) the keys for dictionaries will be " +"written to the plist in sorted order, otherwise they will be written in the " +"iteration order of the dictionary." +msgstr "当 *sort_keys* 为真值(默认)时字典的键将经过排序再写入 plist,否则将按字典的迭代顺序写入。" + +#: ../../library/plistlib.rst:107 +msgid "" +"When *skipkeys* is false (the default) the function raises :exc:`TypeError` " +"when a key of a dictionary is not a string, otherwise such keys are skipped." +msgstr "当 *skipkeys* 为假值(默认)时该函数将在字典的键不为字符串时引发 :exc:`TypeError`,否则将跳过这样的键。" + +#: ../../library/plistlib.rst:110 +msgid "" +"A :exc:`TypeError` will be raised if the object is of an unsupported type or" +" a container that contains objects of unsupported types." +msgstr "如果对象是不受支持的类型或者是包含不受支持类型的对象的容器则将引发 :exc:`TypeError`。" + +#: ../../library/plistlib.rst:113 +msgid "" +"An :exc:`OverflowError` will be raised for integer values that cannot be " +"represented in (binary) plist files." +msgstr "对于无法在(二进制)plist 文件中表示的整数值,将会引发 :exc:`OverflowError`。" + +#: ../../library/plistlib.rst:121 +msgid "" +"Return *value* as a plist-formatted bytes object. See the documentation for " +":func:`dump` for an explanation of the keyword arguments of this function." +msgstr "将 *value* 以 plist 格式字节串对象的形式返回。 参阅 :func:`dump` 的文档获取此函数的关键字参数的说明。" + +#: ../../library/plistlib.rst:128 +msgid "The following classes are available:" +msgstr "可以使用以下的类:" + +#: ../../library/plistlib.rst:132 +msgid "" +"Wraps an :class:`int`. This is used when reading or writing NSKeyedArchiver" +" encoded data, which contains UID (see PList manual)." +msgstr "" +"包装一个 :class:`int`。 该类将在读取或写入 NSKeyedArchiver 编码的数据时被使用,其中包含 UID(参见 PList " +"指南)。" + +#: ../../library/plistlib.rst:135 +msgid "" +"It has one attribute, :attr:`data`, which can be used to retrieve the int " +"value of the UID. :attr:`data` must be in the range ``0 <= data < 2**64``." +msgstr "" +"它具有一个属性 :attr:`data`,可以被用来提取 UID 的 int 值。 :attr:`data` 的取值范围必须为 ``0 <= data " +"< 2**64``。" + +#: ../../library/plistlib.rst:141 +msgid "The following constants are available:" +msgstr "可以使用以下的常量:" + +#: ../../library/plistlib.rst:145 +msgid "The XML format for plist files." +msgstr "用于 plist 文件的 XML 格式。" + +#: ../../library/plistlib.rst:152 +msgid "The binary format for plist files" +msgstr "用于 plist 文件的二进制格式。" + +#: ../../library/plistlib.rst:158 +msgid "Examples" +msgstr "示例" + +#: ../../library/plistlib.rst:160 +msgid "Generating a plist::" +msgstr "生成一个 plist::" + +#: ../../library/plistlib.rst:180 +msgid "Parsing a plist::" +msgstr "解析一个 plist::" diff --git a/library/poplib.po b/library/poplib.po new file mode 100644 index 000000000..9cb51c4e8 --- /dev/null +++ b/library/poplib.po @@ -0,0 +1,373 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) 2001-2024, Python Software Foundation +# This file is distributed under the same license as the Python package. +# FIRST AUTHOR , YEAR. +# +# Translators: +# Arisaka97 , 2021 +# Rafael Fontenelle , 2024 +# +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: Python 3.9\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2024-08-30 16:51+0000\n" +"PO-Revision-Date: 2017-02-16 23:22+0000\n" +"Last-Translator: Rafael Fontenelle , 2024\n" +"Language-Team: Chinese (China) (https://app.transifex.com/python-doc/teams/5390/zh_CN/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: zh_CN\n" +"Plural-Forms: nplurals=1; plural=0;\n" + +#: ../../library/poplib.rst:2 +msgid ":mod:`poplib` --- POP3 protocol client" +msgstr ":mod:`poplib` --- POP3 协议客户端" + +#: ../../library/poplib.rst:10 +msgid "**Source code:** :source:`Lib/poplib.py`" +msgstr "**源代码:** :source:`Lib/poplib.py`" + +#: ../../library/poplib.rst:16 +msgid "" +"This module defines a class, :class:`POP3`, which encapsulates a connection " +"to a POP3 server and implements the protocol as defined in :rfc:`1939`. The " +":class:`POP3` class supports both the minimal and optional command sets from" +" :rfc:`1939`. The :class:`POP3` class also supports the ``STLS`` command " +"introduced in :rfc:`2595` to enable encrypted communication on an already " +"established connection." +msgstr "" +"本模块定义了一个 :class:`POP3` 类,该类封装了到 POP3 服务器的连接过程,并实现了 :rfc:`1939` " +"中定义的协议。:class:`POP3` 类同时支持 :rfc:`1939` 中最小的和可选的命令集。:class:`POP3` 类还支持在 " +":rfc:`2595` 中引入的 ``STLS`` 命令,用于在已建立的连接上启用加密通信。" + +#: ../../library/poplib.rst:22 +msgid "" +"Additionally, this module provides a class :class:`POP3_SSL`, which provides" +" support for connecting to POP3 servers that use SSL as an underlying " +"protocol layer." +msgstr "本模块额外提供一个 :class:`POP3_SSL` 类,在连接到 POP3 服务器时,该类为使用 SSL 作为底层协议层提供了支持。" + +#: ../../library/poplib.rst:26 +msgid "" +"Note that POP3, though widely supported, is obsolescent. The implementation" +" quality of POP3 servers varies widely, and too many are quite poor. If your" +" mailserver supports IMAP, you would be better off using the " +":class:`imaplib.IMAP4` class, as IMAP servers tend to be better implemented." +msgstr "" +"注意,尽管 POP3 具有广泛的支持,但它已经过时。POP3 服务器的实现质量差异很大,而且大多很糟糕。如果邮件服务器支持 IMAP,则最好使用 " +":class:`imaplib.IMAP4` 类,因为 IMAP 服务器一般实现得更好。" + +#: ../../library/poplib.rst:31 +msgid "The :mod:`poplib` module provides two classes:" +msgstr ":mod:`poplib` 模块提供了两个类:" + +#: ../../library/poplib.rst:36 +msgid "" +"This class implements the actual POP3 protocol. The connection is created " +"when the instance is initialized. If *port* is omitted, the standard POP3 " +"port (110) is used. The optional *timeout* parameter specifies a timeout in " +"seconds for the connection attempt (if not specified, the global default " +"timeout setting will be used)." +msgstr "" +"本类实现实际的 POP3 协议。实例初始化时,连接就会建立。如果省略 *port*,则使用标准 POP3 端口(110)。可选参数 *timeout* " +"指定连接尝试的超时时间(以秒为单位,如果未指定超时,将使用全局默认超时设置)。" + +#: ../../library/poplib.rst:42 ../../library/poplib.rst:68 +msgid "" +"Raises an :ref:`auditing event ` ``poplib.connect`` with arguments" +" ``self``, ``host``, ``port``." +msgstr "" +"引发一个 :ref:`审计事件 ` ``poplib.connect`` 并附带参数 ``self``, ``host``, " +"``port``。" + +#: ../../library/poplib.rst:44 ../../library/poplib.rst:70 +msgid "" +"Raises an :ref:`auditing event ` ``poplib.putline`` with arguments" +" ``self``, ``line``." +msgstr "" +"引发一个 :ref:`审计事件 ` ``poplib.putline``,附带参数 ``self``, ``line``。" + +#: ../../library/poplib.rst:46 ../../library/poplib.rst:72 +msgid "" +"All commands will raise an :ref:`auditing event ` " +"``poplib.putline`` with arguments ``self`` and ``line``, where ``line`` is " +"the bytes about to be sent to the remote host." +msgstr "" +"所有命令都会引发一个 :ref:`审计事件 ` ``poplib.putline``,附带参数 ``self`` 和 " +"``line``,其中 ``line`` 是即将发送到远程主机的字节串。" + +#: ../../library/poplib.rst:50 ../../library/poplib.rst:91 +msgid "" +"If the *timeout* parameter is set to be zero, it will raise a " +":class:`ValueError` to prevent the creation of a non-blocking socket." +msgstr "如果 *timeout* 参数设置为 0,创建非阻塞套接字时,它将引发 :class:`ValueError` 来阻止该操作。" + +#: ../../library/poplib.rst:56 +msgid "" +"This is a subclass of :class:`POP3` that connects to the server over an SSL " +"encrypted socket. If *port* is not specified, 995, the standard POP3-over-" +"SSL port is used. *timeout* works as in the :class:`POP3` constructor. " +"*context* is an optional :class:`ssl.SSLContext` object which allows " +"bundling SSL configuration options, certificates and private keys into a " +"single (potentially long-lived) structure. Please read :ref:`ssl-security` " +"for best practices." +msgstr "" +"一个 :class:`POP3` 的子类,它使用经 SSL 加密的套接字连接到服务器。如果端口 *port* 未指定,则使用 995,它是标准的 " +"POP3-over-SSL 端口。*timeout* 的作用与 :class:`POP3` 构造函数中的相同。*context* 是一个可选的 " +":class:`ssl.SSLContext` 对象,该对象可以将 SSL 配置选项、证书和私钥打包放入一个单独的(可以长久存在的)结构中。请阅读 " +":ref:`ssl-security` 以获取最佳实践。" + +#: ../../library/poplib.rst:64 +msgid "" +"*keyfile* and *certfile* are a legacy alternative to *context* - they can " +"point to PEM-formatted private key and certificate chain files, " +"respectively, for the SSL connection." +msgstr "" +"*keyfile* 和 *certfile* 是可以代替 *context* 的传统方案,它们可以分别指向 PEM 格式的私钥和证书链文件,用于进行 " +"SSL 连接。" + +#: ../../library/poplib.rst:76 +msgid "*context* parameter added." +msgstr "添加了 *context* 参数。" + +#: ../../library/poplib.rst:79 +msgid "" +"The class now supports hostname check with " +":attr:`ssl.SSLContext.check_hostname` and *Server Name Indication* (see " +":data:`ssl.HAS_SNI`)." +msgstr "" +"本类现在支持使用 :attr:`ssl.SSLContext.check_hostname` 和 *服务器名称指示* (参阅 " +":data:`ssl.HAS_SNI`)进行主机名检查。" + +#: ../../library/poplib.rst:86 +msgid "" +"*keyfile* and *certfile* are deprecated in favor of *context*. Please use " +":meth:`ssl.SSLContext.load_cert_chain` instead, or let " +":func:`ssl.create_default_context` select the system's trusted CA " +"certificates for you." +msgstr "" +"*keyfile* 和 *certfile* 已弃用并转而推荐 *context*。 请改用 " +":meth:`ssl.SSLContext.load_cert_chain` 或让 :func:`ssl.create_default_context`" +" 为你选择系统所信任的 CA 证书。" + +#: ../../library/poplib.rst:95 +msgid "One exception is defined as an attribute of the :mod:`poplib` module:" +msgstr "定义了一个异常,它是作为 :mod:`poplib` 模块的属性定义的:" + +#: ../../library/poplib.rst:100 +msgid "" +"Exception raised on any errors from this module (errors from :mod:`socket` " +"module are not caught). The reason for the exception is passed to the " +"constructor as a string." +msgstr "此模块的所有错误都将引发本异常(来自 :mod:`socket` 模块的错误不会被捕获)。异常的原因将以字符串的形式传递给构造函数。" + +#: ../../library/poplib.rst:108 +msgid "Module :mod:`imaplib`" +msgstr ":mod:`imaplib` 模块" + +#: ../../library/poplib.rst:108 +msgid "The standard Python IMAP module." +msgstr "标准的 Python IMAP 模块。" + +#: ../../library/poplib.rst:112 +msgid "" +"`Frequently Asked Questions About Fetchmail " +"`_" +msgstr "" +"`有关 Fetchmail 的常见问题 `_" + +#: ../../library/poplib.rst:111 +msgid "" +"The FAQ for the :program:`fetchmail` POP/IMAP client collects information on" +" POP3 server variations and RFC noncompliance that may be useful if you need" +" to write an application based on the POP protocol." +msgstr "" +":program:`fetchmail` POP/IMAP 客户端的“常见问题”收集了 POP3 服务器之间的差异和 RFC " +"不兼容的信息,如果要编写基于 POP 协议的应用程序,这可能会很有用。" + +#: ../../library/poplib.rst:119 +msgid "POP3 Objects" +msgstr "POP3 对象" + +#: ../../library/poplib.rst:121 +msgid "" +"All POP3 commands are represented by methods of the same name, in lower-" +"case; most return the response text sent by the server." +msgstr "所有 POP3 命令均以同名的方法表示,小写,大多数方法返回的是服务器发送的响应文本。" + +#: ../../library/poplib.rst:124 +msgid "An :class:`POP3` instance has the following methods:" +msgstr ":class:`POP3` 实例具有下列方法:" + +#: ../../library/poplib.rst:129 +msgid "" +"Set the instance's debugging level. This controls the amount of debugging " +"output printed. The default, ``0``, produces no debugging output. A value " +"of ``1`` produces a moderate amount of debugging output, generally a single " +"line per request. A value of ``2`` or higher produces the maximum amount of" +" debugging output, logging each line sent and received on the control " +"connection." +msgstr "" +"设置实例的调试级别,它控制着调试信息的数量。默认值 ``0`` 不产生调试信息。值 ``1`` 产生中等数量的调试信息,通常每个请求产生一行。大于或等于" +" ``2`` 的值产生的调试信息最多,FTP 控制连接上发送和接收的每一行都将被记录下来。" + +#: ../../library/poplib.rst:138 +msgid "Returns the greeting string sent by the POP3 server." +msgstr "返回 POP3 服务器发送的问候语字符串。" + +#: ../../library/poplib.rst:143 +msgid "" +"Query the server's capabilities as specified in :rfc:`2449`. Returns a " +"dictionary in the form ``{'name': ['param'...]}``." +msgstr "" +"查询服务器支持的功能,这些功能在 :rfc:`2449` 中有说明。返回一个 ``{'name': ['param'...]}`` 形式的字典。" + +#: ../../library/poplib.rst:151 +msgid "" +"Send user command, response should indicate that a password is required." +msgstr "发送 user 命令,返回的响应应该指示需要一个密码。" + +#: ../../library/poplib.rst:156 +msgid "" +"Send password, response includes message count and mailbox size. Note: the " +"mailbox on the server is locked until :meth:`~poplib.quit` is called." +msgstr "发送密码,响应包括邮件数和邮箱大小。注意:在调用 :meth:`~poplib.quit` 前,服务器上的邮箱都是锁定的。" + +#: ../../library/poplib.rst:162 +msgid "Use the more secure APOP authentication to log into the POP3 server." +msgstr "使用更安全的 APOP 身份验证登录到 POP3 服务器。" + +#: ../../library/poplib.rst:167 +msgid "" +"Use RPOP authentication (similar to UNIX r-commands) to log into POP3 " +"server." +msgstr "使用 RPOP 身份验证(类似于 Unix r-命令)登录到 POP3 服务器。" + +#: ../../library/poplib.rst:172 +msgid "" +"Get mailbox status. The result is a tuple of 2 integers: ``(message count, " +"mailbox size)``." +msgstr "获取邮箱状态。结果为 2 个整数组成的元组:``(message count, mailbox size)``。" + +#: ../../library/poplib.rst:178 +msgid "" +"Request message list, result is in the form ``(response, ['mesg_num octets'," +" ...], octets)``. If *which* is set, it is the message to list." +msgstr "" +"请求消息列表,结果的形式为 ``(response, ['mesg_num octets', ...], octets)``。如果设置了 " +"*which*,它表示需要列出的消息。" + +#: ../../library/poplib.rst:184 +msgid "" +"Retrieve whole message number *which*, and set its seen flag. Result is in " +"form ``(response, ['line', ...], octets)``." +msgstr "" +"检索编号为 *which* 的整条消息,并设置其已读标志位。结果的形式为 ``(response, ['line', ...], octets)``。" + +#: ../../library/poplib.rst:190 +msgid "" +"Flag message number *which* for deletion. On most servers deletions are not" +" actually performed until QUIT (the major exception is Eudora QPOP, which " +"deliberately violates the RFCs by doing pending deletes on any disconnect)." +msgstr "" +"将编号为 *which* 的消息标记为待删除。在多数服务器上,删除操作直到 QUIT 才会实际执行(主要例外是 Eudora " +"QPOP,它在断开连接时执行删除,故意违反了 RFC)。" + +#: ../../library/poplib.rst:197 +msgid "Remove any deletion marks for the mailbox." +msgstr "移除邮箱中的所有待删除标记。" + +#: ../../library/poplib.rst:202 +msgid "Do nothing. Might be used as a keep-alive." +msgstr "什么都不做。可以用于保持活动状态。" + +#: ../../library/poplib.rst:207 +msgid "Signoff: commit changes, unlock mailbox, drop connection." +msgstr "登出:提交更改,解除邮箱锁定,断开连接。" + +#: ../../library/poplib.rst:212 +msgid "" +"Retrieves the message header plus *howmuch* lines of the message after the " +"header of message number *which*. Result is in form ``(response, ['line', " +"...], octets)``." +msgstr "" +"检索编号为 *which* 的消息,范围是消息头加上消息头往后数 *howmuch* 行。结果的形式为 ``(response, ['line', " +"...], octets)``。" + +#: ../../library/poplib.rst:216 +msgid "" +"The POP3 TOP command this method uses, unlike the RETR command, doesn't set " +"the message's seen flag; unfortunately, TOP is poorly specified in the RFCs " +"and is frequently broken in off-brand servers. Test this method by hand " +"against the POP3 servers you will use before trusting it." +msgstr "" +"本方法使用 POP3 TOP 命令,不同于 RETR 命令,它不设置邮件的已读标志位。不幸的是,TOP 在 RFC " +"中说明不清晰,且在小众的服务器软件中往往不可用。信任并使用它之前,请先手动对目标 POP3 服务器测试本方法。" + +#: ../../library/poplib.rst:224 +msgid "" +"Return message digest (unique id) list. If *which* is specified, result " +"contains the unique id for that message in the form ``'response mesgnum " +"uid``, otherwise result is list ``(response, ['mesgnum uid', ...], " +"octets)``." +msgstr "" +"返回消息摘要(唯一 ID)列表。如果指定了 *which*,那么结果将包含那条消息的唯一 ID,形式为 ``'response mesgnum " +"uid``,如果未指定,那么结果为列表 ``(response, ['mesgnum uid', ...], octets)``。" + +#: ../../library/poplib.rst:231 +msgid "" +"Try to switch to UTF-8 mode. Returns the server response if successful, " +"raises :class:`error_proto` if not. Specified in :RFC:`6856`." +msgstr "" +"尝试切换至 UTF-8 模式。成功则返回服务器的响应,失败则引发 :class:`error_proto` 异常。在 :RFC:`6856` 中有说明。" + +#: ../../library/poplib.rst:239 +msgid "" +"Start a TLS session on the active connection as specified in :rfc:`2595`. " +"This is only allowed before user authentication" +msgstr "在活动连接上开启 TLS 会话,在 :rfc:`2595` 中有说明。仅在用户身份验证前允许这样做。" + +#: ../../library/poplib.rst:242 +msgid "" +"*context* parameter is a :class:`ssl.SSLContext` object which allows " +"bundling SSL configuration options, certificates and private keys into a " +"single (potentially long-lived) structure. Please read :ref:`ssl-security` " +"for best practices." +msgstr "" +"*context* 参数是一个 :class:`ssl.SSLContext` 对象,该对象可以将 SSL " +"配置选项、证书和私钥打包放入一个单独的(可以长久存在的)结构中。请阅读 :ref:`ssl-security` 以获取最佳实践。" + +#: ../../library/poplib.rst:247 +msgid "" +"This method supports hostname checking via " +":attr:`ssl.SSLContext.check_hostname` and *Server Name Indication* (see " +":data:`ssl.HAS_SNI`)." +msgstr "" +"此方法支持通过 :attr:`ssl.SSLContext.check_hostname` 和 *服务器名称指示* (参见 " +":data:`ssl.HAS_SNI`) 进行主机名检查。" + +#: ../../library/poplib.rst:254 +msgid "" +"Instances of :class:`POP3_SSL` have no additional methods. The interface of " +"this subclass is identical to its parent." +msgstr ":class:`POP3_SSL` 实例没有额外方法。该子类的接口与其父类的相同。" + +#: ../../library/poplib.rst:261 +msgid "POP3 Example" +msgstr "POP3 示例" + +#: ../../library/poplib.rst:263 +msgid "" +"Here is a minimal example (without error checking) that opens a mailbox and " +"retrieves and prints all messages::" +msgstr "以下是一个最短示例(不带错误检查),该示例将打开邮箱,检索并打印所有消息::" + +#: ../../library/poplib.rst:276 +msgid "" +"At the end of the module, there is a test section that contains a more " +"extensive example of usage." +msgstr "模块的最后有一段测试,其中包含的用法示例更加广泛。" diff --git a/library/posix.po b/library/posix.po new file mode 100644 index 000000000..818c5114e --- /dev/null +++ b/library/posix.po @@ -0,0 +1,137 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) 2001-2022, Python Software Foundation +# This file is distributed under the same license as the Python package. +# FIRST AUTHOR , YEAR. +# +# Translators: +# Freesand Leo , 2020 +# +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: Python 3.9\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2022-11-04 14:34+0000\n" +"PO-Revision-Date: 2017-02-16 23:22+0000\n" +"Last-Translator: Freesand Leo , 2020\n" +"Language-Team: Chinese (China) (https://www.transifex.com/python-doc/teams/5390/zh_CN/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: zh_CN\n" +"Plural-Forms: nplurals=1; plural=0;\n" + +#: ../../library/posix.rst:2 +msgid ":mod:`posix` --- The most common POSIX system calls" +msgstr ":mod:`posix` --- 最常见的 POSIX 系统调用" + +#: ../../library/posix.rst:10 +msgid "" +"This module provides access to operating system functionality that is " +"standardized by the C Standard and the POSIX standard (a thinly disguised " +"Unix interface)." +msgstr "此模块提供了对基于 C 标准和 POSIX 标准(一种稍加修改的 Unix 接口)进行标准化的系统功能的访问。" + +#: ../../library/posix.rst:16 +msgid "" +"**Do not import this module directly.** Instead, import the module " +":mod:`os`, which provides a *portable* version of this interface. On Unix, " +"the :mod:`os` module provides a superset of the :mod:`posix` interface. On " +"non-Unix operating systems the :mod:`posix` module is not available, but a " +"subset is always available through the :mod:`os` interface. Once :mod:`os` " +"is imported, there is *no* performance penalty in using it instead of " +":mod:`posix`. In addition, :mod:`os` provides some additional " +"functionality, such as automatically calling :func:`~os.putenv` when an " +"entry in ``os.environ`` is changed." +msgstr "" +"**请勿直接导入此模块。** 而应导入 :mod:`os` 模块,它提供了此接口的 *可移植* 版本。 在 Unix 上,:mod:`os` 模块提供了" +" :mod:`posix` 接口的一个超集。 在非 Unix 操作系统上 :mod:`posix` 模块将不可用,但会通过 :mod:`os` " +"接口提供它的一个可用子集。 一旦导入了 :mod:`os`,用它替代 :mod:`posix` 时就 *没有* 性能惩罚。 此外,:mod:`os` " +"还提供了一些附加功能,例如在 ``os.environ`` 中的某个条目被修改时会自动调用 :func:`~os.putenv`。" + +#: ../../library/posix.rst:25 +msgid "" +"Errors are reported as exceptions; the usual exceptions are given for type " +"errors, while errors reported by the system calls raise :exc:`OSError`." +msgstr "错误将作为异常被报告;对于类型错误会给出普通异常,而系统调用所报告的异常则会引发 :exc:`OSError`。" + +#: ../../library/posix.rst:32 +msgid "Large File Support" +msgstr "大文件支持" + +#: ../../library/posix.rst:40 +msgid "" +"Several operating systems (including AIX, HP-UX, Irix and Solaris) provide " +"support for files that are larger than 2 GiB from a C programming model " +"where :c:type:`int` and :c:type:`long` are 32-bit values. This is typically " +"accomplished by defining the relevant size and offset types as 64-bit " +"values. Such files are sometimes referred to as :dfn:`large files`." +msgstr "" +"某些操作系统(包括 AIX, HP-UX, Irix 和 Solaris)可对 :c:type:`int` 和 :c:type:`long` 为 32 " +"位值的 C 编程模型提供大于 2 GiB 的文件的支持。 这在通常情况下是以将相关数据长度和偏移类型定义为 64 位值的方式来实现的。 " +"这样的文件有时被称为 :dfn:`大文件`。" + +#: ../../library/posix.rst:46 +msgid "" +"Large file support is enabled in Python when the size of an :c:type:`off_t` " +"is larger than a :c:type:`long` and the :c:type:`long long` is at least as " +"large as an :c:type:`off_t`. It may be necessary to configure and compile " +"Python with certain compiler flags to enable this mode. For example, it is " +"enabled by default with recent versions of Irix, but with Solaris 2.6 and " +"2.7 you need to do something like::" +msgstr "" +"Python 中的大文件支持会在 :c:type:`off_t` 的大小超过 :c:type:`long` 且 :c:type:`long long` " +"至少与 :c:type:`off_t` 一样大时被启用。 要启用此模式可能必须在启用特定编译旗标的情况下执行 Python 配置和编译。 " +"例如,在最近几个版本的 Irix 中默认启用了大文件支持,但在 Solaris 2.6 和 2.7 中你还需要执行这样的操作::" + +#: ../../library/posix.rst:56 +msgid "On large-file-capable Linux systems, this might work::" +msgstr "在支持大文件的 Linux 系统中,可以这样做::" + +#: ../../library/posix.rst:65 +msgid "Notable Module Contents" +msgstr "重要的模块内容" + +#: ../../library/posix.rst:67 +msgid "" +"In addition to many functions described in the :mod:`os` module " +"documentation, :mod:`posix` defines the following data item:" +msgstr "除了 :mod:`os` 模块文档已说明的许多函数,:mod:`posix` 还定义了下列数据项:" + +#: ../../library/posix.rst:72 +msgid "" +"A dictionary representing the string environment at the time the interpreter" +" was started. Keys and values are bytes on Unix and str on Windows. For " +"example, ``environ[b'HOME']`` (``environ['HOME']`` on Windows) is the " +"pathname of your home directory, equivalent to ``getenv(\"HOME\")`` in C." +msgstr "" +"一个表示解释器启动时间点的字符串环境的字典。 键和值的类型在Unix 上为 bytes 而在 Windows 上为 str。 " +"例如,``environ[b'HOME']`` (Windows 上的 ``environ['HOME']``) 是你的家目录的路径名,等价于 C 中的" +" ``getenv(\"HOME\")``。" + +#: ../../library/posix.rst:77 +msgid "" +"Modifying this dictionary does not affect the string environment passed on " +"by :func:`~os.execv`, :func:`~os.popen` or :func:`~os.system`; if you need " +"to change the environment, pass ``environ`` to :func:`~os.execve` or add " +"variable assignments and export statements to the command string for " +":func:`~os.system` or :func:`~os.popen`." +msgstr "" +"修改此字典不会影响由 :func:`~os.execv`, :func:`~os.popen` 或 :func:`~os.system` " +"所传入的字符串环境;如果你需要修改环境,请将 ``environ`` 传给 :func:`~os.execve` 或者为 " +":func:`~os.system` 或 :func:`~os.popen` 的命令字符串添加变量赋值和 export 语句。" + +#: ../../library/posix.rst:83 +msgid "On Unix, keys and values are bytes." +msgstr "在 Unix 上,键和值为 bytes 类型。" + +#: ../../library/posix.rst:88 +msgid "" +"The :mod:`os` module provides an alternate implementation of ``environ`` " +"which updates the environment on modification. Note also that updating " +":data:`os.environ` will render this dictionary obsolete. Use of the " +":mod:`os` module version of this is recommended over direct access to the " +":mod:`posix` module." +msgstr "" +":mod:`os` 模块提供了对 ``environ`` 的替代实现,它会在被修改时更新环境。 还要注意更新 :data:`os.environ` " +"将导致此字典失效。 推荐使用这个 :mod:`os` 模块版本而不是直接访问 :mod:`posix` 模块。" diff --git a/library/pprint.po b/library/pprint.po new file mode 100644 index 000000000..7563596fd --- /dev/null +++ b/library/pprint.po @@ -0,0 +1,278 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) 2001-2022, Python Software Foundation +# This file is distributed under the same license as the Python package. +# FIRST AUTHOR , YEAR. +# +# Translators: +# Menghua Xiao , 2018 +# 叶浚安 , 2019 +# nick <2330458484@qq.com>, 2019 +# Freesand Leo , 2020 +# +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: Python 3.9\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2022-11-04 14:34+0000\n" +"PO-Revision-Date: 2017-02-16 23:22+0000\n" +"Last-Translator: Freesand Leo , 2020\n" +"Language-Team: Chinese (China) (https://www.transifex.com/python-doc/teams/5390/zh_CN/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: zh_CN\n" +"Plural-Forms: nplurals=1; plural=0;\n" + +#: ../../library/pprint.rst:2 +msgid ":mod:`pprint` --- Data pretty printer" +msgstr ":mod:`pprint` --- 数据美化输出" + +#: ../../library/pprint.rst:10 +msgid "**Source code:** :source:`Lib/pprint.py`" +msgstr "**源代码:** :source:`Lib/pprint.py`" + +#: ../../library/pprint.rst:14 +msgid "" +"The :mod:`pprint` module provides a capability to \"pretty-print\" arbitrary" +" Python data structures in a form which can be used as input to the " +"interpreter. If the formatted structures include objects which are not " +"fundamental Python types, the representation may not be loadable. This may " +"be the case if objects such as files, sockets or classes are included, as " +"well as many other objects which are not representable as Python literals." +msgstr "" +":mod:`pprint` 模块提供了“美化打印”任意 Python 数据结构的功能,这种美化形式可用作对解释器的输入。 如果经格式化的结构包含非基本 " +"Python 类型的对象,则其美化形式可能无法被加载。 包含文件、套接字或类对象,以及许多其他不能用 Python " +"字面值来表示的对象都有可能导致这样的结果。" + +#: ../../library/pprint.rst:21 +msgid "" +"The formatted representation keeps objects on a single line if it can, and " +"breaks them onto multiple lines if they don't fit within the allowed width. " +"Construct :class:`PrettyPrinter` objects explicitly if you need to adjust " +"the width constraint." +msgstr "" +"格式化后的形式会在可能的情况下以单行来表示对象,并在无法在允许宽度内容纳对象的情况下将其分为多行。 如果你需要调整宽度限制则应显式地构造 " +":class:`PrettyPrinter` 对象。" + +#: ../../library/pprint.rst:26 +msgid "Dictionaries are sorted by key before the display is computed." +msgstr "字典在计算其显示形式前会先根据键来排序。" + +#: ../../library/pprint.rst:28 +msgid "Added support for pretty-printing :class:`types.SimpleNamespace`." +msgstr "添加了对美化打印 :class:`types.SimpleNamespace` 的支持。" + +#: ../../library/pprint.rst:31 +msgid "The :mod:`pprint` module defines one class:" +msgstr ":mod:`pprint` 模块定义了一个类:" + +#: ../../library/pprint.rst:41 +msgid "" +"Construct a :class:`PrettyPrinter` instance. This constructor understands " +"several keyword parameters. An output stream may be set using the *stream* " +"keyword; the only method used on the stream object is the file protocol's " +":meth:`write` method. If not specified, the :class:`PrettyPrinter` adopts " +"``sys.stdout``. The amount of indentation added for each recursive level is" +" specified by *indent*; the default is one. Other values can cause output " +"to look a little odd, but can make nesting easier to spot. The number of " +"levels which may be printed is controlled by *depth*; if the data structure " +"being printed is too deep, the next contained level is replaced by ``...``." +" By default, there is no constraint on the depth of the objects being " +"formatted. The desired output width is constrained using the *width* " +"parameter; the default is 80 characters. If a structure cannot be formatted" +" within the constrained width, a best effort will be made. If *compact* is " +"false (the default) each item of a long sequence will be formatted on a " +"separate line. If *compact* is true, as many items as will fit within the " +"*width* will be formatted on each output line. If *sort_dicts* is true (the " +"default), dictionaries will be formatted with their keys sorted, otherwise " +"they will display in insertion order." +msgstr "" +"构造一个 :class:`PrettyPrinter` 实例。 此构造器接受几个关键字形参。 使用 *stream* " +"关键字可设置输出流;流对象使用的唯一方法是文件协议的 :meth:`write` 方法。 如果未指定此关键字,则 " +":class:`PrettyPrinter` 会选择 ``sys.stdout``。 每个递归层次的缩进量由 *indent* 指定;默认值为一。 " +"其他值可导致输出看起来有些怪异,,但可使得嵌套结构更易区分。 可被打印的层级数量由 *depth* " +"控制;如果数据结构的层级被打印得过深,其所包含的下一层级会被替换为 ``...``。 在默认情况下,对被格式化对象的层级深度没有限制。 " +"希望的输出宽度可使用 *width* 形参来限制;默认值为 80 个字符。 如果一个结构无法在限定宽度内被格式化,则将做到尽可能接近。 如果 " +"*compact* 为假值(默认)则长序列的每一项将被格式化为单独的行。 如果 *compact* 为真值,则将在 *width* " +"可容纳的的情况下把尽可能多的项放入每个输出行。 如果 *sort_dicts* 为真值(默认),字典将被格式化为按键排序,否则将按插入顺序显示。" + +#: ../../library/pprint.rst:60 ../../library/pprint.rst:100 +#: ../../library/pprint.rst:128 +msgid "Added the *compact* parameter." +msgstr "增加了 *compact* 形参。" + +#: ../../library/pprint.rst:63 ../../library/pprint.rst:103 +#: ../../library/pprint.rst:131 +msgid "Added the *sort_dicts* parameter." +msgstr "增加了 *sort_dicts* 形参。" + +#: ../../library/pprint.rst:91 +msgid "The :mod:`pprint` module also provides several shortcut functions:" +msgstr ":mod:`pprint` 模块还提供了一些快捷函数:" + +#: ../../library/pprint.rst:96 +msgid "" +"Return the formatted representation of *object* as a string. *indent*, " +"*width*, *depth*, *compact* and *sort_dicts* will be passed to the " +":class:`PrettyPrinter` constructor as formatting parameters." +msgstr "" +"*object* 的格式化表示作为字符串返回。 *indent*, *width*, *depth*, *compact* 和 *sort_dicts*" +" 将作为格式化形参被传入 :class:`PrettyPrinter` 构造器。" + +#: ../../library/pprint.rst:109 +msgid "" +"Prints the formatted representation of *object* followed by a newline. If " +"*sort_dicts* is false (the default), dictionaries will be displayed with " +"their keys in insertion order, otherwise the dict keys will be sorted. " +"*args* and *kwargs* will be passed to :func:`pprint` as formatting " +"parameters." +msgstr "" +"打印 *object* 的格式化表示并附带一个换行符。 如果 *sort_dicts* 为假值(默认),字典将按键的插入顺序显示,否则将按字典键排序。 " +"*args* 和 *kwargs* 将作为格式化形参被传给 :func:`pprint`。" + +#: ../../library/pprint.rst:121 +msgid "" +"Prints the formatted representation of *object* on *stream*, followed by a " +"newline. If *stream* is ``None``, ``sys.stdout`` is used. This may be used" +" in the interactive interpreter instead of the :func:`print` function for " +"inspecting values (you can even reassign ``print = pprint.pprint`` for use " +"within a scope). *indent*, *width*, *depth*, *compact* and *sort_dicts* " +"will be passed to the :class:`PrettyPrinter` constructor as formatting " +"parameters." +msgstr "" +"在 *stream* 上打打印 *object* 的格式化表示,并附带一个换行符。 如果 *stream* 为 ``None``,则使用 " +"``sys.stdout``。 这可以替代 :func:`print` 函数在交互式解释器中使用以查看值(你甚至可以执行重新赋值 ``print = " +"pprint.pprint`` 以在特定作用域中使用)。 *indent*, *width*, *depth*, *compact* 和 " +"*sort_dicts* 将作为格式化形参被传给 :class:`PrettyPrinter` 构造器。" + +#: ../../library/pprint.rst:150 +msgid "" +"Determine if the formatted representation of *object* is \"readable\", or " +"can be used to reconstruct the value using :func:`eval`. This always " +"returns ``False`` for recursive objects." +msgstr "" +"确定 *object* 的格式化表示是否“可读”,或是否可被用来通过 :func:`eval` 重新构建对象的值。 此函数对于递归对象总是返回 " +"``False``。" + +#: ../../library/pprint.rst:160 +msgid "Determine if *object* requires a recursive representation." +msgstr "确定 *object* 是否需要递归表示。" + +#: ../../library/pprint.rst:163 +msgid "One more support function is also defined:" +msgstr "此外还定义了一个支持函数:" + +#: ../../library/pprint.rst:167 +msgid "" +"Return a string representation of *object*, protected against recursive data" +" structures. If the representation of *object* exposes a recursive entry, " +"the recursive reference will be represented as ````. The representation is not otherwise formatted." +msgstr "" +"返回 *object* 的字符串表示,并为递归数据结构提供保护。 如果 *object* 的表示形式公开了一个递归条目,该递归引用会被表示为 " +"````。 该表示因而不会进行其它格式化。" + +#: ../../library/pprint.rst:179 +msgid "PrettyPrinter Objects" +msgstr "PrettyPrinter 对象" + +#: ../../library/pprint.rst:181 +msgid ":class:`PrettyPrinter` instances have the following methods:" +msgstr ":class:`PrettyPrinter` 的实例具有下列方法:" + +#: ../../library/pprint.rst:186 +msgid "" +"Return the formatted representation of *object*. This takes into account " +"the options passed to the :class:`PrettyPrinter` constructor." +msgstr "返回 *object* 格式化表示。 这会将传给 :class:`PrettyPrinter` 构造器的选项纳入考虑。" + +#: ../../library/pprint.rst:192 +msgid "" +"Print the formatted representation of *object* on the configured stream, " +"followed by a newline." +msgstr "在所配置的流上打印 *object* 的格式化表示,并附加一个换行符。" + +#: ../../library/pprint.rst:195 +msgid "" +"The following methods provide the implementations for the corresponding " +"functions of the same names. Using these methods on an instance is slightly" +" more efficient since new :class:`PrettyPrinter` objects don't need to be " +"created." +msgstr "" +"下列方法提供了与同名函数相对应的实现。 在实例上使用这些方法效率会更高一些,因为不需要创建新的 :class:`PrettyPrinter` 对象。" + +#: ../../library/pprint.rst:205 +msgid "" +"Determine if the formatted representation of the object is \"readable,\" or " +"can be used to reconstruct the value using :func:`eval`. Note that this " +"returns ``False`` for recursive objects. If the *depth* parameter of the " +":class:`PrettyPrinter` is set and the object is deeper than allowed, this " +"returns ``False``." +msgstr "" +"确定对象的格式化表示是否“可读”,或者是否可使用 :func:`eval` 重建对象值。 请注意此方法对于递归对象将返回 ``False``。 " +"如果设置了 :class:`PrettyPrinter` 的 *depth* 形参并且对象深度超出允许范围,此方法将返回 ``False``。" + +#: ../../library/pprint.rst:214 +msgid "Determine if the object requires a recursive representation." +msgstr "确定对象是否需要递归表示。" + +#: ../../library/pprint.rst:216 +msgid "" +"This method is provided as a hook to allow subclasses to modify the way " +"objects are converted to strings. The default implementation uses the " +"internals of the :func:`saferepr` implementation." +msgstr "此方法作为一个钩子提供,允许子类修改将对象转换为字符串的方式。 默认实现使用 :func:`saferepr` 实现的内部方式。" + +#: ../../library/pprint.rst:223 +msgid "" +"Returns three values: the formatted version of *object* as a string, a flag " +"indicating whether the result is readable, and a flag indicating whether " +"recursion was detected. The first argument is the object to be presented. " +"The second is a dictionary which contains the :func:`id` of objects that are" +" part of the current presentation context (direct and indirect containers " +"for *object* that are affecting the presentation) as the keys; if an object " +"needs to be presented which is already represented in *context*, the third " +"return value should be ``True``. Recursive calls to the :meth:`.format` " +"method should add additional entries for containers to this dictionary. The" +" third argument, *maxlevels*, gives the requested limit to recursion; this " +"will be ``0`` if there is no requested limit. This argument should be " +"passed unmodified to recursive calls. The fourth argument, *level*, gives " +"the current level; recursive calls should be passed a value less than that " +"of the current call." +msgstr "" +"返回三个值:字符串形式的 *object* 已格式化版本,指明结果是否可读的旗标,以及指明是否检测到递归的旗标。 第一个参数是要表示的对象。 " +"第二个是以对象 :func:`id` 为键的字典,这些对象是当前表示上下文的一部分(影响 *object* " +"表示的直接和间接容器);如果需要呈现一个已经在 *context* 中表示的对象,则第三个返回值应当为 ``True``。 对 " +":meth:`.format` 方法的递归调用应当将容器的附加条目添加到此字典中。 第三个参数 *maxlevels* " +"给出了对递归的请求限制;如果没有请求限制则其值将为 ``0``。 此参数应当不加修改地传给递归调用。 第四个参数 *level* " +"给出于当前层级;传给递归调用的参数值应当小于当前调用的值。" + +#: ../../library/pprint.rst:241 +msgid "Example" +msgstr "示例" + +#: ../../library/pprint.rst:243 +msgid "" +"To demonstrate several uses of the :func:`pprint` function and its " +"parameters, let's fetch information about a project from `PyPI " +"`_::" +msgstr "" +"为了演示 :func:`pprint` 函数及其形参的几种用法,让我们从 `PyPI `_ " +"获取关于某个项目的信息::" + +#: ../../library/pprint.rst:252 +msgid "In its basic form, :func:`pprint` shows the whole object::" +msgstr ":func:`pprint` 以其基本形式显示了整个对象::" + +#: ../../library/pprint.rst:308 +msgid "" +"The result can be limited to a certain *depth* (ellipsis is used for deeper " +"contents)::" +msgstr "结果可以被限制到特定的 *depth* (更深层的内容将使用省略号)::" + +#: ../../library/pprint.rst:354 +msgid "" +"Additionally, maximum character *width* can be suggested. If a long object " +"cannot be split, the specified width will be exceeded::" +msgstr "此外,还可以设置建议的最大字符 *width*。 如果一个对象无法被拆分,则将超出指定宽度::" diff --git a/library/profile.po b/library/profile.po new file mode 100644 index 000000000..7ec766ab9 --- /dev/null +++ b/library/profile.po @@ -0,0 +1,1095 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) 2001-2025, Python Software Foundation +# This file is distributed under the same license as the Python package. +# FIRST AUTHOR , YEAR. +# +# Translators: +# Alpha Du , 2019 +# Zombie110year , 2019 +# ppcfish , 2019 +# Freesand Leo , 2023 +# Rafael Fontenelle , 2025 +# +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: Python 3.9\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2025-02-07 16:40+0000\n" +"PO-Revision-Date: 2017-02-16 23:23+0000\n" +"Last-Translator: Rafael Fontenelle , 2025\n" +"Language-Team: Chinese (China) (https://app.transifex.com/python-doc/teams/5390/zh_CN/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: zh_CN\n" +"Plural-Forms: nplurals=1; plural=0;\n" + +#: ../../library/profile.rst:5 +msgid "The Python Profilers" +msgstr "Python 性能分析器" + +#: ../../library/profile.rst:7 +msgid "**Source code:** :source:`Lib/profile.py` and :source:`Lib/pstats.py`" +msgstr "**源代码:** :source:`Lib/profile.py` 和 :source:`Lib/pstats.py`" + +#: ../../library/profile.rst:14 +msgid "Introduction to the profilers" +msgstr "性能分析器简介" + +#: ../../library/profile.rst:20 +msgid "" +":mod:`cProfile` and :mod:`profile` provide :dfn:`deterministic profiling` of" +" Python programs. A :dfn:`profile` is a set of statistics that describes how" +" often and for how long various parts of the program executed. These " +"statistics can be formatted into reports via the :mod:`pstats` module." +msgstr "" +":mod:`cProfile` 和 :mod:`profile` 提供了 Python 程序的 :dfn:`确定性性能分析` 。 " +":dfn:`profile` 是一组统计数据,描述程序的各个部分执行的频率和时间。这些统计数据可以通过 :mod:`pstats` 模块格式化为报表。" + +#: ../../library/profile.rst:25 +msgid "" +"The Python standard library provides two different implementations of the " +"same profiling interface:" +msgstr "Python 标准库提供了同一分析接口的两种不同实现:" + +#: ../../library/profile.rst:28 +msgid "" +":mod:`cProfile` is recommended for most users; it's a C extension with " +"reasonable overhead that makes it suitable for profiling long-running " +"programs. Based on :mod:`lsprof`, contributed by Brett Rosen and Ted " +"Czotter." +msgstr "" +"对于大多数用户,建议使用 :mod:`cProfile` ;这是一个 C 扩展插件,因为其合理的运行开销,所以适合于分析长时间运行的程序。该插件基于 " +":mod:`lsprof` ,由 Brett Rosen 和 Ted Chaotter 贡献。" + +#: ../../library/profile.rst:33 +msgid "" +":mod:`profile`, a pure Python module whose interface is imitated by " +":mod:`cProfile`, but which adds significant overhead to profiled programs. " +"If you're trying to extend the profiler in some way, the task might be " +"easier with this module. Originally designed and written by Jim Roskind." +msgstr "" +":mod:`profile` 是一个纯 Python 模块(:mod:`cProfile` 就是模拟其接口的 C " +"语言实现),但它会显著增加配置程序的开销。如果你正在尝试以某种方式扩展分析器,则使用此模块可能会更容易完成任务。该模块最初由 Jim Roskind " +"设计和编写。" + +#: ../../library/profile.rst:40 +msgid "" +"The profiler modules are designed to provide an execution profile for a " +"given program, not for benchmarking purposes (for that, there is " +":mod:`timeit` for reasonably accurate results). This particularly applies " +"to benchmarking Python code against C code: the profilers introduce overhead" +" for Python code, but not for C-level functions, and so the C code would " +"seem faster than any Python one." +msgstr "" +"profiler 分析器模块被设计为给指定的程序提供执行概要文件,而不是用于基准测试目的( :mod:`timeit` " +"才是用于此目标的,它能获得合理准确的结果)。这特别适用于将 Python 代码与 C 代码进行基准测试:分析器为Python 代码引入开销,但不会为 " +"C级别的函数引入开销,因此 C 代码似乎比任何Python 代码都更快。" + +#: ../../library/profile.rst:51 +msgid "Instant User's Manual" +msgstr "实时用户手册" + +#: ../../library/profile.rst:53 +msgid "" +"This section is provided for users that \"don't want to read the manual.\" " +"It provides a very brief overview, and allows a user to rapidly perform " +"profiling on an existing application." +msgstr "本节是为 “不想阅读手册” 的用户提供的。它提供了非常简短的概述,并允许用户快速对现有应用程序执行评测。" + +#: ../../library/profile.rst:57 +msgid "To profile a function that takes a single argument, you can do::" +msgstr "要分析采用单个参数的函数,可以执行以下操作:" + +#: ../../library/profile.rst:63 +msgid "" +"(Use :mod:`profile` instead of :mod:`cProfile` if the latter is not " +"available on your system.)" +msgstr "(如果 :mod:`cProfile` 在您的系统上不可用,请使用 :mod:`profile` 。)" + +#: ../../library/profile.rst:66 +msgid "" +"The above action would run :func:`re.compile` and print profile results like" +" the following::" +msgstr "上述操作将运行 :func:`re.compile` 并打印分析结果,如下所示:" + +#: ../../library/profile.rst:82 +msgid "" +"The first line indicates that 197 calls were monitored. Of those calls, 192" +" were :dfn:`primitive`, meaning that the call was not induced via recursion." +" The next line: ``Ordered by: standard name``, indicates that the text " +"string in the far right column was used to sort the output. The column " +"headings include:" +msgstr "" +"第一行显示监听了197个调用。在这些调用中,有192个是 :dfn:`原始的` ,这意味着调用不是通过递归引发的。下一行: ``Ordered by: " +"standard name`` ,表示最右边列中的文本字符串用于对输出进行排序。列标题包括:" + +#: ../../library/profile.rst:88 +msgid "ncalls" +msgstr "ncalls" + +#: ../../library/profile.rst:88 +msgid "for the number of calls." +msgstr "调用次数" + +#: ../../library/profile.rst:92 +msgid "tottime" +msgstr "tottime" + +#: ../../library/profile.rst:91 +msgid "" +"for the total time spent in the given function (and excluding time made in " +"calls to sub-functions)" +msgstr "在指定函数中消耗的总时间(不包括调用子函数的时间)" + +#: ../../library/profile.rst:95 ../../library/profile.rst:102 +msgid "percall" +msgstr "percall" + +#: ../../library/profile.rst:95 +msgid "is the quotient of ``tottime`` divided by ``ncalls``" +msgstr "是 ``tottime`` 除以 ``ncalls`` 的商" + +#: ../../library/profile.rst:99 +msgid "cumtime" +msgstr "cumtime" + +#: ../../library/profile.rst:98 +msgid "" +"is the cumulative time spent in this and all subfunctions (from invocation " +"till exit). This figure is accurate *even* for recursive functions." +msgstr "指定的函数及其所有子函数(从调用到退出)消耗的累积时间。这个数字对于递归函数来说是准确的。" + +#: ../../library/profile.rst:102 +msgid "is the quotient of ``cumtime`` divided by primitive calls" +msgstr "是 ``cumtime`` 除以原始调用(次数)的商(即:函数运行一次的平均时间)" + +#: ../../library/profile.rst:105 +msgid "filename:lineno(function)" +msgstr "filename:lineno(function)" + +#: ../../library/profile.rst:105 +msgid "provides the respective data of each function" +msgstr "提供相应数据的每个函数" + +#: ../../library/profile.rst:107 +msgid "" +"When there are two numbers in the first column (for example ``3/1``), it " +"means that the function recursed. The second value is the number of " +"primitive calls and the former is the total number of calls. Note that when" +" the function does not recurse, these two values are the same, and only the " +"single figure is printed." +msgstr "" +"如果第一列中有两个数字(例如3/1),则表示函数递归。第二个值是原始调用次数,第一个是调用的总次数。请注意,当函数不递归时,这两个值是相同的,并且只打印单个数字。" + +#: ../../library/profile.rst:113 +msgid "" +"Instead of printing the output at the end of the profile run, you can save " +"the results to a file by specifying a filename to the :func:`run` function::" +msgstr "profile 运行结束时,打印输出不是必须的。也可以通过为 :func:`run` 函数指定文件名,将结果保存到文件中:" + +#: ../../library/profile.rst:120 +msgid "" +"The :class:`pstats.Stats` class reads profile results from a file and " +"formats them in various ways." +msgstr ":class:`pstats.Stats` 类从文件中读取 profile 结果,并以各种方式对其进行格式化。" + +#: ../../library/profile.rst:123 +msgid "" +"The files :mod:`cProfile` and :mod:`profile` can also be invoked as a script" +" to profile another script. For example::" +msgstr ":mod:`cProfile` 和 :mod:`profile` 文件也可以作为脚本调用,以分析另一个脚本。例如:" + +#: ../../library/profile.rst:128 +msgid "``-o`` writes the profile results to a file instead of to stdout" +msgstr "``-o`` 将profile 结果写入文件而不是标准输出" + +#: ../../library/profile.rst:130 +msgid "" +"``-s`` specifies one of the :func:`~pstats.Stats.sort_stats` sort values to " +"sort the output by. This only applies when ``-o`` is not supplied." +msgstr "" +"``-s`` 指定 :func:`~pstats.Stats.sort_stats` 排序值之一以对输出进行排序。这仅适用于未提供 ``-o`` 的情况" + +#: ../../library/profile.rst:133 +msgid "``-m`` specifies that a module is being profiled instead of a script." +msgstr "``-m`` 指定要分析的是模块而不是脚本。" + +#: ../../library/profile.rst:135 +msgid "Added the ``-m`` option to :mod:`cProfile`." +msgstr ":mod:`cProfile` 添加 ``-m`` 选项" + +#: ../../library/profile.rst:138 +msgid "Added the ``-m`` option to :mod:`profile`." +msgstr ":mod:`profile` 添加 ``-m`` 选项" + +#: ../../library/profile.rst:141 +msgid "" +"The :mod:`pstats` module's :class:`~pstats.Stats` class has a variety of " +"methods for manipulating and printing the data saved into a profile results " +"file::" +msgstr "" +":mod:`pstats` 模块的 :class:`~pstats.Stats` 类具有各种方法用来操纵和打印保存到性能分析结果文件的数据。" + +#: ../../library/profile.rst:149 +msgid "" +"The :meth:`~pstats.Stats.strip_dirs` method removed the extraneous path from" +" all the module names. The :meth:`~pstats.Stats.sort_stats` method sorted " +"all the entries according to the standard module/line/name string that is " +"printed. The :meth:`~pstats.Stats.print_stats` method printed out all the " +"statistics. You might try the following sort calls::" +msgstr "" +":meth:`~pstats.Stats.strip_dirs` 方法移除了所有模块名称中的多余路径。 " +":meth:`~pstats.Stats.sort_stats` 方法按照打印出来的标准模块/行/名称对所有条目进行排序。 " +":meth:`~pstats.Stats.print_stats` 方法打印出所有的统计数据。 你可以尝试下列排序调用::" + +#: ../../library/profile.rst:158 +msgid "" +"The first call will actually sort the list by function name, and the second " +"call will print out the statistics. The following are some interesting " +"calls to experiment with::" +msgstr "第一个调用实际上将按函数名称对列表进行排序,而第二个调用将打印出统计数据。 下面是一些可以尝试的有趣调用::" + +#: ../../library/profile.rst:164 +msgid "" +"This sorts the profile by cumulative time in a function, and then only " +"prints the ten most significant lines. If you want to understand what " +"algorithms are taking time, the above line is what you would use." +msgstr "这将按一个函数中的累计时间对性能分析数据进行排序,然后只打印出最重要的十行。 如果你了解哪些算法在耗费时间,上面这一行就是你应该使用的。" + +#: ../../library/profile.rst:168 +msgid "" +"If you were looking to see what functions were looping a lot, and taking a " +"lot of time, you would do::" +msgstr "如果你想要看看哪些函数的循环次数多,且耗费时间长,你应当这样做::" + +#: ../../library/profile.rst:173 +msgid "" +"to sort according to time spent within each function, and then print the " +"statistics for the top ten functions." +msgstr "以按照每个函数耗费的时间进行排序,然后打印前十个函数的统计数据。" + +#: ../../library/profile.rst:176 +msgid "You might also try::" +msgstr "你也可以尝试:" + +#: ../../library/profile.rst:180 +msgid "" +"This will sort all the statistics by file name, and then print out " +"statistics for only the class init methods (since they are spelled with " +"``__init__`` in them). As one final example, you could try::" +msgstr "" +"这将按照文件名对所有统计数据进行排序,然后只打印出类初始化方法的统计数据 (因为它们的名称中都有 ``__init__``)。 " +"作为最后一个例子,你可以尝试::" + +#: ../../library/profile.rst:186 +msgid "" +"This line sorts statistics with a primary key of time, and a secondary key " +"of cumulative time, and then prints out some of the statistics. To be " +"specific, the list is first culled down to 50% (re: ``.5``) of its original " +"size, then only lines containing ``init`` are maintained, and that sub-sub-" +"list is printed." +msgstr "" +"这一行以时间为主键,并以累计时间为次键进行排序,然后打印出部分统计数据。 具体来说,该列表首先被缩减至原始大小的 50% (即: " +"``.5``),然后只保留包含 ``init`` 的行,并打印该子列表。" + +#: ../../library/profile.rst:191 +msgid "" +"If you wondered what functions called the above functions, you could now " +"(``p`` is still sorted according to the last criteria) do::" +msgstr "如果你想知道有哪些函数调用了上述函数,你现在就可以做 (``p`` 仍然会按照最后一个标准进行排序)::" + +#: ../../library/profile.rst:196 +msgid "and you would get a list of callers for each of the listed functions." +msgstr "这样你将得到每个被列出的函数的调用方列表。" + +#: ../../library/profile.rst:198 +msgid "" +"If you want more functionality, you're going to have to read the manual, or " +"guess what the following functions do::" +msgstr "如果你想要更多的功能,你就必须阅读手册,或者自行猜测下列函数的作用::" + +#: ../../library/profile.rst:204 +msgid "" +"Invoked as a script, the :mod:`pstats` module is a statistics browser for " +"reading and examining profile dumps. It has a simple line-oriented " +"interface (implemented using :mod:`cmd`) and interactive help." +msgstr "" +"作为脚本被唤起,:mod:`pstats` 模块是一个用于读取和性能分析转储文件的统计数据浏览器。 它有一个简单的面向行的界面(使用 " +":mod:`cmd` 实现)和交互式的帮助。" + +#: ../../library/profile.rst:209 +msgid ":mod:`profile` and :mod:`cProfile` Module Reference" +msgstr ":mod:`profile` 和 :mod:`cProfile` 模块参考" + +#: ../../library/profile.rst:215 +msgid "" +"Both the :mod:`profile` and :mod:`cProfile` modules provide the following " +"functions:" +msgstr ":mod:`profile` 和 :mod:`cProfile` 模块都提供下列函数:" + +#: ../../library/profile.rst:220 +msgid "" +"This function takes a single argument that can be passed to the :func:`exec`" +" function, and an optional file name. In all cases this routine executes::" +msgstr "此函数接受一个可被传递给 :func:`exec` 函数的单独参数,以及一个可选的文件名。 在所有情况下这个例程都会执行::" + +#: ../../library/profile.rst:225 +msgid "" +"and gathers profiling statistics from the execution. If no file name is " +"present, then this function automatically creates a :class:`~pstats.Stats` " +"instance and prints a simple profiling report. If the sort value is " +"specified, it is passed to this :class:`~pstats.Stats` instance to control " +"how the results are sorted." +msgstr "" +"并收集执行过程中的性能分析统计数据。 如果未提供文件名,则此函数会自动创建一个 :class:`~pstats.Stats` " +"实例并打印一个简单的性能分析报告。 如果指定了 sort 值,则它会被传递给这个 :class:`~pstats.Stats` " +"实例以控制结果的排序方式。" + +#: ../../library/profile.rst:233 +msgid "" +"This function is similar to :func:`run`, with added arguments to supply the " +"globals and locals dictionaries for the *command* string. This routine " +"executes::" +msgstr "此函数类似于 :func:`run`,带有为 *command* 字符串提供全局和局部字典的附加参数。 这个例程会执行::" + +#: ../../library/profile.rst:239 +msgid "and gathers profiling statistics as in the :func:`run` function above." +msgstr "并像在上述的 :func:`run` 函数中一样收集性能分析数据。" + +#: ../../library/profile.rst:243 +msgid "" +"This class is normally only used if more precise control over profiling is " +"needed than what the :func:`cProfile.run` function provides." +msgstr "这个类通常只在需要比 :func:`cProfile.run` 函数所能提供的更精确的性能分析控制时被使用。" + +#: ../../library/profile.rst:246 +msgid "" +"A custom timer can be supplied for measuring how long code takes to run via " +"the *timer* argument. This must be a function that returns a single number " +"representing the current time. If the number is an integer, the *timeunit* " +"specifies a multiplier that specifies the duration of each unit of time. For" +" example, if the timer returns times measured in thousands of seconds, the " +"time unit would be ``.001``." +msgstr "" +"可以通过 *timer* 参数提供一个自定义计时器来测量代码运行花费了多长时间。 它必须是一个返回代表当前时间的单个数字的函数。 如果该数字为整数,则 " +"*timeunit* 指定一个表示每个时间单位持续时间的乘数。 例如,如果定时器返回以千秒为计量单位的时间值,则时间单位将为 ``.001``。" + +#: ../../library/profile.rst:253 +msgid "" +"Directly using the :class:`Profile` class allows formatting profile results " +"without writing the profile data to a file::" +msgstr "直接使用 :class:`Profile` 类将允许格式化性能分析结果而无需将性能分析数据写入到文件::" + +#: ../../library/profile.rst:268 +msgid "" +"The :class:`Profile` class can also be used as a context manager (supported " +"only in :mod:`cProfile` module. see :ref:`typecontextmanager`)::" +msgstr "" +":class:`Profile` 类也可作为上下文管理器使用 (仅在 :mod:`cProfile` 模块中支持。 参见 " +":ref:`typecontextmanager`)::" + +#: ../../library/profile.rst:278 +msgid "Added context manager support." +msgstr "添加了上下文管理器支持。" + +#: ../../library/profile.rst:283 +msgid "Start collecting profiling data. Only in :mod:`cProfile`." +msgstr "开始收集分析数据。仅在 :mod:`cProfile` 可用。" + +#: ../../library/profile.rst:287 +msgid "Stop collecting profiling data. Only in :mod:`cProfile`." +msgstr "停止收集分析数据。仅在 :mod:`cProfile` 可用。" + +#: ../../library/profile.rst:291 +msgid "" +"Stop collecting profiling data and record the results internally as the " +"current profile." +msgstr "停止收集分析数据,并在内部将结果记录为当前 profile。" + +#: ../../library/profile.rst:296 +msgid "" +"Create a :class:`~pstats.Stats` object based on the current profile and " +"print the results to stdout." +msgstr "根据当前性能分析数据创建一个 :class:`~pstats.Stats` 对象并将结果打印到 stdout。" + +#: ../../library/profile.rst:301 +msgid "Write the results of the current profile to *filename*." +msgstr "将当前profile 的结果写入 *filename* 。" + +#: ../../library/profile.rst:305 +msgid "Profile the cmd via :func:`exec`." +msgstr "通过 :func:`exec` 对该命令进行性能分析。" + +#: ../../library/profile.rst:309 +msgid "" +"Profile the cmd via :func:`exec` with the specified global and local " +"environment." +msgstr "通过 :func:`exec` 并附带指定的全局和局部环境对该命令进行性能分析。" + +#: ../../library/profile.rst:314 +msgid "Profile ``func(*args, **kwargs)``" +msgstr "对 ``func(*args, **kwargs)`` 进行性能分析" + +#: ../../library/profile.rst:316 +msgid "" +"Note that profiling will only work if the called command/function actually " +"returns. If the interpreter is terminated (e.g. via a :func:`sys.exit` call" +" during the called command/function execution) no profiling results will be " +"printed." +msgstr "" +"请注意性能分析只有在被调用的命令/函数确实能返回时才可用。 如果解释器被终结(例如在被调用的命令/函数执行期间通过 :func:`sys.exit` " +"调用)则将不会打印性能分析结果。" + +#: ../../library/profile.rst:324 +msgid "The :class:`Stats` Class" +msgstr ":class:`Stats` 类" + +#: ../../library/profile.rst:326 +msgid "" +"Analysis of the profiler data is done using the :class:`~pstats.Stats` " +"class." +msgstr "性能数据的分析是使用 :class:`~pstats.Stats` 类来完成的。" + +#: ../../library/profile.rst:333 +msgid "" +"This class constructor creates an instance of a \"statistics object\" from a" +" *filename* (or list of filenames) or from a :class:`Profile` instance. " +"Output will be printed to the stream specified by *stream*." +msgstr "" +"这个类构造器会基于 *filename* (或文件名列表) 或者 :class:`Profile` 实例创建一个“统计对象”。 输出将被打印到由 " +"*stream* 所指定的流。" + +#: ../../library/profile.rst:337 +msgid "" +"The file selected by the above constructor must have been created by the " +"corresponding version of :mod:`profile` or :mod:`cProfile`. To be specific," +" there is *no* file compatibility guaranteed with future versions of this " +"profiler, and there is no compatibility with files produced by other " +"profilers, or the same profiler run on a different operating system. If " +"several files are provided, all the statistics for identical functions will " +"be coalesced, so that an overall view of several processes can be considered" +" in a single report. If additional files need to be combined with data in " +"an existing :class:`~pstats.Stats` object, the :meth:`~pstats.Stats.add` " +"method can be used." +msgstr "" +"上述构造器所选择的文件必须由相应版本的 :mod:`profile` 或 :mod:`cProfile` 来创建。 具体来说,*不会* " +"保证文件与此性能分析器的未来版本兼容,也不会保证与其他性能分析器,或运行于不同操作系统的同一性能分析器所产生的文件兼容。 " +"如果提供了几个文件,则相同函数的所有统计数据将被聚合在一起,这样就可以在单个报告中同时考虑几个进程的总体情况。 如果额外的文件需要与现有 " +":class:`~pstats.Stats` 对象中的数据相结合,则可以使用 :meth:`~pstats.Stats.add` 方法。" + +#: ../../library/profile.rst:348 +msgid "" +"Instead of reading the profile data from a file, a :class:`cProfile.Profile`" +" or :class:`profile.Profile` object can be used as the profile data source." +msgstr "" +"作为从一个文件读取性能分析数据的替代,可以使用 :class:`cProfile.Profile` 或 :class:`profile.Profile`" +" 对象作为性能分析数据源。" + +#: ../../library/profile.rst:351 +msgid ":class:`Stats` objects have the following methods:" +msgstr ":class:`Stats` 对象有以下方法:" + +#: ../../library/profile.rst:355 +msgid "" +"This method for the :class:`Stats` class removes all leading path " +"information from file names. It is very useful in reducing the size of the " +"printout to fit within (close to) 80 columns. This method modifies the " +"object, and the stripped information is lost. After performing a strip " +"operation, the object is considered to have its entries in a \"random\" " +"order, as it was just after object initialization and loading. If " +":meth:`~pstats.Stats.strip_dirs` causes two function names to be " +"indistinguishable (they are on the same line of the same filename, and have " +"the same function name), then the statistics for these two entries are " +"accumulated into a single entry." +msgstr "" +"这个用于 :class:`Stats` 类的方法会从文件名中去除所有前导路径信息。 它对于减少打印输出的大小以适应(接近) 80 列限制。 " +"这个方法会修改对象,被去除的信息将会丢失。 在执行去除操作后,可以认为对象拥有的条目将使用“随机”顺序,就像它刚在对象初始化并加载之后一样。 如果 " +":meth:`~pstats.Stats.strip_dirs` " +"导致两个函数名变得无法区分(它们位于相同文件名的相同行,并且具有相同的函数名),那么这两个条目的统计数据将被累积到单个条目中。" + +#: ../../library/profile.rst:369 +msgid "" +"This method of the :class:`Stats` class accumulates additional profiling " +"information into the current profiling object. Its arguments should refer " +"to filenames created by the corresponding version of :func:`profile.run` or " +":func:`cProfile.run`. Statistics for identically named (re: file, line, " +"name) functions are automatically accumulated into single function " +"statistics." +msgstr "" +":class:`Stats` 类的这个方法会将额外的性能分析信息累积到当前的性能分析对象中。 它的参数应当指向由相应版本的 " +":func:`profile.run` 或 :func:`cProfile.run` 所创建的文件名。 相同名称(包括 file, line, " +"name)函数的统计信息会自动累积到单个函数的统计信息。" + +#: ../../library/profile.rst:379 +msgid "" +"Save the data loaded into the :class:`Stats` object to a file named " +"*filename*. The file is created if it does not exist, and is overwritten if" +" it already exists. This is equivalent to the method of the same name on " +"the :class:`profile.Profile` and :class:`cProfile.Profile` classes." +msgstr "" +"将加载至 :class:`Stats` 对象内的数据保存到名为 *filename* 的文件。 该文件如果不存在则将被创建,如果已存在则将被覆盖。 " +"这等价于 :class:`profile.Profile` 和 :class:`cProfile.Profile` 类上的同名方法。" + +#: ../../library/profile.rst:387 +msgid "" +"This method modifies the :class:`Stats` object by sorting it according to " +"the supplied criteria. The argument can be either a string or a SortKey " +"enum identifying the basis of a sort (example: ``'time'``, ``'name'``, " +"``SortKey.TIME`` or ``SortKey.NAME``). The SortKey enums argument have " +"advantage over the string argument in that it is more robust and less error " +"prone." +msgstr "" +"此方法通过根据所提供的准则修改 :class:`Stats` 对象的排序。 其参数可以是一个字符串或标识排序准则的 SortKey 枚举 (例如: " +"``'time'``, ``'name'``, ``SortKey.TIME`` 或 ``SortKey.NAME``)。 SortKey " +"枚举参数优于字符串参数因为它更为健壮且更不容易出错。" + +#: ../../library/profile.rst:394 +msgid "" +"When more than one key is provided, then additional keys are used as " +"secondary criteria when there is equality in all keys selected before them." +" For example, ``sort_stats(SortKey.NAME, SortKey.FILE)`` will sort all the " +"entries according to their function name, and resolve all ties (identical " +"function names) by sorting by file name." +msgstr "" +"当提供一个以上的键时,额外的键将在之前选择的所有键的值相等时被用作次级准则。 例如,``sort_stats(SortKey.NAME, " +"SortKey.FILE)`` 将根据其函数名对所有条目排序,并通过按文件名排序来处理所有平局(即函数名相同)。" + +#: ../../library/profile.rst:400 +msgid "" +"For the string argument, abbreviations can be used for any key names, as " +"long as the abbreviation is unambiguous." +msgstr "对于字符串参数,可以对任何键名使用缩写形式,只要缩写是无歧义的。" + +#: ../../library/profile.rst:403 +msgid "The following are the valid string and SortKey:" +msgstr "以下是有效的字符串和 SortKey:" + +#: ../../library/profile.rst:406 +msgid "Valid String Arg" +msgstr "有效字符串参数" + +#: ../../library/profile.rst:406 +msgid "Valid enum Arg" +msgstr "有效枚举参数" + +#: ../../library/profile.rst:406 +msgid "Meaning" +msgstr "含意" + +#: ../../library/profile.rst:408 +msgid "``'calls'``" +msgstr "``'calls'``" + +#: ../../library/profile.rst:408 +msgid "SortKey.CALLS" +msgstr "SortKey.CALLS" + +#: ../../library/profile.rst:408 ../../library/profile.rst:420 +msgid "call count" +msgstr "调用次数" + +#: ../../library/profile.rst:410 +msgid "``'cumulative'``" +msgstr "``'cumulative'``" + +#: ../../library/profile.rst:410 +msgid "SortKey.CUMULATIVE" +msgstr "SortKey.CUMULATIVE" + +#: ../../library/profile.rst:410 ../../library/profile.rst:412 +msgid "cumulative time" +msgstr "累积时间" + +#: ../../library/profile.rst:412 +msgid "``'cumtime'``" +msgstr "``'cumtime'``" + +#: ../../library/profile.rst:412 ../../library/profile.rst:414 +#: ../../library/profile.rst:418 ../../library/profile.rst:420 +#: ../../library/profile.rst:434 +msgid "N/A" +msgstr "N/A" + +#: ../../library/profile.rst:414 +msgid "``'file'``" +msgstr "``'file'``" + +#: ../../library/profile.rst:414 ../../library/profile.rst:416 +#: ../../library/profile.rst:418 +msgid "file name" +msgstr "文件名" + +#: ../../library/profile.rst:416 +msgid "``'filename'``" +msgstr "``'filename'``" + +#: ../../library/profile.rst:416 +msgid "SortKey.FILENAME" +msgstr "SortKey.FILENAME" + +#: ../../library/profile.rst:418 +msgid "``'module'``" +msgstr "``'module'``" + +#: ../../library/profile.rst:420 +msgid "``'ncalls'``" +msgstr "``'ncalls'``" + +#: ../../library/profile.rst:422 +msgid "``'pcalls'``" +msgstr "``'pcalls'``" + +#: ../../library/profile.rst:422 +msgid "SortKey.PCALLS" +msgstr "SortKey.PCALLS" + +#: ../../library/profile.rst:422 +msgid "primitive call count" +msgstr "原始调用计数" + +#: ../../library/profile.rst:424 +msgid "``'line'``" +msgstr "``'line'``" + +#: ../../library/profile.rst:424 +msgid "SortKey.LINE" +msgstr "SortKey.LINE" + +#: ../../library/profile.rst:424 +msgid "line number" +msgstr "行号" + +#: ../../library/profile.rst:426 +msgid "``'name'``" +msgstr "``'name'``" + +#: ../../library/profile.rst:426 +msgid "SortKey.NAME" +msgstr "SortKey.NAME" + +#: ../../library/profile.rst:426 +msgid "function name" +msgstr "函数名称" + +#: ../../library/profile.rst:428 +msgid "``'nfl'``" +msgstr "``'nfl'``" + +#: ../../library/profile.rst:428 +msgid "SortKey.NFL" +msgstr "SortKey.NFL" + +#: ../../library/profile.rst:428 +msgid "name/file/line" +msgstr "名称/文件/行" + +#: ../../library/profile.rst:430 +msgid "``'stdname'``" +msgstr "``'stdname'``" + +#: ../../library/profile.rst:430 +msgid "SortKey.STDNAME" +msgstr "SortKey.STDNAME" + +#: ../../library/profile.rst:430 +msgid "standard name" +msgstr "标准名称" + +#: ../../library/profile.rst:432 +msgid "``'time'``" +msgstr "``'time'``" + +#: ../../library/profile.rst:432 +msgid "SortKey.TIME" +msgstr "SortKey.TIME" + +#: ../../library/profile.rst:432 ../../library/profile.rst:434 +msgid "internal time" +msgstr "内部时间" + +#: ../../library/profile.rst:434 +msgid "``'tottime'``" +msgstr "``'tottime'``" + +#: ../../library/profile.rst:437 +msgid "" +"Note that all sorts on statistics are in descending order (placing most time" +" consuming items first), where as name, file, and line number searches are " +"in ascending order (alphabetical). The subtle distinction between " +"``SortKey.NFL`` and ``SortKey.STDNAME`` is that the standard name is a sort " +"of the name as printed, which means that the embedded line numbers get " +"compared in an odd way. For example, lines 3, 20, and 40 would (if the file" +" names were the same) appear in the string order 20, 3 and 40. In contrast, " +"``SortKey.NFL`` does a numeric compare of the line numbers. In fact, " +"``sort_stats(SortKey.NFL)`` is the same as ``sort_stats(SortKey.NAME, " +"SortKey.FILENAME, SortKey.LINE)``." +msgstr "" +"请注意对统计信息的所有排序都是降序的(将最耗时的条目放在最前面),其中名称、文件和行号搜索则是升序的(字母顺序)。 ``SortKey.NFL`` 和 " +"``SortKey.STDNAME`` 之间的细微区别在于标准名称是按打印形式来排序名称的,这意味着嵌入的行号将以一种怪异的方式进行比较。 例如,第 " +"3, 20 和 40 行将会按字符串顺序 20, 3 和 40 显示(如果文件名相同的话)。 相反地,``SortKey.NFL`` " +"则会对行号进行数值比较。 实际上,``sort_stats(SortKey.NFL)`` 就等同于 ``sort_stats(SortKey.NAME," +" SortKey.FILENAME, SortKey.LINE)``。" + +#: ../../library/profile.rst:448 +msgid "" +"For backward-compatibility reasons, the numeric arguments ``-1``, ``0``, " +"``1``, and ``2`` are permitted. They are interpreted as ``'stdname'``, " +"``'calls'``, ``'time'``, and ``'cumulative'`` respectively. If this old " +"style format (numeric) is used, only one sort key (the numeric key) will be " +"used, and additional arguments will be silently ignored." +msgstr "" +"出于向下兼容的理由,数值参数 ``-1``, ``0``, ``1`` 和 ``2`` 也是被允许的。 它们将被分别解读为 ``'stdname'``," +" ``'calls'``, ``'time'`` 和 ``'cumulative'``。 " +"如果使用这种老旧格式(数值),则将只使用一个排序键(数字键),额外的参数将被静默地忽略。" + +#: ../../library/profile.rst:456 +msgid "Added the SortKey enum." +msgstr "增加了 SortKey 枚举。" + +#: ../../library/profile.rst:461 +msgid "" +"This method for the :class:`Stats` class reverses the ordering of the basic " +"list within the object. Note that by default ascending vs descending order " +"is properly selected based on the sort key of choice." +msgstr "" +"这个用于 :class:`Stats` 类的方法将会反转对象内基本列表的顺序。 请注意在默认情况下升序和降序排列将基于所选定的排序键来进行适当的选择。" + +#: ../../library/profile.rst:471 +msgid "" +"This method for the :class:`Stats` class prints out a report as described in" +" the :func:`profile.run` definition." +msgstr "这个用于 :class:`Stats` 类的方法将打印出在 :func:`profile.run` 定义中描述的报告。" + +#: ../../library/profile.rst:474 +msgid "" +"The order of the printing is based on the last " +":meth:`~pstats.Stats.sort_stats` operation done on the object (subject to " +"caveats in :meth:`~pstats.Stats.add` and :meth:`~pstats.Stats.strip_dirs`)." +msgstr "" +"打印的顺序是基于在对象上执行的最后一次 :meth:`~pstats.Stats.sort_stats` 操作(需要注意 " +":meth:`~pstats.Stats.add` 和 :meth:`~pstats.Stats.strip_dirs` 规则)。" + +#: ../../library/profile.rst:479 +msgid "" +"The arguments provided (if any) can be used to limit the list down to the " +"significant entries. Initially, the list is taken to be the complete set of" +" profiled functions. Each restriction is either an integer (to select a " +"count of lines), or a decimal fraction between 0.0 and 1.0 inclusive (to " +"select a percentage of lines), or a string that will interpreted as a " +"regular expression (to pattern match the standard name that is printed). If " +"several restrictions are provided, then they are applied sequentially. For " +"example::" +msgstr "" +"所提供的参数(如果存在)可被用来将列表限制为重要的条目。 在初始状态下,列表将为加入性能分析的函数的完整集合。 " +"每条限制可以是一个整数(用来选择行数),或是一个 0.0 至 1.0 " +"范围内左开右闭的十进制小数(用来选择行数百分比),或是一个将被解读为正则表达式的字符串(用来匹配要打印的标准名称的模式)。 " +"如果提供了多条限制,则它们将逐个被应用。 例如::" + +#: ../../library/profile.rst:490 +msgid "" +"would first limit the printing to first 10% of list, and then only print " +"functions that were part of filename :file:`.\\*foo:`. In contrast, the " +"command::" +msgstr "将首先限制为打印列表的前 10%,然后再限制为仅打印在名为 :file:`.\\*foo:` 的文件内的函数。 作为对比,以下命令::" + +#: ../../library/profile.rst:496 +msgid "" +"would limit the list to all functions having file names :file:`.\\*foo:`, " +"and then proceed to only print the first 10% of them." +msgstr "将列表限制为名为 :file:`.\\*foo:` 的文件内的所有函数,然后再限制为仅打印它们当中的前 10%。" + +#: ../../library/profile.rst:502 +msgid "" +"This method for the :class:`Stats` class prints a list of all functions that" +" called each function in the profiled database. The ordering is identical " +"to that provided by :meth:`~pstats.Stats.print_stats`, and the definition of" +" the restricting argument is also identical. Each caller is reported on its" +" own line. The format differs slightly depending on the profiler that " +"produced the stats:" +msgstr "" +"这个用于 :class:`Stats` 类的方法将打印调用了加入性能分析数据库的每个函数的所有函数的列表。 打印顺序与 " +":meth:`~pstats.Stats.print_stats` 所提供的相同,受限参数的定义也是相同的。 每个调用方将在单独的行中报告。 " +"具体格式根据产生统计数据的性能分析器的不同而有所差异。" + +#: ../../library/profile.rst:509 +msgid "" +"With :mod:`profile`, a number is shown in parentheses after each caller to " +"show how many times this specific call was made. For convenience, a second " +"non-parenthesized number repeats the cumulative time spent in the function " +"at the right." +msgstr "" +"使用 :mod:`profile` 时,将在每个调用方之后的圆括号内显示一个数字来指明相应的调用执行了多少次。 " +"为了方便起见,右侧还有第二个不带圆括号的数字来重复显示该函数累计耗费的时间。" + +#: ../../library/profile.rst:514 +msgid "" +"With :mod:`cProfile`, each caller is preceded by three numbers: the number " +"of times this specific call was made, and the total and cumulative times " +"spent in the current function while it was invoked by this specific caller." +msgstr "" +"使用 :mod:`cProfile` 时,每个调用方前面将有三个数字:这个调用的执行次数,以及当前函数在被这个调用方唤起期间共计和累计耗费的时间。" + +#: ../../library/profile.rst:522 +msgid "" +"This method for the :class:`Stats` class prints a list of all function that " +"were called by the indicated function. Aside from this reversal of " +"direction of calls (re: called vs was called by), the arguments and ordering" +" are identical to the :meth:`~pstats.Stats.print_callers` method." +msgstr "" +"这个用于 :class:`Stats` 类的方法将打印被指定的函数所调用的所有函数的列表。 " +"除了调用方向是逆序的(对应:被调用和被调用方),其参数和顺序与 :meth:`~pstats.Stats.print_callers` 方法相同。" + +#: ../../library/profile.rst:530 +msgid "" +"This method returns an instance of StatsProfile, which contains a mapping of" +" function names to instances of FunctionProfile. Each FunctionProfile " +"instance holds information related to the function's profile such as how " +"long the function took to run, how many times it was called, etc..." +msgstr "" +"此方法返回一个 StatsProfile 的实例,它包含从函数名称到 FunctionProfile 实例的映射。 每个 FunctionProfile" +" 实例保存了相应函数性能分析的有关信息如函数运行耗费了多长时间,它被调用了多少次等等……" + +#: ../../library/profile.rst:535 +msgid "" +"Added the following dataclasses: StatsProfile, FunctionProfile. Added the " +"following function: get_stats_profile." +msgstr "添加了以下数据类: StatsProfile, FunctionProfile。 添加了以下函数: get_stats_profile。" + +#: ../../library/profile.rst:542 +msgid "What Is Deterministic Profiling?" +msgstr "什么是确定性性能分析?" + +#: ../../library/profile.rst:544 +msgid "" +":dfn:`Deterministic profiling` is meant to reflect the fact that all " +"*function call*, *function return*, and *exception* events are monitored, " +"and precise timings are made for the intervals between these events (during " +"which time the user's code is executing). In contrast, :dfn:`statistical " +"profiling` (which is not done by this module) randomly samples the effective" +" instruction pointer, and deduces where time is being spent. The latter " +"technique traditionally involves less overhead (as the code does not need to" +" be instrumented), but provides only relative indications of where time is " +"being spent." +msgstr "" +":dfn:`确定性性能分析` 旨在反映这样一个事实:即所有 *函数调用* 、 *函数返回* 和 *异常* " +"事件都被监控,并且对这些事件之间的间隔(在此期间用户的代码正在执行)进行精确计时。相反,统计分析(不是由该模块完成)随机采样有效指令指针,并推断时间花费在哪里。后一种技术传统上涉及较少的开销(因为代码不需要检测),但只提供了时间花在哪里的相对指示。" + +#: ../../library/profile.rst:553 +msgid "" +"In Python, since there is an interpreter active during execution, the " +"presence of instrumented code is not required in order to do deterministic " +"profiling. Python automatically provides a :dfn:`hook` (optional callback) " +"for each event. In addition, the interpreted nature of Python tends to add " +"so much overhead to execution, that deterministic profiling tends to only " +"add small processing overhead in typical applications. The result is that " +"deterministic profiling is not that expensive, yet provides extensive run " +"time statistics about the execution of a Python program." +msgstr "" +"在Python中,由于在执行过程中总有一个活动的解释器,因此执行确定性评测不需要插入指令的代码。Python 自动为每个事件提供一个 :dfn:`钩子`" +" (可选回调)。此外,Python " +"的解释特性往往会给执行增加太多开销,以至于在典型的应用程序中,确定性分析往往只会增加很小的处理开销。结果是,确定性分析并没有那么代价高昂,但是它提供了有关" +" Python 程序执行的大量运行时统计信息。" + +#: ../../library/profile.rst:562 +msgid "" +"Call count statistics can be used to identify bugs in code (surprising " +"counts), and to identify possible inline-expansion points (high call " +"counts). Internal time statistics can be used to identify \"hot loops\" " +"that should be carefully optimized. Cumulative time statistics should be " +"used to identify high level errors in the selection of algorithms. Note " +"that the unusual handling of cumulative times in this profiler allows " +"statistics for recursive implementations of algorithms to be directly " +"compared to iterative implementations." +msgstr "" +"调用计数统计信息可用于识别代码中的错误(意外计数),并识别可能的内联扩展点(高频调用)。内部时间统计可用于识别应仔细优化的 \"热循环\" " +"。累积时间统计可用于识别算法选择上的高级别错误。请注意,该分析器中对累积时间的异常处理,允许直接比较算法的递归实现与迭代实现的统计信息。" + +#: ../../library/profile.rst:575 +msgid "Limitations" +msgstr "局限性" + +#: ../../library/profile.rst:577 +msgid "" +"One limitation has to do with accuracy of timing information. There is a " +"fundamental problem with deterministic profilers involving accuracy. The " +"most obvious restriction is that the underlying \"clock\" is only ticking at" +" a rate (typically) of about .001 seconds. Hence no measurements will be " +"more accurate than the underlying clock. If enough measurements are taken, " +"then the \"error\" will tend to average out. Unfortunately, removing this " +"first error induces a second source of error." +msgstr "" +"一个限制是关于时间信息的准确性。确定性性能分析存在一个涉及精度的基本问题。最明显的限制是,底层的 \"时钟\" " +"周期大约为0.001秒(通常)。因此,没有什么测量会比底层时钟更精确。如果进行了足够的测量,那么 \"误差\" " +"将趋于平均。不幸的是,删除第一个错误会导致第二个错误来源。" + +#: ../../library/profile.rst:585 +msgid "" +"The second problem is that it \"takes a while\" from when an event is " +"dispatched until the profiler's call to get the time actually *gets* the " +"state of the clock. Similarly, there is a certain lag when exiting the " +"profiler event handler from the time that the clock's value was obtained " +"(and then squirreled away), until the user's code is once again executing. " +"As a result, functions that are called many times, or call many functions, " +"will typically accumulate this error. The error that accumulates in this " +"fashion is typically less than the accuracy of the clock (less than one " +"clock tick), but it *can* accumulate and become very significant." +msgstr "" +"第二个问题是,从调度事件到分析器调用获取时间函数实际 *获取* 时钟状态,这需要 \"一段时间\" " +"。类似地,从获取时钟值(然后保存)开始,直到再次执行用户代码为止,退出分析器事件句柄时也存在一定的延迟。因此,多次调用单个函数或调用多个函数通常会累积此错误。尽管这种方式的误差通常小于时钟的精度(小于一个时钟周期),但它" +" *可以* 累积并变得非常可观。" + +#: ../../library/profile.rst:595 +msgid "" +"The problem is more important with :mod:`profile` than with the lower-" +"overhead :mod:`cProfile`. For this reason, :mod:`profile` provides a means " +"of calibrating itself for a given platform so that this error can be " +"probabilistically (on the average) removed. After the profiler is " +"calibrated, it will be more accurate (in a least square sense), but it will " +"sometimes produce negative numbers (when call counts are exceptionally low, " +"and the gods of probability work against you :-). ) Do *not* be alarmed by " +"negative numbers in the profile. They should *only* appear if you have " +"calibrated your profiler, and the results are actually better than without " +"calibration." +msgstr "" +"与开销较低的 :mod:`cProfile` 相比, :mod:`profile` 的问题更为严重。出于这个原因, :mod:`profile` " +"提供了一种针对指定平台的自我校准方法,以便可以在很大程度上(平均地)消除此误差。 " +"校准后,结果将更准确(在最小二乘意义上),但它有时会产生负数(当调用计数异常低,且概率之神对您不利时:-)。因此 *不要* " +"对产生的负数感到惊慌。它们应该只在你手工校准分析器的情况下才会出现,实际上结果比没有校准的情况要好。" + +#: ../../library/profile.rst:609 +msgid "Calibration" +msgstr "准确估量" + +#: ../../library/profile.rst:611 +msgid "" +"The profiler of the :mod:`profile` module subtracts a constant from each " +"event handling time to compensate for the overhead of calling the time " +"function, and socking away the results. By default, the constant is 0. The " +"following procedure can be used to obtain a better constant for a given " +"platform (see :ref:`profile-limitations`). ::" +msgstr "" +":mod:`profile` 模块的 profiler 会从每个事件处理时间中减去一个常量,以补偿调用 time " +"函数和存储结果的开销。默认情况下,常数为0。对于特定的平台,可用以下程序获得更好修正常数( :ref:`profile-limitations` )。" + +#: ../../library/profile.rst:622 +msgid "" +"The method executes the number of Python calls given by the argument, " +"directly and again under the profiler, measuring the time for both. It then " +"computes the hidden overhead per profiler event, and returns that as a " +"float. For example, on a 1.8Ghz Intel Core i5 running macOS, and using " +"Python's time.process_time() as the timer, the magical number is about " +"4.04e-6." +msgstr "" +"此方法将执行由参数所给定次数的 Python 调用,在性能分析器之下直接和再次地执行,并对两次执行计时。 " +"它将随后计算每个性能分析器事件的隐藏开销,并将其以浮点数的形式返回。 例如,在一台运行 macOS 的 1.8Ghz Intel Core i5 " +"上,使用 Python 的 time.process_time() 作为计时器,魔数大约为 4.04e-6。" + +#: ../../library/profile.rst:628 +msgid "" +"The object of this exercise is to get a fairly consistent result. If your " +"computer is *very* fast, or your timer function has poor resolution, you " +"might have to pass 100000, or even 1000000, to get consistent results." +msgstr "" +"此操作的目标是获得一个相当稳定的结果。 如果你的计算机 *非常* 快速,或者你的计时器函数的分辨率很差,你可能必须传入 100000,甚至 " +"1000000,才能得到稳定的结果。" + +#: ../../library/profile.rst:632 +msgid "" +"When you have a consistent answer, there are three ways you can use it::" +msgstr "当你有一个一致的答案时,有三种方法可以使用:" + +#: ../../library/profile.rst:646 +msgid "" +"If you have a choice, you are better off choosing a smaller constant, and " +"then your results will \"less often\" show up as negative in profile " +"statistics." +msgstr "如果你可以选择,那么选择更小的常量会更好,这样你的结果将“更不容易”在性能分析统计中显示负值。" + +#: ../../library/profile.rst:652 +msgid "Using a custom timer" +msgstr "使用自定义计时器" + +#: ../../library/profile.rst:654 +msgid "" +"If you want to change how current time is determined (for example, to force " +"use of wall-clock time or elapsed process time), pass the timing function " +"you want to the :class:`Profile` class constructor::" +msgstr "" +"如果你想要改变当前时间的确定方式(例如,强制使用时钟时间或进程持续时间),请向 :class:`Profile` 类构造器传入你想要的计时函数::" + +#: ../../library/profile.rst:660 +msgid "" +"The resulting profiler will then call ``your_time_func``. Depending on " +"whether you are using :class:`profile.Profile` or :class:`cProfile.Profile`," +" ``your_time_func``'s return value will be interpreted differently:" +msgstr "" +"结果性能分析器将随后调用 ``your_time_func``。 根据你使用的是 :class:`profile.Profile` 还是 " +":class:`cProfile.Profile`,``your_time_func`` 的返回值将有不同的解读方式:" + +#: ../../library/profile.rst:678 +msgid ":class:`profile.Profile`" +msgstr ":class:`profile.Profile`" + +#: ../../library/profile.rst:665 +msgid "" +"``your_time_func`` should return a single number, or a list of numbers whose" +" sum is the current time (like what :func:`os.times` returns). If the " +"function returns a single time number, or the list of returned numbers has " +"length 2, then you will get an especially fast version of the dispatch " +"routine." +msgstr "" +"``your_time_func`` 应当返回一个数字,或一个总和为当前时间的数字列表(如同 :func:`os.times` 所返回的内容)。 " +"如果该函数返回一个数字,或所返回的数字列表长度为 2,则你将得到一个特别快速的调度例程版本。" + +#: ../../library/profile.rst:671 +msgid "" +"Be warned that you should calibrate the profiler class for the timer " +"function that you choose (see :ref:`profile-calibration`). For most " +"machines, a timer that returns a lone integer value will provide the best " +"results in terms of low overhead during profiling. (:func:`os.times` is " +"*pretty* bad, as it returns a tuple of floating point values). If you want " +"to substitute a better timer in the cleanest fashion, derive a class and " +"hardwire a replacement dispatch method that best handles your timer call, " +"along with the appropriate calibration constant." +msgstr "" +"请注意你应当为你选择的计时器函数校准性能分析器类 (参见 :ref:`profile-calibration`)。 " +"对于大多数机器来说,一个返回长整数值的计时器在性能分析期间将提供在低开销方面的最佳结果。 (:func:`os.times` 是 *相当* " +"糟糕的,因为它返回一个浮点数值的元组)。 " +"如果你想以最干净的方式替换一个更好的计时器,请派生一个类并硬连线一个能最佳地处理计时器调用的替换调度方法,并使用适当的校准常量。" + +#: ../../library/profile.rst:692 +msgid ":class:`cProfile.Profile`" +msgstr ":class:`cProfile.Profile`" + +#: ../../library/profile.rst:681 +msgid "" +"``your_time_func`` should return a single number. If it returns integers, " +"you can also invoke the class constructor with a second argument specifying " +"the real duration of one unit of time. For example, if " +"``your_integer_time_func`` returns times measured in thousands of seconds, " +"you would construct the :class:`Profile` instance as follows::" +msgstr "" +"``your_time_func`` 应当返回一个数字。 如果它返回整数,你还可以通过第二个参数指定一个单位时间的实际持续长度来唤起类构造器。 " +"举例来说,如果 ``your_integer_time_func`` 返回以千秒为单位的时间,则你应当以如下方式构造 :class:`Profile` " +"实例::" + +#: ../../library/profile.rst:689 +msgid "" +"As the :class:`cProfile.Profile` class cannot be calibrated, custom timer " +"functions should be used with care and should be as fast as possible. For " +"the best results with a custom timer, it might be necessary to hard-code it " +"in the C source of the internal :mod:`_lsprof` module." +msgstr "" +"由于 :class:`cProfile.Profile` 类无法被校准,因此自定义计时器函数应当要小心地使用并应当尽可能地快速。 " +"为了使自定义计时器获得最佳结果,可能需要在内部 :mod:`_lsprof` 模块的 C 源代码中对其进行硬编码。" + +#: ../../library/profile.rst:694 +msgid "" +"Python 3.3 adds several new functions in :mod:`time` that can be used to " +"make precise measurements of process or wall-clock time. For example, see " +":func:`time.perf_counter`." +msgstr "" +"Python 3.3 在 :mod:`time` 中添加了几个可被用来精确测量进程或时钟时间的新函数。 例如,参见 " +":func:`time.perf_counter`。" diff --git a/library/pty.po b/library/pty.po new file mode 100644 index 000000000..fe63ee0aa --- /dev/null +++ b/library/pty.po @@ -0,0 +1,161 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) 2001-2024, Python Software Foundation +# This file is distributed under the same license as the Python package. +# FIRST AUTHOR , YEAR. +# +# Translators: +# Menghua Xiao , 2018 +# Freesand Leo , 2020 +# Rafael Fontenelle , 2024 +# +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: Python 3.9\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2024-08-30 16:51+0000\n" +"PO-Revision-Date: 2017-02-16 23:23+0000\n" +"Last-Translator: Rafael Fontenelle , 2024\n" +"Language-Team: Chinese (China) (https://app.transifex.com/python-doc/teams/5390/zh_CN/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: zh_CN\n" +"Plural-Forms: nplurals=1; plural=0;\n" + +#: ../../library/pty.rst:2 +msgid ":mod:`pty` --- Pseudo-terminal utilities" +msgstr ":mod:`pty` --- 伪终端工具" + +#: ../../library/pty.rst:11 +msgid "**Source code:** :source:`Lib/pty.py`" +msgstr "**源代码:** :source:`Lib/pty.py`" + +#: ../../library/pty.rst:15 +msgid "" +"The :mod:`pty` module defines operations for handling the pseudo-terminal " +"concept: starting another process and being able to write to and read from " +"its controlling terminal programmatically." +msgstr ":mod:`pty` 模块定义了一些处理“伪终端”概念的操作:启动另一个进程并能以程序方式在其控制终端中进行读写。" + +#: ../../library/pty.rst:19 +msgid "" +"Because pseudo-terminal handling is highly platform dependent, there is code" +" to do it only for Linux. (The Linux code is supposed to work on other " +"platforms, but hasn't been tested yet.)" +msgstr "由于伪终端处理高度依赖于具体平台,因此此功能只有针对 Linux 的代码。 (Linux 代码也可在其他平台上工作,但是未经测试。)" + +#: ../../library/pty.rst:23 +msgid "The :mod:`pty` module defines the following functions:" +msgstr ":mod:`pty` 模块定义了下列函数:" + +#: ../../library/pty.rst:28 +msgid "" +"Fork. Connect the child's controlling terminal to a pseudo-terminal. Return " +"value is ``(pid, fd)``. Note that the child gets *pid* 0, and the *fd* is " +"*invalid*. The parent's return value is the *pid* of the child, and *fd* is " +"a file descriptor connected to the child's controlling terminal (and also to" +" the child's standard input and output)." +msgstr "" +"分叉。 将子进程的控制终端连接到一个伪终端。 返回值为 ``(pid, fd)``。 请注意子进程获得 *pid* 0 而 *fd* 为 " +"*invalid*。 父进程返回值为子进程的 *pid* 而 *fd* 为一个连接到子进程的控制终端(并同时连接到子进程的标准输入和输出)的文件描述符。" + +#: ../../library/pty.rst:37 +msgid "" +"Open a new pseudo-terminal pair, using :func:`os.openpty` if possible, or " +"emulation code for generic Unix systems. Return a pair of file descriptors " +"``(master, slave)``, for the master and the slave end, respectively." +msgstr "" +"打开一个新的伪终端对,如果可能将使用 :func:`os.openpty`,或是针对通用 Unix 系统的模拟代码。 返回一个文件描述符对 " +"``(master, slave)``,分别表示主从两端。" + +#: ../../library/pty.rst:44 +msgid "" +"Spawn a process, and connect its controlling terminal with the current " +"process's standard io. This is often used to baffle programs which insist on" +" reading from the controlling terminal. It is expected that the process " +"spawned behind the pty will eventually terminate, and when it does *spawn* " +"will return." +msgstr "" +"生成一个进程,并将其控制终端连接到当前进程的标准 io。 这常被用来应对坚持要从控制终端读取数据的程序。 在 pty " +"背后生成的进程预期最后将被终止,而且当它被终止时 *spawn* 将会返回。" + +#: ../../library/pty.rst:50 +msgid "" +"The functions *master_read* and *stdin_read* are passed a file descriptor " +"which they should read from, and they should always return a byte string. In" +" order to force spawn to return before the child process exits an " +":exc:`OSError` should be thrown." +msgstr "" +"会向 *master_read* 和 *stdin_read* 函数传入一个文件描述符供它们读取,并且它们总是应当返回一个字节串。 为了强制 spawn" +" 在子进程退出之前返回所以应当抛出 :exc:`OSError`。" + +#: ../../library/pty.rst:55 +msgid "" +"The default implementation for both functions will read and return up to " +"1024 bytes each time the function is called. The *master_read* callback is " +"passed the pseudoterminal’s master file descriptor to read output from the " +"child process, and *stdin_read* is passed file descriptor 0, to read from " +"the parent process's standard input." +msgstr "" +"两个函数的默认实现在每次函数被调用时将读取并返回至多 1024 个字节。 会向 *master_read* " +"回调传入伪终端的主文件描述符以从子进程读取输出,而向 *stdin_read* 传入文件描述符 0 以从父进程的标准输入读取数据。" + +#: ../../library/pty.rst:61 +msgid "" +"Returning an empty byte string from either callback is interpreted as an " +"end-of-file (EOF) condition, and that callback will not be called after " +"that. If *stdin_read* signals EOF the controlling terminal can no longer " +"communicate with the parent process OR the child process. Unless the child " +"process will quit without any input, *spawn* will then loop forever. If " +"*master_read* signals EOF the same behavior results (on linux at least)." +msgstr "" +"从两个回调返回空字节串会被解读为文件结束 (EOF) 条件,在此之后回调将不再被调用。 如果 *stdin_read* 发出 EOF " +"信号则控制终端就不能再与父进程或子进程进行通信。 除非子进程将不带任何输入就退出,否则随后 *spawn* 将一直循环下去。 如果 " +"*master_read* 发出 EOF 信号则会有相同的行为结果(至少是在 Linux 上)。" + +#: ../../library/pty.rst:68 +msgid "" +"If both callbacks signal EOF then *spawn* will probably never return, unless" +" *select* throws an error on your platform when passed three empty lists. " +"This is a bug, documented in `issue 26228 " +"`_." +msgstr "" +"如果两个回调都发出 EOF 信号则 *spawn* 可能将永不返回,除非在你的平台上当传入三个空列表时 *select* 会抛出一个错误。 " +"这是一个程序缺陷,相关文档见 `问题 26228 `_。" + +#: ../../library/pty.rst:72 +msgid "" +"Return the exit status value from :func:`os.waitpid` on the child process." +msgstr "从子进程中的 :func:`os.waitpid` 返回退出状态值。" + +#: ../../library/pty.rst:74 +msgid "" +":func:`waitstatus_to_exitcode` can be used to convert the exit status into " +"an exit code." +msgstr "可以使用 :func:`waitstatus_to_exitcode` 来将退出状态转换为退出码。" + +#: ../../library/pty.rst:77 +msgid "" +"Raises an :ref:`auditing event ` ``pty.spawn`` with argument " +"``argv``." +msgstr "引发一个 :ref:`审计事件 ` ``pty.spawn`` 并附带参数 ``argv``。" + +#: ../../library/pty.rst:79 +msgid "" +":func:`spawn` now returns the status value from :func:`os.waitpid` on the " +"child process." +msgstr ":func:`spawn` 现在会从子进程的 :func:`os.waitpid` 返回状态值。" + +#: ../../library/pty.rst:84 +msgid "Example" +msgstr "示例" + +#: ../../library/pty.rst:88 +msgid "" +"The following program acts like the Unix command :manpage:`script(1)`, using" +" a pseudo-terminal to record all input and output of a terminal session in a" +" \"typescript\". ::" +msgstr "" +"以下程序的作用类似于 Unix 命令 :manpage:`script(1)`,它使用一个伪终端来记录一个 \"typescript\" " +"里终端进程的所有输入和输出::" diff --git a/library/pwd.po b/library/pwd.po new file mode 100644 index 000000000..d4ac772e1 --- /dev/null +++ b/library/pwd.po @@ -0,0 +1,195 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) 2001-2022, Python Software Foundation +# This file is distributed under the same license as the Python package. +# FIRST AUTHOR , YEAR. +# +# Translators: +# 操旭 , 2017 +# Freesand Leo , 2018 +# Alpha Du , 2019 +# cdarlint , 2019 +# +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: Python 3.9\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2022-11-04 14:34+0000\n" +"PO-Revision-Date: 2017-02-16 23:23+0000\n" +"Last-Translator: cdarlint , 2019\n" +"Language-Team: Chinese (China) (https://www.transifex.com/python-doc/teams/5390/zh_CN/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: zh_CN\n" +"Plural-Forms: nplurals=1; plural=0;\n" + +#: ../../library/pwd.rst:2 +msgid ":mod:`pwd` --- The password database" +msgstr ":mod:`pwd` --- 用户密码数据库" + +#: ../../library/pwd.rst:10 +msgid "" +"This module provides access to the Unix user account and password database." +" It is available on all Unix versions." +msgstr "此模块可以访问 Unix 用户账户名及密码数据库,在所有 Unix 版本上均可使用。" + +#: ../../library/pwd.rst:13 +msgid "" +"Password database entries are reported as a tuple-like object, whose " +"attributes correspond to the members of the ``passwd`` structure (Attribute " +"field below, see ````):" +msgstr "密码数据库中的条目以元组对象返回,属性对应 ``passwd`` 中的结构(属性如下所示,可参考 ````):" + +#: ../../library/pwd.rst:18 +msgid "Index" +msgstr "索引" + +#: ../../library/pwd.rst:18 +msgid "Attribute" +msgstr "属性" + +#: ../../library/pwd.rst:18 +msgid "Meaning" +msgstr "意义" + +#: ../../library/pwd.rst:20 +msgid "0" +msgstr "0" + +#: ../../library/pwd.rst:20 +msgid "``pw_name``" +msgstr "``pw_name``" + +#: ../../library/pwd.rst:20 +msgid "Login name" +msgstr "登录名" + +#: ../../library/pwd.rst:22 +msgid "1" +msgstr "1" + +#: ../../library/pwd.rst:22 +msgid "``pw_passwd``" +msgstr "``pw_passwd``" + +#: ../../library/pwd.rst:22 +msgid "Optional encrypted password" +msgstr "密码,可能已经加密" + +#: ../../library/pwd.rst:24 +msgid "2" +msgstr "2" + +#: ../../library/pwd.rst:24 +msgid "``pw_uid``" +msgstr "``pw_uid``" + +#: ../../library/pwd.rst:24 +msgid "Numerical user ID" +msgstr "用户 ID 数值" + +#: ../../library/pwd.rst:26 +msgid "3" +msgstr "3" + +#: ../../library/pwd.rst:26 +msgid "``pw_gid``" +msgstr "``pw_gid``" + +#: ../../library/pwd.rst:26 +msgid "Numerical group ID" +msgstr "组 ID 数值" + +#: ../../library/pwd.rst:28 +msgid "4" +msgstr "4" + +#: ../../library/pwd.rst:28 +msgid "``pw_gecos``" +msgstr "``pw_gecos``" + +#: ../../library/pwd.rst:28 +msgid "User name or comment field" +msgstr "用户名或备注" + +#: ../../library/pwd.rst:30 +msgid "5" +msgstr "5" + +#: ../../library/pwd.rst:30 +msgid "``pw_dir``" +msgstr "``pw_dir``" + +#: ../../library/pwd.rst:30 +msgid "User home directory" +msgstr "用户主目录" + +#: ../../library/pwd.rst:32 +msgid "6" +msgstr "6" + +#: ../../library/pwd.rst:32 +msgid "``pw_shell``" +msgstr "``pw_shell``" + +#: ../../library/pwd.rst:32 +msgid "User command interpreter" +msgstr "用户的命令解释器" + +#: ../../library/pwd.rst:35 +msgid "" +"The uid and gid items are integers, all others are strings. :exc:`KeyError` " +"is raised if the entry asked for cannot be found." +msgstr "其中 uid 和 gid 是整数,其他是字符串,如果找不到对应的项目,抛出 :exc:`KeyError` 异常。" + +#: ../../library/pwd.rst:42 +msgid "" +"In traditional Unix the field ``pw_passwd`` usually contains a password " +"encrypted with a DES derived algorithm (see module :mod:`crypt`). However " +"most modern unices use a so-called *shadow password* system. On those " +"unices the *pw_passwd* field only contains an asterisk (``'*'``) or the " +"letter ``'x'`` where the encrypted password is stored in a file " +":file:`/etc/shadow` which is not world readable. Whether the *pw_passwd* " +"field contains anything useful is system-dependent. If available, the " +":mod:`spwd` module should be used where access to the encrypted password is " +"required." +msgstr "" +"传统的 Unix 系统中,``pw_passwd`` 的值通常使用 DES 导出的算法加密(参阅 :mod:`crypt` 模块)。不过现在的 unix" +" 系统使用 *影子密码* 系统。在这些 unix 上,*pw_passwd* " +"只包含星号(``'*'``)或字母(``'x'``),而加密的密码存储在文件 :file:`/etc/shadow` 中,此文件不是全局可读的。在 " +"*pw_passwd* 中是否包含有用信息是系统相关的。如果可以访问到加密的密码,就需要使用 :mod:`spwd` 模块了。" + +#: ../../library/pwd.rst:51 +msgid "It defines the following items:" +msgstr "本模块定义如下内容:" + +#: ../../library/pwd.rst:56 +msgid "Return the password database entry for the given numeric user ID." +msgstr "给定用户的数值 ID,返回密码数据库的对应项目。" + +#: ../../library/pwd.rst:61 +msgid "Return the password database entry for the given user name." +msgstr "给定用户名,返回密码数据库的对应项目。" + +#: ../../library/pwd.rst:66 +msgid "" +"Return a list of all available password database entries, in arbitrary " +"order." +msgstr "返回密码数据库中所有项目的列表,顺序不是固定的。" + +#: ../../library/pwd.rst:72 +msgid "Module :mod:`grp`" +msgstr "模块 :mod:`grp`" + +#: ../../library/pwd.rst:72 +msgid "An interface to the group database, similar to this." +msgstr "针对用户组数据库的接口,与本模块类似。" + +#: ../../library/pwd.rst:74 +msgid "Module :mod:`spwd`" +msgstr "模块 :mod:`spwd`" + +#: ../../library/pwd.rst:75 +msgid "An interface to the shadow password database, similar to this." +msgstr "针对影子密码数据库的接口,与本模块类似。" diff --git a/library/py_compile.po b/library/py_compile.po new file mode 100644 index 000000000..b598e200a --- /dev/null +++ b/library/py_compile.po @@ -0,0 +1,237 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) 2001-2022, Python Software Foundation +# This file is distributed under the same license as the Python package. +# FIRST AUTHOR , YEAR. +# +# Translators: +# Sean Chao , 2020 +# Freesand Leo , 2020 +# LaomoBK , 2021 +# +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: Python 3.9\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2022-11-04 14:34+0000\n" +"PO-Revision-Date: 2017-02-16 23:23+0000\n" +"Last-Translator: LaomoBK , 2021\n" +"Language-Team: Chinese (China) (https://www.transifex.com/python-doc/teams/5390/zh_CN/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: zh_CN\n" +"Plural-Forms: nplurals=1; plural=0;\n" + +#: ../../library/py_compile.rst:2 +msgid ":mod:`py_compile` --- Compile Python source files" +msgstr ":mod:`py_compile` --- 编译 Python 源文件" + +#: ../../library/py_compile.rst:10 +msgid "**Source code:** :source:`Lib/py_compile.py`" +msgstr "**源代码:** :source:`Lib/py_compile.py`" + +#: ../../library/py_compile.rst:16 +msgid "" +"The :mod:`py_compile` module provides a function to generate a byte-code " +"file from a source file, and another function used when the module source " +"file is invoked as a script." +msgstr ":mod:`py_compile` 模块提供了用来从源文件生成字节码的函数和另一个用于当模块源文件作为脚本被调用时的函数。" + +#: ../../library/py_compile.rst:20 +msgid "" +"Though not often needed, this function can be useful when installing modules" +" for shared use, especially if some of the users may not have permission to " +"write the byte-code cache files in the directory containing the source code." +msgstr "虽然不太常用,但这个函数在安装共享模块时还是很有用的,特别是当一些用户可能没有权限在包含源代码的目录中写字节码缓存文件时。" + +#: ../../library/py_compile.rst:27 +msgid "" +"Exception raised when an error occurs while attempting to compile the file." +msgstr "当编译文件过程中发生错误时,抛出的异常。" + +#: ../../library/py_compile.rst:32 +msgid "" +"Compile a source file to byte-code and write out the byte-code cache file. " +"The source code is loaded from the file named *file*. The byte-code is " +"written to *cfile*, which defaults to the :pep:`3147`/:pep:`488` path, " +"ending in ``.pyc``. For example, if *file* is ``/foo/bar/baz.py`` *cfile* " +"will default to ``/foo/bar/__pycache__/baz.cpython-32.pyc`` for Python 3.2." +" If *dfile* is specified, it is used as the name of the source file in " +"error messages instead of *file*. If *doraise* is true, a " +":exc:`PyCompileError` is raised when an error is encountered while compiling" +" *file*. If *doraise* is false (the default), an error string is written to " +"``sys.stderr``, but no exception is raised. This function returns the path " +"to byte-compiled file, i.e. whatever *cfile* value was used." +msgstr "" +"将源文件编译成字节码并写出字节码缓存文件。 源代码从名为 *file* 的文件中加载。 字节码会写入到 *cfile*,默认为 " +":pep:`3147`/:pep:`488` 路径,以 ``.pyc`` 结尾。 例如,如果 *file* 是 ``/foo/bar/baz.py`` " +"则对于 Python 3.2 *cfile* 将默认为 ``/foo/bar/__pycache__/baz.cpython-32.pyc``。 " +"如果指定了 *dfile*,则在错误信息中它将代替 *file* 作为源文件的名称。 如果 *doraise* 为真值,则当编译 *file* " +"遇到错误时将会引发 :exc:`PyCompileError`。 如果 *doraise* 为假值(默认),则将错误信息写入到 " +"``sys.stderr``,但不会引发异常。 此函数返回编译后字节码文件的路径,即 *cfile* 所使用的值。" + +#: ../../library/py_compile.rst:45 +msgid "" +"The *doraise* and *quiet* arguments determine how errors are handled while " +"compiling file. If *quiet* is 0 or 1, and *doraise* is false, the default " +"behaviour is enabled: an error string is written to ``sys.stderr``, and the " +"function returns ``None`` instead of a path. If *doraise* is true, a " +":exc:`PyCompileError` is raised instead. However if *quiet* is 2, no message" +" is written, and *doraise* has no effect." +msgstr "" +"*doraise* 和 *quiet* 参数确定在编译文件时如何处理错误。 如果 *quiet* 为 0 或 1,并且 *doraise* " +"为假值,则会启用默认行为:写入错误信息到 ``sys.stderr``,并且函数将返回 ``None`` 而非一个路径。 如果 *doraise* " +"为真值,则将改为引发 :exc:`PyCompileError`。 但是如果 *quiet* 为 2,则不会写入消息,并且 *doraise* " +"也不会有效果。" + +#: ../../library/py_compile.rst:52 +msgid "" +"If the path that *cfile* becomes (either explicitly specified or computed) " +"is a symlink or non-regular file, :exc:`FileExistsError` will be raised. " +"This is to act as a warning that import will turn those paths into regular " +"files if it is allowed to write byte-compiled files to those paths. This is " +"a side-effect of import using file renaming to place the final byte-compiled" +" file into place to prevent concurrent file writing issues." +msgstr "" +"如果 *cfile* 所表示(显式指定或计算得出)的路径为符号链接或非常规文件,则将引发 :exc:`FileExistsError`。 " +"此行为是用来警告如果允许写入编译后字节码文件到这些路径则导入操作将会把它们转为常规文件。 " +"这是使用文件重命名来将最终编译后字节码文件放置到位以防止并发文件写入问题的导入操作的附带效果。" + +#: ../../library/py_compile.rst:59 +msgid "" +"*optimize* controls the optimization level and is passed to the built-in " +":func:`compile` function. The default of ``-1`` selects the optimization " +"level of the current interpreter." +msgstr "" +"*optimize* 控制优化级别并会被传给内置的 :func:`compile` 函数。 默认值 ``-1`` 表示选择当前解释器的优化级别。" + +#: ../../library/py_compile.rst:63 +msgid "" +"*invalidation_mode* should be a member of the :class:`PycInvalidationMode` " +"enum and controls how the generated bytecode cache is invalidated at " +"runtime. The default is :attr:`PycInvalidationMode.CHECKED_HASH` if the " +":envvar:`SOURCE_DATE_EPOCH` environment variable is set, otherwise the " +"default is :attr:`PycInvalidationMode.TIMESTAMP`." +msgstr "" +"*invalidation_mode* 应当是 :class:`PycInvalidationMode` " +"枚举的成员,它控制在运行时如何让已生成的字节码缓存失效。 如果设置了 :envvar:`SOURCE_DATE_EPOCH` 环境变量则默认值为 " +":attr:`PycInvalidationMode.CHECKED_HASH`,否则默认值为 " +":attr:`PycInvalidationMode.TIMESTAMP`。" + +#: ../../library/py_compile.rst:69 +msgid "" +"Changed default value of *cfile* to be :PEP:`3147`-compliant. Previous " +"default was *file* + ``'c'`` (``'o'`` if optimization was enabled). Also " +"added the *optimize* parameter." +msgstr "" +"将 *cfile* 的默认值改成与 :PEP:`3147` 兼容。 之前的默认值是 *file* + ``'c'`` (如果启用优化则为 " +"``'o'``)。 同时也添加了 *optimize* 形参。" + +#: ../../library/py_compile.rst:74 +msgid "" +"Changed code to use :mod:`importlib` for the byte-code cache file writing. " +"This means file creation/writing semantics now match what :mod:`importlib` " +"does, e.g. permissions, write-and-move semantics, etc. Also added the caveat" +" that :exc:`FileExistsError` is raised if *cfile* is a symlink or non-" +"regular file." +msgstr "" +"将代码更改为使用 :mod:`importlib` 执行字节码缓存文件写入。 这意味着文件创建/写入的语义现在与 :mod:`importlib` " +"所做的相匹配,例如权限、写入和移动语义等等。 同时也添加了当 *cfile* 为符号链接或非常规文件时引发 :exc:`FileExistsError`" +" 的预警设置。" + +#: ../../library/py_compile.rst:81 +msgid "" +"The *invalidation_mode* parameter was added as specified in :pep:`552`. If " +"the :envvar:`SOURCE_DATE_EPOCH` environment variable is set, " +"*invalidation_mode* will be forced to " +":attr:`PycInvalidationMode.CHECKED_HASH`." +msgstr "" +"*invalidation_mode* 形参是根据 :pep:`552` 的描述添加的。 如果设置了 " +":envvar:`SOURCE_DATE_EPOCH` 环境变量,*invalidation_mode* 将被强制设为 " +":attr:`PycInvalidationMode.CHECKED_HASH`。" + +#: ../../library/py_compile.rst:87 +msgid "" +"The :envvar:`SOURCE_DATE_EPOCH` environment variable no longer overrides the" +" value of the *invalidation_mode* argument, and determines its default value" +" instead." +msgstr "" +":envvar:`SOURCE_DATE_EPOCH` 环境变量不会再覆盖 *invalidation_mode* 参数的值,而改为确定其默认值。" + +#: ../../library/py_compile.rst:92 +msgid "The *quiet* parameter was added." +msgstr "增加了 *quiet* 形参。" + +#: ../../library/py_compile.rst:98 +msgid "" +"A enumeration of possible methods the interpreter can use to determine " +"whether a bytecode file is up to date with a source file. The ``.pyc`` file " +"indicates the desired invalidation mode in its header. See :ref:`pyc-" +"invalidation` for more information on how Python invalidates ``.pyc`` files " +"at runtime." +msgstr "" +"一个由可用方法组成的枚举,解释器可以用来确定字节码文件是否与源文件保持一致。 ``.pyc`` 文件在其标头中指明了所需的失效模式。 请参阅 " +":ref:`pyc-invalidation` 了解有关 Python 在运行时如何让 ``.pyc`` 文件失效的更多信息。" + +#: ../../library/py_compile.rst:108 +msgid "" +"The ``.pyc`` file includes the timestamp and size of the source file, which " +"Python will compare against the metadata of the source file at runtime to " +"determine if the ``.pyc`` file needs to be regenerated." +msgstr "" +"``.pyc`` 文件包括时间戳和源文件的大小,Python 将在运行时将其与源文件的元数据进行比较以确定 ``.pyc`` 文件是否需要重新生成。" + +#: ../../library/py_compile.rst:114 +msgid "" +"The ``.pyc`` file includes a hash of the source file content, which Python " +"will compare against the source at runtime to determine if the ``.pyc`` file" +" needs to be regenerated." +msgstr "" +"``.pyc`` 文件包括源文件内容的哈希值,Python 将在运行时将其与源文件内容进行比较以确定 ``.pyc`` 文件是否需要重新生成。" + +#: ../../library/py_compile.rst:120 +msgid "" +"Like :attr:`CHECKED_HASH`, the ``.pyc`` file includes a hash of the source " +"file content. However, Python will at runtime assume the ``.pyc`` file is up" +" to date and not validate the ``.pyc`` against the source file at all." +msgstr "" +"类似于 :attr:`CHECKED_HASH`,``.pyc`` 文件包括源文件内容的哈希值。 但是,Python 将在运行时假定 ``.pyc`` " +"文件是最新的而完全不会将 ``.pyc`` 与源文件进行验证。" + +#: ../../library/py_compile.rst:124 +msgid "" +"This option is useful when the ``.pycs`` are kept up to date by some system " +"external to Python like a build system." +msgstr "此选项适用于 ``.pycs`` 由 Python 以外的某个系统例如构建系统来确保最新的情况。" + +#: ../../library/py_compile.rst:130 +msgid "" +"Compile several source files. The files named in *args* (or on the command " +"line, if *args* is ``None``) are compiled and the resulting byte-code is " +"cached in the normal manner. This function does not search a directory " +"structure to locate source files; it only compiles files named explicitly. " +"If ``'-'`` is the only parameter in args, the list of files is taken from " +"standard input." +msgstr "" +"编译多个源文件。 在 *args* 中(或者当 *args* 为 ``None`` 时则是在命令行中)指定的文件会被编译并将结果字节码以正常方式来缓存。" +" 此函数不会搜索目录结构来定位源文件;它只编译显式指定的文件。 如果 ``'-'`` 是 args 中唯一的值,则会从标准输入获取文件列表。" + +#: ../../library/py_compile.rst:137 +msgid "Added support for ``'-'``." +msgstr "添加了对 ``'-'`` 的支持。" + +#: ../../library/py_compile.rst:140 +msgid "" +"When this module is run as a script, the :func:`main` is used to compile all" +" the files named on the command line. The exit status is nonzero if one of " +"the files could not be compiled." +msgstr "当此模块作为脚本运行时,会使用 :func:`main` 来编译命令行中指定的所有文件。 如果某个文件无法被编译则退出状态将为非零值。" + +#: ../../library/py_compile.rst:147 +msgid "Module :mod:`compileall`" +msgstr "模块 :mod:`compileall`" + +#: ../../library/py_compile.rst:148 +msgid "Utilities to compile all Python source files in a directory tree." +msgstr "编译一个目录树中所有 Python 源文件的工具。" diff --git a/library/pyclbr.po b/library/pyclbr.po new file mode 100644 index 000000000..d604edd0a --- /dev/null +++ b/library/pyclbr.po @@ -0,0 +1,169 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) 2001-2022, Python Software Foundation +# This file is distributed under the same license as the Python package. +# FIRST AUTHOR , YEAR. +# +# Translators: +# Freesand Leo , 2020 +# +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: Python 3.9\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2022-11-04 14:34+0000\n" +"PO-Revision-Date: 2017-02-16 23:23+0000\n" +"Last-Translator: Freesand Leo , 2020\n" +"Language-Team: Chinese (China) (https://www.transifex.com/python-doc/teams/5390/zh_CN/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: zh_CN\n" +"Plural-Forms: nplurals=1; plural=0;\n" + +#: ../../library/pyclbr.rst:2 +msgid ":mod:`pyclbr` --- Python module browser support" +msgstr ":mod:`pyclbr` --- Python 模块浏览器支持" + +#: ../../library/pyclbr.rst:9 +msgid "**Source code:** :source:`Lib/pyclbr.py`" +msgstr "**源代码:** :source:`Lib/pyclbr.py`" + +#: ../../library/pyclbr.rst:13 +msgid "" +"The :mod:`pyclbr` module provides limited information about the functions, " +"classes, and methods defined in a Python-coded module. The information is " +"sufficient to implement a module browser. The information is extracted from" +" the Python source code rather than by importing the module, so this module " +"is safe to use with untrusted code. This restriction makes it impossible to " +"use this module with modules not implemented in Python, including all " +"standard and optional extension modules." +msgstr "" +":mod:`pyclbr` 模块提供了对于以 Python 编写的模块中定义的函数、类和方法的受限信息。 这种信息足够用来实现一个模块浏览器。 " +"这种信息是从 Python 源代码中直接提取而非通过导入模块,因此该模块可以安全地用于不受信任的代码。 此限制使得非 Python " +"实现的模块无法使用此模块,包括所有标准和可选的扩展模块。" + +#: ../../library/pyclbr.rst:25 +msgid "" +"Return a dictionary mapping module-level class names to class descriptors. " +"If possible, descriptors for imported base classes are included. Parameter " +"*module* is a string with the name of the module to read; it may be the name" +" of a module within a package. If given, *path* is a sequence of directory " +"paths prepended to ``sys.path``, which is used to locate the module source " +"code." +msgstr "" +"返回一个将模块层级的类名映射到类描述器的字典。 如果可能,将会包括已导入基类的描述器。 形参 *module* " +"为要读取模块名称的字符串;它可能是某个包内部的模块名称。 *path* 如果给出则为添加到 ``sys.path`` " +"开头的目录路径序列,它会被用于定位模块的源代码。" + +#: ../../library/pyclbr.rst:32 +msgid "" +"This function is the original interface and is only kept for back " +"compatibility. It returns a filtered version of the following." +msgstr "此函数为原始接口,仅保留用于向下兼容。 它会返回以下内容的过滤版本。" + +#: ../../library/pyclbr.rst:38 +msgid "" +"Return a dictionary-based tree containing a function or class descriptors " +"for each function and class defined in the module with a ``def`` or " +"``class`` statement. The returned dictionary maps module-level function and" +" class names to their descriptors. Nested objects are entered into the " +"children dictionary of their parent. As with readmodule, *module* names the" +" module to be read and *path* is prepended to sys.path. If the module being" +" read is a package, the returned dictionary has a key ``'__path__'`` whose " +"value is a list containing the package search path." +msgstr "" +"返回一个基于字典的树,其中包含与模块中每个用 ``def`` 或 ``class`` 语句定义的函数和类相对应的函数和类描述器。 " +"被返回的字典会将模块层级的函数和类名映射到它们的描述器。 嵌套的对象会被输入到它们的上级子目录中。 与 readmodule 一样,*module* " +"指明要读取的模块而 *path* 会被添加到 sys.path。 如果被读取的模块是一个包,则返回的字典将具有 ``'__path__'`` " +"键,其值是一个包含包搜索路径的列表。" + +#: ../../library/pyclbr.rst:48 +msgid "" +"Descriptors for nested definitions. They are accessed through the new " +"children attribute. Each has a new parent attribute." +msgstr "嵌套定义的描述器。 它们通过新的子属性来访问。 每个定义都会有一个新的上级属性。" + +#: ../../library/pyclbr.rst:52 +msgid "" +"The descriptors returned by these functions are instances of Function and " +"Class classes. Users are not expected to create instances of these classes." +msgstr "这些函数所返回的描述器是 Function 和 Class 类的实例。 用户不应自行创建这些类的实例。" + +#: ../../library/pyclbr.rst:60 +msgid "Function Objects" +msgstr "Function 对象" + +#: ../../library/pyclbr.rst:61 +msgid "" +"Class :class:`Function` instances describe functions defined by def " +"statements. They have the following attributes:" +msgstr ":class:`Function` 类的实例描述了由 def 语句所定义的函数。 它们具有下列属性:" + +#: ../../library/pyclbr.rst:67 +msgid "Name of the file in which the function is defined." +msgstr "函数定义所在的文件名称。" + +#: ../../library/pyclbr.rst:72 +msgid "The name of the module defining the function described." +msgstr "定义了所描述函数的模块名称。" + +#: ../../library/pyclbr.rst:77 +msgid "The name of the function." +msgstr "函数名称。" + +#: ../../library/pyclbr.rst:82 ../../library/pyclbr.rst:125 +msgid "The line number in the file where the definition starts." +msgstr "定义在文件中起始位置的行号。" + +#: ../../library/pyclbr.rst:87 +msgid "For top-level functions, None. For nested functions, the parent." +msgstr "对于最高层级函数为 None。 对于嵌套函数则为上级函数。" + +#: ../../library/pyclbr.rst:94 ../../library/pyclbr.rst:137 +msgid "" +"A dictionary mapping names to descriptors for nested functions and classes." +msgstr "将名称映射到嵌套函数和类描述器的字典。" + +#: ../../library/pyclbr.rst:103 +msgid "Class Objects" +msgstr "Class 对象" + +#: ../../library/pyclbr.rst:104 +msgid "" +"Class :class:`Class` instances describe classes defined by class statements." +" They have the same attributes as Functions and two more." +msgstr "" +":class:`Class` 类的实例描述了由 class 语句所定义的类。 它们具有与 Function 对象相同的属性以及两个额外属性。" + +#: ../../library/pyclbr.rst:110 +msgid "Name of the file in which the class is defined." +msgstr "类定义所在的文件名称。" + +#: ../../library/pyclbr.rst:115 +msgid "The name of the module defining the class described." +msgstr "定义了所描述类的模块名称。" + +#: ../../library/pyclbr.rst:120 +msgid "The name of the class." +msgstr "类名称。" + +#: ../../library/pyclbr.rst:130 +msgid "For top-level classes, None. For nested classes, the parent." +msgstr "对于最高层级类为 None。 对于嵌套类则为上级类。" + +#: ../../library/pyclbr.rst:145 +msgid "" +"A list of :class:`Class` objects which describe the immediate base classes " +"of the class being described. Classes which are named as superclasses but " +"which are not discoverable by :func:`readmodule_ex` are listed as a string " +"with the class name instead of as :class:`Class` objects." +msgstr "" +"一个 :class:`Class` 对象的列表,它们描述了所描述类的直接基类。 被命名为超类但无法被 :func:`readmodule_ex` " +"发现的类会作为类名字符串而非 :class:`Class` 对象列出。" + +#: ../../library/pyclbr.rst:154 +msgid "" +"A dictionary mapping method names to line numbers. This can be derived from" +" the newer children dictionary, but remains for back-compatibility." +msgstr "一个将方法名映射到行号的字典。 此属性可从更新的子目录中获取,仅保留用于向下兼容。" diff --git a/library/pydoc.po b/library/pydoc.po new file mode 100644 index 000000000..406c3ef9c --- /dev/null +++ b/library/pydoc.po @@ -0,0 +1,199 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) 2001-2025, Python Software Foundation +# This file is distributed under the same license as the Python package. +# FIRST AUTHOR , YEAR. +# +# Translators: +# Alpha Du , 2020 +# Freesand Leo , 2020 +# jaystone776 <1732865113@qq.com>, 2021 +# Rafael Fontenelle , 2025 +# +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: Python 3.9\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2025-02-07 16:40+0000\n" +"PO-Revision-Date: 2017-02-16 23:23+0000\n" +"Last-Translator: Rafael Fontenelle , 2025\n" +"Language-Team: Chinese (China) (https://app.transifex.com/python-doc/teams/5390/zh_CN/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: zh_CN\n" +"Plural-Forms: nplurals=1; plural=0;\n" + +#: ../../library/pydoc.rst:2 +msgid ":mod:`pydoc` --- Documentation generator and online help system" +msgstr ":mod:`pydoc` --- 文档生成器和在线帮助系统" + +#: ../../library/pydoc.rst:10 +msgid "**Source code:** :source:`Lib/pydoc.py`" +msgstr "**源代码:** :source:`Lib/pydoc.py`" + +#: ../../library/pydoc.rst:19 +msgid "" +"The :mod:`pydoc` module automatically generates documentation from Python " +"modules. The documentation can be presented as pages of text on the " +"console, served to a Web browser, or saved to HTML files." +msgstr "" +":mod:`pydoc` 模块自动利用 Python 模块生成文档。生成的文档可在控制台中显示为文本页面,还可在 Web 浏览器中查阅,或保存为 " +"HTML 文件。" + +#: ../../library/pydoc.rst:23 +msgid "" +"For modules, classes, functions and methods, the displayed documentation is " +"derived from the docstring (i.e. the :attr:`__doc__` attribute) of the " +"object, and recursively of its documentable members. If there is no " +"docstring, :mod:`pydoc` tries to obtain a description from the block of " +"comment lines just above the definition of the class, function or method in " +"the source file, or at the top of the module (see " +":func:`inspect.getcomments`)." +msgstr "" +"对于模块、类、函数和方法,显示的文档内容取自文档字符串(即 :attr:`__doc__` 属性),并会递归地从其带文档的成员中获取。 " +"如果没有文档字符串,:mod:`pydoc` 会尝试从类、函数或方法定义上方,或是模块顶部的注释行段落获取 (参见 " +":func:`inspect.getcomments`)." + +#: ../../library/pydoc.rst:30 +msgid "" +"The built-in function :func:`help` invokes the online help system in the " +"interactive interpreter, which uses :mod:`pydoc` to generate its " +"documentation as text on the console. The same text documentation can also " +"be viewed from outside the Python interpreter by running :program:`pydoc` as" +" a script at the operating system's command prompt. For example, running ::" +msgstr "" +"内置函数 :func:`help` 会发起调用交互式解释器的在线帮助系统,该系统使用 :mod:`pydoc` 在终端上生成文本形式的文档内容。 " +"同样的文本文档也可以在 Python 解释器以外通过在操作系统的命令提示符下以脚本方式运行 :program:`pydoc` 来查看。 例如,运行 ::" + +#: ../../library/pydoc.rst:38 +msgid "" +"at a shell prompt will display documentation on the :mod:`sys` module, in a " +"style similar to the manual pages shown by the Unix :program:`man` command." +" The argument to :program:`pydoc` can be the name of a function, module, or" +" package, or a dotted reference to a class, method, or function within a " +"module or module in a package. If the argument to :program:`pydoc` looks " +"like a path (that is, it contains the path separator for your operating " +"system, such as a slash in Unix), and refers to an existing Python source " +"file, then documentation is produced for that file." +msgstr "" +"在终端提示符下将通过 :mod:`sys` 模块显示文档内容,其样式类似于 Unix :program:`man` 命令所显示的指南页面。 " +":program:`pydoc` 的参数可以为函数、模块、包,或带点号的对模块中的类、方法或函数以及包中的模块的引用。 如果传给 " +":program:`pydoc` 的参数像是一个路径(即包含所在操作系统的路径分隔符,例如 Unix 的正斜杠),并且其指向一个现有的 Python " +"源文件,则会为该文件生成文档内容。" + +#: ../../library/pydoc.rst:49 +msgid "" +"In order to find objects and their documentation, :mod:`pydoc` imports the " +"module(s) to be documented. Therefore, any code on module level will be " +"executed on that occasion. Use an ``if __name__ == '__main__':`` guard to " +"only execute code when a file is invoked as a script and not just imported." +msgstr "" +"为了找到对象及其文档内容,:mod:`pydoc` 会导入文档所在的模块。 因此,任何模块层级的代码都将被执行。 请使用 ``if __name__ " +"== '__main__':`` 语句来确保一个文件的特定代码仅在作为脚本被发起调用时执行而不是在被导入时执行。" + +#: ../../library/pydoc.rst:54 +msgid "" +"When printing output to the console, :program:`pydoc` attempts to paginate " +"the output for easier reading. If the :envvar:`PAGER` environment variable " +"is set, :program:`pydoc` will use its value as a pagination program." +msgstr "" +"当打印输出到控制台时,:program:`pydoc` 会尝试对输出进行分页以方便阅读。 如果设置了 :envvar:`PAGER` " +"环境变量,:program:`pydoc` 将使用该变量值作为分页程序。" + +#: ../../library/pydoc.rst:58 +msgid "" +"Specifying a ``-w`` flag before the argument will cause HTML documentation " +"to be written out to a file in the current directory, instead of displaying " +"text on the console." +msgstr "在参数前指定 ``-w`` 旗标将把 HTML 文档写入到当前目录下的一个文件中,而不是在控制台中显示文本。" + +#: ../../library/pydoc.rst:62 +msgid "" +"Specifying a ``-k`` flag before the argument will search the synopsis lines " +"of all available modules for the keyword given as the argument, again in a " +"manner similar to the Unix :program:`man` command. The synopsis line of a " +"module is the first line of its documentation string." +msgstr "" +"在参数前指定 ``-k`` 旗标将在全部可用模块的提要行中搜索参数所给定的关键字,具体方式同样类似于 Unix :program:`man` 命令。 " +"模块的提要行就是其文档字符串的第一行。" + +#: ../../library/pydoc.rst:67 +msgid "" +"You can also use :program:`pydoc` to start an HTTP server on the local " +"machine that will serve documentation to visiting Web browsers. " +":program:`pydoc -p 1234` will start a HTTP server on port 1234, allowing you" +" to browse the documentation at ``http://localhost:1234/`` in your preferred" +" Web browser. Specifying ``0`` as the port number will select an arbitrary " +"unused port." +msgstr "" +"你还可以使用 :program:`pydoc` 在本机上启动一个 HTTP 服务,这将向来访的 Web 浏览器提供文档服务。 " +":program:`pydoc -p 1234` 将在 1234 端口上启动 HTTP 服务,允许你在你喜欢的 Web 服务器中通过 " +"``http://localhost:1234/`` 浏览文档内容。 指定 ``0`` 作为端口号将会任意选择一个未使用的端口。" + +#: ../../library/pydoc.rst:73 +msgid "" +":program:`pydoc -n ` will start the server listening at the given " +"hostname. By default the hostname is 'localhost' but if you want the server" +" to be reached from other machines, you may want to change the host name " +"that the server responds to. During development this is especially useful " +"if you want to run pydoc from within a container." +msgstr "" +":program:`pydoc -n ` 将启动在给定主机名上执行监听的服务。 默认主机名为 'localhost' " +"但如果你希望能从其他机器搜索该服务器,你可能会想要改变服务器所响应的主机名。 在开发阶段此特性会特别有用,因为这样你将能在一个容器中运行 pydoc。" + +#: ../../library/pydoc.rst:79 +msgid "" +":program:`pydoc -b` will start the server and additionally open a web " +"browser to a module index page. Each served page has a navigation bar at " +"the top where you can *Get* help on an individual item, *Search* all modules" +" with a keyword in their synopsis line, and go to the *Module index*, " +"*Topics* and *Keywords* pages." +msgstr "" +":program:`pydoc -b` 将启动服务并额外打开一个 Web 浏览器访问模块索引页。 所发布的每个页面顶端都带有导航栏,你可以点击 " +"*Get* 获取特定条目的帮助,点击 *Search* 在所有模块的提要行中搜索特定关键词,或是点击 *Module index*, *Topics* " +"和 *Keywords* 前往相应的页面。" + +#: ../../library/pydoc.rst:85 +msgid "" +"When :program:`pydoc` generates documentation, it uses the current " +"environment and path to locate modules. Thus, invoking :program:`pydoc " +"spam` documents precisely the version of the module you would get if you " +"started the Python interpreter and typed ``import spam``." +msgstr "" +"当 :program:`pydoc` 生成文档内容时,它会使用当前环境和路径来定位模块。 因此,唤起 :program:`pydoc spam` " +"得到的文档版本会与你启动 Python 解释器并输入 ``import spam`` 时得到的模块版本完全相同。" + +#: ../../library/pydoc.rst:90 +msgid "" +"Module docs for core modules are assumed to reside in " +"``https://docs.python.org/X.Y/library/`` where ``X`` and ``Y`` are the major" +" and minor version numbers of the Python interpreter. This can be " +"overridden by setting the :envvar:`PYTHONDOCS` environment variable to a " +"different URL or to a local directory containing the Library Reference " +"Manual pages." +msgstr "" +"核心模块的模块文档位置对应于 ``https://docs.python.org/X.Y/library/`` 其中 ``X`` 和 ``Y`` 是 " +"Python 解释器的主要版本号和小版本号。 这可通过设置 :envvar:`PYTHONDOCS` 环境变量来重载为指向不同的 URL 或包含 " +"Library Reference Manual 页面的本地目录。" + +#: ../../library/pydoc.rst:97 +msgid "Added the ``-b`` option." +msgstr "添加 ``-b`` 选项。" + +#: ../../library/pydoc.rst:100 +msgid "The ``-g`` command line option was removed." +msgstr "命令行选项 ``-g`` 已经移除。" + +#: ../../library/pydoc.rst:103 +msgid "" +":mod:`pydoc` now uses :func:`inspect.signature` rather than " +":func:`inspect.getfullargspec` to extract signature information from " +"callables." +msgstr "" +":mod:`pydoc` 现在会使用 :func:`inspect.signature` 而非 " +":func:`inspect.getfullargspec` 来从可调用对象中提取签名信息。" + +#: ../../library/pydoc.rst:108 +msgid "Added the ``-n`` option." +msgstr "添加 ``-n`` 选项。" diff --git a/library/pyexpat.po b/library/pyexpat.po new file mode 100644 index 000000000..b109d635d --- /dev/null +++ b/library/pyexpat.po @@ -0,0 +1,989 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) 2001-2024, Python Software Foundation +# This file is distributed under the same license as the Python package. +# FIRST AUTHOR , YEAR. +# +# Translators: +# Menghua Xiao , 2018 +# ppcfish , 2019 +# Freesand Leo , 2024 +# Rafael Fontenelle , 2024 +# +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: Python 3.9\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2024-05-03 21:11+0000\n" +"PO-Revision-Date: 2017-02-16 23:23+0000\n" +"Last-Translator: Rafael Fontenelle , 2024\n" +"Language-Team: Chinese (China) (https://app.transifex.com/python-doc/teams/5390/zh_CN/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: zh_CN\n" +"Plural-Forms: nplurals=1; plural=0;\n" + +#: ../../library/pyexpat.rst:2 +msgid ":mod:`xml.parsers.expat` --- Fast XML parsing using Expat" +msgstr ":mod:`xml.parsers.expat` --- 使用 Expat 的快速 XML 解析" + +#: ../../library/pyexpat.rst:21 +msgid "" +"The :mod:`pyexpat` module is not secure against maliciously constructed " +"data. If you need to parse untrusted or unauthenticated data see :ref:`xml-" +"vulnerabilities`." +msgstr "" +":mod:`pyexpat` 模块对于恶意构建的数据是不安全的。 如果你需要解析不受信任或未经身份验证的数据,请参阅 :ref:`xml-" +"vulnerabilities`。" + +#: ../../library/pyexpat.rst:28 +msgid "" +"The :mod:`xml.parsers.expat` module is a Python interface to the Expat non-" +"validating XML parser. The module provides a single extension type, " +":class:`xmlparser`, that represents the current state of an XML parser. " +"After an :class:`xmlparser` object has been created, various attributes of " +"the object can be set to handler functions. When an XML document is then " +"fed to the parser, the handler functions are called for the character data " +"and markup in the XML document." +msgstr "" +":mod:`xml.parsers.expat` 模块是针对 Expat 非验证 XML 解析器的 Python 接口。 此模块提供了一个扩展类型 " +":class:`xmlparser`,它代表一个 XML 解析器的当前状态。 在创建一个 :class:`xmlparser` " +"对象之后,该对象的各个属性可被设置为相应的处理器函数。 随后当将一个 XML 文档送入解析器时,就会为该 XML 文档中的字符数据和标记调用处理器函数。" + +#: ../../library/pyexpat.rst:38 +msgid "" +"This module uses the :mod:`pyexpat` module to provide access to the Expat " +"parser. Direct use of the :mod:`pyexpat` module is deprecated." +msgstr "" +"此模块使用 :mod:`pyexpat` 模块来提供对 Expat 解析器的访问。 直接使用 :mod:`pyexpat` 模块的方式已被弃用。" + +#: ../../library/pyexpat.rst:41 +msgid "This module provides one exception and one type object:" +msgstr "此模块提供了一个异常和一个类型对象:" + +#: ../../library/pyexpat.rst:46 +msgid "" +"The exception raised when Expat reports an error. See section " +":ref:`expaterror-objects` for more information on interpreting Expat errors." +msgstr "" +"此异常会在 Expat 报错时被引发。 请参阅 :ref:`expaterror-objects` 一节了解有关解读 Expat 错误的更多信息。" + +#: ../../library/pyexpat.rst:52 +msgid "Alias for :exc:`ExpatError`." +msgstr ":exc:`ExpatError` 的别名。" + +#: ../../library/pyexpat.rst:57 +msgid "The type of the return values from the :func:`ParserCreate` function." +msgstr "来自 :func:`ParserCreate` 函数的返回值的类型。" + +#: ../../library/pyexpat.rst:59 +msgid "The :mod:`xml.parsers.expat` module contains two functions:" +msgstr ":mod:`xml.parsers.expat` 模块包含两个函数:" + +#: ../../library/pyexpat.rst:64 +msgid "Returns an explanatory string for a given error number *errno*." +msgstr "返回给定错误号 *errno* 的解释性字符串。" + +#: ../../library/pyexpat.rst:69 +msgid "" +"Creates and returns a new :class:`xmlparser` object. *encoding*, if " +"specified, must be a string naming the encoding used by the XML data. " +"Expat doesn't support as many encodings as Python does, and its repertoire " +"of encodings can't be extended; it supports UTF-8, UTF-16, ISO-8859-1 " +"(Latin1), and ASCII. If *encoding* [1]_ is given it will override the " +"implicit or explicit encoding of the document." +msgstr "" +"创建并返回一个新的 :class:`xmlparser` 对象。 如果指定了 *encoding*,它必须为指定 XML " +"数据所使用的编码格式名称的字符串。 Expat 支持的编码格式没有 Python 那样多,而且它的编码格式库也不能被扩展;它支持 UTF-8, " +"UTF-16, ISO-8859-1 (Latin1) 和 ASCII。 如果给出了 *encoding* [1]_ " +"则它将覆盖隐式或显式指定的文档编码格式。" + +#: ../../library/pyexpat.rst:76 +msgid "" +"Expat can optionally do XML namespace processing for you, enabled by " +"providing a value for *namespace_separator*. The value must be a one-" +"character string; a :exc:`ValueError` will be raised if the string has an " +"illegal length (``None`` is considered the same as omission). When " +"namespace processing is enabled, element type names and attribute names that" +" belong to a namespace will be expanded. The element name passed to the " +"element handlers :attr:`StartElementHandler` and :attr:`EndElementHandler` " +"will be the concatenation of the namespace URI, the namespace separator " +"character, and the local part of the name. If the namespace separator is a " +"zero byte (``chr(0)``) then the namespace URI and the local part will be " +"concatenated without any separator." +msgstr "" +"可以选择让 Expat 为你做 XML 命名空间处理,这是通过提供 *namespace_separator* 值来启用的。 " +"该值必须是一个单字符的字符串;如果字符串的长度不合法则将引发 :exc:`ValueError` (``None`` 被视为等同于省略)。 " +"当命名空间处理被启用时,属于特定命名空间的元素类型名称和属性名称将被展开。 传递给The element name passed to the " +"元素处理器 :attr:`StartElementHandler` 和 :attr:`EndElementHandler` 的元素名称将为命名空间 " +"URI,命名空间分隔符和名称的本地部分的拼接。 如果命名空间分隔符是一个零字节 (``chr(0)``) 则命名空间 URI " +"和本地部分将被直接拼接而不带任何分隔符。" + +#: ../../library/pyexpat.rst:88 +msgid "" +"For example, if *namespace_separator* is set to a space character (``' '``) " +"and the following document is parsed:" +msgstr "举例来说,如果 *namespace_separator* 被设为空格符 (``' '``) 并对以下文档进行解析:" + +#: ../../library/pyexpat.rst:100 +msgid "" +":attr:`StartElementHandler` will receive the following strings for each " +"element::" +msgstr ":attr:`StartElementHandler` 将为每个元素获取以下字符串::" + +#: ../../library/pyexpat.rst:107 +msgid "" +"Due to limitations in the ``Expat`` library used by :mod:`pyexpat`, the " +":class:`xmlparser` instance returned can only be used to parse a single XML " +"document. Call ``ParserCreate`` for each document to provide unique parser " +"instances." +msgstr "" +"由于 :mod:`pyexpat` 所使用的 ``Expat`` 库的限制,被返回的 :class:`xmlparser` 实例只能被用来解析单个 " +"XML 文档。 请为每个文档调用 ``ParserCreate`` 来提供单独的解析器实例。" + +#: ../../library/pyexpat.rst:115 +msgid "`The Expat XML Parser `_" +msgstr "`The Expat XML Parser `_" + +#: ../../library/pyexpat.rst:116 +msgid "Home page of the Expat project." +msgstr "Expat 项目的主页。" + +#: ../../library/pyexpat.rst:122 +msgid "XMLParser Objects" +msgstr "XMLParser对象" + +#: ../../library/pyexpat.rst:124 +msgid ":class:`xmlparser` objects have the following methods:" +msgstr ":class:`xmlparser` 对象具有以下方法:" + +#: ../../library/pyexpat.rst:129 +msgid "" +"Parses the contents of the string *data*, calling the appropriate handler " +"functions to process the parsed data. *isfinal* must be true on the final " +"call to this method; it allows the parsing of a single file in fragments, " +"not the submission of multiple files. *data* can be the empty string at any " +"time." +msgstr "" +"解析字符串 *data* 的内容,调用适当的处理函数来处理解析后的数据。 在对此方法的最后一次调用时 *isfinal* " +"必须为真值;它允许以片段形式解析单个文件,而不是提交多个文件。 *data* 在任何时候都可以为空字符串。" + +#: ../../library/pyexpat.rst:138 +msgid "" +"Parse XML data reading from the object *file*. *file* only needs to provide" +" the ``read(nbytes)`` method, returning the empty string when there's no " +"more data." +msgstr "" +"解析从对象 *file* 读取的 XML 数据。 *file* 仅需提供 ``read(nbytes)`` 方法,当没有更多数据可读时将返回空字符串。" + +#: ../../library/pyexpat.rst:145 +msgid "" +"Sets the base to be used for resolving relative URIs in system identifiers " +"in declarations. Resolving relative identifiers is left to the application:" +" this value will be passed through as the *base* argument to the " +":func:`ExternalEntityRefHandler`, :func:`NotationDeclHandler`, and " +":func:`UnparsedEntityDeclHandler` functions." +msgstr "" +"设置要用于解析声明中的系统标识符的相对 URI 的基准。 解析相对标识符的任务会留给应用程序进行:这个值将作为 *base* 参数传递给 " +":func:`ExternalEntityRefHandler`, :func:`NotationDeclHandler` 和 " +":func:`UnparsedEntityDeclHandler` 函数。" + +#: ../../library/pyexpat.rst:154 +msgid "" +"Returns a string containing the base set by a previous call to " +":meth:`SetBase`, or ``None`` if :meth:`SetBase` hasn't been called." +msgstr "" +"返回包含之前调用 :meth:`SetBase` 所设置的基准位置的字符串,或者如果未调用 :meth:`SetBase` 则返回 ``None``。" + +#: ../../library/pyexpat.rst:160 +msgid "" +"Returns the input data that generated the current event as a string. The " +"data is in the encoding of the entity which contains the text. When called " +"while an event handler is not active, the return value is ``None``." +msgstr "" +"将生成当前事件的输入数据以字符串形式返回。 数据为包含文本的实体的编码格式。 如果被调用时未激活事件处理器,则返回值将为 ``None``。" + +#: ../../library/pyexpat.rst:167 +msgid "" +"Create a \"child\" parser which can be used to parse an external parsed " +"entity referred to by content parsed by the parent parser. The *context* " +"parameter should be the string passed to the " +":meth:`ExternalEntityRefHandler` handler function, described below. The " +"child parser is created with the :attr:`ordered_attributes` and " +":attr:`specified_attributes` set to the values of this parser." +msgstr "" +"创建一个“子”解析器,可被用来解析由父解析器解析的内容所引用的外部解析实体。 *context* 形参应当是传递给 " +":meth:`ExternalEntityRefHandler` 处理函数的字符串,具体如下所述。 子解析器创建时 " +":attr:`ordered_attributes` 和 :attr:`specified_attributes` 会被设为此解析器的值。" + +#: ../../library/pyexpat.rst:176 +msgid "" +"Control parsing of parameter entities (including the external DTD subset). " +"Possible *flag* values are :const:`XML_PARAM_ENTITY_PARSING_NEVER`, " +":const:`XML_PARAM_ENTITY_PARSING_UNLESS_STANDALONE` and " +":const:`XML_PARAM_ENTITY_PARSING_ALWAYS`. Return true if setting the flag " +"was successful." +msgstr "" +"控制参数实体(包括外部 DTD 子集)的解析。 可能的 *flag* 值有 " +":const:`XML_PARAM_ENTITY_PARSING_NEVER`, " +":const:`XML_PARAM_ENTITY_PARSING_UNLESS_STANDALONE` 和 " +":const:`XML_PARAM_ENTITY_PARSING_ALWAYS`。 如果该旗标设置成功则返回真值。" + +#: ../../library/pyexpat.rst:184 +msgid "" +"Calling this with a true value for *flag* (the default) will cause Expat to " +"call the :attr:`ExternalEntityRefHandler` with :const:`None` for all " +"arguments to allow an alternate DTD to be loaded. If the document does not " +"contain a document type declaration, the :attr:`ExternalEntityRefHandler` " +"will still be called, but the :attr:`StartDoctypeDeclHandler` and " +":attr:`EndDoctypeDeclHandler` will not be called." +msgstr "" +"调用时将 *flag* 设为真值(默认)将导致 Expat 调用 :attr:`ExternalEntityRefHandler` 时将所有参数设为 " +":const:`None` 以允许加载替代的 DTD。 如果文档不包含文档类型声明,:attr:`ExternalEntityRefHandler` " +"仍然会被调用,但 :attr:`StartDoctypeDeclHandler` 和 :attr:`EndDoctypeDeclHandler` " +"将不会被调用。" + +#: ../../library/pyexpat.rst:191 +msgid "" +"Passing a false value for *flag* will cancel a previous call that passed a " +"true value, but otherwise has no effect." +msgstr "为 *flag* 传入假值将将撤消之前传入真值的调用,除此之外没有其他影响。" + +#: ../../library/pyexpat.rst:194 +msgid "" +"This method can only be called before the :meth:`Parse` or :meth:`ParseFile`" +" methods are called; calling it after either of those have been called " +"causes :exc:`ExpatError` to be raised with the :attr:`code` attribute set to" +" ``errors.codes[errors.XML_ERROR_CANT_CHANGE_FEATURE_ONCE_PARSING]``." +msgstr "" +"此方法只能在调用 :meth:`Parse` 或 :meth:`ParseFile` 方法之前被调用;在已调用过这两个方法之后调用它会导致引发 " +":exc:`ExpatError` 且 :attr:`code` 属性被设为 " +"``errors.codes[errors.XML_ERROR_CANT_CHANGE_FEATURE_ONCE_PARSING]``。" + +#: ../../library/pyexpat.rst:203 +msgid "" +"Calling ``SetReparseDeferralEnabled(False)`` has security implications, as " +"detailed below; please make sure to understand these consequences prior to " +"using the ``SetReparseDeferralEnabled`` method." +msgstr "" +"调用 ``SetReparseDeferralEnabled(False)`` 会对安全产生影响,详情见下文;在使用 " +"``SetReparseDeferralEnabled`` 方法之前请务必了解这些后果。" + +#: ../../library/pyexpat.rst:207 +msgid "" +"Expat 2.6.0 introduced a security mechanism called \"reparse deferral\" " +"where instead of causing denial of service through quadratic runtime from " +"reparsing large tokens, reparsing of unfinished tokens is now delayed by " +"default until a sufficient amount of input is reached. Due to this delay, " +"registered handlers may — depending of the sizing of input chunks pushed to " +"Expat — no longer be called right after pushing new input to the parser. " +"Where immediate feedback and taking over responsiblity of protecting against" +" denial of service from large tokens are both wanted, calling " +"``SetReparseDeferralEnabled(False)`` disables reparse deferral for the " +"current Expat parser instance, temporarily or altogether. Calling " +"``SetReparseDeferralEnabled(True)`` allows re-enabling reparse deferral." +msgstr "" +"Expat 2.6.0 " +"引入了一种名为“重新解析延迟”的安全机制,这种机制不会发生因重新解析大量词元的指数级运行时而导致的拒绝服务,而是会在默认情况下延迟对未完成词元的重新解析直到达到足够的输入量。" +" 由于这种延迟,已注册的处理器有可能 —— 具体取决于推送到 Expat 的输入块大小 —— 不会在向解析器 推送新输入后立即被调用。 " +"如果希望获得即时反馈并接管防止大量词元导致拒绝服务的责任,可以调用 ``SetReparseDeferralEnabled(False)`` " +"暂时或完全禁用当前 Expat 解析器实例的重解析延迟。 调用 ``SetReparseDeferralEnabled(True)`` " +"将再次启用重新解析延迟。" + +#: ../../library/pyexpat.rst:220 +msgid "" +"Note that :meth:`SetReparseDeferralEnabled` has been backported to some " +"prior releases of CPython as a security fix. Check for availability of " +":meth:`SetReparseDeferralEnabled` using :func:`hasattr` if used in code " +"running across a variety of Python versions." +msgstr "" +"请注意 :meth:`SetReparseDeferralEnabled` 已作为安全修正被向下移植到一些较早的 CPython 发布版。 " +"如果在运行于多个 Python 版本的代码中要用到 :meth:`SetReparseDeferralEnabled` 请使用 " +":func:`hasattr` 来检查其可用性。" + +#: ../../library/pyexpat.rst:229 +msgid "" +"Returns whether reparse deferral is currently enabled for the given Expat " +"parser instance." +msgstr "返回当前是否为给定的 Expat 解析器实例启用了重新解析延迟。" + +#: ../../library/pyexpat.rst:235 +msgid ":class:`xmlparser` objects have the following attributes:" +msgstr ":class:`xmlparser` 对象具有下列属性:" + +#: ../../library/pyexpat.rst:240 +msgid "" +"The size of the buffer used when :attr:`buffer_text` is true. A new buffer " +"size can be set by assigning a new integer value to this attribute. When the" +" size is changed, the buffer will be flushed." +msgstr "" +"当 :attr:`buffer_text` 为真值时所使用的缓冲区大小。 可以通过将此属性赋一个新的整数值来设置一个新的缓冲区大小。 " +"当大小发生改变时,缓冲区将被刷新。" + +#: ../../library/pyexpat.rst:248 +msgid "" +"Setting this to true causes the :class:`xmlparser` object to buffer textual " +"content returned by Expat to avoid multiple calls to the " +":meth:`CharacterDataHandler` callback whenever possible. This can improve " +"performance substantially since Expat normally breaks character data into " +"chunks at every line ending. This attribute is false by default, and may be" +" changed at any time." +msgstr "" +"将此属性设为真值会使得 :class:`xmlparser` 对象缓冲 Expat 所返回的文本内容以尽可能地避免多次调用 " +":meth:`CharacterDataHandler` 回调。 这可以显著地提升性能,因为 Expat 通常会将字符数据在每个行结束的位置上进行分块。" +" 此属性默认为假值,但可以在任何时候被更改。" + +#: ../../library/pyexpat.rst:258 +msgid "" +"If :attr:`buffer_text` is enabled, the number of bytes stored in the buffer." +" These bytes represent UTF-8 encoded text. This attribute has no meaningful" +" interpretation when :attr:`buffer_text` is false." +msgstr "" +"当 :attr:`buffer_text` 被启用时,缓冲区中存储的字节数。 这些字节数据表示以 UTF-8 编码的文本。 当 " +":attr:`buffer_text` 为假值时此属性没有任何实际意义。" + +#: ../../library/pyexpat.rst:265 +msgid "" +"Setting this attribute to a non-zero integer causes the attributes to be " +"reported as a list rather than a dictionary. The attributes are presented " +"in the order found in the document text. For each attribute, two list " +"entries are presented: the attribute name and the attribute value. (Older " +"versions of this module also used this format.) By default, this attribute " +"is false; it may be changed at any time." +msgstr "" +"将该属性设为非零整数会使得各个属性被报告为列表而非字典。 各个属性会按照在文档文本中的出现顺序显示。 对于每个属性,将显示两个列表条目:属性名和属性值。" +" (该模块的较旧版本也使用了此格式。) 默认情况下,该属性为假值;它可以在任何时候被更改。" + +#: ../../library/pyexpat.rst:275 +msgid "" +"If set to a non-zero integer, the parser will report only those attributes " +"which were specified in the document instance and not those which were " +"derived from attribute declarations. Applications which set this need to be" +" especially careful to use what additional information is available from the" +" declarations as needed to comply with the standards for the behavior of XML" +" processors. By default, this attribute is false; it may be changed at any " +"time." +msgstr "" +"如果设为非零整数,解析器将只报告在文档实例中指明的属性而不报告来自属性声明的属性。 设置此属性的应用程序需要特别小心地使用从声明中获得的附加信息以符合 " +"XML 处理程序的行为标准。 默认情况下,该属性为假值;它可以在任何时候被更改。" + +#: ../../library/pyexpat.rst:283 +msgid "" +"The following attributes contain values relating to the most recent error " +"encountered by an :class:`xmlparser` object, and will only have correct " +"values once a call to :meth:`Parse` or :meth:`ParseFile` has raised an " +":exc:`xml.parsers.expat.ExpatError` exception." +msgstr "" +"下列属性包含与 :class:`xmlparser` 对象遇到的最近发生的错误有关联的值,并且一旦对 :meth:`Parse` 或 " +":meth:`ParseFile` 的调用引发了 :exc:`xml.parsers.expat.ExpatError` 异常就将只包含正确的值。" + +#: ../../library/pyexpat.rst:291 +msgid "Byte index at which an error occurred." +msgstr "错误发生位置的字节索引号。" + +#: ../../library/pyexpat.rst:296 +msgid "" +"Numeric code specifying the problem. This value can be passed to the " +":func:`ErrorString` function, or compared to one of the constants defined in" +" the ``errors`` object." +msgstr "" +"指明问题的的数字代码。 该值可被传给 :func:`ErrorString` 函数,或是与在 ``errors`` 对象中定义的常量之一进行比较。" + +#: ../../library/pyexpat.rst:303 +msgid "Column number at which an error occurred." +msgstr "错误发生位置的列号。" + +#: ../../library/pyexpat.rst:308 +msgid "Line number at which an error occurred." +msgstr "错误发生位置的行号。" + +#: ../../library/pyexpat.rst:310 +msgid "" +"The following attributes contain values relating to the current parse " +"location in an :class:`xmlparser` object. During a callback reporting a " +"parse event they indicate the location of the first of the sequence of " +"characters that generated the event. When called outside of a callback, the" +" position indicated will be just past the last parse event (regardless of " +"whether there was an associated callback)." +msgstr "" +"下列属性包含 :class:`xmlparser` 对象中关联到当前解析位置的值。 " +"在回调报告解析事件期间它们将指示生成事件的字符序列的第一个字符的位置。 " +"当在回调的外部被调用时,所指示的位置将恰好位于最后的解析事件之后(无论是否存在关联的回调)。" + +#: ../../library/pyexpat.rst:320 +msgid "Current byte index in the parser input." +msgstr "解析器输入的当前字节索引号。" + +#: ../../library/pyexpat.rst:325 +msgid "Current column number in the parser input." +msgstr "解析器输入的当前列号。" + +#: ../../library/pyexpat.rst:330 +msgid "Current line number in the parser input." +msgstr "解析器输入的当前行号。" + +#: ../../library/pyexpat.rst:332 +msgid "" +"Here is the list of handlers that can be set. To set a handler on an " +":class:`xmlparser` object *o*, use ``o.handlername = func``. *handlername* " +"must be taken from the following list, and *func* must be a callable object " +"accepting the correct number of arguments. The arguments are all strings, " +"unless otherwise stated." +msgstr "" +"可被设置的处理器列表。 要在一个 :class:`xmlparser` 对象 *o* 上设置处理器,请使用 ``o.handlername = " +"func``。 *handlername* 必须从下面的列表中获取,而 *func* 必须为接受正确数量参数的可调用对象。 " +"所有参数均为字符串,除非另外指明。" + +#: ../../library/pyexpat.rst:341 +msgid "" +"Called when the XML declaration is parsed. The XML declaration is the " +"(optional) declaration of the applicable version of the XML recommendation, " +"the encoding of the document text, and an optional \"standalone\" " +"declaration. *version* and *encoding* will be strings, and *standalone* will" +" be ``1`` if the document is declared standalone, ``0`` if it is declared " +"not to be standalone, or ``-1`` if the standalone clause was omitted. This " +"is only available with Expat version 1.95.0 or newer." +msgstr "" +"当解析 XML 声明时被调用。 XML 声明是 XML 建议适用版本、文档文本的编码格式,以及可选的“独立”声明的(可选)声明。 *version* 和" +" *encoding* 将为字符串,而 *standalone* 在文档被声明为独立时将为 ``1``,在文档被声明为非独立时将为 ``0``,或者在 " +"standalone 短语被省略时则为 ``-1``。 这仅适用于 Expat 的 1.95.0 或更新版本。" + +#: ../../library/pyexpat.rst:352 +msgid "" +"Called when Expat begins parsing the document type declaration (``'``." +msgstr "针对注释被调用。 *data* 是注释的文本,不包括开头的 ``''``。" + +#: ../../library/pyexpat.rst:466 +msgid "" +"Called at the start of a CDATA section. This and " +":attr:`EndCdataSectionHandler` are needed to be able to identify the " +"syntactical start and end for CDATA sections." +msgstr "" +"在一个 CDATA 节的开头被调用。 需要此方法和 :attr:`EndCdataSectionHandler` 以便能够标识 CDATA " +"节的语法开始和结束。" + +#: ../../library/pyexpat.rst:473 +msgid "Called at the end of a CDATA section." +msgstr "在一个 CDATA 节的末尾被调用。" + +#: ../../library/pyexpat.rst:478 +msgid "" +"Called for any characters in the XML document for which no applicable " +"handler has been specified. This means characters that are part of a " +"construct which could be reported, but for which no handler has been " +"supplied." +msgstr "针对 XML 文档中没有指定适用处理器的任何字符被调用。 这包括了所有属于可被报告的结构的一部分,但未提供处理器的字符。" + +#: ../../library/pyexpat.rst:485 +msgid "" +"This is the same as the :func:`DefaultHandler`, but doesn't inhibit " +"expansion of internal entities. The entity reference will not be passed to " +"the default handler." +msgstr "这与 :func:`DefaultHandler` 相同,但不会抑制内部实体的扩展。 实体引用将不会被传递给默认处理器。" + +#: ../../library/pyexpat.rst:492 +msgid "" +"Called if the XML document hasn't been declared as being a standalone " +"document. This happens when there is an external subset or a reference to a " +"parameter entity, but the XML declaration does not set standalone to ``yes``" +" in an XML declaration. If this handler returns ``0``, then the parser will" +" raise an :const:`XML_ERROR_NOT_STANDALONE` error. If this handler is not " +"set, no exception is raised by the parser for this condition." +msgstr "" +"当 XML 文档未被声明为独立文档时被调用。 这种情况发生在出现外部子集或对参数实体的引用,但 XML 声明没有在 XML 声明中将 " +"standalone 设为 ``yes`` 的时候。 如果这个处理器返回 ``0``,那么解析器将引发 " +":const:`XML_ERROR_NOT_STANDALONE` 错误。 如果这个处理器没有被设置,那么解析器就不会为这个条件引发任何异常。" + +#: ../../library/pyexpat.rst:502 +msgid "" +"Called for references to external entities. *base* is the current base, as " +"set by a previous call to :meth:`SetBase`. The public and system " +"identifiers, *systemId* and *publicId*, are strings if given; if the public " +"identifier is not given, *publicId* will be ``None``. The *context* value " +"is opaque and should only be used as described below." +msgstr "" +"为对外部实体的引用执行调用。 *base* 为当前的基准,由之前对 :meth:`SetBase` 的调用设置。 公有和系统标识符 *systemId*" +" 和 *publicId* 如果给出则圴为字符串;如果公有标识符未给出,则 *publicId* 将为 ``None``。 *context* " +"是仅根据以下说明来使用的不透明值。" + +#: ../../library/pyexpat.rst:508 +msgid "" +"For external entities to be parsed, this handler must be implemented. It is " +"responsible for creating the sub-parser using " +"``ExternalEntityParserCreate(context)``, initializing it with the " +"appropriate callbacks, and parsing the entity. This handler should return " +"an integer; if it returns ``0``, the parser will raise an " +":const:`XML_ERROR_EXTERNAL_ENTITY_HANDLING` error, otherwise parsing will " +"continue." +msgstr "" +"对于要解析的外部实体,这个处理器必须被实现。 它负责使用 ``ExternalEntityParserCreate(context)`` " +"来创建子解析器,通过适当的回调将其初始化,并对实体进行解析。 这个处理器应当返回一个整数;如果它返回 ``0``,则解析器将引发 " +":const:`XML_ERROR_EXTERNAL_ENTITY_HANDLING` 错误,否则解析将会继续。" + +#: ../../library/pyexpat.rst:516 +msgid "" +"If this handler is not provided, external entities are reported by the " +":attr:`DefaultHandler` callback, if provided." +msgstr "如果未提供这个处理器,外部实体会由 :attr:`DefaultHandler` 回调来报告,如果提供了该回调的话。" + +#: ../../library/pyexpat.rst:523 +msgid "ExpatError Exceptions" +msgstr "ExpatError 异常" + +#: ../../library/pyexpat.rst:528 +msgid ":exc:`ExpatError` exceptions have a number of interesting attributes:" +msgstr ":exc:`ExpatError` 异常包含几个有趣的属性:" + +#: ../../library/pyexpat.rst:533 +msgid "" +"Expat's internal error number for the specific error. The " +":data:`errors.messages ` dictionary maps " +"these error numbers to Expat's error messages. For example::" +msgstr "" +"Expat 对于指定错误的内部错误号。 :data:`errors.messages " +"` 字典会将这些错误号映射到 Expat 的错误消息。 例如::" + +#: ../../library/pyexpat.rst:545 +msgid "" +"The :mod:`~xml.parsers.expat.errors` module also provides error message " +"constants and a dictionary :data:`~xml.parsers.expat.errors.codes` mapping " +"these messages back to the error codes, see below." +msgstr "" +":mod:`~xml.parsers.expat.errors` 模块也提供了一些错误消息常量和一个将这些消息映射回错误码的字典 " +":data:`~xml.parsers.expat.errors.codes`,参见下文。" + +#: ../../library/pyexpat.rst:552 +msgid "" +"Line number on which the error was detected. The first line is numbered " +"``1``." +msgstr "检测到错误所在的行号。 首行的行号为 ``1``。" + +#: ../../library/pyexpat.rst:557 +msgid "" +"Character offset into the line where the error occurred. The first column " +"is numbered ``0``." +msgstr "错误发生在行中的字符偏移量。 首列的列号为 ``0``。" + +#: ../../library/pyexpat.rst:564 +msgid "Example" +msgstr "示例" + +#: ../../library/pyexpat.rst:566 +msgid "" +"The following program defines three handlers that just print out their " +"arguments. ::" +msgstr "以下程序定义了三个处理器,会简单地打印出它们的参数。::" + +#: ../../library/pyexpat.rst:590 +msgid "The output from this program is::" +msgstr "来自这个程序的输出是::" + +#: ../../library/pyexpat.rst:607 +msgid "Content Model Descriptions" +msgstr "内容模型描述" + +#: ../../library/pyexpat.rst:613 +msgid "" +"Content models are described using nested tuples. Each tuple contains four " +"values: the type, the quantifier, the name, and a tuple of children. " +"Children are simply additional content model descriptions." +msgstr "内容模型是使用嵌套的元组来描述的。 每个元素包含四个值:类型、限定符、名称和一个子元组。 子元组就是附加的内容模型描述。" + +#: ../../library/pyexpat.rst:617 +msgid "" +"The values of the first two fields are constants defined in the " +":mod:`xml.parsers.expat.model` module. These constants can be collected in " +"two groups: the model type group and the quantifier group." +msgstr "" +"前两个字段的值是在 :mod:`xml.parsers.expat.model` 模块中定义的常量。 这些常量可分为两组:模型类型组和限定符组。" + +#: ../../library/pyexpat.rst:621 +msgid "The constants in the model type group are:" +msgstr "模型类型组中的常量有:" + +#: ../../library/pyexpat.rst:627 +msgid "" +"The element named by the model name was declared to have a content model of " +"``ANY``." +msgstr "模型名称所指定的元素被声明为具有 ``ANY`` 内容模型。" + +#: ../../library/pyexpat.rst:634 +msgid "" +"The named element allows a choice from a number of options; this is used for" +" content models such as ``(A | B | C)``." +msgstr "命名元素允许从几个选项中选择;这被用于 ``(A | B | C)`` 形式的内容模型。" + +#: ../../library/pyexpat.rst:641 +msgid "Elements which are declared to be ``EMPTY`` have this model type." +msgstr "被声明为 ``EMPTY`` 的元素具有此模型类型。" + +#: ../../library/pyexpat.rst:655 +msgid "" +"Models which represent a series of models which follow one after the other " +"are indicated with this model type. This is used for models such as ``(A, " +"B, C)``." +msgstr "代表彼此相连的一系列模型的模型用此模型类型来指明。 这被用于 ``(A, B, C)`` 形式的模型。" + +#: ../../library/pyexpat.rst:658 +msgid "The constants in the quantifier group are:" +msgstr "限定符组中的常量有:" + +#: ../../library/pyexpat.rst:664 +msgid "No modifier is given, so it can appear exactly once, as for ``A``." +msgstr "未给出限定符,这样它可以只出现一次,例如 ``A``。" + +#: ../../library/pyexpat.rst:670 +msgid "" +"The model is optional: it can appear once or not at all, as for ``A?``." +msgstr "模型是可选的:它可以出现一次或完全不出现,例如 ``A?``。" + +#: ../../library/pyexpat.rst:676 +msgid "The model must occur one or more times (like ``A+``)." +msgstr "模型必须出现一次或多次 (例如 ``A+``)。" + +#: ../../library/pyexpat.rst:682 +msgid "The model must occur zero or more times, as for ``A*``." +msgstr "模型必须出现零次或多次,例如 ``A*``。" + +#: ../../library/pyexpat.rst:688 +msgid "Expat error constants" +msgstr "Expat 错误常量" + +#: ../../library/pyexpat.rst:692 +msgid "" +"The following constants are provided in the :mod:`xml.parsers.expat.errors` " +"module. These constants are useful in interpreting some of the attributes " +"of the :exc:`ExpatError` exception objects raised when an error has " +"occurred. Since for backwards compatibility reasons, the constants' value is" +" the error *message* and not the numeric error *code*, you do this by " +"comparing its :attr:`code` attribute with " +":samp:`errors.codes[errors.XML_ERROR_{CONSTANT_NAME}]`." +msgstr "" +"下列常量是在 :mod:`xml.parsers.expat.errors` 模块中提供的。 这些常量在有错误发生时解读被引发的 " +":exc:`ExpatError` 异常对象的某些属性时很有用处。 出于保持向下兼容性的理由,这些常量的值是错误 *消息* 而不是数字形式的错误 " +"*代码*,为此你可以将它的 :attr:`code` 属性和 " +":samp:`errors.codes[errors.XML_ERROR_{CONSTANT_NAME}]` 进行比较。" + +#: ../../library/pyexpat.rst:700 +msgid "The ``errors`` module has the following attributes:" +msgstr "``errors`` 模块具有以下属性:" + +#: ../../library/pyexpat.rst:704 +msgid "A dictionary mapping string descriptions to their error codes." +msgstr "将字符串描述映射到其错误代码的字典。" + +#: ../../library/pyexpat.rst:711 +msgid "A dictionary mapping numeric error codes to their string descriptions." +msgstr "将数字形式的错误代码映射到其字符串描述的字典。" + +#: ../../library/pyexpat.rst:721 +msgid "" +"An entity reference in an attribute value referred to an external entity " +"instead of an internal entity." +msgstr "属性值中指向一个外部实体而非内部实体的实体引用。" + +#: ../../library/pyexpat.rst:727 +msgid "" +"A character reference referred to a character which is illegal in XML (for " +"example, character ``0``, or '``�``')." +msgstr "指向一个在 XML 不合法的字符的字符引用 (例如,字符 ``0`` 或 '``�``')。" + +#: ../../library/pyexpat.rst:733 +msgid "" +"An entity reference referred to an entity which was declared with a " +"notation, so cannot be parsed." +msgstr "指向一个使用标注声明,因而无法被解析的实体的实体引用。" + +#: ../../library/pyexpat.rst:739 +msgid "An attribute was used more than once in a start tag." +msgstr "一个属性在一个开始标记中被使用超过一次。" + +#: ../../library/pyexpat.rst:747 +msgid "" +"Raised when an input byte could not properly be assigned to a character; for" +" example, a NUL byte (value ``0``) in a UTF-8 input stream." +msgstr "当一个输入字节无法被正确分配给一个字符时引发;例如,在 UTF-8 输入流中的 NUL 字节 (值为 ``0``)。" + +#: ../../library/pyexpat.rst:753 +msgid "Something other than whitespace occurred after the document element." +msgstr "在文档元素之后出现空白符以外的内容。" + +#: ../../library/pyexpat.rst:758 +msgid "" +"An XML declaration was found somewhere other than the start of the input " +"data." +msgstr "在输入数据开始位置以外的地方发现 XML 声明。" + +#: ../../library/pyexpat.rst:763 +msgid "" +"The document contains no elements (XML requires all documents to contain " +"exactly one top-level element).." +msgstr "文档不包含任何元素(XML 要求所有文档都包含恰好一个最高层级元素)。" + +#: ../../library/pyexpat.rst:769 +msgid "Expat was not able to allocate memory internally." +msgstr "Expat 无法在内部分配内存。" + +#: ../../library/pyexpat.rst:774 +msgid "A parameter entity reference was found where it was not allowed." +msgstr "在不被允许的位置发现一个参数实体引用。" + +#: ../../library/pyexpat.rst:779 +msgid "An incomplete character was found in the input." +msgstr "在输入中发出一个不完整的字符。" + +#: ../../library/pyexpat.rst:784 +msgid "" +"An entity reference contained another reference to the same entity; possibly" +" via a different name, and possibly indirectly." +msgstr "一个实体引用包含了对同一实体的另一个引用;可能是通过不同的名称,并可能是间接的引用。" + +#: ../../library/pyexpat.rst:790 +msgid "Some unspecified syntax error was encountered." +msgstr "遇到了某个未指明的语法错误。" + +#: ../../library/pyexpat.rst:795 +msgid "An end tag did not match the innermost open start tag." +msgstr "一个结束标记不能匹配到最内层的未关闭开始标记。" + +#: ../../library/pyexpat.rst:800 +msgid "" +"Some token (such as a start tag) was not closed before the end of the stream" +" or the next token was encountered." +msgstr "某些记号(例如开始标记)在流结束或遇到下一个记号之前还未关闭。" + +#: ../../library/pyexpat.rst:806 +msgid "A reference was made to an entity which was not defined." +msgstr "对一个未定义的实体进行了引用。" + +#: ../../library/pyexpat.rst:811 +msgid "The document encoding is not supported by Expat." +msgstr "文档编码格式不被 Expat 所支持。" + +#: ../../library/pyexpat.rst:816 +msgid "A CDATA marked section was not closed." +msgstr "一个 CDATA 标记节还未关闭。" + +#: ../../library/pyexpat.rst:824 +msgid "" +"The parser determined that the document was not \"standalone\" though it " +"declared itself to be in the XML declaration, and the " +":attr:`NotStandaloneHandler` was set and returned ``0``." +msgstr "" +"解析器确定文档不是“独立的”但它却在 XML 声明中声明自己是独立的,并且 :attr:`NotStandaloneHandler` 被设置为返回 " +"``0``。" + +#: ../../library/pyexpat.rst:837 +msgid "" +"An operation was requested that requires DTD support to be compiled in, but " +"Expat was configured without DTD support. This should never be reported by " +"a standard build of the :mod:`xml.parsers.expat` module." +msgstr "" +"请求了一个需要已编译 DTD 支持的操作,但 Expat 被配置为不带 DTD 支持。 此错误应当绝对不会被 " +":mod:`xml.parsers.expat` 模块的标准构建版本所报告。" + +#: ../../library/pyexpat.rst:844 +msgid "" +"A behavioral change was requested after parsing started that can only be " +"changed before parsing has started. This is (currently) only raised by " +":meth:`UseForeignDTD`." +msgstr "在解析开始之后请求一个只能在解析开始之前执行的行为改变。 此错误(目前)只能由 :meth:`UseForeignDTD` 所引发。" + +#: ../../library/pyexpat.rst:851 +msgid "An undeclared prefix was found when namespace processing was enabled." +msgstr "当命名空间处理被启用时发现一个未声明的前缀。" + +#: ../../library/pyexpat.rst:856 +msgid "" +"The document attempted to remove the namespace declaration associated with a" +" prefix." +msgstr "文档试图移除与某个前缀相关联的命名空间声明。" + +#: ../../library/pyexpat.rst:862 +msgid "A parameter entity contained incomplete markup." +msgstr "一个参数实体包含不完整的标记。" + +#: ../../library/pyexpat.rst:867 +msgid "The document contained no document element at all." +msgstr "文档完全未包含任何文档元素。" + +#: ../../library/pyexpat.rst:872 +msgid "There was an error parsing a text declaration in an external entity." +msgstr "解析一个外部实体中的文本声明时出现错误。" + +#: ../../library/pyexpat.rst:877 +msgid "Characters were found in the public id that are not allowed." +msgstr "在公有 id 中发现不被允许的字符。" + +#: ../../library/pyexpat.rst:882 +msgid "" +"The requested operation was made on a suspended parser, but isn't allowed. " +"This includes attempts to provide additional input or to stop the parser." +msgstr "在挂起的解析器上请求执行操作,但未获得允许。 这包括提供额外输入或停止解析器的尝试。" + +#: ../../library/pyexpat.rst:888 +msgid "" +"An attempt to resume the parser was made when the parser had not been " +"suspended." +msgstr "在解析器未被挂起的时候执行恢复解析器的尝试。" + +#: ../../library/pyexpat.rst:893 +msgid "This should not be reported to Python applications." +msgstr "此错误不应当被报告给 Python 应用程序。" + +#: ../../library/pyexpat.rst:898 +msgid "" +"The requested operation was made on a parser which was finished parsing " +"input, but isn't allowed. This includes attempts to provide additional " +"input or to stop the parser." +msgstr "在一个已经完成解析输入的解析器上请求执行操作,但未获得允许。 这包括提供额外输入或停止解析器的尝试。" + +#: ../../library/pyexpat.rst:907 +msgid "Footnotes" +msgstr "备注" + +#: ../../library/pyexpat.rst:908 +msgid "" +"The encoding string included in XML output should conform to the appropriate" +" standards. For example, \"UTF-8\" is valid, but \"UTF8\" is not. See " +"https://www.w3.org/TR/2006/REC-xml11-20060816/#NT-EncodingDecl and " +"https://www.iana.org/assignments/character-sets/character-sets.xhtml." +msgstr "" +"包括在 XML 输出中的编码格式字符串应当符合适当的标准。 例如 \"UTF-8\" 是有效的,但 \"UTF8\" 是无效的。 请参阅 " +"https://www.w3.org/TR/2006/REC-xml11-20060816/#NT-EncodingDecl 和 " +"https://www.iana.org/assignments/character-sets/character-sets.xhtml。" diff --git a/library/python.po b/library/python.po new file mode 100644 index 000000000..938dad379 --- /dev/null +++ b/library/python.po @@ -0,0 +1,33 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) 2001-2024, Python Software Foundation +# This file is distributed under the same license as the Python package. +# FIRST AUTHOR , YEAR. +# +# Translators: +# Rafael Fontenelle , 2024 +# +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: Python 3.9\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2024-02-16 21:12+0000\n" +"PO-Revision-Date: 2017-02-16 23:23+0000\n" +"Last-Translator: Rafael Fontenelle , 2024\n" +"Language-Team: Chinese (China) (https://app.transifex.com/python-doc/teams/5390/zh_CN/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: zh_CN\n" +"Plural-Forms: nplurals=1; plural=0;\n" + +#: ../../library/python.rst:5 +msgid "Python Runtime Services" +msgstr "Python 运行时服务" + +#: ../../library/python.rst:7 +msgid "" +"The modules described in this chapter provide a wide range of services " +"related to the Python interpreter and its interaction with its environment." +" Here's an overview:" +msgstr "本章描述的模块广泛服务于 Python 解释器及其与其环境的交互:" diff --git a/library/queue.po b/library/queue.po new file mode 100644 index 000000000..e43fd1a8e --- /dev/null +++ b/library/queue.po @@ -0,0 +1,369 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) 2001-2022, Python Software Foundation +# This file is distributed under the same license as the Python package. +# FIRST AUTHOR , YEAR. +# +# Translators: +# shiyu Peng , 2019 +# walkinrain , 2019 +# Zombie110year , 2019 +# Lordran , 2019 +# Freesand Leo , 2022 +# +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: Python 3.9\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2022-11-04 14:34+0000\n" +"PO-Revision-Date: 2017-02-16 23:24+0000\n" +"Last-Translator: Freesand Leo , 2022\n" +"Language-Team: Chinese (China) (https://www.transifex.com/python-doc/teams/5390/zh_CN/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: zh_CN\n" +"Plural-Forms: nplurals=1; plural=0;\n" + +#: ../../library/queue.rst:2 +msgid ":mod:`queue` --- A synchronized queue class" +msgstr ":mod:`queue` --- 一个同步的队列类" + +#: ../../library/queue.rst:7 +msgid "**Source code:** :source:`Lib/queue.py`" +msgstr "**源代码:** :source:`Lib/queue.py`" + +#: ../../library/queue.rst:11 +msgid "" +"The :mod:`queue` module implements multi-producer, multi-consumer queues. It" +" is especially useful in threaded programming when information must be " +"exchanged safely between multiple threads. The :class:`Queue` class in this" +" module implements all the required locking semantics." +msgstr "" +":mod:`queue` 模块实现了多生产者、多消费者队列。这特别适用于消息必须安全地在多线程间交换的线程编程。模块中的 :class:`Queue` " +"类实现了所有所需的锁定语义。" + +#: ../../library/queue.rst:16 +msgid "" +"The module implements three types of queue, which differ only in the order " +"in which the entries are retrieved. In a :abbr:`FIFO (first-in, first-out)`" +" queue, the first tasks added are the first retrieved. In a :abbr:`LIFO " +"(last-in, first-out)` queue, the most recently added entry is the first " +"retrieved (operating like a stack). With a priority queue, the entries are " +"kept sorted (using the :mod:`heapq` module) and the lowest valued entry is " +"retrieved first." +msgstr "" +"模块实现了三种类型的队列,它们的区别仅仅是条目取回的顺序。在 :abbr:`FIFO (first-in, first-out)` " +"队列中,先添加的任务先取回。在 :abbr:`LIFO (last-in, first-out)` " +"队列中,最近被添加的条目先取回(操作类似一个堆栈)。优先级队列中,条目将保持排序( 使用 :mod:`heapq` 模块 ) " +"并且最小值的条目第一个返回。" + +#: ../../library/queue.rst:24 +msgid "" +"Internally, those three types of queues use locks to temporarily block " +"competing threads; however, they are not designed to handle reentrancy " +"within a thread." +msgstr "在内部,这三个类型的队列使用锁来临时阻塞竞争线程;然而,它们并未被设计用于线程的重入性处理。" + +#: ../../library/queue.rst:28 +msgid "" +"In addition, the module implements a \"simple\" :abbr:`FIFO (first-in, " +"first-out)` queue type, :class:`SimpleQueue`, whose specific implementation " +"provides additional guarantees in exchange for the smaller functionality." +msgstr "" +"此外,模块实现了一个 \"简单的\" :abbr:`FIFO (first-in, first-out)` 队列类型, " +":class:`SimpleQueue` ,这个特殊实现为小功能在交换中提供额外的保障。" + +#: ../../library/queue.rst:33 +msgid "The :mod:`queue` module defines the following classes and exceptions:" +msgstr ":mod:`queue` 模块定义了下列类和异常:" + +#: ../../library/queue.rst:37 +msgid "" +"Constructor for a :abbr:`FIFO (first-in, first-out)` queue. *maxsize* is an" +" integer that sets the upperbound limit on the number of items that can be " +"placed in the queue. Insertion will block once this size has been reached, " +"until queue items are consumed. If *maxsize* is less than or equal to zero," +" the queue size is infinite." +msgstr "" +" :abbr:`FIFO (first-in, first-out)` 队列构造函数。 *maxsize* " +"是个整数,用于设置可以放入队列中的项目数的上限。当达到这个大小的时候,插入操作将阻塞至队列中的项目被消费掉。如果 *maxsize* " +"小于等于零,队列尺寸为无限大。" + +#: ../../library/queue.rst:45 +msgid "" +"Constructor for a :abbr:`LIFO (last-in, first-out)` queue. *maxsize* is an " +"integer that sets the upperbound limit on the number of items that can be " +"placed in the queue. Insertion will block once this size has been reached, " +"until queue items are consumed. If *maxsize* is less than or equal to zero," +" the queue size is infinite." +msgstr "" +":abbr:`LIFO (last-in, first-out)` 队列构造函数。 *maxsize* " +"是个整数,用于设置可以放入队列中的项目数的上限。当达到这个大小的时候,插入操作将阻塞至队列中的项目被消费掉。如果 *maxsize* " +"小于等于零,队列尺寸为无限大。" + +#: ../../library/queue.rst:54 +msgid "" +"Constructor for a priority queue. *maxsize* is an integer that sets the " +"upperbound limit on the number of items that can be placed in the queue. " +"Insertion will block once this size has been reached, until queue items are " +"consumed. If *maxsize* is less than or equal to zero, the queue size is " +"infinite." +msgstr "" +"优先级队列构造函数。 *maxsize* " +"是个整数,用于设置可以放入队列中的项目数的上限。当达到这个大小的时候,插入操作将阻塞至队列中的项目被消费掉。如果 *maxsize* " +"小于等于零,队列尺寸为无限大。" + +#: ../../library/queue.rst:59 +msgid "" +"The lowest valued entries are retrieved first (the lowest valued entry is " +"the one returned by ``sorted(list(entries))[0]``). A typical pattern for " +"entries is a tuple in the form: ``(priority_number, data)``." +msgstr "" +"最小值先被取出( 最小值条目是由 ``sorted(list(entries))[0]`` 返回的条目)。条目的典型模式是一个以下形式的元组: " +"``(priority_number, data)`` 。" + +#: ../../library/queue.rst:63 +msgid "" +"If the *data* elements are not comparable, the data can be wrapped in a " +"class that ignores the data item and only compares the priority number::" +msgstr "如果 *data* 元素没有可比性,数据将被包装在一个类中,忽略数据值,仅仅比较优先级数字 :" + +#: ../../library/queue.rst:76 +msgid "" +"Constructor for an unbounded :abbr:`FIFO (first-in, first-out)` queue. " +"Simple queues lack advanced functionality such as task tracking." +msgstr "无界的 :abbr:`FIFO (first-in, first-out)` 队列构造函数。简单的队列,缺少任务跟踪等高级功能。" + +#: ../../library/queue.rst:84 +msgid "" +"Exception raised when non-blocking :meth:`~Queue.get` (or " +":meth:`~Queue.get_nowait`) is called on a :class:`Queue` object which is " +"empty." +msgstr "" +"对空的 :class:`Queue` 对象,调用非阻塞的 :meth:`~Queue.get` (or " +":meth:`~Queue.get_nowait`) 时,引发的异常。" + +#: ../../library/queue.rst:91 +msgid "" +"Exception raised when non-blocking :meth:`~Queue.put` (or " +":meth:`~Queue.put_nowait`) is called on a :class:`Queue` object which is " +"full." +msgstr "" +"对满的 :class:`Queue` 对象,调用非阻塞的 :meth:`~Queue.put` (or " +":meth:`~Queue.put_nowait`) 时,引发的异常。" + +#: ../../library/queue.rst:99 +msgid "Queue Objects" +msgstr "Queue对象" + +#: ../../library/queue.rst:101 +msgid "" +"Queue objects (:class:`Queue`, :class:`LifoQueue`, or " +":class:`PriorityQueue`) provide the public methods described below." +msgstr "" +"队列对象 (:class:`Queue`, :class:`LifoQueue`, 或者 :class:`PriorityQueue`) " +"提供下列描述的公共方法。" + +#: ../../library/queue.rst:107 +msgid "" +"Return the approximate size of the queue. Note, qsize() > 0 doesn't " +"guarantee that a subsequent get() will not block, nor will qsize() < maxsize" +" guarantee that put() will not block." +msgstr "" +"返回队列的大致大小。注意,qsize() > 0 不保证后续的 get() 不被阻塞,qsize() < maxsize 也不保证 put() " +"不被阻塞。" + +#: ../../library/queue.rst:114 +msgid "" +"Return ``True`` if the queue is empty, ``False`` otherwise. If empty() " +"returns ``True`` it doesn't guarantee that a subsequent call to put() will " +"not block. Similarly, if empty() returns ``False`` it doesn't guarantee " +"that a subsequent call to get() will not block." +msgstr "" +"如果队列为空,返回 ``True`` ,否则返回 ``False`` 。如果 empty() 返回 ``True`` ,不保证后续调用的 put() " +"不被阻塞。类似的,如果 empty() 返回 ``False`` ,也不保证后续调用的 get() 不被阻塞。" + +#: ../../library/queue.rst:122 +msgid "" +"Return ``True`` if the queue is full, ``False`` otherwise. If full() " +"returns ``True`` it doesn't guarantee that a subsequent call to get() will " +"not block. Similarly, if full() returns ``False`` it doesn't guarantee that" +" a subsequent call to put() will not block." +msgstr "" +"如果队列是满的返回 ``True`` ,否则返回 ``False`` 。如果 full() 返回 ``True`` 不保证后续调用的 get() " +"不被阻塞。类似的,如果 full() 返回 ``False`` 也不保证后续调用的 put() 不被阻塞。" + +#: ../../library/queue.rst:130 +msgid "" +"Put *item* into the queue. If optional args *block* is true and *timeout* is" +" ``None`` (the default), block if necessary until a free slot is available. " +"If *timeout* is a positive number, it blocks at most *timeout* seconds and " +"raises the :exc:`Full` exception if no free slot was available within that " +"time. Otherwise (*block* is false), put an item on the queue if a free slot " +"is immediately available, else raise the :exc:`Full` exception (*timeout* is" +" ignored in that case)." +msgstr "" +"将 *item* 放入队列。如果可选参数 *block* 是 true 并且 *timeout* 是 ``None`` " +"(默认),则在必要时阻塞至有空闲插槽可用。如果 *timeout* 是个正数,将最多阻塞 *timeout* " +"秒,如果在这段时间没有可用的空闲插槽,将引发 :exc:`Full` 异常。反之 (*block* 是 false),如果空闲插槽立即可用,则把 " +"*item* 放入队列,否则引发 :exc:`Full` 异常 ( 在这种情况下,*timeout* 将被忽略)。" + +#: ../../library/queue.rst:141 +msgid "Equivalent to ``put(item, block=False)``." +msgstr "相当于 ``put(item, block=False)``。" + +#: ../../library/queue.rst:146 +msgid "" +"Remove and return an item from the queue. If optional args *block* is true " +"and *timeout* is ``None`` (the default), block if necessary until an item is" +" available. If *timeout* is a positive number, it blocks at most *timeout* " +"seconds and raises the :exc:`Empty` exception if no item was available " +"within that time. Otherwise (*block* is false), return an item if one is " +"immediately available, else raise the :exc:`Empty` exception (*timeout* is " +"ignored in that case)." +msgstr "" +"从队列中移除并返回一个项目。如果可选参数 *block* 是 true 并且 *timeout* 是 ``None`` " +"(默认值),则在必要时阻塞至项目可得到。如果 *timeout* 是个正数,将最多阻塞 *timeout* 秒,如果在这段时间内项目不能得到,将引发 " +":exc:`Empty` 异常。反之 (*block* 是 false) , 如果一个项目立即可得到,则返回一个项目,否则引发 :exc:`Empty`" +" 异常 (这种情况下,*timeout* 将被忽略)。" + +#: ../../library/queue.rst:153 +msgid "" +"Prior to 3.0 on POSIX systems, and for all versions on Windows, if *block* " +"is true and *timeout* is ``None``, this operation goes into an " +"uninterruptible wait on an underlying lock. This means that no exceptions " +"can occur, and in particular a SIGINT will not trigger a " +":exc:`KeyboardInterrupt`." +msgstr "" +"POSIX系统3.0之前,以及所有版本的Windows系统中,如果 *block* 是 true 并且 *timeout* 是 ``None`` , " +"这个操作将进入基础锁的不间断等待。这意味着,没有异常能发生,尤其是 SIGINT 将不会触发 :exc:`KeyboardInterrupt` 异常。" + +#: ../../library/queue.rst:161 ../../library/queue.rst:268 +msgid "Equivalent to ``get(False)``." +msgstr "相当于 ``get(False)`` 。" + +#: ../../library/queue.rst:163 +msgid "" +"Two methods are offered to support tracking whether enqueued tasks have been" +" fully processed by daemon consumer threads." +msgstr "提供了两个方法,用于支持跟踪 排队的任务 是否 被守护的消费者线程 完整的处理。" + +#: ../../library/queue.rst:169 +msgid "" +"Indicate that a formerly enqueued task is complete. Used by queue consumer " +"threads. For each :meth:`get` used to fetch a task, a subsequent call to " +":meth:`task_done` tells the queue that the processing on the task is " +"complete." +msgstr "" +"表示前面排队的任务已经被完成。被队列的消费者线程使用。每个 :meth:`get` 被用于获取一个任务, 后续调用 :meth:`task_done` " +"告诉队列,该任务的处理已经完成。" + +#: ../../library/queue.rst:173 +msgid "" +"If a :meth:`join` is currently blocking, it will resume when all items have " +"been processed (meaning that a :meth:`task_done` call was received for every" +" item that had been :meth:`put` into the queue)." +msgstr "" +"如果 :meth:`join` 当前正在阻塞,在所有条目都被处理后,将解除阻塞(意味着每个 :meth:`put` 进队列的条目的 " +":meth:`task_done` 都被收到)。" + +#: ../../library/queue.rst:177 +msgid "" +"Raises a :exc:`ValueError` if called more times than there were items placed" +" in the queue." +msgstr "如果被调用的次数多于放入队列中的项目数量,将引发 :exc:`ValueError` 异常 。" + +#: ../../library/queue.rst:183 +msgid "Blocks until all items in the queue have been gotten and processed." +msgstr "阻塞至队列中所有的元素都被接收和处理完毕。" + +#: ../../library/queue.rst:185 +msgid "" +"The count of unfinished tasks goes up whenever an item is added to the " +"queue. The count goes down whenever a consumer thread calls " +":meth:`task_done` to indicate that the item was retrieved and all work on it" +" is complete. When the count of unfinished tasks drops to zero, :meth:`join`" +" unblocks." +msgstr "" +"当条目添加到队列的时候,未完成任务的计数就会增加。每当消费者线程调用 :meth:`task_done` " +"表示这个条目已经被回收,该条目所有工作已经完成,未完成计数就会减少。当未完成计数降到零的时候, :meth:`join` 阻塞被解除。" + +#: ../../library/queue.rst:191 +msgid "Example of how to wait for enqueued tasks to be completed::" +msgstr "如何等待排队的任务被完成的示例:" + +#: ../../library/queue.rst:218 +msgid "SimpleQueue Objects" +msgstr "SimpleQueue 对象" + +#: ../../library/queue.rst:220 +msgid "" +":class:`SimpleQueue` objects provide the public methods described below." +msgstr ":class:`SimpleQueue` 对象提供下列描述的公共方法。" + +#: ../../library/queue.rst:224 +msgid "" +"Return the approximate size of the queue. Note, qsize() > 0 doesn't " +"guarantee that a subsequent get() will not block." +msgstr "返回队列的大致大小。注意,qsize() > 0 不保证后续的 get() 不被阻塞。" + +#: ../../library/queue.rst:230 +msgid "" +"Return ``True`` if the queue is empty, ``False`` otherwise. If empty() " +"returns ``False`` it doesn't guarantee that a subsequent call to get() will " +"not block." +msgstr "" +"如果队列为空,返回 ``True`` ,否则返回 ``False`` 。如果 empty() 返回 ``False`` ,不保证后续调用的 get() " +"不被阻塞。" + +#: ../../library/queue.rst:237 +msgid "" +"Put *item* into the queue. The method never blocks and always succeeds " +"(except for potential low-level errors such as failure to allocate memory). " +"The optional args *block* and *timeout* are ignored and only provided for " +"compatibility with :meth:`Queue.put`." +msgstr "" +"将 *item* 放入队列。此方法永不阻塞,始终成功(除了潜在的低级错误,例如内存分配失败)。可选参数 *block* 和 *timeout* " +"仅仅是为了保持 :meth:`Queue.put` 的兼容性而提供,其值被忽略。" + +#: ../../library/queue.rst:252 +msgid "" +"Equivalent to ``put(item, block=False)``, provided for compatibility with " +":meth:`Queue.put_nowait`." +msgstr "相当于 ``put(item, block=False)``,为保持与 :meth:`Queue.put_nowait` 的兼容性而提供。" + +#: ../../library/queue.rst:258 +msgid "" +"Remove and return an item from the queue. If optional args *block* is true " +"and *timeout* is ``None`` (the default), block if necessary until an item is" +" available. If *timeout* is a positive number, it blocks at most *timeout* " +"seconds and raises the :exc:`Empty` exception if no item was available " +"within that time. Otherwise (*block* is false), return an item if one is " +"immediately available, else raise the :exc:`Empty` exception (*timeout* is " +"ignored in that case)." +msgstr "" +"从队列中移除并返回一个项目。如果可选参数 *block* 是 true 并且 *timeout* 是 ``None`` " +"(默认值),则在必要时阻塞至项目可得到。如果 *timeout* 是个正数,将最多阻塞 *timeout* 秒,如果在这段时间内项目不能得到,将引发 " +":exc:`Empty` 异常。反之 (*block* 是 false) , 如果一个项目立即可得到,则返回一个项目,否则引发 :exc:`Empty`" +" 异常 (这种情况下,*timeout* 将被忽略)。" + +#: ../../library/queue.rst:275 +msgid "Class :class:`multiprocessing.Queue`" +msgstr "类 :class:`multiprocessing.Queue`" + +#: ../../library/queue.rst:274 +msgid "" +"A queue class for use in a multi-processing (rather than multi-threading) " +"context." +msgstr "一个用于多进程上下文的队列类(而不是多线程)。" + +#: ../../library/queue.rst:277 +msgid "" +":class:`collections.deque` is an alternative implementation of unbounded " +"queues with fast atomic :meth:`~collections.deque.append` and " +":meth:`~collections.deque.popleft` operations that do not require locking " +"and also support indexing." +msgstr "" +":class:`collections.deque` 是无界队列的一个替代实现,具有快速的不需要锁并且支持索引的原子化 " +":meth:`~collections.deque.append` 和 :meth:`~collections.deque.popleft` 操作。" diff --git a/library/quopri.po b/library/quopri.po new file mode 100644 index 000000000..dca7f9772 --- /dev/null +++ b/library/quopri.po @@ -0,0 +1,101 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) 2001-2022, Python Software Foundation +# This file is distributed under the same license as the Python package. +# FIRST AUTHOR , YEAR. +# +# Translators: +# walkinrain , 2019 +# Freesand Leo , 2019 +# +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: Python 3.9\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2022-11-04 14:34+0000\n" +"PO-Revision-Date: 2017-02-16 23:24+0000\n" +"Last-Translator: Freesand Leo , 2019\n" +"Language-Team: Chinese (China) (https://www.transifex.com/python-doc/teams/5390/zh_CN/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: zh_CN\n" +"Plural-Forms: nplurals=1; plural=0;\n" + +#: ../../library/quopri.rst:2 +msgid ":mod:`quopri` --- Encode and decode MIME quoted-printable data" +msgstr ":mod:`quopri` --- 编码与解码经过 MIME 转码的可打印数据" + +#: ../../library/quopri.rst:7 +msgid "**Source code:** :source:`Lib/quopri.py`" +msgstr "**源代码:** :source:`Lib/quopri.py`" + +#: ../../library/quopri.rst:15 +msgid "" +"This module performs quoted-printable transport encoding and decoding, as " +"defined in :rfc:`1521`: \"MIME (Multipurpose Internet Mail Extensions) Part " +"One: Mechanisms for Specifying and Describing the Format of Internet Message" +" Bodies\". The quoted-printable encoding is designed for data where there " +"are relatively few nonprintable characters; the base64 encoding scheme " +"available via the :mod:`base64` module is more compact if there are many " +"such characters, as when sending a graphics file." +msgstr "" +"此模块会执行转换后可打印的传输编码与解码,具体定义见 :rfc:`1521`: \"MIME (Multipurpose Internet Mail " +"Extensions) Part One: Mechanisms for Specifying and Describing the Format of" +" Internet Message Bodies\"。 转换后可打印的编码格式被设计用于只包含相对较少的不可打印字符的数据;如果存在大量这样的字符,通过" +" :mod:`base64` 模块所提供的 base64 编码方案会更为紧凑,例如当发送图片文件时。" + +#: ../../library/quopri.rst:25 +msgid "" +"Decode the contents of the *input* file and write the resulting decoded " +"binary data to the *output* file. *input* and *output* must be :term:`binary" +" file objects `. If the optional argument *header* is present " +"and true, underscore will be decoded as space. This is used to decode " +"\"Q\"-encoded headers as described in :rfc:`1522`: \"MIME (Multipurpose " +"Internet Mail Extensions) Part Two: Message Header Extensions for Non-ASCII " +"Text\"." +msgstr "" +"解码 *input* 文件的内容并将已解码二进制数据结果写入 *output* 文件。 *input* 和 *output* 必须为 " +":term:`二进制文件对象 `。 如果提供了可选参数 *header* 且为真值,下划线将被解码为空格。 " +"此函数可用于解码“Q”编码的头数据,具体描述见 :rfc:`1522`: \"MIME (Multipurpose Internet Mail " +"Extensions) Part Two: Message Header Extensions for Non-ASCII Text\"。" + +#: ../../library/quopri.rst:35 +msgid "" +"Encode the contents of the *input* file and write the resulting quoted-" +"printable data to the *output* file. *input* and *output* must be " +":term:`binary file objects `. *quotetabs*, a non-optional flag " +"which controls whether to encode embedded spaces and tabs; when true it " +"encodes such embedded whitespace, and when false it leaves them unencoded. " +"Note that spaces and tabs appearing at the end of lines are always encoded, " +"as per :rfc:`1521`. *header* is a flag which controls if spaces are encoded" +" as underscores as per :rfc:`1522`." +msgstr "" +"编码 *input* 文件的内容并将转换后可打印的数据结果写入 *output* 文件。 *input* 和 *output* 必须为 " +":term:`二进制文件对象 `. *quotetabs* " +"是一个非可选的旗标,它控制是否要编码内嵌的空格与制表符;当为真值时将编码此类内嵌空白符,当为假值时则保持原样不进行编码。 " +"请注意出现在行尾的空格与制表符总是会被编码,具体描述见 :rfc:`1521`。 *header* 旗标控制空格符是否要编码为下划线,具体描述见 " +":rfc:`1522`。" + +#: ../../library/quopri.rst:48 +msgid "" +"Like :func:`decode`, except that it accepts a source :class:`bytes` and " +"returns the corresponding decoded :class:`bytes`." +msgstr "类似 :func:`decode`,区别在于它接受一个源 :class:`bytes` 并返回对应的已解码 :class:`bytes`。" + +#: ../../library/quopri.rst:54 +msgid "" +"Like :func:`encode`, except that it accepts a source :class:`bytes` and " +"returns the corresponding encoded :class:`bytes`. By default, it sends a " +"``False`` value to *quotetabs* parameter of the :func:`encode` function." +msgstr "" +"类型 :func:`encode`,区别在于它接受一个源 :class:`bytes` 并返回对应的已编码 :class:`bytes`。 " +"在默认情况下,它会发送 ``False`` 值给 :func:`encode` 函数的 *quotetabs* 形参。" + +#: ../../library/quopri.rst:62 +msgid "Module :mod:`base64`" +msgstr "模块 :mod:`base64`" + +#: ../../library/quopri.rst:63 +msgid "Encode and decode MIME base64 data" +msgstr "编码与解码 MIME base64 数据" diff --git a/library/random.po b/library/random.po new file mode 100644 index 000000000..4d09d6552 --- /dev/null +++ b/library/random.po @@ -0,0 +1,747 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) 2001-2022, Python Software Foundation +# This file is distributed under the same license as the Python package. +# FIRST AUTHOR , YEAR. +# +# Translators: +# Alpha Du , 2019 +# nick <2330458484@qq.com>, 2020 +# Freesand Leo , 2022 +# +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: Python 3.9\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2022-11-04 14:34+0000\n" +"PO-Revision-Date: 2017-02-16 23:24+0000\n" +"Last-Translator: Freesand Leo , 2022\n" +"Language-Team: Chinese (China) (https://www.transifex.com/python-doc/teams/5390/zh_CN/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: zh_CN\n" +"Plural-Forms: nplurals=1; plural=0;\n" + +#: ../../library/random.rst:2 +msgid ":mod:`random` --- Generate pseudo-random numbers" +msgstr ":mod:`random` --- 生成伪随机数" + +#: ../../library/random.rst:7 +msgid "**Source code:** :source:`Lib/random.py`" +msgstr "**源码:** :source:`Lib/random.py`" + +#: ../../library/random.rst:11 +msgid "" +"This module implements pseudo-random number generators for various " +"distributions." +msgstr "该模块实现了各种分布的伪随机数生成器。" + +#: ../../library/random.rst:14 +msgid "" +"For integers, there is uniform selection from a range. For sequences, there " +"is uniform selection of a random element, a function to generate a random " +"permutation of a list in-place, and a function for random sampling without " +"replacement." +msgstr "对于整数,从范围中有统一的选择。 对于序列,存在随机元素的统一选择、用于生成列表的随机排列的函数、以及用于随机抽样而无需替换的函数。" + +#: ../../library/random.rst:19 +msgid "" +"On the real line, there are functions to compute uniform, normal (Gaussian)," +" lognormal, negative exponential, gamma, and beta distributions. For " +"generating distributions of angles, the von Mises distribution is available." +msgstr "在实数轴上,有计算均匀、正态(高斯)、对数正态、负指数、伽马和贝塔分布的函数。 为了生成角度分布,可以使用 von Mises 分布。" + +#: ../../library/random.rst:23 +msgid "" +"Almost all module functions depend on the basic function :func:`.random`, " +"which generates a random float uniformly in the semi-open range [0.0, 1.0)." +" Python uses the Mersenne Twister as the core generator. It produces " +"53-bit precision floats and has a period of 2\\*\\*19937-1. The underlying " +"implementation in C is both fast and threadsafe. The Mersenne Twister is " +"one of the most extensively tested random number generators in existence. " +"However, being completely deterministic, it is not suitable for all " +"purposes, and is completely unsuitable for cryptographic purposes." +msgstr "" +"几乎所有模块函数都依赖于基本函数 :func:`.random` ,它在半开放区间 [0.0,1.0) 内均匀生成随机浮点数。 Python 使用 " +"Mersenne Twister 作为核心生成器。 它产生 53 位精度浮点数,周期为 2\\*\\*19937-1 ,其在 C " +"中的底层实现既快又线程安全。 Mersenne Twister 是现存最广泛测试的随机数发生器之一。 " +"但是,因为完全确定性,它不适用于所有目的,并且完全不适合加密目的。" + +#: ../../library/random.rst:32 +msgid "" +"The functions supplied by this module are actually bound methods of a hidden" +" instance of the :class:`random.Random` class. You can instantiate your own" +" instances of :class:`Random` to get generators that don't share state." +msgstr "" +"这个模块提供的函数实际上是 :class:`random.Random` 类的隐藏实例的绑定方法。 你可以实例化自己的 :class:`Random` " +"类实例以获取不共享状态的生成器。" + +#: ../../library/random.rst:36 +msgid "" +"Class :class:`Random` can also be subclassed if you want to use a different " +"basic generator of your own devising: in that case, override the " +":meth:`~Random.random`, :meth:`~Random.seed`, :meth:`~Random.getstate`, and " +":meth:`~Random.setstate` methods. Optionally, a new generator can supply a " +":meth:`~Random.getrandbits` method --- this allows :meth:`randrange` to " +"produce selections over an arbitrarily large range." +msgstr "" +"如果你想使用自己设计的不同基础生成器,类 :class:`Random` 也可以作为子类:在这种情况下,重载 " +":meth:`~Random.random` 、 :meth:`~Random.seed` 、 :meth:`~Random.getstate` 以及 " +":meth:`~Random.setstate` 方法。可选地,新生成器可以提供 :meth:`~Random.getrandbits` 方法——这允许" +" :meth:`randrange` 在任意大的范围内产生选择。" + +#: ../../library/random.rst:42 +msgid "" +"The :mod:`random` module also provides the :class:`SystemRandom` class which" +" uses the system function :func:`os.urandom` to generate random numbers from" +" sources provided by the operating system." +msgstr "" +":mod:`random` 模块还提供 :class:`SystemRandom` 类,它使用系统函数 :func:`os.urandom` " +"从操作系统提供的源生成随机数。" + +#: ../../library/random.rst:48 +msgid "" +"The pseudo-random generators of this module should not be used for security " +"purposes. For security or cryptographic uses, see the :mod:`secrets` " +"module." +msgstr "不应将此模块的伪随机生成器用于安全目的。 有关安全性或加密用途,请参阅 :mod:`secrets` 模块。" + +#: ../../library/random.rst:54 +msgid "" +"M. Matsumoto and T. Nishimura, \"Mersenne Twister: A 623-dimensionally " +"equidistributed uniform pseudorandom number generator\", ACM Transactions on" +" Modeling and Computer Simulation Vol. 8, No. 1, January pp.3--30 1998." +msgstr "" +"M. Matsumoto and T. Nishimura, \"Mersenne Twister: A 623-dimensionally " +"equidistributed uniform pseudorandom number generator\", ACM Transactions on" +" Modeling and Computer Simulation Vol. 8, No. 1, January pp.3--30 1998." + +#: ../../library/random.rst:59 +msgid "" +"`Complementary-Multiply-with-Carry recipe " +"`_ for a compatible " +"alternative random number generator with a long period and comparatively " +"simple update operations." +msgstr "" +"`Complementary-Multiply-with-Carry recipe " +"`_ " +"用于兼容的替代随机数发生器,具有长周期和相对简单的更新操作。" + +#: ../../library/random.rst:66 +msgid "Bookkeeping functions" +msgstr "簿记功能" + +#: ../../library/random.rst:70 +msgid "Initialize the random number generator." +msgstr "初始化随机数生成器。" + +#: ../../library/random.rst:72 +msgid "" +"If *a* is omitted or ``None``, the current system time is used. If " +"randomness sources are provided by the operating system, they are used " +"instead of the system time (see the :func:`os.urandom` function for details " +"on availability)." +msgstr "" +"如果 *a* 被省略或为 ``None`` ,则使用当前系统时间。 如果操作系统提供随机源,则使用它们而不是系统时间(有关可用性的详细信息,请参阅 " +":func:`os.urandom` 函数)。" + +#: ../../library/random.rst:77 +msgid "If *a* is an int, it is used directly." +msgstr "如果 *a* 是 int 类型,则直接使用。" + +#: ../../library/random.rst:79 +msgid "" +"With version 2 (the default), a :class:`str`, :class:`bytes`, or " +":class:`bytearray` object gets converted to an :class:`int` and all of its " +"bits are used." +msgstr "" +"对于版本2(默认的),:class:`str` 、 :class:`bytes` 或 :class:`bytearray` 对象转换为 " +":class:`int` 并使用它的所有位。" + +#: ../../library/random.rst:82 +msgid "" +"With version 1 (provided for reproducing random sequences from older " +"versions of Python), the algorithm for :class:`str` and :class:`bytes` " +"generates a narrower range of seeds." +msgstr "" +"对于版本1(用于从旧版本的Python再现随机序列),用于 :class:`str` 和 :class:`bytes` 的算法生成更窄的种子范围。" + +#: ../../library/random.rst:86 +msgid "" +"Moved to the version 2 scheme which uses all of the bits in a string seed." +msgstr "已移至版本2方案,该方案使用字符串种子中的所有位。" + +#: ../../library/random.rst:89 +msgid "" +"In the future, the *seed* must be one of the following types: *NoneType*, " +":class:`int`, :class:`float`, :class:`str`, :class:`bytes`, or " +":class:`bytearray`." +msgstr "" +"在将来,*seed* 必须是下列类型之一: *NoneType*, :class:`int`, :class:`float`, " +":class:`str`, :class:`bytes` 或 :class:`bytearray`。" + +#: ../../library/random.rst:96 +msgid "" +"Return an object capturing the current internal state of the generator. " +"This object can be passed to :func:`setstate` to restore the state." +msgstr "返回捕获生成器当前内部状态的对象。 这个对象可以传递给 :func:`setstate` 来恢复状态。" + +#: ../../library/random.rst:102 +msgid "" +"*state* should have been obtained from a previous call to :func:`getstate`, " +"and :func:`setstate` restores the internal state of the generator to what it" +" was at the time :func:`getstate` was called." +msgstr "" +"*state* 应该是从之前调用 :func:`getstate` 获得的,并且 :func:`setstate` 将生成器的内部状态恢复到 " +":func:`getstate` 被调用时的状态。" + +#: ../../library/random.rst:108 +msgid "Functions for bytes" +msgstr "用于字节数据的函数" + +#: ../../library/random.rst:112 +msgid "Generate *n* random bytes." +msgstr "生成 *n* 个随机字节。" + +#: ../../library/random.rst:114 +msgid "" +"This method should not be used for generating security tokens. Use " +":func:`secrets.token_bytes` instead." +msgstr "此方法不可用于生成安全凭据。 那应当使用 :func:`secrets.token_bytes`。" + +#: ../../library/random.rst:121 +msgid "Functions for integers" +msgstr "整数用函数" + +#: ../../library/random.rst:126 +msgid "" +"Return a randomly selected element from ``range(start, stop, step)``. This " +"is equivalent to ``choice(range(start, stop, step))``, but doesn't actually " +"build a range object." +msgstr "" +"从 ``range(start, stop, step)`` 返回一个随机选择的元素。 这相当于 ``choice(range(start, stop," +" step))`` ,但实际上并没有构建一个 range 对象。" + +#: ../../library/random.rst:130 +msgid "" +"The positional argument pattern matches that of :func:`range`. Keyword " +"arguments should not be used because the function may use them in unexpected" +" ways." +msgstr "位置参数模式匹配 :func:`range` 。不应使用关键字参数,因为该函数可能以意外的方式使用它们。" + +#: ../../library/random.rst:133 +msgid "" +":meth:`randrange` is more sophisticated about producing equally distributed " +"values. Formerly it used a style like ``int(random()*n)`` which could " +"produce slightly uneven distributions." +msgstr "" +":meth:`randrange` 在生成均匀分布的值方面更为复杂。 " +"以前它使用了像``int(random()*n)``这样的形式,它可以产生稍微不均匀的分布。" + +#: ../../library/random.rst:140 +msgid "" +"Return a random integer *N* such that ``a <= N <= b``. Alias for " +"``randrange(a, b+1)``." +msgstr "返回随机整数 *N* 满足 ``a <= N <= b``。相当于 ``randrange(a, b+1)``。" + +#: ../../library/random.rst:145 +msgid "" +"Returns a non-negative Python integer with *k* random bits. This method is " +"supplied with the MersenneTwister generator and some other generators may " +"also provide it as an optional part of the API. When available, " +":meth:`getrandbits` enables :meth:`randrange` to handle arbitrarily large " +"ranges." +msgstr "" +"返回具有 *k* 个随机比特位的非负 Python 整数。 此方法随 MersenneTwister 生成器一起提供,其他一些生成器也可能将其作为 " +"API 的可选部分提供。 在可能的情况下,:meth:`getrandbits` 会启用 :meth:`randrange` 来处理任意大的区间。" + +#: ../../library/random.rst:151 +msgid "This method now accepts zero for *k*." +msgstr "此方法现在接受零作为 *k* 的值。" + +#: ../../library/random.rst:156 +msgid "Functions for sequences" +msgstr "序列用函数" + +#: ../../library/random.rst:160 +msgid "" +"Return a random element from the non-empty sequence *seq*. If *seq* is " +"empty, raises :exc:`IndexError`." +msgstr "从非空序列 *seq* 返回一个随机元素。 如果 *seq* 为空,则引发 :exc:`IndexError`。" + +#: ../../library/random.rst:165 +msgid "" +"Return a *k* sized list of elements chosen from the *population* with " +"replacement. If the *population* is empty, raises :exc:`IndexError`." +msgstr "" +"从 *population* 中有重复地随机选取元素,返回大小为 *k* 的元素列表。 如果 *population* 为空,则引发 " +":exc:`IndexError`。" + +#: ../../library/random.rst:168 +msgid "" +"If a *weights* sequence is specified, selections are made according to the " +"relative weights. Alternatively, if a *cum_weights* sequence is given, the " +"selections are made according to the cumulative weights (perhaps computed " +"using :func:`itertools.accumulate`). For example, the relative weights " +"``[10, 5, 30, 5]`` are equivalent to the cumulative weights ``[10, 15, 45, " +"50]``. Internally, the relative weights are converted to cumulative weights" +" before making selections, so supplying the cumulative weights saves work." +msgstr "" +"如果指定了 *weight* 序列,则根据相对权重进行选择。 或者,如果给出 *cum_weights* 序列,则根据累积权重(可能使用 " +":func:`itertools.accumulate` 计算)进行选择。 例如,相对权重``[10, 5, 30, 5]``相当于累积权重``[10," +" 15, 45, 50]``。 在内部,相对权重在进行选择之前会转换为累积权重,因此提供累积权重可以节省工作量。" + +#: ../../library/random.rst:177 +msgid "" +"If neither *weights* nor *cum_weights* are specified, selections are made " +"with equal probability. If a weights sequence is supplied, it must be the " +"same length as the *population* sequence. It is a :exc:`TypeError` to " +"specify both *weights* and *cum_weights*." +msgstr "" +"如果既未指定 *weight* 也未指定 *cum_weights* ,则以相等的概率进行选择。 如果提供了权重序列,则它必须与 " +"*population* 序列的长度相同。 一个 :exc:`TypeError` 指定了 *weights* 和*cum_weights*。" + +#: ../../library/random.rst:182 +msgid "" +"The *weights* or *cum_weights* can use any numeric type that interoperates " +"with the :class:`float` values returned by :func:`random` (that includes " +"integers, floats, and fractions but excludes decimals). Behavior is " +"undefined if any weight is negative. A :exc:`ValueError` is raised if all " +"weights are zero." +msgstr "" +"*weights* 或 *cum_weights* 可使用 :func:`random` 所返回的能与 :class:`float` " +"值进行相互运算的任何数字类型(包括 int、float、Fraction 但不包括 Decimal)。 权重为负值的行为未有定义。 " +"如果权重为负值则将引发 :exc:`ValueError`。" + +#: ../../library/random.rst:188 +msgid "" +"For a given seed, the :func:`choices` function with equal weighting " +"typically produces a different sequence than repeated calls to " +":func:`choice`. The algorithm used by :func:`choices` uses floating point " +"arithmetic for internal consistency and speed. The algorithm used by " +":func:`choice` defaults to integer arithmetic with repeated selections to " +"avoid small biases from round-off error." +msgstr "" +"对于给定的种子,具有相等加权的 :func:`choices` 函数通常产生与重复调用 :func:`choice` 不同的序列。 " +":func:`choices` 使用的算法使用浮点运算来实现内部一致性和速度。 :func:`choice` " +"使用的算法默认为重复选择的整数运算,以避免因舍入误差引起的小偏差。" + +#: ../../library/random.rst:197 +msgid "Raises a :exc:`ValueError` if all weights are zero." +msgstr "如果所有权重均为负值则将引发 :exc:`ValueError`。" + +#: ../../library/random.rst:203 +msgid "Shuffle the sequence *x* in place." +msgstr "将序列 *x* 随机打乱位置。" + +#: ../../library/random.rst:205 +msgid "" +"The optional argument *random* is a 0-argument function returning a random " +"float in [0.0, 1.0); by default, this is the function :func:`.random`." +msgstr "" +"可选参数 *random* 是一个0参数函数,在 [0.0, 1.0) 中返回随机浮点数;默认情况下,这是函数 :func:`.random` 。" + +#: ../../library/random.rst:208 +msgid "" +"To shuffle an immutable sequence and return a new shuffled list, use " +"``sample(x, k=len(x))`` instead." +msgstr "要改变一个不可变的序列并返回一个新的打乱列表,请使用``sample(x, k=len(x))``。" + +#: ../../library/random.rst:211 +msgid "" +"Note that even for small ``len(x)``, the total number of permutations of *x*" +" can quickly grow larger than the period of most random number generators. " +"This implies that most permutations of a long sequence can never be " +"generated. For example, a sequence of length 2080 is the largest that can " +"fit within the period of the Mersenne Twister random number generator." +msgstr "" +"请注意,即使对于小的 ``len(x)``,*x* 的排列总数也可以快速增长,大于大多数随机数生成器的周期。 这意味着长序列的大多数排列永远不会产生。 " +"例如,长度为2080的序列是可以在 Mersenne Twister 随机数生成器的周期内拟合的最大序列。" + +#: ../../library/random.rst:218 +msgid "The optional parameter *random*." +msgstr "可选形参 *random*。" + +#: ../../library/random.rst:223 +msgid "" +"Return a *k* length list of unique elements chosen from the population " +"sequence or set. Used for random sampling without replacement." +msgstr "返回从总体序列或集合中选择的唯一元素的 *k* 长度列表。 用于无重复的随机抽样。" + +#: ../../library/random.rst:226 +msgid "" +"Returns a new list containing elements from the population while leaving the" +" original population unchanged. The resulting list is in selection order so" +" that all sub-slices will also be valid random samples. This allows raffle " +"winners (the sample) to be partitioned into grand prize and second place " +"winners (the subslices)." +msgstr "" +"返回包含来自总体的元素的新列表,同时保持原始总体不变。 结果列表按选择顺序排列,因此所有子切片也将是有效的随机样本。 " +"这允许抽奖获奖者(样本)被划分为大奖和第二名获胜者(子切片)。" + +#: ../../library/random.rst:232 +msgid "" +"Members of the population need not be :term:`hashable` or unique. If the " +"population contains repeats, then each occurrence is a possible selection in" +" the sample." +msgstr "总体成员不必是 :term:`hashable` 或 unique 。 如果总体包含重复,则每次出现都是样本中可能的选择。" + +#: ../../library/random.rst:235 +msgid "" +"Repeated elements can be specified one at a time or with the optional " +"keyword-only *counts* parameter. For example, ``sample(['red', 'blue'], " +"counts=[4, 2], k=5)`` is equivalent to ``sample(['red', 'red', 'red', 'red'," +" 'blue', 'blue'], k=5)``." +msgstr "" +"重复的元素可以一个个地直接列出,或使用可选的仅限关键字形参 *counts* 来指定。 例如,``sample(['red', 'blue'], " +"counts=[4, 2], k=5)`` 等价于 ``sample(['red', 'red', 'red', 'red', 'blue', " +"'blue'], k=5)``。" + +#: ../../library/random.rst:240 +msgid "" +"To choose a sample from a range of integers, use a :func:`range` object as " +"an argument. This is especially fast and space efficient for sampling from " +"a large population: ``sample(range(10000000), k=60)``." +msgstr "" +"要从一系列整数中选择样本,请使用 :func:`range` 对象作为参数。 " +"对于从大量人群中采样,这种方法特别快速且节省空间:``sample(range(10000000), k=60)`` 。" + +#: ../../library/random.rst:244 +msgid "" +"If the sample size is larger than the population size, a :exc:`ValueError` " +"is raised." +msgstr "如果样本大小大于总体大小,则引发 :exc:`ValueError` 。" + +#: ../../library/random.rst:247 +msgid "Added the *counts* parameter." +msgstr "增加了 *counts* 形参。" + +#: ../../library/random.rst:250 +msgid "" +"In the future, the *population* must be a sequence. Instances of " +":class:`set` are no longer supported. The set must first be converted to a " +":class:`list` or :class:`tuple`, preferably in a deterministic order so that" +" the sample is reproducible." +msgstr "" +"在将来,*population* 必须是一个序列。 :class:`set` 的实例将不再被支持。 集合必须先转换为 :class:`list` 或 " +":class:`tuple`,最好是固定顺序以使抽样是可重现的。" + +#: ../../library/random.rst:260 +msgid "Real-valued distributions" +msgstr "实值分布" + +#: ../../library/random.rst:262 +msgid "" +"The following functions generate specific real-valued distributions. " +"Function parameters are named after the corresponding variables in the " +"distribution's equation, as used in common mathematical practice; most of " +"these equations can be found in any statistics text." +msgstr "" +"以下函数生成特定的实值分布。如常用数学实践中所使用的那样, 函数参数以分布方程中的相应变量命名;大多数这些方程都可以在任何统计学教材中找到。" + +#: ../../library/random.rst:270 +msgid "Return the next random floating point number in the range [0.0, 1.0)." +msgstr "返回 [0.0, 1.0) 范围内的下一个随机浮点数。" + +#: ../../library/random.rst:275 +msgid "" +"Return a random floating point number *N* such that ``a <= N <= b`` for ``a " +"<= b`` and ``b <= N <= a`` for ``b < a``." +msgstr "" +"返回一个随机浮点数 *N* ,当 ``a <= b`` 时 ``a <= N <= b`` ,当 ``b < a`` 时 ``b <= N <= a``" +" 。" + +#: ../../library/random.rst:278 +msgid "" +"The end-point value ``b`` may or may not be included in the range depending " +"on floating-point rounding in the equation ``a + (b-a) * random()``." +msgstr "取决于等式 ``a + (b-a) * random()`` 中的浮点舍入,终点 ``b`` 可以包括或不包括在该范围内。" + +#: ../../library/random.rst:284 +msgid "" +"Return a random floating point number *N* such that ``low <= N <= high`` and" +" with the specified *mode* between those bounds. The *low* and *high* " +"bounds default to zero and one. The *mode* argument defaults to the " +"midpoint between the bounds, giving a symmetric distribution." +msgstr "" +"返回一个随机浮点数 *N* ,使得 ``low <= N <= high`` 并在这些边界之间使用指定的 *mode* 。 *low* 和 *high*" +" 边界默认为零和一。 *mode* 参数默认为边界之间的中点,给出对称分布。" + +#: ../../library/random.rst:292 +msgid "" +"Beta distribution. Conditions on the parameters are ``alpha > 0`` and " +"``beta > 0``. Returned values range between 0 and 1." +msgstr "Beta 分布。 参数的条件是 ``alpha > 0`` 和 ``beta > 0``。 返回值的范围介于 0 和 1 之间。" + +#: ../../library/random.rst:298 +msgid "" +"Exponential distribution. *lambd* is 1.0 divided by the desired mean. It " +"should be nonzero. (The parameter would be called \"lambda\", but that is a" +" reserved word in Python.) Returned values range from 0 to positive " +"infinity if *lambd* is positive, and from negative infinity to 0 if *lambd* " +"is negative." +msgstr "" +"指数分布。 *lambd* 是 1.0 除以所需的平均值,它应该是非零的。 (该参数本应命名为 “lambda” ,但这是 Python " +"中的保留字。)如果 *lambd* 为正,则返回值的范围为 0 到正无穷大;如果 *lambd* 为负,则返回值从负无穷大到 0。" + +#: ../../library/random.rst:307 +msgid "" +"Gamma distribution. (*Not* the gamma function!) Conditions on the " +"parameters are ``alpha > 0`` and ``beta > 0``." +msgstr "Gamma 分布。 ( *不是* gamma 函数! ) 参数的条件是 ``alpha > 0`` 和 ``beta > 0``。" + +#: ../../library/random.rst:310 +msgid "The probability distribution function is::" +msgstr "概率分布函数是::" + +#: ../../library/random.rst:319 +msgid "" +"Gaussian distribution. *mu* is the mean, and *sigma* is the standard " +"deviation. This is slightly faster than the :func:`normalvariate` function " +"defined below." +msgstr "高斯分布。 *mu* 是平均值,*sigma* 是标准差。 这比下面定义的 :func:`normalvariate` 函数略快。" + +#: ../../library/random.rst:323 +msgid "" +"Multithreading note: When two threads call this function simultaneously, it" +" is possible that they will receive the same return value. This can be " +"avoided in three ways. 1) Have each thread use a different instance of the " +"random number generator. 2) Put locks around all calls. 3) Use the slower, " +"but thread-safe :func:`normalvariate` function instead." +msgstr "" +"多线程注意事项:当两个线程同时调用此方法时,它们有可能将获得相同的返回值。 这可以通过三种办法来避免。 1) 让每个线程使用不同的随机数生成器实例。 " +"2) 在所有调用外面加锁。 3) 改用速度较慢但是线程安全的 :func:`normalvariate` 函数。" + +#: ../../library/random.rst:333 +msgid "" +"Log normal distribution. If you take the natural logarithm of this " +"distribution, you'll get a normal distribution with mean *mu* and standard " +"deviation *sigma*. *mu* can have any value, and *sigma* must be greater " +"than zero." +msgstr "" +"对数正态分布。 如果你采用这个分布的自然对数,你将得到一个正态分布,平均值为 *mu* 和标准差为 *sigma* 。 *mu* " +"可以是任何值,*sigma* 必须大于零。" + +#: ../../library/random.rst:341 +msgid "" +"Normal distribution. *mu* is the mean, and *sigma* is the standard " +"deviation." +msgstr "正态分布。 *mu* 是平均值,*sigma* 是标准差。" + +#: ../../library/random.rst:346 +msgid "" +"*mu* is the mean angle, expressed in radians between 0 and 2\\*\\ *pi*, and " +"*kappa* is the concentration parameter, which must be greater than or equal " +"to zero. If *kappa* is equal to zero, this distribution reduces to a " +"uniform random angle over the range 0 to 2\\*\\ *pi*." +msgstr "" +"冯·米塞斯分布。 *mu* 是平均角度,以弧度表示,介于0和 2\\*\\ *pi* 之间,*kappa* 是浓度参数,必须大于或等于零。 如果 " +"*kappa* 等于零,则该分布在 0 到 2\\*\\ *pi* 的范围内减小到均匀的随机角度。" + +#: ../../library/random.rst:354 +msgid "Pareto distribution. *alpha* is the shape parameter." +msgstr "帕累托分布。 *alpha* 是形状参数。" + +#: ../../library/random.rst:359 +msgid "" +"Weibull distribution. *alpha* is the scale parameter and *beta* is the " +"shape parameter." +msgstr "威布尔分布。 *alpha* 是比例参数,*beta* 是形状参数。" + +#: ../../library/random.rst:364 +msgid "Alternative Generator" +msgstr "替代生成器" + +#: ../../library/random.rst:368 +msgid "" +"Class that implements the default pseudo-random number generator used by the" +" :mod:`random` module." +msgstr "该类实现了 :mod:`random` 模块所用的默认伪随机数生成器。" + +#: ../../library/random.rst:371 +msgid "" +"In the future, the *seed* must be one of the following types: " +":class:`NoneType`, :class:`int`, :class:`float`, :class:`str`, " +":class:`bytes`, or :class:`bytearray`." +msgstr "" +"在将来,*seed* 必须是下列类型之一: :class:`NoneType`, :class:`int`, :class:`float`, " +":class:`str`, :class:`bytes` 或 :class:`bytearray`。" + +#: ../../library/random.rst:378 +msgid "" +"Class that uses the :func:`os.urandom` function for generating random " +"numbers from sources provided by the operating system. Not available on all " +"systems. Does not rely on software state, and sequences are not " +"reproducible. Accordingly, the :meth:`seed` method has no effect and is " +"ignored. The :meth:`getstate` and :meth:`setstate` methods raise " +":exc:`NotImplementedError` if called." +msgstr "" +"使用 :func:`os.urandom` 函数的类,用从操作系统提供的源生成随机数。 这并非适用于所有系统。 也不依赖于软件状态,序列不可重现。 " +"因此,:meth:`seed` 方法没有效果而被忽略。 :meth:`getstate` 和 :meth:`setstate` 方法如果被调用则引发 " +":exc:`NotImplementedError`。" + +#: ../../library/random.rst:387 +msgid "Notes on Reproducibility" +msgstr "关于再现性的说明" + +#: ../../library/random.rst:389 +msgid "" +"Sometimes it is useful to be able to reproduce the sequences given by a " +"pseudo-random number generator. By re-using a seed value, the same sequence" +" should be reproducible from run to run as long as multiple threads are not " +"running." +msgstr "有时能够重现伪随机数生成器给出的序列是很有用处的。 通过重用一个种子值,只要没有运行多线程,相同的序列就应当可在多次运行中重现。" + +#: ../../library/random.rst:393 +msgid "" +"Most of the random module's algorithms and seeding functions are subject to " +"change across Python versions, but two aspects are guaranteed not to change:" +msgstr "大多数随机模块的算法和种子函数都会在 Python 版本中发生变化,但保证两个方面不会改变:" + +#: ../../library/random.rst:396 +msgid "" +"If a new seeding method is added, then a backward compatible seeder will be " +"offered." +msgstr "如果添加了新的播种方法,则将提供向后兼容的播种机。" + +#: ../../library/random.rst:399 +msgid "" +"The generator's :meth:`~Random.random` method will continue to produce the " +"same sequence when the compatible seeder is given the same seed." +msgstr "当兼容的播种机被赋予相同的种子时,生成器的 :meth:`~Random.random` 方法将继续产生相同的序列。" + +#: ../../library/random.rst:405 +msgid "Examples" +msgstr "例子" + +#: ../../library/random.rst:407 +msgid "Basic examples::" +msgstr "基本示例::" + +#: ../../library/random.rst:435 +msgid "Simulations::" +msgstr "模拟::" + +#: ../../library/random.rst:463 +msgid "" +"Example of `statistical bootstrapping " +"`_ using " +"resampling with replacement to estimate a confidence interval for the mean " +"of a sample::" +msgstr "" +"`statistical bootstrapping " +"`_ " +"的示例,使用重新采样和替换来估计一个样本的均值的置信区间::" + +#: ../../library/random.rst:476 +msgid "" +"Example of a `resampling permutation test " +"`_ " +"to determine the statistical significance or `p-value " +"`_ of an observed difference between " +"the effects of a drug versus a placebo::" +msgstr "" +"使用 `重新采样排列测试 " +"`_ " +"来确定统计学显著性或者使用 `p-值 `_ " +"来观察药物与安慰剂的作用之间差异的示例::" + +#: ../../library/random.rst:503 +msgid "" +"Simulation of arrival times and service deliveries for a multiserver queue::" +msgstr "多服务器队列的到达时间和服务交付模拟::" + +#: ../../library/random.rst:532 +msgid "" +"`Statistics for Hackers `_ a " +"video tutorial by `Jake Vanderplas " +"`_ on statistical analysis " +"using just a few fundamental concepts including simulation, sampling, " +"shuffling, and cross-validation." +msgstr "" +"`Statistics for Hackers `_ " +"`Jake Vanderplas `_ " +"撰写的视频教程,使用一些基本概念进行统计分析,包括模拟、抽样、改组和交叉验证。" + +#: ../../library/random.rst:538 +msgid "" +"`Economics Simulation " +"`_ a " +"simulation of a marketplace by `Peter Norvig `_ " +"that shows effective use of many of the tools and distributions provided by " +"this module (gauss, uniform, sample, betavariate, choice, triangular, and " +"randrange)." +msgstr "" +"`Economics Simulation " +"`_ " +"`Peter Norvig `_ " +"编写的市场模拟,显示了该模块提供的许多工具和分布的有效使用(高斯、均匀、样本、beta变量、选择、三角和随机范围等)。" + +#: ../../library/random.rst:545 +msgid "" +"`A Concrete Introduction to Probability (using Python) " +"`_ a " +"tutorial by `Peter Norvig `_ covering the basics" +" of probability theory, how to write simulations, and how to perform data " +"analysis using Python." +msgstr "" +"`A Concrete Introduction to Probability (using Python) " +"`_ " +"`Peter Norvig `_ 撰写的教程,涵盖了概率论基础知识,如何编写模拟,以及如何使用 " +"Python 进行数据分析。" + +#: ../../library/random.rst:553 +msgid "Recipes" +msgstr "例程" + +#: ../../library/random.rst:555 +msgid "" +"The default :func:`.random` returns multiples of 2⁻⁵³ in the range *0.0 ≤ x " +"< 1.0*. All such numbers are evenly spaced and are exactly representable as" +" Python floats. However, many other representable floats in that interval " +"are not possible selections. For example, ``0.05954861408025609`` isn't an " +"integer multiple of 2⁻⁵³." +msgstr "" +"默认的 :func:`.random` 返回在 *0.0 ≤ x < 1.0* 范围内 2⁻⁵³ 的倍数。 所有这些数值间隔相等并能精确表示为 " +"Python 浮点数。 但是在此间隔上有许多其他可表示浮点数是不可能的选择。 例如,``0.05954861408025609`` 就不是 2⁻⁵³ " +"的整数倍。" + +#: ../../library/random.rst:561 +msgid "" +"The following recipe takes a different approach. All floats in the interval" +" are possible selections. The mantissa comes from a uniform distribution of" +" integers in the range *2⁵² ≤ mantissa < 2⁵³*. The exponent comes from a " +"geometric distribution where exponents smaller than *-53* occur half as " +"often as the next larger exponent." +msgstr "" +"以下规范程序采取了一种不同的方式。 在间隔上的所有浮点数都是可能的选择。 它们的尾数取值来自 *2⁵² ≤ 尾数 < 2⁵³* 范围内整数的均匀分布。 " +"指数取值则来自几何分布,其中小于 *-53* 的指数的出现频率为下一个较大指数的一半。" + +#: ../../library/random.rst:583 +msgid "" +"All :ref:`real valued distributions ` in the " +"class will use the new method::" +msgstr "该类中所有的 :ref:`实值分布 ` 都将使用新的方法::" + +#: ../../library/random.rst:592 +msgid "" +"The recipe is conceptually equivalent to an algorithm that chooses from all " +"the multiples of 2⁻¹⁰⁷⁴ in the range *0.0 ≤ x < 1.0*. All such numbers are " +"evenly spaced, but most have to be rounded down to the nearest representable" +" Python float. (The value 2⁻¹⁰⁷⁴ is the smallest positive unnormalized " +"float and is equal to ``math.ulp(0.0)``.)" +msgstr "" +"该规范程序在概念上等效于在 *0.0 ≤ x < 1.0* 范围内对所有 2⁻¹⁰⁷⁴ 的倍数进行选择的算法。 " +"所有这样的数字间隔都相等,但大多必须向下舍入为最接近的 Python 浮点数表示形式。 (2⁻¹⁰⁷⁴ 这个数值是等于 " +"``math.ulp(0.0)`` 的未经正规化的最小正浮点数。)" + +#: ../../library/random.rst:601 +msgid "" +"`Generating Pseudo-random Floating-Point Values " +"`_ a paper by " +"Allen B. Downey describing ways to generate more fine-grained floats than " +"normally generated by :func:`.random`." +msgstr "" +"`生成伪随机浮点数值 `_ 为" +" Allen B. Downey 所撰写的描述如何生成相比通过 :func:`.random` 正常生成的数值更细粒度浮点数的论文。" diff --git a/library/re.po b/library/re.po new file mode 100644 index 000000000..a5078929e --- /dev/null +++ b/library/re.po @@ -0,0 +1,2105 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) 2001-2024, Python Software Foundation +# This file is distributed under the same license as the Python package. +# FIRST AUTHOR , YEAR. +# +# Translators: +# 操旭 , 2017 +# dannyvi , 2018 +# Alpha Du , 2019 +# Konge , 2019 +# 汪心禾 , 2020 +# WH-2099 , 2020 +# jaystone776 <1732865113@qq.com>, 2021 +# Freesand Leo , 2021 +# CCXXXI , 2022 +# Rafael Fontenelle , 2024 +# +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: Python 3.9\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2024-04-19 21:47+0000\n" +"PO-Revision-Date: 2017-02-16 23:24+0000\n" +"Last-Translator: Rafael Fontenelle , 2024\n" +"Language-Team: Chinese (China) (https://app.transifex.com/python-doc/teams/5390/zh_CN/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: zh_CN\n" +"Plural-Forms: nplurals=1; plural=0;\n" + +#: ../../library/re.rst:2 +msgid ":mod:`re` --- Regular expression operations" +msgstr ":mod:`re` --- 正则表达式操作" + +#: ../../library/re.rst:10 +msgid "**Source code:** :source:`Lib/re.py`" +msgstr "**源代码:** :source:`Lib/re.py`" + +#: ../../library/re.rst:14 +msgid "" +"This module provides regular expression matching operations similar to those" +" found in Perl." +msgstr "本模块提供了与 Perl 语言类似的正则表达式匹配操作。" + +#: ../../library/re.rst:17 +msgid "" +"Both patterns and strings to be searched can be Unicode strings " +"(:class:`str`) as well as 8-bit strings (:class:`bytes`). However, Unicode " +"strings and 8-bit strings cannot be mixed: that is, you cannot match a " +"Unicode string with a byte pattern or vice-versa; similarly, when asking for" +" a substitution, the replacement string must be of the same type as both the" +" pattern and the search string." +msgstr "" +"模式和被搜索的字符串既可以是 Unicode 字符串 (:class:`str`) ,也可以是8位字节串 (:class:`bytes`)。 " +"但是,Unicode 字符串与 8 位字节串不能混用:也就是说,不能用字节串模式匹配 Unicode " +"字符串,反之亦然;同理,替换操作时,替换字符串的类型也必须与所用的模式和搜索字符串的类型一致。" + +#: ../../library/re.rst:24 +msgid "" +"Regular expressions use the backslash character (``'\\'``) to indicate " +"special forms or to allow special characters to be used without invoking " +"their special meaning. This collides with Python's usage of the same " +"character for the same purpose in string literals; for example, to match a " +"literal backslash, one might have to write ``'\\\\\\\\'`` as the pattern " +"string, because the regular expression must be ``\\\\``, and each backslash " +"must be expressed as ``\\\\`` inside a regular Python string literal. Also, " +"please note that any invalid escape sequences in Python's usage of the " +"backslash in string literals now generate a :exc:`DeprecationWarning` and in" +" the future this will become a :exc:`SyntaxError`. This behaviour will " +"happen even if it is a valid escape sequence for a regular expression." +msgstr "" +"正则表达式使用反斜杠字符 (``'\\'``) 来表示特殊形式或允许使用特殊字符而不表达其特殊含义。 这与 Python " +"为相同目的在字符串字面量中使用相同字符的做法相冲突;例如,要匹配一个反斜杠字面量,我们可能不得不写``'\\\\\\\\'`` " +"作为模式字符串,因为正则表达式必须是 ``\\\\``,而每个反斜杠必须在正则 Python 字符串字面量中表示为 ``\\\\``。 另外,请注意 " +"Python 在字符串字面中使用反斜杠时,任何无效的转义序列现在都会生成 :exc:`DeprecationWarning` ,将来会变成 " +":exc:`SyntaxError`。 即使它是正则表达式的有效转义序列,这种行为也会发生。" + +#: ../../library/re.rst:36 +msgid "" +"The solution is to use Python's raw string notation for regular expression " +"patterns; backslashes are not handled in any special way in a string literal" +" prefixed with ``'r'``. So ``r\"\\n\"`` is a two-character string " +"containing ``'\\'`` and ``'n'``, while ``\"\\n\"`` is a one-character string" +" containing a newline. Usually patterns will be expressed in Python code " +"using this raw string notation." +msgstr "" +"解决办法是对于正则表达式模式(patterns)使用 Python 的原始字符串表示法;在带有 ``'r'`` " +"前缀的字符串字面值中,反斜杠不必做任何特殊处理。 因此 ``r\"\\n\"`` 表示包含 ``'\\'`` 和 ``'n'`` 两个字符的字符串,而 " +"``\"\\n\"`` 则表示只包含一个换行符的字符串。 模式在 Python 代码中通常都使用原始字符串表示法。" + +#: ../../library/re.rst:43 +msgid "" +"It is important to note that most regular expression operations are " +"available as module-level functions and methods on :ref:`compiled regular " +"expressions `. The functions are shortcuts that don't require " +"you to compile a regex object first, but miss some fine-tuning parameters." +msgstr "" +"绝大多数正则表达式操作都提供为模块函数和方法,在 :ref:`编译正则表达式 `. " +"这些函数是一个捷径,不需要先编译正则对象,但是损失了一些优化参数。" + +#: ../../library/re.rst:51 +msgid "" +"The third-party `regex `_ module, which has" +" an API compatible with the standard library :mod:`re` module, but offers " +"additional functionality and a more thorough Unicode support." +msgstr "" +"第三方模块 `regex `_ , 提供了与标准库 :mod:`re` 模块兼容的 " +"API 接口,同时,还提供了更多功能和更全面的 Unicode 支持。" + +#: ../../library/re.rst:59 +msgid "Regular Expression Syntax" +msgstr "正则表达式语法" + +#: ../../library/re.rst:61 +msgid "" +"A regular expression (or RE) specifies a set of strings that matches it; the" +" functions in this module let you check if a particular string matches a " +"given regular expression (or if a given regular expression matches a " +"particular string, which comes down to the same thing)." +msgstr "" +"正则表达式(或 " +"RE)指定了一组与之匹配的字符串;模块内的函数可以检查某个字符串是否与给定的正则表达式匹配(或者正则表达式是否匹配到字符串,这两种说法含义相同)。" + +#: ../../library/re.rst:66 +msgid "" +"Regular expressions can be concatenated to form new regular expressions; if " +"*A* and *B* are both regular expressions, then *AB* is also a regular " +"expression. In general, if a string *p* matches *A* and another string *q* " +"matches *B*, the string *pq* will match AB. This holds unless *A* or *B* " +"contain low precedence operations; boundary conditions between *A* and *B*; " +"or have numbered group references. Thus, complex expressions can easily be " +"constructed from simpler primitive expressions like the ones described here." +" For details of the theory and implementation of regular expressions, " +"consult the Friedl book [Frie09]_, or almost any textbook about compiler " +"construction." +msgstr "" +"正则表达式可以拼接;如果 *A* 和 *B* 都是正则表达式,则 *AB* 也是正则表达式。通常,如果字符串 *p* 匹配 *A*,并且另一个字符串 " +"*q* 匹配 *B*,那么 *pq* 可以匹配 AB。除非 *A* 或者 *B* 包含低优先级操作,*A* 和 *B* " +"存在边界条件;或者命名组引用。所以,复杂表达式可以很容易的从这里描述的简单源语表达式构建。更多正则表达式理论和实现,详见 the Friedl book" +" [Frie09]_ ,或者其他构建编译器的书籍。" + +#: ../../library/re.rst:76 +msgid "" +"A brief explanation of the format of regular expressions follows. For " +"further information and a gentler presentation, consult the :ref:`regex-" +"howto`." +msgstr "以下是正则表达式格式的简要说明。更详细的信息和演示,参考 :ref:`regex-howto`。" + +#: ../../library/re.rst:79 +msgid "" +"Regular expressions can contain both special and ordinary characters. Most " +"ordinary characters, like ``'A'``, ``'a'``, or ``'0'``, are the simplest " +"regular expressions; they simply match themselves. You can concatenate " +"ordinary characters, so ``last`` matches the string ``'last'``. (In the " +"rest of this section, we'll write RE's in ``this special style``, usually " +"without quotes, and strings to be matched ``'in single quotes'``.)" +msgstr "" +"正则表达式可以包含普通或者特殊字符。绝大部分普通字符,比如 ``'A'``, ``'a'``, 或者 " +"``'0'``,都是最简单的正则表达式。它们就匹配自身。你可以拼接普通字符,所以 ``last`` 匹配字符串 ``'last'``. " +"(在这一节的其他部分,我们将用 ``this special style`` 这种方式表示正则表达式,通常不带引号,要匹配的字符串用 ``'in " +"single quotes'`` ,单引号形式。)" + +#: ../../library/re.rst:86 +msgid "" +"Some characters, like ``'|'`` or ``'('``, are special. Special characters " +"either stand for classes of ordinary characters, or affect how the regular " +"expressions around them are interpreted." +msgstr "" +"有些字符,比如 ``'|'`` 或者 ``'('``,属于特殊字符。 特殊字符既可以表示它的普通含义, 也可以影响它旁边的正则表达式的解释。" + +#: ../../library/re.rst:90 +msgid "" +"Repetition qualifiers (``*``, ``+``, ``?``, ``{m,n}``, etc) cannot be " +"directly nested. This avoids ambiguity with the non-greedy modifier suffix " +"``?``, and with other modifiers in other implementations. To apply a second " +"repetition to an inner repetition, parentheses may be used. For example, the" +" expression ``(?:a{6})*`` matches any multiple of six ``'a'`` characters." +msgstr "" +"重复修饰符 (``*``, ``+``, ``?``, ``{m,n}``, 等) 不能直接嵌套。这样避免了非贪婪后缀 ``?`` " +"修饰符,和其他实现中的修饰符产生的多义性。要应用一个内层重复嵌套,可以使用括号。 比如,表达式 ``(?:a{6})*`` 匹配6个 ``'a'`` " +"字符重复任意次数。" + +#: ../../library/re.rst:97 +msgid "The special characters are:" +msgstr "特殊字符有:" + +#: ../../library/re.rst:104 ../../library/re.rst:1419 +msgid "``.``" +msgstr "``.``" + +#: ../../library/re.rst:102 +msgid "" +"(Dot.) In the default mode, this matches any character except a newline. " +"If the :const:`DOTALL` flag has been specified, this matches any character " +"including a newline." +msgstr "(点号) 在默认模式下,匹配除换行符以外的任意字符。 如果指定了旗标 :const:`DOTALL` ,它将匹配包括换行符在内的任意字符。" + +#: ../../library/re.rst:110 +msgid "``^``" +msgstr "``^``" + +#: ../../library/re.rst:109 +msgid "" +"(Caret.) Matches the start of the string, and in :const:`MULTILINE` mode " +"also matches immediately after each newline." +msgstr "(插入符) 匹配字符串的开头, 并且在 :const:`MULTILINE` 模式下也匹配换行后的首个符号。" + +#: ../../library/re.rst:121 +msgid "``$``" +msgstr "``$``" + +#: ../../library/re.rst:115 +msgid "" +"Matches the end of the string or just before the newline at the end of the " +"string, and in :const:`MULTILINE` mode also matches before a newline. " +"``foo`` matches both 'foo' and 'foobar', while the regular expression " +"``foo$`` matches only 'foo'. More interestingly, searching for ``foo.$`` in" +" ``'foo1\\nfoo2\\n'`` matches 'foo2' normally, but 'foo1' in " +":const:`MULTILINE` mode; searching for a single ``$`` in ``'foo\\n'`` will " +"find two (empty) matches: one just before the newline, and one at the end of" +" the string." +msgstr "" +"匹配字符串尾或者在字符串尾的换行符的前一个字符,在 :const:`MULTILINE` 模式下也会匹配换行符之前的文本。 ``foo`` 匹配 " +"'foo' 和 'foobar',但正则表达式 ``foo$`` 只匹配 'foo'。 更有趣的是,在 ``'foo1\\nfoo2\\n'`` 中搜索" +" ``foo.$``,通常匹配 'foo2',但在 :const:`MULTILINE` 模式下可以匹配到 'foo1';在 ``'foo\\n'``" +" 中搜索 ``$`` 会找到两个(空的)匹配:一个在换行符之前,一个在字符串的末尾。" + +#: ../../library/re.rst:128 +msgid "``*``" +msgstr "``*``" + +#: ../../library/re.rst:126 +msgid "" +"Causes the resulting RE to match 0 or more repetitions of the preceding RE, " +"as many repetitions as are possible. ``ab*`` will match 'a', 'ab', or 'a' " +"followed by any number of 'b's." +msgstr "" +"对它前面的正则式匹配0到任意次重复, 尽量多的匹配字符串。 ``ab*`` 会匹配 ``'a'``,``'ab'``,或者 ``'a'`` " +"后面跟随任意个 ``'b'``。" + +#: ../../library/re.rst:135 +msgid "``+``" +msgstr "``+``" + +#: ../../library/re.rst:133 +msgid "" +"Causes the resulting RE to match 1 or more repetitions of the preceding RE. " +"``ab+`` will match 'a' followed by any non-zero number of 'b's; it will not " +"match just 'a'." +msgstr "" +"对它前面的正则式匹配1到任意次重复。 ``ab+`` 会匹配 ``'a'`` 后面跟随1个以上到任意个 ``'b'``,它不会匹配 ``'a'``。" + +#: ../../library/re.rst:141 +msgid "``?``" +msgstr "``?``" + +#: ../../library/re.rst:140 +msgid "" +"Causes the resulting RE to match 0 or 1 repetitions of the preceding RE. " +"``ab?`` will match either 'a' or 'ab'." +msgstr "对它前面的正则式匹配0到1次重复。 ``ab?`` 会匹配 ``'a'`` 或者 ``'ab'``。" + +#: ../../library/re.rst:155 +msgid "``*?``, ``+?``, ``??``" +msgstr "``*?``, ``+?``, ``??``" + +#: ../../library/re.rst:149 +msgid "" +"The ``'*'``, ``'+'``, and ``'?'`` qualifiers are all :dfn:`greedy`; they " +"match as much text as possible. Sometimes this behaviour isn't desired; if " +"the RE ``<.*>`` is matched against ``' b '``, it will match the entire" +" string, and not just ``''``. Adding ``?`` after the qualifier makes it " +"perform the match in :dfn:`non-greedy` or :dfn:`minimal` fashion; as *few* " +"characters as possible will be matched. Using the RE ``<.*?>`` will match " +"only ``''``." +msgstr "" +"``'*'``, ``'+'``,和 ``'?'`` 修饰符都是 " +":dfn:`贪婪的`;它们在字符串进行尽可能多的匹配。有时候并不需要这种行为。如果正则式 ``<.*>`` 希望找到 ``' b " +"'``,它将会匹配整个字符串,而不仅是 ``''``。在修饰符之后添加 ``?`` 将使样式以 :dfn:`非贪婪`方式或者 " +":dfn:`最小` 方式进行匹配; 尽量 *少* 的字符将会被匹配。 使用正则式 ``<.*?>`` 将会仅仅匹配 ``''``。" + +#: ../../library/re.rst:163 +msgid "``{m}``" +msgstr "``{m}``" + +#: ../../library/re.rst:161 +msgid "" +"Specifies that exactly *m* copies of the previous RE should be matched; " +"fewer matches cause the entire RE not to match. For example, ``a{6}`` will " +"match exactly six ``'a'`` characters, but not five." +msgstr "" +"对其之前的正则式指定匹配 *m* 个重复;少于 *m* 的话就会导致匹配失败。比如, ``a{6}`` 将匹配6个 ``'a'`` , 但是不能是5个。" + +#: ../../library/re.rst:172 +msgid "``{m,n}``" +msgstr "``{m,n}``" + +#: ../../library/re.rst:166 +msgid "" +"Causes the resulting RE to match from *m* to *n* repetitions of the " +"preceding RE, attempting to match as many repetitions as possible. For " +"example, ``a{3,5}`` will match from 3 to 5 ``'a'`` characters. Omitting *m*" +" specifies a lower bound of zero, and omitting *n* specifies an infinite " +"upper bound. As an example, ``a{4,}b`` will match ``'aaaab'`` or a thousand" +" ``'a'`` characters followed by a ``'b'``, but not ``'aaab'``. The comma may" +" not be omitted or the modifier would be confused with the previously " +"described form." +msgstr "" +"对正则式进行 *m* 到 *n* 次匹配,在 *m* 和 *n* 之间取尽量多。 比如,``a{3,5}`` 将匹配 3 到 5个 ``'a'``。忽略" +" *m* 意为指定下界为0,忽略 *n* 指定上界为无限次。 比如 ``a{4,}b`` 将匹配 ``'aaaab'`` 或者1000个 ``'a'``" +" 尾随一个 ``'b'``,但不能匹配 ``'aaab'``。逗号不能省略,否则无法辨别修饰符应该忽略哪个边界。" + +#: ../../library/re.rst:179 +msgid "``{m,n}?``" +msgstr "``{m,n}?``" + +#: ../../library/re.rst:175 +msgid "" +"Causes the resulting RE to match from *m* to *n* repetitions of the " +"preceding RE, attempting to match as *few* repetitions as possible. This is" +" the non-greedy version of the previous qualifier. For example, on the " +"6-character string ``'aaaaaa'``, ``a{3,5}`` will match 5 ``'a'`` characters," +" while ``a{3,5}?`` will only match 3 characters." +msgstr "" +"前一个修饰符的非贪婪模式,只匹配尽量少的字符次数。比如,对于 ``'aaaaaa'``, ``a{3,5}`` 匹配 5个 ``'a'`` ,而 " +"``a{3,5}?`` 只匹配3个 ``'a'``。" + +#: ../../library/re.rst:194 +msgid "``\\``" +msgstr "``\\``" + +#: ../../library/re.rst:184 +msgid "" +"Either escapes special characters (permitting you to match characters like " +"``'*'``, ``'?'``, and so forth), or signals a special sequence; special " +"sequences are discussed below." +msgstr "转义特殊字符(允许你匹配 ``'*'``, ``'?'``, 或者此类其他),或者表示一个特殊序列;特殊序列之后进行讨论。" + +#: ../../library/re.rst:188 +msgid "" +"If you're not using a raw string to express the pattern, remember that " +"Python also uses the backslash as an escape sequence in string literals; if " +"the escape sequence isn't recognized by Python's parser, the backslash and " +"subsequent character are included in the resulting string. However, if " +"Python would recognize the resulting sequence, the backslash should be " +"repeated twice. This is complicated and hard to understand, so it's highly " +"recommended that you use raw strings for all but the simplest expressions." +msgstr "" +"如果你没有使用原始字符串( ``r'raw'`` " +")来表达样式,要牢记Python也使用反斜杠作为转义序列;如果转义序列不被Python的分析器识别,反斜杠和字符才能出现在字符串中。如果Python可以识别这个序列,那么反斜杠就应该重复两次。这将导致理解障碍,所以高度推荐,就算是最简单的表达式,也要使用原始字符串。" + +#: ../../library/re.rst:254 +msgid "``[]``" +msgstr "``[]``" + +#: ../../library/re.rst:200 +msgid "Used to indicate a set of characters. In a set:" +msgstr "用于表示一个字符集合。在一个集合中:" + +#: ../../library/re.rst:202 +msgid "" +"Characters can be listed individually, e.g. ``[amk]`` will match ``'a'``, " +"``'m'``, or ``'k'``." +msgstr "字符可以单独列出,比如 ``[amk]`` 匹配 ``'a'``, ``'m'``, 或者 ``'k'``。" + +#: ../../library/re.rst:207 +msgid "" +"Ranges of characters can be indicated by giving two characters and " +"separating them by a ``'-'``, for example ``[a-z]`` will match any lowercase" +" ASCII letter, ``[0-5][0-9]`` will match all the two-digits numbers from " +"``00`` to ``59``, and ``[0-9A-Fa-f]`` will match any hexadecimal digit. If " +"``-`` is escaped (e.g. ``[a\\-z]``) or if it's placed as the first or last " +"character (e.g. ``[-a]`` or ``[a-]``), it will match a literal ``'-'``." +msgstr "" +"可以表示字符范围,通过用 ``'-'`` 将两个字符连起来。比如 ``[a-z]`` 将匹配任何小写ASCII字符, ``[0-5][0-9]`` " +"将匹配从 ``00`` 到 ``59`` 的两位数字, ``[0-9A-Fa-f]`` 将匹配任何十六进制数位。 如果 ``-`` 进行了转义 (比如 " +"``[a\\-z]``)或者它的位置在首位或者末尾(如 ``[-a]`` 或 ``[a-]``),它就只表示普通字符 ``'-'``。" + +#: ../../library/re.rst:214 +msgid "" +"Special characters lose their special meaning inside sets. For example, " +"``[(+*)]`` will match any of the literal characters ``'('``, ``'+'``, " +"``'*'``, or ``')'``." +msgstr "" +"特殊字符在集合中会失去其特殊意义。比如 ``[(+*)]`` 只会匹配这几个字面字符之一 ``'('``, ``'+'``, ``'*'``, or " +"``')'``。" + +#: ../../library/re.rst:220 +msgid "" +"Character classes such as ``\\w`` or ``\\S`` (defined below) are also " +"accepted inside a set, although the characters they match depends on whether" +" :const:`ASCII` or :const:`LOCALE` mode is in force." +msgstr "" +"字符类如 ``\\w`` 或者 ``\\S`` (如下定义) 在集合内可以接受,它们可以匹配的字符由 :const:`ASCII` 或者 " +":const:`LOCALE` 模式决定。" + +#: ../../library/re.rst:226 +msgid "" +"Characters that are not within a range can be matched by " +":dfn:`complementing` the set. If the first character of the set is ``'^'``," +" all the characters that are *not* in the set will be matched. For example," +" ``[^5]`` will match any character except ``'5'``, and ``[^^]`` will match " +"any character except ``'^'``. ``^`` has no special meaning if it's not the " +"first character in the set." +msgstr "" +"不在集合范围内的字符可以通过 :dfn:`取反` 来进行匹配。如果集合首字符是 ``'^'`` ,所有 *不* 在集合内的字符将会被匹配,比如 " +"``[^5]`` 将匹配所有字符,除了 ``'5'``, ``[^^]`` 将匹配所有字符,除了 ``'^'``. ``^`` " +"如果不在集合首位,就没有特殊含义。" + +#: ../../library/re.rst:233 +msgid "" +"To match a literal ``']'`` inside a set, precede it with a backslash, or " +"place it at the beginning of the set. For example, both ``[()[\\]{}]`` and " +"``[]()[{}]`` will both match a parenthesis." +msgstr "" +"在集合内要匹配一个字符 ``']'``,有两种方法,要么就在它之前加上反斜杠,要么就把它放到集合首位。比如, ``[()[\\]{}]`` 和 " +"``[]()[{}]`` 都可以匹配括号。" + +#: ../../library/re.rst:242 +msgid "" +"Support of nested sets and set operations as in `Unicode Technical Standard " +"#18`_ might be added in the future. This would change the syntax, so to " +"facilitate this change a :exc:`FutureWarning` will be raised in ambiguous " +"cases for the time being. That includes sets starting with a literal ``'['``" +" or containing literal character sequences ``'--'``, ``'&&'``, ``'~~'``, and" +" ``'||'``. To avoid a warning escape them with a backslash." +msgstr "" +"`Unicode Technical Standard #18`_ 里的嵌套集合和集合操作支持可能在未来添加。这将会改变语法,所以为了帮助这个改变,一个" +" :exc:`FutureWarning` 将会在有多义的情况里被 ``raise``,包含以下几种情况,集合由 ``'['`` " +"开始,或者包含下列字符序列 ``'--'``, ``'&&'``, ``'~~'``, 和 ``'||'``。为了避免警告,需要将它们用反斜杠转义。" + +#: ../../library/re.rst:252 +msgid "" +":exc:`FutureWarning` is raised if a character set contains constructs that " +"will change semantically in the future." +msgstr "如果一个字符串构建的语义在未来会改变的话,一个 :exc:`FutureWarning` 会 ``raise`` 。" + +#: ../../library/re.rst:267 +msgid "``|``" +msgstr "``|``" + +#: ../../library/re.rst:259 +msgid "" +"``A|B``, where *A* and *B* can be arbitrary REs, creates a regular " +"expression that will match either *A* or *B*. An arbitrary number of REs " +"can be separated by the ``'|'`` in this way. This can be used inside groups" +" (see below) as well. As the target string is scanned, REs separated by " +"``'|'`` are tried from left to right. When one pattern completely matches, " +"that branch is accepted. This means that once *A* matches, *B* will not be " +"tested further, even if it would produce a longer overall match. In other " +"words, the ``'|'`` operator is never greedy. To match a literal ``'|'``, " +"use ``\\|``, or enclose it inside a character class, as in ``[|]``." +msgstr "" +"``A|B``, *A* 和 *B* 可以是任意正则表达式,创建一个正则表达式,匹配 *A* 或者 *B*. 任意个正则表达式可以用 ``'|'`` " +"连接。它也可以在组合(见下列)内使用。扫描目标字符串时, ``'|'`` " +"分隔开的正则样式从左到右进行匹配。当一个样式完全匹配时,这个分支就被接受。意思就是,一旦 *A* 匹配成功, *B* " +"就不再进行匹配,即便它能产生一个更好的匹配。或者说,``'|'`` 操作符绝不贪婪。 如果要匹配 ``'|'`` 字符,使用 ``\\|``, " +"或者把它包含在字符集里,比如 ``[|]``." + +#: ../../library/re.rst:277 +msgid "``(...)``" +msgstr "``(...)``" + +#: ../../library/re.rst:273 +msgid "" +"Matches whatever regular expression is inside the parentheses, and indicates" +" the start and end of a group; the contents of a group can be retrieved " +"after a match has been performed, and can be matched later in the string " +"with the ``\\number`` special sequence, described below. To match the " +"literals ``'('`` or ``')'``, use ``\\(`` or ``\\)``, or enclose them inside " +"a character class: ``[(]``, ``[)]``." +msgstr "" +"(组合),匹配括号内的任意正则表达式,并标识出组合的开始和结尾。匹配完成后,组合的内容可以被获取,并可以在之后用 ``\\number`` " +"转义序列进行再次匹配,之后进行详细说明。要匹配字符 ``'('`` 或者 ``')'``, 用 ``\\(`` 或 ``\\)``, " +"或者把它们包含在字符集合里: ``[(]``, ``[)]``." + +#: ../../library/re.rst:286 +msgid "``(?...)``" +msgstr "``(?…)``" + +#: ../../library/re.rst:282 +msgid "" +"This is an extension notation (a ``'?'`` following a ``'('`` is not " +"meaningful otherwise). The first character after the ``'?'`` determines " +"what the meaning and further syntax of the construct is. Extensions usually " +"do not create a new group; ``(?P...)`` is the only exception to this " +"rule. Following are the currently supported extensions." +msgstr "" +"这是个扩展标记法 (一个 ``'?'`` 跟随 ``'('`` 并无含义)。 ``'?'`` " +"后面的第一个字符决定了这个构建采用什么样的语法。这种扩展通常并不创建新的组合; ``(?P...)`` 是唯一的例外。 " +"以下是目前支持的扩展。" + +#: ../../library/re.rst:300 +msgid "``(?aiLmsux)``" +msgstr "``(?aiLmsux)``" + +#: ../../library/re.rst:289 +msgid "" +"(One or more letters from the set ``'a'``, ``'i'``, ``'L'``, ``'m'``, " +"``'s'``, ``'u'``, ``'x'``.) The group matches the empty string; the letters" +" set the corresponding flags: :const:`re.A` (ASCII-only matching), " +":const:`re.I` (ignore case), :const:`re.L` (locale dependent), :const:`re.M`" +" (multi-line), :const:`re.S` (dot matches all), :const:`re.U` (Unicode " +"matching), and :const:`re.X` (verbose), for the entire regular expression. " +"(The flags are described in :ref:`contents-of-module-re`.) This is useful if" +" you wish to include the flags as part of the regular expression, instead of" +" passing a *flag* argument to the :func:`re.compile` function. Flags should" +" be used first in the expression string." +msgstr "" +"( ``'a'``, ``'i'``, ``'L'``, ``'m'``, ``'s'``, ``'u'``, ``'x'`` 中的一个或多个) " +"这个组合匹配一个空字符串;这些字符对正则表达式设置以下标记 :const:`re.A` (只匹配ASCII字符), :const:`re.I` " +"(忽略大小写), :const:`re.L` (语言依赖), :const:`re.M` (多行模式), :const:`re.S` " +"(点dot匹配全部字符), :const:`re.U` (Unicode匹配), and :const:`re.X` (冗长模式)。 (这些标记在 " +":ref:`contents-of-module-re` 中描述) 如果你想将这些标记包含在正则表达式中,这个方法就很有用,免去了在 " +":func:`re.compile` 中传递 *flag* 参数。标记应该在表达式字符串首位表示。" + +#: ../../library/re.rst:308 +msgid "``(?:...)``" +msgstr "``(?:…)``" + +#: ../../library/re.rst:305 +msgid "" +"A non-capturing version of regular parentheses. Matches whatever regular " +"expression is inside the parentheses, but the substring matched by the group" +" *cannot* be retrieved after performing a match or referenced later in the " +"pattern." +msgstr "正则括号的非捕获版本。 匹配在括号内的任何正则表达式,但该分组所匹配的子字符串 *不能* 在执行匹配后被获取或是之后在模式中被引用。" + +#: ../../library/re.rst:334 +msgid "``(?aiLmsux-imsx:...)``" +msgstr "``(?aiLmsux-imsx:…)``" + +#: ../../library/re.rst:311 +msgid "" +"(Zero or more letters from the set ``'a'``, ``'i'``, ``'L'``, ``'m'``, " +"``'s'``, ``'u'``, ``'x'``, optionally followed by ``'-'`` followed by one or" +" more letters from the ``'i'``, ``'m'``, ``'s'``, ``'x'``.) The letters set " +"or remove the corresponding flags: :const:`re.A` (ASCII-only matching), " +":const:`re.I` (ignore case), :const:`re.L` (locale dependent), :const:`re.M`" +" (multi-line), :const:`re.S` (dot matches all), :const:`re.U` (Unicode " +"matching), and :const:`re.X` (verbose), for the part of the expression. (The" +" flags are described in :ref:`contents-of-module-re`.)" +msgstr "" +"(``'a'``, ``'i'``, ``'L'``, ``'m'``, ``'s'``, ``'u'``, ``'x'`` 中的0或者多个, " +"之后可选跟随 ``'-'`` 在后面跟随 ``'i'`` , ``'m'`` , ``'s'`` , ``'x'`` 中的一到多个 .) " +"这些字符为表达式的其中一部分 *设置* 或者 *去除* 相应标记 :const:`re.A` (只匹配ASCII), :const:`re.I` " +"(忽略大小写), :const:`re.L` (语言依赖), :const:`re.M` (多行), :const:`re.S` (点匹配所有字符), " +":const:`re.U` (Unicode匹配), and :const:`re.X` (冗长模式)。(标记描述在 :ref:`contents-" +"of-module-re` .)" + +#: ../../library/re.rst:321 +msgid "" +"The letters ``'a'``, ``'L'`` and ``'u'`` are mutually exclusive when used as" +" inline flags, so they can't be combined or follow ``'-'``. Instead, when " +"one of them appears in an inline group, it overrides the matching mode in " +"the enclosing group. In Unicode patterns ``(?a:...)`` switches to ASCII-" +"only matching, and ``(?u:...)`` switches to Unicode matching (default). In " +"byte pattern ``(?L:...)`` switches to locale depending matching, and " +"``(?a:...)`` switches to ASCII-only matching (default). This override is " +"only in effect for the narrow inline group, and the original matching mode " +"is restored outside of the group." +msgstr "" +"``'a'``, ``'L'`` and ``'u'`` 作为内联标记是相互排斥的, 所以它们不能结合在一起,或者跟随 ``'-'`` 。 " +"当他们中的某个出现在内联组中,它就覆盖了括号组内的匹配模式。在Unicode样式中, ``(?a:...)`` 切换为 只匹配ASCII, " +"``(?u:...)`` 切换为Unicode匹配 (默认). 在byte样式中 ``(?L:...)`` 切换为语言依赖模式, " +"``(?a:...)`` 切换为 只匹配ASCII (默认)。这种方式只覆盖组合内匹配,括号外的匹配模式不受影响。" + +#: ../../library/re.rst:333 +msgid "The letters ``'a'``, ``'L'`` and ``'u'`` also can be used in a group." +msgstr "符号 ``'a'``, ``'L'`` 和 ``'u'`` 同样可以用在一个组合内。" + +#: ../../library/re.rst:361 +msgid "``(?P...)``" +msgstr "``(?P…)``" + +#: ../../library/re.rst:339 +msgid "" +"Similar to regular parentheses, but the substring matched by the group is " +"accessible via the symbolic group name *name*. Group names must be valid " +"Python identifiers, and each group name must be defined only once within a " +"regular expression. A symbolic group is also a numbered group, just as if " +"the group were not named." +msgstr "" +"(命名组合)类似正则组合,但是匹配到的子串组在外部是通过定义的 *name* " +"来获取的。组合名必须是有效的Python标识符,并且每个组合名只能用一个正则表达式定义,只能定义一次。一个符号组合同样是一个数字组合,就像这个组合没有被命名一样。" + +#: ../../library/re.rst:345 +msgid "" +"Named groups can be referenced in three contexts. If the pattern is " +"``(?P['\"]).*?(?P=quote)`` (i.e. matching a string quoted with either" +" single or double quotes):" +msgstr "" +"命名组合可以在三种上下文中引用。如果样式是 ``(?P['\"]).*?(?P=quote)`` " +"(也就是说,匹配单引号或者双引号括起来的字符串):" + +#: ../../library/re.rst:350 +msgid "Context of reference to group \"quote\"" +msgstr "引用组合 \"quote\" 的上下文" + +#: ../../library/re.rst:350 +msgid "Ways to reference it" +msgstr "引用方法" + +#: ../../library/re.rst:352 +msgid "in the same pattern itself" +msgstr "在正则式自身内" + +#: ../../library/re.rst:352 +msgid "``(?P=quote)`` (as shown)" +msgstr "``(?P=quote)`` (如示)" + +#: ../../library/re.rst:353 ../../library/re.rst:360 +msgid "``\\1``" +msgstr "``\\1``" + +#: ../../library/re.rst:355 +msgid "when processing match object *m*" +msgstr "处理匹配对象 *m*" + +#: ../../library/re.rst:355 +msgid "``m.group('quote')``" +msgstr "``m.group('quote')``" + +#: ../../library/re.rst:356 +msgid "``m.end('quote')`` (etc.)" +msgstr "``m.end('quote')`` (等)" + +#: ../../library/re.rst:358 +msgid "in a string passed to the *repl* argument of ``re.sub()``" +msgstr "传递到 ``re.sub()`` 里的 *repl* 参数中" + +#: ../../library/re.rst:358 +msgid "``\\g``" +msgstr "``\\g``" + +#: ../../library/re.rst:359 +msgid "``\\g<1>``" +msgstr "``\\g<1>``" + +#: ../../library/re.rst:367 +msgid "``(?P=name)``" +msgstr "``(?P=name)``" + +#: ../../library/re.rst:366 +msgid "" +"A backreference to a named group; it matches whatever text was matched by " +"the earlier group named *name*." +msgstr "反向引用一个命名组合;它匹配前面那个叫 *name* 的命名组中匹配到的串同样的字串。" + +#: ../../library/re.rst:372 +msgid "``(?#...)``" +msgstr "``(?#…)``" + +#: ../../library/re.rst:372 +msgid "A comment; the contents of the parentheses are simply ignored." +msgstr "注释;里面的内容会被忽略。" + +#: ../../library/re.rst:379 +msgid "``(?=...)``" +msgstr "``(?=…)``" + +#: ../../library/re.rst:377 +msgid "" +"Matches if ``...`` matches next, but doesn't consume any of the string. " +"This is called a :dfn:`lookahead assertion`. For example, ``Isaac " +"(?=Asimov)`` will match ``'Isaac '`` only if it's followed by ``'Asimov'``." +msgstr "" +"当 ``…`` 匹配时,匹配成功,但不消耗字符串中的任何字符。这个叫做 :dfn:`前视断言` (lookahead assertion)。比如, " +"``Isaac (?=Asimov)`` 将会匹配 ``'Isaac '`` ,仅当其后紧跟 ``'Asimov'`` 。" + +#: ../../library/re.rst:386 +msgid "``(?!...)``" +msgstr "``(?!…)``" + +#: ../../library/re.rst:384 +msgid "" +"Matches if ``...`` doesn't match next. This is a :dfn:`negative lookahead " +"assertion`. For example, ``Isaac (?!Asimov)`` will match ``'Isaac '`` only " +"if it's *not* followed by ``'Asimov'``." +msgstr "" +"当 ``…`` 不匹配时,匹配成功。这个叫 :dfn:`否定型前视断言` (negative lookahead assertion)。例如, " +"``Isaac (?!Asimov)`` 将会匹配 ``'Isaac '`` ,仅当它后面 *不是* ``'Asimov'`` 。" + +#: ../../library/re.rst:413 +msgid "``(?<=...)``" +msgstr "``(?<=…)``" + +#: ../../library/re.rst:391 +msgid "" +"Matches if the current position in the string is preceded by a match for " +"``...`` that ends at the current position. This is called a :dfn:`positive " +"lookbehind assertion`. ``(?<=abc)def`` will find a match in ``'abcdef'``, " +"since the lookbehind will back up 3 characters and check if the contained " +"pattern matches. The contained pattern must only match strings of some fixed" +" length, meaning that ``abc`` or ``a|b`` are allowed, but ``a*`` and " +"``a{3,4}`` are not. Note that patterns which start with positive lookbehind" +" assertions will not match at the beginning of the string being searched; " +"you will most likely want to use the :func:`search` function rather than the" +" :func:`match` function:" +msgstr "" +"如果 ``...`` 的匹配内容出现在当前位置的左侧,则匹配。这叫做 :dfn:`肯定型后视断言` (positive lookbehind " +"assertion)。 ``(?<=abc)def`` 将会在 ``'abcdef'`` " +"中找到一个匹配,因为后视会回退3个字符并检查内部表达式是否匹配。内部表达式(匹配的内容)必须是固定长度的,意思就是 ``abc`` 或 ``a|b`` " +"是允许的,但是 ``a*`` 和 ``a{3,4}`` " +"不可以。注意,以肯定型后视断言开头的正则表达式,匹配项一般不会位于搜索字符串的开头。很可能你应该使用 :func:`search` 函数,而不是 " +":func:`match` 函数:" + +#: ../../library/re.rst:406 +msgid "This example looks for a word following a hyphen:" +msgstr "这个例子搜索一个跟随在连字符后的单词:" + +#: ../../library/re.rst:412 +msgid "Added support for group references of fixed length." +msgstr "添加定长组合引用的支持。" + +#: ../../library/re.rst:422 +msgid "``(?|$)`` is a poor email matching pattern, " +"which will match with ``''`` as well as ``'user@host.com'``, " +"but not with ``''``." +msgstr "" +"如果给定的 *id* 或 *name* 存在,将会尝试匹配 ``yes-pattern`` ,否则就尝试匹配 ``no-pattern``,``no-" +"pattern`` 可选,也可以被忽略。比如, ``(<)?(\\w+@\\w+(?:\\.\\w+)+)(?(1)>|$)`` " +"是一个email样式匹配,将匹配 ``''`` 或 ``'user@host.com'`` ,但不会匹配 " +"``''``。" + +#: ../../library/re.rst:433 +msgid "" +"The special sequences consist of ``'\\'`` and a character from the list " +"below. If the ordinary character is not an ASCII digit or an ASCII letter, " +"then the resulting RE will match the second character. For example, ``\\$``" +" matches the character ``'$'``." +msgstr "" +"由 ``'\\'`` 和一个字符组成的特殊序列在以下列出。 " +"如果普通字符不是ASCII数位或者ASCII字母,那么正则样式将匹配第二个字符。比如,``\\$`` 匹配字符 ``'$'``." + +#: ../../library/re.rst:448 +msgid "``\\number``" +msgstr "``\\number``" + +#: ../../library/re.rst:441 +msgid "" +"Matches the contents of the group of the same number. Groups are numbered " +"starting from 1. For example, ``(.+) \\1`` matches ``'the the'`` or ``'55 " +"55'``, but not ``'thethe'`` (note the space after the group). This special " +"sequence can only be used to match one of the first 99 groups. If the first" +" digit of *number* is 0, or *number* is 3 octal digits long, it will not be " +"interpreted as a group match, but as the character with octal value " +"*number*. Inside the ``'['`` and ``']'`` of a character class, all numeric " +"escapes are treated as characters." +msgstr "" +"匹配数字代表的组合。每个括号是一个组合,组合从1开始编号。比如 ``(.+) \\1`` 匹配 ``'the the'`` 或者 ``'55 " +"55'``, 但不会匹配 ``'thethe'`` (注意组合后面的空格)。这个特殊序列只能用于匹配前面99个组合。如果 *number* " +"的第一个数位是0, 或者 *number* 是三个八进制数,它将不会被看作是一个组合,而是八进制的数字值。在 ``'['`` 和 ``']'`` " +"字符集合内,任何数字转义都被看作是字符。" + +#: ../../library/re.rst:453 +msgid "``\\A``" +msgstr "``\\A``" + +#: ../../library/re.rst:453 +msgid "Matches only at the start of the string." +msgstr "只匹配字符串开始。" + +#: ../../library/re.rst:469 +msgid "``\\b``" +msgstr "``\\b``" + +#: ../../library/re.rst:458 +msgid "" +"Matches the empty string, but only at the beginning or end of a word. A word" +" is defined as a sequence of word characters. Note that formally, ``\\b`` " +"is defined as the boundary between a ``\\w`` and a ``\\W`` character (or " +"vice versa), or between ``\\w`` and the beginning/end of the string. This " +"means that ``r'\\bfoo\\b'`` matches ``'foo'``, ``'foo.'``, ``'(foo)'``, " +"``'bar foo baz'`` but not ``'foobar'`` or ``'foo3'``." +msgstr "" +"匹配空字符串,但只在单词开始或结尾的位置。一个单词被定义为一个单词字符的序列。注意,通常 ``\\b`` 定义为 ``\\w`` 和 ``\\W`` " +"字符之间,或者 ``\\w`` 和字符串开始/结尾的边界, 意思就是 ``r'\\bfoo\\b'`` 匹配 ``'foo'``, " +"``'foo.'``, ``'(foo)'``, ``'bar foo baz'`` 但不匹配 ``'foobar'`` 或者 ``'foo3'``。" + +#: ../../library/re.rst:465 +msgid "" +"By default Unicode alphanumerics are the ones used in Unicode patterns, but " +"this can be changed by using the :const:`ASCII` flag. Word boundaries are " +"determined by the current locale if the :const:`LOCALE` flag is used. Inside" +" a character range, ``\\b`` represents the backspace character, for " +"compatibility with Python's string literals." +msgstr "" +"默认情况下,Unicode字母和数字是在Unicode样式中使用的,但是可以用 :const:`ASCII` 标记来更改。如果 " +":const:`LOCALE` 标记被设置的话,词的边界是由当前语言区域设置决定的,``\\b`` 表示退格字符,以便与Python字符串文本兼容。" + +#: ../../library/re.rst:480 +msgid "``\\B``" +msgstr "``\\B``" + +#: ../../library/re.rst:474 +msgid "" +"Matches the empty string, but only when it is *not* at the beginning or end " +"of a word. This means that ``r'py\\B'`` matches ``'python'``, ``'py3'``, " +"``'py2'``, but not ``'py'``, ``'py.'``, or ``'py!'``. ``\\B`` is just the " +"opposite of ``\\b``, so word characters in Unicode patterns are Unicode " +"alphanumerics or the underscore, although this can be changed by using the " +":const:`ASCII` flag. Word boundaries are determined by the current locale " +"if the :const:`LOCALE` flag is used." +msgstr "" +"匹配空字符串,但 *不* 能在词的开头或者结尾。意思就是 ``r'py\\B'`` 匹配 ``'python'``, ``'py3'``, " +"``'py2'``, 但不匹配 ``'py'``, ``'py.'``, 或者 ``'py!'``. ``\\B`` 是 ``\\b`` " +"的取非,所以Unicode样式的词语是由Unicode字母,数字或下划线构成的,虽然可以用 :const:`ASCII` 标志来改变。如果使用了 " +":const:`LOCALE` 标志,则词的边界由当前语言区域设置。" + +#: ../../library/re.rst:492 +msgid "``\\d``" +msgstr "``\\d``" + +#: ../../library/re.rst:489 ../../library/re.rst:509 ../../library/re.rst:529 +msgid "For Unicode (str) patterns:" +msgstr "对于 Unicode (str) 样式:" + +#: ../../library/re.rst:486 +msgid "" +"Matches any Unicode decimal digit (that is, any character in Unicode " +"character category [Nd]). This includes ``[0-9]``, and also many other " +"digit characters. If the :const:`ASCII` flag is used only ``[0-9]`` is " +"matched." +msgstr "" +"匹配任何Unicode十进制数(就是在Unicode字符目录[Nd]里的字符)。这包括了 ``[0-9]`` ,和很多其他的数字字符。如果设置了 " +":const:`ASCII` 标志,就只匹配 ``[0-9]`` 。" + +#: ../../library/re.rst:492 ../../library/re.rst:513 ../../library/re.rst:535 +msgid "For 8-bit (bytes) patterns:" +msgstr "对于8位(bytes)样式:" + +#: ../../library/re.rst:492 +msgid "Matches any decimal digit; this is equivalent to ``[0-9]``." +msgstr "匹配任何十进制数,就是 ``[0-9]``。" + +#: ../../library/re.rst:499 +msgid "``\\D``" +msgstr "``\\D``" + +#: ../../library/re.rst:497 +msgid "" +"Matches any character which is not a decimal digit. This is the opposite of " +"``\\d``. If the :const:`ASCII` flag is used this becomes the equivalent of " +"``[^0-9]``." +msgstr "匹配任何非十进制数字的字符。就是 ``\\d`` 取非。 如果设置了 :const:`ASCII` 标志,就相当于 ``[^0-9]`` 。" + +#: ../../library/re.rst:513 +msgid "``\\s``" +msgstr "``\\s``" + +#: ../../library/re.rst:505 +msgid "" +"Matches Unicode whitespace characters (which includes ``[ " +"\\t\\n\\r\\f\\v]``, and also many other characters, for example the non-" +"breaking spaces mandated by typography rules in many languages). If the " +":const:`ASCII` flag is used, only ``[ \\t\\n\\r\\f\\v]`` is matched." +msgstr "" +"匹配任何Unicode空白字符(包括 ``[ \\t\\n\\r\\f\\v]`` ,还有很多其他字符,比如不同语言排版规则约定的不换行空格)。如果 " +":const:`ASCII` 被设置,就只匹配 ``[ \\t\\n\\r\\f\\v]`` 。" + +#: ../../library/re.rst:512 +msgid "" +"Matches characters considered whitespace in the ASCII character set; this is" +" equivalent to ``[ \\t\\n\\r\\f\\v]``." +msgstr "匹配ASCII中的空白字符,就是 ``[ \\t\\n\\r\\f\\v]`` 。" + +#: ../../library/re.rst:520 +msgid "``\\S``" +msgstr "``\\S``" + +#: ../../library/re.rst:518 +msgid "" +"Matches any character which is not a whitespace character. This is the " +"opposite of ``\\s``. If the :const:`ASCII` flag is used this becomes the " +"equivalent of ``[^ \\t\\n\\r\\f\\v]``." +msgstr "匹配任何非空白字符。就是 ``\\s`` 取非。如果设置了 :const:`ASCII` 标志,就相当于 ``[^ \\t\\n\\r\\f\\v]`` 。" + +#: ../../library/re.rst:535 +msgid "``\\w``" +msgstr "``\\w``" + +#: ../../library/re.rst:526 +msgid "" +"Matches Unicode word characters; this includes most characters that can be " +"part of a word in any language, as well as numbers and the underscore. If " +"the :const:`ASCII` flag is used, only ``[a-zA-Z0-9_]`` is matched." +msgstr "" +"匹配Unicode词语的字符,包含了可以构成词语的绝大部分字符,也包括数字和下划线。如果设置了 :const:`ASCII` 标志,就只匹配 " +"``[a-zA-Z0-9_]`` 。" + +#: ../../library/re.rst:532 +msgid "" +"Matches characters considered alphanumeric in the ASCII character set; this " +"is equivalent to ``[a-zA-Z0-9_]``. If the :const:`LOCALE` flag is used, " +"matches characters considered alphanumeric in the current locale and the " +"underscore." +msgstr "" +"匹配ASCII字符中的数字和字母和下划线,就是 ``[a-zA-Z0-9_]`` 。如果设置了 :const:`LOCALE` " +"标记,就匹配当前语言区域的数字和字母和下划线。" + +#: ../../library/re.rst:544 +msgid "``\\W``" +msgstr "``\\W``" + +#: ../../library/re.rst:540 +msgid "" +"Matches any character which is not a word character. This is the opposite of" +" ``\\w``. If the :const:`ASCII` flag is used this becomes the equivalent of " +"``[^a-zA-Z0-9_]``. If the :const:`LOCALE` flag is used, matches characters " +"which are neither alphanumeric in the current locale nor the underscore." +msgstr "" +"匹配非单词字符的字符。这与 ``\\w`` 正相反。如果使用了 :const:`ASCII` 旗标,这就等价于 " +"``[^a-zA-Z0-9_]``。如果使用了 :const:`LOCALE` 旗标,则会匹配当前区域中既非字母数字也非下划线的字符。" + +#: ../../library/re.rst:549 +msgid "``\\Z``" +msgstr "``\\Z``" + +#: ../../library/re.rst:549 +msgid "Matches only at the end of the string." +msgstr "只匹配字符串尾。" + +#: ../../library/re.rst:565 +msgid "" +"Most of the standard escapes supported by Python string literals are also " +"accepted by the regular expression parser::" +msgstr "绝大部分Python的标准转义字符也被正则表达式分析器支持。::" + +#: ../../library/re.rst:572 +msgid "" +"(Note that ``\\b`` is used to represent word boundaries, and means " +"\"backspace\" only inside character classes.)" +msgstr "(注意 ``\\b`` 被用于表示词语的边界,它只在字符集合内表示退格,比如 ``[\\b]`` 。)" + +#: ../../library/re.rst:575 +msgid "" +"``'\\u'``, ``'\\U'``, and ``'\\N'`` escape sequences are only recognized in " +"Unicode patterns. In bytes patterns they are errors. Unknown escapes of " +"ASCII letters are reserved for future use and treated as errors." +msgstr "" +"``'\\u'``, ``'\\U'`` 和 ``'\\N'`` 转义序列只在 Unicode 模式中可被识别。 在 bytes 模式中它们会导致错误。" +" 未知的 ASCII 字母转义序列保留在未来使用,会被当作错误来处理。" + +#: ../../library/re.rst:579 +msgid "" +"Octal escapes are included in a limited form. If the first digit is a 0, or" +" if there are three octal digits, it is considered an octal escape. " +"Otherwise, it is a group reference. As for string literals, octal escapes " +"are always at most three digits in length." +msgstr "" +"八进制转义包含为一个有限形式。如果首位数字是 0, " +"或者有三个八进制数位,那么就认为它是八进制转义。其他的情况,就看作是组引用。对于字符串文本,八进制转义最多有三个数位长。" + +#: ../../library/re.rst:584 +msgid "The ``'\\u'`` and ``'\\U'`` escape sequences have been added." +msgstr "增加了 ``'\\u'`` 和 ``'\\U'`` 转义序列。" + +#: ../../library/re.rst:587 +msgid "" +"Unknown escapes consisting of ``'\\'`` and an ASCII letter now are errors." +msgstr "由 ``'\\'`` 和一个ASCII字符组成的未知转义会被看成错误。" + +#: ../../library/re.rst:590 +msgid "" +"The ``'\\N{name}'`` escape sequence has been added. As in string literals, " +"it expands to the named Unicode character (e.g. ``'\\N{EM DASH}'``)." +msgstr "" +"添加了 ``'\\N{name}'`` 转义序列。 与在字符串字面值中一样,它扩展了命名 Unicode 字符 (例如 ``'\\N{EM " +"DASH}'``)。" + +#: ../../library/re.rst:598 +msgid "Module Contents" +msgstr "模块内容" + +#: ../../library/re.rst:600 +msgid "" +"The module defines several functions, constants, and an exception. Some of " +"the functions are simplified versions of the full featured methods for " +"compiled regular expressions. Most non-trivial applications always use the " +"compiled form." +msgstr "" +"模块定义了几个函数、常量,和一个异常。有些函数是编译后的正则表达式方法的简化版本(少了一些特性)。重要的应用程序大多会在使用前先编译正则表达式。" + +#: ../../library/re.rst:605 +msgid "" +"Flag constants are now instances of :class:`RegexFlag`, which is a subclass " +"of :class:`enum.IntFlag`." +msgstr "标志常量现在是 :class:`RegexFlag` 类的实例,这个类是 :class:`enum.IntFlag` 的子类。" + +#: ../../library/re.rst:611 +msgid "" +"Compile a regular expression pattern into a :ref:`regular expression object " +"`, which can be used for matching using its " +":func:`~Pattern.match`, :func:`~Pattern.search` and other methods, described" +" below." +msgstr "" +"将正则表达式的样式编译为一个 :ref:`正则表达式对象 ` (正则对象),可以用于匹配,通过这个对象的方法 " +":func:`~Pattern.match`, :func:`~Pattern.search` 以及其他如下描述。" + +#: ../../library/re.rst:616 +msgid "" +"The expression's behaviour can be modified by specifying a *flags* value. " +"Values can be any of the following variables, combined using bitwise OR (the" +" ``|`` operator)." +msgstr "这个表达式的行为可以通过指定 *标记* 的值来改变。值可以是以下任意变量,可以通过位的OR操作来结合( ``|`` 操作符)。" + +#: ../../library/re.rst:620 +msgid "The sequence ::" +msgstr "序列 ::" + +#: ../../library/re.rst:625 +msgid "is equivalent to ::" +msgstr "等价于 ::" + +#: ../../library/re.rst:629 +msgid "" +"but using :func:`re.compile` and saving the resulting regular expression " +"object for reuse is more efficient when the expression will be used several " +"times in a single program." +msgstr "如果需要多次使用这个正则表达式的话,使用 :func:`re.compile` 和保存这个正则对象以便复用,可以让程序更加高效。" + +#: ../../library/re.rst:635 +msgid "" +"The compiled versions of the most recent patterns passed to " +":func:`re.compile` and the module-level matching functions are cached, so " +"programs that use only a few regular expressions at a time needn't worry " +"about compiling regular expressions." +msgstr "通过 :func:`re.compile` 编译后的样式,和模块级的函数会被缓存, 所以少数的正则表达式使用无需考虑编译的问题。" + +#: ../../library/re.rst:644 +msgid "" +"Make ``\\w``, ``\\W``, ``\\b``, ``\\B``, ``\\d``, ``\\D``, ``\\s`` and " +"``\\S`` perform ASCII-only matching instead of full Unicode matching. This " +"is only meaningful for Unicode patterns, and is ignored for byte patterns. " +"Corresponds to the inline flag ``(?a)``." +msgstr "" +"让 ``\\w``, ``\\W``, ``\\b``, ``\\B``, ``\\d``, ``\\D``, ``\\s`` 和 ``\\S`` " +"只匹配ASCII,而不是Unicode。这只对Unicode样式有效,会被byte样式忽略。相当于前面语法中的内联标志 ``(?a)`` 。" + +#: ../../library/re.rst:649 +msgid "" +"Note that for backward compatibility, the :const:`re.U` flag still exists " +"(as well as its synonym :const:`re.UNICODE` and its embedded counterpart " +"``(?u)``), but these are redundant in Python 3 since matches are Unicode by " +"default for strings (and Unicode matching isn't allowed for bytes)." +msgstr "" +"注意,为了保持向后兼容, :const:`re.U` 标记依然存在(还有他的同义 :const:`re.UNICODE` 和嵌入形式 ``(?u)``" +" ) , 但是这些在 Python 3 是冗余的,因为默认字符串已经是Unicode了(并且Unicode匹配不允许byte出现)。" + +#: ../../library/re.rst:658 +msgid "" +"Display debug information about compiled expression. No corresponding inline" +" flag." +msgstr "显示编译时的debug信息,没有内联标记。" + +#: ../../library/re.rst:665 +msgid "" +"Perform case-insensitive matching; expressions like ``[A-Z]`` will also " +"match lowercase letters. Full Unicode matching (such as ``Ü`` matching " +"``ü``) also works unless the :const:`re.ASCII` flag is used to disable non-" +"ASCII matches. The current locale does not change the effect of this flag " +"unless the :const:`re.LOCALE` flag is also used. Corresponds to the inline " +"flag ``(?i)``." +msgstr "" +"进行忽略大小写匹配;表达式如 ``[A-Z]`` 也会匹配小写字符。Unicode匹配(比如 ``Ü`` 匹配 ``ü``)同样有用,除非设置了 " +":const:`re.ASCII` 标记来禁用非ASCII匹配。当前语言区域不会改变这个标记,除非设置了 :const:`re.LOCALE` " +"标记。这个相当于内联标记 ``(?i)`` 。" + +#: ../../library/re.rst:672 +msgid "" +"Note that when the Unicode patterns ``[a-z]`` or ``[A-Z]`` are used in " +"combination with the :const:`IGNORECASE` flag, they will match the 52 ASCII " +"letters and 4 additional non-ASCII letters: 'İ' (U+0130, Latin capital " +"letter I with dot above), 'ı' (U+0131, Latin small letter dotless i), 'ſ' " +"(U+017F, Latin small letter long s) and 'K' (U+212A, Kelvin sign). If the " +":const:`ASCII` flag is used, only letters 'a' to 'z' and 'A' to 'Z' are " +"matched." +msgstr "" +"注意,当设置了 :const:`IGNORECASE` 标记,搜索Unicode样式 ``[a-z]`` 或 ``[A-Z]`` " +"的结合时,它将会匹配52个ASCII字符和4个额外的非ASCII字符: 'İ' (U+0130, 拉丁大写的 I 带个点在上面), 'ı' " +"(U+0131, 拉丁小写没有点的 I ), 'ſ' (U+017F, 拉丁小写长 s) and 'K' (U+212A, 开尔文符号).如果使用 " +":const:`ASCII` 标记,就只匹配 'a' 到 'z' 和 'A' 到 'Z' 。" + +#: ../../library/re.rst:683 +msgid "" +"Make ``\\w``, ``\\W``, ``\\b``, ``\\B`` and case-insensitive matching " +"dependent on the current locale. This flag can be used only with bytes " +"patterns. The use of this flag is discouraged as the locale mechanism is " +"very unreliable, it only handles one \"culture\" at a time, and it only " +"works with 8-bit locales. Unicode matching is already enabled by default in" +" Python 3 for Unicode (str) patterns, and it is able to handle different " +"locales/languages. Corresponds to the inline flag ``(?L)``." +msgstr "" +"由当前语言区域决定 ``\\w``, ``\\W``, ``\\b``, ``\\B`` " +"和大小写敏感匹配。这个标记只能对byte样式有效。这个标记不推荐使用,因为语言区域机制很不可靠,它一次只能处理一个 " +"\"习惯”,而且只对8位字节有效。Unicode匹配在Python 3 里默认启用,并可以处理不同语言。 这个对应内联标记 ``(?L)`` 。" + +#: ../../library/re.rst:692 +msgid "" +":const:`re.LOCALE` can be used only with bytes patterns and is not " +"compatible with :const:`re.ASCII`." +msgstr ":const:`re.LOCALE` 只能用于byte样式,而且不能和 :const:`re.ASCII` 一起用。" + +#: ../../library/re.rst:696 +msgid "" +"Compiled regular expression objects with the :const:`re.LOCALE` flag no " +"longer depend on the locale at compile time. Only the locale at matching " +"time affects the result of matching." +msgstr "设置了 :const:`re.LOCALE` 标记的编译正则对象不再在编译时依赖语言区域设置。语言区域设置只在匹配的时候影响其结果。" + +#: ../../library/re.rst:705 +msgid "" +"When specified, the pattern character ``'^'`` matches at the beginning of " +"the string and at the beginning of each line (immediately following each " +"newline); and the pattern character ``'$'`` matches at the end of the string" +" and at the end of each line (immediately preceding each newline). By " +"default, ``'^'`` matches only at the beginning of the string, and ``'$'`` " +"only at the end of the string and immediately before the newline (if any) at" +" the end of the string. Corresponds to the inline flag ``(?m)``." +msgstr "" +"设置以后,样式字符 ``'^'`` 匹配字符串的开始,和每一行的开始(换行符后面紧跟的符号);样式字符 ``'$'`` " +"匹配字符串尾,和每一行的结尾(换行符前面那个符号)。默认情况下,``’^’`` 匹配字符串头,``'$'`` 匹配字符串尾。对应内联标记 " +"``(?m)`` 。" + +#: ../../library/re.rst:717 +msgid "" +"Make the ``'.'`` special character match any character at all, including a " +"newline; without this flag, ``'.'`` will match anything *except* a newline. " +"Corresponds to the inline flag ``(?s)``." +msgstr "" +"让 ``'.'`` 特殊字符匹配任何字符,包括换行符;如果没有这个标记,``'.'`` 就匹配 *除了* 换行符的其他任意字符。对应内联标记 " +"``(?s)`` 。" + +#: ../../library/re.rst:727 +msgid "" +"This flag allows you to write regular expressions that look nicer and are " +"more readable by allowing you to visually separate logical sections of the " +"pattern and add comments. Whitespace within the pattern is ignored, except " +"when in a character class, or when preceded by an unescaped backslash, or " +"within tokens like ``*?``, ``(?:`` or ``(?P<...>``. When a line contains a " +"``#`` that is not in a character class and is not preceded by an unescaped " +"backslash, all characters from the leftmost such ``#`` through the end of " +"the line are ignored." +msgstr "" +"这个标记允许你编写更具可读性更友好的正则表达式。通过分段和添加注释。空白符号会被忽略,除非在一个字符集合当中或者由反斜杠转义,或者在 ``*?``, " +"``(?:`` or ``(?P<…>`` 分组之内。当一个行内有 ``#`` 不在字符集和转义序列,那么它之后的所有字符都是注释。" + +#: ../../library/re.rst:736 +msgid "" +"This means that the two following regular expression objects that match a " +"decimal number are functionally equal::" +msgstr "意思就是下面两个正则表达式等价地匹配一个十进制数字:" + +#: ../../library/re.rst:744 +msgid "Corresponds to the inline flag ``(?x)``." +msgstr "对应内联标记 ``(?x)`` 。" + +#: ../../library/re.rst:749 +msgid "" +"Scan through *string* looking for the first location where the regular " +"expression *pattern* produces a match, and return a corresponding " +":ref:`match object `. Return ``None`` if no position in the " +"string matches the pattern; note that this is different from finding a zero-" +"length match at some point in the string." +msgstr "" +"扫描整个 *字符串* 找到匹配样式的第一个位置,并返回一个相应的 :ref:`匹配对象 `。如果没有匹配,就返回一个 " +"``None`` ; 注意这和找到一个零长度匹配是不同的。" + +#: ../../library/re.rst:758 +msgid "" +"If zero or more characters at the beginning of *string* match the regular " +"expression *pattern*, return a corresponding :ref:`match object `. Return ``None`` if the string does not match the pattern; note " +"that this is different from a zero-length match." +msgstr "" +"如果 *string* 开始的0或者多个字符匹配到了正则表达式样式,就返回一个相应的 :ref:`匹配对象 ` 。 " +"如果没有匹配,就返回 ``None`` ;注意它跟零长度匹配是不同的。" + +#: ../../library/re.rst:763 +msgid "" +"Note that even in :const:`MULTILINE` mode, :func:`re.match` will only match " +"at the beginning of the string and not at the beginning of each line." +msgstr "" +"注意即便是 :const:`MULTILINE` 多行模式, :func:`re.match` 也只匹配字符串的开始位置,而不匹配每行开始。" + +#: ../../library/re.rst:766 +msgid "" +"If you want to locate a match anywhere in *string*, use :func:`search` " +"instead (see also :ref:`search-vs-match`)." +msgstr "" +"如果你想定位 *string* 的任何位置,使用 :func:`search` 来替代(也可参考 :ref:`search-vs-match` )" + +#: ../../library/re.rst:772 +msgid "" +"If the whole *string* matches the regular expression *pattern*, return a " +"corresponding :ref:`match object `. Return ``None`` if the " +"string does not match the pattern; note that this is different from a zero-" +"length match." +msgstr "" +"如果整个 *string* 匹配到正则表达式样式,就返回一个相应的 :ref:`匹配对象 ` 。 否则就返回一个 " +"``None`` ;注意这跟零长度匹配是不同的。" + +#: ../../library/re.rst:782 +msgid "" +"Split *string* by the occurrences of *pattern*. If capturing parentheses " +"are used in *pattern*, then the text of all groups in the pattern are also " +"returned as part of the resulting list. If *maxsplit* is nonzero, at most " +"*maxsplit* splits occur, and the remainder of the string is returned as the " +"final element of the list. ::" +msgstr "" +"用 *pattern* 分开 *string* 。 如果在 *pattern* 中捕获到括号,那么所有的组里的文字也会包含在列表里。如果 " +"*maxsplit* 非零, 最多进行 *maxsplit* 次分隔, 剩下的字符全部返回到列表的最后一个元素。 ::" + +#: ../../library/re.rst:797 +msgid "" +"If there are capturing groups in the separator and it matches at the start " +"of the string, the result will start with an empty string. The same holds " +"for the end of the string::" +msgstr "如果分隔符里有捕获组合,并且匹配到字符串的开始,那么结果将会以一个空字符串开始。对于结尾也是一样 ::" + +#: ../../library/re.rst:804 +msgid "" +"That way, separator components are always found at the same relative indices" +" within the result list." +msgstr "这样的话,分隔组将会出现在结果列表中同样的位置。" + +#: ../../library/re.rst:807 +msgid "" +"Empty matches for the pattern split the string only when not adjacent to a " +"previous empty match." +msgstr "样式的空匹配仅在与前一个空匹配不相邻时才会拆分字符串。" + +#: ../../library/re.rst:817 ../../library/re.rst:907 ../../library/re.rst:931 +msgid "Added the optional flags argument." +msgstr "增加了可选标记参数。" + +#: ../../library/re.rst:820 +msgid "" +"Added support of splitting on a pattern that could match an empty string." +msgstr "增加了空字符串的样式分隔。" + +#: ../../library/re.rst:826 +msgid "" +"Return all non-overlapping matches of *pattern* in *string*, as a list of " +"strings or tuples. The *string* is scanned left-to-right, and matches are " +"returned in the order found. Empty matches are included in the result." +msgstr "" +"返回 *pattern* 在 *string* 中的所有非重叠匹配,以字符串列表或字符串元组列表的形式。对 *string* " +"的扫描从左至右,匹配结果按照找到的顺序返回。 空匹配也包括在结果中。" + +#: ../../library/re.rst:830 +msgid "" +"The result depends on the number of capturing groups in the pattern. If " +"there are no groups, return a list of strings matching the whole pattern. " +"If there is exactly one group, return a list of strings matching that group." +" If multiple groups are present, return a list of tuples of strings " +"matching the groups. Non-capturing groups do not affect the form of the " +"result." +msgstr "" +"返回结果取决于模式中捕获组的数量。如果没有组,返回与整个模式匹配的字符串列表。如果有且仅有一个组,返回与该组匹配的字符串列表。如果有多个组,返回与这些组匹配的字符串元组列表。非捕获组不影响结果。" + +#: ../../library/re.rst:842 ../../library/re.rst:853 +msgid "Non-empty matches can now start just after a previous empty match." +msgstr "非空匹配现在可以在前一个空匹配之后出现了。" + +#: ../../library/re.rst:848 +msgid "" +"Return an :term:`iterator` yielding :ref:`match objects ` " +"over all non-overlapping matches for the RE *pattern* in *string*. The " +"*string* is scanned left-to-right, and matches are returned in the order " +"found. Empty matches are included in the result." +msgstr "" +"*pattern* 在 *string* 里所有的非重复匹配,返回为一个迭代器 :term:`iterator` 保存了 :ref:`匹配对象 " +"` 。 *string* 从左到右扫描,匹配按顺序排列。空匹配也包含在结果里。" + +#: ../../library/re.rst:859 +msgid "" +"Return the string obtained by replacing the leftmost non-overlapping " +"occurrences of *pattern* in *string* by the replacement *repl*. If the " +"pattern isn't found, *string* is returned unchanged. *repl* can be a string" +" or a function; if it is a string, any backslash escapes in it are " +"processed. That is, ``\\n`` is converted to a single newline character, " +"``\\r`` is converted to a carriage return, and so forth. Unknown escapes of" +" ASCII letters are reserved for future use and treated as errors. Other " +"unknown escapes such as ``\\&`` are left alone. Backreferences, such as " +"``\\6``, are replaced with the substring matched by group 6 in the pattern. " +"For example::" +msgstr "" +"返回通过使用 *repl* 替换在 *string* 最左边非重叠出现的 *pattern* 而获得的字符串。 如果样式没有找到,则不加改变地返回 " +"*string*。 *repl* 可以是字符串或函数;如为字符串,则其中任何反斜杠转义序列都会被处理。 也就是说,``\\n`` " +"会被转换为一个换行符,``\\r`` 会被转换为一个回车符,依此类推。 未知的 ASCII 字符转义序列保留在未来使用,会被当作错误来处理。 " +"其他未知转义序列例如 ``\\&`` 会保持原样。 向后引用像是 ``\\6`` 会用样式中第 6 组所匹配到的子字符串来替换。 例如::" + +#: ../../library/re.rst:875 +msgid "" +"If *repl* is a function, it is called for every non-overlapping occurrence " +"of *pattern*. The function takes a single :ref:`match object ` argument, and returns the replacement string. For example::" +msgstr "" +"如果 *repl* 是一个函数,那它会对每个非重复的 *pattern* 的情况调用。这个函数只能有一个 :ref:`匹配对象 ` 参数,并返回一个替换后的字符串。比如 ::" + +#: ../../library/re.rst:887 +msgid "The pattern may be a string or a :ref:`pattern object `." +msgstr "样式可以是一个字符串或者一个 :ref:`样式对象 ` 。" + +#: ../../library/re.rst:889 +msgid "" +"The optional argument *count* is the maximum number of pattern occurrences " +"to be replaced; *count* must be a non-negative integer. If omitted or zero," +" all occurrences will be replaced. Empty matches for the pattern are " +"replaced only when not adjacent to a previous empty match, so ``sub('x*', " +"'-', 'abxd')`` returns ``'-a-b--d-'``." +msgstr "" +"可选参数 *count* 是要替换的最大次数;*count* 必须是非负整数。如果省略这个参数或设为 0,所有的匹配都会被替换。 " +"样式的空匹配仅在与前一个空匹配不相邻时才会被替换,所以 ``sub('x*', '-', 'abxd')`` 返回 ``'-a-b--d-'`` 。" + +#: ../../library/re.rst:897 +msgid "" +"In string-type *repl* arguments, in addition to the character escapes and " +"backreferences described above, ``\\g`` will use the substring matched" +" by the group named ``name``, as defined by the ``(?P...)`` syntax. " +"``\\g`` uses the corresponding group number; ``\\g<2>`` is therefore" +" equivalent to ``\\2``, but isn't ambiguous in a replacement such as " +"``\\g<2>0``. ``\\20`` would be interpreted as a reference to group 20, not " +"a reference to group 2 followed by the literal character ``'0'``. The " +"backreference ``\\g<0>`` substitutes in the entire substring matched by the " +"RE." +msgstr "" +"在字符串类型的 *repl* 参数里,如上所述的转义和向后引用中,``\\g`` 会使用命名组合 ``name``,(在 " +"``(?P…)`` 语法中定义) ``\\g`` 会使用数字组;``\\g<2>`` 就是 " +"``\\2``,但它避免了二义性,如 ``\\g<2>0``。 ``\\20`` 就会被解释为组20,而不是组2后面跟随一个字符 " +"``'0'``。向后引用 ``\\g<0>`` 把 *pattern* 作为一整个组进行引用。" + +#: ../../library/re.rst:910 ../../library/re.rst:934 ../../library/re.rst:1165 +msgid "Unmatched groups are replaced with an empty string." +msgstr "不匹配的组合替换为空字符串。" + +#: ../../library/re.rst:913 +msgid "" +"Unknown escapes in *pattern* consisting of ``'\\'`` and an ASCII letter now " +"are errors." +msgstr "*pattern* 中的未知转义(由 ``'\\'`` 和一个 ASCII 字符组成)被视为错误。" + +#: ../../library/re.rst:917 +msgid "" +"Unknown escapes in *repl* consisting of ``'\\'`` and an ASCII letter now are" +" errors." +msgstr "*repl* 中的未知转义(由 ``'\\'`` 和一个 ASCII 字符组成)被视为错误。" + +#: ../../library/re.rst:921 +msgid "" +"Empty matches for the pattern are replaced when adjacent to a previous non-" +"empty match." +msgstr "样式中的空匹配相邻接时会被替换。" + +#: ../../library/re.rst:928 +msgid "" +"Perform the same operation as :func:`sub`, but return a tuple ``(new_string," +" number_of_subs_made)``." +msgstr "行为与 :func:`sub` 相同,但是返回一个元组 ``(字符串, 替换次数)``." + +#: ../../library/re.rst:940 +msgid "" +"Escape special characters in *pattern*. This is useful if you want to match " +"an arbitrary literal string that may have regular expression metacharacters " +"in it. For example::" +msgstr "转义 *pattern* 中的特殊字符。如果你想对任意可能包含正则表达式元字符的文本字符串进行匹配,它就是有用的。比如 ::" + +#: ../../library/re.rst:955 +msgid "" +"This function must not be used for the replacement string in :func:`sub` and" +" :func:`subn`, only backslashes should be escaped. For example::" +msgstr "这个函数不能被用于 :func:`sub` 和 :func:`subn` 的替换字符串,只有反斜杠应该被转义。 例如::" + +#: ../../library/re.rst:963 +msgid "The ``'_'`` character is no longer escaped." +msgstr "``'_'`` 不再被转义。" + +#: ../../library/re.rst:966 +msgid "" +"Only characters that can have special meaning in a regular expression are " +"escaped. As a result, ``'!'``, ``'\"'``, ``'%'``, ``\"'\"``, ``','``, " +"``'/'``, ``':'``, ``';'``, ``'<'``, ``'='``, ``'>'``, ``'@'``, and ``\"`\"``" +" are no longer escaped." +msgstr "" +"只有在正则表达式中具有特殊含义的字符才会被转义。 因此, ``'!'``, ``'\"'``, ``'%'``, ``\"'\"``, ``','``," +" ``'/'``, ``':'``, ``';'``, ``'<'``, ``'='``, ``'>'``, ``'@'`` 和 ``\"`\"`` " +"将不再会被转义。" + +#: ../../library/re.rst:975 +msgid "Clear the regular expression cache." +msgstr "清除正则表达式的缓存。" + +#: ../../library/re.rst:980 +msgid "" +"Exception raised when a string passed to one of the functions here is not a " +"valid regular expression (for example, it might contain unmatched " +"parentheses) or when some other error occurs during compilation or matching." +" It is never an error if a string contains no match for a pattern. The " +"error instance has the following additional attributes:" +msgstr "" +"当传递给函数的正则表达式不合法(比如括号不匹配),或者在编译或匹配过程中出现其他错误时,会引发异常。所给字符串不匹配所给模式不会引发异常。异常实例有以下附加属性:" + +#: ../../library/re.rst:988 +msgid "The unformatted error message." +msgstr "未格式化的错误消息。" + +#: ../../library/re.rst:992 +msgid "The regular expression pattern." +msgstr "正则表达式的模式串。" + +#: ../../library/re.rst:996 +msgid "The index in *pattern* where compilation failed (may be ``None``)." +msgstr "编译失败的 *pattern* 的位置索引(可以是 ``None`` )。" + +#: ../../library/re.rst:1000 +msgid "The line corresponding to *pos* (may be ``None``)." +msgstr "对应 *pos* (可以是 ``None``) 的行号。" + +#: ../../library/re.rst:1004 +msgid "The column corresponding to *pos* (may be ``None``)." +msgstr "对应 *pos* (可以是 ``None``) 的列号。" + +#: ../../library/re.rst:1006 +msgid "Added additional attributes." +msgstr "增加了额外的属性。" + +#: ../../library/re.rst:1012 +msgid "Regular Expression Objects" +msgstr "正则表达式对象 (正则对象)" + +#: ../../library/re.rst:1014 +msgid "" +"Compiled regular expression objects support the following methods and " +"attributes:" +msgstr "编译后的正则表达式对象支持以下方法和属性:" + +#: ../../library/re.rst:1019 +msgid "" +"Scan through *string* looking for the first location where this regular " +"expression produces a match, and return a corresponding :ref:`match object " +"`. Return ``None`` if no position in the string matches the " +"pattern; note that this is different from finding a zero-length match at " +"some point in the string." +msgstr "" +"扫描整个 *string* 寻找第一个匹配的位置, 并返回一个相应的 :ref:`匹配对象 `。如果没有匹配,就返回 " +"``None`` ;注意它和零长度匹配是不同的。" + +#: ../../library/re.rst:1025 +msgid "" +"The optional second parameter *pos* gives an index in the string where the " +"search is to start; it defaults to ``0``. This is not completely equivalent" +" to slicing the string; the ``'^'`` pattern character matches at the real " +"beginning of the string and at positions just after a newline, but not " +"necessarily at the index where the search is to start." +msgstr "" +"可选的第二个参数 *pos* 给出了字符串中开始搜索的位置索引;默认为 ``0``,它不完全等价于字符串切片; ``'^'`` " +"样式字符匹配字符串真正的开头,和换行符后面的第一个字符,但不会匹配索引规定开始的位置。" + +#: ../../library/re.rst:1031 +msgid "" +"The optional parameter *endpos* limits how far the string will be searched; " +"it will be as if the string is *endpos* characters long, so only the " +"characters from *pos* to ``endpos - 1`` will be searched for a match. If " +"*endpos* is less than *pos*, no match will be found; otherwise, if *rx* is a" +" compiled regular expression object, ``rx.search(string, 0, 50)`` is " +"equivalent to ``rx.search(string[:50], 0)``. ::" +msgstr "" +"可选参数 *endpos* 限定了字符串搜索的结束;它假定字符串长度到 *endpos* , 所以只有从 ``pos`` 到 ``endpos - " +"1`` 的字符会被匹配。如果 *endpos* 小于 *pos*,就不会有匹配产生;另外,如果 *rx* 是一个编译后的正则对象, " +"``rx.search(string, 0, 50)`` 等价于 ``rx.search(string[:50], 0)``。 ::" + +#: ../../library/re.rst:1046 +msgid "" +"If zero or more characters at the *beginning* of *string* match this regular" +" expression, return a corresponding :ref:`match object `. " +"Return ``None`` if the string does not match the pattern; note that this is " +"different from a zero-length match." +msgstr "" +"如果 *string* 的 *开始位置* 能够找到这个正则样式的任意个匹配,就返回一个相应的 :ref:`匹配对象 `。如果不匹配,就返回 ``None`` ;注意它与零长度匹配是不同的。" + +#: ../../library/re.rst:1051 ../../library/re.rst:1069 +msgid "" +"The optional *pos* and *endpos* parameters have the same meaning as for the " +":meth:`~Pattern.search` method. ::" +msgstr "可选参数 *pos* 和 *endpos* 与 :meth:`~Pattern.search` 含义相同。 ::" + +#: ../../library/re.rst:1059 +msgid "" +"If you want to locate a match anywhere in *string*, use " +":meth:`~Pattern.search` instead (see also :ref:`search-vs-match`)." +msgstr "" +"如果你想定位匹配在 *string* 中的位置,使用 :meth:`~Pattern.search` 来替代(另参考 :ref:`search-vs-" +"match`)。" + +#: ../../library/re.rst:1065 +msgid "" +"If the whole *string* matches this regular expression, return a " +"corresponding :ref:`match object `. Return ``None`` if the " +"string does not match the pattern; note that this is different from a zero-" +"length match." +msgstr "" +"如果整个 *string* 匹配这个正则表达式,就返回一个相应的 :ref:`匹配对象 ` 。 否则就返回 " +"``None`` ; 注意跟零长度匹配是不同的。" + +#: ../../library/re.rst:1083 +msgid "Identical to the :func:`split` function, using the compiled pattern." +msgstr "等价于 :func:`split` 函数,使用了编译后的样式。" + +#: ../../library/re.rst:1088 +msgid "" +"Similar to the :func:`findall` function, using the compiled pattern, but " +"also accepts optional *pos* and *endpos* parameters that limit the search " +"region like for :meth:`search`." +msgstr "" +"类似函数 :func:`findall` , 使用了编译后样式,但也可以接收可选参数 *pos* 和 *endpos* ,限制搜索范围,就像 " +":meth:`search`。" + +#: ../../library/re.rst:1095 +msgid "" +"Similar to the :func:`finditer` function, using the compiled pattern, but " +"also accepts optional *pos* and *endpos* parameters that limit the search " +"region like for :meth:`search`." +msgstr "" +"类似函数 :func:`finditer` , 使用了编译后样式,但也可以接收可选参数 *pos* 和 *endpos* ,限制搜索范围,就像 " +":meth:`search`。" + +#: ../../library/re.rst:1102 +msgid "Identical to the :func:`sub` function, using the compiled pattern." +msgstr "等价于 :func:`sub` 函数,使用了编译后的样式。" + +#: ../../library/re.rst:1107 +msgid "Identical to the :func:`subn` function, using the compiled pattern." +msgstr "等价于 :func:`subn` 函数,使用了编译后的样式。" + +#: ../../library/re.rst:1112 +msgid "" +"The regex matching flags. This is a combination of the flags given to " +":func:`.compile`, any ``(?...)`` inline flags in the pattern, and implicit " +"flags such as :data:`UNICODE` if the pattern is a Unicode string." +msgstr "" +"正则匹配标记。这是可以传递给 :func:`.compile` 的参数,任何 ``(?…)`` 内联标记,隐性标记比如 :data:`UNICODE` " +"的结合。" + +#: ../../library/re.rst:1119 +msgid "The number of capturing groups in the pattern." +msgstr "捕获到的模式串中组的数量。" + +#: ../../library/re.rst:1124 +msgid "" +"A dictionary mapping any symbolic group names defined by ``(?P)`` to " +"group numbers. The dictionary is empty if no symbolic groups were used in " +"the pattern." +msgstr "映射由 ``(?P)`` 定义的命名符号组合和数字组合的字典。如果没有符号组,那字典就是空的。" + +#: ../../library/re.rst:1131 +msgid "The pattern string from which the pattern object was compiled." +msgstr "编译对象的原始样式字符串。" + +#: ../../library/re.rst:1134 +msgid "" +"Added support of :func:`copy.copy` and :func:`copy.deepcopy`. Compiled " +"regular expression objects are considered atomic." +msgstr "" +"添加 :func:`copy.copy` 和 :func:`copy.deepcopy` 函数的支持。编译后的正则表达式对象被认为是原子性的。" + +#: ../../library/re.rst:1142 +msgid "Match Objects" +msgstr "匹配对象" + +#: ../../library/re.rst:1144 +msgid "" +"Match objects always have a boolean value of ``True``. Since " +":meth:`~Pattern.match` and :meth:`~Pattern.search` return ``None`` when " +"there is no match, you can test whether there was a match with a simple " +"``if`` statement::" +msgstr "" +"匹配对象总是有一个布尔值 ``True``。如果没有匹配的话 :meth:`~Pattern.match` 和 " +":meth:`~Pattern.search` 返回 ``None`` 所以你可以简单的用 ``if`` 语句来判断是否匹配 ::" + +#: ../../library/re.rst:1153 +msgid "Match objects support the following methods and attributes:" +msgstr "匹配对象支持以下方法和属性:" + +#: ../../library/re.rst:1158 +msgid "" +"Return the string obtained by doing backslash substitution on the template " +"string *template*, as done by the :meth:`~Pattern.sub` method. Escapes such " +"as ``\\n`` are converted to the appropriate characters, and numeric " +"backreferences (``\\1``, ``\\2``) and named backreferences (``\\g<1>``, " +"``\\g``) are replaced by the contents of the corresponding group." +msgstr "" +"对 *template* 进行反斜杠转义替换并且返回,就像 :meth:`~Pattern.sub` 方法中一样。转义如同 ``\\n`` " +"被转换成合适的字符,数字引用(``\\1``, ``\\2``)和命名组合(``\\g<1>``, ``\\g``) 替换为相应组合的内容。" + +#: ../../library/re.rst:1170 +msgid "" +"Returns one or more subgroups of the match. If there is a single argument, " +"the result is a single string; if there are multiple arguments, the result " +"is a tuple with one item per argument. Without arguments, *group1* defaults " +"to zero (the whole match is returned). If a *groupN* argument is zero, the " +"corresponding return value is the entire matching string; if it is in the " +"inclusive range [1..99], it is the string matching the corresponding " +"parenthesized group. If a group number is negative or larger than the " +"number of groups defined in the pattern, an :exc:`IndexError` exception is " +"raised. If a group is contained in a part of the pattern that did not match," +" the corresponding result is ``None``. If a group is contained in a part of " +"the pattern that matched multiple times, the last match is returned. ::" +msgstr "" +"返回一个或者多个匹配的子组。如果只有一个参数,结果就是一个字符串,如果有多个参数,结果就是一个元组(每个参数对应一个项),如果没有参数,组1默认到0(整个匹配都被返回)。" +" 如果一个组N 参数值为 0,相应的返回值就是整个匹配字符串;如果它是一个范围 " +"[1..99],结果就是相应的括号组字符串。如果一个组号是负数,或者大于样式中定义的组数,就引发一个 :exc:`IndexError` " +"异常。如果一个组包含在样式的一部分,并被匹配多次,就返回最后一个匹配。::" + +#: ../../library/re.rst:1192 +msgid "" +"If the regular expression uses the ``(?P...)`` syntax, the *groupN* " +"arguments may also be strings identifying groups by their group name. If a " +"string argument is not used as a group name in the pattern, an " +":exc:`IndexError` exception is raised." +msgstr "" +"如果正则表达式使用了 ``(?P...)`` 语法, *groupN* " +"参数就也可能是命名组合的名字。如果一个字符串参数在样式中未定义为组合名,就引发一个 :exc:`IndexError` 异常。" + +#: ../../library/re.rst:1197 +msgid "A moderately complicated example::" +msgstr "一个相对复杂的例子 ::" + +#: ../../library/re.rst:1205 +msgid "Named groups can also be referred to by their index::" +msgstr "命名组合同样可以通过索引值引用 ::" + +#: ../../library/re.rst:1212 +msgid "If a group matches multiple times, only the last match is accessible::" +msgstr "如果一个组匹配成功多次,就只返回最后一个匹配 ::" + +#: ../../library/re.rst:1221 +msgid "" +"This is identical to ``m.group(g)``. This allows easier access to an " +"individual group from a match::" +msgstr "这个等价于 ``m.group(g)``。这允许更方便的引用一个匹配 ::" + +#: ../../library/re.rst:1237 +msgid "" +"Return a tuple containing all the subgroups of the match, from 1 up to " +"however many groups are in the pattern. The *default* argument is used for " +"groups that did not participate in the match; it defaults to ``None``." +msgstr "" +"返回一个元组,包含所有匹配的子组,在样式中出现的从1到任意多的组合。 *default* 参数用于不参与匹配的情况,默认为 ``None``。" + +#: ../../library/re.rst:1241 ../../library/re.rst:1463 +msgid "For example::" +msgstr "例如:" + +#: ../../library/re.rst:1247 +msgid "" +"If we make the decimal place and everything after it optional, not all " +"groups might participate in the match. These groups will default to " +"``None`` unless the *default* argument is given::" +msgstr "" +"如果我们使小数点可选,那么不是所有的组都会参与到匹配当中。这些组合默认会返回一个 ``None`` ,除非指定了 *default* 参数。 ::" + +#: ../../library/re.rst:1260 +msgid "" +"Return a dictionary containing all the *named* subgroups of the match, keyed" +" by the subgroup name. The *default* argument is used for groups that did " +"not participate in the match; it defaults to ``None``. For example::" +msgstr "" +"返回一个字典,包含了所有的 *命名* 子组。key就是组名。 *default* 参数用于不参与匹配的组合;默认为 ``None``。 例如 ::" + +#: ../../library/re.rst:1272 +msgid "" +"Return the indices of the start and end of the substring matched by *group*;" +" *group* defaults to zero (meaning the whole matched substring). Return " +"``-1`` if *group* exists but did not contribute to the match. For a match " +"object *m*, and a group *g* that did contribute to the match, the substring " +"matched by group *g* (equivalent to ``m.group(g)``) is ::" +msgstr "" +"返回 *group* 匹配到的字串的开始和结束标号。*group* 默认为0(意思是整个匹配的子串)。如果 *group* 存在,但未产生匹配,就返回" +" ``-1`` 。对于一个匹配对象 *m*, 和一个未参与匹配的组 *g* ,组 *g* (等价于 ``m.group(g)``)产生的匹配是 ::" + +#: ../../library/re.rst:1280 +msgid "" +"Note that ``m.start(group)`` will equal ``m.end(group)`` if *group* matched " +"a null string. For example, after ``m = re.search('b(c?)', 'cba')``, " +"``m.start(0)`` is 1, ``m.end(0)`` is 2, ``m.start(1)`` and ``m.end(1)`` are " +"both 2, and ``m.start(2)`` raises an :exc:`IndexError` exception." +msgstr "" +"注意 ``m.start(group)`` 将会等于 ``m.end(group)`` ,如果 *group* 匹配一个空字符串的话。比如,在 ``m " +"= re.search('b(c?)', 'cba')`` 之后,``m.start(0)`` 为 1, ``m.end(0)`` 为 2, " +"``m.start(1)`` 和 ``m.end(1)`` 都是 2, ``m.start(2)`` 引发一个 :exc:`IndexError` " +"异常。" + +#: ../../library/re.rst:1285 +msgid "An example that will remove *remove_this* from email addresses::" +msgstr "这个例子会从email地址中移除掉 *remove_this* ::" + +#: ../../library/re.rst:1295 +msgid "" +"For a match *m*, return the 2-tuple ``(m.start(group), m.end(group))``. Note" +" that if *group* did not contribute to the match, this is ``(-1, -1)``. " +"*group* defaults to zero, the entire match." +msgstr "" +"对于一个匹配 *m* , 返回一个二元组 ``(m.start(group), m.end(group))`` 。 注意如果 *group* " +"没有在这个匹配中,就返回 ``(-1, -1)`` 。*group* 默认为0,就是整个匹配。" + +#: ../../library/re.rst:1302 +msgid "" +"The value of *pos* which was passed to the :meth:`~Pattern.search` or " +":meth:`~Pattern.match` method of a :ref:`regex object `. This " +"is the index into the string at which the RE engine started looking for a " +"match." +msgstr "" +"*pos* 的值,会传递给 :meth:`~Pattern.search` 或 :meth:`~Pattern.match` 的方法 a " +":ref:`正则对象 ` 。这个是正则引擎开始在字符串搜索一个匹配的索引位置。" + +#: ../../library/re.rst:1309 +msgid "" +"The value of *endpos* which was passed to the :meth:`~Pattern.search` or " +":meth:`~Pattern.match` method of a :ref:`regex object `. This " +"is the index into the string beyond which the RE engine will not go." +msgstr "" +"*endpos* 的值,会传递给 :meth:`~Pattern.search` 或 :meth:`~Pattern.match` 的方法 a " +":ref:`正则对象 ` 。这个是正则引擎停止在字符串搜索一个匹配的索引位置。" + +#: ../../library/re.rst:1316 +msgid "" +"The integer index of the last matched capturing group, or ``None`` if no " +"group was matched at all. For example, the expressions ``(a)b``, " +"``((a)(b))``, and ``((ab))`` will have ``lastindex == 1`` if applied to the " +"string ``'ab'``, while the expression ``(a)(b)`` will have ``lastindex == " +"2``, if applied to the same string." +msgstr "" +"捕获组的最后一个匹配的整数索引值,或者 ``None`` 如果没有匹配产生的话。比如,对于字符串 ``'ab'``,表达式 ``(a)b``, " +"``((a)(b))``, 和 ``((ab))`` 将得到 ``lastindex == 1`` , 而 ``(a)(b)`` 会得到 " +"``lastindex == 2`` 。" + +#: ../../library/re.rst:1325 +msgid "" +"The name of the last matched capturing group, or ``None`` if the group " +"didn't have a name, or if no group was matched at all." +msgstr "最后一个匹配的命名组名字,或者 ``None`` 如果没有产生匹配的话。" + +#: ../../library/re.rst:1331 +msgid "" +"The :ref:`regular expression object ` whose " +":meth:`~Pattern.match` or :meth:`~Pattern.search` method produced this match" +" instance." +msgstr "" +"返回产生这个实例的 :ref:`正则对象 ` , 这个实例是由 正则对象的 :meth:`~Pattern.match` 或 " +":meth:`~Pattern.search` 方法产生的。" + +#: ../../library/re.rst:1337 +msgid "" +"The string passed to :meth:`~Pattern.match` or :meth:`~Pattern.search`." +msgstr "传递到 :meth:`~Pattern.match` 或 :meth:`~Pattern.search` 的字符串。" + +#: ../../library/re.rst:1340 +msgid "" +"Added support of :func:`copy.copy` and :func:`copy.deepcopy`. Match objects" +" are considered atomic." +msgstr "添加了对 :func:`copy.copy` 和 :func:`copy.deepcopy` 的支持。匹配对象被看作是原子性的。" + +#: ../../library/re.rst:1348 +msgid "Regular Expression Examples" +msgstr "正则表达式例子" + +#: ../../library/re.rst:1352 +msgid "Checking for a Pair" +msgstr "检查对子" + +#: ../../library/re.rst:1354 +msgid "" +"In this example, we'll use the following helper function to display match " +"objects a little more gracefully::" +msgstr "在这个例子里,我们使用以下辅助函数来更好地显示匹配对象::" + +#: ../../library/re.rst:1362 +msgid "" +"Suppose you are writing a poker program where a player's hand is represented" +" as a 5-character string with each character representing a card, \"a\" for " +"ace, \"k\" for king, \"q\" for queen, \"j\" for jack, \"t\" for 10, and " +"\"2\" through \"9\" representing the card with that value." +msgstr "" +"假设你在写一个扑克程序,一个玩家的一手牌为五个字符的串,每个字符表示一张牌,\"a\" 就是 A, \"k\" K, \"q\" Q, \"j\" " +"J, \"t\" 为 10, \"2\" 到 \"9\" 表示2 到 9。" + +#: ../../library/re.rst:1367 +msgid "To see if a given string is a valid hand, one could do the following::" +msgstr "要看给定的字符串是否有效,我们可以按照以下步骤 ::" + +#: ../../library/re.rst:1377 +msgid "" +"That last hand, ``\"727ak\"``, contained a pair, or two of the same valued " +"cards. To match this with a regular expression, one could use backreferences" +" as such::" +msgstr "最后一手牌,``\"727ak\"`` ,包含了一个对子,或者两张同样数值的牌。要用正则表达式匹配它,应该使用向后引用如下 ::" + +#: ../../library/re.rst:1387 +msgid "" +"To find out what card the pair consists of, one could use the " +":meth:`~Match.group` method of the match object in the following manner::" +msgstr "要找出对子由什么牌组成,开发者可以按照下面的方式来使用匹配对象的 :meth:`~Match.group` 方法::" + +#: ../../library/re.rst:1406 +msgid "Simulating scanf()" +msgstr "模拟 scanf()" + +#: ../../library/re.rst:1410 +msgid "" +"Python does not currently have an equivalent to :c:func:`scanf`. Regular " +"expressions are generally more powerful, though also more verbose, than " +":c:func:`scanf` format strings. The table below offers some more-or-less " +"equivalent mappings between :c:func:`scanf` format tokens and regular " +"expressions." +msgstr "" +"Python 目前没有一个类似c函数 :c:func:`scanf` 的替代品。正则表达式通常比 :c:func:`scanf` " +"格式字符串要更强大一些,但也带来更多复杂性。下面的表格提供了 :c:func:`scanf` 格式符和正则表达式大致相同的映射。" + +#: ../../library/re.rst:1417 +msgid ":c:func:`scanf` Token" +msgstr ":c:func:`scanf` 格式符" + +#: ../../library/re.rst:1417 +msgid "Regular Expression" +msgstr "正则表达式" + +#: ../../library/re.rst:1419 +msgid "``%c``" +msgstr "``%c``" + +#: ../../library/re.rst:1421 +msgid "``%5c``" +msgstr "``%5c``" + +#: ../../library/re.rst:1421 +msgid "``.{5}``" +msgstr "``.{5}``" + +#: ../../library/re.rst:1423 +msgid "``%d``" +msgstr "``%d``" + +#: ../../library/re.rst:1423 +msgid "``[-+]?\\d+``" +msgstr "``[-+]?\\d+``" + +#: ../../library/re.rst:1425 +msgid "``%e``, ``%E``, ``%f``, ``%g``" +msgstr "``%e``, ``%E``, ``%f``, ``%g``" + +#: ../../library/re.rst:1425 +msgid "``[-+]?(\\d+(\\.\\d*)?|\\.\\d+)([eE][-+]?\\d+)?``" +msgstr "``[-+]?(\\d+(\\.\\d*)?|\\.\\d+)([eE][-+]?\\d+)?``" + +#: ../../library/re.rst:1427 +msgid "``%i``" +msgstr "``%i``" + +#: ../../library/re.rst:1427 +msgid "``[-+]?(0[xX][\\dA-Fa-f]+|0[0-7]*|\\d+)``" +msgstr "``[-+]?(0[xX][\\dA-Fa-f]+|0[0-7]*|\\d+)``" + +#: ../../library/re.rst:1429 +msgid "``%o``" +msgstr "``%o``" + +#: ../../library/re.rst:1429 +msgid "``[-+]?[0-7]+``" +msgstr "``[-+]?[0-7]+``" + +#: ../../library/re.rst:1431 +msgid "``%s``" +msgstr "``%s``" + +#: ../../library/re.rst:1431 +msgid "``\\S+``" +msgstr "``\\S+``" + +#: ../../library/re.rst:1433 +msgid "``%u``" +msgstr "``%u``" + +#: ../../library/re.rst:1433 +msgid "``\\d+``" +msgstr "``\\d+``" + +#: ../../library/re.rst:1435 +msgid "``%x``, ``%X``" +msgstr "``%x``, ``%X``" + +#: ../../library/re.rst:1435 +msgid "``[-+]?(0[xX])?[\\dA-Fa-f]+``" +msgstr "``[-+]?(0[xX])?[\\dA-Fa-f]+``" + +#: ../../library/re.rst:1438 +msgid "To extract the filename and numbers from a string like ::" +msgstr "从文件名和数字提取字符串 ::" + +#: ../../library/re.rst:1442 +msgid "you would use a :c:func:`scanf` format like ::" +msgstr "你可以使用 :c:func:`scanf` 格式化 ::" + +#: ../../library/re.rst:1446 +msgid "The equivalent regular expression would be ::" +msgstr "等价的正则表达式是:" + +#: ../../library/re.rst:1454 +msgid "search() vs. match()" +msgstr "search() vs. match()" + +#: ../../library/re.rst:1458 +msgid "" +"Python offers two different primitive operations based on regular " +"expressions: :func:`re.match` checks for a match only at the beginning of " +"the string, while :func:`re.search` checks for a match anywhere in the " +"string (this is what Perl does by default)." +msgstr "" +"Python 提供了两种不同的操作:基于 :func:`re.match` 检查字符串开头,或者 :func:`re.search` " +"检查字符串的任意位置(默认Perl中的行为)。" + +#: ../../library/re.rst:1469 +msgid "" +"Regular expressions beginning with ``'^'`` can be used with :func:`search` " +"to restrict the match at the beginning of the string::" +msgstr "在 :func:`search` 中,可以用 ``'^'`` 作为开始来限制匹配到字符串的首位 ::" + +#: ../../library/re.rst:1477 +msgid "" +"Note however that in :const:`MULTILINE` mode :func:`match` only matches at " +"the beginning of the string, whereas using :func:`search` with a regular " +"expression beginning with ``'^'`` will match at the beginning of each line. " +"::" +msgstr "" +"注意 :const:`MULTILINE` 多行模式中函数 :func:`match` 只匹配字符串的开始,但使用 :func:`search` 和以 " +"``'^'`` 开始的正则表达式会匹配每行的开始 ::" + +#: ../../library/re.rst:1487 +msgid "Making a Phonebook" +msgstr "制作一个电话本" + +#: ../../library/re.rst:1489 +msgid "" +":func:`split` splits a string into a list delimited by the passed pattern. " +"The method is invaluable for converting textual data into data structures " +"that can be easily read and modified by Python as demonstrated in the " +"following example that creates a phonebook." +msgstr "" +":func:`split` 将字符串用参数传递的样式分隔开。这个方法对于转换文本数据到易读而且容易修改的数据结构,是很有用的,如下面的例子证明。" + +#: ../../library/re.rst:1494 +msgid "" +"First, here is the input. Normally it may come from a file, here we are " +"using triple-quoted string syntax" +msgstr "首先,这里是输入。 它通常来自一个文件,这里我们使用三重引号字符串语法" + +#: ../../library/re.rst:1507 +msgid "" +"The entries are separated by one or more newlines. Now we convert the string" +" into a list with each nonempty line having its own entry:" +msgstr "条目用一个或者多个换行符分开。现在我们将字符串转换为一个列表,每个非空行都有一个条目:" + +#: ../../library/re.rst:1520 +msgid "" +"Finally, split each entry into a list with first name, last name, telephone " +"number, and address. We use the ``maxsplit`` parameter of :func:`split` " +"because the address has spaces, our splitting pattern, in it:" +msgstr "" +"最终,将每个条目分割为一个由名字、姓氏、电话号码和地址组成的列表。我们为 :func:`split` 使用了 ``maxsplit`` " +"形参,因为地址中包含有被我们作为分割模式的空格符:" + +#: ../../library/re.rst:1533 +msgid "" +"The ``:?`` pattern matches the colon after the last name, so that it does " +"not occur in the result list. With a ``maxsplit`` of ``4``, we could " +"separate the house number from the street name:" +msgstr "" +"``:?`` 样式匹配姓后面的冒号,因此它不出现在结果列表中。如果 ``maxsplit`` 设置为 ``4`` ,我们还可以从地址中获取到房间号:" + +#: ../../library/re.rst:1548 +msgid "Text Munging" +msgstr "文字整理" + +#: ../../library/re.rst:1550 +msgid "" +":func:`sub` replaces every occurrence of a pattern with a string or the " +"result of a function. This example demonstrates using :func:`sub` with a " +"function to \"munge\" text, or randomize the order of all the characters in " +"each word of a sentence except for the first and last characters::" +msgstr "" +":func:`sub` 替换字符串中出现的样式的每一个实例。这个例子证明了使用 :func:`sub` " +"来整理文字,或者随机化每个字符的位置,除了首位和末尾字符 ::" + +#: ../../library/re.rst:1567 +msgid "Finding all Adverbs" +msgstr "查找所有副词" + +#: ../../library/re.rst:1569 +msgid "" +":func:`findall` matches *all* occurrences of a pattern, not just the first " +"one as :func:`search` does. For example, if a writer wanted to find all of " +"the adverbs in some text, they might use :func:`findall` in the following " +"manner::" +msgstr "" +":func:`findall` 匹配样式 *所有* 的出现,不仅是像 :func:`search` " +"中的第一个匹配。比如,如果一个作者希望找到文字中的所有副词,他可能会按照以下方法用 :func:`findall` ::" + +#: ../../library/re.rst:1580 +msgid "Finding all Adverbs and their Positions" +msgstr "查找所有的副词及其位置" + +#: ../../library/re.rst:1582 +msgid "" +"If one wants more information about all matches of a pattern than the " +"matched text, :func:`finditer` is useful as it provides :ref:`match objects " +"` instead of strings. Continuing with the previous example, " +"if a writer wanted to find all of the adverbs *and their positions* in some " +"text, they would use :func:`finditer` in the following manner::" +msgstr "" +"如果需要匹配样式的更多信息, :func:`finditer` 可以起到作用,它提供了 :ref:`匹配对象 ` " +"作为返回值,而不是字符串。继续上面的例子,如果一个作者希望找到所有副词和它的位置,可以按照下面方法使用 :func:`finditer` ::" + +#: ../../library/re.rst:1596 +msgid "Raw String Notation" +msgstr "原始字符串标记" + +#: ../../library/re.rst:1598 +msgid "" +"Raw string notation (``r\"text\"``) keeps regular expressions sane. Without" +" it, every backslash (``'\\'``) in a regular expression would have to be " +"prefixed with another one to escape it. For example, the two following " +"lines of code are functionally identical::" +msgstr "" +"原始字符串记法 (``r\"text\"``) 保持正则表达式正常。否则,每个正则式里的反斜杠(``'\\'``) " +"都必须前缀一个反斜杠来转义。比如,下面两行代码功能就是完全一致的 ::" + +#: ../../library/re.rst:1608 +msgid "" +"When one wants to match a literal backslash, it must be escaped in the " +"regular expression. With raw string notation, this means ``r\"\\\\\"``. " +"Without raw string notation, one must use ``\"\\\\\\\\\"``, making the " +"following lines of code functionally identical::" +msgstr "当需要匹配一个字符反斜杠,它必须在正则表达式中转义。在原始字符串记法,就是 ``r\"\\\\\"``。否则就必须用 ``\"\\\\\\\\\"``,来表示同样的意思 ::" + +#: ../../library/re.rst:1620 +msgid "Writing a Tokenizer" +msgstr "写一个词法分析器" + +#: ../../library/re.rst:1622 +msgid "" +"A `tokenizer or scanner `_ " +"analyzes a string to categorize groups of characters. This is a useful " +"first step in writing a compiler or interpreter." +msgstr "" +"一个 `词法器或词法分析器 `_ " +"分析字符串,并分类成目录组。 这是写一个编译器或解释器的第一步。" + +#: ../../library/re.rst:1626 +msgid "" +"The text categories are specified with regular expressions. The technique " +"is to combine those into a single master regular expression and to loop over" +" successive matches::" +msgstr "文字目录是由正则表达式指定的。这个技术是通过将这些样式合并为一个主正则式,并且循环匹配来实现的 ::" + +#: ../../library/re.rst:1682 +msgid "The tokenizer produces the following output::" +msgstr "该词法器产生以下的输出 ::" + +#: ../../library/re.rst:1705 +msgid "" +"Friedl, Jeffrey. Mastering Regular Expressions. 3rd ed., O'Reilly Media, " +"2009. The third edition of the book no longer covers Python at all, but the " +"first edition covered writing good regular expression patterns in great " +"detail." +msgstr "" +"Friedl, Jeffrey. Mastering Regular Expressions. 3rd ed., O'Reilly Media, " +"2009. 该书的第三版不再包含 Python,但第一版极详细地覆盖了正则表达式模式串的编写。" diff --git a/library/readline.po b/library/readline.po new file mode 100644 index 000000000..912013573 --- /dev/null +++ b/library/readline.po @@ -0,0 +1,399 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) 2001-2025, Python Software Foundation +# This file is distributed under the same license as the Python package. +# FIRST AUTHOR , YEAR. +# +# Translators: +# Menghua Xiao , 2018 +# Freesand Leo , 2019 +# Rafael Fontenelle , 2025 +# +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: Python 3.9\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2025-02-07 16:40+0000\n" +"PO-Revision-Date: 2017-02-16 23:24+0000\n" +"Last-Translator: Rafael Fontenelle , 2025\n" +"Language-Team: Chinese (China) (https://app.transifex.com/python-doc/teams/5390/zh_CN/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: zh_CN\n" +"Plural-Forms: nplurals=1; plural=0;\n" + +#: ../../library/readline.rst:2 +msgid ":mod:`readline` --- GNU readline interface" +msgstr ":mod:`readline` --- GNU readline 接口" + +#: ../../library/readline.rst:12 +msgid "" +"The :mod:`readline` module defines a number of functions to facilitate " +"completion and reading/writing of history files from the Python interpreter." +" This module can be used directly, or via the :mod:`rlcompleter` module, " +"which supports completion of Python identifiers at the interactive prompt. " +"Settings made using this module affect the behaviour of both the " +"interpreter's interactive prompt and the prompts offered by the built-in " +":func:`input` function." +msgstr "" +":mod:`readline` 模块定义了许多方便从 Python 解释器完成和读取/写入历史文件的函数。 " +"此模块可以直接使用,或通过支持在交互提示符下完成 Python 标识符的 :mod:`rlcompleter` 模块使用。 " +"使用此模块进行的设置会同时影响解释器的交互提示符以及内置 :func:`input` 函数提供的提示符。" + +#: ../../library/readline.rst:20 +msgid "" +"Readline keybindings may be configured via an initialization file, typically" +" ``.inputrc`` in your home directory. See `Readline Init File " +"`_ in the GNU" +" Readline manual for information about the format and allowable constructs " +"of that file, and the capabilities of the Readline library in general." +msgstr "" +" Readline 的按键绑定可以通过一个初始化文件来配置,通常为你的用户主目录中的 ``.inputrc``。 请参阅 GNU Readline " +"手册中的 `Readline 初始化文件 " +"`_ " +"了解有关该文件的格式和允许的结构的信息,以及 Readline 库的一般功能。" + +#: ../../library/readline.rst:29 +msgid "" +"The underlying Readline library API may be implemented by the ``libedit`` " +"library instead of GNU readline. On macOS the :mod:`readline` module detects" +" which library is being used at run time." +msgstr "" +"底层的 Readline 库 API 可能使用 ``libedit`` 库来实现而不是 GNU readline。 在 macOS 上 " +":mod:`readline` 模块会在运行时检测所使用的是哪个库。" + +#: ../../library/readline.rst:34 +msgid "" +"The configuration file for ``libedit`` is different from that of GNU " +"readline. If you programmatically load configuration strings you can check " +"for the text \"libedit\" in :const:`readline.__doc__` to differentiate " +"between GNU readline and libedit." +msgstr "" +"``libedit`` 所用的配置文件与 GNU readline 的不同。 如果你要在程序中载入配置字符串你可以在 " +":const:`readline.__doc__` 中检测文本 \"libedit\" 来区分 GNU readline 和 libedit。" + +#: ../../library/readline.rst:39 +msgid "" +"If you use *editline*/``libedit`` readline emulation on macOS, the " +"initialization file located in your home directory is named ``.editrc``. For" +" example, the following content in ``~/.editrc`` will turn ON *vi* " +"keybindings and TAB completion::" +msgstr "" +"如果你是在 macOS 上使用 *editline*/``libedit`` readline 模拟,则位于你的主目录中的初始化文件名称为 " +"``.editrc``。 例如,``~/.editrc`` 中的以下内容将开启 *vi* 按键绑定以及 TAB 补全::" + +#: ../../library/readline.rst:49 +msgid "Init file" +msgstr "初始化文件" + +#: ../../library/readline.rst:51 +msgid "" +"The following functions relate to the init file and user configuration:" +msgstr "下列函数与初始化文件和用户配置有关:" + +#: ../../library/readline.rst:56 +msgid "" +"Execute the init line provided in the *string* argument. This calls " +":c:func:`rl_parse_and_bind` in the underlying library." +msgstr "执行在 *string* 参数中提供的初始化行。 此函数会调用底层库中的 :c:func:`rl_parse_and_bind`。" + +#: ../../library/readline.rst:62 +msgid "" +"Execute a readline initialization file. The default filename is the last " +"filename used. This calls :c:func:`rl_read_init_file` in the underlying " +"library." +msgstr "" +"执行一个 readline 初始化文件。 默认文件名为最近所使用的文件名。 此函数会调用底层库中的 " +":c:func:`rl_read_init_file`。" + +#: ../../library/readline.rst:67 +msgid "Line buffer" +msgstr "行缓冲区" + +#: ../../library/readline.rst:69 +msgid "The following functions operate on the line buffer:" +msgstr "下列函数会在行缓冲区上操作。" + +#: ../../library/readline.rst:74 +msgid "" +"Return the current contents of the line buffer (:c:data:`rl_line_buffer` in " +"the underlying library)." +msgstr "返回行缓冲区的当前内容 (底层库中的 :c:data:`rl_line_buffer`)。" + +#: ../../library/readline.rst:80 +msgid "" +"Insert text into the line buffer at the cursor position. This calls " +":c:func:`rl_insert_text` in the underlying library, but ignores the return " +"value." +msgstr "将文本插入行缓冲区的当前游标位置。 该函数会调用底层库中的 :c:func:`rl_insert_text`,但会忽略其返回值。" + +#: ../../library/readline.rst:87 +msgid "" +"Change what's displayed on the screen to reflect the current contents of the" +" line buffer. This calls :c:func:`rl_redisplay` in the underlying library." +msgstr "改变屏幕的显示以反映行缓冲区的当前内容。 该函数会调用底层库中的 :c:func:`rl_redisplay`。" + +#: ../../library/readline.rst:92 +msgid "History file" +msgstr "历史文件" + +#: ../../library/readline.rst:94 +msgid "The following functions operate on a history file:" +msgstr "下列函数会在历史文件上操作:" + +#: ../../library/readline.rst:99 +msgid "" +"Load a readline history file, and append it to the history list. The default" +" filename is :file:`~/.history`. This calls :c:func:`read_history` in the " +"underlying library." +msgstr "" +"载入一个 readline 历史文件,并将其添加到历史列表。 默认文件名为 :file:`~/.history`。 此函数会调用底层库中的 " +":c:func:`read_history`。" + +#: ../../library/readline.rst:106 +msgid "" +"Save the history list to a readline history file, overwriting any existing " +"file. The default filename is :file:`~/.history`. This calls " +":c:func:`write_history` in the underlying library." +msgstr "" +"将历史列表保存为 readline 历史文件,覆盖任何现有文件。 默认文件名为 :file:`~/.history`。 此函数会调用底层库中的 " +":c:func:`write_history`。" + +#: ../../library/readline.rst:113 +msgid "" +"Append the last *nelements* items of history to a file. The default " +"filename is :file:`~/.history`. The file must already exist. This calls " +":c:func:`append_history` in the underlying library. This function only " +"exists if Python was compiled for a version of the library that supports it." +msgstr "" +"将历史列表的最后 *nelements* 项添加到历史文件。 默认文件名为 :file:`~/.history`。 文件必须已存在。 " +"此函数会调用底层库中的 :c:func:`append_history`。 此函数仅当 Python 编译包带有支持此功能的库版本时才会存在。" + +#: ../../library/readline.rst:125 +msgid "" +"Set or return the desired number of lines to save in the history file. The " +":func:`write_history_file` function uses this value to truncate the history " +"file, by calling :c:func:`history_truncate_file` in the underlying library." +" Negative values imply unlimited history file size." +msgstr "" +"设置或返回需要保存到历史文件的行数。 :func:`write_history_file` 函数会通过调用底层库中的 " +":c:func:`history_truncate_file` 以使用该值来截取历史文件。 负值意味着不限制历史文件的大小。" + +#: ../../library/readline.rst:133 +msgid "History list" +msgstr "历史列表" + +#: ../../library/readline.rst:135 +msgid "The following functions operate on a global history list:" +msgstr "以下函数会在全局历史列表上操作:" + +#: ../../library/readline.rst:140 +msgid "" +"Clear the current history. This calls :c:func:`clear_history` in the " +"underlying library. The Python function only exists if Python was compiled " +"for a version of the library that supports it." +msgstr "" +"清除当前历史。 此函数会调用底层库的 :c:func:`clear_history`。 此 Python 函数仅当 Python " +"编译包带有支持此功能的库版本时才会存在。" + +#: ../../library/readline.rst:147 +msgid "" +"Return the number of items currently in the history. (This is different " +"from :func:`get_history_length`, which returns the maximum number of lines " +"that will be written to a history file.)" +msgstr "返回历史列表的当前项数。 (此函数不同于 :func:`get_history_length`,后者是返回将被写入历史文件的最大行数。)" + +#: ../../library/readline.rst:154 +msgid "" +"Return the current contents of history item at *index*. The item index is " +"one-based. This calls :c:func:`history_get` in the underlying library." +msgstr "" +"返回序号为 *index* 的历史条目的当前内容。 条目序号从一开始。 此函数会调用底层库中的 :c:func:`history_get`。" + +#: ../../library/readline.rst:160 +msgid "" +"Remove history item specified by its position from the history. The position" +" is zero-based. This calls :c:func:`remove_history` in the underlying " +"library." +msgstr "从历史列表中移除指定位置上的历史条目。 条目位置从零开始。 此函数会调用底层库中的 :c:func:`remove_history`。" + +#: ../../library/readline.rst:167 +msgid "" +"Replace history item specified by its position with *line*. The position is " +"zero-based. This calls :c:func:`replace_history_entry` in the underlying " +"library." +msgstr "" +"将指定位置上的历史条目替换为 *line*。 条目位置从零开始。 此函数会调用底层库中的 " +":c:func:`replace_history_entry`。" + +#: ../../library/readline.rst:174 +msgid "" +"Append *line* to the history buffer, as if it was the last line typed. This " +"calls :c:func:`add_history` in the underlying library." +msgstr "将 *line* 添加到历史缓冲区,相当于是最近输入的一行。 此函数会调用底层库中的 :c:func:`add_history`。" + +#: ../../library/readline.rst:180 +msgid "" +"Enable or disable automatic calls to :c:func:`add_history` when reading " +"input via readline. The *enabled* argument should be a Boolean value that " +"when true, enables auto history, and that when false, disables auto history." +msgstr "" +"启用或禁用当通过 readline 读取输入时自动调用 :c:func:`add_history`。 *enabled* " +"参数应为一个布尔值,当其为真值时启用自动历史,当其为假值时禁用自动历史。" + +#: ../../library/readline.rst:193 +msgid "Startup hooks" +msgstr "启动钩子" + +#: ../../library/readline.rst:198 +msgid "" +"Set or remove the function invoked by the :c:data:`rl_startup_hook` callback" +" of the underlying library. If *function* is specified, it will be used as " +"the new hook function; if omitted or ``None``, any function already " +"installed is removed. The hook is called with no arguments just before " +"readline prints the first prompt." +msgstr "" +"设置或移除底层库的 :c:data:`rl_startup_hook` 回调所唤起的函数。 如果指定了 " +"*function*,它将被用作新的钩子函数;如果省略或为 ``None``,任何已安装的函数将被移除。 钩子函数将在 readline " +"打印第一个提示信息之前不带参数地被调用。" + +#: ../../library/readline.rst:207 +msgid "" +"Set or remove the function invoked by the :c:data:`rl_pre_input_hook` " +"callback of the underlying library. If *function* is specified, it will be " +"used as the new hook function; if omitted or ``None``, any function already " +"installed is removed. The hook is called with no arguments after the first " +"prompt has been printed and just before readline starts reading input " +"characters. This function only exists if Python was compiled for a version " +"of the library that supports it." +msgstr "" +"设置或移除底层库的 :c:data:`rl_pre_input_hook` 回调所唤起的函数。 如果指定了 " +"*function*,它将被用作新的钩子函数;如果省略或为 ``None``,任何已安装的函数将被移除。 " +"钩子函数将在打印第一个提示信息之后、readline 开始读取输入字符之前不带参数地被调用。 此函数仅当 Python " +"编译包带有支持此功能的库版本时才会存在。" + +#: ../../library/readline.rst:217 +msgid "Completion" +msgstr "Completion" + +#: ../../library/readline.rst:219 +msgid "" +"The following functions relate to implementing a custom word completion " +"function. This is typically operated by the Tab key, and can suggest and " +"automatically complete a word being typed. By default, Readline is set up " +"to be used by :mod:`rlcompleter` to complete Python identifiers for the " +"interactive interpreter. If the :mod:`readline` module is to be used with a" +" custom completer, a different set of word delimiters should be set." +msgstr "" +"以下函数与自定义单词补全函数的实现有关。 这通常使用 Tab 键进行操作,能够提示并自动补全正在输入的单词。 默认情况下,Readline 设置为由 " +":mod:`rlcompleter` 来补全交互模式解释器的 Python 标识符。 如果 :mod:`readline` " +"模块要配合自定义的补全函数来使用,则需要设置不同的单词分隔符。" + +#: ../../library/readline.rst:229 +msgid "" +"Set or remove the completer function. If *function* is specified, it will " +"be used as the new completer function; if omitted or ``None``, any completer" +" function already installed is removed. The completer function is called as" +" ``function(text, state)``, for *state* in ``0``, ``1``, ``2``, ..., until " +"it returns a non-string value. It should return the next possible " +"completion starting with *text*." +msgstr "" +"设置或移除补全函数。 如果指定了 *function*,它将被用作新的补全函数;如果省略或为 ``None``,任何已安装的补全函数将被移除。 " +"补全函数的调用形式为 ``function(text, state)``,其中 *state* 为 ``0``, ``1``, ``2``, ..., " +"直至其返回一个非字符串值。 它应当返回下一个以 *text* 开头的候选补全内容。" + +#: ../../library/readline.rst:236 +msgid "" +"The installed completer function is invoked by the *entry_func* callback " +"passed to :c:func:`rl_completion_matches` in the underlying library. The " +"*text* string comes from the first parameter to the " +":c:data:`rl_attempted_completion_function` callback of the underlying " +"library." +msgstr "" +"已安装的补全函数将由传递给底层库中 :c:func:`rl_completion_matches` 的 *entry_func* 回调函数来唤起。 " +"*text* 字符串来自于底层库中 :c:data:`rl_attempted_completion_function` 回调函数的第一个形参。" + +#: ../../library/readline.rst:245 +msgid "" +"Get the completer function, or ``None`` if no completer function has been " +"set." +msgstr "获取补全函数,如果没有设置补全函数则返回 ``None``。" + +#: ../../library/readline.rst:250 +msgid "" +"Get the type of completion being attempted. This returns the " +":c:data:`rl_completion_type` variable in the underlying library as an " +"integer." +msgstr "获取正在尝试的补全类型。 此函数会将底层库中的 :c:data:`rl_completion_type` 变量作为一个整数返回。" + +#: ../../library/readline.rst:258 +msgid "" +"Get the beginning or ending index of the completion scope. These indexes are" +" the *start* and *end* arguments passed to the " +":c:data:`rl_attempted_completion_function` callback of the underlying " +"library." +msgstr "" +"获取补全域的开始和结束序号。 这些序号就是传给底层库中 :c:data:`rl_attempted_completion_function` 回调函数的" +" *start* 和 *end* 参数。" + +#: ../../library/readline.rst:267 +msgid "" +"Set or get the word delimiters for completion. These determine the start of" +" the word to be considered for completion (the completion scope). These " +"functions access the :c:data:`rl_completer_word_break_characters` variable " +"in the underlying library." +msgstr "" +"设置或获取补全的单词分隔符。 此分隔符确定了要考虑补全的单词的开始和结束位置(补全域)。 这些函数会访问底层库的 " +":c:data:`rl_completer_word_break_characters` 变量。" + +#: ../../library/readline.rst:275 +msgid "" +"Set or remove the completion display function. If *function* is specified, " +"it will be used as the new completion display function; if omitted or " +"``None``, any completion display function already installed is removed. " +"This sets or clears the :c:data:`rl_completion_display_matches_hook` " +"callback in the underlying library. The completion display function is " +"called as ``function(substitution, [matches], longest_match_length)`` once " +"each time matches need to be displayed." +msgstr "" +"设置或移除补全显示函数。 如果指定了 *function*,它将被用作新的补全显示函数;如果省略或为 " +"``None``,任何已安装的补全显示函数将被移除。 此函数会设置或清除底层库的 " +":c:data:`rl_completion_display_matches_hook` 回调函数。 补全显示函数会在每次需要显示匹配项时以 " +"``function(substitution, [matches], longest_match_length)`` 的形式被调用。" + +#: ../../library/readline.rst:288 +msgid "Example" +msgstr "示例" + +#: ../../library/readline.rst:290 +msgid "" +"The following example demonstrates how to use the :mod:`readline` module's " +"history reading and writing functions to automatically load and save a " +"history file named :file:`.python_history` from the user's home directory. " +"The code below would normally be executed automatically during interactive " +"sessions from the user's :envvar:`PYTHONSTARTUP` file. ::" +msgstr "" +"以下示例演示了如何使用 :mod:`readline` 模块的历史读取或写入函数来自动加载和保存用户主目录下名为 " +":file:`.python_history` 的历史文件。 以下代码通常应当在交互会话期间从用户的 :envvar:`PYTHONSTARTUP` " +"文件自动执行。 ::" + +#: ../../library/readline.rst:310 +msgid "" +"This code is actually automatically run when Python is run in " +":ref:`interactive mode ` (see :ref:`rlcompleter-config`)." +msgstr "" +"此代码实际上会在 Python 运行于 :ref:`交互模式 ` 时自动运行 (参见 " +":ref:`rlcompleter-config`)。" + +#: ../../library/readline.rst:313 +msgid "" +"The following example achieves the same goal but supports concurrent " +"interactive sessions, by only appending the new history. ::" +msgstr "以下示例实现了同样的目标,但是通过只添加新历史的方式来支持并发的交互会话。 ::" + +#: ../../library/readline.rst:334 +msgid "" +"The following example extends the :class:`code.InteractiveConsole` class to " +"support history save/restore. ::" +msgstr "以下示例扩展了 :class:`code.InteractiveConsole` 类以支持历史保存/恢复。 ::" diff --git a/library/reprlib.po b/library/reprlib.po new file mode 100644 index 000000000..bf60f8527 --- /dev/null +++ b/library/reprlib.po @@ -0,0 +1,181 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) 2001-2022, Python Software Foundation +# This file is distributed under the same license as the Python package. +# FIRST AUTHOR , YEAR. +# +# Translators: +# Arisaka97 , 2019 +# Freesand Leo , 2019 +# +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: Python 3.9\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2022-11-04 14:34+0000\n" +"PO-Revision-Date: 2017-02-16 23:24+0000\n" +"Last-Translator: Freesand Leo , 2019\n" +"Language-Team: Chinese (China) (https://www.transifex.com/python-doc/teams/5390/zh_CN/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: zh_CN\n" +"Plural-Forms: nplurals=1; plural=0;\n" + +#: ../../library/reprlib.rst:2 +msgid ":mod:`reprlib` --- Alternate :func:`repr` implementation" +msgstr ":mod:`reprlib` --- 另一种 :func:`repr` 实现" + +#: ../../library/reprlib.rst:9 +msgid "**Source code:** :source:`Lib/reprlib.py`" +msgstr "**源代码:** :source:`Lib/reprlib.py`" + +#: ../../library/reprlib.rst:13 +msgid "" +"The :mod:`reprlib` module provides a means for producing object " +"representations with limits on the size of the resulting strings. This is " +"used in the Python debugger and may be useful in other contexts as well." +msgstr "" +":mod:`reprlib` 模块提供了一种对象表示的产生方式,它会对结果字符串的大小进行限制。 该方式被用于 Python " +"调试器,也适用于某些其他场景。" + +#: ../../library/reprlib.rst:17 +msgid "This module provides a class, an instance, and a function:" +msgstr "此模块提供了一个类、一个实例和一个函数:" + +#: ../../library/reprlib.rst:22 +msgid "" +"Class which provides formatting services useful in implementing functions " +"similar to the built-in :func:`repr`; size limits for different object " +"types are added to avoid the generation of representations which are " +"excessively long." +msgstr "该类提供了格式化服务 适用于实现与内置 :func:`repr` 相似的方法;其中附加了针对不同对象类型的大小限制,以避免生成超长的表示。" + +#: ../../library/reprlib.rst:29 +msgid "" +"This is an instance of :class:`Repr` which is used to provide the " +":func:`.repr` function described below. Changing the attributes of this " +"object will affect the size limits used by :func:`.repr` and the Python " +"debugger." +msgstr "" +"这是 :class:`Repr` 的一个实例,用于提供如下所述的 :func:`.repr` 函数。 改变此对象的属性将会影响 " +":func:`.repr` 和 Python 调试器所使用的大小限制。" + +#: ../../library/reprlib.rst:37 +msgid "" +"This is the :meth:`~Repr.repr` method of ``aRepr``. It returns a string " +"similar to that returned by the built-in function of the same name, but with" +" limits on most sizes." +msgstr "" +"这是 ``aRepr`` 的 :meth:`~Repr.repr` 方法。 " +"它会返回与同名内置函数所返回字符串相似的字符串,区别在于附带了对多数类型的大小限制。" + +#: ../../library/reprlib.rst:41 +msgid "" +"In addition to size-limiting tools, the module also provides a decorator for" +" detecting recursive calls to :meth:`__repr__` and substituting a " +"placeholder string instead." +msgstr "在大小限制工具以外,此模块还提供了一个装饰器,用于检测对 :meth:`__repr__` 的递归调用并改用一个占位符来替换。" + +#: ../../library/reprlib.rst:50 +msgid "" +"Decorator for :meth:`__repr__` methods to detect recursive calls within the " +"same thread. If a recursive call is made, the *fillvalue* is returned, " +"otherwise, the usual :meth:`__repr__` call is made. For example:" +msgstr "" +"用于为 :meth:`__repr__` 方法检测同一线程内部递归调用的装饰器。 如果执行了递归调用,则会返回 *fillvalue*,否则执行正常的 " +":meth:`__repr__` 调用。 例如:" + +#: ../../library/reprlib.rst:72 +msgid "Repr Objects" +msgstr "Repr 对象" + +#: ../../library/reprlib.rst:74 +msgid "" +":class:`Repr` instances provide several attributes which can be used to " +"provide size limits for the representations of different object types, and " +"methods which format specific object types." +msgstr ":class:`Repr` 实例对象包含一些属性可以用于为不同对象类型的表示提供大小限制,还包含一些方法可以格式化特定的对象类型。" + +#: ../../library/reprlib.rst:81 +msgid "" +"Depth limit on the creation of recursive representations. The default is " +"``6``." +msgstr "创建递归表示形式的深度限制。 默认为 ``6``。" + +#: ../../library/reprlib.rst:92 +msgid "" +"Limits on the number of entries represented for the named object type. The " +"default is ``4`` for :attr:`maxdict`, ``5`` for :attr:`maxarray`, and ``6``" +" for the others." +msgstr "" +"代表命名对象类型的条目数量限制。 对于 :attr:`maxdict` 的默认值为 ``4``,对于 :attr:`maxarray` 为 " +"``5``,对于其他则为 ``6``。" + +#: ../../library/reprlib.rst:99 +msgid "" +"Maximum number of characters in the representation for an integer. Digits " +"are dropped from the middle. The default is ``40``." +msgstr "表示整数的最大字符数量。 数码会从中间被丢弃。 默认值为 ``40``。" + +#: ../../library/reprlib.rst:105 +msgid "" +"Limit on the number of characters in the representation of the string. Note" +" that the \"normal\" representation of the string is used as the character " +"source: if escape sequences are needed in the representation, these may be " +"mangled when the representation is shortened. The default is ``30``." +msgstr "" +"表示字符串的字符数量限制。 请注意字符源会使用字符串的“正常”表示形式:如果表示中需要用到转义序列,在缩短表示时它们可能会被破坏。 默认值为 " +"``30``。" + +#: ../../library/reprlib.rst:113 +msgid "" +"This limit is used to control the size of object types for which no specific" +" formatting method is available on the :class:`Repr` object. It is applied " +"in a similar manner as :attr:`maxstring`. The default is ``20``." +msgstr "" +"此限制用于控制在 :class:`Repr` 对象上没有特定的格式化方法可用的对象类型的大小。 它会以类似 :attr:`maxstring` " +"的方式被应用。 默认值为 ``20``。" + +#: ../../library/reprlib.rst:120 +msgid "" +"The equivalent to the built-in :func:`repr` that uses the formatting imposed" +" by the instance." +msgstr "内置 :func:`repr` 的等价形式,它使用实例专属的格式化。" + +#: ../../library/reprlib.rst:126 +msgid "" +"Recursive implementation used by :meth:`.repr`. This uses the type of *obj*" +" to determine which formatting method to call, passing it *obj* and *level*." +" The type-specific methods should call :meth:`repr1` to perform recursive " +"formatting, with ``level - 1`` for the value of *level* in the recursive " +"call." +msgstr "" +"供 :meth:`.repr` 使用的递归实现。 此方法使用 *obj* 的类型来确定要调用哪个格式化方法,并传入 *obj* 和 *level*。 " +"类型专属的方法应当调用 :meth:`repr1` 来执行递归格式化,在递归调用中使用 ``level - 1`` 作为 *level* 的值。" + +#: ../../library/reprlib.rst:135 +msgid "" +"Formatting methods for specific types are implemented as methods with a name" +" based on the type name. In the method name, **TYPE** is replaced by " +"``'_'.join(type(obj).__name__.split())``. Dispatch to these methods is " +"handled by :meth:`repr1`. Type-specific methods which need to recursively " +"format a value should call ``self.repr1(subobj, level - 1)``." +msgstr "" +"特定类型的格式化方法会被实现为基于类型名称来命名的方法。 在方法名称中,**TYPE** 会被替换为 " +"``'_'.join(type(obj).__name__.split())``。 对这些方法的分派会由 :meth:`repr1` 来处理。 " +"需要对值进行递归格式化的类型专属方法应当调用 ``self.repr1(subobj, level - 1)``。" + +#: ../../library/reprlib.rst:145 +msgid "Subclassing Repr Objects" +msgstr "子类化 Repr 对象" + +#: ../../library/reprlib.rst:147 +msgid "" +"The use of dynamic dispatching by :meth:`Repr.repr1` allows subclasses of " +":class:`Repr` to add support for additional built-in object types or to " +"modify the handling of types already supported. This example shows how " +"special support for file objects could be added::" +msgstr "" +"通过 :meth:`Repr.repr1` 使用动态分派允许 :class:`Repr` " +"的子类添加对额外内置对象类型的支持,或是修改对已支持类型的处理。 这个例子演示了如何添加对文件对象的特殊支持::" diff --git a/library/resource.po b/library/resource.po new file mode 100644 index 000000000..c5fe48e8e --- /dev/null +++ b/library/resource.po @@ -0,0 +1,634 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) 2001-2024, Python Software Foundation +# This file is distributed under the same license as the Python package. +# FIRST AUTHOR , YEAR. +# +# Translators: +# 操旭 , 2017 +# cdarlint , 2019 +# 钢 彭 , 2019 +# Zombie110year , 2019 +# ppcfish , 2019 +# Heyi Tang , 2020 +# Alpha Du , 2021 +# Rafael Fontenelle , 2024 +# +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: Python 3.9\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2024-08-30 16:51+0000\n" +"PO-Revision-Date: 2017-02-16 23:24+0000\n" +"Last-Translator: Rafael Fontenelle , 2024\n" +"Language-Team: Chinese (China) (https://app.transifex.com/python-doc/teams/5390/zh_CN/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: zh_CN\n" +"Plural-Forms: nplurals=1; plural=0;\n" + +#: ../../library/resource.rst:2 +msgid ":mod:`resource` --- Resource usage information" +msgstr ":mod:`resource` --- 资源使用信息" + +#: ../../library/resource.rst:13 +msgid "" +"This module provides basic mechanisms for measuring and controlling system " +"resources utilized by a program." +msgstr "该模块提供了测量和控制程序所利用的系统资源的基本机制。" + +#: ../../library/resource.rst:16 +msgid "" +"Symbolic constants are used to specify particular system resources and to " +"request usage information about either the current process or its children." +msgstr "符号常量被用来指定特定的系统资源,并要求获得关于当前进程或其子进程的使用信息。" + +#: ../../library/resource.rst:19 +msgid "An :exc:`OSError` is raised on syscall failure." +msgstr "当系统调用失败时,会触发一个 :exc:`OSError` 。" + +#: ../../library/resource.rst:24 +msgid "A deprecated alias of :exc:`OSError`." +msgstr "一个被弃用的 :exc:`OSError` 的别名。" + +#: ../../library/resource.rst:26 +msgid "Following :pep:`3151`, this class was made an alias of :exc:`OSError`." +msgstr "根据 :pep:`3151`,这个类是 :exc:`OSError` 的别名。" + +#: ../../library/resource.rst:31 +msgid "Resource Limits" +msgstr "资源限制" + +#: ../../library/resource.rst:33 +msgid "" +"Resources usage can be limited using the :func:`setrlimit` function " +"described below. Each resource is controlled by a pair of limits: a soft " +"limit and a hard limit. The soft limit is the current limit, and may be " +"lowered or raised by a process over time. The soft limit can never exceed " +"the hard limit. The hard limit can be lowered to any value greater than the " +"soft limit, but not raised. (Only processes with the effective UID of the " +"super-user can raise a hard limit.)" +msgstr "" +"资源的使用可以通过下面描述的 :func:`setrlimit` " +"函数来限制。每个资源都被一对限制所控制:一个软限制和一个硬限制。软限制是当前的限制,并且可以由一个进程随着时间的推移而降低或提高。软限制永远不能超过硬限制。硬限制可以降低到大于软限制的任何数值,但不能提高。(只有拥有超级用户有效UID的进程才能提高硬限制。)" + +#: ../../library/resource.rst:41 +msgid "" +"The specific resources that can be limited are system dependent. They are " +"described in the :manpage:`getrlimit(2)` man page. The resources listed " +"below are supported when the underlying operating system supports them; " +"resources which cannot be checked or controlled by the operating system are " +"not defined in this module for those platforms." +msgstr "" +"可以被限制的具体资源取决于系统。它们在 man :manpage:`getrlimit(2)` 中描述。 " +"下面列出的资源在底层操作系统支持的情况下被支持;那些不能被操作系统检查或控制的资源在本模块中没有为这些平台定义。" + +#: ../../library/resource.rst:50 +msgid "Constant used to represent the limit for an unlimited resource." +msgstr "用来表示无限资源的极限的常数。" + +#: ../../library/resource.rst:55 +msgid "" +"Returns a tuple ``(soft, hard)`` with the current soft and hard limits of " +"*resource*. Raises :exc:`ValueError` if an invalid resource is specified, or" +" :exc:`error` if the underlying system call fails unexpectedly." +msgstr "" +"返回一个包含 *resource* 当前软限制和硬限制的元组。如果指定了一个无效的资源,则触发 :exc:`ValueError` " +",如果底层系统调用意外失败,则引发 :exc:`error` 。" + +#: ../../library/resource.rst:62 +msgid "" +"Sets new limits of consumption of *resource*. The *limits* argument must be " +"a tuple ``(soft, hard)`` of two integers describing the new limits. A value " +"of :data:`~resource.RLIM_INFINITY` can be used to request a limit that is " +"unlimited." +msgstr "" +"设置 *resource* 的新的消耗极限。参数 *limits* 必须是一个由两个整数组成的元组 ``(soft, hard)`` ,描述了新的限制。" +" :data:`~resource.RLIM_INFINITY` 的值可以用来请求一个无限的限制。" + +#: ../../library/resource.rst:67 +msgid "" +"Raises :exc:`ValueError` if an invalid resource is specified, if the new " +"soft limit exceeds the hard limit, or if a process tries to raise its hard " +"limit. Specifying a limit of :data:`~resource.RLIM_INFINITY` when the hard " +"or system limit for that resource is not unlimited will result in a " +":exc:`ValueError`. A process with the effective UID of super-user can " +"request any valid limit value, including unlimited, but :exc:`ValueError` " +"will still be raised if the requested limit exceeds the system imposed " +"limit." +msgstr "" +"如果指定了一个无效的资源,如果新的软限制超过了硬限制,或者如果一个进程试图提高它的硬限制,将触发 :exc:`ValueError` " +"。当资源的硬限制或系统限制不是无限时,指定一个 :data:`~resource.RLIM_INFINITY` 的限制将导致 " +":exc:`ValueError` 。 一个有效 UID " +"为超级用户的进程可以请求任何有效的限制值,包括无限,但如果请求的限制超过了系统规定的限制,则仍然会产生 :exc:`ValueError` 。" + +#: ../../library/resource.rst:76 +msgid "" +"``setrlimit`` may also raise :exc:`error` if the underlying system call " +"fails." +msgstr "如果底层系统调用失败, ``setrlimit`` 也可能触发 :exc:`error` 。" + +#: ../../library/resource.rst:79 +msgid "VxWorks only supports setting :data:`RLIMIT_NOFILE`." +msgstr "VxWorks只支持设置 :data:`RLIMIT_NOFILE` 。" + +#: ../../library/resource.rst:81 +msgid "" +"Raises an :ref:`auditing event ` ``resource.setrlimit`` with " +"arguments ``resource``, ``limits``." +msgstr "" +"引发一个 :ref:`审计事件 ` ``resource.setrlimit`` 并附带参数 ``resource``, " +"``limits``。" + +#: ../../library/resource.rst:86 +msgid "" +"Combines :func:`setrlimit` and :func:`getrlimit` in one function and " +"supports to get and set the resources limits of an arbitrary process. If " +"*pid* is 0, then the call applies to the current process. *resource* and " +"*limits* have the same meaning as in :func:`setrlimit`, except that *limits*" +" is optional." +msgstr "" +"将 :func:`setrlimit` 和 :func:`getrlimit` 合并为一个函数,支持获取和设置任意进程的资源限制。如果 *pid* " +"为0,那么该调用适用于当前进程。 *resource* 和 *limits* 的含义与 :func:`setrlimit` 相同,只是 *limits*" +" 是可选的。" + +#: ../../library/resource.rst:92 +msgid "" +"When *limits* is not given the function returns the *resource* limit of the " +"process *pid*. When *limits* is given the *resource* limit of the process is" +" set and the former resource limit is returned." +msgstr "" +"当 *limits* 没有给出时,该函数返回进程 *pid* 的 *resource* 限制。当 *limits* 被给定时,进程的 " +"*resource* 限制被设置,并返回以前的资源限制。" + +#: ../../library/resource.rst:96 +msgid "" +"Raises :exc:`ProcessLookupError` when *pid* can't be found and " +":exc:`PermissionError` when the user doesn't have ``CAP_SYS_RESOURCE`` for " +"the process." +msgstr "" +"当 *pid* 找不到时,触发 :exc:`ProcessLookupError` ;当用户没有进程的 ``CAP_SYS_RESOURCE`` " +"时,触发 :exc:`PermissionError` 。" + +#: ../../library/resource.rst:100 +msgid "" +"Raises an :ref:`auditing event ` ``resource.prlimit`` with " +"arguments ``pid``, ``resource``, ``limits``." +msgstr "" +"引发一个 :ref:`审计事件 ` ``resource.prlimit`` 并附带参数 ``pid``, " +"``resource``, ``limits``。" + +#: ../../library/resource.rst:103 +msgid "" +":ref:`Availability `: Linux 2.6.36 or later with glibc 2.13 or" +" later." +msgstr "" +":ref:`Availability `: Linux 2.6.36 或更新版本带有 glibc 2.13 或更新版本" + +#: ../../library/resource.rst:107 +msgid "" +"These symbols define resources whose consumption can be controlled using the" +" :func:`setrlimit` and :func:`getrlimit` functions described below. The " +"values of these symbols are exactly the constants used by C programs." +msgstr "" +"这些符号定义了资源的消耗可以通过下面描述的 :func:`setrlimit` 和 :func:`getrlimit` 函数来控制。这些符号的值正是 C" +" 程序所使用的常数。" + +#: ../../library/resource.rst:111 +msgid "" +"The Unix man page for :manpage:`getrlimit(2)` lists the available resources." +" Note that not all systems use the same symbol or same value to denote the " +"same resource. This module does not attempt to mask platform differences " +"--- symbols not defined for a platform will not be available from this " +"module on that platform." +msgstr "" +"Unix man 页面 :manpage:`getrlimit(2)` " +"列出了可用的资源。注意,并非所有系统都使用相同的符号或相同的值来表示相同的资源。本模块并不试图掩盖平台的差异——没有为某一平台定义的符号在该平台上将无法从本模块中获得。" + +#: ../../library/resource.rst:120 +msgid "" +"The maximum size (in bytes) of a core file that the current process can " +"create. This may result in the creation of a partial core file if a larger " +"core would be required to contain the entire process image." +msgstr "当前进程可以创建的核心文件的最大大小(以字节为单位)。如果需要更大的核心文件来包含整个进程的镜像,这可能会导致创建一个部分核心文件。" + +#: ../../library/resource.rst:127 +msgid "" +"The maximum amount of processor time (in seconds) that a process can use. If" +" this limit is exceeded, a :const:`SIGXCPU` signal is sent to the process. " +"(See the :mod:`signal` module documentation for information about how to " +"catch this signal and do something useful, e.g. flush open files to disk.)" +msgstr "" +"一个进程可以使用的最大处理器时间(以秒为单位)。如果超过了这个限制,一个 :const:`SIGXCPU` 信号将被发送给进程。(参见 " +":mod:`signal` 模块文档,了解如何捕捉这个信号并做一些有用的事情,例如,将打开的文件刷新到磁盘上)。" + +#: ../../library/resource.rst:135 +msgid "The maximum size of a file which the process may create." +msgstr "进程可能创建的文件的最大大小。" + +#: ../../library/resource.rst:140 +msgid "The maximum size (in bytes) of the process's heap." +msgstr "进程的堆的最大大小(以字节为单位)。" + +#: ../../library/resource.rst:145 +msgid "" +"The maximum size (in bytes) of the call stack for the current process. This" +" only affects the stack of the main thread in a multi-threaded process." +msgstr "当前进程的调用堆栈的最大大小(字节)。 这只影响到多线程进程中主线程的堆栈。" + +#: ../../library/resource.rst:151 +msgid "" +"The maximum resident set size that should be made available to the process." +msgstr "应该提供给进程的最大常驻内存大小。" + +#: ../../library/resource.rst:156 +msgid "The maximum number of processes the current process may create." +msgstr "当前进程可能创建的最大进程数。" + +#: ../../library/resource.rst:161 +msgid "The maximum number of open file descriptors for the current process." +msgstr "当前进程打开的文件描述符的最大数量。" + +#: ../../library/resource.rst:166 +msgid "The BSD name for :const:`RLIMIT_NOFILE`." +msgstr "BSD 对 :const:`RLIMIT_NOFILE` 的命名。" + +#: ../../library/resource.rst:171 +msgid "The maximum address space which may be locked in memory." +msgstr "可能被锁定在内存中的最大地址空间。" + +#: ../../library/resource.rst:176 +msgid "The largest area of mapped memory which the process may occupy." +msgstr "进程可能占用的最大映射内存区域。" + +#: ../../library/resource.rst:181 +msgid "" +"The maximum area (in bytes) of address space which may be taken by the " +"process." +msgstr "进程可能占用的地址空间的最大区域(以字节为单位)。" + +#: ../../library/resource.rst:186 +msgid "The number of bytes that can be allocated for POSIX message queues." +msgstr "可分配给 POSIX 消息队列的字节数。" + +#: ../../library/resource.rst:189 ../../library/resource.rst:226 +msgid ":ref:`Availability `: Linux 2.6.8 or later." +msgstr ":ref:`Availability `: Linux 2.6.8 或更新版本。" + +#: ../../library/resource.rst:195 +msgid "" +"The ceiling for the process's nice level (calculated as 20 - rlim_cur)." +msgstr "进程的 Nice 级别的上限(计算为 20 - rlim_cur )。" + +#: ../../library/resource.rst:198 ../../library/resource.rst:207 +msgid ":ref:`Availability `: Linux 2.6.12 or later." +msgstr ":ref:`Availability `: Linux 2.6.12 或更新版本" + +#: ../../library/resource.rst:204 +msgid "The ceiling of the real-time priority." +msgstr "实时优先级的上限。" + +#: ../../library/resource.rst:213 +msgid "" +"The time limit (in microseconds) on CPU time that a process can spend under " +"real-time scheduling without making a blocking syscall." +msgstr "在实时调度下,一个进程在不进行阻塞性系统调用的情况下,可以花费的 CPU 时间限制(以微秒计)。" + +#: ../../library/resource.rst:217 +msgid ":ref:`Availability `: Linux 2.6.25 or later." +msgstr ":ref:`Availability `: Linux 2.6.25 或更新版本" + +#: ../../library/resource.rst:223 +msgid "The number of signals which the process may queue." +msgstr "进程可能排队的信号数量。" + +#: ../../library/resource.rst:231 +msgid "" +"The maximum size (in bytes) of socket buffer usage for this user. This " +"limits the amount of network memory, and hence the amount of mbufs, that " +"this user may hold at any time." +msgstr "这个用户使用的套接字缓冲区的最大大小(字节数)。这限制了这个用户在任何时候都可以持有的网络内存数量,因此也限制了 mbufs 的数量。" + +#: ../../library/resource.rst:236 ../../library/resource.rst:249 +#: ../../library/resource.rst:257 +msgid ":ref:`Availability `: FreeBSD 9 or later." +msgstr ":ref:`Availability `: FreeBSD 9 或更新版本" + +#: ../../library/resource.rst:241 +msgid "" +"The maximum size (in bytes) of the swap space that may be reserved or used " +"by all of this user id's processes. This limit is enforced only if bit 1 of " +"the vm.overcommit sysctl is set. Please see `tuning(7) " +"`__ for a " +"complete description of this sysctl." +msgstr "" +"这个用户 ID 的所有进程可能保留或使用的交换空间的最大大小(字节数)。这个限制只有在 vm.overcommit sysctl的第 1 位被置 1 " +"时才会被强制执行。请参阅 `tuning(7) " +"`__ " +"以获得关于这个系统检测器的完整介绍。" + +#: ../../library/resource.rst:254 +msgid "The maximum number of pseudo-terminals created by this user id." +msgstr "该用户 ID 创建的伪终端的最大数量。" + +#: ../../library/resource.rst:261 +msgid "Resource Usage" +msgstr "资源用量" + +#: ../../library/resource.rst:263 +msgid "These functions are used to retrieve resource usage information:" +msgstr "这些函数被用来检索资源使用信息。" + +#: ../../library/resource.rst:268 +msgid "" +"This function returns an object that describes the resources consumed by " +"either the current process or its children, as specified by the *who* " +"parameter. The *who* parameter should be specified using one of the " +":const:`RUSAGE_\\*` constants described below." +msgstr "" +"这个函数返回一个对象,描述当前进程或其子进程所消耗的资源,由 *who* 参数指定。 *who* 参数应该使用下面描述的 " +":const:`RUSAGE_\\*` 常数之一来指定。" + +#: ../../library/resource.rst:273 +msgid "A simple example::" +msgstr "一个简单的示例:" + +#: ../../library/resource.rst:287 +msgid "" +"The fields of the return value each describe how a particular system " +"resource has been used, e.g. amount of time spent running is user mode or " +"number of times the process was swapped out of main memory. Some values are " +"dependent on the clock tick internal, e.g. the amount of memory the process " +"is using." +msgstr "" +"返回值的字段分别描述了某一特定系统资源的使用情况,例如,在用户模式下运行的时间或进程从主内存中换出的次数。有些值取决于内部的时钟周期,例如进程使用的内存量。" + +#: ../../library/resource.rst:292 +msgid "" +"For backward compatibility, the return value is also accessible as a tuple " +"of 16 elements." +msgstr "为了向后兼容,返回值也可以作为一个 16 个元素的元组来访问。" + +#: ../../library/resource.rst:295 +msgid "" +"The fields :attr:`ru_utime` and :attr:`ru_stime` of the return value are " +"floating point values representing the amount of time spent executing in " +"user mode and the amount of time spent executing in system mode, " +"respectively. The remaining values are integers. Consult the " +":manpage:`getrusage(2)` man page for detailed information about these " +"values. A brief summary is presented here:" +msgstr "" +"返回值中的 :attr:`ru_utime` 和 :attr:`ru_stime` " +"字段是浮点值,分别代表在用户模式下执行的时间和在系统模式下执行的时间。其余的值是整数。关于这些值的详细信息,请查阅 " +":manpage:`getrusage(2)` man page 。这里介绍一个简短的摘要。" + +#: ../../library/resource.rst:302 +msgid "Index" +msgstr "索引" + +#: ../../library/resource.rst:302 +msgid "Field" +msgstr "域" + +#: ../../library/resource.rst:302 +msgid "Resource" +msgstr "资源" + +#: ../../library/resource.rst:304 +msgid "``0``" +msgstr "``0``" + +#: ../../library/resource.rst:304 +msgid ":attr:`ru_utime`" +msgstr ":attr:`ru_utime`" + +#: ../../library/resource.rst:304 +msgid "time in user mode (float seconds)" +msgstr "用户模式下的时间(浮点数秒)" + +#: ../../library/resource.rst:306 +msgid "``1``" +msgstr "``1``" + +#: ../../library/resource.rst:306 +msgid ":attr:`ru_stime`" +msgstr ":attr:`ru_stime`" + +#: ../../library/resource.rst:306 +msgid "time in system mode (float seconds)" +msgstr "系统模式下的时间(浮点数秒)" + +#: ../../library/resource.rst:308 +msgid "``2``" +msgstr "``2``" + +#: ../../library/resource.rst:308 +msgid ":attr:`ru_maxrss`" +msgstr ":attr:`ru_maxrss`" + +#: ../../library/resource.rst:308 +msgid "maximum resident set size" +msgstr "最大的常驻内存大小" + +#: ../../library/resource.rst:310 +msgid "``3``" +msgstr "``3``" + +#: ../../library/resource.rst:310 +msgid ":attr:`ru_ixrss`" +msgstr ":attr:`ru_ixrss`" + +#: ../../library/resource.rst:310 +msgid "shared memory size" +msgstr "共享内存大小" + +#: ../../library/resource.rst:312 +msgid "``4``" +msgstr "``4``" + +#: ../../library/resource.rst:312 +msgid ":attr:`ru_idrss`" +msgstr ":attr:`ru_idrss`" + +#: ../../library/resource.rst:312 +msgid "unshared memory size" +msgstr "未共享的内存大小" + +#: ../../library/resource.rst:314 +msgid "``5``" +msgstr "``5``" + +#: ../../library/resource.rst:314 +msgid ":attr:`ru_isrss`" +msgstr ":attr:`ru_isrss`" + +#: ../../library/resource.rst:314 +msgid "unshared stack size" +msgstr "未共享的堆栈大小" + +#: ../../library/resource.rst:316 +msgid "``6``" +msgstr "``6``" + +#: ../../library/resource.rst:316 +msgid ":attr:`ru_minflt`" +msgstr ":attr:`ru_minflt`" + +#: ../../library/resource.rst:316 +msgid "page faults not requiring I/O" +msgstr "不需要 I/O 的页面故障数" + +#: ../../library/resource.rst:318 +msgid "``7``" +msgstr "``7``" + +#: ../../library/resource.rst:318 +msgid ":attr:`ru_majflt`" +msgstr ":attr:`ru_majflt`" + +#: ../../library/resource.rst:318 +msgid "page faults requiring I/O" +msgstr "需要 I/O 的页面故障数" + +#: ../../library/resource.rst:320 +msgid "``8``" +msgstr "``8``" + +#: ../../library/resource.rst:320 +msgid ":attr:`ru_nswap`" +msgstr ":attr:`ru_nswap`" + +#: ../../library/resource.rst:320 +msgid "number of swap outs" +msgstr "swap out 的数量" + +#: ../../library/resource.rst:322 +msgid "``9``" +msgstr "``9``" + +#: ../../library/resource.rst:322 +msgid ":attr:`ru_inblock`" +msgstr ":attr:`ru_inblock`" + +#: ../../library/resource.rst:322 +msgid "block input operations" +msgstr "块输入操作数" + +#: ../../library/resource.rst:324 +msgid "``10``" +msgstr "``10``" + +#: ../../library/resource.rst:324 +msgid ":attr:`ru_oublock`" +msgstr ":attr:`ru_oublock`" + +#: ../../library/resource.rst:324 +msgid "block output operations" +msgstr "块输出操作数" + +#: ../../library/resource.rst:326 +msgid "``11``" +msgstr "``11``" + +#: ../../library/resource.rst:326 +msgid ":attr:`ru_msgsnd`" +msgstr ":attr:`ru_msgsnd`" + +#: ../../library/resource.rst:326 +msgid "messages sent" +msgstr "发送消息数" + +#: ../../library/resource.rst:328 +msgid "``12``" +msgstr "``12``" + +#: ../../library/resource.rst:328 +msgid ":attr:`ru_msgrcv`" +msgstr ":attr:`ru_msgrcv`" + +#: ../../library/resource.rst:328 +msgid "messages received" +msgstr "收到消息数" + +#: ../../library/resource.rst:330 +msgid "``13``" +msgstr "``13``" + +#: ../../library/resource.rst:330 +msgid ":attr:`ru_nsignals`" +msgstr ":attr:`ru_nsignals`" + +#: ../../library/resource.rst:330 +msgid "signals received" +msgstr "收到信号数" + +#: ../../library/resource.rst:332 +msgid "``14``" +msgstr "``14``" + +#: ../../library/resource.rst:332 +msgid ":attr:`ru_nvcsw`" +msgstr ":attr:`ru_nvcsw`" + +#: ../../library/resource.rst:332 +msgid "voluntary context switches" +msgstr "主动上下文切换" + +#: ../../library/resource.rst:334 +msgid "``15``" +msgstr "``15``" + +#: ../../library/resource.rst:334 +msgid ":attr:`ru_nivcsw`" +msgstr ":attr:`ru_nivcsw`" + +#: ../../library/resource.rst:334 +msgid "involuntary context switches" +msgstr "被动上下文切换" + +#: ../../library/resource.rst:337 +msgid "" +"This function will raise a :exc:`ValueError` if an invalid *who* parameter " +"is specified. It may also raise :exc:`error` exception in unusual " +"circumstances." +msgstr "" +"如果指定了一个无效的 *who* 参数,这个函数将触发一个 :exc:`ValueError` 。在特殊情况下,它也可能触发 :exc:`error` " +"异常。" + +#: ../../library/resource.rst:343 +msgid "" +"Returns the number of bytes in a system page. (This need not be the same as " +"the hardware page size.)" +msgstr "返回一个系统页面的字节数。(这不需要和硬件页的大小相同)。" + +#: ../../library/resource.rst:346 +msgid "" +"The following :const:`RUSAGE_\\*` symbols are passed to the " +":func:`getrusage` function to specify which processes information should be " +"provided for." +msgstr "下面的 :const:`RUSAGE_\\*` 符号被传递给 :func:`getrusage` 函数,以指定应该为哪些进程提供信息。" + +#: ../../library/resource.rst:352 +msgid "" +"Pass to :func:`getrusage` to request resources consumed by the calling " +"process, which is the sum of resources used by all threads in the process." +msgstr "传递给 :func:`getrusage` 以请求调用进程消耗的资源,这是进程中所有线程使用的资源总和。" + +#: ../../library/resource.rst:358 +msgid "" +"Pass to :func:`getrusage` to request resources consumed by child processes " +"of the calling process which have been terminated and waited for." +msgstr "传递给 :func:`getrusage` 以请求被终止和等待的调用进程的子进程所消耗的资源。" + +#: ../../library/resource.rst:364 +msgid "" +"Pass to :func:`getrusage` to request resources consumed by both the current " +"process and child processes. May not be available on all systems." +msgstr "传递给 :func:`getrusage` 以请求当前进程和子进程所消耗的资源。并非所有系统都能使用。" + +#: ../../library/resource.rst:370 +msgid "" +"Pass to :func:`getrusage` to request resources consumed by the current " +"thread. May not be available on all systems." +msgstr "传递给 :func:`getrusage` 以请求当前线程所消耗的资源。 并非所有系统都能使用。" diff --git a/library/rlcompleter.po b/library/rlcompleter.po new file mode 100644 index 000000000..686155920 --- /dev/null +++ b/library/rlcompleter.po @@ -0,0 +1,104 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) 2001-2022, Python Software Foundation +# This file is distributed under the same license as the Python package. +# FIRST AUTHOR , YEAR. +# +# Translators: +# ppcfish , 2019 +# Zombie110year , 2019 +# Freesand Leo , 2019 +# +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: Python 3.9\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2022-11-04 14:34+0000\n" +"PO-Revision-Date: 2017-02-16 23:24+0000\n" +"Last-Translator: Freesand Leo , 2019\n" +"Language-Team: Chinese (China) (https://www.transifex.com/python-doc/teams/5390/zh_CN/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: zh_CN\n" +"Plural-Forms: nplurals=1; plural=0;\n" + +#: ../../library/rlcompleter.rst:2 +msgid ":mod:`rlcompleter` --- Completion function for GNU readline" +msgstr ":mod:`rlcompleter` --- GNU readline 的补全函数" + +#: ../../library/rlcompleter.rst:9 +msgid "**Source code:** :source:`Lib/rlcompleter.py`" +msgstr "**源代码:** :source:`Lib/rlcompleter.py`" + +#: ../../library/rlcompleter.rst:13 +msgid "" +"The :mod:`rlcompleter` module defines a completion function suitable for the" +" :mod:`readline` module by completing valid Python identifiers and keywords." +msgstr "" +":mod:`rlcompeleter` 通过补全有效的 Python 标识符和关键字定义了一个适用于 :mod:`readline` 模块的补全函数。" + +#: ../../library/rlcompleter.rst:16 +msgid "" +"When this module is imported on a Unix platform with the :mod:`readline` " +"module available, an instance of the :class:`Completer` class is " +"automatically created and its :meth:`complete` method is set as the " +":mod:`readline` completer." +msgstr "" +"当此模块在具有可用的 :mod:`readline` 模块的 Unix 平台被导入, 一个 :class:`Completer` " +"实例将被自动创建并且它的 :meth:`complete` 方法将设置为 :mod:`readline` 的补全器." + +#: ../../library/rlcompleter.rst:20 +msgid "Example::" +msgstr "示例::" + +#: ../../library/rlcompleter.rst:31 +msgid "" +"The :mod:`rlcompleter` module is designed for use with Python's " +":ref:`interactive mode `. Unless Python is run with the " +":option:`-S` option, the module is automatically imported and configured " +"(see :ref:`rlcompleter-config`)." +msgstr "" +":mod:`rlcompleter` 模块是为了使用 Python 的 :ref:`交互模式 ` 而设计的。 除非 " +"Python 是通过 :option:`-S` 选项运行, 这个模块总是自动地被导入且配置 (参见 :ref:`rlcompleter-" +"config`)。" + +#: ../../library/rlcompleter.rst:36 +msgid "" +"On platforms without :mod:`readline`, the :class:`Completer` class defined " +"by this module can still be used for custom purposes." +msgstr "在没有 :mod:`readline` 的平台, 此模块定义的 :class:`Completer` 类仍然可以用于自定义行为." + +#: ../../library/rlcompleter.rst:43 +msgid "Completer Objects" +msgstr "Completer 对象" + +#: ../../library/rlcompleter.rst:45 +msgid "Completer objects have the following method:" +msgstr "Completer 对象具有以下方法:" + +#: ../../library/rlcompleter.rst:50 +msgid "Return the *state*\\ th completion for *text*." +msgstr "为 *text* 返回第 *state* 项补全。" + +#: ../../library/rlcompleter.rst:52 +msgid "" +"If called for *text* that doesn't include a period character (``'.'``), it " +"will complete from names currently defined in :mod:`__main__`, " +":mod:`builtins` and keywords (as defined by the :mod:`keyword` module)." +msgstr "" +"如果指定的 *text* 不包含句点字符 (``'.'``),它将根据当前 :mod:`__main__`, :mod:`builtins` " +"和保留关键字(定义于 :mod:`keyword` 模块)所定义的名称进行补全。" + +#: ../../library/rlcompleter.rst:56 +msgid "" +"If called for a dotted name, it will try to evaluate anything without " +"obvious side-effects (functions will not be evaluated, but it can generate " +"calls to :meth:`__getattr__`) up to the last part, and find matches for the " +"rest via the :func:`dir` function. Any exception raised during the " +"evaluation of the expression is caught, silenced and :const:`None` is " +"returned." +msgstr "" +"如果为带有句点的名称执行调用,它将尝试尽量求值直到最后一部分为止而不产生附带影响(函数不会被求值,但它可以生成对 :meth:`__getattr__`" +" 的调用),并通过 :func:`dir` 函数来匹配剩余部分。 在对表达式求值期间引发的任何异常都会被捕获、静默处理并返回 " +":const:`None`。" diff --git a/library/runpy.po b/library/runpy.po new file mode 100644 index 000000000..87c48cf38 --- /dev/null +++ b/library/runpy.po @@ -0,0 +1,315 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) 2001-2022, Python Software Foundation +# This file is distributed under the same license as the Python package. +# FIRST AUTHOR , YEAR. +# +# Translators: +# Dai Xu , 2021 +# Freesand Leo , 2022 +# +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: Python 3.9\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2022-11-04 14:34+0000\n" +"PO-Revision-Date: 2017-02-16 23:25+0000\n" +"Last-Translator: Freesand Leo , 2022\n" +"Language-Team: Chinese (China) (https://www.transifex.com/python-doc/teams/5390/zh_CN/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: zh_CN\n" +"Plural-Forms: nplurals=1; plural=0;\n" + +#: ../../library/runpy.rst:2 +msgid ":mod:`runpy` --- Locating and executing Python modules" +msgstr ":mod:`runpy` ——查找并执行 Python 模块" + +#: ../../library/runpy.rst:9 +msgid "**Source code:** :source:`Lib/runpy.py`" +msgstr "**源代码:** :source:`Lib/runpy.py`" + +#: ../../library/runpy.rst:13 +msgid "" +"The :mod:`runpy` module is used to locate and run Python modules without " +"importing them first. Its main use is to implement the :option:`-m` command " +"line switch that allows scripts to be located using the Python module " +"namespace rather than the filesystem." +msgstr "" +":mod:`runpy` 模块用于找到并运行 Python 的模块,而无需首先导入。主要用于实现 :option:`-m` 命令行开关,以允许用 " +"Python 模块命名空间而不是文件系统来定位脚本。" + +#: ../../library/runpy.rst:18 +msgid "" +"Note that this is *not* a sandbox module - all code is executed in the " +"current process, and any side effects (such as cached imports of other " +"modules) will remain in place after the functions have returned." +msgstr "请注意,这 *并非* 一个沙盒模块——所有代码都在当前进程中运行,所有副作用(如其他模块对导入操作进行了缓存)在函数返回后都会留存。" + +#: ../../library/runpy.rst:22 +msgid "" +"Furthermore, any functions and classes defined by the executed code are not " +"guaranteed to work correctly after a :mod:`runpy` function has returned. If " +"that limitation is not acceptable for a given use case, :mod:`importlib` is " +"likely to be a more suitable choice than this module." +msgstr "" +"此外,在 :mod:`runpy` 函数返回后,任何由已执行代码定义的函数和类都不能保证正确工作。如果某使用场景不能接收此限制,那么选用 " +":mod:`importlib` 可能更合适些。" + +#: ../../library/runpy.rst:27 +msgid "The :mod:`runpy` module provides two functions:" +msgstr ":mod:`runpy` 模块提供两个函数:" + +#: ../../library/runpy.rst:35 +msgid "" +"Execute the code of the specified module and return the resulting module " +"globals dictionary. The module's code is first located using the standard " +"import mechanism (refer to :pep:`302` for details) and then executed in a " +"fresh module namespace." +msgstr "" +"执行给定模块的代码,并返回结果模块的 globals 字典。 该模块的代码首先会用标准的导入机制去查找定位 (详情请参阅 " +":pep:`302`),然后在全新的模块命名空间中运行。" + +#: ../../library/runpy.rst:40 +msgid "" +"The *mod_name* argument should be an absolute module name. If the module " +"name refers to a package rather than a normal module, then that package is " +"imported and the ``__main__`` submodule within that package is then executed" +" and the resulting module globals dictionary returned." +msgstr "" +"参数 *mod_name* 应该是一个绝对模块名。如果模块名指向一个包,而不是普通的模块,那么该包会被导入,然后执行包中的 ``__main__`` " +"子模块,并返回结果模块的 globals 字典。" + +#: ../../library/runpy.rst:46 +msgid "" +"The optional dictionary argument *init_globals* may be used to pre-populate " +"the module's globals dictionary before the code is executed. The supplied " +"dictionary will not be modified. If any of the special global variables " +"below are defined in the supplied dictionary, those definitions are " +"overridden by :func:`run_module`." +msgstr "" +"可选的字典参数 *init_globals* 可用来在代码执行前预填充模块的 globals " +"字典。给出的字典参数不会被修改。如果字典中定义了以下任意一个特殊全局变量,这些定义都会被 :func:`run_module` 覆盖。" + +#: ../../library/runpy.rst:52 ../../library/runpy.rst:121 +msgid "" +"The special global variables ``__name__``, ``__spec__``, ``__file__``, " +"``__cached__``, ``__loader__`` and ``__package__`` are set in the globals " +"dictionary before the module code is executed (Note that this is a minimal " +"set of variables - other variables may be set implicitly as an interpreter " +"implementation detail)." +msgstr "" +" 在模块代码执行前,特殊全局变量 ``__name__`` 、``__spec__`` 、``__file__`` " +"、``__cached__````__loader__`` 和 ``__package__`` 会在 globals " +"字典进行设置(注意,这是一个最小集——其他变量可能由解释器的实现代码进行隐式设置)。" + +#: ../../library/runpy.rst:58 +msgid "" +"``__name__`` is set to *run_name* if this optional argument is not " +":const:`None`, to ``mod_name + '.__main__'`` if the named module is a " +"package and to the *mod_name* argument otherwise." +msgstr "" +"若可选参数 ``__name__`` 不为 :const:`None` 则设为 *run_name*,若此名称的模块是一个包则设为 ``mod_name" +" + '.__main__'``,否则设为 *mod_name* 参数。" + +#: ../../library/runpy.rst:62 +msgid "" +"``__spec__`` will be set appropriately for the *actually* imported module " +"(that is, ``__spec__.name`` will always be *mod_name* or ``mod_name + " +"'.__main__``, never *run_name*)." +msgstr "" +"``__spec__`` 将设为合适的 *实际* 导入模块(也就是说,``__spec__.name`` 一定是 *mod_name* 或 " +"``mod_name + '.__main__``,而不是 *run_name*)。" + +#: ../../library/runpy.rst:66 +msgid "" +"``__file__``, ``__cached__``, ``__loader__`` and ``__package__`` are " +":ref:`set as normal ` based on the module spec." +msgstr "" +"``__file__`` 、``__cached__``、 ``__loader__`` 和 ``__package__`` 根据模块规范进行 " +":ref:`正常设置 ` " + +#: ../../library/runpy.rst:69 +msgid "" +"If the argument *alter_sys* is supplied and evaluates to :const:`True`, then" +" ``sys.argv[0]`` is updated with the value of ``__file__`` and " +"``sys.modules[__name__]`` is updated with a temporary module object for the " +"module being executed. Both ``sys.argv[0]`` and ``sys.modules[__name__]`` " +"are restored to their original values before the function returns." +msgstr "" +"如果给出了参数 *alter_sys* 并且值为 :const:`True`,那么 ``sys.argv[0]`` 将被更新为 ``__file__``" +" 的值,``sys.modules[__name__]`` 将被更新为临时模块对象。在函数返回前, ``sys.argv[0]`` 和 " +"``sys.modules[__name__]`` 将会复原。" + +#: ../../library/runpy.rst:75 +msgid "" +"Note that this manipulation of :mod:`sys` is not thread-safe. Other threads " +"may see the partially initialised module, as well as the altered list of " +"arguments. It is recommended that the :mod:`sys` module be left alone when " +"invoking this function from threaded code." +msgstr "" +"注意,这种对 :mod:`sys` " +"的操作不是线程安全的。其他线程可能会看到初始化不完整的模块,以及变动后的参数列表。如果从线程中的代码调用此函数,建议单实例运行 :mod:`sys` " +"模块。" + +#: ../../library/runpy.rst:81 +msgid "" +"The :option:`-m` option offering equivalent functionality from the command " +"line." +msgstr ":option:`-m` 选项由命令行提供相同功能。" + +#: ../../library/runpy.rst:84 +msgid "" +"Added ability to execute packages by looking for a ``__main__`` submodule." +msgstr "加入了 查找 ``__main__`` 子模块并执行软件包的能力。" + +#: ../../library/runpy.rst:87 +msgid "Added ``__cached__`` global variable (see :pep:`3147`)." +msgstr "加入了 ``__cached__`` 全局变量(参见 :pep:`3147` )。" + +#: ../../library/runpy.rst:90 +msgid "" +"Updated to take advantage of the module spec feature added by :pep:`451`. " +"This allows ``__cached__`` to be set correctly for modules run this way, as " +"well as ensuring the real module name is always accessible as " +"``__spec__.name``." +msgstr "" +"充分利用 :pep:`451` 加入的模块规格功能。使得以这种方式运行的模块能够正确设置 ``__cached__``,并确保真正的模块名称总是可以通过" +" ``__spec__.name`` 的形式访问。" + +#: ../../library/runpy.rst:101 +msgid "" +"Execute the code at the named filesystem location and return the resulting " +"module globals dictionary. As with a script name supplied to the CPython " +"command line, the supplied path may refer to a Python source file, a " +"compiled bytecode file or a valid sys.path entry containing a ``__main__`` " +"module (e.g. a zipfile containing a top-level ``__main__.py`` file)." +msgstr "" +"执行指定位置的代码,并返回结果模块的 globals 字典。与提供给 CPython 命令行的脚本名称一样,给出的路径可以指向 Python " +"源文件、编译过的字节码文件或包含``__main__`` 模块的有效 sys.path 项(例如一个包含顶级``__main__.py`` 文件的 " +"zip 文件)。" + +#: ../../library/runpy.rst:107 +msgid "" +"For a simple script, the specified code is simply executed in a fresh module" +" namespace. For a valid sys.path entry (typically a zipfile or directory), " +"the entry is first added to the beginning of ``sys.path``. The function then" +" looks for and executes a :mod:`__main__` module using the updated path. " +"Note that there is no special protection against invoking an existing " +":mod:`__main__` entry located elsewhere on ``sys.path`` if there is no such " +"module at the specified location." +msgstr "" +"对于直接的脚本而言,指定代码将直接在一个新的模块命名空间中运行。对于一个有效的 sys.path 项(通常是一个 zip 文件或目录),其首先会被添加到" +" ``sys.path`` 的开头。然后,本函数用更新后的路径查找并执行 :mod:`__main__` " +"模块。请注意,即便在指定位置不存在主模块,也没有特别的保护措施来防止调用存在于 ``sys.path`` 其他地方的 :mod:`__main__`。" + +#: ../../library/runpy.rst:115 +msgid "" +"The optional dictionary argument *init_globals* may be used to pre-populate " +"the module's globals dictionary before the code is executed. The supplied " +"dictionary will not be modified. If any of the special global variables " +"below are defined in the supplied dictionary, those definitions are " +"overridden by :func:`run_path`." +msgstr "" +"利用可选的字典参数 *init_globals* ,可在代码执行前预填模块的 globals " +"字典。给出的字典参数不会被修改。如果给出的字典中定义了下列特殊全局变量,这些定义均会被 :func:`run_module` 覆盖。" + +#: ../../library/runpy.rst:127 +msgid "" +"``__name__`` is set to *run_name* if this optional argument is not " +":const:`None` and to ``''`` otherwise." +msgstr "" +"如果该可选参数不为 :const:`None`,则 ``__name__`` 被设为 *run_name*,否则为 ``''``。" + +#: ../../library/runpy.rst:130 +msgid "" +"If the supplied path directly references a script file (whether as source or" +" as precompiled byte code), then ``__file__`` will be set to the supplied " +"path, and ``__spec__``, ``__cached__``, ``__loader__`` and ``__package__`` " +"will all be set to :const:`None`." +msgstr "" +"如果提供的路径直接引用了一个脚本文件(无论是源码文件还是预编译的字节码),那么 ``__file__`` 将设为给出的路径,而 " +"``__spec__``、``__cached__``、``__loader__`` 和 ``__package__`` 都将设为 " +":const:`None`。" + +#: ../../library/runpy.rst:135 +msgid "" +"If the supplied path is a reference to a valid sys.path entry, then " +"``__spec__`` will be set appropriately for the imported ``__main__`` module " +"(that is, ``__spec__.name`` will always be ``__main__``). ``__file__``, " +"``__cached__``, ``__loader__`` and ``__package__`` will be :ref:`set as " +"normal ` based on the module spec." +msgstr "" +"如果给出的路径是对有效 sys.path 项的引用,那么 ``__spec__`` 将为导入的 ``__main__`` 模块进行正确设置 " +"(也就是说,``__spec__.name`` 将一定是 ``__main__``)。 ``__file__``, ``__cached__``, " +"``__loader__`` 和 ``__package__`` 将依据模块规格 :ref:`进行常规设置 `。" + +#: ../../library/runpy.rst:141 +msgid "" +"A number of alterations are also made to the :mod:`sys` module. Firstly, " +"``sys.path`` may be altered as described above. ``sys.argv[0]`` is updated " +"with the value of ``path_name`` and ``sys.modules[__name__]`` is updated " +"with a temporary module object for the module being executed. All " +"modifications to items in :mod:`sys` are reverted before the function " +"returns." +msgstr "" +":mod:`sys` 模块也做了一些改动。 首先,``sys.path`` 可能做上文所述的的修改。 ``sys.argv[0]`` 会被更新为 " +"``path_name`` 的值而 ``sys.modules[__name__]`` 会被更新为对应于正在被执行的模块的临时模块对象。 " +"在函数返回之前对 :mod:`sys` 中条目的所有修改都会被复原。" + +#: ../../library/runpy.rst:148 +msgid "" +"Note that, unlike :func:`run_module`, the alterations made to :mod:`sys` are" +" not optional in this function as these adjustments are essential to " +"allowing the execution of sys.path entries. As the thread-safety limitations" +" still apply, use of this function in threaded code should be either " +"serialised with the import lock or delegated to a separate process." +msgstr "" +"注意,与 :func:`run_module` 不同的是,本函数对 :mod:`sys` 的修改不是可有可无的,因为这些调整对于 sys.path " +"项能够顺利执行至关重要。由于依然存在线程安全的限制,在线程代码中使用本函数时应采用导入锁进行序列运行,或者委托给一个单独的进程。" + +#: ../../library/runpy.rst:155 +msgid "" +":ref:`using-on-interface-options` for equivalent functionality on the " +"command line (``python path/to/script``)." +msgstr "" +":ref:`using-on-interface-options` 用于在命令行上实现同等功能(``python path/to/script``)。" + +#: ../../library/runpy.rst:160 +msgid "" +"Updated to take advantage of the module spec feature added by :pep:`451`. " +"This allows ``__cached__`` to be set correctly in the case where " +"``__main__`` is imported from a valid sys.path entry rather than being " +"executed directly." +msgstr "" +"已作更新,以便充分利用 :pep:`451` 加入的模块规格功能。使得从有效 sys.path 项导入``__main__`` " +"而不是直接执行的情况下,能够正确设置 ``__cached__``。" + +#: ../../library/runpy.rst:169 +msgid ":pep:`338` -- Executing modules as scripts" +msgstr ":pep:`338` -- 将模块作为脚本执行" + +#: ../../library/runpy.rst:169 ../../library/runpy.rst:172 +msgid "PEP written and implemented by Nick Coghlan." +msgstr "PEP 由 Nick Coghlan 撰写并实现。" + +#: ../../library/runpy.rst:172 +msgid ":pep:`366` -- Main module explicit relative imports" +msgstr ":pep:`366` ——主模块的显式相对导入" + +#: ../../library/runpy.rst:175 +msgid ":pep:`451` -- A ModuleSpec Type for the Import System" +msgstr ":pep:`451` —— 导入系统采用的 ModuleSpec 类型" + +#: ../../library/runpy.rst:175 +msgid "PEP written and implemented by Eric Snow" +msgstr "PEP 由 Eric Snow 撰写并实现。" + +#: ../../library/runpy.rst:177 +msgid ":ref:`using-on-general` - CPython command line details" +msgstr ":ref:`using-on-general` —— CPython 命令行详解" + +#: ../../library/runpy.rst:179 +msgid "The :func:`importlib.import_module` function" +msgstr ":func:`importlib.import_module` 函数" diff --git a/library/sched.po b/library/sched.po new file mode 100644 index 000000000..6c5286b71 --- /dev/null +++ b/library/sched.po @@ -0,0 +1,172 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) 2001-2022, Python Software Foundation +# This file is distributed under the same license as the Python package. +# FIRST AUTHOR , YEAR. +# +# Translators: +# Alpha Du , 2019 +# Freesand Leo , 2021 +# +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: Python 3.9\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2022-11-04 14:34+0000\n" +"PO-Revision-Date: 2017-02-16 23:25+0000\n" +"Last-Translator: Freesand Leo , 2021\n" +"Language-Team: Chinese (China) (https://www.transifex.com/python-doc/teams/5390/zh_CN/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: zh_CN\n" +"Plural-Forms: nplurals=1; plural=0;\n" + +#: ../../library/sched.rst:2 +msgid ":mod:`sched` --- Event scheduler" +msgstr ":mod:`sched` --- 事件调度器" + +#: ../../library/sched.rst:9 +msgid "**Source code:** :source:`Lib/sched.py`" +msgstr "**源码:** :source:`Lib/sched.py`" + +#: ../../library/sched.rst:15 +msgid "" +"The :mod:`sched` module defines a class which implements a general purpose " +"event scheduler:" +msgstr ":mod:`sched` 模块定义了一个实现通用事件调度程序的类:" + +#: ../../library/sched.rst:20 +msgid "" +"The :class:`scheduler` class defines a generic interface to scheduling " +"events. It needs two functions to actually deal with the \"outside world\" " +"--- *timefunc* should be callable without arguments, and return a number " +"(the \"time\", in any units whatsoever). The *delayfunc* function should be" +" callable with one argument, compatible with the output of *timefunc*, and " +"should delay that many time units. *delayfunc* will also be called with the " +"argument ``0`` after each event is run to allow other threads an opportunity" +" to run in multi-threaded applications." +msgstr "" +":class:`scheduler` 类定义了一个调度事件的通用接口。 它需要两个函数来实际处理“外部世界” —— *timefunc* " +"应当不带参数地调用,并返回一个数字(“时间”,可以为任意单位)。 *delayfunc* 函数应当带一个参数调用,与 *timefunc* " +"的输出相兼容,并且应当延迟其所指定的时间单位。 每个事件运行后还将调用 *delayfunc* 并传入参数 ``0`` " +"以允许其他线程有机会在多线程应用中运行。" + +#: ../../library/sched.rst:29 +msgid "*timefunc* and *delayfunc* parameters are optional." +msgstr "*timefunc* 和 *delayfunc* 参数是可选的。" + +#: ../../library/sched.rst:32 +msgid "" +":class:`scheduler` class can be safely used in multi-threaded environments." +msgstr ":class:`scheduler` 类可以安全的在多线程环境中使用。" + +#: ../../library/sched.rst:36 +msgid "Example::" +msgstr "示例::" + +#: ../../library/sched.rst:61 +msgid "Scheduler Objects" +msgstr "调度器对象" + +#: ../../library/sched.rst:63 +msgid "" +":class:`scheduler` instances have the following methods and attributes:" +msgstr ":class:`scheduler` 实例拥有以下方法和属性:" + +#: ../../library/sched.rst:68 +msgid "" +"Schedule a new event. The *time* argument should be a numeric type " +"compatible with the return value of the *timefunc* function passed to the " +"constructor. Events scheduled for the same *time* will be executed in the " +"order of their *priority*. A lower number represents a higher priority." +msgstr "" +"安排一个新事件。 *time* 参数应该有一个数字类型兼容的返回值,与传递给构造函数的 *timefunc* 函数的返回值兼容。 计划在相同 " +"*time* 的事件将按其 *priority* 的顺序执行。 数字越小表示优先级越高。" + +#: ../../library/sched.rst:73 +msgid "" +"Executing the event means executing ``action(*argument, **kwargs)``. " +"*argument* is a sequence holding the positional arguments for *action*. " +"*kwargs* is a dictionary holding the keyword arguments for *action*." +msgstr "" +"执行事件意为执行 ``action(*argument, **kwargs)``。 *argument* 是包含有 *action* 的位置参数的序列。" +" *kwargs* 是包含 *action* 的关键字参数的字典。" + +#: ../../library/sched.rst:77 +msgid "" +"Return value is an event which may be used for later cancellation of the " +"event (see :meth:`cancel`)." +msgstr "返回值是一个事件,可用于以后取消事件( 参见 :meth:`cancel` )。" + +#: ../../library/sched.rst:80 ../../library/sched.rst:93 +msgid "*argument* parameter is optional." +msgstr "*argument* 参数是可选的。" + +#: ../../library/sched.rst:83 ../../library/sched.rst:96 +msgid "*kwargs* parameter was added." +msgstr "添加了 *kwargs* 形参。" + +#: ../../library/sched.rst:89 +msgid "" +"Schedule an event for *delay* more time units. Other than the relative time," +" the other arguments, the effect and the return value are the same as those " +"for :meth:`enterabs`." +msgstr "安排延后 *delay* 时间单位的事件。 除了相对时间,其他参数、效果和返回值与 :meth:`enterabs` 的相同。" + +#: ../../library/sched.rst:101 +msgid "" +"Remove the event from the queue. If *event* is not an event currently in the" +" queue, this method will raise a :exc:`ValueError`." +msgstr "从队列中删除事件。 如果 *event* 不是当前队列中的事件,则此方法将引发 :exc:`ValueError`。" + +#: ../../library/sched.rst:107 +msgid "Return ``True`` if the event queue is empty." +msgstr "如果事件队列为空则返回 ``True``。" + +#: ../../library/sched.rst:112 +msgid "" +"Run all scheduled events. This method will wait (using the " +":func:`delayfunc` function passed to the constructor) for the next event, " +"then execute it and so on until there are no more scheduled events." +msgstr "" +"运行所有预定事件。 此方法将等待(使用传递给构造函数的 :func:`delayfunc` " +"函数)进行下一个事件,然后执行它,依此类推,直到没有更多的计划事件。" + +#: ../../library/sched.rst:116 +msgid "" +"If *blocking* is false executes the scheduled events due to expire soonest " +"(if any) and then return the deadline of the next scheduled call in the " +"scheduler (if any)." +msgstr "如果 *blocking* 为false,则执行由于最快到期(如果有)的预定事件,然后在调度程序中返回下一个预定调用的截止时间(如果有)。" + +#: ../../library/sched.rst:120 +msgid "" +"Either *action* or *delayfunc* can raise an exception. In either case, the " +"scheduler will maintain a consistent state and propagate the exception. If " +"an exception is raised by *action*, the event will not be attempted in " +"future calls to :meth:`run`." +msgstr "" +"*action* 或 *delayfunc* 都可以引发异常。 在任何一种情况下,调度程序都将保持一致状态并传播异常。 如果 *action* " +"引发异常,则在将来调用 :meth:`run` 时不会尝试该事件。" + +#: ../../library/sched.rst:125 +msgid "" +"If a sequence of events takes longer to run than the time available before " +"the next event, the scheduler will simply fall behind. No events will be " +"dropped; the calling code is responsible for canceling events which are no " +"longer pertinent." +msgstr "如果一系列事件的运行时间大于下一个事件发生前的可用时间,那么调度程序将完全落后。 没有事件会被丢弃;调用代码负责取消不再相关的事件。" + +#: ../../library/sched.rst:130 +msgid "*blocking* parameter was added." +msgstr "添加了 *blocking* 形参。" + +#: ../../library/sched.rst:135 +msgid "" +"Read-only attribute returning a list of upcoming events in the order they " +"will be run. Each event is shown as a :term:`named tuple` with the " +"following fields: time, priority, action, argument, kwargs." +msgstr "" +"只读属性按照将要运行的顺序返回即将发生的事件列表。 每个事件都显示为 :term:`named tuple` " +",包含以下字段:time、priority、action、argument、kwargs。" diff --git a/library/secrets.po b/library/secrets.po new file mode 100644 index 000000000..45846d990 --- /dev/null +++ b/library/secrets.po @@ -0,0 +1,214 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) 2001-2022, Python Software Foundation +# This file is distributed under the same license as the Python package. +# FIRST AUTHOR , YEAR. +# +# Translators: +# ppcfish , 2019 +# Arisaka97 , 2020 +# Freesand Leo , 2020 +# jaystone776 <1732865113@qq.com>, 2021 +# +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: Python 3.9\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2022-11-04 14:34+0000\n" +"PO-Revision-Date: 2017-02-16 23:25+0000\n" +"Last-Translator: jaystone776 <1732865113@qq.com>, 2021\n" +"Language-Team: Chinese (China) (https://www.transifex.com/python-doc/teams/5390/zh_CN/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: zh_CN\n" +"Plural-Forms: nplurals=1; plural=0;\n" + +#: ../../library/secrets.rst:2 +msgid ":mod:`secrets` --- Generate secure random numbers for managing secrets" +msgstr ":mod:`secrets` --- 生成管理密码的安全随机数" + +#: ../../library/secrets.rst:16 +msgid "**Source code:** :source:`Lib/secrets.py`" +msgstr "**源代码:** :source:`Lib/secrets.py`" + +#: ../../library/secrets.rst:20 +msgid "" +"The :mod:`secrets` module is used for generating cryptographically strong " +"random numbers suitable for managing data such as passwords, account " +"authentication, security tokens, and related secrets." +msgstr ":mod:`secrets` 模块用于生成高度加密的随机数,适于管理密码、账户验证、安全凭据及机密数据。" + +#: ../../library/secrets.rst:24 +msgid "" +"In particular, :mod:`secrets` should be used in preference to the default " +"pseudo-random number generator in the :mod:`random` module, which is " +"designed for modelling and simulation, not security or cryptography." +msgstr "" +"最好用 :mod:`secrets` 替代 :mod:`random` 模块的默认伪随机数生成器,该生成器适用于建模和模拟,不宜用于安全与加密。" + +#: ../../library/secrets.rst:30 +msgid ":pep:`506`" +msgstr ":pep:`506`" + +#: ../../library/secrets.rst:34 +msgid "Random numbers" +msgstr "随机数" + +#: ../../library/secrets.rst:36 +msgid "" +"The :mod:`secrets` module provides access to the most secure source of " +"randomness that your operating system provides." +msgstr ":mod:`secrets` 模块是操作系统提供的最安全地随机性来源。" + +#: ../../library/secrets.rst:41 +msgid "" +"A class for generating random numbers using the highest-quality sources " +"provided by the operating system. See :class:`random.SystemRandom` for " +"additional details." +msgstr "用操作系统提供的最高质量源生成随机数的类。详见 :class:`random.SystemRandom`。" + +#: ../../library/secrets.rst:47 +msgid "Return a randomly-chosen element from a non-empty sequence." +msgstr "返回从非空序列中随机选取的元素。" + +#: ../../library/secrets.rst:51 +msgid "Return a random int in the range [0, *n*)." +msgstr "返回 [0, *n*) 范围内的随机整数。" + +#: ../../library/secrets.rst:55 +msgid "Return an int with *k* random bits." +msgstr "返回 *k* 个随机比特位的整数。" + +#: ../../library/secrets.rst:59 +msgid "Generating tokens" +msgstr "生成 Token" + +#: ../../library/secrets.rst:61 +msgid "" +"The :mod:`secrets` module provides functions for generating secure tokens, " +"suitable for applications such as password resets, hard-to-guess URLs, and " +"similar." +msgstr ":mod:`secrets` 模块提供了生成安全 Token 的函数,适用于密码重置、密保 URL 等应用场景。" + +#: ../../library/secrets.rst:67 +msgid "" +"Return a random byte string containing *nbytes* number of bytes. If *nbytes*" +" is ``None`` or not supplied, a reasonable default is used." +msgstr "" +"返回含 *nbytes* 个字节的随机字节字符串。如果未提供 *nbytes*,或*nbytes* 为 ``None``,则使用合理的默认值。" + +#: ../../library/secrets.rst:79 +msgid "" +"Return a random text string, in hexadecimal. The string has *nbytes* random" +" bytes, each byte converted to two hex digits. If *nbytes* is ``None`` or " +"not supplied, a reasonable default is used." +msgstr "" +"返回十六进制随机文本字符串。字符串有 *nbytes* 个随机字节,每个字节转换为两个十六进制数码。未提供 *nbytes* 或为 ``None`` " +"时,则使用合理的默认值。" + +#: ../../library/secrets.rst:90 +msgid "" +"Return a random URL-safe text string, containing *nbytes* random bytes. The" +" text is Base64 encoded, so on average each byte results in approximately " +"1.3 characters. If *nbytes* is ``None`` or not supplied, a reasonable " +"default is used." +msgstr "" +"返回安全的 URL 随机文本字符串,包含 *nbytes* 个随机字节。文本用 Base64 编码,平均来说,每个字节对应 1.3 个结果字符。未提供 " +"*nbytes* 或为 ``None`` 时,则使用合理的默认值。" + +#: ../../library/secrets.rst:102 +msgid "How many bytes should tokens use?" +msgstr "Token 应当使用多少个字节?" + +#: ../../library/secrets.rst:104 +msgid "" +"To be secure against `brute-force attacks " +"`_, tokens need to have " +"sufficient randomness. Unfortunately, what is considered sufficient will " +"necessarily increase as computers get more powerful and able to make more " +"guesses in a shorter period. As of 2015, it is believed that 32 bytes (256 " +"bits) of randomness is sufficient for the typical use-case expected for the " +":mod:`secrets` module." +msgstr "" +"为了在面对 `暴力攻击 `_ 时保证安全,Token" +" 的随机性必须足够高。随着计算机推衍能力的不断提升,随机性的安全标准也要不断提高。比如 2015 年,32 字节(256 位)的随机性对于 " +":mod:`secrets` 模块的典型用例就已经足够了。" + +#: ../../library/secrets.rst:112 +msgid "" +"For those who want to manage their own token length, you can explicitly " +"specify how much randomness is used for tokens by giving an :class:`int` " +"argument to the various ``token_*`` functions. That argument is taken as " +"the number of bytes of randomness to use." +msgstr "" +"要自行管理 Token 长度的用户,可以通过为 ``token_*`` 函数指定 :class:`int` 参数显式指定 Token " +"要使用多大的随机性。该参数以字节数表示随机性大小。" + +#: ../../library/secrets.rst:117 +msgid "" +"Otherwise, if no argument is provided, or if the argument is ``None``, the " +"``token_*`` functions will use a reasonable default instead." +msgstr "反之,如果未提供参数,或参数为 ``None``,则 ``token_*`` 函数将使用合理的默认值。" + +#: ../../library/secrets.rst:122 +msgid "" +"That default is subject to change at any time, including during maintenance " +"releases." +msgstr "该默认值随时可能会改变,比如,版本更新的时候。" + +#: ../../library/secrets.rst:127 +msgid "Other functions" +msgstr "其他功能" + +#: ../../library/secrets.rst:131 +msgid "" +"Return ``True`` if strings *a* and *b* are equal, otherwise ``False``, in " +"such a way as to reduce the risk of `timing attacks " +"`_. See " +":func:`hmac.compare_digest` for additional details." +msgstr "" +"字符串 *a* 与 *b* 相等则返回 ``True``,否则返回 ``False``,这种方式可降低 `定时攻击 " +"`_ 的风险。详见 " +":func:`hmac.compare_digest`。" + +#: ../../library/secrets.rst:138 +msgid "Recipes and best practices" +msgstr "应用技巧与最佳实践" + +#: ../../library/secrets.rst:140 +msgid "" +"This section shows recipes and best practices for using :mod:`secrets` to " +"manage a basic level of security." +msgstr "本节展示了一些使用 :mod:`secrets` 管理基本安全级别的应用技巧和最佳实践。" + +#: ../../library/secrets.rst:143 +msgid "Generate an eight-character alphanumeric password:" +msgstr "生成长度为八个字符的字母数字密码:" + +#: ../../library/secrets.rst:155 +msgid "" +"Applications should not `store passwords in a recoverable format " +"`_, whether plain text or " +"encrypted. They should be salted and hashed using a cryptographically-" +"strong one-way (irreversible) hash function." +msgstr "" +"应用程序不能 `以可恢复的格式存储密码 " +"`_,无论是用纯文本还是加密。 " +"它们应当使用高加密强度的单向(不可恢复)哈希函数来加盐并生成哈希值。" + +#: ../../library/secrets.rst:161 +msgid "" +"Generate a ten-character alphanumeric password with at least one lowercase " +"character, at least one uppercase character, and at least three digits:" +msgstr "生成长度为十个字符的字母数字密码,包含至少一个小写字母,至少一个大写字母以及至少三个数字:" + +#: ../../library/secrets.rst:178 +msgid "Generate an `XKCD-style passphrase `_:" +msgstr "生成 `XKCD 风格的密码串 `_:" + +#: ../../library/secrets.rst:190 +msgid "" +"Generate a hard-to-guess temporary URL containing a security token suitable " +"for password recovery applications:" +msgstr "生成临时密保 URL,包含密码恢复应用的安全 Token:" diff --git a/library/security_warnings.po b/library/security_warnings.po new file mode 100644 index 000000000..97dab6dcb --- /dev/null +++ b/library/security_warnings.po @@ -0,0 +1,113 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) 2001-2023, Python Software Foundation +# This file is distributed under the same license as the Python package. +# FIRST AUTHOR , YEAR. +# +# Translators: +# Zombie110year , 2021 +# Freesand Leo , 2022 +# +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: Python 3.9\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2023-07-29 03:34+0000\n" +"PO-Revision-Date: 2021-08-11 07:20+0000\n" +"Last-Translator: Freesand Leo , 2022\n" +"Language-Team: Chinese (China) (https://app.transifex.com/python-doc/teams/5390/zh_CN/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: zh_CN\n" +"Plural-Forms: nplurals=1; plural=0;\n" + +#: ../../library/security_warnings.rst:6 +msgid "Security Considerations" +msgstr "安全考量" + +#: ../../library/security_warnings.rst:8 +msgid "The following modules have specific security considerations:" +msgstr "下列模块具有专门的安全事项:" + +#: ../../library/security_warnings.rst:10 +msgid ":mod:`cgi`: :ref:`CGI security considerations `" +msgstr ":mod:`cgi`: :ref:`CGI 安全事项 `" + +#: ../../library/security_warnings.rst:11 +msgid "" +":mod:`hashlib`: :ref:`all constructors take a \"usedforsecurity\" keyword-" +"only argument disabling known insecure and blocked algorithms `" +msgstr "" +":mod:`hashlib`: :ref:`所有构造器都接受一个 \"usedforsecurity\" 仅限关键字参数以停用已知的不安全和已封禁的算法" +" `" + +#: ../../library/security_warnings.rst:14 +msgid "" +":mod:`http.server` is not suitable for production use, only implementing " +"basic security checks. See the :ref:`security considerations `." +msgstr "" +":mod:`http.server` 不适合生产用途,只实现了基本的安全检查。 请参阅 :ref:`安全性考量 `。" + +#: ../../library/security_warnings.rst:16 +msgid "" +":mod:`logging`: :ref:`Logging configuration uses eval() `" +msgstr ":mod:`logging`: :ref:`日志记录配置使用了 eval() `" + +#: ../../library/security_warnings.rst:18 +msgid "" +":mod:`multiprocessing`: :ref:`Connection.recv() uses pickle " +"`" +msgstr "" +":mod:`multiprocessing`: :ref:`Connection.recv() 使用了 pickle `" + +#: ../../library/security_warnings.rst:20 +msgid ":mod:`pickle`: :ref:`Restricting globals in pickle `" +msgstr ":mod:`pickle`: :ref:`在 pickle 中限制全局变量 `" + +#: ../../library/security_warnings.rst:21 +msgid "" +":mod:`random` shouldn't be used for security purposes, use :mod:`secrets` " +"instead" +msgstr ":mod:`random` 不应当被用于安全目的,而应改用 :mod:`secrets`" + +#: ../../library/security_warnings.rst:23 +msgid "" +":mod:`shelve`: :ref:`shelve is based on pickle and thus unsuitable for " +"dealing with untrusted sources `" +msgstr "" +":mod:`shelve`: :ref:`shelve 是基于 pickle 的因此不适用于处理不受信任的源 `" + +#: ../../library/security_warnings.rst:25 +msgid ":mod:`ssl`: :ref:`SSL/TLS security considerations `" +msgstr ":mod:`ssl`: :ref:`SSL/TLS 安全事项 `" + +#: ../../library/security_warnings.rst:26 +msgid "" +":mod:`subprocess`: :ref:`Subprocess security considerations `" +msgstr ":mod:`subprocess`: :ref:`子进程安全事项 `" + +#: ../../library/security_warnings.rst:28 +msgid "" +":mod:`tempfile`: :ref:`mktemp is deprecated due to vulnerability to race " +"conditions `" +msgstr "" +":mod:`tempfile`: :ref:`mktemp 由于存在竞争条件缺陷已被弃用 `" + +#: ../../library/security_warnings.rst:30 +msgid ":mod:`xml`: :ref:`XML vulnerabilities `" +msgstr ":mod:`xml`: :ref:`XML 安全缺陷 `" + +#: ../../library/security_warnings.rst:31 +msgid "" +":mod:`zipfile`: :ref:`maliciously prepared .zip files can cause disk volume " +"exhaustion `" +msgstr "" +":mod:`zipfile`: :ref:`恶意处理的 .zip 文件可能导致硬盘空间耗尽 `" diff --git a/library/select.po b/library/select.po new file mode 100644 index 000000000..4f19df99c --- /dev/null +++ b/library/select.po @@ -0,0 +1,1071 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) 2001-2022, Python Software Foundation +# This file is distributed under the same license as the Python package. +# FIRST AUTHOR , YEAR. +# +# Translators: +# 操旭 , 2017 +# 黄瓜小王子 , 2019 +# Zombie110year , 2019 +# ppcfish , 2019 +# Arisaka97 , 2020 +# Freesand Leo , 2022 +# +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: Python 3.9\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2022-11-04 14:34+0000\n" +"PO-Revision-Date: 2017-02-16 23:25+0000\n" +"Last-Translator: Freesand Leo , 2022\n" +"Language-Team: Chinese (China) (https://www.transifex.com/python-doc/teams/5390/zh_CN/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: zh_CN\n" +"Plural-Forms: nplurals=1; plural=0;\n" + +#: ../../library/select.rst:2 +msgid ":mod:`select` --- Waiting for I/O completion" +msgstr ":mod:`select` --- 等待 I/O 完成" + +#: ../../library/select.rst:9 +msgid "" +"This module provides access to the :c:func:`select` and :c:func:`poll` " +"functions available in most operating systems, :c:func:`devpoll` available " +"on Solaris and derivatives, :c:func:`epoll` available on Linux 2.5+ and " +":c:func:`kqueue` available on most BSD. Note that on Windows, it only works " +"for sockets; on other operating systems, it also works for other file types " +"(in particular, on Unix, it works on pipes). It cannot be used on regular " +"files to determine whether a file has grown since it was last read." +msgstr "" +"该模块提供了对 :c:func:`select` 和 :c:func:`poll` 函数的访问,这些函数在大多数操作系统中是可用的。在 Solaris " +"及其衍生版本上可用 :c:func:`devpoll`,在 Linux 2.5+ 上可用 :c:func:`epoll`,在大多数 BSD 上可用 " +":c:func:`kqueue`。注意,在 Windows 上,本模块仅适用于套接字;在其他操作系统上,本模块也适用于其他文件类型(特别地,在 Unix" +" 上也适用于管道)。本模块不能用于常规文件,不能检测出(自上次读取文件后)文件是否有新数据写入。" + +#: ../../library/select.rst:20 +msgid "" +"The :mod:`selectors` module allows high-level and efficient I/O " +"multiplexing, built upon the :mod:`select` module primitives. Users are " +"encouraged to use the :mod:`selectors` module instead, unless they want " +"precise control over the OS-level primitives used." +msgstr "" +":mod:`selectors` 模块是在 :mod:`select` 模块原型的基础上进行高级且高效的 I/O 复用。推荐用户改用 " +":mod:`selectors` 模块,除非用户希望对 OS 级的函数原型进行精确控制。" + +#: ../../library/select.rst:26 +msgid "The module defines the following:" +msgstr "该模块定义以下内容:" + +#: ../../library/select.rst:31 +msgid "A deprecated alias of :exc:`OSError`." +msgstr "一个被弃用的 :exc:`OSError` 的别名。" + +#: ../../library/select.rst:33 +msgid "Following :pep:`3151`, this class was made an alias of :exc:`OSError`." +msgstr "根据 :pep:`3151`,这个类是 :exc:`OSError` 的别名。" + +#: ../../library/select.rst:39 +msgid "" +"(Only supported on Solaris and derivatives.) Returns a ``/dev/poll`` " +"polling object; see section :ref:`devpoll-objects` below for the methods " +"supported by devpoll objects." +msgstr "" +"(仅支持 Solaris 及其衍生版本)返回一个 ``/dev/poll`` 轮询对象,请参阅下方 :ref:`devpoll-objects` 获取 " +"devpoll 对象所支持的方法。" + +#: ../../library/select.rst:43 +msgid "" +":c:func:`devpoll` objects are linked to the number of file descriptors " +"allowed at the time of instantiation. If your program reduces this value, " +":c:func:`devpoll` will fail. If your program increases this value, " +":c:func:`devpoll` may return an incomplete list of active file descriptors." +msgstr "" +":c:func:`devpoll` 对象与实例化时允许的文件描述符数量有关,如果在程序中降低了此数值,:c:func:`devpoll` " +"调用将失败。如果程序提高了此数值,:c:func:`devpoll` 可能会返回一个不完整的活动文件描述符列表。" + +#: ../../library/select.rst:49 ../../library/select.rst:78 +#: ../../library/select.rst:105 +msgid "The new file descriptor is :ref:`non-inheritable `." +msgstr "新的文件描述符是 :ref:`不可继承的 `。" + +#: ../../library/select.rst:53 ../../library/select.rst:107 +msgid "The new file descriptor is now non-inheritable." +msgstr "新的文件描述符现在是不可继承的。" + +#: ../../library/select.rst:58 +msgid "" +"(Only supported on Linux 2.5.44 and newer.) Return an edge polling object, " +"which can be used as Edge or Level Triggered interface for I/O events." +msgstr "(仅支持 Linux 2.5.44 或更高版本)返回一个 edge poll 对象,该对象可作为 I/O 事件的边缘触发或水平触发接口。" + +#: ../../library/select.rst:62 +msgid "" +"*sizehint* informs epoll about the expected number of events to be " +"registered. It must be positive, or `-1` to use the default. It is only " +"used on older systems where :c:func:`epoll_create1` is not available; " +"otherwise it has no effect (though its value is still checked)." +msgstr "" +"*sizehint* 指示 epoll 预计需要注册的事件数。它必须为正数,或为 `-1` 以使用默认值。它仅在 " +":c:func:`epoll_create1` 不可用的旧系统上会被用到,其他情况下它没有任何作用(尽管仍会检查其值)。" + +#: ../../library/select.rst:67 +msgid "" +"*flags* is deprecated and completely ignored. However, when supplied, its " +"value must be ``0`` or ``select.EPOLL_CLOEXEC``, otherwise ``OSError`` is " +"raised." +msgstr "" +"*flags* 已经弃用且完全被忽略。但是,如果提供该值,则它必须是 ``0`` 或 ``select.EPOLL_CLOEXEC``,否则会抛出 " +"``OSError`` 异常。" + +#: ../../library/select.rst:71 +msgid "" +"See the :ref:`epoll-objects` section below for the methods supported by " +"epolling objects." +msgstr "请参阅下方 :ref:`epoll-objects` 获取 epoll 对象所支持的方法。" + +#: ../../library/select.rst:74 +msgid "" +"``epoll`` objects support the context management protocol: when used in a " +":keyword:`with` statement, the new file descriptor is automatically closed " +"at the end of the block." +msgstr "" +"``epoll`` 对象支持上下文管理器:当在 :keyword:`with` 语句中使用时,新建的文件描述符会在运行至语句块结束时自动关闭。" + +#: ../../library/select.rst:80 +msgid "Added the *flags* parameter." +msgstr "增加了 *flags* 参数。" + +#: ../../library/select.rst:83 +msgid "" +"Support for the :keyword:`with` statement was added. The new file descriptor" +" is now non-inheritable." +msgstr "增加了对 :keyword:`with` 语句的支持。新的文件描述符现在是不可继承的。" + +#: ../../library/select.rst:87 +msgid "" +"The *flags* parameter. ``select.EPOLL_CLOEXEC`` is used by default now. Use" +" :func:`os.set_inheritable` to make the file descriptor inheritable." +msgstr "" +"*flags* 参数。现在默认采用 ``select.EPOLL_CLOEXEC`` 标志。使用 :func:`os.set_inheritable` " +"来让文件描述符可继承。" + +#: ../../library/select.rst:94 +msgid "" +"(Not supported by all operating systems.) Returns a polling object, which " +"supports registering and unregistering file descriptors, and then polling " +"them for I/O events; see section :ref:`poll-objects` below for the methods " +"supported by polling objects." +msgstr "" +"(部分操作系统不支持)返回一个 poll 对象,该对象支持注册和注销文件描述符,支持对描述符进行轮询以获取 I/O 事件。请参阅下方 " +":ref:`poll-objects` 获取 poll 对象所支持的方法。" + +#: ../../library/select.rst:102 +msgid "" +"(Only supported on BSD.) Returns a kernel queue object; see section " +":ref:`kqueue-objects` below for the methods supported by kqueue objects." +msgstr "(仅支持 BSD)返回一个内核队列对象,请参阅下方 :ref:`kqueue-objects` 获取 kqueue 对象所支持的方法。" + +#: ../../library/select.rst:113 +msgid "" +"(Only supported on BSD.) Returns a kernel event object; see section " +":ref:`kevent-objects` below for the methods supported by kevent objects." +msgstr "(仅支持 BSD)返回一个内核事件对象,请参阅下方 :ref:`kevent-objects` 获取 kevent 对象所支持的方法。" + +#: ../../library/select.rst:119 +msgid "" +"This is a straightforward interface to the Unix :c:func:`select` system " +"call. The first three arguments are iterables of 'waitable objects': either " +"integers representing file descriptors or objects with a parameterless " +"method named :meth:`~io.IOBase.fileno` returning such an integer:" +msgstr "" +"这是一个明白直观的 Unix :c:func:`select` 系统调用接口。 " +"前三个参数是由‘可等待对象’组成的序列:可以是代表文件描述符的整数,或是带有名为 :meth:`~io.IOBase.fileno` " +"的返回这样的整数的无形参方法的对象:" + +#: ../../library/select.rst:124 +msgid "*rlist*: wait until ready for reading" +msgstr "*rlist*:等待,直到可以开始读取" + +#: ../../library/select.rst:125 +msgid "*wlist*: wait until ready for writing" +msgstr "*wlist*:等待,直到可以开始写入" + +#: ../../library/select.rst:126 +msgid "" +"*xlist*: wait for an \"exceptional condition\" (see the manual page for what" +" your system considers such a condition)" +msgstr "*xlist*:等待“异常情况”(请参阅当前系统的手册,以获取哪些情况称为异常情况)" + +#: ../../library/select.rst:129 +msgid "" +"Empty iterables are allowed, but acceptance of three empty iterables is " +"platform-dependent. (It is known to work on Unix but not on Windows.) The " +"optional *timeout* argument specifies a time-out as a floating point number " +"in seconds. When the *timeout* argument is omitted the function blocks " +"until at least one file descriptor is ready. A time-out value of zero " +"specifies a poll and never blocks." +msgstr "" +"允许空的可迭代对象,但是否接受三个空的可迭代对象则取决于具体平台。 (已知在 Unix 上可行但在 Windows 上不可行。) 可选的 " +"*timeout* 参数以一个浮点数表示超时秒数。 当省略 *timeout* 参数时该函数将阻塞直到至少有一个文件描述符准备就绪。 " +"超时值为零表示执行轮询且永不阻塞。" + +#: ../../library/select.rst:136 +msgid "" +"The return value is a triple of lists of objects that are ready: subsets of " +"the first three arguments. When the time-out is reached without a file " +"descriptor becoming ready, three empty lists are returned." +msgstr "返回值是三个列表,包含已就绪对象,返回的三个列表是前三个参数的子集。当超时时间已到且没有文件描述符就绪时,返回三个空列表。" + +#: ../../library/select.rst:144 +msgid "" +"Among the acceptable object types in the iterables are Python :term:`file " +"objects ` (e.g. ``sys.stdin``, or objects returned by " +":func:`open` or :func:`os.popen`), socket objects returned by " +":func:`socket.socket`. You may also define a :dfn:`wrapper` class yourself," +" as long as it has an appropriate :meth:`~io.IOBase.fileno` method (that " +"really returns a file descriptor, not just a random integer)." +msgstr "" +"可迭代对象中可接受的对象类型有 Python :term:`文件对象 ` (例如 ``sys.stdin`` 以及 " +":func:`open` 或 :func:`os.popen` 所返回的对象),由 :func:`socket.socket` 返回的套接字对象等。 " +"你也可以自定义一个 :dfn:`wrapper` 类,只要它具有适当的 :meth:`~io.IOBase.fileno` " +"方法(该方法要确实返回一个文件描述符,而不能只是一个随机整数)。" + +#: ../../library/select.rst:155 +msgid "" +"File objects on Windows are not acceptable, but sockets are. On Windows, " +"the underlying :c:func:`select` function is provided by the WinSock library," +" and does not handle file descriptors that don't originate from WinSock." +msgstr "" +"Windows 上不接受文件对象,但接受套接字。在 Windows 上,底层的 :c:func:`select` 函数由 WinSock " +"库提供,且不处理不是源自 WinSock 的文件描述符。" + +#: ../../library/select.rst:160 ../../library/select.rst:266 +#: ../../library/select.rst:366 ../../library/select.rst:454 +#: ../../library/select.rst:495 +msgid "" +"The function is now retried with a recomputed timeout when interrupted by a " +"signal, except if the signal handler raises an exception (see :pep:`475` for" +" the rationale), instead of raising :exc:`InterruptedError`." +msgstr "" +"现在,当本函数被信号中断时,重试超时将从头开始计时,不会抛出 :exc:`InterruptedError` " +"异常。除非信号处理程序抛出异常(相关原理请参阅 :pep:`475`)。" + +#: ../../library/select.rst:169 +msgid "" +"The minimum number of bytes which can be written without blocking to a pipe " +"when the pipe has been reported as ready for writing by " +":func:`~select.select`, :func:`poll` or another interface in this module. " +"This doesn't apply to other kind of file-like objects such as sockets." +msgstr "" +"当一个管道已经被 :func:`~select.select`、:func:`poll` " +"或本模块中的某个接口报告为可写入时,可以在不阻塞该管道的情况下写入的最小字节数。它不适用于套接字等其他类型的文件类对象。" + +#: ../../library/select.rst:174 +msgid "This value is guaranteed by POSIX to be at least 512." +msgstr "POSIX 上须保证该值不小于 512。" + +#: ../../library/select.rst:177 +msgid ":ref:`Availability `: Unix" +msgstr ":ref:`可用性 `: Unix" + +#: ../../library/select.rst:184 +msgid "``/dev/poll`` Polling Objects" +msgstr "``/dev/poll`` 轮询对象" + +#: ../../library/select.rst:186 +msgid "" +"Solaris and derivatives have ``/dev/poll``. While :c:func:`select` is " +"O(highest file descriptor) and :c:func:`poll` is O(number of file " +"descriptors), ``/dev/poll`` is O(active file descriptors)." +msgstr "" +"Solaris 及其衍生版本具备 ``/dev/poll``。:c:func:`select` 复杂度为 " +"O(最高文件描述符),:c:func:`poll` 为 O(文件描述符数量),而 ``/dev/poll`` 为 O(活动的文件描述符)。" + +#: ../../library/select.rst:190 +msgid "" +"``/dev/poll`` behaviour is very close to the standard :c:func:`poll` object." +msgstr "``/dev/poll`` 的行为与标准 :c:func:`poll` 对象十分类似。" + +#: ../../library/select.rst:196 +msgid "Close the file descriptor of the polling object." +msgstr "关闭轮询对象的文件描述符。" + +#: ../../library/select.rst:203 +msgid "``True`` if the polling object is closed." +msgstr "如果轮询对象已关闭,则返回 ``True``。" + +#: ../../library/select.rst:210 +msgid "Return the file descriptor number of the polling object." +msgstr "返回轮询对象的文件描述符对应的数字。" + +#: ../../library/select.rst:217 ../../library/select.rst:389 +msgid "" +"Register a file descriptor with the polling object. Future calls to the " +":meth:`poll` method will then check whether the file descriptor has any " +"pending I/O events. *fd* can be either an integer, or an object with a " +":meth:`~io.IOBase.fileno` method that returns an integer. File objects " +"implement :meth:`!fileno`, so they can also be used as the argument." +msgstr "" +"在轮询对象中注册文件描述符。这样,将来调用 :meth:`poll` 方法时将检查文件描述符是否有未处理的 I/O 事件。*fd* " +"可以是整数,也可以是带有 :meth:`~io.IOBase.fileno` 方法的对象(该方法返回一个整数)。文件对象已经实现了 " +":meth:`!fileno`,因此它们也可以用作参数。" + +#: ../../library/select.rst:223 +msgid "" +"*eventmask* is an optional bitmask describing the type of events you want to" +" check for. The constants are the same that with :c:func:`poll` object. The " +"default value is a combination of the constants :const:`POLLIN`, " +":const:`POLLPRI`, and :const:`POLLOUT`." +msgstr "" +"*eventmask* 是可选的位掩码,用于指定要检查的事件类型。这些常量与 :c:func:`poll` 对象所用的相同。本参数的默认值是常量 " +":const:`POLLIN`、:const:`POLLPRI` 和 :const:`POLLOUT` 的组合。" + +#: ../../library/select.rst:230 +msgid "" +"Registering a file descriptor that's already registered is not an error, but" +" the result is undefined. The appropriate action is to unregister or modify " +"it first. This is an important difference compared with :c:func:`poll`." +msgstr "" +"注册已注册过的文件描述符不会报错,但是结果是不确定的。正确的操作是先注销或直接修改它。与 :c:func:`poll` 相比,这是一个重要的区别。" + +#: ../../library/select.rst:238 +msgid "" +"This method does an :meth:`unregister` followed by a :meth:`register`. It is" +" (a bit) more efficient that doing the same explicitly." +msgstr "此方法先执行 :meth:`unregister` 后执行 :meth:`register`。直接执行此操作效率(稍微)高一些。" + +#: ../../library/select.rst:245 ../../library/select.rst:433 +msgid "" +"Remove a file descriptor being tracked by a polling object. Just like the " +":meth:`register` method, *fd* can be an integer or an object with a " +":meth:`~io.IOBase.fileno` method that returns an integer." +msgstr "" +"删除轮询对象正在跟踪的某个文件描述符。与 :meth:`register` 方法类似,*fd* 可以是整数,也可以是带有 " +":meth:`~io.IOBase.fileno` 方法的对象(该方法返回一个整数)。" + +#: ../../library/select.rst:249 +msgid "" +"Attempting to remove a file descriptor that was never registered is safely " +"ignored." +msgstr "尝试删除从未注册过的文件描述符将被安全地忽略。" + +#: ../../library/select.rst:255 +msgid "" +"Polls the set of registered file descriptors, and returns a possibly-empty " +"list containing ``(fd, event)`` 2-tuples for the descriptors that have " +"events or errors to report. *fd* is the file descriptor, and *event* is a " +"bitmask with bits set for the reported events for that descriptor --- " +":const:`POLLIN` for waiting input, :const:`POLLOUT` to indicate that the " +"descriptor can be written to, and so forth. An empty list indicates that the" +" call timed out and no file descriptors had any events to report. If " +"*timeout* is given, it specifies the length of time in milliseconds which " +"the system will wait for events before returning. If *timeout* is omitted, " +"-1, or :const:`None`, the call will block until there is an event for this " +"poll object." +msgstr "" +"轮询已注册的文件描述符的集合,并返回一个列表,列表可能为空,也可能有多个 ``(fd, event)`` " +"二元组,其中包含了要报告事件或错误的描述符。*fd* 是文件描述符,*event* 是一个位掩码,表示该描述符所报告的事件 --- " +":const:`POLLIN` 表示可以读取,:const:`POLLOUT` " +"表示该描述符可以写入,依此类推。空列表表示调用超时,没有任何文件描述符报告事件。如果指定了 " +"*timeout*,它将指定系统等待事件时,等待多长时间后返回(以毫秒为单位)。如果 *timeout* 为空,-1 或 " +":const:`None`,则本调用将阻塞,直到轮询对象发生事件为止。" + +#: ../../library/select.rst:276 +msgid "Edge and Level Trigger Polling (epoll) Objects" +msgstr "边缘触发和水平触发的轮询 (epoll) 对象" + +#: ../../library/select.rst:278 +msgid "https://linux.die.net/man/4/epoll" +msgstr "https://linux.die.net/man/4/epoll" + +#: ../../library/select.rst:280 +msgid "*eventmask*" +msgstr "*eventmask*" + +#: ../../library/select.rst:283 ../../library/select.rst:401 +#: ../../library/select.rst:521 ../../library/select.rst:550 +#: ../../library/select.rst:581 ../../library/select.rst:589 +#: ../../library/select.rst:609 ../../library/select.rst:632 +msgid "Constant" +msgstr "常数" + +#: ../../library/select.rst:283 ../../library/select.rst:401 +#: ../../library/select.rst:521 ../../library/select.rst:550 +#: ../../library/select.rst:581 ../../library/select.rst:589 +#: ../../library/select.rst:609 ../../library/select.rst:632 +msgid "Meaning" +msgstr "意义" + +#: ../../library/select.rst:285 +msgid ":const:`EPOLLIN`" +msgstr ":const:`EPOLLIN`" + +#: ../../library/select.rst:285 +msgid "Available for read" +msgstr "可读" + +#: ../../library/select.rst:287 +msgid ":const:`EPOLLOUT`" +msgstr ":const:`EPOLLOUT`" + +#: ../../library/select.rst:287 +msgid "Available for write" +msgstr "可写" + +#: ../../library/select.rst:289 +msgid ":const:`EPOLLPRI`" +msgstr ":const:`EPOLLPRI`" + +#: ../../library/select.rst:289 +msgid "Urgent data for read" +msgstr "紧急数据读取" + +#: ../../library/select.rst:291 +msgid ":const:`EPOLLERR`" +msgstr ":const:`EPOLLERR`" + +#: ../../library/select.rst:291 +msgid "Error condition happened on the assoc. fd" +msgstr "在关联的文件描述符上有错误情况发生" + +#: ../../library/select.rst:293 +msgid ":const:`EPOLLHUP`" +msgstr ":const:`EPOLLHUP`" + +#: ../../library/select.rst:293 +msgid "Hang up happened on the assoc. fd" +msgstr "关联的文件描述符已挂起" + +#: ../../library/select.rst:295 +msgid ":const:`EPOLLET`" +msgstr ":const:`EPOLLET`" + +#: ../../library/select.rst:295 +msgid "Set Edge Trigger behavior, the default is Level Trigger behavior" +msgstr "设置触发方式为边缘触发,默认为水平触发" + +#: ../../library/select.rst:298 +msgid ":const:`EPOLLONESHOT`" +msgstr ":const:`EPOLLONESHOT`" + +#: ../../library/select.rst:298 +msgid "" +"Set one-shot behavior. After one event is pulled out, the fd is internally " +"disabled" +msgstr "设置 one-shot 模式。触发一次事件后,该描述符会在轮询对象内部被禁用。" + +#: ../../library/select.rst:301 +msgid ":const:`EPOLLEXCLUSIVE`" +msgstr ":const:`EPOLLEXCLUSIVE`" + +#: ../../library/select.rst:301 +msgid "" +"Wake only one epoll object when the associated fd has an event. The default " +"(if this flag is not set) is to wake all epoll objects polling on a fd." +msgstr "当已关联的描述符发生事件时,仅唤醒一个 epoll 对象。默认(如果未设置此标志)是唤醒所有轮询该描述符的 epoll 对象。" + +#: ../../library/select.rst:306 +msgid ":const:`EPOLLRDHUP`" +msgstr ":const:`EPOLLRDHUP`" + +#: ../../library/select.rst:306 +msgid "" +"Stream socket peer closed connection or shut down writing half of " +"connection." +msgstr "流套接字的对侧关闭了连接或关闭了写入到一半的连接。" + +#: ../../library/select.rst:309 +msgid ":const:`EPOLLRDNORM`" +msgstr ":const:`EPOLLRDNORM`" + +#: ../../library/select.rst:309 +msgid "Equivalent to :const:`EPOLLIN`" +msgstr "等同于 :const:`EPOLLIN`" + +#: ../../library/select.rst:311 +msgid ":const:`EPOLLRDBAND`" +msgstr ":const:`EPOLLRDBAND`" + +#: ../../library/select.rst:311 +msgid "Priority data band can be read." +msgstr "可以读取优先数据带。" + +#: ../../library/select.rst:313 +msgid ":const:`EPOLLWRNORM`" +msgstr ":const:`EPOLLWRNORM`" + +#: ../../library/select.rst:313 +msgid "Equivalent to :const:`EPOLLOUT`" +msgstr "等同于 :const:`EPOLLOUT`" + +#: ../../library/select.rst:315 +msgid ":const:`EPOLLWRBAND`" +msgstr ":const:`EPOLLWRBAND`" + +#: ../../library/select.rst:315 +msgid "Priority data may be written." +msgstr "可以写入优先级数据。" + +#: ../../library/select.rst:317 +msgid ":const:`EPOLLMSG`" +msgstr ":const:`EPOLLMSG`" + +#: ../../library/select.rst:317 +msgid "Ignored." +msgstr "忽略" + +#: ../../library/select.rst:320 +msgid "" +":const:`EPOLLEXCLUSIVE` was added. It's only supported by Linux Kernel 4.5 " +"or later." +msgstr "增加了 :const:`EPOLLEXCLUSIVE`。仅支持 Linux Kernel 4.5 或更高版本。" + +#: ../../library/select.rst:326 +msgid "Close the control file descriptor of the epoll object." +msgstr "关闭用于控制 epoll 对象的文件描述符。" + +#: ../../library/select.rst:331 +msgid "``True`` if the epoll object is closed." +msgstr "如果 epoll 对象已关闭,则返回 ``True``。" + +#: ../../library/select.rst:336 ../../library/select.rst:478 +msgid "Return the file descriptor number of the control fd." +msgstr "返回文件描述符对应的数字,该描述符用于控制 epoll 对象。" + +#: ../../library/select.rst:341 +msgid "Create an epoll object from a given file descriptor." +msgstr "根据给定的文件描述符创建 epoll 对象。" + +#: ../../library/select.rst:346 +msgid "Register a fd descriptor with the epoll object." +msgstr "在 epoll 对象中注册一个文件描述符。" + +#: ../../library/select.rst:351 +msgid "Modify a registered file descriptor." +msgstr "修改一个已注册的文件描述符。" + +#: ../../library/select.rst:356 +msgid "Remove a registered file descriptor from the epoll object." +msgstr "从 epoll 对象中删除一个已注册的文件描述符。" + +#: ../../library/select.rst:358 +msgid "The method no longer ignores the :data:`~errno.EBADF` error." +msgstr "此方法不会再忽略 :data:`~errno.EBADF` 错误。" + +#: ../../library/select.rst:364 +msgid "Wait for events. timeout in seconds (float)" +msgstr "等待事件发生,timeout 是浮点数,单位为秒。" + +#: ../../library/select.rst:376 +msgid "Polling Objects" +msgstr "Poll 对象" + +#: ../../library/select.rst:378 +msgid "" +"The :c:func:`poll` system call, supported on most Unix systems, provides " +"better scalability for network servers that service many, many clients at " +"the same time. :c:func:`poll` scales better because the system call only " +"requires listing the file descriptors of interest, while :c:func:`select` " +"builds a bitmap, turns on bits for the fds of interest, and then afterward " +"the whole bitmap has to be linearly scanned again. :c:func:`select` is " +"O(highest file descriptor), while :c:func:`poll` is O(number of file " +"descriptors)." +msgstr "" +"大多数 Unix 系统支持 :c:func:`poll` " +"系统调用,为服务器提供了更好的可伸缩性,使服务器可以同时服务于大量客户端。:c:func:`poll` " +"的伸缩性更好,因为该调用内部仅列出所关注的文件描述符,而 :c:func:`select` 会构造一个 bitmap,在其中将所关注的描述符所对应的 " +"bit 打开,然后重新遍历整个 bitmap。因此 :c:func:`select` 复杂度是 O(最高文件描述符),而 :c:func:`poll` " +"是 O(文件描述符数量)。" + +#: ../../library/select.rst:395 +msgid "" +"*eventmask* is an optional bitmask describing the type of events you want to" +" check for, and can be a combination of the constants :const:`POLLIN`, " +":const:`POLLPRI`, and :const:`POLLOUT`, described in the table below. If " +"not specified, the default value used will check for all 3 types of events." +msgstr "" +"*eventmask* 是可选的位掩码,用于指定要检查的事件类型,它可以是常量 :const:`POLLIN`、:const:`POLLPRI` 和 " +":const:`POLLOUT` 的组合,如下表所述。如果未指定本参数,默认将会检查所有 3 种类型的事件。" + +#: ../../library/select.rst:403 +msgid ":const:`POLLIN`" +msgstr ":const:`POLLIN`" + +#: ../../library/select.rst:403 +msgid "There is data to read" +msgstr "有要读取的数据" + +#: ../../library/select.rst:405 +msgid ":const:`POLLPRI`" +msgstr ":const:`POLLPRI`" + +#: ../../library/select.rst:405 +msgid "There is urgent data to read" +msgstr "有紧急数据需要读取" + +#: ../../library/select.rst:407 +msgid ":const:`POLLOUT`" +msgstr ":const:`POLLOUT`" + +#: ../../library/select.rst:407 +msgid "Ready for output: writing will not block" +msgstr "准备输出:写不会阻塞" + +#: ../../library/select.rst:409 +msgid ":const:`POLLERR`" +msgstr ":const:`POLLERR`" + +#: ../../library/select.rst:409 +msgid "Error condition of some sort" +msgstr "某种错误条件" + +#: ../../library/select.rst:411 +msgid ":const:`POLLHUP`" +msgstr ":const:`POLLHUP`" + +#: ../../library/select.rst:411 +msgid "Hung up" +msgstr "挂起" + +#: ../../library/select.rst:413 +msgid ":const:`POLLRDHUP`" +msgstr ":const:`POLLRDHUP`" + +#: ../../library/select.rst:413 +msgid "" +"Stream socket peer closed connection, or shut down writing half of " +"connection" +msgstr "流套接字的对侧关闭了连接,或关闭了写入到一半的连接" + +#: ../../library/select.rst:416 +msgid ":const:`POLLNVAL`" +msgstr ":const:`POLLNVAL`" + +#: ../../library/select.rst:416 +msgid "Invalid request: descriptor not open" +msgstr "无效的请求:描述符未打开" + +#: ../../library/select.rst:419 +msgid "" +"Registering a file descriptor that's already registered is not an error, and" +" has the same effect as registering the descriptor exactly once." +msgstr "注册已注册过的文件描述符不会报错,且等同于只注册一次该描述符。" + +#: ../../library/select.rst:425 +msgid "" +"Modifies an already registered fd. This has the same effect as " +"``register(fd, eventmask)``. Attempting to modify a file descriptor that " +"was never registered causes an :exc:`OSError` exception with errno " +":const:`ENOENT` to be raised." +msgstr "" +"修改一个已注册的文件描述符,等同于 ``register(fd, eventmask)``。尝试修改未注册的文件描述符会抛出 " +":exc:`OSError` 异常,错误码为 :const:`ENOENT`。" + +#: ../../library/select.rst:437 +msgid "" +"Attempting to remove a file descriptor that was never registered causes a " +":exc:`KeyError` exception to be raised." +msgstr "尝试删除从未注册过的文件描述符会抛出 :exc:`KeyError` 异常。" + +#: ../../library/select.rst:443 +msgid "" +"Polls the set of registered file descriptors, and returns a possibly-empty " +"list containing ``(fd, event)`` 2-tuples for the descriptors that have " +"events or errors to report. *fd* is the file descriptor, and *event* is a " +"bitmask with bits set for the reported events for that descriptor --- " +":const:`POLLIN` for waiting input, :const:`POLLOUT` to indicate that the " +"descriptor can be written to, and so forth. An empty list indicates that the" +" call timed out and no file descriptors had any events to report. If " +"*timeout* is given, it specifies the length of time in milliseconds which " +"the system will wait for events before returning. If *timeout* is omitted, " +"negative, or :const:`None`, the call will block until there is an event for " +"this poll object." +msgstr "" +"轮询已注册的文件描述符的集合,并返回一个列表,列表可能为空,也可能有多个 ``(fd, event)`` " +"二元组,其中包含了要报告事件或错误的描述符。*fd* 是文件描述符,*event* 是一个位掩码,表示该描述符所报告的事件 --- " +":const:`POLLIN` 表示可以读取,:const:`POLLOUT` " +"表示该描述符可以写入,依此类推。空列表表示调用超时,没有任何文件描述符报告事件。如果指定了 " +"*timeout*,它将指定系统等待事件时,等待多长时间后返回(以毫秒为单位)。如果 *timeout* 为空、负数 或 " +":const:`None`,则本调用将阻塞,直到轮询对象发生事件为止。" + +#: ../../library/select.rst:464 +msgid "Kqueue Objects" +msgstr "Kqueue 对象" + +#: ../../library/select.rst:468 +msgid "Close the control file descriptor of the kqueue object." +msgstr "关闭用于控制 kqueue 对象的文件描述符。" + +#: ../../library/select.rst:473 +msgid "``True`` if the kqueue object is closed." +msgstr "如果 kqueue 对象已关闭,则返回 ``True``。" + +#: ../../library/select.rst:483 +msgid "Create a kqueue object from a given file descriptor." +msgstr "根据给定的文件描述符创建 kqueue 对象。" + +#: ../../library/select.rst:488 +msgid "Low level interface to kevent" +msgstr "Kevent 的低级接口" + +#: ../../library/select.rst:490 +msgid "changelist must be an iterable of kevent objects or ``None``" +msgstr "changelist 必须是一个可迭代对象,迭代出 kevent 对象,否则置为 ``None``。" + +#: ../../library/select.rst:491 +msgid "max_events must be 0 or a positive integer" +msgstr "max_events 必须是 0 或一个正整数。" + +#: ../../library/select.rst:492 +msgid "" +"timeout in seconds (floats possible); the default is ``None``, to wait " +"forever" +msgstr "timeout 单位为秒(一般为浮点数),默认为 ``None``,即永不超时。" + +#: ../../library/select.rst:505 +msgid "Kevent Objects" +msgstr "Kevent 对象" + +#: ../../library/select.rst:507 +msgid "https://www.freebsd.org/cgi/man.cgi?query=kqueue&sektion=2" +msgstr "https://www.freebsd.org/cgi/man.cgi?query=kqueue&sektion=2" + +#: ../../library/select.rst:511 +msgid "" +"Value used to identify the event. The interpretation depends on the filter " +"but it's usually the file descriptor. In the constructor ident can either be" +" an int or an object with a :meth:`~io.IOBase.fileno` method. kevent stores " +"the integer internally." +msgstr "" +"用于区分事件的标识值。其解释取决于筛选器,但该值通常是文件描述符。在构造函数中,该标识值可以是整数或带有 " +":meth:`~io.IOBase.fileno` 方法的对象。kevent 在内部存储整数。" + +#: ../../library/select.rst:518 +msgid "Name of the kernel filter." +msgstr "内核筛选器的名称。" + +#: ../../library/select.rst:523 +msgid ":const:`KQ_FILTER_READ`" +msgstr ":const:`KQ_FILTER_READ`" + +#: ../../library/select.rst:523 +msgid "" +"Takes a descriptor and returns whenever there is data available to read" +msgstr "获取描述符,并在有数据可读时返回" + +#: ../../library/select.rst:526 +msgid ":const:`KQ_FILTER_WRITE`" +msgstr ":const:`KQ_FILTER_WRITE`" + +#: ../../library/select.rst:526 +msgid "" +"Takes a descriptor and returns whenever there is data available to write" +msgstr "获取描述符,并在有数据可写时返回" + +#: ../../library/select.rst:529 +msgid ":const:`KQ_FILTER_AIO`" +msgstr ":const:`KQ_FILTER_AIO`" + +#: ../../library/select.rst:529 +msgid "AIO requests" +msgstr "AIO 请求" + +#: ../../library/select.rst:531 +msgid ":const:`KQ_FILTER_VNODE`" +msgstr ":const:`KQ_FILTER_VNODE`" + +#: ../../library/select.rst:531 +msgid "" +"Returns when one or more of the requested events watched in *fflag* occurs" +msgstr "当在 *fflag* 中监视的一个或多个请求事件发生时返回" + +#: ../../library/select.rst:534 +msgid ":const:`KQ_FILTER_PROC`" +msgstr ":const:`KQ_FILTER_PROC`" + +#: ../../library/select.rst:534 +msgid "Watch for events on a process id" +msgstr "监视进程ID上的事件" + +#: ../../library/select.rst:536 +msgid ":const:`KQ_FILTER_NETDEV`" +msgstr ":const:`KQ_FILTER_NETDEV`" + +#: ../../library/select.rst:536 +msgid "Watch for events on a network device [not available on macOS]" +msgstr "观察网络设备上的事件 [在 macOS 上不可用]" + +#: ../../library/select.rst:539 +msgid ":const:`KQ_FILTER_SIGNAL`" +msgstr ":const:`KQ_FILTER_SIGNAL`" + +#: ../../library/select.rst:539 +msgid "Returns whenever the watched signal is delivered to the process" +msgstr "每当监视的信号传递到进程时返回" + +#: ../../library/select.rst:542 +msgid ":const:`KQ_FILTER_TIMER`" +msgstr ":const:`KQ_FILTER_TIMER`" + +#: ../../library/select.rst:542 +msgid "Establishes an arbitrary timer" +msgstr "建立一个任意的计时器" + +#: ../../library/select.rst:547 +msgid "Filter action." +msgstr "筛选器操作。" + +#: ../../library/select.rst:552 +msgid ":const:`KQ_EV_ADD`" +msgstr ":const:`KQ_EV_ADD`" + +#: ../../library/select.rst:552 +msgid "Adds or modifies an event" +msgstr "添加或修改事件" + +#: ../../library/select.rst:554 +msgid ":const:`KQ_EV_DELETE`" +msgstr ":const:`KQ_EV_DELETE`" + +#: ../../library/select.rst:554 +msgid "Removes an event from the queue" +msgstr "从队列中删除事件" + +#: ../../library/select.rst:556 +msgid ":const:`KQ_EV_ENABLE`" +msgstr ":const:`KQ_EV_ENABLE`" + +#: ../../library/select.rst:556 +msgid "Permitscontrol() to returns the event" +msgstr "Permitscontrol() 返回事件" + +#: ../../library/select.rst:558 +msgid ":const:`KQ_EV_DISABLE`" +msgstr ":const:`KQ_EV_DISABLE`" + +#: ../../library/select.rst:558 +msgid "Disablesevent" +msgstr "禁用事件" + +#: ../../library/select.rst:560 +msgid ":const:`KQ_EV_ONESHOT`" +msgstr ":const:`KQ_EV_ONESHOT`" + +#: ../../library/select.rst:560 +msgid "Removes event after first occurrence" +msgstr "在第一次发生后删除事件" + +#: ../../library/select.rst:562 +msgid ":const:`KQ_EV_CLEAR`" +msgstr ":const:`KQ_EV_CLEAR`" + +#: ../../library/select.rst:562 +msgid "Reset the state after an event is retrieved" +msgstr "检索事件后重置状态" + +#: ../../library/select.rst:564 +msgid ":const:`KQ_EV_SYSFLAGS`" +msgstr ":const:`KQ_EV_SYSFLAGS`" + +#: ../../library/select.rst:564 ../../library/select.rst:566 +msgid "internal event" +msgstr "内部事件" + +#: ../../library/select.rst:566 +msgid ":const:`KQ_EV_FLAG1`" +msgstr ":const:`KQ_EV_FLAG1`" + +#: ../../library/select.rst:568 +msgid ":const:`KQ_EV_EOF`" +msgstr ":const:`KQ_EV_EOF`" + +#: ../../library/select.rst:568 +msgid "Filter specific EOF condition" +msgstr "筛选特定EOF条件" + +#: ../../library/select.rst:570 +msgid ":const:`KQ_EV_ERROR`" +msgstr ":const:`KQ_EV_ERROR`" + +#: ../../library/select.rst:570 +msgid "See return values" +msgstr "请参阅返回值" + +#: ../../library/select.rst:576 +msgid "Filter specific flags." +msgstr "筛选特定标志。" + +#: ../../library/select.rst:578 +msgid ":const:`KQ_FILTER_READ` and :const:`KQ_FILTER_WRITE` filter flags:" +msgstr ":const:`KQ_FILTER_READ` 和 :const:`KQ_FILTER_WRITE` 筛选标志:" + +#: ../../library/select.rst:583 +msgid ":const:`KQ_NOTE_LOWAT`" +msgstr ":const:`KQ_NOTE_LOWAT`" + +#: ../../library/select.rst:583 +msgid "low water mark of a socket buffer" +msgstr "套接字缓冲区的低水线" + +#: ../../library/select.rst:586 +msgid ":const:`KQ_FILTER_VNODE` filter flags:" +msgstr ":const:`KQ_FILTER_VNODE` 筛选标志:" + +#: ../../library/select.rst:591 +msgid ":const:`KQ_NOTE_DELETE`" +msgstr ":const:`KQ_NOTE_DELETE`" + +#: ../../library/select.rst:591 +msgid "*unlink()* was called" +msgstr "已调用 *unlink()* " + +#: ../../library/select.rst:593 +msgid ":const:`KQ_NOTE_WRITE`" +msgstr ":const:`KQ_NOTE_WRITE`" + +#: ../../library/select.rst:593 +msgid "a write occurred" +msgstr "发生写入" + +#: ../../library/select.rst:595 +msgid ":const:`KQ_NOTE_EXTEND`" +msgstr ":const:`KQ_NOTE_EXTEND`" + +#: ../../library/select.rst:595 +msgid "the file was extended" +msgstr "文件已扩展" + +#: ../../library/select.rst:597 +msgid ":const:`KQ_NOTE_ATTRIB`" +msgstr ":const:`KQ_NOTE_ATTRIB`" + +#: ../../library/select.rst:597 +msgid "an attribute was changed" +msgstr "属性已更改" + +#: ../../library/select.rst:599 +msgid ":const:`KQ_NOTE_LINK`" +msgstr ":const:`KQ_NOTE_LINK`" + +#: ../../library/select.rst:599 +msgid "the link count has changed" +msgstr "链接计数已更改" + +#: ../../library/select.rst:601 +msgid ":const:`KQ_NOTE_RENAME`" +msgstr ":const:`KQ_NOTE_RENAME`" + +#: ../../library/select.rst:601 +msgid "the file was renamed" +msgstr "文件已重命名" + +#: ../../library/select.rst:603 +msgid ":const:`KQ_NOTE_REVOKE`" +msgstr ":const:`KQ_NOTE_REVOKE`" + +#: ../../library/select.rst:603 +msgid "access to the file was revoked" +msgstr "对文件的访问权限已被撤销" + +#: ../../library/select.rst:606 +msgid ":const:`KQ_FILTER_PROC` filter flags:" +msgstr ":const:`KQ_FILTER_PROC` filter flags:" + +#: ../../library/select.rst:611 +msgid ":const:`KQ_NOTE_EXIT`" +msgstr ":const:`KQ_NOTE_EXIT`" + +#: ../../library/select.rst:611 +msgid "the process has exited" +msgstr "进程已退出" + +#: ../../library/select.rst:613 +msgid ":const:`KQ_NOTE_FORK`" +msgstr ":const:`KQ_NOTE_FORK`" + +#: ../../library/select.rst:613 +msgid "the process has called *fork()*" +msgstr "该进程调用了 *fork()*" + +#: ../../library/select.rst:615 +msgid ":const:`KQ_NOTE_EXEC`" +msgstr ":const:`KQ_NOTE_EXEC`" + +#: ../../library/select.rst:615 +msgid "the process has executed a new process" +msgstr "进程已执行新进程" + +#: ../../library/select.rst:617 +msgid ":const:`KQ_NOTE_PCTRLMASK`" +msgstr ":const:`KQ_NOTE_PCTRLMASK`" + +#: ../../library/select.rst:617 ../../library/select.rst:619 +msgid "internal filter flag" +msgstr "内部筛选器标志" + +#: ../../library/select.rst:619 +msgid ":const:`KQ_NOTE_PDATAMASK`" +msgstr ":const:`KQ_NOTE_PDATAMASK`" + +#: ../../library/select.rst:621 +msgid ":const:`KQ_NOTE_TRACK`" +msgstr ":const:`KQ_NOTE_TRACK`" + +#: ../../library/select.rst:621 +msgid "follow a process across *fork()*" +msgstr "跨 *fork()* 执行进程" + +#: ../../library/select.rst:623 +msgid ":const:`KQ_NOTE_CHILD`" +msgstr ":const:`KQ_NOTE_CHILD`" + +#: ../../library/select.rst:623 +msgid "returned on the child process for *NOTE_TRACK*" +msgstr "在 *NOTE_TRACK* 的子进程上返回" + +#: ../../library/select.rst:626 +msgid ":const:`KQ_NOTE_TRACKERR`" +msgstr ":const:`KQ_NOTE_TRACKERR`" + +#: ../../library/select.rst:626 +msgid "unable to attach to a child" +msgstr "无法附加到子对象" + +#: ../../library/select.rst:629 +msgid ":const:`KQ_FILTER_NETDEV` filter flags (not available on macOS):" +msgstr ":const:`KQ_FILTER_NETDEV` 过滤器旗标 (在 macOS 上不可用):" + +#: ../../library/select.rst:634 +msgid ":const:`KQ_NOTE_LINKUP`" +msgstr ":const:`KQ_NOTE_LINKUP`" + +#: ../../library/select.rst:634 +msgid "link is up" +msgstr "链接已建立" + +#: ../../library/select.rst:636 +msgid ":const:`KQ_NOTE_LINKDOWN`" +msgstr ":const:`KQ_NOTE_LINKDOWN`" + +#: ../../library/select.rst:636 +msgid "link is down" +msgstr "链接已断开" + +#: ../../library/select.rst:638 +msgid ":const:`KQ_NOTE_LINKINV`" +msgstr ":const:`KQ_NOTE_LINKINV`" + +#: ../../library/select.rst:638 +msgid "link state is invalid" +msgstr "链接状态无效" + +#: ../../library/select.rst:644 +msgid "Filter specific data." +msgstr "筛选特定数据。" + +#: ../../library/select.rst:649 +msgid "User defined value." +msgstr "用户自定义值。" diff --git a/library/selectors.po b/library/selectors.po new file mode 100644 index 000000000..7b01973b5 --- /dev/null +++ b/library/selectors.po @@ -0,0 +1,366 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) 2001-2022, Python Software Foundation +# This file is distributed under the same license as the Python package. +# FIRST AUTHOR , YEAR. +# +# Translators: +# Shengjing Zhu , 2018 +# Fred , 2018 +# Fei Yin , 2018 +# ausaki , 2019 +# ppcfish , 2019 +# Freesand Leo , 2020 +# +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: Python 3.9\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2022-11-04 14:34+0000\n" +"PO-Revision-Date: 2017-02-16 23:25+0000\n" +"Last-Translator: Freesand Leo , 2020\n" +"Language-Team: Chinese (China) (https://www.transifex.com/python-doc/teams/5390/zh_CN/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: zh_CN\n" +"Plural-Forms: nplurals=1; plural=0;\n" + +#: ../../library/selectors.rst:2 +msgid ":mod:`selectors` --- High-level I/O multiplexing" +msgstr ":mod:`selectors` --- 高级 I/O 复用库" + +#: ../../library/selectors.rst:9 +msgid "**Source code:** :source:`Lib/selectors.py`" +msgstr "**源码:** :source:`Lib/selectors.py`" + +#: ../../library/selectors.rst:14 +msgid "Introduction" +msgstr "概述" + +#: ../../library/selectors.rst:16 +msgid "" +"This module allows high-level and efficient I/O multiplexing, built upon the" +" :mod:`select` module primitives. Users are encouraged to use this module " +"instead, unless they want precise control over the OS-level primitives used." +msgstr "" +"此模块允许高层级且高效率的 I/O 复用,它建立在 :mod:`select` 模块原型的基础之上。 推荐用户改用此模块,除非他们希望对所使用的 OS " +"层级原型进行精确控制。" + +#: ../../library/selectors.rst:20 +msgid "" +"It defines a :class:`BaseSelector` abstract base class, along with several " +"concrete implementations (:class:`KqueueSelector`, " +":class:`EpollSelector`...), that can be used to wait for I/O readiness " +"notification on multiple file objects. In the following, \"file object\" " +"refers to any object with a :meth:`fileno()` method, or a raw file " +"descriptor. See :term:`file object`." +msgstr "" +"它定义了一个 :class:`BaseSelector` 抽象基类,以及多个实际的实现 (:class:`KqueueSelector`, " +":class:`EpollSelector`...),它们可被用于在多个文件对象上等待 I/O 就绪通知。 在下文中,\"文件对象\" 是指任何具有 " +":meth:`fileno()` 方法的对象,或是一个原始文件描述器。 参见 :term:`file object`。" + +#: ../../library/selectors.rst:26 +msgid "" +":class:`DefaultSelector` is an alias to the most efficient implementation " +"available on the current platform: this should be the default choice for " +"most users." +msgstr ":class:`DefaultSelector` 是一个指向当前平台上可用的最高效实现的别名:这应为大多数用户的默认选择。" + +#: ../../library/selectors.rst:31 +msgid "" +"The type of file objects supported depends on the platform: on Windows, " +"sockets are supported, but not pipes, whereas on Unix, both are supported " +"(some other types may be supported as well, such as fifos or special file " +"devices)." +msgstr "" +"受支持的文件对象类型取决于具体平台:在 Windows 上,支持套接字但不支持管道,而在 Unix 上两者均受支持(某些其他类型也可能受支持,例如 " +"fifo 或特殊文件设备等)。" + +#: ../../library/selectors.rst:38 +msgid ":mod:`select`" +msgstr ":mod:`select`" + +#: ../../library/selectors.rst:39 +msgid "Low-level I/O multiplexing module." +msgstr "低层级的 I/O 多路复用模块。" + +#: ../../library/selectors.rst:43 +msgid "Classes" +msgstr "类" + +#: ../../library/selectors.rst:45 +msgid "Classes hierarchy::" +msgstr "类的层次结构::" + +#: ../../library/selectors.rst:55 +msgid "" +"In the following, *events* is a bitwise mask indicating which I/O events " +"should be waited for on a given file object. It can be a combination of the " +"modules constants below:" +msgstr "下文中,*events* 一个位掩码,指明哪些 I/O 事件要在给定的文件对象上执行等待。 它可以是以下模块级常量的组合:" + +#: ../../library/selectors.rst:60 +msgid "Constant" +msgstr "常量" + +#: ../../library/selectors.rst:60 +msgid "Meaning" +msgstr "含意" + +#: ../../library/selectors.rst:62 +msgid ":const:`EVENT_READ`" +msgstr ":const:`EVENT_READ`" + +#: ../../library/selectors.rst:62 +msgid "Available for read" +msgstr "可读" + +#: ../../library/selectors.rst:64 +msgid ":const:`EVENT_WRITE`" +msgstr ":const:`EVENT_WRITE`" + +#: ../../library/selectors.rst:64 +msgid "Available for write" +msgstr "可写" + +#: ../../library/selectors.rst:70 +msgid "" +"A :class:`SelectorKey` is a :class:`~collections.namedtuple` used to " +"associate a file object to its underlying file descriptor, selected event " +"mask and attached data. It is returned by several :class:`BaseSelector` " +"methods." +msgstr "" +":class:`SelectorKey` 是一个 " +":class:`~collections.namedtuple`,用来将文件对象关联到其下层的文件描述器、选定事件掩码和附加数据等。 它会被某些 " +":class:`BaseSelector` 方法返回。" + +#: ../../library/selectors.rst:77 +msgid "File object registered." +msgstr "已注册的文件对象。" + +#: ../../library/selectors.rst:81 +msgid "Underlying file descriptor." +msgstr "下层的文件描述器。" + +#: ../../library/selectors.rst:85 +msgid "Events that must be waited for on this file object." +msgstr "必须在此文件对象上被等待的事件。" + +#: ../../library/selectors.rst:89 +msgid "" +"Optional opaque data associated to this file object: for example, this could" +" be used to store a per-client session ID." +msgstr "可选的关联到此文件对象的不透明数据:例如,这可被用来存储各个客户端的会话 ID。" + +#: ../../library/selectors.rst:95 +msgid "" +"A :class:`BaseSelector` is used to wait for I/O event readiness on multiple " +"file objects. It supports file stream registration, unregistration, and a " +"method to wait for I/O events on those streams, with an optional timeout. " +"It's an abstract base class, so cannot be instantiated. Use " +":class:`DefaultSelector` instead, or one of :class:`SelectSelector`, " +":class:`KqueueSelector` etc. if you want to specifically use an " +"implementation, and your platform supports it. :class:`BaseSelector` and its" +" concrete implementations support the :term:`context manager` protocol." +msgstr "" +"一个 :class:`BaseSelector`,用来在多个文件对象上等待 I/O 事件就绪。 它支持文件流注册、注销,以及在这些流上等待 I/O " +"事件的方法。 它是一个抽象基类,因此不能被实例化。 请改用 :class:`DefaultSelector`,或者 " +":class:`SelectSelector`, :class:`KqueueSelector` 等。 " +"如果你想要指明使用某个实现,并且你的平台支持它的话。 :class:`BaseSelector` 及其具体实现支持 :term:`context " +"manager` 协议。" + +#: ../../library/selectors.rst:107 +msgid "Register a file object for selection, monitoring it for I/O events." +msgstr "注册一个用于选择的文件对象,在其上监视 I/O 事件。" + +#: ../../library/selectors.rst:109 +msgid "" +"*fileobj* is the file object to monitor. It may either be an integer file " +"descriptor or an object with a ``fileno()`` method. *events* is a bitwise " +"mask of events to monitor. *data* is an opaque object." +msgstr "" +"*fileobj* 是要监视的文件对象。 它可以是整数形式的文件描述符或者具有 ``fileno()`` 方法的对象。 *events* " +"是要监视的事件的位掩码。 *data* 是一个不透明对象。" + +#: ../../library/selectors.rst:114 +msgid "" +"This returns a new :class:`SelectorKey` instance, or raises a " +":exc:`ValueError` in case of invalid event mask or file descriptor, or " +":exc:`KeyError` if the file object is already registered." +msgstr "" +"这将返回一个新的 :class:`SelectorKey` 实例,或在出现无效事件掩码或文件描述符时引发 " +":exc:`ValueError`,或在文件对象已被注册时引发 :exc:`KeyError`。" + +#: ../../library/selectors.rst:120 +msgid "" +"Unregister a file object from selection, removing it from monitoring. A file" +" object shall be unregistered prior to being closed." +msgstr "注销对一个文件对象的选择,移除对它的监视。 在文件对象被关闭之前应当先将其注销。" + +#: ../../library/selectors.rst:123 +msgid "*fileobj* must be a file object previously registered." +msgstr "*fileobj* 必须是之前已注册的文件对象。" + +#: ../../library/selectors.rst:125 +msgid "" +"This returns the associated :class:`SelectorKey` instance, or raises a " +":exc:`KeyError` if *fileobj* is not registered. It will raise " +":exc:`ValueError` if *fileobj* is invalid (e.g. it has no ``fileno()`` " +"method or its ``fileno()`` method has an invalid return value)." +msgstr "" +"这将返回已关联的 :class:`SelectorKey` 实例,或者如果 *fileobj* 未注册则会引发 :exc:`KeyError`。 It " +"will raise :exc:`ValueError` 如果 *fileobj* 无效(例如它没有 ``fileno()`` 方法或其 " +"``fileno()`` 方法返回无效值)。" + +#: ../../library/selectors.rst:132 +msgid "Change a registered file object's monitored events or attached data." +msgstr "更改已注册文件对象所监视的事件或所附带的数据。" + +#: ../../library/selectors.rst:134 +msgid "" +"This is equivalent to :meth:`BaseSelector.unregister(fileobj)` followed by " +":meth:`BaseSelector.register(fileobj, events, data)`, except that it can be " +"implemented more efficiently." +msgstr "" +"这等价于 :meth:`BaseSelector.unregister(fileobj)` 加 " +":meth:`BaseSelector.register(fileobj, events, data)`,区别在于它可以被更高效地实现。" + +#: ../../library/selectors.rst:138 +msgid "" +"This returns a new :class:`SelectorKey` instance, or raises a " +":exc:`ValueError` in case of invalid event mask or file descriptor, or " +":exc:`KeyError` if the file object is not registered." +msgstr "" +"这将返回一个新的 :class:`SelectorKey` 实例,或在出现无效事件掩码或文件描述符时引发 " +":exc:`ValueError`,或在文件对象未被注册时引发 :exc:`KeyError`。" + +#: ../../library/selectors.rst:144 +msgid "" +"Wait until some registered file objects become ready, or the timeout " +"expires." +msgstr "等待直到有已注册的文件对象就绪,或是超过时限。" + +#: ../../library/selectors.rst:147 +msgid "" +"If ``timeout > 0``, this specifies the maximum wait time, in seconds. If " +"``timeout <= 0``, the call won't block, and will report the currently ready " +"file objects. If *timeout* is ``None``, the call will block until a " +"monitored file object becomes ready." +msgstr "" +"如果 ``timeout > 0``,这指定以秒数表示的最大等待时间。 如果 ``timeout <= " +"0``,调用将不会阻塞,并将报告当前就绪的文件对象。 如果 *timeout* 为 ``None``,调用将阻塞直到某个被监视的文件对象就绪。" + +#: ../../library/selectors.rst:153 +msgid "" +"This returns a list of ``(key, events)`` tuples, one for each ready file " +"object." +msgstr "这将返回由 ``(key, events)`` 元组构成的列表,每项各表示一个就绪的文件对象。" + +#: ../../library/selectors.rst:156 +msgid "" +"*key* is the :class:`SelectorKey` instance corresponding to a ready file " +"object. *events* is a bitmask of events ready on this file object." +msgstr "*key* 是对应于就绪文件对象的 :class:`SelectorKey` 实例。 *events* 是在此文件对象上等待的事件位掩码。" + +#: ../../library/selectors.rst:161 +msgid "" +"This method can return before any file object becomes ready or the timeout " +"has elapsed if the current process receives a signal: in this case, an empty" +" list will be returned." +msgstr "如果当前进程收到一个信号,此方法可在任何文件对象就绪之前或超出时限时返回:在此情况下,将返回一个空列表。" + +#: ../../library/selectors.rst:165 +msgid "" +"The selector is now retried with a recomputed timeout when interrupted by a " +"signal if the signal handler did not raise an exception (see :pep:`475` for " +"the rationale), instead of returning an empty list of events before the " +"timeout." +msgstr "" +"现在当被某个信号中断时,如果信号处理程序没有引发异常,选择器会用重新计算的超时值进行重试(请查看 :pep:`475` " +"其理由),而不是在超时之前返回空的事件列表。" + +#: ../../library/selectors.rst:173 +msgid "Close the selector." +msgstr "关闭选择器。" + +#: ../../library/selectors.rst:175 +msgid "" +"This must be called to make sure that any underlying resource is freed. The " +"selector shall not be used once it has been closed." +msgstr "必须调用这个方法以确保下层资源会被释放。 选择器被关闭后将不可再使用。" + +#: ../../library/selectors.rst:180 +msgid "Return the key associated with a registered file object." +msgstr "返回关联到某个已注册文件对象的键。" + +#: ../../library/selectors.rst:182 +msgid "" +"This returns the :class:`SelectorKey` instance associated to this file " +"object, or raises :exc:`KeyError` if the file object is not registered." +msgstr "此方法将返回关联到文件对象的 :class:`SelectorKey` 实例,或在文件对象未注册时引发 :exc:`KeyError`。" + +#: ../../library/selectors.rst:187 +msgid "Return a mapping of file objects to selector keys." +msgstr "返回从文件对象到选择器键的映射。" + +#: ../../library/selectors.rst:189 +msgid "" +"This returns a :class:`~collections.abc.Mapping` instance mapping registered" +" file objects to their associated :class:`SelectorKey` instance." +msgstr "" +"这将返回一个将已注册文件对象映射到与其相关联的 :class:`SelectorKey` 实例的 " +":class:`~collections.abc.Mapping` 实例。" + +#: ../../library/selectors.rst:196 +msgid "" +"The default selector class, using the most efficient implementation " +"available on the current platform. This should be the default choice for " +"most users." +msgstr "默认的选择器类,使用当前平台上可用的最高效实现。 这应为大多数用户的默认选择。" + +#: ../../library/selectors.rst:203 +msgid ":func:`select.select`-based selector." +msgstr "基于 :func:`select.select` 的选择器。" + +#: ../../library/selectors.rst:208 +msgid ":func:`select.poll`-based selector." +msgstr "基于 :func:`select.poll` 的选择器。" + +#: ../../library/selectors.rst:213 +msgid ":func:`select.epoll`-based selector." +msgstr "基于 :func:`select.epoll` 的选择器。" + +#: ../../library/selectors.rst:217 +msgid "" +"This returns the file descriptor used by the underlying :func:`select.epoll`" +" object." +msgstr "此方法将返回由下层 :func:`select.epoll` 对象所使用的文件描述符。" + +#: ../../library/selectors.rst:222 +msgid ":func:`select.devpoll`-based selector." +msgstr "基于 :func:`select.devpoll` 的选择器。" + +#: ../../library/selectors.rst:226 +msgid "" +"This returns the file descriptor used by the underlying " +":func:`select.devpoll` object." +msgstr "此方法将返回由下层 :func:`select.devpoll` 对象所使用的文件描述符。" + +#: ../../library/selectors.rst:233 +msgid ":func:`select.kqueue`-based selector." +msgstr "基于 :func:`select.kqueue` 的选择器。" + +#: ../../library/selectors.rst:237 +msgid "" +"This returns the file descriptor used by the underlying " +":func:`select.kqueue` object." +msgstr "此方法将返回由下层 :func:`select.kqueue` 对象所使用的文件描述符。" + +#: ../../library/selectors.rst:242 +msgid "Examples" +msgstr "示例" + +#: ../../library/selectors.rst:244 +msgid "Here is a simple echo server implementation::" +msgstr "下面是一个简单的回显服务器实现::" diff --git a/library/shelve.po b/library/shelve.po new file mode 100644 index 000000000..e6cc2c90a --- /dev/null +++ b/library/shelve.po @@ -0,0 +1,276 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) 2001-2022, Python Software Foundation +# This file is distributed under the same license as the Python package. +# FIRST AUTHOR , YEAR. +# +# Translators: +# Menghua Xiao , 2018 +# walkinrain , 2019 +# Zombie110year , 2019 +# Freesand Leo , 2021 +# +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: Python 3.9\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2022-11-04 14:34+0000\n" +"PO-Revision-Date: 2017-02-16 23:25+0000\n" +"Last-Translator: Freesand Leo , 2021\n" +"Language-Team: Chinese (China) (https://www.transifex.com/python-doc/teams/5390/zh_CN/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: zh_CN\n" +"Plural-Forms: nplurals=1; plural=0;\n" + +#: ../../library/shelve.rst:2 +msgid ":mod:`shelve` --- Python object persistence" +msgstr ":mod:`shelve` --- Python 对象持久化" + +#: ../../library/shelve.rst:7 +msgid "**Source code:** :source:`Lib/shelve.py`" +msgstr "**源代码:** :source:`Lib/shelve.py`" + +#: ../../library/shelve.rst:13 +msgid "" +"A \"shelf\" is a persistent, dictionary-like object. The difference with " +"\"dbm\" databases is that the values (not the keys!) in a shelf can be " +"essentially arbitrary Python objects --- anything that the :mod:`pickle` " +"module can handle. This includes most class instances, recursive data types," +" and objects containing lots of shared sub-objects. The keys are ordinary " +"strings." +msgstr "" +"\"Shelf\" 是一种持久化的类似字典的对象。 与 \"dbm\" 数据库的区别在于 Shelf 中的值(不是键!)实际上可以为任意 Python " +"对象 --- 即 :mod:`pickle` 模块能够处理的任何东西。 这包括大部分类实例、递归数据类型,以及包含大量共享子对象的对象。 " +"键则为普通的字符串。" + +#: ../../library/shelve.rst:22 +msgid "" +"Open a persistent dictionary. The filename specified is the base filename " +"for the underlying database. As a side-effect, an extension may be added to" +" the filename and more than one file may be created. By default, the " +"underlying database file is opened for reading and writing. The optional " +"*flag* parameter has the same interpretation as the *flag* parameter of " +":func:`dbm.open`." +msgstr "" +"打开一个持久化字典。 filename 指定下层数据库的基准文件名。 作为附带效果,会为 filename 添加一个扩展名并且可能创建更多的文件。 " +"默认情况下,下层数据库会以读写模式打开。 可选的 *flag* 形参具有与 :func:`dbm.open` *flag* 形参相同的含义。" + +#: ../../library/shelve.rst:28 +msgid "" +"By default, version 3 pickles are used to serialize values. The version of " +"the pickle protocol can be specified with the *protocol* parameter." +msgstr "默认会使用第 3 版 pickle 协议来序列化值。 pickle 协议版本可通过 *protocol* 形参来指定。" + +#: ../../library/shelve.rst:31 +msgid "" +"Because of Python semantics, a shelf cannot know when a mutable persistent-" +"dictionary entry is modified. By default modified objects are written " +"*only* when assigned to the shelf (see :ref:`shelve-example`). If the " +"optional *writeback* parameter is set to ``True``, all entries accessed are " +"also cached in memory, and written back on :meth:`~Shelf.sync` and " +":meth:`~Shelf.close`; this can make it handier to mutate mutable entries in " +"the persistent dictionary, but, if many entries are accessed, it can consume" +" vast amounts of memory for the cache, and it can make the close operation " +"very slow since all accessed entries are written back (there is no way to " +"determine which accessed entries are mutable, nor which ones were actually " +"mutated)." +msgstr "" +"由于 Python 语义的限制,Shelf 对象无法确定一个可变的持久化字典条目在何时被修改。 默认情况下 *只有* 在被修改对象再赋值给 shelf " +"时才会写入该对象 (参见 :ref:`shelve-example`)。 如果可选的 *writeback* 形参设为 " +"``True``,则所有被访问的条目都将在内存中被缓存,并会在 :meth:`~Shelf.sync` 和 :meth:`~Shelf.close` " +"时被写入;这可以使得对持久化字典中可变条目的修改更方便,但是如果访问的条目很多,这会消耗大量内存作为缓存,并会使得关闭操作变得非常缓慢,因为所有被访问的条目都需要写回到字典(无法确定被访问的条目中哪个是可变的,也无法确定哪个被实际修改了)。" + +#: ../../library/shelve.rst:45 +msgid "" +"Do not rely on the shelf being closed automatically; always call " +":meth:`~Shelf.close` explicitly when you don't need it any more, or use " +":func:`shelve.open` as a context manager::" +msgstr "" +"请不要依赖于 Shelf 的自动关闭功能;当你不再需要时应当总是显式地调用 :meth:`~Shelf.close`,或者使用 " +":func:`shelve.open` 作为上下文管理器::" + +#: ../../library/shelve.rst:56 +msgid "" +"Because the :mod:`shelve` module is backed by :mod:`pickle`, it is insecure " +"to load a shelf from an untrusted source. Like with pickle, loading a shelf" +" can execute arbitrary code." +msgstr "" +"由于 :mod:`shelve` 模块需要 :mod:`pickle` 的支持,因此从不可靠的来源载入 shelf 是不安全的。 与 pickle " +"一样,载入 Shelf 时可以执行任意代码。" + +#: ../../library/shelve.rst:60 +msgid "" +"Shelf objects support most of methods and operations supported by " +"dictionaries (except copying, constructors and operators ``|`` and ``|=``)." +" This eases the transition from dictionary based scripts to those requiring" +" persistent storage." +msgstr "" +"Shelf 对象支持字典所支持的大多数方法和运算(除了拷贝、构造器以及 ``|`` 和 ``|=`` 运算符)。 " +"这样就能方便地将基于字典的脚本转换为要求持久化存储的脚本。" + +#: ../../library/shelve.rst:64 +msgid "Two additional methods are supported:" +msgstr "额外支持的两个方法:" + +#: ../../library/shelve.rst:68 +msgid "" +"Write back all entries in the cache if the shelf was opened with *writeback*" +" set to :const:`True`. Also empty the cache and synchronize the persistent " +"dictionary on disk, if feasible. This is called automatically when the " +"shelf is closed with :meth:`close`." +msgstr "" +"如果 Shelf 打开时将 *writeback* 设为 :const:`True` 则写回缓存中的所有条目。 " +"如果可行还会清空缓存并将持久化字典同步到磁盘。 此方法会在使用 :meth:`close` 关闭 Shelf 时自动被调用。" + +#: ../../library/shelve.rst:75 +msgid "" +"Synchronize and close the persistent *dict* object. Operations on a closed " +"shelf will fail with a :exc:`ValueError`." +msgstr "同步并关闭持久化 *dict* 对象。 对已关闭 Shelf 的操作将失败并引发 :exc:`ValueError`。" + +#: ../../library/shelve.rst:81 +msgid "" +"`Persistent dictionary recipe " +"`_ with widely supported " +"storage formats and having the speed of native dictionaries." +msgstr "" +"`持久化字典方案 " +"`_,使用了广泛支持的存储格式并具有原生字典的速度。" + +#: ../../library/shelve.rst:87 +msgid "Restrictions" +msgstr "限制" + +#: ../../library/shelve.rst:93 +msgid "" +"The choice of which database package will be used (such as :mod:`dbm.ndbm` " +"or :mod:`dbm.gnu`) depends on which interface is available. Therefore it is" +" not safe to open the database directly using :mod:`dbm`. The database is " +"also (unfortunately) subject to the limitations of :mod:`dbm`, if it is used" +" --- this means that (the pickled representation of) the objects stored in " +"the database should be fairly small, and in rare cases key collisions may " +"cause the database to refuse updates." +msgstr "" +"可选择使用哪种数据库包 (例如 :mod:`dbm.ndbm` 或 :mod:`dbm.gnu`) 取决于支持哪种接口。 因此使用 :mod:`dbm`" +" 直接打开数据库是不安全的。 如果使用了 :mod:`dbm`,数据库同样会(不幸地)受限于它 --- " +"这意味着存储在数据库中的(封存形式的)对象尺寸应当较小,并且在少数情况下键冲突有可能导致数据库拒绝更新。" + +#: ../../library/shelve.rst:101 +msgid "" +"The :mod:`shelve` module does not support *concurrent* read/write access to " +"shelved objects. (Multiple simultaneous read accesses are safe.) When a " +"program has a shelf open for writing, no other program should have it open " +"for reading or writing. Unix file locking can be used to solve this, but " +"this differs across Unix versions and requires knowledge about the database " +"implementation used." +msgstr "" +":mod:`shelve` 模块不支持对 Shelf 对象的 *并发* 读/写访问。 (多个同时读取访问则是安全的。) 当一个程序打开一个 shelve" +" 对象来写入时,不应再有其他程序同时打开它来读取或写入。 Unix 文件锁定可被用来解决此问题,但这在不同 Unix " +"版本上会存在差异,并且需要有关所用数据库实现的细节知识。" + +#: ../../library/shelve.rst:111 +msgid "" +"A subclass of :class:`collections.abc.MutableMapping` which stores pickled " +"values in the *dict* object." +msgstr ":class:`collections.abc.MutableMapping` 的一个子类,它会将封存的值保存在 *dict* 对象中。" + +#: ../../library/shelve.rst:114 +msgid "" +"By default, version 3 pickles are used to serialize values. The version of " +"the pickle protocol can be specified with the *protocol* parameter. See the " +":mod:`pickle` documentation for a discussion of the pickle protocols." +msgstr "" +"默认会使用第 3 版 pickle 协议来序列化值。 pickle 协议版本可通过 *protocol* 形参来指定。 请参阅 " +":mod:`pickle` 文档来查看 pickle 协议的相关讨论。" + +#: ../../library/shelve.rst:118 +msgid "" +"If the *writeback* parameter is ``True``, the object will hold a cache of " +"all entries accessed and write them back to the *dict* at sync and close " +"times. This allows natural operations on mutable entries, but can consume " +"much more memory and make sync and close take a long time." +msgstr "" +"如果 *writeback* 形参为 ``True``,对象将为所有访问过的条目保留缓存并在同步和关闭时将它们写回到 *dict*。 " +"这允许对可变的条目执行自然操作,但是会消耗更多内存并让同步和关闭花费更长时间。" + +#: ../../library/shelve.rst:123 +msgid "" +"The *keyencoding* parameter is the encoding used to encode keys before they " +"are used with the underlying dict." +msgstr "*keyencoding* 形参是在下层字典被使用之前用于编码键的编码格式。" + +#: ../../library/shelve.rst:126 +msgid "" +"A :class:`Shelf` object can also be used as a context manager, in which case" +" it will be automatically closed when the :keyword:`with` block ends." +msgstr ":class:`Shelf` 对象还可以被用作上下文管理器,在这种情况下它将在 :keyword:`with` 语句块结束时自动被关闭。" + +#: ../../library/shelve.rst:129 +msgid "" +"Added the *keyencoding* parameter; previously, keys were always encoded in " +"UTF-8." +msgstr "添加了 *keyencoding* 形参;之前,键总是使用 UTF-8 编码。" + +#: ../../library/shelve.rst:133 +msgid "Added context manager support." +msgstr "添加了上下文管理器支持" + +#: ../../library/shelve.rst:139 +msgid "" +"A subclass of :class:`Shelf` which exposes :meth:`first`, :meth:`!next`, " +":meth:`previous`, :meth:`last` and :meth:`set_location` which are available " +"in the third-party :mod:`bsddb` module from `pybsddb " +"`_ but not in other database " +"modules. The *dict* object passed to the constructor must support those " +"methods. This is generally accomplished by calling one of " +":func:`bsddb.hashopen`, :func:`bsddb.btopen` or :func:`bsddb.rnopen`. The " +"optional *protocol*, *writeback*, and *keyencoding* parameters have the same" +" interpretation as for the :class:`Shelf` class." +msgstr "" +":class:`Shelf` 的一个子类,将 :meth:`first`, :meth:`!next`, :meth:`previous`, " +":meth:`last` 和 :meth:`set_location` 对外公开,在来自 `pybsddb " +"`_ 的第三方 :mod:`bsddb` " +"模块中可用,但在其他数据库模块中不可用。 传给构造器的 *dict* 对象必须支持这些方法。 这通常是通过调用 " +":func:`bsddb.hashopen`, :func:`bsddb.btopen` 或 :func:`bsddb.rnopen` 之一来完成的。" +" 可选的 *protocol*, *writeback* 和 *keyencoding* 形参具有与 :class:`Shelf` 类相同的含义。" + +#: ../../library/shelve.rst:152 +msgid "" +"A subclass of :class:`Shelf` which accepts a *filename* instead of a dict-" +"like object. The underlying file will be opened using :func:`dbm.open`. By" +" default, the file will be created and opened for both read and write. The " +"optional *flag* parameter has the same interpretation as for the " +":func:`.open` function. The optional *protocol* and *writeback* parameters " +"have the same interpretation as for the :class:`Shelf` class." +msgstr "" +":class:`Shelf` 的一个子类,它接受一个 *filename* 而非字典类对象。 下层文件将使用 :func:`dbm.open` 来打开。" +" 默认情况下,文件将以读写模式打开。 可选的 *flag* 形参具有与 :func:`.open` 函数相同的含义。 可选的 *protocol* 和 " +"*writeback* 形参具有与 :class:`Shelf` 类相同的含义。" + +#: ../../library/shelve.rst:163 +msgid "Example" +msgstr "示例" + +#: ../../library/shelve.rst:165 +msgid "" +"To summarize the interface (``key`` is a string, ``data`` is an arbitrary " +"object)::" +msgstr "对接口的总结如下 (``key`` 为字符串,``data`` 为任意对象)::" + +#: ../../library/shelve.rst:202 +msgid "Module :mod:`dbm`" +msgstr "模块 :mod:`dbm`" + +#: ../../library/shelve.rst:202 +msgid "Generic interface to ``dbm``-style databases." +msgstr "``dbm`` 风格数据库的泛型接口。" + +#: ../../library/shelve.rst:204 +msgid "Module :mod:`pickle`" +msgstr "模块 :mod:`pickle`" + +#: ../../library/shelve.rst:205 +msgid "Object serialization used by :mod:`shelve`." +msgstr ":mod:`shelve` 所使用的对象序列化。" diff --git a/library/shlex.po b/library/shlex.po new file mode 100644 index 000000000..663ef5312 --- /dev/null +++ b/library/shlex.po @@ -0,0 +1,576 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) 2001-2022, Python Software Foundation +# This file is distributed under the same license as the Python package. +# FIRST AUTHOR , YEAR. +# +# Translators: +# Freesand Leo , 2021 +# Dai Xu , 2021 +# +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: Python 3.9\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2022-11-04 14:34+0000\n" +"PO-Revision-Date: 2017-02-16 23:25+0000\n" +"Last-Translator: Dai Xu , 2021\n" +"Language-Team: Chinese (China) (https://www.transifex.com/python-doc/teams/5390/zh_CN/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: zh_CN\n" +"Plural-Forms: nplurals=1; plural=0;\n" + +#: ../../library/shlex.rst:2 +msgid ":mod:`shlex` --- Simple lexical analysis" +msgstr ":mod:`shlex` —— 简单的词义分析" + +#: ../../library/shlex.rst:12 +msgid "**Source code:** :source:`Lib/shlex.py`" +msgstr "**源代码:** :source:`Lib/shlex.py`" + +#: ../../library/shlex.rst:16 +msgid "" +"The :class:`~shlex.shlex` class makes it easy to write lexical analyzers for" +" simple syntaxes resembling that of the Unix shell. This will often be " +"useful for writing minilanguages, (for example, in run control files for " +"Python applications) or for parsing quoted strings." +msgstr "" +":class:`~shlex.shlex` 类可用于编写类似 Unix shell 的简单词义分析程序。通常可用于编写“迷你语言”(如 Python " +"应用程序的运行控制文件)或解析带引号的字符串。" + +#: ../../library/shlex.rst:21 +msgid "The :mod:`shlex` module defines the following functions:" +msgstr ":mod:`shlex` 模块中定义了以下函数:" + +#: ../../library/shlex.rst:26 +msgid "" +"Split the string *s* using shell-like syntax. If *comments* is " +":const:`False` (the default), the parsing of comments in the given string " +"will be disabled (setting the :attr:`~shlex.commenters` attribute of the " +":class:`~shlex.shlex` instance to the empty string). This function operates" +" in POSIX mode by default, but uses non-POSIX mode if the *posix* argument " +"is false." +msgstr "" +"用类似 shell 的语法拆分字符串 *s*。如果 *comments* 为 :const:`False` (默认值),则不会解析给定字符串中的注释 " +"(:attr:`~shlex.commenters` 属性的 :class:`~shlex.shlex` 实例设为空字符串)。 本函数默认工作于 " +"POSIX 模式下,但若 *posix* 参数为 False,则采用非 POSIX 模式。" + +#: ../../library/shlex.rst:35 +msgid "" +"Since the :func:`split` function instantiates a :class:`~shlex.shlex` " +"instance, passing ``None`` for *s* will read the string to split from " +"standard input." +msgstr "" +" :func:`split` 函数会生成一个 :class:`~shlex.shlex` 实例,如果给 *s* 传入 ``None`` " +",则会从标准输入读取要拆分的字符串。" + +#: ../../library/shlex.rst:39 +msgid "" +"Passing ``None`` for *s* will raise an exception in future Python versions." +msgstr "在以后的 Python 版本中,给 *s* 传入 ``None`` 将触发异常。" + +#: ../../library/shlex.rst:45 +msgid "" +"Concatenate the tokens of the list *split_command* and return a string. This" +" function is the inverse of :func:`split`." +msgstr "将列表 *split_command* 中的单词串联起来,返回一个字符串。本函数是 :func:`split` 的逆运算。" + +#: ../../library/shlex.rst:52 +msgid "" +"The returned value is shell-escaped to protect against injection " +"vulnerabilities (see :func:`quote`)." +msgstr "为防止注入漏洞,返回值是经过 shell 转义的(参见 :func:`quote` )。" + +#: ../../library/shlex.rst:60 +msgid "" +"Return a shell-escaped version of the string *s*. The returned value is a " +"string that can safely be used as one token in a shell command line, for " +"cases where you cannot use a list." +msgstr "返回经过 shell 转义的字符串 *s* 。返回值为字符串,可以安全地作为 shell 命令行中的单词使用,可用于不能使用列表的场合。" + +#: ../../library/shlex.rst:64 +msgid "This idiom would be unsafe:" +msgstr "以下用法是不安全的:" + +#: ../../library/shlex.rst:71 +msgid ":func:`quote` lets you plug the security hole:" +msgstr "用 :func:`quote` 可以堵住这种安全漏洞:" + +#: ../../library/shlex.rst:81 +msgid "The quoting is compatible with UNIX shells and with :func:`split`:" +msgstr "这种包装方式兼容于 UNIX shell 和 :func:`split` 。" + +#: ../../library/shlex.rst:93 +msgid "The :mod:`shlex` module defines the following class:" +msgstr ":mod:`shlex` 模块中定义了以下类:" + +#: ../../library/shlex.rst:98 +msgid "" +"A :class:`~shlex.shlex` instance or subclass instance is a lexical analyzer " +"object. The initialization argument, if present, specifies where to read " +"characters from. It must be a file-/stream-like object with " +":meth:`~io.TextIOBase.read` and :meth:`~io.TextIOBase.readline` methods, or " +"a string. If no argument is given, input will be taken from ``sys.stdin``. " +"The second optional argument is a filename string, which sets the initial " +"value of the :attr:`~shlex.infile` attribute. If the *instream* argument is" +" omitted or equal to ``sys.stdin``, this second argument defaults to " +"\"stdin\". The *posix* argument defines the operational mode: when *posix* " +"is not true (default), the :class:`~shlex.shlex` instance will operate in " +"compatibility mode. When operating in POSIX mode, :class:`~shlex.shlex` " +"will try to be as close as possible to the POSIX shell parsing rules. The " +"*punctuation_chars* argument provides a way to make the behaviour even " +"closer to how real shells parse. This can take a number of values: the " +"default value, ``False``, preserves the behaviour seen under Python 3.5 and " +"earlier. If set to ``True``, then parsing of the characters ``();<>|&`` is " +"changed: any run of these characters (considered punctuation characters) is " +"returned as a single token. If set to a non-empty string of characters, " +"those characters will be used as the punctuation characters. Any characters" +" in the :attr:`wordchars` attribute that appear in *punctuation_chars* will " +"be removed from :attr:`wordchars`. See :ref:`improved-shell-compatibility` " +"for more information. *punctuation_chars* can be set only upon " +":class:`~shlex.shlex` instance creation and can't be modified later." +msgstr "" +":class:`~shlex.shlex` 及其子类的实例是一种词义分析器对象。 利用初始化参数可指定从哪里读取字符。 初始化参数必须是具备 " +":meth:`~io.TextIOBase.read` 和 :meth:`~io.TextIOBase.readline` " +"方法的文件/流对象,或者是一个字符串。 如果没有给出初始化参数,则会从 ``sys.stdin`` 获取输入。 第二个可选参数是个文件名字符串,用于设置" +" :attr:`~shlex.infile` 属性的初始值。 如果 *instream* 参数被省略或等于 " +"``sys.stdin``,则第二个参数默认为 \"stdin\"。 *posix* 参数定义了操作的模式:若 *posix* 不为真值(默认),则 " +":class:`~shlex.shlex` 实例将工作于兼容模式。 若运行于 POSIX 模式下,则 :class:`~shlex.shlex` " +"会尽可能地应用 POSIX shell 解析规则。 *punctuation_chars* 参数提供了一种使行为更接近于真正的 shell 解析的方式。" +" 该参数可接受多种值:默认值、``False``、保持 Python 3.5 及更早版本的行为。 如果设为 ``True``,则会改变对字符 " +"``();<>|&`` 的解析方式:这些字符将作为独立的形符被返回(视作标点符号)。 如果设为非空字符串,则这些字符将被用作标点符号。 出现在 " +"*punctuation_chars* 中的 :attr:`wordchars` 属性中的任何字符都会从 :attr:`wordchars` 中被删除。" +" 请参阅 :ref:`improved-shell-compatibility` 了解详情。 *punctuation_chars* 只能在创建 " +":class:`~shlex.shlex` 实例时设置,以后不能再作修改。" + +#: ../../library/shlex.rst:123 +msgid "The *punctuation_chars* parameter was added." +msgstr "加入 *punctuation_chars* 参数。" + +#: ../../library/shlex.rst:128 +msgid "Module :mod:`configparser`" +msgstr ":mod:`configparser` 模块" + +#: ../../library/shlex.rst:129 +msgid "" +"Parser for configuration files similar to the Windows :file:`.ini` files." +msgstr "配置文件解析器,类似于 Windows 的 :file:`.ini` 文件。" + +#: ../../library/shlex.rst:135 +msgid "shlex Objects" +msgstr "shlex 对象" + +#: ../../library/shlex.rst:137 +msgid "A :class:`~shlex.shlex` instance has the following methods:" +msgstr ":class:`~shlex.shlex` 实例具备以下方法:" + +#: ../../library/shlex.rst:142 +msgid "" +"Return a token. If tokens have been stacked using :meth:`push_token`, pop a" +" token off the stack. Otherwise, read one from the input stream. If " +"reading encounters an immediate end-of-file, :attr:`eof` is returned (the " +"empty string (``''``) in non-POSIX mode, and ``None`` in POSIX mode)." +msgstr "" +"返回一个单词。如果所有单词已用 :meth:`push_token` " +"堆叠在一起了,则从堆中弹出一个单词。否则就从输入流中读取一个。如果读取时遇到文件结束符,则会返回 :attr:`eof`(在非 POSIX " +"模式下为空字符串 ``''``,在 POSIX 模式下为 ``None``)。" + +#: ../../library/shlex.rst:150 +msgid "Push the argument onto the token stack." +msgstr "将参数值压入单词堆栈。" + +#: ../../library/shlex.rst:155 +msgid "" +"Read a raw token. Ignore the pushback stack, and do not interpret source " +"requests. (This is not ordinarily a useful entry point, and is documented " +"here only for the sake of completeness.)" +msgstr "读取一个原单词。忽略堆栈,且不解释源请求。(通常没什么用,只是为了完整起见。)" + +#: ../../library/shlex.rst:162 +msgid "" +"When :class:`~shlex.shlex` detects a source request (see :attr:`source` " +"below) this method is given the following token as argument, and expected to" +" return a tuple consisting of a filename and an open file-like object." +msgstr "" +"当 :class:`~shlex.shlex` 检测到源请求(见下面的 " +":attr:`source`),本方法被赋予以下单词作为参数,并应返回一个由文件名和打开的文件对象组成的元组。" + +#: ../../library/shlex.rst:166 +msgid "" +"Normally, this method first strips any quotes off the argument. If the " +"result is an absolute pathname, or there was no previous source request in " +"effect, or the previous source was a stream (such as ``sys.stdin``), the " +"result is left alone. Otherwise, if the result is a relative pathname, the " +"directory part of the name of the file immediately before it on the source " +"inclusion stack is prepended (this behavior is like the way the C " +"preprocessor handles ``#include \"file.h\"``)." +msgstr "" +"通常本方法会先移除参数中的引号。如果结果为绝对路径名,或者之前没有有效的源请求,或者之前的源请求是一个流对象(比如 " +"``sys.stdin``),那么结果将不做处理。否则,如果结果是相对路径名,那么前面将会加上目录部分,目录名来自于源堆栈中前一个文件名(类似于 C " +"预处理器对 ``#include \"file.h\"`` 的处理方式)。" + +#: ../../library/shlex.rst:174 +msgid "" +"The result of the manipulations is treated as a filename, and returned as " +"the first component of the tuple, with :func:`open` called on it to yield " +"the second component. (Note: this is the reverse of the order of arguments " +"in instance initialization!)" +msgstr "" +"结果被视为一个文件名,并作为元组的第一部分返回,元组的第二部分以此为基础调用 :func:`open` 获得。(注意:这与实例初始化中的参数顺序相反!)" + +#: ../../library/shlex.rst:179 +msgid "" +"This hook is exposed so that you can use it to implement directory search " +"paths, addition of file extensions, and other namespace hacks. There is no " +"corresponding 'close' hook, but a shlex instance will call the " +":meth:`~io.IOBase.close` method of the sourced input stream when it returns " +"EOF." +msgstr "" +"此钩子函数是公开的,可用于实现路径搜索、添加文件扩展名或黑入其他命名空间。没有对应的“关闭”钩子函数,但 shlex 实例在返回 EOF " +"时会调用源输入流的 :meth:`~io.IOBase.close` 方法。" + +#: ../../library/shlex.rst:185 +msgid "" +"For more explicit control of source stacking, use the :meth:`push_source` " +"and :meth:`pop_source` methods." +msgstr "若要更明确地控制源堆栈,请采用 :meth:`push_source` 和 :meth:`pop_source` 方法。" + +#: ../../library/shlex.rst:191 +msgid "" +"Push an input source stream onto the input stack. If the filename argument " +"is specified it will later be available for use in error messages. This is " +"the same method used internally by the :meth:`sourcehook` method." +msgstr "将输入源流压入输入堆栈。如果指定了文件名参数,以后错误信息中将会用到。这与 :meth:`sourcehook` 内部使用的方法相同。" + +#: ../../library/shlex.rst:198 +msgid "" +"Pop the last-pushed input source from the input stack. This is the same " +"method used internally when the lexer reaches EOF on a stacked input stream." +msgstr "从输入堆栈中弹出最后一条输入源。当遇到输入流的 EOF 时,内部也使用同一方法。" + +#: ../../library/shlex.rst:204 +msgid "" +"This method generates an error message leader in the format of a Unix C " +"compiler error label; the format is ``'\"%s\", line %d: '``, where the " +"``%s`` is replaced with the name of the current source file and the ``%d`` " +"with the current input line number (the optional arguments can be used to " +"override these)." +msgstr "" +"本方法生成一条错误信息的首部,以 Unix C 编译器错误标签的形式;格式为``'\"%s\", line %d: '``,其中 ``%s`` " +"被替换为当前源文件的名称,``%d`` 被替换为当前输入行号(可用可选参数覆盖)。" + +#: ../../library/shlex.rst:209 +msgid "" +"This convenience is provided to encourage :mod:`shlex` users to generate " +"error messages in the standard, parseable format understood by Emacs and " +"other Unix tools." +msgstr "这是个快捷函数,旨在鼓励 :mod:`shlex` 用户以标准的、可解析的格式生成错误信息,以便 Emacs 和其他 Unix 工具理解。" + +#: ../../library/shlex.rst:213 +msgid "" +"Instances of :class:`~shlex.shlex` subclasses have some public instance " +"variables which either control lexical analysis or can be used for " +"debugging:" +msgstr ":class:`~shlex.shlex` 子类的实例有一些公共实例变量,这些变量可以控制词义分析,也可用于调试。" + +#: ../../library/shlex.rst:219 +msgid "" +"The string of characters that are recognized as comment beginners. All " +"characters from the comment beginner to end of line are ignored. Includes " +"just ``'#'`` by default." +msgstr "将被视为注释起始字符串。从注释起始字符串到行尾的所有字符都将被忽略。默认情况下只包括 ``'#'``。" + +#: ../../library/shlex.rst:226 +msgid "" +"The string of characters that will accumulate into multi-character tokens. " +"By default, includes all ASCII alphanumerics and underscore. In POSIX mode," +" the accented characters in the Latin-1 set are also included. If " +":attr:`punctuation_chars` is not empty, the characters ``~-./*?=``, which " +"can appear in filename specifications and command line parameters, will also" +" be included in this attribute, and any characters which appear in " +"``punctuation_chars`` will be removed from ``wordchars`` if they are present" +" there. If :attr:`whitespace_split` is set to ``True``, this will have no " +"effect." +msgstr "" +"可连成多字符单词的字符串。默认包含所有 ASCII 字母数字和下划线。在 POSIX 模式下,Latin-1 字符集的重音字符也被包括在内。如果 " +":attr:`punctuation_chars` 不为空,则可出现在文件名规范和命令行参数中的 ``~-./*?=`` 字符也将包含在内,任何 " +"``punctuation_chars`` 中的字符将从 ``wordchars`` 中移除。如果 :attr:`whitespace_split` " +"设为 ``True``,则本规则无效。" + +#: ../../library/shlex.rst:239 +msgid "" +"Characters that will be considered whitespace and skipped. Whitespace " +"bounds tokens. By default, includes space, tab, linefeed and carriage-" +"return." +msgstr "将被视为空白符并跳过的字符。空白符是单词的边界。默认包含空格、制表符、换行符和回车符。" + +#: ../../library/shlex.rst:245 +msgid "" +"Characters that will be considered as escape. This will be only used in " +"POSIX mode, and includes just ``'\\'`` by default." +msgstr "将视为转义字符。仅适用于 POSIX 模式,默认只包含 ``'\\'``。" + +#: ../../library/shlex.rst:251 +msgid "" +"Characters that will be considered string quotes. The token accumulates " +"until the same quote is encountered again (thus, different quote types " +"protect each other as in the shell.) By default, includes ASCII single and " +"double quotes." +msgstr "" +"将视为引号的字符。单词中的字符将会累至再次遇到同样的引号(因此,不同的引号会像在 shell 中一样相互包含。)默认包含 ASCII 单引号和双引号。" + +#: ../../library/shlex.rst:258 +msgid "" +"Characters in :attr:`quotes` that will interpret escape characters defined " +"in :attr:`escape`. This is only used in POSIX mode, and includes just " +"``'\"'`` by default." +msgstr "" +":attr:`quotes` 中的字符将会解析 :attr:`escape` 定义的转义字符。这只在 POSIX 模式下使用,默认只包含 " +"``'\"'``。" + +#: ../../library/shlex.rst:265 +msgid "" +"If ``True``, tokens will only be split in whitespaces. This is useful, for " +"example, for parsing command lines with :class:`~shlex.shlex`, getting " +"tokens in a similar way to shell arguments. When used in combination with " +":attr:`punctuation_chars`, tokens will be split on whitespace in addition to" +" those characters." +msgstr "" +"若为 ``True``,则只根据空白符拆分单词。这很有用,比如用 :class:`~shlex.shlex` 解析命令行,用类似 shell " +"参数的方式读取各个单词。当与 :attr:`punctuation_chars` 一起使用时,将根据空白符和这些字符拆分单词。" + +#: ../../library/shlex.rst:271 +msgid "" +"The :attr:`punctuation_chars` attribute was made compatible with the " +":attr:`whitespace_split` attribute." +msgstr ":attr:`punctuation_chars` 属性已与 :attr:`whitespace_split` 属性兼容。" + +#: ../../library/shlex.rst:278 +msgid "" +"The name of the current input file, as initially set at class instantiation " +"time or stacked by later source requests. It may be useful to examine this " +"when constructing error messages." +msgstr "当前输入的文件名,可能是在类实例化时设置的,或者是由后来的源请求堆栈生成的。在构建错误信息时可能会用到本属性。" + +#: ../../library/shlex.rst:285 +msgid "" +"The input stream from which this :class:`~shlex.shlex` instance is reading " +"characters." +msgstr ":class:`~shlex.shlex` 实例正从中读取字符的输入流。" + +#: ../../library/shlex.rst:291 +msgid "" +"This attribute is ``None`` by default. If you assign a string to it, that " +"string will be recognized as a lexical-level inclusion request similar to " +"the ``source`` keyword in various shells. That is, the immediately " +"following token will be opened as a filename and input will be taken from " +"that stream until EOF, at which point the :meth:`~io.IOBase.close` method of" +" that stream will be called and the input source will again become the " +"original input stream. Source requests may be stacked any number of levels " +"deep." +msgstr "" +"本属性默认值为 ``None``。 如果给定一个字符串,则会识别为包含请求,类似于各种 shell 中的 ``source`` 关键字。 " +"也就是说,紧随其后的单词将作为文件名打开,作为输入流,直至遇到 EOF 后调用流的 :meth:`~io.IOBase.close` " +"方法,然后原输入流仍变回输入源。Source 请求可以在词义堆栈中嵌套任意深度。" + +#: ../../library/shlex.rst:302 +msgid "" +"If this attribute is numeric and ``1`` or more, a :class:`~shlex.shlex` " +"instance will print verbose progress output on its behavior. If you need to" +" use this, you can read the module source code to learn the details." +msgstr "" +"如果本属性为大于 ``1`` 的数字,则 :class:`~shlex.shlex` " +"实例会把动作进度详细地输出出来。若需用到本属性,可阅读源代码来了解细节。" + +#: ../../library/shlex.rst:309 +msgid "Source line number (count of newlines seen so far plus one)." +msgstr "源的行数(到目前为止读到的换行符数量加 1)。" + +#: ../../library/shlex.rst:314 +msgid "" +"The token buffer. It may be useful to examine this when catching " +"exceptions." +msgstr "单词缓冲区。在捕获异常时可能会用到。" + +#: ../../library/shlex.rst:319 +msgid "" +"Token used to determine end of file. This will be set to the empty string " +"(``''``), in non-POSIX mode, and to ``None`` in POSIX mode." +msgstr "用于确定文件结束的单词。在非 POSIX 模式下,将设为空字符串 ``''``,在 POSIX 模式下被设为 ``None``。" + +#: ../../library/shlex.rst:325 +msgid "" +"A read-only property. Characters that will be considered punctuation. Runs " +"of punctuation characters will be returned as a single token. However, note " +"that no semantic validity checking will be performed: for example, '>>>' " +"could be returned as a token, even though it may not be recognised as such " +"by shells." +msgstr "" +"只读属性。表示应视作标点符号的字符。标点符号将作为单个单词返回。然而,请注意不会进行语义有效性检查:比如 “>>>” 可能会作为一个单词返回,虽然 " +"shell 可能无法识别。" + +#: ../../library/shlex.rst:336 +msgid "Parsing Rules" +msgstr "解析规则" + +#: ../../library/shlex.rst:338 +msgid "" +"When operating in non-POSIX mode, :class:`~shlex.shlex` will try to obey to " +"the following rules." +msgstr "在非 POSIX 模式下时,:class:`~shlex.shlex` 会试图遵守以下规则:" + +#: ../../library/shlex.rst:341 +msgid "" +"Quote characters are not recognized within words (``Do\"Not\"Separate`` is " +"parsed as the single word ``Do\"Not\"Separate``);" +msgstr "不识别单词中的引号(``Do\"Not\"Separate`` 解析为一个单词 ``Do\"Not\"Separate``)。" + +#: ../../library/shlex.rst:344 +msgid "Escape characters are not recognized;" +msgstr "不识别转义字符;" + +#: ../../library/shlex.rst:346 +msgid "" +"Enclosing characters in quotes preserve the literal value of all characters " +"within the quotes;" +msgstr "引号包裹的字符保留字面意思。" + +#: ../../library/shlex.rst:349 +msgid "" +"Closing quotes separate words (``\"Do\"Separate`` is parsed as ``\"Do\"`` " +"and ``Separate``);" +msgstr "成对的引号会将单词分离(``\"Do\"Separate`` 解析为 ``\"Do\"`` 和 ``Separate``)。" + +#: ../../library/shlex.rst:352 +msgid "" +"If :attr:`~shlex.whitespace_split` is ``False``, any character not declared " +"to be a word character, whitespace, or a quote will be returned as a single-" +"character token. If it is ``True``, :class:`~shlex.shlex` will only split " +"words in whitespaces;" +msgstr "" +"如果 :attr:`~shlex.whitespace_split` 为 " +"``False``,则未声明为单词字符、空白或引号的字符将作为单字符标记返回。若为 ``True``, 则 :class:`~shlex.shlex` " +"只根据空白符拆分单词。" + +#: ../../library/shlex.rst:357 +msgid "EOF is signaled with an empty string (``''``);" +msgstr "EOF 用空字符串(``''``)表示;" + +#: ../../library/shlex.rst:359 +msgid "It's not possible to parse empty strings, even if quoted." +msgstr "空字符串无法解析,即便是加了引号。" + +#: ../../library/shlex.rst:361 +msgid "" +"When operating in POSIX mode, :class:`~shlex.shlex` will try to obey to the " +"following parsing rules." +msgstr "在 POSIX 模式时,:class:`~shlex.shlex` 将尝试遵守以下解析规则:" + +#: ../../library/shlex.rst:364 +msgid "" +"Quotes are stripped out, and do not separate words " +"(``\"Do\"Not\"Separate\"`` is parsed as the single word ``DoNotSeparate``);" +msgstr "引号会被剔除,且不会拆分单词( ``\"Do\"Not\"Separate\"`` 将解析为单个单词 ``DoNotSeparate``)。" + +#: ../../library/shlex.rst:367 +msgid "" +"Non-quoted escape characters (e.g. ``'\\'``) preserve the literal value of " +"the next character that follows;" +msgstr "未加引号包裹的转义字符(如 ``'\\'`` )保留后一个字符的字面意思;" + +#: ../../library/shlex.rst:370 +msgid "" +"Enclosing characters in quotes which are not part of " +":attr:`~shlex.escapedquotes` (e.g. ``\"'\"``) preserve the literal value of " +"all characters within the quotes;" +msgstr "引号中的字符不属于 :attr:`~shlex.escapedquotes` (例如,``\"'\"``),则保留引号中所有字符的字面值。" + +#: ../../library/shlex.rst:374 +msgid "" +"Enclosing characters in quotes which are part of " +":attr:`~shlex.escapedquotes` (e.g. ``'\"'``) preserves the literal value of " +"all characters within the quotes, with the exception of the characters " +"mentioned in :attr:`~shlex.escape`. The escape characters retain its " +"special meaning only when followed by the quote in use, or the escape " +"character itself. Otherwise the escape character will be considered a normal" +" character." +msgstr "" +"若引号包裹的字符属于 :attr:`~shlex.escapedquotes` (例如 ``'\"'``),则保留引号中所有字符的字面意思,属于 " +":attr:`~shlex.escape` 中的字符除外。仅当后跟后半个引号或转义字符本身时,转义字符才保留其特殊含义。否则,转义字符将视作普通字符。" + +#: ../../library/shlex.rst:382 +msgid "EOF is signaled with a :const:`None` value;" +msgstr "EOF 用 :const:`None` 表示。" + +#: ../../library/shlex.rst:384 +msgid "Quoted empty strings (``''``) are allowed." +msgstr "允许出现引号包裹的空字符串(``''``)。" + +#: ../../library/shlex.rst:389 +msgid "Improved Compatibility with Shells" +msgstr "改进的 shell 兼容性" + +#: ../../library/shlex.rst:393 +msgid "" +"The :class:`shlex` class provides compatibility with the parsing performed " +"by common Unix shells like ``bash``, ``dash``, and ``sh``. To take " +"advantage of this compatibility, specify the ``punctuation_chars`` argument " +"in the constructor. This defaults to ``False``, which preserves pre-3.6 " +"behaviour. However, if it is set to ``True``, then parsing of the characters" +" ``();<>|&`` is changed: any run of these characters is returned as a single" +" token. While this is short of a full parser for shells (which would be out" +" of scope for the standard library, given the multiplicity of shells out " +"there), it does allow you to perform processing of command lines more easily" +" than you could otherwise. To illustrate, you can see the difference in the" +" following snippet:" +msgstr "" +":class:`shlex` 类提供了与常见 Unix shell(如 ``bash``、``dash`` " +"和``sh``)的解析兼容性。为了充分利用这种兼容性,请在构造函数中设定 ``punctuation_chars`` 参数。该参数默认为 " +"``False``,维持 3.6 以下版本的行为。如果设为 ``True``,则会改变对 ``();<>|&`` " +"字符的解析方式:这些字符都将视为单个标记返回。虽然不算是完整的 shell 解析程序(考虑到 shell " +"的多样性,超出了标准库的范围),但确实能比其他方式更容易进行命令行的处理。以下代码段演示了两者的差异:" + +#: ../../library/shlex.rst:419 +msgid "" +"Of course, tokens will be returned which are not valid for shells, and " +"you'll need to implement your own error checks on the returned tokens." +msgstr "当然,返回的词法单元对 shell 无效,需要对返回的词法单元自行进行错误检查。" + +#: ../../library/shlex.rst:422 +msgid "" +"Instead of passing ``True`` as the value for the punctuation_chars " +"parameter, you can pass a string with specific characters, which will be " +"used to determine which characters constitute punctuation. For example::" +msgstr "" +"punctuation_chars 参数可以不传入 ``True`` ,而是传入包含特定字符的字符串,用于确定由哪些字符构成标点符号。例如:" + +#: ../../library/shlex.rst:431 +msgid "" +"When ``punctuation_chars`` is specified, the :attr:`~shlex.wordchars` " +"attribute is augmented with the characters ``~-./*?=``. That is because " +"these characters can appear in file names (including wildcards) and command-" +"line arguments (e.g. ``--color=auto``). Hence::" +msgstr "" +"如果指定了 ``punctuation_chars``,则 :attr:`~shlex.wordchars` 属性的参数会是 " +"``~-./*?=``。因为这些字符可以出现在文件名(包括通配符)和命令行参数中(如 ``--color=auto``)。因此:" + +#: ../../library/shlex.rst:442 +msgid "" +"However, to match the shell as closely as possible, it is recommended to " +"always use ``posix`` and :attr:`~shlex.whitespace_split` when using " +":attr:`~shlex.punctuation_chars`, which will negate :attr:`~shlex.wordchars`" +" entirely." +msgstr "" +"不过为了尽可能接近于 shell ,建议在使用 :attr:`~shlex.punctuation_chars` 时始终使用 ``posix`` 和" +" :attr:`~shlex.whitespace_split` ,这将完全否定 :attr:`~shlex.wordchars` 。" + +#: ../../library/shlex.rst:447 +msgid "" +"For best effect, ``punctuation_chars`` should be set in conjunction with " +"``posix=True``. (Note that ``posix=False`` is the default for " +":class:`~shlex.shlex`.)" +msgstr "" +"为了达到最佳效果,``punctuation_chars`` 应与 ``posix=True`` 一起设置。(注意 ``posix=False`` 是 " +":class:`~shlex.shlex` 的默认设置)。" diff --git a/library/shutil.po b/library/shutil.po new file mode 100644 index 000000000..bf0ab3e0c --- /dev/null +++ b/library/shutil.po @@ -0,0 +1,1130 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) 2001-2025, Python Software Foundation +# This file is distributed under the same license as the Python package. +# FIRST AUTHOR , YEAR. +# +# Translators: +# ppcfish , 2019 +# Arisaka97 , 2020 +# Freesand Leo , 2024 +# Rafael Fontenelle , 2025 +# +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: Python 3.9\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2025-02-07 16:40+0000\n" +"PO-Revision-Date: 2017-02-16 23:26+0000\n" +"Last-Translator: Rafael Fontenelle , 2025\n" +"Language-Team: Chinese (China) (https://app.transifex.com/python-doc/teams/5390/zh_CN/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: zh_CN\n" +"Plural-Forms: nplurals=1; plural=0;\n" + +#: ../../library/shutil.rst:2 +msgid ":mod:`shutil` --- High-level file operations" +msgstr ":mod:`shutil` --- 高阶文件操作" + +#: ../../library/shutil.rst:10 +msgid "**Source code:** :source:`Lib/shutil.py`" +msgstr "**源代码:** :source:`Lib/shutil.py`" + +#: ../../library/shutil.rst:18 +msgid "" +"The :mod:`shutil` module offers a number of high-level operations on files " +"and collections of files. In particular, functions are provided which " +"support file copying and removal. For operations on individual files, see " +"also the :mod:`os` module." +msgstr "" +":mod:`shutil` 模块提供了一系列对文件和文件集合的高阶操作。 特别是提供了一些支持文件拷贝和删除的函数。 对于单个文件的操作,请参阅 " +":mod:`os` 模块。" + +#: ../../library/shutil.rst:25 +msgid "" +"Even the higher-level file copying functions (:func:`shutil.copy`, " +":func:`shutil.copy2`) cannot copy all file metadata." +msgstr "" +"即便是高阶文件拷贝函数 (:func:`shutil.copy`, :func:`shutil.copy2`) 也无法拷贝所有的文件元数据。" + +#: ../../library/shutil.rst:28 +msgid "" +"On POSIX platforms, this means that file owner and group are lost as well as" +" ACLs. On Mac OS, the resource fork and other metadata are not used. This " +"means that resources will be lost and file type and creator codes will not " +"be correct. On Windows, file owners, ACLs and alternate data streams are not" +" copied." +msgstr "" +"在 POSIX 平台上,这意味着将丢失文件所有者和组以及 ACL 数据。 在 Mac OS 上,资源钩子和其他元数据不被使用。 " +"这意味着将丢失这些资源并且文件类型和创建者代码将不正确。 在 Windows 上,将不会拷贝文件所有者、ACL 和替代数据流。" + +#: ../../library/shutil.rst:38 +msgid "Directory and files operations" +msgstr "目录和文件操作" + +#: ../../library/shutil.rst:42 +msgid "" +"Copy the contents of the file-like object *fsrc* to the file-like object " +"*fdst*. The integer *length*, if given, is the buffer size. In particular, a" +" negative *length* value means to copy the data without looping over the " +"source data in chunks; by default the data is read in chunks to avoid " +"uncontrolled memory consumption. Note that if the current file position of " +"the *fsrc* object is not 0, only the contents from the current file position" +" to the end of the file will be copied." +msgstr "" +"将文件型对象 *fsrc* 的内容拷贝到文件型对象 *fdst*。 整数值 *length* 如果给出则为缓冲区大小。 特别地, *length* " +"为负值表示拷贝数据时不对源数据进行分块循环处理;默认情况下会分块读取数据以避免不受控制的内存消耗。 请注意如果 *fsrc* 对象的当前文件位置不为 " +"0,则只有从当前文件位置到文件末尾的内容会被拷贝。" + +#: ../../library/shutil.rst:53 +msgid "" +"Copy the contents (no metadata) of the file named *src* to a file named " +"*dst* and return *dst* in the most efficient way possible. *src* and *dst* " +"are path-like objects or path names given as strings." +msgstr "" +"将名为 *src* 的文件的内容(不包括元数据)拷贝到名为 *dst* 的文件并以尽可能高效的方式返回 *dst*。 *src* 和 *dst* " +"均为路径类对象或以字符串形式给出的路径名。" + +#: ../../library/shutil.rst:57 +msgid "" +"*dst* must be the complete target file name; look at :func:`~shutil.copy` " +"for a copy that accepts a target directory path. If *src* and *dst* specify" +" the same file, :exc:`SameFileError` is raised." +msgstr "" +"*dst* 必须是完整的目标文件名;对于接受目标目录路径的拷贝请参见 :func:`~shutil.copy`。 如果 *src* 和 *dst* " +"指定了同一个文件,则将引发 :exc:`SameFileError`。" + +#: ../../library/shutil.rst:61 +msgid "" +"The destination location must be writable; otherwise, an :exc:`OSError` " +"exception will be raised. If *dst* already exists, it will be replaced. " +"Special files such as character or block devices and pipes cannot be copied " +"with this function." +msgstr "" +"目标位置必须是可写的;否则将引发 :exc:`OSError` 异常。 如果 *dst* 已经存在,它将被替换。 " +"特殊文件如字符或块设备以及管道无法用此函数来拷贝。" + +#: ../../library/shutil.rst:66 +msgid "" +"If *follow_symlinks* is false and *src* is a symbolic link, a new symbolic " +"link will be created instead of copying the file *src* points to." +msgstr "如果 *follow_symlinks* 为假值且 *src* 为符号链接,则将创建一个新的符号链接而不是拷贝 *src* 所指向的文件。" + +#: ../../library/shutil.rst:70 ../../library/shutil.rst:177 +#: ../../library/shutil.rst:208 +msgid "" +"Raises an :ref:`auditing event ` ``shutil.copyfile`` with " +"arguments ``src``, ``dst``." +msgstr "" +"引发一个 :ref:`审计事件 ` ``shutil.copyfile`` 并附带参数 ``src``, ``dst``。" + +#: ../../library/shutil.rst:72 +msgid "" +":exc:`IOError` used to be raised instead of :exc:`OSError`. Added " +"*follow_symlinks* argument. Now returns *dst*." +msgstr "" +"曾经是引发 :exc:`IOError` 而不是 :exc:`OSError`。 增加了 *follow_symlinks* 参数。 现在是返回 " +"*dst*。" + +#: ../../library/shutil.rst:77 +msgid "" +"Raise :exc:`SameFileError` instead of :exc:`Error`. Since the former is a " +"subclass of the latter, this change is backward compatible." +msgstr "引发 :exc:`SameFileError` 而不是 :exc:`Error`。 由于前者是后者的子类,此改变是向后兼容的。" + +#: ../../library/shutil.rst:81 ../../library/shutil.rst:185 +#: ../../library/shutil.rst:217 ../../library/shutil.rst:287 +#: ../../library/shutil.rst:375 +msgid "" +"Platform-specific fast-copy syscalls may be used internally in order to copy" +" the file more efficiently. See :ref:`shutil-platform-dependent-efficient-" +"copy-operations` section." +msgstr "" +"可能会在内部使用平台专属的快速拷贝系统调用以更高效地拷贝文件。 参见 :ref:`shutil-platform-dependent-" +"efficient-copy-operations` 一节。" + +#: ../../library/shutil.rst:88 +msgid "" +"This exception is raised if source and destination in :func:`copyfile` are " +"the same file." +msgstr "此异常会在 :func:`copyfile` 中的源和目标为同一文件时被引发。" + +#: ../../library/shutil.rst:96 +msgid "" +"Copy the permission bits from *src* to *dst*. The file contents, owner, and" +" group are unaffected. *src* and *dst* are path-like objects or path names " +"given as strings. If *follow_symlinks* is false, and both *src* and *dst* " +"are symbolic links, :func:`copymode` will attempt to modify the mode of " +"*dst* itself (rather than the file it points to). This functionality is not" +" available on every platform; please see :func:`copystat` for more " +"information. If :func:`copymode` cannot modify symbolic links on the local " +"platform, and it is asked to do so, it will do nothing and return." +msgstr "" +"从 *src* 拷贝权限位到 *dst*。 文件的内容、所有者和分组将不受影响。 *src* 和 *dst* 均为路径类对象或字符串形式的路径名。 如果" +" *follow_symlinks* 为假值,并且 *src* 和 *dst* 均为符号链接,:func:`copymode` 将尝试修改 *dst* " +"本身的模式(而非它所指向的文件)。 此功能并不是在所有平台上均可用;请参阅 :func:`copystat` 了解详情。 如果 " +":func:`copymode` 无法修改本机平台上的符号链接,而它被要求这样做,它将不做任何操作即返回。" + +#: ../../library/shutil.rst:106 ../../library/shutil.rst:179 +msgid "" +"Raises an :ref:`auditing event ` ``shutil.copymode`` with " +"arguments ``src``, ``dst``." +msgstr "" +"引发一个 :ref:`审计事件 ` ``shutil.copymode`` 并附带参数 ``src``, ``dst``。" + +#: ../../library/shutil.rst:108 +msgid "Added *follow_symlinks* argument." +msgstr "加入 *follow_symlinks* 参数。" + +#: ../../library/shutil.rst:113 +msgid "" +"Copy the permission bits, last access time, last modification time, and " +"flags from *src* to *dst*. On Linux, :func:`copystat` also copies the " +"\"extended attributes\" where possible. The file contents, owner, and group" +" are unaffected. *src* and *dst* are path-like objects or path names given " +"as strings." +msgstr "" +"从 *src* 拷贝权限位、最近访问时间、最近修改时间以及旗标到 *dst*。 在 Linux上,:func:`copystat` " +"还会在可能的情况下拷贝“扩展属性”。 文件的内容、所有者和分组将不受影响。 *src* 和 *dst* 均为路径类对象或字符串形式的路径名。" + +#: ../../library/shutil.rst:119 +msgid "" +"If *follow_symlinks* is false, and *src* and *dst* both refer to symbolic " +"links, :func:`copystat` will operate on the symbolic links themselves rather" +" than the files the symbolic links refer to—reading the information from the" +" *src* symbolic link, and writing the information to the *dst* symbolic " +"link." +msgstr "" +"如果 *follow_symlinks* 为假值,并且 *src* 和 *dst* 均指向符号链接,:func:`copystat` " +"将作用于符号链接本身而非该符号链接所指向的文件 — 从 *src* 符号链接读取信息,并将信息写入 *dst* 符号链接。" + +#: ../../library/shutil.rst:128 +msgid "" +"Not all platforms provide the ability to examine and modify symbolic links." +" Python itself can tell you what functionality is locally available." +msgstr "并非所有平台者提供检查和修改符号链接的功能。 Python 本身可以告诉你哪些功能是在本机上可用的。" + +#: ../../library/shutil.rst:132 +msgid "" +"If ``os.chmod in os.supports_follow_symlinks`` is ``True``, :func:`copystat`" +" can modify the permission bits of a symbolic link." +msgstr "" +"如果 ``os.chmod in os.supports_follow_symlinks`` 为 ``True``,则 :func:`copystat`" +" 可以修改符号链接的权限位。" + +#: ../../library/shutil.rst:136 +msgid "" +"If ``os.utime in os.supports_follow_symlinks`` is ``True``, :func:`copystat`" +" can modify the last access and modification times of a symbolic link." +msgstr "" +"如果 ``os.utime in os.supports_follow_symlinks`` 为 ``True``,则 :func:`copystat`" +" 可以修改符号链接的最近访问和修改时间。" + +#: ../../library/shutil.rst:140 +msgid "" +"If ``os.chflags in os.supports_follow_symlinks`` is ``True``, " +":func:`copystat` can modify the flags of a symbolic link. (``os.chflags`` " +"is not available on all platforms.)" +msgstr "" +"如果 ``os.chflags in os.supports_follow_symlinks`` 为 ``True``,则 " +":func:`copystat` 可以修改符号链接的旗标。 (``os.chflags`` 不是在所有平台上均可用。)" + +#: ../../library/shutil.rst:145 +msgid "" +"On platforms where some or all of this functionality is unavailable, when " +"asked to modify a symbolic link, :func:`copystat` will copy everything it " +"can. :func:`copystat` never returns failure." +msgstr "" +"在此功能部分或全部不可用的平台上,当被要求修改一个符号链接时,:func:`copystat` 将尽量拷贝所有内容。 :func:`copystat` " +"一定不会返回失败信息。" + +#: ../../library/shutil.rst:150 +msgid "Please see :data:`os.supports_follow_symlinks` for more information." +msgstr "更多信息请参阅 :data:`os.supports_follow_symlinks`。" + +#: ../../library/shutil.rst:153 ../../library/shutil.rst:210 +msgid "" +"Raises an :ref:`auditing event ` ``shutil.copystat`` with " +"arguments ``src``, ``dst``." +msgstr "" +"引发一个 :ref:`审计事件 ` ``shutil.copystat`` 并附带参数 ``src``, ``dst``。" + +#: ../../library/shutil.rst:155 +msgid "" +"Added *follow_symlinks* argument and support for Linux extended attributes." +msgstr "添加了 *follow_symlinks* 参数并且支持 Linux 扩展属性。" + +#: ../../library/shutil.rst:160 +msgid "" +"Copies the file *src* to the file or directory *dst*. *src* and *dst* " +"should be :term:`path-like objects ` or strings. If *dst*" +" specifies a directory, the file will be copied into *dst* using the base " +"filename from *src*. If *dst* specifies a file that already exists, it will " +"be replaced. Returns the path to the newly created file." +msgstr "" +"将文件 *src* 拷贝到文件或目录 *dst*。 *src* 和 *dst* 应为 :term:`路径类对象 ` " +"或字符串。 如果 *dst* 指定了一个目录,文件将使用 *src* 中的基准文件名拷贝到 *dst* 中。 如果 *dst* " +"指定了一个已存在的文件,它将被替换。 返回新创建文件所对应的路径。" + +#: ../../library/shutil.rst:166 +msgid "" +"If *follow_symlinks* is false, and *src* is a symbolic link, *dst* will be " +"created as a symbolic link. If *follow_symlinks* is true and *src* is a " +"symbolic link, *dst* will be a copy of the file *src* refers to." +msgstr "" +"如果 *follow_symlinks* 为假值且 *src* 为符号链接,则 *dst* 也将被创建为符号链接。 如果 " +"*follow_symlinks* 为真值且 *src* 为符号链接,*dst* 将成为 *src* 所指向的文件的一个副本。" + +#: ../../library/shutil.rst:171 +msgid "" +":func:`~shutil.copy` copies the file data and the file's permission mode " +"(see :func:`os.chmod`). Other metadata, like the file's creation and " +"modification times, is not preserved. To preserve all file metadata from the" +" original, use :func:`~shutil.copy2` instead." +msgstr "" +":func:`~shutil.copy` 会拷贝文件数据和文件的权限模式 (参见 :func:`os.chmod`)。 " +"其他元数据,例如文件的创建和修改时间不会被保留。 要保留所有原有的元数据,请改用 :func:`~shutil.copy2` 。" + +#: ../../library/shutil.rst:181 +msgid "" +"Added *follow_symlinks* argument. Now returns path to the newly created " +"file." +msgstr "添加了 *follow_symlinks* 参数。 现在会返回新创建文件的路径。" + +#: ../../library/shutil.rst:192 +msgid "" +"Identical to :func:`~shutil.copy` except that :func:`copy2` also attempts to" +" preserve file metadata." +msgstr "类似于 :func:`~shutil.copy`,区别在于 :func:`copy2` 还会尝试保留文件的元数据。" + +#: ../../library/shutil.rst:195 +msgid "" +"When *follow_symlinks* is false, and *src* is a symbolic link, :func:`copy2`" +" attempts to copy all metadata from the *src* symbolic link to the newly-" +"created *dst* symbolic link. However, this functionality is not available on" +" all platforms. On platforms where some or all of this functionality is " +"unavailable, :func:`copy2` will preserve all the metadata it can; " +":func:`copy2` never raises an exception because it cannot preserve file " +"metadata." +msgstr "" +"当 *follow_symlinks* 为假值且 *src* 为符号链接时,:func:`copy2` 会尝试将来自 *src* " +"符号链接的所有元数据拷贝到新创建的 *dst* 符号链接。 但是,此功能不是在所有平台上均可用。 " +"在此功能部分或全部不可用的平台上,:func:`copy2` 将尽量保留所有元数据;:func:`copy2` " +"一定不会由于无法保留文件元数据而引发异常。" + +#: ../../library/shutil.rst:204 +msgid "" +":func:`copy2` uses :func:`copystat` to copy the file metadata. Please see " +":func:`copystat` for more information about platform support for modifying " +"symbolic link metadata." +msgstr "" +":func:`copy2` 会使用 :func:`copystat` 来拷贝文件元数据。 请参阅 :func:`copystat` " +"了解有关修改符号链接元数据的平台支持的更多信息。" + +#: ../../library/shutil.rst:212 +msgid "" +"Added *follow_symlinks* argument, try to copy extended file system " +"attributes too (currently Linux only). Now returns path to the newly created" +" file." +msgstr "添加了 *follow_symlinks* 参数,还会尝试拷贝扩展文件系统属性(目前仅限 Linux)。 现在会返回新创建文件的路径。" + +#: ../../library/shutil.rst:224 +msgid "" +"This factory function creates a function that can be used as a callable for " +":func:`copytree`\\'s *ignore* argument, ignoring files and directories that " +"match one of the glob-style *patterns* provided. See the example below." +msgstr "" +"这个工厂函数会创建一个函数,它可被用作 :func:`copytree` 的 *ignore* 可调用对象参数,以忽略那些匹配所提供的 glob 风格的" +" *patterns* 之一的文件和目录。 参见以下示例。" + +#: ../../library/shutil.rst:233 +msgid "" +"Recursively copy an entire directory tree rooted at *src* to a directory " +"named *dst* and return the destination directory. All intermediate " +"directories needed to contain *dst* will also be created by default." +msgstr "" +"递归地将以 *src* 为根起点的整个目录树拷贝到名为 *dst* 的目录并返回目标目录。 所需的包含 *dst* 的中间目录在默认情况下也将被创建。" + +#: ../../library/shutil.rst:237 +msgid "" +"Permissions and times of directories are copied with :func:`copystat`, " +"individual files are copied using :func:`~shutil.copy2`." +msgstr "目录的权限和时间会通过 :func:`copystat` 来拷贝,单个文件则会使用 :func:`~shutil.copy2` 来拷贝。" + +#: ../../library/shutil.rst:240 +msgid "" +"If *symlinks* is true, symbolic links in the source tree are represented as " +"symbolic links in the new tree and the metadata of the original links will " +"be copied as far as the platform allows; if false or omitted, the contents " +"and metadata of the linked files are copied to the new tree." +msgstr "" +"如果 *symlinks* " +"为真值,源目录树中的符号链接会在新目录树中表示为符号链接,并且原链接的元数据在平台允许的情况下也会被拷贝;如果为假值或省略,则会将被链接文件的内容和元数据拷贝到新目录树。" + +#: ../../library/shutil.rst:245 +msgid "" +"When *symlinks* is false, if the file pointed by the symlink doesn't exist, " +"an exception will be added in the list of errors raised in an :exc:`Error` " +"exception at the end of the copy process. You can set the optional " +"*ignore_dangling_symlinks* flag to true if you want to silence this " +"exception. Notice that this option has no effect on platforms that don't " +"support :func:`os.symlink`." +msgstr "" +"当 *symlinks* 为假值时,如果符号链接所指向的文件不存在,则会在拷贝进程的末尾将一个异常添加到 :exc:`Error` 异常中的错误列表。 " +"如果你希望屏蔽此异常那就将可选的 *ignore_dangling_symlinks* 旗标设为真值。 请注意此选项在不支持 " +":func:`os.symlink` 的平台上将不起作用。" + +#: ../../library/shutil.rst:252 +msgid "" +"If *ignore* is given, it must be a callable that will receive as its " +"arguments the directory being visited by :func:`copytree`, and a list of its" +" contents, as returned by :func:`os.listdir`. Since :func:`copytree` is " +"called recursively, the *ignore* callable will be called once for each " +"directory that is copied. The callable must return a sequence of directory " +"and file names relative to the current directory (i.e. a subset of the items" +" in its second argument); these names will then be ignored in the copy " +"process. :func:`ignore_patterns` can be used to create such a callable that" +" ignores names based on glob-style patterns." +msgstr "" +"如果给出了 *ignore*,它必须是一个可调用对象,该对象将接受 :func:`copytree` 所访问的目录以及 " +":func:`os.listdir` 所返回的目录内容列表作为其参数。 由于 :func:`copytree` 是递归地被调用的,*ignore* " +"可调用对象对于每个被拷贝目录都将被调用一次。 " +"该可调用对象必须返回一个相对于当前目录的目录和文件名序列(即其第二个参数的子集);随后这些名称将在拷贝进程中被忽略。 " +":func:`ignore_patterns` 可被用于创建这种基于 glob 风格模式来忽略特定名称的可调用对象。" + +#: ../../library/shutil.rst:262 +msgid "" +"If exception(s) occur, an :exc:`Error` is raised with a list of reasons." +msgstr "如果发生了(一个或多个)异常,将引发一个附带原因列表的 :exc:`Error`。" + +#: ../../library/shutil.rst:264 +msgid "" +"If *copy_function* is given, it must be a callable that will be used to copy" +" each file. It will be called with the source path and the destination path " +"as arguments. By default, :func:`~shutil.copy2` is used, but any function " +"that supports the same signature (like :func:`~shutil.copy`) can be used." +msgstr "" +"如果给出了 *copy_function*,它必须是一个将被用来拷贝每个文件的可调用对象。 它在被调用时会将源路径和目标路径作为参数传入。 " +"默认情况下,:func:`~shutil.copy2` 将被使用,但任何支持同样签名(与 :func:`~shutil.copy` 一致)都可以使用。" + +#: ../../library/shutil.rst:269 +msgid "" +"If *dirs_exist_ok* is false (the default) and *dst* already exists, a " +":exc:`FileExistsError` is raised. If *dirs_exist_ok* is true, the copying " +"operation will continue if it encounters existing directories, and files " +"within the *dst* tree will be overwritten by corresponding files from the " +"*src* tree." +msgstr "" +"如果 *dirs_exist_ok* 为(默认的)假值且 *dst* 已存在,则会引发 :exc:`FileExistsError`。 如果 " +"*dirs_exist_ok* 为真值,则如果拷贝操作遇到已存在的目录时将继续执行,并且在 *dst* 目录树中的文件将被 *src* " +"目录树中对应的文件所覆盖。" + +#: ../../library/shutil.rst:275 +msgid "" +"Raises an :ref:`auditing event ` ``shutil.copytree`` with " +"arguments ``src``, ``dst``." +msgstr "" +"引发一个 :ref:`审计事件 ` ``shutil.copytree`` 并附带参数 ``src``, ``dst``。" + +#: ../../library/shutil.rst:277 +msgid "Copy metadata when *symlinks* is false. Now returns *dst*." +msgstr "当 *symlinks* 为假值时拷贝元数据。 现在会返回 *dst*。" + +#: ../../library/shutil.rst:281 +msgid "" +"Added the *copy_function* argument to be able to provide a custom copy " +"function. Added the *ignore_dangling_symlinks* argument to silence dangling " +"symlinks errors when *symlinks* is false." +msgstr "" +"添加了 *copy_function* 参数以允许提供定制的拷贝函数。 添加了 *ignore_dangling_symlinks* 参数以便在 " +"*symlinks* 为假值时屏蔽目标不存在的符号链接。" + +#: ../../library/shutil.rst:292 +msgid "The *dirs_exist_ok* parameter." +msgstr "*dirs_exist_ok* 形参。" + +#: ../../library/shutil.rst:299 +msgid "" +"Delete an entire directory tree; *path* must point to a directory (but not a" +" symbolic link to a directory). If *ignore_errors* is true, errors " +"resulting from failed removals will be ignored; if false or omitted, such " +"errors are handled by calling a handler specified by *onerror* or, if that " +"is omitted, they raise an exception." +msgstr "" +"删除一个完整的目录树;*path* 必须指向一个目录(但不能是一个目录的符号链接)。 如果 *ignore_errors* " +"为真值,删除失败导致的错误将被忽略;如果为假值或是省略,此类错误将通过调用由 *onerror* " +"所指定的处理程序来处理,或者如果此参数被省略则将引发一个异常。" + +#: ../../library/shutil.rst:307 +msgid "" +"On platforms that support the necessary fd-based functions a symlink attack " +"resistant version of :func:`rmtree` is used by default. On other platforms," +" the :func:`rmtree` implementation is susceptible to a symlink attack: given" +" proper timing and circumstances, attackers can manipulate symlinks on the " +"filesystem to delete files they wouldn't be able to access otherwise. " +"Applications can use the :data:`rmtree.avoids_symlink_attacks` function " +"attribute to determine which case applies." +msgstr "" +"在支持必要的基于 fd 的函数的平台上,默认会使用 :func:`rmtree` 的可防御符号链接攻击的版本。 " +"在其他平台上,:func:`rmtree` " +"较易遭受符号链接攻击:给定适当的时间和环境,攻击者可以操纵文件系统中的符号链接来删除他们在其他情况下无法访问的文件。 应用程序可以使用 " +":data:`rmtree.avoids_symlink_attacks` 函数属性来确定此类情况具体是哪一些。" + +#: ../../library/shutil.rst:315 +msgid "" +"If *onerror* is provided, it must be a callable that accepts three " +"parameters: *function*, *path*, and *excinfo*." +msgstr "如果提供了 *onerror*,它必须为接受三个形参的可调用对象: *function*, *path* 和 *excinfo*。" + +#: ../../library/shutil.rst:318 +msgid "" +"The first parameter, *function*, is the function which raised the exception;" +" it depends on the platform and implementation. The second parameter, " +"*path*, will be the path name passed to *function*. The third parameter, " +"*excinfo*, will be the exception information returned by " +":func:`sys.exc_info`. Exceptions raised by *onerror* will not be caught." +msgstr "" +"第一个形参 *function* 是引发异常的函数;它依赖于具体的平台和实现。 第二个形参 *path* 将是传递给 *function* 的路径名。 " +"第三个形参 *excinfo* 将是由 :func:`sys.exc_info` 所返回的异常信息。 由 *onerror* 所引发的异常将不会被捕获。" + +#: ../../library/shutil.rst:324 +msgid "" +"Raises an :ref:`auditing event ` ``shutil.rmtree`` with argument " +"``path``." +msgstr "引发一个 :ref:`审计事件 ` ``shutil.rmtree`` 附带参数 ``path``。" + +#: ../../library/shutil.rst:326 +msgid "" +"Added a symlink attack resistant version that is used automatically if " +"platform supports fd-based functions." +msgstr "添加了一个防御符号链接攻击的版本,如果平台支持基于 fd 的函数就会被使用。" + +#: ../../library/shutil.rst:330 +msgid "" +"On Windows, will no longer delete the contents of a directory junction " +"before removing the junction." +msgstr "在 Windows 上将不会再在移除连接之前删除目录连接中的内容。" + +#: ../../library/shutil.rst:336 +msgid "" +"Indicates whether the current platform and implementation provides a symlink" +" attack resistant version of :func:`rmtree`. Currently this is only true " +"for platforms supporting fd-based directory access functions." +msgstr "" +"指明当前平台和实现是否提供防御符号链接攻击的 :func:`rmtree` 版本。 目前它仅在平台支持基于 fd 的目录访问函数时才返回真值。" + +#: ../../library/shutil.rst:345 +msgid "" +"Recursively move a file or directory (*src*) to another location (*dst*) and" +" return the destination." +msgstr "递归地将一个文件或目录 (*src*) 移至另一位置 (*dst*) 并返回目标位置。" + +#: ../../library/shutil.rst:348 +msgid "" +"If the destination is an existing directory, then *src* is moved inside that" +" directory. If the destination already exists but is not a directory, it may" +" be overwritten depending on :func:`os.rename` semantics." +msgstr "" +"如果目标是已存在的目录,则 *src* 会被移至该目录下。 如果目标已存在但不是目录,它可能会被覆盖,具体取决于 :func:`os.rename` " +"的语义。" + +#: ../../library/shutil.rst:352 +msgid "" +"If the destination is on the current filesystem, then :func:`os.rename` is " +"used. Otherwise, *src* is copied to *dst* using *copy_function* and then " +"removed. In case of symlinks, a new symlink pointing to the target of *src*" +" will be created in or as *dst* and *src* will be removed." +msgstr "" +"如果目标是在当前文件系统中,则会使用 :func:`os.rename`。 在其他情况下,*src* 将被拷贝至 *dst*,使用的函数为 " +"*copy_function*,然后目标会被移除。 对于符号链接,则将在 *dst* 之下或以其本身为名称创建一个指向 *src* " +"目标的新符号链接,并且 *src* 将被移除。" + +#: ../../library/shutil.rst:357 +msgid "" +"If *copy_function* is given, it must be a callable that takes two arguments " +"*src* and *dst*, and will be used to copy *src* to *dst* if " +":func:`os.rename` cannot be used. If the source is a directory, " +":func:`copytree` is called, passing it the :func:`copy_function`. The " +"default *copy_function* is :func:`copy2`. Using :func:`~shutil.copy` as the" +" *copy_function* allows the move to succeed when it is not possible to also " +"copy the metadata, at the expense of not copying any of the metadata." +msgstr "" +"如果给出了 *copy_function*,则它必须为接受两个参数 *src* 和 *dst* 的可调用对象,并将在 :func:`os.rename`" +" 无法使用时被用来将 *src* 拷贝到 *dst*。 如果源是一个目录,则会调用 :func:`copytree`,并向它传入 " +":func:`copy_function`。 默认的 *copy_function* 是 :func:`copy2`。 使用 " +":func:`~shutil.copy` 作为 *copy_function* " +"允许在无法附带拷贝元数据时让移动操作成功执行,但其代价是不拷贝任何元数据。" + +#: ../../library/shutil.rst:365 +msgid "" +"Raises an :ref:`auditing event ` ``shutil.move`` with arguments " +"``src``, ``dst``." +msgstr "引发一个 :ref:`审计事件 ` ``shutil.move`` 并附带参数 ``src``, ``dst``。" + +#: ../../library/shutil.rst:367 +msgid "" +"Added explicit symlink handling for foreign filesystems, thus adapting it to" +" the behavior of GNU's :program:`mv`. Now returns *dst*." +msgstr "为异类文件系统添加了显式的符号链接处理,以便使它适应 GNU 的 :program:`mv` 的行为。 现在会返回 *dst*。" + +#: ../../library/shutil.rst:372 +msgid "Added the *copy_function* keyword argument." +msgstr "增加了 *copy_function* 关键字参数。" + +#: ../../library/shutil.rst:380 +msgid "Accepts a :term:`path-like object` for both *src* and *dst*." +msgstr "接受一个 :term:`path-like object` 作为 *src* 和 *dst*。" + +#: ../../library/shutil.rst:385 +msgid "" +"Return disk usage statistics about the given path as a :term:`named tuple` " +"with the attributes *total*, *used* and *free*, which are the amount of " +"total, used and free space, in bytes. *path* may be a file or a directory." +msgstr "" +"返回给定路径的磁盘使用统计数据,形式为一个 :term:`named tuple`,其中包含 *total*, *used* 和 *free* " +"属性,分别表示总计、已使用和未使用空间的字节数。 *path* 可以是一个文件或是一个目录。" + +#: ../../library/shutil.rst:392 +msgid "On Windows, *path* can now be a file or directory." +msgstr "在 Windows 上,*path* 现在可以是一个文件或目录。" + +#: ../../library/shutil.rst:395 +msgid ":ref:`Availability `: Unix, Windows." +msgstr ":ref:`可用性 `: Unix, Windows。" + +#: ../../library/shutil.rst:399 +msgid "Change owner *user* and/or *group* of the given *path*." +msgstr "修改给定 *path* 的所有者 *user* 和/或 *group*。" + +#: ../../library/shutil.rst:401 +msgid "" +"*user* can be a system user name or a uid; the same applies to *group*. At " +"least one argument is required." +msgstr "*user* 可以是一个系统用户名或 uid;*group* 同样如此。 要求至少有一个参数。" + +#: ../../library/shutil.rst:404 +msgid "See also :func:`os.chown`, the underlying function." +msgstr "另请参阅下层的函数 :func:`os.chown`。" + +#: ../../library/shutil.rst:406 +msgid "" +"Raises an :ref:`auditing event ` ``shutil.chown`` with arguments " +"``path``, ``user``, ``group``." +msgstr "" +"引发一个 :ref:`审计事件 ` ``shutil.chown`` 并附带参数 ``path``, ``user``, " +"``group``。" + +#: ../../library/shutil.rst:409 +msgid ":ref:`Availability `: Unix." +msgstr ":ref:`可用性 `: Unix。" + +#: ../../library/shutil.rst:415 +msgid "" +"Return the path to an executable which would be run if the given *cmd* was " +"called. If no *cmd* would be called, return ``None``." +msgstr "返回当给定的 *cmd* 被调用时将要运行的可执行文件的路径。 如果没有 *cmd* 会被调用则返回 ``None``。" + +#: ../../library/shutil.rst:418 +msgid "" +"*mode* is a permission mask passed to :func:`os.access`, by default " +"determining if the file exists and executable." +msgstr "*mode* 是一个传递给 :func:`os.access` 的权限掩码,在默认情况下将确定文件是否存在并且为可执行文件。" + +#: ../../library/shutil.rst:421 +msgid "" +"When no *path* is specified, the results of :func:`os.environ` are used, " +"returning either the \"PATH\" value or a fallback of :attr:`os.defpath`." +msgstr "" +"当未指定 *path* 时,将会使用 :func:`os.environ` 的结果,返回 \"PATH\" 的值或回退为 " +":attr:`os.defpath`。" + +#: ../../library/shutil.rst:424 +msgid "" +"On Windows, the current directory is always prepended to the *path* whether " +"or not you use the default or provide your own, which is the behavior the " +"command shell uses when finding executables. Additionally, when finding the" +" *cmd* in the *path*, the ``PATHEXT`` environment variable is checked. For " +"example, if you call ``shutil.which(\"python\")``, :func:`which` will search" +" ``PATHEXT`` to know that it should look for ``python.exe`` within the " +"*path* directories. For example, on Windows::" +msgstr "" +"在 Windows 上当前目录总是会被添加为 *path* " +"的第一项,无论你是否使用默认值或提供你自己的路径,这是命令行终端在查找可执行文件时所采用的行为方式。 此外,当在 *path* 中查找 *cmd* " +"时,还会检查 ``PATHEXT`` 环境变量。 例如,如果你调用 ``shutil.which(\"python\")``,:func:`which`" +" 将搜索 ``PATHEXT`` 来确定它要在 *path* 目录中查找 ``python.exe``。 例如,在 Windows 上::" + +#: ../../library/shutil.rst:437 +msgid "" +"The :class:`bytes` type is now accepted. If *cmd* type is :class:`bytes`, " +"the result type is also :class:`bytes`." +msgstr "" +"现在可以接受 :class:`bytes` 类型。 如果 *cmd* 的类型为 :class:`bytes`,结果的类型也将为 " +":class:`bytes`。" + +#: ../../library/shutil.rst:443 +msgid "" +"This exception collects exceptions that are raised during a multi-file " +"operation. For :func:`copytree`, the exception argument is a list of " +"3-tuples (*srcname*, *dstname*, *exception*)." +msgstr "" +"此异常会收集在多文件操作期间所引发的异常。 对于 :func:`copytree`,此异常参数将是一个由三元组 (*srcname*, " +"*dstname*, *exception*) 构成的列表。" + +#: ../../library/shutil.rst:450 +msgid "Platform-dependent efficient copy operations" +msgstr "依赖于具体平台的高效拷贝操作" + +#: ../../library/shutil.rst:452 +msgid "" +"Starting from Python 3.8, all functions involving a file copy " +"(:func:`copyfile`, :func:`~shutil.copy`, :func:`copy2`, :func:`copytree`, " +"and :func:`move`) may use platform-specific \"fast-copy\" syscalls in order " +"to copy the file more efficiently (see :issue:`33671`). \"fast-copy\" means " +"that the copying operation occurs within the kernel, avoiding the use of " +"userspace buffers in Python as in \"``outfd.write(infd.read())``\"." +msgstr "" +"从 Python 3.8 开始,所有涉及文件拷贝的函数 (:func:`copyfile`, :func:`~shutil.copy`, " +":func:`copy2`, :func:`copytree` 以及 :func:`move`) 将会使用平台专属的 \"fast-copy\" " +"系统调用以便更高效地拷贝文件 (参见 :issue:`33671`)。 \"fast-copy\" 意味着拷贝操作将发生于内核之中,避免像在 " +"\"``outfd.write(infd.read())``\" 中那样使用 Python 用户空间的缓冲区。" + +#: ../../library/shutil.rst:460 +msgid "On macOS `fcopyfile`_ is used to copy the file content (not metadata)." +msgstr "在 macOS 上将会使用 `fcopyfile`_ 来拷贝文件内容(不含元数据)。" + +#: ../../library/shutil.rst:462 +msgid "On Linux :func:`os.sendfile` is used." +msgstr "在 Linux 上将会使用 :func:`os.sendfile`。" + +#: ../../library/shutil.rst:464 +msgid "" +"On Windows :func:`shutil.copyfile` uses a bigger default buffer size (1 MiB " +"instead of 64 KiB) and a :func:`memoryview`-based variant of " +":func:`shutil.copyfileobj` is used." +msgstr "" +"在 Windows 上 :func:`shutil.copyfile` 将会使用更大的默认缓冲区(1 MiB 而非 64 KiB)并且会使用基于 " +":func:`memoryview` 的 :func:`shutil.copyfileobj` 变种形式。" + +#: ../../library/shutil.rst:468 +msgid "" +"If the fast-copy operation fails and no data was written in the destination " +"file then shutil will silently fallback on using less efficient " +":func:`copyfileobj` function internally." +msgstr "" +"如果快速拷贝操作失败并且没有数据被写入目标文件,则 shutil 将在内部静默地回退到使用效率较低的 :func:`copyfileobj` 函数。" + +#: ../../library/shutil.rst:477 +msgid "copytree example" +msgstr "copytree 示例" + +#: ../../library/shutil.rst:479 +msgid "An example that uses the :func:`ignore_patterns` helper::" +msgstr "一个使用 :func:`ignore_patterns` 辅助函数的例子::" + +#: ../../library/shutil.rst:485 +msgid "" +"This will copy everything except ``.pyc`` files and files or directories " +"whose name starts with ``tmp``." +msgstr "这将会拷贝除 ``.pyc`` 文件和以 ``tmp`` 打头的文件或目录以外的所有条目." + +#: ../../library/shutil.rst:488 +msgid "" +"Another example that uses the *ignore* argument to add a logging call::" +msgstr "另一个使用 *ignore* 参数来添加记录调用的例子::" + +#: ../../library/shutil.rst:503 +msgid "rmtree example" +msgstr "rmtree 示例" + +#: ../../library/shutil.rst:505 +msgid "" +"This example shows how to remove a directory tree on Windows where some of " +"the files have their read-only bit set. It uses the onerror callback to " +"clear the readonly bit and reattempt the remove. Any subsequent failure will" +" propagate. ::" +msgstr "" +"这个例子演示了如何在 Windows 上删除一个目录树,其中部分文件设置了只读属性位。 它会使用 onerror " +"回调函数来清除只读属性位并再次尝试删除。 任何后续的失败都将被传播。 ::" + +#: ../../library/shutil.rst:523 +msgid "Archiving operations" +msgstr "归档操作" + +#: ../../library/shutil.rst:527 +msgid "Added support for the *xztar* format." +msgstr "添加了对 *xztar* 格式的支持。" + +#: ../../library/shutil.rst:531 +msgid "" +"High-level utilities to create and read compressed and archived files are " +"also provided. They rely on the :mod:`zipfile` and :mod:`tarfile` modules." +msgstr "" +"本模块也提供了用于创建和读取压缩和归档文件的高层级工具。 它们依赖于 :mod:`zipfile` 和 :mod:`tarfile` 模块。" + +#: ../../library/shutil.rst:536 +msgid "Create an archive file (such as zip or tar) and return its name." +msgstr "创建一个归档文件(例如 zip 或 tar)并返回其名称。" + +#: ../../library/shutil.rst:538 +msgid "" +"*base_name* is the name of the file to create, including the path, minus any" +" format-specific extension. *format* is the archive format: one of \"zip\" " +"(if the :mod:`zlib` module is available), \"tar\", \"gztar\" (if the " +":mod:`zlib` module is available), \"bztar\" (if the :mod:`bz2` module is " +"available), or \"xztar\" (if the :mod:`lzma` module is available)." +msgstr "" +"*base_name* 是要创建的文件名称,包括路径,去除任何特定格式的扩展名。 *format* 是归档格式:为 \"zip\" (如果 " +":mod:`zlib` 模块可用), \"tar\", \"gztar\" (如果 :mod:`zlib` 模块可用), \"bztar\" (如果 " +":mod:`bz2` 模块可用) 或 \"xztar\" (如果 :mod:`lzma` 模块可用) 中的一个。" + +#: ../../library/shutil.rst:544 +msgid "" +"*root_dir* is a directory that will be the root directory of the archive, " +"all paths in the archive will be relative to it; for example, we typically " +"chdir into *root_dir* before creating the archive." +msgstr "" +"*root_dir* 是一个目录,它将作为归档文件的根目录,归档中的所有路径都将是它的相对路径;例如,我们通常会在创建归档之前用 chdir 命令切换到" +" *root_dir*。" + +#: ../../library/shutil.rst:548 +msgid "" +"*base_dir* is the directory where we start archiving from; i.e. *base_dir* " +"will be the common prefix of all files and directories in the archive. " +"*base_dir* must be given relative to *root_dir*. See :ref:`shutil-" +"archiving-example-with-basedir` for how to use *base_dir* and *root_dir* " +"together." +msgstr "" +"*base_dir* 是我们要执行归档的起始目录;也就是说 *base_dir* 将成为归档中所有文件和目录共有的路径前缀。 *base_dir* " +"必须相对于 *root_dir* 给出。 请参阅 :ref:`shutil-archiving-example-with-basedir` " +"了解如何同时使用 *base_dir* 和 *root_dir*。" + +#: ../../library/shutil.rst:554 +msgid "*root_dir* and *base_dir* both default to the current directory." +msgstr "*root_dir* 和 *base_dir* 默认均为当前目录。" + +#: ../../library/shutil.rst:556 +msgid "" +"If *dry_run* is true, no archive is created, but the operations that would " +"be executed are logged to *logger*." +msgstr "如果 *dry_run* 为真值,则不会创建归档文件,但将要被执行的操作会被记录到 *logger*。" + +#: ../../library/shutil.rst:559 +msgid "" +"*owner* and *group* are used when creating a tar archive. By default, uses " +"the current owner and group." +msgstr "*owner* 和 *group* 将在创建 tar 归档文件时被使用。 默认会使用当前的所有者和分组。" + +#: ../../library/shutil.rst:562 +msgid "" +"*logger* must be an object compatible with :pep:`282`, usually an instance " +"of :class:`logging.Logger`." +msgstr "*logger* 必须是一个兼容 :pep:`282` 的对象,通常为 :class:`logging.Logger` 的实例。" + +#: ../../library/shutil.rst:565 +msgid "The *verbose* argument is unused and deprecated." +msgstr "*verbose* 参数已不再使用并进入弃用状态。" + +#: ../../library/shutil.rst:567 +msgid "" +"Raises an :ref:`auditing event ` ``shutil.make_archive`` with " +"arguments ``base_name``, ``format``, ``root_dir``, ``base_dir``." +msgstr "" +"引发一个 :ref:`审计事件 ` ``shutil.make_archive`` 并附带参数 ``base_name``, " +"``format``, ``root_dir``, ``base_dir``。" + +#: ../../library/shutil.rst:571 +msgid "This function is not thread-safe." +msgstr "这个函数不是线程安全的。" + +#: ../../library/shutil.rst:573 +msgid "" +"The modern pax (POSIX.1-2001) format is now used instead of the legacy GNU " +"format for archives created with ``format=\"tar\"``." +msgstr "" +"现在对于通过 ``format=\"tar\"`` 创建的归档文件将使用新式的 pax (POSIX.1-2001) 格式而非旧式的 GNU 格式。" + +#: ../../library/shutil.rst:580 +msgid "" +"Return a list of supported formats for archiving. Each element of the " +"returned sequence is a tuple ``(name, description)``." +msgstr "返回支持的归档格式列表。 所返回序列中的每个元素为一个元组 ``(name, description)``。" + +#: ../../library/shutil.rst:583 ../../library/shutil.rst:686 +msgid "By default :mod:`shutil` provides these formats:" +msgstr "默认情况下 :mod:`shutil` 提供以下格式:" + +#: ../../library/shutil.rst:585 +msgid "*zip*: ZIP file (if the :mod:`zlib` module is available)." +msgstr "*zip*: ZIP 文件(如果 :mod:`zlib` 模块可用)。" + +#: ../../library/shutil.rst:586 +msgid "" +"*tar*: Uncompressed tar file. Uses POSIX.1-2001 pax format for new archives." +msgstr "*tar*: 未压缩的 tar 文件。 对于新归档文件将使用 POSIX.1-2001 pax 格式。" + +#: ../../library/shutil.rst:587 ../../library/shutil.rst:691 +msgid "*gztar*: gzip'ed tar-file (if the :mod:`zlib` module is available)." +msgstr "*gztar*: gzip 压缩的 tar 文件(如果 :mod:`zlib` 模块可用)。" + +#: ../../library/shutil.rst:588 ../../library/shutil.rst:692 +msgid "*bztar*: bzip2'ed tar-file (if the :mod:`bz2` module is available)." +msgstr "*bztar*: bzip2 压缩的 tar 文件(如果 :mod:`bz2` 模块可用)。" + +#: ../../library/shutil.rst:589 ../../library/shutil.rst:693 +msgid "*xztar*: xz'ed tar-file (if the :mod:`lzma` module is available)." +msgstr "*xztar*: xz 压缩的 tar 文件(如果 :mod:`lzma` 模块可用)。" + +#: ../../library/shutil.rst:591 +msgid "" +"You can register new formats or provide your own archiver for any existing " +"formats, by using :func:`register_archive_format`." +msgstr "你可以通过使用 :func:`register_archive_format` 注册新的格式或为任何现有格式提供你自己的归档器。" + +#: ../../library/shutil.rst:597 +msgid "Register an archiver for the format *name*." +msgstr "为 *name* 格式注册一个归档器。" + +#: ../../library/shutil.rst:599 +msgid "" +"*function* is the callable that will be used to unpack archives. The " +"callable will receive the *base_name* of the file to create, followed by the" +" *base_dir* (which defaults to :data:`os.curdir`) to start archiving from. " +"Further arguments are passed as keyword arguments: *owner*, *group*, " +"*dry_run* and *logger* (as passed in :func:`make_archive`)." +msgstr "" +"*function* 是将被用来解包归档文件的可调用对象。 该可调用对象将接收要创建文件的 *base_name*,再加上要归档内容的 " +"*base_dir* (其默认值为 :data:`os.curdir`)。 更多参数会被作为关键字参数传入: *owner*, *group*, " +"*dry_run* 和 *logger* (与向 :func:`make_archive` 传入的参数一致)。" + +#: ../../library/shutil.rst:605 +msgid "" +"If given, *extra_args* is a sequence of ``(name, value)`` pairs that will be" +" used as extra keywords arguments when the archiver callable is used." +msgstr "" +"如果给出了 *extra_args*,则其应为一个 ``(name, value)`` 对的序列,将在归档器可调用对象被使用时作为附加的关键字参数。" + +#: ../../library/shutil.rst:608 +msgid "" +"*description* is used by :func:`get_archive_formats` which returns the list " +"of archivers. Defaults to an empty string." +msgstr "" +"*description* 由 :func:`get_archive_formats` 使用,它将返回归档器的列表。 默认值为一个空字符串。" + +#: ../../library/shutil.rst:614 +msgid "Remove the archive format *name* from the list of supported formats." +msgstr "从支持的格式中移除归档格式 *name*。" + +#: ../../library/shutil.rst:619 +msgid "Unpack an archive. *filename* is the full path of the archive." +msgstr "解包一个归档文件。 *filename* 是归档文件的完整路径。" + +#: ../../library/shutil.rst:621 +msgid "" +"*extract_dir* is the name of the target directory where the archive is " +"unpacked. If not provided, the current working directory is used." +msgstr "*extract_dir* 是归档文件解包的目标目录名称。 如果未提供,则将使用当前工作目录。" + +#: ../../library/shutil.rst:624 +msgid "" +"*format* is the archive format: one of \"zip\", \"tar\", \"gztar\", " +"\"bztar\", or \"xztar\". Or any other format registered with " +":func:`register_unpack_format`. If not provided, :func:`unpack_archive` " +"will use the archive file name extension and see if an unpacker was " +"registered for that extension. In case none is found, a :exc:`ValueError` " +"is raised." +msgstr "" +"*format* 是归档格式:应为 \"zip\", \"tar\", \"gztar\", \"bztar\" 或 \"xztar\" 之一。 " +"或者任何通过 :func:`register_unpack_format` 注册的其他格式。 如果未提供,:func:`unpack_archive` " +"将使用归档文件的扩展名来检查是否注册了对应于该扩展名的解包器。 在未找到任何解包器的情况下,将引发 :exc:`ValueError`。" + +#: ../../library/shutil.rst:631 +msgid "" +"The keyword-only *filter* argument, which was added in Python 3.9.17, is " +"passed to the underlying unpacking function. For zip files, *filter* is not " +"accepted. For tar files, it is recommended to set it to ``'data'``, unless " +"using features specific to tar and UNIX-like filesystems. (See " +":ref:`tarfile-extraction-filter` for details.) The ``'data'`` filter will " +"become the default for tar files in Python 3.14." +msgstr "" + +#: ../../library/shutil.rst:640 +msgid "" +"Raises an :ref:`auditing event ` ``shutil.unpack_archive`` with " +"arguments ``filename``, ``extract_dir``, ``format``." +msgstr "" +"引发一个 :ref:`审计事件 ` ``shutil.unpack_archive`` 并附带参数 ``filename``, " +"``extract_dir``, ``format``。" + +#: ../../library/shutil.rst:644 +msgid "" +"Never extract archives from untrusted sources without prior inspection. It " +"is possible that files are created outside of the path specified in the " +"*extract_dir* argument, e.g. members that have absolute filenames starting " +"with \"/\" or filenames with two dots \"..\"." +msgstr "" +"绝不要未经预先检验就从不可靠的源中提取归档文件。 这样有可能会在 *extract_dir* 参数所指定的路径之外创建文件,例如某些成员具有以 " +"\"/\" 打头的绝对路径文件名或是以两个点号 \"..\" 打头的文件名。" + +#: ../../library/shutil.rst:649 +msgid "Accepts a :term:`path-like object` for *filename* and *extract_dir*." +msgstr "接受一个 :term:`path-like object` 作为 *filename* 和 *extract_dir*。" + +#: ../../library/shutil.rst:652 +msgid "Added the *filter* argument." +msgstr "增加了 *filter* 参数。" + +#: ../../library/shutil.rst:657 +msgid "" +"Registers an unpack format. *name* is the name of the format and " +"*extensions* is a list of extensions corresponding to the format, like " +"``.zip`` for Zip files." +msgstr "" +"注册一个解包格式。 *name* 为格式名称而 *extensions* 为对应于该格式的扩展名列表,例如 Zip 文件的扩展名为 ``.zip``。" + +#: ../../library/shutil.rst:661 +msgid "" +"*function* is the callable that will be used to unpack archives. The " +"callable will receive:" +msgstr "*function* 是将被用于解包归档的可调用对象。 该可调用对象将接受:" + +#: ../../library/shutil.rst:664 +msgid "the path of the archive, as a positional argument;" +msgstr "归档的路径,为位置参数;" + +#: ../../library/shutil.rst:665 +msgid "" +"the directory the archive must be extracted to, as a positional argument;" +msgstr "归档要提取到的目录,为位置参数;" + +#: ../../library/shutil.rst:666 +msgid "" +"possibly a *filter* keyword argument, if it was given to " +":func:`unpack_archive`;" +msgstr "可选的 *filter* 关键字参数,如果有提供给 :func:`unpack_archive` 的话;" + +#: ../../library/shutil.rst:668 +msgid "" +"additional keyword arguments, specified by *extra_args* as a sequence of " +"``(name, value)`` tuples." +msgstr "额外的关键字参数,由 ``(name, value)`` 元组组成的序列 *extra_args* 指明。" + +#: ../../library/shutil.rst:671 +msgid "" +"*description* can be provided to describe the format, and will be returned " +"by the :func:`get_unpack_formats` function." +msgstr "可以提供 *description* 来描述该格式,它将被 :func:`get_unpack_formats` 返回。" + +#: ../../library/shutil.rst:677 +msgid "Unregister an unpack format. *name* is the name of the format." +msgstr "撤销注册一个解包格式。 *name* 为格式的名称。" + +#: ../../library/shutil.rst:682 +msgid "" +"Return a list of all registered formats for unpacking. Each element of the " +"returned sequence is a tuple ``(name, extensions, description)``." +msgstr "返回所有已注册的解包格式列表。 所返回序列中的每个元素为一个元组 ``(name, extensions, description)``。" + +#: ../../library/shutil.rst:688 +msgid "" +"*zip*: ZIP file (unpacking compressed files works only if the corresponding " +"module is available)." +msgstr "*zip*: ZIP 文件(只有在相应模块可用时才能解包压缩文件)。" + +#: ../../library/shutil.rst:690 +msgid "*tar*: uncompressed tar file." +msgstr "*tar*: 未压缩的 tar 文件。" + +#: ../../library/shutil.rst:695 +msgid "" +"You can register new formats or provide your own unpacker for any existing " +"formats, by using :func:`register_unpack_format`." +msgstr "你可以通过使用 :func:`register_unpack_format` 注册新的格式或为任何现有格式提供你自己的解包器。" + +#: ../../library/shutil.rst:702 +msgid "Archiving example" +msgstr "归档程序示例" + +#: ../../library/shutil.rst:704 +msgid "" +"In this example, we create a gzip'ed tar-file archive containing all files " +"found in the :file:`.ssh` directory of the user::" +msgstr "在这个示例中,我们创建了一个 gzip 压缩的 tar 归档文件,其中包含用户的 :file:`.ssh` 目录下的所有文件::" + +#: ../../library/shutil.rst:714 +msgid "The resulting archive contains:" +msgstr "结果归档文件中包含有:" + +#: ../../library/shutil.rst:732 +msgid "Archiving example with *base_dir*" +msgstr "使用 *base_dir* 的归档程序示例" + +#: ../../library/shutil.rst:734 +msgid "" +"In this example, similar to the `one above `_, we" +" show how to use :func:`make_archive`, but this time with the usage of " +"*base_dir*. We now have the following directory structure:" +msgstr "" +"在这个例子中,与 `上面的例子 `_ 类似,我们演示了如何使用 " +":func:`make_archive`,但这次是使用 *base_dir*。 我们现在具有如下的目录结构:" + +#: ../../library/shutil.rst:748 +msgid "" +"In the final archive, :file:`please_add.txt` should be included, but " +":file:`do_not_add.txt` should not. Therefore we use the following::" +msgstr "" +"在最终的归档中,应当会包括 :file:`please_add.txt`,但不应当包括 :file:`do_not_add.txt`。 " +"因此我们使用以下代码::" + +#: ../../library/shutil.rst:762 +msgid "Listing the files in the resulting archive gives us:" +msgstr "列出结果归档中的文件我们将会得到:" + +#: ../../library/shutil.rst:772 +msgid "Querying the size of the output terminal" +msgstr "查询输出终端的尺寸" + +#: ../../library/shutil.rst:776 +msgid "Get the size of the terminal window." +msgstr "获取终端窗口的尺寸。" + +#: ../../library/shutil.rst:778 +msgid "" +"For each of the two dimensions, the environment variable, ``COLUMNS`` and " +"``LINES`` respectively, is checked. If the variable is defined and the value" +" is a positive integer, it is used." +msgstr "" +"对于两个维度中的每一个,会分别检查环境变量 ``COLUMNS`` 和 ``LINES``。 如果定义了这些变量并且其值为正整数,则将使用这些值。" + +#: ../../library/shutil.rst:782 +msgid "" +"When ``COLUMNS`` or ``LINES`` is not defined, which is the common case, the " +"terminal connected to :data:`sys.__stdout__` is queried by invoking " +":func:`os.get_terminal_size`." +msgstr "" +"如果未定义 ``COLUMNS`` 或 ``LINES``,这是通常的情况,则连接到 :data:`sys.__stdout__` 的终端将通过唤起 " +":func:`os.get_terminal_size` 被查询。" + +#: ../../library/shutil.rst:786 +msgid "" +"If the terminal size cannot be successfully queried, either because the " +"system doesn't support querying, or because we are not connected to a " +"terminal, the value given in ``fallback`` parameter is used. ``fallback`` " +"defaults to ``(80, 24)`` which is the default size used by many terminal " +"emulators." +msgstr "" +"如果由于系统不支持查询,或是由于我们未连接到某个终端而导致查询终端尺寸不成功,则会使用在 ``fallback`` 形参中给出的值。 " +"``fallback`` 默认为 ``(80, 24)``,这是许多终端模拟器所使用的默认尺寸。" + +#: ../../library/shutil.rst:792 +msgid "The value returned is a named tuple of type :class:`os.terminal_size`." +msgstr "返回的值是一个 :class:`os.terminal_size` 类型的具名元组。" + +#: ../../library/shutil.rst:794 +msgid "" +"See also: The Single UNIX Specification, Version 2, `Other Environment " +"Variables`_." +msgstr "" +"另请参阅: The Single UNIX Specification, Version 2, `Other Environment " +"Variables`_." diff --git a/library/signal.po b/library/signal.po new file mode 100644 index 000000000..c35f4515d --- /dev/null +++ b/library/signal.po @@ -0,0 +1,945 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) 2001-2024, Python Software Foundation +# This file is distributed under the same license as the Python package. +# FIRST AUTHOR , YEAR. +# +# Translators: +# Menghua Xiao , 2018 +# cdarlint , 2019 +# Alpha Du , 2019 +# Freesand Leo , 2024 +# Rafael Fontenelle , 2024 +# +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: Python 3.9\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2024-08-30 16:51+0000\n" +"PO-Revision-Date: 2017-02-16 23:26+0000\n" +"Last-Translator: Rafael Fontenelle , 2024\n" +"Language-Team: Chinese (China) (https://app.transifex.com/python-doc/teams/5390/zh_CN/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: zh_CN\n" +"Plural-Forms: nplurals=1; plural=0;\n" + +#: ../../library/signal.rst:2 +msgid ":mod:`signal` --- Set handlers for asynchronous events" +msgstr ":mod:`signal` --- 设置异步事件处理程序" + +#: ../../library/signal.rst:9 +msgid "This module provides mechanisms to use signal handlers in Python." +msgstr "该模块提供了在 Python 中使用信号处理程序的机制。" + +#: ../../library/signal.rst:13 +msgid "General rules" +msgstr "一般规则" + +#: ../../library/signal.rst:15 +msgid "" +"The :func:`signal.signal` function allows defining custom handlers to be " +"executed when a signal is received. A small number of default handlers are " +"installed: :const:`SIGPIPE` is ignored (so write errors on pipes and sockets" +" can be reported as ordinary Python exceptions) and :const:`SIGINT` is " +"translated into a :exc:`KeyboardInterrupt` exception if the parent process " +"has not changed it." +msgstr "" +":func:`signal.signal` 函数允许定义在接收到信号时执行的自定义处理程序。少量的默认处理程序已经设置: " +":const:`SIGPIPE` 被忽略(因此管道和套接字上的写入错误可以报告为普通的 Python 异常)以及如果父进程没有更改 " +":const:`SIGINT` ,则其会被翻译成 :exc:`KeyboardInterrupt` 异常。" + +#: ../../library/signal.rst:22 +msgid "" +"A handler for a particular signal, once set, remains installed until it is " +"explicitly reset (Python emulates the BSD style interface regardless of the " +"underlying implementation), with the exception of the handler for " +":const:`SIGCHLD`, which follows the underlying implementation." +msgstr "" +"一旦设置,特定信号的处理程序将保持安装,直到它被显式重置( Python 模拟 BSD 样式接口而不管底层实现),但 :const:`SIGCHLD` " +"的处理程序除外,它遵循底层实现。" + +#: ../../library/signal.rst:29 +msgid "Execution of Python signal handlers" +msgstr "执行 Python 信号处理程序" + +#: ../../library/signal.rst:31 +msgid "" +"A Python signal handler does not get executed inside the low-level (C) " +"signal handler. Instead, the low-level signal handler sets a flag which " +"tells the :term:`virtual machine` to execute the corresponding Python signal" +" handler at a later point(for example at the next :term:`bytecode` " +"instruction). This has consequences:" +msgstr "" +"Python 信号处理程序不会在低级( C )信号处理程序中执行。相反,低级信号处理程序设置一个标志,告诉 :term:`virtual " +"machine` 稍后执行相应的 Python 信号处理程序(例如在下一个 :term:`bytecode` 指令)。这会导致:" + +#: ../../library/signal.rst:37 +msgid "" +"It makes little sense to catch synchronous errors like :const:`SIGFPE` or " +":const:`SIGSEGV` that are caused by an invalid operation in C code. Python " +"will return from the signal handler to the C code, which is likely to raise " +"the same signal again, causing Python to apparently hang. From Python 3.3 " +"onwards, you can use the :mod:`faulthandler` module to report on synchronous" +" errors." +msgstr "" +"捕获同步错误是没有意义的,例如 :const:`SIGFPE` 或 :const:`SIGSEGV` ,它们是由 C " +"代码中的无效操作引起的。Python 将从信号处理程序返回到 C 代码,这可能会再次引发相同的信号,导致 Python 显然的挂起。 从Python " +"3.3开始,你可以使用 :mod:`faulthandler` 模块来报告同步错误。" + +#: ../../library/signal.rst:44 +msgid "" +"A long-running calculation implemented purely in C (such as regular " +"expression matching on a large body of text) may run uninterrupted for an " +"arbitrary amount of time, regardless of any signals received. The Python " +"signal handlers will be called when the calculation finishes." +msgstr "" +"纯 C 中实现的长时间运行的计算(例如在大量文本上的正则表达式匹配)可以在任意时间内不间断地运行,而不管接收到任何信号。计算完成后将调用 Python " +"信号处理程序。" + +#: ../../library/signal.rst:49 +msgid "" +"If the handler raises an exception, it will be raised \"out of thin air\" in" +" the main thread. See the :ref:`note below ` for a " +"discussion." +msgstr "" +"如果处理器引发了异常,它将在主线程中“凭空”被引发。 请参阅 :ref:`下面的注释 ` " +"讨论相关细节。" + +#: ../../library/signal.rst:57 +msgid "Signals and threads" +msgstr "信号与线程" + +#: ../../library/signal.rst:59 +msgid "" +"Python signal handlers are always executed in the main Python thread of the " +"main interpreter, even if the signal was received in another thread. This " +"means that signals can't be used as a means of inter-thread communication. " +"You can use the synchronization primitives from the :mod:`threading` module " +"instead." +msgstr "" +"Python 信号处理程序总是会在主 Python 主解释器的主线程中执行,即使信号是在另一个线程中接收的。 这意味着信号不能被用作线程间通信的手段。 " +"你可以改用 :mod:`threading` 模块中的同步原语。" + +#: ../../library/signal.rst:64 +msgid "" +"Besides, only the main thread of the main interpreter is allowed to set a " +"new signal handler." +msgstr "此外,只有主解释器的主线程才被允许设置新的信号处理程序。" + +#: ../../library/signal.rst:68 +msgid "Module contents" +msgstr "模块内容" + +#: ../../library/signal.rst:70 +msgid "" +"signal (SIG*), handler (:const:`SIG_DFL`, :const:`SIG_IGN`) and sigmask " +"(:const:`SIG_BLOCK`, :const:`SIG_UNBLOCK`, :const:`SIG_SETMASK`) related " +"constants listed below were turned into :class:`enums `. " +":func:`getsignal`, :func:`pthread_sigmask`, :func:`sigpending` and " +":func:`sigwait` functions return human-readable :class:`enums " +"`." +msgstr "" +"信号( SIG* ),处理程序( :const:`SIG_DFL` , :const:`SIG_IGN`)和 sigmask( " +":const:`SIG_BLOCK` , :const:`SIG_UNBLOCK` , :const:`SIG_SETMASK` " +")下面列出的相关常量变成了 :class:`enums ` 。 :func:`getsignal` , " +":func:`pthread_sigmask` , :func:`sigpending` 和 :func:`sigwait` 函数返回人类可读的 " +":class:`enums ` 。" + +#: ../../library/signal.rst:80 +msgid "The variables defined in the :mod:`signal` module are:" +msgstr "在 :mod:`signal` 模块中定义的变量是:" + +#: ../../library/signal.rst:85 +msgid "" +"This is one of two standard signal handling options; it will simply perform " +"the default function for the signal. For example, on most systems the " +"default action for :const:`SIGQUIT` is to dump core and exit, while the " +"default action for :const:`SIGCHLD` is to simply ignore it." +msgstr "" +"这是两种标准信号处理选项之一;它只会执行信号的默认函数。 例如,在大多数系统上,对于 :const:`SIGQUIT` " +"的默认操作是转储核心并退出,而对于 :const:`SIGCHLD` 的默认操作是简单地忽略它。" + +#: ../../library/signal.rst:93 +msgid "" +"This is another standard signal handler, which will simply ignore the given " +"signal." +msgstr "这是另一个标准信号处理程序,它将简单地忽略给定的信号。" + +#: ../../library/signal.rst:99 +msgid "Abort signal from :manpage:`abort(3)`." +msgstr "来自 :manpage:`abort(3)` 的中止信号。" + +#: ../../library/signal.rst:103 +msgid "Timer signal from :manpage:`alarm(2)`." +msgstr "来自 :manpage:`alarm(2)` 的计时器信号。" + +#: ../../library/signal.rst:105 ../../library/signal.rst:117 +#: ../../library/signal.rst:123 ../../library/signal.rst:133 +#: ../../library/signal.rst:147 ../../library/signal.rst:165 +#: ../../library/signal.rst:173 ../../library/signal.rst:187 +#: ../../library/signal.rst:193 ../../library/signal.rst:199 +#: ../../library/signal.rst:450 ../../library/signal.rst:457 +msgid ":ref:`Availability `: Unix." +msgstr ":ref:`可用性 `: Unix。" + +#: ../../library/signal.rst:109 +msgid "Interrupt from keyboard (CTRL + BREAK)." +msgstr "来自键盘的中断 (CTRL + BREAK)。" + +#: ../../library/signal.rst:111 ../../library/signal.rst:218 +#: ../../library/signal.rst:228 +msgid ":ref:`Availability `: Windows." +msgstr ":ref:`可用性 `: Windows。" + +#: ../../library/signal.rst:115 +msgid "Bus error (bad memory access)." +msgstr "总线错误 (非法的内存访问)。" + +#: ../../library/signal.rst:121 +msgid "Child process stopped or terminated." +msgstr "子进程被停止或终结。" + +#: ../../library/signal.rst:127 +msgid "Alias to :data:`SIGCHLD`." +msgstr ":data:`SIGCHLD` 的别名。" + +#: ../../library/signal.rst:131 +msgid "Continue the process if it is currently stopped" +msgstr "如果进程当前已停止则继续执行它" + +#: ../../library/signal.rst:137 +msgid "Floating-point exception. For example, division by zero." +msgstr "浮点异常。 例如除以零。" + +#: ../../library/signal.rst:140 +msgid "" +":exc:`ZeroDivisionError` is raised when the second argument of a division or" +" modulo operation is zero." +msgstr "当除法或求余运算的第二个参数为零时会引发 :exc:`ZeroDivisionError` 。" + +#: ../../library/signal.rst:145 +msgid "" +"Hangup detected on controlling terminal or death of controlling process." +msgstr "在控制终端上检测到挂起或控制进程的终止。" + +#: ../../library/signal.rst:151 +msgid "Illegal instruction." +msgstr "非法指令。" + +#: ../../library/signal.rst:155 +msgid "Interrupt from keyboard (CTRL + C)." +msgstr "来自键盘的中断 (CTRL + C)。" + +#: ../../library/signal.rst:157 +msgid "Default action is to raise :exc:`KeyboardInterrupt`." +msgstr "默认的动作是引发 :exc:`KeyboardInterrupt`。" + +#: ../../library/signal.rst:161 +msgid "Kill signal." +msgstr "终止信号。" + +#: ../../library/signal.rst:163 +msgid "It cannot be caught, blocked, or ignored." +msgstr "它不能被捕获、阻塞或忽略。" + +#: ../../library/signal.rst:169 +msgid "Broken pipe: write to pipe with no readers." +msgstr "损坏的管道:写入到没有读取器的管道。" + +#: ../../library/signal.rst:171 +msgid "Default action is to ignore the signal." +msgstr "默认的动作是忽略此信号。" + +#: ../../library/signal.rst:177 +msgid "Segmentation fault: invalid memory reference." +msgstr "段错误:无效的内存引用。" + +#: ../../library/signal.rst:181 +msgid "Termination signal." +msgstr "终结信号。" + +#: ../../library/signal.rst:185 +msgid "User-defined signal 1." +msgstr "用户自定义信号 1。" + +#: ../../library/signal.rst:191 +msgid "User-defined signal 2." +msgstr "用户自定义信号 2。" + +#: ../../library/signal.rst:197 +msgid "Window resize signal." +msgstr "窗口调整大小信号。" + +#: ../../library/signal.rst:203 +msgid "" +"All the signal numbers are defined symbolically. For example, the hangup " +"signal is defined as :const:`signal.SIGHUP`; the variable names are " +"identical to the names used in C programs, as found in ````. The " +"Unix man page for ':c:func:`signal`' lists the existing signals (on some " +"systems this is :manpage:`signal(2)`, on others the list is in " +":manpage:`signal(7)`). Note that not all systems define the same set of " +"signal names; only those names defined by the system are defined by this " +"module." +msgstr "" +"所有信号编号都是符号化定义的。 例如,挂起信号被定义为 :const:`signal.SIGHUP`;变量的名称与 C 程序中使用的名称相同,具体见 " +"````。 ':c:func:`signal`' 的 Unix 手册页面列出了现有的信号 (在某些系统上这是 " +":manpage:`signal(2)`,在其他系统中此列表则是在 :manpage:`signal(7)` 中)。 " +"请注意并非所有系统都会定义相同的信号名称集;只有系统所定义的名称才会由此模块来定义。" + +#: ../../library/signal.rst:214 +msgid "" +"The signal corresponding to the :kbd:`Ctrl+C` keystroke event. This signal " +"can only be used with :func:`os.kill`." +msgstr "对应于 :kbd:`Ctrl+C` 击键事件的信号。此信号只能用于 :func:`os.kill` 。" + +#: ../../library/signal.rst:224 +msgid "" +"The signal corresponding to the :kbd:`Ctrl+Break` keystroke event. This " +"signal can only be used with :func:`os.kill`." +msgstr "对应于 :kbd:`Ctrl+Break` 击键事件的信号。此信号只能用于 :func:`os.kill` 。" + +#: ../../library/signal.rst:234 +msgid "One more than the number of the highest signal number." +msgstr "比最高信号数多一。" + +#: ../../library/signal.rst:239 +msgid "" +"Decrements interval timer in real time, and delivers :const:`SIGALRM` upon " +"expiration." +msgstr "实时递减间隔计时器,并在到期时发送 :const:`SIGALRM` 。" + +#: ../../library/signal.rst:245 +msgid "" +"Decrements interval timer only when the process is executing, and delivers " +"SIGVTALRM upon expiration." +msgstr "仅在进程执行时递减间隔计时器,并在到期时发送 SIGVTALRM 。" + +#: ../../library/signal.rst:251 +msgid "" +"Decrements interval timer both when the process executes and when the system" +" is executing on behalf of the process. Coupled with ITIMER_VIRTUAL, this " +"timer is usually used to profile the time spent by the application in user " +"and kernel space. SIGPROF is delivered upon expiration." +msgstr "" +"当进程执行时以及当系统替进程执行时都会减小间隔计时器。 这个计时器与 ITIMER_VIRTUAL " +"相配结,通常被用于分析应用程序在用户和内核空间中花费的时间。 SIGPROF 会在超期时被发送。" + +#: ../../library/signal.rst:259 +msgid "" +"A possible value for the *how* parameter to :func:`pthread_sigmask` " +"indicating that signals are to be blocked." +msgstr ":func:`pthread_sigmask` 的 *how* 形参的一个可能的值,表明信号将会被阻塞。" + +#: ../../library/signal.rst:266 +msgid "" +"A possible value for the *how* parameter to :func:`pthread_sigmask` " +"indicating that signals are to be unblocked." +msgstr ":func:`pthread_sigmask` 的 *how* 形参的是个可能的值,表明信号将被解除阻塞。" + +#: ../../library/signal.rst:273 +msgid "" +"A possible value for the *how* parameter to :func:`pthread_sigmask` " +"indicating that the signal mask is to be replaced." +msgstr ":func:`pthread_sigmask` 的 *how* 形参的一个可能的值,表明信号掩码将要被替换。" + +#: ../../library/signal.rst:279 +msgid "The :mod:`signal` module defines one exception:" +msgstr ":mod:`signal` 模块定义了一个异常:" + +#: ../../library/signal.rst:283 +msgid "" +"Raised to signal an error from the underlying :func:`setitimer` or " +":func:`getitimer` implementation. Expect this error if an invalid interval " +"timer or a negative time is passed to :func:`setitimer`. This error is a " +"subtype of :exc:`OSError`." +msgstr "" +"作为来自下层 :func:`setitimer` 或 :func:`getitimer` 实现错误的信号被引发。 如果将无效的定时器或负的时间值传给 " +":func:`setitimer` 就导致这个错误。 此错误是 :exc:`OSError` 的子类型。" + +#: ../../library/signal.rst:288 +msgid "" +"This error used to be a subtype of :exc:`IOError`, which is now an alias of " +":exc:`OSError`." +msgstr "此错误是 :exc:`IOError` 的子类型,现在则是 :exc:`OSError` 的别名。" + +#: ../../library/signal.rst:293 +msgid "The :mod:`signal` module defines the following functions:" +msgstr ":mod:`signal` 模块定义了以下函数:" + +#: ../../library/signal.rst:298 +msgid "" +"If *time* is non-zero, this function requests that a :const:`SIGALRM` signal" +" be sent to the process in *time* seconds. Any previously scheduled alarm is" +" canceled (only one alarm can be scheduled at any time). The returned value" +" is then the number of seconds before any previously set alarm was to have " +"been delivered. If *time* is zero, no alarm is scheduled, and any scheduled " +"alarm is canceled. If the return value is zero, no alarm is currently " +"scheduled." +msgstr "" +"如果 *time* 值非零,则此函数将要求将一个 :const:`SIGALRM` 信号在 *time* 秒内发往进程。 " +"任何在之前排入计划的警报都会被取消(在任何时刻都只能有一个警报被排入计划)。 后续的返回值将是任何之前设置的警报被传入之前的秒数。 如果 *time* " +"值为零,则不会将任何警报排入计划,并且任何已排入计划的警报都会被取消。 如果返回值为零,则目前没有任何警报被排入计划。" + +#: ../../library/signal.rst:306 +msgid "" +":ref:`Availability `: Unix. See the man page " +":manpage:`alarm(2)` for further information." +msgstr ":ref:`可用性 `: Unix。 更多信息请参见手册页面 :manpage:`alarm(2)`。" + +#: ../../library/signal.rst:311 +msgid "" +"Return the current signal handler for the signal *signalnum*. The returned " +"value may be a callable Python object, or one of the special values " +":const:`signal.SIG_IGN`, :const:`signal.SIG_DFL` or :const:`None`. Here, " +":const:`signal.SIG_IGN` means that the signal was previously ignored, " +":const:`signal.SIG_DFL` means that the default way of handling the signal " +"was previously in use, and ``None`` means that the previous signal handler " +"was not installed from Python." +msgstr "" +"返回当前用于信号 *signalnum* 的信号处理程序。 返回值可以是一个 Python 可调用对象,或是特殊值 " +":const:`signal.SIG_IGN`, :const:`signal.SIG_DFL` 或 :const:`None` 之一。 " +"在这里,:const:`signal.SIG_IGN` 表示信号在之前被忽略,:const:`signal.SIG_DFL` " +"表示之前在使用默认的信号处理方式,而 ``None`` 表示之前的信号处理程序未由 Python 安装。" + +#: ../../library/signal.rst:322 +msgid "" +"Return the system description of the signal *signalnum*, such as " +"\"Interrupt\", \"Segmentation fault\", etc. Returns :const:`None` if the " +"signal is not recognized." +msgstr "" +"返回信号 *signalnum* 的系统描述,例如 \"Interrupt\", \"Segmentation fault\" 等等。 " +"如果信号无法被识别则返回 :const:`None`。" + +#: ../../library/signal.rst:331 +msgid "" +"Return the set of valid signal numbers on this platform. This can be less " +"than ``range(1, NSIG)`` if some signals are reserved by the system for " +"internal use." +msgstr "返回本平台上的有效信号编号集。 这可能会少于 ``range(1, NSIG)``,如果某些信号被系统保留作为内部使用的话。" + +#: ../../library/signal.rst:340 +msgid "" +"Cause the process to sleep until a signal is received; the appropriate " +"handler will then be called. Returns nothing." +msgstr "使进程休眠直至接收到一个信号;然后将会调用适当的处理程序。 返回空值。" + +#: ../../library/signal.rst:345 +msgid "" +":ref:`Availability `: Unix. See the man page " +":manpage:`signal(2)` for further information." +msgstr ":ref:`可用性 `: Unix。 更多信息请参见手册页面 :manpage:`signal(2)`。" + +#: ../../library/signal.rst:346 +msgid "" +"See also :func:`sigwait`, :func:`sigwaitinfo`, :func:`sigtimedwait` and " +":func:`sigpending`." +msgstr "" +"另请参阅 :func:`sigwait`, :func:`sigwaitinfo`, :func:`sigtimedwait` 和 " +":func:`sigpending`。" + +#: ../../library/signal.rst:352 +msgid "Sends a signal to the calling process. Returns nothing." +msgstr "向调用方进程发送一个信号。 返回空值。" + +#: ../../library/signal.rst:359 +msgid "" +"Send signal *sig* to the process referred to by file descriptor *pidfd*. " +"Python does not currently support the *siginfo* parameter; it must be " +"``None``. The *flags* argument is provided for future extensions; no flag " +"values are currently defined." +msgstr "" +"发送信号 *sig* 到文件描述符 *pidfd* 所指向的进程。 Python 目前不支持 *siginfo* 形参;它必须为 ``None``。 " +"提供 *flags* 参数是为了将来扩展;当前未定义旗标值。" + +#: ../../library/signal.rst:364 +msgid "See the :manpage:`pidfd_send_signal(2)` man page for more information." +msgstr "更多信息请参阅 :manpage:`pidfd_send_signal(2)` 手册页面。" + +#: ../../library/signal.rst:366 +msgid ":ref:`Availability `: Linux 5.1+" +msgstr ":ref:`可用性 `: Linux 5.1+" + +#: ../../library/signal.rst:372 +msgid "" +"Send the signal *signalnum* to the thread *thread_id*, another thread in the" +" same process as the caller. The target thread can be executing any code " +"(Python or not). However, if the target thread is executing the Python " +"interpreter, the Python signal handlers will be :ref:`executed by the main " +"thread of the main interpreter `. Therefore, the only " +"point of sending a signal to a particular Python thread would be to force a " +"running system call to fail with :exc:`InterruptedError`." +msgstr "" +"将信号 *signalnum* 发送至与调用者在同一进程中另一线程 *thread_id*。 目标线程可被用于执行任何代码(Python或其它)。 " +"但是,如果目标线程是在执行 Python 解释器,则 Python 信号处理程序将 :ref:`由主解释器的主线程来执行 `。 因此,将信号发送给特定 Python 线程的唯一作用在于强制让一个正在运行的系统调用失败并抛出 " +":exc:`InterruptedError`。" + +#: ../../library/signal.rst:380 +msgid "" +"Use :func:`threading.get_ident()` or the :attr:`~threading.Thread.ident` " +"attribute of :class:`threading.Thread` objects to get a suitable value for " +"*thread_id*." +msgstr "" +"使用 :func:`threading.get_ident()` 或 :class:`threading.Thread` 对象的 " +":attr:`~threading.Thread.ident` 属性为 *thread_id* 获取合适的值。" + +#: ../../library/signal.rst:384 +msgid "" +"If *signalnum* is 0, then no signal is sent, but error checking is still " +"performed; this can be used to check if the target thread is still running." +msgstr "如果 *signalnum* 为 0,则不会发送信号,但仍然会执行错误检测;这可被用来检测目标线程是否仍在运行。" + +#: ../../library/signal.rst:387 +msgid "" +"Raises an :ref:`auditing event ` ``signal.pthread_kill`` with " +"arguments ``thread_id``, ``signalnum``." +msgstr "" +"引发一个 :ref:`审计事件 ` ``signal.pthread_kill`` 并附带参数 ``thread_id``, " +"``signalnum``。" + +#: ../../library/signal.rst:391 +msgid "" +":ref:`Availability `: Unix. See the man page " +":manpage:`pthread_kill(3)` for further information." +msgstr "" +":ref:`可用性 `: Unix。 更多信息请参见手册页面 :manpage:`pthread_kill(3)`。" + +#: ../../library/signal.rst:392 +msgid "See also :func:`os.kill`." +msgstr "另请参阅 :func:`os.kill`。" + +#: ../../library/signal.rst:399 +msgid "" +"Fetch and/or change the signal mask of the calling thread. The signal mask " +"is the set of signals whose delivery is currently blocked for the caller. " +"Return the old signal mask as a set of signals." +msgstr "获取和/或修改调用方线程的信号掩码。 信号掩码是一组传送过程目前为调用者而阻塞的信号集。 返回旧的信号掩码作为一组信号。" + +#: ../../library/signal.rst:403 +msgid "" +"The behavior of the call is dependent on the value of *how*, as follows." +msgstr "该调用的行为取决于 *how* 的值,具体见下。" + +#: ../../library/signal.rst:405 +msgid "" +":data:`SIG_BLOCK`: The set of blocked signals is the union of the current " +"set and the *mask* argument." +msgstr ":data:`SIG_BLOCK`: 被阻塞信号集是当前集与 *mask* 参数的并集。" + +#: ../../library/signal.rst:407 +msgid "" +":data:`SIG_UNBLOCK`: The signals in *mask* are removed from the current set " +"of blocked signals. It is permissible to attempt to unblock a signal which " +"is not blocked." +msgstr ":data:`SIG_UNBLOCK`: *mask* 中的信号会从当前已阻塞信号集中被移除。 允许尝试取消对一个非阻塞信号的阻塞。" + +#: ../../library/signal.rst:410 +msgid "" +":data:`SIG_SETMASK`: The set of blocked signals is set to the *mask* " +"argument." +msgstr ":data:`SIG_SETMASK`: 已阻塞信号集会被设为 *mask* 参数的值。" + +#: ../../library/signal.rst:413 +msgid "" +"*mask* is a set of signal numbers (e.g. {:const:`signal.SIGINT`, " +":const:`signal.SIGTERM`}). Use :func:`~signal.valid_signals` for a full mask" +" including all signals." +msgstr "" +"*mask* 是一个信号编号集合 (例如 {:const:`signal.SIGINT`, :const:`signal.SIGTERM`})。 请使用" +" :func:`~signal.valid_signals` 表示包含所有信号的完全掩码。" + +#: ../../library/signal.rst:417 +msgid "" +"For example, ``signal.pthread_sigmask(signal.SIG_BLOCK, [])`` reads the " +"signal mask of the calling thread." +msgstr "例如,``signal.pthread_sigmask(signal.SIG_BLOCK, [])`` 会读取调用方线程的信号掩码。" + +#: ../../library/signal.rst:420 +msgid ":data:`SIGKILL` and :data:`SIGSTOP` cannot be blocked." +msgstr ":data:`SIGKILL` 和 :data:`SIGSTOP` 不能被阻塞。" + +#: ../../library/signal.rst:424 +msgid "" +":ref:`Availability `: Unix. See the man page " +":manpage:`sigprocmask(3)` and :manpage:`pthread_sigmask(3)` for further " +"information." +msgstr "" +":ref:`可用性 `: Unix。 更多信息请参见手册页面 :manpage:`sigprocmask(3)` 和 " +":manpage:`pthread_sigmask(3)`。" + +#: ../../library/signal.rst:425 +msgid "See also :func:`pause`, :func:`sigpending` and :func:`sigwait`." +msgstr "另请参阅 :func:`pause`, :func:`sigpending` 和 :func:`sigwait`。" + +#: ../../library/signal.rst:432 +msgid "" +"Sets given interval timer (one of :const:`signal.ITIMER_REAL`, " +":const:`signal.ITIMER_VIRTUAL` or :const:`signal.ITIMER_PROF`) specified by " +"*which* to fire after *seconds* (float is accepted, different from " +":func:`alarm`) and after that every *interval* seconds (if *interval* is " +"non-zero). The interval timer specified by *which* can be cleared by setting" +" *seconds* to zero." +msgstr "" +"设置由 *which* 指明的给定间隔计时器 (:const:`signal.ITIMER_REAL`, " +":const:`signal.ITIMER_VIRTUAL` 或 :const:`signal.ITIMER_PROF` 之一) 在 *seconds*" +" 秒 (接受浮点数值,为与 :func:`alarm` 之差) 之后开始并在每 *interval* 秒间隔时 (如果 *interval* 不为零) " +"启动。 由 *which* 指明的间隔计时器可通过将 *seconds* 设为零来清空。" + +#: ../../library/signal.rst:439 +msgid "" +"When an interval timer fires, a signal is sent to the process. The signal " +"sent is dependent on the timer being used; :const:`signal.ITIMER_REAL` will " +"deliver :const:`SIGALRM`, :const:`signal.ITIMER_VIRTUAL` sends " +":const:`SIGVTALRM`, and :const:`signal.ITIMER_PROF` will deliver " +":const:`SIGPROF`." +msgstr "" +"当一个间隔计时器启动时,会有信号发送至进程。 所发送的具体信号取决于所使用的计时器;:const:`signal.ITIMER_REAL` 将发送 " +":const:`SIGALRM`, :const:`signal.ITIMER_VIRTUAL` 将发送 :const:`SIGVTALRM`, 而 " +":const:`signal.ITIMER_PROF` 将发送 :const:`SIGPROF`." + +#: ../../library/signal.rst:445 +msgid "The old values are returned as a tuple: (delay, interval)." +msgstr "原有的值会以元组: (delay, interval) 的形式被返回。" + +#: ../../library/signal.rst:447 +msgid "" +"Attempting to pass an invalid interval timer will cause an " +":exc:`ItimerError`." +msgstr "尝试传入无效的计时器将导致 :exc:`ItimerError`。" + +#: ../../library/signal.rst:455 +msgid "Returns current value of a given interval timer specified by *which*." +msgstr "返回由 *which* 指明的给定间隔计时器当前的值。" + +#: ../../library/signal.rst:462 +msgid "" +"Set the wakeup file descriptor to *fd*. When a signal is received, the " +"signal number is written as a single byte into the fd. This can be used by " +"a library to wakeup a poll or select call, allowing the signal to be fully " +"processed." +msgstr "" +"将唤醒文件描述符设为 *fd*。 当接收到信号时,会将信号编号以单个字节的形式写入 fd。 这可被其它库用来唤醒一次 poll 或 select " +"调用,以允许该信号被完全地处理。" + +#: ../../library/signal.rst:467 +msgid "" +"The old wakeup fd is returned (or -1 if file descriptor wakeup was not " +"enabled). If *fd* is -1, file descriptor wakeup is disabled. If not -1, " +"*fd* must be non-blocking. It is up to the library to remove any bytes from" +" *fd* before calling poll or select again." +msgstr "" +"原有的唤醒 fd 会被返回(或者如果未启用文件描述符唤醒则返回 -1)。 如果 *fd* 为 -1,文件描述符唤醒会被禁用。 如果不为 -1,则 " +"*fd* 必须为非阻塞型。 需要由库来负责在重新调用 poll 或 select 之前从 *fd* 移除任何字节数据。" + +#: ../../library/signal.rst:472 ../../library/signal.rst:526 +msgid "" +"When threads are enabled, this function can only be called from :ref:`the " +"main thread of the main interpreter `; attempting to " +"call it from other threads will cause a :exc:`ValueError` exception to be " +"raised." +msgstr "" +"当启用线程用时,此函数只能从 :ref:`主解释器的主线程 ` 被调用;尝试从另一线程调用它将导致 " +":exc:`ValueError` 异常被引发。" + +#: ../../library/signal.rst:477 +msgid "" +"There are two common ways to use this function. In both approaches, you use " +"the fd to wake up when a signal arrives, but then they differ in how they " +"determine *which* signal or signals have arrived." +msgstr "" +"使用此函数有两种通常的方式。 在两种方式下,当有信号到达时你都是用 fd 来唤醒,但之后它们在确定达到的一个或多个信号 *which* 时存在差异。" + +#: ../../library/signal.rst:482 +msgid "" +"In the first approach, we read the data out of the fd's buffer, and the byte" +" values give you the signal numbers. This is simple, but in rare cases it " +"can run into a problem: generally the fd will have a limited amount of " +"buffer space, and if too many signals arrive too quickly, then the buffer " +"may become full, and some signals may be lost. If you use this approach, " +"then you should set ``warn_on_full_buffer=True``, which will at least cause " +"a warning to be printed to stderr when signals are lost." +msgstr "" +"在第一种方式下,我们从 fd 的缓冲区读取数据,这些字节值会给你信号编号。 这种方式很简单,但在少数情况下会发生问题:通常 fd " +"将有缓冲区空间大小限制,如果信号到达得太多且太快,缓冲区可能会爆满,有些信号可能丢失。 如果你使用此方式,则你应当设置 " +"``warn_on_full_buffer=True``,当信号丢失时这至少能将警告消息打印到 stderr。" + +#: ../../library/signal.rst:491 +msgid "" +"In the second approach, we use the wakeup fd *only* for wakeups, and ignore " +"the actual byte values. In this case, all we care about is whether the fd's " +"buffer is empty or non-empty; a full buffer doesn't indicate a problem at " +"all. If you use this approach, then you should set " +"``warn_on_full_buffer=False``, so that your users are not confused by " +"spurious warning messages." +msgstr "" +"在第二种方式下,我们 *只会* 将唤醒 fd 用于唤醒,而忽略实际的字节值。 在此情况下,我们所关心的只有 fd " +"的缓冲区为空还是不为空;爆满的缓冲区完全不会导致问题。 如果你使用此方式,则你应当设置 " +"``warn_on_full_buffer=False``,这样你的用户就不会被虚假的警告消息所迷惑。" + +#: ../../library/signal.rst:498 +msgid "On Windows, the function now also supports socket handles." +msgstr "在 Windows 上,此函数现在也支持套接字处理。" + +#: ../../library/signal.rst:501 +msgid "Added ``warn_on_full_buffer`` parameter." +msgstr "添加了 ``warn_on_full_buffer`` 形参。" + +#: ../../library/signal.rst:506 +msgid "" +"Change system call restart behaviour: if *flag* is :const:`False`, system " +"calls will be restarted when interrupted by signal *signalnum*, otherwise " +"system calls will be interrupted. Returns nothing." +msgstr "" +"更改系统调用重启行为:如果 *flag* 为 :const:`False`,系统调用将在被信号 *signalnum* " +"中断时重启,否则系统调用将被中断。 返回空值。" + +#: ../../library/signal.rst:512 +msgid "" +":ref:`Availability `: Unix. See the man page " +":manpage:`siginterrupt(3)` for further information." +msgstr "" +":ref:`可用性 `: Unix。 更多信息请参见手册页面 :manpage:`siginterrupt(3)`。" + +#: ../../library/signal.rst:513 +msgid "" +"Note that installing a signal handler with :func:`signal` will reset the " +"restart behaviour to interruptible by implicitly calling " +":c:func:`siginterrupt` with a true *flag* value for the given signal." +msgstr "" +"请注意用 :func:`signal` 安装信号处理程序将重启行为重置为可通过显式调用 :c:func:`siginterrupt` 并为给定信号的 " +"*flag* 设置真值来实现中断。" + +#: ../../library/signal.rst:520 +msgid "" +"Set the handler for signal *signalnum* to the function *handler*. *handler*" +" can be a callable Python object taking two arguments (see below), or one of" +" the special values :const:`signal.SIG_IGN` or :const:`signal.SIG_DFL`. The" +" previous signal handler will be returned (see the description of " +":func:`getsignal` above). (See the Unix man page :manpage:`signal(2)` for " +"further information.)" +msgstr "" +"将信号 *signalnum* 的处理程序设为函数 *handler*。 *handler* 可以为接受两个参数(见下)的 Python " +"可调用对象,或者为特殊值 :const:`signal.SIG_IGN` 或 :const:`signal.SIG_DFL` 之一。 " +"之前的信号处理程序将被返回(参见上文 :func:`getsignal` 的描述)。 (更多信息请参阅 Unix 手册页面 " +":manpage:`signal(2)`。)" + +#: ../../library/signal.rst:531 +msgid "" +"The *handler* is called with two arguments: the signal number and the " +"current stack frame (``None`` or a frame object; for a description of frame " +"objects, see the :ref:`description in the type hierarchy ` or" +" see the attribute descriptions in the :mod:`inspect` module)." +msgstr "" +"*handler* 将附带两个参数调用:信号编号和当前堆栈帧 (``None`` 或一个帧对象;有关帧对象的描述请参阅 :ref:`类型层级结构描述 " +"` 或者参阅 :mod:`inspect` 模块中的属性描述)。" + +#: ../../library/signal.rst:536 +msgid "" +"On Windows, :func:`signal` can only be called with :const:`SIGABRT`, " +":const:`SIGFPE`, :const:`SIGILL`, :const:`SIGINT`, :const:`SIGSEGV`, " +":const:`SIGTERM`, or :const:`SIGBREAK`. A :exc:`ValueError` will be raised " +"in any other case. Note that not all systems define the same set of signal " +"names; an :exc:`AttributeError` will be raised if a signal name is not " +"defined as ``SIG*`` module level constant." +msgstr "" +"在 Windows 上,:func:`signal` 调用只能附带 :const:`SIGABRT`, :const:`SIGFPE`, " +":const:`SIGILL`, :const:`SIGINT`, :const:`SIGSEGV`, :const:`SIGTERM` 或 " +":const:`SIGBREAK`。 任何其他值都将引发 :exc:`ValueError`。 " +"请注意不是所有系统都定义了同样的信号名称集合;如果一个信号名称未被定义为 ``SIG*`` 模块层级常量则将引发 " +":exc:`AttributeError`。" + +#: ../../library/signal.rst:547 +msgid "" +"Examine the set of signals that are pending for delivery to the calling " +"thread (i.e., the signals which have been raised while blocked). Return the" +" set of the pending signals." +msgstr "检查正在等待传送给调用方线程的信号集合(即在阻塞期间被引发的信号)。 返回正在等待的信号集合。" + +#: ../../library/signal.rst:553 +msgid "" +":ref:`Availability `: Unix. See the man page " +":manpage:`sigpending(2)` for further information." +msgstr "" +":ref:`可用性 `: Unix。 更多信息请参见手册页面 :manpage:`sigpending(2)`。" + +#: ../../library/signal.rst:554 +msgid "See also :func:`pause`, :func:`pthread_sigmask` and :func:`sigwait`." +msgstr "另请参阅 :func:`pause`, :func:`pthread_sigmask` 和 :func:`sigwait`。" + +#: ../../library/signal.rst:561 +msgid "" +"Suspend execution of the calling thread until the delivery of one of the " +"signals specified in the signal set *sigset*. The function accepts the " +"signal (removes it from the pending list of signals), and returns the signal" +" number." +msgstr "" +"挂起调用方线程的执行直到信号集合 *sigset* 中指定的信号之一被传送。 此函数会接受该信号(将其从等待信号列表中移除),并返回信号编号。" + +#: ../../library/signal.rst:567 +msgid "" +":ref:`Availability `: Unix. See the man page " +":manpage:`sigwait(3)` for further information." +msgstr ":ref:`可用性 `: Unix。 更多信息请参见手册页面 :manpage:`sigwait(3)`。" + +#: ../../library/signal.rst:568 +msgid "" +"See also :func:`pause`, :func:`pthread_sigmask`, :func:`sigpending`, " +":func:`sigwaitinfo` and :func:`sigtimedwait`." +msgstr "" +"另请参阅 :func:`pause`, :func:`pthread_sigmask`, :func:`sigpending`, " +":func:`sigwaitinfo` 和 :func:`sigtimedwait`。" + +#: ../../library/signal.rst:576 +msgid "" +"Suspend execution of the calling thread until the delivery of one of the " +"signals specified in the signal set *sigset*. The function accepts the " +"signal and removes it from the pending list of signals. If one of the " +"signals in *sigset* is already pending for the calling thread, the function " +"will return immediately with information about that signal. The signal " +"handler is not called for the delivered signal. The function raises an " +":exc:`InterruptedError` if it is interrupted by a signal that is not in " +"*sigset*." +msgstr "" +"挂起调用方线程的执行直到信号集合 *sigset* 中指定的信号之一被传送。 此函数会接受该信号并将其从等待信号列表中移除。 如果 *sigset* " +"中的信号之一已经在等待调用方线程,此函数将立即返回并附带有关该信号的信息。 被传送信号的信号处理程序不会被调用。 如果该函数被某个不在 *sigset*" +" 中的信号中断则会引发 :exc:`InterruptedError`。" + +#: ../../library/signal.rst:585 +msgid "" +"The return value is an object representing the data contained in the " +":c:type:`siginfo_t` structure, namely: :attr:`si_signo`, :attr:`si_code`, " +":attr:`si_errno`, :attr:`si_pid`, :attr:`si_uid`, :attr:`si_status`, " +":attr:`si_band`." +msgstr "" +"返回值是一个代表 :c:type:`siginfo_t` 结构体所包含数据的对象,具体为: :attr:`si_signo`, " +":attr:`si_code`, :attr:`si_errno`, :attr:`si_pid`, :attr:`si_uid`, " +":attr:`si_status`, :attr:`si_band`。" + +#: ../../library/signal.rst:592 +msgid "" +":ref:`Availability `: Unix. See the man page " +":manpage:`sigwaitinfo(2)` for further information." +msgstr "" +":ref:`可用性 `: Unix。 更多信息请参见手册页面 :manpage:`sigwaitinfo(2)`。" + +#: ../../library/signal.rst:593 +msgid "See also :func:`pause`, :func:`sigwait` and :func:`sigtimedwait`." +msgstr "另请参阅 :func:`pause`, :func:`sigwait` 和 :func:`sigtimedwait`。" + +#: ../../library/signal.rst:597 +msgid "" +"The function is now retried if interrupted by a signal not in *sigset* and " +"the signal handler does not raise an exception (see :pep:`475` for the " +"rationale)." +msgstr "当被某个 不在 *sigset* 中的信号中断时本函数将进行重试并且信号处理程序不会引发异常(请参阅 :pep:`475` 了解其理由)。" + +#: ../../library/signal.rst:605 +msgid "" +"Like :func:`sigwaitinfo`, but takes an additional *timeout* argument " +"specifying a timeout. If *timeout* is specified as :const:`0`, a poll is " +"performed. Returns :const:`None` if a timeout occurs." +msgstr "" +"类似于 :func:`sigwaitinfo`,但会接受一个额外的 *timeout* 参数来指定超时限制。 如果将 *timeout* 指定为 " +":const:`0`,则会执行轮询。 如果发生超时则返回 :const:`None`。" + +#: ../../library/signal.rst:611 +msgid "" +":ref:`Availability `: Unix. See the man page " +":manpage:`sigtimedwait(2)` for further information." +msgstr "" +":ref:`可用性 `: Unix。 更多信息请参见手册页面 :manpage:`sigtimedwait(2)`。" + +#: ../../library/signal.rst:612 +msgid "See also :func:`pause`, :func:`sigwait` and :func:`sigwaitinfo`." +msgstr "另请参阅 :func:`pause`, :func:`sigwait` 和 :func:`sigwaitinfo`。" + +#: ../../library/signal.rst:616 +msgid "" +"The function is now retried with the recomputed *timeout* if interrupted by " +"a signal not in *sigset* and the signal handler does not raise an exception " +"(see :pep:`475` for the rationale)." +msgstr "" +"现在当此函数被某个不在 *sigset* 中的信号中断时将以计算出的 *timeout* 进行重试并且信号处理程序不会引发异常(请参阅 " +":pep:`475` 了解其理由)。" + +#: ../../library/signal.rst:625 +msgid "Example" +msgstr "示例" + +#: ../../library/signal.rst:627 +msgid "" +"Here is a minimal example program. It uses the :func:`alarm` function to " +"limit the time spent waiting to open a file; this is useful if the file is " +"for a serial device that may not be turned on, which would normally cause " +"the :func:`os.open` to hang indefinitely. The solution is to set a 5-second" +" alarm before opening the file; if the operation takes too long, the alarm " +"signal will be sent, and the handler raises an exception. ::" +msgstr "" +"这是一个最小示例程序。 它使用 :func:`alarm` " +"函数来限制等待打开一个文件所花费的时间;这在文件为无法开启的串行设备时会很有用处,此情况通常会导致 :func:`os.open` 无限期地挂起。 " +"解决办法是在打开文件之前设置 5 秒钟的 alarm;如果操作耗时过长,将会发送 alarm 信号,并且处理程序会引发一个异常。 ::" + +#: ../../library/signal.rst:650 +msgid "Note on SIGPIPE" +msgstr "对于 SIGPIPE 的说明" + +#: ../../library/signal.rst:652 +msgid "" +"Piping output of your program to tools like :manpage:`head(1)` will cause a " +":const:`SIGPIPE` signal to be sent to your process when the receiver of its " +"standard output closes early. This results in an exception like " +":code:`BrokenPipeError: [Errno 32] Broken pipe`. To handle this case, wrap " +"your entry point to catch this exception as follows::" +msgstr "" +"将你的程序用管道输出到工具例如 :manpage:`head(1)` 将会导致 :const:`SIGPIPE` " +"信号在其标准输出的接收方提前关闭时被发送到你的进程。 这将引发一个异常例如 :code:`BrokenPipeError: [Errno 32] " +"Broken pipe`。 要处理这种情况,请对你的入口点进行包装以捕获此异常,如下所示::" + +#: ../../library/signal.rst:679 +msgid "" +"Do not set :const:`SIGPIPE`'s disposition to :const:`SIG_DFL` in order to " +"avoid :exc:`BrokenPipeError`. Doing that would cause your program to exit " +"unexpectedly whenever any socket connection is interrupted while your " +"program is still writing to it." +msgstr "" +"请不要将 :const:`SIGPIPE` 的处置方式设为 :const:`SIG_DFL` 以避免 :exc:`BrokenPipeError`。 " +"这样做还会在你的程序所写入的任何套接字连接中断时导致你的程序异常退出。" + +#: ../../library/signal.rst:688 +msgid "Note on Signal Handlers and Exceptions" +msgstr "有关信号处理器和异常的注释" + +#: ../../library/signal.rst:690 +msgid "" +"If a signal handler raises an exception, the exception will be propagated to" +" the main thread and may be raised after any :term:`bytecode` instruction. " +"Most notably, a :exc:`KeyboardInterrupt` may appear at any point during " +"execution. Most Python code, including the standard library, cannot be made " +"robust against this, and so a :exc:`KeyboardInterrupt` (or any other " +"exception resulting from a signal handler) may on rare occasions put the " +"program in an unexpected state." +msgstr "" +"如果一个信号处理器引发了异常,该异常将被传播到主线程并可能在任何 :term:`bytecode` 指令之后被引发,在执行期间的任何时候都可能出现 " +":exc:`KeyboardInterrupt`。 大多数 Python 代码,包括标准库的代码都不能对此进行健壮性处理,因此 " +":exc:`KeyboardInterrupt` (或由信号处理器所导致的任何其他异常) 可能会在极少数情况下使程序处于非预期的状态。" + +#: ../../library/signal.rst:697 +msgid "To illustrate this issue, consider the following code::" +msgstr "为了展示这个问题,请考虑以下代码::" + +#: ../../library/signal.rst:714 +msgid "" +"For many programs, especially those that merely want to exit on " +":exc:`KeyboardInterrupt`, this is not a problem, but applications that are " +"complex or require high reliability should avoid raising exceptions from " +"signal handlers. They should also avoid catching :exc:`KeyboardInterrupt` as" +" a means of gracefully shutting down. Instead, they should install their " +"own :const:`SIGINT` handler. Below is an example of an HTTP server that " +"avoids :exc:`KeyboardInterrupt`::" +msgstr "" +"对于许多程序,特别是那些在遇到 :exc:`KeyboardInterrupt` " +"只需直接退出的程序来说,这不是个问题,但是高复杂度或要求高可靠性的应用程序则应当避免由于信号处理器引发异常。 他们还应当避免将捕获 " +":exc:`KeyboardInterrupt` 作为程序关闭的优雅方式。 相反地,他们应当安装自己的 :const:`SIGINT` 处理器。 " +"下面是一个避免了 :exc:`KeyboardInterrupt` 的 HTTP 服务器示例::" diff --git a/library/site.po b/library/site.po new file mode 100644 index 000000000..91da3c122 --- /dev/null +++ b/library/site.po @@ -0,0 +1,384 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) 2001-2024, Python Software Foundation +# This file is distributed under the same license as the Python package. +# FIRST AUTHOR , YEAR. +# +# Translators: +# Zombie110year , 2020 +# helloworldSB , 2021 +# Freesand Leo , 2021 +# Alpha Du , 2022 +# Rafael Fontenelle , 2024 +# +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: Python 3.9\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2024-04-26 21:29+0000\n" +"PO-Revision-Date: 2017-02-16 23:26+0000\n" +"Last-Translator: Rafael Fontenelle , 2024\n" +"Language-Team: Chinese (China) (https://app.transifex.com/python-doc/teams/5390/zh_CN/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: zh_CN\n" +"Plural-Forms: nplurals=1; plural=0;\n" + +#: ../../library/site.rst:2 +msgid ":mod:`site` --- Site-specific configuration hook" +msgstr ":mod:`site` —— 指定域的配置钩子" + +#: ../../library/site.rst:7 +msgid "**Source code:** :source:`Lib/site.py`" +msgstr "**源代码:** :source:`Lib/site.py`" + +#: ../../library/site.rst:13 +msgid "" +"**This module is automatically imported during initialization.** The " +"automatic import can be suppressed using the interpreter's :option:`-S` " +"option." +msgstr "**这个模块将在初始化时被自动导入。** 此自动导入可以通过使用解释器的 :option:`-S` 选项来屏蔽。" + +#: ../../library/site.rst:18 +msgid "" +"Importing this module will append site-specific paths to the module search " +"path and add a few builtins, unless :option:`-S` was used. In that case, " +"this module can be safely imported with no automatic modifications to the " +"module search path or additions to the builtins. To explicitly trigger the " +"usual site-specific additions, call the :func:`site.main` function." +msgstr "" +"导入此模块将会附加域特定的路径到模块搜索路径并且添加一些内建对象,除非使用了 :option:`-S` 选项。 " +"那样的话,模块可以被安全地导入,而不会对模块搜索路径和内建对象有自动的修改或添加。要明确地触发通常域特定的添加,调用函数 " +":func:`site.main`。" + +#: ../../library/site.rst:24 +msgid "" +"Importing the module used to trigger paths manipulation even when using " +":option:`-S`." +msgstr "在之前即便使用了 :option:`-S`,导入此模块仍然会触发路径操纵。" + +#: ../../library/site.rst:31 +msgid "" +"It starts by constructing up to four directories from a head and a tail " +"part. For the head part, it uses ``sys.prefix`` and ``sys.exec_prefix``; " +"empty heads are skipped. For the tail part, it uses the empty string and " +"then :file:`lib/site-packages` (on Windows) or :file:`lib/python{X.Y}/site-" +"packages` (on Unix and macOS). For each of the distinct head-tail " +"combinations, it sees if it refers to an existing directory, and if so, adds" +" it to ``sys.path`` and also inspects the newly added path for configuration" +" files." +msgstr "" +"它会从头部和尾部构建至多四个目录作为起点。 对于头部,它会使用 ``sys.prefix`` 和 " +"``sys.exec_prefix``;空的头部会被跳过。 对于尾部,它会使用空字符串然后是 :file:`lib/site-packages` (在 " +"Windows 上) 或 :file:`lib/python{X.Y}/site-packages` (在 Unix 和 macOS 上)。 " +"对于每个不同的头-尾组合,它会查看其是否指向现有的目录,如果是的话,则将其添加到 ``sys.path`` 并且检查新添加目录中的配置文件。" + +#: ../../library/site.rst:40 +msgid "Support for the \"site-python\" directory has been removed." +msgstr "对 \"site-python\" 目录的支持已被移除。" + +#: ../../library/site.rst:43 +msgid "" +"If a file named \"pyvenv.cfg\" exists one directory above sys.executable, " +"sys.prefix and sys.exec_prefix are set to that directory and it is also " +"checked for site-packages (sys.base_prefix and sys.base_exec_prefix will " +"always be the \"real\" prefixes of the Python installation). If " +"\"pyvenv.cfg\" (a bootstrap configuration file) contains the key \"include-" +"system-site-packages\" set to anything other than \"true\" (case-" +"insensitive), the system-level prefixes will not be searched for site-" +"packages; otherwise they will." +msgstr "" +"如果名为 \"pyvenv.cfg\" 的文件存在于 sys.executable 之上的一个目录中,则 sys.prefix 和 " +"sys.exec_prefix 将被设置为该目录,并且还会检查 site-packages ( sys.base_prefix 和 " +"sys.base_exec_prefix 始终是 Python 安装的 \"真实\" 前缀)。 如果 \"pyvenv.cfg\" " +"(引导程序配置文件)包含设置为非 \"true\"(不区分大小写)的 \"include-system-site-packages\" " +"键,则不会在系统级前缀中搜索 site-packages;反之则会。" + +#: ../../library/site.rst:56 +msgid "" +"A path configuration file is a file whose name has the form " +":file:`{name}.pth` and exists in one of the four directories mentioned " +"above; its contents are additional items (one per line) to be added to " +"``sys.path``. Non-existing items are never added to ``sys.path``, and no " +"check is made that the item refers to a directory rather than a file. No " +"item is added to ``sys.path`` more than once. Blank lines and lines " +"beginning with ``#`` are skipped. Lines starting with ``import`` (followed " +"by space or tab) are executed." +msgstr "" +"一个路径配置文件是具有 :file:`{name}.pth` 命名格式的文件,并且存在上面提到的四个目录之一中;它的内容是要添加到 " +"``sys.path`` 中的额外项目(每行一个)。不存在的项目不会添加到 " +"``sys.path``,并且不会检查项目指向的是目录还是文件。项目不会被添加到 ``sys.path`` 超过一次。空行和由 ``#`` " +"起始的行会被跳过。以 ``import`` 开始的行(跟着空格或 TAB)会被执行。" + +#: ../../library/site.rst:66 +msgid "" +"An executable line in a :file:`.pth` file is run at every Python startup, " +"regardless of whether a particular module is actually going to be used. Its " +"impact should thus be kept to a minimum. The primary intended purpose of " +"executable lines is to make the corresponding module(s) importable (load " +"3rd-party import hooks, adjust :envvar:`PATH` etc). Any other initialization" +" is supposed to be done upon a module's actual import, if and when it " +"happens. Limiting a code chunk to a single line is a deliberate measure to " +"discourage putting anything more complex here." +msgstr "" +"每次启动 Python,在 :file:`.pth` 文件中的可执行行都将会被运行,而不管特定的模块实际上是否需要被使用。 " +"因此,其影响应降至最低。可执行行的主要预期目的是使相关模块可导入(加载第三方导入钩子,调整 :envvar:`PATH` " +"等)。如果它发生了,任何其他的初始化都应当在模块实际导入之前完成。将代码块限制为一行是一种有意采取的措施,不鼓励在此处放置更复杂的内容。" + +#: ../../library/site.rst:81 +msgid "" +"For example, suppose ``sys.prefix`` and ``sys.exec_prefix`` are set to " +":file:`/usr/local`. The Python X.Y library is then installed in " +":file:`/usr/local/lib/python{X.Y}`. Suppose this has a subdirectory " +":file:`/usr/local/lib/python{X.Y}/site-packages` with three " +"subsubdirectories, :file:`foo`, :file:`bar` and :file:`spam`, and two path " +"configuration files, :file:`foo.pth` and :file:`bar.pth`. Assume " +":file:`foo.pth` contains the following::" +msgstr "" +"例如,假设 ``sys.prefix`` 和 ``sys.exec_prefix`` 已经被设置为 :file:`/usr/local`。 Python" +" X.Y 的库之后被安装为 :file:`/usr/local/lib/python{X.Y}`。假设有一个拥有三个孙目录 :file:`foo`, " +":file:`bar` 和 :file:`spam` 的子目录 :file:`/usr/local/lib/python{X.Y}/site-" +"packages`,并且有两个路径配置文件 :file:`foo.pth` 和 :file:`bar.pth`。假定 :file:`foo.pth` " +"内容如下::" + +#: ../../library/site.rst:95 +msgid "and :file:`bar.pth` contains::" +msgstr "并且 :file:`bar.pth` 包含::" + +#: ../../library/site.rst:101 +msgid "" +"Then the following version-specific directories are added to ``sys.path``, " +"in this order::" +msgstr "则下面特定版目录将以如下顺序被添加到 ``sys.path``。" + +#: ../../library/site.rst:107 +msgid "" +"Note that :file:`bletch` is omitted because it doesn't exist; the " +":file:`bar` directory precedes the :file:`foo` directory because " +":file:`bar.pth` comes alphabetically before :file:`foo.pth`; and " +":file:`spam` is omitted because it is not mentioned in either path " +"configuration file." +msgstr "" +"请注意 :file:`bletch` 已被省略因为它并不存在;:file:`bar` 目前在 :file:`foo` 目录之前因为 " +":file:`bar.pth` 按字母顺序排在 :file:`foo.pth` 之前;而 :file:`spam` " +"已被省略因为它在两个路径配置文件中都未被提及。" + +#: ../../library/site.rst:114 +msgid "" +"After these path manipulations, an attempt is made to import a module named " +":mod:`sitecustomize`, which can perform arbitrary site-specific " +"customizations. It is typically created by a system administrator in the " +"site-packages directory. If this import fails with an :exc:`ImportError` or" +" its subclass exception, and the exception's :attr:`name` attribute equals " +"to ``'sitecustomize'``, it is silently ignored. If Python is started " +"without output streams available, as with :file:`pythonw.exe` on Windows " +"(which is used by default to start IDLE), attempted output from " +":mod:`sitecustomize` is ignored. Any other exception causes a silent and " +"perhaps mysterious failure of the process." +msgstr "" +"在这些路径操作之后,会尝试导入一个名为 :mod:`sitecustomize` 的模块,它可以执行任意站点专属的定制。 它通常是由系统管理员在 " +"site-packages 目录下创建的。 如此此导入失败并引发 :exc:`ImportError` 或其子类异常,并且异常的 " +":attr:`name` 属性等于 ``'sitecustomize'``,则它会被静默地忽略。 如果 Python " +"是在没有可用输出流的情况下启动的,例如在 Windows 上使用 :file:`pythonw.exe` (它默认被用于启动 start " +"IDLE),则来自 :mod:`sitecustomize` 的输出尝试会被忽略。 任何其他异常都会导致静默且可能令人迷惑不解的进程失败。" + +#: ../../library/site.rst:126 +msgid "" +"After this, an attempt is made to import a module named " +":mod:`usercustomize`, which can perform arbitrary user-specific " +"customizations, if :data:`ENABLE_USER_SITE` is true. This file is intended " +"to be created in the user site-packages directory (see below), which is part" +" of ``sys.path`` unless disabled by :option:`-s`. If this import fails with" +" an :exc:`ImportError` or its subclass exception, and the exception's " +":attr:`name` attribute equals to ``'usercustomize'``, it is silently " +"ignored." +msgstr "" +"在此之后,会尝试导入一个名为 :mod:`usercustomize` 的模块,它可以执行任意用户专属的定制,如果 " +":data:`ENABLE_USER_SITE` 为真值的话。 这个文件应该在用户的 site-packages 目录中创建(见下文),该目录是 " +"``sys.path`` 的组成部分,除非被 :option:`-s` 所禁用。 如果此导入失败并引发 :exc:`ImportError` " +"或者其子类异常,并且异常的 :attr:`name` 属性等于 ``'usercustomize'``,它会被静默地忽略。" + +#: ../../library/site.rst:134 +msgid "" +"Note that for some non-Unix systems, ``sys.prefix`` and ``sys.exec_prefix`` " +"are empty, and the path manipulations are skipped; however the import of " +":mod:`sitecustomize` and :mod:`usercustomize` is still attempted." +msgstr "" +"请注意对于某些非 Unix 系统来说,``sys.prefix`` 和 ``sys.exec_prefix`` " +"均为空值,并且路径操作会被跳过;但是仍然会尝试导入 :mod:`sitecustomize` 和 :mod:`usercustomize`。" + +#: ../../library/site.rst:142 +msgid "Readline configuration" +msgstr "Readline 配置" + +#: ../../library/site.rst:144 +msgid "" +"On systems that support :mod:`readline`, this module will also import and " +"configure the :mod:`rlcompleter` module, if Python is started in " +":ref:`interactive mode ` and without the :option:`-S` " +"option. The default behavior is enable tab-completion and to use " +":file:`~/.python_history` as the history save file. To disable it, delete " +"(or override) the :data:`sys.__interactivehook__` attribute in your " +":mod:`sitecustomize` or :mod:`usercustomize` module or your " +":envvar:`PYTHONSTARTUP` file." +msgstr "" +"在支持 :mod:`readline` 的系统上,这个模块也将导入并配置 :mod:`rlcompleter` 模块,如果 Python 是以 " +":ref:`交互模式 ` 启动并且不带 :option:`-S` 选项的话。 默认的行为是启用 tab 键补全并使用" +" :file:`~/.python_history` 作为历史存档文件。 要禁用它,请删除(或重载)你的 :mod:`sitecustomize` 或 " +":mod:`usercustomize` 模块或 :envvar:`PYTHONSTARTUP` 文件中的 " +":data:`sys.__interactivehook__` 属性。" + +#: ../../library/site.rst:153 +msgid "Activation of rlcompleter and history was made automatic." +msgstr "rlcompleter 和 history 会被自动激活。" + +#: ../../library/site.rst:158 +msgid "Module contents" +msgstr "模块内容" + +#: ../../library/site.rst:162 +msgid "A list of prefixes for site-packages directories." +msgstr "site-packages 目录的前缀列表。" + +#: ../../library/site.rst:167 +msgid "" +"Flag showing the status of the user site-packages directory. ``True`` means" +" that it is enabled and was added to ``sys.path``. ``False`` means that it " +"was disabled by user request (with :option:`-s` or " +":envvar:`PYTHONNOUSERSITE`). ``None`` means it was disabled for security " +"reasons (mismatch between user or group id and effective id) or by an " +"administrator." +msgstr "" +"显示用户 site-packages 目录状态的旗标。 ``True`` 意味着它被启用并被添加到 ``sys.path``。 ``False`` " +"意味着它按照用户请求被禁用 (通过 :option:`-s` 或 :envvar:`PYTHONNOUSERSITE`)。 ``None`` " +"意味着它因安全理由(user 或 group id 和 effective id 之间不匹配)或是被管理员所禁用。" + +#: ../../library/site.rst:177 +msgid "" +"Path to the user site-packages for the running Python. Can be ``None`` if " +":func:`getusersitepackages` hasn't been called yet. Default value is " +":file:`~/.local/lib/python{X.Y}/site-packages` for UNIX and non-framework " +"macOS builds, :file:`~/Library/Python/{X.Y}/lib/python/site-packages` for " +"macOS framework builds, and " +":file:`{%APPDATA%}\\\\Python\\\\Python{XY}\\\\site-packages` on Windows. " +"This directory is a site directory, which means that :file:`.pth` files in " +"it will be processed." +msgstr "" +"正在运行的 Python 的用户级 site-packages 的路径。 它可以为 ``None``,如果 " +":func:`getusersitepackages` 尚未被调用的话。 默认值在 UNIX 和非框架 macOS 编译版上为 " +":file:`~/.local/lib/python{X.Y}/site-packages`,在 macOS 框架编译版上为 " +":file:`~/Library/Python/{X.Y}/lib/python/site-packages`,而在 Windows 上则为 " +":file:`{%APPDATA%}\\\\Python\\\\Python{XY}\\\\site-packages`。 " +"此目录属于站点目录,这意味着其中的 :file:`.pth` 文件将会被处理。" + +#: ../../library/site.rst:188 +msgid "" +"Path to the base directory for the user site-packages. Can be ``None`` if " +":func:`getuserbase` hasn't been called yet. Default value is " +":file:`~/.local` for UNIX and macOS non-framework builds, " +":file:`~/Library/Python/{X.Y}` for macOS framework builds, and " +":file:`{%APPDATA%}\\\\Python` for Windows. This value is used by Distutils " +"to compute the installation directories for scripts, data files, Python " +"modules, etc. for the :ref:`user installation scheme `. See also :envvar:`PYTHONUSERBASE`." +msgstr "" +"用户级 site-packages 的基准目录的路径。 它可以为 ``None``,如果 :func:`getuserbase` 尚未被调用的话。 " +"默认值在 UNIX 和 macOS 非框架编译版上为 :file:`~/.local`,在 macOS 框架编译版上为 " +":file:`~/Library/Python/{X.Y}`,而在 Windows 上则为 :file:`{%APPDATA%}\\\\Python`。" +" 这个值会被 Distutils 用来计算脚本、数据文件和 Python 模块等的安装目录。 对于 :ref:`用户安装规范 `。 另请参阅 :envvar:`PYTHONUSERBASE`。" + +#: ../../library/site.rst:200 +msgid "" +"Adds all the standard site-specific directories to the module search path. " +"This function is called automatically when this module is imported, unless " +"the Python interpreter was started with the :option:`-S` flag." +msgstr "" +"将所有的标准站点专属目录添加到模块搜索路径。 这个函数会在导入此模块时被自动调用,除非 Python 解释器启动时附带了 :option:`-S` " +"旗标。" + +#: ../../library/site.rst:204 +msgid "This function used to be called unconditionally." +msgstr "这个函数使用无条件调用。" + +#: ../../library/site.rst:210 +msgid "" +"Add a directory to sys.path and process its :file:`.pth` files. Typically " +"used in :mod:`sitecustomize` or :mod:`usercustomize` (see above)." +msgstr "" +"将一个目录添加到 sys.path 并处理其 :file:`.pth` 文件。 通常被用于 :mod:`sitecustomize` 或 " +":mod:`usercustomize` (见下文)。" + +#: ../../library/site.rst:216 +msgid "Return a list containing all global site-packages directories." +msgstr "返回包含所有全局 site-packages 目录的列表。" + +#: ../../library/site.rst:223 +msgid "" +"Return the path of the user base directory, :data:`USER_BASE`. If it is not" +" initialized yet, this function will also set it, respecting " +":envvar:`PYTHONUSERBASE`." +msgstr "" +"返回用户基准目录的路径 :data:`USER_BASE`。 如果它尚未被初始化,则此函数还将参照 :envvar:`PYTHONUSERBASE` " +"来设置它。" + +#: ../../library/site.rst:232 +msgid "" +"Return the path of the user-specific site-packages directory, " +":data:`USER_SITE`. If it is not initialized yet, this function will also " +"set it, respecting :data:`USER_BASE`. To determine if the user-specific " +"site-packages was added to ``sys.path`` :data:`ENABLE_USER_SITE` should be " +"used." +msgstr "" +"返回用户专属 site-packages 目录的路径 :data:`USER_SITE`。 如果它尚未被初始化,则此函数还将参照 " +":data:`USER_BASE` 来设置它。 要确定用户专属 site-packages 是否已被添加到 ``sys.path`` 则应当使用 " +":data:`ENABLE_USER_SITE`。" + +#: ../../library/site.rst:244 +msgid "Command Line Interface" +msgstr "命令行界面" + +#: ../../library/site.rst:248 +msgid "" +"The :mod:`site` module also provides a way to get the user directories from " +"the command line:" +msgstr ":mod:`site` 模块还提供了一个从命令行获取用户目录的方式:" + +#: ../../library/site.rst:256 +msgid "" +"If it is called without arguments, it will print the contents of " +":data:`sys.path` on the standard output, followed by the value of " +":data:`USER_BASE` and whether the directory exists, then the same thing for " +":data:`USER_SITE`, and finally the value of :data:`ENABLE_USER_SITE`." +msgstr "" +"如果它被不带参数地调用,它将在标准输出打印 :data:`sys.path` 的内容,再打印 :data:`USER_BASE` " +"的值以及该目录是否存在,然后打印 :data:`USER_SITE` 的相应信息,最后打印 :data:`ENABLE_USER_SITE` 的值。" + +#: ../../library/site.rst:263 +msgid "Print the path to the user base directory." +msgstr "输出用户基本的路径。" + +#: ../../library/site.rst:267 +msgid "Print the path to the user site-packages directory." +msgstr "输出用户site-packages目录的路径。" + +#: ../../library/site.rst:269 +msgid "" +"If both options are given, user base and user site will be printed (always " +"in this order), separated by :data:`os.pathsep`." +msgstr "如果同时给出了两个选项,则将打印用户基准目录和用户站点信息(总是按此顺序),并以 :data:`os.pathsep` 分隔。" + +#: ../../library/site.rst:272 +msgid "" +"If any option is given, the script will exit with one of these values: ``0``" +" if the user site-packages directory is enabled, ``1`` if it was disabled by" +" the user, ``2`` if it is disabled for security reasons or by an " +"administrator, and a value greater than 2 if there is an error." +msgstr "" +"如果给出了其中一个选项,脚本将退出并返回以下值中的一个:如果用户级 site-packages 目录被启用则为 ``0``,如果它被用户禁用则为 " +"``1``,如果它因安全理由或被管理员禁用则为 ``2``,如果发生错误则为大于 2 的值。" + +#: ../../library/site.rst:279 +msgid ":pep:`370` -- Per user site-packages directory" +msgstr ":pep:`370` -- 分用户的 site-packages 目录" diff --git a/library/smtpd.po b/library/smtpd.po new file mode 100644 index 000000000..0a6fefe25 --- /dev/null +++ b/library/smtpd.po @@ -0,0 +1,509 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) 2001-2024, Python Software Foundation +# This file is distributed under the same license as the Python package. +# FIRST AUTHOR , YEAR. +# +# Translators: +# ppcfish , 2019 +# Alpha Du , 2021 +# Freesand Leo , 2022 +# Rafael Fontenelle , 2024 +# +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: Python 3.9\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2024-04-15 06:01+0000\n" +"PO-Revision-Date: 2017-02-16 23:26+0000\n" +"Last-Translator: Rafael Fontenelle , 2024\n" +"Language-Team: Chinese (China) (https://app.transifex.com/python-doc/teams/5390/zh_CN/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: zh_CN\n" +"Plural-Forms: nplurals=1; plural=0;\n" + +#: ../../library/smtpd.rst:2 +msgid ":mod:`smtpd` --- SMTP Server" +msgstr ":mod:`smtpd` --- SMTP 服务器" + +#: ../../library/smtpd.rst:11 +msgid "**Source code:** :source:`Lib/smtpd.py`" +msgstr "**源代码:** :source:`Lib/smtpd.py`" + +#: ../../library/smtpd.rst:15 +msgid "This module offers several classes to implement SMTP (email) servers." +msgstr "该模块提供了几个类来实现 SMTP (电子邮件)服务器。" + +#: ../../library/smtpd.rst:17 +msgid "" +":mod:`smtpd` will be removed in Python 3.12 (see :pep:`PEP 594 <594#smtpd>` " +"for details). The `aiosmtpd `_ package is " +"a recommended replacement for this module. It is based on :mod:`asyncio` " +"and provides a more straightforward API." +msgstr "" +":mod:`smtpd` 将在 Python 3.12 中移除(请参阅 :pep:`PEP 594 <594#smtpd>` 了解详情)。 " +"`aiosmtpd `_ 包是这个模块的推荐替代品。 它基于 " +":mod:`asyncio` 并提供了更简洁直观的 API。" + +#: ../../library/smtpd.rst:24 +msgid "" +"Several server implementations are present; one is a generic do-nothing " +"implementation, which can be overridden, while the other two offer specific " +"mail-sending strategies." +msgstr "有几个服务器的实现;一个是通用的无为实现,可以被重写,而另外两个则提供特定的邮件发送策略。" + +#: ../../library/smtpd.rst:28 +msgid "" +"Additionally the SMTPChannel may be extended to implement very specific " +"interaction behaviour with SMTP clients." +msgstr "此外, SMTPChannel 可以被扩展以实现与 SMTP 客户端非常具体的交互行为。" + +#: ../../library/smtpd.rst:31 +msgid "" +"The code supports :RFC:`5321`, plus the :rfc:`1870` SIZE and :rfc:`6531` " +"SMTPUTF8 extensions." +msgstr "该代码支持 :RFC:`5321` ,加上 :rfc:`1870` SIZE和 :rfc:`6531` SMTPUTF8 扩展。" + +#: ../../library/smtpd.rst:36 +msgid "SMTPServer Objects" +msgstr "SMTPServer 对象" + +#: ../../library/smtpd.rst:42 +msgid "" +"Create a new :class:`SMTPServer` object, which binds to local address " +"*localaddr*. It will treat *remoteaddr* as an upstream SMTP relayer. Both " +"*localaddr* and *remoteaddr* should be a :ref:`(host, port) ` " +"tuple. The object inherits from :class:`asyncore.dispatcher`, and so will " +"insert itself into :mod:`asyncore`'s event loop on instantiation." +msgstr "" +"新建一个 :class:`SMTPServer` 对象,它会绑定到本机地址 *localaddr*。 它将把 *remoteaddr* 当作上游 " +"SMTP 中继器。 *localaddr* 和 *remoteaddr* 都应当是 :ref:`(host, port) ` " +"元组。 该对象继承自 :class:`asyncore.dispatcher`,因而会在实例化时将自己插入到 :mod:`asyncore` " +"的事件循环。" + +#: ../../library/smtpd.rst:48 ../../library/smtpd.rst:176 +msgid "" +"*data_size_limit* specifies the maximum number of bytes that will be " +"accepted in a ``DATA`` command. A value of ``None`` or ``0`` means no " +"limit." +msgstr "" +"*data_size_limit* 指定将在 ``DATA`` 命令中被接受的最大字节数。 值为 ``None`` 或 ``0`` 表示无限制。" + +#: ../../library/smtpd.rst:52 +msgid "" +"*map* is the socket map to use for connections (an initially empty " +"dictionary is a suitable value). If not specified the :mod:`asyncore` " +"global socket map is used." +msgstr "*map* 是用于连接的套接字映射(初始为空的字典是适当的值)。 如果未指定则会使用 :mod:`asyncore` 全局套接字映射。" + +#: ../../library/smtpd.rst:56 +msgid "" +"*enable_SMTPUTF8* determines whether the ``SMTPUTF8`` extension (as defined " +"in :RFC:`6531`) should be enabled. The default is ``False``. When ``True``," +" ``SMTPUTF8`` is accepted as a parameter to the ``MAIL`` command and when " +"present is passed to :meth:`process_message` in the " +"``kwargs['mail_options']`` list. *decode_data* and *enable_SMTPUTF8* cannot" +" be set to ``True`` at the same time." +msgstr "" +"*enable_SMTPUTF8* 决定是否应当启用 ``SMTPUTF8`` 扩展(如 :RFC:`6531` 所定义的。 默认值为 " +"``False``。 当设为 ``True`` 时,会接受 ``SMTPUTF8`` 作为 ``MAIL`` 命令的形参并在被提供时将其传给 " +"``kwargs['mail_options']`` 列表中的 :meth:`process_message`。 *decode_data* 和 " +"*enable_SMTPUTF8* 不可同时被设为 ``True``。" + +#: ../../library/smtpd.rst:63 +msgid "" +"*decode_data* specifies whether the data portion of the SMTP transaction " +"should be decoded using UTF-8. When *decode_data* is ``False`` (the " +"default), the server advertises the ``8BITMIME`` extension (:rfc:`6152`), " +"accepts the ``BODY=8BITMIME`` parameter to the ``MAIL`` command, and when " +"present passes it to :meth:`process_message` in the " +"``kwargs['mail_options']`` list. *decode_data* and *enable_SMTPUTF8* cannot " +"be set to ``True`` at the same time." +msgstr "" +"*decode_data* 指明 SMTP 事务的数据部分是否应当使用 UTF-8 来解码。 当 *decode_data* 为 ``False`` " +"时(默认值),服务器会声明 ``8BITMIME`` 扩展 (:rfc:`6152`),接受来自 ``MAIL`` 命令的 " +"``BODY=8BITMIME`` 形参,并在该形参存在时将其传给 ``kwargs['mail_options']`` 列表中的 " +":meth:`process_message` 方法。 *decode_data* 和 *enable_SMTPUTF8* 不可同时被设为 " +"``True``。" + +#: ../../library/smtpd.rst:73 +msgid "" +"Raise a :exc:`NotImplementedError` exception. Override this in subclasses to" +" do something useful with this message. Whatever was passed in the " +"constructor as *remoteaddr* will be available as the :attr:`_remoteaddr` " +"attribute. *peer* is the remote host's address, *mailfrom* is the envelope " +"originator, *rcpttos* are the envelope recipients and *data* is a string " +"containing the contents of the e-mail (which should be in :rfc:`5321` " +"format)." +msgstr "" +"引发 :exc:`NotImplementedError` 异常。 请在子类中重载此方法以实际运用此消息。 在构造器中作为 *remoteaddr* " +"传入的任何东西都可以 :attr:`_remoteaddr` 属性的形式来访问。 *peer* 是远程主机的地址,*mailfrom* " +"是封包的发送方,*rcpttos* 是封包的接收方而 *data* 是包含电子邮件内容的字符串(应该为 :rfc:`5321` 格式)。" + +#: ../../library/smtpd.rst:81 +msgid "" +"If the *decode_data* constructor keyword is set to ``True``, the *data* " +"argument will be a unicode string. If it is set to ``False``, it will be a " +"bytes object." +msgstr "" +"如果构造器关键字参数 *decode_data* 被设为 ``True``,则 *data* 参数将为 Unicode 字符串。 如果被设为 " +"``False``,则将为字节串对象。" + +#: ../../library/smtpd.rst:85 +msgid "" +"*kwargs* is a dictionary containing additional information. It is empty if " +"``decode_data=True`` was given as an init argument, otherwise it contains " +"the following keys:" +msgstr "" +"*kwargs* 是包含附加信息的字典。 如果给出 ``decode_data=True`` 作为初始参数则该字典为空,否则它会包含以下的键:" + +#: ../../library/smtpd.rst:92 +msgid "*mail_options*:" +msgstr "*mail_options*:" + +#: ../../library/smtpd.rst:90 +msgid "" +"a list of all received parameters to the ``MAIL`` command (the elements are " +"uppercase strings; example: ``['BODY=8BITMIME', 'SMTPUTF8']``)." +msgstr "" +"由 ``MAIL`` 命令所接收的所有参数组成的列表 (其元素为大写形式的字符串;例如: ``['BODY=8BITMIME', " +"'SMTPUTF8']``)。" + +#: ../../library/smtpd.rst:97 +msgid "*rcpt_options*:" +msgstr "*rcpt_options*:" + +#: ../../library/smtpd.rst:95 +msgid "" +"same as *mail_options* but for the ``RCPT`` command. Currently no ``RCPT " +"TO`` options are supported, so for now this will always be an empty list." +msgstr "" +"与 *mail_options* 类似但是针对 ``RCPT`` 命令。 目前不支持任何 ``RCPT TO`` 选项,因此其值将总是为空列表。" + +#: ../../library/smtpd.rst:99 +msgid "" +"Implementations of ``process_message`` should use the ``**kwargs`` signature" +" to accept arbitrary keyword arguments, since future feature enhancements " +"may add keys to the kwargs dictionary." +msgstr "" +"``process_message`` 的实现应当使用 ``**kwargs`` 签名来接收任意关键字参数,因为未来的增强特性可能会向 kwargs " +"字典添加新键。" + +#: ../../library/smtpd.rst:103 +msgid "" +"Return ``None`` to request a normal ``250 Ok`` response; otherwise return " +"the desired response string in :RFC:`5321` format." +msgstr "返回 ``None`` 以请求一个正常的 ``250 Ok`` 响应;在其他情况下则以 :RFC:`5321` 格式返回所需的响应字符串。" + +#: ../../library/smtpd.rst:108 +msgid "" +"Override this in subclasses to use a custom :class:`SMTPChannel` for " +"managing SMTP clients." +msgstr "重载这个子类以使用自定义的 :class:`SMTPChannel` 来管理 SMTP 客户端。" + +#: ../../library/smtpd.rst:111 +msgid "The *map* constructor argument." +msgstr "*map* 构造器参数。" + +#: ../../library/smtpd.rst:114 +msgid "*localaddr* and *remoteaddr* may now contain IPv6 addresses." +msgstr "*localaddr* 和 *remoteaddr* 现在可以包含 IPv6 地址。" + +#: ../../library/smtpd.rst:117 +msgid "" +"The *decode_data* and *enable_SMTPUTF8* constructor parameters, and the " +"*kwargs* parameter to :meth:`process_message` when *decode_data* is " +"``False``." +msgstr "" +"*decode_data* 和 *enable_SMTPUTF8* 构造器形参,以及当 *decode_data* 为 ``False`` 时传给 " +":meth:`process_message` 的 *kwargs* 形参。" + +#: ../../library/smtpd.rst:122 ../../library/smtpd.rst:198 +msgid "*decode_data* is now ``False`` by default." +msgstr "*decode_data* 现在默认为 ``False``。" + +#: ../../library/smtpd.rst:127 +msgid "DebuggingServer Objects" +msgstr "DebuggingServer 对象" + +#: ../../library/smtpd.rst:132 +msgid "" +"Create a new debugging server. Arguments are as per :class:`SMTPServer`. " +"Messages will be discarded, and printed on stdout." +msgstr "创建一个新的调试服务器。 参数是针对每个 :class:`SMTPServer`。 消息将被丢弃,并在 stdout 上打印出来。" + +#: ../../library/smtpd.rst:137 +msgid "PureProxy Objects" +msgstr "PureProxy 对象" + +#: ../../library/smtpd.rst:142 +msgid "" +"Create a new pure proxy server. Arguments are as per :class:`SMTPServer`. " +"Everything will be relayed to *remoteaddr*. Note that running this has a " +"good chance to make you into an open relay, so please be careful." +msgstr "" +"创建一个新的纯代理服务器。 参数是针对每个 :class:`SMTPServer`。 一切都将被转发到 *remoteaddr*。 " +"请注意运行此对象有很大的机会令你成为一个开放的中继站,所以需要小心。" + +#: ../../library/smtpd.rst:148 +msgid "MailmanProxy Objects" +msgstr "MailmanProxy 对象" + +#: ../../library/smtpd.rst:155 +msgid "" +":class:`MailmanProxy` is deprecated, it depends on a ``Mailman`` module " +"which no longer exists and therefore is already broken." +msgstr ":class:`MailmanProxy` 已被弃用,它依赖于一个已不存在的 ``Mailman`` 模块因而本来就不再可用了。" + +#: ../../library/smtpd.rst:159 +msgid "" +"Create a new pure proxy server. Arguments are as per :class:`SMTPServer`. " +"Everything will be relayed to *remoteaddr*, unless local mailman " +"configurations knows about an address, in which case it will be handled via " +"mailman. Note that running this has a good chance to make you into an open " +"relay, so please be careful." +msgstr "" +"创建一个新的纯代理服务器。 参数是针对每个 :class:`SMTPServer`。 一切都将被转发到 *remoteaddr*,除非本地 " +"mailman 配置知道另一个地址,在那种情况下它将由 mailman 来处理。 请注意运行此对象有很大的机会令你成为一个开放的中继站,所以需要小心。" + +#: ../../library/smtpd.rst:166 +msgid "SMTPChannel Objects" +msgstr "SMTPChannel 对象" + +#: ../../library/smtpd.rst:171 +msgid "" +"Create a new :class:`SMTPChannel` object which manages the communication " +"between the server and a single SMTP client." +msgstr "创建一个新的 :class:`SMTPChannel` 对象,该对象会管理服务器和单个 SMTP 客户端之间的通信。" + +#: ../../library/smtpd.rst:174 +msgid "*conn* and *addr* are as per the instance variables described below." +msgstr "*conn* 和 *addr* 是针对下述的每个实例变量。" + +#: ../../library/smtpd.rst:180 +msgid "" +"*enable_SMTPUTF8* determines whether the ``SMTPUTF8`` extension (as defined " +"in :RFC:`6531`) should be enabled. The default is ``False``. *decode_data* " +"and *enable_SMTPUTF8* cannot be set to ``True`` at the same time." +msgstr "" +"*enable_SMTPUTF8* 确定 ``SMTPUTF8`` 扩展 (如 :RFC:`6531` 所定义的) 是否应当被启用。 默认值为 " +"``False``。 *decode_data* 和 *enable_SMTPUTF8* 不能被同时设为 ``True``。" + +#: ../../library/smtpd.rst:185 +msgid "" +"A dictionary can be specified in *map* to avoid using a global socket map." +msgstr "可以在 *map* 中指定一个字典以避免使用全局套接字映射。" + +#: ../../library/smtpd.rst:187 +msgid "" +"*decode_data* specifies whether the data portion of the SMTP transaction " +"should be decoded using UTF-8. The default is ``False``. *decode_data* and " +"*enable_SMTPUTF8* cannot be set to ``True`` at the same time." +msgstr "" +"*decode_data* 指明 SMTP 事务的数据部分是否应当使用 UTF-8 来解码。 默认值为 ``False``。 *decode_data*" +" 和 *enable_SMTPUTF8* 不能被同时设为 ``True``。" + +#: ../../library/smtpd.rst:192 +msgid "" +"To use a custom SMTPChannel implementation you need to override the " +":attr:`SMTPServer.channel_class` of your :class:`SMTPServer`." +msgstr "" +"要使用自定义的 SMTPChannel 实现你必须重载你的 :class:`SMTPServer` 的 " +":attr:`SMTPServer.channel_class`。" + +#: ../../library/smtpd.rst:195 +msgid "The *decode_data* and *enable_SMTPUTF8* parameters were added." +msgstr "添加了 *decode_data* 和 *enable_SMTPUTF8* 形参。" + +#: ../../library/smtpd.rst:201 +msgid "The :class:`SMTPChannel` has the following instance variables:" +msgstr ":class:`SMTPChannel` 具有下列实例变量:" + +#: ../../library/smtpd.rst:205 +msgid "Holds the :class:`SMTPServer` that spawned this channel." +msgstr "存放生成此通道的 :class:`SMTPServer`。" + +#: ../../library/smtpd.rst:209 +msgid "Holds the socket object connecting to the client." +msgstr "存放连接到客户端的套接字对象。" + +#: ../../library/smtpd.rst:213 +msgid "" +"Holds the address of the client, the second value returned by " +":func:`socket.accept `" +msgstr "存放客户端的地址,:func:`socket.accept ` 所返回的第二个值。" + +#: ../../library/smtpd.rst:218 +msgid "" +"Holds a list of the line strings (decoded using UTF-8) received from the " +"client. The lines have their ``\"\\r\\n\"`` line ending translated to " +"``\"\\n\"``." +msgstr "存放从客户端接收的行字符串列表 (使用 UTF-8 解码)。 所有行的 ``\"\\r\\n\"`` 行结束符都会被转写为 ``\"\\n\"``。" + +#: ../../library/smtpd.rst:224 +msgid "" +"Holds the current state of the channel. This will be either :attr:`COMMAND` " +"initially and then :attr:`DATA` after the client sends a \"DATA\" line." +msgstr "存放通道的当前状态。 其初始值将为 :attr:`COMMAND` 而在客户端发送 \"DATA\" 行后将为 :attr:`DATA`。" + +#: ../../library/smtpd.rst:230 +msgid "Holds a string containing the greeting sent by the client in its \"HELO\"." +msgstr "存放包含客户端在其 \"HELO\" 中发送的问候信息的字符串。" + +#: ../../library/smtpd.rst:234 +msgid "" +"Holds a string containing the address identified in the \"MAIL FROM:\" line " +"from the client." +msgstr "存放包含客户端在 \"MAIL FROM:\" 行中标识的地址的字符串。" + +#: ../../library/smtpd.rst:239 +msgid "" +"Holds a list of strings containing the addresses identified in the \"RCPT " +"TO:\" lines from the client." +msgstr "存放包含客户端在 \"RCPT TO:\" 行中标识的地址的字符串。" + +#: ../../library/smtpd.rst:244 +msgid "" +"Holds a string containing all of the data sent by the client during the DATA" +" state, up to but not including the terminating ``\"\\r\\n.\\r\\n\"``." +msgstr "存放客户端在 DATA 状态期间发送的所有数据的字符串,直至但不包括末尾的 ``\"\\r\\n.\\r\\n\"``。" + +#: ../../library/smtpd.rst:249 +msgid "" +"Holds the fully-qualified domain name of the server as returned by " +":func:`socket.getfqdn`." +msgstr "存放由 :func:`socket.getfqdn` 所返回的服务器完整限定域名。" + +#: ../../library/smtpd.rst:254 +msgid "" +"Holds the name of the client peer as returned by ``conn.getpeername()`` " +"where ``conn`` is :attr:`conn`." +msgstr "存放由 ``conn.getpeername()`` 所返回的客户端对等方名称,其中 ``conn`` 为 :attr:`conn`。" + +#: ../../library/smtpd.rst:257 +msgid "" +"The :class:`SMTPChannel` operates by invoking methods named " +"``smtp_`` upon reception of a command line from the client. Built " +"into the base :class:`SMTPChannel` class are methods for handling the " +"following commands (and responding to them appropriately):" +msgstr "" +":class:`SMTPChannel` 在接收到来自客户端的命令行时会通过发起调用名为 ``smtp_`` 的方法来进行操作。 " +"在基类 :class:`SMTPChannel` 中具有用于处理下列命令(并对他们作出适当反应)的方法:" + +#: ../../library/smtpd.rst:263 +msgid "Command" +msgstr "命令" + +#: ../../library/smtpd.rst:263 +msgid "Action taken" +msgstr "所采取的行动" + +#: ../../library/smtpd.rst:265 +msgid "HELO" +msgstr "HELO" + +#: ../../library/smtpd.rst:265 +msgid "" +"Accepts the greeting from the client and stores it in :attr:`seen_greeting`." +" Sets server to base command mode." +msgstr "接受来自客户端的问候语,并将其存储在 :attr:`seen_greeting` 中。将服务器设置为基本命令模式。" + +#: ../../library/smtpd.rst:267 +msgid "EHLO" +msgstr "EHLO" + +#: ../../library/smtpd.rst:267 +msgid "" +"Accepts the greeting from the client and stores it in :attr:`seen_greeting`." +" Sets server to extended command mode." +msgstr "接受来自客户的问候并将其存储在 :attr:`seen_greeting` 中。将服务器设置为扩展命令模式。" + +#: ../../library/smtpd.rst:269 +msgid "NOOP" +msgstr "NOOP" + +#: ../../library/smtpd.rst:269 +msgid "Takes no action." +msgstr "不采取任何行动。" + +#: ../../library/smtpd.rst:270 +msgid "QUIT" +msgstr "QUIT" + +#: ../../library/smtpd.rst:270 +msgid "Closes the connection cleanly." +msgstr "干净地关闭连接。" + +#: ../../library/smtpd.rst:271 +msgid "MAIL" +msgstr "MAIL" + +#: ../../library/smtpd.rst:271 +msgid "" +"Accepts the \"MAIL FROM:\" syntax and stores the supplied address as " +":attr:`mailfrom`. In extended command mode, accepts the :rfc:`1870` SIZE " +"attribute and responds appropriately based on the value of " +"*data_size_limit*." +msgstr "" +"接受 \"MAIL FROM:\" 句法并将所提供的地址保存为 :attr:`mailfrom`。 在扩展命令模式下,还接受 :rfc:`1870` " +"SIZE 属性并根据 *data_size_limit* 的值作出适当返应。" + +#: ../../library/smtpd.rst:275 +msgid "RCPT" +msgstr "RCPT" + +#: ../../library/smtpd.rst:275 +msgid "" +"Accepts the \"RCPT TO:\" syntax and stores the supplied addresses in the " +":attr:`rcpttos` list." +msgstr "接受 \"RCPT TO:\" 句法并将所提供的地址保存在 :attr:`rcpttos` 列表中。" + +#: ../../library/smtpd.rst:277 +msgid "RSET" +msgstr "RSET" + +#: ../../library/smtpd.rst:277 +msgid "" +"Resets the :attr:`mailfrom`, :attr:`rcpttos`, and :attr:`received_data`, but" +" not the greeting." +msgstr "" +"重置 :attr:`mailfrom`, :attr:`rcpttos`, 和 :attr:`received_data` ,但不重置问候语。" + +#: ../../library/smtpd.rst:279 +msgid "DATA" +msgstr "DATA" + +#: ../../library/smtpd.rst:279 +msgid "" +"Sets the internal state to :attr:`DATA` and stores remaining lines from the " +"client in :attr:`received_data` until the terminator ``\"\\r\\n.\\r\\n\"`` " +"is received." +msgstr "" +"将内部状态设为 :attr:`DATA` 并将来自客户端的剩余行保存在 :attr:`received_data` 中直至接收到终止符 " +"``\"\\r\\n.\\r\\n\"``。" + +#: ../../library/smtpd.rst:282 +msgid "HELP" +msgstr "HELP" + +#: ../../library/smtpd.rst:282 +msgid "Returns minimal information on command syntax" +msgstr "返回有关命令语法的最少信息" + +#: ../../library/smtpd.rst:283 +msgid "VRFY" +msgstr "VRFY" + +#: ../../library/smtpd.rst:283 +msgid "Returns code 252 (the server doesn't know if the address is valid)" +msgstr "返回代码252(服务器不知道该地址是否有效)" + +#: ../../library/smtpd.rst:284 +msgid "EXPN" +msgstr "EXPN" + +#: ../../library/smtpd.rst:284 +msgid "Reports that the command is not implemented." +msgstr "报告该命令未实现。" diff --git a/library/smtplib.po b/library/smtplib.po new file mode 100644 index 000000000..4c61dcde4 --- /dev/null +++ b/library/smtplib.po @@ -0,0 +1,872 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) 2001-2024, Python Software Foundation +# This file is distributed under the same license as the Python package. +# FIRST AUTHOR , YEAR. +# +# Translators: +# ppcfish , 2019 +# 汪心禾 , 2019 +# Arisaka97 , 2021 +# Alpha Du , 2021 +# Freesand Leo , 2021 +# Rafael Fontenelle , 2024 +# +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: Python 3.9\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2024-08-30 16:51+0000\n" +"PO-Revision-Date: 2017-02-16 23:26+0000\n" +"Last-Translator: Rafael Fontenelle , 2024\n" +"Language-Team: Chinese (China) (https://app.transifex.com/python-doc/teams/5390/zh_CN/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: zh_CN\n" +"Plural-Forms: nplurals=1; plural=0;\n" + +#: ../../library/smtplib.rst:2 +msgid ":mod:`smtplib` --- SMTP protocol client" +msgstr ":mod:`smtplib` --- SMTP 协议客户端" + +#: ../../library/smtplib.rst:9 +msgid "**Source code:** :source:`Lib/smtplib.py`" +msgstr "**源代码:** :source:`Lib/smtplib.py`" + +#: ../../library/smtplib.rst:17 +msgid "" +"The :mod:`smtplib` module defines an SMTP client session object that can be " +"used to send mail to any Internet machine with an SMTP or ESMTP listener " +"daemon. For details of SMTP and ESMTP operation, consult :rfc:`821` (Simple" +" Mail Transfer Protocol) and :rfc:`1869` (SMTP Service Extensions)." +msgstr "" +":mod:`smtplib` 模块定义了一个 SMTP 客户端会话对象,该对象可将邮件发送到 Internet 上带有 SMTP 或 ESMTP " +"接收程序的计算机。 关于 SMTP 和 ESMTP 操作的详情请参阅 :rfc:`821` (简单邮件传输协议) 和 :rfc:`1869` (SMTP" +" 服务扩展)。" + +#: ../../library/smtplib.rst:25 +msgid "" +"An :class:`SMTP` instance encapsulates an SMTP connection. It has methods " +"that support a full repertoire of SMTP and ESMTP operations. If the optional" +" host and port parameters are given, the SMTP :meth:`connect` method is " +"called with those parameters during initialization. If specified, " +"*local_hostname* is used as the FQDN of the local host in the HELO/EHLO " +"command. Otherwise, the local hostname is found using " +":func:`socket.getfqdn`. If the :meth:`connect` call returns anything other " +"than a success code, an :exc:`SMTPConnectError` is raised. The optional " +"*timeout* parameter specifies a timeout in seconds for blocking operations " +"like the connection attempt (if not specified, the global default timeout " +"setting will be used). If the timeout expires, :exc:`socket.timeout` is " +"raised. The optional source_address parameter allows binding to some " +"specific source address in a machine with multiple network interfaces, " +"and/or to some specific source TCP port. It takes a 2-tuple (host, port), " +"for the socket to bind to as its source address before connecting. If " +"omitted (or if host or port are ``''`` and/or 0 respectively) the OS default" +" behavior will be used." +msgstr "" +"一个 :class:`SMTP` 实例就是一个封装好的 SMTP 连接。该实例具有的方法支持所有 SMTP 和 ESMTP 操作。如果传入了可选参数 " +"host 和 port,那么将在初始化时使用这些参数调用 SMTP :meth:`connect` 方法。如果传入了 " +"*local_hostname*,它将在 HELO/EHLO 命令中被用作本地主机的 FQDN。否则将使用 :func:`socket.getfqdn`" +" 找到本地主机名。如果 :meth:`connect` 返回了成功码以外的内容,则引发 :exc:`SMTPConnectError` 异常。可选参数 " +"*timeout* 指定阻塞操作(如连接尝试)的超时(以秒为单位,如果未指定超时,将使用全局默认超时设置)。到达超时时长后会引发 " +":exc:`socket.timeout` 异常。可选参数 source_address " +"允许在有多张网卡的计算机中绑定到某些特定的源地址,和/或绑定到某些特定的源 TCP 端口。在连接前,套接字需要绑定一个 2 元组 (host, " +"port) 作为其源地址。如果省略,或者是主机为 ``''`` 和/或端口为 0,则将使用操作系统默认行为。" + +#: ../../library/smtplib.rst:43 +msgid "" +"For normal use, you should only require the initialization/connect, " +":meth:`sendmail`, and :meth:`SMTP.quit` methods. An example is included " +"below." +msgstr "" +"正常使用时,只需要初始化或 connect 方法,:meth:`sendmail` 方法,再加上 :meth:`SMTP.quit` " +"方法即可。下文包括了一个示例。" + +#: ../../library/smtplib.rst:47 +msgid "" +"The :class:`SMTP` class supports the :keyword:`with` statement. When used " +"like this, the SMTP ``QUIT`` command is issued automatically when the " +":keyword:`!with` statement exits. E.g.::" +msgstr "" +":class:`SMTP` 类支持 :keyword:`with` 语句。当这样使用时,:keyword:`!with` 语句一退出就会自动发出 " +"SMTP ``QUIT`` 命令。例如::" + +#: ../../library/smtplib.rst:58 +msgid "" +"Raises an :ref:`auditing event ` ``smtplib.send`` with arguments " +"``self``, ``data``." +msgstr "引发一个 :ref:`审计事件 ` ``smtplib.send``,附带参数 ``self``, ``data``。" + +#: ../../library/smtplib.rst:60 +msgid "" +"All commands will raise an :ref:`auditing event ` " +"``smtplib.SMTP.send`` with arguments ``self`` and ``data``, where ``data`` " +"is the bytes about to be sent to the remote host." +msgstr "" +"所有命令都会引发一个 :ref:`审计事件 ` ``smtplib.SMTP.send``,附带参数 ``self`` 和 " +"``data``,其中 ``data`` 是即将发送到远程主机的字节串。" + +#: ../../library/smtplib.rst:64 +msgid "Support for the :keyword:`with` statement was added." +msgstr "添加了对 :keyword:`with` 语句的支持。" + +#: ../../library/smtplib.rst:67 ../../library/smtplib.rst:99 +msgid "source_address argument was added." +msgstr "添加了 source_address 参数。" + +#: ../../library/smtplib.rst:70 +msgid "The SMTPUTF8 extension (:rfc:`6531`) is now supported." +msgstr "现在已支持 SMTPUTF8 扩展 (:rfc:`6531`)。" + +#: ../../library/smtplib.rst:73 ../../library/smtplib.rst:114 +msgid "" +"If the *timeout* parameter is set to be zero, it will raise a " +":class:`ValueError` to prevent the creation of a non-blocking socket" +msgstr "如果 *timeout* 形参被设为零,则它将引发 :class:`ValueError` 来阻止创建非阻塞的套接字" + +#: ../../library/smtplib.rst:81 +msgid "" +"An :class:`SMTP_SSL` instance behaves exactly the same as instances of " +":class:`SMTP`. :class:`SMTP_SSL` should be used for situations where SSL is " +"required from the beginning of the connection and using :meth:`starttls` is " +"not appropriate. If *host* is not specified, the local host is used. If " +"*port* is zero, the standard SMTP-over-SSL port (465) is used. The optional" +" arguments *local_hostname*, *timeout* and *source_address* have the same " +"meaning as they do in the :class:`SMTP` class. *context*, also optional, " +"can contain a :class:`~ssl.SSLContext` and allows configuring various " +"aspects of the secure connection. Please read :ref:`ssl-security` for best " +"practices." +msgstr "" +":class:`SMTP_SSL` 实例与 :class:`SMTP` 实例的行为完全相同。在开始连接就需要 SSL,且 " +":meth:`starttls` 不适合的情况下,应该使用 :class:`SMTP_SSL`。如果未指定 *host*,则使用 " +"localhost。如果 *port* 为 0,则使用标准 SMTP-over-SSL 端口(465)。可选参数 " +"*local_hostname*、*timeout* 和 *source_address* 的含义与 :class:`SMTP` 类中的相同。可选参数 " +"*context* 是一个 :class:`~ssl.SSLContext` 对象,可以从多个方面配置安全连接。请阅读 :ref:`ssl-" +"security` 以获取最佳实践。" + +#: ../../library/smtplib.rst:92 +msgid "" +"*keyfile* and *certfile* are a legacy alternative to *context*, and can " +"point to a PEM formatted private key and certificate chain file for the SSL " +"connection." +msgstr "" +"*keyfile* 和 *certfile* 是 *context* 的传统替代物,它们可以指向 PEM 格式的私钥和证书链文件用于 SSL 连接。" + +#: ../../library/smtplib.rst:96 ../../library/smtplib.rst:426 +msgid "*context* was added." +msgstr "增加了 *context*。" + +#: ../../library/smtplib.rst:102 +msgid "" +"The class now supports hostname check with " +":attr:`ssl.SSLContext.check_hostname` and *Server Name Indication* (see " +":data:`ssl.HAS_SNI`)." +msgstr "" +"本类现在支持使用 :attr:`ssl.SSLContext.check_hostname` 和 *服务器名称指示* (参阅 " +":data:`ssl.HAS_SNI`)进行主机名检查。" + +#: ../../library/smtplib.rst:109 ../../library/smtplib.rst:412 +msgid "" +"*keyfile* and *certfile* are deprecated in favor of *context*. Please use " +":meth:`ssl.SSLContext.load_cert_chain` instead, or let " +":func:`ssl.create_default_context` select the system's trusted CA " +"certificates for you." +msgstr "" +"*keyfile* 和 *certfile* 已弃用并转而推荐 *context*。 请改用 " +":meth:`ssl.SSLContext.load_cert_chain` 或让 :func:`ssl.create_default_context`" +" 为你选择系统所信任的 CA 证书。" + +#: ../../library/smtplib.rst:121 +msgid "" +"The LMTP protocol, which is very similar to ESMTP, is heavily based on the " +"standard SMTP client. It's common to use Unix sockets for LMTP, so our " +":meth:`connect` method must support that as well as a regular host:port " +"server. The optional arguments local_hostname and source_address have the " +"same meaning as they do in the :class:`SMTP` class. To specify a Unix " +"socket, you must use an absolute path for *host*, starting with a '/'." +msgstr "" +"LMTP 协议与 ESMTP 非常相似,它很大程度上基于标准的 SMTP 客户端。将 Unix 套接字用于 LMTP 是很常见的,因此 " +":meth:`connect` 方法支持 Unix 套接字,也支持常规的 host:port 服务器。可选参数 local_hostname 和 " +"source_address 的含义与 :class:`SMTP` 类中的相同。要指定 Unix 套接字,*host* 必须使用绝对路径,以 '/' " +"开头。" + +#: ../../library/smtplib.rst:128 +msgid "" +"Authentication is supported, using the regular SMTP mechanism. When using a " +"Unix socket, LMTP generally don't support or require any authentication, but" +" your mileage might vary." +msgstr "支持使用常规的 SMTP 机制来进行认证。 当使用 Unix 套接字时,LMTP 通常不支持或要求任何认证,但你的情况可能会有所不同。" + +#: ../../library/smtplib.rst:132 +msgid "The optional *timeout* parameter was added." +msgstr "添加了可选的 *timeout* 形参。" + +#: ../../library/smtplib.rst:136 +msgid "A nice selection of exceptions is defined as well:" +msgstr "同样地定义了一组精心选择的异常:" + +#: ../../library/smtplib.rst:141 +msgid "" +"Subclass of :exc:`OSError` that is the base exception class for all the " +"other exceptions provided by this module." +msgstr ":exc:`OSError` 的子类,它是本模块提供的所有其他异常的基类。" + +#: ../../library/smtplib.rst:144 +msgid "SMTPException became subclass of :exc:`OSError`" +msgstr "SMTPException 已成为 :exc:`OSError` 的子类" + +#: ../../library/smtplib.rst:150 +msgid "" +"This exception is raised when the server unexpectedly disconnects, or when " +"an attempt is made to use the :class:`SMTP` instance before connecting it to" +" a server." +msgstr "当服务器意外断开连接,或在 :class:`SMTP` 实例连接到服务器之前尝试使用它时将引发此异常。" + +#: ../../library/smtplib.rst:157 +msgid "" +"Base class for all exceptions that include an SMTP error code. These " +"exceptions are generated in some instances when the SMTP server returns an " +"error code. The error code is stored in the :attr:`smtp_code` attribute of " +"the error, and the :attr:`smtp_error` attribute is set to the error message." +msgstr "" +"包括 SMTP 错误代码的所有异常的基类。 这些异常会在 SMTP 服务器返回错误代码时在实例中生成。 错误代码存放在错误的 " +":attr:`smtp_code` 属性中,并且 :attr:`smtp_error` 属性会被设为错误消息。" + +#: ../../library/smtplib.rst:165 +msgid "" +"Sender address refused. In addition to the attributes set by on all " +":exc:`SMTPResponseException` exceptions, this sets 'sender' to the string " +"that the SMTP server refused." +msgstr "" +"发送方地址被拒绝。 除了在所有 :exc:`SMTPResponseException` 异常上设置的属性,还会将 'sender' 设为代表拒绝方 " +"SMTP 服务器的字符串。" + +#: ../../library/smtplib.rst:172 +msgid "" +"All recipient addresses refused. The errors for each recipient are " +"accessible through the attribute :attr:`recipients`, which is a dictionary " +"of exactly the same sort as :meth:`SMTP.sendmail` returns." +msgstr "" +"所有接收方地址被拒绝。 每个接收方的错误可通过属性 :attr:`recipients` 来访问,该属性是一个字典,其元素顺序与 " +":meth:`SMTP.sendmail` 所返回的一致。" + +#: ../../library/smtplib.rst:179 +msgid "The SMTP server refused to accept the message data." +msgstr "SMTP 服务器拒绝接收消息数据。" + +#: ../../library/smtplib.rst:184 +msgid "Error occurred during establishment of a connection with the server." +msgstr "在建立与服务器的连接期间发生了错误。" + +#: ../../library/smtplib.rst:189 +msgid "The server refused our ``HELO`` message." +msgstr "服务器拒绝了我们的 ``HELO`` 消息。" + +#: ../../library/smtplib.rst:194 +msgid "The command or option attempted is not supported by the server." +msgstr "尝试的命令或选项不被服务器所支持。" + +#: ../../library/smtplib.rst:201 +msgid "" +"SMTP authentication went wrong. Most probably the server didn't accept the " +"username/password combination provided." +msgstr "SMTP 认证出现问题。 最大的可能是服务器不接受所提供的用户名/密码组合。" + +#: ../../library/smtplib.rst:209 +msgid ":rfc:`821` - Simple Mail Transfer Protocol" +msgstr ":rfc:`821` - 简单邮件传输协议" + +#: ../../library/smtplib.rst:208 +msgid "" +"Protocol definition for SMTP. This document covers the model, operating " +"procedure, and protocol details for SMTP." +msgstr "SMTP 的协议定义。 该文件涵盖了 SMTP 的模型、操作程序和协议细节。" + +#: ../../library/smtplib.rst:213 +msgid ":rfc:`1869` - SMTP Service Extensions" +msgstr ":rfc:`1869` - SMTP 服务扩展" + +#: ../../library/smtplib.rst:212 +msgid "" +"Definition of the ESMTP extensions for SMTP. This describes a framework for" +" extending SMTP with new commands, supporting dynamic discovery of the " +"commands provided by the server, and defines a few additional commands." +msgstr "" +"定义了 SMTP 的 ESMTP 扩展。 这描述了一个用新命令扩展 SMTP 的框架,支持动态发现服务器所提供的命令,并定义了一些额外的命令。" + +#: ../../library/smtplib.rst:220 +msgid "SMTP Objects" +msgstr "SMTP 对象" + +#: ../../library/smtplib.rst:222 +msgid "An :class:`SMTP` instance has the following methods:" +msgstr "一个 :class:`SMTP` 实例拥有以下方法:" + +#: ../../library/smtplib.rst:227 +msgid "" +"Set the debug output level. A value of 1 or ``True`` for *level* results in" +" debug messages for connection and for all messages sent to and received " +"from the server. A value of 2 for *level* results in these messages being " +"timestamped." +msgstr "" +"设置调试输出级别。 如果 *level* 的值为 1 或 ``True`` ,就会产生连接的调试信息,以及所有发送和接收服务器的信息。 如果 " +"*level* 的值为 2 ,则这些信息会被加上时间戳。" + +#: ../../library/smtplib.rst:232 +msgid "Added debuglevel 2." +msgstr "添调试级别 2 。" + +#: ../../library/smtplib.rst:237 +msgid "" +"Send a command *cmd* to the server. The optional argument *args* is simply " +"concatenated to the command, separated by a space." +msgstr "向服务器发送一条命令 *cmd* 。 可选的参数 *args* 被简单地串联到命令中,用一个空格隔开。" + +#: ../../library/smtplib.rst:240 +msgid "" +"This returns a 2-tuple composed of a numeric response code and the actual " +"response line (multiline responses are joined into one long line.)" +msgstr "这将返回一个由数字响应代码和实际响应行组成的2元组(多行响应被连接成一个长行)。" + +#: ../../library/smtplib.rst:243 +msgid "" +"In normal operation it should not be necessary to call this method " +"explicitly. It is used to implement other methods and may be useful for " +"testing private extensions." +msgstr "在正常操作中,应该没有必要明确地调用这个方法。它被用来实现其他方法,对于测试私有扩展可能很有用。" + +#: ../../library/smtplib.rst:247 +msgid "" +"If the connection to the server is lost while waiting for the reply, " +":exc:`SMTPServerDisconnected` will be raised." +msgstr "如果在等待回复的过程中,与服务器的连接丢失, :exc:`SMTPServerDisconnected` 将被触发。" + +#: ../../library/smtplib.rst:253 +msgid "" +"Connect to a host on a given port. The defaults are to connect to the local" +" host at the standard SMTP port (25). If the hostname ends with a colon " +"(``':'``) followed by a number, that suffix will be stripped off and the " +"number interpreted as the port number to use. This method is automatically " +"invoked by the constructor if a host is specified during instantiation. " +"Returns a 2-tuple of the response code and message sent by the server in its" +" connection response." +msgstr "" +"连接到某个主机的某个端口。默认是连接到 localhost 的标准 SMTP 端口(25)上。如果主机名以冒号 (``':'``) " +"结尾,后跟数字,则该后缀将被删除,且数字将视作要使用的端口号。如果在实例化时指定了 host,则构造函数会自动调用本方法。返回包含响应码和响应消息的 2" +" 元组,它们由服务器在其连接响应中发送。" + +#: ../../library/smtplib.rst:261 +msgid "" +"Raises an :ref:`auditing event ` ``smtplib.connect`` with " +"arguments ``self``, ``host``, ``port``." +msgstr "" +"引发一个 :ref:`审计事件 ` ``smtplib.connect`` 并附带参数 ``self``, ``host``, " +"``port``。" + +#: ../../library/smtplib.rst:266 +msgid "" +"Identify yourself to the SMTP server using ``HELO``. The hostname argument " +"defaults to the fully qualified domain name of the local host. The message " +"returned by the server is stored as the :attr:`helo_resp` attribute of the " +"object." +msgstr "" +"使用 ``HELO`` 向 SMTP 服务器表明自己的身份。 hostname 参数默认为本地主机的完全合格域名。服务器返回的消息被存储为对象的 " +":attr:`helo_resp` 属性。" + +#: ../../library/smtplib.rst:271 +msgid "" +"In normal operation it should not be necessary to call this method " +"explicitly. It will be implicitly called by the :meth:`sendmail` when " +"necessary." +msgstr "在正常操作中,应该没有必要明确调用这个方法。它将在必要时被 :meth:`sendmail` 隐式调用。" + +#: ../../library/smtplib.rst:277 +msgid "" +"Identify yourself to an ESMTP server using ``EHLO``. The hostname argument " +"defaults to the fully qualified domain name of the local host. Examine the " +"response for ESMTP option and store them for use by :meth:`has_extn`. Also " +"sets several informational attributes: the message returned by the server is" +" stored as the :attr:`ehlo_resp` attribute, :attr:`does_esmtp` is set to " +"true or false depending on whether the server supports ESMTP, and " +":attr:`esmtp_features` will be a dictionary containing the names of the SMTP" +" service extensions this server supports, and their parameters (if any)." +msgstr "" +"使用 ``EHLO`` 向 ESMTP 服务器标识自身。hostname 参数默认为 localhost 的标准域名。使用 " +":meth:`has_extn` 来检查响应中的 ESMTP 选项,并将它们保存起来。还给一些信息性的属性赋值:服务器返回的消息存储为 " +":attr:`ehlo_resp` 属性;根据服务器是否支持 ESMTP,将 :attr:`does_esmtp` 设置为 true 或 false;而" +" :attr:`esmtp_features` 是一个字典,包含该服务器支持的 SMTP 服务扩展的名称及参数(如果有参数)。" + +#: ../../library/smtplib.rst:286 +msgid "" +"Unless you wish to use :meth:`has_extn` before sending mail, it should not " +"be necessary to call this method explicitly. It will be implicitly called " +"by :meth:`sendmail` when necessary." +msgstr "" +"除非你想在发送邮件前使用 :meth:`has_extn` ,否则应该没有必要明确调用这个方法。 它将在必要时被 :meth:`sendmail` " +"隐式调用。" + +#: ../../library/smtplib.rst:292 +msgid "" +"This method calls :meth:`ehlo` and/or :meth:`helo` if there has been no " +"previous ``EHLO`` or ``HELO`` command this session. It tries ESMTP ``EHLO``" +" first." +msgstr "" +"如果这个会话中没有先前的 ``EHLO`` 或 ``HELO`` 命令,该方法会调用 :meth:`ehlo` 和/或 :meth:`helo` " +"。它首先尝试 ESMTP ``EHLO`` 。" + +#: ../../library/smtplib.rst:296 ../../library/smtplib.rst:326 +#: ../../library/smtplib.rst:418 ../../library/smtplib.rst:487 +msgid ":exc:`SMTPHeloError`" +msgstr ":exc:`SMTPHeloError`" + +#: ../../library/smtplib.rst:297 ../../library/smtplib.rst:326 +#: ../../library/smtplib.rst:418 ../../library/smtplib.rst:487 +msgid "The server didn't reply properly to the ``HELO`` greeting." +msgstr "服务器没有正确回复 ``HELO`` 问候。" + +#: ../../library/smtplib.rst:301 +msgid "" +"Return :const:`True` if *name* is in the set of SMTP service extensions " +"returned by the server, :const:`False` otherwise. Case is ignored." +msgstr "" +"如果 *name* 在服务器返回的 SMTP 服务扩展集合中,返回 :const:`True` ,否则为 :const:`False` 。大小写被忽略。" + +#: ../../library/smtplib.rst:307 +msgid "" +"Check the validity of an address on this server using SMTP ``VRFY``. Returns" +" a tuple consisting of code 250 and a full :rfc:`822` address (including " +"human name) if the user address is valid. Otherwise returns an SMTP error " +"code of 400 or greater and an error string." +msgstr "" +"使用 SMTP ``VRFY`` 检查此服务器上的某个地址是否有效。 如果用户地址有效则返回一个由代码 250 和完整 :rfc:`822` " +"地址(包括人名)组成的元组。 否则返回 400 或更大的 SMTP 错误代码以及一个错误字符串。" + +#: ../../library/smtplib.rst:314 +msgid "Many sites disable SMTP ``VRFY`` in order to foil spammers." +msgstr "许多网站都禁用 SMTP ``VRFY`` 以阻止垃圾邮件。" + +#: ../../library/smtplib.rst:319 +msgid "" +"Log in on an SMTP server that requires authentication. The arguments are the" +" username and the password to authenticate with. If there has been no " +"previous ``EHLO`` or ``HELO`` command this session, this method tries ESMTP " +"``EHLO`` first. This method will return normally if the authentication was " +"successful, or may raise the following exceptions:" +msgstr "" +"登录到一个需要认证的 SMTP 服务器。 参数是用于认证的用户名和密码。 如果会话在之前没有执行过 ``EHLO`` 或 ``HELO`` " +"命令,此方法会先尝试 ESMTP ``EHLO``。 如果认证成功则此方法将正常返回,否则可能引发以下异常:" + +#: ../../library/smtplib.rst:329 +msgid ":exc:`SMTPAuthenticationError`" +msgstr ":exc:`SMTPAuthenticationError`" + +#: ../../library/smtplib.rst:329 +msgid "The server didn't accept the username/password combination." +msgstr "服务器不接受所提供的用户名/密码组合。" + +#: ../../library/smtplib.rst:332 ../../library/smtplib.rst:421 +#: ../../library/smtplib.rst:498 +msgid ":exc:`SMTPNotSupportedError`" +msgstr ":exc:`SMTPNotSupportedError`" + +#: ../../library/smtplib.rst:332 +msgid "The ``AUTH`` command is not supported by the server." +msgstr "服务器不支持 ``AUTH`` 命令。" + +#: ../../library/smtplib.rst:335 +msgid ":exc:`SMTPException`" +msgstr ":exc:`SMTPException`" + +#: ../../library/smtplib.rst:335 +msgid "No suitable authentication method was found." +msgstr "未找到适当的认证方法。" + +#: ../../library/smtplib.rst:337 +msgid "" +"Each of the authentication methods supported by :mod:`smtplib` are tried in " +"turn if they are advertised as supported by the server. See :meth:`auth` " +"for a list of supported authentication methods. *initial_response_ok* is " +"passed through to :meth:`auth`." +msgstr "" +":mod:`smtplib` 所支持的每种认证方法只要被服务器声明支持就会被依次尝试。 请参阅 :meth:`auth` 获取受支持的认证方法列表。 " +"*initial_response_ok* 会被传递给 :meth:`auth`。" + +#: ../../library/smtplib.rst:342 +msgid "" +"Optional keyword argument *initial_response_ok* specifies whether, for " +"authentication methods that support it, an \"initial response\" as specified" +" in :rfc:`4954` can be sent along with the ``AUTH`` command, rather than " +"requiring a challenge/response." +msgstr "" +"可选的关键字参数 *initial_response_ok* 对于支持它的认证方法,是否可以与 ``AUTH`` 命令一起发送 :rfc:`4954` " +"中所规定的“初始响应”,而不是要求回复/响应。" + +#: ../../library/smtplib.rst:347 +msgid "" +":exc:`SMTPNotSupportedError` may be raised, and the *initial_response_ok* " +"parameter was added." +msgstr "可能会引发 :exc:`SMTPNotSupportedError`,并添加 *initial_response_ok* 形参。" + +#: ../../library/smtplib.rst:354 +msgid "" +"Issue an ``SMTP`` ``AUTH`` command for the specified authentication " +"*mechanism*, and handle the challenge response via *authobject*." +msgstr "为指定的认证机制 *mechanism* 发送 ``SMTP`` ``AUTH`` 命令,并通过 *authobject* 处理回复响应。" + +#: ../../library/smtplib.rst:357 +msgid "" +"*mechanism* specifies which authentication mechanism is to be used as " +"argument to the ``AUTH`` command; the valid values are those listed in the " +"``auth`` element of :attr:`esmtp_features`." +msgstr "" +"*mechanism* 指定要使用何种认证机制作为 ``AUTH`` 命令的参数;可用的值是在 :attr:`esmtp_features` 的 " +"``auth`` 元素中列出的内容。" + +#: ../../library/smtplib.rst:361 +msgid "" +"*authobject* must be a callable object taking an optional single argument:" +msgstr "*authobject* 必须是接受一个可选的单独参数的可调用对象:" + +#: ../../library/smtplib.rst:363 +msgid "data = authobject(challenge=None)" +msgstr "data = authobject(challenge=None)" + +#: ../../library/smtplib.rst:365 +msgid "" +"If optional keyword argument *initial_response_ok* is true, ``authobject()``" +" will be called first with no argument. It can return the :rfc:`4954` " +"\"initial response\" ASCII ``str`` which will be encoded and sent with the " +"``AUTH`` command as below. If the ``authobject()`` does not support an " +"initial response (e.g. because it requires a challenge), it should return " +"``None`` when called with ``challenge=None``. If *initial_response_ok* is " +"false, then ``authobject()`` will not be called first with ``None``." +msgstr "" +"如果可选的关键字参数 *initial_response_ok* 为真值,则将先不带参数地调用 ``authobject()``。 它可以返回 " +":rfc:`4954` \"初始响应\" ASCII ``str``,其内容将被编码并使用下述的 ``AUTH`` 命令来发送。 如果 " +"``authobject()`` 不支持初始响应(例如由于要求一个回复),它应当将 ``None`` 作为附带 ``challenge=None`` " +"调用的返回值。 如果 *initial_response_ok* 为假值,则 ``authobject()`` 将不会附带 ``None`` " +"被首先调用。" + +#: ../../library/smtplib.rst:373 +msgid "" +"If the initial response check returns ``None``, or if *initial_response_ok* " +"is false, ``authobject()`` will be called to process the server's challenge " +"response; the *challenge* argument it is passed will be a ``bytes``. It " +"should return ASCII ``str`` *data* that will be base64 encoded and sent to " +"the server." +msgstr "" +"如果初始响应检测返回了 ``None``,或者如果 *initial_response_ok* 为假值,则将调用 ``authobject()`` " +"来处理服务器的回复响应;它所传递的 *challenge* 参数将为一个 ``bytes``。 它应当返回用 base64 进行编码的 ASCII " +"``str`` *data* 并发送给服务器。" + +#: ../../library/smtplib.rst:379 +msgid "" +"The ``SMTP`` class provides ``authobjects`` for the ``CRAM-MD5``, ``PLAIN``," +" and ``LOGIN`` mechanisms; they are named ``SMTP.auth_cram_md5``, " +"``SMTP.auth_plain``, and ``SMTP.auth_login`` respectively. They all require" +" that the ``user`` and ``password`` properties of the ``SMTP`` instance are " +"set to appropriate values." +msgstr "" +"``SMTP`` 类提供的 ``authobjects`` 针对 ``CRAM-MD5``, ``PLAIN`` 和 ``LOGIN`` " +"等机制;它们的名称分别是 ``SMTP.auth_cram_md5``, ``SMTP.auth_plain`` 和 " +"``SMTP.auth_login``。 它们都要求将 ``user`` 和 ``password`` 这两个 ``SMTP`` 实例属性设为适当的值。" + +#: ../../library/smtplib.rst:385 +msgid "" +"User code does not normally need to call ``auth`` directly, but can instead " +"call the :meth:`login` method, which will try each of the above mechanisms " +"in turn, in the order listed. ``auth`` is exposed to facilitate the " +"implementation of authentication methods not (or not yet) supported directly" +" by :mod:`smtplib`." +msgstr "" +"用户代码通常不需要直接调用 ``auth``,而是调用 :meth:`login` 方法,它将按上述顺序依次尝试上述每一种机制。 ``auth`` " +"被公开以便辅助实现 :mod:`smtplib` 没有(或尚未)直接支持的认证方法。" + +#: ../../library/smtplib.rst:396 +msgid "" +"Put the SMTP connection in TLS (Transport Layer Security) mode. All SMTP " +"commands that follow will be encrypted. You should then call :meth:`ehlo` " +"again." +msgstr "" +"将 SMTP 连接设为 TLS (传输层安全) 模式。 后续的所有 SMTP 命令都将被加密。 你应当随即再次调用 :meth:`ehlo`。" + +#: ../../library/smtplib.rst:400 +msgid "" +"If *keyfile* and *certfile* are provided, they are used to create an " +":class:`ssl.SSLContext`." +msgstr "如果提供了 *keyfile* 和 *certfile*,它们会被用来创建 :class:`ssl.SSLContext`。" + +#: ../../library/smtplib.rst:403 +msgid "" +"Optional *context* parameter is an :class:`ssl.SSLContext` object; This is " +"an alternative to using a keyfile and a certfile and if specified both " +"*keyfile* and *certfile* should be ``None``." +msgstr "" +"可选的 *context* 形参是一个 :class:`ssl.SSLContext` 对象;它是使用密钥文件和证书的替代方式,如果指定了该形参则 " +"*keyfile* 和 *certfile* 都应为 ``None``。" + +#: ../../library/smtplib.rst:407 +msgid "" +"If there has been no previous ``EHLO`` or ``HELO`` command this session, " +"this method tries ESMTP ``EHLO`` first." +msgstr "如果这个会话中没有先前的 ``EHLO`` or ``HELO`` 命令,该方法会首先尝试 ESMTP ``EHLO``。" + +#: ../../library/smtplib.rst:421 +msgid "The server does not support the STARTTLS extension." +msgstr "服务器不支持 STARTTLS 扩展。" + +#: ../../library/smtplib.rst:424 +msgid ":exc:`RuntimeError`" +msgstr ":exc:`RuntimeError`" + +#: ../../library/smtplib.rst:424 +msgid "SSL/TLS support is not available to your Python interpreter." +msgstr "SSL/TLS 支持在你的 Python 解释器上不可用。" + +#: ../../library/smtplib.rst:429 +msgid "" +"The method now supports hostname check with " +":attr:`SSLContext.check_hostname` and *Server Name Indicator* (see " +":data:`~ssl.HAS_SNI`)." +msgstr "" +"此方法现在支持使用 :attr:`SSLContext.check_hostname` 和 *服务器名称指示符* (参见 " +":data:`~ssl.HAS_SNI`) 进行主机名检查。" + +#: ../../library/smtplib.rst:434 +msgid "" +"The error raised for lack of STARTTLS support is now the " +":exc:`SMTPNotSupportedError` subclass instead of the base " +":exc:`SMTPException`." +msgstr "" +"因缺少 STARTTLS 支持而引发的错误现在是 :exc:`SMTPNotSupportedError` 子类而不是 " +":exc:`SMTPException` 基类。" + +#: ../../library/smtplib.rst:442 +msgid "" +"Send mail. The required arguments are an :rfc:`822` from-address string, a " +"list of :rfc:`822` to-address strings (a bare string will be treated as a " +"list with 1 address), and a message string. The caller may pass a list of " +"ESMTP options (such as ``8bitmime``) to be used in ``MAIL FROM`` commands as" +" *mail_options*. ESMTP options (such as ``DSN`` commands) that should be " +"used with all ``RCPT`` commands can be passed as *rcpt_options*. (If you " +"need to use different ESMTP options to different recipients you have to use " +"the low-level methods such as :meth:`mail`, :meth:`rcpt` and :meth:`data` to" +" send the message.)" +msgstr "" +"发送邮件。必要参数是一个 :rfc:`822` 发件地址字符串,一个 :rfc:`822` 收件地址字符串列表(裸字符串将被视为含有 1 " +"个地址的列表),以及一个消息字符串。调用者可以将 ESMTP 选项列表(如 ``8bitmime``)作为 *mail_options* 传入,用于 " +"``MAIL FROM`` 命令。需要与所有 ``RCPT`` 命令一起使用的 ESMTP 选项(如 ``DSN`` 命令)可以作为 " +"*rcpt_options* 传入。(如果需要对不同的收件人使用不同的 ESMTP 选项,则必须使用底层的方法来发送消息,如 :meth:`mail`," +" :meth:`rcpt` 和 :meth:`data`。)" + +#: ../../library/smtplib.rst:453 +msgid "" +"The *from_addr* and *to_addrs* parameters are used to construct the message " +"envelope used by the transport agents. ``sendmail`` does not modify the " +"message headers in any way." +msgstr "" +"*from_addr* 和 *to_addrs* 形参被用来构造传输代理所使用的消息封包。 ``sendmail`` 不会以任何方式修改消息标头。" + +#: ../../library/smtplib.rst:457 +msgid "" +"*msg* may be a string containing characters in the ASCII range, or a byte " +"string. A string is encoded to bytes using the ascii codec, and lone " +"``\\r`` and ``\\n`` characters are converted to ``\\r\\n`` characters. A " +"byte string is not modified." +msgstr "" +"*msg* 可以是一个包含 ASCII 范围内字符的字符串,或是一个字节串。 字符串会使用 ascii 编解码器编码为字节串,并且单独的 ``\\r``" +" 和 ``\\n`` 字符会被转换为 ``\\r\\n`` 字符序列。 字节串则不会被修改。" + +#: ../../library/smtplib.rst:462 +msgid "" +"If there has been no previous ``EHLO`` or ``HELO`` command this session, " +"this method tries ESMTP ``EHLO`` first. If the server does ESMTP, message " +"size and each of the specified options will be passed to it (if the option " +"is in the feature set the server advertises). If ``EHLO`` fails, ``HELO`` " +"will be tried and ESMTP options suppressed." +msgstr "" +"如果在此之前本会话没有执行过 ``EHLO`` 或 ``HELO`` 命令,此方法会先尝试 ESMTP ``EHLO``。 如果服务器执行了 " +"ESMTP,消息大小和每个指定的选项将被传递给它(如果指定的选项属于服务器声明的特性集)。 如果 ``EHLO`` 失败,则将尝试 ``HELO`` " +"并屏蔽 ESMTP 选项。" + +#: ../../library/smtplib.rst:468 +msgid "" +"This method will return normally if the mail is accepted for at least one " +"recipient. Otherwise it will raise an exception. That is, if this method " +"does not raise an exception, then someone should get your mail. If this " +"method does not raise an exception, it returns a dictionary, with one entry " +"for each recipient that was refused. Each entry contains a tuple of the " +"SMTP error code and the accompanying error message sent by the server." +msgstr "" +"如果邮件被至少一个接收方接受则此方法将正常返回。 在其他情况下它将引发异常。 也就是说,如果此方法没有引发异常,则应当会有人收到你的邮件。 " +"如果此方法没有引发异常,它将返回一个字典,其中的条目对应每个拒绝的接收方。 每个条目均包含由服务器发送的 SMTP 错误代码和相应错误消息所组成的元组。" + +#: ../../library/smtplib.rst:475 +msgid "" +"If ``SMTPUTF8`` is included in *mail_options*, and the server supports it, " +"*from_addr* and *to_addrs* may contain non-ASCII characters." +msgstr "" +"如果 ``SMTPUTF8`` 包括在 *mail_options* 中,并且被服务器所支持,则 *from_addr* 和 *to_addrs* " +"可能包含非 ASCII 字符。" + +#: ../../library/smtplib.rst:478 +msgid "This method may raise the following exceptions:" +msgstr "此方法可能引发以下异常:" + +#: ../../library/smtplib.rst:484 +msgid ":exc:`SMTPRecipientsRefused`" +msgstr ":exc:`SMTPRecipientsRefused`" + +#: ../../library/smtplib.rst:481 +msgid "" +"All recipients were refused. Nobody got the mail. The :attr:`recipients` " +"attribute of the exception object is a dictionary with information about the" +" refused recipients (like the one returned when at least one recipient was " +"accepted)." +msgstr "" +"所有收件人都被拒绝。 无人收到邮件。 该异常的 :attr:`recipients` " +"属性是一个字典,其中有被拒绝收件人的信息(类似于至少有一个收件人接受邮件时所返回的信息)。" + +#: ../../library/smtplib.rst:490 +msgid ":exc:`SMTPSenderRefused`" +msgstr ":exc:`SMTPSenderRefused`" + +#: ../../library/smtplib.rst:490 +msgid "The server didn't accept the *from_addr*." +msgstr "服务器不接受 *from_addr*。" + +#: ../../library/smtplib.rst:494 +msgid ":exc:`SMTPDataError`" +msgstr ":exc:`SMTPDataError`" + +#: ../../library/smtplib.rst:493 +msgid "" +"The server replied with an unexpected error code (other than a refusal of a " +"recipient)." +msgstr "服务器回复了一个意外的错误代码(而不是拒绝收件人)。" + +#: ../../library/smtplib.rst:497 +msgid "" +"``SMTPUTF8`` was given in the *mail_options* but is not supported by the " +"server." +msgstr "在 *mail_options* 中给出了 ``SMTPUTF8`` 但是不被服务器所支持。" + +#: ../../library/smtplib.rst:500 +msgid "" +"Unless otherwise noted, the connection will be open even after an exception " +"is raised." +msgstr "除非另有说明,即使在引发异常之后连接仍将被打开。" + +#: ../../library/smtplib.rst:503 +msgid "*msg* may be a byte string." +msgstr "*msg* 可以为字节串。" + +#: ../../library/smtplib.rst:506 +msgid "" +"``SMTPUTF8`` support added, and :exc:`SMTPNotSupportedError` may be raised " +"if ``SMTPUTF8`` is specified but the server does not support it." +msgstr "" +"增加了 ``SMTPUTF8`` 支持,并且如果指定了 ``SMTPUTF8`` 但是不被服务器所支持则可能会引发 " +":exc:`SMTPNotSupportedError`。" + +#: ../../library/smtplib.rst:514 +msgid "" +"This is a convenience method for calling :meth:`sendmail` with the message " +"represented by an :class:`email.message.Message` object. The arguments have" +" the same meaning as for :meth:`sendmail`, except that *msg* is a " +"``Message`` object." +msgstr "" +"本方法是一种快捷方法,用于带着消息调用 :meth:`sendmail`,消息由 :class:`email.message.Message` " +"对象表示。参数的含义与 :meth:`sendmail` 中的相同,除了 *msg*,它是一个 ``Message`` 对象。" + +#: ../../library/smtplib.rst:519 +msgid "" +"If *from_addr* is ``None`` or *to_addrs* is ``None``, ``send_message`` fills" +" those arguments with addresses extracted from the headers of *msg* as " +"specified in :rfc:`5322`\\: *from_addr* is set to the :mailheader:`Sender` " +"field if it is present, and otherwise to the :mailheader:`From` field. " +"*to_addrs* combines the values (if any) of the :mailheader:`To`, " +":mailheader:`Cc`, and :mailheader:`Bcc` fields from *msg*. If exactly one " +"set of :mailheader:`Resent-*` headers appear in the message, the regular " +"headers are ignored and the :mailheader:`Resent-*` headers are used instead." +" If the message contains more than one set of :mailheader:`Resent-*` " +"headers, a :exc:`ValueError` is raised, since there is no way to " +"unambiguously detect the most recent set of :mailheader:`Resent-` headers." +msgstr "" +"如果 *from_addr* 为 ``None`` 或 *to_addrs* 为 ``None`` ,那么 ``send_message`` 将根据 " +":rfc:`5322`,从 *msg* 头部提取地址填充下列参数:如果头部存在 :mailheader:`Sender` 字段,则用它填充 " +"*from_addr*,不存在则用 :mailheader:`From` 字段填充 *from_addr*。*to_addrs* 组合了 *msg* " +"中的 :mailheader:`To`, :mailheader:`Cc` 和 :mailheader:`Bcc` " +"字段的值(字段存在的情况下)。如果一组 :mailheader:`Resent-*` 头部恰好出现在 message 中,那么就忽略常规的头部,改用 " +":mailheader:`Resent-*` 头部。如果 message 包含多组 :mailheader:`Resent-*` 头部,则引发 " +":exc:`ValueError`,因为无法明确检测出哪一组 :mailheader:`Resent-` 头部是最新的。" + +#: ../../library/smtplib.rst:531 +msgid "" +"``send_message`` serializes *msg* using " +":class:`~email.generator.BytesGenerator` with ``\\r\\n`` as the *linesep*, " +"and calls :meth:`sendmail` to transmit the resulting message. Regardless of" +" the values of *from_addr* and *to_addrs*, ``send_message`` does not " +"transmit any :mailheader:`Bcc` or :mailheader:`Resent-Bcc` headers that may " +"appear in *msg*. If any of the addresses in *from_addr* and *to_addrs* " +"contain non-ASCII characters and the server does not advertise ``SMTPUTF8`` " +"support, an :exc:`SMTPNotSupported` error is raised. Otherwise the " +"``Message`` is serialized with a clone of its :mod:`~email.policy` with the " +":attr:`~email.policy.EmailPolicy.utf8` attribute set to ``True``, and " +"``SMTPUTF8`` and ``BODY=8BITMIME`` are added to *mail_options*." +msgstr "" +"``send_message`` 使用 :class:`~email.generator.BytesGenerator` 来序列化 *msg*,且将 " +"``\\r\\n`` 作为 *linesep*,并调用 :meth:`sendmail` 来传输序列化后的结果。无论 *from_addr* 和 " +"*to_addrs* 的值为何,``send_message`` 都不会传输 *msg* 中可能出现的 :mailheader:`Bcc` 或 " +":mailheader:`Resent-Bcc` 头部。如果 *from_addr* 和 *to_addrs* 中的某个地址包含非 ASCII " +"字符,且服务器没有声明支持 ``SMTPUTF8``,则引发 :exc:`SMTPNotSupported` 错误。如果服务器支持,则 " +"``Message`` 将按新克隆的 :mod:`~email.policy` 进行序列化,其中的 " +":attr:`~email.policy.EmailPolicy.utf8` 属性被设置为 ``True``,且 ``SMTPUTF8`` 和 " +"``BODY=8BITMIME`` 被添加到 *mail_options* 中。" + +#: ../../library/smtplib.rst:545 +msgid "Support for internationalized addresses (``SMTPUTF8``)." +msgstr "支持国际化地址 (``SMTPUTF8``)。" + +#: ../../library/smtplib.rst:551 +msgid "" +"Terminate the SMTP session and close the connection. Return the result of " +"the SMTP ``QUIT`` command." +msgstr "终结 SMTP 会话并关闭连接。 返回 SMTP ``QUIT`` 命令的结果。" + +#: ../../library/smtplib.rst:555 +msgid "" +"Low-level methods corresponding to the standard SMTP/ESMTP commands " +"``HELP``, ``RSET``, ``NOOP``, ``MAIL``, ``RCPT``, and ``DATA`` are also " +"supported. Normally these do not need to be called directly, so they are not" +" documented here. For details, consult the module code." +msgstr "" +"与标准 SMTP/ESMTP 命令 ``HELP``, ``RSET``, ``NOOP``, ``MAIL``, ``RCPT`` 和 " +"``DATA`` 对应的低层级方法也是受支持的。 通常不需要直接调用这些方法,因此它们没有被写入本文档。 相关细节请参看模块代码。" + +#: ../../library/smtplib.rst:564 +msgid "SMTP Example" +msgstr "SMTP 示例" + +#: ../../library/smtplib.rst:566 +msgid "" +"This example prompts the user for addresses needed in the message envelope " +"('To' and 'From' addresses), and the message to be delivered. Note that the" +" headers to be included with the message must be included in the message as " +"entered; this example doesn't do any processing of the :rfc:`822` headers. " +"In particular, the 'To' and 'From' addresses must be included in the message" +" headers explicitly. ::" +msgstr "" +"这个例子提示用户输入消息封包所需的地址 ('To' 和 'From' 地址),以及所要封包的消息。 " +"请注意包括在消息中的标头必须包括在输入的消息中;这个例子不对 :rfc:`822` 标头进行任何处理。 特别地,'To' 和 'From' " +"地址必须显式地包括在消息标头中。 ::" + +#: ../../library/smtplib.rst:602 +msgid "" +"In general, you will want to use the :mod:`email` package's features to " +"construct an email message, which you can then send via " +":meth:`~smtplib.SMTP.send_message`; see :ref:`email-examples`." +msgstr "" +"通常,你将需要使用 :mod:`email` 包的特性来构造电子邮件消息,然后你可以通过 " +":meth:`~smtplib.SMTP.send_message` 来发送它,参见 :ref:`email-examples`。" diff --git a/library/sndhdr.po b/library/sndhdr.po new file mode 100644 index 000000000..5c53d9e1e --- /dev/null +++ b/library/sndhdr.po @@ -0,0 +1,84 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) 2001-2022, Python Software Foundation +# This file is distributed under the same license as the Python package. +# FIRST AUTHOR , YEAR. +# +# Translators: +# Zombie110year , 2019 +# Freesand Leo , 2022 +# +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: Python 3.9\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2022-11-04 14:34+0000\n" +"PO-Revision-Date: 2017-02-16 23:26+0000\n" +"Last-Translator: Freesand Leo , 2022\n" +"Language-Team: Chinese (China) (https://www.transifex.com/python-doc/teams/5390/zh_CN/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: zh_CN\n" +"Plural-Forms: nplurals=1; plural=0;\n" + +#: ../../library/sndhdr.rst:2 +msgid ":mod:`sndhdr` --- Determine type of sound file" +msgstr ":mod:`sndhdr` --- 推测声音文件的类型" + +#: ../../library/sndhdr.rst:11 +msgid "**Source code:** :source:`Lib/sndhdr.py`" +msgstr "**源代码** :source:`Lib/sndhdr.py`" + +#: ../../library/sndhdr.rst:17 +msgid "" +"The :mod:`sndhdr` module is deprecated (see :pep:`PEP 594 <594#sndhdr>` for " +"details and alternatives)." +msgstr ":mod:`sndhdr` 模块已被弃用(请参阅 :pep:`PEP 594 <594#sndhdr>` 了解详情及其替代品)。" + +#: ../../library/sndhdr.rst:23 +msgid "" +"The :mod:`sndhdr` provides utility functions which attempt to determine the " +"type of sound data which is in a file. When these functions are able to " +"determine what type of sound data is stored in a file, they return a " +":func:`~collections.namedtuple`, containing five attributes: (``filetype``, " +"``framerate``, ``nchannels``, ``nframes``, ``sampwidth``). The value for " +"*type* indicates the data type and will be one of the strings ``'aifc'``, " +"``'aiff'``, ``'au'``, ``'hcom'``, ``'sndr'``, ``'sndt'``, ``'voc'``, " +"``'wav'``, ``'8svx'``, ``'sb'``, ``'ub'``, or ``'ul'``. The *sampling_rate*" +" will be either the actual value or ``0`` if unknown or difficult to decode." +" Similarly, *channels* will be either the number of channels or ``0`` if it" +" cannot be determined or if the value is difficult to decode. The value for" +" *frames* will be either the number of frames or ``-1``. The last item in " +"the tuple, *bits_per_sample*, will either be the sample size in bits or " +"``'A'`` for A-LAW or ``'U'`` for u-LAW." +msgstr "" +":mod:`sndhdr` 提供了企图猜测文件中的声音数据类型的功能函数。当这些函数可以推测出存储在文件中的声音数据的类型是,它们返回一个 " +":func:`collections.namedtuple`,包含了五种属性:(``filetype``, ``framerate``, " +"``nchannels``, ``nframes``, ``sampwidth``)。这些 *type* 的值表示数据的类型,会是以下字符串之一: " +"``'aifc'``, ``'aiff'``, ``'au'``, ``'hcom'``, ``'sndr'``, ``'sndt'``, " +"``'voc'``, ``'wav'``, ``'8svx'``, ``'sb'``, ``'ub'``, or ``'ul'`` 。 " +"*sampling_rate* 可能是实际值或者当未知或者难以解码时的 ``0``。类似的, *channels* " +"也会返回实际值或者在无法推测或者难以解码时返回 ``0``。 *frames* 则是实际值或 ``-1``。 元组的最后一项, " +"*bits_per_sample* 将会为比特表示的 sample 大小或者 A-LAW 时为 ``'A'``, u-LAW 时为 ``'U'``。" + +#: ../../library/sndhdr.rst:40 +msgid "" +"Determines the type of sound data stored in the file *filename* using " +":func:`whathdr`. If it succeeds, returns a namedtuple as described above, " +"otherwise ``None`` is returned." +msgstr "" +"使用 :func:`whathdr` 推测存储在 *filename* 文件中的声音数据的类型。如果成功,返回上述的命名元组,否则返回 " +"``None``。" + +#: ../../library/sndhdr.rst:44 ../../library/sndhdr.rst:54 +msgid "Result changed from a tuple to a namedtuple." +msgstr "将结果从元组改为命名元组。" + +#: ../../library/sndhdr.rst:50 +msgid "" +"Determines the type of sound data stored in a file based on the file " +"header. The name of the file is given by *filename*. This function returns " +"a namedtuple as described above on success, or ``None``." +msgstr "" +"基于文件头推测存储在文件中的声音数据类型。文件名由 *filename* 给出。这个函数在成功时返回上述命名元组,或者在失败时返回 ``None``。" diff --git a/library/socket.po b/library/socket.po new file mode 100644 index 000000000..1e2283df9 --- /dev/null +++ b/library/socket.po @@ -0,0 +1,2603 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) 2001-2024, Python Software Foundation +# This file is distributed under the same license as the Python package. +# FIRST AUTHOR , YEAR. +# +# Translators: +# ww song , 2018 +# Menghua Xiao , 2018 +# Contextualist , 2019 +# cdarlint , 2019 +# ppcfish , 2019 +# Alpha Du , 2019 +# Zombie110year , 2019 +# Shengjing Zhu , 2019 +# Arisaka97 , 2020 +# Freesand Leo , 2022 +# Rafael Fontenelle , 2024 +# +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: Python 3.9\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2024-08-30 16:51+0000\n" +"PO-Revision-Date: 2017-02-16 23:26+0000\n" +"Last-Translator: Rafael Fontenelle , 2024\n" +"Language-Team: Chinese (China) (https://app.transifex.com/python-doc/teams/5390/zh_CN/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: zh_CN\n" +"Plural-Forms: nplurals=1; plural=0;\n" + +#: ../../library/socket.rst:2 +msgid ":mod:`socket` --- Low-level networking interface" +msgstr ":mod:`socket` --- 底层网络接口" + +#: ../../library/socket.rst:7 +msgid "**Source code:** :source:`Lib/socket.py`" +msgstr "**源代码:** :source:`Lib/socket.py`" + +#: ../../library/socket.rst:11 +msgid "" +"This module provides access to the BSD *socket* interface. It is available " +"on all modern Unix systems, Windows, MacOS, and probably additional " +"platforms." +msgstr "这个模块提供了访问 BSD *套接字* 的接口。在所有现代 Unix 系统、Windows、macOS 和其他一些平台上可用。" + +#: ../../library/socket.rst:16 +msgid "" +"Some behavior may be platform dependent, since calls are made to the " +"operating system socket APIs." +msgstr "一些行为可能因平台不同而异,因为调用的是操作系统的套接字API。" + +#: ../../library/socket.rst:21 +msgid "" +"The Python interface is a straightforward transliteration of the Unix system" +" call and library interface for sockets to Python's object-oriented style: " +"the :func:`.socket` function returns a :dfn:`socket object` whose methods " +"implement the various socket system calls. Parameter types are somewhat " +"higher-level than in the C interface: as with :meth:`read` and :meth:`write`" +" operations on Python files, buffer allocation on receive operations is " +"automatic, and buffer length is implicit on send operations." +msgstr "" +"这个Python接口是用Python的面向对象风格对Unix系统调用和套接字库接口的直译:函数 :func:`.socket` 返回一个 " +":dfn:`套接字对象` ,其方法是对各种套接字系统调用的实现。形参类型一般与C接口相比更高级:例如在Python文件 :meth:`read` 和 " +":meth:`write` 操作中,接收操作的缓冲区分配是自动的,发送操作的缓冲区长度是隐式的。" + +#: ../../library/socket.rst:33 +msgid "Module :mod:`socketserver`" +msgstr "模块 :mod:`socketserver`" + +#: ../../library/socket.rst:33 +msgid "Classes that simplify writing network servers." +msgstr "用于简化网络服务端编写的类。" + +#: ../../library/socket.rst:35 +msgid "Module :mod:`ssl`" +msgstr "模块 :mod:`ssl`" + +#: ../../library/socket.rst:36 +msgid "A TLS/SSL wrapper for socket objects." +msgstr "套接字对象的TLS/SSL封装。" + +#: ../../library/socket.rst:40 +msgid "Socket families" +msgstr "套接字协议族" + +#: ../../library/socket.rst:42 +msgid "" +"Depending on the system and the build options, various socket families are " +"supported by this module." +msgstr "根据系统以及构建选项,此模块提供了各种套接字协议簇。" + +#: ../../library/socket.rst:45 +msgid "" +"The address format required by a particular socket object is automatically " +"selected based on the address family specified when the socket object was " +"created. Socket addresses are represented as follows:" +msgstr "特定的套接字对象需要的地址格式将根据此套接字对象被创建时指定的地址族被自动选择。套接字地址表示如下:" + +#: ../../library/socket.rst:49 +msgid "" +"The address of an :const:`AF_UNIX` socket bound to a file system node is " +"represented as a string, using the file system encoding and the " +"``'surrogateescape'`` error handler (see :pep:`383`). An address in Linux's" +" abstract namespace is returned as a :term:`bytes-like object` with an " +"initial null byte; note that sockets in this namespace can communicate with " +"normal file system sockets, so programs intended to run on Linux may need to" +" deal with both types of address. A string or bytes-like object can be used" +" for either type of address when passing it as an argument." +msgstr "" +"一个绑定在文件系统节点上的 :const:`AF_UNIX` 套接字的地址表示为一个字符串,使用文件系统字符编码和 " +"``'surrogateescape'`` 错误回调方法(see :pep:`383`)。一个地址在 Linux 的抽象命名空间被返回为带有初始的 " +"null 字节的 :term:`字节类对象 ` " +";注意在这个命名空间种的套接字可能与普通文件系统套接字通信,所以打算运行在 Linux " +"上的程序可能需要解决两种地址类型。当传递为参数时,一个字符串或字节类对象可以用于任一类型的地址。" + +#: ../../library/socket.rst:59 +msgid "" +"Previously, :const:`AF_UNIX` socket paths were assumed to use UTF-8 " +"encoding." +msgstr "之前,:const:`AF_UNIX` 套接字路径被假设使用 UTF-8 编码。" + +#: ../../library/socket.rst:63 ../../library/socket.rst:970 +#: ../../library/socket.rst:1012 ../../library/socket.rst:1742 +msgid "Writable :term:`bytes-like object` is now accepted." +msgstr "现在接受可写的 :term:`字节类对象 `。" + +#: ../../library/socket.rst:68 +msgid "" +"A pair ``(host, port)`` is used for the :const:`AF_INET` address family, " +"where *host* is a string representing either a hostname in Internet domain " +"notation like ``'daring.cwi.nl'`` or an IPv4 address like " +"``'100.50.200.5'``, and *port* is an integer." +msgstr "" +"一对 ``(host, port)`` 被用于 :const:`AF_INET` 地址族,*host* 是一个表示为互联网域名表示法之内的主机名或者一个" +" IPv4 地址的字符串,例如 ``'daring.cwi.nl'`` 或 ``'100.50.200.5'``,*port* 是一个整数。" + +#: ../../library/socket.rst:73 +msgid "" +"For IPv4 addresses, two special forms are accepted instead of a host " +"address: ``''`` represents :const:`INADDR_ANY`, which is used to bind to all" +" interfaces, and the string ``''`` represents " +":const:`INADDR_BROADCAST`. This behavior is not compatible with IPv6, " +"therefore, you may want to avoid these if you intend to support IPv6 with " +"your Python programs." +msgstr "" +"对于 IPv4 地址,有两种可接受的特殊形式被用来代替一个主机地址: ``''`` 代表 " +":const:`INADDR_ANY`,用来绑定到所有接口;字符串 ``''`` 代表 " +":const:`INADDR_BROADCAST`。此行为不兼容 IPv6,因此,如果你的 Python 程序打算支持 IPv6,则可能需要避开这些。" + +#: ../../library/socket.rst:80 +msgid "" +"For :const:`AF_INET6` address family, a four-tuple ``(host, port, flowinfo, " +"scope_id)`` is used, where *flowinfo* and *scope_id* represent the " +"``sin6_flowinfo`` and ``sin6_scope_id`` members in :const:`struct " +"sockaddr_in6` in C. For :mod:`socket` module methods, *flowinfo* and " +"*scope_id* can be omitted just for backward compatibility. Note, however, " +"omission of *scope_id* can cause problems in manipulating scoped IPv6 " +"addresses." +msgstr "" +"对于 :const:`AF_INET6` 地址族,使用一个四元组 ``(host, port, flowinfo, scope_id)``,其中 " +"*flowinfo* 和 *scope_id* 代表了 C 库 :const:`struct sockaddr_in6` 中的 " +"``sin6_flowinfo`` 和 ``sin6_scope_id`` 成员。对于 :mod:`socket` 模块中的方法, *flowinfo*" +" 和 *scope_id* 可以被省略,只为了向后兼容。注意,省略 *scope_id* 可能会导致操作带有领域 (Scope) 的 IPv6 " +"地址时出错。" + +#: ../../library/socket.rst:87 +msgid "" +"For multicast addresses (with *scope_id* meaningful) *address* may not " +"contain ``%scope_id`` (or ``zone id``) part. This information is superfluous" +" and may be safely omitted (recommended)." +msgstr "" +"对于多播地址(其 *scope_id* 起作用),*地址* 中可以不包含 ``%scope_id`` (或 ``zone id`` " +")部分,这部分是多余的,可以放心省略(推荐)。" + +#: ../../library/socket.rst:92 +msgid "" +":const:`AF_NETLINK` sockets are represented as pairs ``(pid, groups)``." +msgstr ":const:`AF_NETLINK` 套接字由一对 ``(pid, groups)`` 表示。" + +#: ../../library/socket.rst:94 +msgid "" +"Linux-only support for TIPC is available using the :const:`AF_TIPC` address " +"family. TIPC is an open, non-IP based networked protocol designed for use " +"in clustered computer environments. Addresses are represented by a tuple, " +"and the fields depend on the address type. The general tuple form is " +"``(addr_type, v1, v2, v3 [, scope])``, where:" +msgstr "" +"指定 :const:`AF_TIPC` 地址族可以使用仅 Linux 支持的 TIPC 协议。TIPC 是一种开放的、非基于 IP " +"的网络协议,旨在用于集群计算环境。其地址用元组表示,其中的字段取决于地址类型。一般元组形式为 ``(addr_type, v1, v2, v3 [, " +"scope])``,其中:" + +#: ../../library/socket.rst:100 +msgid "" +"*addr_type* is one of :const:`TIPC_ADDR_NAMESEQ`, :const:`TIPC_ADDR_NAME`, " +"or :const:`TIPC_ADDR_ID`." +msgstr "" +"*addr_type* 取 :const:`TIPC_ADDR_NAMESEQ`、:const:`TIPC_ADDR_NAME` 或 " +":const:`TIPC_ADDR_ID` 中的一个。" + +#: ../../library/socket.rst:102 +msgid "" +"*scope* is one of :const:`TIPC_ZONE_SCOPE`, :const:`TIPC_CLUSTER_SCOPE`, and" +" :const:`TIPC_NODE_SCOPE`." +msgstr "" +"*scope* 取 :const:`TIPC_ZONE_SCOPE`、:const:`TIPC_CLUSTER_SCOPE` 和 " +":const:`TIPC_NODE_SCOPE` 中的一个。" + +#: ../../library/socket.rst:104 +msgid "" +"If *addr_type* is :const:`TIPC_ADDR_NAME`, then *v1* is the server type, " +"*v2* is the port identifier, and *v3* should be 0." +msgstr "" +"如果 *addr_type* 为 :const:`TIPC_ADDR_NAME`,那么 *v1* 是服务器类型,*v2* 是端口标识符,*v3* 应为 " +"0。" + +#: ../../library/socket.rst:107 +msgid "" +"If *addr_type* is :const:`TIPC_ADDR_NAMESEQ`, then *v1* is the server type, " +"*v2* is the lower port number, and *v3* is the upper port number." +msgstr "" +"如果 *addr_type* 为 :const:`TIPC_ADDR_NAMESEQ`,那么 *v1* 是服务器类型,*v2* 是端口号下限,而 " +"*v3* 是端口号上限。" + +#: ../../library/socket.rst:110 +msgid "" +"If *addr_type* is :const:`TIPC_ADDR_ID`, then *v1* is the node, *v2* is the " +"reference, and *v3* should be set to 0." +msgstr "" +"如果 *addr_type* 为 :const:`TIPC_ADDR_ID`,那么 *v1* 是节点 (node),*v2* 是 ref,*v3* 应为" +" 0。" + +#: ../../library/socket.rst:113 +msgid "" +"A tuple ``(interface, )`` is used for the :const:`AF_CAN` address family, " +"where *interface* is a string representing a network interface name like " +"``'can0'``. The network interface name ``''`` can be used to receive packets" +" from all network interfaces of this family." +msgstr "" +":const:`AF_CAN` 地址族使用元组 ``(interface, )``,其中 *interface* 是表示网络接口名称的字符串,如 " +"``'can0'``。网络接口名 ``''`` 可以用于接收本族所有网络接口的数据包。" + +#: ../../library/socket.rst:118 +msgid "" +":const:`CAN_ISOTP` protocol require a tuple ``(interface, rx_addr, " +"tx_addr)`` where both additional parameters are unsigned long integer that " +"represent a CAN identifier (standard or extended)." +msgstr "" +":const:`CAN_ISOTP` 协议接受一个元组 ``(interface, rx_addr, " +"tx_addr)``,其中两个额外参数都是无符号长整数,都表示 CAN 标识符(标准或扩展标识符)。" + +#: ../../library/socket.rst:121 +msgid "" +":const:`CAN_J1939` protocol require a tuple ``(interface, name, pgn, addr)``" +" where additional parameters are 64-bit unsigned integer representing the " +"ECU name, a 32-bit unsigned integer representing the Parameter Group Number " +"(PGN), and an 8-bit integer representing the address." +msgstr "" +":const:`CAN_J1939` 协议接受一个元组 ``(interface, name, pgn, addr)``,其中额外参数有:表示 ECU " +"名称的 64 位无符号整数,表示参数组号 (Parameter Group Number, PGN) 的 32 位无符号整数,以及表示地址的 8 " +"位整数。" + +#: ../../library/socket.rst:126 +msgid "" +"A string or a tuple ``(id, unit)`` is used for the :const:`SYSPROTO_CONTROL`" +" protocol of the :const:`PF_SYSTEM` family. The string is the name of a " +"kernel control using a dynamically-assigned ID. The tuple can be used if ID " +"and unit number of the kernel control are known or if a registered ID is " +"used." +msgstr "" +":const:`PF_SYSTEM` 协议簇的 :const:`SYSPROTO_CONTROL` 协议接受一个字符串或元组 ``(id, " +"unit)``。其中字符串是内核控件的名称,该控件使用动态分配的 ID。而如果 ID 和内核控件的单元 (unit) 编号都已知,或使用了已注册的 " +"ID,可以采用元组。" + +#: ../../library/socket.rst:134 +msgid "" +":const:`AF_BLUETOOTH` supports the following protocols and address formats:" +msgstr ":const:`AF_BLUETOOTH` 支持以下协议和地址格式:" + +#: ../../library/socket.rst:137 +msgid "" +":const:`BTPROTO_L2CAP` accepts ``(bdaddr, psm)`` where ``bdaddr`` is the " +"Bluetooth address as a string and ``psm`` is an integer." +msgstr "" +":const:`BTPROTO_L2CAP` 接受 ``(bdaddr, psm)``,其中 ``bdaddr`` " +"为字符串格式的蓝牙地址,``psm`` 是一个整数。" + +#: ../../library/socket.rst:140 +msgid "" +":const:`BTPROTO_RFCOMM` accepts ``(bdaddr, channel)`` where ``bdaddr`` is " +"the Bluetooth address as a string and ``channel`` is an integer." +msgstr "" +":const:`BTPROTO_RFCOMM` 接受 ``(bdaddr, channel)``,其中 ``bdaddr`` " +"为字符串格式的蓝牙地址,``channel`` 是一个整数。" + +#: ../../library/socket.rst:143 +msgid "" +":const:`BTPROTO_HCI` accepts ``(device_id,)`` where ``device_id`` is either " +"an integer or a string with the Bluetooth address of the interface. (This " +"depends on your OS; NetBSD and DragonFlyBSD expect a Bluetooth address while" +" everything else expects an integer.)" +msgstr "" +":const:`BTPROTO_HCI` 接受 ``(device_id,)``,其中 ``device_id`` " +"为整数或字符串,它表示接口对应的蓝牙地址(具体取决于你的系统,NetBSD 和 DragonFlyBSD 需要蓝牙地址字符串,其他系统需要整数)。" + +#: ../../library/socket.rst:148 +msgid "NetBSD and DragonFlyBSD support added." +msgstr "添加了对 NetBSD 和 DragonFlyBSD 的支持。" + +#: ../../library/socket.rst:151 +msgid "" +":const:`BTPROTO_SCO` accepts ``bdaddr`` where ``bdaddr`` is a :class:`bytes`" +" object containing the Bluetooth address in a string format. (ex. " +"``b'12:23:34:45:56:67'``) This protocol is not supported under FreeBSD." +msgstr "" +":const:`BTPROTO_SCO` 接受 ``bdaddr``,其中 ``bdaddr`` 是 :class:`bytes` " +"对象,其中含有字符串格式的蓝牙地址(如 ``b'12:23:34:45:56:67'`` ),FreeBSD 不支持此协议。" + +#: ../../library/socket.rst:156 +msgid "" +":const:`AF_ALG` is a Linux-only socket based interface to Kernel " +"cryptography. An algorithm socket is configured with a tuple of two to four " +"elements ``(type, name [, feat [, mask]])``, where:" +msgstr "" +":const:`AF_ALG` 是一个仅 Linux 可用的、基于套接字的接口,用于连接内核加密算法。算法套接字可用包括 2 至 4 个元素的元组来配置" +" ``(type, name [, feat [, mask]])``,其中:" + +#: ../../library/socket.rst:160 +msgid "" +"*type* is the algorithm type as string, e.g. ``aead``, ``hash``, " +"``skcipher`` or ``rng``." +msgstr "*type* 是表示算法类型的字符串,如 ``aead``、``hash``、``skcipher`` 或 ``rng``。" + +#: ../../library/socket.rst:163 +msgid "" +"*name* is the algorithm name and operation mode as string, e.g. ``sha256``, " +"``hmac(sha256)``, ``cbc(aes)`` or ``drbg_nopr_ctr_aes256``." +msgstr "" +"*name* 是表示算法类型和操作模式的字符串,如 ``sha256``、``hmac(sha256)``、``cbc(aes)`` 或 " +"``drbg_nopr_ctr_aes256``。" + +#: ../../library/socket.rst:166 +msgid "*feat* and *mask* are unsigned 32bit integers." +msgstr "*feat* 和 *mask* 是无符号 32 位整数。" + +#: ../../library/socket.rst:172 +msgid "" +":const:`AF_VSOCK` allows communication between virtual machines and their " +"hosts. The sockets are represented as a ``(CID, port)`` tuple where the " +"context ID or CID and port are integers." +msgstr "" +":const:`AF_VSOCK` 用于支持虚拟机与宿主机之间的通讯。该套接字用 ``(CID, port)`` 元组表示,其中 Context ID " +"(CID) 和 port 都是整数。" + +#: ../../library/socket.rst:180 +msgid "" +":const:`AF_PACKET` is a low-level interface directly to network devices. The" +" packets are represented by the tuple ``(ifname, proto[, pkttype[, hatype[, " +"addr]]])`` where:" +msgstr "" +":const:`AF_PACKET` 是一个底层接口,直接连接至网卡。数据包使用元组 ``(ifname, proto[, pkttype[, " +"hatype[, addr]]])`` 表示,其中:" + +#: ../../library/socket.rst:184 +msgid "*ifname* - String specifying the device name." +msgstr "*ifname* - 指定设备名称的字符串。" + +#: ../../library/socket.rst:185 +msgid "" +"*proto* - An in network-byte-order integer specifying the Ethernet protocol " +"number." +msgstr "*proto* - 一个用网络字节序表示的整数,指定以太网协议版本号。" + +#: ../../library/socket.rst:187 +msgid "*pkttype* - Optional integer specifying the packet type:" +msgstr "*pkttype* - 指定数据包类型的整数(可选):" + +#: ../../library/socket.rst:189 +msgid "``PACKET_HOST`` (the default) - Packet addressed to the local host." +msgstr "``PACKET_HOST`` (默认) - 寻址到本地主机的数据包。" + +#: ../../library/socket.rst:190 +msgid "``PACKET_BROADCAST`` - Physical-layer broadcast packet." +msgstr "``PACKET_BROADCAST`` - 物理层广播的数据包。" + +#: ../../library/socket.rst:191 +msgid "" +"``PACKET_MULTIHOST`` - Packet sent to a physical-layer multicast address." +msgstr "``PACKET_MULTIHOST`` - 发送到物理层多播地址的数据包。" + +#: ../../library/socket.rst:192 +msgid "" +"``PACKET_OTHERHOST`` - Packet to some other host that has been caught by a " +"device driver in promiscuous mode." +msgstr "``PACKET_OTHERHOST`` - 被(处于混杂模式的)网卡驱动捕获的、发送到其他主机的数据包。" + +#: ../../library/socket.rst:194 +msgid "" +"``PACKET_OUTGOING`` - Packet originating from the local host that is looped " +"back to a packet socket." +msgstr "``PACKET_OUTGOING`` - 来自本地主机的、回环到一个套接字的数据包。" + +#: ../../library/socket.rst:196 +msgid "*hatype* - Optional integer specifying the ARP hardware address type." +msgstr "*hatype* - 可选整数,指定 ARP 硬件地址类型。" + +#: ../../library/socket.rst:197 +msgid "" +"*addr* - Optional bytes-like object specifying the hardware physical " +"address, whose interpretation depends on the device." +msgstr "*addr* - 可选的类字节串对象,用于指定硬件物理地址,其解释取决于各设备。" + +#: ../../library/socket.rst:202 +msgid "" +":const:`AF_QIPCRTR` is a Linux-only socket based interface for communicating" +" with services running on co-processors in Qualcomm platforms. The address " +"family is represented as a ``(node, port)`` tuple where the *node* and " +"*port* are non-negative integers." +msgstr "" +":const:`AF_QIPCRTR` 是一个仅 Linux 可用的、基于套接字的接口,用于与高通平台中协处理器上运行的服务进行通信。该地址簇用一个 " +"``(node, port)`` 元组表示,其中 *node* 和 *port* 为非负整数。" + +#: ../../library/socket.rst:211 +msgid "" +":const:`IPPROTO_UDPLITE` is a variant of UDP which allows you to specify " +"what portion of a packet is covered with the checksum. It adds two socket " +"options that you can change. ``self.setsockopt(IPPROTO_UDPLITE, " +"UDPLITE_SEND_CSCOV, length)`` will change what portion of outgoing packets " +"are covered by the checksum and ``self.setsockopt(IPPROTO_UDPLITE, " +"UDPLITE_RECV_CSCOV, length)`` will filter out packets which cover too little" +" of their data. In both cases ``length`` should be in ``range(8, 2**16, " +"8)``." +msgstr "" +":const:`IPPROTO_UDPLITE` 是一种 UDP " +"的变体,允许指定数据包的哪一部分计算入校验码内。它添加了两个可以修改的套接字选项。``self.setsockopt(IPPROTO_UDPLITE, " +"UDPLITE_SEND_CSCOV, length)`` 修改传出数据包的哪一部分计算入校验码内,而 " +"``self.setsockopt(IPPROTO_UDPLITE, UDPLITE_RECV_CSCOV, length)`` " +"将过滤掉计算入校验码的数据太少的数据包。在这两种情况下,``length`` 都应在 ``range(8, 2**16, 8)`` 范围内。" + +#: ../../library/socket.rst:220 +msgid "" +"Such a socket should be constructed with ``socket(AF_INET, SOCK_DGRAM, " +"IPPROTO_UDPLITE)`` for IPv4 or ``socket(AF_INET6, SOCK_DGRAM, " +"IPPROTO_UDPLITE)`` for IPv6." +msgstr "" +"对于 IPv4,应使用 ``socket(AF_INET, SOCK_DGRAM, IPPROTO_UDPLITE)`` 来构造这样的套接字;对于 " +"IPv6,应使用 ``socket(AF_INET6, SOCK_DGRAM, IPPROTO_UDPLITE)`` 来构造这样的套接字。" + +#: ../../library/socket.rst:228 +msgid "" +"If you use a hostname in the *host* portion of IPv4/v6 socket address, the " +"program may show a nondeterministic behavior, as Python uses the first " +"address returned from the DNS resolution. The socket address will be " +"resolved differently into an actual IPv4/v6 address, depending on the " +"results from DNS resolution and/or the host configuration. For " +"deterministic behavior use a numeric address in *host* portion." +msgstr "" +"如果你在 IPv4/v6 套接字地址的 *host* 部分中使用了一个主机名,此程序可能会表现不确定行为,因为 Python 使用 DNS " +"解析返回的第一个地址。套接字地址在实际的 IPv4/v6 中以不同方式解析,根据 DNS 解析和/或 host 配置。为了确定行为,在 *host* " +"部分中使用数字的地址。" + +#: ../../library/socket.rst:235 +msgid "" +"All errors raise exceptions. The normal exceptions for invalid argument " +"types and out-of-memory conditions can be raised; starting from Python 3.3, " +"errors related to socket or address semantics raise :exc:`OSError` or one of" +" its subclasses (they used to raise :exc:`socket.error`)." +msgstr "" +"所有的错误都抛出异常。对于无效的参数类型和内存溢出异常情况可能抛出普通异常;从 Python 3.3 开始,与套接字或地址语义有关的错误抛出 " +":exc:`OSError` 或它的子类之一(常用 :exc:`socket.error`)。" + +#: ../../library/socket.rst:240 +msgid "" +"Non-blocking mode is supported through :meth:`~socket.setblocking`. A " +"generalization of this based on timeouts is supported through " +":meth:`~socket.settimeout`." +msgstr "" +"可以用 :meth:`~socket.setblocking` 设置非阻塞模式。一个基于超时的 generalization 通过 " +":meth:`~socket.settimeout` 支持。" + +#: ../../library/socket.rst:246 +msgid "Module contents" +msgstr "模块内容" + +#: ../../library/socket.rst:248 +msgid "The module :mod:`socket` exports the following elements." +msgstr ":mod:`socket` 模块包含下列元素。" + +#: ../../library/socket.rst:252 +msgid "Exceptions" +msgstr "异常" + +#: ../../library/socket.rst:256 +msgid "A deprecated alias of :exc:`OSError`." +msgstr "一个被弃用的 :exc:`OSError` 的别名。" + +#: ../../library/socket.rst:258 +msgid "Following :pep:`3151`, this class was made an alias of :exc:`OSError`." +msgstr "根据 :pep:`3151`,这个类是 :exc:`OSError` 的别名。" + +#: ../../library/socket.rst:264 +msgid "" +"A subclass of :exc:`OSError`, this exception is raised for address-related " +"errors, i.e. for functions that use *h_errno* in the POSIX C API, including " +":func:`gethostbyname_ex` and :func:`gethostbyaddr`. The accompanying value " +"is a pair ``(h_errno, string)`` representing an error returned by a library " +"call. *h_errno* is a numeric value, while *string* represents the " +"description of *h_errno*, as returned by the :c:func:`hstrerror` C function." +msgstr "" +":exc:`OSError` 的子类,本异常通常表示与地址相关的错误,比如那些在 POSIX C API 中使用了 *h_errno* 的函数,包括 " +":func:`gethostbyname_ex` 和 :func:`gethostbyaddr`。附带的值是一对 ``(h_errno, " +"string)``,代表库调用返回的错误。*h_errno* 是一个数字,而 *string* 表示 *h_errno* 的描述,它们由 C 函数 " +":c:func:`hstrerror` 返回。" + +#: ../../library/socket.rst:272 ../../library/socket.rst:285 +#: ../../library/socket.rst:296 +msgid "This class was made a subclass of :exc:`OSError`." +msgstr "此类是 :exc:`OSError` 的子类。" + +#: ../../library/socket.rst:277 +msgid "" +"A subclass of :exc:`OSError`, this exception is raised for address-related " +"errors by :func:`getaddrinfo` and :func:`getnameinfo`. The accompanying " +"value is a pair ``(error, string)`` representing an error returned by a " +"library call. *string* represents the description of *error*, as returned " +"by the :c:func:`gai_strerror` C function. The numeric *error* value will " +"match one of the :const:`EAI_\\*` constants defined in this module." +msgstr "" +":exc:`OSError` 的子类,本异常来自 :func:`getaddrinfo` 和 " +":func:`getnameinfo`,表示与地址相关的错误。附带的值是一对 ``(error, " +"string)``,代表库调用返回的错误。*string* 表示 *error* 的描述,它由 C 函数 :c:func:`gai_strerror` " +"返回。数字值 *error* 与本模块中定义的 :const:`EAI_\\*` 常量之一匹配。" + +#: ../../library/socket.rst:290 +msgid "" +"A subclass of :exc:`OSError`, this exception is raised when a timeout occurs" +" on a socket which has had timeouts enabled via a prior call to " +":meth:`~socket.settimeout` (or implicitly through " +":func:`~socket.setdefaulttimeout`). The accompanying value is a string " +"whose value is currently always \"timed out\"." +msgstr "" +":exc:`OSError` 的子类,当套接字发生超时,且事先已调用过 :meth:`~socket.settimeout` (或隐式地通过 " +":func:`~socket.setdefaulttimeout` )启用了超时,则会抛出此异常。附带的值是一个字符串,其值总是 \"timed " +"out\"。" + +#: ../../library/socket.rst:301 +msgid "Constants" +msgstr "常量" + +#: ../../library/socket.rst:303 +msgid "" +"The AF_* and SOCK_* constants are now :class:`AddressFamily` and " +":class:`SocketKind` :class:`.IntEnum` collections." +msgstr "" +"AF_* 和 SOCK_* 常量现在都在 :class:`AddressFamily` 和 :class:`SocketKind` 这两个 " +":class:`.IntEnum` 集合内。" + +#: ../../library/socket.rst:312 +msgid "" +"These constants represent the address (and protocol) families, used for the " +"first argument to :func:`.socket`. If the :const:`AF_UNIX` constant is not " +"defined then this protocol is unsupported. More constants may be available " +"depending on the system." +msgstr "" +"这些常量表示地址(和协议)簇,用于 :func:`.socket` 的第一个参数。如果 :const:`AF_UNIX` " +"常量未定义,即表示不支持该协议。不同系统可能会有更多其他常量可用。" + +#: ../../library/socket.rst:324 +msgid "" +"These constants represent the socket types, used for the second argument to " +":func:`.socket`. More constants may be available depending on the system. " +"(Only :const:`SOCK_STREAM` and :const:`SOCK_DGRAM` appear to be generally " +"useful.)" +msgstr "" +"这些常量表示套接字类型,用于 :func:`.socket` 的第二个参数。不同系统可能会有更多其他常量可用。(一般只有 " +":const:`SOCK_STREAM` 和 :const:`SOCK_DGRAM` 可用)" + +#: ../../library/socket.rst:332 +msgid "" +"These two constants, if defined, can be combined with the socket types and " +"allow you to set some flags atomically (thus avoiding possible race " +"conditions and the need for separate calls)." +msgstr "这两个常量(如果已定义)可以与上述套接字类型结合使用,允许你设置这些原子性相关的 flags (从而避免可能的竞争条件和单独调用的需要)。" + +#: ../../library/socket.rst:338 +msgid "" +"`Secure File Descriptor Handling " +"`_ for a more thorough " +"explanation." +msgstr "" +"`Secure File Descriptor Handling (安全地处理文件描述符) " +"`_ 提供了更详尽的解释。" + +#: ../../library/socket.rst:342 +msgid ":ref:`Availability `: Linux >= 2.6.27." +msgstr ":ref:`可用性 `: Linux >= 2.6.27。" + +#: ../../library/socket.rst:360 +msgid "" +"Many constants of these forms, documented in the Unix documentation on " +"sockets and/or the IP protocol, are also defined in the socket module. They " +"are generally used in arguments to the :meth:`setsockopt` and " +":meth:`getsockopt` methods of socket objects. In most cases, only those " +"symbols that are defined in the Unix header files are defined; for a few " +"symbols, default values are provided." +msgstr "" +"此列表内的许多常量,记载在 Unix 文档中的套接字和/或 IP 协议部分,同时也定义在本 socket 模块中。它们通常用于套接字对象的 " +":meth:`setsockopt` 和 :meth:`getsockopt` 方法的参数中。在大多数情况下,仅那些在 Unix " +"头文件中有定义的符号会在本模块中定义,部分符号提供了默认值。" + +#: ../../library/socket.rst:367 +msgid "" +"``SO_DOMAIN``, ``SO_PROTOCOL``, ``SO_PEERSEC``, ``SO_PASSSEC``, " +"``TCP_USER_TIMEOUT``, ``TCP_CONGESTION`` were added." +msgstr "" +"添加了 ``SO_DOMAIN``, ``SO_PROTOCOL``, ``SO_PEERSEC``, ``SO_PASSSEC``, " +"``TCP_USER_TIMEOUT``, ``TCP_CONGESTION``。" + +#: ../../library/socket.rst:371 +msgid "" +"On Windows, ``TCP_FASTOPEN``, ``TCP_KEEPCNT`` appear if run-time Windows " +"supports." +msgstr "在 Windows 上,如果 Windows 运行时支持,则 ``TCP_FASTOPEN``、``TCP_KEEPCNT`` 可用。" + +#: ../../library/socket.rst:375 +msgid "``TCP_NOTSENT_LOWAT`` was added." +msgstr "添加了 ``TCP_NOTSENT_LOWAT``。" + +#: ../../library/socket.rst:378 +msgid "" +"On Windows, ``TCP_KEEPIDLE``, ``TCP_KEEPINTVL`` appear if run-time Windows " +"supports." +msgstr "在 Windows 上,如果 Windows 运行时支持,则 ``TCP_KEEPIDLE``、``TCP_KEEPINTVL`` 可用。" + +#: ../../library/socket.rst:386 ../../library/socket.rst:453 +#: ../../library/socket.rst:464 +msgid "" +"Many constants of these forms, documented in the Linux documentation, are " +"also defined in the socket module." +msgstr "此列表内的许多常量,记载在 Linux 文档中,同时也定义在本 socket 模块中。" + +#: ../../library/socket.rst:390 ../../library/socket.rst:401 +#: ../../library/socket.rst:436 +msgid ":ref:`Availability `: Linux >= 2.6.25." +msgstr ":ref:`可用性 `: Linux >= 2.6.25。" + +#: ../../library/socket.rst:396 +msgid "" +"CAN_BCM, in the CAN protocol family, is the broadcast manager (BCM) " +"protocol. Broadcast manager constants, documented in the Linux " +"documentation, are also defined in the socket module." +msgstr "" +"CAN 协议簇内的 CAN_BCM 是广播管理器(Bbroadcast Manager -- BCM)协议,广播管理器常量在 Linux " +"文档中有所记载,在本 socket 模块中也有定义。" + +#: ../../library/socket.rst:403 +msgid "" +"The :data:`CAN_BCM_CAN_FD_FRAME` flag is only available on Linux >= 4.8." +msgstr ":data:`CAN_BCM_CAN_FD_FRAME` 旗标仅在 Linux >= 4.8 时可用。" + +#: ../../library/socket.rst:409 +msgid "" +"Enables CAN FD support in a CAN_RAW socket. This is disabled by default. " +"This allows your application to send both CAN and CAN FD frames; however, " +"you must accept both CAN and CAN FD frames when reading from the socket." +msgstr "" +"在 CAN_RAW 套接字中启用 CAN FD 支持,默认是禁用的。它使应用程序可以发送 CAN 和 CAN FD " +"帧。但是,从套接字读取时,也必须同时接受 CAN 和 CAN FD 帧。" + +#: ../../library/socket.rst:413 ../../library/socket.rst:424 +msgid "This constant is documented in the Linux documentation." +msgstr "此常量在 Linux 文档中有所记载。" + +#: ../../library/socket.rst:416 +msgid ":ref:`Availability `: Linux >= 3.6." +msgstr ":ref:`可用性 `: Linux >= 3.6。" + +#: ../../library/socket.rst:421 +msgid "" +"Joins the applied CAN filters such that only CAN frames that match all given" +" CAN filters are passed to user space." +msgstr "加入已应用的 CAN 过滤器,这样只有与所有 CAN 过滤器匹配的 CAN 帧才能传递到用户空间。" + +#: ../../library/socket.rst:427 +msgid ":ref:`Availability `: Linux >= 4.1." +msgstr ":ref:`可用性 `: Linux >= 4.1。" + +#: ../../library/socket.rst:432 +msgid "" +"CAN_ISOTP, in the CAN protocol family, is the ISO-TP (ISO 15765-2) protocol." +" ISO-TP constants, documented in the Linux documentation." +msgstr "" +"CAN 协议簇中的 CAN_ISOTP 就是 ISO-TP (ISO 15765-2) 协议。ISO-TP 常量在 Linux 文档中有所记载。" + +#: ../../library/socket.rst:441 +msgid "" +"CAN_J1939, in the CAN protocol family, is the SAE J1939 protocol. J1939 " +"constants, documented in the Linux documentation." +msgstr "CAN 协议族中的 CAN_J1939 即 SAE J1939 协议。 J1939 常量记录在 Linux 文档中。" + +#: ../../library/socket.rst:445 +msgid ":ref:`Availability `: Linux >= 5.4." +msgstr ":ref:`可用性 `: Linux >= 5.4。" + +#: ../../library/socket.rst:456 +msgid ":ref:`Availability `: Linux >= 2.2." +msgstr ":ref:`可用性 `: Linux >= 2.2。" + +#: ../../library/socket.rst:468 +msgid ":ref:`Availability `: Linux >= 2.6.30." +msgstr ":ref:`可用性 `: Linux >= 2.6.30。" + +#: ../../library/socket.rst:477 +msgid "" +"Constants for Windows' WSAIoctl(). The constants are used as arguments to " +"the :meth:`~socket.socket.ioctl` method of socket objects." +msgstr "" +"Windows 的 WSAIoctl() 的常量。这些常量用于套接字对象的 :meth:`~socket.socket.ioctl` 方法的参数。" + +#: ../../library/socket.rst:480 ../../library/socket.rst:1364 +msgid "``SIO_LOOPBACK_FAST_PATH`` was added." +msgstr "添加了 ``SIO_LOOPBACK_FAST_PATH``。" + +#: ../../library/socket.rst:486 +msgid "" +"TIPC related constants, matching the ones exported by the C socket API. See " +"the TIPC documentation for more information." +msgstr "TIPC 相关常量,与 C socket API 导出的常量一致。更多信息请参阅 TIPC 文档。" + +#: ../../library/socket.rst:493 +msgid "Constants for Linux Kernel cryptography." +msgstr "用于 Linux 内核加密算法的常量。" + +#: ../../library/socket.rst:496 ../../library/socket.rst:1664 +msgid ":ref:`Availability `: Linux >= 2.6.38." +msgstr ":ref:`可用性 `: Linux >= 2.6.38。" + +#: ../../library/socket.rst:505 +msgid "Constants for Linux host/guest communication." +msgstr "用于 Linux 宿主机/虚拟机通讯的常量。" + +#: ../../library/socket.rst:508 +msgid ":ref:`Availability `: Linux >= 4.8." +msgstr ":ref:`可用性 `: Linux >= 4.8。" + +#: ../../library/socket.rst:514 +msgid ":ref:`Availability `: BSD, macOS." +msgstr ":ref:`可用性 `: BSD、macOS。" + +#: ../../library/socket.rst:519 +msgid "" +"This constant contains a boolean value which indicates if IPv6 is supported " +"on this platform." +msgstr "本常量为一个布尔值,该值指示当前平台是否支持 IPv6。" + +#: ../../library/socket.rst:525 +msgid "" +"These are string constants containing Bluetooth addresses with special " +"meanings. For example, :const:`BDADDR_ANY` can be used to indicate any " +"address when specifying the binding socket with :const:`BTPROTO_RFCOMM`." +msgstr "" +"这些是字符串常量,包含蓝牙地址,这些地址具有特殊含义。例如,当用 :const:`BTPROTO_RFCOMM` 指定绑定套接字时, " +":const:`BDADDR_ANY` 表示“任何地址”。" + +#: ../../library/socket.rst:534 +msgid "" +"For use with :const:`BTPROTO_HCI`. :const:`HCI_FILTER` is not available for " +"NetBSD or DragonFlyBSD. :const:`HCI_TIME_STAMP` and :const:`HCI_DATA_DIR` " +"are not available for FreeBSD, NetBSD, or DragonFlyBSD." +msgstr "" +"与 :const:`BTPROTO_HCI` 一起使用。 :const:`HCI_FILTER` 在 NetBSD 或 DragonFlyBSD " +"上不可用。 :const:`HCI_TIME_STAMP` 和 :const:`HCI_DATA_DIR` 在 FreeBSD、NetBSD 或 " +"DragonFlyBSD 上不可用。" + +#: ../../library/socket.rst:541 +msgid "" +"Constant for Qualcomm's IPC router protocol, used to communicate with " +"service providing remote processors." +msgstr "高通 IPC 路由协议的常数,用于与提供远程处理器的服务进行通信。" + +#: ../../library/socket.rst:544 +msgid ":ref:`Availability `: Linux >= 4.7." +msgstr ":ref:`可用性 `: Linux >= 4.7。" + +#: ../../library/socket.rst:547 +msgid "Functions" +msgstr "函数" + +#: ../../library/socket.rst:550 +msgid "Creating sockets" +msgstr "创建套接字" + +#: ../../library/socket.rst:552 +msgid "" +"The following functions all create :ref:`socket objects `." +msgstr "下列函数都能创建 :ref:`套接字对象 `." + +#: ../../library/socket.rst:557 +msgid "" +"Create a new socket using the given address family, socket type and protocol" +" number. The address family should be :const:`AF_INET` (the default), " +":const:`AF_INET6`, :const:`AF_UNIX`, :const:`AF_CAN`, :const:`AF_PACKET`, or" +" :const:`AF_RDS`. The socket type should be :const:`SOCK_STREAM` (the " +"default), :const:`SOCK_DGRAM`, :const:`SOCK_RAW` or perhaps one of the other" +" ``SOCK_`` constants. The protocol number is usually zero and may be omitted" +" or in the case where the address family is :const:`AF_CAN` the protocol " +"should be one of :const:`CAN_RAW`, :const:`CAN_BCM`, :const:`CAN_ISOTP` or " +":const:`CAN_J1939`." +msgstr "" +"使用给定的地址族、套接字类型和协议号创建一个新的套接字。 地址族应为 :const:`AF_INET` (默认值), " +":const:`AF_INET6`, :const:`AF_UNIX`, :const:`AF_CAN`, :const:`AF_PACKET` 或 " +":const:`AF_RDS` 之一。 套接字类型应为 :const:`SOCK_STREAM` (默认值), :const:`SOCK_DGRAM`," +" :const:`SOCK_RAW` 或其他可能的 ``SOCK_`` 常量之一。 协议号通常为零并且可以省略,或在协议族为 " +":const:`AF_CAN` 的情况下,协议应为 :const:`CAN_RAW`, :const:`CAN_BCM`, " +":const:`CAN_ISOTP` 或 :const:`CAN_J1939` 之一。" + +#: ../../library/socket.rst:567 +msgid "" +"If *fileno* is specified, the values for *family*, *type*, and *proto* are " +"auto-detected from the specified file descriptor. Auto-detection can be " +"overruled by calling the function with explicit *family*, *type*, or *proto*" +" arguments. This only affects how Python represents e.g. the return value " +"of :meth:`socket.getpeername` but not the actual OS resource. Unlike " +":func:`socket.fromfd`, *fileno* will return the same socket and not a " +"duplicate. This may help close a detached socket using " +":meth:`socket.close()`." +msgstr "" +"如果指定了 *fileno*,那么将从这一指定的文件描述符中自动检测 *family*、*type* 和 *proto* " +"的值。如果调用本函数时显式指定了 *family*、*type* 或 *proto* 参数,可以覆盖自动检测的值。这只会影响 Python 表示诸如 " +":meth:`socket.getpeername` 一类函数的返回值的方式,而不影响实际的操作系统资源。与 :func:`socket.fromfd`" +" 不同,*fileno* 将返回原先的套接字,而不是复制出新的套接字。这有助于在分离的套接字上调用 :meth:`socket.close()` " +"来关闭它。" + +#: ../../library/socket.rst:576 ../../library/socket.rst:710 +#: ../../library/socket.rst:1194 ../../library/socket.rst:1281 +msgid "The newly created socket is :ref:`non-inheritable `." +msgstr "新创建的套接字是 :ref:`不可继承的 `。" + +#: ../../library/socket.rst:578 +msgid "" +"Raises an :ref:`auditing event ` ``socket.__new__`` with arguments" +" ``self``, ``family``, ``type``, ``protocol``." +msgstr "" +"引发一个 :ref:`审计事件 ` ``socket.__new__`` 并附带参数 ``self``, ``family``, " +"``type``, ``protocol``。" + +#: ../../library/socket.rst:580 +msgid "The AF_CAN family was added. The AF_RDS family was added." +msgstr "添加了 AF_CAN 簇。添加了 AF_RDS 簇。" + +#: ../../library/socket.rst:584 +msgid "The CAN_BCM protocol was added." +msgstr "添加了 CAN_BCM 协议。" + +#: ../../library/socket.rst:587 ../../library/socket.rst:712 +msgid "The returned socket is now non-inheritable." +msgstr "返回的套接字现在是不可继承的。" + +#: ../../library/socket.rst:590 +msgid "The CAN_ISOTP protocol was added." +msgstr "添加了 CAN_ISOTP 协议。" + +#: ../../library/socket.rst:593 +msgid "" +"When :const:`SOCK_NONBLOCK` or :const:`SOCK_CLOEXEC` bit flags are applied " +"to *type* they are cleared, and :attr:`socket.type` will not reflect them. " +"They are still passed to the underlying system `socket()` call. Therefore," +msgstr "" +"当将 :const:`SOCK_NONBLOCK` 或 :const:`SOCK_CLOEXEC` 标志位应用于 *type* 上时,它们会被清除,且 " +":attr:`socket.type` 反映不出它们。但它们仍将传递给底层系统的 `socket()` 调用。因此," + +#: ../../library/socket.rst:605 +msgid "" +"will still create a non-blocking socket on OSes that support " +"``SOCK_NONBLOCK``, but ``sock.type`` will be set to ``socket.SOCK_STREAM``." +msgstr "" +"仍将在支持 ``SOCK_NONBLOCK`` 的系统上创建一个非阻塞的套接字,但是 ``sock.type`` 会被置为 " +"``socket.SOCK_STREAM``。" + +#: ../../library/socket.rst:609 +msgid "The CAN_J1939 protocol was added." +msgstr "添加了 CAN_J1939 协议。" + +#: ../../library/socket.rst:614 +msgid "" +"Build a pair of connected socket objects using the given address family, " +"socket type, and protocol number. Address family, socket type, and protocol" +" number are as for the :func:`.socket` function above. The default family is" +" :const:`AF_UNIX` if defined on the platform; otherwise, the default is " +":const:`AF_INET`." +msgstr "" +"构建一对已连接的套接字对象,使用给定的地址簇、套接字类型和协议号。地址簇、套接字类型和协议号与上述 :func:`.socket` " +"函数相同。默认地址簇为 :const:`AF_UNIX` (需要当前平台支持,不支持则默认为 :const:`AF_INET` )。" + +#: ../../library/socket.rst:619 +msgid "The newly created sockets are :ref:`non-inheritable `." +msgstr "新创建的套接字都是 :ref:`不可继承的 `。" + +#: ../../library/socket.rst:621 +msgid "" +"The returned socket objects now support the whole socket API, rather than a " +"subset." +msgstr "现在,返回的套接字对象支持全部套接字 API,而不是全部 API 的一个子集。" + +#: ../../library/socket.rst:625 +msgid "The returned sockets are now non-inheritable." +msgstr "返回的套接字现在都是不可继承的。" + +#: ../../library/socket.rst:628 +msgid "Windows support added." +msgstr "添加了 Windows 支持。" + +#: ../../library/socket.rst:634 +msgid "" +"Connect to a TCP service listening on the Internet *address* (a 2-tuple " +"``(host, port)``), and return the socket object. This is a higher-level " +"function than :meth:`socket.connect`: if *host* is a non-numeric hostname, " +"it will try to resolve it for both :data:`AF_INET` and :data:`AF_INET6`, and" +" then try to connect to all possible addresses in turn until a connection " +"succeeds. This makes it easy to write clients that are compatible to both " +"IPv4 and IPv6." +msgstr "" +"连接到一个 TCP 服务,该服务正在侦听 Internet *address* (用二元组 ``(host, port)`` " +"表示)。连接后返回套接字对象。这是比 :meth:`socket.connect` 更高级的函数:如果 *host* 是非数字主机名,它将尝试从 " +":data:`AF_INET` 和 :data:`AF_INET6` 解析它,然后依次尝试连接到所有可能的地址,直到连接成功。这使得编写兼容 IPv4 " +"和 IPv6 的客户端变得容易。" + +#: ../../library/socket.rst:642 +msgid "" +"Passing the optional *timeout* parameter will set the timeout on the socket " +"instance before attempting to connect. If no *timeout* is supplied, the " +"global default timeout setting returned by :func:`getdefaulttimeout` is " +"used." +msgstr "" +"传入可选参数 *timeout* 可以在套接字实例上设置超时(在尝试连接前)。如果未提供 *timeout*,则使用由 " +":func:`getdefaulttimeout` 返回的全局默认超时设置。" + +#: ../../library/socket.rst:647 +msgid "" +"If supplied, *source_address* must be a 2-tuple ``(host, port)`` for the " +"socket to bind to as its source address before connecting. If host or port " +"are '' or 0 respectively the OS default behavior will be used." +msgstr "" +"如果提供了 *source_address*,它必须为二元组 ``(host, port)``,以便套接字在连接之前绑定为其源地址。如果 host 或 " +"port 分别为 '' 或 0,则使用操作系统默认行为。" + +#: ../../library/socket.rst:651 +msgid "*source_address* was added." +msgstr "添加了*source_address* 参数" + +#: ../../library/socket.rst:656 +msgid "" +"Convenience function which creates a TCP socket bound to *address* (a " +"2-tuple ``(host, port)``) and return the socket object." +msgstr "便捷函数,创建绑定到 *address* (二元组 ``(host, port)`` )的 TCP 套接字,返回套接字对象。" + +#: ../../library/socket.rst:659 +msgid "" +"*family* should be either :data:`AF_INET` or :data:`AF_INET6`. *backlog* is " +"the queue size passed to :meth:`socket.listen`; when ``0`` a default " +"reasonable value is chosen. *reuse_port* dictates whether to set the " +":data:`SO_REUSEPORT` socket option." +msgstr "" +"*family* 应设置为 :data:`AF_INET` 或 :data:`AF_INET6`。*backlog* 是传递给 " +":meth:`socket.listen` 的队列大小,当它为 ``0`` 则表示默认的合理值。*reuse_port* 表示是否设置 " +":data:`SO_REUSEPORT` 套接字选项。" + +#: ../../library/socket.rst:664 +msgid "" +"If *dualstack_ipv6* is true and the platform supports it the socket will be " +"able to accept both IPv4 and IPv6 connections, else it will raise " +":exc:`ValueError`. Most POSIX platforms and Windows are supposed to support " +"this functionality. When this functionality is enabled the address returned " +"by :meth:`socket.getpeername` when an IPv4 connection occurs will be an IPv6" +" address represented as an IPv4-mapped IPv6 address. If *dualstack_ipv6* is " +"false it will explicitly disable this functionality on platforms that enable" +" it by default (e.g. Linux). This parameter can be used in conjunction with " +":func:`has_dualstack_ipv6`:" +msgstr "" +"如果 *dualstack_ipv6* 为 true 且平台支持,则套接字能接受 IPv4 和 IPv6 连接,否则将抛出 " +":exc:`ValueError` 异常。大多数 POSIX 平台和 Windows " +"应该支持此功能。启用此功能后,:meth:`socket.getpeername` 在进行 IPv4 连接时返回的地址将是一个(映射到 IPv4 " +"的)IPv6 地址。在默认启用该功能的平台上(如 Linux),如果 *dualstack_ipv6* 为 false,即显式禁用此功能。该参数可以与 " +":func:`has_dualstack_ipv6` 结合使用:" + +#: ../../library/socket.rst:686 +msgid "" +"On POSIX platforms the :data:`SO_REUSEADDR` socket option is set in order to" +" immediately reuse previous sockets which were bound on the same *address* " +"and remained in TIME_WAIT state." +msgstr "" +"在 POSIX 平台上,设置 :data:`SO_REUSEADDR` 套接字选项是为了立即重用以前绑定在同一 *address* 上并保持 " +"TIME_WAIT 状态的套接字。" + +#: ../../library/socket.rst:694 +msgid "" +"Return ``True`` if the platform supports creating a TCP socket which can " +"handle both IPv4 and IPv6 connections." +msgstr "如果平台支持创建 IPv4 和 IPv6 连接都可以处理的 TCP 套接字,则返回 ``True``。" + +#: ../../library/socket.rst:701 +msgid "" +"Duplicate the file descriptor *fd* (an integer as returned by a file " +"object's :meth:`fileno` method) and build a socket object from the result. " +"Address family, socket type and protocol number are as for the " +":func:`.socket` function above. The file descriptor should refer to a " +"socket, but this is not checked --- subsequent operations on the object may " +"fail if the file descriptor is invalid. This function is rarely needed, but " +"can be used to get or set socket options on a socket passed to a program as " +"standard input or output (such as a server started by the Unix inet daemon)." +" The socket is assumed to be in blocking mode." +msgstr "" +"复制文件描述符 *fd* (一个由文件对象的 :meth:`fileno` " +"方法返回的整数),然后从结果中构建一个套接字对象。地址簇、套接字类型和协议号与上述 :func:`.socket` " +"函数相同。文件描述符应指向一个套接字,但不会专门去检查——如果文件描述符是无效的,则对该对象的后续操作可能会失败。本函数很少用到,但是在将套接字作为标准输入或输出传递给程序(如" +" Unix inet 守护程序启动的服务器)时,可以使用本函数获取或设置套接字选项。套接字将处于阻塞模式。" + +#: ../../library/socket.rst:718 +msgid "" +"Instantiate a socket from data obtained from the :meth:`socket.share` " +"method. The socket is assumed to be in blocking mode." +msgstr "根据 :meth:`socket.share` 方法获得的数据实例化套接字。套接字将处于阻塞模式。" + +#: ../../library/socket.rst:722 ../../library/socket.rst:1767 +msgid ":ref:`Availability `: Windows." +msgstr ":ref:`可用性 `: Windows。" + +#: ../../library/socket.rst:728 +msgid "" +"This is a Python type object that represents the socket object type. It is " +"the same as ``type(socket(...))``." +msgstr "这是一个 Python 类型对象,表示套接字对象的类型。它等同于 ``type(socket(...))``。" + +#: ../../library/socket.rst:733 +msgid "Other functions" +msgstr "其他功能" + +#: ../../library/socket.rst:735 +msgid "The :mod:`socket` module also offers various network-related services:" +msgstr ":mod:`socket` 模块还提供多种网络相关服务:" + +#: ../../library/socket.rst:740 +msgid "" +"Close a socket file descriptor. This is like :func:`os.close`, but for " +"sockets. On some platforms (most noticeable Windows) :func:`os.close` does " +"not work for socket file descriptors." +msgstr "" +"关闭一个套接字文件描述符。它类似于 :func:`os.close`,但专用于套接字。在某些平台上(特别是在 Windows " +"上),:func:`os.close` 对套接字文件描述符无效。" + +#: ../../library/socket.rst:748 +msgid "" +"Translate the *host*/*port* argument into a sequence of 5-tuples that " +"contain all the necessary arguments for creating a socket connected to that " +"service. *host* is a domain name, a string representation of an IPv4/v6 " +"address or ``None``. *port* is a string service name such as ``'http'``, a " +"numeric port number or ``None``. By passing ``None`` as the value of *host*" +" and *port*, you can pass ``NULL`` to the underlying C API." +msgstr "" +"将 *host*/*port* 参数转换为 5 元组的序列,其中包含创建(连接到某服务的)套接字所需的所有参数。*host* 是域名,是字符串格式的 " +"IPv4/v6 地址或 ``None``。*port* 是字符串格式的服务名称,如 ``'http'`` 、端口号(数字)或 ``None``。传入 " +"``None`` 作为 *host* 和 *port* 的值,相当于将 ``NULL`` 传递给底层 C API。" + +#: ../../library/socket.rst:755 +msgid "" +"The *family*, *type* and *proto* arguments can be optionally specified in " +"order to narrow the list of addresses returned. Passing zero as a value for" +" each of these arguments selects the full range of results. The *flags* " +"argument can be one or several of the ``AI_*`` constants, and will influence" +" how results are computed and returned. For example, :const:`AI_NUMERICHOST`" +" will disable domain name resolution and will raise an error if *host* is a " +"domain name." +msgstr "" +"可以指定 *family*、*type* 和 *proto* 参数,以缩小返回的地址列表。向这些参数分别传入 0 表示保留全部结果范围。*flags* " +"参数可以是 ``AI_*`` 常量中的一个或多个,它会影响结果的计算和返回。例如,:const:`AI_NUMERICHOST` " +"会禁用域名解析,此时如果 *host* 是域名,则会抛出错误。" + +#: ../../library/socket.rst:763 +msgid "The function returns a list of 5-tuples with the following structure:" +msgstr "本函数返回一个列表,其中的 5 元组具有以下结构:" + +#: ../../library/socket.rst:765 +msgid "``(family, type, proto, canonname, sockaddr)``" +msgstr "``(family, type, proto, canonname, sockaddr)``" + +#: ../../library/socket.rst:767 +msgid "" +"In these tuples, *family*, *type*, *proto* are all integers and are meant to" +" be passed to the :func:`.socket` function. *canonname* will be a string " +"representing the canonical name of the *host* if :const:`AI_CANONNAME` is " +"part of the *flags* argument; else *canonname* will be empty. *sockaddr* is" +" a tuple describing a socket address, whose format depends on the returned " +"*family* (a ``(address, port)`` 2-tuple for :const:`AF_INET`, a ``(address, " +"port, flowinfo, scope_id)`` 4-tuple for :const:`AF_INET6`), and is meant to " +"be passed to the :meth:`socket.connect` method." +msgstr "" +"在这些元组中,*family*, *type*, *proto* 都是整数且其作用是被传入 :func:`.socket` 函数。 如果 " +":const:`AI_CANONNAME` 是 *flags* 参数的一部分则 *canonname* 将是表示 *host* 规范名称的字符串;否则 " +"*canonname* 将为空。 *sockaddr* 是一个描述套接字地址的元组,其具体格式取决于返回的 *family* (对于 " +":const:`AF_INET` 为 ``(address, port)`` 2 元组,对于 :const:`AF_INET6` 则为 " +"``(address, port, flowinfo, scope_id)`` 4 元组),其作用是被传入 :meth:`socket.connect`" +" 方法。" + +#: ../../library/socket.rst:777 +msgid "" +"Raises an :ref:`auditing event ` ``socket.getaddrinfo`` with " +"arguments ``host``, ``port``, ``family``, ``type``, ``protocol``." +msgstr "" +"引发一个 :ref:`审计事件 ` ``socket.getaddrinfo`` 并附带参数 ``host``, ``port``," +" ``family``, ``type``, ``protocol``。" + +#: ../../library/socket.rst:779 +msgid "" +"The following example fetches address information for a hypothetical TCP " +"connection to ``example.org`` on port 80 (results may differ on your system " +"if IPv6 isn't enabled)::" +msgstr "" +"下面的示例获取了 TCP 连接地址信息,假设该连接通过 80 端口连接至 ``example.org`` (如果系统未启用 " +"IPv6,则结果可能会不同)::" + +#: ../../library/socket.rst:789 +msgid "parameters can now be passed using keyword arguments." +msgstr "现在可以使用关键字参数的形式来传递参数。" + +#: ../../library/socket.rst:792 +msgid "" +"for IPv6 multicast addresses, string representing an address will not " +"contain ``%scope_id`` part." +msgstr "对于 IPv6 多播地址,表示地址的字符串将不包含 ``%scope_id`` 部分。" + +#: ../../library/socket.rst:798 +msgid "" +"Return a fully qualified domain name for *name*. If *name* is omitted or " +"empty, it is interpreted as the local host. To find the fully qualified " +"name, the hostname returned by :func:`gethostbyaddr` is checked, followed by" +" aliases for the host, if available. The first name which includes a period" +" is selected. In case no fully qualified domain name is available and " +"*name* was provided, it is returned unchanged. If *name* was empty or equal" +" to ``'0.0.0.0'``, the hostname from :func:`gethostname` is returned." +msgstr "" +"返回 *name* 的完整限定域名。 如果 *name* 被省略或为空,则将其解读为本地主机。 要查找完整限定名称,将先检查 " +":func:`gethostbyaddr` 所返回的主机名,然后是主机的别名(如果存在)。 包括句点的第一个名称将会被选择。 " +"对于没有完整限定域名而提供了 *name* 的情况,则会将其原样返回。 如果 *name* 为空或等于 ``'0.0.0.0'``,则返回来自 " +":func:`gethostname` 的主机名。" + +#: ../../library/socket.rst:809 +msgid "" +"Translate a host name to IPv4 address format. The IPv4 address is returned " +"as a string, such as ``'100.50.200.5'``. If the host name is an IPv4 " +"address itself it is returned unchanged. See :func:`gethostbyname_ex` for a" +" more complete interface. :func:`gethostbyname` does not support IPv6 name " +"resolution, and :func:`getaddrinfo` should be used instead for IPv4/v6 dual " +"stack support." +msgstr "" +"将主机名转换为 IPv4 地址格式。IPv4 地址以字符串格式返回,如 ``'100.50.200.5'``。如果主机名本身是 IPv4 " +"地址,则原样返回。更完整的接口请参考 :func:`gethostbyname_ex`。 :func:`gethostbyname` 不支持 IPv6 " +"名称解析,应使用 :func:`getaddrinfo` 来支持 IPv4/v6 双协议栈。" + +#: ../../library/socket.rst:815 ../../library/socket.rst:829 +msgid "" +"Raises an :ref:`auditing event ` ``socket.gethostbyname`` with " +"argument ``hostname``." +msgstr "" +"引发一个 :ref:`审计事件 ` ``socket.gethostbyname`` 并附带参数 ``hostname``。" + +#: ../../library/socket.rst:820 +msgid "" +"Translate a host name to IPv4 address format, extended interface. Return a " +"triple ``(hostname, aliaslist, ipaddrlist)`` where *hostname* is the host's " +"primary host name, *aliaslist* is a (possibly empty) list of alternative " +"host names for the same address, and *ipaddrlist* is a list of IPv4 " +"addresses for the same interface on the same host (often but not always a " +"single address). :func:`gethostbyname_ex` does not support IPv6 name " +"resolution, and :func:`getaddrinfo` should be used instead for IPv4/v6 dual " +"stack support." +msgstr "" +"将一个主机名转换为 IPv4 地址格式的扩展接口。 返回一个三元组 ``(hostname, aliaslist, ipaddrlist)`` 其中 " +"*hostname* 是主机的首选主机名,*aliaslist* 是同一地址的其他主机名的列表(可能为空),而 *ipaddrlist* " +"是同一主机上同一接口的 IPv4 地址列表(通常为单个地址但并不总是如此)。 :func:`gethostbyname_ex` 不支持 IPv6 " +"名称解析,应当改用 :func:`getaddrinfo` 来提供 IPv4/v6 双栈支持。" + +#: ../../library/socket.rst:834 +msgid "" +"Return a string containing the hostname of the machine where the Python " +"interpreter is currently executing." +msgstr "返回一个字符串,包含当前正在运行 Python 解释器的机器的主机名。" + +#: ../../library/socket.rst:837 +msgid "" +"Raises an :ref:`auditing event ` ``socket.gethostname`` with no " +"arguments." +msgstr "引发一个不带参数的 :ref:`审计事件 ` ``socket.gethostname``。" + +#: ../../library/socket.rst:839 +msgid "" +"Note: :func:`gethostname` doesn't always return the fully qualified domain " +"name; use :func:`getfqdn` for that." +msgstr "注意: :func:`gethostname` 并不总是返回全限定域名,必要的话请使用 :func:`getfqdn`。" + +#: ../../library/socket.rst:845 +msgid "" +"Return a triple ``(hostname, aliaslist, ipaddrlist)`` where *hostname* is " +"the primary host name responding to the given *ip_address*, *aliaslist* is a" +" (possibly empty) list of alternative host names for the same address, and " +"*ipaddrlist* is a list of IPv4/v6 addresses for the same interface on the " +"same host (most likely containing only a single address). To find the fully " +"qualified domain name, use the function :func:`getfqdn`. " +":func:`gethostbyaddr` supports both IPv4 and IPv6." +msgstr "" +"返回三元组 ``(hostname, aliaslist, ipaddrlist)``,其中 *hostname* 是响应给定 *ip_address*" +" 的主要主机名,*aliaslist* 是相同地址的其他可用主机名的列表(可能为空),而 *ipaddrlist* 是 IPv4/v6 " +"地址列表,包含相同主机名、相同接口的不同地址(很可能仅包含一个地址)。要查询全限定域名,请使用函数 " +":func:`getfqdn`。:func:`gethostbyaddr` 支持 IPv4 和 IPv6。" + +#: ../../library/socket.rst:853 +msgid "" +"Raises an :ref:`auditing event ` ``socket.gethostbyaddr`` with " +"argument ``ip_address``." +msgstr "" +"引发一个 :ref:`审计事件 ` ``socket.gethostbyaddr`` 并附带参数 ``ip_address``。" + +#: ../../library/socket.rst:858 +msgid "" +"Translate a socket address *sockaddr* into a 2-tuple ``(host, port)``. " +"Depending on the settings of *flags*, the result can contain a fully-" +"qualified domain name or numeric address representation in *host*. " +"Similarly, *port* can contain a string port name or a numeric port number." +msgstr "" +"将套接字地址 *sockaddr* 转换为二元组 ``(host, port)``。*host* " +"的形式可能是全限定域名,或是由数字表示的地址,具体取决于 *flags* 的设置。同样,*port* 可以包含字符串格式的端口名称或数字格式的端口号。" + +#: ../../library/socket.rst:863 +msgid "" +"For IPv6 addresses, ``%scope_id`` is appended to the host part if *sockaddr*" +" contains meaningful *scope_id*. Usually this happens for multicast " +"addresses." +msgstr "" +"对于 IPv6 地址,如果 *sockaddr* 包含有意义的 *scope_id*,则 ``%scope_id`` 会被附加到主机部分。 " +"这种情况通常发生在多播地址上。" + +#: ../../library/socket.rst:866 +msgid "" +"For more information about *flags* you can consult " +":manpage:`getnameinfo(3)`." +msgstr "关于 *flags* 的更多信息可参阅 :manpage:`getnameinfo(3)`。" + +#: ../../library/socket.rst:868 +msgid "" +"Raises an :ref:`auditing event ` ``socket.getnameinfo`` with " +"argument ``sockaddr``." +msgstr "" +"引发一个 :ref:`审计事件 ` ``socket.getnameinfo`` 并附带参数 ``sockaddr``。" + +#: ../../library/socket.rst:872 +msgid "" +"Translate an Internet protocol name (for example, ``'icmp'``) to a constant " +"suitable for passing as the (optional) third argument to the :func:`.socket`" +" function. This is usually only needed for sockets opened in \"raw\" mode " +"(:const:`SOCK_RAW`); for the normal socket modes, the correct protocol is " +"chosen automatically if the protocol is omitted or zero." +msgstr "" +"将 Internet 协议名称(如 ``'icmp'`` )转换为常量,该常量适用于 :func:`.socket` " +"函数的第三个(可选)参数。通常只有在 \"raw\" 模式 (:const:`SOCK_RAW`) " +"中打开的套接字才需要使用该常量。在正常的套接字模式下,协议省略或为零时,会自动选择正确的协议。" + +#: ../../library/socket.rst:881 +msgid "" +"Translate an Internet service name and protocol name to a port number for " +"that service. The optional protocol name, if given, should be ``'tcp'`` or " +"``'udp'``, otherwise any protocol will match." +msgstr "" +"将 Internet 服务名称和协议名称转换为该服务的端口号。协议名称是可选的,如果提供的话应为 ``'tcp'`` 或 " +"``'udp'``,否则将匹配出所有协议。" + +#: ../../library/socket.rst:885 +msgid "" +"Raises an :ref:`auditing event ` ``socket.getservbyname`` with " +"arguments ``servicename``, ``protocolname``." +msgstr "" +"引发一个 :ref:`审计事件 ` ``socket.getservbyname`` 并附带参数 ``servicename``, " +"``protocolname``。" + +#: ../../library/socket.rst:890 +msgid "" +"Translate an Internet port number and protocol name to a service name for " +"that service. The optional protocol name, if given, should be ``'tcp'`` or " +"``'udp'``, otherwise any protocol will match." +msgstr "" +"将 Internet 端口号和协议名称转换为该服务的服务名称。协议名称是可选的,如果提供的话应为 ``'tcp'`` 或 " +"``'udp'``,否则将匹配出所有协议。" + +#: ../../library/socket.rst:894 +msgid "" +"Raises an :ref:`auditing event ` ``socket.getservbyport`` with " +"arguments ``port``, ``protocolname``." +msgstr "" +"引发一个 :ref:`审计事件 ` ``socket.getservbyport`` 并附带参数 ``port``, " +"``protocolname``。" + +#: ../../library/socket.rst:899 +msgid "" +"Convert 32-bit positive integers from network to host byte order. On " +"machines where the host byte order is the same as network byte order, this " +"is a no-op; otherwise, it performs a 4-byte swap operation." +msgstr "" +"将 32 位正整数从网络字节序转换为主机字节序。在主机字节序与网络字节序相同的计算机上,这是一个空操作。字节序不同将执行 4 字节交换操作。" + +#: ../../library/socket.rst:906 +msgid "" +"Convert 16-bit positive integers from network to host byte order. On " +"machines where the host byte order is the same as network byte order, this " +"is a no-op; otherwise, it performs a 2-byte swap operation." +msgstr "" +"将 16 位正整数从网络字节序转换为主机字节序。在主机字节序与网络字节序相同的计算机上,这是一个空操作。字节序不同将执行 2 字节交换操作。" + +#: ../../library/socket.rst:910 ../../library/socket.rst:930 +msgid "" +"In case *x* does not fit in 16-bit unsigned integer, but does fit in a " +"positive C int, it is silently truncated to 16-bit unsigned integer. This " +"silent truncation feature is deprecated, and will raise an exception in " +"future versions of Python." +msgstr "" +"如果 *x* 不符合 16 位无符号整数,但符合 C 语言的正整数,则它会被静默截断为 16 位无符号整数。此静默截断功能已弃用,未来版本的 " +"Python 将对此抛出异常。" + +#: ../../library/socket.rst:919 +msgid "" +"Convert 32-bit positive integers from host to network byte order. On " +"machines where the host byte order is the same as network byte order, this " +"is a no-op; otherwise, it performs a 4-byte swap operation." +msgstr "" +"将 32 位正整数从主机字节序转换为网络字节序。在主机字节序与网络字节序相同的计算机上,这是一个空操作。字节序不同将执行 4 字节交换操作。" + +#: ../../library/socket.rst:926 +msgid "" +"Convert 16-bit positive integers from host to network byte order. On " +"machines where the host byte order is the same as network byte order, this " +"is a no-op; otherwise, it performs a 2-byte swap operation." +msgstr "" +"将 16 位正整数从主机字节序转换为网络字节序。在主机字节序与网络字节序相同的计算机上,这是一个空操作。字节序不同将执行 2 字节交换操作。" + +#: ../../library/socket.rst:939 +msgid "" +"Convert an IPv4 address from dotted-quad string format (for example, " +"'123.45.67.89') to 32-bit packed binary format, as a bytes object four " +"characters in length. This is useful when conversing with a program that " +"uses the standard C library and needs objects of type :c:type:`struct " +"in_addr`, which is the C type for the 32-bit packed binary this function " +"returns." +msgstr "" +"将 IPv4 地址从点分十进制字符串格式(如 '123.45.67.89' )转换为 32 " +"位压缩二进制格式,转换后为字节对象,长度为四个字符。与那些使用标准 C 库,且需要 :c:type:`struct in_addr` " +"类型的对象的程序交换信息时,本函数很有用。 该类型即本函数返回的 32 位压缩二进制的 C 类型。" + +#: ../../library/socket.rst:945 +msgid "" +":func:`inet_aton` also accepts strings with less than three dots; see the " +"Unix manual page :manpage:`inet(3)` for details." +msgstr ":func:`inet_aton` 也接受句点数少于三的字符串,详情请参阅 Unix 手册 :manpage:`inet(3)`。" + +#: ../../library/socket.rst:948 +msgid "" +"If the IPv4 address string passed to this function is invalid, " +":exc:`OSError` will be raised. Note that exactly what is valid depends on " +"the underlying C implementation of :c:func:`inet_aton`." +msgstr "" +"如果传入本函数的 IPv4 地址字符串无效,则抛出 :exc:`OSError`。注意,具体什么样的地址有效取决于 " +":c:func:`inet_aton` 的底层 C 实现。" + +#: ../../library/socket.rst:952 +msgid "" +":func:`inet_aton` does not support IPv6, and :func:`inet_pton` should be " +"used instead for IPv4/v6 dual stack support." +msgstr ":func:`inet_aton` 不支持 IPv6,在 IPv4/v6 双协议栈下应使用 :func:`inet_pton` 来代替。" + +#: ../../library/socket.rst:958 +msgid "" +"Convert a 32-bit packed IPv4 address (a :term:`bytes-like object` four bytes" +" in length) to its standard dotted-quad string representation (for example, " +"'123.45.67.89'). This is useful when conversing with a program that uses " +"the standard C library and needs objects of type :c:type:`struct in_addr`, " +"which is the C type for the 32-bit packed binary data this function takes as" +" an argument." +msgstr "" +"将 32 位压缩 IPv4 地址(一个 :term:`类字节对象 `,长 4 " +"个字节)转换为标准的点分十进制字符串形式(如 '123.45.67.89' )。与那些使用标准 C 库,且需要 :c:type:`struct " +"in_addr` 类型的对象的程序交换信息时,本函数很有用。 该类型即本函数参数中的 32 位压缩二进制数据的 C 类型。" + +#: ../../library/socket.rst:965 +msgid "" +"If the byte sequence passed to this function is not exactly 4 bytes in " +"length, :exc:`OSError` will be raised. :func:`inet_ntoa` does not support " +"IPv6, and :func:`inet_ntop` should be used instead for IPv4/v6 dual stack " +"support." +msgstr "" +"如果传入本函数的字节序列长度不是 4 个字节,则抛出 :exc:`OSError`。:func:`inet_ntoa` 不支持 IPv6,在 " +"IPv4/v6 双协议栈下应使用 :func:`inet_ntop` 来代替。" + +#: ../../library/socket.rst:976 +msgid "" +"Convert an IP address from its family-specific string format to a packed, " +"binary format. :func:`inet_pton` is useful when a library or network " +"protocol calls for an object of type :c:type:`struct in_addr` (similar to " +":func:`inet_aton`) or :c:type:`struct in6_addr`." +msgstr "" +"将特定地址簇的 IP 地址(字符串)转换为压缩二进制格式。当库或网络协议需要接受 :c:type:`struct in_addr` 类型的对象(类似 " +":func:`inet_aton` )或 :c:type:`struct in6_addr` 类型的对象时,:func:`inet_pton` 很有用。" + +#: ../../library/socket.rst:981 +msgid "" +"Supported values for *address_family* are currently :const:`AF_INET` and " +":const:`AF_INET6`. If the IP address string *ip_string* is invalid, " +":exc:`OSError` will be raised. Note that exactly what is valid depends on " +"both the value of *address_family* and the underlying implementation of " +":c:func:`inet_pton`." +msgstr "" +"目前 *address_family* 支持 :const:`AF_INET` 和 :const:`AF_INET6`。如果 IP 地址字符串 " +"*ip_string* 无效,则抛出 :exc:`OSError`。注意,具体什么地址有效取决于 *address_family* 的值和 " +":c:func:`inet_pton` 的底层实现。" + +#: ../../library/socket.rst:988 ../../library/socket.rst:1008 +msgid "" +":ref:`Availability `: Unix (maybe not all platforms), Windows." +msgstr ":ref:`可用性 `: Unix(可能非所有平台都可用)、Windows。" + +#: ../../library/socket.rst:989 ../../library/socket.rst:1009 +msgid "Windows support added" +msgstr "添加了 Windows 支持" + +#: ../../library/socket.rst:995 +msgid "" +"Convert a packed IP address (a :term:`bytes-like object` of some number of " +"bytes) to its standard, family-specific string representation (for example, " +"``'7.10.0.5'`` or ``'5aef:2b::8'``). :func:`inet_ntop` is useful when a " +"library or network protocol returns an object of type :c:type:`struct " +"in_addr` (similar to :func:`inet_ntoa`) or :c:type:`struct in6_addr`." +msgstr "" +"将压缩 IP 地址(一个 :term:`类字节对象 `,数个字节长)转换为标准的、特定地址簇的字符串形式(如 " +"``'7.10.0.5'`` 或 ``'5aef:2b::8'`` )。当库或网络协议返回 :c:type:`struct in_addr` " +"类型的对象(类似 :func:`inet_ntoa` )或 :c:type:`struct in6_addr` " +"类型的对象时,:func:`inet_ntop` 很有用。" + +#: ../../library/socket.rst:1002 +msgid "" +"Supported values for *address_family* are currently :const:`AF_INET` and " +":const:`AF_INET6`. If the bytes object *packed_ip* is not the correct length" +" for the specified address family, :exc:`ValueError` will be raised. " +":exc:`OSError` is raised for errors from the call to :func:`inet_ntop`." +msgstr "" +"目前 *address_family* 支持 :const:`AF_INET` 和 :const:`AF_INET6`。如果字节对象 " +"*packed_ip* 与指定的地址簇长度不符,则抛出 :exc:`ValueError`。针对 :func:`inet_ntop` 调用的错误则抛出 " +":exc:`OSError`。" + +#: ../../library/socket.rst:1024 +msgid "" +"Return the total length, without trailing padding, of an ancillary data item" +" with associated data of the given *length*. This value can often be used " +"as the buffer size for :meth:`~socket.recvmsg` to receive a single item of " +"ancillary data, but :rfc:`3542` requires portable applications to use " +":func:`CMSG_SPACE` and thus include space for padding, even when the item " +"will be the last in the buffer. Raises :exc:`OverflowError` if *length* is " +"outside the permissible range of values." +msgstr "" +"返回给定 *length* 所关联数据的辅助数据项的总长度(不带尾部填充)。此值通常用作 :meth:`~socket.recvmsg` " +"接收一个辅助数据项的缓冲区大小,但是 :rfc:`3542` 要求可移植应用程序使用 " +":func:`CMSG_SPACE`,以此将尾部填充的空间计入,即使该项在缓冲区的最后。如果 *length* 超出允许范围,则抛出 " +":exc:`OverflowError`。" + +#: ../../library/socket.rst:1034 ../../library/socket.rst:1055 +#: ../../library/socket.rst:1500 ../../library/socket.rst:1542 +#: ../../library/socket.rst:1648 +msgid "" +":ref:`Availability `: most Unix platforms, possibly others." +msgstr ":ref:`可用性 `: 大多数 Unix 平台,其他平台也可能可用。" + +#: ../../library/socket.rst:1040 +msgid "" +"Return the buffer size needed for :meth:`~socket.recvmsg` to receive an " +"ancillary data item with associated data of the given *length*, along with " +"any trailing padding. The buffer space needed to receive multiple items is " +"the sum of the :func:`CMSG_SPACE` values for their associated data lengths." +" Raises :exc:`OverflowError` if *length* is outside the permissible range " +"of values." +msgstr "" +"返回 :meth:`~socket.recvmsg` 所需的缓冲区大小,以接收给定 *length* " +"所关联数据的辅助数据项,带有尾部填充。接收多个项目所需的缓冲区空间是关联数据长度的 :func:`CMSG_SPACE` 值的总和。如果 " +"*length* 超出允许范围,则抛出 :exc:`OverflowError`。" + +#: ../../library/socket.rst:1048 +msgid "" +"Note that some systems might support ancillary data without providing this " +"function. Also note that setting the buffer size using the results of this " +"function may not precisely limit the amount of ancillary data that can be " +"received, since additional data may be able to fit into the padding area." +msgstr "" +"请注意,某些系统可能支持辅助数据,但不提供本函数。还需注意,如果使用本函数的结果来设置缓冲区大小,可能无法精确限制可接收的辅助数据量,因为可能会有其他数据写入尾部填充区域。" + +#: ../../library/socket.rst:1061 +msgid "" +"Return the default timeout in seconds (float) for new socket objects. A " +"value of ``None`` indicates that new socket objects have no timeout. When " +"the socket module is first imported, the default is ``None``." +msgstr "" +"返回用于新套接字对象的默认超时(以秒为单位的浮点数)。值 ``None`` 表示新套接字对象没有超时。首次导入 socket 模块时,默认值为 " +"``None``。" + +#: ../../library/socket.rst:1068 +msgid "" +"Set the default timeout in seconds (float) for new socket objects. When the" +" socket module is first imported, the default is ``None``. See " +":meth:`~socket.settimeout` for possible values and their respective " +"meanings." +msgstr "" +"设置用于新套接字对象的默认超时(以秒为单位的浮点数)。首次导入 socket 模块时,默认值为 ``None``。可能的取值及其各自的含义请参阅 " +":meth:`~socket.settimeout`。" + +#: ../../library/socket.rst:1076 +msgid "" +"Set the machine's hostname to *name*. This will raise an :exc:`OSError` if " +"you don't have enough rights." +msgstr "将计算机的主机名设置为 *name*。如果权限不足将抛出 :exc:`OSError`。" + +#: ../../library/socket.rst:1079 +msgid "" +"Raises an :ref:`auditing event ` ``socket.sethostname`` with " +"argument ``name``." +msgstr "引发一个 :ref:`审计事件 ` ``socket.sethostname`` 并附带参数 ``name``。" + +#: ../../library/socket.rst:1082 +msgid ":ref:`Availability `: Unix." +msgstr ":ref:`可用性 `: Unix。" + +#: ../../library/socket.rst:1088 +msgid "" +"Return a list of network interface information (index int, name string) " +"tuples. :exc:`OSError` if the system call fails." +msgstr "返回一个列表,包含网络接口(网卡)信息二元组(整数索引,名称字符串)。系统调用失败则抛出 :exc:`OSError`。" + +#: ../../library/socket.rst:1093 ../../library/socket.rst:1120 +#: ../../library/socket.rst:1137 +msgid ":ref:`Availability `: Unix, Windows." +msgstr ":ref:`可用性 `: Unix, Windows。" + +#: ../../library/socket.rst:1096 ../../library/socket.rst:1123 +#: ../../library/socket.rst:1140 +msgid "Windows support was added." +msgstr "添加了 Windows 支持。" + +#: ../../library/socket.rst:1101 +msgid "" +"On Windows network interfaces have different names in different contexts " +"(all names are examples):" +msgstr "在 Windows 中网络接口在不同上下文中具有不同的名称(所有名称见对应示例):" + +#: ../../library/socket.rst:1104 +msgid "UUID: ``{FB605B73-AAC2-49A6-9A2F-25416AEA0573}``" +msgstr "UUID: ``{FB605B73-AAC2-49A6-9A2F-25416AEA0573}``" + +#: ../../library/socket.rst:1105 +msgid "name: ``ethernet_32770``" +msgstr "名称: ``ethernet_32770``" + +#: ../../library/socket.rst:1106 +msgid "friendly name: ``vEthernet (nat)``" +msgstr "友好名称: ``vEthernet (nat)``" + +#: ../../library/socket.rst:1107 +msgid "description: ``Hyper-V Virtual Ethernet Adapter``" +msgstr "描述: ``Hyper-V Virtual Ethernet Adapter``" + +#: ../../library/socket.rst:1109 +msgid "" +"This function returns names of the second form from the list, " +"``ethernet_32770`` in this example case." +msgstr "此函数返回列表中第二种形式的名称,在此示例中为 ``ethernet_32770``。" + +#: ../../library/socket.rst:1115 +msgid "" +"Return a network interface index number corresponding to an interface name. " +":exc:`OSError` if no interface with the given name exists." +msgstr "返回网络接口名称相对应的索引号。如果没有所给名称的接口,则抛出 :exc:`OSError`。" + +#: ../../library/socket.rst:1127 ../../library/socket.rst:1144 +msgid "\"Interface name\" is a name as documented in :func:`if_nameindex`." +msgstr "\"Interface name\" 为 :func:`if_nameindex` 中所描述的名称。" + +#: ../../library/socket.rst:1132 +msgid "" +"Return a network interface name corresponding to an interface index number. " +":exc:`OSError` if no interface with the given index exists." +msgstr "返回网络接口索引号相对应的接口名称。如果没有所给索引号的接口,则抛出 :exc:`OSError`。" + +#: ../../library/socket.rst:1149 +msgid "" +"Send the list of file descriptors *fds* over an :const:`AF_UNIX` socket " +"*sock*. The *fds* parameter is a sequence of file descriptors. Consult " +":meth:`sendmsg` for the documentation of these parameters." +msgstr "" +"将文件描述符列表 *fds* 通过一个 :const:`AF_UNIX` 套接字 *sock* 进行发送。 *fds* 形参是由文件描述符构成的序列。 " +"请查看 :meth:`sendmsg` 获取这些形参的文档。" + +#: ../../library/socket.rst:1154 +msgid "" +":ref:`Availability `: Unix supporting :meth:`~socket.sendmsg` " +"and :const:`SCM_RIGHTS` mechanism." +msgstr "" +":ref:`可用性 `: 支持 :meth:`~socket.sendmsg` 和 :const:`SCM_RIGHTS` " +"机制的 Unix 系统。" + +#: ../../library/socket.rst:1160 +msgid "" +"Receive up to *maxfds* file descriptors from an :const:`AF_UNIX` socket " +"*sock*. Return ``(msg, list(fds), flags, addr)``. Consult :meth:`recvmsg` " +"for the documentation of these parameters." +msgstr "" +"接收至多 *maxfds* 个来自 :const:`AF_UNIX` 套接字 *sock* 的文件描述符。 返回 ``(msg, list(fds), " +"flags, addr)``。 请查看 :meth:`recvmsg` 获取有些形参的文档。" + +#: ../../library/socket.rst:1165 +msgid "" +":ref:`Availability `: Unix supporting :meth:`~socket.recvmsg` " +"and :const:`SCM_RIGHTS` mechanism." +msgstr "" +":ref:`可用性 `: 支持 :meth:`~socket.recvmsg` 和 :const:`SCM_RIGHTS` " +"机制的 Unix 系统。" + +#: ../../library/socket.rst:1170 +msgid "Any truncated integers at the end of the list of file descriptors." +msgstr "位于文件描述符列表末尾的任何被截断整数。" + +#: ../../library/socket.rst:1176 +msgid "Socket Objects" +msgstr "套接字对象" + +#: ../../library/socket.rst:1178 +msgid "" +"Socket objects have the following methods. Except for " +":meth:`~socket.makefile`, these correspond to Unix system calls applicable " +"to sockets." +msgstr "套接字对象具有以下方法。除了 :meth:`~socket.makefile`,其他都与套接字专用的 Unix 系统调用相对应。" + +#: ../../library/socket.rst:1182 +msgid "" +"Support for the :term:`context manager` protocol was added. Exiting the " +"context manager is equivalent to calling :meth:`~socket.close`." +msgstr "" +"添加了对 :term:`上下文管理器 ` 协议的支持。退出上下文管理器与调用 " +":meth:`~socket.close` 等效。" + +#: ../../library/socket.rst:1189 +msgid "" +"Accept a connection. The socket must be bound to an address and listening " +"for connections. The return value is a pair ``(conn, address)`` where *conn*" +" is a *new* socket object usable to send and receive data on the connection," +" and *address* is the address bound to the socket on the other end of the " +"connection." +msgstr "" +"接受一个连接。此 socket 必须绑定到一个地址上并且监听连接。返回值是一个 ``(conn, address)`` 对,其中 *conn* 是一个 " +"*新* 的套接字对象,用于在此连接上收发数据,*address* 是连接另一端的套接字所绑定的地址。" + +#: ../../library/socket.rst:1196 ../../library/socket.rst:1283 +msgid "The socket is now non-inheritable." +msgstr "该套接字现在是不可继承的。" + +#: ../../library/socket.rst:1199 ../../library/socket.rst:1414 +#: ../../library/socket.rst:1428 ../../library/socket.rst:1503 +#: ../../library/socket.rst:1574 ../../library/socket.rst:1593 +#: ../../library/socket.rst:1610 ../../library/socket.rst:1653 +msgid "" +"If the system call is interrupted and the signal handler does not raise an " +"exception, the method now retries the system call instead of raising an " +":exc:`InterruptedError` exception (see :pep:`475` for the rationale)." +msgstr "" +"如果系统调用被中断,但信号处理程序没有触发异常,此方法现在会重试系统调用,而不是触发 :exc:`InterruptedError` 异常 (原因详见 " +":pep:`475`)。" + +#: ../../library/socket.rst:1207 +msgid "" +"Bind the socket to *address*. The socket must not already be bound. (The " +"format of *address* depends on the address family --- see above.)" +msgstr "将套接字绑定到 *address*。套接字必须尚未绑定。( *address* 的格式取决于地址簇 —— 参见上文)" + +#: ../../library/socket.rst:1210 +msgid "" +"Raises an :ref:`auditing event ` ``socket.bind`` with arguments " +"``self``, ``address``." +msgstr "" +"引发一个 :ref:`审计事件 ` ``socket.bind`` 并附带参数 ``self``、``address``。" + +#: ../../library/socket.rst:1214 +msgid "" +"Mark the socket closed. The underlying system resource (e.g. a file " +"descriptor) is also closed when all file objects from :meth:`makefile()` are" +" closed. Once that happens, all future operations on the socket object will" +" fail. The remote end will receive no more data (after queued data is " +"flushed)." +msgstr "" +"将套接字标记为关闭。当 :meth:`makefile()` " +"创建的所有文件对象都关闭时,底层系统资源(如文件描述符)也将关闭。一旦上述情况发生,将来对套接字对象的所有操作都会失败。对端将接收不到任何数据(清空队列数据后)。" + +#: ../../library/socket.rst:1220 +msgid "" +"Sockets are automatically closed when they are garbage-collected, but it is " +"recommended to :meth:`close` them explicitly, or to use a :keyword:`with` " +"statement around them." +msgstr "垃圾回收时,套接字会自动关闭,但建议显式 :meth:`close` 它们,或在它们周围使用 :keyword:`with` 语句。" + +#: ../../library/socket.rst:1224 +msgid "" +":exc:`OSError` is now raised if an error occurs when the underlying " +":c:func:`close` call is made." +msgstr "现在,如果底层的 :c:func:`close` 调用出错,会抛出 :exc:`OSError`。" + +#: ../../library/socket.rst:1230 +msgid "" +":meth:`close()` releases the resource associated with a connection but does " +"not necessarily close the connection immediately. If you want to close the " +"connection in a timely fashion, call :meth:`shutdown()` before " +":meth:`close()`." +msgstr "" +":meth:`close()` 释放与连接相关联的资源,但不一定立即关闭连接。如果需要及时关闭连接,请在调用 :meth:`close()` 之前调用 " +":meth:`shutdown()`。" + +#: ../../library/socket.rst:1238 +msgid "" +"Connect to a remote socket at *address*. (The format of *address* depends on" +" the address family --- see above.)" +msgstr "连接到 *address* 处的远程套接字。( *address* 的格式取决于地址簇 —— 参见上文)" + +#: ../../library/socket.rst:1241 +msgid "" +"If the connection is interrupted by a signal, the method waits until the " +"connection completes, or raise a :exc:`socket.timeout` on timeout, if the " +"signal handler doesn't raise an exception and the socket is blocking or has " +"a timeout. For non-blocking sockets, the method raises an " +":exc:`InterruptedError` exception if the connection is interrupted by a " +"signal (or the exception raised by the signal handler)." +msgstr "" +"如果连接被信号中断,则本方法将等待,直到连接完成。如果信号处理程序未抛出异常,且套接字阻塞中或已超时,则在超时后抛出 " +":exc:`socket.timeout`。对于非阻塞套接字,如果连接被信号中断,则本方法将抛出 :exc:`InterruptedError` " +"异常(或信号处理程序抛出的异常)。" + +#: ../../library/socket.rst:1248 ../../library/socket.rst:1266 +msgid "" +"Raises an :ref:`auditing event ` ``socket.connect`` with arguments" +" ``self``, ``address``." +msgstr "" +"引发一个 :ref:`审计事件 ` ``socket.connect`` 并附带参数 ``self``、``address``。" + +#: ../../library/socket.rst:1250 +msgid "" +"The method now waits until the connection completes instead of raising an " +":exc:`InterruptedError` exception if the connection is interrupted by a " +"signal, the signal handler doesn't raise an exception and the socket is " +"blocking or has a timeout (see the :pep:`475` for the rationale)." +msgstr "" +"本方法现在将等待,直到连接完成,而不是在以下情况抛出 :exc:`InterruptedError` " +"异常。该情况为,连接被信号中断,信号处理程序未抛出异常,且套接字阻塞中或已超时(具体解释请参阅 :pep:`475` )。" + +#: ../../library/socket.rst:1259 +msgid "" +"Like ``connect(address)``, but return an error indicator instead of raising " +"an exception for errors returned by the C-level :c:func:`connect` call " +"(other problems, such as \"host not found,\" can still raise exceptions). " +"The error indicator is ``0`` if the operation succeeded, otherwise the value" +" of the :c:data:`errno` variable. This is useful to support, for example, " +"asynchronous connects." +msgstr "" +"类似于 ``connect(address)``,但是对于 C 级别的 :c:func:`connect` " +"调用返回的错误,本函数将返回错误指示器,而不是抛出异常(对于其他问题,如“找不到主机”,仍然可以抛出异常)。如果操作成功,则错误指示器为 " +"``0``,否则为 :c:data:`errno` 变量的值。这对支持如异步连接很有用。" + +#: ../../library/socket.rst:1270 +msgid "" +"Put the socket object into closed state without actually closing the " +"underlying file descriptor. The file descriptor is returned, and can be " +"reused for other purposes." +msgstr "将套接字对象置于关闭状态,而底层的文件描述符实际并不关闭。返回该文件描述符,使其可以重新用于其他目的。" + +#: ../../library/socket.rst:1279 +msgid "Duplicate the socket." +msgstr "创建套接字的副本。" + +#: ../../library/socket.rst:1289 +msgid "" +"Return the socket's file descriptor (a small integer), or -1 on failure. " +"This is useful with :func:`select.select`." +msgstr "返回套接字的文件描述符(一个小整数),失败返回 -1。配合 :func:`select.select` 使用很有用。" + +#: ../../library/socket.rst:1292 +msgid "" +"Under Windows the small integer returned by this method cannot be used where" +" a file descriptor can be used (such as :func:`os.fdopen`). Unix does not " +"have this limitation." +msgstr "" +"在 Windows 下,此方法返回的小整数在允许使用文件描述符的地方无法使用(如 :func:`os.fdopen` )。Unix 无此限制。" + +#: ../../library/socket.rst:1298 +msgid "" +"Get the :ref:`inheritable flag ` of the socket's file " +"descriptor or socket's handle: ``True`` if the socket can be inherited in " +"child processes, ``False`` if it cannot." +msgstr "" +"获取套接字文件描述符或套接字句柄的 :ref:`可继承标志 ` :如果子进程可以继承套接字则为 ``True``,否则为" +" ``False``。" + +#: ../../library/socket.rst:1307 +msgid "" +"Return the remote address to which the socket is connected. This is useful " +"to find out the port number of a remote IPv4/v6 socket, for instance. (The " +"format of the address returned depends on the address family --- see above.)" +" On some systems this function is not supported." +msgstr "" +"返回套接字连接到的远程地址。举例而言,这可以用于查找远程 IPv4/v6 套接字的端口号。(返回的地址格式取决于地址簇 —— " +"参见上文。)部分系统不支持此函数。" + +#: ../../library/socket.rst:1315 +msgid "" +"Return the socket's own address. This is useful to find out the port number" +" of an IPv4/v6 socket, for instance. (The format of the address returned " +"depends on the address family --- see above.)" +msgstr "返回套接字本身的地址。举例而言,这可以用于查找 IPv4/v6 套接字的端口号。(返回的地址格式取决于地址簇 —— 参见上文。)" + +#: ../../library/socket.rst:1322 +msgid "" +"Return the value of the given socket option (see the Unix man page " +":manpage:`getsockopt(2)`). The needed symbolic constants (:const:`SO_\\*` " +"etc.) are defined in this module. If *buflen* is absent, an integer option " +"is assumed and its integer value is returned by the function. If *buflen* " +"is present, it specifies the maximum length of the buffer used to receive " +"the option in, and this buffer is returned as a bytes object. It is up to " +"the caller to decode the contents of the buffer (see the optional built-in " +"module :mod:`struct` for a way to decode C structures encoded as byte " +"strings)." +msgstr "" +"返回指定套接字选项的值(参阅 Unix 手册页 :manpage:`getsockopt(2)` )。所需的符号常量( :const:`SO_\\*` " +"等)已定义在本模块中。如果未指定 *buflen*,则认为该选项值为整数,由本函数返回该整数值。如果指定 " +"*buflen*,则它定义了用于存放选项值的缓冲区的最大长度,且该缓冲区将作为字节对象返回。对缓冲区的解码工作由调用者自行完成(针对编码为字节串的 C " +"结构,其解码方法请参阅可选的内置模块 :mod:`struct` )。" + +#: ../../library/socket.rst:1334 +msgid "" +"Return ``True`` if socket is in blocking mode, ``False`` if in non-blocking." +msgstr "如果套接字处于阻塞模式,返回 ``True``,非阻塞模式返回 ``False``。" + +#: ../../library/socket.rst:1337 +msgid "This is equivalent to checking ``socket.gettimeout() == 0``." +msgstr "这相当于检测 ``socket.gettimeout() == 0``。" + +#: ../../library/socket.rst:1344 +msgid "" +"Return the timeout in seconds (float) associated with socket operations, or " +"``None`` if no timeout is set. This reflects the last call to " +":meth:`setblocking` or :meth:`settimeout`." +msgstr "" +"返回套接字操作相关的超时秒数(浮点数),未设置超时则返回 ``None``。它反映最后一次调用 :meth:`setblocking` 或 " +":meth:`settimeout` 后的设置。" + +#: ../../library/socket.rst:0 +msgid "platform" +msgstr "平台" + +#: ../../library/socket.rst:1351 +msgid "Windows" +msgstr "Windows" + +#: ../../library/socket.rst:1353 +msgid "" +"The :meth:`ioctl` method is a limited interface to the WSAIoctl system " +"interface. Please refer to the `Win32 documentation " +"`_ for " +"more information." +msgstr "" +":meth:`ioctl` 方法是 WSAIoctl 系统接口的有限接口。请参考 `Win32 文档 " +"`_ " +"以获取更多信息。" + +#: ../../library/socket.rst:1358 +msgid "" +"On other platforms, the generic :func:`fcntl.fcntl` and :func:`fcntl.ioctl` " +"functions may be used; they accept a socket object as their first argument." +msgstr "" +"在其他平台上,可以使用通用的 :func:`fcntl.fcntl` 和 :func:`fcntl.ioctl` " +"函数,它们接受套接字对象作为第一个参数。" + +#: ../../library/socket.rst:1361 +msgid "" +"Currently only the following control codes are supported: ``SIO_RCVALL``, " +"``SIO_KEEPALIVE_VALS``, and ``SIO_LOOPBACK_FAST_PATH``." +msgstr "" +"当前仅支持以下控制码: ``SIO_RCVALL``、``SIO_KEEPALIVE_VALS`` 和 " +"``SIO_LOOPBACK_FAST_PATH``。" + +#: ../../library/socket.rst:1369 +msgid "" +"Enable a server to accept connections. If *backlog* is specified, it must " +"be at least 0 (if it is lower, it is set to 0); it specifies the number of " +"unaccepted connections that the system will allow before refusing new " +"connections. If not specified, a default reasonable value is chosen." +msgstr "" +"启动一个服务器用于接受连接。如果指定 *backlog*,则它最低为 0(小于 0 会被置为 0),它指定系统允许暂未 accept " +"的连接数,超过后将拒绝新连接。未指定则自动设为合理的默认值。" + +#: ../../library/socket.rst:1374 +msgid "The *backlog* parameter is now optional." +msgstr "*backlog* 参数现在是可选的。" + +#: ../../library/socket.rst:1382 +msgid "" +"Return a :term:`file object` associated with the socket. The exact returned" +" type depends on the arguments given to :meth:`makefile`. These arguments " +"are interpreted the same way as by the built-in :func:`open` function, " +"except the only supported *mode* values are ``'r'`` (default), ``'w'`` and " +"``'b'``." +msgstr "" +"返回与套接字关联的 :term:`文件对象 `。返回的对象的具体类型取决于 :meth:`makefile` " +"的参数。这些参数的解释方式与内置的 :func:`open` 函数相同,其中 *mode* 的值仅支持 ``'r'`` (默认),``'w'`` 和 " +"``'b'``。" + +#: ../../library/socket.rst:1387 +msgid "" +"The socket must be in blocking mode; it can have a timeout, but the file " +"object's internal buffer may end up in an inconsistent state if a timeout " +"occurs." +msgstr "套接字必须处于阻塞模式,它可以有超时,但是如果发生超时,文件对象的内部缓冲区可能会以不一致的状态结尾。" + +#: ../../library/socket.rst:1391 +msgid "" +"Closing the file object returned by :meth:`makefile` won't close the " +"original socket unless all other file objects have been closed and " +":meth:`socket.close` has been called on the socket object." +msgstr "" +"关闭 :meth:`makefile` 返回的文件对象不会关闭原始套接字,除非所有其他文件对象都已关闭且在套接字对象上调用了 " +":meth:`socket.close`。" + +#: ../../library/socket.rst:1397 +msgid "" +"On Windows, the file-like object created by :meth:`makefile` cannot be used " +"where a file object with a file descriptor is expected, such as the stream " +"arguments of :meth:`subprocess.Popen`." +msgstr "" +"在 Windows 上,由 :meth:`makefile` 创建的文件型对象无法作为带文件描述符的文件对象使用,如无法作为 " +":meth:`subprocess.Popen` 的流参数。" + +#: ../../library/socket.rst:1404 +msgid "" +"Receive data from the socket. The return value is a bytes object " +"representing the data received. The maximum amount of data to be received " +"at once is specified by *bufsize*. See the Unix manual page " +":manpage:`recv(2)` for the meaning of the optional argument *flags*; it " +"defaults to zero." +msgstr "" +"从套接字接收数据。返回值是一个字节对象,表示接收到的数据。*bufsize* 指定一次接收的最大数据量。可选参数 *flags* 的含义请参阅 Unix" +" 手册页 :manpage:`recv(2)`,它默认为零。" + +#: ../../library/socket.rst:1411 +msgid "" +"For best match with hardware and network realities, the value of *bufsize* " +"should be a relatively small power of 2, for example, 4096." +msgstr "为了最佳匹配硬件和网络的实际情况,*bufsize* 的值应为 2 的相对较小的幂,如 4096。" + +#: ../../library/socket.rst:1422 +msgid "" +"Receive data from the socket. The return value is a pair ``(bytes, " +"address)`` where *bytes* is a bytes object representing the data received " +"and *address* is the address of the socket sending the data. See the Unix " +"manual page :manpage:`recv(2)` for the meaning of the optional argument " +"*flags*; it defaults to zero. (The format of *address* depends on the " +"address family --- see above.)" +msgstr "" +"从套接字接收数据。返回值是一对 ``(bytes, address)``,其中 *bytes* 是字节对象,表示接收到的数据,*address* " +"是发送端套接字的地址。可选参数 *flags* 的含义请参阅 Unix 手册页 :manpage:`recv(2)`,它默认为零。( *address*" +" 的格式取决于地址簇 —— 参见上文)" + +#: ../../library/socket.rst:1433 +msgid "" +"For multicast IPv6 address, first item of *address* does not contain " +"``%scope_id`` part anymore. In order to get full IPv6 address use " +":func:`getnameinfo`." +msgstr "" +"对于多播 IPv6 地址,*address* 的第一项不会再包含 ``%scope_id`` 部分。 要获得完整的 IPv6 地址请使用 " +":func:`getnameinfo`。" + +#: ../../library/socket.rst:1440 +msgid "" +"Receive normal data (up to *bufsize* bytes) and ancillary data from the " +"socket. The *ancbufsize* argument sets the size in bytes of the internal " +"buffer used to receive the ancillary data; it defaults to 0, meaning that no" +" ancillary data will be received. Appropriate buffer sizes for ancillary " +"data can be calculated using :func:`CMSG_SPACE` or :func:`CMSG_LEN`, and " +"items which do not fit into the buffer might be truncated or discarded. The" +" *flags* argument defaults to 0 and has the same meaning as for " +":meth:`recv`." +msgstr "" +"从套接字接收普通数据(至多 *bufsize* 字节)和辅助数据。*ancbufsize* " +"参数设置用于接收辅助数据的内部缓冲区的大小(以字节为单位),默认为 0,表示不接收辅助数据。可以使用 :func:`CMSG_SPACE` 或 " +":func:`CMSG_LEN` 计算辅助数据缓冲区的合适大小,无法放入缓冲区的项目可能会被截断或丢弃。*flags* 参数默认为 0,其含义与 " +":meth:`recv` 中的相同。" + +#: ../../library/socket.rst:1450 +msgid "" +"The return value is a 4-tuple: ``(data, ancdata, msg_flags, address)``. The" +" *data* item is a :class:`bytes` object holding the non-ancillary data " +"received. The *ancdata* item is a list of zero or more tuples " +"``(cmsg_level, cmsg_type, cmsg_data)`` representing the ancillary data " +"(control messages) received: *cmsg_level* and *cmsg_type* are integers " +"specifying the protocol level and protocol-specific type respectively, and " +"*cmsg_data* is a :class:`bytes` object holding the associated data. The " +"*msg_flags* item is the bitwise OR of various flags indicating conditions on" +" the received message; see your system documentation for details. If the " +"receiving socket is unconnected, *address* is the address of the sending " +"socket, if available; otherwise, its value is unspecified." +msgstr "" +"返回值是一个四元组: ``(data, ancdata, msg_flags, address)``。*data* 项是一个 " +":class:`bytes` 对象,用于保存接收到的非辅助数据。*ancdata* 项是零个或多个元组 ``(cmsg_level, " +"cmsg_type, cmsg_data)`` 组成的列表,表示接收到的辅助数据(控制消息):*cmsg_level* 和 *cmsg_type* " +"是分别表示协议级别和协议类型的整数,而 *cmsg_data* 是保存相关数据的 :class:`bytes` 对象。*msg_flags* " +"项由各种标志按位或组成,表示接收消息的情况,详细信息请参阅系统文档。如果接收端套接字断开连接,则 *address* " +"是发送端套接字的地址(如果有),否则该值无指定。" + +#: ../../library/socket.rst:1464 +msgid "" +"On some systems, :meth:`sendmsg` and :meth:`recvmsg` can be used to pass " +"file descriptors between processes over an :const:`AF_UNIX` socket. When " +"this facility is used (it is often restricted to :const:`SOCK_STREAM` " +"sockets), :meth:`recvmsg` will return, in its ancillary data, items of the " +"form ``(socket.SOL_SOCKET, socket.SCM_RIGHTS, fds)``, where *fds* is a " +":class:`bytes` object representing the new file descriptors as a binary " +"array of the native C :c:type:`int` type. If :meth:`recvmsg` raises an " +"exception after the system call returns, it will first attempt to close any " +"file descriptors received via this mechanism." +msgstr "" +"某些系统上可以利用 :const:`AF_UNIX` 套接字通过 :meth:`sendmsg` 和 :meth:`recvmsg` " +"在进程之间传递文件描述符。使用此功能时(通常仅限于 :const:`SOCK_STREAM` 套接字),:meth:`recvmsg` " +"将在其辅助数据中返回以下格式的项 ``(socket.SOL_SOCKET, socket.SCM_RIGHTS, fds)``,其中 *fds* " +"是一个 :class:`bytes` 对象,是新文件描述符表示为原生 C :c:type:`int` 类型的二进制数组。如果 " +":meth:`recvmsg` 在系统调用返回后抛出异常,它将首先关闭此机制接收到的所有文件描述符。" + +#: ../../library/socket.rst:1475 +msgid "" +"Some systems do not indicate the truncated length of ancillary data items " +"which have been only partially received. If an item appears to extend " +"beyond the end of the buffer, :meth:`recvmsg` will issue a " +":exc:`RuntimeWarning`, and will return the part of it which is inside the " +"buffer provided it has not been truncated before the start of its associated" +" data." +msgstr "" +"对于仅接收到一部分的辅助数据项,一些系统没有指示其截断长度。如果某个项目可能超出了缓冲区的末尾,:meth:`recvmsg` 将发出 " +":exc:`RuntimeWarning`,并返回其在缓冲区内的部分,前提是该对象被截断于关联数据开始后。" + +#: ../../library/socket.rst:1482 +msgid "" +"On systems which support the :const:`SCM_RIGHTS` mechanism, the following " +"function will receive up to *maxfds* file descriptors, returning the message" +" data and a list containing the descriptors (while ignoring unexpected " +"conditions such as unrelated control messages being received). See also " +":meth:`sendmsg`. ::" +msgstr "" +"在支持 :const:`SCM_RIGHTS` 机制的系统上,下方的函数将最多接收 *maxfds* " +"个文件描述符,返回消息数据和包含描述符的列表(同时忽略意外情况,如接收到无关的控制消息)。另请参阅 :meth:`sendmsg`。 ::" + +#: ../../library/socket.rst:1511 +msgid "" +"Receive normal data and ancillary data from the socket, behaving as " +":meth:`recvmsg` would, but scatter the non-ancillary data into a series of " +"buffers instead of returning a new bytes object. The *buffers* argument " +"must be an iterable of objects that export writable buffers (e.g. " +":class:`bytearray` objects); these will be filled with successive chunks of " +"the non-ancillary data until it has all been written or there are no more " +"buffers. The operating system may set a limit (:func:`~os.sysconf` value " +"``SC_IOV_MAX``) on the number of buffers that can be used. The *ancbufsize*" +" and *flags* arguments have the same meaning as for :meth:`recvmsg`." +msgstr "" +"从套接字接收普通数据和辅助数据,其行为与 :meth:`recvmsg` " +"相同,但将非辅助数据分散到一系列缓冲区中,而不是返回新的字节对象。*buffers* 参数必须是可迭代对象,它迭代出可供写入的缓冲区(如 " +":class:`bytearray` " +"对象),这些缓冲区将被连续的非辅助数据块填充,直到数据全部写完或缓冲区用完为止。在允许使用的缓冲区数量上,操作系统可能会有限制( " +":func:`~os.sysconf` 的 ``SC_IOV_MAX`` 值)。*ancbufsize* 和 *flags* 参数的含义与 " +":meth:`recvmsg` 中的相同。" + +#: ../../library/socket.rst:1522 +msgid "" +"The return value is a 4-tuple: ``(nbytes, ancdata, msg_flags, address)``, " +"where *nbytes* is the total number of bytes of non-ancillary data written " +"into the buffers, and *ancdata*, *msg_flags* and *address* are the same as " +"for :meth:`recvmsg`." +msgstr "" +"返回值为四元组: ``(nbytes, ancdata, msg_flags, address)``,其中 *nbytes* " +"是写入缓冲区的非辅助数据的字节总数,而 *ancdata*、*msg_flags* 和 *address* 与 :meth:`recvmsg` " +"中的相同。" + +#: ../../library/socket.rst:1527 +msgid "Example::" +msgstr "示例::" + +#: ../../library/socket.rst:1548 +msgid "" +"Receive data from the socket, writing it into *buffer* instead of creating a" +" new bytestring. The return value is a pair ``(nbytes, address)`` where " +"*nbytes* is the number of bytes received and *address* is the address of the" +" socket sending the data. See the Unix manual page :manpage:`recv(2)` for " +"the meaning of the optional argument *flags*; it defaults to zero. (The " +"format of *address* depends on the address family --- see above.)" +msgstr "" +"从套接字接收数据,将其写入 *buffer* 而不是创建新的字节串。返回值是一对 ``(nbytes, address)``,其中 *nbytes* " +"是收到的字节数,*address* 是发送端套接字的地址。可选参数 *flags* 的含义请参阅 Unix 手册页 " +":manpage:`recv(2)`,它默认为零。( *address* 的格式取决于地址簇 —— 参见上文)" + +#: ../../library/socket.rst:1558 +msgid "" +"Receive up to *nbytes* bytes from the socket, storing the data into a buffer" +" rather than creating a new bytestring. If *nbytes* is not specified (or " +"0), receive up to the size available in the given buffer. Returns the " +"number of bytes received. See the Unix manual page :manpage:`recv(2)` for " +"the meaning of the optional argument *flags*; it defaults to zero." +msgstr "" +"从套接字接收至多 *nbytes* 个字节,将其写入缓冲区而不是创建新的字节串。如果 *nbytes* 未指定(或指定为 " +"0),则接收至所给缓冲区的最大可用大小。返回接收到的字节数。可选参数 *flags* 的含义请参阅 Unix 手册页 " +":manpage:`recv(2)`,它默认为零。" + +#: ../../library/socket.rst:1567 +msgid "" +"Send data to the socket. The socket must be connected to a remote socket. " +"The optional *flags* argument has the same meaning as for :meth:`recv` " +"above. Returns the number of bytes sent. Applications are responsible for " +"checking that all data has been sent; if only some of the data was " +"transmitted, the application needs to attempt delivery of the remaining " +"data. For further information on this topic, consult the :ref:`socket-" +"howto`." +msgstr "" +"发送数据给套接字。本套接字必须已连接到远程套接字。可选参数 *flags* 的含义与上述 :meth:`recv` " +"中的相同。本方法返回已发送的字节数。应用程序要负责检查所有数据是否已发送,如果仅传输了部分数据,程序需要自行尝试传输其余数据。有关该主题的更多信息,请参考" +" :ref:`socket-howto`。" + +#: ../../library/socket.rst:1582 +msgid "" +"Send data to the socket. The socket must be connected to a remote socket. " +"The optional *flags* argument has the same meaning as for :meth:`recv` " +"above. Unlike :meth:`send`, this method continues to send data from *bytes* " +"until either all data has been sent or an error occurs. ``None`` is " +"returned on success. On error, an exception is raised, and there is no way " +"to determine how much data, if any, was successfully sent." +msgstr "" +"发送数据给套接字。本套接字必须已连接到远程套接字。可选参数 *flags* 的含义与上述 :meth:`recv` 中的相同。与 " +":meth:`send` 不同,本方法持续从 *bytes* 发送数据,直到所有数据都已发送或发生错误为止。成功后会返回 " +"``None``。出错后会抛出一个异常,此时并没有办法确定成功发送了多少数据。" + +#: ../../library/socket.rst:1589 +msgid "" +"The socket timeout is no more reset each time data is sent successfully. The" +" socket timeout is now the maximum total duration to send all data." +msgstr "每次成功发送数据后,套接字超时不再重置。现在,套接字超时是发送所有数据的最大总持续时间。" + +#: ../../library/socket.rst:1602 +msgid "" +"Send data to the socket. The socket should not be connected to a remote " +"socket, since the destination socket is specified by *address*. The " +"optional *flags* argument has the same meaning as for :meth:`recv` above. " +"Return the number of bytes sent. (The format of *address* depends on the " +"address family --- see above.)" +msgstr "" +"发送数据给套接字。本套接字不应连接到远程套接字,而应由 *address* 指定目标套接字。可选参数 *flags* 的含义与上述 " +":meth:`recv` 中的相同。本方法返回已发送的字节数。( *address* 的格式取决于地址簇 —— 参见上文。)" + +#: ../../library/socket.rst:1608 +msgid "" +"Raises an :ref:`auditing event ` ``socket.sendto`` with arguments " +"``self``, ``address``." +msgstr "" +"引发一个 :ref:`审计事件 ` ``socket.sendto`` 并附带参数 ``self``, ``address``。" + +#: ../../library/socket.rst:1618 +msgid "" +"Send normal and ancillary data to the socket, gathering the non-ancillary " +"data from a series of buffers and concatenating it into a single message. " +"The *buffers* argument specifies the non-ancillary data as an iterable of " +":term:`bytes-like objects ` (e.g. :class:`bytes` " +"objects); the operating system may set a limit (:func:`~os.sysconf` value " +"``SC_IOV_MAX``) on the number of buffers that can be used. The *ancdata* " +"argument specifies the ancillary data (control messages) as an iterable of " +"zero or more tuples ``(cmsg_level, cmsg_type, cmsg_data)``, where " +"*cmsg_level* and *cmsg_type* are integers specifying the protocol level and " +"protocol-specific type respectively, and *cmsg_data* is a bytes-like object " +"holding the associated data. Note that some systems (in particular, systems" +" without :func:`CMSG_SPACE`) might support sending only one control message " +"per call. The *flags* argument defaults to 0 and has the same meaning as " +"for :meth:`send`. If *address* is supplied and not ``None``, it sets a " +"destination address for the message. The return value is the number of " +"bytes of non-ancillary data sent." +msgstr "" +"将普通数据和辅助数据发送给套接字,将从一系列缓冲区中收集非辅助数据,并将其拼接为一条消息。*buffers* 参数指定的非辅助数据应为可迭代的 " +":term:`字节类对象 ` (如 :class:`bytes` " +"对象),在允许使用的缓冲区数量上,操作系统可能会有限制( :func:`~os.sysconf` 的 ``SC_IOV_MAX`` " +"值)。*ancdata* 参数指定的辅助数据(控制消息)应为可迭代对象,迭代出零个或多个 ``(cmsg_level, cmsg_type, " +"cmsg_data)`` 元组,其中 *cmsg_level* 和 *cmsg_type* 是分别指定协议级别和协议类型的整数,而 " +"*cmsg_data* 是保存相关数据的字节类对象。请注意,某些系统(特别是没有 :func:`CMSG_SPACE` " +"的系统)可能每次调用仅支持发送一条控制消息。*flags* 参数默认为 0,与 :meth:`send` 中的含义相同。如果 *address* " +"指定为除 ``None`` 以外的值,它将作为消息的目标地址。返回值是已发送的非辅助数据的字节数。" + +#: ../../library/socket.rst:1638 +msgid "" +"The following function sends the list of file descriptors *fds* over an " +":const:`AF_UNIX` socket, on systems which support the :const:`SCM_RIGHTS` " +"mechanism. See also :meth:`recvmsg`. ::" +msgstr "" +"在支持 :const:`SCM_RIGHTS` 机制的系统上,下方的函数通过一个 :const:`AF_UNIX` 套接字来发送文件描述符列表 " +"*fds*。另请参阅 :meth:`recvmsg`。 ::" + +#: ../../library/socket.rst:1649 +msgid "" +"Raises an :ref:`auditing event ` ``socket.sendmsg`` with arguments" +" ``self``, ``address``." +msgstr "" +"引发一个 :ref:`审计事件 ` ``socket.sendmsg`` 并附带参数 ``self``, ``address``。" + +#: ../../library/socket.rst:1660 +msgid "" +"Specialized version of :meth:`~socket.sendmsg` for :const:`AF_ALG` socket. " +"Set mode, IV, AEAD associated data length and flags for :const:`AF_ALG` " +"socket." +msgstr "" +"为 :const:`AF_ALG` 套接字定制的 :meth:`~socket.sendmsg` 版本。可为 :const:`AF_ALG` " +"套接字设置模式、IV、AEAD 关联数据的长度和标志位。" + +#: ../../library/socket.rst:1669 +msgid "" +"Send a file until EOF is reached by using high-performance " +":mod:`os.sendfile` and return the total number of bytes which were sent. " +"*file* must be a regular file object opened in binary mode. If " +":mod:`os.sendfile` is not available (e.g. Windows) or *file* is not a " +"regular file :meth:`send` will be used instead. *offset* tells from where to" +" start reading the file. If specified, *count* is the total number of bytes " +"to transmit as opposed to sending the file until EOF is reached. File " +"position is updated on return or also in case of error in which case " +":meth:`file.tell() ` can be used to figure out the number of" +" bytes which were sent. The socket must be of :const:`SOCK_STREAM` type. " +"Non-blocking sockets are not supported." +msgstr "" +"使用高性能的 :mod:`os.sendfile` 发送文件,直到达到文件的 EOF 为止,返回已发送的字节总数。*file* " +"必须是一个以二进制模式打开的常规文件对象。如果 :mod:`os.sendfile` 不可用(如 Windows)或 *file* 不是常规文件,将使用" +" :meth:`send` 代替。*offset* 指示从哪里开始读取文件。如果指定了 " +"*count*,它确定了要发送的字节总数,而不会持续发送直到达到文件的 " +"EOF。返回时或发生错误时,文件位置将更新,在这种情况下,:meth:`file.tell() ` " +"可用于确定已发送的字节数。套接字必须为 :const:`SOCK_STREAM` 类型。不支持非阻塞的套接字。" + +#: ../../library/socket.rst:1685 +msgid "" +"Set the :ref:`inheritable flag ` of the socket's file " +"descriptor or socket's handle." +msgstr "设置套接字文件描述符或套接字句柄的 :ref:`可继承标志 `。" + +#: ../../library/socket.rst:1693 +msgid "" +"Set blocking or non-blocking mode of the socket: if *flag* is false, the " +"socket is set to non-blocking, else to blocking mode." +msgstr "设置套接字为阻塞或非阻塞模式:如果 *flag* 为 false,则将套接字设置为非阻塞,否则设置为阻塞。" + +#: ../../library/socket.rst:1696 +msgid "" +"This method is a shorthand for certain :meth:`~socket.settimeout` calls:" +msgstr "本方法是某些 :meth:`~socket.settimeout` 调用的简写:" + +#: ../../library/socket.rst:1698 +msgid "``sock.setblocking(True)`` is equivalent to ``sock.settimeout(None)``" +msgstr "``sock.setblocking(True)`` 相当于 ``sock.settimeout(None)``" + +#: ../../library/socket.rst:1700 +msgid "``sock.setblocking(False)`` is equivalent to ``sock.settimeout(0.0)``" +msgstr "``sock.setblocking(False)`` 相当于 ``sock.settimeout(0.0)``" + +#: ../../library/socket.rst:1702 +msgid "" +"The method no longer applies :const:`SOCK_NONBLOCK` flag on " +":attr:`socket.type`." +msgstr "本方法不再对 :attr:`socket.type` 属性设置 :const:`SOCK_NONBLOCK` 标志。" + +#: ../../library/socket.rst:1709 +msgid "" +"Set a timeout on blocking socket operations. The *value* argument can be a " +"nonnegative floating point number expressing seconds, or ``None``. If a non-" +"zero value is given, subsequent socket operations will raise a " +":exc:`timeout` exception if the timeout period *value* has elapsed before " +"the operation has completed. If zero is given, the socket is put in non-" +"blocking mode. If ``None`` is given, the socket is put in blocking mode." +msgstr "" +"为阻塞套接字的操作设置超时。*value* 参数可以是非负浮点数,表示秒,也可以是 " +"``None``。如果赋为一个非零值,那么如果在操作完成前超过了超时时间 *value*,后续的套接字操作将抛出 :exc:`timeout` " +"异常。如果赋为 0,则套接字将处于非阻塞模式。如果指定为 ``None``,则套接字将处于阻塞模式。" + +#: ../../library/socket.rst:1716 +msgid "" +"For further information, please consult the :ref:`notes on socket timeouts " +"`." +msgstr "更多信息请查阅 :ref:`关于套接字超时的说明 `。" + +#: ../../library/socket.rst:1718 +msgid "" +"The method no longer toggles :const:`SOCK_NONBLOCK` flag on " +":attr:`socket.type`." +msgstr "本方法不再修改 :attr:`socket.type` 属性的 :const:`SOCK_NONBLOCK` 标志。" + +#: ../../library/socket.rst:1731 +msgid "" +"Set the value of the given socket option (see the Unix manual page " +":manpage:`setsockopt(2)`). The needed symbolic constants are defined in the" +" :mod:`socket` module (:const:`SO_\\*` etc.). The value can be an integer, " +"``None`` or a :term:`bytes-like object` representing a buffer. In the later " +"case it is up to the caller to ensure that the bytestring contains the " +"proper bits (see the optional built-in module :mod:`struct` for a way to " +"encode C structures as bytestrings). When *value* is set to ``None``, " +"*optlen* argument is required. It's equivalent to call :c:func:`setsockopt` " +"C function with ``optval=NULL`` and ``optlen=optlen``." +msgstr "" +"设置给定套接字选项的值(参阅 Unix 手册页 :manpage:`setsockopt(2)` )。所需的符号常量( :const:`SO_\\*` " +"等)已定义在本 :mod:`socket` 模块中。该值可以是整数、``None`` 或表示缓冲区的 :term:`字节类对象 `。在后一种情况下,由调用者确保字节串中包含正确的数据位(关于将 C 结构体编码为字节串的方法,请参阅可选的内置模块 " +":mod:`struct` )。当 *value* 设置为 ``None`` 时,必须设置 *optlen* 参数。这相当于调用 " +":c:func:`setsockopt` C 函数时使用了 ``optval=NULL`` 和 ``optlen=optlen`` 参数。" + +#: ../../library/socket.rst:1745 +msgid "setsockopt(level, optname, None, optlen: int) form added." +msgstr "添加了 setsockopt(level, optname, None, optlen: int) 调用形式。" + +#: ../../library/socket.rst:1751 +msgid "" +"Shut down one or both halves of the connection. If *how* is " +":const:`SHUT_RD`, further receives are disallowed. If *how* is " +":const:`SHUT_WR`, further sends are disallowed. If *how* is " +":const:`SHUT_RDWR`, further sends and receives are disallowed." +msgstr "" +"关闭一半或全部的连接。如果 *how* 为 :const:`SHUT_RD`,则后续不再允许接收。如果 *how* 为 " +":const:`SHUT_WR`,则后续不再允许发送。如果 *how* 为 :const:`SHUT_RDWR`,则后续的发送和接收都不允许。" + +#: ../../library/socket.rst:1759 +msgid "" +"Duplicate a socket and prepare it for sharing with a target process. The " +"target process must be provided with *process_id*. The resulting bytes " +"object can then be passed to the target process using some form of " +"interprocess communication and the socket can be recreated there using " +":func:`fromshare`. Once this method has been called, it is safe to close the" +" socket since the operating system has already duplicated it for the target " +"process." +msgstr "" +"复制套接字,并准备将其与目标进程共享。目标进程必须以 *process_id* " +"形式提供。然后可以利用某种形式的进程间通信,将返回的字节对象传递给目标进程,还可以使用 :func:`fromshare` " +"在新进程中重新创建套接字。一旦本方法调用完毕,就可以安全地将套接字关闭,因为操作系统已经为目标进程复制了该套接字。" + +#: ../../library/socket.rst:1771 +msgid "" +"Note that there are no methods :meth:`read` or :meth:`write`; use " +":meth:`~socket.recv` and :meth:`~socket.send` without *flags* argument " +"instead." +msgstr "" +"注意此处没有 :meth:`read` 或 :meth:`write` 方法,请使用不带 *flags* 参数的 " +":meth:`~socket.recv` 和 :meth:`~socket.send` 来替代。" + +#: ../../library/socket.rst:1774 +msgid "" +"Socket objects also have these (read-only) attributes that correspond to the" +" values given to the :class:`~socket.socket` constructor." +msgstr "套接字对象还具有以下(只读)属性,这些属性与传入 :class:`~socket.socket` 构造函数的值相对应。" + +#: ../../library/socket.rst:1780 +msgid "The socket family." +msgstr "套接字的协议簇。" + +#: ../../library/socket.rst:1785 +msgid "The socket type." +msgstr "套接字的类型。" + +#: ../../library/socket.rst:1790 +msgid "The socket protocol." +msgstr "套接字的协议。" + +#: ../../library/socket.rst:1797 +msgid "Notes on socket timeouts" +msgstr "关于套接字超时的说明" + +#: ../../library/socket.rst:1799 +msgid "" +"A socket object can be in one of three modes: blocking, non-blocking, or " +"timeout. Sockets are by default always created in blocking mode, but this " +"can be changed by calling :func:`setdefaulttimeout`." +msgstr "" +"一个套接字对象可以处于以下三种模式之一:阻塞、非阻塞或超时。套接字默认以阻塞模式创建,但是可以调用 :func:`setdefaulttimeout` " +"来更改。" + +#: ../../library/socket.rst:1803 +msgid "" +"In *blocking mode*, operations block until complete or the system returns an" +" error (such as connection timed out)." +msgstr "在 *blocking mode* (阻塞模式)中,操作将阻塞,直到操作完成或系统返回错误(如连接超时)。" + +#: ../../library/socket.rst:1806 +msgid "" +"In *non-blocking mode*, operations fail (with an error that is unfortunately" +" system-dependent) if they cannot be completed immediately: functions from " +"the :mod:`select` can be used to know when and whether a socket is available" +" for reading or writing." +msgstr "" +"在 *non-blocking mode* (非阻塞模式)中,如果操作无法立即完成,则操作将失败(不幸的是,不同系统返回的错误不同):位于 " +":mod:`select` 中的函数可用于了解套接字何时以及是否可以读取或写入。" + +#: ../../library/socket.rst:1811 +msgid "" +"In *timeout mode*, operations fail if they cannot be completed within the " +"timeout specified for the socket (they raise a :exc:`timeout` exception) or " +"if the system returns an error." +msgstr "" +"在 *timeout mode* (超时模式)下,如果无法在指定的超时内完成操作(抛出 :exc:`timeout` " +"异常),或如果系统返回错误,则操作将失败。" + +#: ../../library/socket.rst:1816 +msgid "" +"At the operating system level, sockets in *timeout mode* are internally set " +"in non-blocking mode. Also, the blocking and timeout modes are shared " +"between file descriptors and socket objects that refer to the same network " +"endpoint. This implementation detail can have visible consequences if e.g. " +"you decide to use the :meth:`~socket.fileno()` of a socket." +msgstr "" +"在操作系统层面上,*超时模式* " +"下的套接字在内部都设置为非阻塞模式。同时,阻塞和超时模式在文件描述符和套接字对象之间共享,这些描述符和对象均应指向同一个网络端点。如果,比如你决定使用套接字的" +" :meth:`~socket.fileno()`,这一实现细节可能导致明显的结果。" + +#: ../../library/socket.rst:1823 +msgid "Timeouts and the ``connect`` method" +msgstr "超时与 ``connect`` 方法" + +#: ../../library/socket.rst:1825 +msgid "" +"The :meth:`~socket.connect` operation is also subject to the timeout " +"setting, and in general it is recommended to call :meth:`~socket.settimeout`" +" before calling :meth:`~socket.connect` or pass a timeout parameter to " +":meth:`create_connection`. However, the system network stack may also " +"return a connection timeout error of its own regardless of any Python socket" +" timeout setting." +msgstr "" +":meth:`~socket.connect` 操作也受超时设置的约束,通常建议在调用 :meth:`~socket.connect` 之前调用 " +":meth:`~socket.settimeout`,或将超时参数直接传递给 :meth:`create_connection`。但是,无论 " +"Python 套接字超时设置如何,系统网络栈都有可能返回自带的连接超时错误。" + +#: ../../library/socket.rst:1833 +msgid "Timeouts and the ``accept`` method" +msgstr "超时与 ``accept`` 方法" + +#: ../../library/socket.rst:1835 +msgid "" +"If :func:`getdefaulttimeout` is not :const:`None`, sockets returned by the " +":meth:`~socket.accept` method inherit that timeout. Otherwise, the " +"behaviour depends on settings of the listening socket:" +msgstr "" +"如果 :func:`getdefaulttimeout` 的值不是 :const:`None`,则 :meth:`~socket.accept` " +"方法返回的套接字将继承该超时值。若是 None,返回的套接字行为取决于侦听套接字的设置:" + +#: ../../library/socket.rst:1839 +msgid "" +"if the listening socket is in *blocking mode* or in *timeout mode*, the " +"socket returned by :meth:`~socket.accept` is in *blocking mode*;" +msgstr "如果侦听套接字处于 *阻塞模式* 或 *超时模式*,则 :meth:`~socket.accept` 返回的套接字处于 *阻塞模式*;" + +#: ../../library/socket.rst:1842 +msgid "" +"if the listening socket is in *non-blocking mode*, whether the socket " +"returned by :meth:`~socket.accept` is in blocking or non-blocking mode is " +"operating system-dependent. If you want to ensure cross-platform behaviour," +" it is recommended you manually override this setting." +msgstr "" +"如果侦听套接字处于 *非阻塞模式*,那么 :meth:`~socket.accept` " +"返回的套接字是阻塞还是非阻塞取决于操作系统。如果要确保跨平台时的正确行为,建议手动覆盖此设置。" + +#: ../../library/socket.rst:1851 +msgid "Example" +msgstr "示例" + +#: ../../library/socket.rst:1853 +msgid "" +"Here are four minimal example programs using the TCP/IP protocol: a server " +"that echoes all data that it receives back (servicing only one client), and " +"a client using it. Note that a server must perform the sequence " +":func:`.socket`, :meth:`~socket.bind`, :meth:`~socket.listen`, " +":meth:`~socket.accept` (possibly repeating the :meth:`~socket.accept` to " +"service more than one client), while a client only needs the sequence " +":func:`.socket`, :meth:`~socket.connect`. Also note that the server does " +"not :meth:`~socket.sendall`/:meth:`~socket.recv` on the socket it is " +"listening on but on the new socket returned by :meth:`~socket.accept`." +msgstr "" +"以下是 4 个使用 TCP/IP " +"协议的最小示例程序:一台服务器,它将收到的所有数据原样返回(仅服务于一个客户端),还有一个使用该服务器的客户端。注意,服务器必须按序执行 " +":func:`.socket`, :meth:`~socket.bind`, :meth:`~socket.listen`, " +":meth:`~socket.accept` (可能需要重复执行 :meth:`~socket.accept` " +"以服务多个客户端),而客户端仅需要按序执行 :func:`.socket`, " +":meth:`~socket.connect`。还须注意,服务器不在侦听套接字上发送 " +":meth:`~socket.sendall`/:meth:`~socket.recv`,而是在 :meth:`~socket.accept` " +"返回的新套接字上发送。" + +#: ../../library/socket.rst:1863 +msgid "The first two examples support IPv4 only. ::" +msgstr "前两个示例仅支持 IPv4。 ::" + +#: ../../library/socket.rst:1894 +msgid "" +"The next two examples are identical to the above two, but support both IPv4 " +"and IPv6. The server side will listen to the first address family available " +"(it should listen to both instead). On most of IPv6-ready systems, IPv6 will" +" take precedence and the server may not accept IPv4 traffic. The client side" +" will try to connect to the all addresses returned as a result of the name " +"resolution, and sends traffic to the first one connected successfully. ::" +msgstr "" +"下两个例子与上两个很像,但是同时支持 IPv4 和 IPv6。 服务端将监听第一个可用的地址族(它本应同时监听两个)。 在大多数支持 IPv6 " +"的系统上,IPv6 将有优先权并且服务端可能不会接受 IPv4 流量。 " +"客户端将尝试连接到作为名称解析结果被返回的所有地址,并将流量发送给连接成功的第一个地址。 ::" + +#: ../../library/socket.rst:1966 +msgid "" +"The next example shows how to write a very simple network sniffer with raw " +"sockets on Windows. The example requires administrator privileges to modify " +"the interface::" +msgstr "下面的例子演示了如何在 Windows 上使用原始套接字编写一个非常简单的网络嗅探器。 这个例子需要管理员权限来修改接口::" + +#: ../../library/socket.rst:1991 +msgid "" +"The next example shows how to use the socket interface to communicate to a " +"CAN network using the raw socket protocol. To use CAN with the broadcast " +"manager protocol instead, open a socket with::" +msgstr "" +"下面的例子演示了如何使用 socket 接口与采用原始套接字协议的 CAN 网络进行通信。 要改为通过广播管理器协议来使用 " +"CAN,则要用以下方式打开一个 socket::" + +#: ../../library/socket.rst:1997 +msgid "" +"After binding (:const:`CAN_RAW`) or connecting (:const:`CAN_BCM`) the " +"socket, you can use the :meth:`socket.send`, and the :meth:`socket.recv` " +"operations (and their counterparts) on the socket object as usual." +msgstr "" +"在绑定 (:const:`CAN_RAW`) 或连接 (:const:`CAN_BCM`) socket 之后,你将可以在 socket 对象上正常使用" +" :meth:`socket.send` 以及 :meth:`socket.recv` 操作(及同类操作)。" + +#: ../../library/socket.rst:2001 +msgid "This last example might require special privileges::" +msgstr "最后一个例子可能需要特别的权限::" + +#: ../../library/socket.rst:2041 +msgid "" +"Running an example several times with too small delay between executions, " +"could lead to this error::" +msgstr "多次运行一个示例,且每次执行之间等待时间过短,可能导致这个错误::" + +#: ../../library/socket.rst:2046 +msgid "" +"This is because the previous execution has left the socket in a " +"``TIME_WAIT`` state, and can't be immediately reused." +msgstr "这是因为前一次运行使套接字处于 ``TIME_WAIT`` 状态,无法立即重用。" + +#: ../../library/socket.rst:2049 +msgid "" +"There is a :mod:`socket` flag to set, in order to prevent this, " +":data:`socket.SO_REUSEADDR`::" +msgstr "要防止这种情况,需要设置一个 :mod:`socket` 标志 :data:`socket.SO_REUSEADDR`::" + +#: ../../library/socket.rst:2056 +msgid "" +"the :data:`SO_REUSEADDR` flag tells the kernel to reuse a local socket in " +"``TIME_WAIT`` state, without waiting for its natural timeout to expire." +msgstr "" +":data:`SO_REUSEADDR` 标志告诉内核将处于 ``TIME_WAIT`` 状态的本地套接字重新使用,而不必等到固有的超时到期。" + +#: ../../library/socket.rst:2062 +msgid "" +"For an introduction to socket programming (in C), see the following papers:" +msgstr "关于套接字编程(C 语言)的介绍,请参阅以下文章:" + +#: ../../library/socket.rst:2064 +msgid "" +"*An Introductory 4.3BSD Interprocess Communication Tutorial*, by Stuart " +"Sechrest" +msgstr "" +"*An Introductory 4.3BSD Interprocess Communication Tutorial*,作者 Stuart " +"Sechrest" + +#: ../../library/socket.rst:2066 +msgid "" +"*An Advanced 4.3BSD Interprocess Communication Tutorial*, by Samuel J. " +"Leffler et al," +msgstr "" +"*An Advanced 4.3BSD Interprocess Communication Tutorial*,作者 Samuel J. " +"Leffler et al," + +#: ../../library/socket.rst:2069 +msgid "" +"both in the UNIX Programmer's Manual, Supplementary Documents 1 (sections " +"PS1:7 and PS1:8). The platform-specific reference material for the various " +"socket-related system calls are also a valuable source of information on the" +" details of socket semantics. For Unix, refer to the manual pages; for " +"Windows, see the WinSock (or Winsock 2) specification. For IPv6-ready APIs," +" readers may want to refer to :rfc:`3493` titled Basic Socket Interface " +"Extensions for IPv6." +msgstr "" +"两篇文章都在 UNIX 开发者手册,补充文档 1(第 PS1:7 和 PS1:8 " +"节)中。那些特定于平台的参考资料,它们包含与套接字有关的各种系统调用,也是套接字语义细节的宝贵信息来源。对于 Unix,请参考手册页。对于 " +"Windows,请参阅 WinSock(或 Winsock 2)规范。如果需要支持 IPv6 的 API,读者可能希望参考 " +":rfc:`3493`,标题为 Basic Socket Interface Extensions for IPv6。" diff --git a/library/socketserver.po b/library/socketserver.po new file mode 100644 index 000000000..b5044ed5b --- /dev/null +++ b/library/socketserver.po @@ -0,0 +1,661 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) 2001-2025, Python Software Foundation +# This file is distributed under the same license as the Python package. +# FIRST AUTHOR , YEAR. +# +# Translators: +# Freesand Leo , 2024 +# Rafael Fontenelle , 2025 +# +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: Python 3.9\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2025-02-07 16:40+0000\n" +"PO-Revision-Date: 2017-02-16 23:26+0000\n" +"Last-Translator: Rafael Fontenelle , 2025\n" +"Language-Team: Chinese (China) (https://app.transifex.com/python-doc/teams/5390/zh_CN/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: zh_CN\n" +"Plural-Forms: nplurals=1; plural=0;\n" + +#: ../../library/socketserver.rst:2 +msgid ":mod:`socketserver` --- A framework for network servers" +msgstr ":mod:`socketserver` --- 用于网络服务器的框架" + +#: ../../library/socketserver.rst:7 +msgid "**Source code:** :source:`Lib/socketserver.py`" +msgstr "**源代码:** :source:`Lib/socketserver.py`" + +#: ../../library/socketserver.rst:11 +msgid "" +"The :mod:`socketserver` module simplifies the task of writing network " +"servers." +msgstr ":mod:`socketserver` 模块简化了编写网络服务器的任务。" + +#: ../../library/socketserver.rst:13 +msgid "There are four basic concrete server classes:" +msgstr "该模块具有四个基础实体服务器类:" + +#: ../../library/socketserver.rst:18 +msgid "" +"This uses the Internet TCP protocol, which provides for continuous streams " +"of data between the client and server. If *bind_and_activate* is true, the " +"constructor automatically attempts to invoke :meth:`~BaseServer.server_bind`" +" and :meth:`~BaseServer.server_activate`. The other parameters are passed " +"to the :class:`BaseServer` base class." +msgstr "" + +#: ../../library/socketserver.rst:28 +msgid "" +"This uses datagrams, which are discrete packets of information that may " +"arrive out of order or be lost while in transit. The parameters are the " +"same as for :class:`TCPServer`." +msgstr "该类使用数据包,即一系列离散的信息分包,它们可能会无序地到达或在传输中丢失。 该类的形参与 :class:`TCPServer` 的相同。" + +#: ../../library/socketserver.rst:36 +msgid "" +"These more infrequently used classes are similar to the TCP and UDP classes," +" but use Unix domain sockets; they're not available on non-Unix platforms. " +"The parameters are the same as for :class:`TCPServer`." +msgstr "" +"这两个更常用的类与 TCP 和 UDP 类相似,但使用 Unix 域套接字;它们在非 Unix 系统平台上不可用。 它们的形参与 " +":class:`TCPServer` 的相同。" + +#: ../../library/socketserver.rst:42 +msgid "" +"These four classes process requests :dfn:`synchronously`; each request must " +"be completed before the next request can be started. This isn't suitable if" +" each request takes a long time to complete, because it requires a lot of " +"computation, or because it returns a lot of data which the client is slow to" +" process. The solution is to create a separate process or thread to handle " +"each request; the :class:`ForkingMixIn` and :class:`ThreadingMixIn` mix-in " +"classes can be used to support asynchronous behaviour." +msgstr "" +"这四个类会 :dfn:`同步地` 处理请求;每个请求必须完成才能开始下一个请求。 " +"这就不适用于每个请求要耗费很长时间来完成的情况,或者因为它需要大量的计算,又或者它返回了大量的数据而客户端处理起来很缓慢。 " +"解决方案是创建单独的进程或线程来处理每个请求;:class:`ForkingMixIn` 和 :class:`ThreadingMixIn` " +"混合类可以被用于支持异步行为。" + +#: ../../library/socketserver.rst:50 +msgid "" +"Creating a server requires several steps. First, you must create a request " +"handler class by subclassing the :class:`BaseRequestHandler` class and " +"overriding its :meth:`~BaseRequestHandler.handle` method; this method will " +"process incoming requests. Second, you must instantiate one of the server " +"classes, passing it the server's address and the request handler class. It " +"is recommended to use the server in a :keyword:`with` statement. Then call " +"the :meth:`~BaseServer.handle_request` or :meth:`~BaseServer.serve_forever` " +"method of the server object to process one or many requests. Finally, call " +":meth:`~BaseServer.server_close` to close the socket (unless you used a " +":keyword:`!with` statement)." +msgstr "" +"创建一个服务器需要分几个步骤进行。 首先,你必须通过子类化 :class:`BaseRequestHandler` 类并重载其 " +":meth:`~BaseRequestHandler.handle` 方法来创建一个请求处理器类;这个方法将处理传入的请求。 " +"其次,你必须实例化某个服务器类,将服务器地址和请求处理器类传给它。 建议在 :keyword:`with` 语句中使用该服务器。 然后再调用服务器对象的" +" :meth:`~BaseServer.handle_request` 或 :meth:`~BaseServer.serve_forever` " +"方法来处理一个或多个请求。 最后,调用 :meth:`~BaseServer.server_close` 来关闭套接字(除非你使用了 " +":keyword:`!with` 语句)。" + +#: ../../library/socketserver.rst:62 +msgid "" +"When inheriting from :class:`ThreadingMixIn` for threaded connection " +"behavior, you should explicitly declare how you want your threads to behave " +"on an abrupt shutdown. The :class:`ThreadingMixIn` class defines an " +"attribute *daemon_threads*, which indicates whether or not the server should" +" wait for thread termination. You should set the flag explicitly if you " +"would like threads to behave autonomously; the default is :const:`False`, " +"meaning that Python will not exit until all threads created by " +":class:`ThreadingMixIn` have exited." +msgstr "" +"当从 :class:`ThreadingMixIn` 继承线程连接行为时,你应当显式地声明你希望在突然关机时你的线程采取何种行为。 " +":class:`ThreadingMixIn` 类定义了一个属性 *daemon_threads*,它指明服务器是否应当等待线程终止。 " +"如果你希望线程能自主行动你应当显式地设置这个旗标;默认值为 :const:`False`,表示 Python 将不会在 " +":class:`ThreadingMixIn` 所创建的所有线程都退出之前退出。" + +#: ../../library/socketserver.rst:71 +msgid "" +"Server classes have the same external methods and attributes, no matter what" +" network protocol they use." +msgstr "服务器类具有同样的外部方法和属性,无论它们使用哪种网络协议。" + +#: ../../library/socketserver.rst:76 +msgid "Server Creation Notes" +msgstr "服务器创建的说明" + +#: ../../library/socketserver.rst:78 +msgid "" +"There are five classes in an inheritance diagram, four of which represent " +"synchronous servers of four types::" +msgstr "在继承图中有五个类,其中四个代表四种类型的同步服务器::" + +#: ../../library/socketserver.rst:95 +msgid "" +"Note that :class:`UnixDatagramServer` derives from :class:`UDPServer`, not " +"from :class:`UnixStreamServer` --- the only difference between an IP and a " +"Unix stream server is the address family, which is simply repeated in both " +"Unix server classes." +msgstr "" +"请注意 :class:`UnixDatagramServer` 派生自 :class:`UDPServer`,而不是 " +":class:`UnixStreamServer` --- IP 和 Unix 流服务器的唯一区别是地址族,它会在两种 Unix 服务器类中简单地重复。" + +#: ../../library/socketserver.rst:104 +msgid "" +"Forking and threading versions of each type of server can be created using " +"these mix-in classes. For instance, :class:`ThreadingUDPServer` is created " +"as follows::" +msgstr "" +"每种服务器类型的分叉和线程版本都可以使用这些混合类来创建。 例如,:class:`ThreadingUDPServer` 的创建方式如下::" + +#: ../../library/socketserver.rst:111 +msgid "" +"The mix-in class comes first, since it overrides a method defined in " +":class:`UDPServer`. Setting the various attributes also changes the " +"behavior of the underlying server mechanism." +msgstr "混合类先出现,因为它重载了 :class:`UDPServer` 中定义的一个方法。 设置各种属性也会改变下层服务器机制的行为。" + +#: ../../library/socketserver.rst:115 +msgid "" +":class:`ForkingMixIn` and the Forking classes mentioned below are only " +"available on POSIX platforms that support :func:`~os.fork`." +msgstr ":class:`ForkingMixIn` 和下文提及的分叉类仅在支持 :func:`~os.fork` 的 POSIX 系统平台上可用。" + +#: ../../library/socketserver.rst:118 +msgid "" +":meth:`socketserver.ForkingMixIn.server_close` waits until all child " +"processes complete, except if " +":attr:`socketserver.ForkingMixIn.block_on_close` attribute is false." +msgstr "" +":meth:`socketserver.ForkingMixIn.server_close` 会等待直到所有子进程完成,除非 " +":attr:`socketserver.ForkingMixIn.block_on_close` 属性为假值。" + +#: ../../library/socketserver.rst:122 +msgid "" +":meth:`socketserver.ThreadingMixIn.server_close` waits until all non-daemon " +"threads complete, except if " +":attr:`socketserver.ThreadingMixIn.block_on_close` attribute is false. Use " +"daemonic threads by setting :data:`ThreadingMixIn.daemon_threads` to " +"``True`` to not wait until threads complete." +msgstr "" +":meth:`socketserver.ThreadingMixIn.server_close` 会等待直到所有非守护类线程完成,除非 " +":attr:`socketserver.ThreadingMixIn.block_on_close` 属性为假值。 请将 " +":data:`ThreadingMixIn.daemon_threads` 设为 ``True`` 来使用守护类线程以便不等待线完成。" + +#: ../../library/socketserver.rst:131 +msgid "" +":meth:`socketserver.ForkingMixIn.server_close` and " +":meth:`socketserver.ThreadingMixIn.server_close` now waits until all child " +"processes and non-daemonic threads complete. Add a new " +":attr:`socketserver.ForkingMixIn.block_on_close` class attribute to opt-in " +"for the pre-3.7 behaviour." +msgstr "" +":meth:`socketserver.ForkingMixIn.server_close` 和 " +":meth:`socketserver.ThreadingMixIn.server_close` 现在会等待直到所有子进程和非守护类线程完成。 " +"请新增一个 :attr:`socketserver.ForkingMixIn.block_on_close` 类属性来选择 3.7 版之前的行为。" + +#: ../../library/socketserver.rst:143 +msgid "These classes are pre-defined using the mix-in classes." +msgstr "这些类都是使用混合类来预定义的。" + +#: ../../library/socketserver.rst:146 +msgid "" +"To implement a service, you must derive a class from " +":class:`BaseRequestHandler` and redefine its " +":meth:`~BaseRequestHandler.handle` method. You can then run various versions" +" of the service by combining one of the server classes with your request " +"handler class. The request handler class must be different for datagram or " +"stream services. This can be hidden by using the handler subclasses " +":class:`StreamRequestHandler` or :class:`DatagramRequestHandler`." +msgstr "" +"要实现一个服务,你必须从 :class:`BaseRequestHandler` 派生一个类并重定义其 " +":meth:`~BaseRequestHandler.handle` 方法。 然后你可以通过组合某种服务器类型与你的请求处理器类来运行各种版本的服务。 " +"请求处理器类对于数据报和流服务必须是不相同的。 这可以通过使用处理器子类 :class:`StreamRequestHandler` 或 " +":class:`DatagramRequestHandler` 来隐藏。" + +#: ../../library/socketserver.rst:154 +msgid "" +"Of course, you still have to use your head! For instance, it makes no sense" +" to use a forking server if the service contains state in memory that can be" +" modified by different requests, since the modifications in the child " +"process would never reach the initial state kept in the parent process and " +"passed to each child. In this case, you can use a threading server, but you" +" will probably have to use locks to protect the integrity of the shared " +"data." +msgstr "" +"当然,你仍然需要动点脑筋! " +"举例来说,如果服务包含可能被不同请求所修改的内存状态则使用分叉服务器是没有意义的,因为在子进程中的修改将永远不会触及保存在父进程中的初始状态并传递到各个子进程。" +" 在这种情况下,你可以使用线程服务器,但你可能必须使用锁来保护共享数据的一致性。" + +#: ../../library/socketserver.rst:161 +msgid "" +"On the other hand, if you are building an HTTP server where all data is " +"stored externally (for instance, in the file system), a synchronous class " +"will essentially render the service \"deaf\" while one request is being " +"handled -- which may be for a very long time if a client is slow to receive " +"all the data it has requested. Here a threading or forking server is " +"appropriate." +msgstr "" +"另一方面,如果你是在编写一个所有数据保存在外部(例如文件系统)的 HTTP 服务器,同步类实际上将在正在处理某个请求的时候“失聪” -- " +"如果某个客户端在接收它所请求的所有数据时很缓慢这可能会是非常长的时间。 这时线程或分叉服务器会更为适用。" + +#: ../../library/socketserver.rst:167 +msgid "" +"In some cases, it may be appropriate to process part of a request " +"synchronously, but to finish processing in a forked child depending on the " +"request data. This can be implemented by using a synchronous server and " +"doing an explicit fork in the request handler class " +":meth:`~BaseRequestHandler.handle` method." +msgstr "" +"在某些情况下,合适的做法是同步地处理请求的一部分,但根据请求数据在分叉的子进程中完成处理。 这可以通过使用一个同步服务器并在请求处理器类 " +":meth:`~BaseRequestHandler.handle` 中进行显式分叉来实现。" + +#: ../../library/socketserver.rst:172 +msgid "" +"Another approach to handling multiple simultaneous requests in an " +"environment that supports neither threads nor :func:`~os.fork` (or where " +"these are too expensive or inappropriate for the service) is to maintain an " +"explicit table of partially finished requests and to use :mod:`selectors` to" +" decide which request to work on next (or whether to handle a new incoming " +"request). This is particularly important for stream services where each " +"client can potentially be connected for a long time (if threads or " +"subprocesses cannot be used). See :mod:`asyncore` for another way to manage" +" this." +msgstr "" +"还有一种可以在既不支持线程也不支持 :func:`~os.fork` " +"的环境(或者对于本服务来说这两者开销过大或是不适用)中处理多个同时请求的方式是维护一个显式的部分完成的请求表并使用 :mod:`selectors` " +"来决定接下来要处理哪个请求(或者是否要处理一个新传入的请求)。 " +"这对于流服务来说特别重要,因为每个客户端可能会连接很长的时间(如果不能使用线程或子进程)。 请参阅 :mod:`asyncore` " +"来了解另一种管理方式。" + +#: ../../library/socketserver.rst:186 +msgid "Server Objects" +msgstr "Server 对象" + +#: ../../library/socketserver.rst:190 +msgid "" +"This is the superclass of all Server objects in the module. It defines the " +"interface, given below, but does not implement most of the methods, which is" +" done in subclasses. The two parameters are stored in the respective " +":attr:`server_address` and :attr:`RequestHandlerClass` attributes." +msgstr "" +"这是本模块中所有 Server 对象的超类。 它定义了下文给出的接口,但没有实现大部分的方法,它们应在子类中实现。 两个形参存储在对应的 " +":attr:`server_address` 和 :attr:`RequestHandlerClass` 属性中。" + +#: ../../library/socketserver.rst:198 +msgid "" +"Return an integer file descriptor for the socket on which the server is " +"listening. This function is most commonly passed to :mod:`selectors`, to " +"allow monitoring multiple servers in the same process." +msgstr "" +"返回服务器正在监听的套接字的以整数表示的文件描述符。 此函数最常被传递给 :mod:`selectors`,以允许在同一进程中监控多个服务器。" + +#: ../../library/socketserver.rst:205 +msgid "" +"Process a single request. This function calls the following methods in " +"order: :meth:`get_request`, :meth:`verify_request`, and " +":meth:`process_request`. If the user-provided " +":meth:`~BaseRequestHandler.handle` method of the handler class raises an " +"exception, the server's :meth:`handle_error` method will be called. If no " +"request is received within :attr:`timeout` seconds, :meth:`handle_timeout` " +"will be called and :meth:`handle_request` will return." +msgstr "" +"处理单个请求。 此函数会依次调用下列方法: :meth:`get_request`, :meth:`verify_request` 和 " +":meth:`process_request`。 如果用户提供的处理器类的 :meth:`~BaseRequestHandler.handle` " +"方法引发了异常,则将调用服务器的 :meth:`handle_error` 方法。 如果在 :attr:`timeout` 秒内未接收到请求,将会调用 " +":meth:`handle_timeout` 并将返回 :meth:`handle_request`。" + +#: ../../library/socketserver.rst:217 +msgid "" +"Handle requests until an explicit :meth:`shutdown` request. Poll for " +"shutdown every *poll_interval* seconds. Ignores the :attr:`timeout` " +"attribute. It also calls :meth:`service_actions`, which may be used by a " +"subclass or mixin to provide actions specific to a given service. For " +"example, the :class:`ForkingMixIn` class uses :meth:`service_actions` to " +"clean up zombie child processes." +msgstr "" +"对请求进行处理直至收到显式的 :meth:`shutdown` 请求。 每隔 *poll_interval* 秒对 shutdown 进行轮询。 忽略 " +":attr:`timeout` 属性。 它还会调用 :meth:`service_actions`,这可被子类或混合类用来提供某个给定服务的专属操作。 " +"例如,:class:`ForkingMixIn` 类使用 :meth:`service_actions` 来清理僵尸子进程。" + +#: ../../library/socketserver.rst:225 +msgid "Added ``service_actions`` call to the ``serve_forever`` method." +msgstr "将 ``service_actions`` 调用添加到 ``serve_forever`` 方法。" + +#: ../../library/socketserver.rst:231 +msgid "" +"This is called in the :meth:`serve_forever` loop. This method can be " +"overridden by subclasses or mixin classes to perform actions specific to a " +"given service, such as cleanup actions." +msgstr "" +"此方法会在 the :meth:`serve_forever` 循环中被调用。 此方法可被子类或混合类所重载以执行某个给定服务的专属操作,例如清理操作。" + +#: ../../library/socketserver.rst:239 +msgid "" +"Tell the :meth:`serve_forever` loop to stop and wait until it does. " +":meth:`shutdown` must be called while :meth:`serve_forever` is running in a " +"different thread otherwise it will deadlock." +msgstr "" +"通知 :meth:`serve_forever` 循环停止并等待它完成。 :meth:`shutdown` 必须在 " +":meth:`serve_forever` 运行于不同线程时被调用否则它将发生死锁。" + +#: ../../library/socketserver.rst:246 +msgid "Clean up the server. May be overridden." +msgstr "清理服务器。 此方法可被重载。" + +#: ../../library/socketserver.rst:251 +msgid "" +"The family of protocols to which the server's socket belongs. Common " +"examples are :const:`socket.AF_INET` and :const:`socket.AF_UNIX`." +msgstr "" +"服务器套接字所属的协议族。 常见的例子有 :const:`socket.AF_INET` 和 :const:`socket.AF_UNIX`。" + +#: ../../library/socketserver.rst:257 +msgid "" +"The user-provided request handler class; an instance of this class is " +"created for each request." +msgstr "用户提供的请求处理器类;将为每个请求创建该类的实例。" + +#: ../../library/socketserver.rst:263 +msgid "" +"The address on which the server is listening. The format of addresses " +"varies depending on the protocol family; see the documentation for the " +":mod:`socket` module for details. For Internet protocols, this is a tuple " +"containing a string giving the address, and an integer port number: " +"``('127.0.0.1', 80)``, for example." +msgstr "" + +#: ../../library/socketserver.rst:272 +msgid "" +"The socket object on which the server will listen for incoming requests." +msgstr "将由服务器用于监听入站请求的套接字对象。" + +#: ../../library/socketserver.rst:275 +msgid "The server classes support the following class variables:" +msgstr "服务器类支持下列类变量:" + +#: ../../library/socketserver.rst:281 +msgid "" +"Whether the server will allow the reuse of an address. This defaults to " +":const:`False`, and can be set in subclasses to change the policy." +msgstr "服务器是否要允许地址的重用。 默认值为 :const:`False`,并可在子类中设置以改变策略。" + +#: ../../library/socketserver.rst:287 +msgid "" +"The size of the request queue. If it takes a long time to process a single " +"request, any requests that arrive while the server is busy are placed into a" +" queue, up to :attr:`request_queue_size` requests. Once the queue is full, " +"further requests from clients will get a \"Connection denied\" error. The " +"default value is usually 5, but this can be overridden by subclasses." +msgstr "" +"请求队列的长度。 如果处理单个请求要花费很长的时间,则当服务器正忙时到达的任何请求都会被加入队列,最多加入 " +":attr:`request_queue_size` 个请求。 一旦队列被加满,来自客户端的更多请求将收到 \"Connection denied\" " +"错误。 默认值为 5,但可在子类中重载。" + +#: ../../library/socketserver.rst:296 +msgid "" +"The type of socket used by the server; :const:`socket.SOCK_STREAM` and " +":const:`socket.SOCK_DGRAM` are two common values." +msgstr "" +"服务器使用的套接字类型;常见的有 :const:`socket.SOCK_STREAM` 和 :const:`socket.SOCK_DGRAM` " +"这两个值。" + +#: ../../library/socketserver.rst:302 +msgid "" +"Timeout duration, measured in seconds, or :const:`None` if no timeout is " +"desired. If :meth:`handle_request` receives no incoming requests within the" +" timeout period, the :meth:`handle_timeout` method is called." +msgstr "" +"超时限制,以秒数表示,或者如果不限制超时则为 :const:`None`。 如果在超时限制期间没有收到 " +":meth:`handle_request`,则会调用 :meth:`handle_timeout` 方法。" + +#: ../../library/socketserver.rst:307 +msgid "" +"There are various server methods that can be overridden by subclasses of " +"base server classes like :class:`TCPServer`; these methods aren't useful to " +"external users of the server object." +msgstr "有多个服务器方法可被服务器基类的子类例如 :class:`TCPServer` 所重载;这些方法对服务器对象的外部用户来说并无用处。" + +#: ../../library/socketserver.rst:316 +msgid "" +"Actually processes the request by instantiating :attr:`RequestHandlerClass` " +"and calling its :meth:`~BaseRequestHandler.handle` method." +msgstr "" +"通过实例化 :attr:`RequestHandlerClass` 并调用其 :meth:`~BaseRequestHandler.handle` " +"方法来实际处理请求。" + +#: ../../library/socketserver.rst:322 +msgid "" +"Must accept a request from the socket, and return a 2-tuple containing the " +"*new* socket object to be used to communicate with the client, and the " +"client's address." +msgstr "必须接受来自套接字的请求,并返回一个 2 元组,其中包含用来与客户端通信的 *new* 套接字对象,以及客户端的地址。" + +#: ../../library/socketserver.rst:329 +msgid "" +"This function is called if the :meth:`~BaseRequestHandler.handle` method of " +"a :attr:`RequestHandlerClass` instance raises an exception. The default " +"action is to print the traceback to standard error and continue handling " +"further requests." +msgstr "" +"此函数会在 :attr:`RequestHandlerClass` 实例的 :meth:`~BaseRequestHandler.handle` " +"方法引发异常时被调用。 默认行为是将回溯信息打印到标准错误并继续处理其他请求。" + +#: ../../library/socketserver.rst:334 +msgid "" +"Now only called for exceptions derived from the :exc:`Exception` class." +msgstr "现在只针对派生自 :exc:`Exception` 类的异常调用此方法。" + +#: ../../library/socketserver.rst:341 +msgid "" +"This function is called when the :attr:`timeout` attribute has been set to a" +" value other than :const:`None` and the timeout period has passed with no " +"requests being received. The default action for forking servers is to " +"collect the status of any child processes that have exited, while in " +"threading servers this method does nothing." +msgstr "" +"此函数会在 :attr:`timeout` 属性被设为 :const:`None` 以外的值并且在超出时限之后仍未收到请求时被调用。 " +"分叉服务器的默认行为是收集任何已退出的子进程状态,而在线程服务器中此方法则不做任何操作。" + +#: ../../library/socketserver.rst:350 +msgid "" +"Calls :meth:`finish_request` to create an instance of the " +":attr:`RequestHandlerClass`. If desired, this function can create a new " +"process or thread to handle the request; the :class:`ForkingMixIn` and " +":class:`ThreadingMixIn` classes do this." +msgstr "" +"调用 :meth:`finish_request` 来创建 :attr:`RequestHandlerClass` 的实例。 " +"如果需要,此函数可创建一个新的进程或线程来处理请求;:class:`ForkingMixIn` 和 :class:`ThreadingMixIn` " +"类能完成此任务。" + +#: ../../library/socketserver.rst:362 +msgid "" +"Called by the server's constructor to activate the server. The default " +"behavior for a TCP server just invokes :meth:`~socket.socket.listen` on the " +"server's socket. May be overridden." +msgstr "" +"由服务器的构造器调用以激活服务器。 TCP 服务器的默认行为只是在服务器的套接字上唤起 :meth:`~socket.socket.listen`。 " +"可以被重载。" + +#: ../../library/socketserver.rst:369 +msgid "" +"Called by the server's constructor to bind the socket to the desired " +"address. May be overridden." +msgstr "由服务器的构造器调用以将套接字绑定到所需的地址。 可以被重载。" + +#: ../../library/socketserver.rst:375 +msgid "" +"Must return a Boolean value; if the value is :const:`True`, the request will" +" be processed, and if it's :const:`False`, the request will be denied. This" +" function can be overridden to implement access controls for a server. The " +"default implementation always returns :const:`True`." +msgstr "" +"必须返回一个布尔值;如果值为 :const:`True`,请求将被处理。 而如果值为 :const:`False`,请求将被拒绝。 " +"此函数可被重载以实现服务器的访问控制。 默认实现总是返回 :const:`True`。" + +#: ../../library/socketserver.rst:381 +msgid "" +"Support for the :term:`context manager` protocol was added. Exiting the " +"context manager is equivalent to calling :meth:`server_close`." +msgstr "" +"添加了对 :term:`context manager` 协议的支持。 退出上下文管理器与调用 :meth:`server_close` 等效。" + +#: ../../library/socketserver.rst:387 +msgid "Request Handler Objects" +msgstr "请求处理器对象" + +#: ../../library/socketserver.rst:391 +msgid "" +"This is the superclass of all request handler objects. It defines the " +"interface, given below. A concrete request handler subclass must define a " +"new :meth:`handle` method, and can override any of the other methods. A new" +" instance of the subclass is created for each request." +msgstr "" +"这是所有请求处理器对象的超类。 它定义了下文列出的接口。 一个实体请求处理器子类必须定义新的 :meth:`handle` 方法,并可重载任何其他方法。" +" 对于每个请求都会创建一个新的子类的实例。" + +#: ../../library/socketserver.rst:400 +msgid "" +"Called before the :meth:`handle` method to perform any initialization " +"actions required. The default implementation does nothing." +msgstr "会在 :meth:`handle` 方法之前被调用以执行任何必要的初始化操作。 默认实现不执行任何操作。" + +#: ../../library/socketserver.rst:406 +msgid "" +"This function must do all the work required to service a request. The " +"default implementation does nothing. Several instance attributes are " +"available to it; the request is available as :attr:`self.request`; the " +"client address as :attr:`self.client_address`; and the server instance as " +":attr:`self.server`, in case it needs access to per-server information." +msgstr "" +"此函数必须执行为请求提供服务所需的全部操作。 默认实现不执行任何操作。 它有几个可用的实例属性;请求为 " +":attr:`self.request`;客户端地址为 :attr:`self.client_address`;服务器实例为 " +":attr:`self.server`,如果它需要访问特定服务器信息的话。" + +#: ../../library/socketserver.rst:412 +msgid "" +"The type of :attr:`self.request` is different for datagram or stream " +"services. For stream services, :attr:`self.request` is a socket object; for" +" datagram services, :attr:`self.request` is a pair of string and socket." +msgstr "" +"针对数据报或流服务的 :attr:`self.request` 类型是不同的。 对于流服务,:attr:`self.request` " +"是一个套接字对象;对于数据报服务,:attr:`self.request` 是一对字符串与套接字。" + +#: ../../library/socketserver.rst:419 +msgid "" +"Called after the :meth:`handle` method to perform any clean-up actions " +"required. The default implementation does nothing. If :meth:`setup` raises" +" an exception, this function will not be called." +msgstr "" +"在 :meth:`handle` 方法之后调用以执行任何需要的清理操作。 默认实现不执行任何操作。 如果 :meth:`setup` " +"引发了异常,此函数将不会被调用。" + +#: ../../library/socketserver.rst:427 +msgid "" +"These :class:`BaseRequestHandler` subclasses override the " +":meth:`~BaseRequestHandler.setup` and :meth:`~BaseRequestHandler.finish` " +"methods, and provide :attr:`self.rfile` and :attr:`self.wfile` attributes. " +"The :attr:`self.rfile` and :attr:`self.wfile` attributes can be read or " +"written, respectively, to get the request data or return data to the client." +msgstr "" +":class:`BaseRequestHandler` 子类重载了 :meth:`~BaseRequestHandler.setup` 和 " +":meth:`~BaseRequestHandler.finish` 方法,并提供了 :attr:`self.rfile` 和 " +":attr:`self.wfile` 属性。 :attr:`self.rfile` 和 :attr:`self.wfile` " +"属性可以被分别读取或写入,以获取请求数据或将数据返回给客户端。" + +#: ../../library/socketserver.rst:434 +msgid "" +"The :attr:`rfile` attributes of both classes support the " +":class:`io.BufferedIOBase` readable interface, and " +":attr:`DatagramRequestHandler.wfile` supports the :class:`io.BufferedIOBase`" +" writable interface." +msgstr "" +"这两个类的 :attr:`rfile` 属性都支持 :class:`io.BufferedIOBase` 可读接口,并且 " +":attr:`DatagramRequestHandler.wfile` 还支持 :class:`io.BufferedIOBase` 可写接口。" + +#: ../../library/socketserver.rst:439 +msgid "" +":attr:`StreamRequestHandler.wfile` also supports the " +":class:`io.BufferedIOBase` writable interface." +msgstr "" +":attr:`StreamRequestHandler.wfile` 也支持 :class:`io.BufferedIOBase` 可写接口。" + +#: ../../library/socketserver.rst:445 +msgid "Examples" +msgstr "例子" + +#: ../../library/socketserver.rst:448 +msgid ":class:`socketserver.TCPServer` Example" +msgstr ":class:`socketserver.TCPServer` 示例" + +#: ../../library/socketserver.rst:450 ../../library/socketserver.rst:549 +msgid "This is the server side::" +msgstr "以下是服务端::" + +#: ../../library/socketserver.rst:480 +msgid "" +"An alternative request handler class that makes use of streams (file-like " +"objects that simplify communication by providing the standard file " +"interface)::" +msgstr "一个使用流(通过提供标准文件接口来简化通信的文件型对象)的替代请求处理器类::" + +#: ../../library/socketserver.rst:495 +msgid "" +"The difference is that the ``readline()`` call in the second handler will " +"call ``recv()`` multiple times until it encounters a newline character, " +"while the single ``recv()`` call in the first handler will just return what " +"has been sent from the client in one ``sendall()`` call." +msgstr "" +"区别在于第二个处理器的 ``readline()`` 调用将多次调用 ``recv()`` 直至遇到一个换行符,而第一个处理器的单次 " +"``recv()`` 调用只是返回在一次 ``sendall()`` 调用中由客户端发送的内容。" + +#: ../../library/socketserver.rst:501 ../../library/socketserver.rst:573 +msgid "This is the client side::" +msgstr "以下是客户端::" + +#: ../../library/socketserver.rst:522 ../../library/socketserver.rst:648 +msgid "The output of the example should look something like this:" +msgstr "这个示例程序的输出应该是像这样的:" + +#: ../../library/socketserver.rst:524 +msgid "Server:" +msgstr "服务器:" + +#: ../../library/socketserver.rst:534 +msgid "Client:" +msgstr "客户端:" + +#: ../../library/socketserver.rst:547 +msgid ":class:`socketserver.UDPServer` Example" +msgstr ":class:`socketserver.UDPServer` 示例" + +#: ../../library/socketserver.rst:592 +msgid "" +"The output of the example should look exactly like for the TCP server " +"example." +msgstr "这个示例程序的输出应该是与 TCP 服务器示例相一致的。" + +#: ../../library/socketserver.rst:596 +msgid "Asynchronous Mixins" +msgstr "异步混合类" + +#: ../../library/socketserver.rst:598 +msgid "" +"To build asynchronous handlers, use the :class:`ThreadingMixIn` and " +":class:`ForkingMixIn` classes." +msgstr "要构建异步处理器,请使用 :class:`ThreadingMixIn` 和 :class:`ForkingMixIn` 类。" + +#: ../../library/socketserver.rst:601 +msgid "An example for the :class:`ThreadingMixIn` class::" +msgstr ":class:`ThreadingMixIn` 类的示例::" + +#: ../../library/socketserver.rst:659 +msgid "" +"The :class:`ForkingMixIn` class is used in the same way, except that the " +"server will spawn a new process for each request. Available only on POSIX " +"platforms that support :func:`~os.fork`." +msgstr "" +":class:`ForkingMixIn` 类的使用方式是相同的,区别在于服务器将为每个请求产生一个新的进程。 仅在支持 " +":func:`~os.fork` 的 POSIX 系统平台上可用。" diff --git a/library/spwd.po b/library/spwd.po new file mode 100644 index 000000000..628dbdd06 --- /dev/null +++ b/library/spwd.po @@ -0,0 +1,221 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) 2001-2022, Python Software Foundation +# This file is distributed under the same license as the Python package. +# FIRST AUTHOR , YEAR. +# +# Translators: +# 操旭 , 2017 +# cdarlint , 2019 +# 汇民 王 , 2019 +# ppcfish , 2019 +# Alpha Du , 2020 +# Dai Xu , 2021 +# Freesand Leo , 2022 +# +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: Python 3.9\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2022-11-04 14:34+0000\n" +"PO-Revision-Date: 2017-02-16 23:27+0000\n" +"Last-Translator: Freesand Leo , 2022\n" +"Language-Team: Chinese (China) (https://www.transifex.com/python-doc/teams/5390/zh_CN/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: zh_CN\n" +"Plural-Forms: nplurals=1; plural=0;\n" + +#: ../../library/spwd.rst:2 +msgid ":mod:`spwd` --- The shadow password database" +msgstr ":mod:`spwd` —— shadow 密码库" + +#: ../../library/spwd.rst:9 +msgid "" +"The :mod:`spwd` module is deprecated (see :pep:`PEP 594 <594#spwd>` for " +"details and alternatives)." +msgstr ":mod:`spwd` 模块已被弃用(请参阅 :pep:`PEP 594 <594#spwd>` 了解详情及其替代品)。" + +#: ../../library/spwd.rst:15 +msgid "" +"This module provides access to the Unix shadow password database. It is " +"available on various Unix versions." +msgstr "该模块提供对 Unix shadow 密码库的访问能力。可用于各种 Unix 版本。" + +#: ../../library/spwd.rst:18 +msgid "" +"You must have enough privileges to access the shadow password database (this" +" usually means you have to be root)." +msgstr "访问 shadow 密码数据库须拥有足够的权限(通常意味着必须采用 root 账户)。" + +#: ../../library/spwd.rst:21 +msgid "" +"Shadow password database entries are reported as a tuple-like object, whose " +"attributes correspond to the members of the ``spwd`` structure (Attribute " +"field below, see ````):" +msgstr "" +"shadow 密码库的每条数据均表示为一个类似元组的对象,其属性对应着``spwd`` 结构的成员(下面列出了各属性字段,参见 ` " +"````)。" + +#: ../../library/spwd.rst:26 +msgid "Index" +msgstr "索引" + +#: ../../library/spwd.rst:26 +msgid "Attribute" +msgstr "属性" + +#: ../../library/spwd.rst:26 +msgid "Meaning" +msgstr "意义" + +#: ../../library/spwd.rst:28 +msgid "0" +msgstr "0" + +#: ../../library/spwd.rst:28 +msgid "``sp_namp``" +msgstr "``sp_namp``" + +#: ../../library/spwd.rst:28 +msgid "Login name" +msgstr "登录名" + +#: ../../library/spwd.rst:30 +msgid "1" +msgstr "1" + +#: ../../library/spwd.rst:30 +msgid "``sp_pwdp``" +msgstr "``sp_pwdp``" + +#: ../../library/spwd.rst:30 +msgid "Encrypted password" +msgstr "加密后的密码" + +#: ../../library/spwd.rst:32 +msgid "2" +msgstr "2" + +#: ../../library/spwd.rst:32 +msgid "``sp_lstchg``" +msgstr "``sp_lstchg``" + +#: ../../library/spwd.rst:32 +msgid "Date of last change" +msgstr "最后修改日期" + +#: ../../library/spwd.rst:34 +msgid "3" +msgstr "3" + +#: ../../library/spwd.rst:34 +msgid "``sp_min``" +msgstr "``sp_min``" + +#: ../../library/spwd.rst:34 +msgid "Minimal number of days between changes" +msgstr "两次修改间隔的最小天数" + +#: ../../library/spwd.rst:37 +msgid "4" +msgstr "4" + +#: ../../library/spwd.rst:37 +msgid "``sp_max``" +msgstr "``sp_max``" + +#: ../../library/spwd.rst:37 +msgid "Maximum number of days between changes" +msgstr "两次修改间隔的最大天数" + +#: ../../library/spwd.rst:40 +msgid "5" +msgstr "5" + +#: ../../library/spwd.rst:40 +msgid "``sp_warn``" +msgstr "``sp_warn``" + +#: ../../library/spwd.rst:40 +msgid "Number of days before password expires to warn user about it" +msgstr "提前警告用户密码过期的天数" + +#: ../../library/spwd.rst:43 +msgid "6" +msgstr "6" + +#: ../../library/spwd.rst:43 +msgid "``sp_inact``" +msgstr "``sp_inact``" + +#: ../../library/spwd.rst:43 +msgid "Number of days after password expires until account is disabled" +msgstr "密码过期至账户禁用之间的天数" + +#: ../../library/spwd.rst:47 +msgid "7" +msgstr "7" + +#: ../../library/spwd.rst:47 +msgid "``sp_expire``" +msgstr "``sp_expire``" + +#: ../../library/spwd.rst:47 +msgid "Number of days since 1970-01-01 when account expires" +msgstr "账户过期的天数,自 1970-01-01 算起" + +#: ../../library/spwd.rst:50 +msgid "8" +msgstr "8" + +#: ../../library/spwd.rst:50 +msgid "``sp_flag``" +msgstr "``sp_flag``" + +#: ../../library/spwd.rst:50 +msgid "Reserved" +msgstr "保留字段" + +#: ../../library/spwd.rst:53 +msgid "" +"The sp_namp and sp_pwdp items are strings, all others are integers. " +":exc:`KeyError` is raised if the entry asked for cannot be found." +msgstr "sp_namp 和 sp_pwdp 条目是字符串,其他的均为整数。 如果未找到所需条目则会触发 :exc:`KeyError`。" + +#: ../../library/spwd.rst:56 +msgid "The following functions are defined:" +msgstr "定义了以下函数:" + +#: ../../library/spwd.rst:61 +msgid "Return the shadow password database entry for the given user name." +msgstr "返回指定用户名的 shadow 密码库记录。" + +#: ../../library/spwd.rst:63 +msgid "" +"Raises a :exc:`PermissionError` instead of :exc:`KeyError` if the user " +"doesn't have privileges." +msgstr "如果当前用户权限不足,会触发 :exc:`PermissionError`,而非 :exc:`KeyError`。" + +#: ../../library/spwd.rst:69 +msgid "" +"Return a list of all available shadow password database entries, in " +"arbitrary order." +msgstr "返回所有可用的 shadow 密码库记录列表,顺序随机。" + +#: ../../library/spwd.rst:76 +msgid "Module :mod:`grp`" +msgstr "模块 :mod:`grp`" + +#: ../../library/spwd.rst:76 +msgid "An interface to the group database, similar to this." +msgstr "针对用户组数据库的接口,与本模块类似。" + +#: ../../library/spwd.rst:78 +msgid "Module :mod:`pwd`" +msgstr "模块 :mod:`pwd`" + +#: ../../library/spwd.rst:79 +msgid "An interface to the normal password database, similar to this." +msgstr "访问普通密码库的接口,与本模块类似。" diff --git a/library/sqlite3.po b/library/sqlite3.po new file mode 100644 index 000000000..1fb19bebc --- /dev/null +++ b/library/sqlite3.po @@ -0,0 +1,1545 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) 2001-2024, Python Software Foundation +# This file is distributed under the same license as the Python package. +# FIRST AUTHOR , YEAR. +# +# Translators: +# Fei Yin , 2018 +# ww song , 2018 +# Kade For, 2019 +# dogn he , 2019 +# ppcfish , 2019 +# Alpha Du , 2022 +# Freesand Leo , 2022 +# Rafael Fontenelle , 2024 +# +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: Python 3.9\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2024-08-30 16:51+0000\n" +"PO-Revision-Date: 2017-02-16 23:27+0000\n" +"Last-Translator: Rafael Fontenelle , 2024\n" +"Language-Team: Chinese (China) (https://app.transifex.com/python-doc/teams/5390/zh_CN/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: zh_CN\n" +"Plural-Forms: nplurals=1; plural=0;\n" + +#: ../../library/sqlite3.rst:2 +msgid ":mod:`sqlite3` --- DB-API 2.0 interface for SQLite databases" +msgstr ":mod:`sqlite3` --- SQLite 数据库 DB-API 2.0 接口模块" + +#: ../../library/sqlite3.rst:9 +msgid "**Source code:** :source:`Lib/sqlite3/`" +msgstr "**源代码:** :source:`Lib/sqlite3/`" + +#: ../../library/sqlite3.rst:13 +msgid "" +"SQLite is a C library that provides a lightweight disk-based database that " +"doesn't require a separate server process and allows accessing the database " +"using a nonstandard variant of the SQL query language. Some applications can" +" use SQLite for internal data storage. It's also possible to prototype an " +"application using SQLite and then port the code to a larger database such as" +" PostgreSQL or Oracle." +msgstr "" +"SQLite 是一个C语言库,它可以提供一种轻量级的基于磁盘的数据库,这种数据库不需要独立的服务器进程,也允许需要使用一种非标准的 SQL " +"查询语言来访问它。一些应用程序可以使用 SQLite 作为内部数据存储。可以用它来创建一个应用程序原型,然后再迁移到更大的数据库,比如 " +"PostgreSQL 或 Oracle。" + +#: ../../library/sqlite3.rst:20 +msgid "" +"The sqlite3 module was written by Gerhard Häring. It provides an SQL " +"interface compliant with the DB-API 2.0 specification described by " +":pep:`249`." +msgstr "" + +#: ../../library/sqlite3.rst:23 +msgid "" +"To use the module, start by creating a :class:`Connection` object that " +"represents the database. Here the data will be stored in the " +":file:`example.db` file::" +msgstr "" +"要使用这个模块,请先创建一个 :class:`Connection` 对象来代表数据库。 在这里数据将会存储在 :file:`example.db` " +"文件中::" + +#: ../../library/sqlite3.rst:30 +msgid "" +"The special path name ``:memory:`` can be provided to create a temporary " +"database in RAM." +msgstr "特殊路径名称 ``:memory:`` 可被提供用来在 RAM 中创建一个临时数据库。" + +#: ../../library/sqlite3.rst:33 +msgid "" +"Once a :class:`Connection` has been established, create a :class:`Cursor` " +"object and call its :meth:`~Cursor.execute` method to perform SQL commands::" +msgstr "" +"一旦建立了 :class:`Connection`,即可创建一个 :class:`Cursor` 对象并调用其 " +":meth:`~Cursor.execute` 方法来执行 SQL 命令::" + +#: ../../library/sqlite3.rst:52 +msgid "" +"The saved data is persistent: it can be reloaded in a subsequent session " +"even after restarting the Python interpreter::" +msgstr "保存的数据将是持久化的:它可在后续会话中被重载,即使是在重启 Python 解释器之后::" + +#: ../../library/sqlite3.rst:59 +msgid "" +"To retrieve data after executing a SELECT statement, either treat the cursor" +" as an :term:`iterator`, call the cursor's :meth:`~Cursor.fetchone` method " +"to retrieve a single matching row, or call :meth:`~Cursor.fetchall` to get a" +" list of the matching rows." +msgstr "" +"要在执行 SELECT 语句之后获取数据,你可以把游标当作一个 :term:`iterator`,调用游标的 " +":meth:`~Cursor.fetchone` 方法来获取一个匹配的行,或者调用 :meth:`~Cursor.fetchall` " +"来得到一个包含多个匹配行的列表。" + +#: ../../library/sqlite3.rst:64 +msgid "This example uses the iterator form::" +msgstr "下面是一个使用迭代器形式的例子:" + +#: ../../library/sqlite3.rst:77 +msgid "" +"SQL operations usually need to use values from Python variables. However, " +"beware of using Python's string operations to assemble queries, as they are " +"vulnerable to SQL injection attacks (see the `xkcd webcomic " +"`_ for a humorous example of what can go wrong)::" +msgstr "" +"SQL 操作通常会需要使用来自 Python 变量的值。 不过,请避免使用 Python 的字符串操作来拼装查询,因为这样易受 SQL 注入攻击(请在 " +"`xkcd webcomic `_ 查看有关这会造成什么后果的一个幽默例子)::" + +#: ../../library/sqlite3.rst:86 +msgid "" +"Instead, use the DB-API's parameter substitution. To insert a variable into " +"a query string, use a placeholder in the string, and substitute the actual " +"values into the query by providing them as a :class:`tuple` of values to the" +" second argument of the cursor's :meth:`~Cursor.execute` method. An SQL " +"statement may use one of two kinds of placeholders: question marks (qmark " +"style) or named placeholders (named style). For the qmark style, " +"``parameters`` must be a :term:`sequence `. For the named style, " +"it can be either a :term:`sequence ` or :class:`dict` instance. " +"The length of the :term:`sequence ` must match the number of " +"placeholders, or a :exc:`ProgrammingError` is raised. If a :class:`dict` is " +"given, it must contain keys for all named parameters. Any extra items are " +"ignored. Here's an example of both styles:" +msgstr "" +"为此,应使用 DB-API 的形参替换。 要将一个变量插入到查询字符串中,请在字符串中放一个占位符,并通过提供包含多个值的 :class:`元组` " +"作为游标的 :meth:`~Cursor.execute` 方法的第二个参数来将实际值替换到查询中。 SQL " +"语句可以使用两种类别的占位符之一:问号占位符(问号风格)或名称占位符(名称风格)。 对于问号风格,``parameters`` 必须是一个 " +":term:`序列 `。 对于名称风格,它可以是一个 :term:`序列 ` 或者 :class:`dict` " +"实例。 :term:`序列 ` 的长度必须匹配占位符的数量,否则会引发 :exc:`ProgrammingError`。 " +"如果给出的是一个 :class:`dict`,则它必须包含与全部名称形参相对应的键。 任何额外的条目都会被忽略。 下面是一个同时包含这两种风格的例子:" + +#: ../../library/sqlite3.rst:106 +msgid "https://www.sqlite.org" +msgstr "https://www.sqlite.org" + +#: ../../library/sqlite3.rst:105 +msgid "" +"The SQLite web page; the documentation describes the syntax and the " +"available data types for the supported SQL dialect." +msgstr "SQLite的主页;它的文档详细描述了它所支持的 SQL 方言的语法和可用的数据类型。" + +#: ../../library/sqlite3.rst:109 +msgid "https://www.w3schools.com/sql/" +msgstr "https://www.w3schools.com/sql/" + +#: ../../library/sqlite3.rst:109 +msgid "Tutorial, reference and examples for learning SQL syntax." +msgstr "学习 SQL 语法的教程、参考和例子。" + +#: ../../library/sqlite3.rst:111 +msgid ":pep:`249` - Database API Specification 2.0" +msgstr ":pep:`249` - DB-API 2.0 规范" + +#: ../../library/sqlite3.rst:112 +msgid "PEP written by Marc-André Lemburg." +msgstr "PEP 由 Marc-André Lemburg 撰写。" + +#: ../../library/sqlite3.rst:118 +msgid "Module functions and constants" +msgstr "模块函数和常量" + +#: ../../library/sqlite3.rst:123 +msgid "" +"String constant stating the supported DB-API level. Required by the DB-API. " +"Hard-coded to ``\"2.0\"``." +msgstr "指明所支持的 DB-API 级别的字符串常量。 根据 DB-API 的需要设置。 硬编码为 ``\"2.0\"``。" + +#: ../../library/sqlite3.rst:128 +msgid "" +"String constant stating the type of parameter marker formatting expected by " +"the :mod:`sqlite3` module. Required by the DB-API. Hard-coded to " +"``\"qmark\"``." +msgstr "指明 :mod:`sqlite3` 模块所预期的形参标记格式化类型。 根据 DB-API 的需要设置。 硬编码为 ``\"qmark\"``。" + +#: ../../library/sqlite3.rst:134 +msgid "" +"The :mod:`sqlite3` module supports both ``qmark`` and ``numeric`` DB-API " +"parameter styles, because that is what the underlying SQLite library " +"supports. However, the DB-API does not allow multiple values for the " +"``paramstyle`` attribute." +msgstr "" +":mod:`sqlite3` 模块同时支持 ``qmark`` 和 ``numeric`` DB-API 形参风格,因为这是下层的 SQLite " +"库所支持的。 不过,DB-API 不允许 ``paramstyle`` 属性有多个值。" + +#: ../../library/sqlite3.rst:141 +msgid "" +"The version number of this module, as a string. This is not the version of " +"the SQLite library." +msgstr "这个模块的版本号,是一个字符串。不是 SQLite 库的版本号。" + +#: ../../library/sqlite3.rst:147 +msgid "" +"The version number of this module, as a tuple of integers. This is not the " +"version of the SQLite library." +msgstr "这个模块的版本号,是一个由整数组成的元组。不是 SQLite 库的版本号。" + +#: ../../library/sqlite3.rst:153 +msgid "The version number of the run-time SQLite library, as a string." +msgstr "使用中的 SQLite 库的版本号,是一个字符串。" + +#: ../../library/sqlite3.rst:158 +msgid "" +"The version number of the run-time SQLite library, as a tuple of integers." +msgstr "使用中的 SQLite 库的版本号,是一个整数组成的元组。" + +#: ../../library/sqlite3.rst:163 +msgid "" +"Integer constant required by the DB-API, stating the level of thread safety " +"the :mod:`sqlite3` module supports. Currently hard-coded to ``1``, meaning " +"*\"Threads may share the module, but not connections.\"* However, this may " +"not always be true. You can check the underlying SQLite library's compile-" +"time threaded mode using the following query::" +msgstr "" +"DB-API 要求的整数,声明了 :mod:`sqlite3` 模块支持的线程安全级别。 目前硬编码为 ``1``,意味着 " +"*\"线程可以共享模块,但不能共享连接。\"* 然而,这不一定总是对的。 你可以使用以下查询来检查底层 SQLite 库的编译时线程模式::" + +#: ../../library/sqlite3.rst:176 +msgid "" +"Note that the `SQLITE_THREADSAFE levels " +"`_ do not match the DB-API 2.0 " +"``threadsafety`` levels." +msgstr "" +"注意 `SQLITE_THREADSAFE 级别 `_ 与 " +"DB-API 2.0 ``threadsafety`` 级别不一致。" + +#: ../../library/sqlite3.rst:183 ../../library/sqlite3.rst:196 +msgid "" +"This constant is meant to be used with the *detect_types* parameter of the " +":func:`connect` function." +msgstr "这个常量可以作为 :func:`connect` 函数的 *detect_types* 参数。" + +#: ../../library/sqlite3.rst:186 +msgid "" +"Setting it makes the :mod:`sqlite3` module parse the declared type for each " +"column it returns. It will parse out the first word of the declared type, " +"i. e. for \"integer primary key\", it will parse out \"integer\", or for " +"\"number(10)\" it will parse out \"number\". Then for that column, it will " +"look into the converters dictionary and use the converter function " +"registered for that type there." +msgstr "" +"设置这个参数后,:mod:`sqlite3` 模块将解析它返回的每一列申明的类型。它会申明的类型的第一个单词,比如“integer primary " +"key”,它会解析出“integer”,再比如“number(10)”,它会解析出“number”。然后,它会在转换器字典里查找那个类型注册的转换器函数,并调用它。" + +#: ../../library/sqlite3.rst:199 +msgid "" +"Setting this makes the SQLite interface parse the column name for each " +"column it returns. It will look for a string formed [mytype] in there, and " +"then decide that 'mytype' is the type of the column. It will try to find an " +"entry of 'mytype' in the converters dictionary and then use the converter " +"function found there to return the value. The column name found in " +":attr:`Cursor.description` does not include the type, i. e. if you use " +"something like ``'as \"Expiration date [datetime]\"'`` in your SQL, then we " +"will parse out everything until the first ``'['`` for the column name and " +"strip the preceding space: the column name would simply be \"Expiration " +"date\"." +msgstr "" +"设置此参数可使得 SQLite 接口解析它所返回的每一列的列名。 它将在其中查找形式为 [mytype] 的字符串,然后将 'mytype' " +"确定为列的类型。 它将尝试在转换器字典中查找 'mytype' 条目,然后用找到的转换器函数来返回值。 在 " +":attr:`Cursor.description` 中找到的列名并不包括类型,举例来说,如果你在你的 SQL 中使用了像 ``'as " +"\"Expiration date [datetime]\"'`` 这样的写法,那么我们将解析出在第一个 ``'['`` " +"之前的所有内容并去除前导空格作为列名:即列名将为 \"Expiration date\"。" + +#: ../../library/sqlite3.rst:212 +msgid "" +"Opens a connection to the SQLite database file *database*. By default " +"returns a :class:`Connection` object, unless a custom *factory* is given." +msgstr "" +"连接 SQLite 数据库 *database*。默认返回 :class:`Connection` 对象,除非使用了自定义的 *factory* 参数。" + +#: ../../library/sqlite3.rst:215 +msgid "" +"*database* is a :term:`path-like object` giving the pathname (absolute or " +"relative to the current working directory) of the database file to be " +"opened. You can use ``\":memory:\"`` to open a database connection to a " +"database that resides in RAM instead of on disk." +msgstr "" +"*database* 是准备打开的数据库文件的路径(绝对路径或相对于当前目录的相对路径),它是 :term:`path-like " +"object`。你也可以用 ``\":memory:\"`` 在内存中打开一个数据库。" + +#: ../../library/sqlite3.rst:220 +msgid "" +"When a database is accessed by multiple connections, and one of the " +"processes modifies the database, the SQLite database is locked until that " +"transaction is committed. The *timeout* parameter specifies how long the " +"connection should wait for the lock to go away until raising an exception. " +"The default for the timeout parameter is 5.0 (five seconds)." +msgstr "" +"当一个数据库被多个连接访问的时候,如果其中一个进程修改这个数据库,在这个事务提交之前,这个 SQLite 数据库将会被一直锁定。*timeout* " +"参数指定了这个连接等待锁释放的超时时间,超时之后会引发一个异常。这个超时时间默认是 5.0(5秒)。" + +#: ../../library/sqlite3.rst:226 +msgid "" +"For the *isolation_level* parameter, please see the " +":attr:`~Connection.isolation_level` property of :class:`Connection` objects." +msgstr "" +"*isolation_level* 参数,请查看 :class:`Connection` 对象的 " +":attr:`~Connection.isolation_level` 属性。" + +#: ../../library/sqlite3.rst:229 +msgid "" +"SQLite natively supports only the types TEXT, INTEGER, REAL, BLOB and NULL. " +"If you want to use other types you must add support for them yourself. The " +"*detect_types* parameter and the using custom **converters** registered with" +" the module-level :func:`register_converter` function allow you to easily do" +" that." +msgstr "" +"SQLite 原生只支持5种类型:TEXT,INTEGER,REAL,BLOB 和 NULL。如果你想用其它类型,你必须自己添加相应的支持。使用 " +"*detect_types* 参数和模块级别的 :func:`register_converter` 函数注册**转换器** 可以简单的实现。" + +#: ../../library/sqlite3.rst:234 +msgid "" +"*detect_types* defaults to 0 (i. e. off, no type detection), you can set it " +"to any combination of :const:`PARSE_DECLTYPES` and :const:`PARSE_COLNAMES` " +"to turn type detection on. Due to SQLite behaviour, types can't be detected " +"for generated fields (for example ``max(data)``), even when *detect_types* " +"parameter is set. In such case, the returned type is :class:`str`." +msgstr "" +"*detect_types* 默认为 0 (即关闭,不进行类型检测),你可以将其设为任意的 :const:`PARSE_DECLTYPES` 和 " +":const:`PARSE_COLNAMES` 组合来启用类型检测。 由于 SQLite 的行为,生成的字段类型 (例如 ``max(data)``) " +"不能被检测,即使在设置了 *detect_types* 形参时也是如此。 在此情况下,返回的类型为 :class:`str`。" + +#: ../../library/sqlite3.rst:240 +msgid "" +"By default, *check_same_thread* is :const:`True` and only the creating " +"thread may use the connection. If set :const:`False`, the returned " +"connection may be shared across multiple threads. When using multiple " +"threads with the same connection writing operations should be serialized by " +"the user to avoid data corruption." +msgstr "" +"默认情况下,*check_same_thread* 为 :const:`True`,只有当前的线程可以使用该连接。 如果设置为 " +":const:`False`,则多个线程可以共享返回的连接。 当多个线程使用同一个连接的时候,用户应该把写操作进行序列化,以避免数据损坏。" + +#: ../../library/sqlite3.rst:245 +msgid "" +"By default, the :mod:`sqlite3` module uses its :class:`Connection` class for" +" the connect call. You can, however, subclass the :class:`Connection` class" +" and make :func:`connect` use your class instead by providing your class for" +" the *factory* parameter." +msgstr "" +"默认情况下,当调用 connect 方法的时候,:mod:`sqlite3` 模块使用了它的 :class:`Connection` " +"类。当然,你也可以创建 :class:`Connection` 类的子类,然后创建提供了 *factory* 参数的 :func:`connect` " +"方法。" + +#: ../../library/sqlite3.rst:250 +msgid "Consult the section :ref:`sqlite3-types` of this manual for details." +msgstr "详情请查阅当前手册的 :ref:`sqlite3-types` 部分。" + +#: ../../library/sqlite3.rst:252 +msgid "" +"The :mod:`sqlite3` module internally uses a statement cache to avoid SQL " +"parsing overhead. If you want to explicitly set the number of statements " +"that are cached for the connection, you can set the *cached_statements* " +"parameter. The currently implemented default is to cache 100 statements." +msgstr "" +":mod:`sqlite3` 模块在内部使用语句缓存来避免 SQL 解析开销。 如果要显式设置当前连接可以缓存的语句数,可以设置 " +"*cached_statements* 参数。 当前实现的默认值是缓存100条语句。" + +#: ../../library/sqlite3.rst:257 +msgid "" +"If *uri* is :const:`True`, *database* is interpreted as a :abbr:`URI " +"(Uniform Resource Identifier)` with a file path and an optional query " +"string. The scheme part *must* be ``\"file:\"``. The path can be a " +"relative or absolute file path. The query string allows us to pass " +"parameters to SQLite. Some useful URI tricks include::" +msgstr "" +"如果 *uri* 为 :const:`True`,*database* 会被解释为 :abbr:`URI (Uniform Resource " +"Identifier)`,带有文件路径和可选的查询字符串。 scheme 部分 *必须* 是 ``\"file:\"``。 path " +"可以是一个相对或绝对的文件路径。 查询字符串允许我们向 SQLite 传递参数。一些有用的 URI 技巧包括::" + +#: ../../library/sqlite3.rst:276 +msgid "" +"More information about this feature, including a list of recognized " +"parameters, can be found in the `SQLite URI documentation " +"`_." +msgstr "" +"关于这个功能的更多信息,包括可识别的参数列表,可以在 `SQLite URI 文档 " +"`_ 中找到。" + +#: ../../library/sqlite3.rst:280 +msgid "" +"Raises an :ref:`auditing event ` ``sqlite3.connect`` with argument" +" ``database``." +msgstr "引发一个 :ref:`审计事件 ` ``sqlite3.connect`` 并附带参数 ``database``。" + +#: ../../library/sqlite3.rst:282 +msgid "Added the *uri* parameter." +msgstr "增加了 *uri* 参数。" + +#: ../../library/sqlite3.rst:285 +msgid "" +"*database* can now also be a :term:`path-like object`, not only a string." +msgstr "*database* 现在可以是一个 :term:`path-like object` 对象了,而不仅仅是字符串。" + +#: ../../library/sqlite3.rst:291 +msgid "" +"Registers a callable to convert a bytestring from the database into a custom" +" Python type. The callable will be invoked for all database values that are " +"of the type *typename*. Confer the parameter *detect_types* of the " +":func:`connect` function for how the type detection works. Note that " +"*typename* and the name of the type in your query are matched in case-" +"insensitive manner." +msgstr "" +"注册一个回调对象 *callable*, 用来转换数据库中的字节串为自定的 Python 类型。所有类型为 *typename* " +"的数据库的值在转换时,都会调用这个回调对象。通过指定 :func:`connect` 函数的 *detect-types* " +"参数来设置类型检测的方式。注意,*typename* 与查询语句中的类型名进行匹配时不区分大小写。" + +#: ../../library/sqlite3.rst:300 +msgid "" +"Registers a callable to convert the custom Python type *type* into one of " +"SQLite's supported types. The callable *callable* accepts as single " +"parameter the Python value, and must return a value of the following types: " +"int, float, str or bytes." +msgstr "" +"注册一个回调对象 *callable*,用来转换自定义Python类型为一个 SQLite 支持的类型。 这个回调对象 *callable* 仅接受一个" +" Python 值作为参数,而且必须返回以下某个类型的值:int,float,str 或 bytes。" + +#: ../../library/sqlite3.rst:308 +msgid "" +"Returns :const:`True` if the string *sql* contains one or more complete SQL " +"statements terminated by semicolons. It does not verify that the SQL is " +"syntactically correct, only that there are no unclosed string literals and " +"the statement is terminated by a semicolon." +msgstr "" +"如果字符串 *sql* 包含一个或多个完整的 SQL 语句(以分号结束)则返回 :const:`True`。它不会验证 SQL " +"语法是否正确,仅会验证字符串字面上是否完整,以及是否以分号结束。" + +#: ../../library/sqlite3.rst:313 +msgid "" +"This can be used to build a shell for SQLite, as in the following example:" +msgstr "它可以用来构建一个 SQLite shell,下面是一个例子:" + +#: ../../library/sqlite3.rst:321 +msgid "" +"By default you will not get any tracebacks in user-defined functions, " +"aggregates, converters, authorizer callbacks etc. If you want to debug them," +" you can call this function with *flag* set to ``True``. Afterwards, you " +"will get tracebacks from callbacks on ``sys.stderr``. Use :const:`False` to " +"disable the feature again." +msgstr "" +"默认情况下,您不会获得任何用户定义函数中的回溯消息,比如聚合,转换器,授权器回调等。如果要调试它们,可以设置 *flag* 参数为 ``True`` " +"并调用此函数。 之后,回调中的回溯信息将会输出到 ``sys.stderr``。 再次使用 :const:`False` 来禁用该功能。" + +#: ../../library/sqlite3.rst:331 +msgid "Connection Objects" +msgstr "连接对象(Connection)" + +#: ../../library/sqlite3.rst:335 +msgid "" +"An SQLite database connection has the following attributes and methods:" +msgstr "SQLite 数据库连接对象有如下的属性和方法:" + +#: ../../library/sqlite3.rst:339 +msgid "" +"Get or set the current default isolation level. :const:`None` for autocommit" +" mode or one of \"DEFERRED\", \"IMMEDIATE\" or \"EXCLUSIVE\". See section " +":ref:`sqlite3-controlling-transactions` for a more detailed explanation." +msgstr "" +"获取或设置当前默认的隔离级别。 表示自动提交模式的 :const:`None` 以及 \"DEFERRED\", \"IMMEDIATE\" 或 " +"\"EXCLUSIVE\" 其中之一。 详细描述请参阅 :ref:`sqlite3-controlling-transactions`。" + +#: ../../library/sqlite3.rst:345 +msgid "" +":const:`True` if a transaction is active (there are uncommitted changes), " +":const:`False` otherwise. Read-only attribute." +msgstr "如果是在活动事务中(还没有提交改变),返回 :const:`True`,否则,返回 :const:`False`。它是一个只读属性。" + +#: ../../library/sqlite3.rst:352 +msgid "" +"The cursor method accepts a single optional parameter *factory*. If " +"supplied, this must be a callable returning an instance of :class:`Cursor` " +"or its subclasses." +msgstr "" +"这个方法接受一个可选参数 *factory*,如果要指定这个参数,它必须是一个可调用对象,而且必须返回 :class:`Cursor` " +"类的一个实例或者子类。" + +#: ../../library/sqlite3.rst:358 +msgid "" +"This method commits the current transaction. If you don't call this method, " +"anything you did since the last call to ``commit()`` is not visible from " +"other database connections. If you wonder why you don't see the data you've " +"written to the database, please check you didn't forget to call this method." +msgstr "" +"这个方法提交当前事务。如果没有调用这个方法,那么从上一次提交 ``commit()`` " +"以来所有的变化在其他数据库连接上都是不可见的。如果你往数据库里写了数据,但是又查询不到,请检查是否忘记了调用这个方法。" + +#: ../../library/sqlite3.rst:365 +msgid "" +"This method rolls back any changes to the database since the last call to " +":meth:`commit`." +msgstr "这个方法回滚从上一次调用 :meth:`commit` 以来所有数据库的改变。" + +#: ../../library/sqlite3.rst:370 +msgid "" +"This closes the database connection. Note that this does not automatically " +"call :meth:`commit`. If you just close your database connection without " +"calling :meth:`commit` first, your changes will be lost!" +msgstr "" +"关闭数据库连接。注意,它不会自动调用 :meth:`commit` 方法。如果在关闭数据库连接之前没有调用 " +":meth:`commit`,那么你的修改将会丢失!" + +#: ../../library/sqlite3.rst:376 +msgid "" +"Create a new :class:`Cursor` object and call :meth:`~Cursor.execute` on it " +"with the given *sql* and *parameters*. Return the new cursor object." +msgstr "" +"创建一个新的 :class:`Cursor` 对象,并在其上使用给出的 *sql* 和 *parameters* 调用 " +":meth:`~Cursor.execute`。 返回新的游标对象。" + +#: ../../library/sqlite3.rst:382 +msgid "" +"Create a new :class:`Cursor` object and call :meth:`~Cursor.executemany` on " +"it with the given *sql* and *parameters*. Return the new cursor object." +msgstr "" +"创建一个新的 :class:`Cursor` 对象,并在其上使用给出的 *sql* 和 *parameters* 调用 " +":meth:`~Cursor.executemany`。 返回新的游标对象。" + +#: ../../library/sqlite3.rst:388 +msgid "" +"Create a new :class:`Cursor` object and call :meth:`~Cursor.executescript` " +"on it with the given *sql_script*. Return the new cursor object." +msgstr "" +"创建一个新的 :class:`Cursor` 对象,并在其上使用给出的 *sql_script* 调用 " +":meth:`~Cursor.executescript`。 返回新的游标对象。" + +#: ../../library/sqlite3.rst:394 +msgid "" +"Creates a user-defined function that you can later use from within SQL " +"statements under the function name *name*. *num_params* is the number of " +"parameters the function accepts (if *num_params* is -1, the function may " +"take any number of arguments), and *func* is a Python callable that is " +"called as the SQL function. If *deterministic* is true, the created function" +" is marked as `deterministic `_, " +"which allows SQLite to perform additional optimizations. This flag is " +"supported by SQLite 3.8.3 or higher, :exc:`NotSupportedError` will be raised" +" if used with older versions." +msgstr "" +"创建一个可以在 SQL 语句中使用的用户自定义函数,函数名为 *name*。 *num_params* 为该函数所接受的形参个数(如果 " +"*num_params* 为 -1,则该函数可接受任意数量的参数), *func* 是一个 Python 可调用对象,它将作为 SQL 函数被调用。 " +"如果 *deterministic* 为真值,则所创建的函数将被标记为 `deterministic " +"`_,这允许 SQLite 执行额外的优化。 此旗标在 SQLite " +"3.8.3 或更高版本中受到支持,如果在旧版本中使用将引发 :exc:`NotSupportedError`。" + +#: ../../library/sqlite3.rst:404 +msgid "" +"The function can return any of the types supported by SQLite: bytes, str, " +"int, float and ``None``." +msgstr "此函数可返回任何 SQLite 所支持的类型: bytes, str, int, float 和 ``None``。" + +#: ../../library/sqlite3.rst:407 +msgid "The *deterministic* parameter was added." +msgstr "增加了 *deterministic* 形参。" + +#: ../../library/sqlite3.rst:410 ../../library/sqlite3.rst:427 +#: ../../library/sqlite3.rst:549 ../../library/sqlite3.rst:702 +msgid "Example:" +msgstr "示例:" + +#: ../../library/sqlite3.rst:417 +msgid "Creates a user-defined aggregate function." +msgstr "创建一个自定义的聚合函数。" + +#: ../../library/sqlite3.rst:419 +msgid "" +"The aggregate class must implement a ``step`` method, which accepts the " +"number of parameters *num_params* (if *num_params* is -1, the function may " +"take any number of arguments), and a ``finalize`` method which will return " +"the final result of the aggregate." +msgstr "" +"参数中 *aggregate_class* 类必须实现两个方法:``step`` 和 ``finalize``。``step`` 方法接受 " +"*num_params* 个参数(如果 *num_params* 为 -1,那么这个函数可以接受任意数量的参数);``finalize`` " +"方法返回最终的聚合结果。" + +#: ../../library/sqlite3.rst:424 +msgid "" +"The ``finalize`` method can return any of the types supported by SQLite: " +"bytes, str, int, float and ``None``." +msgstr "``finalize`` 方法可以返回任何 SQLite 支持的类型:bytes,str,int,float 和 ``None``。" + +#: ../../library/sqlite3.rst:434 +msgid "" +"Creates a collation with the specified *name* and *callable*. The callable " +"will be passed two string arguments. It should return -1 if the first is " +"ordered lower than the second, 0 if they are ordered equal and 1 if the " +"first is ordered higher than the second. Note that this controls sorting " +"(ORDER BY in SQL) so your comparisons don't affect other SQL operations." +msgstr "" +"使用 *name* 和 *callable* 创建排序规则。这个 *callable* 接受两个字符串对象,如果第一个小于第二个则返回 -1, " +"如果两个相等则返回 0,如果第一个大于第二个则返回 1。注意,这是用来控制排序的(SQL 中的 ORDER BY),所以它不会影响其它的 SQL 操作。" + +#: ../../library/sqlite3.rst:440 +msgid "" +"Note that the callable will get its parameters as Python bytestrings, which " +"will normally be encoded in UTF-8." +msgstr "注意,这个 *callable* 可调用对象会把它的参数作为 Python 字节串,通常会以 UTF-8 编码格式对它进行编码。" + +#: ../../library/sqlite3.rst:443 +msgid "" +"The following example shows a custom collation that sorts \"the wrong way\":" +msgstr "以下示例显示了使用“错误方式”进行排序的自定义排序规则:" + +#: ../../library/sqlite3.rst:447 +msgid "" +"To remove a collation, call ``create_collation`` with ``None`` as callable::" +msgstr "要移除一个排序规则,需要调用 ``create_collation`` 并设置 callable 参数为 ``None``。" + +#: ../../library/sqlite3.rst:454 +msgid "" +"You can call this method from a different thread to abort any queries that " +"might be executing on the connection. The query will then abort and the " +"caller will get an exception." +msgstr "" +"可以从不同的线程调用这个方法来终止所有查询操作,这些查询操作可能正在连接上执行。此方法调用之后, 查询将会终止,而且查询的调用者会获得一个异常。" + +#: ../../library/sqlite3.rst:461 +msgid "" +"This routine registers a callback. The callback is invoked for each attempt " +"to access a column of a table in the database. The callback should return " +":const:`SQLITE_OK` if access is allowed, :const:`SQLITE_DENY` if the entire " +"SQL statement should be aborted with an error and :const:`SQLITE_IGNORE` if " +"the column should be treated as a NULL value. These constants are available " +"in the :mod:`sqlite3` module." +msgstr "" +"此方法注册一个授权回调对象。每次在访问数据库中某个表的某一列的时候,这个回调对象将会被调用。如果要允许访问,则返回 " +":const:`SQLITE_OK`,如果要终止整个 SQL 语句,则返回 :const:`SQLITE_DENY`,如果这一列需要当做 NULL " +"值处理,则返回 :const:`SQLITE_IGNORE`。这些常量可以在 :mod:`sqlite3` 模块中找到。" + +#: ../../library/sqlite3.rst:468 +msgid "" +"The first argument to the callback signifies what kind of operation is to be" +" authorized. The second and third argument will be arguments or " +":const:`None` depending on the first argument. The 4th argument is the name " +"of the database (\"main\", \"temp\", etc.) if applicable. The 5th argument " +"is the name of the inner-most trigger or view that is responsible for the " +"access attempt or :const:`None` if this access attempt is directly from " +"input SQL code." +msgstr "" +"回调的第一个参数表示要授权的操作类型。 第二个和第三个参数将是参数或 :const:`None`,具体取决于第一个参数的值。 第 4 " +"个参数是数据库的名称(“main”,“temp”等),如果需要的话。 第 5 " +"个参数是负责访问尝试的最内层触发器或视图的名称,或者如果此访问尝试直接来自输入 SQL 代码,则为 :const:`None`。" + +#: ../../library/sqlite3.rst:475 +msgid "" +"Please consult the SQLite documentation about the possible values for the " +"first argument and the meaning of the second and third argument depending on" +" the first one. All necessary constants are available in the :mod:`sqlite3` " +"module." +msgstr "" +"请参阅 SQLite 文档,了解第一个参数的可能值以及第二个和第三个参数的含义,具体取决于第一个参数。 所有必需的常量都可以在 " +":mod:`sqlite3` 模块中找到。" + +#: ../../library/sqlite3.rst:482 +msgid "" +"This routine registers a callback. The callback is invoked for every *n* " +"instructions of the SQLite virtual machine. This is useful if you want to " +"get called from SQLite during long-running operations, for example to update" +" a GUI." +msgstr "" +"此例程注册回调。 对SQLite虚拟机的每个多指令调用回调。 如果要在长时间运行的操作期间从SQLite调用(例如更新用户界面),这非常有用。" + +#: ../../library/sqlite3.rst:487 +msgid "" +"If you want to clear any previously installed progress handler, call the " +"method with :const:`None` for *handler*." +msgstr "如果要清除以前安装的任何进度处理程序,调用该方法时请将 *handler* 参数设置为 :const:`None`。" + +#: ../../library/sqlite3.rst:490 +msgid "" +"Returning a non-zero value from the handler function will terminate the " +"currently executing query and cause it to raise an :exc:`OperationalError` " +"exception." +msgstr "从处理函数返回非零值将终止当前正在执行的查询并导致它引发 :exc:`OperationalError` 异常。" + +#: ../../library/sqlite3.rst:497 +msgid "" +"Registers *trace_callback* to be called for each SQL statement that is " +"actually executed by the SQLite backend." +msgstr "为每个 SQLite 后端实际执行的 SQL 语句注册要调用的 *trace_callback*。" + +#: ../../library/sqlite3.rst:500 +msgid "" +"The only argument passed to the callback is the statement (as :class:`str`) " +"that is being executed. The return value of the callback is ignored. Note " +"that the backend does not only run statements passed to the " +":meth:`Cursor.execute` methods. Other sources include the :ref:`transaction" +" management ` of the sqlite3 module and " +"the execution of triggers defined in the current database." +msgstr "" +"传递给回调的唯一参数是正在执行的语句(作为 :class:`str` )。回调的返回值被忽略。请注意,后端不仅运行传递给 " +":meth:`Cursor.execute` 方法的语句。其他来源包括 sqlite3 模块的 :ref:`事务管理 " +"` 和当前数据库中定义的触发器的执行。" + +#: ../../library/sqlite3.rst:508 +msgid "" +"Passing :const:`None` as *trace_callback* will disable the trace callback." +msgstr "将传入的 *trace_callback* 设为 :const:`None` 将禁用跟踪回调。" + +#: ../../library/sqlite3.rst:511 +msgid "" +"Exceptions raised in the trace callback are not propagated. As a development" +" and debugging aid, use :meth:`~sqlite3.enable_callback_tracebacks` to " +"enable printing tracebacks from exceptions raised in the trace callback." +msgstr "" +"在跟踪回调中产生的异常不会被传播。作为开发和调试的辅助手段,使用 :meth:`~sqlite3.enable_callback_tracebacks`" +" 来启用打印跟踪回调中产生的异常的回调。" + +#: ../../library/sqlite3.rst:521 +msgid "" +"This routine allows/disallows the SQLite engine to load SQLite extensions " +"from shared libraries. SQLite extensions can define new functions, " +"aggregates or whole new virtual table implementations. One well-known " +"extension is the fulltext-search extension distributed with SQLite." +msgstr "" +"此例程允许/禁止SQLite引擎从共享库加载SQLite扩展。 SQLite扩展可以定义新功能,聚合或全新的虚拟表实现。 " +"一个众所周知的扩展是与SQLite一起分发的全文搜索扩展。" + +#: ../../library/sqlite3.rst:526 ../../library/sqlite3.rst:538 +msgid "Loadable extensions are disabled by default. See [#f1]_." +msgstr "默认情况下禁用可加载扩展。 见 [#f1]_." + +#: ../../library/sqlite3.rst:534 +msgid "" +"This routine loads an SQLite extension from a shared library. You have to " +"enable extension loading with :meth:`enable_load_extension` before you can " +"use this routine." +msgstr "" +"这个例程从一个共享库中加载一个 SQLite 扩展。在使用这个例程之前,你必须用 :meth:`enable_load_extension` " +"来启用扩展加载。" + +#: ../../library/sqlite3.rst:544 +msgid "" +"You can change this attribute to a callable that accepts the cursor and the " +"original row as a tuple and will return the real result row. This way, you " +"can implement more advanced ways of returning results, such as returning an" +" object that can also access columns by name." +msgstr "" +"您可以将此属性更改为可接受游标和原始行作为元组的可调用对象,并将返回实际结果行。 " +"这样,您可以实现更高级的返回结果的方法,例如返回一个可以按名称访问列的对象。" + +#: ../../library/sqlite3.rst:553 +msgid "" +"If returning a tuple doesn't suffice and you want name-based access to " +"columns, you should consider setting :attr:`row_factory` to the highly-" +"optimized :class:`sqlite3.Row` type. :class:`Row` provides both index-based " +"and case-insensitive name-based access to columns with almost no memory " +"overhead. It will probably be better than your own custom dictionary-based " +"approach or even a db_row based solution." +msgstr "" +"如果返回一个元组是不够的,并且你想要对列进行基于名称的访问,你应该考虑将 :attr:`row_factory` 设置为高度优化的 " +":class:`sqlite3.Row` 类型。 :class:`Row` 提供基于索引和不区分大小写的基于名称的访问,几乎没有内存开销。 " +"它可能比您自己的基于字典的自定义方法甚至基于 db_row 的解决方案更好。" + +#: ../../library/sqlite3.rst:565 +msgid "" +"Using this attribute you can control what objects are returned for the " +"``TEXT`` data type. By default, this attribute is set to :class:`str` and " +"the :mod:`sqlite3` module will return :class:`str` objects for ``TEXT``. If " +"you want to return :class:`bytes` instead, you can set it to :class:`bytes`." +msgstr "" +"使用此属性可以控制为 ``TEXT`` 数据类型返回的对象。 默认情况下,此属性设置为 :class:`str` 和 :mod:`sqlite3` " +"模块将返回 ``TEXT`` 的 :class:`str` 对象。 如果要返回 :class:`bytes` ,可以将其设置为 " +":class:`bytes`。" + +#: ../../library/sqlite3.rst:570 +msgid "" +"You can also set it to any other callable that accepts a single bytestring " +"parameter and returns the resulting object." +msgstr "您还可以将其设置为接受单个 bytestring 参数的任何其他可调用对象,并返回结果对象。" + +#: ../../library/sqlite3.rst:573 +msgid "See the following example code for illustration:" +msgstr "请参阅以下示例代码以进行说明:" + +#: ../../library/sqlite3.rst:580 +msgid "" +"Returns the total number of database rows that have been modified, inserted," +" or deleted since the database connection was opened." +msgstr "返回自打开数据库连接以来已修改,插入或删除的数据库行的总数。" + +#: ../../library/sqlite3.rst:586 +msgid "" +"Returns an iterator to dump the database in an SQL text format. Useful when" +" saving an in-memory database for later restoration. This function provides" +" the same capabilities as the :kbd:`.dump` command in the :program:`sqlite3`" +" shell." +msgstr "" +"返回以SQL文本格式转储数据库的迭代器。 保存内存数据库以便以后恢复时很有用。 此函数提供与 :program:`sqlite3` shell 中的 " +":kbd:`.dump` 命令相同的功能。" + +#: ../../library/sqlite3.rst:591 +msgid "Example::" +msgstr "示例::" + +#: ../../library/sqlite3.rst:605 +msgid "" +"This method makes a backup of an SQLite database even while it's being " +"accessed by other clients, or concurrently by the same connection. The copy" +" will be written into the mandatory argument *target*, that must be another " +":class:`Connection` instance." +msgstr "" +"即使在 SQLite 数据库被其他客户端访问时,或者同时由同一连接访问,该方法也会对其进行备份。 该副本将写入强制参数 " +"*target*,该参数必须是另一个 :class:`Connection` 实例。" + +#: ../../library/sqlite3.rst:610 +msgid "" +"By default, or when *pages* is either ``0`` or a negative integer, the " +"entire database is copied in a single step; otherwise the method performs a " +"loop copying up to *pages* pages at a time." +msgstr "" +"默认情况下,或者当 *pages* 为 ``0`` 或负整数时,整个数据库将在一个步骤中复制;否则该方法一次循环复制 *pages* 规定数量的页面。" + +#: ../../library/sqlite3.rst:614 +msgid "" +"If *progress* is specified, it must either be ``None`` or a callable object " +"that will be executed at each iteration with three integer arguments, " +"respectively the *status* of the last iteration, the *remaining* number of " +"pages still to be copied and the *total* number of pages." +msgstr "" +"如果指定了 *progress*,则它必须为 ``None`` 或一个将在每次迭代时附带三个整数参数执行的可调用对象,这三个参数分别是前一次迭代的状态 " +"*status*,将要拷贝的剩余页数 *remaining* 以及总页数 *total*。" + +#: ../../library/sqlite3.rst:619 +msgid "" +"The *name* argument specifies the database name that will be copied: it must" +" be a string containing either ``\"main\"``, the default, to indicate the " +"main database, ``\"temp\"`` to indicate the temporary database or the name " +"specified after the ``AS`` keyword in an ``ATTACH DATABASE`` statement for " +"an attached database." +msgstr "" +"*name* 参数指定将被拷贝的数据库名称:它必须是一个字符串,其内容为表示主数据库的默认值 ``\"main\"``,表示临时数据库的 " +"``\"temp\"`` 或是在 ``ATTACH DATABASE`` 语句的 ``AS`` 关键字之后指定表示附加数据库的名称。" + +#: ../../library/sqlite3.rst:625 +msgid "" +"The *sleep* argument specifies the number of seconds to sleep by between " +"successive attempts to backup remaining pages, can be specified either as an" +" integer or a floating point value." +msgstr "*sleep* 参数指定在备份剩余页的连续尝试之间要休眠的秒数,可以指定为一个整数或一个浮点数值。" + +#: ../../library/sqlite3.rst:629 +msgid "Example 1, copy an existing database into another::" +msgstr "示例一,将现有数据库复制到另一个数据库中:" + +#: ../../library/sqlite3.rst:643 +msgid "Example 2, copy an existing database into a transient copy::" +msgstr "示例二,将现有数据库复制到临时副本中:" + +#: ../../library/sqlite3.rst:651 +msgid "Availability: SQLite 3.6.11 or higher" +msgstr "可用性:SQLite 3.6.11 或以上版本" + +#: ../../library/sqlite3.rst:659 +msgid "Cursor Objects" +msgstr "Cursor 对象" + +#: ../../library/sqlite3.rst:663 +msgid "A :class:`Cursor` instance has the following attributes and methods." +msgstr ":class:`Cursor` 游标实例具有以下属性和方法。" + +#: ../../library/sqlite3.rst:670 +msgid "" +"Executes an SQL statement. Values may be bound to the statement using " +":ref:`placeholders `." +msgstr "执行一条 SQL 语句。 可以使用 :ref:`占位符 ` 将值绑定到语句中。" + +#: ../../library/sqlite3.rst:673 +msgid "" +":meth:`execute` will only execute a single SQL statement. If you try to " +"execute more than one statement with it, it will raise a :exc:`.Warning`. " +"Use :meth:`executescript` if you want to execute multiple SQL statements " +"with one call." +msgstr "" +":meth:`execute` 将只执行一条单独的 SQL 语句。 如果你尝试用它执行超过一条语句,将会引发 :exc:`.Warning`。 " +"如果你想要用一次调用执行多条 SQL 语句请使用 :meth:`executescript`。" + +#: ../../library/sqlite3.rst:681 +msgid "" +"Executes a :ref:`parameterized ` SQL command against " +"all parameter sequences or mappings found in the sequence " +"*seq_of_parameters*. The :mod:`sqlite3` module also allows using an " +":term:`iterator` yielding parameters instead of a sequence." +msgstr "" +"执行一条 :ref:`带形参的 ` SQL 命令,使用所有形参序列或在序列 " +"*seq_of_parameters* 中找到的映射。 :mod:`sqlite3` 模块还允许使用 :term:`iterator` " +"代替序列来产生形参。" + +#: ../../library/sqlite3.rst:688 +msgid "Here's a shorter example using a :term:`generator`:" +msgstr "这是一个使用生成器 :term:`generator` 的简短示例:" + +#: ../../library/sqlite3.rst:695 +msgid "" +"This is a nonstandard convenience method for executing multiple SQL " +"statements at once. It issues a ``COMMIT`` statement first, then executes " +"the SQL script it gets as a parameter. This method disregards " +":attr:`isolation_level`; any transaction control must be added to " +"*sql_script*." +msgstr "" +"这是用于一次性执行多条 SQL 语句的非标准便捷方法。 它会首先发出一条 ``COMMIT`` 语句,然后执行通过参数获得的 SQL 脚本。 " +"此方法会忽略 :attr:`isolation_level`;任何事件控制都必须被添加到 *sql_script*。" + +#: ../../library/sqlite3.rst:700 +msgid "*sql_script* can be an instance of :class:`str`." +msgstr "*sql_script* 可以是一个 :class:`str` 类的实例。" + +#: ../../library/sqlite3.rst:709 +msgid "" +"Fetches the next row of a query result set, returning a single sequence, or " +":const:`None` when no more data is available." +msgstr "获取一个查询结果集的下一行,返回一个单独序列,或是在没有更多可用数据时返回 :const:`None`。" + +#: ../../library/sqlite3.rst:715 +msgid "" +"Fetches the next set of rows of a query result, returning a list. An empty " +"list is returned when no more rows are available." +msgstr "获取下一个多行查询结果集,返回一个列表。 当没有更多可用行时将返回一个空列表。" + +#: ../../library/sqlite3.rst:718 +msgid "" +"The number of rows to fetch per call is specified by the *size* parameter. " +"If it is not given, the cursor's arraysize determines the number of rows to " +"be fetched. The method should try to fetch as many rows as indicated by the " +"size parameter. If this is not possible due to the specified number of rows " +"not being available, fewer rows may be returned." +msgstr "" +"每次调用获取的行数由 *size* 形参指定。 如果没有给出该形参,则由 cursor 的 arraysize 决定要获取的行数。 此方法将基于 " +"size 形参值尝试获取指定数量的行。 如果获取不到指定的行数,则可能返回较少的行。" + +#: ../../library/sqlite3.rst:724 +msgid "" +"Note there are performance considerations involved with the *size* " +"parameter. For optimal performance, it is usually best to use the arraysize " +"attribute. If the *size* parameter is used, then it is best for it to retain" +" the same value from one :meth:`fetchmany` call to the next." +msgstr "" +"请注意 *size* 形参会涉及到性能方面的考虑。为了获得优化的性能,通常最好是使用 arraysize 属性。 如果使用 *size* " +"形参,则最好在从一个 :meth:`fetchmany` 调用到下一个调用之间保持相同的值。" + +#: ../../library/sqlite3.rst:731 +msgid "" +"Fetches all (remaining) rows of a query result, returning a list. Note that" +" the cursor's arraysize attribute can affect the performance of this " +"operation. An empty list is returned when no rows are available." +msgstr "" +"获取一个查询结果的所有(剩余)行,返回一个列表。 请注意 cursor 的 arraysize 属性会影响此操作的执行效率。 " +"当没有可用行时将返回一个空列表。" + +#: ../../library/sqlite3.rst:737 +msgid "Close the cursor now (rather than whenever ``__del__`` is called)." +msgstr "立即关闭 cursor(而不是在当 ``__del__`` 被调用的时候)。" + +#: ../../library/sqlite3.rst:739 +msgid "" +"The cursor will be unusable from this point forward; a " +":exc:`ProgrammingError` exception will be raised if any operation is " +"attempted with the cursor." +msgstr "" +"从这一时刻起该 cursor 将不再可用,如果再尝试用该 cursor 执行任何操作将引发 :exc:`ProgrammingError` 异常。" + +#: ../../library/sqlite3.rst:744 ../../library/sqlite3.rst:748 +msgid "Required by the DB-API. Does nothing in :mod:`sqlite3`." +msgstr "由 DB-API 要求。在 :mod:`sqlite3` 中不做任何事情。" + +#: ../../library/sqlite3.rst:752 +msgid "" +"Although the :class:`Cursor` class of the :mod:`sqlite3` module implements " +"this attribute, the database engine's own support for the determination of " +"\"rows affected\"/\"rows selected\" is quirky." +msgstr "" +"虽然 :mod:`sqlite3` 模块的 :class:`Cursor` 类实现了此属性,但数据库引擎本身对于确定 \"受影响行\"/\"已选择行\"" +" 的支持并不完善。" + +#: ../../library/sqlite3.rst:756 +msgid "" +"For :meth:`executemany` statements, the number of modifications are summed " +"up into :attr:`rowcount`." +msgstr "对于 :meth:`executemany` 语句,修改行数会被汇总至 :attr:`rowcount`。" + +#: ../../library/sqlite3.rst:759 +msgid "" +"As required by the Python DB API Spec, the :attr:`rowcount` attribute \"is " +"-1 in case no ``executeXX()`` has been performed on the cursor or the " +"rowcount of the last operation is not determinable by the interface\". This " +"includes ``SELECT`` statements because we cannot determine the number of " +"rows a query produced until all rows were fetched." +msgstr "" +"根据 Python DB API 规格描述的要求,:attr:`rowcount` 属性 \"当未在 cursor 上执行 " +"``executeXX()`` 或者上一次操作的 rowcount 不是由接口确定时为 -1\"。 这包括 ``SELECT`` " +"语句,因为我们无法确定一次查询将产生的行计数,而要等获取了所有行时才会知道。" + +#: ../../library/sqlite3.rst:765 +msgid "" +"With SQLite versions before 3.6.5, :attr:`rowcount` is set to 0 if you make " +"a ``DELETE FROM table`` without any condition." +msgstr "" +"在 SQLite 的 3.6.5 版之前,如果你执行 ``DELETE FROM table`` 时不附带任何条件,则 :attr:`rowcount`" +" 将被设为 0。" + +#: ../../library/sqlite3.rst:770 +msgid "" +"This read-only attribute provides the row id of the last inserted row. It is" +" only updated after successful ``INSERT`` or ``REPLACE`` statements using " +"the :meth:`execute` method. For other statements, after :meth:`executemany`" +" or :meth:`executescript`, or if the insertion failed, the value of " +"``lastrowid`` is left unchanged. The initial value of ``lastrowid`` is " +":const:`None`." +msgstr "" +"这个只读的属性提供了最后插入的行的 ID 。它只在使用 :meth:`execute` 方法的 ``INSERT`` 或 ``REPLACE`` " +"语句成功后被更新。对于其他语句,在 :meth:`executemany` 或 :meth:`executescript` 之后,或者如果插入失败, " +"``lastrowid`` 值将保持不变。 ``lastrowid`` 的初始值是 :const:`None` 。" + +#: ../../library/sqlite3.rst:778 +msgid "Inserts into ``WITHOUT ROWID`` tables are not recorded." +msgstr "对 ``WITHOUT ROWID`` 表的插入不被记录。" + +#: ../../library/sqlite3.rst:780 +msgid "Added support for the ``REPLACE`` statement." +msgstr "增加了 ``REPLACE`` 语句的支持。" + +#: ../../library/sqlite3.rst:785 +msgid "" +"Read/write attribute that controls the number of rows returned by " +":meth:`fetchmany`. The default value is 1 which means a single row would be " +"fetched per call." +msgstr "用于控制 :meth:`fetchmany` 返回行数的可读取/写入属性。 该属性的默认值为 1,表示每次调用将获取单独一行。" + +#: ../../library/sqlite3.rst:790 +msgid "" +"This read-only attribute provides the column names of the last query. To " +"remain compatible with the Python DB API, it returns a 7-tuple for each " +"column where the last six items of each tuple are :const:`None`." +msgstr "" +"这个只读属性将提供上一次查询的列名称。 为了与 Python DB API 保持兼容,它会为每个列返回一个 7 元组,每个元组的最后六个条目均为 " +":const:`None`。" + +#: ../../library/sqlite3.rst:794 +msgid "It is set for ``SELECT`` statements without any matching rows as well." +msgstr "对于没有任何匹配行的 ``SELECT`` 语句同样会设置该属性。" + +#: ../../library/sqlite3.rst:798 +msgid "" +"This read-only attribute provides the SQLite database :class:`Connection` " +"used by the :class:`Cursor` object. A :class:`Cursor` object created by " +"calling :meth:`con.cursor() ` will have a " +":attr:`connection` attribute that refers to *con*::" +msgstr "" +"这个只读属性将提供 :class:`Cursor` 对象所使用的 SQLite 数据库 :class:`Connection`。 通过调用 " +":meth:`con.cursor() ` 创建的 :class:`Cursor` 对象所包含的 " +":attr:`connection` 属性将指向 *con*::" + +#: ../../library/sqlite3.rst:811 +msgid "Row Objects" +msgstr "行对象" + +#: ../../library/sqlite3.rst:815 +msgid "" +"A :class:`Row` instance serves as a highly optimized " +":attr:`~Connection.row_factory` for :class:`Connection` objects. It tries to" +" mimic a tuple in most of its features." +msgstr "" +"一个 :class:`Row` 实例,该实例将作为用于 :class:`Connection` 对象的高度优化的 " +":attr:`~Connection.row_factory`。 它的大部分行为都会模仿元组的特性。" + +#: ../../library/sqlite3.rst:819 +msgid "" +"It supports mapping access by column name and index, iteration, " +"representation, equality testing and :func:`len`." +msgstr "它支持使用列名称的映射访问以及索引、迭代、文本表示、相等检测和 :func:`len` 等操作。" + +#: ../../library/sqlite3.rst:822 +msgid "" +"If two :class:`Row` objects have exactly the same columns and their members " +"are equal, they compare equal." +msgstr "如果两个 :class:`Row` 对象具有完全相同的列并且其成员均相等,则它们的比较结果为相等。" + +#: ../../library/sqlite3.rst:827 +msgid "" +"This method returns a list of column names. Immediately after a query, it is" +" the first member of each tuple in :attr:`Cursor.description`." +msgstr "此方法会在一次查询之后立即返回一个列名称的列表,它是 :attr:`Cursor.description` 中每个元组的第一个成员。" + +#: ../../library/sqlite3.rst:830 +msgid "Added support of slicing." +msgstr "添加了对切片操作的支持。" + +#: ../../library/sqlite3.rst:833 +msgid "Let's assume we initialize a table as in the example given above::" +msgstr "让我们假设我们如上面的例子所示初始化一个表::" + +#: ../../library/sqlite3.rst:845 +msgid "Now we plug :class:`Row` in::" +msgstr "现在我们将 :class:`Row` 插入::" + +#: ../../library/sqlite3.rst:877 +msgid "Exceptions" +msgstr "异常" + +#: ../../library/sqlite3.rst:881 +msgid "A subclass of :exc:`Exception`." +msgstr ":exc:`Exception` 的一个子类。" + +#: ../../library/sqlite3.rst:885 +msgid "" +"The base class of the other exceptions in this module. It is a subclass of " +":exc:`Exception`." +msgstr "此模块中其他异常的基类。 它是 :exc:`Exception` 的一个子类。" + +#: ../../library/sqlite3.rst:890 +msgid "Exception raised for errors that are related to the database." +msgstr "针对数据库相关错误引发的异常。" + +#: ../../library/sqlite3.rst:894 +msgid "" +"Exception raised when the relational integrity of the database is affected, " +"e.g. a foreign key check fails. It is a subclass of :exc:`DatabaseError`." +msgstr "当数据库的关系一致性受到影响时引发的异常。 例如外键检查失败等。 它是 :exc:`DatabaseError` 的子类。" + +#: ../../library/sqlite3.rst:899 +msgid "" +"Exception raised for programming errors, e.g. table not found or already " +"exists, syntax error in the SQL statement, wrong number of parameters " +"specified, etc. It is a subclass of :exc:`DatabaseError`." +msgstr "" +"编程错误引发的异常,例如表未找到或已存在,SQL 语句存在语法错误,指定的形参数量错误等。 它是 :exc:`DatabaseError` 的子类。" + +#: ../../library/sqlite3.rst:905 +msgid "" +"Exception raised for errors that are related to the database's operation and" +" not necessarily under the control of the programmer, e.g. an unexpected " +"disconnect occurs, the data source name is not found, a transaction could " +"not be processed, etc. It is a subclass of :exc:`DatabaseError`." +msgstr "" +"与数据库操作相关而不一定能受程序员掌控的错误引发的异常,例如发生非预期的连接中断,数据源名称未找到,事务无法被执行等。 它是 " +":exc:`DatabaseError` 的子类。" + +#: ../../library/sqlite3.rst:912 +msgid "" +"Exception raised in case a method or database API was used which is not " +"supported by the database, e.g. calling the :meth:`~Connection.rollback` " +"method on a connection that does not support transaction or has transactions" +" turned off. It is a subclass of :exc:`DatabaseError`." +msgstr "" +"在使用了某个数据库不支持的方法或数据库 API 时引发的异常,例如在一个不支持事务或禁用了事务的连接上调用 " +":meth:`~Connection.rollback` 方法等。 它是 :exc:`DatabaseError` 的子类。" + +#: ../../library/sqlite3.rst:921 +msgid "SQLite and Python types" +msgstr "SQLite 与 Python 类型" + +#: ../../library/sqlite3.rst:925 +msgid "Introduction" +msgstr "概述" + +#: ../../library/sqlite3.rst:927 +msgid "" +"SQLite natively supports the following types: ``NULL``, ``INTEGER``, " +"``REAL``, ``TEXT``, ``BLOB``." +msgstr "SQLite 原生支持如下的类型: ``NULL``,``INTEGER``,``REAL``,``TEXT``,``BLOB``。" + +#: ../../library/sqlite3.rst:930 +msgid "" +"The following Python types can thus be sent to SQLite without any problem:" +msgstr "因此可以将以下Python类型发送到SQLite而不会出现任何问题:" + +#: ../../library/sqlite3.rst:933 ../../library/sqlite3.rst:950 +msgid "Python type" +msgstr "Python 类型" + +#: ../../library/sqlite3.rst:933 ../../library/sqlite3.rst:950 +msgid "SQLite type" +msgstr "SQLite 类型" + +#: ../../library/sqlite3.rst:935 ../../library/sqlite3.rst:952 +msgid ":const:`None`" +msgstr ":const:`None`" + +#: ../../library/sqlite3.rst:935 ../../library/sqlite3.rst:952 +msgid "``NULL``" +msgstr "``NULL``" + +#: ../../library/sqlite3.rst:937 ../../library/sqlite3.rst:954 +msgid ":class:`int`" +msgstr ":class:`int`" + +#: ../../library/sqlite3.rst:937 ../../library/sqlite3.rst:954 +msgid "``INTEGER``" +msgstr "``INTEGER``" + +#: ../../library/sqlite3.rst:939 ../../library/sqlite3.rst:956 +msgid ":class:`float`" +msgstr ":class:`float`" + +#: ../../library/sqlite3.rst:939 ../../library/sqlite3.rst:956 +msgid "``REAL``" +msgstr "``REAL``" + +#: ../../library/sqlite3.rst:941 +msgid ":class:`str`" +msgstr ":class:`str`" + +#: ../../library/sqlite3.rst:941 ../../library/sqlite3.rst:958 +msgid "``TEXT``" +msgstr "``TEXT``" + +#: ../../library/sqlite3.rst:943 ../../library/sqlite3.rst:961 +msgid ":class:`bytes`" +msgstr ":class:`bytes`" + +#: ../../library/sqlite3.rst:943 ../../library/sqlite3.rst:961 +msgid "``BLOB``" +msgstr "``BLOB``" + +#: ../../library/sqlite3.rst:947 +msgid "This is how SQLite types are converted to Python types by default:" +msgstr "这是SQLite类型默认转换为Python类型的方式:" + +#: ../../library/sqlite3.rst:958 +msgid "depends on :attr:`~Connection.text_factory`, :class:`str` by default" +msgstr "取决于 :attr:`~Connection.text_factory` , 默认为 :class:`str`" + +#: ../../library/sqlite3.rst:964 +msgid "" +"The type system of the :mod:`sqlite3` module is extensible in two ways: you " +"can store additional Python types in an SQLite database via object " +"adaptation, and you can let the :mod:`sqlite3` module convert SQLite types " +"to different Python types via converters." +msgstr "" +":mod:`sqlite3` 模块的类型系统可通过两种方式来扩展:你可以通过对象适配将额外的 Python 类型保存在 SQLite " +"数据库中,你也可以让 :mod:`sqlite3` 模块通过转换器将 SQLite 类型转换为不同的 Python 类型。" + +#: ../../library/sqlite3.rst:971 +msgid "Using adapters to store additional Python types in SQLite databases" +msgstr "使用适配器将额外的 Python 类型保存在 SQLite 数据库中。" + +#: ../../library/sqlite3.rst:973 +msgid "" +"As described before, SQLite supports only a limited set of types natively. " +"To use other Python types with SQLite, you must **adapt** them to one of the" +" sqlite3 module's supported types for SQLite: one of NoneType, int, float, " +"str, bytes." +msgstr "" +"如上文所述,SQLite 只包含对有限类型集的原生支持。 要让 SQLite 能使用其他 Python 类型,你必须将它们 **适配** 至 " +"sqlite3 模块所支持的 SQLite 类型中的一种:NoneType, int, float, str, bytes。" + +#: ../../library/sqlite3.rst:978 +msgid "" +"There are two ways to enable the :mod:`sqlite3` module to adapt a custom " +"Python type to one of the supported ones." +msgstr "有两种方式能让 :mod:`sqlite3` 模块将某个定制的 Python 类型适配为受支持的类型。" + +#: ../../library/sqlite3.rst:983 +msgid "Letting your object adapt itself" +msgstr "让对象自行适配" + +#: ../../library/sqlite3.rst:985 +msgid "" +"This is a good approach if you write the class yourself. Let's suppose you " +"have a class like this::" +msgstr "如果类是你自己编写的,这将是一个很好的方式。 假设你有这样一个类::" + +#: ../../library/sqlite3.rst:992 +msgid "" +"Now you want to store the point in a single SQLite column. First you'll " +"have to choose one of the supported types to be used for representing the " +"point. Let's just use str and separate the coordinates using a semicolon. " +"Then you need to give your class a method ``__conform__(self, protocol)`` " +"which must return the converted value. The parameter *protocol* will be " +":class:`PrepareProtocol`." +msgstr "" +"现在你可将这种点对象保存在一个 SQLite 列中。 首先你必须选择一种受支持的类型用来表示点对象。 让我们就用 str 并使用一个分号来分隔坐标值。 " +"然后你需要给你的类加一个方法 ``__conform__(self, protocol)``,它必须返回转换后的值。 形参 *protocol* 将为 " +":class:`PrepareProtocol`。" + +#: ../../library/sqlite3.rst:1002 +msgid "Registering an adapter callable" +msgstr "注册可调用的适配器" + +#: ../../library/sqlite3.rst:1004 +msgid "" +"The other possibility is to create a function that converts the type to the " +"string representation and register the function with " +":meth:`register_adapter`." +msgstr "另一种可能的做法是创建一个将该类型转换为字符串表示的函数并使用 :meth:`register_adapter` 注册该函数。" + +#: ../../library/sqlite3.rst:1009 +msgid "" +"The :mod:`sqlite3` module has two default adapters for Python's built-in " +":class:`datetime.date` and :class:`datetime.datetime` types. Now let's " +"suppose we want to store :class:`datetime.datetime` objects not in ISO " +"representation, but as a Unix timestamp." +msgstr "" +":mod:`sqlite3` 模块有两个适配器可用于 Python 的内置 :class:`datetime.date` 和 " +":class:`datetime.datetime` 类型。 现在假设我们想要存储 :class:`datetime.datetime` " +"对象,但不是表示为 ISO 格式,而是表示为 Unix 时间戳。" + +#: ../../library/sqlite3.rst:1018 +msgid "Converting SQLite values to custom Python types" +msgstr "将SQLite 值转换为自定义Python 类型" + +#: ../../library/sqlite3.rst:1020 +msgid "" +"Writing an adapter lets you send custom Python types to SQLite. But to make " +"it really useful we need to make the Python to SQLite to Python roundtrip " +"work." +msgstr "" +"编写适配器让你可以将定制的 Python 类型发送给 SQLite。 但要令它真正有用,我们需要实现从 Python 到 SQLite 再回到 " +"Python 的双向转换。" + +#: ../../library/sqlite3.rst:1023 +msgid "Enter converters." +msgstr "输入转换器。" + +#: ../../library/sqlite3.rst:1025 +msgid "" +"Let's go back to the :class:`Point` class. We stored the x and y coordinates" +" separated via semicolons as strings in SQLite." +msgstr "让我们回到 :class:`Point` 类。 我们以字符串形式在 SQLite 中存储了 x 和 y 坐标值。" + +#: ../../library/sqlite3.rst:1028 +msgid "" +"First, we'll define a converter function that accepts the string as a " +"parameter and constructs a :class:`Point` object from it." +msgstr "首先,我们将定义一个转换器函数,它接受这样的字符串作为形参并根据该参数构造一个 :class:`Point` 对象。" + +#: ../../library/sqlite3.rst:1033 +msgid "" +"Converter functions **always** get called with a :class:`bytes` object, no " +"matter under which data type you sent the value to SQLite." +msgstr "转换器函数在调用时 **总是** 会附带一个 :class:`bytes` 对象,无论你将何种数据类型的值发给 SQLite。" + +#: ../../library/sqlite3.rst:1042 +msgid "" +"Now you need to make the :mod:`sqlite3` module know that what you select " +"from the database is actually a point. There are two ways of doing this:" +msgstr "现在你需要让 :mod:`sqlite3` 模块知道你从数据库中选取的其实是一个点对象。 有两种方式都可以做到这件事:" + +#: ../../library/sqlite3.rst:1045 +msgid "Implicitly via the declared type" +msgstr "隐式的声明类型" + +#: ../../library/sqlite3.rst:1047 +msgid "Explicitly via the column name" +msgstr "显式的通过列名" + +#: ../../library/sqlite3.rst:1049 +msgid "" +"Both ways are described in section :ref:`sqlite3-module-contents`, in the " +"entries for the constants :const:`PARSE_DECLTYPES` and " +":const:`PARSE_COLNAMES`." +msgstr "" +"这两种方式会在 :ref:`sqlite3-module-contents` 一节中描述,相应条目为 :const:`PARSE_DECLTYPES` " +"和 :const:`PARSE_COLNAMES` 常量。" + +#: ../../library/sqlite3.rst:1052 +msgid "The following example illustrates both approaches." +msgstr "下面的示例说明了这两种方法。" + +#: ../../library/sqlite3.rst:1058 +msgid "Default adapters and converters" +msgstr "默认适配器和转换器" + +#: ../../library/sqlite3.rst:1060 +msgid "" +"There are default adapters for the date and datetime types in the datetime " +"module. They will be sent as ISO dates/ISO timestamps to SQLite." +msgstr "" +"对于 datetime 模块中的 date 和 datetime 类型已提供了默认的适配器。 它们将会以 ISO 日期/ISO 时间戳的形式发给 " +"SQLite。" + +#: ../../library/sqlite3.rst:1063 +msgid "" +"The default converters are registered under the name \"date\" for " +":class:`datetime.date` and under the name \"timestamp\" for " +":class:`datetime.datetime`." +msgstr "" +"默认转换器使用的注册名称是针对 :class:`datetime.date` 的 \"date\" 和针对 " +":class:`datetime.datetime` 的 \"timestamp\"。" + +#: ../../library/sqlite3.rst:1067 +msgid "" +"This way, you can use date/timestamps from Python without any additional " +"fiddling in most cases. The format of the adapters is also compatible with " +"the experimental SQLite date/time functions." +msgstr "" +"通过这种方式,你可以在大多数情况下使用 Python 的 date/timestamp 对象而无须任何额外处理。 适配器的格式还与实验性的 SQLite" +" date/time 函数兼容。" + +#: ../../library/sqlite3.rst:1071 +msgid "The following example demonstrates this." +msgstr "下面的示例演示了这一点。" + +#: ../../library/sqlite3.rst:1075 +msgid "" +"If a timestamp stored in SQLite has a fractional part longer than 6 numbers," +" its value will be truncated to microsecond precision by the timestamp " +"converter." +msgstr "如果存储在 SQLite 中的时间戳的小数位多于 6 个数字,则时间戳转换器会将该值截断至微秒精度。" + +#: ../../library/sqlite3.rst:1081 +msgid "" +"The default \"timestamp\" converter ignores UTC offsets in the database and " +"always returns a naive :class:`datetime.datetime` object. To preserve UTC " +"offsets in timestamps, either leave converters disabled, or register an " +"offset-aware converter with :func:`register_converter`." +msgstr "" +"默认的 \"时间戳\" 转换器忽略了数据库中的 UTC 偏移,总是返回一个原生的 :class:`datetime.datetime` " +"对象。要在时间戳中保留 UTC 偏移,可以不使用转换器,或者用 :func:`register_converter` 注册一个偏移感知的转换器。" + +#: ../../library/sqlite3.rst:1089 +msgid "Controlling Transactions" +msgstr "控制事务" + +#: ../../library/sqlite3.rst:1091 +msgid "" +"The underlying ``sqlite3`` library operates in ``autocommit`` mode by " +"default, but the Python :mod:`sqlite3` module by default does not." +msgstr "" +"底层的 ``sqlite3`` 库默认会以 ``autocommit`` 模式运行,但 Python 的 :mod:`sqlite3` " +"模块默认则不使用此模式。" + +#: ../../library/sqlite3.rst:1094 +msgid "" +"``autocommit`` mode means that statements that modify the database take " +"effect immediately. A ``BEGIN`` or ``SAVEPOINT`` statement disables " +"``autocommit`` mode, and a ``COMMIT``, a ``ROLLBACK``, or a ``RELEASE`` that" +" ends the outermost transaction, turns ``autocommit`` mode back on." +msgstr "" +"``autocommit`` 模式意味着修改数据库的操作会立即生效。 ``BEGIN`` 或 ``SAVEPOINT`` 语句会禁用 " +"``autocommit`` 模式,而用于结束外层事务的 ``COMMIT``, ``ROLLBACK`` 或 ``RELEASE`` 则会恢复 " +"``autocommit`` 模式。" + +#: ../../library/sqlite3.rst:1099 +msgid "" +"The Python :mod:`sqlite3` module by default issues a ``BEGIN`` statement " +"implicitly before a Data Modification Language (DML) statement (i.e. " +"``INSERT``/``UPDATE``/``DELETE``/``REPLACE``)." +msgstr "" +"Python 的 :mod:`sqlite3` 模块默认会在数据修改语言 (DML) 类语句 (即 " +"``INSERT``/``UPDATE``/``DELETE``/``REPLACE``) 之前隐式地执行一条 ``BEGIN`` 语句。" + +#: ../../library/sqlite3.rst:1103 +msgid "" +"You can control which kind of ``BEGIN`` statements :mod:`sqlite3` implicitly" +" executes via the *isolation_level* parameter to the :func:`connect` call, " +"or via the :attr:`isolation_level` property of connections. If you specify " +"no *isolation_level*, a plain ``BEGIN`` is used, which is equivalent to " +"specifying ``DEFERRED``. Other possible values are ``IMMEDIATE`` and " +"``EXCLUSIVE``." +msgstr "" +"你可以控制 :mod:`sqlite3` 隐式执行的 ``BEGIN`` 语句的种类,具体做法是通过将 *isolation_level* 形参传给 " +":func:`connect` 调用,或者通过指定连接的 :attr:`isolation_level` 属性。 如果你没有指定 " +"*isolation_level*,将使用基本的 ``BEGIN``,它等价于指定 ``DEFERRED``。 其他可能的值为 " +"``IMMEDIATE`` 和 ``EXCLUSIVE``。" + +#: ../../library/sqlite3.rst:1110 +msgid "" +"You can disable the :mod:`sqlite3` module's implicit transaction management " +"by setting :attr:`isolation_level` to ``None``. This will leave the " +"underlying ``sqlite3`` library operating in ``autocommit`` mode. You can " +"then completely control the transaction state by explicitly issuing " +"``BEGIN``, ``ROLLBACK``, ``SAVEPOINT``, and ``RELEASE`` statements in your " +"code." +msgstr "" +"你可以禁用 :mod:`sqlite3` 模块的隐式事务管理,具体做法是将 :attr:`isolation_level` 设为 ``None``。 " +"这将使得下层的 ``sqlite3`` 库采用 ``autocommit`` 模式。 随后你可以通过在代码中显式地使用 ``BEGIN``, " +"``ROLLBACK``, ``SAVEPOINT`` 和 ``RELEASE`` 语句来完全控制事务状态。" + +#: ../../library/sqlite3.rst:1116 +msgid "" +"Note that :meth:`~Cursor.executescript` disregards :attr:`isolation_level`; " +"any transaction control must be added explicitly." +msgstr "" +"请注意 :meth:`~Cursor.executescript` 会忽略 " +":attr:`isolation_level`;任何事务控制必要要显式地添加。" + +#: ../../library/sqlite3.rst:1119 +msgid "" +":mod:`sqlite3` used to implicitly commit an open transaction before DDL " +"statements. This is no longer the case." +msgstr "以前 :mod:`sqlite3` 会在 DDL 语句之前隐式地提交未完成事务。 现在则不会再这样做。" + +#: ../../library/sqlite3.rst:1125 +msgid "Using :mod:`sqlite3` efficiently" +msgstr "有效使用 :mod:`sqlite3` " + +#: ../../library/sqlite3.rst:1129 +msgid "Using shortcut methods" +msgstr "使用快捷方式" + +#: ../../library/sqlite3.rst:1131 +msgid "" +"Using the nonstandard :meth:`execute`, :meth:`executemany` and " +":meth:`executescript` methods of the :class:`Connection` object, your code " +"can be written more concisely because you don't have to create the (often " +"superfluous) :class:`Cursor` objects explicitly. Instead, the " +":class:`Cursor` objects are created implicitly and these shortcut methods " +"return the cursor objects. This way, you can execute a ``SELECT`` statement " +"and iterate over it directly using only a single call on the " +":class:`Connection` object." +msgstr "" +"使用 :class:`Connection` 对象的非标准 :meth:`execute`, :meth:`executemany` 和 " +":meth:`executescript` 方法,可以更简洁地编写代码,因为不必显式创建(通常是多余的) :class:`Cursor` 对象。相反, " +":class:`Cursor` 对象是隐式创建的,这些快捷方法返回游标对象。这样,只需对 :class:`Connection` " +"对象调用一次,就能直接执行 ``SELECT`` 语句并遍历对象。" + +#: ../../library/sqlite3.rst:1143 +msgid "Accessing columns by name instead of by index" +msgstr "通过名称而不是索引访问索引" + +#: ../../library/sqlite3.rst:1145 +msgid "" +"One useful feature of the :mod:`sqlite3` module is the built-in " +":class:`sqlite3.Row` class designed to be used as a row factory." +msgstr ":mod:`sqlite3` 模块的一个有用功能是内置的 :class:`sqlite3.Row` 类,该类旨在用作行工厂。" + +#: ../../library/sqlite3.rst:1148 +msgid "" +"Rows wrapped with this class can be accessed both by index (like tuples) and" +" case-insensitively by name:" +msgstr "该类的行装饰器可以用索引(如元组)和不区分大小写的名称访问:" + +#: ../../library/sqlite3.rst:1155 +msgid "Using the connection as a context manager" +msgstr "使用连接作为上下文管理器" + +#: ../../library/sqlite3.rst:1157 +msgid "" +"Connection objects can be used as context managers that automatically commit" +" or rollback transactions. In the event of an exception, the transaction is" +" rolled back; otherwise, the transaction is committed:" +msgstr "连接对象可以用来作为上下文管理器,它可以自动提交或者回滚事务。如果出现异常,事务会被回滚;否则,事务会被提交。" + +#: ../../library/sqlite3.rst:1166 +msgid "Footnotes" +msgstr "备注" + +#: ../../library/sqlite3.rst:1167 +msgid "" +"The sqlite3 module is not built with loadable extension support by default, " +"because some platforms (notably macOS) have SQLite libraries which are " +"compiled without this feature. To get loadable extension support, you must " +"pass ``--enable-loadable-sqlite-extensions`` to configure." +msgstr "" diff --git a/library/ssl.po b/library/ssl.po new file mode 100644 index 000000000..16d0a3b1a --- /dev/null +++ b/library/ssl.po @@ -0,0 +1,3693 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) 2001-2025, Python Software Foundation +# This file is distributed under the same license as the Python package. +# FIRST AUTHOR , YEAR. +# +# Translators: +# ww song , 2018 +# cdarlint , 2019 +# ppcfish , 2019 +# 之航 P , 2020 +# Hissy , 2020 +# Freesand Leo , 2021 +# Alpha Du , 2022 +# Rafael Fontenelle , 2025 +# +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: Python 3.9\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2025-02-07 16:40+0000\n" +"PO-Revision-Date: 2017-02-16 23:27+0000\n" +"Last-Translator: Rafael Fontenelle , 2025\n" +"Language-Team: Chinese (China) (https://app.transifex.com/python-doc/teams/5390/zh_CN/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: zh_CN\n" +"Plural-Forms: nplurals=1; plural=0;\n" + +#: ../../library/ssl.rst:2 +msgid ":mod:`ssl` --- TLS/SSL wrapper for socket objects" +msgstr ":mod:`ssl` --- 套接字对象的 TLS/SSL 包装器" + +#: ../../library/ssl.rst:10 +msgid "**Source code:** :source:`Lib/ssl.py`" +msgstr "**源代码:** :source:`Lib/ssl.py`" + +#: ../../library/ssl.rst:18 +msgid "" +"This module provides access to Transport Layer Security (often known as " +"\"Secure Sockets Layer\") encryption and peer authentication facilities for " +"network sockets, both client-side and server-side. This module uses the " +"OpenSSL library. It is available on all modern Unix systems, Windows, macOS," +" and probably additional platforms, as long as OpenSSL is installed on that " +"platform." +msgstr "" +"该模块提供了对传输层安全(通常称为 \"安全套接字层\")加密和网络套接字的对等认证设施的访问,包括客户端和服务器端。 该模块使用 OpenSSL " +"库。它可以在所有现代 Unix 系统、 Windows 、 macOS 和可能的其他平台上使用,只要 OpenSSL 安装在该平台上。" + +#: ../../library/ssl.rst:26 +msgid "" +"Some behavior may be platform dependent, since calls are made to the " +"operating system socket APIs. The installed version of OpenSSL may also " +"cause variations in behavior. For example, TLSv1.1 and TLSv1.2 come with " +"openssl version 1.0.1." +msgstr "" +"某些行为可能具有平台依赖,因为调用是根据操作系统的嵌套字API。不同版本的Open SSL也会引起差异:例如Open SSL版本1.0.1 " +"自带TLSv1.1 和 TLSv1.2 " + +#: ../../library/ssl.rst:32 +msgid "" +"Don't use this module without reading the :ref:`ssl-security`. Doing so may" +" lead to a false sense of security, as the default settings of the ssl " +"module are not necessarily appropriate for your application." +msgstr "" +"在阅读 :ref:`ssl-security` 前不要使用此模块。 这样做可能会导致虚假的安全感,因为ssl模块的默认设置不一定适合你的应用程序。" + +#: ../../library/ssl.rst:37 +msgid "" +"This section documents the objects and functions in the ``ssl`` module; for " +"more general information about TLS, SSL, and certificates, the reader is " +"referred to the documents in the \"See Also\" section at the bottom." +msgstr "文档本文档记录 ``ssl`` 模块的对象和函数;更多关于TLS,SSL,和证书的信息,请参阅下方的“详情”选项" + +#: ../../library/ssl.rst:41 +msgid "" +"This module provides a class, :class:`ssl.SSLSocket`, which is derived from " +"the :class:`socket.socket` type, and provides a socket-like wrapper that " +"also encrypts and decrypts the data going over the socket with SSL. It " +"supports additional methods such as :meth:`getpeercert`, which retrieves the" +" certificate of the other side of the connection, and :meth:`cipher`, which " +"retrieves the cipher being used for the secure connection." +msgstr "" +"本模块提供了一个类 :class:`ssl.SSLSocket`,它派生自 :class:`socket.socket` " +"类型,并提供类似套接字的包装器,也能够对通过带 SSL 套接字的数据进行加密和解密。 它支持一些额外方法例如 " +":meth:`getpeercert`,该方法可从连接的另一端获取证书,还有 :meth:`cipher`,该方法可获取安全连接所使用的密码。" + +#: ../../library/ssl.rst:48 +msgid "" +"For more sophisticated applications, the :class:`ssl.SSLContext` class helps" +" manage settings and certificates, which can then be inherited by SSL " +"sockets created through the :meth:`SSLContext.wrap_socket` method." +msgstr "" +"对于更复杂的应用程序,:class:`ssl.SSLContext` 类有助于管理设置项和证书,进而可以被使用 " +":meth:`SSLContext.wrap_socket` 方法创建的 SSL 套接字继承。" + +#: ../../library/ssl.rst:52 +msgid "Updated to support linking with OpenSSL 1.1.0" +msgstr "更新以支持和 OpenSSL 1.1.0 的链接" + +#: ../../library/ssl.rst:57 +msgid "" +"OpenSSL 0.9.8, 1.0.0 and 1.0.1 are deprecated and no longer supported. In " +"the future the ssl module will require at least OpenSSL 1.0.2 or 1.1.0." +msgstr "" +"OpenSSL 0.9.8、1.0.0 和 1.0.1 已过时,将不再被支持。在 ssl 模块未来的版本中,最低需要 OpenSSL 1.0.2 或 " +"1.1.0。" + +#: ../../library/ssl.rst:63 +msgid "Functions, Constants, and Exceptions" +msgstr "方法、常量和异常处理" + +#: ../../library/ssl.rst:67 +msgid "Socket creation" +msgstr "套接字创建" + +#: ../../library/ssl.rst:69 +msgid "" +"Since Python 3.2 and 2.7.9, it is recommended to use the " +":meth:`SSLContext.wrap_socket` of an :class:`SSLContext` instance to wrap " +"sockets as :class:`SSLSocket` objects. The helper functions " +":func:`create_default_context` returns a new context with secure default " +"settings. The old :func:`wrap_socket` function is deprecated since it is " +"both inefficient and has no support for server name indication (SNI) and " +"hostname matching." +msgstr "" +"从 Python 3.2 和 2.7.9 开始,建议使用 :class:`SSLContext` 实例的 " +":meth:`SSLContext.wrap_socket` 来将套接字包装为 :class:`SSLSocket` 对象。 辅助函数 " +":func:`create_default_context` 会返回一个新的带有安全默认设置的上下文。 旧的 :func:`wrap_socket` " +"函数已被弃用,因为它效率较差并且不支持服务器名称提示(SNI)和主机匹配。" + +#: ../../library/ssl.rst:77 +msgid "Client socket example with default context and IPv4/IPv6 dual stack::" +msgstr "客户端套接字实例,采用默认上下文和IPv4/IPv6双栈::" + +#: ../../library/ssl.rst:90 +msgid "Client socket example with custom context and IPv4::" +msgstr "客户端套接字示例,带有自定义上下文和IPv4::" + +#: ../../library/ssl.rst:102 +msgid "Server socket example listening on localhost IPv4::" +msgstr "服务器套接字实例,在localhost上监听IPv4::" + +#: ../../library/ssl.rst:116 +msgid "Context creation" +msgstr "上下文创建" + +#: ../../library/ssl.rst:118 +msgid "" +"A convenience function helps create :class:`SSLContext` objects for common " +"purposes." +msgstr "便捷函数,可以帮助创建 :class:`SSLContext` 对象,用于常见的目的。" + +#: ../../library/ssl.rst:123 +msgid "" +"Return a new :class:`SSLContext` object with default settings for the given " +"*purpose*. The settings are chosen by the :mod:`ssl` module, and usually " +"represent a higher security level than when calling the :class:`SSLContext` " +"constructor directly." +msgstr "" +"返回一个新的 :class:`SSLContext` 对象,使用给定 *purpose* 的默认设置。 该设置由 :mod:`ssl` " +"模块选择,并且通常是代表一个比直接调用 :class:`SSLContext` 构造器时更高的安全等级。" + +#: ../../library/ssl.rst:128 +msgid "" +"*cafile*, *capath*, *cadata* represent optional CA certificates to trust for" +" certificate verification, as in :meth:`SSLContext.load_verify_locations`. " +"If all three are :const:`None`, this function can choose to trust the " +"system's default CA certificates instead." +msgstr "" +"*cafile*, *capath*, *cadata* 代表用于进行证书核验的可选受信任 CA 证书,与 " +":meth:`SSLContext.load_verify_locations` 的一致。 如果三个参数均为 " +":const:`None`,此函数可以转而选择信任系统的默认 CA 证书。" + +#: ../../library/ssl.rst:134 +msgid "" +"The settings are: :data:`PROTOCOL_TLS`, :data:`OP_NO_SSLv2`, and " +":data:`OP_NO_SSLv3` with high encryption cipher suites without RC4 and " +"without unauthenticated cipher suites. Passing :data:`~Purpose.SERVER_AUTH` " +"as *purpose* sets :data:`~SSLContext.verify_mode` to :data:`CERT_REQUIRED` " +"and either loads CA certificates (when at least one of *cafile*, *capath* or" +" *cadata* is given) or uses :meth:`SSLContext.load_default_certs` to load " +"default CA certificates." +msgstr "" +"设置为: :data:`PROTOCOL_TLS`, :data:`OP_NO_SSLv2` 和 :data:`OP_NO_SSLv3`,带有不含 " +"RC4 及未认证的高强度加密密码套件。 传入 :data:`~Purpose.SERVER_AUTH` 作为 *purpose* 会将 " +":data:`~SSLContext.verify_mode` 设为 :data:`CERT_REQUIRED` 并加载 CA 证书 (若给出 " +"*cafile*, *capath* 或 *cadata* 之一) 或用 :meth:`SSLContext.load_default_certs` " +"加载默认 CA 证书。" + +#: ../../library/ssl.rst:142 +msgid "" +"When :attr:`~SSLContext.keylog_filename` is supported and the environment " +"variable :envvar:`SSLKEYLOGFILE` is set, :func:`create_default_context` " +"enables key logging." +msgstr "" +"当 :attr:`~SSLContext.keylog_filename` 受支持并且设置了环境变量 :envvar:`SSLKEYLOGFILE` " +"时,:func:`create_default_context` 会启用密钥日志记录。" + +#: ../../library/ssl.rst:147 +msgid "" +"The protocol, options, cipher and other settings may change to more " +"restrictive values anytime without prior deprecation. The values represent " +"a fair balance between compatibility and security." +msgstr "协议、选项、密码和其他设置可随时更改为更具约束性的值而无须事先弃用。 这些值代表了兼容性和安全性之间的合理平衡。" + +#: ../../library/ssl.rst:151 +msgid "" +"If your application needs specific settings, you should create a " +":class:`SSLContext` and apply the settings yourself." +msgstr "如果你的应用需要特定的设置,你应当创建一个 :class:`SSLContext` 并自行应用设置。" + +#: ../../library/ssl.rst:155 +msgid "" +"If you find that when certain older clients or servers attempt to connect " +"with a :class:`SSLContext` created by this function that they get an error " +"stating \"Protocol or cipher suite mismatch\", it may be that they only " +"support SSL3.0 which this function excludes using the :data:`OP_NO_SSLv3`. " +"SSL3.0 is widely considered to be `completely broken " +"`_. If you still wish to continue to " +"use this function but still allow SSL 3.0 connections you can re-enable them" +" using::" +msgstr "" +"如果你发现当某些较旧的客户端或服务器尝试与用此函数创建的 :class:`SSLContext` 进行连接时收到了报错提示 \"Protocol or " +"cipher suite mismatch\",这可能是因为它们只支持 SSL3.0 而它被此函数用 :data:`OP_NO_SSLv3` 排除掉了。" +" SSL3.0 被广泛认为 `完全不可用 `_。 " +"如果你仍希望继续使用此函数但仍允许 SSL 3.0 连接,你可以使用以下代码重新启用它们::" + +#: ../../library/ssl.rst:171 +msgid "RC4 was dropped from the default cipher string." +msgstr "RC4 被从默认密码字符串中丢弃。" + +#: ../../library/ssl.rst:175 +msgid "ChaCha20/Poly1305 was added to the default cipher string." +msgstr "ChaCha20/Poly1305 被添加到默认密码字符串中。" + +#: ../../library/ssl.rst:177 +msgid "3DES was dropped from the default cipher string." +msgstr "3DES 被从默认密码字符串中丢弃。" + +#: ../../library/ssl.rst:181 +msgid "Support for key logging to :envvar:`SSLKEYLOGFILE` was added." +msgstr "增加了对密钥日志记录至 :envvar:`SSLKEYLOGFILE` 的支持。" + +#: ../../library/ssl.rst:185 +msgid "Exceptions" +msgstr "异常" + +#: ../../library/ssl.rst:189 +msgid "" +"Raised to signal an error from the underlying SSL implementation (currently " +"provided by the OpenSSL library). This signifies some problem in the " +"higher-level encryption and authentication layer that's superimposed on the " +"underlying network connection. This error is a subtype of :exc:`OSError`. " +"The error code and message of :exc:`SSLError` instances are provided by the " +"OpenSSL library." +msgstr "" +"引发此异常以提示来自下层 SSL 实现(目前由 OpenSSL 库提供)的错误。 它表示在下层网络连接之上叠加的高层级加密和验证层存在某种问题。 " +"此错误是 :exc:`OSError` 的一个子类型。 :exc:`SSLError` 实例的错误和消息是由 OpenSSL 库提供的。" + +#: ../../library/ssl.rst:196 +msgid ":exc:`SSLError` used to be a subtype of :exc:`socket.error`." +msgstr ":exc:`SSLError` 曾经是 :exc:`socket.error` 的一个子类型。" + +#: ../../library/ssl.rst:201 +msgid "" +"A string mnemonic designating the OpenSSL submodule in which the error " +"occurred, such as ``SSL``, ``PEM`` or ``X509``. The range of possible " +"values depends on the OpenSSL version." +msgstr "" +"一个字符串形式的助记符,用来指明发生错误的 OpenSSL 子模块,例如 ``SSL``, ``PEM`` 或 ``X509``。 可能的取值范围依赖于" +" OpenSSL 的版本。" + +#: ../../library/ssl.rst:209 +msgid "" +"A string mnemonic designating the reason this error occurred, for example " +"``CERTIFICATE_VERIFY_FAILED``. The range of possible values depends on the " +"OpenSSL version." +msgstr "" +"一个字符串形式的助记符,用来指明发生错误的原因,例如 ``CERTIFICATE_VERIFY_FAILED``。 可能的取值范围依赖于 OpenSSL" +" 的版本。" + +#: ../../library/ssl.rst:217 +msgid "" +"A subclass of :exc:`SSLError` raised when trying to read or write and the " +"SSL connection has been closed cleanly. Note that this doesn't mean that " +"the underlying transport (read TCP) has been closed." +msgstr "" +":exc:`SSLError` 的子类,当尝试读取或写入且 SSL 连接已被完全关闭时会被引发。 请注意这并不意味着下层的传输(读取 TCP)已被关闭。" + +#: ../../library/ssl.rst:225 +msgid "" +"A subclass of :exc:`SSLError` raised by a :ref:`non-blocking SSL socket " +"` when trying to read or write data, but more data needs to" +" be received on the underlying TCP transport before the request can be " +"fulfilled." +msgstr "" +":exc:`SSLError` 的子类,当尝试读取或写入数据,但在请求被满足之前还需要在下层的 TCP 传输上接收更多数据时会被 :ref:`非阻塞型 " +"SSL 套接字 ` 引发。" + +#: ../../library/ssl.rst:234 +msgid "" +"A subclass of :exc:`SSLError` raised by a :ref:`non-blocking SSL socket " +"` when trying to read or write data, but more data needs to" +" be sent on the underlying TCP transport before the request can be " +"fulfilled." +msgstr "" +":exc:`SSLError` 的子类,当尝试读取或写入数据,但在请求被满足之前还需要在下层的 TCP 传输上发送更多数据时会被 :ref:`非阻塞型 " +"SSL 套接字 ` 引发。" + +#: ../../library/ssl.rst:243 +msgid "" +"A subclass of :exc:`SSLError` raised when a system error was encountered " +"while trying to fulfill an operation on a SSL socket. Unfortunately, there " +"is no easy way to inspect the original errno number." +msgstr "" +":exc:`SSLError` 的子类,当尝试在 SSL 套接字上执行操作时遇到系统错误时会被引发。 不幸的是,没有简单的方式能检查原始 errno " +"编号。" + +#: ../../library/ssl.rst:251 +msgid "" +"A subclass of :exc:`SSLError` raised when the SSL connection has been " +"terminated abruptly. Generally, you shouldn't try to reuse the underlying " +"transport when this error is encountered." +msgstr ":exc:`SSLError` 的子类,当 SSL 连接被突然终止时会被引发。 通常,当遇到此错误时你不应再尝试重用下层的传输。" + +#: ../../library/ssl.rst:259 +msgid "" +"A subclass of :exc:`SSLError` raised when certificate validation has failed." +msgstr ":exc:`SSLError` 的子类,当证书验证失败时会被引发。" + +#: ../../library/ssl.rst:266 +msgid "A numeric error number that denotes the verification error." +msgstr "一个数字形式的错误编号,用于表示验证错误。" + +#: ../../library/ssl.rst:270 +msgid "A human readable string of the verification error." +msgstr "用于表示验证错误的人类可读的字符串。" + +#: ../../library/ssl.rst:274 +msgid "An alias for :exc:`SSLCertVerificationError`." +msgstr ":exc:`SSLCertVerificationError` 的别名。" + +#: ../../library/ssl.rst:276 +msgid "The exception is now an alias for :exc:`SSLCertVerificationError`." +msgstr "此异常现在是 :exc:`SSLCertVerificationError` 的别名。" + +#: ../../library/ssl.rst:281 +msgid "Random generation" +msgstr "随机生成" + +#: ../../library/ssl.rst:285 +msgid "" +"Return *num* cryptographically strong pseudo-random bytes. Raises an " +":class:`SSLError` if the PRNG has not been seeded with enough data or if the" +" operation is not supported by the current RAND method. :func:`RAND_status` " +"can be used to check the status of the PRNG and :func:`RAND_add` can be used" +" to seed the PRNG." +msgstr "" +"返回 *num* 个高加密强度伪随机字节数据。 如果 PRNG 未使用足够的数据作为随机种子或者如果当前 RAND 方法不支持该操作则会引发 " +":class:`SSLError`。 :func:`RAND_status` 可被用来检查 PRNG 的状态而 :func:`RAND_add` " +"可被用来为 PRNG 设置随机种子。" + +#: ../../library/ssl.rst:291 ../../library/ssl.rst:312 +msgid "For almost all applications :func:`os.urandom` is preferable." +msgstr "对于几乎所有应用程序都更推荐使用 :func:`os.urandom`。" + +#: ../../library/ssl.rst:293 +msgid "" +"Read the Wikipedia article, `Cryptographically secure pseudorandom number " +"generator (CSPRNG) " +"`_," +" to get the requirements of a cryptographically strong generator." +msgstr "" +"请阅读维基百科文章 `Cryptographically secure pseudorandom number generator (CSPRNG) " +"`_" +" 以了解对于高加密强度生成器的具体要求。" + +#: ../../library/ssl.rst:302 +msgid "" +"Return (bytes, is_cryptographic): bytes are *num* pseudo-random bytes, " +"is_cryptographic is ``True`` if the bytes generated are cryptographically " +"strong. Raises an :class:`SSLError` if the operation is not supported by the" +" current RAND method." +msgstr "" +"返回 (bytes, is_cryptographic): bytes 是 *num* 个伪随机字节数据,如果所生成的字节数据为高加密强度则 " +"is_cryptographic 为 ``True``。 如果当前 RAND 方法不支持此操作则会引发 :class:`SSLError`。" + +#: ../../library/ssl.rst:307 +msgid "" +"Generated pseudo-random byte sequences will be unique if they are of " +"sufficient length, but are not necessarily unpredictable. They can be used " +"for non-cryptographic purposes and for certain purposes in cryptographic " +"protocols, but usually not for key generation etc." +msgstr "" +"所生成的伪随机字节序列如果具有足够的长度则将会具有唯一性,并是并非不可预测。 " +"它们可被用于非加密目的以及加密协议中的特定目的,但通常不可被用于密钥生成等目的。" + +#: ../../library/ssl.rst:318 +msgid "" +"OpenSSL has deprecated :func:`ssl.RAND_pseudo_bytes`, use " +":func:`ssl.RAND_bytes` instead." +msgstr "" +"OpenSSL 已弃用了 :func:`ssl.RAND_pseudo_bytes`,请改用 :func:`ssl.RAND_bytes`。" + +#: ../../library/ssl.rst:323 +msgid "" +"Return ``True`` if the SSL pseudo-random number generator has been seeded " +"with 'enough' randomness, and ``False`` otherwise. You can use " +":func:`ssl.RAND_egd` and :func:`ssl.RAND_add` to increase the randomness of " +"the pseudo-random number generator." +msgstr "" +"如果 SSL 伪随机数生成器已使用‘足够的’随机性作为种子则返回 ``True``,否则返回 ``False``。 你可以使用 " +":func:`ssl.RAND_egd` 和 :func:`ssl.RAND_add` 来增加伪随机数生成器的随机性。" + +#: ../../library/ssl.rst:330 +msgid "" +"If you are running an entropy-gathering daemon (EGD) somewhere, and *path* " +"is the pathname of a socket connection open to it, this will read 256 bytes " +"of randomness from the socket, and add it to the SSL pseudo-random number " +"generator to increase the security of generated secret keys. This is " +"typically only necessary on systems without better sources of randomness." +msgstr "" +"如果你在某处运行了一个熵收集守护程序(EGD),且 *path* 是向其打开的套接字连接路径名,此函数将从该套接字读取 256 " +"个字节的随机性数据,并将其添加到 SSL 伪随机数生成器以增加所生成密钥的安全性。 此操作通常只在没有更好随机性源的系统上才是必要的。" + +#: ../../library/ssl.rst:336 +msgid "" +"See http://egd.sourceforge.net/ or http://prngd.sourceforge.net/ for sources" +" of entropy-gathering daemons." +msgstr "" +"请查看 http://egd.sourceforge.net/ 或 http://prngd.sourceforge.net/ " +"来了解有关熵收集守护程序源的信息。" + +#: ../../library/ssl.rst:339 +msgid "" +":ref:`Availability `: not available with LibreSSL and OpenSSL " +"> 1.1.0." +msgstr ":ref:`可用性 `: 对于 LibreSSL 和 OpenSSL > 1.1.0 不可用。" + +#: ../../library/ssl.rst:343 +msgid "" +"Mix the given *bytes* into the SSL pseudo-random number generator. The " +"parameter *entropy* (a float) is a lower bound on the entropy contained in " +"string (so you can always use :const:`0.0`). See :rfc:`1750` for more " +"information on sources of entropy." +msgstr "" +"将给定的 *bytes* 混合到 SSL 伪随机数生成器中。 形参 *entropy* (float 类型) 是数据所包含的熵的下界 " +"(因此你可以总是使用 :const:`0.0`)。 请查看 :rfc:`1750` 了解有关熵源的更多信息。" + +#: ../../library/ssl.rst:348 +msgid "Writable :term:`bytes-like object` is now accepted." +msgstr "现在接受可写的 :term:`字节类对象 `。" + +#: ../../library/ssl.rst:352 +msgid "Certificate handling" +msgstr "证书处理" + +#: ../../library/ssl.rst:360 +msgid "" +"Verify that *cert* (in decoded format as returned by " +":meth:`SSLSocket.getpeercert`) matches the given *hostname*. The rules " +"applied are those for checking the identity of HTTPS servers as outlined in " +":rfc:`2818`, :rfc:`5280` and :rfc:`6125`. In addition to HTTPS, this " +"function should be suitable for checking the identity of servers in various " +"SSL-based protocols such as FTPS, IMAPS, POPS and others." +msgstr "" +"验证 *cert* (使用 :meth:`SSLSocket.getpeercert` 所返回的已解码格式) 是否匹配给定的 *hostname*。 " +"所应用的规则是在 :rfc:`2818`, :rfc:`5280` 和 :rfc:`6125` 中描述的检查 HTTPS 服务器身份的规则。 除了 " +"HTTPS,此函数还应当适用于各种基于 SSL 协议的服务器身份检查操作,例如 FTPS, IMAPS, POPS 等等。" + +#: ../../library/ssl.rst:367 +msgid "" +":exc:`CertificateError` is raised on failure. On success, the function " +"returns nothing::" +msgstr "失败时引发 :exc:`CertificateError`。 成功时此函数无返回值::" + +#: ../../library/ssl.rst:380 +msgid "" +"The function now follows :rfc:`6125`, section 6.4.3 and does neither match " +"multiple wildcards (e.g. ``*.*.com`` or ``*a*.example.org``) nor a wildcard " +"inside an internationalized domain names (IDN) fragment. IDN A-labels such " +"as ``www*.xn--pthon-kva.org`` are still supported, but ``x*.python.org`` no " +"longer matches ``xn--tda.python.org``." +msgstr "" +"此函数现在遵循 :rfc:`6125`, 6.4.3 小节,它不会匹配多个通配符 (例如 ``*.*.com`` 或 " +"``*a*.example.org``) 也不匹配国际化域名 (IDN) 片段内部的通配符。 IDN A 标签例如 ``www*.xn--pthon-" +"kva.org`` 仍然受支持,但 ``x*.python.org`` 不再能匹配 ``xn--tda.python.org``。" + +#: ../../library/ssl.rst:387 +msgid "" +"Matching of IP addresses, when present in the subjectAltName field of the " +"certificate, is now supported." +msgstr "现在支持匹配存在于证书的 subjectAltName 字段中的 IP 地址。" + +#: ../../library/ssl.rst:391 +msgid "" +"The function is no longer used to TLS connections. Hostname matching is now " +"performed by OpenSSL." +msgstr "此函数不再被用于 TLS 连接。 主机匹配现在是由 OpenSSL 执行的。" + +#: ../../library/ssl.rst:395 +msgid "" +"Allow wildcard when it is the leftmost and the only character in that " +"segment. Partial wildcards like ``www*.example.com`` are no longer " +"supported." +msgstr "允许位于段的最左端且为唯一字符的通配符。 部分通配符例如 ``www*.example.com`` 已不再受支持。" + +#: ../../library/ssl.rst:403 +msgid "" +"Return the time in seconds since the Epoch, given the ``cert_time`` string " +"representing the \"notBefore\" or \"notAfter\" date from a certificate in " +"``\"%b %d %H:%M:%S %Y %Z\"`` strptime format (C locale)." +msgstr "" +"返回距离 Unix 纪元零时的秒数,给定的 ``cert_time`` 字符串代表来自证书的 \"notBefore\" 或 \"notAfter\" " +"日期值,采用 ``\"%b %d %H:%M:%S %Y %Z\"`` strptime 格式(C 区域)。" + +#: ../../library/ssl.rst:408 +msgid "Here's an example:" +msgstr "以下为示例代码:" + +#: ../../library/ssl.rst:420 +msgid "\"notBefore\" or \"notAfter\" dates must use GMT (:rfc:`5280`)." +msgstr "\"notBefore\" 或 \"notAfter\" 日期值必须使用 GMT (:rfc:`5280`)。" + +#: ../../library/ssl.rst:422 +msgid "" +"Interpret the input time as a time in UTC as specified by 'GMT' timezone in " +"the input string. Local timezone was used previously. Return an integer (no " +"fractions of a second in the input format)" +msgstr "" +"将输入时间解读为 UTC 时间,基于输入字符串中指明的 'GMT' 时区。 在之前使用的是本地时区。 返回一个整数(不带输入格式中秒的分数部分)" + +#: ../../library/ssl.rst:430 +msgid "" +"Given the address ``addr`` of an SSL-protected server, as a (*hostname*, " +"*port-number*) pair, fetches the server's certificate, and returns it as a " +"PEM-encoded string. If ``ssl_version`` is specified, uses that version of " +"the SSL protocol to attempt to connect to the server. If ``ca_certs`` is " +"specified, it should be a file containing a list of root certificates, the " +"same format as used for the same parameter in " +":meth:`SSLContext.wrap_socket`. The call will attempt to validate the " +"server certificate against that set of root certificates, and will fail if " +"the validation attempt fails." +msgstr "" +"带 SSL 保护的服务器的地址 ``addr`` 以 (*hostname*, *port-number*) 对的形式给出,获取服务器的证书,并将其以 " +"PEM 编码字符串的形式返回。 如果指定了 ``ssl_version``,则使用该版本的 SSL 协议尝试连接服务器。 如果指定了 " +"``ca_certs``,它应当是一个包含根证书列表的文件,使用与 :meth:`SSLContext.wrap_socket` 中同名形参一致的格式。" +" 该调用将尝试根据指定的根证书集来验证服务器证书,如果验证失败则该调用也将失败。" + +#: ../../library/ssl.rst:440 +msgid "This function is now IPv6-compatible." +msgstr "此函数现在是 IPv6 兼容的。-compatible." + +#: ../../library/ssl.rst:443 +msgid "" +"The default *ssl_version* is changed from :data:`PROTOCOL_SSLv3` to " +":data:`PROTOCOL_TLS` for maximum compatibility with modern servers." +msgstr "" +"默认的 *ssl_version* 从 :data:`PROTOCOL_SSLv3` 改为 :data:`PROTOCOL_TLS` " +"以保证与现代服务器的最大兼容性。" + +#: ../../library/ssl.rst:449 +msgid "" +"Given a certificate as a DER-encoded blob of bytes, returns a PEM-encoded " +"string version of the same certificate." +msgstr "根据给定的 DER 编码字节块形式的证书,返回同一证书的 PEM 编码字符串版本。" + +#: ../../library/ssl.rst:454 +msgid "" +"Given a certificate as an ASCII PEM string, returns a DER-encoded sequence " +"of bytes for that same certificate." +msgstr "根据给定的 ASCII PEM 字符串形式的证书,返回同一证书的 DER 编码字节序列。" + +#: ../../library/ssl.rst:459 +msgid "" +"Returns a named tuple with paths to OpenSSL's default cafile and capath. The" +" paths are the same as used by :meth:`SSLContext.set_default_verify_paths`. " +"The return value is a :term:`named tuple` ``DefaultVerifyPaths``:" +msgstr "" +"返回包含 OpenSSL 的默认 cafile 和 capath 的路径的命名元组。 此路径与 " +":meth:`SSLContext.set_default_verify_paths` 所使用的相同。 返回值是一个 :term:`named " +"tuple` ``DefaultVerifyPaths``:" + +#: ../../library/ssl.rst:464 +msgid "" +":attr:`cafile` - resolved path to cafile or ``None`` if the file doesn't " +"exist," +msgstr ":attr:`cafile` - 解析出的 cafile 路径或者如果文件不存在则为 ``None``," + +#: ../../library/ssl.rst:465 +msgid "" +":attr:`capath` - resolved path to capath or ``None`` if the directory " +"doesn't exist," +msgstr ":attr:`capath` - 解析出的 capath 路径或者如果目录不存在则为 ``None``," + +#: ../../library/ssl.rst:466 +msgid "" +":attr:`openssl_cafile_env` - OpenSSL's environment key that points to a " +"cafile," +msgstr ":attr:`openssl_cafile_env` - 指向一个 cafile 的 OpenSSL 环境键," + +#: ../../library/ssl.rst:467 +msgid ":attr:`openssl_cafile` - hard coded path to a cafile," +msgstr ":attr:`openssl_cafile` - 一个 cafile 的硬编码路径," + +#: ../../library/ssl.rst:468 +msgid "" +":attr:`openssl_capath_env` - OpenSSL's environment key that points to a " +"capath," +msgstr ":attr:`openssl_capath_env` - 指向一个 capath 的 OpenSSL 环境键," + +#: ../../library/ssl.rst:469 +msgid ":attr:`openssl_capath` - hard coded path to a capath directory" +msgstr ":attr:`openssl_capath` - 一个 capath 目录的硬编码路径" + +#: ../../library/ssl.rst:473 +msgid "" +":ref:`Availability `: LibreSSL ignores the environment vars " +":attr:`openssl_cafile_env` and :attr:`openssl_capath_env`." +msgstr "" +":ref:`可用性 `: LibreSSL 会忽略环境变量 :attr:`openssl_cafile_env` 和 " +":attr:`openssl_capath_env`。" + +#: ../../library/ssl.rst:478 +msgid "" +"Retrieve certificates from Windows' system cert store. *store_name* may be " +"one of ``CA``, ``ROOT`` or ``MY``. Windows may provide additional cert " +"stores, too." +msgstr "" +"从 Windows 的系统证书库中检索证书。 *store_name* 可以是 ``CA``, ``ROOT`` 或 ``MY`` 中的一个。 " +"Windows 也可能会提供额外的证书库。" + +#: ../../library/ssl.rst:482 +msgid "" +"The function returns a list of (cert_bytes, encoding_type, trust) tuples. " +"The encoding_type specifies the encoding of cert_bytes. It is either " +":const:`x509_asn` for X.509 ASN.1 data or :const:`pkcs_7_asn` for PKCS#7 " +"ASN.1 data. Trust specifies the purpose of the certificate as a set of OIDS " +"or exactly ``True`` if the certificate is trustworthy for all purposes." +msgstr "" +"此函数返回一个包含 (cert_bytes, encoding_type, trust) 元组的列表。 encoding_type 指明 " +"cert_bytes 的编码格式。 它可以为 :const:`x509_asn` 以表示 X.509 ASN.1 数据或是 " +":const:`pkcs_7_asn` 以表示 PKCS#7 ASN.1 数据。 trust 以 OIDS " +"集合的形式指明证书的目的,或者如果证书对于所有目的都可以信任则为 ``True``。" + +#: ../../library/ssl.rst:489 ../../library/ssl.rst:1585 +#: ../../library/ssl.rst:1900 +msgid "Example::" +msgstr "示例::" + +#: ../../library/ssl.rst:496 ../../library/ssl.rst:511 +msgid ":ref:`Availability `: Windows." +msgstr ":ref:`可用性 `: Windows。" + +#: ../../library/ssl.rst:501 +msgid "" +"Retrieve CRLs from Windows' system cert store. *store_name* may be one of " +"``CA``, ``ROOT`` or ``MY``. Windows may provide additional cert stores, too." +msgstr "" +"Windows 的系统证书库中检索 CRL。 *store_name* 可以是 ``CA``, ``ROOT`` 或 ``MY`` 中的一个。 " +"Windows 也可能会提供额外的证书库。" + +#: ../../library/ssl.rst:505 +msgid "" +"The function returns a list of (cert_bytes, encoding_type, trust) tuples. " +"The encoding_type specifies the encoding of cert_bytes. It is either " +":const:`x509_asn` for X.509 ASN.1 data or :const:`pkcs_7_asn` for PKCS#7 " +"ASN.1 data." +msgstr "" +"此函数返回一个包含 (cert_bytes, encoding_type, trust) 元组的列表。 encoding_type 指明 " +"cert_bytes 的编码格式。 它可以为 :const:`x509_asn` 以表示 X.509 ASN.1 数据或是 " +":const:`pkcs_7_asn` 以表示 PKCS#7 ASN.1 数据。" + +#: ../../library/ssl.rst:519 +msgid "" +"Takes an instance ``sock`` of :class:`socket.socket`, and returns an " +"instance of :class:`ssl.SSLSocket`, a subtype of :class:`socket.socket`, " +"which wraps the underlying socket in an SSL context. ``sock`` must be a " +":data:`~socket.SOCK_STREAM` socket; other socket types are unsupported." +msgstr "" +"接受一个 :class:`socket.socket` 的实例 ``sock``,并返回一个 :class:`ssl.SSLSocket` " +"的实例,该类型是 :class:`socket.socket` 的子类型,它将下层的套接字包装在一个 SSL 上下文中。 ``sock`` 必须是一个 " +":data:`~socket.SOCK_STREAM` 套接字;其他套接字类型不被支持。" + +#: ../../library/ssl.rst:524 +msgid "" +"Internally, function creates a :class:`SSLContext` with protocol " +"*ssl_version* and :attr:`SSLContext.options` set to *cert_reqs*. If " +"parameters *keyfile*, *certfile*, *ca_certs* or *ciphers* are set, then the " +"values are passed to :meth:`SSLContext.load_cert_chain`, " +":meth:`SSLContext.load_verify_locations`, and " +":meth:`SSLContext.set_ciphers`." +msgstr "" +"在内部,该函数会创建一个 :class:`SSLContext`,其协议版本为 *ssl_version* 且 " +":attr:`SSLContext.options` 设为 *cert_reqs*。 如果设置了 *keyfile*, *certfile*, " +"*ca_certs* 或 *ciphers* 等形参,则参数值会被传给 :meth:`SSLContext.load_cert_chain`, " +":meth:`SSLContext.load_verify_locations` 以及 :meth:`SSLContext.set_ciphers`。" + +#: ../../library/ssl.rst:531 +msgid "" +"The arguments *server_side*, *do_handshake_on_connect*, and " +"*suppress_ragged_eofs* have the same meaning as " +":meth:`SSLContext.wrap_socket`." +msgstr "" +"参数 *server_side*, *do_handshake_on_connect* 和 *suppress_ragged_eofs* 具有与 " +":meth:`SSLContext.wrap_socket` 相同的含义。" + +#: ../../library/ssl.rst:537 +msgid "" +"Since Python 3.2 and 2.7.9, it is recommended to use the " +":meth:`SSLContext.wrap_socket` instead of :func:`wrap_socket`. The top-level" +" function is limited and creates an insecure client socket without server " +"name indication or hostname matching." +msgstr "" +"从 Python 3.2 和 2.7.9 开始,建议使用 :meth:`SSLContext.wrap_socket` 来代替 " +":func:`wrap_socket`。 模块级函数的功能受限并且将创建不安全的客户端套接字,不带服务器名称提示或主机名匹配。" + +#: ../../library/ssl.rst:543 +msgid "Constants" +msgstr "常量" + +#: ../../library/ssl.rst:545 +msgid "" +"All constants are now :class:`enum.IntEnum` or :class:`enum.IntFlag` " +"collections." +msgstr "所有常量现在都是 :class:`enum.IntEnum` 或 :class:`enum.IntFlag` 多项集的成员。" + +#: ../../library/ssl.rst:551 +msgid "" +"Possible value for :attr:`SSLContext.verify_mode`, or the ``cert_reqs`` " +"parameter to :func:`wrap_socket`. Except for :const:`PROTOCOL_TLS_CLIENT`, " +"it is the default mode. With client-side sockets, just about any cert is " +"accepted. Validation errors, such as untrusted or expired cert, are ignored" +" and do not abort the TLS/SSL handshake." +msgstr "" +":attr:`SSLContext.verify_mode` 或 :func:`wrap_socket` 的 ``cert_reqs`` " +"形参可能的取值。 :const:`PROTOCOL_TLS_CLIENT` 除外,这是默认的模式。 对于客户端套接字,几乎任何证书都是可接受的。 " +"验证错误例如不受信任或过期的证书错误会被忽略并且不会中止 TLS/SSL 握手。" + +#: ../../library/ssl.rst:557 +msgid "" +"In server mode, no certificate is requested from the client, so the client " +"does not send any for client cert authentication." +msgstr "在服务器模式下,不会从客户端请求任何证书,因此客户端不会发送任何用于客户端证书身份验证的证书。" + +#: ../../library/ssl.rst:560 ../../library/ssl.rst:2330 +msgid "See the discussion of :ref:`ssl-security` below." +msgstr "参见下文对于 :ref:`ssl-security` 的讨论。" + +#: ../../library/ssl.rst:564 +msgid "" +"Possible value for :attr:`SSLContext.verify_mode`, or the ``cert_reqs`` " +"parameter to :func:`wrap_socket`. In client mode, :const:`CERT_OPTIONAL` " +"has the same meaning as :const:`CERT_REQUIRED`. It is recommended to use " +":const:`CERT_REQUIRED` for client-side sockets instead." +msgstr "" +":attr:`SSLContext.verify_mode` 或 :func:`wrap_socket` 的 ``cert_reqs`` " +"形参可能的取值。 :const:`CERT_OPTIONAL` 具有与 :const:`CERT_REQUIRED` 相同的含义。 " +"对于客户端套接字推荐改用 :const:`CERT_REQUIRED`。" + +#: ../../library/ssl.rst:569 +msgid "" +"In server mode, a client certificate request is sent to the client. The " +"client may either ignore the request or send a certificate in order perform " +"TLS client cert authentication. If the client chooses to send a " +"certificate, it is verified. Any verification error immediately aborts the " +"TLS handshake." +msgstr "" +"在服务器模式下,客户端证书请求会被发送给客户端。 客户端可以忽略请求也可以发送一个证书以执行 TLS 客户端证书身份验证。 " +"如果客户端选择发送证书,则将对其执行验证。 任何验证错误都将立即中止 TLS 握手。" + +#: ../../library/ssl.rst:575 ../../library/ssl.rst:595 +msgid "" +"Use of this setting requires a valid set of CA certificates to be passed, " +"either to :meth:`SSLContext.load_verify_locations` or as a value of the " +"``ca_certs`` parameter to :func:`wrap_socket`." +msgstr "" +"使用此设置要求将一组有效的 CA 证书传递给 :meth:`SSLContext.load_verify_locations` 或是作为 " +":func:`wrap_socket` 的 ``ca_certs`` 形参值。" + +#: ../../library/ssl.rst:581 +msgid "" +"Possible value for :attr:`SSLContext.verify_mode`, or the ``cert_reqs`` " +"parameter to :func:`wrap_socket`. In this mode, certificates are required " +"from the other side of the socket connection; an :class:`SSLError` will be " +"raised if no certificate is provided, or if its validation fails. This mode " +"is **not** sufficient to verify a certificate in client mode as it does not " +"match hostnames. :attr:`~SSLContext.check_hostname` must be enabled as well" +" to verify the authenticity of a cert. :const:`PROTOCOL_TLS_CLIENT` uses " +":const:`CERT_REQUIRED` and enables :attr:`~SSLContext.check_hostname` by " +"default." +msgstr "" +":attr:`SSLContext.verify_mode` 或 :func:`wrap_socket` 的 ``cert_reqs`` " +"形参可能的取值。 在此模式下,需要从套接字连接的另一端获取证书;如果未提供证书或验证失败则将引发 :class:`SSLError`。 此模式 " +"**不能** 在客户端模式下对证书进行验证,因为它不会匹配主机名。 :attr:`~SSLContext.check_hostname` " +"也必须被启用以验证证书的真实性。 :const:`PROTOCOL_TLS_CLIENT` 会使用 :const:`CERT_REQUIRED` " +"并默认启用 :attr:`~SSLContext.check_hostname`。" + +#: ../../library/ssl.rst:591 +msgid "" +"With server socket, this mode provides mandatory TLS client cert " +"authentication. A client certificate request is sent to the client and the " +"client must provide a valid and trusted certificate." +msgstr "对于服务器套接字,此模式会提供强制性的 TLS 客户端证书验证。 客户端证书请求会被发送给客户端并且客户端必须提供有效且受信任的证书。" + +#: ../../library/ssl.rst:601 +msgid ":class:`enum.IntEnum` collection of CERT_* constants." +msgstr "CERT_* 常量的 :class:`enum.IntEnum` 多项集。" + +#: ../../library/ssl.rst:607 +msgid "" +"Possible value for :attr:`SSLContext.verify_flags`. In this mode, " +"certificate revocation lists (CRLs) are not checked. By default OpenSSL does" +" neither require nor verify CRLs." +msgstr "" +":attr:`SSLContext.verify_flags` 可能的取值。 在此模式下,证书吊销列表(CRL)并不会被检查。 OpenSSL " +"默认不要求也不验证 CRL。" + +#: ../../library/ssl.rst:615 +msgid "" +"Possible value for :attr:`SSLContext.verify_flags`. In this mode, only the " +"peer cert is checked but none of the intermediate CA certificates. The mode " +"requires a valid CRL that is signed by the peer cert's issuer (its direct " +"ancestor CA). If no proper CRL has been loaded with " +":attr:`SSLContext.load_verify_locations`, validation will fail." +msgstr "" +":attr:`SSLContext.verify_flags` 可能的取值。 在此模式下, 只会检查对等证书而不检查任何中间 CA 证书。 " +"此模式要求提供由对等证书颁发者(其直接上级 CA)签名的有效 CRL。 如果未使用 " +":attr:`SSLContext.load_verify_locations` 加载正确的 CRL,则验证将失败。" + +#: ../../library/ssl.rst:625 +msgid "" +"Possible value for :attr:`SSLContext.verify_flags`. In this mode, CRLs of " +"all certificates in the peer cert chain are checked." +msgstr ":attr:`SSLContext.verify_flags` 可能的取值。 在此模式下,会检查对等证书链中所有证书的 CRL。" + +#: ../../library/ssl.rst:632 +msgid "" +"Possible value for :attr:`SSLContext.verify_flags` to disable workarounds " +"for broken X.509 certificates." +msgstr ":attr:`SSLContext.verify_flags` 可能的取值,用于禁用已损坏 X.509 证书的绕过操作。" + +#: ../../library/ssl.rst:639 +msgid "" +"Possible value for :attr:`SSLContext.verify_flags`. It instructs OpenSSL to " +"prefer trusted certificates when building the trust chain to validate a " +"certificate. This flag is enabled by default." +msgstr "" +":attr:`SSLContext.verify_flags` 可能的取值。 它指示 OpenSSL 在构建用于验证某个证书的信任链时首选受信任的证书。" +" 此旗标将默认被启用。" + +#: ../../library/ssl.rst:647 +msgid ":class:`enum.IntFlag` collection of VERIFY_* constants." +msgstr "VERIFY_* 常量的 :class:`enum.IntFlag` 多项集。" + +#: ../../library/ssl.rst:653 +msgid "" +"Selects the highest protocol version that both the client and server " +"support. Despite the name, this option can select both \"SSL\" and \"TLS\" " +"protocols." +msgstr "选择客户端和服务器均支持的最高协议版本。 此选项名称并不准确,实际上 \"SSL\" 和 \"TLS\" 协议均可被选择。" + +#: ../../library/ssl.rst:660 +msgid "" +"Auto-negotiate the highest protocol version like :data:`PROTOCOL_TLS`, but " +"only support client-side :class:`SSLSocket` connections. The protocol " +"enables :data:`CERT_REQUIRED` and :attr:`~SSLContext.check_hostname` by " +"default." +msgstr "" +"像 :data:`PROTOCOL_TLS` 一样地自动协商最高协议版本,但是只支持客户端 :class:`SSLSocket` 连接。 " +"此协议默认会启用 :data:`CERT_REQUIRED` 和 :attr:`~SSLContext.check_hostname`。" + +#: ../../library/ssl.rst:669 +msgid "" +"Auto-negotiate the highest protocol version like :data:`PROTOCOL_TLS`, but " +"only support server-side :class:`SSLSocket` connections." +msgstr "像 :data:`PROTOCOL_TLS` 一样地自动协商最高协议版本,但是只支持服务器 :class:`SSLSocket` 连接。" + +#: ../../library/ssl.rst:676 +msgid "Alias for :data:`PROTOCOL_TLS`." +msgstr ":data:`PROTOCOL_TLS` 的别名。" + +#: ../../library/ssl.rst:680 +msgid "Use :data:`PROTOCOL_TLS` instead." +msgstr "请改用 :data:`PROTOCOL_TLS`。" + +#: ../../library/ssl.rst:684 +msgid "Selects SSL version 2 as the channel encryption protocol." +msgstr "选择 SSL 版本 2 作为通道加密协议。" + +#: ../../library/ssl.rst:686 +msgid "" +"This protocol is not available if OpenSSL is compiled with the " +"``OPENSSL_NO_SSL2`` flag." +msgstr "如果 OpenSSL 编译时使用了 ``OPENSSL_NO_SSL2`` 旗标则此协议将不可用。" + +#: ../../library/ssl.rst:691 +msgid "SSL version 2 is insecure. Its use is highly discouraged." +msgstr "SSL 版本 2 并不安全。 极不建议使用它。" + +#: ../../library/ssl.rst:695 +msgid "OpenSSL has removed support for SSLv2." +msgstr "OpenSSL 已经移除了对 SSLv2 的支持。" + +#: ../../library/ssl.rst:699 +msgid "Selects SSL version 3 as the channel encryption protocol." +msgstr "选择 SSL 版本 3 作为通道加密协议。" + +#: ../../library/ssl.rst:701 +msgid "" +"This protocol is not be available if OpenSSL is compiled with the " +"``OPENSSL_NO_SSLv3`` flag." +msgstr "如果 OpenSSL 编译时使用了 ``OPENSSL_NO_SSLv3`` 旗标则此协议将不可用。" + +#: ../../library/ssl.rst:706 +msgid "SSL version 3 is insecure. Its use is highly discouraged." +msgstr "SSL 版本 3 并不安全。 极不建议使用它。" + +#: ../../library/ssl.rst:710 ../../library/ssl.rst:719 +#: ../../library/ssl.rst:731 ../../library/ssl.rst:744 +msgid "" +"OpenSSL has deprecated all version specific protocols. Use the default " +"protocol :data:`PROTOCOL_TLS` with flags like :data:`OP_NO_SSLv3` instead." +msgstr "" +"OpenSSL 已经弃用了所有带有特定版本号的协议。 请改用默认协议 :data:`PROTOCOL_TLS` 并附带 " +":data:`OP_NO_SSLv3` 等旗标。" + +#: ../../library/ssl.rst:715 +msgid "Selects TLS version 1.0 as the channel encryption protocol." +msgstr "选择 TLS 版本 1.0 作为通道加密协议。" + +#: ../../library/ssl.rst:724 +msgid "" +"Selects TLS version 1.1 as the channel encryption protocol. Available only " +"with openssl version 1.0.1+." +msgstr "选择 TLS 版本 1.1 作为通道加密协议。 仅适用于 openssl 版本 1.0.1+。" + +#: ../../library/ssl.rst:736 +msgid "" +"Selects TLS version 1.2 as the channel encryption protocol. This is the most" +" modern version, and probably the best choice for maximum protection, if " +"both sides can speak it. Available only with openssl version 1.0.1+." +msgstr "" +"选译 TLS 版本 1.2 作为通道加密协议。 这是最新的版本,也应是能提供最大保护的最佳选择,如果通信双方都支持它的话。 仅适用于 openssl " +"版本 1.0.1+。" + +#: ../../library/ssl.rst:749 +msgid "" +"Enables workarounds for various bugs present in other SSL implementations. " +"This option is set by default. It does not necessarily set the same flags " +"as OpenSSL's ``SSL_OP_ALL`` constant." +msgstr "" +"对存在于其他 SSL 实现中的各种缺陷启用绕过操作。 默认会设置此选项。 没有必要设置与 OpenSSL 的 ``SSL_OP_ALL`` " +"常量同名的旗标。" + +#: ../../library/ssl.rst:757 +msgid "" +"Prevents an SSLv2 connection. This option is only applicable in conjunction" +" with :const:`PROTOCOL_TLS`. It prevents the peers from choosing SSLv2 as " +"the protocol version." +msgstr "" +"阻止 SSLv2 连接。 此选项仅可与 :const:`PROTOCOL_TLS` 结合使用。 它会阻止对等方选择 SSLv2 作为协议版本。" + +#: ../../library/ssl.rst:765 +msgid "SSLv2 is deprecated" +msgstr "SSLv2 已被弃用" + +#: ../../library/ssl.rst:770 +msgid "" +"Prevents an SSLv3 connection. This option is only applicable in conjunction" +" with :const:`PROTOCOL_TLS`. It prevents the peers from choosing SSLv3 as " +"the protocol version." +msgstr "" +"阻止 SSLv3 连接。 此选项仅可与 :const:`PROTOCOL_TLS` 结合使用。 它会阻止对等方选择 SSLv3 作为协议版本。" + +#: ../../library/ssl.rst:778 +msgid "SSLv3 is deprecated" +msgstr "SSLv3 已被弃用" + +#: ../../library/ssl.rst:782 +msgid "" +"Prevents a TLSv1 connection. This option is only applicable in conjunction " +"with :const:`PROTOCOL_TLS`. It prevents the peers from choosing TLSv1 as " +"the protocol version." +msgstr "" +"阻止 TLSv1 连接。 此选项仅可与 :const:`PROTOCOL_TLS` 结合使用。 它会阻止对等方选择 TLSv1 作为协议版本。" + +#: ../../library/ssl.rst:788 +msgid "" +"The option is deprecated since OpenSSL 1.1.0, use the new " +":attr:`SSLContext.minimum_version` and :attr:`SSLContext.maximum_version` " +"instead." +msgstr "" +"此选项自 OpenSSL 1.1.0 起已被弃用,请改用新的 :attr:`SSLContext.minimum_version` 和 " +":attr:`SSLContext.maximum_version`。" + +#: ../../library/ssl.rst:795 +msgid "" +"Prevents a TLSv1.1 connection. This option is only applicable in conjunction" +" with :const:`PROTOCOL_TLS`. It prevents the peers from choosing TLSv1.1 as " +"the protocol version. Available only with openssl version 1.0.1+." +msgstr "" +"阻止 TLSv1.1 连接。 此选项仅可与 :const:`PROTOCOL_TLS` 结合使用。 它会阻止对等方选择 TLSv1.1 作为协议版本。 " +"仅适用于 openssl 版本 1.0.1+。" + +#: ../../library/ssl.rst:801 ../../library/ssl.rst:812 +msgid "The option is deprecated since OpenSSL 1.1.0." +msgstr "此选项自 OpenSSL 1.1.0 起已被弃用。" + +#: ../../library/ssl.rst:806 +msgid "" +"Prevents a TLSv1.2 connection. This option is only applicable in conjunction" +" with :const:`PROTOCOL_TLS`. It prevents the peers from choosing TLSv1.2 as " +"the protocol version. Available only with openssl version 1.0.1+." +msgstr "" +"阻止 TLSv1.2 连接。 此选项仅可与 :const:`PROTOCOL_TLS` 结合使用。 它会阻止对等方选择 TLSv1.2 作为协议版本。 " +"仅适用于 openssl 版本 1.0.1+。" + +#: ../../library/ssl.rst:817 +msgid "" +"Prevents a TLSv1.3 connection. This option is only applicable in conjunction" +" with :const:`PROTOCOL_TLS`. It prevents the peers from choosing TLSv1.3 as " +"the protocol version. TLS 1.3 is available with OpenSSL 1.1.1 or later. When" +" Python has been compiled against an older version of OpenSSL, the flag " +"defaults to *0*." +msgstr "" +"阻止 TLSv1.3 连接。 此选项仅可与 :const:`PROTOCOL_TLS` 结合使用。 它会阻止对等方选择 TLSv1.3 作为协议版本。 " +"TLS 1.3 适用于 OpenSSL 1.1.1 或更新的版本。 当 Python 编译是基于较旧版本的 OpenSSL 时,该旗标默认为 *0*。" + +#: ../../library/ssl.rst:825 +msgid "" +"The option is deprecated since OpenSSL 1.1.0. It was added to 2.7.15, 3.6.3 " +"and 3.7.0 for backwards compatibility with OpenSSL 1.0.2." +msgstr "" +"此选项自 OpenSSL 1.1.0 起已被弃用。 它被添加到 2.7.15, 3.6.3 和 3.7.0 是为了向下兼容 OpenSSL 1.0.2。" + +#: ../../library/ssl.rst:831 +msgid "" +"Disable all renegotiation in TLSv1.2 and earlier. Do not send HelloRequest " +"messages, and ignore renegotiation requests via ClientHello." +msgstr "" +"禁用所有 TLSv1.2 和更早版本的重协商操作。 不发送 HelloRequest 消息,并忽略通过 ClientHello 发起的重协商请求。" + +#: ../../library/ssl.rst:834 +msgid "This option is only available with OpenSSL 1.1.0h and later." +msgstr "此选项仅适用于 OpenSSL 1.1.0h 及更新的版本。" + +#: ../../library/ssl.rst:840 +msgid "" +"Use the server's cipher ordering preference, rather than the client's. This " +"option has no effect on client sockets and SSLv2 server sockets." +msgstr "使用服务器的密码顺序首选项,而不是客户端的首选项。 此选项在客户端套接字和 SSLv2 服务器套接字上无效。" + +#: ../../library/ssl.rst:847 +msgid "" +"Prevents re-use of the same DH key for distinct SSL sessions. This improves" +" forward secrecy but requires more computational resources. This option only" +" applies to server sockets." +msgstr "阻止对于单独的 SSL 会话重用相同的 DH 密钥。 这会提升前向保密性但需要更多的计算资源。 此选项仅适用于服务器套接字。" + +#: ../../library/ssl.rst:855 +msgid "" +"Prevents re-use of the same ECDH key for distinct SSL sessions. This " +"improves forward secrecy but requires more computational resources. This " +"option only applies to server sockets." +msgstr "阻止对于单独的 SSL 会话重用相同的 ECDH 密钥。 这会提升前向保密性但需要更多的计算资源。 此选项仅适用于服务器套接字。" + +#: ../../library/ssl.rst:863 +msgid "" +"Send dummy Change Cipher Spec (CCS) messages in TLS 1.3 handshake to make a " +"TLS 1.3 connection look more like a TLS 1.2 connection." +msgstr "在 TLS 1.3 握手中发送虚拟更改密码规格(CCS)消息以使得 TLS 1.3 连接看起来更像是 TLS 1.2 连接。" + +#: ../../library/ssl.rst:866 +msgid "This option is only available with OpenSSL 1.1.1 and later." +msgstr "此选项仅适用于 OpenSSL 1.1.1 及更新的版本。" + +#: ../../library/ssl.rst:872 +msgid "" +"Disable compression on the SSL channel. This is useful if the application " +"protocol supports its own compression scheme." +msgstr "在 SSL 通道上禁用压缩。 这适用于应用协议支持自己的压缩方案的情况。" + +#: ../../library/ssl.rst:875 +msgid "This option is only available with OpenSSL 1.0.0 and later." +msgstr "此选项仅适用于 OpenSSL 1.0.0 及更新的版本。" + +#: ../../library/ssl.rst:881 +msgid ":class:`enum.IntFlag` collection of OP_* constants." +msgstr "OP_* 常量的 :class:`enum.IntFlag` 多项集。" + +#: ../../library/ssl.rst:885 +msgid "Prevent client side from requesting a session ticket." +msgstr "阻止客户端请求会话凭据。" + +#: ../../library/ssl.rst:891 +msgid "Ignore unexpected shutdown of TLS connections." +msgstr "忽略 TLS 连接的意外关闭。" + +#: ../../library/ssl.rst:893 +msgid "This option is only available with OpenSSL 3.0.0 and later." +msgstr "此选项仅适用于 OpenSSL 3.0.0 及更新的版本。" + +#: ../../library/ssl.rst:899 +msgid "" +"Whether the OpenSSL library has built-in support for the *Application-Layer " +"Protocol Negotiation* TLS extension as described in :rfc:`7301`." +msgstr "OpenSSL 库是否具有对 :rfc:`7301` 中描述的 *应用层协议协商* TLS 扩展的内置支持。" + +#: ../../library/ssl.rst:906 +msgid "" +"Whether the OpenSSL library has built-in support not checking subject common" +" name and :attr:`SSLContext.hostname_checks_common_name` is writeable." +msgstr "" +"OpenSSL 库是否具有对不检测目标通用名称的内置支持且 :attr:`SSLContext.hostname_checks_common_name`" +" 为可写状态。" + +#: ../../library/ssl.rst:914 +msgid "" +"Whether the OpenSSL library has built-in support for the Elliptic Curve-" +"based Diffie-Hellman key exchange. This should be true unless the feature " +"was explicitly disabled by the distributor." +msgstr "" +"OpenSSL 库是否具有对基于椭圆曲线的 Diffie-Hellman 密钥交换的内置支持。 此常量应当为真值,除非发布者明确地禁用了此功能。" + +#: ../../library/ssl.rst:922 +msgid "" +"Whether the OpenSSL library has built-in support for the *Server Name " +"Indication* extension (as defined in :rfc:`6066`)." +msgstr "OpenSSL 库是否具有对 *服务器名称提示* 扩展(在 :rfc:`6066` 中定义)的内置支持。" + +#: ../../library/ssl.rst:929 +msgid "" +"Whether the OpenSSL library has built-in support for the *Next Protocol " +"Negotiation* as described in the `Application Layer Protocol Negotiation " +"`_. " +"When true, you can use the :meth:`SSLContext.set_npn_protocols` method to " +"advertise which protocols you want to support." +msgstr "" +"OpenSSL 库是否具有对 `应用层协议协商 `_ 中描述的 *下一协议协商* 的内置支持。 当此常量为真值时,你可以使用 " +":meth:`SSLContext.set_npn_protocols` 方法来公告你想要支持的协议。" + +#: ../../library/ssl.rst:939 +msgid "" +"Whether the OpenSSL library has built-in support for the SSL 2.0 protocol." +msgstr "OpenSSL 库是否具有对 SSL 2.0 协议的内置支持。" + +#: ../../library/ssl.rst:945 +msgid "" +"Whether the OpenSSL library has built-in support for the SSL 3.0 protocol." +msgstr "OpenSSL 库是否具有对 SSL 3.0 协议的内置支持。" + +#: ../../library/ssl.rst:951 +msgid "" +"Whether the OpenSSL library has built-in support for the TLS 1.0 protocol." +msgstr "OpenSSL 库是否具有对 TLS 1.0 协议的内置支持。" + +#: ../../library/ssl.rst:957 +msgid "" +"Whether the OpenSSL library has built-in support for the TLS 1.1 protocol." +msgstr "OpenSSL 库是否具有对 TLS 1.1 协议的内置支持。" + +#: ../../library/ssl.rst:963 +msgid "" +"Whether the OpenSSL library has built-in support for the TLS 1.2 protocol." +msgstr "OpenSSL 库是否具有对 TLS 1.2 协议的内置支持。" + +#: ../../library/ssl.rst:969 +msgid "" +"Whether the OpenSSL library has built-in support for the TLS 1.3 protocol." +msgstr "OpenSSL 库是否具有对 TLS 1.3 协议的内置支持。" + +#: ../../library/ssl.rst:975 +msgid "" +"List of supported TLS channel binding types. Strings in this list can be " +"used as arguments to :meth:`SSLSocket.get_channel_binding`." +msgstr "" +"受支持的 TLS 通道绑定类型组成的列表。 此列表中的字符串可被用作传给 :meth:`SSLSocket.get_channel_binding` " +"的参数。" + +#: ../../library/ssl.rst:982 +msgid "The version string of the OpenSSL library loaded by the interpreter::" +msgstr "解释器所加载的 OpenSSL 库的版本字符串::" + +#: ../../library/ssl.rst:991 +msgid "" +"A tuple of five integers representing version information about the OpenSSL " +"library::" +msgstr "代表 OpenSSL 库的版本信息的五个整数所组成的元组::" + +#: ../../library/ssl.rst:1001 +msgid "The raw version number of the OpenSSL library, as a single integer::" +msgstr "OpenSSL 库的原始版本号,以单个整数表示::" + +#: ../../library/ssl.rst:1014 +msgid "" +"Alert Descriptions from :rfc:`5246` and others. The `IANA TLS Alert Registry" +" `_ contains this list and references to the RFCs where their " +"meaning is defined." +msgstr "" +"来自 :rfc:`5246` 等文档的警报描述。 `IANA TLS Alert Registry " +"`_ 中包含了这个列表及对定义其含义的 RFC 引用。" + +#: ../../library/ssl.rst:1018 +msgid "" +"Used as the return value of the callback function in " +":meth:`SSLContext.set_servername_callback`." +msgstr "被用作 :meth:`SSLContext.set_servername_callback` 中的回调函数的返回值。" + +#: ../../library/ssl.rst:1025 +msgid ":class:`enum.IntEnum` collection of ALERT_DESCRIPTION_* constants." +msgstr "ALERT_DESCRIPTION_* 常量的 :class:`enum.IntEnum` 多项集。" + +#: ../../library/ssl.rst:1031 +msgid "" +"Option for :func:`create_default_context` and " +":meth:`SSLContext.load_default_certs`. This value indicates that the " +"context may be used to authenticate Web servers (therefore, it will be used " +"to create client-side sockets)." +msgstr "" +":func:`create_default_context` 和 :meth:`SSLContext.load_default_certs` 的选项值。" +" 这个值表明此上下文可以被用来验证 Web 服务器(因此,它将被用来创建客户端套接字)。" + +#: ../../library/ssl.rst:1040 +msgid "" +"Option for :func:`create_default_context` and " +":meth:`SSLContext.load_default_certs`. This value indicates that the " +"context may be used to authenticate Web clients (therefore, it will be used " +"to create server-side sockets)." +msgstr "" +":func:`create_default_context` 和 :meth:`SSLContext.load_default_certs` 的选项值。" +" 这个值表明此上下文可以被用来验证 Web 客户端(因此,它将被用来创建服务器端套接字)。" + +#: ../../library/ssl.rst:1049 +msgid ":class:`enum.IntEnum` collection of SSL_ERROR_* constants." +msgstr "SSL_ERROR_* 常量的 :class:`enum.IntEnum` 多项集。" + +#: ../../library/ssl.rst:1055 +msgid "" +":class:`enum.IntEnum` collection of SSL and TLS versions for " +":attr:`SSLContext.maximum_version` and :attr:`SSLContext.minimum_version`." +msgstr "" +":attr:`SSLContext.maximum_version` 和 :attr:`SSLContext.minimum_version` 中的 " +"SSL 和 TLS 版本的 :class:`enum.IntEnum` 多项集。" + +#: ../../library/ssl.rst:1063 +msgid "" +"The minimum or maximum supported SSL or TLS version. These are magic " +"constants. Their values don't reflect the lowest and highest available " +"TLS/SSL versions." +msgstr "受支持的最低和最高 SSL 或 TLS 版本。 这些常量被称为魔术常量。 它们的值并不反映可用的最低和最高 TLS/SSL 版本。" + +#: ../../library/ssl.rst:1073 +msgid "SSL 3.0 to TLS 1.3." +msgstr "SSL 3.0 至 TLS 1.3。" + +#: ../../library/ssl.rst:1077 +msgid "SSL Sockets" +msgstr "SSL 套接字" + +#: ../../library/ssl.rst:1081 +msgid "SSL sockets provide the following methods of :ref:`socket-objects`:" +msgstr "SSL 套接字提供了 :ref:`socket-objects` 的下列方法:" + +#: ../../library/ssl.rst:1083 +msgid ":meth:`~socket.socket.accept()`" +msgstr ":meth:`~socket.socket.accept()`" + +#: ../../library/ssl.rst:1084 +msgid ":meth:`~socket.socket.bind()`" +msgstr ":meth:`~socket.socket.bind()`" + +#: ../../library/ssl.rst:1085 +msgid ":meth:`~socket.socket.close()`" +msgstr ":meth:`~socket.socket.close()`" + +#: ../../library/ssl.rst:1086 +msgid ":meth:`~socket.socket.connect()`" +msgstr ":meth:`~socket.socket.connect()`" + +#: ../../library/ssl.rst:1087 +msgid ":meth:`~socket.socket.detach()`" +msgstr ":meth:`~socket.socket.detach()`" + +#: ../../library/ssl.rst:1088 +msgid ":meth:`~socket.socket.fileno()`" +msgstr ":meth:`~socket.socket.fileno()`" + +#: ../../library/ssl.rst:1089 +msgid "" +":meth:`~socket.socket.getpeername()`, :meth:`~socket.socket.getsockname()`" +msgstr "" +":meth:`~socket.socket.getpeername()`, :meth:`~socket.socket.getsockname()`" + +#: ../../library/ssl.rst:1090 +msgid "" +":meth:`~socket.socket.getsockopt()`, :meth:`~socket.socket.setsockopt()`" +msgstr "" +":meth:`~socket.socket.getsockopt()`, :meth:`~socket.socket.setsockopt()`" + +#: ../../library/ssl.rst:1091 +msgid "" +":meth:`~socket.socket.gettimeout()`, :meth:`~socket.socket.settimeout()`, " +":meth:`~socket.socket.setblocking()`" +msgstr "" +":meth:`~socket.socket.gettimeout()`, :meth:`~socket.socket.settimeout()`, " +":meth:`~socket.socket.setblocking()`" + +#: ../../library/ssl.rst:1093 +msgid ":meth:`~socket.socket.listen()`" +msgstr ":meth:`~socket.socket.listen()`" + +#: ../../library/ssl.rst:1094 +msgid ":meth:`~socket.socket.makefile()`" +msgstr ":meth:`~socket.socket.makefile()`" + +#: ../../library/ssl.rst:1095 +msgid "" +":meth:`~socket.socket.recv()`, :meth:`~socket.socket.recv_into()` (but " +"passing a non-zero ``flags`` argument is not allowed)" +msgstr "" +":meth:`~socket.socket.recv()`, :meth:`~socket.socket.recv_into()` (but " +"passing a non-zero ``flags`` argument is not allowed)" + +#: ../../library/ssl.rst:1097 +msgid "" +":meth:`~socket.socket.send()`, :meth:`~socket.socket.sendall()` (with the " +"same limitation)" +msgstr "" +":meth:`~socket.socket.send()`, :meth:`~socket.socket.sendall()` (with the " +"same limitation)" + +#: ../../library/ssl.rst:1099 +msgid "" +":meth:`~socket.socket.sendfile()` (but :mod:`os.sendfile` will be used for " +"plain-text sockets only, else :meth:`~socket.socket.send()` will be used)" +msgstr "" +":meth:`~socket.socket.sendfile()` (but :mod:`os.sendfile` will be used for " +"plain-text sockets only, else :meth:`~socket.socket.send()` will be used)" + +#: ../../library/ssl.rst:1101 +msgid ":meth:`~socket.socket.shutdown()`" +msgstr ":meth:`~socket.socket.shutdown()`" + +#: ../../library/ssl.rst:1103 +msgid "" +"However, since the SSL (and TLS) protocol has its own framing atop of TCP, " +"the SSL sockets abstraction can, in certain respects, diverge from the " +"specification of normal, OS-level sockets. See especially the :ref:`notes " +"on non-blocking sockets `." +msgstr "" +"但是,由于 SSL(和 TLS)协议在 TCP 之上具有自己的框架,因此 SSL 套接字抽象在某些方面可能与常规的 OS 层级套接字存在差异。 " +"特别是要查看 :ref:`非阻塞型套接字说明 `。" + +#: ../../library/ssl.rst:1108 +msgid "" +"Instances of :class:`SSLSocket` must be created using the " +":meth:`SSLContext.wrap_socket` method." +msgstr ":class:`SSLSocket` 的实例必须使用 :meth:`SSLContext.wrap_socket` 方法来创建。" + +#: ../../library/ssl.rst:1111 +msgid "The :meth:`sendfile` method was added." +msgstr "新增了 :meth:`sendfile` 方法。" + +#: ../../library/ssl.rst:1114 +msgid "" +"The :meth:`shutdown` does not reset the socket timeout each time bytes are " +"received or sent. The socket timeout is now to maximum total duration of the" +" shutdown." +msgstr ":meth:`shutdown` 不会在每次接收或发送字节数据后重置套接字超时。 现在套接字超时为关闭的最大总持续时间。" + +#: ../../library/ssl.rst:1119 +msgid "" +"It is deprecated to create a :class:`SSLSocket` instance directly, use " +":meth:`SSLContext.wrap_socket` to wrap a socket." +msgstr "" +"直接创建 :class:`SSLSocket` 实例的做法已被弃用,请使用 :meth:`SSLContext.wrap_socket` 来包装套接字。" + +#: ../../library/ssl.rst:1123 +msgid "" +":class:`SSLSocket` instances must to created with " +":meth:`~SSLContext.wrap_socket`. In earlier versions, it was possible to " +"create instances directly. This was never documented or officially " +"supported." +msgstr "" +":class:`SSLSocket` 的实例必须使用 :meth:`~SSLContext.wrap_socket` 来创建。 " +"在较早的版本中,直接创建实例是可能的。 但这从未被记入文档或是被正式支持。" + +#: ../../library/ssl.rst:1129 +msgid "SSL sockets also have the following additional methods and attributes:" +msgstr "SSL 套接字还具有下列方法和属性:" + +#: ../../library/ssl.rst:1133 +msgid "" +"Read up to *len* bytes of data from the SSL socket and return the result as " +"a ``bytes`` instance. If *buffer* is specified, then read into the buffer " +"instead, and return the number of bytes read." +msgstr "" +"从 SSL 套接字读取至多 *len* 个字节的数据并将结果作为 ``bytes`` 实例返回。 如果指定了 " +"*buffer*,则改为读取到缓冲区,并返回所读取的字节数。" + +#: ../../library/ssl.rst:1137 +msgid "" +"Raise :exc:`SSLWantReadError` or :exc:`SSLWantWriteError` if the socket is " +":ref:`non-blocking ` and the read would block." +msgstr "" +"如果套接字为 :ref:`非阻塞型 ` 则会引发 :exc:`SSLWantReadError` 或 " +":exc:`SSLWantWriteError` 且读取将阻塞。" + +#: ../../library/ssl.rst:1140 +msgid "" +"As at any time a re-negotiation is possible, a call to :meth:`read` can also" +" cause write operations." +msgstr "由于在任何时候重新协商都是可能的,因此调用 :meth:`read` 也可能导致写入操作。" + +#: ../../library/ssl.rst:1143 +msgid "" +"The socket timeout is no more reset each time bytes are received or sent. " +"The socket timeout is now to maximum total duration to read up to *len* " +"bytes." +msgstr "套接字超时在每次接收或发送字节数据后不会再被重置。 现在套接字超时为读取至多 *len* 个字节数据的最大总持续时间。" + +#: ../../library/ssl.rst:1148 +msgid "Use :meth:`~SSLSocket.recv` instead of :meth:`~SSLSocket.read`." +msgstr "请使用 :meth:`~SSLSocket.recv` 来代替 :meth:`~SSLSocket.read`。" + +#: ../../library/ssl.rst:1153 +msgid "" +"Write *buf* to the SSL socket and return the number of bytes written. The " +"*buf* argument must be an object supporting the buffer interface." +msgstr "将 *buf* 写入到 SSL 套接字并返回所写入的字节数。 *buf* 参数必须为支持缓冲区接口的对象。" + +#: ../../library/ssl.rst:1156 +msgid "" +"Raise :exc:`SSLWantReadError` or :exc:`SSLWantWriteError` if the socket is " +":ref:`non-blocking ` and the write would block." +msgstr "" +"如果套接字为 :ref:`非阻塞型 ` 则会引发 :exc:`SSLWantReadError` 或 " +":exc:`SSLWantWriteError` 且读取将阻塞。" + +#: ../../library/ssl.rst:1159 +msgid "" +"As at any time a re-negotiation is possible, a call to :meth:`write` can " +"also cause read operations." +msgstr "由于在任何时候重新协商都是可能的,因此调用 :meth:`write` 也可能导致读取操作。" + +#: ../../library/ssl.rst:1162 +msgid "" +"The socket timeout is no more reset each time bytes are received or sent. " +"The socket timeout is now to maximum total duration to write *buf*." +msgstr "套接字超时在每次接收或发送字节数据后不会再被重置。 现在套接字超时为写入 *buf* 的最大总持续时间。" + +#: ../../library/ssl.rst:1166 +msgid "Use :meth:`~SSLSocket.send` instead of :meth:`~SSLSocket.write`." +msgstr "请使用 :meth:`~SSLSocket.send` 来代替 :meth:`~SSLSocket.write`。" + +#: ../../library/ssl.rst:1171 +msgid "" +"The :meth:`~SSLSocket.read` and :meth:`~SSLSocket.write` methods are the " +"low-level methods that read and write unencrypted, application-level data " +"and decrypt/encrypt it to encrypted, wire-level data. These methods require " +"an active SSL connection, i.e. the handshake was completed and " +":meth:`SSLSocket.unwrap` was not called." +msgstr "" +":meth:`~SSLSocket.read` 和 :meth:`~SSLSocket.write` " +"方法是读写未加密的应用级数据,并将其解密/加密为带加密的线路级数据的低层级方法。 这些方法需要有激活的 SSL 连接,即握手已完成而 " +":meth:`SSLSocket.unwrap` 尚未被调用。" + +#: ../../library/ssl.rst:1177 +msgid "" +"Normally you should use the socket API methods like " +":meth:`~socket.socket.recv` and :meth:`~socket.socket.send` instead of these" +" methods." +msgstr "" +"通常你应当使用套接字 API 方法例如 :meth:`~socket.socket.recv` 和 " +":meth:`~socket.socket.send` 来代替这些方法。" + +#: ../../library/ssl.rst:1183 +msgid "Perform the SSL setup handshake." +msgstr "执行 SSL 设置握手。" + +#: ../../library/ssl.rst:1185 +msgid "" +"The handshake method also performs :func:`match_hostname` when the " +":attr:`~SSLContext.check_hostname` attribute of the socket's " +":attr:`~SSLSocket.context` is true." +msgstr "" +"当套接字的 :attr:`~SSLSocket.context` 的 :attr:`~SSLContext.check_hostname` " +"属性为真值时此握手方法还会执行 :func:`match_hostname`。" + +#: ../../library/ssl.rst:1190 +msgid "" +"The socket timeout is no more reset each time bytes are received or sent. " +"The socket timeout is now to maximum total duration of the handshake." +msgstr "套接字超时在每次接收或发送字节数据时不会再被重置。 现在套接字超时为握手的最大总持续时间。" + +#: ../../library/ssl.rst:1194 +msgid "" +"Hostname or IP address is matched by OpenSSL during handshake. The function " +":func:`match_hostname` is no longer used. In case OpenSSL refuses a hostname" +" or IP address, the handshake is aborted early and a TLS alert message is " +"send to the peer." +msgstr "" +"主机名或 IP 地址会在握手期间由 OpenSSL 进行匹配。 函数 :func:`match_hostname` 将不再被使用。 在 OpenSSL " +"拒绝主机名和 IP 地址的情况下,握手将提前被中止并向对等方发送 TLS 警告消息。" + +#: ../../library/ssl.rst:1202 +msgid "" +"If there is no certificate for the peer on the other end of the connection, " +"return ``None``. If the SSL handshake hasn't been done yet, raise " +":exc:`ValueError`." +msgstr "如果连接另一端的对等方没有证书,则返回 ``None``。 如果 SSL 握手还未完成,则会引发 :exc:`ValueError`。" + +#: ../../library/ssl.rst:1206 +msgid "" +"If the ``binary_form`` parameter is :const:`False`, and a certificate was " +"received from the peer, this method returns a :class:`dict` instance. If " +"the certificate was not validated, the dict is empty. If the certificate " +"was validated, it returns a dict with several keys, amongst them ``subject``" +" (the principal for which the certificate was issued) and ``issuer`` (the " +"principal issuing the certificate). If a certificate contains an instance " +"of the *Subject Alternative Name* extension (see :rfc:`3280`), there will " +"also be a ``subjectAltName`` key in the dictionary." +msgstr "" +"如果 ``binary_form`` 形参为 :const:`False`,并且从对等方接收到了证书,此方法将返回一个 :class:`dict` " +"实例。 如果证书未通过验证,则字典将为空。 如果证书通过验证,它将返回由多个密钥组成的字典,其中包括 ``subject`` (证书颁发给的主体) 和 " +"``issuer`` (颁发证书的主体)。 如果证书包含一个 *Subject Alternative Name* 扩展的实例 (see " +":rfc:`3280`),则字典中还将有一个 ``subjectAltName`` 键。" + +#: ../../library/ssl.rst:1215 +msgid "" +"The ``subject`` and ``issuer`` fields are tuples containing the sequence of " +"relative distinguished names (RDNs) given in the certificate's data " +"structure for the respective fields, and each RDN is a sequence of name-" +"value pairs. Here is a real-world example::" +msgstr "" +"``subject`` 和 ``issuer`` 字段都是包含在证书中相应字段的数据结构中给出的相对专有名称(RDN)序列的元组,每个 RDN 均为 " +"name-value 对的序列。 这里是一个实际的示例::" + +#: ../../library/ssl.rst:1241 +msgid "" +"To validate a certificate for a particular service, you can use the " +":func:`match_hostname` function." +msgstr "要验证特定服务的证书,你可以使用 :func:`match_hostname` 函数。" + +#: ../../library/ssl.rst:1244 +msgid "" +"If the ``binary_form`` parameter is :const:`True`, and a certificate was " +"provided, this method returns the DER-encoded form of the entire certificate" +" as a sequence of bytes, or :const:`None` if the peer did not provide a " +"certificate. Whether the peer provides a certificate depends on the SSL " +"socket's role:" +msgstr "" +"如果 ``binary_form`` 形参为 :const:`True`,并且提供了证书,此方法会将整个证书的 DER " +"编码形式作为字节序列返回,或者如果对等方未提供证书则返回 :const:`None`。 对等方是否提供证书取决于 SSL 套接字的角色:" + +#: ../../library/ssl.rst:1250 +msgid "" +"for a client SSL socket, the server will always provide a certificate, " +"regardless of whether validation was required;" +msgstr "对于客户端 SSL 套接字,服务器将总是提供证书,无论是否需要进行验证;" + +#: ../../library/ssl.rst:1253 +msgid "" +"for a server SSL socket, the client will only provide a certificate when " +"requested by the server; therefore :meth:`getpeercert` will return " +":const:`None` if you used :const:`CERT_NONE` (rather than " +":const:`CERT_OPTIONAL` or :const:`CERT_REQUIRED`)." +msgstr "" +"对于服务器 SSL 套接字,客户端将仅在服务器要求时才提供证书;因此如果你使用了 :const:`CERT_NONE` (而不是 " +":const:`CERT_OPTIONAL` 或 :const:`CERT_REQUIRED`) 则 :meth:`getpeercert` 将返回 " +":const:`None`。" + +#: ../../library/ssl.rst:1258 +msgid "" +"The returned dictionary includes additional items such as ``issuer`` and " +"``notBefore``." +msgstr "返回的字典包括额外的条目例如 ``issuer`` 和 ``notBefore``。" + +#: ../../library/ssl.rst:1262 +msgid "" +":exc:`ValueError` is raised when the handshake isn't done. The returned " +"dictionary includes additional X509v3 extension items such as " +"``crlDistributionPoints``, ``caIssuers`` and ``OCSP`` URIs." +msgstr "" +"如果握手未完成则会引发 :exc:`ValueError`。 返回的字典包括额外的 X509v3 扩展条目例如 " +"``crlDistributionPoints``, ``caIssuers`` 和 ``OCSP`` URI。" + +#: ../../library/ssl.rst:1267 +msgid "IPv6 address strings no longer have a trailing new line." +msgstr "IPv6 地址字符串不再附带末尾换行符。" + +#: ../../library/ssl.rst:1272 +msgid "" +"Returns a three-value tuple containing the name of the cipher being used, " +"the version of the SSL protocol that defines its use, and the number of " +"secret bits being used. If no connection has been established, returns " +"``None``." +msgstr "" +"返回由三个值组成的元组,其中包含所使用的密码名称,定义其使用方式的 SSL 协议版本,以及所使用的加密比特位数。 如果尚未建立连接,则返回 " +"``None``。" + +#: ../../library/ssl.rst:1278 +msgid "" +"Return the list of ciphers shared by the client during the handshake. Each " +"entry of the returned list is a three-value tuple containing the name of the" +" cipher, the version of the SSL protocol that defines its use, and the " +"number of secret bits the cipher uses. :meth:`~SSLSocket.shared_ciphers` " +"returns ``None`` if no connection has been established or the socket is a " +"client socket." +msgstr "" +"返回在握手期间由客户端共享的密码列表。 所返回列表的每个条目都是由三个值组成的元组,其中包括密码名称,定义其使用方式的 SSL " +"协议版本,以及密码所使用的加密比特位数。 如果尚未建立连接或套接字为客户端套接字则 :meth:`~SSLSocket.shared_ciphers` " +"将返回 ``None``。" + +#: ../../library/ssl.rst:1289 +msgid "" +"Return the compression algorithm being used as a string, or ``None`` if the " +"connection isn't compressed." +msgstr "以字符串形式返回所使用的压缩算法,或者如果连接没有使用压缩则返回 ``None``。" + +#: ../../library/ssl.rst:1292 +msgid "" +"If the higher-level protocol supports its own compression mechanism, you can" +" use :data:`OP_NO_COMPRESSION` to disable SSL-level compression." +msgstr "如果高层级的协议支持自己的压缩机制,你可以使用 :data:`OP_NO_COMPRESSION` 来禁用 SSL 层级的压缩。" + +#: ../../library/ssl.rst:1299 +msgid "" +"Get channel binding data for current connection, as a bytes object. Returns" +" ``None`` if not connected or the handshake has not been completed." +msgstr "为当前连接获取字节串形式的通道绑定数据。 如果尚未连接或握手尚未完成则返回 ``None``。" + +#: ../../library/ssl.rst:1302 +msgid "" +"The *cb_type* parameter allow selection of the desired channel binding type." +" Valid channel binding types are listed in the :data:`CHANNEL_BINDING_TYPES`" +" list. Currently only the 'tls-unique' channel binding, defined by " +":rfc:`5929`, is supported. :exc:`ValueError` will be raised if an " +"unsupported channel binding type is requested." +msgstr "" +"*cb_type* 形参允许选择需要的通道绑定类型。 有效的通道绑定类型在 :data:`CHANNEL_BINDING_TYPES` 列表中列出。 " +"目前只支持由 :rfc:`5929` 所定义的 'tls-unique' 通道绑定。 如果请求了一个不受支持的通道绑定类型则将引发 " +":exc:`ValueError`。" + +#: ../../library/ssl.rst:1312 +msgid "" +"Return the protocol that was selected during the TLS handshake. If " +":meth:`SSLContext.set_alpn_protocols` was not called, if the other party " +"does not support ALPN, if this socket does not support any of the client's " +"proposed protocols, or if the handshake has not happened yet, ``None`` is " +"returned." +msgstr "" +"返回在 TLS 握手期间所选择的协议。 如果 :meth:`SSLContext.set_alpn_protocols` 未被调用,如果另一方不支持 " +"ALPN,如果此套接字不支持任何客户端所用的协议,或者如果握手尚未发生,则将返回 ``None``。" + +#: ../../library/ssl.rst:1322 +msgid "" +"Return the higher-level protocol that was selected during the TLS/SSL " +"handshake. If :meth:`SSLContext.set_npn_protocols` was not called, or if the" +" other party does not support NPN, or if the handshake has not yet happened," +" this will return ``None``." +msgstr "" +"返回在Return the higher-level protocol that was selected during the TLS/SSL " +"握手期间所选择的高层级协议。 如果 :meth:`SSLContext.set_npn_protocols` 未被调用,或者如果另一方不支持 " +"NPN,或者如果握手尚未发生,则将返回 ``None``。" + +#: ../../library/ssl.rst:1331 +msgid "" +"Performs the SSL shutdown handshake, which removes the TLS layer from the " +"underlying socket, and returns the underlying socket object. This can be " +"used to go from encrypted operation over a connection to unencrypted. The " +"returned socket should always be used for further communication with the " +"other side of the connection, rather than the original socket." +msgstr "" +"执行 SSL 关闭握手,这会从下层的套接字中移除 TLS 层,并返回下层的套接字对象。 这可被用来通过一个连接将加密操作转为非加密。 " +"返回的套接字应当总是被用于同连接另一方的进一步通信,而不是原始的套接字。" + +#: ../../library/ssl.rst:1339 +msgid "" +"Requests post-handshake authentication (PHA) from a TLS 1.3 client. PHA can " +"only be initiated for a TLS 1.3 connection from a server-side socket, after " +"the initial TLS handshake and with PHA enabled on both sides, see " +":attr:`SSLContext.post_handshake_auth`." +msgstr "" +"向一个 TLS 1.3 客户端请求握手后身份验证(PHA)。 只有在初始 TLS 握手之后且双方都启用了 PHA 的情况下才能为服务器端套接字的 TLS" +" 1.3 连接启用 PHA,参见 :attr:`SSLContext.post_handshake_auth`。" + +#: ../../library/ssl.rst:1344 +msgid "" +"The method does not perform a cert exchange immediately. The server-side " +"sends a CertificateRequest during the next write event and expects the " +"client to respond with a certificate on the next read event." +msgstr "" +"此方法不会立即执行证书交换。 服务器端会在下一次写入事件期间发送 CertificateRequest " +"并期待客户端在下一次读取事件期间附带证书进行响应。" + +#: ../../library/ssl.rst:1348 +msgid "" +"If any precondition isn't met (e.g. not TLS 1.3, PHA not enabled), an " +":exc:`SSLError` is raised." +msgstr "如果有任何前置条件未被满足(例如非 TLS 1.3,PHA 未启用),则会引发 :exc:`SSLError`。" + +#: ../../library/ssl.rst:1352 +msgid "" +"Only available with OpenSSL 1.1.1 and TLS 1.3 enabled. Without TLS 1.3 " +"support, the method raises :exc:`NotImplementedError`." +msgstr "" +"仅在 OpenSSL 1.1.1 且 TLS 1.3 被启用时可用。 没有 TLS 1.3 支持,此方法将引发 " +":exc:`NotImplementedError`。" + +#: ../../library/ssl.rst:1359 +msgid "" +"Return the actual SSL protocol version negotiated by the connection as a " +"string, or ``None`` if no secure connection is established. As of this " +"writing, possible return values include ``\"SSLv2\"``, ``\"SSLv3\"``, " +"``\"TLSv1\"``, ``\"TLSv1.1\"`` and ``\"TLSv1.2\"``. Recent OpenSSL versions " +"may define more return values." +msgstr "" +"以字符串形式返回由连接协商确定的实际 SSL 协议版本,或者如果未建立安全连接则返回 ``None``。 在撰写本文档时,可能的返回值包括 " +"``\"SSLv2\"``, ``\"SSLv3\"``, ``\"TLSv1\"``, ``\"TLSv1.1\"`` 和 " +"``\"TLSv1.2\"``。 最新的 OpenSSL 版本可能会定义更多的返回值。" + +#: ../../library/ssl.rst:1369 +msgid "" +"Returns the number of already decrypted bytes available for read, pending on" +" the connection." +msgstr "返回在连接上等待被读取的已解密字节数。" + +#: ../../library/ssl.rst:1374 +msgid "" +"The :class:`SSLContext` object this SSL socket is tied to. If the SSL " +"socket was created using the deprecated :func:`wrap_socket` function (rather" +" than :meth:`SSLContext.wrap_socket`), this is a custom context object " +"created for this SSL socket." +msgstr "" +"此 SSL 套接字所联结的 :class:`SSLContext` 对象。 如果 SSL 套接字是使用已弃用的 :func:`wrap_socket` " +"函数 (而非 :meth:`SSLContext.wrap_socket`) 创建的,则这将是为此 SSL 套接字创建的自定义上下文对象。" + +#: ../../library/ssl.rst:1383 +msgid "" +"A boolean which is ``True`` for server-side sockets and ``False`` for " +"client-side sockets." +msgstr "一个布尔值,对于服务器端套接字为 ``True`` 而对于客户端套接字则为 ``False``。" + +#: ../../library/ssl.rst:1390 +msgid "" +"Hostname of the server: :class:`str` type, or ``None`` for server-side " +"socket or if the hostname was not specified in the constructor." +msgstr "服务器的主机名: :class:`str` 类型,对于服务器端套接字或者如果构造器中未指定主机名则为 ``None``。" + +#: ../../library/ssl.rst:1395 +msgid "" +"The attribute is now always ASCII text. When ``server_hostname`` is an " +"internationalized domain name (IDN), this attribute now stores the A-label " +"form (``\"xn--pythn-mua.org\"``), rather than the U-label form " +"(``\"pythön.org\"``)." +msgstr "" +"现在该属性将始终为 ASCII 文本。 当 ``server_hostname`` 为一个国际化域名(IDN)时,该属性现在会保存为 A 标签形式 " +"(``\"xn--pythn-mua.org\"``) 而非 U 标签形式 (``\"pythön.org\"``)。" + +#: ../../library/ssl.rst:1403 +msgid "" +"The :class:`SSLSession` for this SSL connection. The session is available " +"for client and server side sockets after the TLS handshake has been " +"performed. For client sockets the session can be set before " +":meth:`~SSLSocket.do_handshake` has been called to reuse a session." +msgstr "" +"用于 SSL 连接的 :class:`SSLSession`。 该会话将在执行 TLS 握手后对客户端和服务器端套接字可用。 " +"对于客户端套接字该会话可以在调用 :meth:`~SSLSocket.do_handshake` 之前被设置以重用一个会话。" + +#: ../../library/ssl.rst:1416 +msgid "SSL Contexts" +msgstr "SSL 上下文" + +#: ../../library/ssl.rst:1420 +msgid "" +"An SSL context holds various data longer-lived than single SSL connections, " +"such as SSL configuration options, certificate(s) and private key(s). It " +"also manages a cache of SSL sessions for server-side sockets, in order to " +"speed up repeated connections from the same clients." +msgstr "" +"SSL 上下文可保存各种比单独 SSL 连接寿命更长的数据,例如 SSL 配置选项,证书和私钥等。 " +"它还可为服务器端套接字管理缓存,以加快来自相同客户端的重复连接。" + +#: ../../library/ssl.rst:1427 +msgid "" +"Create a new SSL context. You may pass *protocol* which must be one of the " +"``PROTOCOL_*`` constants defined in this module. The parameter specifies " +"which version of the SSL protocol to use. Typically, the server chooses a " +"particular protocol version, and the client must adapt to the server's " +"choice. Most of the versions are not interoperable with the other versions." +" If not specified, the default is :data:`PROTOCOL_TLS`; it provides the " +"most compatibility with other versions." +msgstr "" +"创建一个新的 SSL 上下文。 你可以传入 *protocol*,它必须为此模块中定义的 ``PROTOCOL_*`` 常量之一。 该形参指定要使用哪个" +" SSL 协议版本。 通常,服务器会选择一个特定的协议版本,而客户端必须适应服务器的选择。 大多数版本都不能与其他版本互操作。 如果未指定,则默认值为 " +":data:`PROTOCOL_TLS`;它提供了与其他版本的最大兼容性。" + +#: ../../library/ssl.rst:1436 +msgid "" +"Here's a table showing which versions in a client (down the side) can " +"connect to which versions in a server (along the top):" +msgstr "这个表显示了客户端(横向)的哪个版本能够连接服务器(纵向)的哪个版本。" + +#: ../../library/ssl.rst:1442 +msgid "*client* / **server**" +msgstr "*客户端* / **服务器**" + +#: ../../library/ssl.rst:1442 +msgid "**SSLv2**" +msgstr "**SSLv2**" + +#: ../../library/ssl.rst:1442 +msgid "**SSLv3**" +msgstr "**SSLv3**" + +#: ../../library/ssl.rst:1442 +msgid "**TLS** [3]_" +msgstr "**TLS** [3]_" + +#: ../../library/ssl.rst:1442 +msgid "**TLSv1**" +msgstr "**TLSv1**" + +#: ../../library/ssl.rst:1442 +msgid "**TLSv1.1**" +msgstr "**TLSv1.1**" + +#: ../../library/ssl.rst:1442 +msgid "**TLSv1.2**" +msgstr "**TLSv1.2**" + +#: ../../library/ssl.rst:1444 +msgid "*SSLv2*" +msgstr "*SSLv2*" + +#: ../../library/ssl.rst:1444 ../../library/ssl.rst:1445 +#: ../../library/ssl.rst:1446 ../../library/ssl.rst:1446 +#: ../../library/ssl.rst:1446 ../../library/ssl.rst:1446 +#: ../../library/ssl.rst:1447 ../../library/ssl.rst:1447 +#: ../../library/ssl.rst:1448 ../../library/ssl.rst:1448 +#: ../../library/ssl.rst:1449 ../../library/ssl.rst:1449 +msgid "yes" +msgstr "是" + +#: ../../library/ssl.rst:1444 ../../library/ssl.rst:1444 +#: ../../library/ssl.rst:1444 ../../library/ssl.rst:1444 +#: ../../library/ssl.rst:1445 ../../library/ssl.rst:1445 +#: ../../library/ssl.rst:1445 ../../library/ssl.rst:1445 +#: ../../library/ssl.rst:1447 ../../library/ssl.rst:1447 +#: ../../library/ssl.rst:1447 ../../library/ssl.rst:1447 +#: ../../library/ssl.rst:1448 ../../library/ssl.rst:1448 +#: ../../library/ssl.rst:1448 ../../library/ssl.rst:1448 +#: ../../library/ssl.rst:1449 ../../library/ssl.rst:1449 +#: ../../library/ssl.rst:1449 ../../library/ssl.rst:1449 +msgid "no" +msgstr "否" + +#: ../../library/ssl.rst:1444 ../../library/ssl.rst:1446 +msgid "no [1]_" +msgstr "否 [1]_" + +#: ../../library/ssl.rst:1445 +msgid "*SSLv3*" +msgstr "*SSLv3*" + +#: ../../library/ssl.rst:1445 ../../library/ssl.rst:1446 +msgid "no [2]_" +msgstr "否 [2]_" + +#: ../../library/ssl.rst:1446 +msgid "*TLS* (*SSLv23*) [3]_" +msgstr "*TLS* (*SSLv23*) [3]_" + +#: ../../library/ssl.rst:1447 +msgid "*TLSv1*" +msgstr "*TLSv1*" + +#: ../../library/ssl.rst:1448 +msgid "*TLSv1.1*" +msgstr "*TLSv1.1*" + +#: ../../library/ssl.rst:1449 +msgid "*TLSv1.2*" +msgstr "*TLSv1.2*" + +#: ../../library/ssl.rst:1452 +msgid "Footnotes" +msgstr "备注" + +#: ../../library/ssl.rst:1453 +msgid "" +":class:`SSLContext` disables SSLv2 with :data:`OP_NO_SSLv2` by default." +msgstr ":class:`SSLContext` 默认设置 :data:`OP_NO_SSLv2` 以禁用 SSLv2。" + +#: ../../library/ssl.rst:1454 +msgid "" +":class:`SSLContext` disables SSLv3 with :data:`OP_NO_SSLv3` by default." +msgstr ":class:`SSLContext` 默认设置 :data:`OP_NO_SSLv3` 以禁用 SSLv3。" + +#: ../../library/ssl.rst:1455 +msgid "" +"TLS 1.3 protocol will be available with :data:`PROTOCOL_TLS` in OpenSSL >= " +"1.1.1. There is no dedicated PROTOCOL constant for just TLS 1.3." +msgstr "" +"TLS 1.3 协议在 OpenSSL >= 1.1.1 中设置 :data:`PROTOCOL_TLS` 时可用。 没有专门针对 TLS 1.3 的 " +"PROTOCOL 常量。" + +#: ../../library/ssl.rst:1460 +msgid "" +":func:`create_default_context` lets the :mod:`ssl` module choose security " +"settings for a given purpose." +msgstr ":func:`create_default_context` 让 :mod:`ssl` 为特定目标选择安全设置。" + +#: ../../library/ssl.rst:1465 +msgid "" +"The context is created with secure default values. The options " +":data:`OP_NO_COMPRESSION`, :data:`OP_CIPHER_SERVER_PREFERENCE`, " +":data:`OP_SINGLE_DH_USE`, :data:`OP_SINGLE_ECDH_USE`, :data:`OP_NO_SSLv2` " +"(except for :data:`PROTOCOL_SSLv2`), and :data:`OP_NO_SSLv3` (except for " +":data:`PROTOCOL_SSLv3`) are set by default. The initial cipher suite list " +"contains only ``HIGH`` ciphers, no ``NULL`` ciphers and no ``MD5`` ciphers " +"(except for :data:`PROTOCOL_SSLv2`)." +msgstr "" +"上下文会使用安全默认值来创建。 默认设置的选项有 :data:`OP_NO_COMPRESSION`, " +":data:`OP_CIPHER_SERVER_PREFERENCE`, :data:`OP_SINGLE_DH_USE`, " +":data:`OP_SINGLE_ECDH_USE`, :data:`OP_NO_SSLv2` (except for " +":data:`PROTOCOL_SSLv2`) 和 :data:`OP_NO_SSLv3` (except for " +":data:`PROTOCOL_SSLv3`)。 初始密码集列表只包含 ``HIGH`` 密码,不包含 ``NULL`` 密码和 ``MD5`` 密码 " +"(:data:`PROTOCOL_SSLv2` 除外)。" + +#: ../../library/ssl.rst:1475 +msgid ":class:`SSLContext` objects have the following methods and attributes:" +msgstr ":class:`SSLContext` 对象具有以下方法和属性:" + +#: ../../library/ssl.rst:1479 +msgid "" +"Get statistics about quantities of loaded X.509 certificates, count of X.509" +" certificates flagged as CA certificates and certificate revocation lists as" +" dictionary." +msgstr "获取以字典表示的有关已加载的 X.509 证书数量,被标记为 CA 证书的 X.509 证书数量以及证书吊销列表的统计信息。" + +#: ../../library/ssl.rst:1483 +msgid "Example for a context with one CA cert and one other cert::" +msgstr "具有一个 CA 证书和一个其他证书的上下文示例::" + +#: ../../library/ssl.rst:1493 +msgid "" +"Load a private key and the corresponding certificate. The *certfile* string" +" must be the path to a single file in PEM format containing the certificate " +"as well as any number of CA certificates needed to establish the " +"certificate's authenticity. The *keyfile* string, if present, must point to" +" a file containing the private key. Otherwise the private key will be taken" +" from *certfile* as well. See the discussion of :ref:`ssl-certificates` for" +" more information on how the certificate is stored in the *certfile*." +msgstr "" +"加载一个私钥及对应的证书。 *certfile* 字符串必须为以 PEM 格式表示的单个文件路径,该文件中包含证书以及确立证书真实性所需的任意数量的 " +"CA 证书。 如果存在 *keyfile* 字符串,它必须指向一个包含私钥的文件。 否则私钥也将从 *certfile* 中提取。 请参阅 " +":ref:`ssl-certificates` 中的讨论来了解有关如何将证书存储至 *certfile* 的更多信息。" + +#: ../../library/ssl.rst:1502 +msgid "" +"The *password* argument may be a function to call to get the password for " +"decrypting the private key. It will only be called if the private key is " +"encrypted and a password is necessary. It will be called with no arguments," +" and it should return a string, bytes, or bytearray. If the return value is" +" a string it will be encoded as UTF-8 before using it to decrypt the key. " +"Alternatively a string, bytes, or bytearray value may be supplied directly " +"as the *password* argument. It will be ignored if the private key is not " +"encrypted and no password is needed." +msgstr "" +"*password* 参数可以是一个函数,调用时将得到用于解密私钥的密码。 它在私钥被加密且需要密码时才会被调用。 " +"它调用时将不带任何参数,并且应当返回一个字符串、字节串或字节数组。 如果返回值是一个字符串,在用它解密私钥之前它将以 UTF-8 进行编码。 " +"或者也可以直接将字符串、字节串或字节数组值作为 *password* 参数提供。 如果私钥未被加密且不需要密码则它将被忽略。" + +#: ../../library/ssl.rst:1511 +msgid "" +"If the *password* argument is not specified and a password is required, " +"OpenSSL's built-in password prompting mechanism will be used to " +"interactively prompt the user for a password." +msgstr "如果未指定 *password* 参数且需要一个密码,将会使用 OpenSSL 内置的密码提示机制来交互式地提示用户输入密码。" + +#: ../../library/ssl.rst:1515 +msgid "" +"An :class:`SSLError` is raised if the private key doesn't match with the " +"certificate." +msgstr "如果私钥不能匹配证书则会引发 :class:`SSLError`。" + +#: ../../library/ssl.rst:1518 +msgid "New optional argument *password*." +msgstr "新增可选参数 *password*。" + +#: ../../library/ssl.rst:1523 +msgid "" +"Load a set of default \"certification authority\" (CA) certificates from " +"default locations. On Windows it loads CA certs from the ``CA`` and ``ROOT``" +" system stores. On all systems it calls " +":meth:`SSLContext.set_default_verify_paths`. In the future the method may " +"load CA certificates from other locations, too." +msgstr "" +"从默认位置加载一组默认的 \"证书颁发机构\" (CA) 证书。 在 Windows 上它将从 ``CA`` 和 ``ROOT`` 系统存储中加载 CA" +" 证书。 在所有系统上它会调用 :meth:`SSLContext.set_default_verify_paths` 。 " +"将来该方法也可能会从其他位置加载 CA 证书。" + +#: ../../library/ssl.rst:1529 +msgid "" +"The *purpose* flag specifies what kind of CA certificates are loaded. The " +"default settings :data:`Purpose.SERVER_AUTH` loads certificates, that are " +"flagged and trusted for TLS web server authentication (client side sockets)." +" :data:`Purpose.CLIENT_AUTH` loads CA certificates for client certificate " +"verification on the server side." +msgstr "" +"*purpose* 旗标指明要加载哪一类 CA 证书。 默认设置 :data:`Purpose.SERVER_AUTH` 加载被标记且被信任用于 TLS" +" Web 服务器验证(客户端套接字)的证书。 :data:`Purpose.CLIENT_AUTH` 则加载用于在服务器端进行客户端证书验证的 CA " +"证书。" + +#: ../../library/ssl.rst:1539 +msgid "" +"Load a set of \"certification authority\" (CA) certificates used to validate" +" other peers' certificates when :data:`verify_mode` is other than " +":data:`CERT_NONE`. At least one of *cafile* or *capath* must be specified." +msgstr "" +"当 :data:`verify_mode` 不为 :data:`CERT_NONE` 时加载一组用于验证其他对等方证书的 \"证书颁发机构\" (CA)" +" 证书。 必须至少指定 *cafile* 或 *capath* 中的一个。" + +#: ../../library/ssl.rst:1543 +msgid "" +"This method can also load certification revocation lists (CRLs) in PEM or " +"DER format. In order to make use of CRLs, :attr:`SSLContext.verify_flags` " +"must be configured properly." +msgstr "" +"此方法还可加载 PEM 或 DER 格式的证书吊销列表 (CRL),为此必须正确配置 :attr:`SSLContext.verify_flags`。" + +#: ../../library/ssl.rst:1547 +msgid "" +"The *cafile* string, if present, is the path to a file of concatenated CA " +"certificates in PEM format. See the discussion of :ref:`ssl-certificates` " +"for more information about how to arrange the certificates in this file." +msgstr "" +"如果存在 *cafile* 字符串,它应为 PEM 格式的级联 CA 证书文件的路径。 请参阅 :ref:`ssl-certificates` " +"中的讨论来了解有关如何处理此文件中的证书的更多信息。" + +#: ../../library/ssl.rst:1552 +msgid "" +"The *capath* string, if present, is the path to a directory containing " +"several CA certificates in PEM format, following an `OpenSSL specific layout" +" " +"`_." +msgstr "" +"如果存在 *capath* 字符串,它应为包含多个 PEM 格式的 CA 证书的目录的路径,并遵循 `OpenSSL 专属布局 " +"`_。" + +#: ../../library/ssl.rst:1557 +msgid "" +"The *cadata* object, if present, is either an ASCII string of one or more " +"PEM-encoded certificates or a :term:`bytes-like object` of DER-encoded " +"certificates. Like with *capath* extra lines around PEM-encoded certificates" +" are ignored but at least one certificate must be present." +msgstr "" +"如果存在 *cadata* 对象,它应为一个或多个 PEM 编码的证书的 ASCII 字符串或者 DER 编码的证书的 :term:`bytes-" +"like object`。 与 *capath* 一样 PEM 编码的证书之外的多余行会被忽略,但至少要有一个证书。" + +#: ../../library/ssl.rst:1562 +msgid "New optional argument *cadata*" +msgstr "新增可选参数 *cadata*" + +#: ../../library/ssl.rst:1567 +msgid "" +"Get a list of loaded \"certification authority\" (CA) certificates. If the " +"``binary_form`` parameter is :const:`False` each list entry is a dict like " +"the output of :meth:`SSLSocket.getpeercert`. Otherwise the method returns a " +"list of DER-encoded certificates. The returned list does not contain " +"certificates from *capath* unless a certificate was requested and loaded by " +"a SSL connection." +msgstr "" +"获取已离开法人 \"证书颁发机构\" (CA) 证书列表。 如果 ``binary_form`` 形参为 :const:`False` " +"则每个列表条目都是一个类似于 :meth:`SSLSocket.getpeercert` 输出的字典。 在其他情况下此方法将返回一个 DER " +"编码的证书的列表。 返回的列表不包含来自 *capath* 的证书,除非 SSL 连接请求并加载了一个证书。" + +#: ../../library/ssl.rst:1575 +msgid "" +"Certificates in a capath directory aren't loaded unless they have been used " +"at least once." +msgstr "capath 目录中的证书不会被加载,除非它们已至少被使用过一次。" + +#: ../../library/ssl.rst:1582 +msgid "" +"Get a list of enabled ciphers. The list is in order of cipher priority. See " +":meth:`SSLContext.set_ciphers`." +msgstr "获取已启用密码的列表。 该列表将按密码的优先级排序。 参见 :meth:`SSLContext.set_ciphers`。" + +#: ../../library/ssl.rst:1605 +msgid "On OpenSSL 1.1 and newer the cipher dict contains additional fields::" +msgstr "在 OpenSSL 1.1 及更新的版本中密码字典会包含额外的字段::" + +#: ../../library/ssl.rst:1634 +msgid ":ref:`Availability `: OpenSSL 1.0.2+." +msgstr ":ref:`可用性 `: OpenSSL 1.0.2+。" + +#: ../../library/ssl.rst:1639 +msgid "" +"Load a set of default \"certification authority\" (CA) certificates from a " +"filesystem path defined when building the OpenSSL library. Unfortunately, " +"there's no easy way to know whether this method succeeds: no error is " +"returned if no certificates are to be found. When the OpenSSL library is " +"provided as part of the operating system, though, it is likely to be " +"configured properly." +msgstr "" +"从构建 OpenSSL 库时定义的文件系统路径中加载一组默认的 \"证书颁发机构\" (CA) 证书。 " +"不幸的是,没有一种简单的方式能知道此方法是否执行成功:如果未找到任何证书也不会返回错误。 不过,当 OpenSSL " +"库是作为操作系统的一部分被提供时,它的配置应当是正确的。" + +#: ../../library/ssl.rst:1648 +msgid "" +"Set the available ciphers for sockets created with this context. It should " +"be a string in the `OpenSSL cipher list format " +"`_. If no cipher " +"can be selected (because compile-time options or other configuration forbids" +" use of all the specified ciphers), an :class:`SSLError` will be raised." +msgstr "" +"为使用此上下文创建的套接字设置可用密码。 它应当为 `OpenSSL 密码列表格式 " +"`_ 的字符串。 " +"如果没有可被选择的密码(由于编译时选项或其他配置禁止使用所指定的任何密码),则将引发 :class:`SSLError`。" + +#: ../../library/ssl.rst:1656 +msgid "" +"when connected, the :meth:`SSLSocket.cipher` method of SSL sockets will give" +" the currently selected cipher." +msgstr "在连接后,SSL 套接字的 :meth:`SSLSocket.cipher` 方法将给出当前所选择的密码。" + +#: ../../library/ssl.rst:1659 +msgid "" +"OpenSSL 1.1.1 has TLS 1.3 cipher suites enabled by default. The suites " +"cannot be disabled with :meth:`~SSLContext.set_ciphers`." +msgstr "" +"在默认情况下 OpenSSL 1.1.1 会启用 TLS 1.3 密码套件。 该套件不能通过 " +":meth:`~SSLContext.set_ciphers` 来禁用。" + +#: ../../library/ssl.rst:1664 +msgid "" +"Specify which protocols the socket should advertise during the SSL/TLS " +"handshake. It should be a list of ASCII strings, like ``['http/1.1', " +"'spdy/2']``, ordered by preference. The selection of a protocol will happen " +"during the handshake, and will play out according to :rfc:`7301`. After a " +"successful handshake, the :meth:`SSLSocket.selected_alpn_protocol` method " +"will return the agreed-upon protocol." +msgstr "" +"指定在 SSL/TLS 握手期间套接字应当通告的协议。 它应为由 ASCII 字符串组成的列表,例如 ``['http/1.1', " +"'spdy/2']``,按首选顺序排列。 协议的选择将在握手期间发生,并依据 :rfc:`7301` 来执行。 " +"在握手成功后,:meth:`SSLSocket.selected_alpn_protocol` 方法将返回已达成一致的协议。" + +#: ../../library/ssl.rst:1671 +msgid "" +"This method will raise :exc:`NotImplementedError` if :data:`HAS_ALPN` is " +"``False``." +msgstr "如果 :data:`HAS_ALPN` 为 ``False`` 则此方法将引发 :exc:`NotImplementedError`。" + +#: ../../library/ssl.rst:1674 +msgid "" +"OpenSSL 1.1.0 to 1.1.0e will abort the handshake and raise :exc:`SSLError` " +"when both sides support ALPN but cannot agree on a protocol. 1.1.0f+ behaves" +" like 1.0.2, :meth:`SSLSocket.selected_alpn_protocol` returns None." +msgstr "" +"当双方都支持 ALPN 但不能就协议达成一致时 OpenSSL 1.1.0 至 1.1.0e 将中止并引发 :exc:`SSLError`。 " +"1.1.0f+ 的行为类似于 1.0.2,:meth:`SSLSocket.selected_alpn_protocol` 返回 None。" + +#: ../../library/ssl.rst:1682 +msgid "" +"Specify which protocols the socket should advertise during the SSL/TLS " +"handshake. It should be a list of strings, like ``['http/1.1', 'spdy/2']``, " +"ordered by preference. The selection of a protocol will happen during the " +"handshake, and will play out according to the `Application Layer Protocol " +"Negotiation `_. After a successful handshake, the " +":meth:`SSLSocket.selected_npn_protocol` method will return the agreed-upon " +"protocol." +msgstr "" +"指定在Specify which protocols the socket should advertise during the SSL/TLS " +"握手期间套接字应当通告的协议。 它应为由字符串组成的列表,例如 ``['http/1.1', 'spdy/2']``,按首选顺序排列。 " +"协议的选择将在握手期间发生,并将依据 `应用层协议协商 `_ 来执行。 " +"在握手成功后,:meth:`SSLSocket.selected_npn_protocol` 方法将返回已达成一致的协议。" + +#: ../../library/ssl.rst:1690 +msgid "" +"This method will raise :exc:`NotImplementedError` if :data:`HAS_NPN` is " +"``False``." +msgstr "如果 :data:`HAS_NPN` 为 ``False`` 则此方法将引发 :exc:`NotImplementedError`。" + +#: ../../library/ssl.rst:1697 +msgid "" +"Register a callback function that will be called after the TLS Client Hello " +"handshake message has been received by the SSL/TLS server when the TLS " +"client specifies a server name indication. The server name indication " +"mechanism is specified in :rfc:`6066` section 3 - Server Name Indication." +msgstr "" +"注册一个回调函数,当 TLS 客户端指定了一个服务器名称提示时,该回调函数将在 SSL/TLS 服务器接收到 TLS Client Hello " +"握手消息后被调用。 服务器名称提示机制的定义见 :rfc:`6066` section 3 - Server Name Indication。" + +#: ../../library/ssl.rst:1702 +msgid "" +"Only one callback can be set per ``SSLContext``. If *sni_callback* is set " +"to ``None`` then the callback is disabled. Calling this function a " +"subsequent time will disable the previously registered callback." +msgstr "" +"每个 ``SSLContext`` 只能设置一个回调。 如果 *sni_callback* 被设置为 ``None`` 则会禁用回调。 " +"对该函数的后续调用将禁用之前注册的回调。" + +#: ../../library/ssl.rst:1706 +msgid "" +"The callback function will be called with three arguments; the first being " +"the :class:`ssl.SSLSocket`, the second is a string that represents the " +"server name that the client is intending to communicate (or :const:`None` if" +" the TLS Client Hello does not contain a server name) and the third argument" +" is the original :class:`SSLContext`. The server name argument is text. For " +"internationalized domain name, the server name is an IDN A-label (``\"xn--" +"pythn-mua.org\"``)." +msgstr "" +"此回调函数将附带三个参数来调用;第一个参数是 :class:`ssl.SSLSocket`,第二个参数是代表客户端准备与之通信的服务器的字符串 " +"(或者如果 TLS Client Hello 不包含服务器名称则为 :const:`None`) 而第三个参数是原来的 " +":class:`SSLContext`。 服务器名称参数为文本形式。 对于国际化域名,服务器名称是一个 IDN A 标签 (``\"xn--pythn-" +"mua.org\"``)。" + +#: ../../library/ssl.rst:1714 +msgid "" +"A typical use of this callback is to change the :class:`ssl.SSLSocket`'s " +":attr:`SSLSocket.context` attribute to a new object of type " +":class:`SSLContext` representing a certificate chain that matches the server" +" name." +msgstr "" +"此回调的一个典型用法是将 :class:`ssl.SSLSocket` 的 :attr:`SSLSocket.context` 属性修改为一个 " +":class:`SSLContext` 类型的新对象,该对象代表与服务器相匹配的证书链。" + +#: ../../library/ssl.rst:1719 +msgid "" +"Due to the early negotiation phase of the TLS connection, only limited " +"methods and attributes are usable like " +":meth:`SSLSocket.selected_alpn_protocol` and :attr:`SSLSocket.context`. The " +":meth:`SSLSocket.getpeercert`, :meth:`SSLSocket.cipher` and " +":meth:`SSLSocket.compression` methods require that the TLS connection has " +"progressed beyond the TLS Client Hello and therefore will not return " +"meaningful values nor can they be called safely." +msgstr "" +"由于 TLS 连接处于早期协商阶段,因此仅能使用有限的方法和属性例如 :meth:`SSLSocket.selected_alpn_protocol` " +"和 :attr:`SSLSocket.context`。 :meth:`SSLSocket.getpeercert`, " +":meth:`SSLSocket.cipher` 和 :meth:`SSLSocket.compression` 方法要求 TLS 连接已经过 TLS " +"Client Hello 因而将既不返回有意义的值,也不能安全地调用它们。" + +#: ../../library/ssl.rst:1727 +msgid "" +"The *sni_callback* function must return ``None`` to allow the TLS " +"negotiation to continue. If a TLS failure is required, a constant " +":const:`ALERT_DESCRIPTION_* ` can be " +"returned. Other return values will result in a TLS fatal error with " +":const:`ALERT_DESCRIPTION_INTERNAL_ERROR`." +msgstr "" +"*sni_callback* 函数必须返回 ``None`` 以允许 TLS 协商继续进行。 如果想要 TLS 失败,则可以返回常量 " +":const:`ALERT_DESCRIPTION_* `。 其他返回值将导致 " +"TLS 的致命错误 :const:`ALERT_DESCRIPTION_INTERNAL_ERROR`。" + +#: ../../library/ssl.rst:1733 +msgid "" +"If an exception is raised from the *sni_callback* function the TLS " +"connection will terminate with a fatal TLS alert message " +":const:`ALERT_DESCRIPTION_HANDSHAKE_FAILURE`." +msgstr "" +"如果从 *sni_callback* 函数引发了异常,则 TLS 连接将终止并发出 TLS 致命警告消息 " +":const:`ALERT_DESCRIPTION_HANDSHAKE_FAILURE`。" + +#: ../../library/ssl.rst:1737 +msgid "" +"This method will raise :exc:`NotImplementedError` if the OpenSSL library had" +" OPENSSL_NO_TLSEXT defined when it was built." +msgstr "" +"如果 OpenSSL library 库在构建时定义了 OPENSSL_NO_TLSEXT 则此方法将返回 " +":exc:`NotImplementedError`。" + +#: ../../library/ssl.rst:1744 +msgid "" +"This is a legacy API retained for backwards compatibility. When possible, " +"you should use :attr:`sni_callback` instead. The given " +"*server_name_callback* is similar to *sni_callback*, except that when the " +"server hostname is an IDN-encoded internationalized domain name, the " +"*server_name_callback* receives a decoded U-label (``\"pythön.org\"``)." +msgstr "" +"这是被保留用于向下兼容的旧式 API。 在可能的情况下,你应当改用 :attr:`sni_callback`。 给出的 " +"*server_name_callback* 类似于 *sni_callback*,不同之处在于当服务器主机名是 IDN " +"编码的国际化域名时,*server_name_callback* 会接收到一个已编码的 U 标签 (``\"pythön.org\"``)。" + +#: ../../library/ssl.rst:1750 +msgid "" +"If there is an decoding error on the server name, the TLS connection will " +"terminate with an :const:`ALERT_DESCRIPTION_INTERNAL_ERROR` fatal TLS alert " +"message to the client." +msgstr "" +"如果发生了服务器名称解码错误。 TLS 连接将终止并向客户端发出 :const:`ALERT_DESCRIPTION_INTERNAL_ERROR` " +"最严重 TLS 警告消息。" + +#: ../../library/ssl.rst:1758 +msgid "" +"Load the key generation parameters for Diffie-Hellman (DH) key exchange. " +"Using DH key exchange improves forward secrecy at the expense of " +"computational resources (both on the server and on the client). The *dhfile*" +" parameter should be the path to a file containing DH parameters in PEM " +"format." +msgstr "" +"加载密钥生成参数用于 Diffie-Hellman (DH) 密钥交换。 使用 DH 密钥交换能以消耗(服务器和客户端的)计算资源为代价提升前向保密性。" +" *dhfile* 参数应当为指向一个包含 PEM 格式的 DH 形参的文件的路径。" + +#: ../../library/ssl.rst:1764 +msgid "" +"This setting doesn't apply to client sockets. You can also use the " +":data:`OP_SINGLE_DH_USE` option to further improve security." +msgstr "此设置不会应用于客户端套接字。 你还可以使用 :data:`OP_SINGLE_DH_USE` 选项来进一步提升安全性。" + +#: ../../library/ssl.rst:1771 +msgid "" +"Set the curve name for Elliptic Curve-based Diffie-Hellman (ECDH) key " +"exchange. ECDH is significantly faster than regular DH while arguably as " +"secure. The *curve_name* parameter should be a string describing a well-" +"known elliptic curve, for example ``prime256v1`` for a widely supported " +"curve." +msgstr "" +"为基于椭圆曲线的 Elliptic Curve-based Diffie-Hellman (ECDH) 密钥交换设置曲线名称。 ECDH 显著快于常规 " +"DH 同时据信同样安全。 *curve_name* 形参应为描述某个知名椭圆曲线的字符串,例如受到广泛支持的曲线 ``prime256v1``。" + +#: ../../library/ssl.rst:1777 +msgid "" +"This setting doesn't apply to client sockets. You can also use the " +":data:`OP_SINGLE_ECDH_USE` option to further improve security." +msgstr "此设置不会应用于客户端套接字。 你还可以使用 :data:`OP_SINGLE_ECDH_USE` 选项来进一步提升安全性。" + +#: ../../library/ssl.rst:1780 +msgid "This method is not available if :data:`HAS_ECDH` is ``False``." +msgstr "如果 :data:`HAS_ECDH` 为 ``False`` 则此方法将不可用。" + +#: ../../library/ssl.rst:1785 +msgid "" +"`SSL/TLS & Perfect Forward Secrecy " +"`_" +msgstr "" +"`SSL/TLS 与完美的前向保密性 `_" + +#: ../../library/ssl.rst:1786 +msgid "Vincent Bernat." +msgstr "Vincent Bernat。" + +#: ../../library/ssl.rst:1792 +msgid "" +"Wrap an existing Python socket *sock* and return an instance of " +":attr:`SSLContext.sslsocket_class` (default :class:`SSLSocket`). The " +"returned SSL socket is tied to the context, its settings and certificates. " +"*sock* must be a :data:`~socket.SOCK_STREAM` socket; other socket types are " +"unsupported." +msgstr "" +"包装一个现有的 Python 套接字 *sock* 并返回一个 :attr:`SSLContext.sslsocket_class` 的实例 (默认为 " +":class:`SSLSocket`)。 返回的 SSL 套接字会绑定上下文、设置以及证书。 *sock* 必须是一个 " +":data:`~socket.SOCK_STREAM` 套接字;其他套接字类型不被支持。" + +#: ../../library/ssl.rst:1798 +msgid "" +"The parameter ``server_side`` is a boolean which identifies whether server-" +"side or client-side behavior is desired from this socket." +msgstr "形参 ``server_side`` 是一个布尔值,它标明希望从该套接字获得服务器端行为还是客户端行为。" + +#: ../../library/ssl.rst:1801 +msgid "" +"For client-side sockets, the context construction is lazy; if the underlying" +" socket isn't connected yet, the context construction will be performed " +"after :meth:`connect` is called on the socket. For server-side sockets, if " +"the socket has no remote peer, it is assumed to be a listening socket, and " +"the server-side SSL wrapping is automatically performed on client " +"connections accepted via the :meth:`accept` method. The method may raise " +":exc:`SSLError`." +msgstr "" +"对于客户端套接字,上下文的构造会延迟执行;如果下层的套接字尚未连接,上下文的构造将在对套接字调用 :meth:`connect` 之后执行。 " +"对于服务器端套接字,如果套接字没有远端对等方,它会被视为一个监听套接字,并且服务器端 SSL 包装操作会在通过 :meth:`accept` " +"方法所接受的客户端连接上自动执行。 此方法可能会引发 :exc:`SSLError`。" + +#: ../../library/ssl.rst:1809 +msgid "" +"On client connections, the optional parameter *server_hostname* specifies " +"the hostname of the service which we are connecting to. This allows a " +"single server to host multiple SSL-based services with distinct " +"certificates, quite similarly to HTTP virtual hosts. Specifying " +"*server_hostname* will raise a :exc:`ValueError` if *server_side* is true." +msgstr "" +"在客户端连接上,可选形参 *server_hostname* 指定所要连接的服务的主机名。 这允许单个服务器托管具有单独证书的多个基于 SSL " +"的服务,很类似于 HTTP 虚拟主机。 如果 *server_side* 为真值则指定 *server_hostname* 将引发 " +":exc:`ValueError`。" + +#: ../../library/ssl.rst:1815 +msgid "" +"The parameter ``do_handshake_on_connect`` specifies whether to do the SSL " +"handshake automatically after doing a :meth:`socket.connect`, or whether the" +" application program will call it explicitly, by invoking the " +":meth:`SSLSocket.do_handshake` method. Calling " +":meth:`SSLSocket.do_handshake` explicitly gives the program control over the" +" blocking behavior of the socket I/O involved in the handshake." +msgstr "" +"形参 ``do_handshake_on_connect`` 指明是否要在调用 :meth:`socket.connect` 之后自动执行 SSL " +"握手,还是要通过唤起 :meth:`SSLSocket.do_handshake` 方法让应用程序显式地调用它。 显式地调用 " +":meth:`SSLSocket.do_handshake` 可给予程序对握手中所涉及的套接字 I/O 阻塞行为的控制。" + +#: ../../library/ssl.rst:1822 +msgid "" +"The parameter ``suppress_ragged_eofs`` specifies how the " +":meth:`SSLSocket.recv` method should signal unexpected EOF from the other " +"end of the connection. If specified as :const:`True` (the default), it " +"returns a normal EOF (an empty bytes object) in response to unexpected EOF " +"errors raised from the underlying socket; if :const:`False`, it will raise " +"the exceptions back to the caller." +msgstr "" +"形参 ``suppress_ragged_eofs`` 指明 :meth:`SSLSocket.recv` 方法应当如何从连接的另一端发送非预期的 " +"EOF 信号。 如果指定为 :const:`True` (默认值),它将返回正常的 EOF (空字节串对象) 来响应从下层套接字引发的非预期的 EOF " +"错误;如果指定为 :const:`False`,它将向调用方引发异常。" + +#: ../../library/ssl.rst:1829 +msgid "*session*, see :attr:`~SSLSocket.session`." +msgstr "*session*,参见 :attr:`~SSLSocket.session`。" + +#: ../../library/ssl.rst:1831 +msgid "" +"Always allow a server_hostname to be passed, even if OpenSSL does not have " +"SNI." +msgstr "总是允许传送 server_hostname,即使 OpenSSL 没有 SNI。" + +#: ../../library/ssl.rst:1835 ../../library/ssl.rst:1861 +msgid "*session* argument was added." +msgstr "增加了 *session* 参数。" + +#: ../../library/ssl.rst:1838 +msgid "" +"The method returns on instance of :attr:`SSLContext.sslsocket_class` instead" +" of hard-coded :class:`SSLSocket`." +msgstr "" +"此方法返回 :attr:`SSLContext.sslsocket_class` 的实例而非硬编码的 :class:`SSLSocket`。" + +#: ../../library/ssl.rst:1844 +msgid "" +"The return type of :meth:`SSLContext.wrap_socket`, defaults to " +":class:`SSLSocket`. The attribute can be overridden on instance of class in " +"order to return a custom subclass of :class:`SSLSocket`." +msgstr "" +":meth:`SSLContext.wrap_socket` 的返回类型,默认为 :class:`SSLSocket`。 " +"该属性可以在类实例上被重载以便返回自定义的 :class:`SSLSocket` 的子类。" + +#: ../../library/ssl.rst:1853 +msgid "" +"Wrap the BIO objects *incoming* and *outgoing* and return an instance of " +":attr:`SSLContext.sslobject_class` (default :class:`SSLObject`). The SSL " +"routines will read input data from the incoming BIO and write data to the " +"outgoing BIO." +msgstr "" +"包装 BIO 对象 *incoming* 和 *outgoing* 并返回一个 :attr:`SSLContext.sslobject_class` " +"(默认为 :class:`SSLObject`) 的实例。 SSL 例程将从 BIO 中读取输入数据并将数据写入到 outgoing BIO。" + +#: ../../library/ssl.rst:1858 +msgid "" +"The *server_side*, *server_hostname* and *session* parameters have the same " +"meaning as in :meth:`SSLContext.wrap_socket`." +msgstr "" +"*server_side*, *server_hostname* 和 *session* 形参具有与 " +":meth:`SSLContext.wrap_socket` 中相同的含义。" + +#: ../../library/ssl.rst:1864 +msgid "" +"The method returns on instance of :attr:`SSLContext.sslobject_class` instead" +" of hard-coded :class:`SSLObject`." +msgstr "" +"此方法返回 :attr:`SSLContext.sslobject_class` 的实例则非硬编码的 :class:`SSLObject`。" + +#: ../../library/ssl.rst:1870 +msgid "" +"The return type of :meth:`SSLContext.wrap_bio`, defaults to " +":class:`SSLObject`. The attribute can be overridden on instance of class in " +"order to return a custom subclass of :class:`SSLObject`." +msgstr "" +":meth:`SSLContext.wrap_bio` 的返回类型,默认为 :class:`SSLObject`。 " +"该属性可以在类实例上被重载以便返回自定义的 :class:`SSLObject` 的子类。" + +#: ../../library/ssl.rst:1878 +msgid "" +"Get statistics about the SSL sessions created or managed by this context. A " +"dictionary is returned which maps the names of each `piece of information " +"`_ to " +"their numeric values. For example, here is the total number of hits and " +"misses in the session cache since the context was created::" +msgstr "" +"获取由此上下文所创建或管理的 SSL 会话的相关统计信息。 返回将每个 `信息片 " +"`_ " +"的名称映射到其数字值的字典。 例如,以下是自上下文被创建以来会话缓存中命中和未命中的总数::" + +#: ../../library/ssl.rst:1889 +msgid "" +"Whether to match the peer cert's hostname in :meth:`SSLSocket.do_handshake`." +" The context's :attr:`~SSLContext.verify_mode` must be set to " +":data:`CERT_OPTIONAL` or :data:`CERT_REQUIRED`, and you must pass " +"*server_hostname* to :meth:`~SSLContext.wrap_socket` in order to match the " +"hostname. Enabling hostname checking automatically sets " +":attr:`~SSLContext.verify_mode` from :data:`CERT_NONE` to " +":data:`CERT_REQUIRED`. It cannot be set back to :data:`CERT_NONE` as long " +"as hostname checking is enabled. The :data:`PROTOCOL_TLS_CLIENT` protocol " +"enables hostname checking by default. With other protocols, hostname " +"checking must be enabled explicitly." +msgstr "" +"是否要将匹配 :meth:`SSLSocket.do_handshake` 中对等方证书的主机名。 该上下文的 " +":attr:`~SSLContext.verify_mode` 必须被设为 :data:`CERT_OPTIONAL` 或 " +":data:`CERT_REQUIRED`,并且你必须将 *server_hostname* 传给 " +":meth:`~SSLContext.wrap_socket` 以便匹配主机名。 启用主机名检查会自动将 " +":attr:`~SSLContext.verify_mode` 从 :data:`CERT_NONE` 设为 " +":data:`CERT_REQUIRED`。 只要启用了主机名检查就无法将其设回 :data:`CERT_NONE`。 " +":data:`PROTOCOL_TLS_CLIENT` 协议默认启用主机名检查。 对于其他协议,则必须显式地启用主机名检查。" + +#: ../../library/ssl.rst:1917 +msgid "" +":attr:`~SSLContext.verify_mode` is now automatically changed to " +":data:`CERT_REQUIRED` when hostname checking is enabled and " +":attr:`~SSLContext.verify_mode` is :data:`CERT_NONE`. Previously the same " +"operation would have failed with a :exc:`ValueError`." +msgstr "" +"现在当主机名检查被启用且 :attr:`~SSLContext.verify_mode` 为 :data:`CERT_NONE` 时 " +":attr:`~SSLContext.verify_mode` 会自动更改为 :data:`CERT_REQUIRED`。 " +"在之前版本中同样的操作将失败并引发 :exc:`ValueError`。" + +#: ../../library/ssl.rst:1924 +msgid "This features requires OpenSSL 0.9.8f or newer." +msgstr "此特性要求 OpenSSL 0.9.8f 或更新的版本。" + +#: ../../library/ssl.rst:1928 +msgid "" +"Write TLS keys to a keylog file, whenever key material is generated or " +"received. The keylog file is designed for debugging purposes only. The file " +"format is specified by NSS and used by many traffic analyzers such as " +"Wireshark. The log file is opened in append-only mode. Writes are " +"synchronized between threads, but not between processes." +msgstr "" +"每当生成或接收到密钥时,将 TLS 密钥写入到一个密钥日志文件。 密钥日志文件的设计仅适用于调试目的。 文件的格式由 NSS " +"指明并为许多流量分析工具例如 Wireshark 所使用。 日志文件会以追加模式打开。 写入操作会在线程之间同步,但不会在进程之间同步。" + +#: ../../library/ssl.rst:1938 +msgid "This features requires OpenSSL 1.1.1 or newer." +msgstr "此特性要求 OpenSSL 1.1.1 或更新的版本。" + +#: ../../library/ssl.rst:1942 +msgid "" +"A :class:`TLSVersion` enum member representing the highest supported TLS " +"version. The value defaults to :attr:`TLSVersion.MAXIMUM_SUPPORTED`. The " +"attribute is read-only for protocols other than :attr:`PROTOCOL_TLS`, " +":attr:`PROTOCOL_TLS_CLIENT`, and :attr:`PROTOCOL_TLS_SERVER`." +msgstr "" +"一个代表所支持的最高 TLS 版本的 :class:`TLSVersion` 枚举成员。 该值默认为 " +":attr:`TLSVersion.MAXIMUM_SUPPORTED`。 这个属性对于 :attr:`PROTOCOL_TLS`, " +":attr:`PROTOCOL_TLS_CLIENT` 和 :attr:`PROTOCOL_TLS_SERVER` 以外的其他协议来说都是只读的。" + +#: ../../library/ssl.rst:1947 +msgid "" +"The attributes :attr:`~SSLContext.maximum_version`, " +":attr:`~SSLContext.minimum_version` and :attr:`SSLContext.options` all " +"affect the supported SSL and TLS versions of the context. The implementation" +" does not prevent invalid combination. For example a context with " +":attr:`OP_NO_TLSv1_2` in :attr:`~SSLContext.options` and " +":attr:`~SSLContext.maximum_version` set to :attr:`TLSVersion.TLSv1_2` will " +"not be able to establish a TLS 1.2 connection." +msgstr "" +":attr:`~SSLContext.maximum_version`, :attr:`~SSLContext.minimum_version` 和 " +":attr:`SSLContext.options` 等属性都会影响上下文所支持的 SSL 和 TLS 版本。 这个实现不会阻止无效的组合。 例如一个 " +":attr:`~SSLContext.options` 为 :attr:`OP_NO_TLSv1_2` 而 " +":attr:`~SSLContext.maximum_version` 设为 :attr:`TLSVersion.TLSv1_2` 的上下文将无法建立 " +"TLS 1.2 连接。" + +#: ../../library/ssl.rst:1958 ../../library/ssl.rst:1970 +msgid "" +"This attribute is not available unless the ssl module is compiled with " +"OpenSSL 1.1.0g or newer." +msgstr "除非 ssl 模块使用 OpenSSL 1.1.0g 或更新的版本编译否则这个属性将不可用。" + +#: ../../library/ssl.rst:1965 +msgid "" +"Like :attr:`SSLContext.maximum_version` except it is the lowest supported " +"version or :attr:`TLSVersion.MINIMUM_SUPPORTED`." +msgstr "" +"与 :attr:`SSLContext.maximum_version` 类似,区别在于它是所支持的最低版本或为 " +":attr:`TLSVersion.MINIMUM_SUPPORTED`。" + +#: ../../library/ssl.rst:1977 +msgid "" +"Control the number of TLS 1.3 session tickets of a " +":attr:`TLS_PROTOCOL_SERVER` context. The setting has no impact on TLS 1.0 to" +" 1.2 connections." +msgstr "" +"控制 :attr:`TLS_PROTOCOL_SERVER` 上下文的 TLS 1.3 会话凭据数量。 这个设置不会影响 TLS 1.0 到 1.2 " +"连接。" + +#: ../../library/ssl.rst:1983 +msgid "" +"This attribute is not available unless the ssl module is compiled with " +"OpenSSL 1.1.1 or newer." +msgstr "除非 ssl 模块使用 OpenSSL 1.1.1 或更新的版本编译否则这个属性将不可用。" + +#: ../../library/ssl.rst:1990 +msgid "" +"An integer representing the set of SSL options enabled on this context. The " +"default value is :data:`OP_ALL`, but you can specify other options such as " +":data:`OP_NO_SSLv2` by ORing them together." +msgstr "" +"一个代表此上下文中所启用的 SSL 选项集的整数。 默认值为 :data:`OP_ALL`,但你也可以通过在选项间进行 OR 运算来指定其他选项例如 " +":data:`OP_NO_SSLv2`。" + +#: ../../library/ssl.rst:1995 +msgid "" +"With versions of OpenSSL older than 0.9.8m, it is only possible to set " +"options, not to clear them. Attempting to clear an option (by resetting the" +" corresponding bits) will raise a :exc:`ValueError`." +msgstr "" +"对于 0.9.8m 之前的 OpenSSL 版本,只能设置选项,而不能清除它们。 尝试(通过重置相应比特位)清除选项将会引发 " +":exc:`ValueError`。" + +#: ../../library/ssl.rst:1999 +msgid ":attr:`SSLContext.options` returns :class:`Options` flags:" +msgstr ":attr:`SSLContext.options` 返回 :class:`Options` 旗标:" + +#: ../../library/ssl.rst:2007 +msgid "" +"Enable TLS 1.3 post-handshake client authentication. Post-handshake auth is " +"disabled by default and a server can only request a TLS client certificate " +"during the initial handshake. When enabled, a server may request a TLS " +"client certificate at any time after the handshake." +msgstr "" +"启用 TLS 1.3 握手后客户端身份验证。 握手后验证默认是被禁用的,服务器只能在初始握手期间请求 TLS 客户端证书。 " +"当启用时,服务器可以在握手之后的任何时候请求 TLS 客户端证书。" + +#: ../../library/ssl.rst:2012 +msgid "" +"When enabled on client-side sockets, the client signals the server that it " +"supports post-handshake authentication." +msgstr "当在客户端套接字上启用时,客户端会向服务器发信号说明它支持握手后身份验证。" + +#: ../../library/ssl.rst:2015 +msgid "" +"When enabled on server-side sockets, :attr:`SSLContext.verify_mode` must be " +"set to :data:`CERT_OPTIONAL` or :data:`CERT_REQUIRED`, too. The actual " +"client cert exchange is delayed until " +":meth:`SSLSocket.verify_client_post_handshake` is called and some I/O is " +"performed." +msgstr "" +"当在服务器端套接字上启用时,:attr:`SSLContext.verify_mode` 也必须被设为 :data:`CERT_OPTIONAL` 或 " +":data:`CERT_REQUIRED`。 实际的客户端证书交换会被延迟直至 " +":meth:`SSLSocket.verify_client_post_handshake` 被调用并执行了一些 I/O 操作后再进行。" + +#: ../../library/ssl.rst:2022 +msgid "" +"Only available with OpenSSL 1.1.1 and TLS 1.3 enabled. Without TLS 1.3 " +"support, the property value is None and can't be modified" +msgstr "仅在 OpenSSL 1.1.1 且 TLS 1.3 被启用时可用。 如果没有 TLS 1.3 支持,该属性值将为 None 且不可被更改" + +#: ../../library/ssl.rst:2029 +msgid "" +"The protocol version chosen when constructing the context. This attribute " +"is read-only." +msgstr "构造上下文时所选择的协议版本。 这个属性是只读的。" + +#: ../../library/ssl.rst:2034 +msgid "" +"Whether :attr:`~SSLContext.check_hostname` falls back to verify the cert's " +"subject common name in the absence of a subject alternative name extension " +"(default: true)." +msgstr "" +"在没有目标替代名称扩展的情况下 :attr:`~SSLContext.check_hostname` 是否要回退为验证证书的通用名称(默认为真值)。" + +#: ../../library/ssl.rst:2039 +msgid "Only writeable with OpenSSL 1.1.0 or higher." +msgstr "仅在 OpenSSL 1.1.0 或更新的版本上可写。" + +#: ../../library/ssl.rst:2045 +msgid "" +"The flag had no effect with OpenSSL before version 1.1.1k. Python 3.8.9, " +"3.9.3, and 3.10 include workarounds for previous versions." +msgstr "" +"此旗标在 OpenSSL 1.1.1k 之前的版本上不起作用。 Python 3.8.9, 3.9.3, 和 3.10 包含了针对之前版本的变通处理。" + +#: ../../library/ssl.rst:2050 +msgid "" +"The flags for certificate verification operations. You can set flags like " +":data:`VERIFY_CRL_CHECK_LEAF` by ORing them together. By default OpenSSL " +"does neither require nor verify certificate revocation lists (CRLs). " +"Available only with openssl version 0.9.8+." +msgstr "" +"证书验证操作的旗标。 你可以通过对 :data:`VERIFY_CRL_CHECK_LEAF` 等值执行 OR 运算来设置组合旗标。 在默认情况下 " +"OpenSSL 不会要求也不会验证证书吊销列表(CRL)。 仅在 openssl 版本 0.9.8+ 上可用。" + +#: ../../library/ssl.rst:2057 +msgid ":attr:`SSLContext.verify_flags` returns :class:`VerifyFlags` flags:" +msgstr ":attr:`SSLContext.verify_flags` 返回 :class:`VerifyFlags` 旗标:" + +#: ../../library/ssl.rst:2065 +msgid "" +"Whether to try to verify other peers' certificates and how to behave if " +"verification fails. This attribute must be one of :data:`CERT_NONE`, " +":data:`CERT_OPTIONAL` or :data:`CERT_REQUIRED`." +msgstr "" +"是否要尝试验证其他对等方的证书以及如果验证失败应采取何种行为。 该属性值必须为 :data:`CERT_NONE`, " +":data:`CERT_OPTIONAL` 或 :data:`CERT_REQUIRED` 之一。" + +#: ../../library/ssl.rst:2069 +msgid ":attr:`SSLContext.verify_mode` returns :class:`VerifyMode` enum:" +msgstr ":attr:`SSLContext.verify_mode` 返回 :class:`VerifyMode` 枚举:" + +#: ../../library/ssl.rst:2082 +msgid "Certificates" +msgstr "证书" + +#: ../../library/ssl.rst:2084 +msgid "" +"Certificates in general are part of a public-key / private-key system. In " +"this system, each *principal*, (which may be a machine, or a person, or an " +"organization) is assigned a unique two-part encryption key. One part of the" +" key is public, and is called the *public key*; the other part is kept " +"secret, and is called the *private key*. The two parts are related, in that" +" if you encrypt a message with one of the parts, you can decrypt it with the" +" other part, and **only** with the other part." +msgstr "" +"总的来说证书是公钥/私钥系统的一个组成部分。 在这个系统中,每 个 *主体* (可能是一台机器、一个人或者一个组织) " +"都会分配到唯一的包含两部分的加密密钥。 一部分密钥是公开的,称为 *公钥*;另一部分密钥是保密的,称为 *私钥*。 " +"这两个部分是互相关联的,就是说如果你用其中一个部分来加密一条消息,你将能用并且 **只能** 用另一个部分来解密它。" + +#: ../../library/ssl.rst:2092 +msgid "" +"A certificate contains information about two principals. It contains the " +"name of a *subject*, and the subject's public key. It also contains a " +"statement by a second principal, the *issuer*, that the subject is who they " +"claim to be, and that this is indeed the subject's public key. The issuer's" +" statement is signed with the issuer's private key, which only the issuer " +"knows. However, anyone can verify the issuer's statement by finding the " +"issuer's public key, decrypting the statement with it, and comparing it to " +"the other information in the certificate. The certificate also contains " +"information about the time period over which it is valid. This is expressed" +" as two fields, called \"notBefore\" and \"notAfter\"." +msgstr "" +"在一个证书中包含有两个主体的相关信息。 它包含 *目标方* 的名称和目标方的公钥。 它还包含由第二个主体 *颁发方* " +"所发布的声明:目标方的身份与他们所宣称的一致,包含的公钥也确实是目标方的公钥。 颁发方的声明使用颁发方的私钥进行签名,该私钥的内容只有颁发方自己才知道。" +" 但是,任何人都可以找到颁发方的公钥,用它来解密这个声明,并将其与证书中的其他信息进行比较来验证颁发方声明的真实性。 证书还包含有关其有效期限的信息。 " +"这被表示为两个字段,即 \"notBefore\" 和 \"notAfter\"。" + +#: ../../library/ssl.rst:2102 +msgid "" +"In the Python use of certificates, a client or server can use a certificate " +"to prove who they are. The other side of a network connection can also be " +"required to produce a certificate, and that certificate can be validated to " +"the satisfaction of the client or server that requires such validation. The" +" connection attempt can be set to raise an exception if the validation " +"fails. Validation is done automatically, by the underlying OpenSSL " +"framework; the application need not concern itself with its mechanics. But " +"the application does usually need to provide sets of certificates to allow " +"this process to take place." +msgstr "" +"在 Python 中应用证书时,客户端或服务器可以用证书来证明自己的身份。 " +"还可以要求网络连接的另一方提供证书,提供的证书可以用于验证以满足客户端或服务器的验证要求。 如果验证失败,连接尝试可被设置为引发一个异常。 " +"验证是由下层的 OpenSSL 框架来自动执行的;应用程序本身不必关注其内部的机制。 但是应用程序通常需要提供一组证书以允许此过程的发生。" + +#: ../../library/ssl.rst:2112 +msgid "" +"Python uses files to contain certificates. They should be formatted as " +"\"PEM\" (see :rfc:`1422`), which is a base-64 encoded form wrapped with a " +"header line and a footer line::" +msgstr "" +"Python 使用文件来包含证书。 它们应当采用 \"PEM\" 格式 (参见 :rfc:`1422`),这是一种带有头部行和尾部行的 base-64 " +"编码包装形式::" + +#: ../../library/ssl.rst:2121 +msgid "Certificate chains" +msgstr "证书链" + +#: ../../library/ssl.rst:2123 +msgid "" +"The Python files which contain certificates can contain a sequence of " +"certificates, sometimes called a *certificate chain*. This chain should " +"start with the specific certificate for the principal who \"is\" the client " +"or server, and then the certificate for the issuer of that certificate, and " +"then the certificate for the issuer of *that* certificate, and so on up the " +"chain till you get to a certificate which is *self-signed*, that is, a " +"certificate which has the same subject and issuer, sometimes called a *root " +"certificate*. The certificates should just be concatenated together in the " +"certificate file. For example, suppose we had a three certificate chain, " +"from our server certificate to the certificate of the certification " +"authority that signed our server certificate, to the root certificate of the" +" agency which issued the certification authority's certificate::" +msgstr "" +"包含证书的 Python 文件可以包含一系列的证书,有时被称为 *证书链*。 这个证书链应当以 \"作为\" " +"客户端或服务器的主体的专属证书打头,然后是证书颁发方的证书,然后是 *上述* 证书的颁发方的证书,证书链就这样不断上溯直到你得到一个 *自签名* " +"的证书,即具有相同目标方和颁发方的证书,有时也称为 *根证书*。 在证书文件中这些证书应当被拼接为一体。 " +"例如,假设我们有一个包含三个证书的证书链,以我们的服务器证书打头,然后是为我们的服务器证书签名的证书颁发机构的证书,最后是为证书颁发机构的证书颁发证书的机构的根证书::" + +#: ../../library/ssl.rst:2147 +msgid "CA certificates" +msgstr "CA 证书" + +#: ../../library/ssl.rst:2149 +msgid "" +"If you are going to require validation of the other side of the connection's" +" certificate, you need to provide a \"CA certs\" file, filled with the " +"certificate chains for each issuer you are willing to trust. Again, this " +"file just contains these chains concatenated together. For validation, " +"Python will use the first chain it finds in the file which matches. The " +"platform's certificates file can be used by calling " +":meth:`SSLContext.load_default_certs`, this is done automatically with " +":func:`.create_default_context`." +msgstr "" +"如果你想要求对连接的另一方的证书进行验证,你必须提供一个 \"CA 证书\" 文件,其中包含了你愿意信任的每个颁发方的证书链。 " +"同样地,这个文件的内容就是这些证书链拼接在一起的结果。 为了进行验证,Python 将使用它在文件中找到的第一个匹配的证书链。 可以通过调用 " +":meth:`SSLContext.load_default_certs` 来使用系统平台的证书文件,这可以由 " +":func:`.create_default_context` 自动完成。" + +#: ../../library/ssl.rst:2158 +msgid "Combined key and certificate" +msgstr "合并的密钥和证书" + +#: ../../library/ssl.rst:2160 +msgid "" +"Often the private key is stored in the same file as the certificate; in this" +" case, only the ``certfile`` parameter to :meth:`SSLContext.load_cert_chain`" +" and :func:`wrap_socket` needs to be passed. If the private key is stored " +"with the certificate, it should come before the first certificate in the " +"certificate chain::" +msgstr "" +"私钥往往与证书存储在相同的文件中;在此情况下,只需要将 ``certfile`` 形参传给 " +":meth:`SSLContext.load_cert_chain` 和 :func:`wrap_socket`。 " +"如果私钥是与证书一起存储的,则它应当放在证书链的第一个证书之前::" + +#: ../../library/ssl.rst:2174 +msgid "Self-signed certificates" +msgstr "自签名证书" + +#: ../../library/ssl.rst:2176 +msgid "" +"If you are going to create a server that provides SSL-encrypted connection " +"services, you will need to acquire a certificate for that service. There " +"are many ways of acquiring appropriate certificates, such as buying one from" +" a certification authority. Another common practice is to generate a self-" +"signed certificate. The simplest way to do this is with the OpenSSL " +"package, using something like the following::" +msgstr "" +"如果你准备创建一个提供 SSL 加密连接服务的服务器,你需要为该服务获取一份证书。 有许多方式可以获取合适的证书,例如从证书颁发机构购买。 " +"另一种常见做法是生成自签名证书。 生成自签名证书的最简单方式是使用 OpenSSL 软件包,代码如下所示::" + +#: ../../library/ssl.rst:2205 +msgid "" +"The disadvantage of a self-signed certificate is that it is its own root " +"certificate, and no one else will have it in their cache of known (and " +"trusted) root certificates." +msgstr "自签名证书的缺点在于它是它自身的根证书,因此不会存在于别人的已知(且信任的)根证书缓存当中。" + +#: ../../library/ssl.rst:2211 +msgid "Examples" +msgstr "例子" + +#: ../../library/ssl.rst:2214 +msgid "Testing for SSL support" +msgstr "检测 SSL 支持" + +#: ../../library/ssl.rst:2216 +msgid "" +"To test for the presence of SSL support in a Python installation, user code " +"should use the following idiom::" +msgstr "要检测一个 Python 安装版中是否带有 SSL 支持,用户代码应当使用以下例程::" + +#: ../../library/ssl.rst:2227 +msgid "Client-side operation" +msgstr "客户端操作" + +#: ../../library/ssl.rst:2229 +msgid "" +"This example creates a SSL context with the recommended security settings " +"for client sockets, including automatic certificate verification::" +msgstr "这个例子创建了一个 SSL 上下文并使用客户端套接字的推荐安全设置,包括自动证书验证::" + +#: ../../library/ssl.rst:2234 +msgid "" +"If you prefer to tune security settings yourself, you might create a context" +" from scratch (but beware that you might not get the settings right)::" +msgstr "如果你喜欢自行调整安全设置,你可能需要从头创建一个上下文(但是请请注意避免不正确的设置)::" + +#: ../../library/ssl.rst:2241 +msgid "" +"(this snippet assumes your operating system places a bundle of all CA " +"certificates in ``/etc/ssl/certs/ca-bundle.crt``; if not, you'll get an " +"error and have to adjust the location)" +msgstr "" +"(这段代码假定你的操作系统将所有 CA 证书打包存放于 ``/etc/ssl/certs/ca-" +"bundle.crt``;如果不是这样,你将收到报错信息,必须修改此位置)" + +#: ../../library/ssl.rst:2245 +msgid "" +"The :data:`PROTOCOL_TLS_CLIENT` protocol configures the context for cert " +"validation and hostname verification. :attr:`~SSLContext.verify_mode` is set" +" to :data:`CERT_REQUIRED` and :attr:`~SSLContext.check_hostname` is set to " +"``True``. All other protocols create SSL contexts with insecure defaults." +msgstr "" +":data:`PROTOCOL_TLS_CLIENT` 协议配置用于证书验证和主机名验证的上下文。 " +":attr:`~SSLContext.verify_mode` 设为 :data:`CERT_REQUIRED` 而 " +":attr:`~SSLContext.check_hostname` 设为 ``True``。 所有其他协议都会使用不安全的默认值创建 SSL 上下文。" + +#: ../../library/ssl.rst:2250 +msgid "" +"When you use the context to connect to a server, :const:`CERT_REQUIRED` and " +":attr:`~SSLContext.check_hostname` validate the server certificate: it " +"ensures that the server certificate was signed with one of the CA " +"certificates, checks the signature for correctness, and verifies other " +"properties like validity and identity of the hostname::" +msgstr "" +"当你使用此上下文去连接服务器时,:const:`CERT_REQUIRED` 和 :attr:`~SSLContext.check_hostname` " +"会验证服务器证书;它将确认服务器证书使用了某个 CA 证书进行签名,检查签名是否正确,并验证其他属性例如主机名的有效性和身份真实性::" + +#: ../../library/ssl.rst:2260 +msgid "You may then fetch the certificate::" +msgstr "你可以随后获取该证书::" + +#: ../../library/ssl.rst:2264 +msgid "" +"Visual inspection shows that the certificate does identify the desired " +"service (that is, the HTTPS host ``www.python.org``)::" +msgstr "可视化检查显示证书能够证明目标服务 (即 HTTPS 主机 ``www.python.org``) 的身份::" + +#: ../../library/ssl.rst:2307 +msgid "" +"Now the SSL channel is established and the certificate verified, you can " +"proceed to talk with the server::" +msgstr "现在 SSL 通道已建立并已验证了证书,你可以继续与服务器对话了::" + +#: ../../library/ssl.rst:2334 +msgid "Server-side operation" +msgstr "服务器端操作" + +#: ../../library/ssl.rst:2336 +msgid "" +"For server operation, typically you'll need to have a server certificate, " +"and private key, each in a file. You'll first create a context holding the " +"key and the certificate, so that clients can check your authenticity. Then " +"you'll open a socket, bind it to a port, call :meth:`listen` on it, and " +"start waiting for clients to connect::" +msgstr "" +"对于服务器操作,通常你需要在文件中存放服务器证书和私钥各一份。 你将首先创建一个包含密钥和证书的上下文,这样客户端就能检查你的身份真实性。 " +"然后你将打开一个套接字,将其绑定到一个端口,在其上调用 :meth:`listen`,并开始等待客户端连接::" + +#: ../../library/ssl.rst:2351 +msgid "" +"When a client connects, you'll call :meth:`accept` on the socket to get the " +"new socket from the other end, and use the context's " +":meth:`SSLContext.wrap_socket` method to create a server-side SSL socket for" +" the connection::" +msgstr "" +"当有客户端连接时,你将在套接字上调用 :meth:`accept` 以从另一端获取新的套接字,并使用上下文的 " +":meth:`SSLContext.wrap_socket` 方法来为连接创建一个服务器端 SSL 套接字::" + +#: ../../library/ssl.rst:2364 +msgid "" +"Then you'll read data from the ``connstream`` and do something with it till " +"you are finished with the client (or the client is finished with you)::" +msgstr "随后你将从 ``connstream`` 读取数据并对其进行处理,直至你结束与客户端的会话(或客户端结束与你的会话)::" + +#: ../../library/ssl.rst:2378 +msgid "" +"And go back to listening for new client connections (of course, a real " +"server would probably handle each client connection in a separate thread, or" +" put the sockets in :ref:`non-blocking mode ` and use an " +"event loop)." +msgstr "" +"并返回至监听新的客户端连接(当然,真正的服务器应当会在单独的线程中处理每个客户端连接,或者将套接字设为 :ref:`非阻塞模式 ` 并使用事件循环)。" + +#: ../../library/ssl.rst:2386 +msgid "Notes on non-blocking sockets" +msgstr "关于非阻塞套接字的说明" + +#: ../../library/ssl.rst:2388 +msgid "" +"SSL sockets behave slightly different than regular sockets in non-blocking " +"mode. When working with non-blocking sockets, there are thus several things " +"you need to be aware of:" +msgstr "在非阻塞模式下 SSL 套接字的行为与常规套接字略有不同。 当使用非阻塞模式时,你需要注意下面这些事情:" + +#: ../../library/ssl.rst:2392 +msgid "" +"Most :class:`SSLSocket` methods will raise either :exc:`SSLWantWriteError` " +"or :exc:`SSLWantReadError` instead of :exc:`BlockingIOError` if an I/O " +"operation would block. :exc:`SSLWantReadError` will be raised if a read " +"operation on the underlying socket is necessary, and " +":exc:`SSLWantWriteError` for a write operation on the underlying socket. " +"Note that attempts to *write* to an SSL socket may require *reading* from " +"the underlying socket first, and attempts to *read* from the SSL socket may " +"require a prior *write* to the underlying socket." +msgstr "" +"如果一个 I/O 操作会阻塞,大多数 :class:`SSLSocket` 方法都将引发 :exc:`SSLWantWriteError` 或 " +":exc:`SSLWantReadError` 而非 :exc:`BlockingIOError`。 如果有必要在下层套接字上执行读取操作将引发 " +":exc:`SSLWantReadError`,在下层套接字上执行写入操作则将引发 :exc:`SSLWantWriteError`。 请注意尝试 " +"*写入* 到 SSL 套接字可能需要先从下层套接字 *读取*,而尝试从 SSL 套接字 *读取* 则可能需要先向下层套接字 *写入*。" + +#: ../../library/ssl.rst:2404 +msgid "" +"In earlier Python versions, the :meth:`!SSLSocket.send` method returned zero" +" instead of raising :exc:`SSLWantWriteError` or :exc:`SSLWantReadError`." +msgstr "" +"在较早的 Python 版本中,:meth:`!SSLSocket.send` 方法会返回零值而非引发 :exc:`SSLWantWriteError`" +" 或 :exc:`SSLWantReadError`。" + +#: ../../library/ssl.rst:2408 +msgid "" +"Calling :func:`~select.select` tells you that the OS-level socket can be " +"read from (or written to), but it does not imply that there is sufficient " +"data at the upper SSL layer. For example, only part of an SSL frame might " +"have arrived. Therefore, you must be ready to handle :meth:`SSLSocket.recv`" +" and :meth:`SSLSocket.send` failures, and retry after another call to " +":func:`~select.select`." +msgstr "" +"调用 :func:`~select.select` 将告诉你可以从 OS 层级的套接字读取(或向其写入),但这并不意味着在上面的 SSL " +"层有足够的数据。 例如,可能只有部分 SSL 帧已经到达。 因此,你必须准备好处理 :meth:`SSLSocket.recv` 和 " +":meth:`SSLSocket.send` 失败的情况,并在再次调用 :func:`~select.select` 之后重新尝试。" + +#: ../../library/ssl.rst:2415 +msgid "" +"Conversely, since the SSL layer has its own framing, a SSL socket may still " +"have data available for reading without :func:`~select.select` being aware " +"of it. Therefore, you should first call :meth:`SSLSocket.recv` to drain any" +" potentially available data, and then only block on a :func:`~select.select`" +" call if still necessary." +msgstr "" +"相反地,由于 SSL 层具有自己的帧机制,一个 SSL 套接字可能仍有可读取的数据而 :func:`~select.select` 并不知道这一点。 " +"因此,你应当先调用 :meth:`SSLSocket.recv` 取走所有潜在的可用数据,然后只在必要时对 :func:`~select.select`" +" 调用执行阻塞。" + +#: ../../library/ssl.rst:2421 +msgid "" +"(of course, similar provisions apply when using other primitives such as " +":func:`~select.poll`, or those in the :mod:`selectors` module)" +msgstr "" +"(当然,类似的保留规则在使用其他原语例如 :func:`~select.poll`,或 :mod:`selectors` 模块中的原语时也适用)" + +#: ../../library/ssl.rst:2424 +msgid "" +"The SSL handshake itself will be non-blocking: the " +":meth:`SSLSocket.do_handshake` method has to be retried until it returns " +"successfully. Here is a synopsis using :func:`~select.select` to wait for " +"the socket's readiness::" +msgstr "" +"SSL 握手本身将是非阻塞的: :meth:`SSLSocket.do_handshake` 方法必须不断重试直至其成功返回。 下面是一个使用 " +":func:`~select.select` 来等待套接字就绪的简短例子::" + +#: ../../library/ssl.rst:2440 +msgid "" +"The :mod:`asyncio` module supports :ref:`non-blocking SSL sockets ` and provides a higher level API. It polls for events using the" +" :mod:`selectors` module and handles :exc:`SSLWantWriteError`, " +":exc:`SSLWantReadError` and :exc:`BlockingIOError` exceptions. It runs the " +"SSL handshake asynchronously as well." +msgstr "" +":mod:`asyncio` 模块支持 :ref:`非阻塞 SSL 套接字 ` 并提供了更高层级的 API。 它会使用" +" :mod:`selectors` 模块来轮询事件并处理 :exc:`SSLWantWriteError`, " +":exc:`SSLWantReadError` 和 :exc:`BlockingIOError` 等异常。 它还会异步地执行 SSL 握手。" + +#: ../../library/ssl.rst:2449 +msgid "Memory BIO Support" +msgstr "内存 BIO 支持" + +#: ../../library/ssl.rst:2453 +msgid "" +"Ever since the SSL module was introduced in Python 2.6, the " +":class:`SSLSocket` class has provided two related but distinct areas of " +"functionality:" +msgstr "自从 SSL 模块在 Python 2.6 起被引入之后,:class:`SSLSocket` 类提供了两个互相关联但彼此独立的功能分块:" + +#: ../../library/ssl.rst:2456 +msgid "SSL protocol handling" +msgstr "SSL 协议处理" + +#: ../../library/ssl.rst:2457 +msgid "Network IO" +msgstr "网络 IO" + +#: ../../library/ssl.rst:2459 +msgid "" +"The network IO API is identical to that provided by :class:`socket.socket`, " +"from which :class:`SSLSocket` also inherits. This allows an SSL socket to be" +" used as a drop-in replacement for a regular socket, making it very easy to " +"add SSL support to an existing application." +msgstr "" +"网络 IO API 与 :class:`socket.socket` 所提供的功能一致,:class:`SSLSocket` 也是从那里继承而来的。 " +"这允许 SSL 套接字被用作常规套接字的替代,使得向现有应用程序添加 SSL 支持变得非常容易。" + +#: ../../library/ssl.rst:2464 +msgid "" +"Combining SSL protocol handling and network IO usually works well, but there" +" are some cases where it doesn't. An example is async IO frameworks that " +"want to use a different IO multiplexing model than the \"select/poll on a " +"file descriptor\" (readiness based) model that is assumed by " +":class:`socket.socket` and by the internal OpenSSL socket IO routines. This " +"is mostly relevant for platforms like Windows where this model is not " +"efficient. For this purpose, a reduced scope variant of :class:`SSLSocket` " +"called :class:`SSLObject` is provided." +msgstr "" +"将 SSL 协议处理与网络 IO 结合使用通常都能运行良好,但在某些情况下则不能。 此情况的一个例子是 async IO 框架,该框架要使用不同的 IO" +" 多路复用模型而非 (基于就绪状态的) \"在文件描述器上执行选择/轮询\" 模型,该模型是 :class:`socket.socket` 和内部 " +"OpenSSL 套接字 IO 例程正常运行的假设前提。 这种情况在该模型效率不高的 Windows 平台上最为常见。 为此还提供了一个 " +":class:`SSLSocket` 的简化形式,称为 :class:`SSLObject`。" + +#: ../../library/ssl.rst:2475 +msgid "" +"A reduced-scope variant of :class:`SSLSocket` representing an SSL protocol " +"instance that does not contain any network IO methods. This class is " +"typically used by framework authors that want to implement asynchronous IO " +"for SSL through memory buffers." +msgstr "" +":class:`SSLSocket` 的简化形式,表示一个不包含任何网络 IO 方法的 SSL 协议实例。 这个类通常由想要通过内存缓冲区为 SSL " +"实现异步 IO 的框架作者来使用。" + +#: ../../library/ssl.rst:2480 +msgid "" +"This class implements an interface on top of a low-level SSL object as " +"implemented by OpenSSL. This object captures the state of an SSL connection " +"but does not provide any network IO itself. IO needs to be performed through" +" separate \"BIO\" objects which are OpenSSL's IO abstraction layer." +msgstr "" +"这个类在低层级 SSL 对象上实现了一个接口,与 OpenSSL 所实现的类似。 此对象会捕获 SSL 连接的状态但其本身不提供任何网络 IO。 IO " +"需要通过单独的 \"BIO\" 对象来执行,该对象是 OpenSSL 的 IO 抽象层。" + +#: ../../library/ssl.rst:2485 +msgid "" +"This class has no public constructor. An :class:`SSLObject` instance must " +"be created using the :meth:`~SSLContext.wrap_bio` method. This method will " +"create the :class:`SSLObject` instance and bind it to a pair of BIOs. The " +"*incoming* BIO is used to pass data from Python to the SSL protocol " +"instance, while the *outgoing* BIO is used to pass data the other way " +"around." +msgstr "" +"这个类没有公有构造器。 :class:`SSLObject` 实例必须使用 :meth:`~SSLContext.wrap_bio` 方法来创建。 " +"此方法将创建 :class:`SSLObject` 实例并将其绑定到一个 BIO 对。 其中 *incoming* BIO 用来将数据从 Python " +"传递到 SSL 协议实例,而 *outgoing* BIO 用来进行数据反向传递。" + +#: ../../library/ssl.rst:2492 +msgid "The following methods are available:" +msgstr "可以使用以下方法:" + +#: ../../library/ssl.rst:2494 +msgid ":attr:`~SSLSocket.context`" +msgstr ":attr:`~SSLSocket.context`" + +#: ../../library/ssl.rst:2495 +msgid ":attr:`~SSLSocket.server_side`" +msgstr ":attr:`~SSLSocket.server_side`" + +#: ../../library/ssl.rst:2496 +msgid ":attr:`~SSLSocket.server_hostname`" +msgstr ":attr:`~SSLSocket.server_hostname`" + +#: ../../library/ssl.rst:2497 +msgid ":attr:`~SSLSocket.session`" +msgstr ":attr:`~SSLSocket.session`" + +#: ../../library/ssl.rst:2498 +msgid ":attr:`~SSLSocket.session_reused`" +msgstr ":attr:`~SSLSocket.session_reused`" + +#: ../../library/ssl.rst:2499 +msgid ":meth:`~SSLSocket.read`" +msgstr ":meth:`~SSLSocket.read`" + +#: ../../library/ssl.rst:2500 +msgid ":meth:`~SSLSocket.write`" +msgstr ":meth:`~SSLSocket.write`" + +#: ../../library/ssl.rst:2501 +msgid ":meth:`~SSLSocket.getpeercert`" +msgstr ":meth:`~SSLSocket.getpeercert`" + +#: ../../library/ssl.rst:2502 +msgid ":meth:`~SSLSocket.selected_alpn_protocol`" +msgstr ":meth:`~SSLSocket.selected_alpn_protocol`" + +#: ../../library/ssl.rst:2503 +msgid ":meth:`~SSLSocket.selected_npn_protocol`" +msgstr ":meth:`~SSLSocket.selected_npn_protocol`" + +#: ../../library/ssl.rst:2504 +msgid ":meth:`~SSLSocket.cipher`" +msgstr ":meth:`~SSLSocket.cipher`" + +#: ../../library/ssl.rst:2505 +msgid ":meth:`~SSLSocket.shared_ciphers`" +msgstr ":meth:`~SSLSocket.shared_ciphers`" + +#: ../../library/ssl.rst:2506 +msgid ":meth:`~SSLSocket.compression`" +msgstr ":meth:`~SSLSocket.compression`" + +#: ../../library/ssl.rst:2507 +msgid ":meth:`~SSLSocket.pending`" +msgstr ":meth:`~SSLSocket.pending`" + +#: ../../library/ssl.rst:2508 +msgid ":meth:`~SSLSocket.do_handshake`" +msgstr ":meth:`~SSLSocket.do_handshake`" + +#: ../../library/ssl.rst:2509 +msgid ":meth:`~SSLSocket.verify_client_post_handshake`" +msgstr ":meth:`~SSLSocket.verify_client_post_handshake`" + +#: ../../library/ssl.rst:2510 +msgid ":meth:`~SSLSocket.unwrap`" +msgstr ":meth:`~SSLSocket.unwrap`" + +#: ../../library/ssl.rst:2511 +msgid ":meth:`~SSLSocket.get_channel_binding`" +msgstr ":meth:`~SSLSocket.get_channel_binding`" + +#: ../../library/ssl.rst:2512 +msgid ":meth:`~SSLSocket.version`" +msgstr ":meth:`~SSLSocket.version`" + +#: ../../library/ssl.rst:2514 +msgid "" +"When compared to :class:`SSLSocket`, this object lacks the following " +"features:" +msgstr "与 :class:`SSLSocket` 相比,此对象缺少下列特性:" + +#: ../../library/ssl.rst:2517 +msgid "" +"Any form of network IO; ``recv()`` and ``send()`` read and write only to the" +" underlying :class:`MemoryBIO` buffers." +msgstr "" +"任何形式的网络 IO; ``recv()`` 和 ``send()`` 仅对下层的 :class:`MemoryBIO` 缓冲区执行读取和写入。" + +#: ../../library/ssl.rst:2520 +msgid "" +"There is no *do_handshake_on_connect* machinery. You must always manually " +"call :meth:`~SSLSocket.do_handshake` to start the handshake." +msgstr "" +"不存在 *do_handshake_on_connect* 机制。 你必须总是手动调用 :meth:`~SSLSocket.do_handshake` " +"来开始握手操作。" + +#: ../../library/ssl.rst:2523 +msgid "" +"There is no handling of *suppress_ragged_eofs*. All end-of-file conditions " +"that are in violation of the protocol are reported via the " +":exc:`SSLEOFError` exception." +msgstr "" +"不存在对 *suppress_ragged_eofs* 的处理。 所有违反协议的文件结束条件将通过 :exc:`SSLEOFError` 异常来报告。" + +#: ../../library/ssl.rst:2527 +msgid "" +"The method :meth:`~SSLSocket.unwrap` call does not return anything, unlike " +"for an SSL socket where it returns the underlying socket." +msgstr "方法 :meth:`~SSLSocket.unwrap` 的调用不返回任何东西,不会如 SSL 套接字那样返回下层的套接字。" + +#: ../../library/ssl.rst:2530 +msgid "" +"The *server_name_callback* callback passed to " +":meth:`SSLContext.set_servername_callback` will get an :class:`SSLObject` " +"instance instead of a :class:`SSLSocket` instance as its first parameter." +msgstr "" +"*server_name_callback* 回调被传给 :meth:`SSLContext.set_servername_callback` " +"时将获得一个 :class:`SSLObject` 实例而非 :class:`SSLSocket` 实例作为其第一个形参。" + +#: ../../library/ssl.rst:2534 +msgid "Some notes related to the use of :class:`SSLObject`:" +msgstr "有关 :class:`SSLObject` 用法的一些说明:" + +#: ../../library/ssl.rst:2536 +msgid "" +"All IO on an :class:`SSLObject` is :ref:`non-blocking `. " +"This means that for example :meth:`~SSLSocket.read` will raise an " +":exc:`SSLWantReadError` if it needs more data than the incoming BIO has " +"available." +msgstr "" +"在 :class:`SSLObject` 上的所有 IO 都是 :ref:`非阻塞的 `。 这意味着例如 " +":meth:`~SSLSocket.read` 在其需要比 incoming BIO 可用的更多数据时将会引发 " +":exc:`SSLWantReadError`。" + +#: ../../library/ssl.rst:2541 +msgid "" +"There is no module-level ``wrap_bio()`` call like there is for " +":meth:`~SSLContext.wrap_socket`. An :class:`SSLObject` is always created via" +" an :class:`SSLContext`." +msgstr "" +"不存在模块层级的 ``wrap_bio()`` 调用,就像 :meth:`~SSLContext.wrap_socket` 那样。 " +":class:`SSLObject` 总是通过 :class:`SSLContext` 来创建。" + +#: ../../library/ssl.rst:2545 +msgid "" +":class:`SSLObject` instances must to created with " +":meth:`~SSLContext.wrap_bio`. In earlier versions, it was possible to create" +" instances directly. This was never documented or officially supported." +msgstr "" +":class:`SSLObject` 的实例必须使用 :meth:`~SSLContext.wrap_bio` 来创建。 " +"在较早的版本中,直接创建实例是可能的。 但这从未被记入文档或是被正式支持。" + +#: ../../library/ssl.rst:2551 +msgid "" +"An SSLObject communicates with the outside world using memory buffers. The " +"class :class:`MemoryBIO` provides a memory buffer that can be used for this " +"purpose. It wraps an OpenSSL memory BIO (Basic IO) object:" +msgstr "" +"SSLObject 会使用内存缓冲区与外部世界通信。 :class:`MemoryBIO` 类提供了可被用于此目的的内存缓冲区。 它包装了一个 " +"OpenSSL 内存 BIO (Basic IO) 对象:" + +#: ../../library/ssl.rst:2557 +msgid "" +"A memory buffer that can be used to pass data between Python and an SSL " +"protocol instance." +msgstr "一个可被用来在 Python 和 SSL 协议实例之间传递数据的内存缓冲区。" + +#: ../../library/ssl.rst:2562 +msgid "Return the number of bytes currently in the memory buffer." +msgstr "返回当前存在于内存缓冲区的字节数。" + +#: ../../library/ssl.rst:2566 +msgid "" +"A boolean indicating whether the memory BIO is current at the end-of-file " +"position." +msgstr "一个表明内存 BIO 目前是否位于文件末尾的布尔值。" + +#: ../../library/ssl.rst:2571 +msgid "" +"Read up to *n* bytes from the memory buffer. If *n* is not specified or " +"negative, all bytes are returned." +msgstr "从内存缓冲区读取至多 *n* 个字节。 如果 *n* 未指定或为负值,则返回全部字节数据。" + +#: ../../library/ssl.rst:2576 +msgid "" +"Write the bytes from *buf* to the memory BIO. The *buf* argument must be an " +"object supporting the buffer protocol." +msgstr "将字节数据从 *buf* 写入到内存 BIO。 *buf* 参数必须为支持缓冲区协议的对象。" + +#: ../../library/ssl.rst:2579 +msgid "" +"The return value is the number of bytes written, which is always equal to " +"the length of *buf*." +msgstr "返回值为写入的字节数,它总是与 *buf* 的长度相等。" + +#: ../../library/ssl.rst:2584 +msgid "" +"Write an EOF marker to the memory BIO. After this method has been called, it" +" is illegal to call :meth:`~MemoryBIO.write`. The attribute :attr:`eof` will" +" become true after all data currently in the buffer has been read." +msgstr "" +"将一个 EOF 标记写入到内存 BIO。 在此方法被调用以后,再调用 :meth:`~MemoryBIO.write` 将是非法的。 属性 " +":attr:`eof` will 在缓冲区当前的所有数据都被读取之后将变为真值。" + +#: ../../library/ssl.rst:2590 +msgid "SSL session" +msgstr "SSL 会话" + +#: ../../library/ssl.rst:2596 +msgid "Session object used by :attr:`~SSLSocket.session`." +msgstr ":attr:`~SSLSocket.session` 所使用的会话对象。" + +#: ../../library/ssl.rst:2608 +msgid "Security considerations" +msgstr "安全考量" + +#: ../../library/ssl.rst:2611 +msgid "Best defaults" +msgstr "最佳默认值" + +#: ../../library/ssl.rst:2613 +msgid "" +"For **client use**, if you don't have any special requirements for your " +"security policy, it is highly recommended that you use the " +":func:`create_default_context` function to create your SSL context. It will " +"load the system's trusted CA certificates, enable certificate validation and" +" hostname checking, and try to choose reasonably secure protocol and cipher " +"settings." +msgstr "" +"针对 **客户端使用**,如果你对于安全策略没有任何特殊要求,则强烈推荐你使用 :func:`create_default_context` " +"函数来创建你的 SSL 上下文。 它将加载系统的受信任 CA 证书,启用证书验证和主机名检查,并尝试合理地选择安全的协议和密码设置。" + +#: ../../library/ssl.rst:2620 +msgid "" +"For example, here is how you would use the :class:`smtplib.SMTP` class to " +"create a trusted, secure connection to a SMTP server::" +msgstr "例如,以下演示了你应当如何使用 :class:`smtplib.SMTP` 类来创建指向一个 SMTP 服务器的受信任且安全的连接::" + +#: ../../library/ssl.rst:2629 +msgid "" +"If a client certificate is needed for the connection, it can be added with " +":meth:`SSLContext.load_cert_chain`." +msgstr "如果连接需要客户端证书,可使用 :meth:`SSLContext.load_cert_chain` 来添加。" + +#: ../../library/ssl.rst:2632 +msgid "" +"By contrast, if you create the SSL context by calling the " +":class:`SSLContext` constructor yourself, it will not have certificate " +"validation nor hostname checking enabled by default. If you do so, please " +"read the paragraphs below to achieve a good security level." +msgstr "" +"作为对比,如果你通过自行调用 :class:`SSLContext` 构造器来创建 SSL 上下文,它默认将不会启用证书验证和主机名检查。 " +"如果你这样做,请阅读下面的段落以达到良好的安全级别。" + +#: ../../library/ssl.rst:2638 +msgid "Manual settings" +msgstr "手动设置" + +#: ../../library/ssl.rst:2641 +msgid "Verifying certificates" +msgstr "验证证书" + +#: ../../library/ssl.rst:2643 +msgid "" +"When calling the :class:`SSLContext` constructor directly, " +":const:`CERT_NONE` is the default. Since it does not authenticate the other" +" peer, it can be insecure, especially in client mode where most of time you " +"would like to ensure the authenticity of the server you're talking to. " +"Therefore, when in client mode, it is highly recommended to use " +":const:`CERT_REQUIRED`. However, it is in itself not sufficient; you also " +"have to check that the server certificate, which can be obtained by calling " +":meth:`SSLSocket.getpeercert`, matches the desired service. For many " +"protocols and applications, the service can be identified by the hostname; " +"in this case, the :func:`match_hostname` function can be used. This common " +"check is automatically performed when :attr:`SSLContext.check_hostname` is " +"enabled." +msgstr "" +"当直接调用 :class:`SSLContext` 构造器时,默认会使用 :const:`CERT_NONE`。 " +"由于它不会验证对等方的身份真实性,因此是不安全的,特别是在客户端模式下,大多数时候你都希望能保证你所连接的服务器的身份真实性。 " +"因此,当处于客户端模式时,强烈推荐使用 :const:`CERT_REQUIRED`。 但是,光这样还不够;你还必须检查服务器证书,这可以通过调用 " +":meth:`SSLSocket.getpeercert` 来获取并匹配目标服务。 对于许多协议和应用来说,服务可通过主机名来标识;在此情况下,可以使用" +" :func:`match_hostname` 函数。 这种通用检测会在 :attr:`SSLContext.check_hostname` " +"被启用时自动执行。" + +#: ../../library/ssl.rst:2656 +msgid "" +"Hostname matchings is now performed by OpenSSL. Python no longer uses " +":func:`match_hostname`." +msgstr "主机名匹配现在是由 OpenSSL 来执行的。 Python 不会再使用 :func:`match_hostname`。" + +#: ../../library/ssl.rst:2660 +msgid "" +"In server mode, if you want to authenticate your clients using the SSL layer" +" (rather than using a higher-level authentication mechanism), you'll also " +"have to specify :const:`CERT_REQUIRED` and similarly check the client " +"certificate." +msgstr "" +"在服务器模式下,如果你想要使用 SSL 层来验证客户端(而不是使用更高层级的验证机制),你也必须要指定 :const:`CERT_REQUIRED` " +"并以类似方式检查客户端证书。" + +#: ../../library/ssl.rst:2666 +msgid "Protocol versions" +msgstr "协议版本" + +#: ../../library/ssl.rst:2668 +msgid "" +"SSL versions 2 and 3 are considered insecure and are therefore dangerous to " +"use. If you want maximum compatibility between clients and servers, it is " +"recommended to use :const:`PROTOCOL_TLS_CLIENT` or " +":const:`PROTOCOL_TLS_SERVER` as the protocol version. SSLv2 and SSLv3 are " +"disabled by default." +msgstr "" +"SSL 版本 2 和 3 被认为是不安全的因而使用它们会有风险。 如果你想要客户端和服务器之间有最大的兼容性,推荐使用 " +":const:`PROTOCOL_TLS_CLIENT` 或 :const:`PROTOCOL_TLS_SERVER` 作为协议版本。 SSLv2 和 " +"SSLv3 默认会被禁用。" + +#: ../../library/ssl.rst:2681 +msgid "" +"The SSL context created above will only allow TLSv1.2 and later (if " +"supported by your system) connections to a server. " +":const:`PROTOCOL_TLS_CLIENT` implies certificate validation and hostname " +"checks by default. You have to load certificates into the context." +msgstr "" +"前面创建的 SSL 上下文将只允许 TLSv1.2 及更新版本(如果你的系统支持)的服务器连接。 " +":const:`PROTOCOL_TLS_CLIENT` 默认会使用证书验证和主机名检查。 你必须将证书加载到上下文中。" + +#: ../../library/ssl.rst:2688 +msgid "Cipher selection" +msgstr "密码选择" + +#: ../../library/ssl.rst:2690 +msgid "" +"If you have advanced security requirements, fine-tuning of the ciphers " +"enabled when negotiating a SSL session is possible through the " +":meth:`SSLContext.set_ciphers` method. Starting from Python 3.2.3, the ssl " +"module disables certain weak ciphers by default, but you may want to further" +" restrict the cipher choice. Be sure to read OpenSSL's documentation about " +"the `cipher list format " +"`_. If you want to check which ciphers are enabled by a given cipher " +"list, use :meth:`SSLContext.get_ciphers` or the ``openssl ciphers`` command " +"on your system." +msgstr "" +"如果你有更高级的安全要求,也可以通过 :meth:`SSLContext.set_ciphers` 方法在协商 SSL 会话时对所启用的加密进行微调。 " +"从 Python 3.2.3 开始,ssl 默认会禁用某些较弱的加密,但你还可能希望进一步限制加密选项。 请确保仔细阅读 OpenSSL 文档中有关 " +"`加密列表格式 `_ 的部分。 如果你想要检查给定的加密列表启用了哪些加密,可以使用 " +":meth:`SSLContext.get_ciphers` 或所在系统的 ``openssl ciphers`` 命令。" + +#: ../../library/ssl.rst:2701 +msgid "Multi-processing" +msgstr "多进程" + +#: ../../library/ssl.rst:2703 +msgid "" +"If using this module as part of a multi-processed application (using, for " +"example the :mod:`multiprocessing` or :mod:`concurrent.futures` modules), be" +" aware that OpenSSL's internal random number generator does not properly " +"handle forked processes. Applications must change the PRNG state of the " +"parent process if they use any SSL feature with :func:`os.fork`. Any " +"successful call of :func:`~ssl.RAND_add`, :func:`~ssl.RAND_bytes` or " +":func:`~ssl.RAND_pseudo_bytes` is sufficient." +msgstr "" +"如果使用此模块作为多进程应用的一部分(例如使用 :mod:`multiprocessing` 或 :mod:`concurrent.futures` " +"模块),请注意 OpenSSL 的内部随机数字生成器并不能正确处理分支进程。 应用程序必须修改父进程的 PRNG 状态,如果它们要使用任何包含 " +":func:`os.fork` 的 SSL 特性的话。 任何对 :func:`~ssl.RAND_add`, " +":func:`~ssl.RAND_bytes` 或 :func:`~ssl.RAND_pseudo_bytes` 都可以 做到这一点。" + +#: ../../library/ssl.rst:2715 +msgid "TLS 1.3" +msgstr "TLS 1.3" + +#: ../../library/ssl.rst:2719 +msgid "" +"Python has provisional and experimental support for TLS 1.3 with OpenSSL " +"1.1.1. The new protocol behaves slightly differently than previous version " +"of TLS/SSL. Some new TLS 1.3 features are not yet available." +msgstr "" +"Python 通过 OpenSSL 1.1.1 提供了临时性和实验性的 TLS 1.3 支持。 这个新协议的行为与之前版本的 TLS/SSL 略有不同。" +" 某些新的 TLS 1.3 特性暂时还不可用。" + +#: ../../library/ssl.rst:2723 +msgid "" +"TLS 1.3 uses a disjunct set of cipher suites. All AES-GCM and ChaCha20 " +"cipher suites are enabled by default. The method " +":meth:`SSLContext.set_ciphers` cannot enable or disable any TLS 1.3 ciphers " +"yet, but :meth:`SSLContext.get_ciphers` returns them." +msgstr "" +"TLS 1.3 使用一组不同的加密套件集。 默认情况下所有 AES-GCM 和 ChaCha20 加密套件都会被启用。 " +":meth:`SSLContext.set_ciphers` 方法还不能启用或禁用任何 TLS 1.3 加密,但 " +":meth:`SSLContext.get_ciphers` 会返回它们。" + +#: ../../library/ssl.rst:2727 +msgid "" +"Session tickets are no longer sent as part of the initial handshake and are " +"handled differently. :attr:`SSLSocket.session` and :class:`SSLSession` are " +"not compatible with TLS 1.3." +msgstr "" +"会话凭据不再会作为初始握手的组成部分被发送而是以不同的方式来处理。 :attr:`SSLSocket.session` 和 " +":class:`SSLSession` 与 TLS 1.3 不兼容。" + +#: ../../library/ssl.rst:2730 +msgid "" +"Client-side certificates are also no longer verified during the initial " +"handshake. A server can request a certificate at any time. Clients process" +" certificate requests while they send or receive application data from the " +"server." +msgstr "客户端证书在初始握手期间也不会再被验证。 服务器可以在任何时候请求证书。 客户端会在它们从服务器发送或接收应用数据时处理证书请求。" + +#: ../../library/ssl.rst:2734 +msgid "" +"TLS 1.3 features like early data, deferred TLS client cert request, " +"signature algorithm configuration, and rekeying are not supported yet." +msgstr "早期数据、延迟的 TLS 客户端证书请求、签名算法配置和密钥重生成等 TLS 1.3 特性尚未被支持。" + +#: ../../library/ssl.rst:2741 +msgid "LibreSSL support" +msgstr "LibreSSL 支持" + +#: ../../library/ssl.rst:2743 +msgid "" +"LibreSSL is a fork of OpenSSL 1.0.1. The ssl module has limited support for " +"LibreSSL. Some features are not available when the ssl module is compiled " +"with LibreSSL." +msgstr "" +"LibreSSL 是 OpenSSL 1.0.1 的一个分支。 ssl 模块包含对 LibreSSL 的有限支持。 当 ssl 模块使用 " +"LibreSSL 进行编译时某些特性将不可用。" + +#: ../../library/ssl.rst:2747 +msgid "" +"LibreSSL >= 2.6.1 no longer supports NPN. The methods " +":meth:`SSLContext.set_npn_protocols` and " +":meth:`SSLSocket.selected_npn_protocol` are not available." +msgstr "" +"LibreSSL >= 2.6.1 不再支持 NPN。 :meth:`SSLContext.set_npn_protocols` 和 " +":meth:`SSLSocket.selected_npn_protocol` 方法将不可用。" + +#: ../../library/ssl.rst:2750 +msgid "" +":meth:`SSLContext.set_default_verify_paths` ignores the env vars " +":envvar:`SSL_CERT_FILE` and :envvar:`SSL_CERT_PATH` although " +":func:`get_default_verify_paths` still reports them." +msgstr "" +":meth:`SSLContext.set_default_verify_paths` 会忽略环境变量 :envvar:`SSL_CERT_FILE` " +"和 :envvar:`SSL_CERT_PATH`,虽然 :func:`get_default_verify_paths` 仍然支持它们。" + +#: ../../library/ssl.rst:2758 +msgid "Class :class:`socket.socket`" +msgstr "Class :class:`socket.socket`" + +#: ../../library/ssl.rst:2758 +msgid "Documentation of underlying :mod:`socket` class" +msgstr "下层 :mod:`socket` 类的文档" + +#: ../../library/ssl.rst:2761 +msgid "" +"`SSL/TLS Strong Encryption: An Introduction " +"`_" +msgstr "" +"`SSL/TLS 高强度加密:概述 " +"`_" + +#: ../../library/ssl.rst:2761 +msgid "Intro from the Apache HTTP Server documentation" +msgstr "Apache HTTP Server文档介绍" + +#: ../../library/ssl.rst:2764 +msgid "" +":rfc:`RFC 1422: Privacy Enhancement for Internet Electronic Mail: Part II: " +"Certificate-Based Key Management <1422>`" +msgstr ":rfc:`RFC 1422: 因特网电子邮件的隐私加强:第二部分:基于证书的密钥管理 <1422>`" + +#: ../../library/ssl.rst:2764 +msgid "Steve Kent" +msgstr "Steve Kent" + +#: ../../library/ssl.rst:2767 +msgid ":rfc:`RFC 4086: Randomness Requirements for Security <4086>`" +msgstr ":rfc:`RFC 4086: 确保安全的随机性要求 <4086>`" + +#: ../../library/ssl.rst:2767 +msgid "Donald E., Jeffrey I. Schiller" +msgstr "Donald E., Jeffrey I. Schiller" + +#: ../../library/ssl.rst:2770 +msgid "" +":rfc:`RFC 5280: Internet X.509 Public Key Infrastructure Certificate and " +"Certificate Revocation List (CRL) Profile <5280>`" +msgstr ":rfc:`RFC 5280: 互联网 X.509 公钥基础架构证书和证书吊销列表 (CRL) 配置文件 <5280>`" + +#: ../../library/ssl.rst:2770 +msgid "D. Cooper" +msgstr "D. Cooper" + +#: ../../library/ssl.rst:2773 +msgid "" +":rfc:`RFC 5246: The Transport Layer Security (TLS) Protocol Version 1.2 " +"<5246>`" +msgstr ":rfc:`RFC 5246: 传输层安全性 (TLS) 协议版本 1.2 <5246>`" + +#: ../../library/ssl.rst:2773 +msgid "T. Dierks et. al." +msgstr "T. Dierks et. al." + +#: ../../library/ssl.rst:2776 +msgid ":rfc:`RFC 6066: Transport Layer Security (TLS) Extensions <6066>`" +msgstr ":rfc:`RFC 6066: 传输层安全性 (TLS) 的扩展 <6066>`" + +#: ../../library/ssl.rst:2776 +msgid "D. Eastlake" +msgstr "D. Eastlake" + +#: ../../library/ssl.rst:2779 +msgid "" +"`IANA TLS: Transport Layer Security (TLS) Parameters " +"`_" +msgstr "" +"`IANA TLS: 传输层安全性 (TLS) 的参数 `_" + +#: ../../library/ssl.rst:2779 +msgid "IANA" +msgstr "IANA" + +#: ../../library/ssl.rst:2782 +msgid "" +":rfc:`RFC 7525: Recommendations for Secure Use of Transport Layer Security " +"(TLS) and Datagram Transport Layer Security (DTLS) <7525>`" +msgstr ":rfc:`RFC 7525: 传输层安全性 (TLS) 和数据报传输层安全性 (DTLS) 的安全使用建议 <7525>`" + +#: ../../library/ssl.rst:2782 +msgid "IETF" +msgstr "IETF" + +#: ../../library/ssl.rst:2784 +msgid "" +"`Mozilla's Server Side TLS recommendations " +"`_" +msgstr "" +"`Mozilla 的服务器端 TLS 建议 `_" + +#: ../../library/ssl.rst:2785 +msgid "Mozilla" +msgstr "Mozilla" diff --git a/library/stat.po b/library/stat.po new file mode 100644 index 000000000..480ad22db --- /dev/null +++ b/library/stat.po @@ -0,0 +1,445 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) 2001-2022, Python Software Foundation +# This file is distributed under the same license as the Python package. +# FIRST AUTHOR , YEAR. +# +# Translators: +# ppcfish , 2019 +# Freesand Leo , 2022 +# +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: Python 3.9\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2022-11-04 14:34+0000\n" +"PO-Revision-Date: 2017-02-16 23:27+0000\n" +"Last-Translator: Freesand Leo , 2022\n" +"Language-Team: Chinese (China) (https://www.transifex.com/python-doc/teams/5390/zh_CN/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: zh_CN\n" +"Plural-Forms: nplurals=1; plural=0;\n" + +#: ../../library/stat.rst:2 +msgid ":mod:`stat` --- Interpreting :func:`~os.stat` results" +msgstr ":mod:`stat` --- 解析 :func:`~os.stat` 结果" + +#: ../../library/stat.rst:10 +msgid "**Source code:** :source:`Lib/stat.py`" +msgstr "**源代码:** :source:`Lib/stat.py`" + +#: ../../library/stat.rst:14 +msgid "" +"The :mod:`stat` module defines constants and functions for interpreting the " +"results of :func:`os.stat`, :func:`os.fstat` and :func:`os.lstat` (if they " +"exist). For complete details about the :c:func:`stat`, :c:func:`fstat` and " +":c:func:`lstat` calls, consult the documentation for your system." +msgstr "" +":mod:`stat` 模块定义了一些用于解析 :func:`os.stat`, :func:`os.fstat` 和 :func:`os.lstat`" +" (如果它们存在) 输出结果的常量和函数。 有关 :c:func:`stat`, :c:func:`fstat` 和 :c:func:`lstat` " +"调用的完整细节,请参阅你的系统文档。" + +#: ../../library/stat.rst:19 +msgid "The stat module is backed by a C implementation." +msgstr "stat 模块是通过 C 实现来支持的。" + +#: ../../library/stat.rst:22 +msgid "" +"The :mod:`stat` module defines the following functions to test for specific " +"file types:" +msgstr ":mod:`stat` 模块定义了以下函数来检测特定文件类型:" + +#: ../../library/stat.rst:28 +msgid "Return non-zero if the mode is from a directory." +msgstr "如果 mode 来自一个目录则返回非零值。" + +#: ../../library/stat.rst:33 +msgid "Return non-zero if the mode is from a character special device file." +msgstr "如果 mode 来自一个字符特殊设备文件则返回非零值。" + +#: ../../library/stat.rst:38 +msgid "Return non-zero if the mode is from a block special device file." +msgstr "如果 mode 来自一个块特殊设备文件则返回非零值。" + +#: ../../library/stat.rst:43 +msgid "Return non-zero if the mode is from a regular file." +msgstr "如果 mode 来自一个常规文件则返回非零值。" + +#: ../../library/stat.rst:48 +msgid "Return non-zero if the mode is from a FIFO (named pipe)." +msgstr "如果 mode 来自一个 FIFO (命名管道) 则返回非零值。" + +#: ../../library/stat.rst:53 +msgid "Return non-zero if the mode is from a symbolic link." +msgstr "如果 mode 来自一个符号链接则返回非零值。" + +#: ../../library/stat.rst:58 +msgid "Return non-zero if the mode is from a socket." +msgstr "如果 mode 来自一个套接字则返回非零值。" + +#: ../../library/stat.rst:62 +msgid "Return non-zero if the mode is from a door." +msgstr "如果 mode 来自一个门则返回非零值。" + +#: ../../library/stat.rst:68 +msgid "Return non-zero if the mode is from an event port." +msgstr "如果 mode 来自一个事件端口则返回非零值。" + +#: ../../library/stat.rst:74 +msgid "Return non-zero if the mode is from a whiteout." +msgstr "如果 mode 来自一个白输出则返回非零值。" + +#: ../../library/stat.rst:78 +msgid "" +"Two additional functions are defined for more general manipulation of the " +"file's mode:" +msgstr "定义了两个附加函数用于对文件模式进行更一般化的操作:" + +#: ../../library/stat.rst:84 +msgid "" +"Return the portion of the file's mode that can be set by :func:`os.chmod`\\ " +"---that is, the file's permission bits, plus the sticky bit, set-group-id, " +"and set-user-id bits (on systems that support them)." +msgstr "" +"返回文件模式中可由 :func:`os.chmod` 进行设置的部分 --- 即文件的 permission 位,加上 sticky 位、set-" +"group-id 以及 set-user-id 位(在支持这些部分的系统上)。" + +#: ../../library/stat.rst:91 +msgid "" +"Return the portion of the file's mode that describes the file type (used by " +"the :func:`S_IS\\*` functions above)." +msgstr "返回文件模式中描述文件类型的部分(供上面的 :func:`S_IS\\*` 函数使用)。" + +#: ../../library/stat.rst:94 +msgid "" +"Normally, you would use the :func:`os.path.is\\*` functions for testing the " +"type of a file; the functions here are useful when you are doing multiple " +"tests of the same file and wish to avoid the overhead of the :c:func:`stat` " +"system call for each test. These are also useful when checking for " +"information about a file that isn't handled by :mod:`os.path`, like the " +"tests for block and character devices." +msgstr "" +"通常,你应当使用 :func:`os.path.is\\*` " +"函数来检测文件的类型;这里提供的函数则适用于当你要对同一文件执行多项检测并且希望避免每项检测的 :c:func:`stat` 系统调用开销的情况。 " +"这些函数也适用于检测有关未被 :mod:`os.path` 处理的信息,例如检测块和字符设备等。" + +#: ../../library/stat.rst:101 +msgid "Example::" +msgstr "示例::" + +#: ../../library/stat.rst:129 +msgid "" +"An additional utility function is provided to convert a file's mode in a " +"human readable string:" +msgstr "另外还提供了一个附加的辅助函数用来将文件模式转换为人类易读的字符串:" + +#: ../../library/stat.rst:134 +msgid "Convert a file's mode to a string of the form '-rwxrwxrwx'." +msgstr "将文件模式转换为 '-rwxrwxrwx' 形式的字符串。" + +#: ../../library/stat.rst:138 +msgid "" +"The function supports :data:`S_IFDOOR`, :data:`S_IFPORT` and " +":data:`S_IFWHT`." +msgstr "此函数支持 :data:`S_IFDOOR`, :data:`S_IFPORT` and :data:`S_IFWHT`。" + +#: ../../library/stat.rst:143 +msgid "" +"All the variables below are simply symbolic indexes into the 10-tuple " +"returned by :func:`os.stat`, :func:`os.fstat` or :func:`os.lstat`." +msgstr "" +"以下所有变量是一些简单的符号索引,用于访问 :func:`os.stat`, :func:`os.fstat` 或 :func:`os.lstat` " +"所返回的 10 条目元组。" + +#: ../../library/stat.rst:149 +msgid "Inode protection mode." +msgstr "inode 保护模式。" + +#: ../../library/stat.rst:154 +msgid "Inode number." +msgstr "Inode 号" + +#: ../../library/stat.rst:159 +msgid "Device inode resides on." +msgstr "Inode 所在的设备。" + +#: ../../library/stat.rst:164 +msgid "Number of links to the inode." +msgstr "Inode 拥有的链接数量。" + +#: ../../library/stat.rst:169 +msgid "User id of the owner." +msgstr "所有者的用户 ID。" + +#: ../../library/stat.rst:174 +msgid "Group id of the owner." +msgstr "所有者的用户组ID。" + +#: ../../library/stat.rst:179 +msgid "" +"Size in bytes of a plain file; amount of data waiting on some special files." +msgstr "以字节为单位的普通文件大小;对于某些特殊文件则是所等待的数据量。" + +#: ../../library/stat.rst:184 +msgid "Time of last access." +msgstr "上次访问的时间。" + +#: ../../library/stat.rst:189 +msgid "Time of last modification." +msgstr "上次修改的时间。" + +#: ../../library/stat.rst:194 +msgid "" +"The \"ctime\" as reported by the operating system. On some systems (like " +"Unix) is the time of the last metadata change, and, on others (like " +"Windows), is the creation time (see platform documentation for details)." +msgstr "" +"操作系统所报告的 \"ctime\"。 在某些系统上(例如 Unix)是元数据的最后修改时间,而在其他系统上(例如 " +"Windows)则是创建时间(请参阅系统平台的文档了解相关细节)。" + +#: ../../library/stat.rst:198 +msgid "" +"The interpretation of \"file size\" changes according to the file type. For" +" plain files this is the size of the file in bytes. For FIFOs and sockets " +"under most flavors of Unix (including Linux in particular), the \"size\" is " +"the number of bytes waiting to be read at the time of the call to " +":func:`os.stat`, :func:`os.fstat`, or :func:`os.lstat`; this can sometimes " +"be useful, especially for polling one of these special files after a non-" +"blocking open. The meaning of the size field for other character and block " +"devices varies more, depending on the implementation of the underlying " +"system call." +msgstr "" +"对于“文件大小”的解析可因文件类型的不同而变化。 对于普通文件就是文件的字节数。 对于大部分种类的 Unix(特别包括 Linux)的 FIFO " +"和套接字来说,“大小”则是指在调用 :func:`os.stat`, :func:`os.fstat` 或 :func:`os.lstat` " +"时等待读取的字节数;这在某些时候很有用处,特别是在一个非阻塞的打开后轮询这些特殊文件中的一个时。 " +"其他字符和块设备的文件大小字段的含义还会有更多变化,具体取决于底层系统调用的实现方式。" + +#: ../../library/stat.rst:207 +msgid "" +"The variables below define the flags used in the :data:`ST_MODE` field." +msgstr "以下变量定义了在 :data:`ST_MODE` 字段中使用的旗标。" + +#: ../../library/stat.rst:209 +msgid "" +"Use of the functions above is more portable than use of the first set of " +"flags:" +msgstr "使用上面的函数会比使用第一组旗标更容易移植:" + +#: ../../library/stat.rst:213 +msgid "Socket." +msgstr "套接字。" + +#: ../../library/stat.rst:217 +msgid "Symbolic link." +msgstr "符号链接。" + +#: ../../library/stat.rst:221 +msgid "Regular file." +msgstr "普通文件。" + +#: ../../library/stat.rst:225 +msgid "Block device." +msgstr "块设备。" + +#: ../../library/stat.rst:229 +msgid "Directory." +msgstr "目录。" + +#: ../../library/stat.rst:233 +msgid "Character device." +msgstr "字符设备。" + +#: ../../library/stat.rst:237 +msgid "FIFO." +msgstr "先进先出。" + +#: ../../library/stat.rst:241 +msgid "Door." +msgstr "门。" + +#: ../../library/stat.rst:247 +msgid "Event port." +msgstr "事件端口。" + +#: ../../library/stat.rst:253 +msgid "Whiteout." +msgstr "白输出。" + +#: ../../library/stat.rst:259 +msgid "" +":data:`S_IFDOOR`, :data:`S_IFPORT` or :data:`S_IFWHT` are defined as 0 when " +"the platform does not have support for the file types." +msgstr "" +":data:`S_IFDOOR`, :data:`S_IFPORT` or :data:`S_IFWHT` 等文件类型在不受系统平台支持时会被定义为 " +"0。" + +#: ../../library/stat.rst:262 +msgid "" +"The following flags can also be used in the *mode* argument of " +":func:`os.chmod`:" +msgstr "以下旗标还可以 :func:`os.chmod` 的在 *mode* 参数中使用:" + +#: ../../library/stat.rst:266 +msgid "Set UID bit." +msgstr "设置 UID 位。" + +#: ../../library/stat.rst:270 +msgid "" +"Set-group-ID bit. This bit has several special uses. For a directory it " +"indicates that BSD semantics is to be used for that directory: files created" +" there inherit their group ID from the directory, not from the effective " +"group ID of the creating process, and directories created there will also " +"get the :data:`S_ISGID` bit set. For a file that does not have the group " +"execution bit (:data:`S_IXGRP`) set, the set-group-ID bit indicates " +"mandatory file/record locking (see also :data:`S_ENFMT`)." +msgstr "" +"设置分组 ID 位。 这个位有几种特殊用途。 对于目录它表示该目录将使用 BSD 语义:在其中创建的文件将从目录继承其分组 " +"ID,而不是从创建进程的有效分组 ID 继承,并且在其中创建的目录也将设置 :data:`S_ISGID` 位。 对于没有设置分组执行位 " +"(:data:`S_IXGRP`) 的文件,设置分组 ID 位表示强制性文件/记录锁定 (另请参见 :data:`S_ENFMT`)。" + +#: ../../library/stat.rst:281 +msgid "" +"Sticky bit. When this bit is set on a directory it means that a file in " +"that directory can be renamed or deleted only by the owner of the file, by " +"the owner of the directory, or by a privileged process." +msgstr "固定位。 当对目录设置该位时则意味着此目录中的文件只能由文件所有者、目录所有者或特权进程来重命名或删除。" + +#: ../../library/stat.rst:287 +msgid "Mask for file owner permissions." +msgstr "文件所有者权限的掩码。" + +#: ../../library/stat.rst:291 +msgid "Owner has read permission." +msgstr "所有者具有读取权限。" + +#: ../../library/stat.rst:295 +msgid "Owner has write permission." +msgstr "所有者具有写入权限。" + +#: ../../library/stat.rst:299 +msgid "Owner has execute permission." +msgstr "所有者具有执行权限。" + +#: ../../library/stat.rst:303 +msgid "Mask for group permissions." +msgstr "组权限的掩码。" + +#: ../../library/stat.rst:307 +msgid "Group has read permission." +msgstr "组具有读取权限。" + +#: ../../library/stat.rst:311 +msgid "Group has write permission." +msgstr "组具有写入权限。" + +#: ../../library/stat.rst:315 +msgid "Group has execute permission." +msgstr "组具有执行权限。" + +#: ../../library/stat.rst:319 +msgid "Mask for permissions for others (not in group)." +msgstr "其他人(不在组中)的权限掩码。" + +#: ../../library/stat.rst:323 +msgid "Others have read permission." +msgstr "其他人具有读取权限。" + +#: ../../library/stat.rst:327 +msgid "Others have write permission." +msgstr "其他人具有写入权限。" + +#: ../../library/stat.rst:331 +msgid "Others have execute permission." +msgstr "其他人具有执行权限。" + +#: ../../library/stat.rst:335 +msgid "" +"System V file locking enforcement. This flag is shared with " +":data:`S_ISGID`: file/record locking is enforced on files that do not have " +"the group execution bit (:data:`S_IXGRP`) set." +msgstr "" +"System V 执行文件锁定。 此旗标是与 :data:`S_ISGID` 共享的:文件/记录锁定会针对未设置分组执行位 " +"(:data:`S_IXGRP`) 的文件强制执行。" + +#: ../../library/stat.rst:341 +msgid "Unix V7 synonym for :data:`S_IRUSR`." +msgstr "Unix V7 中 :data:`S_IRUSR` 的同义词。" + +#: ../../library/stat.rst:345 +msgid "Unix V7 synonym for :data:`S_IWUSR`." +msgstr "Unix V7 中 :data:`S_IWUSR` 的同义词。" + +#: ../../library/stat.rst:349 +msgid "Unix V7 synonym for :data:`S_IXUSR`." +msgstr "Unix V7 中 :data:`S_IXUSR` 的同义词。" + +#: ../../library/stat.rst:351 +msgid "" +"The following flags can be used in the *flags* argument of " +":func:`os.chflags`:" +msgstr "以下旗标可以在 :func:`os.chflags` 的 *flags* 参数中使用:" + +#: ../../library/stat.rst:355 +msgid "Do not dump the file." +msgstr "不要转储文件。" + +#: ../../library/stat.rst:359 ../../library/stat.rst:387 +msgid "The file may not be changed." +msgstr "文件不能被更改。" + +#: ../../library/stat.rst:363 ../../library/stat.rst:391 +msgid "The file may only be appended to." +msgstr "文件只能被附加。" + +#: ../../library/stat.rst:367 +msgid "The directory is opaque when viewed through a union stack." +msgstr "当通过联合堆栈查看时,目录是不透明的。" + +#: ../../library/stat.rst:371 ../../library/stat.rst:395 +msgid "The file may not be renamed or deleted." +msgstr "文件不能重命名或删除。" + +#: ../../library/stat.rst:375 +msgid "The file is stored compressed (macOS 10.6+)." +msgstr "文件是压缩存储的(macOS 10.6+)。" + +#: ../../library/stat.rst:379 +msgid "The file should not be displayed in a GUI (macOS 10.5+)." +msgstr "文件不可被显示在 GUI 中(macOS 10.5+)。" + +#: ../../library/stat.rst:383 +msgid "The file may be archived." +msgstr "文件可能已存档。" + +#: ../../library/stat.rst:399 +msgid "The file is a snapshot file." +msgstr "文件有一个快照文件" + +#: ../../library/stat.rst:401 +msgid "" +"See the \\*BSD or macOS systems man page :manpage:`chflags(2)` for more " +"information." +msgstr "请参阅 \\*BSD 或 macOS 系统的指南页 :manpage:`chflags(2)` 来了解详情。" + +#: ../../library/stat.rst:403 +msgid "" +"On Windows, the following file attribute constants are available for use " +"when testing bits in the ``st_file_attributes`` member returned by " +":func:`os.stat`. See the `Windows API documentation " +"`_ " +"for more detail on the meaning of these constants." +msgstr "" +"在 Windows 上,以下文件属性常量可被用来检测 :func:`os.stat` 所返回的 ``st_file_attributes`` " +"成员中的位。 请参阅 `Windows API 文档 `_ 了解有关这些常量含义的详情。" + +#: ../../library/stat.rst:429 +msgid "" +"On Windows, the following constants are available for comparing against the " +"``st_reparse_tag`` member returned by :func:`os.lstat`. These are well-known" +" constants, but are not an exhaustive list." +msgstr "" +"在 Windows 上,以下常量可被用来与 :func:`os.lstat` 所返回的 ``st_reparse_tag`` 成员进行比较。 " +"这些是最主要的常量,而不是详尽的清单。" diff --git a/library/statistics.po b/library/statistics.po new file mode 100644 index 000000000..997397d13 --- /dev/null +++ b/library/statistics.po @@ -0,0 +1,1082 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) 2001-2022, Python Software Foundation +# This file is distributed under the same license as the Python package. +# FIRST AUTHOR , YEAR. +# +# Translators: +# ww song , 2018 +# Alpha Du , 2019 +# ppcfish , 2019 +# 汪心禾 , 2019 +# Naisen Xu <723648649@qq.com>, 2019 +# Freesand Leo , 2022 +# +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: Python 3.9\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2022-11-04 14:34+0000\n" +"PO-Revision-Date: 2017-02-16 23:27+0000\n" +"Last-Translator: Freesand Leo , 2022\n" +"Language-Team: Chinese (China) (https://www.transifex.com/python-doc/teams/5390/zh_CN/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: zh_CN\n" +"Plural-Forms: nplurals=1; plural=0;\n" + +#: ../../library/statistics.rst:2 +msgid ":mod:`statistics` --- Mathematical statistics functions" +msgstr ":mod:`statistics` --- 数学统计函数" + +#: ../../library/statistics.rst:12 +msgid "**Source code:** :source:`Lib/statistics.py`" +msgstr "**源代码:** :source:`Lib/statistics.py`" + +#: ../../library/statistics.rst:21 +msgid "" +"This module provides functions for calculating mathematical statistics of " +"numeric (:class:`~numbers.Real`-valued) data." +msgstr "该模块提供了用于计算数字 (:class:`~numbers.Real`-valued) 数据的数理统计量的函数。" + +#: ../../library/statistics.rst:24 +msgid "" +"The module is not intended to be a competitor to third-party libraries such " +"as `NumPy `_, `SciPy `_, or " +"proprietary full-featured statistics packages aimed at professional " +"statisticians such as Minitab, SAS and Matlab. It is aimed at the level of " +"graphing and scientific calculators." +msgstr "" +"此模块并不是诸如 `NumPy `_ , `SciPy `_ " +"等第三方库或者诸如 Minitab , SAS , Matlab 等针对专业统计学家的专有全功能统计软件包的竞品。此模块针对图形和科学计算器的水平。" + +#: ../../library/statistics.rst:30 +msgid "" +"Unless explicitly noted, these functions support :class:`int`, " +":class:`float`, :class:`~decimal.Decimal` and :class:`~fractions.Fraction`. " +"Behaviour with other types (whether in the numeric tower or not) is " +"currently unsupported. Collections with a mix of types are also undefined " +"and implementation-dependent. If your input data consists of mixed types, " +"you may be able to use :func:`map` to ensure a consistent result, for " +"example: ``map(float, input_data)``." +msgstr "" +"除非明确注释,这些函数支持 :class:`int` , :class:`float` , :class:`~decimal.Decimal` 和 " +":class:`~fractions.Fraction` " +"。当前不支持同其他类型(是否在数字塔中)的行为。混合类型的集合也是未定义的,并且依赖于实现。如果你输入的数据由混合类型组成,你应该能够使用 " +":func:`map` 来确保一个一致的结果,比如: ``map(float, input_data)`` 。" + +#: ../../library/statistics.rst:39 +msgid "Averages and measures of central location" +msgstr "平均值以及对中心位置的评估" + +#: ../../library/statistics.rst:41 +msgid "" +"These functions calculate an average or typical value from a population or " +"sample." +msgstr "这些函数用于计算一个总体或样本的平均值或者典型值。" + +#: ../../library/statistics.rst:45 +msgid ":func:`mean`" +msgstr ":func:`mean`" + +#: ../../library/statistics.rst:45 +msgid "Arithmetic mean (\"average\") of data." +msgstr "数据的算术平均数(“平均数”)。" + +#: ../../library/statistics.rst:46 +msgid ":func:`fmean`" +msgstr ":func:`fmean`" + +#: ../../library/statistics.rst:46 +msgid "Fast, floating point arithmetic mean." +msgstr "快速的,浮点算数平均数。" + +#: ../../library/statistics.rst:47 +msgid ":func:`geometric_mean`" +msgstr ":func:`geometric_mean`" + +#: ../../library/statistics.rst:47 +msgid "Geometric mean of data." +msgstr "数据的几何平均数" + +#: ../../library/statistics.rst:48 +msgid ":func:`harmonic_mean`" +msgstr ":func:`harmonic_mean`" + +#: ../../library/statistics.rst:48 +msgid "Harmonic mean of data." +msgstr "数据的调和均值" + +#: ../../library/statistics.rst:49 +msgid ":func:`median`" +msgstr ":func:`median`" + +#: ../../library/statistics.rst:49 +msgid "Median (middle value) of data." +msgstr "数据的中位数(中间值)" + +#: ../../library/statistics.rst:50 +msgid ":func:`median_low`" +msgstr ":func:`median_low`" + +#: ../../library/statistics.rst:50 +msgid "Low median of data." +msgstr "数据的低中位数" + +#: ../../library/statistics.rst:51 +msgid ":func:`median_high`" +msgstr ":func:`median_high`" + +#: ../../library/statistics.rst:51 +msgid "High median of data." +msgstr "数据的高中位数" + +#: ../../library/statistics.rst:52 +msgid ":func:`median_grouped`" +msgstr ":func:`median_grouped`" + +#: ../../library/statistics.rst:52 +msgid "Median, or 50th percentile, of grouped data." +msgstr "分组数据的中位数,即第50个百分点。" + +#: ../../library/statistics.rst:53 +msgid ":func:`mode`" +msgstr ":func:`mode`" + +#: ../../library/statistics.rst:53 +msgid "Single mode (most common value) of discrete or nominal data." +msgstr "离散的或标称的数据的单个众数(出现最多的值)。" + +#: ../../library/statistics.rst:54 +msgid ":func:`multimode`" +msgstr ":func:`multimode`" + +#: ../../library/statistics.rst:54 +msgid "List of modes (most common values) of discrete or nomimal data." +msgstr "离散的或标称的数据的众数列表(出现最多的值)。" + +#: ../../library/statistics.rst:55 +msgid ":func:`quantiles`" +msgstr ":func:`quantiles`" + +#: ../../library/statistics.rst:55 +msgid "Divide data into intervals with equal probability." +msgstr "将数据以相等的概率分为多个间隔。" + +#: ../../library/statistics.rst:59 +msgid "Measures of spread" +msgstr "对分散程度的评估" + +#: ../../library/statistics.rst:61 +msgid "" +"These functions calculate a measure of how much the population or sample " +"tends to deviate from the typical or average values." +msgstr "这些函数用于计算总体或样本与典型值或平均值的偏离程度。" + +#: ../../library/statistics.rst:65 +msgid ":func:`pstdev`" +msgstr ":func:`pstdev`" + +#: ../../library/statistics.rst:65 +msgid "Population standard deviation of data." +msgstr "数据的总体标准差" + +#: ../../library/statistics.rst:66 +msgid ":func:`pvariance`" +msgstr ":func:`pvariance`" + +#: ../../library/statistics.rst:66 +msgid "Population variance of data." +msgstr "数据的总体方差" + +#: ../../library/statistics.rst:67 +msgid ":func:`stdev`" +msgstr ":func:`stdev`" + +#: ../../library/statistics.rst:67 +msgid "Sample standard deviation of data." +msgstr "数据的样本标准差" + +#: ../../library/statistics.rst:68 +msgid ":func:`variance`" +msgstr ":func:`variance`" + +#: ../../library/statistics.rst:68 +msgid "Sample variance of data." +msgstr "数据的样本方差" + +#: ../../library/statistics.rst:73 +msgid "Function details" +msgstr "函数细节" + +#: ../../library/statistics.rst:75 +msgid "" +"Note: The functions do not require the data given to them to be sorted. " +"However, for reading convenience, most of the examples show sorted " +"sequences." +msgstr "注释:这些函数不需要对提供给它们的数据进行排序。但是,为了方便阅读,大多数例子展示的是已排序的序列。" + +#: ../../library/statistics.rst:80 +msgid "" +"Return the sample arithmetic mean of *data* which can be a sequence or " +"iterable." +msgstr "返回 *data* 的样本算术平均数,形式为序列或迭代器。" + +#: ../../library/statistics.rst:82 +msgid "" +"The arithmetic mean is the sum of the data divided by the number of data " +"points. It is commonly called \"the average\", although it is only one of " +"many different mathematical averages. It is a measure of the central " +"location of the data." +msgstr "算术平均数是数据之和与数据点个数的商。通常称作“平均数”,尽管它指示诸多数学平均数之一。它是数据的中心位置的度量。" + +#: ../../library/statistics.rst:87 +msgid "If *data* is empty, :exc:`StatisticsError` will be raised." +msgstr "若 *data* 为空,将会引发 :exc:`StatisticsError`。" + +#: ../../library/statistics.rst:89 +msgid "Some examples of use:" +msgstr "一些用法示例:" + +#: ../../library/statistics.rst:108 +msgid "" +"The mean is strongly affected by `outliers " +"`_ and is not necessarily a typical " +"example of the data points. For a more robust, although less efficient, " +"measure of `central tendency " +"`_, see :func:`median`." +msgstr "" +"平均数会受到 `异常值 `_ 的强烈影响因而不一定能作为数据点的典型样本。" +" 想获得对于 `集中趋势 `_ 的更可靠的度量,可以参看" +" :func:`median`,但其效率要低一些。" + +#: ../../library/statistics.rst:114 +msgid "" +"The sample mean gives an unbiased estimate of the true population mean, so " +"that when taken on average over all the possible samples, ``mean(sample)`` " +"converges on the true mean of the entire population. If *data* represents " +"the entire population rather than a sample, then ``mean(data)`` is " +"equivalent to calculating the true population mean μ." +msgstr "" +"样本均值给出了一个无偏向的真实总体均值的估计,因此当平均抽取所有可能的样本, ``mean(sample)`` 收敛于整个总体的真实均值。如果 " +"*data* 代表整个总体而不是样本,那么 ``mean(data)`` 等同于计算真实整体均值 μ 。" + +#: ../../library/statistics.rst:123 +msgid "Convert *data* to floats and compute the arithmetic mean." +msgstr "将 *data* 转换成浮点数并且计算算术平均数。" + +#: ../../library/statistics.rst:125 +msgid "" +"This runs faster than the :func:`mean` function and it always returns a " +":class:`float`. The *data* may be a sequence or iterable. If the input " +"dataset is empty, raises a :exc:`StatisticsError`." +msgstr "" +"此函数的运行速度比 :func:`mean` 函数快并且它总是返回一个 :class:`float`。 *data* 可以为序列或可迭代对象。 " +"如果输入数据集为空,则会引发 :exc:`StatisticsError`。" + +#: ../../library/statistics.rst:139 +msgid "Convert *data* to floats and compute the geometric mean." +msgstr "将 *data* 转换成浮点数并且计算几何平均数。" + +#: ../../library/statistics.rst:141 +msgid "" +"The geometric mean indicates the central tendency or typical value of the " +"*data* using the product of the values (as opposed to the arithmetic mean " +"which uses their sum)." +msgstr "几何平均值使用值的乘积表示 *数据* 的中心趋势或典型值(与使用它们的总和的算术平均值相反)。" + +#: ../../library/statistics.rst:145 +msgid "" +"Raises a :exc:`StatisticsError` if the input dataset is empty, if it " +"contains a zero, or if it contains a negative value. The *data* may be a " +"sequence or iterable." +msgstr "如果输入数据集为空、包含零或包含负值则将引发 :exc:`StatisticsError`。 *data* 可以是序列或可迭代对象。" + +#: ../../library/statistics.rst:149 +msgid "" +"No special efforts are made to achieve exact results. (However, this may " +"change in the future.)" +msgstr "无需做出特殊努力即可获得准确的结果。(但是,将来或许会修改。)" + +#: ../../library/statistics.rst:162 +msgid "" +"Return the harmonic mean of *data*, a sequence or iterable of real-valued " +"numbers." +msgstr "返回 *data* 调和均值,该参数可以是序列或包含实数值的可迭代对象。" + +#: ../../library/statistics.rst:165 +msgid "" +"The harmonic mean, sometimes called the subcontrary mean, is the reciprocal " +"of the arithmetic :func:`mean` of the reciprocals of the data. For example, " +"the harmonic mean of three values *a*, *b* and *c* will be equivalent to " +"``3/(1/a + 1/b + 1/c)``. If one of the values is zero, the result will be " +"zero." +msgstr "" +"调和均值,也叫次相反均值,所有数据的倒数的算术平均数 :func:`mean` 的倒数。比如说,数据 *a* , *b* , *c* 的调和均值等于 " +"``3/(1/a + 1/b + 1/c)`` 。如果其中一个值为零,结果为零。" + +#: ../../library/statistics.rst:171 +msgid "" +"The harmonic mean is a type of average, a measure of the central location of" +" the data. It is often appropriate when averaging rates or ratios, for " +"example speeds." +msgstr "调和均值是一种均值类型,是数据中心位置的度量。它通常适合于求比率和比例的平均值,比如速率。" + +#: ../../library/statistics.rst:175 +msgid "" +"Suppose a car travels 10 km at 40 km/hr, then another 10 km at 60 km/hr. " +"What is the average speed?" +msgstr "" +"假设一辆车在 40 km/hr 的速度下行驶了 10 km ,然后又以 60 km/hr 的速度行驶了 10 km 。车辆的平均速率是多少?" + +#: ../../library/statistics.rst:183 +msgid "" +"Suppose an investor purchases an equal value of shares in each of three " +"companies, with P/E (price/earning) ratios of 2.5, 3 and 10. What is the " +"average P/E ratio for the investor's portfolio?" +msgstr "" +"假设一名投资者在三家公司各购买了等价值的股票,以 2.5, 3 , 10 的 P/E (价格/收益) 率。投资者投资组合的平均市盈率是多少?" + +#: ../../library/statistics.rst:192 +msgid "" +":exc:`StatisticsError` is raised if *data* is empty, or any element is less " +"than zero." +msgstr "如果 *data* 为空或者 任何一个元素的值小于零,会引发 :exc:`StatisticsError` 。" + +#: ../../library/statistics.rst:195 +msgid "" +"The current algorithm has an early-out when it encounters a zero in the " +"input. This means that the subsequent inputs are not tested for validity. " +"(This behavior may change in the future.)" +msgstr "当前算法在输入中遇到零时会提前退出。这意味着不会测试后续输入的有效性。(此行为将来可能会更改。)" + +#: ../../library/statistics.rst:204 +msgid "" +"Return the median (middle value) of numeric data, using the common \"mean of" +" middle two\" method. If *data* is empty, :exc:`StatisticsError` is raised." +" *data* can be a sequence or iterable." +msgstr "" +"使用普通的“取中间两数平均值”方法返回数值数据的中位数(中间值)。 如果 *data* 为空,则将引发 :exc:`StatisticsError`。 " +"*data* 可以是序列或可迭代对象。" + +#: ../../library/statistics.rst:208 +msgid "" +"The median is a robust measure of central location and is less affected by " +"the presence of outliers. When the number of data points is odd, the middle" +" data point is returned:" +msgstr "中位数是衡量中间位置的可靠方式,并且较少受到极端值的影响。 当数据点的总数为奇数时,将返回中间数据点:" + +#: ../../library/statistics.rst:217 +msgid "" +"When the number of data points is even, the median is interpolated by taking" +" the average of the two middle values:" +msgstr "当数据点的总数为偶数时,中位数将通过对两个中间值求平均进行插值得出:" + +#: ../../library/statistics.rst:225 +msgid "" +"This is suited for when your data is discrete, and you don't mind that the " +"median may not be an actual data point." +msgstr "这适用于当你的数据是离散的,并且你不介意中位数不是实际数据点的情况。" + +#: ../../library/statistics.rst:228 +msgid "" +"If the data is ordinal (supports order operations) but not numeric (doesn't " +"support addition), consider using :func:`median_low` or :func:`median_high` " +"instead." +msgstr "" +"如果数据是有序的(支持排序操作)但不是数字(不支持加法),请考虑改用 :func:`median_low` 或 :func:`median_high`。" + +#: ../../library/statistics.rst:234 +msgid "" +"Return the low median of numeric data. If *data* is empty, " +":exc:`StatisticsError` is raised. *data* can be a sequence or iterable." +msgstr "" +"返回数值数据的低中位数。 如果 *data* 为空则将引发 :exc:`StatisticsError`。 *data* 可以是序列或可迭代对象。" + +#: ../../library/statistics.rst:237 +msgid "" +"The low median is always a member of the data set. When the number of data " +"points is odd, the middle value is returned. When it is even, the smaller " +"of the two middle values is returned." +msgstr "低中位数一定是数据集的成员。 当数据点总数为奇数时,将返回中间值。 当其为偶数时,将返回两个中间值中较小的那个。" + +#: ../../library/statistics.rst:248 +msgid "" +"Use the low median when your data are discrete and you prefer the median to " +"be an actual data point rather than interpolated." +msgstr "当你的数据是离散的,并且你希望中位数是一个实际数据点而非插值结果时可以使用低中位数。" + +#: ../../library/statistics.rst:254 +msgid "" +"Return the high median of data. If *data* is empty, :exc:`StatisticsError` " +"is raised. *data* can be a sequence or iterable." +msgstr "" +"返回数据的高中位数。 如果 *data* 为空则将引发 :exc:`StatisticsError`。 *data* 可以是序列或可迭代对象。" + +#: ../../library/statistics.rst:257 +msgid "" +"The high median is always a member of the data set. When the number of data" +" points is odd, the middle value is returned. When it is even, the larger " +"of the two middle values is returned." +msgstr "高中位数一定是数据集的成员。 当数据点总数为奇数时,将返回中间值。 当其为偶数时,将返回两个中间值中较大的那个。" + +#: ../../library/statistics.rst:268 +msgid "" +"Use the high median when your data are discrete and you prefer the median to" +" be an actual data point rather than interpolated." +msgstr "当你的数据是离散的,并且你希望中位数是一个实际数据点而非插值结果时可以使用高中位数。" + +#: ../../library/statistics.rst:274 +msgid "" +"Return the median of grouped continuous data, calculated as the 50th " +"percentile, using interpolation. If *data* is empty, :exc:`StatisticsError`" +" is raised. *data* can be a sequence or iterable." +msgstr "" +"返回分组的连续数据的中位数,根据第 50 个百分点的位置使用插值来计算。 如果 *data* 为空则将引发 " +":exc:`StatisticsError`。 *data* 可以是序列或可迭代对象。" + +#: ../../library/statistics.rst:283 +msgid "" +"In the following example, the data are rounded, so that each value " +"represents the midpoint of data classes, e.g. 1 is the midpoint of the class" +" 0.5--1.5, 2 is the midpoint of 1.5--2.5, 3 is the midpoint of 2.5--3.5, " +"etc. With the data given, the middle value falls somewhere in the class 3.5" +"--4.5, and interpolation is used to estimate it:" +msgstr "" +"在下面的示例中,数据已经过舍入,这样每个值都代表数据分类的中间点,例如 1 是 0.5--1.5 分类的中间点,2 是 1.5--2.5 " +"分类的中间点,3 是 2.5--3.5 的中间点等待。 根据给定的数据,中间值应落在 3.5--4.5 分类之内,并可使用插值法来进行估算:" + +#: ../../library/statistics.rst:294 +msgid "" +"Optional argument *interval* represents the class interval, and defaults to " +"1. Changing the class interval naturally will change the interpolation:" +msgstr "可选参数 *interval* 表示分类间隔,默认值为 1。 改变分类间隔自然会改变插件结果:" + +#: ../../library/statistics.rst:304 +msgid "" +"This function does not check whether the data points are at least *interval*" +" apart." +msgstr "此函数不会检查数据点之间是否至少相隔 *interval* 的距离。" + +#: ../../library/statistics.rst:309 +msgid "" +"Under some circumstances, :func:`median_grouped` may coerce data points to " +"floats. This behaviour is likely to change in the future." +msgstr "在某些情况下,:func:`median_grouped` 可以会将数据点强制转换为浮点数。 此行为在未来有可能会发生改变。" + +#: ../../library/statistics.rst:314 +msgid "" +"\"Statistics for the Behavioral Sciences\", Frederick J Gravetter and Larry " +"B Wallnau (8th Edition)." +msgstr "" +"\"Statistics for the Behavioral Sciences\", Frederick J Gravetter and Larry " +"B Wallnau (8th Edition)." + +#: ../../library/statistics.rst:317 +msgid "" +"The `SSMEDIAN " +"`_ function in the Gnome Gnumeric spreadsheet, including " +"`this discussion `_." +msgstr "" +"Gnome Gnumeric 电子表格中的 `SSMEDIAN " +"`_ 函数,包括 `这篇讨论 `_。" + +#: ../../library/statistics.rst:325 +msgid "" +"Return the single most common data point from discrete or nominal *data*. " +"The mode (when it exists) is the most typical value and serves as a measure " +"of central location." +msgstr "从离散或标称的 *data* 返回单个出现最多的数据点。 此众数(如果存在)是最典型的值,并可用来度量中心的位置。" + +#: ../../library/statistics.rst:329 +msgid "" +"If there are multiple modes with the same frequency, returns the first one " +"encountered in the *data*. If the smallest or largest of those is desired " +"instead, use ``min(multimode(data))`` or ``max(multimode(data))``. If the " +"input *data* is empty, :exc:`StatisticsError` is raised." +msgstr "" +"如果存在具有相同频率的多个众数,则返回在 *data* 中遇到的第一个。 如果想要其中最小或最大的一个,请使用 " +"``min(multimode(data))`` 或 ``max(multimode(data))``。 如果输入的 *data* 为空,则会引发 " +":exc:`StatisticsError`。" + +#: ../../library/statistics.rst:334 +msgid "" +"``mode`` assumes discrete data and returns a single value. This is the " +"standard treatment of the mode as commonly taught in schools:" +msgstr "``mode`` 将假定是离散数据并返回一个单一的值。 这是通常的学校教学中标准的处理方式:" + +#: ../../library/statistics.rst:342 +msgid "" +"The mode is unique in that it is the only statistic in this package that " +"also applies to nominal (non-numeric) data:" +msgstr "此众数的独特之处在于它是这个包中唯一还可应用于标称(非数字)数据的统计信息:" + +#: ../../library/statistics.rst:350 +msgid "" +"Now handles multimodal datasets by returning the first mode encountered. " +"Formerly, it raised :exc:`StatisticsError` when more than one mode was " +"found." +msgstr "现在会通过返回所遇到的第一个众数来处理多模数据集。 之前它会在遇到超过一个的众数时引发 :exc:`StatisticsError`。" + +#: ../../library/statistics.rst:358 +msgid "" +"Return a list of the most frequently occurring values in the order they were" +" first encountered in the *data*. Will return more than one result if there" +" are multiple modes or an empty list if the *data* is empty:" +msgstr "" +"返回最频繁出现的值的列表,并按它们在 *data* 中首次出现的位置排序。 如果存在多个众数则将返回一个以上的众数,或者如果 *data* " +"为空则将返回空列表:" + +#: ../../library/statistics.rst:374 +msgid "" +"Return the population standard deviation (the square root of the population " +"variance). See :func:`pvariance` for arguments and other details." +msgstr "返回总体标准差(总体方差的平方根)。 请参阅 :func:`pvariance` 了解参数和其他细节。" + +#: ../../library/statistics.rst:385 +msgid "" +"Return the population variance of *data*, a non-empty sequence or iterable " +"of real-valued numbers. Variance, or second moment about the mean, is a " +"measure of the variability (spread or dispersion) of data. A large variance" +" indicates that the data is spread out; a small variance indicates it is " +"clustered closely around the mean." +msgstr "" +"返回非空序列或包含实数值的可迭代对象 *data* 的总体方差。 方差或称相对于均值的二阶距,是对数据变化幅度(延展度或分散度)的度量。 " +"方差值较大表明数据的散布范围较大;方差值较小表明它紧密聚集于均值附近。" + +#: ../../library/statistics.rst:391 +msgid "" +"If the optional second argument *mu* is given, it is typically the mean of " +"the *data*. It can also be used to compute the second moment around a point" +" that is not the mean. If it is missing or ``None`` (the default), the " +"arithmetic mean is automatically calculated." +msgstr "" +"如果给出了可选的第二个参数 *mu*,它通常是 *data* 的均值。 它也可以被用来计算相对于一个非均值点的二阶距。 如果该参数省略或为 " +"``None`` (默认值),则会自动进行算术均值的计算。" + +#: ../../library/statistics.rst:396 +msgid "" +"Use this function to calculate the variance from the entire population. To " +"estimate the variance from a sample, the :func:`variance` function is " +"usually a better choice." +msgstr "使用此函数可根据所有数值来计算方差。 要根据一个样本来估算方差,通常 :func:`variance` 函数是更好的选择。" + +#: ../../library/statistics.rst:400 +msgid "Raises :exc:`StatisticsError` if *data* is empty." +msgstr "如果 *data* 为空则会引发 :exc:`StatisticsError`。" + +#: ../../library/statistics.rst:402 ../../library/statistics.rst:472 +msgid "Examples:" +msgstr "示例:" + +#: ../../library/statistics.rst:410 +msgid "" +"If you have already calculated the mean of your data, you can pass it as the" +" optional second argument *mu* to avoid recalculation:" +msgstr "如果你已经计算过数据的平均值,你可以将其作为可选的第二个参数 *mu* 传入以避免重复计算:" + +#: ../../library/statistics.rst:419 +msgid "Decimals and Fractions are supported:" +msgstr "同样也支持使用 Decimal 和 Fraction 值:" + +#: ../../library/statistics.rst:433 +msgid "" +"When called with the entire population, this gives the population variance " +"σ². When called on a sample instead, this is the biased sample variance s²," +" also known as variance with N degrees of freedom." +msgstr "" +"当调用时附带完整的总体数据时,这将给出总体方差 σ²。 而当调用时只附带一个样本时,这将给出偏置样本方差 s²,也被称为带有 N 个自由度的方差。" + +#: ../../library/statistics.rst:437 +msgid "" +"If you somehow know the true population mean μ, you may use this function to" +" calculate the variance of a sample, giving the known population mean as the" +" second argument. Provided the data points are a random sample of the " +"population, the result will be an unbiased estimate of the population " +"variance." +msgstr "" +"如果你通过某种方式知道了真实的总体平均值 μ,则可以使用此函数来计算一个样本的方差,并将已知的总体平均值作为第二个参数。 " +"假设数据点是总体的一个随机样本,则结果将为总体方差的无偏估计值。" + +#: ../../library/statistics.rst:446 +msgid "" +"Return the sample standard deviation (the square root of the sample " +"variance). See :func:`variance` for arguments and other details." +msgstr "返回样本标准差(样本方差的平方根)。 请参阅 :func:`variance` 了解参数和其他细节。" + +#: ../../library/statistics.rst:457 +msgid "" +"Return the sample variance of *data*, an iterable of at least two real-" +"valued numbers. Variance, or second moment about the mean, is a measure of " +"the variability (spread or dispersion) of data. A large variance indicates " +"that the data is spread out; a small variance indicates it is clustered " +"closely around the mean." +msgstr "" +"返回包含至少两个实数值的可迭代对象 *data* 的样本方差。 方差或称相对于均值的二阶矩,是对数据变化幅度(延展度或分散度)的度量。 " +"方差值较大表明数据的散布范围较大;方差值较小表明它紧密聚集于均值附近。" + +#: ../../library/statistics.rst:463 +msgid "" +"If the optional second argument *xbar* is given, it should be the mean of " +"*data*. If it is missing or ``None`` (the default), the mean is " +"automatically calculated." +msgstr "" +"如果给出了可选的第二个参数 *xbar*,它应当是 *data* 的均值。 如果该参数省略或为 ``None`` (默认值),则会自动进行均值的计算。" + +#: ../../library/statistics.rst:467 +msgid "" +"Use this function when your data is a sample from a population. To calculate" +" the variance from the entire population, see :func:`pvariance`." +msgstr "当你的数据是总体数据的样本时请使用此函数。 要根据整个总体数据来计算方差,请参见 :func:`pvariance`。" + +#: ../../library/statistics.rst:470 +msgid "Raises :exc:`StatisticsError` if *data* has fewer than two values." +msgstr "如果 *data* 包含的值少于两个则会引发 :exc:`StatisticsError`。" + +#: ../../library/statistics.rst:480 +msgid "" +"If you have already calculated the mean of your data, you can pass it as the" +" optional second argument *xbar* to avoid recalculation:" +msgstr "如果你已经计算过数据的平均值,你可以将其作为可选的第二个参数 *xbar* 传入以避免重复计算:" + +#: ../../library/statistics.rst:489 +msgid "" +"This function does not attempt to verify that you have passed the actual " +"mean as *xbar*. Using arbitrary values for *xbar* can lead to invalid or " +"impossible results." +msgstr "此函数不会试图检查你所传入的 *xbar* 是否为真实的平均值。 使用任意值作为 *xbar* 可能导致无效或不可能的结果。" + +#: ../../library/statistics.rst:493 +msgid "Decimal and Fraction values are supported:" +msgstr "同样也支持使用 Decimal 和 Fraction 值:" + +#: ../../library/statistics.rst:507 +msgid "" +"This is the sample variance s² with Bessel's correction, also known as " +"variance with N-1 degrees of freedom. Provided that the data points are " +"representative (e.g. independent and identically distributed), the result " +"should be an unbiased estimate of the true population variance." +msgstr "" +"这是附带贝塞尔校正的样本方差 s²,也称为具有 N-1 自由度的方差。 假设数据点具有代表性(即为独立且均匀的分布),则结果应当是对总体方差的无偏估计。" + +#: ../../library/statistics.rst:512 +msgid "" +"If you somehow know the actual population mean μ you should pass it to the " +":func:`pvariance` function as the *mu* parameter to get the variance of a " +"sample." +msgstr "" +"如果你通过某种方式知道了真实的总体平均值 μ 则应当调用 :func:`pvariance` 函数并将该值作为 *mu* 形参传入以得到一个样本的方差。" + +#: ../../library/statistics.rst:518 +msgid "" +"Divide *data* into *n* continuous intervals with equal probability. Returns " +"a list of ``n - 1`` cut points separating the intervals." +msgstr "将 *data* 分隔为具有相等概率的 *n* 个连续区间。 返回分隔这些区间的 ``n - 1`` 个分隔点的列表。" + +#: ../../library/statistics.rst:521 +msgid "" +"Set *n* to 4 for quartiles (the default). Set *n* to 10 for deciles. Set " +"*n* to 100 for percentiles which gives the 99 cuts points that separate " +"*data* into 100 equal sized groups. Raises :exc:`StatisticsError` if *n* is" +" not least 1." +msgstr "" +"将 *n* 设为 4 以使用四分位(默认值)。 将 *n* 设为 10 以使用十分位。 将 *n* 设为 100 以使用百分位,即给出 99 " +"个分隔点来将 *data* 分隔为 100 个大小相等的组。 如果 *n* 小于 1 则将引发 :exc:`StatisticsError`。" + +#: ../../library/statistics.rst:526 +msgid "" +"The *data* can be any iterable containing sample data. For meaningful " +"results, the number of data points in *data* should be larger than *n*. " +"Raises :exc:`StatisticsError` if there are not at least two data points." +msgstr "" +"*data* 可以是包含样本数据的任意可迭代对象。 为了获得有意义的结果,*data* 中数据点的数量应当大于 *n*。 " +"如果数据点的数量小于两个则将引发 :exc:`StatisticsError`。" + +#: ../../library/statistics.rst:530 +msgid "" +"The cut points are linearly interpolated from the two nearest data points. " +"For example, if a cut point falls one-third of the distance between two " +"sample values, ``100`` and ``112``, the cut-point will evaluate to ``104``." +msgstr "" +"分隔点是通过对两个最接近的数据点进行线性插值得到的。 例如,如果一个分隔点落在两个样本值 ``100`` 和 ``112`` " +"之间距离三分之一的位置,则分隔点的取值将为 ``104``。" + +#: ../../library/statistics.rst:535 +msgid "" +"The *method* for computing quantiles can be varied depending on whether the " +"*data* includes or excludes the lowest and highest possible values from the " +"population." +msgstr "*method* 用于计算分位值,它会由于 *data* 是包含还是排除总体的最低和最高可能值而有所不同。" + +#: ../../library/statistics.rst:539 +msgid "" +"The default *method* is \"exclusive\" and is used for data sampled from a " +"population that can have more extreme values than found in the samples. The" +" portion of the population falling below the *i-th* of *m* sorted data " +"points is computed as ``i / (m + 1)``. Given nine sample values, the method" +" sorts them and assigns the following percentiles: 10%, 20%, 30%, 40%, 50%, " +"60%, 70%, 80%, 90%." +msgstr "" +"默认 *method* 是 “唯一的” 并且被用于在总体中数据采样这样可以有比样本中找到的更多的极端值。落在 *m* 个排序数据点的第 *i-th* " +"个以下的总体部分被计算为 ``i / (m + 1)`` 。给定九个样本值,方法排序它们并且分配一下的百分位: 10%, 20%, 30%, 40%, " +"50%, 60%, 70%, 80%, 90% 。" + +#: ../../library/statistics.rst:546 +msgid "" +"Setting the *method* to \"inclusive\" is used for describing population data" +" or for samples that are known to include the most extreme values from the " +"population. The minimum value in *data* is treated as the 0th percentile " +"and the maximum value is treated as the 100th percentile. The portion of the" +" population falling below the *i-th* of *m* sorted data points is computed " +"as ``(i - 1) / (m - 1)``. Given 11 sample values, the method sorts them and" +" assigns the following percentiles: 0%, 10%, 20%, 30%, 40%, 50%, 60%, 70%, " +"80%, 90%, 100%." +msgstr "" +"将 *method* 设为 \"inclusive\" 可用于描述总体数据或已明确知道包含有总体数据中最极端值的样本。 *data* " +"中的最小值会被作为第 0 个百分位而最大值会被作为第 100 个百分位。 总体数据里处于 *m* 个已排序数据点中 *第 i 个* 以下的部分会以 " +"``(i - 1) / (m - 1)`` 来计算。 给定 11 个样本值,该方法会对它们进行排序并赋予以下百分位: 0%, 10%, 20%, " +"30%, 40%, 50%, 60%, 70%, 80%, 90%, 100%。" + +#: ../../library/statistics.rst:570 +msgid "Exceptions" +msgstr "异常" + +#: ../../library/statistics.rst:572 +msgid "A single exception is defined:" +msgstr "只定义了一个异常:" + +#: ../../library/statistics.rst:576 +msgid "Subclass of :exc:`ValueError` for statistics-related exceptions." +msgstr ":exc:`ValueError` 的子类,表示统计相关的异常。" + +#: ../../library/statistics.rst:580 +msgid ":class:`NormalDist` objects" +msgstr ":class:`NormalDist` 对象" + +#: ../../library/statistics.rst:582 +msgid "" +":class:`NormalDist` is a tool for creating and manipulating normal " +"distributions of a `random variable " +"`_. It is a class " +"that treats the mean and standard deviation of data measurements as a single" +" entity." +msgstr "" +":class:`NormalDist` 工具可用于创建和操纵 `随机变量 " +"`_ 的正态分布。 " +"这个类将数据度量值的平均值和标准差作为单一实体来处理。" + +#: ../../library/statistics.rst:588 +msgid "" +"Normal distributions arise from the `Central Limit Theorem " +"`_ and have a wide " +"range of applications in statistics." +msgstr "" +"正态分布的概念来自于 `中央极限定理 `_ " +"并且在统计学中有广泛的应用。" + +#: ../../library/statistics.rst:594 +msgid "" +"Returns a new *NormalDist* object where *mu* represents the `arithmetic mean" +" `_ and *sigma* represents " +"the `standard deviation " +"`_." +msgstr "" +"返回一个新的 *NormalDist* 对象,其中 *mu* 代表 `算术平均值 " +"`_ 而 *sigma* 代表 `标准差 " +"`_。" + +#: ../../library/statistics.rst:599 +msgid "If *sigma* is negative, raises :exc:`StatisticsError`." +msgstr "若 *sigma* 为负数,将会引发 :exc:`StatisticsError`。" + +#: ../../library/statistics.rst:603 +msgid "" +"A read-only property for the `arithmetic mean " +"`_ of a normal distribution." +msgstr "" +"一个只读特征属性,表示特定正态分布的 `算术平均值 `_。" + +#: ../../library/statistics.rst:609 +msgid "" +"A read-only property for the `median " +"`_ of a normal distribution." +msgstr "一个只读特征属性,表示特定正态分布的 `中位数 `_。" + +#: ../../library/statistics.rst:615 +msgid "" +"A read-only property for the `mode " +"`_ of a normal " +"distribution." +msgstr "" +"一个只读特征属性,表示特定正态分布的 `众数 `_。" + +#: ../../library/statistics.rst:621 +msgid "" +"A read-only property for the `standard deviation " +"`_ of a normal " +"distribution." +msgstr "" +"一个只读特征属性,表示特定正态分布的 `标准差 " +"`_。" + +#: ../../library/statistics.rst:627 +msgid "" +"A read-only property for the `variance " +"`_ of a normal distribution. Equal " +"to the square of the standard deviation." +msgstr "" +"一个只读特征属性,表示特定正态分布的 `方差 `_。 等于标准差的平方。" + +#: ../../library/statistics.rst:633 +msgid "" +"Makes a normal distribution instance with *mu* and *sigma* parameters " +"estimated from the *data* using :func:`fmean` and :func:`stdev`." +msgstr "" +"传入使用 :func:`fmean` 和 :func:`stdev` 基于 *data* 估算出的 *mu* 和 *sigma* " +"形参创建一个正态分布实例。" + +#: ../../library/statistics.rst:636 +msgid "" +"The *data* can be any :term:`iterable` and should consist of values that can" +" be converted to type :class:`float`. If *data* does not contain at least " +"two elements, raises :exc:`StatisticsError` because it takes at least one " +"point to estimate a central value and at least two points to estimate " +"dispersion." +msgstr "" +"*data* 可以是任何 :term:`iterable` 并且应当包含能被转换为 :class:`float` 类型的值。 如果 *data* " +"不包含至少两个元素,则会引发 :exc:`StatisticsError`,因为估算中心值至少需要一个点而估算分散度至少需要两个点。" + +#: ../../library/statistics.rst:644 +msgid "" +"Generates *n* random samples for a given mean and standard deviation. " +"Returns a :class:`list` of :class:`float` values." +msgstr "对于给定的平均值和标准差生成 *n* 个随机样本。 返回一个由 :class:`float` 值组成的 :class:`list`。" + +#: ../../library/statistics.rst:647 +msgid "" +"If *seed* is given, creates a new instance of the underlying random number " +"generator. This is useful for creating reproducible results, even in a " +"multi-threading context." +msgstr "当给定 *seed* 时,创建一个新的底层随机数生成器实例。 这适用于创建可重现的结果,即使对于多线程上下文也有效。" + +#: ../../library/statistics.rst:653 +msgid "" +"Using a `probability density function (pdf) " +"`_, compute the " +"relative likelihood that a random variable *X* will be near the given value " +"*x*. Mathematically, it is the limit of the ratio ``P(x <= X < x+dx) / dx``" +" as *dx* approaches zero." +msgstr "" +"使用 `概率密度函数 (pdf) " +"`_,计算一个随机变量 *X* " +"趋向于给定值 *x* 的相对可能性。 在数学意义上,它是当 *dx* 趋向于零时比率 ``P(x <= X < x+dx) / dx`` 的极限。" + +#: ../../library/statistics.rst:659 +msgid "" +"The relative likelihood is computed as the probability of a sample occurring" +" in a narrow range divided by the width of the range (hence the word " +"\"density\"). Since the likelihood is relative to other points, its value " +"can be greater than `1.0`." +msgstr "" +"相对可能性的计算方法是用一个狭窄区间内某个样本出现的概率除以区间的宽度(因此使用“密度”一词)。 由于可能性是相对于其他点的,它的值可以大于 " +"`1.0`。" + +#: ../../library/statistics.rst:666 +msgid "" +"Using a `cumulative distribution function (cdf) " +"`_, compute " +"the probability that a random variable *X* will be less than or equal to " +"*x*. Mathematically, it is written ``P(X <= x)``." +msgstr "" +"使用 `累积分布函数 (cdf) " +"`_,计算一个随机变量 " +"*X* 小于等于 *x* 的概率。 在数学上,它表示为 ``P(X <= x)``。" + +#: ../../library/statistics.rst:673 +msgid "" +"Compute the inverse cumulative distribution function, also known as the " +"`quantile function `_ or " +"the `percent-point " +"`_ function. Mathematically, it is written ``x : P(X <= x) = p``." +msgstr "" +"计算反向累积分布函数,也称为 `分位数函数 `_ 或 " +"`百分点 `_ 函数。 在数学上,它表示为 ``x : P(X <= x) = p``。" + +#: ../../library/statistics.rst:679 +msgid "" +"Finds the value *x* of the random variable *X* such that the probability of " +"the variable being less than or equal to that value equals the given " +"probability *p*." +msgstr "找出随机变量 *X* 的值 *x* 使得该变量小于等于该值的概率等于给定的概率 *p*。" + +#: ../../library/statistics.rst:685 +msgid "" +"Measures the agreement between two normal probability distributions. Returns" +" a value between 0.0 and 1.0 giving `the overlapping area for the two " +"probability density functions `_." +msgstr "" +"测量两个正态概率分布之间的一致性。 返回介于 0.0 和 1.0 之间的值,给出 `两个概率密度函数的重叠区域 " +"`_。" + +#: ../../library/statistics.rst:692 +msgid "" +"Divide the normal distribution into *n* continuous intervals with equal " +"probability. Returns a list of (n - 1) cut points separating the intervals." +msgstr "将指定正态分布划分为 *n* 个相等概率的连续分隔区。 返回这些分隔区对应的 (n - 1) 个分隔点的列表。" + +#: ../../library/statistics.rst:696 +msgid "" +"Set *n* to 4 for quartiles (the default). Set *n* to 10 for deciles. Set " +"*n* to 100 for percentiles which gives the 99 cuts points that separate the " +"normal distribution into 100 equal sized groups." +msgstr "" +"将 *n* 设为 4 以使用四分位(默认值)。 将 *n* 设为 10 以使用十分位。将 *n* 设为 100 以使用百分位,即给出 99 " +"个分隔点来将正态分布分隔为 100 个大小相等的组。" + +#: ../../library/statistics.rst:702 +msgid "" +"Compute the `Standard Score `_ describing *x* in terms of the number of standard" +" deviations above or below the mean of the normal distribution: ``(x - mean)" +" / stdev``." +msgstr "" +"计算 `标准分 `_ 即以高于或低于正态分布的平均值的标准差数值的形式来描述 *x*: ``(x - mean) / " +"stdev``." + +#: ../../library/statistics.rst:710 +msgid "" +"Instances of :class:`NormalDist` support addition, subtraction, " +"multiplication and division by a constant. These operations are used for " +"translation and scaling. For example:" +msgstr ":class:`NormalDist` 的实例支持加上、减去、乘以或除以一个常量。 这些运算被用于转换和缩放。 例如:" + +#: ../../library/statistics.rst:720 +msgid "" +"Dividing a constant by an instance of :class:`NormalDist` is not supported " +"because the result wouldn't be normally distributed." +msgstr "不允许一个常量除以 :class:`NormalDist` 的实例,因为结果将不是正态分布。" + +#: ../../library/statistics.rst:723 +msgid "" +"Since normal distributions arise from additive effects of independent " +"variables, it is possible to `add and subtract two independent normally " +"distributed random variables " +"`_" +" represented as instances of :class:`NormalDist`. For example:" +msgstr "" +"由于正态分布是由独立变量的累加效应产生的,因此允许表示为 :class:`NormalDist` 实例的 `两组独立正态分布的随机变量相加和相减 " +"`_。" +" 例如:" + +#: ../../library/statistics.rst:743 +msgid ":class:`NormalDist` Examples and Recipes" +msgstr ":class:`NormalDist` 示例和用法" + +#: ../../library/statistics.rst:745 +msgid ":class:`NormalDist` readily solves classic probability problems." +msgstr ":class:`NormalDist` 适合用来解决经典概率问题。" + +#: ../../library/statistics.rst:747 +msgid "" +"For example, given `historical data for SAT exams " +"`_ showing " +"that scores are normally distributed with a mean of 1060 and a standard " +"deviation of 195, determine the percentage of students with test scores " +"between 1100 and 1200, after rounding to the nearest whole number:" +msgstr "" +"举例来说,如果 `SAT 考试的历史数据 " +"`_ 显示分数呈平均值为" +" 1060 且标准差为 195 的正态分布,则可以确定考试分数处于 1100 和 1200 之间的学生的百分比舍入到最接近的整数应为:" + +#: ../../library/statistics.rst:760 +msgid "" +"Find the `quartiles `_ and `deciles " +"`_ for the SAT scores:" +msgstr "" +"求 SAT 分数的 `四分位 `_ 和 `十分位 " +"`_:" + +#: ../../library/statistics.rst:770 +msgid "" +"To estimate the distribution for a model than isn't easy to solve " +"analytically, :class:`NormalDist` can generate input samples for a `Monte " +"Carlo simulation `_:" +msgstr "" +"为了估算一个不易解析的模型分布,:class:`NormalDist` 可以生成用于 `蒙特卡洛模拟 " +"`_ 的输入样本:" + +#: ../../library/statistics.rst:786 +msgid "" +"Normal distributions can be used to approximate `Binomial distributions " +"`_ when the sample " +"size is large and when the probability of a successful trial is near 50%." +msgstr "" +"当样本量较大并且成功试验的可能性接近 50% 时,正态分布可以被用来模拟 `二项分布 " +"`_。" + +#: ../../library/statistics.rst:791 +msgid "" +"For example, an open source conference has 750 attendees and two rooms with " +"a 500 person capacity. There is a talk about Python and another about Ruby." +" In previous conferences, 65% of the attendees preferred to listen to Python" +" talks. Assuming the population preferences haven't changed, what is the " +"probability that the Python room will stay within its capacity limits?" +msgstr "" +"例如,一次开源会议有 750 名与会者和两个可分别容纳 500 人的会议厅。 会上有一场关于 Python 的演讲和一场关于 Ruby 的演讲。 " +"在往届会议中,65% 的与会者更愿意去听关于 Python 的演讲。 假定人群的偏好没有发生改变,那么 Python " +"演讲的会议厅不超出其容量上限的可能性是多少?" + +#: ../../library/statistics.rst:822 +msgid "Normal distributions commonly arise in machine learning problems." +msgstr "在机器学习问题中也经常会出现正态分布。" + +#: ../../library/statistics.rst:824 +msgid "" +"Wikipedia has a `nice example of a Naive Bayesian Classifier " +"`_." +" The challenge is to predict a person's gender from measurements of normally" +" distributed features including height, weight, and foot size." +msgstr "" +"Wikipedia 上有一个 `朴素贝叶斯分类器的好例子 " +"`_。" +" 挑战的问题是根据对多个正态分布的特征测量值包括身高、体重和足部尺码来预测一个人的性别。" + +#: ../../library/statistics.rst:829 +msgid "" +"We're given a training dataset with measurements for eight people. The " +"measurements are assumed to be normally distributed, so we summarize the " +"data with :class:`NormalDist`:" +msgstr "我们得到了由八个人的测量值组成的训练数据集。 假定这些测量值是正态分布的,因此我们用 :class:`NormalDist` 来总结数据:" + +#: ../../library/statistics.rst:842 +msgid "" +"Next, we encounter a new person whose feature measurements are known but " +"whose gender is unknown:" +msgstr "接下来,我们遇到一个特征测量值已知但性别未知的新人:" + +#: ../../library/statistics.rst:851 +msgid "" +"Starting with a 50% `prior probability " +"`_ of being male or female," +" we compute the posterior as the prior times the product of likelihoods for " +"the feature measurements given the gender:" +msgstr "" +"从是男是女各 50% 的 `先验概率 `_ " +"出发,我们通过将该先验概率乘以给定性别的特征度量值的可能性累积值来计算后验概率:" + +#: ../../library/statistics.rst:866 +msgid "" +"The final prediction goes to the largest posterior. This is known as the " +"`maximum a posteriori " +"`_ or MAP:" +msgstr "" +"最终预测值应为最大后验概率值。 这种算法被称为 `maximum a posteriori " +"`_ 或 MAP:" diff --git a/library/stdtypes.po b/library/stdtypes.po new file mode 100644 index 000000000..7838d141f --- /dev/null +++ b/library/stdtypes.po @@ -0,0 +1,6727 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) 2001-2025, Python Software Foundation +# This file is distributed under the same license as the Python package. +# FIRST AUTHOR , YEAR. +# +# Translators: +# emrich , 2017 +# cdarlint , 2018 +# Shengjing Zhu , 2018 +# eric R , 2018 +# CommonZ , 2018 +# Zombie110year , 2019 +# ppcfish , 2019 +# Alpha Du , 2019 +# 叶浚安 , 2019 +# ww song , 2019 +# Arisaka97 , 2019 +# Konge , 2019 +# Sean Chao , 2020 +# Jiuh.star , 2021 +# Dai Xu , 2021 +# WH-2099 , 2023 +# Freesand Leo , 2023 +# Rafael Fontenelle , 2025 +# +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: Python 3.9\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2025-02-07 16:40+0000\n" +"PO-Revision-Date: 2017-02-16 23:27+0000\n" +"Last-Translator: Rafael Fontenelle , 2025\n" +"Language-Team: Chinese (China) (https://app.transifex.com/python-doc/teams/5390/zh_CN/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: zh_CN\n" +"Plural-Forms: nplurals=1; plural=0;\n" + +#: ../../library/stdtypes.rst:8 +msgid "Built-in Types" +msgstr "内置类型" + +#: ../../library/stdtypes.rst:10 +msgid "" +"The following sections describe the standard types that are built into the " +"interpreter." +msgstr "以下部分描述了解释器中内置的标准类型。" + +#: ../../library/stdtypes.rst:15 +msgid "" +"The principal built-in types are numerics, sequences, mappings, classes, " +"instances and exceptions." +msgstr "主要内置类型有数字、序列、映射、类、实例和异常。" + +#: ../../library/stdtypes.rst:18 +msgid "" +"Some collection classes are mutable. The methods that add, subtract, or " +"rearrange their members in place, and don't return a specific item, never " +"return the collection instance itself but ``None``." +msgstr "" +"有些多项集类是可变的。 它们用于添加、移除或重排其成员的方法将原地执行,并不返回特定的项,绝对不会返回多项集实例自身而是返回 ``None``。" + +#: ../../library/stdtypes.rst:22 +msgid "" +"Some operations are supported by several object types; in particular, " +"practically all objects can be compared for equality, tested for truth " +"value, and converted to a string (with the :func:`repr` function or the " +"slightly different :func:`str` function). The latter function is implicitly" +" used when an object is written by the :func:`print` function." +msgstr "" +"有些操作受多种对象类型的支持;特别地,实际上所有对象都可以比较是否相等、检测逻辑值,以及转换为字符串(使用 :func:`repr` 函数或略有差异的 " +":func:`str` 函数)。 后一个函数是在对象由 :func:`print` 函数输出时被隐式地调用的。" + +#: ../../library/stdtypes.rst:32 +msgid "Truth Value Testing" +msgstr "逻辑值检测" + +#: ../../library/stdtypes.rst:41 +msgid "" +"Any object can be tested for truth value, for use in an :keyword:`if` or " +":keyword:`while` condition or as operand of the Boolean operations below." +msgstr "" +"任何对象都可以进行逻辑值的检测,以便在 :keyword:`if` 或 :keyword:`while` " +"作为条件或是作为下文所述布尔运算的操作数来使用。" + +#: ../../library/stdtypes.rst:46 +msgid "" +"By default, an object is considered true unless its class defines either a " +":meth:`__bool__` method that returns ``False`` or a :meth:`__len__` method " +"that returns zero, when called with the object. [1]_ Here are most of the " +"built-in objects considered false:" +msgstr "" +"一个对象在默认情况下均被视为真值,除非当该对象被调用时其所属类定义了 :meth:`__bool__` 方法且返回 ``False`` 或是定义了 " +":meth:`__len__` 方法且返回零。 [1]_ 下面基本完整地列出了会被视为假值的内置对象:" + +#: ../../library/stdtypes.rst:55 +msgid "constants defined to be false: ``None`` and ``False``." +msgstr "被定义为假值的常量: ``None`` 和 ``False``。" + +#: ../../library/stdtypes.rst:57 +msgid "" +"zero of any numeric type: ``0``, ``0.0``, ``0j``, ``Decimal(0)``, " +"``Fraction(0, 1)``" +msgstr "任何数值类型的零: ``0``, ``0.0``, ``0j``, ``Decimal(0)``, ``Fraction(0, 1)``" + +#: ../../library/stdtypes.rst:60 +msgid "" +"empty sequences and collections: ``''``, ``()``, ``[]``, ``{}``, ``set()``, " +"``range(0)``" +msgstr "空的序列和多项集: ``''``, ``()``, ``[]``, ``{}``, ``set()``, ``range(0)``" + +#: ../../library/stdtypes.rst:69 +msgid "" +"Operations and built-in functions that have a Boolean result always return " +"``0`` or ``False`` for false and ``1`` or ``True`` for true, unless " +"otherwise stated. (Important exception: the Boolean operations ``or`` and " +"``and`` always return one of their operands.)" +msgstr "" +"产生布尔值结果的运算和内置函数总是返回 ``0`` 或 ``False`` 作为假值,``1`` 或 ``True`` 作为真值,除非另行说明。 " +"(重要例外:布尔运算 ``or`` 和 ``and`` 总是返回其中一个操作数。)" + +#: ../../library/stdtypes.rst:78 +msgid "" +"Boolean Operations --- :keyword:`!and`, :keyword:`!or`, :keyword:`!not`" +msgstr "布尔运算 --- :keyword:`!and`, :keyword:`!or`, :keyword:`!not`" + +#: ../../library/stdtypes.rst:82 +msgid "These are the Boolean operations, ordered by ascending priority:" +msgstr "这些属于布尔运算,按优先级升序排列:" + +#: ../../library/stdtypes.rst:85 ../../library/stdtypes.rst:143 +#: ../../library/stdtypes.rst:275 ../../library/stdtypes.rst:364 +#: ../../library/stdtypes.rst:414 ../../library/stdtypes.rst:862 +#: ../../library/stdtypes.rst:1057 +msgid "Operation" +msgstr "运算" + +#: ../../library/stdtypes.rst:85 ../../library/stdtypes.rst:275 +#: ../../library/stdtypes.rst:364 ../../library/stdtypes.rst:414 +#: ../../library/stdtypes.rst:862 ../../library/stdtypes.rst:1057 +msgid "Result" +msgstr "结果:" + +#: ../../library/stdtypes.rst:85 ../../library/stdtypes.rst:275 +#: ../../library/stdtypes.rst:414 ../../library/stdtypes.rst:862 +#: ../../library/stdtypes.rst:1057 ../../library/stdtypes.rst:2292 +#: ../../library/stdtypes.rst:3502 +msgid "Notes" +msgstr "备注" + +#: ../../library/stdtypes.rst:87 +msgid "``x or y``" +msgstr "``x or y``" + +#: ../../library/stdtypes.rst:87 +msgid "if *x* is false, then *y*, else *x*" +msgstr "if *x* is false, then *y*, else *x*" + +#: ../../library/stdtypes.rst:87 ../../library/stdtypes.rst:285 +#: ../../library/stdtypes.rst:864 ../../library/stdtypes.rst:867 +#: ../../library/stdtypes.rst:1068 ../../library/stdtypes.rst:2298 +#: ../../library/stdtypes.rst:3508 +msgid "\\(1)" +msgstr "\\(1)" + +#: ../../library/stdtypes.rst:90 +msgid "``x and y``" +msgstr "``x and y``" + +#: ../../library/stdtypes.rst:90 +msgid "if *x* is false, then *x*, else *y*" +msgstr "if *x* is false, then *x*, else *y*" + +#: ../../library/stdtypes.rst:90 ../../library/stdtypes.rst:288 +#: ../../library/stdtypes.rst:308 ../../library/stdtypes.rst:1096 +#: ../../library/stdtypes.rst:2302 ../../library/stdtypes.rst:2304 +#: ../../library/stdtypes.rst:3512 ../../library/stdtypes.rst:3514 +msgid "\\(2)" +msgstr "\\(2)" + +#: ../../library/stdtypes.rst:93 +msgid "``not x``" +msgstr "``not x``" + +#: ../../library/stdtypes.rst:93 +msgid "if *x* is false, then ``True``, else ``False``" +msgstr "if *x* is false, then ``True``, else ``False``" + +#: ../../library/stdtypes.rst:93 ../../library/stdtypes.rst:876 +#: ../../library/stdtypes.rst:1099 ../../library/stdtypes.rst:2306 +#: ../../library/stdtypes.rst:2308 ../../library/stdtypes.rst:2310 +#: ../../library/stdtypes.rst:2312 ../../library/stdtypes.rst:3516 +#: ../../library/stdtypes.rst:3518 ../../library/stdtypes.rst:3520 +#: ../../library/stdtypes.rst:3522 +msgid "\\(3)" +msgstr "\\(3)" + +#: ../../library/stdtypes.rst:102 ../../library/stdtypes.rst:319 +#: ../../library/stdtypes.rst:432 ../../library/stdtypes.rst:903 +#: ../../library/stdtypes.rst:1107 ../../library/stdtypes.rst:2338 +#: ../../library/stdtypes.rst:3552 +msgid "Notes:" +msgstr "注释:" + +#: ../../library/stdtypes.rst:105 +msgid "" +"This is a short-circuit operator, so it only evaluates the second argument " +"if the first one is false." +msgstr "这是个短路运算符,因此只有在第一个参数为假值时才会对第二个参数求值。" + +#: ../../library/stdtypes.rst:109 +msgid "" +"This is a short-circuit operator, so it only evaluates the second argument " +"if the first one is true." +msgstr "这是个短路运算符,因此只有在第一个参数为真值时才会对第二个参数求值。" + +#: ../../library/stdtypes.rst:113 +msgid "" +"``not`` has a lower priority than non-Boolean operators, so ``not a == b`` " +"is interpreted as ``not (a == b)``, and ``a == not b`` is a syntax error." +msgstr "" +"``not`` 的优先级比非布尔运算符低,因此 ``not a == b`` 会被解读为 ``not (a == b)`` 而 ``a == not " +"b`` 会引发语法错误。" + +#: ../../library/stdtypes.rst:120 +msgid "Comparisons" +msgstr "比较运算" + +#: ../../library/stdtypes.rst:134 +msgid "" +"There are eight comparison operations in Python. They all have the same " +"priority (which is higher than that of the Boolean operations). Comparisons" +" can be chained arbitrarily; for example, ``x < y <= z`` is equivalent to " +"``x < y and y <= z``, except that *y* is evaluated only once (but in both " +"cases *z* is not evaluated at all when ``x < y`` is found to be false)." +msgstr "" +"在 Python 中有八种比较运算符。 它们的优先级相同(比布尔运算的优先级高)。 比较运算可以任意串连;例如,``x < y <= z`` 等价于 " +"``x < y and y <= z``,前者的不同之处在于 *y* 只被求值一次(但在两种情况下当 ``x < y`` 结果为假值时 *z* " +"都不会被求值)。" + +#: ../../library/stdtypes.rst:140 +msgid "This table summarizes the comparison operations:" +msgstr "此表格汇总了比较运算:" + +#: ../../library/stdtypes.rst:143 ../../library/stdtypes.rst:2269 +#: ../../library/stdtypes.rst:2292 ../../library/stdtypes.rst:3479 +#: ../../library/stdtypes.rst:3502 +msgid "Meaning" +msgstr "含意" + +#: ../../library/stdtypes.rst:145 +msgid "``<``" +msgstr "``<``" + +#: ../../library/stdtypes.rst:145 +msgid "strictly less than" +msgstr "严格小于" + +#: ../../library/stdtypes.rst:147 +msgid "``<=``" +msgstr "``<=``" + +#: ../../library/stdtypes.rst:147 +msgid "less than or equal" +msgstr "小于或等于" + +#: ../../library/stdtypes.rst:149 +msgid "``>``" +msgstr "``>``" + +#: ../../library/stdtypes.rst:149 +msgid "strictly greater than" +msgstr "严格大于" + +#: ../../library/stdtypes.rst:151 +msgid "``>=``" +msgstr "``>=``" + +#: ../../library/stdtypes.rst:151 +msgid "greater than or equal" +msgstr "大于或等于" + +#: ../../library/stdtypes.rst:153 +msgid "``==``" +msgstr "``==``" + +#: ../../library/stdtypes.rst:153 +msgid "equal" +msgstr "等于" + +#: ../../library/stdtypes.rst:155 +msgid "``!=``" +msgstr "``!=``" + +#: ../../library/stdtypes.rst:155 +msgid "not equal" +msgstr "不等于" + +#: ../../library/stdtypes.rst:157 +msgid "``is``" +msgstr "``is``" + +#: ../../library/stdtypes.rst:157 +msgid "object identity" +msgstr "对象标识" + +#: ../../library/stdtypes.rst:159 +msgid "``is not``" +msgstr "``is not``" + +#: ../../library/stdtypes.rst:159 +msgid "negated object identity" +msgstr "否定的对象标识" + +#: ../../library/stdtypes.rst:166 +msgid "" +"Objects of different types, except different numeric types, never compare " +"equal. The ``==`` operator is always defined but for some object types (for " +"example, class objects) is equivalent to :keyword:`is`. The ``<``, ``<=``, " +"``>`` and ``>=`` operators are only defined where they make sense; for " +"example, they raise a :exc:`TypeError` exception when one of the arguments " +"is a complex number." +msgstr "" +"除不同的数字类型外,不同类型的对象不能进行相等比较。``==`` 运算符总有定义,但对于某些对象类型(例如,类对象),它等于 :keyword:`is`" +" 。其他 ``<``、``<=``、``>`` 和 ``>=`` 运算符仅在有意义的地方定义。例如,当参与比较的参数之一为复数时,它们会抛出 " +":exc:`TypeError` 异常。" + +#: ../../library/stdtypes.rst:180 +msgid "" +"Non-identical instances of a class normally compare as non-equal unless the " +"class defines the :meth:`~object.__eq__` method." +msgstr "具有不同标识的类的实例比较结果通常为不相等,除非类定义了 :meth:`~object.__eq__` 方法。" + +#: ../../library/stdtypes.rst:183 +msgid "" +"Instances of a class cannot be ordered with respect to other instances of " +"the same class, or other types of object, unless the class defines enough of" +" the methods :meth:`~object.__lt__`, :meth:`~object.__le__`, " +":meth:`~object.__gt__`, and :meth:`~object.__ge__` (in general, " +":meth:`~object.__lt__` and :meth:`~object.__eq__` are sufficient, if you " +"want the conventional meanings of the comparison operators)." +msgstr "" +"一个类的实例不能与相同类的其他实例或其他类型的对象进行排序,除非定义该类定义了足够多的方法,包括 :meth:`~object.__lt__`, " +":meth:`~object.__le__`, :meth:`~object.__gt__` 以及 :meth:`~object.__ge__` " +"(而如果你想实现常规意义上的比较操作,通常只要有 :meth:`~object.__lt__` 和 :meth:`~object.__eq__` " +"就可以了)。" + +#: ../../library/stdtypes.rst:190 +msgid "" +"The behavior of the :keyword:`is` and :keyword:`is not` operators cannot be " +"customized; also they can be applied to any two objects and never raise an " +"exception." +msgstr ":keyword:`is` 和 :keyword:`is not` 运算符无法自定义;并且它们可以被应用于任意两个对象而不会引发异常。" + +#: ../../library/stdtypes.rst:198 +msgid "" +"Two more operations with the same syntactic priority, :keyword:`in` and " +":keyword:`not in`, are supported by types that are :term:`iterable` or " +"implement the :meth:`__contains__` method." +msgstr "" +"还有两种具有相同语法优先级的运算 :keyword:`in` 和 :keyword:`not in`,它们被 :term:`iterable` 或实现了" +" :meth:`__contains__` 方法的类型所支持。" + +#: ../../library/stdtypes.rst:205 +msgid "Numeric Types --- :class:`int`, :class:`float`, :class:`complex`" +msgstr "数字类型 --- :class:`int`, :class:`float`, :class:`complex`" + +#: ../../library/stdtypes.rst:215 +msgid "" +"There are three distinct numeric types: :dfn:`integers`, :dfn:`floating " +"point numbers`, and :dfn:`complex numbers`. In addition, Booleans are a " +"subtype of integers. Integers have unlimited precision. Floating point " +"numbers are usually implemented using :c:type:`double` in C; information " +"about the precision and internal representation of floating point numbers " +"for the machine on which your program is running is available in " +":data:`sys.float_info`. Complex numbers have a real and imaginary part, " +"which are each a floating point number. To extract these parts from a " +"complex number *z*, use ``z.real`` and ``z.imag``. (The standard library " +"includes the additional numeric types :mod:`fractions.Fraction`, for " +"rationals, and :mod:`decimal.Decimal`, for floating-point numbers with user-" +"definable precision.)" +msgstr "" +"存在三种不同的数字类型: :dfn:`整数`, :dfn:`浮点数` 和 :dfn:`复数`。 此外,布尔值属于整数的子类型。 整数具有无限的精度。 " +"浮点数通常使用 C 中的 :c:type:`double` 来实现;有关你的程序运行所在机器上浮点数的精度和内部表示法可在 " +":data:`sys.float_info` 中查看。 复数包含实部和虚部,分别以一个浮点数表示。 要从一个复数 *z* 中提取这两个部分,可使用 " +"``z.real`` 和 ``z.imag``。 (标准库包含附加的数字类型,如表示有理数的 :mod:`fractions.Fraction` " +"以及以用户定制精度表示浮点数的 :mod:`decimal.Decimal`。)" + +#: ../../library/stdtypes.rst:237 +msgid "" +"Numbers are created by numeric literals or as the result of built-in " +"functions and operators. Unadorned integer literals (including hex, octal " +"and binary numbers) yield integers. Numeric literals containing a decimal " +"point or an exponent sign yield floating point numbers. Appending ``'j'`` " +"or ``'J'`` to a numeric literal yields an imaginary number (a complex number" +" with a zero real part) which you can add to an integer or float to get a " +"complex number with real and imaginary parts." +msgstr "" +"数字是由数字字面值或内置函数与运算符的结果来创建的。 不带修饰的整数字面值(包括十六进制、八进制和二进制数)会生成整数。 " +"包含小数点或幂运算符的数字字面值会生成浮点数。 在数字字面值末尾加上 ``'j'`` 或 ``'J'`` " +"会生成虚数(实部为零的复数),你可以将其与整数或浮点数相加来得到具有实部和虚部的复数。" + +#: ../../library/stdtypes.rst:262 +msgid "" +"Python fully supports mixed arithmetic: when a binary arithmetic operator " +"has operands of different numeric types, the operand with the \"narrower\" " +"type is widened to that of the other, where integer is narrower than " +"floating point, which is narrower than complex. A comparison between numbers" +" of different types behaves as though the exact values of those numbers were" +" being compared. [2]_" +msgstr "" +"Python " +"完全支持混合运算:当一个二元算术运算符的操作数有不同数值类型时,\"较窄\"类型的操作数会拓宽到另一个操作数的类型,其中整数比浮点数窄,浮点数比复数窄。不同类型的数字之间的比较,同比较这些数字的精确值一样。[2]_" + +#: ../../library/stdtypes.rst:268 +msgid "" +"The constructors :func:`int`, :func:`float`, and :func:`complex` can be used" +" to produce numbers of a specific type." +msgstr "构造函数 :func:`int`、 :func:`float` 和 :func:`complex` 可以用来构造特定类型的数字。" + +#: ../../library/stdtypes.rst:271 +msgid "" +"All numeric types (except complex) support the following operations (for " +"priorities of the operations, see :ref:`operator-summary`):" +msgstr "所有数字类型(复数除外)都支持下列运算(有关运算优先级,请参阅::ref:`operator-summary`):" + +#: ../../library/stdtypes.rst:275 +msgid "Full documentation" +msgstr "完整文档" + +#: ../../library/stdtypes.rst:277 +msgid "``x + y``" +msgstr "``x + y``" + +#: ../../library/stdtypes.rst:277 +msgid "sum of *x* and *y*" +msgstr "*x* 和 *y* 的和" + +#: ../../library/stdtypes.rst:279 +msgid "``x - y``" +msgstr "``x - y``" + +#: ../../library/stdtypes.rst:279 +msgid "difference of *x* and *y*" +msgstr "*x* 和 *y* 的差" + +#: ../../library/stdtypes.rst:281 +msgid "``x * y``" +msgstr "``x * y``" + +#: ../../library/stdtypes.rst:281 +msgid "product of *x* and *y*" +msgstr "*x* 和 *y* 的乘积" + +#: ../../library/stdtypes.rst:283 +msgid "``x / y``" +msgstr "``x / y``" + +#: ../../library/stdtypes.rst:283 +msgid "quotient of *x* and *y*" +msgstr "*x* 和 *y* 的商" + +#: ../../library/stdtypes.rst:285 +msgid "``x // y``" +msgstr "``x // y``" + +#: ../../library/stdtypes.rst:285 +msgid "floored quotient of *x* and *y*" +msgstr "*x* 和 *y* 的商数" + +#: ../../library/stdtypes.rst:288 +msgid "``x % y``" +msgstr "``x % y``" + +#: ../../library/stdtypes.rst:288 +msgid "remainder of ``x / y``" +msgstr "``x / y`` 的余数" + +#: ../../library/stdtypes.rst:290 +msgid "``-x``" +msgstr "``-x``" + +#: ../../library/stdtypes.rst:290 +msgid "*x* negated" +msgstr "*x* 取反" + +#: ../../library/stdtypes.rst:292 +msgid "``+x``" +msgstr "``+x``" + +#: ../../library/stdtypes.rst:292 +msgid "*x* unchanged" +msgstr "*x* 不变" + +#: ../../library/stdtypes.rst:294 +msgid "``abs(x)``" +msgstr "``abs(x)``" + +#: ../../library/stdtypes.rst:294 +msgid "absolute value or magnitude of *x*" +msgstr "*x* 的绝对值或大小" + +#: ../../library/stdtypes.rst:294 +msgid ":func:`abs`" +msgstr ":func:`abs`" + +#: ../../library/stdtypes.rst:297 +msgid "``int(x)``" +msgstr "``int(x)``" + +#: ../../library/stdtypes.rst:297 +msgid "*x* converted to integer" +msgstr "将 *x* 转换为整数" + +#: ../../library/stdtypes.rst:297 +msgid "\\(3)\\(6)" +msgstr "\\(3)\\(6)" + +#: ../../library/stdtypes.rst:297 +msgid ":func:`int`" +msgstr ":func:`int`" + +#: ../../library/stdtypes.rst:299 +msgid "``float(x)``" +msgstr "``float(x)``" + +#: ../../library/stdtypes.rst:299 +msgid "*x* converted to floating point" +msgstr "将 *x* 转换为浮点数" + +#: ../../library/stdtypes.rst:299 +msgid "\\(4)\\(6)" +msgstr "\\(4)\\(6)" + +#: ../../library/stdtypes.rst:299 +msgid ":func:`float`" +msgstr ":func:`float`" + +#: ../../library/stdtypes.rst:301 +msgid "``complex(re, im)``" +msgstr "``complex(re, im)``" + +#: ../../library/stdtypes.rst:301 +msgid "" +"a complex number with real part *re*, imaginary part *im*. *im* defaults to " +"zero." +msgstr "一个带有实部 *re* 和虚部 *im* 的复数。*im* 默认为0。" + +#: ../../library/stdtypes.rst:301 ../../library/stdtypes.rst:1089 +#: ../../library/stdtypes.rst:2300 ../../library/stdtypes.rst:3539 +msgid "\\(6)" +msgstr "\\(6)" + +#: ../../library/stdtypes.rst:301 +msgid ":func:`complex`" +msgstr ":func:`complex`" + +#: ../../library/stdtypes.rst:305 +msgid "``c.conjugate()``" +msgstr "``c.conjugate()``" + +#: ../../library/stdtypes.rst:305 +msgid "conjugate of the complex number *c*" +msgstr "复数 *c* 的共轭" + +#: ../../library/stdtypes.rst:308 +msgid "``divmod(x, y)``" +msgstr "``divmod(x, y)``" + +#: ../../library/stdtypes.rst:308 +msgid "the pair ``(x // y, x % y)``" +msgstr "``(x // y, x % y)``" + +#: ../../library/stdtypes.rst:308 +msgid ":func:`divmod`" +msgstr ":func:`divmod`" + +#: ../../library/stdtypes.rst:310 +msgid "``pow(x, y)``" +msgstr "``pow(x, y)``" + +#: ../../library/stdtypes.rst:310 ../../library/stdtypes.rst:312 +msgid "*x* to the power *y*" +msgstr "*x* 的 *y* 次幂" + +#: ../../library/stdtypes.rst:310 ../../library/stdtypes.rst:312 +#: ../../library/stdtypes.rst:1078 ../../library/stdtypes.rst:1081 +#: ../../library/stdtypes.rst:2325 ../../library/stdtypes.rst:2328 +#: ../../library/stdtypes.rst:2331 ../../library/stdtypes.rst:3535 +#: ../../library/stdtypes.rst:3542 +msgid "\\(5)" +msgstr "\\(5)" + +#: ../../library/stdtypes.rst:310 +msgid ":func:`pow`" +msgstr ":func:`pow`" + +#: ../../library/stdtypes.rst:312 +msgid "``x ** y``" +msgstr "``x ** y``" + +#: ../../library/stdtypes.rst:322 +msgid "" +"Also referred to as integer division. The resultant value is a whole " +"integer, though the result's type is not necessarily int. The result is " +"always rounded towards minus infinity: ``1//2`` is ``0``, ``(-1)//2`` is " +"``-1``, ``1//(-2)`` is ``-1``, and ``(-1)//(-2)`` is ``0``." +msgstr "" +"也称为整数除法。 结果值是一个整数,但结果的类型不一定是 int。 运算结果总是向负无穷的方向舍入: ``1//2`` 为 ``0``, " +"``(-1)//2`` 为 ``-1``, ``1//(-2)`` 为 ``-1`` 而 ``(-1)//(-2)`` 为 ``0``。" + +#: ../../library/stdtypes.rst:328 +msgid "" +"Not for complex numbers. Instead convert to floats using :func:`abs` if " +"appropriate." +msgstr "不可用于复数。 而应在适当条件下使用 :func:`abs` 转换为浮点数。" + +#: ../../library/stdtypes.rst:340 +msgid "" +"Conversion from floating point to integer may round or truncate as in C; see" +" functions :func:`math.floor` and :func:`math.ceil` for well-defined " +"conversions." +msgstr "" +"从浮点数转换为整数会被舍入或是像在 C 语言中一样被截断;请参阅 :func:`math.floor` 和 :func:`math.ceil` " +"函数查看转换的完整定义。" + +#: ../../library/stdtypes.rst:345 +msgid "" +"float also accepts the strings \"nan\" and \"inf\" with an optional prefix " +"\"+\" or \"-\" for Not a Number (NaN) and positive or negative infinity." +msgstr "float 也接受字符串 \"nan\" 和附带可选前缀 \"+\" 或 \"-\" 的 \"inf\" 分别表示非数字 (NaN) 以及正或负无穷。" + +#: ../../library/stdtypes.rst:349 +msgid "" +"Python defines ``pow(0, 0)`` and ``0 ** 0`` to be ``1``, as is common for " +"programming languages." +msgstr "Python 将 ``pow(0, 0)`` 和 ``0 ** 0`` 定义为 ``1``,这是编程语言的普遍做法。" + +#: ../../library/stdtypes.rst:353 +msgid "" +"The numeric literals accepted include the digits ``0`` to ``9`` or any " +"Unicode equivalent (code points with the ``Nd`` property)." +msgstr "接受的数字字面值包括数码 ``0`` 到 ``9`` 或任何等效的 Unicode 字符(具有 ``Nd`` 特征属性的代码点)。" + +#: ../../library/stdtypes.rst:356 +msgid "" +"See " +"https://www.unicode.org/Public/13.0.0/ucd/extracted/DerivedNumericType.txt " +"for a complete list of code points with the ``Nd`` property." +msgstr "" +"请参阅 " +"https://www.unicode.org/Public/13.0.0/ucd/extracted/DerivedNumericType.txt " +"查看具有 ``Nd`` 特征属性的代码点的完整列表。" + +#: ../../library/stdtypes.rst:360 +msgid "" +"All :class:`numbers.Real` types (:class:`int` and :class:`float`) also " +"include the following operations:" +msgstr "所有 :class:`numbers.Real` 类型 (:class:`int` 和 :class:`float`) 还包括下列运算:" + +#: ../../library/stdtypes.rst:366 +msgid ":func:`math.trunc(\\ x) `" +msgstr ":func:`math.trunc(\\ x) `" + +#: ../../library/stdtypes.rst:366 +msgid "*x* truncated to :class:`~numbers.Integral`" +msgstr "*x* 截断为 :class:`~numbers.Integral`" + +#: ../../library/stdtypes.rst:369 +msgid ":func:`round(x[, n]) `" +msgstr ":func:`round(x[, n]) `" + +#: ../../library/stdtypes.rst:369 +msgid "" +"*x* rounded to *n* digits, rounding half to even. If *n* is omitted, it " +"defaults to 0." +msgstr "*x* 舍入到 *n* 位小数,半数值会舍入到偶数。 如果省略 *n*,则默认为 0。" + +#: ../../library/stdtypes.rst:373 +msgid ":func:`math.floor(\\ x) `" +msgstr ":func:`math.floor(\\ x) `" + +#: ../../library/stdtypes.rst:373 +msgid "the greatest :class:`~numbers.Integral` <= *x*" +msgstr "<= *x* 的最大 :class:`~numbers.Integral`" + +#: ../../library/stdtypes.rst:376 +msgid ":func:`math.ceil(x) `" +msgstr ":func:`math.ceil(x) `" + +#: ../../library/stdtypes.rst:376 +msgid "the least :class:`~numbers.Integral` >= *x*" +msgstr ">= *x* 的最小 :class:`~numbers.Integral`" + +#: ../../library/stdtypes.rst:380 +msgid "" +"For additional numeric operations see the :mod:`math` and :mod:`cmath` " +"modules." +msgstr "有关更多的数字运算请参阅 :mod:`math` 和 :mod:`cmath` 模块。" + +#: ../../library/stdtypes.rst:389 +msgid "Bitwise Operations on Integer Types" +msgstr "整数类型的按位运算" + +#: ../../library/stdtypes.rst:403 +msgid "" +"Bitwise operations only make sense for integers. The result of bitwise " +"operations is calculated as though carried out in two's complement with an " +"infinite number of sign bits." +msgstr "按位运算只对整数有意义。 计算按位运算的结果,就相当于使用无穷多个二进制符号位对二的补码执行操作。" + +#: ../../library/stdtypes.rst:407 +msgid "" +"The priorities of the binary bitwise operations are all lower than the " +"numeric operations and higher than the comparisons; the unary operation " +"``~`` has the same priority as the other unary numeric operations (``+`` and" +" ``-``)." +msgstr "" +"二进制按位运算的优先级全都低于数字运算,但又高于比较运算;一元运算 ``~`` 具有与其他一元算术运算 (``+`` and ``-``) " +"相同的优先级。" + +#: ../../library/stdtypes.rst:411 +msgid "This table lists the bitwise operations sorted in ascending priority:" +msgstr "此表格是以优先级升序排序的按位运算列表:" + +#: ../../library/stdtypes.rst:416 +msgid "``x | y``" +msgstr "``x | y``" + +#: ../../library/stdtypes.rst:416 +msgid "bitwise :dfn:`or` of *x* and *y*" +msgstr "*x* 和 *y* 按位 :dfn:`或`" + +#: ../../library/stdtypes.rst:416 ../../library/stdtypes.rst:419 +#: ../../library/stdtypes.rst:422 ../../library/stdtypes.rst:1102 +#: ../../library/stdtypes.rst:2314 ../../library/stdtypes.rst:2318 +#: ../../library/stdtypes.rst:3524 ../../library/stdtypes.rst:3528 +msgid "\\(4)" +msgstr "\\(4)" + +#: ../../library/stdtypes.rst:419 +msgid "``x ^ y``" +msgstr "``x ^ y``" + +#: ../../library/stdtypes.rst:419 +msgid "bitwise :dfn:`exclusive or` of *x* and *y*" +msgstr "*x* 和 *y* 按位 :dfn:`异或`" + +#: ../../library/stdtypes.rst:422 +msgid "``x & y``" +msgstr "``x & y``" + +#: ../../library/stdtypes.rst:422 +msgid "bitwise :dfn:`and` of *x* and *y*" +msgstr "*x* 和 *y* 按位 :dfn:`与`" + +#: ../../library/stdtypes.rst:425 +msgid "``x << n``" +msgstr "``x << n``" + +#: ../../library/stdtypes.rst:425 +msgid "*x* shifted left by *n* bits" +msgstr "*x* 左移 *n* 位" + +#: ../../library/stdtypes.rst:425 +msgid "(1)(2)" +msgstr "(1)(2)" + +#: ../../library/stdtypes.rst:427 +msgid "``x >> n``" +msgstr "``x >> n``" + +#: ../../library/stdtypes.rst:427 +msgid "*x* shifted right by *n* bits" +msgstr "*x* 右移 *n* 位" + +#: ../../library/stdtypes.rst:427 +msgid "(1)(3)" +msgstr "(1)(3)" + +#: ../../library/stdtypes.rst:429 +msgid "``~x``" +msgstr "``~x``" + +#: ../../library/stdtypes.rst:429 +msgid "the bits of *x* inverted" +msgstr "*x* 逐位取反" + +#: ../../library/stdtypes.rst:435 +msgid "" +"Negative shift counts are illegal and cause a :exc:`ValueError` to be " +"raised." +msgstr "负的移位数是非法的,会导致引发 :exc:`ValueError`。" + +#: ../../library/stdtypes.rst:438 +msgid "" +"A left shift by *n* bits is equivalent to multiplication by ``pow(2, n)``." +msgstr "左移 *n* 位等价于乘以 ``pow(2, n)`` 。" + +#: ../../library/stdtypes.rst:441 +msgid "" +"A right shift by *n* bits is equivalent to floor division by ``pow(2, n)``." +msgstr "右移 *n* 位等价于除以 ``pow(2, n)`` ,作向下取整除法。" + +#: ../../library/stdtypes.rst:444 +msgid "" +"Performing these calculations with at least one extra sign extension bit in " +"a finite two's complement representation (a working bit-width of ``1 + " +"max(x.bit_length(), y.bit_length())`` or more) is sufficient to get the same" +" result as if there were an infinite number of sign bits." +msgstr "" +"使用带有至少一个额外符号扩展位的有限个二进制补码表示(有效位宽度为 ``1 + max(x.bit_length(), " +"y.bit_length())`` 或以上)执行这些计算就足以获得相当于有无数个符号位时的同样结果。" + +#: ../../library/stdtypes.rst:451 +msgid "Additional Methods on Integer Types" +msgstr "整数类型的附加方法" + +#: ../../library/stdtypes.rst:453 +msgid "" +"The int type implements the :class:`numbers.Integral` :term:`abstract base " +"class`. In addition, it provides a few more methods:" +msgstr "" +"int 类型实现了 :class:`numbers.Integral` :term:`abstract base class`。 " +"此外,它还提供了其他几个方法:" + +#: ../../library/stdtypes.rst:458 +msgid "" +"Return the number of bits necessary to represent an integer in binary, " +"excluding the sign and leading zeros::" +msgstr "返回以二进制表示一个整数所需要的位数,不包括符号位和前面的零::" + +#: ../../library/stdtypes.rst:467 +msgid "" +"More precisely, if ``x`` is nonzero, then ``x.bit_length()`` is the unique " +"positive integer ``k`` such that ``2**(k-1) <= abs(x) < 2**k``. " +"Equivalently, when ``abs(x)`` is small enough to have a correctly rounded " +"logarithm, then ``k = 1 + int(log(abs(x), 2))``. If ``x`` is zero, then " +"``x.bit_length()`` returns ``0``." +msgstr "" +"更准确地说,如果 ``x`` 非零,则 ``x.bit_length()`` 是使得 ``2**(k-1) <= abs(x) < 2**k`` " +"的唯一正整数 ``k``。 同样地,当 ``abs(x)`` 小到足以具有正确的舍入对数时,则 ``k = 1 + int(log(abs(x), " +"2))``。 如果 ``x`` 为零,则 ``x.bit_length()`` 返回 ``0``。" + +#: ../../library/stdtypes.rst:473 +msgid "Equivalent to::" +msgstr "等价于::" + +#: ../../library/stdtypes.rst:484 +msgid "Return an array of bytes representing an integer." +msgstr "返回表示一个整数的字节数组。" + +#: ../../library/stdtypes.rst:496 +msgid "" +"The integer is represented using *length* bytes. An :exc:`OverflowError` is" +" raised if the integer is not representable with the given number of bytes." +msgstr "整数会使用 *length* 个字节来表示。 如果整数不能用给定的字节数来表示则会引发 :exc:`OverflowError`。" + +#: ../../library/stdtypes.rst:500 ../../library/stdtypes.rst:532 +msgid "" +"The *byteorder* argument determines the byte order used to represent the " +"integer. If *byteorder* is ``\"big\"``, the most significant byte is at the" +" beginning of the byte array. If *byteorder* is ``\"little\"``, the most " +"significant byte is at the end of the byte array. To request the native " +"byte order of the host system, use :data:`sys.byteorder` as the byte order " +"value." +msgstr "" +"*byteorder* 参数确定用于表示整数的字节顺序。 如果 *byteorder* 为 ``\"big\"``,则最高位字节放在字节数组的开头。 " +"如果 *byteorder* 为 ``\"little\"``,则最高位字节放在字节数组的末尾。 要请求主机系统上的原生字节顺序,请使用 " +":data:`sys.byteorder` 作为字节顺序值。" + +#: ../../library/stdtypes.rst:507 +msgid "" +"The *signed* argument determines whether two's complement is used to " +"represent the integer. If *signed* is ``False`` and a negative integer is " +"given, an :exc:`OverflowError` is raised. The default value for *signed* is " +"``False``." +msgstr "" +"*signed* 参数确定是否使用二的补码来表示整数。 如果 *signed* 为 ``False`` 并且给出的是负整数,则会引发 " +":exc:`OverflowError`。 *signed* 的默认值为 ``False``。" + +#: ../../library/stdtypes.rst:516 +msgid "Return the integer represented by the given array of bytes." +msgstr "返回由给定字节数组所表示的整数。" + +#: ../../library/stdtypes.rst:529 +msgid "" +"The argument *bytes* must either be a :term:`bytes-like object` or an " +"iterable producing bytes." +msgstr "*bytes* 参数必须为一个 :term:`bytes-like object` 或是生成字节的可迭代对象。" + +#: ../../library/stdtypes.rst:539 +msgid "" +"The *signed* argument indicates whether two's complement is used to " +"represent the integer." +msgstr "*signed* 参数指明是否使用二的补码来表示整数。" + +#: ../../library/stdtypes.rst:546 +msgid "" +"Return a pair of integers whose ratio is exactly equal to the original " +"integer and with a positive denominator. The integer ratio of integers " +"(whole numbers) is always the integer as the numerator and ``1`` as the " +"denominator." +msgstr "返回一对整数,其比率正好等于原整数并且分母为正数。 整数的比率总是用这个整数本身作为分子,``1`` 作为分母。" + +#: ../../library/stdtypes.rst:554 +msgid "Additional Methods on Float" +msgstr "浮点类型的附加方法" + +#: ../../library/stdtypes.rst:556 +msgid "" +"The float type implements the :class:`numbers.Real` :term:`abstract base " +"class`. float also has the following additional methods." +msgstr "" +"float 类型实现了 :class:`numbers.Real` :term:`abstract base class`。 float " +"还具有以下附加方法。" + +#: ../../library/stdtypes.rst:561 +msgid "" +"Return a pair of integers whose ratio is exactly equal to the original float" +" and with a positive denominator. Raises :exc:`OverflowError` on infinities" +" and a :exc:`ValueError` on NaNs." +msgstr "" +"返回一对整数,其比率正好等于原浮点数并且分母为正数。 无穷大会引发 :exc:`OverflowError` 而 NaN 则会引发 " +":exc:`ValueError`。" + +#: ../../library/stdtypes.rst:568 +msgid "" +"Return ``True`` if the float instance is finite with integral value, and " +"``False`` otherwise::" +msgstr "如果 float 实例可用有限位整数表示则返回 ``True``,否则返回 ``False``::" + +#: ../../library/stdtypes.rst:576 +msgid "" +"Two methods support conversion to and from hexadecimal strings. Since " +"Python's floats are stored internally as binary numbers, converting a float " +"to or from a *decimal* string usually involves a small rounding error. In " +"contrast, hexadecimal strings allow exact representation and specification " +"of floating-point numbers. This can be useful when debugging, and in " +"numerical work." +msgstr "" +"两个方法均支持与十六进制数字符串之间的转换。 由于 Python 浮点数在内部存储为二进制数,因此浮点数与 *十进制数* " +"字符串之间的转换往往会导致微小的舍入错误。 而十六进制数字符串却允许精确地表示和描述浮点数。 这在进行调试和数值工作时非常有用。" + +#: ../../library/stdtypes.rst:587 +msgid "" +"Return a representation of a floating-point number as a hexadecimal string." +" For finite floating-point numbers, this representation will always include" +" a leading ``0x`` and a trailing ``p`` and exponent." +msgstr "以十六进制字符串的形式返回一个浮点数表示。 对于有限浮点数,这种表示法将总是包含前导的 ``0x`` 和尾随的 ``p`` 加指数。" + +#: ../../library/stdtypes.rst:595 +msgid "" +"Class method to return the float represented by a hexadecimal string *s*. " +"The string *s* may have leading and trailing whitespace." +msgstr "返回以十六进制字符串 *s* 表示的浮点数的类方法。 字符串 *s* 可以带有前导和尾随的空格。" + +#: ../../library/stdtypes.rst:600 +msgid "" +"Note that :meth:`float.hex` is an instance method, while " +":meth:`float.fromhex` is a class method." +msgstr "请注意 :meth:`float.hex` 是实例方法,而 :meth:`float.fromhex` 是类方法。" + +#: ../../library/stdtypes.rst:603 +msgid "A hexadecimal string takes the form::" +msgstr "十六进制字符串采用的形式为::" + +#: ../../library/stdtypes.rst:607 +msgid "" +"where the optional ``sign`` may by either ``+`` or ``-``, ``integer`` and " +"``fraction`` are strings of hexadecimal digits, and ``exponent`` is a " +"decimal integer with an optional leading sign. Case is not significant, and" +" there must be at least one hexadecimal digit in either the integer or the " +"fraction. This syntax is similar to the syntax specified in section 6.4.4.2" +" of the C99 standard, and also to the syntax used in Java 1.5 onwards. In " +"particular, the output of :meth:`float.hex` is usable as a hexadecimal " +"floating-point literal in C or Java code, and hexadecimal strings produced " +"by C's ``%a`` format character or Java's ``Double.toHexString`` are accepted" +" by :meth:`float.fromhex`." +msgstr "" +"可选的 ``sign`` 可以是 ``+`` 或 ``-``,``integer`` 和 ``fraction`` " +"是十六进制数码组成的字符串,``exponent`` 是带有可选前导符的十进制整数。 大小写没有影响,在 integer 或 fraction " +"中必须至少有一个十六进制数码。 此语法类似于 C99 标准的 6.4.4.2 小节中所描述的语法,也是 Java 1.5 以上所使用的语法。 " +"特别地,:meth:`float.hex` 的输出可以用作 C 或 Java 代码中的十六进制浮点数字面值,而由 C 的 ``%a`` 格式字符或 " +"Java 的 ``Double.toHexString`` 所生成的十六进制数字符串由为 :meth:`float.fromhex` 所接受。" + +#: ../../library/stdtypes.rst:620 +msgid "" +"Note that the exponent is written in decimal rather than hexadecimal, and " +"that it gives the power of 2 by which to multiply the coefficient. For " +"example, the hexadecimal string ``0x3.a7p10`` represents the floating-point " +"number ``(3 + 10./16 + 7./16**2) * 2.0**10``, or ``3740.0``::" +msgstr "" +"请注意 exponent 是十进制数而非十六进制数,它给出要与系数相乘的 2 的幂次。 例如,十六进制数字符串 ``0x3.a7p10`` 表示浮点数 " +"``(3 + 10./16 + 7./16**2) * 2.0**10`` 即 ``3740.0``::" + +#: ../../library/stdtypes.rst:630 +msgid "" +"Applying the reverse conversion to ``3740.0`` gives a different hexadecimal " +"string representing the same number::" +msgstr "对 ``3740.0`` 应用反向转换会得到另一个代表相同数值的十六进制数字符串::" + +#: ../../library/stdtypes.rst:640 +msgid "Hashing of numeric types" +msgstr "数字类型的哈希运算" + +#: ../../library/stdtypes.rst:642 +msgid "" +"For numbers ``x`` and ``y``, possibly of different types, it's a requirement" +" that ``hash(x) == hash(y)`` whenever ``x == y`` (see the " +":meth:`~object.__hash__` method documentation for more details). For ease " +"of implementation and efficiency across a variety of numeric types " +"(including :class:`int`, :class:`float`, :class:`decimal.Decimal` and " +":class:`fractions.Fraction`) Python's hash for numeric types is based on a " +"single mathematical function that's defined for any rational number, and " +"hence applies to all instances of :class:`int` and " +":class:`fractions.Fraction`, and all finite instances of :class:`float` and " +":class:`decimal.Decimal`. Essentially, this function is given by reduction " +"modulo ``P`` for a fixed prime ``P``. The value of ``P`` is made available " +"to Python as the :attr:`modulus` attribute of :data:`sys.hash_info`." +msgstr "" +"对于可能为不同类型的数字 ``x`` 和 ``y``,要求 ``x == y`` 时必定 ``hash(x) == hash(y)`` (详情参见 " +":meth:`~object.__hash__` 方法的文档)。 为了便于在各种数字类型 (包括 :class:`int`, " +":class:`float`, :class:`decimal.Decimal` 和 :class:`fractions.Fraction`) " +"上实现并保证效率,Python 对数字类型的哈希运算是基于为任意有理数定义统一的数学函数,因此该运算对 :class:`int` 和 " +":class:`fractions.Fraction` 的全部实例,以及 :class:`float` 和 " +":class:`decimal.Decimal` 的全部有限实例均可用。 从本质上说,此函数是通过以一个固定质数 ``P`` 进行 ``P`` " +"降模给出的。 ``P`` 的值在 Python 中可以 :data:`sys.hash_info` 的 :attr:`modulus` " +"属性的形式被访问。" + +#: ../../library/stdtypes.rst:657 +msgid "" +"Currently, the prime used is ``P = 2**31 - 1`` on machines with 32-bit C " +"longs and ``P = 2**61 - 1`` on machines with 64-bit C longs." +msgstr "" +"目前所用的质数设定,在 C long 为 32 位的机器上 ``P = 2**31 - 1`` 而在 C long 为 64 位的机器上 ``P = " +"2**61 - 1``。" + +#: ../../library/stdtypes.rst:660 +msgid "Here are the rules in detail:" +msgstr "详细规则如下所述:" + +#: ../../library/stdtypes.rst:662 +msgid "" +"If ``x = m / n`` is a nonnegative rational number and ``n`` is not divisible" +" by ``P``, define ``hash(x)`` as ``m * invmod(n, P) % P``, where ``invmod(n," +" P)`` gives the inverse of ``n`` modulo ``P``." +msgstr "" +"如果 ``x = m / n`` 是一个非负的有理数且 ``n`` 不可被 ``P`` 整除,则定义 ``hash(x)`` 为 ``m * " +"invmod(n, P) % P``,其中 ``invmod(n, P)`` 是对 ``n`` 模 ``P`` 取反。" + +#: ../../library/stdtypes.rst:666 +msgid "" +"If ``x = m / n`` is a nonnegative rational number and ``n`` is divisible by " +"``P`` (but ``m`` is not) then ``n`` has no inverse modulo ``P`` and the rule" +" above doesn't apply; in this case define ``hash(x)`` to be the constant " +"value ``sys.hash_info.inf``." +msgstr "" +"如果 ``x = m / n`` 是一个非负的有理数且 ``n`` 可被 ``P`` 整除(但 ``m`` 不能)则 ``n`` 不能对 ``P`` " +"降模,以上规则不适用;在此情况下则定义 ``hash(x)`` 为常数值 ``sys.hash_info.inf``。" + +#: ../../library/stdtypes.rst:671 +msgid "" +"If ``x = m / n`` is a negative rational number define ``hash(x)`` as " +"``-hash(-x)``. If the resulting hash is ``-1``, replace it with ``-2``." +msgstr "" +"如果 ``x = m / n`` 是一个负的有理数则定义 ``hash(x)`` 为 ``-hash(-x)``。 如果结果哈希值为 ``-1`` " +"则将其替换为 ``-2``。" + +#: ../../library/stdtypes.rst:675 +msgid "" +"The particular values ``sys.hash_info.inf``, ``-sys.hash_info.inf`` and " +"``sys.hash_info.nan`` are used as hash values for positive infinity, " +"negative infinity, or nans (respectively). (All hashable nans have the same" +" hash value.)" +msgstr "" +"特定值 ``sys.hash_info.inf``, ``-sys.hash_info.inf`` 和 ``sys.hash_info.nan`` " +"被用作正无穷、负无穷和空值(所分别对应的)哈希值。 (所有可哈希的空值都具有相同的哈希值。)" + +#: ../../library/stdtypes.rst:680 +msgid "" +"For a :class:`complex` number ``z``, the hash values of the real and " +"imaginary parts are combined by computing ``hash(z.real) + " +"sys.hash_info.imag * hash(z.imag)``, reduced modulo " +"``2**sys.hash_info.width`` so that it lies in " +"``range(-2**(sys.hash_info.width - 1), 2**(sys.hash_info.width - 1))``. " +"Again, if the result is ``-1``, it's replaced with ``-2``." +msgstr "" +"对于一个 :class:`complex` 值 ``z``,会通过计算 ``hash(z.real) + sys.hash_info.imag * " +"hash(z.imag)`` 将实部和虚部的哈希值结合起来,并进行降模 ``2**sys.hash_info.width`` 以使其处于 " +"``range(-2**(sys.hash_info.width - 1), 2**(sys.hash_info.width - 1))`` 范围之内。" +" 同样地,如果结果为 ``-1`` 则将其替换为 ``-2``。" + +#: ../../library/stdtypes.rst:688 +msgid "" +"To clarify the above rules, here's some example Python code, equivalent to " +"the built-in hash, for computing the hash of a rational number, " +":class:`float`, or :class:`complex`::" +msgstr "" +"为了阐明上述规则,这里有一些等价于内置哈希算法的 Python 代码示例,可用于计算有理数、:class:`float` 或 " +":class:`complex` 的哈希值::" + +#: ../../library/stdtypes.rst:743 +msgid "Iterator Types" +msgstr "迭代器类型" + +#: ../../library/stdtypes.rst:751 +msgid "" +"Python supports a concept of iteration over containers. This is implemented" +" using two distinct methods; these are used to allow user-defined classes to" +" support iteration. Sequences, described below in more detail, always " +"support the iteration methods." +msgstr "" +"Python 支持在容器中进行迭代的概念。 这是通过使用两个单独方法来实现的;它们被用于允许用户自定义类对迭代的支持。 " +"将在下文中详细描述的序列总是支持迭代方法。" + +#: ../../library/stdtypes.rst:756 +msgid "" +"One method needs to be defined for container objects to provide iteration " +"support:" +msgstr "容器对象要提供迭代支持,必须定义一个方法:" + +#: ../../library/stdtypes.rst:763 +msgid "" +"Return an iterator object. The object is required to support the iterator " +"protocol described below. If a container supports different types of " +"iteration, additional methods can be provided to specifically request " +"iterators for those iteration types. (An example of an object supporting " +"multiple forms of iteration would be a tree structure which supports both " +"breadth-first and depth-first traversal.) This method corresponds to the " +":c:member:`~PyTypeObject.tp_iter` slot of the type structure for Python " +"objects in the Python/C API." +msgstr "" +"返回一个迭代器对象。 该对象需要支持下文所述的迭代器协议。 如果容器支持不同的迭代类型,则可以提供额外的方法来专门地请求不同迭代类型的迭代器。 " +"(支持多种迭代形式的对象的例子有同时支持广度优先和深度优先遍历的树结构。) 此方法对应于 Python/C API 中 Python 对象类型结构体的 " +":c:member:`~PyTypeObject.tp_iter` 槽位。" + +#: ../../library/stdtypes.rst:772 +msgid "" +"The iterator objects themselves are required to support the following two " +"methods, which together form the :dfn:`iterator protocol`:" +msgstr "迭代器对象自身需要支持以下两个方法,它们共同组成了 :dfn:`迭代器协议`:" + +#: ../../library/stdtypes.rst:778 +msgid "" +"Return the iterator object itself. This is required to allow both " +"containers and iterators to be used with the :keyword:`for` and " +":keyword:`in` statements. This method corresponds to the " +":c:member:`~PyTypeObject.tp_iter` slot of the type structure for Python " +"objects in the Python/C API." +msgstr "" +"返回迭代器对象本身。 这是同时允许容器和迭代器配合 :keyword:`for` 和 :keyword:`in` 语句使用所必须的。 此方法对应于 " +"Python/C API 中 Python 对象类型结构体的 :c:member:`~PyTypeObject.tp_iter` 槽位。" + +#: ../../library/stdtypes.rst:786 +msgid "" +"Return the next item from the container. If there are no further items, " +"raise the :exc:`StopIteration` exception. This method corresponds to the " +":c:member:`~PyTypeObject.tp_iternext` slot of the type structure for Python " +"objects in the Python/C API." +msgstr "" +"从容器中返回下一项。 如果已经没有项可返回,则会引发 :exc:`StopIteration` 异常。 此方法对应于 Python/C API 中 " +"Python 对象类型结构体的 :c:member:`~PyTypeObject.tp_iternext` 槽位。" + +#: ../../library/stdtypes.rst:791 +msgid "" +"Python defines several iterator objects to support iteration over general " +"and specific sequence types, dictionaries, and other more specialized forms." +" The specific types are not important beyond their implementation of the " +"iterator protocol." +msgstr "" +"Python 定义了几种迭代器对象以支持对一般和特定序列类型、字典和其他更特别的形式进行迭代。 " +"除了迭代器协议的实现,特定类型的其他性质对迭代操作来说都不重要。" + +#: ../../library/stdtypes.rst:796 +msgid "" +"Once an iterator's :meth:`~iterator.__next__` method raises " +":exc:`StopIteration`, it must continue to do so on subsequent calls. " +"Implementations that do not obey this property are deemed broken." +msgstr "" +"一旦迭代器的 :meth:`~iterator.__next__` 方法引发了 " +":exc:`StopIteration`,它必须一直对后续调用引发同样的异常。 不遵循此行为特性的实现将无法正常使用。" + +#: ../../library/stdtypes.rst:804 +msgid "Generator Types" +msgstr "生成器类型" + +#: ../../library/stdtypes.rst:806 +msgid "" +"Python's :term:`generator`\\s provide a convenient way to implement the " +"iterator protocol. If a container object's :meth:`__iter__` method is " +"implemented as a generator, it will automatically return an iterator object " +"(technically, a generator object) supplying the :meth:`__iter__` and " +":meth:`~generator.__next__` methods. More information about generators can " +"be found in :ref:`the documentation for the yield expression `." +msgstr "" +"Python 的 :term:`generator` 提供了一种实现迭代器协议的便捷方式。 如果容器对象 :meth:`__iter__` " +"方法被实现为一个生成器,它将自动返回一个迭代器对象(从技术上说是一个生成器对象),该对象提供 :meth:`__iter__` 和 " +":meth:`~generator.__next__` 方法。 有关生成器的更多信息可以参阅 :ref:`yield 表达式的文档 " +"`。" + +#: ../../library/stdtypes.rst:818 +msgid "Sequence Types --- :class:`list`, :class:`tuple`, :class:`range`" +msgstr "序列类型 --- :class:`list`, :class:`tuple`, :class:`range`" + +#: ../../library/stdtypes.rst:820 +msgid "" +"There are three basic sequence types: lists, tuples, and range objects. " +"Additional sequence types tailored for processing of :ref:`binary data " +"` and :ref:`text strings ` are described in dedicated " +"sections." +msgstr "" +"有三种基本序列类型:list, tuple 和 range 对象。 为处理 :ref:`二进制数据 ` 和 :ref:`文本字符串" +" ` 而特别定制的附加序列类型会在专门的小节中描述。" + +#: ../../library/stdtypes.rst:829 +msgid "Common Sequence Operations" +msgstr "通用序列操作" + +#: ../../library/stdtypes.rst:833 +msgid "" +"The operations in the following table are supported by most sequence types, " +"both mutable and immutable. The :class:`collections.abc.Sequence` ABC is " +"provided to make it easier to correctly implement these operations on custom" +" sequence types." +msgstr "" +"大多数序列类型,包括可变类型和不可变类型都支持下表中的操作。 :class:`collections.abc.Sequence` ABC " +"被提供用来更容易地在自定义序列类型上正确地实现这些操作。" + +#: ../../library/stdtypes.rst:838 +msgid "" +"This table lists the sequence operations sorted in ascending priority. In " +"the table, *s* and *t* are sequences of the same type, *n*, *i*, *j* and *k*" +" are integers and *x* is an arbitrary object that meets any type and value " +"restrictions imposed by *s*." +msgstr "" +"此表按优先级升序列出了序列操作。 在表格中,*s* 和 *t* 是具有相同类型的序列,*n*, *i*, *j* 和 *k* 是整数而 *x* " +"是任何满足 *s* 所规定的类型和值限制的任意对象。" + +#: ../../library/stdtypes.rst:843 +msgid "" +"The ``in`` and ``not in`` operations have the same priorities as the " +"comparison operations. The ``+`` (concatenation) and ``*`` (repetition) " +"operations have the same priority as the corresponding numeric operations. " +"[3]_" +msgstr "" +"``in`` 和 ``not in`` 操作具有与比较操作相同的优先级。 ``+`` (拼接) 和 ``*`` (重复) " +"操作具有与对应数值运算相同的优先级。 [3]_" + +#: ../../library/stdtypes.rst:864 +msgid "``x in s``" +msgstr "``x in s``" + +#: ../../library/stdtypes.rst:864 +msgid "``True`` if an item of *s* is equal to *x*, else ``False``" +msgstr "如果 *s* 中的某项等于 *x* 则结果为 ``True``,否则为 ``False``" + +#: ../../library/stdtypes.rst:867 +msgid "``x not in s``" +msgstr "``x not in s``" + +#: ../../library/stdtypes.rst:867 +msgid "``False`` if an item of *s* is equal to *x*, else ``True``" +msgstr "如果 *s* 中的某项等于 *x* 则结果为 ``False``,否则为 ``True``" + +#: ../../library/stdtypes.rst:870 +msgid "``s + t``" +msgstr "``s + t``" + +#: ../../library/stdtypes.rst:870 +msgid "the concatenation of *s* and *t*" +msgstr "*s* 与 *t* 相拼接" + +#: ../../library/stdtypes.rst:870 +msgid "(6)(7)" +msgstr "(6)(7)" + +#: ../../library/stdtypes.rst:873 +msgid "``s * n`` or ``n * s``" +msgstr "``s * n`` 或 ``n * s``" + +#: ../../library/stdtypes.rst:873 +msgid "equivalent to adding *s* to itself *n* times" +msgstr "相当于 *s* 与自身进行 *n* 次拼接" + +#: ../../library/stdtypes.rst:873 +msgid "(2)(7)" +msgstr "(2)(7)" + +#: ../../library/stdtypes.rst:876 +msgid "``s[i]``" +msgstr "``s[i]``" + +#: ../../library/stdtypes.rst:876 +msgid "*i*\\ th item of *s*, origin 0" +msgstr "*s* 的第 *i* 项,起始为 0" + +#: ../../library/stdtypes.rst:878 +msgid "``s[i:j]``" +msgstr "``s[i:j]``" + +#: ../../library/stdtypes.rst:878 +msgid "slice of *s* from *i* to *j*" +msgstr "*s* 从 *i* 到 *j* 的切片" + +#: ../../library/stdtypes.rst:878 +msgid "(3)(4)" +msgstr "(3)(4)" + +#: ../../library/stdtypes.rst:880 +msgid "``s[i:j:k]``" +msgstr "``s[i:j:k]``" + +#: ../../library/stdtypes.rst:880 +msgid "slice of *s* from *i* to *j* with step *k*" +msgstr "*s* 从 *i* 到 *j* 步长为 *k* 的切片" + +#: ../../library/stdtypes.rst:880 +msgid "(3)(5)" +msgstr "(3)(5)" + +#: ../../library/stdtypes.rst:883 +msgid "``len(s)``" +msgstr "``len(s)``" + +#: ../../library/stdtypes.rst:883 +msgid "length of *s*" +msgstr "*s* 的长度" + +#: ../../library/stdtypes.rst:885 +msgid "``min(s)``" +msgstr "``min(s)``" + +#: ../../library/stdtypes.rst:885 +msgid "smallest item of *s*" +msgstr "*s* 的最小项" + +#: ../../library/stdtypes.rst:887 +msgid "``max(s)``" +msgstr "``max(s)``" + +#: ../../library/stdtypes.rst:887 +msgid "largest item of *s*" +msgstr "*s* 的最大项" + +#: ../../library/stdtypes.rst:889 +msgid "``s.index(x[, i[, j]])``" +msgstr "``s.index(x[, i[, j]])``" + +#: ../../library/stdtypes.rst:889 +msgid "" +"index of the first occurrence of *x* in *s* (at or after index *i* and " +"before index *j*)" +msgstr "*x* 在 *s* 中首次出现项的索引号(索引号在 *i* 或其后且在 *j* 之前)" + +#: ../../library/stdtypes.rst:889 ../../library/stdtypes.rst:3510 +msgid "\\(8)" +msgstr "\\(8)" + +#: ../../library/stdtypes.rst:893 +msgid "``s.count(x)``" +msgstr "``s.count(x)``" + +#: ../../library/stdtypes.rst:893 +msgid "total number of occurrences of *x* in *s*" +msgstr "*x* 在 *s* 中出现的总次数" + +#: ../../library/stdtypes.rst:897 +msgid "" +"Sequences of the same type also support comparisons. In particular, tuples " +"and lists are compared lexicographically by comparing corresponding " +"elements. This means that to compare equal, every element must compare equal" +" and the two sequences must be of the same type and have the same length. " +"(For full details see :ref:`comparisons` in the language reference.)" +msgstr "" +"相同类型的序列也支持比较。 特别地,tuple 和 list 的比较是通过比较对应元素的字典顺序。 " +"这意味着想要比较结果相等,则每个元素比较结果都必须相等,并且两个序列长度必须相同。 (完整细节请参阅语言参考的 :ref:`comparisons` " +"部分。)" + +#: ../../library/stdtypes.rst:906 +msgid "" +"While the ``in`` and ``not in`` operations are used only for simple " +"containment testing in the general case, some specialised sequences (such as" +" :class:`str`, :class:`bytes` and :class:`bytearray`) also use them for " +"subsequence testing::" +msgstr "" +"虽然 ``in`` 和 ``not in`` 操作在通常情况下仅被用于简单的成员检测,某些专门化序列 (例如 :class:`str`, " +":class:`bytes` 和 :class:`bytearray`) 也使用它们进行子序列检测::" + +#: ../../library/stdtypes.rst:915 +msgid "" +"Values of *n* less than ``0`` are treated as ``0`` (which yields an empty " +"sequence of the same type as *s*). Note that items in the sequence *s* are " +"not copied; they are referenced multiple times. This often haunts new " +"Python programmers; consider::" +msgstr "" +"小于 ``0`` 的 *n* 值会被当作 ``0`` 来处理 (生成一个与 *s* 同类型的空序列)。 请注意序列 *s* " +"中的项并不会被拷贝;它们会被多次引用。 这一点经常会令 Python 编程新手感到困扰;例如::" + +#: ../../library/stdtypes.rst:927 +msgid "" +"What has happened is that ``[[]]`` is a one-element list containing an empty" +" list, so all three elements of ``[[]] * 3`` are references to this single " +"empty list. Modifying any of the elements of ``lists`` modifies this single" +" list. You can create a list of different lists this way::" +msgstr "" +"具体的原因在于 ``[[]]`` 是一个包含了一个空列表的单元素列表,所以 ``[[]] * 3`` 结果中的三个元素都是对这一个空列表的引用。 修改 " +"``lists`` 中的任何一个元素实际上都是对这一个空列表的修改。 你可以用以下方式创建以不同列表为元素的列表::" + +#: ../../library/stdtypes.rst:939 +msgid "" +"Further explanation is available in the FAQ entry :ref:`faq-" +"multidimensional-list`." +msgstr "进一步的解释可以在 FAQ 条目 :ref:`faq-multidimensional-list` 中查看。" + +#: ../../library/stdtypes.rst:943 +msgid "" +"If *i* or *j* is negative, the index is relative to the end of sequence *s*:" +" ``len(s) + i`` or ``len(s) + j`` is substituted. But note that ``-0`` is " +"still ``0``." +msgstr "" +"如果 *i* 或 *j* 为负值,则索引顺序是相对于序列 *s* 的末尾: 索引号会被替换为 ``len(s) + i`` 或 ``len(s) + " +"j``。 但要注意 ``-0`` 仍然为 ``0``。" + +#: ../../library/stdtypes.rst:948 +msgid "" +"The slice of *s* from *i* to *j* is defined as the sequence of items with " +"index *k* such that ``i <= k < j``. If *i* or *j* is greater than " +"``len(s)``, use ``len(s)``. If *i* is omitted or ``None``, use ``0``. If " +"*j* is omitted or ``None``, use ``len(s)``. If *i* is greater than or equal" +" to *j*, the slice is empty." +msgstr "" +"*s* 从 *i* 到 *j* 的切片被定义为所有满足 ``i <= k < j`` 的索引号 *k* 的项组成的序列。 如果 *i* 或 *j* 大于" +" ``len(s)``,则使用 ``len(s)``。 如果 *i* 被省略或为 ``None``,则使用 ``0``。 如果 *j* 被省略或为 " +"``None``,则使用 ``len(s)``。 如果 *i* 大于等于 *j*,则切片为空。" + +#: ../../library/stdtypes.rst:955 +msgid "" +"The slice of *s* from *i* to *j* with step *k* is defined as the sequence of" +" items with index ``x = i + n*k`` such that ``0 <= n < (j-i)/k``. In other" +" words, the indices are ``i``, ``i+k``, ``i+2*k``, ``i+3*k`` and so on, " +"stopping when *j* is reached (but never including *j*). When *k* is " +"positive, *i* and *j* are reduced to ``len(s)`` if they are greater. When " +"*k* is negative, *i* and *j* are reduced to ``len(s) - 1`` if they are " +"greater. If *i* or *j* are omitted or ``None``, they become \"end\" values " +"(which end depends on the sign of *k*). Note, *k* cannot be zero. If *k* is" +" ``None``, it is treated like ``1``." +msgstr "" +"*s* 从 *i* 到 *j* 步长为 *k* 的切片被定义为所有满足 ``0 <= n < (j-i)/k`` 的索引号 ``x = i + " +"n*k`` 的项组成的序列。 换句话说,索引号为 ``i``, ``i+k``, ``i+2*k``, ``i+3*k``,以此类推,当达到 *j* " +"时停止 (但一定不包括 *j*)。 当 *k* 为正值时,*i* 和 *j* 会被减至不大于 ``len(s)``。 当 *k* 为负值时,*i* 和 " +"*j* 会被减至不大于 ``len(s) - 1``。 如果 *i* 或 *j* 被省略或为 ``None``,它们会成为“终止”值 " +"(是哪一端的终止值则取决于 *k* 的符号)。 请注意,*k* 不可为零。 如果 *k* 为 ``None``,则当作 ``1`` 处理。" + +#: ../../library/stdtypes.rst:966 +msgid "" +"Concatenating immutable sequences always results in a new object. This " +"means that building up a sequence by repeated concatenation will have a " +"quadratic runtime cost in the total sequence length. To get a linear " +"runtime cost, you must switch to one of the alternatives below:" +msgstr "" +"拼接不可变序列总是会生成新的对象。 这意味着通过重复拼接来构建序列的运行时开销将会基于序列总长度的乘方。 " +"想要获得线性的运行时开销,你必须改用下列替代方案之一:" + +#: ../../library/stdtypes.rst:971 +msgid "" +"if concatenating :class:`str` objects, you can build a list and use " +":meth:`str.join` at the end or else write to an :class:`io.StringIO` " +"instance and retrieve its value when complete" +msgstr "" +"如果拼接 :class:`str` 对象,你可以构建一个列表并在最后使用 :meth:`str.join` 或是写入一个 " +":class:`io.StringIO` 实例并在结束时获取它的值" + +#: ../../library/stdtypes.rst:975 +msgid "" +"if concatenating :class:`bytes` objects, you can similarly use " +":meth:`bytes.join` or :class:`io.BytesIO`, or you can do in-place " +"concatenation with a :class:`bytearray` object. :class:`bytearray` objects " +"are mutable and have an efficient overallocation mechanism" +msgstr "" +"如果拼接 :class:`bytes` 对象,你可以类似地使用 :meth:`bytes.join` 或 " +":class:`io.BytesIO`,或者你也可以使用 :class:`bytearray` 对象进行原地拼接。 :class:`bytearray`" +" 对象是可变的,并且具有高效的重分配机制" + +#: ../../library/stdtypes.rst:980 +msgid "" +"if concatenating :class:`tuple` objects, extend a :class:`list` instead" +msgstr "如果拼接 :class:`tuple` 对象,请改为扩展 :class:`list` 类" + +#: ../../library/stdtypes.rst:982 +msgid "for other types, investigate the relevant class documentation" +msgstr "对于其它类型,请查看相应的文档" + +#: ../../library/stdtypes.rst:986 +msgid "" +"Some sequence types (such as :class:`range`) only support item sequences " +"that follow specific patterns, and hence don't support sequence " +"concatenation or repetition." +msgstr "某些序列类型 (例如 :class:`range`) 仅支持遵循特定模式的项序列,因此并不支持序列拼接或重复。" + +#: ../../library/stdtypes.rst:991 +msgid "" +"``index`` raises :exc:`ValueError` when *x* is not found in *s*. Not all " +"implementations support passing the additional arguments *i* and *j*. These " +"arguments allow efficient searching of subsections of the sequence. Passing " +"the extra arguments is roughly equivalent to using ``s[i:j].index(x)``, only" +" without copying any data and with the returned index being relative to the " +"start of the sequence rather than the start of the slice." +msgstr "" +"当 *x* 在 *s* 中找不到时 ``index`` 会引发 :exc:`ValueError`。 不是所有实现都支持传入额外参数 *i* 和 " +"*j*。 这两个参数允许高效地搜索序列的子序列。 传入这两个额外参数大致相当于使用 " +"``s[i:j].index(x)``,但是不会复制任何数据,并且返回的索引是相对于序列的开头而非切片的开头。" + +#: ../../library/stdtypes.rst:1002 +msgid "Immutable Sequence Types" +msgstr "不可变序列类型" + +#: ../../library/stdtypes.rst:1009 +msgid "" +"The only operation that immutable sequence types generally implement that is" +" not also implemented by mutable sequence types is support for the " +":func:`hash` built-in." +msgstr "不可变序列类型普遍实现而可变序列类型未实现的唯一操作就是对 :func:`hash` 内置函数的支持。" + +#: ../../library/stdtypes.rst:1013 +msgid "" +"This support allows immutable sequences, such as :class:`tuple` instances, " +"to be used as :class:`dict` keys and stored in :class:`set` and " +":class:`frozenset` instances." +msgstr "" +"这种支持允许不可变类型,例如 :class:`tuple` 实例被用作 :class:`dict` 键,以及存储在 :class:`set` 和 " +":class:`frozenset` 实例中。" + +#: ../../library/stdtypes.rst:1017 +msgid "" +"Attempting to hash an immutable sequence that contains unhashable values " +"will result in :exc:`TypeError`." +msgstr "尝试对包含有不可哈希值的不可变序列进行哈希运算将会导致 :exc:`TypeError`。" + +#: ../../library/stdtypes.rst:1024 +msgid "Mutable Sequence Types" +msgstr "可变序列类型" + +#: ../../library/stdtypes.rst:1031 +msgid "" +"The operations in the following table are defined on mutable sequence types." +" The :class:`collections.abc.MutableSequence` ABC is provided to make it " +"easier to correctly implement these operations on custom sequence types." +msgstr "" +"以下表格中的操作是在可变序列类型上定义的。 :class:`collections.abc.MutableSequence` ABC " +"被提供用来更容易地在自定义序列类型上正确实现这些操作。" + +#: ../../library/stdtypes.rst:1035 +msgid "" +"In the table *s* is an instance of a mutable sequence type, *t* is any " +"iterable object and *x* is an arbitrary object that meets any type and value" +" restrictions imposed by *s* (for example, :class:`bytearray` only accepts " +"integers that meet the value restriction ``0 <= x <= 255``)." +msgstr "" +"表格中的 *s* 是可变序列类型的实例,*t* 是任意可迭代对象,而 *x* 是符合对 *s* 所规定类型与值限制的任何对象 " +"(例如,:class:`bytearray` 仅接受满足 ``0 <= x <= 255`` 值限制的整数)。" + +#: ../../library/stdtypes.rst:1059 +msgid "``s[i] = x``" +msgstr "``s[i] = x``" + +#: ../../library/stdtypes.rst:1059 +msgid "item *i* of *s* is replaced by *x*" +msgstr "将 *s* 的第 *i* 项替换为 *x*" + +#: ../../library/stdtypes.rst:1062 +msgid "``s[i:j] = t``" +msgstr "``s[i:j] = t``" + +#: ../../library/stdtypes.rst:1062 +msgid "" +"slice of *s* from *i* to *j* is replaced by the contents of the iterable *t*" +msgstr "将 *s* 从 *i* 到 *j* 的切片替换为可迭代对象 *t* 的内容" + +#: ../../library/stdtypes.rst:1066 +msgid "``del s[i:j]``" +msgstr "``del s[i:j]``" + +#: ../../library/stdtypes.rst:1066 +msgid "same as ``s[i:j] = []``" +msgstr "等同于 ``s[i:j] = []``" + +#: ../../library/stdtypes.rst:1068 +msgid "``s[i:j:k] = t``" +msgstr "``s[i:j:k] = t``" + +#: ../../library/stdtypes.rst:1068 +msgid "the elements of ``s[i:j:k]`` are replaced by those of *t*" +msgstr "将 ``s[i:j:k]`` 的元素替换为 *t* 的元素" + +#: ../../library/stdtypes.rst:1071 +msgid "``del s[i:j:k]``" +msgstr "``del s[i:j:k]``" + +#: ../../library/stdtypes.rst:1071 +msgid "removes the elements of ``s[i:j:k]`` from the list" +msgstr "从列表中移除 ``s[i:j:k]`` 的元素" + +#: ../../library/stdtypes.rst:1074 +msgid "``s.append(x)``" +msgstr "``s.append(x)``" + +#: ../../library/stdtypes.rst:1074 +msgid "" +"appends *x* to the end of the sequence (same as ``s[len(s):len(s)] = [x]``)" +msgstr "将 *x* 添加到序列的末尾 (等同于 ``s[len(s):len(s)] = [x]``)" + +#: ../../library/stdtypes.rst:1078 +msgid "``s.clear()``" +msgstr "``s.clear()``" + +#: ../../library/stdtypes.rst:1078 +msgid "removes all items from *s* (same as ``del s[:]``)" +msgstr "从 *s* 中移除所有项 (等同于 ``del s[:]``)" + +#: ../../library/stdtypes.rst:1081 +msgid "``s.copy()``" +msgstr "``s.copy()``" + +#: ../../library/stdtypes.rst:1081 +msgid "creates a shallow copy of *s* (same as ``s[:]``)" +msgstr "创建 *s* 的浅拷贝 (等同于 ``s[:]``)" + +#: ../../library/stdtypes.rst:1084 +msgid "``s.extend(t)`` or ``s += t``" +msgstr "``s.extend(t)`` 或 ``s += t``" + +#: ../../library/stdtypes.rst:1084 +msgid "" +"extends *s* with the contents of *t* (for the most part the same as " +"``s[len(s):len(s)] = t``)" +msgstr "用 *t* 的内容扩展 *s* (基本上等同于 ``s[len(s):len(s)] = t``)" + +#: ../../library/stdtypes.rst:1089 +msgid "``s *= n``" +msgstr "``s *= n``" + +#: ../../library/stdtypes.rst:1089 +msgid "updates *s* with its contents repeated *n* times" +msgstr "使用 *s* 的内容重复 *n* 次来对其进行更新" + +#: ../../library/stdtypes.rst:1092 +msgid "``s.insert(i, x)``" +msgstr "``s.insert(i, x)``" + +#: ../../library/stdtypes.rst:1092 +msgid "" +"inserts *x* into *s* at the index given by *i* (same as ``s[i:i] = [x]``)" +msgstr "在由 *i* 给出的索引位置将 *x* 插入 *s* (等同于 ``s[i:i] = [x]``)" + +#: ../../library/stdtypes.rst:1096 +msgid "``s.pop()`` or ``s.pop(i)``" +msgstr "``s.pop()`` 或 ``s.pop(i)``" + +#: ../../library/stdtypes.rst:1096 +msgid "retrieves the item at *i* and also removes it from *s*" +msgstr "提取在 *i* 位置上的项,并将其从 *s* 中移除" + +#: ../../library/stdtypes.rst:1099 +msgid "``s.remove(x)``" +msgstr "``s.remove(x)``" + +#: ../../library/stdtypes.rst:1099 +msgid "remove the first item from *s* where ``s[i]`` is equal to *x*" +msgstr "删除 *s* 中第一个 ``s[i]`` 等于 *x* 的项目。" + +#: ../../library/stdtypes.rst:1102 +msgid "``s.reverse()``" +msgstr "``s.reverse()``" + +#: ../../library/stdtypes.rst:1102 +msgid "reverses the items of *s* in place" +msgstr "就地将列表中的元素逆序。" + +#: ../../library/stdtypes.rst:1110 +msgid "*t* must have the same length as the slice it is replacing." +msgstr "*t* 必须与它所替换的切片具有相同的长度。" + +#: ../../library/stdtypes.rst:1113 +msgid "" +"The optional argument *i* defaults to ``-1``, so that by default the last " +"item is removed and returned." +msgstr "可选参数 *i* 默认为 ``-1``,因此在默认情况下会移除并返回最后一项。" + +#: ../../library/stdtypes.rst:1117 +msgid ":meth:`remove` raises :exc:`ValueError` when *x* is not found in *s*." +msgstr "当在 *s* 中找不到 *x* 时 :meth:`remove` 操作会引发 :exc:`ValueError`。" + +#: ../../library/stdtypes.rst:1120 +msgid "" +"The :meth:`reverse` method modifies the sequence in place for economy of " +"space when reversing a large sequence. To remind users that it operates by " +"side effect, it does not return the reversed sequence." +msgstr "" +"当反转大尺寸序列时 :meth:`reverse` 方法会原地修改该序列以保证空间经济性。 " +"为提醒用户此操作是通过间接影响进行的,它并不会返回反转后的序列。" + +#: ../../library/stdtypes.rst:1125 +msgid "" +":meth:`clear` and :meth:`!copy` are included for consistency with the " +"interfaces of mutable containers that don't support slicing operations (such" +" as :class:`dict` and :class:`set`). :meth:`!copy` is not part of the " +":class:`collections.abc.MutableSequence` ABC, but most concrete mutable " +"sequence classes provide it." +msgstr "" +"包括 :meth:`clear` 和 :meth:`!copy` 是为了与不支持切片操作的可变容器 (例如 :class:`dict` 和 " +":class:`set`) 的接口保持一致。 :meth:`!copy` 不是 " +":class:`collections.abc.MutableSequence` ABC 的一部分,但大多数具体的可变序列类都提供了它。" + +#: ../../library/stdtypes.rst:1131 +msgid ":meth:`clear` and :meth:`!copy` methods." +msgstr ":meth:`clear` 和 :meth:`!copy` 方法。" + +#: ../../library/stdtypes.rst:1135 +msgid "" +"The value *n* is an integer, or an object implementing " +":meth:`~object.__index__`. Zero and negative values of *n* clear the " +"sequence. Items in the sequence are not copied; they are referenced " +"multiple times, as explained for ``s * n`` under :ref:`typesseq-common`." +msgstr "" +"*n* 值为一个整数,或是一个实现了 :meth:`~object.__index__` 的对象。 *n* 值为零或负数将清空序列。 " +"序列中的项不会被拷贝;它们会被多次引用,正如 :ref:`typesseq-common` 中有关 ``s * n`` 的说明。" + +#: ../../library/stdtypes.rst:1144 +msgid "Lists" +msgstr "列表" + +#: ../../library/stdtypes.rst:1148 +msgid "" +"Lists are mutable sequences, typically used to store collections of " +"homogeneous items (where the precise degree of similarity will vary by " +"application)." +msgstr "列表是可变序列,通常用于存放同类项目的集合(其中精确的相似程度将根据应用而变化)。" + +#: ../../library/stdtypes.rst:1154 +msgid "Lists may be constructed in several ways:" +msgstr "可以用多种方式构建列表:" + +#: ../../library/stdtypes.rst:1156 +msgid "Using a pair of square brackets to denote the empty list: ``[]``" +msgstr "使用一对方括号来表示空列表: ``[]``" + +#: ../../library/stdtypes.rst:1157 +msgid "" +"Using square brackets, separating items with commas: ``[a]``, ``[a, b, c]``" +msgstr "使用方括号,其中的项以逗号分隔: ``[a]``, ``[a, b, c]``" + +#: ../../library/stdtypes.rst:1158 +msgid "Using a list comprehension: ``[x for x in iterable]``" +msgstr "使用列表推导式: ``[x for x in iterable]``" + +#: ../../library/stdtypes.rst:1159 +msgid "Using the type constructor: ``list()`` or ``list(iterable)``" +msgstr "使用类型的构造器: ``list()`` 或 ``list(iterable)``" + +#: ../../library/stdtypes.rst:1161 +msgid "" +"The constructor builds a list whose items are the same and in the same order" +" as *iterable*'s items. *iterable* may be either a sequence, a container " +"that supports iteration, or an iterator object. If *iterable* is already a " +"list, a copy is made and returned, similar to ``iterable[:]``. For example, " +"``list('abc')`` returns ``['a', 'b', 'c']`` and ``list( (1, 2, 3) )`` " +"returns ``[1, 2, 3]``. If no argument is given, the constructor creates a " +"new empty list, ``[]``." +msgstr "" +"构造器将构造一个列表,其中的项与 *iterable* 中的项具有相同的的值与顺序。 *iterable* 可以是序列、支持迭代的容器或其它可迭代对象。" +" 如果 *iterable* 已经是一个列表,将创建并返回其副本,类似于 ``iterable[:]``。 例如,``list('abc')`` 返回 " +"``['a', 'b', 'c']`` 而 ``list( (1, 2, 3) )`` 返回 ``[1, 2, 3]``。 " +"如果没有给出参数,构造器将创建一个空列表 ``[]``。" + +#: ../../library/stdtypes.rst:1170 +msgid "" +"Many other operations also produce lists, including the :func:`sorted` " +"built-in." +msgstr "其它许多操作也会产生列表,包括 :func:`sorted` 内置函数。" + +#: ../../library/stdtypes.rst:1173 +msgid "" +"Lists implement all of the :ref:`common ` and :ref:`mutable" +" ` sequence operations. Lists also provide the following " +"additional method:" +msgstr "" +"列表实现了所有 :ref:`一般 ` 和 :ref:`可变 ` 序列的操作。 " +"列表还额外提供了以下方法:" + +#: ../../library/stdtypes.rst:1179 +msgid "" +"This method sorts the list in place, using only ``<`` comparisons between " +"items. Exceptions are not suppressed - if any comparison operations fail, " +"the entire sort operation will fail (and the list will likely be left in a " +"partially modified state)." +msgstr "" +"此方法会对列表进行原地排序,只使用 ``<`` 来进行各项间比较。 异常不会被屏蔽 —— " +"如果有任何比较操作失败,整个排序操作将失败(而列表可能会处于被部分修改的状态)。" + +#: ../../library/stdtypes.rst:1184 +msgid "" +":meth:`sort` accepts two arguments that can only be passed by keyword " +"(:ref:`keyword-only arguments `):" +msgstr "" +":meth:`sort` 接受两个仅限以关键字形式传入的参数 (:ref:`仅限关键字参数 `):" + +#: ../../library/stdtypes.rst:1187 +msgid "" +"*key* specifies a function of one argument that is used to extract a " +"comparison key from each list element (for example, ``key=str.lower``). The " +"key corresponding to each item in the list is calculated once and then used " +"for the entire sorting process. The default value of ``None`` means that " +"list items are sorted directly without calculating a separate key value." +msgstr "" +"*key* 指定带有一个参数的函数,用于从每个列表元素中提取比较键 (例如 ``key=str.lower``)。 " +"对应于列表中每一项的键会被计算一次,然后在整个排序过程中使用。 默认值 ``None`` 表示直接对列表项排序而不计算一个单独的键值。" + +#: ../../library/stdtypes.rst:1194 +msgid "" +"The :func:`functools.cmp_to_key` utility is available to convert a 2.x style" +" *cmp* function to a *key* function." +msgstr "可以使用 :func:`functools.cmp_to_key` 将 2.x 风格的 *cmp* 函数转换为 *key* 函数。" + +#: ../../library/stdtypes.rst:1197 +msgid "" +"*reverse* is a boolean value. If set to ``True``, then the list elements " +"are sorted as if each comparison were reversed." +msgstr "*reverse* 为一个布尔值。 如果设为 ``True``,则每个列表元素将按反向顺序比较进行排序。" + +#: ../../library/stdtypes.rst:1200 +msgid "" +"This method modifies the sequence in place for economy of space when sorting" +" a large sequence. To remind users that it operates by side effect, it does" +" not return the sorted sequence (use :func:`sorted` to explicitly request a " +"new sorted list instance)." +msgstr "" +"当顺序大尺寸序列时此方法会原地修改该序列以保证空间经济性。 为提醒用户此操作是通过间接影响进行的,它并不会返回排序后的序列(请使用 " +":func:`sorted` 显示地请求一个新的已排序列表实例)。" + +#: ../../library/stdtypes.rst:1205 +msgid "" +"The :meth:`sort` method is guaranteed to be stable. A sort is stable if it " +"guarantees not to change the relative order of elements that compare equal " +"--- this is helpful for sorting in multiple passes (for example, sort by " +"department, then by salary grade)." +msgstr "" +":meth:`sort` 方法确保是稳定的。 如果一个排序确保不会改变比较结果相等的元素的相对顺序就称其为稳定的 --- " +"这有利于进行多重排序(例如先按部门、再接薪级排序)。" + +#: ../../library/stdtypes.rst:1210 +msgid "" +"For sorting examples and a brief sorting tutorial, see :ref:`sortinghowto`." +msgstr "有关排序示例和简要排序教程,请参阅 :ref:`sortinghowto` 。" + +#: ../../library/stdtypes.rst:1214 +msgid "" +"While a list is being sorted, the effect of attempting to mutate, or even " +"inspect, the list is undefined. The C implementation of Python makes the " +"list appear empty for the duration, and raises :exc:`ValueError` if it can " +"detect that the list has been mutated during a sort." +msgstr "" +"在一个列表被排序期间,尝试改变甚至进行检测也会造成未定义的影响。 Python 的 C " +"实现会在排序期间将列表显示为空,如果发现列表在排序期间被改变将会引发 :exc:`ValueError`。" + +#: ../../library/stdtypes.rst:1223 +msgid "Tuples" +msgstr "元组" + +#: ../../library/stdtypes.rst:1227 +msgid "" +"Tuples are immutable sequences, typically used to store collections of " +"heterogeneous data (such as the 2-tuples produced by the :func:`enumerate` " +"built-in). Tuples are also used for cases where an immutable sequence of " +"homogeneous data is needed (such as allowing storage in a :class:`set` or " +":class:`dict` instance)." +msgstr "" +"元组是不可变序列,通常用于储存异构数据的多项集(例如由 :func:`enumerate` 内置函数所产生的二元组)。 " +"元组也被用于需要同构数据的不可变序列的情况(例如允许存储到 :class:`set` 或 :class:`dict` 的实例)。" + +#: ../../library/stdtypes.rst:1235 +msgid "Tuples may be constructed in a number of ways:" +msgstr "可以用多种方式构建元组:" + +#: ../../library/stdtypes.rst:1237 +msgid "Using a pair of parentheses to denote the empty tuple: ``()``" +msgstr "使用一对圆括号来表示空元组: ``()``" + +#: ../../library/stdtypes.rst:1238 +msgid "Using a trailing comma for a singleton tuple: ``a,`` or ``(a,)``" +msgstr "使用一个后缀的逗号来表示单元组: ``a,`` 或 ``(a,)``" + +#: ../../library/stdtypes.rst:1239 +msgid "Separating items with commas: ``a, b, c`` or ``(a, b, c)``" +msgstr "使用以逗号分隔的多个项: ``a, b, c`` or ``(a, b, c)``" + +#: ../../library/stdtypes.rst:1240 +msgid "Using the :func:`tuple` built-in: ``tuple()`` or ``tuple(iterable)``" +msgstr "使用内置的 :func:`tuple`: ``tuple()`` 或 ``tuple(iterable)``" + +#: ../../library/stdtypes.rst:1242 +msgid "" +"The constructor builds a tuple whose items are the same and in the same " +"order as *iterable*'s items. *iterable* may be either a sequence, a " +"container that supports iteration, or an iterator object. If *iterable* is " +"already a tuple, it is returned unchanged. For example, ``tuple('abc')`` " +"returns ``('a', 'b', 'c')`` and ``tuple( [1, 2, 3] )`` returns ``(1, 2, " +"3)``. If no argument is given, the constructor creates a new empty tuple, " +"``()``." +msgstr "" +"构造器将构造一个元组,其中的项与 *iterable* 中的项具有相同的值与顺序。 *iterable* 可以是序列、支持迭代的容器或其他可迭代对象。 " +"如果 *iterable* 已经是一个元组,会不加改变地将其返回。 例如,``tuple('abc')`` 返回 ``('a', 'b', 'c')``" +" 而 ``tuple( [1, 2, 3] )`` 返回 ``(1, 2, 3)``。 如果没有给出参数,构造器将创建一个空元组 ``()``。" + +#: ../../library/stdtypes.rst:1250 +msgid "" +"Note that it is actually the comma which makes a tuple, not the parentheses." +" The parentheses are optional, except in the empty tuple case, or when they " +"are needed to avoid syntactic ambiguity. For example, ``f(a, b, c)`` is a " +"function call with three arguments, while ``f((a, b, c))`` is a function " +"call with a 3-tuple as the sole argument." +msgstr "" +"请注意决定生成元组的其实是逗号而不是圆括号。 圆括号只是可选的,生成空元组或需要避免语法歧义的情况除外。 例如,``f(a, b, c)`` " +"是在调用函数时附带三个参数,而 ``f((a, b, c))`` 则是在调用函数时附带一个三元组。" + +#: ../../library/stdtypes.rst:1256 +msgid "" +"Tuples implement all of the :ref:`common ` sequence " +"operations." +msgstr "元组实现了所有 :ref:`一般 ` 序列的操作。" + +#: ../../library/stdtypes.rst:1259 +msgid "" +"For heterogeneous collections of data where access by name is clearer than " +"access by index, :func:`collections.namedtuple` may be a more appropriate " +"choice than a simple tuple object." +msgstr "" +"对于通过名称访问相比通过索引访问更清晰的异构数据多项集,:func:`collections.namedtuple` " +"可能是比简单元组对象更为合适的选择。" + +#: ../../library/stdtypes.rst:1267 +msgid "Ranges" +msgstr "range 对象" + +#: ../../library/stdtypes.rst:1271 +msgid "" +"The :class:`range` type represents an immutable sequence of numbers and is " +"commonly used for looping a specific number of times in :keyword:`for` " +"loops." +msgstr ":class:`range` 类型表示不可变的数字序列,通常用于在 :keyword:`for` 循环中循环指定的次数。" + +#: ../../library/stdtypes.rst:1278 +msgid "" +"The arguments to the range constructor must be integers (either built-in " +":class:`int` or any object that implements the :meth:`~object.__index__` " +"special method). If the *step* argument is omitted, it defaults to ``1``. " +"If the *start* argument is omitted, it defaults to ``0``. If *step* is zero," +" :exc:`ValueError` is raised." +msgstr "" +"range 构造器的参数必须为整数(可以是内置的 :class:`int` 或任何实现了 :meth:`~object.__index__` " +"特殊方法的对象)。 如果省略 *step* 参数,则默认为 ``1``。 如果省略 *start* 参数,则默认为 ``0``。 如果 *step* " +"为零,则会引发 :exc:`ValueError`。" + +#: ../../library/stdtypes.rst:1284 +msgid "" +"For a positive *step*, the contents of a range ``r`` are determined by the " +"formula ``r[i] = start + step*i`` where ``i >= 0`` and ``r[i] < stop``." +msgstr "" +"如果 *step* 为正值,确定 range ``r`` 内容的公式为 ``r[i] = start + step*i`` 其中 ``i >= 0`` " +"且 ``r[i] < stop``。" + +#: ../../library/stdtypes.rst:1288 +msgid "" +"For a negative *step*, the contents of the range are still determined by the" +" formula ``r[i] = start + step*i``, but the constraints are ``i >= 0`` and " +"``r[i] > stop``." +msgstr "" +"如果 *step* 为负值,确定 range 内容的公式仍然为 ``r[i] = start + step*i``,但限制条件改为 ``i >= 0``" +" 且 ``r[i] > stop``." + +#: ../../library/stdtypes.rst:1292 +msgid "" +"A range object will be empty if ``r[0]`` does not meet the value constraint." +" Ranges do support negative indices, but these are interpreted as indexing " +"from the end of the sequence determined by the positive indices." +msgstr "" +"如果 ``r[0]`` 不符合值的限制条件,则该 range 对象为空。 range " +"对象确实支持负索引,但是会将其解读为从正索引所确定的序列的末尾开始索引。" + +#: ../../library/stdtypes.rst:1297 +msgid "" +"Ranges containing absolute values larger than :data:`sys.maxsize` are " +"permitted but some features (such as :func:`len`) may raise " +":exc:`OverflowError`." +msgstr "" +"元素绝对值大于 :data:`sys.maxsize` 的 range 对象是被允许的,但某些特性 (例如 :func:`len`) 可能引发 " +":exc:`OverflowError`。" + +#: ../../library/stdtypes.rst:1301 +msgid "Range examples::" +msgstr "一些 range 对象的例子::" + +#: ../../library/stdtypes.rst:1318 +msgid "" +"Ranges implement all of the :ref:`common ` sequence " +"operations except concatenation and repetition (due to the fact that range " +"objects can only represent sequences that follow a strict pattern and " +"repetition and concatenation will usually violate that pattern)." +msgstr "" +"range 对象实现了 :ref:`一般 ` 序列的所有操作,但拼接和重复除外(这是由于 range " +"对象只能表示符合严格模式的序列,而重复和拼接通常都会违反这样的模式)。" + +#: ../../library/stdtypes.rst:1325 +msgid "" +"The value of the *start* parameter (or ``0`` if the parameter was not " +"supplied)" +msgstr "*start* 形参的值 (如果该形参未提供则为 ``0``)" + +#: ../../library/stdtypes.rst:1330 +msgid "The value of the *stop* parameter" +msgstr "*stop* 形参的值" + +#: ../../library/stdtypes.rst:1334 +msgid "" +"The value of the *step* parameter (or ``1`` if the parameter was not " +"supplied)" +msgstr "*step* 形参的值 (如果该形参未提供则为 ``1``)" + +#: ../../library/stdtypes.rst:1337 +msgid "" +"The advantage of the :class:`range` type over a regular :class:`list` or " +":class:`tuple` is that a :class:`range` object will always take the same " +"(small) amount of memory, no matter the size of the range it represents (as " +"it only stores the ``start``, ``stop`` and ``step`` values, calculating " +"individual items and subranges as needed)." +msgstr "" +":class:`range` 类型相比常规 :class:`list` 或 :class:`tuple` 的优势在于一个 :class:`range` " +"对象总是占用固定数量的(较小)内存,不论其所表示的范围有多大(因为它只保存了 ``start``, ``stop`` 和 ``step`` " +"值,并会根据需要计算具体单项或子范围的值)。" + +#: ../../library/stdtypes.rst:1343 +msgid "" +"Range objects implement the :class:`collections.abc.Sequence` ABC, and " +"provide features such as containment tests, element index lookup, slicing " +"and support for negative indices (see :ref:`typesseq`):" +msgstr "" +"range 对象实现了 :class:`collections.abc.Sequence` " +"ABC,提供如包含检测、元素索引查找、切片等特性,并支持负索引 (参见 :ref:`typesseq`):" + +#: ../../library/stdtypes.rst:1363 +msgid "" +"Testing range objects for equality with ``==`` and ``!=`` compares them as " +"sequences. That is, two range objects are considered equal if they " +"represent the same sequence of values. (Note that two range objects that " +"compare equal might have different :attr:`~range.start`, :attr:`~range.stop`" +" and :attr:`~range.step` attributes, for example ``range(0) == range(2, 1, " +"3)`` or ``range(0, 3, 2) == range(0, 4, 2)``.)" +msgstr "" +"使用 ``==`` 和 ``!=`` 检测 range 对象是否相等是将其作为序列来比较。 也就是说,如果两个 range " +"对象表示相同的值序列就认为它们是相等的。 (请注意比较结果相等的两个 range 对象可能会具有不同的 :attr:`~range.start`, " +":attr:`~range.stop` 和 :attr:`~range.step` 属性,例如 ``range(0) == range(2, 1, " +"3)`` 而 ``range(0, 3, 2) == range(0, 4, 2)``。)" + +#: ../../library/stdtypes.rst:1370 +msgid "" +"Implement the Sequence ABC. Support slicing and negative indices. Test " +":class:`int` objects for membership in constant time instead of iterating " +"through all items." +msgstr "" +"实现 Sequence ABC。 支持切片和负数索引。 使用 :class:`int` 对象在固定时间内进行成员检测,而不是逐一迭代所有项。" + +#: ../../library/stdtypes.rst:1376 +msgid "" +"Define '==' and '!=' to compare range objects based on the sequence of " +"values they define (instead of comparing based on object identity)." +msgstr "定义 '==' 和 '!=' 以根据 range 对象所定义的值序列来进行比较(而不是根据对象的标识)。" + +#: ../../library/stdtypes.rst:1381 +msgid "" +"The :attr:`~range.start`, :attr:`~range.stop` and :attr:`~range.step` " +"attributes." +msgstr ":attr:`~range.start`, :attr:`~range.stop` 和 :attr:`~range.step` 属性。" + +#: ../../library/stdtypes.rst:1387 +msgid "" +"The `linspace recipe `_ shows " +"how to implement a lazy version of range suitable for floating point " +"applications." +msgstr "" +"`linspace recipe `_ " +"演示了如何实现一个延迟求值版本的适合浮点数应用的 range 对象。" + +#: ../../library/stdtypes.rst:1399 +msgid "Text Sequence Type --- :class:`str`" +msgstr "文本序列类型 --- :class:`str`" + +#: ../../library/stdtypes.rst:1401 +msgid "" +"Textual data in Python is handled with :class:`str` objects, or " +":dfn:`strings`. Strings are immutable :ref:`sequences ` of Unicode" +" code points. String literals are written in a variety of ways:" +msgstr "" +"在 Python 中处理文本数据是使用 :class:`str` 对象,也称为 :dfn:`字符串`。 字符串是由 Unicode 码位构成的不可变 " +":ref:`序列 `。 字符串字面值有多种不同的写法:" + +#: ../../library/stdtypes.rst:1406 +msgid "Single quotes: ``'allows embedded \"double\" quotes'``" +msgstr "单引号: ``'允许包含有 \"双\" 引号'``" + +#: ../../library/stdtypes.rst:1407 +msgid "Double quotes: ``\"allows embedded 'single' quotes\"``" +msgstr "双引号: ``\"允许嵌入 '单' 引号\"``" + +#: ../../library/stdtypes.rst:1408 +msgid "Triple quoted: ``'''Three single quotes'''``, ``\"\"\"Three double quotes\"\"\"``" +msgstr "三重引号: ``'''三重单引号'''``, ``\"\"\"三重双引号\"\"\"``" + +#: ../../library/stdtypes.rst:1410 +msgid "" +"Triple quoted strings may span multiple lines - all associated whitespace " +"will be included in the string literal." +msgstr "使用三重引号的字符串可以跨越多行 —— 其中所有的空白字符都将包含在该字符串字面值中。" + +#: ../../library/stdtypes.rst:1413 +msgid "" +"String literals that are part of a single expression and have only " +"whitespace between them will be implicitly converted to a single string " +"literal. That is, ``(\"spam \" \"eggs\") == \"spam eggs\"``." +msgstr "" +"作为单一表达式组成部分,之间只由空格分隔的多个字符串字面值会被隐式地转换为单个字符串字面值。 也就是说,``(\"spam \" \"eggs\") " +"== \"spam eggs\"``。" + +#: ../../library/stdtypes.rst:1417 +msgid "" +"See :ref:`strings` for more about the various forms of string literal, " +"including supported escape sequences, and the ``r`` (\"raw\") prefix that " +"disables most escape sequence processing." +msgstr "" +"请参阅 :ref:`strings` 了解有关不同字符串字面值的更多信息,包括所支持的转义序列,以及使用 ``r`` (\"raw\") " +"前缀来禁用大多数转义序列的处理。" + +#: ../../library/stdtypes.rst:1421 +msgid "" +"Strings may also be created from other objects using the :class:`str` " +"constructor." +msgstr "字符串也可以通过使用 :class:`str` 构造器从其他对象创建。" + +#: ../../library/stdtypes.rst:1424 +msgid "" +"Since there is no separate \"character\" type, indexing a string produces " +"strings of length 1. That is, for a non-empty string *s*, ``s[0] == " +"s[0:1]``." +msgstr "" +"由于不存在单独的“字符”类型,对字符串做索引操作将产生一个长度为 1 的字符串。 也就是说,对于一个非空字符串 *s*, ``s[0] == " +"s[0:1]``。" + +#: ../../library/stdtypes.rst:1430 +msgid "" +"There is also no mutable string type, but :meth:`str.join` or " +":class:`io.StringIO` can be used to efficiently construct strings from " +"multiple fragments." +msgstr "" +"不存在可变的字符串类型,但是 :meth:`str.join` 或 :class:`io.StringIO` " +"可以被被用来根据多个片段高效率地构建字符串。" + +#: ../../library/stdtypes.rst:1434 +msgid "" +"For backwards compatibility with the Python 2 series, the ``u`` prefix is " +"once again permitted on string literals. It has no effect on the meaning of " +"string literals and cannot be combined with the ``r`` prefix." +msgstr "" +"为了与 Python 2 系列的向下兼容,再次允许字符串字面值使用 ``u`` 前缀。 它对字符串字面值的含义没有影响,并且不能与 ``r`` " +"前缀同时出现。" + +#: ../../library/stdtypes.rst:1446 +msgid "" +"Return a :ref:`string ` version of *object*. If *object* is not " +"provided, returns the empty string. Otherwise, the behavior of ``str()`` " +"depends on whether *encoding* or *errors* is given, as follows." +msgstr "" +"返回 *object* 的 :ref:`字符串 ` 版本。 如果未提供 *object* 则返回空字符串。 在其他情况下 " +"``str()`` 的行为取决于 *encoding* 或 *errors* 是否有给出,具体见下。" + +#: ../../library/stdtypes.rst:1450 +msgid "" +"If neither *encoding* nor *errors* is given, ``str(object)`` returns " +":meth:`type(object).__str__(object) `, which is the " +"\"informal\" or nicely printable string representation of *object*. For " +"string objects, this is the string itself. If *object* does not have a " +":meth:`~object.__str__` method, then :func:`str` falls back to returning " +":meth:`repr(object) `." +msgstr "" +"如果 *encoding* 或 *errors* 均未给出,则 ``str(object)`` 返回 " +":meth:`type(object).__str__(object) `,这是 *object* 的 \"非正式\" " +"或格式良好的字符串表示形式。 对于字符串对象,这是该字符串本身。 如果 *object* 没有 :meth:`~object.__str__` 方法,则" +" :func:`str` 将回退为返回 :meth:`repr(object) `。" + +#: ../../library/stdtypes.rst:1462 +msgid "" +"If at least one of *encoding* or *errors* is given, *object* should be a " +":term:`bytes-like object` (e.g. :class:`bytes` or :class:`bytearray`). In " +"this case, if *object* is a :class:`bytes` (or :class:`bytearray`) object, " +"then ``str(bytes, encoding, errors)`` is equivalent to " +":meth:`bytes.decode(encoding, errors) `. Otherwise, the bytes" +" object underlying the buffer object is obtained before calling " +":meth:`bytes.decode`. See :ref:`binaryseq` and :ref:`bufferobjects` for " +"information on buffer objects." +msgstr "" +"如果 *encoding* 或 *errors* 至少给出其中之一,则 *object* 应该是一个 :term:`bytes-like object`" +" (例如 :class:`bytes` 或 :class:`bytearray`)。 在此情况下,如果 *object* 是一个 " +":class:`bytes` (或 :class:`bytearray`) 对象,则 ``str(bytes, encoding, errors)`` " +"等价于 :meth:`bytes.decode(encoding, errors) `。 否则的话,会在调用 " +":meth:`bytes.decode` 之前获取缓冲区对象下层的 bytes 对象。 请参阅 :ref:`binaryseq` 与 " +":ref:`bufferobjects` 了解有关缓冲区对象的信息。" + +#: ../../library/stdtypes.rst:1471 +msgid "" +"Passing a :class:`bytes` object to :func:`str` without the *encoding* or " +"*errors* arguments falls under the first case of returning the informal " +"string representation (see also the :option:`-b` command-line option to " +"Python). For example::" +msgstr "" +"将一个 :class:`bytes` 对象传入 :func:`str` 而不给出 *encoding* 或 *errors* 参数的操作属于第一种情况," +" 将返回非正式的字符串表示(另请参阅 Python 的 :option:`-b` 命令行选项)。 例如::" + +#: ../../library/stdtypes.rst:1479 +msgid "" +"For more information on the ``str`` class and its methods, see " +":ref:`textseq` and the :ref:`string-methods` section below. To output " +"formatted strings, see the :ref:`f-strings` and :ref:`formatstrings` " +"sections. In addition, see the :ref:`stringservices` section." +msgstr "" +"有关 ``str`` 类及其方法的更多信息,请参阅下面的 :ref:`textseq` 和 :ref:`string-methods` 小节。 " +"要输出格式化字符串,请参阅 :ref:`f-strings` 和 :ref:`formatstrings` 小节。 此外还可以参阅 " +":ref:`stringservices` 小节。" + +#: ../../library/stdtypes.rst:1491 +msgid "String Methods" +msgstr "字符串的方法" + +#: ../../library/stdtypes.rst:1496 +msgid "" +"Strings implement all of the :ref:`common ` sequence " +"operations, along with the additional methods described below." +msgstr "字符串实现了所有 :ref:`一般 ` 序列的操作,还额外提供了以下列出的一些附加方法。" + +#: ../../library/stdtypes.rst:1499 +msgid "" +"Strings also support two styles of string formatting, one providing a large " +"degree of flexibility and customization (see :meth:`str.format`, " +":ref:`formatstrings` and :ref:`string-formatting`) and the other based on C " +"``printf`` style formatting that handles a narrower range of types and is " +"slightly harder to use correctly, but is often faster for the cases it can " +"handle (:ref:`old-string-formatting`)." +msgstr "" +"字符串还支持两种字符串格式化样式,一种提供了很大程度的灵活性和可定制性 (参阅 :meth:`str.format`, " +":ref:`formatstrings` 和 :ref:`string-formatting`) 而另一种是基于 C ``printf`` " +"样式的格式化,它可处理的类型范围较窄,并且更难以正确使用,但对于它可处理的情况往往会更为快速 (:ref:`old-string-" +"formatting`)。" + +#: ../../library/stdtypes.rst:1506 +msgid "" +"The :ref:`textservices` section of the standard library covers a number of " +"other modules that provide various text related utilities (including regular" +" expression support in the :mod:`re` module)." +msgstr "" +"标准库的 :ref:`textservices` 部分涵盖了许多其他模块,提供各种文本相关工具(例如包含于 :mod:`re` " +"模块中的正则表达式支持)。" + +#: ../../library/stdtypes.rst:1512 +msgid "" +"Return a copy of the string with its first character capitalized and the " +"rest lowercased." +msgstr "返回原字符串的副本,其首个字符大写,其余为小写。" + +#: ../../library/stdtypes.rst:1515 +msgid "" +"The first character is now put into titlecase rather than uppercase. This " +"means that characters like digraphs will only have their first letter " +"capitalized, instead of the full character." +msgstr "" +"第一个字符现在被放入了 titlecase 而不是 uppercase。 这意味着复合字母类字符将只有首个字母改为大写,而再不是全部字符大写。" + +#: ../../library/stdtypes.rst:1522 +msgid "" +"Return a casefolded copy of the string. Casefolded strings may be used for " +"caseless matching." +msgstr "返回原字符串消除大小写的副本。 消除大小写的字符串可用于忽略大小写的匹配。" + +#: ../../library/stdtypes.rst:1525 +msgid "" +"Casefolding is similar to lowercasing but more aggressive because it is " +"intended to remove all case distinctions in a string. For example, the " +"German lowercase letter ``'ß'`` is equivalent to ``\"ss\"``. Since it is " +"already lowercase, :meth:`lower` would do nothing to ``'ß'``; " +":meth:`casefold` converts it to ``\"ss\"``." +msgstr "" +"消除大小写类似于转为小写,但是更加彻底一些,因为它会移除字符串中的所有大小写变化形式。 例如,德语小写字母 ``'ß'`` 相当于 " +"``\"ss\"``。 由于它已经是小写了,:meth:`lower` 不会对 ``'ß'`` 做任何改变;而 :meth:`casefold` " +"则会将其转换为 ``\"ss\"``。" + +#: ../../library/stdtypes.rst:1531 +msgid "" +"The casefolding algorithm is described in section 3.13 of the Unicode " +"Standard." +msgstr "消除大小写算法的描述请参见 Unicode 标准的 3.13 节。" + +#: ../../library/stdtypes.rst:1539 +msgid "" +"Return centered in a string of length *width*. Padding is done using the " +"specified *fillchar* (default is an ASCII space). The original string is " +"returned if *width* is less than or equal to ``len(s)``." +msgstr "" +"返回长度为 *width* 的字符串,原字符串在其正中。 使用指定的 *fillchar* 填充两边的空位(默认使用 ASCII 空格符)。 如果 " +"*width* 小于等于 ``len(s)`` 则返回原字符串的副本。" + +#: ../../library/stdtypes.rst:1547 +msgid "" +"Return the number of non-overlapping occurrences of substring *sub* in the " +"range [*start*, *end*]. Optional arguments *start* and *end* are " +"interpreted as in slice notation." +msgstr "" +"返回子字符串 *sub* 在 [*start*, *end*] 范围内非重叠出现的次数。 可选参数 *start* 与 *end* " +"会被解读为切片表示法。" + +#: ../../library/stdtypes.rst:1554 +msgid "" +"Return an encoded version of the string as a bytes object. Default encoding " +"is ``'utf-8'``. *errors* may be given to set a different error handling " +"scheme. The default for *errors* is ``'strict'``, meaning that encoding " +"errors raise a :exc:`UnicodeError`. Other possible values are ``'ignore'``, " +"``'replace'``, ``'xmlcharrefreplace'``, ``'backslashreplace'`` and any other" +" name registered via :func:`codecs.register_error`, see section :ref:`error-" +"handlers`. For a list of possible encodings, see section :ref:`standard-" +"encodings`." +msgstr "" +"返回原字符串编码为字节串对象的版本。 默认编码为 ``'utf-8'``。 可以给出 *errors* 来设置不同的错误处理方案。 *errors* " +"的默认值为 ``'strict'``,表示编码错误会引发 :exc:`UnicodeError`。 其他可用的值为 ``'ignore'``, " +"``'replace'``, ``'xmlcharrefreplace'``, ``'backslashreplace'`` 以及任何其他通过 " +":func:`codecs.register_error` 注册的值,请参阅 :ref:`error-handlers` 小节。 " +"要查看可用的编码列表,请参阅 :ref:`standard-encodings` 小节。" + +#: ../../library/stdtypes.rst:1563 +msgid "" +"By default, the *errors* argument is not checked for best performances, but " +"only used at the first encoding error. Enable the :ref:`Python Development " +"Mode `, or use a debug build to check *errors*." +msgstr "" +"*errors* 参数默认不会被检查,以获得最佳性能,而只在第一次编码错误时使用。启用 :ref:`Python 开发模式 ` " +",或者使用调试构建来检查 *errors* 。" + +#: ../../library/stdtypes.rst:1567 +msgid "Support for keyword arguments added." +msgstr "加入了对关键字参数的支持。" + +#: ../../library/stdtypes.rst:1570 ../../library/stdtypes.rst:2699 +msgid "The *errors* is now checked in development mode and in debug mode." +msgstr "*errors* 现在在开发模式和调试模式下都会被检查。" + +#: ../../library/stdtypes.rst:1576 +msgid "" +"Return ``True`` if the string ends with the specified *suffix*, otherwise " +"return ``False``. *suffix* can also be a tuple of suffixes to look for. " +"With optional *start*, test beginning at that position. With optional " +"*end*, stop comparing at that position." +msgstr "" +"如果字符串以指定的 *suffix* 结束返回 ``True``,否则返回 ``False``。 *suffix* " +"也可以为由多个供查找的后缀构成的元组。 如果有可选项 *start*,将从所指定位置开始检查。 如果有可选项 *end*,将在所指定位置停止比较。" + +#: ../../library/stdtypes.rst:1584 +msgid "" +"Return a copy of the string where all tab characters are replaced by one or " +"more spaces, depending on the current column and the given tab size. Tab " +"positions occur every *tabsize* characters (default is 8, giving tab " +"positions at columns 0, 8, 16 and so on). To expand the string, the current" +" column is set to zero and the string is examined character by character. " +"If the character is a tab (``\\t``), one or more space characters are " +"inserted in the result until the current column is equal to the next tab " +"position. (The tab character itself is not copied.) If the character is a " +"newline (``\\n``) or return (``\\r``), it is copied and the current column " +"is reset to zero. Any other character is copied unchanged and the current " +"column is incremented by one regardless of how the character is represented " +"when printed." +msgstr "" +"返回字符串的副本,其中所有的制表符会由一个或多个空格替换,具体取决于当前列位置和给定的制表符宽度。 每 *tabsize* 个字符设为一个制表位(默认值" +" 8 时设定的制表位在列 0, 8, 16 依次类推)。 要展开字符串,当前列将被设为零并逐一检查字符串中的每个字符。 如果字符为制表符 " +"(``\\t``),则会在结果中插入一个或多个空格符,直到当前列等于下一个制表位。 (制表符本身不会被复制。) 如果字符为换行符 (``\\n``) " +"或回车符 (``\\r``),它会被复制并将当前列重设为零。 任何其他字符会被不加修改地复制并将当前列加一,不论该字符在被打印时会如何显示。" + +#: ../../library/stdtypes.rst:1605 +msgid "" +"Return the lowest index in the string where substring *sub* is found within " +"the slice ``s[start:end]``. Optional arguments *start* and *end* are " +"interpreted as in slice notation. Return ``-1`` if *sub* is not found." +msgstr "" +"返回子字符串 *sub* 在 ``s[start:end]`` 切片内被找到的最小索引。 可选参数 *start* 与 *end* " +"会被解读为切片表示法。 如果 *sub* 未被找到则返回 ``-1``。" + +#: ../../library/stdtypes.rst:1611 +msgid "" +"The :meth:`~str.find` method should be used only if you need to know the " +"position of *sub*. To check if *sub* is a substring or not, use the " +":keyword:`in` operator::" +msgstr "" +":meth:`~str.find` 方法应该只在你需要知道 *sub* 所在位置时使用。 要检查 *sub* 是否为子字符串,请使用 " +":keyword:`in` 操作符::" + +#: ../../library/stdtypes.rst:1621 +msgid "" +"Perform a string formatting operation. The string on which this method is " +"called can contain literal text or replacement fields delimited by braces " +"``{}``. Each replacement field contains either the numeric index of a " +"positional argument, or the name of a keyword argument. Returns a copy of " +"the string where each replacement field is replaced with the string value of" +" the corresponding argument." +msgstr "" +"执行字符串格式化操作。 调用此方法的字符串可以包含字符串字面值或者以花括号 ``{}`` 括起来的替换域。 " +"每个替换域可以包含一个位置参数的数字索引,或者一个关键字参数的名称。 返回的字符串副本中每个替换域都会被替换为对应参数的字符串值。" + +#: ../../library/stdtypes.rst:1631 +msgid "" +"See :ref:`formatstrings` for a description of the various formatting options" +" that can be specified in format strings." +msgstr "请参阅 :ref:`formatstrings` 了解有关可以在格式字符串中指定的各种格式选项的说明。" + +#: ../../library/stdtypes.rst:1635 +msgid "" +"When formatting a number (:class:`int`, :class:`float`, :class:`complex`, " +":class:`decimal.Decimal` and subclasses) with the ``n`` type (ex: " +"``'{:n}'.format(1234)``), the function temporarily sets the ``LC_CTYPE`` " +"locale to the ``LC_NUMERIC`` locale to decode ``decimal_point`` and " +"``thousands_sep`` fields of :c:func:`localeconv` if they are non-ASCII or " +"longer than 1 byte, and the ``LC_NUMERIC`` locale is different than the " +"``LC_CTYPE`` locale. This temporary change affects other threads." +msgstr "" +"当使用 ``n`` 类型 (例如: ``'{:n}'.format(1234)``) 来格式化数字 (:class:`int`, " +":class:`float`, :class:`complex`, :class:`decimal.Decimal` 及其子类) " +"的时候,该函数会临时性地将 ``LC_CTYPE`` 区域设置为 ``LC_NUMERIC`` 区域以解码 :c:func:`localeconv` " +"的 ``decimal_point`` 和 ``thousands_sep`` 字段,如果它们是非 ASCII 字符或长度超过 1 字节的话,并且 " +"``LC_NUMERIC`` 区域会与 ``LC_CTYPE`` 区域不一致。 这个临时更改会影响其他线程。" + +#: ../../library/stdtypes.rst:1644 +msgid "" +"When formatting a number with the ``n`` type, the function sets temporarily " +"the ``LC_CTYPE`` locale to the ``LC_NUMERIC`` locale in some cases." +msgstr "" +"当使用 ``n`` 类型格式化数字时,该函数在某些情况下会临时性地将 ``LC_CTYPE`` 区域设置为 ``LC_NUMERIC`` 区域。" + +#: ../../library/stdtypes.rst:1652 +msgid "" +"Similar to ``str.format(**mapping)``, except that ``mapping`` is used " +"directly and not copied to a :class:`dict`. This is useful if for example " +"``mapping`` is a dict subclass:" +msgstr "" +"类似于 ``str.format(**mapping)``,不同之处在于 ``mapping`` 会被直接使用而不是复制到一个 " +":class:`dict`。 适宜使用此方法的一个例子是当 ``mapping`` 为 dict 的子类的情况:" + +#: ../../library/stdtypes.rst:1668 +msgid "" +"Like :meth:`~str.find`, but raise :exc:`ValueError` when the substring is " +"not found." +msgstr "类似于 :meth:`~str.find`,但在找不到子字符串时会引发 :exc:`ValueError`。" + +#: ../../library/stdtypes.rst:1674 +msgid "" +"Return ``True`` if all characters in the string are alphanumeric and there " +"is at least one character, ``False`` otherwise. A character ``c`` is " +"alphanumeric if one of the following returns ``True``: ``c.isalpha()``, " +"``c.isdecimal()``, ``c.isdigit()``, or ``c.isnumeric()``." +msgstr "" +"如果字符串中的所有字符都是字母或数字且至少有一个字符,则返回 ``True`` , 否则返回 ``False`` 。 如果 " +"``c.isalpha()`` , ``c.isdecimal()`` , ``c.isdigit()`` ,或 ``c.isnumeric()`` " +"之中有一个返回 ``True`` ,则字符 ``c`` 是字母或数字。" + +#: ../../library/stdtypes.rst:1682 +msgid "" +"Return ``True`` if all characters in the string are alphabetic and there is " +"at least one character, ``False`` otherwise. Alphabetic characters are " +"those characters defined in the Unicode character database as \"Letter\", " +"i.e., those with general category property being one of \"Lm\", \"Lt\", " +"\"Lu\", \"Ll\", or \"Lo\". Note that this is different from the " +"\"Alphabetic\" property defined in the Unicode Standard." +msgstr "" +"如果字符串中的所有字符都是字母,并且至少有一个字符,返回 ``True`` ,否则返回 ``False`` 。字母字符是指那些在 Unicode " +"字符数据库中定义为 \"Letter\" 的字符,即那些具有 \"Lm\"、\"Lt\"、\"Lu\"、\"Ll\" 或 \"Lo\" " +"之一的通用类别属性的字符。 注意,这与 Unicode 标准中定义的\"字母\"属性不同。" + +#: ../../library/stdtypes.rst:1691 +msgid "" +"Return ``True`` if the string is empty or all characters in the string are " +"ASCII, ``False`` otherwise. ASCII characters have code points in the range " +"U+0000-U+007F." +msgstr "" +"如果字符串为空或字符串中的所有字符都是 ASCII ,返回 ``True`` ,否则返回 ``False`` 。ASCII 字符的码点范围是 " +"U+0000-U+007F 。" + +#: ../../library/stdtypes.rst:1700 +msgid "" +"Return ``True`` if all characters in the string are decimal characters and " +"there is at least one character, ``False`` otherwise. Decimal characters are" +" those that can be used to form numbers in base 10, e.g. U+0660, ARABIC-" +"INDIC DIGIT ZERO. Formally a decimal character is a character in the " +"Unicode General Category \"Nd\"." +msgstr "" +"如果字符串中的所有字符都是十进制字符且该字符串至少有一个字符,则返回 ``True`` , 否则返回 ``False`` " +"。十进制字符指那些可以用来组成10进制数字的字符,例如 U+0660 ,即阿拉伯字母数字0 。 严格地讲,十进制字符是 Unicode 通用类别 " +"\"Nd\" 中的一个字符。" + +#: ../../library/stdtypes.rst:1710 +msgid "" +"Return ``True`` if all characters in the string are digits and there is at " +"least one character, ``False`` otherwise. Digits include decimal characters" +" and digits that need special handling, such as the compatibility " +"superscript digits. This covers digits which cannot be used to form numbers " +"in base 10, like the Kharosthi numbers. Formally, a digit is a character " +"that has the property value Numeric_Type=Digit or Numeric_Type=Decimal." +msgstr "" +"如果字符串中的所有字符都是数字,并且至少有一个字符,返回 ``True`` ,否则返回 ``False`` 。 " +"数字包括十进制字符和需要特殊处理的数字,如兼容性上标数字。这包括了不能用来组成 10 进制数的数字,如 Kharosthi 数。 " +"严格地讲,数字是指属性值为 Numeric_Type=Digit 或 Numeric_Type=Decimal 的字符。" + +#: ../../library/stdtypes.rst:1720 +msgid "" +"Return ``True`` if the string is a valid identifier according to the " +"language definition, section :ref:`identifiers`." +msgstr "如果字符串是有效的标识符,返回 ``True`` ,依据语言定义, :ref:`identifiers` 节。" + +#: ../../library/stdtypes.rst:1723 +msgid "" +"Call :func:`keyword.iskeyword` to test whether string ``s`` is a reserved " +"identifier, such as :keyword:`def` and :keyword:`class`." +msgstr "" +"调用 :func:`keyword.iskeyword` 来检测字符串 ``s`` 是否为保留标识符,例如 :keyword:`def` 和 " +":keyword:`class`。" + +#: ../../library/stdtypes.rst:1726 +msgid "Example: ::" +msgstr "示例: ::" + +#: ../../library/stdtypes.rst:1739 +msgid "" +"Return ``True`` if all cased characters [4]_ in the string are lowercase and" +" there is at least one cased character, ``False`` otherwise." +msgstr "如果字符串中至少有一个区分大小写的字符 [4]_ 且此类字符均为小写则返回 ``True`` ,否则返回 ``False`` 。" + +#: ../../library/stdtypes.rst:1745 +msgid "" +"Return ``True`` if all characters in the string are numeric characters, and " +"there is at least one character, ``False`` otherwise. Numeric characters " +"include digit characters, and all characters that have the Unicode numeric " +"value property, e.g. U+2155, VULGAR FRACTION ONE FIFTH. Formally, numeric " +"characters are those with the property value Numeric_Type=Digit, " +"Numeric_Type=Decimal or Numeric_Type=Numeric." +msgstr "" +"如果字符串中至少有一个字符且所有字符均为数值字符则返回 ``True`` ,否则返回 ``False`` 。 数值字符包括数字字符,以及所有在 " +"Unicode 中设置了数值特性属性的字符,例如 U+2155, VULGAR FRACTION ONE FIFTH。 " +"正式的定义为:数值字符就是具有特征属性值 Numeric_Type=Digit, Numeric_Type=Decimal 或 " +"Numeric_Type=Numeric 的字符。" + +#: ../../library/stdtypes.rst:1755 +msgid "" +"Return ``True`` if all characters in the string are printable or the string " +"is empty, ``False`` otherwise. Nonprintable characters are those characters" +" defined in the Unicode character database as \"Other\" or \"Separator\", " +"excepting the ASCII space (0x20) which is considered printable. (Note that " +"printable characters in this context are those which should not be escaped " +"when :func:`repr` is invoked on a string. It has no bearing on the handling" +" of strings written to :data:`sys.stdout` or :data:`sys.stderr`.)" +msgstr "" +"如果字符串中所有字符均为可打印字符或字符串为空则返回 ``True`` ,否则返回 ``False`` 。 不可打印字符是在 Unicode " +"字符数据库中被定义为 \"Other\" 或 \"Separator\" 的字符,例外情况是 ASCII 空格字符 (0x20) 被视作可打印字符。 " +"(请注意在此语境下可打印字符是指当对一个字符串唤起 :func:`repr` 时不必被转义的字符。 它们与字符串写入 " +":data:`sys.stdout` 或 :data:`sys.stderr` 时所需的处理无关。)" + +#: ../../library/stdtypes.rst:1766 +msgid "" +"Return ``True`` if there are only whitespace characters in the string and " +"there is at least one character, ``False`` otherwise." +msgstr "如果字符串中只有空白字符且至少有一个字符则返回 ``True`` ,否则返回 ``False`` 。" + +#: ../../library/stdtypes.rst:1769 +msgid "" +"A character is *whitespace* if in the Unicode character database (see " +":mod:`unicodedata`), either its general category is ``Zs`` (\"Separator, " +"space\"), or its bidirectional class is one of ``WS``, ``B``, or ``S``." +msgstr "" +"*空白* 字符是指在 Unicode 字符数据库 (参见 :mod:`unicodedata`) 中主要类别为 ``Zs`` (\"Separator," +" space\") 或所属双向类为 ``WS``, ``B`` 或 ``S`` 的字符。" + +#: ../../library/stdtypes.rst:1777 +msgid "" +"Return ``True`` if the string is a titlecased string and there is at least " +"one character, for example uppercase characters may only follow uncased " +"characters and lowercase characters only cased ones. Return ``False`` " +"otherwise." +msgstr "" +"如果字符串中至少有一个字符且为标题字符串则返回 ``True`` ,例如大写字符之后只能带非大写字符而小写字符必须有大写字符打头。 否则返回 " +"``False`` 。" + +#: ../../library/stdtypes.rst:1784 +msgid "" +"Return ``True`` if all cased characters [4]_ in the string are uppercase and" +" there is at least one cased character, ``False`` otherwise." +msgstr "如果字符串中至少有一个区分大小写的字符 [4]_ 且此类字符均为大写则返回 ``True`` ,否则返回 ``False`` 。" + +#: ../../library/stdtypes.rst:1800 +msgid "" +"Return a string which is the concatenation of the strings in *iterable*. A " +":exc:`TypeError` will be raised if there are any non-string values in " +"*iterable*, including :class:`bytes` objects. The separator between " +"elements is the string providing this method." +msgstr "" +"返回一个由 *iterable* 中的字符串拼接而成的字符串。 如果 *iterable* 中存在任何非字符串值包括 :class:`bytes` " +"对象则会引发 :exc:`TypeError`。 调用该方法的字符串将作为元素之间的分隔。" + +#: ../../library/stdtypes.rst:1808 +msgid "" +"Return the string left justified in a string of length *width*. Padding is " +"done using the specified *fillchar* (default is an ASCII space). The " +"original string is returned if *width* is less than or equal to ``len(s)``." +msgstr "" +"返回长度为 *width* 的字符串,原字符串在其中靠左对齐。 使用指定的 *fillchar* 填充空位 (默认使用 ASCII 空格符)。 如果 " +"*width* 小于等于 ``len(s)`` 则返回原字符串的副本。" + +#: ../../library/stdtypes.rst:1815 +msgid "" +"Return a copy of the string with all the cased characters [4]_ converted to " +"lowercase." +msgstr "返回原字符串的副本,其所有区分大小写的字符 [4]_ 均转换为小写。" + +#: ../../library/stdtypes.rst:1818 +msgid "" +"The lowercasing algorithm used is described in section 3.13 of the Unicode " +"Standard." +msgstr "所用转换小写算法的描述请参见 Unicode 标准的 3.13 节。" + +#: ../../library/stdtypes.rst:1824 +msgid "" +"Return a copy of the string with leading characters removed. The *chars* " +"argument is a string specifying the set of characters to be removed. If " +"omitted or ``None``, the *chars* argument defaults to removing whitespace. " +"The *chars* argument is not a prefix; rather, all combinations of its values" +" are stripped::" +msgstr "" +"返回原字符串的副本,移除其中的前导字符。 *chars* 参数为指定要移除字符的字符串。 如果省略或为 ``None``,则 *chars* " +"参数默认移除空白符。 实际上 *chars* 参数并非指定单个前缀;而是会移除参数值的所有组合::" + +#: ../../library/stdtypes.rst:1834 +msgid "" +"See :meth:`str.removeprefix` for a method that will remove a single prefix " +"string rather than all of a set of characters. For example::" +msgstr "参见 :meth:`str.removeprefix` ,该方法将删除单个前缀字符串,而不是全部给定集合中的字符。 例如:" + +#: ../../library/stdtypes.rst:1845 +msgid "" +"This static method returns a translation table usable for " +":meth:`str.translate`." +msgstr "此静态方法返回一个可供 :meth:`str.translate` 使用的转换对照表。" + +#: ../../library/stdtypes.rst:1847 +msgid "" +"If there is only one argument, it must be a dictionary mapping Unicode " +"ordinals (integers) or characters (strings of length 1) to Unicode ordinals," +" strings (of arbitrary lengths) or ``None``. Character keys will then be " +"converted to ordinals." +msgstr "" +"如果只有一个参数,则它必须是一个将 Unicode 码位序号(整数)或字符(长度为 1 的字符串)映射到 Unicode " +"码位序号、(任意长度的)字符串或 ``None`` 的字典。 字符键将会被转换为码位序号。" + +#: ../../library/stdtypes.rst:1852 +msgid "" +"If there are two arguments, they must be strings of equal length, and in the" +" resulting dictionary, each character in x will be mapped to the character " +"at the same position in y. If there is a third argument, it must be a " +"string, whose characters will be mapped to ``None`` in the result." +msgstr "" +"如果有两个参数,则它们必须是两个长度相等的字符串,并且在结果字典中,x 中每个字符将被映射到 y 中相同位置的字符。 " +"如果有第三个参数,它必须是一个字符串,其中的字符将在结果中被映射到 ``None``。" + +#: ../../library/stdtypes.rst:1860 +msgid "" +"Split the string at the first occurrence of *sep*, and return a 3-tuple " +"containing the part before the separator, the separator itself, and the part" +" after the separator. If the separator is not found, return a 3-tuple " +"containing the string itself, followed by two empty strings." +msgstr "" +"在 *sep* 首次出现的位置拆分字符串,返回一个 3 元组,其中包含分隔符之前的部分、分隔符本身,以及分隔符之后的部分。 如果分隔符未找到,则返回的 " +"3 元组中包含字符本身以及两个空字符串。" + +#: ../../library/stdtypes.rst:1868 +msgid "" +"If the string starts with the *prefix* string, return " +"``string[len(prefix):]``. Otherwise, return a copy of the original string::" +msgstr "如果字符串以 *prefix* 字符串开头,返回 ``string[len(prefix):]``。 否则,返回原始字符串的副本:" + +#: ../../library/stdtypes.rst:1882 +msgid "" +"If the string ends with the *suffix* string and that *suffix* is not empty, " +"return ``string[:-len(suffix)]``. Otherwise, return a copy of the original " +"string::" +msgstr "" +"如果字符串以 *suffix* 字符串结尾,并且 *suffix* 非空,返回 ``string[:-len(suffix)]``。 " +"否则,返回原始字符串的副本::" + +#: ../../library/stdtypes.rst:1896 +msgid "" +"Return a copy of the string with all occurrences of substring *old* replaced" +" by *new*. If the optional argument *count* is given, only the first " +"*count* occurrences are replaced." +msgstr "" +"用 *new* 替换子字符串 *old* 的所有出现次数,并返回该字符串的副本。如果给定了可选参数 *count*,则只替换前 *count* " +"次出现的字符串。" + +#: ../../library/stdtypes.rst:1903 +msgid "" +"Return the highest index in the string where substring *sub* is found, such " +"that *sub* is contained within ``s[start:end]``. Optional arguments *start*" +" and *end* are interpreted as in slice notation. Return ``-1`` on failure." +msgstr "" +"返回子字符串 *sub* 在字符串内被找到的最大(最右)索引,这样 *sub* 将包含在 ``s[start:end]`` 当中。 可选参数 " +"*start* 与 *end* 会被解读为切片表示法。 如果未找到则返回 ``-1``。" + +#: ../../library/stdtypes.rst:1910 +msgid "" +"Like :meth:`rfind` but raises :exc:`ValueError` when the substring *sub* is " +"not found." +msgstr "类似于 :meth:`rfind`,但在子字符串 *sub* 未找到时会引发 :exc:`ValueError`。" + +#: ../../library/stdtypes.rst:1916 +msgid "" +"Return the string right justified in a string of length *width*. Padding is " +"done using the specified *fillchar* (default is an ASCII space). The " +"original string is returned if *width* is less than or equal to ``len(s)``." +msgstr "" +"返回长度为 *width* 的字符串,原字符串在其中靠右对齐。 使用指定的 *fillchar* 填充空位 (默认使用 ASCII 空格符)。 如果 " +"*width* 小于等于 ``len(s)`` 则返回原字符串的副本。" + +#: ../../library/stdtypes.rst:1923 +msgid "" +"Split the string at the last occurrence of *sep*, and return a 3-tuple " +"containing the part before the separator, the separator itself, and the part" +" after the separator. If the separator is not found, return a 3-tuple " +"containing two empty strings, followed by the string itself." +msgstr "" +"在 *sep* 最后一次出现的位置拆分字符串,返回一个 3 元组,其中包含分隔符之前的部分、分隔符本身,以及分隔符之后的部分。 " +"如果分隔符未找到,则返回的 3 元组中包含两个空字符串以及字符串本身。" + +#: ../../library/stdtypes.rst:1931 +msgid "" +"Return a list of the words in the string, using *sep* as the delimiter " +"string. If *maxsplit* is given, at most *maxsplit* splits are done, the " +"*rightmost* ones. If *sep* is not specified or ``None``, any whitespace " +"string is a separator. Except for splitting from the right, :meth:`rsplit` " +"behaves like :meth:`split` which is described in detail below." +msgstr "" +"返回一个由字符串内单词组成的列表,使用 *sep* 作为分隔字符串。 如果给出了 *maxsplit*,则最多进行 *maxsplit* 次拆分,从 " +"*最右边* 开始。 如果 *sep* 未指定或为 ``None``,任何空白字符串都会被作为分隔符。 除了从右边开始拆分,:meth:`rsplit` " +"的其他行为都类似于下文所述的 :meth:`split`。" + +#: ../../library/stdtypes.rst:1940 +msgid "" +"Return a copy of the string with trailing characters removed. The *chars* " +"argument is a string specifying the set of characters to be removed. If " +"omitted or ``None``, the *chars* argument defaults to removing whitespace. " +"The *chars* argument is not a suffix; rather, all combinations of its values" +" are stripped::" +msgstr "" +"返回原字符串的副本,移除其中的末尾字符。 *chars* 参数为指定要移除字符的字符串。 如果省略或为 ``None``,则 *chars* " +"参数默认移除空白符。 实际上 *chars* 参数并非指定单个后缀;而是会移除参数值的所有组合::" + +#: ../../library/stdtypes.rst:1950 +msgid "" +"See :meth:`str.removesuffix` for a method that will remove a single suffix " +"string rather than all of a set of characters. For example::" +msgstr "要删除单个后缀字符串,而不是全部给定集合中的字符,请参见 :meth:`str.removesuffix` 方法。 例如:" + +#: ../../library/stdtypes.rst:1960 +msgid "" +"Return a list of the words in the string, using *sep* as the delimiter " +"string. If *maxsplit* is given, at most *maxsplit* splits are done (thus, " +"the list will have at most ``maxsplit+1`` elements). If *maxsplit* is not " +"specified or ``-1``, then there is no limit on the number of splits (all " +"possible splits are made)." +msgstr "" +"返回一个由字符串内单词组成的列表,使用 *sep* 作为分隔字符串。 如果给出了 *maxsplit*,则最多进行 *maxsplit* " +"次拆分(因此,列表最多会有 ``maxsplit+1`` 个元素)。 如果 *maxsplit* 未指定或为 " +"``-1``,则不限制拆分次数(进行所有可能的拆分)。" + +#: ../../library/stdtypes.rst:1966 +msgid "" +"If *sep* is given, consecutive delimiters are not grouped together and are " +"deemed to delimit empty strings (for example, ``'1,,2'.split(',')`` returns " +"``['1', '', '2']``). The *sep* argument may consist of multiple characters " +"(for example, ``'1<>2<>3'.split('<>')`` returns ``['1', '2', '3']``). " +"Splitting an empty string with a specified separator returns ``['']``." +msgstr "" +"如果给出了 *sep*,则连续的分隔符不会被组合在一起而是被视为分隔空字符串 (例如 ``'1,,2'.split(',')`` 将返回 ``['1'," +" '', '2']``)。 *sep* 参数可能由多个字符组成 (例如 ``'1<>2<>3'.split('<>')`` 将返回 ``['1', " +"'2', '3']``)。 使用指定的分隔符拆分空字符串将返回 ``['']``。" + +#: ../../library/stdtypes.rst:1972 ../../library/stdtypes.rst:1988 +#: ../../library/stdtypes.rst:2040 ../../library/stdtypes.rst:2108 +#: ../../library/stdtypes.rst:2175 ../../library/stdtypes.rst:3014 +#: ../../library/stdtypes.rst:3030 ../../library/stdtypes.rst:3121 +#: ../../library/stdtypes.rst:3137 ../../library/stdtypes.rst:3162 +#: ../../library/stdtypes.rst:3176 ../../library/stdtypes.rst:3204 +#: ../../library/stdtypes.rst:3218 ../../library/stdtypes.rst:3236 +#: ../../library/stdtypes.rst:3263 ../../library/stdtypes.rst:3286 +#: ../../library/stdtypes.rst:3313 ../../library/stdtypes.rst:3355 +#: ../../library/stdtypes.rst:3379 +msgid "For example::" +msgstr "例如:" + +#: ../../library/stdtypes.rst:1981 +msgid "" +"If *sep* is not specified or is ``None``, a different splitting algorithm is" +" applied: runs of consecutive whitespace are regarded as a single separator," +" and the result will contain no empty strings at the start or end if the " +"string has leading or trailing whitespace. Consequently, splitting an empty" +" string or a string consisting of just whitespace with a ``None`` separator " +"returns ``[]``." +msgstr "" +"如果 *sep* 未指定或为 " +"``None``,则会应用另一种拆分算法:连续的空格会被视为单个分隔符,其结果将不包含开头或末尾的空字符串,如果字符串包含前缀或后缀空格的话。 " +"因此,使用 ``None`` 拆分空字符串或仅包含空格的字符串将返回 ``[]``。" + +#: ../../library/stdtypes.rst:2003 +msgid "" +"Return a list of the lines in the string, breaking at line boundaries. Line" +" breaks are not included in the resulting list unless *keepends* is given " +"and true." +msgstr "返回由原字符串中各行组成的列表,在行边界的位置拆分。 结果列表中不包含行边界,除非给出了 *keepends* 且为真值。" + +#: ../../library/stdtypes.rst:2007 +msgid "" +"This method splits on the following line boundaries. In particular, the " +"boundaries are a superset of :term:`universal newlines`." +msgstr "此方法会以下列行边界进行拆分。 特别地,行边界是 :term:`universal newlines` 的一个超集。" + +#: ../../library/stdtypes.rst:2011 +msgid "Representation" +msgstr "表示符" + +#: ../../library/stdtypes.rst:2011 +msgid "Description" +msgstr "描述" + +#: ../../library/stdtypes.rst:2013 +msgid "``\\n``" +msgstr "``\\n``" + +#: ../../library/stdtypes.rst:2013 +msgid "Line Feed" +msgstr "换行" + +#: ../../library/stdtypes.rst:2015 +msgid "``\\r``" +msgstr "``\\r``" + +#: ../../library/stdtypes.rst:2015 +msgid "Carriage Return" +msgstr "回车" + +#: ../../library/stdtypes.rst:2017 +msgid "``\\r\\n``" +msgstr "``\\r\\n``" + +#: ../../library/stdtypes.rst:2017 +msgid "Carriage Return + Line Feed" +msgstr "回车 + 换行" + +#: ../../library/stdtypes.rst:2019 +msgid "``\\v`` or ``\\x0b``" +msgstr "``\\v`` 或 ``\\x0b``" + +#: ../../library/stdtypes.rst:2019 +msgid "Line Tabulation" +msgstr "行制表符" + +#: ../../library/stdtypes.rst:2021 +msgid "``\\f`` or ``\\x0c``" +msgstr "``\\f`` 或 ``\\x0c``" + +#: ../../library/stdtypes.rst:2021 +msgid "Form Feed" +msgstr "换表单" + +#: ../../library/stdtypes.rst:2023 +msgid "``\\x1c``" +msgstr "``\\x1c``" + +#: ../../library/stdtypes.rst:2023 +msgid "File Separator" +msgstr "文件分隔符" + +#: ../../library/stdtypes.rst:2025 +msgid "``\\x1d``" +msgstr "``\\x1d``" + +#: ../../library/stdtypes.rst:2025 +msgid "Group Separator" +msgstr "组分隔符" + +#: ../../library/stdtypes.rst:2027 +msgid "``\\x1e``" +msgstr "``\\x1e``" + +#: ../../library/stdtypes.rst:2027 +msgid "Record Separator" +msgstr "记录分隔符" + +#: ../../library/stdtypes.rst:2029 +msgid "``\\x85``" +msgstr "``\\x85``" + +#: ../../library/stdtypes.rst:2029 +msgid "Next Line (C1 Control Code)" +msgstr "下一行 (C1 控制码)" + +#: ../../library/stdtypes.rst:2031 +msgid "``\\u2028``" +msgstr "``\\u2028``" + +#: ../../library/stdtypes.rst:2031 +msgid "Line Separator" +msgstr "行分隔符" + +#: ../../library/stdtypes.rst:2033 +msgid "``\\u2029``" +msgstr "``\\u2029``" + +#: ../../library/stdtypes.rst:2033 +msgid "Paragraph Separator" +msgstr "段分隔符" + +#: ../../library/stdtypes.rst:2038 +msgid "``\\v`` and ``\\f`` added to list of line boundaries." +msgstr "``\\v`` 和 ``\\f`` 被添加到行边界列表" + +#: ../../library/stdtypes.rst:2047 +msgid "" +"Unlike :meth:`~str.split` when a delimiter string *sep* is given, this " +"method returns an empty list for the empty string, and a terminal line break" +" does not result in an extra line::" +msgstr "" +"不同于 :meth:`~str.split`,当给出了分隔字符串 *sep* " +"时,对于空字符串此方法将返回一个空列表,而末尾的换行不会令结果中增加额外的行::" + +#: ../../library/stdtypes.rst:2056 +msgid "For comparison, ``split('\\n')`` gives::" +msgstr "作为比较,``split('\\n')`` 的结果为::" + +#: ../../library/stdtypes.rst:2066 +msgid "" +"Return ``True`` if string starts with the *prefix*, otherwise return " +"``False``. *prefix* can also be a tuple of prefixes to look for. With " +"optional *start*, test string beginning at that position. With optional " +"*end*, stop comparing string at that position." +msgstr "" +"如果字符串以指定的 *prefix* 开始则返回 ``True``,否则返回 ``False``。 *prefix* " +"也可以为由多个供查找的前缀构成的元组。 如果有可选项 *start*,将从所指定位置开始检查。 如果有可选项 *end*,将在所指定位置停止比较。" + +#: ../../library/stdtypes.rst:2074 +msgid "" +"Return a copy of the string with the leading and trailing characters " +"removed. The *chars* argument is a string specifying the set of characters " +"to be removed. If omitted or ``None``, the *chars* argument defaults to " +"removing whitespace. The *chars* argument is not a prefix or suffix; rather," +" all combinations of its values are stripped::" +msgstr "" +"返回原字符串的副本,移除其中的前导和末尾字符。 *chars* 参数为指定要移除字符的字符串。 如果省略或为 ``None``,则 *chars* " +"参数默认移除空白符。 实际上 *chars* 参数并非指定单个前缀或后缀;而是会移除参数值的所有组合::" + +#: ../../library/stdtypes.rst:2085 +msgid "" +"The outermost leading and trailing *chars* argument values are stripped from" +" the string. Characters are removed from the leading end until reaching a " +"string character that is not contained in the set of characters in *chars*. " +"A similar action takes place on the trailing end. For example::" +msgstr "" +"最外侧的前导和末尾 *chars* 参数值将从字符串中移除。 开头端的字符的移除将在遇到一个未包含于 *chars* 所指定字符集的字符时停止。 " +"类似的操作也将在结尾端发生。 例如::" + +#: ../../library/stdtypes.rst:2098 +msgid "" +"Return a copy of the string with uppercase characters converted to lowercase" +" and vice versa. Note that it is not necessarily true that " +"``s.swapcase().swapcase() == s``." +msgstr "" +"返回原字符串的副本,其中大写字符转换为小写,反之亦然。 请注意 ``s.swapcase().swapcase() == s`` 并不一定为真值。" + +#: ../../library/stdtypes.rst:2105 +msgid "" +"Return a titlecased version of the string where words start with an " +"uppercase character and the remaining characters are lowercase." +msgstr "返回原字符串的标题版本,其中每个单词第一个字母为大写,其余字母为小写。" + +#: ../../library/stdtypes.rst:2113 ../../library/stdtypes.rst:3323 +msgid "" +"The algorithm uses a simple language-independent definition of a word as " +"groups of consecutive letters. The definition works in many contexts but it" +" means that apostrophes in contractions and possessives form word " +"boundaries, which may not be the desired result::" +msgstr "" +"该算法使用一种简单的与语言无关的定义,将连续的字母组合视为单词。 " +"该定义在多数情况下都很有效,但它也意味着代表缩写形式与所有格的撇号也会成为单词边界,这可能导致不希望的结果::" + +#: ../../library/stdtypes.rst:2121 +msgid "" +"The :func:`string.capwords` function does not have this problem, as it " +"splits words on spaces only." +msgstr ":func:`string.capwords` 函数没有此问题,因为它只用空格来拆分单词。" + +#: ../../library/stdtypes.rst:2124 +msgid "" +"Alternatively, a workaround for apostrophes can be constructed using regular" +" expressions::" +msgstr "作为替代,可以使用正则表达式来构造针对撇号的变通处理::" + +#: ../../library/stdtypes.rst:2139 +msgid "" +"Return a copy of the string in which each character has been mapped through " +"the given translation table. The table must be an object that implements " +"indexing via :meth:`__getitem__`, typically a :term:`mapping` or " +":term:`sequence`. When indexed by a Unicode ordinal (an integer), the table" +" object can do any of the following: return a Unicode ordinal or a string, " +"to map the character to one or more other characters; return ``None``, to " +"delete the character from the return string; or raise a :exc:`LookupError` " +"exception, to map the character to itself." +msgstr "" +"返回原字符串的副本,其中每个字符按给定的转换表进行映射。 转换表必须是一个使用 :meth:`__getitem__` 来实现索引操作的对象,通常为 " +":term:`mapping` 或 :term:`sequence`。 当以 Unicode " +"码位序号(整数)为索引时,转换表对象可以做以下任何一种操作:返回 Unicode 序号或字符串,将字符映射为一个或多个字符;返回 " +"``None``,将字符从结果字符串中删除;或引发 :exc:`LookupError` 异常,将字符映射为其自身。" + +#: ../../library/stdtypes.rst:2148 +msgid "" +"You can use :meth:`str.maketrans` to create a translation map from " +"character-to-character mappings in different formats." +msgstr "你可以使用 :meth:`str.maketrans` 基于不同格式的字符到字符映射来创建一个转换映射表。" + +#: ../../library/stdtypes.rst:2151 +msgid "" +"See also the :mod:`codecs` module for a more flexible approach to custom " +"character mappings." +msgstr "另请参阅 :mod:`codecs` 模块以了解定制字符映射的更灵活方式。" + +#: ../../library/stdtypes.rst:2157 +msgid "" +"Return a copy of the string with all the cased characters [4]_ converted to " +"uppercase. Note that ``s.upper().isupper()`` might be ``False`` if ``s`` " +"contains uncased characters or if the Unicode category of the resulting " +"character(s) is not \"Lu\" (Letter, uppercase), but e.g. \"Lt\" (Letter, " +"titlecase)." +msgstr "" +"返回原字符串的副本,其中所有区分大小写的字符 [4]_ 均转换为大写。 请注意如果 ``s`` 包含不区分大小写的字符或者如果结果字符的 Unicode" +" 类别不是 \"Lu\" (Letter, uppercase) 而是 \"Lt\" (Letter, titlecase) 则 " +"``s.upper().isupper()`` 有可能为 ``False``。" + +#: ../../library/stdtypes.rst:2163 +msgid "" +"The uppercasing algorithm used is described in section 3.13 of the Unicode " +"Standard." +msgstr "所用转换大写算法的描述请参见 Unicode 标准的 3.13 节。" + +#: ../../library/stdtypes.rst:2169 +msgid "" +"Return a copy of the string left filled with ASCII ``'0'`` digits to make a " +"string of length *width*. A leading sign prefix (``'+'``/``'-'``) is handled" +" by inserting the padding *after* the sign character rather than before. The" +" original string is returned if *width* is less than or equal to ``len(s)``." +msgstr "" +"返回原字符串的副本,在左边填充 ASCII ``'0'`` 数码使其长度变为 *width*。 正负值前缀 (``'+'``/``'-'``) " +"的处理方式是在正负符号 *之后* 填充而非在之前。 如果 *width* 小于等于 ``len(s)`` 则返回原字符串的副本。" + +#: ../../library/stdtypes.rst:2187 +msgid "``printf``-style String Formatting" +msgstr "``printf`` 风格的字符串格式化" + +#: ../../library/stdtypes.rst:2200 +msgid "" +"The formatting operations described here exhibit a variety of quirks that " +"lead to a number of common errors (such as failing to display tuples and " +"dictionaries correctly). Using the newer :ref:`formatted string literals " +"`, the :meth:`str.format` interface, or :ref:`template strings " +"` may help avoid these errors. Each of these alternatives" +" provides their own trade-offs and benefits of simplicity, flexibility, " +"and/or extensibility." +msgstr "" +"此处介绍的格式化操作具有多种怪异特性,可能导致许多常见错误(例如无法正确显示元组和字典)。 使用较新的 :ref:`格式化字符串字面值 " +"`,:meth:`str.format` 接口或 :ref:`模板字符串 ` " +"有助于避免这样的错误。 这些替代方案中的每一种都更好地权衡并提供了简单、灵活以及可扩展性优势。" + +#: ../../library/stdtypes.rst:2208 +msgid "" +"String objects have one unique built-in operation: the ``%`` operator " +"(modulo). This is also known as the string *formatting* or *interpolation* " +"operator. Given ``format % values`` (where *format* is a string), ``%`` " +"conversion specifications in *format* are replaced with zero or more " +"elements of *values*. The effect is similar to using the :c:func:`sprintf` " +"in the C language." +msgstr "" +"字符串对象有一个独特的内置运算: ``%`` 运算符 (取模)。 这也被称为字符串 *formatting* 或 *interpolation* " +"运算符。 如果给定 ``format % values`` (其中 *format* 是字符串),*format* 中 ``%`` 的转换规范将被 " +"*values* 中的零个或多个元素替换。 其效果类似于在 C 语言中使用 :c:func:`sprintf`。" + +#: ../../library/stdtypes.rst:2214 +msgid "" +"If *format* requires a single argument, *values* may be a single non-tuple " +"object. [5]_ Otherwise, *values* must be a tuple with exactly the number of" +" items specified by the format string, or a single mapping object (for " +"example, a dictionary)." +msgstr "" +"如果 *format* 要求一个单独参数,则 *values* 可以为一个非元组对象。 [5]_ 否则的话,*values* " +"必须或者是一个包含项数与格式字符串中指定的转换符项数相同的元组,或者是一个单独映射对象(例如字典)。" + +#: ../../library/stdtypes.rst:2224 ../../library/stdtypes.rst:3434 +msgid "" +"A conversion specifier contains two or more characters and has the following" +" components, which must occur in this order:" +msgstr "转换标记符包含两个或更多字符并具有以下组成,且必须遵循此处规定的顺序:" + +#: ../../library/stdtypes.rst:2227 ../../library/stdtypes.rst:3437 +msgid "The ``'%'`` character, which marks the start of the specifier." +msgstr "``'%'`` 字符,用于标记转换符的起始。" + +#: ../../library/stdtypes.rst:2229 ../../library/stdtypes.rst:3439 +msgid "" +"Mapping key (optional), consisting of a parenthesised sequence of characters" +" (for example, ``(somename)``)." +msgstr "映射键(可选),由加圆括号的字符序列组成 (例如 ``(somename)``)。" + +#: ../../library/stdtypes.rst:2232 ../../library/stdtypes.rst:3442 +msgid "" +"Conversion flags (optional), which affect the result of some conversion " +"types." +msgstr "转换旗标(可选),用于影响某些转换类型的结果。" + +#: ../../library/stdtypes.rst:2235 ../../library/stdtypes.rst:3445 +msgid "" +"Minimum field width (optional). If specified as an ``'*'`` (asterisk), the " +"actual width is read from the next element of the tuple in *values*, and the" +" object to convert comes after the minimum field width and optional " +"precision." +msgstr "" +"最小字段宽度(可选)。 如果指定为 ``'*'`` (星号),则实际宽度会从 *values* " +"元组的下一元素中读取,要转换的对象则为最小字段宽度和可选的精度之后的元素。" + +#: ../../library/stdtypes.rst:2239 ../../library/stdtypes.rst:3449 +msgid "" +"Precision (optional), given as a ``'.'`` (dot) followed by the precision. " +"If specified as ``'*'`` (an asterisk), the actual precision is read from the" +" next element of the tuple in *values*, and the value to convert comes after" +" the precision." +msgstr "" +"精度(可选),以在 ``'.'`` (点号) 之后加精度值的形式给出。 如果指定为 ``'*'`` (星号),则实际精度会从 *values* " +"元组的下一元素中读取,要转换的对象则为精度之后的元素。" + +#: ../../library/stdtypes.rst:2244 ../../library/stdtypes.rst:3454 +msgid "Length modifier (optional)." +msgstr "长度修饰符(可选)。" + +#: ../../library/stdtypes.rst:2246 ../../library/stdtypes.rst:3456 +msgid "Conversion type." +msgstr "转换类型。" + +#: ../../library/stdtypes.rst:2248 +msgid "" +"When the right argument is a dictionary (or other mapping type), then the " +"formats in the string *must* include a parenthesised mapping key into that " +"dictionary inserted immediately after the ``'%'`` character. The mapping key" +" selects the value to be formatted from the mapping. For example:" +msgstr "" +"当右边的参数为一个字典(或其他映射类型)时,字符串中的格式 *必须* 包含加圆括号的映射键,对应 ``'%'`` 字符之后字典中的每一项。 " +"映射键将从映射中选取要格式化的值。 例如:" + +#: ../../library/stdtypes.rst:2257 ../../library/stdtypes.rst:3467 +msgid "" +"In this case no ``*`` specifiers may occur in a format (since they require a" +" sequential parameter list)." +msgstr "在此情况下格式中不能出现 ``*`` 标记符(因其需要一个序列类的参数列表)。" + +#: ../../library/stdtypes.rst:2260 ../../library/stdtypes.rst:3470 +msgid "The conversion flag characters are:" +msgstr "转换旗标为:" + +#: ../../library/stdtypes.rst:2269 ../../library/stdtypes.rst:3479 +msgid "Flag" +msgstr "标志位" + +#: ../../library/stdtypes.rst:2271 ../../library/stdtypes.rst:3481 +msgid "``'#'``" +msgstr "``'#'``" + +#: ../../library/stdtypes.rst:2271 ../../library/stdtypes.rst:3481 +msgid "" +"The value conversion will use the \"alternate form\" (where defined below)." +msgstr "值的转换将使用“替代形式”(具体定义见下文)。" + +#: ../../library/stdtypes.rst:2274 ../../library/stdtypes.rst:3484 +msgid "``'0'``" +msgstr "``'0'``" + +#: ../../library/stdtypes.rst:2274 ../../library/stdtypes.rst:3484 +msgid "The conversion will be zero padded for numeric values." +msgstr "转换将为数字值填充零字符。" + +#: ../../library/stdtypes.rst:2276 ../../library/stdtypes.rst:3486 +msgid "``'-'``" +msgstr "``'-'``" + +#: ../../library/stdtypes.rst:2276 ../../library/stdtypes.rst:3486 +msgid "" +"The converted value is left adjusted (overrides the ``'0'`` conversion if " +"both are given)." +msgstr "转换值将靠左对齐(如果同时给出 ``'0'`` 转换,则会覆盖后者)。" + +#: ../../library/stdtypes.rst:2279 ../../library/stdtypes.rst:3489 +msgid "``' '``" +msgstr "``' '``" + +#: ../../library/stdtypes.rst:2279 ../../library/stdtypes.rst:3489 +msgid "" +"(a space) A blank should be left before a positive number (or empty string) " +"produced by a signed conversion." +msgstr "(空格) 符号位转换产生的正数(或空字符串)前将留出一个空格。" + +#: ../../library/stdtypes.rst:2282 ../../library/stdtypes.rst:3492 +msgid "``'+'``" +msgstr "``'+'``" + +#: ../../library/stdtypes.rst:2282 ../../library/stdtypes.rst:3492 +msgid "" +"A sign character (``'+'`` or ``'-'``) will precede the conversion (overrides" +" a \"space\" flag)." +msgstr "符号字符 (``'+'`` 或 ``'-'``) 将显示于转换结果的开头(会覆盖 \"空格\" 旗标)。" + +#: ../../library/stdtypes.rst:2286 ../../library/stdtypes.rst:3496 +msgid "" +"A length modifier (``h``, ``l``, or ``L``) may be present, but is ignored as" +" it is not necessary for Python -- so e.g. ``%ld`` is identical to ``%d``." +msgstr "" +"可以给出长度修饰符 (``h``, ``l`` 或 ``L``),但会被忽略,因为对 Python 来说没有必要 -- 所以 ``%ld`` 等价于 " +"``%d``。" + +#: ../../library/stdtypes.rst:2289 ../../library/stdtypes.rst:3499 +msgid "The conversion types are:" +msgstr "转换类型为:" + +#: ../../library/stdtypes.rst:2292 ../../library/stdtypes.rst:3502 +msgid "Conversion" +msgstr "转换符" + +#: ../../library/stdtypes.rst:2294 ../../library/stdtypes.rst:3504 +msgid "``'d'``" +msgstr "``'d'``" + +#: ../../library/stdtypes.rst:2294 ../../library/stdtypes.rst:2296 +#: ../../library/stdtypes.rst:3504 ../../library/stdtypes.rst:3506 +msgid "Signed integer decimal." +msgstr "有符号十进制整数。" + +#: ../../library/stdtypes.rst:2296 ../../library/stdtypes.rst:3506 +msgid "``'i'``" +msgstr "``'i'``" + +#: ../../library/stdtypes.rst:2298 ../../library/stdtypes.rst:3508 +msgid "``'o'``" +msgstr "``'o'``" + +#: ../../library/stdtypes.rst:2298 ../../library/stdtypes.rst:3508 +msgid "Signed octal value." +msgstr "有符号八进制数。" + +#: ../../library/stdtypes.rst:2300 ../../library/stdtypes.rst:3510 +msgid "``'u'``" +msgstr "``'u'``" + +#: ../../library/stdtypes.rst:2300 ../../library/stdtypes.rst:3510 +msgid "Obsolete type -- it is identical to ``'d'``." +msgstr "过时类型 -- 等价于 ``'d'``。" + +#: ../../library/stdtypes.rst:2302 ../../library/stdtypes.rst:3512 +msgid "``'x'``" +msgstr "``'x'``" + +#: ../../library/stdtypes.rst:2302 ../../library/stdtypes.rst:3512 +msgid "Signed hexadecimal (lowercase)." +msgstr "有符号十六进制数(小写)。" + +#: ../../library/stdtypes.rst:2304 ../../library/stdtypes.rst:3514 +msgid "``'X'``" +msgstr "``'X'``" + +#: ../../library/stdtypes.rst:2304 ../../library/stdtypes.rst:3514 +msgid "Signed hexadecimal (uppercase)." +msgstr "有符号十六进制数(大写)。" + +#: ../../library/stdtypes.rst:2306 ../../library/stdtypes.rst:3516 +msgid "``'e'``" +msgstr "``'e'``" + +#: ../../library/stdtypes.rst:2306 ../../library/stdtypes.rst:3516 +msgid "Floating point exponential format (lowercase)." +msgstr "浮点指数格式(小写)。" + +#: ../../library/stdtypes.rst:2308 ../../library/stdtypes.rst:3518 +msgid "``'E'``" +msgstr "``'E'``" + +#: ../../library/stdtypes.rst:2308 ../../library/stdtypes.rst:3518 +msgid "Floating point exponential format (uppercase)." +msgstr "浮点指数格式(大写)。" + +#: ../../library/stdtypes.rst:2310 ../../library/stdtypes.rst:3520 +msgid "``'f'``" +msgstr "``'f'``" + +#: ../../library/stdtypes.rst:2310 ../../library/stdtypes.rst:2312 +#: ../../library/stdtypes.rst:3520 ../../library/stdtypes.rst:3522 +msgid "Floating point decimal format." +msgstr "浮点十进制格式。" + +#: ../../library/stdtypes.rst:2312 ../../library/stdtypes.rst:3522 +msgid "``'F'``" +msgstr "``'F'``" + +#: ../../library/stdtypes.rst:2314 ../../library/stdtypes.rst:3524 +msgid "``'g'``" +msgstr "``'g'``" + +#: ../../library/stdtypes.rst:2314 ../../library/stdtypes.rst:3524 +msgid "" +"Floating point format. Uses lowercase exponential format if exponent is less" +" than -4 or not less than precision, decimal format otherwise." +msgstr "浮点格式。 如果指数小于 -4 或不小于精度则使用小写指数格式,否则使用十进制格式。" + +#: ../../library/stdtypes.rst:2318 ../../library/stdtypes.rst:3528 +msgid "``'G'``" +msgstr "``'G'``" + +#: ../../library/stdtypes.rst:2318 ../../library/stdtypes.rst:3528 +msgid "" +"Floating point format. Uses uppercase exponential format if exponent is less" +" than -4 or not less than precision, decimal format otherwise." +msgstr "浮点格式。 如果指数小于 -4 或不小于精度则使用大写指数格式,否则使用十进制格式。" + +#: ../../library/stdtypes.rst:2322 ../../library/stdtypes.rst:3532 +msgid "``'c'``" +msgstr "``'c'``" + +#: ../../library/stdtypes.rst:2322 +msgid "Single character (accepts integer or single character string)." +msgstr "单个字符(接受整数或单个字符的字符串)。" + +#: ../../library/stdtypes.rst:2325 ../../library/stdtypes.rst:3545 +msgid "``'r'``" +msgstr "``'r'``" + +#: ../../library/stdtypes.rst:2325 +msgid "String (converts any Python object using :func:`repr`)." +msgstr "字符串(使用 :func:`repr` 转换任何 Python 对象)。" + +#: ../../library/stdtypes.rst:2328 ../../library/stdtypes.rst:3539 +msgid "``'s'``" +msgstr "``'s'``" + +#: ../../library/stdtypes.rst:2328 +msgid "String (converts any Python object using :func:`str`)." +msgstr "字符串(使用 :func:`str` 转换任何 Python 对象)。" + +#: ../../library/stdtypes.rst:2331 ../../library/stdtypes.rst:3542 +msgid "``'a'``" +msgstr "``'a'``" + +#: ../../library/stdtypes.rst:2331 +msgid "String (converts any Python object using :func:`ascii`)." +msgstr "字符串(使用 :func:`ascii` 转换任何 Python 对象)。" + +#: ../../library/stdtypes.rst:2334 ../../library/stdtypes.rst:3548 +msgid "``'%'``" +msgstr "``'%'``" + +#: ../../library/stdtypes.rst:2334 ../../library/stdtypes.rst:3548 +msgid "" +"No argument is converted, results in a ``'%'`` character in the result." +msgstr "不转换参数,在结果中输出一个 ``'%'`` 字符。" + +#: ../../library/stdtypes.rst:2341 ../../library/stdtypes.rst:3555 +msgid "" +"The alternate form causes a leading octal specifier (``'0o'``) to be " +"inserted before the first digit." +msgstr "此替代形式会在第一个数码之前插入标示八进制数的前缀 (``'0o'``)。" + +#: ../../library/stdtypes.rst:2345 ../../library/stdtypes.rst:3559 +msgid "" +"The alternate form causes a leading ``'0x'`` or ``'0X'`` (depending on " +"whether the ``'x'`` or ``'X'`` format was used) to be inserted before the " +"first digit." +msgstr "" +"此替代形式会在第一个数码之前插入 ``'0x'`` 或 ``'0X'`` 前缀(取决于是使用 ``'x'`` 还是 ``'X'`` 格式)。" + +#: ../../library/stdtypes.rst:2349 ../../library/stdtypes.rst:3563 +msgid "" +"The alternate form causes the result to always contain a decimal point, even" +" if no digits follow it." +msgstr "此替代形式总是会在结果中包含一个小数点,即使其后并没有数码。" + +#: ../../library/stdtypes.rst:2352 ../../library/stdtypes.rst:3566 +msgid "" +"The precision determines the number of digits after the decimal point and " +"defaults to 6." +msgstr "小数点后的数码位数由精度决定,默认为 6。" + +#: ../../library/stdtypes.rst:2356 ../../library/stdtypes.rst:3570 +msgid "" +"The alternate form causes the result to always contain a decimal point, and " +"trailing zeroes are not removed as they would otherwise be." +msgstr "此替代形式总是会在结果中包含一个小数点,末尾各位的零不会如其他情况下那样被移除。" + +#: ../../library/stdtypes.rst:2359 ../../library/stdtypes.rst:3573 +msgid "" +"The precision determines the number of significant digits before and after " +"the decimal point and defaults to 6." +msgstr "小数点前后的有效数码位数由精度决定,默认为 6。" + +#: ../../library/stdtypes.rst:2363 ../../library/stdtypes.rst:3577 +msgid "If precision is ``N``, the output is truncated to ``N`` characters." +msgstr "如果精度为 ``N``,输出将截短为 ``N`` 个字符。" + +#: ../../library/stdtypes.rst:2366 ../../library/stdtypes.rst:3586 +msgid "See :pep:`237`." +msgstr "参见 :pep:`237`。" + +#: ../../library/stdtypes.rst:2368 +msgid "" +"Since Python strings have an explicit length, ``%s`` conversions do not " +"assume that ``'\\0'`` is the end of the string." +msgstr "由于 Python 字符串显式指明长度,``%s`` 转换不会将 ``'\\0'`` 视为字符串的结束。" + +#: ../../library/stdtypes.rst:2373 +msgid "" +"``%f`` conversions for numbers whose absolute value is over 1e50 are no " +"longer replaced by ``%g`` conversions." +msgstr "绝对值超过 1e50 的 ``%f`` 转换不会再被替换为 ``%g`` 转换。" + +#: ../../library/stdtypes.rst:2384 +msgid "" +"Binary Sequence Types --- :class:`bytes`, :class:`bytearray`, " +":class:`memoryview`" +msgstr "二进制序列类型 --- :class:`bytes`, :class:`bytearray`, :class:`memoryview`" + +#: ../../library/stdtypes.rst:2392 +msgid "" +"The core built-in types for manipulating binary data are :class:`bytes` and " +":class:`bytearray`. They are supported by :class:`memoryview` which uses the" +" :ref:`buffer protocol ` to access the memory of other binary" +" objects without needing to make a copy." +msgstr "" +"操作二进制数据的核心内置类型是 :class:`bytes` 和 :class:`bytearray`。 它们由 :class:`memoryview`" +" 提供支持,该对象使用 :ref:`缓冲区协议 ` 来访问其他二进制对象所在内存,不需要创建对象的副本。" + +#: ../../library/stdtypes.rst:2397 +msgid "" +"The :mod:`array` module supports efficient storage of basic data types like " +"32-bit integers and IEEE754 double-precision floating values." +msgstr ":mod:`array` 模块支持高效地存储基本数据类型,例如 32 位整数和 IEEE754 双精度浮点值。" + +#: ../../library/stdtypes.rst:2403 +msgid "Bytes Objects" +msgstr "bytes 对象" + +#: ../../library/stdtypes.rst:2407 +msgid "" +"Bytes objects are immutable sequences of single bytes. Since many major " +"binary protocols are based on the ASCII text encoding, bytes objects offer " +"several methods that are only valid when working with ASCII compatible data " +"and are closely related to string objects in a variety of other ways." +msgstr "" +"bytes 对象是由单个字节构成的不可变序列。 由于许多主要二进制协议都基于 ASCII 文本编码,因此 bytes 对象提供了一些仅在处理 ASCII" +" 兼容数据时可用,并且在许多特性上与字符串对象紧密相关的方法。" + +#: ../../library/stdtypes.rst:2414 +msgid "" +"Firstly, the syntax for bytes literals is largely the same as that for " +"string literals, except that a ``b`` prefix is added:" +msgstr "首先,表示 bytes 字面值的语法与字符串字面值的大致相同,只是添加了一个 ``b`` 前缀:" + +#: ../../library/stdtypes.rst:2417 +msgid "Single quotes: ``b'still allows embedded \"double\" quotes'``" +msgstr "单引号: ``b'同样允许嵌入 \"双\" 引号'``。" + +#: ../../library/stdtypes.rst:2418 +msgid "Double quotes: ``b\"still allows embedded 'single' quotes\"``" +msgstr "双引号: ``b\"仍然允许嵌入 '单' 引号\"``" + +#: ../../library/stdtypes.rst:2419 +msgid "Triple quoted: ``b'''3 single quotes'''``, ``b\"\"\"3 double quotes\"\"\"``" +msgstr "三重引号: ``b'''三重单引号'''``, ``b\"\"\"三重双引号\"\"\"``" + +#: ../../library/stdtypes.rst:2421 +msgid "" +"Only ASCII characters are permitted in bytes literals (regardless of the " +"declared source code encoding). Any binary values over 127 must be entered " +"into bytes literals using the appropriate escape sequence." +msgstr "" +"bytes 字面值中只允许 ASCII 字符(无论源代码声明的编码格式为何)。 任何超出 127 的二进制值必须使用相应的转义序列形式加入 bytes " +"字面值。" + +#: ../../library/stdtypes.rst:2425 +msgid "" +"As with string literals, bytes literals may also use a ``r`` prefix to " +"disable processing of escape sequences. See :ref:`strings` for more about " +"the various forms of bytes literal, including supported escape sequences." +msgstr "" +"像字符串字面值一样,bytes 字面值也可以使用 ``r`` 前缀来禁用转义序列处理。 请参阅 :ref:`strings` 了解有关各种 bytes " +"字面值形式的详情,包括所支持的转义序列。" + +#: ../../library/stdtypes.rst:2429 +msgid "" +"While bytes literals and representations are based on ASCII text, bytes " +"objects actually behave like immutable sequences of integers, with each " +"value in the sequence restricted such that ``0 <= x < 256`` (attempts to " +"violate this restriction will trigger :exc:`ValueError`). This is done " +"deliberately to emphasise that while many binary formats include ASCII based" +" elements and can be usefully manipulated with some text-oriented " +"algorithms, this is not generally the case for arbitrary binary data " +"(blindly applying text processing algorithms to binary data formats that are" +" not ASCII compatible will usually lead to data corruption)." +msgstr "" +"虽然 bytes 字面值和表示法是基于 ASCII 文本的,但 bytes 对象的行为实际上更像是不可变的整数序列,序列中的每个值的大小被限制为 ``0" +" <= x < 256`` (如果违反此限制将引发 :exc:`ValueError`)。 " +"这种限制是有意设计用以强调以下事实,虽然许多二进制格式都包含基于 ASCII " +"的元素,可以通过某些面向文本的算法进行有用的操作,但情况对于任意二进制数据来说通常却并非如此(盲目地将文本处理算法应用于不兼容 ASCII " +"的二进制数据格式往往将导致数据损坏)。" + +#: ../../library/stdtypes.rst:2439 +msgid "" +"In addition to the literal forms, bytes objects can be created in a number " +"of other ways:" +msgstr "除了字面值形式,bytes 对象还可以通过其他几种方式来创建:" + +#: ../../library/stdtypes.rst:2442 +msgid "A zero-filled bytes object of a specified length: ``bytes(10)``" +msgstr "指定长度的以零值填充的 bytes 对象: ``bytes(10)``" + +#: ../../library/stdtypes.rst:2443 +msgid "From an iterable of integers: ``bytes(range(20))``" +msgstr "通过由整数组成的可迭代对象: ``bytes(range(20))``" + +#: ../../library/stdtypes.rst:2444 +msgid "Copying existing binary data via the buffer protocol: ``bytes(obj)``" +msgstr "通过缓冲区协议复制现有的二进制数据: ``bytes(obj)``" + +#: ../../library/stdtypes.rst:2446 +msgid "Also see the :ref:`bytes ` built-in." +msgstr "另请参阅 :ref:`bytes ` 内置类型。" + +#: ../../library/stdtypes.rst:2448 +msgid "" +"Since 2 hexadecimal digits correspond precisely to a single byte, " +"hexadecimal numbers are a commonly used format for describing binary data. " +"Accordingly, the bytes type has an additional class method to read data in " +"that format:" +msgstr "" +"由于两个十六进制数码精确对应一个字节,因此十六进制数是描述二进制数据的常用格式。 相应地,bytes 类型具有从此种格式读取数据的附加类方法:" + +#: ../../library/stdtypes.rst:2454 +msgid "" +"This :class:`bytes` class method returns a bytes object, decoding the given " +"string object. The string must contain two hexadecimal digits per byte, " +"with ASCII whitespace being ignored." +msgstr "" +"此 :class:`bytes` 类方法返回一个解码给定字符串的 bytes 对象。 字符串必须由表示每个字节的两个十六进制数码构成,其中的 ASCII" +" 空白符会被忽略。" + +#: ../../library/stdtypes.rst:2461 +msgid "" +":meth:`bytes.fromhex` now skips all ASCII whitespace in the string, not just" +" spaces." +msgstr ":meth:`bytes.fromhex` 现在会忽略所有 ASCII 空白符而不只是空格符。" + +#: ../../library/stdtypes.rst:2465 +msgid "" +"A reverse conversion function exists to transform a bytes object into its " +"hexadecimal representation." +msgstr "存在一个反向转换函数,可以将 bytes 对象转换为对应的十六进制表示。" + +#: ../../library/stdtypes.rst:2470 ../../library/stdtypes.rst:2554 +msgid "" +"Return a string object containing two hexadecimal digits for each byte in " +"the instance." +msgstr "返回一个字符串对象,该对象包含实例中每个字节的两个十六进制数字。" + +#: ../../library/stdtypes.rst:2476 +msgid "" +"If you want to make the hex string easier to read, you can specify a single " +"character separator *sep* parameter to include in the output. By default " +"between each byte. A second optional *bytes_per_sep* parameter controls the" +" spacing. Positive values calculate the separator position from the right, " +"negative values from the left." +msgstr "" +"如果你希望令十六进制数字符串更易读,你可以指定单个字符分隔符作为 *sep* 形参包含于输出中。 默认会放在每个字节之间。 第二个可选的 " +"*bytes_per_sep* 形参控制间距。 正值会从右开始计算分隔符的位置,负值则是从左开始。" + +#: ../../library/stdtypes.rst:2492 +msgid "" +":meth:`bytes.hex` now supports optional *sep* and *bytes_per_sep* parameters" +" to insert separators between bytes in the hex output." +msgstr "" +":meth:`bytes.hex` 现在支持可选的 *sep* 和 *bytes_per_sep* 形参以在十六进制输出的字节之间插入分隔符。" + +#: ../../library/stdtypes.rst:2496 +msgid "" +"Since bytes objects are sequences of integers (akin to a tuple), for a bytes" +" object *b*, ``b[0]`` will be an integer, while ``b[0:1]`` will be a bytes " +"object of length 1. (This contrasts with text strings, where both indexing " +"and slicing will produce a string of length 1)" +msgstr "" +"由于 bytes 对象是由整数构成的序列(类似于元组),因此对于一个 bytes 对象 *b*,``b[0]`` 将为一个整数,而 ``b[0:1]``" +" 将为一个长度为 1 的 bytes 对象。 (这与文本字符串不同,索引和切片所产生的将都是一个长度为 1 的字符串)。" + +#: ../../library/stdtypes.rst:2501 +msgid "" +"The representation of bytes objects uses the literal format (``b'...'``) " +"since it is often more useful than e.g. ``bytes([46, 46, 46])``. You can " +"always convert a bytes object into a list of integers using ``list(b)``." +msgstr "" +"bytes 对象的表示使用字面值格式 (``b'...'``),因为它通常都要比像 ``bytes([46, 46, 46])`` 这样的格式更好用。 " +"你总是可以使用 ``list(b)`` 将 bytes 对象转换为一个由整数构成的列表。" + +#: ../../library/stdtypes.rst:2509 +msgid "Bytearray Objects" +msgstr "bytearray 对象" + +#: ../../library/stdtypes.rst:2513 +msgid "" +":class:`bytearray` objects are a mutable counterpart to :class:`bytes` " +"objects." +msgstr ":class:`bytearray` 对象是 :class:`bytes` 对象的可变对应物。" + +#: ../../library/stdtypes.rst:2518 +msgid "" +"There is no dedicated literal syntax for bytearray objects, instead they are" +" always created by calling the constructor:" +msgstr "bytearray 对象没有专属的字面值语法,它们总是通过调用构造器来创建:" + +#: ../../library/stdtypes.rst:2521 +msgid "Creating an empty instance: ``bytearray()``" +msgstr "创建一个空实例: ``bytearray()``" + +#: ../../library/stdtypes.rst:2522 +msgid "Creating a zero-filled instance with a given length: ``bytearray(10)``" +msgstr "创建一个指定长度的以零值填充的实例: ``bytearray(10)``" + +#: ../../library/stdtypes.rst:2523 +msgid "From an iterable of integers: ``bytearray(range(20))``" +msgstr "通过由整数组成的可迭代对象: ``bytearray(range(20))``" + +#: ../../library/stdtypes.rst:2524 +msgid "" +"Copying existing binary data via the buffer protocol: ``bytearray(b'Hi!')``" +msgstr "通过缓冲区协议复制现有的二进制数据: ``bytearray(b'Hi!')``" + +#: ../../library/stdtypes.rst:2526 +msgid "" +"As bytearray objects are mutable, they support the :ref:`mutable ` sequence operations in addition to the common bytes and bytearray " +"operations described in :ref:`bytes-methods`." +msgstr "" +"由于 bytearray 对象是可变的,该对象除了 :ref:`bytes-methods` 中所描述的 bytes 和 bytearray " +"共有操作之外,还支持 :ref:`可变 ` 序列操作。" + +#: ../../library/stdtypes.rst:2530 +msgid "Also see the :ref:`bytearray ` built-in." +msgstr "另请参见 :ref:`bytearray ` 内置类型。" + +#: ../../library/stdtypes.rst:2532 +msgid "" +"Since 2 hexadecimal digits correspond precisely to a single byte, " +"hexadecimal numbers are a commonly used format for describing binary data. " +"Accordingly, the bytearray type has an additional class method to read data " +"in that format:" +msgstr "" +"由于两个十六进制数码精确对应一个字节,因此十六进制数是描述二进制数据的常用格式。 相应地,bytearray 类型具有从此种格式读取数据的附加类方法:" + +#: ../../library/stdtypes.rst:2538 +msgid "" +"This :class:`bytearray` class method returns bytearray object, decoding the " +"given string object. The string must contain two hexadecimal digits per " +"byte, with ASCII whitespace being ignored." +msgstr "" +":class:`bytearray` 类方法返回一个解码给定字符串的 bytearray 对象。 字符串必须由表示每个字节的两个十六进制数码构成,其中的" +" ASCII 空白符会被忽略。" + +#: ../../library/stdtypes.rst:2545 +msgid "" +":meth:`bytearray.fromhex` now skips all ASCII whitespace in the string, not " +"just spaces." +msgstr ":meth:`bytearray.fromhex` 现在会忽略所有 ASCII 空白符而不只是空格符。" + +#: ../../library/stdtypes.rst:2549 +msgid "" +"A reverse conversion function exists to transform a bytearray object into " +"its hexadecimal representation." +msgstr "存在一个反向转换函数,可以将 bytearray 对象转换为对应的十六进制表示。" + +#: ../../library/stdtypes.rst:2562 +msgid "" +"Similar to :meth:`bytes.hex`, :meth:`bytearray.hex` now supports optional " +"*sep* and *bytes_per_sep* parameters to insert separators between bytes in " +"the hex output." +msgstr "" +"与 :meth:`bytes.hex` 相似, :meth:`bytearray.hex` 现在支持可选的 *sep* 和 " +"*bytes_per_sep* 参数以在十六进制输出的字节之间插入分隔符。" + +#: ../../library/stdtypes.rst:2567 +msgid "" +"Since bytearray objects are sequences of integers (akin to a list), for a " +"bytearray object *b*, ``b[0]`` will be an integer, while ``b[0:1]`` will be " +"a bytearray object of length 1. (This contrasts with text strings, where " +"both indexing and slicing will produce a string of length 1)" +msgstr "" +"由于 bytearray 对象是由整数构成的序列(类似于列表),因此对于一个 bytearray 对象 *b*,``b[0]`` 将为一个整数,而 " +"``b[0:1]`` 将为一个长度为 1 的 bytearray 对象。 (这与文本字符串不同,索引和切片所产生的将都是一个长度为 1 的字符串)。" + +#: ../../library/stdtypes.rst:2572 +msgid "" +"The representation of bytearray objects uses the bytes literal format " +"(``bytearray(b'...')``) since it is often more useful than e.g. " +"``bytearray([46, 46, 46])``. You can always convert a bytearray object into" +" a list of integers using ``list(b)``." +msgstr "" +"bytearray 对象的表示使用 bytes 对象字面值格式 (``bytearray(b'...')``),因为它通常都要比 " +"``bytearray([46, 46, 46])`` 这样的格式更好用。 你总是可以使用 ``list(b)`` 将 bytearray " +"对象转换为一个由整数构成的列表。" + +#: ../../library/stdtypes.rst:2581 +msgid "Bytes and Bytearray Operations" +msgstr "bytes 和 bytearray 操作" + +#: ../../library/stdtypes.rst:2586 +msgid "" +"Both bytes and bytearray objects support the :ref:`common `" +" sequence operations. They interoperate not just with operands of the same " +"type, but with any :term:`bytes-like object`. Due to this flexibility, they " +"can be freely mixed in operations without causing errors. However, the " +"return type of the result may depend on the order of operands." +msgstr "" +"bytes 和 bytearray 对象都支持 :ref:`通用 ` 序列操作。 " +"它们不仅能与相同类型的操作数,也能与任何 :term:`bytes-like object` 进行互操作。 " +"由于这样的灵活性,它们可以在操作中自由地混合而不会导致错误。 但是,操作结果的返回值类型可能取决于操作数的顺序。" + +#: ../../library/stdtypes.rst:2594 +msgid "" +"The methods on bytes and bytearray objects don't accept strings as their " +"arguments, just as the methods on strings don't accept bytes as their " +"arguments. For example, you have to write::" +msgstr "" +"bytes 和 bytearray 对象的方法不接受字符串作为其参数,就像字符串的方法不接受 bytes 对象作为其参数一样。 " +"例如,你必须使用以下写法::" + +#: ../../library/stdtypes.rst:2601 +msgid "and::" +msgstr "和::" + +#: ../../library/stdtypes.rst:2606 +msgid "" +"Some bytes and bytearray operations assume the use of ASCII compatible " +"binary formats, and hence should be avoided when working with arbitrary " +"binary data. These restrictions are covered below." +msgstr "" +"某些 bytes 和 bytearray 操作假定使用兼容 ASCII 的二进制格式,因此在处理任意二进数数据时应当避免使用。 这些限制会在下文中说明。" + +#: ../../library/stdtypes.rst:2611 +msgid "" +"Using these ASCII based operations to manipulate binary data that is not " +"stored in an ASCII based format may lead to data corruption." +msgstr "使用这些基于 ASCII 的操作来处理未以基于 ASCII 的格式存储的二进制数据可能会导致数据损坏。" + +#: ../../library/stdtypes.rst:2614 +msgid "" +"The following methods on bytes and bytearray objects can be used with " +"arbitrary binary data." +msgstr "bytes 和 bytearray 对象的下列方法可以用于任意二进制数据。" + +#: ../../library/stdtypes.rst:2620 +msgid "" +"Return the number of non-overlapping occurrences of subsequence *sub* in the" +" range [*start*, *end*]. Optional arguments *start* and *end* are " +"interpreted as in slice notation." +msgstr "" +"返回子序列 *sub* 在 [*start*, *end*] 范围内非重叠出现的次数。 可选参数 *start* 与 *end* 会被解读为切片表示法。" + +#: ../../library/stdtypes.rst:2624 ../../library/stdtypes.rst:2722 +#: ../../library/stdtypes.rst:2744 ../../library/stdtypes.rst:2810 +#: ../../library/stdtypes.rst:2823 +msgid "" +"The subsequence to search for may be any :term:`bytes-like object` or an " +"integer in the range 0 to 255." +msgstr "要搜索的子序列可以是任意 :term:`bytes-like object` 或是 0 至 255 范围内的整数。" + +#: ../../library/stdtypes.rst:2627 ../../library/stdtypes.rst:2734 +#: ../../library/stdtypes.rst:2747 ../../library/stdtypes.rst:2813 +#: ../../library/stdtypes.rst:2826 +msgid "Also accept an integer in the range 0 to 255 as the subsequence." +msgstr "也接受 0 至 255 范围内的整数作为子序列。" + +#: ../../library/stdtypes.rst:2634 +msgid "" +"If the binary data starts with the *prefix* string, return " +"``bytes[len(prefix):]``. Otherwise, return a copy of the original binary " +"data::" +msgstr "如果二进制数据以 *prefix* 字符串开头,返回 ``bytes[len(prefix):]``。 否则,返回原始二进制数据的副本:" + +#: ../../library/stdtypes.rst:2643 +msgid "The *prefix* may be any :term:`bytes-like object`." +msgstr "*prefix* 可以是任意 :term:`bytes-like object`。" + +#: ../../library/stdtypes.rst:2647 ../../library/stdtypes.rst:2669 +#: ../../library/stdtypes.rst:2798 ../../library/stdtypes.rst:2891 +#: ../../library/stdtypes.rst:2905 ../../library/stdtypes.rst:2936 +#: ../../library/stdtypes.rst:2950 ../../library/stdtypes.rst:2992 +#: ../../library/stdtypes.rst:3062 ../../library/stdtypes.rst:3080 +#: ../../library/stdtypes.rst:3108 ../../library/stdtypes.rst:3247 +#: ../../library/stdtypes.rst:3302 ../../library/stdtypes.rst:3345 +#: ../../library/stdtypes.rst:3366 ../../library/stdtypes.rst:3388 +#: ../../library/stdtypes.rst:3590 +msgid "" +"The bytearray version of this method does *not* operate in place - it always" +" produces a new object, even if no changes were made." +msgstr "此方法的 bytearray 版本 *并非* 原地操作 —— 它总是产生一个新对象,即便没有做任何改变。" + +#: ../../library/stdtypes.rst:2656 +msgid "" +"If the binary data ends with the *suffix* string and that *suffix* is not " +"empty, return ``bytes[:-len(suffix)]``. Otherwise, return a copy of the " +"original binary data::" +msgstr "" +"如果二进制数据以 *suffix* 字符串结尾,并且 *suffix* 非空,返回 ``bytes[:-len(suffix)]``。 " +"否则,返回原始二进制数据的副本::" + +#: ../../library/stdtypes.rst:2665 +msgid "The *suffix* may be any :term:`bytes-like object`." +msgstr "*suffix* 可以是任意 :term:`bytes-like object`。" + +#: ../../library/stdtypes.rst:2678 +msgid "" +"Return a string decoded from the given bytes. Default encoding is " +"``'utf-8'``. *errors* may be given to set a different error handling scheme." +" The default for *errors* is ``'strict'``, meaning that encoding errors " +"raise a :exc:`UnicodeError`. Other possible values are ``'ignore'``, " +"``'replace'`` and any other name registered via " +":func:`codecs.register_error`, see section :ref:`error-handlers`. For a list" +" of possible encodings, see section :ref:`standard-encodings`." +msgstr "" +"返回从给定 bytes 解码出来的字符串。 默认编码为 ``'utf-8'``。 可以给出 *errors* 来设置不同的错误处理方案。 " +"*errors* 的默认值为 ``'strict'``,表示编码错误会引发 :exc:`UnicodeError`。 其他可用的值为 " +"``'ignore'``, ``'replace'`` 以及任何其他通过 :func:`codecs.register_error` 注册的名称,请参阅" +" :ref:`error-handlers` 小节。 要查看可用的编码列表,请参阅 :ref:`standard-encodings` 小节。" + +#: ../../library/stdtypes.rst:2686 +msgid "" +"By default, the *errors* argument is not checked for best performances, but " +"only used at the first decoding error. Enable the :ref:`Python Development " +"Mode `, or use a debug build to check *errors*." +msgstr "" +"*errors* 参数默认不会被检查,以获得最佳性能,而只在第一次解码错误时使用。启用 :ref:`Python 开发模式 ` " +",或者使用调试构建来检查 *errors* 。" + +#: ../../library/stdtypes.rst:2692 +msgid "" +"Passing the *encoding* argument to :class:`str` allows decoding any " +":term:`bytes-like object` directly, without needing to make a temporary " +"bytes or bytearray object." +msgstr "" +"将 *encoding* 参数传给 :class:`str` 允许直接解码任何 :term:`bytes-like object`,无须创建临时的 " +"bytes 或 bytearray 对象。" + +#: ../../library/stdtypes.rst:2696 +msgid "Added support for keyword arguments." +msgstr "加入了对关键字参数的支持。" + +#: ../../library/stdtypes.rst:2706 +msgid "" +"Return ``True`` if the binary data ends with the specified *suffix*, " +"otherwise return ``False``. *suffix* can also be a tuple of suffixes to " +"look for. With optional *start*, test beginning at that position. With " +"optional *end*, stop comparing at that position." +msgstr "" +"如果二进制数据以指定的 *suffix* 结束则返回 ``True``,否则返回 ``False``。 *suffix* " +"也可以为由多个供查找的后缀构成的元组。 如果有可选项 *start*,将从所指定位置开始检查。 如果有可选项 *end*,将在所指定位置停止比较。" + +#: ../../library/stdtypes.rst:2711 +msgid "The suffix(es) to search for may be any :term:`bytes-like object`." +msgstr "要搜索的后缀可以是任意 :term:`bytes-like object`。" + +#: ../../library/stdtypes.rst:2717 +msgid "" +"Return the lowest index in the data where the subsequence *sub* is found, " +"such that *sub* is contained in the slice ``s[start:end]``. Optional " +"arguments *start* and *end* are interpreted as in slice notation. Return " +"``-1`` if *sub* is not found." +msgstr "" +"返回子序列 *sub* 在数据中被找到的最小索引,*sub* 包含于切片 ``s[start:end]`` 之内。 可选参数 *start* 与 " +"*end* 会被解读为切片表示法。 如果 *sub* 未被找到则返回 ``-1``。" + +#: ../../library/stdtypes.rst:2727 +msgid "" +"The :meth:`~bytes.find` method should be used only if you need to know the " +"position of *sub*. To check if *sub* is a substring or not, use the " +":keyword:`in` operator::" +msgstr "" +":meth:`~bytes.find` 方法应该只在你需要知道 *sub* 所在位置时使用。 要检查 *sub* 是否为子串,请使用 " +":keyword:`in` 操作符::" + +#: ../../library/stdtypes.rst:2741 +msgid "" +"Like :meth:`~bytes.find`, but raise :exc:`ValueError` when the subsequence " +"is not found." +msgstr "类似于 :meth:`~bytes.find`,但在找不到子序列时会引发 :exc:`ValueError`。" + +#: ../../library/stdtypes.rst:2754 +msgid "" +"Return a bytes or bytearray object which is the concatenation of the binary " +"data sequences in *iterable*. A :exc:`TypeError` will be raised if there " +"are any values in *iterable* that are not :term:`bytes-like objects `, including :class:`str` objects. The separator between " +"elements is the contents of the bytes or bytearray object providing this " +"method." +msgstr "" +"返回一个由 *iterable* 中的二进制数据序列拼接而成的 bytes 或 bytearray 对象。 如果 *iterable* 中存在任何非 " +":term:`字节类对象 ` 包括存在 :class:`str` 对象值则会引发 " +":exc:`TypeError`。 提供该方法的 bytes 或 bytearray 对象的内容将作为元素之间的分隔。" + +#: ../../library/stdtypes.rst:2765 +msgid "" +"This static method returns a translation table usable for " +":meth:`bytes.translate` that will map each character in *from* into the " +"character at the same position in *to*; *from* and *to* must both be " +":term:`bytes-like objects ` and have the same length." +msgstr "" +"此静态方法返回一个可用于 :meth:`bytes.translate` 的转换对照表,它将把 *from* 中的每个字符映射为 *to* " +"中相同位置上的字符;*from* 与 *to* 必须都是 :term:`字节类对象 ` 并且具有相同的长度。" + +#: ../../library/stdtypes.rst:2776 +msgid "" +"Split the sequence at the first occurrence of *sep*, and return a 3-tuple " +"containing the part before the separator, the separator itself or its " +"bytearray copy, and the part after the separator. If the separator is not " +"found, return a 3-tuple containing a copy of the original sequence, followed" +" by two empty bytes or bytearray objects." +msgstr "" +"在 *sep* 首次出现的位置拆分序列,返回一个 3 元组,其中包含分隔符之前的部分、分隔符本身或其 bytearray 副本,以及分隔符之后的部分。 " +"如果分隔符未找到,则返回的 3 元组中包含原序列以及两个空的 bytes 或 bytearray 对象。" + +#: ../../library/stdtypes.rst:2783 ../../library/stdtypes.rst:2840 +msgid "The separator to search for may be any :term:`bytes-like object`." +msgstr "要搜索的分隔符可以是任意 :term:`bytes-like object`。" + +#: ../../library/stdtypes.rst:2789 +msgid "" +"Return a copy of the sequence with all occurrences of subsequence *old* " +"replaced by *new*. If the optional argument *count* is given, only the " +"first *count* occurrences are replaced." +msgstr "" +"返回序列的副本,其中出现的所有子序列 *old* 都将被替换为 *new*。 如果给出了可选参数 *count*,则只替换前 *count* 次出现。" + +#: ../../library/stdtypes.rst:2793 +msgid "" +"The subsequence to search for and its replacement may be any :term:`bytes-" +"like object`." +msgstr "要搜索的子序列及其替换序列可以是任意 :term:`bytes-like object`。" + +#: ../../library/stdtypes.rst:2805 +msgid "" +"Return the highest index in the sequence where the subsequence *sub* is " +"found, such that *sub* is contained within ``s[start:end]``. Optional " +"arguments *start* and *end* are interpreted as in slice notation. Return " +"``-1`` on failure." +msgstr "" +"返回子序列 *sub* 在序列内被找到的最大(最右)索引,这样 *sub* 将包含在 ``s[start:end]`` 当中。 可选参数 *start*" +" 与 *end* 会被解读为切片表示法。 如果未找到则返回 ``-1``。" + +#: ../../library/stdtypes.rst:2820 +msgid "" +"Like :meth:`~bytes.rfind` but raises :exc:`ValueError` when the subsequence " +"*sub* is not found." +msgstr "类似于 :meth:`~bytes.rfind`,但在子序列 *sub* 未找到时会引发 :exc:`ValueError`。" + +#: ../../library/stdtypes.rst:2833 +msgid "" +"Split the sequence at the last occurrence of *sep*, and return a 3-tuple " +"containing the part before the separator, the separator itself or its " +"bytearray copy, and the part after the separator. If the separator is not " +"found, return a 3-tuple containing two empty bytes or bytearray objects, " +"followed by a copy of the original sequence." +msgstr "" +"在 *sep* 最后一次出现的位置拆分序列,返回一个 3 元组,其中包含分隔符之前的部分,分隔符本身或其 bytearray " +"副本,以及分隔符之后的部分。 如果分隔符未找到,则返回的 3 元组中包含两个空的 bytes 或 bytearray 对象以及原序列的副本。" + +#: ../../library/stdtypes.rst:2846 +msgid "" +"Return ``True`` if the binary data starts with the specified *prefix*, " +"otherwise return ``False``. *prefix* can also be a tuple of prefixes to " +"look for. With optional *start*, test beginning at that position. With " +"optional *end*, stop comparing at that position." +msgstr "" +"如果二进制数据以指定的 *prefix* 开头则返回 ``True``,否则返回 ``False``。 *prefix* " +"也可以为由多个供查找的前缀构成的元组。 如果有可选项 *start*,将从所指定位置开始检查。 如果有可选项 *end*,将在所指定位置停止比较。" + +#: ../../library/stdtypes.rst:2851 +msgid "The prefix(es) to search for may be any :term:`bytes-like object`." +msgstr "要搜索的前缀可以是任意 :term:`bytes-like object`。" + +#: ../../library/stdtypes.rst:2857 +msgid "" +"Return a copy of the bytes or bytearray object where all bytes occurring in " +"the optional argument *delete* are removed, and the remaining bytes have " +"been mapped through the given translation table, which must be a bytes " +"object of length 256." +msgstr "" +"返回原 bytes 或 bytearray 对象的副本,移除其中所有在可选参数 *delete* 中出现的 bytes,其余 bytes " +"将通过给定的转换表进行映射,该转换表必须是长度为 256 的 bytes 对象。" + +#: ../../library/stdtypes.rst:2862 +msgid "" +"You can use the :func:`bytes.maketrans` method to create a translation " +"table." +msgstr "你可以使用 :func:`bytes.maketrans` 方法来创建转换表。" + +#: ../../library/stdtypes.rst:2865 +msgid "" +"Set the *table* argument to ``None`` for translations that only delete " +"characters::" +msgstr "对于仅需移除字符的转换,请将 *table* 参数设为 ``None``::" + +#: ../../library/stdtypes.rst:2871 +msgid "*delete* is now supported as a keyword argument." +msgstr "现在支持将 *delete* 作为关键字参数。" + +#: ../../library/stdtypes.rst:2875 +msgid "" +"The following methods on bytes and bytearray objects have default behaviours" +" that assume the use of ASCII compatible binary formats, but can still be " +"used with arbitrary binary data by passing appropriate arguments. Note that " +"all of the bytearray methods in this section do *not* operate in place, and " +"instead produce new objects." +msgstr "" +"以下 bytes 和 bytearray 对象的方法的默认行为会假定使用兼容 ASCII 的二进制格式,但通过传入适当的参数仍然可用于任意二进制数据。 " +"请注意本小节中所有的 bytearray 方法都 *不是* 原地执行操作,而是会产生新的对象。" + +#: ../../library/stdtypes.rst:2884 +msgid "" +"Return a copy of the object centered in a sequence of length *width*. " +"Padding is done using the specified *fillbyte* (default is an ASCII space). " +"For :class:`bytes` objects, the original sequence is returned if *width* is " +"less than or equal to ``len(s)``." +msgstr "" +"返回原对象的副本,在长度为 *width* 的序列内居中,使用指定的 *fillbyte* 填充两边的空位(默认使用 ASCII 空格符)。 对于 " +":class:`bytes` 对象,如果 *width* 小于等于 ``len(s)`` 则返回原序列的副本。" + +#: ../../library/stdtypes.rst:2898 +msgid "" +"Return a copy of the object left justified in a sequence of length *width*. " +"Padding is done using the specified *fillbyte* (default is an ASCII space). " +"For :class:`bytes` objects, the original sequence is returned if *width* is " +"less than or equal to ``len(s)``." +msgstr "" +"返回原对象的副本,在长度为 *width* 的序列中靠左对齐。 使用指定的 *fillbyte* 填充空位(默认使用 ASCII 空格符)。 对于 " +":class:`bytes` 对象,如果 *width* 小于等于 ``len(s)`` 则返回原序列的副本。" + +#: ../../library/stdtypes.rst:2912 +msgid "" +"Return a copy of the sequence with specified leading bytes removed. The " +"*chars* argument is a binary sequence specifying the set of byte values to " +"be removed - the name refers to the fact this method is usually used with " +"ASCII characters. If omitted or ``None``, the *chars* argument defaults to " +"removing ASCII whitespace. The *chars* argument is not a prefix; rather, " +"all combinations of its values are stripped::" +msgstr "" +"返回原序列的副本,移除指定的前导字节。 *chars* 参数为指定要移除字节值集合的二进制序列 —— 这个名称表明此方法通常是用于 ASCII 字符。 " +"如果省略或为 ``None``,则 *chars* 参数默认移除 ASCII 空白符。 *chars* " +"参数并非指定单个前缀;而是会移除参数值的所有组合::" + +#: ../../library/stdtypes.rst:2924 +msgid "" +"The binary sequence of byte values to remove may be any :term:`bytes-like " +"object`. See :meth:`~bytes.removeprefix` for a method that will remove a " +"single prefix string rather than all of a set of characters. For example::" +msgstr "" +"要移除的二进制序列可以是任意 :term:`bytes-like object` 。 要删除单个前缀字符串,而不是全部给定集合中的字符,请参见 " +":meth:`str.removeprefix` 方法。 例如:" + +#: ../../library/stdtypes.rst:2943 +msgid "" +"Return a copy of the object right justified in a sequence of length *width*." +" Padding is done using the specified *fillbyte* (default is an ASCII space)." +" For :class:`bytes` objects, the original sequence is returned if *width* is" +" less than or equal to ``len(s)``." +msgstr "" +"返回原对象的副本,在长度为 *width* 的序列中靠右对齐。 使用指定的 *fillbyte* 填充空位(默认使用 ASCII 空格符)。 对于 " +":class:`bytes` 对象,如果 *width* 小于等于 ``len(s)`` 则返回原序列的副本。" + +#: ../../library/stdtypes.rst:2957 +msgid "" +"Split the binary sequence into subsequences of the same type, using *sep* as" +" the delimiter string. If *maxsplit* is given, at most *maxsplit* splits are" +" done, the *rightmost* ones. If *sep* is not specified or ``None``, any " +"subsequence consisting solely of ASCII whitespace is a separator. Except for" +" splitting from the right, :meth:`rsplit` behaves like :meth:`split` which " +"is described in detail below." +msgstr "" +"将二进制序列拆分为相同类型的子序列,使用 *sep* 作为分隔符。 如果给出了 *maxsplit*,则最多进行 *maxsplit* 次拆分,从 " +"*最右边* 开始。 如果 *sep* 未指定或为 ``None``,任何只包含 ASCII 空白符的子序列都会被作为分隔符。 " +"除了从右边开始拆分,:meth:`rsplit` 的其他行为都类似于下文所述的 :meth:`split`。" + +#: ../../library/stdtypes.rst:2968 +msgid "" +"Return a copy of the sequence with specified trailing bytes removed. The " +"*chars* argument is a binary sequence specifying the set of byte values to " +"be removed - the name refers to the fact this method is usually used with " +"ASCII characters. If omitted or ``None``, the *chars* argument defaults to " +"removing ASCII whitespace. The *chars* argument is not a suffix; rather, " +"all combinations of its values are stripped::" +msgstr "" +"返回原序列的副本,移除指定的末尾字节。 *chars* 参数为指定要移除字节值集合的二进制序列 —— 这个名称表明此方法通常是用于 ASCII 字符。 " +"如果省略或为 ``None``,则 *chars* 参数默认移除 ASCII 空白符。 *chars* " +"参数并非指定单个后缀;而是会移除参数值的所有组合::" + +#: ../../library/stdtypes.rst:2980 +msgid "" +"The binary sequence of byte values to remove may be any :term:`bytes-like " +"object`. See :meth:`~bytes.removesuffix` for a method that will remove a " +"single suffix string rather than all of a set of characters. For example::" +msgstr "" +"要移除的二进制序列可以是任意 :term:`bytes-like object` 。 要删除单个后缀字符串,而不是全部给定集合中的字符,请参见 " +":meth:`str.removesuffix` 方法。 例如:" + +#: ../../library/stdtypes.rst:2999 +msgid "" +"Split the binary sequence into subsequences of the same type, using *sep* as" +" the delimiter string. If *maxsplit* is given and non-negative, at most " +"*maxsplit* splits are done (thus, the list will have at most ``maxsplit+1`` " +"elements). If *maxsplit* is not specified or is ``-1``, then there is no " +"limit on the number of splits (all possible splits are made)." +msgstr "" +"将二进制序列拆分为相同类型的子序列,使用 *sep* 作为分隔符。 如果给出了 *maxsplit* 且非负值,则最多进行 *maxsplit* " +"次拆分(因此,列表最多会有 ``maxsplit+1`` 个元素)。 如果 *maxsplit* 未指定或为 " +"``-1``,则不限制拆分次数(进行所有可能的拆分)。" + +#: ../../library/stdtypes.rst:3005 +msgid "" +"If *sep* is given, consecutive delimiters are not grouped together and are " +"deemed to delimit empty subsequences (for example, ``b'1,,2'.split(b',')`` " +"returns ``[b'1', b'', b'2']``). The *sep* argument may consist of a " +"multibyte sequence (for example, ``b'1<>2<>3'.split(b'<>')`` returns " +"``[b'1', b'2', b'3']``). Splitting an empty sequence with a specified " +"separator returns ``[b'']`` or ``[bytearray(b'')]`` depending on the type of" +" object being split. The *sep* argument may be any :term:`bytes-like " +"object`." +msgstr "" +"如果给出了 *sep*,则连续的分隔符不会被组合在一起而是被视为分隔空子序列 (例如 ``b'1,,2'.split(b',')`` 将返回 " +"``[b'1', b'', b'2']``)。 *sep* 参数可能为一个多字节序列 (例如 ``b'1<>2<>3'.split(b'<>')`` " +"将返回 ``[b'1', b'2', b'3']``)。 使用指定的分隔符拆分空序列将返回 ``[b'']`` 或 " +"``[bytearray(b'')]``,具体取决于被拆分对象的类型。 *sep* 参数可以是任意 :term:`bytes-like object`。" + +#: ../../library/stdtypes.rst:3023 +msgid "" +"If *sep* is not specified or is ``None``, a different splitting algorithm is" +" applied: runs of consecutive ASCII whitespace are regarded as a single " +"separator, and the result will contain no empty strings at the start or end " +"if the sequence has leading or trailing whitespace. Consequently, splitting" +" an empty sequence or a sequence consisting solely of ASCII whitespace " +"without a specified separator returns ``[]``." +msgstr "" +"如果 *sep* 未指定或为 ``None``,则会应用另一种拆分算法:连续的 ASCII " +"空白符会被视为单个分隔符,其结果将不包含序列开头或末尾的空白符。 因此,在不指定分隔符的情况下对空序列或仅包含 ASCII 空白符的序列进行拆分将返回 " +"``[]``。" + +#: ../../library/stdtypes.rst:3044 +msgid "" +"Return a copy of the sequence with specified leading and trailing bytes " +"removed. The *chars* argument is a binary sequence specifying the set of " +"byte values to be removed - the name refers to the fact this method is " +"usually used with ASCII characters. If omitted or ``None``, the *chars* " +"argument defaults to removing ASCII whitespace. The *chars* argument is not " +"a prefix or suffix; rather, all combinations of its values are stripped::" +msgstr "" +"返回原序列的副本,移除指定的开头和末尾字节。 *chars* 参数为指定要移除字节值集合的二进制序列 —— 这个名称表明此方法通常是用于 ASCII " +"字符。 如果省略或为 ``None``,则 *chars* 参数默认移除 ASCII 空白符。 *chars* " +"参数并非指定单个前缀或后缀;而是会移除参数值的所有组合::" + +#: ../../library/stdtypes.rst:3057 +msgid "" +"The binary sequence of byte values to remove may be any :term:`bytes-like " +"object`." +msgstr "要移除的字节值二进制序列可以是任意 :term:`bytes-like object`。" + +#: ../../library/stdtypes.rst:3066 +msgid "" +"The following methods on bytes and bytearray objects assume the use of ASCII" +" compatible binary formats and should not be applied to arbitrary binary " +"data. Note that all of the bytearray methods in this section do *not* " +"operate in place, and instead produce new objects." +msgstr "" +"以下 bytes 和 bytearray 对象的方法会假定使用兼容 ASCII 的二进制格式,不应当被应用于任意二进制数据。 请注意本小节中所有的 " +"bytearray 方法都 *不是* 原地执行操作,而是会产生新的对象。" + +#: ../../library/stdtypes.rst:3074 +msgid "" +"Return a copy of the sequence with each byte interpreted as an ASCII " +"character, and the first byte capitalized and the rest lowercased. Non-ASCII" +" byte values are passed through unchanged." +msgstr "" +"返回原序列的副本,其中每个字节将都将被解读为一个 ASCII 字符,并且第一个字节的字符大写而其余的小写。 非 ASCII 字节值将保持原样不变。" + +#: ../../library/stdtypes.rst:3087 +msgid "" +"Return a copy of the sequence where all ASCII tab characters are replaced by" +" one or more ASCII spaces, depending on the current column and the given tab" +" size. Tab positions occur every *tabsize* bytes (default is 8, giving tab " +"positions at columns 0, 8, 16 and so on). To expand the sequence, the " +"current column is set to zero and the sequence is examined byte by byte. If" +" the byte is an ASCII tab character (``b'\\t'``), one or more space " +"characters are inserted in the result until the current column is equal to " +"the next tab position. (The tab character itself is not copied.) If the " +"current byte is an ASCII newline (``b'\\n'``) or carriage return " +"(``b'\\r'``), it is copied and the current column is reset to zero. Any " +"other byte value is copied unchanged and the current column is incremented " +"by one regardless of how the byte value is represented when printed::" +msgstr "" +"返回序列的副本,其中所有的 ASCII 制表符会由一个或多个 ASCII 空格替换,具体取决于当前列位置和给定的制表符宽度。 每 *tabsize* " +"个字节设为一个制表位(默认值 8 时设定的制表位在列 0, 8, 16 依次类推)。 要展开序列,当前列位置将被设为零并逐一检查序列中的每个字节。 " +"如果字节为 ASCII 制表符 (``b'\\t'``),则并在结果中插入一个或多个空格符,直到当前列等于下一个制表位。 (制表符本身不会被复制。) " +"如果当前字节为 ASCII 换行符 (``b'\\n'``) 或回车符 (``b'\\r'``),它会被复制并将当前列重设为零。 " +"任何其他字节会被不加修改地复制并将当前列加一,不论该字节值在被打印时会如何显示::" + +#: ../../library/stdtypes.rst:3115 +msgid "" +"Return ``True`` if all bytes in the sequence are alphabetical ASCII " +"characters or ASCII decimal digits and the sequence is not empty, ``False`` " +"otherwise. Alphabetic ASCII characters are those byte values in the sequence" +" ``b'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ'``. ASCII decimal " +"digits are those byte values in the sequence ``b'0123456789'``." +msgstr "" +"如果序列中所有字节都是字母类 ASCII 字符或 ASCII 十进制数码并且序列非空则返回 ``True`` ,否则返回 ``False`` 。 字母类" +" ASCII 字符就是字节值包含在序列 " +"``b'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ'`` 中的字符。 ASCII " +"十进制数码就是字节值包含在序列 ``b'0123456789'`` 中的字符。" + +#: ../../library/stdtypes.rst:3132 +msgid "" +"Return ``True`` if all bytes in the sequence are alphabetic ASCII characters" +" and the sequence is not empty, ``False`` otherwise. Alphabetic ASCII " +"characters are those byte values in the sequence " +"``b'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ'``." +msgstr "" +"如果序列中所有字节都是字母类 ASCII 字符并且序列不非空则返回 ``True`` ,否则返回 ``False`` 。 字母类 ASCII " +"字符就是字节值包含在序列 ``b'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ'`` " +"中的字符。" + +#: ../../library/stdtypes.rst:3148 +msgid "" +"Return ``True`` if the sequence is empty or all bytes in the sequence are " +"ASCII, ``False`` otherwise. ASCII bytes are in the range 0-0x7F." +msgstr "" +"如果序列为空或序列中所有字节都是 ASCII 字节则返回 ``True`` ,否则返回 ``False`` 。 ASCII 字节的取值范围是 " +"0-0x7F。" + +#: ../../library/stdtypes.rst:3158 +msgid "" +"Return ``True`` if all bytes in the sequence are ASCII decimal digits and " +"the sequence is not empty, ``False`` otherwise. ASCII decimal digits are " +"those byte values in the sequence ``b'0123456789'``." +msgstr "" +"如果序列中所有字节都是 ASCII 十进制数码并且序列非空则返回 ``True`` ,否则返回 ``False`` 。 ASCII " +"十进制数码就是字节值包含在序列 ``b'0123456789'`` 中的字符。" + +#: ../../library/stdtypes.rst:3173 +msgid "" +"Return ``True`` if there is at least one lowercase ASCII character in the " +"sequence and no uppercase ASCII characters, ``False`` otherwise." +msgstr "如果序列中至少有一个小写的 ASCII 字符并且没有大写的 ASCII 字符则返回 ``True`` ,否则返回 ``False`` 。" + +#: ../../library/stdtypes.rst:3183 ../../library/stdtypes.rst:3225 +#: ../../library/stdtypes.rst:3241 ../../library/stdtypes.rst:3291 +#: ../../library/stdtypes.rst:3360 +msgid "" +"Lowercase ASCII characters are those byte values in the sequence " +"``b'abcdefghijklmnopqrstuvwxyz'``. Uppercase ASCII characters are those byte" +" values in the sequence ``b'ABCDEFGHIJKLMNOPQRSTUVWXYZ'``." +msgstr "" +"小写 ASCII 字符就是字节值包含在序列 ``b'abcdefghijklmnopqrstuvwxyz'`` 中的字符。 大写 ASCII " +"字符就是字节值包含在序列 ``b'ABCDEFGHIJKLMNOPQRSTUVWXYZ'`` 中的字符。" + +#: ../../library/stdtypes.rst:3191 +msgid "" +"Return ``True`` if all bytes in the sequence are ASCII whitespace and the " +"sequence is not empty, ``False`` otherwise. ASCII whitespace characters are" +" those byte values in the sequence ``b' \\t\\n\\r\\x0b\\f'`` (space, tab, " +"newline, carriage return, vertical tab, form feed)." +msgstr "" +"如果序列中所有字节都是 ASCII 空白符并且序列非空则返回 ``True`` ,否则返回 ``False`` 。 ASCII " +"空白符就是字节值包含在序列 ``b' \\t\\n\\r\\x0b\\f'`` (空格, 制表, 换行, 回车, 垂直制表, 进纸) 中的字符。" + +#: ../../library/stdtypes.rst:3200 +msgid "" +"Return ``True`` if the sequence is ASCII titlecase and the sequence is not " +"empty, ``False`` otherwise. See :meth:`bytes.title` for more details on the " +"definition of \"titlecase\"." +msgstr "" +"如果序列为 ASCII 标题大小写形式并且序列非空则返回 ``True`` ,否则返回 ``False`` 。 请参阅 " +":meth:`bytes.title` 了解有关“标题大小写”的详细定义。" + +#: ../../library/stdtypes.rst:3215 +msgid "" +"Return ``True`` if there is at least one uppercase alphabetic ASCII " +"character in the sequence and no lowercase ASCII characters, ``False`` " +"otherwise." +msgstr "如果序列中至少有一个大写字母 ASCII 字符并且没有小写 ASCII 字符则返回 ``True`` ,否则返回 ``False`` 。" + +#: ../../library/stdtypes.rst:3233 +msgid "" +"Return a copy of the sequence with all the uppercase ASCII characters " +"converted to their corresponding lowercase counterpart." +msgstr "返回原序列的副本,其所有大写 ASCII 字符均转换为对应的小写形式。" + +#: ../../library/stdtypes.rst:3258 +msgid "" +"Return a list of the lines in the binary sequence, breaking at ASCII line " +"boundaries. This method uses the :term:`universal newlines` approach to " +"splitting lines. Line breaks are not included in the resulting list unless " +"*keepends* is given and true." +msgstr "" +"返回由原二进制序列中各行组成的列表,在 ASCII 行边界符的位置拆分。 此方法使用 :term:`universal newlines` 方式来分行。" +" 结果列表中不包含换行符,除非给出了 *keepends* 且为真值。" + +#: ../../library/stdtypes.rst:3270 +msgid "" +"Unlike :meth:`~bytes.split` when a delimiter string *sep* is given, this " +"method returns an empty list for the empty string, and a terminal line break" +" does not result in an extra line::" +msgstr "" +"不同于 :meth:`~bytes.split`,当给出了分隔符 *sep* " +"时,对于空字符串此方法将返回一个空列表,而末尾的换行不会令结果中增加额外的行::" + +#: ../../library/stdtypes.rst:3283 +msgid "" +"Return a copy of the sequence with all the lowercase ASCII characters " +"converted to their corresponding uppercase counterpart and vice-versa." +msgstr "返回原序列的副本,其所有小写 ASCII 字符均转换为对应的大写形式,反之亦反。" + +#: ../../library/stdtypes.rst:3295 +msgid "" +"Unlike :func:`str.swapcase()`, it is always the case that " +"``bin.swapcase().swapcase() == bin`` for the binary versions. Case " +"conversions are symmetrical in ASCII, even though that is not generally true" +" for arbitrary Unicode code points." +msgstr "" +"不同于 :func:`str.swapcase()`,在些二进制版本下 ``bin.swapcase().swapcase() == bin`` " +"总是成立。 大小写转换在 ASCII 中是对称的,即使其对于任意 Unicode 码位来说并不总是成立。" + +#: ../../library/stdtypes.rst:3309 +msgid "" +"Return a titlecased version of the binary sequence where words start with an" +" uppercase ASCII character and the remaining characters are lowercase. " +"Uncased byte values are left unmodified." +msgstr "返回原二进制序列的标题版本,其中每个单词以一个大写 ASCII 字符为开头,其余字母为小写。 不区别大小写的字节值将保持原样不变。" + +#: ../../library/stdtypes.rst:3318 +msgid "" +"Lowercase ASCII characters are those byte values in the sequence " +"``b'abcdefghijklmnopqrstuvwxyz'``. Uppercase ASCII characters are those byte" +" values in the sequence ``b'ABCDEFGHIJKLMNOPQRSTUVWXYZ'``. All other byte " +"values are uncased." +msgstr "" +"小写 ASCII 字符就是字节值包含在序列 ``b'abcdefghijklmnopqrstuvwxyz'`` 中的字符。 大写 ASCII " +"字符就是字节值包含在序列 ``b'ABCDEFGHIJKLMNOPQRSTUVWXYZ'`` 中的字符。 所有其他字节值都不区分大小写。" + +#: ../../library/stdtypes.rst:3331 +msgid "" +"A workaround for apostrophes can be constructed using regular expressions::" +msgstr "可以使用正则表达式来构建针对撇号的特别处理::" + +#: ../../library/stdtypes.rst:3352 +msgid "" +"Return a copy of the sequence with all the lowercase ASCII characters " +"converted to their corresponding uppercase counterpart." +msgstr "返回原序列的副本,其所有小写 ASCII 字符均转换为对应的大写形式。" + +#: ../../library/stdtypes.rst:3373 +msgid "" +"Return a copy of the sequence left filled with ASCII ``b'0'`` digits to make" +" a sequence of length *width*. A leading sign prefix (``b'+'``/ ``b'-'``) is" +" handled by inserting the padding *after* the sign character rather than " +"before. For :class:`bytes` objects, the original sequence is returned if " +"*width* is less than or equal to ``len(seq)``." +msgstr "" +"返回原序列的副本,在左边填充 ``b'0'`` 数码使序列长度为 *width*。 正负值前缀 (``b'+'``/ ``b'-'``) " +"的处理方式是在正负符号 *之后* 填充而非在之前。 对于 :class:`bytes` 对象,如果 *width* 小于等于 ``len(seq)`` " +"则返回原序列。" + +#: ../../library/stdtypes.rst:3395 +msgid "``printf``-style Bytes Formatting" +msgstr "``printf`` 风格的字节串格式化" + +#: ../../library/stdtypes.rst:3412 +msgid "" +"The formatting operations described here exhibit a variety of quirks that " +"lead to a number of common errors (such as failing to display tuples and " +"dictionaries correctly). If the value being printed may be a tuple or " +"dictionary, wrap it in a tuple." +msgstr "" +"此处介绍的格式化操作具有多种怪异特性,可能导致许多常见错误(例如无法正确显示元组和字典)。 如果要打印的值可能为元组或字典,请将其放入一个元组中。" + +#: ../../library/stdtypes.rst:3417 +msgid "" +"Bytes objects (``bytes``/``bytearray``) have one unique built-in operation: " +"the ``%`` operator (modulo). This is also known as the bytes *formatting* or" +" *interpolation* operator. Given ``format % values`` (where *format* is a " +"bytes object), ``%`` conversion specifications in *format* are replaced with" +" zero or more elements of *values*. The effect is similar to using the " +":c:func:`sprintf` in the C language." +msgstr "" +"字节串对象 (``bytes``/``bytearray``) 具有一种特殊的内置操作:使用 ``%`` (取模) 运算符。 这也被称为字节串的 " +"*格式化* 或 *插值* 运算符。 对于 ``format % values`` (其中 *format* 为一个字节串对象),在 *format* " +"中的 ``%`` 转换标记符将被替换为零个或多个 *values* 条目。 其效果类似于在 C 语言中使用 :c:func:`sprintf`。" + +#: ../../library/stdtypes.rst:3424 +msgid "" +"If *format* requires a single argument, *values* may be a single non-tuple " +"object. [5]_ Otherwise, *values* must be a tuple with exactly the number of" +" items specified by the format bytes object, or a single mapping object (for" +" example, a dictionary)." +msgstr "" +"如果 *format* 要求一个单独参数,则 *values* 可以为一个非元组对象。 [5]_ 否则的话,*values* " +"必须或是是一个包含项数与格式字节串对象中指定的转换符项数相同的元组,或者是一个单独的映射对象(例如元组)。" + +#: ../../library/stdtypes.rst:3458 +msgid "" +"When the right argument is a dictionary (or other mapping type), then the " +"formats in the bytes object *must* include a parenthesised mapping key into " +"that dictionary inserted immediately after the ``'%'`` character. The " +"mapping key selects the value to be formatted from the mapping. For " +"example:" +msgstr "" +"当右边的参数为一个字典(或其他映射类型)时,字节串对象中的格式 *必须* 包含加圆括号的映射键,对应 ``'%'`` 字符之后字典中的每一项。 " +"映射键将从映射中选取要格式化的值。 例如:" + +#: ../../library/stdtypes.rst:3532 +msgid "Single byte (accepts integer or single byte objects)." +msgstr "单个字节(接受整数或单个字节对象)。" + +#: ../../library/stdtypes.rst:3535 +msgid "``'b'``" +msgstr "``'b'``" + +#: ../../library/stdtypes.rst:3535 +msgid "" +"Bytes (any object that follows the :ref:`buffer protocol ` or" +" has :meth:`__bytes__`)." +msgstr "字节串(任何遵循 :ref:`缓冲区协议 ` 或是具有 :meth:`__bytes__` 的对象)。" + +#: ../../library/stdtypes.rst:3539 +msgid "" +"``'s'`` is an alias for ``'b'`` and should only be used for Python2/3 code " +"bases." +msgstr "``'s'`` 是 ``'b'`` 的一个别名,只应当在基于 Python2/3 的代码中使用。" + +#: ../../library/stdtypes.rst:3542 +msgid "" +"Bytes (converts any Python object using ``repr(obj).encode('ascii', " +"'backslashreplace')``)." +msgstr "" +"字节串(使用 ``repr(obj).encode('ascii', 'backslashreplace')`` 来转换任意 Python 对象)。" + +#: ../../library/stdtypes.rst:3545 +msgid "" +"``'r'`` is an alias for ``'a'`` and should only be used for Python2/3 code " +"bases." +msgstr "``'r'`` 是 ``'a'`` 的一个别名,只应当在基于 Python2/3 的代码中使用。" + +#: ../../library/stdtypes.rst:3545 +msgid "\\(7)" +msgstr "\\(7)" + +#: ../../library/stdtypes.rst:3580 +msgid "" +"``b'%s'`` is deprecated, but will not be removed during the 3.x series." +msgstr "``b'%s'`` 已弃用,但在 3.x 系列中将不会被移除。" + +#: ../../library/stdtypes.rst:3583 +msgid "" +"``b'%r'`` is deprecated, but will not be removed during the 3.x series." +msgstr "``b'%r'`` 已弃用,但在 3.x 系列中将不会被移除。" + +#: ../../library/stdtypes.rst:3595 +msgid ":pep:`461` - Adding % formatting to bytes and bytearray" +msgstr ":pep:`461` - 为 bytes 和 bytearray 添加 % 格式化" + +#: ../../library/stdtypes.rst:3602 +msgid "Memory Views" +msgstr "内存视图" + +#: ../../library/stdtypes.rst:3604 +msgid "" +":class:`memoryview` objects allow Python code to access the internal data of" +" an object that supports the :ref:`buffer protocol ` without " +"copying." +msgstr "" +":class:`memoryview` 对象允许 Python 代码访问一个对象的内部数据,只要该对象支持 :ref:`缓冲区协议 " +"` 而无需进行拷贝。" + +#: ../../library/stdtypes.rst:3610 +msgid "" +"Create a :class:`memoryview` that references *object*. *object* must " +"support the buffer protocol. Built-in objects that support the buffer " +"protocol include :class:`bytes` and :class:`bytearray`." +msgstr "" +"创建一个引用 *object* 的 :class:`memoryview` 。 *object* 必须支持缓冲区协议。支持缓冲区协议的内置对象有 " +":class:`bytes` 和 :class:`bytearray` 。" + +#: ../../library/stdtypes.rst:3614 +msgid "" +"A :class:`memoryview` has the notion of an *element*, which is the atomic " +"memory unit handled by the originating *object*. For many simple types such" +" as :class:`bytes` and :class:`bytearray`, an element is a single byte, but " +"other types such as :class:`array.array` may have bigger elements." +msgstr "" +":class:`memoryview` 有 **元素** 的概念, **元素** 指由原始 *object* 处理的原子内存单元。对于许多简单的类型,如" +" :class:`bytes` 和 :class:`bytearray` ,一个元素是一个字节,但其他类型,如 :class:`array.array`" +" 可能有更大的元素。" + +#: ../../library/stdtypes.rst:3619 +msgid "" +"``len(view)`` is equal to the length of :class:`~memoryview.tolist`. If " +"``view.ndim = 0``, the length is 1. If ``view.ndim = 1``, the length is " +"equal to the number of elements in the view. For higher dimensions, the " +"length is equal to the length of the nested list representation of the view." +" The :class:`~memoryview.itemsize` attribute will give you the number of " +"bytes in a single element." +msgstr "" +"``len(view)`` 与 :class:`~memoryview.tolist` 的长度相等。 如果 ``view.ndim = " +"0``,则其长度为 1。 如果 ``view.ndim = 1``,则其长度等于 view 中元素的数量。 对于更高的维度,其长度等于表示 view " +"的嵌套列表的长度。 :class:`~memoryview.itemsize` 属性可向你给出单个元素所占的字节数。" + +#: ../../library/stdtypes.rst:3626 +msgid "" +"A :class:`memoryview` supports slicing and indexing to expose its data. One-" +"dimensional slicing will result in a subview::" +msgstr ":class:`memoryview` 支持通过切片和索引访问其元素。 一维切片的结果将是一个子视图::" + +#: ../../library/stdtypes.rst:3639 +msgid "" +"If :class:`~memoryview.format` is one of the native format specifiers from " +"the :mod:`struct` module, indexing with an integer or a tuple of integers is" +" also supported and returns a single *element* with the correct type. One-" +"dimensional memoryviews can be indexed with an integer or a one-integer " +"tuple. Multi-dimensional memoryviews can be indexed with tuples of exactly " +"*ndim* integers where *ndim* is the number of dimensions. Zero-dimensional " +"memoryviews can be indexed with the empty tuple." +msgstr "" +"如果 :class:`~memoryview.format` 是一个来自于 :mod:`struct` " +"模块的原生格式说明符,则也支持使用整数或由整数构成的元组进行索引,并返回具有正确类型的单个 *元素*。 " +"一维内存视图可以使用一个整数或由一个整数构成的元组进行索引。 多维内存视图可以使用由恰好 *ndim* 个整数构成的元素进行索引,*ndim* " +"即其维度。 零维内存视图可以使用空元组进行索引。" + +#: ../../library/stdtypes.rst:3648 +msgid "Here is an example with a non-byte format::" +msgstr "这里是一个使用非字节格式的例子::" + +#: ../../library/stdtypes.rst:3660 +msgid "" +"If the underlying object is writable, the memoryview supports one-" +"dimensional slice assignment. Resizing is not allowed::" +msgstr "如果下层对象是可写的,则内存视图支持一维切片赋值。 改变大小则不被允许::" + +#: ../../library/stdtypes.rst:3681 +msgid "" +"One-dimensional memoryviews of hashable (read-only) types with formats 'B', " +"'b' or 'c' are also hashable. The hash is defined as ``hash(m) == " +"hash(m.tobytes())``::" +msgstr "" +"由带有格式符号 'B', 'b' 或 'c' 的可哈希(只读)类型构成的一维内存视图同样是可哈希的。 哈希定义为 ``hash(m) == " +"hash(m.tobytes())``::" + +#: ../../library/stdtypes.rst:3693 +msgid "" +"One-dimensional memoryviews can now be sliced. One-dimensional memoryviews " +"with formats 'B', 'b' or 'c' are now hashable." +msgstr "一维内存视图现在可以被切片。 带有格式符号 'B', 'b' 或 'c' 的一维内存视图现在是可哈希的。" + +#: ../../library/stdtypes.rst:3697 +msgid "" +"memoryview is now registered automatically with " +":class:`collections.abc.Sequence`" +msgstr "内存视图现在会自动注册为 :class:`collections.abc.Sequence`" + +#: ../../library/stdtypes.rst:3701 +msgid "memoryviews can now be indexed with tuple of integers." +msgstr "内存视图现在可使用整数元组进行索引。" + +#: ../../library/stdtypes.rst:3704 +msgid ":class:`memoryview` has several methods:" +msgstr ":class:`memoryview` 具有以下一些方法:" + +#: ../../library/stdtypes.rst:3708 +msgid "" +"A memoryview and a :pep:`3118` exporter are equal if their shapes are " +"equivalent and if all corresponding values are equal when the operands' " +"respective format codes are interpreted using :mod:`struct` syntax." +msgstr "" +"memoryview 与 :pep:`3118` 中的导出器这两者如果形状相同,并且如果当使用 :mod:`struct` " +"语法解读操作数的相应格式代码时所有对应值都相同,则它们就是等价的。" + +#: ../../library/stdtypes.rst:3712 +msgid "" +"For the subset of :mod:`struct` format strings currently supported by " +":meth:`tolist`, ``v`` and ``w`` are equal if ``v.tolist() == w.tolist()``::" +msgstr "" +"对于 :meth:`tolist` 当前所支持的 :mod:`struct` 格式字符串子集,如果 ``v.tolist() == " +"w.tolist()`` 则 ``v`` 和 ``w`` 相等::" + +#: ../../library/stdtypes.rst:3731 +msgid "" +"If either format string is not supported by the :mod:`struct` module, then " +"the objects will always compare as unequal (even if the format strings and " +"buffer contents are identical)::" +msgstr "如果两边的格式字符串都不被 :mod:`struct` 模块所支持,则两对象比较结果总是不相等(即使格式字符串和缓冲区内容相同)::" + +#: ../../library/stdtypes.rst:3747 +msgid "" +"Note that, as with floating point numbers, ``v is w`` does *not* imply ``v " +"== w`` for memoryview objects." +msgstr "请注意,与浮点数的情况一样,对于内存视图对象来说,``v is w`` 也 *并不* 意味着 ``v == w``。" + +#: ../../library/stdtypes.rst:3750 +msgid "" +"Previous versions compared the raw memory disregarding the item format and " +"the logical array structure." +msgstr "之前的版本比较原始内存时会忽略条目的格式与逻辑数组结构。" + +#: ../../library/stdtypes.rst:3756 +msgid "" +"Return the data in the buffer as a bytestring. This is equivalent to " +"calling the :class:`bytes` constructor on the memoryview. ::" +msgstr "将缓冲区中的数据作为字节串返回。 这相当于在内存视图上调用 :class:`bytes` 构造器。 ::" + +#: ../../library/stdtypes.rst:3765 +msgid "" +"For non-contiguous arrays the result is equal to the flattened list " +"representation with all elements converted to bytes. :meth:`tobytes` " +"supports all format strings, including those that are not in :mod:`struct` " +"module syntax." +msgstr "" +"对于非连续数组,结果等于平面化表示的列表,其中所有元素都转换为字节串。 :meth:`tobytes` 支持所有格式字符串,不符合 " +":mod:`struct` 模块语法的那些也包括在内。" + +#: ../../library/stdtypes.rst:3770 +msgid "" +"*order* can be {'C', 'F', 'A'}. When *order* is 'C' or 'F', the data of the" +" original array is converted to C or Fortran order. For contiguous views, " +"'A' returns an exact copy of the physical memory. In particular, in-memory " +"Fortran order is preserved. For non-contiguous views, the data is converted " +"to C first. *order=None* is the same as *order='C'*." +msgstr "" +"*order* 可以为 {'C', 'F', 'A'}。 当 *order* 为 'C' 或 'F' 时,原始数组的数据会被转换至 C 或 " +"Fortran 顺序。 对于连续视图,'A' 会返回物理内存的精确副本。 特别地,内存中的 Fortran " +"顺序会被保留。对于非连续视图,数据会先被转换为 C 形式。 *order=None* 与 *order='C'* 是相同的。" + +#: ../../library/stdtypes.rst:3779 +msgid "" +"Return a string object containing two hexadecimal digits for each byte in " +"the buffer. ::" +msgstr "返回一个字符串对象,其中分别以两个十六进制数码表示缓冲区里的每个字节。 ::" + +#: ../../library/stdtypes.rst:3788 +msgid "" +"Similar to :meth:`bytes.hex`, :meth:`memoryview.hex` now supports optional " +"*sep* and *bytes_per_sep* parameters to insert separators between bytes in " +"the hex output." +msgstr "" +"与 :meth:`bytes.hex` 相似, :meth:`memoryview.hex` 现在支持可选的 *sep* 和 " +"*bytes_per_sep* 参数以在十六进制输出的字节之间插入分隔符。" + +#: ../../library/stdtypes.rst:3795 +msgid "Return the data in the buffer as a list of elements. ::" +msgstr "将缓冲区内的数据以一个元素列表的形式返回。 ::" + +#: ../../library/stdtypes.rst:3805 +msgid "" +":meth:`tolist` now supports all single character native formats in " +":mod:`struct` module syntax as well as multi-dimensional representations." +msgstr ":meth:`tolist` 现在支持 :mod:`struct` 模块语法中的所有单字符原生格式以及多维表示形式。" + +#: ../../library/stdtypes.rst:3812 +msgid "" +"Return a readonly version of the memoryview object. The original memoryview" +" object is unchanged. ::" +msgstr "返回 memoryview 对象的只读版本。 原始的 memoryview 对象不会被改变。 ::" + +#: ../../library/stdtypes.rst:3831 +msgid "" +"Release the underlying buffer exposed by the memoryview object. Many " +"objects take special actions when a view is held on them (for example, a " +":class:`bytearray` would temporarily forbid resizing); therefore, calling " +"release() is handy to remove these restrictions (and free any dangling " +"resources) as soon as possible." +msgstr "" +"释放由内存视图对象所公开的底层缓冲区。 许多对象在被视图所获取时都会采取特殊动作(例如,:class:`bytearray` " +"将会暂时禁止调整大小);因此,调用 release() 可以方便地尽早去除这些限制(并释放任何多余的资源)。" + +#: ../../library/stdtypes.rst:3837 +msgid "" +"After this method has been called, any further operation on the view raises " +"a :class:`ValueError` (except :meth:`release()` itself which can be called " +"multiple times)::" +msgstr "" +"在此方法被调用后,任何对视图的进一步操作将引发 :class:`ValueError` (:meth:`release()` " +"本身除外,它可以被多次调用)::" + +#: ../../library/stdtypes.rst:3848 +msgid "" +"The context management protocol can be used for a similar effect, using the " +"``with`` statement::" +msgstr "使用 ``with`` 语句,可以通过上下文管理协议达到类似的效果::" + +#: ../../library/stdtypes.rst:3864 +msgid "" +"Cast a memoryview to a new format or shape. *shape* defaults to " +"``[byte_length//new_itemsize]``, which means that the result view will be " +"one-dimensional. The return value is a new memoryview, but the buffer itself" +" is not copied. Supported casts are 1D -> C-:term:`contiguous` and " +"C-contiguous -> 1D." +msgstr "" +"将内存视图转化为新的格式或形状。 *shape* 默认为 ``[byte_length//new_itemsize]``,这意味着结果视图将是一维的。 " +"返回值是一个新的内存视图,但缓冲区本身不会被复制。 支持的转化有 1D -> C-:term:`contiguous` 和 C-contiguous " +"-> 1D。" + +#: ../../library/stdtypes.rst:3870 +msgid "" +"The destination format is restricted to a single element native format in " +":mod:`struct` syntax. One of the formats must be a byte format ('B', 'b' or " +"'c'). The byte length of the result must be the same as the original length." +msgstr "" +"目标格式仅限于 :mod:`struct` 语法中的单一元素原生格式。 其中一种格式必须为字节格式 ('B', 'b' 或 'c')。 " +"结果的字节长度必须与原始长度相同。" + +#: ../../library/stdtypes.rst:3875 +msgid "Cast 1D/long to 1D/unsigned bytes::" +msgstr "将 1D/long 转换为 1D/unsigned bytes::" + +#: ../../library/stdtypes.rst:3898 +msgid "Cast 1D/unsigned bytes to 1D/char::" +msgstr "将 1D/unsigned bytes 转换为 1D/char::" + +#: ../../library/stdtypes.rst:3911 +msgid "Cast 1D/bytes to 3D/ints to 1D/signed char::" +msgstr "将 1D/bytes 转换为 3D/ints 再转换为 1D/signed char::" + +#: ../../library/stdtypes.rst:3937 +msgid "Cast 1D/unsigned long to 2D/unsigned long::" +msgstr "将 1D/unsigned long 转换为 2D/unsigned long::" + +#: ../../library/stdtypes.rst:3951 +msgid "The source format is no longer restricted when casting to a byte view." +msgstr "当转换为字节视图时,源格式将不再受限。" + +#: ../../library/stdtypes.rst:3954 +msgid "There are also several readonly attributes available:" +msgstr "还存在一些可用的只读属性:" + +#: ../../library/stdtypes.rst:3958 +msgid "The underlying object of the memoryview::" +msgstr "内存视图的下层对象::" + +#: ../../library/stdtypes.rst:3969 +msgid "" +"``nbytes == product(shape) * itemsize == len(m.tobytes())``. This is the " +"amount of space in bytes that the array would use in a contiguous " +"representation. It is not necessarily equal to ``len(m)``::" +msgstr "" +"``nbytes == product(shape) * itemsize == len(m.tobytes())``。 " +"这是数组在连续表示时将会占用的空间总字节数。 它不一定等于 ``len(m)``::" + +#: ../../library/stdtypes.rst:3988 +msgid "Multi-dimensional arrays::" +msgstr "多维数组::" + +#: ../../library/stdtypes.rst:4005 +msgid "A bool indicating whether the memory is read only." +msgstr "一个表明内存是否只读的布尔值。" + +#: ../../library/stdtypes.rst:4009 +msgid "" +"A string containing the format (in :mod:`struct` module style) for each " +"element in the view. A memoryview can be created from exporters with " +"arbitrary format strings, but some methods (e.g. :meth:`tolist`) are " +"restricted to native single element formats." +msgstr "" +"一个字符串,包含视图中每个元素的格式(表示为 :mod:`struct` 模块样式)。 内存视图可以从具有任意格式字符串的导出器创建,但某些方法 (例如" +" :meth:`tolist`) 仅限于原生的单元素格式。" + +#: ../../library/stdtypes.rst:4014 +msgid "" +"format ``'B'`` is now handled according to the struct module syntax. This " +"means that ``memoryview(b'abc')[0] == b'abc'[0] == 97``." +msgstr "" +"格式 ``'B'`` 现在会按照 struct 模块语法来处理。 这意味着 ``memoryview(b'abc')[0] == b'abc'[0] " +"== 97``。" + +#: ../../library/stdtypes.rst:4020 +msgid "The size in bytes of each element of the memoryview::" +msgstr "memoryview 中每个元素以字节表示的大小::" + +#: ../../library/stdtypes.rst:4033 +msgid "" +"An integer indicating how many dimensions of a multi-dimensional array the " +"memory represents." +msgstr "一个整数,表示内存所代表的多维数组具有多少个维度。" + +#: ../../library/stdtypes.rst:4038 +msgid "" +"A tuple of integers the length of :attr:`ndim` giving the shape of the " +"memory as an N-dimensional array." +msgstr "一个整数元组,通过 :attr:`ndim` 的长度值给出内存所代表的 N 维数组的形状。" + +#: ../../library/stdtypes.rst:4041 ../../library/stdtypes.rst:4049 +msgid "An empty tuple instead of ``None`` when ndim = 0." +msgstr "当 ndim = 0 时值为空元组而不再为 ``None``。" + +#: ../../library/stdtypes.rst:4046 +msgid "" +"A tuple of integers the length of :attr:`ndim` giving the size in bytes to " +"access each element for each dimension of the array." +msgstr "一个整数元组,通过 :attr:`ndim` 的长度给出以字节表示的大小,以便访问数组中每个维度上的每个元素。" + +#: ../../library/stdtypes.rst:4054 +msgid "Used internally for PIL-style arrays. The value is informational only." +msgstr "供 PIL 风格的数组内部使用。 该值仅作为参考信息。" + +#: ../../library/stdtypes.rst:4058 +msgid "A bool indicating whether the memory is C-:term:`contiguous`." +msgstr "一个表明内存是否为 C-:term:`contiguous` 的布尔值。" + +#: ../../library/stdtypes.rst:4064 +msgid "A bool indicating whether the memory is Fortran :term:`contiguous`." +msgstr "一个表明内存是否为 Fortran :term:`contiguous` 的布尔值。" + +#: ../../library/stdtypes.rst:4070 +msgid "A bool indicating whether the memory is :term:`contiguous`." +msgstr "一个表明内存是否为 :term:`contiguous` 的布尔值。" + +#: ../../library/stdtypes.rst:4078 +msgid "Set Types --- :class:`set`, :class:`frozenset`" +msgstr "集合类型 --- :class:`set`, :class:`frozenset`" + +#: ../../library/stdtypes.rst:4082 +msgid "" +"A :dfn:`set` object is an unordered collection of distinct :term:`hashable` " +"objects. Common uses include membership testing, removing duplicates from a " +"sequence, and computing mathematical operations such as intersection, union," +" difference, and symmetric difference. (For other containers see the built-" +"in :class:`dict`, :class:`list`, and :class:`tuple` classes, and the " +":mod:`collections` module.)" +msgstr "" +":dfn:`set` 对象是由具有唯一性的 :term:`hashable` 对象所组成的无序多项集。 " +"常见的用途包括成员检测、从序列中去除重复项以及数学中的集合类计算,例如交集、并集、差集与对称差集等等。 (关于其他容器对象请参看 " +":class:`dict`, :class:`list` 与 :class:`tuple` 等内置类,以及 :mod:`collections` " +"模块。)" + +#: ../../library/stdtypes.rst:4089 +msgid "" +"Like other collections, sets support ``x in set``, ``len(set)``, and ``for x" +" in set``. Being an unordered collection, sets do not record element " +"position or order of insertion. Accordingly, sets do not support indexing, " +"slicing, or other sequence-like behavior." +msgstr "" +"与其他多项集一样,集合也支持 ``x in set``, ``len(set)`` 和 ``for x in set``。 " +"作为一种无序的多项集,集合并不记录元素位置或插入顺序。 相应地,集合不支持索引、切片或其他序列类的操作。" + +#: ../../library/stdtypes.rst:4094 +msgid "" +"There are currently two built-in set types, :class:`set` and " +":class:`frozenset`. The :class:`set` type is mutable --- the contents can be" +" changed using methods like :meth:`~set.add` and :meth:`~set.remove`. Since" +" it is mutable, it has no hash value and cannot be used as either a " +"dictionary key or as an element of another set. The :class:`frozenset` type" +" is immutable and :term:`hashable` --- its contents cannot be altered after " +"it is created; it can therefore be used as a dictionary key or as an element" +" of another set." +msgstr "" +"目前有两种内置集合类型,:class:`set` 和 :class:`frozenset`。 :class:`set` 类型是可变的 --- " +"其内容可以使用 :meth:`~set.add` 和 :meth:`~set.remove` 这样的方法来改变。 " +"由于是可变类型,它没有哈希值,且不能被用作字典的键或其他集合的元素。 :class:`frozenset` 类型是不可变并且为 " +":term:`hashable` --- 其内容在被创建后不能再改变;因此它可以被用作字典的键或其他集合的元素。" + +#: ../../library/stdtypes.rst:4102 +msgid "" +"Non-empty sets (not frozensets) can be created by placing a comma-separated " +"list of elements within braces, for example: ``{'jack', 'sjoerd'}``, in " +"addition to the :class:`set` constructor." +msgstr "" +"除了可以使用 :class:`set` 构造器,非空的 set (不是 frozenset) " +"还可以通过将以逗号分隔的元素列表包含于花括号之内来创建,例如: ``{'jack', 'sjoerd'}``。" + +#: ../../library/stdtypes.rst:4106 +msgid "The constructors for both classes work the same:" +msgstr "两个类的构造器具有相同的作用方式:" + +#: ../../library/stdtypes.rst:4111 +msgid "" +"Return a new set or frozenset object whose elements are taken from " +"*iterable*. The elements of a set must be :term:`hashable`. To represent " +"sets of sets, the inner sets must be :class:`frozenset` objects. If " +"*iterable* is not specified, a new empty set is returned." +msgstr "" +"返回一个新的 set 或 frozenset 对象,其元素来自于 *iterable*。 集合的元素必须为 :term:`hashable`。 " +"要表示由集合对象构成的集合,所有的内层集合必须为 :class:`frozenset` 对象。 如果未指定 " +"*iterable*,则将返回一个新的空集合。" + +#: ../../library/stdtypes.rst:4117 +msgid "Sets can be created by several means:" +msgstr "集合可用多种方式来创建:" + +#: ../../library/stdtypes.rst:4119 +msgid "" +"Use a comma-separated list of elements within braces: ``{'jack', 'sjoerd'}``" +msgstr "使用花括号内以逗号分隔元素的方式: ``{'jack', 'sjoerd'}``" + +#: ../../library/stdtypes.rst:4120 +msgid "" +"Use a set comprehension: ``{c for c in 'abracadabra' if c not in 'abc'}``" +msgstr "使用集合推导式: ``{c for c in 'abracadabra' if c not in 'abc'}``" + +#: ../../library/stdtypes.rst:4121 +msgid "" +"Use the type constructor: ``set()``, ``set('foobar')``, ``set(['a', 'b', " +"'foo'])``" +msgstr "使用类型构造器: ``set()``, ``set('foobar')``, ``set(['a', 'b', 'foo'])``" + +#: ../../library/stdtypes.rst:4123 +msgid "" +"Instances of :class:`set` and :class:`frozenset` provide the following " +"operations:" +msgstr ":class:`set` 和 :class:`frozenset` 的实例提供以下操作:" + +#: ../../library/stdtypes.rst:4128 +msgid "Return the number of elements in set *s* (cardinality of *s*)." +msgstr "返回集合 *s* 中的元素数量(即 *s* 的基数)。" + +#: ../../library/stdtypes.rst:4132 +msgid "Test *x* for membership in *s*." +msgstr "检测 *x* 是否为 *s* 中的成员。" + +#: ../../library/stdtypes.rst:4136 +msgid "Test *x* for non-membership in *s*." +msgstr "检测 *x* 是否非 *s* 中的成员。" + +#: ../../library/stdtypes.rst:4140 +msgid "" +"Return ``True`` if the set has no elements in common with *other*. Sets are" +" disjoint if and only if their intersection is the empty set." +msgstr "如果集合中没有与 *other* 共有的元素则返回 ``True``。 当且仅当两个集合的交集为空集合时,两者为不相交集合。" + +#: ../../library/stdtypes.rst:4146 +msgid "Test whether every element in the set is in *other*." +msgstr "检测是否集合中的每个元素都在 *other* 之中。" + +#: ../../library/stdtypes.rst:4150 +msgid "" +"Test whether the set is a proper subset of *other*, that is, ``set <= other " +"and set != other``." +msgstr "检测集合是否为 *other* 的真子集,即 ``set <= other and set != other``。" + +#: ../../library/stdtypes.rst:4156 +msgid "Test whether every element in *other* is in the set." +msgstr "检测是否 *other* 中的每个元素都在集合之中。" + +#: ../../library/stdtypes.rst:4160 +msgid "" +"Test whether the set is a proper superset of *other*, that is, ``set >= " +"other and set != other``." +msgstr "检测集合是否为 *other* 的真超集,即 ``set >= other and set != other``。" + +#: ../../library/stdtypes.rst:4166 +msgid "Return a new set with elements from the set and all others." +msgstr "返回一个新集合,其中包含来自原集合以及 others 指定的所有集合中的元素。" + +#: ../../library/stdtypes.rst:4171 +msgid "Return a new set with elements common to the set and all others." +msgstr "返回一个新集合,其中包含原集合以及 others 指定的所有集合中共有的元素。" + +#: ../../library/stdtypes.rst:4176 +msgid "Return a new set with elements in the set that are not in the others." +msgstr "返回一个新集合,其中包含原集合中在 others 指定的其他集合中不存在的元素。" + +#: ../../library/stdtypes.rst:4181 +msgid "" +"Return a new set with elements in either the set or *other* but not both." +msgstr "返回一个新集合,其中的元素或属于原集合或属于 *other* 指定的其他集合,但不能同时属于两者。" + +#: ../../library/stdtypes.rst:4185 +msgid "Return a shallow copy of the set." +msgstr "返回原集合的浅拷贝。" + +#: ../../library/stdtypes.rst:4188 +msgid "" +"Note, the non-operator versions of :meth:`union`, :meth:`intersection`, " +":meth:`difference`, and :meth:`symmetric_difference`, :meth:`issubset`, and " +":meth:`issuperset` methods will accept any iterable as an argument. In " +"contrast, their operator based counterparts require their arguments to be " +"sets. This precludes error-prone constructions like ``set('abc') & 'cbs'`` " +"in favor of the more readable ``set('abc').intersection('cbs')``." +msgstr "" +"请注意,非运算符版本的 :meth:`union`, :meth:`intersection`, :meth:`difference`,以及 " +":meth:`symmetric_difference`, :meth:`issubset` 和 :meth:`issuperset` " +"方法会接受任意可迭代对象作为参数。 相比之下,它们所对应的运算符版本则要求其参数为集合。 这就排除了容易出错的构造形式例如 ``set('abc') &" +" 'cbs'``,而推荐可读性更强的 ``set('abc').intersection('cbs')``。" + +#: ../../library/stdtypes.rst:4195 +msgid "" +"Both :class:`set` and :class:`frozenset` support set to set comparisons. Two" +" sets are equal if and only if every element of each set is contained in the" +" other (each is a subset of the other). A set is less than another set if " +"and only if the first set is a proper subset of the second set (is a subset," +" but is not equal). A set is greater than another set if and only if the " +"first set is a proper superset of the second set (is a superset, but is not " +"equal)." +msgstr "" +":class:`set` 和 :class:`frozenset` 均支持集合与集合的比较。 " +"两个集合当且仅当每个集合中的每个元素均包含于另一个集合之内(即各为对方的子集)时则相等。 " +"一个集合当且仅当其为另一个集合的真子集(即为后者的子集但两者不相等)时则小于另一个集合。 " +"一个集合当且仅当其为另一个集合的真超集(即为后者的超集但两者不相等)时则大于另一个集合。" + +#: ../../library/stdtypes.rst:4202 +msgid "" +"Instances of :class:`set` are compared to instances of :class:`frozenset` " +"based on their members. For example, ``set('abc') == frozenset('abc')`` " +"returns ``True`` and so does ``set('abc') in set([frozenset('abc')])``." +msgstr "" +":class:`set` 的实例与 :class:`frozenset` 的实例之间基于它们的成员进行比较。 例如 ``set('abc') == " +"frozenset('abc')`` 返回 ``True``,``set('abc') in set([frozenset('abc')])`` " +"也一样。" + +#: ../../library/stdtypes.rst:4206 +msgid "" +"The subset and equality comparisons do not generalize to a total ordering " +"function. For example, any two nonempty disjoint sets are not equal and are" +" not subsets of each other, so *all* of the following return ``False``: " +"``ab``." +msgstr "" +"子集与相等比较并不能推广为完全排序函数。 例如,任意两个非空且不相交的集合不相等且互不为对方的子集,因此以下 *所有* 比较均返回 ``False``:" +" ``ab``。" + +#: ../../library/stdtypes.rst:4211 +msgid "" +"Since sets only define partial ordering (subset relationships), the output " +"of the :meth:`list.sort` method is undefined for lists of sets." +msgstr "由于集合仅定义了部分排序(子集关系),因此由集合构成的列表 :meth:`list.sort` 方法的输出并无定义。" + +#: ../../library/stdtypes.rst:4214 +msgid "Set elements, like dictionary keys, must be :term:`hashable`." +msgstr "集合的元素,与字典的键类似,必须为 :term:`hashable`。" + +#: ../../library/stdtypes.rst:4216 +msgid "" +"Binary operations that mix :class:`set` instances with :class:`frozenset` " +"return the type of the first operand. For example: ``frozenset('ab') | " +"set('bc')`` returns an instance of :class:`frozenset`." +msgstr "" +"混合了 :class:`set` 实例与 :class:`frozenset` 的二进制位运算将返回与第一个操作数相同的类型。例如: " +"``frozenset('ab') | set('bc')`` 将返回 :class:`frozenset` 的实例。" + +#: ../../library/stdtypes.rst:4220 +msgid "" +"The following table lists operations available for :class:`set` that do not " +"apply to immutable instances of :class:`frozenset`:" +msgstr "下表列出了可用于 :class:`set` 而不能用于不可变的 :class:`frozenset` 实例的操作:" + +#: ../../library/stdtypes.rst:4226 +msgid "Update the set, adding elements from all others." +msgstr "更新集合,添加来自 others 中的所有元素。" + +#: ../../library/stdtypes.rst:4231 +msgid "Update the set, keeping only elements found in it and all others." +msgstr "更新集合,只保留其中在所有 others 中也存在的元素。" + +#: ../../library/stdtypes.rst:4236 +msgid "Update the set, removing elements found in others." +msgstr "更新集合,移除其中也存在于 others 中的元素。" + +#: ../../library/stdtypes.rst:4241 +msgid "" +"Update the set, keeping only elements found in either set, but not in both." +msgstr "更新集合,只保留存在于集合的一方而非共同存在的元素。" + +#: ../../library/stdtypes.rst:4245 +msgid "Add element *elem* to the set." +msgstr "将元素 *elem* 添加到集合中。" + +#: ../../library/stdtypes.rst:4249 +msgid "" +"Remove element *elem* from the set. Raises :exc:`KeyError` if *elem* is not" +" contained in the set." +msgstr "从集合中移除元素 *elem*。 如果 *elem* 不存在于集合中则会引发 :exc:`KeyError`。" + +#: ../../library/stdtypes.rst:4254 +msgid "Remove element *elem* from the set if it is present." +msgstr "如果元素 *elem* 存在于集合中则将其移除。" + +#: ../../library/stdtypes.rst:4258 +msgid "" +"Remove and return an arbitrary element from the set. Raises :exc:`KeyError`" +" if the set is empty." +msgstr "从集合中移除并返回任意一个元素。 如果集合为空则会引发 :exc:`KeyError`。" + +#: ../../library/stdtypes.rst:4263 +msgid "Remove all elements from the set." +msgstr "从集合中移除所有元素。" + +#: ../../library/stdtypes.rst:4266 +msgid "" +"Note, the non-operator versions of the :meth:`update`, " +":meth:`intersection_update`, :meth:`difference_update`, and " +":meth:`symmetric_difference_update` methods will accept any iterable as an " +"argument." +msgstr "" +"请注意,非运算符版本的 :meth:`update`, :meth:`intersection_update`, " +":meth:`difference_update` 和 :meth:`symmetric_difference_update` " +"方法将接受任意可迭代对象作为参数。" + +#: ../../library/stdtypes.rst:4271 +msgid "" +"Note, the *elem* argument to the :meth:`__contains__`, :meth:`remove`, and " +":meth:`discard` methods may be a set. To support searching for an " +"equivalent frozenset, a temporary one is created from *elem*." +msgstr "" +"请注意,:meth:`__contains__`, :meth:`remove` 和 :meth:`discard` 方法的 *elem* " +"参数可能是一个 set。 为支持对一个等价的 frozenset 进行搜索,会根据 *elem* 临时创建一个该类型对象。" + +#: ../../library/stdtypes.rst:4279 +msgid "Mapping Types --- :class:`dict`" +msgstr "映射类型 --- :class:`dict`" + +#: ../../library/stdtypes.rst:4289 +msgid "" +"A :term:`mapping` object maps :term:`hashable` values to arbitrary objects. " +"Mappings are mutable objects. There is currently only one standard mapping " +"type, the :dfn:`dictionary`. (For other containers see the built-in " +":class:`list`, :class:`set`, and :class:`tuple` classes, and the " +":mod:`collections` module.)" +msgstr "" +":term:`mapping` 对象会将 :term:`hashable` 值映射到任意对象。 映射属于可变对象。 目前仅有一种标准映射类型 " +":dfn:`字典`。 (关于其他容器对象请参看 :class:`list`, :class:`set` 与 :class:`tuple` 等内置类,以及" +" :mod:`collections` 模块。)" + +#: ../../library/stdtypes.rst:4295 +msgid "" +"A dictionary's keys are *almost* arbitrary values. Values that are not " +":term:`hashable`, that is, values containing lists, dictionaries or other " +"mutable types (that are compared by value rather than by object identity) " +"may not be used as keys. Numeric types used for keys obey the normal rules " +"for numeric comparison: if two numbers compare equal (such as ``1`` and " +"``1.0``) then they can be used interchangeably to index the same dictionary " +"entry. (Note however, that since computers store floating-point numbers as " +"approximations it is usually unwise to use them as dictionary keys.)" +msgstr "" +"字典的键 *几乎* 可以是任何值。 非 :term:`hashable` " +"的值,即包含列表、字典或其他可变类型的值(此类对象基于值而非对象标识进行比较)不可用作键。 数字类型用作键时遵循数字比较的一般规则:如果两个数值相等 " +"(例如 ``1`` 和 ``1.0``) 则两者可以被用来索引同一字典条目。 " +"(但是请注意,由于计算机对于浮点数存储的只是近似值,因此将其用作字典键是不明智的。)" + +#: ../../library/stdtypes.rst:4308 +msgid "" +"Return a new dictionary initialized from an optional positional argument and" +" a possibly empty set of keyword arguments." +msgstr "返回一个新的字典,基于可选的位置参数和可能为空的关键字参数集来初始化。" + +#: ../../library/stdtypes.rst:4311 +msgid "Dictionaries can be created by several means:" +msgstr "字典可用多种方式来创建:" + +#: ../../library/stdtypes.rst:4313 +msgid "" +"Use a comma-separated list of ``key: value`` pairs within braces: ``{'jack':" +" 4098, 'sjoerd': 4127}`` or ``{4098: 'jack', 4127: 'sjoerd'}``" +msgstr "" +"使用花括号内以逗号分隔 ``键: 值`` 对的方式: ``{'jack': 4098, 'sjoerd': 4127}`` or ``{4098: " +"'jack', 4127: 'sjoerd'}``" + +#: ../../library/stdtypes.rst:4315 +msgid "Use a dict comprehension: ``{}``, ``{x: x ** 2 for x in range(10)}``" +msgstr "使用字典推导式: ``{}``, ``{x: x ** 2 for x in range(10)}``" + +#: ../../library/stdtypes.rst:4316 +msgid "" +"Use the type constructor: ``dict()``, ``dict([('foo', 100), ('bar', " +"200)])``, ``dict(foo=100, bar=200)``" +msgstr "" +"使用类型构造器: ``dict()``, ``dict([('foo', 100), ('bar', 200)])``, ``dict(foo=100," +" bar=200)``" + +#: ../../library/stdtypes.rst:4319 +msgid "" +"If no positional argument is given, an empty dictionary is created. If a " +"positional argument is given and it is a mapping object, a dictionary is " +"created with the same key-value pairs as the mapping object. Otherwise, the" +" positional argument must be an :term:`iterable` object. Each item in the " +"iterable must itself be an iterable with exactly two objects. The first " +"object of each item becomes a key in the new dictionary, and the second " +"object the corresponding value. If a key occurs more than once, the last " +"value for that key becomes the corresponding value in the new dictionary." +msgstr "" +"如果没有给出位置参数,将创建一个空字典。 如果给出一个位置参数并且其属于映射对象,将创建一个具有与映射对象相同键值对的字典。 " +"否则的话,位置参数必须为一个 :term:`iterable` 对象。 该可迭代对象中的每一项本身必须为一个刚好包含两个元素的可迭代对象。 " +"每一项中的第一个对象将成为新字典的一个键,第二个对象将成为其对应的值。 如果一个键出现一次以上,该键的最后一个值将成为其在新字典中对应的值。" + +#: ../../library/stdtypes.rst:4329 +msgid "" +"If keyword arguments are given, the keyword arguments and their values are " +"added to the dictionary created from the positional argument. If a key " +"being added is already present, the value from the keyword argument replaces" +" the value from the positional argument." +msgstr "" +"如果给出了关键字参数,则关键字参数及其值会被加入到基于位置参数创建的字典。 如果要加入的键已存在,来自关键字参数的值将替代来自位置参数的值。" + +#: ../../library/stdtypes.rst:4334 +msgid "" +"To illustrate, the following examples all return a dictionary equal to " +"``{\"one\": 1, \"two\": 2, \"three\": 3}``::" +msgstr "作为演示,以下示例返回的字典均等于 ``{\"one\": 1, \"two\": 2, \"three\": 3}``::" + +#: ../../library/stdtypes.rst:4346 +msgid "" +"Providing keyword arguments as in the first example only works for keys that" +" are valid Python identifiers. Otherwise, any valid keys can be used." +msgstr "像第一个例子那样提供关键字参数的方式只能使用有效的 Python 标识符作为键。 其他方式则可使用任何有效的键。" + +#: ../../library/stdtypes.rst:4350 +msgid "" +"These are the operations that dictionaries support (and therefore, custom " +"mapping types should support too):" +msgstr "这些是字典所支持的操作(因而自定义的映射类型也应当支持):" + +#: ../../library/stdtypes.rst:4355 +msgid "Return a list of all the keys used in the dictionary *d*." +msgstr "返回字典 *d* 中使用的所有键的列表。" + +#: ../../library/stdtypes.rst:4359 +msgid "Return the number of items in the dictionary *d*." +msgstr "返回字典 *d* 中的项数。" + +#: ../../library/stdtypes.rst:4363 +msgid "" +"Return the item of *d* with key *key*. Raises a :exc:`KeyError` if *key* is" +" not in the map." +msgstr "返回 *d* 中以 *key* 为键的项。 如果映射中不存在 *key* 则会引发 :exc:`KeyError`。" + +#: ../../library/stdtypes.rst:4368 +msgid "" +"If a subclass of dict defines a method :meth:`__missing__` and *key* is not " +"present, the ``d[key]`` operation calls that method with the key *key* as " +"argument. The ``d[key]`` operation then returns or raises whatever is " +"returned or raised by the ``__missing__(key)`` call. No other operations or " +"methods invoke :meth:`__missing__`. If :meth:`__missing__` is not defined, " +":exc:`KeyError` is raised. :meth:`__missing__` must be a method; it cannot " +"be an instance variable::" +msgstr "" +"如果字典的子类定义了方法 :meth:`__missing__` 并且 *key* 不存在,则 ``d[key]`` 操作将调用该方法并附带键 " +"*key* 作为参数。 ``d[key]`` 随后将返回或引发 ``__missing__(key)`` 调用所返回或引发的任何对象或异常。 " +"没有其他操作或方法会唤起 :meth:`__missing__`。 如果未定义 :meth:`__missing__`,则会引发 " +":exc:`KeyError`。 :meth:`__missing__` 必须是一个方法;它不能是一个实例变量::" + +#: ../../library/stdtypes.rst:4386 +msgid "" +"The example above shows part of the implementation of " +":class:`collections.Counter`. A different ``__missing__`` method is used by" +" :class:`collections.defaultdict`." +msgstr "" +"上面的例子显示了 :class:`collections.Counter` 实现的部分代码。 还有另一个不同的 ``__missing__`` 方法是由" +" :class:`collections.defaultdict` 所使用的。" + +#: ../../library/stdtypes.rst:4392 +msgid "Set ``d[key]`` to *value*." +msgstr "将 ``d[key]`` 设为 *value*。" + +#: ../../library/stdtypes.rst:4396 +msgid "" +"Remove ``d[key]`` from *d*. Raises a :exc:`KeyError` if *key* is not in the" +" map." +msgstr "将 ``d[key]`` 从 *d* 中移除。 如果映射中不存在 *key* 则会引发 :exc:`KeyError`。" + +#: ../../library/stdtypes.rst:4401 +msgid "Return ``True`` if *d* has a key *key*, else ``False``." +msgstr "如果 *d* 中存在键 *key* 则返回 ``True``,否则返回 ``False``。" + +#: ../../library/stdtypes.rst:4405 +msgid "Equivalent to ``not key in d``." +msgstr "等价于 ``not key in d``。" + +#: ../../library/stdtypes.rst:4409 +msgid "" +"Return an iterator over the keys of the dictionary. This is a shortcut for " +"``iter(d.keys())``." +msgstr "返回以字典的键为元素的迭代器。 这是 ``iter(d.keys())`` 的快捷方式。" + +#: ../../library/stdtypes.rst:4414 +msgid "Remove all items from the dictionary." +msgstr "移除字典中的所有元素。" + +#: ../../library/stdtypes.rst:4418 +msgid "Return a shallow copy of the dictionary." +msgstr "返回原字典的浅拷贝。" + +#: ../../library/stdtypes.rst:4422 +msgid "" +"Create a new dictionary with keys from *iterable* and values set to *value*." +msgstr "使用来自 *iterable* 的键创建一个新字典,并将键值设为 *value*。" + +#: ../../library/stdtypes.rst:4424 +msgid "" +":meth:`fromkeys` is a class method that returns a new dictionary. *value* " +"defaults to ``None``. All of the values refer to just a single instance, so" +" it generally doesn't make sense for *value* to be a mutable object such as " +"an empty list. To get distinct values, use a :ref:`dict comprehension " +"` instead." +msgstr "" +":meth:`fromkeys` 是一个返回新字典的类方法。 *value* 默认为 ``None``。 所有值都只引用一个单独的实例,因此让 " +"*value* 成为一个可变对象例如空列表通常是没有意义的。 要获取不同的值,请改用 :ref:`字典推导式 `。" + +#: ../../library/stdtypes.rst:4432 +msgid "" +"Return the value for *key* if *key* is in the dictionary, else *default*. If" +" *default* is not given, it defaults to ``None``, so that this method never " +"raises a :exc:`KeyError`." +msgstr "" +"如果 *key* 存在于字典中则返回 *key* 的值,否则返回 *default*。 如果 *default* 未给出则默认为 " +"``None``,因而此方法绝不会引发 :exc:`KeyError`。" + +#: ../../library/stdtypes.rst:4438 +msgid "" +"Return a new view of the dictionary's items (``(key, value)`` pairs). See " +"the :ref:`documentation of view objects `." +msgstr "返回由字典项 (``(键, 值)`` 对) 组成的一个新视图。 参见 :ref:`视图对象文档 `。" + +#: ../../library/stdtypes.rst:4443 +msgid "" +"Return a new view of the dictionary's keys. See the :ref:`documentation of " +"view objects `." +msgstr "返回由字典键组成的一个新视图。 参见 :ref:`视图对象文档 `。" + +#: ../../library/stdtypes.rst:4448 +msgid "" +"If *key* is in the dictionary, remove it and return its value, else return " +"*default*. If *default* is not given and *key* is not in the dictionary, a " +":exc:`KeyError` is raised." +msgstr "" +"如果 *key* 存在于字典中则将其移除并返回其值,否则返回 *default*。 如果 *default* 未给出且 *key* " +"不存在于字典中,则会引发 :exc:`KeyError`。" + +#: ../../library/stdtypes.rst:4454 +msgid "" +"Remove and return a ``(key, value)`` pair from the dictionary. Pairs are " +"returned in :abbr:`LIFO (last-in, first-out)` order." +msgstr "从字典中移除并返回一个 ``(键, 值)`` 对。 键值对会按 :abbr:`LIFO (后进先出)` 的顺序被返回。" + +#: ../../library/stdtypes.rst:4457 +msgid "" +":meth:`popitem` is useful to destructively iterate over a dictionary, as " +"often used in set algorithms. If the dictionary is empty, calling " +":meth:`popitem` raises a :exc:`KeyError`." +msgstr "" +":meth:`popitem` 适用于对字典进行消耗性的迭代,这在集合算法中经常被使用。 如果字典为空,调用 :meth:`popitem` 将引发 " +":exc:`KeyError`。" + +#: ../../library/stdtypes.rst:4461 +msgid "" +"LIFO order is now guaranteed. In prior versions, :meth:`popitem` would " +"return an arbitrary key/value pair." +msgstr "现在会确保采用 LIFO 顺序。 在之前的版本中,:meth:`popitem` 会返回一个任意的键/值对。" + +#: ../../library/stdtypes.rst:4467 +msgid "" +"Return a reverse iterator over the keys of the dictionary. This is a " +"shortcut for ``reversed(d.keys())``." +msgstr "返回一个逆序获取字典键的迭代器。 这是 ``reversed(d.keys())`` 的快捷方式。" + +#: ../../library/stdtypes.rst:4474 +msgid "" +"If *key* is in the dictionary, return its value. If not, insert *key* with " +"a value of *default* and return *default*. *default* defaults to ``None``." +msgstr "" +"如果字典存在键 *key* ,返回它的值。如果不存在,插入值为 *default* 的键 *key* ,并返回 *default* 。 " +"*default* 默认为 ``None``。" + +#: ../../library/stdtypes.rst:4480 +msgid "" +"Update the dictionary with the key/value pairs from *other*, overwriting " +"existing keys. Return ``None``." +msgstr "使用来自 *other* 的键/值对更新字典,覆盖原有的键。 返回 ``None``。" + +#: ../../library/stdtypes.rst:4483 +msgid "" +":meth:`update` accepts either another dictionary object or an iterable of " +"key/value pairs (as tuples or other iterables of length two). If keyword " +"arguments are specified, the dictionary is then updated with those key/value" +" pairs: ``d.update(red=1, blue=2)``." +msgstr "" +":meth:`update` 接受另一个字典对象,或者一个包含键/值对(以长度为二的元组或其他可迭代对象表示)的可迭代对象。 " +"如果给出了关键字参数,则会以其所指定的键/值对更新字典: ``d.update(red=1, blue=2)``。" + +#: ../../library/stdtypes.rst:4490 +msgid "" +"Return a new view of the dictionary's values. See the :ref:`documentation " +"of view objects `." +msgstr "返回由字典值组成的一个新视图。 参见 :ref:`视图对象文档 `。" + +#: ../../library/stdtypes.rst:4493 +msgid "" +"An equality comparison between one ``dict.values()`` view and another will " +"always return ``False``. This also applies when comparing ``dict.values()`` " +"to itself::" +msgstr "" +"两个 ``dict.values()`` 视图之间的相等性比较将总是返回 ``False``。 这在 ``dict.values()`` " +"与其自身比较时也同样适用::" + +#: ../../library/stdtypes.rst:4503 +msgid "" +"Create a new dictionary with the merged keys and values of *d* and *other*, " +"which must both be dictionaries. The values of *other* take priority when " +"*d* and *other* share keys." +msgstr "" +"合并 *d* 和 *other* 中的键和值来创建一个新的字典,两者必须都是字典。当 *d* 和 *other* 有相同键时, *other* " +"的值优先。" + +#: ../../library/stdtypes.rst:4511 +msgid "" +"Update the dictionary *d* with keys and values from *other*, which may be " +"either a :term:`mapping` or an :term:`iterable` of key/value pairs. The " +"values of *other* take priority when *d* and *other* share keys." +msgstr "" +"用 *other* 的键和值更新字典 *d* ,*other* 可以是 :term:`mapping` 或 :term:`iterable` " +"的键值对。当 *d* 和 *other* 有相同键时, *other* 的值优先。" + +#: ../../library/stdtypes.rst:4517 +msgid "" +"Dictionaries compare equal if and only if they have the same ``(key, " +"value)`` pairs (regardless of ordering). Order comparisons ('<', '<=', '>='," +" '>') raise :exc:`TypeError`." +msgstr "" +"两个字典的比较当且仅当它们具有相同的 ``(键, 值)`` 对时才会相等(不考虑顺序)。 排序比较 ('<', '<=', '>=', '>') 会引发" +" :exc:`TypeError`。" + +#: ../../library/stdtypes.rst:4521 +msgid "" +"Dictionaries preserve insertion order. Note that updating a key does not " +"affect the order. Keys added after deletion are inserted at the end. ::" +msgstr "字典会保留插入时的顺序。 请注意对键的更新不会影响顺序。 删除并再次添加的键将被插入到末尾。 ::" + +#: ../../library/stdtypes.rst:4539 +msgid "" +"Dictionary order is guaranteed to be insertion order. This behavior was an " +"implementation detail of CPython from 3.6." +msgstr "字典顺序会确保为插入顺序。 此行为是自 3.6 版开始的 CPython 实现细节。" + +#: ../../library/stdtypes.rst:4543 +msgid "Dictionaries and dictionary views are reversible. ::" +msgstr "字典和字典视图都是可逆的。 ::" + +#: ../../library/stdtypes.rst:4555 +msgid "Dictionaries are now reversible." +msgstr "字典现在是可逆的。" + +#: ../../library/stdtypes.rst:4560 +msgid "" +":class:`types.MappingProxyType` can be used to create a read-only view of a " +":class:`dict`." +msgstr ":class:`types.MappingProxyType` 可被用来创建一个 :class:`dict` 的只读视图。" + +#: ../../library/stdtypes.rst:4567 +msgid "Dictionary view objects" +msgstr "字典视图对象" + +#: ../../library/stdtypes.rst:4569 +msgid "" +"The objects returned by :meth:`dict.keys`, :meth:`dict.values` and " +":meth:`dict.items` are *view objects*. They provide a dynamic view on the " +"dictionary's entries, which means that when the dictionary changes, the view" +" reflects these changes." +msgstr "" +"由 :meth:`dict.keys`, :meth:`dict.values` 和 :meth:`dict.items` 所返回的对象是 " +"*视图对象*。 该对象提供字典条目的一个动态视图,这意味着当字典改变时,视图也会相应改变。" + +#: ../../library/stdtypes.rst:4574 +msgid "" +"Dictionary views can be iterated over to yield their respective data, and " +"support membership tests:" +msgstr "字典视图可以被迭代以产生与其对应的数据,并支持成员检测:" + +#: ../../library/stdtypes.rst:4579 +msgid "Return the number of entries in the dictionary." +msgstr "返回字典中的条目数。" + +#: ../../library/stdtypes.rst:4583 +msgid "" +"Return an iterator over the keys, values or items (represented as tuples of " +"``(key, value)``) in the dictionary." +msgstr "返回字典中的键、值或项(以 ``(键, 值)`` 为元素的元组表示)的迭代器。" + +#: ../../library/stdtypes.rst:4586 +msgid "" +"Keys and values are iterated over in insertion order. This allows the " +"creation of ``(value, key)`` pairs using :func:`zip`: ``pairs = " +"zip(d.values(), d.keys())``. Another way to create the same list is ``pairs" +" = [(v, k) for (k, v) in d.items()]``." +msgstr "" +"键和值是按插入时的顺序进行迭代的。 这样就允许使用 :func:`zip` 来创建 ``(值, 键)`` 对: ``pairs = " +"zip(d.values(), d.keys())``。 另一个创建相同列表的方式是 ``pairs = [(v, k) for (k, v) in " +"d.items()]``." + +#: ../../library/stdtypes.rst:4591 +msgid "" +"Iterating views while adding or deleting entries in the dictionary may raise" +" a :exc:`RuntimeError` or fail to iterate over all entries." +msgstr "在添加或删除字典中的条目期间对视图进行迭代可能引发 :exc:`RuntimeError` 或者无法完全迭代所有条目。" + +#: ../../library/stdtypes.rst:4594 +msgid "Dictionary order is guaranteed to be insertion order." +msgstr "字典顺序会确保为插入顺序。" + +#: ../../library/stdtypes.rst:4599 +msgid "" +"Return ``True`` if *x* is in the underlying dictionary's keys, values or " +"items (in the latter case, *x* should be a ``(key, value)`` tuple)." +msgstr "如果 *x* 是对应字典中存在的键、值或项(在最后一种情况下 *x* 应为一个 ``(键, 值)`` 元组) 则返回 ``True``。" + +#: ../../library/stdtypes.rst:4604 +msgid "" +"Return a reverse iterator over the keys, values or items of the dictionary. " +"The view will be iterated in reverse order of the insertion." +msgstr "返回一个逆序获取字典键、值或项的迭代器。 视图将按与插入时相反的顺序进行迭代。" + +#: ../../library/stdtypes.rst:4607 +msgid "Dictionary views are now reversible." +msgstr "字典视图现在是可逆的。" + +#: ../../library/stdtypes.rst:4611 +msgid "" +"Keys views are set-like since their entries are unique and hashable. If all" +" values are hashable, so that ``(key, value)`` pairs are unique and " +"hashable, then the items view is also set-like. (Values views are not " +"treated as set-like since the entries are generally not unique.) For set-" +"like views, all of the operations defined for the abstract base class " +":class:`collections.abc.Set` are available (for example, ``==``, ``<``, or " +"``^``)." +msgstr "" +"键视图类似于集合,因为其条目不重复且可哈希。 如果所有值都是可哈希的,即 ``(键, 值)`` 对也是不重复且可哈希的,那么条目视图也会类似于集合。 " +"(值视图则不被视为类似于集合,因其条目通常都是有重复的。) 对于类似于集合的视图,为抽象基类 :class:`collections.abc.Set` " +"所定义的全部操作都是有效的 (例如 ``==``, ``<`` 或 ``^``)。" + +#: ../../library/stdtypes.rst:4618 +msgid "An example of dictionary view usage::" +msgstr "一个使用字典视图的示例::" + +#: ../../library/stdtypes.rst:4653 +msgid "Context Manager Types" +msgstr "上下文管理器类型" + +#: ../../library/stdtypes.rst:4660 +msgid "" +"Python's :keyword:`with` statement supports the concept of a runtime context" +" defined by a context manager. This is implemented using a pair of methods " +"that allow user-defined classes to define a runtime context that is entered " +"before the statement body is executed and exited when the statement ends:" +msgstr "" +"Python 的 :keyword:`with` 语句支持通过上下文管理器所定义的运行时上下文这一概念。 " +"此对象的实现使用了一对专门方法,允许用户自定义类来定义运行时上下文,在语句体被执行前进入该上下文,并在语句执行完毕时退出该上下文:" + +#: ../../library/stdtypes.rst:4668 +msgid "" +"Enter the runtime context and return either this object or another object " +"related to the runtime context. The value returned by this method is bound " +"to the identifier in the :keyword:`!as` clause of :keyword:`with` statements" +" using this context manager." +msgstr "" +"进入运行时上下文并返回此对象或关联到该运行时上下文的其他对象。 此方法的返回值会绑定到使用此上下文管理器的 :keyword:`with` 语句的 " +":keyword:`!as` 子句中的标识符。" + +#: ../../library/stdtypes.rst:4673 +msgid "" +"An example of a context manager that returns itself is a :term:`file " +"object`. File objects return themselves from __enter__() to allow " +":func:`open` to be used as the context expression in a :keyword:`with` " +"statement." +msgstr "" +"一个返回其自身的上下文管理器的例子是 :term:`file object`。 文件对象会从 __enter__() 返回其自身,以允许 " +":func:`open` 被用作 :keyword:`with` 语句中的上下文表达式。" + +#: ../../library/stdtypes.rst:4677 +msgid "" +"An example of a context manager that returns a related object is the one " +"returned by :func:`decimal.localcontext`. These managers set the active " +"decimal context to a copy of the original decimal context and then return " +"the copy. This allows changes to be made to the current decimal context in " +"the body of the :keyword:`with` statement without affecting code outside the" +" :keyword:`!with` statement." +msgstr "" +"一个返回关联对象的上下文管理器的例子是 :func:`decimal.localcontext` 所返回的对象。 此种管理器会将活动的 decimal " +"上下文设为原始 decimal 上下文的一个副本并返回该副本。 这允许对 :keyword:`with` 语句的语句体中的当前 decimal " +"上下文进行更改,而不会影响 :keyword:`!with` 语句以外的代码。" + +#: ../../library/stdtypes.rst:4687 +msgid "" +"Exit the runtime context and return a Boolean flag indicating if any " +"exception that occurred should be suppressed. If an exception occurred while" +" executing the body of the :keyword:`with` statement, the arguments contain " +"the exception type, value and traceback information. Otherwise, all three " +"arguments are ``None``." +msgstr "" +"退出运行时上下文并返回一个布尔值旗标来表明所发生的任何异常是否应当被屏蔽。 如果在执行 :keyword:`with` " +"语句的语句体期间发生了异常,则参数会包含异常的类型、值以及回溯信息。 在其他情况下三个参数均为 ``None``。" + +#: ../../library/stdtypes.rst:4692 +msgid "" +"Returning a true value from this method will cause the :keyword:`with` " +"statement to suppress the exception and continue execution with the " +"statement immediately following the :keyword:`!with` statement. Otherwise " +"the exception continues propagating after this method has finished " +"executing. Exceptions that occur during execution of this method will " +"replace any exception that occurred in the body of the :keyword:`!with` " +"statement." +msgstr "" +"自此方法返回一个真值将导致 :keyword:`with` 语句屏蔽异常并继续执行紧随在 :keyword:`!with` 语句之后的语句。 " +"否则异常将在此方法结束执行后继续传播。 在此方法执行期间发生的异常将会取代 :keyword:`!with` 语句的语句体中发生的任何异常。" + +#: ../../library/stdtypes.rst:4699 +msgid "" +"The exception passed in should never be reraised explicitly - instead, this " +"method should return a false value to indicate that the method completed " +"successfully and does not want to suppress the raised exception. This allows" +" context management code to easily detect whether or not an :meth:`__exit__`" +" method has actually failed." +msgstr "" +"传入的异常绝对不应当被显式地重新引发 —— 相反地,此方法应当返回一个假值以表明方法已成功完成并且不希望屏蔽被引发的异常。 " +"这允许上下文管理代码方便地检测 :meth:`__exit__` 方法是否确实已失败。" + +#: ../../library/stdtypes.rst:4705 +msgid "" +"Python defines several context managers to support easy thread " +"synchronisation, prompt closure of files or other objects, and simpler " +"manipulation of the active decimal arithmetic context. The specific types " +"are not treated specially beyond their implementation of the context " +"management protocol. See the :mod:`contextlib` module for some examples." +msgstr "" +"Python 定义了一些上下文管理器来支持简易的线程同步、文件或其他对象的快速关闭,以及更方便地操作活动的十进制算术上下文。 " +"除了实现上下文管理协议以外,不同类型不会被特殊处理。 请参阅 :mod:`contextlib` 模块查看相关的示例。" + +#: ../../library/stdtypes.rst:4711 +msgid "" +"Python's :term:`generator`\\s and the :class:`contextlib.contextmanager` " +"decorator provide a convenient way to implement these protocols. If a " +"generator function is decorated with the :class:`contextlib.contextmanager` " +"decorator, it will return a context manager implementing the necessary " +":meth:`~contextmanager.__enter__` and :meth:`~contextmanager.__exit__` " +"methods, rather than the iterator produced by an undecorated generator " +"function." +msgstr "" +"Python 的 :term:`generator` 和 :class:`contextlib.contextmanager` " +"装饰器提供了实现这些协议的便捷方式。 如果使用 :class:`contextlib.contextmanager` " +"装饰器来装饰一个生成器函数,它将返回一个实现了必要的 :meth:`~contextmanager.__enter__` 和 " +":meth:`~contextmanager.__exit__` 方法的上下文管理器,而不再是由未经装饰的生成器所产生的迭代器。" + +#: ../../library/stdtypes.rst:4718 +msgid "" +"Note that there is no specific slot for any of these methods in the type " +"structure for Python objects in the Python/C API. Extension types wanting to" +" define these methods must provide them as a normal Python accessible " +"method. Compared to the overhead of setting up the runtime context, the " +"overhead of a single class dictionary lookup is negligible." +msgstr "" +"请注意,Python/C API 中 Python 对象的类型结构中并没有针对这些方法的专门槽位。 想要定义这些方法的扩展类型必须将它们作为普通的 " +"Python 可访问方法来提供。 与设置运行时上下文的开销相比,单个类字典查找的开销可以忽略不计。" + +#: ../../library/stdtypes.rst:4728 +msgid "Generic Alias Type" +msgstr "GenericAlias 类型" + +#: ../../library/stdtypes.rst:4734 +msgid "" +"``GenericAlias`` objects are generally created by :ref:`subscripting " +"` a class. They are most often used with :ref:`container " +"classes `, such as :class:`list` or :class:`dict`. For " +"example, ``list[int]`` is a ``GenericAlias`` object created by subscripting " +"the ``list`` class with the argument :class:`int`. ``GenericAlias`` objects " +"are intended primarily for use with :term:`type annotations `." +msgstr "" +"``GenericAlias`` 对象通常是通过 :ref:`抽取 ` 一个类来创建的。 它们最常被用于 " +":ref:`容器类 `,如 :class:`list` 或 :class:`dict`。 " +"举例来说,``list[int]`` 这个 ``GenericAlias`` 对象是通过附带 :class:`int` 参数抽取 ``list`` " +"类来创建的。 ``GenericAlias`` 对象的主要目的是用于 :term:`类型标注 `。" + +#: ../../library/stdtypes.rst:4744 +msgid "" +"It is generally only possible to subscript a class if the class implements " +"the special method :meth:`~object.__class_getitem__`." +msgstr "通常一个类只有在实现了特殊方法 :meth:`~object.__class_getitem__` 时才支持抽取操作。" + +#: ../../library/stdtypes.rst:4747 +msgid "" +"A ``GenericAlias`` object acts as a proxy for a :term:`generic type`, " +"implementing *parameterized generics*." +msgstr "``GenericAlias`` 对象可作为 :term:`generic type` 的代理,实现了 *形参化泛型*。" + +#: ../../library/stdtypes.rst:4750 +msgid "" +"For a container class, the argument(s) supplied to a :ref:`subscription " +"` of the class may indicate the type(s) of the elements an " +"object contains. For example, ``set[bytes]`` can be used in type annotations" +" to signify a :class:`set` in which all the elements are of type " +":class:`bytes`." +msgstr "" +"对于一个容器类,提供给类的 :ref:`抽取 ` 操作的参数可以指明对象所包含的元素类型。 " +"例如,``set[bytes]`` 可在类型标注中用来表示一个 :class:`set` 中的所有元素均为 :class:`bytes` 类型。" + +#: ../../library/stdtypes.rst:4756 +msgid "" +"For a class which defines :meth:`~object.__class_getitem__` but is not a " +"container, the argument(s) supplied to a subscription of the class will " +"often indicate the return type(s) of one or more methods defined on an " +"object. For example, :mod:`regular expressions ` can be used on both the" +" :class:`str` data type and the :class:`bytes` data type:" +msgstr "" +"对于一个定义了 :meth:`~object.__class_getitem__` " +"但不属于容器的类,提供给类的抽取操作的参数往往会指明在对象上定义的一个或多个方法的返回值类型。 例如,:mod:`正则表达式 ` 可以被用在 " +":class:`str` 数据类型和 :class:`bytes` 数据类型上:" + +#: ../../library/stdtypes.rst:4762 +msgid "" +"If ``x = re.search('foo', 'foo')``, ``x`` will be a :ref:`re.Match ` object where the return values of ``x.group(0)`` and ``x[0]`` will" +" both be of type :class:`str`. We can represent this kind of object in type " +"annotations with the ``GenericAlias`` ``re.Match[str]``." +msgstr "" +"如果 ``x = re.search('foo', 'foo')``,则 ``x`` 将为一个 :ref:`re.Match ` 对象而 ``x.group(0)`` 和 ``x[0]`` 的返回值将均为 :class:`str` 类型。 " +"我们可以在类型标注中使用 ``GenericAlias`` ``re.Match[str]`` 来代表这种对象。" + +#: ../../library/stdtypes.rst:4768 +msgid "" +"If ``y = re.search(b'bar', b'bar')``, (note the ``b`` for :class:`bytes`), " +"``y`` will also be an instance of ``re.Match``, but the return values of " +"``y.group(0)`` and ``y[0]`` will both be of type :class:`bytes`. In type " +"annotations, we would represent this variety of :ref:`re.Match ` objects with ``re.Match[bytes]``." +msgstr "" +"如果 ``y = re.search(b'bar', b'bar')``,(注意 ``b`` 表示 :class:`bytes`),则 ``y`` " +"也将为一个 ``re.Match`` 的实例,但 ``y.group(0)`` 和 ``y[0]`` 的返回值将均为 :class:`bytes` " +"类型。 在类型标注中,我们将使用 ``re.Match[bytes]`` 来代表这种形式的 :ref:`re.Match ` 对象。" + +#: ../../library/stdtypes.rst:4774 +msgid "" +"``GenericAlias`` objects are instances of the class " +":class:`types.GenericAlias`, which can also be used to create " +"``GenericAlias`` objects directly." +msgstr "" +"``GenericAlias`` 对象是 :class:`types.GenericAlias` 类的实例,该类也可被用来直接创建 " +"``GenericAlias`` 对象。" + +#: ../../library/stdtypes.rst:4780 +msgid "" +"Creates a ``GenericAlias`` representing a type ``T`` parameterized by types " +"*X*, *Y*, and more depending on the ``T`` used. For example, a function " +"expecting a :class:`list` containing :class:`float` elements::" +msgstr "" +"创建一个代表由类型 *X*, *Y* 来参数化的类型 ``T`` 的 ``GenericAlias``,此类型会更依赖于所使用的 ``T``。 " +"例如,一个接受包含 :class:`float` 元素的 :class:`list` 的函数::" + +#: ../../library/stdtypes.rst:4788 +msgid "" +"Another example for :term:`mapping` objects, using a :class:`dict`, which is" +" a generic type expecting two type parameters representing the key type and " +"the value type. In this example, the function expects a ``dict`` with keys " +"of type :class:`str` and values of type :class:`int`::" +msgstr "" +"另一个例子是关于 :term:`mapping` 对象的,用到了 " +":class:`dict`,泛型的两个类型参数分别代表了键类型和值类型。本例中的函数需要一个 ``dict``,其键的类型为 " +":class:`str`,值的类型为 :class:`int`:。" + +#: ../../library/stdtypes.rst:4796 +msgid "" +"The builtin functions :func:`isinstance` and :func:`issubclass` do not " +"accept ``GenericAlias`` types for their second argument::" +msgstr "" +"内置函数 :func:`isinstance` 和 :func:`issubclass` 不接受第二个参数为 ``GenericAlias`` 类型:" + +#: ../../library/stdtypes.rst:4804 +msgid "" +"The Python runtime does not enforce :term:`type annotations `. " +"This extends to generic types and their type parameters. When creating a " +"container object from a ``GenericAlias``, the elements in the container are " +"not checked against their type. For example, the following code is " +"discouraged, but will run without errors::" +msgstr "" +"Python 运行时不会强制执行 :term:`类型标注 `。 这种行为扩展到了泛型及其类型形参。 当由 " +"``GenericAlias`` 创建容器对象时,并不会检查容器中为元素指定的类型。 例如,以下代码虽然不被鼓励,但运行时并不会报错::" + +#: ../../library/stdtypes.rst:4814 +msgid "" +"Furthermore, parameterized generics erase type parameters during object " +"creation::" +msgstr "不仅如此,在创建对象的过程中,应用了参数后的泛型还会抹除类型参数:" + +#: ../../library/stdtypes.rst:4825 +msgid "" +"Calling :func:`repr` or :func:`str` on a generic shows the parameterized " +"type::" +msgstr "在泛型上调用 :func:`repr` 或 :func:`str` 会显示应用参数之后的类型:" + +#: ../../library/stdtypes.rst:4833 +msgid "" +"The :meth:`~object.__getitem__` method of generic containers will raise an " +"exception to disallow mistakes like ``dict[str][str]``::" +msgstr "" +"调用泛型容器的 :meth:`~object.__getitem__` 方法将引发异常以防出现 ``dict[str][str]`` 之类的错误::" + +#: ../../library/stdtypes.rst:4841 +msgid "" +"However, such expressions are valid when :ref:`type variables ` " +"are used. The index must have as many elements as there are type variable " +"items in the ``GenericAlias`` object's :attr:`~genericalias.__args__`. ::" +msgstr "" +"不过,当使用了 :ref:`类型变量 ` 时这种表达式是无效的。 索引必须有与 ``GenericAlias`` 对象的 " +":attr:`~genericalias.__args__` 中的类型变量条目数量相当的元素。 ::" + +#: ../../library/stdtypes.rst:4852 +msgid "Standard Generic Classes" +msgstr "标准泛型类" + +#: ../../library/stdtypes.rst:4854 +msgid "" +"The following standard library classes support parameterized generics. This " +"list is non-exhaustive." +msgstr "下列标准库类支持形参化的泛型。 此列表并不是详尽无遗的。" + +#: ../../library/stdtypes.rst:4857 +msgid ":class:`tuple`" +msgstr ":class:`tuple`" + +#: ../../library/stdtypes.rst:4858 +msgid ":class:`list`" +msgstr ":class:`list`" + +#: ../../library/stdtypes.rst:4859 +msgid ":class:`dict`" +msgstr ":class:`dict`" + +#: ../../library/stdtypes.rst:4860 +msgid ":class:`set`" +msgstr ":class:`set`" + +#: ../../library/stdtypes.rst:4861 +msgid ":class:`frozenset`" +msgstr ":class:`frozenset`" + +#: ../../library/stdtypes.rst:4862 +msgid ":class:`type`" +msgstr ":class:`type`" + +#: ../../library/stdtypes.rst:4863 +msgid ":class:`collections.deque`" +msgstr ":class:`collections.deque`" + +#: ../../library/stdtypes.rst:4864 +msgid ":class:`collections.defaultdict`" +msgstr ":class:`collections.defaultdict`" + +#: ../../library/stdtypes.rst:4865 +msgid ":class:`collections.OrderedDict`" +msgstr ":class:`collections.OrderedDict`" + +#: ../../library/stdtypes.rst:4866 +msgid ":class:`collections.Counter`" +msgstr ":class:`collections.Counter`" + +#: ../../library/stdtypes.rst:4867 +msgid ":class:`collections.ChainMap`" +msgstr ":class:`collections.ChainMap`" + +#: ../../library/stdtypes.rst:4868 +msgid ":class:`collections.abc.Awaitable`" +msgstr ":class:`collections.abc.Awaitable`" + +#: ../../library/stdtypes.rst:4869 +msgid ":class:`collections.abc.Coroutine`" +msgstr ":class:`collections.abc.Coroutine`" + +#: ../../library/stdtypes.rst:4870 +msgid ":class:`collections.abc.AsyncIterable`" +msgstr ":class:`collections.abc.AsyncIterable`" + +#: ../../library/stdtypes.rst:4871 +msgid ":class:`collections.abc.AsyncIterator`" +msgstr ":class:`collections.abc.AsyncIterable`" + +#: ../../library/stdtypes.rst:4872 +msgid ":class:`collections.abc.AsyncGenerator`" +msgstr ":class:`collections.abc.AsyncGenerator`" + +#: ../../library/stdtypes.rst:4873 +msgid ":class:`collections.abc.Iterable`" +msgstr ":class:`collections.abc.Iterable`" + +#: ../../library/stdtypes.rst:4874 +msgid ":class:`collections.abc.Iterator`" +msgstr ":class:`collections.abc.Iterator`" + +#: ../../library/stdtypes.rst:4875 +msgid ":class:`collections.abc.Generator`" +msgstr ":class:`collections.abc.Generator`" + +#: ../../library/stdtypes.rst:4876 +msgid ":class:`collections.abc.Reversible`" +msgstr ":class:`collections.abc.Reversible`" + +#: ../../library/stdtypes.rst:4877 +msgid ":class:`collections.abc.Container`" +msgstr ":class:`collections.abc.Container`" + +#: ../../library/stdtypes.rst:4878 +msgid ":class:`collections.abc.Collection`" +msgstr ":class:`collections.abc.Collection`" + +#: ../../library/stdtypes.rst:4879 +msgid ":class:`collections.abc.Callable`" +msgstr ":class:`collections.abc.Callable`" + +#: ../../library/stdtypes.rst:4880 +msgid ":class:`collections.abc.Set`" +msgstr ":class:`collections.abc.Set`" + +#: ../../library/stdtypes.rst:4881 +msgid ":class:`collections.abc.MutableSet`" +msgstr ":class:`collections.abc.MutableSet`" + +#: ../../library/stdtypes.rst:4882 +msgid ":class:`collections.abc.Mapping`" +msgstr ":class:`collections.abc.Mapping`" + +#: ../../library/stdtypes.rst:4883 +msgid ":class:`collections.abc.MutableMapping`" +msgstr ":class:`collections.abc.MutableMapping`" + +#: ../../library/stdtypes.rst:4884 +msgid ":class:`collections.abc.Sequence`" +msgstr ":class:`collections.abc.Sequence`" + +#: ../../library/stdtypes.rst:4885 +msgid ":class:`collections.abc.MutableSequence`" +msgstr ":class:`collections.abc.MutableSequence`" + +#: ../../library/stdtypes.rst:4886 +msgid ":class:`collections.abc.ByteString`" +msgstr ":class:`collections.abc.ByteString`" + +#: ../../library/stdtypes.rst:4887 +msgid ":class:`collections.abc.MappingView`" +msgstr ":class:`collections.abc.MappingView`" + +#: ../../library/stdtypes.rst:4888 +msgid ":class:`collections.abc.KeysView`" +msgstr ":class:`collections.abc.KeysView`" + +#: ../../library/stdtypes.rst:4889 +msgid ":class:`collections.abc.ItemsView`" +msgstr ":class:`collections.abc.ItemsView`" + +#: ../../library/stdtypes.rst:4890 +msgid ":class:`collections.abc.ValuesView`" +msgstr ":class:`collections.abc.ValuesView`" + +#: ../../library/stdtypes.rst:4891 +msgid ":class:`contextlib.AbstractContextManager`" +msgstr ":class:`contextlib.AbstractContextManager`" + +#: ../../library/stdtypes.rst:4892 +msgid ":class:`contextlib.AbstractAsyncContextManager`" +msgstr ":class:`contextlib.AbstractAsyncContextManager`" + +#: ../../library/stdtypes.rst:4893 +msgid ":class:`dataclasses.Field`" +msgstr ":class:`dataclasses.Field`" + +#: ../../library/stdtypes.rst:4894 +msgid ":class:`functools.cached_property`" +msgstr ":class:`functools.cached_property`" + +#: ../../library/stdtypes.rst:4895 +msgid ":class:`functools.partialmethod`" +msgstr ":class:`functools.partialmethod`" + +#: ../../library/stdtypes.rst:4896 +msgid ":class:`os.PathLike`" +msgstr ":class:`os.PathLike`" + +#: ../../library/stdtypes.rst:4897 +msgid ":class:`queue.LifoQueue`" +msgstr ":class:`queue.LifoQueue`" + +#: ../../library/stdtypes.rst:4898 +msgid ":class:`queue.Queue`" +msgstr ":class:`queue.Queue`" + +#: ../../library/stdtypes.rst:4899 +msgid ":class:`queue.PriorityQueue`" +msgstr ":class:`queue.PriorityQueue`" + +#: ../../library/stdtypes.rst:4900 +msgid ":class:`queue.SimpleQueue`" +msgstr ":class:`queue.SimpleQueue`" + +#: ../../library/stdtypes.rst:4901 +msgid ":ref:`re.Pattern `" +msgstr ":ref:`re.Pattern `" + +#: ../../library/stdtypes.rst:4902 +msgid ":ref:`re.Match `" +msgstr ":ref:`re.Match `" + +#: ../../library/stdtypes.rst:4903 +msgid ":class:`shelve.BsdDbShelf`" +msgstr ":class:`shelve.BsdDbShelf`" + +#: ../../library/stdtypes.rst:4904 +msgid ":class:`shelve.DbfilenameShelf`" +msgstr ":class:`shelve.DbfilenameShelf`" + +#: ../../library/stdtypes.rst:4905 +msgid ":class:`shelve.Shelf`" +msgstr ":class:`shelve.Shelf`" + +#: ../../library/stdtypes.rst:4906 +msgid ":class:`types.MappingProxyType`" +msgstr ":class:`types.MappingProxyType`" + +#: ../../library/stdtypes.rst:4907 +msgid ":class:`weakref.WeakKeyDictionary`" +msgstr ":class:`weakref.WeakKeyDictionary`" + +#: ../../library/stdtypes.rst:4908 +msgid ":class:`weakref.WeakMethod`" +msgstr ":class:`weakref.WeakMethod`" + +#: ../../library/stdtypes.rst:4909 +msgid ":class:`weakref.WeakSet`" +msgstr ":class:`weakref.WeakSet`" + +#: ../../library/stdtypes.rst:4910 +msgid ":class:`weakref.WeakValueDictionary`" +msgstr ":class:`weakref.WeakValueDictionary`" + +#: ../../library/stdtypes.rst:4915 +msgid "Special Attributes of ``GenericAlias`` objects" +msgstr "``GenericAlias`` 对象的特殊属性" + +#: ../../library/stdtypes.rst:4917 +msgid "All parameterized generics implement special read-only attributes." +msgstr "应用参数后的泛型都实现了一些特殊的只读属性:" + +#: ../../library/stdtypes.rst:4921 +msgid "This attribute points at the non-parameterized generic class::" +msgstr "本属性指向未应用参数之前的泛型类:" + +#: ../../library/stdtypes.rst:4929 +msgid "" +"This attribute is a :class:`tuple` (possibly of length 1) of generic types " +"passed to the original :meth:`~object.__class_getitem__` of the generic " +"class::" +msgstr "" +"该属性是传给泛型类的原始 :meth:`~object.__class_getitem__` 的泛型所组成的 :class:`tuple` (长度可能为" +" 1)::" + +#: ../../library/stdtypes.rst:4939 +msgid "" +"This attribute is a lazily computed tuple (possibly empty) of unique type " +"variables found in ``__args__``::" +msgstr "该属性是延迟计算出来的一个元组(可能为空),包含了 ``__args__`` 中的类型变量。" + +#: ../../library/stdtypes.rst:4952 +msgid ":pep:`484` - Type Hints" +msgstr ":pep:`484` —— 类型注解" + +#: ../../library/stdtypes.rst:4952 +msgid "Introducing Python's framework for type annotations." +msgstr "介绍 Python 中用于类型标注的框架。" + +#: ../../library/stdtypes.rst:4957 +msgid ":pep:`585` - Type Hinting Generics In Standard Collections" +msgstr ":pep:`585` - 标准多项集中的类型提示泛型" + +#: ../../library/stdtypes.rst:4955 +msgid "" +"Introducing the ability to natively parameterize standard-library classes, " +"provided they implement the special class method " +":meth:`~object.__class_getitem__`." +msgstr "介绍了对标准库类进行原生形参化的能力,只要它们实现了特殊的类方法 :meth:`~object.__class_getitem__`。" + +#: ../../library/stdtypes.rst:4960 +msgid "" +":ref:`Generics`, :ref:`user-defined generics ` and " +":class:`typing.Generic`" +msgstr "" +":ref:`Generics`, :ref:`用户自定义泛型 ` 和 " +":class:`typing.Generic`" + +#: ../../library/stdtypes.rst:4960 +msgid "" +"Documentation on how to implement generic classes that can be parameterized " +"at runtime and understood by static type-checkers." +msgstr "有关如何实现可在运行时被形参化并能被静态类型检查器所识别的泛用类的文档。" + +#: ../../library/stdtypes.rst:4969 +msgid "Other Built-in Types" +msgstr "其他内置类型" + +#: ../../library/stdtypes.rst:4971 +msgid "" +"The interpreter supports several other kinds of objects. Most of these " +"support only one or two operations." +msgstr "解释器支持一些其他种类的对象。 这些对象大都仅支持一两种操作。" + +#: ../../library/stdtypes.rst:4978 +msgid "Modules" +msgstr "模块" + +#: ../../library/stdtypes.rst:4980 +msgid "" +"The only special operation on a module is attribute access: ``m.name``, " +"where *m* is a module and *name* accesses a name defined in *m*'s symbol " +"table. Module attributes can be assigned to. (Note that the " +":keyword:`import` statement is not, strictly speaking, an operation on a " +"module object; ``import foo`` does not require a module object named *foo* " +"to exist, rather it requires an (external) *definition* for a module named " +"*foo* somewhere.)" +msgstr "" +"模块唯一的特殊操作是属性访问: ``m.name``,这里 *m* 为一个模块而 *name* 访问定义在 *m* 的符号表中的一个名称。 " +"模块属性可以被赋值。 (请注意 :keyword:`import` 语句严格来说也是对模块对象的一种操作;``import foo`` " +"不要求存在一个名为 *foo* 的模块对象,而是要求存在一个对于名为 *foo* 的模块的 (永久性) *定义*。)" + +#: ../../library/stdtypes.rst:4987 +msgid "" +"A special attribute of every module is :attr:`~object.__dict__`. This is the" +" dictionary containing the module's symbol table. Modifying this dictionary " +"will actually change the module's symbol table, but direct assignment to the" +" :attr:`~object.__dict__` attribute is not possible (you can write " +"``m.__dict__['a'] = 1``, which defines ``m.a`` to be ``1``, but you can't " +"write ``m.__dict__ = {}``). Modifying :attr:`~object.__dict__` directly is " +"not recommended." +msgstr "" +"每个模块都有一个特殊属性 :attr:`~object.__dict__`。 这是包含模块的符号表的字典。 " +"修改此字典将实际改变模块的符号表,但是无法直接对 :attr:`~object.__dict__` 赋值 (你可以写 ``m.__dict__['a']" +" = 1``,这会将 ``m.a`` 定义为 ``1``,但是你不能写 ``m.__dict__ = {}``)。 不建议直接修改 " +":attr:`~object.__dict__`。" + +#: ../../library/stdtypes.rst:4995 +msgid "" +"Modules built into the interpreter are written like this: ````. If loaded from a file, they are written as ````." +msgstr "" +"内置于解释器中的模块会写成这样: ````。 如果是从一个文件加载,则会写成 ````。" + +#: ../../library/stdtypes.rst:5003 +msgid "Classes and Class Instances" +msgstr "类与类实例" + +#: ../../library/stdtypes.rst:5005 +msgid "See :ref:`objects` and :ref:`class` for these." +msgstr "关于这些类型请参阅 :ref:`objects` 和 :ref:`class`。" + +#: ../../library/stdtypes.rst:5011 +msgid "Functions" +msgstr "函数" + +#: ../../library/stdtypes.rst:5013 +msgid "" +"Function objects are created by function definitions. The only operation on" +" a function object is to call it: ``func(argument-list)``." +msgstr "函数对象是通过函数定义创建的。 对函数对象的唯一操作是调用它: ``func(argument-list)``。" + +#: ../../library/stdtypes.rst:5016 +msgid "" +"There are really two flavors of function objects: built-in functions and " +"user-defined functions. Both support the same operation (to call the " +"function), but the implementation is different, hence the different object " +"types." +msgstr "实际上存在两种不同的函数对象:内置函数和用户自定义函数。 两者支持同样的操作(调用函数),但实现方式不同,因此对象类型也不同。" + +#: ../../library/stdtypes.rst:5020 +msgid "See :ref:`function` for more information." +msgstr "更多信息请参阅 :ref:`function`。" + +#: ../../library/stdtypes.rst:5026 +msgid "Methods" +msgstr "方法" + +#: ../../library/stdtypes.rst:5030 +msgid "" +"Methods are functions that are called using the attribute notation. There " +"are two flavors: built-in methods (such as :meth:`append` on lists) and " +"class instance methods. Built-in methods are described with the types that " +"support them." +msgstr "" +"方法是使用属性表示法来调用的函数。 存在两种形式:内置方法(例如列表的 :meth:`append` 方法)和类实例方法。 " +"内置方法由支持它们的类型来描述。" + +#: ../../library/stdtypes.rst:5035 +msgid "" +"If you access a method (a function defined in a class namespace) through an " +"instance, you get a special object: a :dfn:`bound method` (also called " +":dfn:`instance method`) object. When called, it will add the ``self`` " +"argument to the argument list. Bound methods have two special read-only " +"attributes: ``m.__self__`` is the object on which the method operates, and " +"``m.__func__`` is the function implementing the method. Calling ``m(arg-1, " +"arg-2, ..., arg-n)`` is completely equivalent to calling " +"``m.__func__(m.__self__, arg-1, arg-2, ..., arg-n)``." +msgstr "" +"如果你通过一个实例来访问方法(即定义在类命名空间内的函数),你会得到一个特殊对象: :dfn:`绑定方法` (或称 :dfn:`实例方法`) 对象。 " +"当被调用时,它会将 ``self`` 参数添加到参数列表。 绑定方法具有两个特殊的只读属性: ``m.__self__`` 操作该方法的对象,而 " +"``m.__func__`` 是实现该方法的函数。 调用 ``m(arg-1, arg-2, ..., arg-n)`` 完全等价于调用 " +"``m.__func__(m.__self__, arg-1, arg-2, ..., arg-n)``。" + +#: ../../library/stdtypes.rst:5044 +msgid "" +"Like function objects, bound method objects support getting arbitrary " +"attributes. However, since method attributes are actually stored on the " +"underlying function object (``meth.__func__``), setting method attributes on" +" bound methods is disallowed. Attempting to set an attribute on a method " +"results in an :exc:`AttributeError` being raised. In order to set a method " +"attribute, you need to explicitly set it on the underlying function object::" +msgstr "" +"与函数对象类似,绑定方法对象也支持获取任意属性。 但是,由于方法属性实际上保存于下层的函数对象中 " +"(``meth.__func__``),因此不允许设置绑定方法的方法属性。 尝试设置方法的属性将会导致引发 :exc:`AttributeError`。" +" 想要设置方法属性,你必须在下层的函数对象中显式地对其进行设置::" + +#: ../../library/stdtypes.rst:5064 ../../library/stdtypes.rst:5095 +msgid "See :ref:`types` for more information." +msgstr "更多信息请参阅 :ref:`types`。" + +#: ../../library/stdtypes.rst:5072 +msgid "Code Objects" +msgstr "代码对象" + +#: ../../library/stdtypes.rst:5078 +msgid "" +"Code objects are used by the implementation to represent \"pseudo-compiled\"" +" executable Python code such as a function body. They differ from function " +"objects because they don't contain a reference to their global execution " +"environment. Code objects are returned by the built-in :func:`compile` " +"function and can be extracted from function objects through their " +":attr:`__code__` attribute. See also the :mod:`code` module." +msgstr "" +"代码对象被具体实现用来表示“伪编译”的可执行 Python 代码,例如一个函数体。 它们不同于函数对象,因为它们不包含对其全局执行环境的引用。 " +"代码对象由内置的 :func:`compile` 函数返回,并可通过从函数对象的 :attr:`__code__` 属性从中提取。 另请参阅 " +":mod:`code` 模块。" + +#: ../../library/stdtypes.rst:5085 +msgid "" +"Accessing ``__code__`` raises an :ref:`auditing event ` " +"``object.__getattr__`` with arguments ``obj`` and ``\"__code__\"``." +msgstr "" +"访问 ``__code__`` 会触发 :ref:`审计事件 ` ``object.__getattr__``,参数为 " +"``obj`` 和 ``\"__code__\"``。" + +#: ../../library/stdtypes.rst:5092 +msgid "" +"A code object can be executed or evaluated by passing it (instead of a " +"source string) to the :func:`exec` or :func:`eval` built-in functions." +msgstr "可以通过将代码对象(而非源码字符串)传给 :func:`exec` 或 :func:`eval` 内置函数来执行或求值。" + +#: ../../library/stdtypes.rst:5101 +msgid "Type Objects" +msgstr "类型对象" + +#: ../../library/stdtypes.rst:5107 +msgid "" +"Type objects represent the various object types. An object's type is " +"accessed by the built-in function :func:`type`. There are no special " +"operations on types. The standard module :mod:`types` defines names for all" +" standard built-in types." +msgstr "" +"类型对象表示各种对象类型。 对象的类型可通过内置函数 :func:`type` 来获取。 类型没有特殊的操作。 标准库模块 :mod:`types` " +"定义了所有标准内置类型的名称。" + +#: ../../library/stdtypes.rst:5112 +msgid "Types are written like this: ````." +msgstr "类型以这样的写法来表示: ````。" + +#: ../../library/stdtypes.rst:5118 +msgid "The Null Object" +msgstr "空对象" + +#: ../../library/stdtypes.rst:5120 +msgid "" +"This object is returned by functions that don't explicitly return a value. " +"It supports no special operations. There is exactly one null object, named " +"``None`` (a built-in name). ``type(None)()`` produces the same singleton." +msgstr "" +"此对象会由不显式地返回值的函数所返回。 它不支持任何特殊的操作。 空对象只有一种值 ``None`` (这是个内置名称)。 " +"``type(None)()`` 会生成同一个单例。" + +#: ../../library/stdtypes.rst:5124 +msgid "It is written as ``None``." +msgstr "该对象的写法为 ``None``。" + +#: ../../library/stdtypes.rst:5131 +msgid "The Ellipsis Object" +msgstr "省略符对象" + +#: ../../library/stdtypes.rst:5133 +msgid "" +"This object is commonly used by slicing (see :ref:`slicings`). It supports " +"no special operations. There is exactly one ellipsis object, named " +":const:`Ellipsis` (a built-in name). ``type(Ellipsis)()`` produces the " +":const:`Ellipsis` singleton." +msgstr "" +"此对象常被用于切片 (参见 :ref:`slicings`)。 它不支持任何特殊的操作。 省略符对象只有一种值 :const:`Ellipsis` " +"(这是个内置名称)。 ``type(Ellipsis)()`` 会生成 :const:`Ellipsis` 单例。" + +#: ../../library/stdtypes.rst:5138 +msgid "It is written as ``Ellipsis`` or ``...``." +msgstr "该对象的写法为 ``Ellipsis`` 或 ``...``。" + +#: ../../library/stdtypes.rst:5144 +msgid "The NotImplemented Object" +msgstr "未实现对象" + +#: ../../library/stdtypes.rst:5146 +msgid "" +"This object is returned from comparisons and binary operations when they are" +" asked to operate on types they don't support. See :ref:`comparisons` for " +"more information. There is exactly one ``NotImplemented`` object. " +"``type(NotImplemented)()`` produces the singleton instance." +msgstr "" +"此对象会被作为比较和二元运算被应用于它们所不支持的类型时的返回值。 请参阅 :ref:`comparisons` 了解更多信息。 未实现对象只有一种值 " +"``NotImplemented``。 ``type(NotImplemented)()`` 会生成这个单例。" + +#: ../../library/stdtypes.rst:5151 +msgid "It is written as ``NotImplemented``." +msgstr "该对象的写法为 ``NotImplemented``。" + +#: ../../library/stdtypes.rst:5157 +msgid "Boolean Values" +msgstr "布尔值" + +#: ../../library/stdtypes.rst:5159 +msgid "" +"Boolean values are the two constant objects ``False`` and ``True``. They " +"are used to represent truth values (although other values can also be " +"considered false or true). In numeric contexts (for example when used as " +"the argument to an arithmetic operator), they behave like the integers 0 and" +" 1, respectively. The built-in function :func:`bool` can be used to convert " +"any value to a Boolean, if the value can be interpreted as a truth value " +"(see section :ref:`truth` above)." +msgstr "" +"布尔值是两个常量对象 ``False`` 和 ``True``。 它们被用来表示逻辑上的真假(不过其他值也可被当作真值或假值)。 " +"在数字类的上下文中(例如被用作算术运算符的参数时),它们的行为分别类似于整数 0 和 1。 内置函数 :func:`bool` " +"可被用来将任意值转换为布尔值,只要该值可被解析为一个逻辑值(参见之前的 :ref:`truth` 部分)。" + +#: ../../library/stdtypes.rst:5172 +msgid "They are written as ``False`` and ``True``, respectively." +msgstr "该对象的写法分别为 ``False`` 和 ``True``。" + +#: ../../library/stdtypes.rst:5178 +msgid "Internal Objects" +msgstr "内部对象" + +#: ../../library/stdtypes.rst:5180 +msgid "" +"See :ref:`types` for this information. It describes stack frame objects, " +"traceback objects, and slice objects." +msgstr "有关此对象的信息请参阅 :ref:`types`。 其中描述了栈帧对象、回溯对象以及切片对象等等。" + +#: ../../library/stdtypes.rst:5187 +msgid "Special Attributes" +msgstr "特殊属性" + +#: ../../library/stdtypes.rst:5189 +msgid "" +"The implementation adds a few special read-only attributes to several object" +" types, where they are relevant. Some of these are not reported by the " +":func:`dir` built-in function." +msgstr "语言实现为部分对象类型添加了一些特殊的只读属性,它们具有各自的作用。 其中一些并不会被 :func:`dir` 内置函数所列出。" + +#: ../../library/stdtypes.rst:5196 +msgid "" +"A dictionary or other mapping object used to store an object's (writable) " +"attributes." +msgstr "一个字典或其他类型的映射对象,用于存储对象的(可写)属性。" + +#: ../../library/stdtypes.rst:5202 +msgid "The class to which a class instance belongs." +msgstr "类实例所属的类。" + +#: ../../library/stdtypes.rst:5207 +msgid "The tuple of base classes of a class object." +msgstr "由类对象的基类所组成的元组。" + +#: ../../library/stdtypes.rst:5212 +msgid "" +"The name of the class, function, method, descriptor, or generator instance." +msgstr "类、函数、方法、描述器或生成器实例的名称。" + +#: ../../library/stdtypes.rst:5218 +msgid "" +"The :term:`qualified name` of the class, function, method, descriptor, or " +"generator instance." +msgstr "类、函数、方法、描述器或生成器实例的 :term:`qualified name`。" + +#: ../../library/stdtypes.rst:5226 +msgid "" +"This attribute is a tuple of classes that are considered when looking for " +"base classes during method resolution." +msgstr "此属性是由类组成的元组,在方法解析期间会基于它来查找基类。" + +#: ../../library/stdtypes.rst:5232 +msgid "" +"This method can be overridden by a metaclass to customize the method " +"resolution order for its instances. It is called at class instantiation, " +"and its result is stored in :attr:`~class.__mro__`." +msgstr "" +"此方法可被一个元类来重载,以为其实例定制方法解析顺序。 它会在类实例化时被调用,其结果存储于 :attr:`~class.__mro__` 之中。" + +#: ../../library/stdtypes.rst:5239 +msgid "" +"Each class keeps a list of weak references to its immediate subclasses. " +"This method returns a list of all those references still alive. The list is" +" in definition order. Example::" +msgstr "每个类都存有对直接子类的弱引用列表。本方法返回所有存活引用的列表。列表的顺序按照子类定义的排列。例如:" + +#: ../../library/stdtypes.rst:5250 +msgid "Integer string conversion length limitation" +msgstr "整数字符串转换长度限制" + +#: ../../library/stdtypes.rst:5252 +msgid "" +"CPython has a global limit for converting between :class:`int` and " +":class:`str` to mitigate denial of service attacks. This limit *only* " +"applies to decimal or other non-power-of-two number bases. Hexadecimal, " +"octal, and binary conversions are unlimited. The limit can be configured." +msgstr "" +"CPython 对于 :class:`int` 和 :class:`str` 之间的转换有一个全局限制以缓解拒绝服务攻击。 此限制 *仅会* " +"作用于十进制或其他以非二的乘方为基数的数字。 十六进制、八进制和二进制转换不受限制。 该限制可以被配置。" + +#: ../../library/stdtypes.rst:5257 +msgid "" +"The :class:`int` type in CPython is an arbitrary length number stored in " +"binary form (commonly known as a \"bignum\"). There exists no algorithm that" +" can convert a string to a binary integer or a binary integer to a string in" +" linear time, *unless* the base is a power of 2. Even the best known " +"algorithms for base 10 have sub-quadratic complexity. Converting a large " +"value such as ``int('1' * 500_000)`` can take over a second on a fast CPU." +msgstr "" +":class:`int` 类型在 CPython 中是存储为二进制形式的任意长度的数字(通常称为“大数字”)。 " +"不存在可在线性时间内将一个字符串转换为二进制整数或将一个二进制整数转换为字符串的算法,*除非* 基数为 2 的乘方。 对于基数为 10 " +"来说已知最好的算法也有亚二次方复杂度。 转换一个大数值如 ``int('1' * 500_000)`` 在快速的 CPU 上也会花费一秒以上的时间。" + +#: ../../library/stdtypes.rst:5264 +msgid "" +"Limiting conversion size offers a practical way to avoid `CVE-2020-10735 " +"`_." +msgstr "" +"限制转换大小提供了一个避免 `CVE-2020-10735 `_ 的可行方法。" + +#: ../../library/stdtypes.rst:5267 +msgid "" +"The limit is applied to the number of digit characters in the input or " +"output string when a non-linear conversion algorithm would be involved. " +"Underscores and the sign are not counted towards the limit." +msgstr "此限制会在可能涉及非线性转换算法时作用于输入或输出字符串中的数字型字符数量。 下划线和正负号不计入限制数量。" + +#: ../../library/stdtypes.rst:5271 +msgid "" +"When an operation would exceed the limit, a :exc:`ValueError` is raised:" +msgstr "当一个操作会超出限制时,将引发 :exc:`ValueError`:" + +#: ../../library/stdtypes.rst:5293 +msgid "" +"The default limit is 4300 digits as provided in " +":data:`sys.int_info.default_max_str_digits `. The lowest limit" +" that can be configured is 640 digits as provided in " +":data:`sys.int_info.str_digits_check_threshold `." +msgstr "" +"默认限制为 4300 位即 :data:`sys.int_info.default_max_str_digits ` 的值。" +" 最低限制可被配置为 640 位即 :data:`sys.int_info.str_digits_check_threshold " +"`。" + +#: ../../library/stdtypes.rst:5298 +msgid "Verification:" +msgstr "验证:" + +#: ../../library/stdtypes.rst:5313 +msgid "Affected APIs" +msgstr "受影响的 API" + +#: ../../library/stdtypes.rst:5315 +msgid "" +"The limitation only applies to potentially slow conversions between " +":class:`int` and :class:`str` or :class:`bytes`:" +msgstr "此限制仅会作用于 :class:`int` 和 :class:`str` 和 :class:`bytes` 之间存在速度变慢可能的转换:" + +#: ../../library/stdtypes.rst:5318 +msgid "``int(string)`` with default base 10." +msgstr "``int(string)`` 默认以 10 为基数。" + +#: ../../library/stdtypes.rst:5319 +msgid "``int(string, base)`` for all bases that are not a power of 2." +msgstr "``int(string, base)`` 用于所有不为 2 的乘方的基数。" + +#: ../../library/stdtypes.rst:5320 +msgid "``str(integer)``." +msgstr "``str(integer)``。" + +#: ../../library/stdtypes.rst:5321 +msgid "``repr(integer)``." +msgstr "``repr(integer)``。" + +#: ../../library/stdtypes.rst:5322 +msgid "" +"any other string conversion to base 10, for example ``f\"{integer}\"``, " +"``\"{}\".format(integer)``, or ``b\"%d\" % integer``." +msgstr "" +"任何其他目标是以 10 为基数的字符串转换,例如 ``f\"{integer}\"``, ``\"{}\".format(integer)`` 或 " +"``b\"%d\" % integer``。" + +#: ../../library/stdtypes.rst:5325 +msgid "The limitations do not apply to functions with a linear algorithm:" +msgstr "此限制不会作用于使用线性算法的函数:" + +#: ../../library/stdtypes.rst:5327 +msgid "``int(string, base)`` with base 2, 4, 8, 16, or 32." +msgstr "``int(string, base)`` 中 base 可以为 2, 4, 8, 16 或 32。" + +#: ../../library/stdtypes.rst:5328 +msgid ":func:`int.from_bytes` and :func:`int.to_bytes`." +msgstr ":func:`int.from_bytes` 和 :func:`int.to_bytes`。" + +#: ../../library/stdtypes.rst:5329 +msgid ":func:`hex`, :func:`oct`, :func:`bin`." +msgstr ":func:`hex`, :func:`oct`, :func:`bin`。" + +#: ../../library/stdtypes.rst:5330 +msgid ":ref:`formatspec` for hex, octal, and binary numbers." +msgstr ":ref:`formatspec` 用于十六进制、八进制和二进制数。" + +#: ../../library/stdtypes.rst:5331 +msgid ":class:`str` to :class:`float`." +msgstr ":class:`str` 至 :class:`float`。" + +#: ../../library/stdtypes.rst:5332 +msgid ":class:`str` to :class:`decimal.Decimal`." +msgstr ":class:`str` 至 :class:`decimal.Decimal`。" + +#: ../../library/stdtypes.rst:5335 +msgid "Configuring the limit" +msgstr "配置限制值" + +#: ../../library/stdtypes.rst:5337 +msgid "" +"Before Python starts up you can use an environment variable or an " +"interpreter command line flag to configure the limit:" +msgstr "在 Python 启动之前你可以使用环境变量或解释器命令行旗标来配置限制值:" + +#: ../../library/stdtypes.rst:5340 +msgid "" +":envvar:`PYTHONINTMAXSTRDIGITS`, e.g. ``PYTHONINTMAXSTRDIGITS=640 python3`` " +"to set the limit to 640 or ``PYTHONINTMAXSTRDIGITS=0 python3`` to disable " +"the limitation." +msgstr "" +":envvar:`PYTHONINTMAXSTRDIGITS`,例如 ``PYTHONINTMAXSTRDIGITS=640 python3`` " +"是将限制设为 640 而 ``PYTHONINTMAXSTRDIGITS=0 python3`` 是禁用此限制。" + +#: ../../library/stdtypes.rst:5343 +msgid "" +":option:`-X int_max_str_digits <-X>`, e.g. ``python3 -X " +"int_max_str_digits=640``" +msgstr "" +":option:`-X int_max_str_digits <-X>`,例如 ``python3 -X " +"int_max_str_digits=640``" + +#: ../../library/stdtypes.rst:5345 +msgid "" +":data:`sys.flags.int_max_str_digits` contains the value of " +":envvar:`PYTHONINTMAXSTRDIGITS` or :option:`-X int_max_str_digits <-X>`. If " +"both the env var and the ``-X`` option are set, the ``-X`` option takes " +"precedence. A value of *-1* indicates that both were unset, thus a value of " +":data:`sys.int_info.default_max_str_digits` was used during initialization." +msgstr "" +":data:`sys.flags.int_max_str_digits` 包含 :envvar:`PYTHONINTMAXSTRDIGITS` 或 " +":option:`-X int_max_str_digits <-X>` 的值。 如果环境变量和 ``-X`` 选项均有设置,则 ``-X`` " +"选项优先。 值为 *-1* 表示两者均未设置,因此会在初始化时使用 " +":data:`sys.int_info.default_max_str_digits` 的值。" + +#: ../../library/stdtypes.rst:5351 +msgid "" +"From code, you can inspect the current limit and set a new one using these " +":mod:`sys` APIs:" +msgstr "从代码中,你可以检查当前的限制并使用这些 :mod:`sys` API 来设置新值:" + +#: ../../library/stdtypes.rst:5354 +msgid "" +":func:`sys.get_int_max_str_digits` and :func:`sys.set_int_max_str_digits` " +"are a getter and setter for the interpreter-wide limit. Subinterpreters have" +" their own limit." +msgstr "" +":func:`sys.get_int_max_str_digits` 和 :func:`sys.set_int_max_str_digits` " +"是解释器级限制的读取器和设置器。 子解释器具有它们自己的限制。" + +#: ../../library/stdtypes.rst:5358 +msgid "" +"Information about the default and minimum can be found in " +":attr:`sys.int_info`:" +msgstr "有关默认值和最小值的信息可以在 :attr:`sys.int_info` 中找到:" + +#: ../../library/stdtypes.rst:5360 +msgid "" +":data:`sys.int_info.default_max_str_digits ` is the compiled-" +"in default limit." +msgstr ":data:`sys.int_info.default_max_str_digits ` 是已编译的默认限制。" + +#: ../../library/stdtypes.rst:5362 +msgid "" +":data:`sys.int_info.str_digits_check_threshold ` is the lowest" +" accepted value for the limit (other than 0 which disables it)." +msgstr "" +":data:`sys.int_info.str_digits_check_threshold ` " +"是该限制可接受的最低值(禁用该限制的 0 除外)。" + +#: ../../library/stdtypes.rst:5369 +msgid "" +"Setting a low limit *can* lead to problems. While rare, code exists that " +"contains integer constants in decimal in their source that exceed the " +"minimum threshold. A consequence of setting the limit is that Python source " +"code containing decimal integer literals longer than the limit will " +"encounter an error during parsing, usually at startup time or import time or" +" even at installation time - anytime an up to date ``.pyc`` does not already" +" exist for the code. A workaround for source that contains such large " +"constants is to convert them to ``0x`` hexadecimal form as it has no limit." +msgstr "" +"设置较低的限制值 *可能* 导致问题。 虽然不常见,但还是会有在其源代码中包含超出最小阈值的十进制整数常量的代码存在。 " +"设置此限制的一个后果将是包含比此限制长的十进制整数字面值的 Python 源代码将在解析期间遇到错误,通常是在启动时或导入时甚至是在安装时 —— " +"只要对于某个代码还不存在已更新的 ``.pyc`` 就会发生。 一种在包含此类大数值常量的源代码中绕过该问题的办法是将它们转换为不受限制的 ``0x``" +" 十六进制形式。" + +#: ../../library/stdtypes.rst:5378 +msgid "" +"Test your application thoroughly if you use a low limit. Ensure your tests " +"run with the limit set early via the environment or flag so that it applies " +"during startup and even during any installation step that may invoke Python " +"to precompile ``.py`` sources to ``.pyc`` files." +msgstr "" +"如果你使用了较低的限制则请要彻底地测试你的应用程序。 确保你的测试通过环境变量或旗标尽早设置该限制来运行以便在启动期间甚至是在可能唤起 Python " +"来将 ``.py`` 源文件预编译为 ``.pyc`` 文件的任何安装步骤其间应用该限制。" + +#: ../../library/stdtypes.rst:5384 +msgid "Recommended configuration" +msgstr "推荐配置" + +#: ../../library/stdtypes.rst:5386 +msgid "" +"The default :data:`sys.int_info.default_max_str_digits` is expected to be " +"reasonable for most applications. If your application requires a different " +"limit, set it from your main entry point using Python version agnostic code " +"as these APIs were added in security patch releases in versions before 3.11." +msgstr "" +"默认的 :data:`sys.int_info.default_max_str_digits` " +"被认为对于大多数应用程序来说都是合理的。如果你的应用程序需要不同的限制值,请使用不预设 Python 版本的代码从你的主入口点进行设置,因为这些 API" +" 是在 3.11 之前的版本所发布的安全补丁中添加的。" + +#: ../../library/stdtypes.rst:5391 +msgid "Example::" +msgstr "示例::" + +#: ../../library/stdtypes.rst:5403 +msgid "If you need to disable it entirely, set it to ``0``." +msgstr "如果你需要完全禁用它,请将其设为 ``0``。" + +#: ../../library/stdtypes.rst:5407 +msgid "Footnotes" +msgstr "备注" + +#: ../../library/stdtypes.rst:5408 +msgid "" +"Additional information on these special methods may be found in the Python " +"Reference Manual (:ref:`customization`)." +msgstr "有关这些特殊方法的额外信息可参看 Python 参考指南 (:ref:`customization`)。" + +#: ../../library/stdtypes.rst:5411 +msgid "" +"As a consequence, the list ``[1, 2]`` is considered equal to ``[1.0, 2.0]``," +" and similarly for tuples." +msgstr "作为结果,列表 ``[1, 2]`` 与 ``[1.0, 2.0]`` 是相等的,元组的情况也类似。" + +#: ../../library/stdtypes.rst:5414 +msgid "They must have since the parser can't tell the type of the operands." +msgstr "必须如此,因为解析器无法判断操作数的类型。" + +#: ../../library/stdtypes.rst:5416 +msgid "" +"Cased characters are those with general category property being one of " +"\"Lu\" (Letter, uppercase), \"Ll\" (Letter, lowercase), or \"Lt\" (Letter, " +"titlecase)." +msgstr "" +"区分大小写的字符是指所属一般类别属性为 \"Lu\" (Letter, uppercase), \"Ll\" (Letter, lowercase) 或" +" \"Lt\" (Letter, titlecase) 之一的字符。" + +#: ../../library/stdtypes.rst:5419 +msgid "" +"To format only a tuple you should therefore provide a singleton tuple whose " +"only element is the tuple to be formatted." +msgstr "若只是要格式化一个元组,则应提供一个单例元组,其中只包含一个元素,就是需要格式化的那个元组。" diff --git a/library/string.po b/library/string.po new file mode 100644 index 000000000..d2b0b5ec1 --- /dev/null +++ b/library/string.po @@ -0,0 +1,1237 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) 2001-2024, Python Software Foundation +# This file is distributed under the same license as the Python package. +# FIRST AUTHOR , YEAR. +# +# Translators: +# QR Wang , 2018 +# Shengjing Zhu , 2018 +# df2dc1c92e792f7ae8417c51df43db8f_594d92a <0f49be28017426edb1db1a2ab6e67088_717605>, 2018 +# Nasy, 2019 +# 8af080f2e6702c64bedd01873aed27e8_25aec74 , 2019 +# ppcfish , 2019 +# Yuwei Tu , 2019 +# Freesand Leo , 2024 +# Rafael Fontenelle , 2024 +# +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: Python 3.9\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2024-12-27 16:34+0000\n" +"PO-Revision-Date: 2017-02-16 23:28+0000\n" +"Last-Translator: Rafael Fontenelle , 2024\n" +"Language-Team: Chinese (China) (https://app.transifex.com/python-doc/teams/5390/zh_CN/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: zh_CN\n" +"Plural-Forms: nplurals=1; plural=0;\n" + +#: ../../library/string.rst:2 +msgid ":mod:`string` --- Common string operations" +msgstr ":mod:`string` --- 常见的字符串操作" + +#: ../../library/string.rst:7 +msgid "**Source code:** :source:`Lib/string.py`" +msgstr "**源代码:** :source:`Lib/string.py`" + +#: ../../library/string.rst:13 +msgid ":ref:`textseq`" +msgstr ":ref:`textseq`" + +#: ../../library/string.rst:15 +msgid ":ref:`string-methods`" +msgstr ":ref:`string-methods`" + +#: ../../library/string.rst:18 +msgid "String constants" +msgstr "字符串常量" + +#: ../../library/string.rst:20 +msgid "The constants defined in this module are:" +msgstr "此模块中定义的常量为:" + +#: ../../library/string.rst:25 +msgid "" +"The concatenation of the :const:`ascii_lowercase` and " +":const:`ascii_uppercase` constants described below. This value is not " +"locale-dependent." +msgstr "" +"下文所述 :const:`ascii_lowercase` 和 :const:`ascii_uppercase` 常量的拼连。 该值不依赖于语言区域。" + +#: ../../library/string.rst:31 +msgid "" +"The lowercase letters ``'abcdefghijklmnopqrstuvwxyz'``. This value is not " +"locale-dependent and will not change." +msgstr "小写字母 ``'abcdefghijklmnopqrstuvwxyz'``。 该值不依赖于语言区域,不会发生改变。" + +#: ../../library/string.rst:37 +msgid "" +"The uppercase letters ``'ABCDEFGHIJKLMNOPQRSTUVWXYZ'``. This value is not " +"locale-dependent and will not change." +msgstr "大写字母 ``'ABCDEFGHIJKLMNOPQRSTUVWXYZ'``。 该值不依赖于语言区域,不会发生改变。" + +#: ../../library/string.rst:43 +msgid "The string ``'0123456789'``." +msgstr "字符串 ``'0123456789'``。" + +#: ../../library/string.rst:48 +msgid "The string ``'0123456789abcdefABCDEF'``." +msgstr "字符串 ``'0123456789abcdefABCDEF'``。" + +#: ../../library/string.rst:53 +msgid "The string ``'01234567'``." +msgstr "字符串 ``'01234567'``。" + +#: ../../library/string.rst:58 +msgid "" +"String of ASCII characters which are considered punctuation characters in " +"the ``C`` locale: ``!\"#$%&'()*+,-./:;<=>?@[\\]^_`{|}~``." +msgstr "" +"由在 ``C`` 区域设置中被视为标点符号的 ASCII 字符所组成的字符串: " +"``!\"#$%&'()*+,-./:;<=>?@[\\]^_`{|}~``." + +#: ../../library/string.rst:63 +msgid "" +"String of ASCII characters which are considered printable. This is a " +"combination of :const:`digits`, :const:`ascii_letters`, " +":const:`punctuation`, and :const:`whitespace`." +msgstr "" +"由被视为可打印符号的 ASCII 字符组成的字符串。 这是 :const:`digits`, :const:`ascii_letters`, " +":const:`punctuation` 和 :const:`whitespace` 的总和。" + +#: ../../library/string.rst:70 +msgid "" +"A string containing all ASCII characters that are considered whitespace. " +"This includes the characters space, tab, linefeed, return, formfeed, and " +"vertical tab." +msgstr "由被视为空白符号的 ASCII 字符组成的字符串。 其中包括空格、制表、换行、回车、进纸和纵向制表符。" + +#: ../../library/string.rst:78 +msgid "Custom String Formatting" +msgstr "自定义字符串格式化" + +#: ../../library/string.rst:80 +msgid "" +"The built-in string class provides the ability to do complex variable " +"substitutions and value formatting via the :meth:`~str.format` method " +"described in :pep:`3101`. The :class:`Formatter` class in the :mod:`string`" +" module allows you to create and customize your own string formatting " +"behaviors using the same implementation as the built-in :meth:`~str.format` " +"method." +msgstr "" +"内置的字符串类提供了通过使用 :pep:`3101` 所描述的 :meth:`~str.format` 方法进行复杂变量替换和值格式化的能力。 " +":mod:`string` 模块中的 :class:`Formatter` 类允许你使用与内置 :meth:`~str.format` " +"方法相同的实现来创建并定制你自己的字符串格式化行为。" + +#: ../../library/string.rst:89 +msgid "The :class:`Formatter` class has the following public methods:" +msgstr ":class:`Formatter` 类包含下列公有方法:" + +#: ../../library/string.rst:93 +msgid "" +"The primary API method. It takes a format string and an arbitrary set of " +"positional and keyword arguments. It is just a wrapper that calls " +":meth:`vformat`." +msgstr "首要的 API 方法。 它接受一个格式字符串和任意一组位置和关键字参数。 它只是一个调用 :meth:`vformat` 的包装器。" + +#: ../../library/string.rst:97 +msgid "" +"A format string argument is now :ref:`positional-only `." +msgstr "格式字符串参数现在是 :ref:`仅限位置参数 `。" + +#: ../../library/string.rst:103 +msgid "" +"This function does the actual work of formatting. It is exposed as a " +"separate function for cases where you want to pass in a predefined " +"dictionary of arguments, rather than unpacking and repacking the dictionary " +"as individual arguments using the ``*args`` and ``**kwargs`` syntax. " +":meth:`vformat` does the work of breaking up the format string into " +"character data and replacement fields. It calls the various methods " +"described below." +msgstr "" +"此函数执行实际的格式化操作。 它被公开为一个单独的函数,用于需要传入一个预定义字母作为参数,而不是使用 ``*args`` 和 ``**kwargs``" +" 语法将字典解包为多个单独参数并重打包的情况。 :meth:`vformat` 完成将格式字符串分解为字符数据和替换字段的工作。 " +"它会调用下文所述的几种不同方法。" + +#: ../../library/string.rst:111 +msgid "" +"In addition, the :class:`Formatter` defines a number of methods that are " +"intended to be replaced by subclasses:" +msgstr "此外,:class:`Formatter` 还定义了一些旨在被子类替换的方法:" + +#: ../../library/string.rst:116 +msgid "" +"Loop over the format_string and return an iterable of tuples " +"(*literal_text*, *field_name*, *format_spec*, *conversion*). This is used " +"by :meth:`vformat` to break the string into either literal text, or " +"replacement fields." +msgstr "" +"循环遍历 format_string 并返回一个由可迭代对象组成的元组 (*literal_text*, *field_name*, " +"*format_spec*, *conversion*)。 它会被 :meth:`vformat` 用来将字符串分解为文本字面值或替换字段。" + +#: ../../library/string.rst:121 +msgid "" +"The values in the tuple conceptually represent a span of literal text " +"followed by a single replacement field. If there is no literal text (which " +"can happen if two replacement fields occur consecutively), then " +"*literal_text* will be a zero-length string. If there is no replacement " +"field, then the values of *field_name*, *format_spec* and *conversion* will " +"be ``None``." +msgstr "" +"元组中的值在概念上表示一段字面文本加上一个替换字段。 如果没有字面文本(如果连续出现两个替换字段就会发生这种情况),则 *literal_text* " +"将是一个长度为零的字符串。 如果没有替换字段,则 *field_name*, *format_spec* 和 *conversion* 的值将为 " +"``None``。" + +#: ../../library/string.rst:130 +msgid "" +"Given *field_name* as returned by :meth:`parse` (see above), convert it to " +"an object to be formatted. Returns a tuple (obj, used_key). The default " +"version takes strings of the form defined in :pep:`3101`, such as " +"\"0[name]\" or \"label.title\". *args* and *kwargs* are as passed in to " +":meth:`vformat`. The return value *used_key* has the same meaning as the " +"*key* parameter to :meth:`get_value`." +msgstr "" +"给定 *field_name* 作为 :meth:`parse` (见上文) 的返回值,将其转换为要格式化的对象。 返回一个元组 (obj, " +"used_key)。 默认版本接受在 :pep:`3101` 所定义形式的字符串,例如 \"0[name]\" 或 \"label.title\"。 " +"*args* 和 *kwargs* 与传给 :meth:`vformat` 的一样。 返回值 *used_key* 与 " +":meth:`get_value` 的 *key* 形参具有相同的含义。" + +#: ../../library/string.rst:139 +msgid "" +"Retrieve a given field value. The *key* argument will be either an integer " +"or a string. If it is an integer, it represents the index of the positional" +" argument in *args*; if it is a string, then it represents a named argument " +"in *kwargs*." +msgstr "" +"提取给定的字段值。 *key* 参数将为整数或字符串。 如果是整数,它表示 *args* 中位置参数的索引;如果是字符串,它表示 *kwargs* " +"中的关键字参数名。" + +#: ../../library/string.rst:144 +msgid "" +"The *args* parameter is set to the list of positional arguments to " +":meth:`vformat`, and the *kwargs* parameter is set to the dictionary of " +"keyword arguments." +msgstr "*args* 形参会被设为 :meth:`vformat` 的位置参数列表,而 *kwargs* 形参会被设为由关键字参数组成的字典。" + +#: ../../library/string.rst:148 +msgid "" +"For compound field names, these functions are only called for the first " +"component of the field name; subsequent components are handled through " +"normal attribute and indexing operations." +msgstr "对于复合字段名称,仅会为字段名称的第一个组件调用这些函数;后续组件会通过普通属性和索引操作来进行处理。" + +#: ../../library/string.rst:152 +msgid "" +"So for example, the field expression '0.name' would cause :meth:`get_value` " +"to be called with a *key* argument of 0. The ``name`` attribute will be " +"looked up after :meth:`get_value` returns by calling the built-in " +":func:`getattr` function." +msgstr "" +"因此举例来说,字段表达式 '0.name' 将导致调用 :meth:`get_value` 时附带 *key* 参数值 0。 在 " +":meth:`get_value` 通过调用内置的 :func:`getattr` 函数返回后将会查找 ``name`` 属性。" + +#: ../../library/string.rst:157 +msgid "" +"If the index or keyword refers to an item that does not exist, then an " +":exc:`IndexError` or :exc:`KeyError` should be raised." +msgstr "如果索引或关键字引用了一个不存在的项,则将引发 :exc:`IndexError` 或 :exc:`KeyError`。" + +#: ../../library/string.rst:162 +msgid "" +"Implement checking for unused arguments if desired. The arguments to this " +"function is the set of all argument keys that were actually referred to in " +"the format string (integers for positional arguments, and strings for named " +"arguments), and a reference to the *args* and *kwargs* that was passed to " +"vformat. The set of unused args can be calculated from these parameters. " +":meth:`check_unused_args` is assumed to raise an exception if the check " +"fails." +msgstr "" +"在必要时实现对未使用参数进行检测。 此函数的参数是是格式字符串中实际引用的所有参数键的集合(整数表示位置参数,字符串表示名称参数),以及被传给 " +"vformat 的 *args* 和 *kwargs* 的引用。 未使用参数的集合可以根据这些形参计算出来。 如果检测失败则 " +":meth:`check_unused_args` 应会引发一个异常。" + +#: ../../library/string.rst:172 +msgid "" +":meth:`format_field` simply calls the global :func:`format` built-in. The " +"method is provided so that subclasses can override it." +msgstr ":meth:`format_field` 会简单地调用内置全局函数 :func:`format`。 提供该方法是为了让子类能够重载它。" + +#: ../../library/string.rst:177 +msgid "" +"Converts the value (returned by :meth:`get_field`) given a conversion type " +"(as in the tuple returned by the :meth:`parse` method). The default version" +" understands 's' (str), 'r' (repr) and 'a' (ascii) conversion types." +msgstr "" +"使用给定的转换类型(来自 :meth:`parse` 方法所返回的元组)来转换(由 :meth:`get_field` 所返回的)值。 默认版本支持 " +"'s' (str), 'r' (repr) 和 'a' (ascii) 等转换类型。" + +#: ../../library/string.rst:186 +msgid "Format String Syntax" +msgstr "格式字符串语法" + +#: ../../library/string.rst:188 +msgid "" +"The :meth:`str.format` method and the :class:`Formatter` class share the " +"same syntax for format strings (although in the case of :class:`Formatter`, " +"subclasses can define their own format string syntax). The syntax is " +"related to that of :ref:`formatted string literals `, but it is " +"less sophisticated and, in particular, does not support arbitrary " +"expressions." +msgstr "" +":meth:`str.format` 方法和 :class:`Formatter` 类共享相同的格式字符串语法(虽然对于 " +":class:`Formatter` 来说,其子类可以定义它们自己的格式字符串语法)。 具体语法与 :ref:`格式化字符串字面值 " +"` 相似,但较为简单一些,并且关键的一点是不支持任意表达式。" + +#: ../../library/string.rst:201 +msgid "" +"Format strings contain \"replacement fields\" surrounded by curly braces " +"``{}``. Anything that is not contained in braces is considered literal text," +" which is copied unchanged to the output. If you need to include a brace " +"character in the literal text, it can be escaped by doubling: ``{{`` and " +"``}}``." +msgstr "" +"格式字符串包含有以花括号 ``{}`` 括起来的“替换字段”。 不在花括号之内的内容被视为字面文本,会不加修改地复制到输出中。 " +"如果你需要在字面文本中包含花括号字符,可以通过重复来转义: ``{{`` and ``}}``。" + +#: ../../library/string.rst:206 +msgid "The grammar for a replacement field is as follows:" +msgstr "替换字段的语法如下:" + +#: ../../library/string.rst:218 +msgid "" +"In less formal terms, the replacement field can start with a *field_name* " +"that specifies the object whose value is to be formatted and inserted into " +"the output instead of the replacement field. The *field_name* is optionally " +"followed by a *conversion* field, which is preceded by an exclamation point" +" ``'!'``, and a *format_spec*, which is preceded by a colon ``':'``. These " +"specify a non-default format for the replacement value." +msgstr "" +"用不太正式的术语来描述,替换字段开头可以用一个 *field_name* 指定要对值进行格式化并取代替换字符被插入到输出结果的对象。 " +"*field_name* 之后有可选的 *conversion* 字段,它是一个感叹号 ``'!'`` 加一个 " +"*format_spec*,并以一个冒号 ``':'`` 打头。 这些指明了替换值的非默认格式。" + +#: ../../library/string.rst:225 +msgid "See also the :ref:`formatspec` section." +msgstr "另请参阅 :ref:`formatspec` 一节。" + +#: ../../library/string.rst:227 +msgid "" +"The *field_name* itself begins with an *arg_name* that is either a number or" +" a keyword. If it's a number, it refers to a positional argument, and if " +"it's a keyword, it refers to a named keyword argument. If the numerical " +"arg_names in a format string are 0, 1, 2, ... in sequence, they can all be " +"omitted (not just some) and the numbers 0, 1, 2, ... will be automatically " +"inserted in that order. Because *arg_name* is not quote-delimited, it is not" +" possible to specify arbitrary dictionary keys (e.g., the strings ``'10'`` " +"or ``':-]'``) within a format string. The *arg_name* can be followed by any " +"number of index or attribute expressions. An expression of the form " +"``'.name'`` selects the named attribute using :func:`getattr`, while an " +"expression of the form ``'[index]'`` does an index lookup using " +":func:`__getitem__`." +msgstr "" +"*field_name* 本身以一个数字或关键字 *arg_name* 打头。 " +"如果为数字,则它指向一个位置参数,而如果为关键字,则它指向一个命名关键字参数。 如果格式字符串中的数字 arg_names 为 0, 1, 2, ..." +" 的序列,它们可以全部省略(而非部分省略),数字 0, 1, 2, ... 将会按顺序自动插入。 由于 *arg_name* " +"不使用引号分隔,因此无法在格式字符串中指定任意的字典键 (例如字符串 ``'10'`` 或 ``':-]'``)。 *arg_name* " +"之后可以带上任意数量的索引或属性表达式。 ``'.name'`` 形式的表达式会使用 :func:`getattr` 选择命名属性,而 " +"``'[index]'`` 形式的表达式会使用 :func:`__getitem__` 执行索引查找。" + +#: ../../library/string.rst:239 +msgid "" +"The positional argument specifiers can be omitted for :meth:`str.format`, so" +" ``'{} {}'.format(a, b)`` is equivalent to ``'{0} {1}'.format(a, b)``." +msgstr "" +"位置参数说明符对于 :meth:`str.format` 可以省略,因此 ``'{} {}'.format(a, b)`` 等价于 ``'{0} " +"{1}'.format(a, b)``。" + +#: ../../library/string.rst:243 +msgid "" +"The positional argument specifiers can be omitted for :class:`Formatter`." +msgstr "位置参数说明符对于 :class:`Formatter` 可以省略。" + +#: ../../library/string.rst:246 +msgid "Some simple format string examples::" +msgstr "一些简单的格式字符串示例" + +#: ../../library/string.rst:255 +msgid "" +"The *conversion* field causes a type coercion before formatting. Normally, " +"the job of formatting a value is done by the :meth:`__format__` method of " +"the value itself. However, in some cases it is desirable to force a type to" +" be formatted as a string, overriding its own definition of formatting. By " +"converting the value to a string before calling :meth:`__format__`, the " +"normal formatting logic is bypassed." +msgstr "" +"使用 *conversion* 字段在格式化之前进行类型强制转换。 通常,格式化值的工作由值本身的 :meth:`__format__` 方法来完成。 " +"但是,在某些情况下最好强制将类型格式化为一个字符串,覆盖其本身的格式化定义。 通过在调用 :meth:`__format__` " +"之前将值转换为字符串,可以绕过正常的格式化逻辑。" + +#: ../../library/string.rst:262 +msgid "" +"Three conversion flags are currently supported: ``'!s'`` which calls " +":func:`str` on the value, ``'!r'`` which calls :func:`repr` and ``'!a'`` " +"which calls :func:`ascii`." +msgstr "" +"目前支持的转换旗标有三种: ``'!s'`` 会对值调用 :func:`str`,``'!r'`` 调用 :func:`repr` 而 ``'!a'``" +" 则调用 :func:`ascii`。" + +#: ../../library/string.rst:266 +msgid "Some examples::" +msgstr "示例如下:" + +#: ../../library/string.rst:272 +msgid "" +"The *format_spec* field contains a specification of how the value should be " +"presented, including such details as field width, alignment, padding, " +"decimal precision and so on. Each value type can define its own " +"\"formatting mini-language\" or interpretation of the *format_spec*." +msgstr "" +"*format_spec* 字段包含值应如何呈现的规格描述,例如字段宽度、对齐、填充、小数精度等细节信息。 " +"每种值类型可以定义自己的“格式化迷你语言”或对 *format_spec* 的解读方式。" + +#: ../../library/string.rst:277 +msgid "" +"Most built-in types support a common formatting mini-language, which is " +"described in the next section." +msgstr "大多数内置类型都支持同样的格式化迷你语言,具体描述见下一节。" + +#: ../../library/string.rst:280 +msgid "" +"A *format_spec* field can also include nested replacement fields within it. " +"These nested replacement fields may contain a field name, conversion flag " +"and format specification, but deeper nesting is not allowed. The " +"replacement fields within the format_spec are substituted before the " +"*format_spec* string is interpreted. This allows the formatting of a value " +"to be dynamically specified." +msgstr "" +"*format_spec* 字段还可以在其内部包含嵌套的替换字段。 " +"这些嵌套的替换字段可能包括字段名称、转换旗标和格式规格描述,但是不再允许更深层的嵌套。 format_spec 内部的替换字段会在解读 " +"*format_spec* 字符串之前先被解读。 这将允许动态地指定特定值的格式。" + +#: ../../library/string.rst:287 +msgid "See the :ref:`formatexamples` section for some examples." +msgstr "请参阅 :ref:`formatexamples` 一节查看相关示例。" + +#: ../../library/string.rst:293 +msgid "Format Specification Mini-Language" +msgstr "格式规格迷你语言" + +#: ../../library/string.rst:295 +msgid "" +"\"Format specifications\" are used within replacement fields contained " +"within a format string to define how individual values are presented (see " +":ref:`formatstrings` and :ref:`f-strings`). They can also be passed directly" +" to the built-in :func:`format` function. Each formattable type may define " +"how the format specification is to be interpreted." +msgstr "" +"“格式规格”在格式字符串所包含的替换字段内部使用,用于定义单个值应如何呈现 (参见 :ref:`formatstrings` 和 " +":ref:`f-strings`)。 它们也可以被直接传给内置的 :func:`format` 函数。 " +"每种可格式化的类型都可以自行定义如何对格式规格进行解读。" + +#: ../../library/string.rst:302 +msgid "" +"Most built-in types implement the following options for format " +"specifications, although some of the formatting options are only supported " +"by the numeric types." +msgstr "大多数内置类型都为格式规格实现了下列选项,不过某些格式化选项只被数值类型所支持。" + +#: ../../library/string.rst:305 +msgid "" +"A general convention is that an empty format specification produces the same" +" result as if you had called :func:`str` on the value. A non-empty format " +"specification typically modifies the result." +msgstr "一般约定空的格式描述将产生与在值上调用 :func:`str` 相同的结果。 非空格式描述通常会修改此结果。" + +#: ../../library/string.rst:309 +msgid "The general form of a *standard format specifier* is:" +msgstr "*标准格式说明符* 的一般形式如下:" + +#: ../../library/string.rst:321 +msgid "" +"If a valid *align* value is specified, it can be preceded by a *fill* " +"character that can be any character and defaults to a space if omitted. It " +"is not possible to use a literal curly brace (\"``{``\" or \"``}``\") as the" +" *fill* character in a :ref:`formatted string literal ` or when " +"using the :meth:`str.format` method. However, it is possible to insert a " +"curly brace with a nested replacement field. This limitation doesn't affect" +" the :func:`format` function." +msgstr "" +"如果指定了一个有效的 *align* 值,则可以在该值前面加一个 *fill* 字符,它可以为任意字符,如果省略则默认为空格符。 在 " +":ref:`格式化字符串字面值 ` 或在使用 :meth:`str.format` 方法时是无法使用花括号字面值 " +"(\"``{``\" or \"``}``\") 作为 *fill* 字符的。 但是,通过嵌套替换字段插入花括号则是可以的。 这个限制不会影响 " +":func:`format` 函数。" + +#: ../../library/string.rst:330 +msgid "The meaning of the various alignment options is as follows:" +msgstr "各种对齐选项的含义如下:" + +#: ../../library/string.rst:339 ../../library/string.rst:370 +msgid "Option" +msgstr "属性" + +#: ../../library/string.rst:339 ../../library/string.rst:370 +#: ../../library/string.rst:440 ../../library/string.rst:451 +#: ../../library/string.rst:486 +msgid "Meaning" +msgstr "含意" + +#: ../../library/string.rst:341 +msgid "``'<'``" +msgstr "``'<'``" + +#: ../../library/string.rst:341 +msgid "" +"Forces the field to be left-aligned within the available space (this is the " +"default for most objects)." +msgstr "强制字段在可用空间内左对齐(这是大多数对象的默认值)。" + +#: ../../library/string.rst:344 +msgid "``'>'``" +msgstr "``'>'``" + +#: ../../library/string.rst:344 +msgid "" +"Forces the field to be right-aligned within the available space (this is the" +" default for numbers)." +msgstr "强制字段在可用空间内右对齐(这是数字的默认值)。" + +#: ../../library/string.rst:347 +msgid "``'='``" +msgstr "``'='``" + +#: ../../library/string.rst:347 +msgid "" +"Forces the padding to be placed after the sign (if any) but before the " +"digits. This is used for printing fields in the form '+000000120'. This " +"alignment option is only valid for numeric types. It becomes the default " +"when '0' immediately precedes the field width." +msgstr "" +"强制将填充放置在符号(如果有)之后但在数字之前。这用于以“+000000120”形式打印字段。此对齐选项仅对数字类型有效。当'0'紧接在字段宽度之前时,它成为默认值。" + +#: ../../library/string.rst:353 +msgid "``'^'``" +msgstr "``'^'``" + +#: ../../library/string.rst:353 +msgid "Forces the field to be centered within the available space." +msgstr "强制字段在可用空间内居中。" + +#: ../../library/string.rst:357 +msgid "" +"Note that unless a minimum field width is defined, the field width will " +"always be the same size as the data to fill it, so that the alignment option" +" has no meaning in this case." +msgstr "请注意,除非定义了最小字段宽度,否则字段宽度将始终与填充它的数据大小相同,因此在这种情况下,对齐选项没有意义。" + +#: ../../library/string.rst:361 +msgid "" +"The *sign* option is only valid for number types, and can be one of the " +"following:" +msgstr "*sign* 选项仅对数字类型有效,可以是以下之一:" + +#: ../../library/string.rst:372 +msgid "``'+'``" +msgstr "``'+'``" + +#: ../../library/string.rst:372 +msgid "" +"indicates that a sign should be used for both positive as well as negative " +"numbers." +msgstr "表示正负号将同时用于正数与负数,例如 +3 , -1 。" + +#: ../../library/string.rst:375 +msgid "``'-'``" +msgstr "``'-'``" + +#: ../../library/string.rst:375 +msgid "" +"indicates that a sign should be used only for negative numbers (this is the " +"default behavior)." +msgstr "表示正负号仅用于负数(这是默认行为),例如 3 , -1。" + +#: ../../library/string.rst:378 +msgid "space" +msgstr "space" + +#: ../../library/string.rst:378 +msgid "" +"indicates that a leading space should be used on positive numbers, and a " +"minus sign on negative numbers." +msgstr "表示应在正数上使用前导空格,在负数上使用负号。" + +#: ../../library/string.rst:385 +msgid "" +"The ``'#'`` option causes the \"alternate form\" to be used for the " +"conversion. The alternate form is defined differently for different types." +" This option is only valid for integer, float and complex types. For " +"integers, when binary, octal, or hexadecimal output is used, this option " +"adds the respective prefix ``'0b'``, ``'0o'``, ``'0x'``, or ``'0X'`` to the " +"output value. For float and complex the alternate form causes the result of " +"the conversion to always contain a decimal-point character, even if no " +"digits follow it. Normally, a decimal-point character appears in the result " +"of these conversions only if a digit follows it. In addition, for ``'g'`` " +"and ``'G'`` conversions, trailing zeros are not removed from the result." +msgstr "" +"``'#'`` 选项可让“替代形式”被用于执行转换。 替代形式会针对不同的类型分别定义。 此选项仅适用于整数、浮点数和复数类型。 " +"对于整数类型,当使用二进制、八进制或十六进制输出时,此选项会为输出值分别添加相应的 ``'0b'``, ``'0o'``, ``'0x'`` 或 " +"``'0X'`` 前缀。 对于浮点数和复数类型,替代形式会使得转换结果总是包含小数点符号,即使其不带小数部分。 " +"通常只有在带有小数部分的情况下,此类转换的结果中才会出现小数点符号。 此外,对于 ``'g'`` 和 ``'G'`` 转换,末尾的零不会从结果中被移除。" + +#: ../../library/string.rst:399 +msgid "" +"The ``','`` option signals the use of a comma for a thousands separator. For" +" a locale aware separator, use the ``'n'`` integer presentation type " +"instead." +msgstr "``','`` 选项表示使用逗号作为千位分隔符。 对于感应区域设置的分隔符,请改用 ``'n'`` 整数表示类型。" + +#: ../../library/string.rst:403 +msgid "Added the ``','`` option (see also :pep:`378`)." +msgstr "添加了 ``','`` 选项 (另请参阅 :pep:`378`)。" + +#: ../../library/string.rst:408 +msgid "" +"The ``'_'`` option signals the use of an underscore for a thousands " +"separator for floating point presentation types and for integer presentation" +" type ``'d'``. For integer presentation types ``'b'``, ``'o'``, ``'x'``, " +"and ``'X'``, underscores will be inserted every 4 digits. For other " +"presentation types, specifying this option is an error." +msgstr "" +"``'_'`` 选项表示对浮点表示类型和整数表示类型 ``'d'`` 使用下划线作为千位分隔符。 对于整数表示类型 ``'b'``, ``'o'``, " +"``'x'`` 和 ``'X'``,将为每 4 个数位插入一个下划线。 对于其他表示类型指定此选项则将导致错误。" + +#: ../../library/string.rst:415 +msgid "Added the ``'_'`` option (see also :pep:`515`)." +msgstr "添加了 ``'_'`` 选项 (另请参阅 :pep:`515`)。" + +#: ../../library/string.rst:418 +msgid "" +"*width* is a decimal integer defining the minimum total field width, " +"including any prefixes, separators, and other formatting characters. If not " +"specified, then the field width will be determined by the content." +msgstr "*width* 是一个定义最小总字段宽度的十进制整数,包括任何前缀、分隔符和其他格式化字符。 如果未指定,则字段宽度将由内容确定。" + +#: ../../library/string.rst:422 +msgid "" +"When no explicit alignment is given, preceding the *width* field by a zero " +"(``'0'``) character enables sign-aware zero-padding for numeric types. This" +" is equivalent to a *fill* character of ``'0'`` with an *alignment* type of " +"``'='``." +msgstr "" +"当未显式给出对齐方式时,在 *width* 字段前加一个零 (``'0'``) 字段将为数字类型启用感知正负号的零填充。 这相当于设置 *fill* " +"字符为 ``'0'`` 且 *alignment* 类型为 ``'='``。" + +#: ../../library/string.rst:427 +msgid "" +"The *precision* is a decimal integer indicating how many digits should be " +"displayed after the decimal point for presentation types ``'f'`` and " +"``'F'``, or before and after the decimal point for presentation types " +"``'g'`` or ``'G'``. For string presentation types the field indicates the " +"maximum field size - in other words, how many characters will be used from " +"the field content. The *precision* is not allowed for integer presentation " +"types." +msgstr "" +"*precision* 是一个十进制整数,它表示对于以表示类型 ``'f'`` 和 ``'F'`` " +"格式化的数值应当在小数点后显示多少个数位,或者对于以表示类型 ``'g'`` 或 ``'G'`` 格式化的数值应当在小数点前后显示多少个数位。 " +"对于字符串表示类型,该字段表示最大的字段大小 ——换句话说,就是要使用多少个来自字段内容的字符。不允许对整数表示类型指定 *precision* 字段。" + +#: ../../library/string.rst:435 +msgid "Finally, the *type* determines how the data should be presented." +msgstr "最后,*type* 确定了数据应如何呈现。" + +#: ../../library/string.rst:437 +msgid "The available string presentation types are:" +msgstr "可用的字符串表示类型是:" + +#: ../../library/string.rst:440 ../../library/string.rst:451 +#: ../../library/string.rst:486 +msgid "Type" +msgstr "类型" + +#: ../../library/string.rst:442 +msgid "``'s'``" +msgstr "``'s'``" + +#: ../../library/string.rst:442 +msgid "" +"String format. This is the default type for strings and may be omitted." +msgstr "字符串格式。这是字符串的默认类型,可以省略。" + +#: ../../library/string.rst:445 ../../library/string.rst:474 +#: ../../library/string.rst:561 +msgid "None" +msgstr "None" + +#: ../../library/string.rst:445 +msgid "The same as ``'s'``." +msgstr "和 ``'s'`` 一样。" + +#: ../../library/string.rst:448 +msgid "The available integer presentation types are:" +msgstr "可用的整数表示类型是:" + +#: ../../library/string.rst:453 +msgid "``'b'``" +msgstr "``'b'``" + +#: ../../library/string.rst:453 +msgid "Binary format. Outputs the number in base 2." +msgstr "二进制格式。 输出以 2 为基数的数字。" + +#: ../../library/string.rst:455 +msgid "``'c'``" +msgstr "``'c'``" + +#: ../../library/string.rst:455 +msgid "" +"Character. Converts the integer to the corresponding unicode character " +"before printing." +msgstr "字符。在打印之前将整数转换为相应的unicode字符。" + +#: ../../library/string.rst:458 +msgid "``'d'``" +msgstr "``'d'``" + +#: ../../library/string.rst:458 +msgid "Decimal Integer. Outputs the number in base 10." +msgstr "十进制整数。 输出以 10 为基数的数字。" + +#: ../../library/string.rst:460 +msgid "``'o'``" +msgstr "``'o'``" + +#: ../../library/string.rst:460 +msgid "Octal format. Outputs the number in base 8." +msgstr "八进制格式。 输出以 8 为基数的数字。" + +#: ../../library/string.rst:462 +msgid "``'x'``" +msgstr "``'x'``" + +#: ../../library/string.rst:462 +msgid "" +"Hex format. Outputs the number in base 16, using lower-case letters for the " +"digits above 9." +msgstr "十六进制格式。 输出以 16 为基数的数字,使用小写字母表示 9 以上的数码。" + +#: ../../library/string.rst:465 +msgid "``'X'``" +msgstr "``'X'``" + +#: ../../library/string.rst:465 +msgid "" +"Hex format. Outputs the number in base 16, using upper-case letters for the " +"digits above 9. In case ``'#'`` is specified, the prefix ``'0x'`` will be " +"upper-cased to ``'0X'`` as well." +msgstr "" +"十六进制格式。 输出以 16 为基数的数字,使用大写字母表示 9 以上的数码。 在指定 ``'#'`` 的情况下,前缀 ``'0x'`` " +"也将被转为大写形式 ``'0X'``。" + +#: ../../library/string.rst:470 ../../library/string.rst:554 +msgid "``'n'``" +msgstr "``'n'``" + +#: ../../library/string.rst:470 +msgid "" +"Number. This is the same as ``'d'``, except that it uses the current locale " +"setting to insert the appropriate number separator characters." +msgstr "数字。 这与 ``'d'`` 相似,不同之处在于它会使用当前区域设置来插入适当的数字分隔字符。" + +#: ../../library/string.rst:474 +msgid "The same as ``'d'``." +msgstr "和 ``'d'`` 相同。" + +#: ../../library/string.rst:477 +msgid "" +"In addition to the above presentation types, integers can be formatted with " +"the floating point presentation types listed below (except ``'n'`` and " +"``None``). When doing so, :func:`float` is used to convert the integer to a " +"floating point number before formatting." +msgstr "" +"在上述的表示类型之外,整数还可以通过下列的浮点表示类型来格式化 (除了 ``'n'`` 和 ``None``)。 当这样做时,会在格式化之前使用 " +":func:`float` 将整数转换为浮点数。" + +#: ../../library/string.rst:482 +msgid "" +"The available presentation types for :class:`float` and " +":class:`~decimal.Decimal` values are:" +msgstr ":class:`float` 和 :class:`~decimal.Decimal` 值的可用表示类型有:" + +#: ../../library/string.rst:488 +msgid "``'e'``" +msgstr "``'e'``" + +#: ../../library/string.rst:488 +msgid "" +"Scientific notation. For a given precision ``p``, formats the number in " +"scientific notation with the letter 'e' separating the coefficient from the " +"exponent. The coefficient has one digit before and ``p`` digits after the " +"decimal point, for a total of ``p + 1`` significant digits. With no " +"precision given, uses a precision of ``6`` digits after the decimal point " +"for :class:`float`, and shows all coefficient digits for " +":class:`~decimal.Decimal`. If no digits follow the decimal point, the " +"decimal point is also removed unless the ``#`` option is used." +msgstr "" +"科学计数法。 对于一个给定的精度 ``p``,将数字格式化为以字母 'e' 分隔系数和指数的科学计数法形式。 系数在小数点之前有一位,之后有 ``p``" +" 位,总计 ``p + 1`` 个有效数位。 如未指定精度,则会对 :class:`float` 采用小数点之后 ``6`` 位精度,而对 " +":class:`~decimal.Decimal` 则显示所有系数位。 如果小数点之后没有数位,则小数点也会被略去,除非使用了 ``#`` 选项。" + +#: ../../library/string.rst:500 +msgid "``'E'``" +msgstr "``'E'``" + +#: ../../library/string.rst:500 +msgid "" +"Scientific notation. Same as ``'e'`` except it uses an upper case 'E' as the" +" separator character." +msgstr "科学计数法。 与 ``'e'`` 相似,不同之处在于它使用大写字母 'E' 作为分隔字符。" + +#: ../../library/string.rst:503 +msgid "``'f'``" +msgstr "``'f'``" + +#: ../../library/string.rst:503 +msgid "" +"Fixed-point notation. For a given precision ``p``, formats the number as a " +"decimal number with exactly ``p`` digits following the decimal point. With " +"no precision given, uses a precision of ``6`` digits after the decimal point" +" for :class:`float`, and uses a precision large enough to show all " +"coefficient digits for :class:`~decimal.Decimal`. If no digits follow the " +"decimal point, the decimal point is also removed unless the ``#`` option is " +"used." +msgstr "" +"定点表示法。 对于一个给定的精度 ``p``,将数字格式化为在小数点之后恰好有 ``p`` 位的小数形式。 如未指定精度,则会对 " +":class:`float` 采用小数点之后 ``6`` 位精度,而对 :class:`~decimal.Decimal` " +"则使用大到足够显示所有系数位的精度。 如果小数点之后没有数位,则小数点也会被略去,除非使用了 ``#`` 选项。" + +#: ../../library/string.rst:513 +msgid "``'F'``" +msgstr "``'F'``" + +#: ../../library/string.rst:513 +msgid "" +"Fixed-point notation. Same as ``'f'``, but converts ``nan`` to ``NAN`` and " +"``inf`` to ``INF``." +msgstr "定点表示。 与 ``'f'`` 相似,但会将 ``nan`` 转为 ``NAN`` 并将 ``inf`` 转为 ``INF``。" + +#: ../../library/string.rst:516 +msgid "``'g'``" +msgstr "``'g'``" + +#: ../../library/string.rst:516 +msgid "" +"General format. For a given precision ``p >= 1``, this rounds the number to" +" ``p`` significant digits and then formats the result in either fixed-point " +"format or in scientific notation, depending on its magnitude. A precision of" +" ``0`` is treated as equivalent to a precision of ``1``." +msgstr "" +"常规格式。 对于给定精度 ``p >= 1``,这会将数值舍入到 ``p`` " +"个有效数位,再将结果以定点表示法或科学计数法进行格式化,具体取决于其值的大小。 精度 ``0`` 会被视为等价于精度 ``1``。" + +#: ../../library/string.rst:523 +msgid "" +"The precise rules are as follows: suppose that the result formatted with " +"presentation type ``'e'`` and precision ``p-1`` would have exponent ``exp``." +" Then, if ``m <= exp < p``, where ``m`` is -4 for floats and -6 for " +":class:`Decimals `, the number is formatted with " +"presentation type ``'f'`` and precision ``p-1-exp``. Otherwise, the number " +"is formatted with presentation type ``'e'`` and precision ``p-1``. In both " +"cases insignificant trailing zeros are removed from the significand, and the" +" decimal point is also removed if there are no remaining digits following " +"it, unless the ``'#'`` option is used." +msgstr "" +"准确的规则如下:假设使用表示类型 ``'e'`` 和精度 ``p-1`` 进行格式化的结果具有指数值 ``exp``。 那么如果 ``m <= exp " +"< p``,其中 ``m`` 以 -4 表示浮点值而以 -6 表示 :class:`Decimal ` " +"值,该数字将使用类型 ``'f'`` 和精度 ``p-1-exp`` 进行格式化。 否则的话,该数字将使用表示类型 ``'e'`` 和精度 " +"``p-1`` 进行格式化。 在两种情况下,都会从有效数字中移除无意义的末尾零,如果小数点之后没有余下数字则小数点也会被移除,除非使用了 ``'#'``" +" 选项。" + +#: ../../library/string.rst:536 +msgid "" +"With no precision given, uses a precision of ``6`` significant digits for " +":class:`float`. For :class:`~decimal.Decimal`, the coefficient of the result" +" is formed from the coefficient digits of the value; scientific notation is " +"used for values smaller than ``1e-6`` in absolute value and values where the" +" place value of the least significant digit is larger than 1, and fixed-" +"point notation is used otherwise." +msgstr "" +"如未指定精度,会对 :class:`float` 采用 ``6`` 个有效数位的精度。 对于 " +":class:`~decimal.Decimal`,结果的系数会沿用原值的系数数位;对于绝对值小于 ``1e-6`` 的值以及最小有效数位的位值大于 1" +" 的数值将会使用科学计数法,在其他情况下则会使用定点表示法。" + +#: ../../library/string.rst:545 +msgid "" +"Positive and negative infinity, positive and negative zero, and nans, are " +"formatted as ``inf``, ``-inf``, ``0``, ``-0`` and ``nan`` respectively, " +"regardless of the precision." +msgstr "" +"正负无穷,正负零和 nan 会分别被格式化为 ``inf``, ``-inf``, ``0``, ``-0`` 和 ``nan``,无论精度如何设定。" + +#: ../../library/string.rst:550 +msgid "``'G'``" +msgstr "``'G'``" + +#: ../../library/string.rst:550 +msgid "" +"General format. Same as ``'g'`` except switches to ``'E'`` if the number " +"gets too large. The representations of infinity and NaN are uppercased, too." +msgstr "常规格式。 类似于 ``'g'``,不同之处在于当数值非常大时会切换为 ``'E'``。 无穷与 NaN 也会表示为大写形式。" + +#: ../../library/string.rst:554 +msgid "" +"Number. This is the same as ``'g'``, except that it uses the current locale " +"setting to insert the appropriate number separator characters." +msgstr "数字。 这与 ``'g'`` 相似,不同之处在于它会使用当前区域设置来插入适当的数字分隔字符。" + +#: ../../library/string.rst:558 +msgid "``'%'``" +msgstr "``'%'``" + +#: ../../library/string.rst:558 +msgid "" +"Percentage. Multiplies the number by 100 and displays in fixed (``'f'``) " +"format, followed by a percent sign." +msgstr "百分比。 将数字乘以 100 并显示为定点 (``'f'``) 格式,后面带一个百分号。" + +#: ../../library/string.rst:561 +msgid "" +"For :class:`float` this is the same as ``'g'``, except that when fixed-point" +" notation is used to format the result, it always includes at least one " +"digit past the decimal point. The precision used is as large as needed to " +"represent the given value faithfully." +msgstr "" +"对于 :class:`float` 来说这类似于 ``'g'``,不同之处在于当使用定点表示法时,小数点之后将至少显示一位。 " +"所用的精度会大到足以精确表示给定的值。" + +#: ../../library/string.rst:567 +msgid "" +"For :class:`~decimal.Decimal`, this is the same as either ``'g'`` or ``'G'``" +" depending on the value of ``context.capitals`` for the current decimal " +"context." +msgstr "" +"对于 :class:`~decimal.Decimal` 来说这相当于 ``'g'`` 或 ``'G'``,具体取决于当前 decimal 上下文的 " +"``context.capitals`` 值。" + +#: ../../library/string.rst:571 +msgid "" +"The overall effect is to match the output of :func:`str` as altered by the " +"other format modifiers." +msgstr "总体效果是将 :func:`str` 的输出匹配为其他格式化因子所调整出的样子。" + +#: ../../library/string.rst:579 +msgid "Format examples" +msgstr "格式示例" + +#: ../../library/string.rst:581 +msgid "" +"This section contains examples of the :meth:`str.format` syntax and " +"comparison with the old ``%``-formatting." +msgstr "本节包含 :meth:`str.format` 语法的示例以及与旧式 ``%`` 格式化的比较。" + +#: ../../library/string.rst:584 +msgid "" +"In most of the cases the syntax is similar to the old ``%``-formatting, with" +" the addition of the ``{}`` and with ``:`` used instead of ``%``. For " +"example, ``'%03.2f'`` can be translated to ``'{:03.2f}'``." +msgstr "" +"该语法在大多数情况下与旧式的 ``%`` 格式化类似,只是增加了 ``{}`` 和 ``:`` 来取代 ``%``。 例如,,``'%03.2f'`` " +"可以被改写为 ``'{:03.2f}'``。" + +#: ../../library/string.rst:588 +msgid "" +"The new format syntax also supports new and different options, shown in the " +"following examples." +msgstr "新的格式语法还支持新增的不同选项,将在以下示例中说明。" + +#: ../../library/string.rst:591 +msgid "Accessing arguments by position::" +msgstr "按位置访问参数::" + +#: ../../library/string.rst:604 +msgid "Accessing arguments by name::" +msgstr "按名称访问参数::" + +#: ../../library/string.rst:612 +msgid "Accessing arguments' attributes::" +msgstr "访问参数的属性::" + +#: ../../library/string.rst:627 +msgid "Accessing arguments' items::" +msgstr "访问参数的项::" + +#: ../../library/string.rst:633 +msgid "Replacing ``%s`` and ``%r``::" +msgstr "替代 ``%s`` 和 ``%r``::" + +#: ../../library/string.rst:638 +msgid "Aligning the text and specifying a width::" +msgstr "对齐文本以及指定宽度::" + +#: ../../library/string.rst:649 +msgid "Replacing ``%+f``, ``%-f``, and ``% f`` and specifying a sign::" +msgstr "替代 ``%+f``, ``%-f`` 和 ``% f`` 以及指定正负号::" + +#: ../../library/string.rst:658 +msgid "" +"Replacing ``%x`` and ``%o`` and converting the value to different bases::" +msgstr "替代 ``%x`` 和 ``%o`` 以及转换基于不同进位制的值::" + +#: ../../library/string.rst:667 +msgid "Using the comma as a thousands separator::" +msgstr "使用逗号作为千位分隔符::" + +#: ../../library/string.rst:672 +msgid "Expressing a percentage::" +msgstr "表示为百分数::" + +#: ../../library/string.rst:679 +msgid "Using type-specific formatting::" +msgstr "使用特定类型的专属格式化::" + +#: ../../library/string.rst:686 +msgid "Nesting arguments and more complex examples::" +msgstr "嵌套参数以及更复杂的示例::" + +#: ../../library/string.rst:720 +msgid "Template strings" +msgstr "模板字符串" + +#: ../../library/string.rst:722 +msgid "" +"Template strings provide simpler string substitutions as described in " +":pep:`292`. A primary use case for template strings is for " +"internationalization (i18n) since in that context, the simpler syntax and " +"functionality makes it easier to translate than other built-in string " +"formatting facilities in Python. As an example of a library built on " +"template strings for i18n, see the `flufl.i18n " +"`_ package." +msgstr "" +"模板字符串提供了由 :pep:`292` 所描述的更简便的字符串替换方式。 模板字符串的一个主要用例是文本国际化 " +"(i18n),因为在此场景下,更简单的语法和功能使得文本翻译过程比使用 Python 的其他内置字符串格式化工具更为方便。 作为基于模板字符串构建以实现" +" i18n 的库的一个示例,请参看 `flufl.i18n `_" +" 包。" + +#: ../../library/string.rst:732 +msgid "" +"Template strings support ``$``-based substitutions, using the following " +"rules:" +msgstr "模板字符串支持基于 ``$`` 的替换,使用以下规则:" + +#: ../../library/string.rst:734 +msgid "``$$`` is an escape; it is replaced with a single ``$``." +msgstr "``$$`` 为转义符号;它会被替换为单个的 ``$``。" + +#: ../../library/string.rst:736 +msgid "" +"``$identifier`` names a substitution placeholder matching a mapping key of " +"``\"identifier\"``. By default, ``\"identifier\"`` is restricted to any " +"case-insensitive ASCII alphanumeric string (including underscores) that " +"starts with an underscore or ASCII letter. The first non-identifier " +"character after the ``$`` character terminates this placeholder " +"specification." +msgstr "" +"``$identifier`` 为替换占位符,它会匹配一个名为 ``\"identifier\"`` 的映射键。 " +"在默认情况下,``\"identifier\"`` 限制为任意 ASCII 字母数字(包括下划线)组成的字符串,不区分大小写,以下划线或 ASCII " +"字母开头。 在 ``$`` 字符之后的第一个非标识符字符将表明占位符的终结。" + +#: ../../library/string.rst:743 +msgid "" +"``${identifier}`` is equivalent to ``$identifier``. It is required when " +"valid identifier characters follow the placeholder but are not part of the " +"placeholder, such as ``\"${noun}ification\"``." +msgstr "" +"``${identifier}`` 等价于 ``$identifier``。 当占位符之后紧跟着有效的但又不是占位符一部分的标识符字符时需要使用,例如 " +"``\"${noun}ification\"``。" + +#: ../../library/string.rst:747 +msgid "" +"Any other appearance of ``$`` in the string will result in a " +":exc:`ValueError` being raised." +msgstr "在字符串的其他位置出现 ``$`` 将导致引发 :exc:`ValueError`。" + +#: ../../library/string.rst:750 +msgid "" +"The :mod:`string` module provides a :class:`Template` class that implements " +"these rules. The methods of :class:`Template` are:" +msgstr "" +":mod:`string` 模块提供了实现这些规则的 :class:`Template` 类。 :class:`Template` 有下列方法:" + +#: ../../library/string.rst:756 +msgid "The constructor takes a single argument which is the template string." +msgstr "该构造器接受一个参数作为模板字符串。" + +#: ../../library/string.rst:761 +msgid "" +"Performs the template substitution, returning a new string. *mapping* is " +"any dictionary-like object with keys that match the placeholders in the " +"template. Alternatively, you can provide keyword arguments, where the " +"keywords are the placeholders. When both *mapping* and *kwds* are given and" +" there are duplicates, the placeholders from *kwds* take precedence." +msgstr "" +"执行模板替换,返回一个新字符串。 *mapping* 为任意字典类对象,其中的键将匹配模板中的占位符。 " +"或者你也可以提供一组关键字参数,其中的关键字即对应占位符。 当同时给出 *mapping* 和 *kwds* 并且存在重复时,则以 *kwds* " +"中的占位符为优先。" + +#: ../../library/string.rst:770 +msgid "" +"Like :meth:`substitute`, except that if placeholders are missing from " +"*mapping* and *kwds*, instead of raising a :exc:`KeyError` exception, the " +"original placeholder will appear in the resulting string intact. Also, " +"unlike with :meth:`substitute`, any other appearances of the ``$`` will " +"simply return ``$`` instead of raising :exc:`ValueError`." +msgstr "" +"类似于 :meth:`substitute`,不同之处是如果有占位符未在 *mapping* 和 *kwds* 中找到,不是引发 " +":exc:`KeyError` 异常,而是将原始占位符不加修改地显示在结果字符串中。 另一个与 :meth:`substitute` " +"的差异是任何在其他情况下出现的 ``$`` 将简单地返回 ``$`` 而不是引发 :exc:`ValueError`。" + +#: ../../library/string.rst:776 +msgid "" +"While other exceptions may still occur, this method is called \"safe\" " +"because it always tries to return a usable string instead of raising an " +"exception. In another sense, :meth:`safe_substitute` may be anything other " +"than safe, since it will silently ignore malformed templates containing " +"dangling delimiters, unmatched braces, or placeholders that are not valid " +"Python identifiers." +msgstr "" +"此方法被认为“安全”,因为虽然仍有可能发生其他异常,但它总是尝试返回可用的字符串而不是引发一个异常。 " +"从另一方面来说,:meth:`safe_substitute` " +"也可能根本算不上安全,因为它将静默地忽略错误格式的模板,例如包含多余的分隔符、不成对的花括号或不是合法 Python 标识符的占位符等等。" + +#: ../../library/string.rst:783 +msgid ":class:`Template` instances also provide one public data attribute:" +msgstr ":class:`Template` 的实例还提供一个公有数据属性:" + +#: ../../library/string.rst:787 +msgid "" +"This is the object passed to the constructor's *template* argument. In " +"general, you shouldn't change it, but read-only access is not enforced." +msgstr "这是作为构造器的 *template* 参数被传入的对象。 一般来说,你不应该修改它,但并不强制要求只读访问。" + +#: ../../library/string.rst:790 +msgid "Here is an example of how to use a Template::" +msgstr "以下是一个如何使用模版的示例:" + +#: ../../library/string.rst:808 +msgid "" +"Advanced usage: you can derive subclasses of :class:`Template` to customize " +"the placeholder syntax, delimiter character, or the entire regular " +"expression used to parse template strings. To do this, you can override " +"these class attributes:" +msgstr "" +"进阶用法:你可以派生 :class:`Template` 的子类来自定义占位符语法、分隔符,或用于解析模板字符串的整个正则表达式。 " +"为此目的,你可以重载这些类属性:" + +#: ../../library/string.rst:813 +msgid "" +"*delimiter* -- This is the literal string describing a placeholder " +"introducing delimiter. The default value is ``$``. Note that this should " +"*not* be a regular expression, as the implementation will call " +":meth:`re.escape` on this string as needed. Note further that you cannot " +"change the delimiter after class creation (i.e. a different delimiter must " +"be set in the subclass's class namespace)." +msgstr "" +"*delimiter* -- 这是用来表示占位符的起始的分隔符的字符串字面值。 默认值为 ``$``。 请注意此参数 *不能* " +"为正则表达式,因为其实现将在必要时对此字符串调用 :meth:`re.escape`。 " +"还要注意你不能在创建类之后改变此分隔符(例如在子类的类命名空间中必须设置不同的分隔符)。" + +#: ../../library/string.rst:820 +msgid "" +"*idpattern* -- This is the regular expression describing the pattern for " +"non-braced placeholders. The default value is the regular expression " +"``(?a:[_a-z][_a-z0-9]*)``. If this is given and *braceidpattern* is " +"``None`` this pattern will also apply to braced placeholders." +msgstr "" +"*idpattern* -- 这是用来描述不带花括号的占位符的模式的正则表达式。 默认值为正则表达式 " +"``(?a:[_a-z][_a-z0-9]*)``。 如果给出了此属性并且 *braceidpattern* 为 ``None`` " +"则此模式也将作用于带花括号的占位符。" + +#: ../../library/string.rst:827 +msgid "" +"Since default *flags* is ``re.IGNORECASE``, pattern ``[a-z]`` can match with" +" some non-ASCII characters. That's why we use the local ``a`` flag here." +msgstr "" +"由于默认的 *flags* 为 ``re.IGNORECASE``,模式 ``[a-z]`` 可以匹配某些非 ASCII 字符。 " +"因此我们在这里使用了局部旗标 ``a``。" + +#: ../../library/string.rst:831 +msgid "" +"*braceidpattern* can be used to define separate patterns used inside and " +"outside the braces." +msgstr "*braceidpattern* 可被用来定义对花括号内部和外部进行区分的模式。" + +#: ../../library/string.rst:835 +msgid "" +"*braceidpattern* -- This is like *idpattern* but describes the pattern for " +"braced placeholders. Defaults to ``None`` which means to fall back to " +"*idpattern* (i.e. the same pattern is used both inside and outside braces). " +"If given, this allows you to define different patterns for braced and " +"unbraced placeholders." +msgstr "" +"*braceidpattern* -- 此属性类似于 *idpattern* 但是用来描述带花括号的占位符的模式。 默认值 ``None`` " +"意味着回退到 *idpattern* (即在花括号内部和外部使用相同的模式)。 如果给出此属性,这将允许你为带花括号和不带花括号的占位符定义不同的模式。" + +#: ../../library/string.rst:843 +msgid "" +"*flags* -- The regular expression flags that will be applied when compiling " +"the regular expression used for recognizing substitutions. The default " +"value is ``re.IGNORECASE``. Note that ``re.VERBOSE`` will always be added " +"to the flags, so custom *idpattern*\\ s must follow conventions for verbose " +"regular expressions." +msgstr "" +"*flags* -- 将在编译用于识别替换内容的正则表达式被应用的正则表达式旗标。 默认值为 ``re.IGNORECASE``。 请注意 " +"``re.VERBOSE`` 总是会被加为旗标,因此自定义的 *idpattern* 必须遵循详细正则表达式的约定。" + +#: ../../library/string.rst:851 +msgid "" +"Alternatively, you can provide the entire regular expression pattern by " +"overriding the class attribute *pattern*. If you do this, the value must be" +" a regular expression object with four named capturing groups. The " +"capturing groups correspond to the rules given above, along with the invalid" +" placeholder rule:" +msgstr "" +"作为另一种选项,你可以通过重载类属性 *pattern* 来提供整个正则表达式模式。 如果你这样做,该值必须为一个具有四个命名捕获组的正则表达式对象。 " +"这些捕获组对应于上面已经给出的规则,以及无效占位符的规则:" + +#: ../../library/string.rst:857 +msgid "" +"*escaped* -- This group matches the escape sequence, e.g. ``$$``, in the " +"default pattern." +msgstr "*escaped* -- 这个组匹配转义序列,在默认模式中即 ``$$``。" + +#: ../../library/string.rst:860 +msgid "" +"*named* -- This group matches the unbraced placeholder name; it should not " +"include the delimiter in capturing group." +msgstr "*named* -- 这个组匹配不带花括号的占位符名称;它不应当包含捕获组中的分隔符。" + +#: ../../library/string.rst:863 +msgid "" +"*braced* -- This group matches the brace enclosed placeholder name; it " +"should not include either the delimiter or braces in the capturing group." +msgstr "*braced* -- 这个组匹配带有花括号的占位符名称;它不应当包含捕获组中的分隔符或者花括号。" + +#: ../../library/string.rst:866 +msgid "" +"*invalid* -- This group matches any other delimiter pattern (usually a " +"single delimiter), and it should appear last in the regular expression." +msgstr "*invalid* -- 这个组匹配任何其他分隔符模式(通常为单个分隔符),并且它应当出现在正则表达式的末尾。" + +#: ../../library/string.rst:871 +msgid "Helper functions" +msgstr "辅助函数" + +#: ../../library/string.rst:875 +msgid "" +"Split the argument into words using :meth:`str.split`, capitalize each word " +"using :meth:`str.capitalize`, and join the capitalized words using " +":meth:`str.join`. If the optional second argument *sep* is absent or " +"``None``, runs of whitespace characters are replaced by a single space and " +"leading and trailing whitespace are removed, otherwise *sep* is used to " +"split and join the words." +msgstr "" +"使用 :meth:`str.split` 将参数拆分为单词,使用 :meth:`str.capitalize` 将单词转为大写形式,使用 " +":meth:`str.join` 将大写的单词进行拼接。 如果可选的第二个参数 *sep* 被省略或为 " +"``None``,则连续的空白字符会被替换为单个空格符并且开头和末尾的空白字符会被移除,否则 *sep* 会被用来拆分和拼接单词。" diff --git a/library/stringprep.po b/library/stringprep.po new file mode 100644 index 000000000..e0274b5de --- /dev/null +++ b/library/stringprep.po @@ -0,0 +1,179 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) 2001-2022, Python Software Foundation +# This file is distributed under the same license as the Python package. +# FIRST AUTHOR , YEAR. +# +# Translators: +# Freesand Leo , 2019 +# +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: Python 3.9\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2022-11-04 14:34+0000\n" +"PO-Revision-Date: 2017-02-16 23:28+0000\n" +"Last-Translator: Freesand Leo , 2019\n" +"Language-Team: Chinese (China) (https://www.transifex.com/python-doc/teams/5390/zh_CN/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: zh_CN\n" +"Plural-Forms: nplurals=1; plural=0;\n" + +#: ../../library/stringprep.rst:2 +msgid ":mod:`stringprep` --- Internet String Preparation" +msgstr ":mod:`stringprep` --- 因特网字符串预备" + +#: ../../library/stringprep.rst:10 +msgid "**Source code:** :source:`Lib/stringprep.py`" +msgstr "**源代码:** :source:`Lib/stringprep.py`" + +#: ../../library/stringprep.rst:14 +msgid "" +"When identifying things (such as host names) in the internet, it is often " +"necessary to compare such identifications for \"equality\". Exactly how this" +" comparison is executed may depend on the application domain, e.g. whether " +"it should be case-insensitive or not. It may be also necessary to restrict " +"the possible identifications, to allow only identifications consisting of " +"\"printable\" characters." +msgstr "" +"在标识因特网上的事物(例如主机名),经常需要比较这些标识是否(相等)。 这种比较的具体执行可能会取决于应用域的不同,例如是否要区分大小写等等。 " +"有时也可能需要限制允许的标识为仅由“可打印”字符组成。" + +#: ../../library/stringprep.rst:21 +msgid "" +":rfc:`3454` defines a procedure for \"preparing\" Unicode strings in " +"internet protocols. Before passing strings onto the wire, they are processed" +" with the preparation procedure, after which they have a certain normalized " +"form. The RFC defines a set of tables, which can be combined into profiles. " +"Each profile must define which tables it uses, and what other optional parts" +" of the ``stringprep`` procedure are part of the profile. One example of a " +"``stringprep`` profile is ``nameprep``, which is used for internationalized " +"domain names." +msgstr "" +":rfc:`3454` 定义了在因特网协议中 Unicode 字符串的“预备”过程。 " +"在将字符串连线传输之前,它们会先使用预备过程进行处理,之后它们将具有特定的标准形式。 该 RFC 定义了一系列表格,它们可以被组合为选项配置。 " +"每个配置必须定义所使用的表格,``stringprep`` 过程的其他可选项也是配置的组成部分。 ``stringprep`` 配置的一个例子是 " +"``nameprep``,它被用于国际化域名。" + +#: ../../library/stringprep.rst:29 +msgid "" +"The module :mod:`stringprep` only exposes the tables from :rfc:`3454`. As " +"these tables would be very large to represent them as dictionaries or lists," +" the module uses the Unicode character database internally. The module " +"source code itself was generated using the ``mkstringprep.py`` utility." +msgstr "" +"模块 :mod:`stringprep` 仅公开了来自 :rfc:`3454` 的表格。 " +"由于这些如果表格如果表示为字典或列表将会非常庞大,该模块在内部使用 Unicode 字符数据库。 该模块本身的源代码是使用 " +"``mkstringprep.py`` 工具生成的。" + +#: ../../library/stringprep.rst:34 +msgid "" +"As a result, these tables are exposed as functions, not as data structures. " +"There are two kinds of tables in the RFC: sets and mappings. For a set, " +":mod:`stringprep` provides the \"characteristic function\", i.e. a function " +"that returns ``True`` if the parameter is part of the set. For mappings, it " +"provides the mapping function: given the key, it returns the associated " +"value. Below is a list of all functions available in the module." +msgstr "" +"因此,这些表格以函数而非数据结构的形式公开。 在 RFC 中有两种表格:集合与映射。 对于集合,:mod:`stringprep` " +"提供了“特征函数”,即如果形参是集合的一部分则返回值为 ``True`` 的函数。 对于映射,它提供了映射函数:它会根据给定的键返回所关联的值。 " +"以下是模块中所有可用函数的列表。" + +#: ../../library/stringprep.rst:44 +msgid "" +"Determine whether *code* is in tableA.1 (Unassigned code points in Unicode " +"3.2)." +msgstr "确定 *code* 是否属于 tableA.1 (Unicode 3.2 中的未分配码位)。" + +#: ../../library/stringprep.rst:49 +msgid "Determine whether *code* is in tableB.1 (Commonly mapped to nothing)." +msgstr "确定 *code* 是否属于 tableB.1 (通常映射为空值)。" + +#: ../../library/stringprep.rst:54 +msgid "" +"Return the mapped value for *code* according to tableB.2 (Mapping for case-" +"folding used with NFKC)." +msgstr "返回 *code* 依据 tableB.2 (配合 NFKC 使用的大小写转换映射) 所映射的值。" + +#: ../../library/stringprep.rst:60 +msgid "" +"Return the mapped value for *code* according to tableB.3 (Mapping for case-" +"folding used with no normalization)." +msgstr "返回 *code* 依据 tableB.3 (不附带正规化的大小写折叠映射) 所映射的值。" + +#: ../../library/stringprep.rst:66 +msgid "Determine whether *code* is in tableC.1.1 (ASCII space characters)." +msgstr "确定 *code* 是否属于 tableC.1.1 (ASCII 空白字符)。" + +#: ../../library/stringprep.rst:71 +msgid "" +"Determine whether *code* is in tableC.1.2 (Non-ASCII space characters)." +msgstr "确定 *code* 是否属于 tableC.1.2 (非 ASCII 空白字符)。" + +#: ../../library/stringprep.rst:76 +msgid "" +"Determine whether *code* is in tableC.1 (Space characters, union of C.1.1 " +"and C.1.2)." +msgstr "确定 *code* 是否属于 tableC.1 (空白字符,C.1.1 和 C.1.2 的并集)。" + +#: ../../library/stringprep.rst:82 +msgid "Determine whether *code* is in tableC.2.1 (ASCII control characters)." +msgstr "确定 *code* 是否属于 tableC.2.1 (ASCII 控制字符)。" + +#: ../../library/stringprep.rst:87 +msgid "" +"Determine whether *code* is in tableC.2.2 (Non-ASCII control characters)." +msgstr "确定 *code* 是否属于 tableC.2.2 (非 ASCII 控制字符)。" + +#: ../../library/stringprep.rst:92 +msgid "" +"Determine whether *code* is in tableC.2 (Control characters, union of C.2.1" +" and C.2.2)." +msgstr "确定 *code* 是否属于 tableC.2 (控制字符,C.2.1 和 C.2.2 的并集)。" + +#: ../../library/stringprep.rst:98 +msgid "Determine whether *code* is in tableC.3 (Private use)." +msgstr "确定 *code* 是否属于 tableC.3 (私有使用)。" + +#: ../../library/stringprep.rst:103 +msgid "Determine whether *code* is in tableC.4 (Non-character code points)." +msgstr "确定 *code* 是否属于 tableC.4 (非字符码位)。" + +#: ../../library/stringprep.rst:108 +msgid "Determine whether *code* is in tableC.5 (Surrogate codes)." +msgstr "确定 *code* 是否属于 tableC.5 (替代码)。" + +#: ../../library/stringprep.rst:113 +msgid "" +"Determine whether *code* is in tableC.6 (Inappropriate for plain text)." +msgstr "确定 *code* 是否属于 tableC.6 (不适用于纯文本)。" + +#: ../../library/stringprep.rst:118 +msgid "" +"Determine whether *code* is in tableC.7 (Inappropriate for canonical " +"representation)." +msgstr "确定 *code* 是否属于 tableC.7 (不适用于规范表示)。" + +#: ../../library/stringprep.rst:124 +msgid "" +"Determine whether *code* is in tableC.8 (Change display properties or are " +"deprecated)." +msgstr "确定 *code* 是否属于 tableC.8 (改变显示属性或已弃用)。" + +#: ../../library/stringprep.rst:130 +msgid "Determine whether *code* is in tableC.9 (Tagging characters)." +msgstr "确定 *code* 是否属于 tableC.9 (标记字符)。" + +#: ../../library/stringprep.rst:135 +msgid "" +"Determine whether *code* is in tableD.1 (Characters with bidirectional " +"property \"R\" or \"AL\")." +msgstr "确定 *code* 是否属于 tableD.1 (带有双向属性 \"R\" 或 \"AL\" 的字符)。" + +#: ../../library/stringprep.rst:141 +msgid "" +"Determine whether *code* is in tableD.2 (Characters with bidirectional " +"property \"L\")." +msgstr "确定 *code* 是否属于 tableD.2 (带有双向属性 \"L\" 的字符)。" diff --git a/library/struct.po b/library/struct.po new file mode 100644 index 000000000..4e060e3d8 --- /dev/null +++ b/library/struct.po @@ -0,0 +1,882 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) 2001-2024, Python Software Foundation +# This file is distributed under the same license as the Python package. +# FIRST AUTHOR , YEAR. +# +# Translators: +# Shengjing Zhu , 2018 +# dannyvi , 2018 +# Alpha Du , 2019 +# ppcfish , 2019 +# 叶浚安 , 2019 +# Freesand Leo , 2020 +# Rafael Fontenelle , 2024 +# +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: Python 3.9\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2024-05-31 16:34+0000\n" +"PO-Revision-Date: 2017-02-16 23:28+0000\n" +"Last-Translator: Rafael Fontenelle , 2024\n" +"Language-Team: Chinese (China) (https://app.transifex.com/python-doc/teams/5390/zh_CN/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: zh_CN\n" +"Plural-Forms: nplurals=1; plural=0;\n" + +#: ../../library/struct.rst:2 +msgid ":mod:`struct` --- Interpret bytes as packed binary data" +msgstr ":mod:`struct` --- 将字节串解读为打包的二进制数据" + +#: ../../library/struct.rst:7 +msgid "**Source code:** :source:`Lib/struct.py`" +msgstr "**源代码:** :source:`Lib/struct.py`" + +#: ../../library/struct.rst:15 +msgid "" +"This module performs conversions between Python values and C structs " +"represented as Python :class:`bytes` objects. This can be used in handling " +"binary data stored in files or from network connections, among other " +"sources. It uses :ref:`struct-format-strings` as compact descriptions of " +"the layout of the C structs and the intended conversion to/from Python " +"values." +msgstr "" +"此模块可以执行 Python 值和以 Python :class:`bytes` 对象表示的 C 结构之间的转换。 " +"这可以被用来处理存储在文件中或是从网络连接等其他来源获取的二进制数据。 它使用 :ref:`struct-format-strings` 作为 C " +"结构布局的精简描述以及与 Python 值的双向转换。" + +#: ../../library/struct.rst:23 +msgid "" +"By default, the result of packing a given C struct includes pad bytes in " +"order to maintain proper alignment for the C types involved; similarly, " +"alignment is taken into account when unpacking. This behavior is chosen so " +"that the bytes of a packed struct correspond exactly to the layout in memory" +" of the corresponding C struct. To handle platform-independent data formats" +" or omit implicit pad bytes, use ``standard`` size and alignment instead of " +"``native`` size and alignment: see :ref:`struct-alignment` for details." +msgstr "" +"默认情况下,打包给定 C 结构的结果会包含填充字节以使得所涉及的 C 类型保持正确的对齐;类似地,对齐在解包时也会被纳入考虑。 " +"选择此种行为的目的是使得被打包结构的字节能与相应 C 结构在内存中的布局完全一致。 要处理平台独立的数据格式或省略隐式的填充字节,请使用 " +"``standard`` 大小和对齐而不是 ``native`` 大小和对齐:详情参见 :ref:`struct-alignment`。" + +#: ../../library/struct.rst:31 +msgid "" +"Several :mod:`struct` functions (and methods of :class:`Struct`) take a " +"*buffer* argument. This refers to objects that implement the " +":ref:`bufferobjects` and provide either a readable or read-writable buffer." +" The most common types used for that purpose are :class:`bytes` and " +":class:`bytearray`, but many other types that can be viewed as an array of " +"bytes implement the buffer protocol, so that they can be read/filled without" +" additional copying from a :class:`bytes` object." +msgstr "" +"某些 :mod:`struct` 的函数(以及 :class:`Struct` 的方法)接受一个 *buffer* 参数。 这将指向实现了 " +":ref:`bufferobjects` 并提供只读或是可读写缓冲的对象。 用于此目的的最常见类型为 :class:`bytes` 和 " +":class:`bytearray`,但许多其他可被视为字节数组的类型也实现了缓冲协议,因此它们无需额外从 :class:`bytes` " +"对象复制即可被读取或填充。" + +#: ../../library/struct.rst:40 +msgid "Functions and Exceptions" +msgstr "函数和异常" + +#: ../../library/struct.rst:42 +msgid "The module defines the following exception and functions:" +msgstr "此模块定义了下列异常和函数:" + +#: ../../library/struct.rst:47 +msgid "" +"Exception raised on various occasions; argument is a string describing what " +"is wrong." +msgstr "会在多种场合下被引发的异常;其参数为一个描述错误信息的字符串。" + +#: ../../library/struct.rst:53 +msgid "" +"Return a bytes object containing the values *v1*, *v2*, ... packed according" +" to the format string *format*. The arguments must match the values " +"required by the format exactly." +msgstr "" +"返回一个 bytes 对象,其中包含根据格式字符串 *format* 打包的值 *v1*, *v2*, ... " +"参数个数必须与格式字符串所要求的值完全匹配。" + +#: ../../library/struct.rst:60 +msgid "" +"Pack the values *v1*, *v2*, ... according to the format string *format* and " +"write the packed bytes into the writable buffer *buffer* starting at " +"position *offset*. Note that *offset* is a required argument." +msgstr "" +"根据格式字符串 *format* 打包 *v1*, *v2*, ... 等值并将打包的字节串写入可写缓冲区 *buffer* 从 *offset* " +"开始的位置。 请注意 *offset* 是必需的参数。" + +#: ../../library/struct.rst:67 +msgid "" +"Unpack from the buffer *buffer* (presumably packed by ``pack(format, ...)``)" +" according to the format string *format*. The result is a tuple even if it " +"contains exactly one item. The buffer's size in bytes must match the size " +"required by the format, as reflected by :func:`calcsize`." +msgstr "" +"根据格式字符串 *format* 从缓冲区 *buffer* 解包(假定是由 ``pack(format, ...)`` 打包)。 " +"结果为一个元组,即使其只包含一个条目。 缓冲区的字节大小必须匹配格式所要求的大小,如 :func:`calcsize` 所示。" + +#: ../../library/struct.rst:75 +msgid "" +"Unpack from *buffer* starting at position *offset*, according to the format " +"string *format*. The result is a tuple even if it contains exactly one " +"item. The buffer's size in bytes, starting at position *offset*, must be at" +" least the size required by the format, as reflected by :func:`calcsize`." +msgstr "" +"对 *buffer* 从位置 *offset* 开始根据格式字符串 *format* 进行解包。 结果为一个元组,即使其中只包含一个条目。 " +"缓冲区的字节大小从位置 *offset* 开始必须至少为 :func:`calcsize` 显示的格式所要求的大小。" + +#: ../../library/struct.rst:83 +msgid "" +"Iteratively unpack from the buffer *buffer* according to the format string " +"*format*. This function returns an iterator which will read equally-sized " +"chunks from the buffer until all its contents have been consumed. The " +"buffer's size in bytes must be a multiple of the size required by the " +"format, as reflected by :func:`calcsize`." +msgstr "" +"根据格式字符串 *format* 以迭代方式从缓冲区 *buffer* 解包。 此函数返回一个迭代器,它将从缓冲区读取相同大小的块直至其内容全部耗尽。 " +"缓冲区的字节大小必须整数倍于格式所要求的大小,如 :func:`calcsize` 所示。" + +#: ../../library/struct.rst:89 +msgid "Each iteration yields a tuple as specified by the format string." +msgstr "每次迭代将产生一个如格式字符串所指定的元组。" + +#: ../../library/struct.rst:96 +msgid "" +"Return the size of the struct (and hence of the bytes object produced by " +"``pack(format, ...)``) corresponding to the format string *format*." +msgstr "返回与格式字符串 *format* 相对应的结构的大小(亦即 ``pack(format, ...)`` 所产生的字节串对象的大小)。" + +#: ../../library/struct.rst:103 +msgid "Format Strings" +msgstr "格式字符串" + +#: ../../library/struct.rst:105 +msgid "" +"Format strings are the mechanism used to specify the expected layout when " +"packing and unpacking data. They are built up from :ref:`format-" +"characters`, which specify the type of data being packed/unpacked. In " +"addition, there are special characters for controlling the :ref:`struct-" +"alignment`." +msgstr "" +"格式字符串是用来在打包和解包数据时指定预期布局的机制。 它们使用指定被打包/解包数据类型的 :ref:`format-characters` 进行构建。" +" 此外,还有一些特殊字符用来控制 :ref:`struct-alignment`。" + +#: ../../library/struct.rst:114 +msgid "Byte Order, Size, and Alignment" +msgstr "字节顺序,大小和对齐方式" + +#: ../../library/struct.rst:116 +msgid "" +"By default, C types are represented in the machine's native format and byte " +"order, and properly aligned by skipping pad bytes if necessary (according to" +" the rules used by the C compiler)." +msgstr "默认情况下,C类型以机器的本机格式和字节顺序表示,并在必要时通过跳过填充字节进行正确对齐(根据C编译器使用的规则)。" + +#: ../../library/struct.rst:127 +msgid "" +"Alternatively, the first character of the format string can be used to " +"indicate the byte order, size and alignment of the packed data, according to" +" the following table:" +msgstr "或者,根据下表,格式字符串的第一个字符可用于指示打包数据的字节顺序,大小和对齐方式:" + +#: ../../library/struct.rst:132 +msgid "Character" +msgstr "字符" + +#: ../../library/struct.rst:132 +msgid "Byte order" +msgstr "字节顺序" + +#: ../../library/struct.rst:132 +msgid "Size" +msgstr "大小" + +#: ../../library/struct.rst:132 +msgid "Alignment" +msgstr "对齐方式" + +#: ../../library/struct.rst:134 +msgid "``@``" +msgstr "``@``" + +#: ../../library/struct.rst:134 ../../library/struct.rst:134 +#: ../../library/struct.rst:134 ../../library/struct.rst:136 +msgid "native" +msgstr "按原字节" + +#: ../../library/struct.rst:136 +msgid "``=``" +msgstr "``=``" + +#: ../../library/struct.rst:136 ../../library/struct.rst:138 +#: ../../library/struct.rst:140 ../../library/struct.rst:142 +msgid "standard" +msgstr "标准" + +#: ../../library/struct.rst:136 ../../library/struct.rst:138 +#: ../../library/struct.rst:140 ../../library/struct.rst:142 +msgid "none" +msgstr "无" + +#: ../../library/struct.rst:138 +msgid "``<``" +msgstr "``<``" + +#: ../../library/struct.rst:138 +msgid "little-endian" +msgstr "小端" + +#: ../../library/struct.rst:140 +msgid "``>``" +msgstr "``>``" + +#: ../../library/struct.rst:140 +msgid "big-endian" +msgstr "大端" + +#: ../../library/struct.rst:142 +msgid "``!``" +msgstr "``!``" + +#: ../../library/struct.rst:142 +msgid "network (= big-endian)" +msgstr "网络(=大端)" + +#: ../../library/struct.rst:145 +msgid "If the first character is not one of these, ``'@'`` is assumed." +msgstr "如果第一个字符不是其中之一,则假定为 ``'@'`` 。" + +#: ../../library/struct.rst:147 +msgid "" +"Native byte order is big-endian or little-endian, depending on the host " +"system. For example, Intel x86 and AMD64 (x86-64) are little-endian; " +"Motorola 68000 and PowerPC G5 are big-endian; ARM and Intel Itanium feature " +"switchable endianness (bi-endian). Use ``sys.byteorder`` to check the " +"endianness of your system." +msgstr "" +"本机字节顺序可能为大端或是小端,取决于主机系统的不同。 例如, Intel x86 和 AMD64 (x86-64) 是小端的;Motorola " +"68000 和 PowerPC G5 是大端的;ARM 和 Intel Itanium 具有可切换的字节顺序(双端)。 请使用 " +"``sys.byteorder`` 来检查你的系统字节顺序。" + +#: ../../library/struct.rst:153 +msgid "" +"Native size and alignment are determined using the C compiler's ``sizeof`` " +"expression. This is always combined with native byte order." +msgstr "本机大小和对齐方式是使用 C 编译器的 ``sizeof`` 表达式来确定的。 这总是会与本机字节顺序相绑定。" + +#: ../../library/struct.rst:156 +msgid "" +"Standard size depends only on the format character; see the table in the " +":ref:`format-characters` section." +msgstr "标准大小仅取决于格式字符;请参阅 :ref:`format-characters` 部分中的表格。" + +#: ../../library/struct.rst:159 +msgid "" +"Note the difference between ``'@'`` and ``'='``: both use native byte order," +" but the size and alignment of the latter is standardized." +msgstr "请注意 ``'@'`` 和 ``'='`` 之间的区别:两个都使用本机字节顺序,但后者的大小和对齐方式是标准化的。" + +#: ../../library/struct.rst:162 +msgid "" +"The form ``'!'`` represents the network byte order which is always big-" +"endian as defined in `IETF RFC 1700 `_." +msgstr "形式 ``'!'`` 代表网络字节顺序总是使用在 `IETF RFC 1700 `_ 中所定义的大端序。" + +#: ../../library/struct.rst:165 +msgid "" +"There is no way to indicate non-native byte order (force byte-swapping); use" +" the appropriate choice of ``'<'`` or ``'>'``." +msgstr "没有什么方式能指定非本机字节顺序(强制字节对调);请正确选择使用 ``'<'`` 或 ``'>'``。" + +#: ../../library/struct.rst:168 ../../library/struct.rst:247 +msgid "Notes:" +msgstr "注释:" + +#: ../../library/struct.rst:170 +msgid "" +"Padding is only automatically added between successive structure members. No" +" padding is added at the beginning or the end of the encoded struct." +msgstr "填充只会在连续结构成员之间自动添加。 填充不会添加到已编码结构的开头和末尾。" + +#: ../../library/struct.rst:173 +msgid "" +"No padding is added when using non-native size and alignment, e.g. with '<'," +" '>', '=', and '!'." +msgstr "当使用非本机大小和对齐方式即 '<', '>', '=', and '!' 时不会添加任何填充。" + +#: ../../library/struct.rst:176 +msgid "" +"To align the end of a structure to the alignment requirement of a particular" +" type, end the format with the code for that type with a repeat count of " +"zero. See :ref:`struct-examples`." +msgstr "" +"要将结构的末尾对齐到符合特定类型的对齐要求,请以该类型代码加重复计数的零作为格式结束。 参见 :ref:`struct-examples`。" + +#: ../../library/struct.rst:184 +msgid "Format Characters" +msgstr "格式字符" + +#: ../../library/struct.rst:186 +msgid "" +"Format characters have the following meaning; the conversion between C and " +"Python values should be obvious given their types. The 'Standard size' " +"column refers to the size of the packed value in bytes when using standard " +"size; that is, when the format string starts with one of ``'<'``, ``'>'``, " +"``'!'`` or ``'='``. When using native size, the size of the packed value is" +" platform-dependent." +msgstr "" +"格式字符具有以下含义;C 和 Python 值之间的按其指定类型的转换应当是相当明显的。 " +"‘标准大小’列是指当使用标准大小时以字节表示的已打包值大小;也就是当格式字符串以 ``'<'``, ``'>'``, ``'!'`` 或 ``'='``" +" 之一开头的情况。 当使用本机大小时,已打包值的大小取决于具体的平台。" + +#: ../../library/struct.rst:194 +msgid "Format" +msgstr "格式" + +#: ../../library/struct.rst:194 +msgid "C Type" +msgstr "C 类型" + +#: ../../library/struct.rst:194 +msgid "Python type" +msgstr "Python 类型" + +#: ../../library/struct.rst:194 +msgid "Standard size" +msgstr "标准大小" + +#: ../../library/struct.rst:194 +msgid "Notes" +msgstr "备注" + +#: ../../library/struct.rst:196 +msgid "``x``" +msgstr "``x``" + +#: ../../library/struct.rst:196 +msgid "pad byte" +msgstr "填充字节" + +#: ../../library/struct.rst:196 +msgid "no value" +msgstr "无" + +#: ../../library/struct.rst:198 +msgid "``c``" +msgstr "``c``" + +#: ../../library/struct.rst:198 +msgid ":c:type:`char`" +msgstr ":c:type:`char`" + +#: ../../library/struct.rst:198 +msgid "bytes of length 1" +msgstr "长度为 1 的字节串" + +#: ../../library/struct.rst:198 ../../library/struct.rst:200 +#: ../../library/struct.rst:202 ../../library/struct.rst:204 +msgid "1" +msgstr "1" + +#: ../../library/struct.rst:200 +msgid "``b``" +msgstr "``b``" + +#: ../../library/struct.rst:200 +msgid ":c:type:`signed char`" +msgstr ":c:type:`signed char`" + +#: ../../library/struct.rst:200 ../../library/struct.rst:202 +#: ../../library/struct.rst:206 ../../library/struct.rst:208 +#: ../../library/struct.rst:210 ../../library/struct.rst:212 +#: ../../library/struct.rst:214 ../../library/struct.rst:216 +#: ../../library/struct.rst:218 ../../library/struct.rst:220 +#: ../../library/struct.rst:223 ../../library/struct.rst:225 +#: ../../library/struct.rst:237 +msgid "integer" +msgstr "integer" + +#: ../../library/struct.rst:200 +msgid "\\(1), \\(2)" +msgstr "\\(1), \\(2)" + +#: ../../library/struct.rst:202 +msgid "``B``" +msgstr "``B``" + +#: ../../library/struct.rst:202 +msgid ":c:type:`unsigned char`" +msgstr ":c:type:`unsigned char`" + +#: ../../library/struct.rst:202 ../../library/struct.rst:206 +#: ../../library/struct.rst:208 ../../library/struct.rst:210 +#: ../../library/struct.rst:212 ../../library/struct.rst:214 +#: ../../library/struct.rst:216 ../../library/struct.rst:218 +#: ../../library/struct.rst:220 +msgid "\\(2)" +msgstr "\\(2)" + +#: ../../library/struct.rst:204 +msgid "``?``" +msgstr "``?``" + +#: ../../library/struct.rst:204 +msgid ":c:type:`_Bool`" +msgstr ":c:type:`_Bool`" + +#: ../../library/struct.rst:204 +msgid "bool" +msgstr "bool" + +#: ../../library/struct.rst:204 +msgid "\\(1)" +msgstr "\\(1)" + +#: ../../library/struct.rst:206 +msgid "``h``" +msgstr "``h``" + +#: ../../library/struct.rst:206 +msgid ":c:type:`short`" +msgstr ":c:type:`short`" + +#: ../../library/struct.rst:206 ../../library/struct.rst:208 +#: ../../library/struct.rst:227 +msgid "2" +msgstr "2" + +#: ../../library/struct.rst:208 +msgid "``H``" +msgstr "``H``" + +#: ../../library/struct.rst:208 +msgid ":c:type:`unsigned short`" +msgstr ":c:type:`unsigned short`" + +#: ../../library/struct.rst:210 +msgid "``i``" +msgstr "``i``" + +#: ../../library/struct.rst:210 +msgid ":c:type:`int`" +msgstr ":c:type:`int`" + +#: ../../library/struct.rst:210 ../../library/struct.rst:212 +#: ../../library/struct.rst:214 ../../library/struct.rst:216 +#: ../../library/struct.rst:229 +msgid "4" +msgstr "4" + +#: ../../library/struct.rst:212 +msgid "``I``" +msgstr "``I``" + +#: ../../library/struct.rst:212 +msgid ":c:type:`unsigned int`" +msgstr ":c:type:`unsigned int`" + +#: ../../library/struct.rst:214 +msgid "``l``" +msgstr "``l``" + +#: ../../library/struct.rst:214 +msgid ":c:type:`long`" +msgstr ":c:type:`long`" + +#: ../../library/struct.rst:216 +msgid "``L``" +msgstr "``L``" + +#: ../../library/struct.rst:216 +msgid ":c:type:`unsigned long`" +msgstr ":c:type:`unsigned long`" + +#: ../../library/struct.rst:218 +msgid "``q``" +msgstr "``q``" + +#: ../../library/struct.rst:218 +msgid ":c:type:`long long`" +msgstr ":c:type:`long long`" + +#: ../../library/struct.rst:218 ../../library/struct.rst:220 +#: ../../library/struct.rst:231 +msgid "8" +msgstr "8" + +#: ../../library/struct.rst:220 +msgid "``Q``" +msgstr "``Q``" + +#: ../../library/struct.rst:220 +msgid ":c:type:`unsigned long long`" +msgstr ":c:type:`unsigned long long`" + +#: ../../library/struct.rst:223 +msgid "``n``" +msgstr "``n``" + +#: ../../library/struct.rst:223 +msgid ":c:type:`ssize_t`" +msgstr ":c:type:`ssize_t`" + +#: ../../library/struct.rst:223 ../../library/struct.rst:225 +msgid "\\(3)" +msgstr "\\(3)" + +#: ../../library/struct.rst:225 +msgid "``N``" +msgstr "``N``" + +#: ../../library/struct.rst:225 +msgid ":c:type:`size_t`" +msgstr ":c:type:`size_t`" + +#: ../../library/struct.rst:227 +msgid "``e``" +msgstr "``e``" + +#: ../../library/struct.rst:227 +msgid "\\(6)" +msgstr "\\(6)" + +#: ../../library/struct.rst:227 ../../library/struct.rst:229 +#: ../../library/struct.rst:231 +msgid "float" +msgstr "float" + +#: ../../library/struct.rst:227 ../../library/struct.rst:229 +#: ../../library/struct.rst:231 +msgid "\\(4)" +msgstr "\\(4)" + +#: ../../library/struct.rst:229 +msgid "``f``" +msgstr "``f``" + +#: ../../library/struct.rst:229 +msgid ":c:type:`float`" +msgstr ":c:type:`float`" + +#: ../../library/struct.rst:231 +msgid "``d``" +msgstr "``d``" + +#: ../../library/struct.rst:231 +msgid ":c:type:`double`" +msgstr ":c:type:`double`" + +#: ../../library/struct.rst:233 +msgid "``s``" +msgstr "``s``" + +#: ../../library/struct.rst:233 ../../library/struct.rst:235 +msgid ":c:type:`char[]`" +msgstr ":c:type:`char[]`" + +#: ../../library/struct.rst:233 ../../library/struct.rst:235 +msgid "bytes" +msgstr "字节串" + +#: ../../library/struct.rst:235 +msgid "``p``" +msgstr "``p``" + +#: ../../library/struct.rst:237 +msgid "``P``" +msgstr "``P``" + +#: ../../library/struct.rst:237 +msgid ":c:type:`void \\*`" +msgstr ":c:type:`void \\*`" + +#: ../../library/struct.rst:237 +msgid "\\(5)" +msgstr "\\(5)" + +#: ../../library/struct.rst:240 +msgid "Added support for the ``'n'`` and ``'N'`` formats." +msgstr "增加了对 ``'n'`` 和 ``'N'`` 格式的支持" + +#: ../../library/struct.rst:243 +msgid "Added support for the ``'e'`` format." +msgstr "添加了对 ``'e'`` 格式的支持。" + +#: ../../library/struct.rst:252 +msgid "" +"The ``'?'`` conversion code corresponds to the :c:type:`_Bool` type defined " +"by C99. If this type is not available, it is simulated using a " +":c:type:`char`. In standard mode, it is always represented by one byte." +msgstr "" +"``'?'`` 转换码对应于 C99 定义的 :c:type:`_Bool` 类型。 如果此类型不可用,则使用 :c:type:`char` 来模拟。 " +"在标准模式下,它总是以一个字节表示。" + +#: ../../library/struct.rst:257 +msgid "" +"When attempting to pack a non-integer using any of the integer conversion " +"codes, if the non-integer has a :meth:`__index__` method then that method is" +" called to convert the argument to an integer before packing." +msgstr "" +"当尝试使用任何整数转换码打包一个非整数时,如果该非整数具有 :meth:`__index__` 方法,则会在打包之前调用该方法将参数转换为一个整数。" + +#: ../../library/struct.rst:261 +msgid "Added use of the :meth:`__index__` method for non-integers." +msgstr "增加了针对非整数使用 :meth:`__index__` 方法的特性。" + +#: ../../library/struct.rst:265 +msgid "" +"The ``'n'`` and ``'N'`` conversion codes are only available for the native " +"size (selected as the default or with the ``'@'`` byte order character). For" +" the standard size, you can use whichever of the other integer formats fits " +"your application." +msgstr "" +"``'n'`` 和 ``'N'`` 转换码仅对本机大小可用(选择为默认或使用 ``'@'`` 字节顺序字符)。 " +"对于标准大小,你可以使用适合你的应用的任何其他整数格式。" + +#: ../../library/struct.rst:271 +msgid "" +"For the ``'f'``, ``'d'`` and ``'e'`` conversion codes, the packed " +"representation uses the IEEE 754 binary32, binary64 or binary16 format (for " +"``'f'``, ``'d'`` or ``'e'`` respectively), regardless of the floating-point " +"format used by the platform." +msgstr "" +"对于 ``'f'``, ``'d'`` 和 ``'e'`` 转换码,打包表示形式将使用 IEEE 754 binary32, binary64 或 " +"binary16 格式 (分别对应于 ``'f'``, ``'d'`` 或 ``'e'``),无论平台使用何种浮点格式。" + +#: ../../library/struct.rst:277 +msgid "" +"The ``'P'`` format character is only available for the native byte ordering " +"(selected as the default or with the ``'@'`` byte order character). The byte" +" order character ``'='`` chooses to use little- or big-endian ordering based" +" on the host system. The struct module does not interpret this as native " +"ordering, so the ``'P'`` format is not available." +msgstr "" +"``'P'`` 格式字符仅对本机字节顺序可用(选择为默认或使用 ``'@'`` 字节顺序字符)。 字节顺序字符 ``'='`` " +"选择使用基于主机系统的小端或大端排序。 struct 模块不会将其解读为本机排序,因此 ``'P'`` 格式将不可用。" + +#: ../../library/struct.rst:284 +msgid "" +"The IEEE 754 binary16 \"half precision\" type was introduced in the 2008 " +"revision of the `IEEE 754 standard `_. It has a sign " +"bit, a 5-bit exponent and 11-bit precision (with 10 bits explicitly stored)," +" and can represent numbers between approximately ``6.1e-05`` and ``6.5e+04``" +" at full precision. This type is not widely supported by C compilers: on a " +"typical machine, an unsigned short can be used for storage, but not for math" +" operations. See the Wikipedia page on the `half-precision floating-point " +"format `_ for more information." +msgstr "" +"IEEE 754 binary16 \"半精度\" 类型是在 `IEEE 754 标准 `_ 的 2008 " +"修订版中引入的。 它包含一个符号位,5 个指数位和 11 个精度位(明确存储 10 位),可以完全精确地表示大致范围在 ``6.1e-05`` 和 " +"``6.5e+04`` 之间的数字。 此类型并不被 C 编译器广泛支持:在一台典型的机器上,可以使用 unsigned short " +"进行存储,但不会被用于数学运算。 请参阅维基百科页面 `half-precision floating-point format `_ 了解详情。" + +#: ../../library/struct.rst:294 +msgid "" +"A format character may be preceded by an integral repeat count. For " +"example, the format string ``'4h'`` means exactly the same as ``'hhhh'``." +msgstr "格式字符之前可以带有整数重复计数。 例如,格式字符串 ``'4h'`` 的含义与 ``'hhhh'`` 完全相同。" + +#: ../../library/struct.rst:297 +msgid "" +"Whitespace characters between formats are ignored; a count and its format " +"must not contain whitespace though." +msgstr "格式之间的空白字符会被忽略;但是计数及其格式字符中不可有空白字符。" + +#: ../../library/struct.rst:300 +msgid "" +"For the ``'s'`` format character, the count is interpreted as the length of " +"the bytes, not a repeat count like for the other format characters; for " +"example, ``'10s'`` means a single 10-byte string, while ``'10c'`` means 10 " +"characters. If a count is not given, it defaults to 1. For packing, the " +"string is truncated or padded with null bytes as appropriate to make it fit." +" For unpacking, the resulting bytes object always has exactly the specified " +"number of bytes. As a special case, ``'0s'`` means a single, empty string " +"(while ``'0c'`` means 0 characters)." +msgstr "" +"对于 ``'s'`` 格式字符,计数会被解析为字节的长度,而不是像其他格式字符那样的重复计数;例如,``'10s'`` 表示一个 10 字节的字节串,而" +" ``'10c'`` 表示 10 个字符。 如果未给出计数,则默认值为 1。 对于打包操作,字节串会被适当地截断或填充空字节以符合要求。 " +"对于解包操作,结果字节对象总是恰好具有指定数量的字节。 作为特殊情况,``'0s'`` 表示一个空字符串(而 ``'0c'`` 表示 0 个字符)。" + +#: ../../library/struct.rst:309 +msgid "" +"When packing a value ``x`` using one of the integer formats (``'b'``, " +"``'B'``, ``'h'``, ``'H'``, ``'i'``, ``'I'``, ``'l'``, ``'L'``, ``'q'``, " +"``'Q'``), if ``x`` is outside the valid range for that format then " +":exc:`struct.error` is raised." +msgstr "" +"当使用某一种整数格式 (``'b'``, ``'B'``, ``'h'``, ``'H'``, ``'i'``, ``'I'``, ``'l'``, " +"``'L'``, ``'q'``, ``'Q'``) 打包值 ``x`` 时,如果 ``x`` 在该格式的有效范围之外则将引发 " +":exc:`struct.error`。" + +#: ../../library/struct.rst:314 +msgid "" +"Previously, some of the integer formats wrapped out-of-range values and " +"raised :exc:`DeprecationWarning` instead of :exc:`struct.error`." +msgstr "" +"在之前版本中,某些整数格式包装了超范围的值并会引发 :exc:`DeprecationWarning` 而不是 :exc:`struct.error`。" + +#: ../../library/struct.rst:318 +msgid "" +"The ``'p'`` format character encodes a \"Pascal string\", meaning a short " +"variable-length string stored in a *fixed number of bytes*, given by the " +"count. The first byte stored is the length of the string, or 255, whichever " +"is smaller. The bytes of the string follow. If the string passed in to " +":func:`pack` is too long (longer than the count minus 1), only the leading " +"``count-1`` bytes of the string are stored. If the string is shorter than " +"``count-1``, it is padded with null bytes so that exactly count bytes in all" +" are used. Note that for :func:`unpack`, the ``'p'`` format character " +"consumes ``count`` bytes, but that the string returned can never contain " +"more than 255 bytes." +msgstr "" +"``'p'`` 格式字符用于编码“Pascal 字符串”,即存储在由计数指定的 *固定长度字节* 中的可变长度短字符串。 " +"所存储的第一个字节为字符串长度或 255 中的较小值。 之后是字符串对应的字节。 如果传入 :func:`pack` 的字符串过长(超过计数值减 " +"1),则只有字符串前 ``count-1`` 个字节会被存储。 如果字符串短于 ``count-1``,则会填充空字节以使得恰好使用了 count " +"个字节。 请注意对于 :func:`unpack`,``'p'`` 格式字符会消耗 ``count`` 个字节,但返回的字符串永远不会包含超过 255 " +"个字节。" + +#: ../../library/struct.rst:331 +msgid "" +"For the ``'?'`` format character, the return value is either :const:`True` " +"or :const:`False`. When packing, the truth value of the argument object is " +"used. Either 0 or 1 in the native or standard bool representation will be " +"packed, and any non-zero value will be ``True`` when unpacking." +msgstr "" +"对于 ``'?'`` 格式字符,返回值为 :const:`True` 或 :const:`False`。 在打包时将会使用参数对象的逻辑值。 " +"以本机或标准 bool 类型表示的 0 或 1 将被打包,任何非零值在解包时将为 ``True``。" + +#: ../../library/struct.rst:341 +msgid "Examples" +msgstr "例子" + +#: ../../library/struct.rst:344 +msgid "" +"All examples assume a native byte order, size, and alignment with a big-" +"endian machine." +msgstr "所有示例都假定使用一台大端机器的本机字节顺序、大小和对齐方式。" + +#: ../../library/struct.rst:347 +msgid "A basic example of packing/unpacking three integers::" +msgstr "打包/解包三个整数的基础示例::" + +#: ../../library/struct.rst:357 +msgid "" +"Unpacked fields can be named by assigning them to variables or by wrapping " +"the result in a named tuple::" +msgstr "解包的字段可通过将它们赋值给变量或将结果包装为一个具名元组来命名::" + +#: ../../library/struct.rst:368 +msgid "" +"The ordering of format characters may have an impact on size since the " +"padding needed to satisfy alignment requirements is different::" +msgstr "格式字符的顺序可能对大小产生影响,因为满足对齐要求所需的填充是不同的::" + +#: ../../library/struct.rst:380 +msgid "" +"The following format ``'llh0l'`` specifies two pad bytes at the end, " +"assuming longs are aligned on 4-byte boundaries::" +msgstr "以下格式 ``'llh0l'`` 指定在末尾有两个填充字节,假定 long 类型按 4 个字节的边界对齐::" + +#: ../../library/struct.rst:386 +msgid "" +"This only works when native size and alignment are in effect; standard size " +"and alignment does not enforce any alignment." +msgstr "这仅当本机大小和对齐方式生效时才会起作用;标准大小和对齐方式并不会强制进行任何对齐。" + +#: ../../library/struct.rst:393 +msgid "Module :mod:`array`" +msgstr "模块 :mod:`array`" + +#: ../../library/struct.rst:393 +msgid "Packed binary storage of homogeneous data." +msgstr "被打包为二进制存储的同质数据。" + +#: ../../library/struct.rst:395 +msgid "Module :mod:`xdrlib`" +msgstr ":mod:`xdrlib` 模块" + +#: ../../library/struct.rst:396 +msgid "Packing and unpacking of XDR data." +msgstr "打包和解包 XDR 数据。" + +#: ../../library/struct.rst:402 +msgid "Classes" +msgstr "类" + +#: ../../library/struct.rst:404 +msgid "The :mod:`struct` module also defines the following type:" +msgstr ":mod:`struct` 模块还定义了以下类型:" + +#: ../../library/struct.rst:409 +msgid "" +"Return a new Struct object which writes and reads binary data according to " +"the format string *format*. Creating a Struct object once and calling its " +"methods is more efficient than calling the :mod:`struct` functions with the " +"same format since the format string only needs to be compiled once." +msgstr "" +"返回一个新的 Struct 对象,它会根据格式字符串 *format* 来写入和读取二进制数据。 一次性地创建 Struct " +"对象并调用其方法相比使用同样的格式调用 :mod:`struct` 函数更为高效,因为这样格式字符串只需被编译一次。" + +#: ../../library/struct.rst:416 +msgid "" +"The compiled versions of the most recent format strings passed to " +":class:`Struct` and the module-level functions are cached, so programs that " +"use only a few format strings needn't worry about reusing a single " +":class:`Struct` instance." +msgstr "" +"传递给 :class:`Struct` 和模块层级函数的已编译版最新格式字符串会被缓存,因此只使用少量格式字符串的程序无需担心重用单独的 " +":class:`Struct` 实例。" + +#: ../../library/struct.rst:421 +msgid "Compiled Struct objects support the following methods and attributes:" +msgstr "已编译的 Struct 对象支持以下方法和属性:" + +#: ../../library/struct.rst:425 +msgid "" +"Identical to the :func:`pack` function, using the compiled format. " +"(``len(result)`` will equal :attr:`size`.)" +msgstr "等价于 :func:`pack` 函数,使用了已编译的格式。 (``len(result)`` 将等于 :attr:`size`。)" + +#: ../../library/struct.rst:431 +msgid "" +"Identical to the :func:`pack_into` function, using the compiled format." +msgstr "等价于 :func:`pack_into` 函数,使用了已编译的格式。" + +#: ../../library/struct.rst:436 +msgid "" +"Identical to the :func:`unpack` function, using the compiled format. The " +"buffer's size in bytes must equal :attr:`size`." +msgstr "等价于 :func:`unpack` 函数,使用了已编译的格式。 缓冲区的字节大小必须等于 :attr:`size`。" + +#: ../../library/struct.rst:442 +msgid "" +"Identical to the :func:`unpack_from` function, using the compiled format. " +"The buffer's size in bytes, starting at position *offset*, must be at least " +":attr:`size`." +msgstr "" +"等价于 :func:`unpack_from` 函数,使用了已编译的格式。 缓冲区的字节大小从位置 *offset* 开始必须至少为 " +":attr:`size`。" + +#: ../../library/struct.rst:449 +msgid "" +"Identical to the :func:`iter_unpack` function, using the compiled format. " +"The buffer's size in bytes must be a multiple of :attr:`size`." +msgstr "等价于 :func:`iter_unpack` 函数,使用了已编译的格式。 缓冲区的大小必须为 :attr:`size` 的整数倍。" + +#: ../../library/struct.rst:456 +msgid "The format string used to construct this Struct object." +msgstr "用于构造此 Struct 对象的格式字符串。" + +#: ../../library/struct.rst:458 +msgid "The format string type is now :class:`str` instead of :class:`bytes`." +msgstr "格式字符串类型现在是 :class:`str` 而不再是 :class:`bytes`。" + +#: ../../library/struct.rst:463 +msgid "" +"The calculated size of the struct (and hence of the bytes object produced by" +" the :meth:`pack` method) corresponding to :attr:`format`." +msgstr "计算出对应于 :attr:`format` 的结构大小(亦即 :meth:`pack` 方法所产生的字节串对象的大小)。" diff --git a/library/subprocess.po b/library/subprocess.po new file mode 100644 index 000000000..6161fd55d --- /dev/null +++ b/library/subprocess.po @@ -0,0 +1,1995 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) 2001-2025, Python Software Foundation +# This file is distributed under the same license as the Python package. +# FIRST AUTHOR , YEAR. +# +# Translators: +# ww song , 2018 +# Shengjing Zhu , 2019 +# Zombie110year , 2019 +# Arisaka97 , 2020 +# Tianyu Chen (billchenchina) , 2021 +# Nyuan Zhang, 2023 +# Freesand Leo , 2024 +# Rafael Fontenelle , 2025 +# +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: Python 3.9\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2025-02-07 16:40+0000\n" +"PO-Revision-Date: 2017-02-16 23:28+0000\n" +"Last-Translator: Rafael Fontenelle , 2025\n" +"Language-Team: Chinese (China) (https://app.transifex.com/python-doc/teams/5390/zh_CN/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: zh_CN\n" +"Plural-Forms: nplurals=1; plural=0;\n" + +#: ../../library/subprocess.rst:2 +msgid ":mod:`subprocess` --- Subprocess management" +msgstr ":mod:`subprocess` --- 子进程管理" + +#: ../../library/subprocess.rst:10 +msgid "**Source code:** :source:`Lib/subprocess.py`" +msgstr "**源代码:** :source:`Lib/subprocess.py`" + +#: ../../library/subprocess.rst:14 +msgid "" +"The :mod:`subprocess` module allows you to spawn new processes, connect to " +"their input/output/error pipes, and obtain their return codes. This module " +"intends to replace several older modules and functions::" +msgstr "" +":mod:`subprocess` 模块允许你生成新的进程,连接它们的输入、输出、错误管道,并且获取它们的返回码。此模块打算代替一些老旧的模块与功能:" + +#: ../../library/subprocess.rst:21 +msgid "" +"Information about how the :mod:`subprocess` module can be used to replace " +"these modules and functions can be found in the following sections." +msgstr "在下面的段落中,你可以找到关于 :mod:`subprocess` 模块如何代替这些模块和功能的相关信息。" + +#: ../../library/subprocess.rst:26 +msgid ":pep:`324` -- PEP proposing the subprocess module" +msgstr ":pep:`324` -- 提出 subprocess 模块的 PEP" + +#: ../../library/subprocess.rst:30 +msgid "Using the :mod:`subprocess` Module" +msgstr "使用 :mod:`subprocess` 模块" + +#: ../../library/subprocess.rst:32 +msgid "" +"The recommended approach to invoking subprocesses is to use the :func:`run` " +"function for all use cases it can handle. For more advanced use cases, the " +"underlying :class:`Popen` interface can be used directly." +msgstr "" +"推荐的调用子进程的方式是在任何它支持的用例中使用 :func:`run` 函数。对于更进阶的用例,也可以使用底层的 :class:`Popen` 接口。" + +#: ../../library/subprocess.rst:36 +msgid "" +"The :func:`run` function was added in Python 3.5; if you need to retain " +"compatibility with older versions, see the :ref:`call-function-trio` " +"section." +msgstr "" +":func:`run` 函数是在 Python 3.5 被添加的;如果你需要与旧版本保持兼容,查看 :ref:`call-function-trio` " +"段落。" + +#: ../../library/subprocess.rst:45 +msgid "" +"Run the command described by *args*. Wait for command to complete, then " +"return a :class:`CompletedProcess` instance." +msgstr "运行被 *arg* 描述的指令. 等待指令完成, 然后返回一个 :class:`CompletedProcess` 实例." + +#: ../../library/subprocess.rst:48 +msgid "" +"The arguments shown above are merely the most common ones, described below " +"in :ref:`frequently-used-arguments` (hence the use of keyword-only notation " +"in the abbreviated signature). The full function signature is largely the " +"same as that of the :class:`Popen` constructor - most of the arguments to " +"this function are passed through to that interface. (*timeout*, *input*, " +"*check*, and *capture_output* are not.)" +msgstr "" +"以上显示的参数仅仅是最简单的一些,下面 :ref:`frequently-used-arguments` " +"描述(因此在缩写签名中使用仅关键字标示)。完整的函数头和 :class:`Popen` " +"的构造函数一样,此函数接受的大多数参数都被传递给该接口。(*timeout*, *input*, *check* 和 *capture_output* " +"除外)。" + +#: ../../library/subprocess.rst:55 +msgid "" +"If *capture_output* is true, stdout and stderr will be captured. When used, " +"the internal :class:`Popen` object is automatically created with " +"``stdout=PIPE`` and ``stderr=PIPE``. The *stdout* and *stderr* arguments may" +" not be supplied at the same time as *capture_output*. If you wish to " +"capture and combine both streams into one, use ``stdout=PIPE`` and " +"``stderr=STDOUT`` instead of *capture_output*." +msgstr "" +"如果 *capture_output* 设为 true,stdout 和 stderr 将会被捕获。在使用时,内置的 :class:`Popen` " +"对象将自动用 ``stdout=PIPE`` 和 ``stderr=PIPE`` 创建。*stdout* 和 *stderr* 参数不应当与 " +"*capture_output* 同时提供。如果你希望捕获并将两个流合并在一起,使用 ``stdout=PIPE`` 和 " +"``stderr=STDOUT`` 来代替 *capture_output*。" + +#: ../../library/subprocess.rst:62 +msgid "" +"The *timeout* argument is passed to :meth:`Popen.communicate`. If the " +"timeout expires, the child process will be killed and waited for. The " +":exc:`TimeoutExpired` exception will be re-raised after the child process " +"has terminated." +msgstr "" +"*timeout* 参数将被传递给 :meth:`Popen.communicate`。如果发生超时,子进程将被杀死并等待。 " +":exc:`TimeoutExpired` 异常将在子进程中断后被抛出。" + +#: ../../library/subprocess.rst:67 +msgid "" +"The *input* argument is passed to :meth:`Popen.communicate` and thus to the " +"subprocess's stdin. If used it must be a byte sequence, or a string if " +"*encoding* or *errors* is specified or *text* is true. When used, the " +"internal :class:`Popen` object is automatically created with ``stdin=PIPE``," +" and the *stdin* argument may not be used as well." +msgstr "" +"*input* 参数将被传递给 :meth:`Popen.communicate` 以及子进程的 stdin。 如果使用此参数,它必须是一个字节序列。 " +"如果指定了 *encoding* 或 *errors* 或者将 *text* 设置为 ``True``,那么也可以是一个字符串。 " +"当使用此参数时,在创建内部 :class:`Popen` 对象时将自动带上 ``stdin=PIPE``,并且不能再手动指定 *stdin* 参数。" + +#: ../../library/subprocess.rst:73 +msgid "" +"If *check* is true, and the process exits with a non-zero exit code, a " +":exc:`CalledProcessError` exception will be raised. Attributes of that " +"exception hold the arguments, the exit code, and stdout and stderr if they " +"were captured." +msgstr "" +"如果 *check* 设为 True, 并且进程以非零状态码退出, 一个 :exc:`CalledProcessError` 异常将被抛出. " +"这个异常的属性将设置为参数, 退出码, 以及标准输出和标准错误, 如果被捕获到." + +#: ../../library/subprocess.rst:78 +msgid "" +"If *encoding* or *errors* are specified, or *text* is true, file objects for" +" stdin, stdout and stderr are opened in text mode using the specified " +"*encoding* and *errors* or the :class:`io.TextIOWrapper` default. The " +"*universal_newlines* argument is equivalent to *text* and is provided for " +"backwards compatibility. By default, file objects are opened in binary mode." +msgstr "" +"如果指定了 *encoding* 或 *error*,或者 *text* 被设为真值,标准输入、标准输出和标准错误的文件对象将使用指定的 " +"*encoding* 和 *errors* 或者 :class:`io.TextIOWrapper` 默认值以文本模式打开。 " +"*universal_newlines* 参数等同于 *text* 并且提供了向后兼容性。 默认情况下, 文件对象是以二进制模式打开的。" + +#: ../../library/subprocess.rst:84 +msgid "" +"If *env* is not ``None``, it must be a mapping that defines the environment " +"variables for the new process; these are used instead of the default " +"behavior of inheriting the current process' environment. It is passed " +"directly to :class:`Popen`." +msgstr "" +"如果 *env* 不是 ``None``, 它必须是一个字典, 为新的进程设置环境变量; 它用于替换继承的当前进程的环境的默认行为. 它将直接被传递给 " +":class:`Popen`." + +#: ../../library/subprocess.rst:89 +msgid "Examples::" +msgstr "示例::" + +#: ../../library/subprocess.rst:107 +msgid "Added *encoding* and *errors* parameters" +msgstr "添加了 *encoding* 和 *errors* 形参." + +#: ../../library/subprocess.rst:111 +msgid "" +"Added the *text* parameter, as a more understandable alias of " +"*universal_newlines*. Added the *capture_output* parameter." +msgstr "" +"添加了 *text* 形参,作为 *universal_newlines* 的一个更好理解的别名。 添加了 *capture_output* 形参。" + +#: ../../library/subprocess.rst:116 ../../library/subprocess.rst:481 +#: ../../library/subprocess.rst:1155 ../../library/subprocess.rst:1195 +#: ../../library/subprocess.rst:1258 +msgid "" +"Changed Windows shell search order for ``shell=True``. The current directory" +" and ``%PATH%`` are replaced with ``%COMSPEC%`` and " +"``%SystemRoot%\\System32\\cmd.exe``. As a result, dropping a malicious " +"program named ``cmd.exe`` into a current directory no longer works." +msgstr "" +"针对 ``shell=True`` 改变的 Windows shell 搜索顺序。 当前目录和 ``%PATH%`` 会被替换为 " +"``%COMSPEC%`` 和 ``%SystemRoot%\\System32\\cmd.exe``。 因此,在当前目录中投放一个命名为 " +"``cmd.exe`` 的恶意程序不会再起作用。" + +#: ../../library/subprocess.rst:124 +msgid "" +"The return value from :func:`run`, representing a process that has finished." +msgstr ":func:`run` 的返回值, 代表一个进程已经结束." + +#: ../../library/subprocess.rst:128 +msgid "" +"The arguments used to launch the process. This may be a list or a string." +msgstr "被用作启动进程的参数. 可能是一个列表或字符串." + +#: ../../library/subprocess.rst:132 +msgid "" +"Exit status of the child process. Typically, an exit status of 0 indicates " +"that it ran successfully." +msgstr "子进程的退出状态码. 通常来说, 一个为 0 的退出码表示进程运行正常." + +#: ../../library/subprocess.rst:135 ../../library/subprocess.rst:902 +msgid "" +"A negative value ``-N`` indicates that the child was terminated by signal " +"``N`` (POSIX only)." +msgstr "一个负值 ``-N`` 表示子进程被信号 ``N`` 中断 (仅 POSIX)." + +#: ../../library/subprocess.rst:140 +msgid "" +"Captured stdout from the child process. A bytes sequence, or a string if " +":func:`run` was called with an encoding, errors, or text=True. ``None`` if " +"stdout was not captured." +msgstr "" +"从子进程捕获到的标准输出. 一个字节序列, 或一个字符串, 如果 :func:`run` 是设置了 *encoding*, *errors* 或者 " +"``text=True`` 来运行的. 如果未有捕获, 则为 ``None``." + +#: ../../library/subprocess.rst:144 +msgid "" +"If you ran the process with ``stderr=subprocess.STDOUT``, stdout and stderr " +"will be combined in this attribute, and :attr:`stderr` will be ``None``." +msgstr "" +"如果你通过 ``stderr=subprocess.STDOUT`` 运行进程,标准输入和标准错误将被组合在这个属性中,并且 " +":attr:`stderr` 将为 ``None``。" + +#: ../../library/subprocess.rst:150 +msgid "" +"Captured stderr from the child process. A bytes sequence, or a string if " +":func:`run` was called with an encoding, errors, or text=True. ``None`` if " +"stderr was not captured." +msgstr "" +"捕获到的子进程的标准错误. 一个字节序列, 或者一个字符串, 如果 :func:`run` 是设置了参数 *encoding*, *errors* 或者" +" ``text=True`` 运行的. 如果未有捕获, 则为 ``None``." + +#: ../../library/subprocess.rst:156 +msgid "If :attr:`returncode` is non-zero, raise a :exc:`CalledProcessError`." +msgstr "如果 :attr:`returncode` 非零, 抛出 :exc:`CalledProcessError`." + +#: ../../library/subprocess.rst:162 +msgid "" +"Special value that can be used as the *stdin*, *stdout* or *stderr* argument" +" to :class:`Popen` and indicates that the special file :data:`os.devnull` " +"will be used." +msgstr "" +"可被 :class:`Popen` 的 *stdin*, *stdout* 或者 *stderr* 参数使用的特殊值, 表示使用特殊文件 " +":data:`os.devnull`." + +#: ../../library/subprocess.rst:171 +msgid "" +"Special value that can be used as the *stdin*, *stdout* or *stderr* argument" +" to :class:`Popen` and indicates that a pipe to the standard stream should " +"be opened. Most useful with :meth:`Popen.communicate`." +msgstr "" +"可被 :class:`Popen` 的 *stdin*, *stdout* 或者 *stderr* 参数使用的特殊值, 表示打开标准流的管道. 常用于 " +":meth:`Popen.communicate`." + +#: ../../library/subprocess.rst:178 +msgid "" +"Special value that can be used as the *stderr* argument to :class:`Popen` " +"and indicates that standard error should go into the same handle as standard" +" output." +msgstr "可被 :class:`Popen` 的 *stderr* 参数使用的特殊值, 表示标准错误与标准输出使用同一句柄。" + +#: ../../library/subprocess.rst:185 +msgid "Base class for all other exceptions from this module." +msgstr "此模块的其他异常的基类。" + +#: ../../library/subprocess.rst:192 +msgid "" +"Subclass of :exc:`SubprocessError`, raised when a timeout expires while " +"waiting for a child process." +msgstr ":exc:`SubprocessError` 的子类,等待子进程的过程中发生超时时被抛出。" + +#: ../../library/subprocess.rst:197 ../../library/subprocess.rst:241 +msgid "Command that was used to spawn the child process." +msgstr "用于创建子进程的指令。" + +#: ../../library/subprocess.rst:201 +msgid "Timeout in seconds." +msgstr "超时秒数。" + +#: ../../library/subprocess.rst:205 +msgid "" +"Output of the child process if it was captured by :func:`run` or " +":func:`check_output`. Otherwise, ``None``. This is always :class:`bytes` " +"when any output was captured regardless of the ``text=True`` setting. It " +"may remain ``None`` instead of ``b''`` when no output was observed." +msgstr "" +"当被 :func:`run` 或 :func:`check_output` 捕获时的子进程的输出。 在其它情况下将为 " +"``None``。当有任何输出被捕获时这将始终为 :class:`bytes` 而不考虑是否设置了 ``text=True``。 " +"当未检测到输出时它可能会保持为 ``None`` 而不是 ``b''``。" + +#: ../../library/subprocess.rst:213 ../../library/subprocess.rst:250 +msgid "Alias for output, for symmetry with :attr:`stderr`." +msgstr "对 output 的别名,对应的有 :attr:`stderr`。" + +#: ../../library/subprocess.rst:217 +msgid "" +"Stderr output of the child process if it was captured by :func:`run`. " +"Otherwise, ``None``. This is always :class:`bytes` when stderr output was " +"captured regardless of the ``text=True`` setting. It may remain ``None`` " +"instead of ``b''`` when no stderr output was observed." +msgstr "" +"当被 :func:`run` 捕获时的标准错误输出。 在其它情况下将为 ``None``。 当有标准错误输出被捕获时这将始终为 " +":class:`bytes` 而不考虑是否设置了 ``text=True``。 当未检测到标准错误输出时它可能会保持为 ``None`` 而不是 " +"``b''``。" + +#: ../../library/subprocess.rst:224 ../../library/subprocess.rst:257 +msgid "*stdout* and *stderr* attributes added" +msgstr "添加了 *stdout* 和 *stderr* 属性。" + +#: ../../library/subprocess.rst:229 +msgid "" +"Subclass of :exc:`SubprocessError`, raised when a process run by " +":func:`check_call`, :func:`check_output`, or :func:`run` (with " +"``check=True``) returns a non-zero exit status." +msgstr "" +":exc:`SubprocessError` 的子类,当一个由 :func:`check_call`, :func:`check_output` 或 " +":func:`run` (附带 ``check=True``) 运行的进程返回了非零退出状态码时将被引发。" + +#: ../../library/subprocess.rst:236 +msgid "" +"Exit status of the child process. If the process exited due to a signal, " +"this will be the negative signal number." +msgstr "子进程的退出状态。如果程序由一个信号终止,这将会被设为一个负的信号码。" + +#: ../../library/subprocess.rst:245 +msgid "" +"Output of the child process if it was captured by :func:`run` or " +":func:`check_output`. Otherwise, ``None``." +msgstr "子进程的输出, 如果被 :func:`run` 或 :func:`check_output` 捕获。否则为 ``None``。" + +#: ../../library/subprocess.rst:254 +msgid "" +"Stderr output of the child process if it was captured by :func:`run`. " +"Otherwise, ``None``." +msgstr "子进程的标准错误输出,如果被 :func:`run` 捕获。 否则为 ``None``。" + +#: ../../library/subprocess.rst:264 +msgid "Frequently Used Arguments" +msgstr "常用参数" + +#: ../../library/subprocess.rst:266 +msgid "" +"To support a wide variety of use cases, the :class:`Popen` constructor (and " +"the convenience functions) accept a large number of optional arguments. For " +"most typical use cases, many of these arguments can be safely left at their " +"default values. The arguments that are most commonly needed are:" +msgstr "" +"为了支持丰富的使用案例, :class:`Popen` " +"的构造函数(以及方便的函数)接受大量可选的参数。对于大多数典型的用例,许多参数可以被安全地留以它们的默认值。通常需要的参数有:" + +#: ../../library/subprocess.rst:271 +msgid "" +"*args* is required for all calls and should be a string, or a sequence of " +"program arguments. Providing a sequence of arguments is generally preferred," +" as it allows the module to take care of any required escaping and quoting " +"of arguments (e.g. to permit spaces in file names). If passing a single " +"string, either *shell* must be :const:`True` (see below) or else the string " +"must simply name the program to be executed without specifying any " +"arguments." +msgstr "" +"*args* " +"被所有调用需要,应当为一个字符串,或者一个程序参数序列。提供一个参数序列通常更好,它可以更小心地使用参数中的转义字符以及引用(例如允许文件名中的空格)。如果传递一个简单的字符串,则" +" *shell* 参数必须为 :const:`True` (见下文)或者该字符串中将被运行的程序名必须用简单的命名而不指定任何参数。" + +#: ../../library/subprocess.rst:279 +msgid "" +"*stdin*, *stdout* and *stderr* specify the executed program's standard " +"input, standard output and standard error file handles, respectively. Valid" +" values are :data:`PIPE`, :data:`DEVNULL`, an existing file descriptor (a " +"positive integer), an existing file object with a valid file descriptor, and" +" ``None``. :data:`PIPE` indicates that a new pipe to the child should be " +"created. :data:`DEVNULL` indicates that the special file :data:`os.devnull` " +"will be used. With the default settings of ``None``, no redirection will " +"occur; the child's file handles will be inherited from the parent. " +"Additionally, *stderr* can be :data:`STDOUT`, which indicates that the " +"stderr data from the child process should be captured into the same file " +"handle as for *stdout*." +msgstr "" +"*stdin*, *stdout* 和 *stderr* 分别指定了被执行程序的标准输入、标准输出和标准错误文件句柄。 合法的值包括 " +":data:`PIPE`、:data:`DEVNULL`、现存的文件描述符(一个正整数)、现存的带有合法文件描述符的文件对象以及 ``None``。 " +":data:`PIPE` 表示应该新建一个连接子进程的管道。 :data:`DEVNULL` 表示将使用特殊的文件 " +":data:`os.devnull`。 当使用默认设置 ``None`` 时,将不会进行任何重定向;子进程的文件流将继承自父进程。 " +"另外,*stderr* 可以为 :data:`STDOUT`,这表示来自子进程的 stderr 数据应当被捕获到与 *stdout* 相同的文件句柄中。" + +#: ../../library/subprocess.rst:294 +msgid "" +"If *encoding* or *errors* are specified, or *text* (also known as " +"*universal_newlines*) is true, the file objects *stdin*, *stdout* and " +"*stderr* will be opened in text mode using the *encoding* and *errors* " +"specified in the call or the defaults for :class:`io.TextIOWrapper`." +msgstr "" +"如果指定了 *encoding* 或 *errors*,或者 *text* (也称 *universal_newlines*) 为真,则文件对象 " +"*stdin*、 *stdout* 与 *stderr* 将会使用在此次调用中指定的 *encoding* 和 *errors* 或者 " +":class:`io.TextIOWrapper` 的默认值以文本模式打开。" + +#: ../../library/subprocess.rst:300 +msgid "" +"For *stdin*, line ending characters ``'\\n'`` in the input will be converted" +" to the default line separator :data:`os.linesep`. For *stdout* and " +"*stderr*, all line endings in the output will be converted to ``'\\n'``. " +"For more information see the documentation of the :class:`io.TextIOWrapper` " +"class when the *newline* argument to its constructor is ``None``." +msgstr "" +"当构造函数的 *newline* 参数为 ``None`` 时。对于 *stdin*, 输入的换行符 ``'\\n'`` 将被转换为默认的换行符 " +":data:`os.linesep`。对于 *stdout* 和 *stderr*, 所有输出的换行符都被转换为 ``'\\n'``。更多信息,查看 " +":class:`io.TextIOWrapper` 类的文档。" + +#: ../../library/subprocess.rst:306 +msgid "" +"If text mode is not used, *stdin*, *stdout* and *stderr* will be opened as " +"binary streams. No encoding or line ending conversion is performed." +msgstr "如果文本模式未被使用, *stdin*, *stdout* 和 *stderr* 将会以二进制流模式打开。没有编码与换行符转换发生。" + +#: ../../library/subprocess.rst:309 +msgid "Added *encoding* and *errors* parameters." +msgstr "添加了 *encoding* 和 *errors* 形参。" + +#: ../../library/subprocess.rst:312 +msgid "Added the *text* parameter as an alias for *universal_newlines*." +msgstr "添加了 *text* 形参作为 *universal_newlines* 的别名。" + +#: ../../library/subprocess.rst:317 +msgid "" +"The newlines attribute of the file objects :attr:`Popen.stdin`, " +":attr:`Popen.stdout` and :attr:`Popen.stderr` are not updated by the " +":meth:`Popen.communicate` method." +msgstr "" +"文件对象 :attr:`Popen.stdin` 、 :attr:`Popen.stdout` 和 :attr:`Popen.stderr` " +"的换行符属性不会被 :meth:`Popen.communicate` 方法更新。" + +#: ../../library/subprocess.rst:321 +msgid "" +"If *shell* is ``True``, the specified command will be executed through the " +"shell. This can be useful if you are using Python primarily for the " +"enhanced control flow it offers over most system shells and still want " +"convenient access to other shell features such as shell pipes, filename " +"wildcards, environment variable expansion, and expansion of ``~`` to a " +"user's home directory. However, note that Python itself offers " +"implementations of many shell-like features (in particular, :mod:`glob`, " +":mod:`fnmatch`, :func:`os.walk`, :func:`os.path.expandvars`, " +":func:`os.path.expanduser`, and :mod:`shutil`)." +msgstr "" +"如果 *shell* 设为 ``True``,,则使用 shell 执行指定的指令。如果您主要使用 Python 增强的控制流(它比大多数系统 " +"shell 提供的强大),并且仍然希望方便地使用其他 shell 功能,如 shell 管道、文件通配符、环境变量展开以及 ``~`` " +"展开到用户家目录,这将非常有用。但是,注意 Python 自己也实现了许多类似 shell 的特性(例如 :mod:`glob`, " +":mod:`fnmatch`, :func:`os.walk`, :func:`os.path.expandvars`, " +":func:`os.path.expanduser` 和 :mod:`shutil`)。" + +#: ../../library/subprocess.rst:331 +msgid "" +"When *universal_newlines* is ``True``, the class uses the encoding " +":func:`locale.getpreferredencoding(False) ` " +"instead of ``locale.getpreferredencoding()``. See the " +":class:`io.TextIOWrapper` class for more information on this change." +msgstr "" +"当 *universal_newlines* 被设为 ``True``,则类将使用 " +":func:`locale.getpreferredencoding(False) ` " +"编码格式来代替 ``locale.getpreferredencoding()``。 关于它们的区别的更多信息,见 " +":class:`io.TextIOWrapper`。" + +#: ../../library/subprocess.rst:339 ../../library/subprocess.rst:440 +msgid "" +"Read the `Security Considerations`_ section before using ``shell=True``." +msgstr "在使用 ``shell=True`` 之前, 请阅读 `Security Considerations`_ 段落。" + +#: ../../library/subprocess.rst:341 +msgid "" +"These options, along with all of the other options, are described in more " +"detail in the :class:`Popen` constructor documentation." +msgstr "这些选项以及所有其他选项在 :class:`Popen` 构造函数文档中有更详细的描述。" + +#: ../../library/subprocess.rst:346 +msgid "Popen Constructor" +msgstr "Popen 构造函数" + +#: ../../library/subprocess.rst:348 +msgid "" +"The underlying process creation and management in this module is handled by " +"the :class:`Popen` class. It offers a lot of flexibility so that developers " +"are able to handle the less common cases not covered by the convenience " +"functions." +msgstr "" +"此模块的底层的进程创建与管理由 :class:`Popen` 类处理。它提供了很大的灵活性,因此开发者能够处理未被便利函数覆盖的不常见用例。" + +#: ../../library/subprocess.rst:362 +msgid "" +"Execute a child program in a new process. On POSIX, the class uses " +":meth:`os.execvp`-like behavior to execute the child program. On Windows, " +"the class uses the Windows ``CreateProcess()`` function. The arguments to " +":class:`Popen` are as follows." +msgstr "" +"在一个新的进程中执行子程序。在 POSIX,此类使用类似于 :meth:`os.execvp` 的行为来执行子程序。在 Windows,此类使用了 " +"Windows ``CreateProcess()`` 函数。 :class:`Popen` 的参数如下:" + +#: ../../library/subprocess.rst:367 +msgid "" +"*args* should be a sequence of program arguments or else a single string or " +":term:`path-like object`. By default, the program to execute is the first " +"item in *args* if *args* is a sequence. If *args* is a string, the " +"interpretation is platform-dependent and described below. See the *shell* " +"and *executable* arguments for additional differences from the default " +"behavior. Unless otherwise stated, it is recommended to pass *args* as a " +"sequence." +msgstr "" +"*args* 应当是一个程序参数的序列或者是一个单独的字符串或 :term:`path-like object`。 默认情况下,如果 *args* " +"是序列则要运行的程序为 *args* 中的第一项。 如果 *args* 是字符串,则其解读依赖于具体平台,如下所述。 请查看 *shell* 和 " +"*executable* 参数了解其与默认行为的其他差异。 除非另有说明,否则推荐以序列形式传入 *args*。" + +#: ../../library/subprocess.rst:375 +msgid "" +"An example of passing some arguments to an external program as a sequence " +"is::" +msgstr "向外部函数传入序列形式参数的一个例子如下::" + +#: ../../library/subprocess.rst:380 +msgid "" +"On POSIX, if *args* is a string, the string is interpreted as the name or " +"path of the program to execute. However, this can only be done if not " +"passing arguments to the program." +msgstr "" +"在 POSIX,如果 *args* 是一个字符串,此字符串被作为将被执行的程序的命名或路径解释。但是,只有在不传递任何参数给程序的情况下才能这么做。" + +#: ../../library/subprocess.rst:386 +msgid "" +"It may not be obvious how to break a shell command into a sequence of " +"arguments, especially in complex cases. :meth:`shlex.split` can illustrate " +"how to determine the correct tokenization for *args*::" +msgstr "" +"将 shell 命令拆分为参数序列的方式可能并不很直观,特别是在复杂的情况下。 :meth:`shlex.split` 可以演示如何确定 *args* " +"适当的拆分形式::" + +#: ../../library/subprocess.rst:398 +msgid "" +"Note in particular that options (such as *-input*) and arguments (such as " +"*eggs.txt*) that are separated by whitespace in the shell go in separate " +"list elements, while arguments that need quoting or backslash escaping when " +"used in the shell (such as filenames containing spaces or the *echo* command" +" shown above) are single list elements." +msgstr "" +"特别注意,由 shell 中的空格分隔的选项(例如 *-input*)和参数(例如 *eggs.txt* " +")位于分开的列表元素中,而在需要时使用引号或反斜杠转义的参数在 shell (例如包含空格的文件名或上面显示的 *echo* 命令)是单独的列表元素。" + +#: ../../library/subprocess.rst:404 +msgid "" +"On Windows, if *args* is a sequence, it will be converted to a string in a " +"manner described in :ref:`converting-argument-sequence`. This is because " +"the underlying ``CreateProcess()`` operates on strings." +msgstr "" +"在 Windows,如果 *args* 是一个序列,他将通过一个在 :ref:`converting-argument-sequence` " +"描述的方式被转换为一个字符串。这是因为底层的 ``CreateProcess()`` 只处理字符串。" + +#: ../../library/subprocess.rst:408 +msgid "" +"*args* parameter accepts a :term:`path-like object` if *shell* is ``False`` " +"and a sequence containing path-like objects on POSIX." +msgstr "" +"在 POSIX 上如果 *shell* 为 ``False`` 并且序列包含路径类对象则 *args* 形参可以接受一个 :term:`path-" +"like object`。" + +#: ../../library/subprocess.rst:412 +msgid "" +"*args* parameter accepts a :term:`path-like object` if *shell* is ``False`` " +"and a sequence containing bytes and path-like objects on Windows." +msgstr "" +"如果在Windows 上 *shell* 为 ``False`` 并且序列包含字节串和路径类对象则 *args* 形参可以接受一个 " +":term:`path-like object`。" + +#: ../../library/subprocess.rst:417 +msgid "" +"The *shell* argument (which defaults to ``False``) specifies whether to use " +"the shell as the program to execute. If *shell* is ``True``, it is " +"recommended to pass *args* as a string rather than as a sequence." +msgstr "" +"参数 *shell* (默认为 ``False``)指定是否使用 shell 执行程序。如果 *shell* 为 ``True``,更推荐将 " +"*args* 作为字符串传递而非序列。" + +#: ../../library/subprocess.rst:421 +msgid "" +"On POSIX with ``shell=True``, the shell defaults to :file:`/bin/sh`. If " +"*args* is a string, the string specifies the command to execute through the " +"shell. This means that the string must be formatted exactly as it would be " +"when typed at the shell prompt. This includes, for example, quoting or " +"backslash escaping filenames with spaces in them. If *args* is a sequence, " +"the first item specifies the command string, and any additional items will " +"be treated as additional arguments to the shell itself. That is to say, " +":class:`Popen` does the equivalent of::" +msgstr "" +"在 POSIX,当 ``shell=True``, shell 默认为 :file:`/bin/sh`。如果 *args* " +"是一个字符串,此字符串指定将通过 shell " +"执行的命令。这意味着字符串的格式必须和在命令提示符中所输入的完全相同。这包括,例如,引号和反斜杠转义包含空格的文件名。如果 *args* " +"是一个序列,第一项指定了命令,另外的项目将作为传递给 shell (而非命令) 的参数对待。也就是说, :class:`Popen` 等同于::" + +#: ../../library/subprocess.rst:432 +msgid "" +"On Windows with ``shell=True``, the :envvar:`COMSPEC` environment variable " +"specifies the default shell. The only time you need to specify " +"``shell=True`` on Windows is when the command you wish to execute is built " +"into the shell (e.g. :command:`dir` or :command:`copy`). You do not need " +"``shell=True`` to run a batch file or console-based executable." +msgstr "" +"在 Windows,使用 ``shell=True``,环境变量 :envvar:`COMSPEC` 指定了默认 shell。在 Windows " +"你唯一需要指定 ``shell=True`` 的情况是你想要执行内置在 shell 中的命令(例如 :command:`dir` 或者 " +":command:`copy`)。在运行一个批处理文件或者基于控制台的可执行文件时,不需要 ``shell=True``。" + +#: ../../library/subprocess.rst:442 +msgid "" +"*bufsize* will be supplied as the corresponding argument to the :func:`open`" +" function when creating the stdin/stdout/stderr pipe file objects:" +msgstr "*bufsize* 将在 :func:`open` 函数创建了 stdin/stdout/stderr 管道文件对象时作为对应的参数供应:" + +#: ../../library/subprocess.rst:446 +msgid "" +":const:`0` means unbuffered (read and write are one system call and can " +"return short)" +msgstr ":const:`0` 表示不使用缓冲区 (读取与写入是一个系统调用并且可以返回短内容)" + +#: ../../library/subprocess.rst:448 +msgid "" +":const:`1` means line buffered (only usable if ``universal_newlines=True`` " +"i.e., in a text mode)" +msgstr ":const:`1` 表示行缓冲(只有 ``universal_newlines=True`` 时才有用,例如,在文本模式中)" + +#: ../../library/subprocess.rst:450 +msgid "any other positive value means use a buffer of approximately that size" +msgstr "任何其他正值表示使用一个约为对应大小的缓冲区" + +#: ../../library/subprocess.rst:452 +msgid "" +"negative bufsize (the default) means the system default of " +"io.DEFAULT_BUFFER_SIZE will be used." +msgstr "负的 *bufsize* (默认)表示使用系统默认的 io.DEFAULT_BUFFER_SIZE。" + +#: ../../library/subprocess.rst:455 +msgid "" +"*bufsize* now defaults to -1 to enable buffering by default to match the " +"behavior that most code expects. In versions prior to Python 3.2.4 and " +"3.3.1 it incorrectly defaulted to :const:`0` which was unbuffered and " +"allowed short reads. This was unintentional and did not match the behavior " +"of Python 2 as most code expected." +msgstr "" +"*bufsize* 现在默认为 -1 来启用缓冲,以符合大多数代码所期望的行为。在 Python 3.2.4 和 3.3.1 " +"之前的版本中,它错误地将默认值设为了为 :const:`0`,这是无缓冲的并且允许短读取。这是无意的,并且与大多数代码所期望的 Python 2 " +"的行为不一致。" + +#: ../../library/subprocess.rst:462 +msgid "" +"The *executable* argument specifies a replacement program to execute. It " +"is very seldom needed. When ``shell=False``, *executable* replaces the " +"program to execute specified by *args*. However, the original *args* is " +"still passed to the program. Most programs treat the program specified by " +"*args* as the command name, which can then be different from the program " +"actually executed. On POSIX, the *args* name becomes the display name for " +"the executable in utilities such as :program:`ps`. If ``shell=True``, on " +"POSIX the *executable* argument specifies a replacement shell for the " +"default :file:`/bin/sh`." +msgstr "" +"*executable* 参数指定一个要执行的替换程序。这很少需要。当 ``shell=True``, *executable* 替换 *args* " +"指定运行的程序。但是,原始的 *args* 仍然被传递给程序。大多数程序将被 *args* 指定的程序作为命令名对待,这可以与实际运行的程序不同。在 " +"POSIX, *args* 名作为实际调用程序中可执行文件的显示名称,例如 :program:`ps`。如果 ``shell=True``,在 " +"POSIX, *executable* 参数指定用于替换默认 shell :file:`/bin/sh` 的 shell。" + +#: ../../library/subprocess.rst:472 +msgid "*executable* parameter accepts a :term:`path-like object` on POSIX." +msgstr "在POSIX 上 *executable* 形参可以接受一个 :term:`path-like object`。" + +#: ../../library/subprocess.rst:475 +msgid "" +"*executable* parameter accepts a bytes and :term:`path-like object` on " +"Windows." +msgstr "在Windows 上 *executable* 形参可以接受一个字节串和 :term:`path-like object`。" + +#: ../../library/subprocess.rst:487 +msgid "" +"*stdin*, *stdout* and *stderr* specify the executed program's standard " +"input, standard output and standard error file handles, respectively. Valid" +" values are :data:`PIPE`, :data:`DEVNULL`, an existing file descriptor (a " +"positive integer), an existing :term:`file object` with a valid file " +"descriptor, and ``None``. :data:`PIPE` indicates that a new pipe to the " +"child should be created. :data:`DEVNULL` indicates that the special file " +":data:`os.devnull` will be used. With the default settings of ``None``, no " +"redirection will occur; the child's file handles will be inherited from the " +"parent. Additionally, *stderr* can be :data:`STDOUT`, which indicates that " +"the stderr data from the applications should be captured into the same file " +"handle as for stdout." +msgstr "" +"*stdin*, *stdout* 和 *stderr* 分别指定了被执行程序的标准输入、标准输出和标准错误文件句柄。 合法的值包括 " +":data:`PIPE`、:data:`DEVNULL`、现存的文件描述符(一个正整数)、现存的带有合法文件描述符的 :term:`file " +"object` 以及 ``None``。 :data:`PIPE` 表示应该新建一个连接子进程的管道。 :data:`DEVNULL` " +"表示将使用特殊的文件 :data:`os.devnull`。 当使用默认设置 ``None`` 时,将不会进行任何重定向;子进程的文件流将继承自父进程。" +" 另外,*stderr* 可以为 :data:`STDOUT`,这表示来自子进程的 stderr 数据应当被捕获到与 stdout 相同的文件句柄中。" + +#: ../../library/subprocess.rst:499 +msgid "" +"If *preexec_fn* is set to a callable object, this object will be called in " +"the child process just before the child is executed. (POSIX only)" +msgstr "如果 *preexec_fn* 被设为一个可调用对象,此对象将在子进程刚创建时被调用。(仅 POSIX)" + +#: ../../library/subprocess.rst:505 +msgid "" +"The *preexec_fn* parameter is not safe to use in the presence of threads in " +"your application. The child process could deadlock before exec is called. " +"If you must use it, keep it trivial! Minimize the number of libraries you " +"call into." +msgstr "" +"*preexec_fn* 形参在应用程序中存在多线程时是不安全的。子进程在调用前可能死锁。如果你必须使用它,保持警惕!最小化你调用的库的数量。" + +#: ../../library/subprocess.rst:513 +msgid "" +"If you need to modify the environment for the child use the *env* parameter " +"rather than doing it in a *preexec_fn*. The *start_new_session* parameter " +"can take the place of a previously common use of *preexec_fn* to call " +"os.setsid() in the child." +msgstr "" +"如果你需要修改子进程环境,使用 *env* 形参而非在 *preexec_fn* 中进行。 *start_new_session* " +"形参可以代替之前常用的 *preexec_fn* 来在子进程中调用 os.setsid()。" + +#: ../../library/subprocess.rst:520 +msgid "" +"The *preexec_fn* parameter is no longer supported in subinterpreters. The " +"use of the parameter in a subinterpreter raises :exc:`RuntimeError`. The new" +" restriction may affect applications that are deployed in mod_wsgi, uWSGI, " +"and other embedded environments." +msgstr "" +"*preexec_fn* 形参在子解释器中已不再受支持。 在子解释器中使用此形参将引发 :exc:`RuntimeError`。 " +"这个新限制可能会影响部署在 mod_wsgi, uWSGI 和其他嵌入式环境中的应用。" + +#: ../../library/subprocess.rst:525 +msgid "" +"If *close_fds* is true, all file descriptors except :const:`0`, :const:`1` " +"and :const:`2` will be closed before the child process is executed. " +"Otherwise when *close_fds* is false, file descriptors obey their inheritable" +" flag as described in :ref:`fd_inheritance`." +msgstr "" +"如果 *close_fds* 为真,所有文件描述符除了 :const:`0`, :const:`1`, :const:`2` " +"之外都会在子进程执行前关闭。而当 *close_fds* 为假时,文件描述符遵守它们继承的标志,如 :ref:`fd_inheritance` 所述。" + +#: ../../library/subprocess.rst:530 +msgid "" +"On Windows, if *close_fds* is true then no handles will be inherited by the " +"child process unless explicitly passed in the ``handle_list`` element of " +":attr:`STARTUPINFO.lpAttributeList`, or by standard handle redirection." +msgstr "" +"在 Windows,如果 *close_fds* 为真, 则子进程不会继承任何句柄,除非在 " +":attr:`STARTUPINFO.IpAttributeList` 的 ``handle_list`` 的键中显式传递,或者通过标准句柄重定向传递。" + +#: ../../library/subprocess.rst:534 +msgid "" +"The default for *close_fds* was changed from :const:`False` to what is " +"described above." +msgstr "*close_fds* 的默认值已经从 :const:`False` 修改为上述值。" + +#: ../../library/subprocess.rst:538 +msgid "" +"On Windows the default for *close_fds* was changed from :const:`False` to " +":const:`True` when redirecting the standard handles. It's now possible to " +"set *close_fds* to :const:`True` when redirecting the standard handles." +msgstr "" +"在 Windows,当重定向标准句柄时 *close_fds* 的默认值从 :const:`False` 变为 " +":const:`True`。现在重定向标准句柄时有可能设置 *close_fds* 为 :const:`True`。(标准句柄指三个 stdio " +"的句柄)" + +#: ../../library/subprocess.rst:543 +msgid "" +"*pass_fds* is an optional sequence of file descriptors to keep open between " +"the parent and child. Providing any *pass_fds* forces *close_fds* to be " +":const:`True`. (POSIX only)" +msgstr "" +"*pass_fds* 是一个可选的在父子进程间保持打开的文件描述符序列。提供任何 *pass_fds* 将强制 *close_fds* 为 " +":const:`True`。(仅 POSIX)" + +#: ../../library/subprocess.rst:547 +msgid "The *pass_fds* parameter was added." +msgstr "加入了 *pass_fds* 形参。" + +#: ../../library/subprocess.rst:550 +msgid "" +"If *cwd* is not ``None``, the function changes the working directory to " +"*cwd* before executing the child. *cwd* can be a string, bytes or " +":term:`path-like ` object. In particular, the function " +"looks for *executable* (or for the first item in *args*) relative to *cwd* " +"if the executable path is a relative path." +msgstr "" +"如果 *cwd* 不为 ``None``,此函数在执行子进程前会将当前工作目录改为 *cwd*。 *cwd* 可以是一个字符串、字节串或 " +":term:`路径类对象 ` 。 特别地,当可执行文件的路径为相对路径时,此函数会相对于*cwd* 来查找 " +"*executable* (或 *args* 中的第一个条目)。" + +#: ../../library/subprocess.rst:556 +msgid "*cwd* parameter accepts a :term:`path-like object` on POSIX." +msgstr "在 POSIX 上 *cwd* 形参接受一个 :term:`path-like object`。" + +#: ../../library/subprocess.rst:559 +msgid "*cwd* parameter accepts a :term:`path-like object` on Windows." +msgstr "在 Windows 上 *cwd* 形参接受一个 :term:`path-like object`。" + +#: ../../library/subprocess.rst:562 +msgid "*cwd* parameter accepts a bytes object on Windows." +msgstr "在 Windows 上 *cwd* 形参接受一个字节串对象。" + +#: ../../library/subprocess.rst:565 +msgid "" +"If *restore_signals* is true (the default) all signals that Python has set " +"to SIG_IGN are restored to SIG_DFL in the child process before the exec. " +"Currently this includes the SIGPIPE, SIGXFZ and SIGXFSZ signals. (POSIX " +"only)" +msgstr "" +" 如果 *restore_signals* 为 true(默认值),则 Python 设置为 SIG_IGN 的所有信号将在 exec " +"之前的子进程中恢复为 SIG_DFL。目前,这包括 SIGPIPE ,SIGXFZ 和 SIGXFSZ 信号。 (仅 POSIX)" + +#: ../../library/subprocess.rst:570 +msgid "*restore_signals* was added." +msgstr "*restore_signals* 被加入。" + +#: ../../library/subprocess.rst:573 +msgid "" +"If *start_new_session* is true the setsid() system call will be made in the " +"child process prior to the execution of the subprocess. (POSIX only)" +msgstr "如果 *start_new_session* 为 true,则 setsid() 系统调用将在子进程执行之前被执行。(仅 POSIX)" + +#: ../../library/subprocess.rst:576 +msgid "*start_new_session* was added." +msgstr "*start_new_session* 被添加。" + +#: ../../library/subprocess.rst:579 +msgid "" +"If *group* is not ``None``, the setregid() system call will be made in the " +"child process prior to the execution of the subprocess. If the provided " +"value is a string, it will be looked up via :func:`grp.getgrnam()` and the " +"value in ``gr_gid`` will be used. If the value is an integer, it will be " +"passed verbatim. (POSIX only)" +msgstr "" +"如果 *group* 不为 ``None``,则 setregid() 系统调用将于子进程执行之前在下级进程中进行。 如果所提供的值为一个字符串,将通过" +" :func:`grp.getgrnam()` 来查找它,并将使用 ``gr_gid`` 中的值。 如果该值为一个整数,它将被原样传递。 (POSIX " +"专属)" + +#: ../../library/subprocess.rst:585 ../../library/subprocess.rst:594 +#: ../../library/subprocess.rst:603 ../../library/subprocess.rst:609 +msgid ":ref:`Availability `: POSIX" +msgstr ":ref:`可用性 `: POSIX" + +#: ../../library/subprocess.rst:588 +msgid "" +"If *extra_groups* is not ``None``, the setgroups() system call will be made " +"in the child process prior to the execution of the subprocess. Strings " +"provided in *extra_groups* will be looked up via :func:`grp.getgrnam()` and " +"the values in ``gr_gid`` will be used. Integer values will be passed " +"verbatim. (POSIX only)" +msgstr "" +"如果 *extra_groups* 不为 ``None``,则 setgroups() 系统调用将于子进程之前在下级进程中进行。 在 " +"*extra_groups* 中提供的字符串将通过 :func:`grp.getgrnam()` 来查找,并将使用 ``gr_gid`` 中的值。 " +"整数值将被原样传递。 (POSIX 专属)" + +#: ../../library/subprocess.rst:597 +msgid "" +"If *user* is not ``None``, the setreuid() system call will be made in the " +"child process prior to the execution of the subprocess. If the provided " +"value is a string, it will be looked up via :func:`pwd.getpwnam()` and the " +"value in ``pw_uid`` will be used. If the value is an integer, it will be " +"passed verbatim. (POSIX only)" +msgstr "" +"如果 *user* 不为 ``None``,则 setreuid() 系统调用将于子进程执行之前在下级进程中进行。 如果所提供的值为一个字符串,将通过 " +":func:`pwd.getpwnam()` 来查找它,并将使用 ``pw_uid`` 中的值。 如果该值为一个整数,它将被原样传递。 (POSIX " +"专属)" + +#: ../../library/subprocess.rst:606 +msgid "" +"If *umask* is not negative, the umask() system call will be made in the " +"child process prior to the execution of the subprocess." +msgstr "如果 *umask* 不为负值,则 umask() 系统调用将在子进程执行之前在下级进程中进行。" + +#: ../../library/subprocess.rst:612 +msgid "" +"If *env* is not ``None``, it must be a mapping that defines the environment " +"variables for the new process; these are used instead of the default " +"behavior of inheriting the current process' environment." +msgstr "如果 *env* 不为 ``None``,则必须为一个为新进程定义了环境变量的字典;这些用于替换继承的当前进程环境的默认行为。" + +#: ../../library/subprocess.rst:618 +msgid "" +"If specified, *env* must provide any variables required for the program to " +"execute. On Windows, in order to run a `side-by-side assembly`_ the " +"specified *env* **must** include a valid :envvar:`SystemRoot`." +msgstr "" +"如果指定, *env* 必须提供所有被子进程需求的变量。在 Windows,为了运行一个 `side-by-side assembly`_ ,指定的 " +"*env* **必须** 包含一个有效的 :envvar:`SystemRoot`。" + +#: ../../library/subprocess.rst:624 +msgid "" +"If *encoding* or *errors* are specified, or *text* is true, the file objects" +" *stdin*, *stdout* and *stderr* are opened in text mode with the specified " +"encoding and *errors*, as described above in :ref:`frequently-used-" +"arguments`. The *universal_newlines* argument is equivalent to *text* and " +"is provided for backwards compatibility. By default, file objects are opened" +" in binary mode." +msgstr "" +"如果 *encoding* 或 *errors* 被指定,或者 *text* 为 true,则文件对象 *stdin*, *stdout* 和 " +"*stderr* 将会以指定的编码和 *errors* 以文本模式打开,如同 :ref:`frequently-used-arguments` 所述。 " +"*universal_newlines* 参数等同于 *text* 并且提供向后兼容性。默认情况下,文件对象都以二进制模式打开。" + +#: ../../library/subprocess.rst:630 +msgid "*encoding* and *errors* were added." +msgstr "*encoding* 和 *errors* 被添加。" + +#: ../../library/subprocess.rst:633 ../../library/subprocess.rst:1253 +msgid "*text* was added as a more readable alias for *universal_newlines*." +msgstr "*text* 作为 *universal_newlines* 的一个更具可读性的别名被添加。" + +#: ../../library/subprocess.rst:636 +msgid "" +"If given, *startupinfo* will be a :class:`STARTUPINFO` object, which is " +"passed to the underlying ``CreateProcess`` function. *creationflags*, if " +"given, can be one or more of the following flags:" +msgstr "" +"如果给出, *startupinfo* 将是一个将被传递给底层的 ``CreateProcess`` 函数的 :class:`STARTUPINFO` " +"对象。 *creationflags*,如果给出,可以是一个或多个以下标志之一:" + +#: ../../library/subprocess.rst:640 +msgid ":data:`CREATE_NEW_CONSOLE`" +msgstr ":data:`CREATE_NEW_CONSOLE`" + +#: ../../library/subprocess.rst:641 +msgid ":data:`CREATE_NEW_PROCESS_GROUP`" +msgstr ":data:`CREATE_NEW_PROCESS_GROUP`" + +#: ../../library/subprocess.rst:642 +msgid ":data:`ABOVE_NORMAL_PRIORITY_CLASS`" +msgstr ":data:`ABOVE_NORMAL_PRIORITY_CLASS`" + +#: ../../library/subprocess.rst:643 +msgid ":data:`BELOW_NORMAL_PRIORITY_CLASS`" +msgstr ":data:`BELOW_NORMAL_PRIORITY_CLASS`" + +#: ../../library/subprocess.rst:644 +msgid ":data:`HIGH_PRIORITY_CLASS`" +msgstr ":data:`HIGH_PRIORITY_CLASS`" + +#: ../../library/subprocess.rst:645 +msgid ":data:`IDLE_PRIORITY_CLASS`" +msgstr ":data:`IDLE_PRIORITY_CLASS`" + +#: ../../library/subprocess.rst:646 +msgid ":data:`NORMAL_PRIORITY_CLASS`" +msgstr ":data:`NORMAL_PRIORITY_CLASS`" + +#: ../../library/subprocess.rst:647 +msgid ":data:`REALTIME_PRIORITY_CLASS`" +msgstr ":data:`REALTIME_PRIORITY_CLASS`" + +#: ../../library/subprocess.rst:648 +msgid ":data:`CREATE_NO_WINDOW`" +msgstr ":data:`CREATE_NO_WINDOW`" + +#: ../../library/subprocess.rst:649 +msgid ":data:`DETACHED_PROCESS`" +msgstr ":data:`DETACHED_PROCESS`" + +#: ../../library/subprocess.rst:650 +msgid ":data:`CREATE_DEFAULT_ERROR_MODE`" +msgstr ":data:`CREATE_DEFAULT_ERROR_MODE`" + +#: ../../library/subprocess.rst:651 +msgid ":data:`CREATE_BREAKAWAY_FROM_JOB`" +msgstr ":data:`CREATE_BREAKAWAY_FROM_JOB`" + +#: ../../library/subprocess.rst:653 +msgid "" +"Popen objects are supported as context managers via the :keyword:`with` " +"statement: on exit, standard file descriptors are closed, and the process is" +" waited for. ::" +msgstr "Popen 对象支持通过 :keyword:`with` 语句作为上下文管理器,在退出时关闭文件描述符并等待进程::" + +#: ../../library/subprocess.rst:660 +msgid "" +"Raises an :ref:`auditing event ` ``subprocess.Popen`` with " +"arguments ``executable``, ``args``, ``cwd``, ``env``." +msgstr "" +"引发一个 :ref:`审计事件 ` ``subprocess.Popen``,附带参数 ``executable``, " +"``args``, ``cwd``, ``env``。" + +#: ../../library/subprocess.rst:662 +msgid "" +"Popen and the other functions in this module that use it raise an " +":ref:`auditing event ` ``subprocess.Popen`` with arguments " +"``executable``, ``args``, ``cwd``, and ``env``. The value for ``args`` may " +"be a single string or a list of strings, depending on platform." +msgstr "" +"Popen 和此模块中用到它的其他函数会引发一个 :ref:`审计事件 ` ``subprocess.Popen``,附带参数 " +"``executable``, ``args``, ``cwd`` 和 ``env``。 ``args`` " +"的值可以是单个字符串或字符串列表,取决于具体的平台。" + +#: ../../library/subprocess.rst:667 +msgid "Added context manager support." +msgstr "添加了上下文管理器支持。" + +#: ../../library/subprocess.rst:670 +msgid "" +"Popen destructor now emits a :exc:`ResourceWarning` warning if the child " +"process is still running." +msgstr "现在,如果 Popen 析构时子进程仍然在运行,则析构器会发送一个 :exc:`ResourceWarning` 警告。" + +#: ../../library/subprocess.rst:674 +msgid "" +"Popen can use :func:`os.posix_spawn` in some cases for better performance. " +"On Windows Subsystem for Linux and QEMU User Emulation, Popen constructor " +"using :func:`os.posix_spawn` no longer raise an exception on errors like " +"missing program, but the child process fails with a non-zero " +":attr:`~Popen.returncode`." +msgstr "" +"在某些情况下 Popen 可以使用 :func:`os.posix_spawn` 以获得更好的性能。在适用于 Linux 的 Windows 子系统和 " +"QEMU 用户模拟器上,使用 :func:`os.posix_spawn` 的 Popen " +"构造器不再会因找不到程序等错误而引发异常,而是上下级进程失败并返回一个非零的 :attr:`~Popen.returncode`。" + +#: ../../library/subprocess.rst:683 +msgid "Exceptions" +msgstr "异常" + +#: ../../library/subprocess.rst:685 +msgid "" +"Exceptions raised in the child process, before the new program has started " +"to execute, will be re-raised in the parent." +msgstr "在子进程中抛出的异常,在新的进程开始执行前,将会被再次在父进程中抛出。" + +#: ../../library/subprocess.rst:688 +msgid "" +"The most common exception raised is :exc:`OSError`. This occurs, for " +"example, when trying to execute a non-existent file. Applications should " +"prepare for :exc:`OSError` exceptions. Note that, when ``shell=True``, " +":exc:`OSError` will be raised by the child only if the selected shell itself" +" was not found. To determine if the shell failed to find the requested " +"application, it is necessary to check the return code or output from the " +"subprocess." +msgstr "" +"被引发的最一般异常是 :exc:`OSError`。 例如这会在尝试执行一个不存在的文件时发生。 应用程序应当为 :exc:`OSError` " +"异常做好准备。 请注意,如果 ``shell=True``,则 :exc:`OSError` 仅会在未找到选定的 shell 本身时被引发。 要确定 " +"shell 是否未找到所请求的应用程序,必须检查来自子进程的返回码或输出。" + +#: ../../library/subprocess.rst:695 +msgid "" +"A :exc:`ValueError` will be raised if :class:`Popen` is called with invalid " +"arguments." +msgstr "如果 :class:`Popen` 调用时有无效的参数,则一个 :exc:`ValueError` 将被抛出。" + +#: ../../library/subprocess.rst:698 +msgid "" +":func:`check_call` and :func:`check_output` will raise " +":exc:`CalledProcessError` if the called process returns a non-zero return " +"code." +msgstr "" +":func:`check_call` 与 :func:`check_output` 在调用的进程返回非零退出码时将抛出 " +":exc:`CalledProcessError`。" + +#: ../../library/subprocess.rst:702 +msgid "" +"All of the functions and methods that accept a *timeout* parameter, such as " +":func:`call` and :meth:`Popen.communicate` will raise :exc:`TimeoutExpired` " +"if the timeout expires before the process exits." +msgstr "" +"所有接受 *timeout* 形参的函数与方法,例如 :func:`call` 和 :meth:`Popen.communicate` " +"将会在进程退出前超时到期时抛出 :exc:`TimeoutExpired`。" + +#: ../../library/subprocess.rst:706 +msgid "" +"Exceptions defined in this module all inherit from :exc:`SubprocessError`." +msgstr "此模块中定义的异常都继承自 :exc:`SubprocessError`。" + +#: ../../library/subprocess.rst:708 +msgid "The :exc:`SubprocessError` base class was added." +msgstr "基类 :exc:`SubprocessError` 被添加。" + +#: ../../library/subprocess.rst:714 +msgid "Security Considerations" +msgstr "安全考量" + +#: ../../library/subprocess.rst:716 +msgid "" +"Unlike some other popen functions, this library will not implicitly choose " +"to call a system shell. This means that all characters, including shell " +"metacharacters, can safely be passed to child processes. If the shell is " +"invoked explicitly, via ``shell=True``, it is the application's " +"responsibility to ensure that all whitespace and metacharacters are quoted " +"appropriately to avoid `shell injection " +"`_ " +"vulnerabilities." +msgstr "" + +#: ../../library/subprocess.rst:725 +msgid "" +"When using ``shell=True``, the :func:`shlex.quote` function can be used to " +"properly escape whitespace and shell metacharacters in strings that are " +"going to be used to construct shell commands." +msgstr "" +"当使用 ``shell=True``, :func:`shlex.quote` 函数可以作为在将被用于构造 shell 指令的字符串中转义空白字符以及 " +"shell 元字符的方案。" + +#: ../../library/subprocess.rst:729 +msgid "" +"On Windows, batch files (:file:`*.bat` or :file:`*.cmd`) may be launched by " +"the operating system in a system shell regardless of the arguments passed to" +" this library. This could result in arguments being parsed according to " +"shell rules, but without any escaping added by Python. If you are " +"intentionally launching a batch file with arguments from untrusted sources, " +"consider passing ``shell=True`` to allow Python to escape special " +"characters. See :gh:`114539` for additional discussion." +msgstr "" +"在 Windows 上,批处理文件 (:file:`*.bat` 或 :file:`*.cmd`) 可以在系统 shell " +"中通过操作系统调用来启动而忽略传给该库的参数。 这可能导致根据 shell 规则来解析参数,而没有任何 Python 添加的转义。 " +"如果你想要附带来自不受信任源的参数启动批处理文件,请考虑传入 ``shell=True`` 以允许 Python 转义特殊字符。 请参阅 " +":gh:`114539` 了解相关讨论。" + +#: ../../library/subprocess.rst:739 +msgid "Popen Objects" +msgstr "Popen 对象" + +#: ../../library/subprocess.rst:741 +msgid "Instances of the :class:`Popen` class have the following methods:" +msgstr ":class:`Popen` 类的实例拥有以下方法:" + +#: ../../library/subprocess.rst:746 +msgid "" +"Check if child process has terminated. Set and return " +":attr:`~Popen.returncode` attribute. Otherwise, returns ``None``." +msgstr "检查子进程是否已被终止。设置并返回 :attr:`~Popen.returncode` 属性。否则返回 ``None``。" + +#: ../../library/subprocess.rst:752 +msgid "" +"Wait for child process to terminate. Set and return " +":attr:`~Popen.returncode` attribute." +msgstr "等待子进程被终止。设置并返回 :attr:`~Popen.returncode` 属性。" + +#: ../../library/subprocess.rst:755 +msgid "" +"If the process does not terminate after *timeout* seconds, raise a " +":exc:`TimeoutExpired` exception. It is safe to catch this exception and " +"retry the wait." +msgstr "如果进程在 *timeout* 秒后未中断,抛出一个 :exc:`TimeoutExpired` 异常,可以安全地捕获此异常并重新等待。" + +#: ../../library/subprocess.rst:761 +msgid "" +"This will deadlock when using ``stdout=PIPE`` or ``stderr=PIPE`` and the " +"child process generates enough output to a pipe such that it blocks waiting " +"for the OS pipe buffer to accept more data. Use :meth:`Popen.communicate` " +"when using pipes to avoid that." +msgstr "" +"当 ``stdout=PIPE`` 或者 ``stderr=PIPE`` 并且子进程产生了足以阻塞 OS " +"管道缓冲区接收更多数据的输出到管道时,将会发生死锁。当使用管道时用 :meth:`Popen.communicate` 来规避它。" + +#: ../../library/subprocess.rst:768 +msgid "" +"The function is implemented using a busy loop (non-blocking call and short " +"sleeps). Use the :mod:`asyncio` module for an asynchronous wait: see " +":class:`asyncio.create_subprocess_exec`." +msgstr "" +"此函数使用了一个 busy loop (非阻塞调用以及短睡眠) 实现。使用 :mod:`asyncio` 模块进行异步等待: 参阅 " +":class:`asyncio.create_subprocess_exec`。" + +#: ../../library/subprocess.rst:772 ../../library/subprocess.rst:813 +#: ../../library/subprocess.rst:1150 ../../library/subprocess.rst:1190 +#: ../../library/subprocess.rst:1244 +msgid "*timeout* was added." +msgstr "*timeout* 被添加" + +#: ../../library/subprocess.rst:777 +msgid "" +"Interact with process: Send data to stdin. Read data from stdout and " +"stderr, until end-of-file is reached. Wait for process to terminate and set" +" the :attr:`~Popen.returncode` attribute. The optional *input* argument " +"should be data to be sent to the child process, or ``None``, if no data " +"should be sent to the child. If streams were opened in text mode, *input* " +"must be a string. Otherwise, it must be bytes." +msgstr "" +"与进程交互:将数据发送到 stdin。 从 stdout 和 stderr 读取数据,直到抵达文件结尾。 等待进程终止并设置 " +":attr:`~Popen.returncode` 属性。 可选的 *input* " +"参数应为要发送到下级进程的数据,或者如果没有要发送到下级进程的数据则为 ``None``。 如果流是以文本模式打开的,则 *input* 必须为字符串。" +" 在其他情况下,它必须为字节串。" + +#: ../../library/subprocess.rst:784 +msgid "" +":meth:`communicate` returns a tuple ``(stdout_data, stderr_data)``. The data" +" will be strings if streams were opened in text mode; otherwise, bytes." +msgstr "" +":meth:`communicate` 返回一个 ``(stdout_data, stderr_data)`` " +"元组。如果文件以文本模式打开则为字符串;否则字节。" + +#: ../../library/subprocess.rst:788 +msgid "" +"Note that if you want to send data to the process's stdin, you need to " +"create the Popen object with ``stdin=PIPE``. Similarly, to get anything " +"other than ``None`` in the result tuple, you need to give ``stdout=PIPE`` " +"and/or ``stderr=PIPE`` too." +msgstr "" +"注意如果你想要向进程的 stdin 传输数据,你需要通过 ``stdin=PIPE`` 创建此 Popen 对象。类似的,要从结果元组获取任何非 " +"``None`` 值,你同样需要设置 ``stdout=PIPE`` 或者 ``stderr=PIPE``。" + +#: ../../library/subprocess.rst:793 +msgid "" +"If the process does not terminate after *timeout* seconds, a " +":exc:`TimeoutExpired` exception will be raised. Catching this exception and" +" retrying communication will not lose any output." +msgstr "" +"如果进程在 *timeout* 秒后未终止,一个 :exc:`TimeoutExpired` 异常将被抛出。捕获此异常并重新等待将不会丢失任何输出。" + +#: ../../library/subprocess.rst:797 +msgid "" +"The child process is not killed if the timeout expires, so in order to " +"cleanup properly a well-behaved application should kill the child process " +"and finish communication::" +msgstr "如果超时到期,子进程不会被杀死,所以为了正确清理一个行为良好的应用程序应该杀死子进程并完成通讯。" + +#: ../../library/subprocess.rst:810 +msgid "" +"The data read is buffered in memory, so do not use this method if the data " +"size is large or unlimited." +msgstr "内存里数据读取是缓冲的,所以如果数据尺寸过大或无限,不要使用此方法。" + +#: ../../library/subprocess.rst:819 +msgid "Sends the signal *signal* to the child." +msgstr "将信号 *signal* 发送给子进程。" + +#: ../../library/subprocess.rst:821 +msgid "Do nothing if the process completed." +msgstr "如果进程已完成则不做任何操作。" + +#: ../../library/subprocess.rst:825 +msgid "" +"On Windows, SIGTERM is an alias for :meth:`terminate`. CTRL_C_EVENT and " +"CTRL_BREAK_EVENT can be sent to processes started with a *creationflags* " +"parameter which includes `CREATE_NEW_PROCESS_GROUP`." +msgstr "" +"在 Windows, SIGTERM 是一个 :meth:`terminate` 的别名。 CTRL_C_EVENT 和 " +"CTRL_BREAK_EVENT 可以被发送给以包含 ``CREATE_NEW_PROCESS`` 的 *creationflags* 形参启动的进程。" + +#: ../../library/subprocess.rst:832 +msgid "" +"Stop the child. On POSIX OSs the method sends SIGTERM to the child. On " +"Windows the Win32 API function :c:func:`TerminateProcess` is called to stop " +"the child." +msgstr "" +"停止子进程。 在 POSIX 操作系统上,此方法会发送 SIGTERM 给子进程。 在 Windows 上则会调用 Win32 API 函数 " +":c:func:`TerminateProcess` 来停止子进程。" + +#: ../../library/subprocess.rst:839 +msgid "" +"Kills the child. On POSIX OSs the function sends SIGKILL to the child. On " +"Windows :meth:`kill` is an alias for :meth:`terminate`." +msgstr "" +"杀死子进程。 在 POSIX 操作系统上,此函数会发送 SIGKILL 给子进程。 在 Windows 上 :meth:`kill` 则是 " +":meth:`terminate` 的别名。" + +#: ../../library/subprocess.rst:843 +msgid "The following attributes are also available:" +msgstr "以下属性也是可用的:" + +#: ../../library/subprocess.rst:847 +msgid "" +"The *args* argument as it was passed to :class:`Popen` -- a sequence of " +"program arguments or else a single string." +msgstr "*args* 参数传递给 :class:`Popen` -- 一个程序参数的序列或者一个简单字符串。" + +#: ../../library/subprocess.rst:854 +msgid "" +"If the *stdin* argument was :data:`PIPE`, this attribute is a writeable " +"stream object as returned by :func:`open`. If the *encoding* or *errors* " +"arguments were specified or the *universal_newlines* argument was ``True``, " +"the stream is a text stream, otherwise it is a byte stream. If the *stdin* " +"argument was not :data:`PIPE`, this attribute is ``None``." +msgstr "" +"如果 *stdin* 参数为 :data:`PIPE`,此属性是一个类似 :func:`open` 返回的可写的流对象。如果 *encoding* 或 " +"*errors* 参数被指定或者 *universal_newlines* 参数为 ``True``,则此流是一个文本流,否则是字节流。如果 " +"*stdin* 参数非 :data:`PIPE`, 此属性为 ``None``。" + +#: ../../library/subprocess.rst:863 +msgid "" +"If the *stdout* argument was :data:`PIPE`, this attribute is a readable " +"stream object as returned by :func:`open`. Reading from the stream provides " +"output from the child process. If the *encoding* or *errors* arguments were " +"specified or the *universal_newlines* argument was ``True``, the stream is a" +" text stream, otherwise it is a byte stream. If the *stdout* argument was " +"not :data:`PIPE`, this attribute is ``None``." +msgstr "" +"如果 *stdout* 参数是 :data:`PIPE`,此属性是一个类似 :func:`open` 返回的可读流。从流中读取子进程提供的输出。如果 " +"*encoding* 或 *errors* 参数被指定或者 *universal_newlines* 参数为 " +"``True``,此流为文本流,否则为字节流。如果 *stdout* 参数非 :data:`PIPE`,此属性为 ``None``。" + +#: ../../library/subprocess.rst:873 +msgid "" +"If the *stderr* argument was :data:`PIPE`, this attribute is a readable " +"stream object as returned by :func:`open`. Reading from the stream provides " +"error output from the child process. If the *encoding* or *errors* arguments" +" were specified or the *universal_newlines* argument was ``True``, the " +"stream is a text stream, otherwise it is a byte stream. If the *stderr* " +"argument was not :data:`PIPE`, this attribute is ``None``." +msgstr "" +"如果 *stderr* 参数是 :data:`PIPE`,此属性是一个类似 :func:`open` 返回的可读流。从流中读取子进程提供的输出。如果 " +"*encoding* 或 *errors* 参数被指定或者 *universal_newlines* 参数为 " +"``True``,此流为文本流,否则为字节流。如果 *stderr* 参数非 :data:`PIPE`,此属性为 ``None``。" + +#: ../../library/subprocess.rst:882 +msgid "" +"Use :meth:`~Popen.communicate` rather than :attr:`.stdin.write " +"`, :attr:`.stdout.read ` or :attr:`.stderr.read " +"` to avoid deadlocks due to any of the other OS pipe buffers " +"filling up and blocking the child process." +msgstr "" +"使用 :meth:`~Popen.communicate` 而非 :attr:`.stdin.write `, " +":attr:`.stdout.read ` 或者 :attr:`.stderr.read ` " +"来避免由于任意其他 OS 管道缓冲区被子进程填满阻塞而导致的死锁。" + +#: ../../library/subprocess.rst:890 +msgid "The process ID of the child process." +msgstr "子进程的进程号。" + +#: ../../library/subprocess.rst:892 +msgid "" +"Note that if you set the *shell* argument to ``True``, this is the process " +"ID of the spawned shell." +msgstr "注意如果你设置了 *shell* 参数为 ``True``,则这是生成的子 shell 的进程号。" + +#: ../../library/subprocess.rst:898 +msgid "" +"The child return code, set by :meth:`poll` and :meth:`wait` (and indirectly " +"by :meth:`communicate`). A ``None`` value indicates that the process hasn't" +" terminated yet." +msgstr "" +"此进程的退出码,由 :meth:`poll` 和 :meth:`wait` 设置(以及直接由 :meth:`communicate` 设置)。一个 " +"``None`` 值 表示此进程仍未结束。" + +#: ../../library/subprocess.rst:907 +msgid "Windows Popen Helpers" +msgstr "Windows Popen 助手" + +#: ../../library/subprocess.rst:909 +msgid "" +"The :class:`STARTUPINFO` class and following constants are only available on" +" Windows." +msgstr ":class:`STARTUPINFO` 类和以下常数仅在 Windows 有效。" + +#: ../../library/subprocess.rst:915 +msgid "" +"Partial support of the Windows `STARTUPINFO `__ structure is used for :class:`Popen` " +"creation. The following attributes can be set by passing them as keyword-" +"only arguments." +msgstr "" +"在 :class:`Popen` 创建时部分支持 Windows 的 `STARTUPINFO " +"`__ " +"结构。接下来的属性仅能通过关键词参数设置。" + +#: ../../library/subprocess.rst:920 +msgid "Keyword-only argument support was added." +msgstr "仅关键词参数支持被加入。" + +#: ../../library/subprocess.rst:925 +msgid "" +"A bit field that determines whether certain :class:`STARTUPINFO` attributes " +"are used when the process creates a window. ::" +msgstr "一个位字段,用于确定进程在创建窗口时是否使用某些 :class:`STARTUPINFO` 属性。" + +#: ../../library/subprocess.rst:933 +msgid "" +"If :attr:`dwFlags` specifies :data:`STARTF_USESTDHANDLES`, this attribute is" +" the standard input handle for the process. If :data:`STARTF_USESTDHANDLES` " +"is not specified, the default for standard input is the keyboard buffer." +msgstr "" +"如果 :attr:`dwFlags` 被指定为 :data:`STARTF_USESTDHANDLES`,则此属性是进程的标准输入句柄,如果 " +":data:`STARTF_USESTDHANDLES` 未指定,则默认的标准输入是键盘缓冲区。" + +#: ../../library/subprocess.rst:940 +msgid "" +"If :attr:`dwFlags` specifies :data:`STARTF_USESTDHANDLES`, this attribute is" +" the standard output handle for the process. Otherwise, this attribute is " +"ignored and the default for standard output is the console window's buffer." +msgstr "" +"如果 :attr:`dwFlags` 被指定为 " +":data:`STARTF_USESTDHANDLES`,则此属性是进程的标准输出句柄。除此之外,此此属性将被忽略并且默认标准输出是控制台窗口缓冲区。" + +#: ../../library/subprocess.rst:947 +msgid "" +"If :attr:`dwFlags` specifies :data:`STARTF_USESTDHANDLES`, this attribute is" +" the standard error handle for the process. Otherwise, this attribute is " +"ignored and the default for standard error is the console window's buffer." +msgstr "" +"如果 :attr:`dwFlags` 被指定为 " +":data:`STARTF_USESTDHANDLES`,则此属性是进程的标准错误句柄。除此之外,此属性将被忽略并且默认标准错误为控制台窗口的缓冲区。" + +#: ../../library/subprocess.rst:953 +msgid "" +"If :attr:`dwFlags` specifies :data:`STARTF_USESHOWWINDOW`, this attribute " +"can be any of the values that can be specified in the ``nCmdShow`` parameter" +" for the `ShowWindow `__ function, except for " +"``SW_SHOWDEFAULT``. Otherwise, this attribute is ignored." +msgstr "" +"如果 :attr:`dwFlags` 指定了 :data:`STARTF_USESHOWWINDOW`,此属性可为能被指定为 函数 " +"`ShowWindow `__ 的nCmdShow 的形参的任意值,除了 " +"``SW_SHOWDEFAULT``。如此之外,此属性被忽略。" + +#: ../../library/subprocess.rst:960 +msgid "" +":data:`SW_HIDE` is provided for this attribute. It is used when " +":class:`Popen` is called with ``shell=True``." +msgstr ":data:`SW_HIDE` 被提供给此属性。它在 :class:`Popen` 由 ``shell=True`` 调用时使用。" + +#: ../../library/subprocess.rst:965 +msgid "" +"A dictionary of additional attributes for process creation as given in " +"``STARTUPINFOEX``, see `UpdateProcThreadAttribute " +"`__." +msgstr "" +"``STARTUPINFOEX`` 给出的用于进程创建的额外属性字典,参阅 `UpdateProcThreadAttribute " +"`__。" + +#: ../../library/subprocess.rst:969 +msgid "Supported attributes:" +msgstr "支持的属性:" + +#: ../../library/subprocess.rst:987 +msgid "**handle_list**" +msgstr "**handle_list**" + +#: ../../library/subprocess.rst:972 +msgid "" +"Sequence of handles that will be inherited. *close_fds* must be true if non-" +"empty." +msgstr "将被继承的句柄的序列。如果非空, *close_fds* 必须为 true。" + +#: ../../library/subprocess.rst:975 +msgid "" +"The handles must be temporarily made inheritable by " +":func:`os.set_handle_inheritable` when passed to the :class:`Popen` " +"constructor, else :class:`OSError` will be raised with Windows error " +"``ERROR_INVALID_PARAMETER`` (87)." +msgstr "" +"当传递给 :class:`Popen` 构造函数时,这些句柄必须暂时地能被 :func:`os.set_handle_inheritable` " +"继承,否则 :class:`OSError` 将以 Windows error ``ERROR_INVALID_PARAMETER`` (87) 抛出。" + +#: ../../library/subprocess.rst:982 +msgid "" +"In a multithreaded process, use caution to avoid leaking handles that are " +"marked inheritable when combining this feature with concurrent calls to " +"other process creation functions that inherit all handles such as " +":func:`os.system`. This also applies to standard handle redirection, which " +"temporarily creates inheritable handles." +msgstr "" +"在多线程进程中,请谨慎使用,以便在将此功能与对继承所有句柄的其他进程创建函数——例如 :func:`os.system` " +"的并发调用——相结合时,避免泄漏标记为可继承的句柄。这也应用于临时性创建可继承句柄的标准句柄重定向。" + +#: ../../library/subprocess.rst:992 +msgid "Windows Constants" +msgstr "Windows 常数" + +#: ../../library/subprocess.rst:994 +msgid "The :mod:`subprocess` module exposes the following constants." +msgstr ":mod:`subprocess` 模块曝出以下常数。" + +#: ../../library/subprocess.rst:998 +msgid "" +"The standard input device. Initially, this is the console input buffer, " +"``CONIN$``." +msgstr "标准输入设备,这是控制台输入缓冲区 ``CONIN$``。" + +#: ../../library/subprocess.rst:1003 +msgid "" +"The standard output device. Initially, this is the active console screen " +"buffer, ``CONOUT$``." +msgstr "标准输出设备。最初,这是活动控制台屏幕缓冲区 ``CONOUT$``。" + +#: ../../library/subprocess.rst:1008 +msgid "" +"The standard error device. Initially, this is the active console screen " +"buffer, ``CONOUT$``." +msgstr "标准错误设备。最初,这是活动控制台屏幕缓冲区 ``CONOUT$``。" + +#: ../../library/subprocess.rst:1013 +msgid "Hides the window. Another window will be activated." +msgstr "隐藏窗口。另一个窗口将被激活。" + +#: ../../library/subprocess.rst:1017 +msgid "" +"Specifies that the :attr:`STARTUPINFO.hStdInput`, " +":attr:`STARTUPINFO.hStdOutput`, and :attr:`STARTUPINFO.hStdError` attributes" +" contain additional information." +msgstr "" +"指明 :attr:`STARTUPINFO.hStdInput`, :attr:`STARTUPINFO.hStdOutput` 和 " +":attr:`STARTUPINFO.hStdError` 属性包含额外的信息。" + +#: ../../library/subprocess.rst:1023 +msgid "" +"Specifies that the :attr:`STARTUPINFO.wShowWindow` attribute contains " +"additional information." +msgstr "指明 :attr:`STARTUPINFO.wShowWindow` 属性包含额外的信息。" + +#: ../../library/subprocess.rst:1028 +msgid "" +"The new process has a new console, instead of inheriting its parent's " +"console (the default)." +msgstr "新的进程将有新的控制台,而不是继承父进程的(默认)控制台。" + +#: ../../library/subprocess.rst:1033 +msgid "" +"A :class:`Popen` ``creationflags`` parameter to specify that a new process " +"group will be created. This flag is necessary for using :func:`os.kill` on " +"the subprocess." +msgstr "" +"用于指明将创建一个新的进程组的 :class:`Popen` ``creationflags`` 形参。 这个旗标对于在子进程上使用 " +":func:`os.kill` 来说是必须的。" + +#: ../../library/subprocess.rst:1037 +msgid "This flag is ignored if :data:`CREATE_NEW_CONSOLE` is specified." +msgstr "如果指定了 :data:`CREATE_NEW_CONSOLE` 则这个旗标会被忽略。" + +#: ../../library/subprocess.rst:1041 +msgid "" +"A :class:`Popen` ``creationflags`` parameter to specify that a new process " +"will have an above average priority." +msgstr "用于指明一个新进程将具有高于平均的优先级的 :class:`Popen` ``creationflags`` 形参。" + +#: ../../library/subprocess.rst:1048 +msgid "" +"A :class:`Popen` ``creationflags`` parameter to specify that a new process " +"will have a below average priority." +msgstr "用于指明一个新进程将具有低于平均的优先级的 :class:`Popen` ``creationflags`` 形参。" + +#: ../../library/subprocess.rst:1055 +msgid "" +"A :class:`Popen` ``creationflags`` parameter to specify that a new process " +"will have a high priority." +msgstr "用于指明一个新进程将具有高优先级的 :class:`Popen` ``creationflags`` 形参。" + +#: ../../library/subprocess.rst:1062 +msgid "" +"A :class:`Popen` ``creationflags`` parameter to specify that a new process " +"will have an idle (lowest) priority." +msgstr "用于指明一个新进程将具有空闲(最低)优先级的 :class:`Popen` ``creationflags`` 形参。" + +#: ../../library/subprocess.rst:1069 +msgid "" +"A :class:`Popen` ``creationflags`` parameter to specify that a new process " +"will have an normal priority. (default)" +msgstr "用于指明一个新进程将具有正常(默认)优先级的 :class:`Popen` ``creationflags`` 形参。" + +#: ../../library/subprocess.rst:1076 +msgid "" +"A :class:`Popen` ``creationflags`` parameter to specify that a new process " +"will have realtime priority. You should almost never use " +"REALTIME_PRIORITY_CLASS, because this interrupts system threads that manage " +"mouse input, keyboard input, and background disk flushing. This class can be" +" appropriate for applications that \"talk\" directly to hardware or that " +"perform brief tasks that should have limited interruptions." +msgstr "" +"用于指明一个新进程将具有实时优先级的 :class:`Popen` ``creationflags`` 形参。 你应当几乎永远不使用 " +"REALTIME_PRIORITY_CLASS,因为这会中断管理鼠标输入、键盘输入以及后台磁盘刷新的系统线程。 " +"这个类只适用于直接与硬件“对话”,或者执行短暂任务具有受限中断的应用。" + +#: ../../library/subprocess.rst:1087 +msgid "" +"A :class:`Popen` ``creationflags`` parameter to specify that a new process " +"will not create a window." +msgstr "指明一个新进程将不会创建窗口的 :class:`Popen` ``creationflags`` 形参。" + +#: ../../library/subprocess.rst:1094 +msgid "" +"A :class:`Popen` ``creationflags`` parameter to specify that a new process " +"will not inherit its parent's console. This value cannot be used with " +"CREATE_NEW_CONSOLE." +msgstr "" +"指明一个新进程将不会继承其父控制台的 :class:`Popen` ``creationflags`` 形参。 这个值不能与 " +"CREATE_NEW_CONSOLE 一同使用。" + +#: ../../library/subprocess.rst:1102 +msgid "" +"A :class:`Popen` ``creationflags`` parameter to specify that a new process " +"does not inherit the error mode of the calling process. Instead, the new " +"process gets the default error mode. This feature is particularly useful for" +" multithreaded shell applications that run with hard errors disabled." +msgstr "" +"指明一个新进程不会继承调用方进程的错误模式的 :class:`Popen` ``creationflags`` 形参。 新进程会转为采用默认的错误模式。" +" 这个特性特别适用于运行时禁用硬错误的多线程 shell 应用。" + +#: ../../library/subprocess.rst:1112 +msgid "" +"A :class:`Popen` ``creationflags`` parameter to specify that a new process " +"is not associated with the job." +msgstr "指明一个新进程不会关联到任务的 :class:`Popen` ``creationflags`` 形参。" + +#: ../../library/subprocess.rst:1120 +msgid "Older high-level API" +msgstr "较旧的高阶 API" + +#: ../../library/subprocess.rst:1122 +msgid "" +"Prior to Python 3.5, these three functions comprised the high level API to " +"subprocess. You can now use :func:`run` in many cases, but lots of existing " +"code calls these functions." +msgstr "" +"在 Python 3.5 之前,这三个函数组成了 subprocess 的高阶 API。 现在你可以在许多情况下使用 " +":func:`run`,但有大量现在代码仍会调用这些函数。" + +#: ../../library/subprocess.rst:1129 +msgid "" +"Run the command described by *args*. Wait for command to complete, then " +"return the :attr:`~Popen.returncode` attribute." +msgstr "运行由 *args* 所描述的命令。 等待命令完成,然后返回 :attr:`~Popen.returncode` 属性。" + +#: ../../library/subprocess.rst:1132 ../../library/subprocess.rst:1172 +msgid "" +"Code needing to capture stdout or stderr should use :func:`run` instead::" +msgstr "需要捕获 stdout 或 stderr 的代码应当改用 :func:`run`::" + +#: ../../library/subprocess.rst:1136 ../../library/subprocess.rst:1176 +msgid "To suppress stdout or stderr, supply a value of :data:`DEVNULL`." +msgstr "要屏蔽 stdout 或 stderr,可提供 :data:`DEVNULL` 这个值。" + +#: ../../library/subprocess.rst:1138 ../../library/subprocess.rst:1178 +msgid "" +"The arguments shown above are merely some common ones. The full function " +"signature is the same as that of the :class:`Popen` constructor - this " +"function passes all supplied arguments other than *timeout* directly through" +" to that interface." +msgstr "" +"上面显示的参数只是常见的一些。 完整的函数签名与 :class:`Popen` 构造器的相同 —— 此函数会将所提供的 *timeout* " +"之外的全部参数直接传递给目标接口。" + +#: ../../library/subprocess.rst:1145 ../../library/subprocess.rst:1185 +msgid "" +"Do not use ``stdout=PIPE`` or ``stderr=PIPE`` with this function. The child" +" process will block if it generates enough output to a pipe to fill up the " +"OS pipe buffer as the pipes are not being read from." +msgstr "" +"请不要在此函数中使用 ``stdout=PIPE`` 或 ``stderr=PIPE``。 如果子进程向管道生成了足以填满 OS " +"管理缓冲区的输出而管道还未被读取时它将会阻塞。" + +#: ../../library/subprocess.rst:1165 +msgid "" +"Run command with arguments. Wait for command to complete. If the return " +"code was zero then return, otherwise raise :exc:`CalledProcessError`. The " +":exc:`CalledProcessError` object will have the return code in the " +":attr:`~CalledProcessError.returncode` attribute. If :func:`check_call` was " +"unable to start the process it will propagate the exception that was raised." +msgstr "" +"附带参数运行命令。 等待命令完成。 如果返回码为零则正常返回,否则引发 :exc:`CalledProcessError`。 " +":exc:`CalledProcessError` 对象将在 :attr:`~CalledProcessError.returncode` " +"属性中保存返回码。 如果 :func:`check_call` 无法开始进程则它将传播已被引发的异常。" + +#: ../../library/subprocess.rst:1207 +msgid "Run command with arguments and return its output." +msgstr "附带参数运行命令并返回其输出。" + +#: ../../library/subprocess.rst:1209 +msgid "" +"If the return code was non-zero it raises a :exc:`CalledProcessError`. The " +":exc:`CalledProcessError` object will have the return code in the " +":attr:`~CalledProcessError.returncode` attribute and any output in the " +":attr:`~CalledProcessError.output` attribute." +msgstr "" +"如果返回码非零则会引发 :exc:`CalledProcessError`。 :exc:`CalledProcessError` 对象将在 " +":attr:`~CalledProcessError.returncode` 属性中保存返回码并在 " +":attr:`~CalledProcessError.output` 属性中保存所有输出。" + +#: ../../library/subprocess.rst:1214 +msgid "This is equivalent to::" +msgstr "这相当于:" + +#: ../../library/subprocess.rst:1218 +msgid "" +"The arguments shown above are merely some common ones. The full function " +"signature is largely the same as that of :func:`run` - most arguments are " +"passed directly through to that interface. One API deviation from " +":func:`run` behavior exists: passing ``input=None`` will behave the same as " +"``input=b''`` (or ``input=''``, depending on other arguments) rather than " +"using the parent's standard input file handle." +msgstr "" +"上面显示的参数只是常见的一些。 完整的函数签名与 :func:`run` 的大致相同 —— 大部分参数会通过该接口直接传递。 存在一个与 " +":func:`run` 行为不同的 API 差异:传递 ``input=None`` 的行为将与 ``input=b''`` (或 " +"``input=''``,具体取决于其他参数) 一样而不是使用父对象的标准输入文件处理。" + +#: ../../library/subprocess.rst:1225 +msgid "" +"By default, this function will return the data as encoded bytes. The actual " +"encoding of the output data may depend on the command being invoked, so the " +"decoding to text will often need to be handled at the application level." +msgstr "" +"默认情况下,此函数将把数据返回为已编码的字节串。 输出数据的实际编码格式将取决于唤起的命令,因此解码为文本的操作往往需要在应用程序层级上进行处理。" + +#: ../../library/subprocess.rst:1229 +msgid "" +"This behaviour may be overridden by setting *text*, *encoding*, *errors*, or" +" *universal_newlines* to ``True`` as described in :ref:`frequently-used-" +"arguments` and :func:`run`." +msgstr "" +"此行为可以通过设置 *text*, *encoding*, *errors* 或将 *universal_newlines* 设为 ``True`` " +"来重载,具体描述见 :ref:`frequently-used-arguments` 和 :func:`run`。" + +#: ../../library/subprocess.rst:1233 +msgid "" +"To also capture standard error in the result, use " +"``stderr=subprocess.STDOUT``::" +msgstr "要在结果中同时捕获标准错误,请使用 ``stderr=subprocess.STDOUT``::" + +#: ../../library/subprocess.rst:1247 +msgid "Support for the *input* keyword argument was added." +msgstr "增加了对 *input* 关键字参数的支持。" + +#: ../../library/subprocess.rst:1250 +msgid "*encoding* and *errors* were added. See :func:`run` for details." +msgstr "增加了 *encoding* 和 *errors*。 详情参见 :func:`run`。" + +#: ../../library/subprocess.rst:1268 +msgid "Replacing Older Functions with the :mod:`subprocess` Module" +msgstr "使用 :mod:`subprocess` 模块替换旧函数" + +#: ../../library/subprocess.rst:1270 +msgid "" +"In this section, \"a becomes b\" means that b can be used as a replacement " +"for a." +msgstr "在这一节中,\"a 改为 b\" 意味着 b 可以被用作 a 的替代。" + +#: ../../library/subprocess.rst:1274 +msgid "" +"All \"a\" functions in this section fail (more or less) silently if the " +"executed program cannot be found; the \"b\" replacements raise " +":exc:`OSError` instead." +msgstr "在这一节中的所有 \"a\" 函数会在找不到被执行的程序时(差不多)静默地失败;\"b\" 替代函数则会改为引发 :exc:`OSError`。" + +#: ../../library/subprocess.rst:1278 +msgid "" +"In addition, the replacements using :func:`check_output` will fail with a " +":exc:`CalledProcessError` if the requested operation produces a non-zero " +"return code. The output is still available as the " +":attr:`~CalledProcessError.output` attribute of the raised exception." +msgstr "" +"此外,在使用 :func:`check_output` 时如果替代函数所请求的操作产生了非零返回值则将失败并引发 " +":exc:`CalledProcessError`。 操作的输出仍能以所引发异常的 :attr:`~CalledProcessError.output`" +" 属性的方式被访问。" + +#: ../../library/subprocess.rst:1283 +msgid "" +"In the following examples, we assume that the relevant functions have " +"already been imported from the :mod:`subprocess` module." +msgstr "在下列例子中,我们假定相关的函数都已从 :mod:`subprocess` 模块中导入了。" + +#: ../../library/subprocess.rst:1288 +msgid "Replacing :program:`/bin/sh` shell command substitution" +msgstr "替代 :program:`/bin/sh` shell 命令替换" + +#: ../../library/subprocess.rst:1294 ../../library/subprocess.rst:1305 +#: ../../library/subprocess.rst:1322 +msgid "becomes::" +msgstr "改为::" + +#: ../../library/subprocess.rst:1299 +msgid "Replacing shell pipeline" +msgstr "替代 shell 管道" + +#: ../../library/subprocess.rst:1312 +msgid "" +"The ``p1.stdout.close()`` call after starting the p2 is important in order " +"for p1 to receive a SIGPIPE if p2 exits before p1." +msgstr "" +"启动 p2 之后再执行 ``p1.stdout.close()`` 调用很重要,这是为了让 p1 能在 p2 先于 p1 退出时接收到 SIGPIPE。" + +#: ../../library/subprocess.rst:1315 +msgid "" +"Alternatively, for trusted input, the shell's own pipeline support may still" +" be used directly:" +msgstr "另外,对于受信任的输入,shell 本身的管道支持仍然可被直接使用:" + +#: ../../library/subprocess.rst:1328 +msgid "Replacing :func:`os.system`" +msgstr "替代 :func:`os.system`" + +#: ../../library/subprocess.rst:1336 +msgid "Notes:" +msgstr "注释:" + +#: ../../library/subprocess.rst:1338 +msgid "Calling the program through the shell is usually not required." +msgstr "通过 shell 来调用程序通常是不必要的。" + +#: ../../library/subprocess.rst:1339 +msgid "" +"The :func:`call` return value is encoded differently to that of " +":func:`os.system`." +msgstr ":func:`call` 返回值的编码方式与 :func:`os.system` 的不同。" + +#: ../../library/subprocess.rst:1342 +msgid "" +"The :func:`os.system` function ignores SIGINT and SIGQUIT signals while the " +"command is running, but the caller must do this separately when using the " +":mod:`subprocess` module." +msgstr "" +":func:`os.system` 函数在命令运行期间会忽略 SIGINT 和 SIGQUIT 信号,但调用方必须在使用 " +":mod:`subprocess` 模块时分别执行此操作。" + +#: ../../library/subprocess.rst:1346 +msgid "A more realistic example would look like this::" +msgstr "一个更现实的例子如下所示::" + +#: ../../library/subprocess.rst:1359 +msgid "Replacing the :func:`os.spawn ` family" +msgstr "替代 :func:`os.spawn ` 函数族" + +#: ../../library/subprocess.rst:1361 +msgid "P_NOWAIT example::" +msgstr "P_NOWAIT 示例::" + +#: ../../library/subprocess.rst:1367 +msgid "P_WAIT example::" +msgstr "P_WAIT 示例::" + +#: ../../library/subprocess.rst:1373 +msgid "Vector example::" +msgstr "Vector 示例::" + +#: ../../library/subprocess.rst:1379 +msgid "Environment example::" +msgstr "Environment 示例::" + +#: ../../library/subprocess.rst:1388 +msgid "Replacing :func:`os.popen`, :func:`os.popen2`, :func:`os.popen3`" +msgstr "替代 :func:`os.popen`, :func:`os.popen2`, :func:`os.popen3`" + +#: ../../library/subprocess.rst:1418 +msgid "Return code handling translates as follows::" +msgstr "返回码以如下方式处理转写::" + +#: ../../library/subprocess.rst:1434 +msgid "Replacing functions from the :mod:`popen2` module" +msgstr "来自 :mod:`popen2` 模块的替代函数" + +#: ../../library/subprocess.rst:1438 +msgid "" +"If the cmd argument to popen2 functions is a string, the command is executed" +" through /bin/sh. If it is a list, the command is directly executed." +msgstr "如果 popen2 函数的 cmd 参数是一个字符串,命令会通过 /bin/sh 来执行。 如果是一个列表,命令会被直接执行。" + +#: ../../library/subprocess.rst:1457 +msgid "" +":class:`popen2.Popen3` and :class:`popen2.Popen4` basically work as " +":class:`subprocess.Popen`, except that:" +msgstr "" +":class:`popen2.Popen3` 和 :class:`popen2.Popen4` 基本上类似于 " +":class:`subprocess.Popen`,不同之处在于:" + +#: ../../library/subprocess.rst:1460 +msgid ":class:`Popen` raises an exception if the execution fails." +msgstr ":class:`Popen` 如果执行失败会引发一个异常。" + +#: ../../library/subprocess.rst:1462 +msgid "The *capturestderr* argument is replaced with the *stderr* argument." +msgstr "*capturestderr* 参数被替换为 *stderr* 参数。" + +#: ../../library/subprocess.rst:1464 +msgid "``stdin=PIPE`` and ``stdout=PIPE`` must be specified." +msgstr "必须指定 ``stdin=PIPE`` 和 ``stdout=PIPE``。" + +#: ../../library/subprocess.rst:1466 +msgid "" +"popen2 closes all file descriptors by default, but you have to specify " +"``close_fds=True`` with :class:`Popen` to guarantee this behavior on all " +"platforms or past Python versions." +msgstr "" +"popen2 默认会关闭所有文件描述符,但对于 :class:`Popen` 你必须指明 ``close_fds=True`` 以才能在所有平台或较旧的" +" Python 版本中确保此行为。" + +#: ../../library/subprocess.rst:1472 +msgid "Legacy Shell Invocation Functions" +msgstr "旧式的 Shell 发起函数" + +#: ../../library/subprocess.rst:1474 +msgid "" +"This module also provides the following legacy functions from the 2.x " +"``commands`` module. These operations implicitly invoke the system shell and" +" none of the guarantees described above regarding security and exception " +"handling consistency are valid for these functions." +msgstr "" +"此模块还提供了以下来自 2.x ``commands`` 模块的旧版函数。 这些操作会隐式地唤起系统 shell " +"并且上文所描述的有关安全与异常处理一致性保证都不适用于这些函数。" + +#: ../../library/subprocess.rst:1481 +msgid "Return ``(exitcode, output)`` of executing *cmd* in a shell." +msgstr "返回在 shell 中执行 *cmd* 产生的 ``(exitcode, output)``。" + +#: ../../library/subprocess.rst:1483 +msgid "" +"Execute the string *cmd* in a shell with :meth:`Popen.check_output` and " +"return a 2-tuple ``(exitcode, output)``. The locale encoding is used; see " +"the notes on :ref:`frequently-used-arguments` for more details." +msgstr "" +"在 shell 中以 :meth:`Popen.check_output` 执行字符串 *cmd* 并返回一个 2 元组 ``(exitcode, " +"output)``。 会使用当前区域设置的编码格式;请参阅 :ref:`frequently-used-arguments` 中的说明来了解详情。" + +#: ../../library/subprocess.rst:1487 +msgid "" +"A trailing newline is stripped from the output. The exit code for the " +"command can be interpreted as the return code of subprocess. Example::" +msgstr "末尾的一个换行符会从输出中被去除。 命令的退出码可被解读为子进程的返回码。 例如::" + +#: ../../library/subprocess.rst:1501 ../../library/subprocess.rst:1521 +msgid ":ref:`Availability `: POSIX & Windows." +msgstr ":ref:`可用性 `: POSIX 和 Windows。" + +#: ../../library/subprocess.rst:1502 +msgid "Windows support was added." +msgstr "添加了 Windows 支持。" + +#: ../../library/subprocess.rst:1505 +msgid "" +"The function now returns (exitcode, output) instead of (status, output) as " +"it did in Python 3.3.3 and earlier. exitcode has the same value as " +":attr:`~Popen.returncode`." +msgstr "" +"此函数现在返回 (exitcode, output) 而不是像 Python 3.3.3 及更早的版本那样返回 (status, output)。 " +"exitcode 的值与 :attr:`~Popen.returncode` 相同。" + +#: ../../library/subprocess.rst:1512 +msgid "Return output (stdout and stderr) of executing *cmd* in a shell." +msgstr "返回在 shell 中执行 *cmd* 产生的输出(stdout 和 stderr)。" + +#: ../../library/subprocess.rst:1514 +msgid "" +"Like :func:`getstatusoutput`, except the exit code is ignored and the return" +" value is a string containing the command's output. Example::" +msgstr "类似于 :func:`getstatusoutput`,但退出码会被忽略并且返回值为包含命令输出的字符串。 例如::" + +#: ../../library/subprocess.rst:1522 +msgid "Windows support added" +msgstr "添加了 Windows 支持" + +#: ../../library/subprocess.rst:1527 +msgid "Notes" +msgstr "备注" + +#: ../../library/subprocess.rst:1532 +msgid "Converting an argument sequence to a string on Windows" +msgstr "在 Windows 上将参数列表转换为一个字符串" + +#: ../../library/subprocess.rst:1534 +msgid "" +"On Windows, an *args* sequence is converted to a string that can be parsed " +"using the following rules (which correspond to the rules used by the MS C " +"runtime):" +msgstr "在 Windows 上,*args* 序列会被转换为可使用以下规则来解析的字符串(对应于 MS C 运行时所使用的规则):" + +#: ../../library/subprocess.rst:1538 +msgid "" +"Arguments are delimited by white space, which is either a space or a tab." +msgstr "参数以空白符分隔,即空格符或制表符。" + +#: ../../library/subprocess.rst:1541 +msgid "" +"A string surrounded by double quotation marks is interpreted as a single " +"argument, regardless of white space contained within. A quoted string can " +"be embedded in an argument." +msgstr "用双引号标示的字符串会被解读为单个参数,而不再考虑其中的空白符。 一个参数可以嵌套用引号标示的字符串。" + +#: ../../library/subprocess.rst:1546 +msgid "" +"A double quotation mark preceded by a backslash is interpreted as a literal " +"double quotation mark." +msgstr "带有一个反斜杠前缀的双引号会被解读为双引号字面值。" + +#: ../../library/subprocess.rst:1549 +msgid "" +"Backslashes are interpreted literally, unless they immediately precede a " +"double quotation mark." +msgstr "反斜杠会按字面值解读,除非它是作为双引号的前缀。" + +#: ../../library/subprocess.rst:1552 +msgid "" +"If backslashes immediately precede a double quotation mark, every pair of " +"backslashes is interpreted as a literal backslash. If the number of " +"backslashes is odd, the last backslash escapes the next double quotation " +"mark as described in rule 3." +msgstr "" +"如果反斜杠被作为双引号的前缀,则每个反斜杠对会被解读为一个反斜杠字面值。 如果反斜杠数量为奇数,则最后一个反斜杠会如规则 3 " +"所描述的那样转义下一个双引号。" + +#: ../../library/subprocess.rst:1561 +msgid ":mod:`shlex`" +msgstr ":mod:`shlex`" + +#: ../../library/subprocess.rst:1562 +msgid "Module which provides function to parse and escape command lines." +msgstr "此模块提供了用于解析和转义命令行的函数。" diff --git a/library/sunau.po b/library/sunau.po new file mode 100644 index 000000000..1ef850b99 --- /dev/null +++ b/library/sunau.po @@ -0,0 +1,376 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) 2001-2024, Python Software Foundation +# This file is distributed under the same license as the Python package. +# FIRST AUTHOR , YEAR. +# +# Translators: +# Shengjing Zhu , 2018 +# sunsol s , 2018 +# ppcfish , 2019 +# Freesand Leo , 2022 +# Rafael Fontenelle , 2024 +# +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: Python 3.9\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2024-02-16 21:12+0000\n" +"PO-Revision-Date: 2017-02-16 23:28+0000\n" +"Last-Translator: Rafael Fontenelle , 2024\n" +"Language-Team: Chinese (China) (https://app.transifex.com/python-doc/teams/5390/zh_CN/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: zh_CN\n" +"Plural-Forms: nplurals=1; plural=0;\n" + +#: ../../library/sunau.rst:2 +msgid ":mod:`sunau` --- Read and write Sun AU files" +msgstr ":mod:`sunau` --- 读写 Sun AU 文件" + +#: ../../library/sunau.rst:10 +msgid "**Source code:** :source:`Lib/sunau.py`" +msgstr "**源代码:** :source:`Lib/sunau.py`" + +#: ../../library/sunau.rst:12 +msgid "" +"The :mod:`sunau` module is deprecated (see :pep:`PEP 594 <594#sunau>` for " +"details)." +msgstr ":mod:`sunau` 模块已被弃用(请参阅 :pep:`PEP 594 <594#sunau>` 了解详情)。" + +#: ../../library/sunau.rst:18 +msgid "" +"The :mod:`sunau` module provides a convenient interface to the Sun AU sound " +"format. Note that this module is interface-compatible with the modules " +":mod:`aifc` and :mod:`wave`." +msgstr "" +":mod:`sunau` 模拟提供了一个处理 Sun AU 声音格式的便利接口。请注意此模块与 :mod:`aifc` 和 :mod:`wave` " +"是兼容接口的。" + +#: ../../library/sunau.rst:22 +msgid "" +"An audio file consists of a header followed by the data. The fields of the " +"header are:" +msgstr "音频文件由标头和数据组成。标头的字段为:" + +#: ../../library/sunau.rst:26 +msgid "Field" +msgstr "域" + +#: ../../library/sunau.rst:26 +msgid "Contents" +msgstr "目录" + +#: ../../library/sunau.rst:28 +msgid "magic word" +msgstr "magic word" + +#: ../../library/sunau.rst:28 +msgid "The four bytes ``.snd``." +msgstr "四个字节 ``.snd``" + +#: ../../library/sunau.rst:30 +msgid "header size" +msgstr "header size" + +#: ../../library/sunau.rst:30 +msgid "Size of the header, including info, in bytes." +msgstr "标头的大小,包括信息,以字节为单位。" + +#: ../../library/sunau.rst:32 +msgid "data size" +msgstr "data size" + +#: ../../library/sunau.rst:32 +msgid "Physical size of the data, in bytes." +msgstr "数据的物理大小,以字节为单位。" + +#: ../../library/sunau.rst:34 +msgid "encoding" +msgstr "encoding" + +#: ../../library/sunau.rst:34 +msgid "Indicates how the audio samples are encoded." +msgstr "指示音频样本的编码方式。" + +#: ../../library/sunau.rst:36 +msgid "sample rate" +msgstr "sample rate" + +#: ../../library/sunau.rst:36 +msgid "The sampling rate." +msgstr "采样率" + +#: ../../library/sunau.rst:38 +msgid "# of channels" +msgstr "# of channels" + +#: ../../library/sunau.rst:38 +msgid "The number of channels in the samples." +msgstr "采样中的通道数。" + +#: ../../library/sunau.rst:40 +msgid "info" +msgstr "info" + +#: ../../library/sunau.rst:40 +msgid "" +"ASCII string giving a description of the audio file (padded with null " +"bytes)." +msgstr "提供音频文件描述的ASCII字符串(用空字节填充)。" + +#: ../../library/sunau.rst:44 +msgid "" +"Apart from the info field, all header fields are 4 bytes in size. They are " +"all 32-bit unsigned integers encoded in big-endian byte order." +msgstr "除了 info 字段,所有标头字段的大小都是 4 字节。 它们都是采用大端字节序编码的 32 位无符号整数。" + +#: ../../library/sunau.rst:47 +msgid "The :mod:`sunau` module defines the following functions:" +msgstr ":mod:`sunau` 模块定义了以下函数:" + +#: ../../library/sunau.rst:52 +msgid "" +"If *file* is a string, open the file by that name, otherwise treat it as a " +"seekable file-like object. *mode* can be any of" +msgstr "如果 *file* 是一个字符串,打开相应名称的文件,否则就把它作为可定位的文件型对象来处理。 *mode* 可以是" + +#: ../../library/sunau.rst:56 +msgid "``'r'``" +msgstr "``'r'``" + +#: ../../library/sunau.rst:56 +msgid "Read only mode." +msgstr "只读模式。" + +#: ../../library/sunau.rst:59 +msgid "``'w'``" +msgstr "``'w'``" + +#: ../../library/sunau.rst:59 +msgid "Write only mode." +msgstr "只写模式。" + +#: ../../library/sunau.rst:61 +msgid "Note that it does not allow read/write files." +msgstr "注意它不支持同时读/写文件。" + +#: ../../library/sunau.rst:63 +msgid "" +"A *mode* of ``'r'`` returns an :class:`AU_read` object, while a *mode* of " +"``'w'`` or ``'wb'`` returns an :class:`AU_write` object." +msgstr "" +"*mode* 为 ``'r'`` 时返回一个 :class:`AU_read` 对象,而 *mode* 为 ``'w'`` 或 ``'wb'`` " +"时返回一个 :class:`AU_write` 对象。" + +#: ../../library/sunau.rst:67 +msgid "The :mod:`sunau` module defines the following exception:" +msgstr ":mod:`sunau` 模块定义了以下异常:" + +#: ../../library/sunau.rst:71 +msgid "" +"An error raised when something is impossible because of Sun AU specs or " +"implementation deficiency." +msgstr "当 Sun AU 规范或实现的低效导致无法操作时引发的错误。" + +#: ../../library/sunau.rst:75 +msgid "The :mod:`sunau` module defines the following data items:" +msgstr ":mod:`sunau` 模块定义了以下数据条目:" + +#: ../../library/sunau.rst:79 +msgid "" +"An integer every valid Sun AU file begins with, stored in big-endian form. " +"This is the string ``.snd`` interpreted as an integer." +msgstr "位于每个有效的 Sun AU 文件开头的整数,以大端序形式存储。 这是一个被当作整数来解读的字符串 ``.snd``。" + +#: ../../library/sunau.rst:90 +msgid "" +"Values of the encoding field from the AU header which are supported by this " +"module." +msgstr "AU 标头中被此模块所支持的 encoding 字段值。" + +#: ../../library/sunau.rst:101 +msgid "" +"Additional known values of the encoding field from the AU header, but which " +"are not supported by this module." +msgstr "AU 标头中附加的已知但不被此模块所支持的 encoding 字段值。" + +#: ../../library/sunau.rst:108 +msgid "AU_read Objects" +msgstr "AU_read 对象" + +#: ../../library/sunau.rst:110 +msgid "" +"AU_read objects, as returned by :func:`.open` above, have the following " +"methods:" +msgstr "由上面的 :func:`.open` 所返回的 AU_read 对象具有以下几种方法:" + +#: ../../library/sunau.rst:115 +msgid "" +"Close the stream, and make the instance unusable. (This is called " +"automatically on deletion.)" +msgstr "关闭流,并使实例不可用。 (此方法会在删除对象时自动调用。)" + +#: ../../library/sunau.rst:121 +msgid "Returns number of audio channels (1 for mono, 2 for stereo)." +msgstr "返回音频的通道数(单声道为 1,立体声为 2)。" + +#: ../../library/sunau.rst:126 +msgid "Returns sample width in bytes." +msgstr "返回采样字节长度。" + +#: ../../library/sunau.rst:131 +msgid "Returns sampling frequency." +msgstr "返回采样频率。" + +#: ../../library/sunau.rst:136 +msgid "Returns number of audio frames." +msgstr "返回音频总帧数。" + +#: ../../library/sunau.rst:141 +msgid "" +"Returns compression type. Supported compression types are ``'ULAW'``, " +"``'ALAW'`` and ``'NONE'``." +msgstr "返回压缩类型。 受支持的压缩类型有 ``'ULAW'``, ``'ALAW'`` 和 ``'NONE'``。" + +#: ../../library/sunau.rst:147 +msgid "" +"Human-readable version of :meth:`getcomptype`. The supported types have the" +" respective names ``'CCITT G.711 u-law'``, ``'CCITT G.711 A-law'`` and " +"``'not compressed'``." +msgstr "" +":meth:`getcomptype` 的人类可读的版本。 受支持的类型将为相应的名称 ``'CCITT G.711 u-law'``, " +"``'CCITT G.711 A-law'`` 和 ``'not compressed'``。" + +#: ../../library/sunau.rst:154 +msgid "" +"Returns a :func:`~collections.namedtuple` ``(nchannels, sampwidth, " +"framerate, nframes, comptype, compname)``, equivalent to output of the " +":meth:`get\\*` methods." +msgstr "" +"返回一个 :func:`~collections.namedtuple` ``(nchannels, sampwidth, framerate, " +"nframes, comptype, compname)``,与 :meth:`get\\*` 方法的输出相同。" + +#: ../../library/sunau.rst:161 +msgid "" +"Reads and returns at most *n* frames of audio, as a :class:`bytes` object. " +"The data will be returned in linear format. If the original data is in " +"u-LAW format, it will be converted." +msgstr "" +"读取至多 *n* 帧音频并作为 :class:`bytes` 对象返回。 数据将以线性格式返回。 如果原始数据为 u-LAW 格式,则它将被转换。" + +#: ../../library/sunau.rst:168 +msgid "Rewind the file pointer to the beginning of the audio stream." +msgstr "重置文件指针至音频开头." + +#: ../../library/sunau.rst:170 +msgid "" +"The following two methods define a term \"position\" which is compatible " +"between them, and is otherwise implementation dependent." +msgstr "以下两个方法都使用指针,具体实现由其底层决定。" + +#: ../../library/sunau.rst:176 +msgid "" +"Set the file pointer to the specified position. Only values returned from " +":meth:`tell` should be used for *pos*." +msgstr "设置文件指针到特定位置。 只有从 :meth:`tell` 返回的值才可被用作 *pos*。" + +#: ../../library/sunau.rst:182 +msgid "" +"Return current file pointer position. Note that the returned value has " +"nothing to do with the actual position in the file." +msgstr "返回当前文件指针的位置。 请注意该返回值与文件中的实例位置无关。" + +#: ../../library/sunau.rst:185 +msgid "" +"The following two functions are defined for compatibility with the " +":mod:`aifc`, and don't do anything interesting." +msgstr "以下两个函数是为了与 :mod:`aifc` 保持兼容而定义的,实际不做任何事情。" + +#: ../../library/sunau.rst:191 +msgid "Returns ``None``." +msgstr "返回 ``None``。" + +#: ../../library/sunau.rst:196 +msgid "Raise an error." +msgstr "引发错误异常。" + +#: ../../library/sunau.rst:202 +msgid "AU_write Objects" +msgstr "AU_write 对象" + +#: ../../library/sunau.rst:204 +msgid "" +"AU_write objects, as returned by :func:`.open` above, have the following " +"methods:" +msgstr "由上面的 :func:`.open` 所返回的 AU_write 对象具有以下几种方法:" + +#: ../../library/sunau.rst:209 +msgid "Set the number of channels." +msgstr "设置声道数。" + +#: ../../library/sunau.rst:214 +msgid "Set the sample width (in bytes.)" +msgstr "设置采样宽度(字节长度。)" + +#: ../../library/sunau.rst:216 +msgid "Added support for 24-bit samples." +msgstr "增加了对 24 位采样的支持。" + +#: ../../library/sunau.rst:222 +msgid "Set the frame rate." +msgstr "设置帧速率。" + +#: ../../library/sunau.rst:227 +msgid "" +"Set the number of frames. This can be later changed, when and if more " +"frames are written." +msgstr "设置总帧数。 如果写入了更多的帧,此值将会被更改。" + +#: ../../library/sunau.rst:233 +msgid "" +"Set the compression type and description. Only ``'NONE'`` and ``'ULAW'`` are" +" supported on output." +msgstr "设置压缩类型和描述。 对于输出只支持 ``'NONE'`` 和 ``'ULAW'``。" + +#: ../../library/sunau.rst:239 +msgid "" +"The *tuple* should be ``(nchannels, sampwidth, framerate, nframes, comptype," +" compname)``, with values valid for the :meth:`set\\*` methods. Set all " +"parameters." +msgstr "" +"*tuple* 应该是 ``(nchannels, sampwidth, framerate, nframes, comptype, " +"compname)``,每项的值可用于 :meth:`set\\*` 方法。 设置所有形参。" + +#: ../../library/sunau.rst:246 +msgid "" +"Return current position in the file, with the same disclaimer for the " +":meth:`AU_read.tell` and :meth:`AU_read.setpos` methods." +msgstr "返回文件中的当前位置,其含义与 :meth:`AU_read.tell` 和 :meth:`AU_read.setpos` 方法的一致。" + +#: ../../library/sunau.rst:252 +msgid "Write audio frames, without correcting *nframes*." +msgstr "写入音频数据但不更新 *nframes*。" + +#: ../../library/sunau.rst:254 ../../library/sunau.rst:262 +msgid "Any :term:`bytes-like object` is now accepted." +msgstr "现在可接受任意 :term:`bytes-like object`。" + +#: ../../library/sunau.rst:260 +msgid "Write audio frames and make sure *nframes* is correct." +msgstr "写入音频数据并更新 *nframes*。" + +#: ../../library/sunau.rst:268 +msgid "Make sure *nframes* is correct, and close the file." +msgstr "确保 *nframes* 正确,并关闭文件。" + +#: ../../library/sunau.rst:270 +msgid "This method is called upon deletion." +msgstr "此方法会在删除时被调用。" + +#: ../../library/sunau.rst:272 +msgid "" +"Note that it is invalid to set any parameters after calling " +":meth:`writeframes` or :meth:`writeframesraw`." +msgstr "请注意在调用 :meth:`writeframes` 和 :meth:`writeframesraw` 之后再设置任何形参都是无效的。" diff --git a/library/superseded.po b/library/superseded.po new file mode 100644 index 000000000..4c20e41e0 --- /dev/null +++ b/library/superseded.po @@ -0,0 +1,32 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) 2001-2022, Python Software Foundation +# This file is distributed under the same license as the Python package. +# FIRST AUTHOR , YEAR. +# +# Translators: +# Freesand Leo , 2019 +# +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: Python 3.9\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2022-11-04 14:34+0000\n" +"PO-Revision-Date: 2017-02-16 23:28+0000\n" +"Last-Translator: Freesand Leo , 2019\n" +"Language-Team: Chinese (China) (https://www.transifex.com/python-doc/teams/5390/zh_CN/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: zh_CN\n" +"Plural-Forms: nplurals=1; plural=0;\n" + +#: ../../library/superseded.rst:5 +msgid "Superseded Modules" +msgstr "被取代的模块" + +#: ../../library/superseded.rst:7 +msgid "" +"The modules described in this chapter are deprecated and only kept for " +"backwards compatibility. They have been superseded by other modules." +msgstr "本章中描述的模块均已弃用,仅保留用于向后兼容。 它们已经被其他模块所取代。" diff --git a/library/symbol.po b/library/symbol.po new file mode 100644 index 000000000..de33aca7a --- /dev/null +++ b/library/symbol.po @@ -0,0 +1,61 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) 2001-2022, Python Software Foundation +# This file is distributed under the same license as the Python package. +# FIRST AUTHOR , YEAR. +# +# Translators: +# Alpha Du , 2019 +# Freesand Leo , 2020 +# +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: Python 3.9\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2022-11-04 14:34+0000\n" +"PO-Revision-Date: 2017-02-16 23:28+0000\n" +"Last-Translator: Freesand Leo , 2020\n" +"Language-Team: Chinese (China) (https://www.transifex.com/python-doc/teams/5390/zh_CN/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: zh_CN\n" +"Plural-Forms: nplurals=1; plural=0;\n" + +#: ../../library/symbol.rst:2 +msgid ":mod:`symbol` --- Constants used with Python parse trees" +msgstr ":mod:`symbol` --- 与 Python 解析树一起使用的常量" + +#: ../../library/symbol.rst:9 +msgid "**Source code:** :source:`Lib/symbol.py`" +msgstr "**源代码:** :source:`Lib/symbol.py`" + +#: ../../library/symbol.rst:13 +msgid "" +"This module provides constants which represent the numeric values of " +"internal nodes of the parse tree. Unlike most Python constants, these use " +"lower-case names. Refer to the file :file:`Grammar/Grammar` in the Python " +"distribution for the definitions of the names in the context of the language" +" grammar. The specific numeric values which the names map to may change " +"between Python versions." +msgstr "" +"此模块提供用于表示解析树内部节点数值的常量。 与大多数 Python 不同,这些常量使用小写字符名称。 请参阅 Python 发行版中的 " +":file:`Grammar/Grammar` 文件来获取该语言语法上下文中对这些名称的定义。 这些名称所映射的特定数字值可能会在 Python " +"版本之间更改。" + +#: ../../library/symbol.rst:22 +msgid "" +"The symbol module is deprecated and will be removed in future versions of " +"Python." +msgstr "symbol 模块已弃用并将在未来的 Python 版本中被移除。" + +#: ../../library/symbol.rst:25 +msgid "This module also provides one additional data object:" +msgstr "此模块还提供了一个额外的数据对象:" + +#: ../../library/symbol.rst:30 +msgid "" +"Dictionary mapping the numeric values of the constants defined in this " +"module back to name strings, allowing more human-readable representation of " +"parse trees to be generated." +msgstr "将此模块中定义的常量的数值映射回名称字符串的字典,允许生成更加人类可读的解析树表示。" diff --git a/library/symtable.po b/library/symtable.po new file mode 100644 index 000000000..fd683eb92 --- /dev/null +++ b/library/symtable.po @@ -0,0 +1,236 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) 2001-2022, Python Software Foundation +# This file is distributed under the same license as the Python package. +# FIRST AUTHOR , YEAR. +# +# Translators: +# ww song , 2018 +# Freesand Leo , 2021 +# Dai Xu , 2021 +# +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: Python 3.9\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2022-11-04 14:34+0000\n" +"PO-Revision-Date: 2017-02-16 23:29+0000\n" +"Last-Translator: Dai Xu , 2021\n" +"Language-Team: Chinese (China) (https://www.transifex.com/python-doc/teams/5390/zh_CN/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: zh_CN\n" +"Plural-Forms: nplurals=1; plural=0;\n" + +#: ../../library/symtable.rst:2 +msgid ":mod:`symtable` --- Access to the compiler's symbol tables" +msgstr ":mod:`symtable` ——访问编译器的符号表" + +#: ../../library/symtable.rst:7 +msgid "**Source code:** :source:`Lib/symtable.py`" +msgstr "**Source code:** :source:`Lib/symtable.py`" + +#: ../../library/symtable.rst:15 +msgid "" +"Symbol tables are generated by the compiler from AST just before bytecode is" +" generated. The symbol table is responsible for calculating the scope of " +"every identifier in the code. :mod:`symtable` provides an interface to " +"examine these tables." +msgstr "" +"符号表由编译器在生成字节码之前根据 AST 生成。符号表负责计算代码中每个标识符的作用域。 :mod:`symtable` 提供了一个查看这些表的接口。" + +#: ../../library/symtable.rst:22 +msgid "Generating Symbol Tables" +msgstr "符号表的生成" + +#: ../../library/symtable.rst:26 +msgid "" +"Return the toplevel :class:`SymbolTable` for the Python source *code*. " +"*filename* is the name of the file containing the code. *compile_type* is " +"like the *mode* argument to :func:`compile`." +msgstr "" +"返回 Python 源 *代码* 顶层的 :class:`SymbolTable`。*filename* 是代码文件名。 *compile_type* " +"的含义类似 :func:`compile` 的 *mode* 参数。" + +#: ../../library/symtable.rst:32 +msgid "Examining Symbol Tables" +msgstr "符号表的查看" + +#: ../../library/symtable.rst:36 +msgid "A namespace table for a block. The constructor is not public." +msgstr "某个代码块的命名空间表。构造函数不公开。" + +#: ../../library/symtable.rst:40 +msgid "" +"Return the type of the symbol table. Possible values are ``'class'``, " +"``'module'``, and ``'function'``." +msgstr "返回符号表的类型。可能是 ``'class'`` 、``'module'`` 或 ``'function'``。" + +#: ../../library/symtable.rst:45 +msgid "Return the table's identifier." +msgstr "返回符号表的标识符" + +#: ../../library/symtable.rst:49 +msgid "" +"Return the table's name. This is the name of the class if the table is for " +"a class, the name of the function if the table is for a function, or " +"``'top'`` if the table is global (:meth:`get_type` returns ``'module'``)." +msgstr "" +"返回符号表的名称。 若为类的符号表则返回类名;若为函数的符号表则为函数名;若是全局符号表则为 ``'top'`` (:meth:`get_type` " +"返回 ``'module'``)。" + +#: ../../library/symtable.rst:55 +msgid "" +"Return the number of the first line in the block this table represents." +msgstr "返回符号表所代表的代码块中第一行的编号。" + +#: ../../library/symtable.rst:59 +msgid "Return ``True`` if the locals in this table can be optimized." +msgstr "如果符号表中的局部变量可能被优化过,则返回 ``True``。" + +#: ../../library/symtable.rst:63 +msgid "Return ``True`` if the block is a nested class or function." +msgstr "如果代码块是嵌套类或函数,则返回 ``True``。" + +#: ../../library/symtable.rst:67 +msgid "" +"Return ``True`` if the block has nested namespaces within it. These can be " +"obtained with :meth:`get_children`." +msgstr "如果代码块中有嵌套的命名空间,则返回 ``True``。可通过 :meth:`get_children` 读取。" + +#: ../../library/symtable.rst:72 +msgid "Return a list of names of symbols in this table." +msgstr "返回符号表中的符号名列表。" + +#: ../../library/symtable.rst:76 +msgid "Lookup *name* in the table and return a :class:`Symbol` instance." +msgstr "在符号表中查找 *name* 并返回一个 :class:`Symbol` 实例。" + +#: ../../library/symtable.rst:80 +msgid "Return a list of :class:`Symbol` instances for names in the table." +msgstr "返回符号表中所有符号的 :class:`Symbol` 实例的列表。" + +#: ../../library/symtable.rst:84 +msgid "Return a list of the nested symbol tables." +msgstr "返回嵌套符号表的列表。" + +#: ../../library/symtable.rst:89 +msgid "" +"A namespace for a function or method. This class inherits " +":class:`SymbolTable`." +msgstr "函数或方法的命名空间。该类继承自 :class:`SymbolTable`。" + +#: ../../library/symtable.rst:94 +msgid "Return a tuple containing names of parameters to this function." +msgstr "返回由函数的参数名组成的元组。" + +#: ../../library/symtable.rst:98 +msgid "Return a tuple containing names of locals in this function." +msgstr "返回函数中局部变量名组成的元组。" + +#: ../../library/symtable.rst:102 +msgid "Return a tuple containing names of globals in this function." +msgstr "返回函数中全局变量名组成的元组。" + +#: ../../library/symtable.rst:106 +msgid "Return a tuple containing names of nonlocals in this function." +msgstr "返回函数中非局部变量名组成的元组。" + +#: ../../library/symtable.rst:110 +msgid "Return a tuple containing names of free variables in this function." +msgstr "返回函数中自由变量名组成的元组。" + +#: ../../library/symtable.rst:115 +msgid "A namespace of a class. This class inherits :class:`SymbolTable`." +msgstr "类的命名空间。继承自 :class:`SymbolTable`。" + +#: ../../library/symtable.rst:119 +msgid "Return a tuple containing the names of methods declared in the class." +msgstr "返回类中声明的方法名组成的元组。" + +#: ../../library/symtable.rst:124 +msgid "" +"An entry in a :class:`SymbolTable` corresponding to an identifier in the " +"source. The constructor is not public." +msgstr ":class:`SymbolTable` 中的数据项,对应于源码中的某个标识符。构造函数不公开。" + +#: ../../library/symtable.rst:129 +msgid "Return the symbol's name." +msgstr "返回符号名" + +#: ../../library/symtable.rst:133 +msgid "Return ``True`` if the symbol is used in its block." +msgstr "如果符号在代码块中被引用了,则返回 ``True``。" + +#: ../../library/symtable.rst:137 +msgid "Return ``True`` if the symbol is created from an import statement." +msgstr "如果符号是由导入语句创建的,则返回 ``True``。" + +#: ../../library/symtable.rst:141 +msgid "Return ``True`` if the symbol is a parameter." +msgstr "如果符号是参数,返回 ``True``。" + +#: ../../library/symtable.rst:145 +msgid "Return ``True`` if the symbol is global." +msgstr "如果符号是全局变量,则返回 ``True``。" + +#: ../../library/symtable.rst:149 +msgid "Return ``True`` if the symbol is nonlocal." +msgstr "如果符号为非局部变量,则返回 ``True``。" + +#: ../../library/symtable.rst:153 +msgid "" +"Return ``True`` if the symbol is declared global with a global statement." +msgstr "如果符号用 global 声明为全局变量,则返回 ``True``。" + +#: ../../library/symtable.rst:157 +msgid "Return ``True`` if the symbol is local to its block." +msgstr "如果符号在代码块内是局部变量,则返回 ``True``。" + +#: ../../library/symtable.rst:161 +msgid "Return ``True`` if the symbol is annotated." +msgstr "如果符号带有注解,则返回 ``True``。" + +#: ../../library/symtable.rst:167 +msgid "" +"Return ``True`` if the symbol is referenced in its block, but not assigned " +"to." +msgstr "如果符号在代码块中被引用,但未赋值,则返回 ``True``。" + +#: ../../library/symtable.rst:172 +msgid "Return ``True`` if the symbol is assigned to in its block." +msgstr "如果符号在代码块中赋值,则返回 ``True``。" + +#: ../../library/symtable.rst:176 +msgid "Return ``True`` if name binding introduces new namespace." +msgstr "如果符号名绑定引入了新的命名空间,则返回 ``True``。" + +#: ../../library/symtable.rst:178 +msgid "" +"If the name is used as the target of a function or class statement, this " +"will be true." +msgstr "如果符号名用于 function 或 class 语句,则为 True。" + +#: ../../library/symtable.rst:181 +msgid "For example::" +msgstr "例如::" + +#: ../../library/symtable.rst:187 +msgid "" +"Note that a single name can be bound to multiple objects. If the result is " +"``True``, the name may also be bound to other objects, like an int or list, " +"that does not introduce a new namespace." +msgstr "" +"注意,一个符号名可以与多个对象绑定。如果结果为 ``True``,则该符号名还可以绑定到其他对象上,比如 int 或 list " +",且不会引入新的命名空间。" + +#: ../../library/symtable.rst:193 +msgid "Return a list of namespaces bound to this name." +msgstr "返回与符号名绑定的命名空间的列表。" + +#: ../../library/symtable.rst:197 +msgid "" +"Return the namespace bound to this name. If more than one namespace is " +"bound, :exc:`ValueError` is raised." +msgstr "返回与符号名绑定的命名空间。如果绑定的命名空间超过一个,则会触发 :exc:`ValueError`。" diff --git a/library/sys.po b/library/sys.po new file mode 100644 index 000000000..bcd135582 --- /dev/null +++ b/library/sys.po @@ -0,0 +1,2789 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) 2001-2024, Python Software Foundation +# This file is distributed under the same license as the Python package. +# FIRST AUTHOR , YEAR. +# +# Translators: +# Trim21 , 2019 +# Shengjing Zhu , 2019 +# cdarlint , 2019 +# nick <2330458484@qq.com>, 2019 +# ww song , 2019 +# ppcfish , 2019 +# 1lin24 <1lin24@sina.com>, 2020 +# Sean Chao , 2020 +# Arisaka97 , 2020 +# Alpha Du , 2022 +# Freesand Leo , 2023 +# Rafael Fontenelle , 2024 +# +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: Python 3.9\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2024-11-12 10:57+0000\n" +"PO-Revision-Date: 2017-02-16 23:29+0000\n" +"Last-Translator: Rafael Fontenelle , 2024\n" +"Language-Team: Chinese (China) (https://app.transifex.com/python-doc/teams/5390/zh_CN/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: zh_CN\n" +"Plural-Forms: nplurals=1; plural=0;\n" + +#: ../../library/sys.rst:2 +msgid ":mod:`sys` --- System-specific parameters and functions" +msgstr ":mod:`sys` --- 系统相关的形参和函数" + +#: ../../library/sys.rst:9 +msgid "" +"This module provides access to some variables used or maintained by the " +"interpreter and to functions that interact strongly with the interpreter. It" +" is always available." +msgstr "该模块提供了一些变量和函数。这些变量可能被解释器使用,也可能由解释器提供。这些函数会影响解释器。本模块总是可用的。" + +#: ../../library/sys.rst:16 +msgid "" +"On POSIX systems where Python was built with the standard ``configure`` " +"script, this contains the ABI flags as specified by :pep:`3149`." +msgstr "" +"在POSIX系统上,以标准的 ``configure`` 脚本构建的 Python 中,这个变量会包含 :pep:`3149` 中定义的ABI标签。" + +#: ../../library/sys.rst:19 +msgid "" +"Default flags became an empty string (``m`` flag for pymalloc has been " +"removed)." +msgstr "默认的 flags 变为了空字符串(用于 pymalloc 的 ``m`` 旗标已经移除)" + +#: ../../library/sys.rst:28 +msgid "" +"Append the callable *hook* to the list of active auditing hooks for the " +"current (sub)interpreter." +msgstr "将可调用的对象 *hook* 附加到当前(子)解释器的活动的审计钩子列表中。" + +#: ../../library/sys.rst:31 +msgid "" +"When an auditing event is raised through the :func:`sys.audit` function, " +"each hook will be called in the order it was added with the event name and " +"the tuple of arguments. Native hooks added by :c:func:`PySys_AddAuditHook` " +"are called first, followed by hooks added in the current (sub)interpreter. " +"Hooks can then log the event, raise an exception to abort the operation, or " +"terminate the process entirely." +msgstr "" +"当通过 :func:`sys.audit` 函数引发审计事件时,每个钩子将按照其被加入的先后顺序被调用,调用时会传入事件名称和参数元组。 由 " +":c:func:`PySys_AddAuditHook` 添加的原生钩子会先被调用,然后是当前(子)解释器中添加的钩子。 " +"接下来这些钩子会记录事件,引发异常来中止操作,或是完全终止进程。" + +#: ../../library/sys.rst:40 +msgid "" +"Calling :func:`sys.addaudithook` will itself raise an auditing event named " +"``sys.addaudithook`` with no arguments. If any existing hooks raise an " +"exception derived from :class:`RuntimeError`, the new hook will not be added" +" and the exception suppressed. As a result, callers cannot assume that their" +" hook has been added unless they control all existing hooks." +msgstr "" +"调用 :func:`sys.addaudithook` 时它自身将引发一个名为 ``sys.addaudithook`` 的审计事件且不附带参数。 " +"如果任何现有的钩子引发了派生自 :class:`RuntimeError` 的异常,则新的钩子不会被添加并且该异常会被抑制。 " +"其结果就是,调用者无法确保他们的钩子已经被添加,除非他们控制了全部现有的钩子。" + +#: ../../library/sys.rst:47 +msgid "" +"See the :ref:`audit events table ` for all events raised by " +"CPython, and :pep:`578` for the original design discussion." +msgstr "" +"请参阅 :ref:`审计事件表 ` 以获取由 CPython 引发的所有事件,并参阅 :pep:`578` " +"了解最初的设计讨论。" + +#: ../../library/sys.rst:54 +msgid "" +"Exceptions derived from :class:`Exception` but not :class:`RuntimeError` are" +" no longer suppressed." +msgstr "派生自 :class:`Exception` (而非 :class:`RuntimeError` )的异常不会被抑制。" + +#: ../../library/sys.rst:59 +msgid "" +"When tracing is enabled (see :func:`settrace`), Python hooks are only traced" +" if the callable has a ``__cantrace__`` member that is set to a true value. " +"Otherwise, trace functions will skip the hook." +msgstr "" +"启用跟踪时(参阅 :func:`settrace` ),仅当可调用对象(钩子)的 ``__cantrace__`` 成员设置为 true " +"时,才会跟踪该钩子。否则,跟踪功能将跳过该钩子。" + +#: ../../library/sys.rst:66 +msgid "" +"The list of command line arguments passed to a Python script. ``argv[0]`` is" +" the script name (it is operating system dependent whether this is a full " +"pathname or not). If the command was executed using the :option:`-c` " +"command line option to the interpreter, ``argv[0]`` is set to the string " +"``'-c'``. If no script name was passed to the Python interpreter, " +"``argv[0]`` is the empty string." +msgstr "" +"一个列表,其中包含了被传递给 Python 脚本的命令行参数。 ``argv[0]`` 为脚本的名称(是否是完整的路径名取决于操作系统)。如果是通过 " +"Python 解释器的命令行参数 :option:`-c` 来执行的, ``argv[0]`` 会被设置成字符串 ``'-c'`` " +"。如果没有脚本名被传递给 Python 解释器, ``argv[0]`` 为空字符串。" + +#: ../../library/sys.rst:72 +msgid "" +"To loop over the standard input, or the list of files given on the command " +"line, see the :mod:`fileinput` module." +msgstr "为了遍历标准输入,或者通过命令行传递的文件列表,参照 :mod:`fileinput` 模块" + +#: ../../library/sys.rst:76 +msgid "" +"On Unix, command line arguments are passed by bytes from OS. Python decodes" +" them with filesystem encoding and \"surrogateescape\" error handler. When " +"you need original bytes, you can get it by ``[os.fsencode(arg) for arg in " +"sys.argv]``." +msgstr "" +"在 Unix 上,系统传递的命令行参数是字节类型的。Python 使用文件系统编码和 \"surrogateescape\" " +"错误处理方案对它们进行解码。当需要原始字节时,可以通过 ``[os.fsencode(arg) for arg in sys.argv]`` 来获取。" + +#: ../../library/sys.rst:88 +msgid "" +"Raise an auditing event and trigger any active auditing hooks. *event* is a " +"string identifying the event, and *args* may contain optional arguments with" +" more information about the event. The number and types of arguments for a " +"given event are considered a public and stable API and should not be " +"modified between releases." +msgstr "" +"引发一个审计事件并触发任何激活的审计钩子。 *event* 是一个用于标识事件的字符串,*args* 会包含有关事件的更多信息的可选参数。 " +"特定事件的参数的数量和类型会被视为是公有的稳定 API 且不应当在版本之间进行修改。" + +#: ../../library/sys.rst:94 +msgid "" +"For example, one auditing event is named ``os.chdir``. This event has one " +"argument called *path* that will contain the requested new working " +"directory." +msgstr "例如,有一个审计事件的名称为 ``os.chdir``。 此事件具有一个名为 *path* 的参数,该参数将包含所请求的新工作目录。" + +#: ../../library/sys.rst:98 +msgid "" +":func:`sys.audit` will call the existing auditing hooks, passing the event " +"name and arguments, and will re-raise the first exception from any hook. In " +"general, if an exception is raised, it should not be handled and the process" +" should be terminated as quickly as possible. This allows hook " +"implementations to decide how to respond to particular events: they can " +"merely log the event or abort the operation by raising an exception." +msgstr "" +":func:`sys.audit` 将调用现有的审计钩子,传入事件名称和参数,并将重新引发来自任何钩子的第一个异常。 " +"通常来说,如果有一个异常被引发,则它不应当被处理且其进程应当被尽可能快地终止。 " +"这将允许钩子实现来决定对特定事件要如何反应:它们可以只是将事件写入日志或是通过引发异常来中止操作。" + +#: ../../library/sys.rst:106 +msgid "" +"Hooks are added using the :func:`sys.addaudithook` or " +":c:func:`PySys_AddAuditHook` functions." +msgstr "钩子程序由 :func:`sys.addaudithook` 或 :c:func:`PySys_AddAuditHook` 函数添加。" + +#: ../../library/sys.rst:109 +msgid "" +"The native equivalent of this function is :c:func:`PySys_Audit`. Using the " +"native function is preferred when possible." +msgstr "与本函数相等效的原生函数是 :c:func:`PySys_Audit`,应尽量使用原生函数。" + +#: ../../library/sys.rst:112 +msgid "" +"See the :ref:`audit events table ` for all events raised by " +"CPython." +msgstr "参阅 :ref:`审计事件表 ` 以获取 CPython 定义的所有审计事件。" + +#: ../../library/sys.rst:120 +msgid "" +"Set during Python startup, before ``site.py`` is run, to the same value as " +":data:`exec_prefix`. If not running in a :ref:`virtual environment `, the values will stay the same; if ``site.py`` finds that a virtual " +"environment is in use, the values of :data:`prefix` and :data:`exec_prefix` " +"will be changed to point to the virtual environment, whereas " +":data:`base_prefix` and :data:`base_exec_prefix` will remain pointing to the" +" base Python installation (the one which the virtual environment was created" +" from)." +msgstr "" +"在 ``site.py`` 运行之前, Python 启动的时候被设置为跟 :data:`exec_prefix` 同样的值。如果不是运行在 " +":ref:`虚拟环境 ` 中,两个值会保持相同;如果 ``site.py`` 发现处于一个虚拟环境中, :data:`prefix`" +" 和 :data:`exec_prefix` 将会指向虚拟环境。然而 :data:`base_prefix` 和 " +":data:`base_exec_prefix` 将仍然会指向基础的 Python 环境(用来创建虚拟环境的 Python 环境)" + +#: ../../library/sys.rst:134 +msgid "" +"Set during Python startup, before ``site.py`` is run, to the same value as " +":data:`prefix`. If not running in a :ref:`virtual environment `, " +"the values will stay the same; if ``site.py`` finds that a virtual " +"environment is in use, the values of :data:`prefix` and :data:`exec_prefix` " +"will be changed to point to the virtual environment, whereas " +":data:`base_prefix` and :data:`base_exec_prefix` will remain pointing to the" +" base Python installation (the one which the virtual environment was created" +" from)." +msgstr "" +"在 ``site.py`` 运行之前, Python 启动的时候被设置为跟 :data:`prefix` 同样的值。如果不是运行在 :ref:`虚拟环境" +" ` 中, 两个值会保持相同;如果 ``site.py`` 发现处于一个虚拟环境中, :data:`prefix` 和 " +":data:`exec_prefix` 将会指向虚拟环境。然而 :data:`base_prefix` 和 " +":data:`base_exec_prefix` 将仍然会指向基础的 Python 环境(用来创建虚拟环境的 Python 环境)" + +#: ../../library/sys.rst:147 +msgid "" +"An indicator of the native byte order. This will have the value ``'big'`` " +"on big-endian (most-significant byte first) platforms, and ``'little'`` on " +"little-endian (least-significant byte first) platforms." +msgstr "" +"本地字节顺序的指示符。在大端序(最高有效位优先)操作系统上值为 ``'big'`` ,在小端序(最低有效位优先)操作系统上为 ``'little'`` " +"。" + +#: ../../library/sys.rst:154 +msgid "" +"A tuple of strings giving the names of all modules that are compiled into " +"this Python interpreter. (This information is not available in any other " +"way --- ``modules.keys()`` only lists the imported modules.)" +msgstr "" +"一个元素为字符串的元组。包含了所有的被编译进 Python 解释器的模块。(这个信息无法通过其他的办法获取, ``modules.keys()`` " +"只包括被导入过的模块。)" + +#: ../../library/sys.rst:161 +msgid "" +"Call ``func(*args)``, while tracing is enabled. The tracing state is saved," +" and restored afterwards. This is intended to be called from a debugger " +"from a checkpoint, to recursively debug some other code." +msgstr "" +"在启用跟踪时调用 ``func(*args)`` 来保存跟踪状态,然后恢复跟踪状态。这将从检查点的调试器调用,以便递归地调试其他的一些代码。" + +#: ../../library/sys.rst:168 +msgid "" +"A string containing the copyright pertaining to the Python interpreter." +msgstr "一个字符串,包含了 Python 解释器有关的版权信息" + +#: ../../library/sys.rst:173 +msgid "" +"Clear the internal type cache. The type cache is used to speed up attribute " +"and method lookups. Use the function *only* to drop unnecessary references " +"during reference leak debugging." +msgstr "清除内部的类型缓存。类型缓存是为了加速查找方法和属性的。在调试引用泄漏的时候调用这个函数 *只会* 清除不必要的引用。" + +#: ../../library/sys.rst:177 ../../library/sys.rst:193 +msgid "" +"This function should be used for internal and specialized purposes only." +msgstr "这个函数应该只在内部为了一些特定的目的使用。" + +#: ../../library/sys.rst:182 +msgid "" +"Return a dictionary mapping each thread's identifier to the topmost stack " +"frame currently active in that thread at the time the function is called. " +"Note that functions in the :mod:`traceback` module can build the call stack " +"given such a frame." +msgstr "" +"返回一个字典,存放着每个线程的标识符与(调用本函数时)该线程栈顶的帧(当前活动的帧)之间的映射。注意 :mod:`traceback` " +"模块中的函数可以在给定某一帧的情况下构建调用堆栈。" + +#: ../../library/sys.rst:187 +msgid "" +"This is most useful for debugging deadlock: this function does not require " +"the deadlocked threads' cooperation, and such threads' call stacks are " +"frozen for as long as they remain deadlocked. The frame returned for a non-" +"deadlocked thread may bear no relationship to that thread's current activity" +" by the time calling code examines the frame." +msgstr "" +"这对于调试死锁最有用:本函数不需要死锁线程的配合,并且只要这些线程的调用栈保持死锁,它们就是冻结的。在调用本代码来检查栈顶的帧的那一刻,非死锁线程返回的帧可能与该线程当前活动的帧没有任何关系。" + +#: ../../library/sys.rst:195 +msgid "" +"Raises an :ref:`auditing event ` ``sys._current_frames`` with no " +"arguments." +msgstr "引发一个不带参数的 :ref:`审计事件 ` ``sys._current_frames``。" + +#: ../../library/sys.rst:200 +msgid "" +"This hook function is called by built-in :func:`breakpoint`. By default, it" +" drops you into the :mod:`pdb` debugger, but it can be set to any other " +"function so that you can choose which debugger gets used." +msgstr "" +"本钩子函数由内建函数 :func:`breakpoint` 调用。默认情况下,它将进入 :mod:`pdb` " +"调试器,但可以将其改为任何其他函数,以选择使用哪个调试器。" + +#: ../../library/sys.rst:204 +msgid "" +"The signature of this function is dependent on what it calls. For example, " +"the default binding (e.g. ``pdb.set_trace()``) expects no arguments, but you" +" might bind it to a function that expects additional arguments (positional " +"and/or keyword). The built-in ``breakpoint()`` function passes its " +"``*args`` and ``**kws`` straight through. Whatever ``breakpointhooks()`` " +"returns is returned from ``breakpoint()``." +msgstr "" +"该函数的特征取决于其调用的函数。例如,默认绑定(即 ``pdb.set_trace()`` " +")不要求提供参数,但可以将绑定换成要求提供附加参数(位置参数/关键字参数)的函数。内建函数 ``breakpoint()`` 直接将其 " +"``*args`` 和 ``**kws`` 传入。``breakpointhooks()`` 返回的所有内容都会从 ``breakpoint()`` " +"返回。" + +#: ../../library/sys.rst:211 +msgid "" +"The default implementation first consults the environment variable " +":envvar:`PYTHONBREAKPOINT`. If that is set to ``\"0\"`` then this function " +"returns immediately; i.e. it is a no-op. If the environment variable is not" +" set, or is set to the empty string, ``pdb.set_trace()`` is called. " +"Otherwise this variable should name a function to run, using Python's " +"dotted-import nomenclature, e.g. ``package.subpackage.module.function``. In " +"this case, ``package.subpackage.module`` would be imported and the resulting" +" module must have a callable named ``function()``. This is run, passing in " +"``*args`` and ``**kws``, and whatever ``function()`` returns, " +"``sys.breakpointhook()`` returns to the built-in :func:`breakpoint` " +"function." +msgstr "" +"默认的实现首先会查询环境变量 :envvar:`PYTHONBREAKPOINT`。如果将该变量设置为 " +"``\"0\"``,则本函数立即返回,表示在断点处无操作。如果未设置该环境变量或将其设置为空字符串,则调用 " +"``pdb.set_trace()``。否则,此变量应指定要运行的函数,指定函数时应使用 Python 的点导入命名法,如 " +"``package.subpackage.module.function``。这种情况下将导入 " +"``package.subpackage.module``,且导入的模块必须有一个名为 ``function()`` " +"的可调用对象。该可调用对象会运行,``*args`` 和 ``**kws`` 会传入,且无论 ``function()`` " +"返回什么,``sys.breakpointhook()`` 都将返回到內建函数 :func:`breakpoint`。" + +#: ../../library/sys.rst:223 +msgid "" +"Note that if anything goes wrong while importing the callable named by " +":envvar:`PYTHONBREAKPOINT`, a :exc:`RuntimeWarning` is reported and the " +"breakpoint is ignored." +msgstr "" +"请注意,如果在导入 :envvar:`PYTHONBREAKPOINT` 指定的可调用对象时出错,则将报告一个 " +":exc:`RuntimeWarning` 并忽略断点。" + +#: ../../library/sys.rst:227 +msgid "" +"Also note that if ``sys.breakpointhook()`` is overridden programmatically, " +":envvar:`PYTHONBREAKPOINT` is *not* consulted." +msgstr "" +"另请注意,如果以编程方式覆盖 ``sys.breakpointhook()``,则 *不会* 查询 " +":envvar:`PYTHONBREAKPOINT`。" + +#: ../../library/sys.rst:234 +msgid "" +"Print low-level information to stderr about the state of CPython's memory " +"allocator." +msgstr "将有关 CPython 内存分配器状态的底层的信息打印至 stderr。" + +#: ../../library/sys.rst:237 +msgid "" +"If Python is configured --with-pydebug, it also performs some expensive " +"internal consistency checks." +msgstr "如果 Python 被配置为 --with-pydebug,本方法还将执行一些开销较大的内部一致性检查。" + +#: ../../library/sys.rst:244 +msgid "" +"This function is specific to CPython. The exact output format is not " +"defined here, and may change." +msgstr "本函数仅限 CPython。此处没有定义确切的输出格式,且可能会更改。" + +#: ../../library/sys.rst:250 +msgid "Integer specifying the handle of the Python DLL." +msgstr "指向 Python DLL 句柄的整数。" + +#: ../../library/sys.rst:252 ../../library/sys.rst:802 +#: ../../library/sys.rst:1482 ../../library/sys.rst:1694 +msgid ":ref:`Availability `: Windows." +msgstr ":ref:`可用性 `: Windows。" + +#: ../../library/sys.rst:257 +msgid "" +"If *value* is not ``None``, this function prints ``repr(value)`` to " +"``sys.stdout``, and saves *value* in ``builtins._``. If ``repr(value)`` is " +"not encodable to ``sys.stdout.encoding`` with ``sys.stdout.errors`` error " +"handler (which is probably ``'strict'``), encode it to " +"``sys.stdout.encoding`` with ``'backslashreplace'`` error handler." +msgstr "" +"如果 *value* 不是 ``None``,则本函数会将 ``repr(value)`` 打印至 ``sys.stdout``,并将 *value* " +"保存在 ``builtins._`` 中。如果 ``repr(value)`` 无法用 ``sys.stdout.errors`` 错误处理方案(可能为" +" ``'strict'`` )编码为 ``sys.stdout.encoding``,则用 ``'backslashreplace'`` " +"错误处理方案将其编码为 ``sys.stdout.encoding``。" + +#: ../../library/sys.rst:263 +msgid "" +"``sys.displayhook`` is called on the result of evaluating an " +":term:`expression` entered in an interactive Python session. The display of" +" these values can be customized by assigning another one-argument function " +"to ``sys.displayhook``." +msgstr "" +"在交互式 Python 会话中运行 :term:`expression` 产生结果后,将在结果上调用 " +"``sys.displayhook``。若要自定义这些 value 的显示,可以将 ``sys.displayhook`` 指定为另一个单参数函数。" + +#: ../../library/sys.rst:267 +msgid "Pseudo-code::" +msgstr "伪代码::" + +#: ../../library/sys.rst:287 +msgid "Use ``'backslashreplace'`` error handler on :exc:`UnicodeEncodeError`." +msgstr "在发生 :exc:`UnicodeEncodeError` 时使用 ``'backslashreplace'`` 错误处理方案。" + +#: ../../library/sys.rst:293 +msgid "" +"If this is true, Python won't try to write ``.pyc`` files on the import of " +"source modules. This value is initially set to ``True`` or ``False`` " +"depending on the :option:`-B` command line option and the " +":envvar:`PYTHONDONTWRITEBYTECODE` environment variable, but you can set it " +"yourself to control bytecode file generation." +msgstr "" +"如果该值为 true,则 Python 在导入源码模块时将不会尝试写入 ``.pyc`` 文件。该值会被初始化为 ``True`` 或 " +"``False``,依据是 :option:`-B` 命令行选项和 :envvar:`PYTHONDONTWRITEBYTECODE` " +"环境变量,可以自行设置该值,来控制是否生成字节码文件。" + +#: ../../library/sys.rst:302 +msgid "" +"If this is set (not ``None``), Python will write bytecode-cache ``.pyc`` " +"files to (and read them from) a parallel directory tree rooted at this " +"directory, rather than from ``__pycache__`` directories in the source code " +"tree. Any ``__pycache__`` directories in the source code tree will be " +"ignored and new `.pyc` files written within the pycache prefix. Thus if you " +"use :mod:`compileall` as a pre-build step, you must ensure you run it with " +"the same pycache prefix (if any) that you will use at runtime." +msgstr "" +"如果将该值设为某个目录(不是 ``None`` ),Python 会将字节码缓存文件 ``.pyc`` " +"写入到以该目录为根的并行目录树中(并从中读取),而不是在源码树中的 ``__pycache__`` 目录下读写。源码树中所有的 " +"``__pycache__`` 目录都将被忽略,并将在 pycache prefix 内写入新的 `.pyc` 文件。因此,如果使用 " +":mod:`compileall` 作为预构建步骤,则必须确保预构建时使用的 pycache prefix (如果有)与将来运行的时候相同。" + +#: ../../library/sys.rst:310 +msgid "" +"A relative path is interpreted relative to the current working directory." +msgstr "相对路径将解释为相对于当前工作目录。" + +#: ../../library/sys.rst:312 +msgid "" +"This value is initially set based on the value of the :option:`-X` " +"``pycache_prefix=PATH`` command-line option or the " +":envvar:`PYTHONPYCACHEPREFIX` environment variable (command-line takes " +"precedence). If neither are set, it is ``None``." +msgstr "" +"该值的初值设置,依据 :option:`-X` ``pycache_prefix=PATH`` 命令行选项或 " +":envvar:`PYTHONPYCACHEPREFIX` 环境变量的值(命令行优先)。如果两者均未设置,则为 ``None``。" + +#: ../../library/sys.rst:322 +msgid "" +"This function prints out a given traceback and exception to ``sys.stderr``." +msgstr "本函数会将所给的回溯和异常输出到 ``sys.stderr`` 中。" + +#: ../../library/sys.rst:324 +msgid "" +"When an exception is raised and uncaught, the interpreter calls " +"``sys.excepthook`` with three arguments, the exception class, exception " +"instance, and a traceback object. In an interactive session this happens " +"just before control is returned to the prompt; in a Python program this " +"happens just before the program exits. The handling of such top-level " +"exceptions can be customized by assigning another three-argument function to" +" ``sys.excepthook``." +msgstr "" +"当抛出一个异常,且未被捕获时,解释器将调用 ``sys.excepthook`` " +"并带有三个参数:异常类、异常实例和一个回溯对象。在交互式会话中,这会在控制权返回到提示符之前发生。在 Python " +"程序中,这会在程序退出之前发生。如果要自定义此类顶级异常的处理过程,可以将另一个 3 个参数的函数赋给 ``sys.excepthook``。" + +#: ../../library/sys.rst:331 +msgid "" +"Raises an :ref:`auditing event ` ``sys.excepthook`` with arguments" +" ``hook``, ``type``, ``value``, ``traceback``." +msgstr "" +"引发一个 :ref:`审计事件 ` ``sys.excepthook``,附带参数 ``hook``, ``type``, " +"``value``, ``traceback``。" + +#: ../../library/sys.rst:333 +msgid "" +"Raise an auditing event ``sys.excepthook`` with arguments ``hook``, " +"``type``, ``value``, ``traceback`` when an uncaught exception occurs. If no " +"hook has been set, ``hook`` may be ``None``. If any hook raises an exception" +" derived from :class:`RuntimeError` the call to the hook will be suppressed." +" Otherwise, the audit hook exception will be reported as unraisable and " +"``sys.excepthook`` will be called." +msgstr "" +"当发生未捕获的异常时,引发一个审计事件 ``sys.excepthook``,附带参数 ``hook``, ``type``, ``value``, " +"``traceback``。如果没有设置钩子,``hook`` 可能为 ``None``。如果某个钩子抛出了派生自 " +":class:`RuntimeError` 的异常,则将禁止对该钩子的调用。否则,审计钩子的异常将被报告为无法抛出,并将调用 " +"``sys.excepthook``。" + +#: ../../library/sys.rst:342 +msgid "" +"The :func:`sys.unraisablehook` function handles unraisable exceptions and " +"the :func:`threading.excepthook` function handles exception raised by " +":func:`threading.Thread.run`." +msgstr "" +":func:`sys.unraisablehook` 函数处理无法抛出的异常,:func:`threading.excepthook` 函数处理 " +":func:`threading.Thread.run` 抛出的异常。" + +#: ../../library/sys.rst:352 +msgid "" +"These objects contain the original values of ``breakpointhook``, " +"``displayhook``, ``excepthook``, and ``unraisablehook`` at the start of the " +"program. They are saved so that ``breakpointhook``, ``displayhook`` and " +"``excepthook``, ``unraisablehook`` can be restored in case they happen to " +"get replaced with broken or alternative objects." +msgstr "" +"程序开始时,这些对象存有 ``breakpointhook``、``displayhook``、``excepthook`` 和 " +"``unraisablehook`` 的初始值。保存它们是为了可以在 ``breakpointhook``、``displayhook`` 和 " +"``excepthook``、``unraisablehook`` 被破坏或被替换时恢复它们。" + +#: ../../library/sys.rst:358 +msgid "__breakpointhook__" +msgstr "__breakpointhook__" + +#: ../../library/sys.rst:361 +msgid "__unraisablehook__" +msgstr "__unraisablehook__" + +#: ../../library/sys.rst:366 +msgid "" +"This function returns a tuple of three values that give information about " +"the exception that is currently being handled. The information returned is " +"specific both to the current thread and to the current stack frame. If the " +"current stack frame is not handling an exception, the information is taken " +"from the calling stack frame, or its caller, and so on until a stack frame " +"is found that is handling an exception. Here, \"handling an exception\" is " +"defined as \"executing an except clause.\" For any stack frame, only " +"information about the exception being currently handled is accessible." +msgstr "" +"本函数返回的元组包含三个值,它们给出当前正在处理的异常的信息。返回的信息仅限于当前线程和当前堆栈帧。如果当前堆栈帧没有正在处理的异常,则信息将从下级被调用的堆栈帧或上级调用者等位置获取,依此类推,直到找到正在处理异常的堆栈帧为止。此处的“处理异常”指的是“执行" +" except 子句”。任何堆栈帧都只能访问当前正在处理的异常的信息。" + +#: ../../library/sys.rst:377 +msgid "" +"If no exception is being handled anywhere on the stack, a tuple containing " +"three ``None`` values is returned. Otherwise, the values returned are " +"``(type, value, traceback)``. Their meaning is: *type* gets the type of the" +" exception being handled (a subclass of :exc:`BaseException`); *value* gets " +"the exception instance (an instance of the exception type); *traceback* gets" +" a :ref:`traceback object ` which encapsulates the call " +"stack at the point where the exception originally occurred." +msgstr "" +"如果整个堆栈都没有正在处理的异常,则返回包含三个 ``None`` 值的元组。否则返回值为 ``(type, value, " +"traceback)``。它们的含义是:*type* 是正在处理的异常类型(它是 :exc:`BaseException` 的子类);*value* " +"是异常实例(异常类型的实例);*traceback* 是一个 :ref:`回溯对象 `,该对象封装了最初发生异常时的调用堆栈。" + +#: ../../library/sys.rst:388 +msgid "" +"A string giving the site-specific directory prefix where the platform-" +"dependent Python files are installed; by default, this is also " +"``'/usr/local'``. This can be set at build time with the ``--exec-prefix`` " +"argument to the :program:`configure` script. Specifically, all " +"configuration files (e.g. the :file:`pyconfig.h` header file) are installed " +"in the directory :file:`{exec_prefix}/lib/python{X.Y}/config`, and shared " +"library modules are installed in :file:`{exec_prefix}/lib/python{X.Y}/lib-" +"dynload`, where *X.Y* is the version number of Python, for example ``3.2``." +msgstr "" +"一个字符串,提供特定域的目录前缀,该目录中安装了与平台相关的 Python 文件,默认也是 ``'/usr/local'``。该目录前缀可以在构建时使用" +" :program:`configure` 脚本的 ``--exec-prefix`` 参数进行设置。具体而言,所有配置文件(如 " +":file:`pyconfig.h` 头文件)都安装在目录 :file:`{exec_prefix}/lib/python{X.Y}/config` " +"中,共享库模块安装在 :file:`{exec_prefix}/lib/python{X.Y}/lib-dynload` 中,其中 *X.Y* 是 " +"Python 的版本号,如 ``3.2``。" + +#: ../../library/sys.rst:399 +msgid "" +"If a :ref:`virtual environment ` is in effect, this value will be " +"changed in ``site.py`` to point to the virtual environment. The value for " +"the Python installation will still be available, via " +":data:`base_exec_prefix`." +msgstr "" +"如果在一个 :ref:`虚拟环境 ` 中,那么该值将在 ``site.py`` 中被修改,指向虚拟环境。Python " +"安装位置仍然可以用 :data:`base_exec_prefix` 来获取。" + +#: ../../library/sys.rst:407 +msgid "" +"A string giving the absolute path of the executable binary for the Python " +"interpreter, on systems where this makes sense. If Python is unable to " +"retrieve the real path to its executable, :data:`sys.executable` will be an " +"empty string or ``None``." +msgstr "" +"一个字符串,提供 Python 解释器的可执行二进制文件的绝对路径,仅在部分系统中此值有意义。如果 Python 无法获取其可执行文件的真实路径,则 " +":data:`sys.executable` 将为空字符串或 ``None``。" + +#: ../../library/sys.rst:415 +msgid "" +"Raise a :exc:`SystemExit` exception, signaling an intention to exit the " +"interpreter." +msgstr "引发一个 :exc:`SystemExit` 异常,表示打算退出解释器。" + +#: ../../library/sys.rst:417 +msgid "" +"The optional argument *arg* can be an integer giving the exit status " +"(defaulting to zero), or another type of object. If it is an integer, zero " +"is considered \"successful termination\" and any nonzero value is considered" +" \"abnormal termination\" by shells and the like. Most systems require it " +"to be in the range 0--127, and produce undefined results otherwise. Some " +"systems have a convention for assigning specific meanings to specific exit " +"codes, but these are generally underdeveloped; Unix programs generally use 2" +" for command line syntax errors and 1 for all other kind of errors. If " +"another type of object is passed, ``None`` is equivalent to passing zero, " +"and any other object is printed to :data:`stderr` and results in an exit " +"code of 1. In particular, ``sys.exit(\"some error message\")`` is a quick " +"way to exit a program when an error occurs." +msgstr "" +"可选参数 *arg* 可以是表示退出状态的整数(默认为 0),也可以是其他类型的对象。如果它是整数,则 shell 等将 0 " +"视为“成功终止”,非零值视为“异常终止”。大多数系统要求该值的范围是 0--" +"127,否则会产生不确定的结果。某些系统为退出代码约定了特定的含义,但通常尚不完善;Unix 程序通常用 2 表示命令行语法错误,用 1 " +"表示所有其他类型的错误。传入其他类型的对象,如果传入 ``None`` 等同于传入 0,如果传入其他对象则将其打印至 " +":data:`stderr`,且退出代码为 1。特别地,``sys.exit(\"some error message\")`` " +"可以在发生错误时快速退出程序。" + +#: ../../library/sys.rst:430 +msgid "" +"Since :func:`exit` ultimately \"only\" raises an exception, it will only " +"exit the process when called from the main thread, and the exception is not " +"intercepted. Cleanup actions specified by finally clauses of :keyword:`try` " +"statements are honored, and it is possible to intercept the exit attempt at " +"an outer level." +msgstr "" +"由于 :func:`exit` 最终 \"只\" 引发了一个异常,它只在从主线程调用时退出进程,而异常不会被拦截。 :keyword:`try` 语句的" +" finally 子句所指定的清理动作会被遵守,并且有可能在外层拦截退出的尝试。" + +#: ../../library/sys.rst:435 +msgid "" +"If an error occurs in the cleanup after the Python interpreter has caught " +":exc:`SystemExit` (such as an error flushing buffered data in the standard " +"streams), the exit status is changed to 120." +msgstr "" +"在 Python 解释器捕获 :exc:`SystemExit` 后,如果在清理中发生错误(如清除标准流中的缓冲数据时出错),则退出状态码将变为 " +"120。" + +#: ../../library/sys.rst:443 +msgid "" +"The :term:`named tuple` *flags* exposes the status of command line flags. " +"The attributes are read only." +msgstr ":term:`具名元组 ` *flags* 含有命令行标志的状态。这些属性是只读的。" + +#: ../../library/sys.rst:447 ../../library/sys.rst:500 +#: ../../library/sys.rst:847 +msgid "attribute" +msgstr "attribute -- 属性" + +#: ../../library/sys.rst:447 +msgid "flag" +msgstr "标志" + +#: ../../library/sys.rst:449 +msgid ":const:`debug`" +msgstr ":const:`debug`" + +#: ../../library/sys.rst:449 +msgid ":option:`-d`" +msgstr ":option:`-d`" + +#: ../../library/sys.rst:450 +msgid ":const:`inspect`" +msgstr ":const:`inspect`" + +#: ../../library/sys.rst:450 ../../library/sys.rst:451 +msgid ":option:`-i`" +msgstr ":option:`-i`" + +#: ../../library/sys.rst:451 +msgid ":const:`interactive`" +msgstr ":const:`interactive`" + +#: ../../library/sys.rst:452 +msgid ":const:`isolated`" +msgstr ":const:`isolated`" + +#: ../../library/sys.rst:452 +msgid ":option:`-I`" +msgstr ":option:`-I`" + +#: ../../library/sys.rst:453 +msgid ":const:`optimize`" +msgstr ":const:`optimize`" + +#: ../../library/sys.rst:453 +msgid ":option:`-O` or :option:`-OO`" +msgstr ":option:`-O` 或 :option:`-OO`" + +#: ../../library/sys.rst:454 +msgid ":const:`dont_write_bytecode`" +msgstr ":const:`dont_write_bytecode`" + +#: ../../library/sys.rst:454 +msgid ":option:`-B`" +msgstr ":option:`-B`" + +#: ../../library/sys.rst:455 +msgid ":const:`no_user_site`" +msgstr ":const:`no_user_site`" + +#: ../../library/sys.rst:455 +msgid ":option:`-s`" +msgstr ":option:`-s`" + +#: ../../library/sys.rst:456 +msgid ":const:`no_site`" +msgstr ":const:`no_site`" + +#: ../../library/sys.rst:456 +msgid ":option:`-S`" +msgstr ":option:`-S`" + +#: ../../library/sys.rst:457 +msgid ":const:`ignore_environment`" +msgstr ":const:`ignore_environment`" + +#: ../../library/sys.rst:457 +msgid ":option:`-E`" +msgstr ":option:`-E`" + +#: ../../library/sys.rst:458 +msgid ":const:`verbose`" +msgstr ":const:`verbose`" + +#: ../../library/sys.rst:458 +msgid ":option:`-v`" +msgstr ":option:`-v`" + +#: ../../library/sys.rst:459 +msgid ":const:`bytes_warning`" +msgstr ":const:`bytes_warning`" + +#: ../../library/sys.rst:459 +msgid ":option:`-b`" +msgstr ":option:`-b`" + +#: ../../library/sys.rst:460 +msgid ":const:`quiet`" +msgstr ":const:`quiet`" + +#: ../../library/sys.rst:460 +msgid ":option:`-q`" +msgstr ":option:`-q`" + +#: ../../library/sys.rst:461 +msgid ":const:`hash_randomization`" +msgstr ":const:`hash_randomization`" + +#: ../../library/sys.rst:461 +msgid ":option:`-R`" +msgstr ":option:`-R`" + +#: ../../library/sys.rst:462 +msgid ":const:`dev_mode`" +msgstr ":const:`dev_mode`" + +#: ../../library/sys.rst:462 +msgid ":option:`-X dev <-X>` (:ref:`Python Development Mode `)" +msgstr ":option:`-X dev <-X>` (:ref:`Python 开发模式 `)" + +#: ../../library/sys.rst:463 +msgid ":const:`utf8_mode`" +msgstr ":const:`utf8_mode`" + +#: ../../library/sys.rst:463 +msgid ":option:`-X utf8 <-X>`" +msgstr ":option:`-X utf8 <-X>`" + +#: ../../library/sys.rst:464 +msgid ":const:`int_max_str_digits`" +msgstr ":const:`int_max_str_digits`" + +#: ../../library/sys.rst:464 +msgid "" +":option:`-X int_max_str_digits <-X>` (:ref:`integer string conversion length" +" limitation `)" +msgstr "" +":option:`-X int_max_str_digits <-X>` (:ref:`integer string conversion length" +" limitation `)" + +#: ../../library/sys.rst:467 +msgid "Added ``quiet`` attribute for the new :option:`-q` flag." +msgstr "为新的 :option:`-q` 标志添加了 ``quiet`` 属性" + +#: ../../library/sys.rst:470 +msgid "The ``hash_randomization`` attribute." +msgstr "``hash_randomization`` 属性" + +#: ../../library/sys.rst:473 +msgid "Removed obsolete ``division_warning`` attribute." +msgstr "删除了过时的 ``division_warning`` 属性" + +#: ../../library/sys.rst:476 +msgid "Added ``isolated`` attribute for :option:`-I` ``isolated`` flag." +msgstr "为 :option:`-I` ``isolated`` 标志添加了 ``isolated`` 属性。" + +#: ../../library/sys.rst:479 +msgid "" +"Added the ``dev_mode`` attribute for the new :ref:`Python Development Mode " +"` and the ``utf8_mode`` attribute for the new :option:`-X` " +"``utf8`` flag." +msgstr "" +"为新的 :ref:`Python 开发模式 ` 添加了 ``dev_mode`` 属性,为新的 :option:`-X` " +"``utf8`` 标志添加了 ``utf8_mode`` 属性。" + +#: ../../library/sys.rst:484 +msgid "Added the ``int_max_str_digits`` attribute." +msgstr "增加了 ``int_max_str_digits`` 属性。" + +#: ../../library/sys.rst:490 +msgid "" +"A :term:`named tuple` holding information about the float type. It contains " +"low level information about the precision and internal representation. The " +"values correspond to the various floating-point constants defined in the " +"standard header file :file:`float.h` for the 'C' programming language; see " +"section 5.2.4.2.2 of the 1999 ISO/IEC C standard [C99]_, 'Characteristics of" +" floating types', for details." +msgstr "" +"一个 :term:`具名元组 `,存有浮点型的相关信息。它包含的是关于精度和内部表示的底层信息。这些值与标准头文件 " +":file:`float.h` 中为 C 语言定义的各种浮点常量对应,详情请参阅 1999 ISO/IEC C 标准 [C99]_ 的 " +"5.2.4.2.2 节,'Characteristics of floating types(浮点型的特性)'。" + +#: ../../library/sys.rst:500 +msgid "float.h macro" +msgstr "float.h 宏" + +#: ../../library/sys.rst:500 ../../library/sys.rst:847 +msgid "explanation" +msgstr "说明" + +#: ../../library/sys.rst:502 +msgid ":const:`epsilon`" +msgstr ":const:`epsilon`" + +#: ../../library/sys.rst:502 +msgid "DBL_EPSILON" +msgstr "DBL_EPSILON" + +#: ../../library/sys.rst:502 +msgid "" +"difference between 1.0 and the least value greater than 1.0 that is " +"representable as a float" +msgstr "大于 1.0 的最小值和 1.0 之间的差,表示为浮点数" + +#: ../../library/sys.rst:505 +msgid "See also :func:`math.ulp`." +msgstr "另请参阅 :func:`math.ulp`。" + +#: ../../library/sys.rst:507 +msgid ":const:`dig`" +msgstr ":const:`dig`" + +#: ../../library/sys.rst:507 +msgid "DBL_DIG" +msgstr "DBL_DIG" + +#: ../../library/sys.rst:507 +msgid "" +"maximum number of decimal digits that can be faithfully represented in a " +"float; see below" +msgstr "浮点数可以真实表示的最大十进制数字;见下文" + +#: ../../library/sys.rst:510 +msgid ":const:`mant_dig`" +msgstr ":const:`mant_dig`" + +#: ../../library/sys.rst:510 +msgid "DBL_MANT_DIG" +msgstr "DBL_MANT_DIG" + +#: ../../library/sys.rst:510 +msgid "" +"float precision: the number of base-``radix`` digits in the significand of a" +" float" +msgstr "浮点数精度:``radix`` 基数下的浮点数有效位数" + +#: ../../library/sys.rst:513 +msgid ":const:`max`" +msgstr ":const:`max`" + +#: ../../library/sys.rst:513 +msgid "DBL_MAX" +msgstr "DBL_MAX" + +#: ../../library/sys.rst:513 +msgid "maximum representable positive finite float" +msgstr "可表示的最大正浮点数(非无穷)" + +#: ../../library/sys.rst:515 +msgid ":const:`max_exp`" +msgstr ":const:`max_exp`" + +#: ../../library/sys.rst:515 +msgid "DBL_MAX_EXP" +msgstr "DBL_MAX_EXP" + +#: ../../library/sys.rst:515 +msgid "" +"maximum integer *e* such that ``radix**(e-1)`` is a representable finite " +"float" +msgstr "使得 ``radix**(e-1)`` 是可表示的浮点数(非无穷)的最大整数 *e*" + +#: ../../library/sys.rst:518 +msgid ":const:`max_10_exp`" +msgstr ":const:`max_10_exp`" + +#: ../../library/sys.rst:518 +msgid "DBL_MAX_10_EXP" +msgstr "DBL_MAX_10_EXP" + +#: ../../library/sys.rst:518 +msgid "" +"maximum integer *e* such that ``10**e`` is in the range of representable " +"finite floats" +msgstr "使得 ``10**e`` 在可表示的浮点数(非无穷)范围内的最大整数 *e*" + +#: ../../library/sys.rst:521 +msgid ":const:`min`" +msgstr ":const:`min`" + +#: ../../library/sys.rst:521 +msgid "DBL_MIN" +msgstr "DBL_MIN" + +#: ../../library/sys.rst:521 +msgid "minimum representable positive *normalized* float" +msgstr "可表示的最小正 *规格化* 浮点数" + +#: ../../library/sys.rst:523 +msgid "" +"Use :func:`math.ulp(0.0) ` to get the smallest positive " +"*denormalized* representable float." +msgstr "使用 :func:`math.ulp(0.0) ` 获取可表示的最小正 *非规格化* 浮点数" + +#: ../../library/sys.rst:527 +msgid ":const:`min_exp`" +msgstr ":const:`min_exp`" + +#: ../../library/sys.rst:527 +msgid "DBL_MIN_EXP" +msgstr "DBL_MIN_EXP" + +#: ../../library/sys.rst:527 +msgid "minimum integer *e* such that ``radix**(e-1)`` is a normalized float" +msgstr "使得 ``radix**(e-1)`` 是规格化浮点数的最小整数 *e*" + +#: ../../library/sys.rst:530 +msgid ":const:`min_10_exp`" +msgstr ":const:`min_10_exp`" + +#: ../../library/sys.rst:530 +msgid "DBL_MIN_10_EXP" +msgstr "DBL_MIN_10_EXP" + +#: ../../library/sys.rst:530 +msgid "minimum integer *e* such that ``10**e`` is a normalized float" +msgstr "使得 ``10**e`` 是规格化浮点数的最小整数 *e*" + +#: ../../library/sys.rst:533 +msgid ":const:`radix`" +msgstr ":const:`radix`" + +#: ../../library/sys.rst:533 +msgid "FLT_RADIX" +msgstr "FLT_RADIX" + +#: ../../library/sys.rst:533 +msgid "radix of exponent representation" +msgstr "指数表示法中采用的基数" + +#: ../../library/sys.rst:535 +msgid ":const:`rounds`" +msgstr ":const:`rounds`" + +#: ../../library/sys.rst:535 +msgid "FLT_ROUNDS" +msgstr "FLT_ROUNDS" + +#: ../../library/sys.rst:535 +msgid "" +"integer constant representing the rounding mode used for arithmetic " +"operations. This reflects the value of the system FLT_ROUNDS macro at " +"interpreter startup time. See section 5.2.4.2.2 of the C99 standard for an " +"explanation of the possible values and their meanings." +msgstr "" +"整数常数,表示算术运算中的舍入方式。它反映了解释器启动时系统的 FLT_ROUNDS 宏的值。关于可能的值及其含义的说明,请参阅 C99 标准 " +"5.2.4.2.2 节。" + +#: ../../library/sys.rst:543 +msgid "" +"The attribute :attr:`sys.float_info.dig` needs further explanation. If " +"``s`` is any string representing a decimal number with at most " +":attr:`sys.float_info.dig` significant digits, then converting ``s`` to a " +"float and back again will recover a string representing the same decimal " +"value::" +msgstr "" +"关于 :attr:`sys.float_info.dig` 属性的进一步说明。如果 ``s`` 是表示十进制数的字符串,而该数最多有 " +":attr:`sys.float_info.dig` 位有效数字,则将 ``s`` 转换为 float 再转回去将恢复原先相同十进制值的字符串::" + +#: ../../library/sys.rst:556 +msgid "" +"But for strings with more than :attr:`sys.float_info.dig` significant " +"digits, this isn't always true::" +msgstr "但是对于超过 :attr:`sys.float_info.dig` 位有效数字的字符串,转换前后并非总是相同::" + +#: ../../library/sys.rst:565 +msgid "" +"A string indicating how the :func:`repr` function behaves for floats. If " +"the string has value ``'short'`` then for a finite float ``x``, ``repr(x)`` " +"aims to produce a short string with the property that ``float(repr(x)) == " +"x``. This is the usual behaviour in Python 3.1 and later. Otherwise, " +"``float_repr_style`` has value ``'legacy'`` and ``repr(x)`` behaves in the " +"same way as it did in versions of Python prior to 3.1." +msgstr "" +"一个字符串,反映 :func:`repr` 函数在浮点数上的行为。如果该字符串是 ``'short'``,那么对于(非无穷的)浮点数 " +"``x``,``repr(x)`` 将会生成一个短字符串,满足 ``float(repr(x)) == x`` 的特性。这是 Python 3.1 " +"及更高版本中的常见行为。否则 ``float_repr_style`` 的值将是 ``'legacy'``,此时 ``repr(x)`` 的行为方式将与" +" Python 3.1 之前的版本相同。" + +#: ../../library/sys.rst:578 +msgid "" +"Return the number of memory blocks currently allocated by the interpreter, " +"regardless of their size. This function is mainly useful for tracking and " +"debugging memory leaks. Because of the interpreter's internal caches, the " +"result can vary from call to call; you may have to call " +":func:`_clear_type_cache()` and :func:`gc.collect()` to get more predictable" +" results." +msgstr "" +"返回解释器当前已分配的内存块数,无论它们大小如何。本函数主要用于跟踪和调试内存泄漏。因为解释器有内部缓存,所以不同调用之间结果会变化。可能需要调用 " +":func:`_clear_type_cache()` 和 :func:`gc.collect()` 使结果更容易预测。" + +#: ../../library/sys.rst:585 +msgid "" +"If a Python build or implementation cannot reasonably compute this " +"information, :func:`getallocatedblocks()` is allowed to return 0 instead." +msgstr "如果当前 Python 构建或实现无法合理地计算此信息,允许 :func:`getallocatedblocks()` 返回 0。" + +#: ../../library/sys.rst:593 +msgid "Return the build time API version of Android as an integer." +msgstr "返回一个整数,表示 Android 构建时 API 版本。" + +#: ../../library/sys.rst:596 +msgid ":ref:`Availability `: Android." +msgstr ":ref:`可用性 `:Android。" + +#: ../../library/sys.rst:602 +msgid "" +"Return the name of the current default string encoding used by the Unicode " +"implementation." +msgstr "返回当前 Unicode 实现所使用的默认字符串编码格式名称。" + +#: ../../library/sys.rst:608 +msgid "" +"Return the current value of the flags that are used for :c:func:`dlopen` " +"calls. Symbolic names for the flag values can be found in the :mod:`os` " +"module (``RTLD_xxx`` constants, e.g. :data:`os.RTLD_LAZY`)." +msgstr "" +"返回当前 :c:func:`dlopen` 调用所使用的标志位的值。标志值对应的符号名称可以在 :mod:`os` 模块中找到(形如 " +"``RTLD_xxx`` 的常量,如 :data:`os.RTLD_LAZY` )。" + +#: ../../library/sys.rst:613 ../../library/sys.rst:1247 +msgid ":ref:`Availability `: Unix." +msgstr ":ref:`可用性 `: Unix。" + +#: ../../library/sys.rst:618 +msgid "" +"Return the name of the encoding used to convert between Unicode filenames " +"and bytes filenames. For best compatibility, str should be used for " +"filenames in all cases, although representing filenames as bytes is also " +"supported. Functions accepting or returning filenames should support either " +"str or bytes and internally convert to the system's preferred " +"representation." +msgstr "" +"返回编码名称,该编码用于在 Unicode 文件名和 bytes 文件名之间转换。为获得最佳兼容性,任何时候都应使用 str " +"表示文件名,尽管用字节来表示文件名也是支持的。函数如果需要接受或返回文件名,它应支持 str 或 bytes,并在内部将其转换为系统首选的表示形式。" + +#: ../../library/sys.rst:625 +msgid "This encoding is always ASCII-compatible." +msgstr "该编码始终是 ASCII 兼容的。" + +#: ../../library/sys.rst:627 ../../library/sys.rst:660 +msgid "" +":func:`os.fsencode` and :func:`os.fsdecode` should be used to ensure that " +"the correct encoding and errors mode are used." +msgstr "应使用 :func:`os.fsencode` 和 :func:`os.fsdecode` 来保证所采用的编码和错误处理方案都是正确的。" + +#: ../../library/sys.rst:630 +msgid "In the UTF-8 mode, the encoding is ``utf-8`` on any platform." +msgstr "在 UTF-8 模式下,任何平台上的编码均为 ``utf-8``。" + +#: ../../library/sys.rst:632 +msgid "On macOS, the encoding is ``'utf-8'``." +msgstr "在 macOS 上,编码为 ``'utf-8'``。" + +#: ../../library/sys.rst:634 +msgid "On Unix, the encoding is the locale encoding." +msgstr "在 Unix 上,编码是语言环境编码。" + +#: ../../library/sys.rst:636 +msgid "" +"On Windows, the encoding may be ``'utf-8'`` or ``'mbcs'``, depending on user" +" configuration." +msgstr "在 Windows 上取决于用户配置,编码可能是 ``'utf-8'`` 或 ``'mbcs'``。" + +#: ../../library/sys.rst:639 +msgid "On Android, the encoding is ``'utf-8'``." +msgstr "在 Android 上,编码为 ``'utf-8'``。" + +#: ../../library/sys.rst:641 +msgid "On VxWorks, the encoding is ``'utf-8'``." +msgstr "在 VxWorks 上,编码为 ``'utf-8'``。" + +#: ../../library/sys.rst:643 +msgid ":func:`getfilesystemencoding` result cannot be ``None`` anymore." +msgstr ":func:`getfilesystemencoding` 的结果将不再有可能是 ``None``。" + +#: ../../library/sys.rst:646 +msgid "" +"Windows is no longer guaranteed to return ``'mbcs'``. See :pep:`529` and " +":func:`_enablelegacywindowsfsencoding` for more information." +msgstr "" +"Windows 不再保证会返回 ``'mbcs'``。详情请参阅 :pep:`529` 和 " +":func:`_enablelegacywindowsfsencoding`。" + +#: ../../library/sys.rst:650 +msgid "Return 'utf-8' in the UTF-8 mode." +msgstr "在 UTF-8 模式下返回 'utf-8' 。" + +#: ../../library/sys.rst:656 +msgid "" +"Return the name of the error mode used to convert between Unicode filenames " +"and bytes filenames. The encoding name is returned from " +":func:`getfilesystemencoding`." +msgstr "" +"返回错误处理方案的名称,该错误处理方案将在 Unicode 文件名和 bytes 文件名转换时生效。编码的名称是由 " +":func:`getfilesystemencoding` 返回的。" + +#: ../../library/sys.rst:668 +msgid "" +"Returns the current value for the :ref:`integer string conversion length " +"limitation `. See also :func:`set_int_max_str_digits`." +msgstr "" +"返回 :ref:`整数字符串转换长度限制 ` 的当前值。 另请参阅 " +":func:`set_int_max_str_digits`。" + +#: ../../library/sys.rst:676 +msgid "" +"Return the reference count of the *object*. The count returned is generally" +" one higher than you might expect, because it includes the (temporary) " +"reference as an argument to :func:`getrefcount`." +msgstr "" +"返回 *object* 的引用计数。返回的计数通常比预期的多一,因为它包括了作为 :func:`getrefcount` 参数的这一次(临时)引用。" + +#: ../../library/sys.rst:683 +msgid "" +"Return the current value of the recursion limit, the maximum depth of the " +"Python interpreter stack. This limit prevents infinite recursion from " +"causing an overflow of the C stack and crashing Python. It can be set by " +":func:`setrecursionlimit`." +msgstr "" +"返回当前的递归限制值,即 Python 解释器堆栈的最大深度。此限制可防止无限递归导致的 C 堆栈溢出和 Python 崩溃。该值可以通过 " +":func:`setrecursionlimit` 设置。" + +#: ../../library/sys.rst:691 +msgid "" +"Return the size of an object in bytes. The object can be any type of object." +" All built-in objects will return correct results, but this does not have to" +" hold true for third-party extensions as it is implementation specific." +msgstr "返回对象的大小(以字节为单位)。该对象可以是任何类型。所有内建对象返回的结果都是正确的,但对于第三方扩展不一定正确,因为这与具体实现有关。" + +#: ../../library/sys.rst:696 +msgid "" +"Only the memory consumption directly attributed to the object is accounted " +"for, not the memory consumption of objects it refers to." +msgstr "只计算直接分配给对象的内存消耗,不计算它所引用的对象的内存消耗。" + +#: ../../library/sys.rst:699 +msgid "" +"If given, *default* will be returned if the object does not provide means to" +" retrieve the size. Otherwise a :exc:`TypeError` will be raised." +msgstr "对象不提供计算大小的方法时,如果传入过 *default* 则返回它,否则抛出 :exc:`TypeError` 异常。" + +#: ../../library/sys.rst:702 +msgid "" +":func:`getsizeof` calls the object's ``__sizeof__`` method and adds an " +"additional garbage collector overhead if the object is managed by the " +"garbage collector." +msgstr "" +"如果对象由垃圾回收器管理,则 :func:`getsizeof` 将调用对象的 ``__sizeof__`` 方法,并在上层添加额外的垃圾回收器。" + +#: ../../library/sys.rst:706 +msgid "" +"See `recursive sizeof recipe `_" +" for an example of using :func:`getsizeof` recursively to find the size of " +"containers and all their contents." +msgstr "" +"可以参考 `recursive sizeof recipe " +"`_ 中的示例,关于递归调用 " +":func:`getsizeof` 来得到各个容器及其所有内容物的大小。" + +#: ../../library/sys.rst:712 +msgid "" +"Return the interpreter's \"thread switch interval\"; see " +":func:`setswitchinterval`." +msgstr "返回解释器的“线程切换间隔时间”,请参阅 :func:`setswitchinterval`。" + +#: ../../library/sys.rst:720 +msgid "" +"Return a frame object from the call stack. If optional integer *depth* is " +"given, return the frame object that many calls below the top of the stack. " +"If that is deeper than the call stack, :exc:`ValueError` is raised. The " +"default for *depth* is zero, returning the frame at the top of the call " +"stack." +msgstr "" +"返回来自调用栈的一个帧对象。如果传入可选整数 *depth*,则返回从栈顶往下相应调用层数的帧对象。如果该数比调用栈更深,则抛出 " +":exc:`ValueError`。*depth* 的默认值是 0,返回调用栈顶部的帧。" + +#: ../../library/sys.rst:725 +msgid "" +"Raises an :ref:`auditing event ` ``sys._getframe`` with no " +"arguments." +msgstr "引发一个 :ref:`审计事件 ` ``sys._getframe``,没有附带参数。" + +#: ../../library/sys.rst:729 +msgid "" +"This function should be used for internal and specialized purposes only. It " +"is not guaranteed to exist in all implementations of Python." +msgstr "这个函数应该只在内部为了一些特定的目的使用。不保证它在所有 Python 实现中都存在。" + +#: ../../library/sys.rst:739 +msgid "Get the profiler function as set by :func:`setprofile`." +msgstr "返回由 :func:`setprofile` 设置的性能分析函数。" + +#: ../../library/sys.rst:748 +msgid "Get the trace function as set by :func:`settrace`." +msgstr "返回由 :func:`settrace` 设置的跟踪函数。" + +#: ../../library/sys.rst:752 +msgid "" +"The :func:`gettrace` function is intended only for implementing debuggers, " +"profilers, coverage tools and the like. Its behavior is part of the " +"implementation platform, rather than part of the language definition, and " +"thus may not be available in all Python implementations." +msgstr "" +":func:`gettrace` 函数仅用于实现调试器,性能分析器,打包工具等。它的行为是实现平台的一部分,而不是语言定义的一部分,因此并非在所有 " +"Python 实现中都可用。" + +#: ../../library/sys.rst:760 +msgid "" +"Return a named tuple describing the Windows version currently running. The " +"named elements are *major*, *minor*, *build*, *platform*, *service_pack*, " +"*service_pack_minor*, *service_pack_major*, *suite_mask*, *product_type* and" +" *platform_version*. *service_pack* contains a string, *platform_version* a " +"3-tuple and all other values are integers. The components can also be " +"accessed by name, so ``sys.getwindowsversion()[0]`` is equivalent to " +"``sys.getwindowsversion().major``. For compatibility with prior versions, " +"only the first 5 elements are retrievable by indexing." +msgstr "" +"返回一个具名元组,描述当前正在运行的 Windows 版本。元素名称包括 *major*, *minor*, *build*, *platform*, " +"*service_pack*, *service_pack_minor*, *service_pack_major*, *suite_mask*, " +"*product_type* 和 *platform_version*。*service_pack* " +"包含一个字符串,*platform_version* 包含一个三元组,其他所有值都是整数。元素也可以通过名称来访问,所以 " +"``sys.getwindowsversion()[0]`` 与 ``sys.getwindowsversion().major`` " +"是等效的。为保持与旧版本的兼容性,只有前 5 个元素可以用索引检索。" + +#: ../../library/sys.rst:771 +msgid "*platform* will be :const:`2 (VER_PLATFORM_WIN32_NT)`." +msgstr "*platform* 将会是 :const:`2 (VER_PLATFORM_WIN32_NT)`。" + +#: ../../library/sys.rst:773 +msgid "*product_type* may be one of the following values:" +msgstr "*product_type* 可能是以下值之一:" + +#: ../../library/sys.rst:776 +msgid "Constant" +msgstr "常量" + +#: ../../library/sys.rst:776 +msgid "Meaning" +msgstr "含意" + +#: ../../library/sys.rst:778 +msgid ":const:`1 (VER_NT_WORKSTATION)`" +msgstr ":const:`1 (VER_NT_WORKSTATION)`" + +#: ../../library/sys.rst:778 +msgid "The system is a workstation." +msgstr "系统是工作站。" + +#: ../../library/sys.rst:780 +msgid ":const:`2 (VER_NT_DOMAIN_CONTROLLER)`" +msgstr ":const:`2 (VER_NT_DOMAIN_CONTROLLER)`" + +#: ../../library/sys.rst:780 +msgid "The system is a domain controller." +msgstr "系统是域控制器。" + +#: ../../library/sys.rst:783 +msgid ":const:`3 (VER_NT_SERVER)`" +msgstr ":const:`3 (VER_NT_SERVER)`" + +#: ../../library/sys.rst:783 +msgid "The system is a server, but not a domain controller." +msgstr "系统是服务器,但不是域控制器。" + +#: ../../library/sys.rst:787 +msgid "" +"This function wraps the Win32 :c:func:`GetVersionEx` function; see the " +"Microsoft documentation on :c:func:`OSVERSIONINFOEX` for more information " +"about these fields." +msgstr "" +"本函数包装了 Win32 :c:func:`GetVersionEx` 函数,参阅 Microsoft 文档有关 " +":c:func:`OSVERSIONINFOEX` 的内容可获取这些字段的更多信息。" + +#: ../../library/sys.rst:791 +msgid "" +"*platform_version* returns the major version, minor version and build number" +" of the current operating system, rather than the version that is being " +"emulated for the process. It is intended for use in logging rather than for " +"feature detection." +msgstr "" +"*platform_version* 返回当前操作系统的主要版本、次要版本和编译版本号,而不是为该进程所模拟的版本。 它旨在用于日志记录而非特性检测。" + +#: ../../library/sys.rst:797 +msgid "" +"*platform_version* derives the version from kernel32.dll which can be of a " +"different version than the OS version. Please use :mod:`platform` module for" +" achieving accurate OS version." +msgstr "" +"*platform_version* 会从 kernel32.dll 获取版本号,这个版本可能与 OS 版本不同。 请使用 " +":mod:`platform` 模块来获取准确的 OS 版本号。" + +#: ../../library/sys.rst:803 +msgid "" +"Changed to a named tuple and added *service_pack_minor*, " +"*service_pack_major*, *suite_mask*, and *product_type*." +msgstr "" +"更改为具名元组,添加 *service_pack_minor*, *service_pack_major*, *suite_mask* 和 " +"*product_type*。" + +#: ../../library/sys.rst:807 +msgid "Added *platform_version*" +msgstr "添加了 *platform_version*" + +#: ../../library/sys.rst:813 +msgid "" +"Returns an *asyncgen_hooks* object, which is similar to a " +":class:`~collections.namedtuple` of the form `(firstiter, finalizer)`, where" +" *firstiter* and *finalizer* are expected to be either ``None`` or functions" +" which take an :term:`asynchronous generator iterator` as an argument, and " +"are used to schedule finalization of an asynchronous generator by an event " +"loop." +msgstr "" +"返回一个 *asyncgen_hooks* 对象,该对象类似于 " +":class:`~collections.namedtuple`,形式为 `(firstiter, finalizer)`,其中 *firstiter*" +" 和 *finalizer* 为 ``None`` 或函数,函数以 :term:`异步生成器迭代器 ` 作为参数,并用于在事件循环中干预异步生成器的终结。" + +#: ../../library/sys.rst:820 +msgid "See :pep:`525` for more details." +msgstr "详情请参阅 :pep:`525`。" + +#: ../../library/sys.rst:824 ../../library/sys.rst:1449 +msgid "" +"This function has been added on a provisional basis (see :pep:`411` for " +"details.)" +msgstr "本函数已添加至暂定软件包(详情请参阅 :pep:`411` )。" + +#: ../../library/sys.rst:830 +msgid "" +"Get the current coroutine origin tracking depth, as set by " +":func:`set_coroutine_origin_tracking_depth`." +msgstr "获取由 :func:`set_coroutine_origin_tracking_depth` 设置的协程来源的追踪深度。" + +#: ../../library/sys.rst:836 ../../library/sys.rst:1470 +msgid "" +"This function has been added on a provisional basis (see :pep:`411` for " +"details.) Use it only for debugging purposes." +msgstr "本函数已添加至暂定软件包(详情请参阅 :pep:`411` )。仅将其用于调试目的。" + +#: ../../library/sys.rst:842 +msgid "" +"A :term:`named tuple` giving parameters of the numeric hash implementation." +" For more details about hashing of numeric types, see :ref:`numeric-hash`." +msgstr "" +"一个 :term:`具名元组 `,给出数字类型的哈希的实现参数。关于数字类型的哈希的详情请参阅 :ref:`numeric-" +"hash`。" + +#: ../../library/sys.rst:849 +msgid ":const:`width`" +msgstr ":const:`width`" + +#: ../../library/sys.rst:849 +msgid "width in bits used for hash values" +msgstr "用于哈希值的位宽度" + +#: ../../library/sys.rst:851 +msgid ":const:`modulus`" +msgstr ":const:`modulus`" + +#: ../../library/sys.rst:851 +msgid "prime modulus P used for numeric hash scheme" +msgstr "用于数字散列方案的素数模数P。" + +#: ../../library/sys.rst:853 +msgid ":const:`inf`" +msgstr ":const:`inf`" + +#: ../../library/sys.rst:853 +msgid "hash value returned for a positive infinity" +msgstr "为正无穷大返回的哈希值" + +#: ../../library/sys.rst:855 +msgid ":const:`nan`" +msgstr ":const:`nan`" + +#: ../../library/sys.rst:855 +msgid "hash value returned for a nan" +msgstr "为nan返回的哈希值" + +#: ../../library/sys.rst:857 +msgid ":const:`imag`" +msgstr ":const:`imag`" + +#: ../../library/sys.rst:857 +msgid "multiplier used for the imaginary part of a complex number" +msgstr "用于复数虚部的乘数" + +#: ../../library/sys.rst:860 +msgid ":const:`algorithm`" +msgstr ":const:`algorithm`" + +#: ../../library/sys.rst:860 +msgid "name of the algorithm for hashing of str, bytes, and memoryview" +msgstr "字符串、字节和内存视图的哈希算法的名称" + +#: ../../library/sys.rst:863 +msgid ":const:`hash_bits`" +msgstr ":const:`hash_bits`" + +#: ../../library/sys.rst:863 +msgid "internal output size of the hash algorithm" +msgstr "哈希算法的内部输出大小。" + +#: ../../library/sys.rst:865 +msgid ":const:`seed_bits`" +msgstr ":const:`seed_bits`" + +#: ../../library/sys.rst:865 +msgid "size of the seed key of the hash algorithm" +msgstr "散列算法的种子密钥的大小" + +#: ../../library/sys.rst:871 +msgid "Added *algorithm*, *hash_bits* and *seed_bits*" +msgstr "添加了 *algorithm*, *hash_bits* 和 *seed_bits*" + +#: ../../library/sys.rst:877 +msgid "" +"The version number encoded as a single integer. This is guaranteed to " +"increase with each version, including proper support for non-production " +"releases. For example, to test that the Python interpreter is at least " +"version 1.5.2, use::" +msgstr "" +"编码为单个整数的版本号。该整数会确保每个版本都自增,其中适当包括了未发布版本。举例来说,要测试 Python 解释器的版本不低于 1.5.2,请使用::" + +#: ../../library/sys.rst:888 +msgid "" +"This is called ``hexversion`` since it only really looks meaningful when " +"viewed as the result of passing it to the built-in :func:`hex` function. " +"The :term:`named tuple` :data:`sys.version_info` may be used for a more " +"human-friendly encoding of the same information." +msgstr "" +"之所以称它为 ``hexversion``,是因为只有将它传入内置函数 :func:`hex` 后,其结果才看起来有意义。也可以使用 " +":term:`具名元组 ` :data:`sys.version_info`,它对相同信息有着更人性化的编码。" + +#: ../../library/sys.rst:893 +msgid "More details of ``hexversion`` can be found at :ref:`apiabiversion`." +msgstr "关于 ``hexversion`` 的更多信息可以在 :ref:`apiabiversion` 中找到。" + +#: ../../library/sys.rst:898 +msgid "" +"An object containing information about the implementation of the currently " +"running Python interpreter. The following attributes are required to exist " +"in all Python implementations." +msgstr "一个对象,该对象包含当前运行的 Python 解释器的实现信息。所有 Python 实现中都必须存在下列属性。" + +#: ../../library/sys.rst:902 +msgid "" +"*name* is the implementation's identifier, e.g. ``'cpython'``. The actual " +"string is defined by the Python implementation, but it is guaranteed to be " +"lower case." +msgstr "*name* 是当前实现的标识符,如 ``'cpython'``。实际的字符串由 Python 实现定义,但保证是小写字母。" + +#: ../../library/sys.rst:906 +msgid "" +"*version* is a named tuple, in the same format as :data:`sys.version_info`." +" It represents the version of the Python *implementation*. This has a " +"distinct meaning from the specific version of the Python *language* to which" +" the currently running interpreter conforms, which ``sys.version_info`` " +"represents. For example, for PyPy 1.8 ``sys.implementation.version`` might " +"be ``sys.version_info(1, 8, 0, 'final', 0)``, whereas ``sys.version_info`` " +"would be ``sys.version_info(2, 7, 2, 'final', 0)``. For CPython they are " +"the same value, since it is the reference implementation." +msgstr "" +"*version* 是一个具名元组,格式与 :data:`sys.version_info` 相同。它表示 Python *实现* 的版本。 另一个(由" +" ``sys.version_info`` 表示)是当前解释器遵循的相应 Python *语言* 的版本,两者具有不同的含义。 例如,对于 PyPy " +"1.8,``sys.implementation.version`` 可能是 ``sys.version_info(1, 8, 0, 'final', " +"0)``,而 ``sys.version_info`` 则是 ``sys.version_info(2, 7, 2, 'final', 0)``。对于 " +"CPython 而言两个值是相同的,因为它是参考实现。" + +#: ../../library/sys.rst:916 +msgid "" +"*hexversion* is the implementation version in hexadecimal format, like " +":data:`sys.hexversion`." +msgstr "*hexversion* 是十六进制的实现版本,类似于 :data:`sys.hexversion`。" + +#: ../../library/sys.rst:919 +msgid "" +"*cache_tag* is the tag used by the import machinery in the filenames of " +"cached modules. By convention, it would be a composite of the " +"implementation's name and version, like ``'cpython-33'``. However, a Python" +" implementation may use some other value if appropriate. If ``cache_tag`` " +"is set to ``None``, it indicates that module caching should be disabled." +msgstr "" +"*cache_tag* 是导入机制使用的标记,用于已缓存模块的文件名。按照惯例,它将由实现的名称和版本组成,如 " +"``'cpython-33'``。但如果合适,Python 实现可以使用其他值。如果 ``cache_tag`` 被置为 " +"``None``,表示模块缓存已禁用。" + +#: ../../library/sys.rst:926 +msgid "" +":data:`sys.implementation` may contain additional attributes specific to the" +" Python implementation. These non-standard attributes must start with an " +"underscore, and are not described here. Regardless of its contents, " +":data:`sys.implementation` will not change during a run of the interpreter, " +"nor between implementation versions. (It may change between Python language" +" versions, however.) See :pep:`421` for more information." +msgstr "" +":data:`sys.implementation` 可能包含相应 Python " +"实现的其他属性。这些非标准属性必须以下划线开头,此处不详细阐述。无论其内容如何,:data:`sys.implementation` " +"在解释器运行期间或不同实现版本之间都不会更改。(但是不同 Python 语言版本间可能会不同。)详情请参阅 :pep:`421`。" + +#: ../../library/sys.rst:937 +msgid "" +"The addition of new required attributes must go through the normal PEP " +"process. See :pep:`421` for more information." +msgstr "新的必要属性的添加必须经过常规的 PEP 过程。详情请参阅 :pep:`421`。" + +#: ../../library/sys.rst:942 +msgid "" +"A :term:`named tuple` that holds information about Python's internal " +"representation of integers. The attributes are read only." +msgstr "一个 :term:`具名元组 `,包含 Python 内部整数表示形式的信息。这些属性是只读的。" + +#: ../../library/sys.rst:948 ../../library/sys.rst:1579 +msgid "Attribute" +msgstr "属性" + +#: ../../library/sys.rst:948 ../../library/sys.rst:1579 +msgid "Explanation" +msgstr "说明" + +#: ../../library/sys.rst:950 +msgid ":const:`bits_per_digit`" +msgstr ":const:`bits_per_digit`" + +#: ../../library/sys.rst:950 +msgid "" +"number of bits held in each digit. Python integers are stored internally in" +" base ``2**int_info.bits_per_digit``" +msgstr "每个数字占有的位数。Python 内部将整数存储在基底 ``2**int_info.bits_per_digit``" + +#: ../../library/sys.rst:954 +msgid ":const:`sizeof_digit`" +msgstr ":const:`sizeof_digit`" + +#: ../../library/sys.rst:954 +msgid "size in bytes of the C type used to represent a digit" +msgstr "用于表示数字的C类型的字节大小" + +#: ../../library/sys.rst:957 +msgid ":const:`default_max_str_digits`" +msgstr ":const:`default_max_str_digits`" + +#: ../../library/sys.rst:957 +msgid "" +"default value for :func:`sys.get_int_max_str_digits` when it is not " +"otherwise explicitly configured." +msgstr ":func:`sys.get_int_max_str_digits` 在未被显式配置时将使用的默认值。" + +#: ../../library/sys.rst:961 +msgid ":const:`str_digits_check_threshold`" +msgstr ":const:`str_digits_check_threshold`" + +#: ../../library/sys.rst:961 +msgid "" +"minimum non-zero value for :func:`sys.set_int_max_str_digits`, " +":envvar:`PYTHONINTMAXSTRDIGITS`, or :option:`-X int_max_str_digits <-X>`." +msgstr "" +":func:`sys.set_int_max_str_digits`, :envvar:`PYTHONINTMAXSTRDIGITS` 或 " +":option:`-X int_max_str_digits <-X>` 的最小非零值。" + +#: ../../library/sys.rst:969 +msgid "Added ``default_max_str_digits`` and ``str_digits_check_threshold``." +msgstr "增加了 ``default_max_str_digits`` 和 ``str_digits_check_threshold``。" + +#: ../../library/sys.rst:975 +msgid "" +"When this attribute exists, its value is automatically called (with no " +"arguments) when the interpreter is launched in :ref:`interactive mode `. This is done after the :envvar:`PYTHONSTARTUP` file is read," +" so that you can set this hook there. The :mod:`site` module :ref:`sets " +"this `." +msgstr "" +"当本属性存在,则以 :ref:`交互模式 ` 启动解释器时,将自动(不带参数地)调用本属性的值。该过程是在读取 " +":envvar:`PYTHONSTARTUP` 文件之后完成的,所以可以在该文件中设置这一钩子。:mod:`site` 模块 :ref:`设置了这一属性" +" `。" + +#: ../../library/sys.rst:981 +msgid "" +"Raises an :ref:`auditing event ` ``cpython.run_interactivehook`` " +"with argument ``hook``." +msgstr "" +"引发一个 :ref:`审计事件 ` ``cpython.run_interactivehook``,附带参数 ``hook``。" + +#: ../../library/sys.rst:983 +msgid "" +"Raises an :ref:`auditing event ` ``cpython.run_interactivehook`` " +"with the hook object as the argument when the hook is called on startup." +msgstr "" +"如果在启动时调用了钩子,则引发一个 :ref:`审计事件 ` " +"``cpython.run_interactivehook``,附带参数为 hook 对象。" + +#: ../../library/sys.rst:992 +msgid "" +"Enter *string* in the table of \"interned\" strings and return the interned " +"string -- which is *string* itself or a copy. Interning strings is useful to" +" gain a little performance on dictionary lookup -- if the keys in a " +"dictionary are interned, and the lookup key is interned, the key comparisons" +" (after hashing) can be done by a pointer compare instead of a string " +"compare. Normally, the names used in Python programs are automatically " +"interned, and the dictionaries used to hold module, class or instance " +"attributes have interned keys." +msgstr "" +"将 *string* 插入 \"interned\" (驻留)字符串表,返回被插入的字符串 -- 它是 *string* " +"本身或副本。驻留字符串对提高字典查找的性能很有用 -- " +"如果字典中的键已驻留,且所查找的键也已驻留,则键(取散列后)的比较可以用指针代替字符串来比较。通常,Python " +"程序使用到的名称会被自动驻留,且用于保存模块、类或实例属性的字典的键也已驻留。" + +#: ../../library/sys.rst:1000 +msgid "" +"Interned strings are not immortal; you must keep a reference to the return " +"value of :func:`intern` around to benefit from it." +msgstr "驻留字符串不是永久存在的,对 :func:`intern` 返回值的引用必须保留下来,才能发挥驻留字符串的优势。" + +#: ../../library/sys.rst:1006 +msgid "" +"Return :const:`True` if the Python interpreter is :term:`shutting down " +"`, :const:`False` otherwise." +msgstr "" +"如果 Python 解释器 :term:`正在关闭 ` 则返回 :const:`True`,否则返回 " +":const:`False`。" + +#: ../../library/sys.rst:1016 +msgid "" +"These three variables are not always defined; they are set when an exception" +" is not handled and the interpreter prints an error message and a stack " +"traceback. Their intended use is to allow an interactive user to import a " +"debugger module and engage in post-mortem debugging without having to re-" +"execute the command that caused the error. (Typical use is ``import pdb; " +"pdb.pm()`` to enter the post-mortem debugger; see :mod:`pdb` module for more" +" information.)" +msgstr "" +"这三个变量并非总是有定义,仅当有异常未处理,且解释器打印了错误消息和堆栈回溯时,才会给它们赋值。它们的预期用途,是允许交互中的用户导入调试器模块,进行事后调试,而不必重新运行导致错误的命令。(通常使用" +" ``import pdb; pdb.pm()`` 进入事后调试器,详情请参阅 :mod:`pdb` 模块。)" + +#: ../../library/sys.rst:1024 +msgid "" +"The meaning of the variables is the same as that of the return values from " +":func:`exc_info` above." +msgstr "这些变量的含义与上述 :func:`exc_info` 返回值的含义相同。" + +#: ../../library/sys.rst:1030 +msgid "" +"An integer giving the maximum value a variable of type :c:type:`Py_ssize_t` " +"can take. It's usually ``2**31 - 1`` on a 32-bit platform and ``2**63 - 1``" +" on a 64-bit platform." +msgstr "" +"一个整数,表示 :c:type:`Py_ssize_t` 类型的变量可以取到的最大值。在 32 位平台上通常为 ``2**31 - 1``,在 64 " +"位平台上通常为 ``2**63 - 1``。" + +#: ../../library/sys.rst:1037 +msgid "" +"An integer giving the value of the largest Unicode code point, i.e. " +"``1114111`` (``0x10FFFF`` in hexadecimal)." +msgstr "一个整数,表示最大的 Unicode 码点值,如 ``1114111`` (十六进制为 ``0x10FFFF`` )。" + +#: ../../library/sys.rst:1040 +msgid "" +"Before :pep:`393`, ``sys.maxunicode`` used to be either ``0xFFFF`` or " +"``0x10FFFF``, depending on the configuration option that specified whether " +"Unicode characters were stored as UCS-2 or UCS-4." +msgstr "" +"在 :pep:`393` 之前,``sys.maxunicode`` 曾是 ``0xFFFF`` 或 " +"``0x10FFFF``,具体取决于配置选项,该选项指定将 Unicode 字符存储为 UCS-2 还是 UCS-4。" + +#: ../../library/sys.rst:1048 +msgid "" +"A list of :term:`meta path finder` objects that have their " +":meth:`~importlib.abc.MetaPathFinder.find_spec` methods called to see if one" +" of the objects can find the module to be imported. The " +":meth:`~importlib.abc.MetaPathFinder.find_spec` method is called with at " +"least the absolute name of the module being imported. If the module to be " +"imported is contained in a package, then the parent package's " +":attr:`__path__` attribute is passed in as a second argument. The method " +"returns a :term:`module spec`, or ``None`` if the module cannot be found." +msgstr "" +"一个由 :term:`元路径查找器 ` 对象组成的列表,当查找需要导入的模块时,会调用这些对象的 " +":meth:`~importlib.abc.MetaPathFinder.find_spec` 方法,观察这些对象是否能找到所需模块。调用 " +":meth:`~importlib.abc.MetaPathFinder.find_spec` " +"方法最少需要传入待导入模块的绝对名称。如果待导入模块包含在一个包中,则父包的 :attr:`__path__` 属性将作为第二个参数被传入。该方法返回 " +":term:`模块规格 `,找不到模块则返回 ``None``。" + +#: ../../library/sys.rst:1060 +msgid ":class:`importlib.abc.MetaPathFinder`" +msgstr ":class:`importlib.abc.MetaPathFinder`" + +#: ../../library/sys.rst:1060 +msgid "" +"The abstract base class defining the interface of finder objects on " +":data:`meta_path`." +msgstr "抽象基类,定义了 :data:`meta_path` 内的查找器对象的接口。" + +#: ../../library/sys.rst:1064 +msgid ":class:`importlib.machinery.ModuleSpec`" +msgstr ":class:`importlib.machinery.ModuleSpec`" + +#: ../../library/sys.rst:1063 +msgid "" +"The concrete class which :meth:`~importlib.abc.MetaPathFinder.find_spec` " +"should return instances of." +msgstr ":meth:`~importlib.abc.MetaPathFinder.find_spec` 返回的实例所对应的具体类。" + +#: ../../library/sys.rst:1069 +msgid "" +":term:`Module specs ` were introduced in Python 3.4, by " +":pep:`451`. Earlier versions of Python looked for a method called " +":meth:`~importlib.abc.MetaPathFinder.find_module`. This is still called as a" +" fallback if a :data:`meta_path` entry doesn't have a " +":meth:`~importlib.abc.MetaPathFinder.find_spec` method." +msgstr "" +"在 Python 3.4 中通过 :pep:`451` 引入了 :term:`模块规格 `。早期版本的 Python " +"会寻找一个称为 :meth:`~importlib.abc.MetaPathFinder.find_module` 的方法。如果某个 " +":data:`meta_path` 条目没有 :meth:`~importlib.abc.MetaPathFinder.find_spec` " +"方法,就会回退去调用前一种方法。" + +#: ../../library/sys.rst:1077 +msgid "" +"This is a dictionary that maps module names to modules which have already " +"been loaded. This can be manipulated to force reloading of modules and " +"other tricks. However, replacing the dictionary will not necessarily work as" +" expected and deleting essential items from the dictionary may cause Python " +"to fail." +msgstr "" +"一个字典,将模块名称映射到已加载的模块。可以操作该字典来强制重新加载模块,或是实现其他技巧。但是,替换的字典不一定会按预期工作,并且从字典中删除必要的项目可能会导致" +" Python 崩溃。" + +#: ../../library/sys.rst:1087 +msgid "" +"A list of strings that specifies the search path for modules. Initialized " +"from the environment variable :envvar:`PYTHONPATH`, plus an installation-" +"dependent default." +msgstr "" +"一个由字符串组成的列表,用于指定模块的搜索路径。初始化自环境变量 :envvar:`PYTHONPATH`,再加上一条与安装有关的默认路径。" + +#: ../../library/sys.rst:1091 +msgid "" +"As initialized upon program startup, the first item of this list, " +"``path[0]``, is the directory containing the script that was used to invoke " +"the Python interpreter. If the script directory is not available (e.g. if " +"the interpreter is invoked interactively or if the script is read from " +"standard input), ``path[0]`` is the empty string, which directs Python to " +"search modules in the current directory first. Notice that the script " +"directory is inserted *before* the entries inserted as a result of " +":envvar:`PYTHONPATH`." +msgstr "" +"程序启动时将初始化本列表,列表的第一项 ``path[0]`` 目录含有调用 Python " +"解释器的脚本。如果脚本目录不可用(比如以交互方式调用了解释器,或脚本是从标准输入中读取的),则 ``path[0]`` 为空字符串,这将导致 " +"Python 优先搜索当前目录中的模块。注意,脚本目录将插入在 :envvar:`PYTHONPATH` 的条目*之前*。" + +#: ../../library/sys.rst:1099 +msgid "" +"A program is free to modify this list for its own purposes. Only strings " +"and bytes should be added to :data:`sys.path`; all other data types are " +"ignored during import." +msgstr "" +"程序可以随意修改本列表用于自己的目的。只能向 :data:`sys.path` 中添加 string 和 bytes " +"类型,其他数据类型将在导入期间被忽略。" + +#: ../../library/sys.rst:1105 +msgid "" +"Module :mod:`site` This describes how to use .pth files to extend " +":data:`sys.path`." +msgstr ":mod:`site` 模块,该模块描述了如何使用 .pth 文件来扩展 :data:`sys.path`。" + +#: ../../library/sys.rst:1111 +msgid "" +"A list of callables that take a path argument to try to create a " +":term:`finder` for the path. If a finder can be created, it is to be " +"returned by the callable, else raise :exc:`ImportError`." +msgstr "" +"一个由可调用对象组成的列表,这些对象接受一个路径作为参数,并尝试为该路径创建一个 :term:`查找器 " +"`。如果成功创建查找器,则可调用对象将返回它,否则将引发 :exc:`ImportError` 异常。" + +#: ../../library/sys.rst:1115 ../../library/sys.rst:1126 +msgid "Originally specified in :pep:`302`." +msgstr "本特性最早在 :pep:`302` 中被提及。" + +#: ../../library/sys.rst:1120 +msgid "" +"A dictionary acting as a cache for :term:`finder` objects. The keys are " +"paths that have been passed to :data:`sys.path_hooks` and the values are the" +" finders that are found. If a path is a valid file system path but no finder" +" is found on :data:`sys.path_hooks` then ``None`` is stored." +msgstr "" +"一个字典,作为 :term:`查找器 ` 对象的缓存。key 是传入 :data:`sys.path_hooks` 的路径,value " +"是相应已找到的查找器。如果路径是有效的文件系统路径,但在 :data:`sys.path_hooks` 中未找到查找器,则存入 ``None``。" + +#: ../../library/sys.rst:1128 +msgid "" +"``None`` is stored instead of :class:`imp.NullImporter` when no finder is " +"found." +msgstr "未找到查找器时,改为存储 ``None``,而不是 :class:`imp.NullImporter`。" + +#: ../../library/sys.rst:1135 +msgid "" +"This string contains a platform identifier that can be used to append " +"platform-specific components to :data:`sys.path`, for instance." +msgstr "本字符串是一个平台标识符,举例而言,该标识符可用于将特定平台的组件追加到 :data:`sys.path` 中。" + +#: ../../library/sys.rst:1138 +msgid "" +"For Unix systems, except on Linux and AIX, this is the lowercased OS name as" +" returned by ``uname -s`` with the first part of the version as returned by " +"``uname -r`` appended, e.g. ``'sunos5'`` or ``'freebsd8'``, *at the time " +"when Python was built*. Unless you want to test for a specific system " +"version, it is therefore recommended to use the following idiom::" +msgstr "" +"对于 Unix 系统(除 Linux 和 AIX 外),该字符串是 *Python 构建时的* ``uname -s`` " +"返回的小写操作系统名称,并附加了 ``uname -r`` 返回的系统版本的第一部分,如 ``'sunos5'`` 或 " +"``'freebsd8'``。除非需要检测特定版本的系统,否则建议使用以下习惯用法::" + +#: ../../library/sys.rst:1151 +msgid "For other systems, the values are:" +msgstr "对于其他系统,值是:" + +#: ../../library/sys.rst:1154 +msgid "System" +msgstr "系统" + +#: ../../library/sys.rst:1154 +msgid "``platform`` value" +msgstr "``平台`` 值" + +#: ../../library/sys.rst:1156 +msgid "AIX" +msgstr "AIX" + +#: ../../library/sys.rst:1156 +msgid "``'aix'``" +msgstr "``'aix'``" + +#: ../../library/sys.rst:1157 +msgid "Linux" +msgstr "Linux" + +#: ../../library/sys.rst:1157 +msgid "``'linux'``" +msgstr "``'linux'``" + +#: ../../library/sys.rst:1158 +msgid "Windows" +msgstr "Windows" + +#: ../../library/sys.rst:1158 +msgid "``'win32'``" +msgstr "``'win32'``" + +#: ../../library/sys.rst:1159 +msgid "Windows/Cygwin" +msgstr "Windows/Cygwin" + +#: ../../library/sys.rst:1159 +msgid "``'cygwin'``" +msgstr "``'cygwin'``" + +#: ../../library/sys.rst:1160 +msgid "macOS" +msgstr "macOS" + +#: ../../library/sys.rst:1160 +msgid "``'darwin'``" +msgstr "``'darwin'``" + +#: ../../library/sys.rst:1163 +msgid "" +"On Linux, :attr:`sys.platform` doesn't contain the major version anymore. It" +" is always ``'linux'``, instead of ``'linux2'`` or ``'linux3'``. Since " +"older Python versions include the version number, it is recommended to " +"always use the ``startswith`` idiom presented above." +msgstr "" +"在 Linux 上,:attr:`sys.platform` 将不再包含副版本号。它将总是 ``'linux'`` 而不是 ``'linux2'`` 或" +" ``'linux3'``。由于旧版本的 Python 会包含该版本号,因此推荐总是使用上述 ``startswith`` 习惯用法。" + +#: ../../library/sys.rst:1169 +msgid "" +"On AIX, :attr:`sys.platform` doesn't contain the major version anymore. It " +"is always ``'aix'``, instead of ``'aix5'`` or ``'aix7'``. Since older " +"Python versions include the version number, it is recommended to always use " +"the ``startswith`` idiom presented above." +msgstr "" +"在 AIX 上,:attr:`sys.platform` 将不再包含副版本号。它将总是 ``'aix'`` 而不是 ``'aix5'`` 或 " +"``'aix7'``。由于旧版本的 Python 会包含该版本号,因此推荐总是使用上述 ``startswith`` 习惯用法。" + +#: ../../library/sys.rst:1177 +msgid "" +":attr:`os.name` has a coarser granularity. :func:`os.uname` gives system-" +"dependent version information." +msgstr ":attr:`os.name` 更加简略。:func:`os.uname` 提供系统的版本信息。" + +#: ../../library/sys.rst:1180 +msgid "" +"The :mod:`platform` module provides detailed checks for the system's " +"identity." +msgstr ":mod:`platform` 模块对系统的标识有更详细的检查。" + +#: ../../library/sys.rst:1186 +msgid "" +"Name of the platform-specific library directory. It is used to build the " +"path of standard library and the paths of installed extension modules." +msgstr "平台专用库目录。用于构建标准库的路径和已安装扩展模块的路径。" + +#: ../../library/sys.rst:1189 +msgid "" +"It is equal to ``\"lib\"`` on most platforms. On Fedora and SuSE, it is " +"equal to ``\"lib64\"`` on 64-bit platforms which gives the following " +"``sys.path`` paths (where ``X.Y`` is the Python ``major.minor`` version):" +msgstr "" +"在大多数平台上,它等同于 ``\"lib\"`` 。在 Fedora 和 SuSE 上,它等同于给出了以下 ``sys.path`` 路径的 64 " +"位平台上的 ``\"lib64\"`` (其中 ``X.Y`` 是 Python 的 ``major.minor`` 版本)。" + +#: ../../library/sys.rst:1193 +msgid "" +"``/usr/lib64/pythonX.Y/``: Standard library (like ``os.py`` of the :mod:`os`" +" module)" +msgstr "``/usr/lib64/pythonX.Y/``:标准库(如 :mod:`os` 模块的 ``os.py`` )" + +#: ../../library/sys.rst:1195 +msgid "" +"``/usr/lib64/pythonX.Y/lib-dynload/``: C extension modules of the standard " +"library (like the :mod:`errno` module, the exact filename is platform " +"specific)" +msgstr "" +"``/usr/lib64/pythonX.Y/lib-dynload/``:标准库的 C 扩展模块(如 :mod:`errno` " +"模块,确切的文件名取决于平台)" + +#: ../../library/sys.rst:1198 +msgid "" +"``/usr/lib/pythonX.Y/site-packages/`` (always use ``lib``, not " +":data:`sys.platlibdir`): Third-party modules" +msgstr "" +"``/usr/lib/pythonX.Y/site-packages/`` (请使用 ``lib``, 而非 " +":data:`sys.platlibdir`): 第三方模块" + +#: ../../library/sys.rst:1200 +msgid "" +"``/usr/lib64/pythonX.Y/site-packages/``: C extension modules of third-party " +"packages" +msgstr "``/usr/lib64/pythonX.Y/site-packages/``: 第三方包的 C 扩展模块" + +#: ../../library/sys.rst:1208 +msgid "" +"A string giving the site-specific directory prefix where the platform " +"independent Python files are installed; on Unix, the default is " +"``'/usr/local'``. This can be set at build time with the ``--prefix`` " +"argument to the :program:`configure` script. See :ref:`installation_paths` " +"for derived paths." +msgstr "" +"一个字符串,给出特定站点的目录前缀,用于安装与平台无关的 Python 文件;在 Unix 上,默认是 ``'/usr/local'`` " +"。这可以在构建时通过 :program:`configure` 脚本的 `--prefix` 参数来设置。 参见 " +":ref:`installation_paths` 以了解衍生路径。" + +#: ../../library/sys.rst:1214 +msgid "" +"If a :ref:`virtual environment ` is in effect, this value will be " +"changed in ``site.py`` to point to the virtual environment. The value for " +"the Python installation will still be available, via :data:`base_prefix`." +msgstr "" +"如果在一个 :ref:`虚拟环境 ` 中,那么该值将在 ``site.py`` 中被修改,指向虚拟环境。Python " +"安装位置仍然可以用 :data:`base_prefix` 来获取。" + +#: ../../library/sys.rst:1229 +msgid "" +"Strings specifying the primary and secondary prompt of the interpreter. " +"These are only defined if the interpreter is in interactive mode. Their " +"initial values in this case are ``'>>> '`` and ``'... '``. If a non-string " +"object is assigned to either variable, its :func:`str` is re-evaluated each " +"time the interpreter prepares to read a new interactive command; this can be" +" used to implement a dynamic prompt." +msgstr "" +"字符串,指定解释器的首要和次要提示符。仅当解释器处于交互模式时,它们才有定义。这种情况下,它们的初值为 ``'>>> '`` 和 ``'... " +"'``。如果赋给其中某个变量的是非字符串对象,则每次解释器准备读取新的交互式命令时,都会重新运行该对象的 " +":func:`str`,这可以用来实现动态的提示符。" + +#: ../../library/sys.rst:1239 +msgid "" +"Set the flags used by the interpreter for :c:func:`dlopen` calls, such as " +"when the interpreter loads extension modules. Among other things, this will" +" enable a lazy resolving of symbols when importing a module, if called as " +"``sys.setdlopenflags(0)``. To share symbols across extension modules, call " +"as ``sys.setdlopenflags(os.RTLD_GLOBAL)``. Symbolic names for the flag " +"values can be found in the :mod:`os` module (``RTLD_xxx`` constants, e.g. " +":data:`os.RTLD_LAZY`)." +msgstr "" +"设置解释器在调用 :c:func:`dlopen` 时用到的标志,例如解释器在加载扩展模块时。首先,调用 " +"``sys.setdlopenflags(0)`` 将在导入模块时对符号启用惰性解析。要在扩展模块之间共享符号,请调用 " +"``sys.setdlopenflags(os.RTLD_GLOBAL)``。标志值的符号名称可以在 :mod:`os` 模块中找到(即 " +"``RTLD_xxx`` 常量,如 :data:`os.RTLD_LAZY` )。" + +#: ../../library/sys.rst:1251 +msgid "" +"Set the :ref:`integer string conversion length limitation " +"` used by this interpreter. See also " +":func:`get_int_max_str_digits`." +msgstr "" +"设置解释器所使用的 :ref:`整数字符串转换长度限制 `。 另请参阅 " +":func:`get_int_max_str_digits`。" + +#: ../../library/sys.rst:1263 +msgid "" +"Set the system's profile function, which allows you to implement a Python " +"source code profiler in Python. See chapter :ref:`profile` for more " +"information on the Python profiler. The system's profile function is called" +" similarly to the system's trace function (see :func:`settrace`), but it is " +"called with different events, for example it isn't called for each executed " +"line of code (only on call and return, but the return event is reported even" +" when an exception has been set). The function is thread-specific, but there" +" is no way for the profiler to know about context switches between threads, " +"so it does not make sense to use this in the presence of multiple threads. " +"Also, its return value is not used, so it can simply return ``None``. Error" +" in the profile function will cause itself unset." +msgstr "" +"设置系统的性能分析函数,该函数使得在 Py​​thon 中能够实现一个 Python 源代码性能分析器。关于 Python Profiler " +"的更多信息请参阅 :ref:`profile` 章节。性能分析函数的调用方式类似于系统的跟踪函数(参阅 :func:`settrace` " +"),但它是通过不同的事件调用的,例如,不是每执行一行代码就调用它一次(仅在调用某函数和从某函数返回时才会调用性能分析函数,但即使某函数发生异常也会算作返回事件)。该函数是特定于单个线程的,但是性能分析器无法得知线程之间的上下文切换,因此在存在多个线程的情况下使用它是没有意义的。另外,因为它的返回值不会被用到,所以可以简单地返回" +" ``None``。性能分析函数中的错误将导致其自身被解除设置。" + +#: ../../library/sys.rst:1274 +msgid "" +"Profile functions should have three arguments: *frame*, *event*, and *arg*. " +"*frame* is the current stack frame. *event* is a string: ``'call'``, " +"``'return'``, ``'c_call'``, ``'c_return'``, or ``'c_exception'``. *arg* " +"depends on the event type." +msgstr "" +"性能分析函数应接收三个参数:*frame*、*event* 和 *arg*。*frame* 是当前的堆栈帧。*event* " +"是一个字符串:``'call'``、``'return'``、``'c_call'``、``'c_return'`` 或 " +"``'c_exception'``。*arg* 取决于事件类型。" + +#: ../../library/sys.rst:1279 +msgid "" +"Raises an :ref:`auditing event ` ``sys.setprofile`` with no " +"arguments." +msgstr "引发一个不带参数的 :ref:`审计事件 ` ``sys.setprofile``。" + +#: ../../library/sys.rst:1281 ../../library/sys.rst:1362 +msgid "The events have the following meaning:" +msgstr "这些事件具有以下含义:" + +#: ../../library/sys.rst:1285 ../../library/sys.rst:1367 +msgid "``'call'``" +msgstr "``'call'``" + +#: ../../library/sys.rst:1284 +msgid "" +"A function is called (or some other code block entered). The profile " +"function is called; *arg* is ``None``." +msgstr "表示调用了某个函数(或进入了其他的代码块)。性能分析函数将被调用,*arg* 为 ``None``。" + +#: ../../library/sys.rst:1290 ../../library/sys.rst:1382 +msgid "``'return'``" +msgstr "``'return'``" + +#: ../../library/sys.rst:1288 +msgid "" +"A function (or other code block) is about to return. The profile function " +"is called; *arg* is the value that will be returned, or ``None`` if the " +"event is caused by an exception being raised." +msgstr "" +"表示某个函数(或别的代码块)即将返回。性能分析函数将被调用,*arg* 是即将返回的值,如果此次返回事件是由于抛出异常,*arg* 为 " +"``None``。" + +#: ../../library/sys.rst:1294 +msgid "``'c_call'``" +msgstr "``'c_call'``" + +#: ../../library/sys.rst:1293 +msgid "" +"A C function is about to be called. This may be an extension function or a " +"built-in. *arg* is the C function object." +msgstr "表示即将调用某个 C 函数。它可能是扩展函数或是内建函数。*arg* 是 C 函数对象。" + +#: ../../library/sys.rst:1297 +msgid "``'c_return'``" +msgstr "``'c_return'``" + +#: ../../library/sys.rst:1297 +msgid "A C function has returned. *arg* is the C function object." +msgstr "表示返回了某个 C 函数。*arg* 是 C 函数对象。" + +#: ../../library/sys.rst:1299 +msgid "``'c_exception'``" +msgstr "``'c_exception'``" + +#: ../../library/sys.rst:1300 +msgid "A C function has raised an exception. *arg* is the C function object." +msgstr "表示某个 C 函数抛出了异常。*arg* 是 C 函数对象。" + +#: ../../library/sys.rst:1304 +msgid "" +"Set the maximum depth of the Python interpreter stack to *limit*. This " +"limit prevents infinite recursion from causing an overflow of the C stack " +"and crashing Python." +msgstr "将 Python 解释器堆栈的最大深度设置为 *limit*。此限制可防止无限递归导致的 C 堆栈溢出和 Python 崩溃。" + +#: ../../library/sys.rst:1308 +msgid "" +"The highest possible limit is platform-dependent. A user may need to set " +"the limit higher when they have a program that requires deep recursion and a" +" platform that supports a higher limit. This should be done with care, " +"because a too-high limit can lead to a crash." +msgstr "" +"不同平台所允许的最高限值不同。当用户有需要深度递归的程序且平台支持更高的限值,可能就需要调高限值。进行该操作需要谨慎,因为过高的限值可能会导致崩溃。" + +#: ../../library/sys.rst:1313 +msgid "" +"If the new limit is too low at the current recursion depth, a " +":exc:`RecursionError` exception is raised." +msgstr "如果新的限值低于当前的递归深度,将抛出 :exc:`RecursionError` 异常。" + +#: ../../library/sys.rst:1316 +msgid "" +"A :exc:`RecursionError` exception is now raised if the new limit is too low " +"at the current recursion depth." +msgstr "如果新的限值低于当前的递归深度,现在将抛出 :exc:`RecursionError` 异常。" + +#: ../../library/sys.rst:1323 +msgid "" +"Set the interpreter's thread switch interval (in seconds). This floating-" +"point value determines the ideal duration of the \"timeslices\" allocated to" +" concurrently running Python threads. Please note that the actual value can" +" be higher, especially if long-running internal functions or methods are " +"used. Also, which thread becomes scheduled at the end of the interval is " +"the operating system's decision. The interpreter doesn't have its own " +"scheduler." +msgstr "" +"设置解释器的线程切换间隔时间(单位为秒)。该浮点数决定了“时间片”的理想持续时间,时间片将分配给同时运行的 Python " +"线程。请注意,实际值可能更高,尤其是使用了运行时间长的内部函数或方法时。同时,在时间间隔末尾调度哪个线程是操作系统的决定。解释器没有自己的调度程序。" + +#: ../../library/sys.rst:1340 +msgid "" +"Set the system's trace function, which allows you to implement a Python " +"source code debugger in Python. The function is thread-specific; for a " +"debugger to support multiple threads, it must register a trace function " +"using :func:`settrace` for each thread being debugged or use " +":func:`threading.settrace`." +msgstr "" +"设置系统的跟踪函数,使得用户在 Python 中就可以实现 Python " +"源代码调试器。该函数是特定于单个线程的,所以要让调试器支持多线程,必须为正在调试的每个线程都用 :func:`settrace` " +"注册一个跟踪函数,或使用 :func:`threading.settrace`。" + +#: ../../library/sys.rst:1345 +msgid "" +"Trace functions should have three arguments: *frame*, *event*, and *arg*. " +"*frame* is the current stack frame. *event* is a string: ``'call'``, " +"``'line'``, ``'return'``, ``'exception'`` or ``'opcode'``. *arg* depends on" +" the event type." +msgstr "" +"跟踪函数应接收三个参数:*frame*、*event* 和 *arg*。*frame* 是当前的堆栈帧。*event* " +"是一个字符串:``'call'``、``'line'``、``'return'``、``'exception'`` 或 " +"``'opcode'``。*arg* 取决于事件类型。" + +#: ../../library/sys.rst:1350 +msgid "" +"The trace function is invoked (with *event* set to ``'call'``) whenever a " +"new local scope is entered; it should return a reference to a local trace " +"function to be used for the new scope, or ``None`` if the scope shouldn't be" +" traced." +msgstr "" +"每次进入 trace 函数的新的局部作用范围,都会调用 trace 函数( *event* 会被设置为 ``'call'`` " +"),它应该返回一个引用,指向即将用在新作用范围上的局部跟踪函数;如果不需要跟踪当前的作用范围,则返回 ``None``。" + +#: ../../library/sys.rst:1355 +msgid "" +"The local trace function should return a reference to itself (or to another " +"function for further tracing in that scope), or ``None`` to turn off tracing" +" in that scope." +msgstr "" +"局部跟踪函数应返回对自身的引用(或对另一个函数的引用,用来在其作用范围内进行进一步的跟踪),或者返回 ``None`` 来停止跟踪其作用范围。" + +#: ../../library/sys.rst:1359 +msgid "" +"If there is any error occurred in the trace function, it will be unset, just" +" like ``settrace(None)`` is called." +msgstr "如果跟踪函数出错,则该跟踪函数将被取消设置,类似于调用 ``settrace(None)``。" + +#: ../../library/sys.rst:1365 +msgid "" +"A function is called (or some other code block entered). The global trace " +"function is called; *arg* is ``None``; the return value specifies the local " +"trace function." +msgstr "表示调用了某个函数(或进入了其他的代码块)。全局跟踪函数将被调用,*arg* 为 ``None``。返回值将指定局部跟踪函数。" + +#: ../../library/sys.rst:1376 +msgid "``'line'``" +msgstr "``'line'``" + +#: ../../library/sys.rst:1370 +msgid "" +"The interpreter is about to execute a new line of code or re-execute the " +"condition of a loop. The local trace function is called; *arg* is ``None``;" +" the return value specifies the new local trace function. See " +":file:`Objects/lnotab_notes.txt` for a detailed explanation of how this " +"works. Per-line events may be disabled for a frame by setting " +":attr:`f_trace_lines` to :const:`False` on that frame." +msgstr "" +"表示解释器即将执行新一行代码或重新执行循环条件。局部跟踪函数将被调用,*arg* 为 " +"``None``,其返回值将指定新的局部跟踪函数。关于其工作原理的详细说明,请参见 " +":file:`Objects/lnotab_notes.txt`。要在该堆栈帧禁用每行触发事件,可以在堆栈帧上将 " +":attr:`f_trace_lines` 设置为 :const:`False`。" + +#: ../../library/sys.rst:1379 +msgid "" +"A function (or other code block) is about to return. The local trace " +"function is called; *arg* is the value that will be returned, or ``None`` if" +" the event is caused by an exception being raised. The trace function's " +"return value is ignored." +msgstr "" +"表示某个函数(或别的代码块)即将返回。局部跟踪函数将被调用,*arg* 是即将返回的值,如果此次返回事件是由于抛出异常,*arg* 为 " +"``None``。跟踪函数的返回值将被忽略。" + +#: ../../library/sys.rst:1387 +msgid "``'exception'``" +msgstr "``'exception'``" + +#: ../../library/sys.rst:1385 +msgid "" +"An exception has occurred. The local trace function is called; *arg* is a " +"tuple ``(exception, value, traceback)``; the return value specifies the new " +"local trace function." +msgstr "" +"表示发生了某个异常。局部跟踪函数将被调用,*arg* 是一个 ``(exception, value, traceback)`` " +"元组,返回值将指定新的局部跟踪函数。" + +#: ../../library/sys.rst:1395 +msgid "``'opcode'``" +msgstr "``'opcode'``" + +#: ../../library/sys.rst:1390 +msgid "" +"The interpreter is about to execute a new opcode (see :mod:`dis` for opcode " +"details). The local trace function is called; *arg* is ``None``; the return" +" value specifies the new local trace function. Per-opcode events are not " +"emitted by default: they must be explicitly requested by setting " +":attr:`f_trace_opcodes` to :const:`True` on the frame." +msgstr "" +"表示解释器即将执行一个新的操作码(操作码的详情请参阅 :mod:`dis` )。局部跟踪函数将被调用,*arg* 为 " +"``None``,其返回值将指定新的局部跟踪函数。每操作码触发事件默认情况下都不发出:必须在堆栈帧上将 :attr:`f_trace_opcodes` " +"显式地设置为 :const:`True` 来请求这些事件。" + +#: ../../library/sys.rst:1397 +msgid "" +"Note that as an exception is propagated down the chain of callers, an " +"``'exception'`` event is generated at each level." +msgstr "注意,由于异常是在链式调用中传播的,所以每一级都会产生一个 ``'exception'`` 事件。" + +#: ../../library/sys.rst:1400 +msgid "" +"For more fine-grained usage, it's possible to set a trace function by " +"assigning ``frame.f_trace = tracefunc`` explicitly, rather than relying on " +"it being set indirectly via the return value from an already installed trace" +" function. This is also required for activating the trace function on the " +"current frame, which :func:`settrace` doesn't do. Note that in order for " +"this to work, a global tracing function must have been installed with " +":func:`settrace` in order to enable the runtime tracing machinery, but it " +"doesn't need to be the same tracing function (e.g. it could be a low " +"overhead tracing function that simply returns ``None`` to disable itself " +"immediately on each frame)." +msgstr "" +"更细微的用法是,可以显式地通过赋值 ``frame.f_trace = tracefunc`` " +"来设置跟踪函数,而不是用现有跟踪函数的返回值去间接设置它。当前帧上的跟踪函数必须激活,而 :func:`settrace` " +"还没有做这件事。注意,为了使上述设置起效,必须使用 :func:`settrace` " +"来安装全局跟踪函数才能启用运行时跟踪机制,但是它不必与上述是同一个跟踪函数(它可以是一个开销很低的跟踪函数,只返回 " +"``None``,即在各个帧上立即将其自身禁用)。" + +#: ../../library/sys.rst:1411 +msgid "For more information on code and frame objects, refer to :ref:`types`." +msgstr "关于代码对象和帧对象的更多信息请参考 :ref:`types`。" + +#: ../../library/sys.rst:1413 +msgid "" +"Raises an :ref:`auditing event ` ``sys.settrace`` with no " +"arguments." +msgstr "引发一个不带参数的 :ref:`审计事件 ` ``sys.settrace``。" + +#: ../../library/sys.rst:1417 +msgid "" +"The :func:`settrace` function is intended only for implementing debuggers, " +"profilers, coverage tools and the like. Its behavior is part of the " +"implementation platform, rather than part of the language definition, and " +"thus may not be available in all Python implementations." +msgstr "" +":func:`settrace` 函数仅用于实现调试器,性能分析器,打包工具等。它的行为是实现平台的一部分,而不是语言定义的一部分,因此并非在所有 " +"Python 实现中都可用。" + +#: ../../library/sys.rst:1424 +msgid "" +"``'opcode'`` event type added; :attr:`f_trace_lines` and " +":attr:`f_trace_opcodes` attributes added to frames" +msgstr "" +"添加了 ``'opcode'`` 事件类型;为帧对象添加了 :attr:`f_trace_lines` 和 " +":attr:`f_trace_opcodes` 属性" + +#: ../../library/sys.rst:1429 +msgid "" +"Accepts two optional keyword arguments which are callables that accept an " +":term:`asynchronous generator iterator` as an argument. The *firstiter* " +"callable will be called when an asynchronous generator is iterated for the " +"first time. The *finalizer* will be called when an asynchronous generator is" +" about to be garbage collected." +msgstr "" +"接受两个可选的关键字参数,要求它们是可调用对象,且接受一个 :term:`异步生成器迭代器 ` 作为参数。*firstiter* 对象将在异步生成器第一次迭代时调用。*finalizer* 将在异步生成器即将被销毁时调用。" + +#: ../../library/sys.rst:1435 +msgid "" +"Raises an :ref:`auditing event ` " +"``sys.set_asyncgen_hooks_firstiter`` with no arguments." +msgstr "" +"引发一个不带参数的 :ref:`审计事件 ` ``sys.set_asyncgen_hooks_firstiter``。" + +#: ../../library/sys.rst:1437 +msgid "" +"Raises an :ref:`auditing event ` " +"``sys.set_asyncgen_hooks_finalizer`` with no arguments." +msgstr "" +"引发一个不带参数的 :ref:`审计事件 ` ``sys.set_asyncgen_hooks_finalizer``。" + +#: ../../library/sys.rst:1439 +msgid "" +"Two auditing events are raised because the underlying API consists of two " +"calls, each of which must raise its own event." +msgstr "之所以会引发两个审计事件,是因为底层的 API 由两个调用组成,每个调用都须要引发自己的事件。" + +#: ../../library/sys.rst:1442 +msgid "" +"See :pep:`525` for more details, and for a reference example of a " +"*finalizer* method see the implementation of " +"``asyncio.Loop.shutdown_asyncgens`` in :source:`Lib/asyncio/base_events.py`" +msgstr "" +"更多详情请参阅 :pep:`525`,*finalizer* 方法的参考示例可参阅 " +":source:`Lib/asyncio/base_events.py` 中 ``asyncio.Loop.shutdown_asyncgens`` " +"的实现。" + +#: ../../library/sys.rst:1454 +msgid "" +"Allows enabling or disabling coroutine origin tracking. When enabled, the " +"``cr_origin`` attribute on coroutine objects will contain a tuple of " +"(filename, line number, function name) tuples describing the traceback where" +" the coroutine object was created, with the most recent call first. When " +"disabled, ``cr_origin`` will be None." +msgstr "" +"用于启用或禁用协程溯源。启用后,协程对象上的 ``cr_origin`` 属性将包含一个元组,它由多个(文件名 filename,行号 line " +"number,函数名 function " +"name)元组组成,整个元组描述出了协程对象创建过程的回溯,元组首端是最近一次的调用。禁用后,``cr_origin`` 将为 None。" + +#: ../../library/sys.rst:1461 +msgid "" +"To enable, pass a *depth* value greater than zero; this sets the number of " +"frames whose information will be captured. To disable, pass set *depth* to " +"zero." +msgstr "要启用,请向 *depth* 传递一个大于零的值,它指定了有多少帧将被捕获信息。要禁用,请将 *depth* 置为零。" + +#: ../../library/sys.rst:1465 +msgid "This setting is thread-specific." +msgstr "该设置是特定于单个线程的。" + +#: ../../library/sys.rst:1475 +msgid "" +"Changes the default filesystem encoding and errors mode to 'mbcs' and " +"'replace' respectively, for consistency with versions of Python prior to " +"3.6." +msgstr "将默认文件系统编码和错误处理方案分别更改为 'mbcs' 和 'replace',这是为了与 Python 3.6 前的版本保持一致。" + +#: ../../library/sys.rst:1478 +msgid "" +"This is equivalent to defining the :envvar:`PYTHONLEGACYWINDOWSFSENCODING` " +"environment variable before launching Python." +msgstr "这等同于在启动 Python 前先定义好 :envvar:`PYTHONLEGACYWINDOWSFSENCODING` 环境变量。" + +#: ../../library/sys.rst:1483 +msgid "See :pep:`529` for more details." +msgstr "更多详情请参阅 :pep:`529`。" + +#: ../../library/sys.rst:1490 +msgid "" +":term:`File objects ` used by the interpreter for standard " +"input, output and errors:" +msgstr "解释器用于标准输入、标准输出和标准错误的 :term:`文件对象 `:" + +#: ../../library/sys.rst:1493 +msgid "" +"``stdin`` is used for all interactive input (including calls to " +":func:`input`);" +msgstr "``stdin`` 用于所有交互式输入(包括对 :func:`input` 的调用);" + +#: ../../library/sys.rst:1495 +msgid "" +"``stdout`` is used for the output of :func:`print` and :term:`expression` " +"statements and for the prompts of :func:`input`;" +msgstr "" +"``stdout`` 用于 :func:`print` 和 :term:`expression` 语句的输出,以及用于 :func:`input` " +"的提示符;" + +#: ../../library/sys.rst:1497 +msgid "The interpreter's own prompts and its error messages go to ``stderr``." +msgstr "解释器自身的提示符和它的错误消息都发往 ``stderr``。" + +#: ../../library/sys.rst:1499 +msgid "" +"These streams are regular :term:`text files ` like those returned" +" by the :func:`open` function. Their parameters are chosen as follows:" +msgstr "这些流都是常规 :term:`文本文件 `,与 :func:`open` 函数返回的对象一致。它们的参数选择如下:" + +#: ../../library/sys.rst:1503 +msgid "" +"The character encoding is platform-dependent. Non-Windows platforms use the" +" locale encoding (see :meth:`locale.getpreferredencoding()`)." +msgstr "" +"字符编码取决于各个平台。在非 Windows 平台上使用的是语言环境 (locale) 编码(可参阅 " +":meth:`locale.getpreferredencoding()` )。" + +#: ../../library/sys.rst:1507 +msgid "" +"On Windows, UTF-8 is used for the console device. Non-character devices " +"such as disk files and pipes use the system locale encoding (i.e. the ANSI " +"codepage). Non-console character devices such as NUL (i.e. where " +"``isatty()`` returns ``True``) use the value of the console input and output" +" codepages at startup, respectively for stdin and stdout/stderr. This " +"defaults to the system locale encoding if the process is not initially " +"attached to a console." +msgstr "" +"在 Windows 上,控制台设备使用 UTF-8 编码。非字符设备(如磁盘文件和管道)使用系统语言环境编码(即 ANSI " +"代码页)。非控制台字符设备(即 ``isatty()`` 返回的是 ``True``,如 NUL)在启动时,会把控制台输入代码页和输出代码页的值分别用于" +" stdin 和 stdout/stderr。如果进程原本没有附加到控制台,则默认为系统语言环境编码。" + +#: ../../library/sys.rst:1516 +msgid "" +"The special behaviour of the console can be overridden by setting the " +"environment variable PYTHONLEGACYWINDOWSSTDIO before starting Python. In " +"that case, the console codepages are used as for any other character device." +msgstr "" +"要重写控制台的特殊行为,可以在启动 Python 前设置 PYTHONLEGACYWINDOWSSTDIO " +"环境变量。此时,控制台代码页将用于其他字符设备。" + +#: ../../library/sys.rst:1521 +msgid "" +"Under all platforms, you can override the character encoding by setting the " +":envvar:`PYTHONIOENCODING` environment variable before starting Python or by" +" using the new :option:`-X` ``utf8`` command line option and " +":envvar:`PYTHONUTF8` environment variable. However, for the Windows " +"console, this only applies when :envvar:`PYTHONLEGACYWINDOWSSTDIO` is also " +"set." +msgstr "" +"在所有平台上,都可以通过在 Python 启动前设置 :envvar:`PYTHONIOENCODING` 环境变量来重写字符编码,或通过新的 " +":option:`-X` ``utf8`` 命令行选项和 :envvar:`PYTHONUTF8` 环境变量来设置。但是,对 Windows " +"控制台来说,上述方法仅在设置了 :envvar:`PYTHONLEGACYWINDOWSSTDIO` 后才起效。" + +#: ../../library/sys.rst:1528 +msgid "" +"When interactive, the ``stdout`` stream is line-buffered. Otherwise, it is " +"block-buffered like regular text files. The ``stderr`` stream is line-" +"buffered in both cases. You can make both streams unbuffered by passing the" +" :option:`-u` command-line option or setting the :envvar:`PYTHONUNBUFFERED` " +"environment variable." +msgstr "" +"交互模式下,``stdout`` 流是行缓冲的。其他情况下,它像常规文本文件一样是块缓冲的。两种情况下的 ``stderr`` " +"流都是行缓冲的。要使得两个流都变成无缓冲,可以传入 :option:`-u` 命令行选项或设置 :envvar:`PYTHONUNBUFFERED` " +"环境变量。" + +#: ../../library/sys.rst:1534 +msgid "" +"Non-interactive ``stderr`` is now line-buffered instead of fully buffered." +msgstr "非交互模式下,``stderr`` 现在是行缓冲的,而不是全缓冲的。" + +#: ../../library/sys.rst:1540 +msgid "" +"To write or read binary data from/to the standard streams, use the " +"underlying binary :data:`~io.TextIOBase.buffer` object. For example, to " +"write bytes to :data:`stdout`, use ``sys.stdout.buffer.write(b'abc')``." +msgstr "" +"要从标准流写入或读取二进制数据,请使用底层二进制 :data:`~io.TextIOBase.buffer` 对象。例如,要将字节写入 " +":data:`stdout`,请使用 ``sys.stdout.buffer.write(b'abc')``。" + +#: ../../library/sys.rst:1544 +msgid "" +"However, if you are writing a library (and do not control in which context " +"its code will be executed), be aware that the standard streams may be " +"replaced with file-like objects like :class:`io.StringIO` which do not " +"support the :attr:`~io.BufferedIOBase.buffer` attribute." +msgstr "" +"但是,如果你在写一个库(并且不限制执行库代码时的上下文),那么请注意,标准流可能会被替换为文件类对象,如 " +":class:`io.StringIO`,它们是不支持 :attr:`~io.BufferedIOBase.buffer` 属性的。" + +#: ../../library/sys.rst:1554 +msgid "" +"These objects contain the original values of ``stdin``, ``stderr`` and " +"``stdout`` at the start of the program. They are used during finalization, " +"and could be useful to print to the actual standard stream no matter if the " +"``sys.std*`` object has been redirected." +msgstr "" +"程序开始时,这些对象存有 ``stdin``、``stderr`` 和 ``stdout`` " +"的初始值。它们在程序结束前都可以使用,且在需要向实际的标准流打印内容时很有用,无论 ``sys.std*`` 对象是否已重定向。" + +#: ../../library/sys.rst:1559 +msgid "" +"It can also be used to restore the actual files to known working file " +"objects in case they have been overwritten with a broken object. However, " +"the preferred way to do this is to explicitly save the previous stream " +"before replacing it, and restore the saved object." +msgstr "" +"如果实际文件已经被覆盖成一个损坏的对象了,那它也可用于将实际文件还原成能正常工作的文件对象。但是,本过程的最佳方法应该是,在原来的流被替换之前就显式地保存它,并使用这一保存的对象来还原。" + +#: ../../library/sys.rst:1565 +msgid "" +"Under some conditions ``stdin``, ``stdout`` and ``stderr`` as well as the " +"original values ``__stdin__``, ``__stdout__`` and ``__stderr__`` can be " +"``None``. It is usually the case for Windows GUI apps that aren't connected " +"to a console and Python apps started with :program:`pythonw`." +msgstr "" +"某些情况下的 ``stdin``、``stdout`` 和 ``stderr`` 以及初始值 ``__stdin__``、``__stdout__`` " +"和 ``__stderr__`` 可以是 ``None``。通常发生在未连接到控制台的 Windows GUI app 中,以及在用 " +":program:`pythonw` 启动的 Python app 中。" + +#: ../../library/sys.rst:1573 +msgid "" +"A :term:`named tuple` holding information about the thread implementation." +msgstr "一个 :term:`具名元组 `,包含线程实现的信息。" + +#: ../../library/sys.rst:1581 +msgid ":const:`name`" +msgstr ":const:`name`" + +#: ../../library/sys.rst:1581 +msgid "Name of the thread implementation:" +msgstr "线程实现的名称:" + +#: ../../library/sys.rst:1583 +msgid "``'nt'``: Windows threads" +msgstr "``'nt'``: Windows 线程" + +#: ../../library/sys.rst:1584 +msgid "``'pthread'``: POSIX threads" +msgstr "``'pthread'``: POSIX 线程" + +#: ../../library/sys.rst:1585 +msgid "``'solaris'``: Solaris threads" +msgstr "``'solaris'``: Solaris 线程" + +#: ../../library/sys.rst:1587 +msgid ":const:`lock`" +msgstr ":const:`lock`" + +#: ../../library/sys.rst:1587 +msgid "Name of the lock implementation:" +msgstr "锁实现的名称:" + +#: ../../library/sys.rst:1589 +msgid "``'semaphore'``: a lock uses a semaphore" +msgstr "``'semaphore'``: 锁使用信号量" + +#: ../../library/sys.rst:1590 +msgid "``'mutex+cond'``: a lock uses a mutex and a condition variable" +msgstr "``'mutex+cond'``: 锁使用互斥和条件变量" + +#: ../../library/sys.rst:1592 +msgid "``None`` if this information is unknown" +msgstr "``None`` 如果此信息未知" + +#: ../../library/sys.rst:1594 +msgid ":const:`version`" +msgstr ":const:`version`" + +#: ../../library/sys.rst:1594 +msgid "" +"Name and version of the thread library. It is a string, or ``None`` if this " +"information is unknown." +msgstr "线程库的名称和版本。它是一个字符串,如果此信息未知,则为 ``None`` 。" + +#: ../../library/sys.rst:1603 +msgid "" +"When this variable is set to an integer value, it determines the maximum " +"number of levels of traceback information printed when an unhandled " +"exception occurs. The default is ``1000``. When set to ``0`` or less, all " +"traceback information is suppressed and only the exception type and value " +"are printed." +msgstr "" +"当该变量值设置为整数,在发生未处理的异常时,它将决定打印的回溯信息的最大层级数。默认为 ``1000``。当将其设置为 ``0`` 或小于 " +"0,将关闭所有回溯信息,并且只打印异常类型和异常值。" + +#: ../../library/sys.rst:1611 +msgid "Handle an unraisable exception." +msgstr "处理一个无法抛出的异常。" + +#: ../../library/sys.rst:1613 +msgid "" +"Called when an exception has occurred but there is no way for Python to " +"handle it. For example, when a destructor raises an exception or during " +"garbage collection (:func:`gc.collect`)." +msgstr "" +"它会在发生了一个异常但 Python 没有办法处理时被调用。例如,当一个析构器引发了异常,或在垃圾回收 (:func:`gc.collect`) " +"期间引发了异常。" + +#: ../../library/sys.rst:1617 +msgid "The *unraisable* argument has the following attributes:" +msgstr "*unraisable* 参数具有以下属性:" + +#: ../../library/sys.rst:1619 +msgid "*exc_type*: Exception type." +msgstr "*exc_type*: 异常类型" + +#: ../../library/sys.rst:1620 +msgid "*exc_value*: Exception value, can be ``None``." +msgstr "*exc_value*: 异常值,可以是 ``None``." + +#: ../../library/sys.rst:1621 +msgid "*exc_traceback*: Exception traceback, can be ``None``." +msgstr "*exc_traceback*: 异常回溯,可以是 ``None``." + +#: ../../library/sys.rst:1622 +msgid "*err_msg*: Error message, can be ``None``." +msgstr "*err_msg*: 错误信息,可以是 ``None``." + +#: ../../library/sys.rst:1623 +msgid "*object*: Object causing the exception, can be ``None``." +msgstr "*object*: 导致异常的对象,可以为 ``None``." + +#: ../../library/sys.rst:1625 +msgid "" +"The default hook formats *err_msg* and *object* as: ``f'{err_msg}: " +"{object!r}'``; use \"Exception ignored in\" error message if *err_msg* is " +"``None``." +msgstr "" +"默认的钩子程序会将 *err_msg* 和 *object* 格式化为: ``f'{err_msg}: {object!r}'``;如果 " +"*err_msg* 为 ``None`` 则采用 \"Exception ignored in\" 错误信息。" + +#: ../../library/sys.rst:1629 +msgid "" +":func:`sys.unraisablehook` can be overridden to control how unraisable " +"exceptions are handled." +msgstr "要改变无法抛出的异常的处理过程,可以重写 :func:`sys.unraisablehook`。" + +#: ../../library/sys.rst:1632 +msgid "" +"Storing *exc_value* using a custom hook can create a reference cycle. It " +"should be cleared explicitly to break the reference cycle when the exception" +" is no longer needed." +msgstr "使用定制钩子存放 *exc_value* 可能会创建引用循环。 它应当在不再需要异常时被显式地清空以打破引用循环。" + +#: ../../library/sys.rst:1636 +msgid "" +"Storing *object* using a custom hook can resurrect it if it is set to an " +"object which is being finalized. Avoid storing *object* after the custom " +"hook completes to avoid resurrecting objects." +msgstr "" +"如果一个 *object* 正在被销毁,那么使用自定义的钩子储存该对象可能会将其复活。请在自定义钩子生效后避免储存 *object*,以避免对象的复活。" + +#: ../../library/sys.rst:1640 +msgid "See also :func:`excepthook` which handles uncaught exceptions." +msgstr "另请参阅 :func:`excepthook`,它处理未捕获的异常。" + +#: ../../library/sys.rst:1642 +msgid "" +"Raises an :ref:`auditing event ` ``sys.unraisablehook`` with " +"arguments ``hook``, ``unraisable``." +msgstr "引发一个审计事件 ``sys.unraisablehook`` 并附带参数 ``hook``, ``unraisable``。" + +#: ../../library/sys.rst:1644 +msgid "" +"Raise an auditing event ``sys.unraisablehook`` with arguments ``hook``, " +"``unraisable`` when an exception that cannot be handled occurs. The " +"``unraisable`` object is the same as what will be passed to the hook. If no " +"hook has been set, ``hook`` may be ``None``." +msgstr "" +"当发生无法处理的异常时,将引发一个审计事件 ``sys.unraisablehook``,附带参数 ``hook``、``unraisable``。其中" +" ``unraisable`` 对象与传递给钩子的对象相同。如果没有设置钩子,那么 ``hook`` 可能是 ``None``。" + +#: ../../library/sys.rst:1653 +msgid "" +"A string containing the version number of the Python interpreter plus " +"additional information on the build number and compiler used. This string " +"is displayed when the interactive interpreter is started. Do not extract " +"version information out of it, rather, use :data:`version_info` and the " +"functions provided by the :mod:`platform` module." +msgstr "" +"一个包含 Python 解释器版本号加编译版本号以及所用编译器等额外信息的字符串。 此字符串会在交互式解释器启动时显示。 " +"请不要从中提取版本信息,而应当使用 :data:`version_info` 以及 :mod:`platform` 模块所提供的函数。" + +#: ../../library/sys.rst:1662 +msgid "" +"The C API version for this interpreter. Programmers may find this useful " +"when debugging version conflicts between Python and extension modules." +msgstr "这个解释器的 C API 版本。当你在调试 Python及期扩展模板的版本冲突这个功能非常有用。" + +#: ../../library/sys.rst:1668 +msgid "" +"A tuple containing the five components of the version number: *major*, " +"*minor*, *micro*, *releaselevel*, and *serial*. All values except " +"*releaselevel* are integers; the release level is ``'alpha'``, ``'beta'``, " +"``'candidate'``, or ``'final'``. The ``version_info`` value corresponding " +"to the Python version 2.0 is ``(2, 0, 0, 'final', 0)``. The components can " +"also be accessed by name, so ``sys.version_info[0]`` is equivalent to " +"``sys.version_info.major`` and so on." +msgstr "" +"一个包含版本号五部分的元组: *major*, *minor*, *micro*, *releaselevel* 和 *serial*。 除 " +"*releaselevel* 外的所有值均为整数;发布级别值则为 ``'alpha'``, ``'beta'``, ``'candidate'`` 或 " +"``'final'``。 对应于 Python 版本 2.0 的 ``version_info`` 值为 ``(2, 0, 0, 'final', " +"0)``。 这些部分也可按名称访问,因此 ``sys.version_info[0]`` 就等价于 " +"``sys.version_info.major``,依此类推。" + +#: ../../library/sys.rst:1676 +msgid "Added named component attributes." +msgstr "增加了以名称表示的各部分属性。" + +#: ../../library/sys.rst:1681 +msgid "" +"This is an implementation detail of the warnings framework; do not modify " +"this value. Refer to the :mod:`warnings` module for more information on the" +" warnings framework." +msgstr "这是警告框架的一个实现细节;请不要修改此值。 有关警告框架的更多信息请参阅 :mod:`warnings` 模块。" + +#: ../../library/sys.rst:1688 +msgid "" +"The version number used to form registry keys on Windows platforms. This is " +"stored as string resource 1000 in the Python DLL. The value is normally the" +" first three characters of :const:`version`. It is provided in the " +":mod:`sys` module for informational purposes; modifying this value has no " +"effect on the registry keys used by Python." +msgstr "" +"用于在 Windows 平台上组成注册表键的版本号。 这在 Python DLL 中存储为 1000 号字符串资源。 其值通常是 " +":const:`version` 的头三个字符。 它在 :mod:`sys` 模块中提供是为了信息展示目的;修改此值不会影响 Python " +"所使用的注册表键。" + +#: ../../library/sys.rst:1699 +msgid "" +"A dictionary of the various implementation-specific flags passed through the" +" :option:`-X` command-line option. Option names are either mapped to their " +"values, if given explicitly, or to :const:`True`. Example:" +msgstr "" +"一个字典,包含通过 :option:`-X` 命令行选项传递的旗标,这些旗标专属于各种具体实现。选项名称将会映射到对应的值(如果显式指定)或者 " +":const:`True`。例如:" + +#: ../../library/sys.rst:1715 +msgid "" +"This is a CPython-specific way of accessing options passed through " +":option:`-X`. Other implementations may export them through other means, or" +" not at all." +msgstr "这是 CPython 专属的访问通过 :option:`-X` 传递的选项的方式。 其他实现可能会通过其他方式导出它们,或者完全不导出。" + +#: ../../library/sys.rst:1723 +msgid "Citations" +msgstr "引用" + +#: ../../library/sys.rst:1724 +msgid "" +"ISO/IEC 9899:1999. \"Programming languages -- C.\" A public draft of this " +"standard is available at http://www.open-" +"std.org/jtc1/sc22/wg14/www/docs/n1256.pdf\\ ." +msgstr "" +"ISO/IEC 9899:1999. \"Programming languages -- C.\" 该标准的公开草案可从 " +"http://www.open-std.org/jtc1/sc22/wg14/www/docs/n1256.pdf\\ 获得。" diff --git a/library/sysconfig.po b/library/sysconfig.po new file mode 100644 index 000000000..5e1ac2d81 --- /dev/null +++ b/library/sysconfig.po @@ -0,0 +1,429 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) 2001-2024, Python Software Foundation +# This file is distributed under the same license as the Python package. +# FIRST AUTHOR , YEAR. +# +# Translators: +# ppcfish , 2019 +# Dai Xu , 2022 +# Freesand Leo , 2022 +# Rafael Fontenelle , 2024 +# +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: Python 3.9\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2024-02-16 21:12+0000\n" +"PO-Revision-Date: 2017-02-16 23:29+0000\n" +"Last-Translator: Rafael Fontenelle , 2024\n" +"Language-Team: Chinese (China) (https://app.transifex.com/python-doc/teams/5390/zh_CN/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: zh_CN\n" +"Plural-Forms: nplurals=1; plural=0;\n" + +#: ../../library/sysconfig.rst:2 +msgid "" +":mod:`sysconfig` --- Provide access to Python's configuration information" +msgstr ":mod:`sysconfig` —— 提供对 Python 配置信息的访问支持" + +#: ../../library/sysconfig.rst:12 +msgid "**Source code:** :source:`Lib/sysconfig.py`" +msgstr "**源代码:** :source:`Lib/sysconfig.py`" + +#: ../../library/sysconfig.rst:19 +msgid "" +"The :mod:`sysconfig` module provides access to Python's configuration " +"information like the list of installation paths and the configuration " +"variables relevant for the current platform." +msgstr ":mod:`sysconfig` 模块提供了对 Python 配置信息的访问支持,比如安装路径列表和有关当前平台的配置变量。" + +#: ../../library/sysconfig.rst:24 +msgid "Configuration variables" +msgstr "配置变量" + +#: ../../library/sysconfig.rst:26 +msgid "" +"A Python distribution contains a :file:`Makefile` and a :file:`pyconfig.h` " +"header file that are necessary to build both the Python binary itself and " +"third-party C extensions compiled using :mod:`distutils`." +msgstr "" +"Python 的发行版中包含一个 :file:`Makefile` 和一个 :file:`pyconfig.h` 头文件,这是构建 Python " +"二进制文件本身和用 :mod:`distutils` 编译的第三方 C 语言扩展所必需的。" + +#: ../../library/sysconfig.rst:30 +msgid "" +":mod:`sysconfig` puts all variables found in these files in a dictionary " +"that can be accessed using :func:`get_config_vars` or " +":func:`get_config_var`." +msgstr "" +":mod:`sysconfig` 将这些文件中的所有变量放在一个字典对象中,可用 :func:`get_config_vars` 或 " +":func:`get_config_var` 访问。" + +#: ../../library/sysconfig.rst:33 +msgid "Notice that on Windows, it's a much smaller set." +msgstr "请注意在 Windows 上,这是一个小得多的集合。" + +#: ../../library/sysconfig.rst:37 +msgid "" +"With no arguments, return a dictionary of all configuration variables " +"relevant for the current platform." +msgstr "不带参数时,返回一个与当前平台相关的所有配置变量的字典。" + +#: ../../library/sysconfig.rst:40 +msgid "" +"With arguments, return a list of values that result from looking up each " +"argument in the configuration variable dictionary." +msgstr "带参数时,返回一个由在配置变量字典中查找每个参数的结果的值组成的列表。" + +#: ../../library/sysconfig.rst:43 +msgid "For each argument, if the value is not found, return ``None``." +msgstr "对于每个参数,如果未找到值,则返回 ``None``。" + +#: ../../library/sysconfig.rst:48 +msgid "" +"Return the value of a single variable *name*. Equivalent to " +"``get_config_vars().get(name)``." +msgstr "返回单个变量 *name* 的值。 等价于 ``get_config_vars().get(name)``。" + +#: ../../library/sysconfig.rst:51 +msgid "If *name* is not found, return ``None``." +msgstr "如果未找到 *name*,则返回 ``None``。" + +#: ../../library/sysconfig.rst:53 +msgid "Example of usage::" +msgstr "用法示例::" + +#: ../../library/sysconfig.rst:66 +msgid "Installation paths" +msgstr "安装路径" + +#: ../../library/sysconfig.rst:68 +msgid "" +"Python uses an installation scheme that differs depending on the platform " +"and on the installation options. These schemes are stored in " +":mod:`sysconfig` under unique identifiers based on the value returned by " +":const:`os.name`." +msgstr "" +"Python 会使用根据平台和安装选项区别处理的安装方案。 这些方案保存在 :mod:`sysconfig` 中基于 :const:`os.name` " +"的返回值来确定的唯一标识符下。" + +#: ../../library/sysconfig.rst:72 +msgid "" +"Every new component that is installed using :mod:`distutils` or a Distutils-" +"based system will follow the same scheme to copy its file in the right " +"places." +msgstr "每个使用 :mod:`distutils` 或基于 Distutils 的系统安装的新组件都将遵循同样的方案将其文件拷贝到正确的位置。" + +#: ../../library/sysconfig.rst:76 +msgid "Python currently supports six schemes:" +msgstr "Python 目前支持六种方案:" + +#: ../../library/sysconfig.rst:78 +msgid "" +"*posix_prefix*: scheme for POSIX platforms like Linux or macOS. This is the" +" default scheme used when Python or a component is installed." +msgstr "" +"*posix_prefix*: 针对 POSIX 平台如 Linux 或 macOS 的方案。 这是在安装 Python 或者组件时的默认方案。" + +#: ../../library/sysconfig.rst:80 +msgid "" +"*posix_home*: scheme for POSIX platforms used when a *home* option is used " +"upon installation. This scheme is used when a component is installed " +"through Distutils with a specific home prefix." +msgstr "" +"*posix_home*: 当在安装时使用了 *home* 选项时针对 POSIX 平台所使用的方案。 此方案会在通过 Distutils " +"附带指定的前缀安装组件时被使用。" + +#: ../../library/sysconfig.rst:83 +msgid "" +"*posix_user*: scheme for POSIX platforms used when a component is installed " +"through Distutils and the *user* option is used. This scheme defines paths " +"located under the user home directory." +msgstr "" +"*posix_user*: 当通过 Distutils 安装组件并且使用了 *user* 选项时针对 POSIX 平台所使用的方案。 " +"此方案会在用户家目录下定义路径位置。" + +#: ../../library/sysconfig.rst:86 +msgid "*nt*: scheme for NT platforms like Windows." +msgstr "*nt*: 针对 NT 平台如 Windows 的方案。" + +#: ../../library/sysconfig.rst:87 +msgid "*nt_user*: scheme for NT platforms, when the *user* option is used." +msgstr "*nt_user*: 针对 NT 平台,当使用了 *user* 选项时的方案。" + +#: ../../library/sysconfig.rst:88 +msgid "" +"*osx_framework_user*: scheme for macOS, when the *user* option is used." +msgstr "*osx_framework_user*: 针对 macOS,当使用了 *user* 选项时的方案。" + +#: ../../library/sysconfig.rst:90 +msgid "" +"Each scheme is itself composed of a series of paths and each path has a " +"unique identifier. Python currently uses eight paths:" +msgstr "每个方案本身由一系列路径组成并且每个路径都有唯一的标识符。 Python 目前使用了八个路径:" + +#: ../../library/sysconfig.rst:93 +msgid "" +"*stdlib*: directory containing the standard Python library files that are " +"not platform-specific." +msgstr "*stdlib*: 包含非平台专属的标准 Python 库文件的目录。" + +#: ../../library/sysconfig.rst:95 +msgid "" +"*platstdlib*: directory containing the standard Python library files that " +"are platform-specific." +msgstr "*platstdlib*: 包含平台专属的标准 Python 库文件的目录。" + +#: ../../library/sysconfig.rst:97 +msgid "*platlib*: directory for site-specific, platform-specific files." +msgstr "*platlib*: 用于站点专属、平台专属的文件的目录。" + +#: ../../library/sysconfig.rst:98 +msgid "*purelib*: directory for site-specific, non-platform-specific files." +msgstr "*purelib*: 用于站点专属、非平台专属的文件的目录。" + +#: ../../library/sysconfig.rst:99 +msgid "*include*: directory for non-platform-specific header files." +msgstr "*include*: 用于非平台专属的头文件的目录。" + +#: ../../library/sysconfig.rst:100 +msgid "*platinclude*: directory for platform-specific header files." +msgstr "*platinclude*: 用于平台专属的头文件的目录。" + +#: ../../library/sysconfig.rst:101 +msgid "*scripts*: directory for script files." +msgstr "*scripts*: 用于脚本文件的目录。" + +#: ../../library/sysconfig.rst:102 +msgid "*data*: directory for data files." +msgstr "*data*: 用于数据文件的目录。" + +#: ../../library/sysconfig.rst:104 +msgid ":mod:`sysconfig` provides some functions to determine these paths." +msgstr ":mod:`sysconfig` 提供了一些函数来确定这些路径。" + +#: ../../library/sysconfig.rst:108 +msgid "" +"Return a tuple containing all schemes currently supported in " +":mod:`sysconfig`." +msgstr "返回一个包含 :mod:`sysconfig` 目前支持的所有方案的元组。" + +#: ../../library/sysconfig.rst:114 +msgid "" +"Return a tuple containing all path names currently supported in " +":mod:`sysconfig`." +msgstr "返回一个包含在 :mod:`sysconfig` 中目前支持的所有路径名称的元组。" + +#: ../../library/sysconfig.rst:120 +msgid "" +"Return an installation path corresponding to the path *name*, from the " +"install scheme named *scheme*." +msgstr "返回一个对应于路径 *name*,来自名为 *scheme* 的安装方案的安装路径。" + +#: ../../library/sysconfig.rst:123 +msgid "" +"*name* has to be a value from the list returned by :func:`get_path_names`." +msgstr "*name* 必须是一个来自 :func:`get_path_names` 所返回的列表的值。" + +#: ../../library/sysconfig.rst:125 +msgid "" +":mod:`sysconfig` stores installation paths corresponding to each path name, " +"for each platform, with variables to be expanded. For instance the *stdlib*" +" path for the *nt* scheme is: ``{base}/Lib``." +msgstr "" +":mod:`sysconfig` 会针对每个平台保存与每个路径名称相对应的安装路径,并带有可扩展的变量。 例如针对 *nt* 方案的 *stdlib* " +"路径是: ``{base}/Lib``。" + +#: ../../library/sysconfig.rst:129 +msgid "" +":func:`get_path` will use the variables returned by :func:`get_config_vars` " +"to expand the path. All variables have default values for each platform so " +"one may call this function and get the default value." +msgstr "" +":func:`get_path` 将使用 :func:`get_config_vars` 所返回的变量来扩展路径。 " +"所有变量对于每种平台都有相应的默认值因此使用者可以调用此函数来获取默认值。" + +#: ../../library/sysconfig.rst:133 +msgid "" +"If *scheme* is provided, it must be a value from the list returned by " +":func:`get_scheme_names`. Otherwise, the default scheme for the current " +"platform is used." +msgstr "" +"如果提供了 *scheme*,则它必须是一个来自 :func:`get_scheme_names` 所返回的列表的值。 " +"在其他情况下,将会使用针对当前平台的默认方案。" + +#: ../../library/sysconfig.rst:137 +msgid "" +"If *vars* is provided, it must be a dictionary of variables that will update" +" the dictionary return by :func:`get_config_vars`." +msgstr "如果提供了 *vars*,则它必须是一个将要更新 :func:`get_config_vars` 所返回的字典的字典。" + +#: ../../library/sysconfig.rst:140 +msgid "" +"If *expand* is set to ``False``, the path will not be expanded using the " +"variables." +msgstr "如果 *expand* 被设为 ``False``,则将不使用这些变量来扩展路径。" + +#: ../../library/sysconfig.rst:143 +msgid "If *name* is not found, raise a :exc:`KeyError`." +msgstr "如果 *name* 未找到,则会引发 :exc:`KeyError`。" + +#: ../../library/sysconfig.rst:148 +msgid "" +"Return a dictionary containing all installation paths corresponding to an " +"installation scheme. See :func:`get_path` for more information." +msgstr "返回一个包含与特定安装方案对应的安装路径的字典。 请参阅 :func:`get_path` 了解详情。" + +#: ../../library/sysconfig.rst:151 +msgid "" +"If *scheme* is not provided, will use the default scheme for the current " +"platform." +msgstr "如果未提供 *scheme*,则将使用针对当前平台的默认方案。" + +#: ../../library/sysconfig.rst:154 +msgid "" +"If *vars* is provided, it must be a dictionary of variables that will update" +" the dictionary used to expand the paths." +msgstr "如果提供了 *vars*,则它必须是一个将要更新用于扩展的字典的变量字典。" + +#: ../../library/sysconfig.rst:157 +msgid "If *expand* is set to false, the paths will not be expanded." +msgstr "如果 *expand* 被设为假值,则路径将不会被扩展。" + +#: ../../library/sysconfig.rst:159 +msgid "" +"If *scheme* is not an existing scheme, :func:`get_paths` will raise a " +":exc:`KeyError`." +msgstr "如果 *scheme* 不是一个现有的方案,则 :func:`get_paths` 将引发 :exc:`KeyError`。" + +#: ../../library/sysconfig.rst:164 +msgid "Other functions" +msgstr "其他功能" + +#: ../../library/sysconfig.rst:168 +msgid "" +"Return the ``MAJOR.MINOR`` Python version number as a string. Similar to " +"``'%d.%d' % sys.version_info[:2]``." +msgstr "" +"以字符串形式 ``MAJOR.MINOR`` 返回 Python 版本号。 类似于 ``'%d.%d' % " +"sys.version_info[:2]``。" + +#: ../../library/sysconfig.rst:174 +msgid "Return a string that identifies the current platform." +msgstr "返回一个标识当前平台的字符串。" + +#: ../../library/sysconfig.rst:176 +msgid "" +"This is used mainly to distinguish platform-specific build directories and " +"platform-specific built distributions. Typically includes the OS name and " +"version and the architecture (as supplied by 'os.uname()'), although the " +"exact information included depends on the OS; e.g., on Linux, the kernel " +"version isn't particularly important." +msgstr "" +"这主要被用来区分平台专属的构建目录和平台专属的构建分发版。 通常包括 OS 名称和版本以及架构(即 'os.uname()' " +"所提供的信息),但是实际包括的信息取决于具体 OS;例如,在 Linux 上,内核版本号并不是特别重要。" + +#: ../../library/sysconfig.rst:182 +msgid "Examples of returned values:" +msgstr "返回值的示例:" + +#: ../../library/sysconfig.rst:184 +msgid "linux-i586" +msgstr "linux-i586" + +#: ../../library/sysconfig.rst:185 +msgid "linux-alpha (?)" +msgstr "linux-alpha (?)" + +#: ../../library/sysconfig.rst:186 +msgid "solaris-2.6-sun4u" +msgstr "solaris-2.6-sun4u" + +#: ../../library/sysconfig.rst:188 +msgid "Windows will return one of:" +msgstr "Windows将返回以下之一:" + +#: ../../library/sysconfig.rst:190 +msgid "win-amd64 (64bit Windows on AMD64, aka x86_64, Intel64, and EM64T)" +msgstr "win-amd64 (在 AMD64, aka x86_64, Intel64, 和 EM64T上的64位 Windows )" + +#: ../../library/sysconfig.rst:191 +msgid "win32 (all others - specifically, sys.platform is returned)" +msgstr "win32(所有其他的 —— 确切地说,返回 sys.platform)" + +#: ../../library/sysconfig.rst:193 +msgid "macOS can return:" +msgstr "macOS 可以返回:" + +#: ../../library/sysconfig.rst:195 +msgid "macosx-10.6-ppc" +msgstr "macosx-10.6-ppc" + +#: ../../library/sysconfig.rst:196 +msgid "macosx-10.4-ppc64" +msgstr "macosx-10.4-ppc64" + +#: ../../library/sysconfig.rst:197 +msgid "macosx-10.3-i386" +msgstr "macosx-10.3-i386" + +#: ../../library/sysconfig.rst:198 +msgid "macosx-10.4-fat" +msgstr "macosx-10.4-fat" + +#: ../../library/sysconfig.rst:200 +msgid "" +"For other non-POSIX platforms, currently just returns :data:`sys.platform`." +msgstr "对于其他非-POSIX 平台, 目前只是返回 :data:`sys.platform` 。" + +#: ../../library/sysconfig.rst:205 +msgid "" +"Return ``True`` if the running Python interpreter was built from source and " +"is being run from its built location, and not from a location resulting from" +" e.g. running ``make install`` or installing via a binary installer." +msgstr "" +"如果正在运行的 Python 解释器是使用源代码构建的并在其构建位置上运行,而不是在其他位置例如通过运行 ``make install`` " +"或通过二进制机器码安装程序安装则返回 ``True``。" + +#: ../../library/sysconfig.rst:212 +msgid "Parse a :file:`config.h`\\-style file." +msgstr "解析一个 :file:`config.h` 风格的文件。" + +#: ../../library/sysconfig.rst:214 +msgid "*fp* is a file-like object pointing to the :file:`config.h`\\-like file." +msgstr "*fp* 是一个指向 :file:`config.h` 风格的文件的文件型对象。" + +#: ../../library/sysconfig.rst:216 +msgid "" +"A dictionary containing name/value pairs is returned. If an optional " +"dictionary is passed in as the second argument, it is used instead of a new " +"dictionary, and updated with the values read in the file." +msgstr "返回一个包含名称/值对的字典。 如果传入一个可选的字典作为第二个参数,则将使用它而不是新的字典,并使用从文件中读取的值更新它。" + +#: ../../library/sysconfig.rst:223 +msgid "Return the path of :file:`pyconfig.h`." +msgstr "返回 :file:`pyconfig.h` 的目录" + +#: ../../library/sysconfig.rst:227 +msgid "Return the path of :file:`Makefile`." +msgstr "返回 :file:`Makefile` 的目录" + +#: ../../library/sysconfig.rst:230 +msgid "Using :mod:`sysconfig` as a script" +msgstr "将 :mod:`sysconfig` 作为脚本使用" + +#: ../../library/sysconfig.rst:232 +msgid "You can use :mod:`sysconfig` as a script with Python's *-m* option:" +msgstr " 你可以通过 Python 的 *-m* 选项将 :mod:`sysconfig` 作为脚本使用:" + +#: ../../library/sysconfig.rst:258 +msgid "" +"This call will print in the standard output the information returned by " +":func:`get_platform`, :func:`get_python_version`, :func:`get_path` and " +":func:`get_config_vars`." +msgstr "" +"此调用将把 :func:`get_platform`, :func:`get_python_version`, :func:`get_path` 和 " +":func:`get_config_vars` 所返回的信息打印至标准输出。" diff --git a/library/syslog.po b/library/syslog.po new file mode 100644 index 000000000..b82a99085 --- /dev/null +++ b/library/syslog.po @@ -0,0 +1,226 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) 2001-2024, Python Software Foundation +# This file is distributed under the same license as the Python package. +# FIRST AUTHOR , YEAR. +# +# Translators: +# Alpha Du , 2019 +# nick <2330458484@qq.com>, 2019 +# Leo Li , 2020 +# Freesand Leo , 2020 +# Rafael Fontenelle , 2024 +# +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: Python 3.9\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2024-08-30 16:51+0000\n" +"PO-Revision-Date: 2017-02-16 23:29+0000\n" +"Last-Translator: Rafael Fontenelle , 2024\n" +"Language-Team: Chinese (China) (https://app.transifex.com/python-doc/teams/5390/zh_CN/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: zh_CN\n" +"Plural-Forms: nplurals=1; plural=0;\n" + +#: ../../library/syslog.rst:2 +msgid ":mod:`syslog` --- Unix syslog library routines" +msgstr "Unix syslog 库例程" + +#: ../../library/syslog.rst:10 +msgid "" +"This module provides an interface to the Unix ``syslog`` library routines. " +"Refer to the Unix manual pages for a detailed description of the ``syslog`` " +"facility." +msgstr "此模块提供一个接口到Unix ``syslog`` 日常库. 参考 Unix 手册页关于 ``syslog`` 设施的详细描述." + +#: ../../library/syslog.rst:14 +msgid "" +"This module wraps the system ``syslog`` family of routines. A pure Python " +"library that can speak to a syslog server is available in the " +":mod:`logging.handlers` module as :class:`SysLogHandler`." +msgstr "" +"此模块包装了系统的 ``syslog`` 例程族。 一个能与 syslog 服务器对话的纯 Python 库则以 " +":mod:`logging.handlers` 模块中 :class:`SysLogHandler` 类的形式提供。" + +#: ../../library/syslog.rst:18 +msgid "The module defines the following functions:" +msgstr "这个模块定义了以下函数:" + +#: ../../library/syslog.rst:24 +msgid "" +"Send the string *message* to the system logger. A trailing newline is added" +" if necessary. Each message is tagged with a priority composed of a " +"*facility* and a *level*. The optional *priority* argument, which defaults " +"to :const:`LOG_INFO`, determines the message priority. If the facility is " +"not encoded in *priority* using logical-or (``LOG_INFO | LOG_USER``), the " +"value given in the :func:`openlog` call is used." +msgstr "" +"将字符串 *message* 发送到系统日志记录器。 如有必要会添加末尾换行符。 每条消息都带有一个由 *facility* 和 *level* " +"组成的优先级标价签。 可选的 *priority* 参数默认值为 :const:`LOG_INFO`,它确定消息的优先级。 如果未在 " +"*priority* 中使用逻辑或 (``LOG_INFO | LOG_USER``) 对 facility 进行编码,则会使用在 " +":func:`openlog` 调用中所给定的值。" + +#: ../../library/syslog.rst:31 +msgid "" +"If :func:`openlog` has not been called prior to the call to :func:`syslog`, " +"``openlog()`` will be called with no arguments." +msgstr "" +"如果 :func:`openlog` 未在对 :func:`syslog` 的调用之前被调用,则将不带参数地调用 ``openlog()``。" + +#: ../../library/syslog.rst:34 +msgid "" +"Raises an :ref:`auditing event ` ``syslog.syslog`` with arguments " +"``priority``, ``message``." +msgstr "" +"引发一个 :ref:`审计事件 ` ``syslog.syslog`` 并附带参数 ``priority``, " +"``message``。" + +#: ../../library/syslog.rst:39 +msgid "" +"Logging options of subsequent :func:`syslog` calls can be set by calling " +":func:`openlog`. :func:`syslog` will call :func:`openlog` with no arguments" +" if the log is not currently open." +msgstr "" +"后续 :func:`syslog` 调用的日志选项可以通过调用 :func:`openlog` 来设置。 如果日志当前未打开则 " +":func:`syslog` 将不带参数地调用 :func:`openlog`。" + +#: ../../library/syslog.rst:43 +msgid "" +"The optional *ident* keyword argument is a string which is prepended to " +"every message, and defaults to ``sys.argv[0]`` with leading path components " +"stripped. The optional *logoption* keyword argument (default is 0) is a bit" +" field -- see below for possible values to combine. The optional *facility*" +" keyword argument (default is :const:`LOG_USER`) sets the default facility " +"for messages which do not have a facility explicitly encoded." +msgstr "" +"可选的 *ident* 关键字参数是在每条消息前添加的字符串,默认为 ``sys.argv[0]`` 去除打头的路径部分。 可选的 " +"*logoption* 关键字参数(默认为 0)是一个位字段 -- 请参见下文了解可能的组合值。 可选的 *facility* 关键字参数 (默认为 " +":const:`LOG_USER`) 为没有显式编码 facility 的消息设置默认的 facility。" + +#: ../../library/syslog.rst:50 +msgid "" +"Raises an :ref:`auditing event ` ``syslog.openlog`` with arguments" +" ``ident``, ``logoption``, ``facility``." +msgstr "" +"引发一个 :ref:`审计事件 ` ``syslog.openlog`` 并附带参数 ``ident``, " +"``logoption``, ``facility``。" + +#: ../../library/syslog.rst:52 +msgid "" +"In previous versions, keyword arguments were not allowed, and *ident* was " +"required. The default for *ident* was dependent on the system libraries, " +"and often was ``python`` instead of the name of the Python program file." +msgstr "" +"在之前的版本中,不允许关键字参数,并且要求必须有 *ident*。 *ident* 的默认值依赖于系统库,它往往为 ``python`` 而不是 " +"Python 程序文件的实际名称。" + +#: ../../library/syslog.rst:60 +msgid "" +"Reset the syslog module values and call the system library ``closelog()``." +msgstr "重置日志模块值并且调用系统库 ``closelog()``." + +#: ../../library/syslog.rst:62 +msgid "" +"This causes the module to behave as it does when initially imported. For " +"example, :func:`openlog` will be called on the first :func:`syslog` call (if" +" :func:`openlog` hasn't already been called), and *ident* and other " +":func:`openlog` parameters are reset to defaults." +msgstr "" +"这使得此模块在初始导入时行为固定。 例如,:func:`openlog` 将在首次调用 :func:`syslog` 时被调用(如果 " +":func:`openlog` 还未被调用过),并且 *ident* 和其他 :func:`openlog` 形参会被重置为默认值。" + +#: ../../library/syslog.rst:67 +msgid "" +"Raises an :ref:`auditing event ` ``syslog.closelog`` with no " +"arguments." +msgstr "引发一个不带参数的 :ref:`审计事件 ` ``syslog.closelog``。" + +#: ../../library/syslog.rst:72 +msgid "" +"Set the priority mask to *maskpri* and return the previous mask value. " +"Calls to :func:`syslog` with a priority level not set in *maskpri* are " +"ignored. The default is to log all priorities. The function " +"``LOG_MASK(pri)`` calculates the mask for the individual priority *pri*. " +"The function ``LOG_UPTO(pri)`` calculates the mask for all priorities up to " +"and including *pri*." +msgstr "" +"将优先级掩码设为 *maskpri* 并返回之前的掩码值。 调用 :func:`syslog` 并附带未在 *maskpri* " +"中设置的优先级将会被忽略。 默认设置为记录所有优先级。 函数 ``LOG_MASK(pri)`` 可计算单个优先级 *pri* 的掩码。 函数 " +"``LOG_UPTO(pri)`` 可计算包括 *pri* 在内的所有优先级的掩码。" + +#: ../../library/syslog.rst:79 +msgid "" +"Raises an :ref:`auditing event ` ``syslog.setlogmask`` with " +"argument ``maskpri``." +msgstr "引发一个 :ref:`审计事件 ` ``syslog.setlogmask`` 并附带参数 ``maskpri``。" + +#: ../../library/syslog.rst:81 +msgid "The module defines the following constants:" +msgstr "此模块定义了一下常量:" + +#: ../../library/syslog.rst:86 +msgid "Priority levels (high to low):" +msgstr "优先级级别 (高到低):" + +#: ../../library/syslog.rst:84 +msgid "" +":const:`LOG_EMERG`, :const:`LOG_ALERT`, :const:`LOG_CRIT`, :const:`LOG_ERR`," +" :const:`LOG_WARNING`, :const:`LOG_NOTICE`, :const:`LOG_INFO`, " +":const:`LOG_DEBUG`." +msgstr "" +":const:`LOG_EMERG`, :const:`LOG_ALERT`, :const:`LOG_CRIT`, :const:`LOG_ERR`," +" :const:`LOG_WARNING`, :const:`LOG_NOTICE`, :const:`LOG_INFO`, " +":const:`LOG_DEBUG`." + +#: ../../library/syslog.rst:93 +msgid "Facilities:" +msgstr "设施:" + +#: ../../library/syslog.rst:89 +msgid "" +":const:`LOG_KERN`, :const:`LOG_USER`, :const:`LOG_MAIL`, " +":const:`LOG_DAEMON`, :const:`LOG_AUTH`, :const:`LOG_LPR`, :const:`LOG_NEWS`," +" :const:`LOG_UUCP`, :const:`LOG_CRON`, :const:`LOG_SYSLOG`, " +":const:`LOG_LOCAL0` to :const:`LOG_LOCAL7`, and, if defined in " +"````, :const:`LOG_AUTHPRIV`." +msgstr "" +":const:`LOG_KERN`, :const:`LOG_USER`, :const:`LOG_MAIL`, " +":const:`LOG_DAEMON`, :const:`LOG_AUTH`, :const:`LOG_LPR`, :const:`LOG_NEWS`," +" :const:`LOG_UUCP`, :const:`LOG_CRON`, :const:`LOG_SYSLOG`, " +":const:`LOG_LOCAL0` to :const:`LOG_LOCAL7`,如果 ```` 中有定义则还有 " +":const:`LOG_AUTHPRIV`。" + +#: ../../library/syslog.rst:99 +msgid "Log options:" +msgstr "日志选项:" + +#: ../../library/syslog.rst:96 +msgid "" +":const:`LOG_PID`, :const:`LOG_CONS`, :const:`LOG_NDELAY`, and, if defined in" +" ````, :const:`LOG_ODELAY`, :const:`LOG_NOWAIT`, and " +":const:`LOG_PERROR`." +msgstr "" +":const:`LOG_PID`, :const:`LOG_CONS`, :const:`LOG_NDELAY`,如果 ```` " +"中有定义则还有 :const:`LOG_ODELAY`, :const:`LOG_NOWAIT` 以及 :const:`LOG_PERROR`。" + +#: ../../library/syslog.rst:102 +msgid "Examples" +msgstr "例子" + +#: ../../library/syslog.rst:105 +msgid "Simple example" +msgstr "简单示例" + +#: ../../library/syslog.rst:107 +msgid "A simple set of examples::" +msgstr "一个简单的示例集::" + +#: ../../library/syslog.rst:115 +msgid "" +"An example of setting some log options, these would include the process ID " +"in logged messages, and write the messages to the destination facility used " +"for mail logging::" +msgstr "一个设置多种日志选项的示例,其中有在日志消息中包含进程 ID,以及将消息写入用于邮件日志记录的目标设施等::" diff --git a/library/tabnanny.po b/library/tabnanny.po new file mode 100644 index 000000000..fa59c511d --- /dev/null +++ b/library/tabnanny.po @@ -0,0 +1,89 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) 2001-2022, Python Software Foundation +# This file is distributed under the same license as the Python package. +# FIRST AUTHOR , YEAR. +# +# Translators: +# ppcfish , 2019 +# Freesand Leo , 2019 +# +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: Python 3.9\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2022-11-04 14:34+0000\n" +"PO-Revision-Date: 2017-02-16 23:29+0000\n" +"Last-Translator: Freesand Leo , 2019\n" +"Language-Team: Chinese (China) (https://www.transifex.com/python-doc/teams/5390/zh_CN/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: zh_CN\n" +"Plural-Forms: nplurals=1; plural=0;\n" + +#: ../../library/tabnanny.rst:2 +msgid ":mod:`tabnanny` --- Detection of ambiguous indentation" +msgstr ":mod:`tabnanny` --- 模糊缩进检测" + +#: ../../library/tabnanny.rst:13 +msgid "**Source code:** :source:`Lib/tabnanny.py`" +msgstr "**源代码:** :source:`Lib/tabnanny.py`" + +#: ../../library/tabnanny.rst:17 +msgid "" +"For the time being this module is intended to be called as a script. However" +" it is possible to import it into an IDE and use the function :func:`check` " +"described below." +msgstr "目前,该模块旨在作为脚本调用。但是可以使用下面描述的 :func:`check` 函数将其导入IDE。" + +#: ../../library/tabnanny.rst:23 +msgid "" +"The API provided by this module is likely to change in future releases; such" +" changes may not be backward compatible." +msgstr "此模块提供的API可能会在将来的版本中更改;此类更改可能无法向后兼容。" + +#: ../../library/tabnanny.rst:29 +msgid "" +"If *file_or_dir* is a directory and not a symbolic link, then recursively " +"descend the directory tree named by *file_or_dir*, checking all :file:`.py` " +"files along the way. If *file_or_dir* is an ordinary Python source file, it" +" is checked for whitespace related problems. The diagnostic messages are " +"written to standard output using the :func:`print` function." +msgstr "" +"如果 *file_or_dir* 是目录而非符号链接,则递归地在名为 *file_or_dir* 的目录树中下行,沿途检查所有 :file:`.py` " +"文件。 如果 *file_or_dir* 是一个普通 Python 源文件,将检查其中的空格相关问题。 诊断消息将使用 :func:`print` " +"函数写入到标准输出。" + +#: ../../library/tabnanny.rst:38 +msgid "" +"Flag indicating whether to print verbose messages. This is incremented by " +"the ``-v`` option if called as a script." +msgstr "此旗标指明是否打印详细消息。 如果作为脚本调用则是通过 ``-v`` 选项来增加。" + +#: ../../library/tabnanny.rst:44 +msgid "" +"Flag indicating whether to print only the filenames of files containing " +"whitespace related problems. This is set to true by the ``-q`` option if " +"called as a script." +msgstr "此旗标指明是否只打印包含空格相关问题文件的文件名。 如果作为脚本调用则是通过 ``-q`` 选项来设为真值。" + +#: ../../library/tabnanny.rst:51 +msgid "" +"Raised by :func:`process_tokens` if detecting an ambiguous indent. Captured " +"and handled in :func:`check`." +msgstr "如果检测到模糊缩进则由 :func:`process_tokens` 引发。 在 :func:`check` 中捕获并处理。" + +#: ../../library/tabnanny.rst:57 +msgid "" +"This function is used by :func:`check` to process tokens generated by the " +":mod:`tokenize` module." +msgstr "此函数由 :func:`check` 用来处理由 :mod:`tokenize` 模块所生成的标记。" + +#: ../../library/tabnanny.rst:66 +msgid "Module :mod:`tokenize`" +msgstr "模块 :mod:`tokenize`" + +#: ../../library/tabnanny.rst:67 +msgid "Lexical scanner for Python source code." +msgstr "用于Python源代码的词法扫描程序。" diff --git a/library/tarfile.po b/library/tarfile.po new file mode 100644 index 000000000..a6f036aff --- /dev/null +++ b/library/tarfile.po @@ -0,0 +1,1886 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) 2001-2024, Python Software Foundation +# This file is distributed under the same license as the Python package. +# FIRST AUTHOR , YEAR. +# +# Translators: +# Makdon , 2019 +# ppcfish , 2019 +# Zombie110year , 2020 +# Alpha Du , 2023 +# Freesand Leo , 2023 +# Rafael Fontenelle , 2024 +# +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: Python 3.9\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2024-05-31 16:34+0000\n" +"PO-Revision-Date: 2017-02-16 23:29+0000\n" +"Last-Translator: Rafael Fontenelle , 2024\n" +"Language-Team: Chinese (China) (https://app.transifex.com/python-doc/teams/5390/zh_CN/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: zh_CN\n" +"Plural-Forms: nplurals=1; plural=0;\n" + +#: ../../library/tarfile.rst:2 +msgid ":mod:`tarfile` --- Read and write tar archive files" +msgstr ":mod:`tarfile` --- 读写tar归档文件" + +#: ../../library/tarfile.rst:10 +msgid "**Source code:** :source:`Lib/tarfile.py`" +msgstr "**源代码:** :source:`Lib/tarfile.py`" + +#: ../../library/tarfile.rst:14 +msgid "" +"The :mod:`tarfile` module makes it possible to read and write tar archives, " +"including those using gzip, bz2 and lzma compression. Use the :mod:`zipfile`" +" module to read or write :file:`.zip` files, or the higher-level functions " +"in :ref:`shutil `." +msgstr "" +":mod:`tarfile` 模块可以用来读写 tar 归档,包括使用 gzip, bz2 和 lzma 压缩的归档。 请使用 " +":mod:`zipfile` 模块来读写 :file:`.zip` 文件,或者使用 :ref:`shutil ` 的高层级函数。" + +#: ../../library/tarfile.rst:19 +msgid "Some facts and figures:" +msgstr "一些事实和数字:" + +#: ../../library/tarfile.rst:21 +msgid "" +"reads and writes :mod:`gzip`, :mod:`bz2` and :mod:`lzma` compressed archives" +" if the respective modules are available." +msgstr "读写 :mod:`gzip`, :mod:`bz2` 和 :mod:`lzma` 解压的归档要求相应的模块可用。" + +#: ../../library/tarfile.rst:24 +msgid "read/write support for the POSIX.1-1988 (ustar) format." +msgstr "支持读取 / 写入 POSIX.1-1988 (ustar) 格式。" + +#: ../../library/tarfile.rst:26 +msgid "" +"read/write support for the GNU tar format including *longname* and " +"*longlink* extensions, read-only support for all variants of the *sparse* " +"extension including restoration of sparse files." +msgstr "" +"对 GNU tar 格式的读/写支持,包括 *longname* 和 *longlink* 扩展,对所有种类 *sparse* 扩展的只读支持,包括 " +"sparse 文件的恢复。" + +#: ../../library/tarfile.rst:30 +msgid "read/write support for the POSIX.1-2001 (pax) format." +msgstr "对 POSIX.1-2001 (pax) 格式的读/写支持。" + +#: ../../library/tarfile.rst:32 +msgid "" +"handles directories, regular files, hardlinks, symbolic links, fifos, " +"character devices and block devices and is able to acquire and restore file " +"information like timestamp, access permissions and owner." +msgstr "处理目录、正常文件、硬链接、符号链接、fifo 管道、字符设备和块设备,并且能够获取和恢复文件信息例如时间戳、访问权限和所有者等。" + +#: ../../library/tarfile.rst:36 +msgid "Added support for :mod:`lzma` compression." +msgstr "添加了对 :mod:`lzma` 压缩的支持。" + +#: ../../library/tarfile.rst:42 +msgid "" +"Return a :class:`TarFile` object for the pathname *name*. For detailed " +"information on :class:`TarFile` objects and the keyword arguments that are " +"allowed, see :ref:`tarfile-objects`." +msgstr "" +"针对路径名 *name* 返回 :class:`TarFile` 对象。 有关 :class:`TarFile` " +"对象以及所允许的关键字参数的详细信息请参阅 :ref:`tarfile-objects`。" + +#: ../../library/tarfile.rst:46 +msgid "" +"*mode* has to be a string of the form ``'filemode[:compression]'``, it " +"defaults to ``'r'``. Here is a full list of mode combinations:" +msgstr "" +"*mode* 必须是 ``'filemode[:compression]'`` 形式的字符串,其默认值为 ``'r'``。 以下是模式组合的完整列表:" + +#: ../../library/tarfile.rst:50 +msgid "mode" +msgstr "mode" + +#: ../../library/tarfile.rst:50 +msgid "action" +msgstr "action" + +#: ../../library/tarfile.rst:52 +msgid "``'r' or 'r:*'``" +msgstr "``'r' or 'r:*'``" + +#: ../../library/tarfile.rst:52 +msgid "Open for reading with transparent compression (recommended)." +msgstr "打开和读取使用透明压缩(推荐)。" + +#: ../../library/tarfile.rst:55 +msgid "``'r:'``" +msgstr "``'r:'``" + +#: ../../library/tarfile.rst:55 +msgid "Open for reading exclusively without compression." +msgstr "打开和读取不使用压缩。" + +#: ../../library/tarfile.rst:58 +msgid "``'r:gz'``" +msgstr "``'r:gz'``" + +#: ../../library/tarfile.rst:58 +msgid "Open for reading with gzip compression." +msgstr "打开和读取使用gzip 压缩。" + +#: ../../library/tarfile.rst:60 +msgid "``'r:bz2'``" +msgstr "``'r:bz2'``" + +#: ../../library/tarfile.rst:60 +msgid "Open for reading with bzip2 compression." +msgstr "打开和读取使用bzip2 压缩。" + +#: ../../library/tarfile.rst:62 +msgid "``'r:xz'``" +msgstr "``'r:xz'``" + +#: ../../library/tarfile.rst:62 +msgid "Open for reading with lzma compression." +msgstr "打开和读取使用lzma 压缩。" + +#: ../../library/tarfile.rst:64 +msgid "``'x'`` or ``'x:'``" +msgstr "``'x'`` 或 ``'x:'``" + +#: ../../library/tarfile.rst:64 +msgid "" +"Create a tarfile exclusively without compression. Raise an " +":exc:`FileExistsError` exception if it already exists." +msgstr "创建tarfile不进行压缩。如果文件已经存在,则抛出 :exc:`FileExistsError` 异常。" + +#: ../../library/tarfile.rst:69 +msgid "``'x:gz'``" +msgstr "``'x:gz'``" + +#: ../../library/tarfile.rst:69 +msgid "" +"Create a tarfile with gzip compression. Raise an :exc:`FileExistsError` " +"exception if it already exists." +msgstr "使用gzip压缩创建tarfile。如果文件已经存在,则抛出 :exc:`FileExistsError` 异常。" + +#: ../../library/tarfile.rst:73 +msgid "``'x:bz2'``" +msgstr "``'x:bz2'``" + +#: ../../library/tarfile.rst:73 +msgid "" +"Create a tarfile with bzip2 compression. Raise an :exc:`FileExistsError` " +"exception if it already exists." +msgstr "使用bzip2 压缩创建tarfile。如果文件已经存在,则抛出 :exc:`FileExistsError` 异常。" + +#: ../../library/tarfile.rst:77 +msgid "``'x:xz'``" +msgstr "``'x:xz'``" + +#: ../../library/tarfile.rst:77 +msgid "" +"Create a tarfile with lzma compression. Raise an :exc:`FileExistsError` " +"exception if it already exists." +msgstr "使用lzma 压缩创建tarfile。如果文件已经存在,则抛出 :exc:`FileExistsError` 异常。" + +#: ../../library/tarfile.rst:81 +msgid "``'a' or 'a:'``" +msgstr "``'a' or 'a:'``" + +#: ../../library/tarfile.rst:81 +msgid "" +"Open for appending with no compression. The file is created if it does not " +"exist." +msgstr "打开以便在没有压缩的情况下追加。如果文件不存在,则创建该文件。" + +#: ../../library/tarfile.rst:84 +msgid "``'w' or 'w:'``" +msgstr "``'w' or 'w:'``" + +#: ../../library/tarfile.rst:84 +msgid "Open for uncompressed writing." +msgstr "打开用于未压缩的写入。" + +#: ../../library/tarfile.rst:86 +msgid "``'w:gz'``" +msgstr "``'w:gz'``" + +#: ../../library/tarfile.rst:86 +msgid "Open for gzip compressed writing." +msgstr "打开用于 gzip 压缩的写入。" + +#: ../../library/tarfile.rst:88 +msgid "``'w:bz2'``" +msgstr "``'w:bz2'``" + +#: ../../library/tarfile.rst:88 +msgid "Open for bzip2 compressed writing." +msgstr "打开用于 bzip2 压缩的写入。" + +#: ../../library/tarfile.rst:90 +msgid "``'w:xz'``" +msgstr "``'w:xz'``" + +#: ../../library/tarfile.rst:90 +msgid "Open for lzma compressed writing." +msgstr "打开用于 lzma 压缩的写入。" + +#: ../../library/tarfile.rst:93 +msgid "" +"Note that ``'a:gz'``, ``'a:bz2'`` or ``'a:xz'`` is not possible. If *mode* " +"is not suitable to open a certain (compressed) file for reading, " +":exc:`ReadError` is raised. Use *mode* ``'r'`` to avoid this. If a " +"compression method is not supported, :exc:`CompressionError` is raised." +msgstr "" +"请注意 ``'a:gz'``, ``'a:bz2'`` 或 ``'a:xz'`` 是不可能的组合。 如果 *mode* " +"不适用于打开特定(压缩的)文件用于读取,则会引发 :exc:`ReadError`。 请使用 *mode* ``'r'`` 来避免这种情况。 " +"如果某种压缩方法不受支持,则会引发 :exc:`CompressionError`。" + +#: ../../library/tarfile.rst:98 +msgid "" +"If *fileobj* is specified, it is used as an alternative to a :term:`file " +"object` opened in binary mode for *name*. It is supposed to be at position " +"0." +msgstr "" +"如果指定了 *fileobj*,它会被用作对应于 *name* 的以二进制模式打开的 :term:`file object` 的替代。 " +"它会被设定为处在位置 0。" + +#: ../../library/tarfile.rst:101 +msgid "" +"For modes ``'w:gz'``, ``'r:gz'``, ``'w:bz2'``, ``'r:bz2'``, ``'x:gz'``, " +"``'x:bz2'``, :func:`tarfile.open` accepts the keyword argument " +"*compresslevel* (default ``9``) to specify the compression level of the " +"file." +msgstr "" +"对于 ``'w:gz'``, ``'r:gz'``, ``'w:bz2'``, ``'r:bz2'``, ``'x:gz'``, ``'x:bz2'``" +" 等模式,:func:`tarfile.open` 接受关键字参数 *compresslevel* (默认值为 ``9``) 来指定文件的压缩等级。" + +#: ../../library/tarfile.rst:105 +msgid "" +"For modes ``'w:xz'`` and ``'x:xz'``, :func:`tarfile.open` accepts the " +"keyword argument *preset* to specify the compression level of the file." +msgstr "" +"对于 ``'w:xz'`` 和 ``'x:xz'`` 模式,:func:`tarfile.open` 接受关键字参数 *preset* " +"来指定文件的压缩等级。" + +#: ../../library/tarfile.rst:108 +msgid "" +"For special purposes, there is a second format for *mode*: " +"``'filemode|[compression]'``. :func:`tarfile.open` will return a " +":class:`TarFile` object that processes its data as a stream of blocks. No " +"random seeking will be done on the file. If given, *fileobj* may be any " +"object that has a :meth:`read` or :meth:`write` method (depending on the " +"*mode*). *bufsize* specifies the blocksize and defaults to ``20 * 512`` " +"bytes. Use this variant in combination with e.g. ``sys.stdin``, a socket " +":term:`file object` or a tape device. However, such a :class:`TarFile` " +"object is limited in that it does not allow random access, see :ref:`tar-" +"examples`. The currently possible modes:" +msgstr "" +"针对特殊的目的,还存在第二种 *mode* 格式: ``'filemode|[compression]'``。 :func:`tarfile.open`" +" 将返回一个将其数据作为数据块流来处理的 :class:`TarFile` 对象。 对此文件将不能执行随机查找。 如果给定了 " +"*fileobj*,它可以是任何具有 :meth:`read` 或 :meth:`write` 方法 (由 *mode* 确定) 的对象。 " +"*bufsize* 指定块大小,默认值为 ``20 * 512`` 字节。 可与此格式组合使用的有 ``sys.stdin``, 套接字 " +":term:`file object` 或磁带设备等。 但是,对于这样的 :class:`TarFile` 对象存在不允许随机访问的限制,参见 " +":ref:`tar-examples`。 目前可用的模式如下:" + +#: ../../library/tarfile.rst:120 +msgid "Mode" +msgstr "模式" + +#: ../../library/tarfile.rst:120 +msgid "Action" +msgstr "动作" + +#: ../../library/tarfile.rst:122 +msgid "``'r|*'``" +msgstr "``'r|*'``" + +#: ../../library/tarfile.rst:122 +msgid "" +"Open a *stream* of tar blocks for reading with transparent compression." +msgstr "打开 tar 块的 *流* 以进行透明压缩读取。" + +#: ../../library/tarfile.rst:125 +msgid "``'r|'``" +msgstr "``'r|'``" + +#: ../../library/tarfile.rst:125 +msgid "Open a *stream* of uncompressed tar blocks for reading." +msgstr "打开一个未压缩的 tar 块的 *stream* 用于读取。" + +#: ../../library/tarfile.rst:128 +msgid "``'r|gz'``" +msgstr "``'r|gz'``" + +#: ../../library/tarfile.rst:128 +msgid "Open a gzip compressed *stream* for reading." +msgstr "打开一个 gzip 压缩的 *stream* 用于读取。" + +#: ../../library/tarfile.rst:131 +msgid "``'r|bz2'``" +msgstr "``'r|bz2'``" + +#: ../../library/tarfile.rst:131 +msgid "Open a bzip2 compressed *stream* for reading." +msgstr "打开一个 bzip2 压缩的 *stream* 用于读取。" + +#: ../../library/tarfile.rst:134 +msgid "``'r|xz'``" +msgstr "``'r|xz'``" + +#: ../../library/tarfile.rst:134 +msgid "Open an lzma compressed *stream* for reading." +msgstr "打开一个 lzma 压缩 *stream* 用于读取。" + +#: ../../library/tarfile.rst:137 +msgid "``'w|'``" +msgstr "``'w|'``" + +#: ../../library/tarfile.rst:137 +msgid "Open an uncompressed *stream* for writing." +msgstr "打开一个未压缩的 *stream* 用于写入。" + +#: ../../library/tarfile.rst:139 +msgid "``'w|gz'``" +msgstr "``'w|gz'``" + +#: ../../library/tarfile.rst:139 +msgid "Open a gzip compressed *stream* for writing." +msgstr "打开一个 gzip 压缩的 *stream* 用于写入。" + +#: ../../library/tarfile.rst:142 +msgid "``'w|bz2'``" +msgstr "``'w|bz2'``" + +#: ../../library/tarfile.rst:142 +msgid "Open a bzip2 compressed *stream* for writing." +msgstr "打开一个 bzip2 压缩的 *stream* 用于写入。" + +#: ../../library/tarfile.rst:145 +msgid "``'w|xz'``" +msgstr "``'w|xz'``" + +#: ../../library/tarfile.rst:145 +msgid "Open an lzma compressed *stream* for writing." +msgstr "打开一个 lzma 压缩的 *stream* 用于写入。" + +#: ../../library/tarfile.rst:149 ../../library/tarfile.rst:365 +msgid "The ``'x'`` (exclusive creation) mode was added." +msgstr "添加了 ``'x'`` (单独创建) 模式。" + +#: ../../library/tarfile.rst:152 ../../library/tarfile.rst:368 +#: ../../library/tarfile.rst:605 +msgid "The *name* parameter accepts a :term:`path-like object`." +msgstr "*name* 形参接受一个 :term:`path-like object`。" + +#: ../../library/tarfile.rst:159 +msgid "" +"Class for reading and writing tar archives. Do not use this class directly: " +"use :func:`tarfile.open` instead. See :ref:`tarfile-objects`." +msgstr "" +"用于读取和写入 tar 归档的类。 请不要直接使用这个类:而要使用 :func:`tarfile.open`。 参见 :ref:`tarfile-" +"objects`。" + +#: ../../library/tarfile.rst:165 +msgid "" +"Return :const:`True` if *name* is a tar archive file, that the " +":mod:`tarfile` module can read. *name* may be a :class:`str`, file, or file-" +"like object." +msgstr "" +"如果 *name* 是一个 :mod:`tarfile` 能读取的 tar 归档文件则返回 :const:`True`。 *name* 可以为 " +":class:`str`,文件或文件型对象。" + +#: ../../library/tarfile.rst:168 +msgid "Support for file and file-like objects." +msgstr "支持文件或类文件对象。" + +#: ../../library/tarfile.rst:172 +msgid "The :mod:`tarfile` module defines the following exceptions:" +msgstr ":mod:`tarfile` 模块定义了以下异常:" + +#: ../../library/tarfile.rst:177 +msgid "Base class for all :mod:`tarfile` exceptions." +msgstr "所有 :mod:`tarfile` 异常的基类。" + +#: ../../library/tarfile.rst:182 +msgid "" +"Is raised when a tar archive is opened, that either cannot be handled by the" +" :mod:`tarfile` module or is somehow invalid." +msgstr "当一个不能被 :mod:`tarfile` 模块处理或者因某种原因而无效的 tar 归档被打开时将被引发。" + +#: ../../library/tarfile.rst:188 +msgid "" +"Is raised when a compression method is not supported or when the data cannot" +" be decoded properly." +msgstr "当一个压缩方法不受支持或者当数据无法被正确解码时将被引发。" + +#: ../../library/tarfile.rst:194 +msgid "" +"Is raised for the limitations that are typical for stream-like " +":class:`TarFile` objects." +msgstr "当达到流式 :class:`TarFile` 对象的典型限制时将被引发。" + +#: ../../library/tarfile.rst:200 +msgid "" +"Is raised for *non-fatal* errors when using :meth:`TarFile.extract`, but " +"only if :attr:`TarFile.errorlevel`\\ ``== 2``." +msgstr "" +"当使用 :meth:`TarFile.extract` 时针对 *non-fatal* 所引发的异常,但是仅限 " +":attr:`TarFile.errorlevel`\\ ``== 2``。" + +#: ../../library/tarfile.rst:206 +msgid "Is raised by :meth:`TarInfo.frombuf` if the buffer it gets is invalid." +msgstr "如果获取的缓冲区无效则会由 :meth:`TarInfo.frombuf` 引发的异常。" + +#: ../../library/tarfile.rst:211 +msgid "" +"Base class for members :ref:`refused ` by " +"filters." +msgstr "被过滤器 :ref:`拒绝 ` 的成员的基类。" + +#: ../../library/tarfile.rst:216 +msgid "" +"Information about the member that the filter refused to extract, as " +":ref:`TarInfo `." +msgstr "关于过滤器拒绝提取的成员的信息,为 :ref:`TarInfo ` 类型。" + +#: ../../library/tarfile.rst:221 +msgid "Raised to refuse extracting a member with an absolute path." +msgstr "在拒绝提取具有绝对路径的成员时引发。" + +#: ../../library/tarfile.rst:225 +msgid "" +"Raised to refuse extracting a member outside the destination directory." +msgstr "在拒绝提取目标目录以外的成员时引发。" + +#: ../../library/tarfile.rst:229 +msgid "Raised to refuse extracting a special file (e.g. a device or pipe)." +msgstr "在拒绝提取特殊文件(例如设备或管道)时引发。" + +#: ../../library/tarfile.rst:233 +msgid "Raised to refuse extracting a symbolic link with an absolute path." +msgstr "在拒绝提取具有绝对路径的符号链接时引发。" + +#: ../../library/tarfile.rst:237 +msgid "" +"Raised to refuse extracting a symbolic link pointing outside the destination" +" directory." +msgstr "在拒绝提取指向目标目录以外的符号链接时引发。" + +#: ../../library/tarfile.rst:241 +msgid "The following constants are available at the module level:" +msgstr "以下常量在模块层级上可用:" + +#: ../../library/tarfile.rst:245 +msgid "" +"The default character encoding: ``'utf-8'`` on Windows, the value returned " +"by :func:`sys.getfilesystemencoding` otherwise." +msgstr "" +"默认的字符编码格式:在 Windows 上为 ``'utf-8'``,其他系统上则为 :func:`sys.getfilesystemencoding`" +" 所返回的值。" + +#: ../../library/tarfile.rst:249 +msgid "" +"Each of the following constants defines a tar archive format that the " +":mod:`tarfile` module is able to create. See section :ref:`tar-formats` for " +"details." +msgstr "" +"以下常量各自定义了一个 :mod:`tarfile` 模块能够创建的 tar 归档格式。 相关细节请参阅 :ref:`tar-formats` 小节。" + +#: ../../library/tarfile.rst:256 +msgid "POSIX.1-1988 (ustar) format." +msgstr "POSIX.1-1988 (ustar) 格式。" + +#: ../../library/tarfile.rst:261 +msgid "GNU tar format." +msgstr "GNU tar 格式。" + +#: ../../library/tarfile.rst:266 +msgid "POSIX.1-2001 (pax) format." +msgstr "POSIX.1-2001 (pax) 格式。" + +#: ../../library/tarfile.rst:271 +msgid "" +"The default format for creating archives. This is currently " +":const:`PAX_FORMAT`." +msgstr "用于创建归档的默认格式。 目前为 :const:`PAX_FORMAT`。" + +#: ../../library/tarfile.rst:273 +msgid "" +"The default format for new archives was changed to :const:`PAX_FORMAT` from " +":const:`GNU_FORMAT`." +msgstr "新归档的默认格式已更改为 :const:`PAX_FORMAT` 而不再是 :const:`GNU_FORMAT`。" + +#: ../../library/tarfile.rst:281 +msgid "Module :mod:`zipfile`" +msgstr "模块 :mod:`zipfile`" + +#: ../../library/tarfile.rst:281 +msgid "Documentation of the :mod:`zipfile` standard module." +msgstr ":mod:`zipfile` 标准模块的文档。" + +#: ../../library/tarfile.rst:285 +msgid ":ref:`archiving-operations`" +msgstr ":ref:`archiving-operations`" + +#: ../../library/tarfile.rst:284 +msgid "" +"Documentation of the higher-level archiving facilities provided by the " +"standard :mod:`shutil` module." +msgstr "标准 :mod:`shutil` 模块所提供的高层级归档工具的文档。" + +#: ../../library/tarfile.rst:287 +msgid "" +"`GNU tar manual, Basic Tar Format " +"`_" +msgstr "" +"`GNU tar manual, Basic Tar Format " +"`_" + +#: ../../library/tarfile.rst:288 +msgid "Documentation for tar archive files, including GNU tar extensions." +msgstr "针对 tar 归档文件的文档,包含 GNU tar 扩展。" + +#: ../../library/tarfile.rst:294 +msgid "TarFile Objects" +msgstr "TarFile 对象" + +#: ../../library/tarfile.rst:296 +msgid "" +"The :class:`TarFile` object provides an interface to a tar archive. A tar " +"archive is a sequence of blocks. An archive member (a stored file) is made " +"up of a header block followed by data blocks. It is possible to store a file" +" in a tar archive several times. Each archive member is represented by a " +":class:`TarInfo` object, see :ref:`tarinfo-objects` for details." +msgstr "" +":class:`TarFile` 对象提供了一个 tar 归档的接口。 一个 tar 归档就是数据块的序列。 " +"一个归档成员(被保存文件)是由一个标头块加多个数据块组成的。 一个文件可以在一个 tar 归档中多次被保存。 每个归档成员都由一个 " +":class:`TarInfo` 对象来代表,详情参见 :ref:`tarinfo-objects`。" + +#: ../../library/tarfile.rst:302 +msgid "" +"A :class:`TarFile` object can be used as a context manager in a " +":keyword:`with` statement. It will automatically be closed when the block is" +" completed. Please note that in the event of an exception an archive opened " +"for writing will not be finalized; only the internally used file object will" +" be closed. See the :ref:`tar-examples` section for a use case." +msgstr "" +":class:`TarFile` 对象可在 :keyword:`with` 语句中作为上下文管理器使用。 当语句块结束时它将自动被关闭。 " +"请注意在发生异常事件时被打开用于写入的归档将不会被终结;只有内部使用的文件对象将被关闭。 相关用例请参见 :ref:`tar-examples`。" + +#: ../../library/tarfile.rst:308 +msgid "Added support for the context management protocol." +msgstr "添加了对上下文管理器协议的支持。" + +#: ../../library/tarfile.rst:313 +msgid "" +"All following arguments are optional and can be accessed as instance " +"attributes as well." +msgstr "下列所有参数都是可选项并且也可作为实例属性来访问。" + +#: ../../library/tarfile.rst:316 +msgid "" +"*name* is the pathname of the archive. *name* may be a :term:`path-like " +"object`. It can be omitted if *fileobj* is given. In this case, the file " +"object's :attr:`name` attribute is used if it exists." +msgstr "" +"*name* 是归档的路径名称。 *name* 可以是一个 :term:`path-like object`。 如果给定了 *fileobj* " +"则它可以被省略。 在此情况下,如果对象的 :attr:`name` 属性存在则它会被使用。" + +#: ../../library/tarfile.rst:320 +msgid "" +"*mode* is either ``'r'`` to read from an existing archive, ``'a'`` to append" +" data to an existing file, ``'w'`` to create a new file overwriting an " +"existing one, or ``'x'`` to create a new file only if it does not already " +"exist." +msgstr "" +"*mode* 可以为 ``'r'`` 表示从现有归档读取,``'a'`` 表示将数据追加到现有文件,``'w'`` 表示创建新文件覆盖现有文件,或者 " +"``'x'`` 表示仅在文件不存在时创建新文件。" + +#: ../../library/tarfile.rst:324 +msgid "" +"If *fileobj* is given, it is used for reading or writing data. If it can be " +"determined, *mode* is overridden by *fileobj*'s mode. *fileobj* will be used" +" from position 0." +msgstr "" +"如果给定了 *fileobj*,它会被用于读取或写入数据。 如果可以被确定,则 *mode* 会被 *fileobj* 的模式所覆盖。 " +"*fileobj* 的使用将从位置 0 开始。" + +#: ../../library/tarfile.rst:330 +msgid "*fileobj* is not closed, when :class:`TarFile` is closed." +msgstr "当 :class:`TarFile` 被关闭时,*fileobj* 不会被关闭。" + +#: ../../library/tarfile.rst:332 +msgid "" +"*format* controls the archive format for writing. It must be one of the " +"constants :const:`USTAR_FORMAT`, :const:`GNU_FORMAT` or :const:`PAX_FORMAT` " +"that are defined at module level. When reading, format will be automatically" +" detected, even if different formats are present in a single archive." +msgstr "" +"*format* 控制用于写入的归档格式。 它必须为在模块层级定义的常量 :const:`USTAR_FORMAT`, " +":const:`GNU_FORMAT` 或 :const:`PAX_FORMAT` 中的一个。 " +"当读取时,格式将被自动检测,即使单个归档中存在不同的格式。" + +#: ../../library/tarfile.rst:337 +msgid "" +"The *tarinfo* argument can be used to replace the default :class:`TarInfo` " +"class with a different one." +msgstr "*tarinfo* 参数可以被用来将默认的 :class:`TarInfo` 类替换为另一个。" + +#: ../../library/tarfile.rst:340 +msgid "" +"If *dereference* is :const:`False`, add symbolic and hard links to the " +"archive. If it is :const:`True`, add the content of the target files to the " +"archive. This has no effect on systems that do not support symbolic links." +msgstr "" +"如果 *dereference* 为 :const:`False`,则会将符号链接和硬链接添加到归档中。 如果为 " +":const:`True`,则会将目标文件的内容添加到归档中。 在不支持符号链接的系统上参数将不起作用。" + +#: ../../library/tarfile.rst:344 +msgid "" +"If *ignore_zeros* is :const:`False`, treat an empty block as the end of the " +"archive. If it is :const:`True`, skip empty (and invalid) blocks and try to " +"get as many members as possible. This is only useful for reading " +"concatenated or damaged archives." +msgstr "" +"如果 *ignore_zeros* 为 :const:`False`,则会将空的数据块当作归档的末尾来处理。 如果为 " +":const:`True`,则会跳过空的(和无效的)数据块并尝试获取尽可能多的成员。 此参数仅适用于读取拼接的或损坏的归档。" + +#: ../../library/tarfile.rst:348 +msgid "" +"*debug* can be set from ``0`` (no debug messages) up to ``3`` (all debug " +"messages). The messages are written to ``sys.stderr``." +msgstr "*debug* 可设为从 ``0`` (无调试消息) 到 ``3`` (全部调试消息)。 消息会被写入到 ``sys.stderr``。" + +#: ../../library/tarfile.rst:351 +msgid "" +"*errorlevel* controls how extraction errors are handled, see :attr:`the " +"corresponding attribute <~TarFile.errorlevel>`." +msgstr "*errorlevel* 控制如何处理提取错误,参见 :attr:`相应的属性 <~TarFile.errorlevel>`。" + +#: ../../library/tarfile.rst:354 +msgid "" +"The *encoding* and *errors* arguments define the character encoding to be " +"used for reading or writing the archive and how conversion errors are going " +"to be handled. The default settings will work for most users. See section " +":ref:`tar-unicode` for in-depth information." +msgstr "" +"*encoding* 和 *errors* 参数定义了读取或写入归档所使用的字符编码格式以及要如何处理转换错误。 默认设置将适用于大多数用户。 " +"要深入了解详情可参阅 :ref:`tar-unicode` 小节。" + +#: ../../library/tarfile.rst:359 +msgid "" +"The *pax_headers* argument is an optional dictionary of strings which will " +"be added as a pax global header if *format* is :const:`PAX_FORMAT`." +msgstr "" +"可选的 *pax_headers* 参数是字符串的字典,如果 *format* 为 :const:`PAX_FORMAT` 它将被作为 pax " +"全局标头被添加。" + +#: ../../library/tarfile.rst:362 ../../library/tarfile.rst:678 +msgid "Use ``'surrogateescape'`` as the default for the *errors* argument." +msgstr "使用 ``'surrogateescape'`` 作为 *errors* 参数的默认值。" + +#: ../../library/tarfile.rst:374 +msgid "" +"Alternative constructor. The :func:`tarfile.open` function is actually a " +"shortcut to this classmethod." +msgstr "作为替代的构造器。 :func:`tarfile.open` 函数实际上是这个类方法的快捷方式。" + +#: ../../library/tarfile.rst:380 +msgid "" +"Return a :class:`TarInfo` object for member *name*. If *name* can not be " +"found in the archive, :exc:`KeyError` is raised." +msgstr "" +"返回成员 *name* 的 :class:`TarInfo` 对象。 如果 *name* 在归档中找不到,则会引发 :exc:`KeyError`。" + +#: ../../library/tarfile.rst:385 +msgid "" +"If a member occurs more than once in the archive, its last occurrence is " +"assumed to be the most up-to-date version." +msgstr "如果一个成员在归档中出现超过一次,它的最后一次出现会被视为是最新的版本。" + +#: ../../library/tarfile.rst:391 +msgid "" +"Return the members of the archive as a list of :class:`TarInfo` objects. The" +" list has the same order as the members in the archive." +msgstr "以 :class:`TarInfo` 对象列表的形式返回归档的成员。 列表的顺序与归档中成员的顺序一致。" + +#: ../../library/tarfile.rst:397 +msgid "" +"Return the members as a list of their names. It has the same order as the " +"list returned by :meth:`getmembers`." +msgstr "以名称列表的形式返回成员。 它的顺序与 :meth:`getmembers` 所返回列表的顺序一致。" + +#: ../../library/tarfile.rst:403 +msgid "" +"Print a table of contents to ``sys.stdout``. If *verbose* is :const:`False`," +" only the names of the members are printed. If it is :const:`True`, output " +"similar to that of :program:`ls -l` is produced. If optional *members* is " +"given, it must be a subset of the list returned by :meth:`getmembers`." +msgstr "" +"将内容清单打印到 ``sys.stdout``。 如果 *verbose* 为 :const:`False`,则将只打印成员名称。 如果为 " +":const:`True`,则输出将类似于 :program:`ls -l` 的输出效果。 如果给定了可选的 *members*,它必须为 " +":meth:`getmembers` 所返回的列表的一个子集。" + +#: ../../library/tarfile.rst:408 +msgid "Added the *members* parameter." +msgstr "添加了 *members* 形参。" + +#: ../../library/tarfile.rst:414 +msgid "" +"Return the next member of the archive as a :class:`TarInfo` object, when " +":class:`TarFile` is opened for reading. Return :const:`None` if there is no " +"more available." +msgstr "" +"当 :class:`TarFile` 被打开用于读取时,以 :class:`TarInfo` 对象的形式返回归档的下一个成员。 如果不再有可用对象则返回" +" :const:`None`。" + +#: ../../library/tarfile.rst:421 +msgid "" +"Extract all members from the archive to the current working directory or " +"directory *path*. If optional *members* is given, it must be a subset of the" +" list returned by :meth:`getmembers`. Directory information like owner, " +"modification time and permissions are set after all members have been " +"extracted. This is done to work around two problems: A directory's " +"modification time is reset each time a file is created in it. And, if a " +"directory's permissions do not allow writing, extracting files to it will " +"fail." +msgstr "" +"将归档中的所有成员提取到当前工作目录或 *path* 目录。 如果给定了可选的 *members*,则它必须为 :meth:`getmembers` " +"所返回的列表的一个子集。 字典信息例如所有者、修改时间和权限会在所有成员提取完毕后被设置。 " +"这样做是为了避免两个问题:目录的修改时间会在每当在其中创建文件时被重置。 并且如果目录的权限不允许写入,提取文件到目录的操作将失败。" + +#: ../../library/tarfile.rst:429 +msgid "" +"If *numeric_owner* is :const:`True`, the uid and gid numbers from the " +"tarfile are used to set the owner/group for the extracted files. Otherwise, " +"the named values from the tarfile are used." +msgstr "" +"如果 *numeric_owner* 为 :const:`True`,则将使用来自 tarfile 的 uid 和 gid " +"数值来设置被提取文件的所有者/用户组。 在其他情况下,则会使用来自 tarfile 的名称值。" + +#: ../../library/tarfile.rst:433 +msgid "" +"The *filter* argument, which was added in Python 3.9.17, specifies how " +"``members`` are modified or rejected before extraction. See :ref:`tarfile-" +"extraction-filter` for details. It is recommended to set this explicitly " +"depending on which *tar* features you need to support." +msgstr "" + +#: ../../library/tarfile.rst:441 +msgid "" +"Never extract archives from untrusted sources without prior inspection. It " +"is possible that files are created outside of *path*, e.g. members that have" +" absolute filenames starting with ``\"/\"`` or filenames with two dots " +"``\"..\"``." +msgstr "" +"绝不要未经预先检验就从不可靠的源中提取归档文件。 这样有可能在 *path* 之外创建文件,例如某些成员具有以 ``\"/\"`` " +"开始的绝对路径文件名或带有两个点号 ``\"..\"`` 的文件名。" + +#: ../../library/tarfile.rst:446 ../../library/tarfile.rst:479 +msgid "" +"Set ``filter='data'`` to prevent the most dangerous security issues, and " +"read the :ref:`tarfile-extraction-filter` section for details." +msgstr "" +"设置 ``filter='data'`` 来防止最危险的安全问题,并请参阅 :ref:`tarfile-extraction-filter` " +"一节了解详情。section for details." + +#: ../../library/tarfile.rst:449 ../../library/tarfile.rst:485 +msgid "Added the *numeric_owner* parameter." +msgstr "添加了 *numeric_owner* 形参。" + +#: ../../library/tarfile.rst:452 ../../library/tarfile.rst:488 +msgid "The *path* parameter accepts a :term:`path-like object`." +msgstr "*path* 形参接受一个 :term:`path-like object`。" + +#: ../../library/tarfile.rst:455 ../../library/tarfile.rst:491 +#: ../../library/tarfile.rst:571 +msgid "Added the *filter* parameter." +msgstr "添加了 *filter* 形参。" + +#: ../../library/tarfile.rst:461 +msgid "" +"Extract a member from the archive to the current working directory, using " +"its full name. Its file information is extracted as accurately as possible. " +"*member* may be a filename or a :class:`TarInfo` object. You can specify a " +"different directory using *path*. *path* may be a :term:`path-like object`. " +"File attributes (owner, mtime, mode) are set unless *set_attrs* is false." +msgstr "" +"从归档中提取出一个成员放入当前工作目录,将使用其完整名称。 成员的文件信息会尽可能精确地被提取。 *member* 可以是一个文件名或 " +":class:`TarInfo` 对象。 你可以使用 *path* 指定一个不同的目录。 *path* 可以是一个 :term:`path-like " +"object`。 将会设置文件属性 (owner, mtime, mode) 除非 *set_attrs* 为假值。" + +#: ../../library/tarfile.rst:467 +msgid "" +"The *numeric_owner* and *filter* arguments are the same as for " +":meth:`extractall`." +msgstr "*numeric_owner* 和 *filter* 参数与 :meth:`extractall` 中的相同。" + +#: ../../library/tarfile.rst:472 +msgid "" +"The :meth:`extract` method does not take care of several extraction issues. " +"In most cases you should consider using the :meth:`extractall` method." +msgstr ":meth:`extract` 方法不会处理某些提取问题。 在大多数情况下你应当考虑使用 :meth:`extractall` 方法。" + +#: ../../library/tarfile.rst:477 +msgid "See the warning for :meth:`extractall`." +msgstr "查看 :meth:`extractall` 的警告信息。" + +#: ../../library/tarfile.rst:482 +msgid "Added the *set_attrs* parameter." +msgstr "添加了 *set_attrs* 形参。" + +#: ../../library/tarfile.rst:497 +msgid "" +"Extract a member from the archive as a file object. *member* may be a " +"filename or a :class:`TarInfo` object. If *member* is a regular file or a " +"link, an :class:`io.BufferedReader` object is returned. For all other " +"existing members, :const:`None` is returned. If *member* does not appear in " +"the archive, :exc:`KeyError` is raised." +msgstr "" +"将归档中的一个成员提取为文件对象。 *member* 可以是一个文件名或 :class:`TarInfo` 对象。 如果 *member* " +"是一个常规文件或链接,则会返回一个 :class:`io.BufferedReader` 对象。 对于所有其他现有成员,则都将返回 " +":const:`None`。 如果 *member* 未在归档中出现,则会引发 :exc:`KeyError`。" + +#: ../../library/tarfile.rst:503 +msgid "Return an :class:`io.BufferedReader` object." +msgstr "返回一个 :class:`io.BufferedReader` 对象。" + +#: ../../library/tarfile.rst:509 +msgid "" +"If *errorlevel* is ``0``, errors are ignored when using " +":meth:`TarFile.extract` and :meth:`TarFile.extractall`. Nevertheless, they " +"appear as error messages in the debug output when *debug* is greater than 0." +" If ``1`` (the default), all *fatal* errors are raised as :exc:`OSError` or " +":exc:`FilterError` exceptions. If ``2``, all *non-fatal* errors are raised " +"as :exc:`TarError` exceptions as well." +msgstr "" +"如果 *errorlevel* 为 ``0``,则在使用 :meth:`TarFile.extract` 和 " +":meth:`TarFile.extractall` 时错误会被忽略。 不过,当 *debug* 大于 0 时它们将会作为错误消息在调试输出中出现。 " +"如果 *errorlevel*为 ``1`` (默认值),则所有 *fatal* 错误都会作为 :exc:`OSError` 或 " +":exc:`FilterError` 异常被引发。 如果为 ``2``,则所有 *non-fatal* 错误也会作为 :exc:`TarError` " +"异常被引发。" + +#: ../../library/tarfile.rst:517 +msgid "" +"Some exceptions, e.g. ones caused by wrong argument types or data " +"corruption, are always raised." +msgstr "某些异常,如参数类型错误或数据损坏导致的异常,总是会被触发。" + +#: ../../library/tarfile.rst:520 +msgid "" +"Custom :ref:`extraction filters ` should raise " +":exc:`FilterError` for *fatal* errors and :exc:`ExtractError` for *non-" +"fatal* ones." +msgstr "" +"自定义 :ref:`提取过滤器 ` 应针对 *fatal* 错误引发 " +":exc:`FilterError`,针对 *non-fatal* 错误引发 :exc:`ExtractError`。" + +#: ../../library/tarfile.rst:524 +msgid "" +"Note that when an exception is raised, the archive may be partially " +"extracted. It is the user’s responsibility to clean up." +msgstr "请注意,当出现异常时,存档可能会被部分提取。用需要户负责进行清理。" + +#: ../../library/tarfile.rst:531 +msgid "" +"The :ref:`extraction filter ` used as a default " +"for the *filter* argument of :meth:`~TarFile.extract` and " +":meth:`~TarFile.extractall`." +msgstr "" +"被用作 :meth:`~TarFile.extract` 和 :meth:`~TarFile.extractall` 的 *filter* " +"参数的默认值的 :ref:`提取过滤器 `。" + +#: ../../library/tarfile.rst:535 +msgid "" +"The attribute may be ``None`` or a callable. String names are not allowed " +"for this attribute, unlike the *filter* argument to " +":meth:`~TarFile.extract`." +msgstr "" +"该属性可以为 ``None`` 或是一个可调用对象。 与 :meth:`~TarFile.extract` 的 *filter* " +"参数不同,该属性不允许使用字符串名称。" + +#: ../../library/tarfile.rst:539 +msgid "" +"If ``extraction_filter`` is ``None`` (the default), calling an extraction " +"method without a *filter* argument will use the :func:`fully_trusted " +"` filter for compatibility with previous Python " +"versions." +msgstr "" + +#: ../../library/tarfile.rst:544 +msgid "" +"In Python 3.12+, leaving ``extraction_filter=None`` will emit a " +"``DeprecationWarning``." +msgstr "" +"在 Python 3.12+ 中,保留 ``extraction_filter=None`` 会发出一个 ``DeprecationWarning`` " +"。" + +#: ../../library/tarfile.rst:547 +msgid "" +"In Python 3.14+, leaving ``extraction_filter=None`` will cause extraction " +"methods to use the :func:`data ` filter by default." +msgstr "" +"在 Python 3.14+ 中,保持 ``extraction_filter=None`` 将导致提取方法默认使用 :func:`data " +"` 过滤器。" + +#: ../../library/tarfile.rst:550 +msgid "" +"The attribute may be set on instances or overridden in subclasses. It also " +"is possible to set it on the ``TarFile`` class itself to set a global " +"default, although, since it affects all uses of *tarfile*, it is best " +"practice to only do so in top-level applications or :mod:`site configuration" +" `. To set a global default this way, a filter function needs to be " +"wrapped in :func:`staticmethod()` to prevent injection of a ``self`` " +"argument." +msgstr "" +"该属性可在实例上设置或在子类中重载。 也可以在 ``TarFile`` 类本身上设置它以设置一个全局默认值,不过,由于它会影响 *tarfile* " +"的所有使用,因此最好只在最高层级应用程序或 :mod:`站点配置 ` 中这样做。 要以这种方式设置全局默认值,需要用 " +":func:`staticmethod()` 包装过滤器函数以防止 ``self`` 参数的注入。" + +#: ../../library/tarfile.rst:560 +msgid "" +"Add the file *name* to the archive. *name* may be any type of file " +"(directory, fifo, symbolic link, etc.). If given, *arcname* specifies an " +"alternative name for the file in the archive. Directories are added " +"recursively by default. This can be avoided by setting *recursive* to " +":const:`False`. Recursion adds entries in sorted order. If *filter* is " +"given, it should be a function that takes a :class:`TarInfo` object argument" +" and returns the changed :class:`TarInfo` object. If it instead returns " +":const:`None` the :class:`TarInfo` object will be excluded from the archive." +" See :ref:`tar-examples` for an example." +msgstr "" +"将文件 *name* 添加到归档。 *name* 可以为任意类型的文件(目录、fifo、符号链接等等)。 如果给出 *arcname* " +"则它将为归档中的文件指定一个替代名称。 默认情况下会递归地添加目录。 这可以通过将 *recursive* 设为 :const:`False` 来避免。" +" 递归操作会按排序顺序添加条目。 如果给定了 *filter*,它应当为一个接受 :class:`TarInfo` 对象并返回已修改 " +":class:`TarInfo` 对象的函数。 如果它返回 :const:`None` 则 :class:`TarInfo` 对象将从归档中被排除。 " +"具体示例参见 :ref:`tar-examples`。" + +#: ../../library/tarfile.rst:574 +msgid "Recursion adds entries in sorted order." +msgstr "递归操作按排序顺序添加条目。" + +#: ../../library/tarfile.rst:580 +msgid "" +"Add the :class:`TarInfo` object *tarinfo* to the archive. If *fileobj* is " +"given, it should be a :term:`binary file`, and ``tarinfo.size`` bytes are " +"read from it and added to the archive. You can create :class:`TarInfo` " +"objects directly, or by using :meth:`gettarinfo`." +msgstr "" +"将 :class:`TarInfo` 对象 *tarinfo* 添加到归档。 如果给定了 *fileobj*,它应当是一个 :term:`binary " +"file`,并会从中读取 ``tarinfo.size`` 个字节添加到归档。 你可以直接创建 :class:`TarInfo` 对象,或是使用 " +":meth:`gettarinfo` 来创建。" + +#: ../../library/tarfile.rst:588 +msgid "" +"Create a :class:`TarInfo` object from the result of :func:`os.stat` or " +"equivalent on an existing file. The file is either named by *name*, or " +"specified as a :term:`file object` *fileobj* with a file descriptor. *name* " +"may be a :term:`path-like object`. If given, *arcname* specifies an " +"alternative name for the file in the archive, otherwise, the name is taken " +"from *fileobj*’s :attr:`~io.FileIO.name` attribute, or the *name* argument." +" The name should be a text string." +msgstr "" +"基于 :func:`os.stat` 的结果或者现有文件的相同数据创建一个 :class:`TarInfo`。 文件或者是命名为 " +"*name*,或者是使用文件描述符指定为一个 :term:`file object` *fileobj*。 *name* 可以是一个 " +":term:`path-like object`。 如果给定了 *arcname*,则它将为归档中的文件指定一个替代名称,在其他情况下,名称将从 " +"*fileobj* 的 :attr:`~io.FileIO.name` 属性或 *name* 参数获取。 名称应当是一个文本字符串。" + +#: ../../library/tarfile.rst:597 +msgid "" +"You can modify some of the :class:`TarInfo`’s attributes before you add it " +"using :meth:`addfile`. If the file object is not an ordinary file object " +"positioned at the beginning of the file, attributes such as " +":attr:`~TarInfo.size` may need modifying. This is the case for objects such" +" as :class:`~gzip.GzipFile`. The :attr:`~TarInfo.name` may also be modified," +" in which case *arcname* could be a dummy string." +msgstr "" +"你可以在使用 :meth:`addfile` 添加 :class:`TarInfo` 的某些属性之前修改它们。 " +"如果文件对象不是从文件开头进行定位的普通文件对象,:attr:`~TarInfo.size` 之类的属性就可能需要修改。 例如 " +":class:`~gzip.GzipFile` 之类的文件就属于这种情况。 :attr:`~TarInfo.name` 也可以被修改,在这种情况下 " +"*arcname* 可以是一个占位字符串。" + +#: ../../library/tarfile.rst:611 +msgid "" +"Close the :class:`TarFile`. In write mode, two finishing zero blocks are " +"appended to the archive." +msgstr "关闭 :class:`TarFile`。 在写入模式下,会向归档添加两个表示结束的零数据块。" + +#: ../../library/tarfile.rst:617 +msgid "A dictionary containing key-value pairs of pax global headers." +msgstr "一个包含 pax 全局标头的键值对的字典。" + +#: ../../library/tarfile.rst:624 +msgid "TarInfo Objects" +msgstr "TarInfo 对象" + +#: ../../library/tarfile.rst:626 +msgid "" +"A :class:`TarInfo` object represents one member in a :class:`TarFile`. Aside" +" from storing all required attributes of a file (like file type, size, time," +" permissions, owner etc.), it provides some useful methods to determine its " +"type. It does *not* contain the file's data itself." +msgstr "" +":class:`TarInfo` 对象代表 :class:`TarFile` 中的一个文件。 " +"除了会存储所有必要的文件属性(例如文件类型、大小、时间、权限、所有者等),它还提供了一些确定文件类型的有用方法。 此对象 *并不* 包含文件数据本身。" + +#: ../../library/tarfile.rst:631 +msgid "" +":class:`TarInfo` objects are returned by :class:`TarFile`'s methods " +":meth:`~TarFile.getmember`, :meth:`~TarFile.getmembers` and " +":meth:`~TarFile.gettarinfo`." +msgstr "" +":class:`TarInfo` 对象可通过 :class:`TarFile` 的方法 :meth:`~TarFile.getmember`, " +":meth:`~TarFile.getmembers` 和 :meth:`~TarFile.gettarinfo` 返回。" + +#: ../../library/tarfile.rst:635 +msgid "" +"Modifying the objects returned by :meth:`~!TarFile.getmember` or " +":meth:`~!TarFile.getmembers` will affect all subsequent operations on the " +"archive. For cases where this is unwanted, you can use :mod:`copy.copy() " +"` or call the :meth:`~TarInfo.replace` method to create a modified " +"copy in one step." +msgstr "" +"修改 :meth:`~!TarFile.getmember` 或 :meth:`~!TarFile.getmembers` " +"返回的对象将会影响在归档上的所有后续操作。 对于不希望如此的情况,你可以使用 :mod:`copy.copy() ` 或调用 " +":meth:`~TarInfo.replace` 方法通过一个步骤创建经修改的副本。" + +#: ../../library/tarfile.rst:641 +msgid "" +"Several attributes can be set to ``None`` to indicate that a piece of " +"metadata is unused or unknown. Different :class:`TarInfo` methods handle " +"``None`` differently:" +msgstr "" +"部分属性可以设为 ``None`` 以表示一些元数据未被使用或未知。 不同的 :class:`TarInfo` 方法会以不同的方式处理 " +"``None``:" + +#: ../../library/tarfile.rst:645 +msgid "" +"The :meth:`~TarFile.extract` or :meth:`~TarFile.extractall` methods will " +"ignore the corresponding metadata, leaving it set to a default." +msgstr "" +":meth:`~TarFile.extract` 或 :meth:`~TarFile.extractall` 方法会忽略相应的元数据,让其保持默认设置。" + +#: ../../library/tarfile.rst:647 +msgid ":meth:`~TarFile.addfile` will fail." +msgstr ":meth:`~TarFile.addfile` 将会失败。" + +#: ../../library/tarfile.rst:648 +msgid ":meth:`~TarFile.list` will print a placeholder string." +msgstr ":meth:`~TarFile.list` 将打印一个占位字符串。" + +#: ../../library/tarfile.rst:651 +msgid "Added :meth:`~TarInfo.replace` and handling of ``None``." +msgstr "" + +#: ../../library/tarfile.rst:657 +msgid "Create a :class:`TarInfo` object." +msgstr "创建一个 :class:`TarInfo` 对象。" + +#: ../../library/tarfile.rst:662 +msgid "Create and return a :class:`TarInfo` object from string buffer *buf*." +msgstr "基于字符串缓冲区 *buf* 创建并返回一个 :class:`TarInfo` 对象。" + +#: ../../library/tarfile.rst:664 +msgid "Raises :exc:`HeaderError` if the buffer is invalid." +msgstr "如果缓冲区无效则会引发 :exc:`HeaderError`。" + +#: ../../library/tarfile.rst:669 +msgid "" +"Read the next member from the :class:`TarFile` object *tarfile* and return " +"it as a :class:`TarInfo` object." +msgstr "从 :class:`TarFile` 对象 *tarfile* 读取下一个成员并将其作为 :class:`TarInfo` 对象返回。" + +#: ../../library/tarfile.rst:675 +msgid "" +"Create a string buffer from a :class:`TarInfo` object. For information on " +"the arguments see the constructor of the :class:`TarFile` class." +msgstr "基于 :class:`TarInfo` 对象创建一个字符串缓冲区。 有关参数的信息请参见 :class:`TarFile` 类的构造器。" + +#: ../../library/tarfile.rst:682 +msgid "A ``TarInfo`` object has the following public data attributes:" +msgstr "``TarInfo`` 对象具有以下公有数据属性:" + +#: ../../library/tarfile.rst:688 +msgid "Name of the archive member." +msgstr "归档成员的名称。" + +#: ../../library/tarfile.rst:694 +msgid "Size in bytes." +msgstr "以字节表示的大小。" + +#: ../../library/tarfile.rst:700 +msgid "" +"Time of last modification in seconds since the :ref:`epoch `, as in " +":attr:`os.stat_result.st_mtime`." +msgstr "" +"以 :ref:`Unix 纪元 ` 秒数表示的最近修改时间,与 :attr:`os.stat_result.st_mtime` 相同。" + +#: ../../library/tarfile.rst:705 ../../library/tarfile.rst:716 +#: ../../library/tarfile.rst:748 ../../library/tarfile.rst:759 +#: ../../library/tarfile.rst:770 ../../library/tarfile.rst:781 +msgid "" +"Can be set to ``None`` for :meth:`~TarFile.extract` and " +":meth:`~TarFile.extractall`, causing extraction to skip applying this " +"attribute." +msgstr "" +"对于 :meth:`~TarFile.extract` 和 :meth:`~TarFile.extractall` 可设为 " +"``None``,以使解压缩操作跳过应用此属性。" + +#: ../../library/tarfile.rst:712 +msgid "Permission bits, as for :func:`os.chmod`." +msgstr "权限比特位,与 :func:`os.chmod` 相同。" + +#: ../../library/tarfile.rst:722 +msgid "" +"File type. *type* is usually one of these constants: :const:`REGTYPE`, " +":const:`AREGTYPE`, :const:`LNKTYPE`, :const:`SYMTYPE`, :const:`DIRTYPE`, " +":const:`FIFOTYPE`, :const:`CONTTYPE`, :const:`CHRTYPE`, :const:`BLKTYPE`, " +":const:`GNUTYPE_SPARSE`. To determine the type of a :class:`TarInfo` object" +" more conveniently, use the ``is*()`` methods below." +msgstr "" +"文件类型。 *type* 通常为以下常量之一: :const:`REGTYPE`, :const:`AREGTYPE`, " +":const:`LNKTYPE`, :const:`SYMTYPE`, :const:`DIRTYPE`, :const:`FIFOTYPE`, " +":const:`CONTTYPE`, :const:`CHRTYPE`, :const:`BLKTYPE`, " +":const:`GNUTYPE_SPARSE`。 要更方便地确定一个 :class:`TarInfo` 对象的类型,请使用下述的 ``is*()`` " +"方法。" + +#: ../../library/tarfile.rst:732 +msgid "" +"Name of the target file name, which is only present in :class:`TarInfo` " +"objects of type :const:`LNKTYPE` and :const:`SYMTYPE`." +msgstr "" +"目标文件名的名称,该属性仅在类型为 :const:`LNKTYPE` 和 :const:`SYMTYPE` 的 :class:`TarInfo` " +"对象中存在。" + +#: ../../library/tarfile.rst:735 +msgid "" +"For symbolic links (``SYMTYPE``), the *linkname* is relative to the " +"directory that contains the link. For hard links (``LNKTYPE``), the " +"*linkname* is relative to the root of the archive." +msgstr "" +"对于符号链接 (``SYMTYPE``),*linkname* 是相对于包含链接的目录的。 对于硬链接 (``LNKTYPE``),*linkname*" +" 则是相对于存档根目录的。" + +#: ../../library/tarfile.rst:744 +msgid "User ID of the user who originally stored this member." +msgstr "最初保存该成员的用户的用户 ID。" + +#: ../../library/tarfile.rst:755 +msgid "Group ID of the user who originally stored this member." +msgstr "最初保存该成员的用户的分组 ID。" + +#: ../../library/tarfile.rst:766 +msgid "User name." +msgstr "用户名。" + +#: ../../library/tarfile.rst:777 +msgid "Group name." +msgstr "分组名。" + +#: ../../library/tarfile.rst:788 +msgid "" +"A dictionary containing key-value pairs of an associated pax extended " +"header." +msgstr "一个包含所关联的 pax 扩展标头的键值对的字典。" + +#: ../../library/tarfile.rst:796 +msgid "" +"Return a *new* copy of the :class:`!TarInfo` object with the given " +"attributes changed. For example, to return a ``TarInfo`` with the group name" +" set to ``'staff'``, use::" +msgstr "" +"返回修改了给定属性的 :class:`!TarInfo` 对象的 *新* 副本。 例如,要返回组名设为 ``'staff'`` 的 " +"``TarInfo``,请使用::" + +#: ../../library/tarfile.rst:802 +msgid "" +"By default, a deep copy is made. If *deep* is false, the copy is shallow, " +"i.e. ``pax_headers`` and any custom attributes are shared with the original " +"``TarInfo`` object." +msgstr "" +"在默认情况下,将执行深拷贝。 如果 *deep* 为假值,则执行浅拷贝,即 ``pax_headers`` 及任何自定义属性都与原始 " +"``TarInfo`` 对象共享。" + +#: ../../library/tarfile.rst:806 +msgid "A :class:`TarInfo` object also provides some convenient query methods:" +msgstr ":class:`TarInfo` 对象还提供了一些便捷查询方法:" + +#: ../../library/tarfile.rst:811 +msgid "Return :const:`True` if the :class:`Tarinfo` object is a regular file." +msgstr "如果 :class:`Tarinfo` 对象为普通文件则返回 :const:`True`。" + +#: ../../library/tarfile.rst:816 +msgid "Same as :meth:`isfile`." +msgstr "与 :meth:`isfile` 相同。" + +#: ../../library/tarfile.rst:821 +msgid "Return :const:`True` if it is a directory." +msgstr "如果为目录则返回 :const:`True`。" + +#: ../../library/tarfile.rst:826 +msgid "Return :const:`True` if it is a symbolic link." +msgstr "如果为符号链接则返回 :const:`True`。" + +#: ../../library/tarfile.rst:831 +msgid "Return :const:`True` if it is a hard link." +msgstr "如果为硬链接则返回 :const:`True`。" + +#: ../../library/tarfile.rst:836 +msgid "Return :const:`True` if it is a character device." +msgstr "如果为字符设备则返回 :const:`True`。" + +#: ../../library/tarfile.rst:841 +msgid "Return :const:`True` if it is a block device." +msgstr "如果为块设备则返回 :const:`True`。" + +#: ../../library/tarfile.rst:846 +msgid "Return :const:`True` if it is a FIFO." +msgstr "如果为 FIFO 则返回 :const:`True`。." + +#: ../../library/tarfile.rst:851 +msgid "" +"Return :const:`True` if it is one of character device, block device or FIFO." +msgstr "如果为字符设备、块设备或 FIFO 之一则返回 :const:`True`。" + +#: ../../library/tarfile.rst:857 +msgid "Extraction filters" +msgstr "解压缩过滤器" + +#: ../../library/tarfile.rst:861 +msgid "" +"The *tar* format is designed to capture all details of a UNIX-like " +"filesystem, which makes it very powerful. Unfortunately, the features make " +"it easy to create tar files that have unintended -- and possibly malicious " +"-- effects when extracted. For example, extracting a tar file can overwrite " +"arbitrary files in various ways (e.g. by using absolute paths, ``..`` path " +"components, or symlinks that affect later members)." +msgstr "" +"*tar* 格式的设计旨在捕捉类 UNIX 文件系统的所有细节,这使其功能非常强大。 不幸的是,这些特性也使得很容易创建在解压缩时产生意想不到的 -- " +"甚至可能是恶意的 -- 影响的 tar 文件。 举例来说,解压缩 tar 文件时可以通过各种方式覆盖任意文件(例如通过使用绝对路径、``..`` " +"路径组件或影响后续成员的符号链接等)。" + +#: ../../library/tarfile.rst:869 +msgid "" +"In most cases, the full functionality is not needed. Therefore, *tarfile* " +"supports extraction filters: a mechanism to limit functionality, and thus " +"mitigate some of the security issues." +msgstr "在大多数情况下,并不需要全部的功能。 因此,*tarfile* 支持提取过滤器:一种限制功能的机制,从而避免一些安全问题。" + +#: ../../library/tarfile.rst:875 +msgid ":pep:`706`" +msgstr ":pep:`706`" + +#: ../../library/tarfile.rst:876 +msgid "Contains further motivation and rationale behind the design." +msgstr "包含设计背后进一步的动机和理由。" + +#: ../../library/tarfile.rst:878 +msgid "" +"The *filter* argument to :meth:`TarFile.extract` or " +":meth:`~TarFile.extractall` can be:" +msgstr "" +":meth:`TarFile.extract` 或 :meth:`~TarFile.extractall` 的 *filter* 参数可以是:" + +#: ../../library/tarfile.rst:881 +msgid "" +"the string ``'fully_trusted'``: Honor all metadata as specified in the " +"archive. Should be used if the user trusts the archive completely, or " +"implements their own complex verification." +msgstr "" +"字符串 ``'fully_trusted'``:尊重归档文件中指定的所有元数据。 如果用户完全信任该归档,或实现了自己的复杂验证则应使用此过滤器。" + +#: ../../library/tarfile.rst:886 +msgid "" +"the string ``'tar'``: Honor most *tar*-specific features (i.e. features of " +"UNIX-like filesystems), but block features that are very likely to be " +"surprising or malicious. See :func:`tar_filter` for details." +msgstr "" +"字符串 ``'tar'``: 尊重大多数 *tar* 专属的特性(即类 UNIX 文件系统的功能),但阻止极有可能令人惊讶的或恶意的功能。 详情参见 " +":func:`tar_filter`。" + +#: ../../library/tarfile.rst:890 +msgid "" +"the string ``'data'``: Ignore or block most features specific to UNIX-like " +"filesystems. Intended for extracting cross-platform data archives. See " +":func:`data_filter` for details." +msgstr "" +"字符串 ``'data'``:忽略或阻止大多数类 UNIX 文件系统专属的特性。 用于提取跨平台数据归档文件。 详情参见 " +":func:`data_filter`。" + +#: ../../library/tarfile.rst:894 +msgid "``None`` (default): Use :attr:`TarFile.extraction_filter`." +msgstr "``None`` (默认): 使用 :attr:`TarFile.extraction_filter`。" + +#: ../../library/tarfile.rst:896 +msgid "" +"If that is also ``None`` (the default), the ``'fully_trusted'`` filter will " +"be used (for compatibility with earlier versions of Python)." +msgstr "如果也是 ``None`` (默认值),则将使用 ``'fully_trusted'`` 过滤器(为了与 Python 早期版本兼容)。" + +#: ../../library/tarfile.rst:899 +msgid "In Python 3.12, the default will emit a ``DeprecationWarning``." +msgstr "在 Python 3.12 中,默认情况下会发出 ``DeprecationWarning`` 。" + +#: ../../library/tarfile.rst:901 +msgid "" +"In Python 3.14, the ``'data'`` filter will become the default instead. It's " +"possible to switch earlier; see :attr:`TarFile.extraction_filter`." +msgstr "" +"在 Python 3.14 中,``'data'`` 过滤器将变成默认选项。 也可以提前切换,参见 " +":attr:`TarFile.extraction_filter`。" + +#: ../../library/tarfile.rst:904 +msgid "" +"A callable which will be called for each extracted member with a " +":ref:`TarInfo ` describing the member and the destination " +"path to where the archive is extracted (i.e. the same path is used for all " +"members)::" +msgstr "" +"该可调用对象将针每个被提取的成员执行调用并附带一个 :ref:`TarInfo ` " +"来描述该成员以及被提取归档文件的目标路径(即供所有成员使用的相同路径)::" + +#: ../../library/tarfile.rst:911 +msgid "" +"The callable is called just before each member is extracted, so it can take " +"the current state of the disk into account. It can:" +msgstr "该可调用对象会在提取每个成员之前被调用,因此它能够将磁盘的当前状态考虑在内。 它可以:" + +#: ../../library/tarfile.rst:915 +msgid "" +"return a :class:`TarInfo` object which will be used instead of the metadata " +"in the archive, or" +msgstr "返回一个 :class:`TarInfo` 对象,该对象将被用来代替归档文件中的元数据,或者" + +#: ../../library/tarfile.rst:917 +msgid "return ``None``, in which case the member will be skipped, or" +msgstr "返回 ``None``,在这种情况下该成员将被跳过,或者" + +#: ../../library/tarfile.rst:918 +msgid "" +"raise an exception to abort the operation or skip the member, depending on " +":attr:`~TarFile.errorlevel`. Note that when extraction is aborted, " +":meth:`~TarFile.extractall` may leave the archive partially extracted. It " +"does not attempt to clean up." +msgstr "" +"根据 :attr:`~TarFile.errorlevel` 的值引发一个异常以中止操作或跳过成员。 " +"请注意当提取操作中止时,:meth:`~TarFile.extractall` 可能会保留部分已提取的归档文件。 它不会尝试执行清理。" + +#: ../../library/tarfile.rst:924 +msgid "Default named filters" +msgstr "默认的命名过滤器" + +#: ../../library/tarfile.rst:926 +msgid "" +"The pre-defined, named filters are available as functions, so they can be " +"reused in custom filters:" +msgstr "预定义的命名过滤器可作为函数使用,因此它们可在自定义过滤器中被重用:" + +#: ../../library/tarfile.rst:931 +msgid "Return *member* unchanged." +msgstr "不加修改地返回 *member*。" + +#: ../../library/tarfile.rst:933 +msgid "This implements the ``'fully_trusted'`` filter." +msgstr "实现 ``'fully_trusted'`` 过滤器。" + +#: ../../library/tarfile.rst:937 +msgid "Implements the ``'tar'`` filter." +msgstr "实现 ``'tar'`` 过滤器。" + +#: ../../library/tarfile.rst:939 +msgid "Strip leading slashes (``/`` and :attr:`os.sep`) from filenames." +msgstr "" + +#: ../../library/tarfile.rst:940 +msgid "" +":ref:`Refuse ` to extract files with absolute " +"paths (in case the name is absolute even after stripping slashes, e.g. " +"``C:/foo`` on Windows). This raises :class:`~tarfile.AbsolutePathError`." +msgstr "" +":ref:`拒绝 ` 提取具有绝对路径的文件(针对名称在去除斜杠后仍为绝对路径的情况,例如 " +"Windows 上 ``C:/foo`` 这样的路径)。 这会引发 :class:`~tarfile.AbsolutePathError`。" + +#: ../../library/tarfile.rst:944 +msgid "" +":ref:`Refuse ` to extract files whose absolute " +"path (after following symlinks) would end up outside the destination. This " +"raises :class:`~tarfile.OutsideDestinationError`." +msgstr "" +":ref:`拒绝 ` 提取具有位于目标以外的绝对路径(跟随符号链接之后)的文件。这会引发 " +":class:`~tarfile.OutsideDestinationError`。" + +#: ../../library/tarfile.rst:947 +msgid "" +"Clear high mode bits (setuid, setgid, sticky) and group/other write bits " +"(:attr:`~stat.S_IWGRP`|:attr:`~stat.S_IWOTH`)." +msgstr "" + +#: ../../library/tarfile.rst:950 ../../library/tarfile.rst:983 +msgid "Return the modified ``TarInfo`` member." +msgstr "返回修改后的 ``TarInfo`` 成员。" + +#: ../../library/tarfile.rst:954 +msgid "" +"Implements the ``'data'`` filter. In addition to what ``tar_filter`` does:" +msgstr "实现 ``'data'`` 过滤器。 在 ``tar_filter`` 的所具有的功能之外:" + +#: ../../library/tarfile.rst:957 +msgid "" +":ref:`Refuse ` to extract links (hard or soft) " +"that link to absolute paths, or ones that link outside the destination." +msgstr "" +":ref:`拒绝 ` 提取链接到绝对路径的链接(不论是硬链接还是软链接),或链接到目标之外的链接。" + +#: ../../library/tarfile.rst:960 +msgid "" +"This raises :class:`~tarfile.AbsoluteLinkError` or " +":class:`~tarfile.LinkOutsideDestinationError`." +msgstr "" +"这会引发 :class:`~tarfile.AbsoluteLinkError` 或 " +":class:`~tarfile.LinkOutsideDestinationError`。" + +#: ../../library/tarfile.rst:963 +msgid "" +"Note that such files are refused even on platforms that do not support " +"symbolic links." +msgstr "请注意即使在不支持符号链接的平台上此类文件也会被拒绝。" + +#: ../../library/tarfile.rst:966 +msgid "" +":ref:`Refuse ` to extract device files (including" +" pipes). This raises :class:`~tarfile.SpecialFileError`." +msgstr "" +":ref:`拒绝 ` 提取设备文件(包括管道)。 这会引发 " +":class:`~tarfile.SpecialFileError`。" + +#: ../../library/tarfile.rst:970 +msgid "For regular files, including hard links:" +msgstr "用于常规文件,包括硬链接:" + +#: ../../library/tarfile.rst:972 +msgid "" +"Set the owner read and write permissions " +"(:attr:`~stat.S_IRUSR`|:attr:`~stat.S_IWUSR`)." +msgstr "" + +#: ../../library/tarfile.rst:974 +msgid "" +"Remove the group & other executable permission " +"(:attr:`~stat.S_IXGRP`|:attr:`~stat.S_IXOTH`) if the owner doesn’t have it " +"(:attr:`~stat.S_IXUSR`)." +msgstr "" + +#: ../../library/tarfile.rst:978 +msgid "" +"For other files (directories), set ``mode`` to ``None``, so that extraction " +"methods skip applying permission bits." +msgstr "对于其他文件(目录),将 ``mode`` 设为 ``None``,以便提取方法跳过应用权限位。" + +#: ../../library/tarfile.rst:980 +msgid "" +"Set user and group info (``uid``, ``gid``, ``uname``, ``gname``) to " +"``None``, so that extraction methods skip setting it." +msgstr "" +"将用户和组信息 (``uid``, ``gid``, ``uname``, ``gname``) 设为 ``None``,以使得提取方法跳过对它的设置。" + +#: ../../library/tarfile.rst:989 +msgid "Filter errors" +msgstr "过滤器错误" + +#: ../../library/tarfile.rst:991 +msgid "" +"When a filter refuses to extract a file, it will raise an appropriate " +"exception, a subclass of :class:`~tarfile.FilterError`. This will abort the " +"extraction if :attr:`TarFile.errorlevel` is 1 or more. With ``errorlevel=0``" +" the error will be logged and the member will be skipped, but extraction " +"will continue." +msgstr "" +"当过滤器拒绝提取文件时,它将引发一个适当的异常,即 :class:`~tarfile.FilterError` 的子类。 如果 " +":attr:`TarFile.errorlevel` 为 1 或更大的值则提取将中止。 如果 ``errorlevel=0`` " +"则会记录错误并跳过该成员,但提取仍会继续。" + +#: ../../library/tarfile.rst:999 +msgid "Hints for further verification" +msgstr "进一步核验的提示" + +#: ../../library/tarfile.rst:1001 +msgid "" +"Even with ``filter='data'``, *tarfile* is not suited for extracting " +"untrusted files without prior inspection. Among other issues, the pre-" +"defined filters do not prevent denial-of-service attacks. Users should do " +"additional checks." +msgstr "" +"即使 ``filter='data'``,*tarfile* 也不适合在没有事先检查的情况下提取不受信任的文件。 " +"除其他问题外,预定义的过滤器不能防止拒绝服务攻击。 用户应当进行额外的检查。" + +#: ../../library/tarfile.rst:1006 +msgid "Here is an incomplete list of things to consider:" +msgstr "以下是一份不完整的考虑事项列表:" + +#: ../../library/tarfile.rst:1008 +msgid "" +"Extract to a :func:`new temporary directory ` to prevent " +"e.g. exploiting pre-existing links, and to make it easier to clean up after " +"a failed extraction." +msgstr "提取到 :func:`新的临时目录 ` 以避免滥用已存在的链接等问题,并使得提取失败后更容易清理。" + +#: ../../library/tarfile.rst:1011 +msgid "" +"When working with untrusted data, use external (e.g. OS-level) limits on " +"disk, memory and CPU usage." +msgstr "在处理不受信任的数据时,使用外部(例如操作系统层级)的磁盘、内存和 CPU 使用限制。" + +#: ../../library/tarfile.rst:1013 +msgid "" +"Check filenames against an allow-list of characters (to filter out control " +"characters, confusables, foreign path separators, etc.)." +msgstr "根据允许字符列表检查文件名(来过滤控制字符、易混淆字符、外来路径分隔符等)。" + +#: ../../library/tarfile.rst:1016 +msgid "" +"Check that filenames have expected extensions (discouraging files that " +"execute when you “click on them”, or extension-less files like Windows " +"special device names)." +msgstr "检查文件名是否有预期的扩展名(不鼓励使用在“点击”时会被执行的文件,或像 Windows 特殊设备名称这样没有扩展名的文件)。" + +#: ../../library/tarfile.rst:1018 +msgid "" +"Limit the number of extracted files, total size of extracted data, filename " +"length (including symlink length), and size of individual files." +msgstr "限制提取文件的数量、提取数据的总大小、文件名长度(包括符号链接长度)以及单个文件的大小。" + +#: ../../library/tarfile.rst:1020 +msgid "" +"Check for files that would be shadowed on case-insensitive filesystems." +msgstr "检查在不区分大小写的文件系统上会被屏蔽的文件。" + +#: ../../library/tarfile.rst:1022 +msgid "Also note that:" +msgstr "还需要注意:" + +#: ../../library/tarfile.rst:1024 +msgid "" +"Tar files may contain multiple versions of the same file. Later ones are " +"expected to overwrite any earlier ones. This feature is crucial to allow " +"updating tape archives, but can be abused maliciously." +msgstr "Tar 文件可能包含同一文件的多个版本。 较晚的版本会覆盖任何较早的版本。 这一功能对于更新磁带归档来说至关重要,但也可能被恶意滥用。" + +#: ../../library/tarfile.rst:1028 +msgid "" +"*tarfile* does not protect against issues with “live” data, e.g. an attacker" +" tinkering with the destination (or source) directory while extraction (or " +"archiving) is in progress." +msgstr "*tarfile* 无法为“实时”数据的问题提供保护,例如在提取(或归档)过程中攻击者对目标(或源)目录进行了改动。" + +#: ../../library/tarfile.rst:1034 +msgid "Supporting older Python versions" +msgstr "支持较早的 Python 版本" + +#: ../../library/tarfile.rst:1036 +msgid "" +"Extraction filters were added to Python 3.12, and are backported to older " +"versions as security updates. To check whether the feature is available, use" +" e.g. ``hasattr(tarfile, 'data_filter')`` rather than checking the Python " +"version." +msgstr "" + +#: ../../library/tarfile.rst:1041 +msgid "" +"The following examples show how to support Python versions with and without " +"the feature. Note that setting ``extraction_filter`` will affect any " +"subsequent operations." +msgstr "" +"下面的例子演示了如何支持带有和没有有该功能的 Python 版本。 请注意设置 ``extraction_filter`` 会影响任何后续的操作。" + +#: ../../library/tarfile.rst:1045 +msgid "Fully trusted archive::" +msgstr "完全受信任的归档::" + +#: ../../library/tarfile.rst:1050 +msgid "" +"Use the ``'data'`` filter if available, but revert to Python 3.11 behavior " +"(``'fully_trusted'``) if this feature is not available::" +msgstr "" +"如果可用则使用 ``'data'`` 过滤器;如果此特性不可用,则恢复为 Python 3.11 的行为 (``'fully_trusted'``)::" + +#: ../../library/tarfile.rst:1057 +msgid "Use the ``'data'`` filter; *fail* if it is not available::" +msgstr "使用 ``'data'`` 过滤器;如果不可用则 *fail*::" + +#: ../../library/tarfile.rst:1061 +msgid "or::" +msgstr "或者:" + +#: ../../library/tarfile.rst:1066 +msgid "Use the ``'data'`` filter; *warn* if it is not available::" +msgstr "使用 ``'data'`` 过滤器;如果不可用则 *warn*::" + +#: ../../library/tarfile.rst:1077 +msgid "Stateful extraction filter example" +msgstr "有状态的提取过滤器示例" + +#: ../../library/tarfile.rst:1079 +msgid "" +"While *tarfile*'s extraction methods take a simple *filter* callable, custom" +" filters may be more complex objects with an internal state. It may be " +"useful to write these as context managers, to be used like this::" +msgstr "" +"*tarfile* 的提取方法接受一个简单的 *filter* 可调用对象,而自定义过滤器则可以是具有内部状态的更复杂对象。 " +"将其写成为下文管理器可能会很有用处,即以这样的方式使用::" + +#: ../../library/tarfile.rst:1086 +msgid "Such a filter can be written as, for example::" +msgstr "例如,这种过滤器可以写成::" + +#: ../../library/tarfile.rst:1108 +msgid "Command-Line Interface" +msgstr "命令行接口" + +#: ../../library/tarfile.rst:1112 +msgid "" +"The :mod:`tarfile` module provides a simple command-line interface to " +"interact with tar archives." +msgstr ":mod:`tarfile` 模块提供了简单的命令行接口以便与 tar 归档进行交互。" + +#: ../../library/tarfile.rst:1115 +msgid "" +"If you want to create a new tar archive, specify its name after the " +":option:`-c` option and then list the filename(s) that should be included:" +msgstr "如果你想要创建一个新的 tar 归档,请在 :option:`-c` 选项后指定其名称然后列出应当被包含的文件名:" + +#: ../../library/tarfile.rst:1122 +msgid "Passing a directory is also acceptable:" +msgstr "传入一个目录也是可接受的:" + +#: ../../library/tarfile.rst:1128 +msgid "" +"If you want to extract a tar archive into the current directory, use the " +":option:`-e` option:" +msgstr "如果你想要将一个 tar 归档提取到指定的目录,请使用 :option:`-e` 选项:" + +#: ../../library/tarfile.rst:1135 +msgid "" +"You can also extract a tar archive into a different directory by passing the" +" directory's name:" +msgstr "你也可以通过传入目录名称将一个 tar 归档提取到不同的目录:" + +#: ../../library/tarfile.rst:1142 +msgid "For a list of the files in a tar archive, use the :option:`-l` option:" +msgstr "要获取一个 tar 归档中文件的列表,请使用 :option:`-l` 选项:" + +#: ../../library/tarfile.rst:1150 +msgid "Command-line options" +msgstr "命令行选项" + +#: ../../library/tarfile.rst:1155 +msgid "List files in a tarfile." +msgstr "列出一个 tarfile 中的文件名。" + +#: ../../library/tarfile.rst:1160 +msgid "Create tarfile from source files." +msgstr "基于源文件创建 tarfile。" + +#: ../../library/tarfile.rst:1165 +msgid "" +"Extract tarfile into the current directory if *output_dir* is not specified." +msgstr "如果未指定 *output_dir* 则会将 tarfile 提取到当前目录。" + +#: ../../library/tarfile.rst:1170 +msgid "Test whether the tarfile is valid or not." +msgstr "检测 tarfile 是否有效。" + +#: ../../library/tarfile.rst:1174 +msgid "Verbose output." +msgstr "更详细地输出结果。" + +#: ../../library/tarfile.rst:1178 +msgid "" +"Specifies the *filter* for ``--extract``. See :ref:`tarfile-extraction-" +"filter` for details. Only string names are accepted (that is, " +"``fully_trusted``, ``tar``, and ``data``)." +msgstr "" +"为 ``--extract`` 指定 *filter*。 详情参见 :ref:`tarfile-extraction-filter`。 只接受字符串名称" +" (包括 ``fully_trusted``, ``tar`` 和 ``data``)。" + +#: ../../library/tarfile.rst:1188 +msgid "Examples" +msgstr "例子" + +#: ../../library/tarfile.rst:1190 +msgid "" +"How to extract an entire tar archive to the current working directory::" +msgstr "如何将整个 tar 归档提取到当前工作目录::" + +#: ../../library/tarfile.rst:1197 +msgid "" +"How to extract a subset of a tar archive with :meth:`TarFile.extractall` " +"using a generator function instead of a list::" +msgstr "如何通过 :meth:`TarFile.extractall` 使用生成器函数而非列表来提取一个 tar 归档的子集::" + +#: ../../library/tarfile.rst:1212 +msgid "How to create an uncompressed tar archive from a list of filenames::" +msgstr "如何基于一个文件名列表创建未压缩的 tar 归档::" + +#: ../../library/tarfile.rst:1220 +msgid "The same example using the :keyword:`with` statement::" +msgstr "使用 :keyword:`with` 语句的同一个示例::" + +#: ../../library/tarfile.rst:1227 +msgid "" +"How to read a gzip compressed tar archive and display some member " +"information::" +msgstr "如何读取一个 gzip 压缩的 tar 归档并显示一些成员信息::" + +#: ../../library/tarfile.rst:1241 +msgid "" +"How to create an archive and reset the user information using the *filter* " +"parameter in :meth:`TarFile.add`::" +msgstr "如何创建一个归档并使用 :meth:`TarFile.add` 中的 *filter* 形参来重置用户信息::" + +#: ../../library/tarfile.rst:1257 +msgid "Supported tar formats" +msgstr "受支持的 tar 格式" + +#: ../../library/tarfile.rst:1259 +msgid "" +"There are three tar formats that can be created with the :mod:`tarfile` " +"module:" +msgstr "通过 :mod:`tarfile` 模块可以创建三种 tar 格式:" + +#: ../../library/tarfile.rst:1261 +msgid "" +"The POSIX.1-1988 ustar format (:const:`USTAR_FORMAT`). It supports filenames" +" up to a length of at best 256 characters and linknames up to 100 " +"characters. The maximum file size is 8 GiB. This is an old and limited but " +"widely supported format." +msgstr "" +"The POSIX.1-1988 ustar 格式 (:const:`USTAR_FORMAT`)。 它支持最多 256 个字符的文件名长度和最多 " +"100 个字符的链接名长度。 文件大小上限为 8 GiB。 这是一种老旧但广受支持的格式。" + +#: ../../library/tarfile.rst:1266 +msgid "" +"The GNU tar format (:const:`GNU_FORMAT`). It supports long filenames and " +"linknames, files bigger than 8 GiB and sparse files. It is the de facto " +"standard on GNU/Linux systems. :mod:`tarfile` fully supports the GNU tar " +"extensions for long names, sparse file support is read-only." +msgstr "" +"GNU tar 格式 (:const:`GNU_FORMAT`)。 它支持长文件名和链接名、大于 8 GiB 的文件以及稀疏文件。 它是 " +"GNU/Linux 系统上的事实标准。 :mod:`tarfile` 完全支持针对长名称的 GNU tar 扩展,稀疏文件支持则限制为只读。" + +#: ../../library/tarfile.rst:1271 +msgid "" +"The POSIX.1-2001 pax format (:const:`PAX_FORMAT`). It is the most flexible " +"format with virtually no limits. It supports long filenames and linknames, " +"large files and stores pathnames in a portable way. Modern tar " +"implementations, including GNU tar, bsdtar/libarchive and star, fully " +"support extended *pax* features; some old or unmaintained libraries may not," +" but should treat *pax* archives as if they were in the universally-" +"supported *ustar* format. It is the current default format for new archives." +msgstr "" +"POSIX.1-2001 pax 格式 (:const:`PAX_FORMAT`)。 它是几乎无限制的最灵活格式。 " +"它支持长文件名和链接名,大文件以及使用便捷方式存储路径名。 现代的 tar 实现,包括 GNU tar, bsdtar/libarchive 和 " +"star,完全支持扩展 *pax* 特性;某些老旧或不维护的库可能不受支持,但应当会将 *pax* 归档视为广受支持的 *ustar* 格式。 " +"这是目前新建归档的默认格式。" + +#: ../../library/tarfile.rst:1279 +msgid "" +"It extends the existing *ustar* format with extra headers for information " +"that cannot be stored otherwise. There are two flavours of pax headers: " +"Extended headers only affect the subsequent file header, global headers are " +"valid for the complete archive and affect all following files. All the data " +"in a pax header is encoded in *UTF-8* for portability reasons." +msgstr "" +"它扩展了现有的 *ustar* 格式,包括用于无法以其他方式存储的附加标头。 存在两种形式的 pax " +"标头:扩展标头只影响后续的文件标头,全局标头则适用于完整归档并会影响所有后续的文件。 为了便于移植,在 pax 标头中的所有数据均以 *UTF-8* " +"编码。" + +#: ../../library/tarfile.rst:1285 +msgid "" +"There are some more variants of the tar format which can be read, but not " +"created:" +msgstr "还有一些 tar 格式的其他变种,它们可以被读取但不能被创建:" + +#: ../../library/tarfile.rst:1288 +msgid "" +"The ancient V7 format. This is the first tar format from Unix Seventh " +"Edition, storing only regular files and directories. Names must not be " +"longer than 100 characters, there is no user/group name information. Some " +"archives have miscalculated header checksums in case of fields with non-" +"ASCII characters." +msgstr "" +"古老的 V7 格式。 这是来自 Unix 第七版的第一个 tar 格式,它只存储常规文件和目录。 名称长度不能超过 100 " +"个字符,并且没有用户/分组名信息。 某些归档在带有非 ASCII 字符字段的情况下会产生计算错误的标头校验和。" + +#: ../../library/tarfile.rst:1293 +msgid "" +"The SunOS tar extended format. This format is a variant of the POSIX.1-2001 " +"pax format, but is not compatible." +msgstr "SunOS tar 扩展格式。 此格式是 POSIX.1-2001 pax 格式的一个变种,但并不保持兼容。" + +#: ../../library/tarfile.rst:1299 +msgid "Unicode issues" +msgstr "Unicode 问题" + +#: ../../library/tarfile.rst:1301 +msgid "" +"The tar format was originally conceived to make backups on tape drives with " +"the main focus on preserving file system information. Nowadays tar archives " +"are commonly used for file distribution and exchanging archives over " +"networks. One problem of the original format (which is the basis of all " +"other formats) is that there is no concept of supporting different character" +" encodings. For example, an ordinary tar archive created on a *UTF-8* system" +" cannot be read correctly on a *Latin-1* system if it contains non-*ASCII* " +"characters. Textual metadata (like filenames, linknames, user/group names) " +"will appear damaged. Unfortunately, there is no way to autodetect the " +"encoding of an archive. The pax format was designed to solve this problem. " +"It stores non-ASCII metadata using the universal character encoding *UTF-8*." +msgstr "" +"最初 tar 格式被设计用来在磁带机上生成备份,主要关注于保存文件系统信息。 现在 tar 归档通常用于文件分发和在网络上交换归档。 " +"最初格式(它是所有其他格式的基础)的一个问题是它没有支持不同字符编码格式的概念。 例如,一个在 *UTF-8* 系统上创建的普通 tar 归档如果包含非" +" *ASCII* 字符则将无法在 *Latin-1* 系统上被正确读取。 文本元数据(例如文件名,链接名,用户/分组名)将变为损坏状态。 " +"不幸的是,没有什么办法能够自动检测一个归档的编码格式。 pax 格式被设计用来解决这个问题。 它使用通用字符编码格式 *UTF-8* 来存储非 " +"ASCII 元数据。" + +#: ../../library/tarfile.rst:1313 +msgid "" +"The details of character conversion in :mod:`tarfile` are controlled by the " +"*encoding* and *errors* keyword arguments of the :class:`TarFile` class." +msgstr "" +"在 :mod:`tarfile` 中字符转换的细节由 :class:`TarFile` 类的 *encoding* 和 *errors* " +"关键字参数控制。" + +#: ../../library/tarfile.rst:1316 +msgid "" +"*encoding* defines the character encoding to use for the metadata in the " +"archive. The default value is :func:`sys.getfilesystemencoding` or " +"``'ascii'`` as a fallback. Depending on whether the archive is read or " +"written, the metadata must be either decoded or encoded. If *encoding* is " +"not set appropriately, this conversion may fail." +msgstr "" +"*encoding* 定义了用于归档中元数据的字符编码格式。 默认值为 :func:`sys.getfilesystemencoding` 或是回退选项" +" ``'ascii'``。 根据归档是被读取还是被写入,元数据必须被解码或编码。 如果没有正确设置 *encoding*,转换可能会失败。" + +#: ../../library/tarfile.rst:1322 +msgid "" +"The *errors* argument defines how characters are treated that cannot be " +"converted. Possible values are listed in section :ref:`error-handlers`. The " +"default scheme is ``'surrogateescape'`` which Python also uses for its file " +"system calls, see :ref:`os-filenames`." +msgstr "" +"*errors* 参数定义了不能被转换的字符将如何处理。 可能的取值在 :ref:`error-handlers` 小节列出。 默认方案为 " +"``'surrogateescape'``,它也被 Python 用于文件系统调用,参见 :ref:`os-filenames`。" + +#: ../../library/tarfile.rst:1327 +msgid "" +"For :const:`PAX_FORMAT` archives (the default), *encoding* is generally not " +"needed because all the metadata is stored using *UTF-8*. *encoding* is only " +"used in the rare cases when binary pax headers are decoded or when strings " +"with surrogate characters are stored." +msgstr "" +"对于 :const:`PAX_FORMAT` 归档(默认格式),*encoding* 通常是不必要的,因为所有元数据都使用 *UTF-8* 来存储。 " +"*encoding* 仅在解码二进制 pax 标头或存储带有替代字符的字符串等少数场景下会被使用。" diff --git a/library/telnetlib.po b/library/telnetlib.po new file mode 100644 index 000000000..e3e63ba67 --- /dev/null +++ b/library/telnetlib.po @@ -0,0 +1,328 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) 2001-2022, Python Software Foundation +# This file is distributed under the same license as the Python package. +# FIRST AUTHOR , YEAR. +# +# Translators: +# Liying Yang , 2019 +# Jiuh-star , 2021 +# Freesand Leo , 2022 +# +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: Python 3.9\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2022-11-04 14:34+0000\n" +"PO-Revision-Date: 2017-02-16 23:29+0000\n" +"Last-Translator: Freesand Leo , 2022\n" +"Language-Team: Chinese (China) (https://www.transifex.com/python-doc/teams/5390/zh_CN/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: zh_CN\n" +"Plural-Forms: nplurals=1; plural=0;\n" + +#: ../../library/telnetlib.rst:2 +msgid ":mod:`telnetlib` --- Telnet client" +msgstr ":mod:`telnetlib` -- Telnet 客户端" + +#: ../../library/telnetlib.rst:10 +msgid "**Source code:** :source:`Lib/telnetlib.py`" +msgstr "**源代码:** :source:`Lib/telnetlib.py`" + +#: ../../library/telnetlib.rst:14 +msgid "" +"The :mod:`telnetlib` module is deprecated (see :pep:`PEP 594 " +"<594#telnetlib>` for details and alternatives)." +msgstr "" +":mod:`telnetlib` 模块已被弃用(请参阅 :pep:`PEP 594 <594#telnetlib>` 了解详情及其替代品)。" + +#: ../../library/telnetlib.rst:20 +msgid "" +"The :mod:`telnetlib` module provides a :class:`Telnet` class that implements" +" the Telnet protocol. See :rfc:`854` for details about the protocol. In " +"addition, it provides symbolic constants for the protocol characters (see " +"below), and for the telnet options. The symbolic names of the telnet options" +" follow the definitions in ``arpa/telnet.h``, with the leading ``TELOPT_`` " +"removed. For symbolic names of options which are traditionally not included " +"in ``arpa/telnet.h``, see the module source itself." +msgstr "" +":mod:`telnetlib` 模块提供一个实现Telnet协议的类 :class:`Telnet`。关于此协议的细节请参见 :rfc:`854` " +"。此外,它还为协议字符(见下文)和 telnet 选项提供了对应的符号常量。telnet选项对应的符号名遵循 ``arpa/telnet.h`` " +"中的定义,但删除了前缀 ``TELOPT_``。对于不在 ``arpa/telnet.h`` 的选项的符号常量名,请参考本模块源码。" + +#: ../../library/telnetlib.rst:28 +msgid "" +"The symbolic constants for the telnet commands are: IAC, DONT, DO, WONT, " +"WILL, SE (Subnegotiation End), NOP (No Operation), DM (Data Mark), BRK " +"(Break), IP (Interrupt process), AO (Abort output), AYT (Are You There), EC " +"(Erase Character), EL (Erase Line), GA (Go Ahead), SB (Subnegotiation " +"Begin)." +msgstr "" +"telnet命令的符号常量名有: IAC, DONT, DO, WONT, WILL, SE (Subnegotiation End), NOP (No" +" Operation), DM (Data Mark), BRK (Break), IP (Interrupt process), AO (Abort " +"output), AYT (Are You There), EC (Erase Character), EL (Erase Line), GA (Go " +"Ahead), SB (Subnegotiation Begin)." + +#: ../../library/telnetlib.rst:36 +msgid "" +":class:`Telnet` represents a connection to a Telnet server. The instance is " +"initially not connected by default; the :meth:`~Telnet.open` method must be " +"used to establish a connection. Alternatively, the host name and optional " +"port number can be passed to the constructor too, in which case the " +"connection to the server will be established before the constructor returns." +" The optional *timeout* parameter specifies a timeout in seconds for " +"blocking operations like the connection attempt (if not specified, the " +"global default timeout setting will be used)." +msgstr "" +":class:`Telnet` 表示到 Telnet 服务器的连接. 实例初始化后默认不连接;必须使用 :meth:`~Telnet.open` " +"方法来建立连接。或者, 可选参数 host 和 port 也可以传递给构造函数,在这种情况下,到服务器的连接将在构造函数返回前建立。可选参数 " +"*timeout* 为阻塞操作(如连接尝试)指定一个以秒为单位的超时时间(如果没有指定,将使用全局默认设置) 。" + +#: ../../library/telnetlib.rst:45 +msgid "Do not reopen an already connected instance." +msgstr "不要重新打开一个已经连接的实例。" + +#: ../../library/telnetlib.rst:47 +msgid "" +"This class has many :meth:`read_\\*` methods. Note that some of them raise" +" :exc:`EOFError` when the end of the connection is read, because they can " +"return an empty string for other reasons. See the individual descriptions " +"below." +msgstr "" +"这个类有很多 :meth:`read_\\*` 方法。 请注意,其中一些方法在读取结束时会触发 :exc:`EOFError` " +"异常,这是由于连接对象可能出于其它原因返回一个空字符串。 请参阅下面的个别描述。" + +#: ../../library/telnetlib.rst:51 +msgid "" +"A :class:`Telnet` object is a context manager and can be used in a " +":keyword:`with` statement. When the :keyword:`!with` block ends, the " +":meth:`close` method is called::" +msgstr "" +":class:`Telnet` 对象一个上下文管理器,可以在 :keyword:`with` 语句中使用。当 :keyword:`!with` " +"块结束,:meth:`close` 方法会被调用::" + +#: ../../library/telnetlib.rst:60 +msgid "Context manager support added" +msgstr "添加了上下文管理器的支持" + +#: ../../library/telnetlib.rst:65 +msgid ":rfc:`854` - Telnet Protocol Specification" +msgstr ":rfc:`854` - Telnet 协议规范" + +#: ../../library/telnetlib.rst:66 +msgid "Definition of the Telnet protocol." +msgstr "Telnet 协议的定义。" + +#: ../../library/telnetlib.rst:72 +msgid "Telnet Objects" +msgstr "Telnet 对象" + +#: ../../library/telnetlib.rst:74 +msgid ":class:`Telnet` instances have the following methods:" +msgstr ":class:`Telnet` 实例有以下几种方法:" + +#: ../../library/telnetlib.rst:79 +msgid "" +"Read until a given byte string, *expected*, is encountered or until " +"*timeout* seconds have passed." +msgstr "读取直到遇到给定字节串 *expected* 或 *timeout* 秒已经过去。" + +#: ../../library/telnetlib.rst:82 +msgid "" +"When no match is found, return whatever is available instead, possibly empty" +" bytes. Raise :exc:`EOFError` if the connection is closed and no cooked " +"data is available." +msgstr "当没有找到匹配时,返回可用的内容,也可能返回空字节。如果连接已关闭且没有可用的熟数据,将触发 :exc:`EOFError`。" + +#: ../../library/telnetlib.rst:89 +msgid "Read all data until EOF as bytes; block until connection closed." +msgstr "读取数据,直到遇到 EOF;连接关闭前都会保持阻塞。" + +#: ../../library/telnetlib.rst:94 +msgid "" +"Read at least one byte of cooked data unless EOF is hit. Return ``b''`` if " +"EOF is hit. Block if no data is immediately available." +msgstr "在达到 EOF 前,读取至少一个字节的熟数据。如果命中 EOF,返回 ``b''``。如果没有立即可用的数据,则阻塞。" + +#: ../../library/telnetlib.rst:100 +msgid "Read everything that can be without blocking in I/O (eager)." +msgstr "在不阻塞 I/O 的情况下读取所有的内容(eager)。" + +#: ../../library/telnetlib.rst:102 ../../library/telnetlib.rst:111 +msgid "" +"Raise :exc:`EOFError` if connection closed and no cooked data available. " +"Return ``b''`` if no cooked data available otherwise. Do not block unless in" +" the midst of an IAC sequence." +msgstr "" +"如果连接已关闭并且没有可用的熟数据,将会触发 :exc:`EOFError` 。如果没有熟数据可用返回 ``b''`` 。除非在一个 IAC " +"序列的中间,否则不要进行阻塞。" + +#: ../../library/telnetlib.rst:109 +msgid "Read readily available data." +msgstr "读取现成的数据。" + +#: ../../library/telnetlib.rst:118 +msgid "Process and return data already in the queues (lazy)." +msgstr "处理并返回已经在队列中的数据(lazy)。" + +#: ../../library/telnetlib.rst:120 +msgid "" +"Raise :exc:`EOFError` if connection closed and no data available. Return " +"``b''`` if no cooked data available otherwise. Do not block unless in the " +"midst of an IAC sequence." +msgstr "" +"如果连接已关闭并且没有可用的数据,将会触发 :exc:`EOFError` 。如果没有熟数据可用则返回 ``b''`` 。除非在一个 IAC " +"序列的中间,否则不要进行阻塞。" + +#: ../../library/telnetlib.rst:127 +msgid "Return any data available in the cooked queue (very lazy)." +msgstr "返回熟数据队列任何可用的数据(very lazy)。" + +#: ../../library/telnetlib.rst:129 +msgid "" +"Raise :exc:`EOFError` if connection closed and no data available. Return " +"``b''`` if no cooked data available otherwise. This method never blocks." +msgstr "" +"如果连接已关闭并且没有可用的数据,将会触发 :exc:`EOFError` 。如果没有熟数据可用则返回 ``b''`` 。该方法永远不会阻塞。" + +#: ../../library/telnetlib.rst:135 +msgid "" +"Return the data collected between a SB/SE pair (suboption begin/end). The " +"callback should access these data when it was invoked with a ``SE`` command." +" This method never blocks." +msgstr "" +"返回在 SB/SE 对之间收集的数据(子选项 begin/end)。当使用 ``SE`` " +"命令调用回调函数时,该回调函数应该访问这些数据。该方法永远不会阻塞。" + +#: ../../library/telnetlib.rst:142 +msgid "" +"Connect to a host. The optional second argument is the port number, which " +"defaults to the standard Telnet port (23). The optional *timeout* parameter " +"specifies a timeout in seconds for blocking operations like the connection " +"attempt (if not specified, the global default timeout setting will be used)." +msgstr "" +"连接主机。第二个可选参数是端口号,默认为标准 Telnet 端口(23)。可选参数 *timeout* " +"指定一个以秒为单位的超时时间用于像连接尝试这样的阻塞操作(如果没有指定,将使用全局默认超时设置)。" + +#: ../../library/telnetlib.rst:147 +msgid "Do not try to reopen an already connected instance." +msgstr "不要尝试重新打开一个已经连接的实例。" + +#: ../../library/telnetlib.rst:149 +msgid "" +"Raises an :ref:`auditing event ` ``telnetlib.Telnet.open`` with " +"arguments ``self``, ``host``, ``port``." +msgstr "" +"触发 :ref:`auditing event ` ``telnetlib.Telnet.open`` ,参数为 " +"``self``,``host``,``port``。" + +#: ../../library/telnetlib.rst:154 +msgid "" +"Print a debug message when the debug level is ``>`` 0. If extra arguments " +"are present, they are substituted in the message using the standard string " +"formatting operator." +msgstr "当调试级别 ``>`` 0 时打印一条调试信息。如果存在额外参数,则它们会被替换在使用标准字符串格式化操作符的信息中。" + +#: ../../library/telnetlib.rst:161 +msgid "" +"Set the debug level. The higher the value of *debuglevel*, the more debug " +"output you get (on ``sys.stdout``)." +msgstr "设置调试级别。*debuglevel* 的值越高,得到的调试输出越多(在 ``sys.stdout`` )。" + +#: ../../library/telnetlib.rst:167 +msgid "Close the connection." +msgstr "关闭连接对象。" + +#: ../../library/telnetlib.rst:172 +msgid "Return the socket object used internally." +msgstr "返回内部使用的套接字对象。" + +#: ../../library/telnetlib.rst:177 +msgid "Return the file descriptor of the socket object used internally." +msgstr "返回内部使用的套接字对象的文件描述符。" + +#: ../../library/telnetlib.rst:182 +msgid "" +"Write a byte string to the socket, doubling any IAC characters. This can " +"block if the connection is blocked. May raise :exc:`OSError` if the " +"connection is closed." +msgstr "向套接字写入一个字节字符串,将所有 IAC 字符加倍。如果连接被阻塞,这可能也会阻塞。如果连接关闭可能触发 :exc:`OSError`。" + +#: ../../library/telnetlib.rst:186 +msgid "" +"Raises an :ref:`auditing event ` ``telnetlib.Telnet.write`` with " +"arguments ``self``, ``buffer``." +msgstr "" +"触发 :ref:`auditing event ` ``telnetlib.Telnet.write`` ,参数为 " +"``self``,``buffer``。" + +#: ../../library/telnetlib.rst:188 +msgid "" +"This method used to raise :exc:`socket.error`, which is now an alias of " +":exc:`OSError`." +msgstr "曾经该函数抛出 :exc:`socket.error`,现在这是 :exc:`OSError` 的别名。" + +#: ../../library/telnetlib.rst:195 +msgid "Interaction function, emulates a very dumb Telnet client." +msgstr "交互函数,模拟一个非常笨拙的 Telnet 客户端。" + +#: ../../library/telnetlib.rst:200 +msgid "Multithreaded version of :meth:`interact`." +msgstr "多线程版的 :meth:`interact`." + +#: ../../library/telnetlib.rst:205 +msgid "Read until one from a list of a regular expressions matches." +msgstr "一直读取,直到匹配列表中的某个正则表达式。" + +#: ../../library/telnetlib.rst:207 +msgid "" +"The first argument is a list of regular expressions, either compiled " +"(:ref:`regex objects `) or uncompiled (byte strings). The " +"optional second argument is a timeout, in seconds; the default is to block " +"indefinitely." +msgstr "" +"第一个参数是一个正则表达式列表,可以是已编译的 (:ref:`正则表达式对象 `),也可以是未编译的 (字节串)。 " +"第二个可选参数是超时,单位是秒;默认一直阻塞。" + +#: ../../library/telnetlib.rst:212 +msgid "" +"Return a tuple of three items: the index in the list of the first regular " +"expression that matches; the match object returned; and the bytes read up " +"till and including the match." +msgstr "返回一个包含三个元素的元组:列表中的第一个匹配的正则表达式的索引;返回的匹配对象;包括匹配在内的读取过的字节。" + +#: ../../library/telnetlib.rst:216 +msgid "" +"If end of file is found and no bytes were read, raise :exc:`EOFError`. " +"Otherwise, when nothing matches, return ``(-1, None, data)`` where *data* is" +" the bytes received so far (may be empty bytes if a timeout happened)." +msgstr "" +"如果找到了文件的结尾且没有字节被读取,触发 :exc:`EOFError`。否则,当没有匹配时,返回 ``(-1, None, data)``,其中 " +"*data* 是到目前为止接受到的字节(如果发生超时,则可能是空字节)。" + +#: ../../library/telnetlib.rst:220 +msgid "" +"If a regular expression ends with a greedy match (such as ``.*``) or if more" +" than one expression can match the same input, the results are non-" +"deterministic, and may depend on the I/O timing." +msgstr "如果一个正则表达式以贪婪匹配结束(例如 ``.*``),或者多个表达式可以匹配同一个输出,则结果是不确定的,可能取决于 I/O 计时。" + +#: ../../library/telnetlib.rst:227 +msgid "" +"Each time a telnet option is read on the input flow, this *callback* (if " +"set) is called with the following parameters: callback(telnet socket, " +"command (DO/DONT/WILL/WONT), option). No other action is done afterwards by" +" telnetlib." +msgstr "" +"每次在输入流上读取 telnet 选项时,这个带有如下参数的 *callback* (如果设置了)会被调用: callback(telnet " +"socket, command (DO/DONT/WILL/WONT), option)。telnetlib 之后不会再执行其它操作。" + +#: ../../library/telnetlib.rst:235 +msgid "Telnet Example" +msgstr "Telnet 示例" + +#: ../../library/telnetlib.rst:240 +msgid "A simple example illustrating typical use::" +msgstr "一个简单的说明性典型用法例子::" diff --git a/library/tempfile.po b/library/tempfile.po new file mode 100644 index 000000000..ac33e266d --- /dev/null +++ b/library/tempfile.po @@ -0,0 +1,483 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) 2001-2024, Python Software Foundation +# This file is distributed under the same license as the Python package. +# FIRST AUTHOR , YEAR. +# +# Translators: +# Arisaka97 , 2019 +# Freesand Leo , 2022 +# Rafael Fontenelle , 2024 +# +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: Python 3.9\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2024-08-30 16:51+0000\n" +"PO-Revision-Date: 2017-02-16 23:30+0000\n" +"Last-Translator: Rafael Fontenelle , 2024\n" +"Language-Team: Chinese (China) (https://app.transifex.com/python-doc/teams/5390/zh_CN/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: zh_CN\n" +"Plural-Forms: nplurals=1; plural=0;\n" + +#: ../../library/tempfile.rst:2 +msgid ":mod:`tempfile` --- Generate temporary files and directories" +msgstr ":mod:`tempfile` --- 生成临时文件和目录" + +#: ../../library/tempfile.rst:9 +msgid "**Source code:** :source:`Lib/tempfile.py`" +msgstr "**源代码:** :source:`Lib/tempfile.py`" + +#: ../../library/tempfile.rst:17 +msgid "" +"This module creates temporary files and directories. It works on all " +"supported platforms. :class:`TemporaryFile`, :class:`NamedTemporaryFile`, " +":class:`TemporaryDirectory`, and :class:`SpooledTemporaryFile` are high-" +"level interfaces which provide automatic cleanup and can be used as context " +"managers. :func:`mkstemp` and :func:`mkdtemp` are lower-level functions " +"which require manual cleanup." +msgstr "" +"该模块用于创建临时文件和目录,它可以跨平台使用。:class:`TemporaryFile`、:class:`NamedTemporaryFile`、:class:`TemporaryDirectory`" +" 和 :class:`SpooledTemporaryFile` 是带有自动清理功能的高级接口,可用作上下文管理器。:func:`mkstemp` 和 " +":func:`mkdtemp` 是低级函数,使用完毕需手动清理。" + +#: ../../library/tempfile.rst:24 +msgid "" +"All the user-callable functions and constructors take additional arguments " +"which allow direct control over the location and name of temporary files and" +" directories. Files names used by this module include a string of random " +"characters which allows those files to be securely created in shared " +"temporary directories. To maintain backward compatibility, the argument " +"order is somewhat odd; it is recommended to use keyword arguments for " +"clarity." +msgstr "" +"所有由用户调用的函数和构造函数都带有参数,这些参数可以设置临时文件和临时目录的路径和名称。该模块生成的文件名包括一串随机字符,在公共的临时目录中,这些字符可以让创建文件更加安全。为了保持向后兼容性,参数的顺序有些奇怪。所以为了代码清晰,建议使用关键字参数。" + +#: ../../library/tempfile.rst:32 +msgid "The module defines the following user-callable items:" +msgstr "这个模块定义了以下内容供用户调用:" + +#: ../../library/tempfile.rst:36 +msgid "" +"Return a :term:`file-like object` that can be used as a temporary storage " +"area. The file is created securely, using the same rules as :func:`mkstemp`." +" It will be destroyed as soon as it is closed (including an implicit close " +"when the object is garbage collected). Under Unix, the directory entry for " +"the file is either not created at all or is removed immediately after the " +"file is created. Other platforms do not support this; your code should not " +"rely on a temporary file created using this function having or not having a " +"visible name in the file system." +msgstr "" +"返回一个 :term:`file-like object` 作为临时存储区域。创建该文件使用了与 :func:`mkstemp` " +"相同的安全规则。它将在关闭后立即销毁(包括垃圾回收机制关闭该对象时)。在 Unix " +"下,该文件在目录中的条目根本不创建,或者创建文件后立即就被删除了,其他平台不支持此功能。您的代码不应依赖使用此功能创建的临时文件名称,因为它在文件系统中的名称可能是可见的,也可能是不可见的。" + +#: ../../library/tempfile.rst:44 +msgid "" +"The resulting object can be used as a context manager (see :ref:`tempfile-" +"examples`). On completion of the context or destruction of the file object " +"the temporary file will be removed from the filesystem." +msgstr "" +"生成的对象可以用作上下文管理器(参见 :ref:`tempfile-examples`)。完成上下文或销毁临时文件对象后,临时文件将从文件系统中删除。" + +#: ../../library/tempfile.rst:49 +msgid "" +"The *mode* parameter defaults to ``'w+b'`` so that the file created can be " +"read and written without being closed. Binary mode is used so that it " +"behaves consistently on all platforms without regard for the data that is " +"stored. *buffering*, *encoding*, *errors* and *newline* are interpreted as " +"for :func:`open`." +msgstr "" +"*mode* 参数默认值为 " +"``'w+b'``,所以创建的文件不用关闭,就可以读取或写入。因为用的是二进制模式,所以无论存的是什么数据,它在所有平台上都表现一致。*buffering*、*encoding*、*errors*" +" 和 *newline* 的含义与 :func:`open` 中的相同。" + +#: ../../library/tempfile.rst:55 +msgid "" +"The *dir*, *prefix* and *suffix* parameters have the same meaning and " +"defaults as with :func:`mkstemp`." +msgstr "参数 *dir*、*prefix* 和 *suffix* 的含义和默认值都与它们在 :func:`mkstemp` 中的相同。" + +#: ../../library/tempfile.rst:58 +msgid "" +"The returned object is a true file object on POSIX platforms. On other " +"platforms, it is a file-like object whose :attr:`!file` attribute is the " +"underlying true file object." +msgstr "" +"在 POSIX 平台上,它返回的对象是真实的文件对象。在其他平台上,它是一个文件型对象,它的 :attr:`!file` 属性是底层的真实文件对象。" + +#: ../../library/tempfile.rst:62 +msgid "" +"The :py:data:`os.O_TMPFILE` flag is used if it is available and works " +"(Linux-specific, requires Linux kernel 3.11 or later)." +msgstr "如果可用,则使用 :py:data:`os.O_TMPFILE` 标志(仅限于 Linux,需要 3.11 及更高版本的内核)。" + +#: ../../library/tempfile.rst:65 +msgid "" +"On platforms that are neither Posix nor Cygwin, TemporaryFile is an alias " +"for NamedTemporaryFile." +msgstr "在 Posix 或 Cygwin 以外的平台上,TemporaryFile 是 NamedTemporaryFile 的别名。" + +#: ../../library/tempfile.rst:68 ../../library/tempfile.rst:93 +#: ../../library/tempfile.rst:188 +msgid "" +"Raises an :ref:`auditing event ` ``tempfile.mkstemp`` with " +"argument ``fullpath``." +msgstr "引发一个 :ref:`审计事件 ` ``tempfile.mkstemp`` 并附带参数 ``fullpath``。" + +#: ../../library/tempfile.rst:72 +msgid "The :py:data:`os.O_TMPFILE` flag is now used if available." +msgstr "如果可用,现在用的是 :py:data:`os.O_TMPFILE` 标志。" + +#: ../../library/tempfile.rst:74 ../../library/tempfile.rst:95 +#: ../../library/tempfile.rst:120 +msgid "Added *errors* parameter." +msgstr "添加了 *errors* 参数。" + +#: ../../library/tempfile.rst:80 +msgid "" +"This function operates exactly as :func:`TemporaryFile` does, except that " +"the file is guaranteed to have a visible name in the file system (on Unix, " +"the directory entry is not unlinked). That name can be retrieved from the " +":attr:`name` attribute of the returned file-like object. Whether the name " +"can be used to open the file a second time, while the named temporary file " +"is still open, varies across platforms (it can be so used on Unix; it cannot" +" on Windows). If *delete* is true (the default), the file is deleted as " +"soon as it is closed. The returned object is always a file-like object whose" +" :attr:`!file` attribute is the underlying true file object. This file-like " +"object can be used in a :keyword:`with` statement, just like a normal file." +msgstr "" +"此函数执行的操作与 :func:`TemporaryFile` 完全相同,但是会确保该文件在文件系统中具有可见的名称(在 Unix " +"上表现为目录项不取消链接)。 该名称可从返回的文件类对象的 :attr:`name` 属性获取。 " +"在指定的临时文件仍然被打开时该名称是否可被用来再次打开文件对于不同平台则有所不同(在 Unix 上可以这样做;在 Windows 上不可以) 如果 " +"*delete* 为(默认的)真值,则文件会在关闭之后立即被删除。 此函数返回的对象始终会是文件类对象,它的 :attr:`!file` " +"属性是底层的真实文件对象。 这个文件类对象可以在 :keyword:`with` 语句中使用,就像普通的文件一样。" + +#: ../../library/tempfile.rst:101 +msgid "" +"This function operates exactly as :func:`TemporaryFile` does, except that " +"data is spooled in memory until the file size exceeds *max_size*, or until " +"the file's :func:`fileno` method is called, at which point the contents are " +"written to disk and operation proceeds as with :func:`TemporaryFile`." +msgstr "" +"此函数执行的操作与 :func:`TemporaryFile` 完全相同,但会将数据缓存在内存中,直到文件大小超过 *max_size*,或调用文件的 " +":func:`fileno` 方法为止,此时数据会被写入磁盘,并且写入操作与 :func:`TemporaryFile` 相同。" + +#: ../../library/tempfile.rst:107 +msgid "" +"The resulting file has one additional method, :func:`rollover`, which causes" +" the file to roll over to an on-disk file regardless of its size." +msgstr "此函数生成的文件对象有一个额外的方法——:func:`rollover`,可以忽略文件大小,让文件立即写入磁盘。" + +#: ../../library/tempfile.rst:110 +msgid "" +"The returned object is a file-like object whose :attr:`_file` attribute is " +"either an :class:`io.BytesIO` or :class:`io.TextIOWrapper` object (depending" +" on whether binary or text *mode* was specified) or a true file object, " +"depending on whether :func:`rollover` has been called. This file-like " +"object can be used in a :keyword:`with` statement, just like a normal file." +msgstr "" +"返回的对象是文件类对象 (file-like object),它的 :attr:`_file` 属性是 :class:`io.BytesIO` 或 " +":class:`io.TextIOWrapper` 对象(取决于指定的是二进制模式还是文本模式)或真实的文件对象(取决于是否已调用 " +":func:`rollover`)。文件类对象可以像普通文件一样在 :keyword:`with` 语句中使用。" + +#: ../../library/tempfile.rst:117 +msgid "the truncate method now accepts a ``size`` argument." +msgstr "现在,文件的 truncate 方法可接受一个 ``size`` 参数。" + +#: ../../library/tempfile.rst:126 +msgid "" +"This function securely creates a temporary directory using the same rules as" +" :func:`mkdtemp`. The resulting object can be used as a context manager (see" +" :ref:`tempfile-examples`). On completion of the context or destruction of " +"the temporary directory object the newly created temporary directory and all" +" its contents are removed from the filesystem." +msgstr "" +"此函数会安全地创建一个临时目录,且使用与 :func:`mkdtemp` 相同的规则。此函数返回的对象可用作上下文管理器(参见 " +":ref:`tempfile-examples`)。完成上下文或销毁临时目录对象后,新创建的临时目录及其所有内容将从文件系统中删除。" + +#: ../../library/tempfile.rst:132 +msgid "" +"The directory name can be retrieved from the :attr:`name` attribute of the " +"returned object. When the returned object is used as a context manager, the" +" :attr:`name` will be assigned to the target of the :keyword:`!as` clause in" +" the :keyword:`with` statement, if there is one." +msgstr "" +"可以从返回对象的 :attr:`name` 属性中找到临时目录的名称。当返回的对象用作上下文管理器时,这个 :attr:`name` 会作为 " +":keyword:`with` 语句中 :keyword:`!as` 子句的目标(如果有 as 的话)。" + +#: ../../library/tempfile.rst:137 +msgid "" +"The directory can be explicitly cleaned up by calling the :func:`cleanup` " +"method." +msgstr "可以调用 :func:`cleanup` 方法来手动清理目录。" + +#: ../../library/tempfile.rst:140 ../../library/tempfile.rst:214 +msgid "" +"Raises an :ref:`auditing event ` ``tempfile.mkdtemp`` with " +"argument ``fullpath``." +msgstr "引发一个 :ref:`审计事件 ` ``tempfile.mkdtemp`` 并附带参数 ``fullpath``。" + +#: ../../library/tempfile.rst:147 +msgid "" +"Creates a temporary file in the most secure manner possible. There are no " +"race conditions in the file's creation, assuming that the platform properly " +"implements the :const:`os.O_EXCL` flag for :func:`os.open`. The file is " +"readable and writable only by the creating user ID. If the platform uses " +"permission bits to indicate whether a file is executable, the file is " +"executable by no one. The file descriptor is not inherited by child " +"processes." +msgstr "" +"以最安全的方式创建一个临时文件。假设所在平台正确实现了 :func:`os.open` 的 :const:`os.O_EXCL` " +"标志,则创建文件时不会有竞争的情况。该文件只能由创建者读写,如果所在平台用权限位来标记文件是否可执行,那么没有人有执行权。文件描述符不会过继给子进程。" + +#: ../../library/tempfile.rst:155 +msgid "" +"Unlike :func:`TemporaryFile`, the user of :func:`mkstemp` is responsible for" +" deleting the temporary file when done with it." +msgstr "与 :func:`TemporaryFile` 不同,:func:`mkstemp` 用户用完临时文件后需要自行将其删除。" + +#: ../../library/tempfile.rst:158 +msgid "" +"If *suffix* is not ``None``, the file name will end with that suffix, " +"otherwise there will be no suffix. :func:`mkstemp` does not put a dot " +"between the file name and the suffix; if you need one, put it at the " +"beginning of *suffix*." +msgstr "" +"如果 *suffix* 不是 ``None`` 则文件名将以该后缀结尾,是 ``None`` 则没有后缀。:func:`mkstemp` " +"不会在文件名和后缀之间加点,如果需要加一个点号,请将其放在 *suffix* 的开头。" + +#: ../../library/tempfile.rst:163 +msgid "" +"If *prefix* is not ``None``, the file name will begin with that prefix; " +"otherwise, a default prefix is used. The default is the return value of " +":func:`gettempprefix` or :func:`gettempprefixb`, as appropriate." +msgstr "" +"如果 *prefix* 不是 ``None``,则文件名将以该前缀开头,是 ``None`` 则使用默认前缀。默认前缀是 " +":func:`gettempprefix` 或 :func:`gettempprefixb` 函数的返回值(自动调用合适的函数)。" + +#: ../../library/tempfile.rst:167 +msgid "" +"If *dir* is not ``None``, the file will be created in that directory; " +"otherwise, a default directory is used. The default directory is chosen " +"from a platform-dependent list, but the user of the application can control " +"the directory location by setting the *TMPDIR*, *TEMP* or *TMP* environment " +"variables. There is thus no guarantee that the generated filename will have" +" any nice properties, such as not requiring quoting when passed to external " +"commands via ``os.popen()``." +msgstr "" +"如果 *dir* 不为 ``None``,则在指定的目录创建文件,是 ``None`` " +"则使用默认目录。默认目录是从一个列表中选择出来的,这个列表不同平台不一样,但是用户可以设置 *TMPDIR*、*TEMP* 或 *TMP* " +"环境变量来设置目录的位置。因此,不能保证生成的临时文件路径很规范,比如,通过 ``os.popen()`` 将路径传递给外部命令时仍需要加引号。" + +#: ../../library/tempfile.rst:175 +msgid "" +"If any of *suffix*, *prefix*, and *dir* are not ``None``, they must be the " +"same type. If they are bytes, the returned name will be bytes instead of " +"str. If you want to force a bytes return value with otherwise default " +"behavior, pass ``suffix=b''``." +msgstr "" +"如果 *suffix*、*prefix* 和 *dir* 中的任何一个不是 ``None``,就要保证它们是同一数据类型。如果它们是 " +"bytes,则返回的名称的类型就是 bytes 而不是 str。如果确实要用默认参数,但又想要返回值是 bytes 类型,请传入 " +"``suffix=b''``。" + +#: ../../library/tempfile.rst:181 +msgid "" +"If *text* is specified and true, the file is opened in text mode. Otherwise," +" (the default) the file is opened in binary mode." +msgstr "如果指定了 *text* 且为真值,文件会以文本模式打开。 否则,文件(默认)会以二进制模式打开。" + +#: ../../library/tempfile.rst:184 +msgid "" +":func:`mkstemp` returns a tuple containing an OS-level handle to an open " +"file (as would be returned by :func:`os.open`) and the absolute pathname of " +"that file, in that order." +msgstr "" +":func:`mkstemp` 返回一个元组,元组中第一个元素是句柄,它是一个系统级句柄,指向一个打开的文件(等同于 :func:`os.open` " +"的返回值),第二元素是该文件的绝对路径。" + +#: ../../library/tempfile.rst:190 ../../library/tempfile.rst:216 +msgid "" +"*suffix*, *prefix*, and *dir* may now be supplied in bytes in order to " +"obtain a bytes return value. Prior to this, only str was allowed. *suffix* " +"and *prefix* now accept and default to ``None`` to cause an appropriate " +"default value to be used." +msgstr "" +"现在,*suffix*、*prefix* 和 *dir* 可以以 bytes 类型按顺序提供,以获得 bytes 类型的返回值。之前只允许使用 " +"str。*suffix* 和 *prefix* 现在可以接受 ``None``,并且默认为 ``None`` 以使用合适的默认值。" + +#: ../../library/tempfile.rst:196 ../../library/tempfile.rst:222 +msgid "The *dir* parameter now accepts a :term:`path-like object`." +msgstr "*dir* 参数现在可接受一个路径类对象 (:term:`path-like object`)。" + +#: ../../library/tempfile.rst:202 +msgid "" +"Creates a temporary directory in the most secure manner possible. There are " +"no race conditions in the directory's creation. The directory is readable, " +"writable, and searchable only by the creating user ID." +msgstr "以最安全的方式创建一个临时目录,创建该目录时不会有竞争的情况。该目录只能由创建者读取、写入和搜索。" + +#: ../../library/tempfile.rst:206 +msgid "" +"The user of :func:`mkdtemp` is responsible for deleting the temporary " +"directory and its contents when done with it." +msgstr ":func:`mkdtemp` 用户用完临时目录后需要自行将其删除。" + +#: ../../library/tempfile.rst:209 +msgid "" +"The *prefix*, *suffix*, and *dir* arguments are the same as for " +":func:`mkstemp`." +msgstr "*prefix*、*suffix* 和 *dir* 的含义与它们在 :func:`mkstemp` 中的相同。" + +#: ../../library/tempfile.rst:212 +msgid ":func:`mkdtemp` returns the absolute pathname of the new directory." +msgstr ":func:`mkdtemp` 返回新目录的绝对路径。" + +#: ../../library/tempfile.rst:228 +msgid "" +"Return the name of the directory used for temporary files. This defines the " +"default value for the *dir* argument to all functions in this module." +msgstr "返回放置临时文件的目录的名称。这个方法的返回值就是本模块所有函数的 *dir* 参数的默认值。" + +#: ../../library/tempfile.rst:232 +msgid "" +"Python searches a standard list of directories to find one which the calling" +" user can create files in. The list is:" +msgstr "Python 搜索标准目录列表,以找到调用者可以在其中创建文件的目录。这个列表是:" + +#: ../../library/tempfile.rst:235 +msgid "The directory named by the :envvar:`TMPDIR` environment variable." +msgstr ":envvar:`TMPDIR` 环境变量指向的目录。" + +#: ../../library/tempfile.rst:237 +msgid "The directory named by the :envvar:`TEMP` environment variable." +msgstr ":envvar:`TEMP` 环境变量指向的目录。" + +#: ../../library/tempfile.rst:239 +msgid "The directory named by the :envvar:`TMP` environment variable." +msgstr ":envvar:`TMP` 环境变量指向的目录。" + +#: ../../library/tempfile.rst:241 +msgid "A platform-specific location:" +msgstr "与平台相关的位置:" + +#: ../../library/tempfile.rst:243 +msgid "" +"On Windows, the directories :file:`C:\\\\TEMP`, :file:`C:\\\\TMP`, " +":file:`\\\\TEMP`, and :file:`\\\\TMP`, in that order." +msgstr "" +"在 Windows 上,依次为 :file:`C:\\\\TEMP`、:file:`C:\\\\TMP`、:file:`\\\\TEMP` 和 " +":file:`\\\\TMP`。" + +#: ../../library/tempfile.rst:246 +msgid "" +"On all other platforms, the directories :file:`/tmp`, :file:`/var/tmp`, and " +":file:`/usr/tmp`, in that order." +msgstr "在所有其他平台上,依次为 :file:`/tmp`、:file:`/var/tmp` 和 :file:`/usr/tmp`。" + +#: ../../library/tempfile.rst:249 +msgid "As a last resort, the current working directory." +msgstr "不得已时,使用当前工作目录。" + +#: ../../library/tempfile.rst:251 +msgid "" +"The result of this search is cached, see the description of :data:`tempdir` " +"below." +msgstr "搜索的结果会缓存起来,参见下面 :data:`tempdir` 的描述。" + +#: ../../library/tempfile.rst:256 +msgid "Same as :func:`gettempdir` but the return value is in bytes." +msgstr "与 :func:`gettempdir` 相同,但返回值为字节类型。" + +#: ../../library/tempfile.rst:262 +msgid "" +"Return the filename prefix used to create temporary files. This does not " +"contain the directory component." +msgstr "返回用于创建临时文件的文件名前缀,它不包含目录部分。" + +#: ../../library/tempfile.rst:267 +msgid "Same as :func:`gettempprefix` but the return value is in bytes." +msgstr "与 :func:`gettempprefix` 相同,但返回值为字节类型。" + +#: ../../library/tempfile.rst:271 +msgid "" +"The module uses a global variable to store the name of the directory used " +"for temporary files returned by :func:`gettempdir`. It can be set directly " +"to override the selection process, but this is discouraged. All functions in" +" this module take a *dir* argument which can be used to specify the " +"directory and this is the recommended approach." +msgstr "" +"本模块使用一个全局变量来存储由 :func:`gettempdir` " +"返回的临时文件目录路径。可以直接给它赋值,这样可以覆盖自动选择的路径,但是不建议这样做。本模块中的所有函数都带有一个 *dir* " +"参数,该参数可用于指定目录,这是推荐的方法。" + +#: ../../library/tempfile.rst:279 +msgid "" +"When set to a value other than ``None``, this variable defines the default " +"value for the *dir* argument to the functions defined in this module." +msgstr "当设置为 ``None`` 以外的其他值时,此变量将决定本模块所有函数的 *dir* 参数的默认值。" + +#: ../../library/tempfile.rst:283 +msgid "" +"If ``tempdir`` is ``None`` (the default) at any call to any of the above " +"functions except :func:`gettempprefix` it is initialized following the " +"algorithm described in :func:`gettempdir`." +msgstr "" +"如果在调用除 :func:`gettempprefix` 外的上述任何函数时 ``tempdir`` 为 ``None`` (默认值) 则它会按照 " +":func:`gettempdir` 中所描述的算法来初始化。" + +#: ../../library/tempfile.rst:290 +msgid "Examples" +msgstr "例子" + +#: ../../library/tempfile.rst:292 +msgid "" +"Here are some examples of typical usage of the :mod:`tempfile` module::" +msgstr "以下是 :mod:`tempfile` 模块典型用法的一些示例::" + +#: ../../library/tempfile.rst:324 +msgid "Deprecated functions and variables" +msgstr "已弃用的函数和变量" + +#: ../../library/tempfile.rst:326 +msgid "" +"A historical way to create temporary files was to first generate a file name" +" with the :func:`mktemp` function and then create a file using this name. " +"Unfortunately this is not secure, because a different process may create a " +"file with this name in the time between the call to :func:`mktemp` and the " +"subsequent attempt to create the file by the first process. The solution is " +"to combine the two steps and create the file immediately. This approach is " +"used by :func:`mkstemp` and the other functions described above." +msgstr "" +"创建临时文件有一种历史方法,首先使用 :func:`mktemp` 函数生成一个文件名,然后使用该文件名创建文件。不幸的是,这是不安全的,因为在调用 " +":func:`mktemp` " +"与随后尝试创建文件的进程之间的时间里,其他进程可能会使用该名称创建文件。解决方案是将两个步骤结合起来,立即创建文件。这个方案目前被 " +":func:`mkstemp` 和上述其他函数所采用。" + +#: ../../library/tempfile.rst:337 +msgid "Use :func:`mkstemp` instead." +msgstr "使用 :func:`mkstemp` 来代替。" + +#: ../../library/tempfile.rst:340 +msgid "" +"Return an absolute pathname of a file that did not exist at the time the " +"call is made. The *prefix*, *suffix*, and *dir* arguments are similar to " +"those of :func:`mkstemp`, except that bytes file names, ``suffix=None`` and " +"``prefix=None`` are not supported." +msgstr "" +"返回一个绝对路径,这个路径指向的文件在调用本方法时不存在。*prefix*、*suffix* 和 *dir* 参数与 :func:`mkstemp` " +"中的同名参数类似,不同之处在于不支持字节类型的文件名,不支持 ``suffix=None`` 和 ``prefix=None``。" + +#: ../../library/tempfile.rst:347 +msgid "" +"Use of this function may introduce a security hole in your program. By the " +"time you get around to doing anything with the file name it returns, someone" +" else may have beaten you to the punch. :func:`mktemp` usage can be " +"replaced easily with :func:`NamedTemporaryFile`, passing it the " +"``delete=False`` parameter::" +msgstr "" +"使用此功能可能会在程序中引入安全漏洞。当你开始使用本方法返回的文件执行任何操作时,可能有人已经捷足先登了。:func:`mktemp` " +"的功能可以很轻松地用 :func:`NamedTemporaryFile` 代替,当然需要传递 ``delete=False`` 参数::" diff --git a/library/termios.po b/library/termios.po new file mode 100644 index 000000000..bdb9f89c8 --- /dev/null +++ b/library/termios.po @@ -0,0 +1,144 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) 2001-2022, Python Software Foundation +# This file is distributed under the same license as the Python package. +# FIRST AUTHOR , YEAR. +# +# Translators: +# Menghua Xiao , 2018 +# nick <2330458484@qq.com>, 2019 +# Freesand Leo , 2020 +# +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: Python 3.9\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2022-11-04 14:34+0000\n" +"PO-Revision-Date: 2017-02-16 23:30+0000\n" +"Last-Translator: Freesand Leo , 2020\n" +"Language-Team: Chinese (China) (https://www.transifex.com/python-doc/teams/5390/zh_CN/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: zh_CN\n" +"Plural-Forms: nplurals=1; plural=0;\n" + +#: ../../library/termios.rst:2 +msgid ":mod:`termios` --- POSIX style tty control" +msgstr ":mod:`termios` --- POSIX 风格的 tty 控制" + +#: ../../library/termios.rst:14 +msgid "" +"This module provides an interface to the POSIX calls for tty I/O control. " +"For a complete description of these calls, see :manpage:`termios(3)` Unix " +"manual page. It is only available for those Unix versions that support " +"POSIX *termios* style tty I/O control configured during installation." +msgstr "" +"此模块提供了针对tty I/O 控制的 POSIX 调用的接口。 有关此类调用的完整描述,请参阅 :manpage:`termios(3)` Unix " +"指南页。 它仅在当安装时配置了支持 POSIX *termios* 风格的 tty I/O 控制的 Unix 版本上可用。" + +#: ../../library/termios.rst:19 +msgid "" +"All functions in this module take a file descriptor *fd* as their first " +"argument. This can be an integer file descriptor, such as returned by " +"``sys.stdin.fileno()``, or a :term:`file object`, such as ``sys.stdin`` " +"itself." +msgstr "" +"此模块中的所有函数均接受一个文件描述符 *fd* 作为第一个参数。 这可以是一个整数形式的文件描述符,例如 ``sys.stdin.fileno()``" +" 所返回的对象,或是一个 :term:`file object`,例如 ``sys.stdin`` 本身。" + +#: ../../library/termios.rst:23 +msgid "" +"This module also defines all the constants needed to work with the functions" +" provided here; these have the same name as their counterparts in C. Please" +" refer to your system documentation for more information on using these " +"terminal control interfaces." +msgstr "" +"这个模块还定义了与此处所提供的函数一起使用的所有必要的常量;这些常量与它们在 C 中的对应常量同名。 " +"请参考你的系统文档了解有关如何使用这些终端控制接口的更多信息。" + +#: ../../library/termios.rst:28 +msgid "The module defines the following functions:" +msgstr "这个模块定义了以下函数:" + +#: ../../library/termios.rst:33 +msgid "" +"Return a list containing the tty attributes for file descriptor *fd*, as " +"follows: ``[iflag, oflag, cflag, lflag, ispeed, ospeed, cc]`` where *cc* is " +"a list of the tty special characters (each a string of length 1, except the " +"items with indices :const:`VMIN` and :const:`VTIME`, which are integers when" +" these fields are defined). The interpretation of the flags and the speeds " +"as well as the indexing in the *cc* array must be done using the symbolic " +"constants defined in the :mod:`termios` module." +msgstr "" +"对于文件描述符 *fd* 返回一个包含 tty 属性的列表,形式如下: ``[iflag, oflag, cflag, lflag, ispeed, " +"ospeed, cc]``,其中 *cc* 为一个包含 tty 特殊字符的列表(每一项都是长度为 1 的字符串,索引号为 :const:`VMIN` 和" +" :const:`VTIME` 的项除外,这些字段如有定义则应为整数)。 对旗标和速度以及 *cc* 数组中索引的解读必须使用在 " +":mod:`termios` 模块中定义的符号常量来完成。" + +#: ../../library/termios.rst:44 +msgid "" +"Set the tty attributes for file descriptor *fd* from the *attributes*, which" +" is a list like the one returned by :func:`tcgetattr`. The *when* argument " +"determines when the attributes are changed: :const:`TCSANOW` to change " +"immediately, :const:`TCSADRAIN` to change after transmitting all queued " +"output, or :const:`TCSAFLUSH` to change after transmitting all queued output" +" and discarding all queued input." +msgstr "" +"根据 *attributes* 列表设置文件描述符 *fd* 的 tty 属性,该列表即 :func:`tcgetattr` 所返回的对象。 " +"*when* 参数确定何时改变属性: :const:`TCSANOW` 表示立即改变,:const:`TCSADRAIN` " +"表示在传输所有队列输出后再改变,或 :const:`TCSAFLUSH` 表示在传输所有队列输出并丢失所有队列输入后再改变。" + +#: ../../library/termios.rst:54 +msgid "" +"Send a break on file descriptor *fd*. A zero *duration* sends a break for " +"0.25--0.5 seconds; a nonzero *duration* has a system dependent meaning." +msgstr "" +"在文件描述符 *fd* 上发送一个中断。 *duration* 为零表示发送时长为 0.25--0.5 秒的中断;*duration* " +"非零值的含义取决于具体系统。" + +#: ../../library/termios.rst:60 +msgid "" +"Wait until all output written to file descriptor *fd* has been transmitted." +msgstr "进入等待状态直到写入文件描述符 *fd* 的所有输出都传送完毕。" + +#: ../../library/termios.rst:65 +msgid "" +"Discard queued data on file descriptor *fd*. The *queue* selector specifies" +" which queue: :const:`TCIFLUSH` for the input queue, :const:`TCOFLUSH` for " +"the output queue, or :const:`TCIOFLUSH` for both queues." +msgstr "" +"在文件描述符 *fd* 上丢弃队列数据。 *queue* 选择器指定哪个队列: :const:`TCIFLUSH` " +"表示输入队列,:const:`TCOFLUSH` 表示输出队列,或 :const:`TCIOFLUSH` 表示两个队列同时。" + +#: ../../library/termios.rst:72 +msgid "" +"Suspend or resume input or output on file descriptor *fd*. The *action* " +"argument can be :const:`TCOOFF` to suspend output, :const:`TCOON` to restart" +" output, :const:`TCIOFF` to suspend input, or :const:`TCION` to restart " +"input." +msgstr "" +"在文件描述符 *fd* 上挂起一战恢复输入或输出。 *action* 参数可以为 :const:`TCOOFF` " +"表示挂起输出,:const:`TCOON` 表示重启输出,:const:`TCIOFF` 表示挂起输入,或 :const:`TCION` 表示重启输入。" + +#: ../../library/termios.rst:79 +msgid "Module :mod:`tty`" +msgstr "模块 :mod:`tty`" + +#: ../../library/termios.rst:80 +msgid "Convenience functions for common terminal control operations." +msgstr "针对常用终端控制操作的便捷函数。" + +#: ../../library/termios.rst:86 +msgid "Example" +msgstr "示例" + +#: ../../library/termios.rst:88 +msgid "" +"Here's a function that prompts for a password with echoing turned off. Note" +" the technique using a separate :func:`tcgetattr` call and a :keyword:`try` " +"... :keyword:`finally` statement to ensure that the old tty attributes are " +"restored exactly no matter what happens::" +msgstr "" +"这个函数可提示输入密码并且关闭回显。 请注意其采取的技巧是使用一个单独的 :func:`tcgetattr` 调用和一个 :keyword:`try` " +"... :keyword:`finally` 语句来确保旧的 tty 属性无论在何种情况下都会被原样保存::" diff --git a/library/test.po b/library/test.po new file mode 100644 index 000000000..d677d12ac --- /dev/null +++ b/library/test.po @@ -0,0 +1,1900 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) 2001-2025, Python Software Foundation +# This file is distributed under the same license as the Python package. +# FIRST AUTHOR , YEAR. +# +# Translators: +# Leo Li , 2020 +# meowmeowcat , 2021 +# Alpha Du , 2021 +# Freesand Leo , 2024 +# Rafael Fontenelle , 2025 +# +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: Python 3.9\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2025-02-07 16:40+0000\n" +"PO-Revision-Date: 2017-02-16 23:30+0000\n" +"Last-Translator: Rafael Fontenelle , 2025\n" +"Language-Team: Chinese (China) (https://app.transifex.com/python-doc/teams/5390/zh_CN/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: zh_CN\n" +"Plural-Forms: nplurals=1; plural=0;\n" + +#: ../../library/test.rst:2 +msgid ":mod:`test` --- Regression tests package for Python" +msgstr ":mod:`test` --- Python 回归测试包" + +#: ../../library/test.rst:10 +msgid "" +"The :mod:`test` package is meant for internal use by Python only. It is " +"documented for the benefit of the core developers of Python. Any use of this" +" package outside of Python's standard library is discouraged as code " +"mentioned here can change or be removed without notice between releases of " +"Python." +msgstr "" +":mod:`test` 包只供 Python 内部使用。它的记录是为了让 Python 的核心开发者受益。我们不鼓励在 Python " +"标准库之外使用这个包,因为这里提到的代码在 Python 的不同版本之间可能会改变或被删除而不另行通知。" + +#: ../../library/test.rst:18 +msgid "" +"The :mod:`test` package contains all regression tests for Python as well as " +"the modules :mod:`test.support` and :mod:`test.regrtest`. " +":mod:`test.support` is used to enhance your tests while :mod:`test.regrtest`" +" drives the testing suite." +msgstr "" +":mod:`test` 包包含了 Python 的所有回归测试,以及 :mod:`test.support` 和 " +":mod:`test.regrtest` 模块。 :mod:`test.support` 用于增强你的测试,而 " +":mod:`test.regrtest` 驱动测试套件。" + +#: ../../library/test.rst:23 +msgid "" +"Each module in the :mod:`test` package whose name starts with ``test_`` is a" +" testing suite for a specific module or feature. All new tests should be " +"written using the :mod:`unittest` or :mod:`doctest` module. Some older " +"tests are written using a \"traditional\" testing style that compares output" +" printed to ``sys.stdout``; this style of test is considered deprecated." +msgstr "" +":mod:`test`包中每个名字以 ``test_`` 开头的模块都是一个特定模块或功能的测试套件。所有新的测试应该使用 " +":mod:`unittest` 或 :mod:`doctest` 模块编写。一些旧的测试是使用“传统”的测试风格编写的,即比较打印出来的输出到 " +"``sys.stdout``;这种测试风格被认为是过时的。" + +#: ../../library/test.rst:33 +msgid "Module :mod:`unittest`" +msgstr "模块 :mod:`unittest`" + +#: ../../library/test.rst:33 +msgid "Writing PyUnit regression tests." +msgstr "编写 PyUnit 回归测试." + +#: ../../library/test.rst:35 +msgid "Module :mod:`doctest`" +msgstr ":mod:`doctest` --- 文档测试模块" + +#: ../../library/test.rst:36 +msgid "Tests embedded in documentation strings." +msgstr "嵌入到文档字符串的测试。" + +#: ../../library/test.rst:42 +msgid "Writing Unit Tests for the :mod:`test` package" +msgstr "为 :mod:`test` 包编写单元测试" + +#: ../../library/test.rst:44 +msgid "" +"It is preferred that tests that use the :mod:`unittest` module follow a few " +"guidelines. One is to name the test module by starting it with ``test_`` and" +" end it with the name of the module being tested. The test methods in the " +"test module should start with ``test_`` and end with a description of what " +"the method is testing. This is needed so that the methods are recognized by " +"the test driver as test methods. Also, no documentation string for the " +"method should be included. A comment (such as ``# Tests function returns " +"only True or False``) should be used to provide documentation for test " +"methods. This is done because documentation strings get printed out if they " +"exist and thus what test is being run is not stated." +msgstr "" +"使用 :mod:`unittest` 模块的测试最好是遵循一些准则。 其中一条是测试模块的名称要以 ``test_`` 打头并以被测试模块的名称结尾。 " +"测试模块中的测试方法应当以 ``test_`` 打头并以该方法所测试的内容的说明结尾。 这很有必要因为这样测试驱动程序就会将这些方法识别为测试方法。 " +"此外,该方法不应当包括任何文档字符串。 应当使用注释 (例如 ``# Tests function returns only True or " +"False``) 来为测试方法提供文档说明。 这样做是因为文档字符串如果存在则会被打印出来因此无法指明正在运行哪个测试。" + +#: ../../library/test.rst:55 +msgid "A basic boilerplate is often used::" +msgstr "有一个基本模板经常会被使用::" + +#: ../../library/test.rst:88 +msgid "" +"This code pattern allows the testing suite to be run by " +":mod:`test.regrtest`, on its own as a script that supports the " +":mod:`unittest` CLI, or via the ``python -m unittest`` CLI." +msgstr "" +"这种代码模式允许测试套件由 :mod:`test.regrtest` 运行,作为支持 :mod:`unittest` CLI 的脚本单独运行,或者通过 " +"``python -m unittest`` CLI 来运行。" + +#: ../../library/test.rst:92 +msgid "" +"The goal for regression testing is to try to break code. This leads to a few" +" guidelines to be followed:" +msgstr "回归测试的目标是尝试破坏代码。 这引出了一些需要遵循的准则:" + +#: ../../library/test.rst:95 +msgid "" +"The testing suite should exercise all classes, functions, and constants. " +"This includes not just the external API that is to be presented to the " +"outside world but also \"private\" code." +msgstr "测试套件应当测试所有的类、函数和常量。 这不仅包括要向外界展示的外部 API 也包括“私有”的代码。" + +#: ../../library/test.rst:99 +msgid "" +"Whitebox testing (examining the code being tested when the tests are being " +"written) is preferred. Blackbox testing (testing only the published user " +"interface) is not complete enough to make sure all boundary and edge cases " +"are tested." +msgstr "白盒测试(在编写测试时检查被测试的代码)是最推荐的。 黑盒测试(只测试已发布的用户接口)因不够完整而不能确保所有边界和边缘情况都被测试到。" + +#: ../../library/test.rst:104 +msgid "" +"Make sure all possible values are tested including invalid ones. This makes " +"sure that not only all valid values are acceptable but also that improper " +"values are handled correctly." +msgstr "确保所有可能的值包括无效的值都被测试到。 这能确保不仅全部的有效值都可被接受而且不适当的值也能被正确地处理。" + +#: ../../library/test.rst:108 +msgid "" +"Exhaust as many code paths as possible. Test where branching occurs and thus" +" tailor input to make sure as many different paths through the code are " +"taken." +msgstr "消耗尽可能多的代码路径。 测试发生分支的地方从而调整输入以确保通过代码采取尽可能多的不同路径。" + +#: ../../library/test.rst:111 +msgid "" +"Add an explicit test for any bugs discovered for the tested code. This will " +"make sure that the error does not crop up again if the code is changed in " +"the future." +msgstr "为受测试的代码所发现的任何代码缺陷添加明确的测试。 这将确保如果代码在将来被改变错误也不会再次出现。" + +#: ../../library/test.rst:115 +msgid "" +"Make sure to clean up after your tests (such as close and remove all " +"temporary files)." +msgstr "确保在你的测试完成后执行清理(例如关闭并删除所有临时文件)。" + +#: ../../library/test.rst:118 +msgid "" +"If a test is dependent on a specific condition of the operating system then " +"verify the condition already exists before attempting the test." +msgstr "如果某个测试依赖于操作系统上的特定条件那么要在尝试测试之前先验证该条件是否已存在。" + +#: ../../library/test.rst:121 +msgid "" +"Import as few modules as possible and do it as soon as possible. This " +"minimizes external dependencies of tests and also minimizes possible " +"anomalous behavior from side-effects of importing a module." +msgstr "" +"尽可能少地导入模块并尽可能快地完成操作。 这可以最大限度地减少测试的外部依赖性并且还可以最大限度地减少导入模块带来的附带影响所导致的异常行为。" + +#: ../../library/test.rst:125 +msgid "" +"Try to maximize code reuse. On occasion, tests will vary by something as " +"small as what type of input is used. Minimize code duplication by " +"subclassing a basic test class with a class that specifies the input::" +msgstr "" +"尝试最大限度地重用代码。 在某些情况下,测试结果会因使用不同类型的输入这样的小细节而变化。 " +"可通过一个指定输入的类来子类化一个基本测试类来最大限度地减少重复代码::" + +#: ../../library/test.rst:145 +msgid "" +"When using this pattern, remember that all classes that inherit from " +":class:`unittest.TestCase` are run as tests. The :class:`Mixin` class in " +"the example above does not have any data and so can't be run by itself, thus" +" it does not inherit from :class:`unittest.TestCase`." +msgstr "" +"当使用这种模式时,请记住所有继承自 :class:`unittest.TestCase` 的类都会作为测试来运行。 上面例子中的 " +":class:`Mixin` 类没有任何数据所以其本身是无法运行的,因此它不是继承自 :class:`unittest.TestCase`。" + +#: ../../library/test.rst:153 +msgid "Test Driven Development" +msgstr "测试驱动的开发" + +#: ../../library/test.rst:154 +msgid "A book by Kent Beck on writing tests before code." +msgstr "Kent Beck 所著的阐述在实现代码之前编写驱动的书。" + +#: ../../library/test.rst:160 +msgid "Running tests using the command-line interface" +msgstr "使用命令行界面运行测试" + +#: ../../library/test.rst:162 +msgid "" +"The :mod:`test` package can be run as a script to drive Python's regression " +"test suite, thanks to the :option:`-m` option: :program:`python -m test`. " +"Under the hood, it uses :mod:`test.regrtest`; the call :program:`python -m " +"test.regrtest` used in previous Python versions still works. Running the " +"script by itself automatically starts running all regression tests in the " +":mod:`test` package. It does this by finding all modules in the package " +"whose name starts with ``test_``, importing them, and executing the function" +" :func:`test_main` if present or loading the tests via " +"unittest.TestLoader.loadTestsFromModule if ``test_main`` does not exist. " +"The names of tests to execute may also be passed to the script. Specifying a" +" single regression test (:program:`python -m test test_spam`) will minimize " +"output and only print whether the test passed or failed." +msgstr "" +"通过使用 :option:`-m` 选项 :mod:`test` 包可以作为脚本运行以驱动 Python 的回归测试套件: " +":program:`python -m test`。 在内部,它使用 :mod:`test.regrtest`;之前 Python 版本所使用的 " +":program:`python -m test.regrtest` 调用仍然有效。 运行该脚本自身会自动开始运行 :mod:`test` " +"包中的所有回归测试。 它通过在包中查找所有名称以 ``test_`` 打头的模块,导入它们,并在有 :func:`test_main` " +"函数时执行它或是在没有 ``test_main`` 时通过 unittest.TestLoader.loadTestsFromModule 载入测试。 " +"要执行的测试的名称也可以被传递给脚本。 指定一个单独的回归测试 (:program:`python -m test test_spam`) " +"将使输出最小化并且只打印测试通过或失败的消息。" + +#: ../../library/test.rst:175 +msgid "" +"Running :mod:`test` directly allows what resources are available for tests " +"to use to be set. You do this by using the ``-u`` command-line option. " +"Specifying ``all`` as the value for the ``-u`` option enables all possible " +"resources: :program:`python -m test -uall`. If all but one resource is " +"desired (a more common case), a comma-separated list of resources that are " +"not desired may be listed after ``all``. The command :program:`python -m " +"test -uall,-audio,-largefile` will run :mod:`test` with all resources except" +" the ``audio`` and ``largefile`` resources. For a list of all resources and " +"more command-line options, run :program:`python -m test -h`." +msgstr "" +"直接运行 :mod:`test` 将允许设置哪些资源可供测试使用。 你可以通过使用 ``-u`` 命令行选项来做到这一点。 指定 ``all`` 作为 " +"``-u`` 选项的值将启用所有可能的资源: :program:`python -m test -uall`。 " +"如果只需要一项资源(这是更为常见的情况),可以在 ``all`` 之后加一个以逗号分隔的列表来指明不需要的资源。 命令 :program:`python" +" -m test -uall,-audio,-largefile` 将运行 :mod:`test` 并使用除 ``audio`` 和 " +"``largefile`` 资源之外的所有资源。 要查看所有资源的列表和更多的命令行选项,请运行 :program:`python -m test " +"-h`。" + +#: ../../library/test.rst:186 +msgid "" +"Some other ways to execute the regression tests depend on what platform the " +"tests are being executed on. On Unix, you can run :program:`make test` at " +"the top-level directory where Python was built. On Windows, executing " +":program:`rt.bat` from your :file:`PCbuild` directory will run all " +"regression tests." +msgstr "" +"另外一些执行回归测试的方式依赖于执行测试所在的系统平台。 在 Unix 上,你可以在构建 Python 的最高层级目录中运行 " +":program:`make test`。 在 Windows 上,在你的 :file:`PCbuild` 目录中执行 " +":program:`rt.bat` 将运行所有的回归测试。" + +#: ../../library/test.rst:194 +msgid ":mod:`test.support` --- Utilities for the Python test suite" +msgstr ":mod:`test.support` --- 针对 Python 测试套件的工具" + +#: ../../library/test.rst:200 +msgid "" +"The :mod:`test.support` module provides support for Python's regression test" +" suite." +msgstr ":mod:`test.support` 模块提供了对 Python 的回归测试套件的支持。" + +#: ../../library/test.rst:205 +msgid "" +":mod:`test.support` is not a public module. It is documented here to help " +"Python developers write tests. The API of this module is subject to change " +"without backwards compatibility concerns between releases." +msgstr "" +":mod:`test.support` 不是一个公用模块。 这篇文档是为了帮助 Python 开发者编写测试。 此模块的 API " +"可能被改变而不顾及发行版本之间的向下兼容性问题。" + +#: ../../library/test.rst:210 +msgid "This module defines the following exceptions:" +msgstr "此模块定义了以下异常:" + +#: ../../library/test.rst:214 +msgid "" +"Exception to be raised when a test fails. This is deprecated in favor of " +":mod:`unittest`\\ -based tests and :class:`unittest.TestCase`'s assertion " +"methods." +msgstr "" +"当一个测试失败时将被引发的异常。 此异常已被弃用而应改用基于 :mod:`unittest` 的测试以及 " +":class:`unittest.TestCase` 的断言方法。" + +#: ../../library/test.rst:221 +msgid "" +"Subclass of :exc:`unittest.SkipTest`. Raised when a resource (such as a " +"network connection) is not available. Raised by the :func:`requires` " +"function." +msgstr "" +":exc:`unittest.SkipTest` 的子类。 当一个资源(例如网络连接)不可用时将被引发。 由 :func:`requires` " +"函数所引发。" + +#: ../../library/test.rst:226 +msgid "The :mod:`test.support` module defines the following constants:" +msgstr ":mod:`test.support` 模块定义了以下常量:" + +#: ../../library/test.rst:230 +msgid "" +"``True`` when verbose output is enabled. Should be checked when more " +"detailed information is desired about a running test. *verbose* is set by " +":mod:`test.regrtest`." +msgstr "" +"当启用详细输出时为 ``True``。 当需要有关运行中的测试的更详细信息时应当被选择。 *verbose* 是由 " +":mod:`test.regrtest` 来设置的。" + +#: ../../library/test.rst:237 +msgid "``True`` if the running interpreter is Jython." +msgstr "如果所运行的解释器是 Jython 时为 ``True``。" + +#: ../../library/test.rst:242 +msgid "``True`` if the system is Android." +msgstr "如果系统是 Android 时为 ``True``。" + +#: ../../library/test.rst:247 +msgid "Path for shell if not on Windows; otherwise ``None``." +msgstr "如果系统不是 Windows 时则为 shell 的路径;否则为 ``None``。" + +#: ../../library/test.rst:252 +msgid "A non-ASCII character encodable by :func:`os.fsencode`." +msgstr "一个可通过 :func:`os.fsencode` 编码的非 ASCII 字符。" + +#: ../../library/test.rst:257 +msgid "" +"Set to a name that is safe to use as the name of a temporary file. Any " +"temporary file that is created should be closed and unlinked (removed)." +msgstr "设置为一个可以安全地用作临时文件名的名称。 任何被创建的临时文件都应当被关闭和撤销链接(移除)。" + +#: ../../library/test.rst:263 +msgid "Set to a non-ASCII name for a temporary file." +msgstr "设置为用于临时文件的非 ASCII 名称。" + +#: ../../library/test.rst:268 +msgid "Set to :func:`sys.getfilesystemencoding`." +msgstr "" + +#: ../../library/test.rst:273 +msgid "" +"Set to a filename (str type) that should not be able to be encoded by file " +"system encoding in strict mode. It may be ``None`` if it's not possible to " +"generate such a filename." +msgstr "设置为一个应当在严格模式下不可使用文件系统编码格式来编码的文件名(str 类型)。 如果无法生成这样的文件名则可以为 ``None``。" + +#: ../../library/test.rst:280 +msgid "" +"Set to a filename (bytes type) that should not be able to be decoded by file" +" system encoding in strict mode. It may be ``None`` if it's not possible to" +" generate such a filename." +msgstr "" +"设置为一个应当在严格模式下不可使用文件系统编码格式来编码的文件名(bytes 类型)。 如果无法生成这样的文件名则可以为 ``None``。" + +#: ../../library/test.rst:287 +msgid "Set to a filename containing the :data:`FS_NONASCII` character." +msgstr "" + +#: ../../library/test.rst:292 +msgid "" +"Timeout in seconds for tests using a network server listening on the network" +" local loopback interface like ``127.0.0.1``." +msgstr "使用网络服务器监听网络本地环回接口如 ``127.0.0.1`` 的测试的以秒为单位的超时值。" + +#: ../../library/test.rst:295 +msgid "" +"The timeout is long enough to prevent test failure: it takes into account " +"that the client and the server can run in different threads or even " +"different processes." +msgstr "该超时长到足以防止测试失败:它要考虑客户端和服务器可能会在不同线程甚至不同进程中运行。" + +#: ../../library/test.rst:299 +msgid "" +"The timeout should be long enough for :meth:`~socket.socket.connect`, " +":meth:`~socket.socket.recv` and :meth:`~socket.socket.send` methods of " +":class:`socket.socket`." +msgstr "" +"该超时应当对于 :class:`socket.socket` 的 :meth:`~socket.socket.connect`, " +":meth:`~socket.socket.recv` 和 :meth:`~socket.socket.send` 方法都足够长。" + +#: ../../library/test.rst:303 +msgid "Its default value is 5 seconds." +msgstr "其默认值为5秒。" + +#: ../../library/test.rst:305 +msgid "See also :data:`INTERNET_TIMEOUT`." +msgstr "参见 :data:`INTERNET_TIMEOUT`。" + +#: ../../library/test.rst:310 +msgid "Timeout in seconds for network requests going to the Internet." +msgstr "" + +#: ../../library/test.rst:312 +msgid "" +"The timeout is short enough to prevent a test to wait for too long if the " +"Internet request is blocked for whatever reason." +msgstr "" + +#: ../../library/test.rst:315 +msgid "" +"Usually, a timeout using :data:`INTERNET_TIMEOUT` should not mark a test as " +"failed, but skip the test instead: see " +":func:`~test.support.socket_helper.transient_internet`." +msgstr "" +"通常使用 :data:`INTERNET_TIMEOUT` 的超时不应该将测试标记为失败,而是跳过测试:参见 " +":func:`~test.support.socket_helper.transient_internet`。" + +#: ../../library/test.rst:319 +msgid "Its default value is 1 minute." +msgstr "其默认值是1分钟。" + +#: ../../library/test.rst:321 +msgid "See also :data:`LOOPBACK_TIMEOUT`." +msgstr "参见 :data:`LOOPBACK_TIMEOUT`。" + +#: ../../library/test.rst:326 +msgid "" +"Timeout in seconds to mark a test as failed if the test takes \"too long\"." +msgstr "如果测试耗时“太长”而要将测试标记为失败的以秒为单位的超时值。" + +#: ../../library/test.rst:328 +msgid "" +"The timeout value depends on the regrtest ``--timeout`` command line option." +msgstr "该超时值取决于 regrtest ``--timeout`` 命令行选项。" + +#: ../../library/test.rst:330 +msgid "" +"If a test using :data:`SHORT_TIMEOUT` starts to fail randomly on slow " +"buildbots, use :data:`LONG_TIMEOUT` instead." +msgstr "" +"如果一个使用 :data:`SHORT_TIMEOUT` 的测试在慢速 buildbots 上开始随机失败,请使用 " +":data:`LONG_TIMEOUT` 来代替。" + +#: ../../library/test.rst:333 +msgid "Its default value is 30 seconds." +msgstr "其默认值为30秒。" + +#: ../../library/test.rst:338 +msgid "Timeout in seconds to detect when a test hangs." +msgstr "用于检测测试何时挂起的以秒为单位的超时值。" + +#: ../../library/test.rst:340 +msgid "" +"It is long enough to reduce the risk of test failure on the slowest Python " +"buildbots. It should not be used to mark a test as failed if the test takes " +"\"too long\". The timeout value depends on the regrtest ``--timeout`` " +"command line option." +msgstr "" +"它的长度足够在最慢的 Python buildbot 上降低测试失败的风险。 如果测试耗时“过长”也不应当用它将该测试标记为失败。 此超时值依赖于 " +"regrtest ``--timeout`` 命令行选项。" + +#: ../../library/test.rst:345 +msgid "Its default value is 5 minutes." +msgstr "其默认值为5分钟。" + +#: ../../library/test.rst:347 +msgid "" +"See also :data:`LOOPBACK_TIMEOUT`, :data:`INTERNET_TIMEOUT` and " +":data:`SHORT_TIMEOUT`." +msgstr "" +"另请参见 :data:`LOOPBACK_TIMEOUT`, :data:`INTERNET_TIMEOUT` 和 " +":data:`SHORT_TIMEOUT`。" + +#: ../../library/test.rst:353 +msgid "Set to :func:`os.getcwd`." +msgstr "设置为 :func:`os.getcwd`。" + +#: ../../library/test.rst:358 +msgid "Set when tests can be skipped when they are not useful for PGO." +msgstr "当测试对 PGO 没有用处时设置是否要跳过测试。" + +#: ../../library/test.rst:363 +msgid "" +"A constant that is likely larger than the underlying OS pipe buffer size, to" +" make writes blocking." +msgstr "一个通常大于下层 OS 管道缓冲区大小的常量,以产生写入阻塞。" + +#: ../../library/test.rst:369 +msgid "" +"A constant that is likely larger than the underlying OS socket buffer size, " +"to make writes blocking." +msgstr "一个通常大于下层 OS 套接字缓冲区大小的常量,以产生写入阻塞。" + +#: ../../library/test.rst:375 +msgid "Set to the top level directory that contains :mod:`test.support`." +msgstr "设为包含 :mod:`test.support` 的最高层级目录。" + +#: ../../library/test.rst:380 +msgid "Set to the top level directory for the test package." +msgstr "设为 test 包的最高层级目录。" + +#: ../../library/test.rst:385 +msgid "Set to the ``data`` directory within the test package." +msgstr "设为 test 包中的 ``data`` 目录。" + +#: ../../library/test.rst:390 +msgid "Set to :data:`sys.maxsize` for big memory tests." +msgstr "设为大内存测试的 :data:`sys.maxsize`。" + +#: ../../library/test.rst:395 +msgid "" +"Set by :func:`set_memlimit` as the memory limit for big memory tests. " +"Limited by :data:`MAX_Py_ssize_t`." +msgstr "通过 :func:`set_memlimit` 设为针对大内存测试的内存限制。 受 :data:`MAX_Py_ssize_t` 的限制。" + +#: ../../library/test.rst:401 +msgid "" +"Set by :func:`set_memlimit` as the memory limit for big memory tests. Not " +"limited by :data:`MAX_Py_ssize_t`." +msgstr "" +"通过 :func:`set_memlimit` 设为针对大内存测试的内存限制。 不受 :data:`MAX_Py_ssize_t` 的限制。" + +#: ../../library/test.rst:407 +msgid "" +"Return ``True`` if running on CPython, not on Windows, and configuration not" +" set with ``WITH_DOC_STRINGS``." +msgstr "" + +#: ../../library/test.rst:413 +msgid "Check for presence of docstrings." +msgstr "" + +#: ../../library/test.rst:418 +msgid "Define the URL of a dedicated HTTP server for the network tests." +msgstr "定义用于网络测试的韧性 HTTP 服务器的 URL。" + +#: ../../library/test.rst:423 +msgid "Object that is equal to anything. Used to test mixed type comparison." +msgstr "等于任何对象的对象。 用于测试混合类型比较。" + +#: ../../library/test.rst:428 +msgid "" +"Object that is not equal to anything (even to :data:`ALWAYS_EQ`). Used to " +"test mixed type comparison." +msgstr "不等于任何对象的对象 (即使是 :data:`ALWAYS_EQ`)。 用于测试混合类型比较。" + +#: ../../library/test.rst:434 +msgid "" +"Object that is greater than anything (except itself). Used to test mixed " +"type comparison." +msgstr "大于任何对象的对象(除了其自身)。 用于测试混合类型比较。" + +#: ../../library/test.rst:440 +msgid "" +"Object that is less than anything (except itself). Used to test mixed type " +"comparison." +msgstr "小于任何对象的对象(除了其自身)。 用于测试混合类型比较。Used to test mixed type comparison." + +#: ../../library/test.rst:444 +msgid "The :mod:`test.support` module defines the following functions:" +msgstr ":mod:`test.support` 模块定义了以下函数:" + +#: ../../library/test.rst:448 +msgid "" +"Remove the module named *module_name* from ``sys.modules`` and delete any " +"byte-compiled files of the module." +msgstr "从 ``sys.modules`` 移除名为 *module_name* 的模块并删除该模块的已编译字节码文件。" + +#: ../../library/test.rst:454 +msgid "Delete *name* from ``sys.modules``." +msgstr "从 ``sys.modules`` 中删除 *name*。" + +#: ../../library/test.rst:459 +msgid "" +"Call :func:`os.unlink` on *filename*. On Windows platforms, this is wrapped" +" with a wait loop that checks for the existence of the file." +msgstr "" + +#: ../../library/test.rst:465 +msgid "" +"Call :func:`os.rmdir` on *filename*. On Windows platforms, this is wrapped " +"with a wait loop that checks for the existence of the file." +msgstr "" + +#: ../../library/test.rst:471 +msgid "" +"Call :func:`shutil.rmtree` on *path* or call :func:`os.lstat` and " +":func:`os.rmdir` to remove a path and its contents. On Windows platforms, " +"this is wrapped with a wait loop that checks for the existence of the files." +msgstr "" + +#: ../../library/test.rst:478 +msgid "" +"Move a :pep:`3147`/:pep:`488` pyc file to its legacy pyc location and return" +" the file system path to the legacy pyc file. The *source* value is the " +"file system path to the source file. It does not need to exist, however the" +" PEP 3147/488 pyc file must exist." +msgstr "" +"将 :pep:`3147`/:pep:`488` pyc 文件移至旧版 pyc 位置并返回该旧版 pyc 文件的文件系统路径。 *source* " +"的值是源文件的文件系统路径。 它不必真实存在,但是 PEP 3147/488 pyc 文件必须存在。" + +#: ../../library/test.rst:486 +msgid "" +"Return ``True`` if *resource* is enabled and available. The list of " +"available resources is only set when :mod:`test.regrtest` is executing the " +"tests." +msgstr "" +"如果 *resource* 已启用并可用则返回 ``True``。 可用资源列表只有当 :mod:`test.regrtest` " +"正在执行测试时才会被设置。" + +#: ../../library/test.rst:493 +msgid "Return ``True`` if Python was not built with ``-O0`` or ``-Og``." +msgstr "如果 Python 编译未使用 ``-O0`` 或 ``-Og`` 则返回 ``True``。" + +#: ../../library/test.rst:498 +msgid "Return :data:`_testcapi.WITH_PYMALLOC`." +msgstr "返回 :data:`_testcapi.WITH_PYMALLOC`。" + +#: ../../library/test.rst:503 +msgid "" +"Raise :exc:`ResourceDenied` if *resource* is not available. *msg* is the " +"argument to :exc:`ResourceDenied` if it is raised. Always returns ``True`` " +"if called by a function whose ``__name__`` is ``'__main__'``. Used when " +"tests are executed by :mod:`test.regrtest`." +msgstr "" +"如果 *resource* 不可用则引发 :exc:`ResourceDenied`。 如果该异常被引发则 *msg* 为传给 " +":exc:`ResourceDenied` 的参数。 如果被 ``__name__`` 为 ``'__main__'`` 的函数调用则总是返回 " +"``True``。 在测试由 :mod:`test.regrtest` 执行时使用。" + +#: ../../library/test.rst:511 +msgid "" +"Raise :exc:`unittest.SkipTest` on TLS certification validation failures." +msgstr "" + +#: ../../library/test.rst:516 +msgid "Return a repr of *dict* with keys sorted." +msgstr "返回 *dict* 按键排序的 repr。" + +#: ../../library/test.rst:521 +msgid "" +"Return the path to the file named *filename*. If no match is found " +"*filename* is returned. This does not equal a failure since it could be the " +"path to the file." +msgstr "返回名为 *filename* 的文件的路径。 如果未找到匹配结果则返回 *filename*。 这并不等于失败因为它也算是该文件的路径。" + +#: ../../library/test.rst:525 +msgid "" +"Setting *subdir* indicates a relative path to use to find the file rather " +"than looking directly in the path directories." +msgstr "设置 *subdir* 指明要用来查找文件的相对路径而不是直接在路径目录中查找。" + +#: ../../library/test.rst:531 +msgid "" +"Create an empty file with *filename*. If it already exists, truncate it." +msgstr "创建一个名为 *filename* 的空文件。 如果文件已存在,则清空其内容。" + +#: ../../library/test.rst:536 +msgid "Count the number of open file descriptors." +msgstr "统计打开的文件描述符数量。" + +#: ../../library/test.rst:541 +msgid "Match *test* to patterns set in :func:`set_match_tests`." +msgstr "" + +#: ../../library/test.rst:546 +msgid "Define match test with regular expression *patterns*." +msgstr "" + +#: ../../library/test.rst:551 +msgid "" +"Execute :class:`unittest.TestCase` subclasses passed to the function. The " +"function scans the classes for methods starting with the prefix ``test_`` " +"and executes the tests individually." +msgstr "" +"执行传给函数的 :class:`unittest.TestCase` 子类。 此函数会扫描类中带有 ``test_`` 前缀的方法并单独执行这些测试。" + +#: ../../library/test.rst:555 +msgid "" +"It is also legal to pass strings as parameters; these should be keys in " +"``sys.modules``. Each associated module will be scanned by " +"``unittest.TestLoader.loadTestsFromModule()``. This is usually seen in the " +"following :func:`test_main` function::" +msgstr "" +"将字符串作为形参传递也是合法的;这些形参应为 ``sys.modules`` 中的键。 每个被关联的模块将由 " +"``unittest.TestLoader.loadTestsFromModule()`` 执行扫描。 这通常出现在以下 " +":func:`test_main` 函数中::" + +#: ../../library/test.rst:563 +msgid "This will run all tests defined in the named module." +msgstr "这将运行在指定模块中定义的所有测试。" + +#: ../../library/test.rst:568 +msgid "" +"Run :func:`doctest.testmod` on the given *module*. Return ``(failure_count," +" test_count)``." +msgstr "" +"在给定的 *module* 上运行 :func:`doctest.testmod`。 返回 ``(failure_count, " +"test_count)``。" + +#: ../../library/test.rst:571 +msgid "" +"If *verbosity* is ``None``, :func:`doctest.testmod` is run with verbosity " +"set to :data:`verbose`. Otherwise, it is run with verbosity set to " +"``None``. *optionflags* is passed as ``optionflags`` to " +":func:`doctest.testmod`." +msgstr "" +"如果 *verbosity* 为 ``None``,:func:`doctest.testmod` 运行时的消息详细程度将设为 " +":data:`verbose`。 否则,运行时的消息详细程度将设为 ``None``。 *optionflags* 将作为 " +"``optionflags`` 传给 :func:`doctest.testmod`。" + +#: ../../library/test.rst:579 +msgid "" +"Set the :func:`sys.setswitchinterval` to the given *interval*. Defines a " +"minimum interval for Android systems to prevent the system from hanging." +msgstr "" +"将 :func:`sys.setswitchinterval` 设为给定的 *interval*。 请为 Android " +"系统定义一个最小间隔以防止系统挂起。" + +#: ../../library/test.rst:585 +msgid "" +"Use this check to guard CPython's implementation-specific tests or to run " +"them only on the implementations guarded by the arguments::" +msgstr "" + +#: ../../library/test.rst:595 +msgid "" +"A convenience wrapper for :func:`warnings.catch_warnings()` that makes it " +"easier to test that a warning was correctly raised. It is approximately " +"equivalent to calling ``warnings.catch_warnings(record=True)`` with " +":meth:`warnings.simplefilter` set to ``always`` and with the option to " +"automatically validate the results that are recorded." +msgstr "" +"一个用于 :func:`warnings.catch_warnings()` 以更容易地测试特定警告是否被正确引发的便捷包装器。 它大致等价于调用 " +"``warnings.catch_warnings(record=True)`` 并将 :meth:`warnings.simplefilter` 设为" +" ``always`` 并附带自动验证已记录结果的选项。" + +#: ../../library/test.rst:601 +msgid "" +"``check_warnings`` accepts 2-tuples of the form ``(\"message regexp\", " +"WarningCategory)`` as positional arguments. If one or more *filters* are " +"provided, or if the optional keyword argument *quiet* is ``False``, it " +"checks to make sure the warnings are as expected: each specified filter " +"must match at least one of the warnings raised by the enclosed code or the " +"test fails, and if any warnings are raised that do not match any of the " +"specified filters the test fails. To disable the first of these checks, set" +" *quiet* to ``True``." +msgstr "" +"``check_warnings`` 接受 ``(\"message regexp\", WarningCategory)`` 形式的 2 " +"元组作为位置参数。 如果提供了一个或多个 *filters*,或者如果可选的关键字参数 *quiet* 为 " +"``False``,则它会检查确认警告是符合预期的:每个已指定的过滤器必须匹配至少一个被包围的代码或测试失败时引发的警告,并且如果有任何未能匹配已指定过滤器的警告被引发则测试将失败。" +" 要禁用这些检查中的第一项,请将 *quiet* 设为 ``True``。" + +#: ../../library/test.rst:610 +msgid "If no arguments are specified, it defaults to::" +msgstr "如果未指定任何参数,则默认为::" + +#: ../../library/test.rst:614 +msgid "In this case all warnings are caught and no errors are raised." +msgstr "在此情况下所有警告都会被捕获而不会引发任何错误。" + +#: ../../library/test.rst:616 +msgid "" +"On entry to the context manager, a :class:`WarningRecorder` instance is " +"returned. The underlying warnings list from :func:`~warnings.catch_warnings`" +" is available via the recorder object's :attr:`warnings` attribute. As a " +"convenience, the attributes of the object representing the most recent " +"warning can also be accessed directly through the recorder object (see " +"example below). If no warning has been raised, then any of the attributes " +"that would otherwise be expected on an object representing a warning will " +"return ``None``." +msgstr "" +"在进入该上下文管理器时,将返回一个 :class:`WarningRecorder` 实例。 来自 " +":func:`~warnings.catch_warnings` 的下层警告列表可通过该记录器对象的 :attr:`warnings` 属性来访问。 " +"作为一个便捷方式,该对象中代表最近的警告的属性也可通过该记录器对象来直接访问(参见以下示例)。 " +"如果未引发任何警告,则在其他情况下预期代表一个警告的任何对象属性都将返回 ``None``。" + +#: ../../library/test.rst:625 +msgid "" +"The recorder object also has a :meth:`reset` method, which clears the " +"warnings list." +msgstr "该记录器对象还有一个 :meth:`reset` 方法,该方法会清空警告列表。" + +#: ../../library/test.rst:628 +msgid "The context manager is designed to be used like this::" +msgstr "该上下文管理器被设计为像这样来使用::" + +#: ../../library/test.rst:635 +msgid "" +"In this case if either warning was not raised, or some other warning was " +"raised, :func:`check_warnings` would raise an error." +msgstr "在此情况下如果两个警告都未被引发,或是引发了其他的警告,则 :func:`check_warnings` 将会引发一个错误。" + +#: ../../library/test.rst:638 +msgid "" +"When a test needs to look more deeply into the warnings, rather than just " +"checking whether or not they occurred, code like this can be used::" +msgstr "当一个测试需要更深入地查看这些警告,而不是仅仅检查它们是否发生时,可以使用这样的代码::" + +#: ../../library/test.rst:652 +msgid "" +"Here all warnings will be caught, and the test code tests the captured " +"warnings directly." +msgstr "在这里所有的警告都将被捕获,而测试代码会直接测试被捕获的警告。" + +#: ../../library/test.rst:655 +msgid "New optional arguments *filters* and *quiet*." +msgstr "新增可选参数 *filters* 和 *quiet*。" + +#: ../../library/test.rst:661 +msgid "" +"Context manager to check that no :exc:`ResourceWarning` was raised. You " +"must remove the object which may emit :exc:`ResourceWarning` before the end " +"of the context manager." +msgstr "" +"检测是否没有任何 :exc:`ResourceWarning` 被引发的上下文管理器。 你必须在该上下文管理器结束之前移除可能发出 " +":exc:`ResourceWarning` 的对象。" + +#: ../../library/test.rst:668 +msgid "" +"Set the values for :data:`max_memuse` and :data:`real_max_memuse` for big " +"memory tests." +msgstr "针对大内存测试设置 :data:`max_memuse` 和 :data:`real_max_memuse` 的值。" + +#: ../../library/test.rst:674 +msgid "" +"Store the value from *stdout*. It is meant to hold the stdout at the time " +"the regrtest began." +msgstr "存放来自 *stdout* 的值。 它会在回归测试开始时处理 stdout。" + +#: ../../library/test.rst:680 +msgid "" +"Return the original stdout set by :func:`record_original_stdout` or " +"``sys.stdout`` if it's not set." +msgstr "" +"返回 :func:`record_original_stdout` 所设置的原始 stdout 或者如果未设置则为 ``sys.stdout``。" + +#: ../../library/test.rst:686 +msgid "" +"Return a list of command line arguments reproducing the current settings in " +"``sys.flags`` and ``sys.warnoptions``." +msgstr "返回在 ``sys.flags`` 和 ``sys.warnoptions`` 中重新产生当前设置的命令行参数列表。" + +#: ../../library/test.rst:692 +msgid "" +"Return a list of command line arguments reproducing the current optimization" +" settings in ``sys.flags``." +msgstr "返回在 ``sys.flags`` 中重新产生当前优化设置的命令行参数列表。" + +#: ../../library/test.rst:700 +msgid "" +"A context managers that temporarily replaces the named stream with " +":class:`io.StringIO` object." +msgstr "使用 :class:`io.StringIO` 对象临时替换指定流的上下文管理器。" + +#: ../../library/test.rst:703 +msgid "Example use with output streams::" +msgstr "使用输出流的示例::" + +#: ../../library/test.rst:711 +msgid "Example use with input stream::" +msgstr "使用输入流的示例::" + +#: ../../library/test.rst:723 +msgid "" +"A context manager that creates a temporary directory at *path* and yields " +"the directory." +msgstr "一个在 *path* 上创建临时目录并输出该目录的上下文管理器。" + +#: ../../library/test.rst:726 +msgid "" +"If *path* is ``None``, the temporary directory is created using " +":func:`tempfile.mkdtemp`. If *quiet* is ``False``, the context manager " +"raises an exception on error. Otherwise, if *path* is specified and cannot " +"be created, only a warning is issued." +msgstr "" +"如果 *path* 为 ``None``,则会使用 :func:`tempfile.mkdtemp` 来创建临时目录。 如果 *quiet* 为 " +"``False``,则该上下文管理器在发生错误时会引发一个异常。 在其他情况下,如果 *path* 已被指定并且无法创建,则只会发出一个警告。" + +#: ../../library/test.rst:734 +msgid "" +"A context manager that temporarily changes the current working directory to " +"*path* and yields the directory." +msgstr "一个临时性地将当前工作目录改为 *path* 并输出该目录的上下文管理器。" + +#: ../../library/test.rst:737 +msgid "" +"If *quiet* is ``False``, the context manager raises an exception on error. " +"Otherwise, it issues only a warning and keeps the current working directory " +"the same." +msgstr "" +"如果 *quiet* 为 ``False``,此上下文管理器将在发生错误时引发一个异常。 在其他情况下,它将只发出一个警告并将当前工作目录保持原状。" + +#: ../../library/test.rst:744 +msgid "" +"A context manager that temporarily creates a new directory and changes the " +"current working directory (CWD)." +msgstr "一个临时性地创建新目录并改变当前工作目录(CWD)的上下文管理器。" + +#: ../../library/test.rst:747 +msgid "" +"The context manager creates a temporary directory in the current directory " +"with name *name* before temporarily changing the current working directory." +" If *name* is ``None``, the temporary directory is created using " +":func:`tempfile.mkdtemp`." +msgstr "" +"临时性地改变当前工作目录之前此上下文管理器会在当前目录下创建一个名为 *name* 的临时目录。 如果 *name* 为 ``None``,则会使用 " +":func:`tempfile.mkdtemp` 创建临时目录。" + +#: ../../library/test.rst:752 +msgid "" +"If *quiet* is ``False`` and it is not possible to create or change the CWD, " +"an error is raised. Otherwise, only a warning is raised and the original " +"CWD is used." +msgstr "" +"如果 *quiet* 为 ``False`` 并且无法创建或修改 CWD,则会引发一个错误。 在其他情况下,只会引发一个警告并使用原始 CWD。" + +#: ../../library/test.rst:759 +msgid "A context manager that temporarily sets the process umask." +msgstr "一个临时性地设置进程掩码的上下文管理器。" + +#: ../../library/test.rst:764 +msgid "" +"A context manager that replaces ``sys.stderr`` with ``sys.__stderr__``." +msgstr "" + +#: ../../library/test.rst:769 +msgid "" +"Force as many objects as possible to be collected. This is needed because " +"timely deallocation is not guaranteed by the garbage collector. This means " +"that ``__del__`` methods may be called later than expected and weakrefs may " +"remain alive for longer than expected." +msgstr "" +"强制收集尽可能多的对象。 这是有必要的因为垃圾回收器并不能保证及时回收资源。 这意味着 ``__del__`` " +"方法的调用可能会晚于预期而弱引用的存活长于预期。" + +#: ../../library/test.rst:777 +msgid "" +"A context manager that disables the garbage collector upon entry and " +"reenables it upon exit." +msgstr "" + +#: ../../library/test.rst:783 +msgid "Context manager to swap out an attribute with a new object." +msgstr "上下文管理器用一个新对象来交换一个属性。" + +#: ../../library/test.rst:785 ../../library/test.rst:803 +#: ../../library/test.rst:1159 ../../library/test.rst:1189 +msgid "Usage::" +msgstr "用法:" + +#: ../../library/test.rst:790 +msgid "" +"This will set ``obj.attr`` to 5 for the duration of the ``with`` block, " +"restoring the old value at the end of the block. If ``attr`` doesn't exist " +"on ``obj``, it will be created and then deleted at the end of the block." +msgstr "" +"这将把 ``obj.attr`` 设为 5 并在 ``with`` 语句块内保持,在语句块结束时恢复旧值。 如果 ``attr`` 不存在于 " +"``obj`` 中,它将被创建并在语句块结束时被删除。" + +#: ../../library/test.rst:795 ../../library/test.rst:813 +msgid "" +"The old value (or ``None`` if it doesn't exist) will be assigned to the " +"target of the \"as\" clause, if there is one." +msgstr "旧值 (或者如果不存在旧值则为 ``None``) 将被赋给 \"as\" 子句的目标,如果存在子句的话。" + +#: ../../library/test.rst:801 +msgid "Context manager to swap out an item with a new object." +msgstr "上下文件管理器用一个新对象来交换一个条目。" + +#: ../../library/test.rst:808 +msgid "" +"This will set ``obj[\"item\"]`` to 5 for the duration of the ``with`` block," +" restoring the old value at the end of the block. If ``item`` doesn't exist " +"on ``obj``, it will be created and then deleted at the end of the block." +msgstr "" +"这将把 ``obj[\"item\"]`` 设为 5 并在 ``with`` 语句块内保持,在语句块结束时恢复旧值。 如果 ``item`` 不存在于 " +"``obj`` 中,它将被创建并在语句块结束时被删除。" + +#: ../../library/test.rst:819 +msgid "" +"Print a warning into :data:`sys.__stderr__`. Format the message as: " +"``f\"Warning -- {msg}\"``. If *msg* is made of multiple lines, add " +"``\"Warning -- \"`` prefix to each line." +msgstr "" +"打印一个警告到 :data:`sys.__stderr__`。 将消息格式化为: ``f\"Warning -- {msg}\"``。 如果 *msg*" +" 包含多行,则为每行添加 ``\"Warning -- \"`` 前缀。" + +#: ../../library/test.rst:828 +msgid "" +"Wait until process *pid* completes and check that the process exit code is " +"*exitcode*." +msgstr "等待直到进程 *pid* 结束并检查进程退出代码是否为 *exitcode*。" + +#: ../../library/test.rst:831 +msgid "" +"Raise an :exc:`AssertionError` if the process exit code is not equal to " +"*exitcode*." +msgstr "如果进程退出代码不等于 *exitcode* 则引发 :exc:`AssertionError`。" + +#: ../../library/test.rst:834 +msgid "" +"If the process runs longer than *timeout* seconds (:data:`SHORT_TIMEOUT` by " +"default), kill the process and raise an :exc:`AssertionError`. The timeout " +"feature is not available on Windows." +msgstr "" +"如果进程运行时长超过 *timeout* 秒 (默认为 :data:`SHORT_TIMEOUT`),则杀死进程并引发 " +":exc:`AssertionError`。 超时特性在 Windows 上不可用。" + +#: ../../library/test.rst:843 +msgid "" +"Context manager to wait until all threads created in the ``with`` statement " +"exit." +msgstr "等待直到 ``with`` 语句中所有已创建线程退出的上下文管理器。" + +#: ../../library/test.rst:849 +msgid "" +"Context manager to start *threads*. It attempts to join the threads upon " +"exit." +msgstr "" + +#: ../../library/test.rst:855 +msgid "" +"Return :func:`struct.calcsize` for ``nP{fmt}0n`` or, if ``gettotalrefcount``" +" exists, ``2PnP{fmt}0P``." +msgstr "" + +#: ../../library/test.rst:861 +msgid "" +"Return :func:`struct.calcsize` for ``nPn{fmt}0n`` or, if " +"``gettotalrefcount`` exists, ``2PnPn{fmt}0P``." +msgstr "" + +#: ../../library/test.rst:867 +msgid "" +"For testcase *test*, assert that the ``sys.getsizeof`` for *o* plus the GC " +"header size equals *size*." +msgstr "对于测试用例 *test*,断言 *o* 的 ``sys.getsizeof`` 加 GC 头的大小等于 *size*。" + +#: ../../library/test.rst:873 +msgid "" +"Return ``True`` if the OS supports symbolic links, ``False`` otherwise." +msgstr "如果操作系统支持符号链接则返回 ``True``,否则返回 ``False``。" + +#: ../../library/test.rst:879 +msgid "Return ``True`` if the OS supports xattr, ``False`` otherwise." +msgstr "如果操作系统支持 xattr 支返回 ``True``,否则返回 ``False``。" + +#: ../../library/test.rst:885 +msgid "A decorator for running tests that require support for symbolic links." +msgstr "一个用于运行需要符号链接支持的测试的装饰器。" + +#: ../../library/test.rst:890 +msgid "A decorator for running tests that require support for xattr." +msgstr "一个用于运行需要 xattr 支持的测试的装饰器。" + +#: ../../library/test.rst:895 +msgid "" +"A decorator to conditionally mark tests with " +":func:`unittest.expectedFailure`. Any use of this decorator should have an " +"associated comment identifying the relevant tracker issue." +msgstr "" +"一个有条件地用 :func:`unittest.expectedFailure` 来标记测试的装饰器。 " +"任何对此装饰器的使用都应当具有标识相应追踪事项的有关联注释。" + +#: ../../library/test.rst:902 +msgid "" +"A decorator for running a function in a different locale, correctly " +"resetting it after it has finished. *catstr* is the locale category as a " +"string (for example ``\"LC_ALL\"``). The *locales* passed will be tried " +"sequentially, and the first valid locale will be used." +msgstr "" +"一个在不同语言区域下运行函数的装饰器,并在其结束后正确地重置语言区域。 *catstr* 是字符串形式的语言区域类别 (例如 " +"``\"LC_ALL\"``)。 传入的 *locales* 将依次被尝试,并将使用第一个有效的语言区域。" + +#: ../../library/test.rst:910 +msgid "" +"A decorator for running a function in a specific timezone, correctly " +"resetting it after it has finished." +msgstr "一个在指定时区下运行函数的装饰器,并在其结束后正确地重置时区。" + +#: ../../library/test.rst:916 +msgid "" +"Decorator for the minimum version when running test on FreeBSD. If the " +"FreeBSD version is less than the minimum, raise :exc:`unittest.SkipTest`." +msgstr "" + +#: ../../library/test.rst:922 +msgid "" +"Decorator for the minimum version when running test on Linux. If the Linux " +"version is less than the minimum, raise :exc:`unittest.SkipTest`." +msgstr "" + +#: ../../library/test.rst:928 +msgid "" +"Decorator for the minimum version when running test on macOS. If the macOS " +"version is less than the minimum, raise :exc:`unittest.SkipTest`." +msgstr "" + +#: ../../library/test.rst:934 +msgid "Decorator for skipping tests on non-IEEE 754 platforms." +msgstr "用于在非 non-IEEE 754 平台上跳过测试的装饰器。" + +#: ../../library/test.rst:939 +msgid "Decorator for skipping tests if :mod:`zlib` doesn't exist." +msgstr "用于当 :mod:`zlib` 不存在时跳过测试的装饰器。" + +#: ../../library/test.rst:944 +msgid "Decorator for skipping tests if :mod:`gzip` doesn't exist." +msgstr "用于当 :mod:`gzip` 不存在时跳过测试的装饰器。" + +#: ../../library/test.rst:949 +msgid "Decorator for skipping tests if :mod:`bz2` doesn't exist." +msgstr "用于当 :mod:`bz2` 不存在时跳过测试的装饰器。" + +#: ../../library/test.rst:954 +msgid "Decorator for skipping tests if :mod:`lzma` doesn't exist." +msgstr "用于当 :mod:`lzma` 不存在时跳过测试的装饰器。" + +#: ../../library/test.rst:959 +msgid "Decorator for skipping tests if *resource* is not available." +msgstr "用于当 *resource* 不可用时跳过测试的装饰器。" + +#: ../../library/test.rst:964 +msgid "Decorator for only running the test if :data:`HAVE_DOCSTRINGS`." +msgstr "用于仅当 :data:`HAVE_DOCSTRINGS` 时才运行测试的装饰器。" + +#: ../../library/test.rst:969 +msgid "Decorator for tests only applicable to CPython." +msgstr "表示仅适用于 CPython 的测试的装饰器。" + +#: ../../library/test.rst:974 +msgid "" +"Decorator for invoking :func:`check_impl_detail` on *guards*. If that " +"returns ``False``, then uses *msg* as the reason for skipping the test." +msgstr "" +"用于在 *guards* 上唤起 :func:`check_impl_detail` 的装饰器。 如果调用返回 ``False``,则使用 *msg* " +"作为跳过测试的原因。" + +#: ../../library/test.rst:980 +msgid "" +"Decorator to temporarily turn off tracing for the duration of the test." +msgstr "用于在测试期间临时关闭追踪的装饰器。" + +#: ../../library/test.rst:985 +msgid "" +"Decorator for tests which involve reference counting. The decorator does " +"not run the test if it is not run by CPython. Any trace function is unset " +"for the duration of the test to prevent unexpected refcounts caused by the " +"trace function." +msgstr "" +"用于涉及引用计数的测试的装饰器。 如果测试不是由 CPython 运行则该装饰器不会运行测试。 " +"在测试期间会取消设置任何追踪函数以由追踪函数导致的意外引用计数。" + +#: ../../library/test.rst:993 +msgid "Decorator to ensure the threads are cleaned up even if the test fails." +msgstr "用于确保即使测试失败线程仍然会被清理的装饰器。" + +#: ../../library/test.rst:998 +msgid "Decorator for bigmem tests." +msgstr "用于大内存测试的装饰器。" + +#: ../../library/test.rst:1000 +msgid "" +"*size* is a requested size for the test (in arbitrary, test-interpreted " +"units.) *memuse* is the number of bytes per unit for the test, or a good " +"estimate of it. For example, a test that needs two byte buffers, of 4 GiB " +"each, could be decorated with ``@bigmemtest(size=_4G, memuse=2)``." +msgstr "" +"*size* 是测试所请求的大小(以任意的,由测试解读的单位。) *memuse* 是测试的每单元字节数,或是对它的良好估计。 " +"例如,一个需要两个字节缓冲区,每个缓冲区 4 GiB,则可以用 ``@bigmemtest(size=_4G, memuse=2)`` 来装饰。" + +#: ../../library/test.rst:1005 +msgid "" +"The *size* argument is normally passed to the decorated test method as an " +"extra argument. If *dry_run* is ``True``, the value passed to the test " +"method may be less than the requested value. If *dry_run* is ``False``, it " +"means the test doesn't support dummy runs when ``-M`` is not specified." +msgstr "" +"*size* 参数通常作为额外参数传递给被测试的方法。 如果 *dry_run* 为 ``True``,则传给测试方法的值可能少于所请求的值。 如果 " +"*dry_run* 为 ``False``,则意味着当当未指定 ``-M`` 时测试将不支持虚拟运行。" + +#: ../../library/test.rst:1013 +msgid "" +"Decorator for tests that fill the address space. *f* is the function to " +"wrap." +msgstr "" + +#: ../../library/test.rst:1019 +msgid "" +"Create an invalid file descriptor by opening and closing a temporary file, " +"and returning its descriptor." +msgstr "通过打开并关闭临时文件来创建一个无效的文件描述符,并返回其描述器。" + +#: ../../library/test.rst:1025 +msgid "" +"Test for syntax errors in *statement* by attempting to compile *statement*. " +"*testcase* is the :mod:`unittest` instance for the test. *errtext* is the " +"regular expression which should match the string representation of the " +"raised :exc:`SyntaxError`. If *lineno* is not ``None``, compares to the " +"line of the exception. If *offset* is not ``None``, compares to the offset " +"of the exception." +msgstr "" +"用于通过尝试编译 *statement* 来测试 *statement* 中的语法错误。 *testcase* 是测试的 :mod:`unittest`" +" 实例。 *errtext* 是应当匹配所引发的 :exc:`SyntaxError` 的字符串表示形式的正则表达式。 如果 *lineno* 不为 " +"``None``,则与异常所在的行进行比较。 如果 *offset* 不为 ``None``,则与异常的偏移量进行比较。" + +#: ../../library/test.rst:1035 +msgid "" +"Test for syntax warning in *statement* by attempting to compile *statement*." +" Test also that the :exc:`SyntaxWarning` is emitted only once, and that it " +"will be converted to a :exc:`SyntaxError` when turned into error. *testcase*" +" is the :mod:`unittest` instance for the test. *errtext* is the regular " +"expression which should match the string representation of the emitted " +":exc:`SyntaxWarning` and raised :exc:`SyntaxError`. If *lineno* is not " +"``None``, compares to the line of the warning and exception. If *offset* is " +"not ``None``, compares to the offset of the exception." +msgstr "" +"用于通过尝试编译 *statement* 来测试 *statement* 中的语法警告。 还会测试 :exc:`SyntaxWarning` " +"是否只发出了一次,以及它在转成错误时是否将被转换为 :exc:`SyntaxError`。 *testcase* 是用于测试的 " +":mod:`unittest` 实例。 *errtext* 是应当匹配所发出的 :exc:`SyntaxWarning` 以及所引发的 " +":exc:`SyntaxError` 的字符串表示形式的正则表达式。 如果 *lineno* 不为 ``None``,则与警告和异常所在的行进行比较。 " +"如果 *offset* 不为 ``None``,则与异常的偏移量进行比较。" + +#: ../../library/test.rst:1049 +msgid "Open *url*. If open fails, raises :exc:`TestFailed`." +msgstr "打开 *url*。 如果打开失败,则引发 :exc:`TestFailed`。" + +#: ../../library/test.rst:1054 +msgid "" +"This function imports and returns the named module. Unlike a normal import, " +"this function raises :exc:`unittest.SkipTest` if the module cannot be " +"imported." +msgstr "此函数会导入并返回指定名称的模块。 不同于正常的导入,如果模块无法被导入则此函数将引发 :exc:`unittest.SkipTest`。" + +#: ../../library/test.rst:1058 +msgid "" +"Module and package deprecation messages are suppressed during this import if" +" *deprecated* is ``True``. If a module is required on a platform but " +"optional for others, set *required_on* to an iterable of platform prefixes " +"which will be compared against :data:`sys.platform`." +msgstr "" +"如果 *deprecated* 为 ``True`` 则在此导入操作期间模块和包的弃用消息会被屏蔽。 " +"如果某个模块在特定平台上是必需的而在其他平台上是可选的,请为包含平台前缀的可迭代对象设置 *required_on*,此对象将与 " +":data:`sys.platform` 进行比对。" + +#: ../../library/test.rst:1068 +msgid "" +"This function imports and returns a fresh copy of the named Python module by" +" removing the named module from ``sys.modules`` before doing the import. " +"Note that unlike :func:`reload`, the original module is not affected by this" +" operation." +msgstr "" +"此函数会在执行导入之前通过从 ``sys.modules`` 移除指定模块来导入并返回指定 Python 模块的新副本。 请注意这不同于 " +":func:`reload`,原来的模块不会受到此操作的影响。" + +#: ../../library/test.rst:1073 +msgid "" +"*fresh* is an iterable of additional module names that are also removed from" +" the ``sys.modules`` cache before doing the import." +msgstr "*fresh* 是包含在执行导入之前还要从 ``sys.modules`` 缓存中移除的附加模块名称的可迭代对象。" + +#: ../../library/test.rst:1076 +msgid "" +"*blocked* is an iterable of module names that are replaced with ``None`` in " +"the module cache during the import to ensure that attempts to import them " +"raise :exc:`ImportError`." +msgstr "" +"*blocked* 是包含模块名称的可迭代对象,导入期间在模块缓存中它会被替换为 ``None`` 以确保尝试导入将引发 " +":exc:`ImportError`。" + +#: ../../library/test.rst:1080 +msgid "" +"The named module and any modules named in the *fresh* and *blocked* " +"parameters are saved before starting the import and then reinserted into " +"``sys.modules`` when the fresh import is complete." +msgstr "" +"指定名称的模块以及任何在 *fresh* 和 *blocked* 形参中指明的模块会在开始导入之前被保存并在全新导入完成时被重新插入到 " +"``sys.modules`` 中。" + +#: ../../library/test.rst:1084 +msgid "" +"Module and package deprecation messages are suppressed during this import if" +" *deprecated* is ``True``." +msgstr "如果 *deprecated* 为 ``True`` 则在此导入操作期间模块和包的弃用消息会被屏蔽。" + +#: ../../library/test.rst:1087 +msgid "" +"This function will raise :exc:`ImportError` if the named module cannot be " +"imported." +msgstr "如果指定名称的模块无法被导入则此函数将引发 :exc:`ImportError`。" + +#: ../../library/test.rst:1090 ../../library/test.rst:1283 +msgid "Example use::" +msgstr "用法示例::" + +#: ../../library/test.rst:1104 +msgid "Return a copy of :data:`sys.modules`." +msgstr "返回 :data:`sys.modules` 的副本。" + +#: ../../library/test.rst:1109 +msgid "" +"Remove modules except for *oldmodules* and ``encodings`` in order to " +"preserve internal cache." +msgstr "移除 *oldmodules* 和 ``encodings`` 以外的模块以保留内部缓冲区。" + +#: ../../library/test.rst:1115 +msgid "Return current thread count and copy of dangling threads." +msgstr "返回当前线程计数和悬空线程的副本。" + +#: ../../library/test.rst:1120 +msgid "" +"Cleanup up threads not specified in *original_values*. Designed to emit a " +"warning if a test leaves running threads in the background." +msgstr "清理未在 *original_values* 中指定的线程。 被设计为如果有一个测试在后台离开正在运行的线程时会发出警告。" + +#: ../../library/test.rst:1126 +msgid "" +"Join a *thread* within *timeout*. Raise an :exc:`AssertionError` if thread " +"is still alive after *timeout* seconds." +msgstr "" +"在 *timeout* 秒之内合并一个 *thread*。 如果线程在 *timeout* 秒后仍然存活则引发 " +":exc:`AssertionError`。" + +#: ../../library/test.rst:1132 +msgid "" +"Use this at the end of ``test_main`` whenever sub-processes are started. " +"This will help ensure that no extra children (zombies) stick around to hog " +"resources and create problems when looking for refleaks." +msgstr "" +"只要有子进程启动就在 ``test_main`` 的末尾使用此函数。 这将有助于确保没有多余的子进程(僵尸)存在占用资源并在查找引用泄漏时造成问题。" + +#: ../../library/test.rst:1139 +msgid "" +"Get an attribute, raising :exc:`unittest.SkipTest` if :exc:`AttributeError` " +"is raised." +msgstr "获取一个属性,如果引发了 :exc:`AttributeError` 则会引发 :exc:`unittest.SkipTest`。" + +#: ../../library/test.rst:1145 +msgid "" +"Context manager catching :class:`threading.Thread` exception using " +":func:`threading.excepthook`." +msgstr "" +"使用 :func:`threading.excepthook` 来捕获 :class:`threading.Thread` 异常的上下文管理器。" + +#: ../../library/test.rst:1148 +msgid "Attributes set when an exception is caught:" +msgstr "当异常被捕获时要设置的属性:" + +#: ../../library/test.rst:1150 +msgid "``exc_type``" +msgstr "``exc_type``" + +#: ../../library/test.rst:1151 +msgid "``exc_value``" +msgstr "``exc_value``" + +#: ../../library/test.rst:1152 +msgid "``exc_traceback``" +msgstr "``exc_traceback``" + +#: ../../library/test.rst:1153 +msgid "``thread``" +msgstr "``thread``" + +#: ../../library/test.rst:1155 +msgid "See :func:`threading.excepthook` documentation." +msgstr "参见 :func:`threading.excepthook` 文档。" + +#: ../../library/test.rst:1157 +msgid "These attributes are deleted at the context manager exit." +msgstr "这些属性在上下文管理器退出时将被删除。" + +#: ../../library/test.rst:1178 +msgid "" +"Context manager catching unraisable exception using " +":func:`sys.unraisablehook`." +msgstr "使用 :func:`sys.unraisablehook` 来捕获不可引发的异常的上下文管理器。" + +#: ../../library/test.rst:1181 +msgid "" +"Storing the exception value (``cm.unraisable.exc_value``) creates a " +"reference cycle. The reference cycle is broken explicitly when the context " +"manager exits." +msgstr "存储异常值 (``cm.unraisable.exc_value``) 会创建一个引用循环。 引用循环将在上下文管理器退出时被显式地打破。" + +#: ../../library/test.rst:1185 +msgid "" +"Storing the object (``cm.unraisable.object``) can resurrect it if it is set " +"to an object which is being finalized. Exiting the context manager clears " +"the stored object." +msgstr "" +"存储对象 (``cm.unraisable.object``) 如果被设置为一个正在最终化的对象则可以恢复它。 退出上下文管理器将清除已存在对象。" + +#: ../../library/test.rst:1206 +msgid "" +"Generic implementation of the :mod:`unittest` ``load_tests`` protocol for " +"use in test packages. *pkg_dir* is the root directory of the package; " +"*loader*, *standard_tests*, and *pattern* are the arguments expected by " +"``load_tests``. In simple cases, the test package's ``__init__.py`` can be " +"the following::" +msgstr "" +"在测试包中使用的 :mod:`unittest` ``load_tests`` 协议的通用实现。 *pkg_dir* 是包的根目录;*loader*, " +"*standard_tests* 和 *pattern* 是 ``load_tests`` 所期望的参数。 在简单的情况下,测试包的 " +"``__init__.py`` 可以是下面这样的::" + +#: ../../library/test.rst:1221 +msgid "" +"Return ``True`` if the file system for *directory* is case-insensitive." +msgstr "如果 *directory* 的文件系统对大小写敏感则返回 ``True``。" + +#: ../../library/test.rst:1226 +msgid "" +"Returns the set of attributes, functions or methods of *ref_api* not found " +"on *other_api*, except for a defined list of items to be ignored in this " +"check specified in *ignore*." +msgstr "" +"返回未在 *other_api* 中找到的 *ref_api* 的属性、函数或方法的集合,除去在 *ignore* " +"中指明的要在这个检查中忽略的已定义条目列表。" + +#: ../../library/test.rst:1230 +msgid "" +"By default this skips private attributes beginning with '_' but includes all" +" magic methods, i.e. those starting and ending in '__'." +msgstr "在默认情况下这将跳过以 '_' 打头的私有属性但包括所有魔术方法,即以 '__' 打头和结尾的方法。" + +#: ../../library/test.rst:1238 +msgid "" +"Override *object_to_patch.attr_name* with *new_value*. Also add cleanup " +"procedure to *test_instance* to restore *object_to_patch* for *attr_name*. " +"The *attr_name* should be a valid attribute for *object_to_patch*." +msgstr "" +"用 *new_value* 重载 *object_to_patch.attr_name*。并向 *test_instance* 添加清理过程以便为 " +"*attr_name* 恢复 *object_to_patch*。 *attr_name* 应当是 *object_to_patch* 的一个有效属性。" + +#: ../../library/test.rst:1246 +msgid "" +"Run *code* in subinterpreter. Raise :exc:`unittest.SkipTest` if " +":mod:`tracemalloc` is enabled." +msgstr "" +"在子解释器中运行 *code*。 如果启用了 :mod:`tracemalloc` 则会引发 :exc:`unittest.SkipTest`。" + +#: ../../library/test.rst:1252 +msgid "Assert that *iter* is deallocated after iterating." +msgstr "" + +#: ../../library/test.rst:1257 +msgid "" +"Check for the existence of the compiler executables whose names are listed " +"in *cmd_names* or all the compiler executables when *cmd_names* is empty and" +" return the first missing executable or ``None`` when none is found missing." +msgstr "" +"检查在 *cmd_names* 中列出名称的或者当 *cmd_names* " +"为空时所有的编译器可执行文件是否存在并返回第一个丢失的可执行文件或者如果未发现任何丢失则返回 ``None``。" + +#: ../../library/test.rst:1265 +msgid "" +"Assert that the ``__all__`` variable of *module* contains all public names." +msgstr "断言 *module* 的 ``__all__`` 变量包含全部公共名称。" + +#: ../../library/test.rst:1267 +msgid "" +"The module's public names (its API) are detected automatically based on " +"whether they match the public name convention and were defined in *module*." +msgstr "模块的公共名称(它的 API)是根据它们是否符合公共名称惯例并在 *module* 中被定义来自动检测的。" + +#: ../../library/test.rst:1271 +msgid "" +"The *name_of_module* argument can specify (as a string or tuple thereof) " +"what module(s) an API could be defined in order to be detected as a public " +"API. One case for this is when *module* imports part of its public API from " +"other modules, possibly a C backend (like ``csv`` and its ``_csv``)." +msgstr "" +"*name_of_module* 参数可以(用字符串或元组的形式)指定一个 API 可以被定义为什么模块以便被检测为一个公共 API。 " +"一种这样的情况会在 *module* 从其他模块,可能是一个 C 后端 (如 ``csv`` 和它的 ``_csv``) 导入其公共 API " +"的某一组成部分时发生。" + +#: ../../library/test.rst:1276 +msgid "" +"The *extra* argument can be a set of names that wouldn't otherwise be " +"automatically detected as \"public\", like objects without a proper " +"``__module__`` attribute. If provided, it will be added to the automatically" +" detected ones." +msgstr "" +"*extra* 参数可以是一个在其他情况下不会被自动检测为 \"public\" 的名称集合,例如没有适当 ``__module__`` 属性的对象。 " +"如果提供该参数,它将被添加到自动检测到的对象中。" + +#: ../../library/test.rst:1280 +msgid "" +"The *blacklist* argument can be a set of names that must not be treated as " +"part of the public API even though their names indicate otherwise." +msgstr "" + +#: ../../library/test.rst:1307 +msgid "" +"This function returns a context manager that will change the global " +":func:`sys.set_int_max_str_digits` setting for the duration of the context " +"to allow execution of test code that needs a different limit on the number " +"of digits when converting between an integer and string." +msgstr "" +"此函数返回一个将在上下文生效期间改变全局 :func:`sys.set_int_max_str_digits` " +"设置的上下文管理器以便允许执行当在整数和字符串之间进行转换时需要对位数有不同限制的测试代码。" + +#: ../../library/test.rst:1315 +msgid "The :mod:`test.support` module defines the following classes:" +msgstr ":mod:`test.support` 模块定义了以下的类:" + +#: ../../library/test.rst:1319 +msgid "" +"Instances are a context manager that raises :exc:`ResourceDenied` if the " +"specified exception type is raised. Any keyword arguments are treated as " +"attribute/value pairs to be compared against any exception raised within the" +" :keyword:`with` statement. Only if all pairs match properly against " +"attributes on the exception is :exc:`ResourceDenied` raised." +msgstr "" + +#: ../../library/test.rst:1328 +msgid "" +"Class used to temporarily set or unset environment variables. Instances can" +" be used as a context manager and have a complete dictionary interface for " +"querying/modifying the underlying ``os.environ``. After exit from the " +"context manager all changes to environment variables done through this " +"instance will be rolled back." +msgstr "" +"用于临时性地设置或取消设置环境变量的类。 其实例可被用作上下文管理器并具有完整的字典接口用来查询/修改下层的 ``os.environ``。 " +"在从上下文管理器退出之后所有通过此实例对环境变量进行的修改都将被回滚。" + +#: ../../library/test.rst:1334 +msgid "Added dictionary interface." +msgstr "增加了字典接口。" + +#: ../../library/test.rst:1339 +msgid "" +"Temporarily set the environment variable ``envvar`` to the value of " +"``value``." +msgstr "临时性地将环境变量 ``envvar`` 的值设为 ``value``。" + +#: ../../library/test.rst:1345 +msgid "Temporarily unset the environment variable ``envvar``." +msgstr "临时性地取消设置环境变量 ``envvar``。" + +#: ../../library/test.rst:1350 +msgid "" +"A context manager used to try to prevent crash dialog popups on tests that " +"are expected to crash a subprocess." +msgstr "一个用于在预期会使子进程崩溃的测试时尽量防止弹出崩溃对话框的上下文管理器。" + +#: ../../library/test.rst:1353 +msgid "" +"On Windows, it disables Windows Error Reporting dialogs using `SetErrorMode " +"`_." +msgstr "" +"在 Windows 上,它会使用 `SetErrorMode `_ 来禁用 Windows 错误报告对话框。" + +#: ../../library/test.rst:1356 +msgid "" +"On UNIX, :func:`resource.setrlimit` is used to set " +":attr:`resource.RLIMIT_CORE`'s soft limit to 0 to prevent coredump file " +"creation." +msgstr "" +"在 UNIX 上,会使用 :func:`resource.setrlimit` 来将 :attr:`resource.RLIMIT_CORE` " +"的软限制设为 0 以防止创建核心转储文件。" + +#: ../../library/test.rst:1360 +msgid "On both platforms, the old value is restored by :meth:`__exit__`." +msgstr "在这两个平台上,旧值都将被 :meth:`__exit__` 恢复。" + +#: ../../library/test.rst:1365 +msgid "" +"A context manager to force import to return a new module reference. This is" +" useful for testing module-level behaviors, such as the emission of a " +"DeprecationWarning on import. Example usage::" +msgstr "" + +#: ../../library/test.rst:1375 +msgid "A context manager to temporarily add directories to sys.path." +msgstr "" + +#: ../../library/test.rst:1377 +msgid "" +"This makes a copy of :data:`sys.path`, appends any directories given as " +"positional arguments, then reverts :data:`sys.path` to the copied settings " +"when the context ends." +msgstr "" +"这将创建 :data:`sys.path` 的一个副本,添加作为位置参数传入的任何目录,然后在上下文结束时将 :data:`sys.path` " +"还原到副本的设置。" + +#: ../../library/test.rst:1381 +msgid "" +"Note that *all* :data:`sys.path` modifications in the body of the context " +"manager, including replacement of the object, will be reverted at the end of" +" the block." +msgstr "请注意该上下文管理器代码块中 *所有* 对 :data:`sys.path` 的修改,包括对象的替换,都将在代码块结束时被还原。" + +#: ../../library/test.rst:1388 +msgid "" +"Class to save and restore signal handlers registered by the Python signal " +"handler." +msgstr "用于保存和恢复由 Python 句柄的所注册的信号处理器。" + +#: ../../library/test.rst:1396 +msgid "Try to match a single dict with the supplied arguments." +msgstr "尝试对单个字典与所提供的参数进行匹配。" + +#: ../../library/test.rst:1401 +msgid "Try to match a single stored value (*dv*) with a supplied value (*v*)." +msgstr "尝试对单个已存储值 (*dv*) 与所提供的值 (*v*) 进行匹配。" + +#: ../../library/test.rst:1406 +msgid "" +"Class used to record warnings for unit tests. See documentation of " +":func:`check_warnings` above for more details." +msgstr "用于为单元测试记录警告的类。 请参阅以上 :func:`check_warnings` 的文档来了解详情。" + +#: ../../library/test.rst:1414 +msgid "Run *test* and return the result." +msgstr "运行 *test* 并返回结果。" + +#: ../../library/test.rst:1419 +msgid "" +"Simple :term:`path-like object`. It implements the :meth:`__fspath__` " +"method which just returns the *path* argument. If *path* is an exception, " +"it will be raised in :meth:`!__fspath__`." +msgstr "" +"简单的 :term:`path-like object`。 它实现了 :meth:`__fspath__` 方法,该方法将返回 *path* 参数。 " +"如果 *path* 为一个异常,它将在 :meth:`!__fspath__` 中被引发。" + +#: ../../library/test.rst:1425 +msgid ":mod:`test.support.socket_helper` --- Utilities for socket tests" +msgstr ":mod:`test.support.socket_helper` --- 用于套接字测试的工具" + +#: ../../library/test.rst:1431 +msgid "" +"The :mod:`test.support.socket_helper` module provides support for socket " +"tests." +msgstr ":mod:`test.support.socket_helper` 模块提供了对套接字测试的支持。" + +#: ../../library/test.rst:1438 +msgid "Set to ``True`` if IPv6 is enabled on this host, ``False`` otherwise." +msgstr "设置为 ``True`` 如果主机打开IPv6, 否则 ``False`` ." + +#: ../../library/test.rst:1443 +msgid "" +"Returns an unused port that should be suitable for binding. This is " +"achieved by creating a temporary socket with the same family and type as the" +" ``sock`` parameter (default is :const:`~socket.AF_INET`, " +":const:`~socket.SOCK_STREAM`), and binding it to the specified host address " +"(defaults to ``0.0.0.0``) with the port set to 0, eliciting an unused " +"ephemeral port from the OS. The temporary socket is then closed and deleted," +" and the ephemeral port is returned." +msgstr "" +"返回一个应当适合绑定的未使用端口。 这是通过创建一个与 ``sock`` 形参相同协议族和类型的临时套接字来达成的 (默认为 " +":const:`~socket.AF_INET`, :const:`~socket.SOCK_STREAM`),并将其绑定到指定的主机地址 (默认为 " +"``0.0.0.0``) 并将端口设为 0,以从 OS 引出一个未使用的瞬时端口。 这个临时套接字随后将被关闭并删除,然后返回该瞬时端口。" + +#: ../../library/test.rst:1452 +msgid "" +"Either this method or :func:`bind_port` should be used for any tests where a" +" server socket needs to be bound to a particular port for the duration of " +"the test. Which one to use depends on whether the calling code is creating a" +" Python socket, or if an unused port needs to be provided in a constructor " +"or passed to an external program (i.e. the ``-accept`` argument to openssl's" +" s_server mode). Always prefer :func:`bind_port` over " +":func:`find_unused_port` where possible. Using a hard coded port is " +"discouraged since it can make multiple instances of the test impossible to " +"run simultaneously, which is a problem for buildbots." +msgstr "" +"这个方法或 :func:`bind_port` 应当被用于任何在测试期间需要绑定到特定端口的测试。 具体使用哪个取决于调用方代码是否会创建 Python" +" 套接字,或者是否需要在构造器中提供或向外部程序提供未使用的端口(例如传给 openssl 的 s_server 模式的 ``-accept`` " +"参数)。 在可能的情况下将总是优先使用 :func:`bind_port` 而非 :func:`find_unused_port`。 " +"不建议使用硬编码的端口因为将使测试的多个实例无法同时运行,这对 buildbot 来说是个问题。" + +#: ../../library/test.rst:1466 +msgid "" +"Bind the socket to a free port and return the port number. Relies on " +"ephemeral ports in order to ensure we are using an unbound port. This is " +"important as many tests may be running simultaneously, especially in a " +"buildbot environment. This method raises an exception if the " +"``sock.family`` is :const:`~socket.AF_INET` and ``sock.type`` is " +":const:`~socket.SOCK_STREAM`, and the socket has " +":const:`~socket.SO_REUSEADDR` or :const:`~socket.SO_REUSEPORT` set on it. " +"Tests should never set these socket options for TCP/IP sockets. The only " +"case for setting these options is testing multicasting via multiple UDP " +"sockets." +msgstr "" +"将套接字绑定到一个空闲端口并返回端口号。 这依赖于瞬时端口以确保我们能使用一个未绑定端口。 这很重要因为可能会有许多测试同时运行,特别是在 " +"buildbot 环境中。 如果 ``sock.family`` 为 :const:`~socket.AF_INET` 而 ``sock.type`` " +"为 :const:`~socket.SOCK_STREAM`,并且套接字上设置了 :const:`~socket.SO_REUSEADDR` 或 " +":const:`~socket.SO_REUSEPORT` 则此方法将引发异常。 测试绝不应该为 TCP/IP 套接字设置这些套接字选项。 " +"唯一需要设置这些选项的情况是通过多个 UDP 套接字来测试组播。" + +#: ../../library/test.rst:1477 +msgid "" +"Additionally, if the :const:`~socket.SO_EXCLUSIVEADDRUSE` socket option is " +"available (i.e. on Windows), it will be set on the socket. This will " +"prevent anyone else from binding to our host/port for the duration of the " +"test." +msgstr "" +"此外,如果 :const:`~socket.SO_EXCLUSIVEADDRUSE` 套接字选项是可用的(例如在 Windows " +"上),它将在套接字上被设置。 这将阻止其他任何人在测试期间绑定到我们的主机/端口。" + +#: ../../library/test.rst:1485 +msgid "" +"Bind a unix socket, raising :exc:`unittest.SkipTest` if " +":exc:`PermissionError` is raised." +msgstr "" +"绑定一个 unix 套接字,如果 :exc:`PermissionError` 被引发则会引发 :exc:`unittest.SkipTest`。" + +#: ../../library/test.rst:1491 +msgid "" +"A decorator for running tests that require a functional ``bind()`` for Unix " +"sockets." +msgstr "一个用于运行需要 Unix 套接字 ``bind()`` 功能的测试的装饰器。" + +#: ../../library/test.rst:1497 +msgid "" +"A context manager that raises :exc:`~test.support.ResourceDenied` when " +"various issues with the internet connection manifest themselves as " +"exceptions." +msgstr "" +"一个在互联网连接的各种问题以异常的形式表现出来时会引发 :exc:`~test.support.ResourceDenied` 的上下文管理器。" + +#: ../../library/test.rst:1503 +msgid "" +":mod:`test.support.script_helper` --- Utilities for the Python execution " +"tests" +msgstr ":mod:`test.support.script_helper` --- 用于 Python 执行测试工具" + +#: ../../library/test.rst:1509 +msgid "" +"The :mod:`test.support.script_helper` module provides support for Python's " +"script execution tests." +msgstr ":mod:`test.support.script_helper` 模块提供了对 Python 的脚本执行测试的支持。" + +#: ../../library/test.rst:1514 +msgid "" +"Return ``True`` if ``sys.executable interpreter`` requires environment " +"variables in order to be able to run at all." +msgstr "如果 ``sys.executable interpreter`` 需要环境变量才能运行则返回 ``True``。" + +#: ../../library/test.rst:1517 +msgid "" +"This is designed to be used with ``@unittest.skipIf()`` to annotate tests " +"that need to use an ``assert_python*()`` function to launch an isolated mode" +" (``-I``) or no environment mode (``-E``) sub-interpreter process." +msgstr "" +"这被设计用来配合 ``@unittest.skipIf()`` 以便标注需要使用to annotate tests that need to use " +"an ``assert_python*()`` 函数来启动隔离模式 (``-I``) 或无环境模式 (``-E``) 子解释器的测试。" + +#: ../../library/test.rst:1521 +msgid "" +"A normal build & test does not run into this situation but it can happen " +"when trying to run the standard library test suite from an interpreter that " +"doesn't have an obvious home with Python's current home finding logic." +msgstr "" +"正常的编译和测试运行不会进入这种状况但它在尝试从一个使用 Python 的当前家目录查找逻辑找不到明确的家目录的解释器运行标准库测试套件时有可能发生。" + +#: ../../library/test.rst:1525 +msgid "" +"Setting :envvar:`PYTHONHOME` is one way to get most of the testsuite to run " +"in that situation. :envvar:`PYTHONPATH` or :envvar:`PYTHONUSERSITE` are " +"other common environment variables that might impact whether or not the " +"interpreter can start." +msgstr "" +"设置 :envvar:`PYTHONHOME` 是一种能让大多数测试套件在这种情况下运行的办法。 :envvar:`PYTHONPATH` 或 " +":envvar:`PYTHONUSERSITE` 是另外两个可影响解释器是否能启动的常见环境变量。" + +#: ../../library/test.rst:1533 +msgid "" +"Set up the environment based on *env_vars* for running the interpreter in a " +"subprocess. The values can include ``__isolated``, ``__cleanenv``, " +"``__cwd``, and ``TERM``." +msgstr "" +"基于 *env_vars* 设置环境以便在子进程中运行解释器。 它的值可以包括 ``__isolated``, ``__cleanenv``, " +"``__cwd``, and ``TERM``。" + +#: ../../library/test.rst:1537 ../../library/test.rst:1553 +#: ../../library/test.rst:1565 +msgid "The function no longer strips whitespaces from *stderr*." +msgstr "此函数不会再从 *stderr* 去除空格符。" + +#: ../../library/test.rst:1543 +msgid "" +"Assert that running the interpreter with *args* and optional environment " +"variables *env_vars* succeeds (``rc == 0``) and return a ``(return code, " +"stdout, stderr)`` tuple." +msgstr "" +"断言附带 *args* 和可选的环境变量 *env_vars* 运行解释器会成功 (``rc == 0``) 并返回一个 ``(return code," +" stdout, stderr)`` 元组。" + +#: ../../library/test.rst:1547 +msgid "" +"If the ``__cleanenv`` keyword is set, *env_vars* is used as a fresh " +"environment." +msgstr "" + +#: ../../library/test.rst:1550 +msgid "" +"Python is started in isolated mode (command line option ``-I``), except if " +"the ``__isolated`` keyword is set to ``False``." +msgstr "" + +#: ../../library/test.rst:1559 +msgid "" +"Assert that running the interpreter with *args* and optional environment " +"variables *env_vars* fails (``rc != 0``) and return a ``(return code, " +"stdout, stderr)`` tuple." +msgstr "" +"断言附带 *args* 和可选的环境变量 *env_vars* 运行解释器会失败 (``rc != 0``) 并返回一个 ``(return code," +" stdout, stderr)`` 元组。" + +#: ../../library/test.rst:1563 +msgid "See :func:`assert_python_ok` for more options." +msgstr "更多选项请参阅 :func:`assert_python_ok`。" + +#: ../../library/test.rst:1571 +msgid "Run a Python subprocess with the given arguments." +msgstr "使用给定的参数运行一个 Python 子进程。" + +#: ../../library/test.rst:1573 +msgid "" +"*kw* is extra keyword args to pass to :func:`subprocess.Popen`. Returns a " +":class:`subprocess.Popen` object." +msgstr "" +"*kw* 是要传给 :func:`subprocess.Popen` 的额外关键字参数。 返回一个 :class:`subprocess.Popen` " +"对象。" + +#: ../../library/test.rst:1579 +msgid "" +"Run the given :class:`subprocess.Popen` process until completion and return " +"stdout." +msgstr "运行给定的 :class:`subprocess.Popen` 进程直至完成并返回 stdout。" + +#: ../../library/test.rst:1585 +msgid "" +"Create script containing *source* in path *script_dir* and " +"*script_basename*. If *omit_suffix* is ``False``, append ``.py`` to the " +"name. Return the full script path." +msgstr "" +"在路径 *script_dir* 和 *script_basename* 中创建包含 *source* 的脚本。 如果 *omit_suffix* 为 " +"``False``,则为名称添加 ``.py``。 返回完整的脚本路径。" + +#: ../../library/test.rst:1592 +msgid "" +"Create zip file at *zip_dir* and *zip_basename* with extension ``zip`` which" +" contains the files in *script_name*. *name_in_zip* is the archive name. " +"Return a tuple containing ``(full path, full path of archive name)``." +msgstr "" +"使用 *zip_dir* 和 *zip_basename* 创建扩展名为 ``zip`` 的 zip 文件,其中包含 *script_name* " +"中的文件。 *name_in_zip* 为归档名。 返回一个包含 ``(full path, full path of archive name)`` " +"的元组。" + +#: ../../library/test.rst:1599 +msgid "" +"Create a directory named *pkg_dir* containing an ``__init__`` file with " +"*init_source* as its contents." +msgstr "创建一个名为 *pkg_dir* 的目录,其中包含一个 ``__init__`` 文件并以 *init_source* 作为其内容。" + +#: ../../library/test.rst:1606 +msgid "" +"Create a zip package directory with a path of *zip_dir* and *zip_basename* " +"containing an empty ``__init__`` file and a file *script_basename* " +"containing the *source*. If *compiled* is ``True``, both source files will " +"be compiled and added to the zip package. Return a tuple of the full zip " +"path and the archive name for the zip file." +msgstr "" +"使用 *zip_dir* 和 *zip_basename* 创建一个 zip 包目录,其中包含一个空的 ``__init__`` 文件和一个包含 " +"*source* 的文件 *script_basename*。 如果 *compiled* 为 ``True``,则两个源文件将被编译并添加到 zip " +"包中。 返回一个以完整 zip 路径和 zip 文件归档名为元素的元组。" + +#: ../../library/test.rst:1614 +msgid "" +":mod:`test.support.bytecode_helper` --- Support tools for testing correct " +"bytecode generation" +msgstr ":mod:`test.support.bytecode_helper` --- 用于测试正确字节码生成的支持工具" + +#: ../../library/test.rst:1619 +msgid "" +"The :mod:`test.support.bytecode_helper` module provides support for testing " +"and inspecting bytecode generation." +msgstr ":mod:`test.support.bytecode_helper` 模块提供了对测试和检查字节码生成的支持。" + +#: ../../library/test.rst:1624 +msgid "The module defines the following class:" +msgstr " 此模块定义了以下类:" + +#: ../../library/test.rst:1628 +msgid "This class has custom assertion methods for inspecting bytecode." +msgstr "这个类具有用于检查字节码的自定义断言。" + +#: ../../library/test.rst:1632 +msgid "Return the disassembly of *co* as string." +msgstr "以字符串形式返回 *co* 的汇编码。" + +#: ../../library/test.rst:1637 +msgid "" +"Return instr if *opname* is found, otherwise throws :exc:`AssertionError`." +msgstr "如果找到 *opname* 则返回 instr,否则抛出 :exc:`AssertionError`。" + +#: ../../library/test.rst:1642 +msgid "Throws :exc:`AssertionError` if *opname* is found." +msgstr "如果找到 *opname* 则抛出 :exc:`AssertionError`。" diff --git a/library/text.po b/library/text.po new file mode 100644 index 000000000..212602c59 --- /dev/null +++ b/library/text.po @@ -0,0 +1,42 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) 2001-2022, Python Software Foundation +# This file is distributed under the same license as the Python package. +# FIRST AUTHOR , YEAR. +# +# Translators: +# Alpha Du , 2019 +# Freesand Leo , 2019 +# +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: Python 3.9\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2022-11-04 14:34+0000\n" +"PO-Revision-Date: 2017-02-16 23:30+0000\n" +"Last-Translator: Freesand Leo , 2019\n" +"Language-Team: Chinese (China) (https://www.transifex.com/python-doc/teams/5390/zh_CN/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: zh_CN\n" +"Plural-Forms: nplurals=1; plural=0;\n" + +#: ../../library/text.rst:6 +msgid "Text Processing Services" +msgstr "文本处理服务" + +#: ../../library/text.rst:8 +msgid "" +"The modules described in this chapter provide a wide range of string " +"manipulation operations and other text processing services." +msgstr "本章介绍的模块提供了广泛的字符串操作和其他文本处理服务。" + +#: ../../library/text.rst:11 +msgid "" +"The :mod:`codecs` module described under :ref:`binaryservices` is also " +"highly relevant to text processing. In addition, see the documentation for " +"Python's built-in string type in :ref:`textseq`." +msgstr "" +"在 :ref:`binaryservices` 之下描述的 :mod:`codecs` 模块也与文本处理高度相关。 此外也请参阅 Python " +"内置字符串类型的文档 :ref:`textseq`。" diff --git a/library/textwrap.po b/library/textwrap.po new file mode 100644 index 000000000..cc76b157f --- /dev/null +++ b/library/textwrap.po @@ -0,0 +1,375 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) 2001-2022, Python Software Foundation +# This file is distributed under the same license as the Python package. +# FIRST AUTHOR , YEAR. +# +# Translators: +# ww song , 2018 +# jaystone776 <1732865113@qq.com>, 2020 +# Freesand Leo , 2021 +# +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: Python 3.9\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2022-11-04 14:34+0000\n" +"PO-Revision-Date: 2017-02-16 23:30+0000\n" +"Last-Translator: Freesand Leo , 2021\n" +"Language-Team: Chinese (China) (https://www.transifex.com/python-doc/teams/5390/zh_CN/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: zh_CN\n" +"Plural-Forms: nplurals=1; plural=0;\n" + +#: ../../library/textwrap.rst:2 +msgid ":mod:`textwrap` --- Text wrapping and filling" +msgstr ":mod:`textwrap` --- 文本自动换行与填充" + +#: ../../library/textwrap.rst:10 +msgid "**Source code:** :source:`Lib/textwrap.py`" +msgstr "**源代码:** :source:`Lib/textwrap.py`" + +#: ../../library/textwrap.rst:14 +msgid "" +"The :mod:`textwrap` module provides some convenience functions, as well as " +":class:`TextWrapper`, the class that does all the work. If you're just " +"wrapping or filling one or two text strings, the convenience functions " +"should be good enough; otherwise, you should use an instance of " +":class:`TextWrapper` for efficiency." +msgstr "" +":mod:`textwrap` 模块提供了一些快捷函数,以及可以完成所有工作的类 :class:`TextWrapper`。 " +"如果你只是要对一两个文本字符串进行自动换行或填充,快捷函数应该就够用了;否则的话,你应该使用 :class:`TextWrapper` " +"的实例来提高效率。" + +#: ../../library/textwrap.rst:27 +msgid "" +"Wraps the single paragraph in *text* (a string) so every line is at most " +"*width* characters long. Returns a list of output lines, without final " +"newlines." +msgstr "对 *text* (字符串) 中的单独段落自动换行以使每行长度最多为 *width* 个字符。 返回由输出行组成的列表,行尾不带换行符。" + +#: ../../library/textwrap.rst:31 +msgid "" +"Optional keyword arguments correspond to the instance attributes of " +":class:`TextWrapper`, documented below." +msgstr "可选的关键字参数对应于 :class:`TextWrapper` 的实例属性,具体文档见下。" + +#: ../../library/textwrap.rst:34 +msgid "" +"See the :meth:`TextWrapper.wrap` method for additional details on how " +":func:`wrap` behaves." +msgstr "请参阅 :meth:`TextWrapper.wrap` 方法了解有关 :func:`wrap` 行为的详细信息。" + +#: ../../library/textwrap.rst:45 +msgid "" +"Wraps the single paragraph in *text*, and returns a single string containing" +" the wrapped paragraph. :func:`fill` is shorthand for ::" +msgstr "对 *text* 中的单独段落自动换行,并返回一个包含被自动换行段落的单独字符串。 :func:`fill` 是以下语句的快捷方式 ::" + +#: ../../library/textwrap.rst:50 +msgid "" +"In particular, :func:`fill` accepts exactly the same keyword arguments as " +":func:`wrap`." +msgstr "特别要说明的是,:func:`fill` 接受与 :func:`wrap` 完全相同的关键字参数。" + +#: ../../library/textwrap.rst:58 +msgid "Collapse and truncate the given *text* to fit in the given *width*." +msgstr "折叠并截短给定的 *text* 以符合给定的 *width*。" + +#: ../../library/textwrap.rst:60 +msgid "" +"First the whitespace in *text* is collapsed (all whitespace is replaced by " +"single spaces). If the result fits in the *width*, it is returned. " +"Otherwise, enough words are dropped from the end so that the remaining words" +" plus the :attr:`placeholder` fit within :attr:`width`::" +msgstr "" +"首先,将折叠 *text* 中的空格(所有连续空格替换为单个空格)。 如果结果能适合 *width* 则将其返回。 " +"否则将丢弃足够数量的末尾单词以使得剩余单词加 :attr:`placeholder` 能适合 :attr:`width`:" + +#: ../../library/textwrap.rst:72 +msgid "" +"Optional keyword arguments correspond to the instance attributes of " +":class:`TextWrapper`, documented below. Note that the whitespace is " +"collapsed before the text is passed to the :class:`TextWrapper` :meth:`fill`" +" function, so changing the value of :attr:`.tabsize`, :attr:`.expand_tabs`, " +":attr:`.drop_whitespace`, and :attr:`.replace_whitespace` will have no " +"effect." +msgstr "" +"可选的关键字参数对应于 :class:`TextWrapper` 的实际属性,具体见下文。 请注意文本在被传入 :class:`TextWrapper`" +" 的 :meth:`fill` 函数之前会被折叠,因此改变 :attr:`.tabsize`, :attr:`.expand_tabs`, " +":attr:`.drop_whitespace` 和 :attr:`.replace_whitespace` 的值将没有任何效果。" + +#: ../../library/textwrap.rst:82 +msgid "Remove any common leading whitespace from every line in *text*." +msgstr "移除 *text* 中每一行的任何相同前缀空白符。" + +#: ../../library/textwrap.rst:84 +msgid "" +"This can be used to make triple-quoted strings line up with the left edge of" +" the display, while still presenting them in the source code in indented " +"form." +msgstr "这可以用来清除三重引号字符串行左侧空格,而仍然在源码中显示为缩进格式。" + +#: ../../library/textwrap.rst:87 +msgid "" +"Note that tabs and spaces are both treated as whitespace, but they are not " +"equal: the lines ``\" hello\"`` and ``\"\\thello\"`` are considered to have" +" no common leading whitespace." +msgstr "" +"请注意制表符和空格符都被视为是空白符,但它们并不相等:以下两行 ``\" hello\"`` 和 ``\"\\thello\"`` " +"不会被视为具有相同的前缀空白符。" + +#: ../../library/textwrap.rst:91 +msgid "" +"Lines containing only whitespace are ignored in the input and normalized to " +"a single newline character in the output." +msgstr "只包含空白符的行会在输入时被忽略并在输出时被标准化为单个换行符。" + +#: ../../library/textwrap.rst:94 ../../library/textwrap.rst:115 +msgid "For example::" +msgstr "例如::" + +#: ../../library/textwrap.rst:108 +msgid "Add *prefix* to the beginning of selected lines in *text*." +msgstr "将 *prefix* 添加到 *text* 中选定行的开头。" + +#: ../../library/textwrap.rst:110 +msgid "Lines are separated by calling ``text.splitlines(True)``." +msgstr "通过调用 ``text.splitlines(True)`` 来对行进行拆分。" + +#: ../../library/textwrap.rst:112 +msgid "" +"By default, *prefix* is added to all lines that do not consist solely of " +"whitespace (including any line endings)." +msgstr "默认情况下,*prefix* 会被添加到所有不是只由空白符(包括任何行结束符)组成的行。" + +#: ../../library/textwrap.rst:121 +msgid "" +"The optional *predicate* argument can be used to control which lines are " +"indented. For example, it is easy to add *prefix* to even empty and " +"whitespace-only lines::" +msgstr "可选的 *predicate* 参数可用来控制哪些行要缩进。 例如,可以很容易地为空行或只有空白符的行添加 *prefix*::" + +#: ../../library/textwrap.rst:134 +msgid "" +":func:`wrap`, :func:`fill` and :func:`shorten` work by creating a " +":class:`TextWrapper` instance and calling a single method on it. That " +"instance is not reused, so for applications that process many text strings " +"using :func:`wrap` and/or :func:`fill`, it may be more efficient to create " +"your own :class:`TextWrapper` object." +msgstr "" +":func:`wrap`, :func:`fill` 和 :func:`shorten` 的作用方式为创建一个 :class:`TextWrapper`" +" 实例并在其上调用单个方法。 该实例不会被重用,因此对于要使用 :func:`wrap` 和/或 :func:`fill` " +"来处理许多文本字符串的应用来说,创建你自己的 :class:`TextWrapper` 对象可能会更有效率。" + +#: ../../library/textwrap.rst:140 +msgid "" +"Text is preferably wrapped on whitespaces and right after the hyphens in " +"hyphenated words; only then will long words be broken if necessary, unless " +":attr:`TextWrapper.break_long_words` is set to false." +msgstr "" +"文本最好在空白符位置自动换行,包括带连字符单词的连字符之后;长单词仅在必要时会被拆分,除非 " +":attr:`TextWrapper.break_long_words` 被设为假值。" + +#: ../../library/textwrap.rst:146 +msgid "" +"The :class:`TextWrapper` constructor accepts a number of optional keyword " +"arguments. Each keyword argument corresponds to an instance attribute, so " +"for example ::" +msgstr ":class:`TextWrapper` 构造器接受多个可选的关键字参数。 每个关键字参数对应一个实例属性,比如说 ::" + +#: ../../library/textwrap.rst:152 +msgid "is the same as ::" +msgstr "相当于:" + +#: ../../library/textwrap.rst:157 +msgid "" +"You can re-use the same :class:`TextWrapper` object many times, and you can " +"change any of its options through direct assignment to instance attributes " +"between uses." +msgstr "你可以多次重用相同的 :class:`TextWrapper` 对象,并且你也可以在使用期间通过直接向实例属性赋值来修改它的任何选项。" + +#: ../../library/textwrap.rst:161 +msgid "" +"The :class:`TextWrapper` instance attributes (and keyword arguments to the " +"constructor) are as follows:" +msgstr ":class:`TextWrapper` 的实例属性(以及构造器的关键字参数)如下所示:" + +#: ../../library/textwrap.rst:167 +msgid "" +"(default: ``70``) The maximum length of wrapped lines. As long as there are" +" no individual words in the input text longer than :attr:`width`, " +":class:`TextWrapper` guarantees that no output line will be longer than " +":attr:`width` characters." +msgstr "" +"(默认: ``70``) 自动换行的最大行长度。 只要输入文本中没有长于 :attr:`width` " +"的单个单词,:class:`TextWrapper` 就能保证没有长于 :attr:`width` 个字符的输出行。" + +#: ../../library/textwrap.rst:175 +msgid "" +"(default: ``True``) If true, then all tab characters in *text* will be " +"expanded to spaces using the :meth:`expandtabs` method of *text*." +msgstr "" +"(默认: ``True``) 如果为真值,则 *text* 中所有的制表符将使用 *text* 的 :meth:`expandtabs` " +"方法扩展为空格符。" + +#: ../../library/textwrap.rst:181 +msgid "" +"(default: ``8``) If :attr:`expand_tabs` is true, then all tab characters in " +"*text* will be expanded to zero or more spaces, depending on the current " +"column and the given tab size." +msgstr "" +"(默认: ``8``) 如果 :attr:`expand_tabs` 为真值,则 *text* " +"中所有的制表符将扩展为零个或多个空格,具体取决于当前列位置和给定的制表宽度。" + +#: ../../library/textwrap.rst:190 +msgid "" +"(default: ``True``) If true, after tab expansion but before wrapping, the " +":meth:`wrap` method will replace each whitespace character with a single " +"space. The whitespace characters replaced are as follows: tab, newline, " +"vertical tab, formfeed, and carriage return (``'\\t\\n\\v\\f\\r'``)." +msgstr "" +"(default: ``True``) 如果为真值,在制表符扩展之后、自动换行之前,:meth:`wrap` 方法将把每个空白字符都替换为单个空格。 " +"会被替换的空白字符如下:制表,换行,垂直制表,进纸和回车 (``'\\t\\n\\v\\f\\r'``)。" + +#: ../../library/textwrap.rst:198 +msgid "" +"If :attr:`expand_tabs` is false and :attr:`replace_whitespace` is true, each" +" tab character will be replaced by a single space, which is *not* the same " +"as tab expansion." +msgstr "" +"如果 :attr:`expand_tabs` 为假值且 :attr:`replace_whitespace` " +"为真值,每个制表符将被替换为单个空格,这与制表符扩展是 *不* 一样的。" + +#: ../../library/textwrap.rst:204 +msgid "" +"If :attr:`replace_whitespace` is false, newlines may appear in the middle of" +" a line and cause strange output. For this reason, text should be split into" +" paragraphs (using :meth:`str.splitlines` or similar) which are wrapped " +"separately." +msgstr "" +"如果 :attr:`replace_whitespace` 为假值,在一行的中间有可能出现换行符并导致怪异的输出。 因此,文本应当(使用 " +":meth:`str.splitlines` 或类似方法)拆分为段落并分别进行自动换行。" + +#: ../../library/textwrap.rst:212 +msgid "" +"(default: ``True``) If true, whitespace at the beginning and ending of every" +" line (after wrapping but before indenting) is dropped. Whitespace at the " +"beginning of the paragraph, however, is not dropped if non-whitespace " +"follows it. If whitespace being dropped takes up an entire line, the whole " +"line is dropped." +msgstr "" +"(默认: ``True``) 如果为真值,每一行开头和末尾的空白字符(在包装之后、缩进之前)会被丢弃。 " +"但是段落开头的空白字符如果后面不带任何非空白字符则不会被丢弃。 如果被丢弃的空白字符占据了一个整行,则该整行将被丢弃。" + +#: ../../library/textwrap.rst:221 +msgid "" +"(default: ``''``) String that will be prepended to the first line of wrapped" +" output. Counts towards the length of the first line. The empty string is " +"not indented." +msgstr "(默认: ``''``) 将被添加到被自动换行输出内容的第一行的字符串。 其长度会被计入第一行的长度。 空字符串不会被缩进。" + +#: ../../library/textwrap.rst:228 +msgid "" +"(default: ``''``) String that will be prepended to all lines of wrapped " +"output except the first. Counts towards the length of each line except the " +"first." +msgstr "(default: ``''``) 将被添加到被自动换行输出内容除第一行外的所有行的字符串。 其长度会被计入除行一行外的所有行的长度。" + +#: ../../library/textwrap.rst:235 +msgid "" +"(default: ``False``) If true, :class:`TextWrapper` attempts to detect " +"sentence endings and ensure that sentences are always separated by exactly " +"two spaces. This is generally desired for text in a monospaced font. " +"However, the sentence detection algorithm is imperfect: it assumes that a " +"sentence ending consists of a lowercase letter followed by one of ``'.'``, " +"``'!'``, or ``'?'``, possibly followed by one of ``'\"'`` or ``\"'\"``, " +"followed by a space. One problem with this is algorithm is that it is " +"unable to detect the difference between \"Dr.\" in ::" +msgstr "" +"(默认: ``False``) 如果为真值,:class:`TextWrapper` 将尝试检测句子结尾并确保句子间总是以恰好两个空格符分隔。 " +"对于使用等宽字体的文本来说通常都需要这样。 但是,句子检测算法并不完美:它假定句子结尾是一个小写字母加字符 ``'.'``, ``'!'`` 或 " +"``'?'`` 中的一个,并可能带有字符 ``'\"'`` 或 ``\"'\"``,最后以一个空格结束。 此算法的问题之一是它无法区分以下文本中的 " +"\"Dr.\" ::" + +#: ../../library/textwrap.rst:246 +msgid "and \"Spot.\" in ::" +msgstr "和以下文本中的 \"Spot.\" ::" + +#: ../../library/textwrap.rst:250 +msgid ":attr:`fix_sentence_endings` is false by default." +msgstr ":attr:`fix_sentence_endings` 默认为假值。" + +#: ../../library/textwrap.rst:252 +msgid "" +"Since the sentence detection algorithm relies on ``string.lowercase`` for " +"the definition of \"lowercase letter\", and a convention of using two spaces" +" after a period to separate sentences on the same line, it is specific to " +"English-language texts." +msgstr "" +"由于句子检测算法依赖于 ``string.lowercase`` " +"来确定“小写字母”,以及约定在句点后使用两个空格来分隔处于同一行的句子,因此只适用于英语文本。" + +#: ../../library/textwrap.rst:260 +msgid "" +"(default: ``True``) If true, then words longer than :attr:`width` will be " +"broken in order to ensure that no lines are longer than :attr:`width`. If " +"it is false, long words will not be broken, and some lines may be longer " +"than :attr:`width`. (Long words will be put on a line by themselves, in " +"order to minimize the amount by which :attr:`width` is exceeded.)" +msgstr "" +"(默认: ``True``) 如果为真值,则长度超过 :attr:`width` 的单词将被分开以保证行的长度不会超过 :attr:`width`。 " +"如果为假值,超长单词不会被分开,因而某些行的长度可能会超过 :attr:`width`。 (超长单词将被单独作为一行,以尽量减少超出 " +":attr:`width` 的情况。)" + +#: ../../library/textwrap.rst:269 +msgid "" +"(default: ``True``) If true, wrapping will occur preferably on whitespaces " +"and right after hyphens in compound words, as it is customary in English. If" +" false, only whitespaces will be considered as potentially good places for " +"line breaks, but you need to set :attr:`break_long_words` to false if you " +"want truly insecable words. Default behaviour in previous versions was to " +"always allow breaking hyphenated words." +msgstr "" +"(默认: ``True``) 如果为真值,将根据英语的惯例首选在空白符和复合词的连字符之后自动换行。 " +"如果为假值,则只有空白符会被视为合适的潜在断行位置,但如果你确实不希望出现分开的单词则你必须将 :attr:`break_long_words` " +"设为假值。 之前版本的默认行为总是允许分开带有连字符的单词。" + +#: ../../library/textwrap.rst:279 +msgid "" +"(default: ``None``) If not ``None``, then the output will contain at most " +"*max_lines* lines, with *placeholder* appearing at the end of the output." +msgstr "" +"(默认: ``None``) 如果不为 ``None``,则输出内容将最多包含 *max_lines* 行,并使 *placeholder* " +"出现在输出内容的末尾。" + +#: ../../library/textwrap.rst:289 +msgid "" +"(default: ``' [...]'``) String that will appear at the end of the output " +"text if it has been truncated." +msgstr "(默认: ``' [...]'``) 该文本将在输出文本被截短时出现在文本末尾。" + +#: ../../library/textwrap.rst:295 +msgid "" +":class:`TextWrapper` also provides some public methods, analogous to the " +"module-level convenience functions:" +msgstr ":class:`TextWrapper` 还提供了一些公有方法,类似于模块层级的便捷函数:" + +#: ../../library/textwrap.rst:300 +msgid "" +"Wraps the single paragraph in *text* (a string) so every line is at most " +":attr:`width` characters long. All wrapping options are taken from instance" +" attributes of the :class:`TextWrapper` instance. Returns a list of output " +"lines, without final newlines. If the wrapped output has no content, the " +"returned list is empty." +msgstr "" +"对 *text* (字符串) 中的单独段落自动换行以使每行长度最多为 :attr:`width` 个字符。 所有自动换行选项均获取自 " +":class:`TextWrapper` 实例的实例属性。 返回由输出行组成的列表,行尾不带换行符。 如果自动换行输出结果没有任何内容,则返回空列表。" + +#: ../../library/textwrap.rst:309 +msgid "" +"Wraps the single paragraph in *text*, and returns a single string containing" +" the wrapped paragraph." +msgstr "对 *text* 中的单独段落自动换行并返回包含被自动换行段落的单独字符串。" diff --git a/library/threading.po b/library/threading.po new file mode 100644 index 000000000..02331f301 --- /dev/null +++ b/library/threading.po @@ -0,0 +1,1548 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) 2001-2025, Python Software Foundation +# This file is distributed under the same license as the Python package. +# FIRST AUTHOR , YEAR. +# +# Translators: +# TX Lee , 2019 +# walkinrain , 2019 +# 叶浚安 , 2019 +# ppcfish , 2019 +# kevin wong , 2020 +# Freesand Leo , 2024 +# Rafael Fontenelle , 2025 +# +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: Python 3.9\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2025-02-07 16:40+0000\n" +"PO-Revision-Date: 2017-02-16 23:30+0000\n" +"Last-Translator: Rafael Fontenelle , 2025\n" +"Language-Team: Chinese (China) (https://app.transifex.com/python-doc/teams/5390/zh_CN/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: zh_CN\n" +"Plural-Forms: nplurals=1; plural=0;\n" + +#: ../../library/threading.rst:2 +msgid ":mod:`threading` --- Thread-based parallelism" +msgstr ":mod:`threading` --- 基于线程的并行" + +#: ../../library/threading.rst:7 +msgid "**Source code:** :source:`Lib/threading.py`" +msgstr "**源代码:** :source:`Lib/threading.py`" + +#: ../../library/threading.rst:11 +msgid "" +"This module constructs higher-level threading interfaces on top of the lower" +" level :mod:`_thread` module. See also the :mod:`queue` module." +msgstr "这个模块在较低级的模块 :mod:`_thread` 基础上建立较高级的线程接口。参见: :mod:`queue` 模块。" + +#: ../../library/threading.rst:14 +msgid "This module used to be optional, it is now always available." +msgstr "这个模块曾经为可选项,但现在总是可用。" + +#: ../../library/threading.rst:19 +msgid "" +"While they are not listed below, the ``camelCase`` names used for some " +"methods and functions in this module in the Python 2.x series are still " +"supported by this module." +msgstr "虽然他们没有在下面列出,这个模块仍然支持Python 2.x系列的这个模块下以 ``camelCase`` (驼峰法)命名的方法和函数。" + +#: ../../library/threading.rst:26 +msgid "" +"In CPython, due to the :term:`Global Interpreter Lock `, only one thread can execute Python code at once (even though certain" +" performance-oriented libraries might overcome this limitation). If you want" +" your application to make better use of the computational resources of " +"multi-core machines, you are advised to use :mod:`multiprocessing` or " +":class:`concurrent.futures.ProcessPoolExecutor`. However, threading is still" +" an appropriate model if you want to run multiple I/O-bound tasks " +"simultaneously." +msgstr "" +"在 CPython 中,由于存在 :term:`全局解释器锁 `,同一时刻只有一个线程可以执行 " +"Python 代码(虽然某些性能导向的库可能会去除此限制)。 如果你想让你的应用更好地利用多核心计算机的计算资源,推荐你使用 " +":mod:`multiprocessing` 或 :class:`concurrent.futures.ProcessPoolExecutor`。 " +"但是,如果你想要同时运行多个 I/O 密集型任务,则多线程仍然是一个合适的模型。" + +#: ../../library/threading.rst:37 +msgid "This module defines the following functions:" +msgstr "这个模块定义了以下函数:" + +#: ../../library/threading.rst:42 +msgid "" +"Return the number of :class:`Thread` objects currently alive. The returned " +"count is equal to the length of the list returned by :func:`.enumerate`." +msgstr "返回当前存活的 :class:`Thread` 对象的数量。 返回值与 :func:`.enumerate` 所返回的列表长度一致。" + +#: ../../library/threading.rst:48 +msgid "" +"Return the current :class:`Thread` object, corresponding to the caller's " +"thread of control. If the caller's thread of control was not created " +"through the :mod:`threading` module, a dummy thread object with limited " +"functionality is returned." +msgstr "" +"返回当前对应调用者的控制线程的 :class:`Thread` 对象。如果调用者的控制线程不是利用 :mod:`threading` " +"创建,会返回一个功能受限的虚拟线程对象。" + +#: ../../library/threading.rst:56 +msgid "Handle uncaught exception raised by :func:`Thread.run`." +msgstr "处理由 :func:`Thread.run` 引发的未捕获异常。" + +#: ../../library/threading.rst:58 +msgid "The *args* argument has the following attributes:" +msgstr "*args* 参数具有以下属性:" + +#: ../../library/threading.rst:60 +msgid "*exc_type*: Exception type." +msgstr "*exc_type*: 异常类型" + +#: ../../library/threading.rst:61 +msgid "*exc_value*: Exception value, can be ``None``." +msgstr "*exc_value*: 异常值,可以是 ``None``." + +#: ../../library/threading.rst:62 +msgid "*exc_traceback*: Exception traceback, can be ``None``." +msgstr "*exc_traceback*: 异常回溯,可以是 ``None``." + +#: ../../library/threading.rst:63 +msgid "*thread*: Thread which raised the exception, can be ``None``." +msgstr "*thread*: 引发异常的线程,可以为 ``None``。" + +#: ../../library/threading.rst:65 +msgid "" +"If *exc_type* is :exc:`SystemExit`, the exception is silently ignored. " +"Otherwise, the exception is printed out on :data:`sys.stderr`." +msgstr "" +"如果 *exc_type* 为 :exc:`SystemExit`,则异常会被静默地忽略。 在其他情况下,异常将被打印到 " +":data:`sys.stderr`。" + +#: ../../library/threading.rst:68 +msgid "" +"If this function raises an exception, :func:`sys.excepthook` is called to " +"handle it." +msgstr "如果此函数引发了异常,则会调用 :func:`sys.excepthook` 来处理它。" + +#: ../../library/threading.rst:71 +msgid "" +":func:`threading.excepthook` can be overridden to control how uncaught " +"exceptions raised by :func:`Thread.run` are handled." +msgstr "" +":func:`threading.excepthook` 可以被重载以控制由 :func:`Thread.run` 引发的未捕获异常的处理方式。" + +#: ../../library/threading.rst:74 +msgid "" +"Storing *exc_value* using a custom hook can create a reference cycle. It " +"should be cleared explicitly to break the reference cycle when the exception" +" is no longer needed." +msgstr "使用定制钩子存放 *exc_value* 可能会创建引用循环。 它应当在不再需要异常时被显式地清空以打破引用循环。" + +#: ../../library/threading.rst:78 +msgid "" +"Storing *thread* using a custom hook can resurrect it if it is set to an " +"object which is being finalized. Avoid storing *thread* after the custom " +"hook completes to avoid resurrecting objects." +msgstr "" +"如果一个对象正在被销毁,那么使用自定义的钩子储存 *thread* 可能会将其复活。请在自定义钩子生效后避免储存 *thread*,以避免对象的复活。" + +#: ../../library/threading.rst:83 +msgid ":func:`sys.excepthook` handles uncaught exceptions." +msgstr ":func:`sys.excepthook` 处理未捕获的异常。" + +#: ../../library/threading.rst:90 +msgid "" +"Return the 'thread identifier' of the current thread. This is a nonzero " +"integer. Its value has no direct meaning; it is intended as a magic cookie " +"to be used e.g. to index a dictionary of thread-specific data. Thread " +"identifiers may be recycled when a thread exits and another thread is " +"created." +msgstr "" +"返回当前线程的 “线程标识符”。它是一个非零的整数。它的值没有直接含义,主要是用作 magic " +"cookie,比如作为含有线程相关数据的字典的索引。线程标识符可能会在线程退出,新线程创建时被复用。" + +#: ../../library/threading.rst:101 +msgid "" +"Return the native integral Thread ID of the current thread assigned by the " +"kernel. This is a non-negative integer. Its value may be used to uniquely " +"identify this particular thread system-wide (until the thread terminates, " +"after which the value may be recycled by the OS)." +msgstr "" +"返回内核分配给当前线程的原生集成线程 ID。 这是一个非负整数。 它的值可被用来在整个系统中唯一地标识这个特定线程(直到线程终结,在那之后该值可能会被 " +"OS 回收再利用)。" + +#: ../../library/threading.rst:107 +msgid "" +":ref:`Availability `: Windows, FreeBSD, Linux, macOS, OpenBSD," +" NetBSD, AIX." +msgstr "" +":ref:`可用性 `: Windows, FreeBSD, Linux, macOS, OpenBSD, NetBSD, " +"AIX。" + +#: ../../library/threading.rst:113 +msgid "" +"Return a list of all :class:`Thread` objects currently active. The list " +"includes daemonic threads and dummy thread objects created by " +":func:`current_thread`. It excludes terminated threads and threads that " +"have not yet been started. However, the main thread is always part of the " +"result, even when terminated." +msgstr "" +"返回当前所有存活的 :class:`Thread` 对象的列表。 该列表包括守护线程以及 :func:`current_thread` 创建的空线程。 " +"它不包括已终结的和尚未开始的线程。 但是,主线程将总是结果的一部分,即使是在已终结的时候。" + +#: ../../library/threading.rst:122 +msgid "" +"Return the main :class:`Thread` object. In normal conditions, the main " +"thread is the thread from which the Python interpreter was started." +msgstr "返回主 :class:`Thread` 对象。一般情况下,主线程是Python解释器开始时创建的线程。" + +#: ../../library/threading.rst:133 +msgid "" +"Set a trace function for all threads started from the :mod:`threading` " +"module. The *func* will be passed to :func:`sys.settrace` for each thread, " +"before its :meth:`~Thread.run` method is called." +msgstr "" +"为所有 :mod:`threading` 模块开始的线程设置追踪函数。在每个线程的 :meth:`~Thread.run` 方法被调用前,*func* " +"会被传递给 :func:`sys.settrace` 。" + +#: ../../library/threading.rst:142 +msgid "" +"Set a profile function for all threads started from the :mod:`threading` " +"module. The *func* will be passed to :func:`sys.setprofile` for each " +"thread, before its :meth:`~Thread.run` method is called." +msgstr "" +"为所有 :mod:`threading` 模块开始的线程设置性能测试函数。在每个线程的 :meth:`~Thread.run` " +"方法被调用前,*func* 会被传递给 :func:`sys.setprofile` 。" + +#: ../../library/threading.rst:149 +msgid "" +"Return the thread stack size used when creating new threads. The optional " +"*size* argument specifies the stack size to be used for subsequently created" +" threads, and must be 0 (use platform or configured default) or a positive " +"integer value of at least 32,768 (32 KiB). If *size* is not specified, 0 is " +"used. If changing the thread stack size is unsupported, a " +":exc:`RuntimeError` is raised. If the specified stack size is invalid, a " +":exc:`ValueError` is raised and the stack size is unmodified. 32 KiB is " +"currently the minimum supported stack size value to guarantee sufficient " +"stack space for the interpreter itself. Note that some platforms may have " +"particular restrictions on values for the stack size, such as requiring a " +"minimum stack size > 32 KiB or requiring allocation in multiples of the " +"system memory page size - platform documentation should be referred to for " +"more information (4 KiB pages are common; using multiples of 4096 for the " +"stack size is the suggested approach in the absence of more specific " +"information)." +msgstr "" +"返回创建线程时使用的堆栈大小。可选参数 *size* " +"指定之后新建的线程的堆栈大小,而且一定要是0(根据平台或者默认配置)或者最小是32,768(32KiB)的一个正整数。如果 *size* " +"没有指定,默认是0。如果不支持改变线程堆栈大小,会抛出 :exc:`RuntimeError` 错误。如果指定的堆栈大小不合法,会抛出 " +":exc:`ValueError` " +"错误并且不会修改堆栈大小。32KiB是当前最小的能保证解释器有足够堆栈空间的堆栈大小。需要注意的是部分平台对于堆栈大小会有特定的限制,例如要求大于32KiB的堆栈大小或者需要根据系统内存页面的整数倍进行分配" +" - 应当查阅平台文档有关详细信息(4KiB页面比较普遍,在没有更具体信息的情况下,建议的方法是使用4096的倍数作为堆栈大小)。" + +#: ../../library/threading.rst:164 +msgid "" +":ref:`Availability `: Windows, systems with POSIX threads." +msgstr ":ref:`适用于 `: Windows,具有 POSIX 线程的系统。" + +#: ../../library/threading.rst:167 +msgid "This module also defines the following constant:" +msgstr "这个模块同时定义了以下常量:" + +#: ../../library/threading.rst:171 +msgid "" +"The maximum value allowed for the *timeout* parameter of blocking functions " +"(:meth:`Lock.acquire`, :meth:`RLock.acquire`, :meth:`Condition.wait`, etc.)." +" Specifying a timeout greater than this value will raise an " +":exc:`OverflowError`." +msgstr "" +"阻塞函数( :meth:`Lock.acquire`, :meth:`RLock.acquire`, :meth:`Condition.wait`, " +"...)中形参 *timeout* 允许的最大值。传入超过这个值的 timeout 会抛出 :exc:`OverflowError` 异常。" + +#: ../../library/threading.rst:179 +msgid "" +"This module defines a number of classes, which are detailed in the sections " +"below." +msgstr "这个模块定义了许多类,详见以下部分。" + +#: ../../library/threading.rst:182 +msgid "" +"The design of this module is loosely based on Java's threading model. " +"However, where Java makes locks and condition variables basic behavior of " +"every object, they are separate objects in Python. Python's :class:`Thread`" +" class supports a subset of the behavior of Java's Thread class; currently, " +"there are no priorities, no thread groups, and threads cannot be destroyed, " +"stopped, suspended, resumed, or interrupted. The static methods of Java's " +"Thread class, when implemented, are mapped to module-level functions." +msgstr "" +"该模块的设计基于 Java的线程模型。 但是,在Java里面,锁和条件变量是每个对象的基础特性,而在Python里面,这些被独立成了单独的对象。 " +"Python 的 :class:`Thread` 类只是 Java 的 Thread " +"类的一个子集;目前还没有优先级,没有线程组,线程还不能被销毁、停止、暂停、恢复或中断。 Java 的 Thread " +"类的静态方法在实现时会映射为模块级函数。" + +#: ../../library/threading.rst:190 +msgid "All of the methods described below are executed atomically." +msgstr "下述方法的执行都是原子性的。" + +#: ../../library/threading.rst:194 +msgid "Thread-Local Data" +msgstr "线程本地数据" + +#: ../../library/threading.rst:196 +msgid "" +"Thread-local data is data whose values are thread specific. To manage " +"thread-local data, just create an instance of :class:`local` (or a subclass)" +" and store attributes on it::" +msgstr "线程本地数据是特定线程的数据。管理线程本地数据,只需要创建一个 :class:`local` (或者一个子类型)的实例并在实例中储存属性:" + +#: ../../library/threading.rst:203 +msgid "The instance's values will be different for separate threads." +msgstr "在不同的线程中,实例的值会不同。" + +#: ../../library/threading.rst:208 +msgid "A class that represents thread-local data." +msgstr "一个代表线程本地数据的类。" + +#: ../../library/threading.rst:210 +msgid "" +"For more details and extensive examples, see the documentation string of the" +" :mod:`_threading_local` module." +msgstr "更多相关细节和大量示例,参见 :mod:`_threading_local` 模块的文档。" + +#: ../../library/threading.rst:217 +msgid "Thread Objects" +msgstr "线程对象" + +#: ../../library/threading.rst:219 +msgid "" +"The :class:`Thread` class represents an activity that is run in a separate " +"thread of control. There are two ways to specify the activity: by passing a" +" callable object to the constructor, or by overriding the " +":meth:`~Thread.run` method in a subclass. No other methods (except for the " +"constructor) should be overridden in a subclass. In other words, *only* " +"override the :meth:`~Thread.__init__` and :meth:`~Thread.run` methods of " +"this class." +msgstr "" +":class:`Thread` 类代表在独立控制线程运行的活动。有两种方式指定活动:传递一个可调用对象给构造函数或者在子类重载 " +":meth:`~Thread.run` 方法。其它方法不应该在子类被(除了构造函数)重载。换句话说,*只能* 重载这个类的 " +":meth:`~Thread.__init__` 和 :meth:`~Thread.run` 方法。" + +#: ../../library/threading.rst:226 +msgid "" +"Once a thread object is created, its activity must be started by calling the" +" thread's :meth:`~Thread.start` method. This invokes the " +":meth:`~Thread.run` method in a separate thread of control." +msgstr "" +"当线程对象一旦被创建,其活动必须通过调用线程的 :meth:`~Thread.start` 方法开始。 这会在独立的控制线程中唤起 " +":meth:`~Thread.run` 方法。" + +#: ../../library/threading.rst:230 +msgid "" +"Once the thread's activity is started, the thread is considered 'alive'. It " +"stops being alive when its :meth:`~Thread.run` method terminates -- either " +"normally, or by raising an unhandled exception. The " +":meth:`~Thread.is_alive` method tests whether the thread is alive." +msgstr "" +"一旦线程活动开始,该线程会被认为是 '存活的' 。当它的 :meth:`~Thread.run` " +"方法终结了(不管是正常的还是抛出未被处理的异常),就不是'存活的'。 :meth:`~Thread.is_alive` 方法用于检查线程是否存活。" + +#: ../../library/threading.rst:235 +msgid "" +"Other threads can call a thread's :meth:`~Thread.join` method. This blocks " +"the calling thread until the thread whose :meth:`~Thread.join` method is " +"called is terminated." +msgstr "" +"其他线程可以调用一个线程的 :meth:`~Thread.join` 方法。这会阻塞调用该方法的线程,直到被调用 " +":meth:`~Thread.join` 方法的线程终结。" + +#: ../../library/threading.rst:239 +msgid "" +"A thread has a name. The name can be passed to the constructor, and read or" +" changed through the :attr:`~Thread.name` attribute." +msgstr "线程有名字。名字可以传递给构造函数,也可以通过 :attr:`~Thread.name` 属性读取或者修改。" + +#: ../../library/threading.rst:242 +msgid "" +"If the :meth:`~Thread.run` method raises an exception, " +":func:`threading.excepthook` is called to handle it. By default, " +":func:`threading.excepthook` ignores silently :exc:`SystemExit`." +msgstr "" +"如果 :meth:`~Thread.run` 方法引发了异常,则会调用 :func:`threading.excepthook` 来处理它。 " +"在默认情况下,:func:`threading.excepthook` 会静默地忽略 :exc:`SystemExit`。" + +#: ../../library/threading.rst:246 +msgid "" +"A thread can be flagged as a \"daemon thread\". The significance of this " +"flag is that the entire Python program exits when only daemon threads are " +"left. The initial value is inherited from the creating thread. The flag " +"can be set through the :attr:`~Thread.daemon` property or the *daemon* " +"constructor argument." +msgstr "" +"一个线程可以被标记成一个“守护线程”。 这个标识的意义是,当剩下的线程都是守护线程时,整个 Python 程序将会退出。 初始值继承于创建线程。 " +"这个标识可以通过 :attr:`~Thread.daemon` 特征属性或者 *daemon* 构造器参数来设置。" + +#: ../../library/threading.rst:253 +msgid "" +"Daemon threads are abruptly stopped at shutdown. Their resources (such as " +"open files, database transactions, etc.) may not be released properly. If " +"you want your threads to stop gracefully, make them non-daemonic and use a " +"suitable signalling mechanism such as an :class:`Event`." +msgstr "" +"守护线程在程序关闭时会突然关闭。他们的资源(例如已经打开的文档,数据库事务等等)可能没有被正确释放。如果你想你的线程正常停止,设置他们成为非守护模式并且使用合适的信号机制,例如:" +" :class:`Event`。" + +#: ../../library/threading.rst:258 +msgid "" +"There is a \"main thread\" object; this corresponds to the initial thread of" +" control in the Python program. It is not a daemon thread." +msgstr "有个 \"主线程\" 对象;这对应Python程序里面初始的控制线程。它不是一个守护线程。" + +#: ../../library/threading.rst:261 +msgid "" +"There is the possibility that \"dummy thread objects\" are created. These " +"are thread objects corresponding to \"alien threads\", which are threads of " +"control started outside the threading module, such as directly from C code." +" Dummy thread objects have limited functionality; they are always " +"considered alive and daemonic, and cannot be :meth:`~Thread.join`\\ ed. " +"They are never deleted, since it is impossible to detect the termination of " +"alien threads." +msgstr "" +"\"虚拟线程对象\" " +"是可以被创建的。这些是对应于“外部线程”的线程对象,它们是在线程模块外部启动的控制线程,例如直接来自C代码。虚拟线程对象功能受限;他们总是被认为是存活的和守护模式,不能被" +" :meth:`~Thread.join` 。因为无法检测外来线程的终结,它们永远不会被删除。" + +#: ../../library/threading.rst:272 +msgid "" +"This constructor should always be called with keyword arguments. Arguments " +"are:" +msgstr "应当始终使用关键字参数调用此构造函数。 参数如下:" + +#: ../../library/threading.rst:275 +msgid "" +"*group* should be ``None``; reserved for future extension when a " +":class:`ThreadGroup` class is implemented." +msgstr "*group* 应该为 ``None``;为了日后扩展 :class:`ThreadGroup` 类实现而保留。" + +#: ../../library/threading.rst:278 +msgid "" +"*target* is the callable object to be invoked by the :meth:`run` method. " +"Defaults to ``None``, meaning nothing is called." +msgstr "*target* 是用于 :meth:`run` 方法调用的可调用对象。默认是 ``None``,表示不需要调用任何方法。" + +#: ../../library/threading.rst:281 +msgid "" +"*name* is the thread name. By default, a unique name is constructed of the " +"form \"Thread-*N*\" where *N* is a small decimal number." +msgstr "*name* 是线程名称。默认情况下,由 \"Thread-*N*\" 格式构成一个唯一的名称,其中 *N* 是小的十进制数。" + +#: ../../library/threading.rst:284 +msgid "" +"*args* is the argument tuple for the target invocation. Defaults to ``()``." +msgstr "*args* 是用于调用目标函数的参数元组。默认是 ``()``。" + +#: ../../library/threading.rst:286 +msgid "" +"*kwargs* is a dictionary of keyword arguments for the target invocation. " +"Defaults to ``{}``." +msgstr "*kwargs* 是用于调用目标函数的关键字参数字典。默认是 ``{}``。" + +#: ../../library/threading.rst:289 +msgid "" +"If not ``None``, *daemon* explicitly sets whether the thread is daemonic. If" +" ``None`` (the default), the daemonic property is inherited from the current" +" thread." +msgstr "" +"如果不是 ``None``,*daemon* 参数将显式地设置该线程是否为守护模式。 如果是 ``None`` " +"(默认值),线程将继承当前线程的守护模式属性。" + +#: ../../library/threading.rst:293 +msgid "" +"If the subclass overrides the constructor, it must make sure to invoke the " +"base class constructor (``Thread.__init__()``) before doing anything else to" +" the thread." +msgstr "如果子类型重载了构造函数,它一定要确保在做任何事前,先唤起基类构造器(``Thread.__init__()``)。" + +#: ../../library/threading.rst:297 +msgid "Added the *daemon* argument." +msgstr "加入 *daemon* 参数。" + +#: ../../library/threading.rst:302 +msgid "Start the thread's activity." +msgstr "开始线程活动。" + +#: ../../library/threading.rst:304 +msgid "" +"It must be called at most once per thread object. It arranges for the " +"object's :meth:`~Thread.run` method to be invoked in a separate thread of " +"control." +msgstr "它在一个线程里最多只能被调用一次。 它安排对象的 :meth:`~Thread.run` 方法在一个独立的控制线程中被调用。" + +#: ../../library/threading.rst:308 +msgid "" +"This method will raise a :exc:`RuntimeError` if called more than once on the" +" same thread object." +msgstr "如果同一个线程对象中调用这个方法的次数大于一次,会抛出 :exc:`RuntimeError` 。" + +#: ../../library/threading.rst:313 +msgid "Method representing the thread's activity." +msgstr "代表线程活动的方法。" + +#: ../../library/threading.rst:315 +msgid "" +"You may override this method in a subclass. The standard :meth:`run` method" +" invokes the callable object passed to the object's constructor as the " +"*target* argument, if any, with positional and keyword arguments taken from " +"the *args* and *kwargs* arguments, respectively." +msgstr "" +"你可以在子类型里重载这个方法。 标准的 :meth:`run` 方法会对作为 *target* " +"参数传递给该对象构造器的可调用对象(如果存在)被唤起,并附带从 *args* 和 *kwargs* 参数分别获取的位置和关键字参数。" + +#: ../../library/threading.rst:322 +msgid "" +"Wait until the thread terminates. This blocks the calling thread until the " +"thread whose :meth:`~Thread.join` method is called terminates -- either " +"normally or through an unhandled exception -- or until the optional timeout " +"occurs." +msgstr "" +"等待,直到线程终结。这会阻塞调用这个方法的线程,直到被调用 :meth:`~Thread.join` 的线程终结 -- 不管是正常终结还是抛出未处理异常" +" -- 或者直到发生超时,超时选项是可选的。" + +#: ../../library/threading.rst:327 +msgid "" +"When the *timeout* argument is present and not ``None``, it should be a " +"floating point number specifying a timeout for the operation in seconds (or " +"fractions thereof). As :meth:`~Thread.join` always returns ``None``, you " +"must call :meth:`~Thread.is_alive` after :meth:`~Thread.join` to decide " +"whether a timeout happened -- if the thread is still alive, the " +":meth:`~Thread.join` call timed out." +msgstr "" +"当 *timeout* 参数存在而且不是 ``None`` 时,它应该是一个用于指定操作超时的以秒为单位的浮点数或者分数。因为 " +":meth:`~Thread.join` 总是返回 ``None`` ,所以你一定要在 :meth:`~Thread.join` 后调用 " +":meth:`~Thread.is_alive` 才能判断是否发生超时 -- 如果线程仍然存活,则 :meth:`~Thread.join` 超时。" + +#: ../../library/threading.rst:334 +msgid "" +"When the *timeout* argument is not present or ``None``, the operation will " +"block until the thread terminates." +msgstr "当 *timeout* 参数不存在或者是 ``None`` ,这个操作会阻塞直到线程终结。" + +#: ../../library/threading.rst:337 +msgid "A thread can be :meth:`~Thread.join`\\ ed many times." +msgstr "一个线程可以被 :meth:`~Thread.join` 很多次。" + +#: ../../library/threading.rst:339 +msgid "" +":meth:`~Thread.join` raises a :exc:`RuntimeError` if an attempt is made to " +"join the current thread as that would cause a deadlock. It is also an error " +"to :meth:`~Thread.join` a thread before it has been started and attempts to " +"do so raise the same exception." +msgstr "" +"如果尝试加入当前线程会导致死锁, :meth:`~Thread.join` 会引起 :exc:`RuntimeError` 异常。如果尝试 " +":meth:`~Thread.join` 一个尚未开始的线程,也会抛出相同的异常。" + +#: ../../library/threading.rst:346 +msgid "" +"A string used for identification purposes only. It has no semantics. " +"Multiple threads may be given the same name. The initial name is set by the" +" constructor." +msgstr "只用于识别的字符串。它没有语义。多个线程可以赋予相同的名称。 初始名称由构造函数设置。" + +#: ../../library/threading.rst:353 +msgid "" +"Old getter/setter API for :attr:`~Thread.name`; use it directly as a " +"property instead." +msgstr "旧的 :attr:`~Thread.name` 取值/设值 API;请改为直接以特征属性方式使用它。" + +#: ../../library/threading.rst:358 +msgid "" +"The 'thread identifier' of this thread or ``None`` if the thread has not " +"been started. This is a nonzero integer. See the :func:`get_ident` " +"function. Thread identifiers may be recycled when a thread exits and " +"another thread is created. The identifier is available even after the " +"thread has exited." +msgstr "" +"这个线程的 '线程标识符',如果线程尚未开始则为 ``None`` 。这是个非零整数。参见 " +":func:`get_ident` 函数。当一个线程退出而另外一个线程被创建,线程标识符会被复用。即使线程退出后,仍可得到标识符。" + +#: ../../library/threading.rst:366 +msgid "" +"The native integral thread ID of this thread. This is a non-negative " +"integer, or ``None`` if the thread has not been started. See the " +":func:`get_native_id` function. This represents the Thread ID (``TID``) as " +"assigned to the thread by the OS (kernel). Its value may be used to " +"uniquely identify this particular thread system-wide (until the thread " +"terminates, after which the value may be recycled by the OS)." +msgstr "" +"此线程的原生集成线程 ID。 这是一个非负整数,或者如果线程还未启动则为 ``None``。 请参阅 :func:`get_native_id` 函数。" +" 这表示线程 ID (``TID``) 已被 OS (内核) 赋值给线程。 " +"它的值可能被用来在全系统范围内唯一地标识这个特定线程(直到线程终结,在那之后该值可能会被 OS 回收再利用)。" + +#: ../../library/threading.rst:376 +msgid "" +"Similar to Process IDs, Thread IDs are only valid (guaranteed unique system-" +"wide) from the time the thread is created until the thread has been " +"terminated." +msgstr "类似于进程 ID,线程 ID 的有效期(全系统范围内保证唯一)将从线程被创建开始直到线程被终结。" + +#: ../../library/threading.rst:381 +msgid "" +":ref:`Availability `: Requires :func:`get_native_id` function." +msgstr ":ref:`可用性 `: 需要 :func:`get_native_id` 函数。" + +#: ../../library/threading.rst:386 +msgid "Return whether the thread is alive." +msgstr "返回线程是否存活。" + +#: ../../library/threading.rst:388 +msgid "" +"This method returns ``True`` just before the :meth:`~Thread.run` method " +"starts until just after the :meth:`~Thread.run` method terminates. The " +"module function :func:`.enumerate` returns a list of all alive threads." +msgstr "" +"当 :meth:`~Thread.run` 方法刚开始直到 :meth:`~Thread.run` 方法刚结束,这个方法返回 ``True`` " +"。模块函数 :func:`.enumerate` 返回包含所有存活线程的列表。" + +#: ../../library/threading.rst:394 +msgid "" +"A boolean value indicating whether this thread is a daemon thread (True) or " +"not (False). This must be set before :meth:`~Thread.start` is called, " +"otherwise :exc:`RuntimeError` is raised. Its initial value is inherited " +"from the creating thread; the main thread is not a daemon thread and " +"therefore all threads created in the main thread default to " +":attr:`~Thread.daemon` = ``False``." +msgstr "" +"一个表示这个线程是(True)否(False)守护线程的布尔值。一定要在调用 :meth:`~Thread.start` 前设置好,不然会抛出 " +":exc:`RuntimeError` 。初始值继承于创建线程;主线程不是守护线程,因此主线程创建的所有线程默认都是 " +":attr:`~Thread.daemon` = ``False``。" + +#: ../../library/threading.rst:401 +msgid "" +"The entire Python program exits when no alive non-daemon threads are left." +msgstr "当没有存活的非守护线程时,整个Python程序才会退出。" + +#: ../../library/threading.rst:406 +msgid "" +"Old getter/setter API for :attr:`~Thread.daemon`; use it directly as a " +"property instead." +msgstr "旧的 :attr:`~Thread.daemon` 取值/设值 API;请改为直接以特性属性方式使用它。" + +#: ../../library/threading.rst:413 +msgid "Lock Objects" +msgstr "锁对象" + +#: ../../library/threading.rst:415 +msgid "" +"A primitive lock is a synchronization primitive that is not owned by a " +"particular thread when locked. In Python, it is currently the lowest level " +"synchronization primitive available, implemented directly by the " +":mod:`_thread` extension module." +msgstr "" +"原始锁是一个在锁定时不属于特定线程的同步基元组件。在Python中,它是能用的最低级的同步基元组件,由 :mod:`_thread` " +"扩展模块直接实现。" + +#: ../../library/threading.rst:420 +msgid "" +"A primitive lock is in one of two states, \"locked\" or \"unlocked\". It is " +"created in the unlocked state. It has two basic methods, " +":meth:`~Lock.acquire` and :meth:`~Lock.release`. When the state is " +"unlocked, :meth:`~Lock.acquire` changes the state to locked and returns " +"immediately. When the state is locked, :meth:`~Lock.acquire` blocks until a" +" call to :meth:`~Lock.release` in another thread changes it to unlocked, " +"then the :meth:`~Lock.acquire` call resets it to locked and returns. The " +":meth:`~Lock.release` method should only be called in the locked state; it " +"changes the state to unlocked and returns immediately. If an attempt is made" +" to release an unlocked lock, a :exc:`RuntimeError` will be raised." +msgstr "" +"原始锁处于 \"锁定\" 或者 \"非锁定\" 两种状态之一。它被创建时为非锁定状态。它有两个基本方法, :meth:`~Lock.acquire` 和" +" :meth:`~Lock.release` 。当状态为非锁定时, :meth:`~Lock.acquire` 将状态改为 锁定 " +"并立即返回。当状态是锁定时, :meth:`~Lock.acquire` 将阻塞至其他线程调用 :meth:`~Lock.release` " +"将其改为非锁定状态,然后 :meth:`~Lock.acquire` 调用重置其为锁定状态并返回。 :meth:`~Lock.release` " +"只在锁定状态下调用; 它将状态改为非锁定并立即返回。如果尝试释放一个非锁定的锁,则会引发 :exc:`RuntimeError`  异常。" + +#: ../../library/threading.rst:431 +msgid "" +"Locks also support the :ref:`context management protocol `." +msgstr "锁同样支持 :ref:`上下文管理协议 `。" + +#: ../../library/threading.rst:433 +msgid "" +"When more than one thread is blocked in :meth:`~Lock.acquire` waiting for " +"the state to turn to unlocked, only one thread proceeds when a " +":meth:`~Lock.release` call resets the state to unlocked; which one of the " +"waiting threads proceeds is not defined, and may vary across " +"implementations." +msgstr "" +"当多个线程在 :meth:`~Lock.acquire` 等待状态转变为未锁定被阻塞,然后 :meth:`~Lock.release` " +"重置状态为未锁定时,只有一个线程能继续执行;至于哪个等待线程继续执行没有定义,并且会根据实现而不同。" + +#: ../../library/threading.rst:438 +msgid "All methods are executed atomically." +msgstr "所有方法的执行都是原子性的。" + +#: ../../library/threading.rst:443 +msgid "" +"The class implementing primitive lock objects. Once a thread has acquired a" +" lock, subsequent attempts to acquire it block, until it is released; any " +"thread may release it." +msgstr "实现原始锁对象的类。一旦一个线程获得一个锁,会阻塞随后尝试获得锁的线程,直到它被释放;任何线程都可以释放它。" + +#: ../../library/threading.rst:447 +msgid "" +"Note that ``Lock`` is actually a factory function which returns an instance " +"of the most efficient version of the concrete Lock class that is supported " +"by the platform." +msgstr "需要注意的是 ``Lock`` 其实是一个工厂函数,返回平台支持的具体锁类中最有效的版本的实例。" + +#: ../../library/threading.rst:454 ../../library/threading.rst:534 +msgid "Acquire a lock, blocking or non-blocking." +msgstr "可以阻塞或非阻塞地获得锁。" + +#: ../../library/threading.rst:456 +msgid "" +"When invoked with the *blocking* argument set to ``True`` (the default), " +"block until the lock is unlocked, then set it to locked and return ``True``." +msgstr "当调用时参数 *blocking* 设置为 ``True`` (缺省值),阻塞直到锁被释放,然后将锁锁定并返回 ``True`` 。" + +#: ../../library/threading.rst:459 +msgid "" +"When invoked with the *blocking* argument set to ``False``, do not block. If" +" a call with *blocking* set to ``True`` would block, return ``False`` " +"immediately; otherwise, set the lock to locked and return ``True``." +msgstr "" +"在参数 *blocking* 被设置为 ``False`` 的情况下调用,将不会发生阻塞。如果调用时 *blocking* 设为 ``True`` " +"会阻塞,并立即返回 ``False`` ;否则,将锁锁定并返回 ``True``。" + +#: ../../library/threading.rst:463 +msgid "" +"When invoked with the floating-point *timeout* argument set to a positive " +"value, block for at most the number of seconds specified by *timeout* and as" +" long as the lock cannot be acquired. A *timeout* argument of ``-1`` " +"specifies an unbounded wait. It is forbidden to specify a *timeout* when " +"*blocking* is false." +msgstr "" +"当浮点型 *timeout* 参数被设置为正值调用时,只要无法获得锁,将最多阻塞 *timeout* 设定的秒数。*timeout* 参数被设置为 " +"``-1`` 时将无限等待。当 *blocking* 为 false 时,*timeout* 指定的值将被忽略。" + +#: ../../library/threading.rst:469 +msgid "" +"The return value is ``True`` if the lock is acquired successfully, ``False``" +" if not (for example if the *timeout* expired)." +msgstr "如果成功获得锁,则返回 ``True``,否则返回 ``False`` (例如发生 *超时* 的时候)。" + +#: ../../library/threading.rst:472 ../../library/threading.rst:556 +#: ../../library/threading.rst:801 +msgid "The *timeout* parameter is new." +msgstr "新的 *timeout* 形参。" + +#: ../../library/threading.rst:475 +msgid "" +"Lock acquisition can now be interrupted by signals on POSIX if the " +"underlying threading implementation supports it." +msgstr "现在如果底层线程实现支持,则可以通过POSIX上的信号中断锁的获取。" + +#: ../../library/threading.rst:482 +msgid "" +"Release a lock. This can be called from any thread, not only the thread " +"which has acquired the lock." +msgstr "释放一个锁。这个方法可以在任何线程中调用,不单指获得锁的线程。" + +#: ../../library/threading.rst:485 +msgid "" +"When the lock is locked, reset it to unlocked, and return. If any other " +"threads are blocked waiting for the lock to become unlocked, allow exactly " +"one of them to proceed." +msgstr "当锁被锁定,将它重置为未锁定,并返回。如果其他线程正在等待这个锁解锁而被阻塞,只允许其中一个允许。" + +#: ../../library/threading.rst:489 +msgid "When invoked on an unlocked lock, a :exc:`RuntimeError` is raised." +msgstr "当在未锁定的锁上唤起时,会引发 :exc:`RuntimeError`。" + +#: ../../library/threading.rst:491 ../../library/threading.rst:572 +msgid "There is no return value." +msgstr "没有返回值。" + +#: ../../library/threading.rst:495 +msgid "Return true if the lock is acquired." +msgstr "如果获得了锁则返回真值。" + +#: ../../library/threading.rst:502 +msgid "RLock Objects" +msgstr "递归锁对象" + +#: ../../library/threading.rst:504 +msgid "" +"A reentrant lock is a synchronization primitive that may be acquired " +"multiple times by the same thread. Internally, it uses the concepts of " +"\"owning thread\" and \"recursion level\" in addition to the locked/unlocked" +" state used by primitive locks. In the locked state, some thread owns the " +"lock; in the unlocked state, no thread owns it." +msgstr "" +"重入锁是一个可以被同一个线程多次获取的同步基元组件。在内部,它在基元锁的锁定/非锁定状态上附加了 \"所属线程\" 和 \"递归等级\" " +"的概念。在锁定状态下,某些线程拥有锁 ; 在非锁定状态下, 没有线程拥有它。" + +#: ../../library/threading.rst:510 +msgid "" +"To lock the lock, a thread calls its :meth:`~RLock.acquire` method; this " +"returns once the thread owns the lock. To unlock the lock, a thread calls " +"its :meth:`~Lock.release` method. " +":meth:`~Lock.acquire`/:meth:`~Lock.release` call pairs may be nested; only " +"the final :meth:`~Lock.release` (the :meth:`~Lock.release` of the outermost " +"pair) resets the lock to unlocked and allows another thread blocked in " +":meth:`~Lock.acquire` to proceed." +msgstr "" +"若要锁定锁,线程调用其 :meth:`~RLock.acquire` 方法;一旦线程拥有了锁,方法将返回。若要解锁,线程调用 " +":meth:`~Lock.release` 方法。 :meth:`~Lock.acquire`/:meth:`~Lock.release` " +"对可以嵌套;只有最终 :meth:`~Lock.release` (最外面一对的 :meth:`~Lock.release` ) " +"将锁解开,才能让其他线程继续处理 :meth:`~Lock.acquire` 阻塞。" + +#: ../../library/threading.rst:517 +msgid "" +"Reentrant locks also support the :ref:`context management protocol `." +msgstr "递归锁也支持 :ref:`上下文管理协议 `。" + +#: ../../library/threading.rst:522 +msgid "" +"This class implements reentrant lock objects. A reentrant lock must be " +"released by the thread that acquired it. Once a thread has acquired a " +"reentrant lock, the same thread may acquire it again without blocking; the " +"thread must release it once for each time it has acquired it." +msgstr "此类实现了重入锁对象。重入锁必须由获取它的线程释放。一旦线程获得了重入锁,同一个线程再次获取它将不阻塞;线程必须在每次获取它时释放一次。" + +#: ../../library/threading.rst:527 +msgid "" +"Note that ``RLock`` is actually a factory function which returns an instance" +" of the most efficient version of the concrete RLock class that is supported" +" by the platform." +msgstr "需要注意的是 ``RLock`` 其实是一个工厂函数,返回平台支持的具体递归锁类中最有效的版本的实例。" + +#: ../../library/threading.rst:536 +msgid "" +"When invoked without arguments: if this thread already owns the lock, " +"increment the recursion level by one, and return immediately. Otherwise, if" +" another thread owns the lock, block until the lock is unlocked. Once the " +"lock is unlocked (not owned by any thread), then grab ownership, set the " +"recursion level to one, and return. If more than one thread is blocked " +"waiting until the lock is unlocked, only one at a time will be able to grab " +"ownership of the lock. There is no return value in this case." +msgstr "" +"当无参数调用时: " +"如果这个线程已经拥有锁,递归级别增加一,并立即返回。否则,如果其他线程拥有该锁,则阻塞至该锁解锁。一旦锁被解锁(不属于任何线程),则抢夺所有权,设置递归等级为一,并返回。如果多个线程被阻塞,等待锁被解锁,一次只有一个线程能抢到锁的所有权。在这种情况下,没有返回值。" + +#: ../../library/threading.rst:544 +msgid "" +"When invoked with the *blocking* argument set to true, do the same thing as " +"when called without arguments, and return ``True``." +msgstr "当发起调用时将 *blocking* 参数设为真值,则执行与无参数调用时一样的操作,然后返回 ``True``。" + +#: ../../library/threading.rst:547 +msgid "" +"When invoked with the *blocking* argument set to false, do not block. If a " +"call without an argument would block, return ``False`` immediately; " +"otherwise, do the same thing as when called without arguments, and return " +"``True``." +msgstr "" +"当发起调用时将 *blocking* 参数设为假值,则不进行阻塞。 如果一个无参数调用将要阻塞,则立即返回 " +"``False``;在其他情况下,执行与无参数调用时一样的操作,然后返回 ``True``。" + +#: ../../library/threading.rst:551 +msgid "" +"When invoked with the floating-point *timeout* argument set to a positive " +"value, block for at most the number of seconds specified by *timeout* and as" +" long as the lock cannot be acquired. Return ``True`` if the lock has been " +"acquired, false if the timeout has elapsed." +msgstr "" +"当发起调用时将浮点数的 *timeout* 参数设为正值时,只要无法获得锁,将最多阻塞 *timeout* 所指定的秒数。 如果已经获得锁则返回 " +"``True``,如果超时则返回假值。" + +#: ../../library/threading.rst:562 +msgid "" +"Release a lock, decrementing the recursion level. If after the decrement it" +" is zero, reset the lock to unlocked (not owned by any thread), and if any " +"other threads are blocked waiting for the lock to become unlocked, allow " +"exactly one of them to proceed. If after the decrement the recursion level " +"is still nonzero, the lock remains locked and owned by the calling thread." +msgstr "" +"释放锁,自减递归等级。如果减到零,则将锁重置为非锁定状态(不被任何线程拥有),并且,如果其他线程正被阻塞着等待锁被解锁,则仅允许其中一个线程继续。如果自减后,递归等级仍然不是零,则锁保持锁定,仍由调用线程拥有。" + +#: ../../library/threading.rst:568 +msgid "" +"Only call this method when the calling thread owns the lock. A " +":exc:`RuntimeError` is raised if this method is called when the lock is " +"unlocked." +msgstr "只有当前线程拥有锁才能调用这个方法。如果锁被释放后调用这个方法,会引起 :exc:`RuntimeError` 异常。" + +#: ../../library/threading.rst:578 +msgid "Condition Objects" +msgstr "条件对象" + +#: ../../library/threading.rst:580 +msgid "" +"A condition variable is always associated with some kind of lock; this can " +"be passed in or one will be created by default. Passing one in is useful " +"when several condition variables must share the same lock. The lock is part" +" of the condition object: you don't have to track it separately." +msgstr "" +"条件变量总是与某种类型的锁对象相关联,锁对象可以通过传入获得,或者在缺省的情况下自动创建。当多个条件变量需要共享同一个锁时,传入一个锁很有用。锁是条件对象的一部分,你不必单独地跟踪它。" + +#: ../../library/threading.rst:585 +msgid "" +"A condition variable obeys the :ref:`context management protocol `: using the ``with`` statement acquires the associated lock for the " +"duration of the enclosed block. The :meth:`~Condition.acquire` and " +":meth:`~Condition.release` methods also call the corresponding methods of " +"the associated lock." +msgstr "" +"条件变量遵循 :ref:`上下文管理协议 ` :使用 ``with`` 语句会在它包围的代码块内获取关联的锁。 " +":meth:`~Condition.acquire` 和 :meth:`~Condition.release` 方法也能调用关联锁的相关方法。" + +#: ../../library/threading.rst:591 +msgid "" +"Other methods must be called with the associated lock held. The " +":meth:`~Condition.wait` method releases the lock, and then blocks until " +"another thread awakens it by calling :meth:`~Condition.notify` or " +":meth:`~Condition.notify_all`. Once awakened, :meth:`~Condition.wait` re-" +"acquires the lock and returns. It is also possible to specify a timeout." +msgstr "" +"其它方法必须在持有关联的锁的情况下调用。 :meth:`~Condition.wait` 方法释放锁,然后阻塞直到其它线程调用 " +":meth:`~Condition.notify` 方法或 :meth:`~Condition.notify_all` 方法唤醒它。一旦被唤醒, " +":meth:`~Condition.wait` 方法重新获取锁并返回。它也可以指定超时时间。" + +#: ../../library/threading.rst:597 +msgid "" +"The :meth:`~Condition.notify` method wakes up one of the threads waiting for" +" the condition variable, if any are waiting. The " +":meth:`~Condition.notify_all` method wakes up all threads waiting for the " +"condition variable." +msgstr "" +" :meth:`~Condition.notify` 方法唤醒正在等待此条件变量的线程之中的一个。 " +":meth:`~Condition.notify_all` 方法唤醒正在等待此条件变量的所有线程。" + +#: ../../library/threading.rst:601 +msgid "" +"Note: the :meth:`~Condition.notify` and :meth:`~Condition.notify_all` " +"methods don't release the lock; this means that the thread or threads " +"awakened will not return from their :meth:`~Condition.wait` call " +"immediately, but only when the thread that called :meth:`~Condition.notify` " +"or :meth:`~Condition.notify_all` finally relinquishes ownership of the lock." +msgstr "" +"注意: :meth:`~Condition.notify` 方法和 :meth:`~Condition.notify_all` " +"方法并不会释放锁,这意味着被唤醒的线程不会立即从它们的 :meth:`~Condition.wait` 方法调用中返回,而是会在调用了 " +":meth:`~Condition.notify` 方法或 :meth:`~Condition.notify_all` " +"方法的线程最终放弃了锁的所有权后返回。" + +#: ../../library/threading.rst:607 +msgid "" +"The typical programming style using condition variables uses the lock to " +"synchronize access to some shared state; threads that are interested in a " +"particular change of state call :meth:`~Condition.wait` repeatedly until " +"they see the desired state, while threads that modify the state call " +":meth:`~Condition.notify` or :meth:`~Condition.notify_all` when they change " +"the state in such a way that it could possibly be a desired state for one of" +" the waiters. For example, the following code is a generic producer-" +"consumer situation with unlimited buffer capacity::" +msgstr "" +"使用条件变量的典型编程风格是将锁用于同步某些共享状态的权限,那些对状态的某些特定改变感兴趣的线程,它们重复调用 " +":meth:`~Condition.wait` " +"方法,直到看到所期望的改变发生;而对于修改状态的线程,它们将当前状态改变为可能是等待者所期待的新状态后,调用 " +":meth:`~Condition.notify` 方法或者 :meth:`~Condition.notify_all` " +"方法。例如,下面的代码是一个通用的无限缓冲区容量的生产者-消费者情形:" + +#: ../../library/threading.rst:627 +msgid "" +"The ``while`` loop checking for the application's condition is necessary " +"because :meth:`~Condition.wait` can return after an arbitrary long time, and" +" the condition which prompted the :meth:`~Condition.notify` call may no " +"longer hold true. This is inherent to multi-threaded programming. The " +":meth:`~Condition.wait_for` method can be used to automate the condition " +"checking, and eases the computation of timeouts::" +msgstr "" +"使用 ``while`` 循环检查所要求的条件成立与否是有必要的,因为 :meth:`~Condition.wait` " +"方法可能要经过不确定长度的时间后才会返回,而此时导致 :meth:`~Condition.notify` " +"方法调用的那个条件可能已经不再成立。这是多线程编程所固有的问题。 " +":meth:`~Condition.wait_for` 方法可自动化条件检查,并简化超时计算。" + +#: ../../library/threading.rst:639 +msgid "" +"To choose between :meth:`~Condition.notify` and " +":meth:`~Condition.notify_all`, consider whether one state change can be " +"interesting for only one or several waiting threads. E.g. in a typical " +"producer-consumer situation, adding one item to the buffer only needs to " +"wake up one consumer thread." +msgstr "" +"选择 :meth:`~Condition.notify` 还是 :meth:`~Condition.notify_all` " +",取决于一次状态改变是只能被一个还是能被多个等待线程所用。例如在一个典型的生产者-消费者情形中,添加一个项目到缓冲区只需唤醒一个消费者线程。" + +#: ../../library/threading.rst:647 +msgid "" +"This class implements condition variable objects. A condition variable " +"allows one or more threads to wait until they are notified by another " +"thread." +msgstr "实现条件变量对象的类。一个条件变量对象允许一个或多个线程在被其它线程所通知之前进行等待。" + +#: ../../library/threading.rst:650 +msgid "" +"If the *lock* argument is given and not ``None``, it must be a :class:`Lock`" +" or :class:`RLock` object, and it is used as the underlying lock. " +"Otherwise, a new :class:`RLock` object is created and used as the underlying" +" lock." +msgstr "" +"如果给出了非 ``None`` 的 *lock* 参数,则它必须为 :class:`Lock` 或者 :class:`RLock` " +"对象,并且它将被用作底层锁。否则,将会创建新的 :class:`RLock` 对象,并将其用作底层锁。" + +#: ../../library/threading.rst:654 ../../library/threading.rst:776 +#: ../../library/threading.rst:822 ../../library/threading.rst:874 +#: ../../library/threading.rst:943 +msgid "changed from a factory function to a class." +msgstr "从工厂函数变为类。" + +#: ../../library/threading.rst:659 +msgid "" +"Acquire the underlying lock. This method calls the corresponding method on " +"the underlying lock; the return value is whatever that method returns." +msgstr "请求底层锁。此方法调用底层锁的相应方法,返回值是底层锁相应方法的返回值。" + +#: ../../library/threading.rst:664 +msgid "" +"Release the underlying lock. This method calls the corresponding method on " +"the underlying lock; there is no return value." +msgstr "释放底层锁。此方法调用底层锁的相应方法。没有返回值。" + +#: ../../library/threading.rst:669 +msgid "" +"Wait until notified or until a timeout occurs. If the calling thread has not" +" acquired the lock when this method is called, a :exc:`RuntimeError` is " +"raised." +msgstr "等待直到被通知或发生超时。如果线程在调用此方法时没有获得锁,将会引发 :exc:`RuntimeError` 异常。" + +#: ../../library/threading.rst:673 +msgid "" +"This method releases the underlying lock, and then blocks until it is " +"awakened by a :meth:`notify` or :meth:`notify_all` call for the same " +"condition variable in another thread, or until the optional timeout occurs." +" Once awakened or timed out, it re-acquires the lock and returns." +msgstr "" +"这个方法释放底层锁,然后阻塞,直到在另外一个线程中调用同一个条件变量的 :meth:`notify` 或 :meth:`notify_all` " +"唤醒它,或者直到可选的超时发生。一旦被唤醒或者超时,它重新获得锁并返回。" + +#: ../../library/threading.rst:678 +msgid "" +"When the *timeout* argument is present and not ``None``, it should be a " +"floating point number specifying a timeout for the operation in seconds (or " +"fractions thereof)." +msgstr "当提供了 *timeout* 参数且不是 ``None`` 时,它应该是一个浮点数,代表操作的超时时间,以秒为单位(可以为小数)。" + +#: ../../library/threading.rst:682 +msgid "" +"When the underlying lock is an :class:`RLock`, it is not released using its " +":meth:`release` method, since this may not actually unlock the lock when it " +"was acquired multiple times recursively. Instead, an internal interface of " +"the :class:`RLock` class is used, which really unlocks it even when it has " +"been recursively acquired several times. Another internal interface is then " +"used to restore the recursion level when the lock is reacquired." +msgstr "" +"当底层锁是个 :class:`RLock` ,不会使用它的 :meth:`release` " +"方法释放锁,因为当它被递归多次获取时,实际上可能无法解锁。相反,使用了 :class:`RLock` 类的内部接口,即使多次递归获取它也能解锁它。 " +"然后,在重新获取锁时,使用另一个内部接口来恢复递归级别。" + +#: ../../library/threading.rst:690 +msgid "" +"The return value is ``True`` unless a given *timeout* expired, in which case" +" it is ``False``." +msgstr "返回 ``True`` ,除非提供的 *timeout* 过期,这种情况下返回 ``False``。" + +#: ../../library/threading.rst:693 ../../library/threading.rst:908 +msgid "Previously, the method always returned ``None``." +msgstr "在此之前,方法总是返回 ``None``。" + +#: ../../library/threading.rst:698 +msgid "" +"Wait until a condition evaluates to true. *predicate* should be a callable " +"which result will be interpreted as a boolean value. A *timeout* may be " +"provided giving the maximum time to wait." +msgstr "" +"等待,直到条件计算为真。 *predicate* 应该是一个可调用对象而且它的返回值可被解释为一个布尔值。可以提供 *timeout* " +"参数给出最大等待时间。" + +#: ../../library/threading.rst:702 +msgid "" +"This utility method may call :meth:`wait` repeatedly until the predicate is " +"satisfied, or until a timeout occurs. The return value is the last return " +"value of the predicate and will evaluate to ``False`` if the method timed " +"out." +msgstr "" +"这个实用方法会重复地调用 :meth:`wait` 直到满足判断式或者发生超时。返回值是判断式最后一个返回值,而且如果方法发生超时会返回 " +"``False`` 。" + +#: ../../library/threading.rst:707 +msgid "" +"Ignoring the timeout feature, calling this method is roughly equivalent to " +"writing::" +msgstr "忽略超时功能,调用此方法大致相当于编写::" + +#: ../../library/threading.rst:713 +msgid "" +"Therefore, the same rules apply as with :meth:`wait`: The lock must be held " +"when called and is re-acquired on return. The predicate is evaluated with " +"the lock held." +msgstr "因此,规则同样适用于 :meth:`wait` :锁必须在被调用时保持获取,并在返回时重新获取。 随着锁定执行判断式。" + +#: ../../library/threading.rst:721 +msgid "" +"By default, wake up one thread waiting on this condition, if any. If the " +"calling thread has not acquired the lock when this method is called, a " +":exc:`RuntimeError` is raised." +msgstr "默认唤醒一个等待这个条件的线程。如果调用线程在没有获得锁的情况下调用这个方法,会引发 :exc:`RuntimeError` 异常。" + +#: ../../library/threading.rst:725 +msgid "" +"This method wakes up at most *n* of the threads waiting for the condition " +"variable; it is a no-op if no threads are waiting." +msgstr "这个方法唤醒最多 *n* 个正在等待这个条件变量的线程;如果没有线程在等待,这是一个空操作。" + +#: ../../library/threading.rst:728 +msgid "" +"The current implementation wakes up exactly *n* threads, if at least *n* " +"threads are waiting. However, it's not safe to rely on this behavior. A " +"future, optimized implementation may occasionally wake up more than *n* " +"threads." +msgstr "" +"当前实现中,如果至少有 *n* 个线程正在等待,准确唤醒 *n* 个线程。但是依赖这个行为并不安全。未来,优化的实现有时会唤醒超过 *n* 个线程。" + +#: ../../library/threading.rst:733 +msgid "" +"Note: an awakened thread does not actually return from its :meth:`wait` call" +" until it can reacquire the lock. Since :meth:`notify` does not release the" +" lock, its caller should." +msgstr "" +"注意:被唤醒的线程并没有真正恢复到它调用的 :meth:`wait` ,直到它可以重新获得锁。 因为 :meth:`notify` " +"不释放锁,其调用者才应该这样做。" + +#: ../../library/threading.rst:739 +msgid "" +"Wake up all threads waiting on this condition. This method acts like " +":meth:`notify`, but wakes up all waiting threads instead of one. If the " +"calling thread has not acquired the lock when this method is called, a " +":exc:`RuntimeError` is raised." +msgstr "" +"唤醒所有正在等待这个条件的线程。这个方法行为与 :meth:`notify` " +"相似,但并不只唤醒单一线程,而是唤醒所有等待线程。如果调用线程在调用这个方法时没有获得锁,会引发 :exc:`RuntimeError` 异常。" + +#: ../../library/threading.rst:748 +msgid "Semaphore Objects" +msgstr "信号量对象" + +#: ../../library/threading.rst:750 +msgid "" +"This is one of the oldest synchronization primitives in the history of " +"computer science, invented by the early Dutch computer scientist Edsger W. " +"Dijkstra (he used the names ``P()`` and ``V()`` instead of " +":meth:`~Semaphore.acquire` and :meth:`~Semaphore.release`)." +msgstr "" +"这是计算机科学史上最古老的同步原语之一,早期的荷兰科学家 Edsger W. Dijkstra 发明了它。(他使用名称 ``P()`` 和 " +"``V()`` 而不是 :meth:`~Semaphore.acquire` 和 :meth:`~Semaphore.release` )。" + +#: ../../library/threading.rst:755 +msgid "" +"A semaphore manages an internal counter which is decremented by each " +":meth:`~Semaphore.acquire` call and incremented by each " +":meth:`~Semaphore.release` call. The counter can never go below zero; when " +":meth:`~Semaphore.acquire` finds that it is zero, it blocks, waiting until " +"some other thread calls :meth:`~Semaphore.release`." +msgstr "" +"一个信号量管理一个内部计数器,该计数器因 :meth:`~Semaphore.acquire` 方法的调用而递减,因 " +":meth:`~Semaphore.release` 方法的调用而递增。 计数器的值永远不会小于零;当 " +":meth:`~Semaphore.acquire` 方法发现计数器为零时,将会阻塞,直到其它线程调用 " +":meth:`~Semaphore.release` 方法。" + +#: ../../library/threading.rst:761 +msgid "" +"Semaphores also support the :ref:`context management protocol `." +msgstr "信号量对象也支持 :ref:`上下文管理协议 ` 。" + +#: ../../library/threading.rst:766 +msgid "" +"This class implements semaphore objects. A semaphore manages an atomic " +"counter representing the number of :meth:`release` calls minus the number of" +" :meth:`acquire` calls, plus an initial value. The :meth:`acquire` method " +"blocks if necessary until it can return without making the counter negative." +" If not given, *value* defaults to 1." +msgstr "" +"该类实现信号量对象。信号量对象管理一个原子性的计数器,代表 :meth:`release` 方法的调用次数减去 :meth:`acquire` " +"的调用次数再加上一个初始值。如果需要, :meth:`acquire` 方法将会阻塞直到可以返回而不会使得计数器变成负数。在没有显式给出 *value*" +" 的值时,默认为1。" + +#: ../../library/threading.rst:772 +msgid "" +"The optional argument gives the initial *value* for the internal counter; it" +" defaults to ``1``. If the *value* given is less than 0, :exc:`ValueError` " +"is raised." +msgstr "" +"可选参数 *value* 赋予内部计数器初始值,默认值为 ``1`` 。如果 *value* 被赋予小于0的值,将会引发 " +":exc:`ValueError` 异常。" + +#: ../../library/threading.rst:781 +msgid "Acquire a semaphore." +msgstr "获取一个信号量。" + +#: ../../library/threading.rst:783 +msgid "When invoked without arguments:" +msgstr "在不带参数的情况下调用时:" + +#: ../../library/threading.rst:785 +msgid "" +"If the internal counter is larger than zero on entry, decrement it by one " +"and return ``True`` immediately." +msgstr "如果在进入时内部计数器的值大于零,则将其减一并立即返回 ``True``。" + +#: ../../library/threading.rst:787 +msgid "" +"If the internal counter is zero on entry, block until awoken by a call to " +":meth:`~Semaphore.release`. Once awoken (and the counter is greater than " +"0), decrement the counter by 1 and return ``True``. Exactly one thread will" +" be awoken by each call to :meth:`~Semaphore.release`. The order in which " +"threads are awoken should not be relied on." +msgstr "" +"如果在进入时内部计数器的值为零,则将会阻塞直到被对 :meth:`~Semaphore.release` 的调用唤醒。 一旦被唤醒(并且计数器的值大于 " +"0),则将计数器减 1 并返回 ``True``。 每次对 :meth:`~Semaphore.release` 的调用将只唤醒一个线程。 " +"线程被唤醒的次序是不可确定的。" + +#: ../../library/threading.rst:793 +msgid "" +"When invoked with *blocking* set to false, do not block. If a call without " +"an argument would block, return ``False`` immediately; otherwise, do the " +"same thing as when called without arguments, and return ``True``." +msgstr "" +"当发起调用时将 *blocking* 设为假值,则不进行阻塞。 如果一个无参数调用将要阻塞,则立即返回 " +"``False``;在其他情况下,执行与无参数调用时一样的操作,然后返回 ``True``。" + +#: ../../library/threading.rst:797 +msgid "" +"When invoked with a *timeout* other than ``None``, it will block for at most" +" *timeout* seconds. If acquire does not complete successfully in that " +"interval, return ``False``. Return ``True`` otherwise." +msgstr "" +"当被唤起时如果 *timeout* 不为 ``None``,则它将阻塞最多 *timeout* 秒。 请求在此时段时未能成功完成获取则将返回 " +"``False``。 在其他情况下返回 ``True``。" + +#: ../../library/threading.rst:806 +msgid "" +"Release a semaphore, incrementing the internal counter by *n*. When it was " +"zero on entry and other threads are waiting for it to become larger than " +"zero again, wake up *n* of those threads." +msgstr "释放一个信号量,将内部计数器的值增加 *n*。 当进入时值为零且有其他线程正在等待它再次变为大于零时,则唤醒那 *n* 个线程。" + +#: ../../library/threading.rst:810 +msgid "Added the *n* parameter to release multiple waiting threads at once." +msgstr "增加了 *n* 形参以一次性释放多个等待线程。" + +#: ../../library/threading.rst:816 +msgid "" +"Class implementing bounded semaphore objects. A bounded semaphore checks to" +" make sure its current value doesn't exceed its initial value. If it does, " +":exc:`ValueError` is raised. In most situations semaphores are used to guard" +" resources with limited capacity. If the semaphore is released too many " +"times it's a sign of a bug. If not given, *value* defaults to 1." +msgstr "" +"该类实现有界信号量。有界信号量通过检查以确保它当前的值不会超过初始值。如果超过了初始值,将会引发 :exc:`ValueError` " +"异常。在大多情况下,信号量用于保护数量有限的资源。如果信号量被释放的次数过多,则表明出现了错误。没有指定时, *value* 的值默认为1。" + +#: ../../library/threading.rst:829 +msgid ":class:`Semaphore` Example" +msgstr ":class:`Semaphore` 例子" + +#: ../../library/threading.rst:831 +msgid "" +"Semaphores are often used to guard resources with limited capacity, for " +"example, a database server. In any situation where the size of the resource" +" is fixed, you should use a bounded semaphore. Before spawning any worker " +"threads, your main thread would initialize the semaphore::" +msgstr "" +"信号量通常用于保护数量有限的资源,例如数据库服务器。在资源数量固定的任何情况下,都应该使用有界信号量。在生成任何工作线程前,应该在主线程中初始化信号量。" + +#: ../../library/threading.rst:840 +msgid "" +"Once spawned, worker threads call the semaphore's acquire and release " +"methods when they need to connect to the server::" +msgstr "工作线程生成后,当需要连接服务器时,这些线程将调用信号量的 acquire 和 release 方法:" + +#: ../../library/threading.rst:850 +msgid "" +"The use of a bounded semaphore reduces the chance that a programming error " +"which causes the semaphore to be released more than it's acquired will go " +"undetected." +msgstr "使用有界信号量能减少这种编程错误:信号量的释放次数多于其请求次数。" + +#: ../../library/threading.rst:857 +msgid "Event Objects" +msgstr "事件对象" + +#: ../../library/threading.rst:859 +msgid "" +"This is one of the simplest mechanisms for communication between threads: " +"one thread signals an event and other threads wait for it." +msgstr "这是线程之间通信的最简单机制之一:一个线程发出事件信号,而其他线程等待该信号。" + +#: ../../library/threading.rst:862 +msgid "" +"An event object manages an internal flag that can be set to true with the " +":meth:`~Event.set` method and reset to false with the :meth:`~Event.clear` " +"method. The :meth:`~Event.wait` method blocks until the flag is true." +msgstr "" +"一个事件对象管理一个内部标识,调用 :meth:`~Event.set` 方法可将其设置为 true ,调用 :meth:`~Event.clear`" +" 方法可将其设置为 false ,调用 :meth:`~Event.wait` 方法将进入阻塞直到标识为 true 。" + +#: ../../library/threading.rst:869 +msgid "" +"Class implementing event objects. An event manages a flag that can be set " +"to true with the :meth:`~Event.set` method and reset to false with the " +":meth:`clear` method. The :meth:`wait` method blocks until the flag is " +"true. The flag is initially false." +msgstr "" +"实现事件对象的类。事件对象管理一个内部标识,调用 :meth:`~Event.set` 方法可将其设置为true。调用 " +":meth:`~Event.clear` 方法可将其设置为 false 。调用 :meth:`~Event.wait` " +"方法将进入阻塞直到标识为true。这个标识初始时为 false 。" + +#: ../../library/threading.rst:879 +msgid "Return ``True`` if and only if the internal flag is true." +msgstr "当且仅当内部标识为 true 时返回 ``True`` 。" + +#: ../../library/threading.rst:883 +msgid "" +"Set the internal flag to true. All threads waiting for it to become true are" +" awakened. Threads that call :meth:`wait` once the flag is true will not " +"block at all." +msgstr "" +"将内部标识设置为 true 。所有正在等待这个事件的线程将被唤醒。当标识为 true 时,调用 :meth:`wait` 方法的线程不会被被阻塞。" + +#: ../../library/threading.rst:889 +msgid "" +"Reset the internal flag to false. Subsequently, threads calling :meth:`wait`" +" will block until :meth:`.set` is called to set the internal flag to true " +"again." +msgstr "" +"将内部标识设置为 false 。之后调用 :meth:`wait` 方法的线程将会被阻塞,直到调用 :meth:`.set` 方法将内部标识再次设置为 " +"true 。" + +#: ../../library/threading.rst:895 +msgid "" +"Block until the internal flag is true. If the internal flag is true on " +"entry, return immediately. Otherwise, block until another thread calls " +":meth:`.set` to set the flag to true, or until the optional timeout occurs." +msgstr "" +"阻塞线程直到内部变量为 true 。如果调用时内部标识为 true,将立即返回。否则将阻塞线程,直到调用 :meth:`.set` 方法将标识设置为 " +"true 或者发生可选的超时。" + +#: ../../library/threading.rst:899 +msgid "" +"When the timeout argument is present and not ``None``, it should be a " +"floating point number specifying a timeout for the operation in seconds (or " +"fractions thereof)." +msgstr "当提供了timeout参数且不是 ``None`` 时,它应该是一个浮点数,代表操作的超时时间,以秒为单位(可以为小数)。" + +#: ../../library/threading.rst:903 +msgid "" +"This method returns ``True`` if and only if the internal flag has been set " +"to true, either before the wait call or after the wait starts, so it will " +"always return ``True`` except if a timeout is given and the operation times " +"out." +msgstr "" +"当且仅当内部旗标在等待调用之前或者等待开始之后被设为真值时此方法将返回 ``True``,也就是说,它将总是返回 ``True`` " +"除非设定了超时且操作发生了超时。" + +#: ../../library/threading.rst:915 +msgid "Timer Objects" +msgstr "定时器对象" + +#: ../../library/threading.rst:917 +msgid "" +"This class represents an action that should be run only after a certain " +"amount of time has passed --- a timer. :class:`Timer` is a subclass of " +":class:`Thread` and as such also functions as an example of creating custom " +"threads." +msgstr "" +"此类表示一个操作应该在等待一定的时间之后运行 --- 相当于一个定时器。 :class:`Timer` 类是 :class:`Thread` " +"类的子类,因此可以像一个自定义线程一样工作。" + +#: ../../library/threading.rst:921 +msgid "" +"Timers are started, as with threads, by calling their :meth:`~Timer.start` " +"method. The timer can be stopped (before its action has begun) by calling " +"the :meth:`~Timer.cancel` method. The interval the timer will wait before " +"executing its action may not be exactly the same as the interval specified " +"by the user." +msgstr "" +"与线程一样,通过调用 :meth:`~Timer.start` 方法启动定时器。而 :meth:`~Timer.cancel` " +"方法可以停止计时器(在计时结束前), 定时器在执行其操作之前等待的时间间隔可能与用户指定的时间间隔不完全相同。" + +#: ../../library/threading.rst:927 +msgid "For example::" +msgstr "例如:" + +#: ../../library/threading.rst:938 +msgid "" +"Create a timer that will run *function* with arguments *args* and keyword " +"arguments *kwargs*, after *interval* seconds have passed. If *args* is " +"``None`` (the default) then an empty list will be used. If *kwargs* is " +"``None`` (the default) then an empty dict will be used." +msgstr "" +"创建一个定时器,在经过 *interval* 秒的间隔事件后,将会用参数 *args* 和关键字参数 *kwargs* 调用 *function*。如果" +" *args* 为 ``None`` (默认值),则会使用一个空列表。如果 *kwargs* 为 ``None`` (默认值),则会使用一个空字典。" + +#: ../../library/threading.rst:948 +msgid "" +"Stop the timer, and cancel the execution of the timer's action. This will " +"only work if the timer is still in its waiting stage." +msgstr "停止定时器并取消执行计时器将要执行的操作。仅当计时器仍处于等待状态时有效。" + +#: ../../library/threading.rst:953 +msgid "Barrier Objects" +msgstr "栅栏对象" + +#: ../../library/threading.rst:957 +msgid "" +"This class provides a simple synchronization primitive for use by a fixed " +"number of threads that need to wait for each other. Each of the threads " +"tries to pass the barrier by calling the :meth:`~Barrier.wait` method and " +"will block until all of the threads have made their :meth:`~Barrier.wait` " +"calls. At this point, the threads are released simultaneously." +msgstr "" +"栅栏类提供一个简单的同步原语,用于应对固定数量的线程需要彼此相互等待的情况。线程调用 :meth:`~Barrier.wait` " +"方法后将阻塞,直到所有线程都调用了 :meth:`~Barrier.wait` 方法。此时所有线程将被同时释放。" + +#: ../../library/threading.rst:963 +msgid "" +"The barrier can be reused any number of times for the same number of " +"threads." +msgstr "栅栏对象可以被多次使用,但进程的数量不能改变。" + +#: ../../library/threading.rst:965 +msgid "" +"As an example, here is a simple way to synchronize a client and server " +"thread::" +msgstr "这是一个使用简便的方法实现客户端进程与服务端进程同步的例子:" + +#: ../../library/threading.rst:985 +msgid "" +"Create a barrier object for *parties* number of threads. An *action*, when " +"provided, is a callable to be called by one of the threads when they are " +"released. *timeout* is the default timeout value if none is specified for " +"the :meth:`wait` method." +msgstr "" +"创建一个需要 *parties* 个线程的栅栏对象。如果提供了可调用的 *action* 参数,它会在所有线程被释放时在其中一个线程中自动调用。 " +"*timeout* 是默认的超时时间,如果没有在 :meth:`wait` 方法中指定超时时间的话。" + +#: ../../library/threading.rst:992 +msgid "" +"Pass the barrier. When all the threads party to the barrier have called " +"this function, they are all released simultaneously. If a *timeout* is " +"provided, it is used in preference to any that was supplied to the class " +"constructor." +msgstr "" +"冲出栅栏。当栅栏中所有线程都已经调用了这个函数,它们将同时被释放。如果提供了 *timeout* 参数,这里的 *timeout* " +"参数优先于创建栅栏对象时提供的 *timeout* 参数。" + +#: ../../library/threading.rst:997 +msgid "" +"The return value is an integer in the range 0 to *parties* -- 1, different " +"for each thread. This can be used to select a thread to do some special " +"housekeeping, e.g.::" +msgstr "" +"函数返回值是一个整数,取值范围在0到 *parties* -- " +"1,在每个线程中的返回值不相同。可用于从所有线程中选择唯一的一个线程执行一些特别的工作。例如:" + +#: ../../library/threading.rst:1006 +msgid "" +"If an *action* was provided to the constructor, one of the threads will have" +" called it prior to being released. Should this call raise an error, the " +"barrier is put into the broken state." +msgstr "如果创建栅栏对象时在构造函数中提供了 *action* 参数,它将在其中一个线程释放前被调用。如果此调用引发了异常,栅栏对象将进入损坏态。" + +#: ../../library/threading.rst:1010 +msgid "If the call times out, the barrier is put into the broken state." +msgstr "如果发生了超时,栅栏对象将进入破损态。" + +#: ../../library/threading.rst:1012 +msgid "" +"This method may raise a :class:`BrokenBarrierError` exception if the barrier" +" is broken or reset while a thread is waiting." +msgstr "如果栅栏对象进入破损态,或重置栅栏时仍有线程等待释放,将会引发 :class:`BrokenBarrierError` 异常。" + +#: ../../library/threading.rst:1017 +msgid "" +"Return the barrier to the default, empty state. Any threads waiting on it " +"will receive the :class:`BrokenBarrierError` exception." +msgstr "重置栅栏为默认的初始态。如果栅栏中仍有线程等待释放,这些线程将会收到 :class:`BrokenBarrierError` 异常。" + +#: ../../library/threading.rst:1020 +msgid "" +"Note that using this function may require some external synchronization if " +"there are other threads whose state is unknown. If a barrier is broken it " +"may be better to just leave it and create a new one." +msgstr "请注意使用此函数时,如果存在状态未知的其他线程,则可能需要执行外部同步。 如果栅栏已损坏则最好将其废弃并新建一个。" + +#: ../../library/threading.rst:1026 +msgid "" +"Put the barrier into a broken state. This causes any active or future calls" +" to :meth:`wait` to fail with the :class:`BrokenBarrierError`. Use this for" +" example if one of the threads needs to abort, to avoid deadlocking the " +"application." +msgstr "" +"使栅栏处于损坏状态。 这将导致任何现有和未来对 :meth:`wait` 的调用失败并引发 :class:`BrokenBarrierError`。 " +"例如可以在需要中止某个线程时使用此方法,以避免应用程序的死锁。" + +#: ../../library/threading.rst:1031 +msgid "" +"It may be preferable to simply create the barrier with a sensible *timeout* " +"value to automatically guard against one of the threads going awry." +msgstr "更好的方式是:创建栅栏时提供一个合理的超时时间,来自动避免某个线程出错。" + +#: ../../library/threading.rst:1037 +msgid "The number of threads required to pass the barrier." +msgstr "冲出栅栏所需要的线程数量。" + +#: ../../library/threading.rst:1041 +msgid "The number of threads currently waiting in the barrier." +msgstr "当前时刻正在栅栏中阻塞的线程数量。" + +#: ../../library/threading.rst:1045 +msgid "A boolean that is ``True`` if the barrier is in the broken state." +msgstr "一个布尔值,值为 ``True`` 表明栅栏为破损态。" + +#: ../../library/threading.rst:1050 +msgid "" +"This exception, a subclass of :exc:`RuntimeError`, is raised when the " +":class:`Barrier` object is reset or broken." +msgstr "" +"异常类,是 :exc:`RuntimeError` 异常的子类,在 :class:`Barrier` 对象重置时仍有线程阻塞时和对象进入破损态时被引发。" + +#: ../../library/threading.rst:1057 +msgid "" +"Using locks, conditions, and semaphores in the :keyword:`!with` statement" +msgstr "在 :keyword:`!with` 语句中使用锁、条件和信号量" + +#: ../../library/threading.rst:1059 +msgid "" +"All of the objects provided by this module that have :meth:`acquire` and " +":meth:`release` methods can be used as context managers for a " +":keyword:`with` statement. The :meth:`acquire` method will be called when " +"the block is entered, and :meth:`release` will be called when the block is " +"exited. Hence, the following snippet::" +msgstr "" +"这个模块提供的带有 :meth:`acquire` 和 :meth:`release` 方法的对象,可以被用作 :keyword:`with` " +"语句的上下文管理器。当进入语句块时 :meth:`acquire` 方法会被调用,退出语句块时 " +":meth:`release` 会被调用。因此,以下片段::" + +#: ../../library/threading.rst:1068 +msgid "is equivalent to::" +msgstr "相当于::" + +#: ../../library/threading.rst:1076 +msgid "" +"Currently, :class:`Lock`, :class:`RLock`, :class:`Condition`, " +":class:`Semaphore`, and :class:`BoundedSemaphore` objects may be used as " +":keyword:`with` statement context managers." +msgstr "" +"现在 :class:`Lock` 、 :class:`RLock` 、 :class:`Condition` 、 :class:`Semaphore` " +"和 :class:`BoundedSemaphore` 对象可以用作 :keyword:`with` 语句的上下文管理器。" diff --git a/library/time.po b/library/time.po new file mode 100644 index 000000000..fd1c8ce56 --- /dev/null +++ b/library/time.po @@ -0,0 +1,1440 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) 2001-2024, Python Software Foundation +# This file is distributed under the same license as the Python package. +# FIRST AUTHOR , YEAR. +# +# Translators: +# ailin zhang , 2018 +# dannyvi , 2018 +# 叶浚安 , 2019 +# Trim21 , 2019 +# walkinrain , 2019 +# cdarlint , 2019 +# jacky , 2019 +# ppcfish , 2019 +# Kevin Deng , 2020 +# Freesand Leo , 2021 +# Alpha Du , 2022 +# Rafael Fontenelle , 2024 +# +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: Python 3.9\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2024-07-29 06:10+0000\n" +"PO-Revision-Date: 2017-02-16 23:30+0000\n" +"Last-Translator: Rafael Fontenelle , 2024\n" +"Language-Team: Chinese (China) (https://app.transifex.com/python-doc/teams/5390/zh_CN/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: zh_CN\n" +"Plural-Forms: nplurals=1; plural=0;\n" + +#: ../../library/time.rst:2 +msgid ":mod:`time` --- Time access and conversions" +msgstr ":mod:`time` --- 时间的访问和转换" + +#: ../../library/time.rst:9 +msgid "" +"This module provides various time-related functions. For related " +"functionality, see also the :mod:`datetime` and :mod:`calendar` modules." +msgstr "该模块提供了各种与时间相关的函数。相关功能还可以参阅 :mod:`datetime` 和 :mod:`calendar` 模块。" + +#: ../../library/time.rst:12 +msgid "" +"Although this module is always available, not all functions are available on" +" all platforms. Most of the functions defined in this module call platform " +"C library functions with the same name. It may sometimes be helpful to " +"consult the platform documentation, because the semantics of these functions" +" varies among platforms." +msgstr "" +"尽管所有平台皆可使用此模块,但模块内的函数并非所有平台都可用。此模块中定义的大多数函数的实现都是调用其所在平台的C语言库的同名函数。因为这些函数的语义可能因平台而异,所以使用时最好查阅对应平台的相关文档。" + +#: ../../library/time.rst:18 +msgid "An explanation of some terminology and conventions is in order." +msgstr "下面是一些术语和惯例的解释." + +#: ../../library/time.rst:24 +msgid "" +"The :dfn:`epoch` is the point where the time starts, and is platform " +"dependent. For Unix, the epoch is January 1, 1970, 00:00:00 (UTC). To find " +"out what the epoch is on a given platform, look at ``time.gmtime(0)``." +msgstr "" +":dfn:`epoch` 是时间开始的点,其值取决于平台。对于Unix, epoch 是1970年1月1日00:00:00(UTC)。要找出给定平台上的" +" epoch ,请查看 ``time.gmtime(0)`` 。" + +#: ../../library/time.rst:33 +msgid "" +"The term :dfn:`seconds since the epoch` refers to the total number of " +"elapsed seconds since the epoch, typically excluding `leap seconds`_. Leap " +"seconds are excluded from this total on all POSIX-compliant platforms." +msgstr "" +"术语 :dfn:`纪元秒数` 是指自 epoch (纪元)时间点以来经过的总秒数,通常不包括 `闰秒`_。 在所有符合 POSIX " +"标准的平台上,闰秒都不会记录在总秒数中。" + +#: ../../library/time.rst:40 +msgid "" +"The functions in this module may not handle dates and times before the epoch" +" or far in the future. The cut-off point in the future is determined by the" +" C library; for 32-bit systems, it is typically in 2038." +msgstr "" +"此模块中的函数可能无法处理纪元之前或遥远未来的日期和时间。“遥远未来”的定义由对应的C语言库决定;对于32位系统,它通常是指2038年及以后。" + +#: ../../library/time.rst:47 +msgid "" +"Function :func:`strptime` can parse 2-digit years when given ``%y`` format " +"code. When 2-digit years are parsed, they are converted according to the " +"POSIX and ISO C standards: values 69--99 are mapped to 1969--1999, and " +"values 0--68 are mapped to 2000--2068." +msgstr "" +"函数 :func:`strptime` 在接收到 ``%y`` 格式代码时可以解析使用 2 位数表示的年份。当解析 2 位数年份时,函数会按照 " +"POSIX 和 ISO C 标准进行年份转换:数值 69--99 被映射为 1969--1999;数值 0--68 被映射为 2000--2068。" + +#: ../../library/time.rst:57 +msgid "" +"UTC is Coordinated Universal Time (formerly known as Greenwich Mean Time, or" +" GMT). The acronym UTC is not a mistake but a compromise between English " +"and French." +msgstr "" +"UTC是协调世界时(Coordinated Universal " +"Time)的缩写。它以前也被称为格林威治标准时间(GMT)。使用UTC而不是CUT作为缩写是英语与法语(Temps Universel " +"Coordonné)之间妥协的结果,不是什么低级错误。" + +#: ../../library/time.rst:63 +msgid "" +"DST is Daylight Saving Time, an adjustment of the timezone by (usually) one " +"hour during part of the year. DST rules are magic (determined by local law)" +" and can change from year to year. The C library has a table containing the" +" local rules (often it is read from a system file for flexibility) and is " +"the only source of True Wisdom in this respect." +msgstr "" +"DST是夏令时(Daylight Saving Time)的缩写,在一年的某一段时间中将当地时间调整(通常)一小时。 " +"DST的规则非常神奇(由当地法律确定),并且每年的起止时间都不同。C语言库中有一个表格,记录了各地的夏令时规则(实际上,为了灵活性,C语言库通常是从某个系统文件中读取这张表)。从这个角度而言,这张表是夏令时规则的唯一权威真理。" + +#: ../../library/time.rst:69 +msgid "" +"The precision of the various real-time functions may be less than suggested " +"by the units in which their value or argument is expressed. E.g. on most " +"Unix systems, the clock \"ticks\" only 50 or 100 times a second." +msgstr "由于平台限制,各种实时函数的精度可能低于其值或参数所要求(或给定)的精度。例如,在大多数Unix系统上,时钟频率仅为每秒50或100次。" + +#: ../../library/time.rst:73 +msgid "" +"On the other hand, the precision of :func:`.time` and :func:`sleep` is " +"better than their Unix equivalents: times are expressed as floating point " +"numbers, :func:`.time` returns the most accurate time available (using Unix " +":c:func:`gettimeofday` where available), and :func:`sleep` will accept a " +"time with a nonzero fraction (Unix :c:func:`select` is used to implement " +"this, where available)." +msgstr "" +"另一方面, :func:`.time` 和 :func:`sleep` 的精度优于它们的Unix等价物:时间表示为浮点数,:func:`.time` " +"返回最准确的时间 (使用Unix :c:func:`gettimeofday` 如果可用),并且 :func:`sleep` " +"将接受非零分数的时间(Unix :c:func:`select` 用于实现此功能,如果可用)。" + +#: ../../library/time.rst:80 +msgid "" +"The time value as returned by :func:`gmtime`, :func:`localtime`, and " +":func:`strptime`, and accepted by :func:`asctime`, :func:`mktime` and " +":func:`strftime`, is a sequence of 9 integers. The return values of " +":func:`gmtime`, :func:`localtime`, and :func:`strptime` also offer attribute" +" names for individual fields." +msgstr "" +"时间值由 :func:`gmtime`,:func:`localtime` 和 :func:`strptime` 返回,并被 " +":func:`asctime`, :func:`mktime` 和 :func:`strftime` 接受,是一个 9 个整数的序列。 " +":func:`gmtime`, :func:`localtime` 和 :func:`strptime` 的返回值还提供各个字段的属性名称。" + +#: ../../library/time.rst:86 +msgid "See :class:`struct_time` for a description of these objects." +msgstr "请参阅 :class:`struct_time` 以获取这些对象的描述。" + +#: ../../library/time.rst:88 +msgid "" +"The :class:`struct_time` type was extended to provide the :attr:`tm_gmtoff` " +"and :attr:`tm_zone` attributes when platform supports corresponding ``struct" +" tm`` members." +msgstr "" +"在平台支持相应的 ``struct tm`` 成员时,:class:`struct_time` 类型被扩展提供 :attr:`tm_gmtoff` 和 " +":attr:`tm_zone` 属性。" + +#: ../../library/time.rst:93 +msgid "" +"The :class:`struct_time` attributes :attr:`tm_gmtoff` and :attr:`tm_zone` " +"are now available on all platforms." +msgstr "" +":class:`struct_time` 的属性 :attr:`tm_gmtoff` 和 :attr:`tm_zone` 现在可在所有平台上使用。" + +#: ../../library/time.rst:97 +msgid "Use the following functions to convert between time representations:" +msgstr "使用以下函数在时间表示之间进行转换:" + +#: ../../library/time.rst:100 +msgid "From" +msgstr "从" + +#: ../../library/time.rst:100 +msgid "To" +msgstr "到" + +#: ../../library/time.rst:100 +msgid "Use" +msgstr "使用" + +#: ../../library/time.rst:102 ../../library/time.rst:105 +#: ../../library/time.rst:108 ../../library/time.rst:111 +msgid "seconds since the epoch" +msgstr "自纪元以来的秒数" + +#: ../../library/time.rst:102 ../../library/time.rst:108 +msgid ":class:`struct_time` in UTC" +msgstr "UTC 的 :class:`struct_time`" + +#: ../../library/time.rst:102 +msgid ":func:`gmtime`" +msgstr ":func:`gmtime`" + +#: ../../library/time.rst:105 ../../library/time.rst:111 +msgid ":class:`struct_time` in local time" +msgstr "本地时间的 :class:`struct_time`" + +#: ../../library/time.rst:105 +msgid ":func:`localtime`" +msgstr ":func:`localtime`" + +#: ../../library/time.rst:108 +msgid ":func:`calendar.timegm`" +msgstr ":func:`calendar.timegm`" + +#: ../../library/time.rst:111 +msgid ":func:`mktime`" +msgstr ":func:`mktime`" + +#: ../../library/time.rst:119 +msgid "Functions" +msgstr "函数" + +#: ../../library/time.rst:123 +msgid "" +"Convert a tuple or :class:`struct_time` representing a time as returned by " +":func:`gmtime` or :func:`localtime` to a string of the following form: " +"``'Sun Jun 20 23:21:05 1993'``. The day field is two characters long and is " +"space padded if the day is a single digit, e.g.: ``'Wed Jun 9 04:26:40 " +"1993'``." +msgstr "" +"转换由 :func:`gmtime` 或 :func:`localtime` 所返回的 :class:`struct_time` " +"或相应的表示时间的元组为以下形式的字符串: ``'Sun Jun 20 23:21:05 1993'``。 " +"日期字段的长度为两个字符,如果日期只有一个数字则会以空格填充,例如: ``'Wed Jun 9 04:26:40 1993'``。" + +#: ../../library/time.rst:129 +msgid "" +"If *t* is not provided, the current time as returned by :func:`localtime` is" +" used. Locale information is not used by :func:`asctime`." +msgstr "" +"如果未提供 *t*,则会使用 :func:`localtime` 所返回的当前时间。 :func:`asctime` 不会使用区域设置信息。" + +#: ../../library/time.rst:134 +msgid "" +"Unlike the C function of the same name, :func:`asctime` does not add a " +"trailing newline." +msgstr "与同名的C函数不同, :func:`asctime` 不添加尾随换行符。" + +#: ../../library/time.rst:139 +msgid "" +"Return the *clk_id* of the thread-specific CPU-time clock for the specified " +"*thread_id*." +msgstr "返回指定的 *thread_id* 的特定于线程的CPU时间时钟的 *clk_id* 。" + +#: ../../library/time.rst:141 +msgid "" +"Use :func:`threading.get_ident` or the :attr:`~threading.Thread.ident` " +"attribute of :class:`threading.Thread` objects to get a suitable value for " +"*thread_id*." +msgstr "" +"使用 :class:`threading.Thread` 对象的 :func:`threading.get_ident` 或 " +":attr:`~threading.Thread.ident` 属性为 *thread_id* 获取合适的值。" + +#: ../../library/time.rst:146 +msgid "" +"Passing an invalid or expired *thread_id* may result in undefined behavior, " +"such as segmentation fault." +msgstr "传递无效的或过期的 *thread_id* 可能会导致未定义的行为,例如段错误。" + +#: ../../library/time.rst:151 +msgid "" +":ref:`Availability `: Unix (see the man page for " +":manpage:`pthread_getcpuclockid(3)` for further information)." +msgstr "" +":ref:`可用性 ` : Unix(有关详细信息,请参见 " +":manpage:`pthread_getcpuclockid(3)` 的手册页)。" + +#: ../../library/time.rst:156 +msgid "" +"Return the resolution (precision) of the specified clock *clk_id*. Refer to" +" :ref:`time-clock-id-constants` for a list of accepted values for *clk_id*." +msgstr "" +"返回指定时钟 *clk_id* 的分辨率(精度)。有关 *clk_id* 的可接受值列表,请参阅 :ref:`time-clock-id-" +"constants` 。" + +#: ../../library/time.rst:160 ../../library/time.rst:170 +#: ../../library/time.rst:179 ../../library/time.rst:189 +#: ../../library/time.rst:198 ../../library/time.rst:635 +#: ../../library/time.rst:752 ../../library/time.rst:771 +#: ../../library/time.rst:799 ../../library/time.rst:834 +msgid ":ref:`Availability `: Unix." +msgstr ":ref:`可用性 `: Unix。" + +#: ../../library/time.rst:166 +msgid "" +"Return the time of the specified clock *clk_id*. Refer to :ref:`time-clock-" +"id-constants` for a list of accepted values for *clk_id*." +msgstr "" +"返回指定 *clk_id* 时钟的时间。有关 *clk_id* 的可接受值列表,请参阅 :ref:`time-clock-id-constants` 。" + +#: ../../library/time.rst:176 +msgid "Similar to :func:`clock_gettime` but return time as nanoseconds." +msgstr "与 :func:`clock_gettime` 相似,但返回时间为纳秒。" + +#: ../../library/time.rst:185 +msgid "" +"Set the time of the specified clock *clk_id*. Currently, " +":data:`CLOCK_REALTIME` is the only accepted value for *clk_id*." +msgstr "设置指定 *clk_id* 时钟的时间。 目前, :data:`CLOCK_REALTIME` 是 *clk_id* 唯一可接受的值。" + +#: ../../library/time.rst:195 +msgid "Similar to :func:`clock_settime` but set time with nanoseconds." +msgstr "与 :func:`clock_settime` 相似,但设置时间为纳秒。" + +#: ../../library/time.rst:204 +msgid "" +"Convert a time expressed in seconds since the epoch to a string of a form: " +"``'Sun Jun 20 23:21:05 1993'`` representing local time. The day field is two" +" characters long and is space padded if the day is a single digit, e.g.: " +"``'Wed Jun 9 04:26:40 1993'``." +msgstr "" +"转换以距离初始纪元的秒数表示的时间为以下形式的字符串: ``'Sun Jun 20 23:21:05 1993'`` 代表本地时间。 " +"日期字段的长度为两个字符,如果日期只有一个数字则会以零填充,例如: ``'Wed Jun 9 04:26:40 1993'``。" + +#: ../../library/time.rst:209 +msgid "" +"If *secs* is not provided or :const:`None`, the current time as returned by " +":func:`.time` is used. ``ctime(secs)`` is equivalent to " +"``asctime(localtime(secs))``. Locale information is not used by " +":func:`ctime`." +msgstr "" +"如果 *secs* 未提供或为 :const:`None`,则使用 :func:`.time` 所返回的当前时间。 ``ctime(secs)`` " +"等价于 ``asctime(localtime(secs))``。 :func:`ctime` 不会使用区域设置信息。" + +#: ../../library/time.rst:217 +msgid "" +"Get information on the specified clock as a namespace object. Supported " +"clock names and the corresponding functions to read their value are:" +msgstr "获取有关指定时钟的信息作为命名空间对象。 支持的时钟名称和读取其值的相应函数是:" + +#: ../../library/time.rst:221 +msgid "``'monotonic'``: :func:`time.monotonic`" +msgstr "``'monotonic'``: :func:`time.monotonic`" + +#: ../../library/time.rst:222 +msgid "``'perf_counter'``: :func:`time.perf_counter`" +msgstr "``'perf_counter'``: :func:`time.perf_counter`" + +#: ../../library/time.rst:223 +msgid "``'process_time'``: :func:`time.process_time`" +msgstr "``'process_time'``: :func:`time.process_time`" + +#: ../../library/time.rst:224 +msgid "``'thread_time'``: :func:`time.thread_time`" +msgstr "``'thread_time'``: :func:`time.thread_time`" + +#: ../../library/time.rst:225 +msgid "``'time'``: :func:`time.time`" +msgstr "``'time'``: :func:`time.time`" + +#: ../../library/time.rst:227 +msgid "The result has the following attributes:" +msgstr "结果具有以下属性:" + +#: ../../library/time.rst:229 +msgid "" +"*adjustable*: ``True`` if the clock can be changed automatically (e.g. by a " +"NTP daemon) or manually by the system administrator, ``False`` otherwise" +msgstr "" +"*adjustable* : 如果时钟可以自动更改(例如通过NTP守护程序)或由系统管理员手动更改,则为 ``True`` ,否则为 ``False``" +" 。" + +#: ../../library/time.rst:231 +msgid "" +"*implementation*: The name of the underlying C function used to get the " +"clock value. Refer to :ref:`time-clock-id-constants` for possible values." +msgstr "" +"*implementation* : 用于获取时钟值的基础C函数的名称。有关可能的值,请参阅 :ref:`time-clock-id-" +"constants` 。" + +#: ../../library/time.rst:233 +msgid "" +"*monotonic*: ``True`` if the clock cannot go backward, ``False`` otherwise" +msgstr "*monotonic* :如果时钟不能倒退,则为 ``True`` ,否则为 ``False`` 。" + +#: ../../library/time.rst:235 +msgid "*resolution*: The resolution of the clock in seconds (:class:`float`)" +msgstr "*resolution* : 以秒为单位的时钟分辨率( :class:`float` )" + +#: ../../library/time.rst:242 +msgid "" +"Convert a time expressed in seconds since the epoch to a " +":class:`struct_time` in UTC in which the dst flag is always zero. If *secs*" +" is not provided or :const:`None`, the current time as returned by " +":func:`.time` is used. Fractions of a second are ignored. See above for a " +"description of the :class:`struct_time` object. See :func:`calendar.timegm` " +"for the inverse of this function." +msgstr "" +"将以自 epoch 开始的秒数表示的时间转换为 UTC 的 :class:`struct_time` ,其中 dst 标志始终为零。 如果未提供 " +"*secs* 或为 :const:`None` ,则使用 :func:`.time` 所返回的当前时间。 一秒以内的小数将被忽略。 有关 " +":class:`struct_time` 对象的说明请参见上文。 有关此函数的逆操作请参阅 :func:`calendar.timegm`。" + +#: ../../library/time.rst:252 +msgid "" +"Like :func:`gmtime` but converts to local time. If *secs* is not provided " +"or :const:`None`, the current time as returned by :func:`.time` is used. " +"The dst flag is set to ``1`` when DST applies to the given time." +msgstr "" +"与 :func:`gmtime` 相似但转换为当地时间。如果未提供 *secs* 或为 :const:`None` ,则使用由 " +":func:`.time` 返回的当前时间。当 DST 适用于给定时间时,dst标志设置为 ``1`` 。" + +#: ../../library/time.rst:256 +msgid "" +":func:`localtime` may raise :exc:`OverflowError`, if the timestamp is " +"outside the range of values supported by the platform C :c:func:`localtime` " +"or :c:func:`gmtime` functions, and :exc:`OSError` on :c:func:`localtime` or " +":c:func:`gmtime` failure. It's common for this to be restricted to years " +"between 1970 and 2038." +msgstr "" +":func:`localtime` 可能会引发 :exc:`OverflowError` ,如果时间戳超出平台 C " +":c:func:`localtime` 或 :c:func:`gmtime` 函数支持的范围,并会在 :c:func:`localtime` 或 " +":c:func:`gmtime` 失败时引发 :exc:`OSError` 。这通常被限制在1970至2038年之间。" + +#: ../../library/time.rst:265 +msgid "" +"This is the inverse function of :func:`localtime`. Its argument is the " +":class:`struct_time` or full 9-tuple (since the dst flag is needed; use " +"``-1`` as the dst flag if it is unknown) which expresses the time in *local*" +" time, not UTC. It returns a floating point number, for compatibility with " +":func:`.time`. If the input value cannot be represented as a valid time, " +"either :exc:`OverflowError` or :exc:`ValueError` will be raised (which " +"depends on whether the invalid value is caught by Python or the underlying C" +" libraries). The earliest date for which it can generate a time is platform-" +"dependent." +msgstr "" +"这是 :func:`localtime` 的反函数。它的参数是 :class:`struct_time` 或者完整的 9 元组(因为需要 dst " +"标志;如果它是未知的则使用 ``-1`` 作为dst标志),它表示 *local* 的时间,而不是 UTC 。它返回一个浮点数,以便与 " +":func:`.time` 兼容。如果输入值不能表示为有效时间,则 :exc:`OverflowError` 或 :exc:`ValueError` " +"将被引发(这取决于Python或底层C库是否捕获到无效值)。它可以生成时间的最早日期取决于平台。" + +#: ../../library/time.rst:277 +msgid "" +"Return the value (in fractional seconds) of a monotonic clock, i.e. a clock " +"that cannot go backwards. The clock is not affected by system clock " +"updates. The reference point of the returned value is undefined, so that " +"only the difference between the results of two calls is valid." +msgstr "" +"(以小数表示的秒为单位)返回一个单调时钟的值,即不能倒退的时钟。 该时钟不受系统时钟更新的影响。 " +"返回值的参考点未被定义,因此只有两次调用之间的差值才是有效的。" + +#: ../../library/time.rst:283 +msgid "The function is now always available and always system-wide." +msgstr "该功能现在始终可用且始终在系统范围内。" + +#: ../../library/time.rst:289 +msgid "Similar to :func:`monotonic`, but return time as nanoseconds." +msgstr "与 :func:`monotonic` 相似,但是返回时间为纳秒数。" + +#: ../../library/time.rst:298 +msgid "" +"Return the value (in fractional seconds) of a performance counter, i.e. a " +"clock with the highest available resolution to measure a short duration. It" +" does include time elapsed during sleep and is system-wide. The reference " +"point of the returned value is undefined, so that only the difference " +"between the results of two calls is valid." +msgstr "" +"(以小数表示的秒为单位)返回一个性能计数器的值,即用于测量较短持续时间的具有最高有效精度的时钟。 它会包括睡眠状态所消耗的时间并且作用于全系统范围。 " +"返回值的参考点未被定义,因此只有两次调用之间的差值才是有效的。" + +#: ../../library/time.rst:308 +msgid "Similar to :func:`perf_counter`, but return time as nanoseconds." +msgstr "与 :func:`perf_counter` 相似,但是返回时间为纳秒。" + +#: ../../library/time.rst:320 +msgid "" +"Return the value (in fractional seconds) of the sum of the system and user " +"CPU time of the current process. It does not include time elapsed during " +"sleep. It is process-wide by definition. The reference point of the " +"returned value is undefined, so that only the difference between the results" +" of two calls is valid." +msgstr "" +"(以小数表示的秒为单位)返回当前进程的系统和用户 CPU 时间的总计值。 它不包括睡眠状态所消耗的时间。 根据定义它只作用于进程范围。 " +"返回值的参考点未被定义,因此只有两次调用之间的差值才是有效的。" + +#: ../../library/time.rst:330 +msgid "Similar to :func:`process_time` but return time as nanoseconds." +msgstr "与 :func:`process_time` 相似,但是返回时间为纳秒。" + +#: ../../library/time.rst:336 +msgid "" +"Suspend execution of the calling thread for the given number of seconds. The" +" argument may be a floating point number to indicate a more precise sleep " +"time. The actual suspension time may be less than that requested because any" +" caught signal will terminate the :func:`sleep` following execution of that " +"signal's catching routine. Also, the suspension time may be longer than " +"requested by an arbitrary amount because of the scheduling of other activity" +" in the system." +msgstr "" +"调用该方法的线程将被暂停执行 `secs` 秒。参数可以是浮点数,以表示更为精确的睡眠时长。由于任何捕获到的信号都会终止 :func:`sleep` " +"引发的该睡眠过程并开始执行信号的处理例程,因此实际的暂停时长可能小于请求的时长;此外,由于系统需要调度其他活动,实际暂停时长也可能比请求的时间长。" + +#: ../../library/time.rst:344 +msgid "" +"The function now sleeps at least *secs* even if the sleep is interrupted by " +"a signal, except if the signal handler raises an exception (see :pep:`475` " +"for the rationale)." +msgstr "" +"现在,即使该睡眠过程被信号中断,该函数也会保证调用它的线程至少会睡眠 *secs* " +"秒。信号处理例程抛出异常的情况除外。(欲了解我们做出这次改变的原因,请参见 :pep:`475` )" + +#: ../../library/time.rst:355 +msgid "" +"Convert a tuple or :class:`struct_time` representing a time as returned by " +":func:`gmtime` or :func:`localtime` to a string as specified by the *format*" +" argument. If *t* is not provided, the current time as returned by " +":func:`localtime` is used. *format* must be a string. :exc:`ValueError` is" +" raised if any field in *t* is outside of the allowed range." +msgstr "" +"转换一个元组或 :class:`struct_time` 表示的由 :func:`gmtime` 或 :func:`localtime` 返回的时间到由" +" *format* 参数指定的字符串。如果未提供 *t* ,则使用由 :func:`localtime` 返回的当前时间。 *format* " +"必须是一个字符串。如果 *t* 中的任何字段超出允许范围,则引发 :exc:`ValueError` 。" + +#: ../../library/time.rst:361 +msgid "" +"0 is a legal argument for any position in the time tuple; if it is normally " +"illegal the value is forced to a correct one." +msgstr "0是时间元组中任何位置的合法参数;如果它通常是非法的,则该值被强制改为正确的值。" + +#: ../../library/time.rst:364 +msgid "" +"The following directives can be embedded in the *format* string. They are " +"shown without the optional field width and precision specification, and are " +"replaced by the indicated characters in the :func:`strftime` result:" +msgstr "" +"以下指令可以嵌入 *format* 字符串中。它们显示时没有可选的字段宽度和精度规范,并被 :func:`strftime` 结果中的指示字符替换:" + +#: ../../library/time.rst:369 +msgid "Directive" +msgstr "指令" + +#: ../../library/time.rst:369 +msgid "Meaning" +msgstr "含意" + +#: ../../library/time.rst:369 +msgid "Notes" +msgstr "备注" + +#: ../../library/time.rst:371 +msgid "``%a``" +msgstr "``%a``" + +#: ../../library/time.rst:371 +msgid "Locale's abbreviated weekday name." +msgstr "本地化的缩写星期中每日的名称。" + +#: ../../library/time.rst:374 +msgid "``%A``" +msgstr "``%A``" + +#: ../../library/time.rst:374 +msgid "Locale's full weekday name." +msgstr "本地化的星期中每日的完整名称。" + +#: ../../library/time.rst:376 +msgid "``%b``" +msgstr "``%b``" + +#: ../../library/time.rst:376 +msgid "Locale's abbreviated month name." +msgstr "本地化的月缩写名称。" + +#: ../../library/time.rst:379 +msgid "``%B``" +msgstr "``%B``" + +#: ../../library/time.rst:379 +msgid "Locale's full month name." +msgstr "本地化的月完整名称。" + +#: ../../library/time.rst:381 +msgid "``%c``" +msgstr "``%c``" + +#: ../../library/time.rst:381 +msgid "Locale's appropriate date and time representation." +msgstr "本地化的适当日期和时间表示。" + +#: ../../library/time.rst:384 +msgid "``%d``" +msgstr "``%d``" + +#: ../../library/time.rst:384 +msgid "Day of the month as a decimal number [01,31]." +msgstr "十进制数 [01,31] 表示的月中日。" + +#: ../../library/time.rst:387 +msgid "``%H``" +msgstr "``%H``" + +#: ../../library/time.rst:387 +msgid "Hour (24-hour clock) as a decimal number [00,23]." +msgstr "十进制数 [00,23] 表示的小时(24小时制)。" + +#: ../../library/time.rst:390 +msgid "``%I``" +msgstr "``%I``" + +#: ../../library/time.rst:390 +msgid "Hour (12-hour clock) as a decimal number [01,12]." +msgstr "十进制数 [01,12] 表示的小时(12小时制)。" + +#: ../../library/time.rst:393 +msgid "``%j``" +msgstr "``%j``" + +#: ../../library/time.rst:393 +msgid "Day of the year as a decimal number [001,366]." +msgstr "十进制数 [001,366] 表示的年中日。" + +#: ../../library/time.rst:396 +msgid "``%m``" +msgstr "``%m``" + +#: ../../library/time.rst:396 +msgid "Month as a decimal number [01,12]." +msgstr "十进制数 [01,12] 表示的月。" + +#: ../../library/time.rst:399 +msgid "``%M``" +msgstr "``%M``" + +#: ../../library/time.rst:399 +msgid "Minute as a decimal number [00,59]." +msgstr "十进制数 [00,59] 表示的分钟。" + +#: ../../library/time.rst:402 +msgid "``%p``" +msgstr "``%p``" + +#: ../../library/time.rst:402 +msgid "Locale's equivalent of either AM or PM." +msgstr "本地化的 AM 或 PM 。" + +#: ../../library/time.rst:402 +msgid "\\(1)" +msgstr "\\(1)" + +#: ../../library/time.rst:405 +msgid "``%S``" +msgstr "``%S``" + +#: ../../library/time.rst:405 +msgid "Second as a decimal number [00,61]." +msgstr "十进制数 [00,61] 表示的秒。" + +#: ../../library/time.rst:405 +msgid "\\(2)" +msgstr "\\(2)" + +#: ../../library/time.rst:408 +msgid "``%U``" +msgstr "``%U``" + +#: ../../library/time.rst:408 +msgid "" +"Week number of the year (Sunday as the first day of the week) as a decimal " +"number [00,53]. All days in a new year preceding the first Sunday are " +"considered to be in week 0." +msgstr "十进制数 [00,53] 表示的一年中的周数(星期日作为一周的第一天)。 在第一个星期日之前的新年中的所有日子都被认为是在第 0 周。" + +#: ../../library/time.rst:408 ../../library/time.rst:419 +msgid "\\(3)" +msgstr "\\(3)" + +#: ../../library/time.rst:416 +msgid "``%w``" +msgstr "``%w``" + +#: ../../library/time.rst:416 +msgid "Weekday as a decimal number [0(Sunday),6]." +msgstr "十进制数 [0(星期日),6] 表示的周中日。" + +#: ../../library/time.rst:419 +msgid "``%W``" +msgstr "``%W``" + +#: ../../library/time.rst:419 +msgid "" +"Week number of the year (Monday as the first day of the week) as a decimal " +"number [00,53]. All days in a new year preceding the first Monday are " +"considered to be in week 0." +msgstr "十进制数 [00,53] 表示的一年中的周数(星期一作为一周的第一天)。 在第一个星期一之前的新年中的所有日子被认为是在第 0 周。" + +#: ../../library/time.rst:427 +msgid "``%x``" +msgstr "``%x``" + +#: ../../library/time.rst:427 +msgid "Locale's appropriate date representation." +msgstr "本地化的适当日期表示。" + +#: ../../library/time.rst:430 +msgid "``%X``" +msgstr "``%X``" + +#: ../../library/time.rst:430 +msgid "Locale's appropriate time representation." +msgstr "本地化的适当时间表示。" + +#: ../../library/time.rst:433 +msgid "``%y``" +msgstr "``%y``" + +#: ../../library/time.rst:433 +msgid "Year without century as a decimal number [00,99]." +msgstr "十进制数 [00,99] 表示的没有世纪的年份。" + +#: ../../library/time.rst:436 +msgid "``%Y``" +msgstr "``%Y``" + +#: ../../library/time.rst:436 +msgid "Year with century as a decimal number." +msgstr "十进制数表示的带世纪的年份。" + +#: ../../library/time.rst:439 +msgid "``%z``" +msgstr "``%z``" + +#: ../../library/time.rst:439 +msgid "" +"Time zone offset indicating a positive or negative time difference from " +"UTC/GMT of the form +HHMM or -HHMM, where H represents decimal hour digits " +"and M represents decimal minute digits [-23:59, +23:59]. [1]_" +msgstr "" +"时区偏移以格式 +HHMM 或 -HHMM 形式的 UTC/GMT 的正或负时差指示,其中H表示十进制小时数字,M表示小数分钟数字 [-23:59, " +"+23:59] 。[1]_" + +#: ../../library/time.rst:445 +msgid "``%Z``" +msgstr "``%Z``" + +#: ../../library/time.rst:445 +msgid "" +"Time zone name (no characters if no time zone exists). Deprecated. [1]_" +msgstr "时区名称(如果不存在时区,则不包含字符)。已弃用。 [1]_" + +#: ../../library/time.rst:448 +msgid "``%%``" +msgstr "``%%``" + +#: ../../library/time.rst:448 +msgid "A literal ``'%'`` character." +msgstr "字面的 ``'%'`` 字符。" + +#: ../../library/time.rst:451 +msgid "Notes:" +msgstr "注释:" + +#: ../../library/time.rst:454 +msgid "" +"When used with the :func:`strptime` function, the ``%p`` directive only " +"affects the output hour field if the ``%I`` directive is used to parse the " +"hour." +msgstr "当与 :func:`strptime` 函数一起使用时,如果使用 ``%I`` 指令来解析小时, ``%p`` 指令只影响输出小时字段。" + +#: ../../library/time.rst:458 +msgid "" +"The range really is ``0`` to ``61``; value ``60`` is valid in timestamps " +"representing `leap seconds`_ and value ``61`` is supported for historical " +"reasons." +msgstr "" +"范围真的是 ``0`` 到 ``61`` ;值 ``60`` 在表示 `leap seconds`_ 的时间戳中有效,并且由于历史原因支持值 " +"``61`` 。" + +#: ../../library/time.rst:463 +msgid "" +"When used with the :func:`strptime` function, ``%U`` and ``%W`` are only " +"used in calculations when the day of the week and the year are specified." +msgstr "当与 :func:`strptime` 函数一起使用时, ``%U`` 和 ``%W`` 仅用于指定星期几和年份的计算。" + +#: ../../library/time.rst:466 +msgid "" +"Here is an example, a format for dates compatible with that specified in " +"the :rfc:`2822` Internet email standard. [1]_ ::" +msgstr "下面是一个示例,一个与 :rfc:`2822` Internet电子邮件标准以兼容的日期格式。 [1]_ ::" + +#: ../../library/time.rst:473 +msgid "" +"Additional directives may be supported on certain platforms, but only the " +"ones listed here have a meaning standardized by ANSI C. To see the full set" +" of format codes supported on your platform, consult the " +":manpage:`strftime(3)` documentation." +msgstr "" +"某些平台可能支持其他指令,但只有此处列出的指令具有 ANSI C 标准化的含义。要查看平台支持的完整格式代码集,请参阅 " +":manpage:`strftime(3)` 文档。" + +#: ../../library/time.rst:478 +msgid "" +"On some platforms, an optional field width and precision specification can " +"immediately follow the initial ``'%'`` of a directive in the following " +"order; this is also not portable. The field width is normally 2 except for " +"``%j`` where it is 3." +msgstr "" +"在某些平台上,可选的字段宽度和精度规范可以按照以下顺序紧跟在指令的初始 ``'%'`` 之后;这也不可移植。字段宽度通常为2,除了 ``%j`` " +",它是3。" + +#: ../../library/time.rst:489 +msgid "" +"Parse a string representing a time according to a format. The return value " +"is a :class:`struct_time` as returned by :func:`gmtime` or " +":func:`localtime`." +msgstr "" +"根据格式解析表示时间的字符串。 返回值为一个被 :func:`gmtime` 或 :func:`localtime` 返回的 " +":class:`struct_time` 。" + +#: ../../library/time.rst:493 +msgid "" +"The *format* parameter uses the same directives as those used by " +":func:`strftime`; it defaults to ``\"%a %b %d %H:%M:%S %Y\"`` which matches " +"the formatting returned by :func:`ctime`. If *string* cannot be parsed " +"according to *format*, or if it has excess data after parsing, " +":exc:`ValueError` is raised. The default values used to fill in any missing " +"data when more accurate values cannot be inferred are ``(1900, 1, 1, 0, 0, " +"0, 0, 1, -1)``. Both *string* and *format* must be strings." +msgstr "" +"*format* 参数使用与 :func:`strftime` 相同的指令。 它默认为匹配 :func:`ctime` 所返回的格式 ``\"%a %b" +" %d %H:%M:%S %Y\"``` 。 如果 *string* 不能根据 *format* 来解析,或者解析后它有多余的数据,则会引发 " +":exc:`ValueError`。 当无法推断出更准确的值时,用于填充任何缺失数据的默认值是 ``(1900, 1, 1, 0, 0, 0, 0, " +"1, -1)`` 。 *string* 和 *format* 都必须为字符串。" + +#: ../../library/time.rst:501 +msgid "For example:" +msgstr "例如:" + +#: ../../library/time.rst:508 +msgid "" +"Support for the ``%Z`` directive is based on the values contained in " +"``tzname`` and whether ``daylight`` is true. Because of this, it is " +"platform-specific except for recognizing UTC and GMT which are always known " +"(and are considered to be non-daylight savings timezones)." +msgstr "" +"支持 ``%Z`` 指令是基于 ``tzname`` 中包含的值以及 ``daylight`` 是否为真。因此,它是特定于平台的,除了识别始终已知的 " +"UTC 和 GMT (并且被认为是非夏令时时区)。" + +#: ../../library/time.rst:513 +msgid "" +"Only the directives specified in the documentation are supported. Because " +"``strftime()`` is implemented per platform it can sometimes offer more " +"directives than those listed. But ``strptime()`` is independent of any " +"platform and thus does not necessarily support all directives available that" +" are not documented as supported." +msgstr "" +"仅支持文档中指定的指令。因为每个平台都实现了 ``strftime()`` ,它有时会提供比列出的指令更多的指令。但是 ``strptime()`` " +"独立于任何平台,因此不一定支持所有未记录为支持的可用指令。" + +#: ../../library/time.rst:522 +msgid "" +"The type of the time value sequence returned by :func:`gmtime`, " +":func:`localtime`, and :func:`strptime`. It is an object with a " +":term:`named tuple` interface: values can be accessed by index and by " +"attribute name. The following values are present:" +msgstr "" +"返回的时间值序列的类型为 :func:`gmtime` 、 :func:`localtime` 和 :func:`strptime` 。它是一个带有 " +":term:`named tuple` 接口的对象:可以通过索引和属性名访问值。 存在以下值:" + +#: ../../library/time.rst:528 +msgid "Index" +msgstr "索引" + +#: ../../library/time.rst:528 +msgid "Attribute" +msgstr "属性" + +#: ../../library/time.rst:528 +msgid "Values" +msgstr "值" + +#: ../../library/time.rst:530 +msgid "0" +msgstr "0" + +#: ../../library/time.rst:530 +msgid ":attr:`tm_year`" +msgstr ":attr:`tm_year`" + +#: ../../library/time.rst:530 +msgid "(for example, 1993)" +msgstr "(例如,1993)" + +#: ../../library/time.rst:532 +msgid "1" +msgstr "1" + +#: ../../library/time.rst:532 +msgid ":attr:`tm_mon`" +msgstr ":attr:`tm_mon`" + +#: ../../library/time.rst:532 +msgid "range [1, 12]" +msgstr "range [1, 12]" + +#: ../../library/time.rst:534 +msgid "2" +msgstr "2" + +#: ../../library/time.rst:534 +msgid ":attr:`tm_mday`" +msgstr ":attr:`tm_mday`" + +#: ../../library/time.rst:534 +msgid "range [1, 31]" +msgstr "range [1, 31]" + +#: ../../library/time.rst:536 +msgid "3" +msgstr "3" + +#: ../../library/time.rst:536 +msgid ":attr:`tm_hour`" +msgstr ":attr:`tm_hour`" + +#: ../../library/time.rst:536 +msgid "range [0, 23]" +msgstr "range [0, 23]" + +#: ../../library/time.rst:538 +msgid "4" +msgstr "4" + +#: ../../library/time.rst:538 +msgid ":attr:`tm_min`" +msgstr ":attr:`tm_min`" + +#: ../../library/time.rst:538 +msgid "range [0, 59]" +msgstr "range [0, 59]" + +#: ../../library/time.rst:540 +msgid "5" +msgstr "5" + +#: ../../library/time.rst:540 +msgid ":attr:`tm_sec`" +msgstr ":attr:`tm_sec`" + +#: ../../library/time.rst:540 +msgid "range [0, 61]; see **(2)** in :func:`strftime` description" +msgstr "range [0, 61]; 见 :func:`strftime` 介绍中的 **(2)**" + +#: ../../library/time.rst:543 +msgid "6" +msgstr "6" + +#: ../../library/time.rst:543 +msgid ":attr:`tm_wday`" +msgstr ":attr:`tm_wday`" + +#: ../../library/time.rst:543 +msgid "range [0, 6], Monday is 0" +msgstr "range [0, 6] ,周一为 0" + +#: ../../library/time.rst:545 +msgid "7" +msgstr "7" + +#: ../../library/time.rst:545 +msgid ":attr:`tm_yday`" +msgstr ":attr:`tm_yday`" + +#: ../../library/time.rst:545 +msgid "range [1, 366]" +msgstr "range [1, 366]" + +#: ../../library/time.rst:547 +msgid "8" +msgstr "8" + +#: ../../library/time.rst:547 +msgid ":attr:`tm_isdst`" +msgstr ":attr:`tm_isdst`" + +#: ../../library/time.rst:547 +msgid "0, 1 or -1; see below" +msgstr "0, 1 或 -1;如下所示" + +#: ../../library/time.rst:549 ../../library/time.rst:551 +msgid "N/A" +msgstr "N/A" + +#: ../../library/time.rst:549 +msgid ":attr:`tm_zone`" +msgstr ":attr:`tm_zone`" + +#: ../../library/time.rst:549 +msgid "abbreviation of timezone name" +msgstr "时区名称的缩写" + +#: ../../library/time.rst:551 +msgid ":attr:`tm_gmtoff`" +msgstr ":attr:`tm_gmtoff`" + +#: ../../library/time.rst:551 +msgid "offset east of UTC in seconds" +msgstr "以秒为单位的UTC以东偏离" + +#: ../../library/time.rst:554 +msgid "" +"Note that unlike the C structure, the month value is a range of [1, 12], not" +" [0, 11]." +msgstr "请注意,与C结构不同,月份值是 [1,12] 的范围,而不是 [0,11] 。" + +#: ../../library/time.rst:557 +msgid "" +"In calls to :func:`mktime`, :attr:`tm_isdst` may be set to 1 when daylight " +"savings time is in effect, and 0 when it is not. A value of -1 indicates " +"that this is not known, and will usually result in the correct state being " +"filled in." +msgstr "" +"在调用 :func:`mktime` 时, :attr:`tm_isdst` 可以在夏令时生效时设置为1,而在夏令时不生效时设置为0。 " +"值-1表示这是未知的,并且通常会导致填写正确的状态。" + +#: ../../library/time.rst:561 +msgid "" +"When a tuple with an incorrect length is passed to a function expecting a " +":class:`struct_time`, or having elements of the wrong type, a " +":exc:`TypeError` is raised." +msgstr "" +"当一个长度不正确的元组被传递给期望 :class:`struct_time` 的函数,或者具有错误类型的元素时,会引发 :exc:`TypeError`" +" 。" + +#: ../../library/time.rst:567 +msgid "" +"Return the time in seconds since the epoch_ as a floating point number. The " +"specific date of the epoch and the handling of `leap seconds`_ is platform " +"dependent. On Windows and most Unix systems, the epoch is January 1, 1970, " +"00:00:00 (UTC) and leap seconds are not counted towards the time in seconds " +"since the epoch. This is commonly referred to as `Unix time " +"`_. To find out what the epoch is " +"on a given platform, look at ``gmtime(0)``." +msgstr "" +"返回以浮点数表示的从 epoch_ 开始的秒数的时间值。 epoch 的具体日期和 `leap seconds`_ 的处理取决于平台。 在 " +"Windows 和大多数 Unix 系统中, epoch 是 1970 年 1 月 1 日 00:00:00 (UTC),并且闰秒将不计入从 epoch" +" 开始的秒数。 这通常被称为 `Unix 时间 `_。 " +"要了解给定平台上 epoch 的具体定义,请查看 ``gmtime(0)``。" + +#: ../../library/time.rst:577 +msgid "" +"Note that even though the time is always returned as a floating point " +"number, not all systems provide time with a better precision than 1 second. " +"While this function normally returns non-decreasing values, it can return a " +"lower value than a previous call if the system clock has been set back " +"between the two calls." +msgstr "" +"请注意,即使时间总是作为浮点数返回,但并非所有系统都提供高于1秒的精度。虽然此函数通常返回非递减值,但如果在两次调用之间设置了系统时钟,则它可以返回比先前调用更低的值。" + +#: ../../library/time.rst:583 +msgid "" +"The number returned by :func:`.time` may be converted into a more common " +"time format (i.e. year, month, day, hour, etc...) in UTC by passing it to " +":func:`gmtime` function or in local time by passing it to the " +":func:`localtime` function. In both cases a :class:`struct_time` object is " +"returned, from which the components of the calendar date may be accessed as " +"attributes." +msgstr "" +"返回的数字 :func:`.time` 可以通过将其传递给 :func:`gmtime` " +"函数或转换为UTC中更常见的时间格式(即年、月、日、小时等)或通过将它传递给 :func:`localtime` " +"函数获得本地时间。在这两种情况下都返回一个 :class:`struct_time` 对象,日历日期组件可以从中作为属性访问。" + +#: ../../library/time.rst:598 +msgid "" +"Return the value (in fractional seconds) of the sum of the system and user " +"CPU time of the current thread. It does not include time elapsed during " +"sleep. It is thread-specific by definition. The reference point of the " +"returned value is undefined, so that only the difference between the results" +" of two calls in the same thread is valid." +msgstr "" +"(以小数表示的秒为单位)返回当前线程的系统和用户 CPU 时间的总计值。 它不包括睡眠状态所消耗的时间。 根据定义它只作用于线程范围。 " +"返回值的参考点未被定义,因此只有两次调用之间的差值才是有效的。" + +#: ../../library/time.rst:606 +msgid "" +":ref:`Availability `: Windows, Linux, Unix systems supporting " +"``CLOCK_THREAD_CPUTIME_ID``." +msgstr "" +":ref:`可用性 ` : Windows、 Linux、 Unix 系统支持 " +"``CLOCK_THREAD_CPUTIME_ID`` 。" + +#: ../../library/time.rst:612 +msgid "Similar to :func:`thread_time` but return time as nanoseconds." +msgstr "与 :func:`thread_time` 相似,但返回纳秒时间。" + +#: ../../library/time.rst:619 +msgid "" +"Similar to :func:`~time.time` but returns time as an integer number of " +"nanoseconds since the epoch_." +msgstr "与 :func:`~time.time` 相似,但返回时间为用整数表示的自 epoch_ 以来所经过的纳秒数。" + +#: ../../library/time.rst:626 +msgid "" +"Reset the time conversion rules used by the library routines. The " +"environment variable :envvar:`TZ` specifies how this is done. It will also " +"set the variables ``tzname`` (from the :envvar:`TZ` environment variable), " +"``timezone`` (non-DST seconds West of UTC), ``altzone`` (DST seconds west of" +" UTC) and ``daylight`` (to 0 if this timezone does not have any daylight " +"saving time rules, or to nonzero if there is a time, past, present or future" +" when daylight saving time applies)." +msgstr "" +"重置库例程使用的时间转换规则。环境变量 :envvar:`TZ` 指定如何完成。它还将设置变量 ``tzname`` (来自 :envvar:`TZ` " +"环境变量), ``timezone`` (UTC的西部非DST秒), ``altzone`` (UTC以西的DST秒)和 ``daylight`` " +"(如果此时区没有任何夏令时规则则为0,如果有夏令时适用的时间,无论过去、现在或未来,则为非零)。" + +#: ../../library/time.rst:638 +msgid "" +"Although in many cases, changing the :envvar:`TZ` environment variable may " +"affect the output of functions like :func:`localtime` without calling " +":func:`tzset`, this behavior should not be relied on." +msgstr "" +"虽然在很多情况下,更改 :envvar:`TZ` 环境变量而不调用 :func:`tzset` 可能会影响函数的输出,例如 " +":func:`localtime` ,不应该依赖此行为。" + +#: ../../library/time.rst:642 +msgid "The :envvar:`TZ` environment variable should contain no whitespace." +msgstr ":envvar:`TZ` 不应该包含空格。" + +#: ../../library/time.rst:644 +msgid "" +"The standard format of the :envvar:`TZ` environment variable is (whitespace " +"added for clarity)::" +msgstr ":envvar:`TZ` 环境变量的标准格式是(为了清晰起见,添加了空格)::" + +#: ../../library/time.rst:649 +msgid "Where the components are:" +msgstr "组件的位置是:" + +#: ../../library/time.rst:653 +msgid "``std`` and ``dst``" +msgstr "``std`` 和 ``dst``" + +#: ../../library/time.rst:652 +msgid "" +"Three or more alphanumerics giving the timezone abbreviations. These will be" +" propagated into time.tzname" +msgstr "三个或更多字母数字,给出时区缩写。这些将传到 time.tzname" + +#: ../../library/time.rst:659 +msgid "``offset``" +msgstr "``offset``" + +#: ../../library/time.rst:656 +msgid "" +"The offset has the form: ``± hh[:mm[:ss]]``. This indicates the value added " +"the local time to arrive at UTC. If preceded by a '-', the timezone is east" +" of the Prime Meridian; otherwise, it is west. If no offset follows dst, " +"summer time is assumed to be one hour ahead of standard time." +msgstr "" +"偏移量的形式为: ``± hh[:mm[:ss]]`` 。这表示添加到达UTC的本地时间的值。如果前面有 '-' " +",则时区位于本初子午线的东边;否则,在它是西边。如果dst之后没有偏移,则假设夏令时比标准时间提前一小时。" + +#: ../../library/time.rst:681 +msgid "``start[/time], end[/time]``" +msgstr "``start[/time], end[/time]``" + +#: ../../library/time.rst:662 +msgid "" +"Indicates when to change to and back from DST. The format of the start and " +"end dates are one of the following:" +msgstr "指示何时更改为DST和从DST返回。开始日期和结束日期的格式为以下之一:" + +#: ../../library/time.rst:667 +msgid ":samp:`J{n}`" +msgstr ":samp:`J{n}`" + +#: ../../library/time.rst:666 +msgid "" +"The Julian day *n* (1 <= *n* <= 365). Leap days are not counted, so in all " +"years February 28 is day 59 and March 1 is day 60." +msgstr "Julian日 *n* (1 <= *n* <= 365)。闰日不计算在内,因此在所有年份中,2月28日是第59天,3月1日是第60天。" + +#: ../../library/time.rst:671 +msgid ":samp:`{n}`" +msgstr ":samp:`{n}`" + +#: ../../library/time.rst:670 +msgid "" +"The zero-based Julian day (0 <= *n* <= 365). Leap days are counted, and it " +"is possible to refer to February 29." +msgstr "从零开始的Julian日(0 <= *n* <= 365)。 闰日计入,可以引用2月29日。" + +#: ../../library/time.rst:678 +msgid ":samp:`M{m}.{n}.{d}`" +msgstr ":samp:`M{m}.{n}.{d}`" + +#: ../../library/time.rst:674 +msgid "" +"The *d*'th day (0 <= *d* <= 6) of week *n* of month *m* of the year (1 <= " +"*n* <= 5, 1 <= *m* <= 12, where week 5 means \"the last *d* day in month " +"*m*\" which may occur in either the fourth or the fifth week). Week 1 is the" +" first week in which the *d*'th day occurs. Day zero is a Sunday." +msgstr "" +"一年中 *m* 月的第 *n* 周(1 <= *n* <= 5 ,1 <= *m* <= 12 ,第 5 周表示 “可能在 *m* 月第 4 周或第 5" +" 周出现的最后第 *d* 日”)的第 *d* 天(0 <= *d* <= 6)。 第 1 周是第 *d* 天发生的第一周。 第 0 天是星期天。" + +#: ../../library/time.rst:680 +msgid "" +"``time`` has the same format as ``offset`` except that no leading sign ('-' " +"or '+') is allowed. The default, if time is not given, is 02:00:00." +msgstr "" +"``time`` 的格式与 ``offset`` 的格式相同,但不允许使用前导符号( '-' 或 '+' " +")。如果没有给出时间,则默认值为02:00:00。" + +#: ../../library/time.rst:694 +msgid "" +"On many Unix systems (including \\*BSD, Linux, Solaris, and Darwin), it is " +"more convenient to use the system's zoneinfo (:manpage:`tzfile(5)`) " +"database to specify the timezone rules. To do this, set the :envvar:`TZ` " +"environment variable to the path of the required timezone datafile, " +"relative to the root of the systems 'zoneinfo' timezone database, usually " +"located at :file:`/usr/share/zoneinfo`. For example, ``'US/Eastern'``, " +"``'Australia/Melbourne'``, ``'Egypt'`` or ``'Europe/Amsterdam'``. ::" +msgstr "" +"在许多Unix系统(包括 \\*BSD , Linux , Solaris 和 Darwin 上),使用系统的区域信息( " +":manpage:`tzfile(5)` )数据库来指定时区规则会更方便。为此,将 :envvar:`TZ` " +"环境变量设置为所需时区数据文件的路径,相对于系统 'zoneinfo' 时区数据库的根目录,通常位于 " +":file:`/usr/share/zoneinfo` 。 例如,``'US/Eastern'`` 、 " +"``'Australia/Melbourne'`` 、 ``'Egypt'`` 或 ``'Europe/Amsterdam'``。 ::" + +#: ../../library/time.rst:715 +msgid "Clock ID Constants" +msgstr "Clock ID 常量" + +#: ../../library/time.rst:717 +msgid "" +"These constants are used as parameters for :func:`clock_getres` and " +":func:`clock_gettime`." +msgstr "这些常量用作 :func:`clock_getres` 和 :func:`clock_gettime` 的参数。" + +#: ../../library/time.rst:722 +msgid "" +"Identical to :data:`CLOCK_MONOTONIC`, except it also includes any time that " +"the system is suspended." +msgstr "与 :data:`CLOCK_MONOTONIC` 相同,除了它还包括系统暂停的任何时间。" + +#: ../../library/time.rst:725 +msgid "" +"This allows applications to get a suspend-aware monotonic clock without " +"having to deal with the complications of :data:`CLOCK_REALTIME`, which may " +"have discontinuities if the time is changed using ``settimeofday()`` or " +"similar." +msgstr "" +"这允许应用程序获得一个暂停感知的单调时钟,而不必处理 :data:`CLOCK_REALTIME` 的复杂性,如果使用 " +"``settimeofday()`` 或类似的时间更改时间可能会有不连续性。" + +#: ../../library/time.rst:731 +msgid ":ref:`Availability `: Linux 2.6.39 or later." +msgstr ":ref:`可用性 `: Linux 2.6.39 或更新" + +#: ../../library/time.rst:737 +msgid "" +"The Solaris OS has a ``CLOCK_HIGHRES`` timer that attempts to use an optimal" +" hardware source, and may give close to nanosecond resolution. " +"``CLOCK_HIGHRES`` is the nonadjustable, high-resolution clock." +msgstr "" +"Solaris OS 有一个 ``CLOCK_HIGHRES`` 计时器,试图使用最佳硬件源,并可能提供接近纳秒的分辨率。 " +"``CLOCK_HIGHRES`` 是不可调节的高分辨率时钟。" + +#: ../../library/time.rst:742 +msgid ":ref:`Availability `: Solaris." +msgstr ":ref:`可用性 `: Solaris." + +#: ../../library/time.rst:748 +msgid "" +"Clock that cannot be set and represents monotonic time since some " +"unspecified starting point." +msgstr "无法设置的时钟,表示自某些未指定的起点以来的单调时间。" + +#: ../../library/time.rst:758 +msgid "" +"Similar to :data:`CLOCK_MONOTONIC`, but provides access to a raw hardware-" +"based time that is not subject to NTP adjustments." +msgstr "类似于 :data:`CLOCK_MONOTONIC` ,但可以访问不受NTP调整影响的原始硬件时间。" + +#: ../../library/time.rst:762 +msgid "" +":ref:`Availability `: Linux 2.6.28 and newer, macOS 10.12 and " +"newer." +msgstr ":ref:`可用性 `: Linux 2.6.28 和更新版本, macOS 10.12 和更新版本。" + +#: ../../library/time.rst:768 ../../library/time.rst:777 +msgid "High-resolution per-process timer from the CPU." +msgstr "来自CPU的高分辨率每进程计时器。" + +#: ../../library/time.rst:780 +msgid "" +":ref:`Availability `: FreeBSD, NetBSD 7 or later, OpenBSD." +msgstr ":ref:`可用性 `: FreeBSD, NetBSD 7 或更新, OpenBSD." + +#: ../../library/time.rst:785 +msgid "" +"`International Atomic Time `_" +msgstr "" +"`国际原子时间 `_" + +#: ../../library/time.rst:787 +msgid "" +"The system must have a current leap second table in order for this to give " +"the correct answer. PTP or NTP software can maintain a leap second table." +msgstr "该系统必须有一个当前闰秒表以便能给出正确的回答。 PTP 或 NTP 软件可以用来维护闰秒表。" + +#: ../../library/time.rst:791 +msgid ":ref:`Availability `: Linux." +msgstr ":ref:`可用性 `: Linux。" + +#: ../../library/time.rst:796 +msgid "Thread-specific CPU-time clock." +msgstr "特定于线程的CPU时钟。" + +#: ../../library/time.rst:805 +msgid "" +"Time whose absolute value is the time the system has been running and not " +"suspended, providing accurate uptime measurement, both absolute and " +"interval." +msgstr "该时间的绝对值是系统运行且未暂停的时间,提供准确的正常运行时间测量,包括绝对值和间隔值。" + +#: ../../library/time.rst:810 +msgid ":ref:`Availability `: FreeBSD, OpenBSD 5.5 or later." +msgstr ":ref:`可用性 `: FreeBSD, OpenBSD 5.5 或更新。" + +#: ../../library/time.rst:816 +msgid "" +"Clock that increments monotonically, tracking the time since an arbitrary " +"point, unaffected by frequency or time adjustments and not incremented while" +" the system is asleep." +msgstr "单调递增的时钟,记录从一个任意起点开始的时间,不受频率或时间调整的影响,并且当系统休眠时将不会递增。" + +#: ../../library/time.rst:821 +msgid ":ref:`Availability `: macOS 10.12 and newer." +msgstr ":ref:`可用性 `: macOS 10.12 和更新版本。" + +#: ../../library/time.rst:824 +msgid "" +"The following constant is the only parameter that can be sent to " +":func:`clock_settime`." +msgstr "以下常量是唯一可以发送到 :func:`clock_settime` 的参数。" + +#: ../../library/time.rst:830 +msgid "" +"System-wide real-time clock. Setting this clock requires appropriate " +"privileges." +msgstr "系统范围的实时时钟。 设置此时钟需要适当的权限。" + +#: ../../library/time.rst:841 +msgid "Timezone Constants" +msgstr "时区常量" + +#: ../../library/time.rst:845 +msgid "" +"The offset of the local DST timezone, in seconds west of UTC, if one is " +"defined. This is negative if the local DST timezone is east of UTC (as in " +"Western Europe, including the UK). Only use this if ``daylight`` is " +"nonzero. See note below." +msgstr "" +"本地DST时区的偏移量,以UTC为单位的秒数,如果已定义。如果当地DST时区在UTC以东(如在西欧,包括英国),则是负数。 只有当 " +"``daylight`` 非零时才使用它。 见下面的注释。" + +#: ../../library/time.rst:851 +msgid "Nonzero if a DST timezone is defined. See note below." +msgstr "如果定义了DST时区,则为非零。 见下面的注释。" + +#: ../../library/time.rst:855 +msgid "" +"The offset of the local (non-DST) timezone, in seconds west of UTC (negative" +" in most of Western Europe, positive in the US, zero in the UK). See note " +"below." +msgstr "本地(非DST)时区的偏移量,UTC以西的秒数(西欧大部分地区为负,美国为正,英国为零)。 见下面的注释。" + +#: ../../library/time.rst:860 +msgid "" +"A tuple of two strings: the first is the name of the local non-DST timezone," +" the second is the name of the local DST timezone. If no DST timezone is " +"defined, the second string should not be used. See note below." +msgstr "" +"两个字符串的元组:第一个是本地非DST时区的名称,第二个是本地DST时区的名称。 如果未定义DST时区,则不应使用第二个字符串。 见下面的注释。" + +#: ../../library/time.rst:866 +msgid "" +"For the above Timezone constants (:data:`altzone`, :data:`daylight`, " +":data:`timezone`, and :data:`tzname`), the value is determined by the " +"timezone rules in effect at module load time or the last time :func:`tzset` " +"is called and may be incorrect for times in the past. It is recommended to " +"use the :attr:`tm_gmtoff` and :attr:`tm_zone` results from :func:`localtime`" +" to obtain timezone information." +msgstr "" +"对于上述时区常量( :data:`altzone` 、 :data:`daylight` 、 :data:`timezone` 和 " +":data:`tzname` ),该值由模块加载时有效的时区规则确定,或者最后一次 :func:`tzset` " +"被调用时,并且在过去的时间可能不正确。建议使用来自 :func:`localtime` 结果的 :attr:`tm_gmtoff` 和 " +":attr:`tm_zone` 来获取时区信息。" + +#: ../../library/time.rst:876 +msgid "Module :mod:`datetime`" +msgstr "模块 :mod:`datetime`" + +#: ../../library/time.rst:876 +msgid "More object-oriented interface to dates and times." +msgstr "更多面向对象的日期和时间接口。" + +#: ../../library/time.rst:880 +msgid "Module :mod:`locale`" +msgstr "模块 :mod:`locale`" + +#: ../../library/time.rst:879 +msgid "" +"Internationalization services. The locale setting affects the " +"interpretation of many format specifiers in :func:`strftime` and " +":func:`strptime`." +msgstr "国际化服务。 区域设置会影响 :func:`strftime` 和 :func:`strptime` 中许多格式说明符的解析。" + +#: ../../library/time.rst:883 +msgid "Module :mod:`calendar`" +msgstr "模块 :mod:`calendar`" + +#: ../../library/time.rst:883 +msgid "" +"General calendar-related functions. :func:`~calendar.timegm` is the " +"inverse of :func:`gmtime` from this module." +msgstr "一般日历相关功能。这个模块的 :func:`~dalendar.timegm` 是函数 :func:`gmtime` 的反函数。" + +#: ../../library/time.rst:887 +msgid "Footnotes" +msgstr "备注" + +#: ../../library/time.rst:888 +msgid "" +"The use of ``%Z`` is now deprecated, but the ``%z`` escape that expands to " +"the preferred hour/minute offset is not supported by all ANSI C libraries. " +"Also, a strict reading of the original 1982 :rfc:`822` standard calls for a " +"two-digit year (``%y`` rather than ``%Y``), but practice moved to 4-digit " +"years long before the year 2000. After that, :rfc:`822` became obsolete and" +" the 4-digit year has been first recommended by :rfc:`1123` and then " +"mandated by :rfc:`2822`." +msgstr "" +"现在不推荐使用 ``%Z`` ,但是所有 ANSI C 库都不支持扩展为首选小时/分钟偏移量的 ``%z`` 转义符。 此外,严格的 1982 年原始 " +":rfc:`822` 标准要求两位数的年份( ``%y`` 而不是 ``%Y`` ),但是实际在2000年之前很久就转移到了4位数年。之后, " +":rfc:`822` 已经废弃了,4位数的年份首先被推荐 :rfc:`1123` ,然后被 :rfc:`2822` 强制执行。" diff --git a/library/timeit.po b/library/timeit.po new file mode 100644 index 000000000..e41631419 --- /dev/null +++ b/library/timeit.po @@ -0,0 +1,394 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) 2001-2022, Python Software Foundation +# This file is distributed under the same license as the Python package. +# FIRST AUTHOR , YEAR. +# +# Translators: +# Fred , 2018 +# Jack Wu , 2019 +# cdarlint , 2019 +# Alpha Du , 2019 +# Freesand Leo , 2022 +# +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: Python 3.9\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2022-11-04 14:34+0000\n" +"PO-Revision-Date: 2017-02-16 23:30+0000\n" +"Last-Translator: Freesand Leo , 2022\n" +"Language-Team: Chinese (China) (https://www.transifex.com/python-doc/teams/5390/zh_CN/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: zh_CN\n" +"Plural-Forms: nplurals=1; plural=0;\n" + +#: ../../library/timeit.rst:2 +msgid ":mod:`timeit` --- Measure execution time of small code snippets" +msgstr ":mod:`timeit` --- 测量小代码片段的执行时间" + +#: ../../library/timeit.rst:7 +msgid "**Source code:** :source:`Lib/timeit.py`" +msgstr "**源码:** :source:`Lib/timeit.py`" + +#: ../../library/timeit.rst:15 +msgid "" +"This module provides a simple way to time small bits of Python code. It has " +"both a :ref:`timeit-command-line-interface` as well as a :ref:`callable " +"` one. It avoids a number of common traps for measuring " +"execution times. See also Tim Peters' introduction to the \"Algorithms\" " +"chapter in the second edition of *Python Cookbook*, published by O'Reilly." +msgstr "" +"此模块提供了一种简单的方法来计算一小段 Python 代码的耗时。 它有 :ref:`timeit-command-line-interface` " +"以及一个 :ref:`可调用 ` 方法。 它避免了许多测量时间的常见陷阱。 另见 Tim Peter 在 " +"O'Reilly 出版的 *Python Cookbook* 第二版中“算法”章节的概述。" + +#: ../../library/timeit.rst:23 +msgid "Basic Examples" +msgstr "基本示例" + +#: ../../library/timeit.rst:25 +msgid "" +"The following example shows how the :ref:`timeit-command-line-interface` can" +" be used to compare three different expressions:" +msgstr "以下示例显示了如何使用 :ref:`timeit-command-line-interface` 来比较三个不同的表达式:" + +#: ../../library/timeit.rst:37 +msgid "This can be achieved from the :ref:`python-interface` with::" +msgstr "这可以通过 :ref:`python-interface` 实现 ::" + +#: ../../library/timeit.rst:47 +msgid "A callable can also be passed from the :ref:`python-interface`::" +msgstr "从 :ref:`python-interface` 还可以传出一个可调用对象::" + +#: ../../library/timeit.rst:52 +msgid "" +"Note however that :func:`.timeit` will automatically determine the number of" +" repetitions only when the command-line interface is used. In the " +":ref:`timeit-examples` section you can find more advanced examples." +msgstr "" +"但请注意 :func:`.timeit` 仅在使用命令行界面时会自动确定重复次数。 在 :ref:`timeit-examples` " +"一节你可以找到更多的进阶示例。" + +#: ../../library/timeit.rst:60 +msgid "Python Interface" +msgstr "Python 接口" + +#: ../../library/timeit.rst:62 +msgid "The module defines three convenience functions and a public class:" +msgstr "该模块定义了三个便利函数和一个公共类:" + +#: ../../library/timeit.rst:67 +msgid "" +"Create a :class:`Timer` instance with the given statement, *setup* code and " +"*timer* function and run its :meth:`.timeit` method with *number* " +"executions. The optional *globals* argument specifies a namespace in which " +"to execute the code." +msgstr "" +"使用给定语句、 *setup* 代码和 *timer* 函数创建一个 :class:`Timer` 实例,并执行 *number* 次其 " +":meth:`.timeit` 方法。可选的 *globals* 参数指定用于执行代码的命名空间。" + +#: ../../library/timeit.rst:72 ../../library/timeit.rst:83 +#: ../../library/timeit.rst:120 +msgid "The optional *globals* parameter was added." +msgstr "添加可选参数 *globals* 。" + +#: ../../library/timeit.rst:78 +msgid "" +"Create a :class:`Timer` instance with the given statement, *setup* code and " +"*timer* function and run its :meth:`.repeat` method with the given *repeat* " +"count and *number* executions. The optional *globals* argument specifies a " +"namespace in which to execute the code." +msgstr "" +"使用给定语句、 *setup* 代码和 *timer* 函数创建一个 :class:`Timer` 实例,并使用给定的 *repeat* 计数和 " +"*number* 执行运行其 :meth:`.repeat` 方法。可选的 *globals* 参数指定用于执行代码的命名空间。" + +#: ../../library/timeit.rst:86 ../../library/timeit.rst:181 +msgid "Default value of *repeat* changed from 3 to 5." +msgstr "*repeat* 的默认值由 3 更改为 5 。" + +#: ../../library/timeit.rst:91 +msgid "The default timer, which is always :func:`time.perf_counter`." +msgstr "默认的计时器,总是 :func:`time.perf_counter` 。" + +#: ../../library/timeit.rst:93 +msgid ":func:`time.perf_counter` is now the default timer." +msgstr ":func:`time.perf_counter` 现在是默认计时器。" + +#: ../../library/timeit.rst:99 +msgid "Class for timing execution speed of small code snippets." +msgstr "用于小代码片段的计数执行速度的类。" + +#: ../../library/timeit.rst:101 +msgid "" +"The constructor takes a statement to be timed, an additional statement used " +"for setup, and a timer function. Both statements default to ``'pass'``; the" +" timer function is platform-dependent (see the module doc string). *stmt* " +"and *setup* may also contain multiple statements separated by ``;`` or " +"newlines, as long as they don't contain multi-line string literals. The " +"statement will by default be executed within timeit's namespace; this " +"behavior can be controlled by passing a namespace to *globals*." +msgstr "" +"构造函数接受一个将计时的语句、一个用于设置的附加语句和一个定时器函数。两个语句都默认为 ``'pass'`` " +";计时器函数与平台有关(请参阅模块文档字符串)。 *stmt* 和 *setup* 也可能包含多个以 ``;`` " +"或换行符分隔的语句,只要它们不包含多行字符串文字即可。该语句默认在 timeit 的命名空间内执行;可以通过将命名空间传递给 *globals* " +"来控制此行为。" + +#: ../../library/timeit.rst:109 +msgid "" +"To measure the execution time of the first statement, use the " +":meth:`.timeit` method. The :meth:`.repeat` and :meth:`.autorange` methods " +"are convenience methods to call :meth:`.timeit` multiple times." +msgstr "" +"要测量第一个语句的执行时间,请使用 :meth:`.timeit` 方法。 :meth:`.repeat` 和 :meth:`.autorange` " +"方法是方便的方法来调用 :meth:`.timeit` 多次。" + +#: ../../library/timeit.rst:113 +msgid "" +"The execution time of *setup* is excluded from the overall timed execution " +"run." +msgstr "*setup* 的执行时间从总体计时执行中排除。" + +#: ../../library/timeit.rst:115 +msgid "" +"The *stmt* and *setup* parameters can also take objects that are callable " +"without arguments. This will embed calls to them in a timer function that " +"will then be executed by :meth:`.timeit`. Note that the timing overhead is " +"a little larger in this case because of the extra function calls." +msgstr "" +"*stmt* 和 *setup* 参数也可以使用不带参数的可调用对象。这将在一个计时器函数中嵌入对它们的调用,然后由 :meth:`.timeit` " +"执行。请注意,由于额外的函数调用,在这种情况下,计时开销会略大一些。" + +#: ../../library/timeit.rst:125 +msgid "" +"Time *number* executions of the main statement. This executes the setup " +"statement once, and then returns the time it takes to execute the main " +"statement a number of times, measured in seconds as a float. The argument is" +" the number of times through the loop, defaulting to one million. The main " +"statement, the setup statement and the timer function to be used are passed " +"to the constructor." +msgstr "" +"执行 *number* 次主要语句。这将执行一次 setup " +"语句,然后返回执行主语句多次所需的时间,以秒为单位测量为浮点数。参数是通过循环的次数,默认为一百万。要使用的主语句、 setup 语句和 timer " +"函数将传递给构造函数。" + +#: ../../library/timeit.rst:134 +msgid "" +"By default, :meth:`.timeit` temporarily turns off :term:`garbage collection`" +" during the timing. The advantage of this approach is that it makes " +"independent timings more comparable. The disadvantage is that GC may be an " +"important component of the performance of the function being measured. If " +"so, GC can be re-enabled as the first statement in the *setup* string. For " +"example::" +msgstr "" +"默认情况下, :meth:`.timeit` 暂时关闭 :term:`garbage collection` " +"。这种方法的优点在于它使独立时序更具可比性。缺点是GC可能是所测量功能性能的重要组成部分。如果是这样,可以在 *setup* " +"字符串中的第一个语句重新启用GC。例如::" + +#: ../../library/timeit.rst:146 +msgid "Automatically determine how many times to call :meth:`.timeit`." +msgstr "自动决定调用多少次 :meth:`.timeit` 。" + +#: ../../library/timeit.rst:148 +msgid "" +"This is a convenience function that calls :meth:`.timeit` repeatedly so that" +" the total time >= 0.2 second, returning the eventual (number of loops, time" +" taken for that number of loops). It calls :meth:`.timeit` with increasing " +"numbers from the sequence 1, 2, 5, 10, 20, 50, ... until the time taken is " +"at least 0.2 second." +msgstr "" +"这是一个便利函数,它反复调用 :meth:`.timeit` ,以便总时间 >= 0.2 秒,返回最终(循环次数,循环所用的时间)。它调用 " +":meth:`.timeit` 的次数以序列 1, 2, 5, 10, 20, 50, ... 递增,直到所用的时间至少为0.2秒。" + +#: ../../library/timeit.rst:154 +msgid "" +"If *callback* is given and is not ``None``, it will be called after each " +"trial with two arguments: ``callback(number, time_taken)``." +msgstr "" +"如果给出 *callback* 并且不是 ``None`` ,则在每次试验后将使用两个参数调用它: ``callback(number, " +"time_taken)`` 。" + +#: ../../library/timeit.rst:162 +msgid "Call :meth:`.timeit` a few times." +msgstr "调用 :meth:`.timeit` 几次。" + +#: ../../library/timeit.rst:164 +msgid "" +"This is a convenience function that calls the :meth:`.timeit` repeatedly, " +"returning a list of results. The first argument specifies how many times to" +" call :meth:`.timeit`. The second argument specifies the *number* argument " +"for :meth:`.timeit`." +msgstr "" +"这是一个方便的函数,它反复调用 :meth:`.timeit` ,返回结果列表。第一个参数指定调用 :meth:`.timeit` " +"的次数。第二个参数指定 :meth:`.timeit` 的 *number* 参数。" + +#: ../../library/timeit.rst:171 +msgid "" +"It's tempting to calculate mean and standard deviation from the result " +"vector and report these. However, this is not very useful. In a typical " +"case, the lowest value gives a lower bound for how fast your machine can run" +" the given code snippet; higher values in the result vector are typically " +"not caused by variability in Python's speed, but by other processes " +"interfering with your timing accuracy. So the :func:`min` of the result is " +"probably the only number you should be interested in. After that, you " +"should look at the entire vector and apply common sense rather than " +"statistics." +msgstr "" +"从结果向量计算并报告平均值和标准差这些是很诱人的。但是,这不是很有用。在典型情况下,最低值给出了机器运行给定代码段的速度的下限;结果向量中较高的值通常不是由Python的速度变化引起的,而是由于其他过程干扰你的计时准确性。所以结果的" +" :func:`min` 可能是你应该感兴趣的唯一数字。之后,你应该看看整个向量并应用常识而不是统计。" + +#: ../../library/timeit.rst:187 +msgid "Helper to print a traceback from the timed code." +msgstr "帮助程序从计时代码中打印回溯。" + +#: ../../library/timeit.rst:189 +msgid "Typical use::" +msgstr "典型使用::" + +#: ../../library/timeit.rst:197 +msgid "" +"The advantage over the standard traceback is that source lines in the " +"compiled template will be displayed. The optional *file* argument directs " +"where the traceback is sent; it defaults to :data:`sys.stderr`." +msgstr "" +"与标准回溯相比,优势在于将显示已编译模板中的源行。可选的 *file* 参数指向发送回溯的位置;它默认为 :data:`sys.stderr` 。" + +#: ../../library/timeit.rst:205 +msgid "Command-Line Interface" +msgstr "命令行界面" + +#: ../../library/timeit.rst:207 +msgid "" +"When called as a program from the command line, the following form is used::" +msgstr "从命令行调用程序时,使用以下表单::" + +#: ../../library/timeit.rst:211 +msgid "Where the following options are understood:" +msgstr "如果了解以下选项:" + +#: ../../library/timeit.rst:217 +msgid "how many times to execute 'statement'" +msgstr "执行 '语句' 多少次" + +#: ../../library/timeit.rst:221 +msgid "how many times to repeat the timer (default 5)" +msgstr "重复计时器的次数(默认为5)" + +#: ../../library/timeit.rst:225 +msgid "statement to be executed once initially (default ``pass``)" +msgstr "最初要执行一次的语句(默认为 ``pass`` )" + +#: ../../library/timeit.rst:229 +msgid "" +"measure process time, not wallclock time, using :func:`time.process_time` " +"instead of :func:`time.perf_counter`, which is the default" +msgstr "" +"测量进程时间,而不是 wallclock 时间,使用 :func:`time.process_time` 而不是 " +":func:`time.perf_counter` ,这是默认值" + +#: ../../library/timeit.rst:236 +msgid "" +"specify a time unit for timer output; can select nsec, usec, msec, or sec" +msgstr "指定定时器输出的时间单位;可以选择 nsec,usec,msec或sec" + +#: ../../library/timeit.rst:242 +msgid "print raw timing results; repeat for more digits precision" +msgstr "打印原始计时结果;重复更多位数精度" + +#: ../../library/timeit.rst:246 +msgid "print a short usage message and exit" +msgstr "打印一条简短的使用信息并退出" + +#: ../../library/timeit.rst:248 +msgid "" +"A multi-line statement may be given by specifying each line as a separate " +"statement argument; indented lines are possible by enclosing an argument in " +"quotes and using leading spaces. Multiple :option:`-s` options are treated " +"similarly." +msgstr "" +"可以通过将每一行指定为单独的语句参数来给出多行语句;通过在引号中包含参数并使用前导空格可以缩进行。多个 :option:`-s` 选项的处理方式相似。" + +#: ../../library/timeit.rst:253 +msgid "" +"If :option:`-n` is not given, a suitable number of loops is calculated by " +"trying increasing numbers from the sequence 1, 2, 5, 10, 20, 50, ... until " +"the total time is at least 0.2 seconds." +msgstr "" +"如果未给出 :option:`-n`,则会通过尝试按序列 1, 2, 5, 10, 20, 50, ... " +"递增的数值来计算合适的循环次数,直到总计时间至少为 0.2 秒。" + +#: ../../library/timeit.rst:257 +msgid "" +":func:`default_timer` measurements can be affected by other programs running" +" on the same machine, so the best thing to do when accurate timing is " +"necessary is to repeat the timing a few times and use the best time. The " +":option:`-r` option is good for this; the default of 5 repetitions is " +"probably enough in most cases. You can use :func:`time.process_time` to " +"measure CPU time." +msgstr "" +":func:`default_timer` 测量可能受到在同一台机器上运行的其他程序的影响,因此在需要精确计时时最好的做法是重复几次计时并使用最佳时间。" +" :option:`-r` 选项对此有利;在大多数情况下,默认的 5 次重复可能就足够了。 你可以使用 " +":func:`time.process_time` 来测量CPU时间。" + +#: ../../library/timeit.rst:265 +msgid "" +"There is a certain baseline overhead associated with executing a pass " +"statement. The code here doesn't try to hide it, but you should be aware of " +"it. The baseline overhead can be measured by invoking the program without " +"arguments, and it might differ between Python versions." +msgstr "" +"执行 pass " +"语句会产生一定的基线开销。这里的代码不会试图隐藏它,但你应该知道它。可以通过不带参数调用程序来测量基线开销,并且Python版本之间可能会有所不同。" + +#: ../../library/timeit.rst:274 +msgid "Examples" +msgstr "示例" + +#: ../../library/timeit.rst:276 +msgid "" +"It is possible to provide a setup statement that is executed only once at " +"the beginning:" +msgstr "可以提供一个在开头只执行一次的 setup 语句:" + +#: ../../library/timeit.rst:285 +msgid "" +"In the output, there are three fields. The loop count, which tells you how " +"many times the statement body was run per timing loop repetition. The " +"repetition count ('best of 5') which tells you how many times the timing " +"loop was repeated, and finally the time the statement body took on average " +"within the best repetition of the timing loop. That is, the time the fastest" +" repetition took divided by the loop count." +msgstr "" +"在输出信息中,共有三个字段。 首先是 loop count,它告诉你每个计时循环重复运行了多少次语句体。 然后是 repetition count " +"('best of 5'),它告诉你计时循环重复了多少次,最后是语句体在计时循环重复中最好的平均耗时。 即最快一次重复的耗时除以循环计数。" + +#: ../../library/timeit.rst:300 +msgid "The same can be done using the :class:`Timer` class and its methods::" +msgstr "使用 :class:`Timer` 类及其方法可以完成同样的操作::" + +#: ../../library/timeit.rst:310 +msgid "" +"The following examples show how to time expressions that contain multiple " +"lines. Here we compare the cost of using :func:`hasattr` vs. " +":keyword:`try`/:keyword:`except` to test for missing and present object " +"attributes:" +msgstr "" +"以下示例显示如何计算包含多行的表达式。 在这里我们对比使用 :func:`hasattr` 与 " +":keyword:`try`/:keyword:`except` 的开销来测试缺失与提供对象属性:" + +#: ../../library/timeit.rst:356 +msgid "" +"To give the :mod:`timeit` module access to functions you define, you can " +"pass a *setup* parameter which contains an import statement::" +msgstr "要让 :mod:`timeit` 模块访问你定义的函数,你可以传递一个包含 import 语句的 *setup* 参数::" + +#: ../../library/timeit.rst:367 +msgid "" +"Another option is to pass :func:`globals` to the *globals* parameter, which" +" will cause the code to be executed within your current global namespace. " +"This can be more convenient than individually specifying imports::" +msgstr "" +"另一种选择是将 :func:`globals` 传递给 *globals* 参数,这将导致代码在当前的全局命名空间中执行。这比单独指定 import " +"更方便 ::" diff --git a/library/tk.po b/library/tk.po new file mode 100644 index 000000000..595095f80 --- /dev/null +++ b/library/tk.po @@ -0,0 +1,66 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) 2001-2022, Python Software Foundation +# This file is distributed under the same license as the Python package. +# FIRST AUTHOR , YEAR. +# +# Translators: +# ailin zhang , 2018 +# Freesand Leo , 2021 +# thoma ai, 2022 +# +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: Python 3.9\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2022-11-04 14:34+0000\n" +"PO-Revision-Date: 2017-02-16 23:31+0000\n" +"Last-Translator: thoma ai, 2022\n" +"Language-Team: Chinese (China) (https://www.transifex.com/python-doc/teams/5390/zh_CN/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: zh_CN\n" +"Plural-Forms: nplurals=1; plural=0;\n" + +#: ../../library/tk.rst:5 +msgid "Graphical User Interfaces with Tk" +msgstr "Tk图形用户界面(GUI) " + +#: ../../library/tk.rst:13 +msgid "" +"Tk/Tcl has long been an integral part of Python. It provides a robust and " +"platform independent windowing toolkit, that is available to Python " +"programmers using the :mod:`tkinter` package, and its extension, the " +":mod:`tkinter.tix` and the :mod:`tkinter.ttk` modules." +msgstr "" +"Tcl/Tk集成到Python中已经有一些年头了。Python程序员可以通过 :mod:`tkinter` 包和它的扩展, " +":mod:`tkinter.tix` 模块和 :mod:`tkinter.ttk` 模块,来使用这套鲁棒的、平台无关的窗口工具集。" + +#: ../../library/tk.rst:18 +msgid "" +"The :mod:`tkinter` package is a thin object-oriented layer on top of Tcl/Tk." +" To use :mod:`tkinter`, you don't need to write Tcl code, but you will need " +"to consult the Tk documentation, and occasionally the Tcl documentation. " +":mod:`tkinter` is a set of wrappers that implement the Tk widgets as Python " +"classes." +msgstr "" +":mod:`tkinter` 包是使用面向对象方式对 Tcl/Tk 进行的一层薄包装。 使用 :mod:`tkinter`,你不需要写 Tcl " +"代码,但你将需要参阅 Tk 文档,有时还需要参阅 Tcl 文档。 :mod:`tkinter` 是一组包装器,它将 Tk 的可视化部件实现为相应的 " +"Python 类。" + +#: ../../library/tk.rst:24 +msgid "" +":mod:`tkinter`'s chief virtues are that it is fast, and that it usually " +"comes bundled with Python. Although its standard documentation is weak, good" +" material is available, which includes: references, tutorials, a book and " +"others. :mod:`tkinter` is also famous for having an outdated look and feel, " +"which has been vastly improved in Tk 8.5. Nevertheless, there are many other" +" GUI libraries that you could be interested in. The Python wiki lists " +"several alternative `GUI frameworks and tools " +"`_." +msgstr "" +":mod:`tkinter` 的主要特点是速度很快,并且通常直接附带在 Python 中。 " +"虽然它的官方文档做得不好,但还是有许多可用的资源,包括:在线参考、教程、入门书等等。 :mod:`tkinter` 还有众所周知的较过时的外观界面,这在" +" Tk 8.5 中已得到很大改进。 无论如何,你还可以考虑许多其他的 GUI 库。 Python wiki 例出了一些替代性的 `GUI 框架和工具 " +"`_。" diff --git a/library/tkinter.colorchooser.po b/library/tkinter.colorchooser.po new file mode 100644 index 000000000..38f56feb8 --- /dev/null +++ b/library/tkinter.colorchooser.po @@ -0,0 +1,56 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) 2001-2022, Python Software Foundation +# This file is distributed under the same license as the Python package. +# FIRST AUTHOR , YEAR. +# +# Translators: +# Freesand Leo , 2020 +# +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: Python 3.9\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2022-11-04 14:34+0000\n" +"PO-Revision-Date: 2020-05-31 09:31+0000\n" +"Last-Translator: Freesand Leo , 2020\n" +"Language-Team: Chinese (China) (https://www.transifex.com/python-doc/teams/5390/zh_CN/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: zh_CN\n" +"Plural-Forms: nplurals=1; plural=0;\n" + +#: ../../library/tkinter.colorchooser.rst:2 +msgid ":mod:`tkinter.colorchooser` --- Color choosing dialog" +msgstr ":mod:`tkinter.colorchooser` --- 颜色选择对话框" + +#: ../../library/tkinter.colorchooser.rst:8 +msgid "**Source code:** :source:`Lib/tkinter/colorchooser.py`" +msgstr "**源代码:** :source:`Lib/tkinter/colorchooser.py`" + +#: ../../library/tkinter.colorchooser.rst:12 +msgid "" +"The :mod:`tkinter.colorchooser` module provides the :class:`Chooser` class " +"as an interface to the native color picker dialog. ``Chooser`` implements a " +"modal color choosing dialog window. The ``Chooser`` class inherits from the " +":class:`~tkinter.commondialog.Dialog` class." +msgstr "" +":mod:`tkinter.colorchooser` 模块提供了 :class:`Chooser` 类作为原生颜色选择对话框的接口。 " +"``Chooser`` 实现了一个模式颜色选择对话框窗口。 ``Chooser`` 类继承自 " +":class:`~tkinter.commondialog.Dialog` 类。" + +#: ../../library/tkinter.colorchooser.rst:21 +msgid "" +"Create a color choosing dialog. A call to this method will show the window, " +"wait for the user to make a selection, and return the selected color (or " +"``None``) to the caller." +msgstr "创建一个颜色选择对话框。 调用此方法将显示相应窗口,等待用户进行选择,并将选择的颜色 (或 ``None``) 返回给调用者。" + +#: ../../library/tkinter.colorchooser.rst:28 +msgid "Module :mod:`tkinter.commondialog`" +msgstr "模块 :mod:`tkinter.commondialog`" + +#: ../../library/tkinter.colorchooser.rst:29 +msgid "Tkinter standard dialog module" +msgstr "Tkinter 标准对话框模块" diff --git a/library/tkinter.dnd.po b/library/tkinter.dnd.po new file mode 100644 index 000000000..e8bccc67a --- /dev/null +++ b/library/tkinter.dnd.po @@ -0,0 +1,122 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) 2001-2025, Python Software Foundation +# This file is distributed under the same license as the Python package. +# FIRST AUTHOR , YEAR. +# +# Translators: +# Freesand Leo , 2020 +# Rafael Fontenelle , 2025 +# +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: Python 3.9\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2025-02-07 16:40+0000\n" +"PO-Revision-Date: 2020-05-31 09:31+0000\n" +"Last-Translator: Rafael Fontenelle , 2025\n" +"Language-Team: Chinese (China) (https://app.transifex.com/python-doc/teams/5390/zh_CN/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: zh_CN\n" +"Plural-Forms: nplurals=1; plural=0;\n" + +#: ../../library/tkinter.dnd.rst:2 +msgid ":mod:`tkinter.dnd` --- Drag and drop support" +msgstr ":mod:`tkinter.dnd` --- 拖放操作支持" + +#: ../../library/tkinter.dnd.rst:8 +msgid "**Source code:** :source:`Lib/tkinter/dnd.py`" +msgstr "**源代码:** :source:`Lib/tkinter/dnd.py`" + +#: ../../library/tkinter.dnd.rst:12 +msgid "" +"This is experimental and due to be deprecated when it is replaced with the " +"Tk DND." +msgstr "此模块是实验性的且在为 Tk DND 所替代后将被弃用。" + +#: ../../library/tkinter.dnd.rst:15 +msgid "" +"The :mod:`tkinter.dnd` module provides drag-and-drop support for objects " +"within a single application, within the same window or between windows. To " +"enable an object to be dragged, you must create an event binding for it that" +" starts the drag-and-drop process. Typically, you bind a ButtonPress event " +"to a callback function that you write (see :ref:`Bindings-and-Events`). The " +"function should call :func:`dnd_start`, where 'source' is the object to be " +"dragged, and 'event' is the event that invoked the call (the argument to " +"your callback function)." +msgstr "" +":mod:`tkinter.dnd` 模块为单个应用内部的对象提供了在同一窗口中或多个窗口间的拖放操作支持。 " +"要将对象设为可拖放,你必须为其创建启动拖放进程的事件绑定。 通常,你要将 ButtonPress 事件绑定到你所编写的回调函数 (参见 " +":ref:`Bindings-and-Events`)。 该函数应当调用 :func:`dnd_start`,其中 'source' 为要拖动的对象,而" +" 'event' 为被唤起的事件(你的回调函数的参数)。" + +#: ../../library/tkinter.dnd.rst:23 +msgid "Selection of a target object occurs as follows:" +msgstr "目标对象的选择方式如下:" + +#: ../../library/tkinter.dnd.rst:25 +msgid "Top-down search of area under mouse for target widget" +msgstr "从顶至底地在鼠标之下的区域中搜索目标控件" + +#: ../../library/tkinter.dnd.rst:27 +msgid "Target widget should have a callable *dnd_accept* attribute" +msgstr "目标控件应当具有一个指向可调用对象的 *dnd_accept* 属性" + +#: ../../library/tkinter.dnd.rst:28 +msgid "" +"If *dnd_accept* is not present or returns None, search moves to parent " +"widget" +msgstr "如果 *dnd_accept* 不存在或是返回 None,则将转至父控件中搜索" + +#: ../../library/tkinter.dnd.rst:29 +msgid "If no target widget is found, then the target object is None" +msgstr "如果目标控件未找到,则目标对象为 None" + +#: ../../library/tkinter.dnd.rst:31 +msgid "Call to *.dnd_leave(source, event)*" +msgstr "调用 *.dnd_leave(source, event)*" + +#: ../../library/tkinter.dnd.rst:32 +msgid "Call to *.dnd_enter(source, event)*" +msgstr "调用 *.dnd_enter(source, event)*" + +#: ../../library/tkinter.dnd.rst:33 +msgid "Call to *.dnd_commit(source, event)* to notify of drop" +msgstr "调用 *.dnd_commit(source, event)* 来通知释放" + +#: ../../library/tkinter.dnd.rst:34 +msgid "" +"Call to *.dnd_end(target, event)* to signal end of drag-and-drop" +msgstr "调用 *.dnd_end(target, event)* 来表明拖放的结束" + +#: ../../library/tkinter.dnd.rst:39 +msgid "" +"The *DndHandler* class handles drag-and-drop events tracking Motion and " +"ButtonRelease events on the root of the event widget." +msgstr "*DndHandler* 类处理拖放事件,在事件控件的根对象上跟踪 Motion 和 ButtonRelease 事件。" + +#: ../../library/tkinter.dnd.rst:44 +msgid "Cancel the drag-and-drop process." +msgstr "取消拖放进程。" + +#: ../../library/tkinter.dnd.rst:48 +msgid "Execute end of drag-and-drop functions." +msgstr "执行结束播放函数。" + +#: ../../library/tkinter.dnd.rst:52 +msgid "Inspect area below mouse for target objects while drag is performed." +msgstr "在执行拖动期间为目标对象检查鼠标之下的区域。" + +#: ../../library/tkinter.dnd.rst:56 +msgid "Signal end of drag when the release pattern is triggered." +msgstr "当释放模式被触发时表明拖动的结束。" + +#: ../../library/tkinter.dnd.rst:60 +msgid "Factory function for drag-and-drop process." +msgstr "用于拖放进程的工厂函数。" + +#: ../../library/tkinter.dnd.rst:64 +msgid ":ref:`Bindings-and-Events`" +msgstr ":ref:`Bindings-and-Events`" diff --git a/library/tkinter.font.po b/library/tkinter.font.po new file mode 100644 index 000000000..0a6ce97ae --- /dev/null +++ b/library/tkinter.font.po @@ -0,0 +1,171 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) 2001-2022, Python Software Foundation +# This file is distributed under the same license as the Python package. +# FIRST AUTHOR , YEAR. +# +# Translators: +# Alex Ding , 2020 +# Freesand Leo , 2020 +# +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: Python 3.9\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2022-11-04 14:34+0000\n" +"PO-Revision-Date: 2020-05-31 09:31+0000\n" +"Last-Translator: Freesand Leo , 2020\n" +"Language-Team: Chinese (China) (https://www.transifex.com/python-doc/teams/5390/zh_CN/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: zh_CN\n" +"Plural-Forms: nplurals=1; plural=0;\n" + +#: ../../library/tkinter.font.rst:2 +msgid ":mod:`tkinter.font` --- Tkinter font wrapper" +msgstr ":mod:`tkinter.font` --- Tkinter 字体封装" + +#: ../../library/tkinter.font.rst:8 +msgid "**Source code:** :source:`Lib/tkinter/font.py`" +msgstr "**源代码:** :source:`Lib/tkinter/font.py`" + +#: ../../library/tkinter.font.rst:12 +msgid "" +"The :mod:`tkinter.font` module provides the :class:`Font` class for creating" +" and using named fonts." +msgstr ":mod:`tkinter.font` 模块提供用于创建和使用命名字体的 :class:`Font` 类。" + +#: ../../library/tkinter.font.rst:15 +msgid "The different font weights and slants are:" +msgstr "不同的字体粗细和倾斜是:" + +#: ../../library/tkinter.font.rst:24 +msgid "" +"The :class:`Font` class represents a named font. *Font* instances are given " +"unique names and can be specified by their family, size, and style " +"configuration. Named fonts are Tk's method of creating and identifying fonts" +" as a single object, rather than specifying a font by its attributes with " +"each occurrence." +msgstr "" +":class:`Font` 类表示命名字体。*Font* 实例具有唯一的名称,可以通过其族、大小和样式配置进行指定。命名字体是 Tk " +"将字体创建和标识为单个对象的方法,而不是通过每次出现时的属性来指定字体。" + +#: ../../library/tkinter.font.rst:30 +msgid "arguments:" +msgstr "参数:" + +#: ../../library/tkinter.font.rst:0 +msgid "*font* - font specifier tuple (family, size, options)" +msgstr "*font* - 字体指示符元组 (family, size, options)" + +#: ../../library/tkinter.font.rst:0 +msgid "*name* - unique font name" +msgstr "*name* - 唯一的字体名" + +#: ../../library/tkinter.font.rst:0 +msgid "*exists* - self points to existing named font if true" +msgstr "*exists* - 指向现有命名字体(如果有)" + +#: ../../library/tkinter.font.rst:36 +msgid "additional keyword options (ignored if *font* is specified):" +msgstr "其他关键字选项(如果指定了 *font*,则忽略):" + +#: ../../library/tkinter.font.rst:0 +msgid "*family* - font family i.e. Courier, Times" +msgstr "*family* - 字体系列,例如 Courier,Times" + +#: ../../library/tkinter.font.rst:0 +msgid "*size* - font size" +msgstr "*size* - 字体大小" + +#: ../../library/tkinter.font.rst:0 +msgid "If *size* is positive it is interpreted as size in points." +msgstr "如果 *size* 为正数,则解释为以磅为单位的大小。" + +#: ../../library/tkinter.font.rst:0 +msgid "If *size* is a negative number its absolute value is treated" +msgstr "如果 *size* 是负数,则将其绝对值" + +#: ../../library/tkinter.font.rst:0 +msgid "as size in pixels." +msgstr "解释为以像素为单位的大小。" + +#: ../../library/tkinter.font.rst:0 +msgid "*weight* - font emphasis (NORMAL, BOLD)" +msgstr "*weight* - 字体强调 (NORMAL, BOLD)(普通,加粗)" + +#: ../../library/tkinter.font.rst:0 +msgid "*slant* - ROMAN, ITALIC" +msgstr "*slant* - ROMAN, ITALIC(正体,斜体)" + +#: ../../library/tkinter.font.rst:0 +msgid "*underline* - font underlining (0 - none, 1 - underline)" +msgstr "*underline* - 字体下划线(0 - 无下划线,1 - 有下划线)" + +#: ../../library/tkinter.font.rst:0 +msgid "*overstrike* - font strikeout (0 - none, 1 - strikeout)" +msgstr "*overstrike* - 字体删除线(0 - 无删除线,1 - 有删除线)" + +#: ../../library/tkinter.font.rst:50 +msgid "Return the attributes of the font." +msgstr "返回字体的属性。" + +#: ../../library/tkinter.font.rst:54 +msgid "Retrieve an attribute of the font." +msgstr "检索字体的某一个属性值。" + +#: ../../library/tkinter.font.rst:58 +msgid "Modify attributes of the font." +msgstr "修改字体的某一个属性值。" + +#: ../../library/tkinter.font.rst:62 +msgid "Return new instance of the current font." +msgstr "返回当前字体的新实例。" + +#: ../../library/tkinter.font.rst:66 +msgid "" +"Return amount of space the text would occupy on the specified display when " +"formatted in the current font. If no display is specified then the main " +"application window is assumed." +msgstr "返回以当前字体格式化时文本将在指定显示上占用的空间量。如果未指定显示,则假定为主应用程序窗口。" + +#: ../../library/tkinter.font.rst:72 +msgid "Return font-specific data. Options include:" +msgstr "返回特定字体的数据。选项包括:" + +#: ../../library/tkinter.font.rst:76 +msgid "*ascent* - distance between baseline and highest point that a" +msgstr "*ascent* - 基线和最高点之间的距离" + +#: ../../library/tkinter.font.rst:76 ../../library/tkinter.font.rst:79 +msgid "character of the font can occupy" +msgstr "(在该字体中的一个字符可以占用的空间中)" + +#: ../../library/tkinter.font.rst:79 +msgid "*descent* - distance between baseline and lowest point that a" +msgstr "*descent* - 基线和最低点之间的距离" + +#: ../../library/tkinter.font.rst:82 +msgid "*linespace* - minimum vertical separation necessary between any two" +msgstr "*linespace* - 所需最小垂直间距(在两个" + +#: ../../library/tkinter.font.rst:82 +msgid "characters of the font that ensures no vertical overlap between lines." +msgstr "该字体的字符间,使得这两个字符在垂直方向上不重叠)。" + +#: ../../library/tkinter.font.rst:84 +msgid "*fixed* - 1 if font is fixed-width else 0" +msgstr "*fixed* - 如果该字体宽度被固定则为1,否则为0。" + +#: ../../library/tkinter.font.rst:88 +msgid "Return the different font families." +msgstr "返回不同的字体系列。" + +#: ../../library/tkinter.font.rst:92 +msgid "Return the names of defined fonts." +msgstr "返回定义字体的名字。" + +#: ../../library/tkinter.font.rst:96 +msgid "Return a :class:`Font` representation of a tk named font." +msgstr "返回一个 :class:`Font` 类,代表一个 tk 命名的字体。" diff --git a/library/tkinter.messagebox.po b/library/tkinter.messagebox.po new file mode 100644 index 000000000..caa6791b6 --- /dev/null +++ b/library/tkinter.messagebox.po @@ -0,0 +1,57 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) 2001-2022, Python Software Foundation +# This file is distributed under the same license as the Python package. +# FIRST AUTHOR , YEAR. +# +# Translators: +# Freesand Leo , 2020 +# +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: Python 3.9\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2022-11-04 14:34+0000\n" +"PO-Revision-Date: 2020-05-31 09:31+0000\n" +"Last-Translator: Freesand Leo , 2020\n" +"Language-Team: Chinese (China) (https://www.transifex.com/python-doc/teams/5390/zh_CN/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: zh_CN\n" +"Plural-Forms: nplurals=1; plural=0;\n" + +#: ../../library/tkinter.messagebox.rst:2 +msgid ":mod:`tkinter.messagebox` --- Tkinter message prompts" +msgstr ":mod:`tkinter.messagebox` --- Tkinter 消息提示" + +#: ../../library/tkinter.messagebox.rst:8 +msgid "**Source code:** :source:`Lib/tkinter/messagebox.py`" +msgstr "**源代码:** :source:`Lib/tkinter/messagebox.py`" + +#: ../../library/tkinter.messagebox.rst:12 +msgid "" +"The :mod:`tkinter.messagebox` module provides a template base class as well " +"as a variety of convenience methods for commonly used configurations. The " +"message boxes are modal and will return a subset of (True, False, OK, None, " +"Yes, No) based on the user's selection. Common message box styles and " +"layouts include but are not limited to:" +msgstr "" +":mod:`tkinter.messagebox` 模块提供了一个模板基类以及多个常用配置的便捷方法。 消息框为模式窗口并将基于用户的选择返回 " +"(True, False, OK, None, Yes, No) 的一个子集。 常用消息框风格和布局包括但不限于:" + +#: ../../library/tkinter.messagebox.rst:22 +msgid "Create a default information message box." +msgstr "创建一个默认信息消息框。" + +#: ../../library/tkinter.messagebox.rst:24 +msgid "**Information message box**" +msgstr "**信息消息框**" + +#: ../../library/tkinter.messagebox.rst:28 +msgid "**Warning message boxes**" +msgstr "**警告消息框**" + +#: ../../library/tkinter.messagebox.rst:33 +msgid "**Question message boxes**" +msgstr "**疑问消息框**" diff --git a/library/tkinter.po b/library/tkinter.po new file mode 100644 index 000000000..c4758b599 --- /dev/null +++ b/library/tkinter.po @@ -0,0 +1,1708 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) 2001-2025, Python Software Foundation +# This file is distributed under the same license as the Python package. +# FIRST AUTHOR , YEAR. +# +# Translators: +# Menghua Xiao , 2018 +# ailin zhang , 2018 +# Alpha Du , 2019 +# cdarlint , 2019 +# 钢 彭 , 2019 +# ppcfish , 2020 +# Alex Ding , 2020 +# Y. Z. Chen <754097987@qq.com>, 2021 +# Dai Xu , 2022 +# Jiuh.star , 2022 +# Freesand Leo , 2022 +# Rafael Fontenelle , 2025 +# +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: Python 3.9\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2025-02-07 16:40+0000\n" +"PO-Revision-Date: 2017-02-16 23:31+0000\n" +"Last-Translator: Rafael Fontenelle , 2025\n" +"Language-Team: Chinese (China) (https://app.transifex.com/python-doc/teams/5390/zh_CN/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: zh_CN\n" +"Plural-Forms: nplurals=1; plural=0;\n" + +#: ../../library/tkinter.rst:2 +msgid ":mod:`tkinter` --- Python interface to Tcl/Tk" +msgstr ":mod:`tkinter` —— Tcl/Tk 的 Python 接口" + +#: ../../library/tkinter.rst:9 +msgid "**Source code:** :source:`Lib/tkinter/__init__.py`" +msgstr "**源代码:** :source:`Lib/tkinter/__init__.py`" + +#: ../../library/tkinter.rst:13 +msgid "" +"The :mod:`tkinter` package (\"Tk interface\") is the standard Python " +"interface to the Tcl/Tk GUI toolkit. Both Tk and :mod:`tkinter` are " +"available on most Unix platforms, including macOS, as well as on Windows " +"systems." +msgstr "" +":mod:`tkinter` 包 (\"Tk 接口\") 是针对 Tcl/Tk GUI 工具包的标准 Python 接口。 Tk 和 " +":mod:`tkinter` 在大多数 Unix 平台,包括 macOS,以及 Windows 系统上均可使用。" + +#: ../../library/tkinter.rst:17 +msgid "" +"Running ``python -m tkinter`` from the command line should open a window " +"demonstrating a simple Tk interface, letting you know that :mod:`tkinter` is" +" properly installed on your system, and also showing what version of Tcl/Tk " +"is installed, so you can read the Tcl/Tk documentation specific to that " +"version." +msgstr "" +"若在命令行执行 ``python -m tkinter``,应会弹出一个简单的 Tk 界面窗口, 表明 :mod:`tkinter` " +"包已安装完成,还会显示当前安装的 Tcl/Tk 版本,以便阅读对应版本的 Tcl/Tk 文档。" + +#: ../../library/tkinter.rst:26 +msgid "`TkDocs `_" +msgstr "`TkDocs `_" + +#: ../../library/tkinter.rst:25 +msgid "" +"Extensive tutorial on creating user interfaces with Tkinter. Explains key " +"concepts, and illustrates recommended approaches using the modern API." +msgstr "关于使用 Tkinter 创建用户界面的详细教程。 讲解了关键概念,并介绍了使用现代 API 的推荐方式。" + +#: ../../library/tkinter.rst:29 +msgid "" +"`Tkinter 8.5 reference: a GUI for Python `_" +msgstr "`Tkinter 8.5 参考手册:一种 Python GUI `_" + +#: ../../library/tkinter.rst:29 +msgid "" +"Reference documentation for Tkinter 8.5 detailing available classes, " +"methods, and options." +msgstr "详细讲解可用的类、方法和选项的 Tkinter 8.5 参考文档。" + +#: ../../library/tkinter.rst:31 +msgid "Tcl/Tk Resources:" +msgstr "Tcl/Tk 资源:" + +#: ../../library/tkinter.rst:34 +msgid "`Tk commands `_" +msgstr "`Tk 命令 `_" + +#: ../../library/tkinter.rst:34 +msgid "" +"Comprehensive reference to each of the underlying Tcl/Tk commands used by " +"Tkinter." +msgstr "有关 Tkinter 所使用的每个底层 Tcl/Tk 命令的完整参考文档。" + +#: ../../library/tkinter.rst:37 +msgid "`Tcl/Tk Home Page `_" +msgstr "`Tcl/Tk 主页 `_" + +#: ../../library/tkinter.rst:37 +msgid "Additional documentation, and links to Tcl/Tk core development." +msgstr "额外的文档,以及 Tcl/Tk 核心开发相关链接。" + +#: ../../library/tkinter.rst:39 +msgid "Books:" +msgstr "书籍:" + +#: ../../library/tkinter.rst:42 +msgid "" +"`Modern Tkinter for Busy Python Developers `_" +msgstr "" +"`Modern Tkinter for Busy Python Developers `_" + +#: ../../library/tkinter.rst:42 +msgid "By Mark Roseman. (ISBN 978-1999149567)" +msgstr "Mark Roseman 著。 (ISBN 978-1999149567)" + +#: ../../library/tkinter.rst:45 +msgid "" +"`Python and Tkinter Programming `_" +msgstr "" +"`Python and Tkinter Programming `_" + +#: ../../library/tkinter.rst:45 +msgid "By Alan Moore. (ISBN 978-1788835886)" +msgstr "Alan Moore 著。 (ISBN 978-1788835886)" + +#: ../../library/tkinter.rst:48 +msgid "`Programming Python `_" +msgstr "`使用 Python 编程 `_" + +#: ../../library/tkinter.rst:48 +msgid "By Mark Lutz; has excellent coverage of Tkinter. (ISBN 978-0596158101)" +msgstr "Mark Lutz 著;对 Tkinter 进行了精彩的讲解。 (ISBN 978-0596158101)" + +#: ../../library/tkinter.rst:50 +msgid "" +"`Tcl and the Tk Toolkit (2nd edition) " +"`_" +msgstr "" +"`Tcl and the Tk Toolkit (2nd edition) " +"`_" + +#: ../../library/tkinter.rst:51 +msgid "" +"By John Ousterhout, inventor of Tcl/Tk, and Ken Jones; does not cover " +"Tkinter. (ISBN 978-0321336330)" +msgstr "" +"John Ousterhout ,Tcl/Tk 的创造者,与 Ken Jones 合著;未涉及 Tkinter。 (ISBN " +"978-0321336330)" + +#: ../../library/tkinter.rst:55 +msgid "Tkinter Modules" +msgstr "Tkinter 模块" + +#: ../../library/tkinter.rst:57 +msgid "" +"Support for Tkinter is spread across several modules. Most applications will" +" need the main :mod:`tkinter` module, as well as the :mod:`tkinter.ttk` " +"module, which provides the modern themed widget set and API::" +msgstr "" +"对 Tkinter 的支持分布在多个模块中。 大多数应用程序将需要主模块 :mod:`tkinter`,以及 :mod:`tkinter.ttk` " +"模块,后者提供了带主题的现代部件集及相应的 API::" + +#: ../../library/tkinter.rst:68 +msgid "" +"Construct a toplevel Tk widget, which is usually the main window of an " +"application, and initialize a Tcl interpreter for this widget. Each " +"instance has its own associated Tcl interpreter." +msgstr "" +"构造一个最高层级的 Tk 部件,这通常是一个应用程序的主窗口,并为这个部件初始化 Tcl 解释器。 每个实例都有其各自所关联的 Tcl 解释器。" + +#: ../../library/tkinter.rst:72 +msgid "" +"The :class:`Tk` class is typically instantiated using all default values. " +"However, the following keyword arguments are currently recognized:" +msgstr ":class:`Tk` 类通常全部使用默认值来初始化。 不过,目前还可识别下列关键字参数:" + +#: ../../library/tkinter.rst:76 +msgid "*screenName*" +msgstr "*screenName*" + +#: ../../library/tkinter.rst:76 +msgid "" +"When given (as a string), sets the :envvar:`DISPLAY` environment variable. " +"(X11 only)" +msgstr "当(作为字符串)给出时,设置 :envvar:`DISPLAY` 环境变量。 (仅限 X11)" + +#: ../../library/tkinter.rst:79 +msgid "*baseName*" +msgstr "*baseName*" + +#: ../../library/tkinter.rst:79 +msgid "" +"Name of the profile file. By default, *baseName* is derived from the " +"program name (``sys.argv[0]``)." +msgstr "预置文件的名称。 在默认情况下,*baseName* 是来自于程序名称 (``sys.argv[0]``)。" + +#: ../../library/tkinter.rst:82 +msgid "*className*" +msgstr "*className*" + +#: ../../library/tkinter.rst:82 +msgid "" +"Name of the widget class. Used as a profile file and also as the name with " +"which Tcl is invoked (*argv0* in *interp*)." +msgstr "控件类的名称。 会被用作预置文件同时也作为 Tcl 唤起的名称 (*interp* 中的 *argv0*)。" + +#: ../../library/tkinter.rst:85 +msgid "*useTk*" +msgstr "*useTk*" + +#: ../../library/tkinter.rst:85 +msgid "" +"If ``True``, initialize the Tk subsystem. The :func:`tkinter.Tcl() ` " +"function sets this to ``False``." +msgstr "" +"如果为 ``True``,则初始化 Tk 子系统。 :func:`tkinter.Tcl() ` 函数会将其设为 ``False``。" + +#: ../../library/tkinter.rst:88 +msgid "*sync*" +msgstr "*sync*" + +#: ../../library/tkinter.rst:88 +msgid "" +"If ``True``, execute all X server commands synchronously, so that errors are" +" reported immediately. Can be used for debugging. (X11 only)" +msgstr "如果为 ``True``,则同步执行所有 X 服务器命令,以便立即报告错误。 可被用于调试。 (仅限 X11)" + +#: ../../library/tkinter.rst:98 +msgid "*use*" +msgstr "*use*" + +#: ../../library/tkinter.rst:91 +msgid "" +"Specifies the *id* of the window in which to embed the application, instead " +"of it being created as an independent toplevel window. *id* must be " +"specified in the same way as the value for the -use option for toplevel " +"widgets (that is, it has a form like that returned by :meth:`winfo_id`)." +msgstr "" +"指定嵌入应用程序的窗口 *id*,而不是将其创建为独立的顶层窗口。 *id* 必须以与顶层控件的 -use 选项值相同的方式来指定(也就是说,它具有与 " +":meth:`winfo_id` 的返回值相同的形式)。" + +#: ../../library/tkinter.rst:97 +msgid "" +"Note that on some platforms this will only work correctly if *id* refers to " +"a Tk frame or toplevel that has its -container option enabled." +msgstr "请注意在某些平台上只有当 *id* 是指向一个启用了 -container 选项的 Tk 框架或顶层窗口时此参数才能正确生效。" + +#: ../../library/tkinter.rst:100 +msgid "" +":class:`Tk` reads and interprets profile files, named " +":file:`.{className}.tcl` and :file:`.{baseName}.tcl`, into the Tcl " +"interpreter and calls :func:`exec` on the contents of " +":file:`.{className}.py` and :file:`.{baseName}.py`. The path for the " +"profile files is the :envvar:`HOME` environment variable or, if that isn't " +"defined, then :attr:`os.curdir`." +msgstr "" +":class:`Tk` 读取并解释预置文件,其名称为 :file:`.{className}.tcl` 和 " +":file:`.{baseName}.tcl`,进入 Tcl 解释器并基于 :file:`.{className}.py` 在 " +":file:`.{baseName}.py` 的内容调用 :func:`exec`。 预置文件的路径为 :envvar:`HOME` " +"环境变量,或者如果它未被设置,则为 :attr:`os.curdir`。" + +#: ../../library/tkinter.rst:109 +msgid "" +"The Tk application object created by instantiating :class:`Tk`. This " +"provides access to the Tcl interpreter. Each widget that is attached the " +"same instance of :class:`Tk` has the same value for its :attr:`tk` " +"attribute." +msgstr "" +"通过实例化 :class:`Tk` 创建的 Tk 应用程序对象。 这提供了对 Tcl 解释器的访问。 每个被附加到相同 :class:`Tk` " +"实例的控件都具有相同的 :attr:`tk` 属性值。" + +#: ../../library/tkinter.rst:116 +msgid "" +"The widget object that contains this widget. For :class:`Tk`, the *master* " +"is :const:`None` because it is the main window. The terms *master* and " +"*parent* are similar and sometimes used interchangeably as argument names; " +"however, calling :meth:`winfo_parent` returns a string of the widget name " +"whereas :attr:`master` returns the object. *parent*/*child* reflects the " +"tree-like relationship while *master*/*slave* reflects the container " +"structure." +msgstr "" +"包含此控件的控件对象。 对于 :class:`Tk`,*master* 将为 :const:`None` 因为它是主窗口。 术语 *master* 和 " +"*parent* 是类似的且有时作为参数名称被交替使用;但是,调用 :meth:`winfo_parent` 将返回控件名称字符串而 " +":attr:`master` 将返回控件对象。 *parent*/*child* 反映了树型关系而 *master*/*slave* 反映了容器结构。" + +#: ../../library/tkinter.rst:126 +msgid "" +"The immediate descendants of this widget as a :class:`dict` with the child " +"widget names as the keys and the child instance objects as the values." +msgstr "以 :class:`dict` 表示的此控件的直接下级其中的键为子控件名称而值为子实例对象。" + +#: ../../library/tkinter.rst:133 +msgid "" +"The :func:`Tcl` function is a factory function which creates an object much " +"like that created by the :class:`Tk` class, except that it does not " +"initialize the Tk subsystem. This is most often useful when driving the Tcl" +" interpreter in an environment where one doesn't want to create extraneous " +"toplevel windows, or where one cannot (such as Unix/Linux systems without an" +" X server). An object created by the :func:`Tcl` object can have a Toplevel" +" window created (and the Tk subsystem initialized) by calling its " +":meth:`loadtk` method." +msgstr "" +":func:`Tcl` 函数是一个工厂函数,它创建的对象类似于 :class:`Tk` 类创建的,只是不会初始化 Tk 子系统。这在调动 Tcl " +"解释器时最为有用,这时不想创建多余的顶层窗口,或者无法创建(比如不带 X 服务的 Unix/Linux 系统)。由 :func:`Tcl` " +"创建的对象可调用 :meth:`loadtk` 方法创建一个顶层窗口(且会初始化 Tk 子系统)。" + +#: ../../library/tkinter.rst:142 +msgid "The modules that provide Tk support include:" +msgstr "提供 Tk 支持的模块包括:" + +#: ../../library/tkinter.rst:145 +msgid ":mod:`tkinter`" +msgstr ":mod:`tkinter`" + +#: ../../library/tkinter.rst:145 +msgid "Main Tkinter module." +msgstr "主 Tkinter 模块。" + +#: ../../library/tkinter.rst:148 +msgid ":mod:`tkinter.colorchooser`" +msgstr ":mod:`tkinter.colorchooser`" + +#: ../../library/tkinter.rst:148 +msgid "Dialog to let the user choose a color." +msgstr "让用户选择颜色的对话框。" + +#: ../../library/tkinter.rst:151 +msgid ":mod:`tkinter.commondialog`" +msgstr ":mod:`tkinter.commondialog`" + +#: ../../library/tkinter.rst:151 +msgid "Base class for the dialogs defined in the other modules listed here." +msgstr "本文其他模块定义的对话框的基类。" + +#: ../../library/tkinter.rst:154 +msgid ":mod:`tkinter.filedialog`" +msgstr ":mod:`tkinter.filedialog`" + +#: ../../library/tkinter.rst:154 +msgid "Common dialogs to allow the user to specify a file to open or save." +msgstr "允许用户指定文件的通用对话框,用于打开或保存文件。" + +#: ../../library/tkinter.rst:157 +msgid ":mod:`tkinter.font`" +msgstr ":mod:`tkinter.font`" + +#: ../../library/tkinter.rst:157 +msgid "Utilities to help work with fonts." +msgstr "帮助操作字体的工具。" + +#: ../../library/tkinter.rst:160 +msgid ":mod:`tkinter.messagebox`" +msgstr ":mod:`tkinter.messagebox`" + +#: ../../library/tkinter.rst:160 +msgid "Access to standard Tk dialog boxes." +msgstr "访问标准的 Tk 对话框。" + +#: ../../library/tkinter.rst:163 +msgid ":mod:`tkinter.scrolledtext`" +msgstr ":mod:`tkinter.scrolledtext`" + +#: ../../library/tkinter.rst:163 +msgid "Text widget with a vertical scroll bar built in." +msgstr "内置纵向滚动条的文本组件。" + +#: ../../library/tkinter.rst:166 +msgid ":mod:`tkinter.simpledialog`" +msgstr ":mod:`tkinter.simpledialog`" + +#: ../../library/tkinter.rst:166 +msgid "Basic dialogs and convenience functions." +msgstr "基础对话框和一些便捷功能。" + +#: ../../library/tkinter.rst:170 +msgid ":mod:`tkinter.ttk`" +msgstr ":mod:`tkinter.ttk`" + +#: ../../library/tkinter.rst:169 +msgid "" +"Themed widget set introduced in Tk 8.5, providing modern alternatives for " +"many of the classic widgets in the main :mod:`tkinter` module." +msgstr "在 Tk 8.5 中引入的带主题的控件集,提供了对应于 :mod:`tkinter` 模块中许多经典控件的现代替代。" + +#: ../../library/tkinter.rst:172 +msgid "Additional modules:" +msgstr "附加模块:" + +#: ../../library/tkinter.rst:179 +msgid ":mod:`_tkinter`" +msgstr ":mod:`_tkinter`" + +#: ../../library/tkinter.rst:175 +msgid "" +"A binary module that contains the low-level interface to Tcl/Tk. It is " +"automatically imported by the main :mod:`tkinter` module, and should never " +"be used directly by application programmers. It is usually a shared library " +"(or DLL), but might in some cases be statically linked with the Python " +"interpreter." +msgstr "" +"一个包含低层级 Tcl/Tk 接口的二进制模块。 它会被主 :mod:`tkinter` 模块自动导入,且永远不应被应用程序员所直接使用。 " +"它通常是一个共享库(或 DLL),但在某些情况下可能被动态链接到 Python 解释器。" + +#: ../../library/tkinter.rst:183 +msgid ":mod:`idlelib`" +msgstr ":mod:`idlelib`" + +#: ../../library/tkinter.rst:182 +msgid "" +"Python's Integrated Development and Learning Environment (IDLE). Based on " +":mod:`tkinter`." +msgstr "Python 的集成开发与学习环境(IDLE)。 基于 :mod:`tkinter`。" + +#: ../../library/tkinter.rst:188 +msgid ":mod:`tkinter.constants`" +msgstr ":mod:`tkinter.constants`" + +#: ../../library/tkinter.rst:186 +msgid "" +"Symbolic constants that can be used in place of strings when passing various" +" parameters to Tkinter calls. Automatically imported by the main " +":mod:`tkinter` module." +msgstr "当向 Tkinter 调用传入各种形参时可被用来代替字符串的符号常量。 由主 :mod:`tkinter` 模块自动导入。" + +#: ../../library/tkinter.rst:192 +msgid ":mod:`tkinter.dnd`" +msgstr ":mod:`tkinter.dnd`" + +#: ../../library/tkinter.rst:191 +msgid "" +"(experimental) Drag-and-drop support for :mod:`tkinter`. This will become " +"deprecated when it is replaced with the Tk DND." +msgstr "针对 :mod:`tkinter` 的(实验性的)拖放支持。 当以 Tk DND 代替时它将会被弃用。" + +#: ../../library/tkinter.rst:196 +msgid ":mod:`tkinter.tix`" +msgstr ":mod:`tkinter.tix`" + +#: ../../library/tkinter.rst:195 +msgid "" +"(deprecated) An older third-party Tcl/Tk package that adds several new " +"widgets. Better alternatives for most can be found in :mod:`tkinter.ttk`." +msgstr "" +"(已弃用)一个增加了部分新控件的较老的第三方 Tcl/Tk 包。 对多数人来说可以在 :mod:`tkinter.ttk` 中找到更好的替代品。" + +#: ../../library/tkinter.rst:200 +msgid ":mod:`turtle`" +msgstr ":mod:`turtle`" + +#: ../../library/tkinter.rst:199 +msgid "Turtle graphics in a Tk window." +msgstr "Tk 窗口中的海龟绘图库。" + +#: ../../library/tkinter.rst:203 +msgid "Tkinter Life Preserver" +msgstr "Tkinter 拾遗" + +#: ../../library/tkinter.rst:208 +msgid "" +"This section is not designed to be an exhaustive tutorial on either Tk or " +"Tkinter. Rather, it is intended as a stop gap, providing some introductory " +"orientation on the system." +msgstr "本节不应作为 Tk 或 Tkinter 的详尽教程。而只是一个补充,提供一些系统指南。" + +#: ../../library/tkinter.rst:212 +msgid "Credits:" +msgstr "致谢:" + +#: ../../library/tkinter.rst:214 +msgid "Tk was written by John Ousterhout while at Berkeley." +msgstr "Tk 是 John Ousterhout 在伯克利大学时写的。" + +#: ../../library/tkinter.rst:216 +msgid "Tkinter was written by Steen Lumholt and Guido van Rossum." +msgstr "Tkinter 是由 Steen Lumholt 和 Guido van Rossum 编写的。" + +#: ../../library/tkinter.rst:218 +msgid "" +"This Life Preserver was written by Matt Conway at the University of " +"Virginia." +msgstr "本拾遗由弗吉尼亚大学的 Matt Conway 撰写。" + +#: ../../library/tkinter.rst:220 +msgid "" +"The HTML rendering, and some liberal editing, was produced from a FrameMaker" +" version by Ken Manheimer." +msgstr "HTML 渲染和一些自由编辑功能,是由 Ken Manheimer 根据 FrameMaker 创建的。" + +#: ../../library/tkinter.rst:223 +msgid "" +"Fredrik Lundh elaborated and revised the class interface descriptions, to " +"get them current with Tk 4.2." +msgstr "Fredrik Lundh 认真研究并修改了类的接口描述,使其与 Tk 4.2 保持一致。" + +#: ../../library/tkinter.rst:226 +msgid "" +"Mike Clarkson converted the documentation to LaTeX, and compiled the User " +"Interface chapter of the reference manual." +msgstr "Mike Clarkson 将文档转换为 LaTeX 格式,并编写了参考手册的用户界面章节。" + +#: ../../library/tkinter.rst:231 +msgid "How To Use This Section" +msgstr "本节内容的用法" + +#: ../../library/tkinter.rst:233 +msgid "" +"This section is designed in two parts: the first half (roughly) covers " +"background material, while the second half can be taken to the keyboard as a" +" handy reference." +msgstr "本节分为两部分:前半部分(大致)涵盖了背景材料,后半部分可以作为手头的参考手册。" + +#: ../../library/tkinter.rst:237 +msgid "" +"When trying to answer questions of the form \"how do I do blah\", it is " +"often best to find out how to do \"blah\" in straight Tk, and then convert " +"this back into the corresponding :mod:`tkinter` call. Python programmers can" +" often guess at the correct Python command by looking at the Tk " +"documentation. This means that in order to use Tkinter, you will have to " +"know a little bit about Tk. This document can't fulfill that role, so the " +"best we can do is point you to the best documentation that exists. Here are " +"some hints:" +msgstr "" +"当试图回答“如何才能怎么怎么”这种问题时,通常最好是弄清楚如何直接在 Tk 中实现,然后转换回相应的 :mod:`tkinter` 调用。Python " +"程序员通常可查看 Tk 文档来猜测正确的 Python 命令。这意味着要用好 Tkinter,必须对 Tk " +"有一定的了解。本文无法完成这个任务,所以最好的做法就是给出目前最好的文档。下面给出一些小提示:" + +#: ../../library/tkinter.rst:245 +msgid "" +"The authors strongly suggest getting a copy of the Tk man pages. " +"Specifically, the man pages in the ``manN`` directory are most useful. The " +"``man3`` man pages describe the C interface to the Tk library and thus are " +"not especially helpful for script writers." +msgstr "" +"作者强烈建议用户先拿到一份 Tk 手册。具体来说,``manN`` 目录下的 man 文档是最有用的。``man3`` 的 man 文档描述了 Tk " +"库的 C 接口,因此对脚本编写人员没有什么特别的帮助。" + +#: ../../library/tkinter.rst:250 +msgid "" +"Addison-Wesley publishes a book called Tcl and the Tk Toolkit by John " +"Ousterhout (ISBN 0-201-63337-X) which is a good introduction to Tcl and Tk " +"for the novice. The book is not exhaustive, and for many details it defers " +"to the man pages." +msgstr "" +"Addison-Wesley 出版了一本名为《Tcl 和 Tk 工具包》的书,作者是 John Ousterhout(ISBN " +"0-201-63337-X),对于新手来说,这是一本很好的 Tcl 和Tk 介绍书籍。该书不算详尽,很多细节还是要看 man 手册。" + +#: ../../library/tkinter.rst:255 +msgid "" +":file:`tkinter/__init__.py` is a last resort for most, but can be a good " +"place to go when nothing else makes sense." +msgstr "对大多数人而言,:file:`tkinter/__init__.py` 是最后一招,但其他手段都无效时也不失为一个好去处。" + +#: ../../library/tkinter.rst:260 +msgid "A Simple Hello World Program" +msgstr "简单的 Hello World 程序" + +#: ../../library/tkinter.rst:292 +msgid "A (Very) Quick Look at Tcl/Tk" +msgstr "Tcl/Tk 速览" + +#: ../../library/tkinter.rst:294 +msgid "" +"The class hierarchy looks complicated, but in actual practice, application " +"programmers almost always refer to the classes at the very bottom of the " +"hierarchy." +msgstr "类的层次结构看起来很复杂,但在实际操作中,应用程序编写人员几乎总是查看最底层的类。" + +#: ../../library/tkinter.rst:298 +msgid "Notes:" +msgstr "注释:" + +#: ../../library/tkinter.rst:300 +msgid "" +"These classes are provided for the purposes of organizing certain functions " +"under one namespace. They aren't meant to be instantiated independently." +msgstr "提供这些类,是为了能在同一个命名空间下将某些功能组织在一起。并不意味着可以独立对其进行实例化。" + +#: ../../library/tkinter.rst:303 +msgid "" +"The :class:`Tk` class is meant to be instantiated only once in an " +"application. Application programmers need not instantiate one explicitly, " +"the system creates one whenever any of the other classes are instantiated." +msgstr "" +":class:`Tk` 类在同一个应用程序中仅需作一次实例化。应用程序编程人员不需要显式进行实例化,只要有其他任何类被实例化,系统就会创建一个。" + +#: ../../library/tkinter.rst:307 +msgid "" +"The :class:`Widget` class is not meant to be instantiated, it is meant only " +"for subclassing to make \"real\" widgets (in C++, this is called an " +"'abstract class')." +msgstr ":class:`Widget` 类不是用来实例化的,它仅用于继承以便生成“真正”的部件( C++ 中称为“抽象类”)。" + +#: ../../library/tkinter.rst:311 +msgid "" +"To make use of this reference material, there will be times when you will " +"need to know how to read short passages of Tk and how to identify the " +"various parts of a Tk command. (See section :ref:`tkinter-basic-mapping` " +"for the :mod:`tkinter` equivalents of what's below.)" +msgstr "" +"若要充分利用这些参考资料,有时需要知道如何阅读 Tk 的短文,以及如何识别 Tk 命令的各个部分。(参见 :ref:`tkinter-basic-" +"mapping` 一节,了解以下内容在 :mod:`tkinter` 中的对应部分)。" + +#: ../../library/tkinter.rst:316 +msgid "" +"Tk scripts are Tcl programs. Like all Tcl programs, Tk scripts are just " +"lists of tokens separated by spaces. A Tk widget is just its *class*, the " +"*options* that help configure it, and the *actions* that make it do useful " +"things." +msgstr "" +"Tk 脚本就是 Tcl 程序。像所有其他的 Tcl 程序一样,Tk 脚本只是由空格分隔的单词列表。一个Tk 部件只是它的 " +"*class*,*options* 用于进行配置,*actions* 让它执行有用的动作。" + +#: ../../library/tkinter.rst:320 +msgid "To make a widget in Tk, the command is always of the form::" +msgstr "要在 Tk 中制作一个部件,总是采用如下格式的命令:" + +#: ../../library/tkinter.rst:325 +msgid "*classCommand*" +msgstr "*classCommand*" + +#: ../../library/tkinter.rst:325 +msgid "denotes which kind of widget to make (a button, a label, a menu...)" +msgstr "表示要制作何种部件(按钮、标签、菜单......)。" + +#: ../../library/tkinter.rst:334 +msgid "*newPathname*" +msgstr "*newPathname*" + +#: ../../library/tkinter.rst:330 +msgid "" +"is the new name for this widget. All names in Tk must be unique. To help " +"enforce this, widgets in Tk are named with *pathnames*, just like files in a" +" file system. The top level widget, the *root*, is called ``.`` (period) " +"and children are delimited by more periods. For example, " +"``.myApp.controlPanel.okButton`` might be the name of a widget." +msgstr "" +"该组件的新名字。Tk 中的所有名字都必须唯一。为了帮助实现这一点,Tk 中的部件都用 *路径* 命名,就像文件系统中的文件一样。顶层的部件,即 " +"*根*,名为 ``.``(句点),而子部件则由更多的句点分隔。比如部件名可能会是 ``.myApp.controlPanel.okButton`` 。" + +#: ../../library/tkinter.rst:340 +msgid "*options*" +msgstr "*options*" + +#: ../../library/tkinter.rst:337 +msgid "" +"configure the widget's appearance and in some cases, its behavior. The " +"options come in the form of a list of flags and values. Flags are preceded " +"by a '-', like Unix shell command flags, and values are put in quotes if " +"they are more than one word." +msgstr "" +"配置部件的外观,有时也能配置行为。这些选项以标志和值的列表形式出现。标志前带一个“-”,就像 Unix shell " +"命令的标志一样,如果值超过一个单词,就用引号括起来。" + +#: ../../library/tkinter.rst:342 ../../library/tkinter.rst:603 +#: ../../library/tkinter.rst:782 +msgid "For example::" +msgstr "例如:" + +#: ../../library/tkinter.rst:350 +msgid "" +"Once created, the pathname to the widget becomes a new command. This new " +"*widget command* is the programmer's handle for getting the new widget to " +"perform some *action*. In C, you'd express this as someAction(fred, " +"someOptions), in C++, you would express this as " +"fred.someAction(someOptions), and in Tk, you say::" +msgstr "" +"一旦创建成功,部件的路径名就成了一条新的命令。这个新的 *部件命令* 是程序员让新部件执行某些 *action* 的句柄。在 C " +"语言中可表示为someAction(fred, someOptions),在 C++ " +"中可表示为fred.someAction(someOptions),而在 Tk 中写作:" + +#: ../../library/tkinter.rst:358 +msgid "Note that the object name, ``.fred``, starts with a dot." +msgstr "请注意,对象名 ``.fred`` 是以句点开头的。" + +#: ../../library/tkinter.rst:360 +msgid "" +"As you'd expect, the legal values for *someAction* will depend on the " +"widget's class: ``.fred disable`` works if fred is a button (fred gets " +"greyed out), but does not work if fred is a label (disabling of labels is " +"not supported in Tk)." +msgstr "" +"如您所料,*someAction* 的可用值取决于部件的类别。如果 fred 为按钮,则 `.fred disable` 有效(fred 会变灰),而当" +" fred 为标签时则无效(Tk 不支持标签的禁用)。" + +#: ../../library/tkinter.rst:364 +msgid "" +"The legal values of *someOptions* is action dependent. Some actions, like " +"``disable``, require no arguments, others, like a text-entry box's " +"``delete`` command, would need arguments to specify what range of text to " +"delete." +msgstr "" +"*someOptions* 的合法值取决于动作。有些动作不需要参数,比如 ``disable``,其他动作如文本输入框的 ``delete`` " +"命令则需用参数指定要删除的文本范围。" + +#: ../../library/tkinter.rst:372 +msgid "Mapping Basic Tk into Tkinter" +msgstr "将简单的 Tk 映射到 Tkinter" + +#: ../../library/tkinter.rst:374 +msgid "Class commands in Tk correspond to class constructors in Tkinter. ::" +msgstr "Tk 中的类命令对应于 Tkinter 中的类构造函数:" + +#: ../../library/tkinter.rst:378 +msgid "" +"The master of an object is implicit in the new name given to it at creation " +"time. In Tkinter, masters are specified explicitly. ::" +msgstr "父对象是隐含在创建时给定的新名字中的。在 Tkinter 中,父对象是显式指定的:" + +#: ../../library/tkinter.rst:383 +msgid "" +"The configuration options in Tk are given in lists of hyphened tags followed" +" by values. In Tkinter, options are specified as keyword-arguments in the " +"instance constructor, and keyword-args for configure calls or as instance " +"indices, in dictionary style, for established instances. See section " +":ref:`tkinter-setting-options` on setting options. ::" +msgstr "" +"Tk 中的配置项是以连字符标签列表的形式给出的,后跟着参数值。在 Tkinter 中,选项指定为实例构造函数中的关键字参数,在配置调用时指定为关键字 " +"args,或在已有实例中指定为实例索引,以字典的形式。参见 :ref:`tkinter-setting-options` 一节的选项设置部分。" + +#: ../../library/tkinter.rst:393 +msgid "" +"In Tk, to perform an action on a widget, use the widget name as a command, " +"and follow it with an action name, possibly with arguments (options). In " +"Tkinter, you call methods on the class instance to invoke actions on the " +"widget. The actions (methods) that a given widget can perform are listed in" +" :file:`tkinter/__init__.py`. ::" +msgstr "" +"在 Tk 中, 要在某个部件上执行动作, 要用部件名作为命令, 并后面附上动作名称, 可能还会带有参数(option)。在 Tkinter " +"中,则调用类实例的方法来执行部件的动作。部件能够执行的动作(方法)列在 :file:`tkinter/__init__.py` 中。" + +#: ../../library/tkinter.rst:401 +msgid "" +"To give a widget to the packer (geometry manager), you call pack with " +"optional arguments. In Tkinter, the Pack class holds all this " +"functionality, and the various forms of the pack command are implemented as " +"methods. All widgets in :mod:`tkinter` are subclassed from the Packer, and " +"so inherit all the packing methods. See the :mod:`tkinter.tix` module " +"documentation for additional information on the Form geometry manager. ::" +msgstr "" +"若要将部件交给打包器(geometry manager),需带上可选参数去调用 pack。在 Tkinter 中,Pack 类拥有全部这些功能,pack" +" 命令的各种形式都以方法的形式实现。 :mod:`tkinter` 中的所有部件都是从 Packer 继承而来的,因此继承了所有打包方法。关于Form " +"geometry manager 的更多信息,请参见 :mod:`tkinter.tix` 模块的文档。" + +#: ../../library/tkinter.rst:412 +msgid "How Tk and Tkinter are Related" +msgstr "Tk 和 Tkinter 如何关联" + +#: ../../library/tkinter.rst:414 +msgid "From the top down:" +msgstr "自上而下:" + +#: ../../library/tkinter.rst:417 +msgid "Your App Here (Python)" +msgstr "(Python)应用程序位于这里" + +#: ../../library/tkinter.rst:417 +msgid "A Python application makes a :mod:`tkinter` call." +msgstr "Python 应用程序进行了 :mod:`tkinter` 调用。" + +#: ../../library/tkinter.rst:424 +msgid "tkinter (Python Package)" +msgstr "tkinter (Python 包)" + +#: ../../library/tkinter.rst:420 +msgid "" +"This call (say, for example, creating a button widget), is implemented in " +"the :mod:`tkinter` package, which is written in Python. This Python " +"function will parse the commands and the arguments and convert them into a " +"form that makes them look as if they had come from a Tk script instead of a " +"Python script." +msgstr "" +"此调用(比如创建一个按钮部件)在 :mod:`tkinter` 包中实现,它是用 Python 编写的。该 Python " +"函数将解析命令和参数,并转换为貌似 Tk 脚本的格式,而不像是 Python 脚本。" + +#: ../../library/tkinter.rst:428 +msgid "_tkinter (C)" +msgstr "_tkinter(C 语言)" + +#: ../../library/tkinter.rst:427 +msgid "" +"These commands and their arguments will be passed to a C function in the " +":mod:`_tkinter` - note the underscore - extension module." +msgstr "这些命令及参数将被传给 :mod:`_tkinter` 扩展模块中的 C 函数——注意下划线。" + +#: ../../library/tkinter.rst:435 +msgid "Tk Widgets (C and Tcl)" +msgstr "Tk 部件(C 和 Tcl)" + +#: ../../library/tkinter.rst:431 +msgid "" +"This C function is able to make calls into other C modules, including the C " +"functions that make up the Tk library. Tk is implemented in C and some Tcl." +" The Tcl part of the Tk widgets is used to bind certain default behaviors to" +" widgets, and is executed once at the point where the Python :mod:`tkinter` " +"package is imported. (The user never sees this stage)." +msgstr "" +"该 C 函数能调用其他的 C 模块,包括构成 Tk 库的 C 函数。Tk 是用 C 和一些 Tcl 实现的。Tk 部件的 Tcl " +"部分用于将某些默认行为绑定到部件上,并在导入 Python :mod:`tkinter` 包时执行一次。(该阶段对用户而言永不可见)。" + +#: ../../library/tkinter.rst:438 +msgid "Tk (C)" +msgstr "Tk(C 语言)" + +#: ../../library/tkinter.rst:438 +msgid "The Tk part of the Tk Widgets implement the final mapping to ..." +msgstr "Tk 部件的 Tk 语言部分实现了最终的映射" + +#: ../../library/tkinter.rst:442 +msgid "Xlib (C)" +msgstr "Xlib(C 语言)" + +#: ../../library/tkinter.rst:441 +msgid "the Xlib library to draw graphics on the screen." +msgstr "Xlib 库在屏幕上绘制图形。" + +#: ../../library/tkinter.rst:445 +msgid "Handy Reference" +msgstr "快速参考" + +#: ../../library/tkinter.rst:451 +msgid "Setting Options" +msgstr "可选配置项" + +#: ../../library/tkinter.rst:453 +msgid "" +"Options control things like the color and border width of a widget. Options " +"can be set in three ways:" +msgstr "配置参数可以控制组件颜色和边框宽度等。可通过三种方式进行设置:" + +#: ../../library/tkinter.rst:459 +msgid "At object creation time, using keyword arguments" +msgstr "在对象创建时,使用关键字参数" + +#: ../../library/tkinter.rst:465 +msgid "" +"After object creation, treating the option name like a dictionary index" +msgstr "在对象创建后,将参数名用作字典索引" + +#: ../../library/tkinter.rst:470 +msgid "" +"Use the config() method to update multiple attrs subsequent to object " +"creation" +msgstr "利用 config() 方法修改对象的多个属性" + +#: ../../library/tkinter.rst:472 +msgid "" +"For a complete explanation of a given option and its behavior, see the Tk " +"man pages for the widget in question." +msgstr "关于这些参数及其表现的完整解释,请参阅 Tk 手册中有关组件的 man 帮助页。" + +#: ../../library/tkinter.rst:475 +msgid "" +"Note that the man pages list \"STANDARD OPTIONS\" and \"WIDGET SPECIFIC " +"OPTIONS\" for each widget. The former is a list of options that are common " +"to many widgets, the latter are the options that are idiosyncratic to that " +"particular widget. The Standard Options are documented on the " +":manpage:`options(3)` man page." +msgstr "" +"请注意,man 手册页列出了每个部件的“标准选项”和“组件特有选项”。前者是很多组件通用的选项列表,后者是该组件特有的选项。标准选项在 " +":manpage:`options(3)` man 手册中有文档。" + +#: ../../library/tkinter.rst:481 +msgid "" +"No distinction between standard and widget-specific options is made in this " +"document. Some options don't apply to some kinds of widgets. Whether a " +"given widget responds to a particular option depends on the class of the " +"widget; buttons have a ``command`` option, labels do not." +msgstr "" +"本文没有区分标准选项和部件特有选项。有些选项不适用于某类组件。组件是否对某选项做出响应,取决于组件的类别;按钮组件有一个 ``command`` " +"选项,而标签组件就没有。" + +#: ../../library/tkinter.rst:486 +msgid "" +"The options supported by a given widget are listed in that widget's man " +"page, or can be queried at runtime by calling the :meth:`config` method " +"without arguments, or by calling the :meth:`keys` method on that widget. " +"The return value of these calls is a dictionary whose key is the name of the" +" option as a string (for example, ``'relief'``) and whose values are " +"5-tuples." +msgstr "" +"组件支持的选项在其手册中有列出,也可在运行时调用 :meth:`config` 方法(不带参数)查看,或者通过调用组件的 :meth:`keys` " +"方法进行查询。这些调用的返回值为字典,字典的键是字符串格式的选项名(比如 ``'relief'``),字典的值为五元组。" + +#: ../../library/tkinter.rst:492 +msgid "" +"Some options, like ``bg`` are synonyms for common options with long names " +"(``bg`` is shorthand for \"background\"). Passing the ``config()`` method " +"the name of a shorthand option will return a 2-tuple, not 5-tuple. The " +"2-tuple passed back will contain the name of the synonym and the \"real\" " +"option (such as ``('bg', 'background')``)." +msgstr "" +"有些选项,比如 ``bg`` 是全名通用选项的同义词(``bg`` 是 “background”的简写)。向 ``config()`` " +"方法传入选项的简称将返回一个二元组,而不是五元组。传回的二元组将包含同义词的全名和“真正的”选项(比如 ``('bg', " +"'background')``)。" + +#: ../../library/tkinter.rst:499 +msgid "Index" +msgstr "索引" + +#: ../../library/tkinter.rst:499 +msgid "Meaning" +msgstr "含意" + +#: ../../library/tkinter.rst:499 +msgid "Example" +msgstr "示例" + +#: ../../library/tkinter.rst:501 +msgid "0" +msgstr "0" + +#: ../../library/tkinter.rst:501 +msgid "option name" +msgstr "选项名称" + +#: ../../library/tkinter.rst:501 ../../library/tkinter.rst:503 +msgid "``'relief'``" +msgstr "``'relief'``" + +#: ../../library/tkinter.rst:503 +msgid "1" +msgstr "1" + +#: ../../library/tkinter.rst:503 +msgid "option name for database lookup" +msgstr "数据库查找的选项名称" + +#: ../../library/tkinter.rst:505 +msgid "2" +msgstr "2" + +#: ../../library/tkinter.rst:505 +msgid "option class for database lookup" +msgstr "数据库查找的选项类" + +#: ../../library/tkinter.rst:505 +msgid "``'Relief'``" +msgstr "``'Relief'``" + +#: ../../library/tkinter.rst:508 +msgid "3" +msgstr "3" + +#: ../../library/tkinter.rst:508 +msgid "default value" +msgstr "默认值" + +#: ../../library/tkinter.rst:508 +msgid "``'raised'``" +msgstr "``'raised'``" + +#: ../../library/tkinter.rst:510 +msgid "4" +msgstr "4" + +#: ../../library/tkinter.rst:510 +msgid "current value" +msgstr "当前值" + +#: ../../library/tkinter.rst:510 +msgid "``'groove'``" +msgstr "``'groove'``" + +#: ../../library/tkinter.rst:513 +msgid "Example::" +msgstr "示例::" + +#: ../../library/tkinter.rst:518 +msgid "" +"Of course, the dictionary printed will include all the options available and" +" their values. This is meant only as an example." +msgstr "当然,输出的字典将包含所有可用选项及其值。这里只是举个例子。" + +#: ../../library/tkinter.rst:523 +msgid "The Packer" +msgstr "包装器" + +#: ../../library/tkinter.rst:527 +msgid "" +"The packer is one of Tk's geometry-management mechanisms. Geometry " +"managers are used to specify the relative positioning of widgets within " +"their container - their mutual *master*. In contrast to the more cumbersome" +" *placer* (which is used less commonly, and we do not cover here), the " +"packer takes qualitative relationship specification - *above*, *to the left " +"of*, *filling*, etc - and works everything out to determine the exact " +"placement coordinates for you." +msgstr "" +"包装器是 Tk 的形状管理机制之一。 形状(geometry )管理器用于指定多个部件在容器(共同的 *主* 组件)内的相对位置。与更为麻烦的 " +"*定位器* 相比(不太常用,这里不做介绍),包装器可接受定性的相对关系—— *上面* 、*左边* 、*填充* 等,并确定精确的位置坐标。" + +#: ../../library/tkinter.rst:534 +msgid "" +"The size of any *master* widget is determined by the size of the \"slave " +"widgets\" inside. The packer is used to control where slave widgets appear " +"inside the master into which they are packed. You can pack widgets into " +"frames, and frames into other frames, in order to achieve the kind of layout" +" you desire. Additionally, the arrangement is dynamically adjusted to " +"accommodate incremental changes to the configuration, once it is packed." +msgstr "" +"*主* 部件的大小都由其内部的 “从属部件” " +"的大小决定。包装器用于控制从属部件在主部件中出现的位置。可以把部件包入框架,再把框架包入其他框架中,搭建出所需的布局。此外,只要完成了包装,组件的布局就会进行动态调整,以适应布局参数的变化。" + +#: ../../library/tkinter.rst:541 +msgid "" +"Note that widgets do not appear until they have had their geometry specified" +" with a geometry manager. It's a common early mistake to leave out the " +"geometry specification, and then be surprised when the widget is created but" +" nothing appears. A widget will appear only after it has had, for example, " +"the packer's :meth:`pack` method applied to it." +msgstr "" +"请注意,只有用形状管理器指定几何形状后,部件才会显示出来。忘记设置形状参数是新手常犯的错误,惊讶于创建完部件却啥都没出现。部件只有在应用了类似于打包器的" +" :meth:`pack` 方法之后才会显示在屏幕上。" + +#: ../../library/tkinter.rst:547 +msgid "" +"The pack() method can be called with keyword-option/value pairs that control" +" where the widget is to appear within its container, and how it is to behave" +" when the main application window is resized. Here are some examples::" +msgstr "" +"调用 pack() 方法时可以给出由关键字/参数值组成的键值对,以便控制组件在其容器中出现的位置,以及主程序窗口大小变动时的行为。下面是一些例子:" + +#: ../../library/tkinter.rst:557 +msgid "Packer Options" +msgstr "包装器的参数" + +#: ../../library/tkinter.rst:559 +msgid "" +"For more extensive information on the packer and the options that it can " +"take, see the man pages and page 183 of John Ousterhout's book." +msgstr "关于包装器及其可接受的参数,更多信息请参阅 man 手册和 John Ousterhout 书中的第 183 页。" + +#: ../../library/tkinter.rst:563 ../../library/tkinter.rst:683 +msgid "anchor" +msgstr "anchor" + +#: ../../library/tkinter.rst:563 +msgid "" +"Anchor type. Denotes where the packer is to place each slave in its parcel." +msgstr "anchor 类型。 表示包装器要放置的每个从属组件的位置。" + +#: ../../library/tkinter.rst:566 +msgid "expand" +msgstr "expand" + +#: ../../library/tkinter.rst:566 +msgid "Boolean, ``0`` or ``1``." +msgstr "布尔型,``0`` 或 ``1`` 。" + +#: ../../library/tkinter.rst:569 +msgid "fill" +msgstr "fill" + +#: ../../library/tkinter.rst:569 +msgid "Legal values: ``'x'``, ``'y'``, ``'both'``, ``'none'``." +msgstr "合法值为:``'x'`` 、``'y'`` 、``'both'`` 、``'none'``。" + +#: ../../library/tkinter.rst:572 +msgid "ipadx and ipady" +msgstr "ipadx 和 ipady" + +#: ../../library/tkinter.rst:572 +msgid "" +"A distance - designating internal padding on each side of the slave widget." +msgstr "距离值,指定从属部件的内边距。" + +#: ../../library/tkinter.rst:575 +msgid "padx and pady" +msgstr "padx 和 pady" + +#: ../../library/tkinter.rst:575 +msgid "" +"A distance - designating external padding on each side of the slave widget." +msgstr "距离值,指定从属部件的外边距。" + +#: ../../library/tkinter.rst:579 +msgid "side" +msgstr "side" + +#: ../../library/tkinter.rst:578 +msgid "Legal values are: ``'left'``, ``'right'``, ``'top'``, ``'bottom'``." +msgstr "合法值为:``'left'``、 ``'right'`` 、 ``'top'``、 ``'bottom'``。" + +#: ../../library/tkinter.rst:582 +msgid "Coupling Widget Variables" +msgstr "部件与变量的关联" + +#: ../../library/tkinter.rst:584 +msgid "" +"The current-value setting of some widgets (like text entry widgets) can be " +"connected directly to application variables by using special options. These" +" options are ``variable``, ``textvariable``, ``onvalue``, ``offvalue``, and " +"``value``. This connection works both ways: if the variable changes for any" +" reason, the widget it's connected to will be updated to reflect the new " +"value." +msgstr "" +"通过一些特定参数,某些组件(如文本输入组件)的当前设置可直接与应用程序的变量关联。这些参数包括 ``variable`` 、 " +"``textvariable`` 、 ``onvalue`` 、 ``offvalue`` 、 " +"``value``。这种关联是双向的:只要这些变量因任何原因发生变化,其关联的部件就会更新以反映新的参数值。" + +#: ../../library/tkinter.rst:590 +msgid "" +"Unfortunately, in the current implementation of :mod:`tkinter` it is not " +"possible to hand over an arbitrary Python variable to a widget through a " +"``variable`` or ``textvariable`` option. The only kinds of variables for " +"which this works are variables that are subclassed from a class called " +"Variable, defined in :mod:`tkinter`." +msgstr "" +"不幸的是,在目前 :mod:`tkinter` 的实现代码中,不可能通过 ``variable`` 或 ``textvariable`` 参数将任意 " +"Python 变量移交给组件。变量只有是 :mod:`tkinter` 中定义的 Variable 类的子类,才能生效。" + +#: ../../library/tkinter.rst:596 +msgid "" +"There are many useful subclasses of Variable already defined: " +":class:`StringVar`, :class:`IntVar`, :class:`DoubleVar`, and " +":class:`BooleanVar`. To read the current value of such a variable, call the" +" :meth:`get` method on it, and to change its value you call the :meth:`!set`" +" method. If you follow this protocol, the widget will always track the " +"value of the variable, with no further intervention on your part." +msgstr "" +"已经定义了很多有用的 Variable 子类: :class:`StringVar` 、 :class:`IntVar` " +"、:class:`DoubleVar` 和 :class:`BooleanVar`。调用 :meth:`get` 方法可以读取这些变量的当前值;调用 " +":meth:`!set` 方法则可改变变量值。只要遵循这种用法,组件就会保持跟踪变量的值,而不需要更多的干预。" + +#: ../../library/tkinter.rst:636 +msgid "The Window Manager" +msgstr "窗口管理器" + +#: ../../library/tkinter.rst:640 +msgid "" +"In Tk, there is a utility command, ``wm``, for interacting with the window " +"manager. Options to the ``wm`` command allow you to control things like " +"titles, placement, icon bitmaps, and the like. In :mod:`tkinter`, these " +"commands have been implemented as methods on the :class:`Wm` class. " +"Toplevel widgets are subclassed from the :class:`Wm` class, and so can call " +"the :class:`Wm` methods directly." +msgstr "" +"Tk 有个实用命令 ``wm``,用于与窗口管理器进行交互。``wm`` 命令的参数可用于控制标题、位置、图标之类的东西。在 " +":mod:`tkinter` 中,这些命令已被实现为 :class:`Wm` 类的方法。顶层部件是 :class:`Wm` 类的子类,所以可以直接调用 " +":class:`Wm` 的这些方法。" + +#: ../../library/tkinter.rst:647 +msgid "" +"To get at the toplevel window that contains a given widget, you can often " +"just refer to the widget's master. Of course if the widget has been packed " +"inside of a frame, the master won't represent a toplevel window. To get at " +"the toplevel window that contains an arbitrary widget, you can call the " +":meth:`_root` method. This method begins with an underscore to denote the " +"fact that this function is part of the implementation, and not an interface " +"to Tk functionality." +msgstr "" +"要获得指定部件所在的顶层窗口,通常只要引用该部件的主窗口即可。当然,如果该部件是包装在框架内的,那么主窗口不代表就是顶层窗口。为了获得任意组件所在的顶层窗口,可以调用" +" :meth:`_root` 方法。该方法以下划线开头,表明其为 Python 实现的代码,而非 Tk 提供的某个接口。" + +#: ../../library/tkinter.rst:654 +msgid "Here are some examples of typical usage::" +msgstr "以下是一些典型用法:" + +#: ../../library/tkinter.rst:677 +msgid "Tk Option Data Types" +msgstr "Tk 参数的数据类型" + +#: ../../library/tkinter.rst:682 +msgid "" +"Legal values are points of the compass: ``\"n\"``, ``\"ne\"``, ``\"e\"``, " +"``\"se\"``, ``\"s\"``, ``\"sw\"``, ``\"w\"``, ``\"nw\"``, and also " +"``\"center\"``." +msgstr "" +"合法值是罗盘的方位点:``\"n\"`` 、``\"ne\"`` 、``\"e\"`` 、``\"se\"`` 、``\"s\"`` " +"、``\"sw\"`` 、``\"w\"`` 、``\"nw\"`` 和 ``\"center\"`` 。" + +#: ../../library/tkinter.rst:689 +msgid "bitmap" +msgstr "bitmap" + +#: ../../library/tkinter.rst:686 +msgid "" +"There are eight built-in, named bitmaps: ``'error'``, ``'gray25'``, " +"``'gray50'``, ``'hourglass'``, ``'info'``, ``'questhead'``, ``'question'``, " +"``'warning'``. To specify an X bitmap filename, give the full path to the " +"file, preceded with an ``@``, as in ``\"@/usr/contrib/bitmap/gumby.bit\"``." +msgstr "" +"内置已命名的位图有八个:``'error'``、 ``'gray25'`` 、``'gray50'`` 、``'hourglass'``、 " +"``'info'`` 、``'questhead'`` 、``'question'`` 、``'warning'`` " +"。若要指定位图的文件名,请给出完整路径,前面加一个 ``@``,比如 ``\"@/usr/contrib/bitmap/gumby.bit\"``。" + +#: ../../library/tkinter.rst:692 +msgid "boolean" +msgstr "boolean" + +#: ../../library/tkinter.rst:692 +msgid "You can pass integers 0 or 1 or the strings ``\"yes\"`` or ``\"no\"``." +msgstr "可以传入整数 0 或 1,或是字符串 ``\"yes\"`` 或 ``\"no\"``。" + +#: ../../library/tkinter.rst:699 +msgid "callback" +msgstr "callback -- 回调" + +#: ../../library/tkinter.rst:695 +msgid "This is any Python function that takes no arguments. For example::" +msgstr "指任何无需调用参数的 Python 函数。 例如:" + +#: ../../library/tkinter.rst:705 +msgid "color" +msgstr "color" + +#: ../../library/tkinter.rst:702 +msgid "" +"Colors can be given as the names of X colors in the rgb.txt file, or as " +"strings representing RGB values in 4 bit: ``\"#RGB\"``, 8 bit: " +"``\"#RRGGBB\"``, 12 bit: ``\"#RRRGGGBBB\"``, or 16 bit: " +"``\"#RRRRGGGGBBBB\"`` ranges, where R,G,B here represent any legal hex " +"digit. See page 160 of Ousterhout's book for details." +msgstr "" +"可在 rgb.txt 文件中以颜色名的形式给出,或是 RGB 字符串的形式,4 位 :``\"#RGB\"`` ,8 位 " +":``\"#RRGGBB\"``,12 位:``\"#RRRGGGBBB\"``,16 位:``\"#RRRRGGGGBBBB\"``,其中R、G、B " +"为合法的十六进制数值。 详见 Ousterhout 书中的第 160 页。" + +#: ../../library/tkinter.rst:711 +msgid "cursor" +msgstr "cursor" + +#: ../../library/tkinter.rst:708 +msgid "" +"The standard X cursor names from :file:`cursorfont.h` can be used, without " +"the ``XC_`` prefix. For example to get a hand cursor (:const:`XC_hand2`), " +"use the string ``\"hand2\"``. You can also specify a bitmap and mask file " +"of your own. See page 179 of Ousterhout's book." +msgstr "" +"可采用 :file:`cursorfont.h` 中的标准光标名称,去掉 ``XC_`` 前缀。 " +"比如要获取一个手形光标(:const:`XC_hand2`),可以用字符串 ``\"hand2\"``。也可以指定自己的位图和掩码文件作为光标。参见 " +"Ousterhout 书中的第 179 页。" + +#: ../../library/tkinter.rst:718 +msgid "distance" +msgstr "distance" + +#: ../../library/tkinter.rst:714 +msgid "" +"Screen distances can be specified in either pixels or absolute distances. " +"Pixels are given as numbers and absolute distances as strings, with the " +"trailing character denoting units: ``c`` for centimetres, ``i`` for inches, " +"``m`` for millimetres, ``p`` for printer's points. For example, 3.5 inches " +"is expressed as ``\"3.5i\"``." +msgstr "" +"屏幕距离可以用像素或绝对距离来指定。像素是数字,绝对距离是字符串,后面的字符表示单位:``c`` 是厘米,``i`` 是英寸,``m`` " +"是毫米,``p`` 则表示打印机的点数。例如,3.5 英寸可表示为 ``\"3.5i\"``。" + +#: ../../library/tkinter.rst:723 +msgid "font" +msgstr "font" + +#: ../../library/tkinter.rst:721 +msgid "" +"Tk uses a list font name format, such as ``{courier 10 bold}``. Font sizes " +"with positive numbers are measured in points; sizes with negative numbers " +"are measured in pixels." +msgstr "Tk 采用一串名称的格式表示字体,例如 ``{courier 10 bold}``。正数的字体大小以点为单位,负数的大小以像素为单位。" + +#: ../../library/tkinter.rst:728 +msgid "geometry" +msgstr "geometry" + +#: ../../library/tkinter.rst:726 +msgid "" +"This is a string of the form ``widthxheight``, where width and height are " +"measured in pixels for most widgets (in characters for widgets displaying " +"text). For example: ``fred[\"geometry\"] = \"200x100\"``." +msgstr "" +"这是一个 ``widthxheight`` " +"形式的字符串,其中宽度和高度对于大多数部件来说是以像素为单位的(对于显示文本的部件来说是以字符为单位的)。例如:fred[\"geometry\"] =" +" \"200x100\"。" + +#: ../../library/tkinter.rst:732 +msgid "justify" +msgstr "justify" + +#: ../../library/tkinter.rst:731 +msgid "" +"Legal values are the strings: ``\"left\"``, ``\"center\"``, ``\"right\"``, " +"and ``\"fill\"``." +msgstr "合法的值为字符串: ``\"left\"`` 、 ``\"center\"`` 、 ``\"right\"`` 和 ``\"fill\"`` 。" + +#: ../../library/tkinter.rst:737 +msgid "region" +msgstr "区域" + +#: ../../library/tkinter.rst:735 +msgid "" +"This is a string with four space-delimited elements, each of which is a " +"legal distance (see above). For example: ``\"2 3 4 5\"`` and ``\"3i 2i 4.5i" +" 2i\"`` and ``\"3c 2c 4c 10.43c\"`` are all legal regions." +msgstr "" +"这是包含四个元素的字符串,以空格分隔,每个元素是表示一个合法的距离值(见上文)。例如:``\"2 3 4 5\"`` 、 ``\"3i 2i 4.5i " +"2i\"`` 和 ``\"3c 2c 4c 10.43c\"`` 都是合法的区域值。" + +#: ../../library/tkinter.rst:741 +msgid "relief" +msgstr "relief" + +#: ../../library/tkinter.rst:740 +msgid "" +"Determines what the border style of a widget will be. Legal values are: " +"``\"raised\"``, ``\"sunken\"``, ``\"flat\"``, ``\"groove\"``, and " +"``\"ridge\"``." +msgstr "" +"决定了组件的边框样式。 合法值包括:``\"raised\"``、 ``\"sunken\"`` 、``\"flat\"`` " +"、``\"groove\"`` 和 ``\"ridge\"`` 。" + +#: ../../library/tkinter.rst:745 +msgid "scrollcommand" +msgstr "scrollcommand" + +#: ../../library/tkinter.rst:744 +msgid "" +"This is almost always the :meth:`!set` method of some scrollbar widget, but " +"can be any widget method that takes a single argument." +msgstr "这几乎就是带滚动条部件的 :meth:`!set` 方法,但也可是任一只有一个参数的部件方法。" + +#: ../../library/tkinter.rst:748 +msgid "wrap" +msgstr "wrap" + +#: ../../library/tkinter.rst:748 +msgid "Must be one of: ``\"none\"``, ``\"char\"``, or ``\"word\"``." +msgstr "只能是以下值之一:``\"none\"`` 、 ``\"char\"`` 、 ``\"word\"``。" + +#: ../../library/tkinter.rst:753 +msgid "Bindings and Events" +msgstr "绑定和事件" + +#: ../../library/tkinter.rst:759 +msgid "" +"The bind method from the widget command allows you to watch for certain " +"events and to have a callback function trigger when that event type occurs." +" The form of the bind method is::" +msgstr "部件命令中的 bind 方法可觉察某些事件,并在事件发生时触发一个回调函数。bind 方法的形式是:" + +#: ../../library/tkinter.rst:765 +msgid "where:" +msgstr "其中:" + +#: ../../library/tkinter.rst:769 +msgid "sequence" +msgstr "sequence" + +#: ../../library/tkinter.rst:768 +msgid "" +"is a string that denotes the target kind of event. (See the bind man page " +"and page 201 of John Ousterhout's book for details)." +msgstr "是一个表示事件的目标种类的字符串。(详情请看 bind 的手册页和 John Outsterhout 的书的第 201 页。)" + +#: ../../library/tkinter.rst:774 +msgid "func" +msgstr "func" + +#: ../../library/tkinter.rst:772 +msgid "" +"is a Python function, taking one argument, to be invoked when the event " +"occurs. An Event instance will be passed as the argument. (Functions " +"deployed this way are commonly known as *callbacks*.)" +msgstr "" +"是带有一个参数的 Python 函数,发生事件时将会调用。传入的参数为一个 Event 实例。(以这种方式部署的函数通常称为 *回调函数*。)" + +#: ../../library/tkinter.rst:780 +msgid "add" +msgstr "add" + +#: ../../library/tkinter.rst:777 +msgid "" +"is optional, either ``''`` or ``'+'``. Passing an empty string denotes that" +" this binding is to replace any other bindings that this event is associated" +" with. Passing a ``'+'`` means that this function is to be added to the " +"list of functions bound to this event type." +msgstr "" +"可选项, ``''`` 或 ``'+'`` 。传入空字符串表示本次绑定将替换与此事件关联的其他所有绑定。传递 ``'+'`` " +"则意味着加入此事件类型已绑定函数的列表中。" + +#: ../../library/tkinter.rst:789 +msgid "" +"Notice how the widget field of the event is being accessed in the " +"``turn_red()`` callback. This field contains the widget that caught the X " +"event. The following table lists the other event fields you can access, and" +" how they are denoted in Tk, which can be useful when referring to the Tk " +"man pages." +msgstr "" +"请注意,在 ``turn_red()`` 回调函数中如何访问事件的 widget 字段。该字段包含了捕获 X " +"事件的控件。下表列出了事件可供访问的其他字段,及其在 Tk 中的表示方式,这在查看 Tk 手册时很有用处。" + +#: ../../library/tkinter.rst:795 ../../library/tkinter.rst:795 +msgid "Tk" +msgstr "Tk" + +#: ../../library/tkinter.rst:795 ../../library/tkinter.rst:795 +msgid "Tkinter Event Field" +msgstr "Tkinter 事件字段" + +#: ../../library/tkinter.rst:797 +msgid "%f" +msgstr "%f" + +#: ../../library/tkinter.rst:797 +msgid "focus" +msgstr "focus" + +#: ../../library/tkinter.rst:797 +msgid "%A" +msgstr "%A" + +#: ../../library/tkinter.rst:797 +msgid "char" +msgstr "char" + +#: ../../library/tkinter.rst:799 +msgid "%h" +msgstr "%h" + +#: ../../library/tkinter.rst:799 +msgid "height" +msgstr "height" + +#: ../../library/tkinter.rst:799 +msgid "%E" +msgstr "%E" + +#: ../../library/tkinter.rst:799 +msgid "send_event" +msgstr "send_event" + +#: ../../library/tkinter.rst:801 +msgid "%k" +msgstr "%k" + +#: ../../library/tkinter.rst:801 +msgid "keycode" +msgstr "keycode" + +#: ../../library/tkinter.rst:801 +msgid "%K" +msgstr "%K" + +#: ../../library/tkinter.rst:801 +msgid "keysym" +msgstr "keysym" + +#: ../../library/tkinter.rst:803 +msgid "%s" +msgstr "%s" + +#: ../../library/tkinter.rst:803 +msgid "state" +msgstr "state" + +#: ../../library/tkinter.rst:803 +msgid "%N" +msgstr "%N" + +#: ../../library/tkinter.rst:803 +msgid "keysym_num" +msgstr "keysym_num" + +#: ../../library/tkinter.rst:805 +msgid "%t" +msgstr "%t" + +#: ../../library/tkinter.rst:805 +msgid "time" +msgstr "time" + +#: ../../library/tkinter.rst:805 +msgid "%T" +msgstr "%T" + +#: ../../library/tkinter.rst:805 +msgid "type" +msgstr "type" + +#: ../../library/tkinter.rst:807 +msgid "%w" +msgstr "%w" + +#: ../../library/tkinter.rst:807 +msgid "width" +msgstr "width" + +#: ../../library/tkinter.rst:807 +msgid "%W" +msgstr "%W" + +#: ../../library/tkinter.rst:807 +msgid "widget" +msgstr "widget" + +#: ../../library/tkinter.rst:809 +msgid "%x" +msgstr "%x" + +#: ../../library/tkinter.rst:809 +msgid "x" +msgstr "x" + +#: ../../library/tkinter.rst:809 +msgid "%X" +msgstr "%X" + +#: ../../library/tkinter.rst:809 +msgid "x_root" +msgstr "x_root" + +#: ../../library/tkinter.rst:811 +msgid "%y" +msgstr "%y" + +#: ../../library/tkinter.rst:811 +msgid "y" +msgstr "y" + +#: ../../library/tkinter.rst:811 +msgid "%Y" +msgstr "%Y" + +#: ../../library/tkinter.rst:811 +msgid "y_root" +msgstr "y_root" + +#: ../../library/tkinter.rst:816 +msgid "The index Parameter" +msgstr "index 参数" + +#: ../../library/tkinter.rst:818 +msgid "" +"A number of widgets require \"index\" parameters to be passed. These are " +"used to point at a specific place in a Text widget, or to particular " +"characters in an Entry widget, or to particular menu items in a Menu widget." +msgstr "" +"很多控件都需要传入 index 参数。该参数用于指明 Text 控件中的位置,或指明 Entry 控件中的字符,或指明 Menu 控件中的菜单项。" + +#: ../../library/tkinter.rst:825 +msgid "Entry widget indexes (index, view index, etc.)" +msgstr "Entry 控件的索引(index、view index 等)" + +#: ../../library/tkinter.rst:823 +msgid "" +"Entry widgets have options that refer to character positions in the text " +"being displayed. You can use these :mod:`tkinter` functions to access these" +" special points in text widgets:" +msgstr "Entry 控件带有索引属性,指向显示文本中的字符位置。这些 :mod:`tkinter` 函数可用于访问文本控件中的这些特定位置:" + +#: ../../library/tkinter.rst:829 +msgid "Text widget indexes" +msgstr "Text 控件的索引" + +#: ../../library/tkinter.rst:828 +msgid "" +"The index notation for Text widgets is very rich and is best described in " +"the Tk man pages." +msgstr "Text 控件的索引语法非常复杂,最好还是在 Tk 手册中查看。" + +#: ../../library/tkinter.rst:854 +msgid "Menu indexes (menu.invoke(), menu.entryconfig(), etc.)" +msgstr "Menu 索引(menu.invoke()、menu.entryconfig() 等)" + +#: ../../library/tkinter.rst:832 +msgid "" +"Some options and methods for menus manipulate specific menu entries. Anytime" +" a menu index is needed for an option or a parameter, you may pass in:" +msgstr "菜单的某些属性和方法可以操纵特定的菜单项。只要属性或参数需要用到菜单索引,就可用以下方式传入:" + +#: ../../library/tkinter.rst:835 +msgid "" +"an integer which refers to the numeric position of the entry in the widget, " +"counted from the top, starting with 0;" +msgstr "一个整数,指的是菜单项的数字位置,从顶部开始计数,从 0 开始;" + +#: ../../library/tkinter.rst:838 +msgid "" +"the string ``\"active\"``, which refers to the menu position that is " +"currently under the cursor;" +msgstr "字符串 ``\"active\"``,指的是当前光标所在的菜单;" + +#: ../../library/tkinter.rst:841 +msgid "the string ``\"last\"`` which refers to the last menu item;" +msgstr "字符串 ``\"last\"``,指的是上一个菜单项;" + +#: ../../library/tkinter.rst:843 +msgid "" +"An integer preceded by ``@``, as in ``@6``, where the integer is interpreted" +" as a y pixel coordinate in the menu's coordinate system;" +msgstr "带有 ``@`` 前缀的整数,比如 ``@6``,这里的整数解释为菜单坐标系中的 y 像素坐标;" + +#: ../../library/tkinter.rst:846 +msgid "" +"the string ``\"none\"``, which indicates no menu entry at all, most often " +"used with menu.activate() to deactivate all entries, and finally," +msgstr "表示没有任何菜单条目的字符串 ``\"none\"`` 经常与 menu.activate() 一同被用来停用所有条目,以及 ——" + +#: ../../library/tkinter.rst:849 +msgid "" +"a text string that is pattern matched against the label of the menu entry, " +"as scanned from the top of the menu to the bottom. Note that this index " +"type is considered after all the others, which means that matches for menu " +"items labelled ``last``, ``active``, or ``none`` may be interpreted as the " +"above literals, instead." +msgstr "" +"与菜单项的文本标签进行模式匹配的文本串,从菜单顶部扫描到底部。请注意,此索引类型是在其他所有索引类型之后才会考虑的,这意味着文本标签为 " +"``last``、``active`` 或 ``none`` 的菜单项匹配成功后,可能会视为这些单词文字本身。" + +#: ../../library/tkinter.rst:857 +msgid "Images" +msgstr "图片" + +#: ../../library/tkinter.rst:859 +msgid "" +"Images of different formats can be created through the corresponding " +"subclass of :class:`tkinter.Image`:" +msgstr "通过 :class:`tkinter.Image` 的各种子类可以创建相应格式的图片:" + +#: ../../library/tkinter.rst:862 +msgid ":class:`BitmapImage` for images in XBM format." +msgstr ":class:`BitmapImage` 对应 XBM 格式的图片。" + +#: ../../library/tkinter.rst:864 +msgid "" +":class:`PhotoImage` for images in PGM, PPM, GIF and PNG formats. The latter " +"is supported starting with Tk 8.6." +msgstr ":class:`PhotoImage` 对应 PGM、PPM、GIF 和 PNG 格式的图片。后者自 Tk 8.6 开始支持。" + +#: ../../library/tkinter.rst:867 +msgid "" +"Either type of image is created through either the ``file`` or the ``data`` " +"option (other options are available as well)." +msgstr "这两种图片可通过 ``file`` 或 ``data`` 属性创建的(也可能由其他属性创建)。" + +#: ../../library/tkinter.rst:870 +msgid "" +"The image object can then be used wherever an ``image`` option is supported " +"by some widget (e.g. labels, buttons, menus). In these cases, Tk will not " +"keep a reference to the image. When the last Python reference to the image " +"object is deleted, the image data is deleted as well, and Tk will display an" +" empty box wherever the image was used." +msgstr "" +"然后可在某些支持 ``image`` 属性的控件中(如标签、按钮、菜单)使用图片对象。这时,Tk 不会保留对图片对象的引用。当图片对象的最后一个 " +"Python 引用被删除时,图片数据也会删除,并且 Tk 会在用到图片对象的地方显示一个空白框。" + +#: ../../library/tkinter.rst:878 +msgid "" +"The `Pillow `_ package adds support for formats " +"such as BMP, JPEG, TIFF, and WebP, among others." +msgstr "" +"`Pillow `_ 包增加了对 BMP、JPEG、TIFF 和 WebP 等格式的支持。 " + +#: ../../library/tkinter.rst:884 +msgid "File Handlers" +msgstr "文件处理程序" + +#: ../../library/tkinter.rst:886 +msgid "" +"Tk allows you to register and unregister a callback function which will be " +"called from the Tk mainloop when I/O is possible on a file descriptor. Only " +"one handler may be registered per file descriptor. Example code::" +msgstr "" +"Tk 允许为文件操作注册和注销一个回调函数,当对文件描述符进行 I/O 时,Tk " +"的主循环会调用该回调函数。每个文件描述符只能注册一个处理程序。示例代码如下:" + +#: ../../library/tkinter.rst:897 +msgid "This feature is not available on Windows." +msgstr "在 Windows 系统中不可用。" + +#: ../../library/tkinter.rst:899 +msgid "" +"Since you don't know how many bytes are available for reading, you may not " +"want to use the :class:`~io.BufferedIOBase` or :class:`~io.TextIOBase` " +":meth:`~io.BufferedIOBase.read` or :meth:`~io.IOBase.readline` methods, " +"since these will insist on reading a predefined number of bytes. For " +"sockets, the :meth:`~socket.socket.recv` or :meth:`~socket.socket.recvfrom` " +"methods will work fine; for other files, use raw reads or " +"``os.read(file.fileno(), maxbytecount)``." +msgstr "" +"由于不知道可读取多少字节,你可能不希望使用 :class:`~io.BufferedIOBase` 或 :class:`~io.TextIOBase` " +"的 :meth:`~io.BufferedIOBase.read` 或 :meth:`~io.IOBase.readline` " +"方法,因为这些方法必须读取预定数量的字节。 对于套接字,可使用 :meth:`~socket.socket.recv` 或 " +":meth:`~socket.socket.recvfrom` 方法;对于其他文件,可使用原始读取方法或 " +"``os.read(file.fileno(), maxbytecount)``。" + +#: ../../library/tkinter.rst:910 +msgid "" +"Registers the file handler callback function *func*. The *file* argument may" +" either be an object with a :meth:`~io.IOBase.fileno` method (such as a file" +" or socket object), or an integer file descriptor. The *mask* argument is an" +" ORed combination of any of the three constants below. The callback is " +"called as follows::" +msgstr "" +"注册文件处理程序的回调函数 *func*。 *file* 参数可以是具备 :meth:`~io.IOBase.fileno` " +"方法的对象(例如文件或套接字对象),也可以是整数文件描述符。 *mask* 参数是下述三个常量的逻辑“或”组合。回调函数将用以下格式调用:" + +#: ../../library/tkinter.rst:921 +msgid "Unregisters a file handler." +msgstr "注销文件处理函数。" + +#: ../../library/tkinter.rst:928 +msgid "Constants used in the *mask* arguments." +msgstr " *mask* 参数用到的常量。" diff --git a/library/tkinter.scrolledtext.po b/library/tkinter.scrolledtext.po new file mode 100644 index 000000000..1e627afc6 --- /dev/null +++ b/library/tkinter.scrolledtext.po @@ -0,0 +1,66 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) 2001-2022, Python Software Foundation +# This file is distributed under the same license as the Python package. +# FIRST AUTHOR , YEAR. +# +# Translators: +# Makdon , 2019 +# Freesand Leo , 2020 +# +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: Python 3.9\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2022-11-04 14:34+0000\n" +"PO-Revision-Date: 2017-02-16 23:31+0000\n" +"Last-Translator: Freesand Leo , 2020\n" +"Language-Team: Chinese (China) (https://www.transifex.com/python-doc/teams/5390/zh_CN/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: zh_CN\n" +"Plural-Forms: nplurals=1; plural=0;\n" + +#: ../../library/tkinter.scrolledtext.rst:2 +msgid ":mod:`tkinter.scrolledtext` --- Scrolled Text Widget" +msgstr ":mod:`tkinter.scrolledtext` --- 滚动文字控件" + +#: ../../library/tkinter.scrolledtext.rst:10 +msgid "**Source code:** :source:`Lib/tkinter/scrolledtext.py`" +msgstr "**源代码:** :source:`Lib/tkinter/scrolledtext.py`" + +#: ../../library/tkinter.scrolledtext.rst:14 +msgid "" +"The :mod:`tkinter.scrolledtext` module provides a class of the same name " +"which implements a basic text widget which has a vertical scroll bar " +"configured to do the \"right thing.\" Using the :class:`ScrolledText` class" +" is a lot easier than setting up a text widget and scroll bar directly." +msgstr "" +":mod:`tkinter.scrolledtext` 模块提供了一个同名的类,实现了带有垂直滚动条并被配置为可以“正常运作”的文本控件 。 使用 " +":class:`ScrolledText` 类会比直接配置一个文本控件附加滚动条要简单得多。" + +#: ../../library/tkinter.scrolledtext.rst:19 +msgid "" +"The text widget and scrollbar are packed together in a :class:`Frame`, and " +"the methods of the :class:`Grid` and :class:`Pack` geometry managers are " +"acquired from the :class:`Frame` object. This allows the " +":class:`ScrolledText` widget to be used directly to achieve most normal " +"geometry management behavior." +msgstr "" +"文本控件与滚动条打包在一个 :class:`Frame` 中, :class:`Grid` 方法和 :class:`Pack` 方法的布局管理器从 " +":class:`Frame` 对象中获得。这允许 :class:`ScrolledText` 控件可以直接用于实现大多数正常的布局管理行为。" + +#: ../../library/tkinter.scrolledtext.rst:24 +msgid "" +"Should more specific control be necessary, the following attributes are " +"available:" +msgstr "如果需要更具体的控制,可以使用以下属性:" + +#: ../../library/tkinter.scrolledtext.rst:32 +msgid "The frame which surrounds the text and scroll bar widgets." +msgstr "围绕文本和滚动条控件的框架。" + +#: ../../library/tkinter.scrolledtext.rst:37 +msgid "The scroll bar widget." +msgstr "滚动条控件。" diff --git a/library/tkinter.tix.po b/library/tkinter.tix.po new file mode 100644 index 000000000..0d2917eae --- /dev/null +++ b/library/tkinter.tix.po @@ -0,0 +1,684 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) 2001-2022, Python Software Foundation +# This file is distributed under the same license as the Python package. +# FIRST AUTHOR , YEAR. +# +# Translators: +# Jing Li , 2021 +# Freesand Leo , 2022 +# +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: Python 3.9\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2022-11-04 14:34+0000\n" +"PO-Revision-Date: 2017-02-16 23:31+0000\n" +"Last-Translator: Freesand Leo , 2022\n" +"Language-Team: Chinese (China) (https://www.transifex.com/python-doc/teams/5390/zh_CN/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: zh_CN\n" +"Plural-Forms: nplurals=1; plural=0;\n" + +#: ../../library/tkinter.tix.rst:2 +msgid ":mod:`tkinter.tix` --- Extension widgets for Tk" +msgstr ":mod:`tkinter.tix` --- TK扩展包" + +#: ../../library/tkinter.tix.rst:9 +msgid "**Source code:** :source:`Lib/tkinter/tix.py`" +msgstr "**源代码:** :source:`Lib/tkinter/tix.py`" + +#: ../../library/tkinter.tix.rst:13 +msgid "" +"This Tk extension is unmaintained and should not be used in new code. Use " +":mod:`tkinter.ttk` instead." +msgstr "这个 TK 扩展已无人维护所以请不要在新代码中使用。 请改用 :mod:`tkinter.ttk`。" + +#: ../../library/tkinter.tix.rst:19 +msgid "" +"The :mod:`tkinter.tix` (Tk Interface Extension) module provides an " +"additional rich set of widgets. Although the standard Tk library has many " +"useful widgets, they are far from complete. The :mod:`tkinter.tix` library " +"provides most of the commonly needed widgets that are missing from standard " +"Tk: :class:`HList`, :class:`ComboBox`, :class:`Control` (a.k.a. SpinBox) and" +" an assortment of scrollable widgets. :mod:`tkinter.tix` also includes many " +"more widgets that are generally useful in a wide range of applications: " +":class:`NoteBook`, :class:`FileEntry`, :class:`PanedWindow`, etc; there are " +"more than 40 of them." +msgstr "" +":mod:`tkinter.tix` (Tk Interface Extension) 模块提供了更丰富的额外可视化部件集。 虽然标准 Tk " +"库包含许多有用的部件,但还远不够完备。 :mod:`tkinter.tix` 库提供了标准 Tk 所缺少的大量常用部件: :class:`HList`," +" :class:`ComboBox`, :class:`Control` (即 SpinBox) 以及一系列可滚动的部件。 " +":mod:`tkinter.tix` 还包括了大量在多种不同领域的应用中很常用的部件: :class:`NoteBook`, " +":class:`FileEntry`, :class:`PanedWindow` 等等;总共有超过 40 种。" + +#: ../../library/tkinter.tix.rst:29 +msgid "" +"With all these new widgets, you can introduce new interaction techniques " +"into applications, creating more useful and more intuitive user interfaces. " +"You can design your application by choosing the most appropriate widgets to " +"match the special needs of your application and users." +msgstr "" +"使用这些新增部件,你可以为应用程序引入新的交互技术,创建更好用且更直观的用户界面。 " +"你在设计应用程序时可以通过选择最适合的部件来匹配你的应用程序和用户的特殊需求。" + +#: ../../library/tkinter.tix.rst:38 +msgid "`Tix Homepage `_" +msgstr "`Tix 主页 `_" + +#: ../../library/tkinter.tix.rst:37 +msgid "" +"The home page for :mod:`Tix`. This includes links to additional " +"documentation and downloads." +msgstr ":mod:`Tix` 的主页。 其中包括附加文档和下载资源的链接。" + +#: ../../library/tkinter.tix.rst:41 +msgid "`Tix Man Pages `_" +msgstr "`Tix Man Pages `_" + +#: ../../library/tkinter.tix.rst:41 +msgid "On-line version of the man pages and reference material." +msgstr "在线版本的指南页面和参考材料。" + +#: ../../library/tkinter.tix.rst:44 +msgid "" +"`Tix Programming Guide `_" +msgstr "" +"`Tix Programming Guide `_" + +#: ../../library/tkinter.tix.rst:44 +msgid "On-line version of the programmer's reference material." +msgstr "在线版本的程序员参考材料。" + +#: ../../library/tkinter.tix.rst:48 +msgid "" +"`Tix Development Applications " +"`_" +msgstr "" +"`Tix Development Applications " +"`_" + +#: ../../library/tkinter.tix.rst:47 +msgid "" +"Tix applications for development of Tix and Tkinter programs. Tide " +"applications work under Tk or Tkinter, and include :program:`TixInspect`, an" +" inspector to remotely modify and debug Tix/Tk/Tkinter applications." +msgstr "" +"开发 Tix 和 Tkinter 程序的 Tix 应用。 Tide 应用在 Tk 在 Tkinter 下工作,并包括了 " +":program:`TixInspect`,这是一个可远程修改和调试 Tix/Tk/Tkinter 应用的检查工具。" + +#: ../../library/tkinter.tix.rst:53 +msgid "Using Tix" +msgstr "使用 Tix" + +#: ../../library/tkinter.tix.rst:58 +msgid "" +"Toplevel widget of Tix which represents mostly the main window of an " +"application. It has an associated Tcl interpreter." +msgstr "最常用于代表应用主窗口的最高层级部件。 它具有一个相关联的 Tcl 解释器。interpreter." + +#: ../../library/tkinter.tix.rst:61 +msgid "" +"Classes in the :mod:`tkinter.tix` module subclasses the classes in the " +":mod:`tkinter`. The former imports the latter, so to use :mod:`tkinter.tix` " +"with Tkinter, all you need to do is to import one module. In general, you " +"can just import :mod:`tkinter.tix`, and replace the toplevel call to " +":class:`tkinter.Tk` with :class:`tix.Tk`::" +msgstr "" +":mod:`tkinter.tix` 模块中的类子类化了 :mod:`tkinter` 中的类。 前者会导入后者,因此 " +":mod:`tkinter.tix` 要使用 Tkinter,你所要做的就是导入一个模块。 通常,你可以只导入 " +":mod:`tkinter.tix`,并将最高层级调用由 :class:`tkinter.Tk` 替换为 :class:`tix.Tk`::" + +#: ../../library/tkinter.tix.rst:71 +msgid "" +"To use :mod:`tkinter.tix`, you must have the Tix widgets installed, usually " +"alongside your installation of the Tk widgets. To test your installation, " +"try the following::" +msgstr "" +"要使用 :mod:`tkinter.tix`,你必须安装有 Tix 部件,通常会与你的 Tk 部分一起安装。 要测试你的安装,请尝试以下代码::" + +#: ../../library/tkinter.tix.rst:81 +msgid "Tix Widgets" +msgstr "Tix 部件" + +#: ../../library/tkinter.tix.rst:83 +msgid "" +"`Tix " +"`_ " +"introduces over 40 widget classes to the :mod:`tkinter` repertoire." +msgstr "" +"`Tix " +"`_ 将 " +"40 多个部件类引入到 :mod:`tkinter` 工具集中。" + +#: ../../library/tkinter.tix.rst:88 +msgid "Basic Widgets" +msgstr "基本部件" + +#: ../../library/tkinter.tix.rst:93 +msgid "" +"A `Balloon " +"`_ " +"that pops up over a widget to provide help. When the user moves the cursor " +"inside a widget to which a Balloon widget has been bound, a small pop-up " +"window with a descriptive message will be shown on the screen." +msgstr "" +"`Balloon " +"`_ " +"会在部件上弹出以提供帮助信息。 当用户将光标移到一个与 Balloon 部件绑定的部件内时,将在屏幕上弹出一个显示描述性消息的小窗口。" + +#: ../../library/tkinter.tix.rst:105 +msgid "" +"The `ButtonBox " +"`_" +" widget creates a box of buttons, such as is commonly used for ``Ok " +"Cancel``." +msgstr "" +"`ButtonBox " +"`_" +" 部件会创建一组按钮框,例如常用的 ``Ok Cancel`` 按钮框。" + +#: ../../library/tkinter.tix.rst:115 +msgid "" +"The `ComboBox " +"`_ " +"widget is similar to the combo box control in MS Windows. The user can " +"select a choice by either typing in the entry subwidget or selecting from " +"the listbox subwidget." +msgstr "" +"`ComboBox " +"`_ " +"部件类似于 MS Windows 中的组合框控件。 用户可以通过在输入框子部件中输入或是在列表框子部件中选择来选定一个选项。" + +#: ../../library/tkinter.tix.rst:127 +msgid "" +"The `Control " +"`_ " +"widget is also known as the :class:`SpinBox` widget. The user can adjust the" +" value by pressing the two arrow buttons or by entering the value directly " +"into the entry. The new value will be checked against the user-defined upper" +" and lower limits." +msgstr "" +"The `Control " +"`_ " +"控件又名 :class:`SpinBox` 控件。 用户可通过点按两个方向键或直接输入内容来调整数值。 更新的数值将被检查是否在用户定义的上下限之内。" + +#: ../../library/tkinter.tix.rst:140 +msgid "" +"The `LabelEntry " +"`_" +" widget packages an entry widget and a label into one mega widget. It can be" +" used to simplify the creation of \"entry-form\" type of interface." +msgstr "" +"`LabelEntry " +"`_" +" 部件将输入框部件和标签打包为一个部件。 它可被用来简化 \"输入表单\" 类界面的创建。" + +#: ../../library/tkinter.tix.rst:151 +msgid "" +"The `LabelFrame " +"`_" +" widget packages a frame widget and a label into one mega widget. To create" +" widgets inside a LabelFrame widget, one creates the new widgets relative to" +" the :attr:`frame` subwidget and manage them inside the :attr:`frame` " +"subwidget." +msgstr "" +"`LabelFrame " +"`_" +" 部件将框架部件和标签打包为一个部件。 要在一个 LabelFrame 部件中创建部件,应当创建与 :attr:`frame` 子部件相关联的新部件并在" +" :attr:`frame` 子部件中管理它们。" + +#: ../../library/tkinter.tix.rst:163 +msgid "" +"The `Meter " +"`_ " +"widget can be used to show the progress of a background job which may take a" +" long time to execute." +msgstr "" +"`Meter " +"`_ " +"部件可用来显示可能会耗费很长时间运行的后台任务的进度。" + +#: ../../library/tkinter.tix.rst:174 +msgid "" +"The `OptionMenu " +"`_" +" creates a menu button of options." +msgstr "" +"`OptionMenu " +"`_" +" 可创建一个选项按钮菜单。" + +#: ../../library/tkinter.tix.rst:184 +msgid "" +"The `PopupMenu " +"`_" +" widget can be used as a replacement of the ``tk_popup`` command. The " +"advantage of the :mod:`Tix` :class:`PopupMenu` widget is it requires less " +"application code to manipulate." +msgstr "" +"`PopupMenu " +"`_" +" 部件可被用来替代 ``tk_popup`` 命令。 :mod:`Tix` :class:`PopupMenu` " +"部件的优势在于它所需要的应用操纵代码较少。" + +#: ../../library/tkinter.tix.rst:196 +msgid "" +"The `Select " +"`_ " +"widget is a container of button subwidgets. It can be used to provide radio-" +"box or check-box style of selection options for the user." +msgstr "" +"`Select " +"`_ " +"控件是一组按钮子控件的容器。 它可被用来为用户提供单选钮或复选钮形式的选项。" + +#: ../../library/tkinter.tix.rst:207 +msgid "" +"The `StdButtonBox " +"`_" +" widget is a group of standard buttons for Motif-like dialog boxes." +msgstr "" +"`StdButtonBox " +"`_" +" 部件是一个用于 Motif 风格对话框的标准按钮组。" + +#: ../../library/tkinter.tix.rst:216 +msgid "File Selectors" +msgstr "文件选择器" + +#: ../../library/tkinter.tix.rst:221 +msgid "" +"The `DirList " +"`_ " +"widget displays a list view of a directory, its previous directories and its" +" sub-directories. The user can choose one of the directories displayed in " +"the list or change to another directory." +msgstr "" +"`DirList " +"`_ " +"部件显示一个目录、它的上级目录和子目录的列表视图。 用户可以选择列表中显示的某个目录或切换到另一个目录。" + +#: ../../library/tkinter.tix.rst:233 +msgid "" +"The `DirTree " +"`_ " +"widget displays a tree view of a directory, its previous directories and its" +" sub-directories. The user can choose one of the directories displayed in " +"the list or change to another directory." +msgstr "" +"`DirTree " +"`_ " +"部件显示一个目录、它的上级目录和子目录的树状视图。 用户可以选择其中显示的某个目录或切换到另一个目录。" + +#: ../../library/tkinter.tix.rst:245 +msgid "" +"The `DirSelectDialog " +"`_" +" widget presents the directories in the file system in a dialog window. The" +" user can use this dialog window to navigate through the file system to " +"select the desired directory." +msgstr "" +"`DirSelectDialog " +"`_" +" 部件以对话框窗口形式表示文件系统中的目录。 用户可以使用该对话框窗口在文件系统中漫游以选择所需的目录。" + +#: ../../library/tkinter.tix.rst:257 +msgid "" +"The :class:`DirSelectBox` is similar to the standard Motif(TM) directory-" +"selection box. It is generally used for the user to choose a directory. " +"DirSelectBox stores the directories mostly recently selected into a ComboBox" +" widget so that they can be quickly selected again." +msgstr "" +":class:`DirSelectBox` 类似于标准的 Motif(TM) 目录选择框。 它通常用于让用户选择一个目录。 DirSelectBox " +"会将最近选择的目录存放在一个 ComboBox 部件中以便可以再次快速地选择它们。" + +#: ../../library/tkinter.tix.rst:265 +msgid "" +"The `ExFileSelectBox " +"`_" +" widget is usually embedded in a tixExFileSelectDialog widget. It provides a" +" convenient method for the user to select files. The style of the " +":class:`ExFileSelectBox` widget is very similar to the standard file dialog " +"on MS Windows 3.1." +msgstr "" +"`ExFileSelectBox " +"`_" +" 部件通常是嵌入在 tixExFileSelectDialog 部件中。 它为用户提供了一种方便的选择文件方法。 " +":class:`ExFileSelectBox` 部件的风格非常类似于 MS Windows 3.1 中的标准文件对话框。" + +#: ../../library/tkinter.tix.rst:278 +msgid "" +"The `FileSelectBox " +"`_" +" is similar to the standard Motif(TM) file-selection box. It is generally " +"used for the user to choose a file. FileSelectBox stores the files mostly " +"recently selected into a :class:`ComboBox` widget so that they can be " +"quickly selected again." +msgstr "" +"`FileSelectBox " +"`_" +" 类似于标准的 Motif(TM) 文件选择框。 它通常用于让用户选择一个文件。 FileSelectBox 会将最近选择的文件存放在一个 " +":class:`ComboBox` 部件中以便可以再次快速地选择它们。" + +#: ../../library/tkinter.tix.rst:291 +msgid "" +"The `FileEntry " +"`_" +" widget can be used to input a filename. The user can type in the filename " +"manually. Alternatively, the user can press the button widget that sits next" +" to the entry, which will bring up a file selection dialog." +msgstr "" +"`FileEntry " +"`_" +" 部件可被用于输入一个文件名。 用户可以手动输入文件名。 或者用户也可以按输入框旁边的按钮控件,这将打开一个文件选择对话框。" + +#: ../../library/tkinter.tix.rst:302 +msgid "Hierarchical ListBox" +msgstr "层级式列表框" + +#: ../../library/tkinter.tix.rst:307 +msgid "" +"The `HList " +"`_ " +"widget can be used to display any data that have a hierarchical structure, " +"for example, file system directory trees. The list entries are indented and " +"connected by branch lines according to their places in the hierarchy." +msgstr "" +"`HList " +"`_ " +"部件可被用于显示任何具有层级结构的数据,例如文件系统目录树。 其中的列表条目带有缩进并按照它们在层级中的位置以分支线段相连。" + +#: ../../library/tkinter.tix.rst:319 +msgid "" +"The `CheckList " +"`_" +" widget displays a list of items to be selected by the user. CheckList acts " +"similarly to the Tk checkbutton or radiobutton widgets, except it is capable" +" of handling many more items than checkbuttons or radiobuttons." +msgstr "" +"`CheckList " +"`_" +" 部件可显示一个供用户选择的条目列表。 CheckList 的功能类似于 Tk 复选钮或单选钮部件,不同之处在于它能够处理比复选钮或单选钮多得多的条目。" + +#: ../../library/tkinter.tix.rst:335 +msgid "" +"The `Tree " +"`_ " +"widget can be used to display hierarchical data in a tree form. The user can" +" adjust the view of the tree by opening or closing parts of the tree." +msgstr "" +"`Tree " +"`_ " +"部件可被用于以树形显示具有层级结构的数据。 用户可以通过打开或关闭部分树枝来调整树形视图。" + +#: ../../library/tkinter.tix.rst:347 +msgid "Tabular ListBox" +msgstr "表格式列表框" + +#: ../../library/tkinter.tix.rst:352 +msgid "" +"The `TList " +"`_ " +"widget can be used to display data in a tabular format. The list entries of " +"a :class:`TList` widget are similar to the entries in the Tk listbox widget." +" The main differences are (1) the :class:`TList` widget can display the " +"list entries in a two dimensional format and (2) you can use graphical " +"images as well as multiple colors and fonts for the list entries." +msgstr "" +"`TList " +"`_ " +"部件可被用于以表格形式显示数据。 :class:`TList` 部件中的列表条目类似于 Tk 列表框部件中的条目。 主要差异在于 (1) " +":class:`TList` 部件能以二维格式显示列表条目 (2) 你可以在列表条目中使用图片以及多种颜色和字体。" + +#: ../../library/tkinter.tix.rst:375 +msgid "Manager Widgets" +msgstr "管理器部件" + +#: ../../library/tkinter.tix.rst:380 +msgid "" +"The `PanedWindow " +"`_" +" widget allows the user to interactively manipulate the sizes of several " +"panes. The panes can be arranged either vertically or horizontally. The " +"user changes the sizes of the panes by dragging the resize handle between " +"two panes." +msgstr "" +"`PanedWindow " +"`_" +" 部件允许用户交互式地控制多个面板的大小。 这些面板可以垂直或水平地排列。 用户通过拖动两个面板间的控制柄来改变面板的大小。" + +#: ../../library/tkinter.tix.rst:392 +msgid "" +"The `ListNoteBook " +"`_" +" widget is very similar to the :class:`TixNoteBook` widget: it can be used " +"to display many windows in a limited space using a notebook metaphor. The " +"notebook is divided into a stack of pages (windows). At one time only one of" +" these pages can be shown. The user can navigate through these pages by " +"choosing the name of the desired page in the :attr:`hlist` subwidget." +msgstr "" +"`ListNoteBook " +"`_" +" 部件非常类似于 :class:`TixNoteBook` 部件:它可被用于在有限空间内显示多个窗口,就像是一个“笔记本”。 " +"笔记本可分为许多页面(窗口)。 同一时刻只能显示其中一个页面。 用户可以通过在 :attr:`hlist` 子部件中选择所需页面的名称来切换这些页面。" + +#: ../../library/tkinter.tix.rst:406 +msgid "" +"The `NoteBook " +"`_ " +"widget can be used to display many windows in a limited space using a " +"notebook metaphor. The notebook is divided into a stack of pages. At one " +"time only one of these pages can be shown. The user can navigate through " +"these pages by choosing the visual \"tabs\" at the top of the NoteBook " +"widget." +msgstr "" +"`NoteBook " +"`_ " +"部件可被用于在有限空间内显示多个窗口,就像是一个“笔记本”。 笔记本可分为许多页面。 同一时刻只能显示其中一个页面。 用户可以通过选择 NoteBook" +" 部件顶端的可视化“选项卡”来切换这些页面。" + +#: ../../library/tkinter.tix.rst:428 +msgid "Image Types" +msgstr "图像类型" + +#: ../../library/tkinter.tix.rst:430 +msgid "The :mod:`tkinter.tix` module adds:" +msgstr ":mod:`tkinter.tix` 模块增加了:" + +#: ../../library/tkinter.tix.rst:432 +msgid "" +"`pixmap " +"`_ " +"capabilities to all :mod:`tkinter.tix` and :mod:`tkinter` widgets to create " +"color images from XPM files." +msgstr "" +"将 `pixmap " +"`_ " +"功能提供给所有 :mod:`tkinter.tix` 和 :mod:`tkinter` 部件以使用 XPM 文件创建彩色图像。" + +#: ../../library/tkinter.tix.rst:441 +msgid "" +"`Compound " +"`_ " +"image types can be used to create images that consists of multiple " +"horizontal lines; each line is composed of a series of items (texts, " +"bitmaps, images or spaces) arranged from left to right. For example, a " +"compound image can be used to display a bitmap and a text string " +"simultaneously in a Tk :class:`Button` widget." +msgstr "" +"`Compound " +"`_ " +"图像类型可被用于创建由许多横行构成的图像;每一行都包含从左至右排列的一组条目(文本、位图、图像或空白)。 例如,某个组合图像可被用于在一个 Tk " +":class:`Button` 部件内同时显示一张位图和一个文本字符串。" + +#: ../../library/tkinter.tix.rst:460 +msgid "Miscellaneous Widgets" +msgstr "其他部件" + +#: ../../library/tkinter.tix.rst:465 +msgid "" +"The `InputOnly " +"`_" +" widgets are to accept inputs from the user, which can be done with the " +"``bind`` command (Unix only)." +msgstr "" +"`InputOnly " +"`_" +" 部件可接收来自用户的输入,此功能可通过 ``bind`` 命令实现(仅限 Unix)。" + +#: ../../library/tkinter.tix.rst:472 +msgid "Form Geometry Manager" +msgstr "表单布局管理器" + +#: ../../library/tkinter.tix.rst:474 +msgid "In addition, :mod:`tkinter.tix` augments :mod:`tkinter` by providing:" +msgstr ":mod:`tkinter.tix` 还额外提供了以下部件来增强 :mod:`tkinter` 的功能:" + +#: ../../library/tkinter.tix.rst:479 +msgid "" +"The `Form " +"`_ " +"geometry manager based on attachment rules for all Tk widgets." +msgstr "" +"`Form " +"`_ " +"布局管理器是以针对所有 Tk 部件的附加规则为基础的。" + +#: ../../library/tkinter.tix.rst:485 +msgid "Tix Commands" +msgstr "Tix 命令" + +#: ../../library/tkinter.tix.rst:490 +msgid "" +"The `tix commands " +"`_ provide " +"access to miscellaneous elements of :mod:`Tix`'s internal state and the " +":mod:`Tix` application context. Most of the information manipulated by " +"these methods pertains to the application as a whole, or to a screen or " +"display, rather than to a particular window." +msgstr "" +"`Tix 命令 `_ " +"提供了对 :mod:`Tix` 内部状态和 :mod:`Tix` 应用程序上下文等杂项元素的访问。 " +"大部分由这些方法控制的信息作为一个整体被发给应用程序,或是发给一个屏幕或显示区域,而不是某个特定窗口。" + +#: ../../library/tkinter.tix.rst:497 +msgid "To view the current settings, the common usage is::" +msgstr "要查看当前的设置,通常的用法是::" + +#: ../../library/tkinter.tix.rst:506 +msgid "" +"Query or modify the configuration options of the Tix application context. If" +" no option is specified, returns a dictionary all of the available options." +" If option is specified with no value, then the method returns a list " +"describing the one named option (this list will be identical to the " +"corresponding sublist of the value returned if no option is specified). If " +"one or more option-value pairs are specified, then the method modifies the " +"given option(s) to have the given value(s); in this case the method returns " +"an empty string. Option may be any of the configuration options." +msgstr "" +"查询或修改 Tix 应用程序上下文的配置选项。 如果未指定任何选项,则返回包含所有选项的字典。 " +"如果指定了不带值的选项,则该方法返回描述指定选项的列表(如果未指定选项则此列表与所返回值对应的子列表相同)。 如果指定了一个或多个选项-" +"值对,则该方法会将指定的选项修改为指定的值;在此情况下该方法将返回一个空字符串。 选项可以是配置选项中的任何一个。" + +#: ../../library/tkinter.tix.rst:518 +msgid "" +"Returns the current value of the configuration option given by *option*. " +"Option may be any of the configuration options." +msgstr "返回由 *option* 给出的配置选项的当前值。 选项可以是配置选项中的任何一个。" + +#: ../../library/tkinter.tix.rst:524 +msgid "" +"Locates a bitmap file of the name ``name.xpm`` or ``name`` in one of the " +"bitmap directories (see the :meth:`tix_addbitmapdir` method). By using " +":meth:`tix_getbitmap`, you can avoid hard coding the pathnames of the bitmap" +" files in your application. When successful, it returns the complete " +"pathname of the bitmap file, prefixed with the character ``@``. The " +"returned value can be used to configure the ``bitmap`` option of the Tk and " +"Tix widgets." +msgstr "" +"在某个位图目录中定位名称为 ``name.xpm`` 或 ``name`` 的位图文件(位图目录参见 :meth:`tix_addbitmapdir` " +"方法)。 通过使用 :meth:`tix_getbitmap`,你可以避免在你的应用程序中硬编码位图文件的路径名。 " +"执行成功时,它返回位图文件的完整路径名,并带有前缀字符 ``@``。 返回值可被用于配置 Tk 和 Tix 部件的 ``bitmap`` 选项。" + +#: ../../library/tkinter.tix.rst:534 +msgid "" +"Tix maintains a list of directories under which the :meth:`tix_getimage` and" +" :meth:`tix_getbitmap` methods will search for image files. The standard " +"bitmap directory is :file:`$TIX_LIBRARY/bitmaps`. The " +":meth:`tix_addbitmapdir` method adds *directory* into this list. By using " +"this method, the image files of an applications can also be located using " +"the :meth:`tix_getimage` or :meth:`tix_getbitmap` method." +msgstr "" +"Tix 维护了一个列表以供 :meth:`tix_getimage` 和 :meth:`tix_getbitmap` 方法在其中搜索图像文件。 " +"标准位图目录是 :file:`$TIX_LIBRARY/bitmaps`。 :meth:`tix_addbitmapdir` 方法向该列表添加了 " +"*directory*。 通过使用此方法,应用程序的图像文件也可使用 :meth:`tix_getimage` 或 " +":meth:`tix_getbitmap` 方法来定位。" + +#: ../../library/tkinter.tix.rst:544 +msgid "" +"Returns the file selection dialog that may be shared among different calls " +"from this application. This method will create a file selection dialog " +"widget when it is called the first time. This dialog will be returned by all" +" subsequent calls to :meth:`tix_filedialog`. An optional dlgclass parameter" +" can be passed as a string to specified what type of file selection dialog " +"widget is desired. Possible options are ``tix``, ``FileSelectDialog`` or " +"``tixExFileSelectDialog``." +msgstr "" +"返回可在来自该应用程序的同不调用之间共享的选择对话框。 此方法将在首次被调用时创建一个选择对话框部件。 此后对 " +":meth:`tix_filedialog` 的所有调用都将返回该对话框。 可以传入一个字符串形式的可选形参 dlgclass " +"来指明所需的选择对话框类型。 可用的选项有 ``tix``, ``FileSelectDialog`` 或 " +"``tixExFileSelectDialog``。" + +#: ../../library/tkinter.tix.rst:554 +msgid "" +"Locates an image file of the name :file:`name.xpm`, :file:`name.xbm` or " +":file:`name.ppm` in one of the bitmap directories (see the " +":meth:`tix_addbitmapdir` method above). If more than one file with the same " +"name (but different extensions) exist, then the image type is chosen " +"according to the depth of the X display: xbm images are chosen on monochrome" +" displays and color images are chosen on color displays. By using " +":meth:`tix_getimage`, you can avoid hard coding the pathnames of the image " +"files in your application. When successful, this method returns the name of " +"the newly created image, which can be used to configure the ``image`` option" +" of the Tk and Tix widgets." +msgstr "" +"在某个位图目录(参见上文的 :meth:`tix_addbitmapdir` 方法)中定位名为 :file:`name.xpm`, " +":file:`name.xbm` 或 :file:`name.ppm` 的图像文件。 如果存在多个同名文件(但扩展名不同),则会按照 X " +"显示的深度选择图像类型:单色显示选择 xbm 图像而彩色显示则选择彩色图像。 通过使用 " +":meth:`tix_getimage`,你可以避免在你的应用程序中硬编码图像文件的路径名。 当执行成功时,此方法将返回新创建图像的名称,它可被用于配置" +" Tk 和 Tix 部件的 ``image`` 选项。" + +#: ../../library/tkinter.tix.rst:567 +msgid "Gets the options maintained by the Tix scheme mechanism." +msgstr "获取由 Tix 规格机制维护的选项。" + +#: ../../library/tkinter.tix.rst:572 +msgid "" +"Resets the scheme and fontset of the Tix application to *newScheme* and " +"*newFontSet*, respectively. This affects only those widgets created after " +"this call. Therefore, it is best to call the resetoptions method before the" +" creation of any widgets in a Tix application." +msgstr "" +"将 Tix 应用程序的规格设置与字体设置分别重置为 *newScheme* 和 *newFontSet*。 这只会影响调用此方法之后创建的部件。 " +"因此,最好是在 Tix 应用程序的任何部件被创建之前调用 resetoptions 方法。" + +#: ../../library/tkinter.tix.rst:577 +msgid "" +"The optional parameter *newScmPrio* can be given to reset the priority level" +" of the Tk options set by the Tix schemes." +msgstr "可以给出可选的形参 *newScmPrio* 来重置由 Tix 规格所设置的 Tk 选项的优先级。" + +#: ../../library/tkinter.tix.rst:580 +msgid "" +"Because of the way Tk handles the X option database, after Tix has been has " +"imported and inited, it is not possible to reset the color schemes and font " +"sets using the :meth:`tix_config` method. Instead, the " +":meth:`tix_resetoptions` method must be used." +msgstr "" +"由于 Tk 处理 X 选项数据库的特别方式,在 Tix 被导入并初始化之后,将无法再使用 :meth:`tix_config` " +"方法来重置颜色方案和字体集。 而必须要使用 :meth:`tix_resetoptions` 方法。" diff --git a/library/tkinter.ttk.po b/library/tkinter.ttk.po new file mode 100644 index 000000000..5a5e50a13 --- /dev/null +++ b/library/tkinter.ttk.po @@ -0,0 +1,2291 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) 2001-2024, Python Software Foundation +# This file is distributed under the same license as the Python package. +# FIRST AUTHOR , YEAR. +# +# Translators: +# ppcfish , 2019 +# Leo Li , 2020 +# Dai Xu , 2022 +# Freesand Leo , 2023 +# Rafael Fontenelle , 2024 +# +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: Python 3.9\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2024-05-31 16:34+0000\n" +"PO-Revision-Date: 2017-02-16 23:31+0000\n" +"Last-Translator: Rafael Fontenelle , 2024\n" +"Language-Team: Chinese (China) (https://app.transifex.com/python-doc/teams/5390/zh_CN/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: zh_CN\n" +"Plural-Forms: nplurals=1; plural=0;\n" + +#: ../../library/tkinter.ttk.rst:2 +msgid ":mod:`tkinter.ttk` --- Tk themed widgets" +msgstr ":mod:`tkinter.ttk` --- Tk 风格的控件" + +#: ../../library/tkinter.ttk.rst:9 +msgid "**Source code:** :source:`Lib/tkinter/ttk.py`" +msgstr "**源代码:** :source:`Lib/tkinter/ttk.py`" + +#: ../../library/tkinter.ttk.rst:15 +msgid "" +"The :mod:`tkinter.ttk` module provides access to the Tk themed widget set, " +"introduced in Tk 8.5. If Python has not been compiled against Tk 8.5, this " +"module can still be accessed if *Tile* has been installed. The former " +"method using Tk 8.5 provides additional benefits including anti-aliased font" +" rendering under X11 and window transparency (requiring a composition window" +" manager on X11)." +msgstr "" +":mod:`tkinter.ttk` 模块自 Tk 8.5 开始引入,可用于访问 Tk 风格的控件包。如果 Python 未基于 Tk 8.5 " +"编译,只要安装了 *Tile* 仍可访问本模块。前一种采用 Tk 8.5 的方式带有更多好处,比如在 X11 系统下支持反锯齿字体渲染和透明窗口(需要 " +"X11 中的窗口组管理器)。" + +#: ../../library/tkinter.ttk.rst:22 +msgid "" +"The basic idea for :mod:`tkinter.ttk` is to separate, to the extent " +"possible, the code implementing a widget's behavior from the code " +"implementing its appearance." +msgstr ":mod:`tkinter.ttk` 的基本设计思路,就是尽可能地把控件的行为代码与实现其外观的代码分离开来。" + +#: ../../library/tkinter.ttk.rst:29 +msgid "" +"`Tk Widget Styling Support `_" +msgstr "`Tk 控件风格 `_" + +#: ../../library/tkinter.ttk.rst:30 +msgid "A document introducing theming support for Tk" +msgstr "介绍 Tk 风格的文档" + +#: ../../library/tkinter.ttk.rst:34 +msgid "Using Ttk" +msgstr "ttk 的用法" + +#: ../../library/tkinter.ttk.rst:36 +msgid "To start using Ttk, import its module::" +msgstr "使用 ttk 之前,首先要导入模块:" + +#: ../../library/tkinter.ttk.rst:40 +msgid "" +"To override the basic Tk widgets, the import should follow the Tk import::" +msgstr "为了覆盖基础的 Tk 控件,应该在 Tk 之后进行导入:" + +#: ../../library/tkinter.ttk.rst:45 +msgid "" +"That code causes several :mod:`tkinter.ttk` widgets (:class:`Button`, " +":class:`Checkbutton`, :class:`Entry`, :class:`Frame`, :class:`Label`, " +":class:`LabelFrame`, :class:`Menubutton`, :class:`PanedWindow`, " +":class:`Radiobutton`, :class:`Scale` and :class:`Scrollbar`) to " +"automatically replace the Tk widgets." +msgstr "" +"这段代码会让以下几个 :mod:`tkinter. ttk` 控件(:class:`Button`, :class:`Checkbutton`, " +":class:`Entry`, :class:`Frame`, :class:`Label`, :class:`LabelFrame`, " +":class:`Menubutton`, :class:`PanedWindow`, :class:`Radiobutton`, " +":class:`Scale` 和 :class:`Scrollbar`)自动替换掉 Tk 的对应控件。" + +#: ../../library/tkinter.ttk.rst:51 +msgid "" +"This has the direct benefit of using the new widgets which gives a better " +"look and feel across platforms; however, the replacement widgets are not " +"completely compatible. The main difference is that widget options such as " +"\"fg\", \"bg\" and others related to widget styling are no longer present in" +" Ttk widgets. Instead, use the :class:`ttk.Style` class for improved " +"styling effects." +msgstr "" +"使用新控件的直接好处,是拥有更好的跨平台的外观,但新旧控件并不完全兼容。主要区别在于,Ttk 组件不再包含“fg”、“bg”等与样式相关的属性 。而是用" +" :class:`ttk.Style` 类来定义更美观的样式效果。" + +#: ../../library/tkinter.ttk.rst:62 +msgid "" +"`Converting existing applications to use Tile widgets " +"`_" +msgstr "" +"将现有的应用程序转换为 Tile 控件,可参考 `Converting existing applications to use Tile " +"widgets `_ 。" + +#: ../../library/tkinter.ttk.rst:62 +msgid "" +"A monograph (using Tcl terminology) about differences typically encountered " +"when moving applications to use the new widgets." +msgstr "此文介绍迁移为新控件时的常见差别(使用 Tcl )。" + +#: ../../library/tkinter.ttk.rst:67 +msgid "Ttk Widgets" +msgstr "ttk 控件" + +#: ../../library/tkinter.ttk.rst:69 +msgid "" +"Ttk comes with 18 widgets, twelve of which already existed in tkinter: " +":class:`Button`, :class:`Checkbutton`, :class:`Entry`, :class:`Frame`, " +":class:`Label`, :class:`LabelFrame`, :class:`Menubutton`, " +":class:`PanedWindow`, :class:`Radiobutton`, :class:`Scale`, " +":class:`Scrollbar`, and :class:`Spinbox`. The other six are new: " +":class:`Combobox`, :class:`Notebook`, :class:`Progressbar`, " +":class:`Separator`, :class:`Sizegrip` and :class:`Treeview`. And all them " +"are subclasses of :class:`Widget`." +msgstr "" +"ttk 中有 18 种部件 ,其中 12 种在 tkinter 中已包含了: :class:`Button` 、 " +":class:`Checkbutton` 、:class:`Entry` 、 :class:`Frame` 、 :class:`Label`, " +":class:`LabelFrame` 、 :class:`Menubutton` 、:class:`PanedWindow` " +"、:class:`Radiobutton` 、 :class:`Scale` 、 :class:`Scrollbar` 和 " +":class:`Spinbox`。另有 6 种是新增的: :class:`Combobox` 、 :class:`Notebook` 、 " +":class:`Progressbar` 、 :class:`Separator` 、 :class:`Sizegrip` 和 " +":class:`Treeview`。这些控件全都是 :class:`Widget` 的子类。" + +#: ../../library/tkinter.ttk.rst:77 +msgid "" +"Using the Ttk widgets gives the application an improved look and feel. As " +"discussed above, there are differences in how the styling is coded." +msgstr "ttk 控件可以改善应用程序的外观。如上所述,修改样式的代码与 tk 控件存在差异。" + +#: ../../library/tkinter.ttk.rst:80 +msgid "Tk code::" +msgstr "Tk 代码::" + +#: ../../library/tkinter.ttk.rst:86 +msgid "Ttk code::" +msgstr "Ttk 代码:" + +#: ../../library/tkinter.ttk.rst:94 +msgid "" +"For more information about TtkStyling_, see the :class:`Style` class " +"documentation." +msgstr "有关 TtkStyling_ 的更多信息,请参阅 :class:`Style` 类文档。" + +#: ../../library/tkinter.ttk.rst:98 +msgid "Widget" +msgstr "控件" + +#: ../../library/tkinter.ttk.rst:100 +msgid "" +":class:`ttk.Widget` defines standard options and methods supported by Tk " +"themed widgets and is not supposed to be directly instantiated." +msgstr ":class:`ttk.Widget` 定义了 Tk 风格控件支持的标准属性和方法,不应直接对其进行实例化。" + +#: ../../library/tkinter.ttk.rst:105 +msgid "Standard Options" +msgstr "标准属性" + +#: ../../library/tkinter.ttk.rst:107 +msgid "All the :mod:`ttk` Widgets accepts the following options:" +msgstr "所有 :mod:`ttk` 控件均可设置以下属性:" + +#: ../../library/tkinter.ttk.rst:112 ../../library/tkinter.ttk.rst:147 +#: ../../library/tkinter.ttk.rst:173 ../../library/tkinter.ttk.rst:216 +#: ../../library/tkinter.ttk.rst:319 ../../library/tkinter.ttk.rst:405 +#: ../../library/tkinter.ttk.rst:481 ../../library/tkinter.ttk.rst:507 +#: ../../library/tkinter.ttk.rst:671 ../../library/tkinter.ttk.rst:742 +#: ../../library/tkinter.ttk.rst:810 ../../library/tkinter.ttk.rst:861 +#: ../../library/tkinter.ttk.rst:889 +msgid "Option" +msgstr "属性" + +#: ../../library/tkinter.ttk.rst:112 ../../library/tkinter.ttk.rst:147 +#: ../../library/tkinter.ttk.rst:173 ../../library/tkinter.ttk.rst:216 +#: ../../library/tkinter.ttk.rst:232 ../../library/tkinter.ttk.rst:319 +#: ../../library/tkinter.ttk.rst:405 ../../library/tkinter.ttk.rst:481 +#: ../../library/tkinter.ttk.rst:507 ../../library/tkinter.ttk.rst:671 +#: ../../library/tkinter.ttk.rst:742 ../../library/tkinter.ttk.rst:810 +#: ../../library/tkinter.ttk.rst:861 ../../library/tkinter.ttk.rst:889 +#: ../../library/tkinter.ttk.rst:934 +msgid "Description" +msgstr "描述" + +#: ../../library/tkinter.ttk.rst:114 +msgid "class" +msgstr "class" + +#: ../../library/tkinter.ttk.rst:114 +msgid "" +"Specifies the window class. The class is used when querying the option " +"database for the window's other options, to determine the default bindtags " +"for the window, and to select the widget's default layout and style. This " +"option is read-only, and may only be specified when the window is created." +msgstr "" +"指定窗口类。若要从参数库中查找窗口的其他属性,或确认窗口的默认绑定标签,或选择控件的默认布局和样式,会用到 class " +"属性。该属性只读,且只能在创建窗口时指定。" + +#: ../../library/tkinter.ttk.rst:121 +msgid "cursor" +msgstr "cursor" + +#: ../../library/tkinter.ttk.rst:121 +msgid "" +"Specifies the mouse cursor to be used for the widget. If set to the empty " +"string (the default), the cursor is inherited for the parent widget." +msgstr "指定控件使用的鼠标光标。若设为空字符串(默认值),则会继承父控件的光标。" + +#: ../../library/tkinter.ttk.rst:125 +msgid "takefocus" +msgstr "takefocus" + +#: ../../library/tkinter.ttk.rst:125 +msgid "" +"Determines whether the window accepts the focus during keyboard traversal. " +"0, 1 or an empty string is returned. If 0 is returned, it means that the " +"window should be skipped entirely during keyboard traversal. If 1, it means " +"that the window should receive the input focus as long as it is viewable. " +"And an empty string means that the traversal scripts make the decision about" +" whether or not to focus on the window." +msgstr "" +"决定了窗口是否可用键盘获得焦点。返回 0 、1 或空字符串。若返回 0,则表示在用键盘遍历时应该跳过该窗口。如果为 " +"1,则表示只要窗口可见即应接收输入焦点。而空字符串则表示由遍历代码决定窗口是否接收焦点。" + +#: ../../library/tkinter.ttk.rst:134 +msgid "style" +msgstr "style" + +#: ../../library/tkinter.ttk.rst:134 +msgid "May be used to specify a custom widget style." +msgstr "可用于指定自定义控件样式。" + +#: ../../library/tkinter.ttk.rst:139 +msgid "Scrollable Widget Options" +msgstr "可滚动控件的属性" + +#: ../../library/tkinter.ttk.rst:141 +msgid "" +"The following options are supported by widgets that are controlled by a " +"scrollbar." +msgstr "带滚动条的控件支持以下属性:" + +#: ../../library/tkinter.ttk.rst:149 +msgid "xscrollcommand" +msgstr "xscrollcommand" + +#: ../../library/tkinter.ttk.rst:149 +msgid "Used to communicate with horizontal scrollbars." +msgstr "用于与水平滚动条通讯." + +#: ../../library/tkinter.ttk.rst:151 +msgid "" +"When the view in the widget's window change, the widget will generate a Tcl " +"command based on the scrollcommand." +msgstr "当窗口中的可见内容发生变化时,控件将根据 scrollcommand 生成 Tcl 命令。" + +#: ../../library/tkinter.ttk.rst:154 +msgid "" +"Usually this option consists of the method :meth:`Scrollbar.set` of some " +"scrollbar. This will cause the scrollbar to be updated whenever the view in " +"the window changes." +msgstr "通常该属性由一些滚动条的 :meth:`Scrollbar.set` 方法组成。当窗口中的可见内容发生变化时,将会刷新滚动条的状态。 " + +#: ../../library/tkinter.ttk.rst:159 +msgid "yscrollcommand" +msgstr "yscrollcommand" + +#: ../../library/tkinter.ttk.rst:159 +msgid "" +"Used to communicate with vertical scrollbars. For some more information, see" +" above." +msgstr "用于与垂直滚动条通讯,更多信息请参考上一条。" + +#: ../../library/tkinter.ttk.rst:165 +msgid "Label Options" +msgstr "标签控件的属性" + +#: ../../library/tkinter.ttk.rst:167 +msgid "" +"The following options are supported by labels, buttons and other button-like" +" widgets." +msgstr "标签、按钮和类似按钮的控件支持以下属性。" + +#: ../../library/tkinter.ttk.rst:175 ../../library/tkinter.ttk.rst:523 +#: ../../library/tkinter.ttk.rst:863 +msgid "text" +msgstr "text" + +#: ../../library/tkinter.ttk.rst:175 +msgid "Specifies a text string to be displayed inside the widget." +msgstr "指定显示在控件内的文本。" + +#: ../../library/tkinter.ttk.rst:177 ../../library/tkinter.ttk.rst:341 +msgid "textvariable" +msgstr "textvariable" + +#: ../../library/tkinter.ttk.rst:177 +msgid "" +"Specifies a name whose value will be used in place of the text option " +"resource." +msgstr "指定一个变量名,其值将用于设置 text 属性。" + +#: ../../library/tkinter.ttk.rst:180 ../../library/tkinter.ttk.rst:532 +msgid "underline" +msgstr "underline" + +#: ../../library/tkinter.ttk.rst:180 +msgid "" +"If set, specifies the index (0-based) of a character to underline in the " +"text string. The underline character is used for mnemonic activation." +msgstr "设置文本字符串中带下划线字符的索引(基于0)。下划线字符用于激活快捷键。" + +#: ../../library/tkinter.ttk.rst:184 ../../library/tkinter.ttk.rst:525 +#: ../../library/tkinter.ttk.rst:865 ../../library/tkinter.ttk.rst:897 +msgid "image" +msgstr "image" + +#: ../../library/tkinter.ttk.rst:184 +msgid "" +"Specifies an image to display. This is a list of 1 or more elements. The " +"first element is the default image name. The rest of the list if a sequence " +"of statespec/value pairs as defined by :meth:`Style.map`, specifying " +"different images to use when the widget is in a particular state or a " +"combination of states. All images in the list should have the same size." +msgstr "" +"指定一个用于显示的图片。这是一个由1个或多个元素组成的列表。第一个元素是默认的图片名称。列表的其余部分是由 :meth:`Style.map` " +"定义的“状态/值对”的序列,指定控件在某状态或状态组合时要采用的图片。列表中的所有图片应具备相同的尺寸。" + +#: ../../library/tkinter.ttk.rst:192 ../../library/tkinter.ttk.rst:528 +msgid "compound" +msgstr "compound" + +#: ../../library/tkinter.ttk.rst:192 +msgid "" +"Specifies how to display the image relative to the text, in the case both " +"text and images options are present. Valid values are:" +msgstr "指定同时存在 text 和 image 属性时,应如何显示文本和对应的图片。合法的值包括:" + +#: ../../library/tkinter.ttk.rst:196 +msgid "text: display text only" +msgstr "text::只显示文本" + +#: ../../library/tkinter.ttk.rst:197 +msgid "image: display image only" +msgstr "image:只显示图片" + +#: ../../library/tkinter.ttk.rst:198 +msgid "" +"top, bottom, left, right: display image above, below, left of, or right of " +"the text, respectively." +msgstr "top、bottom、left、right:分别在文本的上、下、左、右显示图片。" + +#: ../../library/tkinter.ttk.rst:200 +msgid "none: the default. display the image if present, otherwise the text." +msgstr "none:默认值。 如果给出了图片则显示,否则显示文本。" + +#: ../../library/tkinter.ttk.rst:203 ../../library/tkinter.ttk.rst:349 +#: ../../library/tkinter.ttk.rst:493 +msgid "width" +msgstr "width" + +#: ../../library/tkinter.ttk.rst:203 +msgid "" +"If greater than zero, specifies how much space, in character widths, to " +"allocate for the text label, if less than zero, specifies a minimum width. " +"If zero or unspecified, the natural width of the text label is used." +msgstr "如果值大于零,指定文本标签留下多少空间,单位是字符数;如果值小于零,则指定最小宽度。如果等于零或未指定,则使用文本标签本身的宽度。" + +#: ../../library/tkinter.ttk.rst:211 +msgid "Compatibility Options" +msgstr "兼容性属性" + +#: ../../library/tkinter.ttk.rst:218 ../../library/tkinter.ttk.rst:334 +#: ../../library/tkinter.ttk.rst:509 +msgid "state" +msgstr "state" + +#: ../../library/tkinter.ttk.rst:218 +msgid "" +"May be set to \"normal\" or \"disabled\" to control the \"disabled\" state " +"bit. This is a write-only option: setting it changes the widget state, but " +"the :meth:`Widget.state` method does not affect this option." +msgstr "" +"可以设为“normal”或“disabled”,以便控制“禁用”状态标志位。本属性只允许写入:用以改变控件的状态,但 " +":meth:`Widget.state` 方法不影响本属性。" + +#: ../../library/tkinter.ttk.rst:225 +msgid "Widget States" +msgstr "控件状态" + +#: ../../library/tkinter.ttk.rst:227 +msgid "The widget state is a bitmap of independent state flags." +msgstr "控件状态是多个相互独立的状态标志位的组合。" + +#: ../../library/tkinter.ttk.rst:232 +msgid "Flag" +msgstr "标志位" + +#: ../../library/tkinter.ttk.rst:234 +msgid "active" +msgstr "active" + +#: ../../library/tkinter.ttk.rst:234 +msgid "" +"The mouse cursor is over the widget and pressing a mouse button will cause " +"some action to occur" +msgstr "鼠标光标经过控件并按下鼠标按钮,将引发动作。" + +#: ../../library/tkinter.ttk.rst:237 +msgid "disabled" +msgstr "disabled" + +#: ../../library/tkinter.ttk.rst:237 +msgid "Widget is disabled under program control" +msgstr "控件处于禁用状态,而由程序控制。" + +#: ../../library/tkinter.ttk.rst:239 +msgid "focus" +msgstr "focus" + +#: ../../library/tkinter.ttk.rst:239 +msgid "Widget has keyboard focus" +msgstr "控件接受键盘焦点。" + +#: ../../library/tkinter.ttk.rst:241 +msgid "pressed" +msgstr "pressed" + +#: ../../library/tkinter.ttk.rst:241 +msgid "Widget is being pressed" +msgstr "控件已被按下。" + +#: ../../library/tkinter.ttk.rst:243 +msgid "selected" +msgstr "selected" + +#: ../../library/tkinter.ttk.rst:243 +msgid "\"On\", \"true\", or \"current\" for things like Checkbuttons and radiobuttons" +msgstr "勾选或单选框之类的控件,表示启用、选中状态。" + +#: ../../library/tkinter.ttk.rst:246 ../../library/tkinter.ttk.rst:893 +msgid "background" +msgstr "background" + +#: ../../library/tkinter.ttk.rst:246 +msgid "" +"Windows and Mac have a notion of an \"active\" or foreground window. The " +"*background* state is set for widgets in a background window, and cleared " +"for those in the foreground window" +msgstr "" +"Windows 和 Mac 系统的窗口具有“激活”或后台的概念。后台窗口的控件会设置 *foreground* 参数,而前台窗口的控件则会清除此状态。" + +#: ../../library/tkinter.ttk.rst:251 +msgid "readonly" +msgstr "readonly" + +#: ../../library/tkinter.ttk.rst:251 +msgid "Widget should not allow user modification" +msgstr "控件不允许用户修改。" + +#: ../../library/tkinter.ttk.rst:253 +msgid "alternate" +msgstr "alternate" + +#: ../../library/tkinter.ttk.rst:253 +msgid "A widget-specific alternate display format" +msgstr "控件的备选显式格式。" + +#: ../../library/tkinter.ttk.rst:255 +msgid "invalid" +msgstr "invalid" + +#: ../../library/tkinter.ttk.rst:255 +msgid "The widget's value is invalid" +msgstr "控件的值是无效的" + +#: ../../library/tkinter.ttk.rst:258 +msgid "" +"A state specification is a sequence of state names, optionally prefixed with" +" an exclamation point indicating that the bit is off." +msgstr "所谓的控件状态,就是一串状态名称的组合,可在某个名称前加上感叹号,表示该状态位是关闭的。" + +#: ../../library/tkinter.ttk.rst:263 +msgid "ttk.Widget" +msgstr "ttk.Widget" + +#: ../../library/tkinter.ttk.rst:265 +msgid "" +"Besides the methods described below, the :class:`ttk.Widget` supports the " +"methods :meth:`tkinter.Widget.cget` and :meth:`tkinter.Widget.configure`." +msgstr "" +"除了以下方法之外,:class:`ttk.Widget` 还支持 :meth:`tkinter.Widget.cget` 和 " +":meth:`tkinter.Widget.configure` 方法。" + +#: ../../library/tkinter.ttk.rst:272 +msgid "" +"Returns the name of the element at position *x* *y*, or the empty string if " +"the point does not lie within any element." +msgstr "返回位于 *x* *y* 的控件名称,如果该坐标点不属于任何控件,则返回空字符串。" + +#: ../../library/tkinter.ttk.rst:275 +msgid "*x* and *y* are pixel coordinates relative to the widget." +msgstr "*x* 和 *y* 是控件内的相对坐标,单位是像素。" + +#: ../../library/tkinter.ttk.rst:280 +msgid "" +"Test the widget's state. If a callback is not specified, returns ``True`` if" +" the widget state matches *statespec* and ``False`` otherwise. If callback " +"is specified then it is called with args if widget state matches " +"*statespec*." +msgstr "" +"检测控件的状态。如果没有设置回调函数,那么当控件状态符合 *statespec* 时返回 ``True``,否则返回 " +"``False``。如果指定了回调函数,那么当控件状态匹配 *statespec* 时将会调用回调函数,且会带上后面的参数。" + +#: ../../library/tkinter.ttk.rst:288 +msgid "" +"Modify or inquire widget state. If *statespec* is specified, sets the widget" +" state according to it and return a new *statespec* indicating which flags " +"were changed. If *statespec* is not specified, returns the currently-enabled" +" state flags." +msgstr "" +"修改或查询控件的状态。如果给出了 *statespec*,则会设置控件的状态,并返回一个新的*statespec*,表明哪些标志做过改动。如果未给出 " +"*statespec*,则返回当前启用的状态标志。" + +#: ../../library/tkinter.ttk.rst:293 +msgid "*statespec* will usually be a list or a tuple." +msgstr "*statespec* 通常是个列表或元组。" + +#: ../../library/tkinter.ttk.rst:297 +msgid "Combobox" +msgstr "Combobox" + +#: ../../library/tkinter.ttk.rst:299 +msgid "" +"The :class:`ttk.Combobox` widget combines a text field with a pop-down list " +"of values. This widget is a subclass of :class:`Entry`." +msgstr ":class:`ttk.Combobox` 控件是文本框和下拉列表的组合体。该控件是 :class:`Entry` 的子类。" + +#: ../../library/tkinter.ttk.rst:302 +msgid "" +"Besides the methods inherited from :class:`Widget`: :meth:`Widget.cget`, " +":meth:`Widget.configure`, :meth:`Widget.identify`, :meth:`Widget.instate` " +"and :meth:`Widget.state`, and the following inherited from :class:`Entry`: " +":meth:`Entry.bbox`, :meth:`Entry.delete`, :meth:`Entry.icursor`, " +":meth:`Entry.index`, :meth:`Entry.insert`, :meth:`Entry.selection`, " +":meth:`Entry.xview`, it has some other methods, described at " +":class:`ttk.Combobox`." +msgstr "" +"除了从 :class:`Widget` 继承的 :meth:`Widget.cget` 、 :meth:`Widget.configure` " +"、:meth:`Widget.identify` 、:meth:`Widget.instate` 和 :meth:`Widget.state` " +"方法,以及从 :class:`Entry` 继承的 :meth:`Entry.bbox` 、 :meth:`Entry.delete` 、 " +":meth:`Entry.icursor` 、:meth:`Entry.index` 、 :meth:`Entry.insert` 、 " +":meth:`Entry.selection` 、 :meth:`Entry.xview` 方法,控件还自带了其他几个方法,在 " +":class:`ttk.Combobox` 中都有介绍。" + +#: ../../library/tkinter.ttk.rst:312 ../../library/tkinter.ttk.rst:398 +#: ../../library/tkinter.ttk.rst:474 ../../library/tkinter.ttk.rst:664 +#: ../../library/tkinter.ttk.rst:735 ../../library/tkinter.ttk.rst:803 +msgid "Options" +msgstr "属性" + +#: ../../library/tkinter.ttk.rst:314 ../../library/tkinter.ttk.rst:400 +#: ../../library/tkinter.ttk.rst:476 ../../library/tkinter.ttk.rst:666 +#: ../../library/tkinter.ttk.rst:805 +msgid "This widget accepts the following specific options:" +msgstr "控件可设置以下属性:" + +#: ../../library/tkinter.ttk.rst:321 +msgid "exportselection" +msgstr "exportselection" + +#: ../../library/tkinter.ttk.rst:321 +msgid "" +"Boolean value. If set, the widget selection is linked to the Window Manager " +"selection (which can be returned by invoking Misc.selection_get, for " +"example)." +msgstr "布尔值,如果设为 True,则控件的选中文字将关联为窗口管理器的选中文字(可由 Misc.selection_get 返回)。" + +#: ../../library/tkinter.ttk.rst:325 +msgid "justify" +msgstr "justify" + +#: ../../library/tkinter.ttk.rst:325 +msgid "" +"Specifies how the text is aligned within the widget. One of \"left\", " +"\"center\", or \"right\"." +msgstr "指定文本在控件中的对齐方式。可为 left、center、right 之一。" + +#: ../../library/tkinter.ttk.rst:328 ../../library/tkinter.ttk.rst:483 +#: ../../library/tkinter.ttk.rst:820 +msgid "height" +msgstr "height" + +#: ../../library/tkinter.ttk.rst:328 +msgid "Specifies the height of the pop-down listbox, in rows." +msgstr "设置下拉列表框的高度。" + +#: ../../library/tkinter.ttk.rst:330 +msgid "postcommand" +msgstr "postcommand" + +#: ../../library/tkinter.ttk.rst:330 +msgid "" +"A script (possibly registered with Misc.register) that is called immediately" +" before displaying the values. It may specify which values to display." +msgstr "在显示之前将被调用的代码(可用 Misc.register 进行注册)。可用于选择要显示的值。" + +#: ../../library/tkinter.ttk.rst:334 +msgid "" +"One of \"normal\", \"readonly\", or \"disabled\". In the \"readonly\" state," +" the value may not be edited directly, and the user can only selection of " +"the values from the dropdown list. In the \"normal\" state, the text field " +"is directly editable. In the \"disabled\" state, no interaction is possible." +msgstr "" +"normal 、readonly 或 disabled。在 readonly 状态下,数据不能直接编辑,用户只能从下拉列表中选取。在 normal " +"状态下,可直接编辑文本框。在 disabled 状态下,无法做任何交互。" + +#: ../../library/tkinter.ttk.rst:341 +msgid "" +"Specifies a name whose value is linked to the widget value. Whenever the " +"value associated with that name changes, the widget value is updated, and " +"vice versa. See :class:`tkinter.StringVar`." +msgstr "" +"设置一个变量名,其值与控件的值关联。每当该变量对应的值发生变动时,控件值就会更新,反之亦然。参见 :class:`tkinter.StringVar` " +"。" + +#: ../../library/tkinter.ttk.rst:346 ../../library/tkinter.ttk.rst:419 +#: ../../library/tkinter.ttk.rst:867 +msgid "values" +msgstr "values" + +#: ../../library/tkinter.ttk.rst:346 +msgid "Specifies the list of values to display in the drop-down listbox." +msgstr "设置显示于下拉列表中的值。" + +#: ../../library/tkinter.ttk.rst:349 +msgid "" +"Specifies an integer value indicating the desired width of the entry window," +" in average-size characters of the widget's font." +msgstr "设置为整数值,表示输入窗口的应有宽度,单位是字符单位(控件字体的平均字符宽度)。" + +#: ../../library/tkinter.ttk.rst:356 ../../library/tkinter.ttk.rst:444 +msgid "Virtual events" +msgstr "虚拟事件" + +#: ../../library/tkinter.ttk.rst:358 +msgid "" +"The combobox widgets generates a **<>** virtual event when" +" the user selects an element from the list of values." +msgstr "当用户从下拉列表中选择某个元素时,控件会生成一条 **<>** 虚拟事件。" + +#: ../../library/tkinter.ttk.rst:363 +msgid "ttk.Combobox" +msgstr "ttk.Combobox" + +#: ../../library/tkinter.ttk.rst:369 +msgid "" +"If *newindex* is specified, sets the combobox value to the element position " +"*newindex*. Otherwise, returns the index of the current value or -1 if the " +"current value is not in the values list." +msgstr "" +"如果给出了 *newindex*,则把控件值设为 *newindex* 位置的元素值。否则,返回当前值的索引,当前值未在列表中则返回 -1。" + +#: ../../library/tkinter.ttk.rst:376 +msgid "Returns the current value of the combobox." +msgstr "返回控件的当前值。" + +#: ../../library/tkinter.ttk.rst:381 +msgid "Sets the value of the combobox to *value*." +msgstr "设置控件的值为 *value* 。" + +#: ../../library/tkinter.ttk.rst:385 +msgid "Spinbox" +msgstr "Spinbox" + +#: ../../library/tkinter.ttk.rst:386 +msgid "" +"The :class:`ttk.Spinbox` widget is a :class:`ttk.Entry` enhanced with " +"increment and decrement arrows. It can be used for numbers or lists of " +"string values. This widget is a subclass of :class:`Entry`." +msgstr "" +":class:`ttk.Spinbox` 控件是 :class:`ttk.Entry` 的扩展,带有递增和递减箭头。可用于数字或字符串列表。这是 " +":class:`Entry` 的子类。" + +#: ../../library/tkinter.ttk.rst:390 +msgid "" +"Besides the methods inherited from :class:`Widget`: :meth:`Widget.cget`, " +":meth:`Widget.configure`, :meth:`Widget.identify`, :meth:`Widget.instate` " +"and :meth:`Widget.state`, and the following inherited from :class:`Entry`: " +":meth:`Entry.bbox`, :meth:`Entry.delete`, :meth:`Entry.icursor`, " +":meth:`Entry.index`, :meth:`Entry.insert`, :meth:`Entry.xview`, it has some " +"other methods, described at :class:`ttk.Spinbox`." +msgstr "" +"除了从 :class:`Widget` 继承的 :meth:`Widget.cget` 、 :meth:`Widget.configure` " +"、:meth:`Widget.identified` 、 :meth:`Widget.instate` 和 :meth:`Widget.state` " +"方法,以及从 :class:`Entry` 继承的 :meth:`Entry. bbox` 、 :meth:`Entry.delete` 、 " +":meth:`Entry.icursor` 、:meth:`Entry.index` 、 :meth:`Entry.insert` 、 " +":meth:`Entry.xview` 方法,控件还自带了其他一些方法,在 :class:`ttk.Spinbox` 中都有介绍。" + +#: ../../library/tkinter.ttk.rst:407 +msgid "from" +msgstr "from" + +#: ../../library/tkinter.ttk.rst:407 +msgid "" +"Float value. If set, this is the minimum value to which the decrement " +"button will decrement. Must be spelled as ``from_`` when used as an " +"argument, since ``from`` is a Python keyword." +msgstr "" +"浮点值。如若给出,则为递减按钮能够到达的最小值。作为参数使用时必须写成 ``from_``,因为 ``from`` 是 Python 关键字。" + +#: ../../library/tkinter.ttk.rst:412 +msgid "to" +msgstr "to" + +#: ../../library/tkinter.ttk.rst:412 +msgid "" +"Float value. If set, this is the maximum value to which the increment " +"button will increment." +msgstr "浮点值。如若给出,则为递增按钮能够到达的最大值。" + +#: ../../library/tkinter.ttk.rst:415 +msgid "increment" +msgstr "increment" + +#: ../../library/tkinter.ttk.rst:415 +msgid "" +"Float value. Specifies the amount which the increment/decrement buttons " +"change the value. Defaults to 1.0." +msgstr "浮点值。指定递增/递减按钮每次的修改量。默认值为 1.0。" + +#: ../../library/tkinter.ttk.rst:419 +msgid "" +"Sequence of string or float values. If specified, the increment/decrement " +"buttons will cycle through the items in this sequence rather than " +"incrementing or decrementing numbers." +msgstr "字符串或浮点值构成的序列。如若给出,则递增/递减会在此序列元素间循环,而不是增减数值。" + +#: ../../library/tkinter.ttk.rst:425 +msgid "wrap" +msgstr "wrap" + +#: ../../library/tkinter.ttk.rst:425 +msgid "" +"Boolean value. If ``True``, increment and decrement buttons will cycle from" +" the ``to`` value to the ``from`` value or the ``from`` value to the ``to`` " +"value, respectively." +msgstr "" +"布尔值。若为 ``True`` ,则递增和递减按钮会由 ``to`` 值循环至 ``from`` 值,或由 ``from`` 值循环至 ``to`` " +"值。" + +#: ../../library/tkinter.ttk.rst:430 +msgid "format" +msgstr "format" + +#: ../../library/tkinter.ttk.rst:430 +msgid "" +"String value. This specifies the format of numbers set by the " +"increment/decrement buttons. It must be in the form \"%W.Pf\", where W is " +"the padded width of the value, P is the precision, and '%' and 'f' are " +"literal." +msgstr "字符串。指定递增/递减按钮的数字格式。必须以“%W.Pf”的格式给出,W 是填充的宽度,P 是小数精度,% 和 f 就是本身的含义。" + +#: ../../library/tkinter.ttk.rst:436 +msgid "command" +msgstr "command" + +#: ../../library/tkinter.ttk.rst:436 +msgid "" +"Python callable. Will be called with no arguments whenever either of the " +"increment or decrement buttons are pressed." +msgstr "Python 回调函数。只要递增或递减按钮按下之后,就会进行不带参数的调用。" + +#: ../../library/tkinter.ttk.rst:446 +msgid "" +"The spinbox widget generates an **<>** virtual event when the " +"user presses , and a **<>** virtual event when the user " +"presses ." +msgstr "" +"用户若按下 ,则控件会生成 **<>** 虚拟事件,若按下 则会生成 **<>** " +"事件。" + +#: ../../library/tkinter.ttk.rst:451 +msgid "ttk.Spinbox" +msgstr "ttk.Spinbox" + +#: ../../library/tkinter.ttk.rst:457 +msgid "Returns the current value of the spinbox." +msgstr "返回控件的当前值。" + +#: ../../library/tkinter.ttk.rst:462 +msgid "Sets the value of the spinbox to *value*." +msgstr "设置控件值为 *value*。" + +#: ../../library/tkinter.ttk.rst:466 +msgid "Notebook" +msgstr "Notebook" + +#: ../../library/tkinter.ttk.rst:468 +msgid "" +"Ttk Notebook widget manages a collection of windows and displays a single " +"one at a time. Each child window is associated with a tab, which the user " +"may select to change the currently-displayed window." +msgstr "" +"Ttk Notebook 控件管理着多个窗口的集合,每次显示其中的一个。每个子窗口都与某个 tab 关联,可供用户选中以改变当前显示的窗口。" + +#: ../../library/tkinter.ttk.rst:483 +msgid "" +"If present and greater than zero, specifies the desired height of the pane " +"area (not including internal padding or tabs). Otherwise, the maximum height" +" of all panes is used." +msgstr "如若给出且大于 0,则指定面板的应有高度(不含内部 padding 或 tab)。否则会采用所有子窗口面板的最大高度。" + +#: ../../library/tkinter.ttk.rst:487 ../../library/tkinter.ttk.rst:519 +#: ../../library/tkinter.ttk.rst:824 +msgid "padding" +msgstr "padding" + +#: ../../library/tkinter.ttk.rst:487 +msgid "" +"Specifies the amount of extra space to add around the outside of the " +"notebook. The padding is a list up to four length specifications left top " +"right bottom. If fewer than four elements are specified, bottom defaults to " +"top, right defaults to left, and top defaults to left." +msgstr "" +"指定在控件外部添加的留白。padding " +"是最多包含四个值的列表,指定左顶右底的空间。如果给出的元素少于四个,底部值默认为顶部值,右侧值默认为左侧值,顶部值默认为左侧值。" + +#: ../../library/tkinter.ttk.rst:493 +msgid "" +"If present and greater than zero, specified the desired width of the pane " +"area (not including internal padding). Otherwise, the maximum width of all " +"panes is used." +msgstr "若给出且大于 0,则设置面板的应有宽度(不含内部 padding)。否则将采用所有子窗口面板的最大宽度。" + +#: ../../library/tkinter.ttk.rst:500 +msgid "Tab Options" +msgstr "Tab 属性" + +#: ../../library/tkinter.ttk.rst:502 +msgid "There are also specific options for tabs:" +msgstr "Tab 特有属性如下:" + +#: ../../library/tkinter.ttk.rst:509 +msgid "" +"Either \"normal\", \"disabled\" or \"hidden\". If \"disabled\", then the tab" +" is not selectable. If \"hidden\", then the tab is not shown." +msgstr "可为 normal、disabled 或 disabled 之一。若为 disabled 则不能选中。若为 hidden 则不会显示。" + +#: ../../library/tkinter.ttk.rst:513 +msgid "sticky" +msgstr "sticky" + +#: ../../library/tkinter.ttk.rst:513 +msgid "" +"Specifies how the child window is positioned within the pane area. Value is " +"a string containing zero or more of the characters \"n\", \"s\", \"e\" or " +"\"w\". Each letter refers to a side (north, south, east or west) that the " +"child window will stick to, as per the :meth:`grid` geometry manager." +msgstr "" +"指定子窗口在面板内的定位方式。应为包含零个或多个 n、s、e 、w 字符的字符串。每个字母表示子窗口应紧靠的方向(北、南、东或西),正如 " +":meth:`grid` 位置管理器所述。" + +#: ../../library/tkinter.ttk.rst:519 +msgid "" +"Specifies the amount of extra space to add between the notebook and this " +"pane. Syntax is the same as for the option padding used by this widget." +msgstr "指定控件和面板之间的留白空间。格式与本控件的 padding 属性相同。" + +#: ../../library/tkinter.ttk.rst:523 +msgid "Specifies a text to be displayed in the tab." +msgstr "指定显示在 tab 上的文本。" + +#: ../../library/tkinter.ttk.rst:525 +msgid "" +"Specifies an image to display in the tab. See the option image described in " +":class:`Widget`." +msgstr "指定显示在 tab 上的图片。参见 :class:`Widget` 的 image 属性。" + +#: ../../library/tkinter.ttk.rst:528 +msgid "" +"Specifies how to display the image relative to the text, in the case both " +"options text and image are present. See `Label Options`_ for legal values." +msgstr "当文本和图片同时存在时,指定图片相对于文本的显示位置。合法的属性值参见 `Label Options`_ 。" + +#: ../../library/tkinter.ttk.rst:532 +msgid "" +"Specifies the index (0-based) of a character to underline in the text " +"string. The underlined character is used for mnemonic activation if " +":meth:`Notebook.enable_traversal` is called." +msgstr "" +"指定下划线在文本字符串中的索引(基于0)。如果调用过了 " +":meth:`Notebook.enable_traversal`,带下划线的字符将用于激活快捷键。" + +#: ../../library/tkinter.ttk.rst:540 +msgid "Tab Identifiers" +msgstr "Tab ID" + +#: ../../library/tkinter.ttk.rst:542 +msgid "" +"The tab_id present in several methods of :class:`ttk.Notebook` may take any " +"of the following forms:" +msgstr " :class:`ttk.Notebook` 中有很多方法需要提供 tab_id,形式可如下:" + +#: ../../library/tkinter.ttk.rst:545 +msgid "An integer between zero and the number of tabs" +msgstr "介于 0 和 tab 总数之间的整数值。" + +#: ../../library/tkinter.ttk.rst:546 +msgid "The name of a child window" +msgstr "子窗口的名称。" + +#: ../../library/tkinter.ttk.rst:547 +msgid "A positional specification of the form \"@x,y\", which identifies the tab" +msgstr "以“@x,y”形式给出的位置,唯一标识了 tab 页。" + +#: ../../library/tkinter.ttk.rst:548 +msgid "" +"The literal string \"current\", which identifies the currently-selected tab" +msgstr "字符串“current”,标识当前选中的 Tab。" + +#: ../../library/tkinter.ttk.rst:549 +msgid "" +"The literal string \"end\", which returns the number of tabs (only valid for" +" :meth:`Notebook.index`)" +msgstr "字符串字面值 \"end\",它返回标签页的数量 (仅适用于 :meth:`Notebook.index`)" + +#: ../../library/tkinter.ttk.rst:554 ../../library/tkinter.ttk.rst:927 +msgid "Virtual Events" +msgstr "虚拟事件" + +#: ../../library/tkinter.ttk.rst:556 +msgid "" +"This widget generates a **<>** virtual event after a new" +" tab is selected." +msgstr "当选中一个新 tab 页之后,控件会生成一条 **<>** 虚拟事件。" + +#: ../../library/tkinter.ttk.rst:561 +msgid "ttk.Notebook" +msgstr "ttk.Notebook" + +#: ../../library/tkinter.ttk.rst:567 +msgid "Adds a new tab to the notebook." +msgstr "添加一个新 tab 页。" + +#: ../../library/tkinter.ttk.rst:569 +msgid "" +"If window is currently managed by the notebook but hidden, it is restored to" +" its previous position." +msgstr "如果窗口是由 Notebook 管理但处于隐藏状态,则会恢复到之前的位置。" + +#: ../../library/tkinter.ttk.rst:572 ../../library/tkinter.ttk.rst:610 +msgid "See `Tab Options`_ for the list of available options." +msgstr "可用属性请参见 `Tab Options`_ 。" + +#: ../../library/tkinter.ttk.rst:577 +msgid "" +"Removes the tab specified by *tab_id*, unmaps and unmanages the associated " +"window." +msgstr "删除 *tab_id* 指定的 tab 页,对其关联的窗口不再作映射和管理。" + +#: ../../library/tkinter.ttk.rst:583 +msgid "Hides the tab specified by *tab_id*." +msgstr "隐藏 *tab_id* 指定的 tab 页。" + +#: ../../library/tkinter.ttk.rst:585 +msgid "" +"The tab will not be displayed, but the associated window remains managed by " +"the notebook and its configuration remembered. Hidden tabs may be restored " +"with the :meth:`add` command." +msgstr "" +"tab 页不会显示出来,但关联的窗口仍接受 Notebook 的管理,其配置属性会继续保留。隐藏的 tab 页可由 :meth:`add` 恢复。" + +#: ../../library/tkinter.ttk.rst:592 +msgid "" +"Returns the name of the tab element at position *x*, *y*, or the empty " +"string if none." +msgstr "返回 tab 页内位置为 *x*、*y* 的控件名称,若不存在则返回空字符串。" + +#: ../../library/tkinter.ttk.rst:598 +msgid "" +"Returns the numeric index of the tab specified by *tab_id*, or the total " +"number of tabs if *tab_id* is the string \"end\"." +msgstr "返回 *tab_id* 指定 tab 页的索引值,如果 *tab_id* 为 end 则返回 tab 页的总数。" + +#: ../../library/tkinter.ttk.rst:604 +msgid "Inserts a pane at the specified position." +msgstr "在指定位置插入一个 tab。" + +#: ../../library/tkinter.ttk.rst:606 +msgid "" +"*pos* is either the string \"end\", an integer index, or the name of a " +"managed child. If *child* is already managed by the notebook, moves it to " +"the specified position." +msgstr "*pos* 可为字符串“end” 、整数索引值或子窗口名称。如果 *child* 已由 Notebook 管理,则将其移至指定位置。" + +#: ../../library/tkinter.ttk.rst:615 +msgid "Selects the specified *tab_id*." +msgstr "选中 *tab_id* 指定 tab。" + +#: ../../library/tkinter.ttk.rst:617 +msgid "" +"The associated child window will be displayed, and the previously-selected " +"window (if different) is unmapped. If *tab_id* is omitted, returns the " +"widget name of the currently selected pane." +msgstr "显示关联的子窗口,之前选中的窗口将取消映射关系。如果省略 *tab_id* ,则返回当前选中面板的控件名称。" + +#: ../../library/tkinter.ttk.rst:624 +msgid "Query or modify the options of the specific *tab_id*." +msgstr "查询或修改 *tab_id* 指定 tab 的属性。" + +#: ../../library/tkinter.ttk.rst:626 +msgid "" +"If *kw* is not given, returns a dictionary of the tab option values. If " +"*option* is specified, returns the value of that *option*. Otherwise, sets " +"the options to the corresponding values." +msgstr "如果未给出 *kw* ,则返回由 tab 属性组成的字典。如果指定了 *option*,则返回其值。否则,设置属性值。" + +#: ../../library/tkinter.ttk.rst:633 +msgid "Returns a list of windows managed by the notebook." +msgstr "返回 Notebook 管理的窗口列表。" + +#: ../../library/tkinter.ttk.rst:638 +msgid "" +"Enable keyboard traversal for a toplevel window containing this notebook." +msgstr "为包含 Notebook 的顶层窗口启用键盘遍历。" + +#: ../../library/tkinter.ttk.rst:640 +msgid "" +"This will extend the bindings for the toplevel window containing the " +"notebook as follows:" +msgstr "这将为包含 Notebook 的顶层窗口增加如下键盘绑定关系:" + +#: ../../library/tkinter.ttk.rst:643 +msgid "" +":kbd:`Control-Tab`: selects the tab following the currently selected one." +msgstr ":kbd:`Control-Tab` :选中当前 tab 之后的页。" + +#: ../../library/tkinter.ttk.rst:644 +msgid "" +":kbd:`Shift-Control-Tab`: selects the tab preceding the currently selected " +"one." +msgstr ":kbd:`Shift-Control-Tab` :选中当前 tab 之前的页。" + +#: ../../library/tkinter.ttk.rst:645 +msgid "" +":kbd:`Alt-K`: where *K* is the mnemonic (underlined) character of any tab, " +"will select that tab." +msgstr ":kbd:`Alt-K` :这里 *K* 是任意 tab 页的快捷键(带下划线)字符,将会直接选中该 tab。" + +#: ../../library/tkinter.ttk.rst:648 +msgid "" +"Multiple notebooks in a single toplevel may be enabled for traversal, " +"including nested notebooks. However, notebook traversal only works properly " +"if all panes have the notebook they are in as master." +msgstr "" +"一个顶层窗口中可为多个 Notebook 启用键盘遍历,包括嵌套的 Notebook 。但仅当所有面板都将所在 Notebook " +"作为父控件时,键盘遍历才会生效。" + +#: ../../library/tkinter.ttk.rst:654 +msgid "Progressbar" +msgstr "Progressbar" + +#: ../../library/tkinter.ttk.rst:656 +msgid "" +"The :class:`ttk.Progressbar` widget shows the status of a long-running " +"operation. It can operate in two modes: 1) the determinate mode which shows" +" the amount completed relative to the total amount of work to be done and 2)" +" the indeterminate mode which provides an animated display to let the user " +"know that work is progressing." +msgstr "" +":class:`ttk.Progressbar` 控件可为长时间操作显示状态。可工作于两种模式:1)determinate 模式,显示相对完成进度;2)" +" indeterminate 模式,显示动画让用户知道工作正在进行中。" + +#: ../../library/tkinter.ttk.rst:673 ../../library/tkinter.ttk.rst:744 +msgid "orient" +msgstr "orient" + +#: ../../library/tkinter.ttk.rst:673 +msgid "" +"One of \"horizontal\" or \"vertical\". Specifies the orientation of the " +"progress bar." +msgstr "horizontal 或 vertical。指定进度条的显示方向。" + +#: ../../library/tkinter.ttk.rst:676 +msgid "length" +msgstr "length" + +#: ../../library/tkinter.ttk.rst:676 +msgid "" +"Specifies the length of the long axis of the progress bar (width if " +"horizontal, height if vertical)." +msgstr "指定进度条长轴的长度(横向为宽度,纵向则为高度)。" + +#: ../../library/tkinter.ttk.rst:679 +msgid "mode" +msgstr "mode" + +#: ../../library/tkinter.ttk.rst:679 +msgid "One of \"determinate\" or \"indeterminate\"." +msgstr "determinate 或 indeterminate。" + +#: ../../library/tkinter.ttk.rst:681 +msgid "maximum" +msgstr "maximum" + +#: ../../library/tkinter.ttk.rst:681 +msgid "A number specifying the maximum value. Defaults to 100." +msgstr "设定最大值。默认为 100。" + +#: ../../library/tkinter.ttk.rst:683 +msgid "value" +msgstr "value" + +#: ../../library/tkinter.ttk.rst:683 +msgid "" +"The current value of the progress bar. In \"determinate\" mode, this " +"represents the amount of work completed. In \"indeterminate\" mode, it is " +"interpreted as modulo *maximum*; that is, the progress bar completes one " +"\"cycle\" when its value increases by *maximum*." +msgstr "" +"进度条的当前值。在 determinate 模式下代表已完成的工作量。在 indeterminate 模式下,解释为 *maximum* " +"的模;也就是说,当本值增至 *maximum* 时,进度条完成了一个“周期”。" + +#: ../../library/tkinter.ttk.rst:689 +msgid "variable" +msgstr "variable" + +#: ../../library/tkinter.ttk.rst:689 +msgid "" +"A name which is linked to the option value. If specified, the value of the " +"progress bar is automatically set to the value of this name whenever the " +"latter is modified." +msgstr "与属性值关联的变量名。若给出,则当变量值变化时会自动设为进度条的值。" + +#: ../../library/tkinter.ttk.rst:693 +msgid "phase" +msgstr "phase" + +#: ../../library/tkinter.ttk.rst:693 +msgid "" +"Read-only option. The widget periodically increments the value of this " +"option whenever its value is greater than 0 and, in determinate mode, less " +"than maximum. This option may be used by the current theme to provide " +"additional animation effects." +msgstr "" +"只读属性。只要值大于 0 且在 determinate 模式下小于最大值,控件就会定期增大该属性值。当前主题可利用本属性提供额外的动画效果。" + +#: ../../library/tkinter.ttk.rst:701 +msgid "ttk.Progressbar" +msgstr "ttk.Progressbar" + +#: ../../library/tkinter.ttk.rst:707 +msgid "" +"Begin autoincrement mode: schedules a recurring timer event that calls " +":meth:`Progressbar.step` every *interval* milliseconds. If omitted, " +"*interval* defaults to 50 milliseconds." +msgstr "" +"开启自增模式:安排一个循环的定时器事件,每隔 *interval* 毫秒调用一次 :meth:`Progressbar.step`。*interval*" +" 可省略,默认为 50毫秒。" + +#: ../../library/tkinter.ttk.rst:714 +msgid "Increments the progress bar's value by *amount*." +msgstr "将进度条的值增加 *amount*。" + +#: ../../library/tkinter.ttk.rst:716 +msgid "*amount* defaults to 1.0 if omitted." +msgstr "*amount* 可省略,默认为 1.0。" + +#: ../../library/tkinter.ttk.rst:721 +msgid "" +"Stop autoincrement mode: cancels any recurring timer event initiated by " +":meth:`Progressbar.start` for this progress bar." +msgstr "停止自增模式:取消所有由 :meth:`Progressbar.start` 启动的循环定时器事件。" + +#: ../../library/tkinter.ttk.rst:726 +msgid "Separator" +msgstr "Separator" + +#: ../../library/tkinter.ttk.rst:728 +msgid "" +"The :class:`ttk.Separator` widget displays a horizontal or vertical " +"separator bar." +msgstr ":class:`ttk.Separator` 控件用于显示横向或纵向的分隔条。" + +#: ../../library/tkinter.ttk.rst:731 +msgid "" +"It has no other methods besides the ones inherited from :class:`ttk.Widget`." +msgstr "除由 :class:`ttk.Widget` 继承而来的方法外,没有定义其他方法。" + +#: ../../library/tkinter.ttk.rst:737 +msgid "This widget accepts the following specific option:" +msgstr "属性如下:" + +#: ../../library/tkinter.ttk.rst:744 +msgid "" +"One of \"horizontal\" or \"vertical\". Specifies the orientation of the " +"separator." +msgstr "horizontal 或 vertical。指定分隔条的方向。" + +#: ../../library/tkinter.ttk.rst:750 +msgid "Sizegrip" +msgstr "Sizegrip" + +#: ../../library/tkinter.ttk.rst:752 +msgid "" +"The :class:`ttk.Sizegrip` widget (also known as a grow box) allows the user " +"to resize the containing toplevel window by pressing and dragging the grip." +msgstr ":class:`ttk.Sizegrip` 控件允许用户通过按下并拖动控制柄来调整内部顶层窗口的大小。" + +#: ../../library/tkinter.ttk.rst:755 +msgid "" +"This widget has neither specific options nor specific methods, besides the " +"ones inherited from :class:`ttk.Widget`." +msgstr "除由 :class:`ttk.Widget` 继承的之外,没有其他属性和方法。" + +#: ../../library/tkinter.ttk.rst:760 +msgid "Platform-specific notes" +msgstr "与平台相关的注意事项" + +#: ../../library/tkinter.ttk.rst:762 +msgid "" +"On macOS, toplevel windows automatically include a built-in size grip by " +"default. Adding a :class:`Sizegrip` is harmless, since the built-in grip " +"will just mask the widget." +msgstr "" +"在 macOS 上,顶层窗口默认自动包括了一个内置的大小控制柄。 再加一个 :class:`Sizegrip` " +"也没什么坏处,因为内置的控制柄会盖住该控件。" + +#: ../../library/tkinter.ttk.rst:768 +msgid "Bugs" +msgstr "Bug" + +#: ../../library/tkinter.ttk.rst:770 +msgid "" +"If the containing toplevel's position was specified relative to the right or" +" bottom of the screen (e.g. ....), the :class:`Sizegrip` widget will not " +"resize the window." +msgstr "假如内部的顶层窗口位置是相对于屏幕的右侧或底部进行设置的,那么 :class:`Sizegrip` 控件将不会改变窗口的大小。" + +#: ../../library/tkinter.ttk.rst:773 +msgid "This widget supports only \"southeast\" resizing." +msgstr "Sizegrip 仅支持往“东南”方向的缩放。" + +#: ../../library/tkinter.ttk.rst:777 +msgid "Treeview" +msgstr "Treeview" + +#: ../../library/tkinter.ttk.rst:779 +msgid "" +"The :class:`ttk.Treeview` widget displays a hierarchical collection of " +"items. Each item has a textual label, an optional image, and an optional " +"list of data values. The data values are displayed in successive columns " +"after the tree label." +msgstr "" +":class:`ttk.Treeview` 控件可将多项内容分层级显示。每个数据项都带有一个文本标签、一个可选的图片和一个可选的数据值列表。 " +"这些数据值将在树标签后面分列显示。" + +#: ../../library/tkinter.ttk.rst:784 +msgid "" +"The order in which data values are displayed may be controlled by setting " +"the widget option ``displaycolumns``. The tree widget can also display " +"column headings. Columns may be accessed by number or symbolic names listed " +"in the widget option columns. See `Column Identifiers`_." +msgstr "" +"数据值的显示顺序可用属性 ``displaycolumns`` 进行控制。树控件还可以显示列标题。数据列可通过数字或名称进行访问,各列的名称在属性 " +"columns 中列出。参阅 `Column Identifiers`_。" + +#: ../../library/tkinter.ttk.rst:789 +msgid "" +"Each item is identified by a unique name. The widget will generate item IDs " +"if they are not supplied by the caller. There is a distinguished root item, " +"named ``{}``. The root item itself is not displayed; its children appear at " +"the top level of the hierarchy." +msgstr "" +"每个数据项都由唯一名称进行标识。如果调用者未提供数据项的 ID,树控件会自动生成。根有且只有一个,名为 " +"``{}``。根本身不会显示出来;其子项将显示在顶层。" + +#: ../../library/tkinter.ttk.rst:794 +msgid "" +"Each item also has a list of tags, which can be used to associate event " +"bindings with individual items and control the appearance of the item." +msgstr "每个数据项均带有一个 tag 列表,可用于绑定事件及控制外观。" + +#: ../../library/tkinter.ttk.rst:797 +msgid "" +"The Treeview widget supports horizontal and vertical scrolling, according to" +" the options described in `Scrollable Widget Options`_ and the methods " +":meth:`Treeview.xview` and :meth:`Treeview.yview`." +msgstr "" +"Treeview 组件支持水平和垂直滚动,滚动时会依据 `Scrollable Widget Options`_ 描述的属性和 " +":meth:`Treeview.xview` 和 :meth:`Treeview.yview` 方法。" + +#: ../../library/tkinter.ttk.rst:812 +msgid "columns" +msgstr "columns" + +#: ../../library/tkinter.ttk.rst:812 +msgid "" +"A list of column identifiers, specifying the number of columns and their " +"names." +msgstr "列标识的列表,定义了列的数量和名称。" + +#: ../../library/tkinter.ttk.rst:815 +msgid "displaycolumns" +msgstr "displaycolumns" + +#: ../../library/tkinter.ttk.rst:815 +msgid "" +"A list of column identifiers (either symbolic or integer indices) specifying" +" which data columns are displayed and the order in which they appear, or the" +" string \"#all\"." +msgstr "列标识的列表(索引可为符号或整数),指定要显示的数据列及显示顺序,或为字符串 “#all”。" + +#: ../../library/tkinter.ttk.rst:820 +msgid "" +"Specifies the number of rows which should be visible. Note: the requested " +"width is determined from the sum of the column widths." +msgstr "指定可见的行数。注意:所需宽度由各列宽度之和决定。" + +#: ../../library/tkinter.ttk.rst:824 +msgid "" +"Specifies the internal padding for the widget. The padding is a list of up " +"to four length specifications." +msgstr "指定控件内部的留白。为不超过四个元素的长度列表。" + +#: ../../library/tkinter.ttk.rst:827 +msgid "selectmode" +msgstr "selectmode" + +#: ../../library/tkinter.ttk.rst:827 +msgid "" +"Controls how the built-in class bindings manage the selection. One of " +"\"extended\", \"browse\" or \"none\". If set to \"extended\" (the default), " +"multiple items may be selected. If \"browse\", only a single item will be " +"selected at a time. If \"none\", the selection will not be changed." +msgstr "" +"控制内部类如何进行选中项的管理。可为 extended、browse 或 none。若设为 extended(默认),则可选中多个项。若为 browse" +" ,则每次只能选中一项。若为 none,则无法修改选中项。" + +#: ../../library/tkinter.ttk.rst:834 +msgid "" +"Note that the application code and tag bindings can set the selection " +"however they wish, regardless of the value of this option." +msgstr "请注意,代码和 tag 绑定可自由进行选中操作,不受本属性的限制。" + +#: ../../library/tkinter.ttk.rst:838 +msgid "show" +msgstr "show" + +#: ../../library/tkinter.ttk.rst:838 +msgid "" +"A list containing zero or more of the following values, specifying which " +"elements of the tree to display." +msgstr "由0个或下列值组成的列表,指定要显示树的哪些元素。" + +#: ../../library/tkinter.ttk.rst:841 +msgid "tree: display tree labels in column #0." +msgstr "tree :在 #0 列显示树的文本标签。" + +#: ../../library/tkinter.ttk.rst:842 +msgid "headings: display the heading row." +msgstr "headings :显示标题行。" + +#: ../../library/tkinter.ttk.rst:844 +msgid "The default is \"tree headings\", i.e., show all elements." +msgstr "默认为“tree headings”,显示所有元素。" + +#: ../../library/tkinter.ttk.rst:847 +msgid "" +"**Note**: Column #0 always refers to the tree column, even if show=\"tree\" " +"is not specified." +msgstr "** 注意** :第 #0 列一定是指 tree 列,即便未设置 show=\"tree\" 也一样。" + +#: ../../library/tkinter.ttk.rst:853 +msgid "Item Options" +msgstr "数据项的属性" + +#: ../../library/tkinter.ttk.rst:855 +msgid "" +"The following item options may be specified for items in the insert and item" +" widget commands." +msgstr "可在插入和数据项操作时设置以下属性。" + +#: ../../library/tkinter.ttk.rst:863 +msgid "The textual label to display for the item." +msgstr "用于显示的文本标签。" + +#: ../../library/tkinter.ttk.rst:865 +msgid "A Tk Image, displayed to the left of the label." +msgstr "Tk 图片对象,显示在文本标签左侧。" + +#: ../../library/tkinter.ttk.rst:867 +msgid "The list of values associated with the item." +msgstr "关联的数据值列表。" + +#: ../../library/tkinter.ttk.rst:869 +msgid "" +"Each item should have the same number of values as the widget option " +"columns. If there are fewer values than columns, the remaining values are " +"assumed empty. If there are more values than columns, the extra values are " +"ignored." +msgstr "" +"每个数据项关联的数据数量应与 columns 属性相同。如果比 columns 属性的少,剩下的值将视为空。如果多于 columns " +"属性的,多余数据将被忽略。" + +#: ../../library/tkinter.ttk.rst:874 +msgid "open" +msgstr "open" + +#: ../../library/tkinter.ttk.rst:874 +msgid "" +"``True``/``False`` value indicating whether the item's children should be " +"displayed or hidden." +msgstr "``True`` 或 ``False``,表明是否显示数据项的子树。" + +#: ../../library/tkinter.ttk.rst:877 +msgid "tags" +msgstr "tags" + +#: ../../library/tkinter.ttk.rst:877 +msgid "A list of tags associated with this item." +msgstr "与该数据项关联的 tag 列表。" + +#: ../../library/tkinter.ttk.rst:882 +msgid "Tag Options" +msgstr "tag 属性" + +#: ../../library/tkinter.ttk.rst:884 +msgid "The following options may be specified on tags:" +msgstr "tag 可定义以下属性:" + +#: ../../library/tkinter.ttk.rst:891 +msgid "foreground" +msgstr "foreground" + +#: ../../library/tkinter.ttk.rst:891 +msgid "Specifies the text foreground color." +msgstr "定义文本前景色。" + +#: ../../library/tkinter.ttk.rst:893 +msgid "Specifies the cell or item background color." +msgstr "定义单元格或数据项的背景色。" + +#: ../../library/tkinter.ttk.rst:895 +msgid "font" +msgstr "font" + +#: ../../library/tkinter.ttk.rst:895 +msgid "Specifies the font to use when drawing text." +msgstr "定义文本的字体。" + +#: ../../library/tkinter.ttk.rst:897 +msgid "Specifies the item image, in case the item's image option is empty." +msgstr "定义数据项的图片,当 image 属性为空时使用。" + +#: ../../library/tkinter.ttk.rst:903 +msgid "Column Identifiers" +msgstr "列标识" + +#: ../../library/tkinter.ttk.rst:905 +msgid "Column identifiers take any of the following forms:" +msgstr "列标识可用以下格式给出:" + +#: ../../library/tkinter.ttk.rst:907 +msgid "A symbolic name from the list of columns option." +msgstr "由 columns 属性给出的符号名。" + +#: ../../library/tkinter.ttk.rst:908 +msgid "An integer n, specifying the nth data column." +msgstr "整数值 n,指定第 n 列。" + +#: ../../library/tkinter.ttk.rst:909 +msgid "" +"A string of the form #n, where n is an integer, specifying the nth display " +"column." +msgstr "#n 的字符串格式,n 是整数,指定第 n 个显示列。" + +#: ../../library/tkinter.ttk.rst:912 +msgid "Notes:" +msgstr "注释:" + +#: ../../library/tkinter.ttk.rst:914 +msgid "" +"Item's option values may be displayed in a different order than the order in" +" which they are stored." +msgstr "数据项属性的显示顺序可能与存储顺序不一样。" + +#: ../../library/tkinter.ttk.rst:916 +msgid "" +"Column #0 always refers to the tree column, even if show=\"tree\" is not " +"specified." +msgstr "#0 列一定是指 tree 列,即便未指定 show=\"tree\" 也是一样。" + +#: ../../library/tkinter.ttk.rst:919 +msgid "" +"A data column number is an index into an item's option values list; a " +"display column number is the column number in the tree where the values are " +"displayed. Tree labels are displayed in column #0. If option displaycolumns " +"is not set, then data column n is displayed in column #n+1. Again, **column " +"#0 always refers to the tree column**." +msgstr "" +"数据列号是指属性值列表中的索引值,显示列号是指显示在树控件中的列号。树的文本标签将显示在 #0 列。如果未设置 displaycolumns " +"属性,则数据列 n 将显示在第 #n+1 列。再次强调一下,**#0 列一定是指 tree 列** 。" + +#: ../../library/tkinter.ttk.rst:929 +msgid "The Treeview widget generates the following virtual events." +msgstr "Treeview 控件会生成以下虚拟事件。" + +#: ../../library/tkinter.ttk.rst:934 +msgid "Event" +msgstr "事件" + +#: ../../library/tkinter.ttk.rst:936 +msgid "<>" +msgstr "<>" + +#: ../../library/tkinter.ttk.rst:936 +msgid "Generated whenever the selection changes." +msgstr "当选中项发生变化时生成。" + +#: ../../library/tkinter.ttk.rst:938 +msgid "<>" +msgstr "<>" + +#: ../../library/tkinter.ttk.rst:938 +msgid "Generated just before settings the focus item to open=True." +msgstr "当焦点所在项的 open= True 之前立即生成。" + +#: ../../library/tkinter.ttk.rst:941 +msgid "<>" +msgstr "<>" + +#: ../../library/tkinter.ttk.rst:941 +msgid "Generated just after setting the focus item to open=False." +msgstr "当焦点所在项的 open= True 之后立即生成。" + +#: ../../library/tkinter.ttk.rst:945 +msgid "" +"The :meth:`Treeview.focus` and :meth:`Treeview.selection` methods can be " +"used to determine the affected item or items." +msgstr ":meth:`Treeview.focus` 和 :meth:`Treeview.selection` 方法可用于确认涉及的数据项。" + +#: ../../library/tkinter.ttk.rst:950 +msgid "ttk.Treeview" +msgstr "ttk.Treeview" + +#: ../../library/tkinter.ttk.rst:956 +msgid "" +"Returns the bounding box (relative to the treeview widget's window) of the " +"specified *item* in the form (x, y, width, height)." +msgstr "返回某 *数据项* 的边界(相对于控件窗口的坐标),形式为 (x, y, width, height) 。" + +#: ../../library/tkinter.ttk.rst:959 +msgid "" +"If *column* is specified, returns the bounding box of that cell. If the " +"*item* is not visible (i.e., if it is a descendant of a closed item or is " +"scrolled offscreen), returns an empty string." +msgstr "若给出了 *column*,则返回该单元格的边界。若该 *数据项* 不可见(即从属于已关闭项或滚动至屏幕外),则返回空字符串。" + +#: ../../library/tkinter.ttk.rst:966 +msgid "Returns the list of children belonging to *item*." +msgstr "返回 *item* 的下属数据项列表。" + +#: ../../library/tkinter.ttk.rst:968 +msgid "If *item* is not specified, returns root children." +msgstr "若未给出 *item* ,则返回根的下属数据。" + +#: ../../library/tkinter.ttk.rst:973 +msgid "Replaces *item*'s child with *newchildren*." +msgstr "用 *newchildren* 替换 *item* 的下属数据。" + +#: ../../library/tkinter.ttk.rst:975 +msgid "" +"Children present in *item* that are not present in *newchildren* are " +"detached from the tree. No items in *newchildren* may be an ancestor of " +"*item*. Note that not specifying *newchildren* results in detaching *item*'s" +" children." +msgstr "" +"对于 *item* 中存在而 *newchildren* 中不存在的数据项,会从树中移除。*newchildren* 中的数据不能是 *item* " +"的上级。注意,未给出 *newchildren* 会导致 *item* 的子项被解除关联。" + +#: ../../library/tkinter.ttk.rst:983 +msgid "Query or modify the options for the specified *column*." +msgstr "查询或修改列 *column* 的属性。" + +#: ../../library/tkinter.ttk.rst:985 +msgid "" +"If *kw* is not given, returns a dict of the column option values. If " +"*option* is specified then the value for that *option* is returned. " +"Otherwise, sets the options to the corresponding values." +msgstr "如果未给出 *kw*,则返回属性值的字典。若指定了 *option*,则会返回该属性值。否则将设置属性值。" + +#: ../../library/tkinter.ttk.rst:989 ../../library/tkinter.ttk.rst:1044 +msgid "The valid options/values are:" +msgstr "合法的 属性/值 可为:" + +#: ../../library/tkinter.ttk.rst:991 +msgid "id" +msgstr "id" + +#: ../../library/tkinter.ttk.rst:992 +msgid "Returns the column name. This is a read-only option." +msgstr "返回列名。这是只读属性。" + +#: ../../library/tkinter.ttk.rst:994 +msgid "anchor: One of the standard Tk anchor values." +msgstr "anchor:标准的 Tk 锚点值。" + +#: ../../library/tkinter.ttk.rst:994 +msgid "" +"Specifies how the text in this column should be aligned with respect to the " +"cell." +msgstr "指定该列的文本在单元格内的对齐方式。" + +#: ../../library/tkinter.ttk.rst:998 +msgid "minwidth: width" +msgstr "minwidth:宽度。" + +#: ../../library/tkinter.ttk.rst:997 +msgid "" +"The minimum width of the column in pixels. The treeview widget will not make" +" the column any smaller than specified by this option when the widget is " +"resized or the user drags a column." +msgstr "列的最小宽度,单位是像素。在缩放控件或用户拖动某一列时,Treeview 会保证列宽不小于此值。" + +#: ../../library/tkinter.ttk.rst:1001 +msgid "stretch: ``True``/``False``" +msgstr "stretch: ``True``/``False``" + +#: ../../library/tkinter.ttk.rst:1001 +msgid "" +"Specifies whether the column's width should be adjusted when the widget is " +"resized." +msgstr "指明缩放控件时是否调整列宽。" + +#: ../../library/tkinter.ttk.rst:1004 +msgid "width: width" +msgstr "width:宽度" + +#: ../../library/tkinter.ttk.rst:1004 +msgid "The width of the column in pixels." +msgstr "列宽,单位为像素数。" + +#: ../../library/tkinter.ttk.rst:1006 +msgid "To configure the tree column, call this with column = \"#0\"" +msgstr "若要设置 tree 列,请带上参数 column = \"#0\" 进行调用。" + +#: ../../library/tkinter.ttk.rst:1010 +msgid "Delete all specified *items* and all their descendants." +msgstr "删除所有 *items* 及其下属。" + +#: ../../library/tkinter.ttk.rst:1012 +msgid "The root item may not be deleted." +msgstr "根不能删除。" + +#: ../../library/tkinter.ttk.rst:1017 +msgid "Unlinks all of the specified *items* from the tree." +msgstr "将所有 *items* 与树解除关联。" + +#: ../../library/tkinter.ttk.rst:1019 +msgid "" +"The items and all of their descendants are still present, and may be " +"reinserted at another point in the tree, but will not be displayed." +msgstr "数据项及其下属依然存在,后续可以重新插入,目前只是不显示出来。" + +#: ../../library/tkinter.ttk.rst:1022 +msgid "The root item may not be detached." +msgstr "根不能解除关联。" + +#: ../../library/tkinter.ttk.rst:1027 +msgid "Returns ``True`` if the specified *item* is present in the tree." +msgstr "如果给出的 *item* 位于树中,则返回 ``True``。" + +#: ../../library/tkinter.ttk.rst:1032 +msgid "" +"If *item* is specified, sets the focus item to *item*. Otherwise, returns " +"the current focus item, or '' if there is none." +msgstr "如果给出 *item* 则设为当前焦点。否则返回当前焦点所在数据项,若无则返回 ''。" + +#: ../../library/tkinter.ttk.rst:1038 +msgid "Query or modify the heading options for the specified *column*." +msgstr "查询或修改某 *column* 的标题。" + +#: ../../library/tkinter.ttk.rst:1040 +msgid "" +"If *kw* is not given, returns a dict of the heading option values. If " +"*option* is specified then the value for that *option* is returned. " +"Otherwise, sets the options to the corresponding values." +msgstr "若未给出 *kw*,则返回列标题组成的列表。若给出了 *option* 则返回对应属性值。否则,设置属性值。" + +#: ../../library/tkinter.ttk.rst:1046 +msgid "text: text" +msgstr "text:文本。" + +#: ../../library/tkinter.ttk.rst:1047 +msgid "The text to display in the column heading." +msgstr "显示为列标题的文本。" + +#: ../../library/tkinter.ttk.rst:1048 +msgid "image: imageName" +msgstr "image:图片名称" + +#: ../../library/tkinter.ttk.rst:1049 +msgid "Specifies an image to display to the right of the column heading." +msgstr "指定显示在列标题右侧的图片。" + +#: ../../library/tkinter.ttk.rst:1051 +msgid "anchor: anchor" +msgstr "anchor:锚点" + +#: ../../library/tkinter.ttk.rst:1051 +msgid "" +"Specifies how the heading text should be aligned. One of the standard Tk " +"anchor values." +msgstr "指定列标题文本的对齐方式。应为标准的 Tk 锚点值。" + +#: ../../library/tkinter.ttk.rst:1054 +msgid "command: callback" +msgstr "command:回调函数" + +#: ../../library/tkinter.ttk.rst:1054 +msgid "A callback to be invoked when the heading label is pressed." +msgstr "点击列标题时执行的回调函数。" + +#: ../../library/tkinter.ttk.rst:1056 +msgid "To configure the tree column heading, call this with column = \"#0\"." +msgstr "若要对 tree 列进行设置,请带上 column = \"#0\" 进行调用。" + +#: ../../library/tkinter.ttk.rst:1061 +msgid "" +"Returns a description of the specified *component* under the point given by " +"*x* and *y*, or the empty string if no such *component* is present at that " +"position." +msgstr "返回 *x*、*y* 位置上 *component* 数据项的描述信息,如果此处没有该数据项,则返回空字符串。" + +#: ../../library/tkinter.ttk.rst:1068 +msgid "Returns the item ID of the item at position *y*." +msgstr "返回 *y* 位置上的数据项 ID。" + +#: ../../library/tkinter.ttk.rst:1073 +msgid "Returns the data column identifier of the cell at position *x*." +msgstr "返回 *x* 位置上的单元格所在的数据列 ID。" + +#: ../../library/tkinter.ttk.rst:1075 +msgid "The tree column has ID #0." +msgstr "tree 列的 ID 为 #0 。" + +#: ../../library/tkinter.ttk.rst:1080 +msgid "Returns one of:" +msgstr "返回以下值之一:" + +#: ../../library/tkinter.ttk.rst:1083 +msgid "region" +msgstr "区域" + +#: ../../library/tkinter.ttk.rst:1083 +msgid "meaning" +msgstr "含义" + +#: ../../library/tkinter.ttk.rst:1085 +msgid "heading" +msgstr "heading" + +#: ../../library/tkinter.ttk.rst:1085 +msgid "Tree heading area." +msgstr "树的标题栏区域。" + +#: ../../library/tkinter.ttk.rst:1087 +msgid "separator" +msgstr "separator" + +#: ../../library/tkinter.ttk.rst:1087 +msgid "Space between two columns headings." +msgstr "两个列标题之间的间隔区域。" + +#: ../../library/tkinter.ttk.rst:1089 +msgid "tree" +msgstr "tree" + +#: ../../library/tkinter.ttk.rst:1089 +msgid "The tree area." +msgstr "树区域。" + +#: ../../library/tkinter.ttk.rst:1091 +msgid "cell" +msgstr "cell" + +#: ../../library/tkinter.ttk.rst:1091 +msgid "A data cell." +msgstr "数据单元格。" + +#: ../../library/tkinter.ttk.rst:1094 ../../library/tkinter.ttk.rst:1101 +msgid "Availability: Tk 8.6." +msgstr "可用性:Tk 8.6。" + +#: ../../library/tkinter.ttk.rst:1099 +msgid "Returns the element at position *x*, *y*." +msgstr "返回位于 *x* 、*y* 的数据项。" + +#: ../../library/tkinter.ttk.rst:1106 +msgid "" +"Returns the integer index of *item* within its parent's list of children." +msgstr "返回 *item* 在父项的子项列表中的整数索引。" + +#: ../../library/tkinter.ttk.rst:1111 +msgid "" +"Creates a new item and returns the item identifier of the newly created " +"item." +msgstr "新建一个数据项并返回其 ID。" + +#: ../../library/tkinter.ttk.rst:1114 +msgid "" +"*parent* is the item ID of the parent item, or the empty string to create a " +"new top-level item. *index* is an integer, or the value \"end\", specifying " +"where in the list of parent's children to insert the new item. If *index* is" +" less than or equal to zero, the new node is inserted at the beginning; if " +"*index* is greater than or equal to the current number of children, it is " +"inserted at the end. If *iid* is specified, it is used as the item " +"identifier; *iid* must not already exist in the tree. Otherwise, a new " +"unique identifier is generated." +msgstr "" +"*parent* 是父项的 ID,若要新建顶级项则为空字符串。 *index* 是整数或“end”,指明在父项的子项列表中的插入位置。如果 " +"*index* 小于等于0,则在开头插入新节点;如果 *index* 大于或等于当前子节点数,则将其插入末尾。如果给出了 *iid*,则将其用作数据项 " +"ID; *iid* 不得存在于树中。否则会新生成一个唯一 ID。" + +#: ../../library/tkinter.ttk.rst:1123 +msgid "See `Item Options`_ for the list of available points." +msgstr "此处可设置的属性请参阅 `Item Options`_ 。" + +#: ../../library/tkinter.ttk.rst:1128 +msgid "Query or modify the options for the specified *item*." +msgstr "查询或修改某 *item* 的属性。" + +#: ../../library/tkinter.ttk.rst:1130 +msgid "" +"If no options are given, a dict with options/values for the item is " +"returned. If *option* is specified then the value for that option is " +"returned. Otherwise, sets the options to the corresponding values as given " +"by *kw*." +msgstr "如果未给出 option,则返回属性/值构成的字典。如果给出了 *option*,则返回该属性的值。否则,将属性设为 *kw* 给出的值。" + +#: ../../library/tkinter.ttk.rst:1138 +msgid "Moves *item* to position *index* in *parent*'s list of children." +msgstr "将 *item* 移至指定位置,父项为 *parent* ,子项列表索引为 *index* 。" + +#: ../../library/tkinter.ttk.rst:1140 +msgid "" +"It is illegal to move an item under one of its descendants. If *index* is " +"less than or equal to zero, *item* is moved to the beginning; if greater " +"than or equal to the number of children, it is moved to the end. If *item* " +"was detached it is reattached." +msgstr "" +"将数据项移入其子项之下是非法的。如果 *index* 小于等于0,*item* 将被移到开头;如果大于等于子项的总数,则被移至最后。如果 *item* " +"已解除关联,则会被重新关联。" + +#: ../../library/tkinter.ttk.rst:1148 +msgid "" +"Returns the identifier of *item*'s next sibling, or '' if *item* is the last" +" child of its parent." +msgstr "返回 *item* 的下一个相邻项,如果 *item* 是父项的最后一个子项,则返回 ''。" + +#: ../../library/tkinter.ttk.rst:1154 +msgid "" +"Returns the ID of the parent of *item*, or '' if *item* is at the top level " +"of the hierarchy." +msgstr "返回 *item* 的父项 ID,如果 *item* 为顶级节点,则返回 ''。" + +#: ../../library/tkinter.ttk.rst:1160 +msgid "" +"Returns the identifier of *item*'s previous sibling, or '' if *item* is the " +"first child of its parent." +msgstr "返回 *item* 的前一个相邻项,若 *item* 为父项的第一个子项,则返回 ''。" + +#: ../../library/tkinter.ttk.rst:1166 +msgid "An alias for :meth:`Treeview.move`." +msgstr ":meth:`Treeview.move` 的别名。" + +#: ../../library/tkinter.ttk.rst:1171 +msgid "Ensure that *item* is visible." +msgstr "确保 *item* 可见。" + +#: ../../library/tkinter.ttk.rst:1173 +msgid "" +"Sets all of *item*'s ancestors open option to ``True``, and scrolls the " +"widget if necessary so that *item* is within the visible portion of the " +"tree." +msgstr "将 *item* 所有上级的 open 属性设为 ``True``,必要时会滚动控件,让 *item* 处于树的可见部分。" + +#: ../../library/tkinter.ttk.rst:1180 +msgid "Returns a tuple of selected items." +msgstr "返回由选中项构成的元组。" + +#: ../../library/tkinter.ttk.rst:1182 +msgid "" +"``selection()`` no longer takes arguments. For changing the selection state" +" use the following selection methods." +msgstr "``selection()`` 不再接受参数了。若要改变选中的状态,请使用下面介绍的方法。" + +#: ../../library/tkinter.ttk.rst:1189 +msgid "*items* becomes the new selection." +msgstr "让 *items* 成为新的选中项。" + +#: ../../library/tkinter.ttk.rst:1191 ../../library/tkinter.ttk.rst:1199 +#: ../../library/tkinter.ttk.rst:1207 ../../library/tkinter.ttk.rst:1215 +msgid "" +"*items* can be passed as separate arguments, not just as a single tuple." +msgstr "*items* 可作为多个单独的参数传递,而不只是作为一个元组。" + +#: ../../library/tkinter.ttk.rst:1197 +msgid "Add *items* to the selection." +msgstr "将 *items* 加入选中项。" + +#: ../../library/tkinter.ttk.rst:1205 +msgid "Remove *items* from the selection." +msgstr "从选中项中移除 *items* 。" + +#: ../../library/tkinter.ttk.rst:1213 +msgid "Toggle the selection state of each item in *items*." +msgstr "切换 *items* 中各项的选中状态。" + +#: ../../library/tkinter.ttk.rst:1221 +msgid "" +"With one argument, returns a dictionary of column/value pairs for the " +"specified *item*. With two arguments, returns the current value of the " +"specified *column*. With three arguments, sets the value of given *column* " +"in given *item* to the specified *value*." +msgstr "" +"若带一个参数,则返回 *item* 的列/值字典。若带两个参数,则返回 *column* 的当前值。若带三个参数,则将 *item* 的 " +"*column* 设为 *value*。" + +#: ../../library/tkinter.ttk.rst:1229 +msgid "" +"Bind a callback for the given event *sequence* to the tag *tagname*. When an" +" event is delivered to an item, the callbacks for each of the item's tags " +"option are called." +msgstr "" +"为 tag 为 *tagname* 的数据项绑定事件 *sequence* 的回调函数。当事件分发给该数据项时,tag 参数为 *tagname* " +"的全部数据项的回调都会被调用到。" + +#: ../../library/tkinter.ttk.rst:1236 +msgid "Query or modify the options for the specified *tagname*." +msgstr "查询或修改 *tagname* 指定项的属性。" + +#: ../../library/tkinter.ttk.rst:1238 +msgid "" +"If *kw* is not given, returns a dict of the option settings for *tagname*. " +"If *option* is specified, returns the value for that *option* for the " +"specified *tagname*. Otherwise, sets the options to the corresponding values" +" for the given *tagname*." +msgstr "" +"如果给出了 *kw*,则返回 *tagname* 项的属性字典。如果给出了 *option*,则返回 *tagname* 项的 *option* " +"属性值。否则,设置 *tagname* 项的属性值。" + +#: ../../library/tkinter.ttk.rst:1246 +msgid "" +"If *item* is specified, returns 1 or 0 depending on whether the specified " +"*item* has the given *tagname*. Otherwise, returns a list of all items that " +"have the specified tag." +msgstr "" +"如果给出了 *item* ,则依据 *item* 是否具备 *tagname* 而返回 1 或 0。否则,返回 tag 为 " +"*tagname* 的所有数据项构成的列表。" + +#: ../../library/tkinter.ttk.rst:1250 +msgid "Availability: Tk 8.6" +msgstr "可用性:Tk 8.6。" + +#: ../../library/tkinter.ttk.rst:1255 +msgid "Query or modify horizontal position of the treeview." +msgstr "查询或修改 Treeview 的横向位置。" + +#: ../../library/tkinter.ttk.rst:1260 +msgid "Query or modify vertical position of the treeview." +msgstr "查询或修改 Treeview 的纵向位置。" + +#: ../../library/tkinter.ttk.rst:1266 +msgid "Ttk Styling" +msgstr "Ttk 样式" + +#: ../../library/tkinter.ttk.rst:1268 +msgid "" +"Each widget in :mod:`ttk` is assigned a style, which specifies the set of " +"elements making up the widget and how they are arranged, along with dynamic " +"and default settings for element options. By default the style name is the " +"same as the widget's class name, but it may be overridden by the widget's " +"style option. If you don't know the class name of a widget, use the method " +":meth:`Misc.winfo_class` (somewidget.winfo_class())." +msgstr "" +":mod:`ttk` " +"的每种控件都赋有一个样式,指定了控件内的元素及其排列方式,以及元素属性的动态和默认设置。默认情况下,样式名与控件的类名相同,但可能会被控件的 style" +" 属性覆盖。如果不知道控件的类名,可用 :meth:`Misc.winfo_class` 方法获取(somewidget.winfo_class())。" + +#: ../../library/tkinter.ttk.rst:1277 +msgid "" +"`Tcl'2004 conference presentation `_" +msgstr "" +"`Tcl'2004 会议报告 `_" + +#: ../../library/tkinter.ttk.rst:1278 +msgid "This document explains how the theme engine works" +msgstr "文章解释了主题引擎的工作原理。" + +#: ../../library/tkinter.ttk.rst:1283 +msgid "This class is used to manipulate the style database." +msgstr "用于操控样式数据库的类。" + +#: ../../library/tkinter.ttk.rst:1288 +msgid "Query or set the default value of the specified option(s) in *style*." +msgstr "查询或设置 *style* 的默认属性值。" + +#: ../../library/tkinter.ttk.rst:1290 +msgid "" +"Each key in *kw* is an option and each value is a string identifying the " +"value for that option." +msgstr " *kw* 中的键为属性,值为该属性值的字符串标识。" + +#: ../../library/tkinter.ttk.rst:1293 +msgid "" +"For example, to change every default button to be a flat button with some " +"padding and a different background color::" +msgstr "例如,要将默认按钮改为扁平样式,并带有留白和各种背景色:" + +#: ../../library/tkinter.ttk.rst:1312 +msgid "Query or sets dynamic values of the specified option(s) in *style*." +msgstr "查询或设置 *style* 的指定属性的动态值。" + +#: ../../library/tkinter.ttk.rst:1314 +msgid "" +"Each key in *kw* is an option and each value should be a list or a tuple " +"(usually) containing statespecs grouped in tuples, lists, or some other " +"preference. A statespec is a compound of one or more states and then a " +"value." +msgstr "" +"*kw* " +"的每个键都是一个属性,每个值通常应为列表或元组,其中包含以元组、列表或其他形式组合而成的状态标识(statespec)。状态标识是由一个或多个状态组合,加上一个值组成。" + +#: ../../library/tkinter.ttk.rst:1319 +msgid "An example may make it more understandable::" +msgstr "举个例子能更清晰些:" + +#: ../../library/tkinter.ttk.rst:1337 +msgid "" +"Note that the order of the (states, value) sequences for an option does " +"matter, if the order is changed to ``[('active', 'blue'), ('pressed', " +"'red')]`` in the foreground option, for example, the result would be a blue " +"foreground when the widget were in active or pressed states." +msgstr "" +"请注意,要点是属性的(状态,值)序列的顺序,如果前景色属性的顺序改为 ``[('active', 'blue'), ('pressed', " +"'red')]`` ,则控件处于激活或按下状态时的前景色将为蓝色。" + +#: ../../library/tkinter.ttk.rst:1345 +msgid "Returns the value specified for *option* in *style*." +msgstr "返回 *style* 中的 *option* 属性值。" + +#: ../../library/tkinter.ttk.rst:1347 +msgid "" +"If *state* is specified, it is expected to be a sequence of one or more " +"states. If the *default* argument is set, it is used as a fallback value in " +"case no specification for option is found." +msgstr "如果给出了 *state* ,则应是一个或多个状态组成的序列。如果设置了 *default* 参数,则在属性值缺失时会用作后备值。" + +#: ../../library/tkinter.ttk.rst:1351 +msgid "To check what font a Button uses by default::" +msgstr "若要检测按钮的默认字体,可以:" + +#: ../../library/tkinter.ttk.rst:1360 +msgid "" +"Define the widget layout for given *style*. If *layoutspec* is omitted, " +"return the layout specification for given style." +msgstr "按照 *style* 定义控件布局。如果省略了 *layoutspec*,则返回该样式的布局属性。" + +#: ../../library/tkinter.ttk.rst:1363 +msgid "" +"*layoutspec*, if specified, is expected to be a list or some other sequence " +"type (excluding strings), where each item should be a tuple and the first " +"item is the layout name and the second item should have the format described" +" in `Layouts`_." +msgstr "" +"若给出了 *layoutspec*,则应为一个列表或其他的序列类型(不包括字符串),其中的数据项应为元组类型,第一项是布局名称,第二项的格式应符合 " +"`Layouts`_ 的描述。" + +#: ../../library/tkinter.ttk.rst:1368 +msgid "" +"To understand the format, see the following example (it is not intended to " +"do anything useful)::" +msgstr "以下示例有助于理解这种格式(这里并没有实际意义):" + +#: ../../library/tkinter.ttk.rst:1395 +msgid "" +"Create a new element in the current theme, of the given *etype* which is " +"expected to be either \"image\", \"from\" or \"vsapi\". The latter is only " +"available in Tk 8.6a for Windows XP and Vista and is not described here." +msgstr "" +"在当前主题中创建一个新元素 *etype* ,应为 image、from 或 vsapi。后者仅在 Windows XP 和 Vista 版的 Tk " +"8.6a 中可用,此处不再赘述。" + +#: ../../library/tkinter.ttk.rst:1399 +msgid "" +"If \"image\" is used, *args* should contain the default image name followed " +"by statespec/value pairs (this is the imagespec), and *kw* may have the " +"following options:" +msgstr "" +"如果用了 image,则 *args* 应包含默认的图片名,后面跟着 状态标识/值(这里是 imagespec),*kw* 可带有以下属性:" + +#: ../../library/tkinter.ttk.rst:1405 +msgid "border=padding" +msgstr "border=padding" + +#: ../../library/tkinter.ttk.rst:1404 +msgid "" +"padding is a list of up to four integers, specifying the left, top, right, " +"and bottom borders, respectively." +msgstr "padding 是由不超过四个整数构成的列表,分别定义了左、顶、右、底的边界。" + +#: ../../library/tkinter.ttk.rst:1409 +msgid "height=height" +msgstr "height=height" + +#: ../../library/tkinter.ttk.rst:1408 +msgid "" +"Specifies a minimum height for the element. If less than zero, the base " +"image's height is used as a default." +msgstr "定义了元素的最小高度。如果小于零,则默认采用图片本身的高度。" + +#: ../../library/tkinter.ttk.rst:1413 +msgid "padding=padding" +msgstr "padding=padding" + +#: ../../library/tkinter.ttk.rst:1412 +msgid "" +"Specifies the element's interior padding. Defaults to border's value if not " +"specified." +msgstr "定义了元素的内部留白。若未指定则默认采用 border 值。" + +#: ../../library/tkinter.ttk.rst:1417 +msgid "sticky=spec" +msgstr "sticky=spec" + +#: ../../library/tkinter.ttk.rst:1416 +msgid "" +"Specifies how the image is placed within the final parcel. spec contains " +"zero or more characters \"n\", \"s\", \"w\", or \"e\"." +msgstr "定义了图片的对齐方式。spec 包含零个或多个 n、s、w、e 字符。" + +#: ../../library/tkinter.ttk.rst:1421 +msgid "width=width" +msgstr "width=width" + +#: ../../library/tkinter.ttk.rst:1420 +msgid "" +"Specifies a minimum width for the element. If less than zero, the base " +"image's width is used as a default." +msgstr "定义了元素的最小宽度。如果小于零,则默认采用图片本身的宽度。" + +#: ../../library/tkinter.ttk.rst:1423 +msgid "" +"If \"from\" is used as the value of *etype*, :meth:`element_create` will " +"clone an existing element. *args* is expected to contain a themename, from " +"which the element will be cloned, and optionally an element to clone from. " +"If this element to clone from is not specified, an empty element will be " +"used. *kw* is discarded." +msgstr "" +"如果 *etype* 的值用了 from,则 :meth:`element_create` 将复制一个现有的元素。 *args* " +"应包含主题名和可选的要复制的元素。若未给出要克隆的元素,则采用空元素。 *kw* 参数将被丢弃。" + +#: ../../library/tkinter.ttk.rst:1433 +msgid "Returns the list of elements defined in the current theme." +msgstr "返回当前主题已定义的元素列表 。" + +#: ../../library/tkinter.ttk.rst:1438 +msgid "Returns the list of *elementname*'s options." +msgstr "返回 *elementname* 元素的属性列表。" + +#: ../../library/tkinter.ttk.rst:1443 +msgid "Create a new theme." +msgstr "新建一个主题。" + +#: ../../library/tkinter.ttk.rst:1445 +msgid "" +"It is an error if *themename* already exists. If *parent* is specified, the " +"new theme will inherit styles, elements and layouts from the parent theme. " +"If *settings* are present they are expected to have the same syntax used for" +" :meth:`theme_settings`." +msgstr "" +"如果 *themename* 已经存在,则会报错。如果给出了 *parent*,则新主题将从父主题继承样式、元素和布局。若给出了 *settings* " +",则语法应与 :meth:`theme_settings` 的相同。" + +#: ../../library/tkinter.ttk.rst:1453 +msgid "" +"Temporarily sets the current theme to *themename*, apply specified " +"*settings* and then restore the previous theme." +msgstr "将当前主题临时设为 *themename*,并应用 *settings*,然后恢复之前的主题。" + +#: ../../library/tkinter.ttk.rst:1456 +msgid "" +"Each key in *settings* is a style and each value may contain the keys " +"'configure', 'map', 'layout' and 'element create' and they are expected to " +"have the same format as specified by the methods :meth:`Style.configure`, " +":meth:`Style.map`, :meth:`Style.layout` and :meth:`Style.element_create` " +"respectively." +msgstr "" +"*settings* 中的每个键都是一种样式而每个值可能包含 'configure', 'map', 'layout' 和 'element " +"create' 等键并且它们被预期具有与分别由 :meth:`Style.configure`, :meth:`Style.map`, " +":meth:`Style.layout` 和 :meth:`Style.element_create` 方法所指定的相符的格式。" + +#: ../../library/tkinter.ttk.rst:1462 +msgid "As an example, let's change the Combobox for the default theme a bit::" +msgstr "以下例子会对 Combobox 的默认主题稍作修改:" + +#: ../../library/tkinter.ttk.rst:1490 +msgid "Returns a list of all known themes." +msgstr "返回所有已知主题的列表。" + +#: ../../library/tkinter.ttk.rst:1495 +msgid "" +"If *themename* is not given, returns the theme in use. Otherwise, sets the " +"current theme to *themename*, refreshes all widgets and emits a " +"<> event." +msgstr "" +"若未给出 *themename*,则返回正在使用的主题。否则,将当前主题设为 *themename*,刷新所有控件并引发 " +"<> 事件。" + +#: ../../library/tkinter.ttk.rst:1501 +msgid "Layouts" +msgstr "布局" + +#: ../../library/tkinter.ttk.rst:1503 +msgid "" +"A layout can be just ``None``, if it takes no options, or a dict of options " +"specifying how to arrange the element. The layout mechanism uses a " +"simplified version of the pack geometry manager: given an initial cavity, " +"each element is allocated a parcel. Valid options/values are:" +msgstr "" +"布局在没有属性时可以为 ``None`` " +",或是定义了元素排列方式的属性字典。布局机制采用了位置管理器的简化版本:给定一个初始容器(cavity),为每个元素都分配一个包装盒(parcel)。合法的选项/值包括:" + +#: ../../library/tkinter.ttk.rst:1512 +msgid "side: whichside" +msgstr "side: whichside" + +#: ../../library/tkinter.ttk.rst:1510 +msgid "" +"Specifies which side of the cavity to place the element; one of top, right, " +"bottom or left. If omitted, the element occupies the entire cavity." +msgstr "指定元素置于容器的哪一侧; 顶、右、底或左。如果省略,则该元素将占据整个容器。" + +#: ../../library/tkinter.ttk.rst:1515 +msgid "sticky: nswe" +msgstr "sticky: nswe" + +#: ../../library/tkinter.ttk.rst:1515 +msgid "Specifies where the element is placed inside its allocated parcel." +msgstr "指定元素在已分配包装盒内的放置位置。" + +#: ../../library/tkinter.ttk.rst:1520 +msgid "unit: 0 or 1" +msgstr "unit: 0 或 1" + +#: ../../library/tkinter.ttk.rst:1518 +msgid "" +"If set to 1, causes the element and all of its descendants to be treated as " +"a single element for the purposes of :meth:`Widget.identify` et al. It's " +"used for things like scrollbar thumbs with grips." +msgstr "" +"如果设为 1,则将元素及其所有后代均视作单个元素以供 :meth:`Widget.identify` 等使用。 它被用于滚动条之类带有控制柄的东西。" + +#: ../../library/tkinter.ttk.rst:1525 +msgid "children: [sublayout... ]" +msgstr "children: [sublayout... ]" + +#: ../../library/tkinter.ttk.rst:1523 +msgid "" +"Specifies a list of elements to place inside the element. Each element is a " +"tuple (or other sequence type) where the first item is the layout name, and " +"the other is a `Layout`_." +msgstr "指定要放置于元素内的元素列表。每个元素都是一个元组(或其他序列类型),其中第一项是布局名称,另一项是个 `Layout`_ 。" diff --git a/library/token.po b/library/token.po new file mode 100644 index 000000000..62c779803 --- /dev/null +++ b/library/token.po @@ -0,0 +1,325 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) 2001-2022, Python Software Foundation +# This file is distributed under the same license as the Python package. +# FIRST AUTHOR , YEAR. +# +# Translators: +# Alpha Du , 2019 +# Alex Ding , 2020 +# Freesand Leo , 2022 +# +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: Python 3.9\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2022-11-04 14:34+0000\n" +"PO-Revision-Date: 2017-02-16 23:31+0000\n" +"Last-Translator: Freesand Leo , 2022\n" +"Language-Team: Chinese (China) (https://www.transifex.com/python-doc/teams/5390/zh_CN/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: zh_CN\n" +"Plural-Forms: nplurals=1; plural=0;\n" + +#: ../../library/token.rst:2 +msgid ":mod:`token` --- Constants used with Python parse trees" +msgstr ":mod:`token` --- 与Python解析树一起使用的常量" + +#: ../../library/token.rst:9 +msgid "**Source code:** :source:`Lib/token.py`" +msgstr "**源码:** :source:`Lib/token.py`" + +#: ../../library/token.rst:13 +msgid "" +"This module provides constants which represent the numeric values of leaf " +"nodes of the parse tree (terminal tokens). Refer to the file " +":file:`Grammar/Grammar` in the Python distribution for the definitions of " +"the names in the context of the language grammar. The specific numeric " +"values which the names map to may change between Python versions." +msgstr "" +"此模块提供表示解析树(终端令牌)的叶节点的数值的常量。 请参阅 Python 发行版中的文件 :file:`Grammar/Grammar` " +",以获取语言语法上下文中名称的定义。 名称映射到的特定数值可能会在 Python 版本之间更改。" + +#: ../../library/token.rst:19 +msgid "" +"The module also provides a mapping from numeric codes to names and some " +"functions. The functions mirror definitions in the Python C header files." +msgstr "该模块还提供从数字代码到名称和一些函数的映射。 这些函数镜像了 Python C 头文件中的定义。" + +#: ../../library/token.rst:25 +msgid "" +"Dictionary mapping the numeric values of the constants defined in this " +"module back to name strings, allowing more human-readable representation of " +"parse trees to be generated." +msgstr "将此模块中定义的常量的数值映射回名称字符串的字典,允许生成更加人类可读的解析树表示。" + +#: ../../library/token.rst:32 +msgid "Return ``True`` for terminal token values." +msgstr "对终端标记值返回 ``True``。" + +#: ../../library/token.rst:37 +msgid "Return ``True`` for non-terminal token values." +msgstr "对非终端标记值返回 ``True``。" + +#: ../../library/token.rst:42 +msgid "Return ``True`` if *x* is the marker indicating the end of input." +msgstr "如果 *x* 是表示输入结束的标记则返回 ``True``。" + +#: ../../library/token.rst:45 +msgid "The token constants are:" +msgstr "标记常量是:" + +#: ../../library/token-list.inc:18 +msgid "Token value for ``\"(\"``." +msgstr "``\"(\"`` 的权标值。" + +#: ../../library/token-list.inc:22 +msgid "Token value for ``\")\"``." +msgstr "``\")\"`` 的权标值。" + +#: ../../library/token-list.inc:26 +msgid "Token value for ``\"[\"``." +msgstr "``\"[\"`` 的权标值。" + +#: ../../library/token-list.inc:30 +msgid "Token value for ``\"]\"``." +msgstr "``\"]\"`` 的权标值。" + +#: ../../library/token-list.inc:34 +msgid "Token value for ``\":\"``." +msgstr "``\":\"`` 的权标值。" + +#: ../../library/token-list.inc:38 +msgid "Token value for ``\",\"``." +msgstr "``\",\"`` 的权标值。" + +#: ../../library/token-list.inc:42 +msgid "Token value for ``\";\"``." +msgstr "``\";\"`` 的权标值。" + +#: ../../library/token-list.inc:46 +msgid "Token value for ``\"+\"``." +msgstr "``\"+\"`` 的权标值。" + +#: ../../library/token-list.inc:50 +msgid "Token value for ``\"-\"``." +msgstr "``\"-\"`` 的权标值。" + +#: ../../library/token-list.inc:54 +msgid "Token value for ``\"*\"``." +msgstr "``\"*\"`` 的权标值。" + +#: ../../library/token-list.inc:58 +msgid "Token value for ``\"/\"``." +msgstr "``\"/\"`` 的权标值。" + +#: ../../library/token-list.inc:62 +msgid "Token value for ``\"|\"``." +msgstr "``\"|\"`` 的权标值。" + +#: ../../library/token-list.inc:66 +msgid "Token value for ``\"&\"``." +msgstr "``\"&\"`` 的权标值。" + +#: ../../library/token-list.inc:70 +msgid "Token value for ``\"<\"``." +msgstr "``\"<\"`` 的权标值。" + +#: ../../library/token-list.inc:74 +msgid "Token value for ``\">\"``." +msgstr "``\">\"`` 的权标值。" + +#: ../../library/token-list.inc:78 +msgid "Token value for ``\"=\"``." +msgstr "``\"=\"`` 的形符值。" + +#: ../../library/token-list.inc:82 +msgid "Token value for ``\".\"``." +msgstr "``\".\"`` 的形符值。" + +#: ../../library/token-list.inc:86 +msgid "Token value for ``\"%\"``." +msgstr "``\"%\"``" + +#: ../../library/token-list.inc:90 +msgid "Token value for ``\"{\"``." +msgstr " ``\"{\"`` 的形符值。" + +#: ../../library/token-list.inc:94 +msgid "Token value for ``\"}\"``." +msgstr "``\"}\"`` 的形符值。" + +#: ../../library/token-list.inc:98 +msgid "Token value for ``\"==\"``." +msgstr "``\"==\"`` 的形符值。" + +#: ../../library/token-list.inc:102 +msgid "Token value for ``\"!=\"``." +msgstr "``\"!=\"`` 的形符值。" + +#: ../../library/token-list.inc:106 +msgid "Token value for ``\"<=\"``." +msgstr "``\"<=\"`` 的形符值。" + +#: ../../library/token-list.inc:110 +msgid "Token value for ``\">=\"``." +msgstr "``\">=\"`` 的形符值。" + +#: ../../library/token-list.inc:114 +msgid "Token value for ``\"~\"``." +msgstr "``\"~\"`` 的形符值。" + +#: ../../library/token-list.inc:118 +msgid "Token value for ``\"^\"``." +msgstr "``\"^\"`` 的形符值。" + +#: ../../library/token-list.inc:122 +msgid "Token value for ``\"<<\"``." +msgstr "``\"<<\"`` 的形符值。" + +#: ../../library/token-list.inc:126 +msgid "Token value for ``\">>\"``." +msgstr "``\">>\"`` 的形符值。" + +#: ../../library/token-list.inc:130 +msgid "Token value for ``\"**\"``." +msgstr "``\"**\"`` 的形符值。" + +#: ../../library/token-list.inc:134 +msgid "Token value for ``\"+=\"``." +msgstr "``\"+=\"`` 的形符值。" + +#: ../../library/token-list.inc:138 +msgid "Token value for ``\"-=\"``." +msgstr "``\"-=\"`` 的形符值。" + +#: ../../library/token-list.inc:142 +msgid "Token value for ``\"*=\"``." +msgstr "``\"*=\"`` 的形符值。" + +#: ../../library/token-list.inc:146 +msgid "Token value for ``\"/=\"``." +msgstr "``\"/=\"`` 的形符值。" + +#: ../../library/token-list.inc:150 +msgid "Token value for ``\"%=\"``." +msgstr "``\"%=\"`` 的形符值。" + +#: ../../library/token-list.inc:154 +msgid "Token value for ``\"&=\"``." +msgstr "``\"&=\"`` 的形符值。" + +#: ../../library/token-list.inc:158 +msgid "Token value for ``\"|=\"``." +msgstr "``\"|=\"`` 的形符值。" + +#: ../../library/token-list.inc:162 +msgid "Token value for ``\"^=\"``." +msgstr "``\"^=\"`` 的形符值。" + +#: ../../library/token-list.inc:166 +msgid "Token value for ``\"<<=\"``." +msgstr "``\"<<=\"`` 的形符值。" + +#: ../../library/token-list.inc:170 +msgid "Token value for ``\">>=\"``." +msgstr "``\">>=\"`` 的形符值。" + +#: ../../library/token-list.inc:174 +msgid "Token value for ``\"**=\"``." +msgstr "``\"**=\"`` 的形符值。" + +#: ../../library/token-list.inc:178 +msgid "Token value for ``\"//\"``." +msgstr "``\"//\"`` 的形符值。" + +#: ../../library/token-list.inc:182 +msgid "Token value for ``\"//=\"``." +msgstr "``\"//=\"`` 的形符值。" + +#: ../../library/token-list.inc:186 +msgid "Token value for ``\"@\"``." +msgstr "``\"@\"`` 的形符值。" + +#: ../../library/token-list.inc:190 +msgid "Token value for ``\"@=\"``." +msgstr "``\"@=\"`` 的形符值。" + +#: ../../library/token-list.inc:194 +msgid "Token value for ``\"->\"``." +msgstr "``\"->\"`` 的形符值。" + +#: ../../library/token-list.inc:198 +msgid "Token value for ``\"...\"``." +msgstr "``\"...\"`` 的形符值。" + +#: ../../library/token-list.inc:202 +msgid "Token value for ``\":=\"``." +msgstr "``\":=\"`` 的形符值。" + +#: ../../library/token.rst:49 +msgid "" +"The following token type values aren't used by the C tokenizer but are " +"needed for the :mod:`tokenize` module." +msgstr "C 标记生成器不使用以下标记类型值,但 :mod:`tokenize` 模块需要这些标记类型值。" + +#: ../../library/token.rst:54 +msgid "Token value used to indicate a comment." +msgstr "标记值用于表示注释。" + +#: ../../library/token.rst:59 +msgid "" +"Token value used to indicate a non-terminating newline. The :data:`NEWLINE`" +" token indicates the end of a logical line of Python code; ``NL`` tokens are" +" generated when a logical line of code is continued over multiple physical " +"lines." +msgstr "" +"标记值用于表示非终止换行符。 :data:`NEWLINE` 标记表示 Python 代码逻辑行的结束;当在多条物理线路上继续执行逻辑代码行时,会生成 " +"``NL`` 标记。" + +#: ../../library/token.rst:67 +msgid "" +"Token value that indicates the encoding used to decode the source bytes into" +" text. The first token returned by :func:`tokenize.tokenize` will always be " +"an ``ENCODING`` token." +msgstr "" +"指示用于将源字节解码为文本的编码的标记值。 :func:`tokenize.tokenize` 返回的第一个标记将始终是一个 ``ENCODING`` " +"标记。" + +#: ../../library/token.rst:75 +msgid "" +"Token value indicating that a type comment was recognized. Such tokens are " +"only produced when :func:`ast.parse()` is invoked with " +"``type_comments=True``." +msgstr "" +"表示类型注释被识别的形符值。 此种形符仅在 :func:`ast.parse()` 附带 ``type_comments=True`` " +"被发起调用时才会产生。" + +#: ../../library/token.rst:80 +msgid "Added :data:`AWAIT` and :data:`ASYNC` tokens." +msgstr "补充 :data:`AWAIT` 和 :data:`ASYNC` 标记。" + +#: ../../library/token.rst:83 +msgid "Added :data:`COMMENT`, :data:`NL` and :data:`ENCODING` tokens." +msgstr "补充 :data:`COMMENT` 、 :data:`NL` 和 :data:`ENCODING` 标记。" + +#: ../../library/token.rst:86 +msgid "" +"Removed :data:`AWAIT` and :data:`ASYNC` tokens. \"async\" and \"await\" are " +"now tokenized as :data:`NAME` tokens." +msgstr "" +"移除 :data:`AWAIT` 和 :data:`ASYNC` 标记。 \"async\" 和 \"await\" 现在被标记为 " +":data:`NAME` 标记。" + +#: ../../library/token.rst:90 +msgid "" +"Added :data:`TYPE_COMMENT`, :data:`TYPE_IGNORE`, :data:`COLONEQUAL`. Added " +":data:`AWAIT` and :data:`ASYNC` tokens back (they're needed to support " +"parsing older Python versions for :func:`ast.parse` with ``feature_version``" +" set to 6 or lower)." +msgstr "" +"增加了 :data:`TYPE_COMMENT`, :data:`TYPE_IGNORE`, :data:`COLONEQUAL`. Added " +":data:`AWAIT` 和 :data:`ASYNC` 形符(它们对于支持解析对于 :func:`ast.parse` 的 " +"``feature_version`` 设为 6 或更低的较老的 Python 版本是必须的)。" diff --git a/library/tokenize.po b/library/tokenize.po new file mode 100644 index 000000000..75e88a0c1 --- /dev/null +++ b/library/tokenize.po @@ -0,0 +1,307 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) 2001-2022, Python Software Foundation +# This file is distributed under the same license as the Python package. +# FIRST AUTHOR , YEAR. +# +# Translators: +# Fred , 2018 +# dogn he , 2019 +# 七七 刘 , 2020 +# Dai Xu , 2021 +# Alpha Du , 2021 +# Freesand Leo , 2021 +# +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: Python 3.9\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2022-11-04 14:34+0000\n" +"PO-Revision-Date: 2017-02-16 23:31+0000\n" +"Last-Translator: Freesand Leo , 2021\n" +"Language-Team: Chinese (China) (https://www.transifex.com/python-doc/teams/5390/zh_CN/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: zh_CN\n" +"Plural-Forms: nplurals=1; plural=0;\n" + +#: ../../library/tokenize.rst:2 +msgid ":mod:`tokenize` --- Tokenizer for Python source" +msgstr ":mod:`tokenize` --- 对 Python 代码使用的标记解析器" + +#: ../../library/tokenize.rst:10 +msgid "**Source code:** :source:`Lib/tokenize.py`" +msgstr "**源码:** :source:`Lib/tokenize.py`" + +#: ../../library/tokenize.rst:14 +msgid "" +"The :mod:`tokenize` module provides a lexical scanner for Python source " +"code, implemented in Python. The scanner in this module returns comments as" +" tokens as well, making it useful for implementing \"pretty-printers\", " +"including colorizers for on-screen displays." +msgstr "" +":mod:`tokenize` 模块为 Python 源代码提供了一个词法扫描器,用 Python " +"实现。该模块中的扫描器也将注释作为标记返回,这使得它对于实现“漂亮的输出器”非常有用,包括用于屏幕显示的着色器。" + +#: ../../library/tokenize.rst:19 +msgid "" +"To simplify token stream handling, all :ref:`operator ` and " +":ref:`delimiter ` tokens and :data:`Ellipsis` are returned using" +" the generic :data:`~token.OP` token type. The exact type can be determined" +" by checking the ``exact_type`` property on the :term:`named tuple` returned" +" from :func:`tokenize.tokenize`." +msgstr "" +"为了简化标记流的处理,所有的 :ref:`运算符 ` 和 :ref:`定界符 ` 以及 " +":data:`Ellipsis` 返回时都会打上通用的 :data:`~token.OP` 标记。 可以通过 " +":func:`tokenize.tokenize` 返回的 :term:`named tuple` 对象的 ``exact_type`` " +"属性来获得确切的标记类型。" + +#: ../../library/tokenize.rst:26 +msgid "Tokenizing Input" +msgstr "对输入进行解析标记" + +#: ../../library/tokenize.rst:28 +msgid "The primary entry point is a :term:`generator`:" +msgstr "主要的入口是一个生成器 :term:`generator`:" + +#: ../../library/tokenize.rst:32 +msgid "" +"The :func:`.tokenize` generator requires one argument, *readline*, which " +"must be a callable object which provides the same interface as the " +":meth:`io.IOBase.readline` method of file objects. Each call to the " +"function should return one line of input as bytes." +msgstr "" +"生成器 :func:`.tokenize` 需要一个 *readline* 参数,这个参数必须是一个可调用对象,且能提供与文件对象的 " +":meth:`io.IOBase.readline` 方法相同的接口。每次调用这个函数都要 返回字节类型输入的一行数据。" + +#: ../../library/tokenize.rst:37 +msgid "" +"The generator produces 5-tuples with these members: the token type; the " +"token string; a 2-tuple ``(srow, scol)`` of ints specifying the row and " +"column where the token begins in the source; a 2-tuple ``(erow, ecol)`` of " +"ints specifying the row and column where the token ends in the source; and " +"the line on which the token was found. The line passed (the last tuple item)" +" is the *physical* line. The 5 tuple is returned as a :term:`named tuple` " +"with the field names: ``type string start end line``." +msgstr "" +"生成器产生 5 个具有这些成员的元组:令牌类型;令牌字符串;指定令牌在源中开始的行和列的 2 元组 ``(srow, scol)`` " +";指定令牌在源中结束的行和列的 2 元组 ``(erow, ecol)`` ;以及发现令牌的行。所传递的行(最后一个元组项)是 *实际的* 行。 5 " +"个元组以 :term:`named tuple` 的形式返回,字段名是: ``type string start end line`` 。" + +#: ../../library/tokenize.rst:46 +msgid "" +"The returned :term:`named tuple` has an additional property named " +"``exact_type`` that contains the exact operator type for :data:`~token.OP` " +"tokens. For all other token types ``exact_type`` equals the named tuple " +"``type`` field." +msgstr "" +"返回的 :term:`named tuple` 有一个额外的属性,名为 ``exact_type`` ,包含了 :data:`~token.OP` " +"标记的确切操作符类型。 对于所有其他标记类型, ``exact_type`` 等于命名元组的 ``type`` 字段。" + +#: ../../library/tokenize.rst:51 +msgid "Added support for named tuples." +msgstr "增加了对 named tuple 的支持。" + +#: ../../library/tokenize.rst:54 +msgid "Added support for ``exact_type``." +msgstr "添加了对 ``exact_type`` 的支持。" + +#: ../../library/tokenize.rst:57 +msgid "" +":func:`.tokenize` determines the source encoding of the file by looking for " +"a UTF-8 BOM or encoding cookie, according to :pep:`263`." +msgstr "根据:pep:`263` , :func:`.tokenize` 通过寻找 UTF-8 BOM 或编码 cookie 来确定文件的源编码。" + +#: ../../library/tokenize.rst:62 +msgid "Tokenize a source reading unicode strings instead of bytes." +msgstr "对读取 unicode 字符串而不是字节的源进行标记。" + +#: ../../library/tokenize.rst:64 +msgid "" +"Like :func:`.tokenize`, the *readline* argument is a callable returning a " +"single line of input. However, :func:`generate_tokens` expects *readline* to" +" return a str object rather than bytes." +msgstr "" +"和 :func:`.tokenize` 一样, *readline* 参数是一个返回单行输入的可调用参数。然而, " +":func:`generate_tokens` 希望 *readline* 返回一个 str 对象而不是字节。" + +#: ../../library/tokenize.rst:68 +msgid "" +"The result is an iterator yielding named tuples, exactly like " +":func:`.tokenize`. It does not yield an :data:`~token.ENCODING` token." +msgstr "" +"其结果是一个产生具名元组的的迭代器,与 :func:`.tokenize` 完全一样。 它不会产生 :data:`~token.ENCODING` " +"标记。" + +#: ../../library/tokenize.rst:71 +msgid "" +"All constants from the :mod:`token` module are also exported from " +":mod:`tokenize`." +msgstr "所有来自 :mod:`token` 模块的常量也可从 :mod:`tokenize` 导出。" + +#: ../../library/tokenize.rst:74 +msgid "" +"Another function is provided to reverse the tokenization process. This is " +"useful for creating tools that tokenize a script, modify the token stream, " +"and write back the modified script." +msgstr "提供了另一个函数来逆转标记化过程。这对于创建对脚本进行标记、修改标记流并写回修改后脚本的工具很有用。" + +#: ../../library/tokenize.rst:81 +msgid "" +"Converts tokens back into Python source code. The *iterable* must return " +"sequences with at least two elements, the token type and the token string. " +"Any additional sequence elements are ignored." +msgstr "" +"将令牌转换为 Python 源代码。 *iterable* 必须返回至少有两个元素的序列,即令牌类型和令牌字符串。任何额外的序列元素都会被忽略。" + +#: ../../library/tokenize.rst:85 +msgid "" +"The reconstructed script is returned as a single string. The result is " +"guaranteed to tokenize back to match the input so that the conversion is " +"lossless and round-trips are assured. The guarantee applies only to the " +"token type and token string as the spacing between tokens (column positions)" +" may change." +msgstr "" +"重构的脚本以单个字符串的形式返回。 结果被保证为标记回与输入相匹配,因此转换是无损的,并保证来回操作。 " +"该保证只适用于标记类型和标记字符串,因为标记之间的间距(列位置)可能会改变。" + +#: ../../library/tokenize.rst:91 +msgid "" +"It returns bytes, encoded using the :data:`~token.ENCODING` token, which is " +"the first token sequence output by :func:`.tokenize`. If there is no " +"encoding token in the input, it returns a str instead." +msgstr "" +"它返回字节,使用 :data:`~token.ENCODING` 标记进行编码,这是由 :func:`.tokenize` " +"输出的第一个标记序列。如果输入中没有编码令牌,它将返回一个字符串。" + +#: ../../library/tokenize.rst:96 +msgid "" +":func:`.tokenize` needs to detect the encoding of source files it tokenizes." +" The function it uses to do this is available:" +msgstr ":func:`.tokenize` 需要检测它所标记源文件的编码。它用来做这件事的函数是可用的:" + +#: ../../library/tokenize.rst:101 +msgid "" +"The :func:`detect_encoding` function is used to detect the encoding that " +"should be used to decode a Python source file. It requires one argument, " +"readline, in the same way as the :func:`.tokenize` generator." +msgstr "" +":func:`detect_encoding` 函数用于检测解码 Python 源文件时应使用的编码。它需要一个参数, readline ,与 " +":func:`.tokenize` 生成器的使用方式相同。" + +#: ../../library/tokenize.rst:105 +msgid "" +"It will call readline a maximum of twice, and return the encoding used (as a" +" string) and a list of any lines (not decoded from bytes) it has read in." +msgstr "它最多调用 readline 两次,并返回所使用的编码(作为一个字符串)和它所读入的任何行(不是从字节解码的)的 list 。" + +#: ../../library/tokenize.rst:109 +msgid "" +"It detects the encoding from the presence of a UTF-8 BOM or an encoding " +"cookie as specified in :pep:`263`. If both a BOM and a cookie are present, " +"but disagree, a :exc:`SyntaxError` will be raised. Note that if the BOM is " +"found, ``'utf-8-sig'`` will be returned as an encoding." +msgstr "" +"它从 UTF-8 BOM 或编码 cookie 的存在中检测编码格式,如 :pep:`263` 所指明的。 如果 BOM 和 cookie " +"都存在,但不一致,将会引发 :exc:`SyntaxError`。 请注意,如果找到 BOM ,将返回 ``'utf-8-sig'`` 作为编码格式。" + +#: ../../library/tokenize.rst:114 +msgid "" +"If no encoding is specified, then the default of ``'utf-8'`` will be " +"returned." +msgstr "如果没有指定编码,那么将返回默认的 ``'utf-8'`` 编码." + +#: ../../library/tokenize.rst:117 +msgid "" +"Use :func:`.open` to open Python source files: it uses " +":func:`detect_encoding` to detect the file encoding." +msgstr "使用 :func:`.open` 来打开 Python 源文件:它使用 :func:`detect_encoding` 来检测文件编码。" + +#: ../../library/tokenize.rst:123 +msgid "" +"Open a file in read only mode using the encoding detected by " +":func:`detect_encoding`." +msgstr "使用由 :func:`detect_encoding` 检测到的编码,以只读模式打开一个文件。" + +#: ../../library/tokenize.rst:130 +msgid "" +"Raised when either a docstring or expression that may be split over several " +"lines is not completed anywhere in the file, for example::" +msgstr "当文件中任何地方没有完成 docstring 或可能被分割成几行的表达式时触发,例如::" + +#: ../../library/tokenize.rst:136 +msgid "or::" +msgstr "或者:" + +#: ../../library/tokenize.rst:142 +msgid "" +"Note that unclosed single-quoted strings do not cause an error to be raised." +" They are tokenized as :data:`~token.ERRORTOKEN`, followed by the " +"tokenization of their contents." +msgstr "注意,未封闭的单引号字符串不会导致错误发生。它们被标记为 :data:`~token.ERRORTOKEN` ,然后是其内容的标记化。" + +#: ../../library/tokenize.rst:150 +msgid "Command-Line Usage" +msgstr "命令行用法" + +#: ../../library/tokenize.rst:154 +msgid "" +"The :mod:`tokenize` module can be executed as a script from the command " +"line. It is as simple as:" +msgstr ":mod:`tokenize` 模块可以作为一个脚本从命令行执行。这很简单。" + +#: ../../library/tokenize.rst:161 +msgid "The following options are accepted:" +msgstr "可以接受以下选项:" + +#: ../../library/tokenize.rst:167 +msgid "show this help message and exit" +msgstr "显示此帮助信息并退出" + +#: ../../library/tokenize.rst:171 +msgid "display token names using the exact type" +msgstr "使用确切的类型显示令牌名称" + +#: ../../library/tokenize.rst:173 +msgid "" +"If :file:`filename.py` is specified its contents are tokenized to stdout. " +"Otherwise, tokenization is performed on stdin." +msgstr "如果 :file:`filename.py` 被指定,其内容会被标记到 stdout 。否则,标记化将在 stdin 上执行。" + +#: ../../library/tokenize.rst:177 +msgid "Examples" +msgstr "示例" + +#: ../../library/tokenize.rst:179 +msgid "" +"Example of a script rewriter that transforms float literals into Decimal " +"objects::" +msgstr "脚本改写器的例子,它将 float 文本转换为 Decimal 对象:。" + +#: ../../library/tokenize.rst:221 +msgid "Example of tokenizing from the command line. The script::" +msgstr "从命令行进行标记化的例子。 脚本::" + +#: ../../library/tokenize.rst:228 +msgid "" +"will be tokenized to the following output where the first column is the " +"range of the line/column coordinates where the token is found, the second " +"column is the name of the token, and the final column is the value of the " +"token (if any)" +msgstr "将被标记为以下输出,其中第一列是发现标记的行 / 列坐标范围,第二列是标记的名称,最后一列是标记的值(如果有)。" + +#: ../../library/tokenize.rst:256 +msgid "" +"The exact token type names can be displayed using the :option:`-e` option:" +msgstr "可以使用 :option:`-e` 选项来显示确切的标记类型名称。" + +#: ../../library/tokenize.rst:282 +msgid "" +"Example of tokenizing a file programmatically, reading unicode strings " +"instead of bytes with :func:`generate_tokens`::" +msgstr "以编程方式对文件进行标记的例子,用 :func:`generate_tokens` 读取 unicode 字符串而不是字节::" + +#: ../../library/tokenize.rst:292 +msgid "Or reading bytes directly with :func:`.tokenize`::" +msgstr "或者通过 :func:`.tokenize` 直接读取字节数据::" diff --git a/library/trace.po b/library/trace.po new file mode 100644 index 000000000..86b71dac0 --- /dev/null +++ b/library/trace.po @@ -0,0 +1,270 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) 2001-2022, Python Software Foundation +# This file is distributed under the same license as the Python package. +# FIRST AUTHOR , YEAR. +# +# Translators: +# yujie pu <614457953@qq.com>, 2020 +# Dai Xu , 2021 +# Freesand Leo , 2021 +# Alpha Du , 2021 +# +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: Python 3.9\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2022-11-04 14:34+0000\n" +"PO-Revision-Date: 2017-02-16 23:32+0000\n" +"Last-Translator: Alpha Du , 2021\n" +"Language-Team: Chinese (China) (https://www.transifex.com/python-doc/teams/5390/zh_CN/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: zh_CN\n" +"Plural-Forms: nplurals=1; plural=0;\n" + +#: ../../library/trace.rst:2 +msgid ":mod:`trace` --- Trace or track Python statement execution" +msgstr ":mod:`trace` --- 跟踪Python语句执行" + +#: ../../library/trace.rst:7 +msgid "**Source code:** :source:`Lib/trace.py`" +msgstr "**源代码:** :source:`Lib/trace.py`" + +#: ../../library/trace.rst:11 +msgid "" +"The :mod:`trace` module allows you to trace program execution, generate " +"annotated statement coverage listings, print caller/callee relationships and" +" list functions executed during a program run. It can be used in another " +"program or from the command line." +msgstr "" +"模块 :mod:`trace` module " +"允许你跟踪程序的执行过程,生成带注释的语句覆盖率列表,打印调用/被调用关系以及列出在程序运行期间执行过的函数。可以在其他程序或者命令行中使用它" + +#: ../../library/trace.rst:19 +msgid "`Coverage.py `_" +msgstr "`Coverage.py `_" + +#: ../../library/trace.rst:19 +msgid "" +"A popular third-party coverage tool that provides HTML output along with " +"advanced features such as branch coverage." +msgstr "流行的第三方代码覆盖工具,可输出 HTML ,并提供分支覆盖等高级功能。" + +#: ../../library/trace.rst:25 +msgid "Command-Line Usage" +msgstr "命令行用法" + +#: ../../library/trace.rst:27 +msgid "" +"The :mod:`trace` module can be invoked from the command line. It can be as " +"simple as ::" +msgstr ":mod:`trace` 模块可由命令行调用。用法如此简单:" + +#: ../../library/trace.rst:32 +msgid "" +"The above will execute :file:`somefile.py` and generate annotated listings " +"of all Python modules imported during the execution into the current " +"directory." +msgstr "上述命令将执行 :file:`somefile.py` ,并在当前目录生成执行期间所有已导入 Python 模块的带注释列表。" + +#: ../../library/trace.rst:39 +msgid "Display usage and exit." +msgstr "显示用法并退出。" + +#: ../../library/trace.rst:43 +msgid "Display the version of the module and exit." +msgstr "显示模块版本并退出。" + +#: ../../library/trace.rst:45 +msgid "Added ``--module`` option that allows to run an executable module." +msgstr "加入了 ``--module`` 选项,允许运行可执行模块。" + +#: ../../library/trace.rst:49 +msgid "Main options" +msgstr "主要的可选参数" + +#: ../../library/trace.rst:51 +msgid "" +"At least one of the following options must be specified when invoking " +":mod:`trace`. The :option:`--listfuncs <-l>` option is mutually exclusive " +"with the :option:`--trace <-t>` and :option:`--count <-c>` options. When " +":option:`--listfuncs <-l>` is provided, neither :option:`--count <-c>` nor " +":option:`--trace <-t>` are accepted, and vice versa." +msgstr "" +"在调用 :mod:`trace` 时,至少须指定以下可选参数之一。 :option:`-listfuncs <-l>` 与 " +":option:`-trace <-t>` 、 :option:`-count <-c>` 相互排斥。如果给出 :option:`--listfuncs" +" <-l>`,就再不会接受 :option:`--count <-c>` 和 :option:`--trace <-t>` ,反之亦然。" + +#: ../../library/trace.rst:61 +msgid "" +"Produce a set of annotated listing files upon program completion that shows " +"how many times each statement was executed. See also :option:`--coverdir " +"<-C>`, :option:`--file <-f>` and :option:`--no-report <-R>` below." +msgstr "" +"在程序完成时生成一组带有注解的列表文件,显示每个语句被执行的次数。 参见下面的 :option:`-coverdir <-C>` " +"、:option:`-file <-f>` 和 :option:`-no-report <-R>`。" + +#: ../../library/trace.rst:68 +msgid "Display lines as they are executed." +msgstr "执行时显示行。" + +#: ../../library/trace.rst:72 +msgid "Display the functions executed by running the program." +msgstr "显示程序运行时执行到的函数。" + +#: ../../library/trace.rst:76 +msgid "" +"Produce an annotated list from an earlier program run that used the " +":option:`--count <-c>` and :option:`--file <-f>` option. This does not " +"execute any code." +msgstr "由之前用了 :option:`--count` 和 :option:`--file` 运行的程序产生一个带有注解的报表。 不会执行代码。" + +#: ../../library/trace.rst:82 +msgid "Display the calling relationships exposed by running the program." +msgstr "显示程序运行时暴露出来的调用关系。" + +#: ../../library/trace.rst:85 +msgid "Modifiers" +msgstr "修饰器" + +#: ../../library/trace.rst:91 +msgid "" +"Name of a file to accumulate counts over several tracing runs. Should be " +"used with the :option:`--count <-c>` option." +msgstr "用于累计多次跟踪运行计数的文件名。应与 :option:`--count <-c>` 一起使用。" + +#: ../../library/trace.rst:96 +msgid "" +"Directory where the report files go. The coverage report for " +"``package.module`` is written to file " +":file:`{dir}/{package}/{module}.cover`." +msgstr "" +"报表文件的所在目录。``package.module`` 的覆盖率报表将被写入文件 " +":file:`{dir}/{package}/{module}.cover`。" + +#: ../../library/trace.rst:101 +msgid "" +"When generating annotated listings, mark lines which were not executed with " +"``>>>>>>``." +msgstr "生成带注解的报表时,用 ``>>>>>>`` 标记未执行的行。" + +#: ../../library/trace.rst:106 +msgid "" +"When using :option:`--count <-c>` or :option:`--report <-r>`, write a brief " +"summary to stdout for each file processed." +msgstr "" +"在用到 :option:`--count <-c>` 或 :option:`--report <-r>` 时,将每个文件的简短摘要写到 stdout。" + +#: ../../library/trace.rst:111 +msgid "" +"Do not generate annotated listings. This is useful if you intend to make " +"several runs with :option:`--count <-c>`, and then produce a single set of " +"annotated listings at the end." +msgstr "" +"不生成带注解的报表。如果打算用 :option:`--count <-c>` 执行多次运行,然后在最后产生一组带注解的报表,该选项就很有用。" + +#: ../../library/trace.rst:117 +msgid "" +"Prefix each line with the time since the program started. Only used while " +"tracing." +msgstr "在每一行前面加上时间,自程序运行算起。只在跟踪时有用。" + +#: ../../library/trace.rst:121 +msgid "Filters" +msgstr "过滤器" + +#: ../../library/trace.rst:123 +msgid "These options may be repeated multiple times." +msgstr "以下参数可重复多次。" + +#: ../../library/trace.rst:129 +msgid "" +"Ignore each of the given module names and its submodules (if it is a " +"package). The argument can be a list of names separated by a comma." +msgstr "忽略给出的模块名及其子模块(若为包)。参数可为逗号分隔的名称列表。" + +#: ../../library/trace.rst:134 +msgid "" +"Ignore all modules and packages in the named directory and subdirectories. " +"The argument can be a list of directories separated by :data:`os.pathsep`." +msgstr "忽略指定目录及其子目录下的所有模块和包。参数可为 :data:`os.pathsep` 分隔的目录列表。" + +#: ../../library/trace.rst:140 +msgid "Programmatic Interface" +msgstr "编程接口" + +#: ../../library/trace.rst:145 +msgid "" +"Create an object to trace execution of a single statement or expression. " +"All parameters are optional. *count* enables counting of line numbers. " +"*trace* enables line execution tracing. *countfuncs* enables listing of the" +" functions called during the run. *countcallers* enables call relationship " +"tracking. *ignoremods* is a list of modules or packages to ignore. " +"*ignoredirs* is a list of directories whose modules or packages should be " +"ignored. *infile* is the name of the file from which to read stored count " +"information. *outfile* is the name of the file in which to write updated " +"count information. *timing* enables a timestamp relative to when tracing " +"was started to be displayed." +msgstr "" +"创建一个对象来跟踪单个语句或表达式的执行。所有参数均为选填。 *count* 可对行号计数。 *trace* 启用单行执行跟踪。 " +"*countfuncs* 可列出运行过程中调用的函数。 *countcallers* 可跟踪调用关系。 *ignoremods* " +"是要忽略的模块或包的列表。*ignoredirs* 是要忽略的模块或包的目录列表。 *infile* 是个文件名,从该文件中读取存储的计数信息。 " +"*outfile* 是用来写入最新计数信息的文件名。 *timing* 可以显示相对于跟踪开始时间的时间戳。" + +#: ../../library/trace.rst:158 +msgid "" +"Execute the command and gather statistics from the execution with the " +"current tracing parameters. *cmd* must be a string or code object, suitable" +" for passing into :func:`exec`." +msgstr "执行命令,并根据当前跟踪参数从执行过程中收集统计数据。 *cmd* 必须为字符串或 code 对象,可供传入 :func:`exec`。" + +#: ../../library/trace.rst:164 +msgid "" +"Execute the command and gather statistics from the execution with the " +"current tracing parameters, in the defined global and local environments. " +"If not defined, *globals* and *locals* default to empty dictionaries." +msgstr "" +"在定义的全局和局部环境中,执行命令并收集当前跟踪参数下的执行统计数据。若没有定义 *globals* 和 *locals* ,则默认为空字典。" + +#: ../../library/trace.rst:171 +msgid "" +"Call *func* with the given arguments under control of the :class:`Trace` " +"object with the current tracing parameters." +msgstr "在 :class:`Trace` 对象的控制下,用给定的参数调用 *func*,并采用当前的跟踪参数。" + +#: ../../library/trace.rst:176 +msgid "" +"Return a :class:`CoverageResults` object that contains the cumulative " +"results of all previous calls to ``run``, ``runctx`` and ``runfunc`` for the" +" given :class:`Trace` instance. Does not reset the accumulated trace " +"results." +msgstr "" +"返回一个 :class:`CoverageResults` 对象,包含之前对指定 :class:`Trace` 实例调用 " +"``run``、``runctx`` 和 ``runfunc`` 的累积结果。 累积的跟踪结果不会重置。" + +#: ../../library/trace.rst:183 +msgid "" +"A container for coverage results, created by :meth:`Trace.results`. Should " +"not be created directly by the user." +msgstr "用于覆盖跟踪结果的容器,由 :meth:`Trace.results` 创建。用户不应直接去创建。" + +#: ../../library/trace.rst:188 +msgid "Merge in data from another :class:`CoverageResults` object." +msgstr "从另一个 :class:`CoverageResults` 对象中合并跟踪数据。" + +#: ../../library/trace.rst:192 +msgid "" +"Write coverage results. Set *show_missing* to show lines that had no hits." +" Set *summary* to include in the output the coverage summary per module. " +"*coverdir* specifies the directory into which the coverage result files will" +" be output. If ``None``, the results for each source file are placed in its" +" directory." +msgstr "" +"写入代码覆盖结果。设置 *show_missing* 可显示未命中的行。设置*summary* 可在输出中包含每个模块的覆盖率摘要信息。 " +"*coverdir* 可指定覆盖率结果文件的输出目录,为 ``None`` 则结果将置于源文件所在目录中。" + +#: ../../library/trace.rst:198 +msgid "A simple example demonstrating the use of the programmatic interface::" +msgstr "以下例子简单演示了编程接口的用法:" diff --git a/library/traceback.po b/library/traceback.po new file mode 100644 index 000000000..1514320f6 --- /dev/null +++ b/library/traceback.po @@ -0,0 +1,473 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) 2001-2023, Python Software Foundation +# This file is distributed under the same license as the Python package. +# FIRST AUTHOR , YEAR. +# +# Translators: +# nick <2330458484@qq.com>, 2019 +# Shengjing Zhu , 2019 +# shenjack <3695888@qq.com>, 2021 +# Freesand Leo , 2022 +# Rafael Fontenelle , 2023 +# +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: Python 3.9\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2023-12-22 20:17+0000\n" +"PO-Revision-Date: 2017-02-16 23:32+0000\n" +"Last-Translator: Rafael Fontenelle , 2023\n" +"Language-Team: Chinese (China) (https://app.transifex.com/python-doc/teams/5390/zh_CN/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: zh_CN\n" +"Plural-Forms: nplurals=1; plural=0;\n" + +#: ../../library/traceback.rst:2 +msgid ":mod:`traceback` --- Print or retrieve a stack traceback" +msgstr ":mod:`traceback` —— 打印或读取栈回溯信息" + +#: ../../library/traceback.rst:7 +msgid "**Source code:** :source:`Lib/traceback.py`" +msgstr "**源代码:** :source:`Lib/traceback.py`" + +#: ../../library/traceback.rst:11 +msgid "" +"This module provides a standard interface to extract, format and print stack" +" traces of Python programs. It exactly mimics the behavior of the Python " +"interpreter when it prints a stack trace. This is useful when you want to " +"print stack traces under program control, such as in a \"wrapper\" around " +"the interpreter." +msgstr "" +"该模块提供了一个标准接口来提取、格式化和打印 Python 程序的栈跟踪结果。它完全模仿Python " +"解释器在打印栈跟踪结果时的行为。当您想要在程序控制下打印栈跟踪结果时,例如在“封装”解释器时,这是非常有用的。" + +#: ../../library/traceback.rst:19 +msgid "" +"The module uses traceback objects --- this is the object type that is stored" +" in the :data:`sys.last_traceback` variable and returned as the third item " +"from :func:`sys.exc_info`." +msgstr "" +"这个模块使用 traceback 对象 —— 这是存储在 :data:`sys.last_traceback` 中的对象类型变量,并作为 " +":func:`sys.exc_info` 的第三项被返回。" + +#: ../../library/traceback.rst:23 +msgid "The module defines the following functions:" +msgstr "这个模块定义了以下函数:" + +#: ../../library/traceback.rst:28 +msgid "" +"Print up to *limit* stack trace entries from traceback object *tb* (starting" +" from the caller's frame) if *limit* is positive. Otherwise, print the last" +" ``abs(limit)`` entries. If *limit* is omitted or ``None``, all entries are" +" printed. If *file* is omitted or ``None``, the output goes to " +"``sys.stderr``; otherwise it should be an open file or file-like object to " +"receive the output." +msgstr "" +"如果*limit*是正整数,那么从 traceback 对象 \"tb\" 输出最高 *limit* 个(从调用函数开始的)栈的堆栈回溯‎条目‎;如果 " +"*limit* 是负数就输出 ``abs(limit)`` 个回溯条目;又如果 *limit* 被省略或者为 ``None`` " +",那么就会输出所有回溯条目。如果 *file* 被省略或为 ``None`` 那么就会输出至标准输出 ``sys.stderr`` " +"否则它应该是一个打开的文件或者文件类对象来接收输出" + +#: ../../library/traceback.rst:35 ../../library/traceback.rst:89 +msgid "Added negative *limit* support." +msgstr "添加了对负数值 *limit* 的支持" + +#: ../../library/traceback.rst:41 +msgid "" +"Print exception information and stack trace entries from traceback object " +"*tb* to *file*. This differs from :func:`print_tb` in the following ways:" +msgstr "打印回溯对象 *tb* 到 *file* 的异常信息和整个堆栈回溯。这和 :func:`print_tb` 比有以下方面不同:" + +#: ../../library/traceback.rst:45 +msgid "" +"if *tb* is not ``None``, it prints a header ``Traceback (most recent call " +"last):``" +msgstr "如果 *tb* 不为 ``None``,它将打印头部 ``Traceback (most recent call last):``" + +#: ../../library/traceback.rst:48 +msgid "it prints the exception *etype* and *value* after the stack trace" +msgstr "它将在输出完堆栈回溯后,输出异常中的 *etype* 和 *value* 信息" + +#: ../../library/traceback.rst:52 +msgid "" +"if *type(value)* is :exc:`SyntaxError` and *value* has the appropriate " +"format, it prints the line where the syntax error occurred with a caret " +"indicating the approximate position of the error." +msgstr "" +"如果 *type(value)* 为 :exc:`SyntaxError` 且 *value* " +"具有适当的格式,它会打印发生语法错误的行并用一个圆点来指明错误的大致位置。" + +#: ../../library/traceback.rst:56 +msgid "" +"The optional *limit* argument has the same meaning as for :func:`print_tb`. " +"If *chain* is true (the default), then chained exceptions (the " +":attr:`__cause__` or :attr:`__context__` attributes of the exception) will " +"be printed as well, like the interpreter itself does when printing an " +"unhandled exception." +msgstr "" +"可选的 *limit* 参数具有与 :func:`print_tb` 的相同含义。 如果 *chain* 为真值(默认),则链式异常(异常的 " +":attr:`__cause__` 或 :attr:`__context__` 属性)也将被打印出来,就像解释器本身在打印未处理的异常时一样。" + +#: ../../library/traceback.rst:62 ../../library/traceback.rst:143 +msgid "The *etype* argument is ignored and inferred from the type of *value*." +msgstr "*etype* 参数会被忽略并根据 *value* 推断出来。" + +#: ../../library/traceback.rst:68 +msgid "" +"This is a shorthand for ``print_exception(*sys.exc_info(), limit, file, " +"chain)``." +msgstr "这是 ``print_exception(*sys.exc_info(), limit, file, chain)`` 的简写。" + +#: ../../library/traceback.rst:74 +msgid "" +"This is a shorthand for ``print_exception(sys.last_type, sys.last_value, " +"sys.last_traceback, limit, file, chain)``. In general it will work only " +"after an exception has reached an interactive prompt (see " +":data:`sys.last_type`)." +msgstr "" +"这是 ``print_exception(sys.last_type, sys.last_value, sys.last_traceback, " +"limit, file, chain)`` 的简写。 通常它将只在异常到达交互提示之后才会起作用 (参见 :data:`sys.last_type`)。" + +#: ../../library/traceback.rst:82 +msgid "" +"Print up to *limit* stack trace entries (starting from the invocation point)" +" if *limit* is positive. Otherwise, print the last ``abs(limit)`` entries." +" If *limit* is omitted or ``None``, all entries are printed. The optional " +"*f* argument can be used to specify an alternate stack frame to start. The " +"optional *file* argument has the same meaning as for :func:`print_tb`." +msgstr "" +"如果 *limit* 为正数则打印至多 *limit* 个栈回溯条目(从发起调用点开始)。 在其他情况下,则打印最后 ``abs(limit)`` " +"个条目。 如果 *limit* 被省略或为 ``None``,则会打印所有条目。 可选的 *f* 参数可被用来指明一个用于开始的替代栈。 可选的 " +"*file* 参数具有与 :func:`print_tb` 的相同含义。" + +#: ../../library/traceback.rst:95 +msgid "" +"Return a :class:`StackSummary` object representing a list of \"pre-" +"processed\" stack trace entries extracted from the traceback object *tb*. " +"It is useful for alternate formatting of stack traces. The optional *limit*" +" argument has the same meaning as for :func:`print_tb`. A \"pre-processed\"" +" stack trace entry is a :class:`FrameSummary` object containing attributes " +":attr:`~FrameSummary.filename`, :attr:`~FrameSummary.lineno`, " +":attr:`~FrameSummary.name`, and :attr:`~FrameSummary.line` representing the " +"information that is usually printed for a stack trace. The " +":attr:`~FrameSummary.line` is a string with leading and trailing whitespace " +"stripped; if the source is not available it is ``None``." +msgstr "" +"返回一个 :class:`StackSummary` 对象来代表从回溯对象 *tb* 提取的 \"预处理\" 栈回溯条目列表。 " +"它适用于栈回溯的替代格式化。 可选的 *limit* 参数具有与 :func:`print_tb` 的相同含义。 \"预处理\" 栈回溯条目是一个 " +":class:`FrameSummary` 对象,其中包含代表通常为栈回溯打印的信息的 :attr:`~FrameSummary.filename`, " +":attr:`~FrameSummary.lineno`, :attr:`~FrameSummary.name` 和 " +":attr:`~FrameSummary.line` 等属性。 :attr:`~FrameSummary.line` " +"是一个去除了前导和末尾空白符的字符串;如果源代码不可用则它将为 ``None``。" + +#: ../../library/traceback.rst:109 +msgid "" +"Extract the raw traceback from the current stack frame. The return value " +"has the same format as for :func:`extract_tb`. The optional *f* and *limit*" +" arguments have the same meaning as for :func:`print_stack`." +msgstr "" +"从当前的栈帧提取原始回溯信息。 返回值具有与 :func:`extract_tb` 的相同格式。 可选的 *f* 和 *limit* 参数具有与 " +":func:`print_stack` 的相同含义。" + +#: ../../library/traceback.rst:116 +msgid "" +"Given a list of tuples or :class:`FrameSummary` objects as returned by " +":func:`extract_tb` or :func:`extract_stack`, return a list of strings ready " +"for printing. Each string in the resulting list corresponds to the item " +"with the same index in the argument list. Each string ends in a newline; " +"the strings may contain internal newlines as well, for those items whose " +"source text line is not ``None``." +msgstr "" +"给定一个由元组或如 :func:`extract_tb` 或 :func:`extract_stack` 所返回的 " +":class:`FrameSummary` 对象组成的列表,返回一个可打印的字符串列表。 结果列表中的每个字符串都对应于参数列表中具有相同索引号的条目。" +" 每个字符串以一个换行符结束;对于那些源文本行不为 ``None`` 的条目,字符串也可能包含内部换行符。" + +#: ../../library/traceback.rst:126 +msgid "" +"Format the exception part of a traceback. The arguments are the exception " +"type and value such as given by ``sys.last_type`` and ``sys.last_value``. " +"The return value is a list of strings, each ending in a newline. Normally, " +"the list contains a single string; however, for :exc:`SyntaxError` " +"exceptions, it contains several lines that (when printed) display detailed " +"information about where the syntax error occurred. The message indicating " +"which exception occurred is the always last string in the list." +msgstr "" + +#: ../../library/traceback.rst:137 +msgid "" +"Format a stack trace and the exception information. The arguments have the" +" same meaning as the corresponding arguments to :func:`print_exception`. " +"The return value is a list of strings, each ending in a newline and some " +"containing internal newlines. When these lines are concatenated and " +"printed, exactly the same text is printed as does :func:`print_exception`." +msgstr "" +"格式化一个栈跟踪和异常信息。 参数的含义与传给 :func:`print_exception` 的相应参数相同。 " +"返回值是一个字符串列表,每个字符串都以一个换行符结束且有些还包含内部换行符。 当这些行被拼接并打印时,打印的文本与 " +":func:`print_exception` 的完全相同。" + +#: ../../library/traceback.rst:149 +msgid "" +"This is like ``print_exc(limit)`` but returns a string instead of printing " +"to a file." +msgstr "这类似于 ``print_exc(limit)`` 但会返回一个字符串而不是打印到一个文件。" + +#: ../../library/traceback.rst:155 +msgid "A shorthand for ``format_list(extract_tb(tb, limit))``." +msgstr "是 ``format_list(extract_tb(tb, limit))`` 的简写形式。" + +#: ../../library/traceback.rst:160 +msgid "A shorthand for ``format_list(extract_stack(f, limit))``." +msgstr "是 ``format_list(extract_stack(f, limit))`` 的简写形式。" + +#: ../../library/traceback.rst:164 +msgid "" +"Clears the local variables of all the stack frames in a traceback *tb* by " +"calling the :meth:`clear` method of each frame object." +msgstr "通过调用每个帧对象的 :meth:`clear` 方法来清除回溯 *tb* 中所有栈帧的局部变量。" + +#: ../../library/traceback.rst:171 +msgid "" +"Walk a stack following ``f.f_back`` from the given frame, yielding the frame" +" and line number for each frame. If *f* is ``None``, the current stack is " +"used. This helper is used with :meth:`StackSummary.extract`." +msgstr "" +"从给定的帧开始访问 ``f.f_back`` 之后的栈,产生每一帧的帧和行号。 如果 *f* 为 ``None``,则会使用当前栈。 这个辅助函数要与 " +":meth:`StackSummary.extract` 一起使用。" + +#: ../../library/traceback.rst:179 +msgid "" +"Walk a traceback following ``tb_next`` yielding the frame and line number " +"for each frame. This helper is used with :meth:`StackSummary.extract`." +msgstr "" +"访问 ``tb_next`` 之后的回溯并产生每一帧的帧和行号。 这个辅助函数要与 :meth:`StackSummary.extract` 一起使用。" + +#: ../../library/traceback.rst:184 +msgid "The module also defines the following classes:" +msgstr "此模块还定义了以下的类:" + +#: ../../library/traceback.rst:187 +msgid ":class:`TracebackException` Objects" +msgstr ":class:`TracebackException` 对象" + +#: ../../library/traceback.rst:191 +msgid "" +":class:`TracebackException` objects are created from actual exceptions to " +"capture data for later printing in a lightweight fashion." +msgstr ":class:`TracebackException` 对象基于实际的异常创建通过轻量的方式捕获数据以便随后打印。" + +#: ../../library/traceback.rst:196 ../../library/traceback.rst:243 +msgid "" +"Capture an exception for later rendering. *limit*, *lookup_lines* and " +"*capture_locals* are as for the :class:`StackSummary` class." +msgstr "" +"捕获一个异常以便随后渲染。 *limit*, *lookup_lines* 和 *capture_locals* 的含义与 " +":class:`StackSummary` 类的相同。" + +#: ../../library/traceback.rst:199 ../../library/traceback.rst:246 +msgid "" +"Note that when locals are captured, they are also shown in the traceback." +msgstr "请注意当局部变量被捕获时,它们也会被显示在回溯中。" + +#: ../../library/traceback.rst:203 +msgid "A :class:`TracebackException` of the original ``__cause__``." +msgstr "原始 ``__cause__`` 的 :class:`TracebackException`。" + +#: ../../library/traceback.rst:207 +msgid "A :class:`TracebackException` of the original ``__context__``." +msgstr "原始 ``__context__`` 的 :class:`TracebackException`。" + +#: ../../library/traceback.rst:211 +msgid "The ``__suppress_context__`` value from the original exception." +msgstr "来自原始异常的 ``__suppress_context__``。" + +#: ../../library/traceback.rst:215 +msgid "A :class:`StackSummary` representing the traceback." +msgstr "代表回溯的 :class:`StackSummary`。" + +#: ../../library/traceback.rst:219 +msgid "The class of the original traceback." +msgstr "原始回溯的类。" + +#: ../../library/traceback.rst:223 +msgid "For syntax errors - the file name where the error occurred." +msgstr "针对语法错误 —— 错误发生所在的文件名。" + +#: ../../library/traceback.rst:227 +msgid "For syntax errors - the line number where the error occurred." +msgstr "针对语法错误 —— 错误发生所在的行号。" + +#: ../../library/traceback.rst:231 +msgid "For syntax errors - the text where the error occurred." +msgstr "针对语法错误 —— 错误发生所在的文本。" + +#: ../../library/traceback.rst:235 +msgid "For syntax errors - the offset into the text where the error occurred." +msgstr "针对语法错误 —— 错误发生所在的文本内部的偏移量。" + +#: ../../library/traceback.rst:239 +msgid "For syntax errors - the compiler error message." +msgstr "针对语法错误 —— 编译器错误消息。" + +#: ../../library/traceback.rst:250 +msgid "Format the exception." +msgstr "格式化异常。" + +#: ../../library/traceback.rst:252 +msgid "" +"If *chain* is not ``True``, ``__cause__`` and ``__context__`` will not be " +"formatted." +msgstr "如果 *chain* 不为 ``True``,则 ``__cause__`` 和 ``__context__`` 将不会被格式化。" + +#: ../../library/traceback.rst:255 +msgid "" +"The return value is a generator of strings, each ending in a newline and " +"some containing internal newlines. :func:`~traceback.print_exception` is a " +"wrapper around this method which just prints the lines to a file." +msgstr "" +"返回值是一个字符串的生成器,其中每个字符串都以换行符结束并且有些还会包含内部换行符。 " +":func:`~traceback.print_exception` 是此方法的一个包装器,它只是将这些行打印到一个文件。" + +#: ../../library/traceback.rst:259 ../../library/traceback.rst:273 +msgid "" +"The message indicating which exception occurred is always the last string in" +" the output." +msgstr "指明发生了哪种异常的消息总会是输出中的最后一个字符串。" + +#: ../../library/traceback.rst:264 +msgid "Format the exception part of the traceback." +msgstr "格式化回溯的异常部分。" + +#: ../../library/traceback.rst:266 +msgid "The return value is a generator of strings, each ending in a newline." +msgstr "返回值是一个字符串的生成器,每个字符串都以一个换行符结束。" + +#: ../../library/traceback.rst:268 +msgid "" +"Normally, the generator emits a single string; however, for " +":exc:`SyntaxError` exceptions, it emits several lines that (when printed) " +"display detailed information about where the syntax error occurred." +msgstr "" +"通常,生成器会发出单个字符串;不过,对于 :exc:`SyntaxError` 异常,它会发出(当打印时)显示有关语法错误发生在何处的详细信息的多个行。" + +#: ../../library/traceback.rst:278 +msgid ":class:`StackSummary` Objects" +msgstr ":class:`StackSummary` 对象" + +#: ../../library/traceback.rst:282 +msgid "" +":class:`StackSummary` objects represent a call stack ready for formatting." +msgstr "代表一个可被格式化的调用栈的 :class:`StackSummary` 对象。" + +#: ../../library/traceback.rst:288 +msgid "" +"Construct a :class:`StackSummary` object from a frame generator (such as is " +"returned by :func:`~traceback.walk_stack` or :func:`~traceback.walk_tb`)." +msgstr "" +"构造一个来自帧生成器的 :class:`StackSummary` 对象(如 :func:`~traceback.walk_stack` 或 " +":func:`~traceback.walk_tb` 所返回的一样)。" + +#: ../../library/traceback.rst:292 +msgid "" +"If *limit* is supplied, only this many frames are taken from *frame_gen*. If" +" *lookup_lines* is ``False``, the returned :class:`FrameSummary` objects " +"will not have read their lines in yet, making the cost of creating the " +":class:`StackSummary` cheaper (which may be valuable if it may not actually " +"get formatted). If *capture_locals* is ``True`` the local variables in each " +":class:`FrameSummary` are captured as object representations." +msgstr "" +"如果提供了 *limit*,则只从 *frame_gen* 提取指定数量的帧。 如果 *lookup_lines* 为 ``False``,则返回的 " +":class:`FrameSummary` 对象将不会读入它们的行,这使得创建 :class:`StackSummary` " +"的开销更低(如果它不会被实际格式化这就会很有价值)。 如果 *capture_locals* 为 ``True`` 则每个 " +":class:`FrameSummary` 中的局部变量会被捕获为对象表示形式。" + +#: ../../library/traceback.rst:302 +msgid "" +"Construct a :class:`StackSummary` object from a supplied list of " +":class:`FrameSummary` objects or old-style list of tuples. Each tuple " +"should be a 4-tuple with filename, lineno, name, line as the elements." +msgstr "" +"从所提供的 :class:`FrameSummary` 对象列表或旧式的元组列表构造一个 :class:`StackSummary` 对象。 " +"每个元组都应当是以文件、行号、名称和行为元素的 4 元组。" + +#: ../../library/traceback.rst:308 +msgid "" +"Returns a list of strings ready for printing. Each string in the resulting " +"list corresponds to a single frame from the stack. Each string ends in a " +"newline; the strings may contain internal newlines as well, for those items " +"with source text lines." +msgstr "" +"返回一个可打印的字符串列表。 结果列表中的每个字符串各自对应来自于栈的单独帧。 " +"每个字符串都以一个换行符结束;对于带有源文本行的条目来说,字符串还可能包含内部换行符。" + +#: ../../library/traceback.rst:313 +msgid "" +"For long sequences of the same frame and line, the first few repetitions are" +" shown, followed by a summary line stating the exact number of further " +"repetitions." +msgstr "对于同一帧与行的长序列,将显示前几个重复项,后面跟一个指明之后的实际重复次数的摘要行。" + +#: ../../library/traceback.rst:317 +msgid "Long sequences of repeated frames are now abbreviated." +msgstr "重复帧的长序列现在将被缩减。" + +#: ../../library/traceback.rst:322 +msgid ":class:`FrameSummary` Objects" +msgstr ":class:`FrameSummary` 对象" + +#: ../../library/traceback.rst:326 +msgid ":class:`FrameSummary` objects represent a single frame in a traceback." +msgstr ":class:`FrameSummary` 对象代表回溯中的一个单独帧。" + +#: ../../library/traceback.rst:330 +msgid "" +"Represent a single frame in the traceback or stack that is being formatted " +"or printed. It may optionally have a stringified version of the frames " +"locals included in it. If *lookup_line* is ``False``, the source code is not" +" looked up until the :class:`FrameSummary` has the " +":attr:`~FrameSummary.line` attribute accessed (which also happens when " +"casting it to a tuple). :attr:`~FrameSummary.line` may be directly provided," +" and will prevent line lookups happening at all. *locals* is an optional " +"local variable dictionary, and if supplied the variable representations are " +"stored in the summary for later display." +msgstr "" +"代表回溯或栈中被格式化或打印的一个单独帧。 它有时可能还带有包括在其中的帧局部变量的字符串化版本。 如果 *lookup_line* 为 " +"``False``,则不会查找源代码直到 :class:`FrameSummary` 已经访问了 :attr:`~FrameSummary.line` " +"属性(这还将发生在将其转换为元组时)。 :attr:`~FrameSummary.line` 可能会被直接提供,并将完全阻止行查找的发生。 " +"*locals* 是一个可选的局部变量字典,如果有提供的话这些变量的表示形式将被存储在摘要中以便随后显示。" + +#: ../../library/traceback.rst:343 +msgid "Traceback Examples" +msgstr "回溯示例" + +#: ../../library/traceback.rst:345 +msgid "" +"This simple example implements a basic read-eval-print loop, similar to (but" +" less useful than) the standard Python interactive interpreter loop. For a " +"more complete implementation of the interpreter loop, refer to the " +":mod:`code` module. ::" +msgstr "" +"这个简单示例是一个基本的读取-求值-打印循环,类似于(但实用性小于)标准 Python 交互式解释器循环。 对于解释器循环的更完整实现,请参阅 " +":mod:`code` 模块。 ::" + +#: ../../library/traceback.rst:367 +msgid "" +"The following example demonstrates the different ways to print and format " +"the exception and traceback:" +msgstr "下面的例子演示了打印和格式化异常与回溯的不同方式:" + +#: ../../library/traceback.rst:406 +msgid "The output for the example would look similar to this:" +msgstr "该示例的输出看起来像是这样的:" + +#: ../../library/traceback.rst:448 +msgid "" +"The following example shows the different ways to print and format the " +"stack::" +msgstr "下面的例子演示了打印和格式化栈的不同方式::" + +#: ../../library/traceback.rst:474 +msgid "This last example demonstrates the final few formatting functions:" +msgstr "最后这个例子演示了最后几个格式化函数:" diff --git a/library/tracemalloc.po b/library/tracemalloc.po new file mode 100644 index 000000000..c9daee253 --- /dev/null +++ b/library/tracemalloc.po @@ -0,0 +1,880 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) 2001-2024, Python Software Foundation +# This file is distributed under the same license as the Python package. +# FIRST AUTHOR , YEAR. +# +# Translators: +# Pan Felix , 2019 +# Alpha Du , 2019 +# ppcfish , 2019 +# zeroswan , 2022 +# Freesand Leo , 2023 +# Rafael Fontenelle , 2024 +# +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: Python 3.9\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2024-11-19 03:09+0000\n" +"PO-Revision-Date: 2017-02-16 23:32+0000\n" +"Last-Translator: Rafael Fontenelle , 2024\n" +"Language-Team: Chinese (China) (https://app.transifex.com/python-doc/teams/5390/zh_CN/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: zh_CN\n" +"Plural-Forms: nplurals=1; plural=0;\n" + +#: ../../library/tracemalloc.rst:2 +msgid ":mod:`tracemalloc` --- Trace memory allocations" +msgstr ":mod:`tracemalloc` --- 跟踪内存分配" + +#: ../../library/tracemalloc.rst:9 +msgid "**Source code:** :source:`Lib/tracemalloc.py`" +msgstr "**源代码:** :source:`Lib/tracemalloc.py`" + +#: ../../library/tracemalloc.rst:13 +msgid "" +"The tracemalloc module is a debug tool to trace memory blocks allocated by " +"Python. It provides the following information:" +msgstr "tracemalloc 模块是一个用于对 Python 已申请的内存块进行调试的工具。它能提供以下信息:" + +#: ../../library/tracemalloc.rst:16 +msgid "Traceback where an object was allocated" +msgstr "回溯对象分配内存的位置" + +#: ../../library/tracemalloc.rst:17 +msgid "" +"Statistics on allocated memory blocks per filename and per line number: " +"total size, number and average size of allocated memory blocks" +msgstr "按文件、按行统计python的内存块分配情况: 总大小、块的数量以及块平均大小。" + +#: ../../library/tracemalloc.rst:19 +msgid "Compute the differences between two snapshots to detect memory leaks" +msgstr "对比两个内存快照的差异,以便排查内存泄漏" + +#: ../../library/tracemalloc.rst:21 +msgid "" +"To trace most memory blocks allocated by Python, the module should be " +"started as early as possible by setting the :envvar:`PYTHONTRACEMALLOC` " +"environment variable to ``1``, or by using :option:`-X` ``tracemalloc`` " +"command line option. The :func:`tracemalloc.start` function can be called at" +" runtime to start tracing Python memory allocations." +msgstr "" +"要追踪 Python 所分配的大部分内存块,模块应当通过将 :envvar:`PYTHONTRACEMALLOC` 环境变量设置为 " +"``1``,或是通过使用 :option:`-X` ``tracemalloc`` 命令行选项来尽可能早地启动。 可以在运行时调用 " +":func:`tracemalloc.start` 函数来启动追踪 Python 内存分配。" + +#: ../../library/tracemalloc.rst:27 +msgid "" +"By default, a trace of an allocated memory block only stores the most recent" +" frame (1 frame). To store 25 frames at startup: set the " +":envvar:`PYTHONTRACEMALLOC` environment variable to ``25``, or use the " +":option:`-X` ``tracemalloc=25`` command line option." +msgstr "" +"在默认情况下,一个已分配内存块的追踪将只储存最新的帧 (1 帧)。 要要启动时储存 25 帧:将 :envvar:`PYTHONTRACEMALLOC`" +" 环境变量设为 ``25``,或使用 :option:`-X` ``tracemalloc=25`` 命令行选项。" + +#: ../../library/tracemalloc.rst:34 +msgid "Examples" +msgstr "例子" + +#: ../../library/tracemalloc.rst:37 +msgid "Display the top 10" +msgstr "显示前10项" + +#: ../../library/tracemalloc.rst:39 +msgid "Display the 10 files allocating the most memory::" +msgstr "显示内存分配最多的10个文件:" + +#: ../../library/tracemalloc.rst:55 ../../library/tracemalloc.rst:225 +msgid "Example of output of the Python test suite::" +msgstr "Python测试套件的输出示例:" + +#: ../../library/tracemalloc.rst:69 +msgid "" +"We can see that Python loaded ``4855 KiB`` data (bytecode and constants) " +"from modules and that the :mod:`collections` module allocated ``244 KiB`` to" +" build :class:`~collections.namedtuple` types." +msgstr "" +"我们可以看到 Python 从模块载入了 ``4855 KiB`` 数据(字节码和常量)并且 :mod:`collections` 模块分配了 " +"``244 KiB`` 来构建 :class:`~collections.namedtuple` 类型。" + +#: ../../library/tracemalloc.rst:73 ../../library/tracemalloc.rst:250 +msgid "See :meth:`Snapshot.statistics` for more options." +msgstr "更多选项,请参见 :meth:`Snapshot.statistics`" + +#: ../../library/tracemalloc.rst:77 +msgid "Compute differences" +msgstr "计算差异" + +#: ../../library/tracemalloc.rst:79 +msgid "Take two snapshots and display the differences::" +msgstr "获取两个快照并显示差异:" + +#: ../../library/tracemalloc.rst:95 +msgid "" +"Example of output before/after running some tests of the Python test suite::" +msgstr "运行 Python 测试套件的部分测试之前/之后的输出样例::" + +#: ../../library/tracemalloc.rst:109 +msgid "" +"We can see that Python has loaded ``8173 KiB`` of module data (bytecode and " +"constants), and that this is ``4428 KiB`` more than had been loaded before " +"the tests, when the previous snapshot was taken. Similarly, the " +":mod:`linecache` module has cached ``940 KiB`` of Python source code to " +"format tracebacks, all of it since the previous snapshot." +msgstr "" +"我们可以看到 Python 已载入了 ``8173 KiB`` 模块数据(字节码和常量),并且这比测试之前,即保存前一个快照时载入的数据多出了 " +"``4428 KiB``。 类似地, :mod:`linecache` 模块已缓存 ``940 KiB`` 的 Python " +"源代码至格式回溯中,即从前一个快照开始的所有数据。" + +#: ../../library/tracemalloc.rst:115 +msgid "" +"If the system has little free memory, snapshots can be written on disk using" +" the :meth:`Snapshot.dump` method to analyze the snapshot offline. Then use " +"the :meth:`Snapshot.load` method reload the snapshot." +msgstr "" +"如果系统空闲内存太少,可以使用 :meth:`Snapshot.dump` 方法将快照写入磁盘来离线分析快照。 然后使用 " +":meth:`Snapshot.load` 方法重载快照。" + +#: ../../library/tracemalloc.rst:121 +msgid "Get the traceback of a memory block" +msgstr "获取一个内存块的溯源" + +#: ../../library/tracemalloc.rst:123 +msgid "Code to display the traceback of the biggest memory block::" +msgstr "找出程序中最大内存块的溯源的代码::" + +#: ../../library/tracemalloc.rst:141 +msgid "" +"Example of output of the Python test suite (traceback limited to 25 " +"frames)::" +msgstr "一段Python单元测试的输出案例(限制最大25层堆栈)" + +#: ../../library/tracemalloc.rst:178 +msgid "" +"We can see that the most memory was allocated in the :mod:`importlib` module" +" to load data (bytecode and constants) from modules: ``870.1 KiB``. The " +"traceback is where the :mod:`importlib` loaded data most recently: on the " +"``import pdb`` line of the :mod:`doctest` module. The traceback may change " +"if a new module is loaded." +msgstr "" +"我们可以看到大部分内存都被分配到 :mod:`importlib` 模块中以便从模块中加载数据(字节码和常量): ``870.1 KiB``。 " +"回溯位置是 :mod:`importlib` 最近加载数据的地方:在 :mod:`doctest` 模块的 ``import pdb`` 行。 " +"如果加载了新模块则回溯可能发生改变。line of the. The traceback may change if a new module is " +"loaded." + +#: ../../library/tracemalloc.rst:186 +msgid "Pretty top" +msgstr "美化的 top" + +#: ../../library/tracemalloc.rst:188 +msgid "" +"Code to display the 10 lines allocating the most memory with a pretty " +"output, ignoring ```` and ```` files::" +msgstr "" +"使用美化输出显示分配最多内存的 10 行的代码,忽略 ```` 和 ````" +" 文件::" + +#: ../../library/tracemalloc.rst:253 +msgid "Record the current and peak size of all traced memory blocks" +msgstr "记录所有被追踪内存块的当前和峰值大小" + +#: ../../library/tracemalloc.rst:255 +msgid "" +"The following code computes two sums like ``0 + 1 + 2 + ...`` inefficiently," +" by creating a list of those numbers. This list consumes a lot of memory " +"temporarily. We can use :func:`get_traced_memory` and :func:`reset_peak` to " +"observe the small memory usage after the sum is computed as well as the peak" +" memory usage during the computations::" +msgstr "" +"以下代码通过创建一个包含数字的列表来低效率地计算总计值如 ``0 + 1 + 2 + ...``。 该列表会临时消耗大量内存。 我们可以使用 " +":func:`get_traced_memory` 和 :func:`reset_peak` " +"来观察计算总计值之后的内存使用减少以及计算过程中的内存使用峰值::" + +#: ../../library/tracemalloc.rst:280 ../../library/tracemalloc.rst:759 +msgid "Output::" +msgstr "输出::" + +#: ../../library/tracemalloc.rst:285 +msgid "" +"Using :func:`reset_peak` ensured we could accurately record the peak during " +"the computation of ``small_sum``, even though it is much smaller than the " +"overall peak size of memory blocks since the :func:`start` call. Without the" +" call to :func:`reset_peak`, ``second_peak`` would still be the peak from " +"the computation ``large_sum`` (that is, equal to ``first_peak``). In this " +"case, both peaks are much higher than the final memory usage, and which " +"suggests we could optimise (by removing the unnecessary call to " +":class:`list`, and writing ``sum(range(...))``)." +msgstr "" +"使用 :func:`reset_peak` 将确保我们能够准确地记录 ``small_sum`` 计算期间的峰值,即使它远小于从 " +":func:`start` 调用以来内存块的总体峰值大小。 如果没有对 :func:`reset_peak` 的调用,``second_peak`` " +"将仍为计算 ``large_sum`` 时的峰值 (也就是说,等于 ``first_peak``)。 " +"在这种情况下,两个峰值都将比最终的内存使用量高得多,这表明我们可以进行优化 (通过移除不必要的对 :class:`list` 的调用,并改写为 " +"``sum(range(...))``)。" + +#: ../../library/tracemalloc.rst:295 +msgid "API" +msgstr "API" + +#: ../../library/tracemalloc.rst:298 +msgid "Functions" +msgstr "函数" + +#: ../../library/tracemalloc.rst:302 +msgid "Clear traces of memory blocks allocated by Python." +msgstr "清空 Python 所分配的内存块的追踪数据。" + +#: ../../library/tracemalloc.rst:304 +msgid "See also :func:`stop`." +msgstr "另见 :func:`stop`." + +#: ../../library/tracemalloc.rst:309 +msgid "" +"Get the traceback where the Python object *obj* was allocated. Return a " +":class:`Traceback` instance, or ``None`` if the :mod:`tracemalloc` module is" +" not tracing memory allocations or did not trace the allocation of the " +"object." +msgstr "" +"获取 Python 对象 *obj* 被分配位置的回溯。 返回一个 :class:`Traceback` 实例,或者如果 " +":mod:`tracemalloc` 模块未追踪任何内存分配或未追踪该对象的分配则返回 ``None``。" + +#: ../../library/tracemalloc.rst:314 +msgid "See also :func:`gc.get_referrers` and :func:`sys.getsizeof` functions." +msgstr "另请参阅 :func:`gc.get_referrers` 和 :func:`sys.getsizeof` 函数。" + +#: ../../library/tracemalloc.rst:319 +msgid "Get the maximum number of frames stored in the traceback of a trace." +msgstr "获取保存在一个追踪的回溯中的最大帧数。" + +#: ../../library/tracemalloc.rst:321 +msgid "" +"The :mod:`tracemalloc` module must be tracing memory allocations to get the " +"limit, otherwise an exception is raised." +msgstr ":mod:`tracemalloc` 模块必须正在追踪内存分配才能获得该限制值,否则将引发异常。" + +#: ../../library/tracemalloc.rst:324 +msgid "The limit is set by the :func:`start` function." +msgstr "该限制是由 :func:`start` 函数设置的。" + +#: ../../library/tracemalloc.rst:329 +msgid "" +"Get the current size and peak size of memory blocks traced by the " +":mod:`tracemalloc` module as a tuple: ``(current: int, peak: int)``." +msgstr "" +"获取一个元组形式的由 :mod:`tracemalloc` 模块所追踪的内存块的当前大小和峰值大小: ``(current: int, peak: " +"int)``。" + +#: ../../library/tracemalloc.rst:335 +msgid "" +"Set the peak size of memory blocks traced by the :mod:`tracemalloc` module " +"to the current size." +msgstr "将由 :mod:`tracemalloc` 模块所追踪的内存块的峰值大小设置为当前大小。" + +#: ../../library/tracemalloc.rst:338 +msgid "" +"Do nothing if the :mod:`tracemalloc` module is not tracing memory " +"allocations." +msgstr "如果 :mod:`tracemalloc` 模块未在追踪内存分配则不做任何事。" + +#: ../../library/tracemalloc.rst:341 +msgid "" +"This function only modifies the recorded peak size, and does not modify or " +"clear any traces, unlike :func:`clear_traces`. Snapshots taken with " +":func:`take_snapshot` before a call to :func:`reset_peak` can be " +"meaningfully compared to snapshots taken after the call." +msgstr "" +"此函数只修改已记录的峰值大小,而不会修改或清空任何追踪,这不同于 :func:`clear_traces`。 在调用 " +":func:`reset_peak` 之前使用 :func:`take_snapshot` 保存的快照可以与调用之后保存的快照进行有意义的比较。" + +#: ../../library/tracemalloc.rst:346 +msgid "See also :func:`get_traced_memory`." +msgstr "另请参阅 :func:`get_traced_memory`。" + +#: ../../library/tracemalloc.rst:353 +msgid "" +"Get the memory usage in bytes of the :mod:`tracemalloc` module used to store" +" traces of memory blocks. Return an :class:`int`." +msgstr "获取 :mod:`tracemalloc` 模块用于保存内存块追踪所使用的内存字节数。 返回一个 :class:`int`。" + +#: ../../library/tracemalloc.rst:360 +msgid "" +"``True`` if the :mod:`tracemalloc` module is tracing Python memory " +"allocations, ``False`` otherwise." +msgstr "如果 :mod:`tracemalloc` 模块正在追踪 Python 内存分配则返回 ``True``,否则返回 ``False``。" + +#: ../../library/tracemalloc.rst:363 +msgid "See also :func:`start` and :func:`stop` functions." +msgstr "另请参阅 :func:`start` 和 :func:`stop` 函数。" + +#: ../../library/tracemalloc.rst:368 +msgid "" +"Start tracing Python memory allocations: install hooks on Python memory " +"allocators. Collected tracebacks of traces will be limited to *nframe* " +"frames. By default, a trace of a memory block only stores the most recent " +"frame: the limit is ``1``. *nframe* must be greater or equal to ``1``." +msgstr "" +"开始追踪 Python 内存分配:在 Python 内存分配器上安装钩子。 收集的追踪回溯将被限制为 *nframe* 个帧。 " +"在默认情况下,一个内存块的追踪将只保存最近的帧:即限制为 ``1``。 *nframe* 必须大于等于 ``1``。" + +#: ../../library/tracemalloc.rst:373 +msgid "" +"You can still read the original number of total frames that composed the " +"traceback by looking at the :attr:`Traceback.total_nframe` attribute." +msgstr "你仍然可以通过访问 :attr:`Traceback.total_nframe` 属性来读取组成回溯的原始总帧数。" + +#: ../../library/tracemalloc.rst:376 +msgid "" +"Storing more than ``1`` frame is only useful to compute statistics grouped " +"by ``'traceback'`` or to compute cumulative statistics: see the " +":meth:`Snapshot.compare_to` and :meth:`Snapshot.statistics` methods." +msgstr "" +"保存 ``1`` 帧以上仅适用于计算由 ``'traceback'`` 分组的统计数据或计算累积的统计数据:请参阅 " +":meth:`Snapshot.compare_to` 和 :meth:`Snapshot.statistics` 方法。" + +#: ../../library/tracemalloc.rst:380 +msgid "" +"Storing more frames increases the memory and CPU overhead of the " +":mod:`tracemalloc` module. Use the :func:`get_tracemalloc_memory` function " +"to measure how much memory is used by the :mod:`tracemalloc` module." +msgstr "" +"保存更多帧会增加 :mod:`tracemalloc` 模块的内存和 CPU 开销。 请使用 " +":func:`get_tracemalloc_memory` 函数来检测 :mod:`tracemalloc` 模块消耗了多少内存。" + +#: ../../library/tracemalloc.rst:384 +msgid "" +"The :envvar:`PYTHONTRACEMALLOC` environment variable " +"(``PYTHONTRACEMALLOC=NFRAME``) and the :option:`-X` ``tracemalloc=NFRAME`` " +"command line option can be used to start tracing at startup." +msgstr "" +":envvar:`PYTHONTRACEMALLOC` 环境变量 (``PYTHONTRACEMALLOC=NFRAME``) 和 " +":option:`-X` ``tracemalloc=NFRAME`` 命令行选项可被用来在启动时开始追踪。" + +#: ../../library/tracemalloc.rst:388 +msgid "" +"See also :func:`stop`, :func:`is_tracing` and :func:`get_traceback_limit` " +"functions." +msgstr "" +"另请参阅 :func:`stop`, :func:`is_tracing` 和 :func:`get_traceback_limit` 等函数。" + +#: ../../library/tracemalloc.rst:394 +msgid "" +"Stop tracing Python memory allocations: uninstall hooks on Python memory " +"allocators. Also clears all previously collected traces of memory blocks " +"allocated by Python." +msgstr "停止追踪 Python 内存分配:卸载 Python 内存分配器上的钩子。 并清空之前收集的所有由 Python 分配的内存块的追踪。" + +#: ../../library/tracemalloc.rst:398 +msgid "" +"Call :func:`take_snapshot` function to take a snapshot of traces before " +"clearing them." +msgstr "调用 :func:`take_snapshot` 函数在清空追踪之前保存它们的快照。" + +#: ../../library/tracemalloc.rst:401 +msgid "" +"See also :func:`start`, :func:`is_tracing` and :func:`clear_traces` " +"functions." +msgstr "另请参阅 :func:`start`, :func:`is_tracing` 和 :func:`clear_traces` 等函数。" + +#: ../../library/tracemalloc.rst:407 +msgid "" +"Take a snapshot of traces of memory blocks allocated by Python. Return a new" +" :class:`Snapshot` instance." +msgstr "保存一个由 Python 分配的内存块的追踪的快照。 返回一个新的 :class:`Snapshot` 实例。" + +#: ../../library/tracemalloc.rst:410 +msgid "" +"The snapshot does not include memory blocks allocated before the " +":mod:`tracemalloc` module started to trace memory allocations." +msgstr "该快照不包括在 :mod:`tracemalloc` 模块开始追踪内存分配之前分配的内存块。" + +#: ../../library/tracemalloc.rst:413 +msgid "" +"Tracebacks of traces are limited to :func:`get_traceback_limit` frames. Use " +"the *nframe* parameter of the :func:`start` function to store more frames." +msgstr "" +"追踪的回溯被限制为 :func:`get_traceback_limit` 个帧。 可使用 :func:`start` 函数的 *nframe* " +"形参来保存更多的帧。" + +#: ../../library/tracemalloc.rst:416 +msgid "" +"The :mod:`tracemalloc` module must be tracing memory allocations to take a " +"snapshot, see the :func:`start` function." +msgstr ":mod:`tracemalloc` 模块必须正在追踪内存分配才能保存快照,参见 :func:`start` 函数。" + +#: ../../library/tracemalloc.rst:419 +msgid "See also the :func:`get_object_traceback` function." +msgstr "另请参阅 :func:`get_object_traceback` 函数。" + +#: ../../library/tracemalloc.rst:423 +msgid "DomainFilter" +msgstr "域过滤器" + +#: ../../library/tracemalloc.rst:427 +msgid "Filter traces of memory blocks by their address space (domain)." +msgstr "按地址空间(域)来过滤内存块的追踪。" + +#: ../../library/tracemalloc.rst:433 +msgid "" +"If *inclusive* is ``True`` (include), match memory blocks allocated in the " +"address space :attr:`domain`." +msgstr "如果 *inclusive* 为 ``True`` (包括),则匹配分配于地址空间 :attr:`domain` 中的内存块。" + +#: ../../library/tracemalloc.rst:436 +msgid "" +"If *inclusive* is ``False`` (exclude), match memory blocks not allocated in " +"the address space :attr:`domain`." +msgstr "如果 *inclusive* 为 ``False`` (排除),则匹配不是分配于地址空间 :attr:`domain` 中的内存块。" + +#: ../../library/tracemalloc.rst:441 ../../library/tracemalloc.rst:693 +msgid "Address space of a memory block (``int``). Read-only property." +msgstr "内存块的地址空间 (``int``)。 只读的特征属性。 Read-only property." + +#: ../../library/tracemalloc.rst:445 +msgid "Filter" +msgstr "过滤器" + +#: ../../library/tracemalloc.rst:449 +msgid "Filter on traces of memory blocks." +msgstr "对内存块的跟踪进行筛选。" + +#: ../../library/tracemalloc.rst:451 +msgid "" +"See the :func:`fnmatch.fnmatch` function for the syntax of " +"*filename_pattern*. The ``'.pyc'`` file extension is replaced with " +"``'.py'``." +msgstr "" +"请参阅 :func:`fnmatch.fnmatch` 函数来了解 *filename_pattern* 的语法。 ``'.pyc'`` 文件扩展名以 " +"``'.py'`` 替换。" + +#: ../../library/tracemalloc.rst:455 +msgid "Examples:" +msgstr "示例:" + +#: ../../library/tracemalloc.rst:457 +msgid "" +"``Filter(True, subprocess.__file__)`` only includes traces of the " +":mod:`subprocess` module" +msgstr "``Filter(True, subprocess.__file__)`` 只包括 :mod:`subprocess` 模块的追踪数据" + +#: ../../library/tracemalloc.rst:459 +msgid "" +"``Filter(False, tracemalloc.__file__)`` excludes traces of the " +":mod:`tracemalloc` module" +msgstr "" +"``Filter(False, tracemalloc.__file__)`` 排除了 :mod:`tracemalloc` 模块的追踪数据" + +#: ../../library/tracemalloc.rst:461 +msgid "``Filter(False, \"\")`` excludes empty tracebacks" +msgstr "``Filter(False, \"\")`` 排除了空的回溯信息" + +#: ../../library/tracemalloc.rst:464 +msgid "The ``'.pyo'`` file extension is no longer replaced with ``'.py'``." +msgstr "``'.pyo'`` 文件扩展名不会再被替换为 ``'.py'``。" + +#: ../../library/tracemalloc.rst:467 ../../library/tracemalloc.rst:688 +msgid "Added the :attr:`domain` attribute." +msgstr "增加了 :attr:`domain` 属性。" + +#: ../../library/tracemalloc.rst:473 +msgid "Address space of a memory block (``int`` or ``None``)." +msgstr "内存块的地址空间 (``int`` 或 ``None``)。" + +#: ../../library/tracemalloc.rst:475 ../../library/tracemalloc.rst:695 +msgid "" +"tracemalloc uses the domain ``0`` to trace memory allocations made by " +"Python. C extensions can use other domains to trace other resources." +msgstr "" +"tracemalloc 使用 ``0`` 号域来追踪 Python 的内存分配操作。 C 扩展可以使用其他域来追踪其他资源。extensions can" +" use other domains to trace other resources." + +#: ../../library/tracemalloc.rst:480 +msgid "" +"If *inclusive* is ``True`` (include), only match memory blocks allocated in " +"a file with a name matching :attr:`filename_pattern` at line number " +":attr:`lineno`." +msgstr "" +"如果 *inclusive* 为 ``True`` (包括),则只匹配名称与 :attr:`filename_pattern` 匹配的文件在行号为 " +":attr:`lineno` 的位置上分配的内存块。" + +#: ../../library/tracemalloc.rst:484 +msgid "" +"If *inclusive* is ``False`` (exclude), ignore memory blocks allocated in a " +"file with a name matching :attr:`filename_pattern` at line number " +":attr:`lineno`." +msgstr "" +"如果 *inclusive* 为 ``False`` (排除),则忽略名称与 :attr:`filename_pattern` 匹配的文件在行号为 " +":attr:`lineno` 的位置上分配的内存块。" + +#: ../../library/tracemalloc.rst:490 +msgid "" +"Line number (``int``) of the filter. If *lineno* is ``None``, the filter " +"matches any line number." +msgstr "过滤器的行号 (``int``)。 如果 *lineno* 为 ``None``,则该过滤器将匹配任意行号。" + +#: ../../library/tracemalloc.rst:495 +msgid "Filename pattern of the filter (``str``). Read-only property." +msgstr "过滤器的文件名模型 (``str``)。 只读的特征属性。" + +#: ../../library/tracemalloc.rst:499 +msgid "" +"If *all_frames* is ``True``, all frames of the traceback are checked. If " +"*all_frames* is ``False``, only the most recent frame is checked." +msgstr "" +"如果 *all_frames* 为 ``True``,则回溯的所有帧都会被检查。 如果 *all_frames* 为 " +"``False``,则只有最近的帧会被检查。" + +#: ../../library/tracemalloc.rst:502 +msgid "" +"This attribute has no effect if the traceback limit is ``1``. See the " +":func:`get_traceback_limit` function and :attr:`Snapshot.traceback_limit` " +"attribute." +msgstr "" +"如果回溯限制为 ``1`` 则该属性将没有效果。 参见 :func:`get_traceback_limit` 函数和 " +":attr:`Snapshot.traceback_limit` 属性。" + +#: ../../library/tracemalloc.rst:508 +msgid "Frame" +msgstr "帧" + +#: ../../library/tracemalloc.rst:512 +msgid "Frame of a traceback." +msgstr "回溯的帧。" + +#: ../../library/tracemalloc.rst:514 +msgid "" +"The :class:`Traceback` class is a sequence of :class:`Frame` instances." +msgstr ":class:`Traceback` 类是一个 :class:`Frame` 实例的序列。instances." + +#: ../../library/tracemalloc.rst:518 +msgid "Filename (``str``)." +msgstr "文件名(``字符串``)" + +#: ../../library/tracemalloc.rst:522 +msgid "Line number (``int``)." +msgstr "行号(``整形``)" + +#: ../../library/tracemalloc.rst:526 +msgid "Snapshot" +msgstr "快照" + +#: ../../library/tracemalloc.rst:530 +msgid "Snapshot of traces of memory blocks allocated by Python." +msgstr "由 Python 分配的内存块的追踪的快照。" + +#: ../../library/tracemalloc.rst:532 +msgid "The :func:`take_snapshot` function creates a snapshot instance." +msgstr ":func:`take_snapshot` 函数创建一个快照实例。" + +#: ../../library/tracemalloc.rst:536 +msgid "" +"Compute the differences with an old snapshot. Get statistics as a sorted " +"list of :class:`StatisticDiff` instances grouped by *key_type*." +msgstr "" +"计算与某个旧快照的差异。 获取按 *key_type* 分组的 :class:`StatisticDiff` 实例的已排序列表形式的统计信息。" + +#: ../../library/tracemalloc.rst:539 +msgid "" +"See the :meth:`Snapshot.statistics` method for *key_type* and *cumulative* " +"parameters." +msgstr "请参阅 :meth:`Snapshot.statistics` 方法了解 *key_type* 和 *cumulative* 形参。" + +#: ../../library/tracemalloc.rst:542 +msgid "" +"The result is sorted from the biggest to the smallest by: absolute value of " +":attr:`StatisticDiff.size_diff`, :attr:`StatisticDiff.size`, absolute value " +"of :attr:`StatisticDiff.count_diff`, :attr:`Statistic.count` and then by " +":attr:`StatisticDiff.traceback`." +msgstr "" +"结果将按以下值从大到小排序: :attr:`StatisticDiff.size_diff` 的绝对值, " +":attr:`StatisticDiff.size`, :attr:`StatisticDiff.count_diff` 的绝对值, " +":attr:`Statistic.count` 然后是 :attr:`StatisticDiff.traceback`。" + +#: ../../library/tracemalloc.rst:550 +msgid "Write the snapshot into a file." +msgstr "将快照写入文件" + +#: ../../library/tracemalloc.rst:552 +msgid "Use :meth:`load` to reload the snapshot." +msgstr "使用 :meth:`load` 重载快照。" + +#: ../../library/tracemalloc.rst:557 +msgid "" +"Create a new :class:`Snapshot` instance with a filtered :attr:`traces` " +"sequence, *filters* is a list of :class:`DomainFilter` and :class:`Filter` " +"instances. If *filters* is an empty list, return a new :class:`Snapshot` " +"instance with a copy of the traces." +msgstr "" +"使用已过滤的 :attr:`traces` 序列新建一个 :class:`Snapshot` 实例,*filters* 是 " +":class:`DomainFilter` 和 :class:`Filter` 实例的列表。 如果 *filters* " +"为空列表,则返回一个包含追踪的副本的新的 :class:`Snapshot` 实例。" + +#: ../../library/tracemalloc.rst:562 +msgid "" +"All inclusive filters are applied at once, a trace is ignored if no " +"inclusive filters match it. A trace is ignored if at least one exclusive " +"filter matches it." +msgstr "包括的所有过滤器将同时被应用,一个追踪如果没有任何包括的过滤器与其匹配则会被忽略。 一个追踪如果有至少一个排除的过滤器与其匹配将会被忽略。" + +#: ../../library/tracemalloc.rst:566 +msgid ":class:`DomainFilter` instances are now also accepted in *filters*." +msgstr ":class:`DomainFilter` 实例现在同样被 *filters* 所接受。" + +#: ../../library/tracemalloc.rst:572 +msgid "Load a snapshot from a file." +msgstr "从文件载入快照。" + +#: ../../library/tracemalloc.rst:574 +msgid "See also :meth:`dump`." +msgstr "另见 :meth:`dump`." + +#: ../../library/tracemalloc.rst:579 +msgid "" +"Get statistics as a sorted list of :class:`Statistic` instances grouped by " +"*key_type*:" +msgstr "获取 :class:`Statistic` 信息列表,按 *key_type* 分组排序:" + +#: ../../library/tracemalloc.rst:583 +msgid "key_type" +msgstr "key_type" + +#: ../../library/tracemalloc.rst:583 +msgid "description" +msgstr "description" + +#: ../../library/tracemalloc.rst:585 +msgid "``'filename'``" +msgstr "``'filename'``" + +#: ../../library/tracemalloc.rst:585 +msgid "filename" +msgstr "文件名" + +#: ../../library/tracemalloc.rst:586 +msgid "``'lineno'``" +msgstr "``'lineno'``" + +#: ../../library/tracemalloc.rst:586 +msgid "filename and line number" +msgstr "文件名和行号" + +#: ../../library/tracemalloc.rst:587 +msgid "``'traceback'``" +msgstr "``'traceback'``" + +#: ../../library/tracemalloc.rst:587 +msgid "traceback" +msgstr "回溯" + +#: ../../library/tracemalloc.rst:590 +msgid "" +"If *cumulative* is ``True``, cumulate size and count of memory blocks of all" +" frames of the traceback of a trace, not only the most recent frame. The " +"cumulative mode can only be used with *key_type* equals to ``'filename'`` " +"and ``'lineno'``." +msgstr "" +"如果 *cumulative* 为 ``True``,则累积一个追踪的回溯的所有帧的内存块的大小和数量,而不只是最近的帧。 累积模式只能在 " +"*key_type* 等于 ``'filename'`` 和 ``'lineno'`` 的情况下使用。" + +#: ../../library/tracemalloc.rst:595 +msgid "" +"The result is sorted from the biggest to the smallest by: " +":attr:`Statistic.size`, :attr:`Statistic.count` and then by " +":attr:`Statistic.traceback`." +msgstr "" +"结果将按以下值从大到小排序: :attr:`Statistic.size`, :attr:`Statistic.count` 然后是 " +":attr:`Statistic.traceback`。" + +#: ../../library/tracemalloc.rst:602 +msgid "" +"Maximum number of frames stored in the traceback of :attr:`traces`: result " +"of the :func:`get_traceback_limit` when the snapshot was taken." +msgstr "" +"保存在 :attr:`traces` 的回溯中的帧的最大数量:当快照被保存时 :func:`get_traceback_limit` 的结果。" + +#: ../../library/tracemalloc.rst:607 +msgid "" +"Traces of all memory blocks allocated by Python: sequence of :class:`Trace` " +"instances." +msgstr "由 Python 分配的所有内存块的追踪: :class:`Trace` 实例的序列。" + +#: ../../library/tracemalloc.rst:610 +msgid "" +"The sequence has an undefined order. Use the :meth:`Snapshot.statistics` " +"method to get a sorted list of statistics." +msgstr "该序列的顺序是未定义的。 请使用 :meth:`Snapshot.statistics` 方法来获取统计信息的已排序列表。" + +#: ../../library/tracemalloc.rst:615 +msgid "Statistic" +msgstr "统计" + +#: ../../library/tracemalloc.rst:619 +msgid "Statistic on memory allocations." +msgstr "统计内存分配" + +#: ../../library/tracemalloc.rst:621 +msgid "" +":func:`Snapshot.statistics` returns a list of :class:`Statistic` instances." +msgstr ":func:`Snapshot.statistics` 返回 :class:`Statistic` 实例的列表。." + +#: ../../library/tracemalloc.rst:623 +msgid "See also the :class:`StatisticDiff` class." +msgstr "参见 :class:`StatisticDiff` 类。" + +#: ../../library/tracemalloc.rst:627 +msgid "Number of memory blocks (``int``)." +msgstr "内存块数(``整形``)。" + +#: ../../library/tracemalloc.rst:631 +msgid "Total size of memory blocks in bytes (``int``)." +msgstr "以字节数表示的内存块总计大小 (``int``)。" + +#: ../../library/tracemalloc.rst:635 ../../library/tracemalloc.rst:704 +msgid "" +"Traceback where the memory block was allocated, :class:`Traceback` instance." +msgstr "内存块分配位置的回溯,:class:`Traceback` 实例。" + +#: ../../library/tracemalloc.rst:640 +msgid "StatisticDiff" +msgstr "StatisticDiff" + +#: ../../library/tracemalloc.rst:644 +msgid "" +"Statistic difference on memory allocations between an old and a new " +":class:`Snapshot` instance." +msgstr "在旧的和新的 :class:`Snapshot` 实例之间内存分配上的统计差异。" + +#: ../../library/tracemalloc.rst:647 +msgid "" +":func:`Snapshot.compare_to` returns a list of :class:`StatisticDiff` " +"instances. See also the :class:`Statistic` class." +msgstr "" +":func:`Snapshot.compare_to` 返回一个 :class:`StatisticDiff` 实例的列表。 另请参看 " +":class:`Statistic` 类。" + +#: ../../library/tracemalloc.rst:652 +msgid "" +"Number of memory blocks in the new snapshot (``int``): ``0`` if the memory " +"blocks have been released in the new snapshot." +msgstr "新快照中的内存块数量 (``int``): 如果在新快照中内存块已被释放则为 ``0``。" + +#: ../../library/tracemalloc.rst:657 +msgid "" +"Difference of number of memory blocks between the old and the new snapshots " +"(``int``): ``0`` if the memory blocks have been allocated in the new " +"snapshot." +msgstr "在旧的新的快照之间内存块数量之差 (``int``): 如果在新快照中内存块已被分配则为 ``0``。" + +#: ../../library/tracemalloc.rst:663 +msgid "" +"Total size of memory blocks in bytes in the new snapshot (``int``): ``0`` if" +" the memory blocks have been released in the new snapshot." +msgstr "新快速中以字节数表示的内存块总计大小 (``int``): 如果在新快照中内存块已被释放则为 ``0``。" + +#: ../../library/tracemalloc.rst:668 +msgid "" +"Difference of total size of memory blocks in bytes between the old and the " +"new snapshots (``int``): ``0`` if the memory blocks have been allocated in " +"the new snapshot." +msgstr "在旧的新的快照之间以字节数表示的内存块总计大小之差 (``int``): 如果在新快照中内存块已被分配则为 ``0``。" + +#: ../../library/tracemalloc.rst:674 +msgid "" +"Traceback where the memory blocks were allocated, :class:`Traceback` " +"instance." +msgstr "内存块分配位置的回溯,:class:`Traceback` 实例。" + +#: ../../library/tracemalloc.rst:679 +msgid "Trace" +msgstr "跟踪" + +#: ../../library/tracemalloc.rst:683 +msgid "Trace of a memory block." +msgstr "一个内存块的跟踪信息。" + +#: ../../library/tracemalloc.rst:685 +msgid "" +"The :attr:`Snapshot.traces` attribute is a sequence of :class:`Trace` " +"instances." +msgstr ":attr:`Snapshot.traces` 属性是一个 :class:`Trace` 实例的序列。" + +#: ../../library/tracemalloc.rst:700 +msgid "Size of the memory block in bytes (``int``)." +msgstr "以字节数表示的内存块大小 (``int``)。" + +#: ../../library/tracemalloc.rst:709 +msgid "Traceback" +msgstr "回溯" + +#: ../../library/tracemalloc.rst:713 +msgid "" +"Sequence of :class:`Frame` instances sorted from the oldest frame to the " +"most recent frame." +msgstr ":class:`Frame` 实例的序列将按从最旧的帧到最新的帧排序。" + +#: ../../library/tracemalloc.rst:716 +msgid "" +"A traceback contains at least ``1`` frame. If the ``tracemalloc`` module " +"failed to get a frame, the filename ``\"\"`` at line number ``0`` " +"is used." +msgstr "" +"一个回溯包含至少 ``1`` 个帧。 如果 ``tracemalloc`` 模块无法获取帧,则会使用文件名 ``\"\"`` 和行号 " +"``0``。" + +#: ../../library/tracemalloc.rst:720 +msgid "" +"When a snapshot is taken, tracebacks of traces are limited to " +":func:`get_traceback_limit` frames. See the :func:`take_snapshot` function. " +"The original number of frames of the traceback is stored in the " +":attr:`Traceback.total_nframe` attribute. That allows to know if a traceback" +" has been truncated by the traceback limit." +msgstr "" +"当保存一个快照时,追踪的回溯被限制为 :func:`get_traceback_limit` 个帧。 参见 :func:`take_snapshot` " +"函数。 回溯的原始帧数存放在 :attr:`Traceback.total_nframe` 属性中。 这可以让人了解一个回溯是否因回溯限制而被截断。" + +#: ../../library/tracemalloc.rst:726 +msgid "" +"The :attr:`Trace.traceback` attribute is an instance of :class:`Traceback` " +"instance." +msgstr ":attr:`Trace.traceback` 属性是一个 :class:`Traceback` 对象的实例。" + +#: ../../library/tracemalloc.rst:729 +msgid "" +"Frames are now sorted from the oldest to the most recent, instead of most " +"recent to oldest." +msgstr "现在帧的排序是从最旧到最新,而不是从最新到最旧。" + +#: ../../library/tracemalloc.rst:734 +msgid "" +"Total number of frames that composed the traceback before truncation. This " +"attribute can be set to ``None`` if the information is not available." +msgstr "在截断之前组成回溯的总帧数。 如果此信息不可用则该属性可被设为 ``None``。" + +#: ../../library/tracemalloc.rst:738 +msgid "The :attr:`Traceback.total_nframe` attribute was added." +msgstr "增加了 :attr:`Traceback.total_nframe` 属性。" + +#: ../../library/tracemalloc.rst:743 +msgid "" +"Format the traceback as a list of lines. Use the :mod:`linecache` module to " +"retrieve lines from the source code. If *limit* is set, format the *limit* " +"most recent frames if *limit* is positive. Otherwise, format the " +"``abs(limit)`` oldest frames. If *most_recent_first* is ``True``, the order " +"of the formatted frames is reversed, returning the most recent frame first " +"instead of last." +msgstr "" +"将回溯格式化为由行组成的列表。 使用 :mod:`linecache` 模块从源代码提取行。 如果设置了 *limit*,则当 *limit* " +"为正值时将格式化 *limit* 个最新的帧。 在其他情况下,则格式化 ``abs(limit)`` 个最新的帧。 如果 " +"*most_recent_first* 为 ``True``,则将反转已格式化帧的顺序,首先返回最新的帧而不是最旧的。" + +#: ../../library/tracemalloc.rst:750 +msgid "" +"Similar to the :func:`traceback.format_tb` function, except that " +":meth:`.format` does not include newlines." +msgstr "类似于 :func:`traceback.format_tb` 函数,不同之处是 :meth:`.format` 不包括换行符。" + +#: ../../library/tracemalloc.rst:753 +msgid "Example::" +msgstr "示例::" diff --git a/library/tty.po b/library/tty.po new file mode 100644 index 000000000..cf0523c5f --- /dev/null +++ b/library/tty.po @@ -0,0 +1,71 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) 2001-2022, Python Software Foundation +# This file is distributed under the same license as the Python package. +# FIRST AUTHOR , YEAR. +# +# Translators: +# Alpha Du , 2019 +# +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: Python 3.9\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2022-11-04 14:34+0000\n" +"PO-Revision-Date: 2017-02-16 23:32+0000\n" +"Last-Translator: Alpha Du , 2019\n" +"Language-Team: Chinese (China) (https://www.transifex.com/python-doc/teams/5390/zh_CN/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: zh_CN\n" +"Plural-Forms: nplurals=1; plural=0;\n" + +#: ../../library/tty.rst:2 +msgid ":mod:`tty` --- Terminal control functions" +msgstr ":mod:`tty` --- 终端控制功能" + +#: ../../library/tty.rst:11 +msgid "**Source code:** :source:`Lib/tty.py`" +msgstr "**Source code:** :source:`Lib/tty.py`" + +#: ../../library/tty.rst:15 +msgid "" +"The :mod:`tty` module defines functions for putting the tty into cbreak and " +"raw modes." +msgstr ":mod:`tty` 模块定义了将 tty 放入 cbreak 和 raw 模式的函数。" + +#: ../../library/tty.rst:18 +msgid "" +"Because it requires the :mod:`termios` module, it will work only on Unix." +msgstr "因为它需要 :mod:`termios` 模块,所以只能在 Unix 上运行。" + +#: ../../library/tty.rst:20 +msgid "The :mod:`tty` module defines the following functions:" +msgstr ":mod:`tty` 模块定义了以下函数:" + +#: ../../library/tty.rst:25 +msgid "" +"Change the mode of the file descriptor *fd* to raw. If *when* is omitted, it" +" defaults to :const:`termios.TCSAFLUSH`, and is passed to " +":func:`termios.tcsetattr`." +msgstr "" +"将文件描述符 *fd* 的模式更改为 raw 。如果 *when* 被省略,则默认为 :const:`termios.TCSAFLUSH` ,并传递给 " +":func:`termios.tcsetattr` 。" + +#: ../../library/tty.rst:32 +msgid "" +"Change the mode of file descriptor *fd* to cbreak. If *when* is omitted, it " +"defaults to :const:`termios.TCSAFLUSH`, and is passed to " +":func:`termios.tcsetattr`." +msgstr "" +"将文件描述符 *fd* 的模式更改为 cbreak 。如果 *when* 被省略,则默认为 :const:`termios.TCSAFLUSH` " +",并传递给 :func:`termios.tcsetattr` 。" + +#: ../../library/tty.rst:39 +msgid "Module :mod:`termios`" +msgstr "模块 :mod:`termios`" + +#: ../../library/tty.rst:40 +msgid "Low-level terminal control interface." +msgstr "低级终端控制接口。" diff --git a/library/turtle.po b/library/turtle.po new file mode 100644 index 000000000..3c5f665a6 --- /dev/null +++ b/library/turtle.po @@ -0,0 +1,2750 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) 2001-2022, Python Software Foundation +# This file is distributed under the same license as the Python package. +# FIRST AUTHOR , YEAR. +# +# Translators: +# Fei Yin , 2018 +# Freesand Leo , 2021 +# +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: Python 3.9\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2022-11-04 14:34+0000\n" +"PO-Revision-Date: 2017-02-16 23:32+0000\n" +"Last-Translator: Freesand Leo , 2021\n" +"Language-Team: Chinese (China) (https://www.transifex.com/python-doc/teams/5390/zh_CN/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: zh_CN\n" +"Plural-Forms: nplurals=1; plural=0;\n" + +#: ../../library/turtle.rst:3 +msgid ":mod:`turtle` --- Turtle graphics" +msgstr ":mod:`turtle` --- 海龟绘图" + +#: ../../library/turtle.rst:10 +msgid "**Source code:** :source:`Lib/turtle.py`" +msgstr "**源码:** :source:`Lib/turtle.py`" + +#: ../../library/turtle.rst:20 +msgid "Introduction" +msgstr "概述" + +#: ../../library/turtle.rst:22 +msgid "" +"Turtle graphics is a popular way for introducing programming to kids. It " +"was part of the original Logo programming language developed by Wally " +"Feurzeig, Seymour Papert and Cynthia Solomon in 1967." +msgstr "" +"海龟绘图很适合用来引导孩子学习编程。 最初来自于 Wally Feurzeig, Seymour Papert 和 Cynthia Solomon 于 " +"1967 年所创造的 Logo 编程语言。" + +#: ../../library/turtle.rst:26 +msgid "" +"Imagine a robotic turtle starting at (0, 0) in the x-y plane. After an " +"``import turtle``, give it the command ``turtle.forward(15)``, and it moves " +"(on-screen!) 15 pixels in the direction it is facing, drawing a line as it " +"moves. Give it the command ``turtle.right(25)``, and it rotates in-place 25" +" degrees clockwise." +msgstr "" +"请想象绘图区有一只机器海龟,起始位置在 x-y 平面的 (0, 0) 点。先执行 ``import turtle``,再执行 " +"``turtle.forward(15)``,它将(在屏幕上)朝所面对的 x 轴正方向前进 15 像素,随着它的移动画出一条线段。再执行 " +"``turtle.right(25)``,它将原地右转 25 度。" + +#: ../../library/turtle.rst:33 +msgid "" +"Turtle can draw intricate shapes using programs that repeat simple moves." +msgstr "使用海龟绘图可以编写重复执行简单动作的程序画出精细复杂的形状。" + +#: ../../library/turtle.rst:41 +msgid "" +"By combining together these and similar commands, intricate shapes and " +"pictures can easily be drawn." +msgstr "通过组合使用此类命令,可以轻松地绘制出精美的形状和图案。" + +#: ../../library/turtle.rst:44 +msgid "" +"The :mod:`turtle` module is an extended reimplementation of the same-named " +"module from the Python standard distribution up to version Python 2.5." +msgstr ":mod:`turtle` 模块是基于 Python 标准发行版 2.5 以来的同名模块重新编写并进行了功能扩展。" + +#: ../../library/turtle.rst:47 +msgid "" +"It tries to keep the merits of the old turtle module and to be (nearly) 100%" +" compatible with it. This means in the first place to enable the learning " +"programmer to use all the commands, classes and methods interactively when " +"using the module from within IDLE run with the ``-n`` switch." +msgstr "" +"新模块尽量保持了原模块的特点,并且(几乎)100%与其兼容。这就意味着初学编程者能够以交互方式使用模块的所有命令、类和方法——运行 IDLE 时注意加 " +"``-n`` 参数。" + +#: ../../library/turtle.rst:52 +msgid "" +"The turtle module provides turtle graphics primitives, in both object-" +"oriented and procedure-oriented ways. Because it uses :mod:`tkinter` for " +"the underlying graphics, it needs a version of Python installed with Tk " +"support." +msgstr "" +"turtle 模块提供面向对象和面向过程两种形式的海龟绘图基本组件。由于它使用 :mod:`tkinter` 实现基本图形界面,因此需要安装了 Tk " +"支持的 Python 版本。" + +#: ../../library/turtle.rst:56 +msgid "The object-oriented interface uses essentially two+two classes:" +msgstr "面向对象的接口主要使用“2+2”个类:" + +#: ../../library/turtle.rst:58 +msgid "" +"The :class:`TurtleScreen` class defines graphics windows as a playground for" +" the drawing turtles. Its constructor needs a :class:`tkinter.Canvas` or a " +":class:`ScrolledCanvas` as argument. It should be used when :mod:`turtle` " +"is used as part of some application." +msgstr "" +":class:`TurtleScreen` 类定义图形窗口作为绘图海龟的运动场。它的构造器需要一个 :class:`tkinter.Canvas` 或 " +":class:`ScrolledCanvas` 作为参数。应在 :mod:`turtle` 作为某个程序的一部分的时候使用。" + +#: ../../library/turtle.rst:63 +msgid "" +"The function :func:`Screen` returns a singleton object of a " +":class:`TurtleScreen` subclass. This function should be used when " +":mod:`turtle` is used as a standalone tool for doing graphics. As a " +"singleton object, inheriting from its class is not possible." +msgstr "" +":func:`Screen` 函数返回一个 :class:`TurtleScreen` 子类的单例对象。此函数应在 :mod:`turtle` " +"作为独立绘图工具时使用。作为一个单例对象,其所属的类是不可被继承的。" + +#: ../../library/turtle.rst:68 +msgid "" +"All methods of TurtleScreen/Screen also exist as functions, i.e. as part of " +"the procedure-oriented interface." +msgstr "TurtleScreen/Screen 的所有方法还存在对应的函数,即作为面向过程的接口组成部分。" + +#: ../../library/turtle.rst:71 +msgid "" +":class:`RawTurtle` (alias: :class:`RawPen`) defines Turtle objects which " +"draw on a :class:`TurtleScreen`. Its constructor needs a Canvas, " +"ScrolledCanvas or TurtleScreen as argument, so the RawTurtle objects know " +"where to draw." +msgstr "" +":class:`RawTurtle` (别名: :class:`RawPen`) 类定义海龟对象在 :class:`TurtleScreen` " +"上绘图。它的构造器需要一个 Canvas, ScrolledCanvas 或 TurtleScreen 作为参数,以指定 RawTurtle " +"对象在哪里绘图。" + +#: ../../library/turtle.rst:75 +msgid "" +"Derived from RawTurtle is the subclass :class:`Turtle` (alias: " +":class:`Pen`), which draws on \"the\" :class:`Screen` instance which is " +"automatically created, if not already present." +msgstr "" +"从 RawTurtle 派生出子类 :class:`Turtle` (别名: :class:`Pen`),该类对象在 :class:`Screen` " +"实例上绘图,如果实例不存在则会自动创建。" + +#: ../../library/turtle.rst:79 +msgid "" +"All methods of RawTurtle/Turtle also exist as functions, i.e. part of the " +"procedure-oriented interface." +msgstr "RawTurtle/Turtle 的所有方法也存在对应的函数,即作为面向过程的接口组成部分。" + +#: ../../library/turtle.rst:82 +msgid "" +"The procedural interface provides functions which are derived from the " +"methods of the classes :class:`Screen` and :class:`Turtle`. They have the " +"same names as the corresponding methods. A screen object is automatically " +"created whenever a function derived from a Screen method is called. An " +"(unnamed) turtle object is automatically created whenever any of the " +"functions derived from a Turtle method is called." +msgstr "" +"过程式接口提供与 :class:`Screen` 和 :class:`Turtle` 类的方法相对应的函数。函数名与对应的方法名相同。当 Screen " +"类的方法对应函数被调用时会自动创建一个 Screen 对象。当 Turtle 类的方法对应函数被调用时会自动创建一个 (匿名的) Turtle 对象。" + +#: ../../library/turtle.rst:89 +msgid "" +"To use multiple turtles on a screen one has to use the object-oriented " +"interface." +msgstr "如果屏幕上需要有多个海龟,就必须使用面向对象的接口。" + +#: ../../library/turtle.rst:92 +msgid "" +"In the following documentation the argument list for functions is given. " +"Methods, of course, have the additional first argument *self* which is " +"omitted here." +msgstr "以下文档给出了函数的参数列表。对于方法来说当然还有额外的第一个参数 *self*,这里省略了。" + +#: ../../library/turtle.rst:98 +msgid "Overview of available Turtle and Screen methods" +msgstr "可用的 Turtle 和 Screen 方法概览" + +#: ../../library/turtle.rst:101 +msgid "Turtle methods" +msgstr "Turtle 方法" + +#: ../../library/turtle.rst:132 ../../library/turtle.rst:242 +msgid "Turtle motion" +msgstr "海龟动作" + +#: ../../library/turtle.rst:120 +msgid "Move and draw" +msgstr "移动和绘制" + +#: ../../library/turtle.rst:0 +msgid ":func:`forward` | :func:`fd`" +msgstr ":func:`forward` | :func:`fd` 前进" + +#: ../../library/turtle.rst:0 +msgid ":func:`backward` | :func:`bk` | :func:`back`" +msgstr ":func:`backward` | :func:`bk` | :func:`back` 后退" + +#: ../../library/turtle.rst:0 +msgid ":func:`right` | :func:`rt`" +msgstr ":func:`right` | :func:`rt` 右转" + +#: ../../library/turtle.rst:0 +msgid ":func:`left` | :func:`lt`" +msgstr ":func:`left` | :func:`lt` 左转" + +#: ../../library/turtle.rst:0 +msgid ":func:`goto` | :func:`setpos` | :func:`setposition`" +msgstr ":func:`goto` | :func:`setpos` | :func:`setposition` 前往/定位" + +#: ../../library/turtle.rst:0 +msgid ":func:`setx`" +msgstr ":func:`setx` 设置x坐标" + +#: ../../library/turtle.rst:0 +msgid ":func:`sety`" +msgstr ":func:`sety` 设置y坐标" + +#: ../../library/turtle.rst:0 +msgid ":func:`setheading` | :func:`seth`" +msgstr ":func:`setheading` | :func:`seth` 设置朝向" + +#: ../../library/turtle.rst:0 +msgid ":func:`home`" +msgstr ":func:`home` 返回原点" + +#: ../../library/turtle.rst:0 ../../library/turtle.rst:2463 +msgid ":func:`circle`" +msgstr ":func:`circle` 画圆" + +#: ../../library/turtle.rst:0 +msgid ":func:`dot`" +msgstr ":func:`dot` 画点" + +#: ../../library/turtle.rst:0 ../../library/turtle.rst:2441 +msgid ":func:`stamp`" +msgstr ":func:`stamp` 印章" + +#: ../../library/turtle.rst:0 +msgid ":func:`clearstamp`" +msgstr ":func:`clearstamp` 清除印章" + +#: ../../library/turtle.rst:0 +msgid ":func:`clearstamps`" +msgstr ":func:`clearstamps` 清除多个印章" + +#: ../../library/turtle.rst:0 +msgid ":func:`undo`" +msgstr ":func:`undo` 撤消" + +#: ../../library/turtle.rst:0 +msgid ":func:`speed`" +msgstr ":func:`speed` 速度" + +#: ../../library/turtle.rst:128 ../../library/turtle.rst:644 +msgid "Tell Turtle's state" +msgstr "获取海龟的状态" + +#: ../../library/turtle.rst:0 +msgid ":func:`position` | :func:`pos`" +msgstr ":func:`position` | :func:`pos` 位置" + +#: ../../library/turtle.rst:0 +msgid ":func:`towards`" +msgstr ":func:`towards` 目标方向" + +#: ../../library/turtle.rst:0 +msgid ":func:`xcor`" +msgstr ":func:`xcor` x坐标" + +#: ../../library/turtle.rst:0 +msgid ":func:`ycor`" +msgstr ":func:`ycor` y坐标" + +#: ../../library/turtle.rst:0 +msgid ":func:`heading`" +msgstr ":func:`heading` 朝向" + +#: ../../library/turtle.rst:0 +msgid ":func:`distance`" +msgstr ":func:`distance` 距离" + +#: ../../library/turtle.rst:132 +msgid "Setting and measurement" +msgstr "设置与度量单位" + +#: ../../library/turtle.rst:0 +msgid ":func:`degrees`" +msgstr ":func:`degrees` 角度" + +#: ../../library/turtle.rst:0 +msgid ":func:`radians`" +msgstr ":func:`radians` 弧度" + +#: ../../library/turtle.rst:155 ../../library/turtle.rst:795 +msgid "Pen control" +msgstr "画笔控制" + +#: ../../library/turtle.rst:140 ../../library/turtle.rst:798 +msgid "Drawing state" +msgstr "绘图状态" + +#: ../../library/turtle.rst:0 +msgid ":func:`pendown` | :func:`pd` | :func:`down`" +msgstr ":func:`pendown` | :func:`pd` | :func:`down` 画笔落下" + +#: ../../library/turtle.rst:0 +msgid ":func:`penup` | :func:`pu` | :func:`up`" +msgstr ":func:`penup` | :func:`pu` | :func:`up` 画笔抬起" + +#: ../../library/turtle.rst:0 +msgid ":func:`pensize` | :func:`width`" +msgstr ":func:`pensize` | :func:`width` 画笔粗细" + +#: ../../library/turtle.rst:0 +msgid ":func:`pen`" +msgstr ":func:`pen` 画笔" + +#: ../../library/turtle.rst:0 +msgid ":func:`isdown`" +msgstr ":func:`isdown` 画笔是否落下" + +#: ../../library/turtle.rst:145 ../../library/turtle.rst:890 +msgid "Color control" +msgstr "颜色控制" + +#: ../../library/turtle.rst:0 +msgid ":func:`color`" +msgstr ":func:`color` 颜色" + +#: ../../library/turtle.rst:0 +msgid ":func:`pencolor`" +msgstr ":func:`pencolor` 画笔颜色" + +#: ../../library/turtle.rst:0 +msgid ":func:`fillcolor`" +msgstr ":func:`fillcolor` 填充颜色" + +#: ../../library/turtle.rst:150 ../../library/turtle.rst:1022 +msgid "Filling" +msgstr "填充" + +#: ../../library/turtle.rst:0 +msgid ":func:`filling`" +msgstr ":func:`filling` 是否填充" + +#: ../../library/turtle.rst:0 +msgid ":func:`begin_fill`" +msgstr ":func:`begin_fill` 开始填充" + +#: ../../library/turtle.rst:0 +msgid ":func:`end_fill`" +msgstr ":func:`end_fill` 结束填充" + +#: ../../library/turtle.rst:155 ../../library/turtle.rst:1069 +msgid "More drawing control" +msgstr "更多绘图控制" + +#: ../../library/turtle.rst:0 +msgid ":func:`reset`" +msgstr ":func:`reset` 重置" + +#: ../../library/turtle.rst:0 +msgid ":func:`clear`" +msgstr ":func:`clear` 清空" + +#: ../../library/turtle.rst:0 +msgid ":func:`write`" +msgstr ":func:`write` 书写" + +#: ../../library/turtle.rst:172 ../../library/turtle.rst:1115 +msgid "Turtle state" +msgstr "海龟状态" + +#: ../../library/turtle.rst:161 ../../library/turtle.rst:1118 +msgid "Visibility" +msgstr "可见性" + +#: ../../library/turtle.rst:0 +msgid ":func:`showturtle` | :func:`st`" +msgstr ":func:`showturtle` | :func:`st` 显示海龟" + +#: ../../library/turtle.rst:0 +msgid ":func:`hideturtle` | :func:`ht`" +msgstr ":func:`hideturtle` | :func:`ht` 隐藏海龟" + +#: ../../library/turtle.rst:0 +msgid ":func:`isvisible`" +msgstr ":func:`isvisible` 是否可见" + +#: ../../library/turtle.rst:172 ../../library/turtle.rst:1157 +msgid "Appearance" +msgstr "外观" + +#: ../../library/turtle.rst:0 +msgid ":func:`shape`" +msgstr ":func:`shape` 形状" + +#: ../../library/turtle.rst:0 +msgid ":func:`resizemode`" +msgstr ":func:`resizemode` 大小调整模式" + +#: ../../library/turtle.rst:0 +msgid ":func:`shapesize` | :func:`turtlesize`" +msgstr ":func:`shapesize` | :func:`turtlesize` 形状大小" + +#: ../../library/turtle.rst:0 +msgid ":func:`shearfactor`" +msgstr ":func:`shearfactor` 剪切因子" + +#: ../../library/turtle.rst:0 +msgid ":func:`settiltangle`" +msgstr ":func:`settiltangle` 设置倾角" + +#: ../../library/turtle.rst:0 +msgid ":func:`tiltangle`" +msgstr ":func:`tiltangle` 倾角" + +#: ../../library/turtle.rst:0 +msgid ":func:`tilt`" +msgstr ":func:`tilt` 倾斜" + +#: ../../library/turtle.rst:0 +msgid ":func:`shapetransform`" +msgstr ":func:`shapetransform` 变形" + +#: ../../library/turtle.rst:0 +msgid ":func:`get_shapepoly`" +msgstr ":func:`get_shapepoly` 获取形状多边形" + +#: ../../library/turtle.rst:177 ../../library/turtle.rst:1362 +msgid "Using events" +msgstr "使用事件" + +#: ../../library/turtle.rst:0 ../../library/turtle.rst:2435 +msgid ":func:`onclick`" +msgstr ":func:`onclick` 当鼠标点击" + +#: ../../library/turtle.rst:0 +msgid ":func:`onrelease`" +msgstr ":func:`onrelease` 当鼠标释放" + +#: ../../library/turtle.rst:0 ../../library/turtle.rst:2418 +msgid ":func:`ondrag`" +msgstr ":func:`ondrag` 当鼠标拖动" + +#: ../../library/turtle.rst:188 ../../library/turtle.rst:1436 +msgid "Special Turtle methods" +msgstr "特殊海龟方法" + +#: ../../library/turtle.rst:0 +msgid ":func:`begin_poly`" +msgstr ":func:`begin_poly` 开始记录多边形" + +#: ../../library/turtle.rst:0 +msgid ":func:`end_poly`" +msgstr ":func:`end_poly` 结束记录多边形" + +#: ../../library/turtle.rst:0 +msgid ":func:`get_poly`" +msgstr ":func:`get_poly` 获取多边形" + +#: ../../library/turtle.rst:0 ../../library/turtle.rst:2454 +msgid ":func:`clone`" +msgstr ":func:`clone` 克隆" + +#: ../../library/turtle.rst:0 +msgid ":func:`getturtle` | :func:`getpen`" +msgstr ":func:`getturtle` | :func:`getpen` 获取海龟画笔" + +#: ../../library/turtle.rst:0 +msgid ":func:`getscreen`" +msgstr ":func:`getscreen` 获取屏幕" + +#: ../../library/turtle.rst:0 +msgid ":func:`setundobuffer`" +msgstr ":func:`setundobuffer` 设置撤消缓冲区" + +#: ../../library/turtle.rst:0 +msgid ":func:`undobufferentries`" +msgstr ":func:`undobufferentries` 撤消缓冲区条目数" + +#: ../../library/turtle.rst:191 +msgid "Methods of TurtleScreen/Screen" +msgstr "TurtleScreen/Screen 方法" + +#: ../../library/turtle.rst:199 ../../library/turtle.rst:1590 +msgid "Window control" +msgstr "窗口控制" + +#: ../../library/turtle.rst:0 +msgid ":func:`bgcolor`" +msgstr ":func:`bgcolor` 背景颜色" + +#: ../../library/turtle.rst:0 +msgid ":func:`bgpic`" +msgstr ":func:`bgpic` 背景图片" + +#: ../../library/turtle.rst:0 +msgid ":func:`clearscreen`" +msgstr ":func:`clearscreen`" + +#: ../../library/turtle.rst:0 +msgid ":func:`resetscreen`" +msgstr ":func:`resetscreen`" + +#: ../../library/turtle.rst:0 +msgid ":func:`screensize`" +msgstr ":func:`screensize` 屏幕大小" + +#: ../../library/turtle.rst:0 +msgid ":func:`setworldcoordinates`" +msgstr ":func:`setworldcoordinates` 设置世界坐标系" + +#: ../../library/turtle.rst:204 ../../library/turtle.rst:1713 +msgid "Animation control" +msgstr "动画控制" + +#: ../../library/turtle.rst:0 +msgid ":func:`delay`" +msgstr ":func:`delay` 延迟" + +#: ../../library/turtle.rst:0 +msgid ":func:`tracer`" +msgstr ":func:`tracer` 追踪" + +#: ../../library/turtle.rst:0 +msgid ":func:`update`" +msgstr ":func:`update` 更新" + +#: ../../library/turtle.rst:212 ../../library/turtle.rst:1766 +msgid "Using screen events" +msgstr "使用屏幕事件" + +#: ../../library/turtle.rst:0 +msgid ":func:`listen`" +msgstr ":func:`listen` 监听" + +#: ../../library/turtle.rst:0 +msgid ":func:`onkey` | :func:`onkeyrelease`" +msgstr ":func:`onkey` | :func:`onkeyrelease` 当键盘按下并释放" + +#: ../../library/turtle.rst:0 +msgid ":func:`onkeypress`" +msgstr ":func:`onkeypress` 当键盘按下" + +#: ../../library/turtle.rst:0 +msgid ":func:`onclick` | :func:`onscreenclick`" +msgstr ":func:`onclick` | :func:`onscreenclick` 当点击屏幕" + +#: ../../library/turtle.rst:0 +msgid ":func:`ontimer`" +msgstr ":func:`ontimer` 当达到定时" + +#: ../../library/turtle.rst:0 +msgid ":func:`mainloop` | :func:`done`" +msgstr ":func:`mainloop` | :func:`done` 主循环" + +#: ../../library/turtle.rst:222 ../../library/turtle.rst:1911 +msgid "Settings and special methods" +msgstr "设置与特殊方法" + +#: ../../library/turtle.rst:0 +msgid ":func:`mode`" +msgstr ":func:`mode` 模式" + +#: ../../library/turtle.rst:0 +msgid ":func:`colormode`" +msgstr ":func:`colormode` 颜色模式" + +#: ../../library/turtle.rst:0 +msgid ":func:`getcanvas`" +msgstr ":func:`getcanvas` 获取画布" + +#: ../../library/turtle.rst:0 +msgid ":func:`getshapes`" +msgstr ":func:`getshapes` 获取形状" + +#: ../../library/turtle.rst:0 +msgid ":func:`register_shape` | :func:`addshape`" +msgstr ":func:`register_shape` | :func:`addshape` 添加形状" + +#: ../../library/turtle.rst:0 +msgid ":func:`turtles`" +msgstr ":func:`turtles` 所有海龟" + +#: ../../library/turtle.rst:0 +msgid ":func:`window_height`" +msgstr ":func:`window_height` 窗口高度" + +#: ../../library/turtle.rst:0 +msgid ":func:`window_width`" +msgstr ":func:`window_width` 窗口宽度" + +#: ../../library/turtle.rst:226 ../../library/turtle.rst:1875 +msgid "Input methods" +msgstr "输入方法" + +#: ../../library/turtle.rst:0 +msgid ":func:`textinput`" +msgstr ":func:`textinput` 文本输入" + +#: ../../library/turtle.rst:0 +msgid ":func:`numinput`" +msgstr ":func:`numinput` 数字输入" + +#: ../../library/turtle.rst:233 +msgid "Methods specific to Screen" +msgstr "Screen 专有方法" + +#: ../../library/turtle.rst:0 +msgid ":func:`bye`" +msgstr ":func:`bye` 退出" + +#: ../../library/turtle.rst:0 +msgid ":func:`exitonclick`" +msgstr ":func:`exitonclick` 当点击时退出" + +#: ../../library/turtle.rst:0 +msgid ":func:`setup`" +msgstr ":func:`setup` 设置" + +#: ../../library/turtle.rst:0 +msgid ":func:`title`" +msgstr ":func:`title` 标题" + +#: ../../library/turtle.rst:236 +msgid "Methods of RawTurtle/Turtle and corresponding functions" +msgstr "RawTurtle/Turtle 方法和对应函数" + +#: ../../library/turtle.rst:238 +msgid "" +"Most of the examples in this section refer to a Turtle instance called " +"``turtle``." +msgstr "本节中的大部分示例都使用 Turtle 类的一个实例,命名为 ``turtle``。" + +#: ../../library/turtle.rst:0 ../../library/turtle.rst:0 +#: ../../library/turtle.rst:0 ../../library/turtle.rst:0 +#: ../../library/turtle.rst:0 ../../library/turtle.rst:0 +#: ../../library/turtle.rst:0 ../../library/turtle.rst:0 +#: ../../library/turtle.rst:0 ../../library/turtle.rst:0 +#: ../../library/turtle.rst:0 ../../library/turtle.rst:0 +#: ../../library/turtle.rst:0 ../../library/turtle.rst:0 +#: ../../library/turtle.rst:0 ../../library/turtle.rst:0 +#: ../../library/turtle.rst:0 ../../library/turtle.rst:0 +#: ../../library/turtle.rst:0 ../../library/turtle.rst:0 +#: ../../library/turtle.rst:0 ../../library/turtle.rst:0 +#: ../../library/turtle.rst:0 ../../library/turtle.rst:0 +#: ../../library/turtle.rst:0 ../../library/turtle.rst:0 +#: ../../library/turtle.rst:0 ../../library/turtle.rst:0 +#: ../../library/turtle.rst:0 ../../library/turtle.rst:0 +#: ../../library/turtle.rst:0 ../../library/turtle.rst:0 +#: ../../library/turtle.rst:0 ../../library/turtle.rst:0 +#: ../../library/turtle.rst:0 ../../library/turtle.rst:0 +#: ../../library/turtle.rst:0 ../../library/turtle.rst:0 +#: ../../library/turtle.rst:0 ../../library/turtle.rst:0 +#: ../../library/turtle.rst:0 ../../library/turtle.rst:0 +#: ../../library/turtle.rst:0 ../../library/turtle.rst:0 +#: ../../library/turtle.rst:0 ../../library/turtle.rst:0 +#: ../../library/turtle.rst:0 ../../library/turtle.rst:0 +#: ../../library/turtle.rst:0 ../../library/turtle.rst:0 +#: ../../library/turtle.rst:0 ../../library/turtle.rst:0 +#: ../../library/turtle.rst:0 +msgid "Parameters" +msgstr "形参" + +#: ../../library/turtle.rst:247 ../../library/turtle.rst:292 +#: ../../library/turtle.rst:317 ../../library/turtle.rst:377 +#: ../../library/turtle.rst:400 ../../library/turtle.rst:423 +msgid "a number (integer or float)" +msgstr "一个数值 (整型或浮点型)" + +#: ../../library/turtle.rst:249 +msgid "" +"Move the turtle forward by the specified *distance*, in the direction the " +"turtle is headed." +msgstr "海龟前进 *distance* 指定的距离,方向为海龟的朝向。" + +#: ../../library/turtle.rst:269 ../../library/turtle.rst:473 +#: ../../library/turtle.rst:748 ../../library/turtle.rst:1256 +#: ../../library/turtle.rst:1275 +msgid "a number" +msgstr "一个数值" + +#: ../../library/turtle.rst:271 +msgid "" +"Move the turtle backward by *distance*, opposite to the direction the turtle" +" is headed. Do not change the turtle's heading." +msgstr "海龟后退 *distance* 指定的距离,方向与海龟的朝向相反。不改变海龟的朝向。" + +#: ../../library/turtle.rst:294 +msgid "" +"Turn turtle right by *angle* units. (Units are by default degrees, but can " +"be set via the :func:`degrees` and :func:`radians` functions.) Angle " +"orientation depends on the turtle mode, see :func:`mode`." +msgstr "" +"海龟右转 *angle* 个单位。(单位默认为角度,但可通过 :func:`degrees` 和 :func:`radians` 函数改变设置。) " +"角度的正负由海龟模式确定,参见 :func:`mode`。" + +#: ../../library/turtle.rst:319 +msgid "" +"Turn turtle left by *angle* units. (Units are by default degrees, but can " +"be set via the :func:`degrees` and :func:`radians` functions.) Angle " +"orientation depends on the turtle mode, see :func:`mode`." +msgstr "" +"海龟左转 *angle* 个单位。(单位默认为角度,但可通过 :func:`degrees` 和 :func:`radians` 函数改变设置。) " +"角度的正负由海龟模式确定,参见 :func:`mode`。" + +#: ../../library/turtle.rst:343 +msgid "a number or a pair/vector of numbers" +msgstr "一个数值或数值对/向量" + +#: ../../library/turtle.rst:344 +msgid "a number or ``None``" +msgstr "一个数值或 ``None``" + +#: ../../library/turtle.rst:346 +msgid "" +"If *y* is ``None``, *x* must be a pair of coordinates or a :class:`Vec2D` " +"(e.g. as returned by :func:`pos`)." +msgstr "" +"如果 *y* 为 ``None``,*x* 应为一个表示坐标的数值对或 :class:`Vec2D` 类对象 (例如 :func:`pos` " +"返回的对象)." + +#: ../../library/turtle.rst:349 +msgid "" +"Move turtle to an absolute position. If the pen is down, draw line. Do not" +" change the turtle's orientation." +msgstr "海龟移动到一个绝对坐标。如果画笔已落下将会画线。不改变海龟的朝向。" + +#: ../../library/turtle.rst:379 +msgid "" +"Set the turtle's first coordinate to *x*, leave second coordinate unchanged." +msgstr "设置海龟的横坐标为 *x*,纵坐标保持不变。" + +#: ../../library/turtle.rst:402 +msgid "" +"Set the turtle's second coordinate to *y*, leave first coordinate unchanged." +msgstr "设置海龟的纵坐标为 *y*,横坐标保持不变。" + +#: ../../library/turtle.rst:425 +msgid "" +"Set the orientation of the turtle to *to_angle*. Here are some common " +"directions in degrees:" +msgstr "设置海龟的朝向为 *to_angle*。以下是以角度表示的几个常用方向:" + +#: ../../library/turtle.rst:429 +msgid "standard mode" +msgstr "标准模式" + +#: ../../library/turtle.rst:429 +msgid "logo mode" +msgstr "logo 模式" + +#: ../../library/turtle.rst:431 +msgid "0 - east" +msgstr "0 - 东" + +#: ../../library/turtle.rst:431 +msgid "0 - north" +msgstr "0 - 北" + +#: ../../library/turtle.rst:432 +msgid "90 - north" +msgstr "90 - 北" + +#: ../../library/turtle.rst:432 +msgid "90 - east" +msgstr "90 - 东" + +#: ../../library/turtle.rst:433 +msgid "180 - west" +msgstr "180 - 西" + +#: ../../library/turtle.rst:433 +msgid "180 - south" +msgstr "180 - 南" + +#: ../../library/turtle.rst:434 +msgid "270 - south" +msgstr "270 - 南" + +#: ../../library/turtle.rst:434 +msgid "270 - west" +msgstr "270 - 西" + +#: ../../library/turtle.rst:447 +msgid "" +"Move turtle to the origin -- coordinates (0,0) -- and set its heading to its" +" start-orientation (which depends on the mode, see :func:`mode`)." +msgstr "海龟移至初始坐标 (0,0),并设置朝向为初始方向 (由海龟模式确定,参见 :func:`mode`)。" + +#: ../../library/turtle.rst:474 +msgid "a number (or ``None``)" +msgstr "一个数值 (或 ``None``)" + +#: ../../library/turtle.rst:475 ../../library/turtle.rst:569 +msgid "an integer (or ``None``)" +msgstr "一个整型数 (或 ``None``)" + +#: ../../library/turtle.rst:477 +msgid "" +"Draw a circle with given *radius*. The center is *radius* units left of the" +" turtle; *extent* -- an angle -- determines which part of the circle is " +"drawn. If *extent* is not given, draw the entire circle. If *extent* is " +"not a full circle, one endpoint of the arc is the current pen position. " +"Draw the arc in counterclockwise direction if *radius* is positive, " +"otherwise in clockwise direction. Finally the direction of the turtle is " +"changed by the amount of *extent*." +msgstr "" +"绘制一个 *radius* 指定半径的圆。圆心在海龟左边 *radius* 个单位;*extent* 为一个夹角,用来决定绘制圆的一部分。如未指定 " +"*extent*则绘制整个圆。如果 *extent* 不是完整圆周,则以当前画笔位置为一个端点绘制圆弧。如果 *radius* " +"为正值则朝逆时针方向绘制圆弧,否则朝顺时针方向。最终海龟的朝向会依据 *extent* 的值而改变。" + +#: ../../library/turtle.rst:485 +msgid "" +"As the circle is approximated by an inscribed regular polygon, *steps* " +"determines the number of steps to use. If not given, it will be calculated " +"automatically. May be used to draw regular polygons." +msgstr "圆实际是以其内切正多边形来近似表示的,其边的数量由 *steps* 指定。如果未指定边数则会自动确定。此方法也可用来绘制正多边形。" + +#: ../../library/turtle.rst:511 +msgid "an integer >= 1 (if given)" +msgstr "一个整型数 >= 1 (如果指定)" + +#: ../../library/turtle.rst:512 +msgid "a colorstring or a numeric color tuple" +msgstr "一个颜色字符串或颜色数值元组" + +#: ../../library/turtle.rst:514 +msgid "" +"Draw a circular dot with diameter *size*, using *color*. If *size* is not " +"given, the maximum of pensize+4 and 2*pensize is used." +msgstr "" +"绘制一个直径为 *size*,颜色为 *color* 的圆点。如果 *size* 未指定,则直径取 pensize+4 和 2*pensize " +"中的较大值。" + +#: ../../library/turtle.rst:532 +msgid "" +"Stamp a copy of the turtle shape onto the canvas at the current turtle " +"position. Return a stamp_id for that stamp, which can be used to delete it " +"by calling ``clearstamp(stamp_id)``." +msgstr "" +"在海龟当前位置印制一个海龟形状。返回该印章的 stamp_id,印章可以通过调用 ``clearstamp(stamp_id)`` 来删除。" + +#: ../../library/turtle.rst:547 +msgid "an integer, must be return value of previous :func:`stamp` call" +msgstr "一个整型数,必须是之前 :func:`stamp` 调用的返回值" + +#: ../../library/turtle.rst:550 +msgid "Delete stamp with given *stampid*." +msgstr "删除 *stampid* 指定的印章。" + +#: ../../library/turtle.rst:571 +msgid "" +"Delete all or first/last *n* of turtle's stamps. If *n* is ``None``, delete" +" all stamps, if *n* > 0 delete first *n* stamps, else if *n* < 0 delete last" +" *n* stamps." +msgstr "" +"删除全部或前/后 *n* 个海龟印章。如果 *n* 为 ``None`` 则删除全部印章,如果 *n* > 0 则删除前 *n* 个印章,否则如果 " +"*n* < 0 则删除后 *n* 个印章。" + +#: ../../library/turtle.rst:594 +msgid "" +"Undo (repeatedly) the last turtle action(s). Number of available undo " +"actions is determined by the size of the undobuffer." +msgstr "撤消 (或连续撤消) 最近的一个 (或多个) 海龟动作。可撤消的次数由撤消缓冲区的大小决定。" + +#: ../../library/turtle.rst:609 +msgid "an integer in the range 0..10 or a speedstring (see below)" +msgstr "一个 0..10 范围内的整型数或速度字符串 (见下)" + +#: ../../library/turtle.rst:611 +msgid "" +"Set the turtle's speed to an integer value in the range 0..10. If no " +"argument is given, return current speed." +msgstr "设置海龟移动的速度为 0..10 表示的整型数值。如未指定参数则返回当前速度。" + +#: ../../library/turtle.rst:614 +msgid "" +"If input is a number greater than 10 or smaller than 0.5, speed is set to 0." +" Speedstrings are mapped to speedvalues as follows:" +msgstr "如果输入数值大于 10 或小于 0.5 则速度设为 0。速度字符串与速度值的对应关系如下:" + +#: ../../library/turtle.rst:617 +msgid "\"fastest\": 0" +msgstr "\"fastest\": 0 最快" + +#: ../../library/turtle.rst:618 +msgid "\"fast\": 10" +msgstr "\"fast\": 10 快" + +#: ../../library/turtle.rst:619 +msgid "\"normal\": 6" +msgstr "\"normal\": 6 正常" + +#: ../../library/turtle.rst:620 +msgid "\"slow\": 3" +msgstr "\"slow\": 3 慢" + +#: ../../library/turtle.rst:621 +msgid "\"slowest\": 1" +msgstr "\"slowest\": 1 最慢" + +#: ../../library/turtle.rst:623 +msgid "" +"Speeds from 1 to 10 enforce increasingly faster animation of line drawing " +"and turtle turning." +msgstr "速度值从 1 到 10,画线和海龟转向的动画效果逐级加快。" + +#: ../../library/turtle.rst:626 +msgid "" +"Attention: *speed* = 0 means that *no* animation takes place. forward/back " +"makes turtle jump and likewise left/right make the turtle turn instantly." +msgstr "" +"注意: *speed* = 0 表示 *没有* 动画效果。forward/back 将使海龟向前/向后跳跃,同样的 left/right " +"将使海龟立即改变朝向。" + +#: ../../library/turtle.rst:649 +msgid "" +"Return the turtle's current location (x,y) (as a :class:`Vec2D` vector)." +msgstr "返回海龟当前的坐标 (x,y) (为 :class:`Vec2D` 矢量类对象)。" + +#: ../../library/turtle.rst:660 ../../library/turtle.rst:723 +msgid "a number or a pair/vector of numbers or a turtle instance" +msgstr "一个数值或数值对/矢量,或一个海龟实例" + +#: ../../library/turtle.rst:661 ../../library/turtle.rst:724 +msgid "a number if *x* is a number, else ``None``" +msgstr "一个数值——如果 *x* 是一个数值,否则为 ``None``" + +#: ../../library/turtle.rst:663 +msgid "" +"Return the angle between the line from turtle position to position specified" +" by (x,y), the vector or the other turtle. This depends on the turtle's " +"start orientation which depends on the mode - \"standard\"/\"world\" or " +"\"logo\"." +msgstr "" +"返回从海龟位置到由 (x,y)、矢量或另一海龟所确定位置的连线的夹角。 此数值依赖于海龟的初始朝向,这又取决于 " +"\"standard\"/\"world\" 或 \"logo\" 模式设置。" + +#: ../../library/turtle.rst:677 +msgid "Return the turtle's x coordinate." +msgstr "返回海龟的 x 坐标。" + +#: ../../library/turtle.rst:693 +msgid "Return the turtle's y coordinate." +msgstr "返回海龟的 y 坐标。" + +#: ../../library/turtle.rst:709 +msgid "" +"Return the turtle's current heading (value depends on the turtle mode, see " +":func:`mode`)." +msgstr "返回海龟当前的朝向 (数值依赖于海龟模式参见 :func:`mode`)。" + +#: ../../library/turtle.rst:726 +msgid "" +"Return the distance from the turtle to (x,y), the given vector, or the given" +" other turtle, in turtle step units." +msgstr "返回从海龟位置到由 (x,y),适量或另一海龟对应位置的单位距离。" + +#: ../../library/turtle.rst:744 +msgid "Settings for measurement" +msgstr "度量单位设置" + +#: ../../library/turtle.rst:750 +msgid "" +"Set angle measurement units, i.e. set number of \"degrees\" for a full " +"circle. Default value is 360 degrees." +msgstr "设置角度的度量单位,即设置一个圆周为多少 \"度\"。默认值为 360 度。" + +#: ../../library/turtle.rst:773 +msgid "" +"Set the angle measurement units to radians. Equivalent to " +"``degrees(2*math.pi)``." +msgstr "设置角度的度量单位为弧度。其值等于 ``degrees(2*math.pi)``。" + +#: ../../library/turtle.rst:804 +msgid "Pull the pen down -- drawing when moving." +msgstr "画笔落下 -- 移动时将画线。" + +#: ../../library/turtle.rst:811 +msgid "Pull the pen up -- no drawing when moving." +msgstr "画笔抬起 -- 移动时不画线。" + +#: ../../library/turtle.rst:817 +msgid "a positive number" +msgstr "一个正数值" + +#: ../../library/turtle.rst:819 +msgid "" +"Set the line thickness to *width* or return it. If resizemode is set to " +"\"auto\" and turtleshape is a polygon, that polygon is drawn with the same " +"line thickness. If no argument is given, the current pensize is returned." +msgstr "" +"设置线条的粗细为 *width* 或返回该值。如果 resizemode 设为 \"auto\" 并且 turtleshape " +"为多边形,该多边形也以同样组细的线条绘制。如未指定参数,则返回当前的 pensize。" + +#: ../../library/turtle.rst:833 +msgid "a dictionary with some or all of the below listed keys" +msgstr "一个包含部分或全部下列键的字典" + +#: ../../library/turtle.rst:834 +msgid "one or more keyword-arguments with the below listed keys as keywords" +msgstr "一个或多个以下列键为关键字的关键字参数" + +#: ../../library/turtle.rst:836 +msgid "" +"Return or set the pen's attributes in a \"pen-dictionary\" with the " +"following key/value pairs:" +msgstr "返回或设置画笔的属性,以一个包含以下键值对的 \"画笔字典\" 表示:" + +#: ../../library/turtle.rst:839 +msgid "\"shown\": True/False" +msgstr "\"shown\": True/False" + +#: ../../library/turtle.rst:840 +msgid "\"pendown\": True/False" +msgstr "\"pendown\": True/False" + +#: ../../library/turtle.rst:841 +msgid "\"pencolor\": color-string or color-tuple" +msgstr "\"pencolor\": 颜色字符串或颜色元组" + +#: ../../library/turtle.rst:842 +msgid "\"fillcolor\": color-string or color-tuple" +msgstr "\"fillcolor\": 颜色字符串或颜色元组" + +#: ../../library/turtle.rst:843 +msgid "\"pensize\": positive number" +msgstr "\"pensize\": 正数值" + +#: ../../library/turtle.rst:844 +msgid "\"speed\": number in range 0..10" +msgstr "\"speed\": 0..10 范围内的数值" + +#: ../../library/turtle.rst:845 +msgid "\"resizemode\": \"auto\" or \"user\" or \"noresize\"" +msgstr "\"resizemode\": \"auto\" 或 \"user\" 或 \"noresize\"" + +#: ../../library/turtle.rst:846 +msgid "\"stretchfactor\": (positive number, positive number)" +msgstr "\"stretchfactor\": (正数值, 正数值)" + +#: ../../library/turtle.rst:847 +msgid "\"outline\": positive number" +msgstr "\"outline\": 正数值" + +#: ../../library/turtle.rst:848 +msgid "\"tilt\": number" +msgstr "\"tilt\": 数值" + +#: ../../library/turtle.rst:850 +msgid "" +"This dictionary can be used as argument for a subsequent call to :func:`pen`" +" to restore the former pen-state. Moreover one or more of these attributes " +"can be provided as keyword-arguments. This can be used to set several pen " +"attributes in one statement." +msgstr "" +"此字典可作为后续调用 :func:`pen` " +"时的参数,以恢复之前的画笔状态。另外还可将这些属性作为关键词参数提交。使用此方式可以用一条语句设置画笔的多个属性。" + +#: ../../library/turtle.rst:876 +msgid "Return ``True`` if pen is down, ``False`` if it's up." +msgstr "如果画笔落下返回 ``True``,如果画笔抬起返回 ``False``。" + +#: ../../library/turtle.rst:894 +msgid "Return or set the pencolor." +msgstr "返回或设置画笔颜色。" + +#: ../../library/turtle.rst:896 ../../library/turtle.rst:945 +msgid "Four input formats are allowed:" +msgstr "允许以下四种输入格式:" + +#: ../../library/turtle.rst:901 +msgid "``pencolor()``" +msgstr "``pencolor()``" + +#: ../../library/turtle.rst:899 +msgid "" +"Return the current pencolor as color specification string or as a tuple (see" +" example). May be used as input to another color/pencolor/fillcolor call." +msgstr "返回以颜色描述字符串或元组 (见示例) 表示的当前画笔颜色。可用作其他 color/pencolor/fillcolor 调用的输入。" + +#: ../../library/turtle.rst:905 +msgid "``pencolor(colorstring)``" +msgstr "``pencolor(colorstring)``" + +#: ../../library/turtle.rst:904 +msgid "" +"Set pencolor to *colorstring*, which is a Tk color specification string, " +"such as ``\"red\"``, ``\"yellow\"``, or ``\"#33cc8c\"``." +msgstr "" +"设置画笔颜色为 *colorstring* 指定的 Tk 颜色描述字符串,例如 ``\"red\"``、``\"yellow\"`` 或 " +"``\"#33cc8c\"``。" + +#: ../../library/turtle.rst:910 +msgid "``pencolor((r, g, b))``" +msgstr "``pencolor((r, g, b))``" + +#: ../../library/turtle.rst:908 +msgid "" +"Set pencolor to the RGB color represented by the tuple of *r*, *g*, and *b*." +" Each of *r*, *g*, and *b* must be in the range 0..colormode, where " +"colormode is either 1.0 or 255 (see :func:`colormode`)." +msgstr "" +"设置画笔颜色为以 *r*, *g*, *b* 元组表示的 RGB 颜色。*r*, *g*, *b* 的取值范围应为 " +"0..colormode,colormode 的值为 1.0 或 255 (参见 :func:`colormode`)。" + +#: ../../library/turtle.rst:914 +msgid "``pencolor(r, g, b)``" +msgstr "``pencolor(r, g, b)``" + +#: ../../library/turtle.rst:913 +msgid "" +"Set pencolor to the RGB color represented by *r*, *g*, and *b*. Each of " +"*r*, *g*, and *b* must be in the range 0..colormode." +msgstr "设置画笔颜色为以 *r*, *g*, *b* 表示的 RGB 颜色。*r*, *g*, *b* 的取值范围应为 0..colormode。" + +#: ../../library/turtle.rst:916 +msgid "" +"If turtleshape is a polygon, the outline of that polygon is drawn with the " +"newly set pencolor." +msgstr "如果 turtleshape 为多边形,该多边形轮廓也以新设置的画笔颜色绘制。" + +#: ../../library/turtle.rst:943 +msgid "Return or set the fillcolor." +msgstr "返回或设置填充颜色。" + +#: ../../library/turtle.rst:950 +msgid "``fillcolor()``" +msgstr "``fillcolor()``" + +#: ../../library/turtle.rst:948 +msgid "" +"Return the current fillcolor as color specification string, possibly in " +"tuple format (see example). May be used as input to another " +"color/pencolor/fillcolor call." +msgstr "返回以颜色描述字符串或元组 (见示例) 表示的当前填充颜色。可用作其他 color/pencolor/fillcolor 调用的输入。" + +#: ../../library/turtle.rst:954 +msgid "``fillcolor(colorstring)``" +msgstr "``fillcolor(colorstring)``" + +#: ../../library/turtle.rst:953 +msgid "" +"Set fillcolor to *colorstring*, which is a Tk color specification string, " +"such as ``\"red\"``, ``\"yellow\"``, or ``\"#33cc8c\"``." +msgstr "" +"设置填充颜色为 *colorstring* 指定的 Tk 颜色描述字符串,例如 ``\"red\"``、``\"yellow\"`` 或 " +"``\"#33cc8c\"``。" + +#: ../../library/turtle.rst:959 +msgid "``fillcolor((r, g, b))``" +msgstr "``fillcolor((r, g, b))``" + +#: ../../library/turtle.rst:957 +msgid "" +"Set fillcolor to the RGB color represented by the tuple of *r*, *g*, and " +"*b*. Each of *r*, *g*, and *b* must be in the range 0..colormode, where " +"colormode is either 1.0 or 255 (see :func:`colormode`)." +msgstr "" +"设置填充颜色为以 *r*, *g*, *b* 元组表示的 RGB 颜色。*r*, *g*, *b* 的取值范围应为 " +"0..colormode,colormode 的值为 1.0 或 255 (参见 :func:`colormode`)。" + +#: ../../library/turtle.rst:963 +msgid "``fillcolor(r, g, b)``" +msgstr "``fillcolor(r, g, b)``" + +#: ../../library/turtle.rst:962 +msgid "" +"Set fillcolor to the RGB color represented by *r*, *g*, and *b*. Each of " +"*r*, *g*, and *b* must be in the range 0..colormode." +msgstr "设置填充颜色为 *r*, *g*, *b* 表示的 RGB 颜色。*r*, *g*, *b* 的取值范围应为 0..colormode。" + +#: ../../library/turtle.rst:965 +msgid "" +"If turtleshape is a polygon, the interior of that polygon is drawn with the " +"newly set fillcolor." +msgstr "如果 turtleshape 为多边形,该多边形内部也以新设置的填充颜色填充。" + +#: ../../library/turtle.rst:986 +msgid "Return or set pencolor and fillcolor." +msgstr "返回或设置画笔颜色和填充颜色。" + +#: ../../library/turtle.rst:988 +msgid "" +"Several input formats are allowed. They use 0 to 3 arguments as follows:" +msgstr "允许多种输入格式。使用如下 0 至 3 个参数:" + +#: ../../library/turtle.rst:994 +msgid "``color()``" +msgstr "``color()``" + +#: ../../library/turtle.rst:992 +msgid "" +"Return the current pencolor and the current fillcolor as a pair of color " +"specification strings or tuples as returned by :func:`pencolor` and " +":func:`fillcolor`." +msgstr "" +"返回以一对颜色描述字符串或元组表示的当前画笔颜色和填充颜色,两者可分别由 :func:`pencolor` 和 :func:`fillcolor` " +"返回。" + +#: ../../library/turtle.rst:998 +msgid "``color(colorstring)``, ``color((r,g,b))``, ``color(r,g,b)``" +msgstr "``color(colorstring)``, ``color((r,g,b))``, ``color(r,g,b)``" + +#: ../../library/turtle.rst:997 +msgid "" +"Inputs as in :func:`pencolor`, set both, fillcolor and pencolor, to the " +"given value." +msgstr "输入格式与 :func:`pencolor` 相同,同时设置填充颜色和画笔颜色为指定的值。" + +#: ../../library/turtle.rst:1002 +msgid "" +"``color(colorstring1, colorstring2)``, ``color((r1,g1,b1), (r2,g2,b2))``" +msgstr "" +"``color(colorstring1, colorstring2)``, ``color((r1,g1,b1), (r2,g2,b2))``" + +#: ../../library/turtle.rst:1001 +msgid "" +"Equivalent to ``pencolor(colorstring1)`` and ``fillcolor(colorstring2)`` and" +" analogously if the other input format is used." +msgstr "" +"相当于 ``pencolor(colorstring1)`` 加 " +"``fillcolor(colorstring2)``,使用其他输入格式的方法也与之类似。" + +#: ../../library/turtle.rst:1004 +msgid "" +"If turtleshape is a polygon, outline and interior of that polygon is drawn " +"with the newly set colors." +msgstr "如果 turtleshape 为多边形,该多边形轮廓与填充也使用新设置的颜色。" + +#: ../../library/turtle.rst:1018 +msgid "See also: Screen method :func:`colormode`." +msgstr "另参见: Screen 方法 :func:`colormode`。" + +#: ../../library/turtle.rst:1032 +msgid "Return fillstate (``True`` if filling, ``False`` else)." +msgstr "返回填充状态 (填充为 ``True``,否则为 ``False``)。" + +#: ../../library/turtle.rst:1047 +msgid "To be called just before drawing a shape to be filled." +msgstr "在绘制要填充的形状之前调用。" + +#: ../../library/turtle.rst:1052 +msgid "Fill the shape drawn after the last call to :func:`begin_fill`." +msgstr "填充上次调用 :func:`begin_fill` 之后绘制的形状。" + +#: ../../library/turtle.rst:1054 +msgid "" +"Whether or not overlap regions for self-intersecting polygons or multiple " +"shapes are filled depends on the operating system graphics, type of overlap," +" and number of overlaps. For example, the Turtle star above may be either " +"all yellow or have some white regions." +msgstr "" +"自相交多边形或多个形状间的重叠区域是否填充取决于操作系统的图形引擎、重叠的类型以及重叠的层数。 例如上面的 Turtle " +"多芒星可能会全部填充为黄色,也可能会有一些白色区域。" + +#: ../../library/turtle.rst:1073 +msgid "" +"Delete the turtle's drawings from the screen, re-center the turtle and set " +"variables to the default values." +msgstr "从屏幕中删除海龟的绘图,海龟回到原点并设置所有变量为默认值。" + +#: ../../library/turtle.rst:1094 +msgid "" +"Delete the turtle's drawings from the screen. Do not move turtle. State " +"and position of the turtle as well as drawings of other turtles are not " +"affected." +msgstr "从屏幕中删除指定海龟的绘图。不移动海龟。海龟的状态和位置以及其他海龟的绘图不受影响。" + +#: ../../library/turtle.rst:1100 +msgid "object to be written to the TurtleScreen" +msgstr "要书写到 TurtleScreen 的对象" + +#: ../../library/turtle.rst:1101 +msgid "True/False" +msgstr "True/False" + +#: ../../library/turtle.rst:1102 +msgid "one of the strings \"left\", \"center\" or right\"" +msgstr "字符串 \"left\", \"center\" 或 \"right\"" + +#: ../../library/turtle.rst:1103 +msgid "a triple (fontname, fontsize, fonttype)" +msgstr "一个三元组 (fontname, fontsize, fonttype)" + +#: ../../library/turtle.rst:1105 +msgid "" +"Write text - the string representation of *arg* - at the current turtle " +"position according to *align* (\"left\", \"center\" or \"right\") and with " +"the given font. If *move* is true, the pen is moved to the bottom-right " +"corner of the text. By default, *move* is ``False``." +msgstr "" +"基于 *align* (\"left\", \"center\" 或 \"right\") 并使用给定的字体将文本 —— *arg* 的字符串表示形式 " +"—— 写到当前海龟位置。 如果 *move* 为真值,画笔会移至文本的右下角。 默认情况下 *move* 为 ``False``。" + +#: ../../library/turtle.rst:1123 +msgid "" +"Make the turtle invisible. It's a good idea to do this while you're in the " +"middle of doing some complex drawing, because hiding the turtle speeds up " +"the drawing observably." +msgstr "使海龟不可见。当你绘制复杂图形时这是个好主意,因为隐藏海龟可显著加快绘制速度。" + +#: ../../library/turtle.rst:1136 +msgid "Make the turtle visible." +msgstr "使海龟可见。" + +#: ../../library/turtle.rst:1146 +msgid "Return ``True`` if the Turtle is shown, ``False`` if it's hidden." +msgstr "如果海龟显示返回 ``True``,如果海龟隐藏返回 ``False``。" + +#: ../../library/turtle.rst:1161 +msgid "a string which is a valid shapename" +msgstr "一个有效的形状名字符串" + +#: ../../library/turtle.rst:1163 +msgid "" +"Set turtle shape to shape with given *name* or, if name is not given, return" +" name of current shape. Shape with *name* must exist in the TurtleScreen's " +"shape dictionary. Initially there are the following polygon shapes: " +"\"arrow\", \"turtle\", \"circle\", \"square\", \"triangle\", \"classic\". " +"To learn about how to deal with shapes see Screen method " +":func:`register_shape`." +msgstr "" +"设置海龟形状为 *name* 指定的形状名,如未指定形状名则返回当前的形状名。*name* 指定的形状名应存在于 TurtleScreen 的 " +"shape 字典中。多边形的形状初始时有以下几种: \"arrow\", \"turtle\", \"circle\", \"square\", " +"\"triangle\", \"classic\"。要了解如何处理形状请参看 Screen 方法 :func:`register_shape`。" + +#: ../../library/turtle.rst:1181 +msgid "one of the strings \"auto\", \"user\", \"noresize\"" +msgstr "字符串 \"auto\", \"user\", \"noresize\" 其中之一" + +#: ../../library/turtle.rst:1183 +msgid "" +"Set resizemode to one of the values: \"auto\", \"user\", \"noresize\". If " +"*rmode* is not given, return current resizemode. Different resizemodes have" +" the following effects:" +msgstr "" +"设置大小调整模式为以下值之一: \"auto\", \"user\", \"noresize\"。如未指定 *rmode* " +"则返回当前的大小调整模式。不同的大小调整模式的效果如下:" + +#: ../../library/turtle.rst:1187 +msgid "" +"\"auto\": adapts the appearance of the turtle corresponding to the value of " +"pensize." +msgstr "\"auto\": 根据画笔粗细值调整海龟的外观。" + +#: ../../library/turtle.rst:1188 +msgid "" +"\"user\": adapts the appearance of the turtle according to the values of " +"stretchfactor and outlinewidth (outline), which are set by " +":func:`shapesize`." +msgstr "\"user\": 根据拉伸因子和轮廓宽度 (outline) 值调整海龟的外观,两者是由 :func:`shapesize` 设置的。" + +#: ../../library/turtle.rst:1191 +msgid "\"noresize\": no adaption of the turtle's appearance takes place." +msgstr "\"noresize\": 不调整海龟的外观大小。" + +#: ../../library/turtle.rst:1193 +msgid "" +"``resizemode(\"user\")`` is called by :func:`shapesize` when used with " +"arguments." +msgstr "``resizemode(\"user\")`` 会由 :func:`shapesize` 带参数使用时被调用。" + +#: ../../library/turtle.rst:1208 ../../library/turtle.rst:1209 +#: ../../library/turtle.rst:1210 +msgid "positive number" +msgstr "正数值" + +#: ../../library/turtle.rst:1212 +msgid "" +"Return or set the pen's attributes x/y-stretchfactors and/or outline. Set " +"resizemode to \"user\". If and only if resizemode is set to \"user\", the " +"turtle will be displayed stretched according to its stretchfactors: " +"*stretch_wid* is stretchfactor perpendicular to its orientation, " +"*stretch_len* is stretchfactor in direction of its orientation, *outline* " +"determines the width of the shapes's outline." +msgstr "" +"返回或设置画笔的属性 x/y-拉伸因子和/或轮廓。设置大小调整模式为 \"user\"。当且仅当大小调整模式设为 \"user\" " +"时海龟会基于其拉伸因子调整外观: *stretch_wid* 为垂直于其朝向的宽度拉伸因子,*stretch_len* " +"为平等于其朝向的长度拉伸因子,决定形状轮廓线的粗细。" + +#: ../../library/turtle.rst:1235 ../../library/turtle.rst:1894 +#: ../../library/turtle.rst:1895 ../../library/turtle.rst:1896 +msgid "number (optional)" +msgstr "数值 (可选)" + +#: ../../library/turtle.rst:1237 +msgid "" +"Set or return the current shearfactor. Shear the turtleshape according to " +"the given shearfactor shear, which is the tangent of the shear angle. Do " +"*not* change the turtle's heading (direction of movement). If shear is not " +"given: return the current shearfactor, i. e. the tangent of the shear angle," +" by which lines parallel to the heading of the turtle are sheared." +msgstr "" +"设置或返回当前的剪切因子。根据 share 指定的剪切因子即剪切角度的切线来剪切海龟形状。*不* 改变海龟的朝向 (移动方向)。如未指定 shear " +"参数: 返回当前的剪切因子即剪切角度的切线,与海龟朝向平行的线条将被剪切。" + +#: ../../library/turtle.rst:1258 +msgid "" +"Rotate the turtleshape by *angle* from its current tilt-angle, but do *not* " +"change the turtle's heading (direction of movement)." +msgstr "海龟形状自其当前的倾角转动 *angle* 指定的角度,但 *不* 改变海龟的朝向 (移动方向)。" + +#: ../../library/turtle.rst:1277 +msgid "" +"Rotate the turtleshape to point in the direction specified by *angle*, " +"regardless of its current tilt-angle. *Do not* change the turtle's heading " +"(direction of movement)." +msgstr "旋转海龟形状使其指向 *angle* 指定的方向,忽略其当前的倾角,*不* 改变海龟的朝向 (移动方向)。" + +#: ../../library/turtle.rst:1297 ../../library/turtle.rst:1320 +#: ../../library/turtle.rst:1321 ../../library/turtle.rst:1322 +#: ../../library/turtle.rst:1323 +msgid "a number (optional)" +msgstr "一个数值 (可选)" + +#: ../../library/turtle.rst:1299 +msgid "" +"Set or return the current tilt-angle. If angle is given, rotate the " +"turtleshape to point in the direction specified by angle, regardless of its " +"current tilt-angle. Do *not* change the turtle's heading (direction of " +"movement). If angle is not given: return the current tilt-angle, i. e. the " +"angle between the orientation of the turtleshape and the heading of the " +"turtle (its direction of movement)." +msgstr "" +"设置或返回当前的倾角。如果指定 angle 则旋转海龟形状使其指向 angle 指定的方向,忽略其当前的倾角。*不* 改变海龟的朝向 " +"(移动方向)。如果未指定 angle: 返回当前的倾角,即海龟形状的方向和海龟朝向 (移动方向) 之间的夹角。" + +#: ../../library/turtle.rst:1325 +msgid "Set or return the current transformation matrix of the turtle shape." +msgstr "设置或返回海龟形状的当前变形矩阵。" + +#: ../../library/turtle.rst:1327 +msgid "" +"If none of the matrix elements are given, return the transformation matrix " +"as a tuple of 4 elements. Otherwise set the given elements and transform the" +" turtleshape according to the matrix consisting of first row t11, t12 and " +"second row t21, t22. The determinant t11 * t22 - t12 * t21 must not be zero," +" otherwise an error is raised. Modify stretchfactor, shearfactor and " +"tiltangle according to the given matrix." +msgstr "" +"如未指定任何矩阵元素,则返回以 4 元素元组表示的变形矩阵。 否则就根据设置指定元素的矩阵来改变海龟形状,矩阵第一排的值为 t11, t12 " +"而第二排的值为 t21, t22。 行列式 t11 * t22 - t12 * t21 必须不为零,否则会引发错误。 根据指定矩阵修改拉伸因子 " +"stretchfactor, 剪切因子 shearfactor 和倾角 tiltangle。" + +#: ../../library/turtle.rst:1349 +msgid "" +"Return the current shape polygon as tuple of coordinate pairs. This can be " +"used to define a new shape or components of a compound shape." +msgstr "返回以坐标值对元组表示的当前形状多边形。这可以用于定义一个新形状或一个复合形状的多个组成部分。" + +#: ../../library/turtle.rst:1367 ../../library/turtle.rst:1389 +#: ../../library/turtle.rst:1414 ../../library/turtle.rst:1818 +msgid "" +"a function with two arguments which will be called with the coordinates of " +"the clicked point on the canvas" +msgstr "一个函数,调用时将传入两个参数表示在画布上点击的坐标。" + +#: ../../library/turtle.rst:1369 ../../library/turtle.rst:1391 +#: ../../library/turtle.rst:1416 ../../library/turtle.rst:1820 +msgid "number of the mouse-button, defaults to 1 (left mouse button)" +msgstr "鼠标按钮编号,默认值为 1 (鼠标左键)" + +#: ../../library/turtle.rst:1370 ../../library/turtle.rst:1392 +#: ../../library/turtle.rst:1417 ../../library/turtle.rst:1821 +msgid "" +"``True`` or ``False`` -- if ``True``, a new binding will be added, otherwise" +" it will replace a former binding" +msgstr "``True`` 或 ``False`` -- 如为 ``True`` 则将添加一个新绑定,否则将取代先前的绑定" + +#: ../../library/turtle.rst:1373 +msgid "" +"Bind *fun* to mouse-click events on this turtle. If *fun* is ``None``, " +"existing bindings are removed. Example for the anonymous turtle, i.e. the " +"procedural way:" +msgstr "" +"将 *fun* 指定的函数绑定到鼠标点击此海龟事件。如果 *fun* 值为 ``None``,则移除现有的绑定。以下为使用匿名海龟即过程式的示例:" + +#: ../../library/turtle.rst:1395 +msgid "" +"Bind *fun* to mouse-button-release events on this turtle. If *fun* is " +"``None``, existing bindings are removed." +msgstr "将 *fun* 指定的函数绑定到在此海龟上释放鼠标按键事件。如果 *fun* 值为 ``None``,则移除现有的绑定。" + +#: ../../library/turtle.rst:1420 +msgid "" +"Bind *fun* to mouse-move events on this turtle. If *fun* is ``None``, " +"existing bindings are removed." +msgstr "将 *fun* 指定的函数绑定到在此海龟上移动鼠标事件。如果 *fun* 值为 ``None``,则移除现有的绑定。" + +#: ../../library/turtle.rst:1423 +msgid "" +"Remark: Every sequence of mouse-move-events on a turtle is preceded by a " +"mouse-click event on that turtle." +msgstr "注: 在海龟上移动鼠标事件之前应先发生在此海龟上点击鼠标事件。" + +#: ../../library/turtle.rst:1431 +msgid "" +"Subsequently, clicking and dragging the Turtle will move it across the " +"screen thereby producing handdrawings (if pen is down)." +msgstr "在此之后点击并拖动海龟可在屏幕上手绘线条 (如果画笔为落下)。" + +#: ../../library/turtle.rst:1440 +msgid "" +"Start recording the vertices of a polygon. Current turtle position is first" +" vertex of polygon." +msgstr "开始记录多边形的顶点。当前海龟位置为多边形的第一个顶点。" + +#: ../../library/turtle.rst:1446 +msgid "" +"Stop recording the vertices of a polygon. Current turtle position is last " +"vertex of polygon. This will be connected with the first vertex." +msgstr "停止记录多边形的顶点。当前海龟位置为多边形的最后一个顶点。它将连线到第一个顶点。" + +#: ../../library/turtle.rst:1452 +msgid "Return the last recorded polygon." +msgstr "返回最新记录的多边形。" + +#: ../../library/turtle.rst:1471 +msgid "" +"Create and return a clone of the turtle with same position, heading and " +"turtle properties." +msgstr "创建并返回海龟的克隆体,具有相同的位置、朝向和海龟属性。" + +#: ../../library/turtle.rst:1484 +msgid "" +"Return the Turtle object itself. Only reasonable use: as a function to " +"return the \"anonymous turtle\":" +msgstr "返回海龟对象自身。唯一合理的用法: 作为一个函数来返回 \"匿名海龟\":" + +#: ../../library/turtle.rst:1498 +msgid "" +"Return the :class:`TurtleScreen` object the turtle is drawing on. " +"TurtleScreen methods can then be called for that object." +msgstr "返回作为海龟绘图场所的 :class:`TurtleScreen` 类对象。该对象将可调用 TurtleScreen 方法。" + +#: ../../library/turtle.rst:1512 +msgid "an integer or ``None``" +msgstr "一个整型数值或 ``None``" + +#: ../../library/turtle.rst:1514 +msgid "" +"Set or disable undobuffer. If *size* is an integer, an empty undobuffer of " +"given size is installed. *size* gives the maximum number of turtle actions " +"that can be undone by the :func:`undo` method/function. If *size* is " +"``None``, the undobuffer is disabled." +msgstr "" +"设置或禁用撤销缓冲区。 如果 *size* 为整数,则开辟一个给定大小的空撤销缓冲区。 *size* 给出了可以通过 :func:`undo` " +"方法/函数撤销海龟动作的最大次数。 如果 *size* 为 ``None``,则禁用撤销缓冲区。" + +#: ../../library/turtle.rst:1527 +msgid "Return number of entries in the undobuffer." +msgstr "返回撤销缓冲区里的条目数。" + +#: ../../library/turtle.rst:1540 +msgid "Compound shapes" +msgstr "复合形状" + +#: ../../library/turtle.rst:1542 +msgid "" +"To use compound turtle shapes, which consist of several polygons of " +"different color, you must use the helper class :class:`Shape` explicitly as " +"described below:" +msgstr "要使用由多个不同颜色多边形构成的复合海龟形状,你必须明确地使用辅助类 :class:`Shape`,具体步骤如下:" + +#: ../../library/turtle.rst:1546 +msgid "Create an empty Shape object of type \"compound\"." +msgstr "创建一个空 Shape 对象,类型为 \"compound\"。" + +#: ../../library/turtle.rst:1547 +msgid "" +"Add as many components to this object as desired, using the " +":meth:`addcomponent` method." +msgstr "按照需要使用 :meth:`addcomponent` 方法向此对象添加多个部件。" + +#: ../../library/turtle.rst:1550 +msgid "For example:" +msgstr "例如:" + +#: ../../library/turtle.rst:1561 +msgid "Now add the Shape to the Screen's shapelist and use it:" +msgstr "接下来将 Shape 对象添加到 Screen 对象的形状列表并使用它:" + +#: ../../library/turtle.rst:1572 +msgid "" +"The :class:`Shape` class is used internally by the :func:`register_shape` " +"method in different ways. The application programmer has to deal with the " +"Shape class *only* when using compound shapes like shown above!" +msgstr "" +":class:`Shape` 类在 :func:`register_shape` 方法的内部以多种方式使用。应用程序编写者 *只有* " +"在使用上述的复合形状时才需要处理 Shape 类。" + +#: ../../library/turtle.rst:1578 +msgid "Methods of TurtleScreen/Screen and corresponding functions" +msgstr "TurtleScreen/Screen 方法及对应函数" + +#: ../../library/turtle.rst:1580 +msgid "" +"Most of the examples in this section refer to a TurtleScreen instance called" +" ``screen``." +msgstr "本节中的大部分示例都使用 TurtleScreen 类的一个实例,命名为 ``screen``。" + +#: ../../library/turtle.rst:1594 +msgid "" +"a color string or three numbers in the range 0..colormode or a 3-tuple of " +"such numbers" +msgstr "一个颜色字符串或三个取值范围 0..colormode 内的数值或一个取值范围相同的数值3元组" + +#: ../../library/turtle.rst:1598 +msgid "Set or return background color of the TurtleScreen." +msgstr "设置或返回 TurtleScreen 的背景颜色。" + +#: ../../library/turtle.rst:1613 +msgid "a string, name of a gif-file or ``\"nopic\"``, or ``None``" +msgstr "一个字符串, gif-文件名, ``\"nopic\"``, 或 ``None``" + +#: ../../library/turtle.rst:1615 +msgid "" +"Set background image or return name of current backgroundimage. If " +"*picname* is a filename, set the corresponding image as background. If " +"*picname* is ``\"nopic\"``, delete background image, if present. If " +"*picname* is ``None``, return the filename of the current backgroundimage. " +"::" +msgstr "" +"设置背景图片或返回当前背景图片名称。如果 *picname* 为一个文件名,则将相应图片设为背景。如果 *picname* 为 " +"``\"nopic\"``,则删除当前背景图片。如果 *picname* 为 ``None``,则返回当前背景图片文件名。::" + +#: ../../library/turtle.rst:1631 +msgid "" +"This TurtleScreen method is available as a global function only under the " +"name ``clearscreen``. The global function ``clear`` is a different one " +"derived from the Turtle method ``clear``." +msgstr "" +"此 TurtleScreen 方法作为全局函数时只有一个名字 ``clearscreen``。全局函数 ``clear`` 所对应的是 Turtle " +"方法 ``clear``。" + +#: ../../library/turtle.rst:1638 +msgid "" +"Delete all drawings and all turtles from the TurtleScreen. Reset the now " +"empty TurtleScreen to its initial state: white background, no background " +"image, no event bindings and tracing on." +msgstr "从中删除所有海龟的全部绘图。将已清空的 TurtleScreen 重置为初始状态: 白色背景,无背景片,无事件绑定并启用追踪。" + +#: ../../library/turtle.rst:1647 +msgid "" +"This TurtleScreen method is available as a global function only under the " +"name ``resetscreen``. The global function ``reset`` is another one derived " +"from the Turtle method ``reset``." +msgstr "" +"此 TurtleScreen 方法作为全局函数时只有一个名字 ``resetscreen``。全局函数 ``reset`` 所对应的是 Turtle " +"方法 ``reset``。" + +#: ../../library/turtle.rst:1654 +msgid "Reset all Turtles on the Screen to their initial state." +msgstr "重置屏幕上的所有海龟为其初始状态。" + +#: ../../library/turtle.rst:1659 +msgid "positive integer, new width of canvas in pixels" +msgstr "正整型数,以像素表示画布的新宽度值" + +#: ../../library/turtle.rst:1660 +msgid "positive integer, new height of canvas in pixels" +msgstr "正整型数,以像素表示画面的新高度值" + +#: ../../library/turtle.rst:1661 +msgid "colorstring or color-tuple, new background color" +msgstr "颜色字符串或颜色元组,新的背景颜色" + +#: ../../library/turtle.rst:1663 +msgid "" +"If no arguments are given, return current (canvaswidth, canvasheight). Else" +" resize the canvas the turtles are drawing on. Do not alter the drawing " +"window. To observe hidden parts of the canvas, use the scrollbars. With " +"this method, one can make visible those parts of a drawing which were " +"outside the canvas before." +msgstr "" +"如未指定任何参数,则返回当前的 (canvaswidth, " +"canvasheight)。否则改变作为海龟绘图场所的画布大小。不改变绘图窗口。要观察画布的隐藏区域,可以使用滚动条。通过此方法可以令之前绘制于画布之外的图形变为可见。" + +#: ../../library/turtle.rst:1675 +msgid "e.g. to search for an erroneously escaped turtle ;-)" +msgstr "也可以用来寻找意外逃走的海龟 ;-)" + +#: ../../library/turtle.rst:1680 +msgid "a number, x-coordinate of lower left corner of canvas" +msgstr "一个数值, 画布左下角的 x-坐标" + +#: ../../library/turtle.rst:1681 +msgid "a number, y-coordinate of lower left corner of canvas" +msgstr "一个数值, 画布左下角的 y-坐标" + +#: ../../library/turtle.rst:1682 +msgid "a number, x-coordinate of upper right corner of canvas" +msgstr "一个数值, 画面右上角的 x-坐标" + +#: ../../library/turtle.rst:1683 +msgid "a number, y-coordinate of upper right corner of canvas" +msgstr "一个数值, 画布右上角的 y-坐标" + +#: ../../library/turtle.rst:1685 +msgid "" +"Set up user-defined coordinate system and switch to mode \"world\" if " +"necessary. This performs a ``screen.reset()``. If mode \"world\" is " +"already active, all drawings are redrawn according to the new coordinates." +msgstr "" +"设置用户自定义坐标系并在必要时切换模式为 \"world\"。这会执行一次 ``screen.reset()``。如果 \"world\" " +"模式已激活,则所有图形将根据新的坐标系重绘。" + +#: ../../library/turtle.rst:1689 +msgid "" +"**ATTENTION**: in user-defined coordinate systems angles may appear " +"distorted." +msgstr "**注意**: 在用户自定义坐标系中,角度可能显得扭曲。" + +#: ../../library/turtle.rst:1717 +msgid "positive integer" +msgstr "正整型数" + +#: ../../library/turtle.rst:1719 +msgid "" +"Set or return the drawing *delay* in milliseconds. (This is approximately " +"the time interval between two consecutive canvas updates.) The longer the " +"drawing delay, the slower the animation." +msgstr "设置或返回以毫秒数表示的延迟值 *delay*。(这约等于连续两次画布刷新的间隔时间。) 绘图延迟越长,动画速度越慢。" + +#: ../../library/turtle.rst:1723 +msgid "Optional argument:" +msgstr "可选参数:" + +#: ../../library/turtle.rst:1737 ../../library/turtle.rst:1738 +msgid "nonnegative integer" +msgstr "非负整型数" + +#: ../../library/turtle.rst:1740 +msgid "" +"Turn turtle animation on/off and set delay for update drawings. If *n* is " +"given, only each n-th regular screen update is really performed. (Can be " +"used to accelerate the drawing of complex graphics.) When called without " +"arguments, returns the currently stored value of n. Second argument sets " +"delay value (see :func:`delay`)." +msgstr "" +"启用/禁用海龟动画并设置刷新图形的延迟时间。如果指定 *n* 值,则只有每第 n 次屏幕刷新会实际执行。(可被用来加速复杂图形的绘制。) " +"如果调用时不带参数,则返回当前保存的 n 值。第二个参数设置延迟值 (参见 :func:`delay`)。" + +#: ../../library/turtle.rst:1760 +msgid "Perform a TurtleScreen update. To be used when tracer is turned off." +msgstr "执行一次 TurtleScreen 刷新。在禁用追踪时使用。" + +#: ../../library/turtle.rst:1762 +msgid "See also the RawTurtle/Turtle method :func:`speed`." +msgstr "另参见 RawTurtle/Turtle 方法 :func:`speed`。" + +#: ../../library/turtle.rst:1770 +msgid "" +"Set focus on TurtleScreen (in order to collect key-events). Dummy arguments" +" are provided in order to be able to pass :func:`listen` to the onclick " +"method." +msgstr "" +"设置焦点到 TurtleScreen (以便接收按键事件)。使用两个 Dummy 参数以便能够传递 :func:`listen` 给 onclick " +"方法。" + +#: ../../library/turtle.rst:1777 ../../library/turtle.rst:1797 +msgid "a function with no arguments or ``None``" +msgstr "一个无参数的函数或 ``None``" + +#: ../../library/turtle.rst:1778 ../../library/turtle.rst:1798 +msgid "a string: key (e.g. \"a\") or key-symbol (e.g. \"space\")" +msgstr "一个字符串: 键 (例如 \"a\") 或键标 (例如 \"space\")" + +#: ../../library/turtle.rst:1780 +msgid "" +"Bind *fun* to key-release event of key. If *fun* is ``None``, event " +"bindings are removed. Remark: in order to be able to register key-events, " +"TurtleScreen must have the focus. (See method :func:`listen`.)" +msgstr "" +"绑定 *fun* 指定的函数到按键释放事件。如果 *fun* 值为 ``None``,则移除事件绑定。注: " +"为了能够注册按键事件,TurtleScreen 必须得到焦点。(参见 method :func:`listen` 方法。)" + +#: ../../library/turtle.rst:1800 +msgid "" +"Bind *fun* to key-press event of key if key is given, or to any key-press-" +"event if no key is given. Remark: in order to be able to register key-" +"events, TurtleScreen must have focus. (See method :func:`listen`.)" +msgstr "" +"绑定 *fun* 指定的函数到指定键的按下事件。如未指定键则绑定到任意键的按下事件。注: 为了能够注册按键事件,必须得到焦点。(参见 " +":func:`listen` 方法。)" + +#: ../../library/turtle.rst:1824 +msgid "" +"Bind *fun* to mouse-click events on this screen. If *fun* is ``None``, " +"existing bindings are removed." +msgstr "绑定 *fun* 指定的函数到鼠标点击屏幕事件。如果 *fun* 值为 ``None``,则移除现有的绑定。" + +#: ../../library/turtle.rst:1827 +msgid "" +"Example for a TurtleScreen instance named ``screen`` and a Turtle instance " +"named ``turtle``:" +msgstr "以下示例使用一个 TurtleScreen 实例 ``screen`` 和一个 Turtle 实例 ``turtle``:" + +#: ../../library/turtle.rst:1838 +msgid "" +"This TurtleScreen method is available as a global function only under the " +"name ``onscreenclick``. The global function ``onclick`` is another one " +"derived from the Turtle method ``onclick``." +msgstr "" +"此 TurtleScreen 方法作为全局函数时只有一个名字 ``onscreenclick``。全局函数 ``onclick`` 所对应的是 " +"Turtle 方法 ``onclick``。" + +#: ../../library/turtle.rst:1845 +msgid "a function with no arguments" +msgstr "一个无参数的函数" + +#: ../../library/turtle.rst:1846 +msgid "a number >= 0" +msgstr "一个数值 >= 0" + +#: ../../library/turtle.rst:1848 +msgid "Install a timer that calls *fun* after *t* milliseconds." +msgstr "安装一个计时器,在 *t* 毫秒后调用 *fun* 函数。" + +#: ../../library/turtle.rst:1866 +msgid "" +"Starts event loop - calling Tkinter's mainloop function. Must be the last " +"statement in a turtle graphics program. Must *not* be used if a script is " +"run from within IDLE in -n mode (No subprocess) - for interactive use of " +"turtle graphics. ::" +msgstr "" +"开始事件循环 - 调用 Tkinter 的 mainloop 函数。必须作为一个海龟绘图程序的结束语句。如果一个脚本是在以 -n 模式 (无子进程) " +"启动的 IDLE 中运行时 *不可* 使用 - 用于实现海龟绘图的交互功能。::" + +#: ../../library/turtle.rst:1879 ../../library/turtle.rst:1880 +#: ../../library/turtle.rst:1892 ../../library/turtle.rst:1893 +msgid "string" +msgstr "字符串" + +#: ../../library/turtle.rst:1882 +msgid "" +"Pop up a dialog window for input of a string. Parameter title is the title " +"of the dialog window, prompt is a text mostly describing what information to" +" input. Return the string input. If the dialog is canceled, return ``None``." +" ::" +msgstr "" +"弹出一个对话框窗口用来输入一个字符串。形参 title 为对话框窗口的标题,prompt " +"为一条文本,通常用来提示要输入什么信息。返回输入的字符串。如果对话框被取消则返回 ``None``。::" + +#: ../../library/turtle.rst:1898 +msgid "" +"Pop up a dialog window for input of a number. title is the title of the " +"dialog window, prompt is a text mostly describing what numerical information" +" to input. default: default value, minval: minimum value for input, maxval: " +"maximum value for input The number input must be in the range minval .. " +"maxval if these are given. If not, a hint is issued and the dialog remains " +"open for correction. Return the number input. If the dialog is canceled, " +"return ``None``. ::" +msgstr "" +"弹出一个对话框窗口用来输入一个数值。title 为对话框窗口的标题,prompt 为一条文本,通常用来描述要输入的数值信息。default: 默认值, " +"minval: 可输入的最小值, maxval: 可输入的最大值。输入数值的必须在指定的 minval .. maxval " +"范围之内,否则将给出一条提示,对话框保持打开等待修改。返回输入的数值。如果对话框被取消则返回 ``None``。::" + +#: ../../library/turtle.rst:1915 +msgid "one of the strings \"standard\", \"logo\" or \"world\"" +msgstr "字符串 \"standard\", \"logo\" 或 \"world\" 其中之一" + +#: ../../library/turtle.rst:1917 +msgid "" +"Set turtle mode (\"standard\", \"logo\" or \"world\") and perform reset. If" +" mode is not given, current mode is returned." +msgstr "设置海龟模式 (\"standard\", \"logo\" 或 \"world\") 并执行重置。如未指定模式则返回当前的模式。" + +#: ../../library/turtle.rst:1920 +msgid "" +"Mode \"standard\" is compatible with old :mod:`turtle`. Mode \"logo\" is " +"compatible with most Logo turtle graphics. Mode \"world\" uses user-defined" +" \"world coordinates\". **Attention**: in this mode angles appear distorted " +"if ``x/y`` unit-ratio doesn't equal 1." +msgstr "" +"\"standard\" 模式与旧的 :mod:`turtle` 兼容。\"logo\" 模式与大部分 Logo 海龟绘图兼容。\"world\" " +"模式使用用户自定义的 \"世界坐标系\"。**注意**: 在此模式下,如果 ``x/y`` 单位比率不等于 1 则角度会显得扭曲。" + +#: ../../library/turtle.rst:1926 +msgid "Mode" +msgstr "模式" + +#: ../../library/turtle.rst:1926 +msgid "Initial turtle heading" +msgstr "初始海龟朝向" + +#: ../../library/turtle.rst:1926 +msgid "positive angles" +msgstr "正数角度" + +#: ../../library/turtle.rst:1928 +msgid "\"standard\"" +msgstr "\"standard\"" + +#: ../../library/turtle.rst:1928 +msgid "to the right (east)" +msgstr "朝右 (东)" + +#: ../../library/turtle.rst:1928 +msgid "counterclockwise" +msgstr "逆时针" + +#: ../../library/turtle.rst:1929 +msgid "\"logo\"" +msgstr "\"logo\"" + +#: ../../library/turtle.rst:1929 +msgid "upward (north)" +msgstr "朝上 (北)" + +#: ../../library/turtle.rst:1929 +msgid "clockwise" +msgstr "顺时针" + +#: ../../library/turtle.rst:1942 +msgid "one of the values 1.0 or 255" +msgstr "数值 1.0 或 255 其中之一" + +#: ../../library/turtle.rst:1944 +msgid "" +"Return the colormode or set it to 1.0 or 255. Subsequently *r*, *g*, *b* " +"values of color triples have to be in the range 0..\\ *cmode*." +msgstr "返回颜色模式或将其设为 1.0 或 255。构成颜色三元组的 *r*, *g*, *b* 数值必须在 0..\\ *cmode* 范围之内。" + +#: ../../library/turtle.rst:1965 +msgid "" +"Return the Canvas of this TurtleScreen. Useful for insiders who know what " +"to do with a Tkinter Canvas." +msgstr "返回此 TurtleScreen 的 Canvas 对象。供了解 Tkinter 的 Canvas 对象内部机理的人士使用。" + +#: ../../library/turtle.rst:1978 +msgid "Return a list of names of all currently available turtle shapes." +msgstr "返回所有当前可用海龟形状的列表。" + +#: ../../library/turtle.rst:1990 +msgid "There are three different ways to call this function:" +msgstr "调用此函数有三种不同方式:" + +#: ../../library/turtle.rst:1992 +msgid "" +"*name* is the name of a gif-file and *shape* is ``None``: Install the " +"corresponding image shape. ::" +msgstr "*name* 为一个 gif 文件的文件名, *shape* 为 ``None``: 安装相应的图像形状。::" + +#: ../../library/turtle.rst:1998 +msgid "" +"Image shapes *do not* rotate when turning the turtle, so they do not display" +" the heading of the turtle!" +msgstr "当海龟转向时图像形状 *不会* 转动,因此无法显示海龟的朝向!" + +#: ../../library/turtle.rst:2001 +msgid "" +"*name* is an arbitrary string and *shape* is a tuple of pairs of " +"coordinates: Install the corresponding polygon shape." +msgstr "*name* 为指定的字符串,*shape* 为由坐标值对构成的元组: 安装相应的多边形形状。" + +#: ../../library/turtle.rst:2009 +msgid "" +"*name* is an arbitrary string and shape is a (compound) :class:`Shape` " +"object: Install the corresponding compound shape." +msgstr "*name* 为指定的字符串, 为一个 (复合) :class:`Shape` 类对象: 安装相应的复合形状。" + +#: ../../library/turtle.rst:2012 +msgid "" +"Add a turtle shape to TurtleScreen's shapelist. Only thusly registered " +"shapes can be used by issuing the command ``shape(shapename)``." +msgstr "" +"将一个海龟形状加入 TurtleScreen 的形状列表。只有这样注册过的形状才能通过执行 ``shape(shapename)`` 命令来使用。" + +#: ../../library/turtle.rst:2018 +msgid "Return the list of turtles on the screen." +msgstr "返回屏幕上的海龟列表。" + +#: ../../library/turtle.rst:2029 +msgid "Return the height of the turtle window. ::" +msgstr "返回海龟窗口的高度。::" + +#: ../../library/turtle.rst:2037 +msgid "Return the width of the turtle window. ::" +msgstr "返回海龟窗口的宽度。::" + +#: ../../library/turtle.rst:2046 +msgid "Methods specific to Screen, not inherited from TurtleScreen" +msgstr "Screen 专有方法, 而非继承自 TurtleScreen" + +#: ../../library/turtle.rst:2050 +msgid "Shut the turtlegraphics window." +msgstr "关闭海龟绘图窗口。" + +#: ../../library/turtle.rst:2055 +msgid "Bind ``bye()`` method to mouse clicks on the Screen." +msgstr "将 ``bye()`` 方法绑定到 Screen 上的鼠标点击事件。" + +#: ../../library/turtle.rst:2058 +msgid "" +"If the value \"using_IDLE\" in the configuration dictionary is ``False`` " +"(default value), also enter mainloop. Remark: If IDLE with the ``-n`` " +"switch (no subprocess) is used, this value should be set to ``True`` in " +":file:`turtle.cfg`. In this case IDLE's own mainloop is active also for the" +" client script." +msgstr "" +"如果配置字典中 \"using_IDLE\" 的值为 ``False`` (默认值) 则同时进入主事件循环。注: 如果启动 IDLE 时使用了 " +"``-n`` 开关 (无子进程),:file:`turtle.cfg` 中此数值应设为 ``True``。在此情况下 IDLE " +"本身的主事件循环同样会作用于客户脚本。" + +#: ../../library/turtle.rst:2067 +msgid "" +"Set the size and position of the main window. Default values of arguments " +"are stored in the configuration dictionary and can be changed via a " +":file:`turtle.cfg` file." +msgstr "设置主窗口的大小和位置。默认参数值保存在配置字典中,可通过 :file:`turtle.cfg` 文件进行修改。" + +#: ../../library/turtle.rst:2071 +msgid "" +"if an integer, a size in pixels, if a float, a fraction of the screen; " +"default is 50% of screen" +msgstr "如为一个整型数值,表示大小为多少像素,如为一个浮点数值,则表示屏幕的占比;默认为屏幕的 50%" + +#: ../../library/turtle.rst:2073 +msgid "" +"if an integer, the height in pixels, if a float, a fraction of the screen; " +"default is 75% of screen" +msgstr "如为一个整型数值,表示高度为多少像素,如为一个浮点数值,则表示屏幕的占比;默认为屏幕的 75%" + +#: ../../library/turtle.rst:2075 +msgid "" +"if positive, starting position in pixels from the left edge of the screen, " +"if negative from the right edge, if ``None``, center window horizontally" +msgstr "如为正值,表示初始位置距离屏幕左边缘多少像素,负值表示距离右边缘,``None`` 表示窗口水平居中" + +#: ../../library/turtle.rst:2078 +msgid "" +"if positive, starting position in pixels from the top edge of the screen, if" +" negative from the bottom edge, if ``None``, center window vertically" +msgstr "如为正值,表示初始位置距离屏幕上边缘多少像素,负值表示距离下边缘,``None`` 表示窗口垂直居中" + +#: ../../library/turtle.rst:2093 +msgid "a string that is shown in the titlebar of the turtle graphics window" +msgstr "一个字符串,显示为海龟绘图窗口的标题栏文本" + +#: ../../library/turtle.rst:2096 +msgid "Set title of turtle window to *titlestring*." +msgstr "设置海龟窗口标题为 *titlestring* 指定的文本。" + +#: ../../library/turtle.rst:2105 +msgid "Public classes" +msgstr "公共类" + +#: ../../library/turtle.rst:2111 +msgid "" +"a :class:`tkinter.Canvas`, a :class:`ScrolledCanvas` or a " +":class:`TurtleScreen`" +msgstr "" +"一个 :class:`tkinter.Canvas` , :class:`ScrolledCanvas` 或 :class:`TurtleScreen`" +" 类对象" + +#: ../../library/turtle.rst:2114 +msgid "" +"Create a turtle. The turtle has all methods described above as \"methods of" +" Turtle/RawTurtle\"." +msgstr "创建一个海龟。海龟对象具有 \"Turtle/RawTurtle 方法\" 一节所述的全部方法。" + +#: ../../library/turtle.rst:2120 +msgid "" +"Subclass of RawTurtle, has the same interface but draws on a default " +":class:`Screen` object created automatically when needed for the first time." +msgstr "RawTurtle 的子类,具有相同的接口,但其绘图场所为默认的 :class:`Screen` 类对象,在首次使用时自动创建。" + +#: ../../library/turtle.rst:2126 +msgid "a :class:`tkinter.Canvas`" +msgstr "一个 :class:`tkinter.Canvas` 类对象" + +#: ../../library/turtle.rst:2128 +msgid "" +"Provides screen oriented methods like :func:`setbg` etc. that are described " +"above." +msgstr "提供面向屏幕的方法例如 :func:`setbg` 等。说明见上文。" + +#: ../../library/turtle.rst:2133 +msgid "" +"Subclass of TurtleScreen, with :ref:`four methods added `." +msgstr "TurtleScreen 的子类,:ref:`增加了四个方法 `." + +#: ../../library/turtle.rst:2138 +msgid "" +"some Tkinter widget to contain the ScrolledCanvas, i.e. a Tkinter-canvas " +"with scrollbars added" +msgstr "可容纳 ScrolledCanvas 的 Tkinter 部件,即添加了滚动条的 Tkinter-canvas" + +#: ../../library/turtle.rst:2141 +msgid "" +"Used by class Screen, which thus automatically provides a ScrolledCanvas as " +"playground for the turtles." +msgstr "由 Screen 类使用,使其能够自动提供一个 ScrolledCanvas 作为海龟的绘图场所。" + +#: ../../library/turtle.rst:2146 +msgid "one of the strings \"polygon\", \"image\", \"compound\"" +msgstr "字符串 \"polygon\", \"image\", \"compound\" 其中之一" + +#: ../../library/turtle.rst:2148 +msgid "" +"Data structure modeling shapes. The pair ``(type_, data)`` must follow this" +" specification:" +msgstr "实现形状的数据结构。``(type_, data)`` 必须遵循以下定义:" + +#: ../../library/turtle.rst:2153 +msgid "*type_*" +msgstr "*type_*" + +#: ../../library/turtle.rst:2153 +msgid "*data*" +msgstr "*data*" + +#: ../../library/turtle.rst:2155 +msgid "\"polygon\"" +msgstr "\"polygon\"" + +#: ../../library/turtle.rst:2155 +msgid "a polygon-tuple, i.e. a tuple of pairs of coordinates" +msgstr "一个多边形元组,即由坐标值对构成的元组" + +#: ../../library/turtle.rst:2156 +msgid "\"image\"" +msgstr "\"image\"" + +#: ../../library/turtle.rst:2156 +msgid "an image (in this form only used internally!)" +msgstr "一个图片 (此形式仅限内部使用!)" + +#: ../../library/turtle.rst:2157 +msgid "\"compound\"" +msgstr "\"compound\"" + +#: ../../library/turtle.rst:2157 +msgid "" +"``None`` (a compound shape has to be constructed using the " +":meth:`addcomponent` method)" +msgstr "``None`` (复合形状必须使用 :meth:`addcomponent` 方法来构建)" + +#: ../../library/turtle.rst:2163 +msgid "a polygon, i.e. a tuple of pairs of numbers" +msgstr "一个多边形,即由数值对构成的元组" + +#: ../../library/turtle.rst:2164 +msgid "a color the *poly* will be filled with" +msgstr "一种颜色,将用来填充 *poly* 指定的多边形" + +#: ../../library/turtle.rst:2165 +msgid "a color for the poly's outline (if given)" +msgstr "一种颜色,用于多边形的轮廓 (如有指定)" + +#: ../../library/turtle.rst:2167 +msgid "Example:" +msgstr "示例:" + +#: ../../library/turtle.rst:2177 +msgid "See :ref:`compoundshapes`." +msgstr "参见 :ref:`compoundshapes`。" + +#: ../../library/turtle.rst:2182 +msgid "" +"A two-dimensional vector class, used as a helper class for implementing " +"turtle graphics. May be useful for turtle graphics programs too. Derived " +"from tuple, so a vector is a tuple!" +msgstr "一个二维矢量类,用来作为实现海龟绘图的辅助类。也可能在海龟绘图程序中使用。派生自元组,因此矢量也属于元组!" + +#: ../../library/turtle.rst:2186 +msgid "Provides (for *a*, *b* vectors, *k* number):" +msgstr "提供的运算 (*a*, *b* 为矢量, *k* 为数值):" + +#: ../../library/turtle.rst:2188 +msgid "``a + b`` vector addition" +msgstr "``a + b`` 矢量加法" + +#: ../../library/turtle.rst:2189 +msgid "``a - b`` vector subtraction" +msgstr "``a - b`` 矢量减法" + +#: ../../library/turtle.rst:2190 +msgid "``a * b`` inner product" +msgstr "``a * b`` 内积" + +#: ../../library/turtle.rst:2191 +msgid "``k * a`` and ``a * k`` multiplication with scalar" +msgstr "``k * a`` 和 ``a * k`` 与标量相乘" + +#: ../../library/turtle.rst:2192 +msgid "``abs(a)`` absolute value of a" +msgstr "``abs(a)`` a 的绝对值" + +#: ../../library/turtle.rst:2193 +msgid "``a.rotate(angle)`` rotation" +msgstr "``a.rotate(angle)`` 旋转" + +#: ../../library/turtle.rst:2197 +msgid "Help and configuration" +msgstr "帮助与配置" + +#: ../../library/turtle.rst:2200 +msgid "How to use help" +msgstr "如何使用帮助" + +#: ../../library/turtle.rst:2202 +msgid "" +"The public methods of the Screen and Turtle classes are documented " +"extensively via docstrings. So these can be used as online-help via the " +"Python help facilities:" +msgstr "Screen 和 Turtle 类的公用方法以文档字符串提供了详细的文档。因此可以利用 Python 帮助工具获取这些在线帮助信息:" + +#: ../../library/turtle.rst:2206 +msgid "" +"When using IDLE, tooltips show the signatures and first lines of the " +"docstrings of typed in function-/method calls." +msgstr "当使用 IDLE 时,输入函数/方法调用将弹出工具提示显示其签名和文档字符串的头几行。" + +#: ../../library/turtle.rst:2209 +msgid "Calling :func:`help` on methods or functions displays the docstrings::" +msgstr "对文法或函数调用 :func:`help` 将显示其文档字符串::" + +#: ../../library/turtle.rst:2240 +msgid "" +"The docstrings of the functions which are derived from methods have a " +"modified form::" +msgstr "方法对应函数的文档字符串的形式会有一些修改::" + +#: ../../library/turtle.rst:2274 +msgid "" +"These modified docstrings are created automatically together with the " +"function definitions that are derived from the methods at import time." +msgstr "这些修改版文档字符串是在导入时与方法对应函数的定义一起自动生成的。" + +#: ../../library/turtle.rst:2279 +msgid "Translation of docstrings into different languages" +msgstr "文档字符串翻译为不同的语言" + +#: ../../library/turtle.rst:2281 +msgid "" +"There is a utility to create a dictionary the keys of which are the method " +"names and the values of which are the docstrings of the public methods of " +"the classes Screen and Turtle." +msgstr "可使用工具创建一个字典,键为方法名,值为 Screen 和 Turtle 类公共方法的文档字符串。" + +#: ../../library/turtle.rst:2287 +msgid "a string, used as filename" +msgstr "一个字符串,表示文件名" + +#: ../../library/turtle.rst:2289 +msgid "" +"Create and write docstring-dictionary to a Python script with the given " +"filename. This function has to be called explicitly (it is not used by the " +"turtle graphics classes). The docstring dictionary will be written to the " +"Python script :file:`{filename}.py`. It is intended to serve as a template " +"for translation of the docstrings into different languages." +msgstr "" +"创建文档字符串字典并将其写入 filename 指定的 Python 脚本文件。此函数必须显示地调用 " +"(海龟绘图类并不使用此函数)。文档字符串字典将被写入到 Python 脚本文件 " +":file:`{filename}.py`。该文件可作为模板用来将文档字符串翻译为不同语言。" + +#: ../../library/turtle.rst:2295 +msgid "" +"If you (or your students) want to use :mod:`turtle` with online help in your" +" native language, you have to translate the docstrings and save the " +"resulting file as e.g. :file:`turtle_docstringdict_german.py`." +msgstr "" +"如果你 (或你的学生) 想使用本国语言版本的 :mod:`turtle` 在线帮助,你必须翻译文档字符串并保存结果文件,例如 " +":file:`turtle_docstringdict_german.py`." + +#: ../../library/turtle.rst:2299 +msgid "" +"If you have an appropriate entry in your :file:`turtle.cfg` file this " +"dictionary will be read in at import time and will replace the original " +"English docstrings." +msgstr "如果你在 :file:`turtle.cfg` 文件中加入了相应的条目,此字典将在导入模块时被读取并替代原有的英文版文档字符串。" + +#: ../../library/turtle.rst:2302 +msgid "" +"At the time of this writing there are docstring dictionaries in German and " +"in Italian. (Requests please to glingl@aon.at.)" +msgstr "在撰写本文档时已经有了德语和意大利语版的文档字符串字典。(更多需求请联系 glingl@aon.at)" + +#: ../../library/turtle.rst:2308 +msgid "How to configure Screen and Turtles" +msgstr "如何配置 Screen 和 Turtle" + +#: ../../library/turtle.rst:2310 +msgid "" +"The built-in default configuration mimics the appearance and behaviour of " +"the old turtle module in order to retain best possible compatibility with " +"it." +msgstr "内置的默认配置是模仿旧 turtle 模块的外观和行为,以便尽可能地与其保持兼容。" + +#: ../../library/turtle.rst:2313 +msgid "" +"If you want to use a different configuration which better reflects the " +"features of this module or which better fits to your needs, e.g. for use in " +"a classroom, you can prepare a configuration file ``turtle.cfg`` which will " +"be read at import time and modify the configuration according to its " +"settings." +msgstr "" +"如果你想使用不同的配置,以便更好地反映此模块的特性或是更适合你的需求,例如在课堂中使用,你可以准备一个配置文件 " +"``turtle.cfg``,该文件将在导入模块时被读取并根据其中的设定修改模块配置。" + +#: ../../library/turtle.rst:2318 +msgid "" +"The built in configuration would correspond to the following turtle.cfg::" +msgstr "内置的配置对应以下的 turtle.cfg::" + +#: ../../library/turtle.rst:2341 +msgid "Short explanation of selected entries:" +msgstr "选定条目的简短说明:" + +#: ../../library/turtle.rst:2343 +msgid "" +"The first four lines correspond to the arguments of the :meth:`Screen.setup`" +" method." +msgstr "开头的四行对应 :meth:`Screen.setup` 方法的参数。" + +#: ../../library/turtle.rst:2345 +msgid "" +"Line 5 and 6 correspond to the arguments of the method " +":meth:`Screen.screensize`." +msgstr "第 5 和 6 行对应 :meth:`Screen.screensize` 方法的参数。" + +#: ../../library/turtle.rst:2347 +msgid "" +"*shape* can be any of the built-in shapes, e.g: arrow, turtle, etc. For " +"more info try ``help(shape)``." +msgstr "*shape* 可以是任何内置形状,即: arrow, turtle 等。更多信息可用 ``help(shape)`` 查看。" + +#: ../../library/turtle.rst:2349 +msgid "" +"If you want to use no fillcolor (i.e. make the turtle transparent), you have" +" to write ``fillcolor = \"\"`` (but all nonempty strings must not have " +"quotes in the cfg-file)." +msgstr "如果你想使用无填充色 (即令海龟变透明),你必须写 ``fillcolor = \"\"`` (但 cfg 文件中所有非空字符串都不可加引号)。" + +#: ../../library/turtle.rst:2352 +msgid "" +"If you want to reflect the turtle its state, you have to use ``resizemode = " +"auto``." +msgstr "如果你想令海龟反映其状态,你必须使用 ``resizemode = auto``。" + +#: ../../library/turtle.rst:2354 +msgid "" +"If you set e.g. ``language = italian`` the docstringdict " +":file:`turtle_docstringdict_italian.py` will be loaded at import time (if " +"present on the import path, e.g. in the same directory as :mod:`turtle`." +msgstr "" +"如果你设置语言例如 ``language = italian`` 则文档字符串字典 " +":file:`turtle_docstringdict_italian.py` 将在导入模块时被加载 (如果导入路径即 :mod:`turtle` " +"的目录中存在此文件。" + +#: ../../library/turtle.rst:2357 +msgid "" +"The entries *exampleturtle* and *examplescreen* define the names of these " +"objects as they occur in the docstrings. The transformation of method-" +"docstrings to function-docstrings will delete these names from the " +"docstrings." +msgstr "" +"*exampleturtle* 和 *examplescreen* " +"条目定义了相应对象在文档字符串中显示的名称。方法文档字符串转换为函数文档字符串时将从文档字符串中删去这些名称。" + +#: ../../library/turtle.rst:2361 +msgid "" +"*using_IDLE*: Set this to ``True`` if you regularly work with IDLE and its " +"-n switch (\"no subprocess\"). This will prevent :func:`exitonclick` to " +"enter the mainloop." +msgstr "" +"*using_IDLE*: 如果你经常使用 IDLE 并启用其 -n 开关 (\"无子进程\") 则应将此项设为 ``True``,这将阻止 " +":func:`exitonclick` 进入主事件循环。" + +#: ../../library/turtle.rst:2365 +msgid "" +"There can be a :file:`turtle.cfg` file in the directory where :mod:`turtle` " +"is stored and an additional one in the current working directory. The " +"latter will override the settings of the first one." +msgstr "" +":file:`turtle.cfg` 文件可以保存于 :mod:`turtle` 所在目录,当前工作目录也可以有一个同名文件。后者会重载覆盖前者的设置。" + +#: ../../library/turtle.rst:2369 +msgid "" +"The :file:`Lib/turtledemo` directory contains a :file:`turtle.cfg` file. " +"You can study it as an example and see its effects when running the demos " +"(preferably not from within the demo-viewer)." +msgstr "" +":file:`Lib/turtledemo` 目录中也有一个 :file:`turtle.cfg` " +"文件。你可以将其作为示例进行研究,并在运行演示时查看其作用效果 (但最好不要在演示查看器中运行)。" + +#: ../../library/turtle.rst:2375 +msgid ":mod:`turtledemo` --- Demo scripts" +msgstr ":mod:`turtledemo` --- 演示脚本集" + +#: ../../library/turtle.rst:2380 +msgid "" +"The :mod:`turtledemo` package includes a set of demo scripts. These scripts" +" can be run and viewed using the supplied demo viewer as follows::" +msgstr ":mod:`turtledemo` 包汇集了一组演示脚本。这些脚本可以通过以下命令打开所提供的演示查看器运行和查看::" + +#: ../../library/turtle.rst:2385 +msgid "" +"Alternatively, you can run the demo scripts individually. For example, ::" +msgstr "此外,你也可以单独运行其中的演示脚本。例如,::" + +#: ../../library/turtle.rst:2389 +msgid "The :mod:`turtledemo` package directory contains:" +msgstr ":mod:`turtledemo` 包目录中的内容:" + +#: ../../library/turtle.rst:2391 +msgid "" +"A demo viewer :file:`__main__.py` which can be used to view the sourcecode " +"of the scripts and run them at the same time." +msgstr "一个演示查看器 :file:`__main__.py`,可用来查看脚本的源码并即时运行。" + +#: ../../library/turtle.rst:2393 +msgid "" +"Multiple scripts demonstrating different features of the :mod:`turtle` " +"module. Examples can be accessed via the Examples menu. They can also be " +"run standalone." +msgstr "多个脚本文件,演示 :mod:`turtle` 模块的不同特性。所有示例可通过 Examples 菜单打开。也可以单独运行每个脚本。" + +#: ../../library/turtle.rst:2396 +msgid "" +"A :file:`turtle.cfg` file which serves as an example of how to write and use" +" such files." +msgstr "一个 :file:`turtle.cfg` 文件,作为说明如何编写并使用模块配置文件的示例模板。" + +#: ../../library/turtle.rst:2399 +msgid "The demo scripts are:" +msgstr "演示脚本清单如下:" + +#: ../../library/turtle.rst:2404 +msgid "Name" +msgstr "名称" + +#: ../../library/turtle.rst:2404 +msgid "Description" +msgstr "描述" + +#: ../../library/turtle.rst:2404 +msgid "Features" +msgstr "相关特性" + +#: ../../library/turtle.rst:2406 +msgid "bytedesign" +msgstr "bytedesign" + +#: ../../library/turtle.rst:2406 +msgid "complex classical turtle graphics pattern" +msgstr "复杂的传统海龟绘图模式" + +#: ../../library/turtle.rst:2406 +msgid ":func:`tracer`, delay, :func:`update`" +msgstr ":func:`tracer`, delay, :func:`update`" + +#: ../../library/turtle.rst:2409 +msgid "chaos" +msgstr "chaos" + +#: ../../library/turtle.rst:2409 +msgid "" +"graphs Verhulst dynamics, shows that computer's computations can generate " +"results sometimes against the common sense expectations" +msgstr "绘制 Verhulst 动态模型,演示通过计算机的运算可能会生成令人惊叹的结果" + +#: ../../library/turtle.rst:2409 +msgid "world coordinates" +msgstr "世界坐标系" + +#: ../../library/turtle.rst:2415 +msgid "clock" +msgstr "clock" + +#: ../../library/turtle.rst:2415 +msgid "analog clock showing time of your computer" +msgstr "绘制模拟时钟显示本机的当前时间" + +#: ../../library/turtle.rst:2415 +msgid "turtles as clock's hands, ontimer" +msgstr "海龟作为表针, ontimer" + +#: ../../library/turtle.rst:2418 +msgid "colormixer" +msgstr "colormixer" + +#: ../../library/turtle.rst:2418 +msgid "experiment with r, g, b" +msgstr "试验 r, g, b 颜色模式" + +#: ../../library/turtle.rst:2420 +msgid "forest" +msgstr "forest" + +#: ../../library/turtle.rst:2420 +msgid "3 breadth-first trees" +msgstr "绘制 3 棵广度优先树" + +#: ../../library/turtle.rst:2420 +msgid "randomization" +msgstr "随机化" + +#: ../../library/turtle.rst:2422 +msgid "fractalcurves" +msgstr "fractalcurves" + +#: ../../library/turtle.rst:2422 +msgid "Hilbert & Koch curves" +msgstr "绘制 Hilbert & Koch 曲线" + +#: ../../library/turtle.rst:2422 +msgid "recursion" +msgstr "递归" + +#: ../../library/turtle.rst:2424 +msgid "lindenmayer" +msgstr "lindenmayer" + +#: ../../library/turtle.rst:2424 +msgid "ethnomathematics (indian kolams)" +msgstr "文化数学 (印度装饰艺术)" + +#: ../../library/turtle.rst:2424 +msgid "L-System" +msgstr "L-系统" + +#: ../../library/turtle.rst:2427 +msgid "minimal_hanoi" +msgstr "minimal_hanoi" + +#: ../../library/turtle.rst:2427 +msgid "Towers of Hanoi" +msgstr "汉诺塔" + +#: ../../library/turtle.rst:2427 +msgid "Rectangular Turtles as Hanoi discs (shape, shapesize)" +msgstr "矩形海龟作为汉诺盘 (shape, shapesize)" + +#: ../../library/turtle.rst:2431 +msgid "nim" +msgstr "nim" + +#: ../../library/turtle.rst:2431 +msgid "" +"play the classical nim game with three heaps of sticks against the computer." +msgstr "玩经典的“尼姆”游戏,开始时有三堆小棒,与电脑对战。" + +#: ../../library/turtle.rst:2431 +msgid "turtles as nimsticks, event driven (mouse, keyboard)" +msgstr "海龟作为小棒,事件驱动 (鼠标, 键盘)" + +#: ../../library/turtle.rst:2435 +msgid "paint" +msgstr "paint" + +#: ../../library/turtle.rst:2435 +msgid "super minimalistic drawing program" +msgstr "超极简主义绘画程序" + +#: ../../library/turtle.rst:2438 +msgid "peace" +msgstr "peace" + +#: ../../library/turtle.rst:2438 +msgid "elementary" +msgstr "初级技巧" + +#: ../../library/turtle.rst:2438 +msgid "turtle: appearance and animation" +msgstr "海龟: 外观与动画" + +#: ../../library/turtle.rst:2441 +msgid "penrose" +msgstr "penrose" + +#: ../../library/turtle.rst:2441 +msgid "aperiodic tiling with kites and darts" +msgstr "非周期性地使用风筝和飞镖形状铺满平面" + +#: ../../library/turtle.rst:2444 +msgid "planet_and_moon" +msgstr "planet_and_moon" + +#: ../../library/turtle.rst:2444 +msgid "simulation of gravitational system" +msgstr "模拟引力系统" + +#: ../../library/turtle.rst:2444 +msgid "compound shapes, :class:`Vec2D`" +msgstr "复合开关, :class:`Vec2D` 类" + +#: ../../library/turtle.rst:2447 +msgid "round_dance" +msgstr "round_dance" + +#: ../../library/turtle.rst:2447 +msgid "dancing turtles rotating pairwise in opposite direction" +msgstr "两两相对并不断旋转舞蹈的海龟" + +#: ../../library/turtle.rst:2447 +msgid "compound shapes, clone shapesize, tilt, get_shapepoly, update" +msgstr "复合形状, clone shapesize, tilt, get_shapepoly, update" + +#: ../../library/turtle.rst:2451 +msgid "sorting_animate" +msgstr "sorting_animate" + +#: ../../library/turtle.rst:2451 +msgid "visual demonstration of different sorting methods" +msgstr "动态演示不同的排序方法" + +#: ../../library/turtle.rst:2451 +msgid "simple alignment, randomization" +msgstr "简单对齐, 随机化" + +#: ../../library/turtle.rst:2454 +msgid "tree" +msgstr "tree" + +#: ../../library/turtle.rst:2454 +msgid "a (graphical) breadth first tree (using generators)" +msgstr "一棵 (图形化的) 广度优先树 (使用生成器)" + +#: ../../library/turtle.rst:2457 +msgid "two_canvases" +msgstr "two_canvases" + +#: ../../library/turtle.rst:2457 +msgid "simple design" +msgstr "简单设计" + +#: ../../library/turtle.rst:2457 +msgid "turtles on two canvases" +msgstr "两块画布上的海龟" + +#: ../../library/turtle.rst:2460 +msgid "wikipedia" +msgstr "wikipedia" + +#: ../../library/turtle.rst:2460 +msgid "a pattern from the wikipedia article on turtle graphics" +msgstr "一个来自介绍海龟绘图的维基百科文章的图案" + +#: ../../library/turtle.rst:2460 +msgid ":func:`clone`, :func:`undo`" +msgstr ":func:`clone`, :func:`undo`" + +#: ../../library/turtle.rst:2463 +msgid "yinyang" +msgstr "yinyang" + +#: ../../library/turtle.rst:2463 +msgid "another elementary example" +msgstr "另一个初级示例" + +#: ../../library/turtle.rst:2466 +msgid "Have fun!" +msgstr "祝你玩得开心!" + +#: ../../library/turtle.rst:2470 +msgid "Changes since Python 2.6" +msgstr "Python 2.6 之后的变化" + +#: ../../library/turtle.rst:2472 +msgid "" +"The methods :meth:`Turtle.tracer`, :meth:`Turtle.window_width` and " +":meth:`Turtle.window_height` have been eliminated. Methods with these names " +"and functionality are now available only as methods of :class:`Screen`. The " +"functions derived from these remain available. (In fact already in Python " +"2.6 these methods were merely duplications of the corresponding " +":class:`TurtleScreen`/:class:`Screen`-methods.)" +msgstr "" +":meth:`Turtle.tracer`, :meth:`Turtle.window_width` 和 " +":meth:`Turtle.window_height` 方法已被去除。具有这些名称和功能的方法现在只限于 :class:`Screen` " +"类的方法。但其对应的函数仍然可用。(实际上在 Python 2.6 中这些方法就已经只是从对应的 " +":class:`TurtleScreen`/:class:`Screen` 类的方法复制而来。)" + +#: ../../library/turtle.rst:2480 +msgid "" +"The method :meth:`Turtle.fill` has been eliminated. The behaviour of " +":meth:`begin_fill` and :meth:`end_fill` have changed slightly: now every " +"filling-process must be completed with an ``end_fill()`` call." +msgstr "" +":meth:`Turtle.fill` 方法已被去除。:meth:`begin_fill` 和 :meth:`end_fill` 的行为则有细微改变: " +"现在每个填充过程必须以一个 ``end_fill()`` 调用来结束。" + +#: ../../library/turtle.rst:2485 +msgid "" +"A method :meth:`Turtle.filling` has been added. It returns a boolean value: " +"``True`` if a filling process is under way, ``False`` otherwise. This " +"behaviour corresponds to a ``fill()`` call without arguments in Python 2.6." +msgstr "" +"新增了一个 :meth:`Turtle.filling` 方法。该方法返回一个布尔值: 如果填充过程正在进行为 ``True``,否则为 " +"``False``。此行为相当于 Python 2.6 中不带参数的 ``fill()`` 调用。" + +#: ../../library/turtle.rst:2491 +msgid "Changes since Python 3.0" +msgstr "Python 3.0 之后的变化" + +#: ../../library/turtle.rst:2493 +msgid "" +"The methods :meth:`Turtle.shearfactor`, :meth:`Turtle.shapetransform` and " +":meth:`Turtle.get_shapepoly` have been added. Thus the full range of regular" +" linear transforms is now available for transforming turtle shapes. " +":meth:`Turtle.tiltangle` has been enhanced in functionality: it now can be " +"used to get or set the tiltangle. :meth:`Turtle.settiltangle` has been " +"deprecated." +msgstr "" +"新增了 :meth:`Turtle.shearfactor`, :meth:`Turtle.shapetransform` 和 " +":meth:`Turtle.get_shapepoly` " +"方法。这样就可以使用所有标准线性变换来调整海龟形状。:meth:`Turtle.tiltangle` 的功能已被加强: " +"现在可被用来获取或设置倾角。:meth:`Turtle.settiltangle` 已弃用。" + +#: ../../library/turtle.rst:2500 +msgid "" +"The method :meth:`Screen.onkeypress` has been added as a complement to " +":meth:`Screen.onkey` which in fact binds actions to the keyrelease event. " +"Accordingly the latter has got an alias: :meth:`Screen.onkeyrelease`." +msgstr "" +"新增了 :meth:`Screen.onkeypress` 方法作为对 :meth:`Screen.onkey` 的补充,实际就是将行为绑定到 " +"keyrelease 事件。后者相应增加了一个别名: :meth:`Screen.onkeyrelease`。" + +#: ../../library/turtle.rst:2504 +msgid "" +"The method :meth:`Screen.mainloop` has been added. So when working only " +"with Screen and Turtle objects one must not additionally import " +":func:`mainloop` anymore." +msgstr "" +"新增了 :meth:`Screen.mainloop` 方法。这样当仅需使用 Screen 和 Turtle 对象时不需要再额外导入 " +":func:`mainloop`。" + +#: ../../library/turtle.rst:2508 +msgid "" +"Two input methods has been added :meth:`Screen.textinput` and " +":meth:`Screen.numinput`. These popup input dialogs and return strings and " +"numbers respectively." +msgstr "" +"新增了两个方法 :meth:`Screen.textinput` 和 " +":meth:`Screen.numinput`。用来弹出对话框接受输入并分别返回字符串和数值。" + +#: ../../library/turtle.rst:2512 +msgid "" +"Two example scripts :file:`tdemo_nim.py` and :file:`tdemo_round_dance.py` " +"have been added to the :file:`Lib/turtledemo` directory." +msgstr "" +"两个新的示例脚本 :file:`tdemo_nim.py` 和 :file:`tdemo_round_dance.py` 被加入到 " +":file:`Lib/turtledemo` 目录中。" diff --git a/library/types.po b/library/types.po new file mode 100644 index 000000000..819065b13 --- /dev/null +++ b/library/types.po @@ -0,0 +1,589 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) 2001-2024, Python Software Foundation +# This file is distributed under the same license as the Python package. +# FIRST AUTHOR , YEAR. +# +# Translators: +# Freesand Leo , 2022 +# Rafael Fontenelle , 2024 +# +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: Python 3.9\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2024-08-30 16:51+0000\n" +"PO-Revision-Date: 2017-02-16 23:32+0000\n" +"Last-Translator: Rafael Fontenelle , 2024\n" +"Language-Team: Chinese (China) (https://app.transifex.com/python-doc/teams/5390/zh_CN/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: zh_CN\n" +"Plural-Forms: nplurals=1; plural=0;\n" + +#: ../../library/types.rst:2 +msgid ":mod:`types` --- Dynamic type creation and names for built-in types" +msgstr ":mod:`types` --- 动态类型创建和内置类型名称" + +#: ../../library/types.rst:7 +msgid "**Source code:** :source:`Lib/types.py`" +msgstr "**源代码:** :source:`Lib/types.py`" + +#: ../../library/types.rst:11 +msgid "" +"This module defines utility functions to assist in dynamic creation of new " +"types." +msgstr "此模块定义了一些工具函数,用于协助动态创建新的类型。" + +#: ../../library/types.rst:14 +msgid "" +"It also defines names for some object types that are used by the standard " +"Python interpreter, but not exposed as builtins like :class:`int` or " +":class:`str` are." +msgstr "" +"它还为某些对象类型定义了名称,这些名称由标准 Python 解释器所使用,但并不像内置的 :class:`int` 或 :class:`str` " +"那样对外公开。" + +#: ../../library/types.rst:18 +msgid "" +"Finally, it provides some additional type-related utility classes and " +"functions that are not fundamental enough to be builtins." +msgstr "最后,它还额外提供了一些类型相关但重要程度不足以作为内置对象的工具类和函数。" + +#: ../../library/types.rst:23 +msgid "Dynamic Type Creation" +msgstr "动态类型创建" + +#: ../../library/types.rst:27 +msgid "Creates a class object dynamically using the appropriate metaclass." +msgstr "使用适当的元类动态地创建一个类对象。" + +#: ../../library/types.rst:29 +msgid "" +"The first three arguments are the components that make up a class definition" +" header: the class name, the base classes (in order), the keyword arguments " +"(such as ``metaclass``)." +msgstr "前三个参数是组成类定义头的部件:类名称,基类 (有序排列),关键字参数 (例如 ``metaclass``)。" + +#: ../../library/types.rst:33 +msgid "" +"The *exec_body* argument is a callback that is used to populate the freshly " +"created class namespace. It should accept the class namespace as its sole " +"argument and update the namespace directly with the class contents. If no " +"callback is provided, it has the same effect as passing in ``lambda ns: " +"None``." +msgstr "" +"*exec_body* 参数是一个回调函数,用于填充新创建类的命名空间。 它应当接受类命名空间作为其唯一的参数并使用类内容直接更新命名空间。 " +"如果未提供回调函数,则它就等效于传入 ``lambda ns: None``。" + +#: ../../library/types.rst:43 +msgid "Calculates the appropriate metaclass and creates the class namespace." +msgstr "计算适当的元类并创建类命名空间。" + +#: ../../library/types.rst:45 +msgid "" +"The arguments are the components that make up a class definition header: the" +" class name, the base classes (in order) and the keyword arguments (such as " +"``metaclass``)." +msgstr "参数是组成类定义头的部件:类名称,基类 (有序排列) 以及关键字参数 (例如 ``metaclass``)。" + +#: ../../library/types.rst:49 +msgid "The return value is a 3-tuple: ``metaclass, namespace, kwds``" +msgstr "返回值是一个 3 元组: ``metaclass, namespace, kwds``" + +#: ../../library/types.rst:51 +msgid "" +"*metaclass* is the appropriate metaclass, *namespace* is the prepared class " +"namespace and *kwds* is an updated copy of the passed in *kwds* argument " +"with any ``'metaclass'`` entry removed. If no *kwds* argument is passed in, " +"this will be an empty dict." +msgstr "" +"*metaclass* 是适当的元类,*namespace* 是预备好的类命名空间而 *kwds* 是所传入 *kwds* 参数移除每个 " +"``'metaclass'`` 条目后的已更新副本。 如果未传入 *kwds* 参数,这将为一个空字典。" + +#: ../../library/types.rst:60 +msgid "" +"The default value for the ``namespace`` element of the returned tuple has " +"changed. Now an insertion-order-preserving mapping is used when the " +"metaclass does not have a ``__prepare__`` method." +msgstr "" +"所返回元组中 ``namespace`` 元素的默认值已被改变。 现在当元类没有 ``__prepare__`` 方法时将会使用一个保留插入顺序的映射。" + +#: ../../library/types.rst:67 +msgid ":ref:`metaclasses`" +msgstr ":ref:`metaclasses`" + +#: ../../library/types.rst:67 +msgid "" +"Full details of the class creation process supported by these functions" +msgstr "这些函数所支持的类创建过程的完整细节" + +#: ../../library/types.rst:69 +msgid ":pep:`3115` - Metaclasses in Python 3000" +msgstr ":pep:`3115` - Python 3000 中的元类" + +#: ../../library/types.rst:70 +msgid "Introduced the ``__prepare__`` namespace hook" +msgstr "引入 ``__prepare__`` 命名空间钩子" + +#: ../../library/types.rst:74 +msgid "Resolve MRO entries dynamically as specified by :pep:`560`." +msgstr "动态地解析 MRO 条目,具体描述见 :pep:`560`。" + +#: ../../library/types.rst:76 +msgid "" +"This function looks for items in *bases* that are not instances of " +":class:`type`, and returns a tuple where each such object that has an " +"``__mro_entries__`` method is replaced with an unpacked result of calling " +"this method. If a *bases* item is an instance of :class:`type`, or it " +"doesn't have an ``__mro_entries__`` method, then it is included in the " +"return tuple unchanged." +msgstr "" +"此函数会在 *bases* 中查找不是 :class:`type` 的实例的项,并返回一个元组,其中每个具有 ``__mro_entries__`` " +"方法的此种对象对象将被替换为调用该方法解包后的结果。 如果一个 *bases* 项是 :class:`type` 的实例,或它不具有 " +"``__mro_entries__`` 方法,则它将不加改变地被包含在返回的元组中。" + +#: ../../library/types.rst:87 +msgid ":pep:`560` - Core support for typing module and generic types" +msgstr ":pep:`560` - 对 typing 模块和泛型类型的核心支持" + +#: ../../library/types.rst:91 +msgid "Standard Interpreter Types" +msgstr "标准解释器类型" + +#: ../../library/types.rst:93 +msgid "" +"This module provides names for many of the types that are required to " +"implement a Python interpreter. It deliberately avoids including some of the" +" types that arise only incidentally during processing such as the " +"``listiterator`` type." +msgstr "" +"此模块为许多类型提供了实现 Python 解释器所要求的名称。 它刻意地避免了包含某些仅在处理过程中偶然出现的类型,例如 " +"``listiterator`` 类型。" + +#: ../../library/types.rst:98 +msgid "" +"Typical use of these names is for :func:`isinstance` or :func:`issubclass` " +"checks." +msgstr "此种名称的典型应用如 :func:`isinstance` 或 :func:`issubclass` 检测。" + +#: ../../library/types.rst:102 +msgid "" +"If you instantiate any of these types, note that signatures may vary between" +" Python versions." +msgstr "如果你要实例化这些类型中的任何一种,请注意其签名在不同 Python 版本之间可能出现变化。" + +#: ../../library/types.rst:104 +msgid "Standard names are defined for the following types:" +msgstr "以下类型有相应的标准名称定义:" + +#: ../../library/types.rst:109 +msgid "" +"The type of user-defined functions and functions created by " +":keyword:`lambda` expressions." +msgstr "用户自定义函数以及由 :keyword:`lambda` 表达式所创建函数的类型。" + +#: ../../library/types.rst:112 +msgid "" +"Raises an :ref:`auditing event ` ``function.__new__`` with " +"argument ``code``." +msgstr "引发一个 :ref:`审计事件 ` ``function.__new__`` 并附带参数 ``code``。" + +#: ../../library/types.rst:114 +msgid "" +"The audit event only occurs for direct instantiation of function objects, " +"and is not raised for normal compilation." +msgstr "此审计事件只会被函数对象的直接实例化引发,而不会被普通编译所引发。" + +#: ../../library/types.rst:120 +msgid "" +"The type of :term:`generator`-iterator objects, created by generator " +"functions." +msgstr ":term:`generator` 迭代器对象的类型,由生成器函数创建。" + +#: ../../library/types.rst:126 +msgid "" +"The type of :term:`coroutine` objects, created by :keyword:`async def` " +"functions." +msgstr ":term:`coroutine` 对象的类型,由 :keyword:`async def` 函数创建。" + +#: ../../library/types.rst:134 +msgid "" +"The type of :term:`asynchronous generator`-iterator objects, created by " +"asynchronous generator functions." +msgstr ":term:`asynchronous generator` 迭代器对象的类型,由异步生成器函数创建。" + +#: ../../library/types.rst:144 +msgid "The type for code objects such as returned by :func:`compile`." +msgstr "代码对象的类型,例如 :func:`compile` 的返回值。" + +#: ../../library/types.rst:146 +msgid "" +"Raises an :ref:`auditing event ` ``code.__new__`` with arguments " +"``code``, ``filename``, ``name``, ``argcount``, ``posonlyargcount``, " +"``kwonlyargcount``, ``nlocals``, ``stacksize``, ``flags``." +msgstr "" +"引发一个 :ref:`审计事件 ` ``code.__new__`` 并附带参数 ``code``, ``filename``, " +"``name``, ``argcount``, ``posonlyargcount``, ``kwonlyargcount``, " +"``nlocals``, ``stacksize``, ``flags``。" + +#: ../../library/types.rst:148 +msgid "" +"Note that the audited arguments may not match the names or positions " +"required by the initializer. The audit event only occurs for direct " +"instantiation of code objects, and is not raised for normal compilation." +msgstr "请注意被审计的参数可能与初始化代码所要求的名称或位置不相匹配。 审计事件只会被代码对象的直接实例化引发,而不会被普通编译所引发。" + +#: ../../library/types.rst:154 +msgid "" +"Return a copy of the code object with new values for the specified fields." +msgstr "返回代码对象的一个副本,使用指定的新字段值。" + +#: ../../library/types.rst:160 +msgid "" +"The type for cell objects: such objects are used as containers for a " +"function's free variables." +msgstr "单元对象的类型:这种对象被用作函数中自由变量的容器。" + +#: ../../library/types.rst:168 +msgid "The type of methods of user-defined class instances." +msgstr "用户自定义类实例方法的类型。" + +#: ../../library/types.rst:174 +msgid "" +"The type of built-in functions like :func:`len` or :func:`sys.exit`, and " +"methods of built-in classes. (Here, the term \"built-in\" means \"written " +"in C\".)" +msgstr "" +"内置函数例如 :func:`len` 或 :func:`sys.exit` 以及内置类方法的类型。 (这里所说的“内置”是指“以 C 语言编写”。)" + +#: ../../library/types.rst:181 +msgid "" +"The type of methods of some built-in data types and base classes such as " +":meth:`object.__init__` or :meth:`object.__lt__`." +msgstr "某些内置数据类型和基类的方法的类型,例如 :meth:`object.__init__` 或 :meth:`object.__lt__`。" + +#: ../../library/types.rst:189 +msgid "" +"The type of *bound* methods of some built-in data types and base classes. " +"For example it is the type of :code:`object().__str__`." +msgstr "某些内置数据类型和基类的 *绑定* 方法的类型。 例如 :code:`object().__str__` 所属的类型。" + +#: ../../library/types.rst:197 +msgid "" +"The type of methods of some built-in data types such as :meth:`str.join`." +msgstr "某些内置数据类型方法例如 :meth:`str.join` 的类型。" + +#: ../../library/types.rst:204 +msgid "" +"The type of *unbound* class methods of some built-in data types such as " +"``dict.__dict__['fromkeys']``." +msgstr "某些内置数据类型 *非绑定* 类方法例如 ``dict.__dict__['fromkeys']`` 的类型。" + +#: ../../library/types.rst:212 +msgid "" +"The type of :term:`modules `. The constructor takes the name of the " +"module to be created and optionally its :term:`docstring`." +msgstr ":term:`模块 ` 的类型。 构造器接受待创建模块的名称并以其 :term:`docstring` 作为可选参数。" + +#: ../../library/types.rst:216 +msgid "" +"Use :func:`importlib.util.module_from_spec` to create a new module if you " +"wish to set the various import-controlled attributes." +msgstr "" +"如果你希望设置各种由导入控制的属性,请使用 :func:`importlib.util.module_from_spec` 来创建一个新模块。" + +#: ../../library/types.rst:221 +msgid "The :term:`docstring` of the module. Defaults to ``None``." +msgstr "模块的 :term:`docstring`。 默认为 ``None``。" + +#: ../../library/types.rst:225 +msgid "The :term:`loader` which loaded the module. Defaults to ``None``." +msgstr "用于加载模块的 :term:`loader`。 默认为 ``None``。" + +#: ../../library/types.rst:227 +msgid "" +"This attribute is to match :attr:`importlib.machinery.ModuleSpec.loader` as " +"stored in the attr:`__spec__` object." +msgstr "" +"此属性会匹配保存在 attr:`__spec__` 对象中的 " +":attr:`importlib.machinery.ModuleSpec.loader`。" + +#: ../../library/types.rst:231 +msgid "" +"A future version of Python may stop setting this attribute by default. To " +"guard against this potential change, preferably read from the " +":attr:`__spec__` attribute instead or use ``getattr(module, \"__loader__\", " +"None)`` if you explicitly need to use this attribute." +msgstr "" +"未来的 Python 版本可能会停止默认设置此属性。 为了避免这个潜在变化的影响,如果你明确地需要使用此属性则推荐改从 :attr:`__spec__`" +" 属性读取或是使用 ``getattr(module, \"__loader__\", None)``。" + +#: ../../library/types.rst:237 ../../library/types.rst:262 +msgid "Defaults to ``None``. Previously the attribute was optional." +msgstr "默认为 ``None``。 之前该属性为可选项。" + +#: ../../library/types.rst:242 +msgid "" +"The name of the module. Expected to match " +":attr:`importlib.machinery.ModuleSpec.name`." +msgstr "模块的名称。 应当能匹配 :attr:`importlib.machinery.ModuleSpec.name`。" + +#: ../../library/types.rst:247 +msgid "" +"Which :term:`package` a module belongs to. If the module is top-level (i.e. " +"not a part of any specific package) then the attribute should be set to " +"``''``, else it should be set to the name of the package (which can be " +":attr:`__name__` if the module is a package itself). Defaults to ``None``." +msgstr "" +"一个模块所属的 :term:`package`。 如果模块为最高层级的(即不是任何特定包的组成部分)则该属性应设为 " +"``''``,否则它应设为特定包的名称 (如果模块本身也是一个包则名称可以为 :attr:`__name__`)。 默认为 ``None``。" + +#: ../../library/types.rst:252 +msgid "" +"This attribute is to match :attr:`importlib.machinery.ModuleSpec.parent` as " +"stored in the attr:`__spec__` object." +msgstr "" +"此属性会匹配保存在 attr:`__spec__` 对象中的 " +":attr:`importlib.machinery.ModuleSpec.parent`。" + +#: ../../library/types.rst:256 +msgid "" +"A future version of Python may stop setting this attribute by default. To " +"guard against this potential change, preferably read from the " +":attr:`__spec__` attribute instead or use ``getattr(module, \"__package__\"," +" None)`` if you explicitly need to use this attribute." +msgstr "" +"未来的 Python 版本可能停止默认设置此属性。 为了避免这个潜在变化的影响,如果你明确地需要使用此属性则推荐改从 :attr:`__spec__` " +"属性读取或是使用 ``getattr(module, \"__package__\", None)``。" + +#: ../../library/types.rst:267 +msgid "" +"A record of the module's import-system-related state. Expected to be an " +"instance of :class:`importlib.machinery.ModuleSpec`." +msgstr "模块的导入系统相关状态的记录。 应当是一个 :class:`importlib.machinery.ModuleSpec` 的实例。" + +#: ../../library/types.rst:275 +msgid "" +"The type of :ref:`parameterized generics ` such as " +"``list[int]``." +msgstr ":ref:`形参化泛型 ` 的类型,例如 ``list[int]``。" + +#: ../../library/types.rst:278 +msgid "" +"``t_origin`` should be a non-parameterized generic class, such as ``list``, " +"``tuple`` or ``dict``. ``t_args`` should be a :class:`tuple` (possibly of " +"length 1) of types which parameterize ``t_origin``::" +msgstr "" +"``t_origin`` 应当是一个非形参化的泛型类,例如 ``list``, ``tuple`` 或 ``dict``。 ``t_args`` " +"应当是一个形参化 ``t_origin`` 的 :class:`tuple` (长度可以为 1)::" + +#: ../../library/types.rst:291 +msgid "This type can now be subclassed." +msgstr "此类型现在可以被子类化。" + +#: ../../library/types.rst:297 +msgid "The type of traceback objects such as found in ``sys.exc_info()[2]``." +msgstr "回溯对象的类型,例如 ``sys.exc_info()[2]`` 中的对象。" + +#: ../../library/types.rst:299 +msgid "" +"See :ref:`the language reference ` for details of the " +"available attributes and operations, and guidance on creating tracebacks " +"dynamically." +msgstr "请查看 :ref:`语言参考 ` 了解可用属性和操作的细节,以及动态地创建回溯对象的指南。" + +#: ../../library/types.rst:306 +msgid "" +"The type of frame objects such as found in ``tb.tb_frame`` if ``tb`` is a " +"traceback object." +msgstr "帧对象的类型,例如 ``tb.tb_frame`` 中的对象,其中 ``tb`` 是一个回溯对象。" + +#: ../../library/types.rst:309 +msgid "" +"See :ref:`the language reference ` for details of the " +"available attributes and operations." +msgstr "请查看 :ref:`语言参考 ` 了解可用属性和操作的细节。" + +#: ../../library/types.rst:315 +msgid "" +"The type of objects defined in extension modules with ``PyGetSetDef``, such " +"as ``FrameType.f_locals`` or ``array.array.typecode``. This type is used as" +" descriptor for object attributes; it has the same purpose as the " +":class:`property` type, but for classes defined in extension modules." +msgstr "" +"使用 ``PyGetSetDef`` 在扩展模块中定义的对象的类型,例如 ``FrameType.f_locals`` 或 " +"``array.array.typecode``。 此类型被用作对象属性的描述器;它的目的与 :class:`property` " +"类型相同,但专门针对在扩展模块中定义的类。" + +#: ../../library/types.rst:323 +msgid "" +"The type of objects defined in extension modules with ``PyMemberDef``, such " +"as ``datetime.timedelta.days``. This type is used as descriptor for simple " +"C data members which use standard conversion functions; it has the same " +"purpose as the :class:`property` type, but for classes defined in extension " +"modules." +msgstr "" +"使用 ``PyMemberDef`` 在扩展模块中定义的对象的类型,例如 ``datetime.timedelta.days``。 " +"此类型被用作使用标准转换函数的简单 C 数据成员的描述器;它的目的与 :class:`property` 类型相同,但专门针对在扩展模块中定义的类。" + +#: ../../library/types.rst:330 +msgid "" +"In other implementations of Python, this type may be identical to " +"``GetSetDescriptorType``." +msgstr "在 Python 的其它实现中,此类型可能与 ``GetSetDescriptorType`` 完全相同。" + +#: ../../library/types.rst:335 +msgid "" +"Read-only proxy of a mapping. It provides a dynamic view on the mapping's " +"entries, which means that when the mapping changes, the view reflects these " +"changes." +msgstr "一个映射的只读代理。 它提供了对映射条目的动态视图,这意味着当映射发生改变时,视图会反映这些改变。" + +#: ../../library/types.rst:343 +msgid "" +"Updated to support the new union (``|``) operator from :pep:`584`, which " +"simply delegates to the underlying mapping." +msgstr "更新为支持 :pep:`584` 所新增的合并 (``|``) 运算符,它会简单地委托给下层的映射。" + +#: ../../library/types.rst:348 +msgid "" +"Return ``True`` if the underlying mapping has a key *key*, else ``False``." +msgstr "如果下层的映射中存在键 *key* 则返回 ``True``,否则返回 ``False``。" + +#: ../../library/types.rst:353 +msgid "" +"Return the item of the underlying mapping with key *key*. Raises a " +":exc:`KeyError` if *key* is not in the underlying mapping." +msgstr "返回下层的映射中以 *key* 为键的项。 如果下层的映射中不存在键 *key* 则引发 :exc:`KeyError`。" + +#: ../../library/types.rst:358 +msgid "" +"Return an iterator over the keys of the underlying mapping. This is a " +"shortcut for ``iter(proxy.keys())``." +msgstr "返回由下层映射的键为元素的迭代器。 这是 ``iter(proxy.keys())`` 的快捷方式。" + +#: ../../library/types.rst:363 +msgid "Return the number of items in the underlying mapping." +msgstr "返回下层映射中的项数。" + +#: ../../library/types.rst:367 +msgid "Return a shallow copy of the underlying mapping." +msgstr "返回下层映射的浅拷贝。" + +#: ../../library/types.rst:371 +msgid "" +"Return the value for *key* if *key* is in the underlying mapping, else " +"*default*. If *default* is not given, it defaults to ``None``, so that this" +" method never raises a :exc:`KeyError`." +msgstr "" +"如果 *key* 存在于下层映射中则返回 *key* 的值,否则返回 *default*。 如果 *default* 未给出则默认为 " +"``None``,因而此方法绝不会引发 :exc:`KeyError`。" + +#: ../../library/types.rst:377 +msgid "" +"Return a new view of the underlying mapping's items (``(key, value)`` " +"pairs)." +msgstr "返回由下层映射的项 (``(键, 值)`` 对) 组成的一个新视图。" + +#: ../../library/types.rst:382 +msgid "Return a new view of the underlying mapping's keys." +msgstr "返回由下层映射的键组成的一个新视图。" + +#: ../../library/types.rst:386 +msgid "Return a new view of the underlying mapping's values." +msgstr "返回由下层映射的值组成的一个新视图。" + +#: ../../library/types.rst:390 +msgid "Return a reverse iterator over the keys of the underlying mapping." +msgstr "返回一个包含下层映射的键的反向迭代器。" + +#: ../../library/types.rst:396 +msgid "Additional Utility Classes and Functions" +msgstr "附加工具类和函数" + +#: ../../library/types.rst:400 +msgid "" +"A simple :class:`object` subclass that provides attribute access to its " +"namespace, as well as a meaningful repr." +msgstr "一个简单的 :class:`object` 子类,提供了访问其命名空间的属性,以及一个有意义的 repr。" + +#: ../../library/types.rst:403 +msgid "" +"Unlike :class:`object`, with ``SimpleNamespace`` you can add and remove " +"attributes. If a ``SimpleNamespace`` object is initialized with keyword " +"arguments, those are directly added to the underlying namespace." +msgstr "" +"不同于 :class:`object`,对于 ``SimpleNamespace`` 你可以添加和移除属性。 如果一个 " +"``SimpleNamespace`` 对象使用关键字参数进行初始化,这些参数会被直接加入下层命名空间。" + +#: ../../library/types.rst:407 +msgid "The type is roughly equivalent to the following code::" +msgstr "此类型大致等价于以下代码::" + +#: ../../library/types.rst:422 +msgid "" +"``SimpleNamespace`` may be useful as a replacement for ``class NS: pass``. " +"However, for a structured record type use :func:`~collections.namedtuple` " +"instead." +msgstr "" +"``SimpleNamespace`` 可被用于替代 ``class NS: pass``。 但是,对于结构化记录类型则应改用 " +":func:`~collections.namedtuple`。" + +#: ../../library/types.rst:428 +msgid "" +"Attribute order in the repr changed from alphabetical to insertion (like " +"``dict``)." +msgstr "repr 中的属性顺序由字母顺序改为插入顺序 (类似 ``dict``)。" + +#: ../../library/types.rst:434 +msgid "Route attribute access on a class to __getattr__." +msgstr "在类上访问 __getattr__ 的路由属性。" + +#: ../../library/types.rst:436 +msgid "" +"This is a descriptor, used to define attributes that act differently when " +"accessed through an instance and through a class. Instance access remains " +"normal, but access to an attribute through a class will be routed to the " +"class's __getattr__ method; this is done by raising AttributeError." +msgstr "" +"这是一个描述器,用于定义通过实例与通过类访问时具有不同行为的属性。 当实例访问时保持正常行为,但当类访问属性时将被路由至类的 __getattr__ " +"方法;这是通过引发 AttributeError 来完成的。" + +#: ../../library/types.rst:441 +msgid "" +"This allows one to have properties active on an instance, and have virtual " +"attributes on the class with the same name (see :class:`enum.Enum` for an " +"example)." +msgstr "这允许有在实例上激活的特性属性,同时又有在类上的同名虚拟属性 (一个例子请参见 :class:`enum.Enum`)。" + +#: ../../library/types.rst:448 +msgid "Coroutine Utility Functions" +msgstr "协程工具函数" + +#: ../../library/types.rst:452 +msgid "" +"This function transforms a :term:`generator` function into a " +":term:`coroutine function` which returns a generator-based coroutine. The " +"generator-based coroutine is still a :term:`generator iterator`, but is also" +" considered to be a :term:`coroutine` object and is :term:`awaitable`. " +"However, it may not necessarily implement the :meth:`__await__` method." +msgstr "" +"此函数可将 :term:`generator` 函数转换为返回基于生成器的协程的 :term:`coroutine function`。 " +"基于生成器的协程仍然属于 :term:`generator iterator`,但同时又可被视为 :term:`coroutine` 对象兼 " +":term:`awaitable`。 不过,它没有必要实现 :meth:`__await__` 方法。" + +#: ../../library/types.rst:459 +msgid "If *gen_func* is a generator function, it will be modified in-place." +msgstr "如果 *gen_func* 是一个生成器函数,它将被原地修改。" + +#: ../../library/types.rst:461 +msgid "" +"If *gen_func* is not a generator function, it will be wrapped. If it returns" +" an instance of :class:`collections.abc.Generator`, the instance will be " +"wrapped in an *awaitable* proxy object. All other types of objects will be " +"returned as is." +msgstr "" +"如果 *gen_func* 不是一个生成器函数,则它会被包装。 如果它返回一个 :class:`collections.abc.Generator` " +"的实例,该实例将被包装在一个 *awaitable* 代理对象中。 所有其他对象类型将被原样返回。" diff --git a/library/typing.po b/library/typing.po new file mode 100644 index 000000000..454c6c8d7 --- /dev/null +++ b/library/typing.po @@ -0,0 +1,2081 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) 2001-2024, Python Software Foundation +# This file is distributed under the same license as the Python package. +# FIRST AUTHOR , YEAR. +# +# Translators: +# ww song , 2018 +# JW H , 2019 +# MuSheng Chen , 2020 +# Xu Siyuan, 2020 +# jaystone776 <1732865113@qq.com>, 2021 +# Alpha Du , 2022 +# Jason Ren, 2023 +# Freesand Leo , 2023 +# Rafael Fontenelle , 2024 +# +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: Python 3.9\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2024-07-12 16:21+0000\n" +"PO-Revision-Date: 2017-02-16 23:32+0000\n" +"Last-Translator: Rafael Fontenelle , 2024\n" +"Language-Team: Chinese (China) (https://app.transifex.com/python-doc/teams/5390/zh_CN/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: zh_CN\n" +"Plural-Forms: nplurals=1; plural=0;\n" + +#: ../../library/typing.rst:3 +msgid ":mod:`typing` --- Support for type hints" +msgstr ":mod:`typing` —— 对类型提示的支持" + +#: ../../library/typing.rst:10 +msgid "**Source code:** :source:`Lib/typing.py`" +msgstr "**源代码:** :source:`Lib/typing.py`" + +#: ../../library/typing.rst:14 +msgid "" +"The Python runtime does not enforce function and variable type annotations. " +"They can be used by third party tools such as type checkers, IDEs, linters, " +"etc." +msgstr "Python 运行时不强制要求函数与变量类型注解。它们可被类型检查器、IDE、错误检查器等第三方工具使用。" + +#: ../../library/typing.rst:20 +msgid "" +"This module provides runtime support for type hints. The most fundamental " +"support consists of the types :data:`Any`, :data:`Union`, :data:`Callable`, " +":class:`TypeVar`, and :class:`Generic`. For a full specification, please see" +" :pep:`484`. For a simplified introduction to type hints, see :pep:`483`." +msgstr "" +"这个模块提供对类型提示的运行时支持。最基本的支持包括 :data:`Any` , :data:`Union` , :data:`Callable` , " +":class:`TypeVar` , 和 :class:`Generic` 。关于完整的规范,请参考 :pep:`484` " +"。关于类型提示的简化介绍,请参考 :pep:`483` 。" + +#: ../../library/typing.rst:26 +msgid "" +"The function below takes and returns a string and is annotated as follows::" +msgstr "下面的函数接收与返回的都是字符串,注解方式如下:" + +#: ../../library/typing.rst:31 +msgid "" +"In the function ``greeting``, the argument ``name`` is expected to be of " +"type :class:`str` and the return type :class:`str`. Subtypes are accepted as" +" arguments." +msgstr "" +"``greeting`` 函数中,参数 ``name`` 的类型应是 :class:`str`,返回类型是 " +":class:`str`。子类型也可以作为参数。" + +#: ../../library/typing.rst:35 +msgid "" +"New features are frequently added to the ``typing`` module. The " +"`typing_extensions `_ package " +"provides backports of these new features to older versions of Python." +msgstr "" +"新的功能频繁地被添加到 ``typing`` 模块中。`typing_extensions " +"`_ 包提供了这些新功能对旧版本 Python 的向后移植。" + +#: ../../library/typing.rst:42 +msgid "Relevant PEPs" +msgstr "相关的 PEP" + +#: ../../library/typing.rst:44 +msgid "" +"Since the initial introduction of type hints in :pep:`484` and :pep:`483`, a" +" number of PEPs have modified and enhanced Python's framework for type " +"annotations. These include:" +msgstr "" +"自从在 :pep:`484` 和 :pep:`483` 中首次引入类型提示以来,一些 PEP 已经修改和增强了 Python 的类型注释框架。包括:" + +#: ../../library/typing.rst:49 +msgid ":pep:`526`: Syntax for Variable Annotations" +msgstr ":pep:`526`: 变量注解的语法" + +#: ../../library/typing.rst:49 +msgid "" +"*Introducing* syntax for annotating variables outside of function " +"definitions, and :data:`ClassVar`" +msgstr "*引入* 在函数定义之外标注变量的语法,以及 :data:`ClassVar` 。" + +#: ../../library/typing.rst:52 +msgid ":pep:`544`: Protocols: Structural subtyping (static duck typing)" +msgstr ":pep:`544`: Protocol:结构子类型(静态鸭子类型)。" + +#: ../../library/typing.rst:52 +msgid "" +"*Introducing* :class:`Protocol` and the " +":func:`@runtime_checkable` decorator" +msgstr "" +"*引入* :class:`Protocol` 和 :func:`@runtime_checkable ` 装饰器。" + +#: ../../library/typing.rst:55 +msgid ":pep:`585`: Type Hinting Generics In Standard Collections" +msgstr ":pep:`585`: 标准集合中的类型提示泛型" + +#: ../../library/typing.rst:55 +msgid "" +"*Introducing* :class:`types.GenericAlias` and the ability to use standard " +"library classes as :ref:`generic types`" +msgstr "" +"*引入* :class:`types.GenericAlias` 和使用标准库类作为 :ref:`通用类型 ` " +"的能力。" + +#: ../../library/typing.rst:57 +msgid ":pep:`586`: Literal Types" +msgstr ":pep:`586`: 文字类型" + +#: ../../library/typing.rst:58 +msgid "*Introducing* :class:`Literal`" +msgstr "" + +#: ../../library/typing.rst:59 +msgid "" +":pep:`589`: TypedDict: Type Hints for Dictionaries with a Fixed Set of Keys" +msgstr ":pep:`589`: TypedDict: 具有固定键集的字典的类型提示" + +#: ../../library/typing.rst:60 +msgid "*Introducing* :class:`TypedDict`" +msgstr "*引入* :class:`TypedDict`" + +#: ../../library/typing.rst:61 +msgid ":pep:`591`: Adding a final qualifier to typing" +msgstr ":pep:`591`: 为 typing 添加最终限定符" + +#: ../../library/typing.rst:62 +msgid "*Introducing* :data:`Final` and the :func:`@final` decorator" +msgstr "*引入* :data:`Final` 和 :func:`@final` 装饰器" + +#: ../../library/typing.rst:64 +msgid ":pep:`593`: Flexible function and variable annotations" +msgstr ":pep:`593`: 灵活的函数和变量注解" + +#: ../../library/typing.rst:64 +msgid "*Introducing* :class:`Annotated`" +msgstr "" + +#: ../../library/typing.rst:67 +msgid "Type aliases" +msgstr "类型别名" + +#: ../../library/typing.rst:69 +msgid "" +"A type alias is defined by assigning the type to the alias. In this example," +" ``Vector`` and ``list[float]`` will be treated as interchangeable " +"synonyms::" +msgstr "" +"类型别名是通过为类型赋值为指定的别名来定义的。 在本例中,``Vector`` 和 ``list[float]`` 将被视为可互换的同义词::" + +#: ../../library/typing.rst:80 +msgid "" +"Type aliases are useful for simplifying complex type signatures. For " +"example::" +msgstr "类型别名适用于简化复杂的类型签名。例如:" + +#: ../../library/typing.rst:98 +msgid "" +"Note that ``None`` as a type hint is a special case and is replaced by " +"``type(None)``." +msgstr "注意,``None`` 能作为类型提示是一个特例,它会被自动替换为 ``type(None)``。" + +#: ../../library/typing.rst:104 +msgid "NewType" +msgstr "NewType" + +#: ../../library/typing.rst:106 +msgid "Use the :func:`NewType` helper to create distinct types::" +msgstr "" + +#: ../../library/typing.rst:113 +msgid "" +"The static type checker will treat the new type as if it were a subclass of " +"the original type. This is useful in helping catch logical errors::" +msgstr "静态类型检查器把新类型当作原始类型的子类,这种方式适用于捕捉逻辑错误:" + +#: ../../library/typing.rst:125 +msgid "" +"You may still perform all ``int`` operations on a variable of type " +"``UserId``, but the result will always be of type ``int``. This lets you " +"pass in a ``UserId`` wherever an ``int`` might be expected, but will prevent" +" you from accidentally creating a ``UserId`` in an invalid way::" +msgstr "" +"``UserId`` 类型的变量可执行所有 ``int`` 操作,但返回结果都是 ``int`` 类型。这种方式允许在预期 ``int`` 时传入 " +"``UserId``,还能防止意外创建无效的 ``UserId``:" + +#: ../../library/typing.rst:133 +msgid "" +"Note that these checks are enforced only by the static type checker. At " +"runtime, the statement ``Derived = NewType('Derived', Base)`` will make " +"``Derived`` a callable that immediately returns whatever parameter you pass " +"it. That means the expression ``Derived(some_value)`` does not create a new " +"class or introduce any overhead beyond that of a regular function call." +msgstr "" + +#: ../../library/typing.rst:139 +msgid "" +"More precisely, the expression ``some_value is Derived(some_value)`` is " +"always true at runtime." +msgstr "更确切地说,在运行时,``some_value is Derived(some_value)`` 表达式总为 True。" + +#: ../../library/typing.rst:142 +msgid "" +"This also means that it is not possible to create a subtype of ``Derived`` " +"since it is an identity function at runtime, not an actual type::" +msgstr "也就是说,不能创建 ``Derived`` 的子类型,因为,在运行时,它是标识函数,不是真正的类型:" + +#: ../../library/typing.rst:152 +msgid "" +"However, it is possible to create a :func:`NewType` based on a 'derived' " +"``NewType``::" +msgstr "然而,我们可以在 \"派生的\" ``NewType`` 的基础上创建一个 :class:`NewType`。" + +#: ../../library/typing.rst:160 +msgid "and typechecking for ``ProUserId`` will work as expected." +msgstr "同时,``ProUserId`` 的类型检查也可以按预期执行。" + +#: ../../library/typing.rst:162 +msgid "See :pep:`484` for more details." +msgstr "详见 :pep:`484`。" + +#: ../../library/typing.rst:166 +msgid "" +"Recall that the use of a type alias declares two types to be *equivalent* to" +" one another. Doing ``Alias = Original`` will make the static type checker " +"treat ``Alias`` as being *exactly equivalent* to ``Original`` in all cases. " +"This is useful when you want to simplify complex type signatures." +msgstr "" +"请记住使用类型别名将声明两个类型是相互 *等价* 的。 使用 ``Alias = Original`` 将使静态类型检查器在任何情况下都把 " +"``Alias`` 视为与 ``Original`` *完全等价*。 这在你想要简化复杂的类型签名时会很有用处。" + +#: ../../library/typing.rst:171 +msgid "" +"In contrast, ``NewType`` declares one type to be a *subtype* of another. " +"Doing ``Derived = NewType('Derived', Original)`` will make the static type " +"checker treat ``Derived`` as a *subclass* of ``Original``, which means a " +"value of type ``Original`` cannot be used in places where a value of type " +"``Derived`` is expected. This is useful when you want to prevent logic " +"errors with minimal runtime cost." +msgstr "" +"反之,``NewType`` 声明把一种类型当作另一种类型的 *子类型*。``Derived = NewType('Derived', " +"Original)`` 时,静态类型检查器把 ``Derived`` 当作 ``Original`` 的 *子类* ,即,``Original`` " +"类型的值不能用在预期 ``Derived`` 类型的位置。这种方式适用于以最小运行时成本防止逻辑错误。" + +#: ../../library/typing.rst:181 +msgid "Callable" +msgstr "可调对象(Callable)" + +#: ../../library/typing.rst:183 +msgid "" +"Frameworks expecting callback functions of specific signatures might be type" +" hinted using ``Callable[[Arg1Type, Arg2Type], ReturnType]``." +msgstr "" +"预期特定签名回调函数的框架可以用 ``Callable[[Arg1Type, Arg2Type], ReturnType]`` 实现类型提示。" + +#: ../../library/typing.rst:186 +msgid "For example::" +msgstr "例如:" + +#: ../../library/typing.rst:201 +msgid "" +"It is possible to declare the return type of a callable without specifying " +"the call signature by substituting a literal ellipsis for the list of " +"arguments in the type hint: ``Callable[..., ReturnType]``." +msgstr "" +"无需指定调用签名,用省略号字面量替换类型提示里的参数列表: ``Callable[..., ReturnType]``,就可以声明可调对象的返回类型。" + +#: ../../library/typing.rst:208 +msgid "Generics" +msgstr "泛型(Generic)" + +#: ../../library/typing.rst:210 +msgid "" +"Since type information about objects kept in containers cannot be statically" +" inferred in a generic way, abstract base classes have been extended to " +"support subscription to denote expected types for container elements." +msgstr "容器中,对象的类型信息不能以泛型方式静态推断,因此,抽象基类扩展支持下标,用于表示容器元素的预期类型。" + +#: ../../library/typing.rst:221 +msgid "" +"Generics can be parameterized by using a factory available in typing called " +":class:`TypeVar`." +msgstr "要参数化泛型,可使用 typing 中的 :class:`TypeVar` 工厂。" + +#: ../../library/typing.rst:237 +msgid "User-defined generic types" +msgstr "用户定义的泛型类型" + +#: ../../library/typing.rst:239 +msgid "A user-defined class can be defined as a generic class." +msgstr "用户定义的类可以定义为泛型类。" + +#: ../../library/typing.rst:265 +msgid "" +"``Generic[T]`` as a base class defines that the class ``LoggedVar`` takes a " +"single type parameter ``T`` . This also makes ``T`` valid as a type within " +"the class body." +msgstr "" +"``Generic[T]`` 是定义类 ``LoggedVar`` 的基类,该类使用单类型参数 ``T``。在该类体内,``T`` 是有效的类型。" + +#: ../../library/typing.rst:269 +msgid "" +"The :class:`Generic` base class defines :meth:`~object.__class_getitem__` so" +" that ``LoggedVar[t]`` is valid as a type::" +msgstr "" +":class:`Generic` 基类定义了 :meth:`~object.__class_getitem__` " +",因此,``LoggedVar[t]`` 也是有效类型:" + +#: ../../library/typing.rst:278 +msgid "" +"A generic type can have any number of type variables. All varieties of " +":class:`TypeVar` are permissible as parameters for a generic type::" +msgstr "一个泛型可以有任何数量的类型变量。所有种类的 :class:`TypeVar` 都可以作为泛型的参数::" + +#: ../../library/typing.rst:290 +msgid "" +"Each type variable argument to :class:`Generic` must be distinct. This is " +"thus invalid::" +msgstr ":class:`Generic` 类型变量的参数应各不相同。下列代码就是无效的:" + +#: ../../library/typing.rst:301 +msgid "You can use multiple inheritance with :class:`Generic`::" +msgstr "您可以通过 :class:`Generic` 来使用多重继承:" + +#: ../../library/typing.rst:311 +msgid "" +"When inheriting from generic classes, some type variables could be fixed::" +msgstr "继承自泛型类时,可以修正某些类型变量:" + +#: ../../library/typing.rst:321 +msgid "In this case ``MyDict`` has a single parameter, ``T``." +msgstr "在这个例子中,``MyDict`` 就只有一个参数 ``T``。" + +#: ../../library/typing.rst:323 +msgid "" +"Using a generic class without specifying type parameters assumes :data:`Any`" +" for each position. In the following example, ``MyIterable`` is not generic " +"but implicitly inherits from ``Iterable[Any]``::" +msgstr "" +"未指定泛型类的类型参数时,每个位置的类型都预设为 :data:`Any`。下例中,``MyIterable`` 不是泛型,但却隐式继承了 " +"``Iterable[Any]``:" + +#: ../../library/typing.rst:331 +msgid "User defined generic type aliases are also supported. Examples::" +msgstr "还支持用户定义的泛型类型别名。例如:" + +#: ../../library/typing.rst:348 +msgid ":class:`Generic` no longer has a custom metaclass." +msgstr ":class:`Generic` 不再支持自定义元类。" + +#: ../../library/typing.rst:351 +msgid "" +"A user-defined generic class can have ABCs as base classes without a " +"metaclass conflict. Generic metaclasses are not supported. The outcome of " +"parameterizing generics is cached, and most types in the typing module are " +"hashable and comparable for equality." +msgstr "" +"抽象基类可作为用户定义的泛型类的基类,且不会与元类冲突。现已不再支持泛型元类。参数化泛型的输出结果会被缓存,typing " +"模块的大多数类型都可哈希、可进行等价对比。" + +#: ../../library/typing.rst:358 +msgid "The :data:`Any` type" +msgstr ":data:`Any` 类型" + +#: ../../library/typing.rst:360 +msgid "" +"A special kind of type is :data:`Any`. A static type checker will treat " +"every type as being compatible with :data:`Any` and :data:`Any` as being " +"compatible with every type." +msgstr "" +":data:`Any` 是一种特殊的类型。静态类型检查器认为所有类型均与 :data:`Any` 兼容,同样,:data:`Any` 也与所有类型兼容。" + +#: ../../library/typing.rst:364 +msgid "" +"This means that it is possible to perform any operation or method call on a " +"value of type :data:`Any` and assign it to any variable::" +msgstr "也就是说,可对 :data:`Any` 类型的值执行任何操作或方法调用,并赋值给任意变量:" + +#: ../../library/typing.rst:382 +msgid "" +"Notice that no typechecking is performed when assigning a value of type " +":data:`Any` to a more precise type. For example, the static type checker did" +" not report an error when assigning ``a`` to ``s`` even though ``s`` was " +"declared to be of type :class:`str` and receives an :class:`int` value at " +"runtime!" +msgstr "" +"注意,:data:`Any` 类型的值赋给更精确的类型时,不执行类型检查。例如,把 ``a`` 赋给 ``s``,在运行时,即便 ``s`` 已声明为 " +":class:`str` 类型,但接收 :class:`int` 值时,静态类型检查器也不会报错。" + +#: ../../library/typing.rst:388 +msgid "" +"Furthermore, all functions without a return type or parameter types will " +"implicitly default to using :data:`Any`::" +msgstr "此外,未指定返回值与参数类型的函数,都隐式地默认使用 :data:`Any`:" + +#: ../../library/typing.rst:401 +msgid "" +"This behavior allows :data:`Any` to be used as an *escape hatch* when you " +"need to mix dynamically and statically typed code." +msgstr "需要混用动态与静态类型代码时,此操作把 :data:`Any` 当作 *应急出口*。" + +#: ../../library/typing.rst:404 +msgid "" +"Contrast the behavior of :data:`Any` with the behavior of :class:`object`. " +"Similar to :data:`Any`, every type is a subtype of :class:`object`. However," +" unlike :data:`Any`, the reverse is not true: :class:`object` is *not* a " +"subtype of every other type." +msgstr "" +":data:`Any` 和 :class:`object` 的区别。与 :data:`Any` 相似,所有类型都是 :class:`object` " +"的子类型。然而,与 :data:`Any` 不同,object 不可逆::class:`object` *不是* 其它类型的子类型。" + +#: ../../library/typing.rst:409 +msgid "" +"That means when the type of a value is :class:`object`, a type checker will " +"reject almost all operations on it, and assigning it to a variable (or using" +" it as a return value) of a more specialized type is a type error. For " +"example::" +msgstr "" +"就是说,值的类型是 :class:`object` " +"时,类型检查器几乎会拒绝所有对它的操作,并且,把它赋给更精确的类型变量(或返回值)属于类型错误。例如:" + +#: ../../library/typing.rst:431 +msgid "" +"Use :class:`object` to indicate that a value could be any type in a typesafe" +" manner. Use :data:`Any` to indicate that a value is dynamically typed." +msgstr "使用 :class:`object`,说明值能以类型安全的方式转为任何类型。使用 :data:`Any`,说明值是动态类型。" + +#: ../../library/typing.rst:436 +msgid "Nominal vs structural subtyping" +msgstr "名义子类型 vs 结构子类型" + +#: ../../library/typing.rst:438 +msgid "" +"Initially :pep:`484` defined the Python static type system as using *nominal" +" subtyping*. This means that a class ``A`` is allowed where a class ``B`` is" +" expected if and only if ``A`` is a subclass of ``B``." +msgstr "" +"最初 :pep:`484` 将 Python 静态类型系统定义为使用 *名义子类型*。这意味着当且仅当类 ``A`` 是 ``B`` " +"的子类时,才满足有类 ``B`` 预期时使用类 ``A`` 。" + +#: ../../library/typing.rst:442 +msgid "" +"This requirement previously also applied to abstract base classes, such as " +":class:`~collections.abc.Iterable`. The problem with this approach is that a" +" class had to be explicitly marked to support them, which is unpythonic and " +"unlike what one would normally do in idiomatic dynamically typed Python " +"code. For example, this conforms to :pep:`484`::" +msgstr "" +"此项要求以前也适用于抽象基类,例如,:class:`~collections.abc.Iterable` " +"。这种方式的问题在于,定义类时必须显式说明,既不 Pythonic,也不是动态类型式 Python 代码的惯用写法。例如,下列代码就遵从了 " +":pep:`484` 的规范:" + +#: ../../library/typing.rst:455 +msgid "" +":pep:`544` allows to solve this problem by allowing users to write the above" +" code without explicit base classes in the class definition, allowing " +"``Bucket`` to be implicitly considered a subtype of both ``Sized`` and " +"``Iterable[int]`` by static type checkers. This is known as *structural " +"subtyping* (or static duck-typing)::" +msgstr "" +":pep:`544` 允许用户在类定义时不显式说明基类,从而解决了这一问题,静态类型检查器隐式认为 ``Bucket`` 既是 ``Sized`` " +"的子类型,又是 ``Iterable[int]`` 的子类型。这就是 *结构子类型* (又称为静态鸭子类型):" + +#: ../../library/typing.rst:471 +msgid "" +"Moreover, by subclassing a special class :class:`Protocol`, a user can " +"define new custom protocols to fully enjoy structural subtyping (see " +"examples below)." +msgstr "此外,结构子类型的优势在于,通过继承特殊类 :class:`Protocol` ,用户可以定义新的自定义协议(见下文中的例子)。" + +#: ../../library/typing.rst:476 +msgid "Module contents" +msgstr "模块内容" + +#: ../../library/typing.rst:478 +msgid "The module defines the following classes, functions and decorators." +msgstr "本模块定义了下列类、函数和修饰器。" + +#: ../../library/typing.rst:482 +msgid "" +"This module defines several types that are subclasses of pre-existing " +"standard library classes which also extend :class:`Generic` to support type " +"variables inside ``[]``. These types became redundant in Python 3.9 when the" +" corresponding pre-existing classes were enhanced to support ``[]``." +msgstr "" +"本模块定义了一些类型,作为标准库中已有的类的子类,从而可以让 :class:`Generic` 支持 ``[]`` 中的类型变量。Python 3.9 " +"中,这些标准库的类已支持 ``[]`` ,因此,这些类型就变得冗余了。" + +#: ../../library/typing.rst:488 +msgid "" +"The redundant types are deprecated as of Python 3.9 but no deprecation " +"warnings will be issued by the interpreter. It is expected that type " +"checkers will flag the deprecated types when the checked program targets " +"Python 3.9 or newer." +msgstr "" +"Python 3.9 弃用了这些冗余类型,但解释器并未提供相应的弃用警告。标记弃用类型的工作留待支持 Python 3.9 及以上版本的类型检查器实现。" + +#: ../../library/typing.rst:493 +msgid "" +"The deprecated types will be removed from the :mod:`typing` module in the " +"first Python version released 5 years after the release of Python 3.9.0. See" +" details in :pep:`585`—*Type Hinting Generics In Standard Collections*." +msgstr "" +"Python 3.9.0 发布五年后的首个 Python 发行版将从 :mod:`typing` 模块中移除这些弃用类型。详见 :pep:`585` " +"《*标准集合的类型提示泛型*》。" + +#: ../../library/typing.rst:499 +msgid "Special typing primitives" +msgstr "特殊类型原语" + +#: ../../library/typing.rst:502 +msgid "Special types" +msgstr "特殊类型" + +#: ../../library/typing.rst:504 +msgid "These can be used as types in annotations and do not support ``[]``." +msgstr "这些类型可用于类型注解,但不支持 ``[]``。" + +#: ../../library/typing.rst:508 +msgid "Special type indicating an unconstrained type." +msgstr "特殊类型,表示没有约束的类型。" + +#: ../../library/typing.rst:510 +msgid "Every type is compatible with :data:`Any`." +msgstr "所有类型都与 :data:`Any` 兼容。" + +#: ../../library/typing.rst:511 +msgid ":data:`Any` is compatible with every type." +msgstr ":data:`Any` 与所有类型都兼容。" + +#: ../../library/typing.rst:515 +msgid "Special type indicating that a function never returns. For example::" +msgstr "标记没有返回值的函数的特殊类型。例如:" + +#: ../../library/typing.rst:527 +msgid "Special forms" +msgstr "特殊形式" + +#: ../../library/typing.rst:529 +msgid "" +"These can be used as types in annotations using ``[]``, each having a unique" +" syntax." +msgstr "可用于类型注解,且支持 ``[]`` ,每种形式都有其独特的句法。" + +#: ../../library/typing.rst:533 +msgid "" +"Tuple type; ``Tuple[X, Y]`` is the type of a tuple of two items with the " +"first item of type X and the second of type Y. The type of the empty tuple " +"can be written as ``Tuple[()]``." +msgstr "" +"元组类型; ``Tuple[X, Y]`` 是二项元组类型,第一个元素的类型是 X,第二个元素的类型是 Y。空元组的类型可写为 " +"``Tuple[()]``。" + +#: ../../library/typing.rst:537 +msgid "" +"Example: ``Tuple[T1, T2]`` is a tuple of two elements corresponding to type " +"variables T1 and T2. ``Tuple[int, float, str]`` is a tuple of an int, a " +"float and a string." +msgstr "" +"例:``Tuple[T1, T2]`` 是二项元组,类型变量分别为 T1 和 T2。``Tuple[int, float, str]`` " +"是由整数、浮点数、字符串组成的三项元组。" + +#: ../../library/typing.rst:541 +msgid "" +"To specify a variable-length tuple of homogeneous type, use literal " +"ellipsis, e.g. ``Tuple[int, ...]``. A plain :data:`Tuple` is equivalent to " +"``Tuple[Any, ...]``, and in turn to :class:`tuple`." +msgstr "" +"可用省略号字面量指定同质变长元组,例如,``Tuple[int, ...]`` 。:data:`Tuple` 与 ``Tuple[Any, ...]``" +" 等价,也与 :class:`tuple` 等价。" + +#: ../../library/typing.rst:545 +msgid "" +":class:`builtins.tuple ` now supports ``[]``. See :pep:`585` and " +":ref:`types-genericalias`." +msgstr "" +":class:`builtins.tuple ` 现已支持 ``[]``。详见 :pep:`585` 与 :ref:`types-" +"genericalias`。" + +#: ../../library/typing.rst:551 +msgid "Union type; ``Union[X, Y]`` means either X or Y." +msgstr "联合类型;``Union[X, Y]`` 的意思是,非 X 即 Y。" + +#: ../../library/typing.rst:553 +msgid "To define a union, use e.g. ``Union[int, str]``. Details:" +msgstr "可用 ``Union[int, str]`` 等形式定义联合类型。 具体如下:" + +#: ../../library/typing.rst:555 +msgid "The arguments must be types and there must be at least one." +msgstr "参数必须是某种类型,且至少有一个。" + +#: ../../library/typing.rst:557 +msgid "Unions of unions are flattened, e.g.::" +msgstr "联合类型之联合类型会被展平,例如:" + +#: ../../library/typing.rst:561 +msgid "Unions of a single argument vanish, e.g.::" +msgstr "单参数之联合类型就是该参数自身,例如:" + +#: ../../library/typing.rst:565 +msgid "Redundant arguments are skipped, e.g.::" +msgstr "冗余的参数会被跳过,例如:" + +#: ../../library/typing.rst:569 +msgid "When comparing unions, the argument order is ignored, e.g.::" +msgstr "比较联合类型,不涉及参数顺序,例如:" + +#: ../../library/typing.rst:573 +msgid "You cannot subclass or instantiate a union." +msgstr "联合类型不能作为子类,也不能实例化。" + +#: ../../library/typing.rst:575 +msgid "You cannot write ``Union[X][Y]``." +msgstr "没有 ``Union[X][Y]`` 这种写法。" + +#: ../../library/typing.rst:577 +msgid "You can use ``Optional[X]`` as a shorthand for ``Union[X, None]``." +msgstr "``Optional[X]`` 是 ``Union[X, None]`` 的缩写。" + +#: ../../library/typing.rst:579 +msgid "Don't remove explicit subclasses from unions at runtime." +msgstr "在运行时,不要移除联合类型中的显式子类。" + +#: ../../library/typing.rst:584 +msgid "Optional type." +msgstr "可选类型。" + +#: ../../library/typing.rst:586 +msgid "``Optional[X]`` is equivalent to ``Union[X, None]``." +msgstr " ``Optional[X]`` 等价于 ``Union[X, None]`` 。" + +#: ../../library/typing.rst:588 +msgid "" +"Note that this is not the same concept as an optional argument, which is one" +" that has a default. An optional argument with a default does not require " +"the ``Optional`` qualifier on its type annotation just because it is " +"optional. For example::" +msgstr "" +"注意,可选类型与含默认值的可选参数不同。含默认值的可选参数不需要在类型注解上添加 ``Optional`` 限定符,因为它仅是可选的。例如:" + +#: ../../library/typing.rst:596 +msgid "" +"On the other hand, if an explicit value of ``None`` is allowed, the use of " +"``Optional`` is appropriate, whether the argument is optional or not. For " +"example::" +msgstr "另一方面,显式应用 ``None`` 值时,不管该参数是否可选, ``Optional`` 都适用。例如:" + +#: ../../library/typing.rst:605 +msgid "Callable type; ``Callable[[int], str]`` is a function of (int) -> str." +msgstr "可调类型; ``Callable[[int], str]`` 是把(int)转为 str 的函数。" + +#: ../../library/typing.rst:607 +msgid "" +"The subscription syntax must always be used with exactly two values: the " +"argument list and the return type. The argument list must be a list of " +"types or an ellipsis; the return type must be a single type." +msgstr "下标句法必须与参数列表和返回类型这两个值一起使用。参数列表只能是类型列表或省略号;返回类型只能是单一类型。" + +#: ../../library/typing.rst:612 +msgid "" +"There is no syntax to indicate optional or keyword arguments; such function " +"types are rarely used as callback types. ``Callable[..., ReturnType]`` " +"(literal ellipsis) can be used to type hint a callable taking any number of " +"arguments and returning ``ReturnType``. A plain :data:`Callable` is " +"equivalent to ``Callable[..., Any]``, and in turn to " +":class:`collections.abc.Callable`." +msgstr "" +"没有说明可选参数或关键字参数的句法;这类函数类型很少用作回调类型。``Callable[..., ReturnType]`` " +"(省略号字面量)可用于为接受任意数量参数,并返回 ``ReturnType`` 的可调对象提供类型提示。纯 :data:`Callable` 等价于 " +"``Callable[..., Any]``,进而等价于 :class:`collections.abc.Callable` 。" + +#: ../../library/typing.rst:620 +msgid "" +":class:`collections.abc.Callable` now supports ``[]``. See :pep:`585` and " +":ref:`types-genericalias`." +msgstr "" +":class:`collections.abc.Callable` 现已支持 ``[]``。 详见 :pep:`585` 与 :ref:`types-" +"genericalias`。" + +#: ../../library/typing.rst:626 +msgid "" +"A variable annotated with ``C`` may accept a value of type ``C``. In " +"contrast, a variable annotated with ``Type[C]`` may accept values that are " +"classes themselves -- specifically, it will accept the *class object* of " +"``C``. For example::" +msgstr "" +"用 ``C`` 注解的变量可以接受类型 ``C`` 的值。反之,用 ``Type[C]`` 注解的变量可以接受类自身的值 — 准确地说,是接受 " +"``C`` 的 *类对象*,例如:" + +#: ../../library/typing.rst:635 +msgid "Note that ``Type[C]`` is covariant::" +msgstr "注意,``Type[C]`` 为协变量:" + +#: ../../library/typing.rst:647 +msgid "" +"The fact that ``Type[C]`` is covariant implies that all subclasses of ``C`` " +"should implement the same constructor signature and class method signatures " +"as ``C``. The type checker should flag violations of this, but should also " +"allow constructor calls in subclasses that match the constructor calls in " +"the indicated base class. How the type checker is required to handle this " +"particular case may change in future revisions of :pep:`484`." +msgstr "" +"``Type[C]`` 为协变量的意思是指, ``C`` 的所有子类都应使用与 ``C`` " +"相同的构造器签名及类方法签名。类型检查器应标记违反此项规定的内容,但也应允许符合指定基类构造器调用的子类进行构造器调用。:pep:`484` " +"修订版将来可能会调整类型检查器对这种特例的处理方式。" + +#: ../../library/typing.rst:655 +msgid "" +"The only legal parameters for :class:`Type` are classes, :data:`Any`, " +":ref:`type variables `, and unions of any of these types. For " +"example::" +msgstr "" +" :class:`Type` 合法的参数仅有类、:data:`Any` 、:ref:`类型变量` 以及上述类型的联合类型。例如:" + +#: ../../library/typing.rst:661 +msgid "" +"``Type[Any]`` is equivalent to ``Type`` which in turn is equivalent to " +"``type``, which is the root of Python's metaclass hierarchy." +msgstr " ``Type[Any]`` 等价于 ``Type``,进而等价于 Python 元类架构的根基,``type``。" + +#: ../../library/typing.rst:666 +msgid "" +":class:`builtins.type ` now supports ``[]``. See :pep:`585` and " +":ref:`types-genericalias`." +msgstr "" +":class:`builtins.type ` 现已支持 ``[]``。详见 :pep:`585` 与 :ref:`types-" +"genericalias`。" + +#: ../../library/typing.rst:672 +msgid "" +"A type that can be used to indicate to type checkers that the corresponding " +"variable or function parameter has a value equivalent to the provided " +"literal (or one of several literals). For example::" +msgstr "表示类型检查器对应变量或函数参数的值等价于给定字面量(或多个字面量之一)的类型。例如:" + +#: ../../library/typing.rst:686 +msgid "" +"``Literal[...]`` cannot be subclassed. At runtime, an arbitrary value is " +"allowed as type argument to ``Literal[...]``, but type checkers may impose " +"restrictions. See :pep:`586` for more details about literal types." +msgstr "" +"``Literal[...]`` 不能创建子类。在运行时,任意值均可作为 ``Literal[...]`` " +"的类型参数,但类型检查器可以对此加以限制。字面量类型详见 :pep:`586` 。" + +#: ../../library/typing.rst:692 +msgid "" +"``Literal`` now de-duplicates parameters. Equality comparisons of " +"``Literal`` objects are no longer order dependent. ``Literal`` objects will " +"now raise a :exc:`TypeError` exception during equality comparisons if one of" +" their parameters are not :term:`hashable`." +msgstr "" +"``Literal`` 现在能去除形参的重复。 ``Literal`` 对象的相等性比较不再依赖顺序。 现在如果有某个参数不为 " +":term:`hashable`,``Literal`` 对象在相等性比较期间将引发 :exc:`TypeError`。" + +#: ../../library/typing.rst:700 +msgid "Special type construct to mark class variables." +msgstr "特殊类型注解构造,用于标注类变量。" + +#: ../../library/typing.rst:702 +msgid "" +"As introduced in :pep:`526`, a variable annotation wrapped in ClassVar " +"indicates that a given attribute is intended to be used as a class variable " +"and should not be set on instances of that class. Usage::" +msgstr "如 :pep:`526` 所述,打包在 ClassVar 内的变量注解是指,给定属性应当用作类变量,而不应设置在类实例上。用法如下:" + +#: ../../library/typing.rst:710 +msgid ":data:`ClassVar` accepts only types and cannot be further subscribed." +msgstr ":data:`ClassVar` 仅接受类型,也不能使用下标。" + +#: ../../library/typing.rst:712 +msgid "" +":data:`ClassVar` is not a class itself, and should not be used with " +":func:`isinstance` or :func:`issubclass`. :data:`ClassVar` does not change " +"Python runtime behavior, but it can be used by third-party type checkers. " +"For example, a type checker might flag the following code as an error::" +msgstr "" +":data:`ClassVar` 本身不是类,不应用于 :func:`isinstance` 或 " +":func:`issubclass`。:data:`ClassVar` 不改变 Python " +"运行时行为,但可以用于第三方类型检查器。例如,类型检查器会认为以下代码有错:" + +#: ../../library/typing.rst:726 +msgid "" +"A special typing construct to indicate to type checkers that a name cannot " +"be re-assigned or overridden in a subclass. For example::" +msgstr "告知类型检查器某名称不能再次赋值或在子类中重写的特殊类型构造器。例如:" + +#: ../../library/typing.rst:738 ../../library/typing.rst:1818 +msgid "" +"There is no runtime checking of these properties. See :pep:`591` for more " +"details." +msgstr "这些属性没有运行时检查。详见 :pep:`591`。" + +#: ../../library/typing.rst:745 +msgid "" +"A type, introduced in :pep:`593` (``Flexible function and variable " +"annotations``), to decorate existing types with context-specific metadata " +"(possibly multiple pieces of it, as ``Annotated`` is variadic). " +"Specifically, a type ``T`` can be annotated with metadata ``x`` via the " +"typehint ``Annotated[T, x]``. This metadata can be used for either static " +"analysis or at runtime. If a library (or tool) encounters a typehint " +"``Annotated[T, x]`` and has no special logic for metadata ``x``, it should " +"ignore it and simply treat the type as ``T``. Unlike the ``no_type_check`` " +"functionality that currently exists in the ``typing`` module which " +"completely disables typechecking annotations on a function or a class, the " +"``Annotated`` type allows for both static typechecking of ``T`` (which can " +"safely ignore ``x``) together with runtime access to ``x`` within a specific" +" application." +msgstr "" +":pep:`593` (``灵活函数和变量注解``)里引入的类型,可以用上下文特定元数据(``Annotated`` " +"的参数可变,也可能用它的多个组成部分)装饰现有的类型。具体来说,就是类型提示 ``Annotated[T, x]`` 用元数据 ``x`` 注解类型 " +"``T``。静态分析或运行时都能使用该元数据。库(或工具)处理类型提示 ``Annotated[T, x]`` 时,在元数据 ``x`` " +"不涉及特殊逻辑的情况下,可忽略该类型提示,仅把它当作类型 ``T``。与 ``typing`` 模块中现有的 ``no_type_check`` " +"功能不同,该功能完全禁用了函数或类的类型检查注解,而 ``Annotated`` 类型则允许对 ``T`` 进行静态类型检查(可安全地忽略 " +"``x``),也可以在特定应用程序中实现 ``x`` 的运行时访问。" + +#: ../../library/typing.rst:759 +msgid "" +"Ultimately, the responsibility of how to interpret the annotations (if at " +"all) is the responsibility of the tool or library encountering the " +"``Annotated`` type. A tool or library encountering an ``Annotated`` type can" +" scan through the annotations to determine if they are of interest (e.g., " +"using ``isinstance()``)." +msgstr "" +"毕竟,如何解释注解(如有)由处理 ``Annotated`` 类型的工具/库负责。工具/库处理 ``Annotated`` " +"类型时,扫描所有注解以确定是否需要进行处理(例如,使用 ``isinstance()``)。" + +#: ../../library/typing.rst:765 +msgid "" +"When a tool or a library does not support annotations or encounters an " +"unknown annotation it should just ignore it and treat annotated type as the " +"underlying type." +msgstr "工具/库不支持注解,或遇到未知注解时,应忽略注解,并把注解类型当作底层类型。" + +#: ../../library/typing.rst:769 +msgid "" +"It's up to the tool consuming the annotations to decide whether the client " +"is allowed to have several annotations on one type and how to merge those " +"annotations." +msgstr "是否允许客户端在一个类型上使用多个注解,以及如何合并这些注解,由处理注解的工具决定。" + +#: ../../library/typing.rst:773 +msgid "" +"Since the ``Annotated`` type allows you to put several annotations of the " +"same (or different) type(s) on any node, the tools or libraries consuming " +"those annotations are in charge of dealing with potential duplicates. For " +"example, if you are doing value range analysis you might allow this::" +msgstr "" +"``Annotated`` " +"类型支持把多个相同(或不同)的单个(或多个)类型注解置于任意节点。因此,使用这些注解的工具/库要负责处理潜在的重复项。例如,执行值范围分析时,应允许以下操作:" + +#: ../../library/typing.rst:782 +msgid "" +"Passing ``include_extras=True`` to :func:`get_type_hints` lets one access " +"the extra annotations at runtime." +msgstr "传递 ``include_extras=True`` 至 :func:`get_type_hints` ,即可在运行时访问额外的注解。" + +#: ../../library/typing.rst:785 +msgid "The details of the syntax:" +msgstr "语义详情:" + +#: ../../library/typing.rst:787 +msgid "The first argument to ``Annotated`` must be a valid type" +msgstr "``Annotated`` 的第一个参数必须是有效的类型。" + +#: ../../library/typing.rst:789 +msgid "" +"Multiple type annotations are supported (``Annotated`` supports variadic " +"arguments)::" +msgstr "支持多个类型标注(``Annotated`` 支持可变参数):" + +#: ../../library/typing.rst:794 +msgid "" +"``Annotated`` must be called with at least two arguments ( " +"``Annotated[int]`` is not valid)" +msgstr "调用 ``Annotated`` 至少要有两个参数(``Annotated[int]`` 是无效的)" + +#: ../../library/typing.rst:797 +msgid "" +"The order of the annotations is preserved and matters for equality checks::" +msgstr "注解的顺序会被保留,且影响等价检查:" + +#: ../../library/typing.rst:804 +msgid "" +"Nested ``Annotated`` types are flattened, with metadata ordered starting " +"with the innermost annotation::" +msgstr "嵌套 ``Annotated`` 类型会被展平,元数据从最内层注解依序展开:" + +#: ../../library/typing.rst:811 +msgid "Duplicated annotations are not removed::" +msgstr "不移除注解重复项:" + +#: ../../library/typing.rst:817 +msgid "``Annotated`` can be used with nested and generic aliases::" +msgstr "``Annotated`` 可用于嵌套或泛型别名:" + +#: ../../library/typing.rst:828 +msgid "Building generic types" +msgstr "构建泛型类型" + +#: ../../library/typing.rst:830 +msgid "" +"These are not used in annotations. They are building blocks for creating " +"generic types." +msgstr "以下内容是创建泛型类型的基石,但不在注解内使用。" + +#: ../../library/typing.rst:834 +msgid "Abstract base class for generic types." +msgstr "用于泛型类型的抽象基类。" + +#: ../../library/typing.rst:836 +msgid "" +"A generic type is typically declared by inheriting from an instantiation of " +"this class with one or more type variables. For example, a generic mapping " +"type might be defined as::" +msgstr "泛型类型一般通过继承含一个或多个类型变量的类实例进行声明。例如,泛型映射类型定义如下:" + +#: ../../library/typing.rst:845 +msgid "This class can then be used as follows::" +msgstr "该类的用法如下:" + +#: ../../library/typing.rst:858 +msgid "Type variable." +msgstr "类型变量。" + +#: ../../library/typing.rst:860 ../../library/typing.rst:1043 +msgid "Usage::" +msgstr "用法:" + +#: ../../library/typing.rst:866 +msgid "" +"Type variables exist primarily for the benefit of static type checkers. " +"They serve as the parameters for generic types as well as for generic " +"function definitions. See :class:`Generic` for more information on generic " +"types. Generic functions work as follows::" +msgstr "" +"类型变量主要是为静态类型检查器提供支持,用于泛型类型与泛型函数定义的参数。有关泛型类型,详见 :class:`Generic`。泛型函数的写法如下:" + +#: ../../library/typing.rst:886 +msgid "" +"Note that type variables can be *bound*, *constrained*, or neither, but " +"cannot be both bound *and* constrained." +msgstr "请注意,类型变量可以是 *被绑定的* , *被约束的* ,或者两者都不是,但不能既是被绑定的 *又是* 被约束的。" + +#: ../../library/typing.rst:889 +msgid "" +"Constrained type variables and bound type variables have different semantics" +" in several important ways. Using a *constrained* type variable means that " +"the ``TypeVar`` can only ever be solved as being exactly one of the " +"constraints given::" +msgstr "约束类型变量和绑定类型变量在几个重要方面具有不同的语义。使用 *约束* 类型变量意味着它只能被解析为正好是所给的约束之一::" + +#: ../../library/typing.rst:899 +msgid "" +"Using a *bound* type variable, however, means that the ``TypeVar`` will be " +"solved using the most specific type possible::" +msgstr "然而,使用一个 *绑定* 类型变量,意味着将使用最具体的类型来解析 ``TypeVar`` ::" + +#: ../../library/typing.rst:910 +msgid "" +"Type variables can be bound to concrete types, abstract types (ABCs or " +"protocols), and even unions of types::" +msgstr "类型变量可以被绑定到具体类型、抽象类型( ABC 或 protocol ),甚至是类型的联合::" + +#: ../../library/typing.rst:916 +msgid "" +"Bound type variables are particularly useful for annotating " +":func:`classmethods ` that serve as alternative constructors. " +"In the following example (© `Raymond Hettinger " +"`_), the type variable ``C`` is" +" bound to the ``Circle`` class through the use of a forward reference. Using" +" this type variable to annotate the ``with_circumference`` classmethod, " +"rather than hardcoding the return type as ``Circle``, means that a type " +"checker can correctly infer the return type even if the method is called on " +"a subclass::" +msgstr "" +"绑定类型变量对于注释作为替代构造函数的 :func:`classmethods ` 特别有用。在下面的例子中( © " +"`Raymond Hettinger `_ ),类型变量 " +"``C`` 通过使用前向引用被绑定到类 ``Circle`` 。使用这个类型变量来注解类方法 ``with_circumference`` " +",而不是将返回类型硬编码为 ``Circle`` ,这意味着类型检查器可以正确推断出返回类型,即使该方法是在一个子类上调用的::" + +#: ../../library/typing.rst:954 +msgid "" +"At runtime, ``isinstance(x, T)`` will raise :exc:`TypeError`. In general, " +":func:`isinstance` and :func:`issubclass` should not be used with types." +msgstr "" +"在运行时,``isinstance(x, T)`` 会触发 :exc:`TypeError` 异常。一般而言,:func:`isinstance` 和 " +":func:`issubclass` 不应与类型搭配使用。" + +#: ../../library/typing.rst:957 +msgid "" +"Type variables may be marked covariant or contravariant by passing " +"``covariant=True`` or ``contravariant=True``. See :pep:`484` for more " +"details. By default, type variables are invariant." +msgstr "" +"类型变量可以通过传递 ``covariant=True`` 或 ``contravariant=True`` 来标记协变或逆变。 更多细节请参见 " +":pep:`484` 。 默认情况下,类型变量是不变的。" + +#: ../../library/typing.rst:963 +msgid "" +"``AnyStr`` is a :class:`constrained type variable ` defined as " +"``AnyStr = TypeVar('AnyStr', str, bytes)``." +msgstr "" +"``AnyStr`` 定义为 ``AnyStr = TypeVar('AnyStr', str, bytes)`` 的 :class:`约束类型变量 " +"` 。" + +#: ../../library/typing.rst:966 +msgid "" +"It is meant to be used for functions that may accept any kind of string " +"without allowing different kinds of strings to mix. For example::" +msgstr "这里指的是,它可以接受任意同类字符串,但不支持混用不同类别的字符串。例如:" + +#: ../../library/typing.rst:978 +msgid "" +"Base class for protocol classes. Protocol classes are defined like this::" +msgstr "Protocol 类的基类。Protocol 类的定义如下:" + +#: ../../library/typing.rst:984 +msgid "" +"Such classes are primarily used with static type checkers that recognize " +"structural subtyping (static duck-typing), for example::" +msgstr "这些类主要与静态类型检查器搭配使用,用来识别结构子类型(静态鸭子类型),例如:" + +#: ../../library/typing.rst:996 +msgid "" +"See :pep:`544` for details. Protocol classes decorated with " +":func:`runtime_checkable` (described later) act as simple-minded runtime " +"protocols that check only the presence of given attributes, ignoring their " +"type signatures." +msgstr "" +"详见 :pep:`544`。Protocol 类用 :func:`runtime_checkable` " +"(见下文)装饰,忽略类型签名,仅检查给定属性是否存在,充当简要的运行时协议。" + +#: ../../library/typing.rst:1001 +msgid "Protocol classes can be generic, for example::" +msgstr "Protocol 类可以是泛型,例如:" + +#: ../../library/typing.rst:1011 +msgid "Mark a protocol class as a runtime protocol." +msgstr "用于把 Protocol 类标记为运行时协议。" + +#: ../../library/typing.rst:1013 +msgid "" +"Such a protocol can be used with :func:`isinstance` and :func:`issubclass`. " +"This raises :exc:`TypeError` when applied to a non-protocol class. This " +"allows a simple-minded structural check, very similar to \"one trick " +"ponies\" in :mod:`collections.abc` such as " +":class:`~collections.abc.Iterable`. For example::" +msgstr "" +"该协议可以与 :func:`isinstance` 和 :func:`issubclass` 一起使用。应用于非协议的类时,会触发 " +":exc:`TypeError`。该指令支持简易结构检查,与 :mod:`collections.abc` 的 " +":class:`~collections.abc.Iterable` 非常类似,只擅长做一件事。 例如:" + +#: ../../library/typing.rst:1026 +msgid "" +":func:`runtime_checkable` will check only the presence of the required " +"methods, not their type signatures! For example, :class:`builtins.complex " +"` implements :func:`__float__`, therefore it passes an " +":func:`issubclass` check against :class:`SupportsFloat`. However, the " +"``complex.__float__`` method exists only to raise a :class:`TypeError` with " +"a more informative message." +msgstr "" +":func:`runtime_checkable` 只检查所需方法是否存在,但却不检查类型签名! 例如,:class:`builtins.complex" +" ` 支持 :func:`__float__`,因此,它能通过 :class:`SupportsFloat` 的 " +":func:`issubclass` 检查。 然而,``complex.__float__`` 方法其实只是为了触发含更多信息的 " +":class:`TypeError`。" + +#: ../../library/typing.rst:1035 +msgid "Other special directives" +msgstr "其他特殊指令" + +#: ../../library/typing.rst:1037 +msgid "" +"These are not used in annotations. They are building blocks for declaring " +"types." +msgstr "这些特殊指令是声明类型的基石,但不在注解内使用。" + +#: ../../library/typing.rst:1041 +msgid "Typed version of :func:`collections.namedtuple`." +msgstr ":func:`collections.namedtuple` 的类型版本。" + +#: ../../library/typing.rst:1049 +msgid "This is equivalent to::" +msgstr "这相当于:" + +#: ../../library/typing.rst:1053 +msgid "" +"To give a field a default value, you can assign to it in the class body::" +msgstr "为字段提供默认值,要在类体内赋值:" + +#: ../../library/typing.rst:1062 +msgid "" +"Fields with a default value must come after any fields without a default." +msgstr "带默认值的字段必须在不带默认值的字段后面。" + +#: ../../library/typing.rst:1064 +msgid "" +"The resulting class has an extra attribute ``__annotations__`` giving a dict" +" that maps the field names to the field types. (The field names are in the " +"``_fields`` attribute and the default values are in the ``_field_defaults`` " +"attribute, both of which are part of the :func:`~collections.namedtuple` " +"API.)" +msgstr "" +"由此产生的类有一个额外的属性 ``__annotations__`` ,给出一个 dict ,将字段名映射到字段类型。(字段名在 ``_fields``" +" 属性中,默认值在 ``_field_defaults`` 属性中,这两者都是 :func:`~collections.namedtuple` API " +"的一部分。)" + +#: ../../library/typing.rst:1070 +msgid "``NamedTuple`` subclasses can also have docstrings and methods::" +msgstr "``NamedTuple`` 子类也支持文档字符串与方法:" + +#: ../../library/typing.rst:1080 +msgid "Backward-compatible usage::" +msgstr "反向兼容用法:" + +#: ../../library/typing.rst:1084 +msgid "Added support for :pep:`526` variable annotation syntax." +msgstr "添加了对 :pep:`526` 中变量注解句法的支持。" + +#: ../../library/typing.rst:1087 +msgid "Added support for default values, methods, and docstrings." +msgstr "添加了对默认值、方法、文档字符串的支持。" + +#: ../../library/typing.rst:1090 +msgid "" +"The ``_field_types`` and ``__annotations__`` attributes are now regular " +"dictionaries instead of instances of ``OrderedDict``." +msgstr "" +"``_field_types`` 和 ``__annotations__`` 属性现已使用常规字典,不再使用 ``OrderedDict`` 实例。" + +#: ../../library/typing.rst:1094 +msgid "" +"Removed the ``_field_types`` attribute in favor of the more standard " +"``__annotations__`` attribute which has the same information." +msgstr "移除了 ``_field_types`` 属性, 改用具有相同信息,但更标准的 ``__annotations__`` 属性。" + +#: ../../library/typing.rst:1100 +msgid "" +"A helper function to indicate a distinct type to a typechecker, see " +":ref:`distinct`. At runtime it returns a function that returns its argument." +" Usage::" +msgstr "用于为类型检查器标明不同类型的辅助函数,详见 :ref:`distinct`。在运行时,它返回一个返回其参数的函数。用法如下:" + +#: ../../library/typing.rst:1111 +msgid "" +"Special construct to add type hints to a dictionary. At runtime it is a " +"plain :class:`dict`." +msgstr "把类型提示添加至字典的特殊构造器。在运行时,它是纯 :class:`dict`。" + +#: ../../library/typing.rst:1114 +msgid "" +"``TypedDict`` declares a dictionary type that expects all of its instances " +"to have a certain set of keys, where each key is associated with a value of " +"a consistent type. This expectation is not checked at runtime but is only " +"enforced by type checkers. Usage::" +msgstr "" +"``TypedDict`` " +"声明一个字典类型,该类型预期所有实例都具有一组键集,其中,每个键都与对应类型的值关联。运行时不检查此预期,而是由类型检查器强制执行。用法如下:" + +#: ../../library/typing.rst:1130 +msgid "" +"To allow using this feature with older versions of Python that do not " +"support :pep:`526`, ``TypedDict`` supports two additional equivalent " +"syntactic forms:" +msgstr "为了在不支持 :pep:`526` 的旧版 Python 中使用此特性,``TypedDict`` 支持两种额外的等价语法形式:" + +#: ../../library/typing.rst:1134 +msgid "Using a literal :class:`dict` as the second argument::" +msgstr "使用字面量 :class:`dict` 作为第二个参数:" + +#: ../../library/typing.rst:1138 +msgid "Using keyword arguments::" +msgstr "使用关键字参数:" + +#: ../../library/typing.rst:1142 +msgid "" +"The functional syntax should also be used when any of the keys are not valid" +" :ref:`identifiers `, for example because they are keywords or " +"contain hyphens. Example::" +msgstr "" +"当任何一个键不是有效的 :ref:`标识符 ` 时,例如因为它们是关键字或包含连字符,也应该使用函数式语法。例子::" + +#: ../../library/typing.rst:1154 +msgid "" +"By default, all keys must be present in a ``TypedDict``. It is possible to " +"override this by specifying totality. Usage::" +msgstr "默认情况下,所有的键都必须出现在一个 ``TypedDict`` 中。 可以通过指定总数来重写这一点。用法::" + +#: ../../library/typing.rst:1165 +msgid "" +"This means that a ``Point2D`` ``TypedDict`` can have any of the keys " +"omitted. A type checker is only expected to support a literal ``False`` or " +"``True`` as the value of the ``total`` argument. ``True`` is the default, " +"and makes all items defined in the class body required." +msgstr "" +"这意味着一个 ``Point2D`` ``TypedDict`` 可以省略任何一个键。 类型检查器只需要支持一个字面的 ``False`` 或 " +"``True`` 作为 ``total`` 参数的值。 ``True`` 是默认的,它使类主体中定义的所有项目都是必需的。" + +#: ../../library/typing.rst:1170 +msgid "" +"It is possible for a ``TypedDict`` type to inherit from one or more other " +"``TypedDict`` types using the class-based syntax. Usage::" +msgstr "一个 ``TypedDict`` 类型有可能使用基于类的语法从一个或多个其他 ``TypedDict`` 类型继承。用法::" + +#: ../../library/typing.rst:1177 +msgid "" +"``Point3D`` has three items: ``x``, ``y`` and ``z``. It is equivalent to " +"this definition::" +msgstr "``Point3D`` 有三个项目 : ``x`` , ``y`` 和 ``z`` 。 其等价于定义::" + +#: ../../library/typing.rst:1185 +msgid "" +"A ``TypedDict`` cannot inherit from a non-\\ ``TypedDict`` class, notably " +"including :class:`Generic`. For example::" +msgstr "``TypedDict`` 不能继承于一个非 ``TypedDict`` 类,其中特别包括 :class:`Generic` 。例如:" + +#: ../../library/typing.rst:1203 +msgid "" +"A ``TypedDict`` can be introspected via :attr:`__annotations__`, " +":attr:`__total__`, :attr:`__required_keys__`, and :attr:`__optional_keys__`." +msgstr "" + +#: ../../library/typing.rst:1208 +msgid "" +"``Point2D.__total__`` gives the value of the ``total`` argument. Example::" +msgstr " ``Point2D.__total__`` 给出了参数 ``total`` 的值。例如:" + +#: ../../library/typing.rst:1225 +msgid "" +"``Point2D.__required_keys__`` and ``Point2D.__optional_keys__`` return " +":class:`frozenset` objects containing required and non-required keys, " +"respectively. Currently the only way to declare both required and non-" +"required keys in the same ``TypedDict`` is mixed inheritance, declaring a " +"``TypedDict`` with one value for the ``total`` argument and then inheriting " +"it from another ``TypedDict`` with a different value for ``total``. Usage::" +msgstr "" +"``Point2D.__required_keys__`` 和 ``Point2D.__optional_keys__`` 分别返回 " +":class:`frozenset` 对象,其中包含必需和非必需键。目前,在同一个 中声明必需和非必需键的唯一方法是混合继承,用一个 " +"``total`` 参数值声明一个 ``TypedDict`` ,然后从另一个 ``total`` 参数值不同的 ``TypedDict`` " +"中继承它。用法:" + +#: ../../library/typing.rst:1245 +msgid "" +"See :pep:`589` for more examples and detailed rules of using ``TypedDict``." +msgstr "更多示例与 ``TypedDict`` 的详细规则,详见 :pep:`589`。" + +#: ../../library/typing.rst:1250 +msgid "Generic concrete collections" +msgstr "泛型具象容器" + +#: ../../library/typing.rst:1253 +msgid "Corresponding to built-in types" +msgstr "对应的内置类型" + +#: ../../library/typing.rst:1257 +msgid "" +"A generic version of :class:`dict`. Useful for annotating return types. To " +"annotate arguments it is preferred to use an abstract collection type such " +"as :class:`Mapping`." +msgstr ":class:`dict` 的泛型版本。适用于注解返回类型。注解参数时,最好使用 :class:`Mapping` 等抽象容器类型。" + +#: ../../library/typing.rst:1261 +msgid "This type can be used as follows::" +msgstr "该类型用法如下:" + +#: ../../library/typing.rst:1266 +msgid "" +":class:`builtins.dict ` now supports ``[]``. See :pep:`585` and " +":ref:`types-genericalias`." +msgstr "" +":class:`builtins.dict ` 现已支持 ``[]``。详见 :pep:`585` 和 :ref:`types-" +"genericalias`。" + +#: ../../library/typing.rst:1272 +msgid "" +"Generic version of :class:`list`. Useful for annotating return types. To " +"annotate arguments it is preferred to use an abstract collection type such " +"as :class:`Sequence` or :class:`Iterable`." +msgstr "" +":class:`list` 的泛型版本。适用于注解返回类型。注解参数时,最好使用 :class:`Sequence` 或 " +":class:`Iterable` 等抽象容器类型。" + +#: ../../library/typing.rst:1277 +msgid "This type may be used as follows::" +msgstr "该类型用法如下:" + +#: ../../library/typing.rst:1287 +msgid "" +":class:`builtins.list ` now supports ``[]``. See :pep:`585` and " +":ref:`types-genericalias`." +msgstr "" +":class:`builtins.list ` 现已支持 ``[]``。详见 :pep:`585` 与 :ref:`types-" +"genericalias`。" + +#: ../../library/typing.rst:1293 +msgid "" +"A generic version of :class:`builtins.set `. Useful for annotating " +"return types. To annotate arguments it is preferred to use an abstract " +"collection type such as :class:`AbstractSet`." +msgstr "" +":class:`builtins.set ` 的泛型版本。适用于注解返回类型。注解参数时,最好使用 :class:`AbstractSet` " +"等抽象容器类型。" + +#: ../../library/typing.rst:1297 +msgid "" +":class:`builtins.set ` now supports ``[]``. See :pep:`585` and " +":ref:`types-genericalias`." +msgstr "" +":class:`builtins.set ` 现已支持 ``[]``。详见 :pep:`585` 和 :ref:`types-" +"genericalias`。" + +#: ../../library/typing.rst:1303 +msgid "A generic version of :class:`builtins.frozenset `." +msgstr ":class:`builtins.frozenset ` 的泛型版本。" + +#: ../../library/typing.rst:1305 +msgid "" +":class:`builtins.frozenset ` now supports ``[]``. See :pep:`585` " +"and :ref:`types-genericalias`." +msgstr "" +":class:`builtins.frozenset ` 现已支持 ``[]``。详见 :pep:`585` 和 " +":ref:`types-genericalias`。" + +#: ../../library/typing.rst:1309 +msgid ":data:`Tuple` is a special form." +msgstr ":data:`Tuple` 是一种特殊形式。" + +#: ../../library/typing.rst:1312 +msgid "Corresponding to types in :mod:`collections`" +msgstr ":mod:`collections` 对应类型" + +#: ../../library/typing.rst:1316 +msgid "A generic version of :class:`collections.defaultdict`." +msgstr ":class:`collections.defaultdict` 的泛型版本。" + +#: ../../library/typing.rst:1320 +msgid "" +":class:`collections.defaultdict` now supports ``[]``. See :pep:`585` and " +":ref:`types-genericalias`." +msgstr "" +":class:`collections.defaultdict` 现已支持 ``[]``。详见 :pep:`585` 与 :ref:`types-" +"genericalias`。" + +#: ../../library/typing.rst:1326 +msgid "A generic version of :class:`collections.OrderedDict`." +msgstr ":class:`collections.OrderedDict` 的泛型版本。" + +#: ../../library/typing.rst:1330 +msgid "" +":class:`collections.OrderedDict` now supports ``[]``. See :pep:`585` and " +":ref:`types-genericalias`." +msgstr "" +":class:`collections.OrderedDict` 现已支持 ``[]``。详见 :pep:`585` 与 :ref:`types-" +"genericalias`。" + +#: ../../library/typing.rst:1336 +msgid "A generic version of :class:`collections.ChainMap`." +msgstr ":class:`collections.ChainMap` 的泛型版本。" + +#: ../../library/typing.rst:1341 +msgid "" +":class:`collections.ChainMap` now supports ``[]``. See :pep:`585` and " +":ref:`types-genericalias`." +msgstr "" +":class:`collections.ChainMap` 现已支持 ``[]``。详见 :pep:`585` 和 :ref:`types-" +"genericalias`。" + +#: ../../library/typing.rst:1347 +msgid "A generic version of :class:`collections.Counter`." +msgstr ":class:`collections.Counter` 的泛型版本。" + +#: ../../library/typing.rst:1352 +msgid "" +":class:`collections.Counter` now supports ``[]``. See :pep:`585` and " +":ref:`types-genericalias`." +msgstr "" +":class:`collections.Counter` 现已支持 ``[]``。详见 :pep:`585` 和 :ref:`types-" +"genericalias`。" + +#: ../../library/typing.rst:1358 +msgid "A generic version of :class:`collections.deque`." +msgstr ":class:`collections.deque` 的泛型版本。" + +#: ../../library/typing.rst:1363 +msgid "" +":class:`collections.deque` now supports ``[]``. See :pep:`585` and " +":ref:`types-genericalias`." +msgstr "" +":class:`collections.deque` 现已支持 ``[]``。详见 :pep:`585` 和 :ref:`types-" +"genericalias`。" + +#: ../../library/typing.rst:1368 +msgid "Other concrete types" +msgstr "其他具象类型" + +#: ../../library/typing.rst:1374 +msgid "" +"Generic type ``IO[AnyStr]`` and its subclasses ``TextIO(IO[str])`` and " +"``BinaryIO(IO[bytes])`` represent the types of I/O streams such as returned " +"by :func:`open`." +msgstr "" +"泛型 ``IO[AnyStr]`` 及其子类 ``TextIO(IO[str])``、``BinaryIO(IO[bytes])`` 表示 I/O " +"流——例如 :func:`open` 返回的对象——的类型。" + +#: ../../library/typing.rst:1381 +msgid "" +"These types are also in the ``typing.io`` namespace, which was never " +"supported by type checkers and will be removed." +msgstr "这些类型也在 ``typing.io`` 命名空间中,它从未得到类型检查器的支持并将被移除。" + +#: ../../library/typing.rst:1386 +msgid "" +"These type aliases correspond to the return types from :func:`re.compile` " +"and :func:`re.match`. These types (and the corresponding functions) are " +"generic in ``AnyStr`` and can be made specific by writing ``Pattern[str]``, " +"``Pattern[bytes]``, ``Match[str]``, or ``Match[bytes]``." +msgstr "" +"这些类型对应的是从 :func:`re.compile` 和 :func:`re.match` 返回的类型。 这些类型(及相应的函数)是 " +"``AnyStr`` 中的泛型并可通过编写 ``Pattern[str]``, ``Pattern[bytes]``, ``Match[str]`` 或" +" ``Match[bytes]`` 来具体指定。" + +#: ../../library/typing.rst:1396 +msgid "" +"These types are also in the ``typing.re`` namespace, which was never " +"supported by type checkers and will be removed." +msgstr "这些类型也在 ``typing.re`` 命名空间中,它从未得到类型检查器的支持并将被移除。" + +#: ../../library/typing.rst:1397 +msgid "" +"Classes ``Pattern`` and ``Match`` from :mod:`re` now support ``[]``. See " +":pep:`585` and :ref:`types-genericalias`." +msgstr "" +":mod:`re` 模块中的 ``Pattern`` 与 ``Match`` 类现已支持 ``[]``。详见 :pep:`585` 与 " +":ref:`types-genericalias`。" + +#: ../../library/typing.rst:1403 +msgid "" +"``Text`` is an alias for ``str``. It is provided to supply a forward " +"compatible path for Python 2 code: in Python 2, ``Text`` is an alias for " +"``unicode``." +msgstr "" +"``Text`` 是 ``str`` 的别名。提供了对 Python 2 代码的向下兼容:Python 2 中,``Text`` 是 " +"``unicode`` 的别名。" + +#: ../../library/typing.rst:1407 +msgid "" +"Use ``Text`` to indicate that a value must contain a unicode string in a " +"manner that is compatible with both Python 2 and Python 3::" +msgstr "使用 ``Text`` 时,值中必须包含 unicode 字符串,以兼容 Python 2 和 Python 3:" + +#: ../../library/typing.rst:1416 +msgid "Abstract Base Classes" +msgstr "抽象基类" + +#: ../../library/typing.rst:1419 +msgid "Corresponding to collections in :mod:`collections.abc`" +msgstr ":mod:`collections.abc` 对应的容器" + +#: ../../library/typing.rst:1423 +msgid "A generic version of :class:`collections.abc.Set`." +msgstr ":class:`collections.abc.Set` 的泛型版本。" + +#: ../../library/typing.rst:1425 +msgid "" +":class:`collections.abc.Set` now supports ``[]``. See :pep:`585` and " +":ref:`types-genericalias`." +msgstr "" +":class:`collections.abc.Set` 现已支持 ``[]``。详见 :pep:`585` 与 :ref:`types-" +"genericalias`。" + +#: ../../library/typing.rst:1431 +msgid "A generic version of :class:`collections.abc.ByteString`." +msgstr ":class:`collections.abc.ByteString` 的泛型版本。" + +#: ../../library/typing.rst:1433 +msgid "" +"This type represents the types :class:`bytes`, :class:`bytearray`, and " +":class:`memoryview` of byte sequences." +msgstr "该类型代表了 :class:`bytes`、:class:`bytearray`、:class:`memoryview` 等字节序列类型。" + +#: ../../library/typing.rst:1436 +msgid "" +"As a shorthand for this type, :class:`bytes` can be used to annotate " +"arguments of any of the types mentioned above." +msgstr "作为该类型的简称,:class:`bytes` 可用于标注上述任意类型的参数。" + +#: ../../library/typing.rst:1439 +msgid "" +":class:`collections.abc.ByteString` now supports ``[]``. See :pep:`585` and " +":ref:`types-genericalias`." +msgstr "" +":class:`collections.abc.ByteString` 现已支持 ``[]``。详见 :pep:`585` 与 :ref:`types-" +"genericalias`。" + +#: ../../library/typing.rst:1445 +msgid "A generic version of :class:`collections.abc.Collection`" +msgstr ":class:`collections.abc.Collection` 的泛型版本。" + +#: ../../library/typing.rst:1449 +msgid "" +":class:`collections.abc.Collection` now supports ``[]``. See :pep:`585` and " +":ref:`types-genericalias`." +msgstr "" +":class:`collections.abc.Collection` 现已支持 ``[]``。详见 :pep:`585` 与 :ref:`types-" +"genericalias`。" + +#: ../../library/typing.rst:1455 +msgid "A generic version of :class:`collections.abc.Container`." +msgstr ":class:`collections.abc.Container` 的泛型版本。" + +#: ../../library/typing.rst:1457 +msgid "" +":class:`collections.abc.Container` now supports ``[]``. See :pep:`585` and " +":ref:`types-genericalias`." +msgstr "" +":class:`collections.abc.Container` 现已支持 ``[]``。详见 :pep:`585` 和 :ref:`types-" +"genericalias`。" + +#: ../../library/typing.rst:1463 +msgid "A generic version of :class:`collections.abc.ItemsView`." +msgstr ":class:`collections.abc.ItemsView` 的泛型版本。" + +#: ../../library/typing.rst:1465 +msgid "" +":class:`collections.abc.ItemsView` now supports ``[]``. See :pep:`585` and " +":ref:`types-genericalias`." +msgstr "" +":class:`collections.abc.ItemsView` 现已支持 ``[]``。详见 :pep:`585` 和 :ref:`types-" +"genericalias`。" + +#: ../../library/typing.rst:1471 +msgid "A generic version of :class:`collections.abc.KeysView`." +msgstr ":class:`collections.abc.KeysView` 的泛型版本。" + +#: ../../library/typing.rst:1473 +msgid "" +":class:`collections.abc.KeysView` now supports ``[]``. See :pep:`585` and " +":ref:`types-genericalias`." +msgstr "" +":class:`collections.abc.KeysView` 现已支持 ``[]``。详见 :pep:`585` 和 :ref:`types-" +"genericalias`。" + +#: ../../library/typing.rst:1479 +msgid "" +"A generic version of :class:`collections.abc.Mapping`. This type can be used" +" as follows::" +msgstr ":class:`collections.abc.Mapping` 的泛型版本。用法如下:" + +#: ../../library/typing.rst:1485 +msgid "" +":class:`collections.abc.Mapping` now supports ``[]``. See :pep:`585` and " +":ref:`types-genericalias`." +msgstr "" +":class:`collections.abc.Mapping` 现已支持 ``[]``。详见 :pep:`585` 和 :ref:`types-" +"genericalias`。" + +#: ../../library/typing.rst:1491 +msgid "A generic version of :class:`collections.abc.MappingView`." +msgstr ":class:`collections.abc.MappingView` 的泛型版本。" + +#: ../../library/typing.rst:1493 +msgid "" +":class:`collections.abc.MappingView` now supports ``[]``. See :pep:`585` and" +" :ref:`types-genericalias`." +msgstr "" +":class:`collections.abc.MappingView` 现已支持 ``[]``。详见 :pep:`585` 和 " +":ref:`types-genericalias`。" + +#: ../../library/typing.rst:1499 +msgid "A generic version of :class:`collections.abc.MutableMapping`." +msgstr ":class:`collections.abc.MutableMapping` 的泛型版本。" + +#: ../../library/typing.rst:1501 +msgid "" +":class:`collections.abc.MutableMapping` now supports ``[]``. See :pep:`585` " +"and :ref:`types-genericalias`." +msgstr "" +":class:`collections.abc.MutableMapping` 现已支持 ``[]``。详见 :pep:`585` 和 " +":ref:`types-genericalias`。" + +#: ../../library/typing.rst:1507 +msgid "A generic version of :class:`collections.abc.MutableSequence`." +msgstr ":class:`collections.abc.MutableSequence` 的泛型版本。" + +#: ../../library/typing.rst:1509 +msgid "" +":class:`collections.abc.MutableSequence` now supports ``[]``. See :pep:`585`" +" and :ref:`types-genericalias`." +msgstr "" +":class:`collections.abc.MutableSequence` 现已支持 ``[]``。详见 :pep:`585` 和 " +":ref:`types-genericalias`。" + +#: ../../library/typing.rst:1515 +msgid "A generic version of :class:`collections.abc.MutableSet`." +msgstr ":class:`collections.abc.MutableSet` 的泛型版本。" + +#: ../../library/typing.rst:1517 +msgid "" +":class:`collections.abc.MutableSet` now supports ``[]``. See :pep:`585` and " +":ref:`types-genericalias`." +msgstr "" +":class:`collections.abc.MutableSet` 现已支持 ``[]``。详见 :pep:`585` 和 :ref:`types-" +"genericalias`。" + +#: ../../library/typing.rst:1523 +msgid "A generic version of :class:`collections.abc.Sequence`." +msgstr ":class:`collections.abc.Sequence` 的泛型版本。" + +#: ../../library/typing.rst:1525 +msgid "" +":class:`collections.abc.Sequence` now supports ``[]``. See :pep:`585` and " +":ref:`types-genericalias`." +msgstr "" +":class:`collections.abc.Sequence` 现已支持 ``[]``。详见 :pep:`585` 和 :ref:`types-" +"genericalias`。" + +#: ../../library/typing.rst:1531 +msgid "A generic version of :class:`collections.abc.ValuesView`." +msgstr ":class:`collections.abc.ValuesView` 的泛型版本。" + +#: ../../library/typing.rst:1533 +msgid "" +":class:`collections.abc.ValuesView` now supports ``[]``. See :pep:`585` and " +":ref:`types-genericalias`." +msgstr "" +":class:`collections.abc.ValuesView` 现已支持 ``[]``。详见 :pep:`585` 和 :ref:`types-" +"genericalias`。" + +#: ../../library/typing.rst:1538 +msgid "Corresponding to other types in :mod:`collections.abc`" +msgstr ":mod:`collections.abc` 对应的其他类型" + +#: ../../library/typing.rst:1542 +msgid "A generic version of :class:`collections.abc.Iterable`." +msgstr ":class:`collections.abc.Iterable` 的泛型版本。" + +#: ../../library/typing.rst:1544 +msgid "" +":class:`collections.abc.Iterable` now supports ``[]``. See :pep:`585` and " +":ref:`types-genericalias`." +msgstr "" +":class:`collections.abc.Iterable` 现已支持 ``[]``。详见 :pep:`585` 和 :ref:`types-" +"genericalias`。" + +#: ../../library/typing.rst:1550 +msgid "A generic version of :class:`collections.abc.Iterator`." +msgstr ":class:`collections.abc.Iterator` 的泛型版本。" + +#: ../../library/typing.rst:1552 +msgid "" +":class:`collections.abc.Iterator` now supports ``[]``. See :pep:`585` and " +":ref:`types-genericalias`." +msgstr "" +":class:`collections.abc.Iterator` 现已支持 ``[]``。详见 :pep:`585` 和 :ref:`types-" +"genericalias`。" + +#: ../../library/typing.rst:1558 +msgid "" +"A generator can be annotated by the generic type ``Generator[YieldType, " +"SendType, ReturnType]``. For example::" +msgstr "生成器可以由泛型类型 ``Generator[YieldType, SendType, ReturnType]`` 注解。例如:" + +#: ../../library/typing.rst:1567 +msgid "" +"Note that unlike many other generics in the typing module, the ``SendType`` " +"of :class:`Generator` behaves contravariantly, not covariantly or " +"invariantly." +msgstr "" +"注意,与 typing 模块里的其他泛型不同, :class:`Generator` 的 ``SendType`` 属于逆变行为,不是协变或不变行为。" + +#: ../../library/typing.rst:1571 +msgid "" +"If your generator will only yield values, set the ``SendType`` and " +"``ReturnType`` to ``None``::" +msgstr "如果生成器只产生值,可将 ``SendType`` 与 ``ReturnType`` 设为 ``None``:" + +#: ../../library/typing.rst:1579 +msgid "" +"Alternatively, annotate your generator as having a return type of either " +"``Iterable[YieldType]`` or ``Iterator[YieldType]``::" +msgstr "此外,还可以把生成器的返回类型注解为 ``Iterable[YieldType]`` 或 ``Iterator[YieldType]``:" + +#: ../../library/typing.rst:1587 +msgid "" +":class:`collections.abc.Generator` now supports ``[]``. See :pep:`585` and " +":ref:`types-genericalias`." +msgstr "" +":class:`collections.abc.Generator` 现已支持 ``[]``。详见 :pep:`585` 和 :ref:`types-" +"genericalias`。" + +#: ../../library/typing.rst:1593 +msgid "An alias to :class:`collections.abc.Hashable`." +msgstr ":class:`collections.abc.Hashable` 的别名。" + +#: ../../library/typing.rst:1597 +msgid "A generic version of :class:`collections.abc.Reversible`." +msgstr ":class:`collections.abc.Reversible` 的泛型版本。" + +#: ../../library/typing.rst:1599 +msgid "" +":class:`collections.abc.Reversible` now supports ``[]``. See :pep:`585` and " +":ref:`types-genericalias`." +msgstr "" +":class:`collections.abc.Reversible` 现已支持 ``[]``。详见 :pep:`585` 和 :ref:`types-" +"genericalias`。" + +#: ../../library/typing.rst:1605 +msgid "An alias to :class:`collections.abc.Sized`." +msgstr ":class:`collections.abc.Sized` 的别名。" + +#: ../../library/typing.rst:1608 +msgid "Asynchronous programming" +msgstr "异步编程" + +#: ../../library/typing.rst:1612 +msgid "" +"A generic version of :class:`collections.abc.Coroutine`. The variance and " +"order of type variables correspond to those of :class:`Generator`, for " +"example::" +msgstr "" +":class:`collections.abc.Coroutine` 的泛型版本。类型变量的差异和顺序与 :class:`Generator` " +"的内容相对应,例如:" + +#: ../../library/typing.rst:1624 +msgid "" +":class:`collections.abc.Coroutine` now supports ``[]``. See :pep:`585` and " +":ref:`types-genericalias`." +msgstr "" +":class:`collections.abc.Coroutine` 现已支持 ``[]``。详见 :pep:`585` 和 :ref:`types-" +"genericalias`。" + +#: ../../library/typing.rst:1630 +msgid "" +"An async generator can be annotated by the generic type " +"``AsyncGenerator[YieldType, SendType]``. For example::" +msgstr "异步生成器可由泛型类型 ``AsyncGenerator[YieldType, SendType]`` 注解。例如:" + +#: ../../library/typing.rst:1639 +msgid "" +"Unlike normal generators, async generators cannot return a value, so there " +"is no ``ReturnType`` type parameter. As with :class:`Generator`, the " +"``SendType`` behaves contravariantly." +msgstr "" +"与常规生成器不同,异步生成器不能返回值,因此没有 ``ReturnType`` 类型参数。 与 :class:`Generator` " +"类似,``SendType`` 也属于逆变行为。" + +#: ../../library/typing.rst:1643 +msgid "" +"If your generator will only yield values, set the ``SendType`` to ``None``::" +msgstr "如果生成器只产生值,可将 ``SendType`` 设置为 ``None``:" + +#: ../../library/typing.rst:1651 +msgid "" +"Alternatively, annotate your generator as having a return type of either " +"``AsyncIterable[YieldType]`` or ``AsyncIterator[YieldType]``::" +msgstr "" +"此外,可用 ``AsyncIterable[YieldType]`` 或 ``AsyncIterator[YieldType]`` " +"注解生成器的返回类型:" + +#: ../../library/typing.rst:1661 +msgid "" +":class:`collections.abc.AsyncGenerator` now supports ``[]``. See :pep:`585` " +"and :ref:`types-genericalias`." +msgstr "" +":class:`collections.abc.AsyncGenerator` 现已支持 ``[]``。详见 :pep:`585` 和 " +":ref:`types-genericalias`。" + +#: ../../library/typing.rst:1667 +msgid "A generic version of :class:`collections.abc.AsyncIterable`." +msgstr ":class:`collections.abc.AsyncIterable` 的泛型版本。" + +#: ../../library/typing.rst:1671 +msgid "" +":class:`collections.abc.AsyncIterable` now supports ``[]``. See :pep:`585` " +"and :ref:`types-genericalias`." +msgstr "" +":class:`collections.abc.AsyncIterable` 现已支持 ``[]``。详见 :pep:`585` 和 " +":ref:`types-genericalias`。" + +#: ../../library/typing.rst:1677 +msgid "A generic version of :class:`collections.abc.AsyncIterator`." +msgstr ":class:`collections.abc.AsyncIterator` 的泛型版本。" + +#: ../../library/typing.rst:1681 +msgid "" +":class:`collections.abc.AsyncIterator` now supports ``[]``. See :pep:`585` " +"and :ref:`types-genericalias`." +msgstr "" +":class:`collections.abc.AsyncIterator` 现已支持 ``[]``。详见 :pep:`585` 和 " +":ref:`types-genericalias`。" + +#: ../../library/typing.rst:1687 +msgid "A generic version of :class:`collections.abc.Awaitable`." +msgstr ":class:`collections.abc.Awaitable` 的泛型版本。" + +#: ../../library/typing.rst:1691 +msgid "" +":class:`collections.abc.Awaitable` now supports ``[]``. See :pep:`585` and " +":ref:`types-genericalias`." +msgstr "" +":class:`collections.abc.Awaitable` 现已支持 ``[]``。详见 :pep:`585` 和 :ref:`types-" +"genericalias`。" + +#: ../../library/typing.rst:1697 +msgid "Context manager types" +msgstr "上下文管理器类型" + +#: ../../library/typing.rst:1701 +msgid "A generic version of :class:`contextlib.AbstractContextManager`." +msgstr ":class:`contextlib.AbstractContextManager` 的泛型版本。" + +#: ../../library/typing.rst:1706 +msgid "" +":class:`contextlib.AbstractContextManager` now supports ``[]``. See " +":pep:`585` and :ref:`types-genericalias`." +msgstr "" +":class:`contextlib.AbstractContextManager` 现已支持 ``[]``。详见 :pep:`585` 和 " +":ref:`types-genericalias`。" + +#: ../../library/typing.rst:1712 +msgid "A generic version of :class:`contextlib.AbstractAsyncContextManager`." +msgstr ":class:`contextlib.AbstractAsyncContextManager` 的泛型版本。" + +#: ../../library/typing.rst:1717 +msgid "" +":class:`contextlib.AbstractAsyncContextManager` now supports ``[]``. See " +":pep:`585` and :ref:`types-genericalias`." +msgstr "" +":class:`contextlib.AbstractAsyncContextManager` 现已支持 ``[]``。详见 :pep:`585` 和 " +":ref:`types-genericalias`。" + +#: ../../library/typing.rst:1722 +msgid "Protocols" +msgstr "协议" + +#: ../../library/typing.rst:1724 +msgid "These protocols are decorated with :func:`runtime_checkable`." +msgstr "这些协议由 :func:`runtime_checkable` 装饰。" + +#: ../../library/typing.rst:1728 +msgid "" +"An ABC with one abstract method ``__abs__`` that is covariant in its return " +"type." +msgstr "一个抽象基类,含一个抽象方法 ``__abs__``,该方法与其返回类型协变。" + +#: ../../library/typing.rst:1733 +msgid "An ABC with one abstract method ``__bytes__``." +msgstr "一个抽象基类,含一个抽象方法 ``__bytes__``。" + +#: ../../library/typing.rst:1737 +msgid "An ABC with one abstract method ``__complex__``." +msgstr "一个抽象基类,含一个抽象方法 ``__complex__``。" + +#: ../../library/typing.rst:1741 +msgid "An ABC with one abstract method ``__float__``." +msgstr "一个抽象基类,含一个抽象方法 ``__float__``。" + +#: ../../library/typing.rst:1745 +msgid "An ABC with one abstract method ``__index__``." +msgstr "一个抽象基类,含一个抽象方法 ``__index__``。" + +#: ../../library/typing.rst:1751 +msgid "An ABC with one abstract method ``__int__``." +msgstr "一个抽象基类,含一个抽象方法 ``__int__``。" + +#: ../../library/typing.rst:1755 +msgid "" +"An ABC with one abstract method ``__round__`` that is covariant in its " +"return type." +msgstr "一个抽象基类,含一个抽象方法 ``__round__``,该方法与其返回类型协变。" + +#: ../../library/typing.rst:1759 +msgid "Functions and decorators" +msgstr "函数与装饰器" + +#: ../../library/typing.rst:1763 +msgid "Cast a value to a type." +msgstr "把一个值转换为指定的类型。" + +#: ../../library/typing.rst:1765 +msgid "" +"This returns the value unchanged. To the type checker this signals that the" +" return value has the designated type, but at runtime we intentionally don't" +" check anything (we want this to be as fast as possible)." +msgstr "这会把值原样返回。对类型检查器而言这代表了返回值具有指定的类型,在运行时我们故意没有设计任何检查(我们希望让这尽量快)。" + +#: ../../library/typing.rst:1772 +msgid "" +"The ``@overload`` decorator allows describing functions and methods that " +"support multiple different combinations of argument types. A series of " +"``@overload``-decorated definitions must be followed by exactly one " +"non-``@overload``-decorated definition (for the same function/method). The " +"``@overload``-decorated definitions are for the benefit of the type checker " +"only, since they will be overwritten by the non-``@overload``-decorated " +"definition, while the latter is used at runtime but should be ignored by a " +"type checker. At runtime, calling a ``@overload``-decorated function " +"directly will raise :exc:`NotImplementedError`. An example of overload that " +"gives a more precise type than can be expressed using a union or a type " +"variable::" +msgstr "" +"``@overload`` 装饰器可以修饰支持多个不同参数类型组合的函数或方法。``@overload`` - 装饰定义的系列必须紧跟一个非 " +"``@overload``-装饰定义(用于同一个函数/方法)。``@overload``-装饰定义仅是为了协助类型检查器, 因为该装饰器会被非 " +"``@overload``-装饰定义覆盖,后者用于运行时,而且会被类型检查器忽略。在运行时直接调用 ``@overload`` 装饰的函数会触发 " +":exc:`NotImplementedError`。下面的重载示例给出了比联合类型或类型变量更精准的类型:" + +#: ../../library/typing.rst:1796 +msgid "See :pep:`484` for details and comparison with other typing semantics." +msgstr "详见 :pep:`484`,与其他类型语义进行对比。" + +#: ../../library/typing.rst:1800 +msgid "" +"A decorator to indicate to type checkers that the decorated method cannot be" +" overridden, and the decorated class cannot be subclassed. For example::" +msgstr "告知类型检查器被装饰的方法不能被覆盖,且被装饰的类不能作为子类的装饰器,例如:" + +#: ../../library/typing.rst:1825 +msgid "Decorator to indicate that annotations are not type hints." +msgstr "标明注解不是类型提示的装饰器。" + +#: ../../library/typing.rst:1827 +msgid "" +"This works as class or function :term:`decorator`. With a class, it applies" +" recursively to all methods defined in that class (but not to methods " +"defined in its superclasses or subclasses)." +msgstr "用作类或函数的 :term:`decorator`。用于类时,递归地应用于该类中定义的所有方法,(但不影响超类或子类中定义的方法)。" + +#: ../../library/typing.rst:1831 +msgid "This mutates the function(s) in place." +msgstr "本方法可直接修改函数。" + +#: ../../library/typing.rst:1835 +msgid "Decorator to give another decorator the :func:`no_type_check` effect." +msgstr "让其他装饰器具有 :func:`no_type_check` 效果的装饰器。" + +#: ../../library/typing.rst:1837 +msgid "" +"This wraps the decorator with something that wraps the decorated function in" +" :func:`no_type_check`." +msgstr "本装饰器用 :func:`no_type_check` 里的装饰函数打包其他装饰器。" + +#: ../../library/typing.rst:1842 +msgid "Decorator to mark a class or function to be unavailable at runtime." +msgstr "标记类或函数内不可用于运行时的装饰器。" + +#: ../../library/typing.rst:1844 +msgid "" +"This decorator is itself not available at runtime. It is mainly intended to " +"mark classes that are defined in type stub files if an implementation " +"returns an instance of a private class::" +msgstr "在运行时,该装饰器本身不可用。实现返回的是私有类实例时,它主要是用于标记在类型存根文件中定义的类。" + +#: ../../library/typing.rst:1855 +msgid "" +"Note that returning instances of private classes is not recommended. It is " +"usually preferable to make such classes public." +msgstr "注意,建议不要返回私有类实例,最好将之设为公共类。" + +#: ../../library/typing.rst:1859 +msgid "Introspection helpers" +msgstr "内省辅助器" + +#: ../../library/typing.rst:1863 +msgid "" +"Return a dictionary containing type hints for a function, method, module or " +"class object." +msgstr "返回函数、方法、模块、类对象的类型提示的字典。" + +#: ../../library/typing.rst:1866 +msgid "" +"This is often the same as ``obj.__annotations__``. In addition, forward " +"references encoded as string literals are handled by evaluating them in " +"``globals`` and ``locals`` namespaces. If necessary, ``Optional[t]`` is " +"added for function and method annotations if a default value equal to " +"``None`` is set. For a class ``C``, return a dictionary constructed by " +"merging all the ``__annotations__`` along ``C.__mro__`` in reverse order." +msgstr "" +"一般情况下,与 ``obj.__annotations__`` 相同。此外,可通过在 ``globals`` 与 ``locals`` " +"命名空间里进行评估,以此来处理编码为字符串字面量的前向引用。如有需要,在默认值设置为 ``None`` 时,可为函数或方法注解添加 " +"``Optional[t]``。对于类 ``C``,则返回由所有 ``__annotations__`` 与 ``C.__mro__`` " +"逆序合并而成的字典。" + +#: ../../library/typing.rst:1874 +msgid "" +"The function recursively replaces all ``Annotated[T, ...]`` with ``T``, " +"unless ``include_extras`` is set to ``True`` (see :class:`Annotated` for " +"more information). For example::" +msgstr "" +"本函数以递归地方式用 ``T`` 替换所有 ``Annotated[T, ...]``, 除非将 ``include_extras`` 的值设置为 " +"``True`` (详见 :class:`Annotated`)。例如:" + +#: ../../library/typing.rst:1887 +msgid "Added ``include_extras`` parameter as part of :pep:`593`." +msgstr ":pep:`593` 的组成部分,添加了 ``include_extras`` 参数。" + +#: ../../library/typing.rst:1893 +msgid "" +"Provide basic introspection for generic types and special typing forms." +msgstr "为泛型类型与特殊类型形式提供了基本的内省功能。" + +#: ../../library/typing.rst:1895 +msgid "" +"For a typing object of the form ``X[Y, Z, ...]`` these functions return " +"``X`` and ``(Y, Z, ...)``. If ``X`` is a generic alias for a builtin or " +":mod:`collections` class, it gets normalized to the original class. If ``X``" +" is a :class:`Union` or :class:`Literal` contained in another generic type, " +"the order of ``(Y, Z, ...)`` may be different from the order of the original" +" arguments ``[Y, Z, ...]`` due to type caching. For unsupported objects " +"return ``None`` and ``()`` correspondingly. Examples::" +msgstr "" +"对于 ``X[Y, Z, ...]`` 形式的类型对象,这些函数返回 ``X`` 与 ``(Y, Z, ...)``。如果 ``X`` 是内置对象或 " +":mod:`collections` class 的泛型别名, 会将其标准化为原始类。如果 ``X`` 是包含在其他泛型类型中的 " +":class:`Union` 或 :class:`Literal`,``(Y, Z, ...)`` 的顺序会因类型缓存,而与原始参数 ``[Y, Z, " +"...]`` 的顺序不同。对于不支持的对象会相应地返回 ``None`` 或 ``()``。例如:" + +#: ../../library/typing.rst:1914 +msgid "" +"A class used for internal typing representation of string forward " +"references. For example, ``List[\"SomeClass\"]`` is implicitly transformed " +"into ``List[ForwardRef(\"SomeClass\")]``. This class should not be " +"instantiated by a user, but may be used by introspection tools." +msgstr "" +"用于字符串前向引用的内部类型表示的类。 例如,``List[\"SomeClass\"]`` 会被隐式转换为 " +"``List[ForwardRef(\"SomeClass\")]``。 这个类不应由用户来实例化,但可以由内省工具使用。" + +#: ../../library/typing.rst:1920 +msgid "" +":pep:`585` generic types such as ``list[\"SomeClass\"]`` will not be " +"implicitly transformed into ``list[ForwardRef(\"SomeClass\")]`` and thus " +"will not automatically resolve to ``list[SomeClass]``." +msgstr "" +":pep:`585` 泛型类型例如 ``list[\"SomeClass\"]`` 将不会被隐式地转换为 " +"``list[ForwardRef(\"SomeClass\")]`` 因而将不会自动解析为 ``list[SomeClass]``。" + +#: ../../library/typing.rst:1927 +msgid "Constant" +msgstr "常量" + +#: ../../library/typing.rst:1931 +msgid "" +"A special constant that is assumed to be ``True`` by 3rd party static type " +"checkers. It is ``False`` at runtime. Usage::" +msgstr "被第三方静态类型检查器假定为 ``True`` 的特殊常量。 在运行时为 ``False``。 用法如下::" + +#: ../../library/typing.rst:1940 +msgid "" +"The first type annotation must be enclosed in quotes, making it a \"forward " +"reference\", to hide the ``expensive_mod`` reference from the interpreter " +"runtime. Type annotations for local variables are not evaluated, so the " +"second annotation does not need to be enclosed in quotes." +msgstr "" +"第一个类型注解必须用引号标注,才能把它当作“前向引用”,从而在解释器运行时中隐藏 ``expensive_mod`` " +"引用。局部变量的类型注释不会被评估,因此,第二个注解不需要用引号引起来。" + +#: ../../library/typing.rst:1947 +msgid "" +"If ``from __future__ import annotations`` is used, annotations are not " +"evaluated at function definition time. Instead, they are stored as strings " +"in ``__annotations__``. This makes it unnecessary to use quotes around the " +"annotation (see :pep:`563`)." +msgstr "" +"若用了 ``from __future__ import annotations``,函数定义时则不求值注解,直接把注解以字符串形式存在 " +"``__annotations__`` 里。这时毋需为注解打引号(见 :pep:`563`)。" diff --git a/library/undoc.po b/library/undoc.po new file mode 100644 index 000000000..b73fcbb24 --- /dev/null +++ b/library/undoc.po @@ -0,0 +1,67 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) 2001-2021, Python Software Foundation +# This file is distributed under the same license as the Python package. +# FIRST AUTHOR , YEAR. +# +# Translators: +# Alpha Du , 2019 +# Freesand Leo , 2020 +# +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: Python 3.9\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2021-01-01 05:02+0000\n" +"PO-Revision-Date: 2017-02-16 23:32+0000\n" +"Last-Translator: Freesand Leo , 2020\n" +"Language-Team: Chinese (China) (https://www.transifex.com/python-doc/teams/5390/zh_CN/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: zh_CN\n" +"Plural-Forms: nplurals=1; plural=0;\n" + +#: ../../library/undoc.rst:5 +msgid "Undocumented Modules" +msgstr "未创建文档的模块" + +#: ../../library/undoc.rst:7 +msgid "" +"Here's a quick listing of modules that are currently undocumented, but that " +"should be documented. Feel free to contribute documentation for them! " +"(Send via email to docs@python.org.)" +msgstr "以下是应当记入文档但是目前尚无文档的模块速览列表。 欢迎大家为它们贡献文档! (发送电子邮件到 docs@python.org )" + +#: ../../library/undoc.rst:11 +msgid "" +"The idea and original contents for this chapter were taken from a posting by" +" Fredrik Lundh; the specific contents of this chapter have been " +"substantially revised." +msgstr "本章的想法和原内容取自 Fredrik Lundh 的帖子;本章的具体内容已经大幅修改。" + +#: ../../library/undoc.rst:17 +msgid "Platform specific modules" +msgstr "平台特定模块" + +#: ../../library/undoc.rst:19 +msgid "" +"These modules are used to implement the :mod:`os.path` module, and are not " +"documented beyond this mention. There's little need to document these." +msgstr "这些模块用于实现 :mod:`os.path` 模块,除此之外没有文档。几乎没有必要创建这些文档。" + +#: ../../library/undoc.rst:23 +msgid ":mod:`ntpath`" +msgstr ":mod:`ntpath`" + +#: ../../library/undoc.rst:23 +msgid "--- Implementation of :mod:`os.path` on Win32 and Win64 platforms." +msgstr "--- 在 Win32 和 Win64 平台上实现 :mod:`os.path` 。" + +#: ../../library/undoc.rst:25 +msgid ":mod:`posixpath`" +msgstr ":mod:`posixpath`" + +#: ../../library/undoc.rst:26 +msgid "--- Implementation of :mod:`os.path` on POSIX." +msgstr "--- 在 POSIX 上实现 :mod:`os.path` 。" diff --git a/library/unicodedata.po b/library/unicodedata.po new file mode 100644 index 000000000..1e7d62407 --- /dev/null +++ b/library/unicodedata.po @@ -0,0 +1,231 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) 2001-2022, Python Software Foundation +# This file is distributed under the same license as the Python package. +# FIRST AUTHOR , YEAR. +# +# Translators: +# Jerry Chen , 2017 +# Alpha Du , 2019 +# Freesand Leo , 2020 +# +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: Python 3.9\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2022-11-04 14:34+0000\n" +"PO-Revision-Date: 2017-02-16 23:33+0000\n" +"Last-Translator: Freesand Leo , 2020\n" +"Language-Team: Chinese (China) (https://www.transifex.com/python-doc/teams/5390/zh_CN/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: zh_CN\n" +"Plural-Forms: nplurals=1; plural=0;\n" + +#: ../../library/unicodedata.rst:2 +msgid ":mod:`unicodedata` --- Unicode Database" +msgstr ":mod:`unicodedata` --- Unicode 数据库" + +#: ../../library/unicodedata.rst:18 +msgid "" +"This module provides access to the Unicode Character Database (UCD) which " +"defines character properties for all Unicode characters. The data contained " +"in this database is compiled from the `UCD version 13.0.0 " +"`_." +msgstr "" +"此模块提供了对 Unicode Character Database (UCD) 的访问,其中定义了所有 Unicode 字符的字符属性。 " +"此数据库中包含的数据编译自 `UCD 版本 13.0.0 `_。" + +#: ../../library/unicodedata.rst:23 +msgid "" +"The module uses the same names and symbols as defined by Unicode Standard " +"Annex #44, `\"Unicode Character Database\" " +"`_. It defines the following " +"functions:" +msgstr "" +"该模块使用与 Unicode 标准附件 #44 `“Unicode 字符数据库” " +"`_ 中所定义的相同名称和符号。 它定义了以下函数:" + +#: ../../library/unicodedata.rst:31 +msgid "" +"Look up character by name. If a character with the given name is found, " +"return the corresponding character. If not found, :exc:`KeyError` is " +"raised." +msgstr "按名称查找字符。如果找到具有给定名称的字符,则返回相应的字符。 如果没有找到,则 :exc:`KeyError` 被引发。" + +#: ../../library/unicodedata.rst:34 +msgid "Support for name aliases [#]_ and named sequences [#]_ has been added." +msgstr "已添加对名称别名 [#]_ 和命名序列 [#]_ 的支持。" + +#: ../../library/unicodedata.rst:40 +msgid "" +"Returns the name assigned to the character *chr* as a string. If no name is " +"defined, *default* is returned, or, if not given, :exc:`ValueError` is " +"raised." +msgstr "" +"返回分配给字符 *chr* 的名称作为字符串。如果没有定义名称,则返回 *default* ,如果没有给出,则 :exc:`ValueError` " +"被引发。" + +#: ../../library/unicodedata.rst:47 +msgid "" +"Returns the decimal value assigned to the character *chr* as integer. If no " +"such value is defined, *default* is returned, or, if not given, " +":exc:`ValueError` is raised." +msgstr "" +"返回分配给字符 *chr* 的十进制值作为整数。 如果没有定义这样的值,则返回 *default* ,如果没有给出,则 " +":exc:`ValueError` 被引发。" + +#: ../../library/unicodedata.rst:54 +msgid "" +"Returns the digit value assigned to the character *chr* as integer. If no " +"such value is defined, *default* is returned, or, if not given, " +":exc:`ValueError` is raised." +msgstr "" +"返回分配给字符 *chr* 的数字值作为整数。 如果没有定义这样的值,则返回 *default* ,如果没有给出,则 :exc:`ValueError`" +" 被引发。" + +#: ../../library/unicodedata.rst:61 +msgid "" +"Returns the numeric value assigned to the character *chr* as float. If no " +"such value is defined, *default* is returned, or, if not given, " +":exc:`ValueError` is raised." +msgstr "" +"返回分配给字符 *chr* 的数值作为浮点数。 如果没有定义这样的值,则返回 *default* ,如果没有给出,则 :exc:`ValueError`" +" 被引发。" + +#: ../../library/unicodedata.rst:68 +msgid "" +"Returns the general category assigned to the character *chr* as string." +msgstr "返回分配给字符 *chr* 的常规类别为字符串。" + +#: ../../library/unicodedata.rst:74 +msgid "" +"Returns the bidirectional class assigned to the character *chr* as string. " +"If no such value is defined, an empty string is returned." +msgstr "返回分配给字符 *chr* 的双向类作为字符串。如果未定义此类值,则返回空字符串。" + +#: ../../library/unicodedata.rst:80 +msgid "" +"Returns the canonical combining class assigned to the character *chr* as " +"integer. Returns ``0`` if no combining class is defined." +msgstr "返回分配给字符 *chr* 的规范组合类作为整数。如果没有定义组合类,则返回 ``0`` 。" + +#: ../../library/unicodedata.rst:86 +msgid "" +"Returns the east asian width assigned to the character *chr* as string." +msgstr "返回分配给字符 *chr* 的东亚宽度作为字符串。" + +#: ../../library/unicodedata.rst:92 +msgid "" +"Returns the mirrored property assigned to the character *chr* as integer. " +"Returns ``1`` if the character has been identified as a \"mirrored\" " +"character in bidirectional text, ``0`` otherwise." +msgstr "返回分配给字符 *chr* 的镜像属性为整数。如果字符在双向文本中被识别为“镜像”字符,则返回 ``1`` ,否则返回 ``0`` 。" + +#: ../../library/unicodedata.rst:99 +msgid "" +"Returns the character decomposition mapping assigned to the character *chr* " +"as string. An empty string is returned in case no such mapping is defined." +msgstr "返回分配给字符 *chr* 的字符分解映射作为字符串。如果未定义此类映射,则返回空字符串。" + +#: ../../library/unicodedata.rst:106 +msgid "" +"Return the normal form *form* for the Unicode string *unistr*. Valid values " +"for *form* are 'NFC', 'NFKC', 'NFD', and 'NFKD'." +msgstr "" +"返回 Unicode 字符串 *unistr* 的正常形式 *form* 。 *form* 的有效值为 'NFC' 、 'NFKC' 、 'NFD' 和" +" 'NFKD' 。" + +#: ../../library/unicodedata.rst:109 +msgid "" +"The Unicode standard defines various normalization forms of a Unicode " +"string, based on the definition of canonical equivalence and compatibility " +"equivalence. In Unicode, several characters can be expressed in various way." +" For example, the character U+00C7 (LATIN CAPITAL LETTER C WITH CEDILLA) can" +" also be expressed as the sequence U+0043 (LATIN CAPITAL LETTER C) U+0327 " +"(COMBINING CEDILLA)." +msgstr "" +"Unicode 标准基于规范等价和兼容性等效的定义定义了 Unicode 字符串的各种规范化形式。在 Unicode 中,可以以各种方式表示多个字符。 " +"例如,字符 U+00C7 (带有 CEDILLA 的 LATIN CAPITAL LETTER C )也可以表示为序列 U+0043( LATIN " +"CAPITAL LETTER C )U+0327( COMBINING CEDILLA )。" + +#: ../../library/unicodedata.rst:115 +msgid "" +"For each character, there are two normal forms: normal form C and normal " +"form D. Normal form D (NFD) is also known as canonical decomposition, and " +"translates each character into its decomposed form. Normal form C (NFC) " +"first applies a canonical decomposition, then composes pre-combined " +"characters again." +msgstr "" +"对于每个字符,有两种正规形式:正规形式 C 和正规形式 D 。正规形式D(NFD)也称为规范分解,并将每个字符转换为其分解形式。 " +"正规形式C(NFC)首先应用规范分解,然后再次组合预组合字符。" + +#: ../../library/unicodedata.rst:120 +msgid "" +"In addition to these two forms, there are two additional normal forms based " +"on compatibility equivalence. In Unicode, certain characters are supported " +"which normally would be unified with other characters. For example, U+2160 " +"(ROMAN NUMERAL ONE) is really the same thing as U+0049 (LATIN CAPITAL LETTER" +" I). However, it is supported in Unicode for compatibility with existing " +"character sets (e.g. gb2312)." +msgstr "" +"除了这两种形式之外,还有两种基于兼容性等效的其他常规形式。 在 Unicode 中,支持某些字符,这些字符通常与其他字符统一。 例如, " +"U+2160(ROMAN NUMERAL ONE)与 U+0049(LATIN CAPITAL LETTER I)完全相同。 但是, Unicode " +"支持它与现有字符集(例如 gb2312 )的兼容性。" + +#: ../../library/unicodedata.rst:127 +msgid "" +"The normal form KD (NFKD) will apply the compatibility decomposition, i.e. " +"replace all compatibility characters with their equivalents. The normal form" +" KC (NFKC) first applies the compatibility decomposition, followed by the " +"canonical composition." +msgstr "正规形式KD(NFKD)将应用兼容性分解,即用其等价项替换所有兼容性字符。 正规形式KC(NFKC)首先应用兼容性分解,然后是规范组合。" + +#: ../../library/unicodedata.rst:132 +msgid "" +"Even if two unicode strings are normalized and look the same to a human " +"reader, if one has combining characters and the other doesn't, they may not " +"compare equal." +msgstr "即使两个 unicode 字符串被规范化并且人类读者看起来相同,如果一个具有组合字符而另一个没有,则它们可能无法相等。" + +#: ../../library/unicodedata.rst:138 +msgid "" +"Return whether the Unicode string *unistr* is in the normal form *form*. " +"Valid values for *form* are 'NFC', 'NFKC', 'NFD', and 'NFKD'." +msgstr "" +"判断 Unicode 字符串 *unistr* 是否为正规形式 *form*。 *form* 的有效值为 'NFC', 'NFKC', 'NFD' 和 " +"'NFKD'。" + +#: ../../library/unicodedata.rst:144 +msgid "In addition, the module exposes the following constant:" +msgstr "此外,该模块暴露了以下常量:" + +#: ../../library/unicodedata.rst:148 +msgid "The version of the Unicode database used in this module." +msgstr "此模块中使用的 Unicode 数据库的版本。" + +#: ../../library/unicodedata.rst:153 +msgid "" +"This is an object that has the same methods as the entire module, but uses " +"the Unicode database version 3.2 instead, for applications that require this" +" specific version of the Unicode database (such as IDNA)." +msgstr "" +"这是一个与整个模块具有相同方法的对象,但对于需要此特定版本的 Unicode 数据库(如 IDNA )的应用程序,则使用 Unicode 数据库版本 " +"3.2 。" + +#: ../../library/unicodedata.rst:157 +msgid "Examples:" +msgstr "示例:" + +#: ../../library/unicodedata.rst:177 +msgid "Footnotes" +msgstr "脚注" + +#: ../../library/unicodedata.rst:178 +msgid "https://www.unicode.org/Public/13.0.0/ucd/NameAliases.txt" +msgstr "https://www.unicode.org/Public/13.0.0/ucd/NameAliases.txt" + +#: ../../library/unicodedata.rst:180 +msgid "https://www.unicode.org/Public/13.0.0/ucd/NamedSequences.txt" +msgstr "https://www.unicode.org/Public/13.0.0/ucd/NamedSequences.txt" diff --git a/library/unittest.mock-examples.po b/library/unittest.mock-examples.po new file mode 100644 index 000000000..fb96d8a5f --- /dev/null +++ b/library/unittest.mock-examples.po @@ -0,0 +1,1248 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) 2001-2024, Python Software Foundation +# This file is distributed under the same license as the Python package. +# FIRST AUTHOR , YEAR. +# +# Translators: +# cdarlint , 2019 +# kevin wong , 2020 +# Freesand Leo , 2022 +# Rafael Fontenelle , 2024 +# +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: Python 3.9\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2024-01-12 22:01+0000\n" +"PO-Revision-Date: 2017-02-16 23:33+0000\n" +"Last-Translator: Rafael Fontenelle , 2024\n" +"Language-Team: Chinese (China) (https://app.transifex.com/python-doc/teams/5390/zh_CN/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: zh_CN\n" +"Plural-Forms: nplurals=1; plural=0;\n" + +#: ../../library/unittest.mock-examples.rst:2 +msgid ":mod:`unittest.mock` --- getting started" +msgstr ":mod:`unittest.mock` --- 上手指南" + +#: ../../library/unittest.mock-examples.rst:27 +msgid "Using Mock" +msgstr "使用 mock" + +#: ../../library/unittest.mock-examples.rst:30 +msgid "Mock Patching Methods" +msgstr "模拟方法调用" + +#: ../../library/unittest.mock-examples.rst:32 +msgid "Common uses for :class:`Mock` objects include:" +msgstr "使用 :class:`Mock` 的常见场景:" + +#: ../../library/unittest.mock-examples.rst:34 +msgid "Patching methods" +msgstr "模拟函数调用" + +#: ../../library/unittest.mock-examples.rst:35 +msgid "Recording method calls on objects" +msgstr "记录在对象上的方法调用" + +#: ../../library/unittest.mock-examples.rst:37 +msgid "" +"You might want to replace a method on an object to check that it is called " +"with the correct arguments by another part of the system:" +msgstr "你可能需要替换一个对象上的方法,用于确认此方法被系统中的其他部分调用过,并且调用时使用了正确的参数。" + +#: ../../library/unittest.mock-examples.rst:45 +msgid "" +"Once our mock has been used (``real.method`` in this example) it has methods" +" and attributes that allow you to make assertions about how it has been " +"used." +msgstr "使用了 mock (本例中的 ``real.method``) 之后,它有方法和属性可以让你针对它是被如何使用的下断言。" + +#: ../../library/unittest.mock-examples.rst:50 +msgid "" +"In most of these examples the :class:`Mock` and :class:`MagicMock` classes " +"are interchangeable. As the ``MagicMock`` is the more capable class it makes" +" a sensible one to use by default." +msgstr "" +"在多数示例中,:class:`Mock` 与 :class:`MagicMock` 两个类可以相互替换,而 ``MagicMock`` " +"是一个更适用的类,通常情况下,使用它就可以了。" + +#: ../../library/unittest.mock-examples.rst:54 +msgid "" +"Once the mock has been called its :attr:`~Mock.called` attribute is set to " +"``True``. More importantly we can use the :meth:`~Mock.assert_called_with` " +"or :meth:`~Mock.assert_called_once_with` method to check that it was called " +"with the correct arguments." +msgstr "" +"如果 mock 被调用,它的 :attr:`~Mock.called` 属性就会变成 ``True``,更重要的是,我们可以使用 " +":meth:`~Mock.assert_called_with` 或者 :meth:`~Mock.assert_called_once_with` " +"方法来确认它在被调用时使用了正确的参数。" + +#: ../../library/unittest.mock-examples.rst:59 +msgid "" +"This example tests that calling ``ProductionClass().method`` results in a " +"call to the ``something`` method:" +msgstr "在如下的测试示例中,验证对于 ``ProductionClass().method`` 的调用会导致 ``something`` 的调用。" + +#: ../../library/unittest.mock-examples.rst:76 +msgid "Mock for Method Calls on an Object" +msgstr "对象上的方法调用的 mock" + +#: ../../library/unittest.mock-examples.rst:78 +msgid "" +"In the last example we patched a method directly on an object to check that " +"it was called correctly. Another common use case is to pass an object into a" +" method (or some part of the system under test) and then check that it is " +"used in the correct way." +msgstr "" +"上一个例子中我们直接在对象上给方法打补丁以检查它是否被正确地调用。 " +"另一个常见的用例是将一个对象传给一个方法(或被测试系统的某个部分)然后检查它是否以正确的方式被使用。" + +#: ../../library/unittest.mock-examples.rst:83 +msgid "" +"The simple ``ProductionClass`` below has a ``closer`` method. If it is " +"called with an object then it calls ``close`` on it." +msgstr "" +"下面这个简单的 ``ProductionClass`` 具有一个 ``closer`` 方法。 如果它附带一个对象被调用那么它就会调用其中的 " +"``close``。" + +#: ../../library/unittest.mock-examples.rst:91 +msgid "" +"So to test it we need to pass in an object with a ``close`` method and check" +" that it was called correctly." +msgstr "所以为了测试它我们需要传入一个带有 ``close`` 方法的对象并检查它是否被正确地调用。" + +#: ../../library/unittest.mock-examples.rst:99 +msgid "" +"We don't have to do any work to provide the 'close' method on our mock. " +"Accessing close creates it. So, if 'close' hasn't already been called then " +"accessing it in the test will create it, but " +":meth:`~Mock.assert_called_with` will raise a failure exception." +msgstr "" +"我们不需要做任何事来在我们的 mock 上提供 'close' 方法。 访问 close 的操作就会创建它。 因此,如果 'close' " +"还未被调用那么在测试时访问它就将创建它,但是 :meth:`~Mock.assert_called_with` 则会引发一个失败的异常。" + +#: ../../library/unittest.mock-examples.rst:106 +msgid "Mocking Classes" +msgstr "模拟类" + +#: ../../library/unittest.mock-examples.rst:108 +msgid "" +"A common use case is to mock out classes instantiated by your code under " +"test. When you patch a class, then that class is replaced with a mock. " +"Instances are created by *calling the class*. This means you access the " +"\"mock instance\" by looking at the return value of the mocked class." +msgstr "" +"一个常见的用例是模拟被测试的代码所实例化的类。 当你给一个类打上补丁,该类就会被替换为一个 mock。 实例是通过 *调用该类* 来创建的。 " +"这意味着你要通过查看被模拟类的返回值来访问“mock 实例”。" + +#: ../../library/unittest.mock-examples.rst:113 +msgid "" +"In the example below we have a function ``some_function`` that instantiates " +"``Foo`` and calls a method on it. The call to :func:`patch` replaces the " +"class ``Foo`` with a mock. The ``Foo`` instance is the result of calling the" +" mock, so it is configured by modifying the mock :attr:`~Mock.return_value`." +" ::" +msgstr "" +"在下面的例子中我们有一个函数 ``some_function`` 实例化了 ``Foo`` 并调用该实例中的一个方法。 对 :func:`patch` " +"的调用会将类 ``Foo`` 替换为一个 mock。 ``Foo`` 实例是调用该 mock 的结果,所以它是通过修改 " +":attr:`~Mock.return_value` 来配置的。 ::" + +#: ../../library/unittest.mock-examples.rst:130 +msgid "Naming your mocks" +msgstr "命名你的 mock" + +#: ../../library/unittest.mock-examples.rst:132 +msgid "" +"It can be useful to give your mocks a name. The name is shown in the repr of" +" the mock and can be helpful when the mock appears in test failure messages." +" The name is also propagated to attributes or methods of the mock:" +msgstr "" +"给你的 mock 起个名字可能会很有用。 名字会显示在 mock 的 repr 中并在 mock 出现于测试失败消息中时可以帮助理解。 " +"这个名字也会被传播给 mock 的属性或方法:" + +#: ../../library/unittest.mock-examples.rst:144 +msgid "Tracking all Calls" +msgstr "追踪所有的调用" + +#: ../../library/unittest.mock-examples.rst:146 +msgid "" +"Often you want to track more than a single call to a method. The " +":attr:`~Mock.mock_calls` attribute records all calls to child attributes of " +"the mock - and also to their children." +msgstr "" +"通常你会想要追踪对某个方法的多次调用。 :attr:`~Mock.mock_calls` 属性记录了所有对 mock 的子属性的调用 —— " +"并且还包括对它们的子属性的调用。" + +#: ../../library/unittest.mock-examples.rst:158 +msgid "" +"If you make an assertion about ``mock_calls`` and any unexpected methods " +"have been called, then the assertion will fail. This is useful because as " +"well as asserting that the calls you expected have been made, you are also " +"checking that they were made in the right order and with no additional " +"calls:" +msgstr "" +"如果你做了一个有关 ``mock_calls`` 的断言并且有任何非预期的方法被调用,则断言将失败。 " +"这很有用处,因为除了断言你所预期的调用已被执行,你还会检查它们是否以正确的顺序被执行并且没有额外的调用:" + +#: ../../library/unittest.mock-examples.rst:163 +msgid "" +"You use the :data:`call` object to construct lists for comparing with " +"``mock_calls``:" +msgstr "你使用 :data:`call` 对象来构造列表以便与 ``mock_calls`` 进行比较:" + +#: ../../library/unittest.mock-examples.rst:170 +msgid "" +"However, parameters to calls that return mocks are not recorded, which means" +" it is not possible to track nested calls where the parameters used to " +"create ancestors are important:" +msgstr "然而,返回 mock 的调用的形参不会被记录,这意味着不可能追踪附带了重要形参的创建上级对象的嵌套调用:" + +#: ../../library/unittest.mock-examples.rst:181 +msgid "Setting Return Values and Attributes" +msgstr "设置返回值和属性" + +#: ../../library/unittest.mock-examples.rst:183 +msgid "Setting the return values on a mock object is trivially easy:" +msgstr "在 mock 对象上设置返回值是非常容易的:" + +#: ../../library/unittest.mock-examples.rst:190 +msgid "Of course you can do the same for methods on the mock:" +msgstr "当然你也可以对 mock 上的方法做同样的操作:" + +#: ../../library/unittest.mock-examples.rst:197 +msgid "The return value can also be set in the constructor:" +msgstr "返回值也可以在构造器中设置:" + +#: ../../library/unittest.mock-examples.rst:203 +msgid "If you need an attribute setting on your mock, just do it:" +msgstr "如果你需要在你的 mock 上设置一个属性,只需这样做:" + +#: ../../library/unittest.mock-examples.rst:210 +msgid "" +"Sometimes you want to mock up a more complex situation, like for example " +"``mock.connection.cursor().execute(\"SELECT 1\")``. If we wanted this call " +"to return a list, then we have to configure the result of the nested call." +msgstr "" +"有时你会想要模拟更复杂的情况,例如这个例子 ``mock.connection.cursor().execute(\"SELECT 1\")``。 " +"如果我们希望这个调用返回一个列表,那么我们还必须配置嵌套调用的结果。" + +#: ../../library/unittest.mock-examples.rst:214 +msgid "" +"We can use :data:`call` to construct the set of calls in a \"chained call\" " +"like this for easy assertion afterwards:" +msgstr "我们可以像这样使用 :data:`call` 在一个“链式调用”中构造调用集合以便随后方便地设置断言:" + +#: ../../library/unittest.mock-examples.rst:228 +msgid "" +"It is the call to ``.call_list()`` that turns our call object into a list of" +" calls representing the chained calls." +msgstr "对 ``.call_list()`` 的调用会将我们的调用对象转成一个代表链式调用的调用列表。" + +#: ../../library/unittest.mock-examples.rst:233 +msgid "Raising exceptions with mocks" +msgstr "通过 mock 引发异常" + +#: ../../library/unittest.mock-examples.rst:235 +msgid "" +"A useful attribute is :attr:`~Mock.side_effect`. If you set this to an " +"exception class or instance then the exception will be raised when the mock " +"is called." +msgstr "" +"一个很有用的属性是 :attr:`~Mock.side_effect`。 如果你将该属性设为一个异常类或者实例那么当 mock " +"被调用时该异常将会被引发。" + +#: ../../library/unittest.mock-examples.rst:247 +msgid "Side effect functions and iterables" +msgstr "附带影响函数和可迭代对象" + +#: ../../library/unittest.mock-examples.rst:249 +msgid "" +"``side_effect`` can also be set to a function or an iterable. The use case " +"for ``side_effect`` as an iterable is where your mock is going to be called " +"several times, and you want each call to return a different value. When you " +"set ``side_effect`` to an iterable every call to the mock returns the next " +"value from the iterable:" +msgstr "" +"``side_effect`` 也可以被设为一个函数或可迭代对象。 ``side_effect`` 作为可迭代对象的应用场景适用于你的 mock " +"将要被多次调用,并且你希望每次调用都返回不同的值的情况。 当你将 ``side_effect`` 设为一个可迭代对象时每次对 mock " +"的调用将返回可迭代对象的下一个值。" + +#: ../../library/unittest.mock-examples.rst:264 +msgid "" +"For more advanced use cases, like dynamically varying the return values " +"depending on what the mock is called with, ``side_effect`` can be a " +"function. The function will be called with the same arguments as the mock. " +"Whatever the function returns is what the call returns:" +msgstr "" +"对于更高级的用例,例如根据 mock 调用时附带的参数动态改变返回值,``side_effect`` 可以指定一个函数。 该函数将附带与 mock " +"相同的参数被调用。 该函数所返回的就是调用所返回的对象:" + +#: ../../library/unittest.mock-examples.rst:281 +msgid "Mocking asynchronous iterators" +msgstr "模拟异步迭代器" + +#: ../../library/unittest.mock-examples.rst:283 +msgid "" +"Since Python 3.8, ``AsyncMock`` and ``MagicMock`` have support to mock " +":ref:`async-iterators` through ``__aiter__``. The :attr:`~Mock.return_value`" +" attribute of ``__aiter__`` can be used to set the return values to be used " +"for iteration." +msgstr "" +"从 Python 3.8 起,``AsyncMock`` 和 ``MagicMock`` 支持通过 ``__aiter__`` 来模拟 " +":ref:`async-iterators`。 ``__aiter__`` 的 :attr:`~Mock.return_value` " +"属性可以被用来设置要用于迭代的返回值。" + +#: ../../library/unittest.mock-examples.rst:298 +msgid "Mocking asynchronous context manager" +msgstr "模拟异步上下文管理器" + +#: ../../library/unittest.mock-examples.rst:300 +msgid "" +"Since Python 3.8, ``AsyncMock`` and ``MagicMock`` have support to mock " +":ref:`async-context-managers` through ``__aenter__`` and ``__aexit__``. By " +"default, ``__aenter__`` and ``__aexit__`` are ``AsyncMock`` instances that " +"return an async function." +msgstr "" +"从 Python 3.8 起,``AsyncMock`` 和 ``MagicMock`` 支持通过 ``__aenter__`` 和 " +"``__aexit__`` 来模拟 :ref:`async-context-managers`。 在默认情况下,``__aenter__`` 和 " +"``__aexit__`` 将为返回异步函数的 ``AsyncMock`` 实例。" + +#: ../../library/unittest.mock-examples.rst:322 +msgid "Creating a Mock from an Existing Object" +msgstr "基于现有对象创建模拟对象" + +#: ../../library/unittest.mock-examples.rst:324 +msgid "" +"One problem with over use of mocking is that it couples your tests to the " +"implementation of your mocks rather than your real code. Suppose you have a " +"class that implements ``some_method``. In a test for another class, you " +"provide a mock of this object that *also* provides ``some_method``. If later" +" you refactor the first class, so that it no longer has ``some_method`` - " +"then your tests will continue to pass even though your code is now broken!" +msgstr "" +"使用模拟操作的一个问题是它会将你的测试与你的 mock 实现相关联而不是与你的真实代码相关联。 假设你有一个实现了 ``some_method`` " +"的类。 在对另一个类的测试中,你提供了一个 *同样* 提供了 ``some_method`` 的模拟该对象的 mock 对象。 " +"如果后来你重构了第一个类,使得它不再具有 ``some_method`` —— 那么你的测试将继续保持通过,尽管现在你的代码已经被破坏了!" + +#: ../../library/unittest.mock-examples.rst:331 +msgid "" +":class:`Mock` allows you to provide an object as a specification for the " +"mock, using the *spec* keyword argument. Accessing methods / attributes on " +"the mock that don't exist on your specification object will immediately " +"raise an attribute error. If you change the implementation of your " +"specification, then tests that use that class will start failing immediately" +" without you having to instantiate the class in those tests." +msgstr "" +":class:`Mock` 允许你使用allows you to provide an object as a specification for " +"the mock, using the *spec* 关键字参数来提供一个对象作为 mock 的规格说明。 在 mock " +"上访问不存在于你的规格说明对象中的方法 / 属性将立即引发一个属性错误。 " +"如果你修改你的规格说明的实现,,那么使用了该类的测试将立即开始失败而不需要你在这些测试中实例化该类。" + +#: ../../library/unittest.mock-examples.rst:344 +msgid "" +"Using a specification also enables a smarter matching of calls made to the " +"mock, regardless of whether some parameters were passed as positional or " +"named arguments::" +msgstr "使用规格说明还可以启用对 mock 的调用的更聪明的匹配操作,无论是否有将某些形参作为位置或关键字参数传入::" + +#: ../../library/unittest.mock-examples.rst:355 +msgid "" +"If you want this smarter matching to also work with method calls on the " +"mock, you can use :ref:`auto-speccing `." +msgstr "" +"如果你想要让这些更聪明的匹配操作也适用于 mock 上的方法调用,你可以使用 :ref:`auto-speccing `。" + +#: ../../library/unittest.mock-examples.rst:358 +msgid "" +"If you want a stronger form of specification that prevents the setting of " +"arbitrary attributes as well as the getting of them then you can use " +"*spec_set* instead of *spec*." +msgstr "如果你想要更强形式的规格说明以防止设置任意属性并获取它们那么你可以使用 *spec_set* 来代替 *spec*。" + +#: ../../library/unittest.mock-examples.rst:365 +msgid "Patch Decorators" +msgstr "补丁装饰器" + +#: ../../library/unittest.mock-examples.rst:369 +msgid "" +"With :func:`patch` it matters that you patch objects in the namespace where " +"they are looked up. This is normally straightforward, but for a quick guide " +"read :ref:`where to patch `." +msgstr "" +"在查找对象的名称空间中修补对象使用 :func:`patch` 。使用起来很简单,阅读 :ref:`在哪里打补丁 ` " +"来快速上手。" + +#: ../../library/unittest.mock-examples.rst:374 +msgid "" +"A common need in tests is to patch a class attribute or a module attribute, " +"for example patching a builtin or patching a class in a module to test that " +"it is instantiated. Modules and classes are effectively global, so patching " +"on them has to be undone after the test or the patch will persist into other" +" tests and cause hard to diagnose problems." +msgstr "" +"测试中的一个常见需求是为类属性或模块属性打补丁,例如修补内置对象或修补某个模块中的类来测试其是否被实例化。 " +"模块和类都可算是全局对象,因此对它们打补丁的操作必须在测试完成之后被还原否则补丁将持续影响其他测试并导致难以诊断的问题。" + +#: ../../library/unittest.mock-examples.rst:380 +msgid "" +"mock provides three convenient decorators for this: :func:`patch`, " +":func:`patch.object` and :func:`patch.dict`. ``patch`` takes a single " +"string, of the form ``package.module.Class.attribute`` to specify the " +"attribute you are patching. It also optionally takes a value that you want " +"the attribute (or class or whatever) to be replaced with. 'patch.object' " +"takes an object and the name of the attribute you would like patched, plus " +"optionally the value to patch it with." +msgstr "" +"为此 mock 提供了三个便捷的装饰器: :func:`patch`, :func:`patch.object` 和 " +":func:`patch.dict`。 ``patch`` 接受单个字符串,其形式 ``package.module.Class.attribute``" +" 指明你要修补的属性。 它还可选择接受一个值用来替换指定的属性(或者类对象等等)。 'patch.object' " +"接受一个对象和你想要修补的属性名称,并可选择接受要用作补丁的值。" + +#: ../../library/unittest.mock-examples.rst:388 +msgid "``patch.object``::" +msgstr "``patch.object``::" + +#: ../../library/unittest.mock-examples.rst:405 +msgid "" +"If you are patching a module (including :mod:`builtins`) then use " +":func:`patch` instead of :func:`patch.object`:" +msgstr "" +"如果你要给一个模块 (包括 :mod:`builtins`) 打补丁则可使用 :func:`patch` 来代替 " +":func:`patch.object`:" + +#: ../../library/unittest.mock-examples.rst:415 +msgid "" +"The module name can be 'dotted', in the form ``package.module`` if needed::" +msgstr "如有必要模块名可以是“带点号”的,其形式如 ``package.module``::" + +#: ../../library/unittest.mock-examples.rst:424 +msgid "A nice pattern is to actually decorate test methods themselves:" +msgstr "一个良好的模式是实际地装饰测试方法本身:" + +#: ../../library/unittest.mock-examples.rst:435 +msgid "" +"If you want to patch with a Mock, you can use :func:`patch` with only one " +"argument (or :func:`patch.object` with two arguments). The mock will be " +"created for you and passed into the test function / method:" +msgstr "" +"如果你想要通过 Mock 来打补丁,你可以只附带一个参数使用 :func:`patch` (或附带两个参数使用 " +":func:`patch.object`)。 这将为你创建 mock 并传递给测试函数 / 方法:" + +#: ../../library/unittest.mock-examples.rst:447 +msgid "You can stack up multiple patch decorators using this pattern::" +msgstr "你可以使用以下模式来堆叠多个补丁装饰器::" + +#: ../../library/unittest.mock-examples.rst:458 +msgid "" +"When you nest patch decorators the mocks are passed in to the decorated " +"function in the same order they applied (the normal *Python* order that " +"decorators are applied). This means from the bottom up, so in the example " +"above the mock for ``test_module.ClassName2`` is passed in first." +msgstr "" +"当你嵌套 patch 装饰器时将以它们被应用的相同顺序(即 *Python* 应用装饰器的正常顺序)将 mock 传入被装饰的函数。 " +"也就是说从下往上,因此在上面的示例中 ``test_module.ClassName2`` 的 mock 会被最先传入。" + +#: ../../library/unittest.mock-examples.rst:463 +msgid "" +"There is also :func:`patch.dict` for setting values in a dictionary just " +"during a scope and restoring the dictionary to its original state when the " +"test ends:" +msgstr "还有一个 :func:`patch.dict` 用于在一定范围内设置字典中的值,并在测试结束时将字典恢复为其原始状态:" + +#: ../../library/unittest.mock-examples.rst:474 +msgid "" +"``patch``, ``patch.object`` and ``patch.dict`` can all be used as context " +"managers." +msgstr "``patch``, ``patch.object`` 和 ``patch.dict`` 都可被用作上下文管理器。" + +#: ../../library/unittest.mock-examples.rst:476 +msgid "" +"Where you use :func:`patch` to create a mock for you, you can get a " +"reference to the mock using the \"as\" form of the with statement:" +msgstr "在你使用 :func:`patch` 为你创建 mock 时,你可以使用 with 语句的 \"as\" 形式来获得对 mock 的引用:" + +#: ../../library/unittest.mock-examples.rst:491 +msgid "" +"As an alternative ``patch``, ``patch.object`` and ``patch.dict`` can be used" +" as class decorators. When used in this way it is the same as applying the " +"decorator individually to every method whose name starts with \"test\"." +msgstr "" +"作为替代 ``patch``, ``patch.object`` 和 ``patch.dict`` 可以被用作类装饰器。 " +"当以此方式使用时其效果与将装饰器单独应用到每个以 \"test\" 打头的方法上相同。" + +#: ../../library/unittest.mock-examples.rst:499 +msgid "Further Examples" +msgstr "更多示例" + +#: ../../library/unittest.mock-examples.rst:502 +msgid "Here are some more examples for some slightly more advanced scenarios." +msgstr "下面是一些针对更为高级应用场景的补充示例。" + +#: ../../library/unittest.mock-examples.rst:506 +msgid "Mocking chained calls" +msgstr "模拟链式调用" + +#: ../../library/unittest.mock-examples.rst:508 +msgid "" +"Mocking chained calls is actually straightforward with mock once you " +"understand the :attr:`~Mock.return_value` attribute. When a mock is called " +"for the first time, or you fetch its ``return_value`` before it has been " +"called, a new :class:`Mock` is created." +msgstr "" +"实际上一旦你理解了 :attr:`~Mock.return_value` 属性那么使用 mock 模拟链式调用就会相当直观。 当一个 mock " +"首次被调用,或者当你在它被调用前获取其 ``return_value`` 时,将会创建一个新的 :class:`Mock`。" + +#: ../../library/unittest.mock-examples.rst:513 +msgid "" +"This means that you can see how the object returned from a call to a mocked " +"object has been used by interrogating the ``return_value`` mock:" +msgstr "这意味着你可以通过检视 ``return_value`` mock 来了解从调用被模拟对象返回的对象是如何被使用的:" + +#: ../../library/unittest.mock-examples.rst:521 +msgid "" +"From here it is a simple step to configure and then make assertions about " +"chained calls. Of course another alternative is writing your code in a more " +"testable way in the first place..." +msgstr "从这里开始只需一个步骤即可配置并创建有关链式调用的断言。 当然还有另一种选择是首先以更易于测试的方式来编写你的代码..." + +#: ../../library/unittest.mock-examples.rst:525 +msgid "So, suppose we have some code that looks a little bit like this:" +msgstr "因此,如果我们有这样一些代码:" + +#: ../../library/unittest.mock-examples.rst:534 +msgid "" +"Assuming that ``BackendProvider`` is already well tested, how do we test " +"``method()``? Specifically, we want to test that the code section ``# more " +"code`` uses the response object in the correct way." +msgstr "" +"假定 ``BackendProvider`` 已经过良好测试,我们要如何测试 ``method()``? 特别地,我们希望测试代码段 ``# more " +"code`` 是否以正确的方式使用了响应对象。" + +#: ../../library/unittest.mock-examples.rst:538 +msgid "" +"As this chain of calls is made from an instance attribute we can monkey " +"patch the ``backend`` attribute on a ``Something`` instance. In this " +"particular case we are only interested in the return value from the final " +"call to ``start_call`` so we don't have much configuration to do. Let's " +"assume the object it returns is 'file-like', so we'll ensure that our " +"response object uses the builtin :func:`open` as its ``spec``." +msgstr "" +"由于这个链式调用来自一个实例属性我们可以对 ``backend`` 属性在 ``Something`` 实例上进行猴子式修补。 " +"在这个特定情况下我们只对最后调用 ``start_call`` 的返回值感兴趣所以我们不需要进行太多的配置。 " +"让我们假定它返回的是“文件类”对象,因此我们将确保我们的响应对象使用内置的 :func:`open` 作为其 ``spec``。" + +#: ../../library/unittest.mock-examples.rst:545 +msgid "" +"To do this we create a mock instance as our mock backend and create a mock " +"response object for it. To set the response as the return value for that " +"final ``start_call`` we could do this::" +msgstr "" +"为了做到这一点我们创建一个 mock 实例作为我们的 mock 后端并为它创建一个 mock 响应对象。 要将该响应对象设为最后的 " +"``start_call`` 的返回值我们可以这样做::" + +#: ../../library/unittest.mock-examples.rst:551 +msgid "" +"We can do that in a slightly nicer way using the " +":meth:`~Mock.configure_mock` method to directly set the return value for " +"us::" +msgstr "我们可以通过更好一些的方式做到这一点,即使用 :meth:`~Mock.configure_mock` 方法直接为我们设置返回值::" + +#: ../../library/unittest.mock-examples.rst:560 +msgid "" +"With these we monkey patch the \"mock backend\" in place and can make the " +"real call::" +msgstr "有了这些我们就能准备好给“mock 后端”打上猴子补丁并可以执行真正的调用::" + +#: ../../library/unittest.mock-examples.rst:566 +msgid "" +"Using :attr:`~Mock.mock_calls` we can check the chained call with a single " +"assert. A chained call is several calls in one line of code, so there will " +"be several entries in ``mock_calls``. We can use :meth:`call.call_list` to " +"create this list of calls for us::" +msgstr "" +"使用 :attr:`~Mock.mock_calls` 我们可以通过一个断言来检查链式调用。 一个链式调用就是在一行代码中连续执行多个调用,所以在 " +"``mock_calls`` 中将会有多个条目。 我们可以使用 :meth:`call.call_list` 来为我们创建这个调用列表::" + +#: ../../library/unittest.mock-examples.rst:577 +msgid "Partial mocking" +msgstr "部分模拟" + +#: ../../library/unittest.mock-examples.rst:579 +msgid "" +"In some tests I wanted to mock out a call to :meth:`datetime.date.today` to " +"return a known date, but I didn't want to prevent the code under test from " +"creating new date objects. Unfortunately :class:`datetime.date` is written " +"in C, and so I couldn't just monkey-patch out the static :meth:`date.today` " +"method." +msgstr "" +"在某些测试中我希望模拟对 :meth:`datetime.date.today` " +"的调用以返回一个已知的日期,但我又不想阻止被测试的代码创建新的日期对象。 很不幸 :class:`datetime.date` 是用 C " +"语言编写的,因此我不能简单地给静态的 :meth:`date.today` 方法打上猴子补丁。" + +#: ../../library/unittest.mock-examples.rst:584 +msgid "" +"I found a simple way of doing this that involved effectively wrapping the " +"date class with a mock, but passing through calls to the constructor to the " +"real class (and returning real instances)." +msgstr "我找到了实现这一点的简单方式即通过一个 mock 来实际包装日期类,但通过对构造器的调用传递给真实的类(并返回真实的实例)。" + +#: ../../library/unittest.mock-examples.rst:588 +msgid "" +"The :func:`patch decorator ` is used here to mock out the ``date`` " +"class in the module under test. The :attr:`side_effect` attribute on the " +"mock date class is then set to a lambda function that returns a real date. " +"When the mock date class is called a real date will be constructed and " +"returned by ``side_effect``. ::" +msgstr "" +"这里使用 :func:`patch 装饰器 ` 来模拟被测试模块中的 ``date`` 类。 模拟 date 类中的 " +":attr:`side_effect` 属性随后被设为一个返回真实日期的 lambda 函数。 当模拟 date 类被调用时将由 " +"``side_effect`` 构造并返回一个真实日期。 ::" + +#: ../../library/unittest.mock-examples.rst:602 +msgid "" +"Note that we don't patch :class:`datetime.date` globally, we patch ``date`` " +"in the module that *uses* it. See :ref:`where to patch `." +msgstr "" +"请注意我们没有在全局范围上修补 :class:`datetime.date`,我们只是在 *使用* 它的模块中给 ``date`` 打补丁。 参见 " +":ref:`补丁的位置 `。" + +#: ../../library/unittest.mock-examples.rst:605 +msgid "" +"When ``date.today()`` is called a known date is returned, but calls to the " +"``date(...)`` constructor still return normal dates. Without this you can " +"find yourself having to calculate an expected result using exactly the same " +"algorithm as the code under test, which is a classic testing anti-pattern." +msgstr "" +"当 ``date.today()`` 被调用时将返回一个已知的日期,但对 ``date(...)`` 构造器的调用仍会返回普通的日期。 " +"如果不是这样你会发现你必须使用与被测试的代码完全相同的算法来计算出预期的结果,这是测试工作中的一个经典的反模式。" + +#: ../../library/unittest.mock-examples.rst:610 +msgid "" +"Calls to the date constructor are recorded in the ``mock_date`` attributes " +"(``call_count`` and friends) which may also be useful for your tests." +msgstr "" +"对 date 构造器的调用会被记录在 ``mock_date`` 属性中 (``call_count`` 等),它们也可能对你的测试有用处。" + +#: ../../library/unittest.mock-examples.rst:613 +msgid "" +"An alternative way of dealing with mocking dates, or other builtin classes, " +"is discussed in `this blog entry `_." +msgstr "" +"有关处理模块日期或其他内置类的一种替代方式的讨论请参见 `这篇博客文章 `_。" + +#: ../../library/unittest.mock-examples.rst:619 +msgid "Mocking a Generator Method" +msgstr "模拟生成器方法" + +#: ../../library/unittest.mock-examples.rst:621 +msgid "" +"A Python generator is a function or method that uses the :keyword:`yield` " +"statement to return a series of values when iterated over [#]_." +msgstr "Python 生成器是指在被迭代时使用 :keyword:`yield` 语句来返回一系列值的函数或方法 [#]_。" + +#: ../../library/unittest.mock-examples.rst:624 +msgid "" +"A generator method / function is called to return the generator object. It " +"is the generator object that is then iterated over. The protocol method for " +"iteration is :meth:`~container.__iter__`, so we can mock this using a " +":class:`MagicMock`." +msgstr "" +"调用生成器方法 / 函数将返回生成器对象。 生成器对象随后会被迭代。 迭代操作对应的协议方法是 " +":meth:`~container.__iter__`,因此我们可以使用 :class:`MagicMock` 来模拟它。" + +#: ../../library/unittest.mock-examples.rst:629 +msgid "" +"Here's an example class with an \"iter\" method implemented as a generator:" +msgstr "以下是一个使用 \"iter\" 方法模拟为生成器的示例类:" + +#: ../../library/unittest.mock-examples.rst:641 +msgid "How would we mock this class, and in particular its \"iter\" method?" +msgstr "我们要如何模拟这个类,特别是它的 \"iter\" 方法呢?" + +#: ../../library/unittest.mock-examples.rst:643 +msgid "" +"To configure the values returned from the iteration (implicit in the call to" +" :class:`list`), we need to configure the object returned by the call to " +"``foo.iter()``." +msgstr "" +"为了配置从迭代操作(隐含在对 :class:`list` 的调用中)返回的值,我们需要配置调用 ``foo.iter()`` 所返回的对象。" + +#: ../../library/unittest.mock-examples.rst:651 +msgid "" +"There are also generator expressions and more `advanced uses " +"`_ of generators, but we aren't" +" concerned about them here. A very good introduction to generators and how " +"powerful they are is: `Generator Tricks for Systems Programmers " +"`_." +msgstr "" +"此外还有生成器表达式和更多的生成器 `进阶用法 " +"`_,但在这里我们不去关心它们。 " +"有关生成器及其强大功能的一个很好的介绍请参阅: `针对系统程序员的生成器妙招 " +"`_。" + +#: ../../library/unittest.mock-examples.rst:659 +msgid "Applying the same patch to every test method" +msgstr "对每个测试方法应用相同的补丁" + +#: ../../library/unittest.mock-examples.rst:661 +msgid "" +"If you want several patches in place for multiple test methods the obvious " +"way is to apply the patch decorators to every method. This can feel like " +"unnecessary repetition. For Python 2.6 or more recent you can use " +":func:`patch` (in all its various forms) as a class decorator. This applies " +"the patches to all test methods on the class. A test method is identified by" +" methods whose names start with ``test``::" +msgstr "" +"如果你想要为多个测试方法准备好一些补丁那么最简单的方式就是将 patch 装饰器应用到每个方法。 这在感觉上会造成不必要的重复。 对于 Python " +"2.6 或更新的版本你可以使用 :func:`patch` (其所有不同的形式) 作为类装饰器。 这将把补丁应用于类中的所有测试方法。 " +"测试方法是通过名称前缀为 ``test`` 来标识的::" + +#: ../../library/unittest.mock-examples.rst:685 +msgid "" +"An alternative way of managing patches is to use the :ref:`start-and-stop`. " +"These allow you to move the patching into your ``setUp`` and ``tearDown`` " +"methods. ::" +msgstr "" +"另一种管理补丁的方式是使用 :ref:`start-and-stop`。 它允许你将打补丁操作移至你的 ``setUp`` 和 ``tearDown``" +" 方法中。 ::" + +#: ../../library/unittest.mock-examples.rst:702 +msgid "" +"If you use this technique you must ensure that the patching is \"undone\" by" +" calling ``stop``. This can be fiddlier than you might think, because if an " +"exception is raised in the setUp then tearDown is not called. " +":meth:`unittest.TestCase.addCleanup` makes this easier::" +msgstr "" +"如果你要使用这个技巧则你必须通过调用 ``stop`` 来确保补丁被“恢复”。 这可能要比你想像的更麻烦,因为如果在 setUp 中引发了异常那么 " +"tearDown 将不会被调用。 :meth:`unittest.TestCase.addCleanup` 可以做到更方便::" + +#: ../../library/unittest.mock-examples.rst:720 +msgid "Mocking Unbound Methods" +msgstr "模拟未绑定方法" + +#: ../../library/unittest.mock-examples.rst:722 +msgid "" +"Whilst writing tests today I needed to patch an *unbound method* (patching " +"the method on the class rather than on the instance). I needed self to be " +"passed in as the first argument because I want to make asserts about which " +"objects were calling this particular method. The issue is that you can't " +"patch with a mock for this, because if you replace an unbound method with a " +"mock it doesn't become a bound method when fetched from the instance, and so" +" it doesn't get self passed in. The workaround is to patch the unbound " +"method with a real function instead. The :func:`patch` decorator makes it so" +" simple to patch out methods with a mock that having to create a real " +"function becomes a nuisance." +msgstr "" +"当前在编写测试时我需要修补一个 *未绑定方法* (在类上而不是在实例上为方法打补丁)。 我需要将 self " +"作为第一个参数传入因为我想对哪些对象在调用这个特定方法进行断言。 问题是这里你不能用 mock 来打补丁,因为如果你用 mock " +"来替换一个未绑定方法那么当从实例中获取时它就不会成为一个已绑定方法,因而它不会获得传入的 self。 " +"绕过此问题的办法是改用一个真正的函数来修补未绑定方法。 :func:`patch` 装饰器让使用 mock " +"来给方法打补丁变得如此简单以至于创建一个真正的函数成为一件麻烦事。" + +#: ../../library/unittest.mock-examples.rst:733 +msgid "" +"If you pass ``autospec=True`` to patch then it does the patching with a " +"*real* function object. This function object has the same signature as the " +"one it is replacing, but delegates to a mock under the hood. You still get " +"your mock auto-created in exactly the same way as before. What it means " +"though, is that if you use it to patch out an unbound method on a class the " +"mocked function will be turned into a bound method if it is fetched from an " +"instance. It will have ``self`` passed in as the first argument, which is " +"exactly what I wanted:" +msgstr "" +"如果将 ``autospec=True`` 传给 patch 那么它就会用一个 *真正的* 函数对象来打补丁。 " +"这个函数对象具有与它所替换的函数相同的签名,但会在内部将操作委托给一个 mock。 你仍然可以通过与以前完全相同的方式来自动创建你的 mock。 " +"但是这将意味着一件事,就是如果你用它来修补一个类上的非绑定方法那么如果它是从一个实例中获取则被模拟的函数将被转为已绑定方法。 传给它的第一个参数将为 " +"``self``,而这真是我想要的:" + +#: ../../library/unittest.mock-examples.rst:754 +msgid "" +"If we don't use ``autospec=True`` then the unbound method is patched out " +"with a Mock instance instead, and isn't called with ``self``." +msgstr "" +"如果我们不使用 ``autospec=True`` 那么这个未绑定方法会改为通过一个 Mock 补丁来修补,而不是附带 ``self`` 来调用。" + +#: ../../library/unittest.mock-examples.rst:759 +msgid "Checking multiple calls with mock" +msgstr "通过 mock 检查多次调用" + +#: ../../library/unittest.mock-examples.rst:761 +msgid "" +"mock has a nice API for making assertions about how your mock objects are " +"used." +msgstr "mock 有一个很好的 API 用于针对你的 mock 对象如何被使用来下断言。" + +#: ../../library/unittest.mock-examples.rst:768 +msgid "" +"If your mock is only being called once you can use the " +":meth:`assert_called_once_with` method that also asserts that the " +":attr:`call_count` is one." +msgstr "" +"如果你的 mock 只会被调用一次你可以使用 :meth:`assert_called_once_with` 方法,这也将断言 " +":attr:`call_count` 为一。" + +#: ../../library/unittest.mock-examples.rst:779 +msgid "" +"Both ``assert_called_with`` and ``assert_called_once_with`` make assertions " +"about the *most recent* call. If your mock is going to be called several " +"times, and you want to make assertions about *all* those calls you can use " +":attr:`~Mock.call_args_list`:" +msgstr "" +"``assert_called_with`` 和 ``assert_called_once_with`` 都是有关 *最近* 调用的断言。 如果你的 " +"mock 将被多次调用,并且你想要针对 *所有* 这些调用下断言你可以使用 :attr:`~Mock.call_args_list`:" + +#: ../../library/unittest.mock-examples.rst:791 +msgid "" +"The :data:`call` helper makes it easy to make assertions about these calls. " +"You can build up a list of expected calls and compare it to " +"``call_args_list``. This looks remarkably similar to the repr of the " +"``call_args_list``:" +msgstr "" +"使用 :data:`call` 辅助对象可以方便地针对这些调用下断言。 你可以创建一个预期调用的列表并将其与 ``call_args_list`` " +"比较。 这看起来与 ``call_args_list`` 的 repr 非常相似:" + +#: ../../library/unittest.mock-examples.rst:801 +msgid "Coping with mutable arguments" +msgstr "处理可变参数" + +#: ../../library/unittest.mock-examples.rst:803 +msgid "" +"Another situation is rare, but can bite you, is when your mock is called " +"with mutable arguments. ``call_args`` and ``call_args_list`` store " +"*references* to the arguments. If the arguments are mutated by the code " +"under test then you can no longer make assertions about what the values were" +" when the mock was called." +msgstr "" +"另一种很少见,但可能给你带来麻烦的情况会在你的 mock 附带可变参数被调用的时候发生。 ``call_args`` 和 " +"``call_args_list`` 将保存对这些参数的 *引用*。 如果这些参数被受测试的代码所改变那么你将无法再针对当该 mock " +"被调用时附带的参数值下断言。" + +#: ../../library/unittest.mock-examples.rst:808 +msgid "" +"Here's some example code that shows the problem. Imagine the following " +"functions defined in 'mymodule'::" +msgstr "下面是一些演示此问题的示例代码。 设想在 'mymodule' 中定义了下列函数::" + +#: ../../library/unittest.mock-examples.rst:819 +msgid "" +"When we try to test that ``grob`` calls ``frob`` with the correct argument " +"look what happens::" +msgstr "当我们想要测试 ``grob`` 调用 ``frob`` 并附带了正确的参数时将可看到发生了什么::" + +#: ../../library/unittest.mock-examples.rst:834 +msgid "" +"One possibility would be for mock to copy the arguments you pass in. This " +"could then cause problems if you do assertions that rely on object identity " +"for equality." +msgstr "对于 mock 的一个可能性是复制你传入的参数。 如果你创建依赖于对象标识号相等性的断言那么这可能会在后面导致问题。" + +#: ../../library/unittest.mock-examples.rst:838 +msgid "" +"Here's one solution that uses the :attr:`side_effect` functionality. If you " +"provide a ``side_effect`` function for a mock then ``side_effect`` will be " +"called with the same args as the mock. This gives us an opportunity to copy " +"the arguments and store them for later assertions. In this example I'm using" +" *another* mock to store the arguments so that I can use the mock methods " +"for doing the assertion. Again a helper function sets this up for me. ::" +msgstr "" +"下面是一个使用 :attr:`side_effect` 功能的解决方案。 如果你为 mock 提供了 ``side_effect`` 函数那么 " +"``side_effect`` 将附带与该 mock 相同的参数被调用。 这使我们有机会拷贝这些参数并保存它们用于之后进行断言。 在这个例子中我使用了 " +"*另一个* mock 来保存参数以便我可以使用该 mock 的方法来进行断言。 在这里辅助函数再次为我设置好了所需的功能。 ::" + +#: ../../library/unittest.mock-examples.rst:867 +msgid "" +"``copy_call_args`` is called with the mock that will be called. It returns a" +" new mock that we do the assertion on. The ``side_effect`` function makes a " +"copy of the args and calls our ``new_mock`` with the copy." +msgstr "" +"调用 ``copy_call_args`` 时会传入将被调用的 mock。 它将返回一个新的 mock 供我们进行断言。 ``side_effect``" +" 函数会拷贝这些参数并附带该副本来调用我们的 ``new_mock``。" + +#: ../../library/unittest.mock-examples.rst:873 +msgid "" +"If your mock is only going to be used once there is an easier way of " +"checking arguments at the point they are called. You can simply do the " +"checking inside a ``side_effect`` function." +msgstr "" +"如果你的 mock 只会被使用一次那么有更容易的方式可以在它们被调用时检查参数。 你可以简单地在 ``side_effect`` 函数中执行检查。" + +#: ../../library/unittest.mock-examples.rst:887 +msgid "" +"An alternative approach is to create a subclass of :class:`Mock` or " +":class:`MagicMock` that copies (using :func:`copy.deepcopy`) the arguments. " +"Here's an example implementation:" +msgstr "" +"一个替代方式是创建一个 :class:`Mock` 或 :class:`MagicMock` 的子类来拷贝 (使用 " +":func:`copy.deepcopy`) 参数。 下面是一个示例实现:" + +#: ../../library/unittest.mock-examples.rst:911 +msgid "" +"When you subclass ``Mock`` or ``MagicMock`` all dynamically created " +"attributes, and the ``return_value`` will use your subclass automatically. " +"That means all children of a ``CopyingMock`` will also have the type " +"``CopyingMock``." +msgstr "" +"当你子类化 ``Mock`` 或 ``MagicMock`` 时所有动态创建的属性以及 ``return_value`` 都将自动使用你的子类。 " +"这意味着 ``CopyingMock`` 的所有子类也都将为 ``CopyingMock`` 类型。" + +#: ../../library/unittest.mock-examples.rst:917 +msgid "Nesting Patches" +msgstr "嵌套补丁" + +#: ../../library/unittest.mock-examples.rst:919 +msgid "" +"Using patch as a context manager is nice, but if you do multiple patches you" +" can end up with nested with statements indenting further and further to the" +" right::" +msgstr "使用 patch 作为上下文管理器很不错,但是如果你要执行多个补丁你将不断嵌套 with 语句使得代码越来越深地向右缩进::" + +#: ../../library/unittest.mock-examples.rst:937 +msgid "" +"With unittest ``cleanup`` functions and the :ref:`start-and-stop` we can " +"achieve the same effect without the nested indentation. A simple helper " +"method, ``create_patch``, puts the patch in place and returns the created " +"mock for us::" +msgstr "" +"使用 unittest ``cleanup`` 函数和 :ref:`start-and-stop` 我们可以达成同样的效果而无须嵌套缩进。 " +"一个简单的辅助方法 ``create_patch`` 会为我们执行打补丁操作并返回所创建的 mock::" + +#: ../../library/unittest.mock-examples.rst:965 +msgid "Mocking a dictionary with MagicMock" +msgstr "使用 MagicMock 模拟字典" + +#: ../../library/unittest.mock-examples.rst:967 +msgid "" +"You may want to mock a dictionary, or other container object, recording all " +"access to it whilst having it still behave like a dictionary." +msgstr "你可能会想要模拟一个字典或其他容器对象,记录所有对它的访问并让它的行为仍然像是一个字典。" + +#: ../../library/unittest.mock-examples.rst:970 +msgid "" +"We can do this with :class:`MagicMock`, which will behave like a dictionary," +" and using :data:`~Mock.side_effect` to delegate dictionary access to a real" +" underlying dictionary that is under our control." +msgstr "" +"要做到这点我们可以用 :class:`MagicMock`,它的行为类似于字典,并会使用 :data:`~Mock.side_effect` " +"将字典访问委托给下层的在我们控制之下的一个真正的字典。" + +#: ../../library/unittest.mock-examples.rst:974 +msgid "" +"When the :meth:`__getitem__` and :meth:`__setitem__` methods of our " +"``MagicMock`` are called (normal dictionary access) then ``side_effect`` is " +"called with the key (and in the case of ``__setitem__`` the value too). We " +"can also control what is returned." +msgstr "" +"当我们的 ``MagicMock`` 的 :meth:`__getitem__` 和 :meth:`__setitem__` " +"方法被调用(即普通的字典访问操作)时 ``side_effect`` 将附带键(对于 ``__setitem__`` 则还将附带值)被调用。 " +"我们也可以控制返回的对象。" + +#: ../../library/unittest.mock-examples.rst:978 +msgid "" +"After the ``MagicMock`` has been used we can use attributes like " +":data:`~Mock.call_args_list` to assert about how the dictionary was used:" +msgstr "" +"在 ``MagicMock`` 被使用之后我们可以使用 :data:`~Mock.call_args_list` " +"等属性来针对该字典是如何被使用的下断言。" + +#: ../../library/unittest.mock-examples.rst:994 +msgid "" +"An alternative to using ``MagicMock`` is to use ``Mock`` and *only* provide " +"the magic methods you specifically want:" +msgstr "``MagicMock`` 的一个可用替代是使用 ``Mock`` 并 *仅仅* 提供你明确需要的魔术方法:" + +#: ../../library/unittest.mock-examples.rst:1001 +msgid "" +"A *third* option is to use ``MagicMock`` but passing in ``dict`` as the " +"*spec* (or *spec_set*) argument so that the ``MagicMock`` created only has " +"dictionary magic methods available:" +msgstr "" +"*第三个* 选项是使用 ``MagicMock`` 但传入 ``dict`` 作为 *spec* (或 *spec_set*) 参数以使得所创建的 " +"``MagicMock`` 只有字典魔术方法是可用的:" + +#: ../../library/unittest.mock-examples.rst:1009 +msgid "" +"With these side effect functions in place, the ``mock`` will behave like a " +"normal dictionary but recording the access. It even raises a :exc:`KeyError`" +" if you try to access a key that doesn't exist." +msgstr "" +"通过提供这些附带影响函数,``mock`` 的行为将类似于普通字典但又会记录所有访问。 如果你尝试访问一个不存在的键它甚至会引发 " +":exc:`KeyError`。" + +#: ../../library/unittest.mock-examples.rst:1028 +msgid "" +"After it has been used you can make assertions about the access using the " +"normal mock methods and attributes:" +msgstr "在它被使用之后你可以使用普通的 mock 方法和属性进行有关访问操作的断言:" + +#: ../../library/unittest.mock-examples.rst:1040 +msgid "Mock subclasses and their attributes" +msgstr "模拟子类及其属性" + +#: ../../library/unittest.mock-examples.rst:1042 +msgid "" +"There are various reasons why you might want to subclass :class:`Mock`. One " +"reason might be to add helper methods. Here's a silly example:" +msgstr "你可能出于各种原因想要子类化 :class:`Mock`。 其中一个可能的原因是为了添加辅助方法。 下面是一个笨兮兮的示例:" + +#: ../../library/unittest.mock-examples.rst:1058 +msgid "" +"The standard behaviour for ``Mock`` instances is that attributes and the " +"return value mocks are of the same type as the mock they are accessed on. " +"This ensures that ``Mock`` attributes are ``Mocks`` and ``MagicMock`` " +"attributes are ``MagicMocks`` [#]_. So if you're subclassing to add helper " +"methods then they'll also be available on the attributes and return value " +"mock of instances of your subclass." +msgstr "" +"The standard behaviour for ``Mock`` 实例的标准行为是属性和返回值 mock 具有与它们所访问的 mock " +"相同的类型。 这将确保 ``Mock`` 的属性均为 ``Mocks`` 而 ``MagicMock`` 的属性均为 ``MagicMocks`` " +"[#]_。 因此如果你通过子类化来添加辅助方法那么它们也将在你的子类的实例的属性和返回值 mock 上可用。" + +#: ../../library/unittest.mock-examples.rst:1074 +msgid "" +"Sometimes this is inconvenient. For example, `one user " +"`_ is subclassing mock to" +" created a `Twisted adaptor " +"`_." +" Having this applied to attributes too actually causes errors." +msgstr "" +"有时这很不方便。 例如,`有一位用户 `_ 子类化" +" mock 来创建一个 `Twisted 适配器 " +"`_。" +" 将它也应用到属性实际上会导致出错。" + +#: ../../library/unittest.mock-examples.rst:1080 +msgid "" +"``Mock`` (in all its flavours) uses a method called ``_get_child_mock`` to " +"create these \"sub-mocks\" for attributes and return values. You can prevent" +" your subclass being used for attributes by overriding this method. The " +"signature is that it takes arbitrary keyword arguments (``**kwargs``) which " +"are then passed onto the mock constructor:" +msgstr "" +"``Mock`` (它的所有形式) 使用一个名为 ``_get_child_mock`` 的方法来创建这些用于属性和返回值的“子 mock”。 " +"你可以通过重写此方法来防止你的子类被用于属性。 其签名被设为接受任意关键字参数 (``**kwargs``) 并且它们会被传递给 mock 构造器:" + +#: ../../library/unittest.mock-examples.rst:1097 +msgid "" +"An exception to this rule are the non-callable mocks. Attributes use the " +"callable variant because otherwise non-callable mocks couldn't have callable" +" methods." +msgstr "此规则的一个例外涉及不可调用 mock。 属性会使用可调用对象版本是因为如非如此则不可调用 mock 将无法拥有可调用的方法。" + +#: ../../library/unittest.mock-examples.rst:1103 +msgid "Mocking imports with patch.dict" +msgstr "通过 patch.dict 模拟导入" + +#: ../../library/unittest.mock-examples.rst:1105 +msgid "" +"One situation where mocking can be hard is where you have a local import " +"inside a function. These are harder to mock because they aren't using an " +"object from the module namespace that we can patch out." +msgstr "有一种会令模拟变困难的情况是当你在函数内部有局部导入。 这更难模拟的原因是它们不是使用来自我们能打补丁的模拟命名空间中的对象。" + +#: ../../library/unittest.mock-examples.rst:1109 +msgid "" +"Generally local imports are to be avoided. They are sometimes done to " +"prevent circular dependencies, for which there is *usually* a much better " +"way to solve the problem (refactor the code) or to prevent \"up front " +"costs\" by delaying the import. This can also be solved in better ways than " +"an unconditional local import (store the module as a class or module " +"attribute and only do the import on first use)." +msgstr "" +"一般来说局部导入是应当避免的。 局部导入有时是为了防止循环依赖,而这个问题 *通常* 都有更好的解决办法(重构代码)或者通过延迟导入来防止“前期成本”。" +" 这也可以通过比无条件地局部导入更好的方式来解决(将模块保存为一个类或模块属性并且只在首次使用时执行导入)。" + +#: ../../library/unittest.mock-examples.rst:1116 +msgid "" +"That aside there is a way to use ``mock`` to affect the results of an " +"import. Importing fetches an *object* from the :data:`sys.modules` " +"dictionary. Note that it fetches an *object*, which need not be a module. " +"Importing a module for the first time results in a module object being put " +"in `sys.modules`, so usually when you import something you get a module " +"back. This need not be the case however." +msgstr "" +"除此之外还有一个办法可以使用 ``mock`` 来影响导入的结果。 导入操作会从 :data:`sys.modules` 字典提取一个 *对象*。 " +"请注意是提取一个 *对象*,不是必须为模块。 首次导入一个模块将使一个模块对象被放入 " +"`sys.modules`,因此通常当你执行导入时你将得到一个模块。 然而这并不是必然的。" + +#: ../../library/unittest.mock-examples.rst:1123 +msgid "" +"This means you can use :func:`patch.dict` to *temporarily* put a mock in " +"place in :data:`sys.modules`. Any imports whilst this patch is active will " +"fetch the mock. When the patch is complete (the decorated function exits, " +"the with statement body is complete or ``patcher.stop()`` is called) then " +"whatever was there previously will be restored safely." +msgstr "" +"这意味着你可以使用 :func:`patch.dict` 来 *临时性地* 将一个 mock 放入 :data:`sys.modules`。 " +"在补丁激活期间的任何导入操作都将得到该 mock。 当补丁完成时(被装饰的函数退出,with 语句代码块结束或者 ``patcher.stop()`` " +"被调用)则之前存在的任何东西都将被安全地恢复。" + +#: ../../library/unittest.mock-examples.rst:1129 +msgid "Here's an example that mocks out the 'fooble' module." +msgstr "下面是一个模拟 'fooble' 模拟的示例。" + +#: ../../library/unittest.mock-examples.rst:1141 +msgid "" +"As you can see the ``import fooble`` succeeds, but on exit there is no " +"'fooble' left in :data:`sys.modules`." +msgstr "" +"你可以看到 ``import fooble`` 成功执行,而当退出时 :data:`sys.modules` 中将不再有 'fooble'。" + +#: ../../library/unittest.mock-examples.rst:1144 +msgid "This also works for the ``from module import name`` form:" +msgstr "这同样适用于 ``from module import name`` 形式:" + +#: ../../library/unittest.mock-examples.rst:1154 +msgid "With slightly more work you can also mock package imports:" +msgstr "稍微多做一点工作你还可以模拟包的导入:" + +#: ../../library/unittest.mock-examples.rst:1167 +msgid "Tracking order of calls and less verbose call assertions" +msgstr "追踪调用顺序和不太冗长的调用断言" + +#: ../../library/unittest.mock-examples.rst:1169 +msgid "" +"The :class:`Mock` class allows you to track the *order* of method calls on " +"your mock objects through the :attr:`~Mock.method_calls` attribute. This " +"doesn't allow you to track the order of calls between separate mock objects," +" however we can use :attr:`~Mock.mock_calls` to achieve the same effect." +msgstr "" +":class:`Mock` 类允许你通过 :attr:`~Mock.method_calls` 属性来追踪在你的 mock 对象上的方法调用的 " +"*顺序*。 这并不允许你追踪单独 mock 对象之间的调用顺序,但是我们可以使用 :attr:`~Mock.mock_calls` 来达到同样的效果。" + +#: ../../library/unittest.mock-examples.rst:1174 +msgid "" +"Because mocks track calls to child mocks in ``mock_calls``, and accessing an" +" arbitrary attribute of a mock creates a child mock, we can create our " +"separate mocks from a parent one. Calls to those child mock will then all be" +" recorded, in order, in the ``mock_calls`` of the parent:" +msgstr "" +"因为 mock 会追踪 ``mock_calls`` 中对子 mock 的调用,并且访问 mock 的任意属性都会创建一个子 " +"mock,所以我们可以基于父 mock 创建单独的子 mock。 随后对这些子 mock 的调用将按顺序被记录在父 mock 的 " +"``mock_calls`` 中:" + +#: ../../library/unittest.mock-examples.rst:1191 +msgid "" +"We can then assert about the calls, including the order, by comparing with " +"the ``mock_calls`` attribute on the manager mock:" +msgstr "我们可以随后通过与管理器 mock 上的 ``mock_calls`` 属性进行比较来进行有关这些调用,包括调用顺序的断言:" + +#: ../../library/unittest.mock-examples.rst:1198 +msgid "" +"If ``patch`` is creating, and putting in place, your mocks then you can " +"attach them to a manager mock using the :meth:`~Mock.attach_mock` method. " +"After attaching calls will be recorded in ``mock_calls`` of the manager. ::" +msgstr "" +"如果 ``patch`` 创建并准备好了你的 mock 那么你可以使用 :meth:`~Mock.attach_mock` 方法将它们附加到管理器 " +"mock 上。 在附加之后所有调用都将被记录在管理器的 ``mock_calls`` 中。 ::" + +#: ../../library/unittest.mock-examples.rst:1217 +msgid "" +"If many calls have been made, but you're only interested in a particular " +"sequence of them then an alternative is to use the " +":meth:`~Mock.assert_has_calls` method. This takes a list of calls " +"(constructed with the :data:`call` object). If that sequence of calls are in" +" :attr:`~Mock.mock_calls` then the assert succeeds." +msgstr "" +"如果已经进行了许多调用,但是你只对它们的一个特定序列感兴趣则有一种替代方式是使用 :meth:`~Mock.assert_has_calls` 方法。 " +"这需要一个调用的列表(使用 :data:`call` 对象来构建)。 如果该调用序列在 :attr:`~Mock.mock_calls` " +"中则断言将成功。" + +#: ../../library/unittest.mock-examples.rst:1231 +msgid "" +"Even though the chained call ``m.one().two().three()`` aren't the only calls" +" that have been made to the mock, the assert still succeeds." +msgstr "即使链式调用 ``m.one().two().three()`` 不是对 mock 的唯一调用,该断言仍将成功。" + +#: ../../library/unittest.mock-examples.rst:1234 +msgid "" +"Sometimes a mock may have several calls made to it, and you are only " +"interested in asserting about *some* of those calls. You may not even care " +"about the order. In this case you can pass ``any_order=True`` to " +"``assert_has_calls``:" +msgstr "" +"有时可能会对一个 mock 进行多次调用,而你只对断言其中的 *某些* 调用感兴趣。 你甚至可能对顺序也不关心。 在这种情况下你可以将 " +"``any_order=True`` 传给 ``assert_has_calls``:" + +#: ../../library/unittest.mock-examples.rst:1246 +msgid "More complex argument matching" +msgstr "更复杂的参数匹配" + +#: ../../library/unittest.mock-examples.rst:1248 +msgid "" +"Using the same basic concept as :data:`ANY` we can implement matchers to do " +"more complex assertions on objects used as arguments to mocks." +msgstr "使用与 :data:`ANY` 一样的基本概念我们可以实现匹配器以便在用作 mock 的参数的对象上执行更复杂的断言。" + +#: ../../library/unittest.mock-examples.rst:1251 +msgid "" +"Suppose we expect some object to be passed to a mock that by default " +"compares equal based on object identity (which is the Python default for " +"user defined classes). To use :meth:`~Mock.assert_called_with` we would need" +" to pass in the exact same object. If we are only interested in some of the " +"attributes of this object then we can create a matcher that will check these" +" attributes for us." +msgstr "" +"假设我们准备将某个对象传给一个在默认情况下基于对象标识相等(这是 Python 中用户自定义类的默认行为)的 mock。 要使用 " +":meth:`~Mock.assert_called_with` 我们就将必须传入完全相同的对象。 " +"如果我们只对该对象的某些属性感兴趣那么我们可以创建一个能为我们检查这些属性的匹配器。" + +#: ../../library/unittest.mock-examples.rst:1258 +msgid "" +"You can see in this example how a 'standard' call to ``assert_called_with`` " +"isn't sufficient:" +msgstr "在这个示例中你可以看到为何执行对 ``assert_called_with`` 的‘标准’调用并不足够:" + +#: ../../library/unittest.mock-examples.rst:1273 +msgid "" +"A comparison function for our ``Foo`` class might look something like this:" +msgstr "一个针对我们的 ``Foo`` 类的比较函数看上去会是这样的:" + +#: ../../library/unittest.mock-examples.rst:1285 +msgid "" +"And a matcher object that can use comparison functions like this for its " +"equality operation would look something like this:" +msgstr "而一个可以使用这样的比较函数进行相等性比较运算的匹配器对象看上去会是这样的:" + +#: ../../library/unittest.mock-examples.rst:1296 +msgid "Putting all this together:" +msgstr "将所有这些放在一起:" + +#: ../../library/unittest.mock-examples.rst:1301 +msgid "" +"The ``Matcher`` is instantiated with our compare function and the ``Foo`` " +"object we want to compare against. In ``assert_called_with`` the ``Matcher``" +" equality method will be called, which compares the object the mock was " +"called with against the one we created our matcher with. If they match then " +"``assert_called_with`` passes, and if they don't an :exc:`AssertionError` is" +" raised:" +msgstr "" +"``Matcher`` 是用我们的比较函数和我们想要比较的 ``Foo`` 对象来实例化的。 在 ``assert_called_with`` " +"中将会调用 ``Matcher`` 的相等性方法,它会将调用 mock 时附带的对象与我们创建我们的匹配器时附带的对象进行比较。 如果它们匹配则 " +"``assert_called_with`` 通过,而如果不匹配则会引发 :exc:`AssertionError`:" + +#: ../../library/unittest.mock-examples.rst:1314 +msgid "" +"With a bit of tweaking you could have the comparison function raise the " +":exc:`AssertionError` directly and provide a more useful failure message." +msgstr "通过一些调整你可以让比较函数直接引发 :exc:`AssertionError` 并提供更有用的失败消息。" + +#: ../../library/unittest.mock-examples.rst:1317 +msgid "" +"As of version 1.5, the Python testing library `PyHamcrest " +"`_ provides similar functionality, that " +"may be useful here, in the form of its equality matcher " +"(`hamcrest.library.integration.match_equality " +"`_)." +msgstr "" +"从 1.5 版开始,Python 测试库 `PyHamcrest `_ " +"提供了类似的功能,在这里可能会很有用,它采用的形式是相等性匹配器 " +"(`hamcrest.library.integration.match_equality " +"`_)。" diff --git a/library/unittest.mock.po b/library/unittest.mock.po new file mode 100644 index 000000000..93f46835a --- /dev/null +++ b/library/unittest.mock.po @@ -0,0 +1,2763 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) 2001-2022, Python Software Foundation +# This file is distributed under the same license as the Python package. +# FIRST AUTHOR , YEAR. +# +# Translators: +# Yon Liu , 2019 +# kevin wong , 2021 +# Freesand Leo , 2022 +# +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: Python 3.9\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2022-11-04 14:34+0000\n" +"PO-Revision-Date: 2017-02-16 23:33+0000\n" +"Last-Translator: Freesand Leo , 2022\n" +"Language-Team: Chinese (China) (https://www.transifex.com/python-doc/teams/5390/zh_CN/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: zh_CN\n" +"Plural-Forms: nplurals=1; plural=0;\n" + +#: ../../library/unittest.mock.rst:3 +msgid ":mod:`unittest.mock` --- mock object library" +msgstr ":mod:`unittest.mock` --- mock对象库" + +#: ../../library/unittest.mock.rst:13 +msgid "**Source code:** :source:`Lib/unittest/mock.py`" +msgstr "**源代码:** :source:`Lib/unittest/mock.py`" + +#: ../../library/unittest.mock.rst:17 +msgid "" +":mod:`unittest.mock` is a library for testing in Python. It allows you to " +"replace parts of your system under test with mock objects and make " +"assertions about how they have been used." +msgstr "" +":mod:`unittest.mock` 是一个用于测试的Python库。它允许使用mock对象替换受测试系统的部分,并对它们如何已经被使用进行断言。" + +#: ../../library/unittest.mock.rst:21 +msgid "" +":mod:`unittest.mock` provides a core :class:`Mock` class removing the need " +"to create a host of stubs throughout your test suite. After performing an " +"action, you can make assertions about which methods / attributes were used " +"and arguments they were called with. You can also specify return values and " +"set needed attributes in the normal way." +msgstr "" +":mod:`unittest.mock` 提供的 :class:`Mock` " +"类,能在整个测试套件中模拟大量的方法。创建后,就可以断言调用了哪些方法/属性及其参数。还可以以常规方式指定返回值并设置所需的属性。" + +#: ../../library/unittest.mock.rst:27 +msgid "" +"Additionally, mock provides a :func:`patch` decorator that handles patching " +"module and class level attributes within the scope of a test, along with " +":const:`sentinel` for creating unique objects. See the `quick guide`_ for " +"some examples of how to use :class:`Mock`, :class:`MagicMock` and " +":func:`patch`." +msgstr "" +"此外,mock 提供了用于修补测试范围内模块和类级别属性的 :func:`patch` 装饰器,和用于创建独特对象的 :const:`sentinel`" +" 。 阅读 `quick guide`_ 中的案例了解如何使用 :class:`Mock` ,:class:`MagicMock` 和 " +":func:`patch` 。" + +#: ../../library/unittest.mock.rst:33 +msgid "" +"Mock is designed for use with :mod:`unittest` and is based on the 'action ->" +" assertion' pattern instead of 'record -> replay' used by many mocking " +"frameworks." +msgstr "" +"mock 被设计为配合 :mod:`unittest` 使用且它是基于 'action -> assertion' 模式而非许多模拟框架所使用的 " +"'record -> replay' 模式。" + +#: ../../library/unittest.mock.rst:37 +msgid "" +"There is a backport of :mod:`unittest.mock` for earlier versions of Python, " +"available as `mock on PyPI `_." +msgstr "" +"在 Python 的早期版本要单独使用 :mod:`unittest.mock` ,在 `PyPI 获取 mock " +"`_ 。" + +#: ../../library/unittest.mock.rst:42 +msgid "Quick Guide" +msgstr "快速上手" + +#: ../../library/unittest.mock.rst:60 +msgid "" +":class:`Mock` and :class:`MagicMock` objects create all attributes and " +"methods as you access them and store details of how they have been used. You" +" can configure them, to specify return values or limit what attributes are " +"available, and then make assertions about how they have been used:" +msgstr "" +"当您访问对象时, :class:`Mock` 和 :class:`MagicMock` " +"将创建所有属性和方法,并保存他们在使用时的细节。你可以通过配置,指定返回值或者限制可访问属性,然后断言他们如何被调用:" + +#: ../../library/unittest.mock.rst:72 +msgid "" +":attr:`side_effect` allows you to perform side effects, including raising an" +" exception when a mock is called:" +msgstr "通过 :attr:`side_effect` 设置副作用(side effects) ,可以是一个 mock 被调用是抛出的异常:" + +#: ../../library/unittest.mock.rst:92 +msgid "" +"Mock has many other ways you can configure it and control its behaviour. For" +" example the *spec* argument configures the mock to take its specification " +"from another object. Attempting to access attributes or methods on the mock " +"that don't exist on the spec will fail with an :exc:`AttributeError`." +msgstr "" +"Mock 还可以通过其他方法配置和控制其行为。例如 mock 可以通过设置 *spec* " +"参数来从一个对象中获取其规格(specification)。如果访问 mock 的属性或方法不在 spec 中,会报 " +":exc:`AttributeError` 错误。" + +#: ../../library/unittest.mock.rst:97 +msgid "" +"The :func:`patch` decorator / context manager makes it easy to mock classes " +"or objects in a module under test. The object you specify will be replaced " +"with a mock (or other object) during the test and restored when the test " +"ends::" +msgstr "" +"使用 :func:`patch` 装饰去/上下文管理器,可以更方便地测试一个模块下的类或对象。你指定的对象会在测试过程中替换成 mock " +"(或者其他对象),测试结束后恢复。" + +#: ../../library/unittest.mock.rst:116 +msgid "" +"When you nest patch decorators the mocks are passed in to the decorated " +"function in the same order they applied (the normal *Python* order that " +"decorators are applied). This means from the bottom up, so in the example " +"above the mock for ``module.ClassName1`` is passed in first." +msgstr "" +"当你嵌套 patch 装饰器时,mock 将以执行顺序传递给装饰器函数(*Python* 装饰器正常顺序)。由于从下至上,因此在上面的示例中,首先 " +"mock 传入的 ``module.ClassName1`` 。" + +#: ../../library/unittest.mock.rst:121 +msgid "" +"With :func:`patch` it matters that you patch objects in the namespace where " +"they are looked up. This is normally straightforward, but for a quick guide " +"read :ref:`where to patch `." +msgstr "" +"在查找对象的名称空间中修补对象使用 :func:`patch` 。使用起来很简单,阅读 :ref:`在哪里打补丁 ` " +"来快速上手。" + +#: ../../library/unittest.mock.rst:125 +msgid "" +"As well as a decorator :func:`patch` can be used as a context manager in a " +"with statement:" +msgstr ":func:`patch` 也可以 with 语句中使用上下文管理。" + +#: ../../library/unittest.mock.rst:135 +msgid "" +"There is also :func:`patch.dict` for setting values in a dictionary just " +"during a scope and restoring the dictionary to its original state when the " +"test ends:" +msgstr "还有一个 :func:`patch.dict` 用于在一定范围内设置字典中的值,并在测试结束时将字典恢复为其原始状态:" + +#: ../../library/unittest.mock.rst:146 +msgid "" +"Mock supports the mocking of Python :ref:`magic methods `. " +"The easiest way of using magic methods is with the :class:`MagicMock` class." +" It allows you to do things like:" +msgstr "" +"Mock支持 Python :ref:`魔术方法 ` 。使用模式方法最简单的方式是使用 " +":class:`MagicMock` class. 。它可以做如下事情:" + +#: ../../library/unittest.mock.rst:156 +msgid "" +"Mock allows you to assign functions (or other Mock instances) to magic " +"methods and they will be called appropriately. The :class:`MagicMock` class " +"is just a Mock variant that has all of the magic methods pre-created for you" +" (well, all the useful ones anyway)." +msgstr "" +"Mock 能指定函数(或其他 Mock 实例)为魔术方法,它们将被适当地调用。 :class:`MagicMock` " +"是预先创建了所有魔术方法(所有有用的方法) 的 Mock 。" + +#: ../../library/unittest.mock.rst:161 +msgid "" +"The following is an example of using magic methods with the ordinary Mock " +"class:" +msgstr "下面是一个使用了普通 Mock 类的魔术方法的例子" + +#: ../../library/unittest.mock.rst:169 +msgid "" +"For ensuring that the mock objects in your tests have the same api as the " +"objects they are replacing, you can use :ref:`auto-speccing `. Auto-speccing can be done through the *autospec* argument to " +"patch, or the :func:`create_autospec` function. Auto-speccing creates mock " +"objects that have the same attributes and methods as the objects they are " +"replacing, and any functions and methods (including constructors) have the " +"same call signature as the real object." +msgstr "" +"使用 :ref:`auto-speccing ` 可以保证测试中的模拟对象与要替换的对象具有相同的api 。在 patch" +" 中可以通过 *autospec* 参数实现自动推断,或者使用 :func:`create_autospec` " +"函数。自动推断会创建一个与要替换对象相同的属相和方法的模拟对象,并且任何函数和方法(包括构造函数)都具有与真实对象相同的调用签名。" + +#: ../../library/unittest.mock.rst:177 +msgid "" +"This ensures that your mocks will fail in the same way as your production " +"code if they are used incorrectly:" +msgstr "这么做是为了因确保不当地使用 mock 导致与生产代码相同的失败:" + +#: ../../library/unittest.mock.rst:193 +msgid "" +":func:`create_autospec` can also be used on classes, where it copies the " +"signature of the ``__init__`` method, and on callable objects where it " +"copies the signature of the ``__call__`` method." +msgstr "" +"在类中使用 :func:`create_autospec` 时,会复制 ``__init__`` 方法的签名,另外在可调用对象上使用时,会复制 " +"``__call__`` 方法的签名。" + +#: ../../library/unittest.mock.rst:200 +msgid "The Mock Class" +msgstr "Mock 类" + +#: ../../library/unittest.mock.rst:211 +msgid "" +":class:`Mock` is a flexible mock object intended to replace the use of stubs" +" and test doubles throughout your code. Mocks are callable and create " +"attributes as new mocks when you access them [#]_. Accessing the same " +"attribute will always return the same mock. Mocks record how you use them, " +"allowing you to make assertions about what your code has done to them." +msgstr "" +":class:`Mock` 是一个可以灵活的替换存根 (stubs) 的对象,可以测试所有代码。 Mock 是可调用的,在访问其属性时创建一个新的 " +"mock [#]_ 。访问相同的属性只会返回相同的 mock 。 Mock 会保存调用记录,可以通过断言获悉代码的调用。" + +#: ../../library/unittest.mock.rst:217 +msgid "" +":class:`MagicMock` is a subclass of :class:`Mock` with all the magic methods" +" pre-created and ready to use. There are also non-callable variants, useful " +"when you are mocking out objects that aren't callable: " +":class:`NonCallableMock` and :class:`NonCallableMagicMock`" +msgstr "" +":class:`MagicMock` 是 :class:`Mock` 的子类,它有所有预创建且可使用的魔术方法。在需要模拟不可调用对象时,可以使用 " +":class:`NonCallableMock`  和 :class:`NonCallableMagicMock` " + +#: ../../library/unittest.mock.rst:222 +msgid "" +"The :func:`patch` decorators makes it easy to temporarily replace classes in" +" a particular module with a :class:`Mock` object. By default :func:`patch` " +"will create a :class:`MagicMock` for you. You can specify an alternative " +"class of :class:`Mock` using the *new_callable* argument to :func:`patch`." +msgstr "" +":func:`patch` 装饰器便于 :class:`Mock` 对象临时替换特定模块中的类。 :func:`patch` 默认创建 " +":class:`MagicMock` 。可以使用 :func:`patch` 方法的 *new_callable* 参数指定 :class:`Mock`" +" 的替代类。" + +#: ../../library/unittest.mock.rst:230 +msgid "" +"Create a new :class:`Mock` object. :class:`Mock` takes several optional " +"arguments that specify the behaviour of the Mock object:" +msgstr "创建一个新的 :class:`Mock` 对象。通过可选参数指定 :class:`Mock` 对象的行为:" + +#: ../../library/unittest.mock.rst:233 +msgid "" +"*spec*: This can be either a list of strings or an existing object (a class " +"or instance) that acts as the specification for the mock object. If you pass" +" in an object then a list of strings is formed by calling dir on the object " +"(excluding unsupported magic attributes and methods). Accessing any " +"attribute not in this list will raise an :exc:`AttributeError`." +msgstr "" +"*spec*: 可以是要给字符串列表,也可以是充当模拟对象规范的现有对象(类或实例)。如果传入一个对象,则通过在该对象上调用 dir " +"来生成字符串列表(不支持的魔法属性和方法除外)。访问不在此列表中的任何属性都将触发 :exc:`AttributeError` 。" + +#: ../../library/unittest.mock.rst:239 +msgid "" +"If *spec* is an object (rather than a list of strings) then " +":attr:`~instance.__class__` returns the class of the spec object. This " +"allows mocks to pass :func:`isinstance` tests." +msgstr "" +"如果 *spec* 是一个对象(而不是字符串列表),则 :attr:`~instance.__class__` 返回 *spec* 对象的类。 " +"这允许模拟程序通过 :func:`isinstance` 测试。" + +#: ../../library/unittest.mock.rst:243 +msgid "" +"*spec_set*: A stricter variant of *spec*. If used, attempting to *set* or " +"get an attribute on the mock that isn't on the object passed as *spec_set* " +"will raise an :exc:`AttributeError`." +msgstr "" +"*spec_set* :*spec* 的更严格的变体。如果使用了该属性,尝试模拟 *set* 或 *get* 的属性不在 *spec_set* " +"所包含的对象中时,会抛出 :exc:`AttributeError` 。" + +#: ../../library/unittest.mock.rst:247 +msgid "" +"*side_effect*: A function to be called whenever the Mock is called. See the " +":attr:`~Mock.side_effect` attribute. Useful for raising exceptions or " +"dynamically changing return values. The function is called with the same " +"arguments as the mock, and unless it returns :data:`DEFAULT`, the return " +"value of this function is used as the return value." +msgstr "" +"*side_effect* :每当调用 Mock 时都会调用的函数。 参见 :attr:`~Mock.side_effect` 属性。 " +"对于引发异常或动态更改返回值很有用。 该函数使用与 mock 函数相同的参数调用,并且除非返回 :data:`DEFAULT` " +",否则该函数的返回值将用作返回值。" + +#: ../../library/unittest.mock.rst:253 +msgid "" +"Alternatively *side_effect* can be an exception class or instance. In this " +"case the exception will be raised when the mock is called." +msgstr "另外, *side_effect* 可以是异常类或实例。 此时,调用模拟程序时将引发异常。" + +#: ../../library/unittest.mock.rst:256 +msgid "" +"If *side_effect* is an iterable then each call to the mock will return the " +"next value from the iterable." +msgstr "如果 *side_effect* 是可迭代对象,则每次调用 mock 都将返回可迭代对象的下一个值。" + +#: ../../library/unittest.mock.rst:259 +msgid "A *side_effect* can be cleared by setting it to ``None``." +msgstr "设置 *side_effect* 为 ``None`` 即可清空。" + +#: ../../library/unittest.mock.rst:261 +msgid "" +"*return_value*: The value returned when the mock is called. By default this " +"is a new Mock (created on first access). See the :attr:`return_value` " +"attribute." +msgstr "" +"*return_value* :调用 mock 的返回值。 默认情况下,是一个新的Mock(在首次访问时创建)。 参见 " +":attr:`return_value` 属性 。" + +#: ../../library/unittest.mock.rst:265 +msgid "" +"*unsafe*: By default if any attribute starts with *assert* or *assret* will " +"raise an :exc:`AttributeError`. Passing ``unsafe=True`` will allow access to" +" these attributes." +msgstr "" +"*unsafe* :默认情况下,如果任何以 *assert* 或 *assret* 开头的属性都将引发 :exc:`AttributeError` 。" +" 当 ``unsafe=True`` 时可以访问。" + +#: ../../library/unittest.mock.rst:271 +msgid "" +"*wraps*: Item for the mock object to wrap. If *wraps* is not ``None`` then " +"calling the Mock will pass the call through to the wrapped object (returning" +" the real result). Attribute access on the mock will return a Mock object " +"that wraps the corresponding attribute of the wrapped object (so attempting " +"to access an attribute that doesn't exist will raise an " +":exc:`AttributeError`)." +msgstr "" +"*wraps* :要包装的 mock 对象。 如果 *wraps* 不是 ``None`` ,那么调用 Mock 会将调用传递给 *wraps* " +"的对象(返回实际结果)。 对模拟的属性访问将返回一个 Mock 对象,该对象包装了 *wraps* 对象的相应属性(因此,尝试访问不存在的属性将引发 " +":exc:`AttributeError` )。" + +#: ../../library/unittest.mock.rst:278 +msgid "" +"If the mock has an explicit *return_value* set then calls are not passed to " +"the wrapped object and the *return_value* is returned instead." +msgstr "如果明确指定 *return_value* ,调用是,不会返回包装对象,而是返回 *return_value* 。" + +#: ../../library/unittest.mock.rst:281 +msgid "" +"*name*: If the mock has a name then it will be used in the repr of the mock." +" This can be useful for debugging. The name is propagated to child mocks." +msgstr "*name* :mock 的名称。 在调试时很有用。 名称会传递到子 mock 。" + +#: ../../library/unittest.mock.rst:285 +msgid "" +"Mocks can also be called with arbitrary keyword arguments. These will be " +"used to set attributes on the mock after it is created. See the " +":meth:`configure_mock` method for details." +msgstr "" +"还可以使用任意关键字参数来调用 mock 。 创建模拟后,将使用这些属性来设置 mock 的属性。 有关详细信息,请参见 " +":meth:`configure_mock` 方法。" + +#: ../../library/unittest.mock.rst:291 +msgid "Assert that the mock was called at least once." +msgstr "断言至少被调用过一次。" + +#: ../../library/unittest.mock.rst:302 +msgid "Assert that the mock was called exactly once." +msgstr "断言仅被调用一次。" + +#: ../../library/unittest.mock.rst:320 +msgid "" +"This method is a convenient way of asserting that the last call has been " +"made in a particular way:" +msgstr "此方法是断言上次调用已以特定方式进行的一种便捷方法:" + +#: ../../library/unittest.mock.rst:330 +msgid "" +"Assert that the mock was called exactly once and that call was with the " +"specified arguments." +msgstr "断言 mock 仅被调用一次,并且向该调用传入了指定的参数。" + +#: ../../library/unittest.mock.rst:345 +msgid "assert the mock has been called with the specified arguments." +msgstr "断言使用指定的参数调用。" + +#: ../../library/unittest.mock.rst:347 +msgid "" +"The assert passes if the mock has *ever* been called, unlike " +":meth:`assert_called_with` and :meth:`assert_called_once_with` that only " +"pass if the call is the most recent one, and in the case of " +":meth:`assert_called_once_with` it must also be the only call." +msgstr "" +"如果 mock *曾经* 被调用过则断言通过,不同于 :meth:`assert_called_with` 和 " +":meth:`assert_called_once_with` 那样只有在调用是最近的一次时才会通过,而对于 " +":meth:`assert_called_once_with` 则它还必须是唯一的一次调用。" + +#: ../../library/unittest.mock.rst:360 +msgid "" +"assert the mock has been called with the specified calls. The " +":attr:`mock_calls` list is checked for the calls." +msgstr "断言 mock 已附带指定的参数被调用。 将针对这些调用检查 :attr:`mock_calls` 列表。" + +#: ../../library/unittest.mock.rst:363 +msgid "" +"If *any_order* is false then the calls must be sequential. There can be " +"extra calls before or after the specified calls." +msgstr "如果 *any_order* 为假值则调用必须是顺序进行的。 在指定的调用之前或之后还可以有额外的调用。" + +#: ../../library/unittest.mock.rst:367 +msgid "" +"If *any_order* is true then the calls can be in any order, but they must all" +" appear in :attr:`mock_calls`." +msgstr "如果 *any_order* 为真值则调用可以是任意顺序的,但它们都必须在 :attr:`mock_calls` 中出现。" + +#: ../../library/unittest.mock.rst:382 +msgid "Assert the mock was never called." +msgstr "断言 mock 从未被调用过。" + +#: ../../library/unittest.mock.rst:397 +msgid "The reset_mock method resets all the call attributes on a mock object:" +msgstr "reset_mock 方法将在 mock 对象上重围所有的调用属性:" + +#: ../../library/unittest.mock.rst:407 +msgid "Added two keyword only argument to the reset_mock function." +msgstr "向 reset_mock 函数添加了两个仅限关键字参数。" + +#: ../../library/unittest.mock.rst:410 +msgid "" +"This can be useful where you want to make a series of assertions that reuse " +"the same object. Note that :meth:`reset_mock` *doesn't* clear the return " +"value, :attr:`side_effect` or any child attributes you have set using normal" +" assignment by default. In case you want to reset *return_value* or " +":attr:`side_effect`, then pass the corresponding parameter as ``True``. " +"Child mocks and the return value mock (if any) are reset as well." +msgstr "" +"这在你想要创建一系列重用相同对象的断言时会很有用处。 请注意 :meth:`reset_mock` *不会* " +"清除返回值、:attr:`side_effect` 或任何你使用普通赋值所默认设置的子属性。 如果你想要重置 *return_value* 或 " +":attr:`side_effect`,则要为相应的形参传入 ``True``。 子 mock 和返回值 mock (如果有的话) 也会被重置。" + +#: ../../library/unittest.mock.rst:418 +msgid "*return_value*, and :attr:`side_effect` are keyword only argument." +msgstr "*return_value* 和 :attr:`side_effect` 均为仅限关键字参数。" + +#: ../../library/unittest.mock.rst:424 +msgid "" +"Add a spec to a mock. *spec* can either be an object or a list of strings. " +"Only attributes on the *spec* can be fetched as attributes from the mock." +msgstr "" +"为 mock 添加规格说明。 *spec* 可以是一个对象或字符串列表。 只有 *spec* 上的属性可以作为来自 mock 的属性被获取。" + +#: ../../library/unittest.mock.rst:428 +msgid "If *spec_set* is true then only attributes on the spec can be set." +msgstr "如果 *spec_set* 为真值则只有 spec 上的属性可以被设置。" + +#: ../../library/unittest.mock.rst:433 +msgid "" +"Attach a mock as an attribute of this one, replacing its name and parent. " +"Calls to the attached mock will be recorded in the :attr:`method_calls` and " +":attr:`mock_calls` attributes of this one." +msgstr "" +"附加一个 mock 作为这一个的属性,替换它的名称和上级。 对附加 mock 的调用将记录在这一个的 :attr:`method_calls` 和 " +":attr:`mock_calls` 属性中。" + +#: ../../library/unittest.mock.rst:440 +msgid "Set attributes on the mock through keyword arguments." +msgstr "通过关键字参数在 mock 上设置属性。" + +#: ../../library/unittest.mock.rst:442 +msgid "" +"Attributes plus return values and side effects can be set on child mocks " +"using standard dot notation and unpacking a dictionary in the method call:" +msgstr "属性加返回值和附带影响可以使用标准点号标记在子 mock 上设置并在方法调用中解包一个字典:" + +#: ../../library/unittest.mock.rst:456 +msgid "The same thing can be achieved in the constructor call to mocks:" +msgstr "同样的操作可在对 mock 的构造器调用中达成:" + +#: ../../library/unittest.mock.rst:469 +msgid "" +":meth:`configure_mock` exists to make it easier to do configuration after " +"the mock has been created." +msgstr ":meth:`configure_mock` 的存在是使得 mock 被创建之后的配置更为容易。" + +#: ../../library/unittest.mock.rst:475 +msgid "" +":class:`Mock` objects limit the results of ``dir(some_mock)`` to useful " +"results. For mocks with a *spec* this includes all the permitted attributes " +"for the mock." +msgstr "" +":class:`Mock` 对象会将 ``dir(some_mock)`` 的结果限制为有用结果。 对于带有 *spec* 的 mock 这还包括 " +"mock 的所有被允许的属性。" + +#: ../../library/unittest.mock.rst:479 +msgid "" +"See :data:`FILTER_DIR` for what this filtering does, and how to switch it " +"off." +msgstr "请查看 :data:`FILTER_DIR` 了解此过滤做了什么,以及如何停用它。" + +#: ../../library/unittest.mock.rst:485 +msgid "" +"Create the child mocks for attributes and return value. By default child " +"mocks will be the same type as the parent. Subclasses of Mock may want to " +"override this to customize the way child mocks are made." +msgstr "" +"创建针对属性和返回值的子 mock。 默认情况下子 mock 将为与其上级相同的类型。 Mock 的子类可能需要重载它来定制子 mock 的创建方式。" + +#: ../../library/unittest.mock.rst:490 +msgid "" +"For non-callable mocks the callable variant will be used (rather than any " +"custom subclass)." +msgstr "对于非可调用的 mock 将会使用可调用的变化形式(而非不是任意的自定义子类)。" + +#: ../../library/unittest.mock.rst:496 +msgid "A boolean representing whether or not the mock object has been called:" +msgstr "一个表示 mock 对象是否已被调用的布尔值:" + +#: ../../library/unittest.mock.rst:507 +msgid "An integer telling you how many times the mock object has been called:" +msgstr "一个告诉你 mock object 对象已被调用多少次的整数值:" + +#: ../../library/unittest.mock.rst:519 +msgid "Set this to configure the value returned by calling the mock:" +msgstr "设置这个来配置通过调用该 mock 所返回的值:" + +#: ../../library/unittest.mock.rst:526 +msgid "" +"The default return value is a mock object and you can configure it in the " +"normal way:" +msgstr "默认的返回值是一个 mock 对象并且你可以通过正常方式来配置它:" + +#: ../../library/unittest.mock.rst:535 +msgid ":attr:`return_value` can also be set in the constructor:" +msgstr ":attr:`return_value` 也可以在构造器中设置:" + +#: ../../library/unittest.mock.rst:546 +msgid "" +"This can either be a function to be called when the mock is called, an " +"iterable or an exception (class or instance) to be raised." +msgstr "" +"这可以是当该This can either be a function to be called when the mock " +"被调用时将被调用的一个函数,可调用对象或者要被引发的异常(类或实例)。" + +#: ../../library/unittest.mock.rst:549 +msgid "" +"If you pass in a function it will be called with same arguments as the mock " +"and unless the function returns the :data:`DEFAULT` singleton the call to " +"the mock will then return whatever the function returns. If the function " +"returns :data:`DEFAULT` then the mock will return its normal value (from the" +" :attr:`return_value`)." +msgstr "" +"如果你传入一个函数则它将附带与该 mock 相同的参数被调用并且除了该函数返回 :data:`DEFAULT` 单例的情况以外对该 mock " +"的调用都将随后返回该函数所返回的任何东西。 如果该函数返回 :data:`DEFAULT` 则该 mock 将返回其正常值 (来自 " +":attr:`return_value`)。" + +#: ../../library/unittest.mock.rst:555 +msgid "" +"If you pass in an iterable, it is used to retrieve an iterator which must " +"yield a value on every call. This value can either be an exception instance" +" to be raised, or a value to be returned from the call to the mock " +"(:data:`DEFAULT` handling is identical to the function case)." +msgstr "" +"如果你传入一个可迭代对象,它会被用来获取一个在每次调用时必须产生一个值的迭代器。 这个值可以是一个要被引发的异常实例,或是一个要从该调用返回给 mock" +" 的值 (:data:`DEFAULT` 处理与函数的情况一致)。" + +#: ../../library/unittest.mock.rst:560 +msgid "" +"An example of a mock that raises an exception (to test exception handling of" +" an API):" +msgstr "一个引发异常(来测试 API 的异常处理)的 mock 的示例:" + +#: ../../library/unittest.mock.rst:570 +msgid "Using :attr:`side_effect` to return a sequence of values:" +msgstr "使用 :attr:`side_effect` 来返回包含多个值的序列:" + +#: ../../library/unittest.mock.rst:577 +msgid "Using a callable:" +msgstr "使用一个可调用对象:" + +#: ../../library/unittest.mock.rst:587 +msgid "" +":attr:`side_effect` can be set in the constructor. Here's an example that " +"adds one to the value the mock is called with and returns it:" +msgstr ":attr:`side_effect` 可以在构造器中设置。 下面是在 mock 被调用时增加一个该属性值并返回它的例子:" + +#: ../../library/unittest.mock.rst:597 +msgid "Setting :attr:`side_effect` to ``None`` clears it:" +msgstr "将 :attr:`side_effect` 设为 ``None`` 可以清除它:" + +#: ../../library/unittest.mock.rst:611 +msgid "" +"This is either ``None`` (if the mock hasn't been called), or the arguments " +"that the mock was last called with. This will be in the form of a tuple: the" +" first member, which can also be accessed through the ``args`` property, is " +"any ordered arguments the mock was called with (or an empty tuple) and the " +"second member, which can also be accessed through the ``kwargs`` property, " +"is any keyword arguments (or an empty dictionary)." +msgstr "" +"这可以是 ``None`` (如果 mock 没有被调用),或是 mock 最近一次被调用时附带的参数。 这将采用元组的形式:第一个成员也可以通过 " +"``args`` 特征属性来访问,它是 mock 被调用时所附带的任何位置参数 (或为空元组),而第二个成员也可以通过 ``kwargs`` " +"特征属性来访问,它则是任何关键字参数 (或为空字典)。" + +#: ../../library/unittest.mock.rst:644 +msgid "" +":attr:`call_args`, along with members of the lists :attr:`call_args_list`, " +":attr:`method_calls` and :attr:`mock_calls` are :data:`call` objects. These " +"are tuples, so they can be unpacked to get at the individual arguments and " +"make more complex assertions. See :ref:`calls as tuples `." +msgstr "" +":attr:`call_args`,以及列表 :attr:`call_args_list`, :attr:`method_calls` 和 " +":attr:`mock_calls` 的成员都是 :data:`call` 对象。 " +"这些对象属性元组,因此它们可被解包以获得单独的参数并创建更复杂的断言。 参见 :ref:`作为元组的 call `。" + +#: ../../library/unittest.mock.rst:650 +msgid "Added ``args`` and ``kwargs`` properties." +msgstr "增加了 ``args`` 和 ``kwargs`` 特征属性。properties." + +#: ../../library/unittest.mock.rst:656 +msgid "" +"This is a list of all the calls made to the mock object in sequence (so the " +"length of the list is the number of times it has been called). Before any " +"calls have been made it is an empty list. The :data:`call` object can be " +"used for conveniently constructing lists of calls to compare with " +":attr:`call_args_list`." +msgstr "" +"这是一个已排序的对 mock 对象的所有调用的列表(因此该列表的长度就是它已被调用的次数)。 在执行任何调用之前它将是一个空列表。 " +":data:`call` 对象可以被用来方便地构造调用列表以与 :attr:`call_args_list` 相比较。" + +#: ../../library/unittest.mock.rst:672 +msgid "" +"Members of :attr:`call_args_list` are :data:`call` objects. These can be " +"unpacked as tuples to get at the individual arguments. See :ref:`calls as " +"tuples `." +msgstr "" +":attr:`call_args_list` 的成员均为 :data:`call` 对象。 它们可作为元组被解包以获得单个参数。 参见 " +":ref:`作为元组的 call `。" + +#: ../../library/unittest.mock.rst:679 +msgid "" +"As well as tracking calls to themselves, mocks also track calls to methods " +"and attributes, and *their* methods and attributes:" +msgstr "除了会追踪对其自身的调用,mock 还会追踪对方法和属性,以及 *它们的* 方法和属性的访问:" + +#: ../../library/unittest.mock.rst:690 +msgid "" +"Members of :attr:`method_calls` are :data:`call` objects. These can be " +"unpacked as tuples to get at the individual arguments. See :ref:`calls as " +"tuples `." +msgstr "" +":attr:`method_calls` 的成员均为 :data:`call` 对象。 它们可以作为元组被解包以获得单个参数。 参见 " +":ref:`作为元组的 call `." + +#: ../../library/unittest.mock.rst:697 +msgid "" +":attr:`mock_calls` records *all* calls to the mock object, its methods, " +"magic methods *and* return value mocks." +msgstr ":attr:`mock_calls` 会记录 *所有* 对 mock 对象、它的方法、魔术方法的调用 *以及* 返回值的 mock。" + +#: ../../library/unittest.mock.rst:715 +msgid "" +"Members of :attr:`mock_calls` are :data:`call` objects. These can be " +"unpacked as tuples to get at the individual arguments. See :ref:`calls as " +"tuples `." +msgstr "" +":attr:`mock_calls` 的成员均为 :data:`call` 对象。 它们可以作为元组被解包以获得单个参数。 参见 :ref:`作为元组的" +" call `。" + +#: ../../library/unittest.mock.rst:721 +msgid "" +"The way :attr:`mock_calls` are recorded means that where nested calls are " +"made, the parameters of ancestor calls are not recorded and so will always " +"compare equal:" +msgstr ":attr:`mock_calls` 的记录方式意味着在进行嵌套调用时,之前调用的形参不会被记录因而这样的比较将总是相等:" + +#: ../../library/unittest.mock.rst:735 +msgid "" +"Normally the :attr:`__class__` attribute of an object will return its type. " +"For a mock object with a :attr:`spec`, ``__class__`` returns the spec class " +"instead. This allows mock objects to pass :func:`isinstance` tests for the " +"object they are replacing / masquerading as:" +msgstr "" +"通常一个对象的 :attr:`__class__` 属性将返回其类型。 对于具有 :attr:`spec` 的 mock " +"对象来说,``__class__`` 将改为返回 spec 类。 这将允许 mock 对象为它们所替换 / 屏蔽的对象跳过 " +":func:`isinstance` 测试:" + +#: ../../library/unittest.mock.rst:744 +msgid "" +":attr:`__class__` is assignable to, this allows a mock to pass an " +":func:`isinstance` check without forcing you to use a spec:" +msgstr "" +":attr:`__class__` 是可以被赋值的,这将允许 mock 跳过 :func:`isinstance` 检测而不强制要求你使用 spec:" + +#: ../../library/unittest.mock.rst:754 +msgid "" +"A non-callable version of :class:`Mock`. The constructor parameters have the" +" same meaning of :class:`Mock`, with the exception of *return_value* and " +"*side_effect* which have no meaning on a non-callable mock." +msgstr "" +"不可调用的 :class:`Mock` 版本。 其构造器的形参具有与 :class:`Mock` 相同的含义,区别在于 *return_value* 和" +" *side_effect* 在不可调用的 mock 上没有意义。" + +#: ../../library/unittest.mock.rst:758 +msgid "" +"Mock objects that use a class or an instance as a :attr:`spec` or " +":attr:`spec_set` are able to pass :func:`isinstance` tests:" +msgstr "" +"使用类或实例作为 :attr:`spec` 或 :attr:`spec_set` 的 mock 对象能够跳过 :func:`isinstance` " +"测试:" + +#: ../../library/unittest.mock.rst:768 +msgid "" +"The :class:`Mock` classes have support for mocking magic methods. See " +":ref:`magic methods ` for the full details." +msgstr ":class:`Mock` 类具有对模拟魔术方法的支持。 请参阅 :ref:`魔术方法 ` 了解完整细节。" + +#: ../../library/unittest.mock.rst:771 +msgid "" +"The mock classes and the :func:`patch` decorators all take arbitrary keyword" +" arguments for configuration. For the :func:`patch` decorators the keywords " +"are passed to the constructor of the mock being created. The keyword " +"arguments are for configuring attributes of the mock:" +msgstr "" +"mock 操作类和 :func:`patch` 装饰器都接受任意关键字参数用于配置。 对于 :func:`patch` " +"装饰器来说关键字参数会被传给所创建 mock 的构造器。 这些关键字被用于配置 mock 的属性:" + +#: ../../library/unittest.mock.rst:782 +msgid "" +"The return value and side effect of child mocks can be set in the same way, " +"using dotted notation. As you can't use dotted names directly in a call you " +"have to create a dictionary and unpack it using ``**``:" +msgstr "" +"子 mock 的返回值和附带效果也可使用带点号的标记通过相同的方式来设置。 由于你无法直接在调用中使用带点号的名称因此你需要创建一个字典并使用 " +"``**`` 来解包它:" + +#: ../../library/unittest.mock.rst:797 +msgid "" +"A callable mock which was created with a *spec* (or a *spec_set*) will " +"introspect the specification object's signature when matching calls to the " +"mock. Therefore, it can match the actual call's arguments regardless of " +"whether they were passed positionally or by name::" +msgstr "" +"使用 *spec* (或 *spec_set*) 创建的可调用 mock 将在匹配调用与 mock 时内省规格说明对象的签名。 " +"因此,它可以匹配实际调用的参数而不必关心它们是按位置还是按名称传入的::" + +#: ../../library/unittest.mock.rst:810 +msgid "" +"This applies to :meth:`~Mock.assert_called_with`, " +":meth:`~Mock.assert_called_once_with`, :meth:`~Mock.assert_has_calls` and " +":meth:`~Mock.assert_any_call`. When :ref:`auto-speccing`, it will also " +"apply to method calls on the mock object." +msgstr "" +"这适用于 :meth:`~Mock.assert_called_with`, " +":meth:`~Mock.assert_called_once_with`, :meth:`~Mock.assert_has_calls` 和 " +":meth:`~Mock.assert_any_call`。 当执行 :ref:`auto-speccing` 时,它还将应用于 mock " +"对象的方法调用。" + +#: ../../library/unittest.mock.rst:815 +msgid "Added signature introspection on specced and autospecced mock objects." +msgstr "添加了在附带规格说明和自动规格说明的 mock 对象上的签名内省" + +#: ../../library/unittest.mock.rst:821 +msgid "" +"A mock intended to be used as a property, or other descriptor, on a class. " +":class:`PropertyMock` provides :meth:`__get__` and :meth:`__set__` methods " +"so you can specify a return value when it is fetched." +msgstr "" +"旨在作为类的特征属性或其他描述器使用的 mock。 :class:`PropertyMock` 提供了 :meth:`__get__` 和 " +":meth:`__set__` 方法以便你可以在它被提取时指定一个返回值。" + +#: ../../library/unittest.mock.rst:825 +msgid "" +"Fetching a :class:`PropertyMock` instance from an object calls the mock, " +"with no args. Setting it calls the mock with the value being set. ::" +msgstr "" +"当从一个对象提取 :class:`PropertyMock` 实例时将不附带任何参数地调用该 mock。 如果设置它则调用该 mock " +"时将附带被设置的值。 ::" + +#: ../../library/unittest.mock.rst:846 +msgid "" +"Because of the way mock attributes are stored you can't directly attach a " +":class:`PropertyMock` to a mock object. Instead you can attach it to the " +"mock type object::" +msgstr "" +"由于 mock 属性的存储方式你无法直接将 :class:`PropertyMock` 附加到一个 mock 对象。 但是你可以将它附加到 mock " +"类型对象::" + +#: ../../library/unittest.mock.rst:860 +msgid "" +"An asynchronous version of :class:`MagicMock`. The :class:`AsyncMock` object" +" will behave so the object is recognized as an async function, and the " +"result of a call is an awaitable." +msgstr "" +":class:`MagicMock` 的异步版本。 :class:`AsyncMock` " +"对象的行为方式将使该对象被识别为异步函数,其调用的结果将为可等待对象。" + +#: ../../library/unittest.mock.rst:870 +msgid "" +"The result of ``mock()`` is an async function which will have the outcome of" +" ``side_effect`` or ``return_value`` after it has been awaited:" +msgstr "" +"调用 ``mock()`` 的结果是一个异步函数,它在被等待之后将具有 ``side_effect`` 或 ``return_value`` 的结果:" + +#: ../../library/unittest.mock.rst:873 +msgid "" +"if ``side_effect`` is a function, the async function will return the result " +"of that function," +msgstr "如果 ``side_effect`` 是一个函数,则异步函数将返回该函数的结果," + +#: ../../library/unittest.mock.rst:875 +msgid "" +"if ``side_effect`` is an exception, the async function will raise the " +"exception," +msgstr "如果 ``side_effect`` 是一个异常,则异步函数将引发该异常," + +#: ../../library/unittest.mock.rst:877 +msgid "" +"if ``side_effect`` is an iterable, the async function will return the next " +"value of the iterable, however, if the sequence of result is exhausted, " +"``StopAsyncIteration`` is raised immediately," +msgstr "" +"如果 ``side_effect`` 是一个可迭代对象,则异步函数将返回该可迭代对象的下一个值,但是,如果结果序列被耗尽,则会立即引发 " +"``StopAsyncIteration``," + +#: ../../library/unittest.mock.rst:880 +msgid "" +"if ``side_effect`` is not defined, the async function will return the value " +"defined by ``return_value``, hence, by default, the async function returns a" +" new :class:`AsyncMock` object." +msgstr "" +"如果 ``side_effect`` 未被定义,则异步函数将返回is not defined, the async function will " +"return the value defined by ``return_value`` 所定义的值,因而,在默认情况下,异步函数会返回一个新的 " +":class:`AsyncMock` 对象。" + +#: ../../library/unittest.mock.rst:885 +msgid "" +"Setting the *spec* of a :class:`Mock` or :class:`MagicMock` to an async " +"function will result in a coroutine object being returned after calling." +msgstr "将 :class:`Mock` 或 :class:`MagicMock` 的 *spec* 设为异步函数将导致在调用后返回一个协程对象。" + +#: ../../library/unittest.mock.rst:897 +msgid "" +"Setting the *spec* of a :class:`Mock`, :class:`MagicMock`, or " +":class:`AsyncMock` to a class with asynchronous and synchronous functions " +"will automatically detect the synchronous functions and set them as " +":class:`MagicMock` (if the parent mock is :class:`AsyncMock` or " +":class:`MagicMock`) or :class:`Mock` (if the parent mock is :class:`Mock`). " +"All asynchronous functions will be :class:`AsyncMock`." +msgstr "" +"将 :class:`Mock`, :class:`MagicMock` 或 :class:`AsyncMock` 的 *spec* " +"设为带有异步和同步函数的类将自动删除其中的同步函数并将它们设为 :class:`MagicMock` (如果上级 mock 是 " +":class:`AsyncMock` 或 :class:`MagicMock`) 或者 :class:`Mock` (如果上级 mock 是 " +":class:`Mock`)。 所有异步函数都将为 :class:`AsyncMock`。" + +#: ../../library/unittest.mock.rst:925 +msgid "" +"Assert that the mock was awaited at least once. Note that this is separate " +"from the object having been called, the ``await`` keyword must be used:" +msgstr "断言 mock 已被等待至少一次。 请注意这是从被调用的对象中分离出来的,必须要使用 ``await`` 关键字:" + +#: ../../library/unittest.mock.rst:944 +msgid "Assert that the mock was awaited exactly once." +msgstr "断言 mock 已被等待恰好一次。" + +#: ../../library/unittest.mock.rst:960 +msgid "Assert that the last await was with the specified arguments." +msgstr "断言上一次等待传入了指定的参数。" + +#: ../../library/unittest.mock.rst:977 +msgid "" +"Assert that the mock was awaited exactly once and with the specified " +"arguments." +msgstr "断言 mock 被等待恰好一次并且附带了指定的参数。" + +#: ../../library/unittest.mock.rst:994 +msgid "Assert the mock has ever been awaited with the specified arguments." +msgstr "断言 mock 已被等待并附带了指定的参数。" + +#: ../../library/unittest.mock.rst:1010 +msgid "" +"Assert the mock has been awaited with the specified calls. The " +":attr:`await_args_list` list is checked for the awaits." +msgstr "断言 mock 已附带了指定的调用被等待。 将针对这些等待检查 :attr:`await_args_list` 列表。" + +#: ../../library/unittest.mock.rst:1013 +msgid "" +"If *any_order* is false then the awaits must be sequential. There can be " +"extra calls before or after the specified awaits." +msgstr "如果 *any_order* 为假值则等待必须是顺序进行的。 在指定的等待之前或之后还可以有额外的调用。" + +#: ../../library/unittest.mock.rst:1017 +msgid "" +"If *any_order* is true then the awaits can be in any order, but they must " +"all appear in :attr:`await_args_list`." +msgstr "如果 *any_order* 为真值则等待可以是任意顺序的,但它们都必须在 :attr:`await_args_list` 中出现。" + +#: ../../library/unittest.mock.rst:1037 +msgid "Assert that the mock was never awaited." +msgstr "断言 mock 从未被等待过。" + +#: ../../library/unittest.mock.rst:1044 +msgid "" +"See :func:`Mock.reset_mock`. Also sets :attr:`await_count` to 0, " +":attr:`await_args` to None, and clears the :attr:`await_args_list`." +msgstr "" +"参见 :func:`Mock.reset_mock`。 还会将 :attr:`await_count` 设为 0,将 " +":attr:`await_args` 设为 None,并清空 :attr:`await_args_list`。" + +#: ../../library/unittest.mock.rst:1049 +msgid "" +"An integer keeping track of how many times the mock object has been awaited." +msgstr "一个追踪 mock 对象已被等待多少次的整数值。" + +#: ../../library/unittest.mock.rst:1064 +msgid "" +"This is either ``None`` (if the mock hasn’t been awaited), or the arguments " +"that the mock was last awaited with. Functions the same as " +":attr:`Mock.call_args`." +msgstr "" +"这可能为 ``None`` (如果 mock 从未被等待),或为该 mock 上一次被等待所附带的参数。 其功能与 " +":attr:`Mock.call_args` 相同。" + +#: ../../library/unittest.mock.rst:1082 +msgid "" +"This is a list of all the awaits made to the mock object in sequence (so the" +" length of the list is the number of times it has been awaited). Before any " +"awaits have been made it is an empty list." +msgstr "" +"这是由对 mock 对象按顺序执行的所有等待组成的列表(因此该列表的长度即它被等待的次数)。 在有任何等待被执行之前它将为一个空列表。Before " +"any awaits have been made it is an empty list." + +#: ../../library/unittest.mock.rst:1101 +msgid "Calling" +msgstr "调用" + +#: ../../library/unittest.mock.rst:1103 +msgid "" +"Mock objects are callable. The call will return the value set as the " +":attr:`~Mock.return_value` attribute. The default return value is a new Mock" +" object; it is created the first time the return value is accessed (either " +"explicitly or by calling the Mock) - but it is stored and the same one " +"returned each time." +msgstr "" +"Mock 对象是可调用对象。 调用将把值集合作为 :attr:`~Mock.return_value` 属性返回。 默认的返回值是一个新的 Mock " +"对象;它会在对返回值的首次访问(不论是显式访问还是通过调用 Mock)时被创建 —— 但它会被保存并且每次都返回相同的对象。" + +#: ../../library/unittest.mock.rst:1109 +msgid "" +"Calls made to the object will be recorded in the attributes like " +":attr:`~Mock.call_args` and :attr:`~Mock.call_args_list`." +msgstr "" +"对该对象的调用将被记录在 :attr:`~Mock.call_args` 和 :attr:`~Mock.call_args_list` 等属性中。" + +#: ../../library/unittest.mock.rst:1112 +msgid "" +"If :attr:`~Mock.side_effect` is set then it will be called after the call " +"has been recorded, so if :attr:`side_effect` raises an exception the call is" +" still recorded." +msgstr "" +"如果设置了 :attr:`~Mock.side_effect` 则它将在调用被记录之后被调用,因此如果 :attr:`side_effect` " +"引发了异常该调用仍然会被记录。" + +#: ../../library/unittest.mock.rst:1116 +msgid "" +"The simplest way to make a mock raise an exception when called is to make " +":attr:`~Mock.side_effect` an exception class or instance:" +msgstr "让一个 mock 在被调用时引发异常的最简单方式是将 :attr:`~Mock.side_effect` 设为一个异常类或实例:" + +#: ../../library/unittest.mock.rst:1134 +msgid "" +"If :attr:`side_effect` is a function then whatever that function returns is " +"what calls to the mock return. The :attr:`side_effect` function is called " +"with the same arguments as the mock. This allows you to vary the return " +"value of the call dynamically, based on the input:" +msgstr "" +"如果 :attr:`side_effect` 为函数则该函数所返回的对象就是调用该 mock 所返回的对象。 :attr:`side_effect` " +"函数在被调用时将附带与该 mock 相同的参数。 这允许你根据输入动态地改变返回值:" + +#: ../../library/unittest.mock.rst:1150 +msgid "" +"If you want the mock to still return the default return value (a new mock), " +"or any set return value, then there are two ways of doing this. Either " +"return :attr:`mock.return_value` from inside :attr:`side_effect`, or return " +":data:`DEFAULT`:" +msgstr "" +"如果你想让该 mock 仍然返回默认的返回值(一个新的 mock对象),或是任何设定的返回值,那么有两种方式可以做到这一点。 从 " +":attr:`side_effect` 内部返回 :attr:`mock.return_value`,或者返回 :data:`DEFAULT`:" + +#: ../../library/unittest.mock.rst:1169 +msgid "" +"To remove a :attr:`side_effect`, and return to the default behaviour, set " +"the :attr:`side_effect` to ``None``:" +msgstr "" +"要移除一个 :attr:`side_effect`,并返回到默认的行为,请将 :attr:`side_effect` 设为 ``None``:" + +#: ../../library/unittest.mock.rst:1183 +msgid "" +"The :attr:`side_effect` can also be any iterable object. Repeated calls to " +"the mock will return values from the iterable (until the iterable is " +"exhausted and a :exc:`StopIteration` is raised):" +msgstr "" +":attr:`side_effect` 也可以是任意可迭代对象。 对该 mock 的重复调用将返回来自该可迭代对象的值(直到该可迭代对象被耗尽并导致 " +":exc:`StopIteration` 被引发):" + +#: ../../library/unittest.mock.rst:1199 +msgid "" +"If any members of the iterable are exceptions they will be raised instead of" +" returned::" +msgstr "如果该可迭代对象有任何成员属于异常则它们将被引发而不是被返回::" + +#: ../../library/unittest.mock.rst:1217 +msgid "Deleting Attributes" +msgstr "删除属性" + +#: ../../library/unittest.mock.rst:1219 +msgid "" +"Mock objects create attributes on demand. This allows them to pretend to be " +"objects of any type." +msgstr "Mock 对象会根据需要创建属性。 这允许它们可以假装成任意类型的对象。" + +#: ../../library/unittest.mock.rst:1222 +msgid "" +"You may want a mock object to return ``False`` to a :func:`hasattr` call, or" +" raise an :exc:`AttributeError` when an attribute is fetched. You can do " +"this by providing an object as a :attr:`spec` for a mock, but that isn't " +"always convenient." +msgstr "" +"你可能想要一个 mock 对象在调用 :func:`hasattr` 时返回 ``False``,或者在获取某个属性时引发 " +":exc:`AttributeError`。 你可以通过提供一个对象作为 mock 的 :attr:`spec` 属性来做到这点,但这并不总是很方便。" + +#: ../../library/unittest.mock.rst:1226 +msgid "" +"You \"block\" attributes by deleting them. Once deleted, accessing an " +"attribute will raise an :exc:`AttributeError`." +msgstr "你可以通过删除属性来“屏蔽”它们。 属性一旦被删除,访问它将引发 :exc:`AttributeError`。" + +#: ../../library/unittest.mock.rst:1243 +msgid "Mock names and the name attribute" +msgstr "Mock 的名称与 name 属性" + +#: ../../library/unittest.mock.rst:1245 +msgid "" +"Since \"name\" is an argument to the :class:`Mock` constructor, if you want " +"your mock object to have a \"name\" attribute you can't just pass it in at " +"creation time. There are two alternatives. One option is to use " +":meth:`~Mock.configure_mock`::" +msgstr "" +"由于 \"name\" 是 :class:`Mock` 构造器的参数之一,如果你想让你的 mock 对象具有 \"name\" " +"属性你不可以在创建时传入该参数。 有两个替代方式。 一个选项是使用 :meth:`~Mock.configure_mock`::" + +#: ../../library/unittest.mock.rst:1255 +msgid "" +"A simpler option is to simply set the \"name\" attribute after mock " +"creation::" +msgstr "一个更简单的选项是在 mock 创建之后简单地设置 \"name\" 属性::" + +#: ../../library/unittest.mock.rst:1262 +msgid "Attaching Mocks as Attributes" +msgstr "附加 Mock 作为属性" + +#: ../../library/unittest.mock.rst:1264 +msgid "" +"When you attach a mock as an attribute of another mock (or as the return " +"value) it becomes a \"child\" of that mock. Calls to the child are recorded " +"in the :attr:`~Mock.method_calls` and :attr:`~Mock.mock_calls` attributes of" +" the parent. This is useful for configuring child mocks and then attaching " +"them to the parent, or for attaching mocks to a parent that records all " +"calls to the children and allows you to make assertions about the order of " +"calls between mocks:" +msgstr "" +"当你附加一个 mock 作为另一个 mock 的属性(或作为返回值)时它会成为该 mock 的 \"子对象\"。 对子对象的调用会被记录在父对象的 " +":attr:`~Mock.method_calls` 和 :attr:`~Mock.mock_calls` 属性中。 这适用于配置子 mock " +"然后将它们附加到父对象,或是将 mock 附加到将记录所有对子对象的调用的父对象上并允许你创建有关 mock 之间的调用顺序的断言:" + +#: ../../library/unittest.mock.rst:1282 +msgid "" +"The exception to this is if the mock has a name. This allows you to prevent " +"the \"parenting\" if for some reason you don't want it to happen." +msgstr "这里有一个例外情况是如果 mock 设置了名称。 这允许你在出于某些理由不希望其发生时避免 \"父对象\" 的影响。" + +#: ../../library/unittest.mock.rst:1293 +msgid "" +"Mocks created for you by :func:`patch` are automatically given names. To " +"attach mocks that have names to a parent you use the " +":meth:`~Mock.attach_mock` method::" +msgstr "" +"通过 :func:`patch` 创建的 mock 会被自动赋予名称。 要将具有名称的 mock 附加到父对象上你应当使用 " +":meth:`~Mock.attach_mock` 方法::" + +#: ../../library/unittest.mock.rst:1311 +msgid "" +"The only exceptions are magic methods and attributes (those that have " +"leading and trailing double underscores). Mock doesn't create these but " +"instead raises an :exc:`AttributeError`. This is because the interpreter " +"will often implicitly request these methods, and gets *very* confused to get" +" a new Mock object when it expects a magic method. If you need magic method " +"support see :ref:`magic methods `." +msgstr "" +"仅有的例外是魔术方法和属性(其名称前后都带有双下划线)。 Mock 不会创建它们而是将引发 :exc:`AttributeError`。 " +"这是因为解释器将会经常隐式地请求这些方法,并且在它准备接受一个魔术方法却得到一个新的 Mock 对象时会 *相当* 困惑。 如果你需要魔术方法支持请参阅" +" :ref:`魔术方法 `。" + +#: ../../library/unittest.mock.rst:1320 +msgid "The patchers" +msgstr "patch 装饰器" + +#: ../../library/unittest.mock.rst:1322 +msgid "" +"The patch decorators are used for patching objects only within the scope of " +"the function they decorate. They automatically handle the unpatching for " +"you, even if exceptions are raised. All of these functions can also be used " +"in with statements or as class decorators." +msgstr "" +"patch 装饰器仅被用于在它们所装饰的函数作用域内部为对象添加补丁。 它们会自动为你执行去除补丁的处理,即使是在引发了异常的情况下。 " +"所有这些函数都还可在 with 语句中使用或是作为类装饰器。" + +#: ../../library/unittest.mock.rst:1329 +msgid "patch" +msgstr "patch" + +#: ../../library/unittest.mock.rst:1333 +msgid "" +"The key is to do the patching in the right namespace. See the section `where" +" to patch`_." +msgstr "问题的关键是要在正确的命名空间中打补丁。 参见 `where to patch`_ 一节。" + +#: ../../library/unittest.mock.rst:1337 +msgid "" +":func:`patch` acts as a function decorator, class decorator or a context " +"manager. Inside the body of the function or with statement, the *target* is " +"patched with a *new* object. When the function/with statement exits the " +"patch is undone." +msgstr "" +":func:`patch` 可以作为函数装饰器、类装饰器或上下文管理器。 在函数或 with 语句的内部,*target* 会打上一个 *new* " +"对象补丁。 当函数/with 语句退出时补丁将被撤销。" + +#: ../../library/unittest.mock.rst:1342 +msgid "" +"If *new* is omitted, then the target is replaced with an :class:`AsyncMock` " +"if the patched object is an async function or a :class:`MagicMock` " +"otherwise. If :func:`patch` is used as a decorator and *new* is omitted, the" +" created mock is passed in as an extra argument to the decorated function. " +"If :func:`patch` is used as a context manager the created mock is returned " +"by the context manager." +msgstr "" +"如果 *new* 被省略,那么如果被打补丁的对象是一个异步函数则 target 将被替换为 :class:`AsyncMock` 否则替换为 " +":class:`MagicMock`。 如果 :func:`patch` 被用作装饰器并且 *new* 被省略,那么已创建的 mock " +"将作为一个附加参数传入被装饰的函数。 如果 :func:`patch` 被用作上下文管理器那么已创建的 mock 将被该上下文管理器所返回。is " +"returned by the context manager." + +#: ../../library/unittest.mock.rst:1350 +msgid "" +"*target* should be a string in the form ``'package.module.ClassName'``. The " +"*target* is imported and the specified object replaced with the *new* " +"object, so the *target* must be importable from the environment you are " +"calling :func:`patch` from. The target is imported when the decorated " +"function is executed, not at decoration time." +msgstr "" +"*target* 应当为 ``'package.module.ClassName'`` 形式的字符串。 *target* " +"将被导入并且该指定对象会被替换为 *new* 对象,因此 *target* 必须是可以从你调用 :func:`patch` 的环境中导入的。 " +"target 会在被装饰的函数被执行的时候被导入,而非在装饰的时候。" + +#: ../../library/unittest.mock.rst:1356 +msgid "" +"The *spec* and *spec_set* keyword arguments are passed to the " +":class:`MagicMock` if patch is creating one for you." +msgstr "" +"*spec* 和 *spec_set* 关键字参数会被传递给 :class:`MagicMock`,如果 patch 为你创建了此对象的话。" + +#: ../../library/unittest.mock.rst:1359 +msgid "" +"In addition you can pass ``spec=True`` or ``spec_set=True``, which causes " +"patch to pass in the object being mocked as the spec/spec_set object." +msgstr "" +"此外你还可以传入 ``spec=True`` 或 ``spec_set=True``,这将使 patch 将被模拟的对象作为 spec/spec_set" +" 对象传入。" + +#: ../../library/unittest.mock.rst:1362 +msgid "" +"*new_callable* allows you to specify a different class, or callable object, " +"that will be called to create the *new* object. By default " +":class:`AsyncMock` is used for async functions and :class:`MagicMock` for " +"the rest." +msgstr "" +"*new_callable* 允许你指定一个不同的类,或者可调用对象,它将被调用以创建 *新的* 对象。 在默认情况下将指定 " +":class:`AsyncMock` 用于异步函数,:class:`MagicMock` 用于其他函数。" + +#: ../../library/unittest.mock.rst:1366 +msgid "" +"A more powerful form of *spec* is *autospec*. If you set ``autospec=True`` " +"then the mock will be created with a spec from the object being replaced. " +"All attributes of the mock will also have the spec of the corresponding " +"attribute of the object being replaced. Methods and functions being mocked " +"will have their arguments checked and will raise a :exc:`TypeError` if they " +"are called with the wrong signature. For mocks replacing a class, their " +"return value (the 'instance') will have the same spec as the class. See the " +":func:`create_autospec` function and :ref:`auto-speccing`." +msgstr "" +"另一种更强形式的 *spec* 是 *autospec*。 如果你设置了 ``autospec=True`` 则将以来自被替换对象的 spec 来创建 " +"mock。 mock 的所有属性也将具有被替换对象相应属性的 spec。 被模拟的方法和函数将检查它们的参数并且如果使用了错误的签名调用它们则将引发 " +":exc:`TypeError`。 对于替换了一个类的 mock,它们的返回值(即‘实例’)将具有与该类相同的 spec。 请参阅 " +":func:`create_autospec` 函数以及 :ref:`auto-speccing`。" + +#: ../../library/unittest.mock.rst:1376 +msgid "" +"Instead of ``autospec=True`` you can pass ``autospec=some_object`` to use an" +" arbitrary object as the spec instead of the one being replaced." +msgstr "" +"除了 ``autospec=True`` 你还可以传入 ``autospec=some_object`` 以使用任意对象而不是被替换的对象作为 " +"spec。" + +#: ../../library/unittest.mock.rst:1379 +msgid "" +"By default :func:`patch` will fail to replace attributes that don't exist. " +"If you pass in ``create=True``, and the attribute doesn't exist, patch will " +"create the attribute for you when the patched function is called, and delete" +" it again after the patched function has exited. This is useful for writing " +"tests against attributes that your production code creates at runtime. It is" +" off by default because it can be dangerous. With it switched on you can " +"write passing tests against APIs that don't actually exist!" +msgstr "" +"在默认情况下 :func:`patch` 将无法替换不存在的属性。 如果你传入 ``create=True``,且该属性并不存在,则 patch " +"将在调用被打补丁的函数时为你创建该属性,并在退出被打补丁的函数时再次删除它。 这适用于编写针对生产代码在运行时创建的属性的测试。 " +"它默认是被关闭的因为这具有危险性。 当它被开启时你将能够针对实际上并不存在的 API 编写通过测试!" + +#: ../../library/unittest.mock.rst:1389 +msgid "" +"If you are patching builtins in a module then you don't need to pass " +"``create=True``, it will be added by default." +msgstr "如果你要给某个模块的内置函数打补丁则不必传入 ``create=True``,它默认就会被添加。" + +#: ../../library/unittest.mock.rst:1393 +msgid "" +"Patch can be used as a :class:`TestCase` class decorator. It works by " +"decorating each test method in the class. This reduces the boilerplate code " +"when your test methods share a common patchings set. :func:`patch` finds " +"tests by looking for method names that start with ``patch.TEST_PREFIX``. By " +"default this is ``'test'``, which matches the way :mod:`unittest` finds " +"tests. You can specify an alternative prefix by setting " +"``patch.TEST_PREFIX``." +msgstr "" +"Patch 可以被用作 :class:`TestCase` 类装饰器。 其作用是装饰类中的每个测试方法。 " +"当你的测试方法共享同一个补丁集时这将减少模板代码。 :func:`patch` 会通过查找以 ``patch.TEST_PREFIX`` " +"打头的名称来找到测试。 其默认值为 ``'test'``,这与 :mod:`unittest` 打到测试的方式一致。 你可以通过设置 " +"``patch.TEST_PREFIX`` 来指定其他的前缀。" + +#: ../../library/unittest.mock.rst:1400 +msgid "" +"Patch can be used as a context manager, with the with statement. Here the " +"patching applies to the indented block after the with statement. If you use " +"\"as\" then the patched object will be bound to the name after the \"as\"; " +"very useful if :func:`patch` is creating a mock object for you." +msgstr "" +"Patch 可以通过 with 语句作为上下文管理器使用。 这时补丁将应用于 with 语句的缩进代码块。 如果你使用了 \"as\" " +"则打补丁的对象将被绑定到 \"as\" 之后的名称;这非常适用于当 :func:`patch` 为你创建 mock 对象的情况。" + +#: ../../library/unittest.mock.rst:1405 +msgid "" +":func:`patch` takes arbitrary keyword arguments. These will be passed to " +":class:`AsyncMock` if the patched object is asynchronous, to " +":class:`MagicMock` otherwise or to *new_callable* if specified." +msgstr "" +":func:`patch` 可接受任意关键字参数。 如果打补丁的对象是异步的则这些参数将被传给 :class:`AsyncMock`,否则传给 " +":class:`MagicMock`,或者是指定的 *new_callable*。" + +#: ../../library/unittest.mock.rst:1409 +msgid "" +"``patch.dict(...)``, ``patch.multiple(...)`` and ``patch.object(...)`` are " +"available for alternate use-cases." +msgstr "" +"``patch.dict(...)``, ``patch.multiple(...)`` 和 ``patch.object(...)`` " +"可用于其他使用场景。" + +#: ../../library/unittest.mock.rst:1412 +msgid "" +":func:`patch` as function decorator, creating the mock for you and passing " +"it into the decorated function::" +msgstr ":func:`patch` 作为函数装饰器,为你创建 mock 并将其传入被装饰的函数::" + +#: ../../library/unittest.mock.rst:1422 +msgid "" +"Patching a class replaces the class with a :class:`MagicMock` *instance*. If" +" the class is instantiated in the code under test then it will be the " +":attr:`~Mock.return_value` of the mock that will be used." +msgstr "" +"为类打补丁将把该类替换为 :class:`MagicMock` 的 *实例*。 如果该类是在受测试的代码中被实例化的则它将为所要使用的 mock 的 " +":attr:`~Mock.return_value`。" + +#: ../../library/unittest.mock.rst:1426 +msgid "" +"If the class is instantiated multiple times you could use " +":attr:`~Mock.side_effect` to return a new mock each time. Alternatively you " +"can set the *return_value* to be anything you want." +msgstr "" +"如果该类被多次实例化则你可以使用 :attr:`~Mock.side_effect` 来每次返回一个新 mock。 或者你也可以将 " +"*return_value* 设为你希望的任何对象。" + +#: ../../library/unittest.mock.rst:1430 +msgid "" +"To configure return values on methods of *instances* on the patched class " +"you must do this on the :attr:`return_value`. For example::" +msgstr "要在被打补丁的类的 *实例* 的方法上配置返回值你必须在 :attr:`return_value` 操作。 例如::" + +#: ../../library/unittest.mock.rst:1444 +msgid "" +"If you use *spec* or *spec_set* and :func:`patch` is replacing a *class*, " +"then the return value of the created mock will have the same spec. ::" +msgstr "" +"如果你使用 *spec* 或 *spec_set* 并且 :func:`patch` 替换的是 *class*,那么所创建的 mock " +"的返回值将具有同样的 spec。 ::" + +#: ../../library/unittest.mock.rst:1454 +msgid "" +"The *new_callable* argument is useful where you want to use an alternative " +"class to the default :class:`MagicMock` for the created mock. For example, " +"if you wanted a :class:`NonCallableMock` to be used::" +msgstr "" +"*new_callable* 参数适用于当你想要使用其他类来替代所创建的 mock 默认的 :class:`MagicMock` 的场合。 " +"例如,如果你想要使用 :class:`NonCallableMock`::" + +#: ../../library/unittest.mock.rst:1467 +msgid "" +"Another use case might be to replace an object with an :class:`io.StringIO` " +"instance::" +msgstr "另一个使用场景是用 :class:`io.StringIO` 实例来替换某个对象::" + +#: ../../library/unittest.mock.rst:1480 +msgid "" +"When :func:`patch` is creating a mock for you, it is common that the first " +"thing you need to do is to configure the mock. Some of that configuration " +"can be done in the call to patch. Any arbitrary keywords you pass into the " +"call will be used to set attributes on the created mock::" +msgstr "" +"当 :func:`patch` 为你创建 mock 时,通常你需要做的第一件事就是配置该 mock。 某些配置可以在对 patch 的调用中完成。 " +"你在调用时传入的任何关键字参数都将被用来在所创建的 mock 上设置属性::" + +#: ../../library/unittest.mock.rst:1492 +msgid "" +"As well as attributes on the created mock attributes, like the " +":attr:`~Mock.return_value` and :attr:`~Mock.side_effect`, of child mocks can" +" also be configured. These aren't syntactically valid to pass in directly as" +" keyword arguments, but a dictionary with these as keys can still be " +"expanded into a :func:`patch` call using ``**``::" +msgstr "" +"除了所创建的 mock 的属性上的属性,例如 :attr:`~Mock.return_value` 和 " +":attr:`~Mock.side_effect`,还可以配置子 mock 的属性。 将这些属性直接作为关键字参数传入在语义上是无效的,但是仍然能够使用" +" ``**`` 将以这些属性为键的字典扩展至一个 :func:`patch` 调用中 ::" + +#: ../../library/unittest.mock.rst:1508 +msgid "" +"By default, attempting to patch a function in a module (or a method or an " +"attribute in a class) that does not exist will fail with " +":exc:`AttributeError`::" +msgstr "" +"在默认情况下,尝试给某个模块中并不存在的函数(或者某个类中的方法或属性)打补丁将会失败并引发 :exc:`AttributeError`::" + +#: ../../library/unittest.mock.rst:1520 +msgid "" +"but adding ``create=True`` in the call to :func:`patch` will make the " +"previous example work as expected::" +msgstr "但在对 :func:`patch` 的调用中添加 ``create=True`` 将使之前示例的效果符合预期::" + +#: ../../library/unittest.mock.rst:1531 +msgid "" +":func:`patch` now returns an :class:`AsyncMock` if the target is an async " +"function." +msgstr "如果目标为异步函数那么 :func:`patch` 现在将返回一个 :class:`AsyncMock`。" + +#: ../../library/unittest.mock.rst:1535 +msgid "patch.object" +msgstr "patch.object" + +#: ../../library/unittest.mock.rst:1539 +msgid "" +"patch the named member (*attribute*) on an object (*target*) with a mock " +"object." +msgstr "用一个 mock 对象为对象 (*target*) 中指定名称的成员 (*attribute*) 打补丁。" + +#: ../../library/unittest.mock.rst:1542 +msgid "" +":func:`patch.object` can be used as a decorator, class decorator or a " +"context manager. Arguments *new*, *spec*, *create*, *spec_set*, *autospec* " +"and *new_callable* have the same meaning as for :func:`patch`. Like " +":func:`patch`, :func:`patch.object` takes arbitrary keyword arguments for " +"configuring the mock object it creates." +msgstr "" +":func:`patch.object` 可以被用作装饰器、类装饰器或上下文管理器。 *new*, *spec*, *create*, " +"*spec_set*, *autospec* 和 *new_callable* 等参数的含义与 :func:`patch` 的相同。 与 " +":func:`patch` 类似,:func:`patch.object` 接受任意关键字参数用于配置它所创建的 mock 对象。" + +#: ../../library/unittest.mock.rst:1548 +msgid "" +"When used as a class decorator :func:`patch.object` honours " +"``patch.TEST_PREFIX`` for choosing which methods to wrap." +msgstr "" +"当用作类装饰器时 :func:`patch.object` 将认可 ``patch.TEST_PREFIX`` 作为选择所要包装方法的标准。" + +#: ../../library/unittest.mock.rst:1551 +msgid "" +"You can either call :func:`patch.object` with three arguments or two " +"arguments. The three argument form takes the object to be patched, the " +"attribute name and the object to replace the attribute with." +msgstr "" +"你可以附带三个参数或两个参数来调用 :func:`patch.object`。 三个参数的形式将接受要打补丁的对象、属性的名称以及将要替换该属性的对象。" + +#: ../../library/unittest.mock.rst:1555 +msgid "" +"When calling with the two argument form you omit the replacement object, and" +" a mock is created for you and passed in as an extra argument to the " +"decorated function:" +msgstr "将附带两个参数的形式调用时你将省略替换对象,还会为你创建一个 mock 并作为附加参数传入被装饰的函数:" + +#: ../../library/unittest.mock.rst:1566 +msgid "" +"*spec*, *create* and the other arguments to :func:`patch.object` have the " +"same meaning as they do for :func:`patch`." +msgstr "" +"传给 :func:`patch.object` 的 *spec*, *create* 和其他参数的含义与 :func:`patch` 的同名参数相同。" + +#: ../../library/unittest.mock.rst:1571 +msgid "patch.dict" +msgstr "patch.dict" + +#: ../../library/unittest.mock.rst:1575 +msgid "" +"Patch a dictionary, or dictionary like object, and restore the dictionary to" +" its original state after the test." +msgstr "为一个目录或目录类对象打补丁,并在测试之后将该目录恢复到其初始状态。" + +#: ../../library/unittest.mock.rst:1578 +msgid "" +"*in_dict* can be a dictionary or a mapping like container. If it is a " +"mapping then it must at least support getting, setting and deleting items " +"plus iterating over keys." +msgstr "*in_dict* 可以是一个字典或映射类容器。 如果它是一个映射则它必须至少支持获取、设置和删除条目以及对键执行迭代。" + +#: ../../library/unittest.mock.rst:1582 +msgid "" +"*in_dict* can also be a string specifying the name of the dictionary, which " +"will then be fetched by importing it." +msgstr "*in_dict* 也可以是一个指定字典名称的字符串,然后将通过导入操作来获取该字典。" + +#: ../../library/unittest.mock.rst:1585 +msgid "" +"*values* can be a dictionary of values to set in the dictionary. *values* " +"can also be an iterable of ``(key, value)`` pairs." +msgstr "" +"*values* 可以是一个要在字典中设置的值的字典。 *values* 也可以是一个包含 ``(key, value)`` 对的可迭代对象。" + +#: ../../library/unittest.mock.rst:1588 +msgid "" +"If *clear* is true then the dictionary will be cleared before the new values" +" are set." +msgstr "如果 *clear* 为真值则该字典将在设置新值之前先被清空。" + +#: ../../library/unittest.mock.rst:1591 +msgid "" +":func:`patch.dict` can also be called with arbitrary keyword arguments to " +"set values in the dictionary." +msgstr ":func:`patch.dict` 也可以附带任意关键字参数调用以设置字典中的值。" + +#: ../../library/unittest.mock.rst:1596 +msgid "" +":func:`patch.dict` now returns the patched dictionary when used as a context" +" manager." +msgstr "" +"现在当 :func:`patch.dict` 被用作上下文管理器时将返回被打补丁的字典。now returns the patched " +"dictionary when used as a context manager." + +#: ../../library/unittest.mock.rst:1599 +msgid "" +":func:`patch.dict` can be used as a context manager, decorator or class " +"decorator:" +msgstr ":func:`patch.dict` 可被用作上下文管理器、装饰器或类装饰器:" + +#: ../../library/unittest.mock.rst:1609 +msgid "" +"When used as a class decorator :func:`patch.dict` honours " +"``patch.TEST_PREFIX`` (default to ``'test'``) for choosing which methods to " +"wrap:" +msgstr "" +"当被用作类装饰器时 :func:`patch.dict` 将认可 ``patch.TEST_PREFIX`` (默认值为 ``'test'``) " +"作为选择所在包装方法的标准:" + +#: ../../library/unittest.mock.rst:1620 +msgid "" +"If you want to use a different prefix for your test, you can inform the " +"patchers of the different prefix by setting ``patch.TEST_PREFIX``. For more " +"details about how to change the value of see :ref:`test-prefix`." +msgstr "" +"如果你在为你的测试使用不同的前缀,你可以通过设置 ``patch.TEST_PREFIX`` 来将不同的前缀告知打补丁方。 有关如何修改该值的详情请参阅" +" :ref:`test-prefix`。" + +#: ../../library/unittest.mock.rst:1624 +msgid "" +":func:`patch.dict` can be used to add members to a dictionary, or simply let" +" a test change a dictionary, and ensure the dictionary is restored when the " +"test ends." +msgstr ":func:`patch.dict` 可被用来向一个字典添加成员,或者简单地让测试修改一个字典,并确保当测试结束时恢复该字典。" + +#: ../../library/unittest.mock.rst:1645 +msgid "" +"Keywords can be used in the :func:`patch.dict` call to set values in the " +"dictionary:" +msgstr "可以在 :func:`patch.dict` 调用中使用关键字来设置字典的值:" + +#: ../../library/unittest.mock.rst:1655 +msgid "" +":func:`patch.dict` can be used with dictionary like objects that aren't " +"actually dictionaries. At the very minimum they must support item getting, " +"setting, deleting and either iteration or membership test. This corresponds " +"to the magic methods :meth:`__getitem__`, :meth:`__setitem__`, " +":meth:`__delitem__` and either :meth:`__iter__` or :meth:`__contains__`." +msgstr "" +":func:`patch.dict` 可以用于实际上不是字典的字典类对象。 它们最少必须支持条目获取、设置、删除以及迭代或成员检测两者中的一个。 " +"这对应于魔术方法 :meth:`__getitem__`, :meth:`__setitem__`, :meth:`__delitem__` 以及 " +":meth:`__iter__` 或 :meth:`__contains__`。" + +#: ../../library/unittest.mock.rst:1684 +msgid "patch.multiple" +msgstr "patch.multiple" + +#: ../../library/unittest.mock.rst:1688 +msgid "" +"Perform multiple patches in a single call. It takes the object to be patched" +" (either as an object or a string to fetch the object by importing) and " +"keyword arguments for the patches::" +msgstr "在单个调用中执行多重补丁。 它接受要打补丁的对象(一个对象或一个通过导入来获取对象的字符串)以及用于补丁的关键字参数::" + +#: ../../library/unittest.mock.rst:1695 +msgid "" +"Use :data:`DEFAULT` as the value if you want :func:`patch.multiple` to " +"create mocks for you. In this case the created mocks are passed into a " +"decorated function by keyword, and a dictionary is returned when " +":func:`patch.multiple` is used as a context manager." +msgstr "" +"如果你希望 :func:`patch.multiple` 为你创建 mock 则要使用 :data:`DEFAULT` 作为值。 在此情况下所创建的 " +"mock 会通过关键字参数传入被装饰的函数,而当 :func:`patch.multiple` 被用作上下文管理器时则将返回一个字典。" + +#: ../../library/unittest.mock.rst:1700 +msgid "" +":func:`patch.multiple` can be used as a decorator, class decorator or a " +"context manager. The arguments *spec*, *spec_set*, *create*, *autospec* and " +"*new_callable* have the same meaning as for :func:`patch`. These arguments " +"will be applied to *all* patches done by :func:`patch.multiple`." +msgstr "" +":func:`patch.multiple` 可以被用作装饰器、类装饰器或上下文管理器。 *spec*, *spec_set*, *create*, " +"*autospec* 和 *new_callable* 等参数的含义与 :func:`patch` 的相同。 这些参数将被应用到 " +":func:`patch.multiple` 所打的 *所有* 补丁。" + +#: ../../library/unittest.mock.rst:1705 +msgid "" +"When used as a class decorator :func:`patch.multiple` honours " +"``patch.TEST_PREFIX`` for choosing which methods to wrap." +msgstr "" +"当被用作类装饰器时 :func:`patch.multiple` 将认可 ``patch.TEST_PREFIX`` 作为选择所要包装方法的标准。" + +#: ../../library/unittest.mock.rst:1708 +msgid "" +"If you want :func:`patch.multiple` to create mocks for you, then you can use" +" :data:`DEFAULT` as the value. If you use :func:`patch.multiple` as a " +"decorator then the created mocks are passed into the decorated function by " +"keyword. ::" +msgstr "" +"如果你希望 :func:`patch.multiple` 为你创建 mock,那么你可以使用 :data:`DEFAULT` 作为值。 如果你使用 " +":func:`patch.multiple` 作为装饰器则所创建的 mock 会作为关键字参数传入被装饰的函数。 ::" + +#: ../../library/unittest.mock.rst:1722 +msgid "" +":func:`patch.multiple` can be nested with other ``patch`` decorators, but " +"put arguments passed by keyword *after* any of the standard arguments " +"created by :func:`patch`::" +msgstr "" +":func:`patch.multiple` 可以与其他 ``patch`` 装饰器嵌套使用,但要将作为关键字传入的参数要放在 " +":func:`patch` 所创建的标准参数 *之后*::" + +#: ../../library/unittest.mock.rst:1734 +msgid "" +"If :func:`patch.multiple` is used as a context manager, the value returned " +"by the context manager is a dictionary where created mocks are keyed by " +"name::" +msgstr "" +"如果 :func:`patch.multiple` 被用作上下文管理器,则上下文管理器的返回值将是一个以所创建的 mock 的名称为键的字典::" + +#: ../../library/unittest.mock.rst:1748 +msgid "patch methods: start and stop" +msgstr "补丁方法: start 和 stop" + +#: ../../library/unittest.mock.rst:1750 +msgid "" +"All the patchers have :meth:`start` and :meth:`stop` methods. These make it " +"simpler to do patching in ``setUp`` methods or where you want to do multiple" +" patches without nesting decorators or with statements." +msgstr "" +"所有补丁对象都具有 :meth:`start` 和 :meth:`stop` 方法。 使用这些方法可以更简单地在 ``setUp`` " +"方法上打补丁,还可以让你不必嵌套使用装饰器或 with 语句就能打多重补丁。" + +#: ../../library/unittest.mock.rst:1754 +msgid "" +"To use them call :func:`patch`, :func:`patch.object` or :func:`patch.dict` " +"as normal and keep a reference to the returned ``patcher`` object. You can " +"then call :meth:`start` to put the patch in place and :meth:`stop` to undo " +"it." +msgstr "" +"要使用这些方法请按正常方式调用 :func:`patch`, :func:`patch.object` 或 :func:`patch.dict` " +"并保留一个指向所返回 ``patcher`` 对象的引用。 然后你可以调用 :meth:`start` 来原地打补丁并调用 :meth:`stop` " +"来恢复它。" + +#: ../../library/unittest.mock.rst:1758 +msgid "" +"If you are using :func:`patch` to create a mock for you then it will be " +"returned by the call to ``patcher.start``. ::" +msgstr "如果你使用 :func:`patch` 来创建自己的 mock 那么将可通过调用 ``patcher.start`` 来返回它。 ::" + +#: ../../library/unittest.mock.rst:1772 +msgid "" +"A typical use case for this might be for doing multiple patches in the " +"``setUp`` method of a :class:`TestCase`::" +msgstr "此操作的一个典型应用场景是在一个 :class:`TestCase` 的 ``setUp`` 方法中执行多重补丁::" + +#: ../../library/unittest.mock.rst:1794 +msgid "" +"If you use this technique you must ensure that the patching is \"undone\" by" +" calling ``stop``. This can be fiddlier than you might think, because if an " +"exception is raised in the ``setUp`` then ``tearDown`` is not called. " +":meth:`unittest.TestCase.addCleanup` makes this easier::" +msgstr "" +"如果你要使用这个技巧则你必须通过调用 ``stop`` 来确保补丁被“恢复”。 这可能要比你想像的更麻烦,因为如果在 ``setUp`` " +"中引发了异常那么 ``tearDown`` 将不会被调用。 :meth:`unittest.TestCase.addCleanup` 可以简化此操作::" + +#: ../../library/unittest.mock.rst:1809 +msgid "" +"As an added bonus you no longer need to keep a reference to the ``patcher`` " +"object." +msgstr "一项额外的好处是你不再需要保留指向 ``patcher`` 对象的引用。" + +#: ../../library/unittest.mock.rst:1812 +msgid "" +"It is also possible to stop all patches which have been started by using " +":func:`patch.stopall`." +msgstr "还可以通过使用 :func:`patch.stopall` 来停止已启动的所有补丁。" + +#: ../../library/unittest.mock.rst:1817 +msgid "Stop all active patches. Only stops patches started with ``start``." +msgstr "停止所有激活的补丁。 仅会停止通过 ``start`` 启动的补丁。" + +#: ../../library/unittest.mock.rst:1823 +msgid "patch builtins" +msgstr "为内置对象打补丁" + +#: ../../library/unittest.mock.rst:1824 +msgid "" +"You can patch any builtins within a module. The following example patches " +"builtin :func:`ord`::" +msgstr "你可以为一个模块中的任何内置函数打补丁。 以以示例是为内置函数 :func:`ord` 打补丁::" + +#: ../../library/unittest.mock.rst:1839 +msgid "TEST_PREFIX" +msgstr "TEST_PREFIX" + +#: ../../library/unittest.mock.rst:1841 +msgid "" +"All of the patchers can be used as class decorators. When used in this way " +"they wrap every test method on the class. The patchers recognise methods " +"that start with ``'test'`` as being test methods. This is the same way that " +"the :class:`unittest.TestLoader` finds test methods by default." +msgstr "" +"所有补丁都可被用作类装饰器。 当以这种方式使用时它们将会包装类中的每个测试方法。 补丁会将以名字以 ``'test'`` 开头的方法识别为测试方法。 " +"这与 :class:`unittest.TestLoader` 查找测试方法的默认方式相同。" + +#: ../../library/unittest.mock.rst:1846 +msgid "" +"It is possible that you want to use a different prefix for your tests. You " +"can inform the patchers of the different prefix by setting " +"``patch.TEST_PREFIX``::" +msgstr "你可能会想要为你的测试使用不同的前缀。 你可以通过设置 ``patch.TEST_PREFIX`` 来告知打补丁方不同的前缀::" + +#: ../../library/unittest.mock.rst:1869 +msgid "Nesting Patch Decorators" +msgstr "嵌套补丁装饰器" + +#: ../../library/unittest.mock.rst:1871 +msgid "" +"If you want to perform multiple patches then you can simply stack up the " +"decorators." +msgstr "如果你想要应用多重补丁那么你可以简单地堆叠多个装饰器。" + +#: ../../library/unittest.mock.rst:1874 +msgid "You can stack up multiple patch decorators using this pattern:" +msgstr "你可以使用以下模式来堆叠多个补丁装饰器:" + +#: ../../library/unittest.mock.rst:1890 +msgid "" +"Note that the decorators are applied from the bottom upwards. This is the " +"standard way that Python applies decorators. The order of the created mocks " +"passed into your test function matches this order." +msgstr "" +"请注意装饰器是从下往上被应用的。 这是 Python 应用装饰器的标准方式。 被创建并传入你的测试函数的 mock 的顺序也将匹配这个顺序。" + +#: ../../library/unittest.mock.rst:1898 +msgid "Where to patch" +msgstr "补丁的位置" + +#: ../../library/unittest.mock.rst:1900 +msgid "" +":func:`patch` works by (temporarily) changing the object that a *name* " +"points to with another one. There can be many names pointing to any " +"individual object, so for patching to work you must ensure that you patch " +"the name used by the system under test." +msgstr "" +":func:`patch` 通过(临时性地)修改某一个对象的 *名称* 指向另一个对象来发挥作用。 " +"可以有多个名称指向任意单独对象,因此要让补丁起作用你必须确保已为被测试的系统所使用的名称打上补丁。" + +#: ../../library/unittest.mock.rst:1905 +msgid "" +"The basic principle is that you patch where an object is *looked up*, which " +"is not necessarily the same place as where it is defined. A couple of " +"examples will help to clarify this." +msgstr "基本原则是你要在对象 *被查找* 的地方打补丁,这不一定就是它被定义的地方。 一组示例将有助于厘清这一点。" + +#: ../../library/unittest.mock.rst:1909 +msgid "" +"Imagine we have a project that we want to test with the following " +"structure::" +msgstr "想像我们有一个想要测试的具有如下结构的项目::" + +#: ../../library/unittest.mock.rst:1918 +msgid "" +"Now we want to test ``some_function`` but we want to mock out ``SomeClass`` " +"using :func:`patch`. The problem is that when we import module b, which we " +"will have to do then it imports ``SomeClass`` from module a. If we use " +":func:`patch` to mock out ``a.SomeClass`` then it will have no effect on our" +" test; module b already has a reference to the *real* ``SomeClass`` and it " +"looks like our patching had no effect." +msgstr "" +"现在我们要测试 ``some_function`` 但我们想使用 :func:`patch` 来模拟 ``SomeClass``。 " +"问题在于当我们导入模块 b 时,我们将必须让它从模块 a 导入 ``SomeClass``。 如果我们使用 :func:`patch` 来模拟 " +"``a.SomeClass`` 那么它将不会对我们的测试造成影响;模块 b 已经拥有对 *真正的* ``SomeClass`` " +"的引用因此看上去我们的补丁不会有任何影响。" + +#: ../../library/unittest.mock.rst:1925 +msgid "" +"The key is to patch out ``SomeClass`` where it is used (or where it is " +"looked up). In this case ``some_function`` will actually look up " +"``SomeClass`` in module b, where we have imported it. The patching should " +"look like::" +msgstr "" +"关键在于对 ``SomeClass`` 打补丁操作是在它被使用(或它被查找)的地方。 在此情况下实际上 ``some_function`` 将在模块 b" +" 中查找 ``SomeClass``,而我们已经在那里导入了它。 补丁看上去应该是这样::" + +#: ../../library/unittest.mock.rst:1931 +msgid "" +"However, consider the alternative scenario where instead of ``from a import " +"SomeClass`` module b does ``import a`` and ``some_function`` uses " +"``a.SomeClass``. Both of these import forms are common. In this case the " +"class we want to patch is being looked up in the module and so we have to " +"patch ``a.SomeClass`` instead::" +msgstr "" +"但是,再考虑另一个场景,其中不是 ``from a import SomeClass`` 而是模块 b 执行了 ``import a`` 并且 " +"``some_function`` 使用了 ``a.SomeClass``。 这两个导入形式都很常见。 " +"在这种情况下我们要打补丁的类将在该模块中被查找因而我们必须改为对 ``a.SomeClass`` 打补丁::" + +#: ../../library/unittest.mock.rst:1940 +msgid "Patching Descriptors and Proxy Objects" +msgstr "对描述器和代理对象打补丁" + +#: ../../library/unittest.mock.rst:1942 +msgid "" +"Both patch_ and patch.object_ correctly patch and restore descriptors: class" +" methods, static methods and properties. You should patch these on the " +"*class* rather than an instance. They also work with *some* objects that " +"proxy attribute access, like the `django settings object " +"`_." +msgstr "" +"patch_ 和 patch.object_ 都能正确地对描述器打补丁并恢复:包括类方法、静态方法和特征属性。 你应当在 *类* " +"而不是在实例上为它们打补丁。 它们还适用于代理属性访问的 *某些* 对象,例如 `django 设置对象 " +"`_。" + +#: ../../library/unittest.mock.rst:1950 +msgid "MagicMock and magic method support" +msgstr "MagicMock 与魔术方法支持" + +#: ../../library/unittest.mock.rst:1955 +msgid "Mocking Magic Methods" +msgstr "模拟魔术方法" + +#: ../../library/unittest.mock.rst:1957 +msgid "" +":class:`Mock` supports mocking the Python protocol methods, also known as " +"\"magic methods\". This allows mock objects to replace containers or other " +"objects that implement Python protocols." +msgstr "" +":class:`Mock` 支持模拟 Python 协议方法,或称“魔术方法”。 这允许 mock 对象替代容器或其他实现了 Python 协议的对象。" + +#: ../../library/unittest.mock.rst:1961 +msgid "" +"Because magic methods are looked up differently from normal methods [#]_, " +"this support has been specially implemented. This means that only specific " +"magic methods are supported. The supported list includes *almost* all of " +"them. If there are any missing that you need please let us know." +msgstr "" +"因为查找魔术方法的方式不同于普通方法 [#]_,这种支持采用了特别的实现。 这意味着只有特定的魔术方法受到支持。 受支持的是 *几乎* 所有魔术方法。 " +"如果有你需要但被遗漏的请告知我们。" + +#: ../../library/unittest.mock.rst:1966 +msgid "" +"You mock magic methods by setting the method you are interested in to a " +"function or a mock instance. If you are using a function then it *must* take" +" ``self`` as the first argument [#]_." +msgstr "" +"你可以通过在某个函数或 mock 实例中设置魔术方法来模拟它们。 如果你是使用函数则它 *必须* 接受 ``self`` 作为第一个参数 [#]_。" + +#: ../../library/unittest.mock.rst:1989 +msgid "" +"One use case for this is for mocking objects used as context managers in a " +":keyword:`with` statement:" +msgstr "一个这样的应用场景是在 :keyword:`with` 语句中模拟作为上下文管理器的对象:" + +#: ../../library/unittest.mock.rst:2001 +msgid "" +"Calls to magic methods do not appear in :attr:`~Mock.method_calls`, but they" +" are recorded in :attr:`~Mock.mock_calls`." +msgstr "" +"对魔术方法的调用不会在 :attr:`~Mock.method_calls` 中出现,但它们会被记录在 :attr:`~Mock.mock_calls`" +" 中。" + +#: ../../library/unittest.mock.rst:2006 +msgid "" +"If you use the *spec* keyword argument to create a mock then attempting to " +"set a magic method that isn't in the spec will raise an " +":exc:`AttributeError`." +msgstr "" +"如果你使用 *spec* 关键字参数来创建 mock 那么尝试设置不包含在 spec 中的魔术方法将引发 :exc:`AttributeError`。" + +#: ../../library/unittest.mock.rst:2009 +msgid "The full list of supported magic methods is:" +msgstr "受支持魔术方法的完整列表如下:" + +#: ../../library/unittest.mock.rst:2011 +msgid "``__hash__``, ``__sizeof__``, ``__repr__`` and ``__str__``" +msgstr "``__hash__``, ``__sizeof__``, ``__repr__`` 和 ``__str__``" + +#: ../../library/unittest.mock.rst:2012 +msgid "``__dir__``, ``__format__`` and ``__subclasses__``" +msgstr "``__dir__``, ``__format__`` 和 ``__subclasses__``" + +#: ../../library/unittest.mock.rst:2013 +msgid "``__round__``, ``__floor__``, ``__trunc__`` and ``__ceil__``" +msgstr "``__round__``, ``__floor__``, ``__trunc__`` 和 ``__ceil__``" + +#: ../../library/unittest.mock.rst:2014 +msgid "" +"Comparisons: ``__lt__``, ``__gt__``, ``__le__``, ``__ge__``, ``__eq__`` and " +"``__ne__``" +msgstr "" +"比较运算: ``__lt__``, ``__gt__``, ``__le__``, ``__ge__``, ``__eq__`` 和 " +"``__ne__``" + +#: ../../library/unittest.mock.rst:2016 +msgid "" +"Container methods: ``__getitem__``, ``__setitem__``, ``__delitem__``, " +"``__contains__``, ``__len__``, ``__iter__``, ``__reversed__`` and " +"``__missing__``" +msgstr "" +"容器方法: ``__getitem__``, ``__setitem__``, ``__delitem__``, ``__contains__``, " +"``__len__``, ``__iter__``, ``__reversed__`` 和 ``__missing__``" + +#: ../../library/unittest.mock.rst:2019 +msgid "" +"Context manager: ``__enter__``, ``__exit__``, ``__aenter__`` and " +"``__aexit__``" +msgstr "上下文管理器: ``__enter__``, ``__exit__``, ``__aenter__`` 和 ``__aexit__``" + +#: ../../library/unittest.mock.rst:2020 +msgid "Unary numeric methods: ``__neg__``, ``__pos__`` and ``__invert__``" +msgstr "单目数值运算方法: ``__neg__``, ``__pos__`` 和 ``__invert__``" + +#: ../../library/unittest.mock.rst:2021 +msgid "" +"The numeric methods (including right hand and in-place variants): " +"``__add__``, ``__sub__``, ``__mul__``, ``__matmul__``, ``__div__``, " +"``__truediv__``, ``__floordiv__``, ``__mod__``, ``__divmod__``, " +"``__lshift__``, ``__rshift__``, ``__and__``, ``__xor__``, ``__or__``, and " +"``__pow__``" +msgstr "" +"数值运算方法 (包括右手和原地形式): ``__add__``, ``__sub__``, ``__mul__``, ``__matmul__``, " +"``__div__``, ``__truediv__``, ``__floordiv__``, ``__mod__``, ``__divmod__``," +" ``__lshift__``, ``__rshift__``, ``__and__``, ``__xor__``, ``__or__`` 和 " +"``__pow__``" + +#: ../../library/unittest.mock.rst:2025 +msgid "" +"Numeric conversion methods: ``__complex__``, ``__int__``, ``__float__`` and " +"``__index__``" +msgstr "数值转换方法: ``__complex__``, ``__int__``, ``__float__`` 和 ``__index__``" + +#: ../../library/unittest.mock.rst:2027 +msgid "Descriptor methods: ``__get__``, ``__set__`` and ``__delete__``" +msgstr "描述器方法: ``__get__``, ``__set__`` and ``__delete__``" + +#: ../../library/unittest.mock.rst:2028 +msgid "" +"Pickling: ``__reduce__``, ``__reduce_ex__``, ``__getinitargs__``, " +"``__getnewargs__``, ``__getstate__`` and ``__setstate__``" +msgstr "" +"封存方法: ``__reduce__``, ``__reduce_ex__``, ``__getinitargs__``, " +"``__getnewargs__``, ``__getstate__`` 和 ``__setstate__``" + +#: ../../library/unittest.mock.rst:2030 +msgid "File system path representation: ``__fspath__``" +msgstr "文件系统路径表示: ``__fspath__``" + +#: ../../library/unittest.mock.rst:2031 +msgid "Asynchronous iteration methods: ``__aiter__`` and ``__anext__``" +msgstr "异步迭代方法: ``__aiter__`` and ``__anext__``" + +#: ../../library/unittest.mock.rst:2033 +msgid "Added support for :func:`os.PathLike.__fspath__`." +msgstr "增加了对 :func:`os.PathLike.__fspath__` 的支持。" + +#: ../../library/unittest.mock.rst:2036 +msgid "" +"Added support for ``__aenter__``, ``__aexit__``, ``__aiter__`` and " +"``__anext__``." +msgstr "" +"增加了对 ``__aenter__``, ``__aexit__``, ``__aiter__`` 和 ``__anext__`` 的支持。" + +#: ../../library/unittest.mock.rst:2040 +msgid "" +"The following methods exist but are *not* supported as they are either in " +"use by mock, can't be set dynamically, or can cause problems:" +msgstr "下列方法均存在但是 *不受* 支持,因为它们或者被 mock 所使用,或者无法动态设置,或者可能导致问题:" + +#: ../../library/unittest.mock.rst:2043 +msgid "``__getattr__``, ``__setattr__``, ``__init__`` and ``__new__``" +msgstr "``__getattr__``, ``__setattr__``, ``__init__`` 和 ``__new__``" + +#: ../../library/unittest.mock.rst:2044 +msgid "" +"``__prepare__``, ``__instancecheck__``, ``__subclasscheck__``, ``__del__``" +msgstr "" +"``__prepare__``, ``__instancecheck__``, ``__subclasscheck__``, ``__del__``" + +#: ../../library/unittest.mock.rst:2049 +msgid "Magic Mock" +msgstr "MagicMock" + +#: ../../library/unittest.mock.rst:2051 +msgid "" +"There are two ``MagicMock`` variants: :class:`MagicMock` and " +":class:`NonCallableMagicMock`." +msgstr "" +"存在两个版本的 ``MagicMock``: :class:`MagicMock` 和 :class:`NonCallableMagicMock`." + +#: ../../library/unittest.mock.rst:2056 +msgid "" +"``MagicMock`` is a subclass of :class:`Mock` with default implementations of" +" most of the magic methods. You can use ``MagicMock`` without having to " +"configure the magic methods yourself." +msgstr "" +"``MagicMock`` 是包含了大部分魔术方法的默认实现的 :class:`Mock` 的子类。 你可以使用 ``MagicMock`` " +"而无须自行配置魔术方法。without having to configure the magic methods yourself." + +#: ../../library/unittest.mock.rst:2060 +msgid "The constructor parameters have the same meaning as for :class:`Mock`." +msgstr "构造器形参的含义与 :class:`Mock` 的相同。" + +#: ../../library/unittest.mock.rst:2062 +msgid "" +"If you use the *spec* or *spec_set* arguments then *only* magic methods that" +" exist in the spec will be created." +msgstr "如果你使用了 *spec* 或 *spec_set* 参数则将 *只有* 存在于 spec 中的魔术方法会被创建。" + +#: ../../library/unittest.mock.rst:2068 +msgid "A non-callable version of :class:`MagicMock`." +msgstr ":class:`MagicMock` 的不可调用对象版本。" + +#: ../../library/unittest.mock.rst:2070 +msgid "" +"The constructor parameters have the same meaning as for :class:`MagicMock`, " +"with the exception of *return_value* and *side_effect* which have no meaning" +" on a non-callable mock." +msgstr "" +"其构造器的形参具有与 :class:`MagicMock` 相同的含义,区别在于 *return_value* 和 *side_effect* " +"在不可调用的 mock 上没有意义。" + +#: ../../library/unittest.mock.rst:2074 +msgid "" +"The magic methods are setup with :class:`MagicMock` objects, so you can " +"configure them and use them in the usual way:" +msgstr "魔术方法是通过 :class:`MagicMock` 对象来设置的,因此你可以用通常的方式来配置它们并使用它们:" + +#: ../../library/unittest.mock.rst:2084 +msgid "" +"By default many of the protocol methods are required to return objects of a " +"specific type. These methods are preconfigured with a default return value, " +"so that they can be used without you having to do anything if you aren't " +"interested in the return value. You can still *set* the return value " +"manually if you want to change the default." +msgstr "" +"在默认情况下许多协议方法都需要返回特定类型的对象。 这些方法都预先配置了默认的返回值,以便它们在你对返回值不感兴趣时可以不做任何事就能被使用。 " +"如果你想要修改默认值则你仍然可以手动 *设置* 返回值。" + +#: ../../library/unittest.mock.rst:2090 +msgid "Methods and their defaults:" +msgstr "方法及其默认返回值:" + +#: ../../library/unittest.mock.rst:2092 +msgid "``__lt__``: ``NotImplemented``" +msgstr "``__lt__``: ``NotImplemented``" + +#: ../../library/unittest.mock.rst:2093 +msgid "``__gt__``: ``NotImplemented``" +msgstr "``__gt__``: ``NotImplemented``" + +#: ../../library/unittest.mock.rst:2094 +msgid "``__le__``: ``NotImplemented``" +msgstr "``__le__``: ``NotImplemented``" + +#: ../../library/unittest.mock.rst:2095 +msgid "``__ge__``: ``NotImplemented``" +msgstr "``__ge__``: ``NotImplemented``" + +#: ../../library/unittest.mock.rst:2096 +msgid "``__int__``: ``1``" +msgstr "``__int__``: ``1``" + +#: ../../library/unittest.mock.rst:2097 +msgid "``__contains__``: ``False``" +msgstr "``__contains__``: ``False``" + +#: ../../library/unittest.mock.rst:2098 +msgid "``__len__``: ``0``" +msgstr "``__len__``: ``0``" + +#: ../../library/unittest.mock.rst:2099 +msgid "``__iter__``: ``iter([])``" +msgstr "``__iter__``: ``iter([])``" + +#: ../../library/unittest.mock.rst:2100 +msgid "``__exit__``: ``False``" +msgstr "``__exit__``: ``False``" + +#: ../../library/unittest.mock.rst:2101 +msgid "``__aexit__``: ``False``" +msgstr "``__aexit__``: ``False``" + +#: ../../library/unittest.mock.rst:2102 +msgid "``__complex__``: ``1j``" +msgstr "``__complex__``: ``1j``" + +#: ../../library/unittest.mock.rst:2103 +msgid "``__float__``: ``1.0``" +msgstr "``__float__``: ``1.0``" + +#: ../../library/unittest.mock.rst:2104 +msgid "``__bool__``: ``True``" +msgstr "``__bool__``: ``True``" + +#: ../../library/unittest.mock.rst:2105 +msgid "``__index__``: ``1``" +msgstr "``__index__``: ``1``" + +#: ../../library/unittest.mock.rst:2106 +msgid "``__hash__``: default hash for the mock" +msgstr "``__hash__``: mock 的默认 hash" + +#: ../../library/unittest.mock.rst:2107 +msgid "``__str__``: default str for the mock" +msgstr "``__str__``: mock 的默认 str" + +#: ../../library/unittest.mock.rst:2108 +msgid "``__sizeof__``: default sizeof for the mock" +msgstr "``__sizeof__``: mock 的默认 sizeof" + +#: ../../library/unittest.mock.rst:2110 +msgid "For example:" +msgstr "例如:" + +#: ../../library/unittest.mock.rst:2122 +msgid "" +"The two equality methods, :meth:`__eq__` and :meth:`__ne__`, are special. " +"They do the default equality comparison on identity, using the " +":attr:`~Mock.side_effect` attribute, unless you change their return value to" +" return something else::" +msgstr "" +"两个相等性方法 :meth:`__eq__` 和 :meth:`__ne__` 是特殊的。 它们基于标识号进行默认的相等性比较,使用 " +":attr:`~Mock.side_effect` 属性,除非你修改它们的返回值以返回其他内容::" + +#: ../../library/unittest.mock.rst:2136 +msgid "" +"The return value of :meth:`MagicMock.__iter__` can be any iterable object " +"and isn't required to be an iterator:" +msgstr ":meth:`MagicMock.__iter__` 的返回值可以是任意可迭代对象而不要求必须是迭代器:" + +#: ../../library/unittest.mock.rst:2146 +msgid "" +"If the return value *is* an iterator, then iterating over it once will " +"consume it and subsequent iterations will result in an empty list:" +msgstr "如果返回值 *是* 迭代器,则对其执行一次迭代就会将它耗尽因而后续执行的迭代将会输出空列表:" + +#: ../../library/unittest.mock.rst:2155 +msgid "" +"``MagicMock`` has all of the supported magic methods configured except for " +"some of the obscure and obsolete ones. You can still set these up if you " +"want." +msgstr "``MagicMock`` 已配置了所有受支持的魔术方法,只有某些晦涩和过时的魔术方法是例外。 如果你需要仍然可以设置它们。" + +#: ../../library/unittest.mock.rst:2158 +msgid "" +"Magic methods that are supported but not setup by default in ``MagicMock`` " +"are:" +msgstr "在 ``MagicMock`` 中受到支持但默认未被设置的魔术方法有:" + +#: ../../library/unittest.mock.rst:2160 +msgid "``__subclasses__``" +msgstr "``__subclasses__``" + +#: ../../library/unittest.mock.rst:2161 +msgid "``__dir__``" +msgstr "``__dir__``" + +#: ../../library/unittest.mock.rst:2162 +msgid "``__format__``" +msgstr "``__format__``" + +#: ../../library/unittest.mock.rst:2163 +msgid "``__get__``, ``__set__`` and ``__delete__``" +msgstr "``__get__``, ``__set__`` 和 ``__delete__``" + +#: ../../library/unittest.mock.rst:2164 +msgid "``__reversed__`` and ``__missing__``" +msgstr "``__reversed__`` 和 ``__missing__``" + +#: ../../library/unittest.mock.rst:2165 +msgid "" +"``__reduce__``, ``__reduce_ex__``, ``__getinitargs__``, ``__getnewargs__``, " +"``__getstate__`` and ``__setstate__``" +msgstr "" +"``__reduce__``, ``__reduce_ex__``, ``__getinitargs__``, ``__getnewargs__``, " +"``__getstate__`` 和 ``__setstate__``" + +#: ../../library/unittest.mock.rst:2167 +msgid "``__getformat__`` and ``__setformat__``" +msgstr "``__getformat__`` 和 ``__setformat__``" + +#: ../../library/unittest.mock.rst:2171 +msgid "" +"Magic methods *should* be looked up on the class rather than the instance. " +"Different versions of Python are inconsistent about applying this rule. The " +"supported protocol methods should work with all supported versions of " +"Python." +msgstr "" +"魔术方法 *应当* 是在类中而不是在实例中查找。 不同的 Python 版本对这个规则的应用并不一致。 受支持的协议方法应当适用于所有受支持的 " +"Python 版本。" + +#: ../../library/unittest.mock.rst:2175 +msgid "" +"The function is basically hooked up to the class, but each ``Mock`` instance" +" is kept isolated from the others." +msgstr "该函数基本上是与类挂钩的,但每个 ``Mock`` 实例都会与其他实例保持隔离。" + +#: ../../library/unittest.mock.rst:2180 +msgid "Helpers" +msgstr "辅助对象" + +#: ../../library/unittest.mock.rst:2183 +msgid "sentinel" +msgstr "sentinel" + +#: ../../library/unittest.mock.rst:2187 +msgid "" +"The ``sentinel`` object provides a convenient way of providing unique " +"objects for your tests." +msgstr "``sentinel`` 对象提供了一种为你的测试提供独特对象的便捷方式。" + +#: ../../library/unittest.mock.rst:2190 +msgid "" +"Attributes are created on demand when you access them by name. Accessing the" +" same attribute will always return the same object. The objects returned " +"have a sensible repr so that test failure messages are readable." +msgstr "" +"属性是在你通过名称访问它们时按需创建的。 访问相同的属性将始终返回相同的对象。 返回的对象会有一个合理的 repr 以使测试失败消息易于理解。" + +#: ../../library/unittest.mock.rst:2194 +msgid "" +"The ``sentinel`` attributes now preserve their identity when they are " +":mod:`copied ` or :mod:`pickled `." +msgstr "" +"现在 ``sentinel`` 属性会在它们被 :mod:`copy ` 或 :mod:`pickle ` 时保存其标识。" + +#: ../../library/unittest.mock.rst:2198 +msgid "" +"Sometimes when testing you need to test that a specific object is passed as " +"an argument to another method, or returned. It can be common to create named" +" sentinel objects to test this. :data:`sentinel` provides a convenient way " +"of creating and testing the identity of objects like this." +msgstr "" +"在测试时你可能需要测试是否有一个特定的对象作为参数被传给了另一个方法,或是被其返回。 通常的做法是创建一个指定名称的 sentinel " +"对象来执行这种测试。 :data:`sentinel` 提供了一种创建和测试此类对象的标识的便捷方式。" + +#: ../../library/unittest.mock.rst:2203 +msgid "" +"In this example we monkey patch ``method`` to return " +"``sentinel.some_object``:" +msgstr "在这个示例中我们为 ``method`` 打上便捷补丁以返回 ``sentinel.some_object``:" + +#: ../../library/unittest.mock.rst:2215 +msgid "DEFAULT" +msgstr "DEFAULT" + +#: ../../library/unittest.mock.rst:2220 +msgid "" +"The :data:`DEFAULT` object is a pre-created sentinel (actually " +"``sentinel.DEFAULT``). It can be used by :attr:`~Mock.side_effect` functions" +" to indicate that the normal return value should be used." +msgstr "" +":data:`DEFAULT` 对象是一个预先创建的 sentinel (实际为 ``sentinel.DEFAULT``)。 它可被 " +":attr:`~Mock.side_effect` 函数用来指明其应当使用正常的返回值。" + +#: ../../library/unittest.mock.rst:2226 +msgid "call" +msgstr "call" + +#: ../../library/unittest.mock.rst:2230 +msgid "" +":func:`call` is a helper object for making simpler assertions, for comparing" +" with :attr:`~Mock.call_args`, :attr:`~Mock.call_args_list`, " +":attr:`~Mock.mock_calls` and :attr:`~Mock.method_calls`. :func:`call` can " +"also be used with :meth:`~Mock.assert_has_calls`." +msgstr "" +":func:`call` 是一个可创建更简单断言的辅助对象,用于同 :attr:`~Mock.call_args`, " +":attr:`~Mock.call_args_list`, :attr:`~Mock.mock_calls` 和 " +":attr:`~Mock.method_calls` 进行比较。 :func:`call` 也可配合 " +":meth:`~Mock.assert_has_calls` 使用。" + +#: ../../library/unittest.mock.rst:2243 +msgid "" +"For a call object that represents multiple calls, :meth:`call_list` returns " +"a list of all the intermediate calls as well as the final call." +msgstr "对于代表多个调用的 call 对象,:meth:`call_list` 将返回一个包含所有中间调用以及最终调用的列表。" + +#: ../../library/unittest.mock.rst:2247 +msgid "" +"``call_list`` is particularly useful for making assertions on \"chained " +"calls\". A chained call is multiple calls on a single line of code. This " +"results in multiple entries in :attr:`~Mock.mock_calls` on a mock. Manually " +"constructing the sequence of calls can be tedious." +msgstr "" +"``call_list`` 特别适用于创建针对“链式调用”的断言。 链式调用是指在一行代码中执行的多个调用。 这将使得一个 mock 的中存在多个条目 " +":attr:`~Mock.mock_calls`。 手动构造调用的序列将会很烦琐。" + +#: ../../library/unittest.mock.rst:2252 +msgid "" +":meth:`~call.call_list` can construct the sequence of calls from the same " +"chained call:" +msgstr ":meth:`~call.call_list` 可以根据同一个链式调用构造包含多个调用的序列:" + +#: ../../library/unittest.mock.rst:2269 +msgid "" +"A ``call`` object is either a tuple of (positional args, keyword args) or " +"(name, positional args, keyword args) depending on how it was constructed. " +"When you construct them yourself this isn't particularly interesting, but " +"the ``call`` objects that are in the :attr:`Mock.call_args`, " +":attr:`Mock.call_args_list` and :attr:`Mock.mock_calls` attributes can be " +"introspected to get at the individual arguments they contain." +msgstr "" +"根据构造方式的不同,``call`` 对象可以是一个 (位置参数, 关键字参数) 或 (名称, 位置参数, 关键字参数) 元组。 " +"当你自行构造它们时这没有什么关系,但是 :attr:`Mock.call_args`, :attr:`Mock.call_args_list` 和 " +":attr:`Mock.mock_calls` 属性当中的 ``call`` 对象可以被反查以获取它们所包含的单个参数。" + +#: ../../library/unittest.mock.rst:2276 +msgid "" +"The ``call`` objects in :attr:`Mock.call_args` and " +":attr:`Mock.call_args_list` are two-tuples of (positional args, keyword " +"args) whereas the ``call`` objects in :attr:`Mock.mock_calls`, along with " +"ones you construct yourself, are three-tuples of (name, positional args, " +"keyword args)." +msgstr "" +":attr:`Mock.call_args` 和 :attr:`Mock.call_args_list` 中的 ``call`` 对象是 (位置参数, " +"关键字参数) 二元组而 :attr:`Mock.mock_calls` 中以及你自行构造的 ``call`` 对象则是 (名称, 位置参数, " +"关键字参数) 三元组。" + +#: ../../library/unittest.mock.rst:2281 +msgid "" +"You can use their \"tupleness\" to pull out the individual arguments for " +"more complex introspection and assertions. The positional arguments are a " +"tuple (an empty tuple if there are no positional arguments) and the keyword " +"arguments are a dictionary:" +msgstr "" +"你可以使用它们作为“元组”的特性来为更复杂的内省和断言功能获取单个参数。 位置参数是一个元组(如无位置参数则为空元组)而关键字参数是一个字典:" + +#: ../../library/unittest.mock.rst:2314 +msgid "create_autospec" +msgstr "create_autospec" + +#: ../../library/unittest.mock.rst:2318 +msgid "" +"Create a mock object using another object as a spec. Attributes on the mock " +"will use the corresponding attribute on the *spec* object as their spec." +msgstr "使用另一对象作为 spec 来创建 mock 对象。 mock 的属性将使用 *spec* 对象上的对应属性作为其 spec。" + +#: ../../library/unittest.mock.rst:2322 +msgid "" +"Functions or methods being mocked will have their arguments checked to " +"ensure that they are called with the correct signature." +msgstr "被模拟的函数或方法的参数将会被检查以确保它们是附带了正确的签名被调用的。" + +#: ../../library/unittest.mock.rst:2325 +msgid "" +"If *spec_set* is ``True`` then attempting to set attributes that don't exist" +" on the spec object will raise an :exc:`AttributeError`." +msgstr "" +"如果 *spec_set* 为 ``True`` 则尝试设置不存在于 spec 对象中的属性将引发 :exc:`AttributeError`。" + +#: ../../library/unittest.mock.rst:2328 +msgid "" +"If a class is used as a spec then the return value of the mock (the instance" +" of the class) will have the same spec. You can use a class as the spec for " +"an instance object by passing ``instance=True``. The returned mock will only" +" be callable if instances of the mock are callable." +msgstr "" +"如果将类用作 spec 则 mock(该类的实例)的返回值将为这个 spec。 你可以通过传入 ``instance=True`` " +"来将某个类用作一个实例对象的 spec。 被返回的 mock 将仅在该 mock 的实例为可调用对象时才会是可调用对象。" + +#: ../../library/unittest.mock.rst:2333 +msgid "" +":func:`create_autospec` also takes arbitrary keyword arguments that are " +"passed to the constructor of the created mock." +msgstr ":func:`create_autospec` 也接受被传入所创建 mock 的构造器的任意关键字参数。" + +#: ../../library/unittest.mock.rst:2336 +msgid "" +"See :ref:`auto-speccing` for examples of how to use auto-speccing with " +":func:`create_autospec` and the *autospec* argument to :func:`patch`." +msgstr "" +"请参阅 :ref:`auto-speccing` 来了解如何通过 :func:`create_autospec` 以及 :func:`patch` 的 " +"*autospec* 参数来自动设置 spec。" + +#: ../../library/unittest.mock.rst:2342 +msgid "" +":func:`create_autospec` now returns an :class:`AsyncMock` if the target is " +"an async function." +msgstr "如果目标为异步函数那么 :func:`create_autospec` 现在将返回一个 :class:`AsyncMock`。" + +#: ../../library/unittest.mock.rst:2347 +msgid "ANY" +msgstr "ANY" + +#: ../../library/unittest.mock.rst:2351 +msgid "" +"Sometimes you may need to make assertions about *some* of the arguments in a" +" call to mock, but either not care about some of the arguments or want to " +"pull them individually out of :attr:`~Mock.call_args` and make more complex " +"assertions on them." +msgstr "" +"有时你可能需要设置关于要模拟的调用中的 *某些* 参数的断言,但是又不想理会其他参数或者想要从 :attr:`~Mock.call_args` " +"中单独拿出它们并针对它们设置更复杂的断言。" + +#: ../../library/unittest.mock.rst:2356 +msgid "" +"To ignore certain arguments you can pass in objects that compare equal to " +"*everything*. Calls to :meth:`~Mock.assert_called_with` and " +":meth:`~Mock.assert_called_once_with` will then succeed no matter what was " +"passed in." +msgstr "" +"为了忽略某些参数你可以传入与 *任意对象* 相等的对象。 这样再调用 :meth:`~Mock.assert_called_with` 和 " +":meth:`~Mock.assert_called_once_with` 时无论传入什么参数都将执行成功。" + +#: ../../library/unittest.mock.rst:2365 +msgid "" +":data:`ANY` can also be used in comparisons with call lists like " +":attr:`~Mock.mock_calls`:" +msgstr ":data:`ANY` 也可被用在与 :attr:`~Mock.mock_calls` 这样的调用列表相比较的场合:" + +#: ../../library/unittest.mock.rst:2378 +msgid "FILTER_DIR" +msgstr "FILTER_DIR" + +#: ../../library/unittest.mock.rst:2382 +msgid "" +":data:`FILTER_DIR` is a module level variable that controls the way mock " +"objects respond to :func:`dir` (only for Python 2.6 or more recent). The " +"default is ``True``, which uses the filtering described below, to only show " +"useful members. If you dislike this filtering, or need to switch it off for " +"diagnostic purposes, then set ``mock.FILTER_DIR = False``." +msgstr "" +":data:`FILTER_DIR` 是一个控制 mock 对象响应 :func:`dir` 的方式的模块级变量(只适用于 Python 2.6 " +"之后的版本)。 默认值为 ``True``,这将使用下文描述的过滤操作,以便只显示有用的成员。 " +"如果你不想要这样的过滤,或是出于诊断目的需要将其关闭,则应设置 ``mock.FILTER_DIR = False``。" + +#: ../../library/unittest.mock.rst:2388 +msgid "" +"With filtering on, ``dir(some_mock)`` shows only useful attributes and will " +"include any dynamically created attributes that wouldn't normally be shown. " +"If the mock was created with a *spec* (or *autospec* of course) then all the" +" attributes from the original are shown, even if they haven't been accessed " +"yet:" +msgstr "" +"当启用过滤时,``dir(some_mock)`` 将只显示有用的属性并将包括正常情况下不会被显示的任何动态创建的属性。 如果 mock 是使用 " +"*spec* (当然也可以是 *autospec*) 创建的则原有的所有属性都将被显示,即使它们还未被访问过:" + +#: ../../library/unittest.mock.rst:2415 +msgid "" +"Many of the not-very-useful (private to :class:`Mock` rather than the thing " +"being mocked) underscore and double underscore prefixed attributes have been" +" filtered from the result of calling :func:`dir` on a :class:`Mock`. If you " +"dislike this behaviour you can switch it off by setting the module level " +"switch :data:`FILTER_DIR`:" +msgstr "" +"许多不太有用的(是 :class:`Mock` 的而不是被模拟对象的私有成员)开头带有下划线和双下划线的属性已从在 :class:`Mock` 上对 " +":func:`dir` 的调用的结果中被过滤。 如果你不喜欢此行为你可以通过设置模块级开关 :data:`FILTER_DIR` 来将其关闭:" + +#: ../../library/unittest.mock.rst:2436 +msgid "" +"Alternatively you can just use ``vars(my_mock)`` (instance members) and " +"``dir(type(my_mock))`` (type members) to bypass the filtering irrespective " +"of :data:`mock.FILTER_DIR`." +msgstr "" +"或者你也可以直接使用 ``vars(my_mock)`` (实例成员) 和 ``dir(type(my_mock))`` (类型成员) 来忽略 " +":data:`mock.FILTER_DIR` 设置绕过过滤。" + +#: ../../library/unittest.mock.rst:2442 +msgid "mock_open" +msgstr "mock_open" + +#: ../../library/unittest.mock.rst:2446 +msgid "" +"A helper function to create a mock to replace the use of :func:`open`. It " +"works for :func:`open` called directly or used as a context manager." +msgstr "" +"创建 mock 来代替使用 :func:`open` 的辅助函数。 它对于 :func:`open` 被直接调用或被用作上下文管理器的情况都适用。" + +#: ../../library/unittest.mock.rst:2449 +msgid "" +"The *mock* argument is the mock object to configure. If ``None`` (the " +"default) then a :class:`MagicMock` will be created for you, with the API " +"limited to methods or attributes available on standard file handles." +msgstr "" +"*mock* 参数是要配置的 mock 对象。 如为 ``None`` (默认值) 则将为你创建一个 :class:`MagicMock`,其 API " +"会被限制为可用于标准文件处理的方法或属性。" + +#: ../../library/unittest.mock.rst:2453 +msgid "" +"*read_data* is a string for the :meth:`~io.IOBase.read`, " +":meth:`~io.IOBase.readline`, and :meth:`~io.IOBase.readlines` methods of the" +" file handle to return. Calls to those methods will take data from " +"*read_data* until it is depleted. The mock of these methods is pretty " +"simplistic: every time the *mock* is called, the *read_data* is rewound to " +"the start. If you need more control over the data that you are feeding to " +"the tested code you will need to customize this mock for yourself. When " +"that is insufficient, one of the in-memory filesystem packages on `PyPI " +"`_ can offer a realistic filesystem for testing." +msgstr "" +"*read_data* 是供文件处理的 :meth:`~io.IOBase.read`, :meth:`~io.IOBase.readline` 和 " +":meth:`~io.IOBase.readlines` 方法返回的字符串。 调用这些方法将会从 *read_data* 获取数据直到它被耗尽。 " +"对这些方法的模拟是相当简化的:每次 *mock* 被调用时,*read_data* 都将从头开始。 " +"如果你需要对你提供给测试代码的数据有更多控制那么你将需要自行定制这个 mock。 如果这还不够用,那么通过一些 `PyPI " +"`_ 上的内存文件系统包可以提供更真实的测试文件系统。" + +#: ../../library/unittest.mock.rst:2463 +msgid "" +"Added :meth:`~io.IOBase.readline` and :meth:`~io.IOBase.readlines` support. " +"The mock of :meth:`~io.IOBase.read` changed to consume *read_data* rather " +"than returning it on each call." +msgstr "" +"增加了对 :meth:`~io.IOBase.readline` 和 :meth:`~io.IOBase.readlines` 的支持。 对 " +":meth:`~io.IOBase.read` 的模拟被改为消耗 *read_data* 而不是每次调用时返回它。" + +#: ../../library/unittest.mock.rst:2468 +msgid "*read_data* is now reset on each call to the *mock*." +msgstr "*read_data* 现在会在每次 *mock* 的调用时重置。" + +#: ../../library/unittest.mock.rst:2471 +msgid "" +"Added :meth:`__iter__` to implementation so that iteration (such as in for " +"loops) correctly consumes *read_data*." +msgstr "为实现增加了 :meth:`__iter__` 以使迭代操作(例如在 for 循环中)能正确地消耗 *read_data*。" + +#: ../../library/unittest.mock.rst:2475 +msgid "" +"Using :func:`open` as a context manager is a great way to ensure your file " +"handles are closed properly and is becoming common::" +msgstr "将 :func:`open` 用作上下文管理器一确保你的文件处理被正确关闭的最佳方式因而十分常用::" + +#: ../../library/unittest.mock.rst:2481 +msgid "" +"The issue is that even if you mock out the call to :func:`open` it is the " +"*returned object* that is used as a context manager (and has " +":meth:`__enter__` and :meth:`__exit__` called)." +msgstr "" +"这里的问题在于即使你模拟了对 :func:`open` 的调用但被用作上下文管理器(并调用其 :meth:`__enter__` 和 " +":meth:`__exit__` 方法)的也是 *被返回的对象*。" + +#: ../../library/unittest.mock.rst:2485 +msgid "" +"Mocking context managers with a :class:`MagicMock` is common enough and " +"fiddly enough that a helper function is useful. ::" +msgstr "通过 :class:`MagicMock` 来模拟上下文管理器是十分常见且十分麻烦的因此需要使用一个辅助函数。 ::" + +#: ../../library/unittest.mock.rst:2502 +msgid "And for reading files::" +msgstr "以及针对读取文件::" + +#: ../../library/unittest.mock.rst:2515 +msgid "Autospeccing" +msgstr "自动 spec" + +#: ../../library/unittest.mock.rst:2517 +msgid "" +"Autospeccing is based on the existing :attr:`spec` feature of mock. It " +"limits the api of mocks to the api of an original object (the spec), but it " +"is recursive (implemented lazily) so that attributes of mocks only have the " +"same api as the attributes of the spec. In addition mocked functions / " +"methods have the same call signature as the original so they raise a " +":exc:`TypeError` if they are called incorrectly." +msgstr "" +"自动 spec 是基于现有 mock 的 :attr:`spec` 特性。 它将 mock 的 api 限制为原始对象 (spec) 的 " +"api,但它是递归(惰性实现)的因而 mock 的属性只有与 spec 的属性相同的 api。 除此之外被模块的函数 / " +"方法具有与原对应物相同的调用签名因此如果它们被不正确地调用时会引发 :exc:`TypeError`。" + +#: ../../library/unittest.mock.rst:2524 +msgid "Before I explain how auto-speccing works, here's why it is needed." +msgstr "在我开始解释自动 spec 如何运作之前,先说明一下它的必要性。" + +#: ../../library/unittest.mock.rst:2526 +msgid "" +":class:`Mock` is a very powerful and flexible object, but it suffers from " +"two flaws when used to mock out objects from a system under test. One of " +"these flaws is specific to the :class:`Mock` api and the other is a more " +"general problem with using mock objects." +msgstr "" +":class:`Mock` 是一个非常强大而灵活的对象,但当它被用来模拟来自被测试系统的对象时有两个缺陷。 其中一个缺陷是 :class:`Mock` " +"的 api 特有的而另一个则是使用 mock 对象时普遍存在的问题。" + +#: ../../library/unittest.mock.rst:2531 +msgid "" +"First the problem specific to :class:`Mock`. :class:`Mock` has two assert " +"methods that are extremely handy: :meth:`~Mock.assert_called_with` and " +":meth:`~Mock.assert_called_once_with`." +msgstr "" +"第一个问题为 :class:`Mock` 所专属。 :class:`Mock` 具有两个特别好用的断言方法: " +":meth:`~Mock.assert_called_with` 和 :meth:`~Mock.assert_called_once_with`。" + +#: ../../library/unittest.mock.rst:2544 +msgid "" +"Because mocks auto-create attributes on demand, and allow you to call them " +"with arbitrary arguments, if you misspell one of these assert methods then " +"your assertion is gone:" +msgstr "因为 mock 会根据需要自动创建属性,并允许你附带任意参数调用它们,所以如果你写错了这两个断言方法则你的断言将会失效:" + +#: ../../library/unittest.mock.rst:2554 +msgid "Your tests can pass silently and incorrectly because of the typo." +msgstr "你的测试将因这个拼写错误而静默并且错误地通过。" + +#: ../../library/unittest.mock.rst:2556 +msgid "" +"The second issue is more general to mocking. If you refactor some of your " +"code, rename members and so on, any tests for code that is still using the " +"*old api* but uses mocks instead of the real objects will still pass. This " +"means your tests can all pass even though your code is broken." +msgstr "" +"第二个问题是 mock 操作中普遍存在的。 如果你重构了你的部分代码,例如修改了一些成员的名称等等,则代码中任何仍在使用 *旧 api* 但其使用的是 " +"mock 而非真实对象的测试仍将通过。 这意味着即使你的代码已被破坏你的测试却仍可能全部通过。" + +#: ../../library/unittest.mock.rst:2561 +msgid "" +"Note that this is another reason why you need integration tests as well as " +"unit tests. Testing everything in isolation is all fine and dandy, but if " +"you don't test how your units are \"wired together\" there is still lots of " +"room for bugs that tests might have caught." +msgstr "" +"请注意这是为什么你在单元测试之外还需要集成测试的原因之一。 " +"孤立地测试每个部分时全都正常而顺滑,但是如果你没有测试你的各个单元“联成一体”的情况如何那么就仍然存在测试可以发现大量错误的空间。" + +#: ../../library/unittest.mock.rst:2566 +msgid "" +":mod:`mock` already provides a feature to help with this, called speccing. " +"If you use a class or instance as the :attr:`spec` for a mock then you can " +"only access attributes on the mock that exist on the real class:" +msgstr "" +":mod:`mock` 已经提供了一个对此有帮助的特性,称为 spec 控制。 如果你使用类或实例作为一个 mock 的 :attr:`spec` " +"那么你将仅能访问 mock 中只存在于实际的类中的属性。" + +#: ../../library/unittest.mock.rst:2577 +msgid "" +"The spec only applies to the mock itself, so we still have the same issue " +"with any methods on the mock:" +msgstr "这个 spec 仅会应用于 mock 本身,因此对于 mock 中的任意方法我们仍然面临相同的问题:" + +#: ../../library/unittest.mock.rst:2586 +msgid "" +"Auto-speccing solves this problem. You can either pass ``autospec=True`` to " +":func:`patch` / :func:`patch.object` or use the :func:`create_autospec` " +"function to create a mock with a spec. If you use the ``autospec=True`` " +"argument to :func:`patch` then the object that is being replaced will be " +"used as the spec object. Because the speccing is done \"lazily\" (the spec " +"is created as attributes on the mock are accessed) you can use it with very " +"complex or deeply nested objects (like modules that import modules that " +"import modules) without a big performance hit." +msgstr "" +"自动 spec 解决了这个问题。 你可以将 ``autospec=True`` 传给 :func:`patch` / " +":func:`patch.object` 或是使用 :func:`create_autospec` 函数来创建带有 spec 的 mock。 如果你是将" +" ``autospec=True`` 参数传给 :func:`patch` 那么被替代的那个对象将被用作 spec 对象。 因为 spec " +"控制是“惰性地”执行的(spec 在 mock " +"中的属性被访问时才会被创建)所以即使是非常复杂或深度嵌套的对象(例如需要导入本身已导入了多个模块的模块)你也可以使用它而不会有太大的性能损失。" + +#: ../../library/unittest.mock.rst:2595 +msgid "Here's an example of it in use::" +msgstr "以下是一个实际应用的示例::" + +#: ../../library/unittest.mock.rst:2605 +msgid "" +"You can see that :class:`request.Request` has a spec. " +":class:`request.Request` takes two arguments in the constructor (one of " +"which is *self*). Here's what happens if we try to call it incorrectly::" +msgstr "" +"你可以看到 :class:`request.Request` 有一个 spec。 :class:`request.Request` 的构造器接受两个参数" +" (其中一个是 *self*)。 如果我们尝试不正确地调用它则将导致::" + +#: ../../library/unittest.mock.rst:2614 +msgid "" +"The spec also applies to instantiated classes (i.e. the return value of " +"specced mocks)::" +msgstr "该 spec 也将应用于被实例化的类(即附带i.e. the return value of spec 的 mock 的返回值)::" + +#: ../../library/unittest.mock.rst:2621 +msgid "" +":class:`Request` objects are not callable, so the return value of " +"instantiating our mocked out :class:`request.Request` is a non-callable " +"mock. With the spec in place any typos in our asserts will raise the correct" +" error::" +msgstr "" +":class:`Request` 对象是不可调用对象,因此实例化我们的被模拟 :class:`request.Request` 的返回值是一个不可调用的" +" mock。 有了这个 spec 我们的断言中出现任何拼写问题都将引发正确的错误::" + +#: ../../library/unittest.mock.rst:2633 +msgid "" +"In many cases you will just be able to add ``autospec=True`` to your " +"existing :func:`patch` calls and then be protected against bugs due to typos" +" and api changes." +msgstr "" +"在许多情况下你将只需将In many cases you will just be able to add ``autospec=True`` " +"添加到你现有的 :func:`patch` 调用中即可防止拼写错误和 api 变化所导致的问题。" + +#: ../../library/unittest.mock.rst:2637 +msgid "" +"As well as using *autospec* through :func:`patch` there is a " +":func:`create_autospec` for creating autospecced mocks directly:" +msgstr "" +"除了通过 :func:`patch` 来使用 *autospec* 还有一个 :func:`create_autospec` 可以直接创建带有自动 " +"spec 的 mock:" + +#: ../../library/unittest.mock.rst:2645 +msgid "" +"This isn't without caveats and limitations however, which is why it is not " +"the default behaviour. In order to know what attributes are available on the" +" spec object, autospec has to introspect (access attributes) the spec. As " +"you traverse attributes on the mock a corresponding traversal of the " +"original object is happening under the hood. If any of your specced objects " +"have properties or descriptors that can trigger code execution then you may " +"not be able to use autospec. On the other hand it is much better to design " +"your objects so that introspection is safe [#]_." +msgstr "" +"不过这并非没有缺点和限制,这也就是为什么它不是默认行为。 为了知道在 spec 对象上有哪些属性是可用的,autospec 必须对 spec " +"进行自省(访问其属性)。 当你遍历 mock 上的属性时在原始对象上的对应遍历也将在底层进行。 如果你的任何带 spec " +"的对象具有可触发代码执行的特征属性或描述器则你可能会无法使用 autospec。 在另一方面更好的的做法是将你的对象设计为可以安全地执行自省 [#]_。" + +#: ../../library/unittest.mock.rst:2654 +msgid "" +"A more serious problem is that it is common for instance attributes to be " +"created in the :meth:`__init__` method and not to exist on the class at all." +" *autospec* can't know about any dynamically created attributes and " +"restricts the api to visible attributes. ::" +msgstr "" +"一个更严重的问题在于实例属性往往是在 :meth:`__init__` 方法中被创建而在类中完全不存在。 *autospec* " +"无法获取动态创建的属性而使得 api 被限制于可见的属性。 ::" + +#: ../../library/unittest.mock.rst:2671 +msgid "" +"There are a few different ways of resolving this problem. The easiest, but " +"not necessarily the least annoying, way is to simply set the required " +"attributes on the mock after creation. Just because *autospec* doesn't allow" +" you to fetch attributes that don't exist on the spec it doesn't prevent you" +" setting them::" +msgstr "" +"要解决这个问题有几种不同的方式。 最容易但多少有些烦扰的方式是简单地在 mock 创建完成后再设置所需的属性。 Just because " +"*autospec* 只是不允许你获取不存在于 spec 上的属性但并不会阻止你设置它们::" + +#: ../../library/unittest.mock.rst:2682 +msgid "" +"There is a more aggressive version of both *spec* and *autospec* that *does*" +" prevent you setting non-existent attributes. This is useful if you want to " +"ensure your code only *sets* valid attributes too, but obviously it prevents" +" this particular scenario:" +msgstr "" +"*spec* 和 *autospec* 都有更严格的版本 *确实能* 阻止你设置不存在的属性。 这在你希望确保你的代码只能 *设置* " +"有效的属性时也很有用,但显然它会阻止下面这个特定的应用场景:" + +#: ../../library/unittest.mock.rst:2695 +msgid "" +"Probably the best way of solving the problem is to add class attributes as " +"default values for instance members initialised in :meth:`__init__`. Note " +"that if you are only setting default attributes in :meth:`__init__` then " +"providing them via class attributes (shared between instances of course) is " +"faster too. e.g." +msgstr "" +"解决此问题的最好方式可能是添加类属性作为在 :meth:`__init__` 中初始化的实例属性的默认值。 请注意如果你只在 " +":meth:`__init__` 中设置默认属性那么通过类属性来提供它们(当然会在实例之间共享)也将有更快的速度。 例如" + +#: ../../library/unittest.mock.rst:2705 +msgid "" +"This brings up another issue. It is relatively common to provide a default " +"value of ``None`` for members that will later be an object of a different " +"type. ``None`` would be useless as a spec because it wouldn't let you access" +" *any* attributes or methods on it. As ``None`` is *never* going to be " +"useful as a spec, and probably indicates a member that will normally of some" +" other type, autospec doesn't use a spec for members that are set to " +"``None``. These will just be ordinary mocks (well - MagicMocks):" +msgstr "" +"这带来了另一个问题。 为今后将变为不同类型对象的那些成员提供默认值 ``None`` 是比较常见的做法。 ``None`` 作为 spec " +"是没有用处的,因为它会使你无法访问 *any* 任何属性或方法。 由于 ``None`` 作为 spec 将 *永远不会* " +"有任何用处,并且有可能要指定某个通常为其他类型的成员,因此 autospec 不会为被设为 ``None`` 的成员使用 spec。 它们将为普通的 " +"mock (嗯 —— 应为 MagicMocks):" + +#: ../../library/unittest.mock.rst:2720 +msgid "" +"If modifying your production classes to add defaults isn't to your liking " +"then there are more options. One of these is simply to use an instance as " +"the spec rather than the class. The other is to create a subclass of the " +"production class and add the defaults to the subclass without affecting the " +"production class. Both of these require you to use an alternative object as " +"the spec. Thankfully :func:`patch` supports this - you can simply pass the " +"alternative object as the *autospec* argument::" +msgstr "" +"如果你不喜欢修改你的生产类来添加默认值那么还有其他的选项。 其中之一是简单地使用一个实例而非类作为 spec。 " +"另一选项则是创建一个生产类的子类并向该子类添加默认值而不影响到生产类。 这两个选项都需要你使用一个替代对象作为 spec。 值得庆幸的是 " +":func:`patch` 支持这样做 —— 你可以简单地传入替代对象作为 *autospec* 参数::" + +#: ../../library/unittest.mock.rst:2741 +msgid "" +"This only applies to classes or already instantiated objects. Calling a " +"mocked class to create a mock instance *does not* create a real instance. It" +" is only attribute lookups - along with calls to :func:`dir` - that are " +"done." +msgstr "" +"这仅适用于类或已实例化的对象。 调用一个被模拟的类来创建一个 mock 实例 *不会* 创建真的实例。 只有属性查找 —— 以及对 " +":func:`dir` 的调用 —— 会被执行。" + +#: ../../library/unittest.mock.rst:2746 +msgid "Sealing mocks" +msgstr "将 mock 封包" + +#: ../../library/unittest.mock.rst:2755 +msgid "" +"Seal will disable the automatic creation of mocks when accessing an " +"attribute of the mock being sealed or any of its attributes that are already" +" mocks recursively." +msgstr "封包将在访问被封包的 mock 的属性或其任何已经被递归地模拟的属性时禁止自动创建 mock。" + +#: ../../library/unittest.mock.rst:2758 +msgid "" +"If a mock instance with a name or a spec is assigned to an attribute it " +"won't be considered in the sealing chain. This allows one to prevent seal " +"from fixing part of the mock object. ::" +msgstr "" +"如果一个带有名称或 spec 的 mock 实例被分配给一个属性则将不会在封包链中处理它。 这可以防止人们对 mock 对象的固定部分执行封包。 ::" diff --git a/library/unittest.po b/library/unittest.po new file mode 100644 index 000000000..51b25d514 --- /dev/null +++ b/library/unittest.po @@ -0,0 +1,3421 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) 2001-2025, Python Software Foundation +# This file is distributed under the same license as the Python package. +# FIRST AUTHOR , YEAR. +# +# Translators: +# Jann , 2019 +# Jack Wu , 2019 +# Xiao Xu , 2019 +# dogn he , 2019 +# Makdon , 2019 +# ChenYuan , 2019 +# ppcfish , 2019 +# KaMingChung , 2020 +# helloworldSB , 2021 +# Xu Siyuan, 2021 +# Justin Chu , 2021 +# Alpha Du , 2021 +# Freesand Leo , 2024 +# Rafael Fontenelle , 2025 +# +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: Python 3.9\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2025-02-07 16:40+0000\n" +"PO-Revision-Date: 2017-02-16 23:33+0000\n" +"Last-Translator: Rafael Fontenelle , 2025\n" +"Language-Team: Chinese (China) (https://app.transifex.com/python-doc/teams/5390/zh_CN/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: zh_CN\n" +"Plural-Forms: nplurals=1; plural=0;\n" + +#: ../../library/unittest.rst:2 +msgid ":mod:`unittest` --- Unit testing framework" +msgstr ":mod:`unittest` --- 单元测试框架" + +#: ../../library/unittest.rst:12 +msgid "**Source code:** :source:`Lib/unittest/__init__.py`" +msgstr "**源代码:** :source:`Lib/unittest/__init__.py`" + +#: ../../library/unittest.rst:16 +msgid "" +"(If you are already familiar with the basic concepts of testing, you might " +"want to skip to :ref:`the list of assert methods `.)" +msgstr "(如果你已经对测试的概念比较熟悉了,你可能想直接跳转到这一部分 :ref:`断言方法`。)" + +#: ../../library/unittest.rst:19 +msgid "" +"The :mod:`unittest` unit testing framework was originally inspired by JUnit " +"and has a similar flavor as major unit testing frameworks in other " +"languages. It supports test automation, sharing of setup and shutdown code " +"for tests, aggregation of tests into collections, and independence of the " +"tests from the reporting framework." +msgstr "" +":mod:`unittest` 单元测试框架是受到 JUnit " +"的启发,与其他语言中的主流单元测试框架有着相似的风格。其支持测试自动化,配置共享和关机代码测试。支持将测试样例聚合到测试集中,并将测试与报告框架独立。" + +#: ../../library/unittest.rst:25 +msgid "" +"To achieve this, :mod:`unittest` supports some important concepts in an " +"object-oriented way:" +msgstr "为了实现这些,:mod:`unittest` 通过面向对象的方式支持了一些重要的概念。" + +#: ../../library/unittest.rst:32 +msgid "test fixture" +msgstr "测试脚手架" + +#: ../../library/unittest.rst:29 +msgid "" +"A :dfn:`test fixture` represents the preparation needed to perform one or " +"more tests, and any associated cleanup actions. This may involve, for " +"example, creating temporary or proxy databases, directories, or starting a " +"server process." +msgstr "" +":dfn:`test fixture` " +"表示为了开展一项或多项测试所需要进行的准备工作,以及所有相关的清理操作。举个例子,这可能包含创建临时或代理的数据库、目录,再或者启动一个服务器进程。" + +#: ../../library/unittest.rst:37 +msgid "test case" +msgstr "测试用例" + +#: ../../library/unittest.rst:35 +msgid "" +"A :dfn:`test case` is the individual unit of testing. It checks for a " +"specific response to a particular set of inputs. :mod:`unittest` provides a" +" base class, :class:`TestCase`, which may be used to create new test cases." +msgstr "" +"一个测试用例是一个独立的测试单元。它检查输入特定的数据时的响应。 :mod:`unittest` 提供一个基类: :class:`TestCase` " +",用于新建测试用例。" + +#: ../../library/unittest.rst:41 +msgid "test suite" +msgstr "测试套件" + +#: ../../library/unittest.rst:40 +msgid "" +"A :dfn:`test suite` is a collection of test cases, test suites, or both. It" +" is used to aggregate tests that should be executed together." +msgstr ":dfn:`test suite` 是一系列的测试用例,或测试套件,或两者皆有。它用于归档需要一起执行的测试。" + +#: ../../library/unittest.rst:48 +msgid "test runner" +msgstr "测试运行器(test runner)" + +#: ../../library/unittest.rst:44 +msgid "" +"A :dfn:`test runner` is a component which orchestrates the execution of " +"tests and provides the outcome to the user. The runner may use a graphical " +"interface, a textual interface, or return a special value to indicate the " +"results of executing the tests." +msgstr "" +":dfn:`test runner` 是一个用于执行和输出测试结果的组件。这个运行器可能使用图形接口、文本接口,或返回一个特定的值表示运行测试的结果。" + +#: ../../library/unittest.rst:53 +msgid "Module :mod:`doctest`" +msgstr ":mod:`doctest` --- 文档测试模块" + +#: ../../library/unittest.rst:53 +msgid "Another test-support module with a very different flavor." +msgstr "另一个风格完全不同的测试模块。" + +#: ../../library/unittest.rst:57 +msgid "" +"`Simple Smalltalk Testing: With Patterns " +"`_" +msgstr "" +"`简单 Smalltalk 测试:便用模式 " +"`_" + +#: ../../library/unittest.rst:56 +msgid "" +"Kent Beck's original paper on testing frameworks using the pattern shared by" +" :mod:`unittest`." +msgstr "Kent Beck 有关使用 :mod:`unittest` 所共享的模式的测试框架的原创论文。" + +#: ../../library/unittest.rst:61 +msgid "`pytest `_" +msgstr "`pytest `_" + +#: ../../library/unittest.rst:60 +msgid "" +"Third-party unittest framework with a lighter-weight syntax for writing " +"tests. For example, ``assert func(10) == 42``." +msgstr "第三方单元测试框架,提供轻量化的语法来编写测试,例如:``assert func(10) == 42``。" + +#: ../../library/unittest.rst:65 +msgid "" +"`The Python Testing Tools Taxonomy " +"`_" +msgstr "" +"`Python 测试工具分类 `_" + +#: ../../library/unittest.rst:64 +msgid "" +"An extensive list of Python testing tools including functional testing " +"frameworks and mock object libraries." +msgstr "一个 Python 测试工具的详细列表,包含测试框架和模拟对象库。" + +#: ../../library/unittest.rst:69 +msgid "" +"`Testing in Python Mailing List `_" +msgstr "Python 中的测试 邮件列表" + +#: ../../library/unittest.rst:68 +msgid "" +"A special-interest-group for discussion of testing, and testing tools, in " +"Python." +msgstr "一个讨论 Python 中的测试和测试工具的特别兴趣小组。" + +#: ../../library/unittest.rst:71 +msgid "" +"The script :file:`Tools/unittestgui/unittestgui.py` in the Python source " +"distribution is a GUI tool for test discovery and execution. This is " +"intended largely for ease of use for those new to unit testing. For " +"production environments it is recommended that tests be driven by a " +"continuous integration system such as `Buildbot `_, " +"`Jenkins `_ or `Travis-CI `_, or" +" `AppVeyor `_." +msgstr "" +"随 Python 源代码分发的脚本 :file:`Tools/unittestgui/unittestgui.py` " +"是一个一个用于发现和执行测试的用户图形界面工具。这主要是为了方便新手使用单元测试制作的。在生产环境中,测试应由一个持续集成(CI)系统运行,如 " +"`Buildbot `_, `Jenkins `_ " +",`Travis-CI `_, 或 `AppVeyor " +"`_。" + +#: ../../library/unittest.rst:82 +msgid "Basic example" +msgstr "基本实例" + +#: ../../library/unittest.rst:84 +msgid "" +"The :mod:`unittest` module provides a rich set of tools for constructing and" +" running tests. This section demonstrates that a small subset of the tools " +"suffice to meet the needs of most users." +msgstr ":mod:`unittest` 模块提供了一系列创建和运行测试的工具。这一段落演示了这些工具的一小部分,但也足以满足大部分用户的需求。" + +#: ../../library/unittest.rst:88 +msgid "Here is a short script to test three string methods::" +msgstr "这是一段简短的代码,来测试三种字符串方法::" + +#: ../../library/unittest.rst:112 +msgid "" +"A testcase is created by subclassing :class:`unittest.TestCase`. The three " +"individual tests are defined with methods whose names start with the letters" +" ``test``. This naming convention informs the test runner about which " +"methods represent tests." +msgstr "" +"继承 :class:`unittest.TestCase` 就创建了一个测试样例。上述三个独立的测试是三个类的方法,这些方法的命名都以 ``test``" +" 开头。 这个命名约定告诉测试运行者类的哪些方法表示测试。" + +#: ../../library/unittest.rst:117 +msgid "" +"The crux of each test is a call to :meth:`~TestCase.assertEqual` to check " +"for an expected result; :meth:`~TestCase.assertTrue` or " +":meth:`~TestCase.assertFalse` to verify a condition; or " +":meth:`~TestCase.assertRaises` to verify that a specific exception gets " +"raised. These methods are used instead of the :keyword:`assert` statement " +"so the test runner can accumulate all test results and produce a report." +msgstr "" +"每个测试的关键是:调用 :meth:`~TestCase.assertEqual` 来检查预期的输出; 调用 " +":meth:`~TestCase.assertTrue` 或 :meth:`~TestCase.assertFalse` 来验证一个条件;调用 " +":meth:`~TestCase.assertRaises` 来验证抛出了一个特定的异常。使用这些方法而不是 :keyword:`assert` " +"语句是为了让测试运行者能聚合所有的测试结果并产生结果报告。" + +#: ../../library/unittest.rst:124 +msgid "" +"The :meth:`~TestCase.setUp` and :meth:`~TestCase.tearDown` methods allow you" +" to define instructions that will be executed before and after each test " +"method. They are covered in more detail in the section :ref:`organizing-" +"tests`." +msgstr "" +"通过 :meth:`~TestCase.setUp` 和 :meth:`~TestCase.tearDown` " +"方法,可以设置测试开始前与完成后需要执行的指令。 在 :ref:`organizing-tests` 中,对此有更为详细的描述。" + +#: ../../library/unittest.rst:128 +msgid "" +"The final block shows a simple way to run the tests. :func:`unittest.main` " +"provides a command-line interface to the test script. When run from the " +"command line, the above script produces an output that looks like this::" +msgstr "" +"最后的代码块中,演示了运行测试的一个简单的方法。 :func:`unittest.main` " +"提供了一个测试脚本的命令行接口。当在命令行运行该测试脚本,上文的脚本生成如以下格式的输出::" + +#: ../../library/unittest.rst:138 +msgid "" +"Passing the ``-v`` option to your test script will instruct " +":func:`unittest.main` to enable a higher level of verbosity, and produce the" +" following output::" +msgstr "在调用测试脚本时添加 ``-v`` 参数使 :func:`unittest.main` 显示更为详细的信息,生成如以下形式的输出::" + +#: ../../library/unittest.rst:150 +msgid "" +"The above examples show the most commonly used :mod:`unittest` features " +"which are sufficient to meet many everyday testing needs. The remainder of " +"the documentation explores the full feature set from first principles." +msgstr "以上例子演示了 :mod:`unittest` 中最常用的、足够满足许多日常测试需求的特性。文档的剩余部分详述该框架的完整特性。" + +#: ../../library/unittest.rst:158 +msgid "Command-Line Interface" +msgstr "命令行接口" + +#: ../../library/unittest.rst:160 +msgid "" +"The unittest module can be used from the command line to run tests from " +"modules, classes or even individual test methods::" +msgstr "unittest 模块可以通过命令行运行模块、类和独立测试方法的测试::" + +#: ../../library/unittest.rst:167 +msgid "" +"You can pass in a list with any combination of module names, and fully " +"qualified class or method names." +msgstr "你可以传入模块名、类或方法名或他们的任意组合。" + +#: ../../library/unittest.rst:170 +msgid "Test modules can be specified by file path as well::" +msgstr "同样的,测试模块可以通过文件路径指定::" + +#: ../../library/unittest.rst:174 +msgid "" +"This allows you to use the shell filename completion to specify the test " +"module. The file specified must still be importable as a module. The path is" +" converted to a module name by removing the '.py' and converting path " +"separators into '.'. If you want to execute a test file that isn't " +"importable as a module you should execute the file directly instead." +msgstr "" +"这样就可以使用 shell 的文件名补全指定测试模块。所指定的文件仍需要可以被作为模块导入。路径通过去除 '.py' 、把分隔符转换为 '.' " +"转换为模块名。若你需要执行不能被作为模块导入的测试文件,你需要直接执行该测试文件。" + +#: ../../library/unittest.rst:180 +msgid "" +"You can run tests with more detail (higher verbosity) by passing in the -v " +"flag::" +msgstr "在运行测试时,你可以通过添加 -v 参数获取更详细(更多的冗余)的信息。" + +#: ../../library/unittest.rst:184 +msgid "" +"When executed without arguments :ref:`unittest-test-discovery` is started::" +msgstr "当运行时不包含参数,开始 :ref:`unittest-test-discovery` ::" + +#: ../../library/unittest.rst:188 +msgid "For a list of all the command-line options::" +msgstr "用于获取命令行选项列表:" + +#: ../../library/unittest.rst:192 +msgid "" +"In earlier versions it was only possible to run individual test methods and " +"not modules or classes." +msgstr "在早期版本中,只支持运行独立的测试方法,而不支持模块和类。" + +#: ../../library/unittest.rst:198 +msgid "Command-line options" +msgstr "命令行选项" + +#: ../../library/unittest.rst:200 +msgid ":program:`unittest` supports these command-line options:" +msgstr " :program:`unittest` 支持以下命令行选项:" + +#: ../../library/unittest.rst:206 +msgid "" +"The standard output and standard error streams are buffered during the test " +"run. Output during a passing test is discarded. Output is echoed normally on" +" test fail or error and is added to the failure messages." +msgstr "" +"在测试运行时,标准输出流与标准错误流会被放入缓冲区。成功的测试的运行时输出会被丢弃;测试不通过时,测试运行中的输出会正常显示,错误会被加入到测试失败信息。" + +#: ../../library/unittest.rst:212 +msgid "" +":kbd:`Control-C` during the test run waits for the current test to end and " +"then reports all the results so far. A second :kbd:`Control-C` raises the " +"normal :exc:`KeyboardInterrupt` exception." +msgstr "" +"当测试正在运行时, :kbd:`Control-C` 会等待当前测试完成,并在完成后报告已执行的测试的结果。当再次按下 :kbd:`Control-C`" +" 时,引发平常的 :exc:`KeyboardInterrupt` 异常。" + +#: ../../library/unittest.rst:216 +msgid "" +"See `Signal Handling`_ for the functions that provide this functionality." +msgstr " `Signal Handling`_ 中详述了提供此功能的函数。" + +#: ../../library/unittest.rst:220 +msgid "Stop the test run on the first error or failure." +msgstr "当出现第一个错误或者失败时,停止运行测试。" + +#: ../../library/unittest.rst:224 +msgid "" +"Only run test methods and classes that match the pattern or substring. This " +"option may be used multiple times, in which case all test cases that match " +"any of the given patterns are included." +msgstr "只运行匹配模式或子字符串的测试方法和类。 此选项可以被多次使用,在此情况下将会包括匹配任何给定模式的所有测试用例。" + +#: ../../library/unittest.rst:228 +msgid "" +"Patterns that contain a wildcard character (``*``) are matched against the " +"test name using :meth:`fnmatch.fnmatchcase`; otherwise simple case-sensitive" +" substring matching is used." +msgstr "包含通配符(*)的模式使用 :meth:`fnmatch.fnmatchcase` 对测试名称进行匹配。另外,该匹配是大小写敏感的。" + +#: ../../library/unittest.rst:232 +msgid "" +"Patterns are matched against the fully qualified test method name as " +"imported by the test loader." +msgstr "模式对测试加载器导入的测试方法全名进行匹配。" + +#: ../../library/unittest.rst:235 +msgid "" +"For example, ``-k foo`` matches ``foo_tests.SomeTest.test_something``, " +"``bar_tests.SomeTest.test_foo``, but not " +"``bar_tests.FooTest.test_something``." +msgstr "" +"例如,``-k foo`` 可以匹配到 ``foo_tests.SomeTest.test_something`` 和 " +"``bar_tests.SomeTest.test_foo`` ,但是不能匹配到 " +"``bar_tests.FooTest.test_something`` 。" + +#: ../../library/unittest.rst:240 +msgid "Show local variables in tracebacks." +msgstr "在回溯中显示局部变量。" + +#: ../../library/unittest.rst:242 +msgid "The command-line options ``-b``, ``-c`` and ``-f`` were added." +msgstr "添加命令行选项 ``-b``, ``-c`` 和 ``-f`` 。" + +#: ../../library/unittest.rst:245 +msgid "The command-line option ``--locals``." +msgstr "命令行选项 ``--locals`` 。" + +#: ../../library/unittest.rst:248 +msgid "The command-line option ``-k``." +msgstr "命令行选项 ``-k`` 。" + +#: ../../library/unittest.rst:251 +msgid "" +"The command line can also be used for test discovery, for running all of the" +" tests in a project or just a subset." +msgstr "命令行亦可用于探索性测试,以运行一个项目的所有测试或其子集。" + +#: ../../library/unittest.rst:258 +msgid "Test Discovery" +msgstr "探索性测试" + +#: ../../library/unittest.rst:262 +msgid "" +"Unittest supports simple test discovery. In order to be compatible with test" +" discovery, all of the test files must be :ref:`modules ` or " +":ref:`packages ` (including :term:`namespace packages " +"`) importable from the top-level directory of the project" +" (this means that their filenames must be valid :ref:`identifiers " +"`)." +msgstr "" +"Unittest支持简单的测试搜索。若需要使用探索性测试,所有的测试文件必须是 :ref:`modules ` 或 " +":ref:`packages ` (包括 :term:`namespace packages ` )并可从项目根目录导入(即它们的文件名必须是有效的 :ref:`identifiers ` )。" + +#: ../../library/unittest.rst:269 +msgid "" +"Test discovery is implemented in :meth:`TestLoader.discover`, but can also " +"be used from the command line. The basic command-line usage is::" +msgstr "探索性测试在 :meth:`TestLoader.discover` 中实现,但也可以通过命令行使用。它在命令行中的基本用法如下:" + +#: ../../library/unittest.rst:277 +msgid "" +"As a shortcut, ``python -m unittest`` is the equivalent of ``python -m " +"unittest discover``. If you want to pass arguments to test discovery the " +"``discover`` sub-command must be used explicitly." +msgstr "" +"方便起见, ``python -m unittest`` 与 ``python -m unittest discover`` " +"等价。如果你需要向探索性测试传入参数,必须显式地使用 ``discover`` 子命令。" + +#: ../../library/unittest.rst:281 +msgid "The ``discover`` sub-command has the following options:" +msgstr "``discover`` 有以下选项:" + +#: ../../library/unittest.rst:287 +msgid "Verbose output" +msgstr "更详细地输出结果。" + +#: ../../library/unittest.rst:291 +msgid "Directory to start discovery (``.`` default)" +msgstr "开始进行搜索的目录(默认值为当前目录 ``.`` )。" + +#: ../../library/unittest.rst:295 +msgid "Pattern to match test files (``test*.py`` default)" +msgstr "用于匹配测试文件的模式(默认为 ``test*.py`` )。" + +#: ../../library/unittest.rst:299 +msgid "Top level directory of project (defaults to start directory)" +msgstr "指定项目的最上层目录(通常为开始时所在目录)。" + +#: ../../library/unittest.rst:301 +msgid "" +"The :option:`-s`, :option:`-p`, and :option:`-t` options can be passed in as" +" positional arguments in that order. The following two command lines are " +"equivalent::" +msgstr ":option:`-s` ,:option:`-p` 和 :option:`-t` 选项可以按顺序作为位置参数传入。以下两条命令是等价的:" + +#: ../../library/unittest.rst:308 +msgid "" +"As well as being a path it is possible to pass a package name, for example " +"``myproject.subpackage.test``, as the start directory. The package name you " +"supply will then be imported and its location on the filesystem will be used" +" as the start directory." +msgstr "" +"正如可以传入路径那样,传入一个包名作为起始目录也是可行的,如 ``myproject.subpackage.test`` " +"。你提供的包名会被导入,它在文件系统中的位置会被作为起始目录。" + +#: ../../library/unittest.rst:315 +msgid "" +"Test discovery loads tests by importing them. Once test discovery has found " +"all the test files from the start directory you specify it turns the paths " +"into package names to import. For example :file:`foo/bar/baz.py` will be " +"imported as ``foo.bar.baz``." +msgstr "" +"探索性测试通过导入测试对测试进行加载。在找到所有你指定的开始目录下的所有测试文件后,它把路径转换为包名并进行导入。如 " +":file:`foo/bar/baz.py` 会被导入为 ``foo.bar.baz`` 。" + +#: ../../library/unittest.rst:320 +msgid "" +"If you have a package installed globally and attempt test discovery on a " +"different copy of the package then the import *could* happen from the wrong " +"place. If this happens test discovery will warn you and exit." +msgstr "如果你有一个全局安装的包,并尝试对这个包的副本进行探索性测试,可能会从错误的地方开始导入。如果出现这种情况,测试会输出警告并退出。" + +#: ../../library/unittest.rst:324 +msgid "" +"If you supply the start directory as a package name rather than a path to a " +"directory then discover assumes that whichever location it imports from is " +"the location you intended, so you will not get the warning." +msgstr "如果你使用包名而不是路径作为开始目录,搜索时会假定它导入的是你想要的目录,所以你不会收到警告。" + +#: ../../library/unittest.rst:329 +msgid "" +"Test modules and packages can customize test loading and discovery by " +"through the `load_tests protocol`_." +msgstr "测试模块和包可以通过 `load_tests protocol`_ 自定义测试的加载和搜索。" + +#: ../../library/unittest.rst:332 +msgid "" +"Test discovery supports :term:`namespace packages ` for " +"the start directory. Note that you need to specify the top level directory " +"too (e.g. ``python -m unittest discover -s root/namespace -t root``)." +msgstr "" +"测试发现支持初始目录下的 :term:`命名空间包`。注意你也需要指定顶层目录(例如:``python -m " +"unittest discover -s root/namespace -t root``)。" + +#: ../../library/unittest.rst:342 +msgid "Organizing test code" +msgstr "组织你的测试代码" + +#: ../../library/unittest.rst:344 +msgid "" +"The basic building blocks of unit testing are :dfn:`test cases` --- single " +"scenarios that must be set up and checked for correctness. In " +":mod:`unittest`, test cases are represented by :class:`unittest.TestCase` " +"instances. To make your own test cases you must write subclasses of " +":class:`TestCase` or use :class:`FunctionTestCase`." +msgstr "" +"单元测试的构建单位是 :dfn:`test cases` :独立的、包含执行条件与正确性检查的方案。在 :mod:`unittest` " +"中,测试用例表示为 :class:`unittest.TestCase` 的实例。通过编写 :class:`TestCase` 的子类或使用 " +":class:`FunctionTestCase` 编写你自己的测试用例。" + +#: ../../library/unittest.rst:350 +msgid "" +"The testing code of a :class:`TestCase` instance should be entirely self " +"contained, such that it can be run either in isolation or in arbitrary " +"combination with any number of other test cases." +msgstr "一个 :class:`TestCase` 实例的测试代码必须是完全自含的,因此它可以独立运行,或与其它任意组合任意数量的测试用例一起运行。" + +#: ../../library/unittest.rst:354 +msgid "" +"The simplest :class:`TestCase` subclass will simply implement a test method " +"(i.e. a method whose name starts with ``test``) in order to perform specific" +" testing code::" +msgstr "" +":class:`TestCase` 的最简单的子类需要实现一个测试方法(例如一个命名以 ``test`` 开头的方法)以执行特定的测试代码:" + +#: ../../library/unittest.rst:365 +msgid "" +"Note that in order to test something, we use one of the :meth:`assert\\*` " +"methods provided by the :class:`TestCase` base class. If the test fails, an" +" exception will be raised with an explanatory message, and :mod:`unittest` " +"will identify the test case as a :dfn:`failure`. Any other exceptions will " +"be treated as :dfn:`errors`." +msgstr "" +"可以看到,为了进行测试,我们使用了基类 :class:`TestCase` 提供的其中一个 :meth:`assert\\*` " +"方法。若测试不通过,将会引发一个带有说明信息的异常,并且 :mod:`unittest` " +"会将这个测试用例标记为测试不通过。任何其它类型的异常将会被当做错误处理。" + +#: ../../library/unittest.rst:371 +msgid "" +"Tests can be numerous, and their set-up can be repetitive. Luckily, we can " +"factor out set-up code by implementing a method called " +":meth:`~TestCase.setUp`, which the testing framework will automatically call" +" for every single test we run::" +msgstr "" +"可能同时存在多个前置操作相同的测试,我们可以把测试的前置操作从测试代码中拆解出来,并实现测试前置方法 :meth:`~TestCase.setUp` " +"。在运行测试时,测试框架会自动地为每个单独测试调用前置方法。" + +#: ../../library/unittest.rst:392 +msgid "" +"The order in which the various tests will be run is determined by sorting " +"the test method names with respect to the built-in ordering for strings." +msgstr "多个测试运行的顺序由内置字符串排序方法对测试名进行排序的结果决定。" + +#: ../../library/unittest.rst:396 +msgid "" +"If the :meth:`~TestCase.setUp` method raises an exception while the test is " +"running, the framework will consider the test to have suffered an error, and" +" the test method will not be executed." +msgstr "在测试运行时,若 :meth:`~TestCase.setUp` 方法引发异常,测试框架会认为测试发生了错误,因此测试方法不会被运行。" + +#: ../../library/unittest.rst:400 +msgid "" +"Similarly, we can provide a :meth:`~TestCase.tearDown` method that tidies up" +" after the test method has been run::" +msgstr "相似的,我们提供了一个 :meth:`~TestCase.tearDown` 方法在测试方法运行后进行清理工作。" + +#: ../../library/unittest.rst:412 +msgid "" +"If :meth:`~TestCase.setUp` succeeded, :meth:`~TestCase.tearDown` will be run" +" whether the test method succeeded or not." +msgstr "" +"若 :meth:`~TestCase.setUp` 成功运行,无论测试方法是否成功,都会运行 :meth:`~TestCase.tearDown` 。" + +#: ../../library/unittest.rst:415 +msgid "" +"Such a working environment for the testing code is called a :dfn:`test " +"fixture`. A new TestCase instance is created as a unique test fixture used " +"to execute each individual test method. Thus :meth:`~TestCase.setUp`, " +":meth:`~TestCase.tearDown`, and :meth:`~TestCase.__init__` will be called " +"once per test." +msgstr "" +"这样的一个测试代码运行的环境被称为 :dfn:`test fixture` 。一个新的 TestCase " +"实例作为一个测试脚手架,用于运行各个独立的测试方法。在运行每个测试时,:meth:`~TestCase.setUp` " +"、:meth:`~TestCase.tearDown` 和 :meth:`~TestCase.__init__` 会被调用一次。" + +#: ../../library/unittest.rst:421 +msgid "" +"It is recommended that you use TestCase implementations to group tests " +"together according to the features they test. :mod:`unittest` provides a " +"mechanism for this: the :dfn:`test suite`, represented by :mod:`unittest`'s " +":class:`TestSuite` class. In most cases, calling :func:`unittest.main` will" +" do the right thing and collect all the module's test cases for you and " +"execute them." +msgstr "" +"推荐你根据用例所测试的功能将测试用 TestCase 分组。:mod:`unittest` 为此提供了 :dfn:`test " +"suite`::mod:`unittest` 的 :class:`TestSuite` 类是一个代表。通常情况下,调用 " +":func:`unittest.main` 就能正确地找到并执行这个模块下所有用 TestCase 分组的测试。" + +#: ../../library/unittest.rst:428 +msgid "" +"However, should you want to customize the building of your test suite, you " +"can do it yourself::" +msgstr "然而,如果你需要自定义你的测试套件的话,你可以参考以下方法组织你的测试:" + +#: ../../library/unittest.rst:441 +msgid "" +"You can place the definitions of test cases and test suites in the same " +"modules as the code they are to test (such as :file:`widget.py`), but there " +"are several advantages to placing the test code in a separate module, such " +"as :file:`test_widget.py`:" +msgstr "" +"你可以把测试用例和测试套件放在与被测试代码相同的模块中(比如 :file:`widget.py`),但将测试代码放在单独的模块中(比如 " +":file:`test_widget.py`)有几个优势。" + +#: ../../library/unittest.rst:446 +msgid "The test module can be run standalone from the command line." +msgstr "测试模块可以从命令行被独立调用。" + +#: ../../library/unittest.rst:448 +msgid "The test code can more easily be separated from shipped code." +msgstr "更容易在分发的代码中剥离测试代码。" + +#: ../../library/unittest.rst:450 +msgid "" +"There is less temptation to change test code to fit the code it tests " +"without a good reason." +msgstr "降低没有好理由的情况下修改测试代码以通过测试的诱惑。" + +#: ../../library/unittest.rst:453 +msgid "" +"Test code should be modified much less frequently than the code it tests." +msgstr "测试代码应比被测试代码更少地被修改。" + +#: ../../library/unittest.rst:455 +msgid "Tested code can be refactored more easily." +msgstr "被测试代码可以更容易地被重构。" + +#: ../../library/unittest.rst:457 +msgid "" +"Tests for modules written in C must be in separate modules anyway, so why " +"not be consistent?" +msgstr "对用 C 语言写成的模块无论如何都得单独写成一个模块,为什么不保持一致呢?" + +#: ../../library/unittest.rst:460 +msgid "" +"If the testing strategy changes, there is no need to change the source code." +msgstr "如果测试策略发生了改变,没有必要修改源代码。" + +#: ../../library/unittest.rst:466 +msgid "Re-using old test code" +msgstr "复用已有的测试代码" + +#: ../../library/unittest.rst:468 +msgid "" +"Some users will find that they have existing test code that they would like " +"to run from :mod:`unittest`, without converting every old test function to a" +" :class:`TestCase` subclass." +msgstr "" +"一些用户希望直接使用 :mod:`unittest` 运行已有的测试代码,而不需要把已有的每个测试函数转化为一个 :class:`TestCase` " +"的子类。" + +#: ../../library/unittest.rst:472 +msgid "" +"For this reason, :mod:`unittest` provides a :class:`FunctionTestCase` class." +" This subclass of :class:`TestCase` can be used to wrap an existing test " +"function. Set-up and tear-down functions can also be provided." +msgstr "" +"因此, :mod:`unittest` 提供 :class:`FunctionTestCase` 类。这个 :class:`TestCase` " +"的子类可用于打包已有的测试函数,并支持设置前置与后置函数。" + +#: ../../library/unittest.rst:476 +msgid "Given the following test function::" +msgstr "假定有一个测试函数:" + +#: ../../library/unittest.rst:483 +msgid "" +"one can create an equivalent test case instance as follows, with optional " +"set-up and tear-down methods::" +msgstr "可以创建等价的测试用例如下,其中前置和后置方法是可选的。" + +#: ../../library/unittest.rst:492 +msgid "" +"Even though :class:`FunctionTestCase` can be used to quickly convert an " +"existing test base over to a :mod:`unittest`\\ -based system, this approach " +"is not recommended. Taking the time to set up proper :class:`TestCase` " +"subclasses will make future test refactorings infinitely easier." +msgstr "" +"用 :class:`FunctionTestCase` 可以快速将现有的测试转换成基于 :mod:`unittest` " +"的测试,但不推荐你这样做。花点时间继承 :class:`TestCase` 会让以后重构测试无比轻松。" + +#: ../../library/unittest.rst:497 +msgid "" +"In some cases, the existing tests may have been written using the " +":mod:`doctest` module. If so, :mod:`doctest` provides a " +":class:`DocTestSuite` class that can automatically build " +":class:`unittest.TestSuite` instances from the existing :mod:`doctest`\\ " +"-based tests." +msgstr "" +"在某些情况下,现有的测试可能是用 :mod:`doctest` 模块编写的。 如果是这样, :mod:`doctest` 提供了一个 " +":class:`DocTestSuite` 类,可以从现有基于 :mod:`doctest` 的测试中自动构建 " +":class:`unittest.TestSuite` 用例。" + +#: ../../library/unittest.rst:506 +msgid "Skipping tests and expected failures" +msgstr "跳过测试与预计的失败" + +#: ../../library/unittest.rst:510 +msgid "" +"Unittest supports skipping individual test methods and even whole classes of" +" tests. In addition, it supports marking a test as an \"expected failure,\"" +" a test that is broken and will fail, but shouldn't be counted as a failure " +"on a :class:`TestResult`." +msgstr "" +"Unittest 支持跳过单个或整组的测试用例。它还支持把测试标注成“预期失败”的测试。这些坏测试会失败,但不会算进 " +":class:`TestResult` 的失败里。" + +#: ../../library/unittest.rst:515 +msgid "" +"Skipping a test is simply a matter of using the :func:`skip` " +":term:`decorator` or one of its conditional variants, calling " +":meth:`TestCase.skipTest` within a :meth:`~TestCase.setUp` or test method, " +"or raising :exc:`SkipTest` directly." +msgstr "" +"要跳过测试只需使用 :func:`skip` :term:`decorator` 或其附带条件的版本,在 :meth:`~TestCase.setUp`" +" 内部使用 :meth:`TestCase.skipTest`,或是直接引发 :exc:`SkipTest`。" + +#: ../../library/unittest.rst:519 +msgid "Basic skipping looks like this::" +msgstr "跳过测试的基本用法如下::" + +#: ../../library/unittest.rst:544 +msgid "This is the output of running the example above in verbose mode::" +msgstr "在啰嗦模式下运行以上测试例子时,程序输出如下:" + +#: ../../library/unittest.rst:556 +msgid "Classes can be skipped just like methods::" +msgstr "跳过测试类的写法跟跳过测试方法的写法相似::" + +#: ../../library/unittest.rst:563 +msgid "" +":meth:`TestCase.setUp` can also skip the test. This is useful when a " +"resource that needs to be set up is not available." +msgstr ":meth:`TestCase.setUp` 也可以跳过测试。可以用于所需资源不可用的情况下跳过接下来的测试。" + +#: ../../library/unittest.rst:566 +msgid "Expected failures use the :func:`expectedFailure` decorator. ::" +msgstr "使用 :func:`expectedFailure` 装饰器表明这个测试预计失败。::" + +#: ../../library/unittest.rst:573 +msgid "" +"It's easy to roll your own skipping decorators by making a decorator that " +"calls :func:`skip` on the test when it wants it to be skipped. This " +"decorator skips the test unless the passed object has a certain attribute::" +msgstr "" +"你可以很容易地编写在测试时调用 :func:`skip` 的装饰器作为自定义的跳过测试装饰器。 " +"下面这个装饰器会跳过测试,除非所传入的对象具有特定的属性::" + +#: ../../library/unittest.rst:582 +msgid "" +"The following decorators and exception implement test skipping and expected " +"failures:" +msgstr "以下的装饰器和异常实现了跳过测试和预期失败两种功能:" + +#: ../../library/unittest.rst:586 +msgid "" +"Unconditionally skip the decorated test. *reason* should describe why the " +"test is being skipped." +msgstr "跳过被此装饰器装饰的测试。 *reason* 为测试被跳过的原因。" + +#: ../../library/unittest.rst:591 +msgid "Skip the decorated test if *condition* is true." +msgstr "当 *condition* 为真时,跳过被装饰的测试。" + +#: ../../library/unittest.rst:595 +msgid "Skip the decorated test unless *condition* is true." +msgstr "跳过被装饰的测试,除非 *condition* 为真。" + +#: ../../library/unittest.rst:599 +msgid "" +"Mark the test as an expected failure or error. If the test fails or errors " +"in the test function itself (rather than in one of the :dfn:`test fixture` " +"methods) then it will be considered a success. If the test passes, it will " +"be considered a failure." +msgstr "" +"将测试标记为预期的失败或错误。 如果测试失败或在测试函数自身(而非在某个 :dfn:`test fixture` 方法)中出现错误则将认为是测试成功。 " +"如果测试通过,则将认为是测试失败。" + +#: ../../library/unittest.rst:606 +msgid "This exception is raised to skip a test." +msgstr "引发此异常以跳过一个测试。" + +#: ../../library/unittest.rst:608 +msgid "" +"Usually you can use :meth:`TestCase.skipTest` or one of the skipping " +"decorators instead of raising this directly." +msgstr "" +"通常来说,你可以使用 :meth:`TestCase.skipTest` 或其中一个跳过测试的装饰器实现跳过测试的功能,而不是直接引发此异常。" + +#: ../../library/unittest.rst:611 +msgid "" +"Skipped tests will not have :meth:`~TestCase.setUp` or " +":meth:`~TestCase.tearDown` run around them. Skipped classes will not have " +":meth:`~TestCase.setUpClass` or :meth:`~TestCase.tearDownClass` run. Skipped" +" modules will not have :func:`setUpModule` or :func:`tearDownModule` run." +msgstr "" +"被跳过的测试的 :meth:`~TestCase.setUp` 和 :meth:`~TestCase.tearDown` 不会被运行。被跳过的类的 " +":meth:`~TestCase.setUpClass` 和 :meth:`~TestCase.tearDownClass` 不会被运行。被跳过的模组的" +" :func:`setUpModule` 和 :func:`tearDownModule` 不会被运行。" + +#: ../../library/unittest.rst:619 +msgid "Distinguishing test iterations using subtests" +msgstr "使用子测试区分测试迭代" + +#: ../../library/unittest.rst:623 +msgid "" +"When there are very small differences among your tests, for instance some " +"parameters, unittest allows you to distinguish them inside the body of a " +"test method using the :meth:`~TestCase.subTest` context manager." +msgstr "" +"当你的几个测试之间的差异非常小,例如只有某些形参不同时,unittest 允许你使用 :meth:`~TestCase.subTest` " +"上下文管理器在一个测试方法体的内部区分它们。" + +#: ../../library/unittest.rst:627 +msgid "For example, the following test::" +msgstr "例如,以下测试::" + +#: ../../library/unittest.rst:639 +msgid "will produce the following output::" +msgstr "可以得到以下输出::" + +#: ../../library/unittest.rst:665 +msgid "" +"Without using a subtest, execution would stop after the first failure, and " +"the error would be less easy to diagnose because the value of ``i`` wouldn't" +" be displayed::" +msgstr "如果不使用子测试,程序遇到第一次错误之后就会停止。而且因为 ``i`` 的值不显示,错误也更难找。" + +#: ../../library/unittest.rst:681 +msgid "Classes and functions" +msgstr "类与函数" + +#: ../../library/unittest.rst:683 +msgid "This section describes in depth the API of :mod:`unittest`." +msgstr "本节深入介绍了 :mod:`unittest` 的 API。" + +#: ../../library/unittest.rst:689 +msgid "Test cases" +msgstr "测试用例" + +#: ../../library/unittest.rst:693 +msgid "" +"Instances of the :class:`TestCase` class represent the logical test units in" +" the :mod:`unittest` universe. This class is intended to be used as a base " +"class, with specific tests being implemented by concrete subclasses. This " +"class implements the interface needed by the test runner to allow it to " +"drive the tests, and methods that the test code can use to check for and " +"report various kinds of failure." +msgstr "" +":class:`TestCase` 类的实例代表了 :mod:`unittest` 宇宙中的逻辑测试单元。 " +"该类旨在被当作基类使用,特定的测试将由其实体子类来实现。 " +"该类实现了测试运行器所需的接口以允许它驱动测试,并实现了可被测试代码用来检测和报告各种类型的失败的方法。" + +#: ../../library/unittest.rst:700 +msgid "" +"Each instance of :class:`TestCase` will run a single base method: the method" +" named *methodName*. In most uses of :class:`TestCase`, you will neither " +"change the *methodName* nor reimplement the default ``runTest()`` method." +msgstr "" +"每个 :class:`TestCase` 实例将运行一个单位的基础方法:即名为 *methodName* 的方法。 在使用 " +":class:`TestCase` 的大多数场景中,你都不需要修改 *methodName* 或重新实现默认的 ``runTest()`` 方法。" + +#: ../../library/unittest.rst:705 +msgid "" +":class:`TestCase` can be instantiated successfully without providing a " +"*methodName*. This makes it easier to experiment with :class:`TestCase` from" +" the interactive interpreter." +msgstr "" +":class:`TestCase` 不需要提供 *methodName* 即可成功实例化。 这使得从交互式解释器试验 :class:`TestCase`" +" 更为容易。" + +#: ../../library/unittest.rst:710 +msgid "" +":class:`TestCase` instances provide three groups of methods: one group used " +"to run the test, another used by the test implementation to check conditions" +" and report failures, and some inquiry methods allowing information about " +"the test itself to be gathered." +msgstr "" +":class:`TestCase` " +"的实例提供了三组方法:一组用来运行测试,另一组被测试实现用来检查条件和报告失败,还有一些查询方法用来收集有关测试本身的信息。" + +#: ../../library/unittest.rst:715 +msgid "Methods in the first group (running the test) are:" +msgstr "第一组(用于运行测试的)方法是:" + +#: ../../library/unittest.rst:719 +msgid "" +"Method called to prepare the test fixture. This is called immediately " +"before calling the test method; other than :exc:`AssertionError` or " +":exc:`SkipTest`, any exception raised by this method will be considered an " +"error rather than a test failure. The default implementation does nothing." +msgstr "" +"为测试预备而调用的方法。 此方法会在调用测试方法之前被调用;除了 :exc:`AssertionError` 或 " +":exc:`SkipTest`,此方法所引发的任何异常都将被视为错误而非测试失败。 默认的实现将不做任何事情。" + +#: ../../library/unittest.rst:727 +msgid "" +"Method called immediately after the test method has been called and the " +"result recorded. This is called even if the test method raised an " +"exception, so the implementation in subclasses may need to be particularly " +"careful about checking internal state. Any exception, other than " +":exc:`AssertionError` or :exc:`SkipTest`, raised by this method will be " +"considered an additional error rather than a test failure (thus increasing " +"the total number of reported errors). This method will only be called if the" +" :meth:`setUp` succeeds, regardless of the outcome of the test method. The " +"default implementation does nothing." +msgstr "" +"在测试方法被调用并记录结果之后立即被调用的方法。 此方法即使在测试方法引发异常时仍会被调用,因此子类中的实现将需要特别注意检查内部状态。 除 " +":exc:`AssertionError` 或 :exc:`SkipTest` " +"外,此方法所引发的任何异常都将被视为额外的错误而非测试失败(因而会增加总计错误报告数)。 此方法将只在 :meth:`setUp` " +"成功执行时被调用,无论测试方法的结果如何。 默认的实现将不做任何事情。" + +#: ../../library/unittest.rst:740 +msgid "" +"A class method called before tests in an individual class are run. " +"``setUpClass`` is called with the class as the only argument and must be " +"decorated as a :func:`classmethod`::" +msgstr "" +"在一个单独类中的测试运行之前被调用的类方法。 ``setUpClass`` 会被作为唯一的参数在类上调用且必须使用 " +":func:`classmethod` 装饰器::" + +#: ../../library/unittest.rst:748 ../../library/unittest.rst:763 +msgid "See `Class and Module Fixtures`_ for more details." +msgstr "查看 `Class and Module Fixtures`_ 获取更详细的说明。" + +#: ../../library/unittest.rst:755 +msgid "" +"A class method called after tests in an individual class have run. " +"``tearDownClass`` is called with the class as the only argument and must be " +"decorated as a :meth:`classmethod`::" +msgstr "" +"在一个单独类的测试完成运行之后被调用的类方法。 ``tearDownClass`` 会被作为唯一的参数在类上调用且必须使用 " +":meth:`classmethod` 装饰器::" + +#: ../../library/unittest.rst:770 +msgid "" +"Run the test, collecting the result into the :class:`TestResult` object " +"passed as *result*. If *result* is omitted or ``None``, a temporary result " +"object is created (by calling the :meth:`defaultTestResult` method) and " +"used. The result object is returned to :meth:`run`'s caller." +msgstr "" +"运行测试,将结果收集至作为 *result* 传入的 :class:`TestResult`。 如果 *result* 被省略或为 " +"``None``,则会创建一个临时的结果对象(通过调用 :meth:`defaultTestResult` 方法)并使用它。 结果对象会被返回给 " +":meth:`run` 的调用方。" + +#: ../../library/unittest.rst:776 +msgid "" +"The same effect may be had by simply calling the :class:`TestCase` instance." +msgstr "同样的效果也可通过简单地调用 :class:`TestCase` 实例来达成。" + +#: ../../library/unittest.rst:779 +msgid "" +"Previous versions of ``run`` did not return the result. Neither did calling " +"an instance." +msgstr "之前版本的 ``run`` 不会返回结果。 也不会对实例执行调用。" + +#: ../../library/unittest.rst:785 +msgid "" +"Calling this during a test method or :meth:`setUp` skips the current test. " +"See :ref:`unittest-skipping` for more information." +msgstr "在测试方法或 :meth:`setUp` 执行期间调用此方法将跳过当前测试。 详情参见 :ref:`unittest-skipping`。" + +#: ../../library/unittest.rst:793 +msgid "" +"Return a context manager which executes the enclosed code block as a " +"subtest. *msg* and *params* are optional, arbitrary values which are " +"displayed whenever a subtest fails, allowing you to identify them clearly." +msgstr "" +"返回一个上下文管理器以将其中的代码块作为子测试来执行。 可选的 *msg* 和 *params* " +"是将在子测试失败时显示的任意值,以便让你能清楚地标识它们。" + +#: ../../library/unittest.rst:798 +msgid "" +"A test case can contain any number of subtest declarations, and they can be " +"arbitrarily nested." +msgstr "一个测试用例可以包含任意数量的子测试声明,并且它们可以任意地嵌套。" + +#: ../../library/unittest.rst:801 +msgid "See :ref:`subtests` for more information." +msgstr "查看 :ref:`subtests` 获取更详细的信息。" + +#: ../../library/unittest.rst:808 +msgid "" +"Run the test without collecting the result. This allows exceptions raised " +"by the test to be propagated to the caller, and can be used to support " +"running tests under a debugger." +msgstr "运行测试而不收集结果。 这允许测试所引发的异常被传递给调用方,并可被用于支持在调试器中运行测试。" + +#: ../../library/unittest.rst:814 +msgid "" +"The :class:`TestCase` class provides several assert methods to check for and" +" report failures. The following table lists the most commonly used methods " +"(see the tables below for more assert methods):" +msgstr "" +":class:`TestCase` 类提供了一些断言方法用于检查并报告失败。 下表列出了最常用的方法(请查看下文的其他表来了解更多的断言方法):" + +#: ../../library/unittest.rst:819 ../../library/unittest.rst:940 +#: ../../library/unittest.rst:1133 ../../library/unittest.rst:1260 +msgid "Method" +msgstr "方法" + +#: ../../library/unittest.rst:819 ../../library/unittest.rst:940 +#: ../../library/unittest.rst:1133 +msgid "Checks that" +msgstr "检查对象" + +#: ../../library/unittest.rst:819 ../../library/unittest.rst:940 +#: ../../library/unittest.rst:1133 ../../library/unittest.rst:1260 +msgid "New in" +msgstr "引入版本" + +#: ../../library/unittest.rst:821 +msgid ":meth:`assertEqual(a, b) `" +msgstr ":meth:`assertEqual(a, b) `" + +#: ../../library/unittest.rst:821 +msgid "``a == b``" +msgstr "``a == b``" + +#: ../../library/unittest.rst:824 +msgid ":meth:`assertNotEqual(a, b) `" +msgstr ":meth:`assertNotEqual(a, b) `" + +#: ../../library/unittest.rst:824 +msgid "``a != b``" +msgstr "``a != b``" + +#: ../../library/unittest.rst:827 +msgid ":meth:`assertTrue(x) `" +msgstr ":meth:`assertTrue(x) `" + +#: ../../library/unittest.rst:827 +msgid "``bool(x) is True``" +msgstr "``bool(x) is True``" + +#: ../../library/unittest.rst:830 +msgid ":meth:`assertFalse(x) `" +msgstr ":meth:`assertFalse(x) `" + +#: ../../library/unittest.rst:830 +msgid "``bool(x) is False``" +msgstr "``bool(x) is False``" + +#: ../../library/unittest.rst:833 +msgid ":meth:`assertIs(a, b) `" +msgstr ":meth:`assertIs(a, b) `" + +#: ../../library/unittest.rst:833 +msgid "``a is b``" +msgstr "``a is b``" + +#: ../../library/unittest.rst:833 ../../library/unittest.rst:836 +#: ../../library/unittest.rst:839 ../../library/unittest.rst:842 +#: ../../library/unittest.rst:845 ../../library/unittest.rst:848 +#: ../../library/unittest.rst:945 ../../library/unittest.rst:1141 +#: ../../library/unittest.rst:1144 ../../library/unittest.rst:1147 +#: ../../library/unittest.rst:1150 ../../library/unittest.rst:1153 +#: ../../library/unittest.rst:1262 ../../library/unittest.rst:1265 +#: ../../library/unittest.rst:1268 ../../library/unittest.rst:1271 +#: ../../library/unittest.rst:1274 ../../library/unittest.rst:1277 +msgid "3.1" +msgstr "3.1" + +#: ../../library/unittest.rst:836 +msgid ":meth:`assertIsNot(a, b) `" +msgstr ":meth:`assertIsNot(a, b) `" + +#: ../../library/unittest.rst:836 +msgid "``a is not b``" +msgstr "``a is not b``" + +#: ../../library/unittest.rst:839 +msgid ":meth:`assertIsNone(x) `" +msgstr ":meth:`assertIsNone(x) `" + +#: ../../library/unittest.rst:839 +msgid "``x is None``" +msgstr "``x is None``" + +#: ../../library/unittest.rst:842 +msgid ":meth:`assertIsNotNone(x) `" +msgstr ":meth:`assertIsNotNone(x) `" + +#: ../../library/unittest.rst:842 +msgid "``x is not None``" +msgstr "``x is not None``" + +#: ../../library/unittest.rst:845 +msgid ":meth:`assertIn(a, b) `" +msgstr ":meth:`assertIn(a, b) `" + +#: ../../library/unittest.rst:845 +msgid "``a in b``" +msgstr "``a in b``" + +#: ../../library/unittest.rst:848 +msgid ":meth:`assertNotIn(a, b) `" +msgstr ":meth:`assertNotIn(a, b) `" + +#: ../../library/unittest.rst:848 +msgid "``a not in b``" +msgstr "``a not in b``" + +#: ../../library/unittest.rst:851 +msgid ":meth:`assertIsInstance(a, b) `" +msgstr ":meth:`assertIsInstance(a, b) `" + +#: ../../library/unittest.rst:851 +msgid "``isinstance(a, b)``" +msgstr "``isinstance(a, b)``" + +#: ../../library/unittest.rst:851 ../../library/unittest.rst:854 +#: ../../library/unittest.rst:948 ../../library/unittest.rst:951 +#: ../../library/unittest.rst:1156 ../../library/unittest.rst:1159 +msgid "3.2" +msgstr "3.2" + +#: ../../library/unittest.rst:854 +msgid ":meth:`assertNotIsInstance(a, b) `" +msgstr ":meth:`assertNotIsInstance(a, b) `" + +#: ../../library/unittest.rst:854 +msgid "``not isinstance(a, b)``" +msgstr "``not isinstance(a, b)``" + +#: ../../library/unittest.rst:858 +msgid "" +"All the assert methods accept a *msg* argument that, if specified, is used " +"as the error message on failure (see also :data:`longMessage`). Note that " +"the *msg* keyword argument can be passed to :meth:`assertRaises`, " +":meth:`assertRaisesRegex`, :meth:`assertWarns`, :meth:`assertWarnsRegex` " +"only when they are used as a context manager." +msgstr "" +"这些断言方法都支持 *msg* 参数,如果指定了该参数,它将被用作测试失败时的错误消息 (另请参阅 :data:`longMessage`)。 请注意将" +" *msg* 关键字参数传给 :meth:`assertRaises`, :meth:`assertRaisesRegex`, " +":meth:`assertWarns`, :meth:`assertWarnsRegex` 的前提是它们必须被用作上下文管理器。" + +#: ../../library/unittest.rst:866 +msgid "" +"Test that *first* and *second* are equal. If the values do not compare " +"equal, the test will fail." +msgstr "测试 *first* 和 *second* 是否相等。 如果两个值的比较结果是不相等,则测试将失败。" + +#: ../../library/unittest.rst:869 +msgid "" +"In addition, if *first* and *second* are the exact same type and one of " +"list, tuple, dict, set, frozenset or str or any type that a subclass " +"registers with :meth:`addTypeEqualityFunc` the type-specific equality " +"function will be called in order to generate a more useful default error " +"message (see also the :ref:`list of type-specific methods `)." +msgstr "" +"此外,如果 *first* 和 *second* 的类型完全相同且属于 list, tuple, dict, set, frozenset 或 str " +"或者属于通过 :meth:`addTypeEqualityFunc` 注册子类的类型则将会调用类型专属的相等判断函数以便生成更有用的默认错误消息 " +"(另请参阅 :ref:`类型专属方法列表 `)。" + +#: ../../library/unittest.rst:876 +msgid "Added the automatic calling of type-specific equality function." +msgstr "增加了对类型专属的相等判断函数的自动调用。" + +#: ../../library/unittest.rst:879 +msgid "" +":meth:`assertMultiLineEqual` added as the default type equality function for" +" comparing strings." +msgstr "增加了 :meth:`assertMultiLineEqual` 作为用于比较字符串的默认类型相等判断函数。" + +#: ../../library/unittest.rst:886 +msgid "" +"Test that *first* and *second* are not equal. If the values do compare " +"equal, the test will fail." +msgstr "测试 *first* 和 *second* 是否不等。 如果两个值的比较结果是相等,则测试将失败。" + +#: ../../library/unittest.rst:892 +msgid "Test that *expr* is true (or false)." +msgstr "测试 *expr* 是否为真值(或假值)。" + +#: ../../library/unittest.rst:894 +msgid "" +"Note that this is equivalent to ``bool(expr) is True`` and not to ``expr is " +"True`` (use ``assertIs(expr, True)`` for the latter). This method should " +"also be avoided when more specific methods are available (e.g. " +"``assertEqual(a, b)`` instead of ``assertTrue(a == b)``), because they " +"provide a better error message in case of failure." +msgstr "" +"请注意这等价于 ``bool(expr) is True`` 而不等价于 ``expr is True`` (后者要使用 " +"``assertIs(expr, True)``)。 当存在更专门的方法时也应避免使用此方法 (例如应使用 ``assertEqual(a, b)`` " +"而不是 ``assertTrue(a == b)``),因为它们在测试失败时会提供更有用的错误消息。" + +#: ../../library/unittest.rst:904 +msgid "Test that *first* and *second* are (or are not) the same object." +msgstr "测试 *first* 和 *second* 是 (或不是) 同一个对象。" + +#: ../../library/unittest.rst:912 +msgid "Test that *expr* is (or is not) ``None``." +msgstr "测试 *expr* 是 (或不是) ``None``。" + +#: ../../library/unittest.rst:920 +msgid "Test that *member* is (or is not) in *container*." +msgstr "测试 *member* 是 (或不是) *container* 的成员。" + +#: ../../library/unittest.rst:928 +msgid "" +"Test that *obj* is (or is not) an instance of *cls* (which can be a class or" +" a tuple of classes, as supported by :func:`isinstance`). To check for the " +"exact type, use :func:`assertIs(type(obj), cls) `." +msgstr "" +"测试 *obj* 是 (或不是) *cls* (此参数可以为一个类或包含类的元组,即 :func:`isinstance` 所接受的参数) 的实例。 " +"要检测是否为指定类型,请使用 :func:`assertIs(type(obj), cls) `。" + +#: ../../library/unittest.rst:936 +msgid "" +"It is also possible to check the production of exceptions, warnings, and log" +" messages using the following methods:" +msgstr "还可以使用下列方法来检查异常、警告和日志消息的产生:" + +#: ../../library/unittest.rst:942 +msgid ":meth:`assertRaises(exc, fun, *args, **kwds) `" +msgstr ":meth:`assertRaises(exc, fun, *args, **kwds) `" + +#: ../../library/unittest.rst:942 +msgid "``fun(*args, **kwds)`` raises *exc*" +msgstr "``fun(*args, **kwds)`` 引发了 *exc*" + +#: ../../library/unittest.rst:945 +msgid "" +":meth:`assertRaisesRegex(exc, r, fun, *args, **kwds) " +"`" +msgstr "" +":meth:`assertRaisesRegex(exc, r, fun, *args, **kwds) " +"`" + +#: ../../library/unittest.rst:945 +msgid "``fun(*args, **kwds)`` raises *exc* and the message matches regex *r*" +msgstr "``fun(*args, **kwds)`` 引发了 *exc* 并且消息可与正则表达式 *r* 相匹配" + +#: ../../library/unittest.rst:948 +msgid ":meth:`assertWarns(warn, fun, *args, **kwds) `" +msgstr ":meth:`assertWarns(warn, fun, *args, **kwds) `" + +#: ../../library/unittest.rst:948 +msgid "``fun(*args, **kwds)`` raises *warn*" +msgstr "``fun(*args, **kwds)`` 引发了 *warn*" + +#: ../../library/unittest.rst:951 +msgid "" +":meth:`assertWarnsRegex(warn, r, fun, *args, **kwds) " +"`" +msgstr "" +":meth:`assertWarnsRegex(warn, r, fun, *args, **kwds) " +"`" + +#: ../../library/unittest.rst:951 +msgid "``fun(*args, **kwds)`` raises *warn* and the message matches regex *r*" +msgstr "``fun(*args, **kwds)`` 引发了 *warn* 并且消息可与正则表达式 *r* 相匹配" + +#: ../../library/unittest.rst:954 +msgid ":meth:`assertLogs(logger, level) `" +msgstr ":meth:`assertLogs(logger, level) `" + +#: ../../library/unittest.rst:954 +msgid "The ``with`` block logs on *logger* with minimum *level*" +msgstr "``with`` 代码块在 *logger* 上使用了最小的 *level* 级别写入日志" + +#: ../../library/unittest.rst:954 +msgid "3.4" +msgstr "3.4" + +#: ../../library/unittest.rst:961 +msgid "" +"Test that an exception is raised when *callable* is called with any " +"positional or keyword arguments that are also passed to " +":meth:`assertRaises`. The test passes if *exception* is raised, is an error" +" if another exception is raised, or fails if no exception is raised. To " +"catch any of a group of exceptions, a tuple containing the exception classes" +" may be passed as *exception*." +msgstr "" +"测试当 *callable* 附带任何同时被传给 :meth:`assertRaises` 的位置或关键字参数被调用时是否引发了异常。 如果引发了 " +"*exception* 则测试通过,如果引发了另一个异常则报错,或者如果未引发任何异常则测试失败。 " +"要捕获一组异常中的任何一个,可以将包含多个异常类的元组作为 *exception* 传入。" + +#: ../../library/unittest.rst:968 +msgid "" +"If only the *exception* and possibly the *msg* arguments are given, return a" +" context manager so that the code under test can be written inline rather " +"than as a function::" +msgstr "" +"如果只给出了 *exception* 和可能的 *msg* 参数,则返回一个上下文管理器以便被测试的代码可以被写成内联形式而不是被写成函数::" + +#: ../../library/unittest.rst:975 +msgid "" +"When used as a context manager, :meth:`assertRaises` accepts the additional " +"keyword argument *msg*." +msgstr "当被作为上下文管理器使用时,:meth:`assertRaises` 接受额外的关键字参数 *msg*。" + +#: ../../library/unittest.rst:978 +msgid "" +"The context manager will store the caught exception object in its " +":attr:`exception` attribute. This can be useful if the intention is to " +"perform additional checks on the exception raised::" +msgstr "上下文管理器将把捕获的异常对象存入在其 :attr:`exception` 属性中。 这适用于需要对所引发异常执行额外检查的场合::" + +#: ../../library/unittest.rst:988 +msgid "Added the ability to use :meth:`assertRaises` as a context manager." +msgstr "添加了将 :meth:`assertRaises` 用作上下文管理器的功能。" + +#: ../../library/unittest.rst:991 +msgid "Added the :attr:`exception` attribute." +msgstr "增加了 :attr:`exception` 属性。" + +#: ../../library/unittest.rst:994 ../../library/unittest.rst:1020 +#: ../../library/unittest.rst:1061 ../../library/unittest.rst:1084 +msgid "Added the *msg* keyword argument when used as a context manager." +msgstr "增加了 *msg* 关键字参数在作为上下文管理器时使用。" + +#: ../../library/unittest.rst:1001 +msgid "" +"Like :meth:`assertRaises` but also tests that *regex* matches on the string " +"representation of the raised exception. *regex* may be a regular expression" +" object or a string containing a regular expression suitable for use by " +":func:`re.search`. Examples::" +msgstr "" +"与 :meth:`assertRaises` 类似但还会测试 *regex* 是否匹配被引发异常的字符串表示形式。 *regex* " +"可以是一个正则表达式对象或包含正则表达式的字符串以提供给 :func:`re.search` 使用。 例如::" + +#: ../../library/unittest.rst:1009 ../../library/unittest.rst:1077 +msgid "or::" +msgstr "或者:" + +#: ../../library/unittest.rst:1014 +msgid "Added under the name ``assertRaisesRegexp``." +msgstr "以方法名 ``assertRaisesRegexp`` 添加。" + +#: ../../library/unittest.rst:1017 +msgid "Renamed to :meth:`assertRaisesRegex`." +msgstr "重命名为 :meth:`assertRaisesRegex`。" + +#: ../../library/unittest.rst:1027 +msgid "" +"Test that a warning is triggered when *callable* is called with any " +"positional or keyword arguments that are also passed to :meth:`assertWarns`." +" The test passes if *warning* is triggered and fails if it isn't. Any " +"exception is an error. To catch any of a group of warnings, a tuple " +"containing the warning classes may be passed as *warnings*." +msgstr "" +"测试当 *callable* 附带任何同时被传给 :meth:`assertWarns` 的位置或关键字参数被调用时是否触发了警告。 如果触发了 " +"*warning* 则测试通过,否则测试失败。 引发任何异常则报错。 要捕获一组警告中的任何一个,可将包含多个警告类的元组作为 *warnings* " +"传入。" + +#: ../../library/unittest.rst:1034 +msgid "" +"If only the *warning* and possibly the *msg* arguments are given, return a " +"context manager so that the code under test can be written inline rather " +"than as a function::" +msgstr "如果只给出了 *warning* 和可能的 *msg* 参数,则返回一个上下文管理器以便被测试的代码可以被写成内联形式而不是被写成函数::" + +#: ../../library/unittest.rst:1041 +msgid "" +"When used as a context manager, :meth:`assertWarns` accepts the additional " +"keyword argument *msg*." +msgstr "当被作为上下文管理器使用时,:meth:`assertWarns` 接受额外的关键字参数 *msg*。" + +#: ../../library/unittest.rst:1044 +msgid "" +"The context manager will store the caught warning object in its " +":attr:`warning` attribute, and the source line which triggered the warnings " +"in the :attr:`filename` and :attr:`lineno` attributes. This can be useful if" +" the intention is to perform additional checks on the warning caught::" +msgstr "" +"上下文管理器将把捕获的警告对象保存在其 :attr:`warning` 属性中,并把触发警告的源代码行保存在 :attr:`filename` 和 " +":attr:`lineno` 属性中。 这适用于需要对捕获的警告执行额外检查的场合::" + +#: ../../library/unittest.rst:1056 +msgid "" +"This method works regardless of the warning filters in place when it is " +"called." +msgstr "无论被调用时警告过滤器是否就位此方法均可工作。" + +#: ../../library/unittest.rst:1068 +msgid "" +"Like :meth:`assertWarns` but also tests that *regex* matches on the message " +"of the triggered warning. *regex* may be a regular expression object or a " +"string containing a regular expression suitable for use by " +":func:`re.search`. Example::" +msgstr "" +"与 :meth:`assertWarns` 类似但还会测试 *regex* 是否匹配被触发警告的消息文本。 *regex* " +"可以是一个正则表达式对象或包含正则表达式的字符串以提供给 :func:`re.search` 使用。 例如::" + +#: ../../library/unittest.rst:1089 +msgid "" +"A context manager to test that at least one message is logged on the " +"*logger* or one of its children, with at least the given *level*." +msgstr "一个上下文管理器,它测试在 *logger* 或其子对象上是否至少记录了一条至少为指定 *level* 以上级别的消息。" + +#: ../../library/unittest.rst:1093 +msgid "" +"If given, *logger* should be a :class:`logging.Logger` object or a " +":class:`str` giving the name of a logger. The default is the root logger, " +"which will catch all messages that were not blocked by a non-propagating " +"descendent logger." +msgstr "" +"如果给出了 *logger* 则它应为一个 :class:`logging.Logger` 对象或为一个指定日志记录器名称的 :class:`str`。" +" 默认为根日志记录器,它将捕获未被非传播型后继日志记录器所拦阻的所有消息。" + +#: ../../library/unittest.rst:1098 +msgid "" +"If given, *level* should be either a numeric logging level or its string " +"equivalent (for example either ``\"ERROR\"`` or :attr:`logging.ERROR`). The" +" default is :attr:`logging.INFO`." +msgstr "" +"如果给出了 *level* 则它应为一个用数字表示的日志记录级别或其字符串形式 (例如 ``\"ERROR\"`` 或 " +":attr:`logging.ERROR`)。 默认为 :attr:`logging.INFO`。" + +#: ../../library/unittest.rst:1102 +msgid "" +"The test passes if at least one message emitted inside the ``with`` block " +"matches the *logger* and *level* conditions, otherwise it fails." +msgstr "如果在 ``with`` 代码块内部发出了至少一条与 *logger* 和 *level* 条件相匹配的消息则测试通过,否则测试失败。" + +#: ../../library/unittest.rst:1105 +msgid "" +"The object returned by the context manager is a recording helper which keeps" +" tracks of the matching log messages. It has two attributes:" +msgstr "上下文管理器返回的对象是一个记录辅助器,它会记录所匹配的日志消息。 它有两个属性:" + +#: ../../library/unittest.rst:1111 +msgid "" +"A list of :class:`logging.LogRecord` objects of the matching log messages." +msgstr "所匹配的日志消息 :class:`logging.LogRecord` 对象组成的列表。" + +#: ../../library/unittest.rst:1116 +msgid "" +"A list of :class:`str` objects with the formatted output of matching " +"messages." +msgstr "由 :class:`str` 对象组成的列表,内容为所匹配消息经格式化后的输出。" + +#: ../../library/unittest.rst:1119 +msgid "Example::" +msgstr "示例::" + +#: ../../library/unittest.rst:1130 +msgid "" +"There are also other methods used to perform more specific checks, such as:" +msgstr "还有其他一些方法可用于执行更专门的检查,例如:" + +#: ../../library/unittest.rst:1135 +msgid ":meth:`assertAlmostEqual(a, b) `" +msgstr ":meth:`assertAlmostEqual(a, b) `" + +#: ../../library/unittest.rst:1135 +msgid "``round(a-b, 7) == 0``" +msgstr "``round(a-b, 7) == 0``" + +#: ../../library/unittest.rst:1138 +msgid ":meth:`assertNotAlmostEqual(a, b) `" +msgstr ":meth:`assertNotAlmostEqual(a, b) `" + +#: ../../library/unittest.rst:1138 +msgid "``round(a-b, 7) != 0``" +msgstr "``round(a-b, 7) != 0``" + +#: ../../library/unittest.rst:1141 +msgid ":meth:`assertGreater(a, b) `" +msgstr ":meth:`assertGreater(a, b) `" + +#: ../../library/unittest.rst:1141 +msgid "``a > b``" +msgstr "``a > b``" + +#: ../../library/unittest.rst:1144 +msgid ":meth:`assertGreaterEqual(a, b) `" +msgstr ":meth:`assertGreaterEqual(a, b) `" + +#: ../../library/unittest.rst:1144 +msgid "``a >= b``" +msgstr "``a >= b``" + +#: ../../library/unittest.rst:1147 +msgid ":meth:`assertLess(a, b) `" +msgstr ":meth:`assertLess(a, b) `" + +#: ../../library/unittest.rst:1147 +msgid "``a < b``" +msgstr "``a < b``" + +#: ../../library/unittest.rst:1150 +msgid ":meth:`assertLessEqual(a, b) `" +msgstr ":meth:`assertLessEqual(a, b) `" + +#: ../../library/unittest.rst:1150 +msgid "``a <= b``" +msgstr "``a <= b``" + +#: ../../library/unittest.rst:1153 +msgid ":meth:`assertRegex(s, r) `" +msgstr ":meth:`assertRegex(s, r) `" + +#: ../../library/unittest.rst:1153 +msgid "``r.search(s)``" +msgstr "``r.search(s)``" + +#: ../../library/unittest.rst:1156 +msgid ":meth:`assertNotRegex(s, r) `" +msgstr ":meth:`assertNotRegex(s, r) `" + +#: ../../library/unittest.rst:1156 +msgid "``not r.search(s)``" +msgstr "``not r.search(s)``" + +#: ../../library/unittest.rst:1159 +msgid ":meth:`assertCountEqual(a, b) `" +msgstr ":meth:`assertCountEqual(a, b) `" + +#: ../../library/unittest.rst:1159 +msgid "" +"*a* and *b* have the same elements in the same number, regardless of their " +"order." +msgstr "*a* 和 *b* 具有同样数量的相同元素,无论其顺序如何。" + +#: ../../library/unittest.rst:1168 +msgid "" +"Test that *first* and *second* are approximately (or not approximately) " +"equal by computing the difference, rounding to the given number of decimal " +"*places* (default 7), and comparing to zero. Note that these methods round " +"the values to the given number of *decimal places* (i.e. like the " +":func:`round` function) and not *significant digits*." +msgstr "" +"测试 *first* 与 *second* 是否几乎相等,比较的标准是计算差值并舍入到 *places* 所指定的十进制位数 (默认为 7 " +"位),再与零相比较。 请注意此方法是将结果值舍入到指定的 *十进制位数* (即相当于 :func:`round` 函数) 而非 *有效位数*。" + +#: ../../library/unittest.rst:1174 +msgid "" +"If *delta* is supplied instead of *places* then the difference between " +"*first* and *second* must be less or equal to (or greater than) *delta*." +msgstr "" +"如果提供了 *delta* 而非 *places* 则 *first* 和 *second* 之间的差值必须小于等于 (或大于) *delta*。" + +#: ../../library/unittest.rst:1177 +msgid "Supplying both *delta* and *places* raises a :exc:`TypeError`." +msgstr "同时提供 *delta* 和 *places* 将引发 :exc:`TypeError`。" + +#: ../../library/unittest.rst:1179 +msgid "" +":meth:`assertAlmostEqual` automatically considers almost equal objects that " +"compare equal. :meth:`assertNotAlmostEqual` automatically fails if the " +"objects compare equal. Added the *delta* keyword argument." +msgstr "" +":meth:`assertAlmostEqual` 会自动将几乎相等的对象视为相等。 而如果对象相等则 " +":meth:`assertNotAlmostEqual` 会自动测试失败。 增加了 *delta* 关键字参数。" + +#: ../../library/unittest.rst:1190 +msgid "" +"Test that *first* is respectively >, >=, < or <= than *second* depending on " +"the method name. If not, the test will fail::" +msgstr "根据方法名分别测试 *first* 是否 >, >=, < 或 <= *second*。 如果不是,则测试失败::" + +#: ../../library/unittest.rst:1202 +msgid "" +"Test that a *regex* search matches (or does not match) *text*. In case of " +"failure, the error message will include the pattern and the *text* (or the " +"pattern and the part of *text* that unexpectedly matched). *regex* may be a" +" regular expression object or a string containing a regular expression " +"suitable for use by :func:`re.search`." +msgstr "" +"测试一个 *regex* 搜索匹配(或不匹配) *文本*。如果不匹配,错误信息中将包含匹配模式和 *文本*(或部分匹配失败的 *文本*)。*regex*" +" 可以是正则表达式对象或能够用于 :func:`re.search` 的包含正则表达式的字符串。" + +#: ../../library/unittest.rst:1208 +msgid "Added under the name ``assertRegexpMatches``." +msgstr "以方法名 ``assertRegexpMatches`` 添加。" + +#: ../../library/unittest.rst:1210 +msgid "" +"The method ``assertRegexpMatches()`` has been renamed to " +":meth:`.assertRegex`." +msgstr "方法 ``assertRegexpMatches()`` 已被改名为 :meth:`.assertRegex`。" + +#: ../../library/unittest.rst:1213 +msgid ":meth:`.assertNotRegex`." +msgstr ":meth:`.assertNotRegex`" + +#: ../../library/unittest.rst:1215 +msgid "" +"The name ``assertNotRegexpMatches`` is a deprecated alias for " +":meth:`.assertNotRegex`." +msgstr "``assertNotRegexpMatches`` 这个名字是 :meth:`.assertNotRegex` 的已被弃用的别名。" + +#: ../../library/unittest.rst:1222 +msgid "" +"Test that sequence *first* contains the same elements as *second*, " +"regardless of their order. When they don't, an error message listing the " +"differences between the sequences will be generated." +msgstr "" +"测试序列 *first* 与 *second* 是否包含同样的元素,无论其顺序如何。 当存在差异时,将生成一条错误消息来列出两个序列之间的差异。" + +#: ../../library/unittest.rst:1226 +msgid "" +"Duplicate elements are *not* ignored when comparing *first* and *second*. It" +" verifies whether each element has the same count in both sequences. " +"Equivalent to: ``assertEqual(Counter(list(first)), Counter(list(second)))`` " +"but works with sequences of unhashable objects as well." +msgstr "" +"重复的元素 *不会* 在 *first* 和 *second* 的比较中被忽略。 它会检查每个元素在两个序列中的出现次数是否相同。 等价于: " +"``assertEqual(Counter(list(first)), Counter(list(second)))`` " +"但还适用于包含不可哈希对象的序列。" + +#: ../../library/unittest.rst:1237 +msgid "" +"The :meth:`assertEqual` method dispatches the equality check for objects of " +"the same type to different type-specific methods. These methods are already" +" implemented for most of the built-in types, but it's also possible to " +"register new methods using :meth:`addTypeEqualityFunc`:" +msgstr "" +":meth:`assertEqual` 方法会将相同类型对象的相等性检查分派给不同的类型专属方法。 这些方法已被大多数内置类型所实现,但也可以使用 " +":meth:`addTypeEqualityFunc` 来注册新的方法:" + +#: ../../library/unittest.rst:1244 +msgid "" +"Registers a type-specific method called by :meth:`assertEqual` to check if " +"two objects of exactly the same *typeobj* (not subclasses) compare equal. " +"*function* must take two positional arguments and a third msg=None keyword " +"argument just as :meth:`assertEqual` does. It must raise " +":data:`self.failureException(msg) ` when inequality " +"between the first two parameters is detected -- possibly providing useful " +"information and explaining the inequalities in details in the error message." +msgstr "" +"注册一个由 :meth:`assertEqual` 调用的特定类型专属方法来检查恰好为相同 *typeobj* (而非子类) 的两个对象是否相等。 " +"*function* 必须接受两个位置参数和第三个 msg=None 关键字参数,就像 :meth:`assertEqual` 那样。 " +"当检测到前两个形参之间不相等时它必须引发 :data:`self.failureException(msg) ` " +"-- 可能还会提供有用的信息并在错误消息中详细解释不相等的原因。" + +#: ../../library/unittest.rst:1255 +msgid "" +"The list of type-specific methods automatically used by " +":meth:`~TestCase.assertEqual` are summarized in the following table. Note " +"that it's usually not necessary to invoke these methods directly." +msgstr "" +"以下是 :meth:`~TestCase.assertEqual` 自动选用的不同类型的比较方法。一般情况下不需要直接在测试中调用这些方法。" + +#: ../../library/unittest.rst:1260 +msgid "Used to compare" +msgstr "用作比较" + +#: ../../library/unittest.rst:1262 +msgid ":meth:`assertMultiLineEqual(a, b) `" +msgstr ":meth:`assertMultiLineEqual(a, b) `" + +#: ../../library/unittest.rst:1262 +msgid "strings" +msgstr "字符串" + +#: ../../library/unittest.rst:1265 +msgid ":meth:`assertSequenceEqual(a, b) `" +msgstr ":meth:`assertSequenceEqual(a, b) `" + +#: ../../library/unittest.rst:1265 +msgid "sequences" +msgstr "序列" + +#: ../../library/unittest.rst:1268 +msgid ":meth:`assertListEqual(a, b) `" +msgstr ":meth:`assertListEqual(a, b) `" + +#: ../../library/unittest.rst:1268 +msgid "lists" +msgstr "列表" + +#: ../../library/unittest.rst:1271 +msgid ":meth:`assertTupleEqual(a, b) `" +msgstr ":meth:`assertTupleEqual(a, b) `" + +#: ../../library/unittest.rst:1271 +msgid "tuples" +msgstr "元组" + +#: ../../library/unittest.rst:1274 +msgid ":meth:`assertSetEqual(a, b) `" +msgstr ":meth:`assertSetEqual(a, b) `" + +#: ../../library/unittest.rst:1274 +msgid "sets or frozensets" +msgstr "集合" + +#: ../../library/unittest.rst:1277 +msgid ":meth:`assertDictEqual(a, b) `" +msgstr ":meth:`assertDictEqual(a, b) `" + +#: ../../library/unittest.rst:1277 +msgid "dicts" +msgstr "字典" + +#: ../../library/unittest.rst:1285 +msgid "" +"Test that the multiline string *first* is equal to the string *second*. When" +" not equal a diff of the two strings highlighting the differences will be " +"included in the error message. This method is used by default when comparing" +" strings with :meth:`assertEqual`." +msgstr "" +"测试多行字符串 *first* 是否与字符串 *second* 相等。 当不相等时将在错误消息中包括两个字符串之间差异的高亮显示。 此方法会在通过 " +":meth:`assertEqual` 进行字符串比较时默认被使用。" + +#: ../../library/unittest.rst:1295 +msgid "" +"Tests that two sequences are equal. If a *seq_type* is supplied, both " +"*first* and *second* must be instances of *seq_type* or a failure will be " +"raised. If the sequences are different an error message is constructed that" +" shows the difference between the two." +msgstr "" +"测试两个序列是否相等。 如果提供了 *seq_type*,则 *first* 和 *second* 都必须为 *seq_type* " +"的实例否则将引发失败。 如果两个序列不相等则会构造一个错误消息来显示两者之间的差异。" + +#: ../../library/unittest.rst:1300 +msgid "" +"This method is not called directly by :meth:`assertEqual`, but it's used to " +"implement :meth:`assertListEqual` and :meth:`assertTupleEqual`." +msgstr "" +"此方法不会被 :meth:`assertEqual` 直接调用,但它会被用于实现 :meth:`assertListEqual` 和 " +":meth:`assertTupleEqual`。" + +#: ../../library/unittest.rst:1310 +msgid "" +"Tests that two lists or tuples are equal. If not, an error message is " +"constructed that shows only the differences between the two. An error is " +"also raised if either of the parameters are of the wrong type. These methods" +" are used by default when comparing lists or tuples with " +":meth:`assertEqual`." +msgstr "" +"测试两个列表或元组是否相等。 如果不相等,则会构造一个错误消息来显示两者之间的差异。 如果某个形参的类型不正确也会引发错误。 这些方法会在通过 " +":meth:`assertEqual` 进行列表或元组比较时默认被使用。" + +#: ../../library/unittest.rst:1321 +msgid "" +"Tests that two sets are equal. If not, an error message is constructed that" +" lists the differences between the sets. This method is used by default " +"when comparing sets or frozensets with :meth:`assertEqual`." +msgstr "" +"测试两个集合是否相等。 如果不相等,则会构造一个错误消息来列出两者之间的差异。 此方法会在通过 :meth:`assertEqual` " +"进行集合或冻结集合比较时默认被使用。" + +#: ../../library/unittest.rst:1325 +msgid "" +"Fails if either of *first* or *second* does not have a " +":meth:`set.difference` method." +msgstr "如果 *first* 或 *second* 没有 :meth:`set.difference` 方法则测试失败。" + +#: ../../library/unittest.rst:1333 +msgid "" +"Test that two dictionaries are equal. If not, an error message is " +"constructed that shows the differences in the dictionaries. This method will" +" be used by default to compare dictionaries in calls to :meth:`assertEqual`." +msgstr "" +"测试两个字典是否相等。 如果不相等,则会构造一个错误消息来显示两个字典的差异。 此方法会在对 :meth:`assertEqual` " +"的调用中默认被用来进行字典的比较。" + +#: ../../library/unittest.rst:1344 +msgid "" +"Finally the :class:`TestCase` provides the following methods and attributes:" +msgstr "最后 :class:`TestCase` 还提供了以下的方法和属性:" + +#: ../../library/unittest.rst:1349 +msgid "" +"Signals a test failure unconditionally, with *msg* or ``None`` for the error" +" message." +msgstr "无条件地发出测试失败消息,附带错误消息 *msg* 或 ``None``。" + +#: ../../library/unittest.rst:1355 +msgid "" +"This class attribute gives the exception raised by the test method. If a " +"test framework needs to use a specialized exception, possibly to carry " +"additional information, it must subclass this exception in order to \"play " +"fair\" with the framework. The initial value of this attribute is " +":exc:`AssertionError`." +msgstr "" +"这个类属性给出测试方法所引发的异常。 如果某个测试框架需要使用专门的异常,并可能附带额外的信息,则必须子类化该类以便与框架“正常互动”。 " +"这个属性的初始值为 :exc:`AssertionError`。" + +#: ../../library/unittest.rst:1364 +msgid "" +"This class attribute determines what happens when a custom failure message " +"is passed as the msg argument to an assertXYY call that fails. ``True`` is " +"the default value. In this case, the custom message is appended to the end " +"of the standard failure message. When set to ``False``, the custom message " +"replaces the standard message." +msgstr "" +"这个类属性决定当将一个自定义失败消息作为 msg 参数传给一个失败的 assertXYY 调用时会发生什么。默认值为 ``True``。 " +"在此情况下,自定义消息会被添加到标准失败消息的末尾。 当设为 ``False`` 时,自定义消息会替换标准消息。" + +#: ../../library/unittest.rst:1370 +msgid "" +"The class setting can be overridden in individual test methods by assigning " +"an instance attribute, self.longMessage, to ``True`` or ``False`` before " +"calling the assert methods." +msgstr "" +"类设置可以通过在调用断言方法之前将一个实例属性 self.longMessage 赋值为 ``True`` 或 ``False`` " +"在单个测试方法中进行重载。" + +#: ../../library/unittest.rst:1374 +msgid "The class setting gets reset before each test call." +msgstr "类设置会在每个测试调用之前被重置。" + +#: ../../library/unittest.rst:1381 +msgid "" +"This attribute controls the maximum length of diffs output by assert methods" +" that report diffs on failure. It defaults to 80*8 characters. Assert " +"methods affected by this attribute are :meth:`assertSequenceEqual` " +"(including all the sequence comparison methods that delegate to it), " +":meth:`assertDictEqual` and :meth:`assertMultiLineEqual`." +msgstr "" +"这个属性控制来自在测试失败时报告 diffs 的断言方法的 diffs 输出的最大长度。 它默认为 80*8 个字符。 这个属性所影响的断言方法有 " +":meth:`assertSequenceEqual` (包括所有委托给它的序列比较方法), :meth:`assertDictEqual` 以及 " +":meth:`assertMultiLineEqual`。" + +#: ../../library/unittest.rst:1388 +msgid "" +"Setting ``maxDiff`` to ``None`` means that there is no maximum length of " +"diffs." +msgstr "将 ``maxDiff`` 设为 ``None`` 表示不限制 diffs 的最大长度。" + +#: ../../library/unittest.rst:1394 +msgid "" +"Testing frameworks can use the following methods to collect information on " +"the test:" +msgstr "测试框架可使用下列方法来收集测试的有关信息:" + +#: ../../library/unittest.rst:1400 +msgid "" +"Return the number of tests represented by this test object. For " +":class:`TestCase` instances, this will always be ``1``." +msgstr "返回此测试对象所提供的测试数量。 对于 :class:`TestCase` 实例,该数量将总是为 ``1``。" + +#: ../../library/unittest.rst:1406 +msgid "" +"Return an instance of the test result class that should be used for this " +"test case class (if no other result instance is provided to the :meth:`run` " +"method)." +msgstr "返回此测试类所要使用的测试结果类的实例(如果未向 :meth:`run` 方法提供其他结果实例)。" + +#: ../../library/unittest.rst:1410 +msgid "" +"For :class:`TestCase` instances, this will always be an instance of " +":class:`TestResult`; subclasses of :class:`TestCase` should override this as" +" necessary." +msgstr "" +"对于 :class:`TestCase` 实例,该返回值将总是为 :class:`TestResult` 的实例;:class:`TestCase` " +"的子类应当在有必要时重写此方法。" + +#: ../../library/unittest.rst:1417 +msgid "" +"Return a string identifying the specific test case. This is usually the " +"full name of the test method, including the module and class name." +msgstr "返回一个标识指定测试用例的字符串。 该返回值通常为测试方法的完整名称,包括模块名和类名。" + +#: ../../library/unittest.rst:1423 +msgid "" +"Returns a description of the test, or ``None`` if no description has been " +"provided. The default implementation of this method returns the first line " +"of the test method's docstring, if available, or ``None``." +msgstr "" +"返回测试的描述,如果未提供描述则返回 ``None``。 此方法的默认实现将在可用的情况下返回测试方法的文档字符串的第一行,或者返回 ``None``。" + +#: ../../library/unittest.rst:1428 +msgid "" +"In 3.1 this was changed to add the test name to the short description even " +"in the presence of a docstring. This caused compatibility issues with " +"unittest extensions and adding the test name was moved to the " +":class:`TextTestResult` in Python 3.2." +msgstr "" +"在 3.1 中已修改此方法将测试名称添加到简短描述中,即使存在文档字符串。 这导致了与单元测试扩展的兼容性问题因而在 Python 3.2 " +"中将添加测试名称操作改到 :class:`TextTestResult` 中。" + +#: ../../library/unittest.rst:1437 +msgid "" +"Add a function to be called after :meth:`tearDown` to cleanup resources used" +" during the test. Functions will be called in reverse order to the order " +"they are added (:abbr:`LIFO (last-in, first-out)`). They are called with " +"any arguments and keyword arguments passed into :meth:`addCleanup` when they" +" are added." +msgstr "" +"在 :meth:`tearDown` 之后添加了一个要调用的函数来清理测试期间所使用的资源。 函数将按它们被添加的相反顺序被调用 " +"(:abbr:`LIFO (last-in, first-out)`)。 它们在调用时将附带它们被添加时传给 :meth:`addCleanup` " +"的任何参数和关键字参数。" + +#: ../../library/unittest.rst:1443 +msgid "" +"If :meth:`setUp` fails, meaning that :meth:`tearDown` is not called, then " +"any cleanup functions added will still be called." +msgstr "如果 :meth:`setUp` 失败,即意味着 :meth:`tearDown` 未被调用,则已添加的任何清理函数仍将被调用。" + +#: ../../library/unittest.rst:1451 +msgid "" +"This method is called unconditionally after :meth:`tearDown`, or after " +":meth:`setUp` if :meth:`setUp` raises an exception." +msgstr "" +"此方法会在 :meth:`tearDown` 之后,或者如果 :meth:`setUp` 引发了异常则会在 :meth:`setUp` 之后被调用。" + +#: ../../library/unittest.rst:1454 +msgid "" +"It is responsible for calling all the cleanup functions added by " +":meth:`addCleanup`. If you need cleanup functions to be called *prior* to " +":meth:`tearDown` then you can call :meth:`doCleanups` yourself." +msgstr "" +"它将负责调用由 :meth:`addCleanup` 添加的所有清理函数。 如果你需要在 :meth:`tearDown` *之前* " +"调用清理函数则可以自行调用 :meth:`doCleanups`。" + +#: ../../library/unittest.rst:1459 +msgid "" +":meth:`doCleanups` pops methods off the stack of cleanup functions one at a " +"time, so it can be called at any time." +msgstr ":meth:`doCleanups` 每次会弹出清理函数栈中的一个方法,因此它可以在任何时候被调用。" + +#: ../../library/unittest.rst:1466 +msgid "" +"Add a function to be called after :meth:`tearDownClass` to cleanup resources" +" used during the test class. Functions will be called in reverse order to " +"the order they are added (:abbr:`LIFO (last-in, first-out)`). They are " +"called with any arguments and keyword arguments passed into " +":meth:`addClassCleanup` when they are added." +msgstr "" +"在Add a function to be called after :meth:`tearDownClass` " +"之后添加了一个要调用的函数来清理测试类运行期间所使用的资源。 函数将按它们被添加的相反顺序被调用 (:abbr:`LIFO (last-in, " +"first-out)`)。 它们在调用时将附带它们被添加时传给 :meth:`addClassCleanup` 的任何参数和关键字参数。" + +#: ../../library/unittest.rst:1472 +msgid "" +"If :meth:`setUpClass` fails, meaning that :meth:`tearDownClass` is not " +"called, then any cleanup functions added will still be called." +msgstr "" +"如果 :meth:`setUpClass` 失败,即意味着 :meth:`tearDownClass` 未被调用,则已添加的任何清理函数仍将被调用。" + +#: ../../library/unittest.rst:1480 +msgid "" +"This method is called unconditionally after :meth:`tearDownClass`, or after " +":meth:`setUpClass` if :meth:`setUpClass` raises an exception." +msgstr "" +"此方法会在 :meth:`tearDownClass` 之后无条件地被调用,或者如果 :meth:`setUpClass` 引发了异常则会在 " +":meth:`setUpClass` 之后被调用。" + +#: ../../library/unittest.rst:1483 +msgid "" +"It is responsible for calling all the cleanup functions added by " +":meth:`addClassCleanup`. If you need cleanup functions to be called *prior* " +"to :meth:`tearDownClass` then you can call :meth:`doClassCleanups` yourself." +msgstr "" +"它将负责访问由 :meth:`addClassCleanup` 添加的所有清理函数。 如果你需要在 :meth:`tearDownClass` *之前*" +" 调用清理函数则可以自行调用 :meth:`doClassCleanups`。" + +#: ../../library/unittest.rst:1488 +msgid "" +":meth:`doClassCleanups` pops methods off the stack of cleanup functions one " +"at a time, so it can be called at any time." +msgstr ":meth:`doClassCleanups` 每次会弹出清理函数栈中的一个方法,因此它在任何时候被调用。" + +#: ../../library/unittest.rst:1496 +msgid "" +"This class provides an API similar to :class:`TestCase` and also accepts " +"coroutines as test functions." +msgstr "这个类提供了与 :class:`TestCase` 类似的 API 并也接受协程作为测试函数。" + +#: ../../library/unittest.rst:1503 +msgid "" +"Method called to prepare the test fixture. This is called after " +":meth:`setUp`. This is called immediately before calling the test method; " +"other than :exc:`AssertionError` or :exc:`SkipTest`, any exception raised by" +" this method will be considered an error rather than a test failure. The " +"default implementation does nothing." +msgstr "" +"为测试预备而调用的方法。 此方法会在 :meth:`setUp` 之后被调用。 此方法将在调用测试方法之前立即被调用;除了 " +":exc:`AssertionError` 或 :exc:`SkipTest`,此方法所引发的任何异常都将被视为错误而非测试失败。 " +"默认的实现将不做任何事情。" + +#: ../../library/unittest.rst:1511 +msgid "" +"Method called immediately after the test method has been called and the " +"result recorded. This is called before :meth:`tearDown`. This is called " +"even if the test method raised an exception, so the implementation in " +"subclasses may need to be particularly careful about checking internal " +"state. Any exception, other than :exc:`AssertionError` or :exc:`SkipTest`, " +"raised by this method will be considered an additional error rather than a " +"test failure (thus increasing the total number of reported errors). This " +"method will only be called if the :meth:`asyncSetUp` succeeds, regardless of" +" the outcome of the test method. The default implementation does nothing." +msgstr "" +"在测试方法被调用并记录结果之后立即被调用的方法。 此方法会在 :meth:`tearDown` 之前被调用。 " +"此方法即使在测试方法引发异常时仍会被调用,因此子类中的实现将需要特别注意检查内部状态。 除 :exc:`AssertionError` 或 " +":exc:`SkipTest` 外,此方法所引发的任何异常都将被视为额外的错误而非测试失败(因而会增加总计错误报告数)。 此方法将只在 " +":meth:`asyncSetUp` 成功执行时被调用,无论测试方法的结果如何。 默认的实现将不做任何事情。" + +#: ../../library/unittest.rst:1523 +msgid "" +"This method accepts a coroutine that can be used as a cleanup function." +msgstr "此方法接受一个可被用作清理函数的协程。" + +#: ../../library/unittest.rst:1527 +msgid "" +"Sets up a new event loop to run the test, collecting the result into the " +":class:`TestResult` object passed as *result*. If *result* is omitted or " +"``None``, a temporary result object is created (by calling the " +":meth:`defaultTestResult` method) and used. The result object is returned to" +" :meth:`run`'s caller. At the end of the test all the tasks in the event " +"loop are cancelled." +msgstr "" +"设置一个新的事件循环来运行测试,将结果收集至作为 *result* 传入的 :class:`TestResult`。 如果 *result* 被省略或为" +" ``None``,则会创建一个临时的结果对象(通过调用 :meth:`defaultTestResult` 方法)并使用它。 结果对象会被返回给 " +":meth:`run` 的调用方。 在测试结束时事件循环中的所有任务都将被取消。" + +#: ../../library/unittest.rst:1535 +msgid "An example illustrating the order::" +msgstr "一个显示先后顺序的例子::" + +#: ../../library/unittest.rst:1571 +msgid "" +"After running the test, ``events`` would contain ``[\"setUp\", " +"\"asyncSetUp\", \"test_response\", \"asyncTearDown\", \"tearDown\", " +"\"cleanup\"]``." +msgstr "" +"在运行测试之后,``events`` 将会包含 ``[\"setUp\", \"asyncSetUp\", \"test_response\", " +"\"asyncTearDown\", \"tearDown\", \"cleanup\"]``。" + +#: ../../library/unittest.rst:1576 +msgid "" +"This class implements the portion of the :class:`TestCase` interface which " +"allows the test runner to drive the test, but does not provide the methods " +"which test code can use to check and report errors. This is used to create " +"test cases using legacy test code, allowing it to be integrated into a " +":mod:`unittest`-based test framework." +msgstr "" +"这个类实现了 :class:`TestCase` 的部分接口,允许测试运行方驱动测试,但不提供可被测试代码用来检查和报告错误的方法。 " +"这个类被用于创建使用传统测试代码的测试用例,允许它被集成到基于 :mod:`unittest` 的测试框架中。" + +#: ../../library/unittest.rst:1586 +msgid "Deprecated aliases" +msgstr "一些已被弃用的别名" + +#: ../../library/unittest.rst:1588 +msgid "" +"For historical reasons, some of the :class:`TestCase` methods had one or " +"more aliases that are now deprecated. The following table lists the correct" +" names along with their deprecated aliases:" +msgstr "由于历史原因,某些 :class:`TestCase` 方法具有一个或几个已目前已弃用的别名。 下表列出了它们的正确名称和已弃用的别名:" + +#: ../../library/unittest.rst:1593 +msgid "Method Name" +msgstr "方法名" + +#: ../../library/unittest.rst:1593 ../../library/unittest.rst:1593 +msgid "Deprecated alias" +msgstr "已弃用的别名" + +#: ../../library/unittest.rst:1595 +msgid ":meth:`.assertEqual`" +msgstr ":meth:`.assertEqual`" + +#: ../../library/unittest.rst:1595 +msgid "failUnlessEqual" +msgstr "failUnlessEqual" + +#: ../../library/unittest.rst:1595 +msgid "assertEquals" +msgstr "assertEquals" + +#: ../../library/unittest.rst:1596 +msgid ":meth:`.assertNotEqual`" +msgstr ":meth:`.assertNotEqual`" + +#: ../../library/unittest.rst:1596 +msgid "failIfEqual" +msgstr "failIfEqual" + +#: ../../library/unittest.rst:1596 +msgid "assertNotEquals" +msgstr "assertNotEquals" + +#: ../../library/unittest.rst:1597 +msgid ":meth:`.assertTrue`" +msgstr ":meth:`.assertTrue`" + +#: ../../library/unittest.rst:1597 +msgid "failUnless" +msgstr "failUnless" + +#: ../../library/unittest.rst:1597 +msgid "assert\\_" +msgstr "assert\\_" + +#: ../../library/unittest.rst:1598 +msgid ":meth:`.assertFalse`" +msgstr ":meth:`.assertFalse`" + +#: ../../library/unittest.rst:1598 +msgid "failIf" +msgstr "failIf" + +#: ../../library/unittest.rst:1599 +msgid ":meth:`.assertRaises`" +msgstr ":meth:`.assertRaises`" + +#: ../../library/unittest.rst:1599 +msgid "failUnlessRaises" +msgstr "failUnlessRaises" + +#: ../../library/unittest.rst:1600 +msgid ":meth:`.assertAlmostEqual`" +msgstr ":meth:`.assertAlmostEqual`" + +#: ../../library/unittest.rst:1600 +msgid "failUnlessAlmostEqual" +msgstr "failUnlessAlmostEqual" + +#: ../../library/unittest.rst:1600 +msgid "assertAlmostEquals" +msgstr "assertAlmostEquals" + +#: ../../library/unittest.rst:1601 +msgid ":meth:`.assertNotAlmostEqual`" +msgstr ":meth:`.assertNotAlmostEqual`" + +#: ../../library/unittest.rst:1601 +msgid "failIfAlmostEqual" +msgstr "failIfAlmostEqual" + +#: ../../library/unittest.rst:1601 +msgid "assertNotAlmostEquals" +msgstr "assertNotAlmostEquals" + +#: ../../library/unittest.rst:1602 +msgid ":meth:`.assertRegex`" +msgstr ":meth:`.assertRegex`" + +#: ../../library/unittest.rst:1602 +msgid "assertRegexpMatches" +msgstr "assertRegexpMatches" + +#: ../../library/unittest.rst:1603 +msgid ":meth:`.assertNotRegex`" +msgstr ":meth:`.assertNotRegex`" + +#: ../../library/unittest.rst:1603 +msgid "assertNotRegexpMatches" +msgstr "assertNotRegexpMatches" + +#: ../../library/unittest.rst:1604 +msgid ":meth:`.assertRaisesRegex`" +msgstr ":meth:`.assertRaisesRegex`" + +#: ../../library/unittest.rst:1604 +msgid "assertRaisesRegexp" +msgstr "assertRaisesRegexp" + +#: ../../library/unittest.rst:1607 +msgid "The fail* aliases listed in the second column have been deprecated." +msgstr "在第二列中列出的 fail* 别名已经被弃用。" + +#: ../../library/unittest.rst:1609 +msgid "The assert* aliases listed in the third column have been deprecated." +msgstr "在第三列中列出的 assert* 别名已经被弃用。" + +#: ../../library/unittest.rst:1611 +msgid "" +"``assertRegexpMatches`` and ``assertRaisesRegexp`` have been renamed to " +":meth:`.assertRegex` and :meth:`.assertRaisesRegex`." +msgstr "" +"``assertRegexpMatches`` 和 ``assertRaisesRegexp`` 已经被重命名为 " +":meth:`.assertRegex` 和 :meth:`.assertRaisesRegex`。" + +#: ../../library/unittest.rst:1614 +msgid "" +"The ``assertNotRegexpMatches`` name is deprecated in favor of " +":meth:`.assertNotRegex`." +msgstr "``assertNotRegexpMatches`` 这个名称已被弃用并应改用 :meth:`.assertNotRegex`。" + +#: ../../library/unittest.rst:1620 +msgid "Grouping tests" +msgstr "分组测试" + +#: ../../library/unittest.rst:1624 +msgid "" +"This class represents an aggregation of individual test cases and test " +"suites. The class presents the interface needed by the test runner to allow " +"it to be run as any other test case. Running a :class:`TestSuite` instance " +"is the same as iterating over the suite, running each test individually." +msgstr "" +"这个类代表对单独测试用例和测试套件的聚合。 这个类提供给测试运行方所需的接口以允许其像任何其他测试用例一样运行。 运行一个 " +":class:`TestSuite` 实例与对套件执行迭代来逐一运行每个测试的效果相同。" + +#: ../../library/unittest.rst:1629 +msgid "" +"If *tests* is given, it must be an iterable of individual test cases or " +"other test suites that will be used to build the suite initially. Additional" +" methods are provided to add test cases and suites to the collection later " +"on." +msgstr "" +"如果给出了 *tests*,则它必须是一个包含单独测试用例的可迭代对象或是将被用于初始构建测试套件的其他测试套件。 " +"还有一些附加的方法会被提供用来在随后向测试集添加测试用例和测试套件。" + +#: ../../library/unittest.rst:1633 +msgid "" +":class:`TestSuite` objects behave much like :class:`TestCase` objects, " +"except they do not actually implement a test. Instead, they are used to " +"aggregate tests into groups of tests that should be run together. Some " +"additional methods are available to add tests to :class:`TestSuite` " +"instances:" +msgstr "" +":class:`TestSuite` 对象的行为与 :class:`TestCase` 对象很相似,区别在于它们并不会真正实现一个测试。 " +"它们会被用来将测试聚合为多个要同时运行的测试分组。 还有一些附加的方法会被用来向 :class:`TestSuite` 实例添加测试:" + +#: ../../library/unittest.rst:1641 +msgid "Add a :class:`TestCase` or :class:`TestSuite` to the suite." +msgstr "向测试套件添加 :class:`TestCase` 或 :class:`TestSuite`。" + +#: ../../library/unittest.rst:1646 +msgid "" +"Add all the tests from an iterable of :class:`TestCase` and " +":class:`TestSuite` instances to this test suite." +msgstr "将来自包含 :class:`TestCase` 和 :class:`TestSuite` 实例的可迭代对象的所有测试添加到这个测试套件。" + +#: ../../library/unittest.rst:1649 +msgid "" +"This is equivalent to iterating over *tests*, calling :meth:`addTest` for " +"each element." +msgstr "这等价于对 *tests* 进行迭代,并为其中的每个元素调用 :meth:`addTest`。" + +#: ../../library/unittest.rst:1652 +msgid "" +":class:`TestSuite` shares the following methods with :class:`TestCase`:" +msgstr ":class:`TestSuite` 与 :class:`TestCase` 共享下列方法:" + +#: ../../library/unittest.rst:1657 +msgid "" +"Run the tests associated with this suite, collecting the result into the " +"test result object passed as *result*. Note that unlike " +":meth:`TestCase.run`, :meth:`TestSuite.run` requires the result object to be" +" passed in." +msgstr "" +"运行与这个套件相关联的测试,将结果收集到作为 *result* 传入的测试结果对象中。 请注意与 :meth:`TestCase.run` " +"的区别,:meth:`TestSuite.run` 必须传入结果对象。" + +#: ../../library/unittest.rst:1665 +msgid "" +"Run the tests associated with this suite without collecting the result. This" +" allows exceptions raised by the test to be propagated to the caller and can" +" be used to support running tests under a debugger." +msgstr "运行与这个套件相关联的测试而不收集结果。 这允许测试所引发的异常被传递给调用方并可被用于支持在调试器中运行测试。" + +#: ../../library/unittest.rst:1672 +msgid "" +"Return the number of tests represented by this test object, including all " +"individual tests and sub-suites." +msgstr "返回此测试对象所提供的测试数量,包括单独的测试和子套件。" + +#: ../../library/unittest.rst:1678 +msgid "" +"Tests grouped by a :class:`TestSuite` are always accessed by iteration. " +"Subclasses can lazily provide tests by overriding :meth:`__iter__`. Note " +"that this method may be called several times on a single suite (for example " +"when counting tests or comparing for equality) so the tests returned by " +"repeated iterations before :meth:`TestSuite.run` must be the same for each " +"call iteration. After :meth:`TestSuite.run`, callers should not rely on the " +"tests returned by this method unless the caller uses a subclass that " +"overrides :meth:`TestSuite._removeTestAtIndex` to preserve test references." +msgstr "" +"由 :class:`TestSuite` 分组的测试总是可以通过迭代来访问。 其子类可以通过重载 :meth:`__iter__` 来惰性地提供测试。 " +"请注意此方法可在单个套件上多次被调用(例如在计数测试或相等性比较时),为此在 :meth:`TestSuite.run` " +"之前重复迭代所返回的测试对于每次调用迭代都必须相同。 在 :meth:`TestSuite.run` " +"之后,调用方不应继续访问此方法所返回的测试,除非调用方使用重载了 :meth:`TestSuite._removeTestAtIndex` " +"的子类来保留对测试的引用。" + +#: ../../library/unittest.rst:1688 +msgid "" +"In earlier versions the :class:`TestSuite` accessed tests directly rather " +"than through iteration, so overriding :meth:`__iter__` wasn't sufficient for" +" providing tests." +msgstr "" +"在较早的版本中 :class:`TestSuite` 会直接访问测试而不是通过迭代,因此只重载 :meth:`__iter__` 并不足以提供所有测试。" + +#: ../../library/unittest.rst:1693 +msgid "" +"In earlier versions the :class:`TestSuite` held references to each " +":class:`TestCase` after :meth:`TestSuite.run`. Subclasses can restore that " +"behavior by overriding :meth:`TestSuite._removeTestAtIndex`." +msgstr "" +"在较早的版本中 :class:`TestSuite` 会在 :meth:`TestSuite.run` 之后保留对每个 " +":class:`TestCase` 的引用。 其子类可以通过重载 :meth:`TestSuite._removeTestAtIndex` " +"来恢复此行为。" + +#: ../../library/unittest.rst:1698 +msgid "" +"In the typical usage of a :class:`TestSuite` object, the :meth:`run` method " +"is invoked by a :class:`TestRunner` rather than by the end-user test " +"harness." +msgstr "" +"在 :class:`TestSuite` 对象的典型应用中,:meth:`run` 方法是由 :class:`TestRunner` " +"唤起而不是由最终用户测试来控制。" + +#: ../../library/unittest.rst:1703 +msgid "Loading and running tests" +msgstr "加载和运行测试" + +#: ../../library/unittest.rst:1707 +msgid "" +"The :class:`TestLoader` class is used to create test suites from classes and" +" modules. Normally, there is no need to create an instance of this class; " +"the :mod:`unittest` module provides an instance that can be shared as " +":data:`unittest.defaultTestLoader`. Using a subclass or instance, however, " +"allows customization of some configurable properties." +msgstr "" +":class:`TestLoader` 类可被用来基于类和模块创建测试套件。 通常,没有必要创建该类的实例;:mod:`unittest` " +"模块提供了一个可作为 :data:`unittest.defaultTestLoader` 共享的实例。 " +"但是,使用子类或实例允许对某些配置属性进行定制。" + +#: ../../library/unittest.rst:1713 +msgid ":class:`TestLoader` objects have the following attributes:" +msgstr ":class:`TestLoader` 对象具有下列属性:" + +#: ../../library/unittest.rst:1718 +msgid "" +"A list of the non-fatal errors encountered while loading tests. Not reset by" +" the loader at any point. Fatal errors are signalled by the relevant a " +"method raising an exception to the caller. Non-fatal errors are also " +"indicated by a synthetic test that will raise the original error when run." +msgstr "" +"包含在加载测试期间遇到的非致命错误的列表。 在任何时候都不会被加载方重置。 致命错误是通过相关方法引发一个异常来向调用方发出信号的。 " +"非致命错误也是由一个将在运行时引发原始错误的合成测试来提示的。" + +#: ../../library/unittest.rst:1727 +msgid ":class:`TestLoader` objects have the following methods:" +msgstr ":class:`TestLoader` 对象具有下列方法:" + +#: ../../library/unittest.rst:1732 +msgid "" +"Return a suite of all test cases contained in the :class:`TestCase`\\ " +"-derived :class:`testCaseClass`." +msgstr "返回一个包含在 :class:`TestCase` 所派生的 :class:`testCaseClass` 中的所有测试用例的测试套件。" + +#: ../../library/unittest.rst:1735 +msgid "" +"A test case instance is created for each method named by " +":meth:`getTestCaseNames`. By default these are the method names beginning " +"with ``test``. If :meth:`getTestCaseNames` returns no methods, but the " +":meth:`runTest` method is implemented, a single test case is created for " +"that method instead." +msgstr "" +"会为每个由 :meth:`getTestCaseNames` 指明的方法创建一个测试用例实例。 在默认情况下这些都是以 ``test`` " +"开头的方法名称。 如果 :meth:`getTestCaseNames` 不返回任何方法,但 :meth:`runTest` " +"方法已被实现,则会为该方法创建一个单独的测试用例。" + +#: ../../library/unittest.rst:1744 +msgid "" +"Return a suite of all test cases contained in the given module. This method " +"searches *module* for classes derived from :class:`TestCase` and creates an " +"instance of the class for each test method defined for the class." +msgstr "" +"返回包含在给定模块中的所有测试用例的测试套件。 此方法会在 *module* 中搜索从派生自 :class:`TestCase` " +"的类并为该类定义的每个测试方法创建一个类实例。" + +#: ../../library/unittest.rst:1751 +msgid "" +"While using a hierarchy of :class:`TestCase`\\ -derived classes can be " +"convenient in sharing fixtures and helper functions, defining test methods " +"on base classes that are not intended to be instantiated directly does not " +"play well with this method. Doing so, however, can be useful when the " +"fixtures are different and defined in subclasses." +msgstr "" +"虽然使用 :class:`TestCase` " +"所派生的类的层级结构可以方便地共享配置和辅助函数,但在不打算直接实例化的基类上定义测试方法并不能很好地配合此方法使用。 " +"不过,当配置有差异并且定义在子类当中时这样做还是有用处的。" + +#: ../../library/unittest.rst:1757 +msgid "" +"If a module provides a ``load_tests`` function it will be called to load the" +" tests. This allows modules to customize test loading. This is the " +"`load_tests protocol`_. The *pattern* argument is passed as the third " +"argument to ``load_tests``." +msgstr "" +"如果一个模块提供了 ``load_tests`` 函数则它将被调用以加载测试。 这允许模块自行定制测试加载过程。 这就称为 `load_tests " +"protocol`_。 *pattern* 参数会被作为传给 ``load_tests`` 的第三个参数。" + +#: ../../library/unittest.rst:1762 +msgid "Support for ``load_tests`` added." +msgstr "添加了对 ``load_tests`` 的支持。" + +#: ../../library/unittest.rst:1765 +msgid "" +"The undocumented and unofficial *use_load_tests* default argument is " +"deprecated and ignored, although it is still accepted for backward " +"compatibility. The method also now accepts a keyword-only argument " +"*pattern* which is passed to ``load_tests`` as the third argument." +msgstr "" +"未写入文档的非官方 *use_load_tests* 默认参数已被弃用并忽略,但是它仍然被接受以便向下兼容。 此方法现在还接受一个仅限关键字参数 " +"*pattern*,它会被作为传给 ``load_tests`` 的第三个参数。" + +#: ../../library/unittest.rst:1774 +msgid "Return a suite of all test cases given a string specifier." +msgstr "返回由给出了字符串形式规格描述的所有测试用例组成的测试套件。" + +#: ../../library/unittest.rst:1776 +msgid "" +"The specifier *name* is a \"dotted name\" that may resolve either to a " +"module, a test case class, a test method within a test case class, a " +":class:`TestSuite` instance, or a callable object which returns a " +":class:`TestCase` or :class:`TestSuite` instance. These checks are applied " +"in the order listed here; that is, a method on a possible test case class " +"will be picked up as \"a test method within a test case class\", rather than" +" \"a callable object\"." +msgstr "" +"描述名称 *name* 是一个“带点号的名称”,它可以被解析为一个模块、一个测试用例类、一个测试用例类内部的测试方法、一个 " +":class:`TestSuite` 实例,或者一个返回 :class:`TestCase` 或 :class:`TestSuite` " +"实例的可调用对象。 " +"这些检查将按在此列出的顺序执行;也就是说,一个可能的测试用例类上的方法将作为“一个测试用例内部的测试方法”而非作为“一个可调用对象”被选定。" + +#: ../../library/unittest.rst:1784 +msgid "" +"For example, if you have a module :mod:`SampleTests` containing a " +":class:`TestCase`\\ -derived class :class:`SampleTestCase` with three test " +"methods (:meth:`test_one`, :meth:`test_two`, and :meth:`test_three`), the " +"specifier ``'SampleTests.SampleTestCase'`` would cause this method to return" +" a suite which will run all three test methods. Using the specifier " +"``'SampleTests.SampleTestCase.test_two'`` would cause it to return a test " +"suite which will run only the :meth:`test_two` test method. The specifier " +"can refer to modules and packages which have not been imported; they will be" +" imported as a side-effect." +msgstr "" +"举例来说,如果你有一个模块 :mod:`SampleTests`,其中包含一个派生自 :class:`TestCase` 的类 " +":class:`SampleTestCase`,其中包含三个测试方法 (:meth:`test_one`, :meth:`test_two` 和 " +":meth:`test_three`)。 则描述名称 ``'SampleTests.SampleTestCase'`` " +"将使此方法返回一个测试套件,它将运行全部三个测试方法。 使用描述名称 ``'SampleTests.SampleTestCase.test_two'``" +" 将使它返回一个测试套件,它将仅运行 :meth:`test_two` 测试方法。 描述名称可以指向尚未被导入的模块和包;它们将作为附带影响被导入。" + +#: ../../library/unittest.rst:1794 +msgid "The method optionally resolves *name* relative to the given *module*." +msgstr "本模块可以选择相对于给定的 *module* 来解析 *name*。" + +#: ../../library/unittest.rst:1796 +msgid "" +"If an :exc:`ImportError` or :exc:`AttributeError` occurs while traversing " +"*name* then a synthetic test that raises that error when run will be " +"returned. These errors are included in the errors accumulated by " +"self.errors." +msgstr "" +"如果在遍历 *name* 时发生了 :exc:`ImportError` 或 :exc:`AttributeError` " +"则在运行时引发该错误的合成测试将被返回。 这些错误被包括在由 self.errors 所积累的错误中。" + +#: ../../library/unittest.rst:1805 +msgid "" +"Similar to :meth:`loadTestsFromName`, but takes a sequence of names rather " +"than a single name. The return value is a test suite which supports all the" +" tests defined for each name." +msgstr "" +"类似于 :meth:`loadTestsFromName`,但是接受一个名称序列而不是单个名称。 " +"返回值是一个测试套件,它支持为每个名称所定义的所有测试。" + +#: ../../library/unittest.rst:1812 +msgid "" +"Return a sorted sequence of method names found within *testCaseClass*; this " +"should be a subclass of :class:`TestCase`." +msgstr "返回由 *testCaseClass* 中找到的方法名称组成的已排序的序列;这应当是 :class:`TestCase` 的一个子类。" + +#: ../../library/unittest.rst:1818 +msgid "" +"Find all the test modules by recursing into subdirectories from the " +"specified start directory, and return a TestSuite object containing them. " +"Only test files that match *pattern* will be loaded. (Using shell style " +"pattern matching.) Only module names that are importable (i.e. are valid " +"Python identifiers) will be loaded." +msgstr "" +"通过从指定的开始目录向其子目录递归来找出所有测试模块,并返回一个包含该结果的 TestSuite 对象。 只有与 *pattern* " +"匹配的测试文件才会被加载。 (使用 shell 风格的模式匹配。) 只有可导入的模块名称(即有效的 Python 标识符)将会被加载。" + +#: ../../library/unittest.rst:1824 +msgid "" +"All test modules must be importable from the top level of the project. If " +"the start directory is not the top level directory then the top level " +"directory must be specified separately." +msgstr "所有测试模块都必须可以从项目的最高层级上导入。 如果起始目录不是最高层级目录则必须单独指明最高层级目录。" + +#: ../../library/unittest.rst:1828 +msgid "" +"If importing a module fails, for example due to a syntax error, then this " +"will be recorded as a single error and discovery will continue. If the " +"import failure is due to :exc:`SkipTest` being raised, it will be recorded " +"as a skip instead of an error." +msgstr "" +"如果导入某个模块失败,比如因为存在语法错误,则会将其记录为单独的错误并将继续查找模块。 如果导入失败是因为引发了 " +":exc:`SkipTest`,则会将其记录为跳过而不是错误。" + +#: ../../library/unittest.rst:1833 +msgid "" +"If a package (a directory containing a file named :file:`__init__.py`) is " +"found, the package will be checked for a ``load_tests`` function. If this " +"exists then it will be called ``package.load_tests(loader, tests, " +"pattern)``. Test discovery takes care to ensure that a package is only " +"checked for tests once during an invocation, even if the load_tests function" +" itself calls ``loader.discover``." +msgstr "" +"如果找到了一个包(即包含名为 :file:`__init__.py` 的文件的目录),则将在包中查找 ``load_tests`` 函数。 " +"如果存在此函数则将对其执行调用 ``package.load_tests(loader, tests, pattern)``。 " +"测试发现操作会确保在执行期间仅检查测试一次,即使 load_tests 函数本身调用了 ``loader.discover`` 也是如此。." + +#: ../../library/unittest.rst:1841 +msgid "" +"If ``load_tests`` exists then discovery does *not* recurse into the package," +" ``load_tests`` is responsible for loading all tests in the package." +msgstr "" +"如果 ``load_tests`` 存在则发现操作 *不会* 对包执行递归处理,``load_tests`` 将负责加载包中的所有测试。is " +"responsible for loading all tests in the package." + +#: ../../library/unittest.rst:1845 +msgid "" +"The pattern is deliberately not stored as a loader attribute so that " +"packages can continue discovery themselves. *top_level_dir* is stored so " +"``load_tests`` does not need to pass this argument in to " +"``loader.discover()``." +msgstr "" +"模式特意地不被当作 loader 属性来保存以使包能够自己继续执行发现操作。 *top_level_dir* 则会被保存以使 " +"``load_tests`` 不需要将此参数传入到 ``loader.discover()``。" + +#: ../../library/unittest.rst:1850 +msgid "*start_dir* can be a dotted module name as well as a directory." +msgstr "*start_dir* 可以是一个带点号的名称或是一个目录。" + +#: ../../library/unittest.rst:1854 +msgid "" +"Modules that raise :exc:`SkipTest` on import are recorded as skips, not " +"errors." +msgstr "在导入时引发 :exc:`SkipTest` 的模块会被记录为跳过,而不是错误。" + +#: ../../library/unittest.rst:1858 +msgid "*start_dir* can be a :term:`namespace packages `." +msgstr "*start_dir* 可以是一个 :term:`命名空间包 `。" + +#: ../../library/unittest.rst:1861 +msgid "" +"Paths are sorted before being imported so that execution order is the same " +"even if the underlying file system's ordering is not dependent on file name." +msgstr "路径在被导入之前会先被排序以使得执行顺序保持一致,即使下层文件系统的顺序不是取决于文件名的。" + +#: ../../library/unittest.rst:1866 +msgid "" +"Found packages are now checked for ``load_tests`` regardless of whether " +"their path matches *pattern*, because it is impossible for a package name to" +" match the default pattern." +msgstr "现在 ``load_tests`` 会检查已找到的包,无论它们的路径是否与 *pattern* 匹配,因为包名称是无法与默认的模式匹配的。" + +#: ../../library/unittest.rst:1872 +msgid "" +"The following attributes of a :class:`TestLoader` can be configured either " +"by subclassing or assignment on an instance:" +msgstr ":class:`TestLoader` 的下列属性可通过子类化或在实例上赋值来配置:" + +#: ../../library/unittest.rst:1878 +msgid "" +"String giving the prefix of method names which will be interpreted as test " +"methods. The default value is ``'test'``." +msgstr "给出将被解读为测试方法的方法名称的前缀的字符串。 默认值为 ``'test'``。" + +#: ../../library/unittest.rst:1881 +msgid "" +"This affects :meth:`getTestCaseNames` and all the :meth:`loadTestsFrom\\*` " +"methods." +msgstr "这会影响 :meth:`getTestCaseNames` 以及所有 :meth:`loadTestsFrom\\*` 方法。" + +#: ../../library/unittest.rst:1887 +msgid "" +"Function to be used to compare method names when sorting them in " +":meth:`getTestCaseNames` and all the :meth:`loadTestsFrom\\*` methods." +msgstr "" +"将被用来在 :meth:`getTestCaseNames` 以及所有 :meth:`loadTestsFrom\\*` " +"方法中比较方法名称以便对它们进行排序。" + +#: ../../library/unittest.rst:1893 +msgid "" +"Callable object that constructs a test suite from a list of tests. No " +"methods on the resulting object are needed. The default value is the " +":class:`TestSuite` class." +msgstr "根据一个测试列表来构造测试套件的可调用对象。 不需要结果对象上的任何方法。 默认值为 :class:`TestSuite` 类。" + +#: ../../library/unittest.rst:1897 ../../library/unittest.rst:1910 +msgid "This affects all the :meth:`loadTestsFrom\\*` methods." +msgstr "这会影响所有 :meth:`loadTestsFrom\\*` 方法。" + +#: ../../library/unittest.rst:1901 +msgid "" +"List of Unix shell-style wildcard test name patterns that test methods have " +"to match to be included in test suites (see ``-v`` option)." +msgstr "由 Unix shell 风格通配符的测试名称模式组成的列表,供测试方法进行匹配以包括在测试套件中(参见 ``-v`` 选项)。" + +#: ../../library/unittest.rst:1904 +msgid "" +"If this attribute is not ``None`` (the default), all test methods to be " +"included in test suites must match one of the patterns in this list. Note " +"that matches are always performed using :meth:`fnmatch.fnmatchcase`, so " +"unlike patterns passed to the ``-v`` option, simple substring patterns will " +"have to be converted using ``*`` wildcards." +msgstr "" +"如果该属性不为 ``None`` (默认值),则将要包括在测试套件中的所有测试方法都必须匹配该列表中的某个模式。 请注意匹配总是使用 " +":meth:`fnmatch.fnmatchcase` 来执行,因此不同于传给 ``-v`` 选项的模式,简单的子字符串模式将必须使用 ``*`` " +"通配符来进行转换。" + +#: ../../library/unittest.rst:1917 +msgid "" +"This class is used to compile information about which tests have succeeded " +"and which have failed." +msgstr "这个类被用于编译有关哪些测试执行成功而哪些失败的信息。" + +#: ../../library/unittest.rst:1920 +msgid "" +"A :class:`TestResult` object stores the results of a set of tests. The " +":class:`TestCase` and :class:`TestSuite` classes ensure that results are " +"properly recorded; test authors do not need to worry about recording the " +"outcome of tests." +msgstr "" +"存放一组测试的结果的 :class:`TestResult` 对象。 :class:`TestCase` 和 :class:`TestSuite` " +"类将确保结果被正确地记录;测试创建者无须担心如何记录测试的结果。" + +#: ../../library/unittest.rst:1925 +msgid "" +"Testing frameworks built on top of :mod:`unittest` may want access to the " +":class:`TestResult` object generated by running a set of tests for reporting" +" purposes; a :class:`TestResult` instance is returned by the " +":meth:`TestRunner.run` method for this purpose." +msgstr "" +"建立在 :mod:`unittest` 之上的测试框架可能会想要访问通过运行一组测试所产生的 :class:`TestResult` " +"对象用来报告信息;:meth:`TestRunner.run` 方法是出于这个目的而返回 :class:`TestResult` 实例的。" + +#: ../../library/unittest.rst:1930 +msgid "" +":class:`TestResult` instances have the following attributes that will be of " +"interest when inspecting the results of running a set of tests:" +msgstr ":class:`TestResult` 实例具有下列属性,在检查运行一组测试的结果的时候很有用处。" + +#: ../../library/unittest.rst:1936 +msgid "" +"A list containing 2-tuples of :class:`TestCase` instances and strings " +"holding formatted tracebacks. Each tuple represents a test which raised an " +"unexpected exception." +msgstr "" +"一个包含 :class:`TestCase` 实例和保存了格式化回溯信息的字符串 2 元组的列表。 每个元组代表一个引发了非预期的异常的测试。" + +#: ../../library/unittest.rst:1942 +msgid "" +"A list containing 2-tuples of :class:`TestCase` instances and strings " +"holding formatted tracebacks. Each tuple represents a test where a failure " +"was explicitly signalled using the :meth:`TestCase.assert\\*` methods." +msgstr "" +"一个包含 :class:`TestCase` 实例和保存了格式化回溯信息的字符串 2 元组的列表。 每个元组代表一个使用 " +":meth:`TestCase.assert\\*` 方法显式地发出失败信号的测试。" + +#: ../../library/unittest.rst:1948 +msgid "" +"A list containing 2-tuples of :class:`TestCase` instances and strings " +"holding the reason for skipping the test." +msgstr "一个包含 2-tuples of :class:`TestCase` 实例和保存了跳过测试原因的字符串 2 元组的列表。" + +#: ../../library/unittest.rst:1955 +msgid "" +"A list containing 2-tuples of :class:`TestCase` instances and strings " +"holding formatted tracebacks. Each tuple represents an expected failure or " +"error of the test case." +msgstr "" +"一个包含 :class:`TestCase` 实例和保存了格式化回溯信息的 2 元组的列表。 每个元组代表测试用例的一个已预期的失败或错误。" + +#: ../../library/unittest.rst:1961 +msgid "" +"A list containing :class:`TestCase` instances that were marked as expected " +"failures, but succeeded." +msgstr "一个包含被标记为已预期失败,但却测试成功的 :class:`TestCase` 实例的列表。" + +#: ../../library/unittest.rst:1966 +msgid "" +"Set to ``True`` when the execution of tests should stop by :meth:`stop`." +msgstr "当测试的执行应当被 :meth:`stop` 停止时则设为 ``True``。" + +#: ../../library/unittest.rst:1970 +msgid "The total number of tests run so far." +msgstr "目前已运行的测试的总数量。" + +#: ../../library/unittest.rst:1974 +msgid "" +"If set to true, ``sys.stdout`` and ``sys.stderr`` will be buffered in " +"between :meth:`startTest` and :meth:`stopTest` being called. Collected " +"output will only be echoed onto the real ``sys.stdout`` and ``sys.stderr`` " +"if the test fails or errors. Any output is also attached to the failure / " +"error message." +msgstr "" +"如果设为真值,``sys.stdout`` 和 ``sys.stderr`` 将在 :meth:`startTest` 和 " +":meth:`stopTest` 被调用之间被缓冲。 被收集的输出将仅在测试失败或发生错误时才会被回显到真正的 ``sys.stdout`` 和 " +"``sys.stderr``。 任何输出还会被附加到失败/错误消息中。" + +#: ../../library/unittest.rst:1983 +msgid "" +"If set to true :meth:`stop` will be called on the first failure or error, " +"halting the test run." +msgstr "如果设为真值则 :meth:`stop` 将在首次失败或错误时被调用,停止测试运行。" + +#: ../../library/unittest.rst:1990 +msgid "If set to true then local variables will be shown in tracebacks." +msgstr "如果设为真值则局部变量将被显示在回溯信息中。" + +#: ../../library/unittest.rst:1996 +msgid "" +"Return ``True`` if all tests run so far have passed, otherwise returns " +"``False``." +msgstr "如果当前所有测试都已通过则返回 ``True``,否则返回 ``False``。" + +#: ../../library/unittest.rst:1999 +msgid "" +"Returns ``False`` if there were any :attr:`unexpectedSuccesses` from tests " +"marked with the :func:`expectedFailure` decorator." +msgstr "" +"如果有任何来自测试的 :attr:`unexpectedSuccesses` 被 :func:`expectedFailure` 装饰器所标记则返回 " +"``False``。" + +#: ../../library/unittest.rst:2005 +msgid "" +"This method can be called to signal that the set of tests being run should " +"be aborted by setting the :attr:`shouldStop` attribute to ``True``. " +":class:`TestRunner` objects should respect this flag and return without " +"running any additional tests." +msgstr "" +"此方法可被调用以提示正在运行的测试集要将 :attr:`shouldStop` 属性设为 ``True`` 来表示其应当被中止。 " +":class:`TestRunner` 对象应当认同此旗标并返回而不再运行任何额外的测试。" + +#: ../../library/unittest.rst:2010 +msgid "" +"For example, this feature is used by the :class:`TextTestRunner` class to " +"stop the test framework when the user signals an interrupt from the " +"keyboard. Interactive tools which provide :class:`TestRunner` " +"implementations can use this in a similar manner." +msgstr "" +"例如,该特性会被 :class:`TextTestRunner` 类用来在当用户从键盘发出一个中断信号时停止测试框架。 提供了 " +":class:`TestRunner` 实现的交互式工具也可通过类似方式来使用该特性。" + +#: ../../library/unittest.rst:2015 +msgid "" +"The following methods of the :class:`TestResult` class are used to maintain " +"the internal data structures, and may be extended in subclasses to support " +"additional reporting requirements. This is particularly useful in building " +"tools which support interactive reporting while tests are being run." +msgstr "" +":class:`TestResult` 类的下列方法被用于维护内部数据结构,并可在子类中被扩展以支持额外的报告需求。 " +"这特别适用于构建支持在运行测试时提供交互式报告的工具。" + +#: ../../library/unittest.rst:2023 +msgid "Called when the test case *test* is about to be run." +msgstr "当测试用例 *test* 即将运行时被调用。" + +#: ../../library/unittest.rst:2027 +msgid "" +"Called after the test case *test* has been executed, regardless of the " +"outcome." +msgstr "在测试用例 *test* 已经执行后被调用,无论其结果如何。" + +#: ../../library/unittest.rst:2032 +msgid "Called once before any tests are executed." +msgstr "在任何测试被执行之前被调用一次。" + +#: ../../library/unittest.rst:2039 +msgid "Called once after all tests are executed." +msgstr "在所有测试被执行之后被调用一次。" + +#: ../../library/unittest.rst:2046 +msgid "" +"Called when the test case *test* raises an unexpected exception. *err* is a " +"tuple of the form returned by :func:`sys.exc_info`: ``(type, value, " +"traceback)``." +msgstr "" +"当测试用例 *test* 引发了非预期的异常时将被调用。 *err* 是一个元组,其形式与 :func:`sys.exc_info` 的返回值相同: " +"``(type, value, traceback)``。" + +#: ../../library/unittest.rst:2050 +msgid "" +"The default implementation appends a tuple ``(test, formatted_err)`` to the " +"instance's :attr:`errors` attribute, where *formatted_err* is a formatted " +"traceback derived from *err*." +msgstr "" +"默认实现会将一个元组 ``(test, formatted_err)`` 添加到实例的 :attr:`errors` 属性,其中 " +"*formatted_err* 是派生自 *err* 的已格式化回溯信息。" + +#: ../../library/unittest.rst:2057 +msgid "" +"Called when the test case *test* signals a failure. *err* is a tuple of the " +"form returned by :func:`sys.exc_info`: ``(type, value, traceback)``." +msgstr "" +"当测试用例 *test* 发出了失败信号时将被调用。 *err* 是一个元组,其形式与 :func:`sys.exc_info` 的返回值相同: " +"``(type, value, traceback)``。" + +#: ../../library/unittest.rst:2060 +msgid "" +"The default implementation appends a tuple ``(test, formatted_err)`` to the " +"instance's :attr:`failures` attribute, where *formatted_err* is a formatted " +"traceback derived from *err*." +msgstr "" +"默认实现会将一个元组 ``(test, formatted_err)`` 添加到实例的 :attr:`failures` 属性,其中 " +"*formatted_err* 是派生自 *err* 的已格式化回溯信息。" + +#: ../../library/unittest.rst:2067 +msgid "Called when the test case *test* succeeds." +msgstr "当测试用例 *test* 成功时被调用。" + +#: ../../library/unittest.rst:2069 +msgid "The default implementation does nothing." +msgstr "默认实现将不做任何操作。" + +#: ../../library/unittest.rst:2074 +msgid "" +"Called when the test case *test* is skipped. *reason* is the reason the " +"test gave for skipping." +msgstr "当测试用例 *test* 被跳过时将被调用。 *reason* 是给出的跳过测试的理由。" + +#: ../../library/unittest.rst:2077 +msgid "" +"The default implementation appends a tuple ``(test, reason)`` to the " +"instance's :attr:`skipped` attribute." +msgstr "默认实现会将一个元组 ``(test, reason)`` 添加到实例的 :attr:`skipped` 属性。" + +#: ../../library/unittest.rst:2083 +msgid "" +"Called when the test case *test* fails or errors, but was marked with the " +":func:`expectedFailure` decorator." +msgstr "当测试用例 *test* 失败或发生错误,但是使用了 :func:`expectedFailure` 装饰器来标记时将被调用。" + +#: ../../library/unittest.rst:2086 +msgid "" +"The default implementation appends a tuple ``(test, formatted_err)`` to the " +"instance's :attr:`expectedFailures` attribute, where *formatted_err* is a " +"formatted traceback derived from *err*." +msgstr "" +"默认实现会将一个元组 ``(test, formatted_err)`` 添加到实例的 :attr:`expectedFailures` 属性,其中 " +"*formatted_err* 是派生自 *err* 的已格式化回溯信息。" + +#: ../../library/unittest.rst:2093 +msgid "" +"Called when the test case *test* was marked with the :func:`expectedFailure`" +" decorator, but succeeded." +msgstr "" +"当测试用例 *test* 使用了was marked with the :func:`expectedFailure` " +"装饰器来标记,但是却执行成功时将被调用。" + +#: ../../library/unittest.rst:2096 +msgid "" +"The default implementation appends the test to the instance's " +":attr:`unexpectedSuccesses` attribute." +msgstr "默认实现会将该测试添加到实例的 :attr:`unexpectedSuccesses` 属性。" + +#: ../../library/unittest.rst:2102 +msgid "" +"Called when a subtest finishes. *test* is the test case corresponding to " +"the test method. *subtest* is a custom :class:`TestCase` instance " +"describing the subtest." +msgstr "" +"当一个子测试结束时将被调用。 *test* 是对应于该测试方法的测试用例。 *subtest* 是一个描述该子测试的 :class:`TestCase`" +" 实例。" + +#: ../../library/unittest.rst:2106 +msgid "" +"If *outcome* is :const:`None`, the subtest succeeded. Otherwise, it failed " +"with an exception where *outcome* is a tuple of the form returned by " +":func:`sys.exc_info`: ``(type, value, traceback)``." +msgstr "" +"如果 *outcome* 为 :const:`None`,则该子测试执行成功。 否则,它将失败并引发一个异常,*outcome* 是一个元组,其形式与 " +":func:`sys.exc_info` 的返回值相同: ``(type, value, traceback)``。" + +#: ../../library/unittest.rst:2110 +msgid "" +"The default implementation does nothing when the outcome is a success, and " +"records subtest failures as normal failures." +msgstr "默认实现在测试结果为成功时将不做任何事,并会将子测试的失败记录为普通的失败。" + +#: ../../library/unittest.rst:2118 +msgid "" +"A concrete implementation of :class:`TestResult` used by the " +":class:`TextTestRunner`." +msgstr ":class:`TestResult` 的一个具体实现,由 :class:`TextTestRunner` 使用。" + +#: ../../library/unittest.rst:2121 +msgid "" +"This class was previously named ``_TextTestResult``. The old name still " +"exists as an alias but is deprecated." +msgstr "这个类在之前被命名为 ``_TextTestResult``。 这个旧名字仍然作为别名存在,但已被弃用。" + +#: ../../library/unittest.rst:2128 +msgid "" +"Instance of the :class:`TestLoader` class intended to be shared. If no " +"customization of the :class:`TestLoader` is needed, this instance can be " +"used instead of repeatedly creating new instances." +msgstr "" +"用于分享的 :class:`TestLoader` 类实例。 如果不需要自制 " +":class:`TestLoader`,则可以使用该实例而不必重复创建新的实例。" + +#: ../../library/unittest.rst:2136 +msgid "" +"A basic test runner implementation that outputs results to a stream. If " +"*stream* is ``None``, the default, :data:`sys.stderr` is used as the output " +"stream. This class has a few configurable parameters, but is essentially " +"very simple. Graphical applications which run test suites should provide " +"alternate implementations. Such implementations should accept ``**kwargs`` " +"as the interface to construct runners changes when features are added to " +"unittest." +msgstr "" +"一个将结果输出到流的基本测试运行器。 如果 *stream* 为默认的 ``None``,则会使用 :data:`sys.stderr` 作为输出流。 " +"这个类具有一些配置形参,但实际上都非常简单。 运行测试套件的图形化应用程序应当提供替代实现。 这样的实现应当在添加新特性到 unittest 时接受 " +"``**kwargs`` 作为修改构造运行器的接口。" + +#: ../../library/unittest.rst:2143 +msgid "" +"By default this runner shows :exc:`DeprecationWarning`, " +":exc:`PendingDeprecationWarning`, :exc:`ResourceWarning` and " +":exc:`ImportWarning` even if they are :ref:`ignored by default `. Deprecation warnings caused by :ref:`deprecated unittest methods " +"` are also special-cased and, when the warning filters " +"are ``'default'`` or ``'always'``, they will appear only once per-module, in" +" order to avoid too many warning messages. This behavior can be overridden " +"using Python's :option:`!-Wd` or :option:`!-Wa` options (see :ref:`Warning " +"control `) and leaving *warnings* to ``None``." +msgstr "" +"在默认情况下这个运行器会显示 :exc:`DeprecationWarning`, :exc:`PendingDeprecationWarning`, " +":exc:`ResourceWarning` 和 :exc:`ImportWarning`,即使它们 :ref:`被默认忽略 `。 由 :ref:`deprecated unittest methods ` " +"所导致的弃用警告也会被作为特例,并且当警告过滤器为 ``'default'`` 或 ``'always'`` " +"时,对于每个模块它们将仅显示一次,以避免过多的警告消息。 此种行为可使用 Python 的 :option:`!-Wd` 或 " +":option:`!-Wa` 选项 (参见 :ref:`警告控制 `) 并让 *warnings* 保持为 " +"``None`` 来覆盖。" + +#: ../../library/unittest.rst:2154 +msgid "Added the ``warnings`` argument." +msgstr "增加了 ``warnings`` 参数。" + +#: ../../library/unittest.rst:2157 +msgid "" +"The default stream is set to :data:`sys.stderr` at instantiation time rather" +" than import time." +msgstr "默认流会在实例化而不是在导入时被设为 :data:`sys.stderr`。" + +#: ../../library/unittest.rst:2161 +msgid "Added the tb_locals parameter." +msgstr "增加了 tb_locals 形参。" + +#: ../../library/unittest.rst:2166 +msgid "" +"This method returns the instance of ``TestResult`` used by :meth:`run`. It " +"is not intended to be called directly, but can be overridden in subclasses " +"to provide a custom ``TestResult``." +msgstr "" +"此方法将返回由 :meth:`run` 使用的 ``TestResult`` 实例。 它不应当被直接调用,但可在子类中被重载以提供自定义的 " +"``TestResult``。" + +#: ../../library/unittest.rst:2170 +msgid "" +"``_makeResult()`` instantiates the class or callable passed in the " +"``TextTestRunner`` constructor as the ``resultclass`` argument. It defaults " +"to :class:`TextTestResult` if no ``resultclass`` is provided. The result " +"class is instantiated with the following arguments::" +msgstr "" +"``_makeResult()`` 会实例化传给 ``TextTestRunner`` 构造器的 ``resultclass`` " +"参数所指定的类或可迭代对象。 如果没有提供 ``resultclass`` 则默认为 :class:`TextTestResult`。 " +"结果类会使用以下参数来实例化::" + +#: ../../library/unittest.rst:2179 +msgid "" +"This method is the main public interface to the ``TextTestRunner``. This " +"method takes a :class:`TestSuite` or :class:`TestCase` instance. A " +":class:`TestResult` is created by calling :func:`_makeResult` and the " +"test(s) are run and the results printed to stdout." +msgstr "" +"此方法是 ``TextTestRunner`` 的主要公共接口。 此方法接受一个 :class:`TestSuite` 或 " +":class:`TestCase` 实例。 通过调用 :func:`_makeResult` 创建 :class:`TestResult` " +"来运行测试并将结果打印到标准输出。" + +#: ../../library/unittest.rst:2190 +msgid "" +"A command-line program that loads a set of tests from *module* and runs " +"them; this is primarily for making test modules conveniently executable. The" +" simplest use for this function is to include the following line at the end " +"of a test script::" +msgstr "" +"从 *module* 加载一组测试并运行它们的命令行程序;这主要是为了让测试模块能方便地执行。 此函数的最简单用法是在测试脚本末尾包括下列行::" + +#: ../../library/unittest.rst:2198 +msgid "" +"You can run tests with more detailed information by passing in the verbosity" +" argument::" +msgstr "你可以通过传入冗余参数运行测试以获得更详细的信息::" + +#: ../../library/unittest.rst:2204 +msgid "" +"The *defaultTest* argument is either the name of a single test or an " +"iterable of test names to run if no test names are specified via *argv*. If" +" not specified or ``None`` and no test names are provided via *argv*, all " +"tests found in *module* are run." +msgstr "" +"*defaultTest* 参数是要运行的单个测试名称,或者如果未通过 *argv* 指定任何测试名称则是包含多个测试名称的可迭代对象。 如果未指定或为" +" ``None`` 且未通过 *argv* 指定任何测试名称,则会运行在 *module* 中找到的所有测试。" + +#: ../../library/unittest.rst:2209 +msgid "" +"The *argv* argument can be a list of options passed to the program, with the" +" first element being the program name. If not specified or ``None``, the " +"values of :data:`sys.argv` are used." +msgstr "" +"*argv* 参数可以是传给程序的选项列表,其中第一个元素是程序名。 如未指定或为 ``None``,则会使用 :data:`sys.argv` 的值。" + +#: ../../library/unittest.rst:2213 +msgid "" +"The *testRunner* argument can either be a test runner class or an already " +"created instance of it. By default ``main`` calls :func:`sys.exit` with an " +"exit code indicating success or failure of the tests run." +msgstr "" +"*testRunner* 参数可以是测试运行器类或是其已创建的实例。 在默认情况下 ``main`` 会调用 :func:`sys.exit` " +"并附带一个退出码来指明测试运行是成功还是失败。" + +#: ../../library/unittest.rst:2217 +msgid "" +"The *testLoader* argument has to be a :class:`TestLoader` instance, and " +"defaults to :data:`defaultTestLoader`." +msgstr "" +"*testLoader* 参数必须是一个 :class:`TestLoader` 实例,其默认值为 :data:`defaultTestLoader`。" + +#: ../../library/unittest.rst:2220 +msgid "" +"``main`` supports being used from the interactive interpreter by passing in " +"the argument ``exit=False``. This displays the result on standard output " +"without calling :func:`sys.exit`::" +msgstr "" +"``main`` 支持通过传入 ``exit=False`` 参数以便在交互式解释器中使用。 这将在标准输出中显示结果而不调用 " +":func:`sys.exit`::" + +#: ../../library/unittest.rst:2227 +msgid "" +"The *failfast*, *catchbreak* and *buffer* parameters have the same effect as" +" the same-name `command-line options`_." +msgstr "" +"*failfast*, *catchbreak* 和 *buffer* 形参的效果与同名的 `command-line options`_ 一致。" + +#: ../../library/unittest.rst:2230 +msgid "" +"The *warnings* argument specifies the :ref:`warning filter `" +" that should be used while running the tests. If it's not specified, it " +"will remain ``None`` if a :option:`!-W` option is passed to " +":program:`python` (see :ref:`Warning control `), " +"otherwise it will be set to ``'default'``." +msgstr "" +"*warnings* 参数指定在运行测试时所应使用的 :ref:`警告过滤器 `。 如果未指定,则默认的 " +"``None`` 会在将 :option:`!-W` 选项传给 :program:`python` 命令时被保留 (参见 :ref:`警告控制 " +"`),而在其他情况下将被设为 ``'default'``。" + +#: ../../library/unittest.rst:2236 +msgid "" +"Calling ``main`` actually returns an instance of the ``TestProgram`` class. " +"This stores the result of the tests run as the ``result`` attribute." +msgstr "" +"调用 ``main`` 实际上将返回一个 ``TestProgram`` 类的实例。 这会把测试运行结果保存为 ``result`` 属性。" + +#: ../../library/unittest.rst:2239 +msgid "The *exit* parameter was added." +msgstr "增加了 *exit* 形参。" + +#: ../../library/unittest.rst:2242 +msgid "" +"The *verbosity*, *failfast*, *catchbreak*, *buffer* and *warnings* " +"parameters were added." +msgstr "增加了 *verbosity*, *failfast*, *catchbreak*, *buffer* 和 *warnings* 形参。" + +#: ../../library/unittest.rst:2246 +msgid "" +"The *defaultTest* parameter was changed to also accept an iterable of test " +"names." +msgstr "*defaultTest* 形参被修改为也接受一个由测试名称组成的迭代器。" + +#: ../../library/unittest.rst:2252 +msgid "load_tests Protocol" +msgstr "load_tests 协议" + +#: ../../library/unittest.rst:2256 +msgid "" +"Modules or packages can customize how tests are loaded from them during " +"normal test runs or test discovery by implementing a function called " +"``load_tests``." +msgstr "模块或包可以通过实现一个名为 ``load_tests`` 的函数来定制在正常测试运行或测试发现期间要如何从中加载测试。" + +#: ../../library/unittest.rst:2259 +msgid "" +"If a test module defines ``load_tests`` it will be called by " +":meth:`TestLoader.loadTestsFromModule` with the following arguments::" +msgstr "" +"如果一个测试模块定义了 ``load_tests`` 则它将被 :meth:`TestLoader.loadTestsFromModule` " +"调用并传入下列参数::" + +#: ../../library/unittest.rst:2264 +msgid "" +"where *pattern* is passed straight through from ``loadTestsFromModule``. It" +" defaults to ``None``." +msgstr "其中 *pattern* 会通过 ``loadTestsFromModule`` 传入。 它的默认值为 ``None``。" + +#: ../../library/unittest.rst:2267 +msgid "It should return a :class:`TestSuite`." +msgstr "它应当返回一个 :class:`TestSuite`。" + +#: ../../library/unittest.rst:2269 +msgid "" +"*loader* is the instance of :class:`TestLoader` doing the loading. " +"*standard_tests* are the tests that would be loaded by default from the " +"module. It is common for test modules to only want to add or remove tests " +"from the standard set of tests. The third argument is used when loading " +"packages as part of test discovery." +msgstr "" +"*loader* 是执行载入操作的 :class:`TestLoader` 实例。 *standard_tests* 是默认要从该模块载入的测试。 " +"测试模块通常只需从标准测试集中添加或移除测试。 第三个参数是在作为测试发现的一部分载入包时使用的。" + +#: ../../library/unittest.rst:2275 +msgid "" +"A typical ``load_tests`` function that loads tests from a specific set of " +":class:`TestCase` classes may look like::" +msgstr "一个从指定 :class:`TestCase` 类集合中载入测试的 ``load_tests`` 函数看起来可能是这样的::" + +#: ../../library/unittest.rst:2287 +msgid "" +"If discovery is started in a directory containing a package, either from the" +" command line or by calling :meth:`TestLoader.discover`, then the package " +":file:`__init__.py` will be checked for ``load_tests``. If that function " +"does not exist, discovery will recurse into the package as though it were " +"just another directory. Otherwise, discovery of the package's tests will be" +" left up to ``load_tests`` which is called with the following arguments::" +msgstr "" +"如果发现操作是在一个包含包的目录中开始的,不论是通过命令行还是通过调用 :meth:`TestLoader.discover`,则将在包 " +":file:`__init__.py` 中检查 ``load_tests``。 如果不存在此函数,则发现将在包内部执行递归,就像它是另一个目录一样。 " +"在其他情况下,包中测试的发现操作将留给 ``load_tests`` 执行,它将附带下列参数被调用::" + +#: ../../library/unittest.rst:2296 +msgid "" +"This should return a :class:`TestSuite` representing all the tests from the " +"package. (``standard_tests`` will only contain tests collected from " +":file:`__init__.py`.)" +msgstr "" +"这应当返回代表包中所有测试的 :class:`TestSuite`。 (``standard_tests`` 将只包含从 " +":file:`__init__.py` 获取的测试。)" + +#: ../../library/unittest.rst:2300 +msgid "" +"Because the pattern is passed into ``load_tests`` the package is free to " +"continue (and potentially modify) test discovery. A 'do nothing' " +"``load_tests`` function for a test package would look like::" +msgstr "" +"因为模式已被传入 ``load_tests`` 所以包可以自由地继续(还可能修改)测试发现操作。 针对一个测试包的 '无操作' " +"``load_tests`` 函数看起来是这样的::" + +#: ../../library/unittest.rst:2311 +msgid "" +"Discovery no longer checks package names for matching *pattern* due to the " +"impossibility of package names matching the default pattern." +msgstr "发现操作不会再检查包名称是否匹配 *pattern*,因为包名称不可能匹配默认的模式。" + +#: ../../library/unittest.rst:2318 +msgid "Class and Module Fixtures" +msgstr "类与模块设定" + +#: ../../library/unittest.rst:2320 +msgid "" +"Class and module level fixtures are implemented in :class:`TestSuite`. When " +"the test suite encounters a test from a new class then :meth:`tearDownClass`" +" from the previous class (if there is one) is called, followed by " +":meth:`setUpClass` from the new class." +msgstr "" +"类与模块设定是在 :class:`TestSuite` 中实现的。 当测试套件遇到来自新类的测试时则来自之前的类(如果存在)的 " +":meth:`tearDownClass` 会被调用,然后再调用来自新类的 :meth:`setUpClass`。" + +#: ../../library/unittest.rst:2325 +msgid "" +"Similarly if a test is from a different module from the previous test then " +"``tearDownModule`` from the previous module is run, followed by " +"``setUpModule`` from the new module." +msgstr "" +"类似地如果测试是来自之前的测试的另一个模块则来自之前模块的 ``tearDownModule`` 将被运行,然后再运行来自新模块的 " +"``setUpModule``。" + +#: ../../library/unittest.rst:2329 +msgid "" +"After all the tests have run the final ``tearDownClass`` and " +"``tearDownModule`` are run." +msgstr "在所有测试运行完毕后最终的 ``tearDownClass`` 和 ``tearDownModule`` 将被运行。" + +#: ../../library/unittest.rst:2332 +msgid "" +"Note that shared fixtures do not play well with [potential] features like " +"test parallelization and they break test isolation. They should be used with" +" care." +msgstr "请注意共享设定不适用于一些 [潜在的] 特性例如测试并行化并且它们会破坏测试隔离。 它们应当被谨慎地使用。" + +#: ../../library/unittest.rst:2335 +msgid "" +"The default ordering of tests created by the unittest test loaders is to " +"group all tests from the same modules and classes together. This will lead " +"to ``setUpClass`` / ``setUpModule`` (etc) being called exactly once per " +"class and module. If you randomize the order, so that tests from different " +"modules and classes are adjacent to each other, then these shared fixture " +"functions may be called multiple times in a single test run." +msgstr "" +"由 unittest 测试加载器创建的测试的默认顺序是将所有来自相同模块和类的测试归入相同分组。 这将导致 ``setUpClass`` / " +"``setUpModule`` (等) 对于每个类和模块都恰好被调用一次。 " +"如果你将顺序随机化,以便使得来自不同模块和类的测试彼此相邻,那么这些共享的设定函数就可能会在一次测试运行中被多次调用。" + +#: ../../library/unittest.rst:2342 +msgid "" +"Shared fixtures are not intended to work with suites with non-standard " +"ordering. A ``BaseTestSuite`` still exists for frameworks that don't want to" +" support shared fixtures." +msgstr "共享的设定不适用与非标准顺序的套件。 对于不想支持共享设定的框架来说 ``BaseTestSuite`` 仍然可用。" + +#: ../../library/unittest.rst:2346 +msgid "" +"If there are any exceptions raised during one of the shared fixture " +"functions the test is reported as an error. Because there is no " +"corresponding test instance an ``_ErrorHolder`` object (that has the same " +"interface as a :class:`TestCase`) is created to represent the error. If you " +"are just using the standard unittest test runner then this detail doesn't " +"matter, but if you are a framework author it may be relevant." +msgstr "" +"如果在共享的设定函数中引发了任何异常则测试将被报告错误。 因为没有对应的测试实例,所以会创建一个 ``_ErrorHolder`` 对象(它具有与 " +":class:`TestCase` 相同的接口)来代表该错误。 如果你只是使用标准 unittest " +"测试运行器那么这个细节并不重要,但是如果你是一个框架开发者那么这可能会有关系。" + +#: ../../library/unittest.rst:2355 +msgid "setUpClass and tearDownClass" +msgstr "setUpClass 和 tearDownClass" + +#: ../../library/unittest.rst:2357 +msgid "These must be implemented as class methods::" +msgstr "这些必须被实现为类方法::" + +#: ../../library/unittest.rst:2370 +msgid "" +"If you want the ``setUpClass`` and ``tearDownClass`` on base classes called " +"then you must call up to them yourself. The implementations in " +":class:`TestCase` are empty." +msgstr "" +"如果你希望在基类上的 ``setUpClass`` 和 ``tearDownClass`` 被调用则你必须自己去调用它们。 在 " +":class:`TestCase` 中的实现是空的。" + +#: ../../library/unittest.rst:2374 +msgid "" +"If an exception is raised during a ``setUpClass`` then the tests in the " +"class are not run and the ``tearDownClass`` is not run. Skipped classes will" +" not have ``setUpClass`` or ``tearDownClass`` run. If the exception is a " +":exc:`SkipTest` exception then the class will be reported as having been " +"skipped instead of as an error." +msgstr "" +"如果在 ``setUpClass`` 中引发了异常则类中的测试将不会被运行并且 ``tearDownClass`` 也不会被运行。 跳过的类中的 " +"``setUpClass`` 或 ``tearDownClass`` 将不会被运行。 如果引发的异常是 :exc:`SkipTest` " +"异常则类将被报告为已跳过而非发生错误。" + +#: ../../library/unittest.rst:2382 +msgid "setUpModule and tearDownModule" +msgstr "setUpModule 和 tearDownModule" + +#: ../../library/unittest.rst:2384 +msgid "These should be implemented as functions::" +msgstr "这些应当被实现为函数::" + +#: ../../library/unittest.rst:2392 +msgid "" +"If an exception is raised in a ``setUpModule`` then none of the tests in the" +" module will be run and the ``tearDownModule`` will not be run. If the " +"exception is a :exc:`SkipTest` exception then the module will be reported as" +" having been skipped instead of as an error." +msgstr "" +"如果在 ``setUpModule`` 中引发了异常则模块中的任何测试都将不会被运行并且 ``tearDownModule`` 也不会被运行。 " +"如果引发的异常是 :exc:`SkipTest` 异常则模块将被报告为已跳过而非发生错误。" + +#: ../../library/unittest.rst:2397 +msgid "" +"To add cleanup code that must be run even in the case of an exception, use " +"``addModuleCleanup``:" +msgstr "要添加即使在发生异常时也必须运行的清理代码,请使用 ``addModuleCleanup``:" + +#: ../../library/unittest.rst:2403 +msgid "" +"Add a function to be called after :func:`tearDownModule` to cleanup " +"resources used during the test class. Functions will be called in reverse " +"order to the order they are added (:abbr:`LIFO (last-in, first-out)`). They " +"are called with any arguments and keyword arguments passed into " +":meth:`addModuleCleanup` when they are added." +msgstr "" +"在 :func:`tearDownModule` 之后添加一个要调用的函数来清理测试类运行期间所使用的资源。 函数将按它们被添加的相反顺序被调用 " +"(:abbr:`LIFO (last-in, first-out)`)。 它们在调用时将附带它们被添加时传给 " +":meth:`addModuleCleanup` 的任何参数和关键字参数。" + +#: ../../library/unittest.rst:2409 +msgid "" +"If :meth:`setUpModule` fails, meaning that :func:`tearDownModule` is not " +"called, then any cleanup functions added will still be called." +msgstr "" +"如果 :meth:`setUpModule` 失败,即意味着 :func:`tearDownModule` 未被调用,则已添加的任何清理函数仍将被调用。" + +#: ../../library/unittest.rst:2417 +msgid "" +"This function is called unconditionally after :func:`tearDownModule`, or " +"after :func:`setUpModule` if :func:`setUpModule` raises an exception." +msgstr "" +"此函数会在 :func:`tearDownModule` 之后无条件地被调用,或者如果 :func:`setUpModule` 引发了异常则会在 " +":func:`setUpModule` 之后被调用。" + +#: ../../library/unittest.rst:2420 +msgid "" +"It is responsible for calling all the cleanup functions added by " +":func:`addModuleCleanup`. If you need cleanup functions to be called *prior*" +" to :func:`tearDownModule` then you can call :func:`doModuleCleanups` " +"yourself." +msgstr "" +"它将负责调用由It is responsible for calling all the cleanup functions added by " +":func:`addModuleCleanup` 添加的所有清理函数。 如果你需要在 :func:`tearDownModule` *之前* " +"调用清理函数则可以自行调用 :func:`doModuleCleanups`。" + +#: ../../library/unittest.rst:2425 +msgid "" +":func:`doModuleCleanups` pops methods off the stack of cleanup functions one" +" at a time, so it can be called at any time." +msgstr ":func:`doModuleCleanups` 每次会弹出清理函数栈中的一个方法,因此它可以在任何时候被调用。" + +#: ../../library/unittest.rst:2431 +msgid "Signal Handling" +msgstr "信号处理" + +#: ../../library/unittest.rst:2435 +msgid "" +"The :option:`-c/--catch ` command-line option to unittest, " +"along with the ``catchbreak`` parameter to :func:`unittest.main()`, provide " +"more friendly handling of control-C during a test run. With catch break " +"behavior enabled control-C will allow the currently running test to " +"complete, and the test run will then end and report all the results so far. " +"A second control-c will raise a :exc:`KeyboardInterrupt` in the usual way." +msgstr "" +"unittest 的 :option:`-c/--catch ` 命令行选项,加上 " +":func:`unittest.main()` 的 ``catchbreak`` 形参,提供了在测试运行期间处理 control-C 的更友好方式。 " +"在捕获中断行为被启用时 control-C 将允许当前运行的测试能够完成,而测试运行将随后结束并报告已有的全部结果。 第二个 control-C " +"将会正常地引发 :exc:`KeyboardInterrupt`。" + +#: ../../library/unittest.rst:2442 +msgid "" +"The control-c handling signal handler attempts to remain compatible with " +"code or tests that install their own :const:`signal.SIGINT` handler. If the " +"``unittest`` handler is called but *isn't* the installed " +":const:`signal.SIGINT` handler, i.e. it has been replaced by the system " +"under test and delegated to, then it calls the default handler. This will " +"normally be the expected behavior by code that replaces an installed handler" +" and delegates to it. For individual tests that need ``unittest`` control-c " +"handling disabled the :func:`removeHandler` decorator can be used." +msgstr "" +"处理 control-C 信号的处理器会尝试与安装了自定义 :const:`signal.SIGINT` 处理器的测试代码保持兼容。 如果是 " +"``unittest`` 处理器而 *不是* 已安装的 :const:`signal.SIGINT` " +"处理器被调用,即它被系统在测试的下层替换并委托处理,则它会调用默认的处理器。 这通常会是替换了已安装处理器并委托处理的代码所预期的行为。 对于需要禁用 " +"``unittest`` control-C 处理的单个测试则可以使用 :func:`removeHandler` 装饰器。" + +#: ../../library/unittest.rst:2451 +msgid "" +"There are a few utility functions for framework authors to enable control-c " +"handling functionality within test frameworks." +msgstr "还有一些工具函数让框架开发者可以在测试框架内部启用 control-C 处理功能。" + +#: ../../library/unittest.rst:2456 +msgid "" +"Install the control-c handler. When a :const:`signal.SIGINT` is received " +"(usually in response to the user pressing control-c) all registered results " +"have :meth:`~TestResult.stop` called." +msgstr "" +"安装 control-C 处理器。 当接收到 :const:`signal.SIGINT` 时(通常是响应用户按下 " +"control-C)所有已注册的结果都会执行 :meth:`~TestResult.stop` 调用。" + +#: ../../library/unittest.rst:2463 +msgid "" +"Register a :class:`TestResult` object for control-c handling. Registering a " +"result stores a weak reference to it, so it doesn't prevent the result from " +"being garbage collected." +msgstr "" +"注册一个 :class:`TestResult` 对象用于 control-C 的处理。 " +"注册一个结果将保存指向它的弱引用,因此这并不能防止结果被作为垃圾回收。" + +#: ../../library/unittest.rst:2467 +msgid "" +"Registering a :class:`TestResult` object has no side-effects if control-c " +"handling is not enabled, so test frameworks can unconditionally register all" +" results they create independently of whether or not handling is enabled." +msgstr "" +"如果 control-C 未被启用则注册 :class:`TestResult` " +"对象将没有任何附带影响,因此不论是否启用了该项处理测试框架都可以无条件地注册他们独立创建的所有结果。" + +#: ../../library/unittest.rst:2474 +msgid "" +"Remove a registered result. Once a result has been removed then " +":meth:`~TestResult.stop` will no longer be called on that result object in " +"response to a control-c." +msgstr "" +"移除一个已注册的结果。 一旦结果被移除则 :meth:`~TestResult.stop` 将不再会作为针对 control-C " +"的响应在结果对象上被调用。" + +#: ../../library/unittest.rst:2481 +msgid "" +"When called without arguments this function removes the control-c handler if" +" it has been installed. This function can also be used as a test decorator " +"to temporarily remove the handler while the test is being executed::" +msgstr "" +"当不附带任何参数被调用时此函数将移除已被安装的 control-C 处理器。 此函数还可被用作测试装饰器以在测试被执行时临时性地移除处理器::" diff --git a/library/unix.po b/library/unix.po new file mode 100644 index 000000000..552619fdd --- /dev/null +++ b/library/unix.po @@ -0,0 +1,33 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) 2001-2022, Python Software Foundation +# This file is distributed under the same license as the Python package. +# FIRST AUTHOR , YEAR. +# +# Translators: +# Freesand Leo , 2019 +# +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: Python 3.9\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2022-11-04 14:34+0000\n" +"PO-Revision-Date: 2017-02-16 23:33+0000\n" +"Last-Translator: Freesand Leo , 2019\n" +"Language-Team: Chinese (China) (https://www.transifex.com/python-doc/teams/5390/zh_CN/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: zh_CN\n" +"Plural-Forms: nplurals=1; plural=0;\n" + +#: ../../library/unix.rst:5 +msgid "Unix Specific Services" +msgstr "Unix 专有服务" + +#: ../../library/unix.rst:7 +msgid "" +"The modules described in this chapter provide interfaces to features that " +"are unique to the Unix operating system, or in some cases to some or many " +"variants of it. Here's an overview:" +msgstr "本章描述的模块提供了 Unix 操作系统独有特性的接口,在某些情况下也适用于它的某些或许多衍生版。 以下为模块概览:" diff --git a/library/urllib.error.po b/library/urllib.error.po new file mode 100644 index 000000000..bbf27862c --- /dev/null +++ b/library/urllib.error.po @@ -0,0 +1,103 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) 2001-2022, Python Software Foundation +# This file is distributed under the same license as the Python package. +# FIRST AUTHOR , YEAR. +# +# Translators: +# Freesand Leo , 2019 +# 汪心禾 , 2020 +# +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: Python 3.9\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2022-11-04 14:34+0000\n" +"PO-Revision-Date: 2017-02-16 23:33+0000\n" +"Last-Translator: 汪心禾 , 2020\n" +"Language-Team: Chinese (China) (https://www.transifex.com/python-doc/teams/5390/zh_CN/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: zh_CN\n" +"Plural-Forms: nplurals=1; plural=0;\n" + +#: ../../library/urllib.error.rst:2 +msgid ":mod:`urllib.error` --- Exception classes raised by urllib.request" +msgstr ":mod:`urllib.error` --- urllib.request 引发的异常类" + +#: ../../library/urllib.error.rst:10 +msgid "**Source code:** :source:`Lib/urllib/error.py`" +msgstr "**源代码:** :source:`Lib/urllib/error.py`" + +#: ../../library/urllib.error.rst:14 +msgid "" +"The :mod:`urllib.error` module defines the exception classes for exceptions " +"raised by :mod:`urllib.request`. The base exception class is " +":exc:`URLError`." +msgstr "" +":mod:`urllib.error` 模块为 :mod:`urllib.request` 所引发的异常定义了异常类。 基础异常类是 " +":exc:`URLError`。" + +#: ../../library/urllib.error.rst:17 +msgid "" +"The following exceptions are raised by :mod:`urllib.error` as appropriate:" +msgstr "下列异常会被 :mod:`urllib.error` 按需引发:" + +#: ../../library/urllib.error.rst:21 +msgid "" +"The handlers raise this exception (or derived exceptions) when they run into" +" a problem. It is a subclass of :exc:`OSError`." +msgstr "处理程序在遇到问题时会引发此异常(或其派生的异常)。 它是 :exc:`OSError` 的一个子类。" + +#: ../../library/urllib.error.rst:26 +msgid "" +"The reason for this error. It can be a message string or another exception " +"instance." +msgstr "此错误的原因。 它可以是一个消息字符串或另一个异常实例。" + +#: ../../library/urllib.error.rst:29 +msgid "" +":exc:`URLError` has been made a subclass of :exc:`OSError` instead of " +":exc:`IOError`." +msgstr ":exc:`URLError` 已被设为 :exc:`OSError` 而不是 :exc:`IOError` 的子类。" + +#: ../../library/urllib.error.rst:36 +msgid "" +"Though being an exception (a subclass of :exc:`URLError`), an " +":exc:`HTTPError` can also function as a non-exceptional file-like return " +"value (the same thing that :func:`~urllib.request.urlopen` returns). This " +"is useful when handling exotic HTTP errors, such as requests for " +"authentication." +msgstr "" +"虽然是一个异常(:exc:`URLError` 的一个子类),:exc:`HTTPError` 也可以作为一个非异常的文件类返回值(与 " +":func:`~urllib.request.urlopen` 返所回的对象相同)。 这适用于处理特殊 HTTP 错误例如作为认证请求的时候。" + +#: ../../library/urllib.error.rst:44 +msgid "" +"An HTTP status code as defined in :rfc:`2616`. This numeric value " +"corresponds to a value found in the dictionary of codes as found in " +":attr:`http.server.BaseHTTPRequestHandler.responses`." +msgstr "" +"一个 HTTP 状态码,具体定义见 :rfc:`2616`。 这个数字的值对应于存放在 " +":attr:`http.server.BaseHTTPRequestHandler.responses` 代码字典中的某个值。" + +#: ../../library/urllib.error.rst:50 +msgid "This is usually a string explaining the reason for this error." +msgstr "这通常是一个解释本次错误原因的字符串。" + +#: ../../library/urllib.error.rst:54 +msgid "" +"The HTTP response headers for the HTTP request that caused the " +":exc:`HTTPError`." +msgstr "导致 :exc:`HTTPError` 的特定 HTTP 请求的 HTTP 响应头。" + +#: ../../library/urllib.error.rst:61 +msgid "" +"This exception is raised when the :func:`~urllib.request.urlretrieve` " +"function detects that the amount of the downloaded data is less than the " +"expected amount (given by the *Content-Length* header). The :attr:`content`" +" attribute stores the downloaded (and supposedly truncated) data." +msgstr "" +"此异常会在 :func:`~urllib.request.urlretrieve` 函数检测到已下载的数据量小于期待的数据量(由 *Content-" +"Length* 头给定)时被引发。 :attr:`content` 属性中将存放已下载(可能被截断)的数据。" diff --git a/library/urllib.parse.po b/library/urllib.parse.po new file mode 100644 index 000000000..c6e2f9e07 --- /dev/null +++ b/library/urllib.parse.po @@ -0,0 +1,1073 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) 2001-2025, Python Software Foundation +# This file is distributed under the same license as the Python package. +# FIRST AUTHOR , YEAR. +# +# Translators: +# Alpha Du , 2019 +# cdarlint , 2019 +# Zombie110year , 2019 +# Kade For, 2019 +# ppcfish , 2019 +# hanfeng , 2020 +# JiaShu Xu , 2021 +# Freesand Leo , 2023 +# Rafael Fontenelle , 2025 +# +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: Python 3.9\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2025-02-07 16:40+0000\n" +"PO-Revision-Date: 2017-02-16 23:33+0000\n" +"Last-Translator: Rafael Fontenelle , 2025\n" +"Language-Team: Chinese (China) (https://app.transifex.com/python-doc/teams/5390/zh_CN/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: zh_CN\n" +"Plural-Forms: nplurals=1; plural=0;\n" + +#: ../../library/urllib.parse.rst:2 +msgid ":mod:`urllib.parse` --- Parse URLs into components" +msgstr ":mod:`urllib.parse` 用于解析 URL" + +#: ../../library/urllib.parse.rst:7 +msgid "**Source code:** :source:`Lib/urllib/parse.py`" +msgstr "**源代码:** :source:`Lib/urllib/parse.py`" + +#: ../../library/urllib.parse.rst:18 +msgid "" +"This module defines a standard interface to break Uniform Resource Locator " +"(URL) strings up in components (addressing scheme, network location, path " +"etc.), to combine the components back into a URL string, and to convert a " +"\"relative URL\" to an absolute URL given a \"base URL.\"" +msgstr "" +"该模块定义了一个标准接口,用于将统一资源定位符(URL)字符串拆分为不同部分(协议、网络位置、路径等),或将各个部分组合回 URL 字符串,并将“相对 " +"URL”转换为基于给定的“基准 URL”的绝对 URL。" + +#: ../../library/urllib.parse.rst:23 +msgid "" +"The module has been designed to match the Internet RFC on Relative Uniform " +"Resource Locators. It supports the following URL schemes: ``file``, ``ftp``," +" ``gopher``, ``hdl``, ``http``, ``https``, ``imap``, ``mailto``, ``mms``, " +"``news``, ``nntp``, ``prospero``, ``rsync``, ``rtsp``, ``rtspu``, ``sftp``, " +"``shttp``, ``sip``, ``sips``, ``snews``, ``svn``, ``svn+ssh``, ``telnet``, " +"``wais``, ``ws``, ``wss``." +msgstr "" + +#: ../../library/urllib.parse.rst:30 +msgid "" +"The :mod:`urllib.parse` module defines functions that fall into two broad " +"categories: URL parsing and URL quoting. These are covered in detail in the " +"following sections." +msgstr "" +":mod:`urllib.parse` 模块定义的函数可分为两个主要门类: URL 解析和 URL 转码。 这些函数将在以下各节中详细说明。" + +#: ../../library/urllib.parse.rst:35 +msgid "URL Parsing" +msgstr "URL 解析" + +#: ../../library/urllib.parse.rst:37 +msgid "" +"The URL parsing functions focus on splitting a URL string into its " +"components, or on combining URL components into a URL string." +msgstr "URL 解析函数用于将一个 URL 字符串分割成其组成部分,或者将 URL 的多个部分组合成一个 URL 字符串。" + +#: ../../library/urllib.parse.rst:42 +msgid "" +"Parse a URL into six components, returning a 6-item :term:`named tuple`. " +"This corresponds to the general structure of a URL: " +"``scheme://netloc/path;parameters?query#fragment``. Each tuple item is a " +"string, possibly empty. The components are not broken up into smaller parts " +"(for example, the network location is a single string), and % escapes are " +"not expanded. The delimiters as shown above are not part of the result, " +"except for a leading slash in the *path* component, which is retained if " +"present. For example:" +msgstr "" +"将一个 URL 解析为六个部分,返回一个包含 6 项的 :term:`named tuple`。 这对应于 URL 的主要结构: " +"``scheme://netloc/path;parameters?query#fragment``。 每个元组项均为字符串,可能为空字符串。 " +"这些部分不会再被拆分为更小的部分(例如,netloc 将为单个字符串),并且 % 转义不会被扩展。 上面显示的分隔符不会出现在结果中,只有 *path*" +" 部分的开头斜杠例外,它如果存在则会被保留。 例如:" + +#: ../../library/urllib.parse.rst:75 +msgid "" +"Following the syntax specifications in :rfc:`1808`, urlparse recognizes a " +"netloc only if it is properly introduced by '//'. Otherwise the input is " +"presumed to be a relative URL and thus to start with a path component." +msgstr "" +"根据 :rfc:`1808` 中的语法规范,urlparse 仅在 netloc 前面正确地附带了 '//' 的情况下才会识别它。 " +"否则输入会被当作是一个相对 URL 因而以路径的组成部分开头。" + +#: ../../library/urllib.parse.rst:94 +msgid "" +"The *scheme* argument gives the default addressing scheme, to be used only " +"if the URL does not specify one. It should be the same type (text or bytes)" +" as *urlstring*, except that the default value ``''`` is always allowed, and" +" is automatically converted to ``b''`` if appropriate." +msgstr "" +"*scheme* 参数给出了默认的协议,只有在 URL 未指定协议的情况下才会被使用。 它应该是与 *urlstring* " +"相同的类型(文本或字节串),除此之外默认值 ``''`` 也总是被允许,并会在适当情况下自动转换为 ``b''``。" + +#: ../../library/urllib.parse.rst:99 +msgid "" +"If the *allow_fragments* argument is false, fragment identifiers are not " +"recognized. Instead, they are parsed as part of the path, parameters or " +"query component, and :attr:`fragment` is set to the empty string in the " +"return value." +msgstr "" +"如果 *allow_fragments* 参数为假值,则片段标识符不会被识别。 它们会被解析为路径、参数或查询部分,在返回值中 " +":attr:`fragment` 会被设为空字符串。" + +#: ../../library/urllib.parse.rst:104 +msgid "" +"The return value is a :term:`named tuple`, which means that its items can be" +" accessed by index or as named attributes, which are:" +msgstr "返回值是一个 :term:`named tuple`,这意味着它的条目可以通过索引或作为命名属性来访问,这些属性是:" + +#: ../../library/urllib.parse.rst:108 ../../library/urllib.parse.rst:296 +#: ../../library/urllib.parse.rst:409 +msgid "Attribute" +msgstr "属性" + +#: ../../library/urllib.parse.rst:108 ../../library/urllib.parse.rst:296 +#: ../../library/urllib.parse.rst:409 +msgid "Index" +msgstr "索引" + +#: ../../library/urllib.parse.rst:108 ../../library/urllib.parse.rst:296 +#: ../../library/urllib.parse.rst:409 +msgid "Value" +msgstr "值" + +#: ../../library/urllib.parse.rst:108 ../../library/urllib.parse.rst:296 +#: ../../library/urllib.parse.rst:409 +msgid "Value if not present" +msgstr "值(如果不存在)" + +#: ../../library/urllib.parse.rst:110 ../../library/urllib.parse.rst:298 +msgid ":attr:`scheme`" +msgstr ":attr:`scheme`" + +#: ../../library/urllib.parse.rst:110 ../../library/urllib.parse.rst:298 +#: ../../library/urllib.parse.rst:411 +msgid "0" +msgstr "0" + +#: ../../library/urllib.parse.rst:110 ../../library/urllib.parse.rst:298 +msgid "URL scheme specifier" +msgstr "URL 协议说明符" + +#: ../../library/urllib.parse.rst:110 ../../library/urllib.parse.rst:298 +msgid "*scheme* parameter" +msgstr "*scheme* 参数" + +#: ../../library/urllib.parse.rst:112 ../../library/urllib.parse.rst:300 +msgid ":attr:`netloc`" +msgstr ":attr:`netloc`" + +#: ../../library/urllib.parse.rst:112 ../../library/urllib.parse.rst:300 +#: ../../library/urllib.parse.rst:413 +msgid "1" +msgstr "1" + +#: ../../library/urllib.parse.rst:112 ../../library/urllib.parse.rst:300 +msgid "Network location part" +msgstr "网络位置部分" + +#: ../../library/urllib.parse.rst:112 ../../library/urllib.parse.rst:114 +#: ../../library/urllib.parse.rst:116 ../../library/urllib.parse.rst:119 +#: ../../library/urllib.parse.rst:121 ../../library/urllib.parse.rst:300 +#: ../../library/urllib.parse.rst:302 ../../library/urllib.parse.rst:304 +#: ../../library/urllib.parse.rst:306 ../../library/urllib.parse.rst:411 +#: ../../library/urllib.parse.rst:413 +msgid "empty string" +msgstr "空字符串" + +#: ../../library/urllib.parse.rst:114 ../../library/urllib.parse.rst:302 +msgid ":attr:`path`" +msgstr ":attr:`path`" + +#: ../../library/urllib.parse.rst:114 ../../library/urllib.parse.rst:302 +msgid "2" +msgstr "2" + +#: ../../library/urllib.parse.rst:114 ../../library/urllib.parse.rst:302 +msgid "Hierarchical path" +msgstr "分层路径" + +#: ../../library/urllib.parse.rst:116 +msgid ":attr:`params`" +msgstr ":attr:`params`" + +#: ../../library/urllib.parse.rst:116 ../../library/urllib.parse.rst:304 +msgid "3" +msgstr "3" + +#: ../../library/urllib.parse.rst:116 +msgid "Parameters for last path element" +msgstr "最后路径元素的参数" + +#: ../../library/urllib.parse.rst:119 ../../library/urllib.parse.rst:304 +msgid ":attr:`query`" +msgstr ":attr:`query`" + +#: ../../library/urllib.parse.rst:119 ../../library/urllib.parse.rst:306 +msgid "4" +msgstr "4" + +#: ../../library/urllib.parse.rst:119 ../../library/urllib.parse.rst:304 +msgid "Query component" +msgstr "查询组件" + +#: ../../library/urllib.parse.rst:121 ../../library/urllib.parse.rst:306 +#: ../../library/urllib.parse.rst:413 +msgid ":attr:`fragment`" +msgstr ":attr:`fragment`" + +#: ../../library/urllib.parse.rst:121 +msgid "5" +msgstr "5" + +#: ../../library/urllib.parse.rst:121 ../../library/urllib.parse.rst:306 +#: ../../library/urllib.parse.rst:413 +msgid "Fragment identifier" +msgstr "片段标识符" + +#: ../../library/urllib.parse.rst:123 ../../library/urllib.parse.rst:308 +msgid ":attr:`username`" +msgstr ":attr:`username`" + +#: ../../library/urllib.parse.rst:123 ../../library/urllib.parse.rst:308 +msgid "User name" +msgstr "用户名" + +#: ../../library/urllib.parse.rst:123 ../../library/urllib.parse.rst:125 +#: ../../library/urllib.parse.rst:127 ../../library/urllib.parse.rst:129 +#: ../../library/urllib.parse.rst:308 ../../library/urllib.parse.rst:310 +#: ../../library/urllib.parse.rst:312 ../../library/urllib.parse.rst:314 +msgid ":const:`None`" +msgstr ":const:`None`" + +#: ../../library/urllib.parse.rst:125 ../../library/urllib.parse.rst:310 +msgid ":attr:`password`" +msgstr ":attr:`password`" + +#: ../../library/urllib.parse.rst:125 ../../library/urllib.parse.rst:310 +msgid "Password" +msgstr "密码" + +#: ../../library/urllib.parse.rst:127 ../../library/urllib.parse.rst:312 +msgid ":attr:`hostname`" +msgstr ":attr:`hostname`" + +#: ../../library/urllib.parse.rst:127 ../../library/urllib.parse.rst:312 +msgid "Host name (lower case)" +msgstr "主机名(小写)" + +#: ../../library/urllib.parse.rst:129 ../../library/urllib.parse.rst:314 +msgid ":attr:`port`" +msgstr ":attr:`port`" + +#: ../../library/urllib.parse.rst:129 ../../library/urllib.parse.rst:314 +msgid "Port number as integer, if present" +msgstr "端口号为整数(如果存在)" + +#: ../../library/urllib.parse.rst:133 ../../library/urllib.parse.rst:318 +msgid "" +"Reading the :attr:`port` attribute will raise a :exc:`ValueError` if an " +"invalid port is specified in the URL. See section :ref:`urlparse-result-" +"object` for more information on the result object." +msgstr "" +"如果在 URL 中指定了无效的端口,读取 :attr:`port` 属性将引发 :exc:`ValueError`。 有关结果对象的更多信息请参阅 " +":ref:`urlparse-result-object` 一节。" + +#: ../../library/urllib.parse.rst:137 ../../library/urllib.parse.rst:322 +msgid "" +"Unmatched square brackets in the :attr:`netloc` attribute will raise a " +":exc:`ValueError`." +msgstr "在 :attr:`netloc` 属性中不匹配的方括号将引发 :exc:`ValueError`。" + +#: ../../library/urllib.parse.rst:140 ../../library/urllib.parse.rst:325 +msgid "" +"Characters in the :attr:`netloc` attribute that decompose under NFKC " +"normalization (as used by the IDNA encoding) into any of ``/``, ``?``, " +"``#``, ``@``, or ``:`` will raise a :exc:`ValueError`. If the URL is " +"decomposed before parsing, no error will be raised." +msgstr "" +"如果 :attr:`netloc` 属性中的字符在 NFKC 规范化下(如 IDNA 编码格式所使用的)被分解成 ``/``, ``?``, " +"``#``, ``@`` 或 ``:`` 则将引发 :exc:`ValueError`。 如果在解析之前 URL 就被分解,则不会引发错误。" + +#: ../../library/urllib.parse.rst:145 +msgid "" +"As is the case with all named tuples, the subclass has a few additional " +"methods and attributes that are particularly useful. One such method is " +":meth:`_replace`. The :meth:`_replace` method will return a new ParseResult " +"object replacing specified fields with new values." +msgstr "" +"与所有具名元组的情况一样,该子类还有一些特别有用的附加方法和属性。 其中一个方法是 :meth:`_replace`。 :meth:`_replace`" +" 方法将返回一个新的 ParseResult 对象来将指定字段替换为新的值。" + +#: ../../library/urllib.parse.rst:164 +msgid "" +":func:`urlparse` does not perform validation. See :ref:`URL parsing " +"security ` for details." +msgstr "" +":func:`urlparse` 不会执行验证。 请参阅 :ref:`URL 解析安全 ` 了解详情。" + +#: ../../library/urllib.parse.rst:167 +msgid "Added IPv6 URL parsing capabilities." +msgstr "添加了IPv6 URL解析功能。" + +#: ../../library/urllib.parse.rst:170 +msgid "" +"The fragment is now parsed for all URL schemes (unless *allow_fragment* is " +"false), in accordance with :rfc:`3986`. Previously, a whitelist of schemes " +"that support fragments existed." +msgstr "" + +#: ../../library/urllib.parse.rst:175 ../../library/urllib.parse.rst:339 +msgid "" +"Out-of-range port numbers now raise :exc:`ValueError`, instead of returning " +":const:`None`." +msgstr "超范围的端口号现在会引发 :exc:`ValueError`,而不是返回 :const:`None`。" + +#: ../../library/urllib.parse.rst:179 ../../library/urllib.parse.rst:343 +msgid "" +"Characters that affect netloc parsing under NFKC normalization will now " +"raise :exc:`ValueError`." +msgstr "在 NFKC 规范化下会影响 netloc 解析的字符现在将引发 :exc:`ValueError`。" + +#: ../../library/urllib.parse.rst:186 +msgid "" +"Parse a query string given as a string argument (data of type " +":mimetype:`application/x-www-form-urlencoded`). Data are returned as a " +"dictionary. The dictionary keys are the unique query variable names and the" +" values are lists of values for each name." +msgstr "" +"解析以字符串参数形式(类型为 :mimetype:`application/x-www-form-urlencoded` 的数据)给出的查询字符串。 " +"返回字典形式的数据。 结果字典的键为唯一的查询变量名而值为每个变量名对应的值列表。" + +#: ../../library/urllib.parse.rst:191 ../../library/urllib.parse.rst:236 +msgid "" +"The optional argument *keep_blank_values* is a flag indicating whether blank" +" values in percent-encoded queries should be treated as blank strings. A " +"true value indicates that blanks should be retained as blank strings. The " +"default false value indicates that blank values are to be ignored and " +"treated as if they were not included." +msgstr "" +"可选参数 *keep_blank_values* 是一个旗标,指明是否要将以百分号转码的空值作为空字符串处理。 真值表示空值应当被保留作为空字符串。 " +"默认的假值表示空值会被忽略并将其视作未包括的值。" + +#: ../../library/urllib.parse.rst:197 ../../library/urllib.parse.rst:242 +msgid "" +"The optional argument *strict_parsing* is a flag indicating what to do with " +"parsing errors. If false (the default), errors are silently ignored. If " +"true, errors raise a :exc:`ValueError` exception." +msgstr "" +"可选参数 *strict_parsing* 是一个旗标,指明要如何处理解析错误。 如为假值(默认),错误会被静默地忽略。 如为真值,错误会引发 " +":exc:`ValueError` 异常。" + +#: ../../library/urllib.parse.rst:201 ../../library/urllib.parse.rst:246 +msgid "" +"The optional *encoding* and *errors* parameters specify how to decode " +"percent-encoded sequences into Unicode characters, as accepted by the " +":meth:`bytes.decode` method." +msgstr "" +"可选的 *encoding* 和 *errors* 形参指定如何将以百分号编码的序列解码为 Unicode 字符,即作为 " +":meth:`bytes.decode` 方法所接受的数据。" + +#: ../../library/urllib.parse.rst:205 ../../library/urllib.parse.rst:250 +msgid "" +"The optional argument *max_num_fields* is the maximum number of fields to " +"read. If set, then throws a :exc:`ValueError` if there are more than " +"*max_num_fields* fields read." +msgstr "" +"可选参数 *max_num_fields* 是要读取的最大字段数量的。 如果设置,则如果读取的字段超过 *max_num_fields* 会引发 " +":exc:`ValueError`。" + +#: ../../library/urllib.parse.rst:209 ../../library/urllib.parse.rst:254 +msgid "" +"The optional argument *separator* is the symbol to use for separating the " +"query arguments. It defaults to ``&``." +msgstr "可选参数 *separator* 是用来分隔查询参数的符号。 默认为 ``&``。" + +#: ../../library/urllib.parse.rst:212 +msgid "" +"Use the :func:`urllib.parse.urlencode` function (with the ``doseq`` " +"parameter set to ``True``) to convert such dictionaries into query strings." +msgstr "" +"使用 :func:`urllib.parse.urlencode` 函数 (并将 ``doseq`` 形参设为 ``True``) " +"将这样的字典转换为查询字符串。" + +#: ../../library/urllib.parse.rst:217 ../../library/urllib.parse.rst:259 +msgid "Add *encoding* and *errors* parameters." +msgstr "增加了 *encoding* 和 *errors* 形参。" + +#: ../../library/urllib.parse.rst:220 ../../library/urllib.parse.rst:262 +msgid "Added *max_num_fields* parameter." +msgstr "增加了 *max_num_fields* 形参。" + +#: ../../library/urllib.parse.rst:223 ../../library/urllib.parse.rst:265 +msgid "" +"Added *separator* parameter with the default value of ``&``. Python versions" +" earlier than Python 3.9.2 allowed using both ``;`` and ``&`` as query " +"parameter separator. This has been changed to allow only a single separator " +"key, with ``&`` as the default separator." +msgstr "" + +#: ../../library/urllib.parse.rst:232 +msgid "" +"Parse a query string given as a string argument (data of type " +":mimetype:`application/x-www-form-urlencoded`). Data are returned as a list" +" of name, value pairs." +msgstr "" +"解析以字符串参数形式(类型为 :mimetype:`application/x-www-form-urlencoded` 的数据)给出的查询字符串。 " +"数据以字段名和字段值对列表的形式返回。" + +#: ../../library/urllib.parse.rst:256 +msgid "" +"Use the :func:`urllib.parse.urlencode` function to convert such lists of " +"pairs into query strings." +msgstr "使用 :func:`urllib.parse.urlencode` 函数将这样的名值对列表转换为查询字符串。" + +#: ../../library/urllib.parse.rst:274 +msgid "" +"Construct a URL from a tuple as returned by ``urlparse()``. The *parts* " +"argument can be any six-item iterable. This may result in a slightly " +"different, but equivalent URL, if the URL that was parsed originally had " +"unnecessary delimiters (for example, a ``?`` with an empty query; the RFC " +"states that these are equivalent)." +msgstr "" +"根据 ``urlparse()`` 所返回的元组来构造一个 URL。 *parts* 参数可以是任何包含六个条目的可迭代对象。 " +"构造的结果可能是略有不同但保持等价的 URL,如果被解析的 URL 原本包含不必要的分隔符(例如,带有空查询的 ``?``;RFC 已声明这是等价的)。" + +#: ../../library/urllib.parse.rst:283 +msgid "" +"This is similar to :func:`urlparse`, but does not split the params from the " +"URL. This should generally be used instead of :func:`urlparse` if the more " +"recent URL syntax allowing parameters to be applied to each segment of the " +"*path* portion of the URL (see :rfc:`2396`) is wanted. A separate function " +"is needed to separate the path segments and parameters. This function " +"returns a 5-item :term:`named tuple`::" +msgstr "" +"此函数类似于 :func:`urlparse`,但不会拆分来自 URL 的参数。 此函数通常应当在需要允许将参数应用到 URL 的 *path* " +"部分的每个分节的较新的 URL 语法的情况下 (参见 :rfc:`2396`) 被用来代替 :func:`urlparse`。 " +"需要使用一个拆分函数来拆分路径分节和参数。 此函数将返回包含 5 个条目的 :term:`named tuple`::" + +#: ../../library/urllib.parse.rst:292 ../../library/urllib.parse.rst:405 +msgid "" +"The return value is a :term:`named tuple`, its items can be accessed by " +"index or as named attributes:" +msgstr "返回值是一个 :term:`named tuple`,它的条目可以通过索引或作为命名属性来访问:" + +#: ../../library/urllib.parse.rst:330 +msgid "" +"Following some of the `WHATWG spec`_ that updates RFC 3986, leading C0 " +"control and space characters are stripped from the URL. ``\\n``, ``\\r`` and" +" tab ``\\t`` characters are removed from the URL at any position." +msgstr "" +"按照针对 RFC 3986 进行更新的 `WHATWG spec`_,打头的 C0 控制符和空格符将从 URL 中去除。 任意位置上的 ``\\n``," +" ``\\r`` 和制表符 ``\\t`` 等字符也将从 URL 中去除。at any position." + +#: ../../library/urllib.parse.rst:336 +msgid "" +":func:`urlsplit` does not perform validation. See :ref:`URL parsing " +"security ` for details." +msgstr "" +":func:`urlsplit` 不会执行验证。 请参阅 :ref:`URL 解析安全 ` 了解详情。" + +#: ../../library/urllib.parse.rst:347 +msgid "ASCII newline and tab characters are stripped from the URL." +msgstr "ASCII 换行符和制表符会从 URL 中被去除。" + +#: ../../library/urllib.parse.rst:350 +msgid "" +"Leading WHATWG C0 control and space characters are stripped from the URL." +msgstr "打头的 WHATWG C0 控制符和空格符将从 URL 中去除。" + +#: ../../library/urllib.parse.rst:357 +msgid "" +"Combine the elements of a tuple as returned by :func:`urlsplit` into a " +"complete URL as a string. The *parts* argument can be any five-item " +"iterable. This may result in a slightly different, but equivalent URL, if " +"the URL that was parsed originally had unnecessary delimiters (for example, " +"a ? with an empty query; the RFC states that these are equivalent)." +msgstr "" +"将 :func:`urlsplit` 所返回的元组中的元素合并为一个字符串形式的完整 URL。 *parts* 参数可以是任何包含五个条目的可迭代对象。" +" 其结果可能是略有不同但保持等价的 URL,如果被解析的 URL 原本包含不必要的分隔符(例如,带有空查询的 ?;RFC 已声明这是等价的)。" + +#: ../../library/urllib.parse.rst:366 +msgid "" +"Construct a full (\"absolute\") URL by combining a \"base URL\" (*base*) " +"with another URL (*url*). Informally, this uses components of the base URL," +" in particular the addressing scheme, the network location and (part of) the" +" path, to provide missing components in the relative URL. For example:" +msgstr "" +"通过合并一个 \"基准 URL\" (*base*) 和另一个 URL (*url*) 来构造一个完整 (\"absolute\") URL。 " +"在非正式情况下,这将使用基准 URL 的各部分,特别是地址协议、网络位置和 (一部分) 路径来提供相对 URL 中缺失的部分。 例如:" + +#: ../../library/urllib.parse.rst:375 +msgid "" +"The *allow_fragments* argument has the same meaning and default as for " +":func:`urlparse`." +msgstr "*allow_fragments* 参数具有与 :func:`urlparse` 中的对应参数一致的含义与默认值。" + +#: ../../library/urllib.parse.rst:380 +msgid "" +"If *url* is an absolute URL (that is, it starts with ``//`` or " +"``scheme://``), the *url*'s hostname and/or scheme will be present in the " +"result. For example:" +msgstr "" +"如果 *url* 为绝对 URL (即以 ``//`` 或 ``scheme://`` 打头),则 *url* 的主机名和/或协议将出现在结果中。 " +"例如:" + +#: ../../library/urllib.parse.rst:389 +msgid "" +"If you do not want that behavior, preprocess the *url* with :func:`urlsplit`" +" and :func:`urlunsplit`, removing possible *scheme* and *netloc* parts." +msgstr "" +"如果你不想要那样的行为,请使用 :func:`urlsplit` 和 :func:`urlunsplit` 对 *url* 进行预处理,移除可能存在的 " +"*scheme* 和 *netloc* 部分。" + +#: ../../library/urllib.parse.rst:395 +msgid "Behavior updated to match the semantics defined in :rfc:`3986`." +msgstr "更新行为以匹配 :rfc:`3986` 中定义的语义。" + +#: ../../library/urllib.parse.rst:400 +msgid "" +"If *url* contains a fragment identifier, return a modified version of *url* " +"with no fragment identifier, and the fragment identifier as a separate " +"string. If there is no fragment identifier in *url*, return *url* " +"unmodified and an empty string." +msgstr "" +"如果 *url* 包含片段标识符,则返回不带片段标识符的 *url* 修改版本。 如果 *url* 中没有片段标识符,则返回未经修改的 *url* " +"和一个空字符串。" + +#: ../../library/urllib.parse.rst:411 +msgid ":attr:`url`" +msgstr ":attr:`url`" + +#: ../../library/urllib.parse.rst:411 +msgid "URL with no fragment" +msgstr "不带片段的 URL" + +#: ../../library/urllib.parse.rst:416 +msgid "" +"See section :ref:`urlparse-result-object` for more information on the result" +" object." +msgstr "请参阅 :ref:`urlparse-result-object` 一节了解有关结果对象的更多信息。" + +#: ../../library/urllib.parse.rst:419 +msgid "Result is a structured object rather than a simple 2-tuple." +msgstr "结果为已构造好的对象而不是一个简单的 2 元组。-tuple." + +#: ../../library/urllib.parse.rst:424 +msgid "" +"Extract the url from a wrapped URL (that is, a string formatted as " +"````, ````, " +"``URL:scheme://host/path`` or ``scheme://host/path``). If *url* is not a " +"wrapped URL, it is returned without changes." +msgstr "" +"从已包装的 URL (即被格式化为 ````, ````, " +"``URL:scheme://host/path`` 或 ``scheme://host/path`` 的字符串) 中提取 URL。 如果 *url* " +"不是一个已包装的 URL,它将被原样返回。" + +#: ../../library/urllib.parse.rst:432 +msgid "URL parsing security" +msgstr "URL 解析安全" + +#: ../../library/urllib.parse.rst:434 +msgid "" +"The :func:`urlsplit` and :func:`urlparse` APIs do not perform **validation**" +" of inputs. They may not raise errors on inputs that other applications " +"consider invalid. They may also succeed on some inputs that might not be " +"considered URLs elsewhere. Their purpose is for practical functionality " +"rather than purity." +msgstr "" +":func:`urlsplit` 和 :func:`urlparse` API 不会对输入进行 **验证**。 " +"它们可能不会因其他应用程序认为不合法的输入而引发错误。 它们还可能在其他地方认为不是 URL 的输入上成功运行。 " +"它们的目标是达成实际的功能而不是保持纯净。" + +#: ../../library/urllib.parse.rst:440 +msgid "" +"Instead of raising an exception on unusual input, they may instead return " +"some component parts as empty strings. Or components may contain more than " +"perhaps they should." +msgstr "他们在非正常的输入上可能不会引发异常,而是以空字符串的形式返回某些部分。 或者可能会包含某些不应包含的部分。" + +#: ../../library/urllib.parse.rst:444 +msgid "" +"We recommend that users of these APIs where the values may be used anywhere " +"with security implications code defensively. Do some verification within " +"your code before trusting a returned component part. Does that ``scheme`` " +"make sense? Is that a sensible ``path``? Is there anything strange about " +"that ``hostname``? etc." +msgstr "" +"我们建议这些 API 的用户在任何使用的值具有安全意义的地方应用防御性代码。 在你的代码中进行某些验证之后再信任被返回的组件。 这个 " +"``scheme`` 合理吗?那个 ``path`` 正确吗? 那个 ``hostname`` 是否存在怪异之处?等等。" + +#: ../../library/urllib.parse.rst:453 +msgid "Parsing ASCII Encoded Bytes" +msgstr "解析ASCII编码字节" + +#: ../../library/urllib.parse.rst:455 +msgid "" +"The URL parsing functions were originally designed to operate on character " +"strings only. In practice, it is useful to be able to manipulate properly " +"quoted and encoded URLs as sequences of ASCII bytes. Accordingly, the URL " +"parsing functions in this module all operate on :class:`bytes` and " +":class:`bytearray` objects in addition to :class:`str` objects." +msgstr "" +"这些 URL 解析函数最初设计只用于操作字符串。 但在实践中,它也能够操作经过正确转码和编码的 ASCII 字节序列形式的 URL。 相应地,此模块中的" +" URL 解析函数既可以操作 :class:`str` 对象也可以操作 :class:`bytes` 和 :class:`bytearray` 对象。" + +#: ../../library/urllib.parse.rst:461 +msgid "" +"If :class:`str` data is passed in, the result will also contain only " +":class:`str` data. If :class:`bytes` or :class:`bytearray` data is passed " +"in, the result will contain only :class:`bytes` data." +msgstr "" +"如果传入 :class:`str` 数据,结果将只包含 :class:`str` 数据。 如果传入 :class:`bytes` 或 " +":class:`bytearray` 数据,则结果也将只包含 :class:`bytes` 数据。" + +#: ../../library/urllib.parse.rst:465 +msgid "" +"Attempting to mix :class:`str` data with :class:`bytes` or " +":class:`bytearray` in a single function call will result in a " +":exc:`TypeError` being raised, while attempting to pass in non-ASCII byte " +"values will trigger :exc:`UnicodeDecodeError`." +msgstr "" +"试图在单个函数调用中混用 :class:`str` 数据和 :class:`bytes` 或 :class:`bytearray` 数据将导致引发 " +":exc:`TypeError`,而试图传入非 ASCII 字节值则将引发 :exc:`UnicodeDecodeError`。" + +#: ../../library/urllib.parse.rst:470 +msgid "" +"To support easier conversion of result objects between :class:`str` and " +":class:`bytes`, all return values from URL parsing functions provide either " +"an :meth:`encode` method (when the result contains :class:`str` data) or a " +":meth:`decode` method (when the result contains :class:`bytes` data). The " +"signatures of these methods match those of the corresponding :class:`str` " +"and :class:`bytes` methods (except that the default encoding is ``'ascii'`` " +"rather than ``'utf-8'``). Each produces a value of a corresponding type that" +" contains either :class:`bytes` data (for :meth:`encode` methods) or " +":class:`str` data (for :meth:`decode` methods)." +msgstr "" +"为了支持结果对象在 :class:`str` 和 :class:`bytes` 之间方便地转换,所有来自 URL 解析函数的返回值都会提供 " +":meth:`encode` 方法 (当结果包含 :class:`str` 数据) 或 :meth:`decode` 方法 (当结果包含 " +":class:`bytes` 数据)。 这些方法的签名与 :class:`str` 和 :class:`bytes` 的对应方法相匹配 " +"(不同之处在于其默认编码格式是 ``'ascii'`` 而非 ``'utf-8'``)。 每个方法会输出包含相应类型的 :class:`bytes` " +"数据 (对于 :meth:`encode` 方法) 或 :class:`str` 数据 (对于 :meth:`decode` 方法) 的值。" + +#: ../../library/urllib.parse.rst:481 +msgid "" +"Applications that need to operate on potentially improperly quoted URLs that" +" may contain non-ASCII data will need to do their own decoding from bytes to" +" characters before invoking the URL parsing methods." +msgstr "" +"对于某些需要在有可能不正确地转码的包含非 ASCII 数据的 URL 上进行操作的应用程序来说,在唤起 URL 解析方法之前必须自行将字节串解码为字符。" + +#: ../../library/urllib.parse.rst:485 +msgid "" +"The behaviour described in this section applies only to the URL parsing " +"functions. The URL quoting functions use their own rules when producing or " +"consuming byte sequences as detailed in the documentation of the individual " +"URL quoting functions." +msgstr "" +"在本节中描述的行为仅适用于 URL 解析函数。 URL 转码函数在产生和消耗字节序列时使用它们自己的规则,详情参见单独 URL 转码函数的文档。" + +#: ../../library/urllib.parse.rst:490 +msgid "URL parsing functions now accept ASCII encoded byte sequences" +msgstr "URL 解析函数现在接受 ASCII 编码的字节序列" + +#: ../../library/urllib.parse.rst:497 +msgid "Structured Parse Results" +msgstr "结构化解析结果" + +#: ../../library/urllib.parse.rst:499 +msgid "" +"The result objects from the :func:`urlparse`, :func:`urlsplit` and " +":func:`urldefrag` functions are subclasses of the :class:`tuple` type. These" +" subclasses add the attributes listed in the documentation for those " +"functions, the encoding and decoding support described in the previous " +"section, as well as an additional method:" +msgstr "" +":func:`urlparse`, :func:`urlsplit` 和 :func:`urldefrag` 函数的结果对象是 " +":class:`tuple` 类型的子类。 这些子类中增加了在那些函数的文档中列出的属性,之前小节中描述的编码和解码支持,以及一个附加方法:" + +#: ../../library/urllib.parse.rst:507 +msgid "" +"Return the re-combined version of the original URL as a string. This may " +"differ from the original URL in that the scheme may be normalized to lower " +"case and empty components may be dropped. Specifically, empty parameters, " +"queries, and fragment identifiers will be removed." +msgstr "" +"以字符串形式返回原始 URL 的重合并版本。 这可能与原始 URL 有所不同,例如协议的名称可能被正规化为小写字母、空的组成部分可能被丢弃。 " +"特别地,空的参数、查询和片段标识符将会被移除。" + +#: ../../library/urllib.parse.rst:512 +msgid "" +"For :func:`urldefrag` results, only empty fragment identifiers will be " +"removed. For :func:`urlsplit` and :func:`urlparse` results, all noted " +"changes will be made to the URL returned by this method." +msgstr "" +"对于 :func:`urldefrag` 的结果,只有空的片段标识符会被移除。 对于 :func:`urlsplit` 和 " +":func:`urlparse` 的结果,所有被记录的改变都会被应用到此方法所返回的 URL 上。" + +#: ../../library/urllib.parse.rst:516 +msgid "" +"The result of this method remains unchanged if passed back through the " +"original parsing function:" +msgstr "如果是通过原始的解析方法传回则此方法的结果会保持不变:" + +#: ../../library/urllib.parse.rst:529 +msgid "" +"The following classes provide the implementations of the structured parse " +"results when operating on :class:`str` objects:" +msgstr "下面的类提供了当在 :class:`str` 对象上操作时对结构化解析结果的实现:" + +#: ../../library/urllib.parse.rst:534 +msgid "" +"Concrete class for :func:`urldefrag` results containing :class:`str` data. " +"The :meth:`encode` method returns a :class:`DefragResultBytes` instance." +msgstr "" +"用于 :func:`urldefrag` 结果的实体类,包含有 :class:`str` 数据。 :meth:`encode` 方法会返回一个 " +":class:`DefragResultBytes` 实例。" + +#: ../../library/urllib.parse.rst:542 +msgid "" +"Concrete class for :func:`urlparse` results containing :class:`str` data. " +"The :meth:`encode` method returns a :class:`ParseResultBytes` instance." +msgstr "" +"用于 :func:`urlparse` 结果的实体类,包含有 :class:`str` 数据。 :meth:`encode` 方法会返回一个 " +":class:`ParseResultBytes` 实例。" + +#: ../../library/urllib.parse.rst:548 +msgid "" +"Concrete class for :func:`urlsplit` results containing :class:`str` data. " +"The :meth:`encode` method returns a :class:`SplitResultBytes` instance." +msgstr "" +"用于 :func:`urlsplit` 结果的实体类,包含有 :class:`str` 数据。 :meth:`encode` 方法会返回一个 " +":class:`SplitResultBytes` 实例。" + +#: ../../library/urllib.parse.rst:553 +msgid "" +"The following classes provide the implementations of the parse results when " +"operating on :class:`bytes` or :class:`bytearray` objects:" +msgstr "下面的类提供了当在 :class:`bytes` 或 :class:`bytearray` 对象上操作时对解析结果的实现:" + +#: ../../library/urllib.parse.rst:558 +msgid "" +"Concrete class for :func:`urldefrag` results containing :class:`bytes` data." +" The :meth:`decode` method returns a :class:`DefragResult` instance." +msgstr "" +"用于 :func:`urldefrag` 结果的实体类,包含有 :class:`bytes` 数据。 :meth:`decode` 方法会返回一个 " +":class:`DefragResult` 实例。" + +#: ../../library/urllib.parse.rst:566 +msgid "" +"Concrete class for :func:`urlparse` results containing :class:`bytes` data. " +"The :meth:`decode` method returns a :class:`ParseResult` instance." +msgstr "" +"用于 :func:`urlparse` 结果的实体类,包含有 :class:`bytes` 数据。 :meth:`decode` 方法会返回一个 " +":class:`ParseResult` 实例。" + +#: ../../library/urllib.parse.rst:574 +msgid "" +"Concrete class for :func:`urlsplit` results containing :class:`bytes` data. " +"The :meth:`decode` method returns a :class:`SplitResult` instance." +msgstr "" +"用于 :func:`urlsplit` 结果的实体类,包含有 :class:`bytes` 数据。 :meth:`decode` 方法会返回一个 " +":class:`SplitResult` 实例。" + +#: ../../library/urllib.parse.rst:582 +msgid "URL Quoting" +msgstr "URL 转码" + +#: ../../library/urllib.parse.rst:584 +msgid "" +"The URL quoting functions focus on taking program data and making it safe " +"for use as URL components by quoting special characters and appropriately " +"encoding non-ASCII text. They also support reversing these operations to " +"recreate the original data from the contents of a URL component if that task" +" isn't already covered by the URL parsing functions above." +msgstr "" +"URL 转码函数的功能是接收程序数据并通过对特殊字符进行转码并正确编码非 ASCII 文本来将其转为可以安全地用作 URL 组成部分的形式。 " +"它们还支持逆转此操作以便从作为 URL 组成部分的内容中重建原始数据,如果上述的 URL 解析函数还未覆盖此功能的话。" + +#: ../../library/urllib.parse.rst:592 +msgid "" +"Replace special characters in *string* using the ``%xx`` escape. Letters, " +"digits, and the characters ``'_.-~'`` are never quoted. By default, this " +"function is intended for quoting the path section of a URL. The optional " +"*safe* parameter specifies additional ASCII characters that should not be " +"quoted --- its default value is ``'/'``." +msgstr "" +"使用 ``%xx`` 转义符替换 *string* 中的特殊字符。 字母、数字和 ``'_.-~'`` 等字符一定不会被转码。 在默认情况下,此函数只对" +" URL 的路径部分进行转码。 可选的 *safe* 形参额外指定不应被转码的 ASCII 字符 --- 其默认值为 ``'/'``。" + +#: ../../library/urllib.parse.rst:598 ../../library/urllib.parse.rst:644 +#: ../../library/urllib.parse.rst:673 +msgid "*string* may be either a :class:`str` or a :class:`bytes` object." +msgstr "*string* 可以是 :class:`str` 或 :class:`bytes` 对象。" + +#: ../../library/urllib.parse.rst:600 +msgid "" +"Moved from :rfc:`2396` to :rfc:`3986` for quoting URL strings. \"~\" is now " +"included in the set of unreserved characters." +msgstr "从 :rfc:`2396` 迁移到 :rfc:`3986` 以转码 URL 字符串。 \"~\" 现在已被包括在非保留字符集中。" + +#: ../../library/urllib.parse.rst:604 +msgid "" +"The optional *encoding* and *errors* parameters specify how to deal with " +"non-ASCII characters, as accepted by the :meth:`str.encode` method. " +"*encoding* defaults to ``'utf-8'``. *errors* defaults to ``'strict'``, " +"meaning unsupported characters raise a :class:`UnicodeEncodeError`. " +"*encoding* and *errors* must not be supplied if *string* is a " +":class:`bytes`, or a :class:`TypeError` is raised." +msgstr "" +"可选的 *encoding* 和 *errors* 形参指明如何处理非 ASCII 字符,与 :meth:`str.encode` 方法所接受的值一样。" +" *encoding* 默认为 ``'utf-8'``。 *errors* 默认为 ``'strict'``,表示不受支持的字符将引发 " +":class:`UnicodeEncodeError`。 如果 *string* 为 :class:`bytes` 则不可提供 *encoding* 和" +" *errors*,否则将引发 :class:`TypeError`。" + +#: ../../library/urllib.parse.rst:612 +msgid "" +"Note that ``quote(string, safe, encoding, errors)`` is equivalent to " +"``quote_from_bytes(string.encode(encoding, errors), safe)``." +msgstr "" +"请注意 ``quote(string, safe, encoding, errors)`` 等价于 " +"``quote_from_bytes(string.encode(encoding, errors), safe)``。" + +#: ../../library/urllib.parse.rst:615 +msgid "Example: ``quote('/El Niño/')`` yields ``'/El%20Ni%C3%B1o/'``." +msgstr "例如: ``quote('/El Niño/')`` 将产生 ``'/El%20Ni%C3%B1o/'``。" + +#: ../../library/urllib.parse.rst:620 +msgid "" +"Like :func:`quote`, but also replace spaces with plus signs, as required for" +" quoting HTML form values when building up a query string to go into a URL. " +"Plus signs in the original string are escaped unless they are included in " +"*safe*. It also does not have *safe* default to ``'/'``." +msgstr "" +"类似于 :func:`quote`,但还会使用加号来替换空格,如在构建放入 URL 的查询字符串时对于转码 HTML 表单值时所要求的那样。 " +"原始字符串中的加号会被转义,除非它们已包括在 *safe* 中。 它也不会将 *safe* 的默认值设为 ``'/'``。" + +#: ../../library/urllib.parse.rst:625 +msgid "Example: ``quote_plus('/El Niño/')`` yields ``'%2FEl+Ni%C3%B1o%2F'``." +msgstr "例如: ``quote_plus('/El Niño/')`` 将产生 ``'%2FEl+Ni%C3%B1o%2F'``。" + +#: ../../library/urllib.parse.rst:630 +msgid "" +"Like :func:`quote`, but accepts a :class:`bytes` object rather than a " +":class:`str`, and does not perform string-to-bytes encoding." +msgstr "" +"类似于 :func:`quote`,但是接受 :class:`bytes` 对象而非 :class:`str`,并且不执行从字符串到字节串的编码。" + +#: ../../library/urllib.parse.rst:633 +msgid "Example: ``quote_from_bytes(b'a&\\xef')`` yields ``'a%26%EF'``." +msgstr "例如: ``quote_from_bytes(b'a&\\xef')`` 将产生 ``'a%26%EF'``。" + +#: ../../library/urllib.parse.rst:639 +msgid "" +"Replace ``%xx`` escapes with their single-character equivalent. The optional" +" *encoding* and *errors* parameters specify how to decode percent-encoded " +"sequences into Unicode characters, as accepted by the :meth:`bytes.decode` " +"method." +msgstr "" +"将 ``%xx`` 转义符替换为其单字符等价物。 可选的 *encoding* 和 *errors* 形参指定如何将以百分号编码的序列解码为 " +"Unicode 字符,即 :meth:`bytes.decode` 方法所接受的数据。" + +#: ../../library/urllib.parse.rst:646 +msgid "" +"*encoding* defaults to ``'utf-8'``. *errors* defaults to ``'replace'``, " +"meaning invalid sequences are replaced by a placeholder character." +msgstr "" +"*encoding* 默认为 ``'utf-8'``。 *errors* 默认为 ``'replace'``,表示无效的序列将被替换为占位字符。" + +#: ../../library/urllib.parse.rst:650 +msgid "Example: ``unquote('/El%20Ni%C3%B1o/')`` yields ``'/El Niño/'``." +msgstr "例如: ``unquote('/El%20Ni%C3%B1o/')`` 将产生 ``'/El Niño/'``。" + +#: ../../library/urllib.parse.rst:652 +msgid "" +"*string* parameter supports bytes and str objects (previously only str)." +msgstr "*string* 形参支持 bytes 和 str 对象(之前仅支持 str)。" + +#: ../../library/urllib.parse.rst:660 +msgid "" +"Like :func:`unquote`, but also replace plus signs with spaces, as required " +"for unquoting HTML form values." +msgstr "类似于 :func:`unquote`,但还会将加号替换为空格,如反转码表单值所要求的。" + +#: ../../library/urllib.parse.rst:663 +msgid "*string* must be a :class:`str`." +msgstr "*string* 必须为 :class:`str`。" + +#: ../../library/urllib.parse.rst:665 +msgid "Example: ``unquote_plus('/El+Ni%C3%B1o/')`` yields ``'/El Niño/'``." +msgstr "例如: ``unquote_plus('/El+Ni%C3%B1o/')`` 将产生 ``'/El Niño/'``。" + +#: ../../library/urllib.parse.rst:670 +msgid "" +"Replace ``%xx`` escapes with their single-octet equivalent, and return a " +":class:`bytes` object." +msgstr "将 ``%xx`` 转义符替换为其单八位等价物,并返回一个 :class:`bytes` 对象。" + +#: ../../library/urllib.parse.rst:675 +msgid "" +"If it is a :class:`str`, unescaped non-ASCII characters in *string* are " +"encoded into UTF-8 bytes." +msgstr "如果它是 :class:`str`,则 *string* 中未转义的非 ASCII 字符会被编码为 UTF-8 字节串。" + +#: ../../library/urllib.parse.rst:678 +msgid "Example: ``unquote_to_bytes('a%26%EF')`` yields ``b'a&\\xef'``." +msgstr "例如: ``unquote_to_bytes('a%26%EF')`` y将产生 ``b'a&\\xef'``。" + +#: ../../library/urllib.parse.rst:684 +msgid "" +"Convert a mapping object or a sequence of two-element tuples, which may " +"contain :class:`str` or :class:`bytes` objects, to a percent-encoded ASCII " +"text string. If the resultant string is to be used as a *data* for POST " +"operation with the :func:`~urllib.request.urlopen` function, then it should " +"be encoded to bytes, otherwise it would result in a :exc:`TypeError`." +msgstr "" +"将一个包含有 :class:`str` 或 :class:`bytes` 对象的映射对象或二元组序列转换为以百分号编码的 ASCII 文本字符串。 " +"如果所产生的字符串要被用作 :func:`~urllib.request.urlopen` 函数的 POST 操作的 " +"*data*,则它应当被编码为字节串,否则它将导致 :exc:`TypeError`。" + +#: ../../library/urllib.parse.rst:691 +msgid "" +"The resulting string is a series of ``key=value`` pairs separated by ``'&'``" +" characters, where both *key* and *value* are quoted using the *quote_via* " +"function. By default, :func:`quote_plus` is used to quote the values, which" +" means spaces are quoted as a ``'+'`` character and '/' characters are " +"encoded as ``%2F``, which follows the standard for GET requests " +"(``application/x-www-form-urlencoded``). An alternate function that can be " +"passed as *quote_via* is :func:`quote`, which will encode spaces as ``%20`` " +"and not encode '/' characters. For maximum control of what is quoted, use " +"``quote`` and specify a value for *safe*." +msgstr "" +"结果字符串是一系列 ``key=value`` 对,由 ``'&'`` 字符进行分隔,其中 *key* 和 *value* 都已使用 " +"*quote_via* 函数转码。 在默认情况下,会使用 :func:`quote_plus` 来转码值,这意味着空格会被转码为 ``'+'`` 字符而" +" '/' 字符会被转码为 ``%2F``,即遵循 GET 请求的标准 (``application/x-www-form-urlencoded``)。 " +"另一个可以作为 *quote_via* 传入的替代函数是 :func:`quote`,它将把空格转码为 ``%20`` 并且不编码 '/' 字符。 " +"为了最大程度地控制要转码的内容,请使用 ``quote`` 并指定 *safe* 的值。" + +#: ../../library/urllib.parse.rst:701 +msgid "" +"When a sequence of two-element tuples is used as the *query* argument, the " +"first element of each tuple is a key and the second is a value. The value " +"element in itself can be a sequence and in that case, if the optional " +"parameter *doseq* evaluates to ``True``, individual ``key=value`` pairs " +"separated by ``'&'`` are generated for each element of the value sequence " +"for the key. The order of parameters in the encoded string will match the " +"order of parameter tuples in the sequence." +msgstr "" +"当使用二元组序列作为 *query* 参数时,每个元组的第一个元素为键而第二个元素为值。 值元素本身也可以为一个序列,在那种情况下,如果可选的形参 " +"*doseq* 的值为 ``True``,则每个键的值序列元素生成单个 ``key=value`` 对(以 ``'&'`` 分隔)。 " +"被编码的字符串中的参数顺序将与序列中的形参元素顺序相匹配。" + +#: ../../library/urllib.parse.rst:709 +msgid "" +"The *safe*, *encoding*, and *errors* parameters are passed down to " +"*quote_via* (the *encoding* and *errors* parameters are only passed when a " +"query element is a :class:`str`)." +msgstr "" +"*safe*, *encoding* 和 *errors* 形参会被传递给 *quote_via* (*encoding* 和 *errors* " +"形参仅在查询元素为 :class:`str` 时会被传递)。" + +#: ../../library/urllib.parse.rst:713 +msgid "" +"To reverse this encoding process, :func:`parse_qs` and :func:`parse_qsl` are" +" provided in this module to parse query strings into Python data structures." +msgstr "" +"为了反向执行这个编码过程,此模块提供了 :func:`parse_qs` 和 :func:`parse_qsl` 来将查询字符串解析为 Python " +"数据结构。" + +#: ../../library/urllib.parse.rst:716 +msgid "" +"Refer to :ref:`urllib examples ` to find out how the " +":func:`urllib.parse.urlencode` method can be used for generating the query " +"string of a URL or data for a POST request." +msgstr "" +"请参考 :ref:`urllib 示例 ` 来了解如何使用 " +":func:`urllib.parse.urlencode` 方法来生成 URL 的查询字符串或 POST 请求的数据。" + +#: ../../library/urllib.parse.rst:720 +msgid "*query* supports bytes and string objects." +msgstr "查询支持字节和字符串对象。" + +#: ../../library/urllib.parse.rst:723 +msgid "*quote_via* parameter." +msgstr "*quote_via* 参数." + +#: ../../library/urllib.parse.rst:731 +msgid "`WHATWG`_ - URL Living standard" +msgstr "`WHATWG`_ - URL 现有标准" + +#: ../../library/urllib.parse.rst:730 +msgid "" +"Working Group for the URL Standard that defines URLs, domains, IP addresses," +" the application/x-www-form-urlencoded format, and their API." +msgstr "定义 URL、域名、IP 地址、application/x-www-form-urlencoded 格式及其 API 的工作组。" + +#: ../../library/urllib.parse.rst:737 +msgid ":rfc:`3986` - Uniform Resource Identifiers" +msgstr ":rfc:`3986` - 统一资源标识符" + +#: ../../library/urllib.parse.rst:734 +msgid "" +"This is the current standard (STD66). Any changes to urllib.parse module " +"should conform to this. Certain deviations could be observed, which are " +"mostly for backward compatibility purposes and for certain de-facto parsing " +"requirements as commonly observed in major browsers." +msgstr "" +"这是当前的标准 (STD66)。 任何对于 urllib.parse 模块的修改都必须遵循该标准。 " +"某些偏离也可能会出现,这大都是出于向下兼容的目的以及特定的经常存在于各主要浏览器上的实际解析需求。" + +#: ../../library/urllib.parse.rst:740 +msgid ":rfc:`2732` - Format for Literal IPv6 Addresses in URL's." +msgstr ":rfc:`2732` - URL 中的 IPv6 Addresses 地址显示格式。" + +#: ../../library/urllib.parse.rst:740 +msgid "This specifies the parsing requirements of IPv6 URLs." +msgstr "这指明了 IPv6 URL 的解析要求。" + +#: ../../library/urllib.parse.rst:744 +msgid ":rfc:`2396` - Uniform Resource Identifiers (URI): Generic Syntax" +msgstr ":rfc:`2396` - 统一资源标识符(URI):通用语法" + +#: ../../library/urllib.parse.rst:743 +msgid "" +"Document describing the generic syntactic requirements for both Uniform " +"Resource Names (URNs) and Uniform Resource Locators (URLs)." +msgstr "描述统一资源名称 (URN) 和统一资源定位符 (URL) 通用语义要求的文档。" + +#: ../../library/urllib.parse.rst:747 +msgid ":rfc:`2368` - The mailto URL scheme." +msgstr ":rfc:`2368` - mailto URL 模式。" + +#: ../../library/urllib.parse.rst:747 +msgid "Parsing requirements for mailto URL schemes." +msgstr "mailto URL 模式的解析要求。" + +#: ../../library/urllib.parse.rst:752 +msgid ":rfc:`1808` - Relative Uniform Resource Locators" +msgstr ":rfc:`1808` - 相对统一资源定位符" + +#: ../../library/urllib.parse.rst:750 +msgid "" +"This Request For Comments includes the rules for joining an absolute and a " +"relative URL, including a fair number of \"Abnormal Examples\" which govern " +"the treatment of border cases." +msgstr "这个请求注释包括联结绝对和相对 URL 的规则,其中包括大量控制边界情况处理的 \"异常示例\"。" + +#: ../../library/urllib.parse.rst:754 +msgid ":rfc:`1738` - Uniform Resource Locators (URL)" +msgstr ":rfc:`1738` - 统一资源定位符 (URL)" + +#: ../../library/urllib.parse.rst:755 +msgid "This specifies the formal syntax and semantics of absolute URLs." +msgstr "这指明了绝对 URL 的正式语义和句法。" diff --git a/library/urllib.po b/library/urllib.po new file mode 100644 index 000000000..fbfca102f --- /dev/null +++ b/library/urllib.po @@ -0,0 +1,55 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) 2001-2022, Python Software Foundation +# This file is distributed under the same license as the Python package. +# FIRST AUTHOR , YEAR. +# +# Translators: +# 锟斤拷 , 2017 +# Yinian Chin , 2018 +# 汪心禾 , 2020 +# +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: Python 3.9\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2022-11-04 14:34+0000\n" +"PO-Revision-Date: 2017-02-16 23:34+0000\n" +"Last-Translator: 汪心禾 , 2020\n" +"Language-Team: Chinese (China) (https://www.transifex.com/python-doc/teams/5390/zh_CN/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: zh_CN\n" +"Plural-Forms: nplurals=1; plural=0;\n" + +#: ../../library/urllib.rst:2 +msgid ":mod:`urllib` --- URL handling modules" +msgstr ":mod:`urllib` --- URL 处理模块" + +#: ../../library/urllib.rst:6 +msgid "**Source code:** :source:`Lib/urllib/`" +msgstr "**源代码:** :source:`Lib/urllib/`" + +#: ../../library/urllib.rst:10 +msgid "" +"``urllib`` is a package that collects several modules for working with URLs:" +msgstr "``urllib`` 是一个收集了多个涉及 URL 的模块的包:" + +#: ../../library/urllib.rst:12 +msgid ":mod:`urllib.request` for opening and reading URLs" +msgstr ":mod:`urllib.request` 打开和读取 URL" + +#: ../../library/urllib.rst:13 +msgid "" +":mod:`urllib.error` containing the exceptions raised by " +":mod:`urllib.request`" +msgstr ":mod:`urllib.error` 包含 :mod:`urllib.request` 抛出的异常" + +#: ../../library/urllib.rst:14 +msgid ":mod:`urllib.parse` for parsing URLs" +msgstr ":mod:`urllib.parse` 用于解析 URL" + +#: ../../library/urllib.rst:15 +msgid ":mod:`urllib.robotparser` for parsing ``robots.txt`` files" +msgstr ":mod:`urllib.robotparser` 用于解析 ``robots.txt`` 文件" diff --git a/library/urllib.request.po b/library/urllib.request.po new file mode 100644 index 000000000..59e27c8d9 --- /dev/null +++ b/library/urllib.request.po @@ -0,0 +1,2087 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) 2001-2024, Python Software Foundation +# This file is distributed under the same license as the Python package. +# FIRST AUTHOR , YEAR. +# +# Translators: +# ppcfish , 2019 +# 汪心禾 , 2020 +# Jiuh.star , 2021 +# Dai Xu , 2021 +# Kevin Deng , 2021 +# Freesand Leo , 2024 +# Rafael Fontenelle , 2024 +# +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: Python 3.9\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2024-08-16 16:41+0000\n" +"PO-Revision-Date: 2017-02-16 23:34+0000\n" +"Last-Translator: Rafael Fontenelle , 2024\n" +"Language-Team: Chinese (China) (https://app.transifex.com/python-doc/teams/5390/zh_CN/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: zh_CN\n" +"Plural-Forms: nplurals=1; plural=0;\n" + +#: ../../library/urllib.request.rst:2 +msgid ":mod:`urllib.request` --- Extensible library for opening URLs" +msgstr ":mod:`urllib.request` --- 用于打开 URL 的可扩展库" + +#: ../../library/urllib.request.rst:11 +msgid "**Source code:** :source:`Lib/urllib/request.py`" +msgstr "**源码:** :source:`Lib/urllib/request.py`" + +#: ../../library/urllib.request.rst:15 +msgid "" +"The :mod:`urllib.request` module defines functions and classes which help in" +" opening URLs (mostly HTTP) in a complex world --- basic and digest " +"authentication, redirections, cookies and more." +msgstr "" +":mod:`urllib.request` 模块定义了适用于在各种复杂情况下打开 URL(主要为 HTTP)的函数和类 --- " +"例如基本认证、摘要认证、重定向、cookies 及其它。" + +#: ../../library/urllib.request.rst:21 +msgid "" +"The `Requests package `_ is " +"recommended for a higher-level HTTP client interface." +msgstr "" +"对于更高级别的 HTTP 客户端接口,建议使用 `Requests " +"`_ 。" + +#: ../../library/urllib.request.rst:25 +msgid "The :mod:`urllib.request` module defines the following functions:" +msgstr ":mod:`urllib.request` 模块定义了以下函数:" + +#: ../../library/urllib.request.rst:30 +msgid "" +"Open the URL *url*, which can be either a string or a :class:`Request` " +"object." +msgstr "打开统一资源定位符 *url*,可以是一个字符串或一个 :class:`Request` 对象。" + +#: ../../library/urllib.request.rst:33 +msgid "" +"*data* must be an object specifying additional data to be sent to the " +"server, or ``None`` if no such data is needed. See :class:`Request` for " +"details." +msgstr "" +"*data* 必须是一个对象,用于给出要发送到服务器的附加数据,若不需要发送数据则为 ``None``。详情请参阅 :class:`Request` 。" + +#: ../../library/urllib.request.rst:37 +msgid "" +"urllib.request module uses HTTP/1.1 and includes ``Connection:close`` header" +" in its HTTP requests." +msgstr "" +"urllib.request 模块采用 HTTP/1.1 协议,并且在其 HTTP 请求中包含 ``Connection:close`` 头部信息。" + +#: ../../library/urllib.request.rst:40 +msgid "" +"The optional *timeout* parameter specifies a timeout in seconds for blocking" +" operations like the connection attempt (if not specified, the global " +"default timeout setting will be used). This actually only works for HTTP, " +"HTTPS and FTP connections." +msgstr "" +"*timeout* 为可选参数,用于指定阻塞操作(如连接尝试)的超时时间,单位为秒。如未指定,将使用全局默认超时参数)。本参数实际仅对 " +"HTTP、HTTPS 和 FTP 连接有效。" + +#: ../../library/urllib.request.rst:45 +msgid "" +"If *context* is specified, it must be a :class:`ssl.SSLContext` instance " +"describing the various SSL options. See " +":class:`~http.client.HTTPSConnection` for more details." +msgstr "" +"如果给定了 *context* 参数,则必须是一个 :class:`ssl.SSLContext` 实例,用于描述各种 SSL 参数。更多详情请参阅 " +":class:`~http.client.HTTPSConnection` 。" + +#: ../../library/urllib.request.rst:49 +msgid "" +"The optional *cafile* and *capath* parameters specify a set of trusted CA " +"certificates for HTTPS requests. *cafile* should point to a single file " +"containing a bundle of CA certificates, whereas *capath* should point to a " +"directory of hashed certificate files. More information can be found in " +":meth:`ssl.SSLContext.load_verify_locations`." +msgstr "" +"*cafile* 和 *capath* 为可选参数,用于为 HTTPS 请求指定一组受信 CA 证书。*cafile* 应指向包含CA 证书的单个文件," +" *capath* 则应指向哈希证书文件的目录。更多信息可参阅 :meth:`ssl.SSLContext.load_verify_locations`" +" 。" + +#: ../../library/urllib.request.rst:55 +msgid "The *cadefault* parameter is ignored." +msgstr "参数 *cadefault* 将被忽略。" + +#: ../../library/urllib.request.rst:57 +msgid "" +"This function always returns an object which can work as a :term:`context " +"manager` and has the properties *url*, *headers*, and *status*. See " +":class:`urllib.response.addinfourl` for more detail on these properties." +msgstr "" +"本函数总会返回一个对象,该对象可作为 :term:`context manager` 使用,带有 *url*、*headers* 和 *status* " +"属性。有关这些属性的更多详细信息,请参阅 :class:`urllib.response.addinfourl` 。" + +#: ../../library/urllib.request.rst:61 +msgid "" +"For HTTP and HTTPS URLs, this function returns a " +":class:`http.client.HTTPResponse` object slightly modified. In addition to " +"the three new methods above, the msg attribute contains the same information" +" as the :attr:`~http.client.HTTPResponse.reason` attribute --- the reason " +"phrase returned by server --- instead of the response headers as it is " +"specified in the documentation for :class:`~http.client.HTTPResponse`." +msgstr "" +"对于 HTTP 和 HTTPS 的 URL 而言,本函数将返回一个稍经修改的 :class:`http.client.HTTPResponse` " +"对象。除了上述 3 个新的方法之外,还有 msg 属性包含了与 :attr:`~http.client.HTTPResponse.reason` " +"属性相同的信息---服务器返回的原因描述文字,而不是 :class:`~http.client.HTTPResponse` 的文档所述的响应头部信息。" + +#: ../../library/urllib.request.rst:69 +msgid "" +"For FTP, file, and data URLs and requests explicitly handled by legacy " +":class:`URLopener` and :class:`FancyURLopener` classes, this function " +"returns a :class:`urllib.response.addinfourl` object." +msgstr "" +"对于 FTP、文件、数据的URL,以及由传统的 :class:`URLopener`  和 :class:`FancyURLopener` " +"类处理的请求,本函数将返回一个 :class:`urllib.response.addinfourl` 对象。" + +#: ../../library/urllib.request.rst:73 +msgid "Raises :exc:`~urllib.error.URLError` on protocol errors." +msgstr "协议发生错误时,将会引发 :exc:`~urllib.error.URLError` 。" + +#: ../../library/urllib.request.rst:75 +msgid "" +"Note that ``None`` may be returned if no handler handles the request (though" +" the default installed global :class:`OpenerDirector` uses " +":class:`UnknownHandler` to ensure this never happens)." +msgstr "" +"请注意,如果没有处理函数对请求进行处理,则有可能会返回 ``None`` 。尽管默认安装的全局 :class:`OpenerDirector` 会用 " +":class:`UnknownHandler` 来确保不会发生这种情况。" + +#: ../../library/urllib.request.rst:79 +msgid "" +"In addition, if proxy settings are detected (for example, when a ``*_proxy``" +" environment variable like :envvar:`http_proxy` is set), " +":class:`ProxyHandler` is default installed and makes sure the requests are " +"handled through the proxy." +msgstr "" +"此外,如果检测到设置了代理(比如设置了 :envvar:`http_proxy` 之类的环境变量),默认会安装 " +":class:`ProxyHandler` 并确保通过代理处理请求。" + +#: ../../library/urllib.request.rst:84 +msgid "" +"The legacy ``urllib.urlopen`` function from Python 2.6 and earlier has been " +"discontinued; :func:`urllib.request.urlopen` corresponds to the old " +"``urllib2.urlopen``. Proxy handling, which was done by passing a dictionary" +" parameter to ``urllib.urlopen``, can be obtained by using " +":class:`ProxyHandler` objects." +msgstr "" +"Python 2.6 以下版本中留存的 ``urllib.urlopen`` 函数已停止使用了; " +":func:`urllib.request.urlopen` 对应于传统的 ``urllib2.urlopen`` " +"。对代理服务的处理是通过将字典参数传给 ``urllib.urlopen`` 来完成的,可以用 :class:`ProxyHandler` " +"对象获取到代理处理函数。" + +#: ../../library/urllib.request.rst:90 +msgid "" +"Raises an :ref:`auditing event ` ``urllib.Request`` with arguments" +" ``fullurl``, ``data``, ``headers``, ``method``." +msgstr "" +"默认会触发一条 :ref:`审计事件 ` ``urllib.Request`` ,参数 ``fullurl`` 、 ``data``" +" 、``headers`` 、``method`` 均取自请求对象。" + +#: ../../library/urllib.request.rst:92 +msgid "" +"The default opener raises an :ref:`auditing event ` " +"``urllib.Request`` with arguments ``fullurl``, ``data``, ``headers``, " +"``method`` taken from the request object." +msgstr "" +"默认会为 ``urllib.Request`` 引发一条 :ref:`审计事件 `,其参数 " +"``fullurl``、``data``、``headers``、``method`` 均取自请求对象。" + +#: ../../library/urllib.request.rst:96 +msgid "*cafile* and *capath* were added." +msgstr "增加了 *cafile* 与 *capath*。" + +#: ../../library/urllib.request.rst:99 +msgid "" +"HTTPS virtual hosts are now supported if possible (that is, if " +":data:`ssl.HAS_SNI` is true)." +msgstr "只要条件允许(指 :data:`ssl.HAS_SNI` 为真),现在能够支持 HTTPS 虚拟主机。" + +#: ../../library/urllib.request.rst:103 +msgid "*data* can be an iterable object." +msgstr "*data* 可以是一个可迭代对象。" + +#: ../../library/urllib.request.rst:106 +msgid "*cadefault* was added." +msgstr "增加了 *cadefault*。" + +#: ../../library/urllib.request.rst:109 +msgid "*context* was added." +msgstr "增加了 *context*。" + +#: ../../library/urllib.request.rst:114 +msgid "" +"*cafile*, *capath* and *cadefault* are deprecated in favor of *context*. " +"Please use :meth:`ssl.SSLContext.load_cert_chain` instead, or let " +":func:`ssl.create_default_context` select the system's trusted CA " +"certificates for you." +msgstr "" +"*cafile* 、 *capath* 和 *cadefault* 已废弃,转而推荐使用 *context*。请改用 " +":meth:`ssl.SSLContext.load_cert_chain` 或让 :func:`ssl.create_default_context`" +" 选取系统信任的 CA 证书。" + +#: ../../library/urllib.request.rst:122 +msgid "" +"Install an :class:`OpenerDirector` instance as the default global opener. " +"Installing an opener is only necessary if you want urlopen to use that " +"opener; otherwise, simply call :meth:`OpenerDirector.open` instead of " +":func:`~urllib.request.urlopen`. The code does not check for a real " +":class:`OpenerDirector`, and any class with the appropriate interface will " +"work." +msgstr "" +"安装一个 :class:`OpenerDirector` 实例,作为默认的全局打开函数。仅当 urlopen 用到该打开函数时才需要安装;否则,只需调用" +" :meth:`OpenerDirector.open` 而不是 " +":func:`~urllib.request.urlopen`。代码不会检查是否真的属于 :class:`OpenerDirector` " +"类,所有具备适当接口的类都能适用。" + +#: ../../library/urllib.request.rst:132 +msgid "" +"Return an :class:`OpenerDirector` instance, which chains the handlers in the" +" order given. *handler*\\s can be either instances of :class:`BaseHandler`, " +"or subclasses of :class:`BaseHandler` (in which case it must be possible to " +"call the constructor without any parameters). Instances of the following " +"classes will be in front of the *handler*\\s, unless the *handler*\\s " +"contain them, instances of them or subclasses of them: :class:`ProxyHandler`" +" (if proxy settings are detected), :class:`UnknownHandler`, " +":class:`HTTPHandler`, :class:`HTTPDefaultErrorHandler`, " +":class:`HTTPRedirectHandler`, :class:`FTPHandler`, :class:`FileHandler`, " +":class:`HTTPErrorProcessor`." +msgstr "" +"返回一个 :class:`OpenerDirector` 实例,以给定顺序把处理函数串联起来。处理函数可以是 :class:`BaseHandler` " +"的实例,也可以是 :class:`BaseHandler` 的子类(这时构造函数必须允许不带任何参数的调用)。以下类的实例将位于 *处理函数* " +"之前,除非 *处理函数* 已包含这些类、其实例或其子类: :class:`ProxyHandler` " +"(如果检测到代理设置)、:class:`UnknownHandler` 、:class:`HTTPHandler` " +"、:class:`HTTPDefaultErrorHandler` 、:class:`HTTPRedirectHandler` 、 " +":class:`FTPHandler` 、 :class:`FileHandler` 、:class:`HTTPErrorProcessor` 。" + +#: ../../library/urllib.request.rst:142 +msgid "" +"If the Python installation has SSL support (i.e., if the :mod:`ssl` module " +"can be imported), :class:`HTTPSHandler` will also be added." +msgstr "" +"若 Python 安装时已带了 SSL 支持(指可以导入 :mod:`ssl` 模块),则还会加入 :class:`HTTPSHandler` 。" + +#: ../../library/urllib.request.rst:145 +msgid "" +"A :class:`BaseHandler` subclass may also change its :attr:`handler_order` " +"attribute to modify its position in the handlers list." +msgstr "" +" :class:`BaseHandler` 的子类还可以修改 :attr:`handler_order` 属性,以便改变其在处理函数列表中的位置。" + +#: ../../library/urllib.request.rst:151 +msgid "" +"Convert the pathname *path* from the local syntax for a path to the form " +"used in the path component of a URL. This does not produce a complete URL." +" The return value will already be quoted using the " +":func:`~urllib.parse.quote` function." +msgstr "" +"将路径名 *path* 从路径本地写法转换为 URL 路径部分所采用的格式。本函数不会生成完整的 URL。返回值将会用 " +":func:`~urllib.parse.quote` 函数加以编码。" + +#: ../../library/urllib.request.rst:158 +msgid "" +"Convert the path component *path* from a percent-encoded URL to the local " +"syntax for a path. This does not accept a complete URL. This function uses" +" :func:`~urllib.parse.unquote` to decode *path*." +msgstr "" +"从百分号编码的 URL 中将 *path* 部分转换为本地路径的写法。本函数不接受完整的 URL,并利用 " +":func:`~urllib.parse.unquote` 函数对 *path* 进行解码。" + +#: ../../library/urllib.request.rst:164 +msgid "" +"This helper function returns a dictionary of scheme to proxy server URL " +"mappings. It scans the environment for variables named ``_proxy``, " +"in a case insensitive approach, for all operating systems first, and when it" +" cannot find it, looks for proxy information from System Configuration for " +"macOS and Windows Systems Registry for Windows. If both lowercase and " +"uppercase environment variables exist (and disagree), lowercase is " +"preferred." +msgstr "" +"此辅助函数将返回一个将各个方案映射到代理服务器 URL 的字典。 它会先为所有操作系统以大小写不敏感的方式扫描名为 ``_proxy``" +" 的环境变量,当无法找到时,则会在 macOS 上从系统配置中而在 Windows 上从 Windows 系统注册表中查找代理信息。 " +"如果同时存在小写和大写形式的环境变量(且内容不一致),则会首先小写形式。" + +#: ../../library/urllib.request.rst:174 +msgid "" +"If the environment variable ``REQUEST_METHOD`` is set, which usually " +"indicates your script is running in a CGI environment, the environment " +"variable ``HTTP_PROXY`` (uppercase ``_PROXY``) will be ignored. This is " +"because that variable can be injected by a client using the \"Proxy:\" HTTP " +"header. If you need to use an HTTP proxy in a CGI environment, either use " +"``ProxyHandler`` explicitly, or make sure the variable name is in lowercase " +"(or at least the ``_proxy`` suffix)." +msgstr "" +"如果存在环境变量 ``REQUEST_METHOD`` ,通常表示脚本运行于 CGI 环境中,则环境变量 ``HTTP_PROXY`` (大写的 " +"``_PROXY``)将会被忽略。这是因其可以由客户端用 HTTP 头部信息 “Proxy:”注入。若要在 CGI 环境中使用 HTTP " +"代理,请显式使用 ```ProxyHandler`` ,或确保变量名称为小写(或至少是 ``_proxy`` 后缀)。" + +#: ../../library/urllib.request.rst:183 +msgid "The following classes are provided:" +msgstr "提供了以下类:" + +#: ../../library/urllib.request.rst:187 +msgid "This class is an abstraction of a URL request." +msgstr "URL 请求对象的抽象类。" + +#: ../../library/urllib.request.rst:189 +msgid "*url* should be a string containing a valid URL." +msgstr "*url* 应为包含合法 URL 的字符串。" + +#: ../../library/urllib.request.rst:191 +msgid "" +"*data* must be an object specifying additional data to send to the server, " +"or ``None`` if no such data is needed. Currently HTTP requests are the only" +" ones that use *data*. The supported object types include bytes, file-like " +"objects, and iterables of bytes-like objects. If no ``Content-Length`` nor " +"``Transfer-Encoding`` header field has been provided, :class:`HTTPHandler` " +"will set these headers according to the type of *data*. ``Content-Length`` " +"will be used to send bytes objects, while ``Transfer-Encoding: chunked`` as " +"specified in :rfc:`7230`, Section 3.3.1 will be used to send files and other" +" iterables." +msgstr "" +"*data* 必须是一个对象,用于给定发往服务器的附加数据,若无需此类数据则为 ``None`` 。 目前 唯一用到 *data* 的只有 HTTP " +"请求。支持的对象类型包括字节串、类文件对象和可遍历的类字节串对象。如果没有提供 ``Content-Length`` 和 ``Transfer-" +"Encoding`` 头部字段, :class:`HTTPHandler` 会根据 *data* 的类型设置这些头部字段。``Content-" +"Length`` 将用于发送字节对象,而 :rfc:`7230` 第 3.3.1 节中定义的 ``Transfer-Encoding: " +"chunked`` 将用于发送文件和其他可遍历对象。" + +#: ../../library/urllib.request.rst:201 +msgid "" +"For an HTTP POST request method, *data* should be a buffer in the standard " +":mimetype:`application/x-www-form-urlencoded` format. The " +":func:`urllib.parse.urlencode` function takes a mapping or sequence of " +"2-tuples and returns an ASCII string in this format. It should be encoded to" +" bytes before being used as the *data* parameter." +msgstr "" +"对于 HTTP POST 请求方法而言,*data* 应该是标准 :mimetype:`application/x-www-form-" +"urlencoded` 格式的缓冲区。 :func:`urllib.parse.urlencode` " +"函数的参数为映射对象或二元组序列,并返回一个该编码格式的 ASCII 字符串。在用作 *data* 参数之前,应将其编码为字节串。" + +#: ../../library/urllib.request.rst:207 +msgid "" +"*headers* should be a dictionary, and will be treated as if " +":meth:`add_header` was called with each key and value as arguments. This is " +"often used to \"spoof\" the ``User-Agent`` header value, which is used by a " +"browser to identify itself -- some HTTP servers only allow requests coming " +"from common browsers as opposed to scripts. For example, Mozilla Firefox may" +" identify itself as ``\"Mozilla/5.0 (X11; U; Linux i686) Gecko/20071127 " +"Firefox/2.0.0.11\"``, while :mod:`urllib`'s default user agent string is " +"``\"Python-urllib/2.6\"`` (on Python 2.6). All header keys are sent in camel" +" case." +msgstr "" +"*headers* 应当是一个字典,并将被视同附带了每个键和值作为参数去调用 :meth:`add_header`。 这通常被用于 \"伪装\" " +"``User-Agent`` 标头值,浏览器会使用标头值来标识自己 -- 某些 HTTP 服务器只允许来自普通浏览器的请求而不允许来自脚本的请求。 " +"例如,Mozilla Firefox 可能将自己标识为 ``\"Mozilla/5.0 (X11; U; Linux i686) " +"Gecko/20071127 Firefox/2.0.0.11\"``,而 :mod:`urllib` 的默认用户代理字符串则是 ``\"Python-" +"urllib/2.6\"`` (在 Python 2.6 中)。 所有发送的标头键都使用驼峰命名法。" + +#: ../../library/urllib.request.rst:218 +msgid "" +"An appropriate ``Content-Type`` header should be included if the *data* " +"argument is present. If this header has not been provided and *data* is not" +" None, ``Content-Type: application/x-www-form-urlencoded`` will be added as " +"a default." +msgstr "" +"如果给出了 *data* 参数,则应当包含合适的 ``Content-Type`` 头部信息。若未提供且 *data* 不是 None,则会把 " +"``Content-Type: application/x-www-form-urlencoded`` 加入作为默认值。" + +#: ../../library/urllib.request.rst:223 +msgid "" +"The next two arguments are only of interest for correct handling of third-" +"party HTTP cookies:" +msgstr "接下来的两个参数,只对第三方 HTTP cookie 的处理才有用:" + +#: ../../library/urllib.request.rst:226 +msgid "" +"*origin_req_host* should be the request-host of the origin transaction, as " +"defined by :rfc:`2965`. It defaults to " +"``http.cookiejar.request_host(self)``. This is the host name or IP address " +"of the original request that was initiated by the user. For example, if the " +"request is for an image in an HTML document, this should be the request-host" +" of the request for the page containing the image." +msgstr "" +"*origin_req_host* 应为发起初始会话的请求主机,定义参见 :rfc:`2965` 。默认指为 " +"``http.cookiejar.request_host(self)`` 。这是用户发起初始请求的主机名或 IP 地址。假设请求是针对 HTML " +"文档中的图片数据发起的,则本属性应为对包含图像的页面发起请求的主机。" + +#: ../../library/urllib.request.rst:234 +msgid "" +"*unverifiable* should indicate whether the request is unverifiable, as " +"defined by :rfc:`2965`. It defaults to ``False``. An unverifiable request " +"is one whose URL the user did not have the option to approve. For example, " +"if the request is for an image in an HTML document, and the user had no " +"option to approve the automatic fetching of the image, this should be true." +msgstr "" +"*unverifiable* 应该标示出请求是否无法验证,定义参见 :rfc:`2965` 。默认值为 ``False`` " +"。所谓无法验证的请求,是指用户没有机会对请求的 URL 做验证。例如,如果请求是针对 HTML " +"文档中的图像,用户没有机会去许可能自动读取图像,则本参数应为 True。" + +#: ../../library/urllib.request.rst:241 +msgid "" +"*method* should be a string that indicates the HTTP request method that will" +" be used (e.g. ``'HEAD'``). If provided, its value is stored in the " +":attr:`~Request.method` attribute and is used by :meth:`get_method()`. The " +"default is ``'GET'`` if *data* is ``None`` or ``'POST'`` otherwise. " +"Subclasses may indicate a different default method by setting the " +":attr:`~Request.method` attribute in the class itself." +msgstr "" +"*method* 应为字符串,标示要采用的 HTTP 请求方法(例如 ``'HEAD'`` )。如果给出本参数,其值会存储在 " +":attr:`~Request.method` 属性中,并由 :meth:`get_method()` 使用。如果 *data* 为 ``None`` " +"则默认值为 ``'GET'`` ,否则为 ``'POST'``。子类可以设置 :attr:`~Request.method` " +"属性来标示不同的默认请求方法。" + +#: ../../library/urllib.request.rst:249 +msgid "" +"The request will not work as expected if the data object is unable to " +"deliver its content more than once (e.g. a file or an iterable that can " +"produce the content only once) and the request is retried for HTTP redirects" +" or authentication. The *data* is sent to the HTTP server right away after " +"the headers. There is no support for a 100-continue expectation in the " +"library." +msgstr "" +"如果 data 对象无法分多次传递其内容(比如文件或只能生成一次内容的可迭代对象)并且由于 HTTP " +"重定向或身份验证而发生请求重试行为,则该请求不会正常工作。 *data* 是紧挨着头部信息发送给 HTTP 服务器的。现有库不支持 HTTP " +"100-continue 的征询。" + +#: ../../library/urllib.request.rst:256 +msgid ":attr:`Request.method` argument is added to the Request class." +msgstr "Request 类增加了 :attr:`Request.method` 参数。" + +#: ../../library/urllib.request.rst:259 +msgid "Default :attr:`Request.method` may be indicated at the class level." +msgstr "默认 :attr:`Request.method` 可以在类中标明。" + +#: ../../library/urllib.request.rst:262 +msgid "" +"Do not raise an error if the ``Content-Length`` has not been provided and " +"*data* is neither ``None`` nor a bytes object. Fall back to use chunked " +"transfer encoding instead." +msgstr "" +"如果给出了 ``Content-Length`` ,且 *data* 既不为 ``None`` " +"也不是字节串对象,则不会触发错误。而会退而求其次采用分块传输的编码格式。" + +#: ../../library/urllib.request.rst:269 +msgid "" +"The :class:`OpenerDirector` class opens URLs via :class:`BaseHandler`\\ s " +"chained together. It manages the chaining of handlers, and recovery from " +"errors." +msgstr "" +":class:`OpenerDirector` 类通过串接在一起的 :class:`BaseHandler` 打开 URL,并负责管理 handler " +"链及从错误中恢复。" + +#: ../../library/urllib.request.rst:275 +msgid "" +"This is the base class for all registered handlers --- and handles only the " +"simple mechanics of registration." +msgstr "这是所有已注册 handler 的基类,只做了简单的注册机制。" + +#: ../../library/urllib.request.rst:281 +msgid "" +"A class which defines a default handler for HTTP error responses; all " +"responses are turned into :exc:`~urllib.error.HTTPError` exceptions." +msgstr "" +"为 HTTP 错误响应定义的默认 handler,所有出错响应都会转为 :exc:`~urllib.error.HTTPError` 异常。" + +#: ../../library/urllib.request.rst:287 +msgid "A class to handle redirections." +msgstr "一个用于处理重定向的类。" + +#: ../../library/urllib.request.rst:292 +msgid "A class to handle HTTP Cookies." +msgstr "一个用于处理 HTTP Cookies 的类。" + +#: ../../library/urllib.request.rst:297 +msgid "" +"Cause requests to go through a proxy. If *proxies* is given, it must be a " +"dictionary mapping protocol names to URLs of proxies. The default is to read" +" the list of proxies from the environment variables ``_proxy``. " +"If no proxy environment variables are set, then in a Windows environment " +"proxy settings are obtained from the registry's Internet Settings section, " +"and in a macOS environment proxy information is retrieved from the System " +"Configuration Framework." +msgstr "" +"让请求转往代理服务。 如果给出了 *proxies*,则它必须是一个将协议名称映射到代理 URL 的字典。 默认是从环境变量 " +"``_proxy`` 中读取代理列表。 如果没有设置代理服务的环境变量,则在 Windows 环境下代理设置会从注册表的 " +"Internet Settings 部分获取,而在 macOS 环境下代理信息会从 System Configuration Framework 获取。" + +#: ../../library/urllib.request.rst:305 +msgid "To disable autodetected proxy pass an empty dictionary." +msgstr "若要禁用自动检测出来的代理,请传入空的字典对象。" + +#: ../../library/urllib.request.rst:307 +msgid "" +"The :envvar:`no_proxy` environment variable can be used to specify hosts " +"which shouldn't be reached via proxy; if set, it should be a comma-separated" +" list of hostname suffixes, optionally with ``:port`` appended, for example " +"``cern.ch,ncsa.uiuc.edu,some.host:8080``." +msgstr "" +"环境变量 :envvar:`no_proxy` 可用于指定不必通过代理访问的主机;应为逗号分隔的主机名后缀列表,可加上 ``:port`` ,例如 " +"``cern.ch,ncsa.uiuc.edu,some.host:8080`` 。" + +#: ../../library/urllib.request.rst:314 +msgid "" +"``HTTP_PROXY`` will be ignored if a variable ``REQUEST_METHOD`` is set; see " +"the documentation on :func:`~urllib.request.getproxies`." +msgstr "" +"如果设置了 ``REQUEST_METHOD`` 变量,则会忽略 ``HTTP_PROXY`` ;参阅 " +":func:`~urllib.request.getproxies` 文档。" + +#: ../../library/urllib.request.rst:320 +msgid "Keep a database of ``(realm, uri) -> (user, password)`` mappings." +msgstr "维护 ``(realm, uri) -> (user, password)`` 映射数据库。" + +#: ../../library/urllib.request.rst:325 +msgid "" +"Keep a database of ``(realm, uri) -> (user, password)`` mappings. A realm " +"of ``None`` is considered a catch-all realm, which is searched if no other " +"realm fits." +msgstr "" +"维护 ``(realm, uri) -> (user, password)`` 映射数据库。realm 为 ``None`` " +"视作全匹配,若没有其他合适的安全区域就会检索它。" + +#: ../../library/urllib.request.rst:332 +msgid "" +"A variant of :class:`HTTPPasswordMgrWithDefaultRealm` that also has a " +"database of ``uri -> is_authenticated`` mappings. Can be used by a " +"BasicAuth handler to determine when to send authentication credentials " +"immediately instead of waiting for a ``401`` response first." +msgstr "" +":class:`HTTPPasswordMgrWithDefaultRealm` 的一个变体,也带有 ``uri -> " +"is_authenticated`` 映射数据库。可被 BasicAuth 处理函数用于确定立即发送身份认证凭据的时机,而不是先等待 ``401`` " +"响应。" + +#: ../../library/urllib.request.rst:342 +msgid "" +"This is a mixin class that helps with HTTP authentication, both to the " +"remote host and to a proxy. *password_mgr*, if given, should be something " +"that is compatible with :class:`HTTPPasswordMgr`; refer to section " +":ref:`http-password-mgr` for information on the interface that must be " +"supported. If *passwd_mgr* also provides ``is_authenticated`` and " +"``update_authenticated`` methods (see :ref:`http-password-mgr-with-prior-" +"auth`), then the handler will use the ``is_authenticated`` result for a " +"given URI to determine whether or not to send authentication credentials " +"with the request. If ``is_authenticated`` returns ``True`` for the URI, " +"credentials are sent. If ``is_authenticated`` is ``False``, credentials are" +" not sent, and then if a ``401`` response is received the request is re-sent" +" with the authentication credentials. If authentication succeeds, " +"``update_authenticated`` is called to set ``is_authenticated`` ``True`` for " +"the URI, so that subsequent requests to the URI or any of its super-URIs " +"will automatically include the authentication credentials." +msgstr "" +"这是一个帮助完成 HTTP 身份认证的混合类,对远程主机和代理都适用。参数 *password_mgr* 应与 " +":class:`HTTPPasswordMgr` 兼容;关于必须支持哪些接口,请参阅 :ref:`http-password-mgr` 对象的章节。如果" +" *password_mgr* 还提供 ``is_authenticated`` 和 ``update_authenticated`` 方法(请参阅 " +":ref:`http-password-mgr-with-prior-auth` 对象),则 handler 将对给定 URI 用到 " +"``is_authenticated`` 的结果,来确定是否随请求发送身份认证凭据。如果该 URI 的 ``is_authenticated`` 返回" +" ``True``,则发送凭据。如果 ``is_authenticated`` 为 ``False`` ,则不发送凭据,然后若收到 ``401`` " +"响应,则使用身份认证凭据重新发送请求。如果身份认证成功,则调用 ``update_authenticated`` 设置该 URI 的 " +"``is_authenticated`` 为 ``True``,这样后续对该 URI 或其所有父 URI 的请求将自动包含该身份认证凭据。" + +#: ../../library/urllib.request.rst:359 +msgid "Added ``is_authenticated`` support." +msgstr "增加了对 ``is_authenticated`` 的支持。" + +#: ../../library/urllib.request.rst:365 +msgid "" +"Handle authentication with the remote host. *password_mgr*, if given, should" +" be something that is compatible with :class:`HTTPPasswordMgr`; refer to " +"section :ref:`http-password-mgr` for information on the interface that must " +"be supported. HTTPBasicAuthHandler will raise a :exc:`ValueError` when " +"presented with a wrong Authentication scheme." +msgstr "" +"处理远程主机的身份认证。 *password_mgr* 应与 :class:`HTTPPasswordMgr` 兼容;有关哪些接口是必须支持的,请参阅 " +":ref:`http-password-mgr` 章节。如果给出错误的身份认证方式, HTTPBasicAuthHandler 将会触发 " +":exc:`ValueError` 。" + +#: ../../library/urllib.request.rst:374 ../../library/urllib.request.rst:408 +msgid "" +"Handle authentication with the proxy. *password_mgr*, if given, should be " +"something that is compatible with :class:`HTTPPasswordMgr`; refer to section" +" :ref:`http-password-mgr` for information on the interface that must be " +"supported." +msgstr "" +"处理有代理服务时的身份认证。 *password_mgr* 应与 :class:`HTTPPasswordMgr` " +"兼容;有关哪些接口是必须支持的,请参阅 :ref:`http-password-mgr` 章节。" + +#: ../../library/urllib.request.rst:382 +msgid "" +"This is a mixin class that helps with HTTP authentication, both to the " +"remote host and to a proxy. *password_mgr*, if given, should be something " +"that is compatible with :class:`HTTPPasswordMgr`; refer to section " +":ref:`http-password-mgr` for information on the interface that must be " +"supported." +msgstr "" +"这是一个帮助完成 HTTP 身份认证的混合类,对远程主机和代理都适用。参数 *password_mgr* 应与 " +":class:`HTTPPasswordMgr` 兼容;关于必须支持哪些接口,请参阅 :ref:`http-password-mgr` 的章节。" + +#: ../../library/urllib.request.rst:391 +msgid "" +"Handle authentication with the remote host. *password_mgr*, if given, should" +" be something that is compatible with :class:`HTTPPasswordMgr`; refer to " +"section :ref:`http-password-mgr` for information on the interface that must " +"be supported. When both Digest Authentication Handler and Basic " +"Authentication Handler are both added, Digest Authentication is always tried" +" first. If the Digest Authentication returns a 40x response again, it is " +"sent to Basic Authentication handler to Handle. This Handler method will " +"raise a :exc:`ValueError` when presented with an authentication scheme other" +" than Digest or Basic." +msgstr "" +"处理远程主机的身份认证。 *password_mgr* 应与 :class:`HTTPPasswordMgr` 兼容;有关哪些接口是必须支持的,请参阅 " +":ref:`http-password-mgr` 章节。如果同时添加了 digest 身份认证 handler 和basic 身份认证 " +"handler,则会首先尝试 digest 身份认证。如果 digest 身份认证再返回 40x 响应,会再发送到 basic 身份验证 handler" +" 进行处理。如果给出 Digest 和 Basic 之外的身份认证方式, 本 handler 方法将会触发 :exc:`ValueError` 。" + +#: ../../library/urllib.request.rst:401 +msgid "Raise :exc:`ValueError` on unsupported Authentication Scheme." +msgstr "碰到不支持的认证方式时,将会触发 :exc:`ValueError` 。" + +#: ../../library/urllib.request.rst:416 +msgid "A class to handle opening of HTTP URLs." +msgstr "用于打开 HTTP URL 的 handler 类。" + +#: ../../library/urllib.request.rst:421 +msgid "" +"A class to handle opening of HTTPS URLs. *context* and *check_hostname* " +"have the same meaning as in :class:`http.client.HTTPSConnection`." +msgstr "" +"用于打开 HTTPS URL 的 handler 类。*context* 和 *check_hostname* 的含义与 " +":class:`http.client.HTTPSConnection` 的一样。" + +#: ../../library/urllib.request.rst:424 +msgid "*context* and *check_hostname* were added." +msgstr "添加 *context* 和 *check_hostname* 参数。" + +#: ../../library/urllib.request.rst:430 +msgid "Open local files." +msgstr "打开本地文件。" + +#: ../../library/urllib.request.rst:434 +msgid "Open data URLs." +msgstr "打开数据 URL。" + +#: ../../library/urllib.request.rst:440 +msgid "Open FTP URLs." +msgstr "打开 FTP URL。" + +#: ../../library/urllib.request.rst:445 +msgid "" +"Open FTP URLs, keeping a cache of open FTP connections to minimize delays." +msgstr "打开 FTP URL,并将打开的 FTP 连接存入缓存,以便最大程度减少延迟。" + +#: ../../library/urllib.request.rst:450 +msgid "A catch-all class to handle unknown URLs." +msgstr "处理所有未知类型 URL 的兜底类。" + +#: ../../library/urllib.request.rst:455 ../../library/urllib.request.rst:1151 +msgid "Process HTTP error responses." +msgstr "处理出错的 HTTP 响应。" + +#: ../../library/urllib.request.rst:461 +msgid "Request Objects" +msgstr "Request 对象" + +#: ../../library/urllib.request.rst:463 +msgid "" +"The following methods describe :class:`Request`'s public interface, and so " +"all may be overridden in subclasses. It also defines several public " +"attributes that can be used by clients to inspect the parsed request." +msgstr "" +"以下方法介绍了 :class:`Request` " +"的公开接口,因此子类可以覆盖所有这些方法。这里还定义了几个公开属性,客户端可以利用这些属性了解经过解析的请求。" + +#: ../../library/urllib.request.rst:470 +msgid "The original URL passed to the constructor." +msgstr "传给构造函数的原始 URL。" + +#: ../../library/urllib.request.rst:474 +msgid "" +"Request.full_url is a property with setter, getter and a deleter. Getting " +":attr:`~Request.full_url` returns the original request URL with the " +"fragment, if it was present." +msgstr "" +"Request.full_url 是一个带有 setter、getter 和 deleter 的属性。读取 " +":attr:`~Request.full_url` 属性将会返回附带片段(fragment)的初始请求 URL。" + +#: ../../library/urllib.request.rst:480 +msgid "The URI scheme." +msgstr "URI 方式。" + +#: ../../library/urllib.request.rst:484 +msgid "" +"The URI authority, typically a host, but may also contain a port separated " +"by a colon." +msgstr "URI 权限,通常是整个主机,但也有可能带有冒号分隔的端口号。" + +#: ../../library/urllib.request.rst:489 +msgid "The original host for the request, without port." +msgstr "请求的原始主机,不含端口。" + +#: ../../library/urllib.request.rst:493 +msgid "" +"The URI path. If the :class:`Request` uses a proxy, then selector will be " +"the full URL that is passed to the proxy." +msgstr "URI 路径。若 :class:`Request` 使用代理,selector 将会是传给代理的完整 URL。" + +#: ../../library/urllib.request.rst:498 +msgid "The entity body for the request, or ``None`` if not specified." +msgstr "请求的数据体,未给出则为 ``None`` 。" + +#: ../../library/urllib.request.rst:500 +msgid "" +"Changing value of :attr:`Request.data` now deletes \"Content-Length\" header" +" if it was previously set or calculated." +msgstr "现在如果修改 :attr:`Request.data` 的值,则会删除之前设置或计算过的“Content-Length”头部信息。" + +#: ../../library/urllib.request.rst:506 +msgid "" +"boolean, indicates whether the request is unverifiable as defined by " +":rfc:`2965`." +msgstr "布尔值,标识本请求是否属于 :rfc:`2965` 中定义的无法验证的情况。" + +#: ../../library/urllib.request.rst:511 +msgid "" +"The HTTP request method to use. By default its value is :const:`None`, " +"which means that :meth:`~Request.get_method` will do its normal computation " +"of the method to be used. Its value can be set (thus overriding the default" +" computation in :meth:`~Request.get_method`) either by providing a default " +"value by setting it at the class level in a :class:`Request` subclass, or by" +" passing a value in to the :class:`Request` constructor via the *method* " +"argument." +msgstr "" +"要采用的 HTTP 请求方法。默认为 :const:`None`,表示 :meth:`~Request.get_method` " +"将对方法进行正常处理。设置本值可以覆盖 :meth:`~Request.get_method` 中的默认处理过程,设置方式可以是在 " +":class:`Request` 的子类中给出默认值,也可以通过 *method* 参数给 :class:`Request` 构造函数传入一个值。" + +#: ../../library/urllib.request.rst:521 +msgid "" +"A default value can now be set in subclasses; previously it could only be " +"set via the constructor argument." +msgstr "现在可以在子类中设置默认值;而之前只能通过构造函数的实参进行设置。" + +#: ../../library/urllib.request.rst:528 +msgid "" +"Return a string indicating the HTTP request method. If " +":attr:`Request.method` is not ``None``, return its value, otherwise return " +"``'GET'`` if :attr:`Request.data` is ``None``, or ``'POST'`` if it's not. " +"This is only meaningful for HTTP requests." +msgstr "" +"返回表示 HTTP 请求方法的字符串。如果 :attr:`Request.method` 不为 ``None`` ,则返回其值。否则若 " +":attr:`Request.data` 为 则返回 ``'GET'``,不为 ``None`` 则返回 ``'POST'`` 。只对 HTTP " +"请求有效。" + +#: ../../library/urllib.request.rst:533 +msgid "get_method now looks at the value of :attr:`Request.method`." +msgstr "现在 get_method 会兼顾 :attr:`Request.method` 的值。" + +#: ../../library/urllib.request.rst:539 +msgid "" +"Add another header to the request. Headers are currently ignored by all " +"handlers except HTTP handlers, where they are added to the list of headers " +"sent to the server. Note that there cannot be more than one header with the" +" same name, and later calls will overwrite previous calls in case the *key* " +"collides. Currently, this is no loss of HTTP functionality, since all " +"headers which have meaning when used more than once have a (header-specific)" +" way of gaining the same functionality using only one header. Note that " +"headers added using this method are also added to redirected requests." +msgstr "" +"向请求添加一个标头。 标头目前会被所有处理器忽略但只有 HTTP 处理器是例外,该处理器会将它们加入发给服务器的标头列表中。 " +"请注意同名的标头只能有一个,当 *key* 发生冲突时后续的调用将会覆盖之前的调用。 目前,这并不会造成 HTTP " +"功能的损失,因为所有可多次使用而仍有意义的标头都有(特定标头专属的)方式来获得与仅使用一个标头时相同的功能。 " +"请注意使用此方法添加的标头也会被添加到重定向的请求中。" + +#: ../../library/urllib.request.rst:551 +msgid "Add a header that will not be added to a redirected request." +msgstr "添加一项不会被加入重定向请求的头部信息。" + +#: ../../library/urllib.request.rst:556 +msgid "" +"Return whether the instance has the named header (checks both regular and " +"unredirected)." +msgstr "返回本实例是否带有命名头部信息(对常规数据和非重定向数据都会检测)。" + +#: ../../library/urllib.request.rst:562 +msgid "" +"Remove named header from the request instance (both from regular and " +"unredirected headers)." +msgstr "从本请求实例中移除指定命名的头部信息(对常规数据和非重定向数据都会检测)。" + +#: ../../library/urllib.request.rst:570 +msgid "Return the URL given in the constructor." +msgstr "返回构造器中给定的 URL。" + +#: ../../library/urllib.request.rst:574 +msgid "Returns :attr:`Request.full_url`" +msgstr "返回 :attr:`Request.full_url`" + +#: ../../library/urllib.request.rst:579 +msgid "" +"Prepare the request by connecting to a proxy server. The *host* and *type* " +"will replace those of the instance, and the instance's selector will be the " +"original URL given in the constructor." +msgstr "" +"连接代理服务器,为当前请求做准备。 *host* 和 *type* 将会取代本实例中的对应值,selector 将会是构造函数中给出的初始 URL。" + +#: ../../library/urllib.request.rst:586 +msgid "" +"Return the value of the given header. If the header is not present, return " +"the default value." +msgstr "返回给定头部信息的数据。如果该头部信息不存在,返回默认值。" + +#: ../../library/urllib.request.rst:592 +msgid "" +"Return a list of tuples (header_name, header_value) of the Request headers." +msgstr "返回头部信息,形式为(名称, 数据)的元组列表。" + +#: ../../library/urllib.request.rst:594 +msgid "" +"The request methods add_data, has_data, get_data, get_type, get_host, " +"get_selector, get_origin_req_host and is_unverifiable that were deprecated " +"since 3.3 have been removed." +msgstr "" +"自 3.3 " +"起已弃用的下列方法已被删除:add_data、has_data、get_data、get_type、get_host、get_selector、get_origin_req_host" +" 和 is_unverifiable 。" + +#: ../../library/urllib.request.rst:603 +msgid "OpenerDirector Objects" +msgstr "OpenerDirector 对象" + +#: ../../library/urllib.request.rst:605 +msgid ":class:`OpenerDirector` instances have the following methods:" +msgstr ":class:`OpenerDirector` 实例有以下方法:" + +#: ../../library/urllib.request.rst:610 +msgid "" +"*handler* should be an instance of :class:`BaseHandler`. The following " +"methods are searched, and added to the possible chains (note that HTTP " +"errors are a special case). Note that, in the following, *protocol* should " +"be replaced with the actual protocol to handle, for example " +":meth:`http_response` would be the HTTP protocol response handler. Also " +"*type* should be replaced with the actual HTTP code, for example " +":meth:`http_error_404` would handle HTTP 404 errors." +msgstr "" +"*handler* 应为 :class:`BaseHandler` 的实例。将检索以下类型的方法,并将其添加到对应的处理链中(注意 HTTP " +"错误是特殊情况)。请注意,下文中的 *protocol* 应替换为要处理的实际协议,例如 :meth:`http_response` 将是 HTTP " +"协议响应处理函数。并且 *type* 也应替换为实际的 HTTP 代码,例如 :meth:`http_error_404` 将处理 HTTP 404 " +"错误。" + +#: ../../library/urllib.request.rst:618 +msgid "" +":meth:`_open` --- signal that the handler knows how to open " +"*protocol* URLs." +msgstr ":meth:`_open` — 表明该 handler 知道如何打开 *protocol* 协议的URL。" + +#: ../../library/urllib.request.rst:621 +msgid "See |protocol_open|_ for more information." +msgstr "更多信息请参阅 |protocol_open|_ 。" + +#: ../../library/urllib.request.rst:623 +msgid "" +":meth:`http_error_\\` --- signal that the handler knows how to " +"handle HTTP errors with HTTP error code *type*." +msgstr ":meth:`http_error_\\` — 表明该 handler 知道如何处理代码为 *type* 的 HTTP 错误。" + +#: ../../library/urllib.request.rst:626 +msgid "See |http_error_nnn|_ for more information." +msgstr "更多信息请参阅 |http_error_nnn|_ 。" + +#: ../../library/urllib.request.rst:628 +msgid "" +":meth:`_error` --- signal that the handler knows how to handle " +"errors from (non-\\ ``http``) *protocol*." +msgstr "" +":meth:`_error` — 表明该 handler 知道如何处理来自协议为 *protocol* (非\\ " +"``http``)的错误。" + +#: ../../library/urllib.request.rst:631 +msgid "" +":meth:`_request` --- signal that the handler knows how to pre-" +"process *protocol* requests." +msgstr ":meth:`_request` — 表明该 handler 知道如何预处理协议为 *protocol* 的请求。" + +#: ../../library/urllib.request.rst:634 +msgid "See |protocol_request|_ for more information." +msgstr "更多信息请参阅 |protocol_request|_ 。" + +#: ../../library/urllib.request.rst:636 +msgid "" +":meth:`_response` --- signal that the handler knows how to post-" +"process *protocol* responses." +msgstr ":meth:`_response` — 表明该 handler 知道如何后处理协议为 *protocol* 的响应。" + +#: ../../library/urllib.request.rst:639 +msgid "See |protocol_response|_ for more information." +msgstr "更多信息请参阅 |protocol_response|_ 。" + +#: ../../library/urllib.request.rst:648 +msgid "" +"Open the given *url* (which can be a request object or a string), optionally" +" passing the given *data*. Arguments, return values and exceptions raised " +"are the same as those of :func:`urlopen` (which simply calls the " +":meth:`open` method on the currently installed global " +":class:`OpenerDirector`). The optional *timeout* parameter specifies a " +"timeout in seconds for blocking operations like the connection attempt (if " +"not specified, the global default timeout setting will be used). The timeout" +" feature actually works only for HTTP, HTTPS and FTP connections." +msgstr "" +"打开给定的 *url* (可以是一个请求对象或一个字符串),可以选择传入给定的 *data*。 参数、返回值和被引发的异常均与 " +":func:`urlopen` 的相同 (它只是简单地在当前安装的全局 :class:`OpenerDirector` 上调用 :meth:`open`" +" 方法)。 可选的 *timeout* 形参指定了针对阻塞操作例如连接尝试的超时值 (如果未指明,则将使用全局默认的超时设置)。 超时特性仅适用于 " +"HTTP, HTTPS 和 FTP 连接。" + +#: ../../library/urllib.request.rst:660 +msgid "" +"Handle an error of the given protocol. This will call the registered error " +"handlers for the given protocol with the given arguments (which are protocol" +" specific). The HTTP protocol is a special case which uses the HTTP " +"response code to determine the specific error handler; refer to the " +":meth:`http_error_\\` methods of the handler classes." +msgstr "" +"处理给定协议的错误。将用给定的参数(协议相关)调用已注册的给定协议的错误处理程序。HTTP 协议是特殊情况,采用 HTTP " +"响应码来确定具体的错误处理程序;请参考 handler 类的 :meth:`http_error_\\` 方法。" + +#: ../../library/urllib.request.rst:666 +msgid "" +"Return values and exceptions raised are the same as those of " +":func:`urlopen`." +msgstr "返回值和异常均与 :func:`urlopen` 相同。" + +#: ../../library/urllib.request.rst:668 +msgid "OpenerDirector objects open URLs in three stages:" +msgstr "OpenerDirector 对象分 3 个阶段打开 URL:" + +#: ../../library/urllib.request.rst:670 +msgid "" +"The order in which these methods are called within each stage is determined " +"by sorting the handler instances." +msgstr "每个阶段中调用这些方法的次序取决于 handler 实例的顺序。" + +#: ../../library/urllib.request.rst:673 +msgid "" +"Every handler with a method named like :meth:`_request` has that " +"method called to pre-process the request." +msgstr "每个具有 :meth:`_request` 这类方法的 handler 都会调用本方法对请求进行预处理。" + +#: ../../library/urllib.request.rst:676 +msgid "" +"Handlers with a method named like :meth:`_open` are called to " +"handle the request. This stage ends when a handler either returns a non-\\ " +":const:`None` value (ie. a response), or raises an exception (usually " +":exc:`~urllib.error.URLError`). Exceptions are allowed to propagate." +msgstr "" +"调用具有 :meth:`_open` 这类方法的 handler 来处理请求。当 handler 返回非\\ :const:`None` " +"值(即响应)或引发异常(通常是 :exc:`~urllib.error.URLError`)时,本阶段结束。本阶段能够传播异常。" + +#: ../../library/urllib.request.rst:681 +msgid "" +"In fact, the above algorithm is first tried for methods named " +":meth:`default_open`. If all such methods return :const:`None`, the " +"algorithm is repeated for methods named like :meth:`_open`. If " +"all such methods return :const:`None`, the algorithm is repeated for methods" +" named :meth:`unknown_open`." +msgstr "" +"事实上,以上算法首先会尝试名为 :meth:`default_open` 的方法。 如果这些方法全都返回 :const:`None`,则会对名为 " +":meth:`_open` 的方法重复此算法。 如果这些方法也全都返回 :const:`None`,则会继续对名为 " +":meth:`unknown_open` 的方法重复此算法。" + +#: ../../library/urllib.request.rst:687 +msgid "" +"Note that the implementation of these methods may involve calls of the " +"parent :class:`OpenerDirector` instance's :meth:`~OpenerDirector.open` and " +":meth:`~OpenerDirector.error` methods." +msgstr "" +"请注意,这些方法的代码可能会调用 :class:`OpenerDirector` 父实例的 :meth:`~OpenerDirector.open` 和" +" :meth:`~OpenerDirector.error` 方法。" + +#: ../../library/urllib.request.rst:691 +msgid "" +"Every handler with a method named like :meth:`_response` has that " +"method called to post-process the response." +msgstr "每个具有 :meth:`_response` 这类方法的 handler 都会调用这些方法,以对响应进行后处理。" + +#: ../../library/urllib.request.rst:698 +msgid "BaseHandler Objects" +msgstr "BaseHandler 对象" + +#: ../../library/urllib.request.rst:700 +msgid "" +":class:`BaseHandler` objects provide a couple of methods that are directly " +"useful, and others that are meant to be used by derived classes. These are " +"intended for direct use:" +msgstr ":class:`BaseHandler` 对象提供了一些直接可用的方法,以及其他一些可供派生类使用的方法。以下是可供直接使用的方法:" + +#: ../../library/urllib.request.rst:707 +msgid "Add a director as parent." +msgstr "将 director 加为父 OpenerDirector。" + +#: ../../library/urllib.request.rst:712 +msgid "Remove any parents." +msgstr "移除所有父 OpenerDirector。" + +#: ../../library/urllib.request.rst:714 +msgid "" +"The following attribute and methods should only be used by classes derived " +"from :class:`BaseHandler`." +msgstr "以下属性和方法仅供 :class:`BaseHandler` 的子类使用:" + +#: ../../library/urllib.request.rst:719 +msgid "" +"The convention has been adopted that subclasses defining " +":meth:`_request` or :meth:`_response` methods are named " +":class:`\\*Processor`; all others are named :class:`\\*Handler`." +msgstr "" +"以下约定已被采纳:定义 :meth:`_request` 或 :meth:`_response` " +"方法的子类应命名为 :class:`\\*Processor`;所有其他子类都应命名为 :class:`\\*Handler` 。" + +#: ../../library/urllib.request.rst:726 +msgid "" +"A valid :class:`OpenerDirector`, which can be used to open using a different" +" protocol, or handle errors." +msgstr "一个可用的 :class:`OpenerDirector`,可用于以其他协议打开 URI,或处理错误。" + +#: ../../library/urllib.request.rst:732 +msgid "" +"This method is *not* defined in :class:`BaseHandler`, but subclasses should " +"define it if they want to catch all URLs." +msgstr "本方法在 :class:`BaseHandler` 中 *未* 予定义,但其子类若要捕获所有 URL 则应进行定义。" + +#: ../../library/urllib.request.rst:735 +msgid "" +"This method, if implemented, will be called by the parent " +":class:`OpenerDirector`. It should return a file-like object as described " +"in the return value of the :meth:`~OpenerDirector.open` method of " +":class:`OpenerDirector`, or ``None``. It should raise " +":exc:`~urllib.error.URLError`, unless a truly exceptional thing happens (for" +" example, :exc:`MemoryError` should not be mapped to :exc:`URLError`)." +msgstr "" +"如果实现了本方法,则它将被父类 :class:`OpenerDirector` 所调用。 它应当返回一个如 " +":class:`OpenerDirector` 的 :meth:`~OpenerDirector.open` 方法的返回值所描述的文件类对象,或是返回 " +"``None``。 它应当引发 :exc:`~urllib.error.URLError`,除非发生真正的异常 " +"(例如,:exc:`MemoryError` 就不应被映射为 :exc:`URLError`)。" + +#: ../../library/urllib.request.rst:742 +msgid "This method will be called before any protocol-specific open method." +msgstr "本方法将会在所有协议的 open 方法之前被调用。" + +#: ../../library/urllib.request.rst:749 +msgid "" +"This method is *not* defined in :class:`BaseHandler`, but subclasses should " +"define it if they want to handle URLs with the given protocol." +msgstr "本方法在 :class:`BaseHandler` 中 *未* 予定义,但其子类若要处理给定协议的 URL 则应进行定义。" + +#: ../../library/urllib.request.rst:752 +msgid "" +"This method, if defined, will be called by the parent " +":class:`OpenerDirector`. Return values should be the same as for " +":meth:`default_open`." +msgstr "" +"若定义了本方法,将会被父 :class:`OpenerDirector` 对象调用。返回值和 :meth:`default_open` 的一样。" + +#: ../../library/urllib.request.rst:758 +msgid "" +"This method is *not* defined in :class:`BaseHandler`, but subclasses should " +"define it if they want to catch all URLs with no specific registered handler" +" to open it." +msgstr "" +"本方法在 :class:`BaseHandler` 中 *未* 予定义,但其子类若要捕获并打开所有未注册 handler 的 URL,则应进行定义。" + +#: ../../library/urllib.request.rst:762 +msgid "" +"This method, if implemented, will be called by the :attr:`parent` " +":class:`OpenerDirector`. Return values should be the same as for " +":meth:`default_open`." +msgstr "" +"若实现了本方法,将会被 :attr:`parent` 属性指向的父 :class:`OpenerDirector` 调用。返回值和 " +":meth:`default_open` 的一样。" + +#: ../../library/urllib.request.rst:769 +msgid "" +"This method is *not* defined in :class:`BaseHandler`, but subclasses should " +"override it if they intend to provide a catch-all for otherwise unhandled " +"HTTP errors. It will be called automatically by the " +":class:`OpenerDirector` getting the error, and should not normally be called" +" in other circumstances." +msgstr "" +"本方法在 :class:`BaseHandler` 中 *未* 予定义,但其子类若要为所有未定义 handler 的 HTTP " +"错误提供一个兜底方法,则应进行重写。:class:`OpenerDirector` 会自动调用本方法,获取错误信息,而通常在其他时候不应去调用。" + +#: ../../library/urllib.request.rst:774 +msgid "" +"*req* will be a :class:`Request` object, *fp* will be a file-like object " +"with the HTTP error body, *code* will be the three-digit code of the error, " +"*msg* will be the user-visible explanation of the code and *hdrs* will be a " +"mapping object with the headers of the error." +msgstr "" +"*req* 会是一个 :class:`Request` 对象,*fp* 是一个带有 HTTP 错误体的文件型对象,*code* " +"是三位数的错误码,*msg* 是供用户阅读的解释信息,*hdrs* 则是一个包含出错头部信息的字典对象。" + +#: ../../library/urllib.request.rst:779 +msgid "" +"Return values and exceptions raised should be the same as those of " +":func:`urlopen`." +msgstr "返回值和触发的异常应与 :func:`urlopen` 的相同。" + +#: ../../library/urllib.request.rst:786 +msgid "" +"*nnn* should be a three-digit HTTP error code. This method is also not " +"defined in :class:`BaseHandler`, but will be called, if it exists, on an " +"instance of a subclass, when an HTTP error with code *nnn* occurs." +msgstr "" +"*nnn* 应为三位数的 HTTP 错误码。本方法在 :class:`BaseHandler` 中也未予定义,但当子类的实例发生代码为 *nnn* 的 " +"HTTP 错误时,若方法存在则会被调用。" + +#: ../../library/urllib.request.rst:790 +msgid "Subclasses should override this method to handle specific HTTP errors." +msgstr "子类应该重写本方法,以便能处理相应的 HTTP 错误。" + +#: ../../library/urllib.request.rst:792 +msgid "" +"Arguments, return values and exceptions raised should be the same as for " +":meth:`http_error_default`." +msgstr "参数、返回值和触发的异常应与 :meth:`http_error_default` 相同。" + +#: ../../library/urllib.request.rst:800 +msgid "" +"This method is *not* defined in :class:`BaseHandler`, but subclasses should " +"define it if they want to pre-process requests of the given protocol." +msgstr "本方法在 :class:`BaseHandler` 中 *未* 予定义,但其子类若要对给定协议的请求进行预处理,则应进行定义。" + +#: ../../library/urllib.request.rst:803 +msgid "" +"This method, if defined, will be called by the parent " +":class:`OpenerDirector`. *req* will be a :class:`Request` object. The return" +" value should be a :class:`Request` object." +msgstr "" +"若实现了本方法,将会被父 :class:`OpenerDirector` 调用。*req* 将为 :class:`Request` 对象。返回值应为 " +":class:`Request` 对象。" + +#: ../../library/urllib.request.rst:812 +msgid "" +"This method is *not* defined in :class:`BaseHandler`, but subclasses should " +"define it if they want to post-process responses of the given protocol." +msgstr "本方法在 :class:`BaseHandler` 中 *未* 予定义,但其子类若要对给定协议的请求进行后处理,则应进行定义。" + +#: ../../library/urllib.request.rst:815 +msgid "" +"This method, if defined, will be called by the parent " +":class:`OpenerDirector`. *req* will be a :class:`Request` object. *response*" +" will be an object implementing the same interface as the return value of " +":func:`urlopen`. The return value should implement the same interface as " +"the return value of :func:`urlopen`." +msgstr "" +"若实现了本方法,将会被父 :class:`OpenerDirector` 调用。*req* 将为 :class:`Request` " +"对象。*response* 应实现与 :func:`urlopen` 返回值相同的接口。返回值应实现与 :func:`urlopen` " +"返回值相同的接口。" + +#: ../../library/urllib.request.rst:825 +msgid "HTTPRedirectHandler Objects" +msgstr "HTTPRedirectHandler 对象" + +#: ../../library/urllib.request.rst:829 +msgid "" +"Some HTTP redirections require action from this module's client code. If " +"this is the case, :exc:`~urllib.error.HTTPError` is raised. See :rfc:`2616`" +" for details of the precise meanings of the various redirection codes." +msgstr "" +"某些 HTTP 重定向操作需要本模块的客户端代码提供的功能。这时会触发 " +":exc:`~urllib.error.HTTPError`。有关各种重定向代码的确切含义,请参阅 :rfc:`2616` 。" + +#: ../../library/urllib.request.rst:833 +msgid "" +"An :class:`HTTPError` exception raised as a security consideration if the " +"HTTPRedirectHandler is presented with a redirected URL which is not an HTTP," +" HTTPS or FTP URL." +msgstr "" +"如果给到 HTTPRedirectHandler 的重定向 URL 不是 HTTP、HTTPS 或 FTP URL,则出于安全考虑将触发 " +":class:`HTTPError` 异常。" + +#: ../../library/urllib.request.rst:840 +msgid "" +"Return a :class:`Request` or ``None`` in response to a redirect. This is " +"called by the default implementations of the :meth:`http_error_30\\*` " +"methods when a redirection is received from the server. If a redirection " +"should take place, return a new :class:`Request` to allow " +":meth:`http_error_30\\*` to perform the redirect to *newurl*. Otherwise, " +"raise :exc:`~urllib.error.HTTPError` if no other handler should try to " +"handle this URL, or return ``None`` if you can't but another handler might." +msgstr "" +"返回 :class:`Request` 或 ``None`` 对象作为重定向行为的响应。当服务器接收到重定向请求时, " +":meth:`http_error_30\\*` 方法的默认实现代码将会调用本方法。如果确实应该发生重定向,则返回一个新的 " +":class:`Request` 对象,使得 :meth:`http_error_30\\*` 能重定向至 *newurl*。否则,若没有 " +"handler 会处理此 URL,则会引发 :exc:`~urllib.error.HTTPError`;或者本方法不能处理但或许会有其他 " +"handler 会处理,则返回 ``None`` 。" + +#: ../../library/urllib.request.rst:850 +msgid "" +"The default implementation of this method does not strictly follow " +":rfc:`2616`, which says that 301 and 302 responses to ``POST`` requests must" +" not be automatically redirected without confirmation by the user. In " +"reality, browsers do allow automatic redirection of these responses, " +"changing the POST to a ``GET``, and the default implementation reproduces " +"this behavior." +msgstr "" +"本方法的默认实现代码并未严格遵循 :rfc:`2616`,即 ``POST`` 请求的 301 和 302 " +"响应不得在未经用户确认的情况下自动进行重定向。现实情况下,浏览器确实允许自动重定向这些响应,将 POST 更改为 ``GET`` " +",于是默认实现代码就复现了这种处理方式。" + +#: ../../library/urllib.request.rst:859 +msgid "" +"Redirect to the ``Location:`` or ``URI:`` URL. This method is called by the" +" parent :class:`OpenerDirector` when getting an HTTP 'moved permanently' " +"response." +msgstr "" +"重定向到 ``Location:`` 或 ``URI:`` URL。 当得到 HTTP 'moved permanently' 响应时,本方法会被父级 " +":class:`OpenerDirector` 调用。" + +#: ../../library/urllib.request.rst:865 +msgid "" +"The same as :meth:`http_error_301`, but called for the 'found' response." +msgstr "与 :meth:`http_error_301` 相同,不过是发生“found”响应时的调用。" + +#: ../../library/urllib.request.rst:870 +msgid "" +"The same as :meth:`http_error_301`, but called for the 'see other' response." +msgstr "与 :meth:`http_error_301` 相同,不过是发生“see other”响应时的调用。" + +#: ../../library/urllib.request.rst:875 +msgid "" +"The same as :meth:`http_error_301`, but called for the 'temporary redirect' " +"response." +msgstr "与 :meth:`http_error_301` 相同,不过是发生“temporary redirect”响应时的调用。" + +#: ../../library/urllib.request.rst:882 +msgid "HTTPCookieProcessor Objects" +msgstr "HTTPCookieProcessor 对象" + +#: ../../library/urllib.request.rst:884 +msgid ":class:`HTTPCookieProcessor` instances have one attribute:" +msgstr ":class:`HTTPCookieProcessor` 的实例具备一个属性:" + +#: ../../library/urllib.request.rst:888 +msgid "The :class:`http.cookiejar.CookieJar` in which cookies are stored." +msgstr "cookie 存放在 :class:`http.cookiejar.CookieJar` 中。" + +#: ../../library/urllib.request.rst:894 +msgid "ProxyHandler Objects" +msgstr "ProxyHandler 对象" + +#: ../../library/urllib.request.rst:900 +msgid "" +"The :class:`ProxyHandler` will have a method :meth:`_open` for " +"every *protocol* which has a proxy in the *proxies* dictionary given in the " +"constructor. The method will modify requests to go through the proxy, by " +"calling ``request.set_proxy()``, and call the next handler in the chain to " +"actually execute the protocol." +msgstr "" +":class:`ProxyHandler` 将为每种 *protocol* 准备一个 :meth:`_open` 方法,在构造函数给出的 " +"*proxies* 字典中包含对应的代理服务器信息。通过调用 ``request.set_proxy()``,本方法将把请求转为通过代理服务器,并会调用" +" handler 链中的下一个 handler 来完成对应的协议处理。" + +#: ../../library/urllib.request.rst:910 +msgid "HTTPPasswordMgr Objects" +msgstr "HTTPPasswordMgr 对象" + +#: ../../library/urllib.request.rst:912 +msgid "" +"These methods are available on :class:`HTTPPasswordMgr` and " +":class:`HTTPPasswordMgrWithDefaultRealm` objects." +msgstr "" +"以下方法 :class:`HTTPPasswordMgr` 和 :class:`HTTPPasswordMgrWithDefaultRealm` " +"对象均有提供。" + +#: ../../library/urllib.request.rst:918 +msgid "" +"*uri* can be either a single URI, or a sequence of URIs. *realm*, *user* and" +" *passwd* must be strings. This causes ``(user, passwd)`` to be used as " +"authentication tokens when authentication for *realm* and a super-URI of any" +" of the given URIs is given." +msgstr "" +"*uri* 可以是单个 URI,也可以是 URI 列表。*realm*、*user* 和 *passwd* 必须是字符串。这使得在为 *realm* " +"和超级 URI 进行身份认证时,``(user, passwd)`` 可用作认证令牌。" + +#: ../../library/urllib.request.rst:926 +msgid "" +"Get user/password for given realm and URI, if any. This method will return " +"``(None, None)`` if there is no matching user/password." +msgstr "为给定 realm 和 URI 获取用户名和密码。如果没有匹配的用户名和密码,本方法将会返回 ``(None, None)`` 。" + +#: ../../library/urllib.request.rst:929 +msgid "" +"For :class:`HTTPPasswordMgrWithDefaultRealm` objects, the realm ``None`` " +"will be searched if the given *realm* has no matching user/password." +msgstr "" +"对于 :class:`HTTPPasswordMgrWithDefaultRealm` 对象,如果给定 *realm* 没有匹配的用户名和密码,将搜索 " +"realm ``None``。" + +#: ../../library/urllib.request.rst:936 +msgid "HTTPPasswordMgrWithPriorAuth Objects" +msgstr "HTTPPasswordMgrWithPriorAuth 对象" + +#: ../../library/urllib.request.rst:938 +msgid "" +"This password manager extends :class:`HTTPPasswordMgrWithDefaultRealm` to " +"support tracking URIs for which authentication credentials should always be " +"sent." +msgstr "" +"这是 :class:`HTTPPasswordMgrWithDefaultRealm` 的扩展,以便对那些需要一直发送认证凭证的 URI 进行跟踪。" + +#: ../../library/urllib.request.rst:945 +msgid "" +"*realm*, *uri*, *user*, *passwd* are as for " +":meth:`HTTPPasswordMgr.add_password`. *is_authenticated* sets the initial " +"value of the ``is_authenticated`` flag for the given URI or list of URIs. If" +" *is_authenticated* is specified as ``True``, *realm* is ignored." +msgstr "" +"*realm*、*uri*、*user*、*passwd* 的含义与 :meth:`HTTPPasswordMgr.add_password` " +"的相同。*is_authenticated* 为给定 URI 或 URI 列表设置 ``is_authenticated`` 标志的初始值。如果 " +"*is_authenticated* 设为 ``True`` ,则会忽略 *realm*。" + +#: ../../library/urllib.request.rst:953 +msgid "Same as for :class:`HTTPPasswordMgrWithDefaultRealm` objects" +msgstr "与 :class:`HTTPPasswordMgrWithDefaultRealm` 对象的相同。" + +#: ../../library/urllib.request.rst:959 +msgid "" +"Update the ``is_authenticated`` flag for the given *uri* or list of URIs." +msgstr "更新给定 *uri* 或 URI 列表的 ``is_authenticated`` 标志。" + +#: ../../library/urllib.request.rst:965 +msgid "" +"Returns the current state of the ``is_authenticated`` flag for the given " +"URI." +msgstr "返回给定 URI ``is_authenticated`` 标志的当前状态。" + +#: ../../library/urllib.request.rst:972 +msgid "AbstractBasicAuthHandler Objects" +msgstr "AbstractBasicAuthHandler 对象" + +#: ../../library/urllib.request.rst:977 +msgid "" +"Handle an authentication request by getting a user/password pair, and re-" +"trying the request. *authreq* should be the name of the header where the " +"information about the realm is included in the request, *host* specifies the" +" URL and path to authenticate for, *req* should be the (failed) " +":class:`Request` object, and *headers* should be the error headers." +msgstr "" +"通过获取用户名和密码并重新尝试请求,以处理身份认证请求。 *authreq* 应该是请求中包含 realm 的头部信息名称,*host* " +"指定了需要进行身份认证的 URL 和路径,*req* 应为 (已失败的) :class:`Request` 对象 , *headers* " +"应该是出错的头部信息。" + +#: ../../library/urllib.request.rst:983 +msgid "" +"*host* is either an authority (e.g. ``\"python.org\"``) or a URL containing " +"an authority component (e.g. ``\"http://python.org/\"``). In either case, " +"the authority must not contain a userinfo component (so, ``\"python.org\"`` " +"and ``\"python.org:80\"`` are fine, ``\"joe:password@python.org\"`` is not)." +msgstr "" +"*host* 要么是一个认证信息(例如 ``\"python.org\"`` ),要么是一个包含认证信息的 URL(如 " +"``\"http://python.org/\"`` )。 不论是哪种格式,认证信息中都不能包含用户信息(因此, ``\"python.org\"`` " +"和 ``\"python.org:80\"`` 没问题,而 ``\"joe:password@python.org\"`` 则不行)。" + +#: ../../library/urllib.request.rst:992 +msgid "HTTPBasicAuthHandler Objects" +msgstr "HTTPBasicAuthHandler 对象" + +#: ../../library/urllib.request.rst:997 ../../library/urllib.request.rst:1008 +#: ../../library/urllib.request.rst:1033 ../../library/urllib.request.rst:1044 +msgid "Retry the request with authentication information, if available." +msgstr "如果可用的话,请用身份认证信息重试请求。" + +#: ../../library/urllib.request.rst:1003 +msgid "ProxyBasicAuthHandler Objects" +msgstr "ProxyBasicAuthHandler 对象" + +#: ../../library/urllib.request.rst:1014 +msgid "AbstractDigestAuthHandler Objects" +msgstr "AbstractDigestAuthHandler 对象" + +#: ../../library/urllib.request.rst:1019 +msgid "" +"*authreq* should be the name of the header where the information about the " +"realm is included in the request, *host* should be the host to authenticate " +"to, *req* should be the (failed) :class:`Request` object, and *headers* " +"should be the error headers." +msgstr "" +"*authreq* 应为请求中有关 realm 的头部信息名称,*host* 应为需要进行身份认证的主机,*req* 应为(已失败的) " +":class:`Request` 对象, *headers* 则应为出错的头部信息。" + +#: ../../library/urllib.request.rst:1028 +msgid "HTTPDigestAuthHandler Objects" +msgstr "HTTPDigestAuthHandler 对象" + +#: ../../library/urllib.request.rst:1039 +msgid "ProxyDigestAuthHandler Objects" +msgstr "ProxyDigestAuthHandler 对象" + +#: ../../library/urllib.request.rst:1050 +msgid "HTTPHandler Objects" +msgstr "HTTPHandler 对象" + +#: ../../library/urllib.request.rst:1055 +msgid "" +"Send an HTTP request, which can be either GET or POST, depending on " +"``req.has_data()``." +msgstr "发送 HTTP 请求,根据 ``req.has_data()`` 的结果,可能是 GET 或 POST 格式。" + +#: ../../library/urllib.request.rst:1062 +msgid "HTTPSHandler Objects" +msgstr "HTTPSHandler 对象" + +#: ../../library/urllib.request.rst:1067 +msgid "" +"Send an HTTPS request, which can be either GET or POST, depending on " +"``req.has_data()``." +msgstr "发送 HTTPS 请求,根据 ``req.has_data()`` 的结果,可能是 GET 或 POST 格式。" + +#: ../../library/urllib.request.rst:1074 +msgid "FileHandler Objects" +msgstr "FileHandler 对象" + +#: ../../library/urllib.request.rst:1079 +msgid "" +"Open the file locally, if there is no host name, or the host name is " +"``'localhost'``." +msgstr "若无主机名或主机名为 ``'localhost'`` ,则打开本地文件。" + +#: ../../library/urllib.request.rst:1082 +msgid "" +"This method is applicable only for local hostnames. When a remote hostname " +"is given, an :exc:`~urllib.error.URLError` is raised." +msgstr "本方法仅适用于本地主机名。如果给出的是远程主机名,将会触发 :exc:`~urllib.error.URLError` 。" + +#: ../../library/urllib.request.rst:1090 +msgid "DataHandler Objects" +msgstr "DataHandler 对象" + +#: ../../library/urllib.request.rst:1094 +msgid "" +"Read a data URL. This kind of URL contains the content encoded in the URL " +"itself. The data URL syntax is specified in :rfc:`2397`. This implementation" +" ignores white spaces in base64 encoded data URLs so the URL may be wrapped " +"in whatever source file it comes from. But even though some browsers don't " +"mind about a missing padding at the end of a base64 encoded data URL, this " +"implementation will raise an :exc:`ValueError` in that case." +msgstr "" +"读取内含数据的 URL。这种 URL 本身包含了经过编码的数据。 :rfc:`2397` 中给出了数据 URL 的语法定义。目前的代码库将忽略经过 " +"base64 编码的数据 URL 中的空白符,因此 URL 可以放入任何源码文件中。如果数据 URL 的 base64 " +"编码尾部缺少填充,即使某些浏览器不介意,但目前的代码库仍会引发 :exc:`ValueError`。" + +#: ../../library/urllib.request.rst:1105 +msgid "FTPHandler Objects" +msgstr "FTPHandler 对象" + +#: ../../library/urllib.request.rst:1110 +msgid "" +"Open the FTP file indicated by *req*. The login is always done with empty " +"username and password." +msgstr "打开由 *req* 给出的 FTP 文件。登录时的用户名和密码总是为空。" + +#: ../../library/urllib.request.rst:1117 +msgid "CacheFTPHandler Objects" +msgstr "CacheFTPHandler 对象" + +#: ../../library/urllib.request.rst:1119 +msgid "" +":class:`CacheFTPHandler` objects are :class:`FTPHandler` objects with the " +"following additional methods:" +msgstr ":class:`CacheFTPHandler` 对象即为加入以下方法的 :class:`FTPHandler` 对象:" + +#: ../../library/urllib.request.rst:1125 +msgid "Set timeout of connections to *t* seconds." +msgstr "设置连接超时为 *t* 秒。" + +#: ../../library/urllib.request.rst:1130 +msgid "Set maximum number of cached connections to *m*." +msgstr "设置已缓存的最大连接数为 *m* 。" + +#: ../../library/urllib.request.rst:1136 +msgid "UnknownHandler Objects" +msgstr "UnknownHandler 对象" + +#: ../../library/urllib.request.rst:1141 +msgid "Raise a :exc:`~urllib.error.URLError` exception." +msgstr "触发 :exc:`~urllib.error.URLError` 异常。" + +#: ../../library/urllib.request.rst:1147 +msgid "HTTPErrorProcessor Objects" +msgstr "HTTPErrorProcessor 对象" + +#: ../../library/urllib.request.rst:1153 +msgid "For 200 error codes, the response object is returned immediately." +msgstr "对于 200 错误码,响应对象应立即返回。" + +#: ../../library/urllib.request.rst:1155 +msgid "" +"For non-200 error codes, this simply passes the job on to the " +":meth:`http_error_\\` handler methods, via " +":meth:`OpenerDirector.error`. Eventually, :class:`HTTPDefaultErrorHandler` " +"will raise an :exc:`~urllib.error.HTTPError` if no other handler handles the" +" error." +msgstr "" +"对于 200 以外的错误码,只通过 :meth:`OpenerDirector.error` 将任务传给 handler 的 " +":meth:`http_error_\\` 方法。如果最终没有 handler 处理错误, " +":class:`HTTPDefaultErrorHandler` 将触发 :exc:`~urllib.error.HTTPError`。" + +#: ../../library/urllib.request.rst:1163 +msgid "Process HTTPS error responses." +msgstr "HTTPS 出错响应的处理。" + +#: ../../library/urllib.request.rst:1165 +msgid "The behavior is same as :meth:`http_response`." +msgstr "与 :meth:`http_response` 方法相同。" + +#: ../../library/urllib.request.rst:1171 +msgid "Examples" +msgstr "例子" + +#: ../../library/urllib.request.rst:1173 +msgid "" +"In addition to the examples below, more examples are given in :ref:`urllib-" +"howto`." +msgstr ":ref:`urllib-howto` 中给出了更多的示例。" + +#: ../../library/urllib.request.rst:1176 +msgid "" +"This example gets the python.org main page and displays the first 300 bytes " +"of it. ::" +msgstr "以下示例将读取 python.org 主页并显示前 300 个字节的内容:" + +#: ../../library/urllib.request.rst:1189 +msgid "" +"Note that urlopen returns a bytes object. This is because there is no way " +"for urlopen to automatically determine the encoding of the byte stream it " +"receives from the HTTP server. In general, a program will decode the " +"returned bytes object to string once it determines or guesses the " +"appropriate encoding." +msgstr "" +"请注意,urlopen 将返回字节对象。这是因为 urlopen 无法自动确定由 HTTP " +"服务器收到的字节流的编码。通常,只要能确定或猜出编码格式,就应将返回的字节对象解码为字符串。" + +#: ../../library/urllib.request.rst:1195 +msgid "" +"The following W3C document, https://www.w3.org/International/O-charset\\ , " +"lists the various ways in which an (X)HTML or an XML document could have " +"specified its encoding information." +msgstr "" +"下述 W3C 文档 https://www.w3.org/International/O-charset\\ 列出了可用于指明(X)HTML 或 XML" +" 文档编码信息的多种方案。" + +#: ../../library/urllib.request.rst:1199 +msgid "" +"As the python.org website uses *utf-8* encoding as specified in its meta " +"tag, we will use the same for decoding the bytes object. ::" +msgstr "python.org 网站已在 meta 标签中指明,采用的是 *utf-8* 编码,因此这里将用同样的格式对字节串进行解码。" + +#: ../../library/urllib.request.rst:1208 +msgid "" +"It is also possible to achieve the same result without using the " +":term:`context manager` approach. ::" +msgstr "不用 :term:`context manager` 方法也能获得同样的结果:" + +#: ../../library/urllib.request.rst:1217 +msgid "" +"In the following example, we are sending a data-stream to the stdin of a CGI" +" and reading the data it returns to us. Note that this example will only " +"work when the Python installation supports SSL. ::" +msgstr "以下示例将会把数据流发送给某 CGI 的 stdin,并读取返回数据。请注意,该示例只能工作于 Python 装有 SSL 支持的环境。" + +#: ../../library/urllib.request.rst:1229 +msgid "The code for the sample CGI used in the above example is::" +msgstr "上述示例中的 CGI 代码如下所示:" + +#: ../../library/urllib.request.rst:1236 +msgid "Here is an example of doing a ``PUT`` request using :class:`Request`::" +msgstr "下面是利用 :class:`Request` 发送 ``PUT`` 请求的示例:" + +#: ../../library/urllib.request.rst:1246 +msgid "Use of Basic HTTP Authentication::" +msgstr "基本 HTTP 认证示例:" + +#: ../../library/urllib.request.rst:1260 +msgid "" +":func:`build_opener` provides many handlers by default, including a " +":class:`ProxyHandler`. By default, :class:`ProxyHandler` uses the " +"environment variables named ``_proxy``, where ```` is the " +"URL scheme involved. For example, the :envvar:`http_proxy` environment " +"variable is read to obtain the HTTP proxy's URL." +msgstr "" +":func:`build_opener` 默认提供了很多现成的 handler,包括 :class:`ProxyHandler`。 " +"默认情况下,:class:`ProxyHandler` 会使用名为 ``_proxy`` 的环境变量,其中的 ```` " +"是相关的 URL 协议。 例如,可以读取 :envvar:`http_proxy` 环境变量来获取 HTTP 代理的 URL。" + +#: ../../library/urllib.request.rst:1266 +msgid "" +"This example replaces the default :class:`ProxyHandler` with one that uses " +"programmatically-supplied proxy URLs, and adds proxy authorization support " +"with :class:`ProxyBasicAuthHandler`. ::" +msgstr "" +"以下示例将默认的 :class:`ProxyHandler` 替换为自己的 handler,由程序提供代理 URL,并利用 " +":class:`ProxyBasicAuthHandler` 加入代理认证的支持:" + +#: ../../library/urllib.request.rst:1278 +msgid "Adding HTTP headers:" +msgstr "添加 HTTP 头部信息:" + +#: ../../library/urllib.request.rst:1280 +msgid "Use the *headers* argument to the :class:`Request` constructor, or::" +msgstr "可利用 :class:`Request` 构造函数的 *headers* 参数,或者是:" + +#: ../../library/urllib.request.rst:1289 +msgid "" +":class:`OpenerDirector` automatically adds a :mailheader:`User-Agent` header" +" to every :class:`Request`. To change this::" +msgstr "" +":class:`OpenerDirector` 自动会在每个 :class:`Request` 中加入一项 :mailheader:`User-" +"Agent` 头部信息。若要修改,请参见以下语句:" + +#: ../../library/urllib.request.rst:1297 +msgid "" +"Also, remember that a few standard headers (:mailheader:`Content-Length`, " +":mailheader:`Content-Type` and :mailheader:`Host`) are added when the " +":class:`Request` is passed to :func:`urlopen` (or " +":meth:`OpenerDirector.open`)." +msgstr "" +"另请记得,当 :class:`Request` 传给 :func:`urlopen` (或 " +":meth:`OpenerDirector.open`)时,会加入一些标准的头部信息( :mailheader:`Content-Length` 、 " +":mailheader:`Content-Type` 和 :mailheader:`Host`)。" + +#: ../../library/urllib.request.rst:1304 +msgid "" +"Here is an example session that uses the ``GET`` method to retrieve a URL " +"containing parameters::" +msgstr "以下会话示例用 ``GET`` 方法读取包含参数的 URL。" + +#: ../../library/urllib.request.rst:1315 +msgid "" +"The following example uses the ``POST`` method instead. Note that params " +"output from urlencode is encoded to bytes before it is sent to urlopen as " +"data::" +msgstr "以下示例换用 ``POST`` 方法。请注意 urlencode 输出结果先被编码为字节串 data,再送入 urlopen。" + +#: ../../library/urllib.request.rst:1326 +msgid "" +"The following example uses an explicitly specified HTTP proxy, overriding " +"environment settings::" +msgstr "以下示例显式指定了 HTTP 代理,以覆盖环境变量中的设置:" + +#: ../../library/urllib.request.rst:1336 +msgid "" +"The following example uses no proxies at all, overriding environment " +"settings::" +msgstr "以下示例根本不用代理,也覆盖了环境变量中的设置:" + +#: ../../library/urllib.request.rst:1346 +msgid "Legacy interface" +msgstr "已停用的接口" + +#: ../../library/urllib.request.rst:1348 +msgid "" +"The following functions and classes are ported from the Python 2 module " +"``urllib`` (as opposed to ``urllib2``). They might become deprecated at " +"some point in the future." +msgstr "以下函数和类是由 Python 2 模块 ``urllib`` (相对早于 ``urllib2`` )移植过来的。将来某个时候可能会停用。" + +#: ../../library/urllib.request.rst:1354 +msgid "" +"Copy a network object denoted by a URL to a local file. If the URL points to" +" a local file, the object will not be copied unless filename is supplied. " +"Return a tuple ``(filename, headers)`` where *filename* is the local file " +"name under which the object can be found, and *headers* is whatever the " +":meth:`info` method of the object returned by :func:`urlopen` returned (for " +"a remote object). Exceptions are the same as for :func:`urlopen`." +msgstr "" +"将 URL 形式的网络对象复制为本地文件。如果 URL 指向本地文件,则必须提供文件名才会执行复制。返回值为元组 ``(filename, " +"headers)`` ,其中 *filename* 是保存网络对象的本地文件名, *headers* 是由 :func:`urlopen` " +"返回的远程对象 :meth:`info` 方法的调用结果。可能触发的异常与 :func:`urlopen` 相同。" + +#: ../../library/urllib.request.rst:1361 +msgid "" +"The second argument, if present, specifies the file location to copy to (if " +"absent, the location will be a tempfile with a generated name). The third " +"argument, if present, is a callable that will be called once on " +"establishment of the network connection and once after each block read " +"thereafter. The callable will be passed three arguments; a count of blocks " +"transferred so far, a block size in bytes, and the total size of the file. " +"The third argument may be ``-1`` on older FTP servers which do not return a " +"file size in response to a retrieval request." +msgstr "" +"第二个参数指定文件的保存位置(若未给出,则会是名称随机生成的临时文件)。第三个参数是个可调用对象,在建立网络连接时将会调用一次,之后每次读完数据块后会调用一次。该可调用对象将会传入" +" 3 个参数:已传输的块数、块的大小(以字节为单位)和文件总的大小。如果面对的是老旧 FTP 服务器,文件大小参数可能会是 ``-1`` " +",这些服务器响应读取请求时不会返回文件大小。" + +#: ../../library/urllib.request.rst:1370 +msgid "The following example illustrates the most common usage scenario::" +msgstr "以下例子演示了大部分常用场景:" + +#: ../../library/urllib.request.rst:1377 +msgid "" +"If the *url* uses the :file:`http:` scheme identifier, the optional *data* " +"argument may be given to specify a ``POST`` request (normally the request " +"type is ``GET``). The *data* argument must be a bytes object in standard " +":mimetype:`application/x-www-form-urlencoded` format; see the " +":func:`urllib.parse.urlencode` function." +msgstr "" +"如果 *url* 使用 :file:`http:` 方式的标识符,则可能给出可选的 *data* 参数来指定一个 ``POST`` 请求 " +"(通常的请求类型为 ``GET``)。 *data* 参数必须是标准 :mimetype:`application/x-www-form-" +"urlencoded` 格式的字节串对象;参见 :func:`urllib.parse.urlencode` 函数。" + +#: ../../library/urllib.request.rst:1383 +msgid "" +":func:`urlretrieve` will raise :exc:`ContentTooShortError` when it detects " +"that the amount of data available was less than the expected amount (which " +"is the size reported by a *Content-Length* header). This can occur, for " +"example, when the download is interrupted." +msgstr "" +":func:`urlretrieve` 在检测到可用数据少于预期的大小(即由 *Content-Length* 标头所报告的大小)时将引发 " +":exc:`ContentTooShortError`。 例如,这可能会在下载中断时发生。" + +#: ../../library/urllib.request.rst:1388 +msgid "" +"The *Content-Length* is treated as a lower bound: if there's more data to " +"read, urlretrieve reads more data, but if less data is available, it raises" +" the exception." +msgstr "" +"*Content-Length* 会被视为大小的下限:如果存在更多的可用数据,urlretrieve " +"会读取更多的数据,但是如果可用数据少于该值,则会引发异常。" + +#: ../../library/urllib.request.rst:1392 +msgid "" +"You can still retrieve the downloaded data in this case, it is stored in " +"the :attr:`content` attribute of the exception instance." +msgstr "在这种情况下你仍然能够获取已下载的数据,它会存放在异常实例的 :attr:`content` 属性中。" + +#: ../../library/urllib.request.rst:1395 +msgid "" +"If no *Content-Length* header was supplied, urlretrieve can not check the " +"size of the data it has downloaded, and just returns it. In this case you " +"just have to assume that the download was successful." +msgstr "" +"如果未提供 *Content-Length* 标头,urlretrieve 就无法检查它所下载的数据大小,只是简单地返回它。 " +"在这种情况下你只能假定下载是成功的。" + +#: ../../library/urllib.request.rst:1401 +msgid "" +"Cleans up temporary files that may have been left behind by previous calls " +"to :func:`urlretrieve`." +msgstr "清理之前调用 :func:`urlretrieve` 时可能留下的临时文件。" + +#: ../../library/urllib.request.rst:1408 +msgid "" +"Base class for opening and reading URLs. Unless you need to support opening" +" objects using schemes other than :file:`http:`, :file:`ftp:`, or " +":file:`file:`, you probably want to use :class:`FancyURLopener`." +msgstr "" +"用于打开和读取 URL 的基类。 除非你需要支持使用 :file:`http:`, :file:`ftp:` 或 :file:`file:` " +"以外的方式来打开对象,那你也许可以使用 :class:`FancyURLopener`。" + +#: ../../library/urllib.request.rst:1412 +msgid "" +"By default, the :class:`URLopener` class sends a :mailheader:`User-Agent` " +"header of ``urllib/VVV``, where *VVV* is the :mod:`urllib` version number. " +"Applications can define their own :mailheader:`User-Agent` header by " +"subclassing :class:`URLopener` or :class:`FancyURLopener` and setting the " +"class attribute :attr:`version` to an appropriate string value in the " +"subclass definition." +msgstr "" +"在默认情况下,:class:`URLopener` 类会发送一个内容为 ``urllib/VVV`` 的 :mailheader:`User-" +"Agent` 标头,其中 *VVV* 是 :mod:`urllib` 的版本号。 应用程序可以通过子类化 :class:`URLopener` 或 " +":class:`FancyURLopener` 并在子类定义中将类属性 :attr:`version` 设为适当的字符串值来定义自己的 " +":mailheader:`User-Agent` 标头。" + +#: ../../library/urllib.request.rst:1418 +msgid "" +"The optional *proxies* parameter should be a dictionary mapping scheme names" +" to proxy URLs, where an empty dictionary turns proxies off completely. Its" +" default value is ``None``, in which case environmental proxy settings will " +"be used if present, as discussed in the definition of :func:`urlopen`, " +"above." +msgstr "" +"可选的 *proxies* 形参应当是一个将方式名称映射到代理 URL 的字典,如为空字典则会完全关闭代理。 它的默认值为 " +"``None``,在这种情况下如果存在环境代理设置则将使用它,正如上文 :func:`urlopen` 的定义中所描述的。" + +#: ../../library/urllib.request.rst:1423 +msgid "" +"Additional keyword parameters, collected in *x509*, may be used for " +"authentication of the client when using the :file:`https:` scheme. The " +"keywords *key_file* and *cert_file* are supported to provide an SSL key and" +" certificate; both are needed to support client authentication." +msgstr "" +"一些归属于 *x509* 的额外关键字形参可在使用 :file:`https:` 方式时被用于客户端的验证。 支持通过关键字 *key_file* 和 " +"*cert_file* 来提供 SSL 密钥和证书;对客户端验证的支持需要提供这两个形参。" + +#: ../../library/urllib.request.rst:1428 +msgid "" +":class:`URLopener` objects will raise an :exc:`OSError` exception if the " +"server returns an error code." +msgstr "如果服务器返回错误代码则 :class:`URLopener` 对象将引发 :exc:`OSError` 异常。" + +#: ../../library/urllib.request.rst:1433 +msgid "" +"Open *fullurl* using the appropriate protocol. This method sets up cache " +"and proxy information, then calls the appropriate open method with its input" +" arguments. If the scheme is not recognized, :meth:`open_unknown` is " +"called. The *data* argument has the same meaning as the *data* argument of " +":func:`urlopen`." +msgstr "" +"使用适当的协议打开 *fullurl*。 此方法会设置缓存和代理信息,然后调用适当的打开方法并附带其输入参数。 如果方式无法被识别,则会调用 " +":meth:`open_unknown`。 *data* 参数的含义与 :func:`urlopen` 中的 *data* 参数相同。" + +#: ../../library/urllib.request.rst:1439 +msgid "This method always quotes *fullurl* using :func:`~urllib.parse.quote`." +msgstr "此方法总是会使用 :func:`~urllib.parse.quote` 来对 *fullurl* 进行转码。" + +#: ../../library/urllib.request.rst:1443 +msgid "Overridable interface to open unknown URL types." +msgstr "用于打开未知 URL 类型的可重载接口。" + +#: ../../library/urllib.request.rst:1448 +msgid "" +"Retrieves the contents of *url* and places it in *filename*. The return " +"value is a tuple consisting of a local filename and either an " +":class:`email.message.Message` object containing the response headers (for " +"remote URLs) or ``None`` (for local URLs). The caller must then open and " +"read the contents of *filename*. If *filename* is not given and the URL " +"refers to a local file, the input filename is returned. If the URL is non-" +"local and *filename* is not given, the filename is the output of " +":func:`tempfile.mktemp` with a suffix that matches the suffix of the last " +"path component of the input URL. If *reporthook* is given, it must be a " +"function accepting three numeric parameters: A chunk number, the maximum " +"size chunks are read in and the total size of the download (-1 if unknown)." +" It will be called once at the start and after each chunk of data is read " +"from the network. *reporthook* is ignored for local URLs." +msgstr "" +"提取 *url* 的内容并将其存放到 *filename* 中。 返回值为元组,由一个本地文件名和一个包含响应标头 (对于远程 URL) 的 " +":class:`email.message.Message` 对象或者 ``None`` (对于本地 URL)。 之后调用方必须打开并读取 " +"*filename* 的内容。 如果 *filename* 未给出并且 URL 指向一个本地文件,则会返回输入文件名。 如果 URL 非本地并且 " +"*filename* 未给出,则文件名为带有与输入 URL 的路径末尾部分后缀相匹配的后缀的 :func:`tempfile.mktemp` 的输出。 " +"如果给出了 *reporthook*,它必须为接受三个数字形参的函数:数据分块编号、读入分块的最大数据量和下载的总数据量 (未知则为 -1)。 " +"它将在开始时和从网络读取每个数据分块之后被调用。 对于本地 URL *reporthook* 会被忽略。" + +#: ../../library/urllib.request.rst:1461 +msgid "" +"If the *url* uses the :file:`http:` scheme identifier, the optional *data* " +"argument may be given to specify a ``POST`` request (normally the request " +"type is ``GET``). The *data* argument must in standard " +":mimetype:`application/x-www-form-urlencoded` format; see the " +":func:`urllib.parse.urlencode` function." +msgstr "" +"如果 *url* 使用 :file:`http:` 方式的标识符,则可能给出可选的 *data* 参数来指定一个 ``POST`` 请求 " +"(通常的请求类型为 ``GET``)。 *data* 参数必须为标准的 :mimetype:`application/x-www-form-" +"urlencoded` 格式 ;参见 :func:`urllib.parse.urlencode` 函数。" + +#: ../../library/urllib.request.rst:1470 +msgid "" +"Variable that specifies the user agent of the opener object. To get " +":mod:`urllib` to tell servers that it is a particular user agent, set this " +"in a subclass as a class variable or in the constructor before calling the " +"base constructor." +msgstr "" +"指明打开器对象的用户代理名称的变量。 以便让 :mod:`urllib` " +"告诉服务器它是某个特定的用户代理,请在子类中将其作为类变量来设置或是在调用基类构造器之前在构造器中设置。" + +#: ../../library/urllib.request.rst:1480 +msgid "" +":class:`FancyURLopener` subclasses :class:`URLopener` providing default " +"handling for the following HTTP response codes: 301, 302, 303, 307 and 401." +" For the 30x response codes listed above, the :mailheader:`Location` header" +" is used to fetch the actual URL. For 401 response codes (authentication " +"required), basic HTTP authentication is performed. For the 30x response " +"codes, recursion is bounded by the value of the *maxtries* attribute, which " +"defaults to 10." +msgstr "" +":class:`FancyURLopener` 子类化了 :class:`URLopener` 以提供对以下 HTTP 响应代码的默认处理: 301, " +"302, 303, 307 和 401。 对于上述的 30x 响应代码,会使用 :mailheader:`Location` 标头来获取实际 URL。 " +"对于 401 响应代码 (authentication required),则会执行基本 HTTP 验证。 对于 30x 响应代码,递归层数会受 " +"*maxtries* 属性值的限制,该值默认为 10。" + +#: ../../library/urllib.request.rst:1487 +msgid "" +"For all other response codes, the method :meth:`http_error_default` is " +"called which you can override in subclasses to handle the error " +"appropriately." +msgstr "对于所有其他响应代码,会调用 :meth:`http_error_default` 方法,你可以在子类中重写此方法来正确地处理错误。" + +#: ../../library/urllib.request.rst:1492 +msgid "" +"According to the letter of :rfc:`2616`, 301 and 302 responses to POST " +"requests must not be automatically redirected without confirmation by the " +"user. In reality, browsers do allow automatic redirection of these " +"responses, changing the POST to a GET, and :mod:`urllib` reproduces this " +"behaviour." +msgstr "" +"根据 :rfc:`2616` 的说明,对 POST 请求的 301 和 302 响应不可在未经用户确认的情况下自动进行重定向。 " +"在现实情况下,浏览器确实允许自动重定义这些响应,将 POST 更改为 GET,于是 :mod:`urllib` 就会复现这种行为。" + +#: ../../library/urllib.request.rst:1497 +msgid "" +"The parameters to the constructor are the same as those for " +":class:`URLopener`." +msgstr "传给此构造器的形参与 :class:`URLopener` 的相同。" + +#: ../../library/urllib.request.rst:1501 +msgid "" +"When performing basic authentication, a :class:`FancyURLopener` instance " +"calls its :meth:`prompt_user_passwd` method. The default implementation " +"asks the users for the required information on the controlling terminal. A " +"subclass may override this method to support more appropriate behavior if " +"needed." +msgstr "" +"当执行基本验证时,:class:`FancyURLopener` 实例会调用其 :meth:`prompt_user_passwd` 方法。 " +"默认的实现将向用户询问控制终端所要求的信息。 如有必要子类可以重写此方法来支持更适当的行为。" + +#: ../../library/urllib.request.rst:1506 +msgid "" +"The :class:`FancyURLopener` class offers one additional method that should " +"be overloaded to provide the appropriate behavior:" +msgstr ":class:`FancyURLopener` 类附带了一个额外方法,它应当被重载以提供适当的行为:" + +#: ../../library/urllib.request.rst:1511 +msgid "" +"Return information needed to authenticate the user at the given host in the " +"specified security realm. The return value should be a tuple, ``(user, " +"password)``, which can be used for basic authentication." +msgstr "" +"返回指定的安全体系下在给定的主机上验证用户所需的信息。 返回的值应当是一个元组 ``(user, password)``,它可被用于基本验证。" + +#: ../../library/urllib.request.rst:1515 +msgid "" +"The implementation prompts for this information on the terminal; an " +"application should override this method to use an appropriate interaction " +"model in the local environment." +msgstr "该实现会在终端上提示此信息;应用程序应当重写此方法以使用本地环境下适当的交互模型。" + +#: ../../library/urllib.request.rst:1521 +msgid ":mod:`urllib.request` Restrictions" +msgstr ":mod:`urllib.request` 的限制" + +#: ../../library/urllib.request.rst:1527 +msgid "" +"Currently, only the following protocols are supported: HTTP (versions 0.9 " +"and 1.0), FTP, local files, and data URLs." +msgstr "目前,仅支持下列协议: HTTP (0.9 和 1.0 版), FTP, 本地文件, 以及数据 URL。" + +#: ../../library/urllib.request.rst:1530 +msgid "Added support for data URLs." +msgstr "增加了对数据URL 的支持。" + +#: ../../library/urllib.request.rst:1532 +msgid "" +"The caching feature of :func:`urlretrieve` has been disabled until someone " +"finds the time to hack proper processing of Expiration time headers." +msgstr ":func:`urlretrieve` 的缓存特性已被禁用,等待有人有时间去正确地解决过期时间标头的处理问题。" + +#: ../../library/urllib.request.rst:1535 +msgid "" +"There should be a function to query whether a particular URL is in the " +"cache." +msgstr "应当有一个函数来查询特定 URL 是否在缓存中。" + +#: ../../library/urllib.request.rst:1537 +msgid "" +"For backward compatibility, if a URL appears to point to a local file but " +"the file can't be opened, the URL is re-interpreted using the FTP protocol." +" This can sometimes cause confusing error messages." +msgstr "" +"为了保持向下兼容性,如果某个 URL 看起来是指向本地文件但该文件无法被打开,则该 URL 会使用 FTP 协议来重新解读。 " +"这有时可能会导致令人迷惑的错误消息。" + +#: ../../library/urllib.request.rst:1541 +msgid "" +"The :func:`urlopen` and :func:`urlretrieve` functions can cause arbitrarily " +"long delays while waiting for a network connection to be set up. This means" +" that it is difficult to build an interactive Web client using these " +"functions without using threads." +msgstr "" +":func:`urlopen` 和 :func:`urlretrieve` " +"方法在等待网络连接建立时会导致任意长的延迟。这意味着在不使用线程的情况下,搭建一个可交互的网络客户端是非常困难的。" + +#: ../../library/urllib.request.rst:1550 +msgid "" +"The data returned by :func:`urlopen` or :func:`urlretrieve` is the raw data " +"returned by the server. This may be binary data (such as an image), plain " +"text or (for example) HTML. The HTTP protocol provides type information in " +"the reply header, which can be inspected by looking at the " +":mailheader:`Content-Type` header. If the returned data is HTML, you can " +"use the module :mod:`html.parser` to parse it." +msgstr "" +"由 :func:`urlopen` 或 :func:`urlretrieve` 返回的数据就是服务器所返回的原始数据。 " +"这可以是二进制数据(如图片)、纯文本或 HTML 代码等。 HTTP 协议在响应标头中提供了类型信息,这可以通过读取 " +":mailheader:`Content-Type` 标头来查看。 如果返回的数据是 HTML,你可以使用 :mod:`html.parser` " +"模块来解析它。" + +#: ../../library/urllib.request.rst:1559 +msgid "" +"The code handling the FTP protocol cannot differentiate between a file and a" +" directory. This can lead to unexpected behavior when attempting to read a " +"URL that points to a file that is not accessible. If the URL ends in a " +"``/``, it is assumed to refer to a directory and will be handled " +"accordingly. But if an attempt to read a file leads to a 550 error (meaning" +" the URL cannot be found or is not accessible, often for permission " +"reasons), then the path is treated as a directory in order to handle the " +"case when a directory is specified by a URL but the trailing ``/`` has been " +"left off. This can cause misleading results when you try to fetch a file " +"whose read permissions make it inaccessible; the FTP code will try to read " +"it, fail with a 550 error, and then perform a directory listing for the " +"unreadable file. If fine-grained control is needed, consider using the " +":mod:`ftplib` module, subclassing :class:`FancyURLopener`, or changing " +"*_urlopener* to meet your needs." +msgstr "" +"处理 FTP 协议的代码无法区分文件和目录。 这在尝试读取指向不可访问的 URL 时可能导致意外的行为。 如果 URL 以一个 ``/`` " +"结束,它会被认为指向一个目录并将作相应的处理。 但是如果读取一个文件的尝试导致了 550 错误(表示 URL " +"无法找到或不可访问,这常常是由于权限原因),则该路径会被视为一个目录以便处理 URL 是指定一个目录但略去了末尾 ``/`` 的情况。 " +"这在你尝试获取一个因其设置了读取权限因而无法访问的文件时会造成误导性的结果;FTP 代码将尝试读取它,因 550 " +"错误而失败,然后又为这个不可读取的文件执行目录列表操作。 如果需要细粒度的控制,请考虑使用 :mod:`ftplib` 模块,子类化 " +":class:`FancyURLopener`,或是修改 *_urlopener* 来满足你的需求。" + +#: ../../library/urllib.request.rst:1576 +msgid ":mod:`urllib.response` --- Response classes used by urllib" +msgstr ":mod:`urllib.response` --- urllib 使用的 Response 类" + +#: ../../library/urllib.request.rst:1581 +msgid "" +"The :mod:`urllib.response` module defines functions and classes which define" +" a minimal file-like interface, including ``read()`` and ``readline()``. " +"Functions defined by this module are used internally by the " +":mod:`urllib.request` module. The typical response object is a " +":class:`urllib.response.addinfourl` instance:" +msgstr "" +":mod:`urllib.response` 模块定义了一些函数和提供最小化文件类接口包括 ``read()`` 和 ``readline()`` " +"等的类。 此模块定义的函数会由 :mod:`urllib.request` 模块在内部使用。 典型的响应对象是一个 " +":class:`urllib.response.addinfourl` 实例:" + +#: ../../library/urllib.request.rst:1590 +msgid "" +"URL of the resource retrieved, commonly used to determine if a redirect was " +"followed." +msgstr "已读取资源的 URL,通常用于确定是否进行了重定向。" + +#: ../../library/urllib.request.rst:1594 +msgid "" +"Returns the headers of the response in the form of an " +":class:`~email.message.EmailMessage` instance." +msgstr "以 :class:`~email.message.EmailMessage` 实例的形式返回响应的标头。" + +#: ../../library/urllib.request.rst:1600 +msgid "Status code returned by server." +msgstr "由服务器返回的状态码。" + +#: ../../library/urllib.request.rst:1604 +msgid "Deprecated in favor of :attr:`~addinfourl.url`." +msgstr "已弃用,建议改用 :attr:`~addinfourl.url`。" + +#: ../../library/urllib.request.rst:1609 +msgid "Deprecated in favor of :attr:`~addinfourl.headers`." +msgstr "已弃用,建议改用 :attr:`~addinfourl.headers`。" + +#: ../../library/urllib.request.rst:1614 ../../library/urllib.request.rst:1619 +msgid "Deprecated in favor of :attr:`~addinfourl.status`." +msgstr "已弃用,建议改用 :attr:`~addinfourl.status`。" diff --git a/library/urllib.robotparser.po b/library/urllib.robotparser.po new file mode 100644 index 000000000..cfa9a0b6f --- /dev/null +++ b/library/urllib.robotparser.po @@ -0,0 +1,117 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) 2001-2022, Python Software Foundation +# This file is distributed under the same license as the Python package. +# FIRST AUTHOR , YEAR. +# +# Translators: +# 汪心禾 , 2019 +# Freesand Leo , 2020 +# +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: Python 3.9\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2022-11-04 14:34+0000\n" +"PO-Revision-Date: 2017-02-16 23:34+0000\n" +"Last-Translator: Freesand Leo , 2020\n" +"Language-Team: Chinese (China) (https://www.transifex.com/python-doc/teams/5390/zh_CN/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: zh_CN\n" +"Plural-Forms: nplurals=1; plural=0;\n" + +#: ../../library/urllib.robotparser.rst:2 +msgid ":mod:`urllib.robotparser` --- Parser for robots.txt" +msgstr ":mod:`urllib.robotparser` --- robots.txt 语法分析程序" + +#: ../../library/urllib.robotparser.rst:10 +msgid "**Source code:** :source:`Lib/urllib/robotparser.py`" +msgstr "**源代码:** :source:`Lib/urllib/robotparser.py`" + +#: ../../library/urllib.robotparser.rst:20 +msgid "" +"This module provides a single class, :class:`RobotFileParser`, which answers" +" questions about whether or not a particular user agent can fetch a URL on " +"the Web site that published the :file:`robots.txt` file. For more details " +"on the structure of :file:`robots.txt` files, see " +"http://www.robotstxt.org/orig.html." +msgstr "" +"此模块提供了一个单独的类 :class:`RobotFileParser`,它可以回答关于某个特定用户代理是否能在 Web 站点获取发布 " +":file:`robots.txt` 文件的 URL 的问题。 有关 :file:`robots.txt` 文件结构的更多细节请参阅 " +"http://www.robotstxt.org/orig.html。" + +#: ../../library/urllib.robotparser.rst:28 +msgid "" +"This class provides methods to read, parse and answer questions about the " +":file:`robots.txt` file at *url*." +msgstr "这个类提供了一些可以读取、解析和回答关于 *url* 上的 :file:`robots.txt` 文件的问题的方法。" + +#: ../../library/urllib.robotparser.rst:33 +msgid "Sets the URL referring to a :file:`robots.txt` file." +msgstr "设置指向 :file:`robots.txt` 文件的 URL。" + +#: ../../library/urllib.robotparser.rst:37 +msgid "Reads the :file:`robots.txt` URL and feeds it to the parser." +msgstr "读取 :file:`robots.txt` URL 并将其输入解析器。" + +#: ../../library/urllib.robotparser.rst:41 +msgid "Parses the lines argument." +msgstr "解析行参数。" + +#: ../../library/urllib.robotparser.rst:45 +msgid "" +"Returns ``True`` if the *useragent* is allowed to fetch the *url* according " +"to the rules contained in the parsed :file:`robots.txt` file." +msgstr "" +"如果允许 *useragent* 按照被解析 :file:`robots.txt` 文件中的规则来获取 *url* 则返回 ``True``。" + +#: ../../library/urllib.robotparser.rst:51 +msgid "" +"Returns the time the ``robots.txt`` file was last fetched. This is useful " +"for long-running web spiders that need to check for new ``robots.txt`` files" +" periodically." +msgstr "" +"返回最近一次获取 ``robots.txt`` 文件的时间。 这适用于需要定期检查 ``robots.txt`` 文件更新情况的长时间运行的网页爬虫。" + +#: ../../library/urllib.robotparser.rst:57 +msgid "" +"Sets the time the ``robots.txt`` file was last fetched to the current time." +msgstr "将最近一次获取 ``robots.txt`` 文件的时间设置为当前时间。" + +#: ../../library/urllib.robotparser.rst:62 +msgid "" +"Returns the value of the ``Crawl-delay`` parameter from ``robots.txt`` for " +"the *useragent* in question. If there is no such parameter or it doesn't " +"apply to the *useragent* specified or the ``robots.txt`` entry for this " +"parameter has invalid syntax, return ``None``." +msgstr "" +"为指定的 *useragent* 从 ``robots.txt`` 返回 ``Crawl-delay`` 形参。 如果此形参不存在或不适用于指定的 " +"*useragent* 或者此形参的 ``robots.txt`` 条目存在语法错误,则返回 ``None``。" + +#: ../../library/urllib.robotparser.rst:71 +msgid "" +"Returns the contents of the ``Request-rate`` parameter from ``robots.txt`` " +"as a :term:`named tuple` ``RequestRate(requests, seconds)``. If there is no " +"such parameter or it doesn't apply to the *useragent* specified or the " +"``robots.txt`` entry for this parameter has invalid syntax, return ``None``." +msgstr "" +"以 :term:`named tuple` ``RequestRate(requests, seconds)`` 的形式从 ``robots.txt``" +" 返回 ``Request-rate`` 形参的内容。 如果此形参不存在或不适用于指定的 *useragent* 或者此形参的 " +"``robots.txt`` 条目存在语法错误,则返回 ``None``。" + +#: ../../library/urllib.robotparser.rst:81 +msgid "" +"Returns the contents of the ``Sitemap`` parameter from ``robots.txt`` in the" +" form of a :func:`list`. If there is no such parameter or the ``robots.txt``" +" entry for this parameter has invalid syntax, return ``None``." +msgstr "" +"以 :func:`list` 的形式从 ``robots.txt`` 返回 ``Sitemap`` 形参的内容。 如果此形参不存在或者此形参的 " +"``robots.txt`` 条目存在语法错误,则返回 ``None``。" + +#: ../../library/urllib.robotparser.rst:89 +msgid "" +"The following example demonstrates basic use of the :class:`RobotFileParser`" +" class::" +msgstr "下面的例子演示了 :class:`RobotFileParser` 类的基本用法::" diff --git a/library/uu.po b/library/uu.po new file mode 100644 index 000000000..8716010ee --- /dev/null +++ b/library/uu.po @@ -0,0 +1,122 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) 2001-2024, Python Software Foundation +# This file is distributed under the same license as the Python package. +# FIRST AUTHOR , YEAR. +# +# Translators: +# walkinrain , 2019 +# ppcfish , 2019 +# Freesand Leo , 2022 +# Rafael Fontenelle , 2024 +# +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: Python 3.9\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2024-02-16 21:12+0000\n" +"PO-Revision-Date: 2017-02-16 23:34+0000\n" +"Last-Translator: Rafael Fontenelle , 2024\n" +"Language-Team: Chinese (China) (https://app.transifex.com/python-doc/teams/5390/zh_CN/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: zh_CN\n" +"Plural-Forms: nplurals=1; plural=0;\n" + +#: ../../library/uu.rst:2 +msgid ":mod:`uu` --- Encode and decode uuencode files" +msgstr ":mod:`uu` --- 对 uuencode 文件进行编码与解码" + +#: ../../library/uu.rst:10 +msgid "**Source code:** :source:`Lib/uu.py`" +msgstr "**源代码:** :source:`Lib/uu.py`" + +#: ../../library/uu.rst:12 +msgid "" +"The :mod:`uu` module is deprecated (see :pep:`PEP 594 <594#uu-and-the-uu-" +"encoding>` for details). :mod:`base64` is a modern alternative." +msgstr "" +":mod:`uu` 模块已被弃用(请参阅 :pep:`PEP 594 <594#uu-and-the-uu-encoding>` 了解详情)。 " +":mod:`base64` 是一个更现代化的替代品。" + +#: ../../library/uu.rst:19 +msgid "" +"This module encodes and decodes files in uuencode format, allowing arbitrary" +" binary data to be transferred over ASCII-only connections. Wherever a file " +"argument is expected, the methods accept a file-like object. For backwards " +"compatibility, a string containing a pathname is also accepted, and the " +"corresponding file will be opened for reading and writing; the pathname " +"``'-'`` is understood to mean the standard input or output. However, this " +"interface is deprecated; it's better for the caller to open the file itself," +" and be sure that, when required, the mode is ``'rb'`` or ``'wb'`` on " +"Windows." +msgstr "" +"此模块使用 uuencode 格式来编码和解码文件,以便任意二进制数据可通过仅限 ASCII 码的连接进行传输。 " +"在任何要求文件参数的地方,这些方法都接受文件型对象。 为了保持向下兼容,也接受包含路径名称的字符串,并且将打开相应的文件进行读写;路径名称 " +"``'-'`` 被解读为标准输入或输出。 但是,此接口已被弃用;在 Windows 中调用者最好是自行打开文件,并在需要时确保模式为 ``'rb'`` " +"or ``'wb'``。" + +#: ../../library/uu.rst:32 +msgid "" +"This code was contributed by Lance Ellinghouse, and modified by Jack Jansen." +msgstr "此代码由 Lance Ellinghouse 贡献,并由 Jack Jansen 修改。" + +#: ../../library/uu.rst:34 +msgid "The :mod:`uu` module defines the following functions:" +msgstr ":mod:`uu` 模块定义了以下函数:" + +#: ../../library/uu.rst:39 +msgid "" +"Uuencode file *in_file* into file *out_file*. The uuencoded file will have " +"the header specifying *name* and *mode* as the defaults for the results of " +"decoding the file. The default defaults are taken from *in_file*, or ``'-'``" +" and ``0o666`` respectively. If *backtick* is true, zeros are represented " +"by ``'`'`` instead of spaces." +msgstr "" +"使用 uuencode 将 *in_file* 文件编码为 *out_file* 文件。 经过 uuencoded 编码的文件将具有指定 *name* " +"和 *mode* 作为解码该文件默认结果的标头。 默认值会相应地从 *in_file* 或 ``'-'`` 以及 ``0o666`` 中提取。 如果 " +"*backtick* 为真值,零会用 ``'`'`` 而不是空格来表示。" + +#: ../../library/uu.rst:45 +msgid "Added the *backtick* parameter." +msgstr "增加 *backtick* 形参。" + +#: ../../library/uu.rst:51 +msgid "" +"This call decodes uuencoded file *in_file* placing the result on file " +"*out_file*. If *out_file* is a pathname, *mode* is used to set the " +"permission bits if the file must be created. Defaults for *out_file* and " +"*mode* are taken from the uuencode header. However, if the file specified " +"in the header already exists, a :exc:`uu.Error` is raised." +msgstr "" +"调用此函数会解码 uuencod 编码的 *in_file* 文件并将结果放入 *out_file* 文件。 如果 *out_file* " +"是一个路径名称,*mode* 会在必须创建文件时用于设置权限位。 *out_file* 和 *mode* 的默认值会从 uuencode 标头中提取。 " +"但是,如果标头中指定的文件已存在,则会引发 :exc:`uu.Error`。" + +#: ../../library/uu.rst:57 +msgid "" +":func:`decode` may print a warning to standard error if the input was " +"produced by an incorrect uuencoder and Python could recover from that error." +" Setting *quiet* to a true value silences this warning." +msgstr "" +"如果输入由不正确的 uuencode 编码器生成,:func:`decode` 可能会打印一条警告到标准错误 ,这样 Python 可以从该错误中恢复。" +" 将 *quiet* 设为真值可以屏蔽此警告。" + +#: ../../library/uu.rst:64 +msgid "" +"Subclass of :exc:`Exception`, this can be raised by :func:`uu.decode` under " +"various situations, such as described above, but also including a badly " +"formatted header, or truncated input file." +msgstr "" +":exc:`Exception` 的子类,此异常可由 :func:`uu.decode` " +"在多种情况下引发,如上文所述,此外还包括格式错误的标头或被截断的输入文件等。" + +#: ../../library/uu.rst:71 +msgid "Module :mod:`binascii`" +msgstr "模块 :mod:`binascii`" + +#: ../../library/uu.rst:72 +msgid "" +"Support module containing ASCII-to-binary and binary-to-ASCII conversions." +msgstr "支持模块,包含ASCII到二进制和二进制到ASCII转换。" diff --git a/library/uuid.po b/library/uuid.po new file mode 100644 index 000000000..af9d06dfd --- /dev/null +++ b/library/uuid.po @@ -0,0 +1,366 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) 2001-2022, Python Software Foundation +# This file is distributed under the same license as the Python package. +# FIRST AUTHOR , YEAR. +# +# Translators: +# 操旭 , 2017 +# Menghua Xiao , 2018 +# ppcfish , 2019 +# meowmeowcat , 2021 +# Alpha Du , 2021 +# Freesand Leo , 2022 +# +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: Python 3.9\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2022-11-04 14:34+0000\n" +"PO-Revision-Date: 2017-02-16 23:34+0000\n" +"Last-Translator: Freesand Leo , 2022\n" +"Language-Team: Chinese (China) (https://www.transifex.com/python-doc/teams/5390/zh_CN/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: zh_CN\n" +"Plural-Forms: nplurals=1; plural=0;\n" + +#: ../../library/uuid.rst:2 +msgid ":mod:`uuid` --- UUID objects according to :rfc:`4122`" +msgstr ":mod:`uuid` --- :rfc:`4122` 定义的UUID对象" + +#: ../../library/uuid.rst:9 +msgid "**Source code:** :source:`Lib/uuid.py`" +msgstr "**Source code:** :source:`Lib/uuid.py`" + +#: ../../library/uuid.rst:13 +msgid "" +"This module provides immutable :class:`UUID` objects (the :class:`UUID` " +"class) and the functions :func:`uuid1`, :func:`uuid3`, :func:`uuid4`, " +":func:`uuid5` for generating version 1, 3, 4, and 5 UUIDs as specified in " +":rfc:`4122`." +msgstr "" +"这个模块提供了不可变的 :class:`UUID` 对象 (:class:`UUID` 类) 和 :func:`uuid1`, " +":func:`uuid3`, :func:`uuid4`, :func:`uuid5` 等函数用于生成 :rfc:`4122` 所定义的第 1, 3, " +"4 和 5 版 UUID。" + +#: ../../library/uuid.rst:17 +msgid "" +"If all you want is a unique ID, you should probably call :func:`uuid1` or " +":func:`uuid4`. Note that :func:`uuid1` may compromise privacy since it " +"creates a UUID containing the computer's network address. :func:`uuid4` " +"creates a random UUID." +msgstr "" +"如果你想要的只是一个唯一的ID,你可能应该调用 :func:`uuid1` 或 :func:`uuid4`。 注意 :func:`uuid1` " +"可能会损害隐私,因为它创建了一个包含计算机网络地址的UUID。 :func:`uuid4` 可以创建一个随机UUID。" + +#: ../../library/uuid.rst:22 +msgid "" +"Depending on support from the underlying platform, :func:`uuid1` may or may " +"not return a \"safe\" UUID. A safe UUID is one which is generated using " +"synchronization methods that ensure no two processes can obtain the same " +"UUID. All instances of :class:`UUID` have an :attr:`is_safe` attribute " +"which relays any information about the UUID's safety, using this " +"enumeration:" +msgstr "" +"根据底层平台的支持,:func:`uuid1` 可能会也可能不会返回一个 \"安全的\" UUID。 安全的 UUID " +"是使用同步方法生成的,确保没有两个进程可以获得相同的 UUID。 所有 :class:`UUID` 的实例都有一个 :attr:`is_safe` " +"属性,使用这个枚举来传递关于 UUID 安全的任何信息:" + +#: ../../library/uuid.rst:34 +msgid "The UUID was generated by the platform in a multiprocessing-safe way." +msgstr "该UUID是由平台以多进程安全的方式生成的。" + +#: ../../library/uuid.rst:38 +msgid "The UUID was not generated in a multiprocessing-safe way." +msgstr "UUID不是以多进程安全的方式生成的。" + +#: ../../library/uuid.rst:42 +msgid "" +"The platform does not provide information on whether the UUID was generated " +"safely or not." +msgstr "该平台不提供UUID是否安全生成的信息。" + +#: ../../library/uuid.rst:47 +msgid "" +"Create a UUID from either a string of 32 hexadecimal digits, a string of 16 " +"bytes in big-endian order as the *bytes* argument, a string of 16 bytes in " +"little-endian order as the *bytes_le* argument, a tuple of six integers " +"(32-bit *time_low*, 16-bit *time_mid*, 16-bit *time_hi_version*, 8-bit " +"*clock_seq_hi_variant*, 8-bit *clock_seq_low*, 48-bit *node*) as the " +"*fields* argument, or a single 128-bit integer as the *int* argument. When a" +" string of hex digits is given, curly braces, hyphens, and a URN prefix are " +"all optional. For example, these expressions all yield the same UUID::" +msgstr "" +"用一串32位十六进制数字、一串大端序16个字节作为*bytes*参数、一串16个小端序字节作为*bytes_le*参数、一个由六个整数组成的元组(32位*time_low*,16位*time_mid*,16位*time_hi_version*,8位*clock_seq_hi_variant*,8位*clock_seq_low*,48位*node*)作为*fields*参数,或者一个128位整数作为*int*参数创建一个UUID。当给出一串十六进制数字时,大括号、连字符和URN前缀都是可选的。" +" 例如,这些表达式都产生相同的UUID::" + +#: ../../library/uuid.rst:66 +msgid "" +"Exactly one of *hex*, *bytes*, *bytes_le*, *fields*, or *int* must be given." +" The *version* argument is optional; if given, the resulting UUID will have " +"its variant and version number set according to :rfc:`4122`, overriding bits" +" in the given *hex*, *bytes*, *bytes_le*, *fields*, or *int*." +msgstr "" +"必须给出 *hex*、*bytes*、*bytes_le*、*fields* 或 *int* 中的唯一一个。 *version* " +"参数是可选的;如果给定,产生的UUID将根据 :rfc:`4122` 设置其变体和版本号,覆盖给定的 " +"*hex*、*bytes*、*bytes_le*、*fields* 或 *int* 中的位。" + +#: ../../library/uuid.rst:71 +msgid "" +"Comparison of UUID objects are made by way of comparing their " +":attr:`UUID.int` attributes. Comparison with a non-UUID object raises a " +":exc:`TypeError`." +msgstr "" +"UUID 对象的比较是通过比较它们的 :attr:`UUID.int` 属性进行的。 与非 UUID 对象的比较会引发 " +":exc:`TypeError`。" + +#: ../../library/uuid.rst:75 +msgid "" +"``str(uuid)`` returns a string in the form " +"``12345678-1234-5678-1234-567812345678`` where the 32 hexadecimal digits " +"represent the UUID." +msgstr "" +"``str(uuid)`` 返回一个 ``12345678-1234-5678-1234-567812345678`` 形式的字符串,其中 32 " +"位十六进制数字代表 UUID。" + +#: ../../library/uuid.rst:79 +msgid ":class:`UUID` instances have these read-only attributes:" +msgstr ":class:`UUID` 实例有这些只读的属性:" + +#: ../../library/uuid.rst:83 +msgid "" +"The UUID as a 16-byte string (containing the six integer fields in big-" +"endian byte order)." +msgstr "UUID 是一个 16 字节的字符串(包含 6 个整数字段,大端字节顺序)。" + +#: ../../library/uuid.rst:89 +msgid "" +"The UUID as a 16-byte string (with *time_low*, *time_mid*, and " +"*time_hi_version* in little-endian byte order)." +msgstr "" +"UUID 是一个 16 字节的字符串(其中 *time_low*、*time_mid* 和 *time_hi_version* 为小端字节顺序)。" + +#: ../../library/uuid.rst:95 +msgid "" +"A tuple of the six integer fields of the UUID, which are also available as " +"six individual attributes and two derived attributes:" +msgstr "以元组形式存放的UUID的6个整数域,有六个单独的属性和两个派生属性:" + +#: ../../library/uuid.rst:99 +msgid "Field" +msgstr "域" + +#: ../../library/uuid.rst:99 +msgid "Meaning" +msgstr "意义" + +#: ../../library/uuid.rst:101 +msgid ":attr:`time_low`" +msgstr ":attr:`time_low`" + +#: ../../library/uuid.rst:101 +msgid "the first 32 bits of the UUID" +msgstr "UUID的前32位" + +#: ../../library/uuid.rst:103 +msgid ":attr:`time_mid`" +msgstr ":attr:`time_mid`" + +#: ../../library/uuid.rst:103 ../../library/uuid.rst:105 +msgid "the next 16 bits of the UUID" +msgstr "接前一域的16位" + +#: ../../library/uuid.rst:105 +msgid ":attr:`time_hi_version`" +msgstr ":attr:`time_hi_version`" + +#: ../../library/uuid.rst:107 +msgid ":attr:`clock_seq_hi_variant`" +msgstr ":attr:`clock_seq_hi_variant`" + +#: ../../library/uuid.rst:107 ../../library/uuid.rst:109 +msgid "the next 8 bits of the UUID" +msgstr "接前一域的8位" + +#: ../../library/uuid.rst:109 +msgid ":attr:`clock_seq_low`" +msgstr ":attr:`clock_seq_low`" + +#: ../../library/uuid.rst:111 +msgid ":attr:`node`" +msgstr ":attr:`node`" + +#: ../../library/uuid.rst:111 +msgid "the last 48 bits of the UUID" +msgstr "UUID的最后48位" + +#: ../../library/uuid.rst:113 +msgid ":attr:`time`" +msgstr ":attr:`time`" + +#: ../../library/uuid.rst:113 +msgid "the 60-bit timestamp" +msgstr "UUID的总长60位的时间戳" + +#: ../../library/uuid.rst:115 +msgid ":attr:`clock_seq`" +msgstr ":attr:`clock_seq`" + +#: ../../library/uuid.rst:115 +msgid "the 14-bit sequence number" +msgstr "14位的序列号" + +#: ../../library/uuid.rst:121 +msgid "The UUID as a 32-character lowercase hexadecimal string." +msgstr "UUID 是一个 32 字符的小写十六进制数码字符串。" + +#: ../../library/uuid.rst:126 +msgid "The UUID as a 128-bit integer." +msgstr "UUID是一个128位的整数。" + +#: ../../library/uuid.rst:131 +msgid "The UUID as a URN as specified in :rfc:`4122`." +msgstr "在 :rfc:`4122` 中定义的 URN 形式的 UUID。" + +#: ../../library/uuid.rst:136 +msgid "" +"The UUID variant, which determines the internal layout of the UUID. This " +"will be one of the constants :const:`RESERVED_NCS`, :const:`RFC_4122`, " +":const:`RESERVED_MICROSOFT`, or :const:`RESERVED_FUTURE`." +msgstr "" +"UUID 的变体,它决定了 UUID 的内部布局。 这将是 :const:`RESERVED_NCS`, :const:`RFC_4122`, " +":const:`RESERVED_MICROSOFT` 或 :const:`RESERVED_FUTURE` 中的一个。" + +#: ../../library/uuid.rst:143 +msgid "" +"The UUID version number (1 through 5, meaningful only when the variant is " +":const:`RFC_4122`)." +msgstr "UUID 版本号(1 到 5,只有当变体为 :const:`RFC_4122` 时才有意义)。" + +#: ../../library/uuid.rst:148 +msgid "" +"An enumeration of :class:`SafeUUID` which indicates whether the platform " +"generated the UUID in a multiprocessing-safe way." +msgstr "一个 :class:`SafeUUID` 的枚举,表示平台是否以多进程安全的方式生成 UUID。" + +#: ../../library/uuid.rst:153 +msgid "The :mod:`uuid` module defines the following functions:" +msgstr ":mod:`uuid` 模块定义了以下函数:" + +#: ../../library/uuid.rst:158 +msgid "" +"Get the hardware address as a 48-bit positive integer. The first time this " +"runs, it may launch a separate program, which could be quite slow. If all " +"attempts to obtain the hardware address fail, we choose a random 48-bit " +"number with the multicast bit (least significant bit of the first octet) set" +" to 1 as recommended in :rfc:`4122`. \"Hardware address\" means the MAC " +"address of a network interface. On a machine with multiple network " +"interfaces, universally administered MAC addresses (i.e. where the second " +"least significant bit of the first octet is *unset*) will be preferred over " +"locally administered MAC addresses, but with no other ordering guarantees." +msgstr "" +"获取 48 位正整数形式的硬件地址。 第一次运行时,它可能会启动一个单独的程序,这可能会相当慢。 如果所有获取硬件地址的尝试都失败了,我们会按照 " +":rfc:`4122` 中的建议,选择一个随机的 48 位数字,其多播位 (第一个八进制数的最小有效位) 设置为 1。 “硬件地址”是指一个网络接口的 " +"MAC 地址。 在一台有多个网络接口的机器上,普遍管理的 MAC 地址 (即第一个八位数的第二个最小有效位是 *未设置的*) 将比本地管理的 MAC " +"地址优先,但没有其他排序保证。" + +#: ../../library/uuid.rst:168 +msgid "" +"Universally administered MAC addresses are preferred over locally " +"administered MAC addresses, since the former are guaranteed to be globally " +"unique, while the latter are not." +msgstr "普遍管理的MAC地址优于本地管理的MAC地址,因为前者保证是全球唯一的,而后者则不是。" + +#: ../../library/uuid.rst:178 +msgid "" +"Generate a UUID from a host ID, sequence number, and the current time. If " +"*node* is not given, :func:`getnode` is used to obtain the hardware address." +" If *clock_seq* is given, it is used as the sequence number; otherwise a " +"random 14-bit sequence number is chosen." +msgstr "" +"根据主机 ID、序列号和当前时间生成一个 UUID。 如果没有给出 *node*,则使用 :func:`getnode` 来获取硬件地址。 如果给出了 " +"*clock_seq*,它将被用作序列号;否则将选择一个随机的 14 比特位序列号。" + +#: ../../library/uuid.rst:188 +msgid "" +"Generate a UUID based on the MD5 hash of a namespace identifier (which is a " +"UUID) and a name (which is a string)." +msgstr "根据命名空间标识符(这是一个UUID)和名称(这是一个字符串)的MD5哈希值,生成一个UUID。" + +#: ../../library/uuid.rst:196 +msgid "Generate a random UUID." +msgstr "生成一个随机的UUID。" + +#: ../../library/uuid.rst:203 +msgid "" +"Generate a UUID based on the SHA-1 hash of a namespace identifier (which is " +"a UUID) and a name (which is a string)." +msgstr "根据命名空间标识符(这是一个UUID)和名称(这是一个字符串)的SHA-1哈希值生成一个UUID。" + +#: ../../library/uuid.rst:208 +msgid "" +"The :mod:`uuid` module defines the following namespace identifiers for use " +"with :func:`uuid3` or :func:`uuid5`." +msgstr ":mod:`uuid` 模块定义了以下命名空间标识符,供 :func:`uuid3` 或 :func:`uuid5` 使用。" + +#: ../../library/uuid.rst:214 +msgid "" +"When this namespace is specified, the *name* string is a fully-qualified " +"domain name." +msgstr "当指定这个命名空间时,*name* 字符串是一个完全限定的域名。" + +#: ../../library/uuid.rst:220 +msgid "When this namespace is specified, the *name* string is a URL." +msgstr "当指定这个命名空间时,*name* 字符串是一个 URL。" + +#: ../../library/uuid.rst:225 +msgid "When this namespace is specified, the *name* string is an ISO OID." +msgstr "当指定这个命名空间时,*name* 字符串是一个 ISO OID。" + +#: ../../library/uuid.rst:230 +msgid "" +"When this namespace is specified, the *name* string is an X.500 DN in DER or" +" a text output format." +msgstr "当指定这个命名空间时,*name* 字符串是 DER 或文本输出格式的 X.500 DN。" + +#: ../../library/uuid.rst:233 +msgid "" +"The :mod:`uuid` module defines the following constants for the possible " +"values of the :attr:`variant` attribute:" +msgstr ":mod:`uuid` 模块为 :attr:`variant` 属性的可能值定义了以下常量:" + +#: ../../library/uuid.rst:239 +msgid "Reserved for NCS compatibility." +msgstr "为NCS兼容性保留。" + +#: ../../library/uuid.rst:244 +msgid "Specifies the UUID layout given in :rfc:`4122`." +msgstr "指定 :rfc:`4122` 中给出的 UUID 布局。" + +#: ../../library/uuid.rst:249 +msgid "Reserved for Microsoft compatibility." +msgstr "为微软的兼容性保留。" + +#: ../../library/uuid.rst:254 +msgid "Reserved for future definition." +msgstr "保留给未来的定义。" + +#: ../../library/uuid.rst:260 +msgid ":rfc:`4122` - A Universally Unique IDentifier (UUID) URN Namespace" +msgstr ":rfc:`4122` - 通用唯一标识符(UUID)URN命名空间" + +#: ../../library/uuid.rst:260 +msgid "" +"This specification defines a Uniform Resource Name namespace for UUIDs, the " +"internal format of UUIDs, and methods of generating UUIDs." +msgstr "本规范定义了UUID的统一资源名称空间,UUID的内部格式,以及生成UUID的方法。" + +#: ../../library/uuid.rst:267 +msgid "Example" +msgstr "示例" + +#: ../../library/uuid.rst:269 +msgid "Here are some examples of typical usage of the :mod:`uuid` module::" +msgstr "下面是一些 :mod:`uuid` 模块的典型使用例子::" diff --git a/library/venv.po b/library/venv.po new file mode 100644 index 000000000..e3b307d5f --- /dev/null +++ b/library/venv.po @@ -0,0 +1,658 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) 2001-2022, Python Software Foundation +# This file is distributed under the same license as the Python package. +# FIRST AUTHOR , YEAR. +# +# Translators: +# ww song , 2018 +# Alpha Du , 2019 +# Trim21 , 2019 +# Arisaka97 , 2020 +# Freesand Leo , 2022 +# +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: Python 3.9\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2022-11-04 14:34+0000\n" +"PO-Revision-Date: 2017-02-16 23:34+0000\n" +"Last-Translator: Freesand Leo , 2022\n" +"Language-Team: Chinese (China) (https://www.transifex.com/python-doc/teams/5390/zh_CN/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: zh_CN\n" +"Plural-Forms: nplurals=1; plural=0;\n" + +#: ../../library/venv.rst:2 +msgid ":mod:`venv` --- Creation of virtual environments" +msgstr ":mod:`venv` --- 创建虚拟环境" + +#: ../../library/venv.rst:12 +msgid "**Source code:** :source:`Lib/venv/`" +msgstr "**源码:** :source:`Lib/venv/`" + +#: ../../library/venv.rst:18 +msgid "" +"The :mod:`venv` module provides support for creating lightweight \"virtual " +"environments\" with their own site directories, optionally isolated from " +"system site directories. Each virtual environment has its own Python binary" +" (which matches the version of the binary that was used to create this " +"environment) and can have its own independent set of installed Python " +"packages in its site directories." +msgstr "" +":mod:`venv` 模块支持使用自己的站点目录创建轻量级“虚拟环境”,可选择与系统站点目录隔离。每个虚拟环境都有自己的 Python " +"二进制文件(与用于创建此环境的二进制文件的版本相匹配),并且可以在其站点目录中拥有自己独立的已安装 Python 软件包集。" + +#: ../../library/venv.rst:25 +msgid "See :pep:`405` for more information about Python virtual environments." +msgstr "有关 Python 虚拟环境的更多信息,请参阅 :pep:`405` 。" + +#: ../../library/venv.rst:29 +msgid "" +"`Python Packaging User Guide: Creating and using virtual environments " +"`__" +msgstr "" +"`Python 打包用户指南:创建和使用虚拟环境 `__" + +#: ../../library/venv.rst:34 +msgid "Creating virtual environments" +msgstr "创建虚拟环境" + +#: ../../using/venv-create.inc:1 +msgid "" +"Creation of :ref:`virtual environments ` is done by executing the " +"command ``venv``::" +msgstr "通过执行 ``venv`` 指令来创建一个 :ref:`虚拟环境 `::" + +#: ../../using/venv-create.inc:6 +msgid "" +"Running this command creates the target directory (creating any parent " +"directories that don't exist already) and places a ``pyvenv.cfg`` file in it" +" with a ``home`` key pointing to the Python installation from which the " +"command was run (a common name for the target directory is ``.venv``). It " +"also creates a ``bin`` (or ``Scripts`` on Windows) subdirectory containing a" +" copy/symlink of the Python binary/binaries (as appropriate for the platform" +" or arguments used at environment creation time). It also creates an " +"(initially empty) ``lib/pythonX.Y/site-packages`` subdirectory (on Windows, " +"this is ``Lib\\site-packages``). If an existing directory is specified, it " +"will be re-used." +msgstr "" +"运行此命令将创建目标目录(父目录若不存在也将创建),并放置一个 ``pyvenv.cfg`` 文件在其中,文件中有一个 ``home`` " +"键,它的值指向运行此命令的 Python 安装(目标目录的常用名称是 ``.venv``)。它还会创建一个 ``bin`` 子目录(在 Windows " +"上是 ``Scripts``),其中包含 Python 二进制文件的副本或符号链接(视创建环境时使用的平台或参数而定)。它还会创建一个(初始为空的) " +"``lib/pythonX.Y/site-packages`` 子目录(在 Windows 上是 ``Lib\\site-" +"packages``)。如果指定了一个现有的目录,这个目录就将被重新使用。" + +#: ../../using/venv-create.inc:17 +msgid "" +"``pyvenv`` was the recommended tool for creating virtual environments for " +"Python 3.3 and 3.4, and is `deprecated in Python 3.6 " +"`_." +msgstr "" +"``pyvenv`` 是 Python 3.3 和 3.4 中创建虚拟环境的推荐工具,不过 `在 Python 3.6 中已弃用 " +"`_。" + +#: ../../using/venv-create.inc:22 +msgid "" +"The use of ``venv`` is now recommended for creating virtual environments." +msgstr "现在推荐使用 ``venv`` 来创建虚拟环境。" + +#: ../../using/venv-create.inc:27 +msgid "On Windows, invoke the ``venv`` command as follows::" +msgstr "在 Windows 上,调用 ``venv`` 命令如下::" + +#: ../../using/venv-create.inc:31 +msgid "" +"Alternatively, if you configured the ``PATH`` and ``PATHEXT`` variables for " +"your :ref:`Python installation `::" +msgstr "" +"或者,如果已经为 :ref:`Python 安装 ` 配置好 ``PATH`` 和 ``PATHEXT`` 变量::" + +#: ../../using/venv-create.inc:36 +msgid "The command, if run with ``-h``, will show the available options::" +msgstr "本命令如果以 ``-h`` 参数运行,将显示可用的选项::" + +#: ../../using/venv-create.inc:70 +msgid "" +"Add ``--upgrade-deps`` option to upgrade pip + setuptools to the latest on " +"PyPI" +msgstr "添加 ``--upgrade-deps`` 选项,用于将 pip + setuptools 升级到 PyPI 上的最新版本" + +#: ../../using/venv-create.inc:73 +msgid "" +"Installs pip by default, added the ``--without-pip`` and ``--copies`` " +"options" +msgstr "默认安装 pip,并添加 ``--without-pip`` 和 ``--copies`` 选项" + +#: ../../using/venv-create.inc:77 +msgid "" +"In earlier versions, if the target directory already existed, an error was " +"raised, unless the ``--clear`` or ``--upgrade`` option was provided." +msgstr "在早期版本中,如果目标目录已存在,将引发错误,除非使用了 ``--clear`` 或 ``--upgrade`` 选项。" + +#: ../../using/venv-create.inc:82 +msgid "" +"While symlinks are supported on Windows, they are not recommended. Of " +"particular note is that double-clicking ``python.exe`` in File Explorer will" +" resolve the symlink eagerly and ignore the virtual environment." +msgstr "" +"虽然 Windows 支持符号链接,但不推荐使用它们。特别注意,在文件资源管理器中双击 ``python.exe`` " +"将立即解析符号链接,并忽略虚拟环境。" + +#: ../../using/venv-create.inc:87 +msgid "" +"On Microsoft Windows, it may be required to enable the ``Activate.ps1`` " +"script by setting the execution policy for the user. You can do this by " +"issuing the following PowerShell command:" +msgstr "" +"在 Microsoft Windows 上,为了启用 ``Activate.ps1`` 脚本,可能需要修改用户的执行策略。可以运行以下 " +"PowerShell 命令来执行此操作:" + +#: ../../using/venv-create.inc:91 +msgid "" +"PS C:\\> Set-ExecutionPolicy -ExecutionPolicy RemoteSigned -Scope " +"CurrentUser" +msgstr "" +"PS C:\\> Set-ExecutionPolicy -ExecutionPolicy RemoteSigned -Scope " +"CurrentUser" + +#: ../../using/venv-create.inc:93 +msgid "" +"See `About Execution Policies " +"`_ for more information." +msgstr "" +"参阅 `About Execution Policies " +"`_ 以获取更多信息。" + +#: ../../using/venv-create.inc:97 +msgid "" +"The created ``pyvenv.cfg`` file also includes the ``include-system-site-" +"packages`` key, set to ``true`` if ``venv`` is run with the ``--system-site-" +"packages`` option, ``false`` otherwise." +msgstr "" +"生成的 ``pyvenv.cfg`` 文件还包括 ``include-system-site-packages`` 键,如果运行 ``venv`` " +"时带有 ``--system-site-packages`` 选项,则键值为 ``true``,否则为 ``false``。" + +#: ../../using/venv-create.inc:101 +msgid "" +"Unless the ``--without-pip`` option is given, :mod:`ensurepip` will be " +"invoked to bootstrap ``pip`` into the virtual environment." +msgstr "除非采用 ``--without-pip`` 选项,否则将会调用 :mod:`ensurepip` 将 ``pip`` 引导到虚拟环境中。" + +#: ../../using/venv-create.inc:104 +msgid "" +"Multiple paths can be given to ``venv``, in which case an identical virtual " +"environment will be created, according to the given options, at each " +"provided path." +msgstr "可以向 ``venv`` 传入多个路径,此时将根据给定的选项,在所给的每个路径上创建相同的虚拟环境。" + +#: ../../using/venv-create.inc:108 +msgid "" +"Once a virtual environment has been created, it can be \"activated\" using a" +" script in the virtual environment's binary directory. The invocation of the" +" script is platform-specific (`` must be replaced by the path of the " +"directory containing the virtual environment):" +msgstr "" +"创建虚拟环境后,可以使用虚拟环境的二进制目录中的脚本来“激活”该环境。不同平台调用的脚本是不同的(须将 `` " +"替换为包含虚拟环境的目录路径):" + +#: ../../using/venv-create.inc:114 +msgid "Platform" +msgstr "平台" + +#: ../../using/venv-create.inc:114 +msgid "Shell" +msgstr "Shell" + +#: ../../using/venv-create.inc:114 +msgid "Command to activate virtual environment" +msgstr "用于激活虚拟环境的命令" + +#: ../../using/venv-create.inc:116 +msgid "POSIX" +msgstr "POSIX" + +#: ../../using/venv-create.inc:116 +msgid "bash/zsh" +msgstr "bash/zsh" + +#: ../../using/venv-create.inc:116 +msgid "$ source /bin/activate" +msgstr "$ source /bin/activate" + +#: ../../using/venv-create.inc:118 +msgid "fish" +msgstr "fish" + +#: ../../using/venv-create.inc:118 +msgid "$ source /bin/activate.fish" +msgstr "$ source /bin/activate.fish" + +#: ../../using/venv-create.inc:120 +msgid "csh/tcsh" +msgstr "csh/tcsh" + +#: ../../using/venv-create.inc:120 +msgid "$ source /bin/activate.csh" +msgstr "$ source /bin/activate.csh" + +#: ../../using/venv-create.inc:122 +msgid "PowerShell Core" +msgstr "PowerShell Core" + +#: ../../using/venv-create.inc:122 +msgid "$ /bin/Activate.ps1" +msgstr "$ /bin/Activate.ps1" + +#: ../../using/venv-create.inc:124 +msgid "Windows" +msgstr "Windows" + +#: ../../using/venv-create.inc:124 +msgid "cmd.exe" +msgstr "cmd.exe" + +#: ../../using/venv-create.inc:124 +msgid "C:\\\\> \\\\Scripts\\\\activate.bat" +msgstr "C:\\\\> \\\\Scripts\\\\activate.bat" + +#: ../../using/venv-create.inc:126 +msgid "PowerShell" +msgstr "PowerShell" + +#: ../../using/venv-create.inc:126 +msgid "PS C:\\\\> \\\\Scripts\\\\Activate.ps1" +msgstr "PS C:\\\\> \\\\Scripts\\\\Activate.ps1" + +#: ../../using/venv-create.inc:129 +msgid "" +"When a virtual environment is active, the :envvar:`VIRTUAL_ENV` environment " +"variable is set to the path of the virtual environment. This can be used to " +"check if one is running inside a virtual environment." +msgstr "" +"当一个虚拟环境被激活时,:envvar:`VIRTUAL_ENV` 环境变量会被设为该虚拟环境的路径。 这可被用来检测程序是否运行在虚拟环境中。" + +#: ../../using/venv-create.inc:133 +msgid "" +"You don't specifically *need* to activate an environment; activation just " +"prepends the virtual environment's binary directory to your path, so that " +"\"python\" invokes the virtual environment's Python interpreter and you can " +"run installed scripts without having to use their full path. However, all " +"scripts installed in a virtual environment should be runnable without " +"activating it, and run with the virtual environment's Python automatically." +msgstr "" +"激活环境不是 *必须* 的,激活只是将虚拟环境的二进制目录添加到搜索路径中,这样 \"python\" 命令将调用虚拟环境的 Python " +"解释器,可以运行其中已安装的脚本,而不必输入其完整路径。但是,安装在虚拟环境中的所有脚本都应在不激活的情况下可运行,并自动与虚拟环境的 Python " +"一起运行。" + +#: ../../using/venv-create.inc:140 +msgid "" +"You can deactivate a virtual environment by typing \"deactivate\" in your " +"shell. The exact mechanism is platform-specific and is an internal " +"implementation detail (typically a script or shell function will be used)." +msgstr "" +"在 shell 中输入 \"deactivate\" 可以退出虚拟环境。具体机制取决于不同平台,并且是内部实现(通常使用脚本或 shell 函数)。" + +#: ../../using/venv-create.inc:144 +msgid "``fish`` and ``csh`` activation scripts." +msgstr "``fish`` 和 ``csh`` 激活脚本。" + +#: ../../using/venv-create.inc:147 +msgid "" +"PowerShell activation scripts installed under POSIX for PowerShell Core " +"support." +msgstr "在 POSIX 上安装 PowerShell 激活脚本,以支持 PowerShell Core。" + +#: ../../library/venv.rst:41 +msgid "" +"A virtual environment is a Python environment such that the Python " +"interpreter, libraries and scripts installed into it are isolated from those" +" installed in other virtual environments, and (by default) any libraries " +"installed in a \"system\" Python, i.e., one which is installed as part of " +"your operating system." +msgstr "" +"虚拟环境是一个 Python 环境,安装到其中的 Python 解释器、库和脚本与其他虚拟环境中的内容是隔离的,且(默认)与“系统级” " +"Python(操作系统的一部分)中安装的库是隔离的。" + +#: ../../library/venv.rst:47 +msgid "" +"A virtual environment is a directory tree which contains Python executable " +"files and other files which indicate that it is a virtual environment." +msgstr "虚拟环境是一个目录树,其中包含 Python 可执行文件和其他文件,其他文件指示了这是一个是虚拟环境。" + +#: ../../library/venv.rst:50 +msgid "" +"Common installation tools such as setuptools_ and pip_ work as expected with" +" virtual environments. In other words, when a virtual environment is active," +" they install Python packages into the virtual environment without needing " +"to be told to do so explicitly." +msgstr "" +"常用安装工具如 setuptools_ 和 pip_ 可以在虚拟环境中按预期工作。换句话说,当虚拟环境被激活,它们就会将 Python " +"软件包安装到虚拟环境中,无需明确指示。" + +#: ../../library/venv.rst:55 +msgid "" +"When a virtual environment is active (i.e., the virtual environment's Python" +" interpreter is running), the attributes :attr:`sys.prefix` and " +":attr:`sys.exec_prefix` point to the base directory of the virtual " +"environment, whereas :attr:`sys.base_prefix` and " +":attr:`sys.base_exec_prefix` point to the non-virtual environment Python " +"installation which was used to create the virtual environment. If a virtual " +"environment is not active, then :attr:`sys.prefix` is the same as " +":attr:`sys.base_prefix` and :attr:`sys.exec_prefix` is the same as " +":attr:`sys.base_exec_prefix` (they all point to a non-virtual environment " +"Python installation)." +msgstr "" +"当虚拟环境被激活(即虚拟环境的 Python 解释器正在运行),属性 :attr:`sys.prefix` 和 " +":attr:`sys.exec_prefix` 指向的是虚拟环境的基础目录,而 :attr:`sys.base_prefix` 和 " +":attr:`sys.base_exec_prefix` 指向非虚拟环境的 Python 安装,即曾用于创建虚拟环境的那个 Python " +"安装。如果虚拟环境没有被激活,则 :attr:`sys.prefix` 与 :attr:`sys.base_prefix` 相同,且 " +":attr:`sys.exec_prefix` 与 :attr:`sys.base_exec_prefix` 相同(它们均指向非虚拟环境的 Python" +" 安装)。" + +#: ../../library/venv.rst:66 +msgid "" +"When a virtual environment is active, any options that change the " +"installation path will be ignored from all :mod:`distutils` configuration " +"files to prevent projects being inadvertently installed outside of the " +"virtual environment." +msgstr "当虚拟环境被激活,所有 :mod:`distutils` 配置文件中更改安装路径的选项都会被忽略,以防止无意中将项目安装在虚拟环境之外。" + +#: ../../library/venv.rst:71 +msgid "" +"When working in a command shell, users can make a virtual environment active" +" by running an ``activate`` script in the virtual environment's executables " +"directory (the precise filename and command to use the file is shell-" +"dependent), which prepends the virtual environment's directory for " +"executables to the ``PATH`` environment variable for the running shell. " +"There should be no need in other circumstances to activate a virtual " +"environment; scripts installed into virtual environments have a \"shebang\" " +"line which points to the virtual environment's Python interpreter. This " +"means that the script will run with that interpreter regardless of the value" +" of ``PATH``. On Windows, \"shebang\" line processing is supported if you " +"have the Python Launcher for Windows installed (this was added to Python in " +"3.3 - see :pep:`397` for more details). Thus, double-clicking an installed " +"script in a Windows Explorer window should run the script with the correct " +"interpreter without there needing to be any reference to its virtual " +"environment in ``PATH``." +msgstr "" +"在命令行 shell 中工作时,用户可以运行虚拟环境可执行文件目录中的 ``activate`` 脚本来激活虚拟环境(调用该文件的确切文件名和命令取决于" +" shell),这会将虚拟环境的可执行文件目录添加到当前 shell 的 ``PATH`` " +"环境变量。在其他情况下,无需激活虚拟环境。安装到虚拟环境中的脚本有 \"shebang\" 行,指向虚拟环境的 Python 解释器。这意味着无论 " +"``PATH`` 的值如何,脚本都将与该解释器一起运行。在 Windows 上,如果已安装 Python Launcher for " +"Windows,则支持处理 \"shebang\" 行(此功能在 Python 3.3 中添加,详情请参阅 :pep:`397`)。这样,在 " +"Windows 资源管理器中双击已安装的脚本,应该会使用正确的解释器运行该脚本,而在 ``PATH`` 中无需指向其虚拟环境。" + +#: ../../library/venv.rst:91 +msgid "API" +msgstr "API" + +#: ../../library/venv.rst:95 +msgid "" +"The high-level method described above makes use of a simple API which " +"provides mechanisms for third-party virtual environment creators to " +"customize environment creation according to their needs, the " +":class:`EnvBuilder` class." +msgstr "" +"上述的高级方法使用了一个简单的 API,该 API 提供了一种机制,第三方虚拟环境创建者可以根据其需求自定义环境创建过程,该 API 为 " +":class:`EnvBuilder` 类。" + +#: ../../library/venv.rst:103 +msgid "" +"The :class:`EnvBuilder` class accepts the following keyword arguments on " +"instantiation:" +msgstr ":class:`EnvBuilder` 类在实例化时接受以下关键字参数:" + +#: ../../library/venv.rst:106 +msgid "" +"``system_site_packages`` -- a Boolean value indicating that the system " +"Python site-packages should be available to the environment (defaults to " +"``False``)." +msgstr "" +"``system_site_packages`` -- 一个布尔值,要求系统 Python 的 site-packages 对环境可用(默认为 " +"``False``)。" + +#: ../../library/venv.rst:109 +msgid "" +"``clear`` -- a Boolean value which, if true, will delete the contents of any" +" existing target directory, before creating the environment." +msgstr "``clear`` -- 一个布尔值,如果为 true,则在创建环境前将删除目标目录的现有内容。" + +#: ../../library/venv.rst:112 +msgid "" +"``symlinks`` -- a Boolean value indicating whether to attempt to symlink the" +" Python binary rather than copying." +msgstr "``symlinks`` -- 一个布尔值,指示是否尝试符号链接 Python 二进制文件,而不是进行复制。" + +#: ../../library/venv.rst:115 +msgid "" +"``upgrade`` -- a Boolean value which, if true, will upgrade an existing " +"environment with the running Python - for use when that Python has been " +"upgraded in-place (defaults to ``False``)." +msgstr "" +"``upgrade`` -- 一个布尔值,如果为 true,则将使用当前运行的 Python 去升级一个现有的环境,这主要在原位置的 Python " +"更新后使用(默认为 ``False``)。" + +#: ../../library/venv.rst:119 +msgid "" +"``with_pip`` -- a Boolean value which, if true, ensures pip is installed in " +"the virtual environment. This uses :mod:`ensurepip` with the ``--default-" +"pip`` option." +msgstr "" +"``with_pip`` -- 一个布尔值,如果为 true,则确保在虚拟环境中已安装 pip。这使用的是带有 ``--default-pip`` " +"选项的 :mod:`ensurepip`。" + +#: ../../library/venv.rst:123 +msgid "" +"``prompt`` -- a String to be used after virtual environment is activated " +"(defaults to ``None`` which means directory name of the environment would be" +" used). If the special string ``\".\"`` is provided, the basename of the " +"current directory is used as the prompt." +msgstr "" +"``prompt`` -- 激活虚拟环境后显示的提示符(默认为 ``None``,表示使用环境所在的目录名称)。如果使用了 ``\".\"`` " +"这一特殊字符串,则使用当前目录的基本名称作为提示符。" + +#: ../../library/venv.rst:128 +msgid "``upgrade_deps`` -- Update the base venv modules to the latest on PyPI" +msgstr "``upgrade_deps`` -- 将基本 venv 模块更新为 PyPI 上的最新版本。" + +#: ../../library/venv.rst:130 ../../library/venv.rst:259 +msgid "Added the ``with_pip`` parameter" +msgstr "添加 ``with_pip`` 参数" + +#: ../../library/venv.rst:133 ../../library/venv.rst:262 +msgid "Added the ``prompt`` parameter" +msgstr "添加 ``prompt`` 参数" + +#: ../../library/venv.rst:136 +msgid "Added the ``upgrade_deps`` parameter" +msgstr "添加 ``upgrade_deps`` 参数" + +#: ../../library/venv.rst:139 +msgid "" +"Creators of third-party virtual environment tools will be free to use the " +"provided :class:`EnvBuilder` class as a base class." +msgstr "第三方虚拟环境工具的创建者可以自由地将此处提供的 :class:`EnvBuilder` 类作为基类。" + +#: ../../library/venv.rst:142 +msgid "The returned env-builder is an object which has a method, ``create``:" +msgstr "返回的 env-builder 是一个对象,包含一个 ``create`` 方法:" + +#: ../../library/venv.rst:146 +msgid "" +"Create a virtual environment by specifying the target directory (absolute or" +" relative to the current directory) which is to contain the virtual " +"environment. The ``create`` method will either create the environment in " +"the specified directory, or raise an appropriate exception." +msgstr "" +"指定要建立虚拟环境的目标目录(绝对路径或相对于当前路径)来创建虚拟环境。``create`` 方法将在指定目录中创建环境,或者引发对应的异常。" + +#: ../../library/venv.rst:152 +msgid "" +"The ``create`` method of the :class:`EnvBuilder` class illustrates the hooks" +" available for subclass customization::" +msgstr ":class:`EnvBuilder` 类的 ``create`` 方法定义了可用于定制子类的钩子::" + +#: ../../library/venv.rst:167 +msgid "" +"Each of the methods :meth:`ensure_directories`, " +":meth:`create_configuration`, :meth:`setup_python`, :meth:`setup_scripts` " +"and :meth:`post_setup` can be overridden." +msgstr "" +"每个方法 :meth:`ensure_directories`, :meth:`create_configuration`, " +":meth:`setup_python`, :meth:`setup_scripts` 和 :meth:`post_setup` 都可以被重写。" + +#: ../../library/venv.rst:173 +msgid "" +"Creates the environment directory and all necessary directories, and returns" +" a context object. This is just a holder for attributes (such as paths), " +"for use by the other methods. The directories are allowed to exist already, " +"as long as either ``clear`` or ``upgrade`` were specified to allow operating" +" on an existing environment directory." +msgstr "" +"创建环境目录和所有必需的目录,并返回一个上下文对象。该对象只是一个容器,保存属性(如路径),供其他方法使用。允许目录已经存在,如果指定了 " +"``clear`` 或 ``upgrade`` 就允许在现有环境目录上进行操作。" + +#: ../../library/venv.rst:181 +msgid "Creates the ``pyvenv.cfg`` configuration file in the environment." +msgstr "在环境中创建 ``pyvenv.cfg`` 配置文件。" + +#: ../../library/venv.rst:185 +msgid "" +"Creates a copy or symlink to the Python executable in the environment. On " +"POSIX systems, if a specific executable ``python3.x`` was used, symlinks to " +"``python`` and ``python3`` will be created pointing to that executable, " +"unless files with those names already exist." +msgstr "" +"在环境中创建 Python 可执行文件的拷贝或符号链接。在 POSIX 系统上,如果给定了可执行文件 " +"``python3.x``,将创建指向该可执行文件的 ``python`` 和 ``python3`` 符号链接,除非相同名称的文件已经存在。" + +#: ../../library/venv.rst:192 +msgid "" +"Installs activation scripts appropriate to the platform into the virtual " +"environment." +msgstr "将适用于平台的激活脚本安装到虚拟环境中。" + +#: ../../library/venv.rst:197 +msgid "" +"Upgrades the core venv dependency packages (currently ``pip`` and " +"``setuptools``) in the environment. This is done by shelling out to the " +"``pip`` executable in the environment." +msgstr "" +"升级环境中 venv 依赖的核心软件包(当前为 ``pip`` 和 ``setuptools``)。通过在环境中使用 ``pip`` 可执行文件来完成。" + +#: ../../library/venv.rst:205 +msgid "" +"A placeholder method which can be overridden in third party implementations " +"to pre-install packages in the virtual environment or perform other post-" +"creation steps." +msgstr "占位方法,可以在第三方实现中重写,用于在虚拟环境中预安装软件包,或是其他创建后要执行的步骤。" + +#: ../../library/venv.rst:209 +msgid "" +"Windows now uses redirector scripts for ``python[w].exe`` instead of copying" +" the actual binaries. In 3.7.2 only :meth:`setup_python` does nothing unless" +" running from a build in the source tree." +msgstr "" +"Windows 现在为 ``python[w].exe`` 使用重定向脚本,而不是复制实际的二进制文件。仅在 3.7.2 " +"中,除非运行的是源码树中的构建,否则 :meth:`setup_python` 不会执行任何操作。" + +#: ../../library/venv.rst:214 +msgid "" +"Windows copies the redirector scripts as part of :meth:`setup_python` " +"instead of :meth:`setup_scripts`. This was not the case in 3.7.2. When using" +" symlinks, the original executables will be linked." +msgstr "" +"Windows 将重定向脚本复制为 :meth:`setup_python` 的一部分而非 :meth:`setup_scripts`。在 3.7.2 " +"中不是这种情况。使用符号链接时,将链接至原始可执行文件。" + +#: ../../library/venv.rst:219 +msgid "" +"In addition, :class:`EnvBuilder` provides this utility method that can be " +"called from :meth:`setup_scripts` or :meth:`post_setup` in subclasses to " +"assist in installing custom scripts into the virtual environment." +msgstr "" +"此外,:class:`EnvBuilder` 提供了如下实用方法,可以从子类的 :meth:`setup_scripts` 或 " +":meth:`post_setup` 调用,用来将自定义脚本安装到虚拟环境中。" + +#: ../../library/venv.rst:225 +msgid "" +"*path* is the path to a directory that should contain subdirectories " +"\"common\", \"posix\", \"nt\", each containing scripts destined for the bin " +"directory in the environment. The contents of \"common\" and the directory " +"corresponding to :data:`os.name` are copied after some text replacement of " +"placeholders:" +msgstr "" +"*path* 是一个目录的路径,该目录应包含子目录 \"common\", \"posix\", \"nt\",每个子目录存有发往对应环境中 bin " +"目录的脚本。在下列占位符替换完毕后,将复制 \"common\" 的内容和与 :data:`os.name` 对应的子目录:" + +#: ../../library/venv.rst:231 +msgid "" +"``__VENV_DIR__`` is replaced with the absolute path of the environment " +"directory." +msgstr "``__VENV_DIR__`` 会被替换为环境目录的绝对路径。" + +#: ../../library/venv.rst:234 +msgid "" +"``__VENV_NAME__`` is replaced with the environment name (final path segment " +"of environment directory)." +msgstr "``__VENV_NAME__`` 会被替换为环境名称(环境目录的最后一个字段)。" + +#: ../../library/venv.rst:237 +msgid "" +"``__VENV_PROMPT__`` is replaced with the prompt (the environment name " +"surrounded by parentheses and with a following space)" +msgstr "``__VENV_PROMPT__`` 会被替换为提示符(用括号括起来的环境名称紧跟着一个空格)。" + +#: ../../library/venv.rst:240 +msgid "" +"``__VENV_BIN_NAME__`` is replaced with the name of the bin directory (either" +" ``bin`` or ``Scripts``)." +msgstr "``__VENV_BIN_NAME__`` 会被替换为 bin 目录的名称( ``bin`` 或 ``Scripts`` )。" + +#: ../../library/venv.rst:243 +msgid "" +"``__VENV_PYTHON__`` is replaced with the absolute path of the environment's " +"executable." +msgstr "``__VENV_PYTHON__`` 会被替换为环境可执行文件的绝对路径。" + +#: ../../library/venv.rst:246 +msgid "" +"The directories are allowed to exist (for when an existing environment is " +"being upgraded)." +msgstr "允许目录已存在(用于升级现有环境时)。" + +#: ../../library/venv.rst:249 +msgid "There is also a module-level convenience function:" +msgstr "有一个方便实用的模块级别的函数:" + +#: ../../library/venv.rst:254 +msgid "" +"Create an :class:`EnvBuilder` with the given keyword arguments, and call its" +" :meth:`~EnvBuilder.create` method with the *env_dir* argument." +msgstr "" +"通过关键词参数来创建一个 :class:`EnvBuilder`,并且使用 *env_dir* 参数来调用它的 " +":meth:`~EnvBuilder.create` 方法。" + +#: ../../library/venv.rst:266 +msgid "An example of extending ``EnvBuilder``" +msgstr "一个扩展 ``EnvBuilder`` 的例子" + +#: ../../library/venv.rst:268 +msgid "" +"The following script shows how to extend :class:`EnvBuilder` by implementing" +" a subclass which installs setuptools and pip into a created virtual " +"environment::" +msgstr "" +"下面的脚本展示了如何通过实现一个子类来扩展 :class:`EnvBuilder`。这个子类会安装 setuptools 和 pip " +"到被创建的虚拟环境中。" + +#: ../../library/venv.rst:487 +msgid "" +"This script is also available for download `online " +"`_." +msgstr "这个脚本同样可以 `在线下载 `_。" diff --git a/library/warnings.po b/library/warnings.po new file mode 100644 index 000000000..af76f1254 --- /dev/null +++ b/library/warnings.po @@ -0,0 +1,790 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) 2001-2024, Python Software Foundation +# This file is distributed under the same license as the Python package. +# FIRST AUTHOR , YEAR. +# +# Translators: +# Zombie110year , 2019 +# ppcfish , 2019 +# Dai Xu , 2021 +# Freesand Leo , 2022 +# Rafael Fontenelle , 2024 +# +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: Python 3.9\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2024-02-16 21:12+0000\n" +"PO-Revision-Date: 2017-02-16 23:34+0000\n" +"Last-Translator: Rafael Fontenelle , 2024\n" +"Language-Team: Chinese (China) (https://app.transifex.com/python-doc/teams/5390/zh_CN/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: zh_CN\n" +"Plural-Forms: nplurals=1; plural=0;\n" + +#: ../../library/warnings.rst:2 +msgid ":mod:`warnings` --- Warning control" +msgstr ":mod:`warnings` ——控制警告信息" + +#: ../../library/warnings.rst:7 +msgid "**Source code:** :source:`Lib/warnings.py`" +msgstr "**源代码:** :source:`Lib/warnings.py`" + +#: ../../library/warnings.rst:13 +msgid "" +"Warning messages are typically issued in situations where it is useful to " +"alert the user of some condition in a program, where that condition " +"(normally) doesn't warrant raising an exception and terminating the program." +" For example, one might want to issue a warning when a program uses an " +"obsolete module." +msgstr "" +"通常以下情况会引发警告:提醒用户注意程序中的某些情况,而这些情况(通常)还不值得触发异常并终止程序。例如,当程序用到了某个过时的模块时,就可能需要发出一条警告。" + +#: ../../library/warnings.rst:18 +msgid "" +"Python programmers issue warnings by calling the :func:`warn` function " +"defined in this module. (C programmers use :c:func:`PyErr_WarnEx`; see " +":ref:`exceptionhandling` for details)." +msgstr "" +"Python 程序员可调用本模块中定义的 :func:`warn` 函数来发布警告。(C 语言程序员则用 :c:func:`PyErr_WarnEx` " +"; 详见 :ref:`exceptionhandling` )。" + +#: ../../library/warnings.rst:22 +msgid "" +"Warning messages are normally written to :data:`sys.stderr`, but their " +"disposition can be changed flexibly, from ignoring all warnings to turning " +"them into exceptions. The disposition of warnings can vary based on the " +":ref:`warning category `, the text of the warning " +"message, and the source location where it is issued. Repetitions of a " +"particular warning for the same source location are typically suppressed." +msgstr "" +"警告信息通常会写入 :data:`sys.stderr` ,但可以灵活改变,从忽略所有警告到变成异常都可以。警告的处理方式可以依据 " +":ref:`警告类型` 、警告信息的文本和发出警告的源位置而进行变化。同一源位置重复出现的警告通常会被抑制。" + +#: ../../library/warnings.rst:29 +msgid "" +"There are two stages in warning control: first, each time a warning is " +"issued, a determination is made whether a message should be issued or not; " +"next, if a message is to be issued, it is formatted and printed using a " +"user-settable hook." +msgstr "控制警告信息有两个阶段:首先,每次引发警告时,决定信息是否要发出;然后,如果要发出信息,就用可由用户设置的钩子进行格式化并打印输出。" + +#: ../../library/warnings.rst:33 +msgid "" +"The determination whether to issue a warning message is controlled by the " +":ref:`warning filter `, which is a sequence of matching " +"rules and actions. Rules can be added to the filter by calling " +":func:`filterwarnings` and reset to its default state by calling " +":func:`resetwarnings`." +msgstr "" +":ref:`警告过滤器 ` 控制着是否发出警告信息,也即一系列的匹配规则和动作。调用 " +":func:`filterwarnings` 可将规则加入过滤器,调用 :func:`resetwarnings` 则可重置为默认状态。" + +#: ../../library/warnings.rst:38 +msgid "" +"The printing of warning messages is done by calling :func:`showwarning`, " +"which may be overridden; the default implementation of this function formats" +" the message by calling :func:`formatwarning`, which is also available for " +"use by custom implementations." +msgstr "" +"警告信息的打印输出是通过调用 :func:`showwarning` 完成的,该函数可被重写;默认的实现代码是调用 " +":func:`formatwarning` 进行格式化,自己编写的代码也可以调用此格式化函数。" + +#: ../../library/warnings.rst:44 +msgid "" +":func:`logging.captureWarnings` allows you to handle all warnings with the " +"standard logging infrastructure." +msgstr "利用 :func:`logging.captureWarnings` 可以采用标准的日志架构处理所有警告。" + +#: ../../library/warnings.rst:51 +msgid "Warning Categories" +msgstr "警告类别" + +#: ../../library/warnings.rst:53 +msgid "" +"There are a number of built-in exceptions that represent warning categories." +" This categorization is useful to be able to filter out groups of warnings." +msgstr "警告的类别由一些内置的异常表示。这种分类有助于对警告信息进行分组过滤。" + +#: ../../library/warnings.rst:56 +msgid "" +"While these are technically :ref:`built-in exceptions `, they are documented here, because conceptually they belong " +"to the warnings mechanism." +msgstr "" +"虽然在技术上警告类别属于 :ref:`内置异常 `,但也只是在此记录一下而已,因为在概念上他们属于警告机制的一部分。" + +#: ../../library/warnings.rst:60 +msgid "" +"User code can define additional warning categories by subclassing one of the" +" standard warning categories. A warning category must always be a subclass " +"of the :exc:`Warning` class." +msgstr "通过对某个标准的警告类别进行派生,用户代码可以定义其他的警告类别。 警告类别必须是 :exc:`Warning` 类的子类。" + +#: ../../library/warnings.rst:64 +msgid "The following warnings category classes are currently defined:" +msgstr "目前已定义了以下警告类别的类:" + +#: ../../library/warnings.rst:69 +msgid "Class" +msgstr "类" + +#: ../../library/warnings.rst:69 +msgid "Description" +msgstr "描述" + +#: ../../library/warnings.rst:71 +msgid ":exc:`Warning`" +msgstr ":exc:`Warning`" + +#: ../../library/warnings.rst:71 +msgid "" +"This is the base class of all warning category classes. It is a subclass of" +" :exc:`Exception`." +msgstr "这是所有警告类别的基类。它是 :exc:`Exception` 的子类。" + +#: ../../library/warnings.rst:75 +msgid ":exc:`UserWarning`" +msgstr ":exc:`UserWarning`" + +#: ../../library/warnings.rst:75 +msgid "The default category for :func:`warn`." +msgstr " :func:`warn` 的默认类别。" + +#: ../../library/warnings.rst:77 +msgid ":exc:`DeprecationWarning`" +msgstr ":exc:`DeprecationWarning`" + +#: ../../library/warnings.rst:77 +msgid "" +"Base category for warnings about deprecated features when those warnings are" +" intended for other Python developers (ignored by default, unless triggered " +"by code in ``__main__``)." +msgstr "已废弃特性警告的基类,这些警告是为其他 Python 开发者准备的(默认会忽略,除非在 ``__main__`` 中用代码触发)。" + +#: ../../library/warnings.rst:82 +msgid ":exc:`SyntaxWarning`" +msgstr ":exc:`SyntaxWarning`" + +#: ../../library/warnings.rst:82 +msgid "Base category for warnings about dubious syntactic features." +msgstr "用于警告可疑语法的基类。" + +#: ../../library/warnings.rst:85 +msgid ":exc:`RuntimeWarning`" +msgstr ":exc:`RuntimeWarning`" + +#: ../../library/warnings.rst:85 +msgid "Base category for warnings about dubious runtime features." +msgstr "用于警告可疑运行时特性的基类。" + +#: ../../library/warnings.rst:88 +msgid ":exc:`FutureWarning`" +msgstr ":exc:`FutureWarning`" + +#: ../../library/warnings.rst:88 +msgid "" +"Base category for warnings about deprecated features when those warnings are" +" intended for end users of applications that are written in Python." +msgstr "用于警告已废弃特性的基类,这些警告是为 Python 应用程序的最终用户准备的。" + +#: ../../library/warnings.rst:93 +msgid ":exc:`PendingDeprecationWarning`" +msgstr ":exc:`PendingDeprecationWarning`" + +#: ../../library/warnings.rst:93 +msgid "" +"Base category for warnings about features that will be deprecated in the " +"future (ignored by default)." +msgstr "用于警告即将废弃功能的基类(默认忽略)。" + +#: ../../library/warnings.rst:97 +msgid ":exc:`ImportWarning`" +msgstr ":exc:`ImportWarning`" + +#: ../../library/warnings.rst:97 +msgid "" +"Base category for warnings triggered during the process of importing a " +"module (ignored by default)." +msgstr "导入模块时触发的警告的基类(默认忽略)。" + +#: ../../library/warnings.rst:101 +msgid ":exc:`UnicodeWarning`" +msgstr ":exc:`UnicodeWarning`" + +#: ../../library/warnings.rst:101 +msgid "Base category for warnings related to Unicode." +msgstr "用于 Unicode 相关警告的基类。" + +#: ../../library/warnings.rst:104 +msgid ":exc:`BytesWarning`" +msgstr ":exc:`BytesWarning`" + +#: ../../library/warnings.rst:104 +msgid "" +"Base category for warnings related to :class:`bytes` and :class:`bytearray`." +msgstr ":class:`bytes` 和 :class:`bytearray` 相关警告的基类。" + +#: ../../library/warnings.rst:107 +msgid ":exc:`ResourceWarning`" +msgstr ":exc:`ResourceWarning`" + +#: ../../library/warnings.rst:107 +msgid "" +"Base category for warnings related to resource usage (ignored by default)." +msgstr "资源使用相关警告的基础类别(默认会被忽略)。ignored by default)." + +#: ../../library/warnings.rst:111 +msgid "" +"Previously :exc:`DeprecationWarning` and :exc:`FutureWarning` were " +"distinguished based on whether a feature was being removed entirely or " +"changing its behaviour. They are now distinguished based on their intended " +"audience and the way they're handled by the default warnings filters." +msgstr "" +"以前 :exc:`DeprecationWarning` 和 :exc:`FutureWarning` " +"是根据某个功能是否完全删除或改变其行为来区分的。现在是根据受众和默认警告过滤器的处理方式来区分的。" + +#: ../../library/warnings.rst:122 +msgid "The Warnings Filter" +msgstr "警告过滤器" + +#: ../../library/warnings.rst:124 +msgid "" +"The warnings filter controls whether warnings are ignored, displayed, or " +"turned into errors (raising an exception)." +msgstr "警告过滤器控制着警告是否被忽略、显示或转为错误(触发异常)。" + +#: ../../library/warnings.rst:127 +msgid "" +"Conceptually, the warnings filter maintains an ordered list of filter " +"specifications; any specific warning is matched against each filter " +"specification in the list in turn until a match is found; the filter " +"determines the disposition of the match. Each entry is a tuple of the form " +"(*action*, *message*, *category*, *module*, *lineno*), where:" +msgstr "" +"从概念上讲,警告过滤器维护着一个经过排序的过滤器类别列表;任何具体的警告都会依次与列表中的每种过滤器进行匹配,直到找到一个匹配项;过滤器决定了匹配项的处理方式。每个列表项均为" +" ( *action* , *message* , *category* , *module* , *lineno* ) 格式的元组,其中:" + +#: ../../library/warnings.rst:133 +msgid "*action* is one of the following strings:" +msgstr "*action* 是以下字符串之一:" + +#: ../../library/warnings.rst:136 +msgid "Value" +msgstr "值" + +#: ../../library/warnings.rst:136 +msgid "Disposition" +msgstr "处置" + +#: ../../library/warnings.rst:138 +msgid "``\"default\"``" +msgstr "``\"default\"``" + +#: ../../library/warnings.rst:138 +msgid "" +"print the first occurrence of matching warnings for each location (module + " +"line number) where the warning is issued" +msgstr "为发出警告的每个位置(模块+行号)打印第一个匹配警告" + +#: ../../library/warnings.rst:142 +msgid "``\"error\"``" +msgstr "``\"error\"``" + +#: ../../library/warnings.rst:142 +msgid "turn matching warnings into exceptions" +msgstr "将匹配警告转换为异常" + +#: ../../library/warnings.rst:144 +msgid "``\"ignore\"``" +msgstr "``\"ignore\"``" + +#: ../../library/warnings.rst:144 +msgid "never print matching warnings" +msgstr "从不打印匹配的警告" + +#: ../../library/warnings.rst:146 +msgid "``\"always\"``" +msgstr "``\"always\"``" + +#: ../../library/warnings.rst:146 +msgid "always print matching warnings" +msgstr "总是打印匹配的警告" + +#: ../../library/warnings.rst:148 +msgid "``\"module\"``" +msgstr "``\"module\"``" + +#: ../../library/warnings.rst:148 +msgid "" +"print the first occurrence of matching warnings for each module where the " +"warning is issued (regardless of line number)" +msgstr "为发出警告的每个模块打印第一次匹配警告(无论行号如何)" + +#: ../../library/warnings.rst:152 +msgid "``\"once\"``" +msgstr "``\"once\"``" + +#: ../../library/warnings.rst:152 +msgid "" +"print only the first occurrence of matching warnings, regardless of location" +msgstr "无论位置如何,仅打印第一次出现的匹配警告" + +#: ../../library/warnings.rst:156 +msgid "" +"*message* is a string containing a regular expression that the start of the " +"warning message must match. The expression is compiled to always be case-" +"insensitive." +msgstr "*message* 是包含正则表达式的字符串,警告信息的开头必须与之匹配。该表达式编译时不区分大小写。" + +#: ../../library/warnings.rst:160 +msgid "" +"*category* is a class (a subclass of :exc:`Warning`) of which the warning " +"category must be a subclass in order to match." +msgstr "*category* 是警告类别的类(:exc:`Warning` 的子类),警告类别必须是其子类,才能匹配。" + +#: ../../library/warnings.rst:163 +msgid "" +"*module* is a string containing a regular expression that the module name " +"must match. The expression is compiled to be case-sensitive." +msgstr "*module* 是个字符串,包含了模块名称必须匹配的正则表达式。该表达式编译时大小写敏感。" + +#: ../../library/warnings.rst:166 +msgid "" +"*lineno* is an integer that the line number where the warning occurred must " +"match, or ``0`` to match all line numbers." +msgstr "*lineno* 是个整数,发生警告的行号必须与之匹配,或为 ``0`` 表示与所有行号匹配。" + +#: ../../library/warnings.rst:169 +msgid "" +"Since the :exc:`Warning` class is derived from the built-in :exc:`Exception`" +" class, to turn a warning into an error we simply raise " +"``category(message)``." +msgstr "" +"由于 :exc:`Warning` 类是由内置类 :exc:`Exception` 派生出来的,要把某个警告变成错误,只要触发 " +"``category(message)`` 即可。" + +#: ../../library/warnings.rst:172 +msgid "" +"If a warning is reported and doesn't match any registered filter then the " +"\"default\" action is applied (hence its name)." +msgstr "如果警告不匹配所有已注册的过滤器,那就会应用 “default” 动作(正如其名)。" + +#: ../../library/warnings.rst:179 +msgid "Describing Warning Filters" +msgstr "警告过滤器的介绍" + +#: ../../library/warnings.rst:181 +msgid "" +"The warnings filter is initialized by :option:`-W` options passed to the " +"Python interpreter command line and the :envvar:`PYTHONWARNINGS` environment" +" variable. The interpreter saves the arguments for all supplied entries " +"without interpretation in :data:`sys.warnoptions`; the :mod:`warnings` " +"module parses these when it is first imported (invalid options are ignored, " +"after printing a message to :data:`sys.stderr`)." +msgstr "" +"警告过滤器由传给 Python 解释器的命令行 :option:`-W` 选项和 :envvar:`PYTHONWARNINGS` " +"环境变量初始化。解释器在 :data:`sys.warningoptions` 中保存了所有给出的参数,但不作解释;:mod:`warnings` " +"模块在第一次导入时会解析这些参数(无效的选项被忽略,并会先向 :data:`sys.stderr` 打印一条信息)。" + +#: ../../library/warnings.rst:188 +msgid "" +"Individual warnings filters are specified as a sequence of fields separated " +"by colons::" +msgstr "每个警告过滤器的设定格式为冒号分隔的字段序列:" + +#: ../../library/warnings.rst:193 +msgid "" +"The meaning of each of these fields is as described in :ref:`warning-" +"filter`. When listing multiple filters on a single line (as for " +":envvar:`PYTHONWARNINGS`), the individual filters are separated by commas " +"and the filters listed later take precedence over those listed before them " +"(as they're applied left-to-right, and the most recently applied filters " +"take precedence over earlier ones)." +msgstr "" +"这些字段的含义在 :ref:`warning-filter` 中描述。当一行中列出多个过滤器时(如 " +":envvar:`PYTHONWARNINGS`),过滤器间用逗号隔开,后面的优先于前面的(因为是从左到右应用的,最近应用的过滤器优先于前面的)。" + +#: ../../library/warnings.rst:200 +msgid "" +"Commonly used warning filters apply to either all warnings, warnings in a " +"particular category, or warnings raised by particular modules or packages. " +"Some examples::" +msgstr "常用的警告过滤器适用于所有的警告、特定类别的警告、由特定模块和包引发的警告。下面是一些例子:" + +#: ../../library/warnings.rst:217 +msgid "Default Warning Filter" +msgstr "默认警告过滤器" + +#: ../../library/warnings.rst:219 +msgid "" +"By default, Python installs several warning filters, which can be overridden" +" by the :option:`-W` command-line option, the :envvar:`PYTHONWARNINGS` " +"environment variable and calls to :func:`filterwarnings`." +msgstr "" +"Python 默认安装了几个警告过滤器,可以通过 :option:`-W` 命令行参数、 :envvar:`PYTHONWARNINGS` " +"环境变量及调用 :func:`filterwarnings` 进行覆盖。" + +#: ../../library/warnings.rst:223 +msgid "" +"In regular release builds, the default warning filter has the following " +"entries (in order of precedence)::" +msgstr "在常规发布的版本中,默认的警告过滤器包括(按优先顺序排列):" + +#: ../../library/warnings.rst:232 +msgid "In debug builds, the list of default warning filters is empty." +msgstr "在调试版本中,默认警告过滤器的列表是空的。" + +#: ../../library/warnings.rst:234 +msgid "" +":exc:`DeprecationWarning` is now ignored by default in addition to " +":exc:`PendingDeprecationWarning`." +msgstr "" +"除了 :exc:`PendingDeprecationWarning` 之外,:exc:`DeprecationWarning` 现在默认会被忽略。" + +#: ../../library/warnings.rst:238 +msgid "" +":exc:`DeprecationWarning` is once again shown by default when triggered " +"directly by code in ``__main__``." +msgstr ":exc:`DeprecationWarning` 在被 ``__main__`` 中的代码直接触发时,默认会再次显示。" + +#: ../../library/warnings.rst:242 +msgid "" +":exc:`BytesWarning` no longer appears in the default filter list and is " +"instead configured via :data:`sys.warnoptions` when :option:`-b` is " +"specified twice." +msgstr "" +"如果指定两次 :option:`-b`,则 :exc:`BytesWarning` 不再出现在默认的过滤器列表中,而是通过 " +":data:`sys.warningoptions` 进行配置。" + +#: ../../library/warnings.rst:251 +msgid "Overriding the default filter" +msgstr "重写默认的过滤器" + +#: ../../library/warnings.rst:253 +msgid "" +"Developers of applications written in Python may wish to hide *all* Python " +"level warnings from their users by default, and only display them when " +"running tests or otherwise working on the application. The " +":data:`sys.warnoptions` attribute used to pass filter configurations to the " +"interpreter can be used as a marker to indicate whether or not warnings " +"should be disabled::" +msgstr "" +"Python 应用程序的开发人员可能希望在默认情况下向用户隐藏 *所有* " +"Python级别的警告,而只在运行测试或其他调试时显示这些警告。用于向解释器传递过滤器配置的 :data:`sys.warningoptions` " +"属性可以作为一个标记,表示是否应该禁用警告:" + +#: ../../library/warnings.rst:265 +msgid "" +"Developers of test runners for Python code are advised to instead ensure " +"that *all* warnings are displayed by default for the code under test, using " +"code like::" +msgstr "建议 Python 代码测试的开发者使用如下代码,以确保被测代码默认显示 *所有* 警告:" + +#: ../../library/warnings.rst:276 +msgid "" +"Finally, developers of interactive shells that run user code in a namespace " +"other than ``__main__`` are advised to ensure that :exc:`DeprecationWarning`" +" messages are made visible by default, using code like the following (where " +"``user_ns`` is the module used to execute code entered interactively)::" +msgstr "" +"最后,建议在 ``__main__`` 以外的命名空间运行用户代码的交互式开发者,请确保 :exc:`DeprecationWarning` " +"在默认情况下是可见的,可采用如下代码(这里 ``user_ns`` 是用于执行交互式输入代码的模块):" + +#: ../../library/warnings.rst:289 +msgid "Temporarily Suppressing Warnings" +msgstr "暂时禁止警告" + +#: ../../library/warnings.rst:291 +msgid "" +"If you are using code that you know will raise a warning, such as a " +"deprecated function, but do not want to see the warning (even when warnings " +"have been explicitly configured via the command line), then it is possible " +"to suppress the warning using the :class:`catch_warnings` context manager::" +msgstr "" +"如果明知正在使用会引起警告的代码,比如某个废弃函数,但不想看到警告(即便警告已经通过命令行作了显式配置),那么可以使用 " +":class:`catch_warnings` 上下文管理器来抑制警告。" + +#: ../../library/warnings.rst:305 +msgid "" +"While within the context manager all warnings will simply be ignored. This " +"allows you to use known-deprecated code without having to see the warning " +"while not suppressing the warning for other code that might not be aware of " +"its use of deprecated code. Note: this can only be guaranteed in a single-" +"threaded application. If two or more threads use the :class:`catch_warnings`" +" context manager at the same time, the behavior is undefined." +msgstr "" +"在上下文管理器中,所有的警告将被简单地忽略。这样就能使用已知的过时代码而又不必看到警告,同时也不会限制警告其他可能不知过时的代码。注意:只能保证在单线程应用程序中生效。如果两个以上的线程同时使用" +" :class:`catch_warnings` 上下文管理器,行为不可预知。" + +#: ../../library/warnings.rst:317 +msgid "Testing Warnings" +msgstr "测试警告" + +#: ../../library/warnings.rst:319 +msgid "" +"To test warnings raised by code, use the :class:`catch_warnings` context " +"manager. With it you can temporarily mutate the warnings filter to " +"facilitate your testing. For instance, do the following to capture all " +"raised warnings to check::" +msgstr "" +"要测试由代码引发的警告,请采用 :class:`catch_warnings` " +"上下文管理器。有了它,就可以临时改变警告过滤器以方便测试。例如,以下代码可捕获所有的警告以便查看:" + +#: ../../library/warnings.rst:339 +msgid "" +"One can also cause all warnings to be exceptions by using ``error`` instead " +"of ``always``. One thing to be aware of is that if a warning has already " +"been raised because of a ``once``/``default`` rule, then no matter what " +"filters are set the warning will not be seen again unless the warnings " +"registry related to the warning has been cleared." +msgstr "" +"也可以用 ``error`` 取代 ``always`` ,让所有的警告都成为异常。需要注意的是,如果某条警告已经因为 ``once`` / " +"``default`` 规则而被引发,那么无论设置什么过滤器,该条警告都不会再出现,除非该警告有关的注册数据被清除。" + +#: ../../library/warnings.rst:345 +msgid "" +"Once the context manager exits, the warnings filter is restored to its state" +" when the context was entered. This prevents tests from changing the " +"warnings filter in unexpected ways between tests and leading to " +"indeterminate test results. The :func:`showwarning` function in the module " +"is also restored to its original value. Note: this can only be guaranteed " +"in a single-threaded application. If two or more threads use the " +":class:`catch_warnings` context manager at the same time, the behavior is " +"undefined." +msgstr "" +"一旦上下文管理器退出,警告过滤器将恢复到刚进此上下文时的状态。这样在多次测试时可防止意外改变警告过滤器,从而导致不确定的测试结果。模块中的 " +":func:`showwarning` 函数也被恢复到初始值。注意:这只能在单线程应用程序中得到保证。如果两个以上的线程同时使用 " +":class:`catch_warnings` 上下文管理器,行为未定义。" + +#: ../../library/warnings.rst:353 +msgid "" +"When testing multiple operations that raise the same kind of warning, it is " +"important to test them in a manner that confirms each operation is raising a" +" new warning (e.g. set warnings to be raised as exceptions and check the " +"operations raise exceptions, check that the length of the warning list " +"continues to increase after each operation, or else delete the previous " +"entries from the warnings list before each new operation)." +msgstr "" +"当测试多项操作会引发同类警告时,重点是要确保每次操作都会触发新的警告(比如,将警告设置为异常并检查操作是否触发异常,检查每次操作后警告列表的长度是否有增加,否则就在每次新操作前将以前的警告列表项删除)。" + +#: ../../library/warnings.rst:364 +msgid "Updating Code For New Versions of Dependencies" +msgstr "为新版本的依赖关系更新代码" + +#: ../../library/warnings.rst:366 +msgid "" +"Warning categories that are primarily of interest to Python developers " +"(rather than end users of applications written in Python) are ignored by " +"default." +msgstr "在默认情况下,主要针对 Python 开发者(而不是 Python 应用程序的最终用户)的警告类别,会被忽略。" + +#: ../../library/warnings.rst:369 +msgid "" +"Notably, this \"ignored by default\" list includes :exc:`DeprecationWarning`" +" (for every module except ``__main__``), which means developers should make " +"sure to test their code with typically ignored warnings made visible in " +"order to receive timely notifications of future breaking API changes " +"(whether in the standard library or third party packages)." +msgstr "" +"值得注意的是,这个“默认忽略”的列表包含 :exc:`DeprecationWarning` (适用于每个模块,除了 " +"``__main__``),这意味着开发人员应该确保在测试代码时应将通常忽略的警告显示出来,以便未来破坏性 API " +"变化时及时收到通知(无论是在标准库还是第三方包)。" + +#: ../../library/warnings.rst:375 +msgid "" +"In the ideal case, the code will have a suitable test suite, and the test " +"runner will take care of implicitly enabling all warnings when running tests" +" (the test runner provided by the :mod:`unittest` module does this)." +msgstr "" +"理想情况下,代码会有一个合适的测试套件,在运行测试时会隐含地启用所有警告(由 :mod:`unittest` 模块提供的测试运行程序就是如此)。" + +#: ../../library/warnings.rst:379 +msgid "" +"In less ideal cases, applications can be checked for use of deprecated " +"interfaces by passing :option:`-Wd <-W>` to the Python interpreter (this is " +"shorthand for :option:`!-W default`) or setting ``PYTHONWARNINGS=default`` " +"in the environment. This enables default handling for all warnings, " +"including those that are ignored by default. To change what action is taken " +"for encountered warnings you can change what argument is passed to " +":option:`-W` (e.g. :option:`!-W error`). See the :option:`-W` flag for more " +"details on what is possible." +msgstr "" +"在不太理想的情况下,可以通过向 Python 解释器传入 :option:`-Wd <-W>` (这是 :option:`!-W default` " +"的简写) 或设置环境变量 ``PYTHONWARNINGS=default`` 来检查应用程序是否用到了已弃用的接口。 " +"这样可以启用对所有警告的默认处理操作,包括那些默认忽略的警告。 要改变遇到警告后执行的动作,可以改变传给 :option:`-W` 的参数 (例如 " +":option:`!-W error`)。 请参阅 :option:`-W` 旗标来了解更多的细节。" + +#: ../../library/warnings.rst:392 +msgid "Available Functions" +msgstr "可用的函数" + +#: ../../library/warnings.rst:397 +msgid "" +"Issue a warning, or maybe ignore it or raise an exception. The *category* " +"argument, if given, must be a :ref:`warning category class `; it defaults to :exc:`UserWarning`. Alternatively, *message* " +"can be a :exc:`Warning` instance, in which case *category* will be ignored " +"and ``message.__class__`` will be used. In this case, the message text will " +"be ``str(message)``. This function raises an exception if the particular " +"warning issued is changed into an error by the :ref:`warnings filter " +"`. The *stacklevel* argument can be used by wrapper " +"functions written in Python, like this::" +msgstr "" +"引发警告、忽略或者触发异常。 如果给出 *category* 参数,则必须是 :ref:`警告类别类 ` " +";默认为 :exc:`UserWarning`。 或者 *message* 可为 :exc:`Warning` 的实例,这时 *category* " +"将被忽略,转而采用 ``message.__class__``。 在这种情况下,错误信息文本将是 ``str(message)``。 如果某条警告被 " +":ref:`警告过滤器 ` 改成了错误,本函数将触发一条异常。 参数 *stacklevel* 可供 Python " +"包装函数使用,比如::" + +#: ../../library/warnings.rst:409 +msgid "" +"This makes the warning refer to :func:`deprecation`'s caller, rather than to" +" the source of :func:`deprecation` itself (since the latter would defeat the" +" purpose of the warning message)." +msgstr "" +"这会让警告指向 :func:`deprecation` 的调用者,而不是 :func:`deprecation` " +"本身的来源(因为后者会破坏引发警告的目的)。" + +#: ../../library/warnings.rst:413 ../../library/warnings.rst:436 +msgid "" +"*source*, if supplied, is the destroyed object which emitted a " +":exc:`ResourceWarning`." +msgstr "*source* 是发出 :exc:`ResourceWarning` 的被销毁对象。" + +#: ../../library/warnings.rst:416 +msgid "Added *source* parameter." +msgstr "加入 *source*  参数。" + +#: ../../library/warnings.rst:422 +msgid "" +"This is a low-level interface to the functionality of :func:`warn`, passing " +"in explicitly the message, category, filename and line number, and " +"optionally the module name and the registry (which should be the " +"``__warningregistry__`` dictionary of the module). The module name defaults" +" to the filename with ``.py`` stripped; if no registry is passed, the " +"warning is never suppressed. *message* must be a string and *category* a " +"subclass of :exc:`Warning` or *message* may be a :exc:`Warning` instance, in" +" which case *category* will be ignored." +msgstr "" +"这是 :func:`warn` 函数的底层接口,显式传入消息、类别、文件名和行号,以及可选的模块名和注册表(应为模块的 " +"``__warningregistry__`` 字典)。 模块名称默认为去除了 ``.py`` 的文件名;如果未传递注册表,警告就不会被抑制。 " +"*message* 必须是个字符串,*category* 是 :exc:`Warning` 的子类;或者*message* 可为 " +":exc:`Warning` 的实例,且 *category* 将被忽略。" + +#: ../../library/warnings.rst:431 +msgid "" +"*module_globals*, if supplied, should be the global namespace in use by the " +"code for which the warning is issued. (This argument is used to support " +"displaying source for modules found in zipfiles or other non-filesystem " +"import sources)." +msgstr "*module_globals* 应为发出警告的代码所用的全局命名空间。(该参数用于从 zip 文件或其他非文件系统导入模块时显式源码)。" + +#: ../../library/warnings.rst:439 +msgid "Add the *source* parameter." +msgstr "加入 *source* 参数。" + +#: ../../library/warnings.rst:445 +msgid "" +"Write a warning to a file. The default implementation calls " +"``formatwarning(message, category, filename, lineno, line)`` and writes the " +"resulting string to *file*, which defaults to :data:`sys.stderr`. You may " +"replace this function with any callable by assigning to " +"``warnings.showwarning``. *line* is a line of source code to be included in " +"the warning message; if *line* is not supplied, :func:`showwarning` will try" +" to read the line specified by *filename* and *lineno*." +msgstr "" +"将警告信息写入文件。默认的实现代码是调用 ``formatwarning(message, category, filename, lineno, " +"line)`` 并将结果字符串写入 *file* ,默认文件为 :data:`sys.stderr`。通过将任何可调用对象赋给 " +"``warnings.showwarning`` 可替换掉该函数。*line* 是要包含在警告信息中的一行源代码;如果未提供 " +"*line*,:func:`showwarning` 将尝试读取由*filename* 和 *lineno* 指定的行。" + +#: ../../library/warnings.rst:456 +msgid "" +"Format a warning the standard way. This returns a string which may contain " +"embedded newlines and ends in a newline. *line* is a line of source code to" +" be included in the warning message; if *line* is not supplied, " +":func:`formatwarning` will try to read the line specified by *filename* and " +"*lineno*." +msgstr "" +"以标准方式格式化一条警告信息。将返回一个字符串,可能包含内嵌的换行符,并以换行符结束。如果未提供 " +"*line*,:func:`formatwarning` 将尝试读取由 *filename* 和 *lineno* 指定的行。" + +#: ../../library/warnings.rst:465 +msgid "" +"Insert an entry into the list of :ref:`warnings filter specifications " +"`. The entry is inserted at the front by default; if " +"*append* is true, it is inserted at the end. This checks the types of the " +"arguments, compiles the *message* and *module* regular expressions, and " +"inserts them as a tuple in the list of warnings filters. Entries closer to " +"the front of the list override entries later in the list, if both match a " +"particular warning. Omitted arguments default to a value that matches " +"everything." +msgstr "" +"在 :ref:`警告过滤器种类 ` 列表中插入一条数据项。默认情况下,该数据项将被插到前面;如果 *append* 为 " +"True,则会插到后面。这里会检查参数的类型,编译 *message* 和 *module* " +"正则表达式,并将他们作为一个元组插入警告过滤器的列表中。如果两者都与某种警告匹配,那么靠近列表前面的数据项就会覆盖后面的项。省略的参数默认匹配任意值。" + +#: ../../library/warnings.rst:477 +msgid "" +"Insert a simple entry into the list of :ref:`warnings filter specifications " +"`. The meaning of the function parameters is as for " +":func:`filterwarnings`, but regular expressions are not needed as the filter" +" inserted always matches any message in any module as long as the category " +"and line number match." +msgstr "" +"在 :ref:`警告过滤器种类 ` 列表中插入一条简单数据项。函数参数的含义与 " +":func:`filterwarnings` 相同,但不需要正则表达式,因为插入的过滤器总是匹配任何模块中的任何信息,只要类别和行号匹配即可。" + +#: ../../library/warnings.rst:486 +msgid "" +"Reset the warnings filter. This discards the effect of all previous calls " +"to :func:`filterwarnings`, including that of the :option:`-W` command line " +"options and calls to :func:`simplefilter`." +msgstr "" +"重置警告过滤器。这将丢弃之前对 :func:`filterwarnings` 的所有调用,包括 :option:`-W` 命令行选项和对 " +":func:`simplefilter` 的调用效果。" + +#: ../../library/warnings.rst:492 +msgid "Available Context Managers" +msgstr "可用的上下文管理器" + +#: ../../library/warnings.rst:496 +msgid "" +"A context manager that copies and, upon exit, restores the warnings filter " +"and the :func:`showwarning` function. If the *record* argument is " +":const:`False` (the default) the context manager returns :class:`None` on " +"entry. If *record* is :const:`True`, a list is returned that is " +"progressively populated with objects as seen by a custom :func:`showwarning`" +" function (which also suppresses output to ``sys.stdout``). Each object in " +"the list has attributes with the same names as the arguments to " +":func:`showwarning`." +msgstr "" +"该上下文管理器会复制警告过滤器和 :func:`showwarning` 函数,并在退出时恢复。 如果 *record* 参数是 " +":const:`False` (默认),则在进入时会返回 :class:`None`。 如果 *record* 为 " +":const:`True`,则返回一个列表,列表由自定义 :func:`showwarning` 函数所用对象逐步填充(该函数还会抑制 " +"``sys.stdout`` 的输出)。 列表中每个对象的属性与 :func:`showwarning` 的参数名称相同。" + +#: ../../library/warnings.rst:505 +msgid "" +"The *module* argument takes a module that will be used instead of the module" +" returned when you import :mod:`warnings` whose filter will be protected. " +"This argument exists primarily for testing the :mod:`warnings` module " +"itself." +msgstr "" +"*module* 参数代表一个模块,当导入 :mod:`warnings` 时,将被用于代替返回的模块,其过滤器将被保护。该参数主要是为了测试 " +":mod:`warnings` 模块自身。" + +#: ../../library/warnings.rst:512 +msgid "" +"The :class:`catch_warnings` manager works by replacing and then later " +"restoring the module's :func:`showwarning` function and internal list of " +"filter specifications. This means the context manager is modifying global " +"state and therefore is not thread-safe." +msgstr "" +":class:`catch_warnings` 管理器的工作方式,是替换并随后恢复模块的 :func:`showwarning` " +"函数和内部的过滤器种类列表。这意味着上下文管理器将会修改全局状态,因此不是线程安全的。" diff --git a/library/wave.po b/library/wave.po new file mode 100644 index 000000000..f4a33dfe7 --- /dev/null +++ b/library/wave.po @@ -0,0 +1,310 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) 2001-2024, Python Software Foundation +# This file is distributed under the same license as the Python package. +# FIRST AUTHOR , YEAR. +# +# Translators: +# sunsol s , 2018 +# Larry Wang , 2018 +# Freesand Leo , 2019 +# Rafael Fontenelle , 2024 +# +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: Python 3.9\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2024-02-16 21:12+0000\n" +"PO-Revision-Date: 2017-02-16 23:34+0000\n" +"Last-Translator: Rafael Fontenelle , 2024\n" +"Language-Team: Chinese (China) (https://app.transifex.com/python-doc/teams/5390/zh_CN/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: zh_CN\n" +"Plural-Forms: nplurals=1; plural=0;\n" + +#: ../../library/wave.rst:2 +msgid ":mod:`wave` --- Read and write WAV files" +msgstr ":mod:`wave` --- 读写WAV格式文件 " + +#: ../../library/wave.rst:10 +msgid "**Source code:** :source:`Lib/wave.py`" +msgstr "**源代码:** :source:`Lib/wave.py`" + +#: ../../library/wave.rst:14 +msgid "" +"The :mod:`wave` module provides a convenient interface to the WAV sound " +"format. It does not support compression/decompression, but it does support " +"mono/stereo." +msgstr ":mod:`wave` 模块提供了一个处理 WAV 声音格式的便利接口。它不支持压缩/解压,但是支持单声道/立体声。" + +#: ../../library/wave.rst:17 +msgid "The :mod:`wave` module defines the following function and exception:" +msgstr ":mod:`wave` 模块定义了以下函数和异常:" + +#: ../../library/wave.rst:22 +msgid "" +"If *file* is a string, open the file by that name, otherwise treat it as a " +"file-like object. *mode* can be:" +msgstr "如果 *file* 是一个字符串,打开对应文件名的文件。否则就把它作为文件型对象来处理。*mode* 可以为以下值:" + +#: ../../library/wave.rst:26 +msgid "``'rb'``" +msgstr "``'rb'``" + +#: ../../library/wave.rst:26 +msgid "Read only mode." +msgstr "只读模式。" + +#: ../../library/wave.rst:29 +msgid "``'wb'``" +msgstr "``'wb'``" + +#: ../../library/wave.rst:29 +msgid "Write only mode." +msgstr "只写模式。" + +#: ../../library/wave.rst:31 +msgid "Note that it does not allow read/write WAV files." +msgstr "注意不支持同时读写WAV文件。" + +#: ../../library/wave.rst:33 +msgid "" +"A *mode* of ``'rb'`` returns a :class:`Wave_read` object, while a *mode* of " +"``'wb'`` returns a :class:`Wave_write` object. If *mode* is omitted and a " +"file-like object is passed as *file*, ``file.mode`` is used as the default " +"value for *mode*." +msgstr "" +"*mode* 设为 ``'rb'`` 时返回一个 :class:`Wave_read` 对象,而 *mode* 设为 ``'wb'`` 时返回一个 " +":class:`Wave_write` 对象。如果省略 *mode* 并指定 *file* 来传入一个文件型对象,则 ``file.mode`` " +"会被用作 *mode* 的默认值。" + +#: ../../library/wave.rst:38 +msgid "" +"If you pass in a file-like object, the wave object will not close it when " +"its :meth:`close` method is called; it is the caller's responsibility to " +"close the file object." +msgstr "" +"如果操作的是文件对象,当使用 wave 对象的 :meth:`close` 方法时,并不会真正关闭文件对象,这需要调用者负责来关闭文件对象。" + +#: ../../library/wave.rst:42 +msgid "" +"The :func:`.open` function may be used in a :keyword:`with` statement. When" +" the :keyword:`!with` block completes, the :meth:`Wave_read.close() " +"` or :meth:`Wave_write.close() " +"` method is called." +msgstr "" +":func:`.open` 函数可以在 :keyword:`with` 语句中使用。 当 :keyword:`!with` " +"阻塞结束时,:meth:`Wave_read.close() ` 或 " +":meth:`Wave_write.close() ` 方法会被调用。" + +#: ../../library/wave.rst:47 ../../library/wave.rst:163 +msgid "Added support for unseekable files." +msgstr "添加了对不可搜索文件的支持。" + +#: ../../library/wave.rst:52 +msgid "" +"An error raised when something is impossible because it violates the WAV " +"specification or hits an implementation deficiency." +msgstr "当不符合WAV格式或无法操作时引发的错误。" + +#: ../../library/wave.rst:59 +msgid "Wave_read Objects" +msgstr "Wave_read对象" + +#: ../../library/wave.rst:61 +msgid "" +"Wave_read objects, as returned by :func:`.open`, have the following methods:" +msgstr "由 :func:`.open` 返回的 Wave_read 对象,有以下几种方法:" + +#: ../../library/wave.rst:66 +msgid "" +"Close the stream if it was opened by :mod:`wave`, and make the instance " +"unusable. This is called automatically on object collection." +msgstr "关闭 :mod:`wave` 打开的数据流并使对象不可用。当对象销毁时会自动调用。" + +#: ../../library/wave.rst:72 +msgid "Returns number of audio channels (``1`` for mono, ``2`` for stereo)." +msgstr "返回声道数量(``1`` 为单声道,``2`` 为立体声)" + +#: ../../library/wave.rst:77 +msgid "Returns sample width in bytes." +msgstr "返回采样字节长度。" + +#: ../../library/wave.rst:82 +msgid "Returns sampling frequency." +msgstr "返回采样频率。" + +#: ../../library/wave.rst:87 +msgid "Returns number of audio frames." +msgstr "返回音频总帧数。" + +#: ../../library/wave.rst:92 +msgid "Returns compression type (``'NONE'`` is the only supported type)." +msgstr "返回压缩类型(只支持 ``'NONE'`` 类型)" + +#: ../../library/wave.rst:97 +msgid "" +"Human-readable version of :meth:`getcomptype`. Usually ``'not compressed'`` " +"parallels ``'NONE'``." +msgstr ":meth:`getcomptype` 的通俗版本。使用 ``'not compressed'`` 代替 ``'NONE'``。" + +#: ../../library/wave.rst:103 +msgid "" +"Returns a :func:`~collections.namedtuple` ``(nchannels, sampwidth, " +"framerate, nframes, comptype, compname)``, equivalent to output of the " +":meth:`get\\*` methods." +msgstr "" +"返回一个 :func:`~collections.namedtuple` ``(nchannels, sampwidth, framerate, " +"nframes, comptype, compname)``,与 :meth:`get\\*` 方法的输出相同。" + +#: ../../library/wave.rst:110 +msgid "" +"Reads and returns at most *n* frames of audio, as a :class:`bytes` object." +msgstr "读取并返回以 :class:`bytes` 对象表示的最多 *n* 帧音频。" + +#: ../../library/wave.rst:115 +msgid "Rewind the file pointer to the beginning of the audio stream." +msgstr "重置文件指针至音频开头." + +#: ../../library/wave.rst:117 +msgid "" +"The following two methods are defined for compatibility with the :mod:`aifc`" +" module, and don't do anything interesting." +msgstr "以下两个方法是为了和 :mod:`aifc` 保持兼容,实际不做任何事情。" + +#: ../../library/wave.rst:123 +msgid "Returns ``None``." +msgstr "返回 ``None``。" + +#: ../../library/wave.rst:128 +msgid "Raise an error." +msgstr "引发错误异常。" + +#: ../../library/wave.rst:130 +msgid "" +"The following two methods define a term \"position\" which is compatible " +"between them, and is otherwise implementation dependent." +msgstr "以下两个方法都使用指针,具体实现由其底层决定。" + +#: ../../library/wave.rst:136 +msgid "Set the file pointer to the specified position." +msgstr "设置文件指针到指定位置。" + +#: ../../library/wave.rst:141 +msgid "Return current file pointer position." +msgstr "返回当前文件指针位置。" + +#: ../../library/wave.rst:147 +msgid "Wave_write Objects" +msgstr "Wave_write 对象" + +#: ../../library/wave.rst:149 +msgid "" +"For seekable output streams, the ``wave`` header will automatically be " +"updated to reflect the number of frames actually written. For unseekable " +"streams, the *nframes* value must be accurate when the first frame data is " +"written. An accurate *nframes* value can be achieved either by calling " +":meth:`~Wave_write.setnframes` or :meth:`~Wave_write.setparams` with the " +"number of frames that will be written before :meth:`~Wave_write.close` is " +"called and then using :meth:`~Wave_write.writeframesraw` to write the frame " +"data, or by calling :meth:`~Wave_write.writeframes` with all of the frame " +"data to be written. In the latter case :meth:`~Wave_write.writeframes` will" +" calculate the number of frames in the data and set *nframes* accordingly " +"before writing the frame data." +msgstr "" +"对于可查找的输出流,``wave`` 头将自动更新以反映实际写入的帧数。 对于不可查找的流,当写入第一帧时 *nframes* 值必须准确。 获取准确的" +" *nframes* 值可以通过调用 :meth:`~Wave_write.setnframes` 或 " +":meth:`~Wave_write.setparams` 并附带 :meth:`~Wave_write.close` " +"被调用之前将要写入的帧数,然后使用 :meth:`~Wave_write.writeframesraw` 来写入帧数据,或者通过调用 " +":meth:`~Wave_write.writeframes` 并附带所有要写入的帧。 在后一种情况下 " +":meth:`~Wave_write.writeframes` 将计算数据中的帧数并在写入帧数据之前相应地设置 *nframes*。" + +#: ../../library/wave.rst:161 +msgid "" +"Wave_write objects, as returned by :func:`.open`, have the following " +"methods:" +msgstr "由 :func:`.open` 返回的 Wave_write 对象,有以下几种方法:" + +#: ../../library/wave.rst:169 +msgid "" +"Make sure *nframes* is correct, and close the file if it was opened by " +":mod:`wave`. This method is called upon object collection. It will raise " +"an exception if the output stream is not seekable and *nframes* does not " +"match the number of frames actually written." +msgstr "" +"确保 *nframes* 是正确的,并在文件被 :mod:`wave` 打开时关闭它。 此方法会在对象收集时被调用。 如果输出流不可查找且 " +"*nframes* 与实际写入的帧数不匹配时引发异常。" + +#: ../../library/wave.rst:177 +msgid "Set the number of channels." +msgstr "设置声道数。" + +#: ../../library/wave.rst:182 +msgid "Set the sample width to *n* bytes." +msgstr "设置采样字节长度为 *n*。" + +#: ../../library/wave.rst:187 +msgid "Set the frame rate to *n*." +msgstr "设置采样频率为 *n*。" + +#: ../../library/wave.rst:189 +msgid "A non-integral input to this method is rounded to the nearest integer." +msgstr "对此方法的非整数输入会被舍入到最接近的整数。" + +#: ../../library/wave.rst:196 +msgid "" +"Set the number of frames to *n*. This will be changed later if the number " +"of frames actually written is different (this update attempt will raise an " +"error if the output stream is not seekable)." +msgstr "设置总帧数为 *n*。 如果与之后实际写入的帧数不一致此值将会被更改( 如果输出流不可查找则此更改尝试将引发错误)。" + +#: ../../library/wave.rst:203 +msgid "" +"Set the compression type and description. At the moment, only compression " +"type ``NONE`` is supported, meaning no compression." +msgstr "设置压缩格式。目前只支持 ``NONE`` 即无压缩格式。" + +#: ../../library/wave.rst:209 +msgid "" +"The *tuple* should be ``(nchannels, sampwidth, framerate, nframes, comptype," +" compname)``, with values valid for the :meth:`set\\*` methods. Sets all " +"parameters." +msgstr "" +"*tuple* 应该是 ``(nchannels, sampwidth, framerate, nframes, comptype, " +"compname)``,每项的值应可用于 :meth:`set\\*` 方法。设置所有形参。" + +#: ../../library/wave.rst:216 +msgid "" +"Return current position in the file, with the same disclaimer for the " +":meth:`Wave_read.tell` and :meth:`Wave_read.setpos` methods." +msgstr "" +"返回当前文件指针,其指针含义和 :meth:`Wave_read.tell` 以及 :meth:`Wave_read.setpos` 是一致的。" + +#: ../../library/wave.rst:222 +msgid "Write audio frames, without correcting *nframes*." +msgstr "写入音频数据但不更新 *nframes*。" + +#: ../../library/wave.rst:224 ../../library/wave.rst:235 +msgid "Any :term:`bytes-like object` is now accepted." +msgstr "现在可接受任意 :term:`bytes-like object`。" + +#: ../../library/wave.rst:230 +msgid "" +"Write audio frames and make sure *nframes* is correct. It will raise an " +"error if the output stream is not seekable and the total number of frames " +"that have been written after *data* has been written does not match the " +"previously set value for *nframes*." +msgstr "" +"写入音频帧并确保 *nframes* 是正确的。 如果输出流不可查找且在 *data* 被写入之后写入的总帧数与之前设定的 *nframes* " +"值不匹配将会引发错误。" + +#: ../../library/wave.rst:239 +msgid "" +"Note that it is invalid to set any parameters after calling " +":meth:`writeframes` or :meth:`writeframesraw`, and any attempt to do so will" +" raise :exc:`wave.Error`." +msgstr "" +"注意在调用 :meth:`writeframes` 或 :meth:`writeframesraw` " +"之后再设置任何格式参数是无效的,而且任何这样的尝试将引发 :exc:`wave.Error`。" diff --git a/library/weakref.po b/library/weakref.po new file mode 100644 index 000000000..678d2043d --- /dev/null +++ b/library/weakref.po @@ -0,0 +1,638 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) 2001-2025, Python Software Foundation +# This file is distributed under the same license as the Python package. +# FIRST AUTHOR , YEAR. +# +# Translators: +# ww song , 2018 +# Menghua Xiao , 2018 +# Xu Siyuan, 2019 +# Freesand Leo , 2022 +# Rafael Fontenelle , 2025 +# +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: Python 3.9\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2025-02-07 16:40+0000\n" +"PO-Revision-Date: 2017-02-16 23:35+0000\n" +"Last-Translator: Rafael Fontenelle , 2025\n" +"Language-Team: Chinese (China) (https://app.transifex.com/python-doc/teams/5390/zh_CN/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: zh_CN\n" +"Plural-Forms: nplurals=1; plural=0;\n" + +#: ../../library/weakref.rst:2 +msgid ":mod:`weakref` --- Weak references" +msgstr ":mod:`weakref` --- 弱引用" + +#: ../../library/weakref.rst:12 +msgid "**Source code:** :source:`Lib/weakref.py`" +msgstr "**源代码:** :source:`Lib/weakref.py`" + +#: ../../library/weakref.rst:16 +msgid "" +"The :mod:`weakref` module allows the Python programmer to create :dfn:`weak " +"references` to objects." +msgstr ":mod:`weakref` 模块允许 Python 程序员创建对象的 :dfn:`弱引用` 。" + +#: ../../library/weakref.rst:22 +msgid "" +"In the following, the term :dfn:`referent` means the object which is " +"referred to by a weak reference." +msgstr "在下文中,术语 :dfn:`所指对象` 表示弱引用所指向的对象。" + +#: ../../library/weakref.rst:25 +msgid "" +"A weak reference to an object is not enough to keep the object alive: when " +"the only remaining references to a referent are weak references, " +":term:`garbage collection` is free to destroy the referent and reuse its " +"memory for something else. However, until the object is actually destroyed " +"the weak reference may return the object even if there are no strong " +"references to it." +msgstr "" +"对象的弱引用不能保证对象存活:当所指对像的引用只剩弱引用时, :term:`垃圾回收 ` " +"可以销毁所指对象,并将其内存重新用于其它用途。但是,在实际销毁对象之前,即使没有强引用,弱引用也能返回该对象。" + +#: ../../library/weakref.rst:31 +msgid "" +"A primary use for weak references is to implement caches or mappings holding" +" large objects, where it's desired that a large object not be kept alive " +"solely because it appears in a cache or mapping." +msgstr "弱引用的一个主要用途是实现一个存储大型对象的缓存或映射,但又不希望该大型对象仅因为它只出现在这个缓存或映射中而保持存活。" + +#: ../../library/weakref.rst:35 +msgid "" +"For example, if you have a number of large binary image objects, you may " +"wish to associate a name with each. If you used a Python dictionary to map " +"names to images, or images to names, the image objects would remain alive " +"just because they appeared as values or keys in the dictionaries. The " +":class:`WeakKeyDictionary` and :class:`WeakValueDictionary` classes supplied" +" by the :mod:`weakref` module are an alternative, using weak references to " +"construct mappings that don't keep objects alive solely because they appear " +"in the mapping objects. If, for example, an image object is a value in a " +":class:`WeakValueDictionary`, then when the last remaining references to " +"that image object are the weak references held by weak mappings, garbage " +"collection can reclaim the object, and its corresponding entries in weak " +"mappings are simply deleted." +msgstr "" +"例如,如果你有许多大型二进制图像对象,你可能希望为每个对象关联一个名称。如果你使用 Python " +"字典来将名称映射到图像,或将图像映射到名称,那么图像对象将因为它们在字典中作为值或键而保持存活。 :mod:`weakref` 模块提供的 " +":class:`WeakKeyDictionary` 和 :class:`WeakValueDictionary` 类可以替代 Python " +"字典,它们使用弱引用来构造映射,这种映射不会仅因为对象出现在映射中而使对象保持存活。例如,如果一个图像对象是 " +":class:`WeakValueDictionary` " +"中的值,那么当对该图像对象的剩余引用是弱映射对象所持有的弱引用时,垃圾回收器将回收该对象,并删除弱映射对象中相应的条目。" + +#: ../../library/weakref.rst:48 +msgid "" +":class:`WeakKeyDictionary` and :class:`WeakValueDictionary` use weak " +"references in their implementation, setting up callback functions on the " +"weak references that notify the weak dictionaries when a key or value has " +"been reclaimed by garbage collection. :class:`WeakSet` implements the " +":class:`set` interface, but keeps weak references to its elements, just like" +" a :class:`WeakKeyDictionary` does." +msgstr "" +":class:`WeakKeyDictionary` 和 :class:`WeakValueDictionary` " +"在它们的实现中使用了弱引用,并在弱引用上设置当键或值被垃圾回收器回收时通知弱字典的回调函数。 :class:`WeakSet` 实现了 " +":class:`set` 接口,但像 :class:`WeakKeyDictionary` 一样,只持有其元素的弱引用。" + +#: ../../library/weakref.rst:55 +msgid "" +":class:`finalize` provides a straight forward way to register a cleanup " +"function to be called when an object is garbage collected. This is simpler " +"to use than setting up a callback function on a raw weak reference, since " +"the module automatically ensures that the finalizer remains alive until the " +"object is collected." +msgstr "" +":class:`finalize` " +"提供了一种直接的方法来注册当对象被垃圾收集时要调用的清理函数。这比在普通的弱引用上设置回调函数的方式更简单,因为模块会自动确保对象被回收前终结器一直保持存活。" + +#: ../../library/weakref.rst:61 +msgid "" +"Most programs should find that using one of these weak container types or " +":class:`finalize` is all they need -- it's not usually necessary to create " +"your own weak references directly. The low-level machinery is exposed by " +"the :mod:`weakref` module for the benefit of advanced uses." +msgstr "" +"这些弱容器类型之一或者 :class:`finalize` 就是大多数程序所需要的——通常不需要直接创建自己的弱引用。:mod:`weakref` " +"模块暴露了底层机制,以便用于高级用途。" + +#: ../../library/weakref.rst:66 +msgid "" +"Not all objects can be weakly referenced; those objects which can include " +"class instances, functions written in Python (but not in C), instance " +"methods, sets, frozensets, some :term:`file objects `, " +":term:`generators `, type objects, sockets, arrays, deques, " +"regular expression pattern objects, and code objects." +msgstr "" +"并非所有对象都可以被弱引用;可以被弱引用的对象包括类实例,用 Python(而不是用 C)编写的函数,实例方法、集合、冻结集合,某些 " +":term:`文件对象 `,:term:`生成器 " +"`,类型对象,套接字,数组,双端队列,正则表达式模式对象以及代码对象等。" + +#: ../../library/weakref.rst:72 +msgid "Added support for thread.lock, threading.Lock, and code objects." +msgstr "添加了对 thread.lock,threading.Lock 和代码对象的支持。" + +#: ../../library/weakref.rst:75 +msgid "" +"Several built-in types such as :class:`list` and :class:`dict` do not " +"directly support weak references but can add support through subclassing::" +msgstr "一些内置类型,如 :class:`list` 和 :class:`dict`,不直接支持弱引用,但可以通过子类化添加支持::" + +#: ../../library/weakref.rst:85 +msgid "" +"Other built-in types such as :class:`tuple` and :class:`int` do not support " +"weak references even when subclassed." +msgstr "其他内置类型,如 :class:`tuple` 和 :class:`int`,不支持弱引用,即使通过子类化也不支持。" + +#: ../../library/weakref.rst:88 +msgid "" +"Extension types can easily be made to support weak references; see " +":ref:`weakref-support`." +msgstr "可以轻松地使扩展类型支持弱引用;参见 :ref:`weakref-support`。" + +#: ../../library/weakref.rst:91 +msgid "" +"When ``__slots__`` are defined for a given type, weak reference support is " +"disabled unless a ``'__weakref__'`` string is also present in the sequence " +"of strings in the ``__slots__`` declaration. See :ref:`__slots__ " +"documentation ` for details." +msgstr "" +"当为某个给定类型定义了 ``__slots__`` 时,弱引用支持会被禁用,除非将 ``'__weakref__'`` 字符串也加入到 " +"``__slots__`` 声明的字符串序列中。 请参阅 :ref:`__slots__ 文档 ` 了解详情。" + +#: ../../library/weakref.rst:98 +msgid "" +"Return a weak reference to *object*. The original object can be retrieved " +"by calling the reference object if the referent is still alive; if the " +"referent is no longer alive, calling the reference object will cause " +":const:`None` to be returned. If *callback* is provided and not " +":const:`None`, and the returned weakref object is still alive, the callback " +"will be called when the object is about to be finalized; the weak reference " +"object will be passed as the only parameter to the callback; the referent " +"will no longer be available." +msgstr "" +"返回 *object* 的弱引用。如果所指对象存活,则可以通过调用引用对象来获取原始对象;如果所指对象不存在,则调用引用对象将得到 " +":const:`None` 。如果提供了值不是 :const:`None` 的 " +"*callback*,并且返回的弱引用对象仍然存活,则在对象即将终结时将调用回调函数;弱引用对象将作为回调函数的唯一参数传递;然后所指对象将不再可用。" + +#: ../../library/weakref.rst:106 +msgid "" +"It is allowable for many weak references to be constructed for the same " +"object. Callbacks registered for each weak reference will be called from the" +" most recently registered callback to the oldest registered callback." +msgstr "允许为同一个对象的构造多个弱引用。每个弱引用注册的回调函数将按从最近注册的回调函数,到最早注册的回调函数的顺序调用。" + +#: ../../library/weakref.rst:110 +msgid "" +"Exceptions raised by the callback will be noted on the standard error " +"output, but cannot be propagated; they are handled in exactly the same way " +"as exceptions raised from an object's :meth:`__del__` method." +msgstr "回调所引发的异常将记录于标准错误输出,但无法被传播;它们会按与对象的 :meth:`__del__` 方法所引发的异常相同的方式被处理。" + +#: ../../library/weakref.rst:114 +msgid "" +"Weak references are :term:`hashable` if the *object* is hashable. They will" +" maintain their hash value even after the *object* was deleted. If " +":func:`hash` is called the first time only after the *object* was deleted, " +"the call will raise :exc:`TypeError`." +msgstr "" +"如果 *object* 可哈希,则弱引用也 :term:`可哈希 `。即使在 *object* " +"被删除之后,弱引用仍将保持其哈希值。如果在 *object* 被删除之后才首次调用 :func:`hash`,则该调用将引发 " +":exc:`TypeError`。" + +#: ../../library/weakref.rst:119 +msgid "" +"Weak references support tests for equality, but not ordering. If the " +"referents are still alive, two references have the same equality " +"relationship as their referents (regardless of the *callback*). If either " +"referent has been deleted, the references are equal only if the reference " +"objects are the same object." +msgstr "" +"弱引用支持相等性测试,但不支持排序。如果所指对象仍然存活,两个引用具有与它们的所指对象具有一致的相等关系(无论 *callback* " +"是否相同)。如果删除了任一所指对象,则仅在两个引用指向同一对象时,二者才相等。" + +#: ../../library/weakref.rst:124 +msgid "This is a subclassable type rather than a factory function." +msgstr "这是一个可子类化的类型,而非一个工厂函数。" + +#: ../../library/weakref.rst:128 +msgid "" +"This read-only attribute returns the callback currently associated to the " +"weakref. If there is no callback or if the referent of the weakref is no " +"longer alive then this attribute will have value ``None``." +msgstr "这个只读属性会返回当前关联到弱引用的回调函数。 如果回调函数不存在,或弱引用的所指对象已不存在,则此属性的值为 ``None``。" + +#: ../../library/weakref.rst:132 +msgid "Added the :attr:`__callback__` attribute." +msgstr "添加了 :attr:`__callback__` 属性。" + +#: ../../library/weakref.rst:138 +msgid "" +"Return a proxy to *object* which uses a weak reference. This supports use " +"of the proxy in most contexts instead of requiring the explicit " +"dereferencing used with weak reference objects. The returned object will " +"have a type of either ``ProxyType`` or ``CallableProxyType``, depending on " +"whether *object* is callable. Proxy objects are not :term:`hashable` " +"regardless of the referent; this avoids a number of problems related to " +"their fundamentally mutable nature, and prevent their use as dictionary " +"keys. *callback* is the same as the parameter of the same name to the " +":func:`ref` function." +msgstr "" +"返回 *object* 的一个使用弱引用的代理。 此函数支持在大多数上下文中使用代理,而不要求显式地对所使用的弱引用对象解除引用。 返回的对象类型将为 " +"``ProxyType`` 或 ``CallableProxyType``,具体取决于 *object* 是否可调用。 Proxy 对象不是 " +":term:`hashable` 对象,无论被引用对象是否可哈希;这可避免与它们的基本可变性质相关的多种问题,并可防止它们被用作字典键。 " +"*callback* 与 :func:`ref` 函数的同名形参含义相同。" + +#: ../../library/weakref.rst:147 +msgid "" +"Extended the operator support on proxy objects to include the matrix " +"multiplication operators ``@`` and ``@=``." +msgstr "扩展代理对象所支持的运算符,包括矩阵乘法运算符 ``@`` 和 ``@=``。" + +#: ../../library/weakref.rst:154 +msgid "" +"Return the number of weak references and proxies which refer to *object*." +msgstr "返回指向 *object* 的弱引用和代理的数量。" + +#: ../../library/weakref.rst:159 +msgid "" +"Return a list of all weak reference and proxy objects which refer to " +"*object*." +msgstr "返回由指向 *object* 的所有弱引用和代理构成的列表。" + +#: ../../library/weakref.rst:164 +msgid "" +"Mapping class that references keys weakly. Entries in the dictionary will " +"be discarded when there is no longer a strong reference to the key. This " +"can be used to associate additional data with an object owned by other parts" +" of an application without adding attributes to those objects. This can be " +"especially useful with objects that override attribute accesses." +msgstr "" +"弱引用键的映射类。当不再存在对键的强引用时,字典中的相关条目将被丢弃。这可用于将额外数据与应用程序中其它部分拥有的对象相关联,而无需向这些对象添加属性。这对于重写了属性访问的对象来说特别有用。" + +#: ../../library/weakref.rst:170 +msgid "Added support for ``|`` and ``|=`` operators, specified in :pep:`584`." +msgstr "增加了对 ``|`` 和 ``|=`` 运算符的支持,相关说明见 :pep:`584`。" + +#: ../../library/weakref.rst:173 +msgid "" +":class:`WeakKeyDictionary` objects have an additional method that exposes " +"the internal references directly. The references are not guaranteed to be " +"\"live\" at the time they are used, so the result of calling the references " +"needs to be checked before being used. This can be used to avoid creating " +"references that will cause the garbage collector to keep the keys around " +"longer than needed." +msgstr "" +":class:`WeakKeyDictionary` " +"对象具有一个额外方法,可以直接公开内部引用。这些引用不保证在它们被使用时仍然保持“存活”,因此这些引用的调用结果需要在使用前进行检测。 " +"此方法可用于避免创建会导致垃圾回收器将保留键超出实际需要时长的引用。" + +#: ../../library/weakref.rst:183 +msgid "Return an iterable of the weak references to the keys." +msgstr "返回包含对键的弱引用的可迭代对象。" + +#: ../../library/weakref.rst:188 +msgid "" +"Mapping class that references values weakly. Entries in the dictionary will" +" be discarded when no strong reference to the value exists any more." +msgstr "弱引用值的映射类。当不再存在对该值的强引用时,字典中的条目将被丢弃。" + +#: ../../library/weakref.rst:191 +msgid "" +"Added support for ``|`` and ``|=`` operators, as specified in :pep:`584`." +msgstr "增加了对 ``|`` 和 ``|=`` 运算符的支持,相关说明见 :pep:`584`。" + +#: ../../library/weakref.rst:194 +msgid "" +":class:`WeakValueDictionary` objects have an additional method that has the " +"same issues as the :meth:`keyrefs` method of :class:`WeakKeyDictionary` " +"objects." +msgstr "" +":class:`WeakValueDictionary` 对象具有一个额外方法,此方法存在与 :class:`WeakKeyDictionary` " +"对象的 :meth:`keyrefs` 方法相同的问题。" + +#: ../../library/weakref.rst:201 +msgid "Return an iterable of the weak references to the values." +msgstr "返回包含对值的弱引用的可迭代对象。" + +#: ../../library/weakref.rst:206 +msgid "" +"Set class that keeps weak references to its elements. An element will be " +"discarded when no strong reference to it exists any more." +msgstr "保持对其元素弱引用的集合类。当某个元素没有强引用时,该元素将被丢弃。" + +#: ../../library/weakref.rst:212 +msgid "" +"A custom :class:`ref` subclass which simulates a weak reference to a bound " +"method (i.e., a method defined on a class and looked up on an instance). " +"Since a bound method is ephemeral, a standard weak reference cannot keep " +"hold of it. :class:`WeakMethod` has special code to recreate the bound " +"method until either the object or the original function dies::" +msgstr "" +"一个模拟对绑定方法(即在类中定义并在实例中查找的方法)进行弱引用的自定义 :class:`ref` 子类。 " +"由于绑定方法是临时性的,标准弱引用无法保持它。 :class:`WeakMethod` 包含特别代码用来重新创建绑定方法,直到对象或初始函数被销毁::" + +#: ../../library/weakref.rst:240 +msgid "" +"Return a callable finalizer object which will be called when *obj* is " +"garbage collected. Unlike an ordinary weak reference, a finalizer will " +"always survive until the reference object is collected, greatly simplifying " +"lifecycle management." +msgstr "" +"返回一个可调用的终结器对象,该对象将在 *obj* " +"作为垃圾回收时被调用。与普通的弱引用不同,终结器将总是存活,直到引用对象被回收,这极大地简化了生命周期管理。" + +#: ../../library/weakref.rst:245 +msgid "" +"A finalizer is considered *alive* until it is called (either explicitly or " +"at garbage collection), and after that it is *dead*. Calling a live " +"finalizer returns the result of evaluating ``func(*arg, **kwargs)``, whereas" +" calling a dead finalizer returns :const:`None`." +msgstr "" +"终结器总是被视为 *存活* 直到它被调用(显式调用或在垃圾回收时隐式调用),调用之后它将 *死亡*。 调用存活的终结器将返回 ``func(*arg, " +"**kwargs)`` 的求值结果,而调用死亡的终结器将返回 :const:`None`。" + +#: ../../library/weakref.rst:250 +msgid "" +"Exceptions raised by finalizer callbacks during garbage collection will be " +"shown on the standard error output, but cannot be propagated. They are " +"handled in the same way as exceptions raised from an object's " +":meth:`__del__` method or a weak reference's callback." +msgstr "" +"在垃圾收集期间由终结器回调所引发异常将显示于标准错误输出,但无法被传播。 它们会按与对象的 :meth:`__del__` " +"方法或弱引用的回调所引发异常相同的方式被处理。" + +#: ../../library/weakref.rst:256 +msgid "" +"When the program exits, each remaining live finalizer is called unless its " +":attr:`atexit` attribute has been set to false. They are called in reverse " +"order of creation." +msgstr "当程序退出时,剩余的存活终结器会被调用,除非它们的 :attr:`atexit` 属性已被设为假值。 它们会按与创建时相反的顺序被调用。" + +#: ../../library/weakref.rst:260 +msgid "" +"A finalizer will never invoke its callback during the later part of the " +":term:`interpreter shutdown` when module globals are liable to have been " +"replaced by :const:`None`." +msgstr "" +"终结器在 :term:`interpreter shutdown` 的后期绝不会唤起其回调函数,此时模块全局变量很可能已被替换为 " +":const:`None`。" + +#: ../../library/weakref.rst:266 +msgid "" +"If *self* is alive then mark it as dead and return the result of calling " +"``func(*args, **kwargs)``. If *self* is dead then return :const:`None`." +msgstr "" +"如果 *self* 为存活状态则将其标记为已死亡,并返回调用 ``func(*args, **kwargs)`` 的结果。 如果 *self* " +"已死亡则返回 :const:`None`。" + +#: ../../library/weakref.rst:272 +msgid "" +"If *self* is alive then mark it as dead and return the tuple ``(obj, func, " +"args, kwargs)``. If *self* is dead then return :const:`None`." +msgstr "" +"如果 *self* 为存活状态则将其标记为已死亡,并返回元组 ``(obj, func, args, kwargs)``。 如果 *self* " +"已死亡则返 :const:`None`。" + +#: ../../library/weakref.rst:278 +msgid "" +"If *self* is alive then return the tuple ``(obj, func, args, kwargs)``. If " +"*self* is dead then return :const:`None`." +msgstr "" +"如果 *self* 为存活状态则返回元组 ``(obj, func, args, kwargs)``。 如果 *self* 已死亡则返回 " +":const:`None`。" + +#: ../../library/weakref.rst:283 +msgid "Property which is true if the finalizer is alive, false otherwise." +msgstr "如果终结器为存活状态则该特征属性为真值,否则为假值。" + +#: ../../library/weakref.rst:287 +msgid "" +"A writable boolean property which by default is true. When the program " +"exits, it calls all remaining live finalizers for which :attr:`.atexit` is " +"true. They are called in reverse order of creation." +msgstr "" +"一个可写的布尔型特征属性,默认为真值。 当程序退出时,它会调用所有 :attr:`.atexit` 为真值的剩余存活终结器。 " +"它们会按与创建时相反的顺序被调用。" + +#: ../../library/weakref.rst:294 +msgid "" +"It is important to ensure that *func*, *args* and *kwargs* do not own any " +"references to *obj*, either directly or indirectly, since otherwise *obj* " +"will never be garbage collected. In particular, *func* should not be a " +"bound method of *obj*." +msgstr "" +"很重要的一点是确保 *func*, *args* 和 *kwargs* 不拥有任何对 *obj* 的引用,无论是直接的或是间接的,否则的话 *obj* " +"将永远不会被作为垃圾回收。 特别地,*func* 不应当是 *obj* 的一个绑定方法。" + +#: ../../library/weakref.rst:304 +msgid "The type object for weak references objects." +msgstr "弱引用对象的类型对象。" + +#: ../../library/weakref.rst:309 +msgid "The type object for proxies of objects which are not callable." +msgstr "不可调用对象的代理的类型对象。" + +#: ../../library/weakref.rst:314 +msgid "The type object for proxies of callable objects." +msgstr "可调用对象的代理的类型对象。" + +#: ../../library/weakref.rst:319 +msgid "" +"Sequence containing all the type objects for proxies. This can make it " +"simpler to test if an object is a proxy without being dependent on naming " +"both proxy types." +msgstr "包含所有代理的类型对象的序列。 这可以用于更方便地检测一个对象是否是代理,而不必依赖于两种代理对象的名称。" + +#: ../../library/weakref.rst:327 +msgid ":pep:`205` - Weak References" +msgstr ":pep:`205` - 弱引用" + +#: ../../library/weakref.rst:327 +msgid "" +"The proposal and rationale for this feature, including links to earlier " +"implementations and information about similar features in other languages." +msgstr "此特性的提议和理由,包括早期实现的链接和其他语言中类似特性的相关信息。" + +#: ../../library/weakref.rst:334 +msgid "Weak Reference Objects" +msgstr "弱引用对象" + +#: ../../library/weakref.rst:336 +msgid "" +"Weak reference objects have no methods and no attributes besides " +":attr:`ref.__callback__`. A weak reference object allows the referent to be " +"obtained, if it still exists, by calling it:" +msgstr "弱引用对象没有 :attr:`ref.__callback__` 以外的方法和属性。 一个弱引用对象如果存在,就允许通过调用它来获取引用:" + +#: ../../library/weakref.rst:350 +msgid "" +"If the referent no longer exists, calling the reference object returns " +":const:`None`:" +msgstr "如果引用已不存在,则调用引用对象将返回 :const:`None`:" + +#: ../../library/weakref.rst:357 +msgid "" +"Testing that a weak reference object is still live should be done using the " +"expression ``ref() is not None``. Normally, application code that needs to " +"use a reference object should follow this pattern::" +msgstr "" +"检测一个弱引用对象是否仍然存在应该使用表达式 ``ref() is not None``。 通常,需要使用引用对象的应用代码应当遵循这样的模式::" + +#: ../../library/weakref.rst:370 +msgid "" +"Using a separate test for \"liveness\" creates race conditions in threaded " +"applications; another thread can cause a weak reference to become " +"invalidated before the weak reference is called; the idiom shown above is " +"safe in threaded applications as well as single-threaded applications." +msgstr "" +"使用单独的“存活”测试会在多线程应用中制造竞争条件;其他线程可能导致某个弱引用在该弱引用被调用前就失效;上述的写法在多线程应用和单线程应用中都是安全的。" + +#: ../../library/weakref.rst:375 +msgid "" +"Specialized versions of :class:`ref` objects can be created through " +"subclassing. This is used in the implementation of the " +":class:`WeakValueDictionary` to reduce the memory overhead for each entry in" +" the mapping. This may be most useful to associate additional information " +"with a reference, but could also be used to insert additional processing on " +"calls to retrieve the referent." +msgstr "" +"特别版本的 :class:`ref` 对象可以通过子类化来创建。 在 :class:`WeakValueDictionary` " +"的实现中就使用了这种方式来减少映射中每个条目的内存开销。 这对于将附加信息关联到引用的情况最为适用,但也可以被用于在调用中插入额外处理来提取引用。" + +#: ../../library/weakref.rst:381 +msgid "" +"This example shows how a subclass of :class:`ref` can be used to store " +"additional information about an object and affect the value that's returned " +"when the referent is accessed::" +msgstr "这个例子演示了如何将 :class:`ref` 的一个子类用于存储有关对象的附加信息并在引用被访问时影响其所返回的值::" + +#: ../../library/weakref.rst:408 +msgid "Example" +msgstr "示例" + +#: ../../library/weakref.rst:410 +msgid "" +"This simple example shows how an application can use object IDs to retrieve " +"objects that it has seen before. The IDs of the objects can then be used in" +" other data structures without forcing the objects to remain alive, but the " +"objects can still be retrieved by ID if they do." +msgstr "" +"这个简单的例子演示了一个应用如何使用对象 ID 来提取之前出现过的对象。 然后对象的 ID " +"可以在其它数据结构中使用,而无须强制对象保持存活,但处于存活状态的对象也仍然可以通过 ID 来提取。" + +#: ../../library/weakref.rst:435 +msgid "Finalizer Objects" +msgstr "终结器对象" + +#: ../../library/weakref.rst:437 +msgid "" +"The main benefit of using :class:`finalize` is that it makes it simple to " +"register a callback without needing to preserve the returned finalizer " +"object. For instance" +msgstr "使用 :class:`finalize` 的主要好处在于它能更简便地注册回调函数,而无须保留所返回的终结器对象。 例如" + +#: ../../library/weakref.rst:451 +msgid "" +"The finalizer can be called directly as well. However the finalizer will " +"invoke the callback at most once." +msgstr "终结器也可以被直接调用。 但是终结器最多只能对回调函数发起一次调用。" + +#: ../../library/weakref.rst:467 +msgid "" +"You can unregister a finalizer using its :meth:`~finalize.detach` method. " +"This kills the finalizer and returns the arguments passed to the constructor" +" when it was created." +msgstr "你可以使用 :meth:`~finalize.detach` 方法来注销一个终结器。 该方法将销毁终结器并返回其被创建时传给构造器的参数。" + +#: ../../library/weakref.rst:481 +msgid "" +"Unless you set the :attr:`~finalize.atexit` attribute to :const:`False`, a " +"finalizer will be called when the program exits if it is still alive. For " +"instance" +msgstr "" +"除非你将 :attr:`~finalize.atexit` 属性设为 :const:`False`,否则终结器在程序退出时如果仍然存活就将被调用。 例如" + +#: ../../library/weakref.rst:496 +msgid "Comparing finalizers with :meth:`__del__` methods" +msgstr "比较终结器与 :meth:`__del__` 方法" + +#: ../../library/weakref.rst:498 +msgid "" +"Suppose we want to create a class whose instances represent temporary " +"directories. The directories should be deleted with their contents when the" +" first of the following events occurs:" +msgstr "假设我们想创建一个类,用它的实例来代表临时目录。 当以下事件中的某一个发生时,这个目录应当与其内容一起被删除:" + +#: ../../library/weakref.rst:502 +msgid "the object is garbage collected," +msgstr "对象被作为垃圾回收," + +#: ../../library/weakref.rst:503 +msgid "the object's :meth:`remove` method is called, or" +msgstr "对象的 :meth:`remove` 方法被调用,或" + +#: ../../library/weakref.rst:504 +msgid "the program exits." +msgstr "程序退出。" + +#: ../../library/weakref.rst:506 +msgid "" +"We might try to implement the class using a :meth:`__del__` method as " +"follows::" +msgstr "我们可以尝试使用 :meth:`__del__` 方法来实现这个类,如下所示::" + +#: ../../library/weakref.rst:525 +msgid "" +"Starting with Python 3.4, :meth:`__del__` methods no longer prevent " +"reference cycles from being garbage collected, and module globals are no " +"longer forced to :const:`None` during :term:`interpreter shutdown`. So this " +"code should work without any issues on CPython." +msgstr "" +"从 Python 3.4 开始,:meth:`__del__` 方法不会再阻止循环引用被作为垃圾回收,并且模块全局变量在 " +":term:`interpreter shutdown` 期间不会被强制设为 :const:`None`。 因此这段代码在 CPython " +"上应该会正常运行而不会出现任何问题。" + +#: ../../library/weakref.rst:530 +msgid "" +"However, handling of :meth:`__del__` methods is notoriously implementation " +"specific, since it depends on internal details of the interpreter's garbage " +"collector implementation." +msgstr "然而,:meth:`__del__` 方法的处理会严重地受到具体实现的影响,因为它依赖于解释器垃圾回收实现方式的内部细节。" + +#: ../../library/weakref.rst:534 +msgid "" +"A more robust alternative can be to define a finalizer which only references" +" the specific functions and objects that it needs, rather than having access" +" to the full state of the object::" +msgstr "更健壮的替代方式可以是定义一个终结器,只引用它所需要的特定函数和对象,而不是获取对整个对象状态的访问权::" + +#: ../../library/weakref.rst:550 +msgid "" +"Defined like this, our finalizer only receives a reference to the details it" +" needs to clean up the directory appropriately. If the object never gets " +"garbage collected the finalizer will still be called at exit." +msgstr "像这样定义后,我们的终结器将只接受一个对其完成正确清理目录任务所需细节的引用。 如果对象一直未被作为垃圾回收,终结器仍会在退出时被调用。" + +#: ../../library/weakref.rst:554 +msgid "" +"The other advantage of weakref based finalizers is that they can be used to " +"register finalizers for classes where the definition is controlled by a " +"third party, such as running code when a module is unloaded::" +msgstr "基于弱引用的终结器还具有另一项优势,就是它们可被用来为定义由第三方控制的类注册终结器,例如当一个模块被卸载时运行特定代码::" + +#: ../../library/weakref.rst:566 +msgid "" +"If you create a finalizer object in a daemonic thread just as the program " +"exits then there is the possibility that the finalizer does not get called " +"at exit. However, in a daemonic thread :func:`atexit.register`, ``try: ... " +"finally: ...`` and ``with: ...`` do not guarantee that cleanup occurs " +"either." +msgstr "" +"如果当程序退出时你恰好在守护线程中创建终结器对象,则有可能该终结器不会在退出时被调用。 但是,在一个守护线程中 " +":func:`atexit.register`, ``try: ... finally: ...`` 和 ``with: ...`` " +"同样不能保证执行清理。" diff --git a/library/webbrowser.po b/library/webbrowser.po new file mode 100644 index 000000000..6f50287c6 --- /dev/null +++ b/library/webbrowser.po @@ -0,0 +1,453 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) 2001-2024, Python Software Foundation +# This file is distributed under the same license as the Python package. +# FIRST AUTHOR , YEAR. +# +# Translators: +# 叶浚安 , 2019 +# 汇民 王 , 2019 +# Freesand Leo , 2022 +# Rafael Fontenelle , 2024 +# +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: Python 3.9\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2024-08-30 16:51+0000\n" +"PO-Revision-Date: 2017-02-16 23:35+0000\n" +"Last-Translator: Rafael Fontenelle , 2024\n" +"Language-Team: Chinese (China) (https://app.transifex.com/python-doc/teams/5390/zh_CN/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: zh_CN\n" +"Plural-Forms: nplurals=1; plural=0;\n" + +#: ../../library/webbrowser.rst:2 +msgid ":mod:`webbrowser` --- Convenient Web-browser controller" +msgstr ":mod:`webbrowser` --- 方便的Web浏览器控制器" + +#: ../../library/webbrowser.rst:10 +msgid "**Source code:** :source:`Lib/webbrowser.py`" +msgstr "**源码:** :source:`Lib/webbrowser.py`" + +#: ../../library/webbrowser.rst:14 +msgid "" +"The :mod:`webbrowser` module provides a high-level interface to allow " +"displaying Web-based documents to users. Under most circumstances, simply " +"calling the :func:`.open` function from this module will do the right thing." +msgstr "" +":mod:`webbrowser` 模块提供了一个高级接口,允许向用户显示基于Web的文档。 在大多数情况下,只需从该模块调用 " +":func:`.open` 函数就可以了。" + +#: ../../library/webbrowser.rst:18 +msgid "" +"Under Unix, graphical browsers are preferred under X11, but text-mode " +"browsers will be used if graphical browsers are not available or an X11 " +"display isn't available. If text-mode browsers are used, the calling " +"process will block until the user exits the browser." +msgstr "" +"在 Unix 下,图形浏览器在 X11 下是首选,但如果图形浏览器不可用或 X11 显示不可用,则将使用文本模式浏览器。 " +"如果使用文本模式浏览器,则调用进程将阻塞,直到用户退出浏览器。" + +#: ../../library/webbrowser.rst:23 +msgid "" +"If the environment variable :envvar:`BROWSER` exists, it is interpreted as " +"the :data:`os.pathsep`-separated list of browsers to try ahead of the " +"platform defaults. When the value of a list part contains the string " +"``%s``, then it is interpreted as a literal browser command line to be used " +"with the argument URL substituted for ``%s``; if the part does not contain " +"``%s``, it is simply interpreted as the name of the browser to launch. [1]_" +msgstr "" +"如果存在环境变量 :envvar:`BROWSER` ,则将其解释为 :data:`os.pathsep` 分隔的浏览器列表,以便在平台默认值之前尝试。" +" 当列表部分的值包含字符串 ``%s`` 时,它被解释为一个文字浏览器命令行,用于替换 ``%s`` 的参数 URL ;如果该部分不包含 " +"``%s``,则它只被解释为要启动的浏览器的名称。 [1]_" + +#: ../../library/webbrowser.rst:30 +msgid "" +"For non-Unix platforms, or when a remote browser is available on Unix, the " +"controlling process will not wait for the user to finish with the browser, " +"but allow the remote browser to maintain its own windows on the display. If" +" remote browsers are not available on Unix, the controlling process will " +"launch a new browser and wait." +msgstr "" +"对于非 Unix 平台,或者当 Unix 上有远程浏览器时,控制过程不会等待用户完成浏览器,而是允许远程浏览器在显示界面上维护自己的窗口。 如果 " +"Unix 上没有远程浏览器,控制进程将启动一个新的浏览器并等待。" + +#: ../../library/webbrowser.rst:36 +msgid "" +"The script :program:`webbrowser` can be used as a command-line interface for" +" the module. It accepts a URL as the argument. It accepts the following " +"optional parameters: ``-n`` opens the URL in a new browser window, if " +"possible; ``-t`` opens the URL in a new browser page (\"tab\"). The options " +"are, naturally, mutually exclusive. Usage example::" +msgstr "" +"脚本 :program:`webbrowser` 可用作模块的命令行界面。它接受一个 URL 作为参数,并接受以下可选参数:``-n`` " +"在可能的情况下在新的浏览器窗口中打开 URL;``-t`` 在新的浏览器页面(\"tab\")中打开 URL。这些选项自然是相互排斥的。使用示例:" + +#: ../../library/webbrowser.rst:44 +msgid "The following exception is defined:" +msgstr "定义了以下异常:" + +#: ../../library/webbrowser.rst:49 +msgid "Exception raised when a browser control error occurs." +msgstr "发生浏览器控件错误时引发异常。" + +#: ../../library/webbrowser.rst:51 +msgid "The following functions are defined:" +msgstr "定义了以下函数:" + +#: ../../library/webbrowser.rst:56 +msgid "" +"Display *url* using the default browser. If *new* is 0, the *url* is opened " +"in the same browser window if possible. If *new* is 1, a new browser window" +" is opened if possible. If *new* is 2, a new browser page (\"tab\") is " +"opened if possible. If *autoraise* is ``True``, the window is raised if " +"possible (note that under many window managers this will occur regardless of" +" the setting of this variable)." +msgstr "" +"使用默认浏览器显示 *url*。 如果 *new* 为 0,则尽可能在同一浏览器窗口中打开 *url*。 如果 *new* 为 " +"1,则尽可能打开新的浏览器窗口。 如果 *new* 为 2,则尽可能打开新的浏览器页面(“标签”)。 如果 *autoraise* 为 " +"“True”,则会尽可能置前窗口(请注意,在许多窗口管理器下,无论此变量的设置如何,都会置前窗口)。" + +#: ../../library/webbrowser.rst:63 +msgid "" +"Note that on some platforms, trying to open a filename using this function, " +"may work and start the operating system's associated program. However, this" +" is neither supported nor portable." +msgstr "请注意,在某些平台上,尝试使用此函数打开文件名,可能会起作用并启动操作系统的关联程序。 但是,这种方式不被支持也不可移植。" + +#: ../../library/webbrowser.rst:67 +msgid "" +"Raises an :ref:`auditing event ` ``webbrowser.open`` with argument" +" ``url``." +msgstr "引发一个 :ref:`审计事件 ` ``webbrowser.open`` 并附带参数 ``url``。" + +#: ../../library/webbrowser.rst:72 +msgid "" +"Open *url* in a new window of the default browser, if possible, otherwise, " +"open *url* in the only browser window." +msgstr "如果可能,在默认浏览器的新窗口中打开 *url*,否则,在唯一的浏览器窗口中打开 *url*。" + +#: ../../library/webbrowser.rst:77 +msgid "" +"Open *url* in a new page (\"tab\") of the default browser, if possible, " +"otherwise equivalent to :func:`open_new`." +msgstr "如果可能,在默认浏览器的新页面(“标签”)中打开 *url*,否则等效于 :func:`open_new`。" + +#: ../../library/webbrowser.rst:83 +msgid "" +"Return a controller object for the browser type *using*. If *using* is " +"``None``, return a controller for a default browser appropriate to the " +"caller's environment." +msgstr "" +"返回浏览器类型为 *using* 指定的控制器对象。 如果 *using* 为 ``None``,则返回适用于调用者环境的默认浏览器的控制器。" + +#: ../../library/webbrowser.rst:90 +msgid "" +"Register the browser type *name*. Once a browser type is registered, the " +":func:`get` function can return a controller for that browser type. If " +"*instance* is not provided, or is ``None``, *constructor* will be called " +"without parameters to create an instance when needed. If *instance* is " +"provided, *constructor* will never be called, and may be ``None``." +msgstr "" +"注册 *name* 浏览器类型。 注册浏览器类型后, :func:`get` 函数可以返回该浏览器类型的控制器。 如果没有提供 " +"*instance*,或者为 ``None``,*constructor* 将在没有参数的情况下被调用,以在需要时创建实例。 如果提供了 " +"*instance*,则永远不会调用 *constructor*,并且可能是 ``None``。" + +#: ../../library/webbrowser.rst:96 +msgid "" +"Setting *preferred* to ``True`` makes this browser a preferred result for a " +":func:`get` call with no argument. Otherwise, this entry point is only " +"useful if you plan to either set the :envvar:`BROWSER` variable or call " +":func:`get` with a nonempty argument matching the name of a handler you " +"declare." +msgstr "" +"将 *preferred* 设置为 ``True`` 使得这个浏览器成为 :func:`get` 不带参数调用的首选结果。 否则,只有在您计划设置 " +":envvar:`BROWSER` 变量,或使用与您声明的处理程序的名称相匹配的非空参数调用 :func:`get` 时,此入口点才有用。" + +#: ../../library/webbrowser.rst:102 +msgid "*preferred* keyword-only parameter was added." +msgstr "添加了仅关键字参数 *preferred*。" + +#: ../../library/webbrowser.rst:105 +msgid "" +"A number of browser types are predefined. This table gives the type names " +"that may be passed to the :func:`get` function and the corresponding " +"instantiations for the controller classes, all defined in this module." +msgstr "预定义了许多浏览器类型。 此表给出了可以传递给 :func:`get` 函数的类型名称以及控制器类的相应实例化,这些都在此模块中定义。" + +#: ../../library/webbrowser.rst:110 +msgid "Type Name" +msgstr "类型名" + +#: ../../library/webbrowser.rst:110 +msgid "Class Name" +msgstr "类名" + +#: ../../library/webbrowser.rst:110 +msgid "Notes" +msgstr "备注" + +#: ../../library/webbrowser.rst:112 +msgid "``'mozilla'``" +msgstr "``'mozilla'``" + +#: ../../library/webbrowser.rst:112 ../../library/webbrowser.rst:114 +msgid ":class:`Mozilla('mozilla')`" +msgstr ":class:`Mozilla('mozilla')`" + +#: ../../library/webbrowser.rst:114 +msgid "``'firefox'``" +msgstr "``'firefox'``" + +#: ../../library/webbrowser.rst:116 +msgid "``'netscape'``" +msgstr "``'netscape'``" + +#: ../../library/webbrowser.rst:116 +msgid ":class:`Mozilla('netscape')`" +msgstr ":class:`Mozilla('netscape')`" + +#: ../../library/webbrowser.rst:118 +msgid "``'galeon'``" +msgstr "``'galeon'``" + +#: ../../library/webbrowser.rst:118 +msgid ":class:`Galeon('galeon')`" +msgstr ":class:`Galeon('galeon')`" + +#: ../../library/webbrowser.rst:120 +msgid "``'epiphany'``" +msgstr "``'epiphany'``" + +#: ../../library/webbrowser.rst:120 +msgid ":class:`Galeon('epiphany')`" +msgstr ":class:`Galeon('epiphany')`" + +#: ../../library/webbrowser.rst:122 +msgid "``'skipstone'``" +msgstr "``'skipstone'``" + +#: ../../library/webbrowser.rst:122 +msgid ":class:`BackgroundBrowser('skipstone')`" +msgstr ":class:`BackgroundBrowser('skipstone')`" + +#: ../../library/webbrowser.rst:124 +msgid "``'kfmclient'``" +msgstr "``'kfmclient'``" + +#: ../../library/webbrowser.rst:124 ../../library/webbrowser.rst:126 +#: ../../library/webbrowser.rst:128 +msgid ":class:`Konqueror()`" +msgstr ":class:`Konqueror()`" + +#: ../../library/webbrowser.rst:124 ../../library/webbrowser.rst:126 +#: ../../library/webbrowser.rst:128 +msgid "\\(1)" +msgstr "\\(1)" + +#: ../../library/webbrowser.rst:126 +msgid "``'konqueror'``" +msgstr "``'konqueror'``" + +#: ../../library/webbrowser.rst:128 +msgid "``'kfm'``" +msgstr "``'kfm'``" + +#: ../../library/webbrowser.rst:130 +msgid "``'mosaic'``" +msgstr "``'mosaic'``" + +#: ../../library/webbrowser.rst:130 +msgid ":class:`BackgroundBrowser('mosaic')`" +msgstr ":class:`BackgroundBrowser('mosaic')`" + +#: ../../library/webbrowser.rst:132 +msgid "``'opera'``" +msgstr "``'opera'``" + +#: ../../library/webbrowser.rst:132 +msgid ":class:`Opera()`" +msgstr ":class:`Opera()`" + +#: ../../library/webbrowser.rst:134 +msgid "``'grail'``" +msgstr "``'grail'``" + +#: ../../library/webbrowser.rst:134 +msgid ":class:`Grail()`" +msgstr ":class:`Grail()`" + +#: ../../library/webbrowser.rst:136 +msgid "``'links'``" +msgstr "``'links'``" + +#: ../../library/webbrowser.rst:136 +msgid ":class:`GenericBrowser('links')`" +msgstr ":class:`GenericBrowser('links')`" + +#: ../../library/webbrowser.rst:138 +msgid "``'elinks'``" +msgstr "``'elinks'``" + +#: ../../library/webbrowser.rst:138 +msgid ":class:`Elinks('elinks')`" +msgstr ":class:`Elinks('elinks')`" + +#: ../../library/webbrowser.rst:140 +msgid "``'lynx'``" +msgstr "``'lynx'``" + +#: ../../library/webbrowser.rst:140 +msgid ":class:`GenericBrowser('lynx')`" +msgstr ":class:`GenericBrowser('lynx')`" + +#: ../../library/webbrowser.rst:142 +msgid "``'w3m'``" +msgstr "``'w3m'``" + +#: ../../library/webbrowser.rst:142 +msgid ":class:`GenericBrowser('w3m')`" +msgstr ":class:`GenericBrowser('w3m')`" + +#: ../../library/webbrowser.rst:144 +msgid "``'windows-default'``" +msgstr "``'windows-default'``" + +#: ../../library/webbrowser.rst:144 +msgid ":class:`WindowsDefault`" +msgstr ":class:`WindowsDefault`" + +#: ../../library/webbrowser.rst:144 +msgid "\\(2)" +msgstr "\\(2)" + +#: ../../library/webbrowser.rst:146 +msgid "``'macosx'``" +msgstr "``'macosx'``" + +#: ../../library/webbrowser.rst:146 +msgid ":class:`MacOSXOSAScript('default')`" +msgstr ":class:`MacOSXOSAScript('default')`" + +#: ../../library/webbrowser.rst:146 ../../library/webbrowser.rst:148 +msgid "\\(3)" +msgstr "\\(3)" + +#: ../../library/webbrowser.rst:148 +msgid "``'safari'``" +msgstr "``'safari'``" + +#: ../../library/webbrowser.rst:148 +msgid ":class:`MacOSXOSAScript('safari')`" +msgstr ":class:`MacOSXOSAScript('safari')`" + +#: ../../library/webbrowser.rst:150 +msgid "``'google-chrome'``" +msgstr "``'google-chrome'``" + +#: ../../library/webbrowser.rst:150 +msgid ":class:`Chrome('google-chrome')`" +msgstr ":class:`Chrome('google-chrome')`" + +#: ../../library/webbrowser.rst:152 +msgid "``'chrome'``" +msgstr "``'chrome'``" + +#: ../../library/webbrowser.rst:152 +msgid ":class:`Chrome('chrome')`" +msgstr ":class:`Chrome('chrome')`" + +#: ../../library/webbrowser.rst:154 +msgid "``'chromium'``" +msgstr "``'chromium'``" + +#: ../../library/webbrowser.rst:154 +msgid ":class:`Chromium('chromium')`" +msgstr ":class:`Chromium('chromium')`" + +#: ../../library/webbrowser.rst:156 +msgid "``'chromium-browser'``" +msgstr "``'chromium-browser'``" + +#: ../../library/webbrowser.rst:156 +msgid ":class:`Chromium('chromium-browser')`" +msgstr ":class:`Chromium('chromium-browser')`" + +#: ../../library/webbrowser.rst:159 +msgid "Notes:" +msgstr "注释:" + +#: ../../library/webbrowser.rst:162 +msgid "" +"\"Konqueror\" is the file manager for the KDE desktop environment for Unix, " +"and only makes sense to use if KDE is running. Some way of reliably " +"detecting KDE would be nice; the :envvar:`KDEDIR` variable is not " +"sufficient. Note also that the name \"kfm\" is used even when using the " +":program:`konqueror` command with KDE 2 --- the implementation selects the " +"best strategy for running Konqueror." +msgstr "" +"\"Konqueror\" 是用于 Unix 的 KDE 桌面环境的文件管理器,只有在运行 KDE 时使用才有意义。最好能有某种方法可靠地检测 " +"KDE;仅有 :envvar:`KDEDIR` 变量还不够。还要注意的是,即使在 KDE 2 " +"中使用命令:program:`konqueror`,\"kfm\" 这个名字也会被使用 —— 实现会选择运行 Konqueror 的最佳策略。" + +#: ../../library/webbrowser.rst:169 +msgid "Only on Windows platforms." +msgstr "仅限 Windows 平台。" + +#: ../../library/webbrowser.rst:172 +msgid "Only on macOS platform." +msgstr "仅适用于 macOS 平台。" + +#: ../../library/webbrowser.rst:174 +msgid "Support for Chrome/Chromium has been added." +msgstr "添加了对 Chrome/Chromium 的支持。" + +#: ../../library/webbrowser.rst:177 +msgid "Here are some simple examples::" +msgstr "以下是一些简单的例子::" + +#: ../../library/webbrowser.rst:191 +msgid "Browser Controller Objects" +msgstr "浏览器控制器对象" + +#: ../../library/webbrowser.rst:193 +msgid "" +"Browser controllers provide these methods which parallel three of the " +"module-level convenience functions:" +msgstr "浏览器控制器提供三个与模块级便捷函数相同的方法:" + +#: ../../library/webbrowser.rst:199 +msgid "" +"Display *url* using the browser handled by this controller. If *new* is 1, a" +" new browser window is opened if possible. If *new* is 2, a new browser page" +" (\"tab\") is opened if possible." +msgstr "" +"使用此控制器处理的浏览器显示 *url*。 如果 *new* 为 1,则尽可能打开新的浏览器窗口。 如果 *new* 为 " +"2,则尽可能打开新的浏览器页面(“标签”)。" + +#: ../../library/webbrowser.rst:206 +msgid "" +"Open *url* in a new window of the browser handled by this controller, if " +"possible, otherwise, open *url* in the only browser window. Alias " +":func:`open_new`." +msgstr "" +"如果可能,在此控制器处理的浏览器的新窗口中打开 *url* ,否则,在唯一的浏览器窗口中打开 *url* 。 别名 :func:`open_new`。" + +#: ../../library/webbrowser.rst:213 +msgid "" +"Open *url* in a new page (\"tab\") of the browser handled by this " +"controller, if possible, otherwise equivalent to :func:`open_new`." +msgstr "如果可能,在此控制器处理的浏览器的新页面(“标签”)中打开 *url*,否则等效于 :func:`open_new`。" + +#: ../../library/webbrowser.rst:218 +msgid "Footnotes" +msgstr "备注" + +#: ../../library/webbrowser.rst:219 +msgid "" +"Executables named here without a full path will be searched in the " +"directories given in the :envvar:`PATH` environment variable." +msgstr "这里命名的不带完整路径的可执行文件将在 :envvar:`PATH` 环境变量给出的目录中搜索。" diff --git a/library/windows.po b/library/windows.po new file mode 100644 index 000000000..455617703 --- /dev/null +++ b/library/windows.po @@ -0,0 +1,33 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) 2001-2022, Python Software Foundation +# This file is distributed under the same license as the Python package. +# FIRST AUTHOR , YEAR. +# +# Translators: +# sunsol s , 2018 +# Freesand Leo , 2018 +# +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: Python 3.9\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2022-11-04 14:34+0000\n" +"PO-Revision-Date: 2017-02-16 23:35+0000\n" +"Last-Translator: Freesand Leo , 2018\n" +"Language-Team: Chinese (China) (https://www.transifex.com/python-doc/teams/5390/zh_CN/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: zh_CN\n" +"Plural-Forms: nplurals=1; plural=0;\n" + +#: ../../library/windows.rst:5 +msgid "MS Windows Specific Services" +msgstr "Windows系统相关模块" + +#: ../../library/windows.rst:7 +msgid "" +"This chapter describes modules that are only available on MS Windows " +"platforms." +msgstr "本章节叙述的模块只在 Windows 平台上可用。" diff --git a/library/winreg.po b/library/winreg.po new file mode 100644 index 000000000..82d9175eb --- /dev/null +++ b/library/winreg.po @@ -0,0 +1,1057 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) 2001-2024, Python Software Foundation +# This file is distributed under the same license as the Python package. +# FIRST AUTHOR , YEAR. +# +# Translators: +# 操旭 , 2017 +# cdarlint , 2019 +# Alpha Du , 2019 +# 钢 彭 , 2019 +# Dai Xu , 2021 +# Freesand Leo , 2022 +# Rafael Fontenelle , 2024 +# +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: Python 3.9\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2024-08-30 16:51+0000\n" +"PO-Revision-Date: 2017-02-16 23:35+0000\n" +"Last-Translator: Rafael Fontenelle , 2024\n" +"Language-Team: Chinese (China) (https://app.transifex.com/python-doc/teams/5390/zh_CN/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: zh_CN\n" +"Plural-Forms: nplurals=1; plural=0;\n" + +#: ../../library/winreg.rst:2 +msgid ":mod:`winreg` --- Windows registry access" +msgstr ":mod:`winreg` --- 访问 Windows 注册表" + +#: ../../library/winreg.rst:12 +msgid "" +"These functions expose the Windows registry API to Python. Instead of using" +" an integer as the registry handle, a :ref:`handle object ` " +"is used to ensure that the handles are closed correctly, even if the " +"programmer neglects to explicitly close them." +msgstr "" +"这些函数将 Windows 注册表 API 暴露给 Python。 " +"为了确保即便程序员忘记显式关闭时也能够正确关闭,这里没有用整数作为注册表句柄,而是采用了 :ref:`句柄对象 `。" + +#: ../../library/winreg.rst:19 +msgid "" +"Several functions in this module used to raise a :exc:`WindowsError`, which " +"is now an alias of :exc:`OSError`." +msgstr "模块中有几个函数用于触发 :exc:`WindowsError`,此异常现在是 :exc:`OSError` 的别名。" + +#: ../../library/winreg.rst:26 +msgid "Functions" +msgstr "函数" + +#: ../../library/winreg.rst:28 +msgid "This module offers the following functions:" +msgstr "该模块提供了下列函数:" + +#: ../../library/winreg.rst:33 +msgid "" +"Closes a previously opened registry key. The *hkey* argument specifies a " +"previously opened key." +msgstr "关闭之前打开的注册表键。参数 *hkey* 指之前打开的键。" + +#: ../../library/winreg.rst:38 +msgid "" +"If *hkey* is not closed using this method (or via :meth:`hkey.Close() " +"`), it is closed when the *hkey* object is destroyed by " +"Python." +msgstr "" +"如果没有使用该方法关闭 *hkey* (或者通过 :meth:`hkey.Close() `),在对象 *hkey* 被 " +"Python 销毁时会将其关闭。" + +#: ../../library/winreg.rst:45 +msgid "" +"Establishes a connection to a predefined registry handle on another " +"computer, and returns a :ref:`handle object `." +msgstr "建立到另一台计算机上的预定义注册表句柄的连接,并返回一个 :ref:`句柄对象 `。" + +#: ../../library/winreg.rst:48 +msgid "" +"*computer_name* is the name of the remote computer, of the form " +"``r\"\\\\computername\"``. If ``None``, the local computer is used." +msgstr "" +"*computer_name* 是远程计算机的名称,以 ``r\"\\\\computername\"`` 的形式。如果是 ``None`` " +",将会使用本地计算机。" + +#: ../../library/winreg.rst:51 +msgid "*key* is the predefined handle to connect to." +msgstr "*key* 是所连接到的预定义句柄。" + +#: ../../library/winreg.rst:53 ../../library/winreg.rst:77 +#: ../../library/winreg.rst:109 +msgid "" +"The return value is the handle of the opened key. If the function fails, an " +":exc:`OSError` exception is raised." +msgstr "返回值是所开打键的句柄。如果函数失败,则引发一个 :exc:`OSError` 异常。" + +#: ../../library/winreg.rst:56 +msgid "" +"Raises an :ref:`auditing event ` ``winreg.ConnectRegistry`` with " +"arguments ``computer_name``, ``key``." +msgstr "" +"引发一个 :ref:`审计事件 ` ``winreg.ConnectRegistry`` 并附带参数 " +"``computer_name``, ``key``。" + +#: ../../library/winreg.rst:58 ../../library/winreg.rst:84 +#: ../../library/winreg.rst:118 ../../library/winreg.rst:139 +#: ../../library/winreg.rst:177 ../../library/winreg.rst:208 +#: ../../library/winreg.rst:243 ../../library/winreg.rst:334 +msgid "See :ref:`above `." +msgstr "参考 :ref:`上文 `。" + +#: ../../library/winreg.rst:64 ../../library/winreg.rst:90 +msgid "" +"Creates or opens the specified key, returning a :ref:`handle object `." +msgstr "创建或打开特定的键,返回一个 :ref:`handle 对象 `。" + +#: ../../library/winreg.rst:67 ../../library/winreg.rst:93 +#: ../../library/winreg.rst:126 ../../library/winreg.rst:153 +#: ../../library/winreg.rst:185 ../../library/winreg.rst:197 +#: ../../library/winreg.rst:216 ../../library/winreg.rst:265 +#: ../../library/winreg.rst:312 ../../library/winreg.rst:342 +#: ../../library/winreg.rst:368 ../../library/winreg.rst:388 +#: ../../library/winreg.rst:412 ../../library/winreg.rst:437 +#: ../../library/winreg.rst:465 ../../library/winreg.rst:496 +#: ../../library/winreg.rst:513 ../../library/winreg.rst:528 +msgid "" +"*key* is an already open key, or one of the predefined :ref:`HKEY_* " +"constants `." +msgstr "*key* 为某个已经打开的键,或者预定义的 :ref:`HKEY_* 常量 ` 之一。" + +#: ../../library/winreg.rst:70 ../../library/winreg.rst:96 +msgid "*sub_key* is a string that names the key this method opens or creates." +msgstr "*sub_key* 是用于命名该方法所打开或创建的键的字符串。" + +#: ../../library/winreg.rst:72 ../../library/winreg.rst:104 +msgid "" +"If *key* is one of the predefined keys, *sub_key* may be ``None``. In that " +"case, the handle returned is the same key handle passed in to the function." +msgstr "如果 *key* 是预定义键之一,*sub_key* 可能会是 ``None``。该情况下,返回的句柄就是传入函数的句柄。" + +#: ../../library/winreg.rst:75 ../../library/winreg.rst:107 +msgid "If the key already exists, this function opens the existing key." +msgstr "如果键已经存在,则该函数打开已经存在的该键。" + +#: ../../library/winreg.rst:80 ../../library/winreg.rst:112 +msgid "" +"Raises an :ref:`auditing event ` ``winreg.CreateKey`` with " +"arguments ``key``, ``sub_key``, ``access``." +msgstr "" +"引发一个 :ref:`审计事件 ` ``winreg.CreateKey`` 并附带参数 ``key``, ``sub_key``," +" ``access``。" + +#: ../../library/winreg.rst:82 ../../library/winreg.rst:114 +#: ../../library/winreg.rst:329 +msgid "" +"Raises an :ref:`auditing event ` ``winreg.OpenKey/result`` with " +"argument ``key``." +msgstr "引发一个 :ref:`审计事件 ` ``winreg.OpenKey/result`` 并附带参数 ``key``。" + +#: ../../library/winreg.rst:98 ../../library/winreg.rst:160 +msgid "" +"*reserved* is a reserved integer, and must be zero. The default is zero." +msgstr "*reserved* 是一个保留的整数,必须是零。 默认值为零。" + +#: ../../library/winreg.rst:100 +msgid "" +"*access* is an integer that specifies an access mask that describes the " +"desired security access for the key. Default is :const:`KEY_WRITE`. See " +":ref:`Access Rights ` for other allowed values." +msgstr "" +"*access* 为一个整数,用于给键的预期安全访问指定访问掩码。默认值为 :const:`KEY_WRITE`。 参阅 :ref:`Access " +"Rights ` 了解其它允许值。" + +#: ../../library/winreg.rst:124 ../../library/winreg.rst:145 +msgid "Deletes the specified key." +msgstr "删除指定的键。" + +#: ../../library/winreg.rst:129 +msgid "" +"*sub_key* is a string that must be a subkey of the key identified by the " +"*key* parameter. This value must not be ``None``, and the key may not have " +"subkeys." +msgstr "*sub_key* 这个字符串必须是由 *key* 参数所指定键的一个子项。该值项不可以是 ``None``,同时键也不可以有子项。" + +#: ../../library/winreg.rst:132 ../../library/winreg.rst:166 +msgid "*This method can not delete keys with subkeys.*" +msgstr "*该方法不能删除带有子项的键。*" + +#: ../../library/winreg.rst:134 ../../library/winreg.rst:168 +msgid "" +"If the method succeeds, the entire key, including all of its values, is " +"removed. If the method fails, an :exc:`OSError` exception is raised." +msgstr "如果方法成功,则整个键,包括其所有值项都会被移除。如果方法失败,则引发一个 :exc:`OSError` 异常。" + +#: ../../library/winreg.rst:137 ../../library/winreg.rst:173 +msgid "" +"Raises an :ref:`auditing event ` ``winreg.DeleteKey`` with " +"arguments ``key``, ``sub_key``, ``access``." +msgstr "" +"引发一个 :ref:`审计事件 ` ``winreg.DeleteKey`` 并附带参数 ``key``, ``sub_key``," +" ``access``。" + +#: ../../library/winreg.rst:148 +msgid "" +"The :func:`DeleteKeyEx` function is implemented with the RegDeleteKeyEx " +"Windows API function, which is specific to 64-bit versions of Windows. See " +"the `RegDeleteKeyEx documentation `__." +msgstr "" +"函数 :func:`DeleteKeyEx` 通过 RegDeleteKeyEx 这个 Windows API 函数实现,该函数为 Windows " +"的64位版本专属。 参阅 `RegDeleteKeyEx 文档 `__。" + +#: ../../library/winreg.rst:156 +msgid "" +"*sub_key* is a string that must be a subkey of the key identified by the " +"*key* parameter. This value must not be ``None``, and the key may not have " +"subkeys." +msgstr "*sub_key* 这个字符串必须是由 *key* 参数所指定键的一个子项。该值项不可以是 ``None``,同时键也不可以有子项。" + +#: ../../library/winreg.rst:162 +msgid "" +"*access* is an integer that specifies an access mask that describes the " +"desired security access for the key. Default is :const:`KEY_WOW64_64KEY`. " +"See :ref:`Access Rights ` for other allowed values." +msgstr "" +"*access* 为一个整数,用于给键的预期安全访问指定访问掩码。默认值为常量 :const:`_WOW64_64KEY` 。参阅 " +":ref:`Access Rights ` 了解其它允许值。" + +#: ../../library/winreg.rst:171 +msgid "On unsupported Windows versions, :exc:`NotImplementedError` is raised." +msgstr "在不支持的 Windows 版本之上,将会引发 :exc:`NotImplementedError` 异常。" + +#: ../../library/winreg.rst:183 +msgid "Removes a named value from a registry key." +msgstr "从某个注册键中删除一个命名值项。" + +#: ../../library/winreg.rst:188 +msgid "*value* is a string that identifies the value to remove." +msgstr "*value* 为标识所要删除值项的字符串。" + +#: ../../library/winreg.rst:190 +msgid "" +"Raises an :ref:`auditing event ` ``winreg.DeleteValue`` with " +"arguments ``key``, ``value``." +msgstr "" +"引发一个 :ref:`审计事件 ` ``winreg.DeleteValue`` 并附带参数 ``key``, ``value``。" + +#: ../../library/winreg.rst:195 +msgid "Enumerates subkeys of an open registry key, returning a string." +msgstr "列举某个已经打开注册表键的子项,并返回一个字符串。" + +#: ../../library/winreg.rst:200 +msgid "" +"*index* is an integer that identifies the index of the key to retrieve." +msgstr "*index* 为一个整数,用于标识所获取键的索引。" + +#: ../../library/winreg.rst:202 +msgid "" +"The function retrieves the name of one subkey each time it is called. It is" +" typically called repeatedly until an :exc:`OSError` exception is raised, " +"indicating, no more values are available." +msgstr "每次调用该函数都会获取一个子项的名字。通常它会被反复调用,直到引发 :exc:`OSError` 异常,这说明已经没有更多的可用值了。" + +#: ../../library/winreg.rst:206 +msgid "" +"Raises an :ref:`auditing event ` ``winreg.EnumKey`` with arguments" +" ``key``, ``index``." +msgstr "" +"引发一个 :ref:`审计事件 ` ``winreg.EnumKey`` 并附带参数 ``key``, ``index``。" + +#: ../../library/winreg.rst:214 +msgid "Enumerates values of an open registry key, returning a tuple." +msgstr "列举某个已经打开注册表键的值项,并返回一个元组。" + +#: ../../library/winreg.rst:219 +msgid "" +"*index* is an integer that identifies the index of the value to retrieve." +msgstr "*index* 为一个整数,用于标识要获取值项的索引。" + +#: ../../library/winreg.rst:221 +msgid "" +"The function retrieves the name of one subkey each time it is called. It is " +"typically called repeatedly, until an :exc:`OSError` exception is raised, " +"indicating no more values." +msgstr "每次调用该函数都会获取一个子项的名字。通常它会被反复调用,直到引发 :exc:`OSError` 异常,这说明已经没有更多的可用值了。" + +#: ../../library/winreg.rst:225 ../../library/winreg.rst:345 +msgid "The result is a tuple of 3 items:" +msgstr "结果为3元素的元组。" + +#: ../../library/winreg.rst:228 ../../library/winreg.rst:348 +#: ../../library/winreg.rst:396 +msgid "Index" +msgstr "索引" + +#: ../../library/winreg.rst:228 ../../library/winreg.rst:348 +#: ../../library/winreg.rst:396 +msgid "Meaning" +msgstr "含意" + +#: ../../library/winreg.rst:230 ../../library/winreg.rst:350 +#: ../../library/winreg.rst:398 +msgid "``0``" +msgstr "``0``" + +#: ../../library/winreg.rst:230 +msgid "A string that identifies the value name" +msgstr "用于标识值项名称的字符串。" + +#: ../../library/winreg.rst:232 ../../library/winreg.rst:353 +#: ../../library/winreg.rst:400 +msgid "``1``" +msgstr "``1``" + +#: ../../library/winreg.rst:232 +msgid "" +"An object that holds the value data, and whose type depends on the " +"underlying registry type" +msgstr "保存值项数据的对象,其类型取决于背后的注册表类型。" + +#: ../../library/winreg.rst:236 ../../library/winreg.rst:356 +msgid "``2``" +msgstr "``2``" + +#: ../../library/winreg.rst:236 +msgid "" +"An integer that identifies the type of the value data (see table in docs for" +" :meth:`SetValueEx`)" +msgstr "标识值项数据类型的整数。(请查阅 :meth:`SetValueEx` 文档中的表格)" + +#: ../../library/winreg.rst:241 +msgid "" +"Raises an :ref:`auditing event ` ``winreg.EnumValue`` with " +"arguments ``key``, ``index``." +msgstr "" +"引发一个 :ref:`审计事件 ` ``winreg.EnumValue`` 并附带参数 ``key``, ``index``。" + +#: ../../library/winreg.rst:252 +msgid "" +"Expands environment variable placeholders ``%NAME%`` in strings like " +":const:`REG_EXPAND_SZ`::" +msgstr " 像 :const:`REG_EXPAND_SZ` 那样展开环境变量占位符 ``%NAME%``::" + +#: ../../library/winreg.rst:258 +msgid "" +"Raises an :ref:`auditing event ` " +"``winreg.ExpandEnvironmentStrings`` with argument ``str``." +msgstr "" +"引发一个 :ref:`审计事件 ` ``winreg.ExpandEnvironmentStrings`` 并附带参数 " +"``str``。" + +#: ../../library/winreg.rst:263 +msgid "Writes all the attributes of a key to the registry." +msgstr "将某个键的所有属性写入注册表。" + +#: ../../library/winreg.rst:268 +msgid "" +"It is not necessary to call :func:`FlushKey` to change a key. Registry " +"changes are flushed to disk by the registry using its lazy flusher. " +"Registry changes are also flushed to disk at system shutdown. Unlike " +":func:`CloseKey`, the :func:`FlushKey` method returns only when all the data" +" has been written to the registry. An application should only call " +":func:`FlushKey` if it requires absolute certainty that registry changes are" +" on disk." +msgstr "" +"没有必要调用 :func:`FlushKey` 去改动注册表键。注册表的变动是由其延迟刷新机制更新到磁盘的。在系统关机时,也会将注册表的变动写入磁盘。与" +" :func:`CloseKey` 不同, :func:`FlushKey` " +"方法只有等到所有数据都写入注册表后才会返回。只有需要绝对确认注册表变动已写入磁盘时,应用程序才应去调用 :func:`FlushKey`。" + +#: ../../library/winreg.rst:277 +msgid "" +"If you don't know whether a :func:`FlushKey` call is required, it probably " +"isn't." +msgstr "如果不知道是否要调用 :func:`FlushKey` ,可能就是不需要。" + +#: ../../library/winreg.rst:283 +msgid "" +"Creates a subkey under the specified key and stores registration information" +" from a specified file into that subkey." +msgstr "在指定键之下创建一个子键,并将指定文件中的注册表信息存入该子键中。" + +#: ../../library/winreg.rst:286 +msgid "" +"*key* is a handle returned by :func:`ConnectRegistry` or one of the " +"constants :const:`HKEY_USERS` or :const:`HKEY_LOCAL_MACHINE`." +msgstr "" +"*key* 是由 :func:`ConnectRegistry` 返回的句柄,或者是常量 :const:`HKEY_USERS` 或 " +":const:`HKEY_LOCAL_MACHINE`。" + +#: ../../library/winreg.rst:289 +msgid "*sub_key* is a string that identifies the subkey to load." +msgstr "*sub_key* 是个字符串,用于标识需要载入的子键。" + +#: ../../library/winreg.rst:291 +msgid "" +"*file_name* is the name of the file to load registry data from. This file " +"must have been created with the :func:`SaveKey` function. Under the file " +"allocation table (FAT) file system, the filename may not have an extension." +msgstr "" +"*file_name* 是要加载注册表数据的文件名。该文件必须是用 :func:`SaveKey` " +"函数创建的。在文件分配表(FAT)文件系统中,文件名可能不带扩展名。" + +#: ../../library/winreg.rst:295 +msgid "" +"A call to :func:`LoadKey` fails if the calling process does not have the " +":const:`SE_RESTORE_PRIVILEGE` privilege. Note that privileges are different" +" from permissions -- see the `RegLoadKey documentation " +"`__ for" +" more details." +msgstr "" +"如果调用 :func:`LoadKey` 的进程没有 :const:`SE_RESTORE_PRIVILEGE` " +"权限,则调用会失败。请注意,特权与权限不同 —— 更多细节请参阅 `RegLoadKey 文档 " +"`__。" + +#: ../../library/winreg.rst:301 +msgid "" +"If *key* is a handle returned by :func:`ConnectRegistry`, then the path " +"specified in *file_name* is relative to the remote computer." +msgstr "" +"如果 *key* 是由 :func:`ConnectRegistry` 返回的句柄,那么 *file_name* 指定的路径是相对于远程计算机而言的。" + +#: ../../library/winreg.rst:304 +msgid "" +"Raises an :ref:`auditing event ` ``winreg.LoadKey`` with arguments" +" ``key``, ``sub_key``, ``file_name``." +msgstr "" +"引发一个 :ref:`审计事件 ` ``winreg.LoadKey`` 并附带参数 ``key``, ``sub_key``, " +"``file_name``。" + +#: ../../library/winreg.rst:310 +msgid "" +"Opens the specified key, returning a :ref:`handle object `." +msgstr "打开指定的注册表键,返回 :ref:`handle对象 `。" + +#: ../../library/winreg.rst:315 +msgid "*sub_key* is a string that identifies the sub_key to open." +msgstr "*sub_key* 是个字符串,标识了需要打开的子键。" + +#: ../../library/winreg.rst:317 +msgid "" +"*reserved* is a reserved integer, and must be zero. The default is zero." +msgstr "*reserved* 是个保留整数,必须为零。默认值为零。" + +#: ../../library/winreg.rst:319 +msgid "" +"*access* is an integer that specifies an access mask that describes the " +"desired security access for the key. Default is :const:`KEY_READ`. See " +":ref:`Access Rights ` for other allowed values." +msgstr "" +"*access* 是个指定访问掩码的整数,掩码描述了注册表键所需的安全权限。 默认值为 :const:`KEY_READ`。 其他合法值参见 " +":ref:`访问权限 `。" + +#: ../../library/winreg.rst:323 +msgid "The result is a new handle to the specified key." +msgstr "返回结果为一个新句柄,指向指定的注册表键。" + +#: ../../library/winreg.rst:325 +msgid "If the function fails, :exc:`OSError` is raised." +msgstr "如果调用失败,则会触发 :exc:`OSError` 。" + +#: ../../library/winreg.rst:327 +msgid "" +"Raises an :ref:`auditing event ` ``winreg.OpenKey`` with arguments" +" ``key``, ``sub_key``, ``access``." +msgstr "" +"引发一个 :ref:`审计事件 ` ``winreg.OpenKey`` 并附带参数 ``key``, ``sub_key``, " +"``access``。" + +#: ../../library/winreg.rst:331 +msgid "Allow the use of named arguments." +msgstr "允许使用命名参数。" + +#: ../../library/winreg.rst:340 +msgid "Returns information about a key, as a tuple." +msgstr "以元组形式返回某注册表键的信息。" + +#: ../../library/winreg.rst:350 +msgid "An integer giving the number of sub keys this key has." +msgstr "整数值,给出了此注册表键的子键数量。" + +#: ../../library/winreg.rst:353 +msgid "An integer giving the number of values this key has." +msgstr "整数值,给出了此注册表键的值的数量。" + +#: ../../library/winreg.rst:356 +msgid "" +"An integer giving when the key was last modified (if available) as 100's of " +"nanoseconds since Jan 1, 1601." +msgstr "整数值,给出了此注册表键的最后修改时间,单位为自 1601 年 1 月 1 日以来的 100 纳秒。" + +#: ../../library/winreg.rst:361 +msgid "" +"Raises an :ref:`auditing event ` ``winreg.QueryInfoKey`` with " +"argument ``key``." +msgstr "引发一个 :ref:`审计事件 ` ``winreg.QueryInfoKey`` 并附带参数 ``key``。" + +#: ../../library/winreg.rst:366 +msgid "Retrieves the unnamed value for a key, as a string." +msgstr "读取某键的未命名值,形式为字符串。" + +#: ../../library/winreg.rst:371 +msgid "" +"*sub_key* is a string that holds the name of the subkey with which the value" +" is associated. If this parameter is ``None`` or empty, the function " +"retrieves the value set by the :func:`SetValue` method for the key " +"identified by *key*." +msgstr "" +"*sub_key* 是个字符串,用于保存与某个值相关的子键名称。如果本参数为 ``None`` 或空,函数将读取由 :func:`SetValue` " +"方法为 *key* 键设置的值。" + +#: ../../library/winreg.rst:375 +msgid "" +"Values in the registry have name, type, and data components. This method " +"retrieves the data for a key's first value that has a ``NULL`` name. But the" +" underlying API call doesn't return the type, so always use " +":func:`QueryValueEx` if possible." +msgstr "" +"注册表中的值包含名称、类型和数据。本方法将读取注册表键值的第一个名称为 ``NULL`` 的数据。可是底层的 API " +"调用不会返回类型,所以只要有可能就一定要使用 :func:`QueryValueEx`。" + +#: ../../library/winreg.rst:380 ../../library/winreg.rst:405 +msgid "" +"Raises an :ref:`auditing event ` ``winreg.QueryValue`` with " +"arguments ``key``, ``sub_key``, ``value_name``." +msgstr "" +"引发一个 :ref:`审计事件 ` ``winreg.QueryValue`` 并附带参数 ``key``, " +"``sub_key``, ``value_name``。" + +#: ../../library/winreg.rst:385 +msgid "" +"Retrieves the type and data for a specified value name associated with an " +"open registry key." +msgstr "读取已打开注册表键指定值名称的类型和数据。" + +#: ../../library/winreg.rst:391 +msgid "*value_name* is a string indicating the value to query." +msgstr "*value_name* 是字符串,表示要查询的值。" + +#: ../../library/winreg.rst:393 +msgid "The result is a tuple of 2 items:" +msgstr "结果为二元组:" + +#: ../../library/winreg.rst:398 +msgid "The value of the registry item." +msgstr "注册表项的值。" + +#: ../../library/winreg.rst:400 +msgid "" +"An integer giving the registry type for this value (see table in docs for " +":meth:`SetValueEx`)" +msgstr "整数值,给出该值的注册表类型(请查看文档中的表格了解 :meth:`SetValueEx` )。" + +#: ../../library/winreg.rst:410 +msgid "Saves the specified key, and all its subkeys to the specified file." +msgstr "将指定注册表键及其所有子键存入指定的文件。" + +#: ../../library/winreg.rst:415 +msgid "" +"*file_name* is the name of the file to save registry data to. This file " +"cannot already exist. If this filename includes an extension, it cannot be " +"used on file allocation table (FAT) file systems by the :meth:`LoadKey` " +"method." +msgstr "" +"*file_name* 是要保存注册表数据的文件名。该文件不能已存在。如果文件名包括扩展名,也不能在文件分配表(FAT)文件系统中用于 " +":meth:`LoadKey` 方法。" + +#: ../../library/winreg.rst:420 +msgid "" +"If *key* represents a key on a remote computer, the path described by " +"*file_name* is relative to the remote computer. The caller of this method " +"must possess the :const:`SeBackupPrivilege` security privilege. Note that " +"privileges are different than permissions -- see the `Conflicts Between User" +" Rights and Permissions documentation `__ for more details." +msgstr "" +"如果 *key* 代表远程计算机的注册表键,那么 *file_name* 所描述的路径是相对于远程计算机的。本方法的调用者必须拥有 " +":const:`SeBackupPrivilege` 特权。请注意,特权与权限是不同的 —— 更多细节请参见 `用户权利和权限之间的冲突文档 " +"`__。" + +#: ../../library/winreg.rst:428 +msgid "This function passes ``NULL`` for *security_attributes* to the API." +msgstr "本函数将 ``NULL`` 传给 API 的 *security_attributes*。" + +#: ../../library/winreg.rst:430 +msgid "" +"Raises an :ref:`auditing event ` ``winreg.SaveKey`` with arguments" +" ``key``, ``file_name``." +msgstr "" +"引发一个 :ref:`审计事件 ` ``winreg.SaveKey`` 并附带参数 ``key``, ``file_name``。" + +#: ../../library/winreg.rst:435 +msgid "Associates a value with a specified key." +msgstr "将值与指定的注册表键关联。" + +#: ../../library/winreg.rst:440 +msgid "" +"*sub_key* is a string that names the subkey with which the value is " +"associated." +msgstr "*sub_key* 是个字符串,用于命名与该值相关的子键。" + +#: ../../library/winreg.rst:442 +msgid "" +"*type* is an integer that specifies the type of the data. Currently this " +"must be :const:`REG_SZ`, meaning only strings are supported. Use the " +":func:`SetValueEx` function for support for other data types." +msgstr "" +"*type* 是个整数,用于指定数据的类型。目前这必须是 :const:`REG_SZ` ,意味着只支持字符串。请用 " +":func:`SetValueEx` 函数支持其他的数据类型。" + +#: ../../library/winreg.rst:446 ../../library/winreg.rst:476 +msgid "*value* is a string that specifies the new value." +msgstr "*value* 是设置新值的字符串。" + +#: ../../library/winreg.rst:448 +msgid "" +"If the key specified by the *sub_key* parameter does not exist, the SetValue" +" function creates it." +msgstr "如果 *sub_key* 参数指定的注册表键不存在,SetValue 函数会创建一个。" + +#: ../../library/winreg.rst:451 ../../library/winreg.rst:484 +msgid "" +"Value lengths are limited by available memory. Long values (more than 2048 " +"bytes) should be stored as files with the filenames stored in the " +"configuration registry. This helps the registry perform efficiently." +msgstr "值的长度受到可用内存的限制。较长的值(超过 2048 字节)应存为文件,并将文件名存入配置注册表。这有助于提高注册表的使用效率。" + +#: ../../library/winreg.rst:455 +msgid "" +"The key identified by the *key* parameter must have been opened with " +":const:`KEY_SET_VALUE` access." +msgstr "由 *key* 参数标识的注册表键,必须已用 :const:`KEY_SET_VALUE` 方式打开。" + +#: ../../library/winreg.rst:458 ../../library/winreg.rst:488 +msgid "" +"Raises an :ref:`auditing event ` ``winreg.SetValue`` with " +"arguments ``key``, ``sub_key``, ``type``, ``value``." +msgstr "" +"引发一个 :ref:`审计事件 ` ``winreg.SetValue`` 并附带参数 ``key``, ``sub_key``, " +"``type``, ``value``。" + +#: ../../library/winreg.rst:463 +msgid "Stores data in the value field of an open registry key." +msgstr "将数据存入已打开的注册表键的值中。" + +#: ../../library/winreg.rst:468 +msgid "" +"*value_name* is a string that names the subkey with which the value is " +"associated." +msgstr "*value_name* 是个字符串,用于命名与值相关的子键。" + +#: ../../library/winreg.rst:471 +msgid "*reserved* can be anything -- zero is always passed to the API." +msgstr "*reserved* 可以是任意数据 —— 传给 API 的总是 0。" + +#: ../../library/winreg.rst:473 +msgid "" +"*type* is an integer that specifies the type of the data. See :ref:`Value " +"Types ` for the available types." +msgstr "*type* 是个整数,用于指定数据的类型。请参阅 :ref:`Value Types ` 了解可用的类型。" + +#: ../../library/winreg.rst:478 +msgid "" +"This method can also set additional value and type information for the " +"specified key. The key identified by the key parameter must have been " +"opened with :const:`KEY_SET_VALUE` access." +msgstr "本方法也可为指定的注册表键设置额外的值和类型信息。注册表键必须已用 :const:`KEY_SET_VALUE` 方式打开。" + +#: ../../library/winreg.rst:482 +msgid "To open the key, use the :func:`CreateKey` or :func:`OpenKey` methods." +msgstr "请用 :func:`CreateKey` 或 :func:`OpenKey` 方法打开注册表键。" + +#: ../../library/winreg.rst:493 +msgid "" +"Disables registry reflection for 32-bit processes running on a 64-bit " +"operating system." +msgstr "禁用运行于 64 位操作系统的 32 位进程的注册表重定向。" + +#: ../../library/winreg.rst:499 ../../library/winreg.rst:516 +#: ../../library/winreg.rst:533 +msgid "" +"Will generally raise :exc:`NotImplementedError` if executed on a 32-bit " +"operating system." +msgstr "如果在 32 位操作系统上执行,一般会触发 :exc:`NotImplementedError`。" + +#: ../../library/winreg.rst:502 +msgid "" +"If the key is not on the reflection list, the function succeeds but has no " +"effect. Disabling reflection for a key does not affect reflection of any " +"subkeys." +msgstr "如果注册表键不在重定向列表中,函数会调用成功,但没有实际效果。禁用注册表键的重定向不会影响任何子键的重定向。" + +#: ../../library/winreg.rst:506 +msgid "" +"Raises an :ref:`auditing event ` ``winreg.DisableReflectionKey`` " +"with argument ``key``." +msgstr "" +"引发一个 :ref:`审计事件 ` ``winreg.DisableReflectionKey`` 并附带参数 ``key``。" + +#: ../../library/winreg.rst:511 +msgid "Restores registry reflection for the specified disabled key." +msgstr "恢复已禁用注册表键的重定向。" + +#: ../../library/winreg.rst:519 +msgid "" +"Restoring reflection for a key does not affect reflection of any subkeys." +msgstr "恢复注册表键的重定向不会影响任何子键的重定向。" + +#: ../../library/winreg.rst:521 +msgid "" +"Raises an :ref:`auditing event ` ``winreg.EnableReflectionKey`` " +"with argument ``key``." +msgstr "" +"引发一个 :ref:`审计事件 ` ``winreg.EnableReflectionKey`` 并附带参数 ``key``。" + +#: ../../library/winreg.rst:526 +msgid "Determines the reflection state for the specified key." +msgstr "确定给定注册表键的重定向状况。" + +#: ../../library/winreg.rst:531 +msgid "Returns ``True`` if reflection is disabled." +msgstr "如果重定向已禁用则返回 ``True``。" + +#: ../../library/winreg.rst:536 +msgid "" +"Raises an :ref:`auditing event ` ``winreg.QueryReflectionKey`` " +"with argument ``key``." +msgstr "" +"引发一个 :ref:`审计事件 ` ``winreg.QueryReflectionKey`` 并附带参数 ``key``。" + +#: ../../library/winreg.rst:542 +msgid "Constants" +msgstr "常量" + +#: ../../library/winreg.rst:544 +msgid "" +"The following constants are defined for use in many :mod:`_winreg` " +"functions." +msgstr "以下常量定义成可供很多 :mod:`_winreg` 函数使用。" + +#: ../../library/winreg.rst:549 +msgid "HKEY_* Constants" +msgstr "HKEY_* 常量" + +#: ../../library/winreg.rst:553 +msgid "" +"Registry entries subordinate to this key define types (or classes) of " +"documents and the properties associated with those types. Shell and COM " +"applications use the information stored under this key." +msgstr "本注册表键下的注册表项定义了文件的类型(或类别)及相关属性。Shell 和 COM 应用程序将使用该注册表键下保存的信息。" + +#: ../../library/winreg.rst:560 +msgid "" +"Registry entries subordinate to this key define the preferences of the " +"current user. These preferences include the settings of environment " +"variables, data about program groups, colors, printers, network connections," +" and application preferences." +msgstr "属于该注册表键的表项定义了当前用户的偏好。这些偏好值包括环境变量设置、程序组数据、颜色、打印机、网络连接和应用程序参数。" + +#: ../../library/winreg.rst:567 +msgid "" +"Registry entries subordinate to this key define the physical state of the " +"computer, including data about the bus type, system memory, and installed " +"hardware and software." +msgstr "属于该注册表键的表项定义了计算机的物理状态,包括总线类型、系统内存和已安装软硬件等数据。" + +#: ../../library/winreg.rst:573 +msgid "" +"Registry entries subordinate to this key define the default user " +"configuration for new users on the local computer and the user configuration" +" for the current user." +msgstr "属于该注册表键的表项定义了当前计算机中新用户的默认配置和当前用户配置。" + +#: ../../library/winreg.rst:579 +msgid "" +"Registry entries subordinate to this key allow you to access performance " +"data. The data is not actually stored in the registry; the registry " +"functions cause the system to collect the data from its source." +msgstr "属于该注册表键的表项可用于读取性能数据。这些数据其实并不存放于注册表中;注册表提供功能让系统收集数据。" + +#: ../../library/winreg.rst:587 +msgid "" +"Contains information about the current hardware profile of the local " +"computer system." +msgstr "包含有关本地计算机系统当前硬件配置的信息。" + +#: ../../library/winreg.rst:592 +msgid "This key is not used in versions of Windows after 98." +msgstr "Windows 98 以上版本不使用该注册表键。" + +#: ../../library/winreg.rst:598 +msgid "Access Rights" +msgstr "访问权限" + +#: ../../library/winreg.rst:600 +msgid "" +"For more information, see `Registry Key Security and Access " +"`__." +msgstr "" +"更多信息,请参阅 `注册表密钥安全和访问 `__。" + +#: ../../library/winreg.rst:605 +msgid "" +"Combines the STANDARD_RIGHTS_REQUIRED, :const:`KEY_QUERY_VALUE`, " +":const:`KEY_SET_VALUE`, :const:`KEY_CREATE_SUB_KEY`, " +":const:`KEY_ENUMERATE_SUB_KEYS`, :const:`KEY_NOTIFY`, and " +":const:`KEY_CREATE_LINK` access rights." +msgstr "" +"组合了 STANDARD_RIGHTS_REQUIRED 、:const:`KEY_QUERY_VALUE` 、 " +":const:`KEY_SET_VALUE` 、 :const:`KEY_CREATE_SUB_KEY` 、 " +":const:`KEY_ENUMERATE_SUB_KEYS` 、 :const:`KEY_NOTIFY` 和 " +":const:`KEY_CREATE_LINK` 访问权限。" + +#: ../../library/winreg.rst:612 +msgid "" +"Combines the STANDARD_RIGHTS_WRITE, :const:`KEY_SET_VALUE`, and " +":const:`KEY_CREATE_SUB_KEY` access rights." +msgstr "" +"组合了 STANDARD_RIGHTS_WRITE 、 :const:`KEY_SET_VALUE` 和 " +":const:`KEY_CREATE_SUB_KEY` 访问权限。" + +#: ../../library/winreg.rst:617 +msgid "" +"Combines the STANDARD_RIGHTS_READ, :const:`KEY_QUERY_VALUE`, " +":const:`KEY_ENUMERATE_SUB_KEYS`, and :const:`KEY_NOTIFY` values." +msgstr "" +"组合了 STANDARD_RIGHTS_READ 、 :const:`KEY_QUERY_VALUE` 、 " +":const:`KEY_ENUMERATE_SUB_KEYS` 和 :const:`KEY_NOTIFY` 。" + +#: ../../library/winreg.rst:622 +msgid "Equivalent to :const:`KEY_READ`." +msgstr "等价于 :const:`KEY_READ`。" + +#: ../../library/winreg.rst:626 +msgid "Required to query the values of a registry key." +msgstr "查询注册表键值时需要用到。" + +#: ../../library/winreg.rst:630 +msgid "Required to create, delete, or set a registry value." +msgstr "创建、删除或设置注册表值时需要用到。" + +#: ../../library/winreg.rst:634 +msgid "Required to create a subkey of a registry key." +msgstr "创建注册表键的子键时需要用到。" + +#: ../../library/winreg.rst:638 +msgid "Required to enumerate the subkeys of a registry key." +msgstr "枚举注册表键的子键时需要用到。" + +#: ../../library/winreg.rst:642 +msgid "" +"Required to request change notifications for a registry key or for subkeys " +"of a registry key." +msgstr "为注册表键或子键请求修改通知时需要用到。" + +#: ../../library/winreg.rst:647 +msgid "Reserved for system use." +msgstr "保留给系统使用。" + +#: ../../library/winreg.rst:653 +msgid "64-bit Specific" +msgstr "64 位系统特有" + +#: ../../library/winreg.rst:655 +msgid "" +"For more information, see `Accessing an Alternate Registry View " +"`__." +msgstr "" +"详情请参阅 `Accessing an Alternate Registry View `__。" + +#: ../../library/winreg.rst:660 +msgid "" +"Indicates that an application on 64-bit Windows should operate on the 64-bit" +" registry view." +msgstr "表示 64 位 Windows 中的应用程序应在 64 位注册表视图上操作。" + +#: ../../library/winreg.rst:665 +msgid "" +"Indicates that an application on 64-bit Windows should operate on the 32-bit" +" registry view." +msgstr "表示 64 位 Windows 中的应用程序应在 32 位注册表视图上操作。" + +#: ../../library/winreg.rst:672 +msgid "Value Types" +msgstr "注册表值的类型" + +#: ../../library/winreg.rst:674 +msgid "" +"For more information, see `Registry Value Types " +"`__." +msgstr "" +"详情请参阅 `Registry Value Types `__。" + +#: ../../library/winreg.rst:679 +msgid "Binary data in any form." +msgstr "任意格式的二进制数据。" + +#: ../../library/winreg.rst:683 +msgid "32-bit number." +msgstr "32 位数字。" + +#: ../../library/winreg.rst:687 +msgid "" +"A 32-bit number in little-endian format. Equivalent to :const:`REG_DWORD`." +msgstr "32 位低字节序格式的数字。相当于 :const:`REG_DWORD`。" + +#: ../../library/winreg.rst:691 +msgid "A 32-bit number in big-endian format." +msgstr "32 位高字节序格式的数字。" + +#: ../../library/winreg.rst:695 +msgid "" +"Null-terminated string containing references to environment variables " +"(``%PATH%``)." +msgstr "包含环境变量(``%PATH%``)的字符串,以空字符结尾。" + +#: ../../library/winreg.rst:700 +msgid "A Unicode symbolic link." +msgstr "Unicode 符号链接。" + +#: ../../library/winreg.rst:704 +msgid "" +"A sequence of null-terminated strings, terminated by two null characters. " +"(Python handles this termination automatically.)" +msgstr "一串以空字符结尾的字符串,最后以两个空字符结尾。Python 会自动处理这种结尾形式。" + +#: ../../library/winreg.rst:709 +msgid "No defined value type." +msgstr "未定义的类型。" + +#: ../../library/winreg.rst:713 +msgid "A 64-bit number." +msgstr "64 位数字。" + +#: ../../library/winreg.rst:719 +msgid "" +"A 64-bit number in little-endian format. Equivalent to :const:`REG_QWORD`." +msgstr "64 位低字节序格式的数字。相当于 :const:`REG_QWORD`。" + +#: ../../library/winreg.rst:725 +msgid "A device-driver resource list." +msgstr "设备驱动程序资源列表。" + +#: ../../library/winreg.rst:729 +msgid "A hardware setting." +msgstr "硬件设置。" + +#: ../../library/winreg.rst:733 +msgid "A hardware resource list." +msgstr "硬件资源列表。" + +#: ../../library/winreg.rst:737 +msgid "A null-terminated string." +msgstr "空字符结尾的字符串。" + +#: ../../library/winreg.rst:743 +msgid "Registry Handle Objects" +msgstr "注册表句柄对象" + +#: ../../library/winreg.rst:745 +msgid "" +"This object wraps a Windows HKEY object, automatically closing it when the " +"object is destroyed. To guarantee cleanup, you can call either the " +":meth:`~PyHKEY.Close` method on the object, or the :func:`CloseKey` " +"function." +msgstr "" +"该对象封装了 Windows HKEY 对象,对象销毁时会自动关闭。为确保资源得以清理,可调用 :meth:`~PyHKEY.Close` 方法或 " +":func:`CloseKey` 函数。" + +#: ../../library/winreg.rst:749 +msgid "All registry functions in this module return one of these objects." +msgstr "本模块中的所有注册表函数都会返回注册表句柄对象。" + +#: ../../library/winreg.rst:751 +msgid "" +"All registry functions in this module which accept a handle object also " +"accept an integer, however, use of the handle object is encouraged." +msgstr "本模块中所有接受注册表句柄对象的注册表函数,也能接受一个整数,但鼓励大家使用句柄对象。" + +#: ../../library/winreg.rst:754 +msgid "Handle objects provide semantics for :meth:`__bool__` -- thus ::" +msgstr "注册表句柄对象支持 :meth:`__bool__` 语义 —— 因此如果当前句柄有效(未关闭或断开连接):" + +#: ../../library/winreg.rst:759 +msgid "" +"will print ``Yes`` if the handle is currently valid (has not been closed or " +"detached)." +msgstr "将会打印出 ``Yes`` 。" + +#: ../../library/winreg.rst:762 +msgid "" +"The object also support comparison semantics, so handle objects will compare" +" true if they both reference the same underlying Windows handle value." +msgstr "句柄对象还支持比较语义,因此若多个句柄对象都引用了同一底层 Windows 句柄值,那么比较操作结果将为 True。" + +#: ../../library/winreg.rst:765 +msgid "" +"Handle objects can be converted to an integer (e.g., using the built-in " +":func:`int` function), in which case the underlying Windows handle value is " +"returned. You can also use the :meth:`~PyHKEY.Detach` method to return the " +"integer handle, and also disconnect the Windows handle from the handle " +"object." +msgstr "" +"句柄对象可转换为整数(如利用内置函数 :func:`int`),这时会返回底层的 Windows 句柄值。用 " +":meth:`~PyHKEY.Detach` 方法也可返回整数句柄,同时会断开与 Windows 句柄的连接。" + +#: ../../library/winreg.rst:773 +msgid "Closes the underlying Windows handle." +msgstr "关闭底层的 Windows 句柄。" + +#: ../../library/winreg.rst:775 +msgid "If the handle is already closed, no error is raised." +msgstr "如果句柄已关闭,不会引发错误。" + +#: ../../library/winreg.rst:780 +msgid "Detaches the Windows handle from the handle object." +msgstr "断开与 Windows 句柄的连接。" + +#: ../../library/winreg.rst:782 +msgid "" +"The result is an integer that holds the value of the handle before it is " +"detached. If the handle is already detached or closed, this will return " +"zero." +msgstr "结果为一个整数,存有被断开连接之前的句柄值。如果该句柄已断开连接或关闭,则返回 0。" + +#: ../../library/winreg.rst:786 +msgid "" +"After calling this function, the handle is effectively invalidated, but the " +"handle is not closed. You would call this function when you need the " +"underlying Win32 handle to exist beyond the lifetime of the handle object." +msgstr "调用本函数后,注册表句柄将被迅速禁用,但并没有关闭。当需要底层的 Win32 句柄在句柄对象的生命周期之后仍然存在时,可以调用这个函数。" + +#: ../../library/winreg.rst:790 +msgid "" +"Raises an :ref:`auditing event ` ``winreg.PyHKEY.Detach`` with " +"argument ``key``." +msgstr "引发一个 :ref:`审计事件 ` ``winreg.PyHKEY.Detach`` 并附带参数 ``key``。" + +#: ../../library/winreg.rst:796 +msgid "" +"The HKEY object implements :meth:`~object.__enter__` and " +":meth:`~object.__exit__` and thus supports the context protocol for the " +":keyword:`with` statement::" +msgstr "" +"HKEY 对象实现了 :meth:`~object.__enter__` 和 :meth:`~object.__exit__` 方法,因此支持 " +":keyword:`with` 语句的上下文协议:" + +#: ../../library/winreg.rst:803 +msgid "" +"will automatically close *key* when control leaves the :keyword:`with` " +"block." +msgstr "在离开 :keyword:`with` 语句块时,*key* 会自动关闭。" diff --git a/library/winsound.po b/library/winsound.po new file mode 100644 index 000000000..4ac37c7a4 --- /dev/null +++ b/library/winsound.po @@ -0,0 +1,218 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) 2001-2022, Python Software Foundation +# This file is distributed under the same license as the Python package. +# FIRST AUTHOR , YEAR. +# +# Translators: +# ww song , 2018 +# Dai Xu , 2021 +# Freesand Leo , 2021 +# +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: Python 3.9\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2022-11-04 14:34+0000\n" +"PO-Revision-Date: 2017-02-16 23:35+0000\n" +"Last-Translator: Freesand Leo , 2021\n" +"Language-Team: Chinese (China) (https://www.transifex.com/python-doc/teams/5390/zh_CN/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: zh_CN\n" +"Plural-Forms: nplurals=1; plural=0;\n" + +#: ../../library/winsound.rst:2 +msgid ":mod:`winsound` --- Sound-playing interface for Windows" +msgstr ":mod:`winsound` —— Windows 系统的声音播放接口" + +#: ../../library/winsound.rst:13 +msgid "" +"The :mod:`winsound` module provides access to the basic sound-playing " +"machinery provided by Windows platforms. It includes functions and several " +"constants." +msgstr "通过 :mod:`winsound` 模块可访问 Windows 平台的基础音频播放机制。包括一些函数和几个常量。" + +#: ../../library/winsound.rst:19 +msgid "" +"Beep the PC's speaker. The *frequency* parameter specifies frequency, in " +"hertz, of the sound, and must be in the range 37 through 32,767. The " +"*duration* parameter specifies the number of milliseconds the sound should " +"last. If the system is not able to beep the speaker, :exc:`RuntimeError` is" +" raised." +msgstr "" +"让 PC 的扬声器发出提示音。*frequency* 参数可指定声音的频率,单位是赫兹,必须位于 37 到 32,767 之间。*duration* " +"参数则指定了声音应持续的毫秒数。若系统无法让扬声器发声,则会触发 :exc:`RuntimeError`。" + +#: ../../library/winsound.rst:27 +msgid "" +"Call the underlying :c:func:`PlaySound` function from the Platform API. The" +" *sound* parameter may be a filename, a system sound alias, audio data as a " +":term:`bytes-like object`, or ``None``. Its interpretation depends on the " +"value of *flags*, which can be a bitwise ORed combination of the constants " +"described below. If the *sound* parameter is ``None``, any currently playing" +" waveform sound is stopped. If the system indicates an error, " +":exc:`RuntimeError` is raised." +msgstr "" +"由平台 API 调用底层的 :c:func:`PlaySound` 函数。 参数 *sound* " +"可以是文件名、系统音频的别名、:term:`bytes-like object` 的音频数据或``None``。 如何解释取决于 *flags* " +"的值,可为以下常数的二进制 OR 组合。 如果 *sound* 参数为 ``None``,则当前播放的波形音频会全部停止。如果系统报错, 则会触发 " +":exc:`RuntimeError`。" + +#: ../../library/winsound.rst:38 +msgid "" +"Call the underlying :c:func:`MessageBeep` function from the Platform API. " +"This plays a sound as specified in the registry. The *type* argument " +"specifies which sound to play; possible values are ``-1``, " +"``MB_ICONASTERISK``, ``MB_ICONEXCLAMATION``, ``MB_ICONHAND``, " +"``MB_ICONQUESTION``, and ``MB_OK``, all described below. The value ``-1`` " +"produces a \"simple beep\"; this is the final fallback if a sound cannot be " +"played otherwise. If the system indicates an error, :exc:`RuntimeError` is " +"raised." +msgstr "" +"由平台 API 调用底层的 :c:func:`MessageBeep` 函数。用于播放注册表中指定的音频。 *type* 参数指定播放的音频;可能的值是" +" " +"``-1``、``MB_ICONASTERISK``、``MB_ICONEXCLAMATION``、``MB_ICONHAND``、``MB_ICONQUESTION``" +" 和 ``MB_OK``,下面会介绍。值 ``-1`` 会生成一个 \"简单的嘀声\";若其他的音频无法播放,这是最后的退路。如果系统报错,则会触发 " +":exc:`RuntimeError` 。" + +#: ../../library/winsound.rst:49 +msgid "" +"The *sound* parameter is the name of a WAV file. Do not use with " +":const:`SND_ALIAS`." +msgstr "参数 *sound* 指明 WAV 文件名。不要与 :const:`SND_ALIAS` 一起使用。" + +#: ../../library/winsound.rst:55 +msgid "" +"The *sound* parameter is a sound association name from the registry. If the" +" registry contains no such name, play the system default sound unless " +":const:`SND_NODEFAULT` is also specified. If no default sound is registered," +" raise :exc:`RuntimeError`. Do not use with :const:`SND_FILENAME`." +msgstr "" +"参数 *sound* 是注册表内关联的音频名称。 如果注册表中无此名称,则播放系统默认的声音,除非同时设定了 " +":const:`SND_NODEFAULT` 。 如果没有注册默认声音,则会触发 :exc:`RuntimeError`。 请勿与 " +":const:`SND_FILENAME` 一起使用。" + +#: ../../library/winsound.rst:60 +msgid "" +"All Win32 systems support at least the following; most systems support many " +"more:" +msgstr "所有的 Win32 系统至少支持以下音频名称;大多数系统支持的音频都多于这些:" + +#: ../../library/winsound.rst:64 +msgid ":func:`PlaySound` *name*" +msgstr ":func:`PlaySound` *name*" + +#: ../../library/winsound.rst:64 +msgid "Corresponding Control Panel Sound name" +msgstr "对应的控制面板音频名" + +#: ../../library/winsound.rst:66 +msgid "``'SystemAsterisk'``" +msgstr "``'SystemAsterisk'``" + +#: ../../library/winsound.rst:66 +msgid "Asterisk" +msgstr "星号" + +#: ../../library/winsound.rst:68 +msgid "``'SystemExclamation'``" +msgstr "``'SystemExclamation'``" + +#: ../../library/winsound.rst:68 +msgid "Exclamation" +msgstr "叹息声" + +#: ../../library/winsound.rst:70 +msgid "``'SystemExit'``" +msgstr "``'SystemExit'``" + +#: ../../library/winsound.rst:70 +msgid "Exit Windows" +msgstr "退出 Windows" + +#: ../../library/winsound.rst:72 +msgid "``'SystemHand'``" +msgstr "``'SystemHand'``" + +#: ../../library/winsound.rst:72 +msgid "Critical Stop" +msgstr "关键性停止音" + +#: ../../library/winsound.rst:74 +msgid "``'SystemQuestion'``" +msgstr "``'SystemQuestion'``" + +#: ../../library/winsound.rst:74 +msgid "Question" +msgstr "问题" + +#: ../../library/winsound.rst:77 +msgid "For example::" +msgstr "例如::" + +#: ../../library/winsound.rst:90 +msgid "" +"Play the sound repeatedly. The :const:`SND_ASYNC` flag must also be used to" +" avoid blocking. Cannot be used with :const:`SND_MEMORY`." +msgstr "" +"循环播放音频。为避免阻塞,必须同时使用 :const:`SND_ASYNC` 标志。不能与 :const:`SND_MEMORY` 一起使用。" + +#: ../../library/winsound.rst:96 +msgid "" +"The *sound* parameter to :func:`PlaySound` is a memory image of a WAV file, " +"as a :term:`bytes-like object`." +msgstr "" +":func:`PlaySound` 的 *sound* 形参是一个 WAV 文件的内存镜像,作为一个 :term:`bytes-like " +"object`。" + +#: ../../library/winsound.rst:101 +msgid "" +"This module does not support playing from a memory image asynchronously, so " +"a combination of this flag and :const:`SND_ASYNC` will raise " +":exc:`RuntimeError`." +msgstr "" +"本模块不支持异步播放音频的内存镜像,所以该标志和 :const:`SND_ASYNC` 的组合将触发 :exc:`RuntimeError`。" + +#: ../../library/winsound.rst:107 +msgid "Stop playing all instances of the specified sound." +msgstr "停止播放指定声音的所有实例。" + +#: ../../library/winsound.rst:111 ../../library/winsound.rst:135 +msgid "This flag is not supported on modern Windows platforms." +msgstr "新版 Windows 平台不支持本标志。" + +#: ../../library/winsound.rst:116 +msgid "Return immediately, allowing sounds to play asynchronously." +msgstr "立即返回,允许异步播放音频。" + +#: ../../library/winsound.rst:121 +msgid "" +"If the specified sound cannot be found, do not play the system default " +"sound." +msgstr "即便找不到指定的音频,也不播放系统默认音频。" + +#: ../../library/winsound.rst:126 +msgid "Do not interrupt sounds currently playing." +msgstr "不打断正在播放的音频。" + +#: ../../library/winsound.rst:131 +msgid "Return immediately if the sound driver is busy." +msgstr "如果音频驱动程序忙,则立即返回。" + +#: ../../library/winsound.rst:140 ../../library/winsound.rst:160 +msgid "Play the ``SystemDefault`` sound." +msgstr "播放 ``SystemDefault`` 音频。" + +#: ../../library/winsound.rst:145 +msgid "Play the ``SystemExclamation`` sound." +msgstr "播放 ``SystemExclamation`` 音频。" + +#: ../../library/winsound.rst:150 +msgid "Play the ``SystemHand`` sound." +msgstr "播放 ``SystemHand`` 音频。" + +#: ../../library/winsound.rst:155 +msgid "Play the ``SystemQuestion`` sound." +msgstr "播放 ``SystemQuestion`` 音频。" diff --git a/library/wsgiref.po b/library/wsgiref.po new file mode 100644 index 000000000..3a3f2982b --- /dev/null +++ b/library/wsgiref.po @@ -0,0 +1,1039 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) 2001-2025, Python Software Foundation +# This file is distributed under the same license as the Python package. +# FIRST AUTHOR , YEAR. +# +# Translators: +# Freesand Leo , 2024 +# Rafael Fontenelle , 2025 +# +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: Python 3.9\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2025-02-07 16:40+0000\n" +"PO-Revision-Date: 2017-02-16 23:35+0000\n" +"Last-Translator: Rafael Fontenelle , 2025\n" +"Language-Team: Chinese (China) (https://app.transifex.com/python-doc/teams/5390/zh_CN/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: zh_CN\n" +"Plural-Forms: nplurals=1; plural=0;\n" + +#: ../../library/wsgiref.rst:2 +msgid ":mod:`wsgiref` --- WSGI Utilities and Reference Implementation" +msgstr ":mod:`wsgiref` --- WSGI 工具和参考实现" + +#: ../../library/wsgiref.rst:12 +msgid "" +"The Web Server Gateway Interface (WSGI) is a standard interface between web " +"server software and web applications written in Python. Having a standard " +"interface makes it easy to use an application that supports WSGI with a " +"number of different web servers." +msgstr "" +"Web 服务器网关接口(WSGI)是 Web 服务器软件和用 Python 编写的 Web 应用程序之间的标准接口。 具有标准接口能够让支持 WSGI " +"的应用程序与多种不同的 Web 服务器配合使用。" + +#: ../../library/wsgiref.rst:17 +msgid "" +"Only authors of web servers and programming frameworks need to know every " +"detail and corner case of the WSGI design. You don't need to understand " +"every detail of WSGI just to install a WSGI application or to write a web " +"application using an existing framework." +msgstr "" +"只有 Web 服务器和编程框架的开发者才需要了解 WSGI 设计的每个细节和边界情况。 你不需要了解 WSGI 的每个细节而只需要安装一个 WSGI " +"应用程序或编写使用现有框架的 Web 应用程序。" + +#: ../../library/wsgiref.rst:22 +msgid "" +":mod:`wsgiref` is a reference implementation of the WSGI specification that " +"can be used to add WSGI support to a web server or framework. It provides " +"utilities for manipulating WSGI environment variables and response headers, " +"base classes for implementing WSGI servers, a demo HTTP server that serves " +"WSGI applications, and a validation tool that checks WSGI servers and " +"applications for conformance to the WSGI specification (:pep:`3333`)." +msgstr "" +":mod:`wsgiref` 是一个 WSGI 规范的参考实现,可被用于将 WSGI 支持添加到 Web 服务器或框架中。 它提供了操作 WSGI " +"环境变量和响应标头的工具,实现 WSGI 服务器的基类,一个可部署 WSGI 应用程序的演示性 HTTP 服务器,以及一个用于检查 WSGI " +"服务器和应用程序是否符合 WSGI 规范的验证工具 (:pep:`3333`)。" + +#: ../../library/wsgiref.rst:29 +msgid "" +"See `wsgi.readthedocs.io `_ for more " +"information about WSGI, and links to tutorials and other resources." +msgstr "" +"参看 `wsgi.readthedocs.io `_ 获取有关 WSGI " +"的更多信息,以及教程和其他资源的链接。" + +#: ../../library/wsgiref.rst:36 +msgid ":mod:`wsgiref.util` -- WSGI environment utilities" +msgstr ":mod:`wsgiref.util` -- WSGI 环境工具" + +#: ../../library/wsgiref.rst:42 +msgid "" +"This module provides a variety of utility functions for working with WSGI " +"environments. A WSGI environment is a dictionary containing HTTP request " +"variables as described in :pep:`3333`. All of the functions taking an " +"*environ* parameter expect a WSGI-compliant dictionary to be supplied; " +"please see :pep:`3333` for a detailed specification." +msgstr "" +"本模块提供了多种工具配合 WSGI 环境使用。 WSGI 环境就是一个包含 :pep:`3333` 所描述的 HTTP 请求变量的目录。 所有接受 " +"*environ* 形参的函数都会预期被得到一个符合 WSGI 规范的目录;请参阅 :pep:`3333` 来了解相关规范的细节。" + +#: ../../library/wsgiref.rst:51 +msgid "" +"Return a guess for whether ``wsgi.url_scheme`` should be \"http\" or " +"\"https\", by checking for a ``HTTPS`` environment variable in the *environ*" +" dictionary. The return value is a string." +msgstr "" +"返回对于 ``wsgi.url_scheme`` 应为 \"http\" 还是 \"https\" 的猜测,具体方式是在 *environ* 中检查 " +"``HTTPS`` 环境变量。 返回值是一个字符串。" + +#: ../../library/wsgiref.rst:55 +msgid "" +"This function is useful when creating a gateway that wraps CGI or a CGI-like" +" protocol such as FastCGI. Typically, servers providing such protocols will" +" include a ``HTTPS`` variable with a value of \"1\", \"yes\", or \"on\" when" +" a request is received via SSL. So, this function returns \"https\" if such" +" a value is found, and \"http\" otherwise." +msgstr "" +"此函数适用于创建一个包装了 CGI 或 CGI 类协议例如 FastCGI 的网关。 通常,提供这种协议的服务器将包括一个 ``HTTPS`` " +"变量并会在通过 SSL 接收请求时将其值设为 \"1\", \"yes\" 或 \"on\"。 这样,此函数会在找到上述值时返回 " +"\"https\",否则返回 \"http\"。" + +#: ../../library/wsgiref.rst:64 +msgid "" +"Return the full request URI, optionally including the query string, using " +"the algorithm found in the \"URL Reconstruction\" section of :pep:`3333`. " +"If *include_query* is false, the query string is not included in the " +"resulting URI." +msgstr "" +"使用 :pep:`3333` 的 \"URL Reconstruction\" 一节中的算法返回完整的请求 URL,可能包括查询字符串。 如果 " +"*include_query* 为假值,则结果 URI 中将不包括查询字符串。" + +#: ../../library/wsgiref.rst:71 +msgid "" +"Similar to :func:`request_uri`, except that the ``PATH_INFO`` and " +"``QUERY_STRING`` variables are ignored. The result is the base URI of the " +"application object addressed by the request." +msgstr "" +"类似于 :func:`request_uri`,区别在于 ``PATH_INFO`` 和 ``QUERY_STRING`` 变量会被忽略。 " +"结果为请求所指定的应用程序对象的基准 URI。" + +#: ../../library/wsgiref.rst:78 +msgid "" +"Shift a single name from ``PATH_INFO`` to ``SCRIPT_NAME`` and return the " +"name. The *environ* dictionary is *modified* in-place; use a copy if you " +"need to keep the original ``PATH_INFO`` or ``SCRIPT_NAME`` intact." +msgstr "" +"将单个名称从 ``PATH_INFO`` 变换为 ``SCRIPT_NAME`` 并返回该名称。 *environ* 目录将被原地 " +"*修改*;如果你需要保留原始 ``PATH_INFO`` 或 ``SCRIPT_NAME`` 不变请使用一个副本。" + +#: ../../library/wsgiref.rst:82 +msgid "" +"If there are no remaining path segments in ``PATH_INFO``, ``None`` is " +"returned." +msgstr "如果 ``PATH_INFO`` 中没有剩余的路径节,则返回 ``None``。" + +#: ../../library/wsgiref.rst:84 +msgid "" +"Typically, this routine is used to process each portion of a request URI " +"path, for example to treat the path as a series of dictionary keys. This " +"routine modifies the passed-in environment to make it suitable for invoking " +"another WSGI application that is located at the target URI. For example, if " +"there is a WSGI application at ``/foo``, and the request URI path is " +"``/foo/bar/baz``, and the WSGI application at ``/foo`` calls " +":func:`shift_path_info`, it will receive the string \"bar\", and the " +"environment will be updated to be suitable for passing to a WSGI application" +" at ``/foo/bar``. That is, ``SCRIPT_NAME`` will change from ``/foo`` to " +"``/foo/bar``, and ``PATH_INFO`` will change from ``/bar/baz`` to ``/baz``." +msgstr "" +"通常,此例程被用来处理请求 URI 路径的每个部分,比如说将路径当作是一系列字典键。 此例程会修改传入的环境以使其适合唤起位于目标 URI 上的其他 " +"WSGI 应用程序,如果有一个 WSGI 应用程序位于 ``/foo``,而请求 URI 路径为 ``/foo/bar/baz``,且位于 " +"``/foo`` 的 WSGI 应用程序调用了 :func:`shift_path_info`,它将获得字符串 " +"\"bar\",而环境将被更新以适合传递给位于 ``/foo/bar`` 的 WSGI 应用程序。 也就是说,``SCRIPT_NAME`` 将由 " +"``/foo`` 变为 ``/foo/bar``,而 ``PATH_INFO`` 将由 ``/bar/baz`` 变为 ``/baz``。" + +#: ../../library/wsgiref.rst:95 +msgid "" +"When ``PATH_INFO`` is just a \"/\", this routine returns an empty string and" +" appends a trailing slash to ``SCRIPT_NAME``, even though empty path " +"segments are normally ignored, and ``SCRIPT_NAME`` doesn't normally end in a" +" slash. This is intentional behavior, to ensure that an application can " +"tell the difference between URIs ending in ``/x`` from ones ending in " +"``/x/`` when using this routine to do object traversal." +msgstr "" +"当 ``PATH_INFO`` 只是 \"/\" 时,此例程会返回一个空字符串并在 ``SCRIPT_NAME`` " +"末尾添加一个斜杠,虽然空的路径节通常会被忽略,并且 ``SCRIPT_NAME`` 通常也不以斜杠作为结束。 " +"此行为是有意为之的,用来确保应用程序在使用此例程执行对象遍历时能区分以 ``/x`` 结束的和以 ``/x/`` 结束的 URI。" + +#: ../../library/wsgiref.rst:105 +msgid "Update *environ* with trivial defaults for testing purposes." +msgstr "以简短的默认值更新 *environ* 用于测试目的。" + +#: ../../library/wsgiref.rst:107 +msgid "" +"This routine adds various parameters required for WSGI, including " +"``HTTP_HOST``, ``SERVER_NAME``, ``SERVER_PORT``, ``REQUEST_METHOD``, " +"``SCRIPT_NAME``, ``PATH_INFO``, and all of the :pep:`3333`\\ -defined " +"``wsgi.*`` variables. It only supplies default values, and does not replace" +" any existing settings for these variables." +msgstr "" +"此例程会添加 WSGI 所需要的各种参数,包括 ``HTTP_HOST``, ``SERVER_NAME``, ``SERVER_PORT``, " +"``REQUEST_METHOD``, ``SCRIPT_NAME``, ``PATH_INFO`` 以及 :pep:`3333` 中定义的所有 " +"``wsgi.*`` 变量。 它只提供默认值,而不会替换这些变量的现有设置。" + +#: ../../library/wsgiref.rst:113 +msgid "" +"This routine is intended to make it easier for unit tests of WSGI servers " +"and applications to set up dummy environments. It should NOT be used by " +"actual WSGI servers or applications, since the data is fake!" +msgstr "" +"此例程的目的是让 WSGI 服务器的单元测试以及应用程序设置测试环境更为容易。 它不应该被实际的 WSGI 服务器或应用程序所使用,因为它用的是假数据!" + +#: ../../library/wsgiref.rst:117 ../../library/wsgiref.rst:164 +#: ../../library/wsgiref.rst:286 ../../library/wsgiref.rst:418 +msgid "Example usage::" +msgstr "用法示例::" + +#: ../../library/wsgiref.rst:141 +msgid "" +"In addition to the environment functions above, the :mod:`wsgiref.util` " +"module also provides these miscellaneous utilities:" +msgstr "除了上述的环境函数,:mod:`wsgiref.util` 模块还提供了以下辅助工具:" + +#: ../../library/wsgiref.rst:147 +msgid "" +"Return ``True`` if 'header_name' is an HTTP/1.1 \"Hop-by-Hop\" header, as " +"defined by :rfc:`2616`." +msgstr "" +"如果 'header_name' 是 :rfc:`2616` 所定义的 HTTP/1.1 \"Hop-by-Hop\" 标头则返回 ``True``。" + +#: ../../library/wsgiref.rst:153 +msgid "" +"A wrapper to convert a file-like object to an :term:`iterator`. The " +"resulting objects support both :meth:`__getitem__` and :meth:`__iter__` " +"iteration styles, for compatibility with Python 2.1 and Jython. As the " +"object is iterated over, the optional *blksize* parameter will be repeatedly" +" passed to the *filelike* object's :meth:`read` method to obtain bytestrings" +" to yield. When :meth:`read` returns an empty bytestring, iteration is " +"ended and is not resumable." +msgstr "" +"一个将文件类对象转换为 :term:`iterator` 的包装器。 结果对象同时支持 :meth:`__getitem__` 和 " +":meth:`__iter__` 迭代形式,以便兼容 Python 2.1 和 Jython。 当对象被迭代时,可选的 *blksize* " +"形参将被反复地传给 *filelike* 对象的 :meth:`read` 方法以获取字节串并输出。 当 :meth:`read` " +"返回空字节串时,迭代将结束并不可再恢复。" + +#: ../../library/wsgiref.rst:160 +msgid "" +"If *filelike* has a :meth:`close` method, the returned object will also have" +" a :meth:`close` method, and it will invoke the *filelike* object's " +":meth:`close` method when called." +msgstr "" +"如果 *filelike* 具有 :meth:`close` 方法,返回的对象也将具有 :meth:`close` 方法,并且它将在被调用时唤起 " +"*filelike* 对象的 :meth:`close` 方法。" + +#: ../../library/wsgiref.rst:176 +msgid "Support for :meth:`sequence protocol <__getitem__>` is deprecated." +msgstr "对 :meth:`序列协议 <__getitem__>` 的支持已被弃用。" + +#: ../../library/wsgiref.rst:181 +msgid ":mod:`wsgiref.headers` -- WSGI response header tools" +msgstr ":mod:`wsgiref.headers` -- WSGI 响应标头工具" + +#: ../../library/wsgiref.rst:187 +msgid "" +"This module provides a single class, :class:`Headers`, for convenient " +"manipulation of WSGI response headers using a mapping-like interface." +msgstr "此模块提供了一个单独的类 :class:`Headers`,可以方便地使用一个映射类接口操作 WSGI 响应标头。" + +#: ../../library/wsgiref.rst:193 +msgid "" +"Create a mapping-like object wrapping *headers*, which must be a list of " +"header name/value tuples as described in :pep:`3333`. The default value of " +"*headers* is an empty list." +msgstr "" +"创建一个包装了 *headers* 的映射类对象,它必须为如 :pep:`3333` 所描述的由标头名称/值元组构成的列表。 *headers* " +"的默认值为一个空列表。" + +#: ../../library/wsgiref.rst:197 +msgid "" +":class:`Headers` objects support typical mapping operations including " +":meth:`__getitem__`, :meth:`get`, :meth:`__setitem__`, :meth:`setdefault`, " +":meth:`__delitem__` and :meth:`__contains__`. For each of these methods, " +"the key is the header name (treated case-insensitively), and the value is " +"the first value associated with that header name. Setting a header deletes " +"any existing values for that header, then adds a new value at the end of the" +" wrapped header list. Headers' existing order is generally maintained, with" +" new headers added to the end of the wrapped list." +msgstr "" +":class:`Headers` 对象支持典型的映射操作包括 :meth:`__getitem__`, :meth:`get`, " +":meth:`__setitem__`, :meth:`setdefault`, :meth:`__delitem__` 和 " +":meth:`__contains__`。 对于以上各个方法,映射的键是标头名称(大小写不敏感),而值是关联到该标头名称的第一个值。 " +"设置一个标头会移除该标头的任何现有值,再将一个新值添加到所包装的标头列表末尾。 标头的现有顺序通常会保持不变,只在所包装的列表末尾添加新的标头。" + +#: ../../library/wsgiref.rst:206 +msgid "" +"Unlike a dictionary, :class:`Headers` objects do not raise an error when you" +" try to get or delete a key that isn't in the wrapped header list. Getting a" +" nonexistent header just returns ``None``, and deleting a nonexistent header" +" does nothing." +msgstr "" +"与字典不同,当你试图获取或删除所包装的标头列表中不存在的键时 :class:`Headers` 对象不会引发错误。 获取一个不存在的标头只是返回 " +"``None``,而删除一个不存在的标头则没有任何影响。" + +#: ../../library/wsgiref.rst:211 +msgid "" +":class:`Headers` objects also support :meth:`keys`, :meth:`values`, and " +":meth:`items` methods. The lists returned by :meth:`keys` and :meth:`items`" +" can include the same key more than once if there is a multi-valued header." +" The ``len()`` of a :class:`Headers` object is the same as the length of " +"its :meth:`items`, which is the same as the length of the wrapped header " +"list. In fact, the :meth:`items` method just returns a copy of the wrapped " +"header list." +msgstr "" +":class:`Headers` 对象还支持 :meth:`keys`, :meth:`values` 以及 :meth:`items` 方法。 " +"如果存在具有多个值的键则 :meth:`keys` 和 :meth:`items` 所返回的列表可能包括多个相同的键。 对 " +":class:`Headers` 对象执行 ``len()`` 的结果与 :meth:`items` 的长度相同,也与所包装的标头列表的长度相同。 " +"实际上,:meth:`items` 方法只是返回所包装的标头列表的一个副本。" + +#: ../../library/wsgiref.rst:218 +msgid "" +"Calling ``bytes()`` on a :class:`Headers` object returns a formatted " +"bytestring suitable for transmission as HTTP response headers. Each header " +"is placed on a line with its value, separated by a colon and a space. Each " +"line is terminated by a carriage return and line feed, and the bytestring is" +" terminated with a blank line." +msgstr "" +"在 :class:`Headers` 对象上调用 ``bytes()`` 将返回适用于作为 HTTP 响应标头来传输的已格式化字节串。 " +"每个标头附带以逗号加空格分隔的值放置在一行中。 每一行都以回车符加换行符结束,且该字节串会以一个空行作为结束。" + +#: ../../library/wsgiref.rst:224 +msgid "" +"In addition to their mapping interface and formatting features, " +":class:`Headers` objects also have the following methods for querying and " +"adding multi-valued headers, and for adding headers with MIME parameters:" +msgstr "除了映射接口和格式化特性,:class:`Headers` 对象还具有下列方法用来查询和添加多值标头,以及添加具有 MIME 参数的标头:" + +#: ../../library/wsgiref.rst:231 +msgid "Return a list of all the values for the named header." +msgstr "返回包含指定标头的所有值的列表。" + +#: ../../library/wsgiref.rst:233 +msgid "" +"The returned list will be sorted in the order they appeared in the original " +"header list or were added to this instance, and may contain duplicates. Any" +" fields deleted and re-inserted are always appended to the header list. If " +"no fields exist with the given name, returns an empty list." +msgstr "" +"返回的列表项将按它们在原始标头列表中的出现或被添加到实例中的顺序排序,并可能包含重复项。 任何被删除并重新插入的字段总是会被添加到标头列表末尾。 " +"如果给定名称的字段不存在,则返回一个空列表。" + +#: ../../library/wsgiref.rst:241 +msgid "" +"Add a (possibly multi-valued) header, with optional MIME parameters " +"specified via keyword arguments." +msgstr "添加一个(可能有多个值)标头,带有通过关键字参数指明的可选的 MIME 参数。" + +#: ../../library/wsgiref.rst:244 +msgid "" +"*name* is the header field to add. Keyword arguments can be used to set " +"MIME parameters for the header field. Each parameter must be a string or " +"``None``. Underscores in parameter names are converted to dashes, since " +"dashes are illegal in Python identifiers, but many MIME parameter names " +"include dashes. If the parameter value is a string, it is added to the " +"header value parameters in the form ``name=\"value\"``. If it is ``None``, " +"only the parameter name is added. (This is used for MIME parameters without " +"a value.) Example usage::" +msgstr "" +"*name* 是要添加的标头字段。 可以使用关键字参数来为标头字段设置 MIME 参数。 每个参数必须为字符串或 ``None``。 " +"参数名中的下划线会被转换为连字符,因为连字符不可在 Python 标识符中出现,但许多 MIME 参数名都包括连字符。 如果参数值为字符串,它会以 " +"``name=\"value\"`` 的形式被添加到标头值参数中。 如果为 ``None``,则只会添加参数名。 (这适用于没有值的 MIME 参数。)" +" 示例用法::" + +#: ../../library/wsgiref.rst:254 +msgid "The above will add a header that looks like this::" +msgstr "以上代码将添加一个这样的标头::" + +#: ../../library/wsgiref.rst:259 +msgid "*headers* parameter is optional." +msgstr "*headers* 形参是可选的。" + +#: ../../library/wsgiref.rst:264 +msgid ":mod:`wsgiref.simple_server` -- a simple WSGI HTTP server" +msgstr ":mod:`wsgiref.simple_server` -- 一个简单的 WSGI HTTP 服务器" + +#: ../../library/wsgiref.rst:270 +msgid "" +"This module implements a simple HTTP server (based on :mod:`http.server`) " +"that serves WSGI applications. Each server instance serves a single WSGI " +"application on a given host and port. If you want to serve multiple " +"applications on a single host and port, you should create a WSGI application" +" that parses ``PATH_INFO`` to select which application to invoke for each " +"request. (E.g., using the :func:`shift_path_info` function from " +":mod:`wsgiref.util`.)" +msgstr "" +"此模块实现了一个简单的 HTTP 服务器 (基于 :mod:`http.server`) 来发布 WSGI 应用程序。 " +"每个服务器实例会在给定的主机名和端口号上发布一个 WSGI 应用程序。 如果你想在一个主机名和端口号上发布多个应用程序,你应当创建一个通过解析 " +"``PATH_INFO`` 来选择每个请求要唤起哪个应用程序的 WSGI 应用程序。 (例如,使用 :mod:`wsgiref.util` 中的 " +":func:`shift_path_info` 函数。)" + +#: ../../library/wsgiref.rst:281 +msgid "" +"Create a new WSGI server listening on *host* and *port*, accepting " +"connections for *app*. The return value is an instance of the supplied " +"*server_class*, and will process requests using the specified " +"*handler_class*. *app* must be a WSGI application object, as defined by " +":pep:`3333`." +msgstr "" +"创建一个新的 WSGI 服务器并在 *host* 和 *port* 上进行监听,接受对 *app* 的连接。 返回值是所提供的 " +"*server_class* 的实例,并将使用指定的 *handler_class* 来处理请求。 *app* 必须是一个如 :pep:`3333` " +"所定义的 WSGI 应用程序对象。" + +#: ../../library/wsgiref.rst:302 +msgid "" +"This function is a small but complete WSGI application that returns a text " +"page containing the message \"Hello world!\" and a list of the key/value " +"pairs provided in the *environ* parameter. It's useful for verifying that a" +" WSGI server (such as :mod:`wsgiref.simple_server`) is able to run a simple " +"WSGI application correctly." +msgstr "" +"此函数是一个小巧但完整的 WSGI 应用程序,它返回一个包含消息 \"Hello world!\" 以及 *environ* " +"形参中提供的键/值对的文本页面。 它适用于验证 WSGI 服务器 (例如 :mod:`wsgiref.simple_server`) " +"是否能够正确地运行一个简单的 WSGI 应用程序。" + +#: ../../library/wsgiref.rst:311 +msgid "" +"Create a :class:`WSGIServer` instance. *server_address* should be a " +"``(host,port)`` tuple, and *RequestHandlerClass* should be the subclass of " +":class:`http.server.BaseHTTPRequestHandler` that will be used to process " +"requests." +msgstr "" +"创建一个 :class:`WSGIServer` 实例。 *server_address* 应当是一个 ``(host,port)`` 元组,而 " +"*RequestHandlerClass* 应当是 :class:`http.server.BaseHTTPRequestHandler` " +"的子类,它将被用来处理请求。" + +#: ../../library/wsgiref.rst:316 +msgid "" +"You do not normally need to call this constructor, as the " +":func:`make_server` function can handle all the details for you." +msgstr "你通常不需要调用此构造器,因为 :func:`make_server` 函数能为你处理所有的细节。" + +#: ../../library/wsgiref.rst:319 +msgid "" +":class:`WSGIServer` is a subclass of :class:`http.server.HTTPServer`, so all" +" of its methods (such as :meth:`serve_forever` and :meth:`handle_request`) " +"are available. :class:`WSGIServer` also provides these WSGI-specific " +"methods:" +msgstr "" +":class:`WSGIServer` 是 :class:`http.server.HTTPServer` 的子类,因此它所有的方法 (例如 " +":meth:`serve_forever` 和 :meth:`handle_request`) 都是可用的。 :class:`WSGIServer` " +"还提供了以下 WSGI 专属的方法:" + +#: ../../library/wsgiref.rst:326 +msgid "" +"Sets the callable *application* as the WSGI application that will receive " +"requests." +msgstr "将可调用对象 *application* 设为将要接受请求的 WSGI 应用程序。" + +#: ../../library/wsgiref.rst:332 +msgid "Returns the currently-set application callable." +msgstr "返回当前设置的应用程序可调用对象。" + +#: ../../library/wsgiref.rst:334 +msgid "" +"Normally, however, you do not need to use these additional methods, as " +":meth:`set_app` is normally called by :func:`make_server`, and the " +":meth:`get_app` exists mainly for the benefit of request handler instances." +msgstr "" +"但是,你通常不需要使用这些附加的方法,因为 :meth:`set_app` 通常会由 :func:`make_server` 来调用,而 " +":meth:`get_app` 主要是针对请求处理器实例的。" + +#: ../../library/wsgiref.rst:341 +msgid "" +"Create an HTTP handler for the given *request* (i.e. a socket), " +"*client_address* (a ``(host,port)`` tuple), and *server* " +"(:class:`WSGIServer` instance)." +msgstr "" +"为给定的 *request* 创建一个 HTTP 处理器 (例如套接字),*client_address* (一个 ``(host,port)`` " +"元组),以及 *server* (:class:`WSGIServer` 实例)。" + +#: ../../library/wsgiref.rst:344 +msgid "" +"You do not need to create instances of this class directly; they are " +"automatically created as needed by :class:`WSGIServer` objects. You can, " +"however, subclass this class and supply it as a *handler_class* to the " +":func:`make_server` function. Some possibly relevant methods for overriding" +" in subclasses:" +msgstr "" +"你不需要直接创建该类的实例;它们会根据 :class:`WSGIServer` 对象的需要自动创建。 但是,你可以子类化该类并将其作为 " +"*handler_class* 提供给 :func:`make_server` 函数。 一些可能在子类中重载的相关方法:" + +#: ../../library/wsgiref.rst:353 +msgid "" +"Returns a dictionary containing the WSGI environment for a request. The " +"default implementation copies the contents of the :class:`WSGIServer` " +"object's :attr:`base_environ` dictionary attribute and then adds various " +"headers derived from the HTTP request. Each call to this method should " +"return a new dictionary containing all of the relevant CGI environment " +"variables as specified in :pep:`3333`." +msgstr "" +"返回包含针对一个请求的 WSGI 环境的字典。 默认实现会拷贝 :class:`WSGIServer` 对象的 " +":attr:`base_environ` 字典属性的内容并添加从 HTTP 请求获取的各种标头。 对此方法的每个调用应当返回一个 :pep:`3333`" +" 所指明的包含所有相关 CGI 环境变量的新字典。" + +#: ../../library/wsgiref.rst:363 +msgid "" +"Return the object that should be used as the ``wsgi.errors`` stream. The " +"default implementation just returns ``sys.stderr``." +msgstr "返回应被用作 ``wsgi.errors`` 流的对象。 默认实现将只返回 ``sys.stderr``。" + +#: ../../library/wsgiref.rst:369 +msgid "" +"Process the HTTP request. The default implementation creates a handler " +"instance using a :mod:`wsgiref.handlers` class to implement the actual WSGI " +"application interface." +msgstr "" +"处理 HTTP 请求。 默认的实现会使用 :mod:`wsgiref.handlers` 类创建一个处理器实例来实现实际的 WSGI 应用程序接口。" + +#: ../../library/wsgiref.rst:375 +msgid ":mod:`wsgiref.validate` --- WSGI conformance checker" +msgstr ":mod:`wsgiref.validate` --- WSGI 一致性检查器" + +#: ../../library/wsgiref.rst:381 +msgid "" +"When creating new WSGI application objects, frameworks, servers, or " +"middleware, it can be useful to validate the new code's conformance using " +":mod:`wsgiref.validate`. This module provides a function that creates WSGI " +"application objects that validate communications between a WSGI server or " +"gateway and a WSGI application object, to check both sides for protocol " +"conformance." +msgstr "" +"当创建新的 WSGI 应用程序对象、框架、服务器或中间件时,使用 :mod:`wsgiref.validate` 来验证新代码的一致性是很有用的。 " +"此模块提供了一个创建 WSGI 应用程序对象的函数来验证 WSGI 服务器或网关与 WSGI 应用程序对象之间的通信,以便检查双方的协议一致性。" + +#: ../../library/wsgiref.rst:388 +msgid "" +"Note that this utility does not guarantee complete :pep:`3333` compliance; " +"an absence of errors from this module does not necessarily mean that errors " +"do not exist. However, if this module does produce an error, then it is " +"virtually certain that either the server or application is not 100% " +"compliant." +msgstr "" +"请注意这个工具并不保证完全符合 :pep:`3333`;此模块没有报告错误并不一定表示不存在错误。 " +"但是,如果此模块确实报告了错误,那么几乎可以肯定服务器或应用程序不是 100% 符合要求的。" + +#: ../../library/wsgiref.rst:393 +msgid "" +"This module is based on the :mod:`paste.lint` module from Ian Bicking's " +"\"Python Paste\" library." +msgstr "此模块是基于 Ian Bicking 的 \"Python Paste\" 库的 :mod:`paste.lint` 模块。" + +#: ../../library/wsgiref.rst:399 +msgid "" +"Wrap *application* and return a new WSGI application object. The returned " +"application will forward all requests to the original *application*, and " +"will check that both the *application* and the server invoking it are " +"conforming to the WSGI specification and to :rfc:`2616`." +msgstr "" +"包装 *application* 并返回一个新的 WSGI 应用程序对象。 返回的应用程序将转发所有请求到原始的 *application*,并将检查" +" *application* 和唤起它的服务器是否都符合 WSGI 规范和 :rfc:`2616`。" + +#: ../../library/wsgiref.rst:404 +msgid "" +"Any detected nonconformance results in an :exc:`AssertionError` being " +"raised; note, however, that how these errors are handled is server-" +"dependent. For example, :mod:`wsgiref.simple_server` and other servers " +"based on :mod:`wsgiref.handlers` (that don't override the error handling " +"methods to do something else) will simply output a message that an error has" +" occurred, and dump the traceback to ``sys.stderr`` or some other error " +"stream." +msgstr "" +"任何被检测到的不一致性都会导致引发 :exc:`AssertionError`;但是请注意,如何对待这些错误取决于具体服务器。 " +"例如,:mod:`wsgiref.simple_server` 和其他基于 :mod:`wsgiref.handlers` " +"的服务器(它们没有重载错误处理方法来做其他操作)将简单地输出一条消息报告发生了错误,并将回溯转给 ``sys.stderr`` 或者其他错误数据流。" + +#: ../../library/wsgiref.rst:411 +msgid "" +"This wrapper may also generate output using the :mod:`warnings` module to " +"indicate behaviors that are questionable but which may not actually be " +"prohibited by :pep:`3333`. Unless they are suppressed using Python command-" +"line options or the :mod:`warnings` API, any such warnings will be written " +"to ``sys.stderr`` (*not* ``wsgi.errors``, unless they happen to be the same " +"object)." +msgstr "" +"这个包装器也可能会使用 :mod:`warnings` 模块生成输出来指明存在问题但实际上未被 :pep:`3333` 所禁止的行为。 除非它们被 " +"Python 命令行选项或 :mod:`warnings` API 所屏蔽,否则任何此类警告都将被写入到 ``sys.stderr`` (*不是* " +"``wsgi.errors``,除非它们恰好是同一个对象)。" + +#: ../../library/wsgiref.rst:443 +msgid ":mod:`wsgiref.handlers` -- server/gateway base classes" +msgstr ":mod:`wsgiref.handlers` -- 服务器/网关基类" + +#: ../../library/wsgiref.rst:449 +msgid "" +"This module provides base handler classes for implementing WSGI servers and " +"gateways. These base classes handle most of the work of communicating with " +"a WSGI application, as long as they are given a CGI-like environment, along " +"with input, output, and error streams." +msgstr "" +"此模块提供了用于实现 WSGI 服务器和网关的处理器基类。 这些基类可处理大部分与 WSGI " +"应用程序通信的工作,只要给予它们一个带有输入、输出和错误流的 CGI 类环境。" + +#: ../../library/wsgiref.rst:457 +msgid "" +"CGI-based invocation via ``sys.stdin``, ``sys.stdout``, ``sys.stderr`` and " +"``os.environ``. This is useful when you have a WSGI application and want to" +" run it as a CGI script. Simply invoke ``CGIHandler().run(app)``, where " +"``app`` is the WSGI application object you wish to invoke." +msgstr "" +"通过 ``sys.stdin``, ``sys.stdout``, ``sys.stderr`` 和 ``os.environ`` 发起基于 CGI " +"的调用。 这在当你有一个 WSGI 应用程序并想将其作为 CGI 脚本运行时很有用处。 只需唤起 " +"``CGIHandler().run(app)``,其中 ``app`` 是你想要唤起的 WSGI 应用程序。" + +#: ../../library/wsgiref.rst:462 +msgid "" +"This class is a subclass of :class:`BaseCGIHandler` that sets " +"``wsgi.run_once`` to true, ``wsgi.multithread`` to false, and " +"``wsgi.multiprocess`` to true, and always uses :mod:`sys` and :mod:`os` to " +"obtain the necessary CGI streams and environment." +msgstr "" +"该类是 :class:`BaseCGIHandler` 的子类,它将设置 ``wsgi.run_once`` " +"为真值,``wsgi.multithread`` 为假值,``wsgi.multiprocess`` 为真值,并总是使用 :mod:`sys` 和 " +":mod:`os` 来获取所需的 CGI 流和环境。" + +#: ../../library/wsgiref.rst:470 +msgid "" +"A specialized alternative to :class:`CGIHandler`, for use when deploying on " +"Microsoft's IIS web server, without having set the config allowPathInfo " +"option (IIS>=7) or metabase allowPathInfoForScriptMappings (IIS<7)." +msgstr "" +":class:`CGIHandler` 的一个专门化替代,用于在 Microsoft 的 IIS Web 服务器上部署,无需设置 config " +"allowPathInfo 选项 (IIS>=7) 或 metabase allowPathInfoForScriptMappings (IIS<7)。" + +#: ../../library/wsgiref.rst:474 +msgid "" +"By default, IIS gives a ``PATH_INFO`` that duplicates the ``SCRIPT_NAME`` at" +" the front, causing problems for WSGI applications that wish to implement " +"routing. This handler strips any such duplicated path." +msgstr "" +"默认情况下,IIS 给出的 ``PATH_INFO`` 会与前面的 ``SCRIPT_NAME`` 重复,导致想要实现路由的 WSGI " +"应用程序出现问题。 这个处理器会去除任何这样的重复路径。" + +#: ../../library/wsgiref.rst:478 +msgid "" +"IIS can be configured to pass the correct ``PATH_INFO``, but this causes " +"another bug where ``PATH_TRANSLATED`` is wrong. Luckily this variable is " +"rarely used and is not guaranteed by WSGI. On IIS<7, though, the setting can" +" only be made on a vhost level, affecting all other script mappings, many of" +" which break when exposed to the ``PATH_TRANSLATED`` bug. For this reason " +"IIS<7 is almost never deployed with the fix (Even IIS7 rarely uses it " +"because there is still no UI for it.)." +msgstr "" +"IIS 可被配置为传递正确的 ``PATH_INFO``,但这会导致另一个 ``PATH_TRANSLATED`` 出错的问题。 " +"幸运的是这个变量很少被使用并且不被 WSGI 所保证。 但是在 IIS<7 上,这个设置只能在 vhost " +"层级上进行,影响到所有其他脚本映射,其中许多在受 ``PATH_TRANSLATED`` 问题影响时都会中断运行。 因此 IIS<7 " +"的部署几乎从不附带这样的修正(即使 IIS7 也很少使用它,因为它仍然不带 UI)。" + +#: ../../library/wsgiref.rst:486 +msgid "" +"There is no way for CGI code to tell whether the option was set, so a " +"separate handler class is provided. It is used in the same way as " +":class:`CGIHandler`, i.e., by calling ``IISCGIHandler().run(app)``, where " +"``app`` is the WSGI application object you wish to invoke." +msgstr "" +"CGI 代码没有办法确定该选项是否已设置,因此提供了一个单独的处理器类。 它的用法与 :class:`CGIHandler` 相同,即通过调用 " +"``IISCGIHandler().run(app)``,其中 ``app`` 是你想要唤起的 WSGI 应用程序。" + +#: ../../library/wsgiref.rst:496 +msgid "" +"Similar to :class:`CGIHandler`, but instead of using the :mod:`sys` and " +":mod:`os` modules, the CGI environment and I/O streams are specified " +"explicitly. The *multithread* and *multiprocess* values are used to set the " +"``wsgi.multithread`` and ``wsgi.multiprocess`` flags for any applications " +"run by the handler instance." +msgstr "" +"类似于 :class:`CGIHandler`,但是改用 :mod:`sys` 和 :mod:`os` 模块,CGI 环境和 I/O 流会被显式地指定。" +" *multithread* 和 *multiprocess* 值被用来为处理器实例所运行的任何应用程序设置 ``wsgi.multithread`` " +"和 ``wsgi.multiprocess`` 旗标。" + +#: ../../library/wsgiref.rst:502 +msgid "" +"This class is a subclass of :class:`SimpleHandler` intended for use with " +"software other than HTTP \"origin servers\". If you are writing a gateway " +"protocol implementation (such as CGI, FastCGI, SCGI, etc.) that uses a " +"``Status:`` header to send an HTTP status, you probably want to subclass " +"this instead of :class:`SimpleHandler`." +msgstr "" +"该类是 :class:`SimpleHandler` 的子类,旨在用于 HTTP \"原始服务器\" 以外的软件。 如果你在编写一个网关协议实现(例如 " +"CGI, FastCGI, SCGI 等等),它使用 ``Status:`` 标头来发布 HTTP 状态,你可能会想要子类化该类而不是 " +":class:`SimpleHandler`。" + +#: ../../library/wsgiref.rst:511 +msgid "" +"Similar to :class:`BaseCGIHandler`, but designed for use with HTTP origin " +"servers. If you are writing an HTTP server implementation, you will " +"probably want to subclass this instead of :class:`BaseCGIHandler`." +msgstr "" +"类似于 :class:`BaseCGIHandler`,但被设计用于 HTTP 原始服务器。 如果你在编写一个 HTTP " +"服务器实现,你可能会想要子类化该类而不是 :class:`BaseCGIHandler`。" + +#: ../../library/wsgiref.rst:515 +msgid "" +"This class is a subclass of :class:`BaseHandler`. It overrides the " +":meth:`__init__`, :meth:`get_stdin`, :meth:`get_stderr`, " +":meth:`add_cgi_vars`, :meth:`_write`, and :meth:`_flush` methods to support " +"explicitly setting the environment and streams via the constructor. The " +"supplied environment and streams are stored in the :attr:`stdin`, " +":attr:`stdout`, :attr:`stderr`, and :attr:`environ` attributes." +msgstr "" +"该类是 :class:`BaseHandler` 的子类。 它重载了 :meth:`__init__`, :meth:`get_stdin`, " +":meth:`get_stderr`, :meth:`add_cgi_vars`, :meth:`_write` 和 :meth:`_flush` " +"方法以支持通过构造器显式地设置环境和流。 所提供的环境和流存储在 :attr:`stdin`, :attr:`stdout`, " +":attr:`stderr` 和 :attr:`environ` 属性中。" + +#: ../../library/wsgiref.rst:522 +msgid "" +"The :meth:`~io.BufferedIOBase.write` method of *stdout* should write each " +"chunk in full, like :class:`io.BufferedIOBase`." +msgstr "" +"*stdout* 的 :meth:`~io.BufferedIOBase.write` 方法应该完整写入每个数据块,与 " +":class:`io.BufferedIOBase` 一样。" + +#: ../../library/wsgiref.rst:528 +msgid "" +"This is an abstract base class for running WSGI applications. Each instance" +" will handle a single HTTP request, although in principle you could create a" +" subclass that was reusable for multiple requests." +msgstr "" +"这是适用于运行 WSGI 应用程序的抽象基类。 每个实例将处理一个单独的 HTTP 请求,不过在原则上你也可以创建一个可针对多个请求重用的子类。" + +#: ../../library/wsgiref.rst:532 +msgid "" +":class:`BaseHandler` instances have only one method intended for external " +"use:" +msgstr ":class:`BaseHandler` 实例只有一个方法提供给外部使用:" + +#: ../../library/wsgiref.rst:537 +msgid "Run the specified WSGI application, *app*." +msgstr "运行指定的 WSGI 应用程序 *app*。" + +#: ../../library/wsgiref.rst:539 +msgid "" +"All of the other :class:`BaseHandler` methods are invoked by this method in " +"the process of running the application, and thus exist primarily to allow " +"customizing the process." +msgstr "所有的 :class:`BaseHandler` 其他方法都是在运行应用程序过程中由该方法唤起的,因此主要是为了允许定制运行过程。" + +#: ../../library/wsgiref.rst:543 +msgid "The following methods MUST be overridden in a subclass:" +msgstr "以下方法必须在子类中被重载:" + +#: ../../library/wsgiref.rst:548 +msgid "" +"Buffer the bytes *data* for transmission to the client. It's okay if this " +"method actually transmits the data; :class:`BaseHandler` just separates " +"write and flush operations for greater efficiency when the underlying system" +" actually has such a distinction." +msgstr "" +"缓冲字节数据 *data* 以便传输给客户端。 如果此方法真的传输了数据也是可以的;:class:`BaseHandler` " +"只有在底层系统真有这样的区分时才会区分写入和刷新操作以提高效率。" + +#: ../../library/wsgiref.rst:556 +msgid "" +"Force buffered data to be transmitted to the client. It's okay if this " +"method is a no-op (i.e., if :meth:`_write` actually sends the data)." +msgstr "强制将缓冲的数据传输给客户端。 如果此方法无任何操作也是可以的(例如,:meth:`_write` 实际上已发送了数据)。" + +#: ../../library/wsgiref.rst:562 +msgid "" +"Return an input stream object suitable for use as the ``wsgi.input`` of the " +"request currently being processed." +msgstr "返回一个适合被用作当前所处理请求的 ``wsgi.input`` 的输入流对象。" + +#: ../../library/wsgiref.rst:568 +msgid "" +"Return an output stream object suitable for use as the ``wsgi.errors`` of " +"the request currently being processed." +msgstr "返回一个适合被用作当前所处理请求的 ``wsgi.errors`` 的输出流对象。" + +#: ../../library/wsgiref.rst:574 +msgid "" +"Insert CGI variables for the current request into the :attr:`environ` " +"attribute." +msgstr "将当前请求的 CGI 变量插入到 :attr:`environ` 属性。" + +#: ../../library/wsgiref.rst:576 +msgid "" +"Here are some other methods and attributes you may wish to override. This " +"list is only a summary, however, and does not include every method that can " +"be overridden. You should consult the docstrings and source code for " +"additional information before attempting to create a customized " +":class:`BaseHandler` subclass." +msgstr "" +"以下是一些你可能会想要重载的其他方法。 但这只是个简略的列表,它不包括每个可被重载的方法。 你应当在在尝试创建自定义的 " +":class:`BaseHandler` 子类之前参阅文档字符串和源代码来了解更多信息。" + +#: ../../library/wsgiref.rst:582 +msgid "Attributes and methods for customizing the WSGI environment:" +msgstr "用于自定义 WSGI 环境的属性和方法:" + +#: ../../library/wsgiref.rst:587 +msgid "" +"The value to be used for the ``wsgi.multithread`` environment variable. It " +"defaults to true in :class:`BaseHandler`, but may have a different default " +"(or be set by the constructor) in the other subclasses." +msgstr "" +"用于 ``wsgi.multithread`` 环境变量的值。 它在 :class:`BaseHandler` " +"中默认为真值,但在其他子类中可能有不同的默认值(或是由构造器来设置)。" + +#: ../../library/wsgiref.rst:594 +msgid "" +"The value to be used for the ``wsgi.multiprocess`` environment variable. It" +" defaults to true in :class:`BaseHandler`, but may have a different default " +"(or be set by the constructor) in the other subclasses." +msgstr "" +"用于 ``wsgi.multiprocess`` 环境变量的值。 它在 :class:`BaseHandler` " +"中默认为真值,但在其他子类中可能有不同的默认值(或是由构造器来设置)。" + +#: ../../library/wsgiref.rst:601 +msgid "" +"The value to be used for the ``wsgi.run_once`` environment variable. It " +"defaults to false in :class:`BaseHandler`, but :class:`CGIHandler` sets it " +"to true by default." +msgstr "" +"用于 ``wsgi.run_once`` 环境变量的值。 它在 :class:`BaseHandler` 中默认为假值,但在 " +":class:`CGIHandler` 中默认为真值。" + +#: ../../library/wsgiref.rst:608 +msgid "" +"The default environment variables to be included in every request's WSGI " +"environment. By default, this is a copy of ``os.environ`` at the time that " +":mod:`wsgiref.handlers` was imported, but subclasses can either create their" +" own at the class or instance level. Note that the dictionary should be " +"considered read-only, since the default value is shared between multiple " +"classes and instances." +msgstr "" +"要包括在每个请求的 WSGI 环境中的默认环境变量。 在默认情况下,这是当 :mod:`wsgiref.handlers` 被导入时的 " +"``os.environ`` 的一个副本,但也可以在类或实例层级上创建它们自己的子类。 " +"请注意该字典应当被当作是只读的,因为默认值会在多个类和实际之间共享。" + +#: ../../library/wsgiref.rst:618 +msgid "" +"If the :attr:`origin_server` attribute is set, this attribute's value is " +"used to set the default ``SERVER_SOFTWARE`` WSGI environment variable, and " +"also to set a default ``Server:`` header in HTTP responses. It is ignored " +"for handlers (such as :class:`BaseCGIHandler` and :class:`CGIHandler`) that " +"are not HTTP origin servers." +msgstr "" +"如果设置了 :attr:`origin_server` 属性,该属性的值会被用来设置默认的 ``SERVER_SOFTWARE`` WSGI " +"环境变量,并且还会被用来设置 HTTP 响应中默认的 ``Server:`` 标头。 它会被不是 HTTP 原始服务器的处理器所忽略 (例如 " +":class:`BaseCGIHandler` 和 :class:`CGIHandler`)。" + +#: ../../library/wsgiref.rst:624 +msgid "" +"The term \"Python\" is replaced with implementation specific term like " +"\"CPython\", \"Jython\" etc." +msgstr "名称 \"Python\" 会被替换为实现专属的名称如 \"CPython\", \"Jython\" 等等。" + +#: ../../library/wsgiref.rst:630 +msgid "" +"Return the URL scheme being used for the current request. The default " +"implementation uses the :func:`guess_scheme` function from " +":mod:`wsgiref.util` to guess whether the scheme should be \"http\" or " +"\"https\", based on the current request's :attr:`environ` variables." +msgstr "" +"返回当前请求所使用的 URL 方案。 默认的实现会使用来自 :mod:`wsgiref.util` 的 :func:`guess_scheme` " +"函数根据当前请求的 :attr:`environ` 变量来猜测方案应该是 \"http\" 还是 \"https\"。" + +#: ../../library/wsgiref.rst:638 +msgid "" +"Set the :attr:`environ` attribute to a fully-populated WSGI environment. " +"The default implementation uses all of the above methods and attributes, " +"plus the :meth:`get_stdin`, :meth:`get_stderr`, and :meth:`add_cgi_vars` " +"methods and the :attr:`wsgi_file_wrapper` attribute. It also inserts a " +"``SERVER_SOFTWARE`` key if not present, as long as the :attr:`origin_server`" +" attribute is a true value and the :attr:`server_software` attribute is set." +msgstr "" +"将 :attr:`environ` 属性设为填充了完整内容的 WSGI 环境。 默认的实现会使用上述的所有方法和属性,加上 " +":meth:`get_stdin`, :meth:`get_stderr` 和 :meth:`add_cgi_vars` 方法以及 " +":attr:`wsgi_file_wrapper` 属性。 它还会插入一个 ``SERVER_SOFTWARE`` 键,如果该键还不存在的话,只要 " +":attr:`origin_server` 属性为真值并且设置了 :attr:`server_software` 属性。" + +#: ../../library/wsgiref.rst:645 +msgid "Methods and attributes for customizing exception handling:" +msgstr "用于自定义异常处理的方法和属性:" + +#: ../../library/wsgiref.rst:650 +msgid "" +"Log the *exc_info* tuple in the server log. *exc_info* is a ``(type, value," +" traceback)`` tuple. The default implementation simply writes the traceback" +" to the request's ``wsgi.errors`` stream and flushes it. Subclasses can " +"override this method to change the format or retarget the output, mail the " +"traceback to an administrator, or whatever other action may be deemed " +"suitable." +msgstr "" +"将 *exc_info* 元素记录到服务器日志。 *exc_info* 是一个 ``(type, value, traceback)`` 元组。 " +"默认的实现会简单地将回溯信息写入请求的 ``wsgi.errors`` 流并刷新它。 " +"子类可以重写此方法来修改格式或重设输出目标,通过邮件将回溯信息发给管理员,或执行任何其他符合要求的动作。" + +#: ../../library/wsgiref.rst:659 +msgid "" +"The maximum number of frames to include in tracebacks output by the default " +":meth:`log_exception` method. If ``None``, all frames are included." +msgstr "要包括在默认 :meth:`log_exception` 方法的回溯信息输出中的最大帧数。 如果为 ``None``,则会包括所有的帧。" + +#: ../../library/wsgiref.rst:665 +msgid "" +"This method is a WSGI application to generate an error page for the user. " +"It is only invoked if an error occurs before headers are sent to the client." +msgstr "此方法是一个为用户生成错误页面的 WSGI 应用程序。 它仅当将标头发送给客户端之前发生错误时会被唤起。" + +#: ../../library/wsgiref.rst:668 +msgid "" +"This method can access the current error information using " +"``sys.exc_info()``, and should pass that information to *start_response* " +"when calling it (as described in the \"Error Handling\" section of " +":pep:`3333`)." +msgstr "" +"此方法可使用 ``sys.exc_info()`` 来访问当前错误信息,并应当在调用 *start_response* 时将该信息传递给它(如 " +":pep:`3333` 的 \"Error Handling\" 部分所描述的)。" + +#: ../../library/wsgiref.rst:672 +msgid "" +"The default implementation just uses the :attr:`error_status`, " +":attr:`error_headers`, and :attr:`error_body` attributes to generate an " +"output page. Subclasses can override this to produce more dynamic error " +"output." +msgstr "" +"默认的实现只是使用 :attr:`error_status`, :attr:`error_headers`, 和 :attr:`error_body` " +"属性来生成一个输出页面。 子类可以重写此方法来产生更动态化的错误输出。" + +#: ../../library/wsgiref.rst:676 +msgid "" +"Note, however, that it's not recommended from a security perspective to spit" +" out diagnostics to any old user; ideally, you should have to do something " +"special to enable diagnostic output, which is why the default implementation" +" doesn't include any." +msgstr "" +"但是请注意,从安全角度看来是不建议将诊断信息暴露给任何用户的;理想的做法是你应当通过特别处理来启用诊断输出,因此默认的实现并不包括这样的内容。" + +#: ../../library/wsgiref.rst:684 +msgid "" +"The HTTP status used for error responses. This should be a status string as" +" defined in :pep:`3333`; it defaults to a 500 code and message." +msgstr "用于错误响应的 HTTP 状态。 这应当是一个在 :pep:`3333` 中定义的字符串;它默认为代码 500 以相应的消息。" + +#: ../../library/wsgiref.rst:690 +msgid "" +"The HTTP headers used for error responses. This should be a list of WSGI " +"response headers (``(name, value)`` tuples), as described in :pep:`3333`. " +"The default list just sets the content type to ``text/plain``." +msgstr "" +"用于错误响应的 HTTP 标头。 这应当是由 WSGI 响应标头 (``(name, value)`` 元组) 构成的列表,如 :pep:`3333` " +"所定义的。 默认的列表只是将内容类型设为 ``text/plain``。" + +#: ../../library/wsgiref.rst:697 +msgid "" +"The error response body. This should be an HTTP response body bytestring. " +"It defaults to the plain text, \"A server error occurred. Please contact " +"the administrator.\"" +msgstr "" +"错误响应体。 这应当是一个 HTTP 响应体字节串。 它默认为纯文本 \"A server error occurred. Please " +"contact the administrator.\"" + +#: ../../library/wsgiref.rst:701 +msgid "" +"Methods and attributes for :pep:`3333`'s \"Optional Platform-Specific File " +"Handling\" feature:" +msgstr "用于 :pep:`3333` 的 \"可选的平台专属文件处理\" 特性的方法和属性:" + +#: ../../library/wsgiref.rst:707 +msgid "" +"A ``wsgi.file_wrapper`` factory, or ``None``. The default value of this " +"attribute is the :class:`wsgiref.util.FileWrapper` class." +msgstr "" +"一个 ``wsgi.file_wrapper`` 工厂对象,或为 ``None``。 该属性的默认值是 " +":class:`wsgiref.util.FileWrapper` 类。" + +#: ../../library/wsgiref.rst:713 +msgid "" +"Override to implement platform-specific file transmission. This method is " +"called only if the application's return value is an instance of the class " +"specified by the :attr:`wsgi_file_wrapper` attribute. It should return a " +"true value if it was able to successfully transmit the file, so that the " +"default transmission code will not be executed. The default implementation " +"of this method just returns a false value." +msgstr "" +"重载以实现平台专属的文件传输。 此方法仅在应用程序的返回值是由 :attr:`wsgi_file_wrapper` 属性指定的类的实例时会被调用。 " +"如果它能够成功地传输文件则应当返回真值,以使得默认的传输代码将不会被执行。 此方法的默认实现只会返回假值。" + +#: ../../library/wsgiref.rst:720 +msgid "Miscellaneous methods and attributes:" +msgstr "杂项方法和属性:" + +#: ../../library/wsgiref.rst:725 +msgid "" +"This attribute should be set to a true value if the handler's :meth:`_write`" +" and :meth:`_flush` are being used to communicate directly to the client, " +"rather than via a CGI-like gateway protocol that wants the HTTP status in a " +"special ``Status:`` header." +msgstr "" +"该属性在处理器的 :meth:`_write` 和 :meth:`_flush` 被用于同客户端直接通信而不是通过需要 HTTP 状态为某种特殊 " +"``Status:`` 标头的 CGI 类网关协议时应当被设为真值" + +#: ../../library/wsgiref.rst:730 +msgid "" +"This attribute's default value is true in :class:`BaseHandler`, but false in" +" :class:`BaseCGIHandler` and :class:`CGIHandler`." +msgstr "" +"该属性在 :class:`BaseHandler` 中默认为真值,但在 :class:`BaseCGIHandler` 和 " +":class:`CGIHandler` 中则为假值。" + +#: ../../library/wsgiref.rst:736 +msgid "" +"If :attr:`origin_server` is true, this string attribute is used to set the " +"HTTP version of the response set to the client. It defaults to ``\"1.0\"``." +msgstr "" +"如果 :attr:`origin_server` 为真值,则该字符串属性会被用来设置给客户端的响应的 HTTP 版本。 它的默认值为 " +"``\"1.0\"``。" + +#: ../../library/wsgiref.rst:742 +msgid "" +"Transcode CGI variables from ``os.environ`` to :pep:`3333` \"bytes in " +"unicode\" strings, returning a new dictionary. This function is used by " +":class:`CGIHandler` and :class:`IISCGIHandler` in place of directly using " +"``os.environ``, which is not necessarily WSGI-compliant on all platforms and" +" web servers using Python 3 -- specifically, ones where the OS's actual " +"environment is Unicode (i.e. Windows), or ones where the environment is " +"bytes, but the system encoding used by Python to decode it is anything other" +" than ISO-8859-1 (e.g. Unix systems using UTF-8)." +msgstr "" +"将来自 ``os.environ`` 的 CGI 变量转码为 :pep:`3333` \"bytes in unicode\" " +"字符串,返回一个新的字典。 此函数被 :class:`CGIHandler` 和 :class:`IISCGIHandler` 用来替代直接使用 " +"``os.environ``,后者不一定在所有使用 Python 3 的平台和 Web 服务器上都符合 WSGI 标准 -- 特别是当 OS " +"的实际环境为 Unicode 时 (例如 Windows),或者当环境为字节数据,但被 Python 用来解码它的系统编码格式不是 ISO-8859-1" +" 时 (例如使用 UTF-8 的 Unix 系统)。" + +#: ../../library/wsgiref.rst:751 +msgid "" +"If you are implementing a CGI-based handler of your own, you probably want " +"to use this routine instead of just copying values out of ``os.environ`` " +"directly." +msgstr "如果你要实现自己的基于 CGI 的处理器,你可能会想要使用此例程而不是简单地从 ``os.environ`` 直接拷贝值。" + +#: ../../library/wsgiref.rst:759 +msgid "Examples" +msgstr "例子" + +#: ../../library/wsgiref.rst:761 +msgid "This is a working \"Hello World\" WSGI application::" +msgstr "这是一个可运行的 \"Hello World\" WSGI 应用程序::" + +#: ../../library/wsgiref.rst:786 +msgid "" +"Example of a WSGI application serving the current directory, accept optional" +" directory and port number (default: 8000) on the command line:" +msgstr "一个发布当前目录的 WSGI 应用程序示例,接受通过命令行指定可选的目录和端口号 (默认值: 8000):" diff --git a/library/xdrlib.po b/library/xdrlib.po new file mode 100644 index 000000000..9e9e9810d --- /dev/null +++ b/library/xdrlib.po @@ -0,0 +1,339 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) 2001-2022, Python Software Foundation +# This file is distributed under the same license as the Python package. +# FIRST AUTHOR , YEAR. +# +# Translators: +# ww song , 2018 +# Freesand Leo , 2022 +# +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: Python 3.9\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2022-11-04 14:34+0000\n" +"PO-Revision-Date: 2017-02-16 23:35+0000\n" +"Last-Translator: Freesand Leo , 2022\n" +"Language-Team: Chinese (China) (https://www.transifex.com/python-doc/teams/5390/zh_CN/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: zh_CN\n" +"Plural-Forms: nplurals=1; plural=0;\n" + +#: ../../library/xdrlib.rst:2 +msgid ":mod:`xdrlib` --- Encode and decode XDR data" +msgstr ":mod:`xdrlib` --- 编码与解码 XDR 数据" + +#: ../../library/xdrlib.rst:8 +msgid "**Source code:** :source:`Lib/xdrlib.py`" +msgstr "**源代码:** :source:`Lib/xdrlib.py`" + +#: ../../library/xdrlib.rst:14 +msgid "" +"The :mod:`xdrlib` module is deprecated (see :pep:`PEP 594 <594#xdrlib>` for " +"details)." +msgstr ":mod:`xdrlib` 模块已被弃用(请参阅 :pep:`PEP 594 <594#xdrlib>` 了解详情)。" + +#: ../../library/xdrlib.rst:20 +msgid "" +"The :mod:`xdrlib` module supports the External Data Representation Standard " +"as described in :rfc:`1014`, written by Sun Microsystems, Inc. June 1987. " +"It supports most of the data types described in the RFC." +msgstr "" +":mod:`xdrlib` 模块为外部数据表示标准提供支持,该标准的描述见 :rfc:`1014`,由 Sun Microsystems, Inc. 在" +" 1987 年 6 月撰写。 它支持该 RFC 中描述的大部分数据类型。" + +#: ../../library/xdrlib.rst:24 +msgid "" +"The :mod:`xdrlib` module defines two classes, one for packing variables into" +" XDR representation, and another for unpacking from XDR representation. " +"There are also two exception classes." +msgstr "" +":mod:`xdrlib` 模块定义了两个类,一个用于将变量打包为 XDR 表示形式,另一个用于从 XDR 表示形式解包。 此外还有两个异常类。" + +#: ../../library/xdrlib.rst:31 +msgid "" +":class:`Packer` is the class for packing data into XDR representation. The " +":class:`Packer` class is instantiated with no arguments." +msgstr ":class:`Packer` 是用于将数据打包为 XDR 表示形式的类。 :class:`Packer` 类的实例化不附带参数。" + +#: ../../library/xdrlib.rst:37 +msgid "" +"``Unpacker`` is the complementary class which unpacks XDR data values from a" +" string buffer. The input buffer is given as *data*." +msgstr "``Unpacker`` 是用于相应地从字符串缓冲区解包 XDR 数据值的类。 输入缓冲区将作为 *data* 给出。" + +#: ../../library/xdrlib.rst:45 +msgid ":rfc:`1014` - XDR: External Data Representation Standard" +msgstr ":rfc:`1014` - XDR: 外部数据表示标准" + +#: ../../library/xdrlib.rst:44 +msgid "" +"This RFC defined the encoding of data which was XDR at the time this module " +"was originally written. It has apparently been obsoleted by :rfc:`1832`." +msgstr "这个 RFC 定义了最初编写此模块时 XDR 所用的数据编码格式。 显然它已被 :rfc:`1832` 所淘汰。" + +#: ../../library/xdrlib.rst:47 +msgid ":rfc:`1832` - XDR: External Data Representation Standard" +msgstr ":rfc:`1832` - XDR: 外部数据表示标准" + +#: ../../library/xdrlib.rst:48 +msgid "Newer RFC that provides a revised definition of XDR." +msgstr "更新的 RFC,它提供了经修订的 XDR 定义。" + +#: ../../library/xdrlib.rst:54 +msgid "Packer Objects" +msgstr "Packer 对象" + +#: ../../library/xdrlib.rst:56 +msgid ":class:`Packer` instances have the following methods:" +msgstr ":class:`Packer` 实例具有下列方法:" + +#: ../../library/xdrlib.rst:61 +msgid "Returns the current pack buffer as a string." +msgstr "将当前打包缓冲区以字符串的形式返回。" + +#: ../../library/xdrlib.rst:66 +msgid "Resets the pack buffer to the empty string." +msgstr "将打包缓冲区重置为空字符串。" + +#: ../../library/xdrlib.rst:68 +msgid "" +"In general, you can pack any of the most common XDR data types by calling " +"the appropriate ``pack_type()`` method. Each method takes a single " +"argument, the value to pack. The following simple data type packing methods" +" are supported: :meth:`pack_uint`, :meth:`pack_int`, :meth:`pack_enum`, " +":meth:`pack_bool`, :meth:`pack_uhyper`, and :meth:`pack_hyper`." +msgstr "" +"总体来说,你可以通过调用适当的 ``pack_type()`` 方法来打包任何最常见的 XDR 数据类型。 每个方法都是接受单个参数,即要打包的值。 " +"受支持的简单数据类型打包方法如下: :meth:`pack_uint`, :meth:`pack_int`, :meth:`pack_enum`, " +":meth:`pack_bool`, :meth:`pack_uhyper` 以及 :meth:`pack_hyper`。" + +#: ../../library/xdrlib.rst:77 +msgid "Packs the single-precision floating point number *value*." +msgstr "打包单精度浮点数 *value*。" + +#: ../../library/xdrlib.rst:82 +msgid "Packs the double-precision floating point number *value*." +msgstr "打包双精度浮点数 *value*。" + +#: ../../library/xdrlib.rst:84 +msgid "The following methods support packing strings, bytes, and opaque data:" +msgstr "以下方法支持打包字符串、字节串以及不透明数据。" + +#: ../../library/xdrlib.rst:89 +msgid "" +"Packs a fixed length string, *s*. *n* is the length of the string but it is" +" *not* packed into the data buffer. The string is padded with null bytes if" +" necessary to guaranteed 4 byte alignment." +msgstr "" +"打包固定长度字符串 *s*。 *n* 为字符串的长度,但它 *不会* 被打包进数据缓冲区。 如有必要字符串会以空字节串填充以保证 4 字节对齐。" + +#: ../../library/xdrlib.rst:96 +msgid "" +"Packs a fixed length opaque data stream, similarly to :meth:`pack_fstring`." +msgstr "打包固定长度不透明数据流,类似于 :meth:`pack_fstring`。" + +#: ../../library/xdrlib.rst:101 +msgid "" +"Packs a variable length string, *s*. The length of the string is first " +"packed as an unsigned integer, then the string data is packed with " +":meth:`pack_fstring`." +msgstr "打包可变长度字符串 *s*。 先将字符串的长度打包为无符号整数,再用 :meth:`pack_fstring` 来打包字符串数据。" + +#: ../../library/xdrlib.rst:108 +msgid "" +"Packs a variable length opaque data string, similarly to " +":meth:`pack_string`." +msgstr "打包可变长度不透明数据流,类似于 :meth:`pack_string`。" + +#: ../../library/xdrlib.rst:113 +msgid "Packs a variable length byte stream, similarly to :meth:`pack_string`." +msgstr "打包可变长度字节流,类似于 :meth:`pack_string`。" + +#: ../../library/xdrlib.rst:115 +msgid "The following methods support packing arrays and lists:" +msgstr "下列方法支持打包数组和列表:" + +#: ../../library/xdrlib.rst:120 +msgid "" +"Packs a *list* of homogeneous items. This method is useful for lists with " +"an indeterminate size; i.e. the size is not available until the entire list " +"has been walked. For each item in the list, an unsigned integer ``1`` is " +"packed first, followed by the data value from the list. *pack_item* is the " +"function that is called to pack the individual item. At the end of the " +"list, an unsigned integer ``0`` is packed." +msgstr "" +"打包由同质条目构成的 *list*。 此方法适用于不确定长度的列表;即其长度无法在遍历整个列表之前获知。 对于列表中的每个条目,先打包一个无符号整数 " +"``1``,再添加列表中数据的值。 *pack_item* 是在打包单个条目时要调用的函数。 在列表的末尾,会再打包一个无符号整数 ``0``。" + +#: ../../library/xdrlib.rst:127 +msgid "" +"For example, to pack a list of integers, the code might appear like this::" +msgstr "例如,要打包一个整数列表,代码看起来会是这样::" + +#: ../../library/xdrlib.rst:136 +msgid "" +"Packs a fixed length list (*array*) of homogeneous items. *n* is the length" +" of the list; it is *not* packed into the buffer, but a :exc:`ValueError` " +"exception is raised if ``len(array)`` is not equal to *n*. As above, " +"*pack_item* is the function used to pack each element." +msgstr "" +"打包由同质条目构成的固定长度列表 (*array*)。 *n* 为列表长度;它 *不会* 被打包到缓冲区,但是如果 ``len(array)`` 不等于" +" *n* 则会引发 :exc:`ValueError`。 如上所述,*pack_item* 是在打包每个元素时要使用的函数。" + +#: ../../library/xdrlib.rst:144 +msgid "" +"Packs a variable length *list* of homogeneous items. First, the length of " +"the list is packed as an unsigned integer, then each element is packed as in" +" :meth:`pack_farray` above." +msgstr "" +"打包由同质条目构成的可变长度 *list*。 先将列表的长度打包为无符号整数,再像上面的 :meth:`pack_farray` 一样打包每个元素。" + +#: ../../library/xdrlib.rst:152 +msgid "Unpacker Objects" +msgstr "Unpacker 对象" + +#: ../../library/xdrlib.rst:154 +msgid "The :class:`Unpacker` class offers the following methods:" +msgstr ":class:`Unpacker` 类提供以下方法:" + +#: ../../library/xdrlib.rst:159 +msgid "Resets the string buffer with the given *data*." +msgstr "使用给定的 *data* 重置字符串缓冲区。" + +#: ../../library/xdrlib.rst:164 +msgid "Returns the current unpack position in the data buffer." +msgstr "返回数据缓冲区中的当前解包位置。" + +#: ../../library/xdrlib.rst:169 +msgid "" +"Sets the data buffer unpack position to *position*. You should be careful " +"about using :meth:`get_position` and :meth:`set_position`." +msgstr "" +"将数据缓冲区的解包位置设为 *position*。 你应当小心使用 :meth:`get_position` 和 " +":meth:`set_position`。" + +#: ../../library/xdrlib.rst:175 +msgid "Returns the current unpack data buffer as a string." +msgstr "将当前解包数据缓冲区以字符串的形式返回。" + +#: ../../library/xdrlib.rst:180 +msgid "" +"Indicates unpack completion. Raises an :exc:`Error` exception if all of the" +" data has not been unpacked." +msgstr "表明解包完成。 如果数据没有全部完成解包则会引发 :exc:`Error` 异常。" + +#: ../../library/xdrlib.rst:183 +msgid "" +"In addition, every data type that can be packed with a :class:`Packer`, can " +"be unpacked with an :class:`Unpacker`. Unpacking methods are of the form " +"``unpack_type()``, and take no arguments. They return the unpacked object." +msgstr "" +"此外,每种可通过 :class:`Packer` 打包的数据类型都可通过 :class:`Unpacker` 来解包。 解包方法的形式为 " +"``unpack_type()``,并且不接受任何参数。 该方法将返回解包后的对象。" + +#: ../../library/xdrlib.rst:190 +msgid "Unpacks a single-precision floating point number." +msgstr "解包单精度浮点数。" + +#: ../../library/xdrlib.rst:195 +msgid "" +"Unpacks a double-precision floating point number, similarly to " +":meth:`unpack_float`." +msgstr "解包双精度浮点数,类似于 :meth:`unpack_float`。" + +#: ../../library/xdrlib.rst:198 +msgid "" +"In addition, the following methods unpack strings, bytes, and opaque data:" +msgstr "此外,以下方法可用来解包字符串、字节串以及不透明数据:" + +#: ../../library/xdrlib.rst:203 +msgid "" +"Unpacks and returns a fixed length string. *n* is the number of characters " +"expected. Padding with null bytes to guaranteed 4 byte alignment is " +"assumed." +msgstr "解包并返回固定长度字符串。 *n* 为期望的字符数量。 会预设以空字节串填充以保证 4 字节对齐。" + +#: ../../library/xdrlib.rst:209 +msgid "" +"Unpacks and returns a fixed length opaque data stream, similarly to " +":meth:`unpack_fstring`." +msgstr "解包并返回固定长度数据流,类似于 :meth:`unpack_fstring`。" + +#: ../../library/xdrlib.rst:215 +msgid "" +"Unpacks and returns a variable length string. The length of the string is " +"first unpacked as an unsigned integer, then the string data is unpacked with" +" :meth:`unpack_fstring`." +msgstr "解包并返回可变长度字符串。 先将字符串的长度解包为无符号整数,再用 :meth:`unpack_fstring` 来解包字符串数据。" + +#: ../../library/xdrlib.rst:222 +msgid "" +"Unpacks and returns a variable length opaque data string, similarly to " +":meth:`unpack_string`." +msgstr "解包并返回可变长度不透明数据流,类似于 :meth:`unpack_string`。" + +#: ../../library/xdrlib.rst:228 +msgid "" +"Unpacks and returns a variable length byte stream, similarly to " +":meth:`unpack_string`." +msgstr "解包并返回可变长度字节流,类似于 :meth:`unpack_string`。" + +#: ../../library/xdrlib.rst:231 +msgid "The following methods support unpacking arrays and lists:" +msgstr "下列方法支持解包数组和列表:" + +#: ../../library/xdrlib.rst:236 +msgid "" +"Unpacks and returns a list of homogeneous items. The list is unpacked one " +"element at a time by first unpacking an unsigned integer flag. If the flag " +"is ``1``, then the item is unpacked and appended to the list. A flag of " +"``0`` indicates the end of the list. *unpack_item* is the function that is " +"called to unpack the items." +msgstr "" +"解包并返回同质条目的列表。 该列表每次解包一个元素,先解包一个无符号整数旗标。 如果旗标为 ``1``,则解包条目并将其添加到列表。 旗标为 ``0``" +" 表明列表结束。 *unpack_item* 为在解包条目时调用的函数。" + +#: ../../library/xdrlib.rst:245 +msgid "" +"Unpacks and returns (as a list) a fixed length array of homogeneous items. " +"*n* is number of list elements to expect in the buffer. As above, " +"*unpack_item* is the function used to unpack each element." +msgstr "" +"解包并(以列表形式)返回由同质条目构成的固定长度数组。 *n* 为期望的缓冲区内列表元素数量。 如上所述,*unpack_item* " +"是解包每个元素时要使用的函数。" + +#: ../../library/xdrlib.rst:252 +msgid "" +"Unpacks and returns a variable length *list* of homogeneous items. First, " +"the length of the list is unpacked as an unsigned integer, then each element" +" is unpacked as in :meth:`unpack_farray` above." +msgstr "" +"解包并返回由同质条目构成的可变长度 *list*。 先将列表的长度解包为无符号整数,再像上面的 :meth:`unpack_farray` " +"一样解包每个元素。" + +#: ../../library/xdrlib.rst:260 +msgid "Exceptions" +msgstr "异常" + +#: ../../library/xdrlib.rst:262 +msgid "Exceptions in this module are coded as class instances:" +msgstr "此模块中的异常会表示为类实例代码:" + +#: ../../library/xdrlib.rst:267 +msgid "" +"The base exception class. :exc:`Error` has a single public attribute " +":attr:`msg` containing the description of the error." +msgstr "基本异常类。 :exc:`Error` 具有一个公共属性 :attr:`msg`,其中包含对错误的描述。" + +#: ../../library/xdrlib.rst:273 +msgid "" +"Class derived from :exc:`Error`. Contains no additional instance variables." +msgstr "从 :exc:`Error` 所派生的类。 不包含额外的实例变量。" + +#: ../../library/xdrlib.rst:275 +msgid "Here is an example of how you would catch one of these exceptions::" +msgstr "以下是一个应该如何捕获这些异常的示例::" diff --git a/library/xml.dom.minidom.po b/library/xml.dom.minidom.po new file mode 100644 index 000000000..7f2f3c0c5 --- /dev/null +++ b/library/xml.dom.minidom.po @@ -0,0 +1,427 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) 2001-2024, Python Software Foundation +# This file is distributed under the same license as the Python package. +# FIRST AUTHOR , YEAR. +# +# Translators: +# Freesand Leo , 2022 +# Rafael Fontenelle , 2024 +# +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: Python 3.9\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2024-02-16 21:12+0000\n" +"PO-Revision-Date: 2017-02-16 23:36+0000\n" +"Last-Translator: Rafael Fontenelle , 2024\n" +"Language-Team: Chinese (China) (https://app.transifex.com/python-doc/teams/5390/zh_CN/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: zh_CN\n" +"Plural-Forms: nplurals=1; plural=0;\n" + +#: ../../library/xml.dom.minidom.rst:2 +msgid ":mod:`xml.dom.minidom` --- Minimal DOM implementation" +msgstr ":mod:`xml.dom.minidom` --- 最小化的 DOM 实现" + +#: ../../library/xml.dom.minidom.rst:11 +msgid "**Source code:** :source:`Lib/xml/dom/minidom.py`" +msgstr "**源代码:** :source:`Lib/xml/dom/minidom.py`" + +#: ../../library/xml.dom.minidom.rst:15 +msgid "" +":mod:`xml.dom.minidom` is a minimal implementation of the Document Object " +"Model interface, with an API similar to that in other languages. It is " +"intended to be simpler than the full DOM and also significantly smaller. " +"Users who are not already proficient with the DOM should consider using the " +":mod:`xml.etree.ElementTree` module for their XML processing instead." +msgstr "" +":mod:`xml.dom.minidom` 是文档对象模型接口的最小化实现,具有与其他语言类似的 API。 它的目标是比完整 DOM " +"更简单并且更为小巧。 对于 DOM 还不十分熟悉的用户则应当考虑改用 :mod:`xml.etree.ElementTree` 模块来进行 XML " +"处理。" + +#: ../../library/xml.dom.minidom.rst:24 +msgid "" +"The :mod:`xml.dom.minidom` module is not secure against maliciously " +"constructed data. If you need to parse untrusted or unauthenticated data " +"see :ref:`xml-vulnerabilities`." +msgstr "" +":mod:`xml.dom.minidom` 模块对于恶意构建的数据是不安全的。 如果你需要解析不受信任或未经身份验证的数据,请参阅 " +":ref:`xml-vulnerabilities`。" + +#: ../../library/xml.dom.minidom.rst:29 +msgid "" +"DOM applications typically start by parsing some XML into a DOM. With " +":mod:`xml.dom.minidom`, this is done through the parse functions::" +msgstr "" +"DOM 应用程序通常会从将某个 XML 解析为 DOM 开始。 使用 :mod:`xml.dom.minidom` 时,这是通过各种解析函数来完成的::" + +#: ../../library/xml.dom.minidom.rst:41 +msgid "" +"The :func:`parse` function can take either a filename or an open file " +"object." +msgstr ":func:`parse` 函数可接受一个文件名或者打开的文件对象。" + +#: ../../library/xml.dom.minidom.rst:46 +msgid "" +"Return a :class:`Document` from the given input. *filename_or_file* may be " +"either a file name, or a file-like object. *parser*, if given, must be a " +"SAX2 parser object. This function will change the document handler of the " +"parser and activate namespace support; other parser configuration (like " +"setting an entity resolver) must have been done in advance." +msgstr "" +"根据给定的输入返回一个 :class:`Document`。 *filename_or_file* 可以是一个文件名,或是一个文件型对象。 如果给定 " +"*parser* 则它必须是一个 SAX2 解析器对象。 " +"此函数将修改解析器的处理程序并激活命名空间支持;其他解析器配置(例如设置一个实体求解器)必须已经提前完成。" + +#: ../../library/xml.dom.minidom.rst:52 +msgid "" +"If you have XML in a string, you can use the :func:`parseString` function " +"instead:" +msgstr "如果你将 XML 存放为字符串形式,则可以改用 :func:`parseString` 函数:" + +#: ../../library/xml.dom.minidom.rst:58 +msgid "" +"Return a :class:`Document` that represents the *string*. This method creates" +" an :class:`io.StringIO` object for the string and passes that on to " +":func:`parse`." +msgstr "" +"返回一个代表 *string* 的 :class:`Document`。 此方法会为指定字符串创建一个 :class:`io.StringIO` " +"对象并将其传递给 :func:`parse`。" + +#: ../../library/xml.dom.minidom.rst:61 +msgid "" +"Both functions return a :class:`Document` object representing the content of" +" the document." +msgstr "" +"两个函数均返回一个代表文档内容的 :class:`Document` 对象。object representing the content of the" +" document." + +#: ../../library/xml.dom.minidom.rst:64 +msgid "" +"What the :func:`parse` and :func:`parseString` functions do is connect an " +"XML parser with a \"DOM builder\" that can accept parse events from any SAX " +"parser and convert them into a DOM tree. The name of the functions are " +"perhaps misleading, but are easy to grasp when learning the interfaces. The" +" parsing of the document will be completed before these functions return; " +"it's simply that these functions do not provide a parser implementation " +"themselves." +msgstr "" +":func:`parse` 和 :func:`parseString` 函数所做的是将 XML 解析器连接到一个 \"DOM 构建器\",它可以从任意 " +"SAX 解析器接收解析事件并将其转换为 DOM 树结构。 这两个函数的名称可能有些误导性,但在学习此接口时是很容易掌握的。 " +"文档解析操作将在这两个函数返回之前完成;简单地说这两个函数本身并不提供解析器实现。" + +#: ../../library/xml.dom.minidom.rst:71 +msgid "" +"You can also create a :class:`Document` by calling a method on a \"DOM " +"Implementation\" object. You can get this object either by calling the " +":func:`getDOMImplementation` function in the :mod:`xml.dom` package or the " +":mod:`xml.dom.minidom` module. Once you have a :class:`Document`, you can " +"add child nodes to it to populate the DOM::" +msgstr "" +"你也可以通过在一个 \"DOM 实现\" 对象上调用方法来创建 :class:`Document`。 此对象可通过调用 :mod:`xml.dom` " +"包或者 :mod:`xml.dom.minidom` 模块中的 :func:`getDOMImplementation` 函数来获取。 一旦你获得了一个" +" :class:`Document`,你就可以向它添加子节点来填充 DOM::" + +#: ../../library/xml.dom.minidom.rst:86 +msgid "" +"Once you have a DOM document object, you can access the parts of your XML " +"document through its properties and methods. These properties are defined " +"in the DOM specification. The main property of the document object is the " +":attr:`documentElement` property. It gives you the main element in the XML " +"document: the one that holds all others. Here is an example program::" +msgstr "" +"一旦你得到了 DOM 文档对象,你就可以通过其属性和方法访问对应 XML 文档的各个部分。 这些属性定义在 DOM " +"规格说明当中;文档对象的主要特征属性是 :attr:`documentElement`。 它给出了 XML 文档中的主元素:即包含了所有其他元素的元素。" +" 以下是一个示例程序::" + +#: ../../library/xml.dom.minidom.rst:95 +msgid "" +"When you are finished with a DOM tree, you may optionally call the " +":meth:`unlink` method to encourage early cleanup of the now-unneeded " +"objects. :meth:`unlink` is an :mod:`xml.dom.minidom`\\ -specific extension " +"to the DOM API that renders the node and its descendants are essentially " +"useless. Otherwise, Python's garbage collector will eventually take care of" +" the objects in the tree." +msgstr "" +"当你完成对一个 DOM 树的处理时,你可以选择调用 :meth:`unlink` 方法以鼓励尽早清除不再需要的对象。 :meth:`unlink` 是 " +":mod:`xml.dom.minidom` 针对 DOM API 的专属扩展,它会将特定节点及其下级标记为不再有用。 在其他情况下,Python " +"的垃圾回收器将负责最终处理树结构中的对象。" + +#: ../../library/xml.dom.minidom.rst:104 +msgid "" +"`Document Object Model (DOM) Level 1 Specification " +"`_" +msgstr "`文档对象模型 (DOM) 第 1 层级规格说明 `_" + +#: ../../library/xml.dom.minidom.rst:105 +msgid "" +"The W3C recommendation for the DOM supported by :mod:`xml.dom.minidom`." +msgstr "被 :mod:`xml.dom.minidom` 所支持的 W3C 针对 DOM 的建议。" + +#: ../../library/xml.dom.minidom.rst:111 +msgid "DOM Objects" +msgstr "DOM 对象" + +#: ../../library/xml.dom.minidom.rst:113 +msgid "" +"The definition of the DOM API for Python is given as part of the " +":mod:`xml.dom` module documentation. This section lists the differences " +"between the API and :mod:`xml.dom.minidom`." +msgstr "" +"Python 的 DOM API 定义被作为 :mod:`xml.dom` 模块文档的一部分给出。 这一节列出了该 API 和 " +":mod:`xml.dom.minidom` 之间的差异。" + +#: ../../library/xml.dom.minidom.rst:120 +msgid "" +"Break internal references within the DOM so that it will be garbage " +"collected on versions of Python without cyclic GC. Even when cyclic GC is " +"available, using this can make large amounts of memory available sooner, so " +"calling this on DOM objects as soon as they are no longer needed is good " +"practice. This only needs to be called on the :class:`Document` object, but" +" may be called on child nodes to discard children of that node." +msgstr "" +"破坏 DOM 的内部引用以便它能在没有循环 GC 的 Python 版本上垃圾回收器回收。 即使在循环 GC " +"可用的时候,使用此方法也可让大量内存更快变为可用,因此当 DOM 对象不再被需要时尽早调用它们的这个方法是很好的做法。 此方法只须在 " +":class:`Document` 对象上调用,但也可以在下级节点上调用以丢弃该节点的下级节点。" + +#: ../../library/xml.dom.minidom.rst:127 +msgid "" +"You can avoid calling this method explicitly by using the :keyword:`with` " +"statement. The following code will automatically unlink *dom* when the " +":keyword:`!with` block is exited::" +msgstr "" +"你可以通过使用 :keyword:`with` 语句来避免显式调用此方法。 以下代码会在 :keyword:`!with` 代码块退出时自动取消链接 " +"*dom*::" + +#: ../../library/xml.dom.minidom.rst:138 +msgid "" +"Write XML to the writer object. The writer receives texts but not bytes as " +"input, it should have a :meth:`write` method which matches that of the file " +"object interface. The *indent* parameter is the indentation of the current " +"node. The *addindent* parameter is the incremental indentation to use for " +"subnodes of the current one. The *newl* parameter specifies the string to " +"use to terminate newlines." +msgstr "" +"将 XML 写入到写入器对象。 写入器接受文本而非字节串作为输入,它应当具有与文件对象接口相匹配的 :meth:`write` 方法。 *indent*" +" 形参是当前节点的缩进层级。 *addindent* 形参是用于当前节点的下级节点的缩进量。 *newl* 形参指定用于一行结束的字符串。" + +#: ../../library/xml.dom.minidom.rst:145 +msgid "" +"For the :class:`Document` node, an additional keyword argument *encoding* " +"can be used to specify the encoding field of the XML header." +msgstr "对于 :class:`Document` 节点,可以使用附加的关键字参数 *encoding* 来指定 XML 标头的编码格式字段。" + +#: ../../library/xml.dom.minidom.rst:148 +msgid "" +"Similarly, explicitly stating the *standalone* argument causes the " +"standalone document declarations to be added to the prologue of the XML " +"document. If the value is set to `True`, `standalone=\"yes\"` is added, " +"otherwise it is set to `\"no\"`. Not stating the argument will omit the " +"declaration from the document." +msgstr "" +"类似地,显式指明 *standalone* 参数将会使单独的文档声明被添加到 XML 文档的开头部分。 如果将该值设为 `True`,则会添加 " +"`standalone=\"yes\"`,否则将为 `\"no\"`。 未指明该参数将使文档声明被省略。" + +#: ../../library/xml.dom.minidom.rst:155 +msgid "" +"The :meth:`writexml` method now preserves the attribute order specified by " +"the user." +msgstr ":meth:`writexml` 方法现在会保留用户指定的属性顺序。" + +#: ../../library/xml.dom.minidom.rst:159 ../../library/xml.dom.minidom.rst:180 +#: ../../library/xml.dom.minidom.rst:199 +msgid "The *standalone* parameter was added." +msgstr "增加了 *standalone* 形参。" + +#: ../../library/xml.dom.minidom.rst:164 +msgid "" +"Return a string or byte string containing the XML represented by the DOM " +"node." +msgstr "返回一个包含 XML DOM 节点所代表的 XML 的字符串或字节串。" + +#: ../../library/xml.dom.minidom.rst:167 +msgid "" +"With an explicit *encoding* [1]_ argument, the result is a byte string in " +"the specified encoding. With no *encoding* argument, the result is a Unicode" +" string, and the XML declaration in the resulting string does not specify an" +" encoding. Encoding this string in an encoding other than UTF-8 is likely " +"incorrect, since UTF-8 is the default encoding of XML." +msgstr "" +"带有显式的 *encoding* [1]_ 参数时,结果为使用指定编码格式的字节串。 没有 *encoding* 参数时,结果为 Unicode " +"字符串,并且结果字符串中的 XML 声明将不指定编码格式。 使用 UTF-8 以外的编码格式对此字符串进行编码通常是不正确的,因为 UTF-8 是 " +"XML 的默认编码格式。" + +#: ../../library/xml.dom.minidom.rst:174 ../../library/xml.dom.minidom.rst:193 +msgid "The *standalone* argument behaves exactly as in :meth:`writexml`." +msgstr "*standalone* 参数的行为与 :meth:`writexml` 中的完全一致。" + +#: ../../library/xml.dom.minidom.rst:176 +msgid "" +"The :meth:`toxml` method now preserves the attribute order specified by the " +"user." +msgstr ":meth:`toxml` 方法现在会保留用户指定的属性顺序。" + +#: ../../library/xml.dom.minidom.rst:186 +msgid "" +"Return a pretty-printed version of the document. *indent* specifies the " +"indentation string and defaults to a tabulator; *newl* specifies the string " +"emitted at the end of each line and defaults to ``\\n``." +msgstr "返回文档的美化打印版本。 *indent* 指定缩进字符串并默认为制表符;*newl* 指定标示每行结束的字符串并默认为 ``\\n``。" + +#: ../../library/xml.dom.minidom.rst:190 +msgid "" +"The *encoding* argument behaves like the corresponding argument of " +":meth:`toxml`." +msgstr "*encoding* 参数的行为类似于 :meth:`toxml` 的对应参数。" + +#: ../../library/xml.dom.minidom.rst:195 +msgid "" +"The :meth:`toprettyxml` method now preserves the attribute order specified " +"by the user." +msgstr ":meth:`toprettyxml` 方法现在会保留用户指定的属性顺序。" + +#: ../../library/xml.dom.minidom.rst:205 +msgid "DOM Example" +msgstr "DOM 示例" + +#: ../../library/xml.dom.minidom.rst:207 +msgid "" +"This example program is a fairly realistic example of a simple program. In " +"this particular case, we do not take much advantage of the flexibility of " +"the DOM." +msgstr "此示例程序是个相当实际的简单程序示例。 在这个特定情况中,我们没有过多地利用 DOM 的灵活性。" + +#: ../../library/xml.dom.minidom.rst:216 +msgid "minidom and the DOM standard" +msgstr "minidom 和 DOM 标准" + +#: ../../library/xml.dom.minidom.rst:218 +msgid "" +"The :mod:`xml.dom.minidom` module is essentially a DOM 1.0-compatible DOM " +"with some DOM 2 features (primarily namespace features)." +msgstr "" +":mod:`xml.dom.minidom` 模块实际上是兼容 DOM 1.0 的 DOM 并带有部分 DOM 2 特性(主要是命名空间特性)。" + +#: ../../library/xml.dom.minidom.rst:221 +msgid "" +"Usage of the DOM interface in Python is straight-forward. The following " +"mapping rules apply:" +msgstr "Python 中 DOM 接口的用法十分直观。 会应用下列映射规则:" + +#: ../../library/xml.dom.minidom.rst:224 +msgid "" +"Interfaces are accessed through instance objects. Applications should not " +"instantiate the classes themselves; they should use the creator functions " +"available on the :class:`Document` object. Derived interfaces support all " +"operations (and attributes) from the base interfaces, plus any new " +"operations." +msgstr "" +"接口是通过实例对象来访问的。 应用程序不应实例化这些类本身;它们应当使用 :class:`Document` 对象提供的创建器函数。 " +"派生的接口支持上级接口的所有操作(和属性),并添加了新的操作。" + +#: ../../library/xml.dom.minidom.rst:229 +msgid "" +"Operations are used as methods. Since the DOM uses only :keyword:`in` " +"parameters, the arguments are passed in normal order (from left to right). " +"There are no optional arguments. ``void`` operations return ``None``." +msgstr "" +"操作以方法的形式使用。 因由 DOM 只使用 :keyword:`in` 形参,参数是以正常顺序传入的(从左至右)。 不存在可选参数。 ``void``" +" 操作返回 ``None``。" + +#: ../../library/xml.dom.minidom.rst:233 +msgid "" +"IDL attributes map to instance attributes. For compatibility with the OMG " +"IDL language mapping for Python, an attribute ``foo`` can also be accessed " +"through accessor methods :meth:`_get_foo` and :meth:`_set_foo`. " +"``readonly`` attributes must not be changed; this is not enforced at " +"runtime." +msgstr "" +"IDL 属性会映射到实例属性。 为了兼容针对 Python 的 OMG IDL 语言映射,属性 ``foo`` 也可通过访问器方法 " +":meth:`_get_foo` 和 :meth:`_set_foo` 来访问。 ``readonly`` 属性不可被修改;运行时并不强制要求这一点。" + +#: ../../library/xml.dom.minidom.rst:238 +msgid "" +"The types ``short int``, ``unsigned int``, ``unsigned long long``, and " +"``boolean`` all map to Python integer objects." +msgstr "" +"``short int``, ``unsigned int``, ``unsigned long long`` 和 ``boolean`` " +"类型都会映射为 Python 整数类型。" + +#: ../../library/xml.dom.minidom.rst:241 +msgid "" +"The type ``DOMString`` maps to Python strings. :mod:`xml.dom.minidom` " +"supports either bytes or strings, but will normally produce strings. Values " +"of type ``DOMString`` may also be ``None`` where allowed to have the IDL " +"``null`` value by the DOM specification from the W3C." +msgstr "" +"``DOMString`` 类型会映射为 Python 字符串。 :mod:`xml.dom.minidom` 支持字节串或字符串,但通常是产生字符串。" +" ``DOMString`` 类型的值也可以为 ``None``,W3C 的 DOM 规格说明允许其具有 IDL ``null`` 值。" + +#: ../../library/xml.dom.minidom.rst:246 +msgid "" +"``const`` declarations map to variables in their respective scope (e.g. " +"``xml.dom.minidom.Node.PROCESSING_INSTRUCTION_NODE``); they must not be " +"changed." +msgstr "" +"``const`` 声明会映射为它们各自的作用域内的变量 (例如 " +"``xml.dom.minidom.Node.PROCESSING_INSTRUCTION_NODE``);它们不可被修改。" + +#: ../../library/xml.dom.minidom.rst:249 +msgid "" +"``DOMException`` is currently not supported in :mod:`xml.dom.minidom`. " +"Instead, :mod:`xml.dom.minidom` uses standard Python exceptions such as " +":exc:`TypeError` and :exc:`AttributeError`." +msgstr "" +"``DOMException`` 目前不被 :mod:`xml.dom.minidom` 所支持。 :mod:`xml.dom.minidom` " +"会改为使用标准 Python 异常例如 :exc:`TypeError` 和 :exc:`AttributeError`。" + +#: ../../library/xml.dom.minidom.rst:253 +msgid "" +":class:`NodeList` objects are implemented using Python's built-in list type." +" These objects provide the interface defined in the DOM specification, but " +"with earlier versions of Python they do not support the official API. They " +"are, however, much more \"Pythonic\" than the interface defined in the W3C " +"recommendations." +msgstr "" +":class:`NodeList` 对象是使用 Python 内置列表类型来实现的。 这些对象提供了 DOM 规格说明中定义的接口,但在较早版本的 " +"Python 中它们不支持官方 API。 相比在 W3C 建议中定义的接口,它们要更加的 \"Pythonic\"。" + +#: ../../library/xml.dom.minidom.rst:259 +msgid "" +"The following interfaces have no implementation in :mod:`xml.dom.minidom`:" +msgstr "下列接口未在 :mod:`xml.dom.minidom` 中实现:" + +#: ../../library/xml.dom.minidom.rst:261 +msgid ":class:`DOMTimeStamp`" +msgstr ":class:`DOMTimeStamp`" + +#: ../../library/xml.dom.minidom.rst:263 +msgid ":class:`EntityReference`" +msgstr ":class:`EntityReference`" + +#: ../../library/xml.dom.minidom.rst:265 +msgid "" +"Most of these reflect information in the XML document that is not of general" +" utility to most DOM users." +msgstr "这些接口所反映的 XML 文档信息对于大多数 DOM 用户来说没有什么帮助。" + +#: ../../library/xml.dom.minidom.rst:269 +msgid "Footnotes" +msgstr "备注" + +#: ../../library/xml.dom.minidom.rst:270 +msgid "" +"The encoding name included in the XML output should conform to the " +"appropriate standards. For example, \"UTF-8\" is valid, but \"UTF8\" is not " +"valid in an XML document's declaration, even though Python accepts it as an " +"encoding name. See https://www.w3.org/TR/2006/REC-xml11-20060816/#NT-" +"EncodingDecl and https://www.iana.org/assignments/character-sets/character-" +"sets.xhtml." +msgstr "" +"包括在 XML 输出中的编码格式名称应当遵循适当的标准。 例如,\"UTF-8\" 是有效的,但 \"UTF8\" 在 XML " +"文档的声明中是无效的,即使 Python 接受其作为编码格式名称。 详情参见 https://www.w3.org/TR/2006/REC-" +"xml11-20060816/#NT-EncodingDecl 和 " +"https://www.iana.org/assignments/character-sets/character-sets.xhtml。" diff --git a/library/xml.dom.po b/library/xml.dom.po new file mode 100644 index 000000000..e80dab949 --- /dev/null +++ b/library/xml.dom.po @@ -0,0 +1,1513 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) 2001-2022, Python Software Foundation +# This file is distributed under the same license as the Python package. +# FIRST AUTHOR , YEAR. +# +# Translators: +# ww song , 2018 +# dannyvi , 2018 +# Alpha Du , 2019 +# ppcfish , 2019 +# Freesand Leo , 2022 +# +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: Python 3.9\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2022-11-04 14:34+0000\n" +"PO-Revision-Date: 2017-02-16 23:36+0000\n" +"Last-Translator: Freesand Leo , 2022\n" +"Language-Team: Chinese (China) (https://www.transifex.com/python-doc/teams/5390/zh_CN/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: zh_CN\n" +"Plural-Forms: nplurals=1; plural=0;\n" + +#: ../../library/xml.dom.rst:2 +msgid ":mod:`xml.dom` --- The Document Object Model API" +msgstr ":mod:`xml.dom` --- 文档对象模型 API" + +#: ../../library/xml.dom.rst:10 +msgid "**Source code:** :source:`Lib/xml/dom/__init__.py`" +msgstr "**源代码:** :source:`Lib/xml/dom/__init__.py`" + +#: ../../library/xml.dom.rst:14 +msgid "" +"The Document Object Model, or \"DOM,\" is a cross-language API from the " +"World Wide Web Consortium (W3C) for accessing and modifying XML documents. " +"A DOM implementation presents an XML document as a tree structure, or allows" +" client code to build such a structure from scratch. It then gives access " +"to the structure through a set of objects which provided well-known " +"interfaces." +msgstr "" +"文档对象模型“DOM”是一个来自万维网联盟(W3C)的跨语言 API,用于访问和修改 XML 文档。 DOM 的实现将 XML " +"文档以树结构表示,或者允许客户端代码从头构建这样的结构。 然后它会通过一组提供通用接口的对象赋予对结构的访问权。" + +#: ../../library/xml.dom.rst:20 +msgid "" +"The DOM is extremely useful for random-access applications. SAX only allows" +" you a view of one bit of the document at a time. If you are looking at one" +" SAX element, you have no access to another. If you are looking at a text " +"node, you have no access to a containing element. When you write a SAX " +"application, you need to keep track of your program's position in the " +"document somewhere in your own code. SAX does not do it for you. Also, if " +"you need to look ahead in the XML document, you are just out of luck." +msgstr "" +"DOM 特别适用于进行随机访问的应用。 SAX 仅允许你每次查看文档的一小部分。 如果你正在查看一个 SAX 元素,你将不能访问其他元素。 " +"如果你正在查看一个文本节点,你将不能访问包含它的元素。 当你编写一个 SAX 应用时,你需要在你自己的代码的某个地方记住你的程序在文档中的位置。 SAX" +" 不会帮你做这件事。 并且,如果你想要在 XML 文档中向前查看,你是绝对办不到的。" + +#: ../../library/xml.dom.rst:28 +msgid "" +"Some applications are simply impossible in an event driven model with no " +"access to a tree. Of course you could build some sort of tree yourself in " +"SAX events, but the DOM allows you to avoid writing that code. The DOM is a" +" standard tree representation for XML data." +msgstr "" +"有些应用程序在不能访问树的事件驱动模型中是根本无法编写的。 当然你可以在 SAX 事件中自行构建某种树,但是 DOM 可以使你避免编写这样的代码。 " +"DOM 是针对 XML 数据的标准树表示形式。" + +#: ../../library/xml.dom.rst:33 +msgid "" +"The Document Object Model is being defined by the W3C in stages, or " +"\"levels\" in their terminology. The Python mapping of the API is " +"substantially based on the DOM Level 2 recommendation." +msgstr "" +"文档对象模型是由 W3C 分阶段定义的,在其术语中称为“层级”。 Python 中该 API 的映射大致是基于 DOM 第 2 层级的建议。" + +#: ../../library/xml.dom.rst:45 +msgid "" +"DOM applications typically start by parsing some XML into a DOM. How this " +"is accomplished is not covered at all by DOM Level 1, and Level 2 provides " +"only limited improvements: There is a :class:`DOMImplementation` object " +"class which provides access to :class:`Document` creation methods, but no " +"way to access an XML reader/parser/Document builder in an implementation-" +"independent way. There is also no well-defined way to access these methods " +"without an existing :class:`Document` object. In Python, each DOM " +"implementation will provide a function :func:`getDOMImplementation`. DOM " +"Level 3 adds a Load/Store specification, which defines an interface to the " +"reader, but this is not yet available in the Python standard library." +msgstr "" +"DOM 应用程序通常从将某些 XML 解析为 DOM 开始。 此操作如何实现完全未被 DOM 第 1 层级所涉及,而第 2 " +"层级也只提供了有限的改进:有一个 :class:`DOMImplementation` 对象类,它提供对 :class:`Document` " +"创建方法的访问,但却没有办法以不依赖具体实现的方式访问 XML 读取器/解析器/文档创建器。 也没有当不存在 :class:`Document` " +"对象的情况下访问这些方法的定义良好的方式。 在 Python 中,每个 DOM 实现将提供一个函数 " +":func:`getDOMImplementation`。 DOM 第 3 层级增加了一个载入/存储规格说明,它定义了与读取器的接口,但这在 " +"Python 标准库中尚不可用。" + +#: ../../library/xml.dom.rst:56 +msgid "" +"Once you have a DOM document object, you can access the parts of your XML " +"document through its properties and methods. These properties are defined " +"in the DOM specification; this portion of the reference manual describes the" +" interpretation of the specification in Python." +msgstr "" +"一旦你得到了 DOM 文档对象,你就可以通过 XML 文档的属性和方法访问它的各个部分。 这些属性定义在 DOM 规格说明当中;参考指南的这一部分描述了" +" Python 对此规格说明的解读。" + +#: ../../library/xml.dom.rst:61 +msgid "" +"The specification provided by the W3C defines the DOM API for Java, " +"ECMAScript, and OMG IDL. The Python mapping defined here is based in large " +"part on the IDL version of the specification, but strict compliance is not " +"required (though implementations are free to support the strict mapping from" +" IDL). See section :ref:`dom-conformance` for a detailed discussion of " +"mapping requirements." +msgstr "" +"W3C 提供的规格说明定义了适用于 Java, ECMAScript 和 OMG IDL 的 DOM API。 这里定义的 Python " +"映射很大程度上是基于此规格说明的 IDL 版本,但并不要求严格映射(但具体实现可以自由地支持对 IDL 的严格映射)。 请参阅 :ref:`dom-" +"conformance` 一节查看有关映射要求的详细讨论。" + +#: ../../library/xml.dom.rst:71 +msgid "" +"`Document Object Model (DOM) Level 2 Specification " +"`_" +msgstr "" +"`文档对象模型 (DOM) 第 2 层级规格说明 `_" + +#: ../../library/xml.dom.rst:71 +msgid "The W3C recommendation upon which the Python DOM API is based." +msgstr "被 Python DOM API 作为基础的 W3C 建议。" + +#: ../../library/xml.dom.rst:74 +msgid "" +"`Document Object Model (DOM) Level 1 Specification " +"`_" +msgstr "`文档对象模型 (DOM) 第 1 层级规格说明 `_" + +#: ../../library/xml.dom.rst:74 +msgid "" +"The W3C recommendation for the DOM supported by :mod:`xml.dom.minidom`." +msgstr "被 :mod:`xml.dom.minidom` 所支持的 W3C 针对 DOM 的建议。" + +#: ../../library/xml.dom.rst:76 +msgid "" +"`Python Language Mapping Specification " +"`_" +msgstr "`Python 语言映射规格说明 `_" + +#: ../../library/xml.dom.rst:77 +msgid "This specifies the mapping from OMG IDL to Python." +msgstr "此文档指明了从 OMG IDL 到 Python 的映射。" + +#: ../../library/xml.dom.rst:81 +msgid "Module Contents" +msgstr "模块内容" + +#: ../../library/xml.dom.rst:83 +msgid "The :mod:`xml.dom` contains the following functions:" +msgstr ":mod:`xml.dom` 包含下列函数:" + +#: ../../library/xml.dom.rst:88 +msgid "" +"Register the *factory* function with the name *name*. The factory function " +"should return an object which implements the :class:`DOMImplementation` " +"interface. The factory function can return the same object every time, or a" +" new one for each call, as appropriate for the specific implementation (e.g." +" if that implementation supports some customization)." +msgstr "" +"注册 *factory* 函数并使用名称 *name*。 该工厂函数应当返回一个实现了 :class:`DOMImplementation` " +"接口的对象。 该工厂函数可每次都返回相同对象,或每次调用都返回新的对象,视具体实现的要求而定(例如该实现是否支持某些定制功能)。" + +#: ../../library/xml.dom.rst:97 +msgid "" +"Return a suitable DOM implementation. The *name* is either well-known, the " +"module name of a DOM implementation, or ``None``. If it is not ``None``, " +"imports the corresponding module and returns a :class:`DOMImplementation` " +"object if the import succeeds. If no name is given, and if the environment " +"variable :envvar:`PYTHON_DOM` is set, this variable is used to find the " +"implementation." +msgstr "" +"返回一个适当的 DOM 实现。 *name* 是通用名称、DOM 实现的模块名称或者 ``None``。 如果它不为 " +"``None``,则会导入相应模块并在导入成功时返回一个 :class:`DOMImplementation` 对象。 如果没有给出名称,并且如果设置了" +" :envvar:`PYTHON_DOM` 环境变量,此变量会被用来查找相应的实现。" + +#: ../../library/xml.dom.rst:103 +msgid "" +"If name is not given, this examines the available implementations to find " +"one with the required feature set. If no implementation can be found, raise" +" an :exc:`ImportError`. The features list must be a sequence of ``(feature," +" version)`` pairs which are passed to the :meth:`hasFeature` method on " +"available :class:`DOMImplementation` objects." +msgstr "" +"如果未给出 name,此函数会检查可用的实现来查找具有所需特性集的一个。 如果找不到任何实现,则会引发 :exc:`ImportError`。 " +"features 集必须是包含 ``(feature, version)`` 对的序列,它会被传给可用的 " +":class:`DOMImplementation` 对象上的 :meth:`hasFeature` 方法。" + +#: ../../library/xml.dom.rst:109 +msgid "Some convenience constants are also provided:" +msgstr "还提供了一些便捷常量:" + +#: ../../library/xml.dom.rst:114 +msgid "" +"The value used to indicate that no namespace is associated with a node in " +"the DOM. This is typically found as the :attr:`namespaceURI` of a node, or " +"used as the *namespaceURI* parameter to a namespaces-specific method." +msgstr "" +"该值用于指明没有命名空间被关联到 DOM 中的某个节点。 它通常被作为某个节点的 " +":attr:`namespaceURI`,或者被用作某个命名空间专属方法的 *namespaceURI* 参数。" + +#: ../../library/xml.dom.rst:121 +msgid "" +"The namespace URI associated with the reserved prefix ``xml``, as defined by" +" `Namespaces in XML `_ (section 4)." +msgstr "" +"关联到保留前缀 ``xml`` 的命名空间 URI,如 `XML 中的命名空间 `_ (第 4 节) 所定义的。" + +#: ../../library/xml.dom.rst:127 +msgid "" +"The namespace URI for namespace declarations, as defined by `Document Object" +" Model (DOM) Level 2 Core Specification `_ (section 1.1.8)." +msgstr "" +"命名空间声明的命名空间 URI,如 `文档对象模型 (DOM) 第 2 层级核心规格说明 `_ (第 1.1.8节) 所定义的。" + +#: ../../library/xml.dom.rst:134 +msgid "" +"The URI of the XHTML namespace as defined by `XHTML 1.0: The Extensible " +"HyperText Markup Language `_ (section 3.1.1)." +msgstr "" +"XHTML 命名空间的 URI,如 `XHTML 1.0: 扩展超文本标记语言 `_ (第" +" 3.1.1 节) 所定义的。" + +#: ../../library/xml.dom.rst:138 +msgid "" +"In addition, :mod:`xml.dom` contains a base :class:`Node` class and the DOM " +"exception classes. The :class:`Node` class provided by this module does not" +" implement any of the methods or attributes defined by the DOM " +"specification; concrete DOM implementations must provide those. The " +":class:`Node` class provided as part of this module does provide the " +"constants used for the :attr:`nodeType` attribute on concrete :class:`Node` " +"objects; they are located within the class rather than at the module level " +"to conform with the DOM specifications." +msgstr "" +"此外,:mod:`xml.dom` 还包含一个基本 :class:`Node` 类和一些 DOM 异常类。 此模块提供的 :class:`Node` " +"类未实现 DOM 规格描述所定义的任何方法和属性;实际的 DOM 实现必须提供它们。 提供 :class:`Node` " +"类作为此模块的一部分并没有提供用于实际的 :class:`Node` 对象的 :attr:`nodeType` " +"属性的常量;它们是位于类内而不是位于模块层级以符合 DOM 规格描述。" + +#: ../../library/xml.dom.rst:153 +msgid "Objects in the DOM" +msgstr "DOM 中的对象" + +#: ../../library/xml.dom.rst:155 +msgid "" +"The definitive documentation for the DOM is the DOM specification from the " +"W3C." +msgstr "DOM 的权威文档是来自 W3C 的 DOM 规格描述。" + +#: ../../library/xml.dom.rst:157 +msgid "" +"Note that DOM attributes may also be manipulated as nodes instead of as " +"simple strings. It is fairly rare that you must do this, however, so this " +"usage is not yet documented." +msgstr "请注意,DOM 属性也可以作为节点而不是简单的字符串进行操作。 然而,必须这样做的情况相当少见,所以这种用法还没有被写入文档。" + +#: ../../library/xml.dom.rst:162 +msgid "Interface" +msgstr "接口" + +#: ../../library/xml.dom.rst:162 +msgid "Section" +msgstr "部件" + +#: ../../library/xml.dom.rst:162 +msgid "Purpose" +msgstr "目的" + +#: ../../library/xml.dom.rst:164 +msgid ":class:`DOMImplementation`" +msgstr ":class:`DOMImplementation`" + +#: ../../library/xml.dom.rst:164 +msgid ":ref:`dom-implementation-objects`" +msgstr ":ref:`dom-implementation-objects`" + +#: ../../library/xml.dom.rst:164 +msgid "Interface to the underlying implementation." +msgstr "底层实现的接口。" + +#: ../../library/xml.dom.rst:167 +msgid ":class:`Node`" +msgstr ":class:`Node`" + +#: ../../library/xml.dom.rst:167 +msgid ":ref:`dom-node-objects`" +msgstr ":ref:`dom-node-objects`" + +#: ../../library/xml.dom.rst:167 +msgid "Base interface for most objects in a document." +msgstr "文档中大多数对象的基本接口。" + +#: ../../library/xml.dom.rst:170 +msgid ":class:`NodeList`" +msgstr ":class:`NodeList`" + +#: ../../library/xml.dom.rst:170 +msgid ":ref:`dom-nodelist-objects`" +msgstr ":ref:`dom-nodelist-objects`" + +#: ../../library/xml.dom.rst:170 +msgid "Interface for a sequence of nodes." +msgstr "节点序列的接口。" + +#: ../../library/xml.dom.rst:173 +msgid ":class:`DocumentType`" +msgstr ":class:`DocumentType`" + +#: ../../library/xml.dom.rst:173 +msgid ":ref:`dom-documenttype-objects`" +msgstr ":ref:`dom-documenttype-objects`" + +#: ../../library/xml.dom.rst:173 +msgid "Information about the declarations needed to process a document." +msgstr "有关处理文档所需声明的信息。" + +#: ../../library/xml.dom.rst:177 +msgid ":class:`Document`" +msgstr ":class:`Document`" + +#: ../../library/xml.dom.rst:177 +msgid ":ref:`dom-document-objects`" +msgstr ":ref:`dom-document-objects`" + +#: ../../library/xml.dom.rst:177 +msgid "Object which represents an entire document." +msgstr "表示整个文档的对象。" + +#: ../../library/xml.dom.rst:180 +msgid ":class:`Element`" +msgstr ":class:`Element`" + +#: ../../library/xml.dom.rst:180 +msgid ":ref:`dom-element-objects`" +msgstr ":ref:`dom-element-objects`" + +#: ../../library/xml.dom.rst:180 +msgid "Element nodes in the document hierarchy." +msgstr "文档层次结构中的元素节点。" + +#: ../../library/xml.dom.rst:183 +msgid ":class:`Attr`" +msgstr ":class:`Attr`" + +#: ../../library/xml.dom.rst:183 +msgid ":ref:`dom-attr-objects`" +msgstr ":ref:`dom-attr-objects`" + +#: ../../library/xml.dom.rst:183 +msgid "Attribute value nodes on element nodes." +msgstr "元素节点上的属性值节点。" + +#: ../../library/xml.dom.rst:186 +msgid ":class:`Comment`" +msgstr ":class:`Comment`" + +#: ../../library/xml.dom.rst:186 +msgid ":ref:`dom-comment-objects`" +msgstr ":ref:`dom-comment-objects`" + +#: ../../library/xml.dom.rst:186 +msgid "Representation of comments in the source document." +msgstr "源文档中注释的表示形式。" + +#: ../../library/xml.dom.rst:189 +msgid ":class:`Text`" +msgstr ":class:`Text`" + +#: ../../library/xml.dom.rst:189 +msgid ":ref:`dom-text-objects`" +msgstr ":ref:`dom-text-objects`" + +#: ../../library/xml.dom.rst:189 +msgid "Nodes containing textual content from the document." +msgstr "包含文档中文本内容的节点。" + +#: ../../library/xml.dom.rst:192 +msgid ":class:`ProcessingInstruction`" +msgstr ":class:`ProcessingInstruction`" + +#: ../../library/xml.dom.rst:192 +msgid ":ref:`dom-pi-objects`" +msgstr ":ref:`dom-pi-objects`" + +#: ../../library/xml.dom.rst:192 +msgid "Processing instruction representation." +msgstr "处理指令表示形式。" + +#: ../../library/xml.dom.rst:196 +msgid "" +"An additional section describes the exceptions defined for working with the " +"DOM in Python." +msgstr "描述在 Python 中使用 DOM 定义的异常的小节。" + +#: ../../library/xml.dom.rst:203 +msgid "DOMImplementation Objects" +msgstr "DOMImplementation 对象" + +#: ../../library/xml.dom.rst:205 +msgid "" +"The :class:`DOMImplementation` interface provides a way for applications to " +"determine the availability of particular features in the DOM they are using." +" DOM Level 2 added the ability to create new :class:`Document` and " +":class:`DocumentType` objects using the :class:`DOMImplementation` as well." +msgstr "" +":class:`DOMImplementation` 接口提供了一种让应用程序确定他们所使用的 DOM 中某一特性可用性的方式。 DOM 第 2 " +"级还添加了使用 :class:`DOMImplementation` 来创建新的 :class:`Document` 和 " +":class:`DocumentType` 对象的能力。" + +#: ../../library/xml.dom.rst:213 +msgid "" +"Return ``True`` if the feature identified by the pair of strings *feature* " +"and *version* is implemented." +msgstr "如果字符串对 *feature* 和 *version* 所标识的特性已被实现则返回 ``True``。" + +#: ../../library/xml.dom.rst:219 +msgid "" +"Return a new :class:`Document` object (the root of the DOM), with a child " +":class:`Element` object having the given *namespaceUri* and *qualifiedName*." +" The *doctype* must be a :class:`DocumentType` object created by " +":meth:`createDocumentType`, or ``None``. In the Python DOM API, the first " +"two arguments can also be ``None`` in order to indicate that no " +":class:`Element` child is to be created." +msgstr "" +"返回一个新的 :class:`Document` 对象 (DOM 的根节点),包含一个具有给定 *namespaceUri* 和 " +"*qualifiedName* 的下级 :class:`Element` 对象。 *doctype* 必须为由 " +":meth:`createDocumentType` 创建的 :class:`DocumentType` 对象,或者为 ``None``。 在 " +"Python DOM API 中,前两个参数也可为 ``None`` 以表示不要创建任何下级 :class:`Element`。" + +#: ../../library/xml.dom.rst:229 +msgid "" +"Return a new :class:`DocumentType` object that encapsulates the given " +"*qualifiedName*, *publicId*, and *systemId* strings, representing the " +"information contained in an XML document type declaration." +msgstr "" +"返回一个新的封装了给定 *qualifiedName*, *publicId* 和 *systemId* 字符串的 " +":class:`DocumentType` 对象,它表示包含在 XML 文档类型声明中的信息。" + +#: ../../library/xml.dom.rst:237 +msgid "Node Objects" +msgstr "节点对象" + +#: ../../library/xml.dom.rst:239 +msgid "" +"All of the components of an XML document are subclasses of :class:`Node`." +msgstr "XML 文档的所有组成部分都是 :class:`Node` 的子类。" + +#: ../../library/xml.dom.rst:244 +msgid "" +"An integer representing the node type. Symbolic constants for the types are" +" on the :class:`Node` object: :const:`ELEMENT_NODE`, " +":const:`ATTRIBUTE_NODE`, :const:`TEXT_NODE`, :const:`CDATA_SECTION_NODE`, " +":const:`ENTITY_NODE`, :const:`PROCESSING_INSTRUCTION_NODE`, " +":const:`COMMENT_NODE`, :const:`DOCUMENT_NODE`, :const:`DOCUMENT_TYPE_NODE`, " +":const:`NOTATION_NODE`. This is a read-only attribute." +msgstr "" +"一个代表节点类型的整数。 类型符号常量在 :class:`Node` 对象上: :const:`ELEMENT_NODE`, " +":const:`ATTRIBUTE_NODE`, :const:`TEXT_NODE`, :const:`CDATA_SECTION_NODE`, " +":const:`ENTITY_NODE`, :const:`PROCESSING_INSTRUCTION_NODE`, " +":const:`COMMENT_NODE`, :const:`DOCUMENT_NODE`, :const:`DOCUMENT_TYPE_NODE`, " +":const:`NOTATION_NODE`。 这是个只读属性。" + +#: ../../library/xml.dom.rst:254 +msgid "" +"The parent of the current node, or ``None`` for the document node. The value" +" is always a :class:`Node` object or ``None``. For :class:`Element` nodes, " +"this will be the parent element, except for the root element, in which case " +"it will be the :class:`Document` object. For :class:`Attr` nodes, this is " +"always ``None``. This is a read-only attribute." +msgstr "" +"当前节点的上级,或者对于文档节点则为 ``None``。 该值总是一个 :class:`Node` 对象或者 ``None``。 对于 " +":class:`Element` 节点,这将为上级元素,但对于根元素例外,在此情况下它将为 :class:`Document` 对象。 对于 " +":class:`Attr` 节点,它将总是为 ``None``。 这是个只读属性。" + +#: ../../library/xml.dom.rst:263 +msgid "" +"A :class:`NamedNodeMap` of attribute objects. Only elements have actual " +"values for this; others provide ``None`` for this attribute. This is a read-" +"only attribute." +msgstr "" +"属性对象的 :class:`NamedNodeMap`。 这仅对元素才有实际值;其它对象会为该属性提供 ``None`` 值。 这是个只读属性。" + +#: ../../library/xml.dom.rst:270 +msgid "" +"The node that immediately precedes this one with the same parent. For " +"instance the element with an end-tag that comes just before the *self* " +"element's start-tag. Of course, XML documents are made up of more than just" +" elements so the previous sibling could be text, a comment, or something " +"else. If this node is the first child of the parent, this attribute will be " +"``None``. This is a read-only attribute." +msgstr "" +"在此节点之前具有相同上级的相邻节点。 例如结束标记紧接在在 *self* 元素的开始标记之前的元素。 当然,XML " +"文档并非只是由元素组成,因此之前相邻节点可以是文本、注释或者其他内容。 如果此节点是上级的第一个子节点,则该属性将为 ``None``。 " +"这是一个只读属性。" + +#: ../../library/xml.dom.rst:280 +msgid "" +"The node that immediately follows this one with the same parent. See also " +":attr:`previousSibling`. If this is the last child of the parent, this " +"attribute will be ``None``. This is a read-only attribute." +msgstr "" +"在此节点之后具有相同上级的相邻节点。 另请参见 :attr:`previousSibling`。 如果此节点是上级的最后一个子节点,则该属性将为 " +"``None``。 这是一个只读属性。" + +#: ../../library/xml.dom.rst:287 +msgid "" +"A list of nodes contained within this node. This is a read-only attribute." +msgstr "包含在此节点中的节点列表。 这是一个只读属性。" + +#: ../../library/xml.dom.rst:292 +msgid "" +"The first child of the node, if there are any, or ``None``. This is a read-" +"only attribute." +msgstr "节点的第一个下级,如果有的话,否则为 ``None``。 这是个只读属性。" + +#: ../../library/xml.dom.rst:298 +msgid "" +"The last child of the node, if there are any, or ``None``. This is a read-" +"only attribute." +msgstr "节点的最后一个下级,如果有的话,否则为 ``None``。 这是个只读属性。" + +#: ../../library/xml.dom.rst:304 +msgid "" +"The part of the :attr:`tagName` following the colon if there is one, else " +"the entire :attr:`tagName`. The value is a string." +msgstr ":attr:`tagName` 在冒号之后的部分,如果有冒号的话,否则为整个 :attr:`tagName`。 该值为一个字符串。" + +#: ../../library/xml.dom.rst:310 +msgid "" +"The part of the :attr:`tagName` preceding the colon if there is one, else " +"the empty string. The value is a string, or ``None``." +msgstr ":attr:`tagName` 在冒号之前的部分,如果有冒号的话,否则为空字符串。 该值为一个字符串或者为 ``None``。" + +#: ../../library/xml.dom.rst:316 +msgid "" +"The namespace associated with the element name. This will be a string or " +"``None``. This is a read-only attribute." +msgstr "关联到元素名称的命名空间。 这将是一个字符串或为 ``None``。 这是个只读属性。" + +#: ../../library/xml.dom.rst:322 +msgid "" +"This has a different meaning for each node type; see the DOM specification " +"for details. You can always get the information you would get here from " +"another property such as the :attr:`tagName` property for elements or the " +":attr:`name` property for attributes. For all node types, the value of this " +"attribute will be either a string or ``None``. This is a read-only " +"attribute." +msgstr "" +"这对于每种节点类型具有不同的含义;请查看 DOM 规格说明来了解详情。 你总是可以从其他特征属性例如元素的 :attr:`tagName` " +"特征属性或属性的 :attr:`name` 特征属性获取你能从这里获取的信息。 对于所有节点类型,这个属性的值都将是一个字符串或为 ``None``。 " +"这是一个只读属性。" + +#: ../../library/xml.dom.rst:331 +msgid "" +"This has a different meaning for each node type; see the DOM specification " +"for details. The situation is similar to that with :attr:`nodeName`. The " +"value is a string or ``None``." +msgstr "" +"这对于每种节点类型具有不同的含义;请查看 DOM 规格说明来了解详情。 具体情况与 :attr:`nodeName` 的类似。 该值是一个字符串或为 " +"``None``。" + +#: ../../library/xml.dom.rst:338 +msgid "Return ``True`` if the node has any attributes." +msgstr "如果该节点具有任何属性则返回 ``True``。" + +#: ../../library/xml.dom.rst:343 +msgid "Return ``True`` if the node has any child nodes." +msgstr "如果该节点具有任何子节点则返回 ``True``。" + +#: ../../library/xml.dom.rst:348 +msgid "" +"Return ``True`` if *other* refers to the same node as this node. This is " +"especially useful for DOM implementations which use any sort of proxy " +"architecture (because more than one object can refer to the same node)." +msgstr "" +"如果 *other* 指向的节点就是此节点则返回 ``True``。 这对于使用了任何代理架构的 DOM " +"实现来说特别有用(因为多个对象可能指向相同节点)。" + +#: ../../library/xml.dom.rst:354 +msgid "" +"This is based on a proposed DOM Level 3 API which is still in the \"working " +"draft\" stage, but this particular interface appears uncontroversial. " +"Changes from the W3C will not necessarily affect this method in the Python " +"DOM interface (though any new W3C API for this would also be supported)." +msgstr "" +"这是基于已提议的 DOM 第 3 等级 API,目前尚处于“起草”阶段,但这个特定接口看来并不存在争议。 来自 W3C 的修改将不会影响 Python " +"DOM 接口中的这个方法(不过针对它的任何新 W3C API 也将受到支持)。" + +#: ../../library/xml.dom.rst:362 +msgid "" +"Add a new child node to this node at the end of the list of children, " +"returning *newChild*. If the node was already in the tree, it is removed " +"first." +msgstr "在子节点列表末尾添加一个新的子节点,返回 *newChild*。 如果节点已存在于树结构中,它将先被移除。" + +#: ../../library/xml.dom.rst:369 +msgid "" +"Insert a new child node before an existing child. It must be the case that " +"*refChild* is a child of this node; if not, :exc:`ValueError` is raised. " +"*newChild* is returned. If *refChild* is ``None``, it inserts *newChild* at " +"the end of the children's list." +msgstr "" +"在现有的子节点之前插入一个新的子节点。 它必须属于 *refChild* 是这个节点的子节点的情况;如果不是,则会引发 " +":exc:`ValueError`。*newChild* 会被返回。 如果 *refChild* 为 ``None``,它会将 *newChild* " +"插入到子节点列表的末尾。" + +#: ../../library/xml.dom.rst:377 +msgid "" +"Remove a child node. *oldChild* must be a child of this node; if not, " +":exc:`ValueError` is raised. *oldChild* is returned on success. If " +"*oldChild* will not be used further, its :meth:`unlink` method should be " +"called." +msgstr "" +"移除一个子节点。 *oldChild* 必须是这个节点的子节点;如果不是,则会引发 :exc:`ValueError`。 成功时 *oldChild* " +"会被返回。 如果 *oldChild* 将不再被继续使用,则将调用它的 :meth:`unlink` 方法。" + +#: ../../library/xml.dom.rst:384 +msgid "" +"Replace an existing node with a new node. It must be the case that " +"*oldChild* is a child of this node; if not, :exc:`ValueError` is raised." +msgstr "" +"将一个现有节点替换为新的节点。 这必须属于 *oldChild* 是该节点的子节点的情况;如果不是,则会引发 :exc:`ValueError`。" + +#: ../../library/xml.dom.rst:390 +msgid "" +"Join adjacent text nodes so that all stretches of text are stored as single " +":class:`Text` instances. This simplifies processing text from a DOM tree " +"for many applications." +msgstr "合并相邻的文本节点以便将所有文本段存储为单个 :class:`Text` 实例。 这可以简化许多应用程序处理来自 DOM 树文本的操作。" + +#: ../../library/xml.dom.rst:397 +msgid "" +"Clone this node. Setting *deep* means to clone all child nodes as well. " +"This returns the clone." +msgstr "克隆此节点。 设置 *deep* 表示也克隆所有子节点。 此方法将返回克隆的节点。" + +#: ../../library/xml.dom.rst:404 +msgid "NodeList Objects" +msgstr "节点列表对象" + +#: ../../library/xml.dom.rst:406 +msgid "" +"A :class:`NodeList` represents a sequence of nodes. These objects are used " +"in two ways in the DOM Core recommendation: an :class:`Element` object " +"provides one as its list of child nodes, and the " +":meth:`getElementsByTagName` and :meth:`getElementsByTagNameNS` methods of " +":class:`Node` return objects with this interface to represent query results." +msgstr "" +":class:`NodeList` 代表一个节点列表。 在 DOM 核心建议中这些对象有两种使用方式: 由 :class:`Element` " +"对象提供作为其子节点列表,以及由 :class:`Node` 的 :meth:`getElementsByTagName` 和 " +":meth:`getElementsByTagNameNS` 方法通过此接口返回对象来表示查询结果。" + +#: ../../library/xml.dom.rst:412 +msgid "" +"The DOM Level 2 recommendation defines one method and one attribute for " +"these objects:" +msgstr "DOM 第 2 层级建议为这些对象定义一个方法和一个属性:" + +#: ../../library/xml.dom.rst:418 +msgid "" +"Return the *i*'th item from the sequence, if there is one, or ``None``. The" +" index *i* is not allowed to be less than zero or greater than or equal to " +"the length of the sequence." +msgstr "从序列中返回第 *i* 项,如果序列不为空的话,否则返回 ``None``。 索引号 *i* 不允许小于零或大于等于序列的长度。" + +#: ../../library/xml.dom.rst:425 +msgid "The number of nodes in the sequence." +msgstr "序列中的节点数量。" + +#: ../../library/xml.dom.rst:427 +msgid "" +"In addition, the Python DOM interface requires that some additional support " +"is provided to allow :class:`NodeList` objects to be used as Python " +"sequences. All :class:`NodeList` implementations must include support for " +":meth:`~object.__len__` and :meth:`~object.__getitem__`; this allows " +"iteration over the :class:`NodeList` in :keyword:`for` statements and proper" +" support for the :func:`len` built-in function." +msgstr "" +"此外,Python DOM 接口还要求提供一些额外支持来允许将 :class:`NodeList` 对象用作 Python 序列。 所有 " +":class:`NodeList` 实现都必须包括对 :meth:`~object.__len__` 和 " +":meth:`~object.__getitem__` 的支持;这样 :class:`NodeList` 就允许使用 :keyword:`for` " +"语句进行迭代并能正确地支持 :func:`len` 内置函数。" + +#: ../../library/xml.dom.rst:435 +msgid "" +"If a DOM implementation supports modification of the document, the " +":class:`NodeList` implementation must also support the " +":meth:`~object.__setitem__` and :meth:`~object.__delitem__` methods." +msgstr "" +"如果一个 DOM 实现支持文档的修改,则 :class:`NodeList` 实现还必须支持 :meth:`~object.__setitem__` 和" +" :meth:`~object.__delitem__` 方法。" + +#: ../../library/xml.dom.rst:443 +msgid "DocumentType Objects" +msgstr "文档类型对象" + +#: ../../library/xml.dom.rst:445 +msgid "" +"Information about the notations and entities declared by a document " +"(including the external subset if the parser uses it and can provide the " +"information) is available from a :class:`DocumentType` object. The " +":class:`DocumentType` for a document is available from the :class:`Document`" +" object's :attr:`doctype` attribute; if there is no ``DOCTYPE`` declaration " +"for the document, the document's :attr:`doctype` attribute will be set to " +"``None`` instead of an instance of this interface." +msgstr "" +"有关一个文档所声明的标注和实体的信息(包括解析器所使用并能提供信息的外部子集)可以从 :class:`DocumentType` 对象获取。 文档的 " +":class:`DocumentType` 可从 :class:`Document` 对象的 :attr:`doctype` " +"属性中获取;如果一个文档没有 ``DOCTYPE`` 声明,则该文档的 :attr:`doctype` 属性将被设为 ``None`` " +"而非此接口的一个实例。" + +#: ../../library/xml.dom.rst:453 +msgid "" +":class:`DocumentType` is a specialization of :class:`Node`, and adds the " +"following attributes:" +msgstr ":class:`DocumentType` 是 :class:`Node` 是专门化,并增加了下列属性:" + +#: ../../library/xml.dom.rst:459 +msgid "" +"The public identifier for the external subset of the document type " +"definition. This will be a string or ``None``." +msgstr "文档类型定义的外部子集的公有标识。 这将为一个字符串或者为 ``None``。" + +#: ../../library/xml.dom.rst:465 +msgid "" +"The system identifier for the external subset of the document type " +"definition. This will be a URI as a string, or ``None``." +msgstr "文档类型定义的外部子集的系统标识。 这将为一个字符串形式的 URI,或者为 ``None``。" + +#: ../../library/xml.dom.rst:471 +msgid "" +"A string giving the complete internal subset from the document. This does " +"not include the brackets which enclose the subset. If the document has no " +"internal subset, this should be ``None``." +msgstr "一个给出来自文档的完整内部子集的字符串。 这不包括子集外面的圆括号。 如果文档没有内部子集,则应为 ``None``。" + +#: ../../library/xml.dom.rst:478 +msgid "" +"The name of the root element as given in the ``DOCTYPE`` declaration, if " +"present." +msgstr "``DOCTYPE`` 声明中给出的根元素名称,如果有的话。" + +#: ../../library/xml.dom.rst:484 +msgid "" +"This is a :class:`NamedNodeMap` giving the definitions of external entities." +" For entity names defined more than once, only the first definition is " +"provided (others are ignored as required by the XML recommendation). This " +"may be ``None`` if the information is not provided by the parser, or if no " +"entities are defined." +msgstr "" +"这是给出外部实体定义的 :class:`NamedNodeMap`。 对于多次定义的实体名称,则只提供第一次的定义(其他的会按照 XML 建议被忽略)。" +" 这可能为 ``None``,如果解析器未提供此信息,或者如果未定义任何实体的话。" + +#: ../../library/xml.dom.rst:493 +msgid "" +"This is a :class:`NamedNodeMap` giving the definitions of notations. For " +"notation names defined more than once, only the first definition is provided" +" (others are ignored as required by the XML recommendation). This may be " +"``None`` if the information is not provided by the parser, or if no " +"notations are defined." +msgstr "" +"这是给出标注定义的 :class:`NamedNodeMap`。 对于多次定义的标注,则只提供第一次的定义(其他的会按照 XML 建议被忽略)。 " +"这可能为 ``None``,如果解析器未提供此信息,或者如果未定义任何标注的话。" + +#: ../../library/xml.dom.rst:503 +msgid "Document Objects" +msgstr "Document 对象" + +#: ../../library/xml.dom.rst:505 +msgid "" +"A :class:`Document` represents an entire XML document, including its " +"constituent elements, attributes, processing instructions, comments etc. " +"Remember that it inherits properties from :class:`Node`." +msgstr "" +":class:`Document` 代表一个完整的 XML 文档,包括其组成元素、属性、处理指令和注释等。 请记住它会继承来自 " +":class:`Node` 的属性。" + +#: ../../library/xml.dom.rst:512 +msgid "The one and only root element of the document." +msgstr "文档唯一的根元素。" + +#: ../../library/xml.dom.rst:517 +msgid "" +"Create and return a new element node. The element is not inserted into the " +"document when it is created. You need to explicitly insert it with one of " +"the other methods such as :meth:`insertBefore` or :meth:`appendChild`." +msgstr "" +"创建并返回一个新的元素节点。 当元素被创建时不会被插入到文档中。 你需要通过某个其他方法例如 :meth:`insertBefore` 或 " +":meth:`appendChild` 来显示地插入它。" + +#: ../../library/xml.dom.rst:524 +msgid "" +"Create and return a new element with a namespace. The *tagName* may have a " +"prefix. The element is not inserted into the document when it is created. " +"You need to explicitly insert it with one of the other methods such as " +":meth:`insertBefore` or :meth:`appendChild`." +msgstr "" +"创建并返回一个新的带有命名空间的元素。 *tagName* 可以带有前缀。 当元素被创建时不会被插入到文档中。 你需要通过某个其他方法例如 " +":meth:`insertBefore` 或 :meth:`appendChild` 来显式地插入它。" + +#: ../../library/xml.dom.rst:532 +msgid "" +"Create and return a text node containing the data passed as a parameter. As" +" with the other creation methods, this one does not insert the node into the" +" tree." +msgstr "创建并返回一个包含作为形参被传入的数据的文本节点。 与其他创建方法一样,此方法不会将节点插入到树中。" + +#: ../../library/xml.dom.rst:539 +msgid "" +"Create and return a comment node containing the data passed as a parameter." +" As with the other creation methods, this one does not insert the node into" +" the tree." +msgstr "创建并返回一个包含作为形参被传入的数据的注释节点。 与其他创建方法一样,此方法不会将节点插入到树中。" + +#: ../../library/xml.dom.rst:546 +msgid "" +"Create and return a processing instruction node containing the *target* and " +"*data* passed as parameters. As with the other creation methods, this one " +"does not insert the node into the tree." +msgstr "创建并返回一个包含作为形参被传入的 *target* 和 *data* 的处理指令节点。 与其他创建方法一样,此方法不会将节点插入到树中。" + +#: ../../library/xml.dom.rst:553 +msgid "" +"Create and return an attribute node. This method does not associate the " +"attribute node with any particular element. You must use " +":meth:`setAttributeNode` on the appropriate :class:`Element` object to use " +"the newly created attribute instance." +msgstr "" +"创建并返回一个属性节点。 此方法不会将属性节点关联到任何特定的元素。 你必须在正确的 :class:`Element` 对象上使用 " +":meth:`setAttributeNode` 来使用新创建的属性实例。" + +#: ../../library/xml.dom.rst:561 +msgid "" +"Create and return an attribute node with a namespace. The *tagName* may " +"have a prefix. This method does not associate the attribute node with any " +"particular element. You must use :meth:`setAttributeNode` on the " +"appropriate :class:`Element` object to use the newly created attribute " +"instance." +msgstr "" +"创建并返回一个带有命名空间的属性节点。 *tagName* 可以带有前缀。 此方法不会将属性节点关联到任何特定的元素。 你必须在正确的 " +":class:`Element` 对象上使用 :meth:`setAttributeNode` 来使用新创建的属性实例。" + +#: ../../library/xml.dom.rst:569 +msgid "" +"Search for all descendants (direct children, children's children, etc.) with" +" a particular element type name." +msgstr "搜索全部具有特定元素类型名称的后继元素(直接下级、下级的下级等等)。" + +#: ../../library/xml.dom.rst:575 +msgid "" +"Search for all descendants (direct children, children's children, etc.) with" +" a particular namespace URI and localname. The localname is the part of the" +" namespace after the prefix." +msgstr "" +"搜索全部具有特定命名空间 URI 和 localname 的后继元素(直接下级、下级的下级等等)。 localname 是命名空间在前缀之后的部分。" + +#: ../../library/xml.dom.rst:583 +msgid "Element Objects" +msgstr "元素对象" + +#: ../../library/xml.dom.rst:585 +msgid "" +":class:`Element` is a subclass of :class:`Node`, so inherits all the " +"attributes of that class." +msgstr ":class:`Element` 是 :class:`Node` 的子类,因此会继承该类的全部属性。" + +#: ../../library/xml.dom.rst:591 +msgid "" +"The element type name. In a namespace-using document it may have colons in " +"it. The value is a string." +msgstr "元素类型名称。 在使用命名空间的文档中它可能包含冒号。 该值是一个字符串。" + +#: ../../library/xml.dom.rst:597 ../../library/xml.dom.rst:602 +msgid "Same as equivalent method in the :class:`Document` class." +msgstr "与 :class:`Document` 类中的对应方法相同。" + +#: ../../library/xml.dom.rst:607 +msgid "Return ``True`` if the element has an attribute named by *name*." +msgstr "如果元素带有名称为 *name* 的属性则返回 ``True``。" + +#: ../../library/xml.dom.rst:612 +msgid "" +"Return ``True`` if the element has an attribute named by *namespaceURI* and " +"*localName*." +msgstr "如果元素带有名称为 *namespaceURI* 加 *localName* 的属性则返回 ``True``。" + +#: ../../library/xml.dom.rst:618 +msgid "" +"Return the value of the attribute named by *name* as a string. If no such " +"attribute exists, an empty string is returned, as if the attribute had no " +"value." +msgstr "将名称为 *name* 的属性的值作为字符串返回。 如果指定属性不存在,则返回空字符串,就像该属性没有对应的值一样。" + +#: ../../library/xml.dom.rst:624 +msgid "Return the :class:`Attr` node for the attribute named by *attrname*." +msgstr "返回名称为 *attrname* 的属性对应的 :class:`Attr` 节点。" + +#: ../../library/xml.dom.rst:629 +msgid "" +"Return the value of the attribute named by *namespaceURI* and *localName* as" +" a string. If no such attribute exists, an empty string is returned, as if " +"the attribute had no value." +msgstr "" +"将名称为 *namespaceURI* 加 *localName* 的属性的值作为字符串返回。 " +"如果指定属性不存在,则返回空字符串,就像该属性没有对应的值一样。" + +#: ../../library/xml.dom.rst:636 +msgid "" +"Return an attribute value as a node, given a *namespaceURI* and *localName*." +msgstr "将给定 *namespaceURI* 加 *localName* 的属性的值作为节点返回。" + +#: ../../library/xml.dom.rst:641 +msgid "" +"Remove an attribute by name. If there is no matching attribute, a " +":exc:`NotFoundErr` is raised." +msgstr "移除指定名称的节点。 如果没有匹配的属性,则会引发 :exc:`NotFoundErr`。" + +#: ../../library/xml.dom.rst:647 +msgid "" +"Remove and return *oldAttr* from the attribute list, if present. If " +"*oldAttr* is not present, :exc:`NotFoundErr` is raised." +msgstr "" +"从属性列表中移除并返回 *oldAttr*,如果该属性存在的话。 如果 *oldAttr* 不存在,则会引发 :exc:`NotFoundErr`。" + +#: ../../library/xml.dom.rst:653 +msgid "" +"Remove an attribute by name. Note that it uses a localName, not a qname. " +"No exception is raised if there is no matching attribute." +msgstr "移除指定名称的属性。 请注意它是使用 localName 而不是 qname。 如果没有匹配的属性也不会引发异常。" + +#: ../../library/xml.dom.rst:659 +msgid "Set an attribute value from a string." +msgstr "将属性值设为指定的字符串。" + +#: ../../library/xml.dom.rst:664 +msgid "" +"Add a new attribute node to the element, replacing an existing attribute if " +"necessary if the :attr:`name` attribute matches. If a replacement occurs, " +"the old attribute node will be returned. If *newAttr* is already in use, " +":exc:`InuseAttributeErr` will be raised." +msgstr "" +"将一个新的属性节点添加到元素,当匹配到 :attr:`name` 属性时如有必要会替换现有的属性。 如果发生了替换,将返回原有属性节点。 如果 " +"*newAttr* 已经被使用,则会引发 :exc:`InuseAttributeErr`。" + +#: ../../library/xml.dom.rst:672 +msgid "" +"Add a new attribute node to the element, replacing an existing attribute if " +"necessary if the :attr:`namespaceURI` and :attr:`localName` attributes " +"match. If a replacement occurs, the old attribute node will be returned. If" +" *newAttr* is already in use, :exc:`InuseAttributeErr` will be raised." +msgstr "" +"将一个新的属性节点添加到元素,当匹配到 :attr:`namespaceURI` 和 :attr:`localName` " +"属性时如有必要会替换现有的属性。 如果发生了替换,将返回原有属性节点。 如果 *newAttr* 已经被使用,则会引发 " +":exc:`InuseAttributeErr`。" + +#: ../../library/xml.dom.rst:680 +msgid "" +"Set an attribute value from a string, given a *namespaceURI* and a *qname*. " +"Note that a qname is the whole attribute name. This is different than " +"above." +msgstr "" +"将属性值设为 *namespaceURI* 和 *qname* 所给出的字符串。 请注意 qname 是整个属性名称。 这与上面的方法不同。" + +#: ../../library/xml.dom.rst:687 +msgid "Attr Objects" +msgstr "Attr 对象" + +#: ../../library/xml.dom.rst:689 +msgid "" +":class:`Attr` inherits from :class:`Node`, so inherits all its attributes." +msgstr ":class:`Attr` 继承自 :class:`Node`,因此会继承其全部属性。" + +#: ../../library/xml.dom.rst:694 +msgid "" +"The attribute name. In a namespace-using document it may include a colon." +msgstr "属性名称。 在使用命名空间的文档中可能会包括冒号。" + +#: ../../library/xml.dom.rst:700 +msgid "" +"The part of the name following the colon if there is one, else the entire " +"name. This is a read-only attribute." +msgstr "名称在冒号之后的部分,如果有的话,否则为完整名称。 这是个只读属性。" + +#: ../../library/xml.dom.rst:707 +msgid "" +"The part of the name preceding the colon if there is one, else the empty " +"string." +msgstr "名称在冒号之前的部分,如果有冒号的话,否则为空字符串。" + +#: ../../library/xml.dom.rst:713 +msgid "" +"The text value of the attribute. This is a synonym for the " +":attr:`nodeValue` attribute." +msgstr "属性的文本值。 这与 :attr:`nodeValue` 属性同义。" + +#: ../../library/xml.dom.rst:720 +msgid "NamedNodeMap Objects" +msgstr "NamedNodeMap 对象" + +#: ../../library/xml.dom.rst:722 +msgid ":class:`NamedNodeMap` does *not* inherit from :class:`Node`." +msgstr ":class:`NamedNodeMap` *不是* 继承自 :class:`Node`。" + +#: ../../library/xml.dom.rst:727 +msgid "The length of the attribute list." +msgstr "属性列表的长度。" + +#: ../../library/xml.dom.rst:732 +msgid "" +"Return an attribute with a particular index. The order you get the " +"attributes in is arbitrary but will be consistent for the life of a DOM. " +"Each item is an attribute node. Get its value with the :attr:`value` " +"attribute." +msgstr "" +"返回特定带有索引号的属性。 获取属性的顺序是强制规定的,但在 DOM 的生命期内会保持一致。 其中每一项均为属性节点。 可使用 " +":attr:`value` 属性获取其值。" + +#: ../../library/xml.dom.rst:736 +msgid "" +"There are also experimental methods that give this class more mapping " +"behavior. You can use them or you can use the standardized " +":meth:`getAttribute\\*` family of methods on the :class:`Element` objects." +msgstr "" +"还有一些试验性方法给予这个类更多的映射行为。 你可以使用这些方法或者使用 :class:`Element` 对象上标准化的 " +":meth:`getAttribute\\*` 方法族。" + +#: ../../library/xml.dom.rst:744 +msgid "Comment Objects" +msgstr "注释对象" + +#: ../../library/xml.dom.rst:746 +msgid "" +":class:`Comment` represents a comment in the XML document. It is a subclass" +" of :class:`Node`, but cannot have child nodes." +msgstr ":class:`Comment` 代表 XML 文档中的注释。 它是 :class:`Node` 的子类,但不能拥有下级节点。" + +#: ../../library/xml.dom.rst:752 +msgid "" +"The content of the comment as a string. The attribute contains all " +"characters between the leading ````, " +"but does not include them." +msgstr "" +"注释的内容是一个字符串。 该属性包含在开头 ```` 之间的所有字符,但不包括这两个符号。" + +#: ../../library/xml.dom.rst:760 +msgid "Text and CDATASection Objects" +msgstr "Text 和 CDATASection 对象" + +#: ../../library/xml.dom.rst:762 +msgid "" +"The :class:`Text` interface represents text in the XML document. If the " +"parser and DOM implementation support the DOM's XML extension, portions of " +"the text enclosed in CDATA marked sections are stored in " +":class:`CDATASection` objects. These two interfaces are identical, but " +"provide different values for the :attr:`nodeType` attribute." +msgstr "" +":class:`Text` 接口代表 XML 文档中的文本。 如果解析器和 DOM 实现支持 DOM 的 XML 扩展,则包裹在 CDATA " +"标记的节中的部分会被存储到 :class:`CDATASection` 对象中。 这两个接口很相似,但是提供了不同的 :attr:`nodeType` " +"属性值。" + +#: ../../library/xml.dom.rst:768 +msgid "" +"These interfaces extend the :class:`Node` interface. They cannot have child" +" nodes." +msgstr "这些接口扩展了 :class:`Node` 接口。 它们不能拥有下级节点。" + +#: ../../library/xml.dom.rst:774 +msgid "The content of the text node as a string." +msgstr "字符串形式的文本节点内容。" + +#: ../../library/xml.dom.rst:778 +msgid "" +"The use of a :class:`CDATASection` node does not indicate that the node " +"represents a complete CDATA marked section, only that the content of the " +"node was part of a CDATA section. A single CDATA section may be represented" +" by more than one node in the document tree. There is no way to determine " +"whether two adjacent :class:`CDATASection` nodes represent different CDATA " +"marked sections." +msgstr "" +":class:`CDATASection` 节点的使用并不表示该节点代表一个完整的 CDATA 标记节,只是表示该节点的内容是 CDATA 节的一部分。" +" 单个 CDATA 节可以由文档树中的多个节点来表示。 没有什么办法能确定两个相邻的 :class:`CDATASection` 节点是否代表不同的 " +"CDATA 标记节。" + +#: ../../library/xml.dom.rst:788 +msgid "ProcessingInstruction Objects" +msgstr "ProcessingInstruction 对象" + +#: ../../library/xml.dom.rst:790 +msgid "" +"Represents a processing instruction in the XML document; this inherits from " +"the :class:`Node` interface and cannot have child nodes." +msgstr "代表 XML 文档中的处理指令。 它继承自 :class:`Node` 接口并且不能拥有下级节点。" + +#: ../../library/xml.dom.rst:796 +msgid "" +"The content of the processing instruction up to the first whitespace " +"character. This is a read-only attribute." +msgstr "到第一个空格符为止的处理指令内容。 这是个只读属性。" + +#: ../../library/xml.dom.rst:802 +msgid "" +"The content of the processing instruction following the first whitespace " +"character." +msgstr "在第一个空格符之后的处理指令内容。" + +#: ../../library/xml.dom.rst:809 +msgid "Exceptions" +msgstr "异常" + +#: ../../library/xml.dom.rst:811 +msgid "" +"The DOM Level 2 recommendation defines a single exception, " +":exc:`DOMException`, and a number of constants that allow applications to " +"determine what sort of error occurred. :exc:`DOMException` instances carry a" +" :attr:`code` attribute that provides the appropriate value for the specific" +" exception." +msgstr "" +"DOM 第 2 层级推荐定义一个异常 :exc:`DOMException`,以及多个变量用来允许应用程序确定发生了何种错误。 " +":exc:`DOMException` 实例带有 :attr:`code` 属性用来提供特定异常所对应的值。" + +#: ../../library/xml.dom.rst:816 +msgid "" +"The Python DOM interface provides the constants, but also expands the set of" +" exceptions so that a specific exception exists for each of the exception " +"codes defined by the DOM. The implementations must raise the appropriate " +"specific exception, each of which carries the appropriate value for the " +":attr:`code` attribute." +msgstr "" +"Python DOM 接口提供了一些常量,但还扩展了异常集以使 DOM 所定义的每个异常代码都存在特定的异常。 " +"接口的具体实现必须引发正确的特定异常,它们各自带有正确的 :attr:`code` 属性值。" + +#: ../../library/xml.dom.rst:825 +msgid "" +"Base exception class used for all specific DOM exceptions. This exception " +"class cannot be directly instantiated." +msgstr "所有特定 DOM 异常所使用的异常基类。 该异常类不可被直接实例化。" + +#: ../../library/xml.dom.rst:831 +msgid "" +"Raised when a specified range of text does not fit into a string. This is " +"not known to be used in the Python DOM implementations, but may be received " +"from DOM implementations not written in Python." +msgstr "" +"当指定范围的文本不能适配一个字符串时被引发。 此异常在 Python DOM 实现中尚不可用,但可从不是以 Python 编写的 DOM 实现中接收。" + +#: ../../library/xml.dom.rst:838 +msgid "" +"Raised when an attempt is made to insert a node where the node type is not " +"allowed." +msgstr "当尝试插入一个节点但该节点类型不被允许时被引发。" + +#: ../../library/xml.dom.rst:844 +msgid "" +"Raised when an index or size parameter to a method is negative or exceeds " +"the allowed values." +msgstr "当一个方法的索引或大小参数为负值或超出允许的值范围时被引发。" + +#: ../../library/xml.dom.rst:850 +msgid "" +"Raised when an attempt is made to insert an :class:`Attr` node that is " +"already present elsewhere in the document." +msgstr "当尝试插入一个 :class:`Attr` 节点但该节点已存在于文档中的某处时被引发。" + +#: ../../library/xml.dom.rst:856 +msgid "" +"Raised if a parameter or an operation is not supported on the underlying " +"object." +msgstr "当某个参数或操作在底层对象中不受支持时被引发。" + +#: ../../library/xml.dom.rst:861 +msgid "" +"This exception is raised when a string parameter contains a character that " +"is not permitted in the context it's being used in by the XML 1.0 " +"recommendation. For example, attempting to create an :class:`Element` node " +"with a space in the element type name will cause this error to be raised." +msgstr "" +"当某个字符串参数包含的字符在使用它的上下文中不被 XML 1.0 标准建议所允许时引发。 例如,尝试创建一个元素类型名称中带有空格的 " +":class:`Element` 节点将导致此错误被引发。" + +#: ../../library/xml.dom.rst:869 +msgid "Raised when an attempt is made to modify the type of a node." +msgstr "当尝试修改某个节点的类型时被引发。" + +#: ../../library/xml.dom.rst:874 +msgid "" +"Raised when an attempt is made to use an object that is not defined or is no" +" longer usable." +msgstr "当尝试使用未定义或不再可用的的对象时被引发。" + +#: ../../library/xml.dom.rst:880 +msgid "" +"If an attempt is made to change any object in a way that is not permitted " +"with regard to the `Namespaces in XML `_ recommendation, this exception is raised." +msgstr "" +"如果试图以 `XML 中的命名空间 `_ " +"建议所不允许的方式修改任何对象,则会引发此异常。" + +#: ../../library/xml.dom.rst:887 +msgid "" +"Exception when a node does not exist in the referenced context. For " +"example, :meth:`NamedNodeMap.removeNamedItem` will raise this if the node " +"passed in does not exist in the map." +msgstr "" +"当某个节点不存在于被引用的上下文中时引发的异常。 例如,:meth:`NamedNodeMap.removeNamedItem` " +"将在所传入的节点不在于于映射中时引发此异常。" + +#: ../../library/xml.dom.rst:894 +msgid "" +"Raised when the implementation does not support the requested type of object" +" or operation." +msgstr "当具体实现不支持所请求的对象类型或操作时被引发。" + +#: ../../library/xml.dom.rst:900 +msgid "" +"This is raised if data is specified for a node which does not support data." +msgstr "当为某个不支持数据 的节点指定数据时被引发。" + +#: ../../library/xml.dom.rst:907 +msgid "" +"Raised on attempts to modify an object where modifications are not allowed " +"(such as for read-only nodes)." +msgstr "当尝试修改某个不允许修改的对象(例如只读节点)时被引发。" + +#: ../../library/xml.dom.rst:913 +msgid "Raised when an invalid or illegal string is specified." +msgstr "当指定了无效或非法的字符串时被引发。" + +#: ../../library/xml.dom.rst:920 +msgid "" +"Raised when a node is inserted in a different document than it currently " +"belongs to, and the implementation does not support migrating the node from " +"one document to the other." +msgstr "当将某个节点插入非其当前所属的另一个文档,并且具体实现不支持从一个文档向一个文档迁移节点时被引发。" + +#: ../../library/xml.dom.rst:924 +msgid "" +"The exception codes defined in the DOM recommendation map to the exceptions " +"described above according to this table:" +msgstr "DOM 建议映射中针对上述异常而定义的异常代码如下表所示:" + +#: ../../library/xml.dom.rst:928 +msgid "Constant" +msgstr "常量" + +#: ../../library/xml.dom.rst:928 +msgid "Exception" +msgstr "异常" + +#: ../../library/xml.dom.rst:930 +msgid ":const:`DOMSTRING_SIZE_ERR`" +msgstr ":const:`DOMSTRING_SIZE_ERR`" + +#: ../../library/xml.dom.rst:930 +msgid ":exc:`DomstringSizeErr`" +msgstr ":exc:`DomstringSizeErr`" + +#: ../../library/xml.dom.rst:932 +msgid ":const:`HIERARCHY_REQUEST_ERR`" +msgstr ":const:`HIERARCHY_REQUEST_ERR`" + +#: ../../library/xml.dom.rst:932 +msgid ":exc:`HierarchyRequestErr`" +msgstr ":exc:`HierarchyRequestErr`" + +#: ../../library/xml.dom.rst:934 +msgid ":const:`INDEX_SIZE_ERR`" +msgstr ":const:`INDEX_SIZE_ERR`" + +#: ../../library/xml.dom.rst:934 +msgid ":exc:`IndexSizeErr`" +msgstr ":exc:`IndexSizeErr`" + +#: ../../library/xml.dom.rst:936 +msgid ":const:`INUSE_ATTRIBUTE_ERR`" +msgstr ":const:`INUSE_ATTRIBUTE_ERR`" + +#: ../../library/xml.dom.rst:936 +msgid ":exc:`InuseAttributeErr`" +msgstr ":exc:`InuseAttributeErr`" + +#: ../../library/xml.dom.rst:938 +msgid ":const:`INVALID_ACCESS_ERR`" +msgstr ":const:`INVALID_ACCESS_ERR`" + +#: ../../library/xml.dom.rst:938 +msgid ":exc:`InvalidAccessErr`" +msgstr ":exc:`InvalidAccessErr`" + +#: ../../library/xml.dom.rst:940 +msgid ":const:`INVALID_CHARACTER_ERR`" +msgstr ":const:`INVALID_CHARACTER_ERR`" + +#: ../../library/xml.dom.rst:940 +msgid ":exc:`InvalidCharacterErr`" +msgstr ":exc:`InvalidCharacterErr`" + +#: ../../library/xml.dom.rst:942 +msgid ":const:`INVALID_MODIFICATION_ERR`" +msgstr ":const:`INVALID_MODIFICATION_ERR`" + +#: ../../library/xml.dom.rst:942 +msgid ":exc:`InvalidModificationErr`" +msgstr ":exc:`InvalidModificationErr`" + +#: ../../library/xml.dom.rst:944 +msgid ":const:`INVALID_STATE_ERR`" +msgstr ":const:`INVALID_STATE_ERR`" + +#: ../../library/xml.dom.rst:944 +msgid ":exc:`InvalidStateErr`" +msgstr ":exc:`InvalidStateErr`" + +#: ../../library/xml.dom.rst:946 +msgid ":const:`NAMESPACE_ERR`" +msgstr ":const:`NAMESPACE_ERR`" + +#: ../../library/xml.dom.rst:946 +msgid ":exc:`NamespaceErr`" +msgstr ":exc:`NamespaceErr`" + +#: ../../library/xml.dom.rst:948 +msgid ":const:`NOT_FOUND_ERR`" +msgstr ":const:`NOT_FOUND_ERR`" + +#: ../../library/xml.dom.rst:948 +msgid ":exc:`NotFoundErr`" +msgstr ":exc:`NotFoundErr`" + +#: ../../library/xml.dom.rst:950 +msgid ":const:`NOT_SUPPORTED_ERR`" +msgstr ":const:`NOT_SUPPORTED_ERR`" + +#: ../../library/xml.dom.rst:950 +msgid ":exc:`NotSupportedErr`" +msgstr ":exc:`NotSupportedErr`" + +#: ../../library/xml.dom.rst:952 +msgid ":const:`NO_DATA_ALLOWED_ERR`" +msgstr ":const:`NO_DATA_ALLOWED_ERR`" + +#: ../../library/xml.dom.rst:952 +msgid ":exc:`NoDataAllowedErr`" +msgstr ":exc:`NoDataAllowedErr`" + +#: ../../library/xml.dom.rst:954 +msgid ":const:`NO_MODIFICATION_ALLOWED_ERR`" +msgstr ":const:`NO_MODIFICATION_ALLOWED_ERR`" + +#: ../../library/xml.dom.rst:954 +msgid ":exc:`NoModificationAllowedErr`" +msgstr ":exc:`NoModificationAllowedErr`" + +#: ../../library/xml.dom.rst:956 +msgid ":const:`SYNTAX_ERR`" +msgstr ":const:`SYNTAX_ERR`" + +#: ../../library/xml.dom.rst:956 +msgid ":exc:`SyntaxErr`" +msgstr ":exc:`SyntaxErr`" + +#: ../../library/xml.dom.rst:958 +msgid ":const:`WRONG_DOCUMENT_ERR`" +msgstr ":const:`WRONG_DOCUMENT_ERR`" + +#: ../../library/xml.dom.rst:958 +msgid ":exc:`WrongDocumentErr`" +msgstr ":exc:`WrongDocumentErr`" + +#: ../../library/xml.dom.rst:965 +msgid "Conformance" +msgstr "一致性" + +#: ../../library/xml.dom.rst:967 +msgid "" +"This section describes the conformance requirements and relationships " +"between the Python DOM API, the W3C DOM recommendations, and the OMG IDL " +"mapping for Python." +msgstr "本节描述了 Python DOM API、W3C DOM 建议以及 Python 的 OMG IDL 映射之间的一致性要求和关系。" + +#: ../../library/xml.dom.rst:975 +msgid "Type Mapping" +msgstr "类型映射" + +#: ../../library/xml.dom.rst:977 +msgid "" +"The IDL types used in the DOM specification are mapped to Python types " +"according to the following table." +msgstr "将根据下表,将DOM规范中使用的IDL类型映射为Python类型。" + +#: ../../library/xml.dom.rst:981 +msgid "IDL Type" +msgstr "IDL 类型" + +#: ../../library/xml.dom.rst:981 +msgid "Python Type" +msgstr "Python 类型" + +#: ../../library/xml.dom.rst:983 +msgid "``boolean``" +msgstr "``boolean``" + +#: ../../library/xml.dom.rst:983 +msgid "``bool`` or ``int``" +msgstr "``bool`` 或 ``int``" + +#: ../../library/xml.dom.rst:985 ../../library/xml.dom.rst:985 +#: ../../library/xml.dom.rst:987 ../../library/xml.dom.rst:989 +msgid "``int``" +msgstr "``int``" + +#: ../../library/xml.dom.rst:987 +msgid "``long int``" +msgstr "``long int``" + +#: ../../library/xml.dom.rst:989 +msgid "``unsigned int``" +msgstr "``unsigned int``" + +#: ../../library/xml.dom.rst:991 +msgid "``DOMString``" +msgstr "``DOMString``" + +#: ../../library/xml.dom.rst:991 +msgid "``str`` or ``bytes``" +msgstr "``str`` 或 ``bytes``" + +#: ../../library/xml.dom.rst:993 +msgid "``null``" +msgstr "``null``" + +#: ../../library/xml.dom.rst:993 +msgid "``None``" +msgstr "``None``" + +#: ../../library/xml.dom.rst:999 +msgid "Accessor Methods" +msgstr "访问器方法" + +#: ../../library/xml.dom.rst:1001 +msgid "" +"The mapping from OMG IDL to Python defines accessor functions for IDL " +"``attribute`` declarations in much the way the Java mapping does. Mapping " +"the IDL declarations ::" +msgstr "" +"从 OMG IDL 到 Python 的映射以类似于 Java 映射的方式定义了针对 IDL ``attribute`` 声明的访问器函数。 映射以下 " +"IDL 声明 ::" + +#: ../../library/xml.dom.rst:1008 +msgid "" +"yields three accessor functions: a \"get\" method for :attr:`someValue` " +"(:meth:`_get_someValue`), and \"get\" and \"set\" methods for " +":attr:`anotherValue` (:meth:`_get_anotherValue` and " +":meth:`_set_anotherValue`). The mapping, in particular, does not require " +"that the IDL attributes are accessible as normal Python attributes: " +"``object.someValue`` is *not* required to work, and may raise an " +":exc:`AttributeError`." +msgstr "" +"会产生三个访问器函数: :attr:`someValue` 的 \"get\" 方法 (:meth:`_get_someValue`),以及 " +":attr:`anotherValue` 的 \"get\" 和 \"set\" 方法 (:meth:`_get_anotherValue` 和 " +":meth:`_set_anotherValue`)。 特别地,该映射不要求 IDL 属性像普通 Python 属性那样可访问: " +"``object.someValue`` *并非* 必须可用,并可能引发 :exc:`AttributeError`。" + +#: ../../library/xml.dom.rst:1015 +msgid "" +"The Python DOM API, however, *does* require that normal attribute access " +"work. This means that the typical surrogates generated by Python IDL " +"compilers are not likely to work, and wrapper objects may be needed on the " +"client if the DOM objects are accessed via CORBA. While this does require " +"some additional consideration for CORBA DOM clients, the implementers with " +"experience using DOM over CORBA from Python do not consider this a problem." +" Attributes that are declared ``readonly`` may not restrict write access in" +" all DOM implementations." +msgstr "" +"但是,Python DOM API 则 *确实* 要求普通属性访问可用。 这意味着由 Python IDL 解译器生成的典型代理有可能会不可用,如果 " +"DOM 对象是通过 CORBA 来访问则在客户端可能需要有包装对象。 虽然这确实要求为 CORBA DOM 客户端进行额外的考虑,但具有从 Python" +" 通过 CORBA 使用 DOM 经验的实现并不会认为这是个问题。 已经声明了 ``readonly`` 的属性不必在所有 DOM 实现中限制写入访问。" + +#: ../../library/xml.dom.rst:1024 +msgid "" +"In the Python DOM API, accessor functions are not required. If provided, " +"they should take the form defined by the Python IDL mapping, but these " +"methods are considered unnecessary since the attributes are accessible " +"directly from Python. \"Set\" accessors should never be provided for " +"``readonly`` attributes." +msgstr "" +"在 Python DOM API 中,访问器函数不是必须的。 如果提供,则它们应当采用由 Python IDL " +"映射所定义的形式,但这些方法会被认为不必要,因为这些属性可以从 Python 直接访问。 永远都不要为 ``readonly`` 属性提供 " +"\"set\" 访问器。" + +#: ../../library/xml.dom.rst:1029 +msgid "" +"The IDL definitions do not fully embody the requirements of the W3C DOM API," +" such as the notion of certain objects, such as the return value of " +":meth:`getElementsByTagName`, being \"live\". The Python DOM API does not " +"require implementations to enforce such requirements." +msgstr "" +"IDL 定义没有完全体现 W3C DOM API 的要求,如特定对象的概念,又如 :meth:`getElementsByTagName` 的返回值为 " +"\"live\" 等。 Python DOM API 并不强制具体实现执行这些要求。" diff --git a/library/xml.dom.pulldom.po b/library/xml.dom.pulldom.po new file mode 100644 index 000000000..0ec13a94d --- /dev/null +++ b/library/xml.dom.pulldom.po @@ -0,0 +1,191 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) 2001-2024, Python Software Foundation +# This file is distributed under the same license as the Python package. +# FIRST AUTHOR , YEAR. +# +# Translators: +# Freesand Leo , 2021 +# Rafael Fontenelle , 2024 +# +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: Python 3.9\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2024-02-16 21:12+0000\n" +"PO-Revision-Date: 2017-02-16 23:36+0000\n" +"Last-Translator: Rafael Fontenelle , 2024\n" +"Language-Team: Chinese (China) (https://app.transifex.com/python-doc/teams/5390/zh_CN/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: zh_CN\n" +"Plural-Forms: nplurals=1; plural=0;\n" + +#: ../../library/xml.dom.pulldom.rst:2 +msgid ":mod:`xml.dom.pulldom` --- Support for building partial DOM trees" +msgstr ":mod:`xml.dom.pulldom` --- 支持构建部分 DOM 树" + +#: ../../library/xml.dom.pulldom.rst:9 +msgid "**Source code:** :source:`Lib/xml/dom/pulldom.py`" +msgstr "**源代码:** :source:`Lib/xml/dom/pulldom.py`" + +#: ../../library/xml.dom.pulldom.rst:13 +msgid "" +"The :mod:`xml.dom.pulldom` module provides a \"pull parser\" which can also " +"be asked to produce DOM-accessible fragments of the document where " +"necessary. The basic concept involves pulling \"events\" from a stream of " +"incoming XML and processing them. In contrast to SAX which also employs an " +"event-driven processing model together with callbacks, the user of a pull " +"parser is responsible for explicitly pulling events from the stream, looping" +" over those events until either processing is finished or an error condition" +" occurs." +msgstr "" +":mod:`xml.dom.pulldom` 模块提供了一个“拉取解析器”,它能在必要时被用于产生文件的可访问 DOM 的片段。 其基本概念包括从输入的" +" XML 流拉取“事件”并处理它们。 与同样地同时应用了事件驱动处理模型加回调函数的 SAX " +"不同,拉取解析器的用户要负责显式地从流拉取事件,并循环遍历这些事件直到处理结束或者发生了错误条件。" + +#: ../../library/xml.dom.pulldom.rst:24 +msgid "" +"The :mod:`xml.dom.pulldom` module is not secure against maliciously " +"constructed data. If you need to parse untrusted or unauthenticated data " +"see :ref:`xml-vulnerabilities`." +msgstr "" +":mod:`xml.dom.pulldom` 模块对于恶意构建的数据是不安全的。 如果你需要解析不受信任或未经身份验证的数据,请参阅 " +":ref:`xml-vulnerabilities`。" + +#: ../../library/xml.dom.pulldom.rst:30 +msgid "" +"The SAX parser no longer processes general external entities by default to " +"increase security by default. To enable processing of external entities, " +"pass a custom parser instance in::" +msgstr "SAX 解析器默认不再处理一般外部实体以提升在默认情况下的安全性。 要启用外部实体处理,请传入一个自定义的解析器实例::" + +#: ../../library/xml.dom.pulldom.rst:43 +msgid "Example::" +msgstr "示例::" + +#: ../../library/xml.dom.pulldom.rst:54 +msgid "``event`` is a constant and can be one of:" +msgstr "``event`` 是一个常量,可以取下列值之一:" + +#: ../../library/xml.dom.pulldom.rst:56 +msgid ":data:`START_ELEMENT`" +msgstr ":data:`START_ELEMENT`" + +#: ../../library/xml.dom.pulldom.rst:57 +msgid ":data:`END_ELEMENT`" +msgstr ":data:`END_ELEMENT`" + +#: ../../library/xml.dom.pulldom.rst:58 +msgid ":data:`COMMENT`" +msgstr ":data:`COMMENT`" + +#: ../../library/xml.dom.pulldom.rst:59 +msgid ":data:`START_DOCUMENT`" +msgstr ":data:`START_DOCUMENT`" + +#: ../../library/xml.dom.pulldom.rst:60 +msgid ":data:`END_DOCUMENT`" +msgstr ":data:`END_DOCUMENT`" + +#: ../../library/xml.dom.pulldom.rst:61 +msgid ":data:`CHARACTERS`" +msgstr ":data:`CHARACTERS`" + +#: ../../library/xml.dom.pulldom.rst:62 +msgid ":data:`PROCESSING_INSTRUCTION`" +msgstr ":data:`PROCESSING_INSTRUCTION`" + +#: ../../library/xml.dom.pulldom.rst:63 +msgid ":data:`IGNORABLE_WHITESPACE`" +msgstr ":data:`IGNORABLE_WHITESPACE`" + +#: ../../library/xml.dom.pulldom.rst:65 +msgid "" +"``node`` is an object of type :class:`xml.dom.minidom.Document`, " +":class:`xml.dom.minidom.Element` or :class:`xml.dom.minidom.Text`." +msgstr "" +"``node`` 是一个 :class:`xml.dom.minidom.Document`, " +":class:`xml.dom.minidom.Element` 或 :class:`xml.dom.minidom.Text` 类型的对象。" + +#: ../../library/xml.dom.pulldom.rst:68 +msgid "" +"Since the document is treated as a \"flat\" stream of events, the document " +"\"tree\" is implicitly traversed and the desired elements are found " +"regardless of their depth in the tree. In other words, one does not need to " +"consider hierarchical issues such as recursive searching of the document " +"nodes, although if the context of elements were important, one would either " +"need to maintain some context-related state (i.e. remembering where one is " +"in the document at any given point) or to make use of the " +":func:`DOMEventStream.expandNode` method and switch to DOM-related " +"processing." +msgstr "" +"由于文档是被当作“展平”的事件流来处理的,文档“树”会被隐式地遍历并且无论所需元素在树中的深度如何都会被找到。 " +"换句话说,不需要考虑层级问题,例如文档节点的递归搜索等,但是如果元素的内容很重要,则有必要保留一些上下文相关的状态(例如记住任意给定点在文档中的位置)或者使用" +" :func:`DOMEventStream.expandNode` 方法并切换到 DOM 相关的处理过程。" + +#: ../../library/xml.dom.pulldom.rst:80 ../../library/xml.dom.pulldom.rst:85 +msgid "Subclass of :class:`xml.sax.handler.ContentHandler`." +msgstr ":class:`xml.sax.handler.ContentHandler` 的子类。" + +#: ../../library/xml.dom.pulldom.rst:90 +msgid "" +"Return a :class:`DOMEventStream` from the given input. *stream_or_string* " +"may be either a file name, or a file-like object. *parser*, if given, must " +"be an :class:`~xml.sax.xmlreader.XMLReader` object. This function will " +"change the document handler of the parser and activate namespace support; " +"other parser configuration (like setting an entity resolver) must have been " +"done in advance." +msgstr "" +"基于给定的输入返回一个 :class:`DOMEventStream`。 *stream_or_string* 可以是一个文件名,或是一个文件型对象。 " +"*parser* 如果给出,则必须是一个 :class:`~xml.sax.xmlreader.XMLReader` 对象。 " +"此函数将改变解析器的文档处理程序并激活命名空间支持;其他解析器配置(例如设置实体解析器)必须在之前已完成。" + +#: ../../library/xml.dom.pulldom.rst:97 +msgid "" +"If you have XML in a string, you can use the :func:`parseString` function " +"instead:" +msgstr "如果你将 XML 存放为字符串形式,则可以改用 :func:`parseString` 函数:" + +#: ../../library/xml.dom.pulldom.rst:101 +msgid "" +"Return a :class:`DOMEventStream` that represents the (Unicode) *string*." +msgstr "返回一个 :class:`DOMEventStream` 来表示 (Unicode) *string*。" + +#: ../../library/xml.dom.pulldom.rst:105 +msgid "Default value for the *bufsize* parameter to :func:`parse`." +msgstr "将 *bufsize* 形参的默认值设为 :func:`parse`。" + +#: ../../library/xml.dom.pulldom.rst:107 +msgid "" +"The value of this variable can be changed before calling :func:`parse` and " +"the new value will take effect." +msgstr "此变量的值可在调用 :func:`parse` 之前修改并使新值生效。" + +#: ../../library/xml.dom.pulldom.rst:113 +msgid "DOMEventStream Objects" +msgstr "DOMEventStream 对象" + +#: ../../library/xml.dom.pulldom.rst:117 +msgid "Support for :meth:`sequence protocol <__getitem__>` is deprecated." +msgstr "对 :meth:`序列协议 <__getitem__>` 的支持已被弃用。" + +#: ../../library/xml.dom.pulldom.rst:122 +msgid "" +"Return a tuple containing *event* and the current *node* as " +":class:`xml.dom.minidom.Document` if event equals :data:`START_DOCUMENT`, " +":class:`xml.dom.minidom.Element` if event equals :data:`START_ELEMENT` or " +":data:`END_ELEMENT` or :class:`xml.dom.minidom.Text` if event equals " +":data:`CHARACTERS`. The current node does not contain information about its " +"children, unless :func:`expandNode` is called." +msgstr "" +"返回一个元组,其中包含 *event* 和 :class:`xml.dom.minidom.Document` 形式的当前 *node* 如果 " +"event 等于 :data:`START_DOCUMENT`,包含 :class:`xml.dom.minidom.Element` 如果 event" +" 等于 :data:`START_ELEMENT` 或 :data:`END_ELEMENT` 或者 " +":class:`xml.dom.minidom.Text` 如果 event 等于 :data:`CHARACTERS`。 当前 node " +"不包含有关其子节点的信息,除非 :func:`expandNode` 被调用。" + +#: ../../library/xml.dom.pulldom.rst:132 +msgid "Expands all children of *node* into *node*. Example::" +msgstr "将 *node* 的所有子节点扩展到 *node* 中。 例如::" diff --git a/library/xml.etree.elementtree.po b/library/xml.etree.elementtree.po new file mode 100644 index 000000000..d79cfeaaf --- /dev/null +++ b/library/xml.etree.elementtree.po @@ -0,0 +1,1718 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) 2001-2024, Python Software Foundation +# This file is distributed under the same license as the Python package. +# FIRST AUTHOR , YEAR. +# +# Translators: +# cdarlint , 2017 +# ww song , 2018 +# Menghua Xiao , 2018 +# dannyvi , 2018 +# walkinrain , 2019 +# Alpha Du , 2019 +# Shengjing Zhu , 2019 +# ppcfish , 2019 +# Rafael Fontenelle , 2024 +# Freesand Leo , 2024 +# +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: Python 3.9\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2024-03-08 18:35+0000\n" +"PO-Revision-Date: 2017-02-16 23:36+0000\n" +"Last-Translator: Freesand Leo , 2024\n" +"Language-Team: Chinese (China) (https://app.transifex.com/python-doc/teams/5390/zh_CN/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: zh_CN\n" +"Plural-Forms: nplurals=1; plural=0;\n" + +#: ../../library/xml.etree.elementtree.rst:2 +msgid ":mod:`xml.etree.ElementTree` --- The ElementTree XML API" +msgstr ":mod:`xml.etree.ElementTree` --- ElementTree XML API" + +#: ../../library/xml.etree.elementtree.rst:9 +msgid "**Source code:** :source:`Lib/xml/etree/ElementTree.py`" +msgstr "**源代码:** :source:`Lib/xml/etree/ElementTree.py`" + +#: ../../library/xml.etree.elementtree.rst:13 +msgid "" +"The :mod:`xml.etree.ElementTree` module implements a simple and efficient " +"API for parsing and creating XML data." +msgstr ":mod:`xml.etree.ElementTree` 模块实现了一个简单高效的API,用于解析和创建XML数据。" + +#: ../../library/xml.etree.elementtree.rst:16 +msgid "This module will use a fast implementation whenever available." +msgstr "此模块将在可能的情况下使用快速实现。" + +#: ../../library/xml.etree.elementtree.rst:19 +msgid "The :mod:`xml.etree.cElementTree` module is deprecated." +msgstr ":mod:`xml.etree.cElementTree` 模块已被弃用。" + +#: ../../library/xml.etree.elementtree.rst:25 +msgid "" +"The :mod:`xml.etree.ElementTree` module is not secure against maliciously " +"constructed data. If you need to parse untrusted or unauthenticated data " +"see :ref:`xml-vulnerabilities`." +msgstr "" +":mod:`xml.etree.ElementTree` 模块对于恶意构建的数据是不安全的。如果需要解析不可信或未经身份验证的数据,请参见 " +":ref:`xml-vulnerabilities` 。" + +#: ../../library/xml.etree.elementtree.rst:30 +msgid "Tutorial" +msgstr "教程" + +#: ../../library/xml.etree.elementtree.rst:32 +msgid "" +"This is a short tutorial for using :mod:`xml.etree.ElementTree` (``ET`` in " +"short). The goal is to demonstrate some of the building blocks and basic " +"concepts of the module." +msgstr "" +"这是一个使用 :mod:`xml.etree.ElementTree` (简称 ``ET`` )的简短教程。目标是演示模块的一些构建块和基本概念。" + +#: ../../library/xml.etree.elementtree.rst:37 +msgid "XML tree and elements" +msgstr "XML 树和元素" + +#: ../../library/xml.etree.elementtree.rst:39 +msgid "" +"XML is an inherently hierarchical data format, and the most natural way to " +"represent it is with a tree. ``ET`` has two classes for this purpose - " +":class:`ElementTree` represents the whole XML document as a tree, and " +":class:`Element` represents a single node in this tree. Interactions with " +"the whole document (reading and writing to/from files) are usually done on " +"the :class:`ElementTree` level. Interactions with a single XML element and " +"its sub-elements are done on the :class:`Element` level." +msgstr "" +"XML 是一种继承性的分层数据格式,最自然的表示方法是使用树。 为此, ``ET`` 有两个类 -- :class:`ElementTree` " +"将整个XML文档表示为一个树, :class:`Element` 表示该树中的单个节点。 与整个文档的交互(读写文件)通常在 " +":class:`ElementTree` 级别完成。 与单个 XML 元素及其子元素的交互是在 :class:`Element` 级别完成的。" + +#: ../../library/xml.etree.elementtree.rst:50 +msgid "Parsing XML" +msgstr "解析 XML" + +#: ../../library/xml.etree.elementtree.rst:52 +msgid "" +"We'll be using the following XML document as the sample data for this " +"section:" +msgstr "我们将使用以下 XML 文档作为本节的示例数据:" + +#: ../../library/xml.etree.elementtree.rst:80 +msgid "We can import this data by reading from a file::" +msgstr "可以通过从文件中读取来导入此数据:" + +#: ../../library/xml.etree.elementtree.rst:86 +msgid "Or directly from a string::" +msgstr "或直接从字符串中解析:" + +#: ../../library/xml.etree.elementtree.rst:90 +msgid "" +":func:`fromstring` parses XML from a string directly into an " +":class:`Element`, which is the root element of the parsed tree. Other " +"parsing functions may create an :class:`ElementTree`. Check the " +"documentation to be sure." +msgstr "" +":func:`fromstring` 将 XML 从字符串直接解析为 :class:`Element` ,该元素是已解析树的根元素。 " +"其他解析函数可能会创建一个 :class:`ElementTree` 。 确切信息请查阅文档。" + +#: ../../library/xml.etree.elementtree.rst:94 +msgid "" +"As an :class:`Element`, ``root`` has a tag and a dictionary of attributes::" +msgstr "作为 :class:`Element` , ``root`` 具有标签和属性字典::" + +#: ../../library/xml.etree.elementtree.rst:101 +msgid "It also has children nodes over which we can iterate::" +msgstr "还有可以迭代的子节点:" + +#: ../../library/xml.etree.elementtree.rst:110 +msgid "Children are nested, and we can access specific child nodes by index::" +msgstr "子级是可以嵌套的,我们可以通过索引访问特定的子级节点:" + +#: ../../library/xml.etree.elementtree.rst:118 +msgid "" +"Not all elements of the XML input will end up as elements of the parsed " +"tree. Currently, this module skips over any XML comments, processing " +"instructions, and document type declarations in the input. Nevertheless, " +"trees built using this module's API rather than parsing from XML text can " +"have comments and processing instructions in them; they will be included " +"when generating XML output. A document type declaration may be accessed by " +"passing a custom :class:`TreeBuilder` instance to the :class:`XMLParser` " +"constructor." +msgstr "" +"并非 XML 输入的所有元素都将作为解析树的元素结束。 目前,此模块跳过输入中的任何 XML 注释、处理指令和文档类型声明。 然而,使用这个模块的 " +"API 而不是从 XML 文本解析构建的树可以包含注释和处理指令,生成 XML 输出时同样包含这些注释和处理指令。 可以通过将自定义 " +":class:`TreeBuilder` 实例传递给 :class:`XMLParser` 构造器来访问文档类型声明。" + +#: ../../library/xml.etree.elementtree.rst:132 +msgid "Pull API for non-blocking parsing" +msgstr "用于非阻塞解析的拉取 API" + +#: ../../library/xml.etree.elementtree.rst:134 +msgid "" +"Most parsing functions provided by this module require the whole document to" +" be read at once before returning any result. It is possible to use an " +":class:`XMLParser` and feed data into it incrementally, but it is a push API" +" that calls methods on a callback target, which is too low-level and " +"inconvenient for most needs. Sometimes what the user really wants is to be " +"able to parse XML incrementally, without blocking operations, while enjoying" +" the convenience of fully constructed :class:`Element` objects." +msgstr "" +"此模块所提供了大多数解析函数都要求在返回任何结果之前一次性读取整个文档。 可以使用 :class:`XMLParser` " +"并以增量方式添加数据,但这是在回调目标上调用方法的推送式 API。 有时用户真正想要的是能够以增量方式解析 XML 而无需阻塞操作,同时享受完整的已构造" +" :class:`Element` 对象。" + +#: ../../library/xml.etree.elementtree.rst:142 +msgid "" +"The most powerful tool for doing this is :class:`XMLPullParser`. It does " +"not require a blocking read to obtain the XML data, and is instead fed with " +"data incrementally with :meth:`XMLPullParser.feed` calls. To get the parsed" +" XML elements, call :meth:`XMLPullParser.read_events`. Here is an example::" +msgstr "" +"针对此需求的最强大工具是 :class:`XMLPullParser`。 它不要求通过阻塞式读取来获得 XML 数据,而是通过执行 " +":meth:`XMLPullParser.feed` 调用来增量式地添加数据。 要获得已解析的 XML 元素,应调用 " +":meth:`XMLPullParser.read_events`。 下面是一个示例::" + +#: ../../library/xml.etree.elementtree.rst:158 +msgid "" +"The obvious use case is applications that operate in a non-blocking fashion " +"where the XML data is being received from a socket or read incrementally " +"from some storage device. In such cases, blocking reads are unacceptable." +msgstr "" +"常见的用例是针对以非阻塞方式进行的应用程序,其中 XML 是从套接字接收或从某些存储设备增量式读取的。 在这些用例中,阻塞式读取是不可接受的。" + +#: ../../library/xml.etree.elementtree.rst:162 +msgid "" +"Because it's so flexible, :class:`XMLPullParser` can be inconvenient to use " +"for simpler use-cases. If you don't mind your application blocking on " +"reading XML data but would still like to have incremental parsing " +"capabilities, take a look at :func:`iterparse`. It can be useful when " +"you're reading a large XML document and don't want to hold it wholly in " +"memory." +msgstr "" +"因为其非常灵活,:class:`XMLPullParser` 在更简单的用例中使用起来可能并不方便。 如果你不介意你的应用程序在读取 XML " +"数据时造成阻塞但仍希望具有增量解析能力,可以考虑 :func:`iterparse`。 它在你读取大型 XML " +"文档并且不希望将它完全放去内存时会很适用。" + +#: ../../library/xml.etree.elementtree.rst:168 +msgid "" +"Where *immediate* feedback through events is wanted, calling method " +":meth:`XMLPullParser.flush` can help reduce delay; please make sure to study" +" the related security notes." +msgstr "" +"在需要通过事件获得 *即时* 反馈的场合中,调用方法 :meth:`XMLPullParser.flush` " +"将有助于减少延迟;请注意研究相关的安全说明。" + +#: ../../library/xml.etree.elementtree.rst:174 +msgid "Finding interesting elements" +msgstr "查找感兴趣的元素" + +#: ../../library/xml.etree.elementtree.rst:176 +msgid "" +":class:`Element` has some useful methods that help iterate recursively over " +"all the sub-tree below it (its children, their children, and so on). For " +"example, :meth:`Element.iter`::" +msgstr "" +":class:`Element` 有一些很有效的方法,可帮助递归遍历其下的所有子树(包括子级,子级的子级,等等)。例如 " +":meth:`Element.iter`::" + +#: ../../library/xml.etree.elementtree.rst:189 +msgid "" +":meth:`Element.findall` finds only elements with a tag which are direct " +"children of the current element. :meth:`Element.find` finds the *first* " +"child with a particular tag, and :attr:`Element.text` accesses the element's" +" text content. :meth:`Element.get` accesses the element's attributes::" +msgstr "" +":meth:`Element.findall` 仅查找当前元素的直接子元素中带有指定标签的元素。 :meth:`Element.find` " +"找带有特定标签的 *第一个* 子级,然后可以用 :attr:`Element.text` 访问元素的文本内容。 :attr:`Element.get` " +"访问元素的属性::" + +#: ../../library/xml.etree.elementtree.rst:203 +msgid "" +"More sophisticated specification of which elements to look for is possible " +"by using :ref:`XPath `." +msgstr "通过使用 :ref:`XPath ` ,可以更精确地指定要查找的元素。" + +#: ../../library/xml.etree.elementtree.rst:207 +msgid "Modifying an XML File" +msgstr "修改XML文件" + +#: ../../library/xml.etree.elementtree.rst:209 +msgid "" +":class:`ElementTree` provides a simple way to build XML documents and write " +"them to files. The :meth:`ElementTree.write` method serves this purpose." +msgstr "" +":class:`ElementTree` 提供了一种构建XML文档并将其写入文件的简单方法。调用 :meth:`ElementTree.write` " +"方法就可以实现。" + +#: ../../library/xml.etree.elementtree.rst:212 +msgid "" +"Once created, an :class:`Element` object may be manipulated by directly " +"changing its fields (such as :attr:`Element.text`), adding and modifying " +"attributes (:meth:`Element.set` method), as well as adding new children (for" +" example with :meth:`Element.append`)." +msgstr "" +"创建后可以直接操作 :class:`Element` 对象。例如:使用 :attr:`Element.text` 修改文本字段,使用 " +":meth:`Element.set` 方法添加和修改属性,以及使用 :meth:`Element.append` 添加新的子元素。" + +#: ../../library/xml.etree.elementtree.rst:217 +msgid "" +"Let's say we want to add one to each country's rank, and add an ``updated`` " +"attribute to the rank element::" +msgstr "假设我们要为每个国家/地区的中添加一个排名,并在排名元素中添加一个 ``updated`` 属性:" + +#: ../../library/xml.etree.elementtree.rst:227 +#: ../../library/xml.etree.elementtree.rst:271 +msgid "Our XML now looks like this:" +msgstr "生成的XML现在看起来像这样:" + +#: ../../library/xml.etree.elementtree.rst:255 +msgid "" +"We can remove elements using :meth:`Element.remove`. Let's say we want to " +"remove all countries with a rank higher than 50::" +msgstr "可以使用 :meth:`Element.remove` 删除元素。假设我们要删除排名高于50的所有国家/地区::" + +#: ../../library/xml.etree.elementtree.rst:266 +msgid "" +"Note that concurrent modification while iterating can lead to problems, just" +" like when iterating and modifying Python lists or dicts. Therefore, the " +"example first collects all matching elements with ``root.findall()``, and " +"only then iterates over the list of matches." +msgstr "" +"请注意在迭代时进行并发修改可能会导致问题,就像在迭代并修改 Python 列表或字典时那样。 因此,这个示例先通过 ``root.findall()``" +" 收集了所有匹配的元素,在此之后再对匹配项列表进行迭代。" + +#: ../../library/xml.etree.elementtree.rst:293 +msgid "Building XML documents" +msgstr "构建 XML 文档" + +#: ../../library/xml.etree.elementtree.rst:295 +msgid "" +"The :func:`SubElement` function also provides a convenient way to create new" +" sub-elements for a given element::" +msgstr ":func:`SubElement` 函数还提供了一种便捷方法来为给定元素创建新的子元素::" + +#: ../../library/xml.etree.elementtree.rst:306 +msgid "Parsing XML with Namespaces" +msgstr "解析带有命名空间的 XML" + +#: ../../library/xml.etree.elementtree.rst:308 +msgid "" +"If the XML input has `namespaces " +"`__, tags and attributes with " +"prefixes in the form ``prefix:sometag`` get expanded to ``{uri}sometag`` " +"where the *prefix* is replaced by the full *URI*. Also, if there is a " +"`default namespace `__, that " +"full URI gets prepended to all of the non-prefixed tags." +msgstr "" +"如果 XML 输入带有 `命名空间 `__,则具有前缀的 " +"``prefix:sometag`` 形式的标记和属性将被扩展为 ``{uri}sometag``,其中 *prefix* 会被完整 *URI* " +"所替换。 并且,如果存在 `默认命名空间 `__,则完整 " +"URI 会被添加到所有未加前缀的标记之前。" + +#: ../../library/xml.etree.elementtree.rst:316 +msgid "" +"Here is an XML example that incorporates two namespaces, one with the prefix" +" \"fictional\" and the other serving as the default namespace:" +msgstr "下面的 XML 示例包含两个命名空间,一个具有前缀 \"fictional\" 而另一个则作为默认命名空间:" + +#: ../../library/xml.etree.elementtree.rst:337 +msgid "" +"One way to search and explore this XML example is to manually add the URI to" +" every tag or attribute in the xpath of a :meth:`~Element.find` or " +":meth:`~Element.findall`::" +msgstr "" +"搜索和探查这个 XML 示例的一种方式是手动为 :meth:`~Element.find` 或 :meth:`~Element.findall` 的 " +"xpath 中的每个标记或属性添加 URI::" + +#: ../../library/xml.etree.elementtree.rst:348 +msgid "" +"A better way to search the namespaced XML example is to create a dictionary " +"with your own prefixes and use those in the search functions::" +msgstr "一种更好的方式是搜索带命名空间的 XML 示例创建一个字典来存放你自己的前缀并在搜索函数中使用它们::" + +#: ../../library/xml.etree.elementtree.rst:360 +msgid "These two approaches both output::" +msgstr "这两种方式都会输出::" + +#: ../../library/xml.etree.elementtree.rst:374 +msgid "XPath support" +msgstr "XPath支持" + +#: ../../library/xml.etree.elementtree.rst:376 +msgid "" +"This module provides limited support for `XPath expressions " +"`_ for locating elements in a tree. The goal " +"is to support a small subset of the abbreviated syntax; a full XPath engine " +"is outside the scope of the module." +msgstr "" +"此模块提供了对 `XPath 表达式 `_ 的有限支持用于在树中定位元素。 " +"其目标是支持一个简化语法的较小子集;完整的 XPath 引擎超出了此模块的适用范围。" + +#: ../../library/xml.etree.elementtree.rst:382 +#: ../../library/xml.etree.elementtree.rst:756 +msgid "Example" +msgstr "示例" + +#: ../../library/xml.etree.elementtree.rst:384 +msgid "" +"Here's an example that demonstrates some of the XPath capabilities of the " +"module. We'll be using the ``countrydata`` XML document from the " +":ref:`Parsing XML ` section::" +msgstr "" +"下面是一个演示此模块的部分 XPath 功能的例子。 我们将使用来自 :ref:`解析 XML ` " +"小节的 ``countrydata`` XML 文档::" + +#: ../../library/xml.etree.elementtree.rst:408 +msgid "" +"For XML with namespaces, use the usual qualified ``{namespace}tag`` " +"notation::" +msgstr "对于带有命名空间的 XML,应使用通常的限定 ``{namespace}tag`` 标记法::" + +#: ../../library/xml.etree.elementtree.rst:415 +msgid "Supported XPath syntax" +msgstr "支持的XPath语法" + +#: ../../library/xml.etree.elementtree.rst:420 +msgid "Syntax" +msgstr "语法" + +#: ../../library/xml.etree.elementtree.rst:420 +msgid "Meaning" +msgstr "含意" + +#: ../../library/xml.etree.elementtree.rst:422 +msgid "``tag``" +msgstr "``tag``" + +#: ../../library/xml.etree.elementtree.rst:422 +msgid "" +"Selects all child elements with the given tag. For example, ``spam`` selects" +" all child elements named ``spam``, and ``spam/egg`` selects all " +"grandchildren named ``egg`` in all children named ``spam``. " +"``{namespace}*`` selects all tags in the given namespace, ``{*}spam`` " +"selects tags named ``spam`` in any (or no) namespace, and ``{}*`` only " +"selects tags that are not in a namespace." +msgstr "" +"选择具有给定标记的所有子元素。 例如,``spam`` 是选择名为 ``spam`` 的所有子元素,而 ``spam/egg`` 是在名为 " +"``spam`` 的子元素中选择所有名为 ``egg`` 的孙元素,``{*}spam`` 是在任意(或无)命名空间中选择名为 ``spam`` " +"的标记,而 ``{}*`` 是只选择不在一个命名空间中的标记。" + +#: ../../library/xml.etree.elementtree.rst:431 +msgid "Support for star-wildcards was added." +msgstr "增加了对星号通配符的支持。" + +#: ../../library/xml.etree.elementtree.rst:434 +msgid "``*``" +msgstr "``*``" + +#: ../../library/xml.etree.elementtree.rst:434 +msgid "" +"Selects all child elements, including comments and processing instructions." +" For example, ``*/egg`` selects all grandchildren named ``egg``." +msgstr "选择所有子元素,包括注释和处理说明。例如 ``*/egg`` 选择所有名为 ``egg`` 的孙元素。" + +#: ../../library/xml.etree.elementtree.rst:438 +msgid "``.``" +msgstr "``.``" + +#: ../../library/xml.etree.elementtree.rst:438 +msgid "" +"Selects the current node. This is mostly useful at the beginning of the " +"path, to indicate that it's a relative path." +msgstr "选择当前节点。这在路径的开头非常有用,用于指示它是相对路径。" + +#: ../../library/xml.etree.elementtree.rst:442 +msgid "``//``" +msgstr "``//``" + +#: ../../library/xml.etree.elementtree.rst:442 +msgid "" +"Selects all subelements, on all levels beneath the current element. For " +"example, ``.//egg`` selects all ``egg`` elements in the entire tree." +msgstr "选择所有子元素 在当前元素的所有下级中选择所有下级元素。 例如,``.//egg`` 是在整个树中选择所有 ``egg`` 元素。" + +#: ../../library/xml.etree.elementtree.rst:446 +msgid "``..``" +msgstr "``..``" + +#: ../../library/xml.etree.elementtree.rst:446 +msgid "" +"Selects the parent element. Returns ``None`` if the path attempts to reach " +"the ancestors of the start element (the element ``find`` was called on)." +msgstr "选择父元素。 如果路径试图前往起始元素的上级(元素的 ``find`` 被调用)则返回 ``None``。" + +#: ../../library/xml.etree.elementtree.rst:450 +msgid "``[@attrib]``" +msgstr "``[@attrib]``" + +#: ../../library/xml.etree.elementtree.rst:450 +msgid "Selects all elements that have the given attribute." +msgstr "选择具有给定属性的所有元素。" + +#: ../../library/xml.etree.elementtree.rst:452 +msgid "``[@attrib='value']``" +msgstr "``[@attrib='value']``" + +#: ../../library/xml.etree.elementtree.rst:452 +msgid "" +"Selects all elements for which the given attribute has the given value. The" +" value cannot contain quotes." +msgstr "选择给定属性具有给定值的所有元素。该值不能包含引号。" + +#: ../../library/xml.etree.elementtree.rst:456 +msgid "``[tag]``" +msgstr "``[tag]``" + +#: ../../library/xml.etree.elementtree.rst:456 +msgid "" +"Selects all elements that have a child named ``tag``. Only immediate " +"children are supported." +msgstr "选择所有包含 ``tag`` 子元素的元素。只支持直系子元素。" + +#: ../../library/xml.etree.elementtree.rst:459 +msgid "``[.='text']``" +msgstr "``[.='text']``" + +#: ../../library/xml.etree.elementtree.rst:459 +msgid "" +"Selects all elements whose complete text content, including descendants, " +"equals the given ``text``." +msgstr "选择完整文本内容等于 ``text`` 的所有元素(包括后代)。" + +#: ../../library/xml.etree.elementtree.rst:464 +msgid "``[tag='text']``" +msgstr "``[tag='text']``" + +#: ../../library/xml.etree.elementtree.rst:464 +msgid "" +"Selects all elements that have a child named ``tag`` whose complete text " +"content, including descendants, equals the given ``text``." +msgstr "选择所有包含名为 ``tag`` 的子元素的元素,这些子元素(包括后代)的完整文本内容等于给定的 ``text`` 。" + +#: ../../library/xml.etree.elementtree.rst:468 +msgid "``[position]``" +msgstr "``[position]``" + +#: ../../library/xml.etree.elementtree.rst:468 +msgid "" +"Selects all elements that are located at the given position. The position " +"can be either an integer (1 is the first position), the expression " +"``last()`` (for the last position), or a position relative to the last " +"position (e.g. ``last()-1``)." +msgstr "" +"选择位于给定位置的所有元素。 位置可以是一个整数 (1 表示首位),表达式 ``last()`` (表示末位),或者相对于末位的位置 (例如 " +"``last()-1``)。" + +#: ../../library/xml.etree.elementtree.rst:475 +msgid "" +"Predicates (expressions within square brackets) must be preceded by a tag " +"name, an asterisk, or another predicate. ``position`` predicates must be " +"preceded by a tag name." +msgstr "谓词(方括号内的表达式)之前必须带有标签名称,星号或其他谓词。``position`` 谓词前必须有标签名称。" + +#: ../../library/xml.etree.elementtree.rst:480 +#: ../../library/xml.etree.elementtree.rst:808 +msgid "Reference" +msgstr "参考" + +#: ../../library/xml.etree.elementtree.rst:485 +#: ../../library/xml.etree.elementtree.rst:813 +msgid "Functions" +msgstr "函数" + +#: ../../library/xml.etree.elementtree.rst:489 +msgid "" +"`C14N 2.0 `_ transformation function." +msgstr "`C14N 2.0 `_ 转换功能。." + +#: ../../library/xml.etree.elementtree.rst:491 +msgid "" +"Canonicalization is a way to normalise XML output in a way that allows byte-" +"by-byte comparisons and digital signatures. It reduced the freedom that XML" +" serializers have and instead generates a more constrained XML " +"representation. The main restrictions regard the placement of namespace " +"declarations, the ordering of attributes, and ignorable whitespace." +msgstr "" +"规整化是标准化 XML 输出的一种方式,该方式允许按字节比较和数字签名。 它降低了 XML 序列化器所具有的自由度并改为生成更受约束的 XML " +"表示形式。 主要限制涉及命名空间声明的位置、属性的顺序和可忽略的空白符等。" + +#: ../../library/xml.etree.elementtree.rst:497 +msgid "" +"This function takes an XML data string (*xml_data*) or a file path or file-" +"like object (*from_file*) as input, converts it to the canonical form, and " +"writes it out using the *out* file(-like) object, if provided, or returns it" +" as a text string if not. The output file receives text, not bytes. It " +"should therefore be opened in text mode with ``utf-8`` encoding." +msgstr "" +"此函数接受一个 XML 数字字符串 (*xml_data*) 或文件路径或者文件型对象 (*from_file*) " +"作为输入,将其转换为规整形式,并在提供了 *out* 文件(类)对象的情况下将其写到该对象的话,或者如果未提供则将其作为文本字符串返回。 " +"输出文件接受文本而非字节数据。 因此它应当以使用 ``utf-8`` 编码格式的文本模式来打开。" + +#: ../../library/xml.etree.elementtree.rst:504 +msgid "Typical uses::" +msgstr "典型使用::" + +#: ../../library/xml.etree.elementtree.rst:515 +msgid "The configuration *options* are as follows:" +msgstr "配置选项 *options* 如下:" + +#: ../../library/xml.etree.elementtree.rst:517 +msgid "*with_comments*: set to true to include comments (default: false)" +msgstr "*with_comments*: 设为真值以包括注释 (默认为假值)" + +#: ../../library/xml.etree.elementtree.rst:518 +msgid "" +"*strip_text*: set to true to strip whitespace before and after text content" +msgstr "*strip_text*: 设为真值以去除文本内容前后的空白符" + +#: ../../library/xml.etree.elementtree.rst:519 +#: ../../library/xml.etree.elementtree.rst:521 +msgid "(default: false)" +msgstr "(默认值:否)" + +#: ../../library/xml.etree.elementtree.rst:520 +msgid "" +"*rewrite_prefixes*: set to true to replace namespace prefixes by " +"\"n{number}\"" +msgstr "*rewrite_prefixes*: 设为真值以替换带有 \"n{number}\" 前缀的命名空间" + +#: ../../library/xml.etree.elementtree.rst:522 +msgid "*qname_aware_tags*: a set of qname aware tag names in which prefixes" +msgstr "*qname_aware_tags*: 一组可感知限定名称的标记名称,其中的前缀" + +#: ../../library/xml.etree.elementtree.rst:523 +#: ../../library/xml.etree.elementtree.rst:525 +msgid "should be replaced in text content (default: empty)" +msgstr "应当在文本内容中被替换 (默认为空值)" + +#: ../../library/xml.etree.elementtree.rst:524 +msgid "" +"*qname_aware_attrs*: a set of qname aware attribute names in which prefixes" +msgstr "*qname_aware_attrs*: 一组可感知限定名称的属性名称,其中的前缀" + +#: ../../library/xml.etree.elementtree.rst:526 +msgid "" +"*exclude_attrs*: a set of attribute names that should not be serialised" +msgstr "*exclude_attrs*: 一组不应当被序列化的属性名称" + +#: ../../library/xml.etree.elementtree.rst:527 +msgid "*exclude_tags*: a set of tag names that should not be serialised" +msgstr "*exclude_tags*: 一组不应当被序列化的标记名称" + +#: ../../library/xml.etree.elementtree.rst:529 +msgid "" +"In the option list above, \"a set\" refers to any collection or iterable of " +"strings, no ordering is expected." +msgstr "在上面的选项列表中,\"一组\" 是指任意多项集或包含字符串的可迭代对象,排序是不必要的。" + +#: ../../library/xml.etree.elementtree.rst:537 +msgid "" +"Comment element factory. This factory function creates a special element " +"that will be serialized as an XML comment by the standard serializer. The " +"comment string can be either a bytestring or a Unicode string. *text* is a " +"string containing the comment string. Returns an element instance " +"representing a comment." +msgstr "" +"注释元素工厂函数。 这个工厂函数可创建一个特殊元素,它将被标准序列化器当作 XML 注释来进行序列化。 注释字串可以是字节串或是 Unicode " +"字符串。 *text* 是包含注释字串的字符串。 返回一个表示注释的元素实例。" + +#: ../../library/xml.etree.elementtree.rst:543 +msgid "" +"Note that :class:`XMLParser` skips over comments in the input instead of " +"creating comment objects for them. An :class:`ElementTree` will only contain" +" comment nodes if they have been inserted into to the tree using one of the " +":class:`Element` methods." +msgstr "" +"请注意 :class:`XMLParser` 会跳过输入中的注释而不会为其创建注释对象。 :class:`ElementTree` 将只在当使用某个 " +":class:`Element` 方法向树插入了注释节点时才会包含注释节点。" + +#: ../../library/xml.etree.elementtree.rst:550 +msgid "" +"Writes an element tree or element structure to sys.stdout. This function " +"should be used for debugging only." +msgstr "将一个元素树或元素结构体写入到 sys.stdout。 此函数应当只被用于调试。" + +#: ../../library/xml.etree.elementtree.rst:553 +msgid "" +"The exact output format is implementation dependent. In this version, it's " +"written as an ordinary XML file." +msgstr "实际输出格式是依赖于具体实现的。 在这个版本中,它将以普通 XML 文件的格式写入。" + +#: ../../library/xml.etree.elementtree.rst:556 +msgid "*elem* is an element tree or an individual element." +msgstr "*elem* 是一个元素树或单独元素。" + +#: ../../library/xml.etree.elementtree.rst:558 +msgid "" +"The :func:`dump` function now preserves the attribute order specified by the" +" user." +msgstr ":func:`dump` 函数现在会保留用户指定的属性顺序。" + +#: ../../library/xml.etree.elementtree.rst:565 +msgid "" +"Parses an XML section from a string constant. Same as :func:`XML`. *text* " +"is a string containing XML data. *parser* is an optional parser instance. " +"If not given, the standard :class:`XMLParser` parser is used. Returns an " +":class:`Element` instance." +msgstr "" +"根据一个字符串常量解析 XML 的节。 与 :func:`XML` 类似。 *text* 是包含 XML 数据的字符串。 *parser* " +"是可选的解析器实例。 如果未给出,则会使用标准 :class:`XMLParser` 解析器。 返回一个 :class:`Element` 实例。" + +#: ../../library/xml.etree.elementtree.rst:573 +msgid "" +"Parses an XML document from a sequence of string fragments. *sequence* is a" +" list or other sequence containing XML data fragments. *parser* is an " +"optional parser instance. If not given, the standard :class:`XMLParser` " +"parser is used. Returns an :class:`Element` instance." +msgstr "" +"根据一个字符串片段序列解析 XML 文档。 *sequence* 是包含 XML 数据片段的列表或其他序列对象。 *parser* 是可选的解析器实例。" +" 如果未给出,则会使用标准的 :class:`XMLParser` 解析器。 返回一个 :class:`Element` 实例。" + +#: ../../library/xml.etree.elementtree.rst:583 +msgid "" +"Appends whitespace to the subtree to indent the tree visually. This can be " +"used to generate pretty-printed XML output. *tree* can be an Element or " +"ElementTree. *space* is the whitespace string that will be inserted for " +"each indentation level, two space characters by default. For indenting " +"partial subtrees inside of an already indented tree, pass the initial " +"indentation level as *level*." +msgstr "" +"添加空格到子树来实现树的缩进效果。 这可以被用来生成美化打印的 XML 输出。 *tree* 可以为 Element 或 ElementTree。 " +"*space* 是对应将被插入的每个缩进层级的空格字符串,默认为两个空格符。 要对已缩进的树的部分子树进行缩进,请传入初始缩进层级作为 *level*。" + +#: ../../library/xml.etree.elementtree.rst:595 +msgid "" +"Check if an object appears to be a valid element object. *element* is an " +"element instance. Return ``True`` if this is an element object." +msgstr "检测一个对象是否为有效的元素对象。 *element* 是一个元素实例。 如果对象是一个元素对象则返回 ``True``。" + +#: ../../library/xml.etree.elementtree.rst:601 +msgid "" +"Parses an XML section into an element tree incrementally, and reports what's" +" going on to the user. *source* is a filename or :term:`file object` " +"containing XML data. *events* is a sequence of events to report back. The " +"supported events are the strings ``\"start\"``, ``\"end\"``, " +"``\"comment\"``, ``\"pi\"``, ``\"start-ns\"`` and ``\"end-ns\"`` (the \"ns\"" +" events are used to get detailed namespace information). If *events* is " +"omitted, only ``\"end\"`` events are reported. *parser* is an optional " +"parser instance. If not given, the standard :class:`XMLParser` parser is " +"used. *parser* must be a subclass of :class:`XMLParser` and can only use " +"the default :class:`TreeBuilder` as a target. Returns an :term:`iterator` " +"providing ``(event, elem)`` pairs." +msgstr "" +"以增量方式将一个 XML 节解析为元素树,并向用户报告执行情况。 *source* 是包含 XML 数据的文件名或 :term:`file " +"object`。 *events* 是要报告的事件序列。 所支持的事件字符串有 ``\"start\"``, ``\"end\"``, " +"``\"comment\"``, ``\"pi\"``, ``\"start-ns\"`` 和 ``\"end-ns\"`` (\"ns\" " +"事件用于获取详细的命名空间信息)。 如果 *events* 被省略,则只有 ``\"end\"`` 事件会被报告。 *parser* " +"是可选的解析器实例。 如果未给出,则会使用标准的 :class:`XMLParser` 解析器。 *parser* 必须为 " +":class:`XMLParser` 的子类并且只能使用默认的 :class:`TreeBuilder` 作为目标。 返回一个提供 ``(event, " +"elem)`` 对的 :term:`iterator`。" + +#: ../../library/xml.etree.elementtree.rst:613 +msgid "" +"Note that while :func:`iterparse` builds the tree incrementally, it issues " +"blocking reads on *source* (or the file it names). As such, it's unsuitable" +" for applications where blocking reads can't be made. For fully non-" +"blocking parsing, see :class:`XMLPullParser`." +msgstr "" +"请注意虽然 :func:`iterparse` 是以增量方式构建树,但它会对 *source* (或其所指定的文件) 发出阻塞式读取。 " +"因此,它不适用于不可执行阻塞式读取的应用。 对于完全非阻塞式的解析,请参看 :class:`XMLPullParser`。" + +#: ../../library/xml.etree.elementtree.rst:620 +msgid "" +":func:`iterparse` only guarantees that it has seen the \">\" character of a " +"starting tag when it emits a \"start\" event, so the attributes are defined," +" but the contents of the text and tail attributes are undefined at that " +"point. The same applies to the element children; they may or may not be " +"present." +msgstr "" +":func:`iterparse` 只会确保当发出 \"start\" 事件时看到了开始标记的 \">\" " +"字符,因而在这个点上属性已被定义,但文本容和末尾属性还未被定义。 这同样适用于元素的下级;它们可能存在也可能不存在。" + +#: ../../library/xml.etree.elementtree.rst:626 +#: ../../library/xml.etree.elementtree.rst:1490 +msgid "If you need a fully populated element, look for \"end\" events instead." +msgstr "如果你需要已完全填充的元素,请改为查找 \"end\" 事件。" + +#: ../../library/xml.etree.elementtree.rst:628 +msgid "The *parser* argument." +msgstr "*parser* 参数。" + +#: ../../library/xml.etree.elementtree.rst:631 +#: ../../library/xml.etree.elementtree.rst:1494 +msgid "The ``comment`` and ``pi`` events were added." +msgstr "增加了 ``comment`` 和 ``pi`` 事件。" + +#: ../../library/xml.etree.elementtree.rst:637 +msgid "" +"Parses an XML section into an element tree. *source* is a filename or file " +"object containing XML data. *parser* is an optional parser instance. If " +"not given, the standard :class:`XMLParser` parser is used. Returns an " +":class:`ElementTree` instance." +msgstr "" +"将一个 XML 的节解析为元素树。 *source* 是包含 XML 数据的文件名或文件对象。 *parser* 是可选的解析器实例。 " +"如果未给出,则会使用标准的 :class:`XMLParser` 解析器。 返回一个 :class:`ElementTree` 实例。" + +#: ../../library/xml.etree.elementtree.rst:645 +msgid "" +"PI element factory. This factory function creates a special element that " +"will be serialized as an XML processing instruction. *target* is a string " +"containing the PI target. *text* is a string containing the PI contents, if" +" given. Returns an element instance, representing a processing instruction." +msgstr "" +"PI 元素工厂函数。 这个工厂函数可创建一个特殊元素,它将被当作 XML 处理指令来进行序列化。 *target* 是包含 PI 目标的字符串。 " +"*text* 如果给出则是包含 PI 内容的字符串。 返回一个表示处理指令的元素实例。" + +#: ../../library/xml.etree.elementtree.rst:650 +msgid "" +"Note that :class:`XMLParser` skips over processing instructions in the input" +" instead of creating comment objects for them. An :class:`ElementTree` will " +"only contain processing instruction nodes if they have been inserted into to" +" the tree using one of the :class:`Element` methods." +msgstr "" +"请注意 :class:`XMLParser` 会跳过输入中的处理指令而不会为其创建注释对象。 :class:`ElementTree` 将只在当使用某个" +" :class:`Element` 方法向树插入了处理指令节点时才会包含处理指令节点。" + +#: ../../library/xml.etree.elementtree.rst:658 +msgid "" +"Registers a namespace prefix. The registry is global, and any existing " +"mapping for either the given prefix or the namespace URI will be removed. " +"*prefix* is a namespace prefix. *uri* is a namespace uri. Tags and " +"attributes in this namespace will be serialized with the given prefix, if at" +" all possible." +msgstr "" +"注册一个命名空间前缀。 这个注册表是全局的,并且任何对应给定前缀或命名空间 URI 的现有映射都会被移除。 *prefix* 是命名空间前缀。 " +"*uri* 是命名空间 URI。 如果可能的话,这个命名空间中的标记和属性将附带给定的前缀来进行序列化。" + +#: ../../library/xml.etree.elementtree.rst:669 +msgid "" +"Subelement factory. This function creates an element instance, and appends " +"it to an existing element." +msgstr "子元素工厂函数。 这个函数会创建一个元素实例,并将其添加到现有的元素。" + +#: ../../library/xml.etree.elementtree.rst:672 +msgid "" +"The element name, attribute names, and attribute values can be either " +"bytestrings or Unicode strings. *parent* is the parent element. *tag* is " +"the subelement name. *attrib* is an optional dictionary, containing element" +" attributes. *extra* contains additional attributes, given as keyword " +"arguments. Returns an element instance." +msgstr "" +"元素名、属性名和属性值可以是字节串或 Unicode 字符串。 *parent* 是父元素。 *tag* 是子元素名。 *attrib* " +"是一个可选的字典,其中包含元素属性。 *extra* 包含额外的属性,以关键字参数形式给出。 返回一个元素实例。" + +#: ../../library/xml.etree.elementtree.rst:683 +msgid "" +"Generates a string representation of an XML element, including all " +"subelements. *element* is an :class:`Element` instance. *encoding* [1]_ is" +" the output encoding (default is US-ASCII). Use ``encoding=\"unicode\"`` to" +" generate a Unicode string (otherwise, a bytestring is generated). *method*" +" is either ``\"xml\"``, ``\"html\"`` or ``\"text\"`` (default is " +"``\"xml\"``). *xml_declaration*, *default_namespace* and " +"*short_empty_elements* has the same meaning as in :meth:`ElementTree.write`." +" Returns an (optionally) encoded string containing the XML data." +msgstr "" +"生成一个 XML 元素的字符串表示形式,包括所有子元素。 *element* 是一个 :class:`Element` 实例。 *encoding* " +"[1]_ 是输出编码格式(默认为 US-ASCII)。 请使用 ``encoding=\"unicode\"`` 来生成 Unicode " +"字符串(否则生成字节串)。 *method* 是 ``\"xml\"``, ``\"html\"`` 或 ``\"text\"`` (默认为 " +"``\"xml\"``)。 *xml_declaration*, *default_namespace* 和 " +"*short_empty_elements* 具有与 :meth:`ElementTree.write` 中一致的含义。 返回一个包含 XML " +"数据(可选)已编码的字符串。" + +#: ../../library/xml.etree.elementtree.rst:692 +#: ../../library/xml.etree.elementtree.rst:719 +#: ../../library/xml.etree.elementtree.rst:1168 +msgid "The *short_empty_elements* parameter." +msgstr "*short_empty_elements* 形参。" + +#: ../../library/xml.etree.elementtree.rst:695 +#: ../../library/xml.etree.elementtree.rst:722 +msgid "The *xml_declaration* and *default_namespace* parameters." +msgstr "*xml_declaration* 和 *default_namespace* 形参。" + +#: ../../library/xml.etree.elementtree.rst:698 +msgid "" +"The :func:`tostring` function now preserves the attribute order specified by" +" the user." +msgstr ":func:`tostring` 函数现在会保留用户指定的属性顺序。" + +#: ../../library/xml.etree.elementtree.rst:707 +msgid "" +"Generates a string representation of an XML element, including all " +"subelements. *element* is an :class:`Element` instance. *encoding* [1]_ is" +" the output encoding (default is US-ASCII). Use ``encoding=\"unicode\"`` to" +" generate a Unicode string (otherwise, a bytestring is generated). *method*" +" is either ``\"xml\"``, ``\"html\"`` or ``\"text\"`` (default is " +"``\"xml\"``). *xml_declaration*, *default_namespace* and " +"*short_empty_elements* has the same meaning as in :meth:`ElementTree.write`." +" Returns a list of (optionally) encoded strings containing the XML data. It " +"does not guarantee any specific sequence, except that " +"``b\"\".join(tostringlist(element)) == tostring(element)``." +msgstr "" +"生成一个 XML 元素的字符串表示形式,包括所有子元素。 *element* 是一个 :class:`Element` 实例。 *encoding* " +"[1]_ 是输出编码格式(默认为 US-ASCII)。 请使用 ``encoding=\"unicode\"`` 来生成 Unicode " +"字符串(否则生成字节串)。 *method* 是 ``\"xml\"``, ``\"html\"`` 或 ``\"text\"`` (默认为 " +"``\"xml\"``)。 *xml_declaration*, *default_namespace* 和 " +"*short_empty_elements* 具有与 :meth:`ElementTree.write` 中一致的含义。 返回一个包含 XML " +"数据(可选)已编码字符串的列表。 它并不保证任何特定的序列,除了 ``b\"\".join(tostringlist(element)) == " +"tostring(element)``。" + +#: ../../library/xml.etree.elementtree.rst:725 +msgid "" +"The :func:`tostringlist` function now preserves the attribute order " +"specified by the user." +msgstr ":func:`tostringlist` 函数现在会保留用户指定的属性顺序。" + +#: ../../library/xml.etree.elementtree.rst:732 +msgid "" +"Parses an XML section from a string constant. This function can be used to " +"embed \"XML literals\" in Python code. *text* is a string containing XML " +"data. *parser* is an optional parser instance. If not given, the standard " +":class:`XMLParser` parser is used. Returns an :class:`Element` instance." +msgstr "" +"根据一个字符串常量解析 XML 的节。 此函数可被用于在 Python 代码中嵌入“XML 字面值”。 *text* 是包含 XML 数据的字符串。 " +"*parser* 是可选的解析器实例。 如果未给出,则会使用标准的 :class:`XMLParser` 解析器。 返回一个 " +":class:`Element` 实例。" + +#: ../../library/xml.etree.elementtree.rst:740 +msgid "" +"Parses an XML section from a string constant, and also returns a dictionary " +"which maps from element id:s to elements. *text* is a string containing XML" +" data. *parser* is an optional parser instance. If not given, the standard" +" :class:`XMLParser` parser is used. Returns a tuple containing an " +":class:`Element` instance and a dictionary." +msgstr "" +"根据一个字符串常量解析 XML 的节,并且还将返回一个将元素的 id:s 映射到元素的字典。 *text* 是包含 XML 数据的字符串。 " +"*parser* 是可选的解析器实例。 如果未给出,则会使用标准的 :class:`XMLParser` 解析器。 返回一个包含 " +":class:`Element` 实例和字典的元组。" + +#: ../../library/xml.etree.elementtree.rst:750 +msgid "XInclude support" +msgstr "XInclude 支持" + +#: ../../library/xml.etree.elementtree.rst:752 +msgid "" +"This module provides limited support for `XInclude directives " +"`_, via the :mod:`xml.etree.ElementInclude`" +" helper module. This module can be used to insert subtrees and text strings" +" into element trees, based on information in the tree." +msgstr "" +"此模块通过 :mod:`xml.etree.ElementInclude` 辅助模块提供了对 `XInclude 指令 " +"`_ 的有限支持,这个模块可被用来根据元素树的信息在其中插入子树和文本字符串。" + +#: ../../library/xml.etree.elementtree.rst:758 +msgid "" +"Here's an example that demonstrates use of the XInclude module. To include " +"an XML document in the current document, use the " +"``{http://www.w3.org/2001/XInclude}include`` element and set the **parse** " +"attribute to ``\"xml\"``, and use the **href** attribute to specify the " +"document to include." +msgstr "" +"以下是一个演示 XInclude 模块用法的例子。 要在当前文本中包括一个 XML 文档,请使用 " +"``{http://www.w3.org/2001/XInclude}include`` 元素并将 **parse** 属性设为 " +"``\"xml\"``,并使用 **href** 属性来指定要包括的文档。" + +#: ../../library/xml.etree.elementtree.rst:767 +msgid "" +"By default, the **href** attribute is treated as a file name. You can use " +"custom loaders to override this behaviour. Also note that the standard " +"helper does not support XPointer syntax." +msgstr "" +"默认情况下,**href** 属性会被当作文件名来处理。 你可以使用自定义加载器来覆盖此行为。 还要注意标准辅助器不支持 XPointer 语法。" + +#: ../../library/xml.etree.elementtree.rst:769 +msgid "" +"To process this file, load it as usual, and pass the root element to the " +":mod:`xml.etree.ElementTree` module:" +msgstr "要处理这个文件,请正常加载它,并将根元素传给 :mod:`xml.etree.ElementTree` 模块:" + +#: ../../library/xml.etree.elementtree.rst:780 +msgid "" +"The ElementInclude module replaces the " +"``{http://www.w3.org/2001/XInclude}include`` element with the root element " +"from the **source.xml** document. The result might look something like this:" +msgstr "" +"ElementInclude 模块使用来自 **source.xml** 文档的根元素替代 " +"``{http://www.w3.org/2001/XInclude}include`` 元素。 结果看起来大概是这样:" + +#: ../../library/xml.etree.elementtree.rst:788 +msgid "" +"If the **parse** attribute is omitted, it defaults to \"xml\". The href " +"attribute is required." +msgstr "如果省略了 **parse** 属性,它会取默认的 \"xml\"。 要求有 href 属性。" + +#: ../../library/xml.etree.elementtree.rst:790 +msgid "" +"To include a text document, use the " +"``{http://www.w3.org/2001/XInclude}include`` element, and set the **parse** " +"attribute to \"text\":" +msgstr "" +"要包括文本文档,请使用 ``{http://www.w3.org/2001/XInclude}include`` 元素,并将 **parse** " +"属性设为 \"text\":" + +#: ../../library/xml.etree.elementtree.rst:799 +msgid "The result might look something like:" +msgstr "结果可能如下所示:" + +#: ../../library/xml.etree.elementtree.rst:818 +msgid "" +"Default loader. This default loader reads an included resource from disk. " +"*href* is a URL. *parse* is for parse mode either \"xml\" or \"text\". " +"*encoding* is an optional text encoding. If not given, encoding is " +"``utf-8``. Returns the expanded resource. If the parse mode is " +"``\"xml\"``, this is an ElementTree instance. If the parse mode is " +"\"text\", this is a Unicode string. If the loader fails, it can return None" +" or raise an exception." +msgstr "" +"默认的加载器。 这个默认的加载器会从磁盘读取所包括的资源。 *href* 是一个 URL。 *parse* 是 \"xml\" 或 \"text\" " +"表示解析模式。 *encoding* 是可选的文本编码格式。 如果未给出,则编码格式为 ``utf-8``。 返回已扩展的资源。 如果解析模式为 " +"``\"xml\"``,则它是一个 ElementTree 实例。 如果解析模式为 \"text\",则它是一个 Unicode 字符串。 " +"如果加载器失败,它可以返回 None 或者引发异常。" + +#: ../../library/xml.etree.elementtree.rst:830 +msgid "" +"This function expands XInclude directives. *elem* is the root element. " +"*loader* is an optional resource loader. If omitted, it defaults to " +":func:`default_loader`. If given, it should be a callable that implements " +"the same interface as :func:`default_loader`. *base_url* is base URL of the" +" original file, to resolve relative include file references. *max_depth* is" +" the maximum number of recursive inclusions. Limited to reduce the risk of " +"malicious content explosion. Pass a negative value to disable the " +"limitation." +msgstr "" +"这个函数会扩展 XInclude 指令。 *elem* 是根元素。 *loader* 是可选的资源加载器。 如果省略,则它默认为 " +":func:`default_loader`。 如果给出,则它应当是一个实现了与 :func:`default_loader` 相同的接口的可调用对象。" +" *base_url* 是原文件的基准 URL,用于求解相对的包括文件引用。 *max_depth* 是递归包括的最大数量。 " +"此限制是为了降低恶意内容爆破的风险。 传入一个负值可禁用此限制。" + +#: ../../library/xml.etree.elementtree.rst:838 +msgid "" +"Returns the expanded resource. If the parse mode is ``\"xml\"``, this is an" +" ElementTree instance. If the parse mode is \"text\", this is a Unicode " +"string. If the loader fails, it can return None or raise an exception." +msgstr "" +"返回已扩展的资源。 如果解析模式为 ``\"xml\"``,则它是一个 ElementTree 实例。 如果解析模式为 \"text\",则它是一个 " +"Unicode 字符串。 如果加载器失败,它可以返回 None 或者引发异常。" + +#: ../../library/xml.etree.elementtree.rst:843 +msgid "The *base_url* and *max_depth* parameters." +msgstr "*base_url* 和 *max_depth* 形参。" + +#: ../../library/xml.etree.elementtree.rst:850 +msgid "Element Objects" +msgstr "元素对象" + +#: ../../library/xml.etree.elementtree.rst:854 +msgid "" +"Element class. This class defines the Element interface, and provides a " +"reference implementation of this interface." +msgstr "元素类。 这个类定义了 Element 接口,并提供了这个接口的引用实现。" + +#: ../../library/xml.etree.elementtree.rst:857 +msgid "" +"The element name, attribute names, and attribute values can be either " +"bytestrings or Unicode strings. *tag* is the element name. *attrib* is an " +"optional dictionary, containing element attributes. *extra* contains " +"additional attributes, given as keyword arguments." +msgstr "" +"元素名、属性名和属性值可以是字节串或 Unicode 字符串。 *tag* 是元素名。 *attrib* 是一个可选的字典,其中包含元素属性。 " +"*extra* 包含额外的属性,以关键字参数形式给出。" + +#: ../../library/xml.etree.elementtree.rst:865 +msgid "" +"A string identifying what kind of data this element represents (the element " +"type, in other words)." +msgstr "一个标识此元素意味着何种数据的字符串(换句话说,元素类型)。" + +#: ../../library/xml.etree.elementtree.rst:872 +msgid "" +"These attributes can be used to hold additional data associated with the " +"element. Their values are usually strings but may be any application-" +"specific object. If the element is created from an XML file, the *text* " +"attribute holds either the text between the element's start tag and its " +"first child or end tag, or ``None``, and the *tail* attribute holds either " +"the text between the element's end tag and the next tag, or ``None``. For " +"the XML data" +msgstr "" +"这些属性可被用于存放与元素相关联的额外数据。 它们的值通常为字符串但也可以是任何应用专属的对象。 如果元素是基于 XML 文件创建的,*text* " +"属性会存放元素的开始标记及其第一个子元素或结束标记之间的文本,或者为 ``None``,而 *tail* " +"属性会存放元素的结束标记及下一个标记之间的文本,或者为 ``None``。 对于 XML 数据" + +#: ../../library/xml.etree.elementtree.rst:884 +msgid "" +"the *a* element has ``None`` for both *text* and *tail* attributes, the *b* " +"element has *text* ``\"1\"`` and *tail* ``\"4\"``, the *c* element has " +"*text* ``\"2\"`` and *tail* ``None``, and the *d* element has *text* " +"``None`` and *tail* ``\"3\"``." +msgstr "" +"*a* 元素的 *text* 和 *tail* 属性均为 ``None``,*b* 元素的 *text* 为 ``\"1\"`` 而 *tail* 为 " +"``\"4\"``,*c* 元素的 *text* 为 ``\"2\"`` 而 *tail* 为 ``None``,*d* 元素的 *text* 为 " +"``None`` 而 *tail* 为 ``\"3\"``。" + +#: ../../library/xml.etree.elementtree.rst:889 +msgid "" +"To collect the inner text of an element, see :meth:`itertext`, for example " +"``\"\".join(element.itertext())``." +msgstr "要获取一个元素的内部文本,请参阅 :meth:`itertext`,例如 ``\"\".join(element.itertext())``。" + +#: ../../library/xml.etree.elementtree.rst:892 +msgid "Applications may store arbitrary objects in these attributes." +msgstr "应用程序可以将任意对象存入这些属性。" + +#: ../../library/xml.etree.elementtree.rst:897 +msgid "" +"A dictionary containing the element's attributes. Note that while the " +"*attrib* value is always a real mutable Python dictionary, an ElementTree " +"implementation may choose to use another internal representation, and create" +" the dictionary only if someone asks for it. To take advantage of such " +"implementations, use the dictionary methods below whenever possible." +msgstr "" +"一个包含元素属性的字典。 请注意虽然 *attrib* 值总是一个真正可变的 Python 字典,但 ElementTree " +"实现可以选择其他内部表示形式,并只在有需要时才创建字典。 为了发挥这种实现的优势,请在任何可能情况下使用下列字典方法。" + +#: ../../library/xml.etree.elementtree.rst:903 +msgid "The following dictionary-like methods work on the element attributes." +msgstr "以下字典类方法作用于元素属性。" + +#: ../../library/xml.etree.elementtree.rst:908 +msgid "" +"Resets an element. This function removes all subelements, clears all " +"attributes, and sets the text and tail attributes to ``None``." +msgstr "重设一个元素。 此方法会移除所有子元素,清空所有属性,并将 text 和 tail 属性设为 ``None``。" + +#: ../../library/xml.etree.elementtree.rst:914 +msgid "Gets the element attribute named *key*." +msgstr "获取名为 *key* 的元素属性。" + +#: ../../library/xml.etree.elementtree.rst:916 +msgid "" +"Returns the attribute value, or *default* if the attribute was not found." +msgstr "返回属性的值,或者如果属性未找到则返回 *default*。" + +#: ../../library/xml.etree.elementtree.rst:921 +msgid "" +"Returns the element attributes as a sequence of (name, value) pairs. The " +"attributes are returned in an arbitrary order." +msgstr "将元素属性以 (name, value) 对序列的形式返回。 所返回属性的顺序任意。" + +#: ../../library/xml.etree.elementtree.rst:927 +msgid "" +"Returns the elements attribute names as a list. The names are returned in " +"an arbitrary order." +msgstr "将元素属性名称以列表的形式返回。 所返回名称的顺序任意。" + +#: ../../library/xml.etree.elementtree.rst:933 +msgid "Set the attribute *key* on the element to *value*." +msgstr "将元素的 *key* 属性设为 *value*。" + +#: ../../library/xml.etree.elementtree.rst:935 +msgid "The following methods work on the element's children (subelements)." +msgstr "以下方法作用于元素的下级(子元素)。" + +#: ../../library/xml.etree.elementtree.rst:940 +msgid "" +"Adds the element *subelement* to the end of this element's internal list of " +"subelements. Raises :exc:`TypeError` if *subelement* is not an " +":class:`Element`." +msgstr "" +"将元素 *subelement* 添加到此元素的子元素内部列表。 如果 *subelement* 不是一个 :class:`Element` 则会引发 " +":exc:`TypeError`。" + +#: ../../library/xml.etree.elementtree.rst:947 +msgid "" +"Appends *subelements* from a sequence object with zero or more elements. " +"Raises :exc:`TypeError` if a subelement is not an :class:`Element`." +msgstr "" +"使用具有零个或多个元素的序列对象添加 *subelements*。 如果某个子元素不是 :class:`Element` 则会引发 " +":exc:`TypeError`。" + +#: ../../library/xml.etree.elementtree.rst:955 +msgid "" +"Finds the first subelement matching *match*. *match* may be a tag name or a" +" :ref:`path `. Returns an element instance or ``None``." +" *namespaces* is an optional mapping from namespace prefix to full name. " +"Pass ``''`` as prefix to move all unprefixed tag names in the expression " +"into the given namespace." +msgstr "" +"查找第一个匹配 *match* 的子元素。 *match* 可以是一个标记名称或者 :ref:`路径 `。 " +"返回一个元素实例或 ``None``。 *namespaces* 是可选的从命名空间前缀到完整名称的映射。 传入 ``''`` " +"作为前缀可将表达式中所有无前缀的标记名称移动到给定的命名空间。" + +#: ../../library/xml.etree.elementtree.rst:964 +msgid "" +"Finds all matching subelements, by tag name or :ref:`path `. Returns a list containing all matching elements in document order." +" *namespaces* is an optional mapping from namespace prefix to full name. " +"Pass ``''`` as prefix to move all unprefixed tag names in the expression " +"into the given namespace." +msgstr "" +"根据标记名称或者 :ref:`路径 ` 查找所有匹配的子元素。 返回一个包含所有匹配元素按文档顺序排序的列表。 " +"*namespaces* 是可选的从命名空间前缀到完整名称的映射。 传入 ``''`` 作为前缀可将表达式中所有无前缀的标记名称移动到给定的命名空间。" + +#: ../../library/xml.etree.elementtree.rst:973 +msgid "" +"Finds text for the first subelement matching *match*. *match* may be a tag " +"name or a :ref:`path `. Returns the text content of the " +"first matching element, or *default* if no element was found. Note that if " +"the matching element has no text content an empty string is returned. " +"*namespaces* is an optional mapping from namespace prefix to full name. " +"Pass ``''`` as prefix to move all unprefixed tag names in the expression " +"into the given namespace." +msgstr "" +"查找第一个匹配 *match* 的子元素的文本。 *match* 可以是一个标记名称或者 :ref:`路径 `。 " +"反回第一个匹配的元素的文本内容,或者如果元素未找到则返回 *default*。 请注意如果匹配的元素没有文本内容则会返回一个空字符串。 " +"*namespaces* 是可选的从命名空间前缀到完整名称的映射。 传入 ``''`` 作为前缀可将表达式中所有无前缀的标记名称移动到给定的命名空间。" + +#: ../../library/xml.etree.elementtree.rst:984 +msgid "" +"Inserts *subelement* at the given position in this element. Raises " +":exc:`TypeError` if *subelement* is not an :class:`Element`." +msgstr "" +"将 *subelement* 插入到此元素的给定位置中。 如果 *subelement* 不是一个 :class:`Element` 则会引发 " +":exc:`TypeError`。" + +#: ../../library/xml.etree.elementtree.rst:990 +msgid "" +"Creates a tree :term:`iterator` with the current element as the root. The " +"iterator iterates over this element and all elements below it, in document " +"(depth first) order. If *tag* is not ``None`` or ``'*'``, only elements " +"whose tag equals *tag* are returned from the iterator. If the tree " +"structure is modified during iteration, the result is undefined." +msgstr "" +"创建一个以当前元素为根元素的树的 :term:`iterator`。 该迭代器将以文档(深度优先)顺序迭代此元素及其所有下级元素。 如果 *tag* " +"不为 ``None`` 或 ``'*'``,则迭代器只返回标记为 *tag* 的元素。 如果树结构在迭代期间被修改,则结果是未定义的。" + +#: ../../library/xml.etree.elementtree.rst:1001 +msgid "" +"Finds all matching subelements, by tag name or :ref:`path `. Returns an iterable yielding all matching elements in document " +"order. *namespaces* is an optional mapping from namespace prefix to full " +"name." +msgstr "" +"根据标记名称或者 :ref:`路径 ` 查找所有匹配的子元素。 返回一个按文档顺序产生所有匹配元素的可迭代对象。 " +"*namespaces* 是可选的从命名空间前缀到完整名称的映射。" + +#: ../../library/xml.etree.elementtree.rst:1012 +msgid "" +"Creates a text iterator. The iterator loops over this element and all " +"subelements, in document order, and returns all inner text." +msgstr "创建一个文本迭代器。 该迭代器将按文档顺序遍历此元素及其所有子元素,并返回所有内部文本。" + +#: ../../library/xml.etree.elementtree.rst:1020 +msgid "" +"Creates a new element object of the same type as this element. Do not call " +"this method, use the :func:`SubElement` factory function instead." +msgstr "创建一个与此元素类型相同的新元素对象。 请不要调用此方法,而应改用 :func:`SubElement` 工厂函数。" + +#: ../../library/xml.etree.elementtree.rst:1026 +msgid "" +"Removes *subelement* from the element. Unlike the find\\* methods this " +"method compares elements based on the instance identity, not on tag value or" +" contents." +msgstr "从元素中移除 *subelement*。 与 find\\* 方法不同的是此方法会基于实例的标识来比较元素,而不是基于标记的值或内容。" + +#: ../../library/xml.etree.elementtree.rst:1030 +msgid "" +":class:`Element` objects also support the following sequence type methods " +"for working with subelements: :meth:`~object.__delitem__`, " +":meth:`~object.__getitem__`, :meth:`~object.__setitem__`, " +":meth:`~object.__len__`." +msgstr "" +":class:`Element` 对象还支持下列序列类型方法以配合子元素使用: :meth:`~object.__delitem__`, " +":meth:`~object.__getitem__`, :meth:`~object.__setitem__`, " +":meth:`~object.__len__`。" + +#: ../../library/xml.etree.elementtree.rst:1035 +msgid "" +"Caution: Elements with no subelements will test as ``False``. This behavior" +" will change in future versions. Use specific ``len(elem)`` or ``elem is " +"None`` test instead. ::" +msgstr "" +"注意:不带子元素的元素将被检测为 ``False``。 此行为将在未来的版本中发生变化。 请改用 ``len(elem)`` 或 ``elem is " +"None`` 进行检测。 ::" + +#: ../../library/xml.etree.elementtree.rst:1047 +msgid "" +"Prior to Python 3.8, the serialisation order of the XML attributes of " +"elements was artificially made predictable by sorting the attributes by " +"their name. Based on the now guaranteed ordering of dicts, this arbitrary " +"reordering was removed in Python 3.8 to preserve the order in which " +"attributes were originally parsed or created by user code." +msgstr "" +"在 Python 3.8 之前,元素的 XML 属性的序列化顺序会通过按其名称排序来强制使其可被预期。 由于现在字典已保证是有序的,这个强制重排序在 " +"Python 3.8 中已被移除以保留原本由用户代码解析或创建的属性顺序。" + +#: ../../library/xml.etree.elementtree.rst:1053 +msgid "" +"In general, user code should try not to depend on a specific ordering of " +"attributes, given that the `XML Information Set `_ explicitly excludes the attribute order from conveying " +"information. Code should be prepared to deal with any ordering on input. In " +"cases where deterministic XML output is required, e.g. for cryptographic " +"signing or test data sets, canonical serialisation is available with the " +":func:`canonicalize` function." +msgstr "" +"通常,用户代码应当尽量不依赖于特定的属性顺序,因为 `XML 信息设定 `_ " +"明确地排除了用属性顺序转递信息的做法。 代码应当准备好处理任何输入顺序。 对于要求确定性的 XML " +"输出的情况,例如加密签名或检测数据集等,可以通过规范化 :func:`canonicalize` 函数来进行传统的序列化。" + +#: ../../library/xml.etree.elementtree.rst:1061 +msgid "" +"In cases where canonical output is not applicable but a specific attribute " +"order is still desirable on output, code should aim for creating the " +"attributes directly in the desired order, to avoid perceptual mismatches for" +" readers of the code. In cases where this is difficult to achieve, a recipe " +"like the following can be applied prior to serialisation to enforce an order" +" independently from the Element creation::" +msgstr "" +"对于规范化输出不可用但仍然要求输出特定属性顺序的情况,代码应当设法直接按要求的顺序来创建属性,以避免代码阅读者产生不匹配的感觉。 " +"如果这一点是难以做到的,可以在序列化之前应用以下写法来强制实现顺序不依赖于元素的创建::" + +#: ../../library/xml.etree.elementtree.rst:1081 +msgid "ElementTree Objects" +msgstr "ElementTree 对象" + +#: ../../library/xml.etree.elementtree.rst:1086 +msgid "" +"ElementTree wrapper class. This class represents an entire element " +"hierarchy, and adds some extra support for serialization to and from " +"standard XML." +msgstr "ElementTree 包装器类。 这个类表示一个完整的元素层级结构,并添加了一些对于标准 XML 序列化的额外支持。" + +#: ../../library/xml.etree.elementtree.rst:1090 +msgid "" +"*element* is the root element. The tree is initialized with the contents of" +" the XML *file* if given." +msgstr "*element* 是根元素。 如果给出 XML *file* 则将使用其内容来初始化树结构。" + +#: ../../library/xml.etree.elementtree.rst:1096 +msgid "" +"Replaces the root element for this tree. This discards the current contents" +" of the tree, and replaces it with the given element. Use with care. " +"*element* is an element instance." +msgstr "替换该树结构的根元素。 这将丢弃该树结构的当前内容,并将其替换为给定的元素。 请小心使用。 *element* 是一个元素实例。" + +#: ../../library/xml.etree.elementtree.rst:1103 +msgid "Same as :meth:`Element.find`, starting at the root of the tree." +msgstr "与 :meth:`Element.find` 类似,从树的根节点开始。" + +#: ../../library/xml.etree.elementtree.rst:1108 +msgid "Same as :meth:`Element.findall`, starting at the root of the tree." +msgstr "与 :meth:`Element.findall` 类似,从树的根节点开始。" + +#: ../../library/xml.etree.elementtree.rst:1113 +msgid "Same as :meth:`Element.findtext`, starting at the root of the tree." +msgstr "与 :meth:`Element.findtext` 类似,从树的根节点开始。" + +#: ../../library/xml.etree.elementtree.rst:1118 +msgid "Returns the root element for this tree." +msgstr "返回这个树的根元素。" + +#: ../../library/xml.etree.elementtree.rst:1123 +msgid "" +"Creates and returns a tree iterator for the root element. The iterator " +"loops over all elements in this tree, in section order. *tag* is the tag to" +" look for (default is to return all elements)." +msgstr "创建并返回根元素的树结构迭代器。 该迭代器会以节顺序遍历这个树的所有元素。 *tag* 是要查找的标记(默认返回所有元素)。" + +#: ../../library/xml.etree.elementtree.rst:1130 +msgid "Same as :meth:`Element.iterfind`, starting at the root of the tree." +msgstr "与 :meth:`Element.iterfind` 类似,从树的根节点开始。" + +#: ../../library/xml.etree.elementtree.rst:1137 +msgid "" +"Loads an external XML section into this element tree. *source* is a file " +"name or :term:`file object`. *parser* is an optional parser instance. If " +"not given, the standard :class:`XMLParser` parser is used. Returns the " +"section root element." +msgstr "" +"将一个外部 XML 节载入到此元素树。 *source* 是一个文件名或 :term:`file object`。 *parser* " +"是可选的解析器实例。 如果未给出,则会使用标准的 :class:`XMLParser` 解析器。 返回该节的根元素。" + +#: ../../library/xml.etree.elementtree.rst:1147 +msgid "" +"Writes the element tree to a file, as XML. *file* is a file name, or a " +":term:`file object` opened for writing. *encoding* [1]_ is the output " +"encoding (default is US-ASCII). *xml_declaration* controls if an XML " +"declaration should be added to the file. Use ``False`` for never, ``True`` " +"for always, ``None`` for only if not US-ASCII or UTF-8 or Unicode (default " +"is ``None``). *default_namespace* sets the default XML namespace (for " +"\"xmlns\"). *method* is either ``\"xml\"``, ``\"html\"`` or ``\"text\"`` " +"(default is ``\"xml\"``). The keyword-only *short_empty_elements* parameter " +"controls the formatting of elements that contain no content. If ``True`` " +"(the default), they are emitted as a single self-closed tag, otherwise they " +"are emitted as a pair of start/end tags." +msgstr "" +"将元素树以 XML 格式写入到文件。 *file* 为文件名,或是以写入模式打开的 :term:`file object`。 *encoding* " +"[1]_ 为输出编码格式 (默认为 US-ASCII)。 *xml_declaration* 控制是否要将 XML 声明添加到文件中。 使用 " +"``False`` 表示从不添加,``True`` 表示总是添加,``None`` 表示仅在非 US-ASCII 或 UTF-8 或 Unicode " +"时添加 (默认为 ``None``)。 *default_namespace* 设置默认 XML 命名空间 (用于 \"xmlns\")。 " +"*method* 为 ``\"xml\"``, ``\"html\"`` 或 ``\"text\"`` (默认为 ``\"xml\"``)。 " +"仅限关键字形参 *short_empty_elements* 控制不包含内容的元素的格式。 如为 ``True`` " +"(默认值),它们会被输出为单个自结束标记,否则它们会被输出为一对开始/结束标记。" + +#: ../../library/xml.etree.elementtree.rst:1161 +msgid "" +"The output is either a string (:class:`str`) or binary (:class:`bytes`). " +"This is controlled by the *encoding* argument. If *encoding* is " +"``\"unicode\"``, the output is a string; otherwise, it's binary. Note that " +"this may conflict with the type of *file* if it's an open :term:`file " +"object`; make sure you do not try to write a string to a binary stream and " +"vice versa." +msgstr "" +"输出是一个字符串 (:class:`str`) 或字节串 (:class:`bytes`)。 由*encoding* 参数来控制。 如果 " +"*encoding* 为 ``\"unicode\"``,则输出是一个字符串;否则为字节串;请注意这可能与 *file* " +"的类型相冲突,如果它是一个打开的 :term:`file object` 的话;请确保你不会试图写入字符串到二进制流或者反向操作。" + +#: ../../library/xml.etree.elementtree.rst:1171 +msgid "" +"The :meth:`write` method now preserves the attribute order specified by the " +"user." +msgstr ":meth:`write` 方法现在会保留用户指定的属性顺序。" + +#: ../../library/xml.etree.elementtree.rst:1176 +msgid "This is the XML file that is going to be manipulated::" +msgstr "这是将要被操作的 XML 文件::" + +#: ../../library/xml.etree.elementtree.rst:1188 +msgid "" +"Example of changing the attribute \"target\" of every link in first " +"paragraph::" +msgstr "修改第一段中的每个链接的 \"target\" 属性的示例::" + +#: ../../library/xml.etree.elementtree.rst:1207 +msgid "QName Objects" +msgstr "QName 对象" + +#: ../../library/xml.etree.elementtree.rst:1212 +msgid "" +"QName wrapper. This can be used to wrap a QName attribute value, in order " +"to get proper namespace handling on output. *text_or_uri* is a string " +"containing the QName value, in the form {uri}local, or, if the tag argument " +"is given, the URI part of a QName. If *tag* is given, the first argument is" +" interpreted as a URI, and this argument is interpreted as a local name. " +":class:`QName` instances are opaque." +msgstr "" +"QName 包装器。 这可被用来包装 QName 属性值,以便在输出中获得适当的命名空间处理。 *text_or_uri* 是一个包含 QName " +"值的字符串,其形式为 {uri}local,或者如果给出了 tag 参数,则为 QName 的 URI 部分。 如果给出了 " +"*tag*,则第一个参数会被解读为 URI,而这个参数会被解读为本地名称。 :class:`QName` 实例是不透明的。" + +#: ../../library/xml.etree.elementtree.rst:1224 +msgid "TreeBuilder Objects" +msgstr "TreeBuilder 对象" + +#: ../../library/xml.etree.elementtree.rst:1230 +msgid "" +"Generic element structure builder. This builder converts a sequence of " +"start, data, end, comment and pi method calls to a well-formed element " +"structure. You can use this class to build an element structure using a " +"custom XML parser, or a parser for some other XML-like format." +msgstr "" +"通用元素结构构建器。 此构建器会将包含 start, data, end, comment 和 pi 方法调用的序列转换为格式良好的元素结构。 " +"你可以通过这个类使用一个自定义 XML 解析器或其他 XML 类格式的解析器来构建元素结构。" + +#: ../../library/xml.etree.elementtree.rst:1235 +msgid "" +"*element_factory*, when given, must be a callable accepting two positional " +"arguments: a tag and a dict of attributes. It is expected to return a new " +"element instance." +msgstr "" +"如果给出 *element_factory*,它必须为接受两个位置参数的可调用对象:一个标记和一个属性字典。 它预期会返回一个新的元素实例。" + +#: ../../library/xml.etree.elementtree.rst:1239 +msgid "" +"The *comment_factory* and *pi_factory* functions, when given, should behave " +"like the :func:`Comment` and :func:`ProcessingInstruction` functions to " +"create comments and processing instructions. When not given, the default " +"factories will be used. When *insert_comments* and/or *insert_pis* is true," +" comments/pis will be inserted into the tree if they appear within the root " +"element (but not outside of it)." +msgstr "" +"如果给出 *comment_factory* 和 *pi_factory* 函数,它们的行为应当像 :func:`Comment` 和 " +":func:`ProcessingInstruction` 函数一样创建注释和处理指令。 如果未给出,则将使用默认工厂函数。 当 " +"*insert_comments* 和/或 *insert_pis* 为真值时,如果 comments/pis " +"在根元素之中(但不在其之外)出现则它们将被插入到树中。" + +#: ../../library/xml.etree.elementtree.rst:1248 +msgid "" +"Flushes the builder buffers, and returns the toplevel document element. " +"Returns an :class:`Element` instance." +msgstr "刷新构建器缓存,并返回最高层级的文档元素。 返回一个 :class:`Element` 实例。" + +#: ../../library/xml.etree.elementtree.rst:1254 +msgid "" +"Adds text to the current element. *data* is a string. This should be " +"either a bytestring, or a Unicode string." +msgstr "将文本添加到当前元素。 *data* 为要添加的文本。 这应当是一个字节串或 Unicode 字符串。" + +#: ../../library/xml.etree.elementtree.rst:1260 +msgid "" +"Closes the current element. *tag* is the element name. Returns the closed " +"element." +msgstr "关闭当前元素。 *tag* 是元素名称。 返回已关闭的元素。" + +#: ../../library/xml.etree.elementtree.rst:1266 +msgid "" +"Opens a new element. *tag* is the element name. *attrs* is a dictionary " +"containing element attributes. Returns the opened element." +msgstr "打开一个新元素。 *tag* 是元素名称。 *attrs* 是包含元素属性的字典。 返回打开的元素。" + +#: ../../library/xml.etree.elementtree.rst:1272 +msgid "" +"Creates a comment with the given *text*. If ``insert_comments`` is true, " +"this will also add it to the tree." +msgstr "使用给定的 *text* 创建一条注释。 如果 ``insert_comments`` 为真值,这还会将其添加到树结构中。" + +#: ../../library/xml.etree.elementtree.rst:1280 +msgid "" +"Creates a comment with the given *target* name and *text*. If " +"``insert_pis`` is true, this will also add it to the tree." +msgstr "使用给定的 *target* 名称和 *text* 创建一条注释。 如果 ``insert_pis`` 为真值,这还会将其添加到树结构中。" + +#: ../../library/xml.etree.elementtree.rst:1286 +msgid "" +"In addition, a custom :class:`TreeBuilder` object can provide the following " +"methods:" +msgstr "此外,自定义的 :class:`TreeBuilder` 对象还提供了以下方法:" + +#: ../../library/xml.etree.elementtree.rst:1291 +msgid "" +"Handles a doctype declaration. *name* is the doctype name. *pubid* is the " +"public identifier. *system* is the system identifier. This method does not" +" exist on the default :class:`TreeBuilder` class." +msgstr "" +"处理一条 doctype 声明。 *name* 为 doctype 名称。 *pubid* 为公有标识。 *system* 为系统标识。 " +"此方法不存在于默认的 :class:`TreeBuilder` 类中。" + +#: ../../library/xml.etree.elementtree.rst:1299 +msgid "" +"Is called whenever the parser encounters a new namespace declaration, before" +" the ``start()`` callback for the opening element that defines it. *prefix* " +"is ``''`` for the default namespace and the declared namespace prefix name " +"otherwise. *uri* is the namespace URI." +msgstr "" +"在定义了 ``start()`` 回调的打开元素的该回调被调用之前,当解析器遇到新的命名空间声明时都会被调用。 *prefix* 对于默认命名空间为 " +"``''`` 或者在其他情况下为被声明的命名空间前缀名称。 *uri* 是命名空间 URI。" + +#: ../../library/xml.etree.elementtree.rst:1308 +msgid "" +"Is called after the ``end()`` callback of an element that declared a " +"namespace prefix mapping, with the name of the *prefix* that went out of " +"scope." +msgstr "在声明了命名空间前缀映射的元素的 ``end()`` 回调之后被调用,附带超出作用域的 *prefix* 的名称。" + +#: ../../library/xml.etree.elementtree.rst:1320 +msgid "" +"A `C14N 2.0 `_ writer. Arguments are the " +"same as for the :func:`canonicalize` function. This class does not build a " +"tree but translates the callback events directly into a serialised form " +"using the *write* function." +msgstr "" +"`C14N 2.0 `_ 写入器。 其参数与 " +":func:`canonicalize` 函数的相同。 这个类并不会构建树结构而是使用 *write* 函数将回调事件直接转换为序列化形式。" + +#: ../../library/xml.etree.elementtree.rst:1331 +msgid "XMLParser Objects" +msgstr "XMLParser对象" + +#: ../../library/xml.etree.elementtree.rst:1336 +msgid "" +"This class is the low-level building block of the module. It uses " +":mod:`xml.parsers.expat` for efficient, event-based parsing of XML. It can " +"be fed XML data incrementally with the :meth:`feed` method, and parsing " +"events are translated to a push API - by invoking callbacks on the *target* " +"object. If *target* is omitted, the standard :class:`TreeBuilder` is used. " +"If *encoding* [1]_ is given, the value overrides the encoding specified in " +"the XML file." +msgstr "" +"这个类是此模块的低层级构建单元。 它使用 :mod:`xml.parsers.expat` 来实现高效、基于事件的 XML 解析。 它可以通过 " +":meth:`feed` 方法增量式地收受 XML 数据,并且解析事件会被转换为推送式 API —— 通过在 *target* 对象上发起对回调的调用。" +" 如果省略 *target*,则会使用标准的 :class:`TreeBuilder`。 如果给出了 *encoding* [1]_ ,该值将覆盖在 " +"XML 文件中指定的编码格式。" + +#: ../../library/xml.etree.elementtree.rst:1344 +msgid "" +"Parameters are now :ref:`keyword-only `. The *html* " +"argument no longer supported." +msgstr "所有形参现在都是 :ref:`仅限关键字形参 `。 *html* 参数不再受支持。" + +#: ../../library/xml.etree.elementtree.rst:1351 +msgid "" +"Finishes feeding data to the parser. Returns the result of calling the " +"``close()`` method of the *target* passed during construction; by default, " +"this is the toplevel document element." +msgstr "" +"结束向解析器提供数据。 返回调用在构造期间传入的 *target* 的 ``close()`` 方法的结果;在默认情况下,这是最高层级的文档元素。" + +#: ../../library/xml.etree.elementtree.rst:1358 +msgid "Feeds data to the parser. *data* is encoded data." +msgstr "将数据送入解析器。 *data* 是编码后的数据。" + +#: ../../library/xml.etree.elementtree.rst:1363 +#: ../../library/xml.etree.elementtree.rst:1441 +msgid "" +"Triggers parsing of any previously fed unparsed data, which can be used to " +"ensure more immediate feedback, in particular with Expat >=2.6.0. The " +"implementation of :meth:`flush` temporarily disables reparse deferral with " +"Expat (if currently enabled) and triggers a reparse. Disabling reparse " +"deferral has security consequences; please see " +":meth:`xml.parsers.expat.xmlparser.SetReparseDeferralEnabled` for details." +msgstr "" +"触发对之前送入的未解析数据的解析,这可被用于确保更为实时的反馈,尤其是对于 Expat >=2.6.0 的情况。 :meth:`flush` " +"的实现会暂时禁用 Expat 的重新解析延迟(如果当前已启用)并触发重新解析。 禁用重新解析延迟会带来安全性的影响;请参阅 " +":meth:`xml.parsers.expat.xmlparser.SetReparseDeferralEnabled` 了解详情。" + +#: ../../library/xml.etree.elementtree.rst:1370 +#: ../../library/xml.etree.elementtree.rst:1448 +msgid "" +"Note that :meth:`flush` has been backported to some prior releases of " +"CPython as a security fix. Check for availability of :meth:`flush` using " +":func:`hasattr` if used in code running across a variety of Python versions." +msgstr "" +"请注意 :meth:`flush` 已作为安全修正被向下移植到一些较早的 CPython 发布版。 如果在运行于多个 Python 版本的代码中要用到 " +":meth:`flush` 请使用 :func:`hasattr` 来检查其可用性。" + +#: ../../library/xml.etree.elementtree.rst:1378 +msgid "" +":meth:`XMLParser.feed` calls *target*\\'s ``start(tag, attrs_dict)`` method " +"for each opening tag, its ``end(tag)`` method for each closing tag, and data" +" is processed by method ``data(data)``. For further supported callback " +"methods, see the :class:`TreeBuilder` class. :meth:`XMLParser.close` calls " +"*target*\\'s method ``close()``. :class:`XMLParser` can be used not only for" +" building a tree structure. This is an example of counting the maximum depth" +" of an XML file::" +msgstr "" +":meth:`XMLParser.feed` 会为每个打开的标记调用 *target* 的 ``start(tag, attrs_dict)`` " +"方法,为每个关闭的标记调用它的 ``end(tag)`` 方法,并通过 ``data(data)`` 方法来处理数据。 有关更多受支持的回调方法,请参阅" +" :class:`TreeBuilder` 类。 :meth:`XMLParser.close` 会调用 *target* 的 ``close()``" +" 方法。 :class:`XMLParser` 不仅仅可被用来构建树结构。 下面是一个统计 XML 文件最大深度的示例::" + +#: ../../library/xml.etree.elementtree.rst:1422 +msgid "XMLPullParser Objects" +msgstr "XMLPullParser对象" + +#: ../../library/xml.etree.elementtree.rst:1426 +msgid "" +"A pull parser suitable for non-blocking applications. Its input-side API is" +" similar to that of :class:`XMLParser`, but instead of pushing calls to a " +"callback target, :class:`XMLPullParser` collects an internal list of parsing" +" events and lets the user read from it. *events* is a sequence of events to " +"report back. The supported events are the strings ``\"start\"``, " +"``\"end\"``, ``\"comment\"``, ``\"pi\"``, ``\"start-ns\"`` and ``\"end-" +"ns\"`` (the \"ns\" events are used to get detailed namespace information). " +"If *events* is omitted, only ``\"end\"`` events are reported." +msgstr "" +"适用于非阻塞应用程序的拉取式解析器。 它的输入侧 API 与 :class:`XMLParser` " +"的类似,但不是向回调目标推送调用,:class:`XMLPullParser` 会收集一个解析事件的内部列表并让用户来读取它。 *events* " +"是要报告的事件序列。 受支持的事件字符串有 ``\"start\"``, ``\"end\"``, ``\"comment\"``, " +"``\"pi\"``, ``\"start-ns\"`` 和 ``\"end-ns\"`` (\"ns\" 事件被用于获取详细的命名空间信息)。 如果 " +"*events* 被省略,则只报告 ``\"end\"`` 事件。" + +#: ../../library/xml.etree.elementtree.rst:1437 +msgid "Feed the given bytes data to the parser." +msgstr "将给定的字节数据送入解析器。" + +#: ../../library/xml.etree.elementtree.rst:1457 +msgid "" +"Signal the parser that the data stream is terminated. Unlike " +":meth:`XMLParser.close`, this method always returns :const:`None`. Any " +"events not yet retrieved when the parser is closed can still be read with " +":meth:`read_events`." +msgstr "" +"通知解析器数据流已终结。 不同于 :meth:`XMLParser.close`,此方法总是返回 :const:`None`。 " +"当解析器被关闭时任何还未被获取的事件仍可通过 :meth:`read_events` 被读取。" + +#: ../../library/xml.etree.elementtree.rst:1464 +msgid "" +"Return an iterator over the events which have been encountered in the data " +"fed to the parser. The iterator yields ``(event, elem)`` pairs, where " +"*event* is a string representing the type of event (e.g. ``\"end\"``) and " +"*elem* is the encountered :class:`Element` object, or other context value as" +" follows." +msgstr "" +"返回包含在送入解析器的数据中遇到的事件的迭代器。 此迭代器会产生 ``(event, elem)`` 对,其中 *event* 是代表事件类型的字符串 " +"(例如 ``\"end\"``) 而 *elem* 是遇到的 :class:`Element` 对象,或者以下的其他上下文值。" + +#: ../../library/xml.etree.elementtree.rst:1470 +msgid "``start``, ``end``: the current Element." +msgstr "``start``, ``end``: 当前元素。" + +#: ../../library/xml.etree.elementtree.rst:1471 +msgid "``comment``, ``pi``: the current comment / processing instruction" +msgstr "``comment``, ``pi``: 当前注释 / 处理指令" + +#: ../../library/xml.etree.elementtree.rst:1472 +msgid "" +"``start-ns``: a tuple ``(prefix, uri)`` naming the declared namespace " +"mapping." +msgstr "``start-ns``: 一个指定所声明命名空间映射的元组 ``(prefix, uri)``。" + +#: ../../library/xml.etree.elementtree.rst:1474 +msgid "``end-ns``: :const:`None` (this may change in a future version)" +msgstr "``end-ns``: :const:`None` (这可能在未来版本中改变)" + +#: ../../library/xml.etree.elementtree.rst:1476 +msgid "" +"Events provided in a previous call to :meth:`read_events` will not be " +"yielded again. Events are consumed from the internal queue only when they " +"are retrieved from the iterator, so multiple readers iterating in parallel " +"over iterators obtained from :meth:`read_events` will have unpredictable " +"results." +msgstr "" +"在之前对 :meth:`read_events` 的调用中提供的事件将不会被再次产生。 " +"事件仅当它们从迭代器中被取出时才会在内部队列中被消费,因此多个读取方对获取自 :meth:`read_events` " +"的迭代器进行平行迭代将产生无法预料的结果。" + +#: ../../library/xml.etree.elementtree.rst:1484 +msgid "" +":class:`XMLPullParser` only guarantees that it has seen the \">\" character " +"of a starting tag when it emits a \"start\" event, so the attributes are " +"defined, but the contents of the text and tail attributes are undefined at " +"that point. The same applies to the element children; they may or may not " +"be present." +msgstr "" +":class:`XMLPullParser` 只会确保当发出 \"start\" 事件时看到了开始标记的 \">\" " +"字符,因而在这个点上属性已被定义,但文本内容和末尾属性还未被定义。 这同样适用于元素的下级;它们可能存在也可能不存在。" + +#: ../../library/xml.etree.elementtree.rst:1499 +msgid "Exceptions" +msgstr "异常" + +#: ../../library/xml.etree.elementtree.rst:1503 +msgid "" +"XML parse error, raised by the various parsing methods in this module when " +"parsing fails. The string representation of an instance of this exception " +"will contain a user-friendly error message. In addition, it will have the " +"following attributes available:" +msgstr "" +"XML 解析器错误,由此模块中的多个解析方法在解析失败时引发。 此异常的实例的字符串表示将包含用户友好的错误消息。 此外,它将具有下列可用属性:" + +#: ../../library/xml.etree.elementtree.rst:1510 +msgid "" +"A numeric error code from the expat parser. See the documentation of " +":mod:`xml.parsers.expat` for the list of error codes and their meanings." +msgstr "来自外部解析器的数字错误代码。 请参阅 :mod:`xml.parsers.expat` 的文档查看错误代码列表及它们的含义。" + +#: ../../library/xml.etree.elementtree.rst:1515 +msgid "" +"A tuple of *line*, *column* numbers, specifying where the error occurred." +msgstr "一个包含 *line*, *column* 数值的元组,指明错误发生的位置。" + +#: ../../library/xml.etree.elementtree.rst:1518 +msgid "Footnotes" +msgstr "备注" + +#: ../../library/xml.etree.elementtree.rst:1519 +msgid "" +"The encoding string included in XML output should conform to the appropriate" +" standards. For example, \"UTF-8\" is valid, but \"UTF8\" is not. See " +"https://www.w3.org/TR/2006/REC-xml11-20060816/#NT-EncodingDecl and " +"https://www.iana.org/assignments/character-sets/character-sets.xhtml." +msgstr "" +"包括在 XML 输出中的编码格式字符串应当符合适当的标准。 例如 \"UTF-8\" 是有效的,但 \"UTF8\" 是无效的。 请参阅 " +"https://www.w3.org/TR/2006/REC-xml11-20060816/#NT-EncodingDecl 和 " +"https://www.iana.org/assignments/character-sets/character-sets.xhtml。" diff --git a/library/xml.po b/library/xml.po new file mode 100644 index 000000000..b1e313a79 --- /dev/null +++ b/library/xml.po @@ -0,0 +1,329 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) 2001-2024, Python Software Foundation +# This file is distributed under the same license as the Python package. +# FIRST AUTHOR , YEAR. +# +# Translators: +# 汇民 王 , 2019 +# Rafael Fontenelle , 2023 +# Freesand Leo , 2024 +# +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: Python 3.9\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2024-02-23 21:32+0000\n" +"PO-Revision-Date: 2017-02-16 23:36+0000\n" +"Last-Translator: Freesand Leo , 2024\n" +"Language-Team: Chinese (China) (https://app.transifex.com/python-doc/teams/5390/zh_CN/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: zh_CN\n" +"Plural-Forms: nplurals=1; plural=0;\n" + +#: ../../library/xml.rst:4 +msgid "XML Processing Modules" +msgstr "XML处理模块" + +#: ../../library/xml.rst:12 +msgid "**Source code:** :source:`Lib/xml/`" +msgstr "**源码:** :source:`Lib/xml/`" + +#: ../../library/xml.rst:16 +msgid "" +"Python's interfaces for processing XML are grouped in the ``xml`` package." +msgstr "用于处理XML的Python接口分组在 ``xml`` 包中。" + +#: ../../library/xml.rst:20 +msgid "" +"The XML modules are not secure against erroneous or maliciously constructed " +"data. If you need to parse untrusted or unauthenticated data see the " +":ref:`xml-vulnerabilities` and :ref:`defusedxml-package` sections." +msgstr "" +"XML 模块对于错误或恶意构造的数据是不安全的。 如果你需要解析不受信任或未经身份验证的数据,请参阅 :ref:`xml-" +"vulnerabilities` 和 :ref:`defusedxml-package` 部分。" + +#: ../../library/xml.rst:25 +msgid "" +"It is important to note that modules in the :mod:`xml` package require that " +"there be at least one SAX-compliant XML parser available. The Expat parser " +"is included with Python, so the :mod:`xml.parsers.expat` module will always " +"be available." +msgstr "" +"值得注意的是 :mod:`xml` 包中的模块要求至少有一个 SAX 兼容的 XML 解析器可用。在 Python 中包含 Expat 解析器,因此 " +":mod:`xml.parsers.expat` 模块将始终可用。" + +#: ../../library/xml.rst:30 +msgid "" +"The documentation for the :mod:`xml.dom` and :mod:`xml.sax` packages are the" +" definition of the Python bindings for the DOM and SAX interfaces." +msgstr ":mod:`xml.dom` 和 :mod:`xml.sax` 包的文档是 DOM 和 SAX 接口的 Python 绑定的定义。" + +#: ../../library/xml.rst:33 +msgid "The XML handling submodules are:" +msgstr "XML 处理子模块包括:" + +#: ../../library/xml.rst:35 +msgid "" +":mod:`xml.etree.ElementTree`: the ElementTree API, a simple and lightweight " +"XML processor" +msgstr ":mod:`xml.etree.ElementTree`: ElementTree API,一个简单而轻量级的XML处理器" + +#: ../../library/xml.rst:40 +msgid ":mod:`xml.dom`: the DOM API definition" +msgstr ":mod:`xml.dom`:DOM API 定义" + +#: ../../library/xml.rst:41 +msgid ":mod:`xml.dom.minidom`: a minimal DOM implementation" +msgstr ":mod:`xml.dom.minidom`:最小的 DOM 实现" + +#: ../../library/xml.rst:42 +msgid ":mod:`xml.dom.pulldom`: support for building partial DOM trees" +msgstr ":mod:`xml.dom.pulldom`:支持构建部分 DOM 树" + +#: ../../library/xml.rst:46 +msgid ":mod:`xml.sax`: SAX2 base classes and convenience functions" +msgstr ":mod:`xml.sax`:SAX2 基类和便利函数" + +#: ../../library/xml.rst:47 +msgid ":mod:`xml.parsers.expat`: the Expat parser binding" +msgstr ":mod:`xml.parsers.expat`:Expat解析器绑定" + +#: ../../library/xml.rst:53 +msgid "XML vulnerabilities" +msgstr "XML 漏洞" + +#: ../../library/xml.rst:55 +msgid "" +"The XML processing modules are not secure against maliciously constructed " +"data. An attacker can abuse XML features to carry out denial of service " +"attacks, access local files, generate network connections to other machines," +" or circumvent firewalls." +msgstr "" +"XML 处理模块对于恶意构造的数据是不安全的。 攻击者可能滥用 XML 功能来执行拒绝服务攻击、访问本地文件、生成与其它计算机的网络连接或绕过防火墙。" + +#: ../../library/xml.rst:60 +msgid "" +"The following table gives an overview of the known attacks and whether the " +"various modules are vulnerable to them." +msgstr "下表概述了已知的攻击以及各种模块是否容易受到攻击。" + +#: ../../library/xml.rst:64 +msgid "kind" +msgstr "种类" + +#: ../../library/xml.rst:64 +msgid "sax" +msgstr "sax" + +#: ../../library/xml.rst:64 +msgid "etree" +msgstr "etree" + +#: ../../library/xml.rst:64 +msgid "minidom" +msgstr "minidom" + +#: ../../library/xml.rst:64 +msgid "pulldom" +msgstr "pulldom" + +#: ../../library/xml.rst:64 +msgid "xmlrpc" +msgstr "xmlrpc" + +#: ../../library/xml.rst:66 +msgid "billion laughs" +msgstr "billion laughs" + +#: ../../library/xml.rst:66 ../../library/xml.rst:66 ../../library/xml.rst:66 +#: ../../library/xml.rst:66 ../../library/xml.rst:66 ../../library/xml.rst:67 +#: ../../library/xml.rst:67 ../../library/xml.rst:67 ../../library/xml.rst:67 +#: ../../library/xml.rst:67 +msgid "**Vulnerable** (1)" +msgstr "**易受攻击** (1)" + +#: ../../library/xml.rst:67 +msgid "quadratic blowup" +msgstr "quadratic blowup" + +#: ../../library/xml.rst:68 ../../library/xml.rst:109 +msgid "external entity expansion" +msgstr "external entity expansion" + +#: ../../library/xml.rst:68 ../../library/xml.rst:68 ../../library/xml.rst:69 +#: ../../library/xml.rst:69 +msgid "Safe (5)" +msgstr "安全 (5)" + +#: ../../library/xml.rst:68 +msgid "Safe (2)" +msgstr "安全 (2)" + +#: ../../library/xml.rst:68 +msgid "Safe (3)" +msgstr "安全 (3)" + +#: ../../library/xml.rst:68 +msgid "Safe (4)" +msgstr "安全 (4)" + +#: ../../library/xml.rst:69 ../../library/xml.rst:114 +msgid "`DTD`_ retrieval" +msgstr "`DTD`_ retrieval" + +#: ../../library/xml.rst:69 ../../library/xml.rst:69 ../../library/xml.rst:69 +#: ../../library/xml.rst:70 ../../library/xml.rst:70 ../../library/xml.rst:70 +#: ../../library/xml.rst:70 +msgid "Safe" +msgstr "安全" + +#: ../../library/xml.rst:70 ../../library/xml.rst:121 +msgid "decompression bomb" +msgstr "decompression bomb" + +#: ../../library/xml.rst:70 +msgid "**Vulnerable**" +msgstr "**易受攻击**" + +#: ../../library/xml.rst:71 ../../library/xml.rst:128 +msgid "large tokens" +msgstr "解析大量词元" + +#: ../../library/xml.rst:71 ../../library/xml.rst:71 ../../library/xml.rst:71 +#: ../../library/xml.rst:71 ../../library/xml.rst:71 +msgid "**Vulnerable** (6)" +msgstr "**易受攻击** (6)" + +#: ../../library/xml.rst:74 +msgid "" +"Expat 2.4.1 and newer is not vulnerable to the \"billion laughs\" and " +"\"quadratic blowup\" vulnerabilities. Items still listed as vulnerable due " +"to potential reliance on system-provided libraries. Check " +":data:`pyexpat.EXPAT_VERSION`." +msgstr "" +"Expat 2.4.1 及更新的版本不易受 \"billion laughs\" 和 \"quadratic blowup\" 漏洞的攻击。 " +"因为可能要依赖系统提供的库而仍被列为易受攻击的项目。 请检查 :data:`pyexpat.EXPAT_VERSION`。" + +#: ../../library/xml.rst:78 +msgid "" +":mod:`xml.etree.ElementTree` doesn't expand external entities and raises a " +":exc:`ParserError` when an entity occurs." +msgstr ":mod:`xml.etree.ElementTree` 不会扩展外部实体并在实体发生时引发 :exc:`ParserError`。" + +#: ../../library/xml.rst:80 +msgid "" +":mod:`xml.dom.minidom` doesn't expand external entities and simply returns " +"the unexpanded entity verbatim." +msgstr ":mod:`xml.dom.minidom` 不会扩展外部实体,只是简单地返回未扩展的实体。" + +#: ../../library/xml.rst:82 +msgid ":mod:`xmlrpclib` doesn't expand external entities and omits them." +msgstr ":mod:`xmlrpclib` 不扩展外部实体并省略它们。" + +#: ../../library/xml.rst:83 +msgid "" +"Since Python 3.7.1, external general entities are no longer processed by " +"default." +msgstr "从 Python 3.7.1 开始,默认情况下不再处理外部通用实体。" + +#: ../../library/xml.rst:85 +msgid "" +"Expat 2.6.0 and newer is not vulnerable to denial of service through " +"quadratic runtime caused by parsing large tokens. Items still listed as " +"vulnerable due to potential reliance on system-provided libraries. Check " +":const:`!pyexpat.EXPAT_VERSION`." +msgstr "" +"Expat 2.6.0 及更新的版本不易受到因解析大量词元而导致利用指数级运行时间的拒绝服务攻击。 " +"由于对系统所提供的库的潜在依赖仍会有一些项目被列为易受攻击。 请检查 :const:`!pyexpat.EXPAT_VERSION`。" + +#: ../../library/xml.rst:97 +msgid "billion laughs / exponential entity expansion" +msgstr "billion laughs / exponential entity expansion (狂笑/递归实体扩展)" + +#: ../../library/xml.rst:93 +msgid "" +"The `Billion Laughs`_ attack -- also known as exponential entity expansion " +"-- uses multiple levels of nested entities. Each entity refers to another " +"entity several times, and the final entity definition contains a small " +"string. The exponential expansion results in several gigabytes of text and " +"consumes lots of memory and CPU time." +msgstr "" +"`Billion Laughs`_ 攻击 -- 也称为递归实体扩展 -- 使用多级嵌套实体。 每个实体多次引用另一个实体,最终实体定义包含一个小字符串。" +" 指数级扩展导致几千 GB 的文本,并消耗大量内存和 CPU 时间。" + +#: ../../library/xml.rst:104 +msgid "quadratic blowup entity expansion" +msgstr "quadratic blowup entity expansion(二次爆炸实体扩展)" + +#: ../../library/xml.rst:100 +msgid "" +"A quadratic blowup attack is similar to a `Billion Laughs`_ attack; it " +"abuses entity expansion, too. Instead of nested entities it repeats one " +"large entity with a couple of thousand chars over and over again. The attack" +" isn't as efficient as the exponential case but it avoids triggering parser " +"countermeasures that forbid deeply-nested entities." +msgstr "" +"二次爆炸攻击类似于 `Billion Laughs`_ 攻击,它也滥用实体扩展。 " +"它不是嵌套实体,而是一遍又一遍地重复一个具有几千个字符的大型实体。攻击不如递归情况有效,但它避免触发禁止深度嵌套实体的解析器对策。" + +#: ../../library/xml.rst:107 +msgid "" +"Entity declarations can contain more than just text for replacement. They " +"can also point to external resources or local files. The XML parser accesses" +" the resource and embeds the content into the XML document." +msgstr "实体声明可以包含的不仅仅是替换文本。 它们还可以指向外部资源或本地文件。 XML 解析器访问资源并将内容嵌入到 XML 文档中。" + +#: ../../library/xml.rst:112 +msgid "" +"Some XML libraries like Python's :mod:`xml.dom.pulldom` retrieve document " +"type definitions from remote or local locations. The feature has similar " +"implications as the external entity expansion issue." +msgstr "" +"Python 的一些 XML 库 :mod:`xml.dom.pulldom` 从远程或本地位置检索文档类型定义。 " +"该功能与外部实体扩展问题具有相似的含义。" + +#: ../../library/xml.rst:117 +msgid "" +"Decompression bombs (aka `ZIP bomb`_) apply to all XML libraries that can " +"parse compressed XML streams such as gzipped HTTP streams or LZMA-compressed" +" files. For an attacker it can reduce the amount of transmitted data by " +"three magnitudes or more." +msgstr "" +"Decompression bombs(解压炸弹,又名 `ZIP bomb`_)适用于所有可以解析压缩 XML 流(例如 gzip 压缩的 HTTP " +"流或 LZMA 压缩的文件)的 XML 库。 对于攻击者来说,它可以将传输的数据量减少三个量级或更多。" + +#: ../../library/xml.rst:124 +msgid "" +"Expat needs to re-parse unfinished tokens; without the protection introduced" +" in Expat 2.6.0, this can lead to quadratic runtime that can be used to " +"cause denial of service in the application parsing XML. The issue is known " +"as `CVE-2023-52425 `_." +msgstr "" +"Expat 需要重新解析未完成的词元;在没有 Expat 2.6.0 所引入的防护措施的情况下,这会导致可被用来在解析 XML " +"的应用程序中制造拒绝服务攻击的指数级运行时间。 此问题被称为 `CVE-2023-52425 `_。" + +#: ../../library/xml.rst:130 +msgid "" +"The documentation for `defusedxml`_ on PyPI has further information about " +"all known attack vectors with examples and references." +msgstr "PyPI上 `defusedxml`_ 的文档包含有关所有已知攻击向量的更多信息以及示例和参考。" + +#: ../../library/xml.rst:136 +msgid "The :mod:`defusedxml` Package" +msgstr ":mod:`defusedxml` 包" + +#: ../../library/xml.rst:138 +msgid "" +"`defusedxml`_ is a pure Python package with modified subclasses of all " +"stdlib XML parsers that prevent any potentially malicious operation. Use of " +"this package is recommended for any server code that parses untrusted XML " +"data. The package also ships with example exploits and extended " +"documentation on more XML exploits such as XPath injection." +msgstr "" +"`defusedxml`_ 是一个纯 Python 软件包,它修改了所有标准库 XML 解析器的子类,可以防止任何潜在的恶意操作。 " +"对于解析不受信任的XML数据的任何服务器代码,建议使用此程序包。 该软件包还提供了有关更多 XML 漏洞(如 XPath 注入)的示例漏洞和扩展文档。" diff --git a/library/xml.sax.handler.po b/library/xml.sax.handler.po new file mode 100644 index 000000000..616edbfea --- /dev/null +++ b/library/xml.sax.handler.po @@ -0,0 +1,607 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) 2001-2025, Python Software Foundation +# This file is distributed under the same license as the Python package. +# FIRST AUTHOR , YEAR. +# +# Translators: +# ppcfish , 2019 +# Freesand Leo , 2024 +# Rafael Fontenelle , 2025 +# +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: Python 3.9\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2025-02-07 16:40+0000\n" +"PO-Revision-Date: 2017-02-16 23:36+0000\n" +"Last-Translator: Rafael Fontenelle , 2025\n" +"Language-Team: Chinese (China) (https://app.transifex.com/python-doc/teams/5390/zh_CN/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: zh_CN\n" +"Plural-Forms: nplurals=1; plural=0;\n" + +#: ../../library/xml.sax.handler.rst:2 +msgid ":mod:`xml.sax.handler` --- Base classes for SAX handlers" +msgstr ":mod:`xml.sax.handler` --- SAX 处理器的基类" + +#: ../../library/xml.sax.handler.rst:10 +msgid "**Source code:** :source:`Lib/xml/sax/handler.py`" +msgstr "**源代码:** :source:`Lib/xml/sax/handler.py`" + +#: ../../library/xml.sax.handler.rst:14 +msgid "" +"The SAX API defines four kinds of handlers: content handlers, DTD handlers, " +"error handlers, and entity resolvers. Applications normally only need to " +"implement those interfaces whose events they are interested in; they can " +"implement the interfaces in a single object or in multiple objects. Handler " +"implementations should inherit from the base classes provided in the module " +":mod:`xml.sax.handler`, so that all methods get default implementations." +msgstr "" +"SAX API 定类了四种处理器:内容处理器、DTD 处理器、错误处理器以及实体解析器。 " +"应用程序通常只需要实现他们感兴趣的事件对应的接口;他们可以在单个对象或多个对象中实现这些接口。 处理器的实现应当继承自在 " +":mod:`xml.sax.handler` 模块中提供的基类,以便所有方法都能获得默认的实现。" + +#: ../../library/xml.sax.handler.rst:24 +msgid "" +"This is the main callback interface in SAX, and the one most important to " +"applications. The order of events in this interface mirrors the order of the" +" information in the document." +msgstr "这是 SAX 中的主回调接口,也是对应用程序来说最重要的一个接口。 此接口中事件的顺序反映了文档中信息的顺序。" + +#: ../../library/xml.sax.handler.rst:31 +msgid "Handle DTD events." +msgstr "处理 DTD 事件。" + +#: ../../library/xml.sax.handler.rst:33 +msgid "" +"This interface specifies only those DTD events required for basic parsing " +"(unparsed entities and attributes)." +msgstr "这个接口仅指定了基本解析(未解析的实体和属性)所需的那些 DTD 事件。" + +#: ../../library/xml.sax.handler.rst:39 +msgid "" +"Basic interface for resolving entities. If you create an object implementing" +" this interface, then register the object with your Parser, the parser will " +"call the method in your object to resolve all external entities." +msgstr "用于解析实体的基本接口。 如果你创建了实现此接口的对象,然后用你的解析器注册该对象,该解析器将调用你的对象中的方法来解析所有外部实体。" + +#: ../../library/xml.sax.handler.rst:46 +msgid "" +"Interface used by the parser to present error and warning messages to the " +"application. The methods of this object control whether errors are " +"immediately converted to exceptions or are handled in some other way." +msgstr "解析器用来向应用程序表示错误和警告的接口。 这个对象的方法控制错误是要立即转换为异常还是以某种其他该来来处理。" + +#: ../../library/xml.sax.handler.rst:50 +msgid "" +"In addition to these classes, :mod:`xml.sax.handler` provides symbolic " +"constants for the feature and property names." +msgstr "除了这些类,:mod:`xml.sax.handler` 还提供了表示特性和属性名称的符号常量。" + +#: ../../library/xml.sax.handler.rst:56 +msgid "value: ``\"http://xml.org/sax/features/namespaces\"``" +msgstr "值: ``\"http://xml.org/sax/features/namespaces\"``" + +#: ../../library/xml.sax.handler.rst:57 +msgid "true: Perform Namespace processing." +msgstr "true: 执行命名空间处理。" + +#: ../../library/xml.sax.handler.rst:59 +msgid "" +"false: Optionally do not perform Namespace processing (implies namespace-" +"prefixes; default)." +msgstr "false: 可选择不执行命名空间处理 (这意味着 namespace-prefixes; default)。" + +#: ../../library/xml.sax.handler.rst:60 ../../library/xml.sax.handler.rst:70 +#: ../../library/xml.sax.handler.rst:79 ../../library/xml.sax.handler.rst:88 +#: ../../library/xml.sax.handler.rst:96 ../../library/xml.sax.handler.rst:106 +#: ../../library/xml.sax.handler.rst:138 +msgid "access: (parsing) read-only; (not parsing) read/write" +msgstr "access: (解析) 只读; (不解析) 读/写" + +#: ../../library/xml.sax.handler.rst:65 +msgid "value: ``\"http://xml.org/sax/features/namespace-prefixes\"``" +msgstr "值: ``\"http://xml.org/sax/features/namespace-prefixes\"``" + +#: ../../library/xml.sax.handler.rst:67 +msgid "" +"true: Report the original prefixed names and attributes used for Namespace " +"declarations." +msgstr "true: 报告原始的带前缀名称和用于命名空间声明的属性。" + +#: ../../library/xml.sax.handler.rst:69 +msgid "" +"false: Do not report attributes used for Namespace declarations, and " +"optionally do not report original prefixed names (default)." +msgstr "false: 不报告用于命名空间声明的属性,可选择不报告原始的带前缀名称(默认)。" + +#: ../../library/xml.sax.handler.rst:75 +msgid "value: ``\"http://xml.org/sax/features/string-interning\"``" +msgstr "值: ``\"http://xml.org/sax/features/string-interning\"``" + +#: ../../library/xml.sax.handler.rst:77 +msgid "" +"true: All element names, prefixes, attribute names, Namespace URIs, and " +"local names are interned using the built-in intern function." +msgstr "true: 所有元素名称、前缀、属性名称、命名空间 URI 以及本地名称都使用内置的 intern 函数进行内化。" + +#: ../../library/xml.sax.handler.rst:78 +msgid "" +"false: Names are not necessarily interned, although they may be (default)." +msgstr "false: 名称不要求被内化,但也可以被内化(默认)。" + +#: ../../library/xml.sax.handler.rst:84 +msgid "value: ``\"http://xml.org/sax/features/validation\"``" +msgstr "值: ``\"http://xml.org/sax/features/validation\"``" + +#: ../../library/xml.sax.handler.rst:86 +msgid "" +"true: Report all validation errors (implies external-general-entities and " +"external-parameter-entities)." +msgstr "" +"true: 报告所有的验证错误(包括 external-general-entities 和 external-parameter-entities)。" + +#: ../../library/xml.sax.handler.rst:87 +msgid "false: Do not report validation errors." +msgstr "false: 不报告验证错误。" + +#: ../../library/xml.sax.handler.rst:93 +msgid "value: ``\"http://xml.org/sax/features/external-general-entities\"``" +msgstr "值: ``\"http://xml.org/sax/features/external-general-entities\"``" + +#: ../../library/xml.sax.handler.rst:94 +msgid "true: Include all external general (text) entities." +msgstr "true: 包括所有的外部通用(文本)实体。" + +#: ../../library/xml.sax.handler.rst:95 +msgid "false: Do not include external general entities." +msgstr "false: 不包括外部通用实体。" + +#: ../../library/xml.sax.handler.rst:101 +msgid "value: ``\"http://xml.org/sax/features/external-parameter-entities\"``" +msgstr "值: ``\"http://xml.org/sax/features/external-parameter-entities\"``" + +#: ../../library/xml.sax.handler.rst:103 +msgid "" +"true: Include all external parameter entities, including the external DTD " +"subset." +msgstr "true: 包括所有的外部参数实体,也包括外部 DTD 子集。" + +#: ../../library/xml.sax.handler.rst:105 +msgid "" +"false: Do not include any external parameter entities, even the external DTD" +" subset." +msgstr "false: 不包括任何外部参数实体,也不包括外部 DTD 子集。" + +#: ../../library/xml.sax.handler.rst:111 +msgid "List of all features." +msgstr "全部特性列表。" + +#: ../../library/xml.sax.handler.rst:116 +msgid "value: ``\"http://xml.org/sax/properties/lexical-handler\"``" +msgstr "值: ``\"http://xml.org/sax/properties/lexical-handler\"``" + +#: ../../library/xml.sax.handler.rst:117 +msgid "data type: xml.sax.sax2lib.LexicalHandler (not supported in Python 2)" +msgstr "数据类型: xml.sax.sax2lib.LexicalHandler (在 Python 2 中不受支持)" + +#: ../../library/xml.sax.handler.rst:119 +msgid "" +"description: An optional extension handler for lexical events like comments." +msgstr "描述: 可选的扩展处理器,用于注释等词法事件。" + +#: ../../library/xml.sax.handler.rst:120 ../../library/xml.sax.handler.rst:129 +msgid "access: read/write" +msgstr "访问: 读/写" + +#: ../../library/xml.sax.handler.rst:125 +msgid "value: ``\"http://xml.org/sax/properties/declaration-handler\"``" +msgstr "值: ``\"http://xml.org/sax/properties/declaration-handler\"``" + +#: ../../library/xml.sax.handler.rst:126 +msgid "data type: xml.sax.sax2lib.DeclHandler (not supported in Python 2)" +msgstr "数据类型: xml.sax.sax2lib.DeclHandler (在 Python 2 中不受支持)" + +#: ../../library/xml.sax.handler.rst:128 +msgid "" +"description: An optional extension handler for DTD-related events other than" +" notations and unparsed entities." +msgstr "描述: 可选的扩展处理器,用于标注和未解析实体以外的 DTD 相关事件。" + +#: ../../library/xml.sax.handler.rst:134 +msgid "value: ``\"http://xml.org/sax/properties/dom-node\"``" +msgstr "值: ``\"http://xml.org/sax/properties/dom-node\"``" + +#: ../../library/xml.sax.handler.rst:135 +msgid "data type: org.w3c.dom.Node (not supported in Python 2)" +msgstr "数据类型: org.w3c.dom.Node (在 Python 2 中不受支持)" + +#: ../../library/xml.sax.handler.rst:137 +msgid "" +"description: When parsing, the current DOM node being visited if this is a " +"DOM iterator; when not parsing, the root DOM node for iteration." +msgstr "描述: 在解析时,如果这是一个 DOM 迭代器则为当前被访问的 DOM 节点;不在解析时,则将根 DOM 节点用于迭代。" + +#: ../../library/xml.sax.handler.rst:143 +msgid "value: ``\"http://xml.org/sax/properties/xml-string\"``" +msgstr "值: ``\"http://xml.org/sax/properties/xml-string\"``" + +#: ../../library/xml.sax.handler.rst:144 +msgid "data type: Bytes" +msgstr "数据类型: Bytes" + +#: ../../library/xml.sax.handler.rst:146 +msgid "" +"description: The literal string of characters that was the source for the " +"current event." +msgstr "描述: 作为当前事件来源的字符串字面值。" + +#: ../../library/xml.sax.handler.rst:147 +msgid "access: read-only" +msgstr "访问: 只读" + +#: ../../library/xml.sax.handler.rst:152 +msgid "List of all known property names." +msgstr "已知属性名称列表。" + +#: ../../library/xml.sax.handler.rst:158 +msgid "ContentHandler Objects" +msgstr "ContentHandler 对象" + +#: ../../library/xml.sax.handler.rst:160 +msgid "" +"Users are expected to subclass :class:`ContentHandler` to support their " +"application. The following methods are called by the parser on the " +"appropriate events in the input document:" +msgstr "用户应当子类化 :class:`ContentHandler` 来支持他们的应用程序。 以下方法会由解析器在输入文档的适当事件上调用:" + +#: ../../library/xml.sax.handler.rst:167 +msgid "" +"Called by the parser to give the application a locator for locating the " +"origin of document events." +msgstr "由解析器调用来给予应用程序一个定位器以确定文档事件来自何处。" + +#: ../../library/xml.sax.handler.rst:170 +msgid "" +"SAX parsers are strongly encouraged (though not absolutely required) to " +"supply a locator: if it does so, it must supply the locator to the " +"application by invoking this method before invoking any of the other methods" +" in the DocumentHandler interface." +msgstr "" +"强烈建议(虽然不是绝对的要求) SAX 解析器提供一个定位器:如果提供的话,它必须在唤起 DocumentHandler " +"接口的任何其他方法之前通过唤起此方法来提供定位器。" + +#: ../../library/xml.sax.handler.rst:175 +msgid "" +"The locator allows the application to determine the end position of any " +"document-related event, even if the parser is not reporting an error. " +"Typically, the application will use this information for reporting its own " +"errors (such as character content that does not match an application's " +"business rules). The information returned by the locator is probably not " +"sufficient for use with a search engine." +msgstr "" +"定位器允许应用程序确定任何文档相关事件的结束位置,即使解析器没有报告错误。 " +"通常,应用程序将使用这些信息来报告它自己的错误(例如未匹配到应用程序业务规则的字符内容)。 定位器所返回的信息可能不足以与搜索引擎配合使用。" + +#: ../../library/xml.sax.handler.rst:182 +msgid "" +"Note that the locator will return correct information only during the " +"invocation of the events in this interface. The application should not " +"attempt to use it at any other time." +msgstr "请注意定位器只有在发唤起此接口中的事件时才会返回正确的信息。 应用程序不应试图在其他任何时刻使用它。" + +#: ../../library/xml.sax.handler.rst:189 +msgid "Receive notification of the beginning of a document." +msgstr "接收一个文档开始的通知。" + +#: ../../library/xml.sax.handler.rst:191 +msgid "" +"The SAX parser will invoke this method only once, before any other methods " +"in this interface or in DTDHandler (except for :meth:`setDocumentLocator`)." +msgstr "" +"SAX 解析器将只唤起这个方法一次,并且会在调用这个接口或 DTDHandler 中的任何其他方法之前 " +"(:meth:`setDocumentLocator` 除外)。" + +#: ../../library/xml.sax.handler.rst:197 +msgid "Receive notification of the end of a document." +msgstr "接收一个文档结束的通知。" + +#: ../../library/xml.sax.handler.rst:199 +msgid "" +"The SAX parser will invoke this method only once, and it will be the last " +"method invoked during the parse. The parser shall not invoke this method " +"until it has either abandoned parsing (because of an unrecoverable error) or" +" reached the end of input." +msgstr "" +"SAX 解析器将只唤起这个方法一次,并且它将是在解析过程中最后被唤起的方法。 解析器在(因不可恢复的错误)放弃解析或到达输入的终点之前不应唤起这个方法。" + +#: ../../library/xml.sax.handler.rst:207 +msgid "Begin the scope of a prefix-URI Namespace mapping." +msgstr "开始一个前缀 URI 命名空间映射的范围。" + +#: ../../library/xml.sax.handler.rst:209 +msgid "" +"The information from this event is not necessary for normal Namespace " +"processing: the SAX XML reader will automatically replace prefixes for " +"element and attribute names when the ``feature_namespaces`` feature is " +"enabled (the default)." +msgstr "" +"来自此事件的信息对于一般命名空间处理来说是不必要的:当 ``feature_namespaces`` 特性被启用时(默认)SAX XML " +"读取器将自动为元素和属性名称替换前缀。" + +#: ../../library/xml.sax.handler.rst:214 +msgid "" +"There are cases, however, when applications need to use prefixes in " +"character data or in attribute values, where they cannot safely be expanded " +"automatically; the :meth:`startPrefixMapping` and :meth:`endPrefixMapping` " +"events supply the information to the application to expand prefixes in those" +" contexts itself, if necessary." +msgstr "" +"但是也存在一些情况,当应用程序需要在字符数据或属性值中使用前缀,而它们无法被安全地自动扩展;:meth:`startPrefixMapping` 和 " +":meth:`endPrefixMapping` 事件会向应用程序提供信息以便在这些上下文内部扩展前缀,如果有必要的话。" + +#: ../../library/xml.sax.handler.rst:222 +msgid "" +"Note that :meth:`startPrefixMapping` and :meth:`endPrefixMapping` events are" +" not guaranteed to be properly nested relative to each-other: all " +":meth:`startPrefixMapping` events will occur before the corresponding " +":meth:`startElement` event, and all :meth:`endPrefixMapping` events will " +"occur after the corresponding :meth:`endElement` event, but their order is " +"not guaranteed." +msgstr "" +"请注意 :meth:`startPrefixMapping` 和 :meth:`endPrefixMapping` " +"事件并不保证能够相对彼此被正确地嵌套:所有 :meth:`startPrefixMapping` 事件都将在对应的 " +":meth:`startElement` 事件之前发生,而所有 :meth:`endPrefixMapping` 事件都将在对应的 " +":meth:`endElement` 事件之后发生,但它们的并不保证一致。" + +#: ../../library/xml.sax.handler.rst:232 +msgid "End the scope of a prefix-URI mapping." +msgstr "结束一个前缀 URI 映射的范围。" + +#: ../../library/xml.sax.handler.rst:234 +msgid "" +"See :meth:`startPrefixMapping` for details. This event will always occur " +"after the corresponding :meth:`endElement` event, but the order of " +":meth:`endPrefixMapping` events is not otherwise guaranteed." +msgstr "" +"请参看 :meth:`startPrefixMapping` 了解详情。 此事件将总是会在对应的 :meth:`endElement` 事件之后发生,但" +" :meth:`endPrefixMapping` 事件的顺序则并没有保证。" + +#: ../../library/xml.sax.handler.rst:241 +msgid "Signals the start of an element in non-namespace mode." +msgstr "在非命令空间模式下指示一个元素的开始。" + +#: ../../library/xml.sax.handler.rst:243 +msgid "" +"The *name* parameter contains the raw XML 1.0 name of the element type as a " +"string and the *attrs* parameter holds an object of the " +":class:`~xml.sax.xmlreader.Attributes` interface (see :ref:`attributes-" +"objects`) containing the attributes of the element. The object passed as " +"*attrs* may be re-used by the parser; holding on to a reference to it is not" +" a reliable way to keep a copy of the attributes. To keep a copy of the " +"attributes, use the :meth:`copy` method of the *attrs* object." +msgstr "" +"*name* 形参包含字符串形式的元素类型原始 XML 1.0 名称而 *attrs* 形参存放包含元素属性的 " +":class:`~xml.sax.xmlreader.Attributes` 接口对象 (参见 :ref:`attributes-objects`)。 " +"作为 *attrs* 传入的对象可能被解析器所重用;维持一个对它的引用不是保持属性副本的可靠方式。 要保持这些属性的一个副本,请使用 *attrs* " +"对象的 :meth:`copy` 方法。" + +#: ../../library/xml.sax.handler.rst:255 +msgid "Signals the end of an element in non-namespace mode." +msgstr "在非命名空间模式下指示一个元素的结束。" + +#: ../../library/xml.sax.handler.rst:257 +msgid "" +"The *name* parameter contains the name of the element type, just as with the" +" :meth:`startElement` event." +msgstr "*name* 形参包含元素类型的名称,与 :meth:`startElement` 事件的一样。" + +#: ../../library/xml.sax.handler.rst:263 +msgid "Signals the start of an element in namespace mode." +msgstr "在命名空间模式下指示一个元素的开始。" + +#: ../../library/xml.sax.handler.rst:265 +msgid "" +"The *name* parameter contains the name of the element type as a ``(uri, " +"localname)`` tuple, the *qname* parameter contains the raw XML 1.0 name used" +" in the source document, and the *attrs* parameter holds an instance of the " +":class:`~xml.sax.xmlreader.AttributesNS` interface (see :ref:`attributes-ns-" +"objects`) containing the attributes of the element. If no namespace is " +"associated with the element, the *uri* component of *name* will be ``None``." +" The object passed as *attrs* may be re-used by the parser; holding on to a" +" reference to it is not a reliable way to keep a copy of the attributes. To" +" keep a copy of the attributes, use the :meth:`copy` method of the *attrs* " +"object." +msgstr "" +"*name* 形参包含以 ``(uri, localname)`` 元组表示的元素类型名称,*qname* 形参包含源文档中使用的原始 XML 1.0 " +"名称,而 *attrs* 形参存放包含元素属性的 :class:`~xml.sax.xmlreader.AttributesNS` 接口实例 (参见 " +":ref:`attributes-ns-objects`)。 如果没有命名空间被关联到元素,则 *name* 的 *uri* 部分将为 " +"``None``。 作为 *attrs* 传入的对象可能被解析器所重用;维持一个对它的引用不是保持属性副本的可靠方式。 要保持这些属性的一个副本,请使用" +" *attrs* 对象的 :meth:`copy` 方法。" + +#: ../../library/xml.sax.handler.rst:276 +msgid "" +"Parsers may set the *qname* parameter to ``None``, unless the " +"``feature_namespace_prefixes`` feature is activated." +msgstr "解析器可将 *qname* 形参设为 ``None``,除非 ``feature_namespace_prefixes`` 特性已被激活。" + +#: ../../library/xml.sax.handler.rst:282 +msgid "Signals the end of an element in namespace mode." +msgstr "在命名空间模式下指示一个元素的结束。" + +#: ../../library/xml.sax.handler.rst:284 +msgid "" +"The *name* parameter contains the name of the element type, just as with the" +" :meth:`startElementNS` method, likewise the *qname* parameter." +msgstr "*name* 形参包含元素类型的名称,与 :meth:`startElementNS` 方法的一样,*qname* 形参也是类似的。" + +#: ../../library/xml.sax.handler.rst:290 +msgid "Receive notification of character data." +msgstr "接收字符数据的通知。" + +#: ../../library/xml.sax.handler.rst:292 +msgid "" +"The Parser will call this method to report each chunk of character data. SAX" +" parsers may return all contiguous character data in a single chunk, or they" +" may split it into several chunks; however, all of the characters in any " +"single event must come from the same external entity so that the Locator " +"provides useful information." +msgstr "" +"解析器将调用此方法来报告每一个字符数据分块。 SAX " +"解析器可以将所有连续字符数据返回为一个单独分块,或者将其拆成几个分块;但是,在任意单个事件中的所有字符都必须来自同一个外部实体以便定位器提供有用的信息。" + +#: ../../library/xml.sax.handler.rst:298 +msgid "" +"*content* may be a string or bytes instance; the ``expat`` reader module " +"always produces strings." +msgstr "*content* 可以是一个字符串或字节串实例;``expat`` 读取器模块总是会产生字符串。" + +#: ../../library/xml.sax.handler.rst:303 +msgid "" +"The earlier SAX 1 interface provided by the Python XML Special Interest " +"Group used a more Java-like interface for this method. Since most parsers " +"used from Python did not take advantage of the older interface, the simpler " +"signature was chosen to replace it. To convert old code to the new " +"interface, use *content* instead of slicing content with the old *offset* " +"and *length* parameters." +msgstr "" +"Python XML 特别关注小组所提供的早期 SAX 1 接口针对此方法使用了一个更类似于 Java 的接口。 由于 Python " +"所使用的大多数解析器都没有利用老式的接口,因而选择了更简单的签名来替代它。 要将旧代码转换为新接口,请使用 *content* 而不要通过旧的 " +"*offset* 和 *length* 形参来对内容进行切片。" + +#: ../../library/xml.sax.handler.rst:312 +msgid "Receive notification of ignorable whitespace in element content." +msgstr "接收元素内容中可忽略空白符的通知。" + +#: ../../library/xml.sax.handler.rst:314 +msgid "" +"Validating Parsers must use this method to report each chunk of ignorable " +"whitespace (see the W3C XML 1.0 recommendation, section 2.10): non-" +"validating parsers may also use this method if they are capable of parsing " +"and using content models." +msgstr "" +"验证解析器必须使用此方法来报告每个可忽略的空白符分块(参见 W3C XML 1.0 建议第 2.10 " +"节):非验证解析器如果能够解析并使用内容模型的话也可以使用此方法。" + +#: ../../library/xml.sax.handler.rst:319 +msgid "" +"SAX parsers may return all contiguous whitespace in a single chunk, or they " +"may split it into several chunks; however, all of the characters in any " +"single event must come from the same external entity, so that the Locator " +"provides useful information." +msgstr "" +"SAX " +"解析器可以将所有连续字符数据返回为一个单独分块,或者将其拆成几个分块;但是,在任意单个事件中的所有字符都必须来自同一个外部实体以便定位器提供有用的信息。" + +#: ../../library/xml.sax.handler.rst:327 +msgid "Receive notification of a processing instruction." +msgstr "接受一条处理指令的通知。" + +#: ../../library/xml.sax.handler.rst:329 +msgid "" +"The Parser will invoke this method once for each processing instruction " +"found: note that processing instructions may occur before or after the main " +"document element." +msgstr "解析器将为已找到的每条处理指令唤起该方法一次:请注意处理指令可能出现在主文档元素之前或之后。" + +#: ../../library/xml.sax.handler.rst:333 +msgid "" +"A SAX parser should never report an XML declaration (XML 1.0, section 2.8) " +"or a text declaration (XML 1.0, section 4.3.1) using this method." +msgstr "SAX 解析器绝不应当使用此方法来报告 XML 声明(XML 1.0 第 2.8 节)或文本声明(XML 1.0 第 4.3.1 节)。" + +#: ../../library/xml.sax.handler.rst:339 +msgid "Receive notification of a skipped entity." +msgstr "接收一个已跳过实体的通知。" + +#: ../../library/xml.sax.handler.rst:341 +msgid "" +"The Parser will invoke this method once for each entity skipped. Non-" +"validating processors may skip entities if they have not seen the " +"declarations (because, for example, the entity was declared in an external " +"DTD subset). All processors may skip external entities, depending on the " +"values of the ``feature_external_ges`` and the ``feature_external_pes`` " +"properties." +msgstr "" +"解析器将为每个已跳过实体唤起此方法一次。 非验证处理程序可能会跳过未看到声明的实体(例如,由于实体是在一个外部because, for example," +" the entity was declared in an external DTD 子集中声明的)。 所有处理程序都可以跳过外部实体,具体取决于 " +"``feature_external_ges`` 和 ``feature_external_pes`` 属性的值。" + +#: ../../library/xml.sax.handler.rst:351 +msgid "DTDHandler Objects" +msgstr "DTDHandler 对象" + +#: ../../library/xml.sax.handler.rst:353 +msgid ":class:`DTDHandler` instances provide the following methods:" +msgstr ":class:`DTDHandler` 实例提供了下列方法:" + +#: ../../library/xml.sax.handler.rst:358 +msgid "Handle a notation declaration event." +msgstr "处理标注声明事件。" + +#: ../../library/xml.sax.handler.rst:363 +msgid "Handle an unparsed entity declaration event." +msgstr "处理未解析的实体声明事件。" + +#: ../../library/xml.sax.handler.rst:369 +msgid "EntityResolver Objects" +msgstr "EntityResolver 对象" + +#: ../../library/xml.sax.handler.rst:374 +msgid "" +"Resolve the system identifier of an entity and return either the system " +"identifier to read from as a string, or an InputSource to read from. The " +"default implementation returns *systemId*." +msgstr "" +"求解一个实体的系统标识符并返回一个字符串形式的系统标识符作为读取源,或是一个 InputSource 作为读取源。 默认的实现会返回 " +"*systemId*。" + +#: ../../library/xml.sax.handler.rst:382 +msgid "ErrorHandler Objects" +msgstr "ErrorHandler 对象" + +#: ../../library/xml.sax.handler.rst:384 +msgid "" +"Objects with this interface are used to receive error and warning " +"information from the :class:`~xml.sax.xmlreader.XMLReader`. If you create " +"an object that implements this interface, then register the object with your" +" :class:`~xml.sax.xmlreader.XMLReader`, the parser will call the methods in " +"your object to report all warnings and errors. There are three levels of " +"errors available: warnings, (possibly) recoverable errors, and unrecoverable" +" errors. All methods take a :exc:`SAXParseException` as the only parameter." +" Errors and warnings may be converted to an exception by raising the " +"passed-in exception object." +msgstr "" +"带有这个接口的对象被用于接收来自 :class:`~xml.sax.xmlreader.XMLReader` 的错误和警告信息。 " +"如果你创建了一个实现这个接口的对象,然后用你的 :class:`~xml.sax.xmlreader.XMLReader` " +"注册这个对象,则解析器将调用你的对象中的这个方法来报告所有的警告和错误。 有三个可用的错误级别:警告、(或许)可恢复的错误和不可恢复的错误。 " +"所有方法都接受 :exc:`SAXParseException` 作为唯一的形参。 错误和警告可以通过引发所传入的异常对象来转换为异常。" + +#: ../../library/xml.sax.handler.rst:397 +msgid "" +"Called when the parser encounters a recoverable error. If this method does " +"not raise an exception, parsing may continue, but further document " +"information should not be expected by the application. Allowing the parser " +"to continue may allow additional errors to be discovered in the input " +"document." +msgstr "" +"当解析器遇到一个可恢复的错误时调用。 如果此方法没有引发异常,则解析可能会继续,但是应用程序不能预期获得更多的文档信息。 " +"允许解析器继续可能会允许在输入文档中发现额外的错误。" + +#: ../../library/xml.sax.handler.rst:405 +msgid "" +"Called when the parser encounters an error it cannot recover from; parsing " +"is expected to terminate when this method returns." +msgstr "当解析器遇到一个不可恢复的错误时调用;在此方法返回时解析应当终止。" + +#: ../../library/xml.sax.handler.rst:411 +msgid "" +"Called when the parser presents minor warning information to the " +"application. Parsing is expected to continue when this method returns, and " +"document information will continue to be passed to the application. Raising " +"an exception in this method will cause parsing to end." +msgstr "" +"当解析器向应用程序提供次要警告信息时调用。 在此方法返回时解析应当继续,并且文档信息将继续被传递给应用程序。 在此方法中引发异常将导致解析结束。" diff --git a/library/xml.sax.po b/library/xml.sax.po new file mode 100644 index 000000000..06a09a12a --- /dev/null +++ b/library/xml.sax.po @@ -0,0 +1,277 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) 2001-2025, Python Software Foundation +# This file is distributed under the same license as the Python package. +# FIRST AUTHOR , YEAR. +# +# Translators: +# Freesand Leo , 2024 +# Rafael Fontenelle , 2025 +# +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: Python 3.9\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2025-02-07 16:40+0000\n" +"PO-Revision-Date: 2017-02-16 23:36+0000\n" +"Last-Translator: Rafael Fontenelle , 2025\n" +"Language-Team: Chinese (China) (https://app.transifex.com/python-doc/teams/5390/zh_CN/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: zh_CN\n" +"Plural-Forms: nplurals=1; plural=0;\n" + +#: ../../library/xml.sax.rst:2 +msgid ":mod:`xml.sax` --- Support for SAX2 parsers" +msgstr ":mod:`xml.sax` --- 支持 SAX2 解析器" + +#: ../../library/xml.sax.rst:11 +msgid "**Source code:** :source:`Lib/xml/sax/__init__.py`" +msgstr "**源代码:** :source:`Lib/xml/sax/__init__.py`" + +#: ../../library/xml.sax.rst:15 +msgid "" +"The :mod:`xml.sax` package provides a number of modules which implement the " +"Simple API for XML (SAX) interface for Python. The package itself provides " +"the SAX exceptions and the convenience functions which will be most used by " +"users of the SAX API." +msgstr "" +":mod:`xml.sax` 包提供多个模块,它们在 Python 上实现了用于 XML (SAX) 接口的简单 API。 这个包本身为 SAX " +"API 用户提供了一些最常用的 SAX 异常和便捷函数。" + +#: ../../library/xml.sax.rst:23 +msgid "" +"The :mod:`xml.sax` module is not secure against maliciously constructed " +"data. If you need to parse untrusted or unauthenticated data see :ref:`xml-" +"vulnerabilities`." +msgstr "" +":mod:`xml.sax` 模块对于恶意构建的数据是不安全的。 如果你需要解析不受信任或未经身份验证的数据,请参阅 :ref:`xml-" +"vulnerabilities`。" + +#: ../../library/xml.sax.rst:29 +msgid "" +"The SAX parser no longer processes general external entities by default to " +"increase security. Before, the parser created network connections to fetch " +"remote files or loaded local files from the file system for DTD and " +"entities. The feature can be enabled again with method " +":meth:`~xml.sax.xmlreader.XMLReader.setFeature` on the parser object and " +"argument :data:`~xml.sax.handler.feature_external_ges`." +msgstr "" +"SAX 解析器默认不会再处理通用外部实体以便提升安全性。 在此之前,解析器会创建网络连接来获取远程文件或是从 DTD 和实体文件系统中加载本地文件。 " +"此特性可通过在解析器对象上调用 :meth:`~xml.sax.xmlreader.XMLReader.setFeature` 对象并传入参数 " +":data:`~xml.sax.handler.feature_external_ges` 来重新启用。" + +#: ../../library/xml.sax.rst:36 +msgid "The convenience functions are:" +msgstr "可用的便捷函数如下所列:" + +#: ../../library/xml.sax.rst:41 +msgid "" +"Create and return a SAX :class:`~xml.sax.xmlreader.XMLReader` object. The " +"first parser found will be used. If *parser_list* is provided, it must be " +"an iterable of strings which name modules that have a function named " +":func:`create_parser`. Modules listed in *parser_list* will be used before " +"modules in the default list of parsers." +msgstr "" +"创建并返回一个 SAX :class:`~xml.sax.xmlreader.XMLReader` 对象。 将返回第一个被找到的解析器。 如果提供了 " +"*parser_list*,它必须为一个包含字符串的可迭代对象,这些字符串指定了具有名为 :func:`create_parser` 函数的模块。 在 " +"*parser_list* 中列出的模块将在默认解析器列表中的模块之前被使用。" + +#: ../../library/xml.sax.rst:47 +msgid "The *parser_list* argument can be any iterable, not just a list." +msgstr "*parser_list* 参数可以是任意可迭代对象,而不一定是列表。" + +#: ../../library/xml.sax.rst:53 +msgid "" +"Create a SAX parser and use it to parse a document. The document, passed in" +" as *filename_or_stream*, can be a filename or a file object. The *handler*" +" parameter needs to be a SAX :class:`~handler.ContentHandler` instance. If " +"*error_handler* is given, it must be a SAX :class:`~handler.ErrorHandler` " +"instance; if omitted, :exc:`SAXParseException` will be raised on all " +"errors. There is no return value; all work must be done by the *handler* " +"passed in." +msgstr "" +"创建一个 SAX 解析器并用它来解析文档。 用于传入文档的 *filename_or_stream* 可以是一个文件名或文件对象。 *handler* " +"形参必须是一个 SAX :class:`~handler.ContentHandler` 实例。 如果给出了 " +"*error_handler*,则它必须是一个 SAX :class:`~handler.ErrorHandler` " +"实例;如果省略,则对于任何错误都将引发 :exc:`SAXParseException`。 此函数没有返回值;所有操作必须由传入的 *handler*" +" 来完成。" + +#: ../../library/xml.sax.rst:64 +msgid "" +"Similar to :func:`parse`, but parses from a buffer *string* received as a " +"parameter. *string* must be a :class:`str` instance or a :term:`bytes-like " +"object`." +msgstr "" +"类似于 :func:`parse`,但解析对象是作为形参传入的缓冲区 *string*。 *string* 必须为 :class:`str` 实例或者 " +":term:`bytes-like object`。" + +#: ../../library/xml.sax.rst:68 +msgid "Added support of :class:`str` instances." +msgstr "增加了对 :class:`str` 实例的支持。" + +#: ../../library/xml.sax.rst:71 +msgid "" +"A typical SAX application uses three kinds of objects: readers, handlers and" +" input sources. \"Reader\" in this context is another term for parser, i.e." +" some piece of code that reads the bytes or characters from the input " +"source, and produces a sequence of events. The events then get distributed " +"to the handler objects, i.e. the reader invokes a method on the handler. A " +"SAX application must therefore obtain a reader object, create or open the " +"input sources, create the handlers, and connect these objects all together." +" As the final step of preparation, the reader is called to parse the input." +" During parsing, methods on the handler objects are called based on " +"structural and syntactic events from the input data." +msgstr "" +"典型的 SAX 应用程序会使用三种对象:读取器、处理器和输入源。 " +"“读取器”在此上下文中与解析器同义,即某个从输入源读取字节或字符,并产生事件序列的代码段。 " +"事件随后将被分发给处理器对象,即由读取器唤起处理器上的某个方法。 因此 SAX " +"应用程序必须获取一个读取器对象,创建或打开输入源,创建处理器,并一起连接到这些对象。 作为准备工作的最后一步,将调用读取器来解析输入内容。 " +"在解析过程中,会根据来自输入数据的结构化和语义化事件来调用处理器对象上的方法。" + +#: ../../library/xml.sax.rst:82 +msgid "" +"For these objects, only the interfaces are relevant; they are normally not " +"instantiated by the application itself. Since Python does not have an " +"explicit notion of interface, they are formally introduced as classes, but " +"applications may use implementations which do not inherit from the provided " +"classes. The :class:`~xml.sax.xmlreader.InputSource`, " +":class:`~xml.sax.xmlreader.Locator`, :class:`~xml.sax.xmlreader.Attributes`," +" :class:`~xml.sax.xmlreader.AttributesNS`, and " +":class:`~xml.sax.xmlreader.XMLReader` interfaces are defined in the module " +":mod:`xml.sax.xmlreader`. The handler interfaces are defined in " +":mod:`xml.sax.handler`. For convenience, " +":class:`~xml.sax.xmlreader.InputSource` (which is often instantiated " +"directly) and the handler classes are also available from :mod:`xml.sax`. " +"These interfaces are described below." +msgstr "" +"就这些对象而言,只有接口部分是需要关注的;它们通常不是由应用程序本身来实例化。 由于 Python " +"没有显式的接口标记法,它们的正式引入形式是类,但应用程序可能会使用并非从已提供的类继承而来的实现。 " +":class:`~xml.sax.xmlreader.InputSource`, " +":class:`~xml.sax.xmlreader.Locator`, :class:`~xml.sax.xmlreader.Attributes`," +" :class:`~xml.sax.xmlreader.AttributesNS` 以及 " +":class:`~xml.sax.xmlreader.XMLReader` 接口是在 :mod:`xml.sax.xmlreader` 模块中定义的。 " +"处理器接口是在 :mod:`xml.sax.handler` 中定义的。 " +"为了方便起见,:class:`~xml.sax.xmlreader.InputSource` (它往往会被直接实例化) 和处理器类也可以从 " +":mod:`xml.sax` 获得。 这些接口的描述见下文。" + +#: ../../library/xml.sax.rst:95 +msgid "" +"In addition to these classes, :mod:`xml.sax` provides the following " +"exception classes." +msgstr "除了这些类,:mod:`xml.sax` 还提供了如下异常类。" + +#: ../../library/xml.sax.rst:101 +msgid "" +"Encapsulate an XML error or warning. This class can contain basic error or " +"warning information from either the XML parser or the application: it can be" +" subclassed to provide additional functionality or to add localization. " +"Note that although the handlers defined in the " +":class:`~xml.sax.handler.ErrorHandler` interface receive instances of this " +"exception, it is not required to actually raise the exception --- it is also" +" useful as a container for information." +msgstr "" +"封装某个 XML 错误或警告。 这个类可以包含来自 XML 解析器或应用程序的基本错误或警告信息:它可以被子类化以提供额外的功能或是添加本地化信息。 " +"请注意虽然在 :class:`~xml.sax.handler.ErrorHandler` " +"接口中定义的处理器可以接收该异常的实例,但是并不要求实际引发该异常 --- 它也可以被用作信息的容器。" + +#: ../../library/xml.sax.rst:109 +msgid "" +"When instantiated, *msg* should be a human-readable description of the " +"error. The optional *exception* parameter, if given, should be ``None`` or " +"an exception that was caught by the parsing code and is being passed along " +"as information." +msgstr "" +"当实例化时,*msg* 应当是适合人类阅读的错误描述。 如果给出了可选的 *exception* 形参,它应当为 ``None`` " +"或者解析代码所捕获的异常并会被作为信息传递出去。" + +#: ../../library/xml.sax.rst:113 +msgid "This is the base class for the other SAX exception classes." +msgstr "这是其他 SAX 异常类的基类。" + +#: ../../library/xml.sax.rst:118 +msgid "" +"Subclass of :exc:`SAXException` raised on parse errors. Instances of this " +"class are passed to the methods of the SAX " +":class:`~xml.sax.handler.ErrorHandler` interface to provide information " +"about the parse error. This class supports the SAX " +":class:`~xml.sax.xmlreader.Locator` interface as well as the " +":class:`SAXException` interface." +msgstr "" +":exc:`SAXException` 的子类,针对解析错误引发。 这个类的实例会被传递给 SAX " +":class:`~xml.sax.handler.ErrorHandler` 接口的方法来提供关于解析错误的信息。 这个类支持 SAX " +":class:`~xml.sax.xmlreader.Locator` 接口以及 :class:`SAXException` 接口。" + +#: ../../library/xml.sax.rst:128 +msgid "" +"Subclass of :exc:`SAXException` raised when a SAX " +":class:`~xml.sax.xmlreader.XMLReader` is confronted with an unrecognized " +"feature or property. SAX applications and extensions may use this class for" +" similar purposes." +msgstr "" +":exc:`SAXException` 的子类,当 SAX :class:`~xml.sax.xmlreader.XMLReader` " +"遇到不可识别的特性或属性时引发。 SAX 应用程序和扩展可能会出于类似目的而使用这个类。" + +#: ../../library/xml.sax.rst:136 +msgid "" +"Subclass of :exc:`SAXException` raised when a SAX " +":class:`~xml.sax.xmlreader.XMLReader` is asked to enable a feature that is " +"not supported, or to set a property to a value that the implementation does " +"not support. SAX applications and extensions may use this class for similar" +" purposes." +msgstr "" +":exc:`SAXException` 的子类,当 SAX :class:`~xml.sax.xmlreader.XMLReader` " +"被要求启用某个不受支持的特性,或者将某个属性设为具体实现不支持的值时引发。 SAX 应用程序和扩展可能会出于类似目的而使用这个类。" + +#: ../../library/xml.sax.rst:148 +msgid "`SAX: The Simple API for XML `_" +msgstr "`SAX: The Simple API for XML `_" + +#: ../../library/xml.sax.rst:146 +msgid "" +"This site is the focal point for the definition of the SAX API. It provides" +" a Java implementation and online documentation. Links to implementations " +"and historical information are also available." +msgstr "这个网站是 SAX API 定义的焦点。 它提供了一个 Java 实现以及在线文档。 还包括其他实现的链接和历史信息。" + +#: ../../library/xml.sax.rst:151 +msgid "Module :mod:`xml.sax.handler`" +msgstr ":mod:`xml.sax.handler` 模块" + +#: ../../library/xml.sax.rst:151 +msgid "Definitions of the interfaces for application-provided objects." +msgstr "应用程序所提供对象的接口定义。" + +#: ../../library/xml.sax.rst:154 +msgid "Module :mod:`xml.sax.saxutils`" +msgstr ":mod:`xml.sax.saxutils` 模块" + +#: ../../library/xml.sax.rst:154 +msgid "Convenience functions for use in SAX applications." +msgstr "可在 SAX 应用程序中使用的便捷函数。" + +#: ../../library/xml.sax.rst:156 +msgid "Module :mod:`xml.sax.xmlreader`" +msgstr ":mod:`xml.sax.xmlreader` 模块" + +#: ../../library/xml.sax.rst:157 +msgid "Definitions of the interfaces for parser-provided objects." +msgstr "解析器所提供对象的接口定义。" + +#: ../../library/xml.sax.rst:163 +msgid "SAXException Objects" +msgstr "SAXException 对象" + +#: ../../library/xml.sax.rst:165 +msgid "" +"The :class:`SAXException` exception class supports the following methods:" +msgstr ":class:`SAXException` 异常类支持下列方法:" + +#: ../../library/xml.sax.rst:170 +msgid "Return a human-readable message describing the error condition." +msgstr "返回描述错误条件的适合人类阅读的消息。" + +#: ../../library/xml.sax.rst:175 +msgid "Return an encapsulated exception object, or ``None``." +msgstr "返回一个封装的异常对象或者 ``None``。" diff --git a/library/xml.sax.reader.po b/library/xml.sax.reader.po new file mode 100644 index 000000000..1cc2a262a --- /dev/null +++ b/library/xml.sax.reader.po @@ -0,0 +1,491 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) 2001-2025, Python Software Foundation +# This file is distributed under the same license as the Python package. +# FIRST AUTHOR , YEAR. +# +# Translators: +# ppcfish , 2019 +# Freesand Leo , 2024 +# Rafael Fontenelle , 2025 +# +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: Python 3.9\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2025-02-07 16:40+0000\n" +"PO-Revision-Date: 2017-02-16 23:36+0000\n" +"Last-Translator: Rafael Fontenelle , 2025\n" +"Language-Team: Chinese (China) (https://app.transifex.com/python-doc/teams/5390/zh_CN/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: zh_CN\n" +"Plural-Forms: nplurals=1; plural=0;\n" + +#: ../../library/xml.sax.reader.rst:2 +msgid ":mod:`xml.sax.xmlreader` --- Interface for XML parsers" +msgstr ":mod:`xml.sax.xmlreader` --- 用于 XML 解析器的接口" + +#: ../../library/xml.sax.reader.rst:10 +msgid "**Source code:** :source:`Lib/xml/sax/xmlreader.py`" +msgstr "**源代码:** :source:`Lib/xml/sax/xmlreader.py`" + +#: ../../library/xml.sax.reader.rst:14 +msgid "" +"SAX parsers implement the :class:`XMLReader` interface. They are implemented" +" in a Python module, which must provide a function :func:`create_parser`. " +"This function is invoked by :func:`xml.sax.make_parser` with no arguments " +"to create a new parser object." +msgstr "" +"SAX 解析器实现了 :class:`XMLReader` 接口。 它们是在一个 Python 模块中实现的,该模块必须提供一个 " +":func:`create_parser` 函数。 该函数由 :func:`xml.sax.make_parser` " +"不带参数地唤起来创建新的解析器对象。" + +#: ../../library/xml.sax.reader.rst:22 +msgid "Base class which can be inherited by SAX parsers." +msgstr "可由 SAX 解析器继承的基类。" + +#: ../../library/xml.sax.reader.rst:27 +msgid "" +"In some cases, it is desirable not to parse an input source at once, but to " +"feed chunks of the document as they get available. Note that the reader will" +" normally not read the entire file, but read it in chunks as well; still " +":meth:`parse` won't return until the entire document is processed. So these " +"interfaces should be used if the blocking behaviour of :meth:`parse` is not " +"desirable." +msgstr "" +"在某些情况下,最好不要一次性地解析输入源,而是在可用的时候分块送入。 请注意读取器通常不会读取整个文件,它同样也是分块读取的; 并且 " +":meth:`parse` 在处理完整个文档之前不会返回。 所以如果不希望 :meth:`parse` 出现阻塞行为则应当使用这些接口。" + +#: ../../library/xml.sax.reader.rst:33 +msgid "" +"When the parser is instantiated it is ready to begin accepting data from the" +" feed method immediately. After parsing has been finished with a call to " +"close the reset method must be called to make the parser ready to accept new" +" data, either from feed or using the parse method." +msgstr "" +"当解析器被实例化时它已准备好立即开始接受来自 feed 方法的数据。 在通过调用 close 方法结束解析时 reset " +"方法也必须被调用以使解析器准备好接受新的数据,无论它是来自于 feed 还是使用 parse 方法。" + +#: ../../library/xml.sax.reader.rst:38 +msgid "" +"Note that these methods must *not* be called during parsing, that is, after " +"parse has been called and before it returns." +msgstr "请注意这些方法 *不可* 在解析期间被调用,即在 parse 被调用之后及其返回之前。" + +#: ../../library/xml.sax.reader.rst:41 +msgid "" +"By default, the class also implements the parse method of the XMLReader " +"interface using the feed, close and reset methods of the IncrementalParser " +"interface as a convenience to SAX 2.0 driver writers." +msgstr "" +"默认情况下,该类还使用 IncrementalParser 接口的 feed, close 和 reset 方法来实现 XMLReader 接口的 " +"parse 方法以方便 SAX 2.0 驱动的编写者。" + +#: ../../library/xml.sax.reader.rst:48 +msgid "" +"Interface for associating a SAX event with a document location. A locator " +"object will return valid results only during calls to DocumentHandler " +"methods; at any other time, the results are unpredictable. If information is" +" not available, methods may return ``None``." +msgstr "" +"用于关联一个 SAX 事件与一个文档位置的接口。 定位器对象只有在调用 DocumentHandler " +"的方法期间才会返回有效的结果;在其他任何时候,结果都是不可预测的。 如果信息不可用,这些方法可能返回 ``None``。" + +#: ../../library/xml.sax.reader.rst:56 +msgid "" +"Encapsulation of the information needed by the :class:`XMLReader` to read " +"entities." +msgstr ":class:`XMLReader` 读取实体所需信息的封装。" + +#: ../../library/xml.sax.reader.rst:59 +msgid "" +"This class may include information about the public identifier, system " +"identifier, byte stream (possibly with character encoding information) " +"and/or the character stream of an entity." +msgstr "这个类可能包括了关于公有标识符、系统标识符、字节流(可能带有字符编码格式信息)和/或一个实体的字符流的信息。" + +#: ../../library/xml.sax.reader.rst:63 +msgid "" +"Applications will create objects of this class for use in the " +":meth:`XMLReader.parse` method and for returning from " +"EntityResolver.resolveEntity." +msgstr "" +"应用程序将创建这个类的对象以便在 :meth:`XMLReader.parse` 方法中使用或是用于从 " +"EntityResolver.resolveEntity 返回值。" + +#: ../../library/xml.sax.reader.rst:67 +msgid "" +"An :class:`InputSource` belongs to the application, the :class:`XMLReader` " +"is not allowed to modify :class:`InputSource` objects passed to it from the " +"application, although it may make copies and modify those." +msgstr "" +":class:`InputSource` 属于应用程序,:class:`XMLReader` 不能修改从应用程序传递给它的 " +":class:`InputSource` 对象,但它可以创建副本并进行修改。" + +#: ../../library/xml.sax.reader.rst:74 +msgid "" +"This is an implementation of the :class:`Attributes` interface (see section " +":ref:`attributes-objects`). This is a dictionary-like object which " +"represents the element attributes in a :meth:`startElement` call. In " +"addition to the most useful dictionary operations, it supports a number of " +"other methods as described by the interface. Objects of this class should be" +" instantiated by readers; *attrs* must be a dictionary-like object " +"containing a mapping from attribute names to attribute values." +msgstr "" +"这是 :class:`Attributes` 接口(参见 :ref:`attributes-objects` 一节)的具体实现。 这是一个 " +":meth:`startElement` 调用中的元素属性的字典类对象。 除了最有用处的字典操作,它还支持接口所描述的一些其他方法。 " +"该类的对象应当由读取器来实例化;*attrs* 必须为包含从属性名到属性值的映射的字典类对象。" + +#: ../../library/xml.sax.reader.rst:85 +msgid "" +"Namespace-aware variant of :class:`AttributesImpl`, which will be passed to " +":meth:`startElementNS`. It is derived from :class:`AttributesImpl`, but " +"understands attribute names as two-tuples of *namespaceURI* and *localname*." +" In addition, it provides a number of methods expecting qualified names as " +"they appear in the original document. This class implements the " +":class:`AttributesNS` interface (see section :ref:`attributes-ns-objects`)." +msgstr "" +"可感知命名空间的 :class:`AttributesImpl` 变体形式,它将被传递给 :meth:`startElementNS`。 它派生自 " +":class:`AttributesImpl`,但会将属性名称解读为 *namespaceURI* 和 *localname* 二元组。 " +"此外,它还提供了一些期望接收在原始文档中出现的限定名称的方法。 这个类实现了 :class:`AttributesNS` 接口(参见 " +":ref:`attributes-ns-objects` 一节)。" + +#: ../../library/xml.sax.reader.rst:96 +msgid "XMLReader Objects" +msgstr "XMLReader 对象" + +#: ../../library/xml.sax.reader.rst:98 +msgid "The :class:`XMLReader` interface supports the following methods:" +msgstr ":class:`XMLReader` 接口支持下列方法:" + +#: ../../library/xml.sax.reader.rst:103 +msgid "" +"Process an input source, producing SAX events. The *source* object can be a " +"system identifier (a string identifying the input source -- typically a file" +" name or a URL), a :class:`pathlib.Path` or :term:`path-like ` object, or an :class:`InputSource` object. When :meth:`parse` " +"returns, the input is completely processed, and the parser object can be " +"discarded or reset." +msgstr "" +"处理输入源,产生 SAX 事件。 *source* 对象可以是一个系统标识符(标识输入源的字符串 -- 通常为文件名或 URL), " +":class:`pathlib.Path` 或 :term:`路径类 ` 对象,或者是 " +":class:`InputSource` 对象。 当 :meth:`parse` 返回时,输入会被全部处理完成,解析器对象可以被丢弃或重置。" + +#: ../../library/xml.sax.reader.rst:110 +msgid "Added support of character streams." +msgstr "添加了对字符流的支持。" + +#: ../../library/xml.sax.reader.rst:113 +msgid "Added support of path-like objects." +msgstr "增加了对路径类对象的支持。" + +#: ../../library/xml.sax.reader.rst:119 +msgid "Return the current :class:`~xml.sax.handler.ContentHandler`." +msgstr "返回当前的 :class:`~xml.sax.handler.ContentHandler`。" + +#: ../../library/xml.sax.reader.rst:124 +msgid "" +"Set the current :class:`~xml.sax.handler.ContentHandler`. If no " +":class:`~xml.sax.handler.ContentHandler` is set, content events will be " +"discarded." +msgstr "" +"设置当前的 :class:`~xml.sax.handler.ContentHandler`。 如果没有设置 " +":class:`~xml.sax.handler.ContentHandler`,内容事件将被丢弃。" + +#: ../../library/xml.sax.reader.rst:131 +msgid "Return the current :class:`~xml.sax.handler.DTDHandler`." +msgstr "返回当前的 :class:`~xml.sax.handler.DTDHandler`。" + +#: ../../library/xml.sax.reader.rst:136 +msgid "" +"Set the current :class:`~xml.sax.handler.DTDHandler`. If no " +":class:`~xml.sax.handler.DTDHandler` is set, DTD events will be discarded." +msgstr "" +"设置当前的 :class:`~xml.sax.handler.DTDHandler`。 如果没有设置 " +":class:`~xml.sax.handler.DTDHandler`,DTD 事件将被丢弃。" + +#: ../../library/xml.sax.reader.rst:143 +msgid "Return the current :class:`~xml.sax.handler.EntityResolver`." +msgstr "返回当前的 :class:`~xml.sax.handler.EntityResolver`。" + +#: ../../library/xml.sax.reader.rst:148 +msgid "" +"Set the current :class:`~xml.sax.handler.EntityResolver`. If no " +":class:`~xml.sax.handler.EntityResolver` is set, attempts to resolve an " +"external entity will result in opening the system identifier for the entity," +" and fail if it is not available." +msgstr "" +"设置当前的 :class:`~xml.sax.handler.EntityResolver`。 如果没有设置 " +":class:`~xml.sax.handler.EntityResolver`,尝试解析一个外部实体将导致打开该实体的系统标识符,并且如果它不可用则操作将失败。" + +#: ../../library/xml.sax.reader.rst:156 +msgid "Return the current :class:`~xml.sax.handler.ErrorHandler`." +msgstr "返回当前的 :class:`~xml.sax.handler.ErrorHandler`。" + +#: ../../library/xml.sax.reader.rst:161 +msgid "" +"Set the current error handler. If no :class:`~xml.sax.handler.ErrorHandler`" +" is set, errors will be raised as exceptions, and warnings will be printed." +msgstr "" +"设置当前的错误处理器。 如果没有设置 " +":class:`~xml.sax.handler.ErrorHandler`,错误将作为异常被引发,并将打印警告信息。" + +#: ../../library/xml.sax.reader.rst:167 +msgid "Allow an application to set the locale for errors and warnings." +msgstr "允许应用程序为错误和警告设置语言区域。" + +#: ../../library/xml.sax.reader.rst:169 +msgid "" +"SAX parsers are not required to provide localization for errors and " +"warnings; if they cannot support the requested locale, however, they must " +"raise a SAX exception. Applications may request a locale change in the " +"middle of a parse." +msgstr "" +"SAX 解析器不要求为错误和警告提供本地化信息;但是如果它们无法支持所请求的语言区域,则必须引发一个 SAX 异常。 " +"应用程序可以在解析的中途请求更改语言区域。" + +#: ../../library/xml.sax.reader.rst:176 +msgid "" +"Return the current setting for feature *featurename*. If the feature is not" +" recognized, :exc:`SAXNotRecognizedException` is raised. The well-known " +"featurenames are listed in the module :mod:`xml.sax.handler`." +msgstr "" +"返回 *featurename* 特性的当前设置。 如果特性无法被识别,则会引发 :exc:`SAXNotRecognizedException`。 在" +" :mod:`xml.sax.handler` 模块中列出了常见的特性名称。" + +#: ../../library/xml.sax.reader.rst:183 +msgid "" +"Set the *featurename* to *value*. If the feature is not recognized, " +":exc:`SAXNotRecognizedException` is raised. If the feature or its setting is" +" not supported by the parser, *SAXNotSupportedException* is raised." +msgstr "" +"将 *featurename* 设为 *value*。 如果特性无法被识别,则会引发 :exc:`SAXNotRecognizedException`。" +" 如果特性或其设置不被解析器所支持,则会引发 *SAXNotSupportedException*。" + +#: ../../library/xml.sax.reader.rst:190 +msgid "" +"Return the current setting for property *propertyname*. If the property is " +"not recognized, a :exc:`SAXNotRecognizedException` is raised. The well-known" +" propertynames are listed in the module :mod:`xml.sax.handler`." +msgstr "" +"返回 *propertyname* 属性的当前设置。 如果属性无法被识别,则会引发 :exc:`SAXNotRecognizedException`。 " +"在 :mod:`xml.sax.handler` 模块中列出了常见的属性名称。" + +#: ../../library/xml.sax.reader.rst:197 +msgid "" +"Set the *propertyname* to *value*. If the property is not recognized, " +":exc:`SAXNotRecognizedException` is raised. If the property or its setting " +"is not supported by the parser, *SAXNotSupportedException* is raised." +msgstr "" +"将 *propertyname* 设为 *value*。 如果属性无法被识别,则会引发 " +":exc:`SAXNotRecognizedException`。 如果属性或其设置不被解析器所支持,则会引发 " +"*SAXNotSupportedException*。" + +#: ../../library/xml.sax.reader.rst:205 +msgid "IncrementalParser Objects" +msgstr "IncrementalParser 对象" + +#: ../../library/xml.sax.reader.rst:207 +msgid "" +"Instances of :class:`IncrementalParser` offer the following additional " +"methods:" +msgstr ":class:`IncrementalParser` 的实例额外提供了下列方法:" + +#: ../../library/xml.sax.reader.rst:212 +msgid "Process a chunk of *data*." +msgstr "处理 *data* 的一个分块。" + +#: ../../library/xml.sax.reader.rst:217 +msgid "" +"Assume the end of the document. That will check well-formedness conditions " +"that can be checked only at the end, invoke handlers, and may clean up " +"resources allocated during parsing." +msgstr "确定文档的结尾。 这将检查只能在结尾处检查的格式是否良好的条件,唤起处理程序,并可能会清理在解析期间分配的资源。" + +#: ../../library/xml.sax.reader.rst:224 +msgid "" +"This method is called after close has been called to reset the parser so " +"that it is ready to parse new documents. The results of calling parse or " +"feed after close without calling reset are undefined." +msgstr "" +"此方法会在调用 close 来重置解析器以便其准备好解析新的文档之后被调用。 在 close 之后未调用 reset 即调用 parse 或 feed " +"的结果是未定义的。" + +#: ../../library/xml.sax.reader.rst:232 +msgid "Locator Objects" +msgstr "Locator 对象" + +#: ../../library/xml.sax.reader.rst:234 +msgid "Instances of :class:`Locator` provide these methods:" +msgstr ":class:`Locator` 的实例提供了下列方法:" + +#: ../../library/xml.sax.reader.rst:239 +msgid "Return the column number where the current event begins." +msgstr "返回当前事件开始位置的列号。" + +#: ../../library/xml.sax.reader.rst:244 +msgid "Return the line number where the current event begins." +msgstr "返回当前事件开始位置的行号。" + +#: ../../library/xml.sax.reader.rst:249 +msgid "Return the public identifier for the current event." +msgstr "返回当前事件的公有标识符。" + +#: ../../library/xml.sax.reader.rst:254 +msgid "Return the system identifier for the current event." +msgstr "返回当前事件的系统标识符。" + +#: ../../library/xml.sax.reader.rst:260 +msgid "InputSource Objects" +msgstr "InputSource 对象" + +#: ../../library/xml.sax.reader.rst:265 +msgid "Sets the public identifier of this :class:`InputSource`." +msgstr "设置该 :class:`InputSource` 的公有标识符。" + +#: ../../library/xml.sax.reader.rst:270 +msgid "Returns the public identifier of this :class:`InputSource`." +msgstr "返回此 :class:`InputSource` 的公有标识符。" + +#: ../../library/xml.sax.reader.rst:275 +msgid "Sets the system identifier of this :class:`InputSource`." +msgstr "设置此 :class:`InputSource` 的系统标识符。" + +#: ../../library/xml.sax.reader.rst:280 +msgid "Returns the system identifier of this :class:`InputSource`." +msgstr "返回此 :class:`InputSource` 的系统标识符。" + +#: ../../library/xml.sax.reader.rst:285 +msgid "Sets the character encoding of this :class:`InputSource`." +msgstr "设置此 :class:`InputSource` 的字符编码格式。" + +#: ../../library/xml.sax.reader.rst:287 +msgid "" +"The encoding must be a string acceptable for an XML encoding declaration " +"(see section 4.3.3 of the XML recommendation)." +msgstr "编码格式必须是 XML 编码声明可接受的字符串(参见 XML 建议规范第 4.3.3 节)。" + +#: ../../library/xml.sax.reader.rst:290 +msgid "" +"The encoding attribute of the :class:`InputSource` is ignored if the " +":class:`InputSource` also contains a character stream." +msgstr "" +"如果 :class:`InputSource` 还包含一个字符流则 :class:`InputSource` 的 encoding 属性会被忽略。" + +#: ../../library/xml.sax.reader.rst:296 +msgid "Get the character encoding of this InputSource." +msgstr "获取此 InputSource 的字符编码格式。" + +#: ../../library/xml.sax.reader.rst:301 +msgid "Set the byte stream (a :term:`binary file`) for this input source." +msgstr "设置此输入源的字节流(为 :term:`binary file` 对象)。" + +#: ../../library/xml.sax.reader.rst:303 +msgid "" +"The SAX parser will ignore this if there is also a character stream " +"specified, but it will use a byte stream in preference to opening a URI " +"connection itself." +msgstr "如果还指定了一个字符流被则 SAX 解析器会忽略此设置,但它将优先使用字节流而不是自己打开一个 URI 连接。" + +#: ../../library/xml.sax.reader.rst:306 +msgid "" +"If the application knows the character encoding of the byte stream, it " +"should set it with the setEncoding method." +msgstr "如果应用程序知道字节流的字符编码格式,它应当使用 setEncoding 方法来设置它。" + +#: ../../library/xml.sax.reader.rst:312 +msgid "Get the byte stream for this input source." +msgstr "获取此输入源的字节流。" + +#: ../../library/xml.sax.reader.rst:314 +msgid "" +"The getEncoding method will return the character encoding for this byte " +"stream, or ``None`` if unknown." +msgstr "getEncoding 方法将返回该字节流的字符编码格式,如果未知则返回 ``None``。" + +#: ../../library/xml.sax.reader.rst:320 +msgid "Set the character stream (a :term:`text file`) for this input source." +msgstr "设置此输入源的字符流 (为 :term:`text file` 对象)。" + +#: ../../library/xml.sax.reader.rst:322 +msgid "" +"If there is a character stream specified, the SAX parser will ignore any " +"byte stream and will not attempt to open a URI connection to the system " +"identifier." +msgstr "如果指定了一个字符流,SAX 解析器将忽略任何字节流并且不会尝试打开一个指向系统标识符的 URI 连接。" + +#: ../../library/xml.sax.reader.rst:328 +msgid "Get the character stream for this input source." +msgstr "获取此输入源的字符流。" + +#: ../../library/xml.sax.reader.rst:334 +msgid "The :class:`Attributes` Interface" +msgstr ":class:`Attributes` 接口" + +#: ../../library/xml.sax.reader.rst:336 +msgid "" +":class:`Attributes` objects implement a portion of the :term:`mapping " +"protocol `, including the methods " +":meth:`~collections.abc.Mapping.copy`, :meth:`~collections.abc.Mapping.get`," +" :meth:`~object.__contains__`, :meth:`~collections.abc.Mapping.items`, " +":meth:`~collections.abc.Mapping.keys`, and " +":meth:`~collections.abc.Mapping.values`. The following methods are also " +"provided:" +msgstr "" +":class:`Attributes` 对象实现了一部分 :term:`映射协议 `,包括 " +":meth:`~collections.abc.Mapping.copy`, :meth:`~collections.abc.Mapping.get`," +" :meth:`~object.__contains__`, :meth:`~collections.abc.Mapping.items`, " +":meth:`~collections.abc.Mapping.keys` 和 " +":meth:`~collections.abc.Mapping.values` 等方法。 还提供了下列方法:" + +#: ../../library/xml.sax.reader.rst:346 +msgid "Return the number of attributes." +msgstr "返回属性的数量。" + +#: ../../library/xml.sax.reader.rst:351 +msgid "Return the names of the attributes." +msgstr "返回属性的名称。" + +#: ../../library/xml.sax.reader.rst:356 +msgid "" +"Returns the type of the attribute *name*, which is normally ``'CDATA'``." +msgstr "返回属性 *name* 的类型,通常为 ``'CDATA'``。" + +#: ../../library/xml.sax.reader.rst:361 +msgid "Return the value of attribute *name*." +msgstr "返回属性 *name* 的值。" + +#: ../../library/xml.sax.reader.rst:370 +msgid "The :class:`AttributesNS` Interface" +msgstr ":class:`AttributesNS` 接口" + +#: ../../library/xml.sax.reader.rst:372 +msgid "" +"This interface is a subtype of the :class:`Attributes` interface (see " +"section :ref:`attributes-objects`). All methods supported by that interface" +" are also available on :class:`AttributesNS` objects." +msgstr "" +"此接口是 :class:`Attributes` 接口(参见 :ref:`attributes-objects` 章节)的一个子类型。 " +"那个接口所支持的所有方法在 :class:`AttributesNS` 对象上也都可用。" + +#: ../../library/xml.sax.reader.rst:376 +msgid "The following methods are also available:" +msgstr "下列方法也是可用的:" + +#: ../../library/xml.sax.reader.rst:381 +msgid "Return the value for a qualified name." +msgstr "返回一个限定名称的值。" + +#: ../../library/xml.sax.reader.rst:386 +msgid "Return the ``(namespace, localname)`` pair for a qualified *name*." +msgstr "返回限定名称 *name* 的 ``(namespace, localname)`` 对。" + +#: ../../library/xml.sax.reader.rst:391 +msgid "Return the qualified name for a ``(namespace, localname)`` pair." +msgstr "返回 ``(namespace, localname)`` 对的限定名称。" + +#: ../../library/xml.sax.reader.rst:396 +msgid "Return the qualified names of all attributes." +msgstr "返回所有属性的限定名称。" diff --git a/library/xml.sax.utils.po b/library/xml.sax.utils.po new file mode 100644 index 000000000..4d680f9c4 --- /dev/null +++ b/library/xml.sax.utils.po @@ -0,0 +1,138 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) 2001-2024, Python Software Foundation +# This file is distributed under the same license as the Python package. +# FIRST AUTHOR , YEAR. +# +# Translators: +# Freesand Leo , 2020 +# Rafael Fontenelle , 2024 +# +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: Python 3.9\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2024-02-16 21:12+0000\n" +"PO-Revision-Date: 2017-02-16 23:37+0000\n" +"Last-Translator: Rafael Fontenelle , 2024\n" +"Language-Team: Chinese (China) (https://app.transifex.com/python-doc/teams/5390/zh_CN/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: zh_CN\n" +"Plural-Forms: nplurals=1; plural=0;\n" + +#: ../../library/xml.sax.utils.rst:2 +msgid ":mod:`xml.sax.saxutils` --- SAX Utilities" +msgstr ":mod:`xml.sax.saxutils` --- SAX 工具集" + +#: ../../library/xml.sax.utils.rst:10 +msgid "**Source code:** :source:`Lib/xml/sax/saxutils.py`" +msgstr "**源代码:** :source:`Lib/xml/sax/saxutils.py`" + +#: ../../library/xml.sax.utils.rst:14 +msgid "" +"The module :mod:`xml.sax.saxutils` contains a number of classes and " +"functions that are commonly useful when creating SAX applications, either in" +" direct use, or as base classes." +msgstr "" +":mod:`xml.sax.saxutils` 模块包含一些在创建 SAX 应用程序时十分有用的类和函数,它们可以被直接使用,或者是作为基类使用。" + +#: ../../library/xml.sax.utils.rst:21 +msgid "Escape ``'&'``, ``'<'``, and ``'>'`` in a string of data." +msgstr "对数据字符串中的 ``'&'``, ``'<'`` 和 ``'>'`` 进行转义。" + +#: ../../library/xml.sax.utils.rst:23 +msgid "" +"You can escape other strings of data by passing a dictionary as the optional" +" *entities* parameter. The keys and values must all be strings; each key " +"will be replaced with its corresponding value. The characters ``'&'``, " +"``'<'`` and ``'>'`` are always escaped, even if *entities* is provided." +msgstr "" +"你可以通过传入一个字典作为可选的 *entities* 形参来对其他字符串数据进行转义。 字典的键和值必须为字符串;每个键将被替换为其所对应的值。 字符" +" ``'&'``, ``'<'`` 和 ``'>'`` 总是会被转义,即使提供了 *entities*。" + +#: ../../library/xml.sax.utils.rst:31 +msgid "Unescape ``'&'``, ``'<'``, and ``'>'`` in a string of data." +msgstr "对字符串数据中的 ``'&'``, ``'<'`` 和 ``'>'`` 进行反转义。" + +#: ../../library/xml.sax.utils.rst:33 +msgid "" +"You can unescape other strings of data by passing a dictionary as the " +"optional *entities* parameter. The keys and values must all be strings; " +"each key will be replaced with its corresponding value. ``'&'``, " +"``'<'``, and ``'>'`` are always unescaped, even if *entities* is " +"provided." +msgstr "" +"你可以通过传入一个字典作为可选的 *entities* 形参来对其他数据字符串进行转义。 字典的键和值必须都为字符串;每个键将被替换为所对应的值。 " +"``'&'``, ``'<'`` 和 ``'>'`` 将总是保持不被转义,即使提供了 *entities*。" + +#: ../../library/xml.sax.utils.rst:41 +msgid "" +"Similar to :func:`escape`, but also prepares *data* to be used as an " +"attribute value. The return value is a quoted version of *data* with any " +"additional required replacements. :func:`quoteattr` will select a quote " +"character based on the content of *data*, attempting to avoid encoding any " +"quote characters in the string. If both single- and double-quote characters" +" are already in *data*, the double-quote characters will be encoded and " +"*data* will be wrapped in double-quotes. The resulting string can be used " +"directly as an attribute value::" +msgstr "" +"类似于 :func:`escape`,但还会对 *data* 进行处理以将其用作属性值。 返回值是 *data* " +"加上任何额外要求的替换的带引号版本。:func:`quoteattr` 将基于 *data* " +"的内容选择一个引号字符,以尽量避免在字符串中编码任何引号字符。 如果单双引号字符在 *data* 中都存在,则双引号字符将被编码并且 *data* " +"将使用双引号来标记。 结果字符串可被直接用作属性值::" + +#: ../../library/xml.sax.utils.rst:53 +msgid "" +"This function is useful when generating attribute values for HTML or any " +"SGML using the reference concrete syntax." +msgstr "此函数适用于为 HTML 或任何使用引用实体语法的 SGML 生成属性值。" + +#: ../../library/xml.sax.utils.rst:59 +msgid "" +"This class implements the :class:`~xml.sax.handler.ContentHandler` interface" +" by writing SAX events back into an XML document. In other words, using an " +":class:`XMLGenerator` as the content handler will reproduce the original " +"document being parsed. *out* should be a file-like object which will default" +" to *sys.stdout*. *encoding* is the encoding of the output stream which " +"defaults to ``'iso-8859-1'``. *short_empty_elements* controls the formatting" +" of elements that contain no content: if ``False`` (the default) they are " +"emitted as a pair of start/end tags, if set to ``True`` they are emitted as " +"a single self-closed tag." +msgstr "" +"这个类通过将 SAX 事件写回到 XML 文档来实现 :class:`~xml.sax.handler.ContentHandler` 接口。 " +"换句话说,使用 :class:`XMLGenerator` 作为内容处理程序将重新产生所解析的原始文档。 *out* 应当为一个文件型对象,它默认将为 " +"*sys.stdout*。 *encoding* 为输出流的编码格式,它默认将为 ``'iso-8859-1'``。 " +"*short_empty_elements* 控制不包含内容的元素的格式化:如为 ``False`` (默认值) " +"则它们会以开始/结束标记对的形式被发送,如果设为 ``True`` 则它们会以单个自结束标记的形式被发送。" + +#: ../../library/xml.sax.utils.rst:69 +msgid "The *short_empty_elements* parameter." +msgstr "*short_empty_elements* 形参。" + +#: ../../library/xml.sax.utils.rst:75 +msgid "" +"This class is designed to sit between an " +":class:`~xml.sax.xmlreader.XMLReader` and the client application's event " +"handlers. By default, it does nothing but pass requests up to the reader " +"and events on to the handlers unmodified, but subclasses can override " +"specific methods to modify the event stream or the configuration requests as" +" they pass through." +msgstr "" +"这个类被设计用来分隔 :class:`~xml.sax.xmlreader.XMLReader` 和客户端应用的事件处理程序。 " +"在默认情况下,它除了将请求传送给读取器并将事件传送给处理程序之外什么都不做,但其子类可以重载特定的方法以在传送它们的时候修改事件流或配置请求。" + +#: ../../library/xml.sax.utils.rst:85 +msgid "" +"This function takes an input source and an optional base URL and returns a " +"fully resolved :class:`~xml.sax.xmlreader.InputSource` object ready for " +"reading. The input source can be given as a string, a file-like object, or " +"an :class:`~xml.sax.xmlreader.InputSource` object; parsers will use this " +"function to implement the polymorphic *source* argument to their " +":meth:`parse` method." +msgstr "" +"此函数接受一个输入源和一个可选的基准 URL 并返回一个经过完整解析可供读取的 " +":class:`~xml.sax.xmlreader.InputSource`。 输入源的给出形式可以为字符串、文件类对象或 " +":class:`~xml.sax.xmlreader.InputSource` 对象;解析器将使用此函数来针对它们的 :meth:`parse` " +"方法实现多态 *source* 参数。" diff --git a/library/xmlrpc.client.po b/library/xmlrpc.client.po new file mode 100644 index 000000000..8de40e58f --- /dev/null +++ b/library/xmlrpc.client.po @@ -0,0 +1,685 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) 2001-2025, Python Software Foundation +# This file is distributed under the same license as the Python package. +# FIRST AUTHOR , YEAR. +# +# Translators: +# Larry Wang , 2019 +# Kade For, 2019 +# ppcfish , 2019 +# Freesand Leo , 2021 +# Rafael Fontenelle , 2025 +# +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: Python 3.9\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2025-02-07 16:40+0000\n" +"PO-Revision-Date: 2017-02-16 23:37+0000\n" +"Last-Translator: Rafael Fontenelle , 2025\n" +"Language-Team: Chinese (China) (https://app.transifex.com/python-doc/teams/5390/zh_CN/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: zh_CN\n" +"Plural-Forms: nplurals=1; plural=0;\n" + +#: ../../library/xmlrpc.client.rst:2 +msgid ":mod:`xmlrpc.client` --- XML-RPC client access" +msgstr ":mod:`xmlrpc.client` --- XML-RPC 客户端访问" + +#: ../../library/xmlrpc.client.rst:10 +msgid "**Source code:** :source:`Lib/xmlrpc/client.py`" +msgstr "**源代码:** :source:`Lib/xmlrpc/client.py`" + +#: ../../library/xmlrpc.client.rst:17 +msgid "" +"XML-RPC is a Remote Procedure Call method that uses XML passed via HTTP(S) " +"as a transport. With it, a client can call methods with parameters on a " +"remote server (the server is named by a URI) and get back structured data. " +"This module supports writing XML-RPC client code; it handles all the details" +" of translating between conformable Python objects and XML on the wire." +msgstr "" +"XML-RPC 是一种远程过程调用方法,它以使用 HTTP(S) 传递的 XML 作为载体。 通过它,客户端可以在远程服务器(服务器以 URI " +"指明)上调用带参数的方法并获取结构化的数据。 本模块支持编写 XML-RPC 客户端代码;它会处理在通用 Python 对象和 XML " +"之间进行在线翻译的所有细节。" + +#: ../../library/xmlrpc.client.rst:26 +msgid "" +"The :mod:`xmlrpc.client` module is not secure against maliciously " +"constructed data. If you need to parse untrusted or unauthenticated data " +"see :ref:`xml-vulnerabilities`." +msgstr "" +":mod:`xmlrpc.client` 模块对于恶意构建的数据是不安全的。 如果你需要解析不受信任或未经身份验证的数据,请参阅 :ref:`xml-" +"vulnerabilities`。" + +#: ../../library/xmlrpc.client.rst:32 +msgid "" +"For HTTPS URIs, :mod:`xmlrpc.client` now performs all the necessary " +"certificate and hostname checks by default." +msgstr "对于 HTTPS URI,现在 :mod:`xmlrpc.client` 默认会执行所有必要的证书和主机名检查。" + +#: ../../library/xmlrpc.client.rst:39 +msgid "" +"A :class:`ServerProxy` instance is an object that manages communication with" +" a remote XML-RPC server. The required first argument is a URI (Uniform " +"Resource Indicator), and will normally be the URL of the server. The " +"optional second argument is a transport factory instance; by default it is " +"an internal :class:`SafeTransport` instance for https: URLs and an internal " +"HTTP :class:`Transport` instance otherwise. The optional third argument is " +"an encoding, by default UTF-8. The optional fourth argument is a debugging " +"flag." +msgstr "" +":class:`ServerProxy` 实例是管理与远程 XML-RPC 服务器通信的对象。 要求的第一个参数为 URI " +"(统一资源定位符),通常就是服务器的 URL。 可选的第二个参数为传输工厂实例;在默认情况下对于 https: URL 是一个内部 " +":class:`SafeTransport` 实例,在其他情况下则是一个内部 HTTP :class:`Transport` 实例。 " +"可选的第三个参数为编码格式,默认为 UTF-8。 可选的第四个参数为调试旗标。" + +#: ../../library/xmlrpc.client.rst:47 +msgid "" +"The following parameters govern the use of the returned proxy instance. If " +"*allow_none* is true, the Python constant ``None`` will be translated into " +"XML; the default behaviour is for ``None`` to raise a :exc:`TypeError`. This" +" is a commonly-used extension to the XML-RPC specification, but isn't " +"supported by all clients and servers; see `http://ontosys.com/xml-" +"rpc/extensions.php " +"`_ for a description. The *use_builtin_types* flag can be" +" used to cause date/time values to be presented as " +":class:`datetime.datetime` objects and binary data to be presented as " +":class:`bytes` objects; this flag is false by default. " +":class:`datetime.datetime`, :class:`bytes` and :class:`bytearray` objects " +"may be passed to calls. The *headers* parameter is an optional sequence of " +"HTTP headers to send with each request, expressed as a sequence of 2-tuples " +"representing the header name and value. (e.g. `[('Header-Name', 'value')]`)." +" The obsolete *use_datetime* flag is similar to *use_builtin_types* but it " +"applies only to date/time values." +msgstr "" +"下列形参控制所返回代理实例的使用。 如果 *allow_none* 为真值,则 Python 常量 ``None`` 将被转写为 XML;默认行为是针对" +" ``None`` 引发 :exc:`TypeError`。 这是对 XML-RPC 规格的一个常用扩展,但并不被所有客户端和服务器所支持;请参阅 " +"`http://ontosys.com/xml-rpc/extensions.php " +"`_ 了解详情。 *use_builtin_types* 旗标可被用来将日期/时间值表示为 " +":class:`datetime.datetime` 对象而将二进制数据表示为 :class:`bytes` 对象;此旗标默认为假值。 " +":class:`datetime.datetime`, :class:`bytes` 和 :class:`bytearray` 对象可以被传给调用操作。" +" *headers* 形参为可选的随每次请求发送的 HTTP 标头序列,其形式为包含代表标头名称和值的 2 元组的序列 (例如 `[('Header-" +"Name', 'value')]`)。 已不再适用的 *use_datetime* 旗标与 *use_builtin_types* " +"类似但它只针对日期/时间值。" + +#: ../../library/xmlrpc.client.rst:65 ../../library/xmlrpc.client.rst:546 +msgid "The *use_builtin_types* flag was added." +msgstr "增加了 *use_builtin_types* 旗标。" + +#: ../../library/xmlrpc.client.rst:68 +msgid "The *headers* parameter was added." +msgstr "增加了 *headers* 形参。" + +#: ../../library/xmlrpc.client.rst:71 +msgid "" +"Both the HTTP and HTTPS transports support the URL syntax extension for HTTP" +" Basic Authentication: ``http://user:pass@host:port/path``. The " +"``user:pass`` portion will be base64-encoded as an HTTP 'Authorization' " +"header, and sent to the remote server as part of the connection process when" +" invoking an XML-RPC method. You only need to use this if the remote server" +" requires a Basic Authentication user and password. If an HTTPS URL is " +"provided, *context* may be :class:`ssl.SSLContext` and configures the SSL " +"settings of the underlying HTTPS connection." +msgstr "" +"HTTP 和 HTTPS 传输均支持用于 HTTP 基本身份验证的 URL 语法扩展: " +"``http://user:pass@host:port/path``。 ``user:pass`` 部分将以 base64 编码为 HTTP " +"'Authorization' 标头,并在唤起 XML-RPC 方法时作为连接过程的一部分发送给远程服务器。 " +"你只需要在远程服务器要求基本身份验证账号和密码时使用此语法。 如果提供了 HTTPS URL,*context* 可以为 " +":class:`ssl.SSLContext` 并配置有下层 HTTPS 连接的 SSL 设置。" + +#: ../../library/xmlrpc.client.rst:80 +msgid "" +"The returned instance is a proxy object with methods that can be used to " +"invoke corresponding RPC calls on the remote server. If the remote server " +"supports the introspection API, the proxy can also be used to query the " +"remote server for the methods it supports (service discovery) and fetch " +"other server-associated metadata." +msgstr "" +"返回的实例是一个代理对象,具有可被用来在远程服务器上发起相应 RPC 调用的方法。 如果远程服务器支持内省 " +"API,则也可使用该代理对象在远程服务器上查询它所支持的方法(服务发现)并获取其他服务器相关的元数据" + +#: ../../library/xmlrpc.client.rst:86 +msgid "" +"Types that are conformable (e.g. that can be marshalled through XML), " +"include the following (and except where noted, they are unmarshalled as the " +"same Python type):" +msgstr "" +"适用的类型(即可通过 XML 生成 marshall 对象),包括如下类型(除了已说明的例外,它们都会被反 marshall 为同样的 Python " +"类型):" + +#: ../../library/xmlrpc.client.rst:93 +msgid "XML-RPC type" +msgstr "XML-RPC类型" + +#: ../../library/xmlrpc.client.rst:93 +msgid "Python type" +msgstr "Python 类型" + +#: ../../library/xmlrpc.client.rst:95 +msgid "``boolean``" +msgstr "``boolean``" + +#: ../../library/xmlrpc.client.rst:95 +msgid ":class:`bool`" +msgstr ":class:`bool`" + +#: ../../library/xmlrpc.client.rst:97 +msgid "``int``, ``i1``, ``i2``, ``i4``, ``i8`` or ``biginteger``" +msgstr "``int``, ``i1``, ``i2``, ``i4``, ``i8`` 或者 ``biginteger``" + +#: ../../library/xmlrpc.client.rst:97 +msgid "" +":class:`int` in range from -2147483648 to 2147483647. Values get the " +"```` tag." +msgstr ":class:`int` 的范围从 -2147483648 到 2147483647。值将获得 ```` 标志。" + +#: ../../library/xmlrpc.client.rst:102 +msgid "``double`` or ``float``" +msgstr "``double`` 或 ``float``" + +#: ../../library/xmlrpc.client.rst:102 +msgid ":class:`float`. Values get the ```` tag." +msgstr ":class:`float`。值将获得 ```` 标志。" + +#: ../../library/xmlrpc.client.rst:105 +msgid "``string``" +msgstr "``string``" + +#: ../../library/xmlrpc.client.rst:105 +msgid ":class:`str`" +msgstr ":class:`str`" + +#: ../../library/xmlrpc.client.rst:107 +msgid "``array``" +msgstr "``array``" + +#: ../../library/xmlrpc.client.rst:107 +msgid "" +":class:`list` or :class:`tuple` containing conformable elements. Arrays are" +" returned as :class:`lists `." +msgstr ":class:`list` 或 :class:`tuple` 包含整合元素。数组以 :class:`lists ` 形式返回。" + +#: ../../library/xmlrpc.client.rst:111 +msgid "``struct``" +msgstr "``struct``" + +#: ../../library/xmlrpc.client.rst:111 +msgid "" +":class:`dict`. Keys must be strings, values may be any conformable type. " +"Objects of user-defined classes can be passed in; only their " +":attr:`~object.__dict__` attribute is transmitted." +msgstr "" +":class:`dict`。 键必须为字符串,值可以为任何适用的类型。 可以传入用户自定义类的对象;只有其 " +":attr:`~object.__dict__` 属性会被传输。" + +#: ../../library/xmlrpc.client.rst:116 +msgid "``dateTime.iso8601``" +msgstr "``dateTime.iso8601``" + +#: ../../library/xmlrpc.client.rst:116 +msgid "" +":class:`DateTime` or :class:`datetime.datetime`. Returned type depends on " +"values of *use_builtin_types* and *use_datetime* flags." +msgstr "" +":class:`DateTime` 或 :class:`datetime.datetime`。返回的类型取决于 *use_builtin_types* " +"和 *use_datetime* 标志的值。" + +#: ../../library/xmlrpc.client.rst:120 +msgid "``base64``" +msgstr "``base64``" + +#: ../../library/xmlrpc.client.rst:120 +msgid "" +":class:`Binary`, :class:`bytes` or :class:`bytearray`. Returned type " +"depends on the value of the *use_builtin_types* flag." +msgstr "" +":class:`Binary`, :class:`bytes` 或 :class:`bytearray`。返回的类型取决于 " +"*use_builtin_types* 标志的值。" + +#: ../../library/xmlrpc.client.rst:124 +msgid "``nil``" +msgstr "``nil``" + +#: ../../library/xmlrpc.client.rst:124 +msgid "" +"The ``None`` constant. Passing is allowed only if *allow_none* is true." +msgstr "``None`` 常量。仅当 *allow_none* 为true时才允许传递。" + +#: ../../library/xmlrpc.client.rst:127 +msgid "``bigdecimal``" +msgstr "``bigdecimal``" + +#: ../../library/xmlrpc.client.rst:127 +msgid ":class:`decimal.Decimal`. Returned type only." +msgstr ":class:`decimal.Decimal`. 仅返回类型。" + +#: ../../library/xmlrpc.client.rst:130 +msgid "" +"This is the full set of data types supported by XML-RPC. Method calls may " +"also raise a special :exc:`Fault` instance, used to signal XML-RPC server " +"errors, or :exc:`ProtocolError` used to signal an error in the HTTP/HTTPS " +"transport layer. Both :exc:`Fault` and :exc:`ProtocolError` derive from a " +"base class called :exc:`Error`. Note that the xmlrpc client module " +"currently does not marshal instances of subclasses of built-in types." +msgstr "" +"这是This is the full set of data types supported by XML-RPC 所支持数据类型的完整集合。 " +"方法调用也可能引发一个特殊的 :exc:`Fault` 实例,用来提示 XML-RPC 服务器错误,或是用 :exc:`ProtocolError` " +"来提示 HTTP/HTTPS 传输层中的错误。 :exc:`Fault` 和 :exc:`ProtocolError` 都派生自名为 " +":exc:`Error` 的基类。 请注意 xmlrpc client 模块目前不可 marshal 内置类型的子类的实例。" + +#: ../../library/xmlrpc.client.rst:137 +msgid "" +"When passing strings, characters special to XML such as ``<``, ``>``, and " +"``&`` will be automatically escaped. However, it's the caller's " +"responsibility to ensure that the string is free of characters that aren't " +"allowed in XML, such as the control characters with ASCII values between 0 " +"and 31 (except, of course, tab, newline and carriage return); failing to do " +"this will result in an XML-RPC request that isn't well-formed XML. If you " +"have to pass arbitrary bytes via XML-RPC, use :class:`bytes` or " +":class:`bytearray` classes or the :class:`Binary` wrapper class described " +"below." +msgstr "" +"当传入字符串时,XML 中的特殊字符如 ``<``, ``>`` 和 ``&`` 将被自动转义。 但是,调用方有责任确保字符串中没有 XML " +"中不允许的字符,例如 ASCII 值在 0 和 31 之间的控制字符(当然,制表、换行和回车除外);不这样做将导致 XML-RPC 请求的 XML " +"格式不正确。 如果你必须通过 XML-RPC 传入任意字节数据,请使用 :class:`bytes` 或 :class:`bytearray` " +"类或者下文描述的 :class:`Binary` 包装器类。" + +#: ../../library/xmlrpc.client.rst:146 +msgid "" +":class:`Server` is retained as an alias for :class:`ServerProxy` for " +"backwards compatibility. New code should use :class:`ServerProxy`." +msgstr "" +":class:`Server` 被保留作为 :class:`ServerProxy` 的别名用于向下兼容。 新的代码应当使用 " +":class:`ServerProxy`。" + +#: ../../library/xmlrpc.client.rst:149 +msgid "Added the *context* argument." +msgstr "增加了 *context* 参数。" + +#: ../../library/xmlrpc.client.rst:152 +msgid "" +"Added support of type tags with prefixes (e.g. ``ex:nil``). Added support of" +" unmarshalling additional types used by Apache XML-RPC implementation for " +"numerics: ``i1``, ``i2``, ``i8``, ``biginteger``, ``float`` and " +"``bigdecimal``. See http://ws.apache.org/xmlrpc/types.html for a " +"description." +msgstr "" +"增加了对带有前缀的类型标签的支持 (例如 ``ex:nil``)。 增加了对反 marshall 被 Apache XML-RPC " +"实现用于表示数值的附加类型的支持: ``i1``, ``i2``, ``i8``, ``biginteger``, ``float`` 和 " +"``bigdecimal``。 请参阅 http://ws.apache.org/xmlrpc/types.html 了解详情。" + +#: ../../library/xmlrpc.client.rst:164 +msgid "`XML-RPC HOWTO `_" +msgstr "`XML-RPC HOWTO `_" + +#: ../../library/xmlrpc.client.rst:163 +msgid "" +"A good description of XML-RPC operation and client software in several " +"languages. Contains pretty much everything an XML-RPC client developer needs" +" to know." +msgstr "以多种语言对 XML-RPC 操作和客户端软件进行了很好的说明。 包含 XML-RPC 客户端开发者所需知道的几乎任何事情。" + +#: ../../library/xmlrpc.client.rst:167 +msgid "" +"`XML-RPC Introspection " +"`_" +msgstr "" +"`XML-RPC Introspection " +"`_" + +#: ../../library/xmlrpc.client.rst:167 +msgid "Describes the XML-RPC protocol extension for introspection." +msgstr "描述了用于内省的 XML-RPC 协议扩展。" + +#: ../../library/xmlrpc.client.rst:169 +msgid "`XML-RPC Specification `_" +msgstr "`XML-RPC Specification `_" + +#: ../../library/xmlrpc.client.rst:170 +msgid "The official specification." +msgstr "官方规范说明。" + +#: ../../library/xmlrpc.client.rst:175 +msgid "ServerProxy Objects" +msgstr "ServerProxy 对象" + +#: ../../library/xmlrpc.client.rst:177 +msgid "" +"A :class:`ServerProxy` instance has a method corresponding to each remote " +"procedure call accepted by the XML-RPC server. Calling the method performs " +"an RPC, dispatched by both name and argument signature (e.g. the same method" +" name can be overloaded with multiple argument signatures). The RPC " +"finishes by returning a value, which may be either returned data in a " +"conformant type or a :class:`Fault` or :class:`ProtocolError` object " +"indicating an error." +msgstr "" +":class:`ServerProxy` 实例有一个方法与 XML-RPC 服务器所接受的每个远程过程调用相对应。 调用该方法会执行一个 " +"RPC,通过名称和参数签名来调度(例如同一个方法名可通过多个参数签名来重载)。 RPC 结束时返回一个值,它可以是适用类型的返回数据或是表示错误的 " +":class:`Fault` 或 :class:`ProtocolError` 对象。" + +#: ../../library/xmlrpc.client.rst:184 +msgid "" +"Servers that support the XML introspection API support some common methods " +"grouped under the reserved :attr:`~ServerProxy.system` attribute:" +msgstr "支持 XML 内省 API 的服务器还支持一些以保留的 :attr:`~ServerProxy.system` 属性分组的通用方法:" + +#: ../../library/xmlrpc.client.rst:190 +msgid "" +"This method returns a list of strings, one for each (non-system) method " +"supported by the XML-RPC server." +msgstr "此方法返回一个字符串列表,每个字符串都各自对应 XML-RPC 服务器所支持的(非系统)方法。" + +#: ../../library/xmlrpc.client.rst:196 +msgid "" +"This method takes one parameter, the name of a method implemented by the " +"XML-RPC server. It returns an array of possible signatures for this method. " +"A signature is an array of types. The first of these types is the return " +"type of the method, the rest are parameters." +msgstr "" +"此方法接受一个形参,即某个由 XML-RPC 服务器所实现的方法名称。 它返回一个由此方法可能的签名组成的数组。 一个签名就是一个类型数组。 " +"这些类型中的第一个是方法的的返回类型,其余的均为形参。" + +#: ../../library/xmlrpc.client.rst:201 +msgid "" +"Because multiple signatures (ie. overloading) is permitted, this method " +"returns a list of signatures rather than a singleton." +msgstr "由于允许多个签名(即重载),此方法是返回一个签名列表而非一个单例。" + +#: ../../library/xmlrpc.client.rst:204 +msgid "" +"Signatures themselves are restricted to the top level parameters expected by" +" a method. For instance if a method expects one array of structs as a " +"parameter, and it returns a string, its signature is simply \"string, " +"array\". If it expects three integers and returns a string, its signature is" +" \"string, int, int, int\"." +msgstr "" +"签名本身被限制为一个方法所期望的最高层级形参。 举例来说如果一个方法期望有一个结构体数组作为形参,并返回一个字符串,则其签名就是 \"string, " +"array\"。 如果它期望有三个整数并返回一个字符串,则其签名是 \"string, int, int, int\"。" + +#: ../../library/xmlrpc.client.rst:209 +msgid "" +"If no signature is defined for the method, a non-array value is returned. In" +" Python this means that the type of the returned value will be something " +"other than list." +msgstr "如果方法没有定义任何签名,则将返回一个非数组值。 在 Python 中这意味着返回值的类型为列表以外的类型。" + +#: ../../library/xmlrpc.client.rst:216 +msgid "" +"This method takes one parameter, the name of a method implemented by the " +"XML-RPC server. It returns a documentation string describing the use of " +"that method. If no such string is available, an empty string is returned. " +"The documentation string may contain HTML markup." +msgstr "" +"此方法接受一个形参,即 XML-RPC 服务器所实现的某个方法的名称。 它返回描述相应方法用法的文档字符串。 如果没有可用的文档字符串,则返回空字符串。" +" 文档字符串可以包含 HTML 标记。" + +#: ../../library/xmlrpc.client.rst:223 +msgid "" +"Instances of :class:`ServerProxy` support the :term:`context manager` " +"protocol for closing the underlying transport." +msgstr ":class:`ServerProxy` 的实例支持 :term:`context manager` 协议用于关闭下层传输。" + +#: ../../library/xmlrpc.client.rst:227 ../../library/xmlrpc.client.rst:273 +msgid "A working example follows. The server code::" +msgstr "以下是一个可运行的示例。 服务器端代码::" + +#: ../../library/xmlrpc.client.rst:239 ../../library/xmlrpc.client.rst:288 +#: ../../library/xmlrpc.client.rst:398 ../../library/xmlrpc.client.rst:504 +msgid "The client code for the preceding server::" +msgstr "前述服务器的客户端代码::" + +#: ../../library/xmlrpc.client.rst:250 +msgid "DateTime Objects" +msgstr "DateTime 对象" + +#: ../../library/xmlrpc.client.rst:254 +msgid "" +"This class may be initialized with seconds since the epoch, a time tuple, an" +" ISO 8601 time/date string, or a :class:`datetime.datetime` instance. It " +"has the following methods, supported mainly for internal use by the " +"marshalling/unmarshalling code:" +msgstr "" +"该类的初始化可以使用距离 Unix 纪元的秒数、时间元组、ISO 8601 时间/日期字符串或 :class:`datetime.datetime` " +"实例。 它具有下列方法,主要是为 marshall 和反 marshall 代码的内部使用提供支持:" + +#: ../../library/xmlrpc.client.rst:262 +msgid "Accept a string as the instance's new time value." +msgstr "接受一个字符串作为实例的新时间值。" + +#: ../../library/xmlrpc.client.rst:267 +msgid "" +"Write the XML-RPC encoding of this :class:`DateTime` item to the *out* " +"stream object." +msgstr "将此 :class:`DateTime` 条目的 XML-RPC 编码格式写入到 *out* 流对象。" + +#: ../../library/xmlrpc.client.rst:270 +msgid "" +"It also supports certain of Python's built-in operators through rich " +"comparison and :meth:`__repr__` methods." +msgstr "它还通过富比较和 :meth:`__repr__` 方法来支持某些 Python 内置运算符。" + +#: ../../library/xmlrpc.client.rst:303 +msgid "Binary Objects" +msgstr "Binary 对象" + +#: ../../library/xmlrpc.client.rst:307 +msgid "" +"This class may be initialized from bytes data (which may include NULs). The " +"primary access to the content of a :class:`Binary` object is provided by an " +"attribute:" +msgstr "该类的初始化可以使用字节数据(可包括 NUL)。 对 :class:`Binary` 对象的初始访问是由一个属性来提供的:" + +#: ../../library/xmlrpc.client.rst:314 +msgid "" +"The binary data encapsulated by the :class:`Binary` instance. The data is " +"provided as a :class:`bytes` object." +msgstr "被 :class:`Binary` 实例封装的二进制数据。 该数据以 :class:`bytes` 对象的形式提供。" + +#: ../../library/xmlrpc.client.rst:317 +msgid "" +":class:`Binary` objects have the following methods, supported mainly for " +"internal use by the marshalling/unmarshalling code:" +msgstr ":class:`Binary` 对象具有下列方法,支持这些方法主要是供 marshall 和反 marshall 代码在内部使用:" + +#: ../../library/xmlrpc.client.rst:323 +msgid "" +"Accept a base64 :class:`bytes` object and decode it as the instance's new " +"data." +msgstr "接受一个 base64 :class:`bytes` 对象并将其解码为实例的新数据。" + +#: ../../library/xmlrpc.client.rst:328 +msgid "" +"Write the XML-RPC base 64 encoding of this binary item to the *out* stream " +"object." +msgstr "将此二进制条目的 XML-RPC base 64 编码格式写入到 *out* 流对象。" + +#: ../../library/xmlrpc.client.rst:330 +msgid "" +"The encoded data will have newlines every 76 characters as per :rfc:`RFC " +"2045 section 6.8 <2045#section-6.8>`, which was the de facto standard base64" +" specification when the XML-RPC spec was written." +msgstr "" +"被编码数据将依据 :rfc:`RFC 2045 第 6.8 节 <2045#section-6.8>` 每 76 个字符换行一次,这是撰写 XML-" +"RPC 规范说明时 base64 规范的事实标准。" + +#: ../../library/xmlrpc.client.rst:335 +msgid "" +"It also supports certain of Python's built-in operators through " +":meth:`__eq__` and :meth:`__ne__` methods." +msgstr "它还通过 :meth:`__eq__` 和 :meth:`__ne__` 方法来支持某些 Python 内置运算符。" + +#: ../../library/xmlrpc.client.rst:338 +msgid "" +"Example usage of the binary objects. We're going to transfer an image over " +"XMLRPC::" +msgstr "该二进制对象的示例用法。 我们将通过 XMLRPC 来传输一张图片::" + +#: ../../library/xmlrpc.client.rst:354 +msgid "The client gets the image and saves it to a file::" +msgstr "客户端会获取图片并将其保存为一个文件::" + +#: ../../library/xmlrpc.client.rst:365 +msgid "Fault Objects" +msgstr "Fault 对象" + +#: ../../library/xmlrpc.client.rst:369 +msgid "" +"A :class:`Fault` object encapsulates the content of an XML-RPC fault tag. " +"Fault objects have the following attributes:" +msgstr ":class:`Fault` 对象封装了 XML-RPC fault 标签的内容。 Fault 对象具有下列属性:" + +#: ../../library/xmlrpc.client.rst:375 +msgid "A string indicating the fault type." +msgstr "" + +#: ../../library/xmlrpc.client.rst:380 +msgid "A string containing a diagnostic message associated with the fault." +msgstr "一个包含与 fault 相关联的诊断消息的字符串。" + +#: ../../library/xmlrpc.client.rst:382 +msgid "" +"In the following example we're going to intentionally cause a :exc:`Fault` " +"by returning a complex type object. The server code::" +msgstr "在接下来的示例中我们将通过返回一个复数类型的值来故意引发一个 :exc:`Fault`。 服务器端代码::" + +#: ../../library/xmlrpc.client.rst:415 +msgid "ProtocolError Objects" +msgstr "ProtocolError 对象" + +#: ../../library/xmlrpc.client.rst:419 +msgid "" +"A :class:`ProtocolError` object describes a protocol error in the underlying" +" transport layer (such as a 404 'not found' error if the server named by the" +" URI does not exist). It has the following attributes:" +msgstr "" +":class:`ProtocolError` 对象描述了下层传输层中的协议错误(例如当 URI 所指定的服务器不存在时的 404 'not found'" +" 错误)。 它具有下列属性:" + +#: ../../library/xmlrpc.client.rst:426 +msgid "The URI or URL that triggered the error." +msgstr "触发错误的 URI 或 URL。" + +#: ../../library/xmlrpc.client.rst:431 +msgid "The error code." +msgstr "错误代码。" + +#: ../../library/xmlrpc.client.rst:436 +msgid "The error message or diagnostic string." +msgstr "错误消息或诊断字符串。" + +#: ../../library/xmlrpc.client.rst:441 +msgid "" +"A dict containing the headers of the HTTP/HTTPS request that triggered the " +"error." +msgstr "一个包含触发错误的 HTTP/HTTPS 请求的标头的字典。" + +#: ../../library/xmlrpc.client.rst:444 +msgid "" +"In the following example we're going to intentionally cause a " +":exc:`ProtocolError` by providing an invalid URI::" +msgstr "在接下来的示例中我们将通过提供一个无效的 URI 来故意引发一个 :exc:`ProtocolError`::" + +#: ../../library/xmlrpc.client.rst:462 +msgid "MultiCall Objects" +msgstr "MultiCall 对象" + +#: ../../library/xmlrpc.client.rst:464 +msgid "" +"The :class:`MultiCall` object provides a way to encapsulate multiple calls " +"to a remote server into a single request [#]_." +msgstr ":class:`MultiCall` 对象提供了一种将对远程服务器的多个调用封装为一个单独请求的方式 [#]_。" + +#: ../../library/xmlrpc.client.rst:470 +msgid "" +"Create an object used to boxcar method calls. *server* is the eventual " +"target of the call. Calls can be made to the result object, but they will " +"immediately return ``None``, and only store the call name and parameters in " +"the :class:`MultiCall` object. Calling the object itself causes all stored " +"calls to be transmitted as a single ``system.multicall`` request. The result" +" of this call is a :term:`generator`; iterating over this generator yields " +"the individual results." +msgstr "" +"创建一个用于盒式方法调用的对象。 *server* 是调用的最终目标。 可以针对结果对象被唤起,但它们将立即返回 ``None``,并只在 " +":class:`MultiCall` 对象中存储调用名称和形参。 调用该对象本身会导致所有已存储的调用作为一个单独的 " +"``system.multicall`` 请求被发送。 此调用的结果是一个 :term:`generator`;迭代这个生成器会产生各个结果。" + +#: ../../library/xmlrpc.client.rst:478 +msgid "A usage example of this class follows. The server code::" +msgstr "以下是该类的用法示例。 服务器端代码::" + +#: ../../library/xmlrpc.client.rst:520 +msgid "Convenience Functions" +msgstr "便捷函数" + +#: ../../library/xmlrpc.client.rst:524 +msgid "" +"Convert *params* into an XML-RPC request. or into a response if " +"*methodresponse* is true. *params* can be either a tuple of arguments or an " +"instance of the :exc:`Fault` exception class. If *methodresponse* is true, " +"only a single value can be returned, meaning that *params* must be of length" +" 1. *encoding*, if supplied, is the encoding to use in the generated XML; " +"the default is UTF-8. Python's :const:`None` value cannot be used in " +"standard XML-RPC; to allow using it via an extension, provide a true value " +"for *allow_none*." +msgstr "" +"请 *params* 转换为一个 XML-RPC 请求。 或者当 *methodresponse* 为真值时则转换为一个请求。 *params* " +"可以是一个参数元组或是一个 :exc:`Fault` 异常类的实例。 如果 *methodresponse* 为真值,只有单独的值可以被返回,这意味着 " +"*params* 的长度必须为 1。 如果提供了 *encoding*,则在生成的 XML 会使用该编码格式;默认的编码格式为 UTF-8。 " +"Python 的 :const:`None` 值不可在标准 XML-RPC 中使用;要通过扩展来允许使用它,请为 *allow_none* " +"提供一个真值。" + +#: ../../library/xmlrpc.client.rst:535 +msgid "" +"Convert an XML-RPC request or response into Python objects, a ``(params, " +"methodname)``. *params* is a tuple of argument; *methodname* is a string, " +"or ``None`` if no method name is present in the packet. If the XML-RPC " +"packet represents a fault condition, this function will raise a :exc:`Fault`" +" exception. The *use_builtin_types* flag can be used to cause date/time " +"values to be presented as :class:`datetime.datetime` objects and binary data" +" to be presented as :class:`bytes` objects; this flag is false by default." +msgstr "" +"将一个 XML-RPC 请求或响应转换为 Python 对象 ``(params, methodname)``。 *params* " +"是一个参数元组;*methodname* 是一个字符串,或者如果数据包没有提供方法名则为 ``None``。 如果 XML-RPC " +"数据包是代表一个故障条件,则此函数将引发一个 :exc:`Fault` 异常。 *use_builtin_types* 旗标可被用于将日期/时间值表示为" +" :class:`datetime.datetime` 对象并将二进制数据表示为 :class:`bytes` 对象;此旗标默认为假值。" + +#: ../../library/xmlrpc.client.rst:543 +msgid "" +"The obsolete *use_datetime* flag is similar to *use_builtin_types* but it " +"applies only to date/time values." +msgstr "已过时的 *use_datetime* 旗标与 *use_builtin_types* 类似但只作用于日期/时间值。" + +#: ../../library/xmlrpc.client.rst:553 +msgid "Example of Client Usage" +msgstr "客户端用法的示例" + +#: ../../library/xmlrpc.client.rst:570 +msgid "" +"To access an XML-RPC server through a HTTP proxy, you need to define a " +"custom transport. The following example shows how::" +msgstr "要通过 HTTP 代理访问一个 XML-RPC 服务器,你必须自行定义一个传输。 下面的例子演示了具体做法::" + +#: ../../library/xmlrpc.client.rst:595 +msgid "Example of Client and Server Usage" +msgstr "客户端与服务器用法的示例" + +#: ../../library/xmlrpc.client.rst:597 +msgid "See :ref:`simplexmlrpcserver-example`." +msgstr "参见 :ref:`simplexmlrpcserver-example`。" + +#: ../../library/xmlrpc.client.rst:601 +msgid "Footnotes" +msgstr "备注" + +#: ../../library/xmlrpc.client.rst:602 +msgid "" +"This approach has been first presented in `a discussion on xmlrpc.com " +"`_." +msgstr "" +"此做法被首次提及是在 `a discussion on xmlrpc.com " +"`_。" diff --git a/library/xmlrpc.po b/library/xmlrpc.po new file mode 100644 index 000000000..00f466b50 --- /dev/null +++ b/library/xmlrpc.po @@ -0,0 +1,49 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) 2001-2022, Python Software Foundation +# This file is distributed under the same license as the Python package. +# FIRST AUTHOR , YEAR. +# +# Translators: +# Freesand Leo , 2019 +# +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: Python 3.9\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2022-11-04 14:34+0000\n" +"PO-Revision-Date: 2017-02-16 23:37+0000\n" +"Last-Translator: Freesand Leo , 2019\n" +"Language-Team: Chinese (China) (https://www.transifex.com/python-doc/teams/5390/zh_CN/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: zh_CN\n" +"Plural-Forms: nplurals=1; plural=0;\n" + +#: ../../library/xmlrpc.rst:2 +msgid ":mod:`xmlrpc` --- XMLRPC server and client modules" +msgstr ":mod:`xmlrpc` --- XMLRPC 服务端与客户端模块" + +#: ../../library/xmlrpc.rst:4 +msgid "" +"XML-RPC is a Remote Procedure Call method that uses XML passed via HTTP as a" +" transport. With it, a client can call methods with parameters on a remote " +"server (the server is named by a URI) and get back structured data." +msgstr "" +"XML-RPC 是一种远程过程调用方法,它使用通过 HTTP 传递的 XML 作为载体。 有了它,客户端可以在远程服务器上调用带参数的方法(服务器以 " +"URI 命名)并获取结构化的数据。" + +#: ../../library/xmlrpc.rst:8 +msgid "" +"``xmlrpc`` is a package that collects server and client modules implementing" +" XML-RPC. The modules are:" +msgstr "``xmlrpc`` 是一个集合了 XML-RPC 服务端与客户端实现模块的包。 这些模块是:" + +#: ../../library/xmlrpc.rst:11 +msgid ":mod:`xmlrpc.client`" +msgstr ":mod:`xmlrpc.client`" + +#: ../../library/xmlrpc.rst:12 +msgid ":mod:`xmlrpc.server`" +msgstr ":mod:`xmlrpc.server`" diff --git a/library/xmlrpc.server.po b/library/xmlrpc.server.po new file mode 100644 index 000000000..b45e55d4d --- /dev/null +++ b/library/xmlrpc.server.po @@ -0,0 +1,405 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) 2001-2025, Python Software Foundation +# This file is distributed under the same license as the Python package. +# FIRST AUTHOR , YEAR. +# +# Translators: +# Freesand Leo , 2024 +# Rafael Fontenelle , 2025 +# +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: Python 3.9\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2025-02-07 16:40+0000\n" +"PO-Revision-Date: 2017-02-16 23:37+0000\n" +"Last-Translator: Rafael Fontenelle , 2025\n" +"Language-Team: Chinese (China) (https://app.transifex.com/python-doc/teams/5390/zh_CN/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: zh_CN\n" +"Plural-Forms: nplurals=1; plural=0;\n" + +#: ../../library/xmlrpc.server.rst:2 +msgid ":mod:`xmlrpc.server` --- Basic XML-RPC servers" +msgstr ":mod:`xmlrpc.server` --- 基本 XML-RPC 服务器" + +#: ../../library/xmlrpc.server.rst:10 +msgid "**Source code:** :source:`Lib/xmlrpc/server.py`" +msgstr "**源代码:** :source:`Lib/xmlrpc/server.py`" + +#: ../../library/xmlrpc.server.rst:14 +msgid "" +"The :mod:`xmlrpc.server` module provides a basic server framework for XML-" +"RPC servers written in Python. Servers can either be free standing, using " +":class:`SimpleXMLRPCServer`, or embedded in a CGI environment, using " +":class:`CGIXMLRPCRequestHandler`." +msgstr "" +":mod:`xmlrpc.server` 模块为以 Python 编写 XML-RPC 服务器提供了一个基本服务器框架。 服务器可以是独立的,使用 " +":class:`SimpleXMLRPCServer`,或是嵌入某个 CGI 环境中,使用 " +":class:`CGIXMLRPCRequestHandler`。" + +#: ../../library/xmlrpc.server.rst:22 +msgid "" +"The :mod:`xmlrpc.server` module is not secure against maliciously " +"constructed data. If you need to parse untrusted or unauthenticated data " +"see :ref:`xml-vulnerabilities`." +msgstr "" +":mod:`xmlrpc.server` 模块对于恶意构建的数据是不安全的。 如果你需要解析不受信任或未经身份验证的数据,请参阅 :ref:`xml-" +"vulnerabilities`。" + +#: ../../library/xmlrpc.server.rst:31 +msgid "" +"Create a new server instance. This class provides methods for registration " +"of functions that can be called by the XML-RPC protocol. The " +"*requestHandler* parameter should be a factory for request handler " +"instances; it defaults to :class:`SimpleXMLRPCRequestHandler`. The *addr* " +"and *requestHandler* parameters are passed to the " +":class:`socketserver.TCPServer` constructor. If *logRequests* is true (the " +"default), requests will be logged; setting this parameter to false will turn" +" off logging. The *allow_none* and *encoding* parameters are passed on to " +":mod:`xmlrpc.client` and control the XML-RPC responses that will be returned" +" from the server. The *bind_and_activate* parameter controls whether " +":meth:`server_bind` and :meth:`server_activate` are called immediately by " +"the constructor; it defaults to true. Setting it to false allows code to " +"manipulate the *allow_reuse_address* class variable before the address is " +"bound. The *use_builtin_types* parameter is passed to the " +":func:`~xmlrpc.client.loads` function and controls which types are processed" +" when date/times values or binary data are received; it defaults to false." +msgstr "" +"创建一个新的服务器实例。 这个类提供了一些用来注册可以被 XML-RPC 协议所调用的函数的方法。 *requestHandler* " +"形参应该是一个用于请求处理器实例的工厂函数;它默认为 :class:`SimpleXMLRPCRequestHandler`。 *addr* 和 " +"*requestHandler* 形参会被传给 :class:`socketserver.TCPServer` 构造器。 如果 " +"*logRequests* 为真值(默认),请求将被记录到日志;将此形参设为假值将关闭日志记录。 *allow_none* 和 *encoding* " +"形参会被传给 :mod:`xmlrpc.client` 并控制将从服务器返回的 XML-RPC 响应。 *bind_and_activate* 形参控制" +" :meth:`server_bind` 和 :meth:`server_activate` 是否会被构造器立即调用;它默认为真值。 " +"将其设为假值将允许代码在地址被绑定之前操作 *allow_reuse_address* 类变量。 *use_builtin_types* 形参会被传给 " +":func:`~xmlrpc.client.loads` 函数并控制当收到日期/时间值或二进制数据时将处理哪些类型;它默认为假值。" + +#: ../../library/xmlrpc.server.rst:47 ../../library/xmlrpc.server.rst:61 +#: ../../library/xmlrpc.server.rst:373 +msgid "The *use_builtin_types* flag was added." +msgstr "增加了 *use_builtin_types* 旗标。" + +#: ../../library/xmlrpc.server.rst:54 +msgid "" +"Create a new instance to handle XML-RPC requests in a CGI environment. The " +"*allow_none* and *encoding* parameters are passed on to :mod:`xmlrpc.client`" +" and control the XML-RPC responses that will be returned from the server. " +"The *use_builtin_types* parameter is passed to the " +":func:`~xmlrpc.client.loads` function and controls which types are processed" +" when date/times values or binary data are received; it defaults to false." +msgstr "" +"创建一个新的实例来处理 CGI 环境中的 XML-RPC 请求。 *allow_none* 和 *encoding* 形参会被传递给 " +":mod:`xmlrpc.client` 并控制将要从服务器返回的 XML-RPC 响应。 *use_builtin_types* 形参会被传递给 " +":func:`~xmlrpc.client.loads` 函数并控制当接收到日期/时间值或二进制数据时要处理哪种类型;该形参默认为假值。" + +#: ../../library/xmlrpc.server.rst:67 +msgid "" +"Create a new request handler instance. This request handler supports " +"``POST`` requests and modifies logging so that the *logRequests* parameter " +"to the :class:`SimpleXMLRPCServer` constructor parameter is honored." +msgstr "" +"创建一个新的请求处理器实例。 该请求处理器支持 ``POST`` 请求并会修改日志记录操作以便使用传递给 " +":class:`SimpleXMLRPCServer` 构造器形参的 *logRequests* 形参。" + +#: ../../library/xmlrpc.server.rst:75 +msgid "SimpleXMLRPCServer Objects" +msgstr "SimpleXMLRPCServer 对象" + +#: ../../library/xmlrpc.server.rst:77 +msgid "" +"The :class:`SimpleXMLRPCServer` class is based on " +":class:`socketserver.TCPServer` and provides a means of creating simple, " +"stand alone XML-RPC servers." +msgstr "" +":class:`SimpleXMLRPCServer` 类是基于 :class:`socketserver.TCPServer` " +"并提供了一个创建简单、独立的 XML-RPC 服务器的方式。" + +#: ../../library/xmlrpc.server.rst:84 ../../library/xmlrpc.server.rst:298 +msgid "" +"Register a function that can respond to XML-RPC requests. If *name* is " +"given, it will be the method name associated with *function*, otherwise " +"``function.__name__`` will be used. *name* is a string, and may contain " +"characters not legal in Python identifiers, including the period character." +msgstr "" +"注册一个可以响应 XML-RPC 请求的函数。 如果给出了 *name*,则它将成为与 *function* 相关联的方法名,否则将使用 " +"``function.__name__``。 *name* 是一个字符串,并可能包含不可在 Python 标识符中出现的字符,包括句点符。" + +#: ../../library/xmlrpc.server.rst:89 ../../library/xmlrpc.server.rst:303 +msgid "" +"This method can also be used as a decorator. When used as a decorator, " +"*name* can only be given as a keyword argument to register *function* under " +"*name*. If no *name* is given, ``function.__name__`` will be used." +msgstr "" +"此方法也可被用作装饰器。 当被用作装饰器时,*name* 只能被指定为以 *name* 注册的 *function* 的一个关键字参数。 如果没有指定 " +"*name*,则将使用 ``function.__name__``。" + +#: ../../library/xmlrpc.server.rst:93 ../../library/xmlrpc.server.rst:307 +msgid ":meth:`register_function` can be used as a decorator." +msgstr ":meth:`register_function` 可被用作装饰器。" + +#: ../../library/xmlrpc.server.rst:99 +msgid "" +"Register an object which is used to expose method names which have not been " +"registered using :meth:`register_function`. If *instance* contains a " +":meth:`_dispatch` method, it is called with the requested method name and " +"the parameters from the request. Its API is ``def _dispatch(self, method, " +"params)`` (note that *params* does not represent a variable argument list)." +" If it calls an underlying function to perform its task, that function is " +"called as ``func(*params)``, expanding the parameter list. The return value " +"from :meth:`_dispatch` is returned to the client as the result. If " +"*instance* does not have a :meth:`_dispatch` method, it is searched for an " +"attribute matching the name of the requested method." +msgstr "" +"注册一个被用来公开未使用 :meth:`register_function` 注册的方法名的对象。 如果 *instance* 包含 " +":meth:`_dispatch` 方法,它将被调用并附带被请求的方法名和来自请求的形参。 它的 API 是 ``def _dispatch(self," +" method, params)`` (请注意 *params* 并不表示变量参数列表)。 如果它调用了一个下层函数来执行任务,该函数将以 " +"``func(*params)`` 的形式被调用,即扩展了形参列表。 来自 :meth:`_dispatch` 的返回值将作为结果被返回给客户端。 如果" +" *instance* 不包含 :meth:`_dispatch` 方法,则会在其中搜索与被请求的方法名相匹配的属性。" + +#: ../../library/xmlrpc.server.rst:110 +msgid "" +"If the optional *allow_dotted_names* argument is true and the instance does " +"not have a :meth:`_dispatch` method, then if the requested method name " +"contains periods, each component of the method name is searched for " +"individually, with the effect that a simple hierarchical search is " +"performed. The value found from this search is then called with the " +"parameters from the request, and the return value is passed back to the " +"client." +msgstr "" +"如果可选的 *allow_dotted_names* 参数为真值且该实例没有 :meth:`_dispatch` " +"方法,则如果被请求的方法名包含句点符,会单独搜索该方法名的每个组成部分,其效果就是执行了简单的分层级搜索。 " +"通过搜索找到的值将随即附带来自请求的形参被调用,并且返回值会被回传给客户端。" + +#: ../../library/xmlrpc.server.rst:119 +msgid "" +"Enabling the *allow_dotted_names* option allows intruders to access your " +"module's global variables and may allow intruders to execute arbitrary code " +"on your machine. Only use this option on a secure, closed network." +msgstr "" +"启用 *allow_dotted_names* 选项将允许入侵者访问你的模块的全局变量并可能允许入侵者在你的机器上执行任意代码。 " +"仅可在安全、封闭的网络中使用此选项。" + +#: ../../library/xmlrpc.server.rst:126 +msgid "" +"Registers the XML-RPC introspection functions ``system.listMethods``, " +"``system.methodHelp`` and ``system.methodSignature``." +msgstr "" +"注册 XML-RPC 内省函数 ``system.listMethods``, ``system.methodHelp`` 和 " +"``system.methodSignature``。" + +#: ../../library/xmlrpc.server.rst:132 +msgid "Registers the XML-RPC multicall function system.multicall." +msgstr "注册 XML-RPC 多调用函数 system.multicall。" + +#: ../../library/xmlrpc.server.rst:137 +msgid "" +"An attribute value that must be a tuple listing valid path portions of the " +"URL for receiving XML-RPC requests. Requests posted to other paths will " +"result in a 404 \"no such page\" HTTP error. If this tuple is empty, all " +"paths will be considered valid. The default value is ``('/', '/RPC2')``." +msgstr "" +"一个必须为元组类型的属性值,其中列出所接收 XML-RPC 请求的有效路径部分。 发送到其他路径的请求将导致 404 \"no such page\" " +"HTTP 错误。 如果此元组为空,则所有路径都将被视为有效。 默认值为 ``('/', '/RPC2')``。" + +#: ../../library/xmlrpc.server.rst:146 +msgid "SimpleXMLRPCServer Example" +msgstr "SimpleXMLRPCServer 示例" + +#: ../../library/xmlrpc.server.rst:147 +msgid "Server code::" +msgstr "服务器端代码::" + +#: ../../library/xmlrpc.server.rst:181 +msgid "" +"The following client code will call the methods made available by the " +"preceding server::" +msgstr "以下客户端代码将调用上述服务器所提供的方法::" + +#: ../../library/xmlrpc.server.rst:194 +msgid "" +":meth:`register_function` can also be used as a decorator. The previous " +"server example can register functions in a decorator way::" +msgstr ":meth:`register_function` 也可被用作装饰器。 上述服务器端示例可以通过装饰器方式来注册函数::" + +#: ../../library/xmlrpc.server.rst:225 +msgid "" +"The following example included in the :file:`Lib/xmlrpc/server.py` module " +"shows a server allowing dotted names and registering a multicall function." +msgstr "以下包括在 :file:`Lib/xmlrpc/server.py` 模块中的例子演示了一个允许带点号名称并注册有多调用函数的服务器。" + +#: ../../library/xmlrpc.server.rst:230 +msgid "" +"Enabling the *allow_dotted_names* option allows intruders to access your " +"module's global variables and may allow intruders to execute arbitrary code " +"on your machine. Only use this example only within a secure, closed " +"network." +msgstr "" +"启用 *allow_dotted_names* 选项将允许入侵者访问你的模块的全局变量并可能允许入侵者在你的机器上执行任意代码。 " +"仅可在安全、封闭的网络中使用此示例。" + +#: ../../library/xmlrpc.server.rst:259 +msgid "This ExampleService demo can be invoked from the command line::" +msgstr "这个 ExampleService 演示程序可通过命令行来唤起::" + +#: ../../library/xmlrpc.server.rst:264 +msgid "" +"The client that interacts with the above server is included in " +"`Lib/xmlrpc/client.py`::" +msgstr "可与上述服务器进行交互的客户端包括在 `Lib/xmlrpc/client.py` 中::" + +#: ../../library/xmlrpc.server.rst:284 +msgid "" +"This client which interacts with the demo XMLRPC server can be invoked as::" +msgstr "这个可与示例 XMLRPC 服务器进行交互的客户端的启动方式如下::" + +#: ../../library/xmlrpc.server.rst:290 +msgid "CGIXMLRPCRequestHandler" +msgstr "CGIXMLRPCRequestHandler" + +#: ../../library/xmlrpc.server.rst:292 +msgid "" +"The :class:`CGIXMLRPCRequestHandler` class can be used to handle XML-RPC " +"requests sent to Python CGI scripts." +msgstr "" +":class:`CGIXMLRPCRequestHandler` 类可被用来处理发送给 Python CGI 脚本的 XML-RPC 请求。" + +#: ../../library/xmlrpc.server.rst:313 +msgid "" +"Register an object which is used to expose method names which have not been" +" registered using :meth:`register_function`. If instance contains a " +":meth:`_dispatch` method, it is called with the requested method name and " +"the parameters from the request; the return value is returned to the client" +" as the result. If instance does not have a :meth:`_dispatch` method, it is " +"searched for an attribute matching the name of the requested method; if the" +" requested method name contains periods, each component of the method name " +"is searched for individually, with the effect that a simple hierarchical " +"search is performed. The value found from this search is then called with " +"the parameters from the request, and the return value is passed back to " +"the client." +msgstr "" +"注册一个对象用来公开未使用 :meth:`register_function` 进行注册的方法名。 如果实例包含 :meth:`_dispatch` " +"方法,它会附带所请求的方法名和来自请求的形参被调用;返回值会作为结果被返回给客户端。 如果实例不包含 :meth:`_dispatch` " +"方法,则在其中搜索与所请求方法名相匹配的属性;如果所请求方法名包含句点,则会分别搜索方法名的每个部分,其效果就是执行了简单的层级搜索。 " +"搜索找到的值将附带来自请求的形参被调用,其返回值会被返回给客户端。" + +#: ../../library/xmlrpc.server.rst:327 +msgid "" +"Register the XML-RPC introspection functions ``system.listMethods``, " +"``system.methodHelp`` and ``system.methodSignature``." +msgstr "" +"注册 XML-RPC 内海函数 ``system.listMethods``, ``system.methodHelp`` 和 " +"``system.methodSignature``。" + +#: ../../library/xmlrpc.server.rst:333 +msgid "Register the XML-RPC multicall function ``system.multicall``." +msgstr "注册 XML-RPC 多调用函数 ``system.multicall``。" + +#: ../../library/xmlrpc.server.rst:338 +msgid "" +"Handle an XML-RPC request. If *request_text* is given, it should be the POST" +" data provided by the HTTP server, otherwise the contents of stdin will be " +"used." +msgstr "" +"处理一个 XML-RPC 请求。 如果给出了 *request_text*,它应当是 HTTP 服务器所提供的 POST 数据,否则将使用 stdin " +"的内容。" + +#: ../../library/xmlrpc.server.rst:341 +msgid "Example::" +msgstr "示例::" + +#: ../../library/xmlrpc.server.rst:357 +msgid "Documenting XMLRPC server" +msgstr "文档 XMLRPC 服务器" + +#: ../../library/xmlrpc.server.rst:359 +msgid "" +"These classes extend the above classes to serve HTML documentation in " +"response to HTTP GET requests. Servers can either be free standing, using " +":class:`DocXMLRPCServer`, or embedded in a CGI environment, using " +":class:`DocCGIXMLRPCRequestHandler`." +msgstr "" +"这些类扩展了上面的类以发布响应 HTTP GET 请求的 HTML 文档。 服务器可以是独立的,使用 " +":class:`DocXMLRPCServer`,或是嵌入某个 CGI 环境中,使用 " +":class:`DocCGIXMLRPCRequestHandler`。" + +#: ../../library/xmlrpc.server.rst:369 +msgid "" +"Create a new server instance. All parameters have the same meaning as for " +":class:`SimpleXMLRPCServer`; *requestHandler* defaults to " +":class:`DocXMLRPCRequestHandler`." +msgstr "" +"创建一个新的服务器实例。 所有形参的含义与 :class:`SimpleXMLRPCServer` 的相同;*requestHandler* 默认为 " +":class:`DocXMLRPCRequestHandler`。" + +#: ../../library/xmlrpc.server.rst:379 +msgid "Create a new instance to handle XML-RPC requests in a CGI environment." +msgstr "创建一个新的实例来处理 CGI 环境中的 XML-RPC 请求。" + +#: ../../library/xmlrpc.server.rst:384 +msgid "" +"Create a new request handler instance. This request handler supports XML-RPC" +" POST requests, documentation GET requests, and modifies logging so that the" +" *logRequests* parameter to the :class:`DocXMLRPCServer` constructor " +"parameter is honored." +msgstr "" +"创建一个新的请求处理器实例。 该请求处理器支持 XML-RPC POST 请求、文档 GET 请求并会修改日志记录操作以便使用传递给 " +":class:`DocXMLRPCServer` 构造器形参的 *logRequests* 形参。" + +#: ../../library/xmlrpc.server.rst:393 +msgid "DocXMLRPCServer Objects" +msgstr "DocXMLRPCServer 对象" + +#: ../../library/xmlrpc.server.rst:395 +msgid "" +"The :class:`DocXMLRPCServer` class is derived from " +":class:`SimpleXMLRPCServer` and provides a means of creating self-" +"documenting, stand alone XML-RPC servers. HTTP POST requests are handled as " +"XML-RPC method calls. HTTP GET requests are handled by generating pydoc-" +"style HTML documentation. This allows a server to provide its own web-based " +"documentation." +msgstr "" +":class:`DocXMLRPCServer` 类派生自 :class:`SimpleXMLRPCServer` " +"并提供了一种创建自动记录文档的、独立的 XML-RPC 服务器的方式。 HTTP POST 请求将作为 XML-RPC 方法调用来处理。 HTTP " +"GET 请求将通过生成 pydoc 风格的 HTML 文档来处理。 这将允许服务器自己提供基于 Web 的文档。" + +#: ../../library/xmlrpc.server.rst:404 ../../library/xmlrpc.server.rst:432 +msgid "" +"Set the title used in the generated HTML documentation. This title will be " +"used inside the HTML \"title\" element." +msgstr "设置所生成 HTML 文档要使用的标题。 此标题将在 HTML \"title\" 元素中使用。" + +#: ../../library/xmlrpc.server.rst:410 ../../library/xmlrpc.server.rst:438 +msgid "" +"Set the name used in the generated HTML documentation. This name will appear" +" at the top of the generated documentation inside a \"h1\" element." +msgstr "设置所生成 HTML 文档要使用的名称。 此名称将出现在所生成文档顶部的 \"h1\" 元素中。" + +#: ../../library/xmlrpc.server.rst:416 ../../library/xmlrpc.server.rst:444 +msgid "" +"Set the description used in the generated HTML documentation. This " +"description will appear as a paragraph, below the server name, in the " +"documentation." +msgstr "" +"设置所生成Set the description used in the generated HTML 文档要使用的描述。 " +"此描述将显示为文档中的一个段落,位于服务器名称之下。" + +#: ../../library/xmlrpc.server.rst:421 +msgid "DocCGIXMLRPCRequestHandler" +msgstr "DocCGIXMLRPCRequestHandler" + +#: ../../library/xmlrpc.server.rst:423 +msgid "" +"The :class:`DocCGIXMLRPCRequestHandler` class is derived from " +":class:`CGIXMLRPCRequestHandler` and provides a means of creating self-" +"documenting, XML-RPC CGI scripts. HTTP POST requests are handled as XML-RPC " +"method calls. HTTP GET requests are handled by generating pydoc-style HTML " +"documentation. This allows a server to provide its own web-based " +"documentation." +msgstr "" +":class:`DocCGIXMLRPCRequestHandler` 类派生自 :class:`CGIXMLRPCRequestHandler` " +"并提供了一种创建自动记录文档的 XML-RPC CGI 脚本的方式。 HTTP POST 请求将作为 XML-RPC 方法调用来处理。 HTTP GET" +" 请求将通过生成 pydoc 风格的 HTML 文档来处理。 这将允许服务器自己提供基于 Web 的文档。" diff --git a/library/zipapp.po b/library/zipapp.po new file mode 100644 index 000000000..c9e7efd26 --- /dev/null +++ b/library/zipapp.po @@ -0,0 +1,633 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) 2001-2024, Python Software Foundation +# This file is distributed under the same license as the Python package. +# FIRST AUTHOR , YEAR. +# +# Translators: +# Arisaka97 , 2020 +# Freesand Leo , 2021 +# Dai Xu , 2021 +# Rafael Fontenelle , 2024 +# +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: Python 3.9\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2024-04-19 21:47+0000\n" +"PO-Revision-Date: 2017-02-16 23:37+0000\n" +"Last-Translator: Rafael Fontenelle , 2024\n" +"Language-Team: Chinese (China) (https://app.transifex.com/python-doc/teams/5390/zh_CN/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: zh_CN\n" +"Plural-Forms: nplurals=1; plural=0;\n" + +#: ../../library/zipapp.rst:2 +msgid ":mod:`zipapp` --- Manage executable Python zip archives" +msgstr ":mod:`zipapp` —— 管理可执行的 Python zip 打包文件" + +#: ../../library/zipapp.rst:9 +msgid "**Source code:** :source:`Lib/zipapp.py`" +msgstr "**源代码:** :source:`Lib/zipapp.py`" + +#: ../../library/zipapp.rst:16 +msgid "" +"This module provides tools to manage the creation of zip files containing " +"Python code, which can be :ref:`executed directly by the Python interpreter" +" `. The module provides both a :ref:`zipapp-" +"command-line-interface` and a :ref:`zipapp-python-api`." +msgstr "" +"本模块提供了一套管理工具,用于创建包含 Python 代码的压缩文件,这些文件可以 :ref:`直接由 Python 解释器执行 `。 本模块提供 :ref:`zipapp-command-line-interface` 和 " +":ref:`zipapp-python-api`。" + +#: ../../library/zipapp.rst:23 +msgid "Basic Example" +msgstr "简单示例" + +#: ../../library/zipapp.rst:25 +msgid "" +"The following example shows how the :ref:`zipapp-command-line-interface` can" +" be used to create an executable archive from a directory containing Python " +"code. When run, the archive will execute the ``main`` function from the " +"module ``myapp`` in the archive." +msgstr "" +"下述例子展示了用 :ref:`zipapp-command-line-interface` 根据含有 Python 代码的目录创建一个可执行的打包文件。" +" 运行后该打包文件时,将会执行 ``myapp`` 模块中的 ``main`` 函数。" + +#: ../../library/zipapp.rst:40 +msgid "Command-Line Interface" +msgstr "命令行接口" + +#: ../../library/zipapp.rst:42 +msgid "" +"When called as a program from the command line, the following form is used:" +msgstr "若要从命令行调用,则采用以下形式:" + +#: ../../library/zipapp.rst:48 +msgid "" +"If *source* is a directory, this will create an archive from the contents of" +" *source*. If *source* is a file, it should be an archive, and it will be " +"copied to the target archive (or the contents of its shebang line will be " +"displayed if the --info option is specified)." +msgstr "" +"如果 *source* 是个目录,将根据 *source* 的内容创建一个打包文件。如果 *source* " +"是个文件,则应为一个打包文件,将会复制到目标打包文件中(如果指定了 -info 选项,将会显示 shebang 行的内容)。" + +#: ../../library/zipapp.rst:53 +msgid "The following options are understood:" +msgstr "可以接受以下参数:" + +#: ../../library/zipapp.rst:59 +msgid "" +"Write the output to a file named *output*. If this option is not specified," +" the output filename will be the same as the input *source*, with the " +"extension ``.pyz`` added. If an explicit filename is given, it is used as " +"is (so a ``.pyz`` extension should be included if required)." +msgstr "" +"将程序的输出写入名为 *output* 的文件中。若未指定此参数,输出的文件名将与输入的 *source* 相同,并添加扩展名 " +"``.pyz``。如果显式给出了文件名,将会原样使用(因此必要时应包含扩展名 ``.pyz``)。" + +#: ../../library/zipapp.rst:64 +msgid "" +"An output filename must be specified if the *source* is an archive (and in " +"that case, *output* must not be the same as *source*)." +msgstr "如果 *source* 是个打包文件,必须指定一个输出文件名(这时 *output* 必须与 *source* 不同)。" + +#: ../../library/zipapp.rst:69 +msgid "" +"Add a ``#!`` line to the archive specifying *interpreter* as the command to " +"run. Also, on POSIX, make the archive executable. The default is to write " +"no ``#!`` line, and not make the file executable." +msgstr "" +"给打包文件加入 ``#!`` 行,以便指定 *解释器* 作为运行的命令行。另外,还让打包文件在 POSIX 平台上可执行。默认不会写入 ``#!`` " +"行,也不让文件可执行。" + +#: ../../library/zipapp.rst:75 +msgid "" +"Write a ``__main__.py`` file to the archive that executes *mainfn*. The " +"*mainfn* argument should have the form \"pkg.mod:fn\", where \"pkg.mod\" is " +"a package/module in the archive, and \"fn\" is a callable in the given " +"module. The ``__main__.py`` file will execute that callable." +msgstr "" +"在打包文件中写入一个 ``__main__.py`` 文件,用于执行 *mainfn*。*mainfn* 参数的形式应为 “pkg.mod:fn”,其中" +" “pkg.mod”是打包文件中的某个包/模块,“fn”是该模块中的一个可调用对象。``__main__.py`` 文件将会执行该可调用对象。" + +#: ../../library/zipapp.rst:80 +msgid ":option:`--main` cannot be specified when copying an archive." +msgstr "在复制打包文件时,不能设置 :option:`--main` 参数。" + +#: ../../library/zipapp.rst:84 +msgid "" +"Compress files with the deflate method, reducing the size of the output " +"file. By default, files are stored uncompressed in the archive." +msgstr "利用 deflate 方法压缩文件,减少输出文件的大小。默认情况下,打包文件中的文件是不压缩的。" + +#: ../../library/zipapp.rst:87 +msgid ":option:`--compress` has no effect when copying an archive." +msgstr "在复制打包文件时,:option:`--compress` 无效。" + +#: ../../library/zipapp.rst:93 +msgid "" +"Display the interpreter embedded in the archive, for diagnostic purposes. " +"In this case, any other options are ignored and SOURCE must be an archive, " +"not a directory." +msgstr "显示嵌入在打包文件中的解释器程序,以便诊断问题。这时会忽略其他所有参数,SOURCE 必须是个打包文件,而不是目录。" + +#: ../../library/zipapp.rst:99 +msgid "Print a short usage message and exit." +msgstr "打印简短的用法信息并退出。" + +#: ../../library/zipapp.rst:105 +msgid "Python API" +msgstr "Python API" + +#: ../../library/zipapp.rst:107 +msgid "The module defines two convenience functions:" +msgstr "该模块定义了两个快捷函数:" + +#: ../../library/zipapp.rst:112 +msgid "" +"Create an application archive from *source*. The source can be any of the " +"following:" +msgstr "由 *source* 创建一个应用程序打包文件。source 可以是以下形式之一:" + +#: ../../library/zipapp.rst:115 +msgid "" +"The name of a directory, or a :term:`path-like object` referring to a " +"directory, in which case a new application archive will be created from the " +"content of that directory." +msgstr "一个目录名,或指向目录的 :term:`path-like object` ,这时将根据目录内容新建一个应用程序打包文件。" + +#: ../../library/zipapp.rst:118 +msgid "" +"The name of an existing application archive file, or a :term:`path-like " +"object` referring to such a file, in which case the file is copied to the " +"target (modifying it to reflect the value given for the *interpreter* " +"argument). The file name should include the ``.pyz`` extension, if " +"required." +msgstr "" +"一个已存在的应用程序打包文件名,或指向这类文件的 :term:`path-like object`,这时会将该文件复制为目标文件(会稍作修改以反映出 " +"*interpreter* 参数的值)。必要时文件名中应包括 ``.pyz`` 扩展名。" + +#: ../../library/zipapp.rst:122 +msgid "" +"A file object open for reading in bytes mode. The content of the file " +"should be an application archive, and the file object is assumed to be " +"positioned at the start of the archive." +msgstr "一个以字节串模式打开的文件对象。该文件的内容应为应用程序打包文件,且假定文件对象定位于打包文件的初始位置。" + +#: ../../library/zipapp.rst:126 +msgid "" +"The *target* argument determines where the resulting archive will be " +"written:" +msgstr "*target* 参数定义了打包文件的写入位置:" + +#: ../../library/zipapp.rst:129 +msgid "" +"If it is the name of a file, or a :term:`path-like object`, the archive will" +" be written to that file." +msgstr "若是个文件名,或是 :term:`path-like object`,打包文件将写入该文件中。" + +#: ../../library/zipapp.rst:131 +msgid "" +"If it is an open file object, the archive will be written to that file " +"object, which must be open for writing in bytes mode." +msgstr "若是个打开的文件对象,打包文件将写入该对象,该文件对象必须在字节串写入模式下打开。" + +#: ../../library/zipapp.rst:133 +msgid "" +"If the target is omitted (or ``None``), the source must be a directory and " +"the target will be a file with the same name as the source, with a ``.pyz`` " +"extension added." +msgstr "" +"如果省略了 target (或为 ``None``),则 source 必须为一个目录,target 将是与 source 同名的文件,并加上 " +"``.pyz`` 扩展名。" + +#: ../../library/zipapp.rst:137 +msgid "" +"The *interpreter* argument specifies the name of the Python interpreter with" +" which the archive will be executed. It is written as a \"shebang\" line at" +" the start of the archive. On POSIX, this will be interpreted by the OS, " +"and on Windows it will be handled by the Python launcher. Omitting the " +"*interpreter* results in no shebang line being written. If an interpreter " +"is specified, and the target is a filename, the executable bit of the target" +" file will be set." +msgstr "" +"参数 *interpreter* 指定了 Python 解释器程序名,用于执行打包文件。这将以 “释伴(shebang)”行的形式写入打包文件的头部。在" +" POSIX 平台上,操作系统会进行解释,而在 Windows 平台则会由 Python 启动器进行处理。省略 *interpreter* " +"参数则不会写入释伴行。如果指定了解释器,且目标为文件名,则会设置目标文件的可执行属性位。" + +#: ../../library/zipapp.rst:145 +msgid "" +"The *main* argument specifies the name of a callable which will be used as " +"the main program for the archive. It can only be specified if the source is" +" a directory, and the source does not already contain a ``__main__.py`` " +"file. The *main* argument should take the form \"pkg.module:callable\" and " +"the archive will be run by importing \"pkg.module\" and executing the given " +"callable with no arguments. It is an error to omit *main* if the source is " +"a directory and does not contain a ``__main__.py`` file, as otherwise the " +"resulting archive would not be executable." +msgstr "" +"参数 *main* 指定某个可调用程序的名称,用作打包文件的主程序。仅当 source 为目录且不含 ``__main__.py`` " +"文件时,才能指定该参数。*main* 参数应采用 " +"“pkg.module:callable”的形式,通过导入“pkg.module”并不带参数地执行给出的可调用对象,即可执行打包文件。如果 source" +" 是目录且不含 ``__main__.py`` 文件,省略 *main* 将会出错,生成的打包文件将无法执行。" + +#: ../../library/zipapp.rst:155 +msgid "" +"The optional *filter* argument specifies a callback function that is passed " +"a Path object representing the path to the file being added (relative to the" +" source directory). It should return ``True`` if the file is to be added." +msgstr "" +"可选参数 *filter* 指定了回调函数,将传给代表被添加文件路径的 Path 对象(相对于源目录)。如若文件需要加入打包文件,则回调函数应返回 " +"``True``。" + +#: ../../library/zipapp.rst:160 +msgid "" +"The optional *compressed* argument determines whether files are compressed." +" If set to ``True``, files in the archive are compressed with the deflate " +"method; otherwise, files are stored uncompressed. This argument has no " +"effect when copying an existing archive." +msgstr "" +"可选参数 *compressed* 指定是否要压缩打包文件。若设为 ``True``,则打包中的文件将用 deflate " +"方法进行压缩;否则就不会压缩。本参数在复制现有打包文件时无效。" + +#: ../../library/zipapp.rst:165 +msgid "" +"If a file object is specified for *source* or *target*, it is the caller's " +"responsibility to close it after calling create_archive." +msgstr "若 *source* 或 *target* 指定的是文件对象,则调用者有责任在调用 create_archive 之后关闭这些文件对象。" + +#: ../../library/zipapp.rst:168 +msgid "" +"When copying an existing archive, file objects supplied only need ``read`` " +"and ``readline``, or ``write`` methods. When creating an archive from a " +"directory, if the target is a file object it will be passed to the " +"``zipfile.ZipFile`` class, and must supply the methods needed by that class." +msgstr "" +"当复制已有的打包文件时,提供的文件对象只需 ``read`` 和 ``readline`` 方法,或 ``write`` " +"方法。当由目录创建打包文件时,若目标为文件对象,将会将其传给 类,且必须提供 ``zipfile.ZipFile`` 类所需的方法。" + +#: ../../library/zipapp.rst:174 +msgid "Added the *filter* and *compressed* arguments." +msgstr "加入了 *filter* 和 *compressed* 参数。" + +#: ../../library/zipapp.rst:179 +msgid "" +"Return the interpreter specified in the ``#!`` line at the start of the " +"archive. If there is no ``#!`` line, return :const:`None`. The *archive* " +"argument can be a filename or a file-like object open for reading in bytes " +"mode. It is assumed to be at the start of the archive." +msgstr "" +"返回打包文件开头的 行指定的解释器程序。如果没有 ``#!`` 行,则返回 :const:`None`。参数 *archive* " +"可为文件名或在字节串模式下打开以供读取的文件型对象。``#!`` 行假定是在打包文件的开头。" + +#: ../../library/zipapp.rst:188 +msgid "Examples" +msgstr "例子" + +#: ../../library/zipapp.rst:190 +msgid "Pack up a directory into an archive, and run it." +msgstr "将目录打包成一个文件并运行它。" + +#: ../../library/zipapp.rst:198 +msgid "The same can be done using the :func:`create_archive` function::" +msgstr "同样还可用 :func:`create_archive` 函数完成:" + +#: ../../library/zipapp.rst:203 +msgid "" +"To make the application directly executable on POSIX, specify an interpreter" +" to use." +msgstr "要让应用程序能在 POSIX 平台上直接执行,需要指定所用的解释器。" + +#: ../../library/zipapp.rst:212 +msgid "" +"To replace the shebang line on an existing archive, create a modified " +"archive using the :func:`create_archive` function::" +msgstr "若要替换已有打包文件中的释伴行,请用 :func:`create_archive` 函数另建一个修改好的打包文件:" + +#: ../../library/zipapp.rst:218 +msgid "" +"To update the file in place, do the replacement in memory using a " +":class:`BytesIO` object, and then overwrite the source afterwards. Note " +"that there is a risk when overwriting a file in place that an error will " +"result in the loss of the original file. This code does not protect against" +" such errors, but production code should do so. Also, this method will only" +" work if the archive fits in memory::" +msgstr "" +"若要原地更新打包文件,可用 :class:`BytesIO` " +"对象在内存中进行替换,然后再覆盖源文件。注意,原地覆盖文件会有风险,出错时会丢失原文件。这里没有考虑出错情况,但生产代码则应进行处理。另外,这种方案仅当内存足以容纳打包文件时才有意义:" + +#: ../../library/zipapp.rst:236 +msgid "Specifying the Interpreter" +msgstr "指定解释器程序" + +#: ../../library/zipapp.rst:238 +msgid "" +"Note that if you specify an interpreter and then distribute your application" +" archive, you need to ensure that the interpreter used is portable. The " +"Python launcher for Windows supports most common forms of POSIX ``#!`` line," +" but there are other issues to consider:" +msgstr "" +"注意,如果指定了解释器程序再发布应用程序打包文件,需要确保所用到的解释器是可移植的。Windows 的 Python 启动器支持大多数常见的 POSIX" +" ``#!`` 行,但还需要考虑一些其他问题。" + +#: ../../library/zipapp.rst:243 +msgid "" +"If you use \"/usr/bin/env python\" (or other forms of the \"python\" " +"command, such as \"/usr/bin/python\"), you need to consider that your users " +"may have either Python 2 or Python 3 as their default, and write your code " +"to work under both versions." +msgstr "" +"如果采用“/usr/bin/env python”(或其他格式的 python " +"调用命令,比如“/usr/bin/python”),需要考虑默认版本既可能是 Python 2 又可能是 Python " +"3,应让代码在两个版本下均能正常运行。" + +#: ../../library/zipapp.rst:247 +msgid "" +"If you use an explicit version, for example \"/usr/bin/env python3\" your " +"application will not work for users who do not have that version. (This may" +" be what you want if you have not made your code Python 2 compatible)." +msgstr "" +"如果用到的 Python 版本明确,如“/usr/bin/env python3”,则没有该版本的用户将无法运行应用程序。(如果代码不兼容 Python" +" 2,可能正该如此)。" + +#: ../../library/zipapp.rst:250 +msgid "" +"There is no way to say \"python X.Y or later\", so be careful of using an " +"exact version like \"/usr/bin/env python3.4\" as you will need to change " +"your shebang line for users of Python 3.5, for example." +msgstr "" +"因为无法指定“python X.Y以上版本”,所以应小心“/usr/bin/env python3.4”这种精确版本的指定方式,因为对于 Python " +"3.5 的用户就得修改释伴行,比如:" + +#: ../../library/zipapp.rst:254 +msgid "" +"Typically, you should use an \"/usr/bin/env python2\" or \"/usr/bin/env " +"python3\", depending on whether your code is written for Python 2 or 3." +msgstr "" +"通常应该用“/usr/bin/env python2”或“/usr/bin/env python3”的格式,具体根据代码适用于 Python 2 还是 " +"3 而定。" + +#: ../../library/zipapp.rst:259 +msgid "Creating Standalone Applications with zipapp" +msgstr "用 zipapp 创建独立运行的应用程序" + +#: ../../library/zipapp.rst:261 +msgid "" +"Using the :mod:`zipapp` module, it is possible to create self-contained " +"Python programs, which can be distributed to end users who only need to have" +" a suitable version of Python installed on their system. The key to doing " +"this is to bundle all of the application's dependencies into the archive, " +"along with the application code." +msgstr "" +"利用 :mod:`zipapp` 模块可以创建独立运行的 Python 程序,以便向最终用户发布,仅需在系统中装有合适版本的 Python " +"即可运行。操作的关键就是把应用程序代码和所有依赖项一起放入打包文件中。" + +#: ../../library/zipapp.rst:267 +msgid "The steps to create a standalone archive are as follows:" +msgstr "创建独立运行打包文件的步骤如下:" + +#: ../../library/zipapp.rst:269 +msgid "" +"Create your application in a directory as normal, so you have a ``myapp`` " +"directory containing a ``__main__.py`` file, and any supporting application " +"code." +msgstr "照常在某个目录中创建应用程序,于是会有一个 ``myapp`` 目录,里面有个 ``__main__.py`` 文件,以及所有支持性代码。" + +#: ../../library/zipapp.rst:273 +msgid "" +"Install all of your application's dependencies into the ``myapp`` directory," +" using pip:" +msgstr "用 pip 将应用程序的所有依赖项装入 ``myapp`` 目录。" + +#: ../../library/zipapp.rst:280 +msgid "" +"(this assumes you have your project requirements in a ``requirements.txt`` " +"file - if not, you can just list the dependencies manually on the pip " +"command line)." +msgstr "(这里假定在 ``requirements.txt`` 文件中列出了项目所需的依赖项,也可以在 pip 命令行中列出依赖项)。" + +#: ../../library/zipapp.rst:284 +msgid "" +"Optionally, delete the ``.dist-info`` directories created by pip in the " +"``myapp`` directory. These hold metadata for pip to manage the packages, and" +" as you won't be making any further use of pip they aren't required - " +"although it won't do any harm if you leave them." +msgstr "" +"pip 在 ``myapp`` 中创建的 ``.dist-info`` 目录,是可以删除的。这些目录保存了 pip " +"用于管理包的元数据,由于接下来不会再用到 pip,所以不是必须存在,当然留下来也不会有什么坏处。" + +#: ../../library/zipapp.rst:289 +msgid "Package the application using:" +msgstr "用以下命令打包:" + +#: ../../library/zipapp.rst:295 +msgid "" +"This will produce a standalone executable, which can be run on any machine " +"with the appropriate interpreter available. See :ref:`zipapp-specifying-the-" +"interpreter` for details. It can be shipped to users as a single file." +msgstr "" +"这会生成一个独立的可执行文件,可在任何装有合适解释器的机器上运行。详情参见 :ref:`zipapp-specifying-the-" +"interpreter`。可以单个文件的形式分发给用户。" + +#: ../../library/zipapp.rst:299 +msgid "" +"On Unix, the ``myapp.pyz`` file is executable as it stands. You can rename " +"the file to remove the ``.pyz`` extension if you prefer a \"plain\" command " +"name. On Windows, the ``myapp.pyz[w]`` file is executable by virtue of the " +"fact that the Python interpreter registers the ``.pyz`` and ``.pyzw`` file " +"extensions when installed." +msgstr "" +"在 Unix 系统中, ``myapp.pyz`` 文件将以原有文件名执行。如果喜欢 “普通”的命令名,可以重命名该文件,去掉扩展名 ``.pyz`` " +"。在 Windows 系统中, ``myapp.pyz[w]`` 是可执行文件,因为 Python 解释器在安装时注册了扩展名 ``.pyz`` 和 " +"``.pyzw`` 。" + +#: ../../library/zipapp.rst:307 +msgid "Making a Windows executable" +msgstr "制作 Windows 可执行文件" + +#: ../../library/zipapp.rst:309 +msgid "" +"On Windows, registration of the ``.pyz`` extension is optional, and " +"furthermore, there are certain places that don't recognise registered " +"extensions \"transparently\" (the simplest example is that " +"``subprocess.run(['myapp'])`` won't find your application - you need to " +"explicitly specify the extension)." +msgstr "" +"在 Windows 系统中,可能没有注册扩展名 " +"``.pyz``,另外有些场合无法“透明”地识别已注册的扩展(最简单的例子是,``subprocess.run(['myapp'])`` " +"就找不到——需要明确指定扩展名)。" + +#: ../../library/zipapp.rst:315 +msgid "" +"On Windows, therefore, it is often preferable to create an executable from " +"the zipapp. This is relatively easy, although it does require a C compiler." +" The basic approach relies on the fact that zipfiles can have arbitrary " +"data prepended, and Windows exe files can have arbitrary data appended. So " +"by creating a suitable launcher and tacking the ``.pyz`` file onto the end " +"of it, you end up with a single-file executable that runs your application." +msgstr "" +"因此,在 Windows 系统中,通常最好 由zipapp 创建一个可执行文件。虽然需要用到 C " +"编译器,但还是相对容易做到的。基本做法有赖于以下事实,即 zip 文件内可预置任意数据,Windows 的 exe " +"文件也可以附带任意数据。因此,创建一个合适的启动程序并将 ``.pyz`` 文件附在后面,最后就能得到一个单文件的可执行文件,可运行 Python " +"应用程序。" + +#: ../../library/zipapp.rst:322 +msgid "A suitable launcher can be as simple as the following::" +msgstr "合适的启动程序可以简单如下:" + +#: ../../library/zipapp.rst:347 +msgid "" +"If you define the ``WINDOWS`` preprocessor symbol, this will generate a GUI " +"executable, and without it, a console executable." +msgstr "若已定义了预处理器符号 ``WINDOWS``,上述代码将会生成一个 GUI 可执行文件。若未定义则生成一个可执行的控制台文件。" + +#: ../../library/zipapp.rst:350 +msgid "" +"To compile the executable, you can either just use the standard MSVC command" +" line tools, or you can take advantage of the fact that distutils knows how " +"to compile Python source::" +msgstr "直接使用标准的 MSVC 命令行工具,或利用 distutils 知道如何编译 Python 源代码,即可编译可执行文件:" + +#: ../../library/zipapp.rst:377 +msgid "" +"The resulting launcher uses the \"Limited ABI\", so it will run unchanged " +"with any version of Python 3.x. All it needs is for Python " +"(``python3.dll``) to be on the user's ``PATH``." +msgstr "" +"生成的启动程序用到了 “受限 ABI”,所以可在任意版本的 Python 3.x 中运行。只要用户的 ``PATH`` 中包含了 " +"Python(``python3.dll``)路径即可。" + +#: ../../library/zipapp.rst:381 +msgid "" +"For a fully standalone distribution, you can distribute the launcher with " +"your application appended, bundled with the Python \"embedded\" " +"distribution. This will run on any PC with the appropriate architecture (32" +" bit or 64 bit)." +msgstr "" +"若要得到完全独立运行的发行版程序,可将附有应用程序的启动程序,与“内嵌版” Python 打包在一起即可。这样在架构匹配(32位或64位)的任一 PC " +"上都能运行。" + +#: ../../library/zipapp.rst:387 +msgid "Caveats" +msgstr "注意事项" + +#: ../../library/zipapp.rst:389 +msgid "" +"There are some limitations to the process of bundling your application into " +"a single file. In most, if not all, cases they can be addressed without " +"needing major changes to your application." +msgstr "要将应用程序打包为单个文件,存在一些限制。大多数情况下,无需对应用程序进行重大修改即可解决。" + +#: ../../library/zipapp.rst:393 +msgid "" +"If your application depends on a package that includes a C extension, that " +"package cannot be run from a zip file (this is an OS limitation, as " +"executable code must be present in the filesystem for the OS loader to load " +"it). In this case, you can exclude that dependency from the zipfile, and " +"either require your users to have it installed, or ship it alongside your " +"zipfile and add code to your ``__main__.py`` to include the directory " +"containing the unzipped module in ``sys.path``. In this case, you will need " +"to make sure to ship appropriate binaries for your target architecture(s) " +"(and potentially pick the correct version to add to ``sys.path`` at runtime," +" based on the user's machine)." +msgstr "" +"如果应用程序依赖某个带有 C " +"扩展的包,则此程序包无法由打包文件运行(这是操作系统的限制,因为可执行代码必须存在于文件系统中,操作系统才能加载)。这时可去除打包文件中的依赖关系,然后要求用户事先安装好该程序包,或者与打包文件一起发布并在" +" ``__main__.py`` 中增加代码,将未打包模块的目录加入 ``sys.path`` " +"中。采用增加代码方式时,一定要为目标架构提供合适的二进制文件(可能还需在运行时根据用户的机器选择正确的版本加入 ``sys.path``)。" + +#: ../../library/zipapp.rst:403 +msgid "" +"If you are shipping a Windows executable as described above, you either need" +" to ensure that your users have ``python3.dll`` on their PATH (which is not " +"the default behaviour of the installer) or you should bundle your " +"application with the embedded distribution." +msgstr "" +"若要如上所述发布一个 Windows 可执行文件,就得确保用户在 PATH 中包含 ``python3.dll`` " +"的路径(安装程序默认不会如此),或者应把应用程序与内嵌版 Python 一起打包。" + +#: ../../library/zipapp.rst:408 +msgid "" +"The suggested launcher above uses the Python embedding API. This means that" +" in your application, ``sys.executable`` will be your application, and *not*" +" a conventional Python interpreter. Your code and its dependencies need to " +"be prepared for this possibility. For example, if your application uses the" +" :mod:`multiprocessing` module, it will need to call " +":func:`multiprocessing.set_executable` to let the module know where to find " +"the standard Python interpreter." +msgstr "" +"上述给出的启动程序采用了 Python 嵌入 API。 这意味着应用程序将会是 ``sys.executable`` ,而*不是*传统的 Python " +"解释器。代码及依赖项需做好准备。例如,如果应用程序用到了 :mod:`multiprocessing` 模块,就需要调用 " +":func:`multiprocessing.set_executable` 来让模块知道标准 Python 解释器的位置。" + +#: ../../library/zipapp.rst:418 +msgid "The Python Zip Application Archive Format" +msgstr "Python 打包应用程序的格式" + +#: ../../library/zipapp.rst:420 +msgid "" +"Python has been able to execute zip files which contain a ``__main__.py`` " +"file since version 2.6. In order to be executed by Python, an application " +"archive simply has to be a standard zip file containing a ``__main__.py`` " +"file which will be run as the entry point for the application. As usual for" +" any Python script, the parent of the script (in this case the zip file) " +"will be placed on :data:`sys.path` and thus further modules can be imported " +"from the zip file." +msgstr "" +"自 2.6 版开始,Python 即能够执行包含 文件的打包文件了。为了能被 Python 执行,应用程序的打包文件必须为包含 " +"``__main__.py`` 文件的标准 zip 文件,``__main__.py`` 文件将作为应用程序的入口运行。类似于常规的 Python " +"脚本,父级(这里指打包文件)将放入 :data:`sys.path` ,因此可从打包文件中导入更多的模块。" + +#: ../../library/zipapp.rst:427 +msgid "" +"The zip file format allows arbitrary data to be prepended to a zip file. " +"The zip application format uses this ability to prepend a standard POSIX " +"\"shebang\" line to the file (``#!/path/to/interpreter``)." +msgstr "" +"zip 文件格式允许在文件中预置任意数据。利用这种能力,zip 应用程序格式在文件中预置了一个标准的 POSIX " +"“释伴”行(``#!/path/to/interpreter``)。" + +#: ../../library/zipapp.rst:431 +msgid "Formally, the Python zip application format is therefore:" +msgstr "因此,Python zip 应用程序的格式会如下所示:" + +#: ../../library/zipapp.rst:433 +msgid "" +"An optional shebang line, containing the characters ``b'#!'`` followed by an" +" interpreter name, and then a newline (``b'\\n'``) character. The " +"interpreter name can be anything acceptable to the OS \"shebang\" " +"processing, or the Python launcher on Windows. The interpreter should be " +"encoded in UTF-8 on Windows, and in :func:`sys.getfilesystemencoding()` on " +"POSIX." +msgstr "" +"可选的释伴行,包含字符 ``b'#!'``,后面是解释器名,然后是换行符 (``b'\\n'``)。 解释器名可为操作系统 " +"“释伴”处理所能接受的任意值,或为 Windows 系统中的 Python 启动程序。解释器名在 Windows 中应用 UTF-8 编码,在 " +"POSIX 中则用 :func:`sys.getfilesystemencoding()`。" + +#: ../../library/zipapp.rst:438 +msgid "" +"Standard zipfile data, as generated by the :mod:`zipfile` module. The " +"zipfile content *must* include a file called ``__main__.py`` (which must be " +"in the \"root\" of the zipfile - i.e., it cannot be in a subdirectory). The" +" zipfile data can be compressed or uncompressed." +msgstr "" +"标准的打包文件由 :mod:`zipfile` 模块生成。其中 *必须* 包含一个名为 ``__main__.py`` " +"的文件(必须位于打包文件的“根”目录——不能位于某个子目录中)。打包文件中的数据可以是压缩或未压缩的。" + +#: ../../library/zipapp.rst:443 +msgid "" +"If an application archive has a shebang line, it may have the executable bit" +" set on POSIX systems, to allow it to be executed directly." +msgstr "如果应用程序的打包文件带有释伴行,则在 POSIX 系统中可能需要启用可执行属性,以允许直接执行。" + +#: ../../library/zipapp.rst:446 +msgid "" +"There is no requirement that the tools in this module are used to create " +"application archives - the module is a convenience, but archives in the " +"above format created by any means are acceptable to Python." +msgstr "不一定非要用本模块中的工具创建应用程序打包文件,本模块只是提供了便捷方案,上述格式的打包文件可用任何方式创建,均可被 Python 接受。" diff --git a/library/zipfile.po b/library/zipfile.po new file mode 100644 index 000000000..77ebf63e0 --- /dev/null +++ b/library/zipfile.po @@ -0,0 +1,1148 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) 2001-2025, Python Software Foundation +# This file is distributed under the same license as the Python package. +# FIRST AUTHOR , YEAR. +# +# Translators: +# 操旭 , 2017 +# cdarlint , 2019 +# sgqy , 2019 +# Zombie110year , 2019 +# 钢 彭 , 2019 +# Makdon , 2019 +# ppcfish , 2019 +# Freesand Leo , 2022 +# Rafael Fontenelle , 2025 +# +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: Python 3.9\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2025-02-07 16:40+0000\n" +"PO-Revision-Date: 2017-02-16 23:37+0000\n" +"Last-Translator: Rafael Fontenelle , 2025\n" +"Language-Team: Chinese (China) (https://app.transifex.com/python-doc/teams/5390/zh_CN/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: zh_CN\n" +"Plural-Forms: nplurals=1; plural=0;\n" + +#: ../../library/zipfile.rst:2 +msgid ":mod:`zipfile` --- Work with ZIP archives" +msgstr ":mod:`zipfile` --- 使用ZIP存档" + +#: ../../library/zipfile.rst:10 +msgid "**Source code:** :source:`Lib/zipfile.py`" +msgstr "**源代码:** :source:`Lib/zipfile.py`" + +#: ../../library/zipfile.rst:14 +msgid "" +"The ZIP file format is a common archive and compression standard. This " +"module provides tools to create, read, write, append, and list a ZIP file. " +"Any advanced use of this module will require an understanding of the format," +" as defined in `PKZIP Application Note`_." +msgstr "" +"ZIP 文件格式是一个常用的归档与压缩标准。 这个模块提供了创建、读取、写入、添加及列出 ZIP 文件的工具。 " +"任何对此模块的进阶使用都将需要理解此格式,其定义参见 `PKZIP 应用程序笔记`_。" + +#: ../../library/zipfile.rst:19 +msgid "" +"This module does not currently handle multi-disk ZIP files. It can handle " +"ZIP files that use the ZIP64 extensions (that is ZIP files that are more " +"than 4 GiB in size). It supports decryption of encrypted files in ZIP " +"archives, but it currently cannot create an encrypted file. Decryption is " +"extremely slow as it is implemented in native Python rather than C." +msgstr "" +"此模块目前不能处理分卷 ZIP 文件。它可以处理使用 ZIP64 扩展(超过 4 GB 的 ZIP 文件)的 ZIP 文件。它支持解密 ZIP " +"归档中的加密文件,但是目前不能创建一个加密的文件。解密非常慢,因为它是使用原生 Python 而不是 C 实现的。" + +#: ../../library/zipfile.rst:26 +msgid "The module defines the following items:" +msgstr "这个模块定义了以下内容:" + +#: ../../library/zipfile.rst:30 +msgid "The error raised for bad ZIP files." +msgstr "为损坏的 ZIP 文件抛出的错误。" + +#: ../../library/zipfile.rst:37 +msgid "" +"Alias of :exc:`BadZipFile`, for compatibility with older Python versions." +msgstr ":exc:`BadZipFile` 的别名,与旧版本 Python 保持兼容性。" + +#: ../../library/zipfile.rst:44 +msgid "" +"The error raised when a ZIP file would require ZIP64 functionality but that " +"has not been enabled." +msgstr "当 ZIP 文件需要 ZIP64 功能但是未启用时会抛出此错误。" + +#: ../../library/zipfile.rst:51 +msgid "" +"The class for reading and writing ZIP files. See section :ref:`zipfile-" +"objects` for constructor details." +msgstr "用于读写 ZIP 文件的类。 欲了解构造函数的描述,参阅段落 :ref:`zipfile-objects`。" + +#: ../../library/zipfile.rst:58 +msgid "" +"A pathlib-compatible wrapper for zip files. See section :ref:`path-objects` " +"for details." +msgstr "用于 zip 文件的兼容 pathlib 的包装器。 详情参见 :ref:`path-objects`。" + +#: ../../library/zipfile.rst:67 +msgid "Class for creating ZIP archives containing Python libraries." +msgstr "用于创建包含 Python 库的 ZIP 归档的类。" + +#: ../../library/zipfile.rst:72 +msgid "" +"Class used to represent information about a member of an archive. Instances " +"of this class are returned by the :meth:`.getinfo` and :meth:`.infolist` " +"methods of :class:`ZipFile` objects. Most users of the :mod:`zipfile` " +"module will not need to create these, but only use those created by this " +"module. *filename* should be the full name of the archive member, and " +"*date_time* should be a tuple containing six fields which describe the time " +"of the last modification to the file; the fields are described in section " +":ref:`zipinfo-objects`." +msgstr "" +"用于表示档案内一个成员信息的类。 此类的实例会由 :class:`ZipFile` 对象的 :meth:`.getinfo` 和 " +":meth:`.infolist` 方法返回。 大多数 :mod:`zipfile` 模块的用户都不必创建它们,只需使用此模块所创建的实例。 " +"*filename* 应当是档案成员的全名,*date_time* 应当是包含六个字段的描述最近修改时间的元组;这些字段的描述请参阅 " +":ref:`zipinfo-objects`。" + +#: ../../library/zipfile.rst:83 +msgid "" +"Returns ``True`` if *filename* is a valid ZIP file based on its magic " +"number, otherwise returns ``False``. *filename* may be a file or file-like " +"object too." +msgstr "" +"根据文件的 Magic Number,如果 *filename* 是一个有效的 ZIP 文件则返回 ``True``,否则返回 ``False``。 " +"*filename* 也可能是一个文件或类文件对象。" + +#: ../../library/zipfile.rst:86 +msgid "Support for file and file-like objects." +msgstr "支持文件或类文件对象。" + +#: ../../library/zipfile.rst:92 +msgid "The numeric constant for an uncompressed archive member." +msgstr "未被压缩的归档成员的数字常数。" + +#: ../../library/zipfile.rst:97 +msgid "" +"The numeric constant for the usual ZIP compression method. This requires " +"the :mod:`zlib` module." +msgstr "常用的 ZIP 压缩方法的数字常数。需要 :mod:`zlib` 模块。" + +#: ../../library/zipfile.rst:103 +msgid "" +"The numeric constant for the BZIP2 compression method. This requires the " +":mod:`bz2` module." +msgstr "BZIP2 压缩方法的数字常数。需要 :mod:`bz2` 模块。" + +#: ../../library/zipfile.rst:110 +msgid "" +"The numeric constant for the LZMA compression method. This requires the " +":mod:`lzma` module." +msgstr "LZMA 压缩方法的数字常数。需要 :mod:`lzma` 模块。" + +#: ../../library/zipfile.rst:117 +msgid "" +"The ZIP file format specification has included support for bzip2 compression" +" since 2001, and for LZMA compression since 2006. However, some tools " +"(including older Python releases) do not support these compression methods, " +"and may either refuse to process the ZIP file altogether, or fail to extract" +" individual files." +msgstr "" +"ZIP 文件格式规范包括自 2001 年以来对 bzip2 压缩的支持,以及自 2006 年以来对 LZMA 压缩的支持。但是,一些工具(包括较旧的 " +"Python 版本)不支持这些压缩方法,并且可能拒绝完全处理 ZIP 文件,或者无法提取单个文件。" + +#: ../../library/zipfile.rst:128 +msgid "`PKZIP Application Note`_" +msgstr "`PKZIP 应用程序笔记`_" + +#: ../../library/zipfile.rst:127 +msgid "" +"Documentation on the ZIP file format by Phil Katz, the creator of the format" +" and algorithms used." +msgstr "Phil Katz 编写的 ZIP 文件格式文档,此格式和使用的算法的创建者。" + +#: ../../library/zipfile.rst:131 +msgid "`Info-ZIP Home Page `_" +msgstr "`Info-ZIP 主页 `_" + +#: ../../library/zipfile.rst:131 +msgid "" +"Information about the Info-ZIP project's ZIP archive programs and " +"development libraries." +msgstr "有关 Info-ZIP 项目的 ZIP 存档程序和开发库的信息。" + +#: ../../library/zipfile.rst:138 +msgid "ZipFile Objects" +msgstr "ZipFile 对象" + +#: ../../library/zipfile.rst:144 +msgid "" +"Open a ZIP file, where *file* can be a path to a file (a string), a file-" +"like object or a :term:`path-like object`." +msgstr "" +"打开一个 ZIP 文件,*file* 为一个指向文件的路径(字符串),一个类文件对象或者一个 :term:`path-like object`。" + +#: ../../library/zipfile.rst:147 +msgid "" +"The *mode* parameter should be ``'r'`` to read an existing file, ``'w'`` to " +"truncate and write a new file, ``'a'`` to append to an existing file, or " +"``'x'`` to exclusively create and write a new file. If *mode* is ``'x'`` and" +" *file* refers to an existing file, a :exc:`FileExistsError` will be raised." +" If *mode* is ``'a'`` and *file* refers to an existing ZIP file, then " +"additional files are added to it. If *file* does not refer to a ZIP file, " +"then a new ZIP archive is appended to the file. This is meant for adding a " +"ZIP archive to another file (such as :file:`python.exe`). If *mode* is " +"``'a'`` and the file does not exist at all, it is created. If *mode* is " +"``'r'`` or ``'a'``, the file should be seekable." +msgstr "" +"形参 *mode* 应当为 ``'r'`` 来读取一个存在的文件,``'w'`` 来截断并写入新的文件, ``'a'`` 来添加到一个存在的文件,或者 " +"``'x'`` 来仅新建并写入新的文件。如果 *mode* 为 ``'x'`` 并且 *file* 指向已经存在的文件,则抛出 " +":exc:`FileExistsError`。如果 *mode* 为 ``'a'`` 且 *file* 为已存在的文件,则格外的文件将被加入。如果 " +"*file* 不指向 ZIP 文件,之后一个新的 ZIP 归档将被追加为此文件。这是为了将 ZIP 归档添加到另一个文件(例如 " +":file:`python.exe`)。如果 *mode* 为 ``'a'`` 并且文件不存在, 则会新建。如果 *mode* 为 ``'r'`` 或 " +"``'a'``, 则文件应当可定位。" + +#: ../../library/zipfile.rst:159 +msgid "" +"*compression* is the ZIP compression method to use when writing the archive," +" and should be :const:`ZIP_STORED`, :const:`ZIP_DEFLATED`, " +":const:`ZIP_BZIP2` or :const:`ZIP_LZMA`; unrecognized values will cause " +":exc:`NotImplementedError` to be raised. If :const:`ZIP_DEFLATED`, " +":const:`ZIP_BZIP2` or :const:`ZIP_LZMA` is specified but the corresponding " +"module (:mod:`zlib`, :mod:`bz2` or :mod:`lzma`) is not available, " +":exc:`RuntimeError` is raised. The default is :const:`ZIP_STORED`." +msgstr "" +"*compression* 是在写入归档时要使用的 ZIP 压缩方法,应为 :const:`ZIP_STORED`, " +":const:`ZIP_DEFLATED`, :const:`ZIP_BZIP2` 或 :const:`ZIP_LZMA`;不可识别的值将导致引发 " +":exc:`NotImplementedError`。 如果指定了 :const:`ZIP_DEFLATED`, :const:`ZIP_BZIP2` " +"或 :const:`ZIP_LZMA` 但相应的模块 (:mod:`zlib`, :mod:`bz2` 或 :mod:`lzma`) 不可用,则会引发 " +":exc:`RuntimeError`。 默认值为 :const:`ZIP_STORED`。" + +#: ../../library/zipfile.rst:167 +msgid "" +"If *allowZip64* is ``True`` (the default) zipfile will create ZIP files that" +" use the ZIP64 extensions when the zipfile is larger than 4 GiB. If it is " +"``false`` :mod:`zipfile` will raise an exception when the ZIP file would " +"require ZIP64 extensions." +msgstr "" +"如果 *allowZip64* 为 ``True`` (默认值) 则当 zipfile 大于 4 GiB 时 zipfile 将创建使用 ZIP64 " +"扩展的 ZIP 文件。 如果该参数为 ``false`` 则当 ZIP 文件需要 ZIP64 扩展时 :mod:`zipfile` 将引发异常。" + +#: ../../library/zipfile.rst:172 +msgid "" +"The *compresslevel* parameter controls the compression level to use when " +"writing files to the archive. When using :const:`ZIP_STORED` or " +":const:`ZIP_LZMA` it has no effect. When using :const:`ZIP_DEFLATED` " +"integers ``0`` through ``9`` are accepted (see :class:`zlib " +"` for more information). When using :const:`ZIP_BZIP2` " +"integers ``1`` through ``9`` are accepted (see :class:`bz2 ` " +"for more information)." +msgstr "" +"*compresslevel* 形参控制在将文件写入归档时要使用的压缩等级。 当使用 :const:`ZIP_STORED` 或 " +":const:`ZIP_LZMA` 时无压缩效果。 当使用 :const:`ZIP_DEFLATED` 时接受整数 ``0`` 至 ``9`` " +"(更多信息参见 :class:`zlib `)。 当使用 :const:`ZIP_BZIP2` 时接受整数 " +"``1`` 至 ``9`` (更多信息参见 :class:`bz2 `)。" + +#: ../../library/zipfile.rst:180 ../../library/zipfile.rst:640 +msgid "" +"The *strict_timestamps* argument, when set to ``False``, allows to zip files" +" older than 1980-01-01 at the cost of setting the timestamp to 1980-01-01. " +"Similar behavior occurs with files newer than 2107-12-31, the timestamp is " +"also set to the limit." +msgstr "" +"*strict_timestamps* 参数在设为 ``False`` 时允许压缩早于 1980-01-01 的文件,代价时会将时间戳设为 " +"1980-01-01。 类似的行为也会对晚于 2107-12-31 的文件发生,时间戳也会被设为该上限值。" + +#: ../../library/zipfile.rst:186 +msgid "" +"If the file is created with mode ``'w'``, ``'x'`` or ``'a'`` and then " +":meth:`closed ` without adding any files to the archive, the " +"appropriate ZIP structures for an empty archive will be written to the file." +msgstr "" +"如果创建文件时使用 ``'w'``, ``'x'`` 或 ``'a'`` 模式并且未向归档添加任何文件就执行了 :meth:`closed " +"`,则会将适当的空归档 ZIP 结构写入文件。" + +#: ../../library/zipfile.rst:190 +msgid "" +"ZipFile is also a context manager and therefore supports the :keyword:`with`" +" statement. In the example, *myzip* is closed after the :keyword:`!with` " +"statement's suite is finished---even if an exception occurs::" +msgstr "" +"ZipFile 也是一个上下文管理器,因此支持 :keyword:`with` 语句。 在这个示例中,*myzip* 将在 " +":keyword:`!with` 语句块执行完成之后被关闭 --- 即使是发生了异常::" + +#: ../../library/zipfile.rst:197 +msgid "Added the ability to use :class:`ZipFile` as a context manager." +msgstr "添加了将 :class:`ZipFile` 用作上下文管理器的功能。" + +#: ../../library/zipfile.rst:200 +msgid "Added support for :mod:`bzip2 ` and :mod:`lzma` compression." +msgstr "添加了对 :mod:`bzip2 ` 和 :mod:`lzma` 压缩的支持。" + +#: ../../library/zipfile.rst:203 ../../library/zipfile.rst:554 +msgid "ZIP64 extensions are enabled by default." +msgstr "默认启用 ZIP64 扩展。" + +#: ../../library/zipfile.rst:206 +msgid "" +"Added support for writing to unseekable streams. Added support for the " +"``'x'`` mode." +msgstr "添加了对不可查找数据流的支持。 并添加了对 ``'x'`` 模式的支持。" + +#: ../../library/zipfile.rst:210 +msgid "" +"Previously, a plain :exc:`RuntimeError` was raised for unrecognized " +"compression values." +msgstr "在此之前,对于不可识别的压缩值将引发普通的 :exc:`RuntimeError`。" + +#: ../../library/zipfile.rst:214 +msgid "The *file* parameter accepts a :term:`path-like object`." +msgstr "*file* 形参接受一个 :term:`path-like object`。" + +#: ../../library/zipfile.rst:217 +msgid "Add the *compresslevel* parameter." +msgstr "添加了 *compresslevel* 形参。" + +#: ../../library/zipfile.rst:220 ../../library/zipfile.rst:651 +msgid "The *strict_timestamps* keyword-only argument" +msgstr "*strict_timestamps* 仅限关键字参数" + +#: ../../library/zipfile.rst:226 +msgid "" +"Close the archive file. You must call :meth:`close` before exiting your " +"program or essential records will not be written." +msgstr "关闭归档文件。 你必须在退出程序之前调用 :meth:`close` 否则将不会写入关键记录数据。" + +#: ../../library/zipfile.rst:232 +msgid "" +"Return a :class:`ZipInfo` object with information about the archive member " +"*name*. Calling :meth:`getinfo` for a name not currently contained in the " +"archive will raise a :exc:`KeyError`." +msgstr "" +"返回一个 :class:`ZipInfo` 对象,其中包含有关归档成员 *name* 的信息。 针对一个目前并不包含于归档中的名称调用 " +":meth:`getinfo` 将会引发 :exc:`KeyError`。" + +#: ../../library/zipfile.rst:239 +msgid "" +"Return a list containing a :class:`ZipInfo` object for each member of the " +"archive. The objects are in the same order as their entries in the actual " +"ZIP file on disk if an existing archive was opened." +msgstr "" +"返回一个列表,其中包含每个归档成员的 :class:`ZipInfo` 对象。 如果是打开一个现有归档则这些对象的排列顺序与它们对应条目在磁盘上的实际 " +"ZIP 文件中的顺序一致。" + +#: ../../library/zipfile.rst:246 +msgid "Return a list of archive members by name." +msgstr "返回按名称排序的归档成员列表。" + +#: ../../library/zipfile.rst:251 +msgid "" +"Access a member of the archive as a binary file-like object. *name* can be " +"either the name of a file within the archive or a :class:`ZipInfo` object. " +"The *mode* parameter, if included, must be ``'r'`` (the default) or ``'w'``." +" *pwd* is the password used to decrypt encrypted ZIP files." +msgstr "" +"以二进制文件类对象的形式访问一个归档成员。 *name* 可以是归档内某个文件的名称也可以是某个 :class:`ZipInfo` 对象。 如果包含了 " +"*mode* 形参,则它必须为 ``'r'`` (默认值) 或 ``'w'``。 *pwd* 为用于解密已加密 ZIP 文件的密码。" + +#: ../../library/zipfile.rst:256 +msgid "" +":meth:`~ZipFile.open` is also a context manager and therefore supports the " +":keyword:`with` statement::" +msgstr ":meth:`~ZipFile.open` 也是一个上下文管理器,因此支持 :keyword:`with` 语句::" + +#: ../../library/zipfile.rst:263 +msgid "" +"With *mode* ``'r'`` the file-like object (``ZipExtFile``) is read-only and " +"provides the following methods: :meth:`~io.BufferedIOBase.read`, " +":meth:`~io.IOBase.readline`, :meth:`~io.IOBase.readlines`, " +":meth:`~io.IOBase.seek`, :meth:`~io.IOBase.tell`, :meth:`__iter__`, " +":meth:`~iterator.__next__`. These objects can operate independently of the " +"ZipFile." +msgstr "" +"如果 *mode* 为 ``'r'`` 则文件类对象 (``ZipExtFile``) 将为只读并且提供下列方法: " +":meth:`~io.BufferedIOBase.read`, :meth:`~io.IOBase.readline`, " +":meth:`~io.IOBase.readlines`, :meth:`~io.IOBase.seek`, " +":meth:`~io.IOBase.tell`, :meth:`__iter__`, :meth:`~iterator.__next__`。 " +"这些对象可独立于 ZipFile 进行操作。" + +#: ../../library/zipfile.rst:270 +msgid "" +"With ``mode='w'``, a writable file handle is returned, which supports the " +":meth:`~io.BufferedIOBase.write` method. While a writable file handle is " +"open, attempting to read or write other files in the ZIP file will raise a " +":exc:`ValueError`." +msgstr "" +"如果 ``mode='w'`` 则返回一个可写入的文件句柄,它将支持 :meth:`~io.BufferedIOBase.write` 方法。 " +"当一个可写入的文件句柄被打开时,尝试读写 ZIP 文件中的其他文件将会引发 :exc:`ValueError`。" + +#: ../../library/zipfile.rst:275 +msgid "" +"When writing a file, if the file size is not known in advance but may exceed" +" 2 GiB, pass ``force_zip64=True`` to ensure that the header format is " +"capable of supporting large files. If the file size is known in advance, " +"construct a :class:`ZipInfo` object with :attr:`~ZipInfo.file_size` set, and" +" use that as the *name* parameter." +msgstr "" +"当写入一个文件时,如果文件大小不能预先确定但是可能超过 2 GiB,可传入 ``force_zip64=True`` 以确保标头格式能够支持超大文件。 " +"如果文件大小可以预先确定,则在构造 :class:`ZipInfo` 对象时应设置 :attr:`~ZipInfo.file_size`,并将其用作 " +"*name* 形参。" + +#: ../../library/zipfile.rst:283 +msgid "" +"The :meth:`.open`, :meth:`read` and :meth:`extract` methods can take a " +"filename or a :class:`ZipInfo` object. You will appreciate this when trying" +" to read a ZIP file that contains members with duplicate names." +msgstr "" +":meth:`.open`, :meth:`read` 和 :meth:`extract` 方法可接受文件名或 :class:`ZipInfo` 对象。" +" 当尝试读取一个包含重复名称成员的 ZIP 文件时你将发现此功能很有好处。" + +#: ../../library/zipfile.rst:287 +msgid "" +"Removed support of ``mode='U'``. Use :class:`io.TextIOWrapper` for reading " +"compressed text files in :term:`universal newlines` mode." +msgstr "" +"移除了对 ``mode='U'`` 的支持。 请使用 :class:`io.TextIOWrapper` 以在 :term:`universal " +"newlines` 模式中读取已压缩的文本文件。" + +#: ../../library/zipfile.rst:291 +msgid "" +":meth:`ZipFile.open` can now be used to write files into the archive with " +"the ``mode='w'`` option." +msgstr "现在 :meth:`ZipFile.open` 可以被用来配合 ``mode='w'`` 选项将文件写入归档。" + +#: ../../library/zipfile.rst:295 +msgid "" +"Calling :meth:`.open` on a closed ZipFile will raise a :exc:`ValueError`. " +"Previously, a :exc:`RuntimeError` was raised." +msgstr "" +"在已关闭的 ZipFile 上调用 :meth:`.open` 将引发 :exc:`ValueError`。 在之前的版本中则会引发 " +":exc:`RuntimeError`。" + +#: ../../library/zipfile.rst:302 +msgid "" +"Extract a member from the archive to the current working directory; *member*" +" must be its full name or a :class:`ZipInfo` object. Its file information " +"is extracted as accurately as possible. *path* specifies a different " +"directory to extract to. *member* can be a filename or a :class:`ZipInfo` " +"object. *pwd* is the password used for encrypted files." +msgstr "" +"从归档中提取出一个成员放入当前工作目录;*member* 必须为成员的完整名称或 :class:`ZipInfo` 对象。 " +"成员的文件信息会尽可能精确地被提取。 *path* 指定一个要提取到的不同目录。 *member* 可以是一个文件名或 :class:`ZipInfo`" +" 对象。 *pwd* 是用于解密文件的密码。" + +#: ../../library/zipfile.rst:308 +msgid "Returns the normalized path created (a directory or new file)." +msgstr "返回所创建的经正规化的路径(对应于目录或新文件)。" + +#: ../../library/zipfile.rst:312 +msgid "" +"If a member filename is an absolute path, a drive/UNC sharepoint and leading" +" (back)slashes will be stripped, e.g.: ``///foo/bar`` becomes ``foo/bar`` on" +" Unix, and ``C:\\foo\\bar`` becomes ``foo\\bar`` on Windows. And all " +"``\"..\"`` components in a member filename will be removed, e.g.: " +"``../../foo../../ba..r`` becomes ``foo../ba..r``. On Windows illegal " +"characters (``:``, ``<``, ``>``, ``|``, ``\"``, ``?``, and ``*``) replaced " +"by underscore (``_``)." +msgstr "" +"如果一个成员文件名为绝对路径,则将去掉驱动器/UNC共享点和前导的(反)斜杠,例如: ``///foo/bar`` 在 Unix 上将变为 " +"``foo/bar``,而 ``C:\\foo\\bar`` 在 Windows 上将变为 ``foo\\bar``。 并且一个成员文件名中的所有 " +"``\"..\"`` 都将被移除,例如: ``../../foo../../ba..r`` 将变为 ``foo../ba..r``。 在 Windows" +" 上非法字符 (``:``, ``<``, ``>``, ``|``, ``\"``, ``?``, and ``*``) 会被替换为下划线 " +"(``_``)。" + +#: ../../library/zipfile.rst:320 +msgid "" +"Calling :meth:`extract` on a closed ZipFile will raise a :exc:`ValueError`." +" Previously, a :exc:`RuntimeError` was raised." +msgstr "" +"在已关闭的 ZipFile 上调用 :meth:`extract` 将引发 :exc:`ValueError`。 在之前的版本中则将引发 " +":exc:`RuntimeError`。" + +#: ../../library/zipfile.rst:324 ../../library/zipfile.rst:347 +msgid "The *path* parameter accepts a :term:`path-like object`." +msgstr "*path* 形参接受一个 :term:`path-like object`。" + +#: ../../library/zipfile.rst:330 +msgid "" +"Extract all members from the archive to the current working directory. " +"*path* specifies a different directory to extract to. *members* is optional" +" and must be a subset of the list returned by :meth:`namelist`. *pwd* is " +"the password used for encrypted files." +msgstr "" +"从归档中提取出所有成员放入当前工作目录。 *path* 指定一个要提取到的不同目录。 *members* 为可选项且必须为 " +":meth:`namelist` 所返回列表的一个子集。 *pwd* 是用于解密文件的密码。" + +#: ../../library/zipfile.rst:337 +msgid "" +"Never extract archives from untrusted sources without prior inspection. It " +"is possible that files are created outside of *path*, e.g. members that have" +" absolute filenames starting with ``\"/\"`` or filenames with two dots " +"``\"..\"``. This module attempts to prevent that. See :meth:`extract` note." +msgstr "" +"绝不要未经预先检验就从不可靠的源中提取归档文件。 这样有可能在 *path* 之外创建文件,例如某些成员具有以 ``\"/\"`` " +"开始的文件名或带有两个点号 ``\"..\"`` 的文件名。 此模块会尝试防止这种情况。 参见 :meth:`extract` 的注释。" + +#: ../../library/zipfile.rst:343 +msgid "" +"Calling :meth:`extractall` on a closed ZipFile will raise a " +":exc:`ValueError`. Previously, a :exc:`RuntimeError` was raised." +msgstr "" +"在已关闭的 ZipFile 上调用 :meth:`extractall` 将引发 :exc:`ValueError`。 在之前的版本中则将引发 " +":exc:`RuntimeError`。" + +#: ../../library/zipfile.rst:353 +msgid "Print a table of contents for the archive to ``sys.stdout``." +msgstr "将归档的目录表打印到 ``sys.stdout``。" + +#: ../../library/zipfile.rst:358 +msgid "Set *pwd* as default password to extract encrypted files." +msgstr "设置 *pwd* 为用于提取已加密文件的默认密码。" + +#: ../../library/zipfile.rst:363 +msgid "" +"Return the bytes of the file *name* in the archive. *name* is the name of " +"the file in the archive, or a :class:`ZipInfo` object. The archive must be " +"open for read or append. *pwd* is the password used for encrypted files " +"and, if specified, it will override the default password set with " +":meth:`setpassword`. Calling :meth:`read` on a ZipFile that uses a " +"compression method other than :const:`ZIP_STORED`, :const:`ZIP_DEFLATED`, " +":const:`ZIP_BZIP2` or :const:`ZIP_LZMA` will raise a " +":exc:`NotImplementedError`. An error will also be raised if the " +"corresponding compression module is not available." +msgstr "" +"返回归档中文件 *name* 的字节数据。 *name* 是归档中文件的名称,或是一个 :class:`ZipInfo` 对象。 " +"归档必须以读取或追加方式打开。 *pwd* 为用于已加密文件的密码,并且如果指定该参数则它将覆盖通过 :meth:`setpassword` " +"设置的默认密码。 on a ZipFile that uses a compression method 在使用 " +":const:`ZIP_STORED` , :const:`ZIP_DEFLATED`, :const:`ZIP_BZIP2` 或 " +":const:`ZIP_LZMA` 以外的压缩方法的 ZipFile 上调用 :meth:`read` 将引发 " +":exc:`NotImplementedError`。 如果相应的压缩模块不可用也会引发错误。" + +#: ../../library/zipfile.rst:372 +msgid "" +"Calling :meth:`read` on a closed ZipFile will raise a :exc:`ValueError`. " +"Previously, a :exc:`RuntimeError` was raised." +msgstr "" +"在已关闭的 ZipFile 上调用 :meth:`read` 将引发 :exc:`ValueError`。 在之前的版本中则会引发 " +":exc:`RuntimeError`。" + +#: ../../library/zipfile.rst:379 +msgid "" +"Read all the files in the archive and check their CRC's and file headers. " +"Return the name of the first bad file, or else return ``None``." +msgstr "读取归档中的所有文件并检查它们的 CRC 和文件头。 返回第一个已损坏文件的名称,在其他情况下则返回 ``None``。" + +#: ../../library/zipfile.rst:382 +msgid "" +"Calling :meth:`testzip` on a closed ZipFile will raise a :exc:`ValueError`." +" Previously, a :exc:`RuntimeError` was raised." +msgstr "" +"在已关闭的 ZipFile 上调用 :meth:`testzip` 将引发 :exc:`ValueError`。 在之前的版本中则将引发 " +":exc:`RuntimeError`。" + +#: ../../library/zipfile.rst:390 +msgid "" +"Write the file named *filename* to the archive, giving it the archive name " +"*arcname* (by default, this will be the same as *filename*, but without a " +"drive letter and with leading path separators removed). If given, " +"*compress_type* overrides the value given for the *compression* parameter to" +" the constructor for the new entry. Similarly, *compresslevel* will override" +" the constructor if given. The archive must be open with mode ``'w'``, " +"``'x'`` or ``'a'``." +msgstr "" +"将名为 *filename* 的文件写入归档,给予的归档名为 *arcname* (默认情况下将与 *filename* " +"一致,但是不带驱动器盘符并会移除开头的路径分隔符)。 *compress_type* 如果给出,它将覆盖作为构造器 *compression* " +"形参对于新条目所给出的值。 类似地,*compresslevel* 如果给出也将覆盖构造器。 归档必须使用 ``'w'``, ``'x'`` 或 " +"``'a'`` 模式打开。" + +#: ../../library/zipfile.rst:400 +msgid "" +"Archive names should be relative to the archive root, that is, they should " +"not start with a path separator." +msgstr "归档名称应当是基于归档根目录的相对路径,也就是说,它们不应以路径分隔符开头。" + +#: ../../library/zipfile.rst:405 +msgid "" +"If ``arcname`` (or ``filename``, if ``arcname`` is not given) contains a " +"null byte, the name of the file in the archive will be truncated at the null" +" byte." +msgstr "" +"如果 ``arcname`` (或 ``filename``,如果 ``arcname`` 未给出) " +"包含一个空字节,则归档中该文件的名称将在空字节位置被截断。" + +#: ../../library/zipfile.rst:410 +msgid "" +"A leading slash in the filename may lead to the archive being impossible to " +"open in some zip programs on Windows systems." +msgstr "文件名开头有一个斜杠可能导致存档文件无法在 Windows 系统上的某些 zip 程序中打开。" + +#: ../../library/zipfile.rst:413 +msgid "" +"Calling :meth:`write` on a ZipFile created with mode ``'r'`` or a closed " +"ZipFile will raise a :exc:`ValueError`. Previously, a :exc:`RuntimeError` " +"was raised." +msgstr "" +"在使用 ``'r'`` 模式创建的 ZipFile 或已关闭的 ZipFile 上调用 :meth:`write` 将引发 " +":exc:`ValueError`。 在之前的版本中则会引发 :exc:`RuntimeError`。" + +#: ../../library/zipfile.rst:422 +msgid "" +"Write a file into the archive. The contents is *data*, which may be either " +"a :class:`str` or a :class:`bytes` instance; if it is a :class:`str`, it is " +"encoded as UTF-8 first. *zinfo_or_arcname* is either the file name it will " +"be given in the archive, or a :class:`ZipInfo` instance. If it's an " +"instance, at least the filename, date, and time must be given. If it's a " +"name, the date and time is set to the current date and time. The archive " +"must be opened with mode ``'w'``, ``'x'`` or ``'a'``." +msgstr "" +"将一个文件写入归档。 内容为 *data*,它可以是一个 :class:`str` 或 :class:`bytes` 的实例;如果是 " +":class:`str`,则会先使用 UTF-8 进行编码。 *zinfo_or_arcname* 可以是它在归档中将被给予的名称,或者是 " +":class:`ZipInfo` 的实例。 如果它是一个实例,则至少必须给定文件名、日期和时间。 如果它是一个名称,则日期和时间会被设为当前日期和时间。" +" 归档必须以 ``'w'``, ``'x'`` 或 ``'a'`` 模式打开。" + +#: ../../library/zipfile.rst:430 +msgid "" +"If given, *compress_type* overrides the value given for the *compression* " +"parameter to the constructor for the new entry, or in the *zinfo_or_arcname*" +" (if that is a :class:`ZipInfo` instance). Similarly, *compresslevel* will " +"override the constructor if given." +msgstr "" +"如果给定了 *compress_type*,它将会覆盖作为新条目构造器的 *compression* 形参或在 *zinfo_or_arcname* " +"(如果是一个 :class:`ZipInfo` 实例) 中所给出的值。 类似地,如果给定了 *compresslevel*,它将会覆盖构造器。" + +#: ../../library/zipfile.rst:437 +msgid "" +"When passing a :class:`ZipInfo` instance as the *zinfo_or_arcname* " +"parameter, the compression method used will be that specified in the " +"*compress_type* member of the given :class:`ZipInfo` instance. By default, " +"the :class:`ZipInfo` constructor sets this member to :const:`ZIP_STORED`." +msgstr "" +"当传入一个 :class:`ZipInfo` 实例作为 *zinfo_or_arcname* 形参时,所使用的压缩方法将为在给定的 " +":class:`ZipInfo` 实例的 *compress_type* 成员中指定的方法。 默认情况下,:class:`ZipInfo` " +"构造器将将此成员设为 :const:`ZIP_STORED`。" + +#: ../../library/zipfile.rst:442 +msgid "The *compress_type* argument." +msgstr "*compress_type* 参数。" + +#: ../../library/zipfile.rst:445 +msgid "" +"Calling :meth:`writestr` on a ZipFile created with mode ``'r'`` or a closed " +"ZipFile will raise a :exc:`ValueError`. Previously, a :exc:`RuntimeError` " +"was raised." +msgstr "" +"在使用 ``'r'`` 模式创建的 ZipFile 或已关闭的 ZipFile 上调用 :meth:`writestr` 将引发 " +":exc:`ValueError`。 在之前的版本中则会引发 :exc:`RuntimeError`。" + +#: ../../library/zipfile.rst:451 +msgid "The following data attributes are also available:" +msgstr "以下数据属性也是可用的:" + +#: ../../library/zipfile.rst:455 +msgid "Name of the ZIP file." +msgstr "ZIP 文件的名称。" + +#: ../../library/zipfile.rst:459 +msgid "" +"The level of debug output to use. This may be set from ``0`` (the default, " +"no output) to ``3`` (the most output). Debugging information is written to " +"``sys.stdout``." +msgstr "" +"要使用的调试输出等级。 这可以设为从 ``0`` (默认无输出) 到 ``3`` (最多输出) 的值。 调试信息会被写入 ``sys.stdout``。" + +#: ../../library/zipfile.rst:465 +msgid "" +"The comment associated with the ZIP file as a :class:`bytes` object. If " +"assigning a comment to a :class:`ZipFile` instance created with mode " +"``'w'``, ``'x'`` or ``'a'``, it should be no longer than 65535 bytes. " +"Comments longer than this will be truncated." +msgstr "" +"关联到 ZIP 文件的 :class:`bytes` 对象形式的说明。 如果将说明赋给以 ``'w'``, ``'x'`` 或 ``'a'`` " +"模式创建的 :class:`ZipFile` 实例,它的长度不应超过 65535 字节。 超过此长度的说明将被截断。" + +#: ../../library/zipfile.rst:475 +msgid "Path Objects" +msgstr "Path 对象" + +#: ../../library/zipfile.rst:479 +msgid "" +"Construct a Path object from a ``root`` zipfile (which may be a " +":class:`ZipFile` instance or ``file`` suitable for passing to the " +":class:`ZipFile` constructor)." +msgstr "" +"根据 ``root`` zipfile (它可以是一个 :class:`ZipFile` 实例或适合传给 :class:`ZipFile` 构造器的 " +"``file``) 构造一个 Path 对象。" + +#: ../../library/zipfile.rst:483 +msgid "" +"``at`` specifies the location of this Path within the zipfile, e.g. " +"'dir/file.txt', 'dir/', or ''. Defaults to the empty string, indicating the " +"root." +msgstr "" +"``at`` 指定此 Path 在 zipfile 中的位置,例如 'dir/file.txt', 'dir/' 或 ''。 " +"默认为空字符串,即指定跟目录。" + +#: ../../library/zipfile.rst:487 +msgid "" +"Path objects expose the following features of :mod:`pathlib.Path` objects:" +msgstr "Path 对象会公开 :mod:`pathlib.Path` 对象的下列特性:" + +#: ../../library/zipfile.rst:490 +msgid "Path objects are traversable using the ``/`` operator." +msgstr "Path 对象可以使用 ``/`` 操作符进行遍历。" + +#: ../../library/zipfile.rst:494 +msgid "The final path component." +msgstr "最终的路径组成部分。" + +#: ../../library/zipfile.rst:498 +msgid "" +"Invoke :meth:`ZipFile.open` on the current path. Allows opening for read or " +"write, text or binary through supported modes: 'r', 'w', 'rb', 'wb'. " +"Positional and keyword arguments are passed through to " +":class:`io.TextIOWrapper` when opened as text and ignored otherwise. ``pwd``" +" is the ``pwd`` parameter to :meth:`ZipFile.open`." +msgstr "" +"在当前路径上唤起 :meth:`ZipFile.open`。 允许通过支持的模式打开用于读取或写入文本或二进制数据: 'r', 'w', 'rb', " +"'wb'。 当以文本模式打开时位置和关键字参数会被传给 :class:`io.TextIOWrapper`,在其他情况下则会被忽略。 ``pwd`` " +"是要传给 :meth:`ZipFile.open` 的 ``pwd`` 形参。" + +#: ../../library/zipfile.rst:507 +msgid "" +"Added support for text and binary modes for open. Default mode is now text." +msgstr "增加了对以文本和二进制模式打开的支持。 现在默认为文本模式。" + +#: ../../library/zipfile.rst:513 +msgid "Enumerate the children of the current directory." +msgstr "枚举当前目录的子目录。" + +#: ../../library/zipfile.rst:517 +msgid "Return ``True`` if the current context references a directory." +msgstr "如果当前上下文引用了一个目录则返回 ``True``。" + +#: ../../library/zipfile.rst:521 +msgid "Return ``True`` if the current context references a file." +msgstr "如果当前上下文引用了一个文件则返回 ``True``。" + +#: ../../library/zipfile.rst:525 +msgid "" +"Return ``True`` if the current context references a file or directory in the" +" zip file." +msgstr "如果当前上下文引用了 zip 文件内的一个文件或目录则返回 ``True``。" + +#: ../../library/zipfile.rst:530 +msgid "" +"Read the current file as unicode text. Positional and keyword arguments are " +"passed through to :class:`io.TextIOWrapper` (except ``buffer``, which is " +"implied by the context)." +msgstr "" +"读取当前文件为 unicode 文本。 位置和关键字参数会被传递给 :class:`io.TextIOWrapper` (``buffer`` " +"除外,它将由上下文确定)。" + +#: ../../library/zipfile.rst:537 +msgid "Read the current file as bytes." +msgstr "读取当前文件为字节串。" + +#: ../../library/zipfile.rst:543 +msgid "PyZipFile Objects" +msgstr "PyZipFile 对象" + +#: ../../library/zipfile.rst:545 +msgid "" +"The :class:`PyZipFile` constructor takes the same parameters as the " +":class:`ZipFile` constructor, and one additional parameter, *optimize*." +msgstr "" +":class:`PyZipFile` 构造器接受与 :class:`ZipFile` 构造器相同的形参,以及一个额外的形参 *optimize*。" + +#: ../../library/zipfile.rst:551 +msgid "The *optimize* parameter." +msgstr "*optimize* 形参。" + +#: ../../library/zipfile.rst:557 +msgid "" +"Instances have one method in addition to those of :class:`ZipFile` objects:" +msgstr "实例在 :class:`ZipFile` 对象所具有的方法以外还附加了一个方法:" + +#: ../../library/zipfile.rst:561 +msgid "" +"Search for files :file:`\\*.py` and add the corresponding file to the " +"archive." +msgstr "查找 :file:`\\*.py` 文件并将相应的文件添加到归档。" + +#: ../../library/zipfile.rst:564 +msgid "" +"If the *optimize* parameter to :class:`PyZipFile` was not given or ``-1``, " +"the corresponding file is a :file:`\\*.pyc` file, compiling if necessary." +msgstr "" +"如果 :class:`PyZipFile` 的 *optimize* 形参未给定或为 ``-1``,则相应的文件为 :file:`\\*.pyc` " +"文件,并在必要时进行编译。" + +#: ../../library/zipfile.rst:567 +msgid "" +"If the *optimize* parameter to :class:`PyZipFile` was ``0``, ``1`` or ``2``," +" only files with that optimization level (see :func:`compile`) are added to " +"the archive, compiling if necessary." +msgstr "" +"如果 :class:`PyZipFile` 的 *optimize* 形参为 ``0``, ``1`` 或 ``2``,则限具有相应优化级别 (参见 " +":func:`compile`) 的文件会被添加到归档,并在必要时进行编译。" + +#: ../../library/zipfile.rst:571 +msgid "" +"If *pathname* is a file, the filename must end with :file:`.py`, and just " +"the (corresponding :file:`\\*.pyc`) file is added at the top level (no path " +"information). If *pathname* is a file that does not end with :file:`.py`, a" +" :exc:`RuntimeError` will be raised. If it is a directory, and the " +"directory is not a package directory, then all the files :file:`\\*.pyc` are" +" added at the top level. If the directory is a package directory, then all " +":file:`\\*.pyc` are added under the package name as a file path, and if any " +"subdirectories are package directories, all of these are added recursively " +"in sorted order." +msgstr "" +"如果 *pathname* 是文件,则文件名必须以 :file:`.py` 为后缀,并且只有 (相应的 :file:`\\*.pyc`) " +"文件会被添加到最高层级(不带路径信息)。 如果 *pathname* 不是以 :file:`.py` 为后缀的文件,则将引发 " +":exc:`RuntimeError`。 如果它是目录,并且该目录不是一个包目录,则所有的 :file:`\\*.pyc` 文件会被添加到最高层级。 " +"如果目录是一个包目录,则所有的 :file:`\\*.pyc` " +"会被添加到包名所表示的文件路径下,并且如果有任何子目录为包目录,则会以排好的顺序递归地添加这些目录。" + +#: ../../library/zipfile.rst:581 +msgid "*basename* is intended for internal use only." +msgstr "*basename* 仅限在内部使用。" + +#: ../../library/zipfile.rst:583 +msgid "" +"*filterfunc*, if given, must be a function taking a single string argument." +" It will be passed each path (including each individual full file path) " +"before it is added to the archive. If *filterfunc* returns a false value, " +"the path will not be added, and if it is a directory its contents will be " +"ignored. For example, if our test files are all either in ``test`` " +"directories or start with the string ``test_``, we can use a *filterfunc* to" +" exclude them::" +msgstr "" +"如果给定 *filterfunc*,则它必须是一个接受单个字符串参数的函数。 在将其添加到归档之前它将被传入每个路径(包括每个单独的完整路径)。 如果 " +"*filterfunc* 返回假值,则路径将不会被添加,而如果它是一个目录则其内容将被忽略。 例如,如果我们的测试文件全都位于 ``test`` " +"目录或以字符串 ``test_`` 打头,则我们可以使用一个 *filterfunc* 来排除它们::" + +#: ../../library/zipfile.rst:597 +msgid "The :meth:`writepy` method makes archives with file names like this::" +msgstr ":meth:`writepy` 方法会产生带有这样一些文件名的归档::" + +#: ../../library/zipfile.rst:606 +msgid "The *filterfunc* parameter." +msgstr "*filterfunc* 形参。" + +#: ../../library/zipfile.rst:609 +msgid "The *pathname* parameter accepts a :term:`path-like object`." +msgstr "*pathname* 形参接受一个 :term:`path-like object`。" + +#: ../../library/zipfile.rst:612 +msgid "Recursion sorts directory entries." +msgstr "递归排序目录条目。" + +#: ../../library/zipfile.rst:619 +msgid "ZipInfo Objects" +msgstr "ZipInfo 对象" + +#: ../../library/zipfile.rst:621 +msgid "" +"Instances of the :class:`ZipInfo` class are returned by the :meth:`.getinfo`" +" and :meth:`.infolist` methods of :class:`ZipFile` objects. Each object " +"stores information about a single member of the ZIP archive." +msgstr "" +":class:`ZipInfo` 类的实例会通过 :meth:`.getinfo` 和 :class:`ZipFile` 对象的 " +":meth:`.infolist` 方法返回。 每个对象将存储关于 ZIP 归档的一个成员的信息。" + +#: ../../library/zipfile.rst:625 +msgid "" +"There is one classmethod to make a :class:`ZipInfo` instance for a " +"filesystem file:" +msgstr "有一个类方法可以为文件系统文件创建 :class:`ZipInfo` 实例:" + +#: ../../library/zipfile.rst:631 +msgid "" +"Construct a :class:`ZipInfo` instance for a file on the filesystem, in " +"preparation for adding it to a zip file." +msgstr "为文件系统中的文件构造一个 :class:`ZipInfo` 实例,并准备将其添加到一个 zip 文件。" + +#: ../../library/zipfile.rst:634 +msgid "" +"*filename* should be the path to a file or directory on the filesystem." +msgstr "*filename* 应为文件系统中某个文件或目录的路径。" + +#: ../../library/zipfile.rst:636 +msgid "" +"If *arcname* is specified, it is used as the name within the archive. If " +"*arcname* is not specified, the name will be the same as *filename*, but " +"with any drive letter and leading path separators removed." +msgstr "" +"如果指定了 *arcname*,它会被用作归档中的名称。 如果未指定 *arcname*,则所用名称与 *filename* " +"相同,但将去除任何驱动器盘符和打头的路径分隔符。" + +#: ../../library/zipfile.rst:648 +msgid "The *filename* parameter accepts a :term:`path-like object`." +msgstr "*filename* 形参接受一个 :term:`path-like object`。" + +#: ../../library/zipfile.rst:655 +msgid "Instances have the following methods and attributes:" +msgstr "实例具有下列方法和属性:" + +#: ../../library/zipfile.rst:659 +msgid "Return ``True`` if this archive member is a directory." +msgstr "如果此归档成员是一个目录则返回 ``True``。" + +#: ../../library/zipfile.rst:661 +msgid "This uses the entry's name: directories should always end with ``/``." +msgstr "这会使用条目的名称:目录应当总是以 ``/`` 结尾。" + +#: ../../library/zipfile.rst:668 +msgid "Name of the file in the archive." +msgstr "归档中的文件名称。" + +#: ../../library/zipfile.rst:673 +msgid "" +"The time and date of the last modification to the archive member. This is a" +" tuple of six values:" +msgstr "上次修改存档成员的时间和日期。这是六个值的元组:" + +#: ../../library/zipfile.rst:677 +msgid "Index" +msgstr "索引" + +#: ../../library/zipfile.rst:677 +msgid "Value" +msgstr "值" + +#: ../../library/zipfile.rst:679 +msgid "``0``" +msgstr "``0``" + +#: ../../library/zipfile.rst:679 +msgid "Year (>= 1980)" +msgstr " 年 (>= 1980)" + +#: ../../library/zipfile.rst:681 +msgid "``1``" +msgstr "``1``" + +#: ../../library/zipfile.rst:681 +msgid "Month (one-based)" +msgstr "月(1为基数)" + +#: ../../library/zipfile.rst:683 +msgid "``2``" +msgstr "``2``" + +#: ../../library/zipfile.rst:683 +msgid "Day of month (one-based)" +msgstr "月份中的日期(1为基数)" + +#: ../../library/zipfile.rst:685 +msgid "``3``" +msgstr "``3``" + +#: ../../library/zipfile.rst:685 +msgid "Hours (zero-based)" +msgstr "小时(0为基数)" + +#: ../../library/zipfile.rst:687 +msgid "``4``" +msgstr "``4``" + +#: ../../library/zipfile.rst:687 +msgid "Minutes (zero-based)" +msgstr "分钟(0为基数)" + +#: ../../library/zipfile.rst:689 +msgid "``5``" +msgstr "``5``" + +#: ../../library/zipfile.rst:689 +msgid "Seconds (zero-based)" +msgstr "秒(0为基数)" + +#: ../../library/zipfile.rst:694 +msgid "The ZIP file format does not support timestamps before 1980." +msgstr "ZIP文件格式不支持1980年以前的时间戳。" + +#: ../../library/zipfile.rst:699 +msgid "Type of compression for the archive member." +msgstr "归档成员的压缩类型。" + +#: ../../library/zipfile.rst:704 +msgid "Comment for the individual archive member as a :class:`bytes` object." +msgstr ":class:`bytes` 对象形式的单个归档成员的注释。" + +#: ../../library/zipfile.rst:709 +msgid "" +"Expansion field data. The `PKZIP Application Note`_ contains some comments " +"on the internal structure of the data contained in this :class:`bytes` " +"object." +msgstr "" +"扩展字段数据。 `PKZIP Application Note`_ 包含一些保存于该 :class:`bytes` 对象中的内部结构的注释。" + +#: ../../library/zipfile.rst:716 +msgid "System which created ZIP archive." +msgstr "创建 ZIP 归档所用的系统。" + +#: ../../library/zipfile.rst:721 +msgid "PKZIP version which created ZIP archive." +msgstr "创建 ZIP 归档所用的 PKZIP 版本。" + +#: ../../library/zipfile.rst:726 +msgid "PKZIP version needed to extract archive." +msgstr "需要用来提取归档的 PKZIP 版本。" + +#: ../../library/zipfile.rst:731 +msgid "Must be zero." +msgstr "必须为零。" + +#: ../../library/zipfile.rst:736 +msgid "ZIP flag bits." +msgstr "ZIP 标志位。" + +#: ../../library/zipfile.rst:741 +msgid "Volume number of file header." +msgstr "文件头的分卷号。" + +#: ../../library/zipfile.rst:746 +msgid "Internal attributes." +msgstr "内部属性。" + +#: ../../library/zipfile.rst:751 +msgid "External file attributes." +msgstr "外部文件属性。" + +#: ../../library/zipfile.rst:756 +msgid "Byte offset to the file header." +msgstr "文件头的字节偏移量。" + +#: ../../library/zipfile.rst:761 +msgid "CRC-32 of the uncompressed file." +msgstr "未压缩文件的 CRC-32。" + +#: ../../library/zipfile.rst:766 +msgid "Size of the compressed data." +msgstr "已压缩数据的大小。" + +#: ../../library/zipfile.rst:771 +msgid "Size of the uncompressed file." +msgstr "未压缩文件的大小。" + +#: ../../library/zipfile.rst:778 +msgid "Command-Line Interface" +msgstr "命令行接口" + +#: ../../library/zipfile.rst:780 +msgid "" +"The :mod:`zipfile` module provides a simple command-line interface to " +"interact with ZIP archives." +msgstr ":mod:`zipfile` 模块提供了简单的命令行接口用于与 ZIP 归档的交互。" + +#: ../../library/zipfile.rst:783 +msgid "" +"If you want to create a new ZIP archive, specify its name after the " +":option:`-c` option and then list the filename(s) that should be included:" +msgstr "如果你想要创建一个新的 ZIP 归档,请在 :option:`-c` 选项后指定其名称然后列出应当被包含的文件名:" + +#: ../../library/zipfile.rst:790 +msgid "Passing a directory is also acceptable:" +msgstr "传入一个目录也是可接受的:" + +#: ../../library/zipfile.rst:796 +msgid "" +"If you want to extract a ZIP archive into the specified directory, use the " +":option:`-e` option:" +msgstr "如果你想要将一个 ZIP 归档提取到指定的目录,请使用 :option:`-e` 选项:" + +#: ../../library/zipfile.rst:803 +msgid "For a list of the files in a ZIP archive, use the :option:`-l` option:" +msgstr "要获取一个 ZIP 归档中的文件列表,请使用 :option:`-l` 选项:" + +#: ../../library/zipfile.rst:811 +msgid "Command-line options" +msgstr "命令行选项" + +#: ../../library/zipfile.rst:816 +msgid "List files in a zipfile." +msgstr "列出一个 zipfile 中的文件名。" + +#: ../../library/zipfile.rst:821 +msgid "Create zipfile from source files." +msgstr "基于源文件创建 zipfile。" + +#: ../../library/zipfile.rst:826 +msgid "Extract zipfile into target directory." +msgstr "将 zipfile 提取到目标目录中。" + +#: ../../library/zipfile.rst:831 +msgid "Test whether the zipfile is valid or not." +msgstr "检测 zipfile 是否有效。" + +#: ../../library/zipfile.rst:834 +msgid "Decompression pitfalls" +msgstr "解压缩的障碍" + +#: ../../library/zipfile.rst:836 +msgid "" +"The extraction in zipfile module might fail due to some pitfalls listed " +"below." +msgstr "zipfile 模块的提取操作可能会由于下面列出的障碍而失败。" + +#: ../../library/zipfile.rst:839 +msgid "From file itself" +msgstr "由于文件本身" + +#: ../../library/zipfile.rst:841 +msgid "" +"Decompression may fail due to incorrect password / CRC checksum / ZIP format" +" or unsupported compression method / decryption." +msgstr "解压缩可能由于不正确的密码 / CRC 校验和 / ZIP 格式或不受支持的压缩 / 解密方法而失败。" + +#: ../../library/zipfile.rst:845 +msgid "File System limitations" +msgstr "文件系统限制" + +#: ../../library/zipfile.rst:847 +msgid "" +"Exceeding limitations on different file systems can cause decompression " +"failed. Such as allowable characters in the directory entries, length of the" +" file name, length of the pathname, size of a single file, and number of " +"files, etc." +msgstr "超出特定文件系统上的限制可能会导致解压缩失败。 例如目录条目所允许的字符、文件名的长度、路径名的长度、单个文件的大小以及文件的数量等等。" + +#: ../../library/zipfile.rst:854 +msgid "Resources limitations" +msgstr "资源限制" + +#: ../../library/zipfile.rst:856 +msgid "" +"The lack of memory or disk volume would lead to decompression failed. For " +"example, decompression bombs (aka `ZIP bomb`_) apply to zipfile library that" +" can cause disk volume exhaustion." +msgstr "" +"缺乏内存或磁盘空间将会导致解压缩失败。 例如,作用于 zipfile 库的解压缩炸弹 (即 `ZIP bomb`_) 就可能造成磁盘空间耗尽。" + +#: ../../library/zipfile.rst:861 +msgid "Interruption" +msgstr "中断" + +#: ../../library/zipfile.rst:863 +msgid "" +"Interruption during the decompression, such as pressing control-C or killing" +" the decompression process may result in incomplete decompression of the " +"archive." +msgstr "在解压缩期间中断执行,例如按下 ctrl-C 或杀死解压缩进程可能会导致归档文件的解压缩不完整。" + +#: ../../library/zipfile.rst:867 +msgid "Default behaviors of extraction" +msgstr "提取的默认行为" + +#: ../../library/zipfile.rst:869 +msgid "" +"Not knowing the default extraction behaviors can cause unexpected " +"decompression results. For example, when extracting the same archive twice, " +"it overwrites files without asking." +msgstr "不了解提取的默认行为可能导致不符合期望的解压缩结果。 例如,当提取相同归档两次时,它会不经询问地覆盖文件。" diff --git a/library/zipimport.po b/library/zipimport.po new file mode 100644 index 000000000..1e5d0946c --- /dev/null +++ b/library/zipimport.po @@ -0,0 +1,243 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) 2001-2022, Python Software Foundation +# This file is distributed under the same license as the Python package. +# FIRST AUTHOR , YEAR. +# +# Translators: +# Fred , 2018 +# Zombie110year , 2019 +# ppcfish , 2019 +# Naisen Xu <723648649@qq.com>, 2020 +# Freesand Leo , 2022 +# +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: Python 3.9\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2022-11-04 14:34+0000\n" +"PO-Revision-Date: 2017-02-16 23:37+0000\n" +"Last-Translator: Freesand Leo , 2022\n" +"Language-Team: Chinese (China) (https://www.transifex.com/python-doc/teams/5390/zh_CN/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: zh_CN\n" +"Plural-Forms: nplurals=1; plural=0;\n" + +#: ../../library/zipimport.rst:2 +msgid ":mod:`zipimport` --- Import modules from Zip archives" +msgstr ":mod:`zipimport` --- 从 Zip 存档中导入模块" + +#: ../../library/zipimport.rst:9 +msgid "**Source code:** :source:`Lib/zipimport.py`" +msgstr "**源代码:** :source:`Lib/zipimport.py`" + +#: ../../library/zipimport.rst:13 +msgid "" +"This module adds the ability to import Python modules (:file:`\\*.py`, " +":file:`\\*.pyc`) and packages from ZIP-format archives. It is usually not " +"needed to use the :mod:`zipimport` module explicitly; it is automatically " +"used by the built-in :keyword:`import` mechanism for :data:`sys.path` items " +"that are paths to ZIP archives." +msgstr "" +"此模块添加了从 ZIP 格式档案中导入 Python 模块( :file:`\\*.py` , :file:`\\*.pyc` " +")和包的能力。通常不需要明确地使用 :mod:`zipimport` 模块,内置的 :keyword:`import` 机制会自动将此模块用于 ZIP " +"档案路径的 :data:`sys.path` 项目上。" + +#: ../../library/zipimport.rst:19 +msgid "" +"Typically, :data:`sys.path` is a list of directory names as strings. This " +"module also allows an item of :data:`sys.path` to be a string naming a ZIP " +"file archive. The ZIP archive can contain a subdirectory structure to " +"support package imports, and a path within the archive can be specified to " +"only import from a subdirectory. For example, the path " +":file:`example.zip/lib/` would only import from the :file:`lib/` " +"subdirectory within the archive." +msgstr "" +"通常, :data:`sys.path` 是字符串的目录名称列表。此模块同样允许 :data:`sys.path` 的一项成为命名 ZIP " +"文件档案的字符串。 ZIP 档案可以容纳子目录结构去支持包的导入,并且可以将归档文件中的路径指定为仅从子目录导入。比如说,路径 " +":file:`example.zip/lib/` 将只会从档案中的 :file:`lib/` 子目录导入。" + +#: ../../library/zipimport.rst:26 +msgid "" +"Any files may be present in the ZIP archive, but importers are only invoked " +"for :file:`.py` and :file:`.pyc` files. ZIP import of dynamic modules " +"(:file:`.pyd`, :file:`.so`) is disallowed. Note that if an archive only " +"contains :file:`.py` files, Python will not attempt to modify the archive by" +" adding the corresponding :file:`.pyc` file, meaning that if a ZIP archive " +"doesn't contain :file:`.pyc` files, importing may be rather slow." +msgstr "" +"任何文件都可以放到 ZIP 档案中,但只有 :file:`.py` 和 :file:`.pyc` 文件会触发导入器操作。 动态模块 " +"(:file:`.pyd`, :file:`.so`) 的 ZIP 导入是不被允许的。 请注意如果一个档案只包含有 :file:`.py` 文件,那么 " +"Python 将不会尝试通过添加对应的 :file:`.pyc` 文件来修改档案,这意味着如果一个 ZIP 档案不包含 :file:`.pyc` " +"文件,则导入速度可能会相当慢。" + +#: ../../library/zipimport.rst:33 +msgid "Previously, ZIP archives with an archive comment were not supported." +msgstr "以前,不支持带有档案注释的 ZIP 档案。" + +#: ../../library/zipimport.rst:40 +msgid "" +"`PKZIP Application Note " +"`_" +msgstr "" +"`PKZIP Application Note " +"`_" + +#: ../../library/zipimport.rst:39 +msgid "" +"Documentation on the ZIP file format by Phil Katz, the creator of the format" +" and algorithms used." +msgstr "Phil Katz 编写的 ZIP 文件格式文档,此格式和使用的算法的创建者。" + +#: ../../library/zipimport.rst:45 +msgid ":pep:`273` - Import Modules from Zip Archives" +msgstr ":pep:`273` -  从ZIP压缩包导入模块" + +#: ../../library/zipimport.rst:43 +msgid "" +"Written by James C. Ahlstrom, who also provided an implementation. Python " +"2.3 follows the specification in :pep:`273`, but uses an implementation " +"written by Just van Rossum that uses the import hooks described in " +":pep:`302`." +msgstr "" +"由 James C. Ahlstrom 编写,他也提供了实现。 Python 2.3 遵循 :pep:`273` 的规范,但是使用 Just van " +"Rossum 编写的使用了 :pep:`302` 中描述的导入钩的实现。" + +#: ../../library/zipimport.rst:47 +msgid ":pep:`302` - New Import Hooks" +msgstr ":pep:`302` - 新导入钩" + +#: ../../library/zipimport.rst:48 +msgid "The PEP to add the import hooks that help this module work." +msgstr "PEP 添加导入钩来有助于模块运作。" + +#: ../../library/zipimport.rst:51 +msgid "This module defines an exception:" +msgstr "此模块定义了一个异常:" + +#: ../../library/zipimport.rst:55 +msgid "" +"Exception raised by zipimporter objects. It's a subclass of " +":exc:`ImportError`, so it can be caught as :exc:`ImportError`, too." +msgstr "" +"异常由 zipimporter 对象引发。这是 :exc:`ImportError` 的子类,因此,也可以捕获为 :exc:`ImportError` " +"。" + +#: ../../library/zipimport.rst:62 +msgid "zipimporter Objects" +msgstr "zipimporter 对象" + +#: ../../library/zipimport.rst:64 +msgid ":class:`zipimporter` is the class for importing ZIP files." +msgstr ":class:`zipimporter` 是用于导入 ZIP 文件的类。" + +#: ../../library/zipimport.rst:68 +msgid "" +"Create a new zipimporter instance. *archivepath* must be a path to a ZIP " +"file, or to a specific path within a ZIP file. For example, an " +"*archivepath* of :file:`foo/bar.zip/lib` will look for modules in the " +":file:`lib` directory inside the ZIP file :file:`foo/bar.zip` (provided that" +" it exists)." +msgstr "" +"创建新的 zipimporter 实例。 *archivepath* 必须是指向 ZIP 文件的路径,或者 ZIP 文件中的特定路径。例如, " +":file:`foo/bar.zip/lib` 的 *archivepath* 将在 ZIP 文件 :file:`foo/bar.zip` 中的 " +":file:`lib` 目录中查找模块(只要它存在)。" + +#: ../../library/zipimport.rst:73 +msgid "" +":exc:`ZipImportError` is raised if *archivepath* doesn't point to a valid " +"ZIP archive." +msgstr "如果 *archivepath* 没有指向一个有效的 ZIP 档案,引发 :exc:`ZipImportError` 。" + +#: ../../library/zipimport.rst:78 +msgid "" +"Search for a module specified by *fullname*. *fullname* must be the fully " +"qualified (dotted) module name. It returns the zipimporter instance itself " +"if the module was found, or :const:`None` if it wasn't. The optional *path* " +"argument is ignored---it's there for compatibility with the importer " +"protocol." +msgstr "" +"搜索由 *fullname* 指定的模块。 *fullname* 必须是完全合格的(点分的)模块名。它返回 zipimporter " +"实例本身如果模块被找到,或者返回 :const:`None` 如果没找到指定模块。可选的 *path* 被忽略,这是为了与导入器协议兼容。" + +#: ../../library/zipimport.rst:87 +msgid "" +"Return the code object for the specified module. Raise :exc:`ZipImportError`" +" if the module couldn't be found." +msgstr "返回指定模块的代码对象。如果不能找到模块会引发 :exc:`ZipImportError` 错误。" + +#: ../../library/zipimport.rst:93 +msgid "" +"Return the data associated with *pathname*. Raise :exc:`OSError` if the file" +" wasn't found." +msgstr "返回与 *pathname* 相关联的数据。如果不能找到文件则引发 :exc:`OSError` 错误。" + +#: ../../library/zipimport.rst:96 +msgid ":exc:`IOError` used to be raised instead of :exc:`OSError`." +msgstr "曾经是 :exc:`IOError` 被引发而不是 :exc:`OSError` 。" + +#: ../../library/zipimport.rst:102 +msgid "" +"Return the value ``__file__`` would be set to if the specified module was " +"imported. Raise :exc:`ZipImportError` if the module couldn't be found." +msgstr "" +"如果导入了指定的模块 ``__file__`` ,则返回为该模块设置的值。如果未找到模块则引发 :exc:`ZipImportError` 错误。" + +#: ../../library/zipimport.rst:111 +msgid "" +"Return the source code for the specified module. Raise :exc:`ZipImportError`" +" if the module couldn't be found, return :const:`None` if the archive does " +"contain the module, but has no source for it." +msgstr "" +"返回指定模块的源代码。如果没有找到模块则引发 :exc:`ZipImportError` ,如果档案包含模块但是没有源代码,返回 " +":const:`None` 。" + +#: ../../library/zipimport.rst:119 +msgid "" +"Return ``True`` if the module specified by *fullname* is a package. Raise " +":exc:`ZipImportError` if the module couldn't be found." +msgstr "" +"如果由 *fullname* 指定的模块是一个包则返回 ``True`` 。如果不能找到模块则引发 :exc:`ZipImportError` 错误。" + +#: ../../library/zipimport.rst:125 +msgid "" +"Load the module specified by *fullname*. *fullname* must be the fully " +"qualified (dotted) module name. It returns the imported module, or raises " +":exc:`ZipImportError` if it wasn't found." +msgstr "" +"加载由 *fullname* 指定的模块。 *fullname* 必须是完全限定的(点分的)模块名。它返回已加载模块,或者当找不到模块时引发 " +":exc:`ZipImportError` 错误。" + +#: ../../library/zipimport.rst:132 +msgid "" +"The file name of the importer's associated ZIP file, without a possible " +"subpath." +msgstr "导入器关联的 ZIP 文件的文件名,没有可能的子路径。" + +#: ../../library/zipimport.rst:138 +msgid "" +"The subpath within the ZIP file where modules are searched. This is the " +"empty string for zipimporter objects which point to the root of the ZIP " +"file." +msgstr "ZIP 文件中搜索的模块的子路径。这是一个指向 ZIP 文件根目录的 zipimporter 对象的空字符串。" + +#: ../../library/zipimport.rst:142 +msgid "" +"The :attr:`archive` and :attr:`prefix` attributes, when combined with a " +"slash, equal the original *archivepath* argument given to the " +":class:`zipimporter` constructor." +msgstr "" +"当与斜杠结合使用时, :attr:`archive` 和 :attr:`prefix` 属性等价于赋予 :class:`zipimporter` " +"构造器的原始 *archivepath* 参数。" + +#: ../../library/zipimport.rst:150 +msgid "Examples" +msgstr "示例" + +#: ../../library/zipimport.rst:152 +msgid "" +"Here is an example that imports a module from a ZIP archive - note that the " +":mod:`zipimport` module is not explicitly used." +msgstr "这是一个从 ZIP 档案中导入模块的例子 - 请注意 :mod:`zipimport` 模块不需要明确地使用。" diff --git a/library/zlib.po b/library/zlib.po new file mode 100644 index 000000000..73520ff93 --- /dev/null +++ b/library/zlib.po @@ -0,0 +1,521 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) 2001-2022, Python Software Foundation +# This file is distributed under the same license as the Python package. +# FIRST AUTHOR , YEAR. +# +# Translators: +# sgqy , 2019 +# Freesand Leo , 2022 +# +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: Python 3.9\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2022-11-04 14:34+0000\n" +"PO-Revision-Date: 2017-02-16 23:37+0000\n" +"Last-Translator: Freesand Leo , 2022\n" +"Language-Team: Chinese (China) (https://www.transifex.com/python-doc/teams/5390/zh_CN/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: zh_CN\n" +"Plural-Forms: nplurals=1; plural=0;\n" + +#: ../../library/zlib.rst:2 +msgid ":mod:`zlib` --- Compression compatible with :program:`gzip`" +msgstr ":mod:`zlib` --- 与 :program:`gzip` 兼容的压缩" + +#: ../../library/zlib.rst:10 +msgid "" +"For applications that require data compression, the functions in this module" +" allow compression and decompression, using the zlib library. The zlib " +"library has its own home page at https://www.zlib.net. There are known " +"incompatibilities between the Python module and versions of the zlib library" +" earlier than 1.1.3; 1.1.3 has a `security vulnerability " +"`_, so we recommend using 1.1.4 or " +"later." +msgstr "" +"对于需要数据压缩的应用,此模块中的函数允许使用 zlib 库进行压缩和解压缩。 zlib 库的项目主页是 https://www.zlib.net。 " +"已知此 Python 模块与 1.1.3 之前版本的 zlib 库存在不兼容;1.1.3 版则存在一个 `安全缺陷 " +"`_,因此我们推荐使用 1.1.4 或更新的版本。" + +#: ../../library/zlib.rst:17 +msgid "" +"zlib's functions have many options and often need to be used in a particular" +" order. This documentation doesn't attempt to cover all of the " +"permutations; consult the zlib manual at http://www.zlib.net/manual.html for" +" authoritative information." +msgstr "" +"zlib 的函数有很多选项,一般需要按特定顺序使用。本文档没有覆盖全部的用法。更多详细信息请于 " +"http://www.zlib.net/manual.html 参阅官方手册。" + +#: ../../library/zlib.rst:22 +msgid "For reading and writing ``.gz`` files see the :mod:`gzip` module." +msgstr "要读写 ``.gz`` 格式的文件,请参考 :mod:`gzip` 模块。" + +#: ../../library/zlib.rst:24 +msgid "The available exception and functions in this module are:" +msgstr "此模块中可用的异常和函数如下:" + +#: ../../library/zlib.rst:29 +msgid "Exception raised on compression and decompression errors." +msgstr "在压缩或解压缩过程中发生错误时的异常。" + +#: ../../library/zlib.rst:34 +msgid "" +"Computes an Adler-32 checksum of *data*. (An Adler-32 checksum is almost as" +" reliable as a CRC32 but can be computed much more quickly.) The result is " +"an unsigned 32-bit integer. If *value* is present, it is used as the " +"starting value of the checksum; otherwise, a default value of 1 is used. " +"Passing in *value* allows computing a running checksum over the " +"concatenation of several inputs. The algorithm is not cryptographically " +"strong, and should not be used for authentication or digital signatures. " +"Since the algorithm is designed for use as a checksum algorithm, it is not " +"suitable for use as a general hash algorithm." +msgstr "" +"计算 *data* 的 Adler-32 校验值。(Adler-32 校验的可靠性与 CRC32 基本相当,但比计算 CRC32 更高效。) " +"计算的结果是一个 32 位的整数。参数 *value* 是校验时的起始值,其默认值为 1。借助参数 *value* " +"可为分段的输入计算校验值。此算法没有加密强度,不应用于身份验证和数字签名。此算法的目的仅为验证数据的正确性,不适合作为通用散列算法。" + +#: ../../library/zlib.rst:44 +msgid "" +"The result is always unsigned. To generate the same numeric value when using" +" Python 2 or earlier, use ``adler32(data) & 0xffffffff``." +msgstr "" +"结果值将始终为无符号类型。 要在使用 Python 2 或更早版本时生成同样的数值,请使用 ``adler32(data) & " +"0xffffffff``。" + +#: ../../library/zlib.rst:51 +msgid "" +"Compresses the bytes in *data*, returning a bytes object containing " +"compressed data. *level* is an integer from ``0`` to ``9`` or ``-1`` " +"controlling the level of compression; ``1`` (Z_BEST_SPEED) is fastest and " +"produces the least compression, ``9`` (Z_BEST_COMPRESSION) is slowest and " +"produces the most. ``0`` (Z_NO_COMPRESSION) is no compression. The default " +"value is ``-1`` (Z_DEFAULT_COMPRESSION). Z_DEFAULT_COMPRESSION represents a" +" default compromise between speed and compression (currently equivalent to " +"level 6). Raises the :exc:`error` exception if any error occurs." +msgstr "" +"压缩 *data* 中的字节,返回含有已压缩内容的 bytes 对象。参数 *level* 为整数,可取值为 ``0`` 到 ``9`` 或 " +"``-1``,用于指定压缩等级。``1`` (Z_BEST_SPEED) 表示最快速度和最低压缩率,``9`` (Z_BEST_COMPRESSION)" +" 表示最慢速度和最高压缩率。``0`` (Z_NO_COMPRESSION) 表示不压缩。参数默认值为 ``-1`` " +"(Z_DEFAULT_COMPRESSION)。Z_DEFAULT_COMPRESSION 是速度和压缩率之间的平衡 (一般相当于设压缩等级为 " +"6)。函数发生错误时抛出 :exc:`error` 异常。" + +#: ../../library/zlib.rst:59 +msgid "*level* can now be used as a keyword parameter." +msgstr "现在,*level* 可作为关键字参数。" + +#: ../../library/zlib.rst:65 +msgid "" +"Returns a compression object, to be used for compressing data streams that " +"won't fit into memory at once." +msgstr "返回一个 压缩对象,用来压缩内存中难以容下的数据流。" + +#: ../../library/zlib.rst:68 +msgid "" +"*level* is the compression level -- an integer from ``0`` to ``9`` or " +"``-1``. A value of ``1`` (Z_BEST_SPEED) is fastest and produces the least " +"compression, while a value of ``9`` (Z_BEST_COMPRESSION) is slowest and " +"produces the most. ``0`` (Z_NO_COMPRESSION) is no compression. The default " +"value is ``-1`` (Z_DEFAULT_COMPRESSION). Z_DEFAULT_COMPRESSION represents a " +"default compromise between speed and compression (currently equivalent to " +"level 6)." +msgstr "" +"参数 *level* 为压缩等级,是整数,可取值为 ``0`` 到 ``9`` 或 ``-1``。``1`` (Z_BEST_SPEED) " +"表示最快速度和最低压缩率,``9`` (Z_BEST_COMPRESSION) 表示最慢速度和最高压缩率。``0`` " +"(Z_NO_COMPRESSION) 表示不压缩。参数默认值为 ``-1`` " +"(Z_DEFAULT_COMPRESSION)。Z_DEFAULT_COMPRESSION 是速度和压缩率之间的平衡 (一般相当于设压缩等级为 6)。" + +#: ../../library/zlib.rst:75 +msgid "" +"*method* is the compression algorithm. Currently, the only supported value " +"is :const:`DEFLATED`." +msgstr "*method* 表示压缩算法。现在只支持 :const:`DEFLATED` 这个算法。" + +#: ../../library/zlib.rst:78 +msgid "" +"The *wbits* argument controls the size of the history buffer (or the " +"\"window size\") used when compressing data, and whether a header and " +"trailer is included in the output. It can take several ranges of values, " +"defaulting to ``15`` (MAX_WBITS):" +msgstr "" +"参数 *wbits* 指定压缩数据时所使用的历史缓冲区的大小 (窗口大小),并指定压缩输出是否包含头部或尾部。参数的默认值是 ``15`` " +"(MAX_WBITS)。参数的值分为几个范围:" + +#: ../../library/zlib.rst:83 +msgid "" +"+9 to +15: The base-two logarithm of the window size, which therefore ranges" +" between 512 and 32768. Larger values produce better compression at the " +"expense of greater memory usage. The resulting output will include a zlib-" +"specific header and trailer." +msgstr "" +"+9 至 +15:窗口大小以二为底的对数。 即这些值对应着 512 至 32768 的窗口大小。 更大的值会提供更好的压缩,同时内存开销也会更大。 " +"压缩输出会包含 zlib 特定格式的头部和尾部。" + +#: ../../library/zlib.rst:88 +msgid "" +"−9 to −15: Uses the absolute value of *wbits* as the window size logarithm, " +"while producing a raw output stream with no header or trailing checksum." +msgstr "−9 至 −15:绝对值为窗口大小以二为底的对数。 压缩输出仅包含压缩数据,没有头部和尾部。" + +#: ../../library/zlib.rst:92 +msgid "" +"+25 to +31 = 16 + (9 to 15): Uses the low 4 bits of the value as the window " +"size logarithm, while including a basic :program:`gzip` header and trailing " +"checksum in the output." +msgstr "" +"+25 至 +31 = 16 + (9 至 15):后 4 个比特位为窗口大小以二为底的对数。 压缩输出包含一个基本的 :program:`gzip` " +"头部,并以校验和为尾部。" + +#: ../../library/zlib.rst:96 +msgid "" +"The *memLevel* argument controls the amount of memory used for the internal " +"compression state. Valid values range from ``1`` to ``9``. Higher values use" +" more memory, but are faster and produce smaller output." +msgstr "" +"参数 *memLevel* 指定内部压缩操作时所占用内存大小。参数取 ``1`` 到 ``9``。更大的值占用更多的内存,同时速度也更快输出也更小。" + +#: ../../library/zlib.rst:100 +msgid "" +"*strategy* is used to tune the compression algorithm. Possible values are " +":const:`Z_DEFAULT_STRATEGY`, :const:`Z_FILTERED`, :const:`Z_HUFFMAN_ONLY`, " +":const:`Z_RLE` (zlib 1.2.0.1) and :const:`Z_FIXED` (zlib 1.2.2.2)." +msgstr "" +"参数 *strategy* 用于调节压缩算法。可取值为 " +":const:`Z_DEFAULT_STRATEGY`、:const:`Z_FILTERED`、:const:`Z_HUFFMAN_ONLY`、:const:`Z_RLE`" +" (zlib 1.2.0.1) 或 :const:`Z_FIXED` (zlib 1.2.2.2)。" + +#: ../../library/zlib.rst:104 +msgid "" +"*zdict* is a predefined compression dictionary. This is a sequence of bytes " +"(such as a :class:`bytes` object) containing subsequences that are expected " +"to occur frequently in the data that is to be compressed. Those subsequences" +" that are expected to be most common should come at the end of the " +"dictionary." +msgstr "" +"参数 *zdict* 指定预定义的压缩字典。它是一个字节序列 (如 :class:`bytes` " +"对象),其中包含用户认为要压缩的数据中可能频繁出现的子序列。频率高的子序列应当放在字典的尾部。" + +#: ../../library/zlib.rst:109 +msgid "Added the *zdict* parameter and keyword argument support." +msgstr "添加关键字参数 *zdict*。" + +#: ../../library/zlib.rst:119 +msgid "" +"Computes a CRC (Cyclic Redundancy Check) checksum of *data*. The result is " +"an unsigned 32-bit integer. If *value* is present, it is used as the " +"starting value of the checksum; otherwise, a default value of 0 is used. " +"Passing in *value* allows computing a running checksum over the " +"concatenation of several inputs. The algorithm is not cryptographically " +"strong, and should not be used for authentication or digital signatures. " +"Since the algorithm is designed for use as a checksum algorithm, it is not " +"suitable for use as a general hash algorithm." +msgstr "" +"计算 *data* 的 CRC (循环冗余校验) 值。计算的结果是一个 32 位的整数。参数 *value* 是校验时的起始值,其默认值为 0。借助参数" +" *value* 可为分段的输入计算校验值。此算法没有加密强度,不应用于身份验证和数字签名。此算法的目的仅为验证数据的正确性,不适合作为通用散列算法。" + +#: ../../library/zlib.rst:128 +msgid "" +"The result is always unsigned. To generate the same numeric value when using" +" Python 2 or earlier, use ``crc32(data) & 0xffffffff``." +msgstr "" +"结果值将始终为无符号类型。 要在使用 Python 2 或更早版本时生成同样的数值,请使用 ``crc32(data) & 0xffffffff``。" + +#: ../../library/zlib.rst:135 +msgid "" +"Decompresses the bytes in *data*, returning a bytes object containing the " +"uncompressed data. The *wbits* parameter depends on the format of *data*, " +"and is discussed further below. If *bufsize* is given, it is used as the " +"initial size of the output buffer. Raises the :exc:`error` exception if any" +" error occurs." +msgstr "" +"解压 *data* 中的字节,返回含有已解压内容的 bytes 对象。参数 *wbits* 取决于 *data* " +"的格式,具体参见下边的说明。*bufsize* 为输出缓冲区的起始大小。函数发生错误时抛出 :exc:`error` 异常。" + +#: ../../library/zlib.rst:143 +msgid "" +"The *wbits* parameter controls the size of the history buffer (or \"window " +"size\"), and what header and trailer format is expected. It is similar to " +"the parameter for :func:`compressobj`, but accepts more ranges of values:" +msgstr "" +"*wbits* 形参控制历史缓冲区的大小(或称“窗口大小”)以及所期望的头部和尾部格式。 它类似于 :func:`compressobj` " +"的形参,但可接受更大范围的值:" + +#: ../../library/zlib.rst:148 +msgid "" +"+8 to +15: The base-two logarithm of the window size. The input must " +"include a zlib header and trailer." +msgstr "+8 至 +15:窗口尺寸以二为底的对数。 输入必须包含 zlib 头部和尾部。" + +#: ../../library/zlib.rst:151 +msgid "" +"0: Automatically determine the window size from the zlib header. Only " +"supported since zlib 1.2.3.5." +msgstr "0:根据 zlib 头部自动确定窗口大小。 只从 zlib 1.2.3.5 版起受支持。" + +#: ../../library/zlib.rst:154 +msgid "" +"−8 to −15: Uses the absolute value of *wbits* as the window size logarithm." +" The input must be a raw stream with no header or trailer." +msgstr "−8 至 −15:使用 *wbits* 的绝对值作为窗口大小以二为底的对数。 输入必须为原始数据流,没有头部和尾部。" + +#: ../../library/zlib.rst:157 +msgid "" +"+24 to +31 = 16 + (8 to 15): Uses the low 4 bits of the value as the window " +"size logarithm. The input must include a gzip header and trailer." +msgstr "+24 至 +31 = 16 + (8 至 15):使用后 4 个比特位作为窗口大小以二为底的对数。 输入必须包括 gzip 头部和尾部。" + +#: ../../library/zlib.rst:161 +msgid "" +"+40 to +47 = 32 + (8 to 15): Uses the low 4 bits of the value as the window " +"size logarithm, and automatically accepts either the zlib or gzip format." +msgstr "" +"+40 至 +47 = 32 + (8 至 15):使用后 4 个比特位作为窗口大小以二为底的对数,并且自动接受 zlib 或 gzip 格式。" + +#: ../../library/zlib.rst:165 +msgid "" +"When decompressing a stream, the window size must not be smaller than the " +"size originally used to compress the stream; using a too-small value may " +"result in an :exc:`error` exception. The default *wbits* value corresponds " +"to the largest window size and requires a zlib header and trailer to be " +"included." +msgstr "" +"当解压缩一个数据流时,窗口大小必须不小于用于压缩数据流的原始窗口大小;使用太小的值可能导致 :exc:`error` 异常。 默认 *wbits* " +"值对应于最大的窗口大小并且要求包括 zlib 头部和尾部。" + +#: ../../library/zlib.rst:171 +msgid "" +"*bufsize* is the initial size of the buffer used to hold decompressed data." +" If more space is required, the buffer size will be increased as needed, so" +" you don't have to get this value exactly right; tuning it will only save a " +"few calls to :c:func:`malloc`." +msgstr "" +"*bufsize* 是用于存放解压数据的缓冲区初始大小。 " +"如果需要更大空间,缓冲区大小将按需增加,因此你不需要让这个值完全精确;对其进行调整仅会节省一点对 :c:func:`malloc` 的调用次数。" + +#: ../../library/zlib.rst:176 +msgid "*wbits* and *bufsize* can be used as keyword arguments." +msgstr "*wbits* 和 *bufsize* 可用作关键字参数。" + +#: ../../library/zlib.rst:181 +msgid "" +"Returns a decompression object, to be used for decompressing data streams " +"that won't fit into memory at once." +msgstr "返回一个解压对象,用来解压无法被一次性放入内存的数据流。" + +#: ../../library/zlib.rst:184 +msgid "" +"The *wbits* parameter controls the size of the history buffer (or the " +"\"window size\"), and what header and trailer format is expected. It has " +"the same meaning as `described for decompress() <#decompress-wbits>`__." +msgstr "" +"*wbits* 形参控制历史缓冲区的大小(或称“窗口大小”)以及所期望的头部和尾部格式。 它的含义与 `对 decompress() 的描述 " +"<#decompress-wbits>`__ 相同。" + +#: ../../library/zlib.rst:188 +msgid "" +"The *zdict* parameter specifies a predefined compression dictionary. If " +"provided, this must be the same dictionary as was used by the compressor " +"that produced the data that is to be decompressed." +msgstr "*zdict* 形参指定指定一个预定义的压缩字典。 如果提供了此形参,它必须与产生将解压数据的压缩器所使用的字典相同。" + +#: ../../library/zlib.rst:194 +msgid "" +"If *zdict* is a mutable object (such as a :class:`bytearray`), you must not " +"modify its contents between the call to :func:`decompressobj` and the first " +"call to the decompressor's ``decompress()`` method." +msgstr "" +"如果 *zdict* 是一个可变对象 (例如 :class:`bytearray`),则你不可在对 :func:`decompressobj` " +"的调用和对解压器的 ``decompress()`` 方法的调用之间修改其内容。" + +#: ../../library/zlib.rst:198 +msgid "Added the *zdict* parameter." +msgstr "增加了 *zdict* 形参。" + +#: ../../library/zlib.rst:202 +msgid "Compression objects support the following methods:" +msgstr "压缩对象支持以下方法:" + +#: ../../library/zlib.rst:207 +msgid "" +"Compress *data*, returning a bytes object containing compressed data for at " +"least part of the data in *data*. This data should be concatenated to the " +"output produced by any preceding calls to the :meth:`compress` method. Some" +" input may be kept in internal buffers for later processing." +msgstr "" +"压缩 *data* 并返回 bytes 对象,这个对象含有 *data* 的部分或全部内容的已压缩数据。所得的对象必须拼接在上一次调用 " +":meth:`compress` 方法所得数据的后面。缓冲区中可能留存部分输入以供下一次调用。" + +#: ../../library/zlib.rst:215 +msgid "" +"All pending input is processed, and a bytes object containing the remaining " +"compressed output is returned. *mode* can be selected from the constants " +":const:`Z_NO_FLUSH`, :const:`Z_PARTIAL_FLUSH`, :const:`Z_SYNC_FLUSH`, " +":const:`Z_FULL_FLUSH`, :const:`Z_BLOCK` (zlib 1.2.3.4), or " +":const:`Z_FINISH`, defaulting to :const:`Z_FINISH`. Except " +":const:`Z_FINISH`, all constants allow compressing further bytestrings of " +"data, while :const:`Z_FINISH` finishes the compressed stream and prevents " +"compressing any more data. After calling :meth:`flush` with *mode* set to " +":const:`Z_FINISH`, the :meth:`compress` method cannot be called again; the " +"only realistic action is to delete the object." +msgstr "" +"压缩所有缓冲区的数据并返回已压缩的数据。参数 *mode* " +"可以传入的常量为::const:`Z_NO_FLUSH`、:const:`Z_PARTIAL_FLUSH`、:const:`Z_SYNC_FLUSH`、:const:`Z_FULL_FLUSH`、:const:`Z_BLOCK`" +" (zlib 1.2.3.4) 或 :const:`Z_FINISH`。默认值为 :const:`Z_FINISH`。:const:`Z_FINISH`" +" 关闭已压缩数据流并不允许再压缩其他数据,:const:`Z_FINISH` 以外的值皆允许这个对象继续压缩数据。调用 :meth:`flush` " +"方法并将 *mode* 设为 :const:`Z_FINISH` 后会无法再次调用 :meth:`compress`,此时只能删除这个对象。" + +#: ../../library/zlib.rst:228 +msgid "" +"Returns a copy of the compression object. This can be used to efficiently " +"compress a set of data that share a common initial prefix." +msgstr "返回此压缩对象的一个拷贝。它可以用来高效压缩一系列拥有相同前缀的数据。" + +#: ../../library/zlib.rst:232 +msgid "" +"Added :func:`copy.copy` and :func:`copy.deepcopy` support to compression " +"objects." +msgstr "添加了对压缩对象执行 :func:`copy.copy` 和 :func:`copy.deepcopy` 的支持。" + +#: ../../library/zlib.rst:237 +msgid "Decompression objects support the following methods and attributes:" +msgstr "解压缩对象支持以下方法:" + +#: ../../library/zlib.rst:242 +msgid "" +"A bytes object which contains any bytes past the end of the compressed data." +" That is, this remains ``b\"\"`` until the last byte that contains " +"compression data is available. If the whole bytestring turned out to " +"contain compressed data, this is ``b\"\"``, an empty bytes object." +msgstr "" +"一个 bytes 对象,其中包含压缩数据结束之后的任何字节数据。 也就是说,它将为 ``b\"\"`` 直到包含压缩数据的末尾字节可用。 " +"如果整个结果字节串都包含压缩数据,它将为一个空的 bytes 对象 ``b\"\"``。" + +#: ../../library/zlib.rst:250 +msgid "" +"A bytes object that contains any data that was not consumed by the last " +":meth:`decompress` call because it exceeded the limit for the uncompressed " +"data buffer. This data has not yet been seen by the zlib machinery, so you " +"must feed it (possibly with further data concatenated to it) back to a " +"subsequent :meth:`decompress` method call in order to get correct output." +msgstr "" +"一个 bytes 对象,其中包含未被上一次 :meth:`decompress` 调用所消耗的任何数据。 此数据不能被 zlib " +"机制看到,因此你必须将其送回(可能要附带额外的数据拼接)到后续的 :meth:`decompress` 方法调用以获得正确的输出。" + +#: ../../library/zlib.rst:259 +msgid "" +"A boolean indicating whether the end of the compressed data stream has been " +"reached." +msgstr "一个布尔值,指明是否已到达压缩数据流的末尾。" + +#: ../../library/zlib.rst:262 +msgid "" +"This makes it possible to distinguish between a properly-formed compressed " +"stream, and an incomplete or truncated one." +msgstr "这使得区分正确构造的压缩数据流和不完整或被截断的压缩数据流成为可能。" + +#: ../../library/zlib.rst:270 +msgid "" +"Decompress *data*, returning a bytes object containing the uncompressed data" +" corresponding to at least part of the data in *string*. This data should " +"be concatenated to the output produced by any preceding calls to the " +":meth:`decompress` method. Some of the input data may be preserved in " +"internal buffers for later processing." +msgstr "" +"解压缩 *data* 并返回 bytes 对象,其中包含对应于 *string* 中至少一部分数据的解压缩数据。 此数据应当被拼接到之前任何对 " +":meth:`decompress` 方法的调用所产生的输出。 部分输入数据可能会被保留在内部缓冲区以供后续处理。" + +#: ../../library/zlib.rst:276 +msgid "" +"If the optional parameter *max_length* is non-zero then the return value " +"will be no longer than *max_length*. This may mean that not all of the " +"compressed input can be processed; and unconsumed data will be stored in the" +" attribute :attr:`unconsumed_tail`. This bytestring must be passed to a " +"subsequent call to :meth:`decompress` if decompression is to continue. If " +"*max_length* is zero then the whole input is decompressed, and " +":attr:`unconsumed_tail` is empty." +msgstr "" +"如果可选的形参 *max_length* 非零则返回值将不会长于 *max_length*。 " +"这可能意味着不是所有已压缩输入都能被处理;并且未被消耗的数据将被保存在 :attr:`unconsumed_tail` 属性中。 " +"如果要继续解压缩则这个字节串必须被传给对 :meth:`decompress` 的后续调用。 如果 *max_length* " +"为零则整个输入都会被解压缩,并且 :attr:`unconsumed_tail` 将为空。" + +#: ../../library/zlib.rst:283 +msgid "*max_length* can be used as a keyword argument." +msgstr "*max_length* 可用作关键字参数。" + +#: ../../library/zlib.rst:289 +msgid "" +"All pending input is processed, and a bytes object containing the remaining " +"uncompressed output is returned. After calling :meth:`flush`, the " +":meth:`decompress` method cannot be called again; the only realistic action " +"is to delete the object." +msgstr "" +"所有挂起的输入会被处理,并且返回包含剩余未压缩输出的 bytes 对象。 在调用 :meth:`flush` 之后,:meth:`decompress`" +" 方法将无法被再次调用;唯一可行的操作是删除该对象。" + +#: ../../library/zlib.rst:294 +msgid "" +"The optional parameter *length* sets the initial size of the output buffer." +msgstr "可选的形参 *length* 设置输出缓冲区的初始大小。" + +#: ../../library/zlib.rst:299 +msgid "" +"Returns a copy of the decompression object. This can be used to save the " +"state of the decompressor midway through the data stream in order to speed " +"up random seeks into the stream at a future point." +msgstr "返回解压缩对象的一个拷贝。 它可以用来在数据流的中途保存解压缩器的状态以便加快随机查找数据流后续位置的速度。" + +#: ../../library/zlib.rst:304 +msgid "" +"Added :func:`copy.copy` and :func:`copy.deepcopy` support to decompression " +"objects." +msgstr "添加了对解压缩对象执行 :func:`copy.copy` 和 :func:`copy.deepcopy` 的支持。" + +#: ../../library/zlib.rst:309 +msgid "" +"Information about the version of the zlib library in use is available " +"through the following constants:" +msgstr "通过下列常量可获取模块所使用的 zlib 库的版本信息:" + +#: ../../library/zlib.rst:315 +msgid "" +"The version string of the zlib library that was used for building the " +"module. This may be different from the zlib library actually used at " +"runtime, which is available as :const:`ZLIB_RUNTIME_VERSION`." +msgstr "" +"构建此模块时所用的 zlib 库的版本字符串。它的值可能与运行时所加载的 zlib 不同。运行时加载的 zlib 库的版本字符串为 " +":const:`ZLIB_RUNTIME_VERSION`。" + +#: ../../library/zlib.rst:322 +msgid "" +"The version string of the zlib library actually loaded by the interpreter." +msgstr "解释器所加载的 zlib 库的版本字符串。" + +#: ../../library/zlib.rst:330 +msgid "Module :mod:`gzip`" +msgstr "模块 :mod:`gzip`" + +#: ../../library/zlib.rst:330 +msgid "Reading and writing :program:`gzip`\\ -format files." +msgstr "读写 :program:`gzip` 格式的文件。" + +#: ../../library/zlib.rst:333 +msgid "http://www.zlib.net" +msgstr "http://www.zlib.net" + +#: ../../library/zlib.rst:333 +msgid "The zlib library home page." +msgstr "zlib 库项目主页。" + +#: ../../library/zlib.rst:336 +msgid "http://www.zlib.net/manual.html" +msgstr "http://www.zlib.net/manual.html" + +#: ../../library/zlib.rst:336 +msgid "" +"The zlib manual explains the semantics and usage of the library's many " +"functions." +msgstr "zlib 库用户手册。提供了库的许多功能的解释和用法。" diff --git a/library/zoneinfo.po b/library/zoneinfo.po new file mode 100644 index 000000000..c599845d7 --- /dev/null +++ b/library/zoneinfo.po @@ -0,0 +1,584 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) 2001-2024, Python Software Foundation +# This file is distributed under the same license as the Python package. +# FIRST AUTHOR , YEAR. +# +# Translators: +# Alpha Du , 2020 +# Freesand Leo , 2020 +# Rafael Fontenelle , 2024 +# +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: Python 3.9\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2024-02-16 21:12+0000\n" +"PO-Revision-Date: 2020-05-31 09:32+0000\n" +"Last-Translator: Rafael Fontenelle , 2024\n" +"Language-Team: Chinese (China) (https://app.transifex.com/python-doc/teams/5390/zh_CN/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: zh_CN\n" +"Plural-Forms: nplurals=1; plural=0;\n" + +#: ../../library/zoneinfo.rst:2 +msgid ":mod:`zoneinfo` --- IANA time zone support" +msgstr ":mod:`zoneinfo` --- IANA 时区支持" + +#: ../../library/zoneinfo.rst:14 +msgid "" +"The :mod:`zoneinfo` module provides a concrete time zone implementation to " +"support the IANA time zone database as originally specified in :pep:`615`. " +"By default, :mod:`zoneinfo` uses the system's time zone data if available; " +"if no system time zone data is available, the library will fall back to " +"using the first-party `tzdata`_ package available on PyPI." +msgstr "" +":mod:`zoneinfo` 模块根据 :pep:`615` 的最初说明提供了具体的时区实现来支持 IANA 时区数据库。 " +"按照默认设置,:mod:`zoneinfo` 会在可能的情况下使用系统的时区数据;如果系统时区数据不可用,该库将回退为使用 PyPI 上提供的 " +"`tzdata`_ 第一方包。" + +#: ../../library/zoneinfo.rst:24 +msgid "Module: :mod:`datetime`" +msgstr "模块: :mod:`datetime`" + +#: ../../library/zoneinfo.rst:23 +msgid "" +"Provides the :class:`~datetime.time` and :class:`~datetime.datetime` types " +"with which the :class:`ZoneInfo` class is designed to be used." +msgstr "" +"提供 :class:`~datetime.time` 和 :class:`~datetime.datetime` " +"类型,:class:`ZoneInfo` 类被设计为可配合这两个类型使用。" + +#: ../../library/zoneinfo.rst:27 +msgid "Package `tzdata`_" +msgstr "包 `tzdata`_" + +#: ../../library/zoneinfo.rst:27 +msgid "" +"First-party package maintained by the CPython core developers to supply time" +" zone data via PyPI." +msgstr "由 CPython 核心开发者维护以通过 PyPI 提供时区数据的第一方包。" + +#: ../../library/zoneinfo.rst:32 +msgid "Using ``ZoneInfo``" +msgstr "使用 ``ZoneInfo``" + +#: ../../library/zoneinfo.rst:34 +msgid "" +":class:`ZoneInfo` is a concrete implementation of the " +":class:`datetime.tzinfo` abstract base class, and is intended to be attached" +" to ``tzinfo``, either via the constructor, the :meth:`datetime.replace " +"` method or :meth:`datetime.astimezone " +"`::" +msgstr "" +":class:`ZoneInfo` 是 :class:`datetime.tzinfo` 抽象基类的具体实现,其目标是通过构造器、 " +":meth:`datetime.replace ` 方法或 " +":meth:`datetime.astimezone ` 来与 ``tzinfo`` " +"建立关联::" + +#: ../../library/zoneinfo.rst:49 +msgid "" +"Datetimes constructed in this way are compatible with datetime arithmetic " +"and handle daylight saving time transitions with no further intervention::" +msgstr "以此方式构造的日期时间对象可兼容日期时间运算并可在无需进一步干预的情况下处理夏令时转换::" + +#: ../../library/zoneinfo.rst:60 +msgid "" +"These time zones also support the :attr:`~datetime.datetime.fold` attribute " +"introduced in :pep:`495`. During offset transitions which induce ambiguous " +"times (such as a daylight saving time to standard time transition), the " +"offset from *before* the transition is used when ``fold=0``, and the offset " +"*after* the transition is used when ``fold=1``, for example::" +msgstr "" +"这些时区还支持在 :pep:`495` 中引入的 :attr:`~datetime.datetime.fold`。 " +"在可能导致时间歧义的时差转换中(例如夏令时到标准时的转换),当 ``fold=0`` 时会使用转换 *之前* 的时差,而当 ``fold=1`` " +"时则使用转换 *之后* 的时差,例如::" + +#: ../../library/zoneinfo.rst:73 +msgid "" +"When converting from another time zone, the fold will be set to the correct " +"value::" +msgstr "当执行来自另一时区的转换时,fold 将被设置为正确的值::" + +#: ../../library/zoneinfo.rst:89 +msgid "Data sources" +msgstr "数据源" + +#: ../../library/zoneinfo.rst:91 +msgid "" +"The ``zoneinfo`` module does not directly provide time zone data, and " +"instead pulls time zone information from the system time zone database or " +"the first-party PyPI package `tzdata`_, if available. Some systems, " +"including notably Windows systems, do not have an IANA database available, " +"and so for projects targeting cross-platform compatibility that require time" +" zone data, it is recommended to declare a dependency on tzdata. If neither " +"system data nor tzdata are available, all calls to :class:`ZoneInfo` will " +"raise :exc:`ZoneInfoNotFoundError`." +msgstr "" +"``zoneinfo`` 模块不直接提供时区数据,而是在可能的情况下从系统时区数据库或 PyPI 上的第一方包 `tzdata`_ 获取时区信息。 " +"某些系统,重要的一点是 Windows 系统也包括在内,并没有可用的 IANA 数据库,因此对于要保证获取时区信息的跨平台兼容性的项目,推荐对 " +"tzdata 声明依赖。 如果系统数据和 tzdata 均不可用,则所有对 :class:`ZoneInfo` 的调用都将引发 " +":exc:`ZoneInfoNotFoundError`。" + +#: ../../library/zoneinfo.rst:103 +msgid "Configuring the data sources" +msgstr "配置数据源" + +#: ../../library/zoneinfo.rst:105 +msgid "" +"When ``ZoneInfo(key)`` is called, the constructor first searches the " +"directories specified in :data:`TZPATH` for a file matching ``key``, and on " +"failure looks for a match in the tzdata package. This behavior can be " +"configured in three ways:" +msgstr "" +"当 ``ZoneInfo(key)`` 被调用时,此构造器首先会在 :data:`TZPATH` 所指定的目录下搜索匹配 ``key`` " +"的文件,失败时则会在 tzdata 包中查找匹配。 此行为可通过三种方式来配置:" + +#: ../../library/zoneinfo.rst:110 +msgid "" +"The default :data:`TZPATH` when not otherwise specified can be configured at" +" :ref:`compile time `." +msgstr "" +"默认的 :data:`TZPATH` 未通过其他方式指定时可在 :ref:`编译时 " +"` 进行配置。" + +#: ../../library/zoneinfo.rst:112 +msgid "" +":data:`TZPATH` can be configured using :ref:`an environment variable " +"`." +msgstr ":data:`TZPATH` 可使用 :ref:`环境变量 ` 进行配置。" + +#: ../../library/zoneinfo.rst:114 +msgid "" +"At :ref:`runtime `, the search path can be " +"manipulated using the :func:`reset_tzpath` function." +msgstr "" +"在 :ref:`运行时 `,搜索路径可使用 :func:`reset_tzpath` " +"函数来修改。" + +#: ../../library/zoneinfo.rst:120 +msgid "Compile-time configuration" +msgstr "编译时配置" + +#: ../../library/zoneinfo.rst:122 +msgid "" +"The default :data:`TZPATH` includes several common deployment locations for " +"the time zone database (except on Windows, where there are no \"well-known\"" +" locations for time zone data). On POSIX systems, downstream distributors " +"and those building Python from source who know where their system time zone " +"data is deployed may change the default time zone path by specifying the " +"compile-time option ``TZPATH`` (or, more likely, the ``configure`` flag " +"``--with-tzpath``), which should be a string delimited by " +":data:`os.pathsep`." +msgstr "" +"默认的 :data:`TZPATH` 包括一些时区数据库的通用布署位置(Windows 除外,该系统没有时区数据的“通用”位置)。 在 POSIX " +"系统中,下游分发者和从源码编译 Python 的开发者知道系统时区数据布署位置,他们可以通过指定编译时选项 ``TZPATH`` (或者更常见的是通过 " +"``configure`` 旗标 ``--with-tzpath``) 来改变默认的时区路径,该选项应当是一个由 :data:`os.pathsep` " +"分隔的字符串。" + +#: ../../library/zoneinfo.rst:130 +msgid "" +"On all platforms, the configured value is available as the ``TZPATH`` key in" +" :func:`sysconfig.get_config_var`." +msgstr "在所有平台上,配置值会在 :func:`sysconfig.get_config_var` 中以 ``TZPATH`` 键的形式提供。" + +#: ../../library/zoneinfo.rst:136 +msgid "Environment configuration" +msgstr "环境配置" + +#: ../../library/zoneinfo.rst:138 +msgid "" +"When initializing :data:`TZPATH` (either at import time or whenever " +":func:`reset_tzpath` is called with no arguments), the ``zoneinfo`` module " +"will use the environment variable ``PYTHONTZPATH``, if it exists, to set the" +" search path." +msgstr "" +"当初始化 :data:`TZPATH` 时(在导入时或不带参数调用 :func:`reset_tzpath` 时),``zoneinfo`` " +"模块将使用环境变量 ``PYTHONTZPATH``,如果变量存在则会设置搜索路径。" + +#: ../../library/zoneinfo.rst:145 +msgid "" +"This is an :data:`os.pathsep`-separated string containing the time zone " +"search path to use. It must consist of only absolute rather than relative " +"paths. Relative components specified in ``PYTHONTZPATH`` will not be used, " +"but otherwise the behavior when a relative path is specified is " +"implementation-defined; CPython will raise :exc:`InvalidTZPathWarning`, but " +"other implementations are free to silently ignore the erroneous component or" +" raise an exception." +msgstr "" +"这是一个以 :data:`os.pathsep` 分隔的字符串,其中包含要使用的时区搜索路径。 它必须仅由绝对路径而非相对路径组成。 在 " +"``PYTHONTZPATH`` 中指定的相对路径部分将不会被使用,但在其他情况下当指定相对路径时的行为该实现是有定义的;CPython 将引发 " +":exc:`InvalidTZPathWarning`,而其他实现可自由地忽略错误部分或是引发异常。" + +#: ../../library/zoneinfo.rst:153 +msgid "" +"To set the system to ignore the system data and use the tzdata package " +"instead, set ``PYTHONTZPATH=\"\"``." +msgstr "要设置让系统忽略系统数据并改用 tzdata 包,请设置 ``PYTHONTZPATH=\"\"``。" + +#: ../../library/zoneinfo.rst:159 +msgid "Runtime configuration" +msgstr "运行时配置" + +#: ../../library/zoneinfo.rst:161 +msgid "" +"The TZ search path can also be configured at runtime using the " +":func:`reset_tzpath` function. This is generally not an advisable operation," +" though it is reasonable to use it in test functions that require the use of" +" a specific time zone path (or require disabling access to the system time " +"zones)." +msgstr "" +"TZ 搜索路径也可在运行时使用 :func:`reset_tzpath` 函数来配置。 " +"通常并不建议如此操作,不过在需要使用指定时区路径(或者需要禁止访问系统时区)的测试函数中使用它则是合理的。" + +#: ../../library/zoneinfo.rst:168 +msgid "The ``ZoneInfo`` class" +msgstr "``ZoneInfo`` 类" + +#: ../../library/zoneinfo.rst:172 +msgid "" +"A concrete :class:`datetime.tzinfo` subclass that represents an IANA time " +"zone specified by the string ``key``. Calls to the primary constructor will " +"always return objects that compare identically; put another way, barring " +"cache invalidation via :meth:`ZoneInfo.clear_cache`, for all values of " +"``key``, the following assertion will always be true:" +msgstr "" +"一个具体的 :class:`datetime.tzinfo` 子类,它代表一个由字符串 ``key`` 所指定的 IANA 时区。 " +"对主构造器的调用将总是返回可进行标识比较的对象;但是另一种方式,对所有的 ``key`` 值通过 " +":meth:`ZoneInfo.clear_cache` 禁止缓存失效,对以下断言将总是为真值:" + +#: ../../library/zoneinfo.rst:184 +msgid "" +"``key`` must be in the form of a relative, normalized POSIX path, with no " +"up-level references. The constructor will raise :exc:`ValueError` if a non-" +"conforming key is passed." +msgstr "" +"``key`` 必须采用相对的标准化 POSIX 路径的形式,其中没有对上一层级的引用。 如果传入了不合要求的键则构造器将引发 " +":exc:`ValueError`。" + +#: ../../library/zoneinfo.rst:188 +msgid "" +"If no file matching ``key`` is found, the constructor will raise " +":exc:`ZoneInfoNotFoundError`." +msgstr "如果没有找到匹配 ``key`` 的文件,构造器将引发 :exc:`ZoneInfoNotFoundError`。" + +#: ../../library/zoneinfo.rst:192 +msgid "The ``ZoneInfo`` class has two alternate constructors:" +msgstr "``ZoneInfo`` 类具有两个替代构造器:" + +#: ../../library/zoneinfo.rst:196 +msgid "" +"Constructs a ``ZoneInfo`` object from a file-like object returning bytes " +"(e.g. a file opened in binary mode or an :class:`io.BytesIO` object). Unlike" +" the primary constructor, this always constructs a new object." +msgstr "" +"基于一个返回字节串的文件型对象(例如一个以二进制模式打开的文件或是一个 :class:`io.BytesIO` 对象)构造 ``ZoneInfo`` " +"对象。 不同于主构造器,此构造器总是会构造一个新对象。" + +#: ../../library/zoneinfo.rst:200 +msgid "" +"The ``key`` parameter sets the name of the zone for the purposes of " +":py:meth:`~object.__str__` and :py:meth:`~object.__repr__`." +msgstr "" +"``key`` 形参设置时区名称以供 :py:meth:`~object.__str__` 和 :py:meth:`~object.__repr__` " +"使用。" + +#: ../../library/zoneinfo.rst:203 +msgid "" +"Objects created via this constructor cannot be pickled (see `pickling`_)." +msgstr "由此构造器创建的对象不可被封存 (参见 `pickling`_)。" + +#: ../../library/zoneinfo.rst:207 +msgid "" +"An alternate constructor that bypasses the constructor's cache. It is " +"identical to the primary constructor, but returns a new object on each call." +" This is most likely to be useful for testing or demonstration purposes, but" +" it can also be used to create a system with a different cache invalidation " +"strategy." +msgstr "" +"一个绕过构造器缓存的替代构造器。 它与主构造器很相似,但每次调用都会返回一个新对象。 " +"此构造器在进行测试或演示时最为适用,但它也可以被用来创建具有不同缓存失效策略的系统。" + +#: ../../library/zoneinfo.rst:213 +msgid "" +"Objects created via this constructor will also bypass the cache of a " +"deserializing process when unpickled." +msgstr "由此构造器创建的对象在被解封时也会绕过反序列化进程的缓存。" + +#: ../../library/zoneinfo.rst:220 +msgid "" +"Using this constructor may change the semantics of your datetimes in " +"surprising ways, only use it if you know that you need to." +msgstr "使用此构造器可以会以令人惊讶的方式改变日期时间对象的语义,只有在你确定你的需求时才使用它。" + +#: ../../library/zoneinfo.rst:223 +msgid "The following class methods are also available:" +msgstr "也可以使用以下的类方法:" + +#: ../../library/zoneinfo.rst:227 +msgid "" +"A method for invalidating the cache on the ``ZoneInfo`` class. If no " +"arguments are passed, all caches are invalidated and the next call to the " +"primary constructor for each key will return a new instance." +msgstr "一个可在 ``ZoneInfo`` 类上禁用缓存的方法。 如果不传入参数,则会禁用所有缓存并且下次对每个键调用主构造器将返回一个新实例。" + +#: ../../library/zoneinfo.rst:231 +msgid "" +"If an iterable of key names is passed to the ``only_keys`` parameter, only " +"the specified keys will be removed from the cache. Keys passed to " +"``only_keys`` but not found in the cache are ignored." +msgstr "" +"如果将一个键名称的可迭代对象传给 ``only_keys`` 形参,则将只有指定的键会被从缓存中移除。 传给 ``only_keys`` " +"但在缓存中找不到的键会被忽略。" + +#: ../../library/zoneinfo.rst:239 +msgid "" +"Invoking this function may change the semantics of datetimes using " +"``ZoneInfo`` in surprising ways; this modifies process-wide global state and" +" thus may have wide-ranging effects. Only use it if you know that you need " +"to." +msgstr "" +"发起调用此函数可能会以令人惊讶的方式改变使用 ``ZoneInfo`` 的日期时间对象的语义;这会修改进程范围内的全局状态并因此可能产生大范围的影响。 " +"只有在你确定你的需求时才使用它。" + +#: ../../library/zoneinfo.rst:244 +msgid "The class has one attribute:" +msgstr "该类具有一个属性:" + +#: ../../library/zoneinfo.rst:248 +msgid "" +"This is a read-only :term:`attribute` that returns the value of ``key`` " +"passed to the constructor, which should be a lookup key in the IANA time " +"zone database (e.g. ``America/New_York``, ``Europe/Paris`` or " +"``Asia/Tokyo``)." +msgstr "" +"这是一个只读的 :term:`attribute`,它返回传给构造器的 ``key`` 的值,该值应为一个 IANA 时区数据库的查找键 (例如 " +"``America/New_York``, ``Europe/Paris`` 或 ``Asia/Tokyo``)。" + +#: ../../library/zoneinfo.rst:253 +msgid "" +"For zones constructed from file without specifying a ``key`` parameter, this" +" will be set to ``None``." +msgstr "对于不指定 ``key`` 形参而是基于文件构造时区,该属性将设为 ``None``。" + +#: ../../library/zoneinfo.rst:258 +msgid "" +"Although it is a somewhat common practice to expose these to end users, " +"these values are designed to be primary keys for representing the relevant " +"zones and not necessarily user-facing elements. Projects like CLDR (the " +"Unicode Common Locale Data Repository) can be used to get more user-friendly" +" strings from these keys." +msgstr "" +"尽管将这些信息暴露给最终用户是一种比较普通的做法,但是这些值被设计作为代表相关时区的主键而不一定是面向用户的元素。 CLDR (Unicode " +"通用区域数据存储库) 之类的项目可被用来根据这些键获取更为用户友好的字符串。" + +#: ../../library/zoneinfo.rst:265 +msgid "String representations" +msgstr "字符串表示" + +#: ../../library/zoneinfo.rst:267 +msgid "" +"The string representation returned when calling :py:class:`str` on a " +":class:`ZoneInfo` object defaults to using the :attr:`ZoneInfo.key` " +"attribute (see the note on usage in the attribute documentation)::" +msgstr "" +"当在 :class:`ZoneInfo` 对象上调用 :py:class:`str` 时返回的字符串表示默认会使用 " +":attr:`ZoneInfo.key` 属性(参见该属性文档中的用法注释)::" + +#: ../../library/zoneinfo.rst:279 +msgid "" +"For objects constructed from a file without specifying a ``key`` parameter, " +"``str`` falls back to calling :func:`repr`. ``ZoneInfo``'s ``repr`` is " +"implementation-defined and not necessarily stable between versions, but it " +"is guaranteed not to be a valid ``ZoneInfo`` key." +msgstr "" +"对于基于文件而非指定 ``key`` 形参所构建的对象,``str`` 会回退为调用 :func:`repr`。 ``ZoneInfo`` 的 " +"``repr`` 是由具体实现定义的并且不一定会在不同版本间保持稳定,但它保证不会是一个有效的 ``ZoneInfo`` 键。" + +#: ../../library/zoneinfo.rst:287 +msgid "Pickle serialization" +msgstr "封存序列化" + +#: ../../library/zoneinfo.rst:289 +msgid "" +"Rather than serializing all transition data, ``ZoneInfo`` objects are " +"serialized by key, and ``ZoneInfo`` objects constructed from files (even " +"those with a value for ``key`` specified) cannot be pickled." +msgstr "" +"``ZoneInfo`` 对象的序列化是基于键的,而不是序列化所有过渡数据,并且基于文件构造的 ``ZoneInfo`` 对象(即使是指定了 " +"``key`` 值的对象)不能被封存。" + +#: ../../library/zoneinfo.rst:293 +msgid "The behavior of a ``ZoneInfo`` file depends on how it was constructed:" +msgstr "``ZoneInfo`` 文件的行为取决于它的构造方式:" + +#: ../../library/zoneinfo.rst:295 +msgid "" +"``ZoneInfo(key)``: When constructed with the primary constructor, a " +"``ZoneInfo`` object is serialized by key, and when deserialized, the " +"deserializing process uses the primary and thus it is expected that these " +"are expected to be the same object as other references to the same time " +"zone. For example, if ``europe_berlin_pkl`` is a string containing a pickle" +" constructed from ``ZoneInfo(\"Europe/Berlin\")``, one would expect the " +"following behavior:" +msgstr "" +"``ZoneInfo(key)``: 当使用主构造器构造时,会基于键序列化一个 ``ZoneInfo`` " +"对象,而当反序列化时,反序列化过程会使用主构造器,因此预期它们与其他对同一时区的引用会是同一对象。 例如,如果 " +"``europe_berlin_pkl`` 是一个包含基于 ``ZoneInfo(\"Europe/Berlin\")`` " +"构建的封存数据的字符串,你可以预期出现以下的行为:" + +#: ../../library/zoneinfo.rst:310 +msgid "" +"``ZoneInfo.no_cache(key)``: When constructed from the cache-bypassing " +"constructor, the ``ZoneInfo`` object is also serialized by key, but when " +"deserialized, the deserializing process uses the cache bypassing " +"constructor. If ``europe_berlin_pkl_nc`` is a string containing a pickle " +"constructed from ``ZoneInfo.no_cache(\"Europe/Berlin\")``, one would expect " +"the following behavior:" +msgstr "" +"``ZoneInfo.no_cache(key)``: 当通过绕过缓存的构造器构造时,``ZoneInfo`` " +"对象也会基于键序列化,但当反序列化时,反序列化过程会使用绕过缓存的构造器。 如果 ``europe_berlin_pkl_nc`` 是一个包含基于 " +"``ZoneInfo.no_cache(\"Europe/Berlin\")`` 构造的封存数据的字符串,你可以预期出现以下的行为:" + +#: ../../library/zoneinfo.rst:324 +msgid "" +"``ZoneInfo.from_file(fobj, /, key=None)``: When constructed from a file, the" +" ``ZoneInfo`` object raises an exception on pickling. If an end user wants " +"to pickle a ``ZoneInfo`` constructed from a file, it is recommended that " +"they use a wrapper type or a custom serialization function: either " +"serializing by key or storing the contents of the file object and " +"serializing that." +msgstr "" +"``ZoneInfo.from_file(fobj, /, key=None)``: 当通过文件构造时,``ZoneInfo`` " +"对象会在封存时引发异常。 如果最终用户想要封存通过文件构造的 " +"``ZoneInfo``,则推荐他们使用包装类型或自定义序列化函数:或者基于键序列化,或者存储文件对象的内容并将其序列化。" + +#: ../../library/zoneinfo.rst:330 +msgid "" +"This method of serialization requires that the time zone data for the " +"required key be available on both the serializing and deserializing side, " +"similar to the way that references to classes and functions are expected to " +"exist in both the serializing and deserializing environments. It also means " +"that no guarantees are made about the consistency of results when unpickling" +" a ``ZoneInfo`` pickled in an environment with a different version of the " +"time zone data." +msgstr "" +"该序列化方法要求所需键的时区数据在序列化和反序列化中均可用,类似于在序列化和反序列化环境中都预期存在对类和函数的引用的方式。 " +"这还意味着在具有不同时区数据版本的环境中当解封被封存的 ``ZoneInfo`` 时并不会保证结果的一致性。" + +#: ../../library/zoneinfo.rst:338 +msgid "Functions" +msgstr "函数" + +#: ../../library/zoneinfo.rst:342 +msgid "" +"Get a set containing all the valid keys for IANA time zones available " +"anywhere on the time zone path. This is recalculated on every call to the " +"function." +msgstr "获取一个包含可用 IANA 时区的在时区路径的任何位置均可用的全部有效键的集合。 每次调用该函数时都会重新计算。" + +#: ../../library/zoneinfo.rst:346 +msgid "" +"This function only includes canonical zone names and does not include " +"\"special\" zones such as those under the ``posix/`` and ``right/`` " +"directories, or the ``posixrules`` zone." +msgstr "" +"此函数仅包括规范时区名称而不包括“特殊”时区如位于 ``posix/`` 和 ``right/`` 目录下的时区或 ``posixrules`` 时区。" + +#: ../../library/zoneinfo.rst:352 +msgid "" +"This function may open a large number of files, as the best way to determine" +" if a file on the time zone path is a valid time zone is to read the \"magic" +" string\" at the beginning." +msgstr "此函数可能会打开大量的文件,因为确定时区路径上某个文件是否为有效时区的最佳方式是读取开头位置的“魔术字符串”。" + +#: ../../library/zoneinfo.rst:358 +msgid "" +"These values are not designed to be exposed to end-users; for user facing " +"elements, applications should use something like CLDR (the Unicode Common " +"Locale Data Repository) to get more user-friendly strings. See also the " +"cautionary note on :attr:`ZoneInfo.key`." +msgstr "" +"这些值并不被设计用来对外公开给最终用户;对于面向用户的元素,应用程序应当使用 CLDR (Unicode 通用区域数据存储库) " +"之类来获取更为用户友好的字符串。 另请参阅 :attr:`ZoneInfo.key` 中的提示性说明。" + +#: ../../library/zoneinfo.rst:365 +msgid "" +"Sets or resets the time zone search path (:data:`TZPATH`) for the module. " +"When called with no arguments, :data:`TZPATH` is set to the default value." +msgstr "设置或重置模块的时区搜索路径 (:data:`TZPATH`)。 当不带参数调用时,:data:`TZPATH` 会被设为默认值。" + +#: ../../library/zoneinfo.rst:368 +msgid "" +"Calling ``reset_tzpath`` will not invalidate the :class:`ZoneInfo` cache, " +"and so calls to the primary ``ZoneInfo`` constructor will only use the new " +"``TZPATH`` in the case of a cache miss." +msgstr "" +"调用 ``reset_tzpath`` 将不会使 :class:`ZoneInfo` 缓存失效,因而在缓存未命中的情况下对主 ``ZoneInfo`` " +"构造器的调用将只使用新的 ``TZPATH``。" + +#: ../../library/zoneinfo.rst:372 +msgid "" +"The ``to`` parameter must be a :term:`sequence` of strings or " +":class:`os.PathLike` and not a string, all of which must be absolute paths. " +":exc:`ValueError` will be raised if something other than an absolute path is" +" passed." +msgstr "" +"``to`` 形参必须是由字符串或 :class:`os.PathLike` 组成的 :term:`sequence` " +"或而不是字符串,它们必须都是绝对路径。 如果所传入的不是绝对路径则将引发 :exc:`ValueError`。" + +#: ../../library/zoneinfo.rst:378 +msgid "Globals" +msgstr "全局变量" + +#: ../../library/zoneinfo.rst:382 +msgid "" +"A read-only sequence representing the time zone search path -- when " +"constructing a ``ZoneInfo`` from a key, the key is joined to each entry in " +"the ``TZPATH``, and the first file found is used." +msgstr "" +"一个表示时区搜索路径的只读序列 -- 当通过键构造 ``ZoneInfo`` 时,键会与 ``TZPATH`` " +"中的每个条目进行合并,并使用所找到的第一个文件。" + +#: ../../library/zoneinfo.rst:386 +msgid "" +"``TZPATH`` may contain only absolute paths, never relative paths, regardless" +" of how it is configured." +msgstr "``TZPATH`` 可以只包含绝对路径,绝不包含相对路径,无论它是如何配置的。" + +#: ../../library/zoneinfo.rst:389 +msgid "" +"The object that ``zoneinfo.TZPATH`` points to may change in response to a " +"call to :func:`reset_tzpath`, so it is recommended to use " +"``zoneinfo.TZPATH`` rather than importing ``TZPATH`` from ``zoneinfo`` or " +"assigning a long-lived variable to ``zoneinfo.TZPATH``." +msgstr "" +"``zoneinfo.TZPATH`` 所指向的对象可能随着对 :func:`reset_tzpath` 的调用而改变,因此推荐使用 " +"``zoneinfo.TZPATH`` 而不是从 ``zoneinfo`` 导入 ``TZPATH`` 或是将 ``zoneinfo.TZPATH`` " +"赋值给一个长期变量。" + +#: ../../library/zoneinfo.rst:394 +msgid "" +"For more information on configuring the time zone search path, see " +":ref:`zoneinfo_data_configuration`." +msgstr "有关配置时区搜索路径的更多信息,请参阅 :ref:`zoneinfo_data_configuration`。" + +#: ../../library/zoneinfo.rst:398 +msgid "Exceptions and warnings" +msgstr "异常与警告" + +#: ../../library/zoneinfo.rst:402 +msgid "" +"Raised when construction of a :class:`ZoneInfo` object fails because the " +"specified key could not be found on the system. This is a subclass of " +":exc:`KeyError`." +msgstr "" +"当一个 :class:`ZoneInfo` 对象的构造由于在系统中找不到指定的键而失败时引发。 这是 :exc:`KeyError` 的一个子类。" + +#: ../../library/zoneinfo.rst:408 +msgid "" +"Raised when :envvar:`PYTHONTZPATH` contains an invalid component that will " +"be filtered out, such as a relative path." +msgstr "当 :envvar:`PYTHONTZPATH` 包含将被过滤掉的无效组件,例如一个相对路径时引发。" diff --git a/license.po b/license.po new file mode 100644 index 000000000..7dcd84c26 --- /dev/null +++ b/license.po @@ -0,0 +1,500 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) 2001-2022, Python Software Foundation +# This file is distributed under the same license as the Python package. +# FIRST AUTHOR , YEAR. +# +# Translators: +# Fei Yin , 2018 +# kily zhou , 2018 +# Shengjing Zhu , 2019 +# 汪心禾 , 2019 +# ppcfish , 2019 +# Freesand Leo , 2021 +# WH-2099 , 2022 +# +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: Python 3.9\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2022-11-04 14:34+0000\n" +"PO-Revision-Date: 2017-02-16 17:32+0000\n" +"Last-Translator: WH-2099 , 2022\n" +"Language-Team: Chinese (China) (https://www.transifex.com/python-doc/teams/5390/zh_CN/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: zh_CN\n" +"Plural-Forms: nplurals=1; plural=0;\n" + +#: ../../license.rst:7 +msgid "History and License" +msgstr "历史和许可证" + +#: ../../license.rst:11 +msgid "History of the software" +msgstr "该软件的历史" + +#: ../../license.rst:13 +msgid "" +"Python was created in the early 1990s by Guido van Rossum at Stichting " +"Mathematisch Centrum (CWI, see https://www.cwi.nl/) in the Netherlands as a " +"successor of a language called ABC. Guido remains Python's principal " +"author, although it includes many contributions from others." +msgstr "" +"Python 由荷兰数学和计算机科学研究学会(CWI,见 https://www.cwi.nl/ )的 Guido van Rossum 于 1990 " +"年代初设计,作为一门叫做 ABC 的语言的替代品。尽管 Python 包含了许多来自其他人的贡献,Guido 仍是其主要作者。" + +#: ../../license.rst:18 +msgid "" +"In 1995, Guido continued his work on Python at the Corporation for National " +"Research Initiatives (CNRI, see https://www.cnri.reston.va.us/) in Reston, " +"Virginia where he released several versions of the software." +msgstr "" +"1995 年,Guido 在弗吉尼亚州的国家创新研究公司(CNRI,见 https://www.cnri.reston.va.us/ )继续他在 " +"Python 上的工作,并在那里发布了该软件的多个版本。" + +#: ../../license.rst:22 +msgid "" +"In May 2000, Guido and the Python core development team moved to BeOpen.com " +"to form the BeOpen PythonLabs team. In October of the same year, the " +"PythonLabs team moved to Digital Creations (now Zope Corporation; see " +"https://www.zope.org/). In 2001, the Python Software Foundation (PSF, see " +"https://www.python.org/psf/) was formed, a non-profit organization created " +"specifically to own Python-related Intellectual Property. Zope Corporation " +"is a sponsoring member of the PSF." +msgstr "" +"2000 年五月,Guido 和 Python 核心开发团队转到 BeOpen.com 并组建了 BeOpen PythonLabs 团队。 " +"同年十月,PythonLabs 团队转到 Digital Creations (现为 Zope Corporation;见 " +"https://www.zope.org/)。 2001 年,Python 软件基金会 (PSF,见 " +"https://www.python.org/psf/) 成立,这是一个专为拥有 Python 相关知识产权而创建的非营利组织。 Zope " +"Corporation 现在是 PSF 的赞助成员。" + +#: ../../license.rst:30 +msgid "" +"All Python releases are Open Source (see https://opensource.org/ for the " +"Open Source Definition). Historically, most, but not all, Python releases " +"have also been GPL-compatible; the table below summarizes the various " +"releases." +msgstr "" +"所有的 Python 版本都是开源的(有关开源的定义参阅 https://opensource.org/ )。历史上,绝大多数 Python 版本是 " +"GPL 兼容的;下表总结了各个版本情况。" + +#: ../../license.rst:35 +msgid "Release" +msgstr "发布版本" + +#: ../../license.rst:35 +msgid "Derived from" +msgstr "源自" + +#: ../../license.rst:35 +msgid "Year" +msgstr "年份" + +#: ../../license.rst:35 +msgid "Owner" +msgstr "所有者" + +#: ../../license.rst:35 +msgid "GPL compatible?" +msgstr "GPL 兼容?" + +#: ../../license.rst:37 +msgid "0.9.0 thru 1.2" +msgstr "0.9.0 至 1.2" + +#: ../../license.rst:37 +msgid "n/a" +msgstr "n/a" + +#: ../../license.rst:37 +msgid "1991-1995" +msgstr "1991-1995" + +#: ../../license.rst:37 +msgid "CWI" +msgstr "CWI" + +#: ../../license.rst:37 ../../license.rst:39 ../../license.rst:49 +#: ../../license.rst:51 ../../license.rst:53 ../../license.rst:55 +#: ../../license.rst:57 +msgid "yes" +msgstr "是" + +#: ../../license.rst:39 +msgid "1.3 thru 1.5.2" +msgstr "1.3 至 1.5.2" + +#: ../../license.rst:39 +msgid "1.2" +msgstr "1.2" + +#: ../../license.rst:39 +msgid "1995-1999" +msgstr "1995-1999" + +#: ../../license.rst:39 ../../license.rst:41 ../../license.rst:45 +msgid "CNRI" +msgstr "CNRI" + +#: ../../license.rst:41 ../../license.rst:43 ../../license.rst:45 +msgid "1.6" +msgstr "1.6" + +#: ../../license.rst:41 +msgid "1.5.2" +msgstr "1.5.2" + +#: ../../license.rst:41 ../../license.rst:43 +msgid "2000" +msgstr "2000" + +#: ../../license.rst:41 ../../license.rst:43 ../../license.rst:45 +#: ../../license.rst:47 +msgid "no" +msgstr "否" + +#: ../../license.rst:43 +msgid "2.0" +msgstr "2.0" + +#: ../../license.rst:43 +msgid "BeOpen.com" +msgstr "BeOpen.com" + +#: ../../license.rst:45 +msgid "1.6.1" +msgstr "1.6.1" + +#: ../../license.rst:45 ../../license.rst:47 ../../license.rst:49 +#: ../../license.rst:51 +msgid "2001" +msgstr "2001" + +#: ../../license.rst:47 +msgid "2.1" +msgstr "2.1" + +#: ../../license.rst:47 ../../license.rst:49 +msgid "2.0+1.6.1" +msgstr "2.0+1.6.1" + +#: ../../license.rst:47 ../../license.rst:49 ../../license.rst:51 +#: ../../license.rst:53 ../../license.rst:55 ../../license.rst:57 +msgid "PSF" +msgstr "PSF" + +#: ../../license.rst:49 +msgid "2.0.1" +msgstr "2.0.1" + +#: ../../license.rst:51 ../../license.rst:53 ../../license.rst:57 +msgid "2.1.1" +msgstr "2.1.1" + +#: ../../license.rst:51 +msgid "2.1+2.0.1" +msgstr "2.1+2.0.1" + +#: ../../license.rst:53 ../../license.rst:55 +msgid "2.1.2" +msgstr "2.1.2" + +#: ../../license.rst:53 ../../license.rst:55 +msgid "2002" +msgstr "2002" + +#: ../../license.rst:55 +msgid "2.1.3" +msgstr "2.1.3" + +#: ../../license.rst:57 +msgid "2.2 and above" +msgstr "2.2 及更高" + +#: ../../license.rst:57 +msgid "2001-now" +msgstr "2001 至今" + +#: ../../license.rst:62 +msgid "" +"GPL-compatible doesn't mean that we're distributing Python under the GPL. " +"All Python licenses, unlike the GPL, let you distribute a modified version " +"without making your changes open source. The GPL-compatible licenses make it" +" possible to combine Python with other software that is released under the " +"GPL; the others don't." +msgstr "" +"GPL 兼容并不意味着 Python 在 GPL 下发布。与 GPL 不同,所有 Python " +"许可证都允许您分发修改后的版本,而无需开源所做的更改。GPL 兼容的许可证使得 Python 可以与其它在 GPL " +"下发布的软件结合使用;但其它的许可证则不行。" + +#: ../../license.rst:68 +msgid "" +"Thanks to the many outside volunteers who have worked under Guido's " +"direction to make these releases possible." +msgstr "感谢众多在 Guido 指导下工作的外部志愿者,使得这些发布成为可能。" + +#: ../../license.rst:73 +msgid "Terms and conditions for accessing or otherwise using Python" +msgstr "获取或以其他方式使用 Python 的条款和条件" + +#: ../../license.rst:75 +msgid "" +"Python software and documentation are licensed under the :ref:`PSF License " +"Agreement `." +msgstr "Python 软件和文档的使用许可均基于 :ref:`PSF 许可协议 `。" + +#: ../../license.rst:78 +msgid "" +"Starting with Python 3.8.6, examples, recipes, and other code in the " +"documentation are dual licensed under the PSF License Agreement and the " +":ref:`Zero-Clause BSD license `." +msgstr "" +"从 Python 3.8.6 开始,文档中的示例、操作指导和其他代码采用的是 PSF 许可协议和 :ref:`零条款 BSD 许可 ` " +"的双重使用许可。" + +#: ../../license.rst:82 +msgid "" +"Some software incorporated into Python is under different licenses. The " +"licenses are listed with code falling under that license. See " +":ref:`OtherLicenses` for an incomplete list of these licenses." +msgstr "" +"某些包含在 Python 中的软件是基于不同的许可。 这些许可会与相应许可之下的代码一同列出。 有关这些许可的不完整列表请参阅 " +":ref:`OtherLicenses`。" + +#: ../../license.rst:90 +msgid "PSF LICENSE AGREEMENT FOR PYTHON |release|" +msgstr "用于 PYTHON |release| 的 PSF 许可协议" + +#: ../../license.rst:138 +msgid "BEOPEN.COM LICENSE AGREEMENT FOR PYTHON 2.0" +msgstr "用于 PYTHON 2.0 的 BEOPEN.COM 许可协议" + +#: ../../license.rst:140 +msgid "BEOPEN PYTHON OPEN SOURCE LICENSE AGREEMENT VERSION 1" +msgstr "BEOPEN PYTHON 开源许可协议第 1 版" + +#: ../../license.rst:185 +msgid "CNRI LICENSE AGREEMENT FOR PYTHON 1.6.1" +msgstr "用于 PYTHON 1.6.1 的 CNRI 许可协议" + +#: ../../license.rst:250 +msgid "CWI LICENSE AGREEMENT FOR PYTHON 0.9.0 THROUGH 1.2" +msgstr "用于 PYTHON 0.9.0 至 1.2 的 CWI 许可协议" + +#: ../../license.rst:277 +msgid "ZERO-CLAUSE BSD LICENSE FOR CODE IN THE PYTHON |release| DOCUMENTATION" +msgstr "" +"ZERO-CLAUSE BSD LICENSE FOR CODE IN THE PYTHON |release| DOCUMENTATION" + +#: ../../license.rst:296 +msgid "Licenses and Acknowledgements for Incorporated Software" +msgstr "被收录软件的许可证与鸣谢" + +#: ../../license.rst:298 +msgid "" +"This section is an incomplete, but growing list of licenses and " +"acknowledgements for third-party software incorporated in the Python " +"distribution." +msgstr "本节是Python发行版中收录的第三方软件的许可和致谢清单,该清单是不完整且不断增长的。" + +#: ../../license.rst:303 +msgid "Mersenne Twister" +msgstr "Mersenne Twister" + +#: ../../license.rst:305 +msgid "" +"The :mod:`_random` module includes code based on a download from " +"http://www.math.sci.hiroshima-u.ac.jp/~m-mat/MT/MT2002/emt19937ar.html. The " +"following are the verbatim comments from the original code::" +msgstr "" +":mod:`_random` 模块包含基于 " +"http://www.math.sci.hiroshima-u.ac.jp/~m-mat/MT/MT2002/emt19937ar.html " +"下载的代码。以下是原始代码的完整注释(声明):" + +#: ../../license.rst:352 +msgid "Sockets" +msgstr "套接字" + +#: ../../license.rst:354 +msgid "" +"The :mod:`socket` module uses the functions, :func:`getaddrinfo`, and " +":func:`getnameinfo`, which are coded in separate source files from the WIDE " +"Project, http://www.wide.ad.jp/. ::" +msgstr "" +":mod:`socket` 模块使用 :func:`getaddrinfo` 和 :func:`getnameinfo` " +"函数,这些函数源代码在WIDE项目(http://www.wide.ad.jp/)的单独源文件中。" + +#: ../../license.rst:387 +msgid "Asynchronous socket services" +msgstr "异步套接字服务" + +#: ../../license.rst:389 +msgid "" +"The :mod:`asynchat` and :mod:`asyncore` modules contain the following " +"notice::" +msgstr ":mod:`asynchat` 和 :mod:`asyncore` 模块包含以下声明::" + +#: ../../license.rst:414 +msgid "Cookie management" +msgstr "Cookie 管理" + +#: ../../license.rst:416 +msgid "The :mod:`http.cookies` module contains the following notice::" +msgstr ":mod:`http.cookies` 模块包含以下声明::" + +#: ../../license.rst:442 +msgid "Execution tracing" +msgstr "执行追踪" + +#: ../../license.rst:444 +msgid "The :mod:`trace` module contains the following notice::" +msgstr ":mod:`trace` 模块包含以下声明::" + +#: ../../license.rst:475 +msgid "UUencode and UUdecode functions" +msgstr "UUencode 与 UUdecode 函数" + +#: ../../license.rst:477 +msgid "The :mod:`uu` module contains the following notice::" +msgstr ":mod:`uu` 模块包含以下声明::" + +#: ../../license.rst:505 +msgid "XML Remote Procedure Calls" +msgstr "XML 远程过程调用" + +#: ../../license.rst:507 +msgid "The :mod:`xmlrpc.client` module contains the following notice::" +msgstr ":mod:`xmlrpc.client` 模块包含以下声明::" + +#: ../../license.rst:538 +msgid "test_epoll" +msgstr "test_epoll" + +#: ../../license.rst:540 +msgid "The :mod:`test_epoll` module contains the following notice::" +msgstr ":mod:`test_epoll` 模块包含以下声明::" + +#: ../../license.rst:564 +msgid "Select kqueue" +msgstr "Select kqueue" + +#: ../../license.rst:566 +msgid "" +"The :mod:`select` module contains the following notice for the kqueue " +"interface::" +msgstr ":mod:`select` 模块关于 kqueue 的接口包含以下声明::" + +#: ../../license.rst:595 +msgid "SipHash24" +msgstr "SipHash24" + +#: ../../license.rst:597 +msgid "" +"The file :file:`Python/pyhash.c` contains Marek Majkowski' implementation of" +" Dan Bernstein's SipHash24 algorithm. It contains the following note::" +msgstr "" +":file:`Python/pyhash.c` 文件包含 Marek Majkowski' 对 Dan Bernstein 的SipHash24 " +"算法的实现。它包含以下声明::" + +#: ../../license.rst:624 +msgid "strtod and dtoa" +msgstr "strtod 和 dtoa" + +#: ../../license.rst:626 +msgid "" +"The file :file:`Python/dtoa.c`, which supplies C functions dtoa and strtod " +"for conversion of C doubles to and from strings, is derived from the file of" +" the same name by David M. Gay, currently available from " +"http://www.netlib.org/fp/. The original file, as retrieved on March 16, " +"2009, contains the following copyright and licensing notice::" +msgstr "" +":file:`Python/dtoa.c` 文件提供了C语言的 dtoa 和 strtod 函数,用于将C语言的 双精度型和字符串进行转换,由David" +" M. Gay的同名文件派生而来,该文件当前可从http://www.netlib.org/fp/ " +"下载。2009年3月16日检索到的原始文件包含以下版权和许可声明::" + +#: ../../license.rst:654 +msgid "OpenSSL" +msgstr "OpenSSL" + +#: ../../license.rst:656 +msgid "" +"The modules :mod:`hashlib`, :mod:`posix`, :mod:`ssl`, :mod:`crypt` use the " +"OpenSSL library for added performance if made available by the operating " +"system. Additionally, the Windows and macOS installers for Python may " +"include a copy of the OpenSSL libraries, so we include a copy of the OpenSSL" +" license here::" +msgstr "" +"如果操作系统可用,则 :mod:`hashlib`、:mod:`posix`、:mod:`ssl`、:mod:`crypt` 模块使用 OpenSSL " +"库来提高性能。此外,适用于 Python 的 Windows 和 macoS 安装程序可能包括 OpenSSL 库的拷贝,所以在此处也列出了 " +"OpenSSL 许可证的拷贝::" + +#: ../../license.rst:791 +msgid "expat" +msgstr "expat" + +#: ../../license.rst:793 +msgid "" +"The :mod:`pyexpat` extension is built using an included copy of the expat " +"sources unless the build is configured ``--with-system-expat``::" +msgstr "" +"除非使用 ``--with-system-expat`` 配置了构建,否则 :mod:`pyexpat` 扩展都是用包含 expat源的拷贝构建的::" + +#: ../../license.rst:820 +msgid "libffi" +msgstr "libffi" + +#: ../../license.rst:822 +msgid "" +"The :mod:`_ctypes` extension is built using an included copy of the libffi " +"sources unless the build is configured ``--with-system-libffi``::" +msgstr "" +"除非使用 ``--with-system-libffi`` 配置了构建,否则 :mod:`_ctypes` 扩展都是包含 libffi源的拷贝构建的::" + +#: ../../license.rst:849 +msgid "zlib" +msgstr "zlib" + +#: ../../license.rst:851 +msgid "" +"The :mod:`zlib` extension is built using an included copy of the zlib " +"sources if the zlib version found on the system is too old to be used for " +"the build::" +msgstr "如果系统上找到的zlib版本太旧而无法用于构建,则使用包含 zlib源代码的拷贝来构建 :mod:`zlib` 扩展::" + +#: ../../license.rst:880 +msgid "cfuhash" +msgstr "cfuhash" + +#: ../../license.rst:882 +msgid "" +"The implementation of the hash table used by the :mod:`tracemalloc` is based" +" on the cfuhash project::" +msgstr ":mod:`tracemalloc` 使用的哈希表的实现基于 cfuhash项目::" + +#: ../../license.rst:921 +msgid "libmpdec" +msgstr "libmpdec" + +#: ../../license.rst:923 +msgid "" +"The :mod:`_decimal` module is built using an included copy of the libmpdec " +"library unless the build is configured ``--with-system-libmpdec``::" +msgstr "" +"除非使用 ``--with-system-libmpdec`` 配置了构建,否则 :mod:`_decimal` 模块都是用包含 libmpdec " +"库的拷贝构建的。" + +#: ../../license.rst:953 +msgid "W3C C14N test suite" +msgstr "W3C C14N 测试套件" + +#: ../../license.rst:955 +msgid "" +"The C14N 2.0 test suite in the :mod:`test` package " +"(``Lib/test/xmltestdata/c14n-20/``) was retrieved from the W3C website at " +"https://www.w3.org/TR/xml-c14n2-testcases/ and is distributed under the " +"3-clause BSD license::" +msgstr "" +":mod:`test` 包中的 C14N 2.0 测试集 (``Lib/test/xmltestdata/c14n-20/``) 提取自 W3C 网站 " +"https://www.w3.org/TR/xml-c14n2-testcases/ 并根据 3 条款版 BSD 许可证发行:" diff --git a/reference/compound_stmts.po b/reference/compound_stmts.po new file mode 100644 index 000000000..f78b2c429 --- /dev/null +++ b/reference/compound_stmts.po @@ -0,0 +1,967 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) 2001-2025, Python Software Foundation +# This file is distributed under the same license as the Python package. +# FIRST AUTHOR , YEAR. +# +# Translators: +# dannyvi , 2018 +# Freesand Leo , 2022 +# Rafael Fontenelle , 2025 +# +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: Python 3.9\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2025-02-07 16:40+0000\n" +"PO-Revision-Date: 2017-02-16 23:38+0000\n" +"Last-Translator: Rafael Fontenelle , 2025\n" +"Language-Team: Chinese (China) (https://app.transifex.com/python-doc/teams/5390/zh_CN/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: zh_CN\n" +"Plural-Forms: nplurals=1; plural=0;\n" + +#: ../../reference/compound_stmts.rst:5 +msgid "Compound statements" +msgstr "复合语句" + +#: ../../reference/compound_stmts.rst:9 +msgid "" +"Compound statements contain (groups of) other statements; they affect or " +"control the execution of those other statements in some way. In general, " +"compound statements span multiple lines, although in simple incarnations a " +"whole compound statement may be contained in one line." +msgstr "" +"复合语句是包含其它语句(语句组)的语句;它们会以某种方式影响或控制所包含其它语句的执行。 " +"通常,复合语句会跨越多行,虽然在某些简单形式下整个复合语句也可能包含于一行之内。" + +#: ../../reference/compound_stmts.rst:14 +msgid "" +"The :keyword:`if`, :keyword:`while` and :keyword:`for` statements implement " +"traditional control flow constructs. :keyword:`try` specifies exception " +"handlers and/or cleanup code for a group of statements, while the " +":keyword:`with` statement allows the execution of initialization and " +"finalization code around a block of code. Function and class definitions " +"are also syntactically compound statements." +msgstr "" +":keyword:`if`, :keyword:`while` 和 :keyword:`for` 语句用来实现传统的控制流程构造。 " +":keyword:`try` 语句为一组语句指定异常处理和/和清理代码,而 :keyword:`with` " +"语句允许在一个代码块周围执行初始化和终结化代码。 函数和类定义在语法上也属于复合语句。" + +#: ../../reference/compound_stmts.rst:26 +msgid "" +"A compound statement consists of one or more 'clauses.' A clause consists " +"of a header and a 'suite.' The clause headers of a particular compound " +"statement are all at the same indentation level. Each clause header begins " +"with a uniquely identifying keyword and ends with a colon. A suite is a " +"group of statements controlled by a clause. A suite can be one or more " +"semicolon-separated simple statements on the same line as the header, " +"following the header's colon, or it can be one or more indented statements " +"on subsequent lines. Only the latter form of a suite can contain nested " +"compound statements; the following is illegal, mostly because it wouldn't be" +" clear to which :keyword:`if` clause a following :keyword:`else` clause " +"would belong::" +msgstr "" +"一条复合语句由一个或多个‘子句’组成。 一个子句则包含一个句头和一个‘句体’。 特定复合语句的子句头都处于相同的缩进层级。 " +"每个子句头以一个作为唯一标识的关键字开始并以一个冒号结束。 子句体是由一个子句控制的一组语句。 " +"子句体可以是在子句头的冒号之后与其同处一行的一条或由分号分隔的多条简单语句,或者也可以是在其之后缩进的一行或多行语句。 " +"只有后一种形式的子句体才能包含嵌套的复合语句;以下形式是不合法的,这主要是因为无法分清某个后续的 :keyword:`else` 子句应该属于哪个 " +":keyword:`if` 子句::" + +#: ../../reference/compound_stmts.rst:39 +msgid "" +"Also note that the semicolon binds tighter than the colon in this context, " +"so that in the following example, either all or none of the :func:`print` " +"calls are executed::" +msgstr "还要注意的是在这种情形下分号的绑定比冒号更紧密,因此在以下示例中,所有 :func:`print` 调用或者都不执行,或者都执行::" + +#: ../../reference/compound_stmts.rst:45 +msgid "Summarizing:" +msgstr "总结:" + +#: ../../reference/compound_stmts.rst:68 +msgid "" +"Note that statements always end in a ``NEWLINE`` possibly followed by a " +"``DEDENT``. Also note that optional continuation clauses always begin with " +"a keyword that cannot start a statement, thus there are no ambiguities (the " +"'dangling :keyword:`else`' problem is solved in Python by requiring nested " +":keyword:`if` statements to be indented)." +msgstr "" +"请注意语句总是以 ``NEWLINE`` 结束,之后可能跟随一个 ``DEDENT``。 " +"还要注意可选的后续子句总是以一个不能作为语句开头的关键字作为开头,因此不会产生歧义(‘悬空的 :keyword:`else`’问题在 Python " +"中是通过要求嵌套的 :keyword:`if` 语句必须缩进来解决的)。" + +#: ../../reference/compound_stmts.rst:74 +msgid "" +"The formatting of the grammar rules in the following sections places each " +"clause on a separate line for clarity." +msgstr "为了保证清晰,以下各节中语法规则采用将每个子句都放在单独行中的格式。" + +#: ../../reference/compound_stmts.rst:83 +msgid "The :keyword:`!if` statement" +msgstr ":keyword:`!if` 语句" + +#: ../../reference/compound_stmts.rst:91 +msgid "The :keyword:`if` statement is used for conditional execution:" +msgstr ":keyword:`if` 语句用于有条件的执行:" + +#: ../../reference/compound_stmts.rst:98 +msgid "" +"It selects exactly one of the suites by evaluating the expressions one by " +"one until one is found to be true (see section :ref:`booleans` for the " +"definition of true and false); then that suite is executed (and no other " +"part of the :keyword:`if` statement is executed or evaluated). If all " +"expressions are false, the suite of the :keyword:`else` clause, if present, " +"is executed." +msgstr "" +"它通过对表达式逐个求值直至找到一个真值(请参阅 :ref:`booleans` " +"了解真值与假值的定义)在子句体中选择唯一匹配的一个;然后执行该子句体(而且 :keyword:`if` 语句的其他部分不会被执行或求值)。 " +"如果所有表达式均为假值,则如果 :keyword:`else` 子句体如果存在就会被执行。" + +#: ../../reference/compound_stmts.rst:108 +msgid "The :keyword:`!while` statement" +msgstr ":keyword:`!while` 语句" + +#: ../../reference/compound_stmts.rst:116 +msgid "" +"The :keyword:`while` statement is used for repeated execution as long as an " +"expression is true:" +msgstr ":keyword:`while` 语句用于在表达式保持为真的情况下重复地执行:" + +#: ../../reference/compound_stmts.rst:123 +msgid "" +"This repeatedly tests the expression and, if it is true, executes the first " +"suite; if the expression is false (which may be the first time it is tested)" +" the suite of the :keyword:`!else` clause, if present, is executed and the " +"loop terminates." +msgstr "" +"这将重复地检验表达式,并且如果其值为真就执行第一个子句体;如果表达式值为假(这可能在第一次检验时就发生)则如果 :keyword:`!else` " +"子句体存在就会被执行并终止循环。" + +#: ../../reference/compound_stmts.rst:132 +msgid "" +"A :keyword:`break` statement executed in the first suite terminates the loop" +" without executing the :keyword:`!else` clause's suite. A " +":keyword:`continue` statement executed in the first suite skips the rest of " +"the suite and goes back to testing the expression." +msgstr "" +"第一个子句体中的 :keyword:`break` 语句在执行时将终止循环且不执行 :keyword:`!else` 子句体。 第一个子句体中的 " +":keyword:`continue` 语句在执行时将跳过子句体中的剩余部分并返回检验表达式。" + +#: ../../reference/compound_stmts.rst:141 +msgid "The :keyword:`!for` statement" +msgstr ":keyword:`!for` 语句" + +#: ../../reference/compound_stmts.rst:152 +msgid "" +"The :keyword:`for` statement is used to iterate over the elements of a " +"sequence (such as a string, tuple or list) or other iterable object:" +msgstr ":keyword:`for` 语句用于对序列(例如字符串、元组或列表)或其他可迭代对象中的元素进行迭代:" + +#: ../../reference/compound_stmts.rst:159 +msgid "" +"The expression list is evaluated once; it should yield an iterable object. " +"An iterator is created for the result of the ``expression_list``. The suite" +" is then executed once for each item provided by the iterator, in the order " +"returned by the iterator. Each item in turn is assigned to the target list " +"using the standard rules for assignments (see :ref:`assignment`), and then " +"the suite is executed. When the items are exhausted (which is immediately " +"when the sequence is empty or an iterator raises a :exc:`StopIteration` " +"exception), the suite in the :keyword:`!else` clause, if present, is " +"executed, and the loop terminates." +msgstr "" +"表达式列表会被求值一次;它应该产生一个可迭代对象。 系统将为 ``expression_list`` " +"的结果创建一个迭代器,然后将为迭代器所提供的每一项执行一次子句体,具体次序与迭代器的返回顺序一致。 每一项会按标准赋值规则 (参见 " +":ref:`assignment`) 被依次赋值给目标列表,然后子句体将被执行。 当所有项被耗尽时 (这会在序列为空或迭代器引发 " +":exc:`StopIteration` 异常时立刻发生),:keyword:`!else` 子句的子句体如果存在将会被执行,并终止循环。" + +#: ../../reference/compound_stmts.rst:172 +msgid "" +"A :keyword:`break` statement executed in the first suite terminates the loop" +" without executing the :keyword:`!else` clause's suite. A " +":keyword:`continue` statement executed in the first suite skips the rest of " +"the suite and continues with the next item, or with the :keyword:`!else` " +"clause if there is no next item." +msgstr "" +"第一个子句体中的 :keyword:`break` 语句在执行时将终止循环且不执行 :keyword:`!else` 子句体。 第一个子句体中的 " +":keyword:`continue` 语句在执行时将跳过子句体中的剩余部分并转往下一项继续执行,或者在没有下一项时转往 " +":keyword:`!else` 子句执行。" + +#: ../../reference/compound_stmts.rst:178 +msgid "" +"The for-loop makes assignments to the variables in the target list. This " +"overwrites all previous assignments to those variables including those made " +"in the suite of the for-loop::" +msgstr "for 循环会对目标列表中的变量进行赋值。 这将覆盖之前对这些变量的所有赋值,包括在 for 循环体中的赋值::" + +#: ../../reference/compound_stmts.rst:192 +msgid "" +"Names in the target list are not deleted when the loop is finished, but if " +"the sequence is empty, they will not have been assigned to at all by the " +"loop. Hint: the built-in function :func:`range` returns an iterator of " +"integers suitable to emulate the effect of Pascal's ``for i := a to b do``; " +"e.g., ``list(range(3))`` returns the list ``[0, 1, 2]``." +msgstr "" +"目标列表中的名称在循环结束时不会被删除,但如果序列为空,则它们根本不会被循环所赋值。 提示:内置函数 :func:`range` " +"会返回一个可迭代的整数序列,适用于模拟 Pascal 中的 ``for i := a to b do`` 这种效果;例如 " +"``list(range(3))`` 会返回列表 ``[0, 1, 2]``。" + +#: ../../reference/compound_stmts.rst:204 +msgid "" +"There is a subtlety when the sequence is being modified by the loop (this " +"can only occur for mutable sequences, e.g. lists). An internal counter is " +"used to keep track of which item is used next, and this is incremented on " +"each iteration. When this counter has reached the length of the sequence " +"the loop terminates. This means that if the suite deletes the current (or a" +" previous) item from the sequence, the next item will be skipped (since it " +"gets the index of the current item which has already been treated). " +"Likewise, if the suite inserts an item in the sequence before the current " +"item, the current item will be treated again the next time through the loop." +" This can lead to nasty bugs that can be avoided by making a temporary copy " +"using a slice of the whole sequence, e.g., ::" +msgstr "" +"当序列在循环中被修改时会有一个微妙的问题(这只可能发生于可变序列例如列表中)。 会有一个内部计数器被用来跟踪下一个要使用的项,每次迭代都会使计数器递增。" +" 当计数器值达到序列长度时循环就会终止。 " +"这意味着如果语句体从序列中删除了当前(或之前)的一项,下一项就会被跳过(因为其标号将变成已被处理的当前项的标号)。 " +"类似地,如果语句体在序列当前项的前面插入一个新项,当前项会在循环的下一轮中再次被处理。 " +"这会导致麻烦的程序错误,避免此问题的办法是对整个序列使用切片来创建一个临时副本,例如 ::" + +#: ../../reference/compound_stmts.rst:225 +msgid "The :keyword:`!try` statement" +msgstr ":keyword:`!try` 语句" + +#: ../../reference/compound_stmts.rst:235 +msgid "" +"The :keyword:`try` statement specifies exception handlers and/or cleanup " +"code for a group of statements:" +msgstr ":keyword:`try` 语句可为一组语句指定异常处理器和/或清理代码:" + +#: ../../reference/compound_stmts.rst:248 +msgid "" +"The :keyword:`except` clause(s) specify one or more exception handlers. When" +" no exception occurs in the :keyword:`try` clause, no exception handler is " +"executed. When an exception occurs in the :keyword:`!try` suite, a search " +"for an exception handler is started. This search inspects the except " +"clauses in turn until one is found that matches the exception. An " +"expression-less except clause, if present, must be last; it matches any " +"exception. For an except clause with an expression, that expression is " +"evaluated, and the clause matches the exception if the resulting object is " +"\"compatible\" with the exception. An object is compatible with an " +"exception if the object is the class or a :term:`non-virtual base class " +"` of the exception object, or a tuple containing an " +"item that is the class or a non-virtual base class of the exception object." +msgstr "" +":keyword:`except` 子句指定一个或多个异常处理程序。 当 :keyword:`try` " +"子句中无异常发生时,也不会有任何异常处理程序被执行。 当 :keyword:`!try` 子句中发生异常时,将启动对异常处理程序的搜索。 " +"此搜索会逐一检查 except 子句直至找到与该异常相匹配的子句。 如果存在无表达式的 except 子句,它必须是最后一个;它将匹配任何异常。 " +"对于带有表达式的 except 子句,该表达式会被未付,如果结果对象与发生的异常“兼容”,则该子句将匹配当前异常。 如果一个对象是异常对象所属的类或是其" +" :term:`非虚基类 `,或者是包含异常对象的类的非虚基类的元组,则此对象与异常是兼容的。" + +#: ../../reference/compound_stmts.rst:261 +msgid "" +"If no except clause matches the exception, the search for an exception " +"handler continues in the surrounding code and on the invocation stack. [#]_" +msgstr "如果没有 except 子句与异常相匹配,则会在周边代码和发起调用栈上继续搜索异常处理器。 [#]_" + +#: ../../reference/compound_stmts.rst:264 +msgid "" +"If the evaluation of an expression in the header of an except clause raises " +"an exception, the original search for a handler is canceled and a search " +"starts for the new exception in the surrounding code and on the call stack " +"(it is treated as if the entire :keyword:`try` statement raised the " +"exception)." +msgstr "" +"如果在对 except 子句头中的表达式求值时引发了异常,则原来对处理器的搜索会被取消,并在周边代码和调用栈上启动对新异常的搜索(它会被视作是整个 " +":keyword:`try` 语句所引发的异常)。" + +#: ../../reference/compound_stmts.rst:271 +msgid "" +"When a matching except clause is found, the exception is assigned to the " +"target specified after the :keyword:`!as` keyword in that except clause, if " +"present, and the except clause's suite is executed. All except clauses must" +" have an executable block. When the end of this block is reached, execution" +" continues normally after the entire try statement. (This means that if two" +" nested handlers exist for the same exception, and the exception occurs in " +"the try clause of the inner handler, the outer handler will not handle the " +"exception.)" +msgstr "" +"当找到一个匹配的 except 子句时,该异常将被赋值给该 except 子句在 :keyword:`!as` " +"关键字之后指定的目标,如果存在此关键字的话,并且该 except 子句体将被执行。 所有 except 子句都必须有可执行的子句体。 " +"当到达子句体的末尾时,通常会转向整个 try 语句之后继续执行。 (这意味着如果对于同一异常存在有嵌套的两个处理器,而异常发生于内层处理器的 try " +"子句中,则外层处理器将不会处理该异常。)" + +#: ../../reference/compound_stmts.rst:279 +msgid "" +"When an exception has been assigned using ``as target``, it is cleared at " +"the end of the except clause. This is as if ::" +msgstr "当使用 ``as`` 将目标赋值为一个异常时,它将在 except 子句结束时被清除。 这就相当于 ::" + +#: ../../reference/compound_stmts.rst:285 +msgid "was translated to ::" +msgstr "被转写为 ::" + +#: ../../reference/compound_stmts.rst:293 +msgid "" +"This means the exception must be assigned to a different name to be able to " +"refer to it after the except clause. Exceptions are cleared because with " +"the traceback attached to them, they form a reference cycle with the stack " +"frame, keeping all locals in that frame alive until the next garbage " +"collection occurs." +msgstr "" +"这意味着异常必须赋值给一个不同的名称才能在 except 子句之后引用它。 " +"异常会被清除是因为在附加了回溯信息的情况下,它们会形成堆栈帧的循环引用,使得所有局部变量保持存活直到发生下一次垃圾回收。" + +#: ../../reference/compound_stmts.rst:302 +msgid "" +"Before an except clause's suite is executed, details about the exception are" +" stored in the :mod:`sys` module and can be accessed via " +":func:`sys.exc_info`. :func:`sys.exc_info` returns a 3-tuple consisting of " +"the exception class, the exception instance and a traceback object (see " +"section :ref:`types`) identifying the point in the program where the " +"exception occurred. :func:`sys.exc_info` values are restored to their " +"previous values (before the call) when returning from a function that " +"handled an exception." +msgstr "" +"在一个 except 子句体被执行之前,有关异常的详细信息存放在 :mod:`sys` 模块中,可通过 :func:`sys.exc_info` " +"来访问。 :func:`sys.exc_info` 返回一个 3 元组,由异常类、异常实例和回溯对象组成(参见 :ref:`types` " +"一节),用于在程序中标识异常发生点。 当从处理异常的函数返回时 :func:`sys.exc_info` 的值会恢复为(调用前的)原值。" + +#: ../../reference/compound_stmts.rst:316 +msgid "" +"The optional :keyword:`!else` clause is executed if the control flow leaves " +"the :keyword:`try` suite, no exception was raised, and no :keyword:`return`," +" :keyword:`continue`, or :keyword:`break` statement was executed. " +"Exceptions in the :keyword:`!else` clause are not handled by the preceding " +":keyword:`except` clauses." +msgstr "" +"如果控制流离开 :keyword:`try` 子句体时没有引发异常,并且没有执行 :keyword:`return`, " +":keyword:`continue` 或 :keyword:`break` 语句,可选的 :keyword:`!else` 子句将被执行。 " +":keyword:`!else` 语句中的异常不会由之前的 :keyword:`except` 子句处理。" + +#: ../../reference/compound_stmts.rst:324 +msgid "" +"If :keyword:`finally` is present, it specifies a 'cleanup' handler. The " +":keyword:`try` clause is executed, including any :keyword:`except` and " +":keyword:`!else` clauses. If an exception occurs in any of the clauses and " +"is not handled, the exception is temporarily saved. The :keyword:`!finally` " +"clause is executed. If there is a saved exception it is re-raised at the " +"end of the :keyword:`!finally` clause. If the :keyword:`!finally` clause " +"raises another exception, the saved exception is set as the context of the " +"new exception. If the :keyword:`!finally` clause executes a " +":keyword:`return`, :keyword:`break` or :keyword:`continue` statement, the " +"saved exception is discarded::" +msgstr "" +"如果存在 :keyword:`finally`,它将指定一个‘清理’处理程序。 :keyword:`try` 子句会被执行,包括任何 " +":keyword:`except` 和 :keyword:`!else` 子句。 如果在这些子句中发生任何未处理的异常,该异常会被临时保存。 " +":keyword:`!finally` 子句将被执行。 如果存在被保存的异常,它会在 :keyword:`!finally` 子句的末尾被重新引发。 " +"如果 :keyword:`!finally` 子句引发了另一个异常,被保存的异常会被设为新异常的上下文。 如果 :keyword:`!finally` " +"子句执行了 :keyword:`return`, :keyword:`break` 或 :keyword:`continue` " +"语句,则被保存的异常会被丢弃::" + +#: ../../reference/compound_stmts.rst:343 +msgid "" +"The exception information is not available to the program during execution " +"of the :keyword:`finally` clause." +msgstr "在 :keyword:`finally` 子句执行期间,程序不能获取异常信息。" + +#: ../../reference/compound_stmts.rst:351 +msgid "" +"When a :keyword:`return`, :keyword:`break` or :keyword:`continue` statement " +"is executed in the :keyword:`try` suite of a :keyword:`!try`...\\ " +":keyword:`!finally` statement, the :keyword:`finally` clause is also " +"executed 'on the way out.'" +msgstr "" +"当 :keyword:`return`, :keyword:`break` 或 :keyword:`continue` 语句在一个 " +":keyword:`!try`...\\ :keyword:`!finally` 语句的 :keyword:`try` " +"子语句体中被执行时,:keyword:`finally` 子语句也会‘在离开时’被执行。" + +#: ../../reference/compound_stmts.rst:355 +msgid "" +"The return value of a function is determined by the last :keyword:`return` " +"statement executed. Since the :keyword:`finally` clause always executes, a " +":keyword:`!return` statement executed in the :keyword:`!finally` clause will" +" always be the last one executed::" +msgstr "" +"函数的返回值是由最后被执行的 :keyword:`return` 语句所决定的。 由于 :keyword:`finally` 子句总是被执行,因此在 " +":keyword:`!finally` 子句中被执行的 :keyword:`!return` 语句总是最后被执行的::" + +#: ../../reference/compound_stmts.rst:369 +msgid "" +"Additional information on exceptions can be found in section " +":ref:`exceptions`, and information on using the :keyword:`raise` statement " +"to generate exceptions may be found in section :ref:`raise`." +msgstr "" +"有关异常的更多信息可以在 :ref:`exceptions` 一节找到,有关使用 :keyword:`raise` 语句生成异常的信息可以在 " +":ref:`raise` 一节找到。" + +#: ../../reference/compound_stmts.rst:373 +msgid "" +"Prior to Python 3.8, a :keyword:`continue` statement was illegal in the " +":keyword:`finally` clause due to a problem with the implementation." +msgstr "" +"在 Python 3.8 之前,:keyword:`continue` 语句不允许在 :keyword:`finally` " +"子句中使用,这是因为具体实现存在一个问题。" + +#: ../../reference/compound_stmts.rst:382 +msgid "The :keyword:`!with` statement" +msgstr ":keyword:`!with` 语句" + +#: ../../reference/compound_stmts.rst:391 +msgid "" +"The :keyword:`with` statement is used to wrap the execution of a block with " +"methods defined by a context manager (see section :ref:`context-managers`). " +"This allows common :keyword:`try`...\\ :keyword:`except`...\\ " +":keyword:`finally` usage patterns to be encapsulated for convenient reuse." +msgstr "" +":keyword:`with` 语句用于包装带有使用上下文管理器 (参见 :ref:`context-managers` 一节) " +"定义的方法的代码块的执行。 这允许对普通的 :keyword:`try`...\\ :keyword:`except`...\\ " +":keyword:`finally` 使用模式进行封装以方便地重用。" + +#: ../../reference/compound_stmts.rst:400 +msgid "" +"The execution of the :keyword:`with` statement with one \"item\" proceeds as" +" follows:" +msgstr "带有一个“项目”的 :keyword:`with` 语句的执行过程如下:" + +#: ../../reference/compound_stmts.rst:402 +msgid "" +"The context expression (the expression given in the :token:`with_item`) is " +"evaluated to obtain a context manager." +msgstr "对上下文表达式 (在 :token:`with_item` 中给出的表达式) 求值以获得一个上下文管理器。" + +#: ../../reference/compound_stmts.rst:405 +msgid "The context manager's :meth:`__enter__` is loaded for later use." +msgstr "载入上下文管理器的 :meth:`__enter__` 以便后续使用。" + +#: ../../reference/compound_stmts.rst:407 +msgid "The context manager's :meth:`__exit__` is loaded for later use." +msgstr "载入上下文管理器的 :meth:`__exit__` 以便后续使用。" + +#: ../../reference/compound_stmts.rst:409 +msgid "The context manager's :meth:`__enter__` method is invoked." +msgstr "发起调用上下文管理器的 :meth:`__enter__` 方法。" + +#: ../../reference/compound_stmts.rst:411 +msgid "" +"If a target was included in the :keyword:`with` statement, the return value " +"from :meth:`__enter__` is assigned to it." +msgstr "如果 :keyword:`with` 语句中包含一个目标,来自 :meth:`__enter__` 的返回值将被赋值给它。" + +#: ../../reference/compound_stmts.rst:416 +msgid "" +"The :keyword:`with` statement guarantees that if the :meth:`__enter__` " +"method returns without an error, then :meth:`__exit__` will always be " +"called. Thus, if an error occurs during the assignment to the target list, " +"it will be treated the same as an error occurring within the suite would be." +" See step 6 below." +msgstr "" +":keyword:`with` 语句会保证如果 :meth:`__enter__` 方法返回时未发生错误,则 :meth:`__exit__` " +"将总是被调用。 因此,如果在对目标列表赋值期间发生错误,则会将其视为在语句体内部发生的错误。 参见下面的第 6 步。" + +#: ../../reference/compound_stmts.rst:422 +msgid "The suite is executed." +msgstr "执行语句体。" + +#: ../../reference/compound_stmts.rst:424 +msgid "" +"The context manager's :meth:`__exit__` method is invoked. If an exception " +"caused the suite to be exited, its type, value, and traceback are passed as " +"arguments to :meth:`__exit__`. Otherwise, three :const:`None` arguments are " +"supplied." +msgstr "" +"发起调用上下文管理器的 :meth:`__exit__` 方法。 如果语句体的退出是由异常导致的,则其类型、值和回溯信息将被作为参数传递给 " +":meth:`__exit__`。 否则的话,将提供三个 :const:`None` 参数。" + +#: ../../reference/compound_stmts.rst:429 +msgid "" +"If the suite was exited due to an exception, and the return value from the " +":meth:`__exit__` method was false, the exception is reraised. If the return" +" value was true, the exception is suppressed, and execution continues with " +"the statement following the :keyword:`with` statement." +msgstr "" +"如果语句体的退出是由异常导致的,并且来自 :meth:`__exit__` 方法的返回值为假,则该异常会被重新引发。 " +"如果返回值为真,则该异常会被抑制,并会继续执行 :keyword:`with` 语句之后的语句。" + +#: ../../reference/compound_stmts.rst:434 +msgid "" +"If the suite was exited for any reason other than an exception, the return " +"value from :meth:`__exit__` is ignored, and execution proceeds at the normal" +" location for the kind of exit that was taken." +msgstr "如果语句体由于异常以外的任何原因退出,则来自 :meth:`__exit__` 的返回值会被忽略,并会在该类退出正常的发生位置继续执行。" + +#: ../../reference/compound_stmts.rst:438 +#: ../../reference/compound_stmts.rst:815 +#: ../../reference/compound_stmts.rst:856 +msgid "The following code::" +msgstr "以下代码::" + +#: ../../reference/compound_stmts.rst:443 +#: ../../reference/compound_stmts.rst:468 +#: ../../reference/compound_stmts.rst:861 +msgid "is semantically equivalent to::" +msgstr "在语义上等价于::" + +#: ../../reference/compound_stmts.rst:462 +msgid "" +"With more than one item, the context managers are processed as if multiple " +":keyword:`with` statements were nested::" +msgstr "如果有多个项目,则会视作存在多个 :keyword:`with` 语句嵌套来处理多个上下文管理器::" + +#: ../../reference/compound_stmts.rst:474 +msgid "Support for multiple context expressions." +msgstr "支持多个上下文表达式。" + +#: ../../reference/compound_stmts.rst:480 +msgid ":pep:`343` - The \"with\" statement" +msgstr ":pep:`343` - \"with\" 语句" + +#: ../../reference/compound_stmts.rst:480 +msgid "" +"The specification, background, and examples for the Python :keyword:`with` " +"statement." +msgstr "Python :keyword:`with` 语句的规范描述、背景和示例。" + +#: ../../reference/compound_stmts.rst:490 +msgid "Function definitions" +msgstr "函数定义" + +#: ../../reference/compound_stmts.rst:505 +msgid "" +"A function definition defines a user-defined function object (see section " +":ref:`types`):" +msgstr "函数定义就是对用户自定义函数的定义(参见 :ref:`types` 一节):" + +#: ../../reference/compound_stmts.rst:524 +msgid "" +"A function definition is an executable statement. Its execution binds the " +"function name in the current local namespace to a function object (a wrapper" +" around the executable code for the function). This function object " +"contains a reference to the current global namespace as the global namespace" +" to be used when the function is called." +msgstr "" +"函数定义是一条可执行语句。 它执行时会在当前局部命名空间中将函数名称绑定到一个函数对象(函数可执行代码的包装器)。 " +"这个函数对象包含对当前全局命名空间的引用,作为函数被调用时所使用的全局命名空间。" + +#: ../../reference/compound_stmts.rst:530 +msgid "" +"The function definition does not execute the function body; this gets " +"executed only when the function is called. [#]_" +msgstr "函数定义并不会执行函数体;只有当函数被调用时才会执行此操作。 [#]_" + +#: ../../reference/compound_stmts.rst:536 +msgid "" +"A function definition may be wrapped by one or more :term:`decorator` " +"expressions. Decorator expressions are evaluated when the function is " +"defined, in the scope that contains the function definition. The result " +"must be a callable, which is invoked with the function object as the only " +"argument. The returned value is bound to the function name instead of the " +"function object. Multiple decorators are applied in nested fashion. For " +"example, the following code ::" +msgstr "" +"一个函数定义可以被一个或多个 :term:`decorator` 表达式所包装。 当函数被定义时将在包含该函数定义的作用域中对装饰器表达式求值。 " +"求值结果必须是一个可调用对象,它会以该函数对象作为唯一参数被唤起。 其返回值将被绑定到函数名称而非函数对象。 多个装饰器会以嵌套方式被应用。 " +"例如以下代码 ::" + +#: ../../reference/compound_stmts.rst:547 +#: ../../reference/compound_stmts.rst:724 +msgid "is roughly equivalent to ::" +msgstr "大致等价于 ::" + +#: ../../reference/compound_stmts.rst:552 +msgid "" +"except that the original function is not temporarily bound to the name " +"``func``." +msgstr "不同之处在于原始函数并不会被临时绑定到名称 ``func``。" + +#: ../../reference/compound_stmts.rst:554 +msgid "" +"Functions may be decorated with any valid :token:`assignment_expression`. " +"Previously, the grammar was much more restrictive; see :pep:`614` for " +"details." +msgstr "" +"函数可使用任何有效的 :token:`assignment_expression` 来装饰。 在之前版本中,此语法则更为受限,详情参见 " +":pep:`614`。" + +#: ../../reference/compound_stmts.rst:564 +msgid "" +"When one or more :term:`parameters ` have the form *parameter* " +"``=`` *expression*, the function is said to have \"default parameter " +"values.\" For a parameter with a default value, the corresponding " +":term:`argument` may be omitted from a call, in which case the parameter's " +"default value is substituted. If a parameter has a default value, all " +"following parameters up until the \"``*``\" must also have a default value " +"--- this is a syntactic restriction that is not expressed by the grammar." +msgstr "" +"当一个或多个 :term:`形参 ` 具有 *形参* ``=`` *表达式* 这样的形式时,该函数就被称为具有“默认形参值”。 " +"对于一个具有默认值的形参,其对应的 :term:`argument` 可以在调用中被省略,在此情况下会用形参的默认值来替代。 " +"如果一个形参具有默认值,后续所有在 \"``*``\" 之前的形参也必须具有默认值 --- 这个句法限制并未在语法中明确表达。" + +#: ../../reference/compound_stmts.rst:572 +msgid "" +"**Default parameter values are evaluated from left to right when the " +"function definition is executed.** This means that the expression is " +"evaluated once, when the function is defined, and that the same \"pre-" +"computed\" value is used for each call. This is especially important to " +"understand when a default parameter is a mutable object, such as a list or a" +" dictionary: if the function modifies the object (e.g. by appending an item " +"to a list), the default value is in effect modified. This is generally not " +"what was intended. A way around this is to use ``None`` as the default, and" +" explicitly test for it in the body of the function, e.g.::" +msgstr "" +"**默认形参值会在执行函数定义时按从左至右的顺序被求值。** 这意味着当函数被定义时将对表达式求值一次,相同的“预计算”值将在每次调用时被使用。 " +"这一点在默认形参为可变对象,例如列表或字典的时候尤其需要重点理解:如果函数修改了该对象(例如向列表添加了一项),则实际上默认值也会被修改。 " +"这通常不是人们所预期的。 绕过此问题的一个方法是使用 ``None`` 作为默认值,并在函数体中显式地对其进行测试,例如::" + +#: ../../reference/compound_stmts.rst:593 +msgid "" +"Function call semantics are described in more detail in section " +":ref:`calls`. A function call always assigns values to all parameters " +"mentioned in the parameter list, either from positional arguments, from " +"keyword arguments, or from default values. If the form \"``*identifier``\" " +"is present, it is initialized to a tuple receiving any excess positional " +"parameters, defaulting to the empty tuple. If the form \"``**identifier``\" " +"is present, it is initialized to a new ordered mapping receiving any excess " +"keyword arguments, defaulting to a new empty mapping of the same type. " +"Parameters after \"``*``\" or \"``*identifier``\" are keyword-only " +"parameters and may only be passed by keyword arguments. Parameters before " +"\"``/``\" are positional-only parameters and may only be passed by " +"positional arguments." +msgstr "" +"函数调用的语义在 :ref:`calls` 一节中有更详细的描述。 " +"函数调用总是会给形参列表中列出的所有形参赋值,或是用位置参数,或是用关键字参数,或是用默认值。 如果存在 \"``*identifier``\" " +"这样的形式,它会被初始化为一个元组来接收任何额外的位置参数,默认为一个空元组。 如果存在 \"``**identifier``\" " +"这样的形式,它会被初始化为一个新的有序映射来接收任何额外的关键字参数,默认为一个相同类型的空映射。 在 \"``*``\" 或 " +"\"``*identifier``\" 之后的形参都是仅限关键字形参因而只能通过关键字参数传入。 在 \"``/``\" " +"之前的形参都是仅限位置形参因而只能通过位置参数传入。" + +#: ../../reference/compound_stmts.rst:605 +msgid "" +"The ``/`` function parameter syntax may be used to indicate positional-only " +"parameters. See :pep:`570` for details." +msgstr "可以使用 ``/`` 函数形参语法来标示仅限位置形参。 请参阅 :pep:`570` 了解详情。" + +#: ../../reference/compound_stmts.rst:614 +msgid "" +"Parameters may have an :term:`annotation ` of the form " +"\"``: expression``\" following the parameter name. Any parameter may have " +"an annotation, even those of the form ``*identifier`` or ``**identifier``. " +"Functions may have \"return\" annotation of the form \"``-> expression``\" " +"after the parameter list. These annotations can be any valid Python " +"expression. The presence of annotations does not change the semantics of a " +"function. The annotation values are available as values of a dictionary " +"keyed by the parameters' names in the :attr:`__annotations__` attribute of " +"the function object. If the ``annotations`` import from :mod:`__future__` " +"is used, annotations are preserved as strings at runtime which enables " +"postponed evaluation. Otherwise, they are evaluated when the function " +"definition is executed. In this case annotations may be evaluated in a " +"different order than they appear in the source code." +msgstr "" +"形参可以带有 :term:`标注 `,其形式为在形参名称后加上 \"``: expression``\"。 " +"任何形参都可以带有标注,甚至 ``*identifier`` 或 ``**identifier`` 这样的形参也可以。 " +"函数可以带有“返回”标注,其形式为在形参列表后加上 \"``-> expression``\"。 这些标注可以是任何有效的 Python 表达式。 " +"标注的存在不会改变函数的语义。 标注值可以作为函数对象的 :attr:`__annotations__` 属性中以对应形参名称为键的字典值被访问。 " +"如果使用了 ``annotations`` import from :mod:`__future__` " +"的方式,则标注会在运行时保存为字符串以启用延迟求值特性。 否则,它们会在执行函数定义时被求值。 " +"在这种情况下,标注的求值顺序可能与它们在源代码中出现的顺序不同。" + +#: ../../reference/compound_stmts.rst:629 +msgid "" +"It is also possible to create anonymous functions (functions not bound to a " +"name), for immediate use in expressions. This uses lambda expressions, " +"described in section :ref:`lambda`. Note that the lambda expression is " +"merely a shorthand for a simplified function definition; a function defined " +"in a \":keyword:`def`\" statement can be passed around or assigned to " +"another name just like a function defined by a lambda expression. The " +"\":keyword:`!def`\" form is actually more powerful since it allows the " +"execution of multiple statements and annotations." +msgstr "" +"创建匿名函数(未绑定到一个名称的函数)以便立即在表达式中使用也是可能的。 这需要使用 lambda 表达式,具体描述见 :ref:`lambda` " +"一节。 请注意 lambda 只是简单函数定义的一种简化写法;在 \":keyword:`def`\" 语句中定义的函数也可以像用 lambda " +"表达式定义的函数一样被传递或赋值给其他名称。 \":keyword:`!def`\" 形式实际上更为强大,因为它允许执行多条语句和使用标注。" + +#: ../../reference/compound_stmts.rst:637 +msgid "" +"**Programmer's note:** Functions are first-class objects. A \"``def``\" " +"statement executed inside a function definition defines a local function " +"that can be returned or passed around. Free variables used in the nested " +"function can access the local variables of the function containing the def." +" See section :ref:`naming` for details." +msgstr "" +"**程序员注意事项:** 函数属于一类对象。 在一个函数内部执行的 \"``def``\" 语句会定义一个局部函数并可被返回或传递。 " +"在嵌套函数中使用的自由变量可以访问包含该 def 语句的函数的局部变量。 详情参见 :ref:`naming` 一节。" + +#: ../../reference/compound_stmts.rst:646 +msgid ":pep:`3107` - Function Annotations" +msgstr ":pep:`3107` - 函数标注" + +#: ../../reference/compound_stmts.rst:646 +msgid "The original specification for function annotations." +msgstr "最初的函数标注规范说明。" + +#: ../../reference/compound_stmts.rst:649 +msgid ":pep:`484` - Type Hints" +msgstr ":pep:`484` —— 类型注解" + +#: ../../reference/compound_stmts.rst:649 +msgid "Definition of a standard meaning for annotations: type hints." +msgstr "标注的标准含意定义:类型提示。" + +#: ../../reference/compound_stmts.rst:653 +msgid ":pep:`526` - Syntax for Variable Annotations" +msgstr ":pep:`526` - 变量标注的语法" + +#: ../../reference/compound_stmts.rst:652 +msgid "" +"Ability to type hint variable declarations, including class variables and " +"instance variables" +msgstr "变量声明的类型提示功能,包括类变量和实例变量" + +#: ../../reference/compound_stmts.rst:656 +msgid ":pep:`563` - Postponed Evaluation of Annotations" +msgstr ":pep:`563` - 延迟的标注求值" + +#: ../../reference/compound_stmts.rst:656 +msgid "" +"Support for forward references within annotations by preserving annotations " +"in a string form at runtime instead of eager evaluation." +msgstr "支持在运行时通过以字符串形式保存标注而非不是即求值来实现标注内部的向前引用。" + +#: ../../reference/compound_stmts.rst:663 +msgid "Class definitions" +msgstr "类定义" + +#: ../../reference/compound_stmts.rst:678 +msgid "A class definition defines a class object (see section :ref:`types`):" +msgstr "类定义就是对类对象的定义 (参见 :ref:`types` 一节):" + +#: ../../reference/compound_stmts.rst:685 +msgid "" +"A class definition is an executable statement. The inheritance list usually" +" gives a list of base classes (see :ref:`metaclasses` for more advanced " +"uses), so each item in the list should evaluate to a class object which " +"allows subclassing. Classes without an inheritance list inherit, by " +"default, from the base class :class:`object`; hence, ::" +msgstr "" +"类定义是一条可执行语句。 其中继承列表通常给出基类的列表 (进阶用法请参见 " +":ref:`metaclasses`),列表中的每一项都应当被求值为一个允许子类的类对象。 没有继承列表的类默认继承自基类 " +":class:`object`;因此,::" + +#: ../../reference/compound_stmts.rst:694 +msgid "is equivalent to ::" +msgstr "等价于 ::" + +#: ../../reference/compound_stmts.rst:699 +msgid "" +"The class's suite is then executed in a new execution frame (see " +":ref:`naming`), using a newly created local namespace and the original " +"global namespace. (Usually, the suite contains mostly function definitions.)" +" When the class's suite finishes execution, its execution frame is " +"discarded but its local namespace is saved. [#]_ A class object is then " +"created using the inheritance list for the base classes and the saved local " +"namespace for the attribute dictionary. The class name is bound to this " +"class object in the original local namespace." +msgstr "" +"随后类体将在一个新的执行帧 (参见 :ref:`naming`) 中被执行,使用新创建的局部命名空间和原有的全局命名空间。 " +"(通常,类体主要包含函数定义。) 当类体结束执行时,其执行帧将被丢弃而其局部命名空间会被保存。 [#]_ " +"一个类对象随后会被创建,其基类使用给定的继承列表,属性字典使用保存的局部命名空间。 类名称将在原有的全局命名空间中绑定到该类对象。" + +#: ../../reference/compound_stmts.rst:708 +msgid "" +"The order in which attributes are defined in the class body is preserved in " +"the new class's ``__dict__``. Note that this is reliable only right after " +"the class is created and only for classes that were defined using the " +"definition syntax." +msgstr "" +"在类体内定义的属性的顺序保存在新类的 ``__dict__`` 中。 请注意此顺序的可靠性只限于类刚被创建时,并且只适用于使用定义语法所定义的类。" + +#: ../../reference/compound_stmts.rst:713 +msgid "" +"Class creation can be customized heavily using :ref:`metaclasses " +"`." +msgstr "类的创建可使用 :ref:`元类 ` 进行重度定制。" + +#: ../../reference/compound_stmts.rst:718 +msgid "Classes can also be decorated: just like when decorating functions, ::" +msgstr "类也可以被装饰:就像装饰函数一样,::" + +#: ../../reference/compound_stmts.rst:729 +msgid "" +"The evaluation rules for the decorator expressions are the same as for " +"function decorators. The result is then bound to the class name." +msgstr "装饰器表达式的求值规则与函数装饰器相同。 结果随后会被绑定到类名称。" + +#: ../../reference/compound_stmts.rst:732 +msgid "" +"Classes may be decorated with any valid :token:`assignment_expression`. " +"Previously, the grammar was much more restrictive; see :pep:`614` for " +"details." +msgstr "" +"类可使用任何有效的 :token:`assignment_expression` 来装饰。 在之前版本中,此语法则更为受限,详情参见 " +":pep:`614`。" + +#: ../../reference/compound_stmts.rst:737 +msgid "" +"**Programmer's note:** Variables defined in the class definition are class " +"attributes; they are shared by instances. Instance attributes can be set in" +" a method with ``self.name = value``. Both class and instance attributes " +"are accessible through the notation \"``self.name``\", and an instance " +"attribute hides a class attribute with the same name when accessed in this " +"way. Class attributes can be used as defaults for instance attributes, but " +"using mutable values there can lead to unexpected results. " +":ref:`Descriptors ` can be used to create instance variables " +"with different implementation details." +msgstr "" +"**程序员注意事项:** 在类定义内定义的变量是类属性;它们将被类实例所共享。 实例属性可通过 ``self.name = value`` " +"在方法中设定。 类和实例属性均可通过 \"``self.name``\" 表示法来访问,当通过此方式访问时实例属性会隐藏同名的类属性。 " +"类属性可被用作实例属性的默认值,但在此场景下使用可变值可能导致未预期的结果。 可以使用 :ref:`描述器 ` " +"来创建具有不同实现细节的实例变量。" + +#: ../../reference/compound_stmts.rst:752 +msgid ":pep:`3115` - Metaclasses in Python 3000" +msgstr ":pep:`3115` - Python 3000 中的元类" + +#: ../../reference/compound_stmts.rst:750 +msgid "" +"The proposal that changed the declaration of metaclasses to the current " +"syntax, and the semantics for how classes with metaclasses are constructed." +msgstr "将元类声明修改为当前语法的提议,以及关于如何构建带有元类的类的语义描述。" + +#: ../../reference/compound_stmts.rst:755 +msgid ":pep:`3129` - Class Decorators" +msgstr ":pep:`3129` - 类装饰器" + +#: ../../reference/compound_stmts.rst:755 +msgid "" +"The proposal that added class decorators. Function and method decorators " +"were introduced in :pep:`318`." +msgstr "增加类装饰器的提议。 函数和方法装饰器是在 :pep:`318` 中被引入的。" + +#: ../../reference/compound_stmts.rst:762 +msgid "Coroutines" +msgstr "协程" + +#: ../../reference/compound_stmts.rst:770 +msgid "Coroutine function definition" +msgstr "协程函数定义" + +#: ../../reference/compound_stmts.rst:780 +msgid "" +"Execution of Python coroutines can be suspended and resumed at many points " +"(see :term:`coroutine`). Inside the body of a coroutine function, ``await``" +" and ``async`` identifiers become reserved keywords; :keyword:`await` " +"expressions, :keyword:`async for` and :keyword:`async with` can only be used" +" in coroutine function bodies." +msgstr "" +"Python 协程可以在多个位置上挂起和恢复执行 (参见 :term:`coroutine`)。 在协程函数体内部,``await`` 和 " +"``async`` 标识符已成为保留关键字;:keyword:`await` 表达式,:keyword:`async for` 以及 " +":keyword:`async with` 只能在协程函数体中使用。" + +#: ../../reference/compound_stmts.rst:786 +msgid "" +"Functions defined with ``async def`` syntax are always coroutine functions, " +"even if they do not contain ``await`` or ``async`` keywords." +msgstr "使用 ``async def`` 语法定义的函数总是为协程函数,即使它们不包含 ``await`` 或 ``async`` 关键字。" + +#: ../../reference/compound_stmts.rst:789 +msgid "" +"It is a :exc:`SyntaxError` to use a ``yield from`` expression inside the " +"body of a coroutine function." +msgstr "在协程函数体中使用 ``yield from`` 表达式将引发 :exc:`SyntaxError`。" + +#: ../../reference/compound_stmts.rst:792 +msgid "An example of a coroutine function::" +msgstr "协程函数的例子::" + +#: ../../reference/compound_stmts.rst:803 +msgid "The :keyword:`!async for` statement" +msgstr ":keyword:`!async for` 语句" + +#: ../../reference/compound_stmts.rst:808 +msgid "" +"An :term:`asynchronous iterable` provides an ``__aiter__`` method that " +"directly returns an :term:`asynchronous iterator`, which can call " +"asynchronous code in its ``__anext__`` method." +msgstr "" +":term:`asynchronous iterable` 提供了 ``__aiter__`` 方法,该方法会直接返回 " +":term:`asynchronous iterator`,它可以在其 ``__anext__`` 方法中调用异步代码。" + +#: ../../reference/compound_stmts.rst:812 +msgid "" +"The ``async for`` statement allows convenient iteration over asynchronous " +"iterables." +msgstr "``async for`` 语句允许方便地对异步可迭代对象进行迭代。" + +#: ../../reference/compound_stmts.rst:822 +msgid "Is semantically equivalent to::" +msgstr "在语义上等价于::" + +#: ../../reference/compound_stmts.rst:838 +msgid "See also :meth:`__aiter__` and :meth:`__anext__` for details." +msgstr "另请参阅 :meth:`__aiter__` 和 :meth:`__anext__` 了解详情。" + +#: ../../reference/compound_stmts.rst:840 +msgid "" +"It is a :exc:`SyntaxError` to use an ``async for`` statement outside the " +"body of a coroutine function." +msgstr "在协程函数体之外使用 ``async for`` 语句将引发 :exc:`SyntaxError`。" + +#: ../../reference/compound_stmts.rst:848 +msgid "The :keyword:`!async with` statement" +msgstr ":keyword:`!async with` 语句" + +#: ../../reference/compound_stmts.rst:853 +msgid "" +"An :term:`asynchronous context manager` is a :term:`context manager` that is" +" able to suspend execution in its *enter* and *exit* methods." +msgstr "" +":term:`asynchronous context manager` 是一种 :term:`context manager`,能够在其 " +"*enter* 和 *exit* 方法中暂停执行。" + +#: ../../reference/compound_stmts.rst:880 +msgid "See also :meth:`__aenter__` and :meth:`__aexit__` for details." +msgstr "另请参阅 :meth:`__aenter__` 和 :meth:`__aexit__` 了解详情。" + +#: ../../reference/compound_stmts.rst:882 +msgid "" +"It is a :exc:`SyntaxError` to use an ``async with`` statement outside the " +"body of a coroutine function." +msgstr "在协程函数体之外使用 ``async with`` 语句将引发 :exc:`SyntaxError`。" + +#: ../../reference/compound_stmts.rst:888 +msgid ":pep:`492` - Coroutines with async and await syntax" +msgstr ":pep:`492` - 使用 async 和 await 语法实现协程" + +#: ../../reference/compound_stmts.rst:888 +msgid "" +"The proposal that made coroutines a proper standalone concept in Python, and" +" added supporting syntax." +msgstr "将协程作为 Python 中的一个正式的单独概念,并增加相应的支持语法。" + +#: ../../reference/compound_stmts.rst:893 +msgid "Footnotes" +msgstr "备注" + +#: ../../reference/compound_stmts.rst:894 +msgid "" +"The exception is propagated to the invocation stack unless there is a " +":keyword:`finally` clause which happens to raise another exception. That new" +" exception causes the old one to be lost." +msgstr "异常会被传播给唤起栈,除非存在一个 :keyword:`finally` 子句正好引发了另一个异常。 新引发的异常将导致旧异常的丢失。" + +#: ../../reference/compound_stmts.rst:898 +msgid "" +"A string literal appearing as the first statement in the function body is " +"transformed into the function's ``__doc__`` attribute and therefore the " +"function's :term:`docstring`." +msgstr "" +"作为函数体的第一条语句出现的字符串字面值会被转换为函数的 ``__doc__`` 属性,也就是该函数的 :term:`docstring`。" + +#: ../../reference/compound_stmts.rst:902 +msgid "" +"A string literal appearing as the first statement in the class body is " +"transformed into the namespace's ``__doc__`` item and therefore the class's " +":term:`docstring`." +msgstr "" +"作为类体的第一条语句出现的字符串字面值会被转换为命名空间的 ``__doc__`` 条目,也就是该类的 :term:`docstring`。" diff --git a/reference/datamodel.po b/reference/datamodel.po new file mode 100644 index 000000000..c4ea7262e --- /dev/null +++ b/reference/datamodel.po @@ -0,0 +1,4039 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) 2001-2025, Python Software Foundation +# This file is distributed under the same license as the Python package. +# FIRST AUTHOR , YEAR. +# +# Translators: +# cdarlint , 2018 +# xiao xu , 2018 +# Fred , 2018 +# eric R , 2018 +# ww song , 2018 +# Zombie110year , 2019 +# Konge , 2019 +# Shengjing Zhu , 2019 +# WH-2099 , 2022 +# CCXXXI , 2022 +# Freesand Leo , 2022 +# Rafael Fontenelle , 2025 +# +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: Python 3.9\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2025-02-07 16:40+0000\n" +"PO-Revision-Date: 2017-02-16 23:38+0000\n" +"Last-Translator: Rafael Fontenelle , 2025\n" +"Language-Team: Chinese (China) (https://app.transifex.com/python-doc/teams/5390/zh_CN/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: zh_CN\n" +"Plural-Forms: nplurals=1; plural=0;\n" + +#: ../../reference/datamodel.rst:6 +msgid "Data model" +msgstr "数据模型" + +#: ../../reference/datamodel.rst:12 +msgid "Objects, values and types" +msgstr "对象、值与类型" + +#: ../../reference/datamodel.rst:18 +msgid "" +":dfn:`Objects` are Python's abstraction for data. All data in a Python " +"program is represented by objects or by relations between objects. (In a " +"sense, and in conformance to Von Neumann's model of a \"stored program " +"computer\", code is also represented by objects.)" +msgstr "" +":dfn:`对象` 是 Python 中对数据的抽象。 Python 程序中的所有数据都是由对象或对象间关系来表示的。 " +"(从某种意义上说,按照冯·诺依曼的“存储程序计算机”模型,代码本身也是由对象来表示的。)" + +#: ../../reference/datamodel.rst:35 +msgid "" +"Every object has an identity, a type and a value. An object's *identity* " +"never changes once it has been created; you may think of it as the object's " +"address in memory. The ':keyword:`is`' operator compares the identity of " +"two objects; the :func:`id` function returns an integer representing its " +"identity." +msgstr "" +"每个对象都有各自的标识号、类型和值。一个对象被创建后,它的 *标识号* 就绝不会改变;你可以将其理解为该对象在内存中的地址。 " +"':keyword:`is`' 运算符可以比较两个对象的标识号是否相同;:func:`id` 函数能返回一个代表其标识号的整数。" + +#: ../../reference/datamodel.rst:42 +msgid "For CPython, ``id(x)`` is the memory address where ``x`` is stored." +msgstr "在 CPython 中,``id(x)`` 就是存放 ``x`` 的内存的地址。" + +#: ../../reference/datamodel.rst:44 +msgid "" +"An object's type determines the operations that the object supports (e.g., " +"\"does it have a length?\") and also defines the possible values for objects" +" of that type. The :func:`type` function returns an object's type (which is" +" an object itself). Like its identity, an object's :dfn:`type` is also " +"unchangeable. [#]_" +msgstr "" +"对象的类型决定该对象所支持的操作 (例如 \"对象是否有长度属性?\") 并且定义了该类型的对象可能的取值。:func:`type` " +"函数能返回一个对象的类型 (类型本身也是对象)。与编号一样,一个对象的 :dfn:`类型` 也是不可改变的。[#]_" + +#: ../../reference/datamodel.rst:50 +msgid "" +"The *value* of some objects can change. Objects whose value can change are " +"said to be *mutable*; objects whose value is unchangeable once they are " +"created are called *immutable*. (The value of an immutable container object " +"that contains a reference to a mutable object can change when the latter's " +"value is changed; however the container is still considered immutable, " +"because the collection of objects it contains cannot be changed. So, " +"immutability is not strictly the same as having an unchangeable value, it is" +" more subtle.) An object's mutability is determined by its type; for " +"instance, numbers, strings and tuples are immutable, while dictionaries and " +"lists are mutable." +msgstr "" +"有些对象的 *值* 可以改变。值可以改变的对象被称为 *可变对象*;值不可以改变的对象就被称为 " +"*不可变对象*。(一个不可变容器对象如果包含对可变对象的引用,当后者的值改变时,前者的值也会改变;但是该容器仍属于不可变对象,因为它所包含的对象集是不会改变的。因此,不可变并不严格等同于值不能改变,实际含义要更微妙。)" +" 一个对象的可变性是由其类型决定的;例如,数字、字符串和元组是不可变的,而字典和列表是可变的。" + +#: ../../reference/datamodel.rst:65 +msgid "" +"Objects are never explicitly destroyed; however, when they become " +"unreachable they may be garbage-collected. An implementation is allowed to " +"postpone garbage collection or omit it altogether --- it is a matter of " +"implementation quality how garbage collection is implemented, as long as no " +"objects are collected that are still reachable." +msgstr "" +"对象绝不会被显式地销毁;然而,当无法访问时它们可能会被作为垃圾回收。允许具体的实现推迟垃圾回收或完全省略此机制 --- " +"如何实现垃圾回收是实现的质量问题,只要可访问的对象不会被回收即可。" + +#: ../../reference/datamodel.rst:73 +msgid "" +"CPython currently uses a reference-counting scheme with (optional) delayed " +"detection of cyclically linked garbage, which collects most objects as soon " +"as they become unreachable, but is not guaranteed to collect garbage " +"containing circular references. See the documentation of the :mod:`gc` " +"module for information on controlling the collection of cyclic garbage. " +"Other implementations act differently and CPython may change. Do not depend " +"on immediate finalization of objects when they become unreachable (so you " +"should always close files explicitly)." +msgstr "" +"CPython 目前使用带有 (可选) " +"延迟检测循环链接垃圾的引用计数方案,会在对象不可访问时立即回收其中的大部分,但不保证回收包含循环引用的垃圾。请查看 :mod:`gc` " +"模块的文档了解如何控制循环垃圾的收集相关信息。其他实现会有不同的行为方式,CPython 现有方式也可能改变。不要依赖不可访问对象的立即终结机制 " +"(所以你应当总是显式地关闭文件)。" + +#: ../../reference/datamodel.rst:82 +msgid "" +"Note that the use of the implementation's tracing or debugging facilities " +"may keep objects alive that would normally be collectable. Also note that " +"catching an exception with a ':keyword:`try`...\\ :keyword:`except`' " +"statement may keep objects alive." +msgstr "" +"注意:使用实现的跟踪或调试功能可能令正常情况下会被回收的对象继续存活。还要注意通过 ':keyword:`try`...\\ " +":keyword:`except`' 语句捕捉异常也可能令对象保持存活。" + +#: ../../reference/datamodel.rst:87 +msgid "" +"Some objects contain references to \"external\" resources such as open files" +" or windows. It is understood that these resources are freed when the " +"object is garbage-collected, but since garbage collection is not guaranteed " +"to happen, such objects also provide an explicit way to release the external" +" resource, usually a :meth:`close` method. Programs are strongly recommended" +" to explicitly close such objects. The ':keyword:`try`...\\ " +":keyword:`finally`' statement and the ':keyword:`with`' statement provide " +"convenient ways to do this." +msgstr "" +"有些对象包含对 \"外部\" " +"资源的引用,例如打开文件或窗口。当对象被作为垃圾回收时这些资源也应该会被释放,但由于垃圾回收并不确保发生,这些对象还提供了明确地释放外部资源的操作,通常为一个" +" :meth:`close` 方法。强烈推荐在程序中显式关闭此类对象。':keyword:`try`...\\ :keyword:`finally`' " +"语句和 ':keyword:`with`' 语句提供了进行此种操作的更便捷方式。" + +#: ../../reference/datamodel.rst:97 +msgid "" +"Some objects contain references to other objects; these are called " +"*containers*. Examples of containers are tuples, lists and dictionaries. " +"The references are part of a container's value. In most cases, when we talk" +" about the value of a container, we imply the values, not the identities of " +"the contained objects; however, when we talk about the mutability of a " +"container, only the identities of the immediately contained objects are " +"implied. So, if an immutable container (like a tuple) contains a reference " +"to a mutable object, its value changes if that mutable object is changed." +msgstr "" +"有些对象包含对其他对象的引用;它们被称为 " +"*容器*。容器的例子有元组、列表和字典等。这些引用是容器对象值的组成部分。在多数情况下,当谈论一个容器的值时,我们是指所包含对象的值而不是其编号;但是,当我们谈论一个容器的可变性时,则仅指其直接包含的对象的编号。因此,如果一个不可变容器" +" (例如元组) 包含对一个可变对象的引用,则当该可变对象被改变时容器的值也会改变。" + +#: ../../reference/datamodel.rst:106 +msgid "" +"Types affect almost all aspects of object behavior. Even the importance of " +"object identity is affected in some sense: for immutable types, operations " +"that compute new values may actually return a reference to any existing " +"object with the same type and value, while for mutable objects this is not " +"allowed. E.g., after ``a = 1; b = 1``, ``a`` and ``b`` may or may not refer" +" to the same object with the value one, depending on the implementation, but" +" after ``c = []; d = []``, ``c`` and ``d`` are guaranteed to refer to two " +"different, unique, newly created empty lists. (Note that ``c = d = []`` " +"assigns the same object to both ``c`` and ``d``.)" +msgstr "" +"类型会影响对象行为的几乎所有方面。甚至对象标识号的重要性也在某种程度上受到影响:对于不可变类型,会得出新值的运算实际上可能返回类型和值相同的现有对象的引用,而对于可变类型来说这是不允许的。例如在" +" ``a = 1; b = 1`` 之后,``a`` 和 ``b`` 可能会指向同一个值为一的对象,也可能不会,这取决于具体实现,但是在 ``c = " +"[]; d = []`` 之后,``c`` 和 ``d`` 保证会指向两个不同、单独的新建空列表。(请注意 ``c = d = []`` " +"则是将同一个对象赋值给 ``c`` 和 ``d``。)" + +#: ../../reference/datamodel.rst:120 +msgid "The standard type hierarchy" +msgstr "标准类型层级结构" + +#: ../../reference/datamodel.rst:129 +msgid "" +"Below is a list of the types that are built into Python. Extension modules " +"(written in C, Java, or other languages, depending on the implementation) " +"can define additional types. Future versions of Python may add types to the" +" type hierarchy (e.g., rational numbers, efficiently stored arrays of " +"integers, etc.), although such additions will often be provided via the " +"standard library instead." +msgstr "" +"以下是 Python 内置类型的列表。扩展模块 (具体实现会以 C, Java 或其他语言编写) 可以定义更多的类型。未来版本的 Python " +"可能会加入更多的类型 (例如有理数、高效存储的整型数组等等),不过新增类型往往都是通过标准库来提供的。" + +#: ../../reference/datamodel.rst:140 +msgid "" +"Some of the type descriptions below contain a paragraph listing 'special " +"attributes.' These are attributes that provide access to the implementation" +" and are not intended for general use. Their definition may change in the " +"future." +msgstr "以下部分类型的描述中包含有 '特殊属性列表' 段落。这些属性提供对具体实现的访问而非通常使用。它们的定义在未来可能会改变。" + +#: ../../reference/datamodel.rst:150 +msgid "None" +msgstr "None" + +#: ../../reference/datamodel.rst:147 +msgid "" +"This type has a single value. There is a single object with this value. " +"This object is accessed through the built-in name ``None``. It is used to " +"signify the absence of a value in many situations, e.g., it is returned from" +" functions that don't explicitly return anything. Its truth value is false." +msgstr "" +"此类型只有一种取值。是一个具有此值的单独对象。此对象通过内置名称 ``None`` 访问。在许多情况下它被用来表示空值,例如未显式指明返回值的函数将返回" +" None。它的逻辑值为假。" + +#: ../../reference/datamodel.rst:170 +msgid "NotImplemented" +msgstr "NotImplemented" + +#: ../../reference/datamodel.rst:155 +msgid "" +"This type has a single value. There is a single object with this value. " +"This object is accessed through the built-in name ``NotImplemented``. " +"Numeric methods and rich comparison methods should return this value if they" +" do not implement the operation for the operands provided. (The interpreter" +" will then try the reflected operation, or some other fallback, depending on" +" the operator.) It should not be evaluated in a boolean context." +msgstr "" +"此类型只有一种取值。 是一个具有该值的单独对象。 此对象通过内置名称 ``NotImplemented`` 访问。 " +"数值方法和丰富比较方法如未实现指定运算符表示的运算则应返回该值。 (解释器会根据具体运算符继续尝试反向运算或其他回退操作。) 它不应被解读为布尔值。" + +#: ../../reference/datamodel.rst:162 +msgid "See :ref:`implementing-the-arithmetic-operations` for more details." +msgstr "详情参见 :ref:`implementing-the-arithmetic-operations`。" + +#: ../../reference/datamodel.rst:166 +msgid "" +"Evaluating ``NotImplemented`` in a boolean context is deprecated. While it " +"currently evaluates as true, it will emit a :exc:`DeprecationWarning`. It " +"will raise a :exc:`TypeError` in a future version of Python." +msgstr "" +"作为布尔值来解读 ``NotImplemented`` 已被弃用。 虽然它目前会被解读为真值,但将同时发出 " +":exc:`DeprecationWarning`。 它将在未来的 Python 版本中引发 :exc:`TypeError`。" + +#: ../../reference/datamodel.rst:179 +msgid "Ellipsis" +msgstr "Ellipsis" + +#: ../../reference/datamodel.rst:177 +msgid "" +"This type has a single value. There is a single object with this value. " +"This object is accessed through the literal ``...`` or the built-in name " +"``Ellipsis``. Its truth value is true." +msgstr "" +"此类型只有一种取值。是一个具有此值的单独对象。此对象通过字面值 ``...`` 或内置名称 ``Ellipsis`` 访问。它的逻辑值为真。" + +#: ../../reference/datamodel.rst:266 +msgid ":class:`numbers.Number`" +msgstr ":class:`numbers.Number`" + +#: ../../reference/datamodel.rst:184 +msgid "" +"These are created by numeric literals and returned as results by arithmetic " +"operators and arithmetic built-in functions. Numeric objects are immutable;" +" once created their value never changes. Python numbers are of course " +"strongly related to mathematical numbers, but subject to the limitations of " +"numerical representation in computers." +msgstr "" +"此类对象由数字字面值创建,并会被作为算术运算符和算术内置函数的返回结果。数字对象是不可变的;一旦创建其值就不再改变。Python " +"中的数字当然非常类似数学中的数字,但也受限于计算机中的数字表示方法。" + +#: ../../reference/datamodel.rst:190 +msgid "" +"The string representations of the numeric classes, computed by " +":meth:`~object.__repr__` and :meth:`~object.__str__`, have the following " +"properties:" +msgstr "" +"数字类的字符串表示形式,由 :meth:`~object.__repr__` 和 :meth:`~object.__str__` " +"算出,具有以下特征属性:" + +#: ../../reference/datamodel.rst:194 +msgid "" +"They are valid numeric literals which, when passed to their class " +"constructor, produce an object having the value of the original numeric." +msgstr "它们是有效的数字字面值,当被传给它们的类构造器时,将会产生具有原数字值的对象。" + +#: ../../reference/datamodel.rst:198 +msgid "The representation is in base 10, when possible." +msgstr "表示形式会在可能的情况下采用 10 进制。" + +#: ../../reference/datamodel.rst:200 +msgid "" +"Leading zeros, possibly excepting a single zero before a decimal point, are " +"not shown." +msgstr "开头的零,除小数点前可能存在的单个零之外,将不会被显示。" + +#: ../../reference/datamodel.rst:203 +msgid "" +"Trailing zeros, possibly excepting a single zero after a decimal point, are " +"not shown." +msgstr "末尾的零,除小数点后可能存在的单个零之外,将不会被显示。" + +#: ../../reference/datamodel.rst:206 +msgid "A sign is shown only when the number is negative." +msgstr "正负号仅在当数字为负值时会被显示。" + +#: ../../reference/datamodel.rst:208 +msgid "" +"Python distinguishes between integers, floating point numbers, and complex " +"numbers:" +msgstr "Python 区分整型数、浮点型数和复数:" + +#: ../../reference/datamodel.rst:241 +msgid ":class:`numbers.Integral`" +msgstr ":class:`numbers.Integral`" + +#: ../../reference/datamodel.rst:214 +msgid "" +"These represent elements from the mathematical set of integers (positive and" +" negative)." +msgstr "此类对象表示数学中整数集合的成员 (包括正数和负数)。" + +#: ../../reference/datamodel.rst:217 +msgid "There are two types of integers:" +msgstr "整型数可细分为两种类型:" + +#: ../../reference/datamodel.rst:224 +msgid "Integers (:class:`int`)" +msgstr "整型 (:class:`int`)" + +#: ../../reference/datamodel.rst:220 +msgid "" +"These represent numbers in an unlimited range, subject to available " +"(virtual) memory only. For the purpose of shift and mask operations, a " +"binary representation is assumed, and negative numbers are represented in a " +"variant of 2's complement which gives the illusion of an infinite string of " +"sign bits extending to the left." +msgstr "" +"此类对象表示任意大小的数字,仅受限于可用的内存 (包括虚拟内存)。在变换和掩码运算中会以二进制表示,负数会以 2 " +"的补码表示,看起来像是符号位向左延伸补满空位。" + +#: ../../reference/datamodel.rst:236 +msgid "Booleans (:class:`bool`)" +msgstr "布尔型 (:class:`bool`)" + +#: ../../reference/datamodel.rst:232 +msgid "" +"These represent the truth values False and True. The two objects " +"representing the values ``False`` and ``True`` are the only Boolean objects." +" The Boolean type is a subtype of the integer type, and Boolean values " +"behave like the values 0 and 1, respectively, in almost all contexts, the " +"exception being that when converted to a string, the strings ``\"False\"`` " +"or ``\"True\"`` are returned, respectively." +msgstr "" +"此类对象表示逻辑值 False 和 True。代表 ``False`` 和 ``True`` " +"值的两个对象是唯二的布尔对象。布尔类型是整型的子类型,两个布尔值在各种场合的行为分别类似于数值 0 和 1,例外情况只有在转换为字符串时分别返回字符串 " +"``\"False\"`` 或 ``\"True\"``。" + +#: ../../reference/datamodel.rst:240 +msgid "" +"The rules for integer representation are intended to give the most " +"meaningful interpretation of shift and mask operations involving negative " +"integers." +msgstr "整型数表示规则的目的是在涉及负整型数的变换和掩码运算时提供最为合理的解释。" + +#: ../../reference/datamodel.rst:256 +msgid ":class:`numbers.Real` (:class:`float`)" +msgstr ":class:`numbers.Real` (:class:`float`)" + +#: ../../reference/datamodel.rst:250 +msgid "" +"These represent machine-level double precision floating point numbers. You " +"are at the mercy of the underlying machine architecture (and C or Java " +"implementation) for the accepted range and handling of overflow. Python does" +" not support single-precision floating point numbers; the savings in " +"processor and memory usage that are usually the reason for using these are " +"dwarfed by the overhead of using objects in Python, so there is no reason to" +" complicate the language with two kinds of floating point numbers." +msgstr "" +"此类对象表示机器级的双精度浮点数。其所接受的取值范围和溢出处理将受制于底层的机器架构 (以及 C 或 Java 实现)。Python " +"不支持单精度浮点数;支持后者通常的理由是节省处理器和内存消耗,但这点节省相对于在 Python " +"中使用对象的开销来说太过微不足道,因此没有理由包含两种浮点数而令该语言变得复杂。" + +#: ../../reference/datamodel.rst:266 +msgid ":class:`numbers.Complex` (:class:`complex`)" +msgstr ":class:`numbers.Complex` (:class:`complex`)" + +#: ../../reference/datamodel.rst:263 +msgid "" +"These represent complex numbers as a pair of machine-level double precision " +"floating point numbers. The same caveats apply as for floating point " +"numbers. The real and imaginary parts of a complex number ``z`` can be " +"retrieved through the read-only attributes ``z.real`` and ``z.imag``." +msgstr "" +"此类对象以一对机器级的双精度浮点数来表示复数值。有关浮点数的附带规则对其同样有效。一个复数值 ``z`` 的实部和虚部可通过只读属性 " +"``z.real`` 和 ``z.imag`` 来获取。" + +#: ../../reference/datamodel.rst:383 +msgid "Sequences" +msgstr "序列" + +#: ../../reference/datamodel.rst:276 +msgid "" +"These represent finite ordered sets indexed by non-negative numbers. The " +"built-in function :func:`len` returns the number of items of a sequence. " +"When the length of a sequence is *n*, the index set contains the numbers 0, " +"1, ..., *n*-1. Item *i* of sequence *a* is selected by ``a[i]``." +msgstr "" +"此类对象表示以非负整数作为索引的有限有序集。内置函数 :func:`len` 可返回一个序列的条目数量。当一个序列的长度为 *n* 时,索引集包含数字 " +"0, 1, ..., *n*-1。序列 *a* 的条目 *i* 可通过 ``a[i]`` 选择。" + +#: ../../reference/datamodel.rst:283 +msgid "" +"Sequences also support slicing: ``a[i:j]`` selects all items with index *k* " +"such that *i* ``<=`` *k* ``<`` *j*. When used as an expression, a slice is " +"a sequence of the same type. This implies that the index set is renumbered " +"so that it starts at 0." +msgstr "" +"序列还支持切片: ``a[i:j]`` 选择索引号为 *k* 的所有条目,*i* ``<=`` *k* ``<`` " +"*j*。当用作表达式时,序列的切片就是一个与序列类型相同的新序列。新序列的索引还是从 0 开始。" + +#: ../../reference/datamodel.rst:288 +msgid "" +"Some sequences also support \"extended slicing\" with a third \"step\" " +"parameter: ``a[i:j:k]`` selects all items of *a* with index *x* where ``x = " +"i + n*k``, *n* ``>=`` ``0`` and *i* ``<=`` *x* ``<`` *j*." +msgstr "" +"有些序列还支持带有第三个 \"step\" 形参的 \"扩展切片\": ``a[i:j:k]`` 选择 *a* 中索引号为 *x* 的所有条目,``x " +"= i + n*k``, *n* ``>=`` ``0`` 且 *i* ``<=`` *x* ``<`` *j*。" + +#: ../../reference/datamodel.rst:292 +msgid "Sequences are distinguished according to their mutability:" +msgstr "序列可根据其可变性来加以区分:" + +#: ../../reference/datamodel.rst:349 +msgid "Immutable sequences" +msgstr "不可变序列" + +#: ../../reference/datamodel.rst:299 +msgid "" +"An object of an immutable sequence type cannot change once it is created. " +"(If the object contains references to other objects, these other objects may" +" be mutable and may be changed; however, the collection of objects directly " +"referenced by an immutable object cannot change.)" +msgstr "" +"不可变序列类型的对象一旦创建就不能再改变。(如果对象包含对其他对象的引用,其中的可变对象就是可以改变的;但是,一个不可变对象所直接引用的对象集是不能改变的。)" + +#: ../../reference/datamodel.rst:304 +msgid "The following types are immutable sequences:" +msgstr "以下类型属于不可变对象:" + +#: ../../reference/datamodel.rst:327 +msgid "Strings" +msgstr "字符串" + +#: ../../reference/datamodel.rst:317 +msgid "" +"A string is a sequence of values that represent Unicode code points. All the" +" code points in the range ``U+0000 - U+10FFFF`` can be represented in a " +"string. Python doesn't have a :c:type:`char` type; instead, every code " +"point in the string is represented as a string object with length ``1``. " +"The built-in function :func:`ord` converts a code point from its string form" +" to an integer in the range ``0 - 10FFFF``; :func:`chr` converts an integer " +"in the range ``0 - 10FFFF`` to the corresponding length ``1`` string object." +" :meth:`str.encode` can be used to convert a :class:`str` to :class:`bytes` " +"using the given text encoding, and :meth:`bytes.decode` can be used to " +"achieve the opposite." +msgstr "" +"字符串是由 Unicode 码位值组成的序列。范围在 ``U+0000 - U+10FFFF`` 之内的所有码位值都可在字符串中使用。Python 没有" +" :c:type:`char` 类型;而是将字符串中的每个码位表示为一个长度为 ``1`` 的字符串对象。内置函数 :func:`ord` " +"可将一个码位由字符串形式转换成一个范围在 ``0 - 10FFFF`` 之内的整型数;:func:`chr` 可将一个范围在 ``0 - " +"10FFFF`` 之内的整型数转换为长度为 ``1`` 的对应字符串对象。:meth:`str.encode` 可以使用指定的文本编码将 " +":class:`str` 转换为 :class:`bytes`,而 :meth:`bytes.decode` 则可以实现反向的解码。" + +#: ../../reference/datamodel.rst:340 +msgid "Tuples" +msgstr "元组" + +#: ../../reference/datamodel.rst:335 +msgid "" +"The items of a tuple are arbitrary Python objects. Tuples of two or more " +"items are formed by comma-separated lists of expressions. A tuple of one " +"item (a 'singleton') can be formed by affixing a comma to an expression (an " +"expression by itself does not create a tuple, since parentheses must be " +"usable for grouping of expressions). An empty tuple can be formed by an " +"empty pair of parentheses." +msgstr "" +"一个元组中的条目可以是任意 Python 对象。包含两个或以上条目的元组由逗号分隔的表达式构成。只有一个条目的元组 ('单项元组') " +"可通过在表达式后加一个逗号来构成 (一个表达式本身不能创建为元组,因为圆括号要用来设置表达式分组)。一个空元组可通过一对内容为空的圆括号创建。" + +#: ../../reference/datamodel.rst:349 +msgid "Bytes" +msgstr "字节串" + +#: ../../reference/datamodel.rst:345 +msgid "" +"A bytes object is an immutable array. The items are 8-bit bytes, " +"represented by integers in the range 0 <= x < 256. Bytes literals (like " +"``b'abc'``) and the built-in :func:`bytes()` constructor can be used to " +"create bytes objects. Also, bytes objects can be decoded to strings via the" +" :meth:`~bytes.decode` method." +msgstr "" +"字节串对象是不可变的数组。其中每个条目都是一个 8 位字节,以取值范围 0 <= x < 256 的整型数表示。字节串字面值 (例如 " +"``b'abc'``) 和内置的 :func:`bytes()` 构造器可被用来创建字节串对象。字节串对象还可以通过 " +":meth:`~bytes.decode` 方法解码为字符串。" + +#: ../../reference/datamodel.rst:383 +msgid "Mutable sequences" +msgstr "可变序列" + +#: ../../reference/datamodel.rst:359 +msgid "" +"Mutable sequences can be changed after they are created. The subscription " +"and slicing notations can be used as the target of assignment and " +":keyword:`del` (delete) statements." +msgstr "可变序列在被创建后仍可被改变。下标和切片标注可被用作赋值和 :keyword:`del` (删除) 语句的目标。" + +#: ../../reference/datamodel.rst:363 +msgid "There are currently two intrinsic mutable sequence types:" +msgstr "目前有两种内生可变序列类型:" + +#: ../../reference/datamodel.rst:370 +msgid "Lists" +msgstr "列表" + +#: ../../reference/datamodel.rst:368 +msgid "" +"The items of a list are arbitrary Python objects. Lists are formed by " +"placing a comma-separated list of expressions in square brackets. (Note that" +" there are no special cases needed to form lists of length 0 or 1.)" +msgstr "" +"列表中的条目可以是任意 Python 对象。列表由用方括号括起并由逗号分隔的多个表达式构成。(注意创建长度为 0 或 1 的列表无需使用特殊规则。)" + +#: ../../reference/datamodel.rst:378 +msgid "Byte Arrays" +msgstr "字节数组" + +#: ../../reference/datamodel.rst:375 +msgid "" +"A bytearray object is a mutable array. They are created by the built-in " +":func:`bytearray` constructor. Aside from being mutable (and hence " +"unhashable), byte arrays otherwise provide the same interface and " +"functionality as immutable :class:`bytes` objects." +msgstr "" +"字节数组对象属于可变数组。可以通过内置的 :func:`bytearray` 构造器来创建。除了是可变的 " +"(因而也是不可哈希的),在其他方面字节数组提供的接口和功能都与不可变的 :class:`bytes` 对象一致。" + +#: ../../reference/datamodel.rst:382 +msgid "" +"The extension module :mod:`array` provides an additional example of a " +"mutable sequence type, as does the :mod:`collections` module." +msgstr "扩展模块 :mod:`array` 提供了一个额外的可变序列类型示例,:mod:`collections` 模块也是如此。" + +#: ../../reference/datamodel.rst:417 +msgid "Set types" +msgstr "集合类型" + +#: ../../reference/datamodel.rst:390 +msgid "" +"These represent unordered, finite sets of unique, immutable objects. As " +"such, they cannot be indexed by any subscript. However, they can be iterated" +" over, and the built-in function :func:`len` returns the number of items in " +"a set. Common uses for sets are fast membership testing, removing duplicates" +" from a sequence, and computing mathematical operations such as " +"intersection, union, difference, and symmetric difference." +msgstr "" +"此类对象表示由不重复且不可变对象组成的无序且有限的集合。因此它们不能通过下标来索引。但是它们可被迭代,也可用内置函数 :func:`len` " +"返回集合中的条目数。集合常见的用处是快速成员检测,去除序列中的重复项,以及进行交、并、差和对称差等数学运算。" + +#: ../../reference/datamodel.rst:397 +msgid "" +"For set elements, the same immutability rules apply as for dictionary keys. " +"Note that numeric types obey the normal rules for numeric comparison: if two" +" numbers compare equal (e.g., ``1`` and ``1.0``), only one of them can be " +"contained in a set." +msgstr "" +"对于集合元素所采用的不可变规则与字典的键相同。注意数字类型遵循正常的数字比较规则: 如果两个数字相等 (例如 ``1`` 和 " +"``1.0``),则同一集合中只能包含其中一个。" + +#: ../../reference/datamodel.rst:402 +msgid "There are currently two intrinsic set types:" +msgstr "目前有两种内生集合类型:" + +#: ../../reference/datamodel.rst:409 +msgid "Sets" +msgstr "集合" + +#: ../../reference/datamodel.rst:407 +msgid "" +"These represent a mutable set. They are created by the built-in :func:`set` " +"constructor and can be modified afterwards by several methods, such as " +":meth:`~set.add`." +msgstr "" +"此类对象表示可变集合。它们可通过内置的 :func:`set` 构造器创建,并且创建之后可以通过方法进行修改,例如 :meth:`~set.add`。" + +#: ../../reference/datamodel.rst:417 +msgid "Frozen sets" +msgstr "冻结集合" + +#: ../../reference/datamodel.rst:414 +msgid "" +"These represent an immutable set. They are created by the built-in " +":func:`frozenset` constructor. As a frozenset is immutable and " +":term:`hashable`, it can be used again as an element of another set, or as a" +" dictionary key." +msgstr "" +"此类对象表示不可变集合。它们可通过内置的 :func:`frozenset` 构造器创建。由于 frozenset 对象不可变且 " +":term:`hashable`,它可以被用作另一个集合的元素或是字典的键。" + +#: ../../reference/datamodel.rst:464 +msgid "Mappings" +msgstr "映射" + +#: ../../reference/datamodel.rst:425 +msgid "" +"These represent finite sets of objects indexed by arbitrary index sets. The " +"subscript notation ``a[k]`` selects the item indexed by ``k`` from the " +"mapping ``a``; this can be used in expressions and as the target of " +"assignments or :keyword:`del` statements. The built-in function :func:`len` " +"returns the number of items in a mapping." +msgstr "" +"此类对象表示由任意索引集合所索引的对象的集合。通过下标 ``a[k]`` 可在映射 ``a`` 中选择索引为 ``k`` " +"的条目;这可以在表达式中使用,也可作为赋值或 :keyword:`del` 语句的目标。内置函数 :func:`len` 可返回一个映射中的条目数。" + +#: ../../reference/datamodel.rst:431 +msgid "There is currently a single intrinsic mapping type:" +msgstr "目前只有一种内生映射类型:" + +#: ../../reference/datamodel.rst:464 +msgid "Dictionaries" +msgstr "字典" + +#: ../../reference/datamodel.rst:436 +msgid "" +"These represent finite sets of objects indexed by nearly arbitrary values. " +"The only types of values not acceptable as keys are values containing lists " +"or dictionaries or other mutable types that are compared by value rather " +"than by object identity, the reason being that the efficient implementation " +"of dictionaries requires a key's hash value to remain constant. Numeric " +"types used for keys obey the normal rules for numeric comparison: if two " +"numbers compare equal (e.g., ``1`` and ``1.0``) then they can be used " +"interchangeably to index the same dictionary entry." +msgstr "" +"此类对象表示由几乎任意值作为索引的有限个对象的集合。不可作为键的值类型只有包含列表或字典或其他可变类型,通过值而非对象编号进行比较的值,其原因在于高效的字典实现需要使用键的哈希值以保持一致性。用作键的数字类型遵循正常的数字比较规则:" +" 如果两个数字相等 (例如 ``1`` 和 ``1.0``) 则它们均可来用来索引同一个字典条目。" + +#: ../../reference/datamodel.rst:445 +msgid "" +"Dictionaries preserve insertion order, meaning that keys will be produced in" +" the same order they were added sequentially over the dictionary. Replacing " +"an existing key does not change the order, however removing a key and re-" +"inserting it will add it to the end instead of keeping its old place." +msgstr "" +"字典会保留插入顺序,这意味着键将以它们被添加的顺序在字典中依次产生。 " +"替换某个现有的键不会改变其顺序,但是移除某个键再重新插入则会将其添加到末尾而不会保留其原有位置。" + +#: ../../reference/datamodel.rst:450 +msgid "" +"Dictionaries are mutable; they can be created by the ``{...}`` notation (see" +" section :ref:`dict`)." +msgstr "字典是可变的;它们可通过 ``{...}`` 标注来创建 (参见 :ref:`dict` 小节)。" + +#: ../../reference/datamodel.rst:457 +msgid "" +"The extension modules :mod:`dbm.ndbm` and :mod:`dbm.gnu` provide additional " +"examples of mapping types, as does the :mod:`collections` module." +msgstr "" +"扩展模块 :mod:`dbm.ndbm` 和 :mod:`dbm.gnu` 提供了额外的映射类型示例,:mod:`collections` " +"模块也是如此。" + +#: ../../reference/datamodel.rst:461 +msgid "" +"Dictionaries did not preserve insertion order in versions of Python before " +"3.6. In CPython 3.6, insertion order was preserved, but it was considered an" +" implementation detail at that time rather than a language guarantee." +msgstr "" +"在 Python 3.6 版之前字典不会保留插入顺序。 在 CPython 3.6 " +"中插入顺序会被保留,但这在当时被当作是一个实现细节而非确定的语言特性。" + +#: ../../reference/datamodel.rst:723 +msgid "Callable types" +msgstr "可调用类型" + +#: ../../reference/datamodel.rst:473 +msgid "" +"These are the types to which the function call operation (see section " +":ref:`calls`) can be applied:" +msgstr "此类型可以被应用于函数调用操作 (参见 :ref:`calls` 小节):" + +#: ../../reference/datamodel.rst:576 +msgid "User-defined functions" +msgstr "用户定义函数" + +#: ../../reference/datamodel.rst:482 +msgid "" +"A user-defined function object is created by a function definition (see " +"section :ref:`function`). It should be called with an argument list " +"containing the same number of items as the function's formal parameter list." +msgstr "" +"用户定义函数对象可通过函数定义来创建 (参见 :ref:`function` " +"小节)。它被调用时应附带一个参数列表,其中包含的条目应与函数所定义的形参列表一致。" + +#: ../../reference/datamodel.rst:487 +msgid "Special attributes:" +msgstr "特殊属性:" + +#: ../../reference/datamodel.rst:505 +msgid "Attribute" +msgstr "属性" + +#: ../../reference/datamodel.rst:505 +msgid "Meaning" +msgstr "含意" + +#: ../../reference/datamodel.rst:507 +msgid ":attr:`__doc__`" +msgstr ":attr:`__doc__`" + +#: ../../reference/datamodel.rst:507 +msgid "" +"The function's documentation string, or ``None`` if unavailable; not " +"inherited by subclasses." +msgstr "该函数的文档字符串,没有则为 ``None``;不会被子类继承。" + +#: ../../reference/datamodel.rst:507 ../../reference/datamodel.rst:512 +#: ../../reference/datamodel.rst:515 ../../reference/datamodel.rst:520 +#: ../../reference/datamodel.rst:524 ../../reference/datamodel.rst:530 +#: ../../reference/datamodel.rst:540 ../../reference/datamodel.rst:551 +#: ../../reference/datamodel.rst:558 +msgid "Writable" +msgstr "可写" + +#: ../../reference/datamodel.rst:512 +msgid ":attr:`~definition.\\ __name__`" +msgstr ":attr:`~definition.\\ __name__`" + +#: ../../reference/datamodel.rst:512 +msgid "The function's name." +msgstr "该函数的名称。" + +#: ../../reference/datamodel.rst:515 +msgid ":attr:`~definition.\\ __qualname__`" +msgstr ":attr:`~definition.\\ __qualname__`" + +#: ../../reference/datamodel.rst:515 +msgid "The function's :term:`qualified name`." +msgstr "该函数的 :term:`qualified name`。" + +#: ../../reference/datamodel.rst:520 +msgid ":attr:`__module__`" +msgstr ":attr:`__module__`" + +#: ../../reference/datamodel.rst:520 +msgid "" +"The name of the module the function was defined in, or ``None`` if " +"unavailable." +msgstr "该函数所属模块的名称,没有则为 ``None``。" + +#: ../../reference/datamodel.rst:524 +msgid ":attr:`__defaults__`" +msgstr ":attr:`__defaults__`" + +#: ../../reference/datamodel.rst:524 +msgid "" +"A tuple containing default argument values for those arguments that have " +"defaults, or ``None`` if no arguments have a default value." +msgstr "由具有默认值的参数的默认参数值组成的元组,如无任何参数具有默认值则为 ``None``。" + +#: ../../reference/datamodel.rst:530 +msgid ":attr:`__code__`" +msgstr ":attr:`__code__`" + +#: ../../reference/datamodel.rst:530 +msgid "The code object representing the compiled function body." +msgstr "表示编译后的函数体的代码对象。" + +#: ../../reference/datamodel.rst:533 +msgid ":attr:`__globals__`" +msgstr ":attr:`__globals__`" + +#: ../../reference/datamodel.rst:533 +msgid "" +"A reference to the dictionary that holds the function's global variables ---" +" the global namespace of the module in which the function was defined." +msgstr "对存放该函数中全局变量的字典的引用 --- 函数所属模块的全局命名空间。" + +#: ../../reference/datamodel.rst:533 ../../reference/datamodel.rst:544 +msgid "Read-only" +msgstr "只读" + +#: ../../reference/datamodel.rst:540 +msgid ":attr:`~object.__dict__`" +msgstr ":attr:`~object.__dict__`" + +#: ../../reference/datamodel.rst:540 +msgid "The namespace supporting arbitrary function attributes." +msgstr "命名空间支持的函数属性。" + +#: ../../reference/datamodel.rst:544 +msgid ":attr:`__closure__`" +msgstr ":attr:`__closure__`" + +#: ../../reference/datamodel.rst:544 +msgid "" +"``None`` or a tuple of cells that contain bindings for the function's free " +"variables. See below for information on the ``cell_contents`` attribute." +msgstr "``None`` 或包含该函数可用变量的绑定的单元的元组。有关 ``cell_contents`` 属性的详情见下。" + +#: ../../reference/datamodel.rst:551 +msgid ":attr:`__annotations__`" +msgstr ":attr:`__annotations__`" + +#: ../../reference/datamodel.rst:551 +msgid "" +"A dict containing annotations of parameters. The keys of the dict are the " +"parameter names, and ``'return'`` for the return annotation, if provided." +msgstr "包含参数标注的字典。字典的键是参数名,如存在返回标注则为 ``'return'``。" + +#: ../../reference/datamodel.rst:558 +msgid ":attr:`__kwdefaults__`" +msgstr ":attr:`__kwdefaults__`" + +#: ../../reference/datamodel.rst:558 +msgid "A dict containing defaults for keyword-only parameters." +msgstr "仅包含关键字参数默认值的字典。" + +#: ../../reference/datamodel.rst:562 +msgid "" +"Most of the attributes labelled \"Writable\" check the type of the assigned " +"value." +msgstr "大部分标有 \"Writable\" 的属性均会检查赋值的类型。" + +#: ../../reference/datamodel.rst:564 +msgid "" +"Function objects also support getting and setting arbitrary attributes, " +"which can be used, for example, to attach metadata to functions. Regular " +"attribute dot-notation is used to get and set such attributes. *Note that " +"the current implementation only supports function attributes on user-defined" +" functions. Function attributes on built-in functions may be supported in " +"the future.*" +msgstr "" +"函数对象也支持获取和设置任意属性,例如这可以被用来给函数附加元数据。使用正规的属性点号标注获取和设置此类属性。*注意当前实现仅支持用户定义函数属性。未来可能会增加支持内置函数属性。*" + +#: ../../reference/datamodel.rst:570 +msgid "" +"A cell object has the attribute ``cell_contents``. This can be used to get " +"the value of the cell, as well as set the value." +msgstr "单元对象具有 ``cell_contents`` 属性。这可被用来获取以及设置单元的值。" + +#: ../../reference/datamodel.rst:573 +msgid "" +"Additional information about a function's definition can be retrieved from " +"its code object; see the description of internal types below. The " +":data:`cell ` type can be accessed in the :mod:`types` " +"module." +msgstr "" +"有关函数定义的额外信息可以从其代码对象中提取;参见下文对内部类型的描述。 :data:`cell ` 类型可以在 " +":mod:`types` 模块中访问。" + +#: ../../reference/datamodel.rst:639 +msgid "Instance methods" +msgstr "实例方法" + +#: ../../reference/datamodel.rst:584 +msgid "" +"An instance method object combines a class, a class instance and any " +"callable object (normally a user-defined function)." +msgstr "实例方法用于结合类、类实例和任何可调用对象 (通常为用户定义函数)。" + +#: ../../reference/datamodel.rst:594 +msgid "" +"Special read-only attributes: :attr:`__self__` is the class instance object," +" :attr:`__func__` is the function object; :attr:`__doc__` is the method's " +"documentation (same as ``__func__.__doc__``); :attr:`~definition.__name__` " +"is the method name (same as ``__func__.__name__``); :attr:`__module__` is " +"the name of the module the method was defined in, or ``None`` if " +"unavailable." +msgstr "" +"特殊的只读属性: :attr:`__self__` 为类实例对象本身,:attr:`__func__` 为函数对象;:attr:`__doc__` " +"为方法的文档 (与 ``__func__.__doc__`` 作用相同);:attr:`~definition.__name__` 为方法名称 (与 " +"``__func__.__name__`` 作用相同);:attr:`__module__` 为方法所属模块的名称,没有则为 ``None``。" + +#: ../../reference/datamodel.rst:600 +msgid "" +"Methods also support accessing (but not setting) the arbitrary function " +"attributes on the underlying function object." +msgstr "方法还支持获取 (但不能设置) 下层函数对象的任意函数属性。" + +#: ../../reference/datamodel.rst:603 +msgid "" +"User-defined method objects may be created when getting an attribute of a " +"class (perhaps via an instance of that class), if that attribute is a user-" +"defined function object or a class method object." +msgstr "用户定义方法对象可在获取一个类的属性时被创建 (也可能通过该类的一个实例),如果该属性为用户定义函数对象或类方法对象。" + +#: ../../reference/datamodel.rst:607 +msgid "" +"When an instance method object is created by retrieving a user-defined " +"function object from a class via one of its instances, its :attr:`__self__` " +"attribute is the instance, and the method object is said to be bound. The " +"new method's :attr:`__func__` attribute is the original function object." +msgstr "" +"当通过从类实例获取一个用户定义函数对象的方式创建一个实例方法对象时,类实例对象的 :attr:`__self__` " +"属性即为该实例,并会绑定方法对象。该新建方法的 :attr:`__func__` 属性就是原来的函数对象。" + +#: ../../reference/datamodel.rst:613 +msgid "" +"When an instance method object is created by retrieving a class method " +"object from a class or instance, its :attr:`__self__` attribute is the class" +" itself, and its :attr:`__func__` attribute is the function object " +"underlying the class method." +msgstr "" +"当通过从类或实例获取一个类方法对象的方式创建一个实例对象时,实例对象的 :attr:`__self__` 属性为该类本身,其 " +":attr:`__func__` 属性为类方法对应的下层函数对象。" + +#: ../../reference/datamodel.rst:618 +msgid "" +"When an instance method object is called, the underlying function " +"(:attr:`__func__`) is called, inserting the class instance " +"(:attr:`__self__`) in front of the argument list. For instance, when " +":class:`C` is a class which contains a definition for a function :meth:`f`, " +"and ``x`` is an instance of :class:`C`, calling ``x.f(1)`` is equivalent to " +"calling ``C.f(x, 1)``." +msgstr "" +"当一个实例方法对象被调用时,会调用对应的下层函数 (:attr:`__func__`),并将类实例 (:attr:`__self__`) " +"插入参数列表的开头。例如,当 :class:`C` 是一个包含了 :meth:`f` 函数定义的类,而 ``x`` 是 :class:`C` " +"的一个实例,则调用 ``x.f(1)`` 就等同于调用 ``C.f(x, 1)``。" + +#: ../../reference/datamodel.rst:625 +msgid "" +"When an instance method object is derived from a class method object, the " +"\"class instance\" stored in :attr:`__self__` will actually be the class " +"itself, so that calling either ``x.f(1)`` or ``C.f(1)`` is equivalent to " +"calling ``f(C,1)`` where ``f`` is the underlying function." +msgstr "" +"当一个实例方法对象是衍生自一个类方法对象时,保存在 :attr:`__self__` 中的 \"类实例\" 实际上会是该类本身,因此无论是调用 " +"``x.f(1)`` 还是 ``C.f(1)`` 都等同于调用 ``f(C,1)``,其中 ``f`` 为对应的下层函数。" + +#: ../../reference/datamodel.rst:630 +msgid "" +"Note that the transformation from function object to instance method object " +"happens each time the attribute is retrieved from the instance. In some " +"cases, a fruitful optimization is to assign the attribute to a local " +"variable and call that local variable. Also notice that this transformation " +"only happens for user-defined functions; other callable objects (and all " +"non-callable objects) are retrieved without transformation. It is also " +"important to note that user-defined functions which are attributes of a " +"class instance are not converted to bound methods; this *only* happens when " +"the function is an attribute of the class." +msgstr "" +"请注意从函数对象到实例方法对象的变换会在每一次从实例获取属性时发生。在某些情况下,一种高效的优化方式是将属性赋值给一个本地变量并调用该本地变量。还要注意这样的变换只发生于用户定义函数;其他可调用对象" +" (以及所有不可调用对象) 在被获取时都不会发生变换。还有一个需要关注的要点是作为一个类实例属性的用户定义函数不会被转换为绑定方法;这样的变换 *仅当*" +" 函数是类属性时才会发生。" + +#: ../../reference/datamodel.rst:654 +msgid "Generator functions" +msgstr "生成器函数" + +#: ../../reference/datamodel.rst:646 +msgid "" +"A function or method which uses the :keyword:`yield` statement (see section " +":ref:`yield`) is called a :dfn:`generator function`. Such a function, when " +"called, always returns an iterator object which can be used to execute the " +"body of the function: calling the iterator's :meth:`iterator.__next__` " +"method will cause the function to execute until it provides a value using " +"the :keyword:`!yield` statement. When the function executes a " +":keyword:`return` statement or falls off the end, a :exc:`StopIteration` " +"exception is raised and the iterator will have reached the end of the set of" +" values to be returned." +msgstr "" +"一个使用 :keyword:`yield` 语句 (见 :ref:`yield` 章节)的函数或方法被称作一个 :dfn:`生成器函数`。 " +"这样的函数在被调用时,总是返回一个可以执行函数体的迭代器对象:调用该迭代器的 :meth:`iterator.__next__` " +"方法将会导致这个函数一直运行直到它使用 :keyword:`!yield` 语句提供了一个值为止。 当这个函数执行 :keyword:`return` " +"语句或者执行到末尾时,将引发 :exc:`StopIteration` 异常并且这个迭代器将到达所返回的值集合的末尾。" + +#: ../../reference/datamodel.rst:664 +msgid "Coroutine functions" +msgstr "协程函数" + +#: ../../reference/datamodel.rst:660 +msgid "" +"A function or method which is defined using :keyword:`async def` is called a" +" :dfn:`coroutine function`. Such a function, when called, returns a " +":term:`coroutine` object. It may contain :keyword:`await` expressions, as " +"well as :keyword:`async with` and :keyword:`async for` statements. See also " +"the :ref:`coroutine-objects` section." +msgstr "" +"使用 :keyword:`async def` 来定义的函数或方法就被称为 :dfn:`协程函数`。这样的函数在被调用时会返回一个 " +":term:`coroutine` 对象。它可能包含 :keyword:`await` 表达式以及 :keyword:`async with` 和 " +":keyword:`async for` 语句。详情可参见 :ref:`coroutine-objects` 一节。" + +#: ../../reference/datamodel.rst:684 +msgid "Asynchronous generator functions" +msgstr "异步生成器函数" + +#: ../../reference/datamodel.rst:671 +msgid "" +"A function or method which is defined using :keyword:`async def` and which " +"uses the :keyword:`yield` statement is called a :dfn:`asynchronous generator" +" function`. Such a function, when called, returns an asynchronous iterator " +"object which can be used in an :keyword:`async for` statement to execute the" +" body of the function." +msgstr "" +"使用 :keyword:`async def` 来定义并包含 :keyword:`yield` 语句的函数或方法就被称为 " +":dfn:`异步生成器函数`。这样的函数在被调用时会返回一个异步迭代器对象,该对象可在 :keyword:`async for` 语句中用来执行函数体。" + +#: ../../reference/datamodel.rst:677 +msgid "" +"Calling the asynchronous iterator's :meth:`aiterator.__anext__ " +"` method will return an :term:`awaitable` which when " +"awaited will execute until it provides a value using the :keyword:`yield` " +"expression. When the function executes an empty :keyword:`return` statement" +" or falls off the end, a :exc:`StopAsyncIteration` exception is raised and " +"the asynchronous iterator will have reached the end of the set of values to " +"be yielded." +msgstr "" +"调用异步迭代器的 :meth:`aiterator.__anext__ ` 方法将返回一个 " +":term:`awaitable`,此对象会在被等待时执行直到使用 :keyword:`yield` 产生一个值。 当函数执行到空的 " +":keyword:`return` 语句或函数末尾时,将会引发 :exc:`StopAsyncIteration` " +"异常并且异步迭代器也将到达要产生的值集合的末尾。" + +#: ../../reference/datamodel.rst:699 +msgid "Built-in functions" +msgstr "内置函数" + +#: ../../reference/datamodel.rst:692 +msgid "" +"A built-in function object is a wrapper around a C function. Examples of " +"built-in functions are :func:`len` and :func:`math.sin` (:mod:`math` is a " +"standard built-in module). The number and type of the arguments are " +"determined by the C function. Special read-only attributes: :attr:`__doc__` " +"is the function's documentation string, or ``None`` if unavailable; " +":attr:`~definition.__name__` is the function's name; :attr:`__self__` is set" +" to ``None`` (but see the next item); :attr:`__module__` is the name of the " +"module the function was defined in or ``None`` if unavailable." +msgstr "" +"内置函数对象是对于 C 函数的外部封装。内置函数的例子包括 :func:`len` 和 :func:`math.sin` (:mod:`math` " +"是一个标准内置模块)。内置函数参数的数量和类型由 C 函数决定。特殊的只读属性: :attr:`__doc__` 是函数的文档字符串,如果没有则为 " +"``None``; :attr:`~definition.__name__` 是函数的名称; :attr:`__self__` 设定为 ``None``" +" (参见下一条目); :attr:`__module__` 是函数所属模块的名称,如果没有则为 ``None``。" + +#: ../../reference/datamodel.rst:711 +msgid "Built-in methods" +msgstr "内置方法" + +#: ../../reference/datamodel.rst:707 +msgid "" +"This is really a different disguise of a built-in function, this time " +"containing an object passed to the C function as an implicit extra argument." +" An example of a built-in method is ``alist.append()``, assuming *alist* is" +" a list object. In this case, the special read-only attribute " +":attr:`__self__` is set to the object denoted by *alist*." +msgstr "" +"此类型实际上是内置函数的另一种形式,只不过还包含了一个传入 C 函数的对象作为隐式的额外参数。内置方法的一个例子是 " +"``alist.append()``,其中 *alist* 为一个列表对象。在此示例中,特殊的只读属性 :attr:`__self__` 会被设为 " +"*alist* 所标记的对象。" + +#: ../../reference/datamodel.rst:718 +msgid "Classes" +msgstr "类" + +#: ../../reference/datamodel.rst:714 +msgid "" +"Classes are callable. These objects normally act as factories for new " +"instances of themselves, but variations are possible for class types that " +"override :meth:`~object.__new__`. The arguments of the call are passed to " +":meth:`__new__` and, in the typical case, to :meth:`~object.__init__` to " +"initialize the new instance." +msgstr "" +"类是可调用对象。 这些对象通常是用作创建自身实例的“工厂”,但类也可以有重载 :meth:`~object.__new__` 的变体类型。 " +"调用的参数会传递给 :meth:`__new__`,并且在通常情况下,也会传递给 :meth:`~object.__init__` " +"来初始化新的实例。to initialize the new instance." + +#: ../../reference/datamodel.rst:723 +msgid "Class Instances" +msgstr "类实例" + +#: ../../reference/datamodel.rst:721 +msgid "" +"Instances of arbitrary classes can be made callable by defining a " +":meth:`~object.__call__` method in their class." +msgstr "任意类的实例可以通过在其所属类中定义 :meth:`~object.__call__` 方法变成可调用对象。" + +#: ../../reference/datamodel.rst:773 +msgid "Modules" +msgstr "模块" + +#: ../../reference/datamodel.rst:730 +msgid "" +"Modules are a basic organizational unit of Python code, and are created by " +"the :ref:`import system ` as invoked either by the " +":keyword:`import` statement, or by calling functions such as " +":func:`importlib.import_module` and built-in :func:`__import__`. A module " +"object has a namespace implemented by a dictionary object (this is the " +"dictionary referenced by the ``__globals__`` attribute of functions defined " +"in the module). Attribute references are translated to lookups in this " +"dictionary, e.g., ``m.x`` is equivalent to ``m.__dict__[\"x\"]``. A module " +"object does not contain the code object used to initialize the module (since" +" it isn't needed once the initialization is done)." +msgstr "" +"模块是 Python 代码的基本组织单元,由 :ref:`导入系统 ` 创建,由 :keyword:`import` " +"语句发起调用,或者通过 :func:`importlib.import_module` 和内置的 :func:`__import__` 等函数发起调用。" +" 模块对象具有由字典对象实现的命名空间(这是被模块中定义的函数的 ``__globals__`` 属性引用的字典)。 " +"属性引用被转换为该字典中的查找,例如 ``m.x`` 相当于 ``m.__dict__[\"x\"]``。 " +"模块对象不包含用于初始化模块的代码对象(因为初始化完成后不需要它)。" + +#: ../../reference/datamodel.rst:742 +msgid "" +"Attribute assignment updates the module's namespace dictionary, e.g., ``m.x " +"= 1`` is equivalent to ``m.__dict__[\"x\"] = 1``." +msgstr "属性赋值会更新模块的命名空间字典,例如 ``m.x = 1`` 等同于 ``m.__dict__[\"x\"] = 1``。" + +#: ../../reference/datamodel.rst:752 +msgid "" +"Predefined (writable) attributes: :attr:`__name__` is the module's name; " +":attr:`__doc__` is the module's documentation string, or ``None`` if " +"unavailable; :attr:`__annotations__` (optional) is a dictionary containing " +":term:`variable annotations ` collected during module " +"body execution; :attr:`__file__` is the pathname of the file from which the " +"module was loaded, if it was loaded from a file. The :attr:`__file__` " +"attribute may be missing for certain types of modules, such as C modules " +"that are statically linked into the interpreter; for extension modules " +"loaded dynamically from a shared library, it is the pathname of the shared " +"library file." +msgstr "" +"预定义的 (可写) 属性: :attr:`__name__` 为模块的名称; :attr:`__doc__` 为模块的文档字符串,如果没有则为 " +"``None``; :attr:`__annotations__` (可选) 为一个包含 :term:`变量标注 ` 的字典,它是在模块体执行时获取的; :attr:`__file__` " +"是模块对应的被加载文件的路径名,如果它是加载自一个文件的话。某些类型的模块可能没有 :attr:`__file__` 属性,例如 C " +"模块是静态链接到解释器内部的; 对于从一个共享库动态加载的扩展模块来说该属性为该共享库文件的路径名。" + +#: ../../reference/datamodel.rst:765 +msgid "" +"Special read-only attribute: :attr:`~object.__dict__` is the module's " +"namespace as a dictionary object." +msgstr "特殊的只读属性: :attr:`~object.__dict__` 为以字典对象表示的模块命名空间。" + +#: ../../reference/datamodel.rst:770 +msgid "" +"Because of the way CPython clears module dictionaries, the module dictionary" +" will be cleared when the module falls out of scope even if the dictionary " +"still has live references. To avoid this, copy the dictionary or keep the " +"module around while using its dictionary directly." +msgstr "" +"由于 CPython " +"清理模块字典的设定,当模块离开作用域时模块字典将会被清理,即使该字典还有活动的引用。想避免此问题,可复制该字典或保持模块状态以直接使用其字典。" + +#: ../../reference/datamodel.rst:832 +msgid "Custom classes" +msgstr "自定义类" + +#: ../../reference/datamodel.rst:776 +msgid "" +"Custom class types are typically created by class definitions (see section " +":ref:`class`). A class has a namespace implemented by a dictionary object. " +"Class attribute references are translated to lookups in this dictionary, " +"e.g., ``C.x`` is translated to ``C.__dict__[\"x\"]`` (although there are a " +"number of hooks which allow for other means of locating attributes). When " +"the attribute name is not found there, the attribute search continues in the" +" base classes. This search of the base classes uses the C3 method resolution" +" order which behaves correctly even in the presence of 'diamond' inheritance" +" structures where there are multiple inheritance paths leading back to a " +"common ancestor. Additional details on the C3 MRO used by Python can be " +"found in the documentation accompanying the 2.3 release at " +"https://www.python.org/download/releases/2.3/mro/." +msgstr "" +"自定义类这种类型一般通过类定义来创建 (参见 :ref:`class` " +"一节)。每个类都有通过一个字典对象实现的独立命名空间。类属性引用会被转化为在此字典中查找,例如 ``C.x`` 会被转化为 " +"``C.__dict__[\"x\"]`` " +"(不过也存在一些钩子对象以允许其他定位属性的方式)。当未在其中发现某个属性名称时,会继续在基类中查找。这种基类查找使用 C3 方法解析顺序,即使存在 " +"'钻石形' 继承结构即有多条继承路径连到一个共同祖先也能保持正确的行为。有关 Python 使用的 C3 MRO 的详情可查看配合 2.3 版发布的文档" +" https://www.python.org/download/releases/2.3/mro/." + +#: ../../reference/datamodel.rst:800 +msgid "" +"When a class attribute reference (for class :class:`C`, say) would yield a " +"class method object, it is transformed into an instance method object whose " +":attr:`__self__` attribute is :class:`C`. When it would yield a static " +"method object, it is transformed into the object wrapped by the static " +"method object. See section :ref:`descriptors` for another way in which " +"attributes retrieved from a class may differ from those actually contained " +"in its :attr:`~object.__dict__`." +msgstr "" +"当一个类属性引用 (假设类名为 :class:`C`) 会产生一个类方法对象时,它将转化为一个 :attr:`__self__` 属性为 " +":class:`C` 的实例方法对象。当其会产生一个静态方法对象时,它将转化为该静态方法对象所封装的对象。从类的 " +":attr:`~object.__dict__` 所包含内容以外获取属性的其他方式请参看 :ref:`descriptors` 一节。" + +#: ../../reference/datamodel.rst:810 +msgid "" +"Class attribute assignments update the class's dictionary, never the " +"dictionary of a base class." +msgstr "类属性赋值会更新类的字典,但不会更新基类的字典。" + +#: ../../reference/datamodel.rst:815 +msgid "" +"A class object can be called (see above) to yield a class instance (see " +"below)." +msgstr "类对象可被调用 (见上文) 以产生一个类实例 (见下文)。" + +#: ../../reference/datamodel.rst:825 +msgid "" +"Special attributes: :attr:`~definition.__name__` is the class name; " +":attr:`__module__` is the module name in which the class was defined; " +":attr:`~object.__dict__` is the dictionary containing the class's namespace;" +" :attr:`~class.__bases__` is a tuple containing the base classes, in the " +"order of their occurrence in the base class list; :attr:`__doc__` is the " +"class's documentation string, or ``None`` if undefined; " +":attr:`__annotations__` (optional) is a dictionary containing " +":term:`variable annotations ` collected during class " +"body execution." +msgstr "" +"特殊属性: :attr:`~definition.__name__` 为类的名称; :attr:`__module__` 为类所在模块的名称; " +":attr:`~object.__dict__` 为包含类命名空间的字典; :attr:`~class.__bases__` " +"为包含基类的元组,按其在基类列表中的出现顺序排列; :attr:`__doc__` 为类的文档字符串,如果没有则为 ``None``; " +":attr:`__annotations__` (可选) 为一个包含 :term:`变量标注 ` " +"的字典,它是在类体执行时获取的。" + +#: ../../reference/datamodel.rst:875 +msgid "Class instances" +msgstr "类实例" + +#: ../../reference/datamodel.rst:841 +msgid "" +"A class instance is created by calling a class object (see above). A class " +"instance has a namespace implemented as a dictionary which is the first " +"place in which attribute references are searched. When an attribute is not " +"found there, and the instance's class has an attribute by that name, the " +"search continues with the class attributes. If a class attribute is found " +"that is a user-defined function object, it is transformed into an instance " +"method object whose :attr:`__self__` attribute is the instance. Static " +"method and class method objects are also transformed; see above under " +"\"Classes\". See section :ref:`descriptors` for another way in which " +"attributes of a class retrieved via its instances may differ from the " +"objects actually stored in the class's :attr:`~object.__dict__`. If no " +"class attribute is found, and the object's class has a " +":meth:`~object.__getattr__` method, that is called to satisfy the lookup." +msgstr "" +"类实例可通过调用类对象来创建(见上文)。 每个类实例都有通过一个字典对象实现的独立命名空间,属性引用会首先在此字典中查找。 " +"当未在其中发现某个属性,而实例对应的类中有该属性时,会继续在类属性中查找。 如果找到的类属性为一个用户自定义函数对象,它会被转化为实例方法对象,其 " +":attr:`__self__` 属性即该实例。 静态方法和类方法对象也会被转化;参见上文的“类”小节。 " +"要了解其他通过类实例来获取相应类属性的方式请参阅 :ref:`descriptors` 小节,这样得到的属性可能与实际存放在类的 " +":attr:`~object.__dict__` 中的对象不同。 如果未找到类属性,而对象所属的类具有 " +":meth:`~object.__getattr__` 方法,则会调用该方法来满足查找要求。" + +#: ../../reference/datamodel.rst:857 +msgid "" +"Attribute assignments and deletions update the instance's dictionary, never " +"a class's dictionary. If the class has a :meth:`~object.__setattr__` or " +":meth:`~object.__delattr__` method, this is called instead of updating the " +"instance dictionary directly." +msgstr "" +"属性赋值和删除会更新实例的字典,但绝不会更新类的字典。 如果类具有 :meth:`~object.__setattr__` 或 " +":meth:`~object.__delattr__` 方法,则将调用该方法而不再直接更新实例的字典。" + +#: ../../reference/datamodel.rst:867 +msgid "" +"Class instances can pretend to be numbers, sequences, or mappings if they " +"have methods with certain special names. See section :ref:`specialnames`." +msgstr "如果类实例具有某些特殊名称的方法,就可以伪装为数字、序列或映射。参见 :ref:`specialnames` 一节。" + +#: ../../reference/datamodel.rst:874 +msgid "" +"Special attributes: :attr:`~object.__dict__` is the attribute dictionary; " +":attr:`~instance.__class__` is the instance's class." +msgstr "" +"特殊属性: :attr:`~object.__dict__` 为属性字典; :attr:`~instance.__class__` 为实例对应的类。" + +#: ../../reference/datamodel.rst:901 +msgid "I/O objects (also known as file objects)" +msgstr "I/O 对象 (或称文件对象)" + +#: ../../reference/datamodel.rst:891 +msgid "" +"A :term:`file object` represents an open file. Various shortcuts are " +"available to create file objects: the :func:`open` built-in function, and " +"also :func:`os.popen`, :func:`os.fdopen`, and the " +":meth:`~socket.socket.makefile` method of socket objects (and perhaps by " +"other functions or methods provided by extension modules)." +msgstr "" +":term:`file object` 表示一个打开的文件。有多种快捷方式可用来创建文件对象: :func:`open` 内置函数,以及 " +":func:`os.popen`, :func:`os.fdopen` 和 socket 对象的 " +":meth:`~socket.socket.makefile` 方法 (还可能使用某些扩展模块所提供的其他函数或方法)。" + +#: ../../reference/datamodel.rst:897 +msgid "" +"The objects ``sys.stdin``, ``sys.stdout`` and ``sys.stderr`` are initialized" +" to file objects corresponding to the interpreter's standard input, output " +"and error streams; they are all open in text mode and therefore follow the " +"interface defined by the :class:`io.TextIOBase` abstract class." +msgstr "" +"``sys.stdin``, ``sys.stdout`` 和 ``sys.stderr`` " +"会初始化为对应于解释器标准输入、输出和错误流的文件对象;它们都会以文本模式打开,因此都遵循 :class:`io.TextIOBase` " +"抽象类所定义的接口。" + +#: ../../reference/datamodel.rst:1153 +msgid "Internal types" +msgstr "内部类型" + +#: ../../reference/datamodel.rst:908 +msgid "" +"A few types used internally by the interpreter are exposed to the user. " +"Their definitions may change with future versions of the interpreter, but " +"they are mentioned here for completeness." +msgstr "某些由解释器内部使用的类型也被暴露给用户。它们的定义可能随未来解释器版本的更新而变化,为内容完整起见在此处一并介绍。" + +#: ../../reference/datamodel.rst:983 +msgid "Code objects" +msgstr "代码对象" + +#: ../../reference/datamodel.rst:915 +msgid "" +"Code objects represent *byte-compiled* executable Python code, or " +":term:`bytecode`. The difference between a code object and a function object" +" is that the function object contains an explicit reference to the " +"function's globals (the module in which it was defined), while a code object" +" contains no context; also the default argument values are stored in the " +"function object, not in the code object (because they represent values " +"calculated at run-time). Unlike function objects, code objects are " +"immutable and contain no references (directly or indirectly) to mutable " +"objects." +msgstr "" +"代码对象表示 *编译为字节的* 可执行 Python 代码,或称 " +":term:`bytecode`。代码对象和函数对象的区别在于函数对象包含对函数全局对象 (函数所属的模块) " +"的显式引用,而代码对象不包含上下文;而且默认参数值会存放于函数对象而不是代码对象内 " +"(因为它们表示在运行时算出的值)。与函数对象不同,代码对象不可变,也不包含对可变对象的引用 (不论是直接还是间接)。" + +#: ../../reference/datamodel.rst:942 +msgid "" +"Special read-only attributes: :attr:`co_name` gives the function name; " +":attr:`co_argcount` is the total number of positional arguments (including " +"positional-only arguments and arguments with default values); " +":attr:`co_posonlyargcount` is the number of positional-only arguments " +"(including arguments with default values); :attr:`co_kwonlyargcount` is the " +"number of keyword-only arguments (including arguments with default values); " +":attr:`co_nlocals` is the number of local variables used by the function " +"(including arguments); :attr:`co_varnames` is a tuple containing the names " +"of the local variables (starting with the argument names); " +":attr:`co_cellvars` is a tuple containing the names of local variables that " +"are referenced by nested functions; :attr:`co_freevars` is a tuple " +"containing the names of free variables; :attr:`co_code` is a string " +"representing the sequence of bytecode instructions; :attr:`co_consts` is a " +"tuple containing the literals used by the bytecode; :attr:`co_names` is a " +"tuple containing the names used by the bytecode; :attr:`co_filename` is the " +"filename from which the code was compiled; :attr:`co_firstlineno` is the " +"first line number of the function; :attr:`co_lnotab` is a string encoding " +"the mapping from bytecode offsets to line numbers (for details see the " +"source code of the interpreter); :attr:`co_stacksize` is the required stack " +"size; :attr:`co_flags` is an integer encoding a number of flags for the " +"interpreter." +msgstr "" +"特殊的只读属性: :attr:`co_name` 给出了函数名; :attr:`co_argcount` 为位置参数的总数量 " +"(包括仅限位置参数和带有默认值的参数); :attr:`co_posonlyargcount` 为仅限位置参数的数量 (包括带有默认值的参数); " +":attr:`co_kwonlyargcount` 为仅限关键字参数的数量 (包括带有默认值的参数); :attr:`co_nlocals` " +"为函数使用的局部变量的数量 (包括参数); :attr:`co_varnames` 为一个包含局部变量名称的元组 (参数名排在最前面); " +":attr:`co_cellvars` 为一个包含被嵌套函数所引用的局部变量名称的元组; :attr:`co_freevars` " +"为一个包含自由变量名称的元组; :attr:`co_code` 为一个表示字节码指令序列的字符口中; :attr:`co_consts` " +"为一个包含字节码所使用的字面值的元组; :attr:`co_names` 为一个包含字节码所使用的名称的元组; :attr:`co_filename` " +"为被编码代码所在的文件名; :attr:`co_firstlineno` 为函数首行的行号; :attr:`co_lnotab` " +"为一个字符串,其中编码了从字节码偏移量到行号的映射 (详情参见解释器的源代码); :attr:`co_stacksize` 为要求的栈大小; " +":attr:`co_flags` 为一个整数,其中编码了解释器所用的多个旗标。" + +#: ../../reference/datamodel.rst:966 +msgid "" +"The following flag bits are defined for :attr:`co_flags`: bit ``0x04`` is " +"set if the function uses the ``*arguments`` syntax to accept an arbitrary " +"number of positional arguments; bit ``0x08`` is set if the function uses the" +" ``**keywords`` syntax to accept arbitrary keyword arguments; bit ``0x20`` " +"is set if the function is a generator." +msgstr "" +"以下是可用于 :attr:`co_flags` 的标志位定义:如果函数使用 ``*arguments`` 语法来接受任意数量的位置参数,则 " +"``0x04`` 位被设置;如果函数使用 ``**keywords`` 语法来接受任意数量的关键字参数,则 ``0x08`` " +"位被设置;如果函数是一个生成器,则 ``0x20`` 位被设置。" + +#: ../../reference/datamodel.rst:972 +msgid "" +"Future feature declarations (``from __future__ import division``) also use " +"bits in :attr:`co_flags` to indicate whether a code object was compiled with" +" a particular feature enabled: bit ``0x2000`` is set if the function was " +"compiled with future division enabled; bits ``0x10`` and ``0x1000`` were " +"used in earlier versions of Python." +msgstr "" +"未来特性声明 (``from __future__ import division``) 也使用 :attr:`co_flags` " +"中的标志位来指明代码对象的编译是否启用特定的特性: 如果函数编译时启用未来除法特性则设置 ``0x2000`` 位; 在更早的 Python " +"版本中则使用 ``0x10`` 和 ``0x1000`` 位。" + +#: ../../reference/datamodel.rst:978 +msgid "Other bits in :attr:`co_flags` are reserved for internal use." +msgstr ":attr:`co_flags` 中的其他位被保留为内部使用。" + +#: ../../reference/datamodel.rst:982 +msgid "" +"If a code object represents a function, the first item in :attr:`co_consts` " +"is the documentation string of the function, or ``None`` if undefined." +msgstr "如果代码对象表示一个函数,:attr:`co_consts` 中的第一项将是函数的文档字符串,如果未定义则为 ``None``。" + +#: ../../reference/datamodel.rst:1045 +msgid "Frame objects" +msgstr "帧对象" + +#: ../../reference/datamodel.rst:990 +msgid "" +"Frame objects represent execution frames. They may occur in traceback " +"objects (see below), and are also passed to registered trace functions." +msgstr "帧对象表示执行帧。它们可能出现在回溯对象中 (见下文),还会被传递给注册跟踪函数。" + +#: ../../reference/datamodel.rst:1001 +msgid "" +"Special read-only attributes: :attr:`f_back` is to the previous stack frame " +"(towards the caller), or ``None`` if this is the bottom stack frame; " +":attr:`f_code` is the code object being executed in this frame; " +":attr:`f_locals` is the dictionary used to look up local variables; " +":attr:`f_globals` is used for global variables; :attr:`f_builtins` is used " +"for built-in (intrinsic) names; :attr:`f_lasti` gives the precise " +"instruction (this is an index into the bytecode string of the code object)." +msgstr "" +"特殊的只读属性: :attr:`f_back` 为前一堆栈帧 (指向调用者),如是最底层堆栈帧则为 ``None``; :attr:`f_code` " +"为此帧中所执行的代码对象; :attr:`f_locals` 为用于查找本地变量的字典; :attr:`f_globals` 则用于查找全局变量; " +":attr:`f_builtins` 用于查找内置 (固有) 名称; :attr:`f_lasti` 给出精确指令 " +"(这是代码对象的字节码字符串的一个索引)。" + +#: ../../reference/datamodel.rst:1009 +msgid "" +"Accessing ``f_code`` raises an :ref:`auditing event ` " +"``object.__getattr__`` with arguments ``obj`` and ``\"f_code\"``." +msgstr "" +"访问 ``f_code`` 会引发一个 :ref:`审计事件 ` ``object.__getattr__``,附带参数 " +"``obj`` 和 ``\"f_code\"``。" + +#: ../../reference/datamodel.rst:1018 +msgid "" +"Special writable attributes: :attr:`f_trace`, if not ``None``, is a function" +" called for various events during code execution (this is used by the " +"debugger). Normally an event is triggered for each new source line - this " +"can be disabled by setting :attr:`f_trace_lines` to :const:`False`." +msgstr "" +"特殊的可写属性: :attr:`f_trace`,如果不为 ``None``,则是在代码执行期间调用各类事件的函数 " +"(由调试器使用)。通常每个新源码行会触发一个事件 - 这可以通过将 :attr:`f_trace_lines` 设为 :const:`False` " +"来禁用。" + +#: ../../reference/datamodel.rst:1023 +msgid "" +"Implementations *may* allow per-opcode events to be requested by setting " +":attr:`f_trace_opcodes` to :const:`True`. Note that this may lead to " +"undefined interpreter behaviour if exceptions raised by the trace function " +"escape to the function being traced." +msgstr "" +"具体的实现 *可能* 会通过将 :attr:`f_trace_opcodes` 设为 :const:`True` " +"来允许按操作码请求事件。请注意如果跟踪函数引发的异常逃逸到被跟踪的函数中,这可能会导致未定义的解释器行为。" + +#: ../../reference/datamodel.rst:1028 +msgid "" +":attr:`f_lineno` is the current line number of the frame --- writing to this" +" from within a trace function jumps to the given line (only for the bottom-" +"most frame). A debugger can implement a Jump command (aka Set Next " +"Statement) by writing to f_lineno." +msgstr "" +":attr:`f_lineno` 为帧的当前行号 --- 在这里写入从一个跟踪函数内部跳转的指定行 (仅用于最底层的帧)。调试器可以通过写入 " +"f_lineno 实现一个 Jump 命令 (即设置下一语句)。" + +#: ../../reference/datamodel.rst:1033 +msgid "Frame objects support one method:" +msgstr "帧对象支持一个方法:" + +#: ../../reference/datamodel.rst:1037 +msgid "" +"This method clears all references to local variables held by the frame. " +"Also, if the frame belonged to a generator, the generator is finalized. " +"This helps break reference cycles involving frame objects (for example when " +"catching an exception and storing its traceback for later use)." +msgstr "" +"此方法清除该帧持有的全部对本地变量的引用。而且如果该帧属于一个生成器,生成器会被完成。这有助于打破包含帧对象的循环引用 " +"(例如当捕获一个异常并保存其回溯在之后使用)。" + +#: ../../reference/datamodel.rst:1043 +msgid ":exc:`RuntimeError` is raised if the frame is currently executing." +msgstr "如果该帧当前正在执行,则会引发 :exc:`RuntimeError`" + +#: ../../reference/datamodel.rst:1108 +msgid "Traceback objects" +msgstr "回溯对象" + +#: ../../reference/datamodel.rst:1060 +msgid "" +"Traceback objects represent a stack trace of an exception. A traceback " +"object is implicitly created when an exception occurs, and may also be " +"explicitly created by calling :class:`types.TracebackType`." +msgstr "" +"回溯对象表示一个异常的栈跟踪记录。当异常发生时会隐式地创建一个回溯对象,也可能通过调用 :class:`types.TracebackType` " +"显式地创建。" + +#: ../../reference/datamodel.rst:1064 +msgid "" +"For implicitly created tracebacks, when the search for an exception handler " +"unwinds the execution stack, at each unwound level a traceback object is " +"inserted in front of the current traceback. When an exception handler is " +"entered, the stack trace is made available to the program. (See section " +":ref:`try`.) It is accessible as the third item of the tuple returned by " +"``sys.exc_info()``, and as the ``__traceback__`` attribute of the caught " +"exception." +msgstr "" +"对于隐式地创建的回溯对象,当查找异常句柄使得执行栈展开时,会在每个展开层级的当前回溯之前插入一个回溯对象。当进入一个异常句柄时,栈跟踪将对程序启用。(参见" +" :ref:`try` 一节。) 它可作为 ``sys.exc_info()`` 所返回的元组的第三项,以及所捕获异常的 " +"``__traceback__`` 属性被获取。" + +#: ../../reference/datamodel.rst:1072 +msgid "" +"When the program contains no suitable handler, the stack trace is written " +"(nicely formatted) to the standard error stream; if the interpreter is " +"interactive, it is also made available to the user as " +"``sys.last_traceback``." +msgstr "" +"当程序不包含可用的句柄时,栈跟踪会 (以良好的格式) 写入标准错误流;如果解释器处于交互模式,它也可作为 ``sys.last_traceback`` " +"对用户启用。" + +#: ../../reference/datamodel.rst:1077 +msgid "" +"For explicitly created tracebacks, it is up to the creator of the traceback " +"to determine how the ``tb_next`` attributes should be linked to form a full " +"stack trace." +msgstr "对于显式创建的回溯对象,则由回溯对象的创建者来决定应该如何链接 ``tb_next`` 属性来构成完整的栈跟踪。" + +#: ../../reference/datamodel.rst:1087 +msgid "" +"Special read-only attributes: :attr:`tb_frame` points to the execution frame" +" of the current level; :attr:`tb_lineno` gives the line number where the " +"exception occurred; :attr:`tb_lasti` indicates the precise instruction. The " +"line number and last instruction in the traceback may differ from the line " +"number of its frame object if the exception occurred in a :keyword:`try` " +"statement with no matching except clause or with a finally clause." +msgstr "" +"特殊的只读属性: :attr:`tb_frame` 指向当前层级的执行帧; :attr:`tb_lineno` 给出发生异常所在的行号; " +":attr:`tb_lasti` 标示具体指令。如果异常发生于没有匹配的 except 子句或有 finally 子句的 :keyword:`try` " +"语句中,回溯对象中的行号和最后指令可能与相应帧对象中行号不同。" + +#: ../../reference/datamodel.rst:1096 +msgid "" +"Accessing ``tb_frame`` raises an :ref:`auditing event ` " +"``object.__getattr__`` with arguments ``obj`` and ``\"tb_frame\"``." +msgstr "" +"访问 ``tb_frame`` 会引发一个 :ref:`审计事件 ` ``object.__getattr__``,附带参数 " +"``obj`` 和 ``\"tb_frame\"``。" + +#: ../../reference/datamodel.rst:1102 +msgid "" +"Special writable attribute: :attr:`tb_next` is the next level in the stack " +"trace (towards the frame where the exception occurred), or ``None`` if there" +" is no next level." +msgstr "特殊的可写属性: :attr:`tb_next` 为栈跟踪中的下一层级 (通往发生异常的帧),如果没有下一层级则为 ``None``。" + +#: ../../reference/datamodel.rst:1106 +msgid "" +"Traceback objects can now be explicitly instantiated from Python code, and " +"the ``tb_next`` attribute of existing instances can be updated." +msgstr "回溯对象现在可以使用 Python 代码显式地实例化,现有实例的 ``tb_next`` 属性可以被更新。" + +#: ../../reference/datamodel.rst:1135 +msgid "Slice objects" +msgstr "切片对象" + +#: ../../reference/datamodel.rst:1113 +msgid "" +"Slice objects are used to represent slices for :meth:`~object.__getitem__` " +"methods. They are also created by the built-in :func:`slice` function." +msgstr "" +"切片对象被用来表示 :meth:`~object.__getitem__` 方法所使用的切片。 该对象也可使用内置的 :func:`slice` " +"函数来创建。" + +#: ../../reference/datamodel.rst:1122 +msgid "" +"Special read-only attributes: :attr:`~slice.start` is the lower bound; " +":attr:`~slice.stop` is the upper bound; :attr:`~slice.step` is the step " +"value; each is ``None`` if omitted. These attributes can have any type." +msgstr "" +"特殊的只读属性: :attr:`~slice.start` 为下界; :attr:`~slice.stop` 为上界; " +":attr:`~slice.step` 为步长值; 各值如省略则为 ``None``。这些属性可具有任意类型。" + +#: ../../reference/datamodel.rst:1126 +msgid "Slice objects support one method:" +msgstr "切片对象支持一个方法:" + +#: ../../reference/datamodel.rst:1130 +msgid "" +"This method takes a single integer argument *length* and computes " +"information about the slice that the slice object would describe if applied " +"to a sequence of *length* items. It returns a tuple of three integers; " +"respectively these are the *start* and *stop* indices and the *step* or " +"stride length of the slice. Missing or out-of-bounds indices are handled in " +"a manner consistent with regular slices." +msgstr "" +"此方法接受一个整型参数 *length* 并计算在切片对象被应用到 *length* 指定长度的条目序列时切片的相关信息应如何描述。 " +"其返回值为三个整型数组成的元组;这些数分别为切片的 *start* 和 *stop* 索引号以及 *step* " +"步长值。索引号缺失或越界则按照与正规切片相一致的方式处理。" + +#: ../../reference/datamodel.rst:1145 +msgid "Static method objects" +msgstr "静态方法对象" + +#: ../../reference/datamodel.rst:1138 +msgid "" +"Static method objects provide a way of defeating the transformation of " +"function objects to method objects described above. A static method object " +"is a wrapper around any other object, usually a user-defined method object. " +"When a static method object is retrieved from a class or a class instance, " +"the object actually returned is the wrapped object, which is not subject to " +"any further transformation. Static method objects are not themselves " +"callable, although the objects they wrap usually are. Static method objects " +"are created by the built-in :func:`staticmethod` constructor." +msgstr "" +"静态方法对象提供了一种避免上文所述将函数对象转换为方法对象的方式。静态方法对象为对任意其他对象的封装,通常用来封装用户定义方法对象。当从类或类实例获取一个静态方法对象时,实际返回的对象是封装的对象,它不会被进一步转换。静态方法对象自身不是可调用的,但它们所封装的对象通常都是可调用的。静态方法对象可通过内置的" +" :func:`staticmethod` 构造器来创建。" + +#: ../../reference/datamodel.rst:1153 +msgid "Class method objects" +msgstr "类方法对象" + +#: ../../reference/datamodel.rst:1148 +msgid "" +"A class method object, like a static method object, is a wrapper around " +"another object that alters the way in which that object is retrieved from " +"classes and class instances. The behaviour of class method objects upon such" +" retrieval is described above, under \"User-defined methods\". Class method " +"objects are created by the built-in :func:`classmethod` constructor." +msgstr "" +"类方法对象和静态方法一样是对其他对象的封装,会改变从类或类实例获取该对象的方式。类方法对象在此类获取操作中的行为已在上文 \"用户定义方法\" " +"一节中描述。类方法对象可通过内置的 :func:`classmethod` 构造器来创建。" + +#: ../../reference/datamodel.rst:1158 +msgid "Special method names" +msgstr "特殊方法名称" + +#: ../../reference/datamodel.rst:1164 +msgid "" +"A class can implement certain operations that are invoked by special syntax " +"(such as arithmetic operations or subscripting and slicing) by defining " +"methods with special names. This is Python's approach to :dfn:`operator " +"overloading`, allowing classes to define their own behavior with respect to " +"language operators. For instance, if a class defines a method named " +":meth:`~object.__getitem__`, and ``x`` is an instance of this class, then " +"``x[i]`` is roughly equivalent to ``type(x).__getitem__(x, i)``. Except " +"where mentioned, attempts to execute an operation raise an exception when no" +" appropriate method is defined (typically :exc:`AttributeError` or " +":exc:`TypeError`)." +msgstr "" +"一个类可以通过定义具有特殊名称的方法来实现由特殊语法来唤起的特定操作(例如算术运算或抽取与切片)。 这是 Python 实现 :dfn:`运算符重载` " +"的方式,允许每个类自行定义基于该语言运算符的特定行为。 举例来说,如果一个类定义了名为 :meth:`~object.__getitem__` " +"的方法,并且 ``x`` 是该类的一个实例,则 ``x[i]`` 基本就等价于 ``type(x).__getitem__(x, i)``。 " +"除非有说明例外情况,在没有定义适当方法的时候尝试执行某种操作将引发一个异常 (通常为 :exc:`AttributeError` 或 " +":exc:`TypeError`)。" + +#: ../../reference/datamodel.rst:1175 +msgid "" +"Setting a special method to ``None`` indicates that the corresponding " +"operation is not available. For example, if a class sets " +":meth:`~object.__iter__` to ``None``, the class is not iterable, so calling " +":func:`iter` on its instances will raise a :exc:`TypeError` (without falling" +" back to :meth:`~object.__getitem__`). [#]_" +msgstr "" +"将一个特殊方法设为 ``None`` 表示对应的操作不可用。 例如,如果一个类将 :meth:`~object.__iter__` 设为 " +"``None``,则该类就是不可迭代的,因此对其实例调用 :func:`iter` 将引发一个 :exc:`TypeError` (而不会回退至 " +":meth:`~object.__getitem__`)。 [#]_" + +#: ../../reference/datamodel.rst:1181 +msgid "" +"When implementing a class that emulates any built-in type, it is important " +"that the emulation only be implemented to the degree that it makes sense for" +" the object being modelled. For example, some sequences may work well with " +"retrieval of individual elements, but extracting a slice may not make sense." +" (One example of this is the :class:`~xml.dom.NodeList` interface in the " +"W3C's Document Object Model.)" +msgstr "" +"在实现模拟任何内置类型的类时,很重要的一点是模拟的实现程度对于被模拟对象来说应当是有意义的。例如,提取单个元素的操作对于某些序列来说是适宜的,但提取切片可能就没有意义。(这种情况的一个实例是" +" W3C 的文档对象模型中的 :class:`~xml.dom.NodeList` 接口。)" + +#: ../../reference/datamodel.rst:1192 +msgid "Basic customization" +msgstr "基本定制" + +#: ../../reference/datamodel.rst:1198 +msgid "" +"Called to create a new instance of class *cls*. :meth:`__new__` is a static" +" method (special-cased so you need not declare it as such) that takes the " +"class of which an instance was requested as its first argument. The " +"remaining arguments are those passed to the object constructor expression " +"(the call to the class). The return value of :meth:`__new__` should be the " +"new object instance (usually an instance of *cls*)." +msgstr "" +"调用以创建一个 *cls* 类的新实例。:meth:`__new__` 是一个静态方法 " +"(因为是特例所以你不需要显式地声明),它会将所请求实例所属的类作为第一个参数。其余的参数会被传递给对象构造器表达式 " +"(对类的调用)。:meth:`__new__` 的返回值应为新对象实例 (通常是 *cls* 的实例)。" + +#: ../../reference/datamodel.rst:1205 +msgid "" +"Typical implementations create a new instance of the class by invoking the " +"superclass's :meth:`__new__` method using ``super().__new__(cls[, ...])`` " +"with appropriate arguments and then modifying the newly-created instance as " +"necessary before returning it." +msgstr "" +"典型的实现会附带适宜的参数使用 ``super().__new__(cls[, ...])``,通过超类的 :meth:`__new__` " +"方法来创建一个类的新实例,然后根据需要修改新创建的实例再将其返回。" + +#: ../../reference/datamodel.rst:1210 +msgid "" +"If :meth:`__new__` is invoked during object construction and it returns an " +"instance of *cls*, then the new instance’s :meth:`__init__` method will be " +"invoked like ``__init__(self[, ...])``, where *self* is the new instance and" +" the remaining arguments are the same as were passed to the object " +"constructor." +msgstr "" +"如果 :meth:`__new__` 在构造对象期间被唤起并且它返回了一个 *cls* 的实例,则新实例的 :meth:`__init__` 方法将以 " +"``__init__(self[, ...])`` 的形式被唤起,其中 *self* 为新实例而其余的参数与被传给对象构造器的参数相同。" + +#: ../../reference/datamodel.rst:1215 +msgid "" +"If :meth:`__new__` does not return an instance of *cls*, then the new " +"instance's :meth:`__init__` method will not be invoked." +msgstr "如果 :meth:`__new__` 未返回一个 *cls* 的实例,则新实例的 :meth:`__init__` 方法就不会被执行。" + +#: ../../reference/datamodel.rst:1218 +msgid "" +":meth:`__new__` is intended mainly to allow subclasses of immutable types " +"(like int, str, or tuple) to customize instance creation. It is also " +"commonly overridden in custom metaclasses in order to customize class " +"creation." +msgstr "" +":meth:`__new__` 的目的主要是允许不可变类型的子类 (例如 int, str 或 tuple) " +"定制实例创建过程。它也常会在自定义元类中被重载以便定制类创建过程。" + +#: ../../reference/datamodel.rst:1227 +msgid "" +"Called after the instance has been created (by :meth:`__new__`), but before " +"it is returned to the caller. The arguments are those passed to the class " +"constructor expression. If a base class has an :meth:`__init__` method, the" +" derived class's :meth:`__init__` method, if any, must explicitly call it to" +" ensure proper initialization of the base class part of the instance; for " +"example: ``super().__init__([args...])``." +msgstr "" +"在实例 (通过 :meth:`__new__`) 被创建之后,返回调用者之前调用。其参数与传递给类构造器表达式的参数相同。一个基类如果有 " +":meth:`__init__` 方法,则其所派生的类如果也有 :meth:`__init__` " +"方法,就必须显式地调用它以确保实例基类部分的正确初始化;例如: ``super().__init__([args...])``." + +#: ../../reference/datamodel.rst:1234 +msgid "" +"Because :meth:`__new__` and :meth:`__init__` work together in constructing " +"objects (:meth:`__new__` to create it, and :meth:`__init__` to customize " +"it), no non-``None`` value may be returned by :meth:`__init__`; doing so " +"will cause a :exc:`TypeError` to be raised at runtime." +msgstr "" +"因为对象是由 :meth:`__new__` 和 :meth:`__init__` 协作构造完成的 (由 :meth:`__new__` 创建,并由 " +":meth:`__init__` 定制),所以 :meth:`__init__` 返回的值只能是 ``None``,否则会在运行时引发 " +":exc:`TypeError`。" + +#: ../../reference/datamodel.rst:1247 +msgid "" +"Called when the instance is about to be destroyed. This is also called a " +"finalizer or (improperly) a destructor. If a base class has a " +":meth:`__del__` method, the derived class's :meth:`__del__` method, if any, " +"must explicitly call it to ensure proper deletion of the base class part of " +"the instance." +msgstr "" +"在实例将被销毁时调用。 这还被称为终结器或析构器(不适当)。 如果一个基类具有 :meth:`__del__` 方法,则其所派生的类如果也有 " +":meth:`__del__` 方法,就必须显式地调用它以确保实例基类部分的正确清除。" + +#: ../../reference/datamodel.rst:1253 +msgid "" +"It is possible (though not recommended!) for the :meth:`__del__` method to " +"postpone destruction of the instance by creating a new reference to it. " +"This is called object *resurrection*. It is implementation-dependent " +"whether :meth:`__del__` is called a second time when a resurrected object is" +" about to be destroyed; the current :term:`CPython` implementation only " +"calls it once." +msgstr "" +":meth:`__del__` 方法可以 (但不推荐!) 通过创建一个该实例的新引用来推迟其销毁。这被称为对象 *重生*。:meth:`__del__`" +" 是否会在重生的对象将被销毁时再次被调用是由具体实现决定的 ;当前的 :term:`CPython` 实现只会调用一次。" + +#: ../../reference/datamodel.rst:1260 +msgid "" +"It is not guaranteed that :meth:`__del__` methods are called for objects " +"that still exist when the interpreter exits." +msgstr "当解释器退出时不会确保为仍然存在的对象调用 :meth:`__del__` 方法。" + +#: ../../reference/datamodel.rst:1265 +msgid "" +"``del x`` doesn't directly call ``x.__del__()`` --- the former decrements " +"the reference count for ``x`` by one, and the latter is only called when " +"``x``'s reference count reaches zero." +msgstr "" +"``del x`` 并不直接调用 ``x.__del__()`` --- 前者会将 ``x`` 的引用计数减一,而后者仅会在 ``x`` " +"的引用计数变为零时被调用。" + +#: ../../reference/datamodel.rst:1280 +msgid "Documentation for the :mod:`gc` module." +msgstr ":mod:`gc` 模块的文档。" + +#: ../../reference/datamodel.rst:1284 +msgid "" +"Due to the precarious circumstances under which :meth:`__del__` methods are " +"invoked, exceptions that occur during their execution are ignored, and a " +"warning is printed to ``sys.stderr`` instead. In particular:" +msgstr "" +"由于调用 :meth:`__del__` 方法时周边状况已不确定,在其执行期间发生的异常将被忽略,改为打印一个警告到 " +"``sys.stderr``。特别地:" + +#: ../../reference/datamodel.rst:1288 +msgid "" +":meth:`__del__` can be invoked when arbitrary code is being executed, " +"including from any arbitrary thread. If :meth:`__del__` needs to take a " +"lock or invoke any other blocking resource, it may deadlock as the resource " +"may already be taken by the code that gets interrupted to execute " +":meth:`__del__`." +msgstr "" +":meth:`__del__` 可在任意代码被执行时启用,包括来自任意线程的代码。如果 :meth:`__del__` " +"需要接受锁或启用其他阻塞资源,可能会发生死锁,例如该资源已被为执行 :meth:`__del__` 而中断的代码所获取。" + +#: ../../reference/datamodel.rst:1294 +msgid "" +":meth:`__del__` can be executed during interpreter shutdown. As a " +"consequence, the global variables it needs to access (including other " +"modules) may already have been deleted or set to ``None``. Python guarantees" +" that globals whose name begins with a single underscore are deleted from " +"their module before other globals are deleted; if no other references to " +"such globals exist, this may help in assuring that imported modules are " +"still available at the time when the :meth:`__del__` method is called." +msgstr "" +":meth:`__del__` 可以在解释器关闭阶段被执行。因此,它需要访问的全局变量(包含其他模块)可能已被删除或设为 ``None``。Python" +" 会保证先删除模块中名称以单个下划线打头的全局变量再删除其他全局变量;如果已不存在其他对此类全局变量的引用,这有助于确保导入的模块在 " +":meth:`__del__` 方法被调用时仍然可用。" + +#: ../../reference/datamodel.rst:1309 +msgid "" +"Called by the :func:`repr` built-in function to compute the \"official\" " +"string representation of an object. If at all possible, this should look " +"like a valid Python expression that could be used to recreate an object with" +" the same value (given an appropriate environment). If this is not " +"possible, a string of the form ``<...some useful description...>`` should be" +" returned. The return value must be a string object. If a class defines " +":meth:`__repr__` but not :meth:`__str__`, then :meth:`__repr__` is also used" +" when an \"informal\" string representation of instances of that class is " +"required." +msgstr "" +"由 :func:`repr` 内置函数调用以输出一个对象的“官方”字符串表示。如果可能,这应类似一个有效的 Python " +"表达式,能被用来重建具有相同取值的对象(只要有适当的环境)。如果这不可能,则应返回形式如 ``<...some useful " +"description...>`` 的字符串。返回值必须是一个字符串对象。如果一个类定义了 :meth:`__repr__` 但未定义 " +":meth:`__str__`,则在需要该类的实例的“非正式”字符串表示时也会使用 :meth:`__repr__`。" + +#: ../../reference/datamodel.rst:1318 +msgid "" +"This is typically used for debugging, so it is important that the " +"representation is information-rich and unambiguous." +msgstr "此方法通常被用于调试,因此确保其表示的内容包含丰富信息且无歧义是很重要的。" + +#: ../../reference/datamodel.rst:1329 +msgid "" +"Called by :func:`str(object) ` and the built-in functions " +":func:`format` and :func:`print` to compute the \"informal\" or nicely " +"printable string representation of an object. The return value must be a " +":ref:`string ` object." +msgstr "" +"通过 :func:`str(object) ` 以及内置函数 :func:`format` 和 :func:`print` " +"调用以生成一个对象的“非正式”或格式良好的字符串表示。返回值必须为一个 :ref:`字符串 ` 对象。" + +#: ../../reference/datamodel.rst:1334 +msgid "" +"This method differs from :meth:`object.__repr__` in that there is no " +"expectation that :meth:`__str__` return a valid Python expression: a more " +"convenient or concise representation can be used." +msgstr "" +"此方法与 :meth:`object.__repr__` 的不同点在于 :meth:`__str__` 并不预期返回一个有效的 Python " +"表达式:可以使用更方便或更准确的描述信息。" + +#: ../../reference/datamodel.rst:1338 +msgid "" +"The default implementation defined by the built-in type :class:`object` " +"calls :meth:`object.__repr__`." +msgstr "内置类型 :class:`object` 所定义的默认实现会调用 :meth:`object.__repr__`。" + +#: ../../reference/datamodel.rst:1348 +msgid "" +"Called by :ref:`bytes ` to compute a byte-string representation " +"of an object. This should return a :class:`bytes` object." +msgstr "" +"通过 :ref:`bytes ` 调用以生成一个对象的字节串表示。这应该返回一个 :class:`bytes` 对象。" + +#: ../../reference/datamodel.rst:1359 +msgid "" +"Called by the :func:`format` built-in function, and by extension, evaluation" +" of :ref:`formatted string literals ` and the :meth:`str.format` " +"method, to produce a \"formatted\" string representation of an object. The " +"*format_spec* argument is a string that contains a description of the " +"formatting options desired. The interpretation of the *format_spec* argument" +" is up to the type implementing :meth:`__format__`, however most classes " +"will either delegate formatting to one of the built-in types, or use a " +"similar formatting option syntax." +msgstr "" +"通过 :func:`format` 内置函数、扩展、:ref:`格式化字符串字面值 ` 的求值以及 " +":meth:`str.format` 方法调用以生成一个对象的“格式化”字符串表示。 *format_spec* 参数为包含所需格式选项描述的字符串。 " +"*format_spec* 参数的解读是由实现 :meth:`__format__` " +"的类型决定的,不过大多数类或是将格式化委托给某个内置类型,或是使用相似的格式化选项语法。" + +#: ../../reference/datamodel.rst:1369 +msgid "" +"See :ref:`formatspec` for a description of the standard formatting syntax." +msgstr "请参看 :ref:`formatspec` 了解标准格式化语法的描述。" + +#: ../../reference/datamodel.rst:1371 +msgid "The return value must be a string object." +msgstr "返回值必须为一个字符串对象。" + +#: ../../reference/datamodel.rst:1373 +msgid "" +"The __format__ method of ``object`` itself raises a :exc:`TypeError` if " +"passed any non-empty string." +msgstr "``object`` 本身的 __format__ 方法如果被传入任何非空字符,将会引发一个 :exc:`TypeError`。" + +#: ../../reference/datamodel.rst:1377 +msgid "" +"``object.__format__(x, '')`` is now equivalent to ``str(x)`` rather than " +"``format(str(x), '')``." +msgstr "" +"``object.__format__(x, '')`` 现在等同于 ``str(x)`` 而不再是 ``format(str(x), '')``。" + +#: ../../reference/datamodel.rst:1393 +msgid "" +"These are the so-called \"rich comparison\" methods. The correspondence " +"between operator symbols and method names is as follows: ``xy`` calls " +"``x.__gt__(y)``, and ``x>=y`` calls ``x.__ge__(y)``." +msgstr "" +"以上这些被称为“富比较”方法。运算符号与方法名称的对应关系如下:``xy`` 调用 ``x.__gt__(y)``、``x>=y`` 调用 ``x.__ge__(y)``。" + +#: ../../reference/datamodel.rst:1399 +msgid "" +"A rich comparison method may return the singleton ``NotImplemented`` if it " +"does not implement the operation for a given pair of arguments. By " +"convention, ``False`` and ``True`` are returned for a successful comparison." +" However, these methods can return any value, so if the comparison operator " +"is used in a Boolean context (e.g., in the condition of an ``if`` " +"statement), Python will call :func:`bool` on the value to determine if the " +"result is true or false." +msgstr "" +"如果指定的参数对没有相应的实现,富比较方法可能会返回单例对象 ``NotImplemented``。按照惯例,成功的比较会返回 ``False`` 或 " +"``True``。不过实际上这些方法可以返回任意值,因此如果比较运算符是要用于布尔值判断(例如作为 ``if`` 语句的条件),Python " +"会对返回值调用 :func:`bool` 以确定结果为真还是假。" + +#: ../../reference/datamodel.rst:1406 +msgid "" +"By default, ``object`` implements :meth:`__eq__` by using ``is``, returning " +"``NotImplemented`` in the case of a false comparison: ``True if x is y else " +"NotImplemented``. For :meth:`__ne__`, by default it delegates to " +":meth:`__eq__` and inverts the result unless it is ``NotImplemented``. " +"There are no other implied relationships among the comparison operators or " +"default implementations; for example, the truth of ``(x.__hash__``." +msgstr "" +"如果一个重载了 :meth:`__eq__` 的类需要保留来自父类的 :meth:`__hash__` 实现,则必须通过设置 ``__hash__ = " +".__hash__`` 来显式地告知解释器。" + +#: ../../reference/datamodel.rst:1482 +msgid "" +"If a class that does not override :meth:`__eq__` wishes to suppress hash " +"support, it should include ``__hash__ = None`` in the class definition. A " +"class which defines its own :meth:`__hash__` that explicitly raises a " +":exc:`TypeError` would be incorrectly identified as hashable by an " +"``isinstance(obj, collections.abc.Hashable)`` call." +msgstr "" +"如果一个没有重载 :meth:`__eq__` 的类需要去掉哈希支持,则应该在类定义中包含 ``__hash__ = None``。一个自定义了 " +":meth:`__hash__` 以显式地引发 :exc:`TypeError` 的类会被 ``isinstance(obj, " +"collections.abc.Hashable)`` 调用错误地识别为可哈希对象。" + +#: ../../reference/datamodel.rst:1491 +msgid "" +"By default, the :meth:`__hash__` values of str and bytes objects are " +"\"salted\" with an unpredictable random value. Although they remain " +"constant within an individual Python process, they are not predictable " +"between repeated invocations of Python." +msgstr "" +"在默认情况下,str 和 bytes 对象的 :meth:`__hash__` 值会使用一个不可预知的随机值“加盐”。 虽然它们在一个单独 Python" +" 进程中会保持不变,但它们的值在重复运行的 Python 间是不可预测的。" + +#: ../../reference/datamodel.rst:1496 +msgid "" +"This is intended to provide protection against a denial-of-service caused by" +" carefully-chosen inputs that exploit the worst case performance of a dict " +"insertion, O(n\\ :sup:`2`) complexity. See " +"http://www.ocert.org/advisories/ocert-2011-003.html for details." +msgstr "" +"这是为了防护通过精心选择输入来利用字典插入操作在最坏情况下的执行效率即 O(n\\ :sup:`2`) 复杂度制造的拒绝服务攻击。 请参阅 " +"http://www.ocert.org/advisories/ocert-2011-003.html 了解详情。" + +#: ../../reference/datamodel.rst:1501 +msgid "" +"Changing hash values affects the iteration order of sets. Python has never " +"made guarantees about this ordering (and it typically varies between 32-bit " +"and 64-bit builds)." +msgstr "改变哈希值会影响集合的迭代次序。Python 也从不保证这个次序不会被改变(通常它在 32 位和 64 位构建上是不一致的)。" + +#: ../../reference/datamodel.rst:1505 +msgid "See also :envvar:`PYTHONHASHSEED`." +msgstr "另见 :envvar:`PYTHONHASHSEED`." + +#: ../../reference/datamodel.rst:1507 +msgid "Hash randomization is enabled by default." +msgstr "默认启用哈希随机化。" + +#: ../../reference/datamodel.rst:1515 +msgid "" +"Called to implement truth value testing and the built-in operation " +"``bool()``; should return ``False`` or ``True``. When this method is not " +"defined, :meth:`__len__` is called, if it is defined, and the object is " +"considered true if its result is nonzero. If a class defines neither " +":meth:`__len__` nor :meth:`__bool__`, all its instances are considered true." +msgstr "" +"调用此方法以实现真值检测以及内置的 ``bool()`` 操作;应该返回 ``False`` 或 ``True``。如果未定义此方法,则会查找并调用 " +":meth:`__len__` 并在其返回非零值时视对象的逻辑值为真。如果一个类既未定义 :meth:`__len__` 也未定义 " +":meth:`__bool__` 则视其所有实例的逻辑值为真。" + +#: ../../reference/datamodel.rst:1526 +msgid "Customizing attribute access" +msgstr "自定义属性访问" + +#: ../../reference/datamodel.rst:1528 +msgid "" +"The following methods can be defined to customize the meaning of attribute " +"access (use of, assignment to, or deletion of ``x.name``) for class " +"instances." +msgstr "可以定义下列方法来自定义对类实例属性访问(``x.name`` 的使用、赋值或删除)的具体含义." + +#: ../../reference/datamodel.rst:1536 +msgid "" +"Called when the default attribute access fails with an :exc:`AttributeError`" +" (either :meth:`__getattribute__` raises an :exc:`AttributeError` because " +"*name* is not an instance attribute or an attribute in the class tree for " +"``self``; or :meth:`__get__` of a *name* property raises " +":exc:`AttributeError`). This method should either return the (computed) " +"attribute value or raise an :exc:`AttributeError` exception." +msgstr "" +"当默认属性访问因引发 :exc:`AttributeError` 而失败时被调用 (可能是调用 :meth:`__getattribute__` 时由于" +" *name* 不是一个实例属性或 ``self`` 的类关系树中的属性而引发了 :exc:`AttributeError`;或者是对 *name* " +"特性属性调用 :meth:`__get__` 时引发了 :exc:`AttributeError`)。此方法应当返回(找到的)属性值或是引发一个 " +":exc:`AttributeError` 异常。" + +#: ../../reference/datamodel.rst:1543 +msgid "" +"Note that if the attribute is found through the normal mechanism, " +":meth:`__getattr__` is not called. (This is an intentional asymmetry " +"between :meth:`__getattr__` and :meth:`__setattr__`.) This is done both for " +"efficiency reasons and because otherwise :meth:`__getattr__` would have no " +"way to access other attributes of the instance. Note that at least for " +"instance variables, you can fake total control by not inserting any values " +"in the instance attribute dictionary (but instead inserting them in another " +"object). See the :meth:`__getattribute__` method below for a way to " +"actually get total control over attribute access." +msgstr "" +"请注意如果属性是通过正常机制找到的,:meth:`__getattr__` 就不会被调用。(这是在 :meth:`__getattr__` 和 " +":meth:`__setattr__` 之间故意设置的不对称性。)这既是出于效率理由也是因为不这样设置的话 :meth:`__getattr__` " +"将无法访问实例的其他属性。要注意至少对于实例变量来说,你不必在实例属性字典中插入任何值(而是通过插入到其他对象)就可以模拟对它的完全控制。请参阅下面的 " +":meth:`__getattribute__` 方法了解真正获取对属性访问的完全控制权的办法。" + +#: ../../reference/datamodel.rst:1556 +msgid "" +"Called unconditionally to implement attribute accesses for instances of the " +"class. If the class also defines :meth:`__getattr__`, the latter will not be" +" called unless :meth:`__getattribute__` either calls it explicitly or raises" +" an :exc:`AttributeError`. This method should return the (computed) " +"attribute value or raise an :exc:`AttributeError` exception. In order to " +"avoid infinite recursion in this method, its implementation should always " +"call the base class method with the same name to access any attributes it " +"needs, for example, ``object.__getattribute__(self, name)``." +msgstr "" +"此方法会无条件地被调用以实现对类实例属性的访问。如果类还定义了 :meth:`__getattr__`,则后者不会被调用,除非 " +":meth:`__getattribute__` 显式地调用它或是引发了 " +":exc:`AttributeError`。此方法应当返回(找到的)属性值或是引发一个 :exc:`AttributeError` " +"异常。为了避免此方法中的无限递归,其实现应该总是调用具有相同名称的基类方法来访问它所需要的任何属性,例如 " +"``object.__getattribute__(self, name)``。" + +#: ../../reference/datamodel.rst:1567 +msgid "" +"This method may still be bypassed when looking up special methods as the " +"result of implicit invocation via language syntax or built-in functions. See" +" :ref:`special-lookup`." +msgstr "此方法在作为通过特定语法或内置函数隐式地调用的结果的情况下查找特殊方法时仍可能会被跳过。参见 :ref:`special-lookup`。" + +#: ../../reference/datamodel.rst:1571 +msgid "" +"Raises an :ref:`auditing event ` ``object.__getattr__`` with " +"arguments ``obj``, ``name``." +msgstr "" +"引发一个 :ref:`审计事件 ` ``object.__getattr__``,附带参数 ``obj``, ``name``。" + +#: ../../reference/datamodel.rst:1573 +msgid "" +"For certain sensitive attribute accesses, raises an :ref:`auditing event " +"` ``object.__getattr__`` with arguments ``obj`` and ``name``." +msgstr "" +"对于特定的敏感属性访问,引发一个 :ref:`审计事件 ` ``object.__getattr__``,附带参数 ``obj`` " +"和 ``name``。" + +#: ../../reference/datamodel.rst:1580 +msgid "" +"Called when an attribute assignment is attempted. This is called instead of" +" the normal mechanism (i.e. store the value in the instance dictionary). " +"*name* is the attribute name, *value* is the value to be assigned to it." +msgstr "" +"此方法在一个属性被尝试赋值时被调用。这个调用会取代正常机制(即将值保存到实例字典)。 *name* 为属性名称, *value* 为要赋给属性的值。" + +#: ../../reference/datamodel.rst:1584 +msgid "" +"If :meth:`__setattr__` wants to assign to an instance attribute, it should " +"call the base class method with the same name, for example, " +"``object.__setattr__(self, name, value)``." +msgstr "" +"如果 :meth:`__setattr__` 想要赋值给一个实例属性,它应该调用同名的基类方法,例如 " +"``object.__setattr__(self, name, value)``。" + +#: ../../reference/datamodel.rst:1588 +msgid "" +"Raises an :ref:`auditing event ` ``object.__setattr__`` with " +"arguments ``obj``, ``name``, ``value``." +msgstr "" +"引发一个 :ref:`审计事件 ` ``object.__setattr__``,附带参数 ``obj``, ``name``, " +"``value``。" + +#: ../../reference/datamodel.rst:1590 +msgid "" +"For certain sensitive attribute assignments, raises an :ref:`auditing event " +"` ``object.__setattr__`` with arguments ``obj``, ``name``, " +"``value``." +msgstr "" +"对特定敏感属性的赋值,会引发一个 :ref:`审计事件 ` ``object.__setattr__``,附带参数 ``obj``," +" ``name``, ``value``。" + +#: ../../reference/datamodel.rst:1597 +msgid "" +"Like :meth:`__setattr__` but for attribute deletion instead of assignment. " +"This should only be implemented if ``del obj.name`` is meaningful for the " +"object." +msgstr "" +"类似于 :meth:`__setattr__` 但其作用为删除而非赋值。此方法应该仅在 ``del obj.name`` 对于该对象有意义时才被实现。" + +#: ../../reference/datamodel.rst:1600 +msgid "" +"Raises an :ref:`auditing event ` ``object.__delattr__`` with " +"arguments ``obj``, ``name``." +msgstr "" +"引发一个 :ref:`审计事件 ` ``object.__delattr__``,附带参数 ``obj``, ``name``。" + +#: ../../reference/datamodel.rst:1602 +msgid "" +"For certain sensitive attribute deletions, raises an :ref:`auditing event " +"` ``object.__delattr__`` with arguments ``obj`` and ``name``." +msgstr "" +"对于特定的敏感属性删除,引发一个 :ref:`审计事件 ` ``object.__delattr__``,附带参数 ``obj`` " +"和 ``name``。" + +#: ../../reference/datamodel.rst:1609 +msgid "" +"Called when :func:`dir` is called on the object. A sequence must be " +"returned. :func:`dir` converts the returned sequence to a list and sorts it." +msgstr "" +"此方法会在对相应对象调用 :func:`dir` 时被调用。返回值必须为一个序列。 :func:`dir` 会把返回的序列转换为列表并对其排序。" + +#: ../../reference/datamodel.rst:1614 +msgid "Customizing module attribute access" +msgstr "自定义模块属性访问" + +#: ../../reference/datamodel.rst:1621 +msgid "" +"Special names ``__getattr__`` and ``__dir__`` can be also used to customize " +"access to module attributes. The ``__getattr__`` function at the module " +"level should accept one argument which is the name of an attribute and " +"return the computed value or raise an :exc:`AttributeError`. If an attribute" +" is not found on a module object through the normal lookup, i.e. " +":meth:`object.__getattribute__`, then ``__getattr__`` is searched in the " +"module ``__dict__`` before raising an :exc:`AttributeError`. If found, it is" +" called with the attribute name and the result is returned." +msgstr "" +"特殊名称 ``__getattr__`` 和 ``__dir__`` 还可被用来自定义对模块属性的访问。模块层级的 ``__getattr__`` " +"函数应当接受一个参数,其名称为一个属性名,并返回计算结果值或引发一个 :exc:`AttributeError`。如果通过正常查找即 " +":meth:`object.__getattribute__` 未在模块对象中找到某个属性,则 ``__getattr__`` 会在模块的 " +"``__dict__`` 中查找,未找到时会引发一个 :exc:`AttributeError`。如果找到,它会以属性名被调用并返回结果值。" + +#: ../../reference/datamodel.rst:1630 +msgid "" +"The ``__dir__`` function should accept no arguments, and return a sequence " +"of strings that represents the names accessible on module. If present, this " +"function overrides the standard :func:`dir` search on a module." +msgstr "" +"``__dir__`` 函数应当不接受任何参数,并且返回一个表示模块中可访问名称的字符串序列。 此函数如果存在,将会重载一个模块中的标准 " +":func:`dir` 查找。" + +#: ../../reference/datamodel.rst:1634 +msgid "" +"For a more fine grained customization of the module behavior (setting " +"attributes, properties, etc.), one can set the ``__class__`` attribute of a " +"module object to a subclass of :class:`types.ModuleType`. For example::" +msgstr "" +"想要更细致地自定义模块的行为(设置属性和特性属性等待),可以将模块对象的 ``__class__`` 属性设置为一个 " +":class:`types.ModuleType` 的子类。例如::" + +#: ../../reference/datamodel.rst:1652 +msgid "" +"Defining module ``__getattr__`` and setting module ``__class__`` only affect" +" lookups made using the attribute access syntax -- directly accessing the " +"module globals (whether by code within the module, or via a reference to the" +" module's globals dictionary) is unaffected." +msgstr "" +"定义模块的 ``__getattr__`` 和设置模块的 ``__class__`` 只会影响使用属性访问语法进行的查找 -- " +"直接访问模块全局变量(不论是通过模块内的代码还是通过对模块全局字典的引用)是不受影响的。" + +#: ../../reference/datamodel.rst:1657 +msgid "``__class__`` module attribute is now writable." +msgstr "``__class__`` 模块属性改为可写。" + +#: ../../reference/datamodel.rst:1660 +msgid "``__getattr__`` and ``__dir__`` module attributes." +msgstr "``__getattr__`` 和 ``__dir__`` 模块属性。" + +#: ../../reference/datamodel.rst:1665 +msgid ":pep:`562` - Module __getattr__ and __dir__" +msgstr ":pep:`562` - 模块 __getattr__ 和 __dir__" + +#: ../../reference/datamodel.rst:1666 +msgid "Describes the ``__getattr__`` and ``__dir__`` functions on modules." +msgstr "描述用于模块的 ``__getattr__`` 和 ``__dir__`` 函数。" + +#: ../../reference/datamodel.rst:1672 +msgid "Implementing Descriptors" +msgstr "实现描述器" + +#: ../../reference/datamodel.rst:1674 +msgid "" +"The following methods only apply when an instance of the class containing " +"the method (a so-called *descriptor* class) appears in an *owner* class (the" +" descriptor must be in either the owner's class dictionary or in the class " +"dictionary for one of its parents). In the examples below, \"the " +"attribute\" refers to the attribute whose name is the key of the property in" +" the owner class' :attr:`~object.__dict__`." +msgstr "" +"以下方法仅当一个包含该方法的类(称为 *描述器* 类)的实例出现于一个 *所有者* " +"类中的时候才会起作用(该描述器必须在所有者类或其某个上级类的字典中)。在以下示例中,“属性”指的是名称为所有者类 " +":attr:`~object.__dict__` 中的特征属性的键名的属性。" + +#: ../../reference/datamodel.rst:1684 +msgid "" +"Called to get the attribute of the owner class (class attribute access) or " +"of an instance of that class (instance attribute access). The optional " +"*owner* argument is the owner class, while *instance* is the instance that " +"the attribute was accessed through, or ``None`` when the attribute is " +"accessed through the *owner*." +msgstr "" +"调用此方法以获取所有者类的属性(类属性访问)或该类的实例的属性(实例属性访问)。 可选的 *owner* 参数是所有者类而 *instance* " +"是被用来访问属性的实例,如果通过 *owner* 来访问属性则返回 ``None``。" + +#: ../../reference/datamodel.rst:1690 +msgid "" +"This method should return the computed attribute value or raise an " +":exc:`AttributeError` exception." +msgstr "此方法应当返回计算得到的属性值或是引发 :exc:`AttributeError` 异常。" + +#: ../../reference/datamodel.rst:1693 +msgid "" +":PEP:`252` specifies that :meth:`__get__` is callable with one or two " +"arguments. Python's own built-in descriptors support this specification; " +"however, it is likely that some third-party tools have descriptors that " +"require both arguments. Python's own :meth:`__getattribute__` " +"implementation always passes in both arguments whether they are required or " +"not." +msgstr "" +":PEP:`252` 指明 :meth:`__get__` 为带有一至二个参数的可调用对象。 Python " +"自身内置的描述器支持此规格定义;但是,某些第三方工具可能要求必须带两个参数。 Python 自身的 :meth:`__getattribute__` " +"实现总是会传入两个参数,无论它们是否被要求提供。" + +#: ../../reference/datamodel.rst:1702 +msgid "" +"Called to set the attribute on an instance *instance* of the owner class to " +"a new value, *value*." +msgstr "调用此方法以设置 *instance* 指定的所有者类的实例的属性为新值 *value*。" + +#: ../../reference/datamodel.rst:1705 +msgid "" +"Note, adding :meth:`__set__` or :meth:`__delete__` changes the kind of " +"descriptor to a \"data descriptor\". See :ref:`descriptor-invocation` for " +"more details." +msgstr "" +"请注意,添加 :meth:`__set__` 或 :meth:`__delete__` 会将描述器变成“数据描述器”。 更多细节请参阅 " +":ref:`descriptor-invocation`。" + +#: ../../reference/datamodel.rst:1711 +msgid "" +"Called to delete the attribute on an instance *instance* of the owner class." +msgstr "调用此方法以删除 *instance* 指定的所有者类的实例的属性。" + +#: ../../reference/datamodel.rst:1716 +msgid "" +"Called at the time the owning class *owner* is created. The descriptor has " +"been assigned to *name*." +msgstr "在所有者类 *owner* 创建时被调用。描述器会被赋值给 *name*。" + +#: ../../reference/datamodel.rst:1721 +msgid "" +":meth:`__set_name__` is only called implicitly as part of the :class:`type` " +"constructor, so it will need to be called explicitly with the appropriate " +"parameters when a descriptor is added to a class after initial creation::" +msgstr "" +":meth:`__set_name__` 只是作为 :class:`type` " +"构造器的一部分被隐式地调用,因此在某个类被初次创建之后又额外添加一个描述器时,那就需要显式地调用它并且附带适当的形参::" + +#: ../../reference/datamodel.rst:1732 +msgid "See :ref:`class-object-creation` for more details." +msgstr "详情参见 :ref:`class-object-creation`。" + +#: ../../reference/datamodel.rst:1736 +msgid "" +"The attribute :attr:`__objclass__` is interpreted by the :mod:`inspect` " +"module as specifying the class where this object was defined (setting this " +"appropriately can assist in runtime introspection of dynamic class " +"attributes). For callables, it may indicate that an instance of the given " +"type (or a subclass) is expected or required as the first positional " +"argument (for example, CPython sets this attribute for unbound methods that " +"are implemented in C)." +msgstr "" +"属性 :attr:`__objclass__` 会被 :mod:`inspect` " +"模块解读为指定此对象定义所在的类(正确设置此属性有助于动态类属性的运行时内省)。对于可调用对象来说,它可以指明预期或要求提供一个特定类型(或子类)的实例作为第一个位置参数(例如,CPython" +" 会为实现于 C 中的未绑定方法设置此属性)。" + +#: ../../reference/datamodel.rst:1747 +msgid "Invoking Descriptors" +msgstr "调用描述器" + +#: ../../reference/datamodel.rst:1749 +msgid "" +"In general, a descriptor is an object attribute with \"binding behavior\", " +"one whose attribute access has been overridden by methods in the descriptor " +"protocol: :meth:`~object.__get__`, :meth:`~object.__set__`, and " +":meth:`~object.__delete__`. If any of those methods are defined for an " +"object, it is said to be a descriptor." +msgstr "" +"总的说来,描述器就是具有“绑定行为”的对象属性,其属性访问已被描述器协议中的方法所重载: :meth:`~object.__get__`, " +":meth:`~object.__set__` 和 :meth:`~object.__delete__`。 " +"如果一个对象定义了以上方法中的任意一个,它就被称为描述器。" + +#: ../../reference/datamodel.rst:1755 +msgid "" +"The default behavior for attribute access is to get, set, or delete the " +"attribute from an object's dictionary. For instance, ``a.x`` has a lookup " +"chain starting with ``a.__dict__['x']``, then ``type(a).__dict__['x']``, and" +" continuing through the base classes of ``type(a)`` excluding metaclasses." +msgstr "" +"属性访问的默认行为是从一个对象的字典中获取、设置或删除属性。例如,``a.x`` 的查找顺序会从 ``a.__dict__['x']`` 开始,然后是 " +"``type(a).__dict__['x']``,接下来依次查找 ``type(a)`` 的上级基类,不包括元类。" + +#: ../../reference/datamodel.rst:1760 +msgid "" +"However, if the looked-up value is an object defining one of the descriptor " +"methods, then Python may override the default behavior and invoke the " +"descriptor method instead. Where this occurs in the precedence chain " +"depends on which descriptor methods were defined and how they were called." +msgstr "" +"但是,如果找到的值是定义了某个描述器方法的对象,则 Python " +"可能会重载默认行为并转而唤起描述器方法。这具体发生在优先级链的哪个环节则要根据所定义的描述器方法及其被调用的方式来决定。" + +#: ../../reference/datamodel.rst:1765 +msgid "" +"The starting point for descriptor invocation is a binding, ``a.x``. How the " +"arguments are assembled depends on ``a``:" +msgstr "描述器唤起的开始点是一个绑定 ``a.x``。参数的组合方式依 ``a`` 而定:" + +#: ../../reference/datamodel.rst:1770 +msgid "Direct Call" +msgstr "直接调用" + +#: ../../reference/datamodel.rst:1769 +msgid "" +"The simplest and least common call is when user code directly invokes a " +"descriptor method: ``x.__get__(a)``." +msgstr "最简单但最不常见的调用方式是用户代码直接唤起一个描述器方法: ``x.__get__(a)``。" + +#: ../../reference/datamodel.rst:1774 +msgid "Instance Binding" +msgstr "实例绑定" + +#: ../../reference/datamodel.rst:1773 +msgid "" +"If binding to an object instance, ``a.x`` is transformed into the call: " +"``type(a).__dict__['x'].__get__(a, type(a))``." +msgstr "" +"如果绑定到一个对象实例,``a.x`` 会被转换为调用: ``type(a).__dict__['x'].__get__(a, type(a))``。" + +#: ../../reference/datamodel.rst:1778 +msgid "Class Binding" +msgstr "类绑定" + +#: ../../reference/datamodel.rst:1777 +msgid "" +"If binding to a class, ``A.x`` is transformed into the call: " +"``A.__dict__['x'].__get__(None, A)``." +msgstr "如果绑定到一个类,``A.x`` 会被转换为调用: ``A.__dict__['x'].__get__(None, A)``。" + +#: ../../reference/datamodel.rst:1784 +msgid "Super Binding" +msgstr "超绑定" + +#: ../../reference/datamodel.rst:1781 +msgid "" +"If ``a`` is an instance of :class:`super`, then the binding ``super(B, " +"obj).m()`` searches ``obj.__class__.__mro__`` for the base class ``A`` " +"immediately following ``B`` and then invokes the descriptor with the call: " +"``A.__dict__['m'].__get__(obj, obj.__class__)``." +msgstr "" +"如果 ``a`` 是 :class:`super` 的一个实例,则绑定 ``super(B, obj).m()`` 会在 " +"``obj.__class__.__mro__`` 中搜索 ``B`` 的直接上级基类 ``A`` 然后通过以下调用来发起调用描述器: " +"``A.__dict__['m'].__get__(obj, obj.__class__)``。" + +#: ../../reference/datamodel.rst:1786 +msgid "" +"For instance bindings, the precedence of descriptor invocation depends on " +"which descriptor methods are defined. A descriptor can define any " +"combination of :meth:`~object.__get__`, :meth:`~object.__set__` and " +":meth:`~object.__delete__`. If it does not define :meth:`__get__`, then " +"accessing the attribute will return the descriptor object itself unless " +"there is a value in the object's instance dictionary. If the descriptor " +"defines :meth:`__set__` and/or :meth:`__delete__`, it is a data descriptor; " +"if it defines neither, it is a non-data descriptor. Normally, data " +"descriptors define both :meth:`__get__` and :meth:`__set__`, while non-data " +"descriptors have just the :meth:`__get__` method. Data descriptors with " +":meth:`__get__` and :meth:`__set__` (and/or :meth:`__delete__`) defined " +"always override a redefinition in an instance dictionary. In contrast, non-" +"data descriptors can be overridden by instances." +msgstr "" +"对于实例绑定,发起描述器调用的优先级取决于定义了哪些描述器方法。 一个描述器可以定义 :meth:`~object.__get__`, " +":meth:`~object.__set__` 和 :meth:`~object.__delete__` 的任意组合。 如果它没有定义 " +":meth:`__get__`,则访问属性将返回描述器对象自身,除非对象的实例字典中有相应的属性值。 如果描述器定义了 :meth:`__set__` " +"和/或 :meth:`__delete__`,则它是一个数据描述器;如果以上两个都未定义,则它是一个非数据描述器。 通常,数据描述器会同时定义 " +":meth:`__get__` 和 :meth:`__set__`,而非数据描述器则只有 :meth:`__get__` 方法。 定义了 " +":meth:`__get__` 和 :meth:`__set__` (和/或 :meth:`__delete__`) " +"的数据描述器总是会重载实例字典中的定义。 与之相对地,非数据描述器则可被实例所重载。" + +#: ../../reference/datamodel.rst:1800 +msgid "" +"Python methods (including those decorated with :func:`@staticmethod " +"` and :func:`@classmethod `) are implemented as " +"non-data descriptors. Accordingly, instances can redefine and override " +"methods. This allows individual instances to acquire behaviors that differ " +"from other instances of the same class." +msgstr "" +"Python 方法(包括用 :func:`@staticmethod ` 和 :func:`@classmethod " +"` 装饰的方法)都是作为非数据描述器来实现的。 因而,实例可以重定义和重写方法。 " +"这允许单个实例获得与相同类的其他实例不一样的行为。" + +#: ../../reference/datamodel.rst:1806 +msgid "" +"The :func:`property` function is implemented as a data descriptor. " +"Accordingly, instances cannot override the behavior of a property." +msgstr ":func:`property` 函数是作为数据描述器来实现的。因此实例不能重载特性属性的行为。" + +#: ../../reference/datamodel.rst:1813 +msgid "__slots__" +msgstr "__slots__" + +#: ../../reference/datamodel.rst:1815 +msgid "" +"*__slots__* allow us to explicitly declare data members (like properties) " +"and deny the creation of :attr:`~object.__dict__` and *__weakref__* (unless " +"explicitly declared in *__slots__* or available in a parent.)" +msgstr "" +"*__slots__* 允许我们显式地声明数据成员(如特征属性)并禁止创建 :attr:`~object.__dict__` 和 " +"*__weakref__* (除非是在 *__slots__* 中显式地声明或是在父类中可用。)" + +#: ../../reference/datamodel.rst:1819 +msgid "" +"The space saved over using :attr:`~object.__dict__` can be significant. " +"Attribute lookup speed can be significantly improved as well." +msgstr "相比使用 :attr:`~object.__dict__` 可以显著节省空间。 属性查找速度也可得到显著的提升。" + +#: ../../reference/datamodel.rst:1824 +msgid "" +"This class variable can be assigned a string, iterable, or sequence of " +"strings with variable names used by instances. *__slots__* reserves space " +"for the declared variables and prevents the automatic creation of " +":attr:`~object.__dict__` and *__weakref__* for each instance." +msgstr "" +"这个类变量可赋值为字符串、可迭代对象或由实例使用的变量名组成的字符串序列。 *__slots__* 会为已声明的变量保留空间并阻止自动为每个实例创建 " +":attr:`~object.__dict__` 和 *__weakref__*。" + +#: ../../reference/datamodel.rst:1832 +msgid "Notes on using *__slots__*" +msgstr "使用 *__slots__* 的注意事项" + +#: ../../reference/datamodel.rst:1834 +msgid "" +"When inheriting from a class without *__slots__*, the " +":attr:`~object.__dict__` and *__weakref__* attribute of the instances will " +"always be accessible." +msgstr "" +"当继承自一个没有 *__slots__* 的类时,实例的 :attr:`~object.__dict__` 和 *__weakref__* " +"属性将总是可访问的。" + +#: ../../reference/datamodel.rst:1838 +msgid "" +"Without a :attr:`~object.__dict__` variable, instances cannot be assigned " +"new variables not listed in the *__slots__* definition. Attempts to assign " +"to an unlisted variable name raises :exc:`AttributeError`. If dynamic " +"assignment of new variables is desired, then add ``'__dict__'`` to the " +"sequence of strings in the *__slots__* declaration." +msgstr "" +"没有 :attr:`~object.__dict__` 变量,实例就不能给未在 *__slots__* 定义中列出的新变量赋值。 " +"尝试给一个未列出的变量名赋值将引发 :exc:`AttributeError`。 如果需要动态地给新变量赋值,则要将 ``'__dict__'`` " +"加入到在 *__slots__* 中声明的字符串序列中。" + +#: ../../reference/datamodel.rst:1845 +msgid "" +"Without a *__weakref__* variable for each instance, classes defining " +"*__slots__* do not support :mod:`weak references ` to its " +"instances. If weak reference support is needed, then add ``'__weakref__'`` " +"to the sequence of strings in the *__slots__* declaration." +msgstr "" +"如果未给每个实例设置 *__weakref__* 变量,则定义了 *__slots__* 的类就不支持对其实例的 :mod:`弱引用 " +"`。 如果需要支持弱引用,则要将 ``'__weakref__'`` 加入到在 *__slots__* 中声明的字符串序列中。" + +#: ../../reference/datamodel.rst:1851 +msgid "" +"*__slots__* are implemented at the class level by creating :ref:`descriptors" +" ` for each variable name. As a result, class attributes " +"cannot be used to set default values for instance variables defined by " +"*__slots__*; otherwise, the class attribute would overwrite the descriptor " +"assignment." +msgstr "" +"*__slots__* 是通过为每个变量名创建 :ref:`描述器 ` 在类层级上实现的。 因此,类属性不能被用来为通过 " +"*__slots__* 定义的实例变量设置默认值;否则,类属性将会覆盖描述器赋值。" + +#: ../../reference/datamodel.rst:1857 +msgid "" +"The action of a *__slots__* declaration is not limited to the class where it" +" is defined. *__slots__* declared in parents are available in child " +"classes. However, child subclasses will get a :attr:`~object.__dict__` and " +"*__weakref__* unless they also define *__slots__* (which should only contain" +" names of any *additional* slots)." +msgstr "" +"*__slots__* 声明的作用不只限于定义它的类。 在父类中声明的 *__slots__* 在其子类中同样可用。 不过,子类将会获得 " +":attr:`~object.__dict__` 和 *__weakref__* 除非它们也定义了 *__slots__* (其中应当仅包含任何 " +"*附加* 槽位的名称)。" + +#: ../../reference/datamodel.rst:1863 +msgid "" +"If a class defines a slot also defined in a base class, the instance " +"variable defined by the base class slot is inaccessible (except by " +"retrieving its descriptor directly from the base class). This renders the " +"meaning of the program undefined. In the future, a check may be added to " +"prevent this." +msgstr "" +"如果一个类定义的位置在某个基类中也有定义,则由基类位置定义的实例变量将不可访问(除非通过直接从基类获取其描述器的方式)。这会使得程序的含义变成未定义。未来可能会添加一个防止此情况的检查。" + +#: ../../reference/datamodel.rst:1868 +msgid "" +"Nonempty *__slots__* does not work for classes derived from \"variable-" +"length\" built-in types such as :class:`int`, :class:`bytes` and " +":class:`tuple`." +msgstr "" +"非空的 *__slots__* 不适用于派生自“可变长度”内置类型例如 :class:`int`、:class:`bytes` 和 " +":class:`tuple` 的派生类。" + +#: ../../reference/datamodel.rst:1871 +msgid "Any non-string :term:`iterable` may be assigned to *__slots__*." +msgstr "任何非字符串的 :term:`iterable` 都可以被赋值给 *__slots__*。" + +#: ../../reference/datamodel.rst:1873 +msgid "" +"If a :class:`dictionary ` is used to assign *__slots__*, the " +"dictionary keys will be used as the slot names. The values of the dictionary" +" can be used to provide per-attribute docstrings that will be recognised by " +":func:`inspect.getdoc` and displayed in the output of :func:`help`." +msgstr "" +"如果是使用一个 :class:`字典 ` 来给 *__slots__* 赋值,则该字典的键将被用作槽位名称。 " +"字典的值可被用来为每个属性提供将被 :func:`inspect.getdoc` 识别并在and displayed in the output of " +":func:`help` 的输出中显示的文档字符串。" + +#: ../../reference/datamodel.rst:1878 +msgid "" +":attr:`~instance.__class__` assignment works only if both classes have the " +"same *__slots__*." +msgstr ":attr:`~instance.__class__` 赋值仅在两个类具有同样的 *__slots__* 时会起作用。" + +#: ../../reference/datamodel.rst:1881 +msgid "" +":ref:`Multiple inheritance ` with multiple slotted parent " +"classes can be used, but only one parent is allowed to have attributes " +"created by slots (the other bases must have empty slot layouts) - violations" +" raise :exc:`TypeError`." +msgstr "" +"带有多槽位父类的 :ref:`多重继承 ` 也是可用的,但仅允许一个父类具有由槽位创建的属性(其他基类必须具有空的槽位布局)" +" —— 违反此规则将引发 :exc:`TypeError`。" + +#: ../../reference/datamodel.rst:1887 +msgid "" +"If an :term:`iterator` is used for *__slots__* then a :term:`descriptor` is " +"created for each of the iterator's values. However, the *__slots__* " +"attribute will be an empty iterator." +msgstr "" +"如果将 :term:`iterator` 用于 *__slots__* 则会为该迭代器的每个值创建一个 :term:`descriptor`。 " +"但是,*__slots__* 属性将为一个空迭代器。" + +#: ../../reference/datamodel.rst:1895 +msgid "Customizing class creation" +msgstr "自定义类创建" + +#: ../../reference/datamodel.rst:1897 +msgid "" +"Whenever a class inherits from another class, " +":meth:`~object.__init_subclass__` is called on the parent class. This way, " +"it is possible to write classes which change the behavior of subclasses. " +"This is closely related to class decorators, but where class decorators only" +" affect the specific class they're applied to, ``__init_subclass__`` solely " +"applies to future subclasses of the class defining the method." +msgstr "" +"当一个类继承另一个类时,会在这个父类上调用 :meth:`~object.__init_subclass__`。 " +"这样,就使得编写改变子类行为的类成为可能。 这与类装饰器有很密切的关联,但类装饰器只能影响它们所应用的特定类,而 " +"``__init_subclass__`` 则只作用于定义了该方法的类在未来的子类。" + +#: ../../reference/datamodel.rst:1906 +msgid "" +"This method is called whenever the containing class is subclassed. *cls* is " +"then the new subclass. If defined as a normal instance method, this method " +"is implicitly converted to a class method." +msgstr "当所在类派生子类时此方法就会被调用。*cls* 将指向新的子类。如果定义为一个普通实例方法,此方法将被隐式地转换为类方法。" + +#: ../../reference/datamodel.rst:1910 +msgid "" +"Keyword arguments which are given to a new class are passed to the parent's " +"class ``__init_subclass__``. For compatibility with other classes using " +"``__init_subclass__``, one should take out the needed keyword arguments and " +"pass the others over to the base class, as in::" +msgstr "" +"传入一个新类的关键字参数会被传给父类的 ``__init_subclass__``。为了与其他使用 ``__init_subclass__`` " +"的类兼容,应当根据需要去掉部分关键字参数再将其余的传给基类,例如::" + +#: ../../reference/datamodel.rst:1924 +msgid "" +"The default implementation ``object.__init_subclass__`` does nothing, but " +"raises an error if it is called with any arguments." +msgstr "``object.__init_subclass__`` 的默认实现什么都不做,只在带任意参数调用时引发一个错误。" + +#: ../../reference/datamodel.rst:1929 +msgid "" +"The metaclass hint ``metaclass`` is consumed by the rest of the type " +"machinery, and is never passed to ``__init_subclass__`` implementations. The" +" actual metaclass (rather than the explicit hint) can be accessed as " +"``type(cls)``." +msgstr "" +"元类提示 ``metaclass`` 将被其它类型机制消耗掉,并不会被传给 ``__init_subclass__`` " +"的实现。实际的元类(而非显式的提示)可通过 ``type(cls)`` 访问。" + +#: ../../reference/datamodel.rst:1940 +msgid "Metaclasses" +msgstr "元类" + +#: ../../reference/datamodel.rst:1947 +msgid "" +"By default, classes are constructed using :func:`type`. The class body is " +"executed in a new namespace and the class name is bound locally to the " +"result of ``type(name, bases, namespace)``." +msgstr "" +"默认情况下,类是使用 :func:`type` 来构建的。类体会在一个新的命名空间内执行,类名会被局部绑定到 ``type(name, bases, " +"namespace)`` 的结果。" + +#: ../../reference/datamodel.rst:1951 +msgid "" +"The class creation process can be customized by passing the ``metaclass`` " +"keyword argument in the class definition line, or by inheriting from an " +"existing class that included such an argument. In the following example, " +"both ``MyClass`` and ``MySubclass`` are instances of ``Meta``::" +msgstr "" +"类创建过程可通过在定义行传入 ``metaclass`` 关键字参数,或是通过继承一个包含此参数的现有类来进行定制。在以下示例中,``MyClass``" +" 和 ``MySubclass`` 都是 ``Meta`` 的实例::" + +#: ../../reference/datamodel.rst:1965 +msgid "" +"Any other keyword arguments that are specified in the class definition are " +"passed through to all metaclass operations described below." +msgstr "在类定义内指定的任何其他关键字参数都会在下面所描述的所有元类操作中进行传递。" + +#: ../../reference/datamodel.rst:1968 +msgid "When a class definition is executed, the following steps occur:" +msgstr "当一个类定义被执行时,将发生以下步骤:" + +#: ../../reference/datamodel.rst:1970 +msgid "MRO entries are resolved;" +msgstr "解析 MRO 条目;" + +#: ../../reference/datamodel.rst:1971 +msgid "the appropriate metaclass is determined;" +msgstr "确定适当的元类;" + +#: ../../reference/datamodel.rst:1972 +msgid "the class namespace is prepared;" +msgstr "准备类命名空间;" + +#: ../../reference/datamodel.rst:1973 +msgid "the class body is executed;" +msgstr "执行类主体;" + +#: ../../reference/datamodel.rst:1974 +msgid "the class object is created." +msgstr "创建类对象。" + +#: ../../reference/datamodel.rst:1978 +msgid "Resolving MRO entries" +msgstr "解析 MRO 条目" + +#: ../../reference/datamodel.rst:1980 +msgid "" +"If a base that appears in class definition is not an instance of " +":class:`type`, then an ``__mro_entries__`` method is searched on it. If " +"found, it is called with the original bases tuple. This method must return a" +" tuple of classes that will be used instead of this base. The tuple may be " +"empty, in such case the original base is ignored." +msgstr "" +"如果在类定义中出现的基类不是 :class:`type` 的实例,则使用 ``__mro_entries__`` " +"方法对其进行搜索,当找到结果时,它会以原始基类元组做参数进行调用。此方法必须返回类的元组以替代此基类被使用。元组可以为空,在此情况下原始基类将被忽略。" + +#: ../../reference/datamodel.rst:1988 +msgid ":pep:`560` - Core support for typing module and generic types" +msgstr ":pep:`560` - 对 typing 模块和泛型类型的核心支持" + +#: ../../reference/datamodel.rst:1992 +msgid "Determining the appropriate metaclass" +msgstr "确定适当的元类" + +#: ../../reference/datamodel.rst:1996 +msgid "" +"The appropriate metaclass for a class definition is determined as follows:" +msgstr "为一个类定义确定适当的元类是根据以下规则:" + +#: ../../reference/datamodel.rst:1998 +msgid "" +"if no bases and no explicit metaclass are given, then :func:`type` is used;" +msgstr "如果没有基类且没有显式指定元类,则使用 :func:`type`;" + +#: ../../reference/datamodel.rst:1999 +msgid "" +"if an explicit metaclass is given and it is *not* an instance of " +":func:`type`, then it is used directly as the metaclass;" +msgstr "如果给出一个显式元类而且 *不是* :func:`type` 的实例,则其会被直接用作元类;" + +#: ../../reference/datamodel.rst:2001 +msgid "" +"if an instance of :func:`type` is given as the explicit metaclass, or bases " +"are defined, then the most derived metaclass is used." +msgstr "如果给出一个 :func:`type` 的实例作为显式元类,或是定义了基类,则使用最近派生的元类。" + +#: ../../reference/datamodel.rst:2004 +msgid "" +"The most derived metaclass is selected from the explicitly specified " +"metaclass (if any) and the metaclasses (i.e. ``type(cls)``) of all specified" +" base classes. The most derived metaclass is one which is a subtype of *all*" +" of these candidate metaclasses. If none of the candidate metaclasses meets " +"that criterion, then the class definition will fail with ``TypeError``." +msgstr "" +"最近派生的元类会从显式指定的元类(如果有)以及所有指定的基类的元类(即 ``type(cls)``)中选取。最近派生的元类应为 *所有* " +"这些候选元类的一个子类型。如果没有一个候选元类符合该条件,则类定义将失败并抛出 ``TypeError``。" + +#: ../../reference/datamodel.rst:2014 +msgid "Preparing the class namespace" +msgstr "准备类命名空间" + +#: ../../reference/datamodel.rst:2019 +msgid "" +"Once the appropriate metaclass has been identified, then the class namespace" +" is prepared. If the metaclass has a ``__prepare__`` attribute, it is called" +" as ``namespace = metaclass.__prepare__(name, bases, **kwds)`` (where the " +"additional keyword arguments, if any, come from the class definition). The " +"``__prepare__`` method should be implemented as a :func:`classmethod " +"`. The namespace returned by ``__prepare__`` is passed in to " +"``__new__``, but when the final class object is created the namespace is " +"copied into a new ``dict``." +msgstr "" +"一旦确定了适当的元类,就开始准备类的命名空间。 如果元类具有 ``__prepare__`` 属性,它将以 ``namespace = " +"metaclass.__prepare__(name, bases, **kwds)`` " +"的形式被调用(其中如果存在任何额外关键字参数,则应来自类定义)。 ``__prepare__`` 方法应当被实现为 :func:`类方法 " +"`。 ``__prepare__`` 所返回的命名空间会被传入 " +"``__new__``,但是当最终的类对象被创建时该命名空间会被拷贝到一个新的 ``dict`` 中。" + +#: ../../reference/datamodel.rst:2028 +msgid "" +"If the metaclass has no ``__prepare__`` attribute, then the class namespace " +"is initialised as an empty ordered mapping." +msgstr "如果元类没有 ``__prepare__`` 属性,则类命名空间将初始化为一个空的有序映射。" + +#: ../../reference/datamodel.rst:2033 +msgid ":pep:`3115` - Metaclasses in Python 3000" +msgstr ":pep:`3115` - Python 3000 中的元类" + +#: ../../reference/datamodel.rst:2034 +msgid "Introduced the ``__prepare__`` namespace hook" +msgstr "引入 ``__prepare__`` 命名空间钩子" + +#: ../../reference/datamodel.rst:2038 +msgid "Executing the class body" +msgstr "执行类主体" + +#: ../../reference/datamodel.rst:2043 +msgid "" +"The class body is executed (approximately) as ``exec(body, globals(), " +"namespace)``. The key difference from a normal call to :func:`exec` is that " +"lexical scoping allows the class body (including any methods) to reference " +"names from the current and outer scopes when the class definition occurs " +"inside a function." +msgstr "" +"类主体会以(类似于) ``exec(body, globals(), namespace)`` 的形式被执行。普通调用与 :func:`exec` " +"的关键区别在于当类定义发生于函数内部时,词法作用域允许类主体(包括任何方法)引用来自当前和外部作用域的名称。" + +#: ../../reference/datamodel.rst:2049 +msgid "" +"However, even when the class definition occurs inside the function, methods " +"defined inside the class still cannot see names defined at the class scope. " +"Class variables must be accessed through the first parameter of instance or " +"class methods, or through the implicit lexically scoped ``__class__`` " +"reference described in the next section." +msgstr "" +"但是,即使当类定义发生于函数内部时,在类内部定义的方法仍然无法看到在类作用域层次上定义的名称。类变量必须通过实例的第一个形参或类方法来访问,或者是通过下一节中描述的隐式词法作用域的" +" ``__class__`` 引用。" + +#: ../../reference/datamodel.rst:2058 +msgid "Creating the class object" +msgstr "创建类对象" + +#: ../../reference/datamodel.rst:2065 +msgid "" +"Once the class namespace has been populated by executing the class body, the" +" class object is created by calling ``metaclass(name, bases, namespace, " +"**kwds)`` (the additional keywords passed here are the same as those passed " +"to ``__prepare__``)." +msgstr "" +"一旦执行类主体完成填充类命名空间,将通过调用 ``metaclass(name, bases, namespace, **kwds)`` " +"创建类对象(此处的附加关键字参数与传入 ``__prepare__`` 的相同)。" + +#: ../../reference/datamodel.rst:2070 +msgid "" +"This class object is the one that will be referenced by the zero-argument " +"form of :func:`super`. ``__class__`` is an implicit closure reference " +"created by the compiler if any methods in a class body refer to either " +"``__class__`` or ``super``. This allows the zero argument form of " +":func:`super` to correctly identify the class being defined based on lexical" +" scoping, while the class or instance that was used to make the current call" +" is identified based on the first argument passed to the method." +msgstr "" +"如果类主体中有任何方法引用了 ``__class__`` 或 ``super``,这个类对象会通过零参数形式的 :func:`super`. " +"``__class__`` 所引用,这是由编译器所创建的隐式闭包引用。这使用零参数形式的 :func:`super` " +"能够正确标识正在基于词法作用域来定义的类,而被用于进行当前调用的类或实例则是基于传递给方法的第一个参数来标识的。" + +#: ../../reference/datamodel.rst:2080 +msgid "" +"In CPython 3.6 and later, the ``__class__`` cell is passed to the metaclass " +"as a ``__classcell__`` entry in the class namespace. If present, this must " +"be propagated up to the ``type.__new__`` call in order for the class to be " +"initialised correctly. Failing to do so will result in a :exc:`RuntimeError`" +" in Python 3.8." +msgstr "" +"在 CPython 3.6 及之后的版本中,``__class__`` 单元会作为类命名空间中的 ``__classcell__`` 条目被传给元类。 " +"如果存在,它必须被向上传播给 ``type.__new__`` 调用,以便能正确地初始化该类。 如果不这样做,在 Python 3.8 中将引发 " +":exc:`RuntimeError`。" + +#: ../../reference/datamodel.rst:2086 +msgid "" +"When using the default metaclass :class:`type`, or any metaclass that " +"ultimately calls ``type.__new__``, the following additional customisation " +"steps are invoked after creating the class object:" +msgstr "" +"当使用默认的元类 :class:`type` 或者任何最终会调用 ``type.__new__`` " +"的元类时,以下额外的自定义步骤将在创建类对象之后被发起调用:" + +#: ../../reference/datamodel.rst:2090 +msgid "" +"first, ``type.__new__`` collects all of the descriptors in the class " +"namespace that define a :meth:`~object.__set_name__` method;" +msgstr "" +"首先,``type.__new__`` 将收集类命名空间中所有定义了 :meth:`~object.__set_name__` 方法的描述器;" + +#: ../../reference/datamodel.rst:2092 +msgid "" +"second, all of these ``__set_name__`` methods are called with the class " +"being defined and the assigned name of that particular descriptor;" +msgstr "接下来,所有这些 ``__set_name__`` 方法将使用所定义的类和特定描述器所赋的名称进行调用;" + +#: ../../reference/datamodel.rst:2094 +msgid "" +"finally, the :meth:`~object.__init_subclass__` hook is called on the " +"immediate parent of the new class in its method resolution order." +msgstr "最后,将在新类根据方法解析顺序所确定的直接父类上调用 :meth:`~object.__init_subclass__` 钩子。" + +#: ../../reference/datamodel.rst:2097 +msgid "" +"After the class object is created, it is passed to the class decorators " +"included in the class definition (if any) and the resulting object is bound " +"in the local namespace as the defined class." +msgstr "在类对象创建之后,它会被传给包含在类定义中的类装饰器(如果有的话),得到的对象将作为已定义的类绑定到局部命名空间。" + +#: ../../reference/datamodel.rst:2101 +msgid "" +"When a new class is created by ``type.__new__``, the object provided as the " +"namespace parameter is copied to a new ordered mapping and the original " +"object is discarded. The new copy is wrapped in a read-only proxy, which " +"becomes the :attr:`~object.__dict__` attribute of the class object." +msgstr "" +"当通过 ``type.__new__`` " +"创建一个新类时,提供以作为命名空间形参的对象会被复制到一个新的有序映射并丢弃原对象。这个新副本包装于一个只读代理中,后者则成为类对象的 " +":attr:`~object.__dict__` 属性。" + +#: ../../reference/datamodel.rst:2108 +msgid ":pep:`3135` - New super" +msgstr ":pep:`3135` - 新的超类型" + +#: ../../reference/datamodel.rst:2109 +msgid "Describes the implicit ``__class__`` closure reference" +msgstr "描述隐式的 ``__class__`` 闭包引用" + +#: ../../reference/datamodel.rst:2113 +msgid "Uses for metaclasses" +msgstr "元类的作用" + +#: ../../reference/datamodel.rst:2115 +msgid "" +"The potential uses for metaclasses are boundless. Some ideas that have been " +"explored include enum, logging, interface checking, automatic delegation, " +"automatic property creation, proxies, frameworks, and automatic resource " +"locking/synchronization." +msgstr "元类的潜在作用非常广泛。已经过尝试的设想包括枚举、日志、接口检查、自动委托、自动特征属性创建、代理、框架以及自动资源锁定/同步等等。" + +#: ../../reference/datamodel.rst:2122 +msgid "Customizing instance and subclass checks" +msgstr "自定义实例及子类检查" + +#: ../../reference/datamodel.rst:2124 +msgid "" +"The following methods are used to override the default behavior of the " +":func:`isinstance` and :func:`issubclass` built-in functions." +msgstr "以下方法被用来重载 :func:`isinstance` 和 :func:`issubclass` 内置函数的默认行为。" + +#: ../../reference/datamodel.rst:2127 +msgid "" +"In particular, the metaclass :class:`abc.ABCMeta` implements these methods " +"in order to allow the addition of Abstract Base Classes (ABCs) as \"virtual " +"base classes\" to any class or type (including built-in types), including " +"other ABCs." +msgstr "" +"特别地,元类 :class:`abc.ABCMeta` " +"实现了这些方法以便允许将抽象基类(ABC)作为“虚拟基类”添加到任何类或类型(包括内置类型),包括其他 ABC 之中。" + +#: ../../reference/datamodel.rst:2134 +msgid "" +"Return true if *instance* should be considered a (direct or indirect) " +"instance of *class*. If defined, called to implement ``isinstance(instance, " +"class)``." +msgstr "" +"如果 *instance* 应被视为 *class* 的一个(直接或间接)实例则返回真值。如果定义了此方法,则会被调用以实现 " +"``isinstance(instance, class)``。" + +#: ../../reference/datamodel.rst:2141 +msgid "" +"Return true if *subclass* should be considered a (direct or indirect) " +"subclass of *class*. If defined, called to implement ``issubclass(subclass," +" class)``." +msgstr "" +"Return true 如果 *subclass* 应被视为 *class* 的一个(直接或间接)子类则返回真值。如果定义了此方法,则会被调用以实现 " +"``issubclass(subclass, class)``。" + +#: ../../reference/datamodel.rst:2146 +msgid "" +"Note that these methods are looked up on the type (metaclass) of a class. " +"They cannot be defined as class methods in the actual class. This is " +"consistent with the lookup of special methods that are called on instances, " +"only in this case the instance is itself a class." +msgstr "" +"请注意这些方法的查找是基于类的类型(元类)。它们不能作为类方法在实际的类中被定义。这与基于实例被调用的特殊方法的查找是一致的,只有在此情况下实例本身被当作是类。" + +#: ../../reference/datamodel.rst:2157 +msgid ":pep:`3119` - Introducing Abstract Base Classes" +msgstr ":pep:`3119` - 引入抽象基类" + +#: ../../reference/datamodel.rst:2154 +msgid "" +"Includes the specification for customizing :func:`isinstance` and " +":func:`issubclass` behavior through :meth:`~class.__instancecheck__` and " +":meth:`~class.__subclasscheck__`, with motivation for this functionality in " +"the context of adding Abstract Base Classes (see the :mod:`abc` module) to " +"the language." +msgstr "" +"新增功能描述,通过 :meth:`~class.__instancecheck__` 和 " +":meth:`~class.__subclasscheck__` 来定制 :func:`isinstance` 和 :func:`issubclass`" +" 行为,加入此功能的动机是出于向该语言添加抽象基类的内容(参见 :mod:`abc` 模块)。" + +#: ../../reference/datamodel.rst:2162 +msgid "Emulating generic types" +msgstr "模拟泛型类型" + +#: ../../reference/datamodel.rst:2164 +msgid "" +"When using :term:`type annotations`, it is often useful to " +"*parameterize* a :term:`generic type` using Python's square-brackets " +"notation. For example, the annotation ``list[int]`` might be used to signify" +" a :class:`list` in which all the elements are of type :class:`int`." +msgstr "" +"当使用 :term:`类型标注 ` 时,使用 Python 的方括号标记来 *形参化* 一个 :term:`generic " +"type` 往往会很有用处。 例如,``list[int]`` 这样的标注可以被用来表示一个 :class:`list` 中的所有元素均为 " +":class:`int` 类型。" + +#: ../../reference/datamodel.rst:2172 +msgid ":pep:`484` - Type Hints" +msgstr ":pep:`484` —— 类型注解" + +#: ../../reference/datamodel.rst:2172 +msgid "Introducing Python's framework for type annotations" +msgstr "介绍 Python 中用于类型标注的框架" + +#: ../../reference/datamodel.rst:2175 +msgid ":ref:`Generic Alias Types`" +msgstr ":ref:`泛用别名类型`" + +#: ../../reference/datamodel.rst:2175 +msgid "Documentation for objects representing parameterized generic classes" +msgstr "代表形参化泛用类的对象的文档" + +#: ../../reference/datamodel.rst:2178 +msgid "" +":ref:`Generics`, :ref:`user-defined generics` and " +":class:`typing.Generic`" +msgstr "" +":ref:`Generics`, :ref:`用户自定义泛型 ` 和 " +":class:`typing.Generic`" + +#: ../../reference/datamodel.rst:2178 +msgid "" +"Documentation on how to implement generic classes that can be parameterized " +"at runtime and understood by static type-checkers." +msgstr "有关如何实现可在运行时被形参化并能被静态类型检查器所识别的泛用类的文档。" + +#: ../../reference/datamodel.rst:2181 +msgid "" +"A class can *generally* only be parameterized if it defines the special " +"class method ``__class_getitem__()``." +msgstr "一个类 *通常* 只有在定义了特殊的类方法 ``__class_getitem__()`` 时才能被形参化。" + +#: ../../reference/datamodel.rst:2186 +msgid "" +"Return an object representing the specialization of a generic class by type " +"arguments found in *key*." +msgstr "按照 *key* 参数指定的类型返回一个表示泛型类的专门化对象。" + +#: ../../reference/datamodel.rst:2189 +msgid "" +"When defined on a class, ``__class_getitem__()`` is automatically a class " +"method. As such, there is no need for it to be decorated with " +":func:`@classmethod` when it is defined." +msgstr "" +"当在类上定义时,``__class_getitem__()`` 会自动成为类方法。 因此,当它被定义时没有必要使用 " +":func:`@classmethod` 来装饰。" + +#: ../../reference/datamodel.rst:2195 +msgid "The purpose of *__class_getitem__*" +msgstr "*__class_getitem__* 的目的" + +#: ../../reference/datamodel.rst:2197 +msgid "" +"The purpose of :meth:`~object.__class_getitem__` is to allow runtime " +"parameterization of standard-library generic classes in order to more easily" +" apply :term:`type hints` to these classes." +msgstr "" +":meth:`~object.__class_getitem__` 的目的是允许标准库泛型类的运行时形参化以更方便地对这些类应用 :term:`类型提示" +" `。" + +#: ../../reference/datamodel.rst:2201 +msgid "" +"To implement custom generic classes that can be parameterized at runtime and" +" understood by static type-checkers, users should either inherit from a " +"standard library class that already implements " +":meth:`~object.__class_getitem__`, or inherit from :class:`typing.Generic`, " +"which has its own implementation of ``__class_getitem__()``." +msgstr "" +"要实现可以在运行时被形参化并可被静态类型检查所理解的自定义泛型类,用户应当从已经实现了 " +":meth:`~object.__class_getitem__` 的标准库类继承,或是从 :class:`typing.Generic` " +"继承,这个类拥有自己的 ``__class_getitem__()`` 实现。" + +#: ../../reference/datamodel.rst:2207 +msgid "" +"Custom implementations of :meth:`~object.__class_getitem__` on classes " +"defined outside of the standard library may not be understood by third-party" +" type-checkers such as mypy. Using ``__class_getitem__()`` on any class for " +"purposes other than type hinting is discouraged." +msgstr "" +"标准库以外的类上的 :meth:`~object.__class_getitem__` 自定义实现可能无法被第三方类型检查器如 mypy 所理解。 " +"不建议在任何类上出于类型提示以外的目的使用 ``__class_getitem__()``。" + +#: ../../reference/datamodel.rst:2217 +msgid "*__class_getitem__* versus *__getitem__*" +msgstr "*__class_getitem__* 与 *__getitem__*" + +#: ../../reference/datamodel.rst:2219 +msgid "" +"Usually, the :ref:`subscription` of an object using square " +"brackets will call the :meth:`~object.__getitem__` instance method defined " +"on the object's class. However, if the object being subscribed is itself a " +"class, the class method :meth:`~object.__class_getitem__` may be called " +"instead. ``__class_getitem__()`` should return a :ref:`GenericAlias` object if it is properly defined." +msgstr "" +"通常,使用方括号语法 :ref:`抽取 ` 一个对象将会调用在该对象的类上定义的 " +":meth:`~object.__getitem__` 实例方法。 不过,如果被拟抽取的对象本身是一个类,则可能会调用 " +":meth:`~object.__class_getitem__` 类方法。 ``__class_getitem__()`` " +"如果被正确地定义,则应当返回一个 :ref:`GenericAlias` 对象。" + +#: ../../reference/datamodel.rst:2226 +msgid "" +"Presented with the :term:`expression` ``obj[x]``, the Python interpreter " +"follows something like the following process to decide whether " +":meth:`~object.__getitem__` or :meth:`~object.__class_getitem__` should be " +"called::" +msgstr "" +"使用 :term:`表达式 ` ``obj[x]`` 来呈现,Python 解释器会遵循下面这样的过程来确定应当调用 " +":meth:`~object.__getitem__` 还是 :meth:`~object.__class_getitem__`::" + +#: ../../reference/datamodel.rst:2254 +msgid "" +"In Python, all classes are themselves instances of other classes. The class " +"of a class is known as that class's :term:`metaclass`, and most classes have" +" the :class:`type` class as their metaclass. :class:`type` does not define " +":meth:`~object.__getitem__`, meaning that expressions such as ``list[int]``," +" ``dict[str, float]`` and ``tuple[str, bytes]`` all result in " +":meth:`~object.__class_getitem__` being called::" +msgstr "" +"在 Python 中,所有的类自身也是其他类的实例。 一个类所属的类被称为该类的 :term:`metaclass`,并且大多数类都将 " +":class:`type` 类作为它们的元类。 :class:`type` 没有定义 :meth:`~object.__getitem__`,这意味着 " +"``list[int]``, ``dict[str, float]`` 和 ``tuple[str, bytes]`` 这样的表达式都将导致 " +":meth:`~object.__class_getitem__` 被调用::" + +#: ../../reference/datamodel.rst:2273 +msgid "" +"However, if a class has a custom metaclass that defines " +":meth:`~object.__getitem__`, subscribing the class may result in different " +"behaviour. An example of this can be found in the :mod:`enum` module::" +msgstr "" +"然而,如果一个类属于定义了 :meth:`~object.__getitem__` 的自定义元类,则抽取该类可能导致不同的行为。 这方面的一个例子可以在" +" :mod:`enum` 模块中找到::" + +#: ../../reference/datamodel.rst:2298 +msgid ":pep:`560` - Core Support for typing module and generic types" +msgstr ":pep:`560` - 对 typing 模块和泛型的核心支持" + +#: ../../reference/datamodel.rst:2297 +msgid "" +"Introducing :meth:`~object.__class_getitem__`, and outlining when a " +":ref:`subscription` results in ``__class_getitem__()`` being " +"called instead of :meth:`~object.__getitem__`" +msgstr "" +"介绍 :meth:`~object.__class_getitem__`,并指明 :ref:`抽取 ` 在何时会导致 " +"``__class_getitem__()`` 而不是 :meth:`~object.__getitem__` 被调用" + +#: ../../reference/datamodel.rst:2305 +msgid "Emulating callable objects" +msgstr "模拟可调用对象" + +#: ../../reference/datamodel.rst:2312 +msgid "" +"Called when the instance is \"called\" as a function; if this method is " +"defined, ``x(arg1, arg2, ...)`` roughly translates to ``type(x).__call__(x, " +"arg1, ...)``." +msgstr "" +"此方法会在实例作为一个函数被“调用”时被调用;如果定义了此方法,则 ``x(arg1, arg2, ...)`` 就大致可以被改写为 " +"``type(x).__call__(x, arg1, ...)``。" + +#: ../../reference/datamodel.rst:2319 +msgid "Emulating container types" +msgstr "模拟容器类型" + +#: ../../reference/datamodel.rst:2321 +msgid "" +"The following methods can be defined to implement container objects. " +"Containers usually are :term:`sequences ` (such as :class:`lists " +"` or :class:`tuples `) or :term:`mappings ` (like " +":class:`dictionaries `), but can represent other containers as well. " +"The first set of methods is used either to emulate a sequence or to emulate " +"a mapping; the difference is that for a sequence, the allowable keys should " +"be the integers *k* for which ``0 <= k < N`` where *N* is the length of the " +"sequence, or :class:`slice` objects, which define a range of items. It is " +"also recommended that mappings provide the methods :meth:`keys`, " +":meth:`values`, :meth:`items`, :meth:`get`, :meth:`clear`, " +":meth:`setdefault`, :meth:`pop`, :meth:`popitem`, :meth:`!copy`, and " +":meth:`update` behaving similar to those for Python's standard " +":class:`dictionary ` objects. The :mod:`collections.abc` module " +"provides a :class:`~collections.abc.MutableMapping` :term:`abstract base " +"class` to help create those methods from a base set of " +":meth:`~object.__getitem__`, :meth:`~object.__setitem__`, " +":meth:`~object.__delitem__`, and :meth:`keys`. Mutable sequences should " +"provide methods :meth:`append`, :meth:`count`, :meth:`index`, " +":meth:`extend`, :meth:`insert`, :meth:`pop`, :meth:`remove`, :meth:`reverse`" +" and :meth:`sort`, like Python standard :class:`list` objects. Finally, " +"sequence types should implement addition (meaning concatenation) and " +"multiplication (meaning repetition) by defining the methods " +":meth:`~object.__add__`, :meth:`~object.__radd__`, :meth:`~object.__iadd__`," +" :meth:`~object.__mul__`, :meth:`~object.__rmul__` and " +":meth:`~object.__imul__` described below; they should not define other " +"numerical operators. It is recommended that both mappings and sequences " +"implement the :meth:`~object.__contains__` method to allow efficient use of " +"the ``in`` operator; for mappings, ``in`` should search the mapping's keys; " +"for sequences, it should search through the values. It is further " +"recommended that both mappings and sequences implement the " +":meth:`~object.__iter__` method to allow efficient iteration through the " +"container; for mappings, :meth:`__iter__` should iterate through the " +"object's keys; for sequences, it should iterate through the values." +msgstr "" +"可以定义下列方法来实现容器对象。 窗口通常属于 :term:`序列 ` (如 :class:`列表 ` 或 " +":class:`元组 `) 或者 :term:`映射 ` (如 :class:`字典 " +"`),但也有表现为其他形式的容器。 前几个方法被用来模拟序列或是模拟映射;两者的不同之处在于序列允许的键应为整数 *k* 并且 ``0 <=" +" k < N`` 其中 *N* 是序列或 :class:`slice` 对象的长度,它们定义了条目的范围。 此外还建议让映射提供 " +":meth:`keys`, :meth:`values`, :meth:`items`, :meth:`get`, :meth:`clear`, " +":meth:`setdefault`, :meth:`pop`, :meth:`popitem`, :meth:`!copy` 以及 " +":meth:`update` 等方法,它们的行为应与 Python 的标准 :class:`字典 ` 对象类似。 此外 " +":mod:`collections.abc` 模块提供了一个 :class:`~collections.abc.MutableMapping` " +":term:`abstract base class` 以便根据由 :meth:`~object.__getitem__`, " +":meth:`~object.__setitem__`, :meth:`~object.__delitem__` 和 :meth:`keys` " +"组成的基本集来创建所需的方法。 可变序列还应提供 :meth:`append`, :meth:`count`, :meth:`index`, " +":meth:`extend`, :meth:`insert`, :meth:`pop`, :meth:`remove`, :meth:`reverse`" +" 和 :meth:`sort` 等方法,就像 Python 的标准 :class:`list` 对象那样。 最后,序列类型还应通过定义下文描述的 " +":meth:`~object.__add__`, :meth:`~object.__radd__`, :meth:`~object.__iadd__`," +" :meth:`~object.__mul__`, :meth:`~object.__rmul__` 和 " +":meth:`~object.__imul__` 等方法来实现加法(指拼接)和乘法(指重复);它们不应定义其他数值运算符。 此外还建议映射和序列都实现 " +":meth:`~object.__contains__` 方法以允许高效地使用 ``in`` 运算符;对于映射,``in`` " +"应当搜索映射的键;对于序列,则应当搜索其中的值。 另外还建议映射和序列都实现 :meth:`~object.__iter__` " +"方法以允许高效地迭代容器中的条目;对于映射,:meth:`__iter__` 应当迭代对象的键;对于序列,则应当迭代其中的值。" + +#: ../../reference/datamodel.rst:2361 +msgid "" +"Called to implement the built-in function :func:`len`. Should return the " +"length of the object, an integer ``>=`` 0. Also, an object that doesn't " +"define a :meth:`__bool__` method and whose :meth:`__len__` method returns " +"zero is considered to be false in a Boolean context." +msgstr "" +"调用此方法以实现内置函数 :func:`len`。应该返回对象的长度,以一个 ``>=`` 0 的整数表示。此外,如果一个对象未定义 " +":meth:`__bool__` 方法而其 :meth:`__len__` 方法返回值为零,则在布尔运算中会被视为假值。" + +#: ../../reference/datamodel.rst:2368 +msgid "" +"In CPython, the length is required to be at most :attr:`sys.maxsize`. If the" +" length is larger than :attr:`!sys.maxsize` some features (such as " +":func:`len`) may raise :exc:`OverflowError`. To prevent raising " +":exc:`!OverflowError` by truth value testing, an object must define a " +":meth:`__bool__` method." +msgstr "" +"在 CPython 中,要求长度最大为 :attr:`sys.maxsize`。如果长度大于 :attr:`!sys.maxsize` 则某些特性 " +"(例如 :func:`len`) 可能会引发 :exc:`OverflowError`。要通过真值检测来防止引发 " +":exc:`!OverflowError`,对象必须定义 :meth:`__bool__` 方法。" + +#: ../../reference/datamodel.rst:2377 +msgid "" +"Called to implement :func:`operator.length_hint`. Should return an estimated" +" length for the object (which may be greater or less than the actual " +"length). The length must be an integer ``>=`` 0. The return value may also " +"be :const:`NotImplemented`, which is treated the same as if the " +"``__length_hint__`` method didn't exist at all. This method is purely an " +"optimization and is never required for correctness." +msgstr "" +"调用此方法以实现 :func:`operator.length_hint`。 应该返回对象长度的估计值(可能大于或小于实际长度)。 此长度应为一个 " +"``>=`` 0 的整数。 返回值也可以为 :const:`NotImplemented`,这会被视作与 ``__length_hint__`` " +"方法完全不存在时一样处理。 此方法纯粹是为了优化性能,并不要求正确无误。" + +#: ../../reference/datamodel.rst:2391 +msgid "" +"Slicing is done exclusively with the following three methods. A call like " +"::" +msgstr "切片是通过下述三个专门方法完成的。以下形式的调用 ::" + +#: ../../reference/datamodel.rst:2395 +msgid "is translated to ::" +msgstr "会为转写为 ::" + +#: ../../reference/datamodel.rst:2399 +msgid "and so forth. Missing slice items are always filled in with ``None``." +msgstr "其他形式以此类推。略去的切片项总是以 ``None`` 补全。" + +#: ../../reference/datamodel.rst:2404 +msgid "" +"Called to implement evaluation of ``self[key]``. For :term:`sequence` types," +" the accepted keys should be integers and slice objects. Note that the " +"special interpretation of negative indexes (if the class wishes to emulate a" +" :term:`sequence` type) is up to the :meth:`__getitem__` method. If *key* is" +" of an inappropriate type, :exc:`TypeError` may be raised; if of a value " +"outside the set of indexes for the sequence (after any special " +"interpretation of negative values), :exc:`IndexError` should be raised. For " +":term:`mapping` types, if *key* is missing (not in the container), " +":exc:`KeyError` should be raised." +msgstr "" +"调用此方法以实现 ``self[key]`` 的未付。 对于 :term:`sequence` 类型,接受的键应为整数和切片对象。 " +"请注意负数索引(如果类想要模拟 :term:`sequence` 类型)的特殊解读是依赖于 :meth:`__getitem__` 方法。 如果 " +"*key* 的类型不正确,则会引发 :exc:`TypeError`;如果为序列索引集范围以外的值(在进行任何负数索引的特殊解读之后),则应当引发 " +":exc:`IndexError`。 对于 :term:`mapping` 类型,如果 *key* 找不到(不在容器中),则应当引发 " +":exc:`KeyError`。" + +#: ../../reference/datamodel.rst:2416 +msgid "" +":keyword:`for` loops expect that an :exc:`IndexError` will be raised for " +"illegal indexes to allow proper detection of the end of the sequence." +msgstr ":keyword:`for` 循环在有不合法索引时会期待捕获 :exc:`IndexError` 以便正确地检测到序列的结束。" + +#: ../../reference/datamodel.rst:2421 +msgid "" +"When :ref:`subscripting` a *class*, the special class method " +":meth:`~object.__class_getitem__` may be called instead of " +"``__getitem__()``. See :ref:`classgetitem-versus-getitem` for more details." +msgstr "" +"当 :ref:`抽取 ` 一个 *class* 时,可能会调用特殊类方法 " +":meth:`~object.__class_getitem__` 而不是 ``__getitem__()``。 请参阅 " +":ref:`classgetitem-versus-getitem` 了解详情。" + +#: ../../reference/datamodel.rst:2429 +msgid "" +"Called to implement assignment to ``self[key]``. Same note as for " +":meth:`__getitem__`. This should only be implemented for mappings if the " +"objects support changes to the values for keys, or if new keys can be added," +" or for sequences if elements can be replaced. The same exceptions should " +"be raised for improper *key* values as for the :meth:`__getitem__` method." +msgstr "" +"调用此方法以实现向 ``self[key]`` 赋值。注意事项与 :meth:`__getitem__` " +"相同。为对象实现此方法应该仅限于需要映射允许基于键修改值或添加键,或是序列允许元素被替换时。不正确的 *key* 值所引发的异常应与 " +":meth:`__getitem__` 方法的情况相同。" + +#: ../../reference/datamodel.rst:2438 +msgid "" +"Called to implement deletion of ``self[key]``. Same note as for " +":meth:`__getitem__`. This should only be implemented for mappings if the " +"objects support removal of keys, or for sequences if elements can be removed" +" from the sequence. The same exceptions should be raised for improper *key*" +" values as for the :meth:`__getitem__` method." +msgstr "" +"调用此方法以实现 ``self[key]`` 的删除。注意事项与 :meth:`__getitem__` " +"相同。为对象实现此方法应该权限于需要映射允许移除键,或是序列允许移除元素时。不正确的 *key* 值所引发的异常应与 " +":meth:`__getitem__` 方法的情况相同。" + +#: ../../reference/datamodel.rst:2447 +msgid "" +"Called by :class:`dict`\\ .\\ :meth:`__getitem__` to implement ``self[key]``" +" for dict subclasses when key is not in the dictionary." +msgstr "" +"此方法由 :class:`dict`\\ .\\ :meth:`__getitem__` 在找不到字典中的键时调用以实现 dict 子类的 " +"``self[key]``。" + +#: ../../reference/datamodel.rst:2453 +msgid "" +"This method is called when an iterator is required for a container. This " +"method should return a new iterator object that can iterate over all the " +"objects in the container. For mappings, it should iterate over the keys of " +"the container." +msgstr "" +"此方法在需要为容器创建迭代器时被调用。此方法应该返回一个新的迭代器对象,它能够逐个迭代容器中的所有对象。对于映射,它应该逐个迭代容器中的键。" + +#: ../../reference/datamodel.rst:2457 +msgid "" +"Iterator objects also need to implement this method; they are required to " +"return themselves. For more information on iterator objects, see " +":ref:`typeiter`." +msgstr "迭代器对象也需要实现此方法;它们需要返回对象自身。有关迭代器对象的详情请参看 :ref:`typeiter` 一节。" + +#: ../../reference/datamodel.rst:2463 +msgid "" +"Called (if present) by the :func:`reversed` built-in to implement reverse " +"iteration. It should return a new iterator object that iterates over all " +"the objects in the container in reverse order." +msgstr "" +"此方法(如果存在)会被 :func:`reversed` 内置函数调用以实现逆向迭代。它应当返回一个新的以逆序逐个迭代容器内所有对象的迭代器对象。" + +#: ../../reference/datamodel.rst:2467 +msgid "" +"If the :meth:`__reversed__` method is not provided, the :func:`reversed` " +"built-in will fall back to using the sequence protocol (:meth:`__len__` and " +":meth:`__getitem__`). Objects that support the sequence protocol should " +"only provide :meth:`__reversed__` if they can provide an implementation that" +" is more efficient than the one provided by :func:`reversed`." +msgstr "" +"如果未提供 :meth:`__reversed__` 方法,则 :func:`reversed` 内置函数将回退到使用序列协议 " +"(:meth:`__len__` 和 :meth:`__getitem__`)。支持序列协议的对象应当仅在能够提供比 :func:`reversed` " +"所提供的实现更高效的实现时才提供 :meth:`__reversed__` 方法。" + +#: ../../reference/datamodel.rst:2474 +msgid "" +"The membership test operators (:keyword:`in` and :keyword:`not in`) are " +"normally implemented as an iteration through a container. However, container" +" objects can supply the following special method with a more efficient " +"implementation, which also does not require the object be iterable." +msgstr "" +"成员检测运算符 (:keyword:`in` 和 :keyword:`not in`) 通常以对容器进行逐个迭代的方式来实现。 " +"不过,容器对象可以提供以下特殊方法并采用更有效率的实现,这样也不要求对象必须为可迭代对象。" + +#: ../../reference/datamodel.rst:2481 +msgid "" +"Called to implement membership test operators. Should return true if *item*" +" is in *self*, false otherwise. For mapping objects, this should consider " +"the keys of the mapping rather than the values or the key-item pairs." +msgstr "" +"调用此方法以实现成员检测运算符。如果 *item* 是 *self* " +"的成员则应返回真,否则返回假。对于映射类型,此检测应基于映射的键而不是值或者键值对。" + +#: ../../reference/datamodel.rst:2485 +msgid "" +"For objects that don't define :meth:`__contains__`, the membership test " +"first tries iteration via :meth:`__iter__`, then the old sequence iteration " +"protocol via :meth:`__getitem__`, see :ref:`this section in the language " +"reference `." +msgstr "" +"对于未定义 :meth:`__contains__` 的对象,成员检测将首先尝试通过 :meth:`__iter__` 进行迭代,然后再使用 " +":meth:`__getitem__` 的旧式序列迭代协议,参看 :ref:`语言参考中的相应部分 `。" + +#: ../../reference/datamodel.rst:2494 +msgid "Emulating numeric types" +msgstr "模拟数字类型" + +#: ../../reference/datamodel.rst:2496 +msgid "" +"The following methods can be defined to emulate numeric objects. Methods " +"corresponding to operations that are not supported by the particular kind of" +" number implemented (e.g., bitwise operations for non-integral numbers) " +"should be left undefined." +msgstr "定义以下方法即可模拟数字类型。特定种类的数字不支持的运算(例如非整数不能进行位运算)所对应的方法应当保持未定义状态。" + +#: ../../reference/datamodel.rst:2522 +msgid "" +"These methods are called to implement the binary arithmetic operations " +"(``+``, ``-``, ``*``, ``@``, ``/``, ``//``, ``%``, :func:`divmod`, " +":func:`pow`, ``**``, ``<<``, ``>>``, ``&``, ``^``, ``|``). For instance, to" +" evaluate the expression ``x + y``, where *x* is an instance of a class that" +" has an :meth:`__add__` method, ``x.__add__(y)`` is called. The " +":meth:`__divmod__` method should be the equivalent to using " +":meth:`__floordiv__` and :meth:`__mod__`; it should not be related to " +":meth:`__truediv__`. Note that :meth:`__pow__` should be defined to accept " +"an optional third argument if the ternary version of the built-in " +":func:`pow` function is to be supported." +msgstr "" +"调用这些方法来实现二进制算术运算 (``+``, ``-``, ``*``, ``@``, ``/``, ``//``, ``%``, " +":func:`divmod`, :func:`pow`, ``**``, ``<<``, ``>>``, ``&``, ``^``, " +"``|``)。例如,求表达式 ``x + y`` 的值,其中 *x* 是具有 :meth:`__add__` 方法的类的一个实例,则会调用 " +"``x.__add__(y)``。:meth:`__divmod__` 方法应该等价于使用 :meth:`__floordiv__` 和 " +":meth:`__mod__`,它不应该被关联到 :meth:`__truediv__`。请注意如果要支持三元版本的内置 :func:`pow` " +"函数,则 :meth:`__pow__` 的定义应该接受可选的第三个参数。" + +#: ../../reference/datamodel.rst:2533 +msgid "" +"If one of those methods does not support the operation with the supplied " +"arguments, it should return ``NotImplemented``." +msgstr "如果这些方法中的某一个不支持与所提供参数进行运算,它应该返回 ``NotImplemented``。" + +#: ../../reference/datamodel.rst:2556 +msgid "" +"These methods are called to implement the binary arithmetic operations " +"(``+``, ``-``, ``*``, ``@``, ``/``, ``//``, ``%``, :func:`divmod`, " +":func:`pow`, ``**``, ``<<``, ``>>``, ``&``, ``^``, ``|``) with reflected " +"(swapped) operands. These functions are only called if the left operand " +"does not support the corresponding operation [#]_ and the operands are of " +"different types. [#]_ For instance, to evaluate the expression ``x - y``, " +"where *y* is an instance of a class that has an :meth:`__rsub__` method, " +"``y.__rsub__(x)`` is called if ``x.__sub__(y)`` returns *NotImplemented*." +msgstr "" +"调用这些方法来实现具有反射(交换)操作数的二进制算术运算 (``+``, ``-``, ``*``, ``@``, ``/``, ``//``, " +"``%``, :func:`divmod`, :func:`pow`, ``**``, ``<<``, ``>>``, ``&``, ``^``, " +"``|``)。这些成员函数仅会在左操作数不支持相应运算 [#]_ 且两个操作数类型不同时被调用。[#]_ 例如,求表达式 ``x - y`` 的值,其中" +" *y* 是具有 :meth:`__rsub__` 方法的类的一个实例,则当 ``x.__sub__(y)`` 返回 *NotImplemented* " +"时会调用 ``y.__rsub__(x)``。" + +#: ../../reference/datamodel.rst:2567 +msgid "" +"Note that ternary :func:`pow` will not try calling :meth:`__rpow__` (the " +"coercion rules would become too complicated)." +msgstr "请注意三元版的 :func:`pow` 并不会尝试调用 :meth:`__rpow__` (因为强制转换规则会太过复杂)。" + +#: ../../reference/datamodel.rst:2572 +msgid "" +"If the right operand's type is a subclass of the left operand's type and " +"that subclass provides a different implementation of the reflected method " +"for the operation, this method will be called before the left operand's non-" +"reflected method. This behavior allows subclasses to override their " +"ancestors' operations." +msgstr "" +"如果右操作数类型为左操作数类型的一个子类,且该子类提供了指定运算的反射方法,则此方法将先于左操作数的非反射方法被调用。 " +"此行为可允许子类重载其祖先类的运算符。" + +#: ../../reference/datamodel.rst:2593 +msgid "" +"These methods are called to implement the augmented arithmetic assignments " +"(``+=``, ``-=``, ``*=``, ``@=``, ``/=``, ``//=``, ``%=``, ``**=``, ``<<=``, " +"``>>=``, ``&=``, ``^=``, ``|=``). These methods should attempt to do the " +"operation in-place (modifying *self*) and return the result (which could be," +" but does not have to be, *self*). If a specific method is not defined, the" +" augmented assignment falls back to the normal methods. For instance, if " +"*x* is an instance of a class with an :meth:`__iadd__` method, ``x += y`` is" +" equivalent to ``x = x.__iadd__(y)`` . Otherwise, ``x.__add__(y)`` and " +"``y.__radd__(x)`` are considered, as with the evaluation of ``x + y``. In " +"certain situations, augmented assignment can result in unexpected errors " +"(see :ref:`faq-augmented-assignment-tuple-error`), but this behavior is in " +"fact part of the data model." +msgstr "" +"调用这些方法来实现扩展算术赋值 (``+=``, ``-=``, ``*=``, ``@=``, ``/=``, ``//=``, ``%=``, " +"``**=``, ``<<=``, ``>>=``, ``&=``, ``^=``, ``|=``)。这些方法应该尝试进行自身操作 (修改 " +"*self*) 并返回结果 (结果应该但并非必须为 *self*)。如果某个方法未被定义,相应的扩展算术赋值将回退到普通方法。例如,如果 *x* 是具有" +" :meth:`__iadd__` 方法的类的一个实例,则 ``x += y`` 就等价于 ``x = x.__iadd__(y)``。否则就如 ``x" +" + y`` 的求值一样选择 ``x.__add__(y)`` 和 ``y.__radd__(x)``。在某些情况下,扩展赋值可导致未预期的错误 (参见" +" :ref:`faq-augmented-assignment-tuple-error`),但此行为实际上是数据模型的一个组成部分。" + +#: ../../reference/datamodel.rst:2608 +msgid "" +"Due to a bug in the dispatching mechanism for ``**=``, a class that defines " +":meth:`__ipow__` but returns ``NotImplemented`` would fail to fall back to " +"``x.__pow__(y)`` and ``y.__rpow__(x)``. This bug is fixed in Python 3.10." +msgstr "" +"由于 ``**=`` 的分配机制存在一个错误,定义了 :meth:`__ipow__` 但是返回 ``NotImplemented`` 的类将无法回退到" +" ``x.__pow__(y)`` 和 ``y.__rpow__(x)``。 此错误在 Python 3.10 中被修正。" + +#: ../../reference/datamodel.rst:2621 +msgid "" +"Called to implement the unary arithmetic operations (``-``, ``+``, " +":func:`abs` and ``~``)." +msgstr "调用此方法以实现一元算术运算 (``-``, ``+``, :func:`abs` 和 ``~``)。" + +#: ../../reference/datamodel.rst:2634 +msgid "" +"Called to implement the built-in functions :func:`complex`, :func:`int` and " +":func:`float`. Should return a value of the appropriate type." +msgstr "" +"调用这些方法以实现内置函数 :func:`complex`, :func:`int` 和 :func:`float`。应当返回一个相应类型的值。" + +#: ../../reference/datamodel.rst:2641 +msgid "" +"Called to implement :func:`operator.index`, and whenever Python needs to " +"losslessly convert the numeric object to an integer object (such as in " +"slicing, or in the built-in :func:`bin`, :func:`hex` and :func:`oct` " +"functions). Presence of this method indicates that the numeric object is an " +"integer type. Must return an integer." +msgstr "" +"调用此方法以实现 :func:`operator.index` 以及 Python 需要无损地将数字对象转换为整数对象的场合(例如切片或是内置的 " +":func:`bin`, :func:`hex` 和 :func:`oct` 函数)。 存在此方法表明数字对象属于整数类型。 必须返回一个整数。" + +#: ../../reference/datamodel.rst:2647 +msgid "" +"If :meth:`__int__`, :meth:`__float__` and :meth:`__complex__` are not " +"defined then corresponding built-in functions :func:`int`, :func:`float` and" +" :func:`complex` fall back to :meth:`__index__`." +msgstr "" +"如果未定义 :meth:`__int__`, :meth:`__float__` 和 :meth:`__complex__` 则相应的内置函数 " +":func:`int`, :func:`float` 和 :func:`complex` 将回退为 :meth:`__index__`。" + +#: ../../reference/datamodel.rst:2659 +msgid "" +"Called to implement the built-in function :func:`round` and :mod:`math` " +"functions :func:`~math.trunc`, :func:`~math.floor` and :func:`~math.ceil`. " +"Unless *ndigits* is passed to :meth:`!__round__` all these methods should " +"return the value of the object truncated to an :class:`~numbers.Integral` " +"(typically an :class:`int`)." +msgstr "" +"调用这些方法以实现内置函数 :func:`round` 以及 :mod:`math` 函数 :func:`~math.trunc`, " +":func:`~math.floor` 和 :func:`~math.ceil`。 除了将 *ndigits* 传给 " +":meth:`!__round__` 的情况之外这些方法的返回值都应当是原对象截断为 :class:`~numbers.Integral` (通常为 " +":class:`int`)。" + +#: ../../reference/datamodel.rst:2665 +msgid "" +"The built-in function :func:`int` falls back to :meth:`__trunc__` if neither" +" :meth:`__int__` nor :meth:`__index__` is defined." +msgstr "" +"如果 :meth:`__int__` 或 :meth:`__index__` 均未被定义则内置函数 :func:`int` 会回退至 " +":meth:`__trunc__`。" + +#: ../../reference/datamodel.rst:2672 +msgid "With Statement Context Managers" +msgstr "with 语句上下文管理器" + +#: ../../reference/datamodel.rst:2674 +msgid "" +"A :dfn:`context manager` is an object that defines the runtime context to be" +" established when executing a :keyword:`with` statement. The context manager" +" handles the entry into, and the exit from, the desired runtime context for " +"the execution of the block of code. Context managers are normally invoked " +"using the :keyword:`!with` statement (described in section :ref:`with`), but" +" can also be used by directly invoking their methods." +msgstr "" +":dfn:`上下文管理器` 是一个对象,它定义了在执行 :keyword:`with` 语句时要建立的运行时上下文。 " +"上下文管理器处理进入和退出所需运行时上下文以执行代码块。 通常使用 :keyword:`!with` 语句(在 :ref:`with` " +"中描述),但是也可以通过直接调用它们的方法来使用。" + +#: ../../reference/datamodel.rst:2685 +msgid "" +"Typical uses of context managers include saving and restoring various kinds " +"of global state, locking and unlocking resources, closing opened files, etc." +msgstr "上下文管理器的典型用法包括保存和恢复各种全局状态,锁定和解锁资源,关闭打开的文件等等。" + +#: ../../reference/datamodel.rst:2688 +msgid "" +"For more information on context managers, see :ref:`typecontextmanager`." +msgstr "要了解上下文管理器的更多信息,请参阅 :ref:`typecontextmanager`。" + +#: ../../reference/datamodel.rst:2693 +msgid "" +"Enter the runtime context related to this object. The :keyword:`with` " +"statement will bind this method's return value to the target(s) specified in" +" the :keyword:`!as` clause of the statement, if any." +msgstr "" +"进入与此对象相关的运行时上下文。 :keyword:`with` 语句将会绑定这个方法的返回值到 :keyword:`!as` " +"子句中指定的目标,如果有的话。" + +#: ../../reference/datamodel.rst:2700 +msgid "" +"Exit the runtime context related to this object. The parameters describe the" +" exception that caused the context to be exited. If the context was exited " +"without an exception, all three arguments will be :const:`None`." +msgstr "" +"退出关联到此对象的运行时上下文。 各个参数描述了导致上下文退出的异常。 如果上下文是无异常地退出的,三个参数都将为 :const:`None`。" + +#: ../../reference/datamodel.rst:2704 +msgid "" +"If an exception is supplied, and the method wishes to suppress the exception" +" (i.e., prevent it from being propagated), it should return a true value. " +"Otherwise, the exception will be processed normally upon exit from this " +"method." +msgstr "如果提供了异常,并且希望方法屏蔽此异常(即避免其被传播),则应当返回真值。 否则的话,异常将在退出此方法时按正常流程处理。" + +#: ../../reference/datamodel.rst:2708 +msgid "" +"Note that :meth:`__exit__` methods should not reraise the passed-in " +"exception; this is the caller's responsibility." +msgstr "请注意 :meth:`__exit__` 方法不应该重新引发被传入的异常,这是调用者的责任。" + +#: ../../reference/datamodel.rst:2715 +msgid ":pep:`343` - The \"with\" statement" +msgstr ":pep:`343` - \"with\" 语句" + +#: ../../reference/datamodel.rst:2715 +msgid "" +"The specification, background, and examples for the Python :keyword:`with` " +"statement." +msgstr "Python :keyword:`with` 语句的规范描述、背景和示例。" + +#: ../../reference/datamodel.rst:2722 +msgid "Special method lookup" +msgstr "特殊方法查找" + +#: ../../reference/datamodel.rst:2724 +msgid "" +"For custom classes, implicit invocations of special methods are only " +"guaranteed to work correctly if defined on an object's type, not in the " +"object's instance dictionary. That behaviour is the reason why the " +"following code raises an exception::" +msgstr "" +"对于自定义类来说,特殊方法的隐式唤起仅保证在其定义于对象类型中时能正确地发挥作用,而不能定义在对象实例字典中。 该行为就是以下代码会引发异常的原因。::" + +#: ../../reference/datamodel.rst:2739 +msgid "" +"The rationale behind this behaviour lies with a number of special methods " +"such as :meth:`~object.__hash__` and :meth:`~object.__repr__` that are " +"implemented by all objects, including type objects. If the implicit lookup " +"of these methods used the conventional lookup process, they would fail when " +"invoked on the type object itself::" +msgstr "" +"此行为背后的原理在于包括类型对象在内的所有对象都会实现的几个特殊方法如 :meth:`~object.__hash__` 和 " +":meth:`~object.__repr__`。 如果这些方法的隐式查找使用了传统的查找过程,则当它们在针对类型对象自身被唤起时将会失败::" + +#: ../../reference/datamodel.rst:2753 +msgid "" +"Incorrectly attempting to invoke an unbound method of a class in this way is" +" sometimes referred to as 'metaclass confusion', and is avoided by bypassing" +" the instance when looking up special methods::" +msgstr "以这种方式不正确地尝试唤起一个类的未绑定方法有时被称为‘元类混淆’,可以通过在查找特殊方法时绕过实例的方式来避免::" + +#: ../../reference/datamodel.rst:2762 +msgid "" +"In addition to bypassing any instance attributes in the interest of " +"correctness, implicit special method lookup generally also bypasses the " +":meth:`~object.__getattribute__` method even of the object's metaclass::" +msgstr "" +"除了出于正确性考虑而会绕过任何实例属性,隐式特殊方法查找通常还会绕过 :meth:`~object.__getattribute__` " +"方法,甚至包括对象的元类::" + +#: ../../reference/datamodel.rst:2788 +msgid "" +"Bypassing the :meth:`~object.__getattribute__` machinery in this fashion " +"provides significant scope for speed optimisations within the interpreter, " +"at the cost of some flexibility in the handling of special methods (the " +"special method *must* be set on the class object itself in order to be " +"consistently invoked by the interpreter)." +msgstr "" +"以这种方式绕过 :meth:`~object.__getattribute__` " +"机制为解释器内部的速度优化提供了显著的空间,其代价则是牺牲了一些处理特殊方法时的灵活性(特殊方法 *must* " +"必须设置在类对象自身上以便始终一致地由解释器唤起)。" + +#: ../../reference/datamodel.rst:2799 +msgid "Coroutines" +msgstr "协程" + +#: ../../reference/datamodel.rst:2803 +msgid "Awaitable Objects" +msgstr "可等待对象" + +#: ../../reference/datamodel.rst:2805 +msgid "" +"An :term:`awaitable` object generally implements an " +":meth:`~object.__await__` method. :term:`Coroutine objects ` " +"returned from :keyword:`async def` functions are awaitable." +msgstr "" +":term:`awaitable` 对象主要实现了 :meth:`~object.__await__` 方法。 从 :keyword:`async " +"def` 函数返回的 :term:`协程对象 ` 即为可等待对象。" + +#: ../../reference/datamodel.rst:2811 +msgid "" +"The :term:`generator iterator` objects returned from generators decorated " +"with :func:`types.coroutine` or :func:`asyncio.coroutine` are also " +"awaitable, but they do not implement :meth:`~object.__await__`." +msgstr "" +"从带有 :func:`types.coroutine` 或 :func:`asyncio.coroutine` 装饰器的生成器返回的 " +":term:`generator iterator` 对象也属于可等待对象,但它们并未实现 :meth:`~object.__await__`。" + +#: ../../reference/datamodel.rst:2817 +msgid "" +"Must return an :term:`iterator`. Should be used to implement " +":term:`awaitable` objects. For instance, :class:`asyncio.Future` implements" +" this method to be compatible with the :keyword:`await` expression." +msgstr "" +"必须返回一个 :term:`iterator`。 应当被用来实现 :term:`awaitable` 对象。 " +"例如,:class:`asyncio.Future` 实现了此方法以与 :keyword:`await` 表达式相兼容。" + +#: ../../reference/datamodel.rst:2823 +msgid ":pep:`492` for additional information about awaitable objects." +msgstr ":pep:`492` 了解有关可等待对象的详细信息。" + +#: ../../reference/datamodel.rst:2829 +msgid "Coroutine Objects" +msgstr "协程对象" + +#: ../../reference/datamodel.rst:2831 +msgid "" +":term:`Coroutine objects ` are :term:`awaitable` objects. A " +"coroutine's execution can be controlled by calling :meth:`~object.__await__`" +" and iterating over the result. When the coroutine has finished executing " +"and returns, the iterator raises :exc:`StopIteration`, and the exception's " +":attr:`~StopIteration.value` attribute holds the return value. If the " +"coroutine raises an exception, it is propagated by the iterator. Coroutines" +" should not directly raise unhandled :exc:`StopIteration` exceptions." +msgstr "" +":term:`协程对象 ` 属于 :term:`awaitable` 对象。 协程的执行可以通过调用 " +":meth:`~object.__await__` 并迭代其结果来控制。 当协程结束执行并返回时,迭代器会引发 " +":exc:`StopIteration`,而该异常的 :attr:`~StopIteration.value` 属性将存放返回值。 " +"如果协程引发了异常,它会被迭代器传播出去。 协程不应当直接引发未被处理的 :exc:`StopIteration` 异常。" + +#: ../../reference/datamodel.rst:2839 +msgid "" +"Coroutines also have the methods listed below, which are analogous to those " +"of generators (see :ref:`generator-methods`). However, unlike generators, " +"coroutines do not directly support iteration." +msgstr "" +"协程也具有下面列出的方法,它们类似于生成器的对应方法 (参见 :ref:`generator-methods`)。 " +"但是,与生成器不同,协程并不直接支持迭代。" + +#: ../../reference/datamodel.rst:2843 +msgid "It is a :exc:`RuntimeError` to await on a coroutine more than once." +msgstr "等待一个协程超过一次将引发 :exc:`RuntimeError`。" + +#: ../../reference/datamodel.rst:2849 +msgid "" +"Starts or resumes execution of the coroutine. If *value* is ``None``, this " +"is equivalent to advancing the iterator returned by " +":meth:`~object.__await__`. If *value* is not ``None``, this method " +"delegates to the :meth:`~generator.send` method of the iterator that caused " +"the coroutine to suspend. The result (return value, :exc:`StopIteration`, " +"or other exception) is the same as when iterating over the :meth:`__await__`" +" return value, described above." +msgstr "" +"开始或恢复协程的执行。 如果 *value* 为 ``None``,那么这就相当于前往 :meth:`~object.__await__` " +"所返回迭代器的下一项。 如果 *value* 不为 ``None``,此方法将委托给导致协程挂起的迭代器的 " +":meth:`~generator.send` 方法。 其结果(返回值,:exc:`StopIteration` 或是其他异常)将与上述对 " +":meth:`__await__` 返回值进行迭代的结果相同。" + +#: ../../reference/datamodel.rst:2860 +msgid "" +"Raises the specified exception in the coroutine. This method delegates to " +"the :meth:`~generator.throw` method of the iterator that caused the " +"coroutine to suspend, if it has such a method. Otherwise, the exception is " +"raised at the suspension point. The result (return value, " +":exc:`StopIteration`, or other exception) is the same as when iterating over" +" the :meth:`~object.__await__` return value, described above. If the " +"exception is not caught in the coroutine, it propagates back to the caller." +msgstr "" +"在协程内引发指定的异常。 此方法将委托给导致该协程挂起的迭代器的 :meth:`~generator.throw` 方法,如果存在此方法的话。 " +"否则,该异常将在挂起点被引发。 其结果(返回值,:exc:`StopIteration` 或是其他异常)将与上述对 " +":meth:`~object.__await__` 返回值进行迭代的结果相同。 如果该异常未在协程内被捕获,则将回传给调用方。" + +#: ../../reference/datamodel.rst:2871 +msgid "" +"Causes the coroutine to clean itself up and exit. If the coroutine is " +"suspended, this method first delegates to the :meth:`~generator.close` " +"method of the iterator that caused the coroutine to suspend, if it has such " +"a method. Then it raises :exc:`GeneratorExit` at the suspension point, " +"causing the coroutine to immediately clean itself up. Finally, the coroutine" +" is marked as having finished executing, even if it was never started." +msgstr "" +"此方法会使得协程清理自身并退出。 如果协程被挂起,此方法会先委托给导致协程挂起的迭代器的 :meth:`~generator.close` " +"方法,如果存在该方法。 然后它会在挂起点引发 :exc:`GeneratorExit`,使得协程立即清理自身。 " +"最后,协程会被标记为已结束执行,即使它根本未被启动。" + +#: ../../reference/datamodel.rst:2879 +msgid "" +"Coroutine objects are automatically closed using the above process when they" +" are about to be destroyed." +msgstr "当协程对象将要被销毁时,会使用以上处理过程来自动关闭。" + +#: ../../reference/datamodel.rst:2885 +msgid "Asynchronous Iterators" +msgstr "异步迭代器" + +#: ../../reference/datamodel.rst:2887 +msgid "" +"An *asynchronous iterator* can call asynchronous code in its ``__anext__`` " +"method." +msgstr "*异步迭代器* 可以在其 ``__anext__`` 方法中调用异步代码。" + +#: ../../reference/datamodel.rst:2890 +msgid "" +"Asynchronous iterators can be used in an :keyword:`async for` statement." +msgstr "异步迭代器可在 :keyword:`async for` 语句中使用。" + +#: ../../reference/datamodel.rst:2894 +msgid "Must return an *asynchronous iterator* object." +msgstr "必须返回一个 *异步迭代器* 对象。" + +#: ../../reference/datamodel.rst:2898 +msgid "" +"Must return an *awaitable* resulting in a next value of the iterator. " +"Should raise a :exc:`StopAsyncIteration` error when the iteration is over." +msgstr "必须返回一个 *可等待对象* 输出迭代器的下一结果值。 当迭代结束时应该引发 :exc:`StopAsyncIteration` 错误。" + +#: ../../reference/datamodel.rst:2901 +msgid "An example of an asynchronous iterable object::" +msgstr "异步可迭代对象的一个示例::" + +#: ../../reference/datamodel.rst:2918 +msgid "" +"Prior to Python 3.7, :meth:`~object.__aiter__` could return an *awaitable* " +"that would resolve to an :term:`asynchronous iterator `." +msgstr "" +"在 Python 3.7 之前,:meth:`~object.__aiter__` 可以返回一个 *可等待对象* 并将被解析为 :term:`异步迭代器" +" `。" + +#: ../../reference/datamodel.rst:2923 +msgid "" +"Starting with Python 3.7, :meth:`~object.__aiter__` must return an " +"asynchronous iterator object. Returning anything else will result in a " +":exc:`TypeError` error." +msgstr "" +"从 Python 3.7 开始,:meth:`~object.__aiter__` 必须返回一个异步迭代器对象。 返回任何其他对象都将导致 " +":exc:`TypeError` 错误。" + +#: ../../reference/datamodel.rst:2931 +msgid "Asynchronous Context Managers" +msgstr "异步上下文管理器" + +#: ../../reference/datamodel.rst:2933 +msgid "" +"An *asynchronous context manager* is a *context manager* that is able to " +"suspend execution in its ``__aenter__`` and ``__aexit__`` methods." +msgstr "" +"*异步上下文管理器* 是 *上下文管理器* 的一种,它能够在其 ``__aenter__`` 和 ``__aexit__`` 方法中暂停执行。" + +#: ../../reference/datamodel.rst:2936 +msgid "" +"Asynchronous context managers can be used in an :keyword:`async with` " +"statement." +msgstr "异步上下文管理器可在 :keyword:`async with` 语句中使用。" + +#: ../../reference/datamodel.rst:2940 +msgid "" +"Semantically similar to :meth:`__enter__`, the only difference being that it" +" must return an *awaitable*." +msgstr "在语义上类似于 :meth:`__enter__`,仅有的区别是它必须返回一个 *可等待对象*。" + +#: ../../reference/datamodel.rst:2945 +msgid "" +"Semantically similar to :meth:`__exit__`, the only difference being that it " +"must return an *awaitable*." +msgstr "在语义上类似于 :meth:`__exit__`,仅有的区别是它必须返回一个 *可等待对象*。" + +#: ../../reference/datamodel.rst:2948 +msgid "An example of an asynchronous context manager class::" +msgstr "异步上下文管理器类的一个示例::" + +#: ../../reference/datamodel.rst:2961 +msgid "Footnotes" +msgstr "备注" + +#: ../../reference/datamodel.rst:2962 +msgid "" +"It *is* possible in some cases to change an object's type, under certain " +"controlled conditions. It generally isn't a good idea though, since it can " +"lead to some very strange behaviour if it is handled incorrectly." +msgstr "在某些情况下 *有可能* 基于可控的条件改变一个对象的类型。 但这通常不是个好主意,因为如果处理不当会导致一些非常怪异的行为。" + +#: ../../reference/datamodel.rst:2966 +msgid "" +"The :meth:`~object.__hash__`, :meth:`~object.__iter__`, " +":meth:`~object.__reversed__`, and :meth:`~object.__contains__` methods have " +"special handling for this; others will still raise a :exc:`TypeError`, but " +"may do so by relying on the behavior that ``None`` is not callable." +msgstr "" +":meth:`~object.__hash__`, :meth:`~object.__iter__`, " +":meth:`~object.__reversed__` 以及 :meth:`~object.__contains__` " +"方法对此有特殊处理;其他方法仍会引发 :exc:`TypeError`,但可能依赖 ``None`` 属于不可调用对象的行为来做到这一点。" + +#: ../../reference/datamodel.rst:2972 +msgid "" +"\"Does not support\" here means that the class has no such method, or the " +"method returns ``NotImplemented``. Do not set the method to ``None`` if you" +" want to force fallback to the right operand's reflected method—that will " +"instead have the opposite effect of explicitly *blocking* such fallback." +msgstr "" +"这里的“不支持”是指该类无此方法,或方法返回 ``NotImplemented``。 如果你想强制回退到右操作数的反射方法,请不要设置方法为 " +"``None`` — 那会造成显式地 *阻塞* 此种回退的相反效果。" + +#: ../../reference/datamodel.rst:2978 +msgid "" +"For operands of the same type, it is assumed that if the non-reflected " +"method -- such as :meth:`~object.__add__` -- fails then the overall " +"operation is not supported, which is why the reflected method is not called." +msgstr "" +"对于相同类型的操作数,如果非返回方法 -- 例如 :meth:`~object.__add__` -- " +"失败则会认为整个运算都不被支持,这就是反射方法不会被调用的原因。" diff --git a/reference/executionmodel.po b/reference/executionmodel.po new file mode 100644 index 000000000..9cfb03ff0 --- /dev/null +++ b/reference/executionmodel.po @@ -0,0 +1,370 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) 2001-2025, Python Software Foundation +# This file is distributed under the same license as the Python package. +# FIRST AUTHOR , YEAR. +# +# Translators: +# ww song , 2018 +# Freesand Leo , 2020 +# Alpha Du , 2022 +# Rafael Fontenelle , 2025 +# +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: Python 3.9\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2025-02-07 16:40+0000\n" +"PO-Revision-Date: 2017-02-16 23:38+0000\n" +"Last-Translator: Rafael Fontenelle , 2025\n" +"Language-Team: Chinese (China) (https://app.transifex.com/python-doc/teams/5390/zh_CN/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: zh_CN\n" +"Plural-Forms: nplurals=1; plural=0;\n" + +#: ../../reference/executionmodel.rst:6 +msgid "Execution model" +msgstr "执行模型" + +#: ../../reference/executionmodel.rst:15 +msgid "Structure of a program" +msgstr "程序的结构" + +#: ../../reference/executionmodel.rst:19 +msgid "" +"A Python program is constructed from code blocks. A :dfn:`block` is a piece " +"of Python program text that is executed as a unit. The following are blocks:" +" a module, a function body, and a class definition. Each command typed " +"interactively is a block. A script file (a file given as standard input to " +"the interpreter or specified as a command line argument to the interpreter) " +"is a code block. A script command (a command specified on the interpreter " +"command line with the :option:`-c` option) is a code block. A module run as " +"a top level script (as module ``__main__``) from the command line using a " +":option:`-m` argument is also a code block. The string argument passed to " +"the built-in functions :func:`eval` and :func:`exec` is a code block." +msgstr "" +"Python 程序是由代码块构成的。 :dfn:`代码块` 是被作为一个单元来执行的一段 Python 程序文本。 " +"以下几个都属于代码块:模块、函数体和类定义。 交互式输入的每条命令都是代码块。 " +"一个脚本文件(作为标准输入发送给解释器或是作为命令行参数发送给解释器的文件)也是代码块。 一条脚本命令(通过 :option:`-c` " +"选项在解释器命令行中指定的命令)也是代码块。 通过在命令行中使用 :option:`-m` 参数作为最高层级脚本(即 ``__main__`` " +"模块)运行的模块也是代码块。 传递给内置函数 :func:`eval` 和 :func:`exec` 的字符串参数也是代码块。" + +#: ../../reference/executionmodel.rst:33 +msgid "" +"A code block is executed in an :dfn:`execution frame`. A frame contains " +"some administrative information (used for debugging) and determines where " +"and how execution continues after the code block's execution has completed." +msgstr "代码块在 :dfn:`执行帧` 中被执行。 一个帧会包含某些管理信息(用于调试)并决定代码块执行完成后应前往何处以及如何继续执行。" + +#: ../../reference/executionmodel.rst:40 +msgid "Naming and binding" +msgstr "命名与绑定" + +#: ../../reference/executionmodel.rst:49 +msgid "Binding of names" +msgstr "名称的绑定" + +#: ../../reference/executionmodel.rst:55 +msgid "" +":dfn:`Names` refer to objects. Names are introduced by name binding " +"operations." +msgstr ":dfn:`名称` 用于指代对象。 名称是通过名称绑定操作来引入的。" + +#: ../../reference/executionmodel.rst:59 +msgid "" +"The following constructs bind names: formal parameters to functions, " +":keyword:`import` statements, class and function definitions (these bind the" +" class or function name in the defining block), and targets that are " +"identifiers if occurring in an assignment, :keyword:`for` loop header, or " +"after :keyword:`!as` in a :keyword:`with` statement or :keyword:`except` " +"clause. The :keyword:`!import` statement of the form ``from ... import *`` " +"binds all names defined in the imported module, except those beginning with " +"an underscore. This form may only be used at the module level." +msgstr "" +"以下构造会绑定名称:传给函数的正式形参,:keyword:`import` " +"语句,类与函数定义(这会在定义的代码块中绑定类或函数名称)以及发生以标识符为目标的赋值,:keyword:`for` 循环的开头,或 " +":keyword:`with` 语句和 :keyword:`except` 子句的 :keyword:`!as` 之后。 " +":keyword:`!import` 语句的 ``from ... import *`` " +"形式会绑定在被导入模块中定义的所有名称,那些以下划线开头的除外。 这种形式仅在模块层级上被使用。" + +#: ../../reference/executionmodel.rst:69 +msgid "" +"A target occurring in a :keyword:`del` statement is also considered bound " +"for this purpose (though the actual semantics are to unbind the name)." +msgstr ":keyword:`del` 语句的目标也被视作一种绑定(虽然其实际语义为解除名称绑定)。" + +#: ../../reference/executionmodel.rst:72 +msgid "" +"Each assignment or import statement occurs within a block defined by a class" +" or function definition or at the module level (the top-level code block)." +msgstr "每条赋值或导入语句均发生于类或函数内部定义的代码块中,或是发生于模块层级(即最高层级的代码块)。" + +#: ../../reference/executionmodel.rst:77 +msgid "" +"If a name is bound in a block, it is a local variable of that block, unless " +"declared as :keyword:`nonlocal` or :keyword:`global`. If a name is bound at" +" the module level, it is a global variable. (The variables of the module " +"code block are local and global.) If a variable is used in a code block but" +" not defined there, it is a :dfn:`free variable`." +msgstr "" +"如果名称绑定在一个代码块中,则为该代码块的局部变量,除非声明为 :keyword:`nonlocal` 或 :keyword:`global`。 " +"如果名称绑定在模块层级,则为全局变量。 (模块代码块的变量既为局部变量又为全局变量。) 如果变量在一个代码块中被使用但不是在其中定义,则为 " +":dfn:`自由变量`。" + +#: ../../reference/executionmodel.rst:83 +msgid "" +"Each occurrence of a name in the program text refers to the :dfn:`binding` " +"of that name established by the following name resolution rules." +msgstr "每个在程序文本中出现的名称是指由以下名称解析规则所建立的对该名称的 :dfn:`绑定`。" + +#: ../../reference/executionmodel.rst:89 +msgid "Resolution of names" +msgstr "名称的解析" + +#: ../../reference/executionmodel.rst:93 +msgid "" +"A :dfn:`scope` defines the visibility of a name within a block. If a local " +"variable is defined in a block, its scope includes that block. If the " +"definition occurs in a function block, the scope extends to any blocks " +"contained within the defining one, unless a contained block introduces a " +"different binding for the name." +msgstr "" +":dfn:`作用域` 定义了一个代码块中名称的可见性。 如果代码块中定义了一个局部变量,则其作用域包含该代码块。 " +"如果定义发生于函数代码块中,则其作用域会扩展到该函数所包含的任何代码块,除非有某个被包含代码块引入了对该名称的不同绑定。" + +#: ../../reference/executionmodel.rst:101 +msgid "" +"When a name is used in a code block, it is resolved using the nearest " +"enclosing scope. The set of all such scopes visible to a code block is " +"called the block's :dfn:`environment`." +msgstr "当一个名称在代码块中被使用时,会由包含它的最近作用域来解析。 对一个代码块可见的所有这种作用域的集合称为该代码块的 :dfn:`环境`。" + +#: ../../reference/executionmodel.rst:109 +msgid "" +"When a name is not found at all, a :exc:`NameError` exception is raised. If " +"the current scope is a function scope, and the name refers to a local " +"variable that has not yet been bound to a value at the point where the name " +"is used, an :exc:`UnboundLocalError` exception is raised. " +":exc:`UnboundLocalError` is a subclass of :exc:`NameError`." +msgstr "" +"当一个名称完全找不到时,将会引发 :exc:`NameError` 异常。 " +"如果当前作用域为函数作用域,且该名称指向一个局部变量,而此变量在该名称被使用的时候尚未绑定到特定值,将会引发 " +":exc:`UnboundLocalError` 异常。 :exc:`UnboundLocalError` 为 :exc:`NameError` " +"的一个子类。" + +#: ../../reference/executionmodel.rst:115 +msgid "" +"If a name binding operation occurs anywhere within a code block, all uses of" +" the name within the block are treated as references to the current block. " +"This can lead to errors when a name is used within a block before it is " +"bound. This rule is subtle. Python lacks declarations and allows name " +"binding operations to occur anywhere within a code block. The local " +"variables of a code block can be determined by scanning the entire text of " +"the block for name binding operations." +msgstr "" +"如果一个代码块内的任何位置发生名称绑定操作,则代码块内所有对该名称的使用会被认为是对当前代码块的引用。 " +"当一个名称在其被绑定前就在代码块内被使用时则会导致错误。 这个一个很微妙的规则。 Python " +"缺少声明语法,并允许名称绑定操作发生于代码块内的任何位置。 一个代码块的局部变量可通过在整个代码块文本中扫描名称绑定操作来确定。" + +#: ../../reference/executionmodel.rst:122 +msgid "" +"If the :keyword:`global` statement occurs within a block, all uses of the " +"names specified in the statement refer to the bindings of those names in the" +" top-level namespace. Names are resolved in the top-level namespace by " +"searching the global namespace, i.e. the namespace of the module containing " +"the code block, and the builtins namespace, the namespace of the module " +":mod:`builtins`. The global namespace is searched first. If the names are " +"not found there, the builtins namespace is searched. The :keyword:`!global`" +" statement must precede all uses of the listed names." +msgstr "" +"如果 :keyword:`global` 语句出现在一个代码块中,则所有对该语句所指定名称的使用都是在最高层级命名空间内对该名称绑定的引用。 " +"名称在最高层级命名内的解析是通过全局命名空间,也就是包含该代码块的模块的命名空间,以及内置命名空间即 :mod:`builtins` 模块的命名空间。 " +"全局命名空间会先被搜索。 如果未在其中找到指定名称,再搜索内置命名空间。 :keyword:`!global` " +"语句必须位于所有对其所列出名称的使用之前。" + +#: ../../reference/executionmodel.rst:131 +msgid "" +"The :keyword:`global` statement has the same scope as a name binding " +"operation in the same block. If the nearest enclosing scope for a free " +"variable contains a global statement, the free variable is treated as a " +"global." +msgstr "" +":keyword:`global` 语句与同一代码块中名称绑定具有相同的作用域。 如果一个自由变量的最近包含作用域中有一条 global " +"语句,则该自由变量也会被当作是全局变量。" + +#: ../../reference/executionmodel.rst:137 +msgid "" +"The :keyword:`nonlocal` statement causes corresponding names to refer to " +"previously bound variables in the nearest enclosing function scope. " +":exc:`SyntaxError` is raised at compile time if the given name does not " +"exist in any enclosing function scope." +msgstr "" +":keyword:`nonlocal` 语句会使得相应的名称指向之前在最近包含函数作用域中绑定的变量。 " +"如果指定名称不存在于任何包含函数作用域中则将在编译时引发 :exc:`SyntaxError`。" + +#: ../../reference/executionmodel.rst:144 +msgid "" +"The namespace for a module is automatically created the first time a module " +"is imported. The main module for a script is always called :mod:`__main__`." +msgstr "模块的作用域会在模块第一次被导入时自动创建。 一个脚本的主模块总是被命名为 :mod:`__main__`。" + +#: ../../reference/executionmodel.rst:147 +msgid "" +"Class definition blocks and arguments to :func:`exec` and :func:`eval` are " +"special in the context of name resolution. A class definition is an " +"executable statement that may use and define names. These references follow " +"the normal rules for name resolution with an exception that unbound local " +"variables are looked up in the global namespace. The namespace of the class " +"definition becomes the attribute dictionary of the class. The scope of names" +" defined in a class block is limited to the class block; it does not extend " +"to the code blocks of methods -- this includes comprehensions and generator " +"expressions since they are implemented using a function scope. This means " +"that the following will fail::" +msgstr "" +"类定义代码块以及传给 :func:`exec` 和 :func:`eval` 的参数是名称解析上下文中的特殊情况。 " +"类定义是可能使用并定义名称的可执行语句。 这些引用遵循正常的名称解析规则,例外之处在于未绑定的局部变量将会在全局命名空间中查找。 " +"类定义的命名空间会成为该类的属性字典。 在类代码块中定义的名称的作用域会被限制在类代码块中;它不会扩展到方法的代码块中 -- " +"这也包括推导式和生成器表达式,因为它们都是使用函数作用域实现的。 这意味着以下代码将会失败::" + +#: ../../reference/executionmodel.rst:165 +msgid "Builtins and restricted execution" +msgstr "内置命名空间和受限的执行" + +#: ../../reference/executionmodel.rst:171 +msgid "" +"Users should not touch ``__builtins__``; it is strictly an implementation " +"detail. Users wanting to override values in the builtins namespace should " +":keyword:`import` the :mod:`builtins` module and modify its attributes " +"appropriately." +msgstr "" +"用户不应该接触 ``__builtins__``,严格说来它属于实现细节。 用户如果要重载内置命名空间中的值则应该 :keyword:`import` " +":mod:`builtins` 并相应地修改该模块中的属性。" + +#: ../../reference/executionmodel.rst:176 +msgid "" +"The builtins namespace associated with the execution of a code block is " +"actually found by looking up the name ``__builtins__`` in its global " +"namespace; this should be a dictionary or a module (in the latter case the " +"module's dictionary is used). By default, when in the :mod:`__main__` " +"module, ``__builtins__`` is the built-in module :mod:`builtins`; when in any" +" other module, ``__builtins__`` is an alias for the dictionary of the " +":mod:`builtins` module itself." +msgstr "" +"与一个代码块的执行相关联的内置命名空间实际上是通过在其全局命名空间中搜索名称 ``__builtins__`` " +"来找到的;这应该是一个字典或一个模块(在后一种情况下会使用该模块的字典)。 默认情况下,当在 :mod:`__main__` " +"模块中时,``__builtins__`` 就是内置模块 :mod:`builtins`;当在任何其他模块中时,``__builtins__`` 则是 " +":mod:`builtins` 模块自身的字典的一个别名。" + +#: ../../reference/executionmodel.rst:188 +msgid "Interaction with dynamic features" +msgstr "与动态特性的交互" + +#: ../../reference/executionmodel.rst:190 +msgid "" +"Name resolution of free variables occurs at runtime, not at compile time. " +"This means that the following code will print 42::" +msgstr "自由变量的名称解析发生于运行时而不是编译时。 这意味着以下代码将打印出 42::" + +#: ../../reference/executionmodel.rst:201 +msgid "" +"The :func:`eval` and :func:`exec` functions do not have access to the full " +"environment for resolving names. Names may be resolved in the local and " +"global namespaces of the caller. Free variables are not resolved in the " +"nearest enclosing namespace, but in the global namespace. [#]_ The " +":func:`exec` and :func:`eval` functions have optional arguments to override " +"the global and local namespace. If only one namespace is specified, it is " +"used for both." +msgstr "" +":func:`eval` 和 :func:`exec` 函数没有对完整环境的访问权限来解析名称。 名称可以在调用者的局部和全局命名空间中被解析。 " +"自由变量的解析不是在最近包含命名空间中,而是在全局命名空间中。 [#]_ :func:`exec` 和 :func:`eval` " +"函数有可选参数用来重载全局和局部命名空间。 如果只指定一个命名空间,则它会同时作用于两者。" + +#: ../../reference/executionmodel.rst:212 +msgid "Exceptions" +msgstr "异常" + +#: ../../reference/executionmodel.rst:223 +msgid "" +"Exceptions are a means of breaking out of the normal flow of control of a " +"code block in order to handle errors or other exceptional conditions. An " +"exception is *raised* at the point where the error is detected; it may be " +"*handled* by the surrounding code block or by any code block that directly " +"or indirectly invoked the code block where the error occurred." +msgstr "" +"异常是中断代码块的正常控制流程以便处理错误或其他异常条件的一种方式。 异常会在错误被检测到的位置 " +"*引发*,它可以被当前包围代码块或是任何直接或间接唤起发生错误的代码块的其他代码块所 *处理*。" + +#: ../../reference/executionmodel.rst:229 +msgid "" +"The Python interpreter raises an exception when it detects a run-time error " +"(such as division by zero). A Python program can also explicitly raise an " +"exception with the :keyword:`raise` statement. Exception handlers are " +"specified with the :keyword:`try` ... :keyword:`except` statement. The " +":keyword:`finally` clause of such a statement can be used to specify cleanup" +" code which does not handle the exception, but is executed whether an " +"exception occurred or not in the preceding code." +msgstr "" +"Python 解析器会在检测到运行时错误(例如零作为被除数)的时候引发异常。 Python 程序也可以通过 :keyword:`raise` " +"语句显式地引发异常。 异常处理是通过 :keyword:`try` ... :keyword:`except` 语句来指定的。 该语句的 " +":keyword:`finally` 子句可被用来指定清理代码,它并不处理异常,而是无论之前的代码是否发生异常都会被执行。" + +#: ../../reference/executionmodel.rst:239 +msgid "" +"Python uses the \"termination\" model of error handling: an exception " +"handler can find out what happened and continue execution at an outer level," +" but it cannot repair the cause of the error and retry the failing operation" +" (except by re-entering the offending piece of code from the top)." +msgstr "" +"Python " +"的错误处理采用的是“终止”模型:异常处理器可以找出发生了什么问题,并在外层继续执行,但它不能修复错误的根源并重试失败的操作(除非通过从顶层重新进入出错的代码片段)。" + +#: ../../reference/executionmodel.rst:246 +msgid "" +"When an exception is not handled at all, the interpreter terminates " +"execution of the program, or returns to its interactive main loop. In " +"either case, it prints a stack traceback, except when the exception is " +":exc:`SystemExit`." +msgstr "" +"当一个异常完全未被处理时,解释器会终止程序的执行,或者返回交互模式的主循环。 无论是哪种情况,它都会打印栈回溯信息,除非是当异常为 " +":exc:`SystemExit` 的时候。" + +#: ../../reference/executionmodel.rst:250 +msgid "" +"Exceptions are identified by class instances. The :keyword:`except` clause " +"is selected depending on the class of the instance: it must reference the " +"class of the instance or a :term:`non-virtual base class ` thereof. The instance can be received by the handler and can carry " +"additional information about the exceptional condition." +msgstr "" +"异常是通过类实例来标识的。 :keyword:`except` 子句会依据实例的类来选择:它必须引用实例的类或是其所属的 :term:`非虚基类 " +"` 。 实例可通过处理器被接收,并可携带有关异常条件的附加信息。" + +#: ../../reference/executionmodel.rst:258 +msgid "" +"Exception messages are not part of the Python API. Their contents may " +"change from one version of Python to the next without warning and should not" +" be relied on by code which will run under multiple versions of the " +"interpreter." +msgstr "" +"异常消息不是 Python API 的组成部分。 其内容可能在 Python " +"升级到新版本时不经警告地发生改变,不应该被需要在多版本解释器中运行的代码所依赖。" + +#: ../../reference/executionmodel.rst:262 +msgid "" +"See also the description of the :keyword:`try` statement in section " +":ref:`try` and :keyword:`raise` statement in section :ref:`raise`." +msgstr "" +"另请参看 :ref:`try` 小节中对 :keyword:`try` 语句的描述以及 :ref:`raise` 小节中对 " +":keyword:`raise` 语句的描述。" + +#: ../../reference/executionmodel.rst:267 +msgid "Footnotes" +msgstr "备注" + +#: ../../reference/executionmodel.rst:268 +msgid "" +"This limitation occurs because the code that is executed by these operations" +" is not available at the time the module is compiled." +msgstr "出现这样的限制是由于通过这些操作执行的代码在模块被编译的时候并不可用。" diff --git a/reference/expressions.po b/reference/expressions.po new file mode 100644 index 000000000..b52cad461 --- /dev/null +++ b/reference/expressions.po @@ -0,0 +1,2538 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) 2001-2024, Python Software Foundation +# This file is distributed under the same license as the Python package. +# FIRST AUTHOR , YEAR. +# +# Translators: +# 操旭 , 2017 +# ww song , 2018 +# Fred , 2018 +# dannyvi , 2018 +# Freesand Leo , 2022 +# Rafael Fontenelle , 2024 +# +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: Python 3.9\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2024-11-01 16:08+0000\n" +"PO-Revision-Date: 2017-02-16 23:38+0000\n" +"Last-Translator: Rafael Fontenelle , 2024\n" +"Language-Team: Chinese (China) (https://app.transifex.com/python-doc/teams/5390/zh_CN/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: zh_CN\n" +"Plural-Forms: nplurals=1; plural=0;\n" + +#: ../../reference/expressions.rst:6 +msgid "Expressions" +msgstr "表达式" + +#: ../../reference/expressions.rst:10 +msgid "" +"This chapter explains the meaning of the elements of expressions in Python." +msgstr "本章将解释 Python 中组成表达式的各种元素的的含义。" + +#: ../../reference/expressions.rst:12 +msgid "" +"**Syntax Notes:** In this and the following chapters, extended BNF notation " +"will be used to describe syntax, not lexical analysis. When (one " +"alternative of) a syntax rule has the form" +msgstr "**语法注释:** 在本章和后续章节中,会使用扩展 BNF 标注来描述语法而不是词法分析。 当(某种替代的)语法规则具有如下形式" + +#: ../../reference/expressions.rst:19 +msgid "" +"and no semantics are given, the semantics of this form of ``name`` are the " +"same as for ``othername``." +msgstr "并且没有给出语义,则这种形式的 ``name`` 在语法上与 ``othername`` 相同。" + +#: ../../reference/expressions.rst:26 +msgid "Arithmetic conversions" +msgstr "算术转换" + +#: ../../reference/expressions.rst:30 +msgid "" +"When a description of an arithmetic operator below uses the phrase \"the " +"numeric arguments are converted to a common type\", this means that the " +"operator implementation for built-in types works as follows:" +msgstr "当对下述某个算术运算符的描述中使用了“数值参数被转换为普通类型”这样的说法,这意味着内置类型的运算符实现采用了如下运作方式:" + +#: ../../reference/expressions.rst:34 +msgid "" +"If either argument is a complex number, the other is converted to complex;" +msgstr "如果任一参数为复数,另一参数会被转换为复数;" + +#: ../../reference/expressions.rst:36 +msgid "" +"otherwise, if either argument is a floating point number, the other is " +"converted to floating point;" +msgstr "否则,如果任一参数为浮点数,另一参数会被转换为浮点数;" + +#: ../../reference/expressions.rst:39 +msgid "otherwise, both must be integers and no conversion is necessary." +msgstr "否则,两者应该都为整数,不需要进行转换。" + +#: ../../reference/expressions.rst:41 +msgid "" +"Some additional rules apply for certain operators (e.g., a string as a left " +"argument to the '%' operator). Extensions must define their own conversion " +"behavior." +msgstr "某些附加规则会作用于特定运算符(例如,字符串作为 '%' 运算符的左运算参数)。 扩展必须定义它们自己的转换行为。" + +#: ../../reference/expressions.rst:49 +msgid "Atoms" +msgstr "原子" + +#: ../../reference/expressions.rst:53 +msgid "" +"Atoms are the most basic elements of expressions. The simplest atoms are " +"identifiers or literals. Forms enclosed in parentheses, brackets or braces " +"are also categorized syntactically as atoms. The syntax for atoms is:" +msgstr "" +"“原子”指表达式的最基本构成元素。 最简单的原子是标识符和字面值。 以圆括号、方括号或花括号包括的形式在语法上也被归类为原子。 原子的句法为:" + +#: ../../reference/expressions.rst:66 +msgid "Identifiers (Names)" +msgstr "标识符(名称)" + +#: ../../reference/expressions.rst:70 +msgid "" +"An identifier occurring as an atom is a name. See section " +":ref:`identifiers` for lexical definition and section :ref:`naming` for " +"documentation of naming and binding." +msgstr "" +"作为原子出现的标识符叫做名称。 请参看 :ref:`identifiers` 一节了解其词法定义,以及 :ref:`naming` " +"获取有关命名与绑定的文档。" + +#: ../../reference/expressions.rst:76 +msgid "" +"When the name is bound to an object, evaluation of the atom yields that " +"object. When a name is not bound, an attempt to evaluate it raises a " +":exc:`NameError` exception." +msgstr "当名称被绑定到一个对象时,对该原子求值将返回相应对象。 当名称未被绑定时,尝试对其求值将引发 :exc:`NameError` 异常。" + +#: ../../reference/expressions.rst:86 +msgid "" +"**Private name mangling:** When an identifier that textually occurs in a " +"class definition begins with two or more underscore characters and does not " +"end in two or more underscores, it is considered a :dfn:`private name` of " +"that class. Private names are transformed to a longer form before code is " +"generated for them. The transformation inserts the class name, with leading" +" underscores removed and a single underscore inserted, in front of the name." +" For example, the identifier ``__spam`` occurring in a class named ``Ham`` " +"will be transformed to ``_Ham__spam``. This transformation is independent " +"of the syntactical context in which the identifier is used. If the " +"transformed name is extremely long (longer than 255 characters), " +"implementation defined truncation may happen. If the class name consists " +"only of underscores, no transformation is done." +msgstr "" +"**私有名称转换:** 当以文本形式出现在类定义中的一个标识符以两个或更多下划线开头并且不以两个或更多下划线结尾,它会被视为该类的 " +":dfn:`私有名称`。 私有名称会在为其生成代码之前被转换为一种更长的形式。 转换时会插入类名,移除打头的下划线再在名称前增加一个下划线。 " +"例如,出现在一个名为 ``Ham`` 的类中的标识符 ``__spam`` 会被转换为 ``_Ham__spam``。 " +"这种转换独立于标识符所使用的相关句法。 如果转换后的名称太长(超过 255 个字符),可能发生由具体实现定义的截断。 " +"如果类名仅由下划线组成,则不会进行转换。" + +#: ../../reference/expressions.rst:102 +msgid "Literals" +msgstr "字面值" + +#: ../../reference/expressions.rst:106 +msgid "" +"Python supports string and bytes literals and various numeric literals:" +msgstr "Python 支持字符串和字节串字面值,以及几种数字字面值:" + +#: ../../reference/expressions.rst:112 +msgid "" +"Evaluation of a literal yields an object of the given type (string, bytes, " +"integer, floating point number, complex number) with the given value. The " +"value may be approximated in the case of floating point and imaginary " +"(complex) literals. See section :ref:`literals` for details." +msgstr "" +"对字面值求值将返回一个该值所对应类型的对象(字符串、字节串、整数、浮点数、复数)。 对于浮点数和虚数(复数)的情况,该值可能为近似值。 详情参见 " +":ref:`literals`。" + +#: ../../reference/expressions.rst:121 +msgid "" +"All literals correspond to immutable data types, and hence the object's " +"identity is less important than its value. Multiple evaluations of literals" +" with the same value (either the same occurrence in the program text or a " +"different occurrence) may obtain the same object or a different object with " +"the same value." +msgstr "" +"所有字面值都对应于不可变数据类型,因此对象标识的重要性不如其实际值。 " +"多次对具有相同值的字面值求值(不论是发生在程序文本的相同位置还是不同位置)可能得到相同对象或是具有相同值的不同对象。" + +#: ../../reference/expressions.rst:131 +msgid "Parenthesized forms" +msgstr "带圆括号的形式" + +#: ../../reference/expressions.rst:137 +msgid "" +"A parenthesized form is an optional expression list enclosed in parentheses:" +msgstr "带圆括号的形式是包含在圆括号中的可选表达式列表。" + +#: ../../reference/expressions.rst:142 +msgid "" +"A parenthesized expression list yields whatever that expression list yields:" +" if the list contains at least one comma, it yields a tuple; otherwise, it " +"yields the single expression that makes up the expression list." +msgstr "" +"带圆括号的表达式列表将返回该表达式列表所产生的任何东西:如果该列表包含至少一个逗号,它会产生一个元组;否则,它会产生该表达式列表所对应的单一表达式。" + +#: ../../reference/expressions.rst:148 +msgid "" +"An empty pair of parentheses yields an empty tuple object. Since tuples are" +" immutable, the same rules as for literals apply (i.e., two occurrences of " +"the empty tuple may or may not yield the same object)." +msgstr "" +"一对内容为空的圆括号将产生一个空的元组对象。 由于元组是不可变对象,因此适用与字面值相同的规则(即两次出现的空元组产生的对象可能相同也可能不同)。" + +#: ../../reference/expressions.rst:156 +msgid "" +"Note that tuples are not formed by the parentheses, but rather by use of the" +" comma operator. The exception is the empty tuple, for which parentheses " +"*are* required --- allowing unparenthesized \"nothing\" in expressions would" +" cause ambiguities and allow common typos to pass uncaught." +msgstr "" +"请注意元组并不是由圆括号构建,实际起作用的是逗号操作符。 例外情况是空元组,这时圆括号 *才是* 必须的 --- 允许在表达式中使用不带圆括号的 " +"\"空\" 会导致歧义,并会造成常见输入错误无法被捕获。" + +#: ../../reference/expressions.rst:165 +msgid "Displays for lists, sets and dictionaries" +msgstr "列表、集合与字典的显示" + +#: ../../reference/expressions.rst:169 +msgid "" +"For constructing a list, a set or a dictionary Python provides special " +"syntax called \"displays\", each of them in two flavors:" +msgstr "为了构建列表、集合或字典,Python 提供了名为“显示”的特殊句法,每个类型各有两种形式:" + +#: ../../reference/expressions.rst:172 +msgid "either the container contents are listed explicitly, or" +msgstr "第一种是显式地列出容器内容" + +#: ../../reference/expressions.rst:174 +msgid "" +"they are computed via a set of looping and filtering instructions, called a " +":dfn:`comprehension`." +msgstr "第二种是通过一组循环和筛选指令计算出来,称为 :dfn:`推导式`。" + +#: ../../reference/expressions.rst:182 +msgid "Common syntax elements for comprehensions are:" +msgstr "推导式的常用句法元素为:" + +#: ../../reference/expressions.rst:190 +msgid "" +"The comprehension consists of a single expression followed by at least one " +":keyword:`!for` clause and zero or more :keyword:`!for` or :keyword:`!if` " +"clauses. In this case, the elements of the new container are those that " +"would be produced by considering each of the :keyword:`!for` or " +":keyword:`!if` clauses a block, nesting from left to right, and evaluating " +"the expression to produce an element each time the innermost block is " +"reached." +msgstr "" +"推导式的结构是一个单独表达式后面加至少一个 :keyword:`!for` 子句以及零个或更多个 :keyword:`!for` 或 " +":keyword:`!if` 子句。 在这种情况下,新容器的元素产生方式是将每个 :keyword:`!for` 或 :keyword:`!if` " +"子句视为一个代码块,按从左至右的顺序嵌套,然后每次到达最内层代码块时就对表达式进行求值以产生一个元素。" + +#: ../../reference/expressions.rst:197 +msgid "" +"However, aside from the iterable expression in the leftmost :keyword:`!for` " +"clause, the comprehension is executed in a separate implicitly nested scope." +" This ensures that names assigned to in the target list don't \"leak\" into " +"the enclosing scope." +msgstr "" +"不过,除了最左边 :keyword:`!for` 子句中的可迭代表达式,推导式是在另一个隐式嵌套的作用域内执行的。 " +"这能确保赋给目标列表的名称不会“泄露”到外层的作用域。" + +#: ../../reference/expressions.rst:201 +msgid "" +"The iterable expression in the leftmost :keyword:`!for` clause is evaluated " +"directly in the enclosing scope and then passed as an argument to the " +"implicitly nested scope. Subsequent :keyword:`!for` clauses and any filter " +"condition in the leftmost :keyword:`!for` clause cannot be evaluated in the " +"enclosing scope as they may depend on the values obtained from the leftmost " +"iterable. For example: ``[x*y for x in range(10) for y in range(x, x+10)]``." +msgstr "" +"最左边的 :keyword:`!for` 子句中的可迭代对象表达式会直接在外层作用域中被求值,然后作为一个参数被传给隐式嵌套的作用域。 后续的 " +":keyword:`!for` 子句以及最左侧 :keyword:`!for` " +"子句中的任何筛选条件不能在外层作用域中被求值,因为它们可能依赖于从最左侧可迭代对象中获得的值。 例如: ``[x*y for x in " +"range(10) for y in range(x, x+10)]``。" + +#: ../../reference/expressions.rst:208 +msgid "" +"To ensure the comprehension always results in a container of the appropriate" +" type, ``yield`` and ``yield from`` expressions are prohibited in the " +"implicitly nested scope." +msgstr "为了确保推导式得出的结果总是一个类型正确的容器,在隐式嵌套作用域内禁止使用 ``yield`` 和 ``yield from`` 表达式。" + +#: ../../reference/expressions.rst:215 +msgid "" +"Since Python 3.6, in an :keyword:`async def` function, an :keyword:`!async " +"for` clause may be used to iterate over a :term:`asynchronous iterator`. A " +"comprehension in an :keyword:`!async def` function may consist of either a " +":keyword:`!for` or :keyword:`!async for` clause following the leading " +"expression, may contain additional :keyword:`!for` or :keyword:`!async for` " +"clauses, and may also use :keyword:`await` expressions. If a comprehension " +"contains either :keyword:`!async for` clauses or :keyword:`!await` " +"expressions it is called an :dfn:`asynchronous comprehension`. An " +"asynchronous comprehension may suspend the execution of the coroutine " +"function in which it appears. See also :pep:`530`." +msgstr "" +"从 Python 3.6 开始,在 :keyword:`async def` 函数中可以使用 :keyword:`!async for` 子句来迭代 " +":term:`asynchronous iterator`。 在 :keyword:`!async def` " +"函数中构建推导式可以通过在打头的表达式后加上 :keyword:`!for` 或 :keyword:`!async for` 子句,也可能包含额外的 " +":keyword:`!for` 或 :keyword:`!async for` 子句,还可能使用 :keyword:`await` 表达式。 " +"如果一个推导式包含 :keyword:`!async for` 子句或者 :keyword:`!await` 表达式,则被称为 " +":dfn:`异步推导式`。 异步推导式可以暂停执行它所在的协程函数。 另请参阅 :pep:`530`。" + +#: ../../reference/expressions.rst:227 +msgid "Asynchronous comprehensions were introduced." +msgstr "引入了异步推导式。" + +#: ../../reference/expressions.rst:230 ../../reference/expressions.rst:403 +msgid "" +"``yield`` and ``yield from`` prohibited in the implicitly nested scope." +msgstr "``yield`` 和 ``yield from`` 在隐式嵌套的作用域中已被禁用。" + +#: ../../reference/expressions.rst:237 +msgid "List displays" +msgstr "列表显示" + +#: ../../reference/expressions.rst:247 +msgid "" +"A list display is a possibly empty series of expressions enclosed in square " +"brackets:" +msgstr "列表显示是一个用方括号括起来的可能为空的表达式系列:" + +#: ../../reference/expressions.rst:253 +msgid "" +"A list display yields a new list object, the contents being specified by " +"either a list of expressions or a comprehension. When a comma-separated " +"list of expressions is supplied, its elements are evaluated from left to " +"right and placed into the list object in that order. When a comprehension " +"is supplied, the list is constructed from the elements resulting from the " +"comprehension." +msgstr "" +"列表显示会产生一个新的列表对象,其内容通过一系列表达式或一个推导式来指定。 " +"当提供由逗号分隔的一系列表达式时,其元素会从左至右被求值并按此顺序放入列表对象。 当提供一个推导式时,列表会根据推导式所产生的结果元素进行构建。" + +#: ../../reference/expressions.rst:263 +msgid "Set displays" +msgstr "集合显示" + +#: ../../reference/expressions.rst:272 +msgid "" +"A set display is denoted by curly braces and distinguishable from dictionary" +" displays by the lack of colons separating keys and values:" +msgstr "集合显示是用花括号标明的,与字典显示的区别在于没有冒号分隔的键和值:" + +#: ../../reference/expressions.rst:278 +msgid "" +"A set display yields a new mutable set object, the contents being specified " +"by either a sequence of expressions or a comprehension. When a comma-" +"separated list of expressions is supplied, its elements are evaluated from " +"left to right and added to the set object. When a comprehension is " +"supplied, the set is constructed from the elements resulting from the " +"comprehension." +msgstr "" +"集合显示会产生一个新的可变集合对象,其内容通过一系列表达式或一个推导式来指定。 " +"当提供由逗号分隔的一系列表达式时,其元素会从左至右被求值并加入到集合对象。 当提供一个推导式时,集合会根据推导式所产生的结果元素进行构建。" + +#: ../../reference/expressions.rst:284 +msgid "" +"An empty set cannot be constructed with ``{}``; this literal constructs an " +"empty dictionary." +msgstr "空集合不能用 ``{}`` 来构建;该字面值所构建的是一个空字典。" + +#: ../../reference/expressions.rst:291 +msgid "Dictionary displays" +msgstr "字典显示" + +#: ../../reference/expressions.rst:302 +msgid "" +"A dictionary display is a possibly empty series of key/datum pairs enclosed " +"in curly braces:" +msgstr "字典显示是一个用花括号括起来的可能为空的键/数据对系列:" + +#: ../../reference/expressions.rst:311 +msgid "A dictionary display yields a new dictionary object." +msgstr "字典显示会产生一个新的字典对象。" + +#: ../../reference/expressions.rst:313 +msgid "" +"If a comma-separated sequence of key/datum pairs is given, they are " +"evaluated from left to right to define the entries of the dictionary: each " +"key object is used as a key into the dictionary to store the corresponding " +"datum. This means that you can specify the same key multiple times in the " +"key/datum list, and the final dictionary's value for that key will be the " +"last one given." +msgstr "" +"如果给出一个由逗号分隔的键/数据对序列,它们会从左至右被求值以定义字典的条目:每个键对象会被用作在字典中存放相应数据的键。 " +"这意味着你可以在键/数据对序列中多次指定相同的键,最终字典的值将由最后一次给出的键决定。" + +#: ../../reference/expressions.rst:323 +msgid "" +"A double asterisk ``**`` denotes :dfn:`dictionary unpacking`. Its operand " +"must be a :term:`mapping`. Each mapping item is added to the new " +"dictionary. Later values replace values already set by earlier key/datum " +"pairs and earlier dictionary unpackings." +msgstr "" +"双星号 ``**`` 表示 :dfn:`字典拆包`。 它的操作数必须是一个 :term:`mapping`。 每个映射项被会加入新的字典。 " +"后续的值会替代先前的键/数据对和先前的字典拆包所设置的值。" + +#: ../../reference/expressions.rst:328 +msgid "Unpacking into dictionary displays, originally proposed by :pep:`448`." +msgstr "拆包到字典显示,最初由 :pep:`448` 提出。" + +#: ../../reference/expressions.rst:331 +msgid "" +"A dict comprehension, in contrast to list and set comprehensions, needs two " +"expressions separated with a colon followed by the usual \"for\" and \"if\" " +"clauses. When the comprehension is run, the resulting key and value elements" +" are inserted in the new dictionary in the order they are produced." +msgstr "" +"字典推导式与列表和集合推导式有所不同,它需要以冒号分隔的两个表达式,后面带上标准的 \"for\" 和 \"if\" 子句。 " +"当推导式被执行时,作为结果的键和值元素会按它们的产生顺序被加入新的字典。" + +#: ../../reference/expressions.rst:339 +msgid "" +"Restrictions on the types of the key values are listed earlier in section " +":ref:`types`. (To summarize, the key type should be :term:`hashable`, which" +" excludes all mutable objects.) Clashes between duplicate keys are not " +"detected; the last datum (textually rightmost in the display) stored for a " +"given key value prevails." +msgstr "" +"对键取值类型的限制已列在之前的 :ref:`types` 一节中。 (总的说来,键的类型应该为 " +":term:`hashable`,这就把所有可变对象都排除在外。) 重复键之间的冲突不会被检测;指定键所保存的最后一个数据 (即在显示中排最右边的文本)" +" 为最终有效数据。" + +#: ../../reference/expressions.rst:345 +msgid "" +"Prior to Python 3.8, in dict comprehensions, the evaluation order of key and" +" value was not well-defined. In CPython, the value was evaluated before the" +" key. Starting with 3.8, the key is evaluated before the value, as proposed" +" by :pep:`572`." +msgstr "" +"在 Python 3.8 之前的字典推导式中,并没有定义好键和值的求值顺序。 在 CPython 中,值会先于键被求值。 根据 :pep:`572` " +"的提议,从 3.8 开始,键会先于值被求值。" + +#: ../../reference/expressions.rst:355 +msgid "Generator expressions" +msgstr "生成器表达式" + +#: ../../reference/expressions.rst:362 +msgid "A generator expression is a compact generator notation in parentheses:" +msgstr "生成器表达式是用圆括号括起来的紧凑形式生成器标注。" + +#: ../../reference/expressions.rst:367 +msgid "" +"A generator expression yields a new generator object. Its syntax is the " +"same as for comprehensions, except that it is enclosed in parentheses " +"instead of brackets or curly braces." +msgstr "生成器表达式会产生一个新的生成器对象。 其句法与推导式相同,区别在于它是用圆括号而不是用方括号或花括号括起来的。" + +#: ../../reference/expressions.rst:371 +msgid "" +"Variables used in the generator expression are evaluated lazily when the " +":meth:`~generator.__next__` method is called for the generator object (in " +"the same fashion as normal generators). However, the iterable expression in" +" the leftmost :keyword:`!for` clause is immediately evaluated, so that an " +"error produced by it will be emitted at the point where the generator " +"expression is defined, rather than at the point where the first value is " +"retrieved. Subsequent :keyword:`!for` clauses and any filter condition in " +"the leftmost :keyword:`!for` clause cannot be evaluated in the enclosing " +"scope as they may depend on the values obtained from the leftmost iterable. " +"For example: ``(x*y for x in range(10) for y in range(x, x+10))``." +msgstr "" +"在生成器表达式中使用的变量会在为生成器对象调用 :meth:`~generator.__next__` " +"方法的时候以惰性方式被求值(即与普通生成器相同的方式)。 但是,最左侧 :keyword:`!for` " +"子句内的可迭代对象是会被立即求值的,因此它所造成的错误会在生成器表达式被定义时被检测到,而不是在获取第一个值时才出错。 后续的 " +":keyword:`!for` 子句以及最左侧 :keyword:`!for` " +"子句内的任何筛选条件无法在外层作用域内被求值,因为它们可能会依赖于从最左侧可迭代对象获取的值。 例如: ``(x*y for x in " +"range(10) for y in range(x, x+10))``." + +#: ../../reference/expressions.rst:382 +msgid "" +"The parentheses can be omitted on calls with only one argument. See section" +" :ref:`calls` for details." +msgstr "圆括号在只附带一个参数的调用中可以被省略。 详情参见 :ref:`calls` 一节。" + +#: ../../reference/expressions.rst:385 +msgid "" +"To avoid interfering with the expected operation of the generator expression" +" itself, ``yield`` and ``yield from`` expressions are prohibited in the " +"implicitly defined generator." +msgstr "为了避免干扰到生成器表达式本身的预期操作,禁止在隐式定义的生成器中使用 ``yield`` 和 ``yield from`` 表达式。" + +#: ../../reference/expressions.rst:389 +msgid "" +"If a generator expression contains either :keyword:`!async for` clauses or " +":keyword:`await` expressions it is called an :dfn:`asynchronous generator " +"expression`. An asynchronous generator expression returns a new " +"asynchronous generator object, which is an asynchronous iterator (see " +":ref:`async-iterators`)." +msgstr "" +"如果生成器表达式包含 :keyword:`!async for` 子句或 :keyword:`await` 表达式,则称为 " +":dfn:`异步生成器表达式`。 异步生成器表达式会返回一个新的异步生成器对象,此对象属于异步迭代器 (参见 :ref:`async-" +"iterators`)。" + +#: ../../reference/expressions.rst:395 +msgid "Asynchronous generator expressions were introduced." +msgstr "引入了异步生成器表达式。" + +#: ../../reference/expressions.rst:398 +msgid "" +"Prior to Python 3.7, asynchronous generator expressions could only appear in" +" :keyword:`async def` coroutines. Starting with 3.7, any function can use " +"asynchronous generator expressions." +msgstr "" +"在 Python 3.7 之前,异步生成器表达式只能在 :keyword:`async def` 协和中出现。 从 3.7 " +"开始,任何函数都可以使用异步生成器表达式。" + +#: ../../reference/expressions.rst:410 +msgid "Yield expressions" +msgstr "yield 表达式" + +#: ../../reference/expressions.rst:422 +msgid "" +"The yield expression is used when defining a :term:`generator` function or " +"an :term:`asynchronous generator` function and thus can only be used in the " +"body of a function definition. Using a yield expression in a function's " +"body causes that function to be a generator function, and using it in an " +":keyword:`async def` function's body causes that coroutine function to be an" +" asynchronous generator function. For example::" +msgstr "" +"yield 表达式在定义 :term:`generator` 函数或 :term:`asynchronous generator` " +"函数时才会用到因此只能在函数定义的内部使用。 在一个函数体内使用 yield 表达式会使这个函数变成一个生成器函数,而在一个 " +":keyword:`async def` 函数的内部使用它则会让这个协程函数变成一个异步生成器函数。 例如::" + +#: ../../reference/expressions.rst:435 +msgid "" +"Due to their side effects on the containing scope, ``yield`` expressions are" +" not permitted as part of the implicitly defined scopes used to implement " +"comprehensions and generator expressions." +msgstr "由于它们会对外层作用域造成附带影响,``yield`` 表达式不被允许作为用于实现推导式和生成器表达式的隐式定义作用域的一部分。" + +#: ../../reference/expressions.rst:439 +msgid "" +"Yield expressions prohibited in the implicitly nested scopes used to " +"implement comprehensions and generator expressions." +msgstr "禁止在实现推导式和生成器表达式的隐式嵌套作用域中使用 yield 表达式。" + +#: ../../reference/expressions.rst:443 +msgid "" +"Generator functions are described below, while asynchronous generator " +"functions are described separately in section :ref:`asynchronous-generator-" +"functions`." +msgstr "" +"下面是对生成器函数的描述,异步生成器函数会在 :ref:`asynchronous-generator-functions` 一节中单独介绍。" + +#: ../../reference/expressions.rst:447 +msgid "" +"When a generator function is called, it returns an iterator known as a " +"generator. That generator then controls the execution of the generator " +"function. The execution starts when one of the generator's methods is " +"called. At that time, the execution proceeds to the first yield expression," +" where it is suspended again, returning the value of " +":token:`expression_list` to the generator's caller. By suspended, we mean " +"that all local state is retained, including the current bindings of local " +"variables, the instruction pointer, the internal evaluation stack, and the " +"state of any exception handling. When the execution is resumed by calling " +"one of the generator's methods, the function can proceed exactly as if the " +"yield expression were just another external call. The value of the yield " +"expression after resuming depends on the method which resumed the execution." +" If :meth:`~generator.__next__` is used (typically via either a " +":keyword:`for` or the :func:`next` builtin) then the result is " +":const:`None`. Otherwise, if :meth:`~generator.send` is used, then the " +"result will be the value passed in to that method." +msgstr "" +"当一个生成器函数被调用的时候,它返回一个迭代器,称为生成器。然后这个生成器来控制生成器函数的执行。当这个生成器的某一个方法被调用的时候,生成器函数开始执行。这时会一直执行到第一个" +" yield 表达式,在此执行再次被挂起,给生成器的调用者返回 :token:`expression_list` " +"的值。挂起后,我们说所有局部状态都被保留下来,包括局部变量的当前绑定,指令指针,内部求值栈和任何异常处理的状态。通过调用生成器的某一个方法,生成器函数继续执行。此时函数的运行就和" +" yield 表达式只是一个外部函数调用的情况完全一致。恢复后 yield 表达式的值取决于调用的哪个方法来恢复执行。 如果用的是 " +":meth:`~generator.__next__` (通常通过语言内置的 :keyword:`for` 或是 :func:`next` 来调用) " +"那么结果就是 :const:`None`. 否则,如果用 :meth:`~generator.send`, 那么结果就是传递给send方法的值。" + +#: ../../reference/expressions.rst:466 +msgid "" +"All of this makes generator functions quite similar to coroutines; they " +"yield multiple times, they have more than one entry point and their " +"execution can be suspended. The only difference is that a generator " +"function cannot control where the execution should continue after it yields;" +" the control is always transferred to the generator's caller." +msgstr "" +"所有这些使生成器函数与协程非常相似;它们 yield 多次,它们具有多个入口点,并且它们的执行可以被挂起。唯一的区别是生成器函数不能控制在它在 " +"yield 后交给哪里继续执行;控制权总是转移到生成器的调用者。" + +#: ../../reference/expressions.rst:472 +msgid "" +"Yield expressions are allowed anywhere in a :keyword:`try` construct. If " +"the generator is not resumed before it is finalized (by reaching a zero " +"reference count or by being garbage collected), the generator-iterator's " +":meth:`~generator.close` method will be called, allowing any pending " +":keyword:`finally` clauses to execute." +msgstr "" +"在 :keyword:`try` " +"结构中的任何位置都允许yield表达式。如果生成器在(因为引用计数到零或是因为被垃圾回收)销毁之前没有恢复执行,将调用生成器-迭代器的 " +":meth:`~generator.close` 方法. close 方法允许任何挂起的 :keyword:`finally` 子句执行。" + +#: ../../reference/expressions.rst:481 +msgid "" +"When ``yield from `` is used, the supplied expression must be an " +"iterable. The values produced by iterating that iterable are passed directly" +" to the caller of the current generator's methods. Any values passed in with" +" :meth:`~generator.send` and any exceptions passed in with " +":meth:`~generator.throw` are passed to the underlying iterator if it has the" +" appropriate methods. If this is not the case, then :meth:`~generator.send`" +" will raise :exc:`AttributeError` or :exc:`TypeError`, while " +":meth:`~generator.throw` will just raise the passed in exception " +"immediately." +msgstr "" +"当使用 ``yield from `` 时,所提供的表达式必须是一个可迭代对象。 " +"迭代该可迭代对象所产生的值会被直接传递给当前生成器方法的调用者。 任何通过 :meth:`~generator.send` 传入的值以及任何通过 " +":meth:`~generator.throw` 传入的异常如果有适当的方法则会被传给下层迭代器。 如果不是这种情况,那么 " +":meth:`~generator.send` 将引发 :exc:`AttributeError` 或 :exc:`TypeError`,而 " +":meth:`~generator.throw` 将立即引发所转入的异常。" + +#: ../../reference/expressions.rst:490 +msgid "" +"When the underlying iterator is complete, the :attr:`~StopIteration.value` " +"attribute of the raised :exc:`StopIteration` instance becomes the value of " +"the yield expression. It can be either set explicitly when raising " +":exc:`StopIteration`, or automatically when the subiterator is a generator " +"(by returning a value from the subgenerator)." +msgstr "" +"当下层迭代器完成时,被引发的 :exc:`StopIteration` 实例的 :attr:`~StopIteration.value` 属性会成为 " +"yield 表达式的值。 它可以在引发 :exc:`StopIteration` " +"时被显式地设置,也可以在子迭代器是一个生成器时自动地设置(通过从子生成器返回一个值)。" + +#: ../../reference/expressions.rst:496 +msgid "Added ``yield from `` to delegate control flow to a subiterator." +msgstr "添加 ``yield from `` 以委托控制流给一个子迭代器。" + +#: ../../reference/expressions.rst:499 +msgid "" +"The parentheses may be omitted when the yield expression is the sole " +"expression on the right hand side of an assignment statement." +msgstr "当yield表达式是赋值语句右侧的唯一表达式时,括号可以省略。" + +#: ../../reference/expressions.rst:505 +msgid ":pep:`255` - Simple Generators" +msgstr ":pep:`255` - 简单生成器" + +#: ../../reference/expressions.rst:505 +msgid "" +"The proposal for adding generators and the :keyword:`yield` statement to " +"Python." +msgstr "在 Python 中加入生成器和 :keyword:`yield` 语句的提议。" + +#: ../../reference/expressions.rst:509 +msgid ":pep:`342` - Coroutines via Enhanced Generators" +msgstr ":pep:`342` - 通过增强型生成器实现协程" + +#: ../../reference/expressions.rst:508 +msgid "" +"The proposal to enhance the API and syntax of generators, making them usable" +" as simple coroutines." +msgstr "增强生成器 API 和语法的提议,使其可以被用作简单的协程。" + +#: ../../reference/expressions.rst:513 +msgid ":pep:`380` - Syntax for Delegating to a Subgenerator" +msgstr ":pep:`380` - 委托给子生成器的语法" + +#: ../../reference/expressions.rst:512 +msgid "" +"The proposal to introduce the :token:`yield_from` syntax, making delegation " +"to subgenerators easy." +msgstr "引入 :token:`yield_from` 语法以方便地委托给子生成器的提议。" + +#: ../../reference/expressions.rst:516 +msgid ":pep:`525` - Asynchronous Generators" +msgstr ":pep:`525` - 异步生成器" + +#: ../../reference/expressions.rst:516 +msgid "" +"The proposal that expanded on :pep:`492` by adding generator capabilities to" +" coroutine functions." +msgstr "通过给协程函数加入生成器功能对 :pep:`492` 进行扩展的提议。" + +#: ../../reference/expressions.rst:523 +msgid "Generator-iterator methods" +msgstr "生成器-迭代器的方法" + +#: ../../reference/expressions.rst:525 +msgid "" +"This subsection describes the methods of a generator iterator. They can be " +"used to control the execution of a generator function." +msgstr "这个子小节描述了生成器迭代器的方法。 它们可被用于控制生成器函数的执行。" + +#: ../../reference/expressions.rst:528 +msgid "" +"Note that calling any of the generator methods below when the generator is " +"already executing raises a :exc:`ValueError` exception." +msgstr "请注意在生成器已经在执行时调用以下任何方法都会引发 :exc:`ValueError` 异常。" + +#: ../../reference/expressions.rst:536 +msgid "" +"Starts the execution of a generator function or resumes it at the last " +"executed yield expression. When a generator function is resumed with a " +":meth:`~generator.__next__` method, the current yield expression always " +"evaluates to :const:`None`. The execution then continues to the next yield " +"expression, where the generator is suspended again, and the value of the " +":token:`expression_list` is returned to :meth:`__next__`'s caller. If the " +"generator exits without yielding another value, a :exc:`StopIteration` " +"exception is raised." +msgstr "" +"开始一个生成器函数的执行或是从上次执行的 yield 表达式位置恢复执行。 当一个生成器函数通过 :meth:`~generator.__next__`" +" 方法恢复执行时,当前的 yield 表达式总是取值为 :const:`None`。 随后会继续执行到下一个 yield 表达式,其 " +":token:`expression_list` 的值会返回给 :meth:`__next__` 的调用者。 如果生成器没有产生下一个值就退出,则将引发" +" :exc:`StopIteration` 异常。" + +#: ../../reference/expressions.rst:545 +msgid "" +"This method is normally called implicitly, e.g. by a :keyword:`for` loop, or" +" by the built-in :func:`next` function." +msgstr "此方法通常是隐式地调用,例如通过 :keyword:`for` 循环或是内置的 :func:`next` 函数。" + +#: ../../reference/expressions.rst:551 +msgid "" +"Resumes the execution and \"sends\" a value into the generator function. " +"The *value* argument becomes the result of the current yield expression. " +"The :meth:`send` method returns the next value yielded by the generator, or " +"raises :exc:`StopIteration` if the generator exits without yielding another " +"value. When :meth:`send` is called to start the generator, it must be " +"called with :const:`None` as the argument, because there is no yield " +"expression that could receive the value." +msgstr "" +"恢复执行并向生成器函数“发送”一个值。 *value* 参数将成为当前 yield 表达式的结果。 :meth:`send` " +"方法会返回生成器所产生的下一个值,或者如果生成器没有产生下一个值就退出则会引发 :exc:`StopIteration`。 当调用 " +":meth:`send` 来启动生成器时,它必须以 :const:`None` 作为调用参数,因为这时没有可以接收值的 yield 表达式。" + +#: ../../reference/expressions.rst:563 +msgid "" +"Raises an exception at the point where the generator was paused, and returns" +" the next value yielded by the generator function. If the generator exits " +"without yielding another value, a :exc:`StopIteration` exception is raised." +" If the generator function does not catch the passed-in exception, or " +"raises a different exception, then that exception propagates to the caller." +msgstr "" +"在生成器暂停的位置引发一个异常,并返回该生成器函数所产生的下一个值。 如果生成器没有产生下一个值就退出,则将引发 " +":exc:`StopIteration` 异常。 如果生成器函数没有捕获传入的异常,或是引发了另一个异常,则该异常会被传播给调用方。" + +#: ../../reference/expressions.rst:569 +msgid "" +"In typical use, this is called with a single exception instance similar to " +"the way the :keyword:`raise` keyword is used." +msgstr "在典型的使用场景下,其调用将附带单个异常实例,类似于使用 :keyword:`raise` 关键字的方式。" + +#: ../../reference/expressions.rst:572 +msgid "" +"For backwards compatability, however, the second signature is supported, " +"following a convention from older versions of Python. The *type* argument " +"should be an exception class, and *value* should be an exception instance. " +"If the *value* is not provided, the *type* constructor is called to get an " +"instance. If *traceback* is provided, it is set on the exception, otherwise " +"any existing :attr:`~BaseException.__traceback__` attribute stored in " +"*value* may be cleared." +msgstr "" +"但是为了向下兼容性,也支持第二种签名,遵循来自旧版本 Python 的惯例。 *type* 参数应为一个异常类,而 *value* 应为一个异常实例。 " +"如果未提供 *value*,则将调用 *type* 构造器来获取一个实例。 如果提供了 *traceback*,它将被设置到异常上,否则任何存储在 " +"*value* 中的现有 :attr:`~BaseException.__traceback__` 属性都会被清空。" + +#: ../../reference/expressions.rst:586 +msgid "" +"Raises a :exc:`GeneratorExit` at the point where the generator function was " +"paused. If the generator function then exits gracefully, is already closed," +" or raises :exc:`GeneratorExit` (by not catching the exception), close " +"returns to its caller. If the generator yields a value, a " +":exc:`RuntimeError` is raised. If the generator raises any other exception," +" it is propagated to the caller. :meth:`close` does nothing if the " +"generator has already exited due to an exception or normal exit." +msgstr "" +"在生成器函数暂停的位置引发 :exc:`GeneratorExit`。 如果生成器函数随后正常退出、已经关闭,或者引发了 " +":exc:`GeneratorExit` (由于未捕获异常),执行关闭将返回其调用方。 如果生成器产生了一个值,则将引发 " +":exc:`RuntimeError`。 如果生成器引发了任何其他异常,它将被传播给调用方。 如果生成器已经由于异常或以正常退出方式结束执行则 " +":meth:`close` 将不会做任何事。" + +#: ../../reference/expressions.rst:597 +msgid "Examples" +msgstr "例子" + +#: ../../reference/expressions.rst:599 +msgid "" +"Here is a simple example that demonstrates the behavior of generators and " +"generator functions::" +msgstr "这里是一个简单的例子,演示了生成器和生成器函数的行为::" + +#: ../../reference/expressions.rst:626 +msgid "" +"For examples using ``yield from``, see :ref:`pep-380` in \"What's New in " +"Python.\"" +msgstr "对于 ``yield from`` 的例子, 参见“Python 有什么新变化”中的 :ref:`pep-380`。" + +#: ../../reference/expressions.rst:632 +msgid "Asynchronous generator functions" +msgstr "异步生成器函数" + +#: ../../reference/expressions.rst:634 +msgid "" +"The presence of a yield expression in a function or method defined using " +":keyword:`async def` further defines the function as an :term:`asynchronous " +"generator` function." +msgstr "" +"在一个使用 :keyword:`async def` 定义的函数或方法中出现的 yield 表达式会进一步将该函数定义为一个 " +":term:`asynchronous generator` 函数。" + +#: ../../reference/expressions.rst:638 +msgid "" +"When an asynchronous generator function is called, it returns an " +"asynchronous iterator known as an asynchronous generator object. That object" +" then controls the execution of the generator function. An asynchronous " +"generator object is typically used in an :keyword:`async for` statement in a" +" coroutine function analogously to how a generator object would be used in a" +" :keyword:`for` statement." +msgstr "" +"当一个异步生成器函数被调用时,它会返回一个名为异步生成器对象的异步迭代器。 此对象将在之后控制该生成器函数的执行。 异步生成器对象通常被用在协程函数的 " +":keyword:`async for` 语句中,类似于在 :keyword:`for` 语句中使用生成器对象。" + +#: ../../reference/expressions.rst:645 +msgid "" +"Calling one of the asynchronous generator's methods returns an " +":term:`awaitable` object, and the execution starts when this object is " +"awaited on. At that time, the execution proceeds to the first yield " +"expression, where it is suspended again, returning the value of " +":token:`expression_list` to the awaiting coroutine. As with a generator, " +"suspension means that all local state is retained, including the current " +"bindings of local variables, the instruction pointer, the internal " +"evaluation stack, and the state of any exception handling. When the " +"execution is resumed by awaiting on the next object returned by the " +"asynchronous generator's methods, the function can proceed exactly as if the" +" yield expression were just another external call. The value of the yield " +"expression after resuming depends on the method which resumed the execution." +" If :meth:`~agen.__anext__` is used then the result is :const:`None`. " +"Otherwise, if :meth:`~agen.asend` is used, then the result will be the value" +" passed in to that method." +msgstr "" +"调用异步生成器的方法之一将返回 :term:`awaitable` 对象,执行会在此对象被等待时启动。 到那时,执行将前往第一个 yield " +"表达式,在那里它会再次暂停,将 :token:`expression_list` 的值返回给等待中的协程。 " +"与生成器一样,挂起意味着局部的所有状态会被保留,包括局部变量的当前绑定、指令的指针、内部求值的堆栈以及任何异常处理的状态。 " +"当执行在等待异步生成器的方法返回下一个对象后恢复时,该函数可以从原状态继续进行,就仿佛 yield 表达式只是另一个外部调用。 恢复执行之后 yield" +" 表达式的值取决于恢复执行所用的方法。 如果使用 :meth:`~agen.__anext__` 则结果为 :const:`None`。 " +"否则的话,如果使用 :meth:`~agen.asend` 则结果将是传递给该方法的值。" + +#: ../../reference/expressions.rst:661 +msgid "" +"In an asynchronous generator function, yield expressions are allowed " +"anywhere in a :keyword:`try` construct. However, if an asynchronous " +"generator is not resumed before it is finalized (by reaching a zero " +"reference count or by being garbage collected), then a yield expression " +"within a :keyword:`!try` construct could result in a failure to execute " +"pending :keyword:`finally` clauses. In this case, it is the responsibility " +"of the event loop or scheduler running the asynchronous generator to call " +"the asynchronous generator-iterator's :meth:`~agen.aclose` method and run " +"the resulting coroutine object, thus allowing any pending " +":keyword:`!finally` clauses to execute." +msgstr "" +"在异步生成器函数中,yield 表达式允许出现在 :keyword:`try` " +"结构的任何位置。但是,如果一个异步生成器在其被终结(由于引用计数达到零或被作为垃圾回收)之前未被恢复,则 :keyword:`!try` 结构中的 " +"yield 表达式可能导致挂起的 :keyword:`finally` " +"子句执行失败。在此情况下,应由运行该异步生成器的事件循环或任务调度器来负责调用异步生成器-迭代器的 :meth:`~agen.aclose` " +"方法并运行所返回的协程对象,从而允许任何挂起的 :keyword:`!finally` 子句得以执行。" + +#: ../../reference/expressions.rst:672 +msgid "" +"To take care of finalization, an event loop should define a *finalizer* " +"function which takes an asynchronous generator-iterator and presumably calls" +" :meth:`~agen.aclose` and executes the coroutine. This *finalizer* may be " +"registered by calling :func:`sys.set_asyncgen_hooks`. When first iterated " +"over, an asynchronous generator-iterator will store the registered " +"*finalizer* to be called upon finalization. For a reference example of a " +"*finalizer* method see the implementation of " +"``asyncio.Loop.shutdown_asyncgens`` in :source:`Lib/asyncio/base_events.py`." +msgstr "" +"为了能处理最终化,事件循环应该定义一个 *终结器* 函数,它接受一个异步生成器-迭代器且可能调用 :meth:`~agen.aclose` 并执行协程。" +" 这个 *终结器* 可能通过调用 :func:`sys.set_asyncgen_hooks` 来注册。 当首次迭代时,异步生成器-" +"迭代器将保存已注册的 *终结器* 以便在最终化时调用。 有关For a reference example of a *终结器* 方法的参考示例请查看 " +":source:`Lib/asyncio/base_events.py` 中实现的 " +"``asyncio.Loop.shutdown_asyncgens``。" + +#: ../../reference/expressions.rst:681 +msgid "" +"The expression ``yield from `` is a syntax error when used in an " +"asynchronous generator function." +msgstr "``yield from `` 表达式如果在异步生成器函数中使用会引发语法错误。" + +#: ../../reference/expressions.rst:688 +msgid "Asynchronous generator-iterator methods" +msgstr "异步生成器-迭代器方法" + +#: ../../reference/expressions.rst:690 +msgid "" +"This subsection describes the methods of an asynchronous generator iterator," +" which are used to control the execution of a generator function." +msgstr "这个子小节描述了异步生成器迭代器的方法,它们可被用于控制生成器函数的执行。" + +#: ../../reference/expressions.rst:698 +msgid "" +"Returns an awaitable which when run starts to execute the asynchronous " +"generator or resumes it at the last executed yield expression. When an " +"asynchronous generator function is resumed with an :meth:`~agen.__anext__` " +"method, the current yield expression always evaluates to :const:`None` in " +"the returned awaitable, which when run will continue to the next yield " +"expression. The value of the :token:`expression_list` of the yield " +"expression is the value of the :exc:`StopIteration` exception raised by the " +"completing coroutine. If the asynchronous generator exits without yielding " +"another value, the awaitable instead raises a :exc:`StopAsyncIteration` " +"exception, signalling that the asynchronous iteration has completed." +msgstr "" +"返回一个可等待对象,它在运行时会开始执行该异步生成器或是从上次执行的 yield 表达式位置恢复执行。 当一个异步生成器函数通过 " +":meth:`~agen.__anext__` 方法恢复执行时,当前的 yield 表达式所返回的可等待对象总是取值为 " +":const:`None`,它在运行时将继续执行到下一个 yield 表达式。 该 yield 表达式的 " +":token:`expression_list` 的值会是完成的协程所引发的 :exc:`StopIteration` 异常的值。 " +"如果异步生成器没有产生下一个值就退出,则该可等待对象将引发 :exc:`StopAsyncIteration` 异常,提示该异步迭代操作已完成。" + +#: ../../reference/expressions.rst:710 +msgid "" +"This method is normally called implicitly by a :keyword:`async for` loop." +msgstr "此方法通常是通过 :keyword:`async for` 循环隐式地调用。" + +#: ../../reference/expressions.rst:715 +msgid "" +"Returns an awaitable which when run resumes the execution of the " +"asynchronous generator. As with the :meth:`~generator.send()` method for a " +"generator, this \"sends\" a value into the asynchronous generator function, " +"and the *value* argument becomes the result of the current yield expression." +" The awaitable returned by the :meth:`asend` method will return the next " +"value yielded by the generator as the value of the raised " +":exc:`StopIteration`, or raises :exc:`StopAsyncIteration` if the " +"asynchronous generator exits without yielding another value. When " +":meth:`asend` is called to start the asynchronous generator, it must be " +"called with :const:`None` as the argument, because there is no yield " +"expression that could receive the value." +msgstr "" +"返回一个可等待对象,它在运行时会恢复该异步生成器的执行。 与生成器的 :meth:`~generator.send()` " +"方法一样,此方法会“发送”一个值给异步生成器函数,其 *value* 参数会成为当前 yield 表达式的结果值。 :meth:`asend` " +"方法所返回的可等待对象将返回生成器产生的下一个值,其值为所引发的 " +":exc:`StopIteration`,或者如果异步生成器没有产生下一个值就退出则引发 :exc:`StopAsyncIteration`。 当调用 " +":meth:`asend` 来启动异步生成器时,它必须以 :const:`None` 作为调用参数,因为这时没有可以接收值的 yield 表达式。" + +#: ../../reference/expressions.rst:731 +msgid "" +"Returns an awaitable that raises an exception of type ``type`` at the point " +"where the asynchronous generator was paused, and returns the next value " +"yielded by the generator function as the value of the raised " +":exc:`StopIteration` exception. If the asynchronous generator exits without" +" yielding another value, a :exc:`StopAsyncIteration` exception is raised by " +"the awaitable. If the generator function does not catch the passed-in " +"exception, or raises a different exception, then when the awaitable is run " +"that exception propagates to the caller of the awaitable." +msgstr "" +"返回一个可等待对象,它会在异步生成器暂停的位置引发 ``type`` 类型的异常,并返回该生成器函数所产生的下一个值,其值为所引发的 " +":exc:`StopIteration` 异常。 如果异步生成器没有产生下一个值就退出,则将由该可等待对象引发 " +":exc:`StopAsyncIteration` 异步。 " +"如果生成器函数没有捕获传入的异常,或引发了另一个异常,则当可等待对象运行时该异常会被传播给可等待对象的调用者。" + +#: ../../reference/expressions.rst:746 +msgid "" +"Returns an awaitable that when run will throw a :exc:`GeneratorExit` into " +"the asynchronous generator function at the point where it was paused. If the" +" asynchronous generator function then exits gracefully, is already closed, " +"or raises :exc:`GeneratorExit` (by not catching the exception), then the " +"returned awaitable will raise a :exc:`StopIteration` exception. Any further " +"awaitables returned by subsequent calls to the asynchronous generator will " +"raise a :exc:`StopAsyncIteration` exception. If the asynchronous generator " +"yields a value, a :exc:`RuntimeError` is raised by the awaitable. If the " +"asynchronous generator raises any other exception, it is propagated to the " +"caller of the awaitable. If the asynchronous generator has already exited " +"due to an exception or normal exit, then further calls to :meth:`aclose` " +"will return an awaitable that does nothing." +msgstr "" +"返回一个可等待对象,它会在运行时向异步生成器函数暂停的位置抛入一个 :exc:`GeneratorExit`。 如果该异步生成器函数正常退出、关闭或引发" +" :exc:`GeneratorExit` (由于未捕获该异常) 则返回的可等待对象将引发 :exc:`StopIteration` 异常。 " +"后续调用异步生成器所返回的任何其他可等待对象将引发 :exc:`StopAsyncIteration` 异常。 " +"如果异步生成器产生了一个值,该可等待对象会引发 :exc:`RuntimeError`。 " +"如果异步生成器引发任何其他异常,它会被传播给可等待对象的调用者。 如果异步生成器已经由于异常或正常退出则后续调用 :meth:`aclose` " +"将返回一个不会做任何事的可等待对象。" + +#: ../../reference/expressions.rst:762 +msgid "Primaries" +msgstr "原型" + +#: ../../reference/expressions.rst:766 +msgid "" +"Primaries represent the most tightly bound operations of the language. Their" +" syntax is:" +msgstr "原型代表编程语言中最紧密绑定的操作。 它们的句法如下:" + +#: ../../reference/expressions.rst:776 +msgid "Attribute references" +msgstr "属性引用" + +#: ../../reference/expressions.rst:782 +msgid "An attribute reference is a primary followed by a period and a name:" +msgstr "属性引用是后面带有一个句点加一个名称的原型:" + +#: ../../reference/expressions.rst:792 +msgid "" +"The primary must evaluate to an object of a type that supports attribute " +"references, which most objects do. This object is then asked to produce the" +" attribute whose name is the identifier. This production can be customized " +"by overriding the :meth:`__getattr__` method. If this attribute is not " +"available, the exception :exc:`AttributeError` is raised. Otherwise, the " +"type and value of the object produced is determined by the object. Multiple" +" evaluations of the same attribute reference may yield different objects." +msgstr "" +"此原型必须求值为一个支持属性引用的类型的对象,多数对象都支持属性引用。 随后该对象会被要求产生以指定标识符为名称的属性。 这个产生过程可通过重载 " +":meth:`__getattr__` 方法来自定义。 如果这个属性不可用,则将引发 :exc:`AttributeError` 异常。 " +"否则的话,所产生对象的类型和值会根据该对象来确定。 对同一属性引用的多次求值可能产生不同的对象。" + +#: ../../reference/expressions.rst:804 +msgid "Subscriptions" +msgstr "抽取" + +#: ../../reference/expressions.rst:819 +msgid "" +"The subscription of an instance of a :ref:`container class `" +" will generally select an element from the container. The subscription of a " +":term:`generic class ` will generally return a " +":ref:`GenericAlias ` object." +msgstr "" +"对一个 :ref:`容器类 ` 的实例执行抽取操作通常将会从该容器中选取一个元素。 而对一个 :term:`泛型类 " +"` 执行抽取操作通常将会返回一个 :ref:`GenericAlias ` 对象。" + +#: ../../reference/expressions.rst:827 +msgid "" +"When an object is subscripted, the interpreter will evaluate the primary and" +" the expression list." +msgstr "当一个对象被抽取时,解释器将对原型和表达式列表进行求值。" + +#: ../../reference/expressions.rst:830 +msgid "" +"The primary must evaluate to an object that supports subscription. An object" +" may support subscription through defining one or both of " +":meth:`~object.__getitem__` and :meth:`~object.__class_getitem__`. When the " +"primary is subscripted, the evaluated result of the expression list will be " +"passed to one of these methods. For more details on when " +"``__class_getitem__`` is called instead of ``__getitem__``, see " +":ref:`classgetitem-versus-getitem`." +msgstr "" +"原型必须可被求值为一个支持抽取操作的对象。 一个对象可通过同时定义 :meth:`~object.__getitem__` 和 " +":meth:`~object.__class_getitem__` 或其中之一来支持抽取操作。 " +"当原型被抽取时,表达式列表的求值结果将被传给以上方法中的一个。 对于在何时会调用 ``__class_getitem__`` 而不是 " +"``__getitem__`` 的更多细节,请参阅 :ref:`classgetitem-versus-getitem`。" + +#: ../../reference/expressions.rst:837 +msgid "" +"If the expression list contains at least one comma, it will evaluate to a " +":class:`tuple` containing the items of the expression list. Otherwise, the " +"expression list will evaluate to the value of the list's sole member." +msgstr "" +"如果表达式列表包含至少一个逗号,它将被求值为包含该表达式列表中所有条目的 :class:`tuple`。 " +"在其他情况下,表达式列表将被求值为列表中唯一成员的值。" + +#: ../../reference/expressions.rst:841 +msgid "" +"For built-in objects, there are two types of objects that support " +"subscription via :meth:`~object.__getitem__`:" +msgstr "对于内置对象,有两种类型的对象支持通过 :meth:`~object.__getitem__` 执行抽取操作:" + +#: ../../reference/expressions.rst:844 +msgid "" +"Mappings. If the primary is a :term:`mapping`, the expression list must " +"evaluate to an object whose value is one of the keys of the mapping, and the" +" subscription selects the value in the mapping that corresponds to that key." +" An example of a builtin mapping class is the :class:`dict` class." +msgstr "" +"映射。 如果原型是一个 :term:`mapping`,则表达式列表必须求值为一个以该映射的某个键为值的对象,而抽取操作会在映射中选取该键所对应的值。 " +"内置映射类的一个例子是 :class:`dict` 类。" + +#: ../../reference/expressions.rst:848 +msgid "" +"Sequences. If the primary is a :term:`sequence`, the expression list must " +"evaluate to an :class:`int` or a :class:`slice` (as discussed in the " +"following section). Examples of builtin sequence classes include the " +":class:`str`, :class:`list` and :class:`tuple` classes." +msgstr "" +"序列。 如果原型是一个 :term:`sequence`,则表达式列表必须求值为一个 :class:`int` 或一个 :class:`slice` " +"(如下面的小节所讨论的)。 内置序列类的例子包括 :class:`str`, :class:`list` 和 :class:`tuple` 等类。" + +#: ../../reference/expressions.rst:853 +msgid "" +"The formal syntax makes no special provision for negative indices in " +":term:`sequences `. However, built-in sequences all provide a " +":meth:`~object.__getitem__` method that interprets negative indices by " +"adding the length of the sequence to the index so that, for example, " +"``x[-1]`` selects the last item of ``x``. The resulting value must be a " +"nonnegative integer less than the number of items in the sequence, and the " +"subscription selects the item whose index is that value (counting from " +"zero). Since the support for negative indices and slicing occurs in the " +"object's :meth:`__getitem__` method, subclasses overriding this method will " +"need to explicitly add that support." +msgstr "" +"正式语法规则并未在 :term:`序列 ` 中设置负索引号的特殊保留条款。 " +"不过,内置序列都提供了通过给索引号加上序列长度来解读负索引号的 :meth:`~object.__getitem__` " +"方法,因此举例来说,``x[-1]`` 将选取 ``x`` 的最后一项。 " +"结果值必须为一个小于序列中条目数的非负整数,抽取操作会选取索引号为该值的条目(从零开始计数)。 由于对负索引号和切片的支持位于对象的 " +":meth:`__getitem__` 方法中,因而重载此方法的子类将需要显式地添加这种支持。" + +#: ../../reference/expressions.rst:867 +msgid "" +"A :class:`string ` is a special kind of sequence whose items are " +"*characters*. A character is not a separate data type but a string of " +"exactly one character." +msgstr "" +":class:`字符串 ` 是一种特殊的序列,其中的项是 *字符*。 字符并不是一种单独的数据类型而是长度恰好为一个字符的字符串。" + +#: ../../reference/expressions.rst:875 +msgid "Slicings" +msgstr "切片" + +#: ../../reference/expressions.rst:889 +msgid "" +"A slicing selects a range of items in a sequence object (e.g., a string, " +"tuple or list). Slicings may be used as expressions or as targets in " +"assignment or :keyword:`del` statements. The syntax for a slicing:" +msgstr "" +"切片就是在序列对象(字符串、元组或列表)中选择某个范围内的项。 切片可被用作表达式以及赋值或 :keyword:`del` 语句的目标。 " +"切片的句法如下:" + +#: ../../reference/expressions.rst:902 +msgid "" +"There is ambiguity in the formal syntax here: anything that looks like an " +"expression list also looks like a slice list, so any subscription can be " +"interpreted as a slicing. Rather than further complicating the syntax, this" +" is disambiguated by defining that in this case the interpretation as a " +"subscription takes priority over the interpretation as a slicing (this is " +"the case if the slice list contains no proper slice)." +msgstr "" +"此处的正式句法中存在一点歧义:任何形似表达式列表的东西同样也会形似切片列表,因此任何抽取操作也可以被解析为切片。 " +"为了不使句法更加复杂,于是通过定义将此情况解析为抽取优先于解析为切片来消除这种歧义(切片列表未包含正确的切片就属于此情况)。" + +#: ../../reference/expressions.rst:914 +msgid "" +"The semantics for a slicing are as follows. The primary is indexed (using " +"the same :meth:`__getitem__` method as normal subscription) with a key that " +"is constructed from the slice list, as follows. If the slice list contains " +"at least one comma, the key is a tuple containing the conversion of the " +"slice items; otherwise, the conversion of the lone slice item is the key. " +"The conversion of a slice item that is an expression is that expression. " +"The conversion of a proper slice is a slice object (see section " +":ref:`types`) whose :attr:`~slice.start`, :attr:`~slice.stop` and " +":attr:`~slice.step` attributes are the values of the expressions given as " +"lower bound, upper bound and stride, respectively, substituting ``None`` for" +" missing expressions." +msgstr "" +"切片的语义如下所述。 元型通过一个根据下面的切片列表来构造的键进行索引(与普通抽取一样使用 :meth:`__getitem__` 方法)。 " +"如果切片列表包含至少一个逗号,则键将是一个包含切片项转换的元组;否则的话,键将是单个切片项的转换。 切片项如为一个表达式,则其转换就是该表达式。 " +"一个正确切片的转换就是一个切片对象(参见 :ref:`types` 一节),该对象的 :attr:`~slice.start`, " +":attr:`~slice.stop` 和 :attr:`~slice.step` 属性将分别为表达式所给出的下界、上界和步长值,省略的表达式将用 " +"``None`` 来替换。" + +#: ../../reference/expressions.rst:938 +msgid "Calls" +msgstr "调用" + +#: ../../reference/expressions.rst:940 +msgid "" +"A call calls a callable object (e.g., a :term:`function`) with a possibly " +"empty series of :term:`arguments `:" +msgstr "" +"所谓调用就是附带可能为空的一系列 :term:`参数 ` 来执行一个可调用对象 (例如 :term:`function`):" + +#: ../../reference/expressions.rst:957 +msgid "" +"An optional trailing comma may be present after the positional and keyword " +"arguments but does not affect the semantics." +msgstr "一个可选项为在位置和关键字参数后加上逗号而不影响语义。" + +#: ../../reference/expressions.rst:963 +msgid "" +"The primary must evaluate to a callable object (user-defined functions, " +"built-in functions, methods of built-in objects, class objects, methods of " +"class instances, and all objects having a :meth:`__call__` method are " +"callable). All argument expressions are evaluated before the call is " +"attempted. Please refer to section :ref:`function` for the syntax of formal" +" :term:`parameter` lists." +msgstr "" +"此原型必须求值为一个可调用对象(用户定义的函数,内置函数,内置对象的方法,类对象,类实例的方法以及任何具有 :meth:`__call__` " +"方法的对象都是可调用对象)。 所有参数表达式将在尝试调用前被求值。 请参阅 :ref:`function` 一节了解正式的 " +":term:`parameter` 列表句法。" + +#: ../../reference/expressions.rst:971 +msgid "" +"If keyword arguments are present, they are first converted to positional " +"arguments, as follows. First, a list of unfilled slots is created for the " +"formal parameters. If there are N positional arguments, they are placed in " +"the first N slots. Next, for each keyword argument, the identifier is used " +"to determine the corresponding slot (if the identifier is the same as the " +"first formal parameter name, the first slot is used, and so on). If the " +"slot is already filled, a :exc:`TypeError` exception is raised. Otherwise, " +"the value of the argument is placed in the slot, filling it (even if the " +"expression is ``None``, it fills the slot). When all arguments have been " +"processed, the slots that are still unfilled are filled with the " +"corresponding default value from the function definition. (Default values " +"are calculated, once, when the function is defined; thus, a mutable object " +"such as a list or dictionary used as default value will be shared by all " +"calls that don't specify an argument value for the corresponding slot; this " +"should usually be avoided.) If there are any unfilled slots for which no " +"default value is specified, a :exc:`TypeError` exception is raised. " +"Otherwise, the list of filled slots is used as the argument list for the " +"call." +msgstr "" +"如果存在关键字参数,它们会先通过以下操作被转换为位置参数。 首先,为正式参数创建一个未填充空位的列表. 如果有 N 个位置参数,则将它们放入前 N " +"个空位。 然后,对于每个关键字参数,使用标识符来确定其对应的空位(如果标识符与第一个正式参数名相同则使用第一个个空位,依此类推)。 " +"如果空位已被填充,则会引发 :exc:`TypeError` 异常。 否则,将参数值放入空位进行填充(即使表达式为 ``None`` 也会填充空位)。 " +"当所有参数处理完毕时,尚未填充的空位将用来自函数定义的相应默认值来填充。 " +"(函数一旦定义其参数默认值就会被计算;因此,当列表或字典这类可变对象被用作默认值时,将会被所有未指定相应空位参数值的调用所共享;这种情况通常应当避免。)" +" 如果任何一个未填充空位没有指定默认值,则会引发 :exc:`TypeError` 异常。 否则的话,已填充空位的列表会被作为调用的参数列表。" + +#: ../../reference/expressions.rst:991 +msgid "" +"An implementation may provide built-in functions whose positional parameters" +" do not have names, even if they are 'named' for the purpose of " +"documentation, and which therefore cannot be supplied by keyword. In " +"CPython, this is the case for functions implemented in C that use " +":c:func:`PyArg_ParseTuple` to parse their arguments." +msgstr "" +"某些实现可能提供位置参数没有名称的内置函数,即使它们在文档说明的场合下有“命名”,因此不能以关键字形式提供参数。 在 CPython 中,以 C " +"编写并使用 :c:func:`PyArg_ParseTuple` 来解析其参数的函数实现就属于这种情况。" + +#: ../../reference/expressions.rst:997 +msgid "" +"If there are more positional arguments than there are formal parameter " +"slots, a :exc:`TypeError` exception is raised, unless a formal parameter " +"using the syntax ``*identifier`` is present; in this case, that formal " +"parameter receives a tuple containing the excess positional arguments (or an" +" empty tuple if there were no excess positional arguments)." +msgstr "" +"如果存在比正式参数空位多的位置参数,将会引发 :exc:`TypeError` 异常,除非有一个正式参数使用了 ``*identifier`` " +"句法;在此情况下,该正式参数将接受一个包含了多余位置参数的元组(如果没有多余位置参数则为一个空元组)。" + +#: ../../reference/expressions.rst:1003 +msgid "" +"If any keyword argument does not correspond to a formal parameter name, a " +":exc:`TypeError` exception is raised, unless a formal parameter using the " +"syntax ``**identifier`` is present; in this case, that formal parameter " +"receives a dictionary containing the excess keyword arguments (using the " +"keywords as keys and the argument values as corresponding values), or a " +"(new) empty dictionary if there were no excess keyword arguments." +msgstr "" +"如果任何关键字参数没有与之对应的正式参数名称,将会引发 :exc:`TypeError` 异常,除非有一个正式参数使用了 " +"``**identifier`` " +"句法,该正式参数将接受一个包含了多余关键字参数的字典(使用关键字作为键而参数值作为与键对应的值),如果没有多余关键字参数则为一个(新的)空字典。" + +#: ../../reference/expressions.rst:1014 +msgid "" +"If the syntax ``*expression`` appears in the function call, ``expression`` " +"must evaluate to an :term:`iterable`. Elements from these iterables are " +"treated as if they were additional positional arguments. For the call " +"``f(x1, x2, *y, x3, x4)``, if *y* evaluates to a sequence *y1*, ..., *yM*, " +"this is equivalent to a call with M+4 positional arguments *x1*, *x2*, *y1*," +" ..., *yM*, *x3*, *x4*." +msgstr "" +"如果函数调用中出现了 ``*expression`` 句法,``expression`` 必须求值为一个 :term:`iterable`。 " +"来自该可迭代对象的元素会被当作是额外的位置参数。 对于 ``f(x1, x2, *y, x3, x4)`` 调用,如果 *y* 求值为一个序列 " +"*y1*, ..., *yM*,则它就等价于一个带有 M+4 个位置参数 *x1*, *x2*, *y1*, ..., *yM*, *x3*, *x4*" +" 的调用。" + +#: ../../reference/expressions.rst:1021 +msgid "" +"A consequence of this is that although the ``*expression`` syntax may appear" +" *after* explicit keyword arguments, it is processed *before* the keyword " +"arguments (and any ``**expression`` arguments -- see below). So::" +msgstr "" +"这样做的一个后果是虽然 ``*expression`` 句法可能出现于显式的关键字参数 *之后*,但它会在关键字参数(以及任何 " +"``**expression`` 参数 -- 见下文) *之前* 被处理。 因此::" + +#: ../../reference/expressions.rst:1037 +msgid "" +"It is unusual for both keyword arguments and the ``*expression`` syntax to " +"be used in the same call, so in practice this confusion does not arise." +msgstr "在同一个调用中同时使用关键字参数和 ``*expression`` 句法并不常见,因此实际上这样的混淆不会发生。" + +#: ../../reference/expressions.rst:1043 +msgid "" +"If the syntax ``**expression`` appears in the function call, ``expression`` " +"must evaluate to a :term:`mapping`, the contents of which are treated as " +"additional keyword arguments. If a keyword is already present (as an " +"explicit keyword argument, or from another unpacking), a :exc:`TypeError` " +"exception is raised." +msgstr "" +"如果函数调用中出现了 ``**expression`` 句法,``expression`` 必须求值为一个 " +":term:`mapping`,其内容会被当作是额外的关键字参数。 如果一个关键字已存在(作为显式关键字参数,或来自另一个拆包),则将引发 " +":exc:`TypeError` 异常。" + +#: ../../reference/expressions.rst:1049 +msgid "" +"Formal parameters using the syntax ``*identifier`` or ``**identifier`` " +"cannot be used as positional argument slots or as keyword argument names." +msgstr "使用 ``*identifier`` 或 ``**identifier`` 句法的正式参数不能被用作位置参数空位或关键字参数名称。" + +#: ../../reference/expressions.rst:1052 +msgid "" +"Function calls accept any number of ``*`` and ``**`` unpackings, positional " +"arguments may follow iterable unpackings (``*``), and keyword arguments may " +"follow dictionary unpackings (``**``). Originally proposed by :pep:`448`." +msgstr "" +"函数调用接受任意数量的 ``*`` 和 ``**`` 拆包,位置参数可能跟在可迭代对象拆包 (``*``) 之后,而关键字参数可能跟在字典拆包 " +"(``**``) 之后。 由 :pep:`448` 发起最初提议。" + +#: ../../reference/expressions.rst:1058 +msgid "" +"A call always returns some value, possibly ``None``, unless it raises an " +"exception. How this value is computed depends on the type of the callable " +"object." +msgstr "除非引发了异常,调用总是会有返回值,返回值也可能为 ``None``。 返回值的计算方式取决于可调用对象的类型。" + +#: ../../reference/expressions.rst:1062 +msgid "If it is---" +msgstr "如果类型为---" + +#: ../../reference/expressions.rst:1075 +msgid "a user-defined function:" +msgstr "用户自定义函数:" + +#: ../../reference/expressions.rst:1071 +msgid "" +"The code block for the function is executed, passing it the argument list. " +"The first thing the code block will do is bind the formal parameters to the " +"arguments; this is described in section :ref:`function`. When the code " +"block executes a :keyword:`return` statement, this specifies the return " +"value of the function call." +msgstr "" +"函数的代码块会被执行,并向其传入参数列表。 代码块所做的第一件事是将正式形参绑定到对应参数;相关描述参见 :ref:`function` 一节。 " +"当代码块执行 :keyword:`return` 语句时,由其指定函数调用的返回值。" + +#: ../../reference/expressions.rst:1089 +msgid "a built-in function or method:" +msgstr "内置函数或方法:" + +#: ../../reference/expressions.rst:1088 +msgid "" +"The result is up to the interpreter; see :ref:`built-in-funcs` for the " +"descriptions of built-in functions and methods." +msgstr "具体结果依赖于解释器;有关内置函数和方法的描述参见 :ref:`built-in-funcs`。" + +#: ../../reference/expressions.rst:1096 +msgid "a class object:" +msgstr "类对象:" + +#: ../../reference/expressions.rst:1096 +msgid "A new instance of that class is returned." +msgstr "返回该类的一个新实例。" + +#: ../../reference/expressions.rst:1106 +msgid "a class instance method:" +msgstr "类实例方法:" + +#: ../../reference/expressions.rst:1104 +msgid "" +"The corresponding user-defined function is called, with an argument list " +"that is one longer than the argument list of the call: the instance becomes " +"the first argument." +msgstr "调用相应的用户自定义函数,向其传入的参数列表会比调用的参数列表多一项:该实例将成为第一个参数。" + +#: ../../reference/expressions.rst:1115 +msgid "a class instance:" +msgstr "类实例:" + +#: ../../reference/expressions.rst:1113 +msgid "" +"The class must define a :meth:`__call__` method; the effect is then the same" +" as if that method was called." +msgstr "该类必须定义有 :meth:`__call__` 方法;作用效果将等价于调用该方法。" + +#: ../../reference/expressions.rst:1121 ../../reference/expressions.rst:1886 +msgid "Await expression" +msgstr "await 表达式" + +#: ../../reference/expressions.rst:1123 +msgid "" +"Suspend the execution of :term:`coroutine` on an :term:`awaitable` object. " +"Can only be used inside a :term:`coroutine function`." +msgstr "" +"挂起 :term:`coroutine` 的执行以等待一个 :term:`awaitable` 对象。 只能在 :term:`coroutine " +"function` 内部使用。" + +#: ../../reference/expressions.rst:1135 +msgid "The power operator" +msgstr "幂运算符" + +#: ../../reference/expressions.rst:1141 +msgid "" +"The power operator binds more tightly than unary operators on its left; it " +"binds less tightly than unary operators on its right. The syntax is:" +msgstr "幂运算符的绑定比在其左侧的一元运算符更紧密;但绑定紧密程度不及在其右侧的一元运算符。 句法如下:" + +#: ../../reference/expressions.rst:1147 +msgid "" +"Thus, in an unparenthesized sequence of power and unary operators, the " +"operators are evaluated from right to left (this does not constrain the " +"evaluation order for the operands): ``-1**2`` results in ``-1``." +msgstr "" +"因此,在一个未加圆括号的幂运算符和单目运算符序列中,运算符将从右向左求值(这不会限制操作数的求值顺序): ``-1**2`` 结果将为 ``-1``。" + +#: ../../reference/expressions.rst:1151 +msgid "" +"The power operator has the same semantics as the built-in :func:`pow` " +"function, when called with two arguments: it yields its left argument raised" +" to the power of its right argument. The numeric arguments are first " +"converted to a common type, and the result is of that type." +msgstr "" +"幂运算符与附带两个参数调用内置 :func:`pow` 函数具有相同的语义:结果为对其左参数进行其右参数所指定幂次的乘方运算。 " +"数值参数会先转换为相同类型,结果也为转换后的类型。" + +#: ../../reference/expressions.rst:1156 +msgid "" +"For int operands, the result has the same type as the operands unless the " +"second argument is negative; in that case, all arguments are converted to " +"float and a float result is delivered. For example, ``10**2`` returns " +"``100``, but ``10**-2`` returns ``0.01``." +msgstr "" +"对于 int 类型的操作数,结果将具有与操作数相同的类型,除非第二个参数为负数;在那种情况下,所有参数会被转换为 float 类型并输出 float " +"类型的结果。 例如,``10**2`` 返回 ``100``,而 ``10**-2`` 返回 ``0.01``。" + +#: ../../reference/expressions.rst:1161 +msgid "" +"Raising ``0.0`` to a negative power results in a :exc:`ZeroDivisionError`. " +"Raising a negative number to a fractional power results in a " +":class:`complex` number. (In earlier versions it raised a " +":exc:`ValueError`.)" +msgstr "" +"对 ``0.0`` 进行负数幂次运算将导致 :exc:`ZeroDivisionError`。 对负数进行分数幂次运算将返回 " +":class:`complex` 数值。 (在早期版本中这将引发 :exc:`ValueError`。)" + +#: ../../reference/expressions.rst:1165 +msgid "" +"This operation can be customized using the special :meth:`__pow__` method." +msgstr "此运算符可使用特殊的 :meth:`__pow__` 方法来自定义。" + +#: ../../reference/expressions.rst:1170 +msgid "Unary arithmetic and bitwise operations" +msgstr "一元算术和位运算" + +#: ../../reference/expressions.rst:1176 +msgid "All unary arithmetic and bitwise operations have the same priority:" +msgstr "所有算术和位运算具有相同的优先级:" + +#: ../../reference/expressions.rst:1187 +msgid "" +"The unary ``-`` (minus) operator yields the negation of its numeric " +"argument; the operation can be overridden with the :meth:`__neg__` special " +"method." +msgstr "一元的 ``-`` (负值) 运算符会产生其数字参数的负值;该运算可通过 :meth:`__neg__` 特殊方法来重载。" + +#: ../../reference/expressions.rst:1195 +msgid "" +"The unary ``+`` (plus) operator yields its numeric argument unchanged; the " +"operation can be overridden with the :meth:`__pos__` special method." +msgstr "一元的 ``+`` (正值) 运算符会原样输出其数字参数;该运算可通过 :meth:`__pos__` 特殊方法来重载。" + +#: ../../reference/expressions.rst:1202 +msgid "" +"The unary ``~`` (invert) operator yields the bitwise inversion of its " +"integer argument. The bitwise inversion of ``x`` is defined as ``-(x+1)``." +" It only applies to integral numbers or to custom objects that override the" +" :meth:`__invert__` special method." +msgstr "" +"一元的 ``~`` (取反) 运算符会对其整数参数按位取反。 ``x`` 的按位取反被定义为 ``-(x+1)``。 它只作用于整数或是重载了 " +":meth:`__invert__` 特殊方法的自定义对象。" + +#: ../../reference/expressions.rst:1211 +msgid "" +"In all three cases, if the argument does not have the proper type, a " +":exc:`TypeError` exception is raised." +msgstr "在所有三种情况下,如果参数的类型不正确,将引发 :exc:`TypeError` 异常。" + +#: ../../reference/expressions.rst:1218 +msgid "Binary arithmetic operations" +msgstr "二元算术运算符" + +#: ../../reference/expressions.rst:1222 +msgid "" +"The binary arithmetic operations have the conventional priority levels. " +"Note that some of these operations also apply to certain non-numeric types." +" Apart from the power operator, there are only two levels, one for " +"multiplicative operators and one for additive operators:" +msgstr "" +"二元算术运算符遵循传统的优先级。 请注意某些此类运算符也作用于特定的非数字类型。 " +"除幂运算符以外只有两个优先级别,一个作用于乘法型运算符,另一个作用于加法型运算符:" + +#: ../../reference/expressions.rst:1237 +msgid "" +"The ``*`` (multiplication) operator yields the product of its arguments. " +"The arguments must either both be numbers, or one argument must be an " +"integer and the other must be a sequence. In the former case, the numbers " +"are converted to a common type and then multiplied together. In the latter " +"case, sequence repetition is performed; a negative repetition factor yields " +"an empty sequence." +msgstr "" +"运算符 ``*`` (乘) 将输出其参数的乘积。 两个参数或者必须都为数字,或者一个参数必须为整数而另一个参数必须为序列。 " +"在前一种情况下,两个数字将被转换为相同类型然后相乘。 在后一种情况下,将执行序列的重复;重复因子为负数将输出空序列。" + +#: ../../reference/expressions.rst:1243 +msgid "" +"This operation can be customized using the special :meth:`__mul__` and " +":meth:`__rmul__` methods." +msgstr "此运算可使用特殊的 :meth:`__mul__` 和 :meth:`__rmul__` 方法来自定义。" + +#: ../../reference/expressions.rst:1250 +msgid "" +"The ``@`` (at) operator is intended to be used for matrix multiplication. " +"No builtin Python types implement this operator." +msgstr "运算符 ``@`` (at) 的目标是用于矩阵乘法。 没有内置 Python 类型实现此运算符。" + +#: ../../reference/expressions.rst:1261 +msgid "" +"The ``/`` (division) and ``//`` (floor division) operators yield the " +"quotient of their arguments. The numeric arguments are first converted to a" +" common type. Division of integers yields a float, while floor division of " +"integers results in an integer; the result is that of mathematical division " +"with the 'floor' function applied to the result. Division by zero raises " +"the :exc:`ZeroDivisionError` exception." +msgstr "" +"运算符 ``/`` (除) 和 ``//`` (整除) 将输出其参数的商。 两个数字参数将先被转换为相同类型。 整数相除会输出一个 float " +"值,整数相整除的结果仍是整数;整除的结果就是使用 'floor' 函数进行算术除法的结果。 除以零的运算将引发 " +":exc:`ZeroDivisionError` 异常。" + +#: ../../reference/expressions.rst:1268 +msgid "" +"This operation can be customized using the special :meth:`__truediv__` and " +":meth:`__floordiv__` methods." +msgstr "此运行可使用特殊的 :meth:`__truediv__` 和 :meth:`__floordiv__` 方法来自定义。" + +#: ../../reference/expressions.rst:1275 +msgid "" +"The ``%`` (modulo) operator yields the remainder from the division of the " +"first argument by the second. The numeric arguments are first converted to " +"a common type. A zero right argument raises the :exc:`ZeroDivisionError` " +"exception. The arguments may be floating point numbers, e.g., ``3.14%0.7`` " +"equals ``0.34`` (since ``3.14`` equals ``4*0.7 + 0.34``.) The modulo " +"operator always yields a result with the same sign as its second operand (or" +" zero); the absolute value of the result is strictly smaller than the " +"absolute value of the second operand [#]_." +msgstr "" +"运算符 ``%`` (模) 将输出第一个参数除以第二个参数的余数。 两个数字参数将先被转换为相同类型。 右参数为零将引发 " +":exc:`ZeroDivisionError` 异常。 参数可以为浮点数,例如 ``3.14%0.7`` 等于 ``0.34`` (因为 " +"``3.14`` 等于 ``4*0.7 + 0.34``)。 " +"模运算符的结果的正负总是与第二个操作数一致(或是为零);结果的绝对值一定小于第二个操作数的绝对值 [#]_。" + +#: ../../reference/expressions.rst:1284 +msgid "" +"The floor division and modulo operators are connected by the following " +"identity: ``x == (x//y)*y + (x%y)``. Floor division and modulo are also " +"connected with the built-in function :func:`divmod`: ``divmod(x, y) == " +"(x//y, x%y)``. [#]_." +msgstr "" +"整除与模运算符的联系可通过以下等式说明: ``x == (x//y)*y + (x%y)``。 此外整除与模也可通过内置函数 " +":func:`divmod` 来同时进行: ``divmod(x, y) == (x//y, x%y)``。 [#]_。" + +#: ../../reference/expressions.rst:1289 +msgid "" +"In addition to performing the modulo operation on numbers, the ``%`` " +"operator is also overloaded by string objects to perform old-style string " +"formatting (also known as interpolation). The syntax for string formatting " +"is described in the Python Library Reference, section :ref:`old-string-" +"formatting`." +msgstr "" +"除了对数字执行模运算,运算符 ``%`` 还被字符串对象重载用于执行旧式的字符串格式化(又称插值)。 字符串格式化句法的描述参见 Python 库参考的" +" :ref:`old-string-formatting` 一节。" + +#: ../../reference/expressions.rst:1294 +msgid "" +"The *modulo* operation can be customized using the special :meth:`__mod__` " +"method." +msgstr "*取余* 运算可使用特殊的 :meth:`__mod__` 方法来自定义。" + +#: ../../reference/expressions.rst:1296 +msgid "" +"The floor division operator, the modulo operator, and the :func:`divmod` " +"function are not defined for complex numbers. Instead, convert to a " +"floating point number using the :func:`abs` function if appropriate." +msgstr "" +"整除运算符,模运算符和 :func:`divmod` 函数未被定义用于复数。 如果有必要可以使用 :func:`abs` 函数将其转换为浮点数。" + +#: ../../reference/expressions.rst:1305 +msgid "" +"The ``+`` (addition) operator yields the sum of its arguments. The " +"arguments must either both be numbers or both be sequences of the same type." +" In the former case, the numbers are converted to a common type and then " +"added together. In the latter case, the sequences are concatenated." +msgstr "" +"运算符 ``+`` (addition) 将输出其参数的和。 两个参数或者必须都为数字,或者都为相同类型的序列。 " +"在前一种情况下,两个数字将被转换为相同类型然后相加。 在后一种情况下,将执行序列拼接操作。" + +#: ../../reference/expressions.rst:1310 +msgid "" +"This operation can be customized using the special :meth:`__add__` and " +":meth:`__radd__` methods." +msgstr "此运算可使用特殊的 :meth:`__add__` 和 :meth:`__radd__` 方法来自定义。" + +#: ../../reference/expressions.rst:1318 +msgid "" +"The ``-`` (subtraction) operator yields the difference of its arguments. " +"The numeric arguments are first converted to a common type." +msgstr "运算符 ``-`` (减) 将输出其参数的差。 两个数字参数将先被转换为相同类型。" + +#: ../../reference/expressions.rst:1321 +msgid "" +"This operation can be customized using the special :meth:`__sub__` method." +msgstr "此运算可使用特殊的 :meth:`__sub__` 方法来自定义。" + +#: ../../reference/expressions.rst:1327 +msgid "Shifting operations" +msgstr "移位运算" + +#: ../../reference/expressions.rst:1334 +msgid "" +"The shifting operations have lower priority than the arithmetic operations:" +msgstr "移位运算的优先级低于算术运算:" + +#: ../../reference/expressions.rst:1339 +msgid "" +"These operators accept integers as arguments. They shift the first argument" +" to the left or right by the number of bits given by the second argument." +msgstr "这些运算符接受整数参数。 它们会将第一个参数左移或右移第二个参数所指定的比特位数。" + +#: ../../reference/expressions.rst:1342 +msgid "" +"This operation can be customized using the special :meth:`__lshift__` and " +":meth:`__rshift__` methods." +msgstr "此运算可使用特殊的 :meth:`__lshift__` 和 :meth:`__rshift__` 方法来自定义。" + +#: ../../reference/expressions.rst:1347 +msgid "" +"A right shift by *n* bits is defined as floor division by ``pow(2,n)``. A " +"left shift by *n* bits is defined as multiplication with ``pow(2,n)``." +msgstr "右移 *n* 位被定义为被 ``pow(2,n)`` 整除。 左移 *n* 位被定义为乘以 ``pow(2,n)``。" + +#: ../../reference/expressions.rst:1354 +msgid "Binary bitwise operations" +msgstr "二元位运算" + +#: ../../reference/expressions.rst:1358 +msgid "Each of the three bitwise operations has a different priority level:" +msgstr "三种位运算具有各不相同的优先级:" + +#: ../../reference/expressions.rst:1369 +msgid "" +"The ``&`` operator yields the bitwise AND of its arguments, which must be " +"integers or one of them must be a custom object overriding :meth:`__and__` " +"or :meth:`__rand__` special methods." +msgstr "" +"``&`` 运算符会对其参数执行按位 AND,参数必须都为整数或者其中之一必须为重载了 :meth:`__and__` 或 " +":meth:`__rand__` 特殊方法的自定义对象。" + +#: ../../reference/expressions.rst:1378 +msgid "" +"The ``^`` operator yields the bitwise XOR (exclusive OR) of its arguments, " +"which must be integers or one of them must be a custom object overriding " +":meth:`__xor__` or :meth:`__rxor__` special methods." +msgstr "" +"``^`` 运算符会对其参数执行按位 XOR (异 OR),参数必须都为整数或者其中之一必须为重载了 :meth:`__xor__` 或 " +":meth:`__rxor__` 特殊方法的自定义对象。" + +#: ../../reference/expressions.rst:1387 +msgid "" +"The ``|`` operator yields the bitwise (inclusive) OR of its arguments, which" +" must be integers or one of them must be a custom object overriding " +":meth:`__or__` or :meth:`__ror__` special methods." +msgstr "" +"``|`` 运算符会对其参数执行按位 (合并) OR,参数必须都为整数或者其中之一必须为重载了 :meth:`__or__` 或 " +":meth:`__ror__` 特殊方法的自定义对象。" + +#: ../../reference/expressions.rst:1395 +msgid "Comparisons" +msgstr "比较运算" + +#: ../../reference/expressions.rst:1407 +msgid "" +"Unlike C, all comparison operations in Python have the same priority, which " +"is lower than that of any arithmetic, shifting or bitwise operation. Also " +"unlike C, expressions like ``a < b < c`` have the interpretation that is " +"conventional in mathematics:" +msgstr "" +"与 C 不同,Python 中所有比较运算的优先级相同,低于任何算术、移位或位运算。 另一个与 C 不同之处在于 ``a < b < c`` " +"这样的表达式会按传统算术法则来解读:" + +#: ../../reference/expressions.rst:1417 +msgid "" +"Comparisons yield boolean values: ``True`` or ``False``. Custom :dfn:`rich " +"comparison methods` may return non-boolean values. In this case Python will " +"call :func:`bool` on such value in boolean contexts." +msgstr "" +"比较运算会产生布尔值: ``True`` 或 ``False``。 自定义的 :dfn:`富比较方法` 可能返回非布尔值。 在此情况下 Python " +"将在布尔运算上下文中对该值调用 :func:`bool`。" + +#: ../../reference/expressions.rst:1423 +msgid "" +"Comparisons can be chained arbitrarily, e.g., ``x < y <= z`` is equivalent " +"to ``x < y and y <= z``, except that ``y`` is evaluated only once (but in " +"both cases ``z`` is not evaluated at all when ``x < y`` is found to be " +"false)." +msgstr "" +"比较运算可以任意串连,例如 ``x < y <= z`` 等价于 ``x < y and y <= z``,除了 ``y`` " +"只被求值一次(但在两种写法下当 ``x < y`` 值为假时 ``z`` 都不会被求值)。" + +#: ../../reference/expressions.rst:1427 +msgid "" +"Formally, if *a*, *b*, *c*, ..., *y*, *z* are expressions and *op1*, *op2*, " +"..., *opN* are comparison operators, then ``a op1 b op2 c ... y opN z`` is " +"equivalent to ``a op1 b and b op2 c and ... y opN z``, except that each " +"expression is evaluated at most once." +msgstr "" +"正式的说法是这样:如果 *a*, *b*, *c*, ..., *y*, *z* 为表达式而 *op1*, *op2*, ..., *opN* " +"为比较运算符,则 ``a op1 b op2 c ... y opN z`` 就等价于 ``a op1 b and b op2 c and ... y " +"opN z``,不同点在于每个表达式最多只被求值一次。" + +#: ../../reference/expressions.rst:1432 +msgid "" +"Note that ``a op1 b op2 c`` doesn't imply any kind of comparison between *a*" +" and *c*, so that, e.g., ``x < y > z`` is perfectly legal (though perhaps " +"not pretty)." +msgstr "" +"请注意 ``a op1 b op2 c`` 不意味着在 *a* 和 *c* 之间进行任何比较,因此,如 ``x < y > z`` " +"这样的写法是完全合法的(虽然也许不太好看)。" + +#: ../../reference/expressions.rst:1437 +msgid "Value comparisons" +msgstr "值比较" + +#: ../../reference/expressions.rst:1439 +msgid "" +"The operators ``<``, ``>``, ``==``, ``>=``, ``<=``, and ``!=`` compare the " +"values of two objects. The objects do not need to have the same type." +msgstr "" +"运算符 ``<``, ``>``, ``==``, ``>=``, ``<=`` 和 ``!=`` 将比较两个对象的值。 两个对象不要求为相同类型。" + +#: ../../reference/expressions.rst:1442 +msgid "" +"Chapter :ref:`objects` states that objects have a value (in addition to type" +" and identity). The value of an object is a rather abstract notion in " +"Python: For example, there is no canonical access method for an object's " +"value. Also, there is no requirement that the value of an object should be " +"constructed in a particular way, e.g. comprised of all its data attributes. " +"Comparison operators implement a particular notion of what the value of an " +"object is. One can think of them as defining the value of an object " +"indirectly, by means of their comparison implementation." +msgstr "" +":ref:`objects` 一章已说明对象都有相应的值(还有类型和标识号)。 对象值在 Python " +"中是一个相当抽象的概念:例如,对象值并没有一个规范的访问方法。 而且,对象值并不要求具有特定的构建方式,例如由其全部数据属性组成等。 " +"比较运算符实现了一个特定的对象值概念。 人们可以认为这是通过实现对象比较间接地定义了对象值。" + +#: ../../reference/expressions.rst:1451 +msgid "" +"Because all types are (direct or indirect) subtypes of :class:`object`, they" +" inherit the default comparison behavior from :class:`object`. Types can " +"customize their comparison behavior by implementing :dfn:`rich comparison " +"methods` like :meth:`__lt__`, described in :ref:`customization`." +msgstr "" +"由于所有类型都是 :class:`object` 的(直接或间接)子类型,它们都从 :class:`object` 继承了默认的比较行为。 " +"类型可以通过实现 :dfn:`丰富比较方法` 例如 :meth:`__lt__` 来定义自己的比较行为,详情参见 " +":ref:`customization`。" + +#: ../../reference/expressions.rst:1457 +msgid "" +"The default behavior for equality comparison (``==`` and ``!=``) is based on" +" the identity of the objects. Hence, equality comparison of instances with " +"the same identity results in equality, and equality comparison of instances " +"with different identities results in inequality. A motivation for this " +"default behavior is the desire that all objects should be reflexive (i.e. " +"``x is y`` implies ``x == y``)." +msgstr "" +"默认的一致性比较 (``==`` 和 ``!=``) 是基于对象的标识号。 " +"因此,具有相同标识号的实例一致性比较结果为相等,具有不同标识号的实例一致性比较结果为不等。 规定这种默认行为的动机是希望所有对象都应该是自反射的 (即 " +"``x is y`` 就意味着 ``x == y``)。" + +#: ../../reference/expressions.rst:1464 +msgid "" +"A default order comparison (``<``, ``>``, ``<=``, and ``>=``) is not " +"provided; an attempt raises :exc:`TypeError`. A motivation for this default" +" behavior is the lack of a similar invariant as for equality." +msgstr "" +"次序比较 (``<``, ``>``, ``<=`` 和 ``>=``) 默认没有提供;如果尝试比较会引发 :exc:`TypeError`。 " +"规定这种默认行为的原因是缺少与一致性比较类似的固定值。" + +#: ../../reference/expressions.rst:1468 +msgid "" +"The behavior of the default equality comparison, that instances with " +"different identities are always unequal, may be in contrast to what types " +"will need that have a sensible definition of object value and value-based " +"equality. Such types will need to customize their comparison behavior, and " +"in fact, a number of built-in types have done that." +msgstr "" +"按照默认的一致性比较行为,具有不同标识号的实例总是不相等,这可能不适合某些对象值需要有合理定义并有基于值的一致性的类型。 " +"这样的类型需要定制自己的比较行为,实际上,许多内置类型都是这样做的。" + +#: ../../reference/expressions.rst:1474 +msgid "" +"The following list describes the comparison behavior of the most important " +"built-in types." +msgstr "以下列表描述了最主要内置类型的比较行为。" + +#: ../../reference/expressions.rst:1477 +msgid "" +"Numbers of built-in numeric types (:ref:`typesnumeric`) and of the standard " +"library types :class:`fractions.Fraction` and :class:`decimal.Decimal` can " +"be compared within and across their types, with the restriction that complex" +" numbers do not support order comparison. Within the limits of the types " +"involved, they compare mathematically (algorithmically) correct without loss" +" of precision." +msgstr "" +"内置数值类型 (:ref:`typesnumeric`) 以及标准库类型 :class:`fractions.Fraction` 和 " +":class:`decimal.Decimal` 可进行类型内部和跨类型的比较,例外限制是复数不支持次序比较。 " +"在类型相关的限制以内,它们会按数学(算法)规则正确进行比较且不会有精度损失。" + +#: ../../reference/expressions.rst:1484 +msgid "" +"The not-a-number values ``float('NaN')`` and ``decimal.Decimal('NaN')`` are " +"special. Any ordered comparison of a number to a not-a-number value is " +"false. A counter-intuitive implication is that not-a-number values are not " +"equal to themselves. For example, if ``x = float('NaN')``, ``3 < x``, ``x <" +" 3`` and ``x == x`` are all false, while ``x != x`` is true. This behavior " +"is compliant with IEEE 754." +msgstr "" +"非数字值 ``float('NaN')`` 和 ``decimal.Decimal('NaN')`` 属于特例。 " +"任何数字与非数字值的排序比较均返回假值。 还有一个反直觉的结果是非数字值不等于其自身。 举例来说,如果 ``x = float('NaN')`` 则 " +"``3 < x``, ``x < 3`` 和 ``x == x`` 均为假值,而 ``x != x`` 则为真值。 此行为是遵循 IEEE 754 " +"标准的。" + +#: ../../reference/expressions.rst:1491 +msgid "" +"``None`` and ``NotImplemented`` are singletons. :PEP:`8` advises that " +"comparisons for singletons should always be done with ``is`` or ``is not``, " +"never the equality operators." +msgstr "" +"``None`` 和 ``NotImplemented`` 都是单例对象。 :PEP:`8` 建议单例对象的比较应当总是通过 ``is`` 或 ``is" +" not`` 而不是等于运算符来进行。" + +#: ../../reference/expressions.rst:1495 +msgid "" +"Binary sequences (instances of :class:`bytes` or :class:`bytearray`) can be " +"compared within and across their types. They compare lexicographically " +"using the numeric values of their elements." +msgstr "" +"二进制码序列 (:class:`bytes` 或 :class:`bytearray` 的实例) 可进行类型内部和跨类型的比较。 " +"它们使用其元素的数字值按字典顺序进行比较。" + +#: ../../reference/expressions.rst:1499 +msgid "" +"Strings (instances of :class:`str`) compare lexicographically using the " +"numerical Unicode code points (the result of the built-in function " +":func:`ord`) of their characters. [#]_" +msgstr "" +"字符串 (:class:`str` 的实例) 使用其字符的 Unicode 码位数字值 (内置函数 :func:`ord` 的结果) " +"按字典顺序进行比较。 [#]_" + +#: ../../reference/expressions.rst:1503 +msgid "Strings and binary sequences cannot be directly compared." +msgstr "字符串和二进制码序列不能直接比较。" + +#: ../../reference/expressions.rst:1505 +msgid "" +"Sequences (instances of :class:`tuple`, :class:`list`, or :class:`range`) " +"can be compared only within each of their types, with the restriction that " +"ranges do not support order comparison. Equality comparison across these " +"types results in inequality, and ordering comparison across these types " +"raises :exc:`TypeError`." +msgstr "" +"序列 (:class:`tuple`, :class:`list` 或 :class:`range` 的实例) 只可进行类型内部的比较,range " +"还有一个限制是不支持次序比较。 以上对象的跨类型一致性比较结果将是不相等,跨类型次序比较将引发 :exc:`TypeError`。" + +#: ../../reference/expressions.rst:1511 +msgid "" +"Sequences compare lexicographically using comparison of corresponding " +"elements. The built-in containers typically assume identical objects are " +"equal to themselves. That lets them bypass equality tests for identical " +"objects to improve performance and to maintain their internal invariants." +msgstr "" +"序列比较是按字典序对相应元素进行逐个比较。 内置容器通常设定同一对象与其自身是相等的。 " +"这使得它们能跳过同一对象的相等性检测以提升运行效率并保持它们的内部不变性。" + +#: ../../reference/expressions.rst:1516 +msgid "" +"Lexicographical comparison between built-in collections works as follows:" +msgstr "内置多项集间的字典序比较规则如下:" + +#: ../../reference/expressions.rst:1518 +msgid "" +"For two collections to compare equal, they must be of the same type, have " +"the same length, and each pair of corresponding elements must compare equal " +"(for example, ``[1,2] == (1,2)`` is false because the type is not the same)." +msgstr "" +"两个多项集若要相等,它们必须为相同类型、相同长度,并且每对相应的元素都必须相等(例如,``[1,2] == (1,2)`` 为假值,因为类型不同)。" + +#: ../../reference/expressions.rst:1523 +msgid "" +"Collections that support order comparison are ordered the same as their " +"first unequal elements (for example, ``[1,2,x] <= [1,2,y]`` has the same " +"value as ``x <= y``). If a corresponding element does not exist, the " +"shorter collection is ordered first (for example, ``[1,2] < [1,2,3]`` is " +"true)." +msgstr "" +"对于支持次序比较的多项集,排序与其第一个不相等元素的排序相同(例如 ``[1,2,x] <= [1,2,y]`` 的值与 ``x <= y`` 相同)。" +" 如果对应元素不存在,较短的多项集排序在前(例如 ``[1,2] < [1,2,3]`` 为真值)。" + +#: ../../reference/expressions.rst:1529 +msgid "" +"Mappings (instances of :class:`dict`) compare equal if and only if they have" +" equal `(key, value)` pairs. Equality comparison of the keys and values " +"enforces reflexivity." +msgstr "" +"两个映射 (:class:`dict` 的实例) 若要相等,必须当且仅当它们具有相同的 `(键, 值)` 对。 键和值的一致性比较强制规定自反射性。" + +#: ../../reference/expressions.rst:1533 +msgid "" +"Order comparisons (``<``, ``>``, ``<=``, and ``>=``) raise :exc:`TypeError`." +msgstr "次序比较 (``<``, ``>``, ``<=`` 和 ``>=``) 将引发 :exc:`TypeError`。" + +#: ../../reference/expressions.rst:1535 +msgid "" +"Sets (instances of :class:`set` or :class:`frozenset`) can be compared " +"within and across their types." +msgstr "集合 (:class:`set` 或 :class:`frozenset` 的实例) 可进行类型内部和跨类型的比较。" + +#: ../../reference/expressions.rst:1538 +msgid "" +"They define order comparison operators to mean subset and superset tests. " +"Those relations do not define total orderings (for example, the two sets " +"``{1,2}`` and ``{2,3}`` are not equal, nor subsets of one another, nor " +"supersets of one another). Accordingly, sets are not appropriate arguments " +"for functions which depend on total ordering (for example, :func:`min`, " +":func:`max`, and :func:`sorted` produce undefined results given a list of " +"sets as inputs)." +msgstr "" +"它们将比较运算符定义为子集和超集检测。 这类关系没有定义完全排序(例如 ``{1,2}`` 和 ``{2,3}`` " +"两个集合不相等,即不为彼此的子集,也不为彼此的超集。 相应地,集合不适宜作为依赖于完全排序的函数的参数(例如如果给出一个集合列表作为 " +":func:`min`, :func:`max` 和 :func:`sorted` 的输入将产生未定义的结果)。" + +#: ../../reference/expressions.rst:1546 +msgid "Comparison of sets enforces reflexivity of its elements." +msgstr "集合的比较强制规定其元素的自反射性。" + +#: ../../reference/expressions.rst:1548 +msgid "" +"Most other built-in types have no comparison methods implemented, so they " +"inherit the default comparison behavior." +msgstr "大多数其他内置类型没有实现比较方法,因此它们会继承默认的比较行为。" + +#: ../../reference/expressions.rst:1551 +msgid "" +"User-defined classes that customize their comparison behavior should follow " +"some consistency rules, if possible:" +msgstr "在可能的情况下,用户定义类在定制其比较行为时应当遵循一些一致性规则:" + +#: ../../reference/expressions.rst:1554 +msgid "" +"Equality comparison should be reflexive. In other words, identical objects " +"should compare equal:" +msgstr "相等比较应该是自反射的。 换句话说,相同的对象比较时应该相等:" + +#: ../../reference/expressions.rst:1557 +msgid "``x is y`` implies ``x == y``" +msgstr "``x is y`` 意味着 ``x == y``" + +#: ../../reference/expressions.rst:1559 +msgid "" +"Comparison should be symmetric. In other words, the following expressions " +"should have the same result:" +msgstr "比较应该是对称的。 换句话说,下列表达式应该有相同的结果:" + +#: ../../reference/expressions.rst:1562 +msgid "``x == y`` and ``y == x``" +msgstr "``x == y`` 和 ``y == x``" + +#: ../../reference/expressions.rst:1564 +msgid "``x != y`` and ``y != x``" +msgstr "``x != y`` 和 ``y != x``" + +#: ../../reference/expressions.rst:1566 +msgid "``x < y`` and ``y > x``" +msgstr "``x < y`` 和 ``y > x``" + +#: ../../reference/expressions.rst:1568 +msgid "``x <= y`` and ``y >= x``" +msgstr "``x <= y`` 和 ``y >= x``" + +#: ../../reference/expressions.rst:1570 +msgid "" +"Comparison should be transitive. The following (non-exhaustive) examples " +"illustrate that:" +msgstr "比较应该是可传递的。 下列(简要的)例子显示了这一点:" + +#: ../../reference/expressions.rst:1573 +msgid "``x > y and y > z`` implies ``x > z``" +msgstr "``x > y and y > z`` 意味着 ``x > z``" + +#: ../../reference/expressions.rst:1575 +msgid "``x < y and y <= z`` implies ``x < z``" +msgstr "``x < y and y <= z`` 意味着 ``x < z``" + +#: ../../reference/expressions.rst:1577 +msgid "" +"Inverse comparison should result in the boolean negation. In other words, " +"the following expressions should have the same result:" +msgstr "反向比较应该导致布尔值取反。 换句话说,下列表达式应该有相同的结果:" + +#: ../../reference/expressions.rst:1580 +msgid "``x == y`` and ``not x != y``" +msgstr "``x == y`` 和 ``not x != y``" + +#: ../../reference/expressions.rst:1582 +msgid "``x < y`` and ``not x >= y`` (for total ordering)" +msgstr "``x < y`` 和 ``not x >= y`` (对于完全排序)" + +#: ../../reference/expressions.rst:1584 +msgid "``x > y`` and ``not x <= y`` (for total ordering)" +msgstr "``x > y`` 和 ``not x <= y`` (对于完全排序)" + +#: ../../reference/expressions.rst:1586 +msgid "" +"The last two expressions apply to totally ordered collections (e.g. to " +"sequences, but not to sets or mappings). See also the " +":func:`~functools.total_ordering` decorator." +msgstr "" +"最后两个表达式适用于完全排序的多项集(即序列而非集合或映射)。 另请参阅 :func:`~functools.total_ordering` 装饰器。" + +#: ../../reference/expressions.rst:1590 +msgid "" +"The :func:`hash` result should be consistent with equality. Objects that are" +" equal should either have the same hash value, or be marked as unhashable." +msgstr ":func:`hash` 的结果应该与是否相等一致。 相等的对象应该或者具有相同的哈希值,或者标记为不可哈希。" + +#: ../../reference/expressions.rst:1594 +msgid "" +"Python does not enforce these consistency rules. In fact, the not-a-number " +"values are an example for not following these rules." +msgstr "Python 并不强制要求这些一致性规则。 实际上,非数字值就是一个不遵循这些规则的例子。" + +#: ../../reference/expressions.rst:1603 +msgid "Membership test operations" +msgstr "成员检测运算" + +#: ../../reference/expressions.rst:1605 +msgid "" +"The operators :keyword:`in` and :keyword:`not in` test for membership. ``x " +"in s`` evaluates to ``True`` if *x* is a member of *s*, and ``False`` " +"otherwise. ``x not in s`` returns the negation of ``x in s``. All built-in " +"sequences and set types support this as well as dictionary, for which " +":keyword:`!in` tests whether the dictionary has a given key. For container " +"types such as list, tuple, set, frozenset, dict, or collections.deque, the " +"expression ``x in y`` is equivalent to ``any(x is e or x == e for e in y)``." +msgstr "" +"运算符 :keyword:`in` 和 :keyword:`not in` 用于成员检测。 如果 *x* 是 *s* 的成员则 ``x in s`` " +"求值为 ``True``,否则为 ``False``。 ``x not in s`` 返回 ``x in s`` 取反后的值。 " +"所有内置序列和集合类型以及字典都支持此运算,对于字典来说 :keyword:`!in` 检测其是否有给定的键。 对于 list, tuple, set," +" frozenset, dict 或 collections.deque 这样的容器类型,表达式 ``x in y`` 等价于 ``any(x is e" +" or x == e for e in y)``。" + +#: ../../reference/expressions.rst:1613 +msgid "" +"For the string and bytes types, ``x in y`` is ``True`` if and only if *x* is" +" a substring of *y*. An equivalent test is ``y.find(x) != -1``. Empty " +"strings are always considered to be a substring of any other string, so " +"``\"\" in \"abc\"`` will return ``True``." +msgstr "" +"对于字符串和字节串类型来说,当且仅当 *x* 是 *y* 的子串时 ``x in y`` 为 ``True``。 一个等价的检测是 " +"``y.find(x) != -1``。 空字符串总是被视为任何其他字符串的子串,因此 ``\"\" in \"abc\"`` 将返回 " +"``True``。" + +#: ../../reference/expressions.rst:1618 +msgid "" +"For user-defined classes which define the :meth:`__contains__` method, ``x " +"in y`` returns ``True`` if ``y.__contains__(x)`` returns a true value, and " +"``False`` otherwise." +msgstr "" +"对于定义了 :meth:`__contains__` 方法的用户自定义类来说,如果 ``y.__contains__(x)`` 返回真值则 ``x in" +" y`` 返回 ``True``,否则返回 ``False``。" + +#: ../../reference/expressions.rst:1622 +msgid "" +"For user-defined classes which do not define :meth:`__contains__` but do " +"define :meth:`__iter__`, ``x in y`` is ``True`` if some value ``z``, for " +"which the expression ``x is z or x == z`` is true, is produced while " +"iterating over ``y``. If an exception is raised during the iteration, it is " +"as if :keyword:`in` raised that exception." +msgstr "" +"对于未定义 :meth:`__contains__` 但定义了 :meth:`__iter__` 的用户自定义类来说,如果在对 ``y`` " +"进行迭代时产生了值 ``z`` 使得表达式 ``x is z or x == z`` 为真,则 ``x in y`` 为 ``True``。 " +"如果在迭代期间引发了异常,则等同于 :keyword:`in` 引发了该异常。" + +#: ../../reference/expressions.rst:1628 +msgid "" +"Lastly, the old-style iteration protocol is tried: if a class defines " +":meth:`__getitem__`, ``x in y`` is ``True`` if and only if there is a non-" +"negative integer index *i* such that ``x is y[i] or x == y[i]``, and no " +"lower integer index raises the :exc:`IndexError` exception. (If any other " +"exception is raised, it is as if :keyword:`in` raised that exception)." +msgstr "" +"最后将会尝试旧式的迭代协议:如果一个类定义了 :meth:`__getitem__`,则当且仅当存在非负整数索引号 *i* 使得 ``x is y[i]" +" or x == y[i]`` 并且没有更小的索引号引发 :exc:`IndexError` 异常时 ``x in y`` 为 ``True``。 " +"(如果引发了任何其他异常,则等同于 :keyword:`in` 引发了该异常)。" + +#: ../../reference/expressions.rst:1640 +msgid "" +"The operator :keyword:`not in` is defined to have the inverse truth value of" +" :keyword:`in`." +msgstr "运算符 :keyword:`not in` 被定义为具有与 :keyword:`in` 相反的逻辑值。" + +#: ../../reference/expressions.rst:1653 +msgid "Identity comparisons" +msgstr "标识号比较" + +#: ../../reference/expressions.rst:1655 +msgid "" +"The operators :keyword:`is` and :keyword:`is not` test for an object's " +"identity: ``x is y`` is true if and only if *x* and *y* are the same object." +" An Object's identity is determined using the :meth:`id` function. ``x is " +"not y`` yields the inverse truth value. [#]_" +msgstr "" +"运算符 :keyword:`is` 和 :keyword:`is not` 用于检测对象的标识号:当且仅当 *x* 和 *y* 是同一对象时 ``x " +"is y`` 为真。 一个对象的标识号可使用 :meth:`id` 函数来确定。 ``x is not y`` 会产生相反的逻辑值。 [#]_" + +#: ../../reference/expressions.rst:1667 +msgid "Boolean operations" +msgstr "布尔运算" + +#: ../../reference/expressions.rst:1678 +msgid "" +"In the context of Boolean operations, and also when expressions are used by " +"control flow statements, the following values are interpreted as false: " +"``False``, ``None``, numeric zero of all types, and empty strings and " +"containers (including strings, tuples, lists, dictionaries, sets and " +"frozensets). All other values are interpreted as true. User-defined " +"objects can customize their truth value by providing a :meth:`__bool__` " +"method." +msgstr "" +"在执行布尔运算的情况下,或是当表达式被用于流程控制语句时,以下值会被解析为假值: ``False``, ``None``, " +"所有类型的数字零,以及空字符串和空容器(包括字符串、元组、列表、字典、集合与冻结集合)。 所有其他值都会被解析为真值。 用户自定义对象可通过提供 " +":meth:`__bool__` 方法来定制其逻辑值。" + +#: ../../reference/expressions.rst:1687 +msgid "" +"The operator :keyword:`not` yields ``True`` if its argument is false, " +"``False`` otherwise." +msgstr "运算符 :keyword:`not` 将在其参数为假值时产生 ``True``,否则产生 ``False``。" + +#: ../../reference/expressions.rst:1692 +msgid "" +"The expression ``x and y`` first evaluates *x*; if *x* is false, its value " +"is returned; otherwise, *y* is evaluated and the resulting value is " +"returned." +msgstr "表达式 ``x and y`` 首先对 *x* 求值;如果 *x* 为假则返回该值;否则对 *y* 求值并返回其结果值。" + +#: ../../reference/expressions.rst:1697 +msgid "" +"The expression ``x or y`` first evaluates *x*; if *x* is true, its value is " +"returned; otherwise, *y* is evaluated and the resulting value is returned." +msgstr "表达式 ``x or y`` 首先对 *x* 求值;如果 *x* 为真则返回该值;否则对 *y* 求值并返回其结果值。" + +#: ../../reference/expressions.rst:1700 +msgid "" +"Note that neither :keyword:`and` nor :keyword:`or` restrict the value and " +"type they return to ``False`` and ``True``, but rather return the last " +"evaluated argument. This is sometimes useful, e.g., if ``s`` is a string " +"that should be replaced by a default value if it is empty, the expression " +"``s or 'foo'`` yields the desired value. Because :keyword:`not` has to " +"create a new value, it returns a boolean value regardless of the type of its" +" argument (for example, ``not 'foo'`` produces ``False`` rather than " +"``''``.)" +msgstr "" +"请注意 :keyword:`and` 和 :keyword:`or` 都不限制其返回的值和类型必须为 ``False`` 和 " +"``True``,而是返回最后被求值的操作数。 此行为是有必要的,例如假设 ``s`` 为一个当其为空时应被替换为某个默认值的字符串,表达式 ``s " +"or 'foo'`` 将产生希望的值。 由于 :keyword:`not` 必须创建一个新值,不论其参数为何种类型它都会返回一个布尔值(例如,``not" +" 'foo'`` 结果为 ``False`` 而非 ``''``。)" + +#: ../../reference/expressions.rst:1710 +msgid "Assignment expressions" +msgstr "赋值表达式" + +#: ../../reference/expressions.rst:1715 +msgid "" +"An assignment expression (sometimes also called a \"named expression\" or " +"\"walrus\") assigns an :token:`expression` to an :token:`identifier`, while " +"also returning the value of the :token:`expression`." +msgstr "" +"赋值表达式(有时又被叫做“命名表达式”或“海象表达式”)将一个 :token:`expression` 赋值给一个 " +":token:`identifier`,同时还返回 :token:`expression` 的值。" + +#: ../../reference/expressions.rst:1719 +msgid "One common use case is when handling matched regular expressions:" +msgstr "一个常见用例是在处理匹配的正则表达式的时候:" + +#: ../../reference/expressions.rst:1726 +msgid "Or, when processing a file stream in chunks:" +msgstr "或者是在处理分块的文件流的时候:" + +#: ../../reference/expressions.rst:1733 +msgid "See :pep:`572` for more details about assignment expressions." +msgstr "请参阅 :pep:`572` 了解有关赋值表达式的详情。" + +#: ../../reference/expressions.rst:1740 +msgid "Conditional expressions" +msgstr "条件表达式" + +#: ../../reference/expressions.rst:1752 +msgid "" +"Conditional expressions (sometimes called a \"ternary operator\") have the " +"lowest priority of all Python operations." +msgstr "条件表达式(有时称为“三目运算符”)在所有 Python 运算中具有最低的优先级。" + +#: ../../reference/expressions.rst:1755 +msgid "" +"The expression ``x if C else y`` first evaluates the condition, *C* rather " +"than *x*. If *C* is true, *x* is evaluated and its value is returned; " +"otherwise, *y* is evaluated and its value is returned." +msgstr "" +"表达式 ``x if C else y`` 首先是对条件 *C* 而非 *x* 求值。 如果 *C* 为真,*x* 将被求值并返回其值;否则将对 *y*" +" 求值并返回其值。" + +#: ../../reference/expressions.rst:1759 +msgid "See :pep:`308` for more details about conditional expressions." +msgstr "请参阅 :pep:`308` 了解有关条件表达式的详情。" + +#: ../../reference/expressions.rst:1766 +msgid "Lambdas" +msgstr "lambda 表达式" + +#: ../../reference/expressions.rst:1777 +msgid "" +"Lambda expressions (sometimes called lambda forms) are used to create " +"anonymous functions. The expression ``lambda parameters: expression`` yields" +" a function object. The unnamed object behaves like a function object " +"defined with:" +msgstr "" +"lambda 表达式(有时称为 lambda 构型)被用于创建匿名函数。 表达式 ``lambda parameters: expression`` " +"会产生一个函数对象 。 该未命名对象的行为类似于用以下方式定义的函数:" + +#: ../../reference/expressions.rst:1786 +msgid "" +"See section :ref:`function` for the syntax of parameter lists. Note that " +"functions created with lambda expressions cannot contain statements or " +"annotations." +msgstr "请参阅 :ref:`function` 了解有关参数列表的句法。 请注意通过 lambda 表达式创建的函数不能包含语句或标注。" + +#: ../../reference/expressions.rst:1794 +msgid "Expression lists" +msgstr "表达式列表" + +#: ../../reference/expressions.rst:1808 +msgid "" +"Except when part of a list or set display, an expression list containing at " +"least one comma yields a tuple. The length of the tuple is the number of " +"expressions in the list. The expressions are evaluated from left to right." +msgstr "除了作为列表或集合显示的一部分,包含至少一个逗号的表达式列表将生成一个元组。 元组的长度就是列表中表达式的数量。 表达式将从左至右被求值。" + +#: ../../reference/expressions.rst:1817 +msgid "" +"An asterisk ``*`` denotes :dfn:`iterable unpacking`. Its operand must be an" +" :term:`iterable`. The iterable is expanded into a sequence of items, which" +" are included in the new tuple, list, or set, at the site of the unpacking." +msgstr "" +"一个星号 ``*`` 表示 :dfn:`可迭代拆包`。 其操作数必须为一个 :term:`iterable`。 " +"该可迭代对象将被拆解为迭代项的序列,并被包含于在拆包位置上新建的元组、列表或集合之中。" + +#: ../../reference/expressions.rst:1822 +msgid "" +"Iterable unpacking in expression lists, originally proposed by :pep:`448`." +msgstr "表达式列表中的可迭代对象拆包,最初由 :pep:`448` 提出。" + +#: ../../reference/expressions.rst:1827 +msgid "" +"The trailing comma is required only to create a single tuple (a.k.a. a " +"*singleton*); it is optional in all other cases. A single expression " +"without a trailing comma doesn't create a tuple, but rather yields the value" +" of that expression. (To create an empty tuple, use an empty pair of " +"parentheses: ``()``.)" +msgstr "" +"末尾的逗号仅在创建单独元组 (或称 *单例*) 时需要;在所有其他情况下都是可选项。 没有末尾逗号的单独表达式不会创建一个元组,而是产生该表达式的值。 " +"(要创建一个空元组,应使用一对内容为空的圆括号: ``()``。)" + +#: ../../reference/expressions.rst:1837 +msgid "Evaluation order" +msgstr "求值顺序" + +#: ../../reference/expressions.rst:1841 +msgid "" +"Python evaluates expressions from left to right. Notice that while " +"evaluating an assignment, the right-hand side is evaluated before the left-" +"hand side." +msgstr "Python 按从左至右的顺序对表达式求值。 但注意在对赋值操作求值时,右侧会先于左侧被求值。" + +#: ../../reference/expressions.rst:1844 +msgid "" +"In the following lines, expressions will be evaluated in the arithmetic " +"order of their suffixes::" +msgstr "在以下几行中,表达式将按其后缀的算术优先顺序被求值。::" + +#: ../../reference/expressions.rst:1858 +msgid "Operator precedence" +msgstr "运算符优先级" + +#: ../../reference/expressions.rst:1863 +msgid "" +"The following table summarizes the operator precedence in Python, from " +"highest precedence (most binding) to lowest precedence (least binding). " +"Operators in the same box have the same precedence. Unless the syntax is " +"explicitly given, operators are binary. Operators in the same box group " +"left to right (except for exponentiation, which groups from right to left)." +msgstr "" +"下表对 Python 中运算符的优先顺序进行了总结,从最高优先级(最先绑定)到最低优先级(最后绑定)。 相同单元格内的运算符具有相同优先级。 " +"除非句法显式地给出,否则运算符均指二元运算。 相同单元格内的运算符从左至右分组(除了幂运算是从右至左分组)。" + +#: ../../reference/expressions.rst:1869 +msgid "" +"Note that comparisons, membership tests, and identity tests, all have the " +"same precedence and have a left-to-right chaining feature as described in " +"the :ref:`comparisons` section." +msgstr "请注意比较、成员检测和标识号检测均为相同优先级,并具有如 :ref:`comparisons` 一节所描述的从左至右串连特性。" + +#: ../../reference/expressions.rst:1875 +msgid "Operator" +msgstr "运算符" + +#: ../../reference/expressions.rst:1875 +msgid "Description" +msgstr "描述" + +#: ../../reference/expressions.rst:1877 +msgid "``(expressions...)``," +msgstr "``(expressions...)``," + +#: ../../reference/expressions.rst:1879 +msgid "``[expressions...]``, ``{key: value...}``, ``{expressions...}``" +msgstr "``[expressions...]``, ``{key: value...}``, ``{expressions...}``" + +#: ../../reference/expressions.rst:1877 +msgid "" +"Binding or parenthesized expression, list display, dictionary display, set " +"display" +msgstr "绑定或加圆括号的表达式,列表显示,字典显示,集合显示" + +#: ../../reference/expressions.rst:1883 +msgid "``x[index]``, ``x[index:index]``, ``x(arguments...)``, ``x.attribute``" +msgstr "" +"``x[index]``, ``x[index:index]``, ``x(arguments...)``, ``x.attribute``" + +#: ../../reference/expressions.rst:1883 +msgid "Subscription, slicing, call, attribute reference" +msgstr "抽取,切片,调用,属性引用" + +#: ../../reference/expressions.rst:1886 +msgid ":keyword:`await x `" +msgstr ":keyword:`await x `" + +#: ../../reference/expressions.rst:1888 +msgid "``**``" +msgstr "``**``" + +#: ../../reference/expressions.rst:1888 +msgid "Exponentiation [#]_" +msgstr "乘方 [#]_" + +#: ../../reference/expressions.rst:1890 +msgid "``+x``, ``-x``, ``~x``" +msgstr "``+x``, ``-x``, ``~x``" + +#: ../../reference/expressions.rst:1890 +msgid "Positive, negative, bitwise NOT" +msgstr "正,负,按位非 NOT" + +#: ../../reference/expressions.rst:1892 +msgid "``*``, ``@``, ``/``, ``//``, ``%``" +msgstr "``*``, ``@``, ``/``, ``//``, ``%``" + +#: ../../reference/expressions.rst:1892 +msgid "" +"Multiplication, matrix multiplication, division, floor division, remainder " +"[#]_" +msgstr "乘,矩阵乘,除,整除,取余 [#]_" + +#: ../../reference/expressions.rst:1896 +msgid "``+``, ``-``" +msgstr "``+``, ``-``" + +#: ../../reference/expressions.rst:1896 +msgid "Addition and subtraction" +msgstr "加和减" + +#: ../../reference/expressions.rst:1898 +msgid "``<<``, ``>>``" +msgstr "``<<``, ``>>``" + +#: ../../reference/expressions.rst:1898 +msgid "Shifts" +msgstr "移位" + +#: ../../reference/expressions.rst:1900 +msgid "``&``" +msgstr "``&``" + +#: ../../reference/expressions.rst:1900 +msgid "Bitwise AND" +msgstr "按位与 AND" + +#: ../../reference/expressions.rst:1902 +msgid "``^``" +msgstr "``^``" + +#: ../../reference/expressions.rst:1902 +msgid "Bitwise XOR" +msgstr "按位异或 XOR" + +#: ../../reference/expressions.rst:1904 +msgid "``|``" +msgstr "``|``" + +#: ../../reference/expressions.rst:1904 +msgid "Bitwise OR" +msgstr "按位或 OR" + +#: ../../reference/expressions.rst:1906 +msgid "" +":keyword:`in`, :keyword:`not in`, :keyword:`is`, :keyword:`is not`, ``<``, " +"``<=``, ``>``, ``>=``, ``!=``, ``==``" +msgstr "" +":keyword:`in`, :keyword:`not in`, :keyword:`is`, :keyword:`is not`, ``<``, " +"``<=``, ``>``, ``>=``, ``!=``, ``==``" + +#: ../../reference/expressions.rst:1906 +msgid "Comparisons, including membership tests and identity tests" +msgstr "比较运算,包括成员检测和标识号检测" + +#: ../../reference/expressions.rst:1910 +msgid ":keyword:`not x `" +msgstr ":keyword:`not x `" + +#: ../../reference/expressions.rst:1910 +msgid "Boolean NOT" +msgstr "布尔逻辑非 NOT" + +#: ../../reference/expressions.rst:1912 +msgid ":keyword:`and`" +msgstr ":keyword:`and`" + +#: ../../reference/expressions.rst:1912 +msgid "Boolean AND" +msgstr "布尔逻辑与 AND" + +#: ../../reference/expressions.rst:1914 +msgid ":keyword:`or`" +msgstr ":keyword:`or`" + +#: ../../reference/expressions.rst:1914 +msgid "Boolean OR" +msgstr "布尔逻辑或 OR" + +#: ../../reference/expressions.rst:1916 +msgid ":keyword:`if ` -- :keyword:`!else`" +msgstr ":keyword:`if ` -- :keyword:`!else`" + +#: ../../reference/expressions.rst:1916 +msgid "Conditional expression" +msgstr "条件表达式" + +#: ../../reference/expressions.rst:1918 +msgid ":keyword:`lambda`" +msgstr ":keyword:`lambda`" + +#: ../../reference/expressions.rst:1918 +msgid "Lambda expression" +msgstr "lambda 表达式" + +#: ../../reference/expressions.rst:1920 +msgid "``:=``" +msgstr "``:=``" + +#: ../../reference/expressions.rst:1920 +msgid "Assignment expression" +msgstr "赋值表达式" + +#: ../../reference/expressions.rst:1925 +msgid "Footnotes" +msgstr "备注" + +#: ../../reference/expressions.rst:1926 +msgid "" +"While ``abs(x%y) < abs(y)`` is true mathematically, for floats it may not be" +" true numerically due to roundoff. For example, and assuming a platform on " +"which a Python float is an IEEE 754 double-precision number, in order that " +"``-1e-100 % 1e100`` have the same sign as ``1e100``, the computed result is " +"``-1e-100 + 1e100``, which is numerically exactly equal to ``1e100``. The " +"function :func:`math.fmod` returns a result whose sign matches the sign of " +"the first argument instead, and so returns ``-1e-100`` in this case. Which " +"approach is more appropriate depends on the application." +msgstr "" +"虽然 ``abs(x%y) < abs(y)`` 在数学中必为真,但对于浮点数而言,由于舍入的存在,其在数值上未必为真。 例如,假设在某个平台上的 " +"Python 浮点数为一个 IEEE 754 双精度数值,为了使 ``-1e-100 % 1e100`` 具有与 ``1e100`` " +"相同的正负性,计算结果将是 ``-1e-100 + 1e100``,这在数值上正好等于 ``1e100``。 函数 :func:`math.fmod` " +"返回的结果则会具有与第一个参数相同的正负性,因此在这种情况下将返回 ``-1e-100``。 何种方式更适宜取决于具体的应用。" + +#: ../../reference/expressions.rst:1935 +msgid "" +"If x is very close to an exact integer multiple of y, it's possible for " +"``x//y`` to be one larger than ``(x-x%y)//y`` due to rounding. In such " +"cases, Python returns the latter result, in order to preserve that " +"``divmod(x,y)[0] * y + x % y`` be very close to ``x``." +msgstr "" +"如果 x 恰好非常接近于 y 的整数倍,则由于舍入的存在 ``x//y`` 可能会比 ``(x-x%y)//y`` 大。 在这种情况下,Python " +"会返回后一个结果,以便保持令 ``divmod(x,y)[0] * y + x % y`` 尽量接近 ``x``." + +#: ../../reference/expressions.rst:1940 +msgid "" +"The Unicode standard distinguishes between :dfn:`code points` (e.g. U+0041) " +"and :dfn:`abstract characters` (e.g. \"LATIN CAPITAL LETTER A\"). While most" +" abstract characters in Unicode are only represented using one code point, " +"there is a number of abstract characters that can in addition be represented" +" using a sequence of more than one code point. For example, the abstract " +"character \"LATIN CAPITAL LETTER C WITH CEDILLA\" can be represented as a " +"single :dfn:`precomposed character` at code position U+00C7, or as a " +"sequence of a :dfn:`base character` at code position U+0043 (LATIN CAPITAL " +"LETTER C), followed by a :dfn:`combining character` at code position U+0327 " +"(COMBINING CEDILLA)." +msgstr "" +"Unicode 标准明确区分 :dfn:`码位` (例如 U+0041) 和 :dfn:`抽象字符` (例如 \"大写拉丁字母 A\")。 虽然 " +"Unicode 中的大多数抽象字符都只用一个码位来代表,但也存在一些抽象字符可使用由多个码位组成的序列来表示。 例如,抽象字符 " +"\"带有下加符的大写拉丁字母 C\" 可以用 U+00C7 码位上的单个 :dfn:`预设字符` 来表示,也可以用一个 U+0043 码位上的 " +":dfn:`基础字符` (大写拉丁字母 C) 加上一个 U+0327 码位上的 :dfn:`组合字符` (组合下加符) 组成的序列来表示。" + +#: ../../reference/expressions.rst:1951 +msgid "" +"The comparison operators on strings compare at the level of Unicode code " +"points. This may be counter-intuitive to humans. For example, ``\"\\u00C7\"" +" == \"\\u0043\\u0327\"`` is ``False``, even though both strings represent " +"the same abstract character \"LATIN CAPITAL LETTER C WITH CEDILLA\"." +msgstr "" +"对于字符串,比较运算符会按 Unicode 码位级别进行比较。 这可能会违反人类的直觉。 例如,``\"\\u00C7\" == " +"\"\\u0043\\u0327\"`` 为 ``False``,虽然两个字符串都代表同一个抽象字符 \"带有下加符的大写拉丁字母 C\"。" + +#: ../../reference/expressions.rst:1956 +msgid "" +"To compare strings at the level of abstract characters (that is, in a way " +"intuitive to humans), use :func:`unicodedata.normalize`." +msgstr "要按抽象字符级别(即对人类来说更直观的方式)对字符串进行比较,应使用 :func:`unicodedata.normalize`。" + +#: ../../reference/expressions.rst:1959 +msgid "" +"Due to automatic garbage-collection, free lists, and the dynamic nature of " +"descriptors, you may notice seemingly unusual behaviour in certain uses of " +"the :keyword:`is` operator, like those involving comparisons between " +"instance methods, or constants. Check their documentation for more info." +msgstr "" +"由于存在自动垃圾收集、空闲列表以及描述器的动态特性,你可能会注意到在特定情况下使用 :keyword:`is` " +"运算符会出现看似不正常的行为,例如涉及到实例方法或常量之间的比较时就是如此。 更多信息请查看有关它们的文档。" + +#: ../../reference/expressions.rst:1964 +msgid "" +"The power operator ``**`` binds less tightly than an arithmetic or bitwise " +"unary operator on its right, that is, ``2**-1`` is ``0.5``." +msgstr "幂运算符 ``**`` 绑定的紧密程度低于在其右侧的算术或按位一元运算符,也就是说 ``2**-1`` 为 ``0.5``。" + +#: ../../reference/expressions.rst:1967 +msgid "" +"The ``%`` operator is also used for string formatting; the same precedence " +"applies." +msgstr "``%`` 运算符也被用于字符串格式化;在此场合下会使用同样的优先级。" diff --git a/reference/grammar.po b/reference/grammar.po new file mode 100644 index 000000000..b6ba296f2 --- /dev/null +++ b/reference/grammar.po @@ -0,0 +1,53 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) 2001-2022, Python Software Foundation +# This file is distributed under the same license as the Python package. +# FIRST AUTHOR , YEAR. +# +# Translators: +# QR Wang , 2018 +# Freesand Leo , 2020 +# +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: Python 3.9\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2022-11-04 14:34+0000\n" +"PO-Revision-Date: 2017-02-16 23:38+0000\n" +"Last-Translator: Freesand Leo , 2020\n" +"Language-Team: Chinese (China) (https://www.transifex.com/python-doc/teams/5390/zh_CN/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: zh_CN\n" +"Plural-Forms: nplurals=1; plural=0;\n" + +#: ../../reference/grammar.rst:2 +msgid "Full Grammar specification" +msgstr "完整的语法规范" + +#: ../../reference/grammar.rst:4 +msgid "" +"This is the full Python grammar, derived directly from the grammar used to " +"generate the CPython parser (see :source:`Grammar/python.gram`). The version" +" here omits details related to code generation and error recovery." +msgstr "" +"这是完整的 Python 语法规范,直接提取自用于生成 CPython 解析器的语法 (参见 " +":source:`Grammar/python.gram`)。 这里显示的版本省略了有关代码生成和错误恢复的细节。" + +#: ../../reference/grammar.rst:9 +msgid "" +"The notation is a mixture of `EBNF " +"`_ and `PEG" +" `_. In " +"particular, ``&`` followed by a symbol, token or parenthesized group " +"indicates a positive lookahead (i.e., is required to match but not " +"consumed), while ``!`` indicates a negative lookahead (i.e., is required " +"_not_ to match). We use the ``|`` separator to mean PEG's \"ordered " +"choice\" (written as ``/`` in traditional PEG grammars)." +msgstr "" +"所用的标记法是 `EBNF " +"`_ 和 `PEG " +"`_ 的混合体。 特别地,``&``" +" 后跟一个符号、形符或带括号的分组来表示正向前视(即要求执行匹配但不会被消耗掉),而 ``!`` 表示负向前视(即要求 _不_ 执行匹配)。 我们使用 " +"``|`` 分隔符来表示 PEG 的“有序选择” (在传统 PEG 语法中则写为 ``/``)。" diff --git a/reference/import.po b/reference/import.po new file mode 100644 index 000000000..428458164 --- /dev/null +++ b/reference/import.po @@ -0,0 +1,1710 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) 2001-2025, Python Software Foundation +# This file is distributed under the same license as the Python package. +# FIRST AUTHOR , YEAR. +# +# Translators: +# eric R , 2018 +# Freesand Leo , 2022 +# Rafael Fontenelle , 2025 +# +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: Python 3.9\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2025-02-07 16:40+0000\n" +"PO-Revision-Date: 2017-02-16 23:38+0000\n" +"Last-Translator: Rafael Fontenelle , 2025\n" +"Language-Team: Chinese (China) (https://app.transifex.com/python-doc/teams/5390/zh_CN/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: zh_CN\n" +"Plural-Forms: nplurals=1; plural=0;\n" + +#: ../../reference/import.rst:6 +msgid "The import system" +msgstr "导入系统" + +#: ../../reference/import.rst:10 +msgid "" +"Python code in one :term:`module` gains access to the code in another module" +" by the process of :term:`importing` it. The :keyword:`import` statement is" +" the most common way of invoking the import machinery, but it is not the " +"only way. Functions such as :func:`importlib.import_module` and built-in " +":func:`__import__` can also be used to invoke the import machinery." +msgstr "" +"一个 :term:`module` 内的 Python 代码通过 :term:`importing` 操作就能够访问另一个模块内的代码。 " +":keyword:`import` 语句是唤起导入机制的最常用方式,但不是唯一的方式。 :func:`importlib.import_module` " +"以及内置的 :func:`__import__` 等函数也可以被用来唤起导入机制。" + +#: ../../reference/import.rst:16 +msgid "" +"The :keyword:`import` statement combines two operations; it searches for the" +" named module, then it binds the results of that search to a name in the " +"local scope. The search operation of the :keyword:`!import` statement is " +"defined as a call to the :func:`__import__` function, with the appropriate " +"arguments. The return value of :func:`__import__` is used to perform the " +"name binding operation of the :keyword:`!import` statement. See the " +":keyword:`!import` statement for the exact details of that name binding " +"operation." +msgstr "" +":keyword:`import` 语句结合了两个操作;它先搜索指定名称的模块,然后将搜索结果绑定到当前作用域中的名称。 " +":keyword:`!import` 语句的搜索操作被定义为对 :func:`__import__` 函数的调用并带有适当的参数。 " +":func:`__import__` 的返回值会被用于执行 :keyword:`!import` 语句的名称绑定操作。 请参阅 " +":keyword:`!import` 语句了解名称绑定操作的更多细节。" + +#: ../../reference/import.rst:25 +msgid "" +"A direct call to :func:`__import__` performs only the module search and, if " +"found, the module creation operation. While certain side-effects may occur," +" such as the importing of parent packages, and the updating of various " +"caches (including :data:`sys.modules`), only the :keyword:`import` statement" +" performs a name binding operation." +msgstr "" +"对 :func:`__import__` 的直接调用将仅执行模块搜索以及在找到时的模块创建操作。 不过也可能产生某些副作用,例如导入父包和更新各种缓存 " +"(包括 :data:`sys.modules`),只有 :keyword:`import` 语句会执行名称绑定操作。" + +#: ../../reference/import.rst:31 +msgid "" +"When an :keyword:`import` statement is executed, the standard builtin " +":func:`__import__` function is called. Other mechanisms for invoking the " +"import system (such as :func:`importlib.import_module`) may choose to bypass" +" :func:`__import__` and use their own solutions to implement import " +"semantics." +msgstr "" +"当 :keyword:`import` 语句被执行时,标准的内置 :func:`__import__` 函数会被调用。 其他唤起导入系统的机制 (例如 " +":func:`importlib.import_module`) 可能会选择绕过 :func:`__import__` " +"并使用它们自己的解决方案来实现导入机制。" + +#: ../../reference/import.rst:36 +msgid "" +"When a module is first imported, Python searches for the module and if " +"found, it creates a module object [#fnmo]_, initializing it. If the named " +"module cannot be found, a :exc:`ModuleNotFoundError` is raised. Python " +"implements various strategies to search for the named module when the import" +" machinery is invoked. These strategies can be modified and extended by " +"using various hooks described in the sections below." +msgstr "" +"当一个模块首次被导入时,Python 会搜索该模块,如果找到就创建一个 module 对象 [#fnmo]_ 并初始化它。 " +"如果指定名称的模块未找到,则会引发 :exc:`ModuleNotFoundError`。 当唤起导入机制时,Python " +"会实现多种策略来搜索指定名称的模块。 这些策略可以通过使用使用下文所描述的多种钩子来加以修改和扩展。" + +#: ../../reference/import.rst:43 +msgid "" +"The import system has been updated to fully implement the second phase of " +":pep:`302`. There is no longer any implicit import machinery - the full " +"import system is exposed through :data:`sys.meta_path`. In addition, native " +"namespace package support has been implemented (see :pep:`420`)." +msgstr "" +"导入系统已被更新以完全实现 :pep:`302` 中的第二阶段要求。 不会再有任何隐式的导入机制 —— 整个导入系统都通过 " +":data:`sys.meta_path` 暴露出来。 此外,对原生命名空间包的支持也已被实现 (参见 :pep:`420`)。" + +#: ../../reference/import.rst:51 +msgid ":mod:`importlib`" +msgstr ":mod:`importlib`" + +#: ../../reference/import.rst:53 +msgid "" +"The :mod:`importlib` module provides a rich API for interacting with the " +"import system. For example :func:`importlib.import_module` provides a " +"recommended, simpler API than built-in :func:`__import__` for invoking the " +"import machinery. Refer to the :mod:`importlib` library documentation for " +"additional detail." +msgstr "" +":mod:`importlib` 模块提供了一个丰富的 API 用来与导入系统进行交互。 例如 " +":func:`importlib.import_module` 提供了相比内置的 :func:`__import__` 更推荐、更简单的 API " +"用来唤起导入机制。 更多细节请参看 :mod:`importlib` 库文档。" + +#: ../../reference/import.rst:62 +msgid "Packages" +msgstr "包" + +#: ../../reference/import.rst:67 +msgid "" +"Python has only one type of module object, and all modules are of this type," +" regardless of whether the module is implemented in Python, C, or something " +"else. To help organize modules and provide a naming hierarchy, Python has a" +" concept of :term:`packages `." +msgstr "" +"Python 只有一种模块对象类型,所有模块都属于该类型,无论模块是用 Python、C 还是别的语言实现。 " +"为了帮助组织模块并提供名称层次结构,Python 还引入了 :term:`包 ` 的概念。" + +#: ../../reference/import.rst:72 +msgid "" +"You can think of packages as the directories on a file system and modules as" +" files within directories, but don't take this analogy too literally since " +"packages and modules need not originate from the file system. For the " +"purposes of this documentation, we'll use this convenient analogy of " +"directories and files. Like file system directories, packages are organized" +" hierarchically, and packages may themselves contain subpackages, as well as" +" regular modules." +msgstr "" +"你可以把包看成是文件系统中的目录,并把模块看成是目录中的文件,但请不要对这个类比做过于字面的理解,因为包和模块不是必须来自于文件系统。 " +"为了方便理解本文档,我们将继续使用这种目录和文件的类比。 与文件系统一样,包通过层次结构进行组织,在包之内除了一般的模块,还可以有子包。" + +#: ../../reference/import.rst:80 +msgid "" +"It's important to keep in mind that all packages are modules, but not all " +"modules are packages. Or put another way, packages are just a special kind " +"of module. Specifically, any module that contains a ``__path__`` attribute " +"is considered a package." +msgstr "" +"要注意的一个重点概念是所有包都是模块,但并非所有模块都是包。 或者换句话说,包只是一种特殊的模块。 特别地,任何具有 ``__path__`` " +"属性的模块都会被当作是包。" + +#: ../../reference/import.rst:85 +msgid "" +"All modules have a name. Subpackage names are separated from their parent " +"package name by a dot, akin to Python's standard attribute access syntax. " +"Thus you might have a package called :mod:`email`, which in turn has a " +"subpackage called :mod:`email.mime` and a module within that subpackage " +"called :mod:`email.mime.text`." +msgstr "" +"所有模块都有自己的名字。 子包名与其父包名会以点号分隔,与 Python 的标准属性访问语法一致。 因此你可能会有一个名为 :mod:`email` " +"的包,这个包中又有一个名为 :mod:`email.mime` 的子包以及该子包中的名为 :mod:`email.mime.text` 的子包。" + +#: ../../reference/import.rst:93 +msgid "Regular packages" +msgstr "常规包" + +#: ../../reference/import.rst:98 +msgid "" +"Python defines two types of packages, :term:`regular packages ` and :term:`namespace packages `. Regular " +"packages are traditional packages as they existed in Python 3.2 and earlier." +" A regular package is typically implemented as a directory containing an " +"``__init__.py`` file. When a regular package is imported, this " +"``__init__.py`` file is implicitly executed, and the objects it defines are " +"bound to names in the package's namespace. The ``__init__.py`` file can " +"contain the same Python code that any other module can contain, and Python " +"will add some additional attributes to the module when it is imported." +msgstr "" +"Python 定义了两种类型的包,:term:`常规包 ` 和 :term:`命名空间包 `。 常规包是传统的包类型,它们在 Python 3.2 及之前就已存在。 常规包通常以一个包含 ``__init__.py`` " +"文件的目录形式实现。 当一个常规包被导入时,这个 ``__init__.py`` " +"文件会隐式地被执行,它所定义的对象会被绑定到该包命名空间中的名称。``__init__.py`` 文件可以包含与任何其他模块中所包含的 Python " +"代码相似的代码,Python 将在模块被导入时为其添加额外的属性。" + +#: ../../reference/import.rst:108 +msgid "" +"For example, the following file system layout defines a top level ``parent``" +" package with three subpackages::" +msgstr "例如,以下文件系统布局定义了一个最高层级的 ``parent`` 包和三个子包::" + +#: ../../reference/import.rst:120 +msgid "" +"Importing ``parent.one`` will implicitly execute ``parent/__init__.py`` and " +"``parent/one/__init__.py``. Subsequent imports of ``parent.two`` or " +"``parent.three`` will execute ``parent/two/__init__.py`` and " +"``parent/three/__init__.py`` respectively." +msgstr "" +"导入 ``parent.one`` 将隐式地执行 ``parent/__init__.py`` 和 " +"``parent/one/__init__.py``。 后续导入 ``parent.two`` 或 ``parent.three`` 则将分别执行 " +"``parent/two/__init__.py`` 和 ``parent/three/__init__.py``。" + +#: ../../reference/import.rst:127 +msgid "Namespace packages" +msgstr "命名空间包" + +#: ../../reference/import.rst:133 +msgid "" +"A namespace package is a composite of various :term:`portions `, " +"where each portion contributes a subpackage to the parent package. Portions" +" may reside in different locations on the file system. Portions may also be" +" found in zip files, on the network, or anywhere else that Python searches " +"during import. Namespace packages may or may not correspond directly to " +"objects on the file system; they may be virtual modules that have no " +"concrete representation." +msgstr "" +"命名空间包是由多个 :term:`部分 ` 构成的,每个部分为父包增加一个子包。 各个部分可能处于文件系统的不同位置。 部分也可能处于" +" zip 文件中、网络上,或者 Python 在导入期间可以搜索的其他地方。 " +"命名空间包并不一定会直接对应到文件系统中的对象;它们有可能是无实体表示的虚拟模块。" + +#: ../../reference/import.rst:141 +msgid "" +"Namespace packages do not use an ordinary list for their ``__path__`` " +"attribute. They instead use a custom iterable type which will automatically " +"perform a new search for package portions on the next import attempt within " +"that package if the path of their parent package (or :data:`sys.path` for a " +"top level package) changes." +msgstr "" +"命名空间包的 ``__path__`` 属性不使用普通的列表。 而是使用定制的可迭代类型,如果其父包的路径 (或者最高层级包的 " +":data:`sys.path`) 发生改变,这种对象会在该包内的下一次导入尝试时自动执行新的对包部分的搜索。" + +#: ../../reference/import.rst:147 +msgid "" +"With namespace packages, there is no ``parent/__init__.py`` file. In fact, " +"there may be multiple ``parent`` directories found during import search, " +"where each one is provided by a different portion. Thus ``parent/one`` may " +"not be physically located next to ``parent/two``. In this case, Python will" +" create a namespace package for the top-level ``parent`` package whenever it" +" or one of its subpackages is imported." +msgstr "" +"命名空间包没有 ``parent/__init__.py`` 文件。 实际上,在导入搜索期间可能找到多个 ``parent`` " +"目录,每个都由不同的部分所提供。 因此 ``parent/one`` 的物理位置不一定与 ``parent/two`` 相邻。 " +"在这种情况下,Python 将为顶级的 ``parent`` 包创建一个命名空间包,无论是它本身还是它的某个子包被导入。" + +#: ../../reference/import.rst:154 +msgid "See also :pep:`420` for the namespace package specification." +msgstr "另请参阅 :pep:`420` 了解对命名空间包的规格描述。" + +#: ../../reference/import.rst:158 +msgid "Searching" +msgstr "搜索" + +#: ../../reference/import.rst:160 +msgid "" +"To begin the search, Python needs the :term:`fully qualified ` name of the module (or package, but for the purposes of this " +"discussion, the difference is immaterial) being imported. This name may " +"come from various arguments to the :keyword:`import` statement, or from the " +"parameters to the :func:`importlib.import_module` or :func:`__import__` " +"functions." +msgstr "" +"为了开始搜索,Python 需要被导入模块(或者包,对于当前讨论来说两者没有差别)的完整 :term:`限定名称 `。 " +"此名称可以来自 :keyword:`import` 语句所带的各种参数,或者来自传给 :func:`importlib.import_module` 或" +" :func:`__import__` 函数的形参。" + +#: ../../reference/import.rst:166 +msgid "" +"This name will be used in various phases of the import search, and it may be" +" the dotted path to a submodule, e.g. ``foo.bar.baz``. In this case, Python" +" first tries to import ``foo``, then ``foo.bar``, and finally " +"``foo.bar.baz``. If any of the intermediate imports fail, a " +":exc:`ModuleNotFoundError` is raised." +msgstr "" +"此名称会在导入搜索的各个阶段被使用,它也可以是指向一个子模块的带点号路径,例如 ``foo.bar.baz``。 在这种情况下,Python " +"会先尝试导入 ``foo``,然后是 ``foo.bar``,最后是 ``foo.bar.baz``。 如果这些导入中的任何一个失败,都会引发 " +":exc:`ModuleNotFoundError`。" + +#: ../../reference/import.rst:173 +msgid "The module cache" +msgstr "模块缓存" + +#: ../../reference/import.rst:178 +msgid "" +"The first place checked during import search is :data:`sys.modules`. This " +"mapping serves as a cache of all modules that have been previously imported," +" including the intermediate paths. So if ``foo.bar.baz`` was previously " +"imported, :data:`sys.modules` will contain entries for ``foo``, ``foo.bar``," +" and ``foo.bar.baz``. Each key will have as its value the corresponding " +"module object." +msgstr "" +"在导入搜索期间首先会被检查的地方是 :data:`sys.modules`。 这个映射起到缓存之前导入的所有模块的作用(包括其中间路径)。 " +"因此如果之前导入过 ``foo.bar.baz``,则 :data:`sys.modules` 将包含 ``foo``, ``foo.bar`` 和 " +"``foo.bar.baz`` 条目。 每个键的值就是相应的模块对象。" + +#: ../../reference/import.rst:185 +msgid "" +"During import, the module name is looked up in :data:`sys.modules` and if " +"present, the associated value is the module satisfying the import, and the " +"process completes. However, if the value is ``None``, then a " +":exc:`ModuleNotFoundError` is raised. If the module name is missing, Python" +" will continue searching for the module." +msgstr "" +"在导入期间,会在 :data:`sys.modules` 查找模块名称,如存在则其关联的值就是需要导入的模块,导入过程完成。 然而,如果值为 " +"``None``,则会引发 :exc:`ModuleNotFoundError`。 如果找不到指定模块名称,Python 将继续搜索该模块。" + +#: ../../reference/import.rst:191 +msgid "" +":data:`sys.modules` is writable. Deleting a key may not destroy the " +"associated module (as other modules may hold references to it), but it will " +"invalidate the cache entry for the named module, causing Python to search " +"anew for the named module upon its next import. The key can also be assigned" +" to ``None``, forcing the next import of the module to result in a " +":exc:`ModuleNotFoundError`." +msgstr "" +":data:`sys.modules` 是可写的。删除键可能不会破坏关联的模块(因为其他模块可能会保留对它的引用),但它会使命名模块的缓存条目无效,导致" +" Python 在下次导入时重新搜索命名模块。键也可以赋值为 ``None`` ,强制下一次导入模块导致 " +":exc:`ModuleNotFoundError` 。" + +#: ../../reference/import.rst:198 +msgid "" +"Beware though, as if you keep a reference to the module object, invalidate " +"its cache entry in :data:`sys.modules`, and then re-import the named module," +" the two module objects will *not* be the same. By contrast, " +":func:`importlib.reload` will reuse the *same* module object, and simply " +"reinitialise the module contents by rerunning the module's code." +msgstr "" +"但是要小心,因为如果你还保有对某个模块对象的引用,同时停用其在 :data:`sys.modules` " +"中的缓存条目,然后又再次导入该名称的模块,则前后两个模块对象将 *不是* 同一个。 相反地,:func:`importlib.reload` 将重用 " +"*同一个* 模块对象,并简单地通过重新运行模块的代码来重新初始化模块内容。" + +#: ../../reference/import.rst:208 +msgid "Finders and loaders" +msgstr "查找器和加载器" + +#: ../../reference/import.rst:215 +msgid "" +"If the named module is not found in :data:`sys.modules`, then Python's " +"import protocol is invoked to find and load the module. This protocol " +"consists of two conceptual objects, :term:`finders ` and " +":term:`loaders `. A finder's job is to determine whether it can find" +" the named module using whatever strategy it knows about. Objects that " +"implement both of these interfaces are referred to as :term:`importers " +"` - they return themselves when they find that they can load the " +"requested module." +msgstr "" +"如果指定名称的模块在 :data:`sys.modules` 找不到,则将唤起 Python 的导入协议以查找和加载该模块。 " +"此协议由两个概念性模块构成,即 :term:`查找器 ` 和 :term:`加载器 `。 " +"查找器的任务是确定是否能使用其所知的策略找到该名称的模块。 同时实现这两种接口的对象称为 :term:`导入器 ` —— " +"它们在确定能加载所需的模块时会返回其自身。" + +#: ../../reference/import.rst:223 +msgid "" +"Python includes a number of default finders and importers. The first one " +"knows how to locate built-in modules, and the second knows how to locate " +"frozen modules. A third default finder searches an :term:`import path` for " +"modules. The :term:`import path` is a list of locations that may name file " +"system paths or zip files. It can also be extended to search for any " +"locatable resource, such as those identified by URLs." +msgstr "" +"Python 包含了多个默认查找器和导入器。 第一个知道如何定位内置模块,第二个知道如何定位冻结模块。 第三个默认查找器会在 :term:`import" +" path` 中搜索模块。 :term:`import path` 是一个由文件系统路径或 zip 文件组成的位置列表。 " +"它还可以扩展为搜索任意可定位资源,例如由 URL 指定的资源。" + +#: ../../reference/import.rst:230 +msgid "" +"The import machinery is extensible, so new finders can be added to extend " +"the range and scope of module searching." +msgstr "导入机制是可扩展的,因此可以加入新的查找器以扩展模块搜索的范围和作用域。" + +#: ../../reference/import.rst:233 +msgid "" +"Finders do not actually load modules. If they can find the named module, " +"they return a :dfn:`module spec`, an encapsulation of the module's import-" +"related information, which the import machinery then uses when loading the " +"module." +msgstr "" +"查找器并不真正加载模块。 如果它们能找到指定名称的模块,会返回一个 " +":dfn:`模块规格说明`,这是对模块导入相关信息的封装,供后续导入机制用于在加载模块时使用。" + +#: ../../reference/import.rst:237 +msgid "" +"The following sections describe the protocol for finders and loaders in more" +" detail, including how you can create and register new ones to extend the " +"import machinery." +msgstr "以下各节描述了有关查找器和加载器协议的更多细节,包括你应该如何创建并注册新的此类对象来扩展导入机制。" + +#: ../../reference/import.rst:241 +msgid "" +"In previous versions of Python, finders returned :term:`loaders ` " +"directly, whereas now they return module specs which *contain* loaders. " +"Loaders are still used during import but have fewer responsibilities." +msgstr "" +"在之前的 Python 版本中,查找器会直接返回 :term:`加载器 `,现在它们则返回模块规格说明,其中 *包含* 加载器。 " +"加载器仍然在导入期间被使用,但负担的任务有所减少。" + +#: ../../reference/import.rst:247 +msgid "Import hooks" +msgstr "导入钩子" + +#: ../../reference/import.rst:257 +msgid "" +"The import machinery is designed to be extensible; the primary mechanism for" +" this are the *import hooks*. There are two types of import hooks: *meta " +"hooks* and *import path hooks*." +msgstr "导入机制被设计为可扩展;其中的基本机制是 *导入钩子*。 导入钩子有两种类型: *元钩子* 和 *导入路径钩子*。" + +#: ../../reference/import.rst:261 +msgid "" +"Meta hooks are called at the start of import processing, before any other " +"import processing has occurred, other than :data:`sys.modules` cache look " +"up. This allows meta hooks to override :data:`sys.path` processing, frozen " +"modules, or even built-in modules. Meta hooks are registered by adding new " +"finder objects to :data:`sys.meta_path`, as described below." +msgstr "" +"元钩子在导入过程开始时被调用,此时任何其他导入过程尚未发生,但 :data:`sys.modules` 缓存查找除外。 这允许元钩子重载 " +":data:`sys.path` 过程、冻结模块甚至内置模块。 元钩子的注册是通过向 :data:`sys.meta_path` " +"添加新的查找器对象,具体如下所述。" + +#: ../../reference/import.rst:267 +msgid "" +"Import path hooks are called as part of :data:`sys.path` (or " +"``package.__path__``) processing, at the point where their associated path " +"item is encountered. Import path hooks are registered by adding new " +"callables to :data:`sys.path_hooks` as described below." +msgstr "" +"导入路径钩子是作为 :data:`sys.path` (或 ``package.__path__``) " +"过程的一部分,在遇到它们所关联的路径项的时候被调用。 导入路径钩子的注册是通过向 :data:`sys.path_hooks` " +"添加新的可调用对象,具体如下所述。" + +#: ../../reference/import.rst:274 +msgid "The meta path" +msgstr "元路径" + +#: ../../reference/import.rst:280 +msgid "" +"When the named module is not found in :data:`sys.modules`, Python next " +"searches :data:`sys.meta_path`, which contains a list of meta path finder " +"objects. These finders are queried in order to see if they know how to " +"handle the named module. Meta path finders must implement a method called " +":meth:`~importlib.abc.MetaPathFinder.find_spec()` which takes three " +"arguments: a name, an import path, and (optionally) a target module. The " +"meta path finder can use any strategy it wants to determine whether it can " +"handle the named module or not." +msgstr "" +"当指定名称的模块在 :data:`sys.modules` 中找不到时,Python 会接着搜索 " +":data:`sys.meta_path`,其中包含元路径查找器对象列表。 这些查找器按顺序被查询以确定它们是否知道如何处理该名称的模块。 " +"元路径查找器必须实现名为 :meth:`~importlib.abc.MetaPathFinder.find_spec()` " +"的方法,该方法接受三个参数:名称、导入路径和目标模块(可选)。 元路径查找器可使用任何策略来确定它是否能处理指定名称的模块。" + +#: ../../reference/import.rst:289 +msgid "" +"If the meta path finder knows how to handle the named module, it returns a " +"spec object. If it cannot handle the named module, it returns ``None``. If" +" :data:`sys.meta_path` processing reaches the end of its list without " +"returning a spec, then a :exc:`ModuleNotFoundError` is raised. Any other " +"exceptions raised are simply propagated up, aborting the import process." +msgstr "" +"如果元路径查找器知道如何处理指定名称的模块,它将返回一个说明对象。 如果它不能处理该名称的模块,则会返回 ``None``。 如果 " +":data:`sys.meta_path` 处理过程到达列表末尾仍未返回说明对象,则将引发 :exc:`ModuleNotFoundError`。 " +"任何其他被引发异常将直接向上传播,并放弃导入过程。" + +#: ../../reference/import.rst:295 +msgid "" +"The :meth:`~importlib.abc.MetaPathFinder.find_spec()` method of meta path " +"finders is called with two or three arguments. The first is the fully " +"qualified name of the module being imported, for example ``foo.bar.baz``. " +"The second argument is the path entries to use for the module search. For " +"top-level modules, the second argument is ``None``, but for submodules or " +"subpackages, the second argument is the value of the parent package's " +"``__path__`` attribute. If the appropriate ``__path__`` attribute cannot be " +"accessed, a :exc:`ModuleNotFoundError` is raised. The third argument is an " +"existing module object that will be the target of loading later. The import " +"system passes in a target module only during reload." +msgstr "" +"元路径查找器的 :meth:`~importlib.abc.MetaPathFinder.find_spec()` 方法调用带有两到三个参数。 " +"第一个是被导入模块的完整限定名称,例如 ``foo.bar.baz``。 第二个参数是供模块搜索使用的路径条目。 对于最高层级模块,第二个参数为 " +"``None``,但对于子模块或子包,第二个参数为父包 ``__path__`` 属性的值。 如果相应的 ``__path__`` 属性无法访问,将引发" +" :exc:`ModuleNotFoundError`。 第三个参数是一个将被作为稍后加载目标的现有模块对象。 " +"导入系统仅会在重加载期间传入一个目标模块。" + +#: ../../reference/import.rst:306 +msgid "" +"The meta path may be traversed multiple times for a single import request. " +"For example, assuming none of the modules involved has already been cached, " +"importing ``foo.bar.baz`` will first perform a top level import, calling " +"``mpf.find_spec(\"foo\", None, None)`` on each meta path finder (``mpf``). " +"After ``foo`` has been imported, ``foo.bar`` will be imported by traversing " +"the meta path a second time, calling ``mpf.find_spec(\"foo.bar\", " +"foo.__path__, None)``. Once ``foo.bar`` has been imported, the final " +"traversal will call ``mpf.find_spec(\"foo.bar.baz\", foo.bar.__path__, " +"None)``." +msgstr "" +"对于单个导入请求可以多次遍历元路径。 例如,假设所涉及的模块都尚未被缓存,则导入 ``foo.bar.baz`` " +"将首先执行顶级的导入,在每个元路径查找器 (``mpf``) 上调用 ``mpf.find_spec(\"foo\", None, None)``。 " +"在导入 ``foo`` 之后,``foo.bar`` 将通过第二次遍历元路径来导入,调用 ``mpf.find_spec(\"foo.bar\", " +"foo.__path__, None)``。 一旦 ``foo.bar`` 完成导入,最后一次遍历将调用 " +"``mpf.find_spec(\"foo.bar.baz\", foo.bar.__path__, None)``。" + +#: ../../reference/import.rst:316 +msgid "" +"Some meta path finders only support top level imports. These importers will " +"always return ``None`` when anything other than ``None`` is passed as the " +"second argument." +msgstr "有些元路径查找器只支持顶级导入。 当把 ``None`` 以外的对象作为第三个参数传入时,这些导入器将总是返回 ``None``。" + +#: ../../reference/import.rst:320 +msgid "" +"Python's default :data:`sys.meta_path` has three meta path finders, one that" +" knows how to import built-in modules, one that knows how to import frozen " +"modules, and one that knows how to import modules from an :term:`import " +"path` (i.e. the :term:`path based finder`)." +msgstr "" +"Python 的默认 :data:`sys.meta_path` " +"具有三种元路径查找器,一种知道如何导入内置模块,一种知道如何导入冻结模块,还有一种知道如何导入来自 :term:`import path` 的模块 (即" +" :term:`path based finder`)。" + +#: ../../reference/import.rst:325 +msgid "" +"The :meth:`~importlib.abc.MetaPathFinder.find_spec` method of meta path " +"finders replaced :meth:`~importlib.abc.MetaPathFinder.find_module`, which is" +" now deprecated. While it will continue to work without change, the import " +"machinery will try it only if the finder does not implement ``find_spec()``." +msgstr "" +"元路径查找器的 :meth:`~importlib.abc.MetaPathFinder.find_spec` 方法替代了 " +":meth:`~importlib.abc.MetaPathFinder.find_module`,后者现已弃用,它将继续可用但不会再做改变,导入机制仅会在查找器未实现" +" ``find_spec()`` 时尝试使用它。" + +#: ../../reference/import.rst:334 +msgid "Loading" +msgstr "加载" + +#: ../../reference/import.rst:336 +msgid "" +"If and when a module spec is found, the import machinery will use it (and " +"the loader it contains) when loading the module. Here is an approximation " +"of what happens during the loading portion of import::" +msgstr "当一个模块说明被找到时,导入机制将在加载该模块时使用它(及其所包含的加载器)。 下面是导入的加载部分所发生过程的简要说明::" + +#: ../../reference/import.rst:370 +msgid "Note the following details:" +msgstr "请注意以下细节:" + +#: ../../reference/import.rst:372 +msgid "" +"If there is an existing module object with the given name in " +":data:`sys.modules`, import will have already returned it." +msgstr "如果在 :data:`sys.modules` 中存在指定名称的模块对象,导入操作会已经将其返回。" + +#: ../../reference/import.rst:375 +msgid "" +"The module will exist in :data:`sys.modules` before the loader executes the " +"module code. This is crucial because the module code may (directly or " +"indirectly) import itself; adding it to :data:`sys.modules` beforehand " +"prevents unbounded recursion in the worst case and multiple loading in the " +"best." +msgstr "" +"在加载器执行模块代码之前,该模块将存在于 :data:`sys.modules` 中。 " +"这一点很关键,因为该模块代码可能(直接或间接地)导入其自身;预先将其添加到 :data:`sys.modules` " +"可防止在最坏情况下的无限递归和最好情况下的多次加载。" + +#: ../../reference/import.rst:381 +msgid "" +"If loading fails, the failing module -- and only the failing module -- gets " +"removed from :data:`sys.modules`. Any module already in the " +":data:`sys.modules` cache, and any module that was successfully loaded as a " +"side-effect, must remain in the cache. This contrasts with reloading where " +"even the failing module is left in :data:`sys.modules`." +msgstr "" +"如果加载失败,则该模块 -- 只限加载失败的模块 -- 将从 :data:`sys.modules` 中移除。 任何已存在于 " +":data:`sys.modules` 缓存的模块,以及任何作为附带影响被成功加载的模块仍会保留在缓存中。 " +"这与重新加载不同,后者会把即使加载失败的模块也保留在 :data:`sys.modules` 中。" + +#: ../../reference/import.rst:387 +msgid "" +"After the module is created but before execution, the import machinery sets " +"the import-related module attributes (\"_init_module_attrs\" in the pseudo-" +"code example above), as summarized in a :ref:`later section `." +msgstr "" +"在模块创建完成但还未执行之前,导入机制会设置导入相关模块属性(在上面的示例伪代码中为 “_init_module_attrs”),详情参见 " +":ref:`后续部分 `。" + +#: ../../reference/import.rst:392 +msgid "" +"Module execution is the key moment of loading in which the module's " +"namespace gets populated. Execution is entirely delegated to the loader, " +"which gets to decide what gets populated and how." +msgstr "模块执行是加载的关键时刻,在此期间将填充模块的命名空间。 执行会完全委托给加载器,由加载器决定要填充的内容和方式。" + +#: ../../reference/import.rst:396 +msgid "" +"The module created during loading and passed to exec_module() may not be the" +" one returned at the end of import [#fnlo]_." +msgstr "在加载过程中创建并传递给 exec_module() 的模块并不一定就是在导入结束时返回的模块 [#fnlo]_。" + +#: ../../reference/import.rst:399 +msgid "" +"The import system has taken over the boilerplate responsibilities of " +"loaders. These were previously performed by the " +":meth:`importlib.abc.Loader.load_module` method." +msgstr "" +"导入系统已经接管了加载器建立样板的责任。 这些在以前是由 :meth:`importlib.abc.Loader.load_module` " +"方法来执行的。" + +#: ../../reference/import.rst:405 +msgid "Loaders" +msgstr "加载器" + +#: ../../reference/import.rst:407 +msgid "" +"Module loaders provide the critical function of loading: module execution. " +"The import machinery calls the :meth:`importlib.abc.Loader.exec_module` " +"method with a single argument, the module object to execute. Any value " +"returned from :meth:`~importlib.abc.Loader.exec_module` is ignored." +msgstr "" +"模块加载器提供关键的加载功能:模块执行。 导入机制调用 :meth:`importlib.abc.Loader.exec_module` " +"方法并传入一个参数来执行模块对象。 从 :meth:`~importlib.abc.Loader.exec_module` 返回的任何值都将被忽略。" + +#: ../../reference/import.rst:412 +msgid "Loaders must satisfy the following requirements:" +msgstr "加载器必须满足下列要求:" + +#: ../../reference/import.rst:414 +msgid "" +"If the module is a Python module (as opposed to a built-in module or a " +"dynamically loaded extension), the loader should execute the module's code " +"in the module's global name space (``module.__dict__``)." +msgstr "" +"如果模块是一个 Python 模块(而非内置模块或动态加载的扩展),加载器应该在模块的全局命名空间 (``module.__dict__``) " +"中执行模块的代码。" + +#: ../../reference/import.rst:418 +msgid "" +"If the loader cannot execute the module, it should raise an " +":exc:`ImportError`, although any other exception raised during " +":meth:`~importlib.abc.Loader.exec_module` will be propagated." +msgstr "" +"如果加载器无法执行指定模块,它应该引发 :exc:`ImportError`,不过在 " +":meth:`~importlib.abc.Loader.exec_module` 期间引发的任何其他异常也会被传播。" + +#: ../../reference/import.rst:422 +msgid "" +"In many cases, the finder and loader can be the same object; in such cases " +"the :meth:`~importlib.abc.MetaPathFinder.find_spec` method would just return" +" a spec with the loader set to ``self``." +msgstr "" +"在许多情况下,查找器和加载器可以是同一对象;在此情况下 :meth:`~importlib.abc.MetaPathFinder.find_spec` " +"方法将返回一个规格说明,其中加载器会被设为 ``self``。" + +#: ../../reference/import.rst:426 +msgid "" +"Module loaders may opt in to creating the module object during loading by " +"implementing a :meth:`~importlib.abc.Loader.create_module` method. It takes " +"one argument, the module spec, and returns the new module object to use " +"during loading. ``create_module()`` does not need to set any attributes on " +"the module object. If the method returns ``None``, the import machinery " +"will create the new module itself." +msgstr "" +"模块加载器可以选择通过实现 :meth:`~importlib.abc.Loader.create_module` 方法在加载期间创建模块对象。 " +"它接受一个参数,即模块规格说明,并返回新的模块对象供加载期间使用。 ``create_module()`` 不需要在模块对象上设置任何属性。 " +"如果模块返回 ``None``,导入机制将自行创建新模块。" + +#: ../../reference/import.rst:433 +msgid "The :meth:`~importlib.abc.Loader.create_module` method of loaders." +msgstr "加载器的 :meth:`~importlib.abc.Loader.create_module` 方法。" + +#: ../../reference/import.rst:436 +msgid "" +"The :meth:`~importlib.abc.Loader.load_module` method was replaced by " +":meth:`~importlib.abc.Loader.exec_module` and the import machinery assumed " +"all the boilerplate responsibilities of loading." +msgstr "" +":meth:`~importlib.abc.Loader.load_module` 方法被 " +":meth:`~importlib.abc.Loader.exec_module` 所替代,导入机制会对加载的所有样板责任作出假定。" + +#: ../../reference/import.rst:441 +msgid "" +"For compatibility with existing loaders, the import machinery will use the " +"``load_module()`` method of loaders if it exists and the loader does not " +"also implement ``exec_module()``. However, ``load_module()`` has been " +"deprecated and loaders should implement ``exec_module()`` instead." +msgstr "" +"为了与现有的加载器兼容,导入机制会使用导入器的 ``load_module()`` 方法,如果它存在且导入器也未实现 " +"``exec_module()``。 但是,``load_module()`` 现已弃用,加载器应该转而实现 ``exec_module()``。" + +#: ../../reference/import.rst:446 +msgid "" +"The ``load_module()`` method must implement all the boilerplate loading " +"functionality described above in addition to executing the module. All the " +"same constraints apply, with some additional clarification:" +msgstr "" +"除了执行模块之外,``load_module()`` 方法必须实现上文描述的所有样板加载功能。 所有相同的限制仍然适用,并带有一些附加规定:" + +#: ../../reference/import.rst:450 +msgid "" +"If there is an existing module object with the given name in " +":data:`sys.modules`, the loader must use that existing module. (Otherwise, " +":func:`importlib.reload` will not work correctly.) If the named module does" +" not exist in :data:`sys.modules`, the loader must create a new module " +"object and add it to :data:`sys.modules`." +msgstr "" +"如果 :data:`sys.modules` 中存在指定名称的模块对象,加载器必须使用已存在的模块。 (否则 " +":func:`importlib.reload` 将无法正确工作。) 如果该名称模块不存在于 :data:`sys.modules` " +"中,加载器必须创建一个新的模块对象并将其加入 :data:`sys.modules`。" + +#: ../../reference/import.rst:456 +msgid "" +"The module *must* exist in :data:`sys.modules` before the loader executes " +"the module code, to prevent unbounded recursion or multiple loading." +msgstr "在加载器执行模块代码之前,模块 *必须* 存在于 :data:`sys.modules` 之中,以防止无限递归或多次加载。" + +#: ../../reference/import.rst:460 +msgid "" +"If loading fails, the loader must remove any modules it has inserted into " +":data:`sys.modules`, but it must remove **only** the failing module(s), and " +"only if the loader itself has loaded the module(s) explicitly." +msgstr "" +"如果加载失败,加载器必须移除任何它已加入到 :data:`sys.modules` 中的模块,但它必须 **仅限** " +"移除加载失败的模块,且所移除的模块应为加载器自身显式加载的。" + +#: ../../reference/import.rst:465 +msgid "" +"A :exc:`DeprecationWarning` is raised when ``exec_module()`` is defined but " +"``create_module()`` is not." +msgstr "" +"当 ``exec_module()`` 已定义但 ``create_module()`` 未定义时将引发 " +":exc:`DeprecationWarning`。" + +#: ../../reference/import.rst:469 +msgid "" +"An :exc:`ImportError` is raised when ``exec_module()`` is defined but " +"``create_module()`` is not." +msgstr "" +"当 ``exec_module()`` 已定义但 ``create_module()`` 未定义时将引发 :exc:`ImportError`。" + +#: ../../reference/import.rst:474 +msgid "Submodules" +msgstr "子模块" + +#: ../../reference/import.rst:476 +msgid "" +"When a submodule is loaded using any mechanism (e.g. ``importlib`` APIs, the" +" ``import`` or ``import-from`` statements, or built-in ``__import__()``) a " +"binding is placed in the parent module's namespace to the submodule object. " +"For example, if package ``spam`` has a submodule ``foo``, after importing " +"``spam.foo``, ``spam`` will have an attribute ``foo`` which is bound to the " +"submodule. Let's say you have the following directory structure::" +msgstr "" +"当使用任意机制 (例如 ``importlib`` API, ``import`` 及 ``import-from`` 语句或者内置的 " +"``__import__()``) 加载一个子模块时,父模块的命名空间中会添加一个对子模块对象的绑定。 例如,如果包 ``spam`` 有一个子模块 " +"``foo``,则在导入 ``spam.foo`` 之后,``spam`` 将具有一个 绑定到相应子模块的 ``foo`` 属性。 " +"假如现在有如下的目录结构::" + +#: ../../reference/import.rst:487 +msgid "and ``spam/__init__.py`` has the following line in it::" +msgstr "并且 ``spam/__init__.py`` 中有如下几行内容::" + +#: ../../reference/import.rst:491 +msgid "" +"then executing the following puts name bindings for ``foo`` and ``Foo`` in " +"the ``spam`` module::" +msgstr "那么执行如下代码将把 ``foo`` 和 ``Foo`` 的名称绑定添加到 ``spam`` 模块中::" + +#: ../../reference/import.rst:500 +msgid "" +"Given Python's familiar name binding rules this might seem surprising, but " +"it's actually a fundamental feature of the import system. The invariant " +"holding is that if you have ``sys.modules['spam']`` and " +"``sys.modules['spam.foo']`` (as you would after the above import), the " +"latter must appear as the ``foo`` attribute of the former." +msgstr "" +"按照通常的 Python 名称绑定规则,这看起来可能会令人惊讶,但它实际上是导入系统的一个基本特性。 保持不变的一点是如果你有 " +"``sys.modules['spam']`` 和 ``sys.modules['spam.foo']`` " +"(例如在上述导入之后就是如此),则后者必须显示为前者的 ``foo`` 属性。" + +#: ../../reference/import.rst:507 +msgid "Module spec" +msgstr "模块规格说明" + +#: ../../reference/import.rst:509 +msgid "" +"The import machinery uses a variety of information about each module during " +"import, especially before loading. Most of the information is common to all" +" modules. The purpose of a module's spec is to encapsulate this import-" +"related information on a per-module basis." +msgstr "" +"导入机制在导入期间会使用有关每个模块的多种信息,特别是加载之前。 大多数信息都是所有模块通用的。 " +"模块规格说明的目的是基于每个模块来封装这些导入相关信息。" + +#: ../../reference/import.rst:514 +msgid "" +"Using a spec during import allows state to be transferred between import " +"system components, e.g. between the finder that creates the module spec and " +"the loader that executes it. Most importantly, it allows the import " +"machinery to perform the boilerplate operations of loading, whereas without " +"a module spec the loader had that responsibility." +msgstr "" +"在导入期间使用规格说明可允许状态在导入系统各组件之间传递,例如在创建模块规格说明的查找器和执行模块的加载器之间。 " +"最重要的一点是,它允许导入机制执行加载的样板操作,在没有模块规格说明的情况下这是加载器的责任。" + +#: ../../reference/import.rst:520 +msgid "" +"The module's spec is exposed as the ``__spec__`` attribute on a module " +"object. See :class:`~importlib.machinery.ModuleSpec` for details on the " +"contents of the module spec." +msgstr "" +"模块的规格说明会作为模块对象的 ``__spec__`` 属性对外公开。 有关模块规格的详细内容请参阅 " +":class:`~importlib.machinery.ModuleSpec`。" + +#: ../../reference/import.rst:529 +msgid "Import-related module attributes" +msgstr "导入相关的模块属性" + +#: ../../reference/import.rst:531 +msgid "" +"The import machinery fills in these attributes on each module object during " +"loading, based on the module's spec, before the loader executes the module." +msgstr "导入机制会在加载期间会根据模块的规格说明填充每个模块对象的这些属性,并在加载器执行模块之前完成。" + +#: ../../reference/import.rst:537 +msgid "" +"The ``__name__`` attribute must be set to the fully-qualified name of the " +"module. This name is used to uniquely identify the module in the import " +"system." +msgstr "``__name__`` 属性必须被设为模块的完整限定名称。 此名称被用来在导入系统中唯一地标识模块。" + +#: ../../reference/import.rst:543 +msgid "" +"The ``__loader__`` attribute must be set to the loader object that the " +"import machinery used when loading the module. This is mostly for " +"introspection, but can be used for additional loader-specific functionality," +" for example getting data associated with a loader." +msgstr "" +"``__loader__`` 属性必须被设为导入系统在加载模块时使用的加载器对象。 " +"这主要是用于内省,但也可用于额外的加载器专用功能,例如获取关联到加载器的数据。" + +#: ../../reference/import.rst:550 +msgid "" +"The module's ``__package__`` attribute must be set. Its value must be a " +"string, but it can be the same value as its ``__name__``. When the module " +"is a package, its ``__package__`` value should be set to its ``__name__``. " +"When the module is not a package, ``__package__`` should be set to the empty" +" string for top-level modules, or for submodules, to the parent package's " +"name. See :pep:`366` for further details." +msgstr "" +"模块的 ``__package__`` 属性必须设定。 其取值必须为一个字符串,但可以与 ``__name__`` 取相同的值。 当模块是包时,其 " +"``__package__`` 值应该设为其 ``__name__`` 值。 当模块不是包时,对于最高层级模块 ``__package__`` " +"应该设为空字符串,对于子模块则应该设为其父包名。 更多详情可参阅 :pep:`366`。" + +#: ../../reference/import.rst:558 +msgid "" +"This attribute is used instead of ``__name__`` to calculate explicit " +"relative imports for main modules, as defined in :pep:`366`. It is expected " +"to have the same value as ``__spec__.parent``." +msgstr "" +"该属性取代 ``__name__`` 被用来为主模块计算显式相对导入,相关定义见 :pep:`366`。 预期它与 " +"``__spec__.parent`` 具有相同的值。" + +#: ../../reference/import.rst:562 +msgid "" +"The value of ``__package__`` is expected to be the same as " +"``__spec__.parent``." +msgstr "``__package__`` 预期与 ``__spec__.parent`` 具有相同的值。" + +#: ../../reference/import.rst:568 +msgid "" +"The ``__spec__`` attribute must be set to the module spec that was used when" +" importing the module. Setting ``__spec__`` appropriately applies equally to" +" :ref:`modules initialized during interpreter startup `. The one " +"exception is ``__main__``, where ``__spec__`` is :ref:`set to None in some " +"cases `." +msgstr "" +"``__spec__`` 属性必须设为在导入模块时要使用的模块规格说明。 对 ``__spec__`` 的正确设定将同时作用于 " +":ref:`解释器启动期间初始化的模块 `。 唯一的例外是 ``__main__``,其中的 ``__spec__`` 会 " +":ref:`在某些情况下设为 None `." + +#: ../../reference/import.rst:574 +msgid "" +"When ``__package__`` is not defined, ``__spec__.parent`` is used as a " +"fallback." +msgstr "当 ``__package__`` 未定义时, ``__spec__.parent`` 会被用作回退项。" + +#: ../../reference/import.rst:579 +msgid "" +"``__spec__.parent`` is used as a fallback when ``__package__`` is not " +"defined." +msgstr "当 ``__package__`` 未定义时,``__spec__.parent`` 会被用作回退项。" + +#: ../../reference/import.rst:585 +msgid "" +"If the module is a package (either regular or namespace), the module " +"object's ``__path__`` attribute must be set. The value must be iterable, " +"but may be empty if ``__path__`` has no further significance. If " +"``__path__`` is not empty, it must produce strings when iterated over. More " +"details on the semantics of ``__path__`` are given :ref:`below `." +msgstr "" +"如果模块为包(不论是正规包还是命名空间包),则必须设置模块对象的 ``__path__`` 属性。 属性值必须为可迭代对象,但如果 " +"``__path__`` 没有进一步的用处则可以为空。 如果 ``__path__`` 不为空,则在迭代时它应该产生字符串。 有关 " +"``__path__`` 语义的更多细节将在 :ref:`下文 ` 中给出。" + +#: ../../reference/import.rst:592 +msgid "Non-package modules should not have a ``__path__`` attribute." +msgstr "不是包的模块不应该具有 ``__path__`` 属性。" + +#: ../../reference/import.rst:597 +msgid "" +"``__file__`` is optional. If set, this attribute's value must be a string. " +"The import system may opt to leave ``__file__`` unset if it has no semantic " +"meaning (e.g. a module loaded from a database)." +msgstr "" +"``__file__`` 是可选项。 如果设置,此属性的值必须为字符串。 导入系统可以选择在其没有语法意义时不设置 ``__file__`` " +"(例如从数据库加载的模块)。" + +#: ../../reference/import.rst:601 +msgid "" +"If ``__file__`` is set, it may also be appropriate to set the ``__cached__``" +" attribute which is the path to any compiled version of the code (e.g. byte-" +"compiled file). The file does not need to exist to set this attribute; the " +"path can simply point to where the compiled file would exist (see " +":pep:`3147`)." +msgstr "" +"如果设置了 ``__file__``,则也可以再设置 ``__cached__`` 属性,后者取值为编译版本代码(例如字节码文件)所在的路径。 " +"设置此属性不要求文件已存在;该路径可以简单地指向应该存放编译文件的位置 (参见 :pep:`3147`)。" + +#: ../../reference/import.rst:607 +msgid "" +"It is also appropriate to set ``__cached__`` when ``__file__`` is not set. " +"However, that scenario is quite atypical. Ultimately, the loader is what " +"makes use of ``__file__`` and/or ``__cached__``. So if a loader can load " +"from a cached module but otherwise does not load from a file, that atypical " +"scenario may be appropriate." +msgstr "" +"当未设置 ``__file__`` 时也可以设置 ``__cached__``。 但是,那样的场景很不典型。 最终,加载器会使用 " +"``__file__`` 和/或 ``__cached__``。 因此如果一个加载器可以从缓存加载模块但是不能从文件加载,那种非典型场景就是适当的。" + +#: ../../reference/import.rst:616 +msgid "module.__path__" +msgstr "module.__path__" + +#: ../../reference/import.rst:618 +msgid "" +"By definition, if a module has a ``__path__`` attribute, it is a package." +msgstr "根据定义,如果一个模块具有 ``__path__`` 属性,它就是包。" + +#: ../../reference/import.rst:620 +msgid "" +"A package's ``__path__`` attribute is used during imports of its " +"subpackages. Within the import machinery, it functions much the same as " +":data:`sys.path`, i.e. providing a list of locations to search for modules " +"during import. However, ``__path__`` is typically much more constrained than" +" :data:`sys.path`." +msgstr "" +"包的 ``__path__`` 属性会在导入其子包期间被使用。 在导入机制内部,它的功能与 :data:`sys.path` " +"基本相同,即在导入期间提供一个模块搜索位置列表。 但是,``__path__`` 通常会比 :data:`sys.path` 受到更多限制。" + +#: ../../reference/import.rst:626 +msgid "" +"``__path__`` must be an iterable of strings, but it may be empty. The same " +"rules used for :data:`sys.path` also apply to a package's ``__path__``, and " +":data:`sys.path_hooks` (described below) are consulted when traversing a " +"package's ``__path__``." +msgstr "" +"``__path__`` 必须是由字符串组成的可迭代对象,但它也可以为空。 作用于 :data:`sys.path` 的规则同样适用于包的 " +"``__path__``,并且 :data:`sys.path_hooks` (见下文) 会在遍历包的 ``__path__`` 时被查询。" + +#: ../../reference/import.rst:631 +msgid "" +"A package's ``__init__.py`` file may set or alter the package's ``__path__``" +" attribute, and this was typically the way namespace packages were " +"implemented prior to :pep:`420`. With the adoption of :pep:`420`, namespace" +" packages no longer need to supply ``__init__.py`` files containing only " +"``__path__`` manipulation code; the import machinery automatically sets " +"``__path__`` correctly for the namespace package." +msgstr "" +"包的 ``__init__.py`` 文件可以设置或更改包的 ``__path__`` 属性,而且这是在 :pep:`420` " +"之前实现命名空间包的典型方式。 随着 :pep:`420` 的引入,命名空间包不再需要提供仅包含 ``__path__`` 操控代码的 " +"``__init__.py`` 文件;导入机制会自动为命名空间包正确地设置 ``__path__``。" + +#: ../../reference/import.rst:639 +msgid "Module reprs" +msgstr "模块的 repr" + +#: ../../reference/import.rst:641 +msgid "" +"By default, all modules have a usable repr, however depending on the " +"attributes set above, and in the module's spec, you can more explicitly " +"control the repr of module objects." +msgstr "默认情况下,全部模块都具有一个可用的 repr,但是你可以依据上述的属性设置,在模块的规格说明中更为显式地控制模块对象的 repr。" + +#: ../../reference/import.rst:645 +msgid "" +"If the module has a spec (``__spec__``), the import machinery will try to " +"generate a repr from it. If that fails or there is no spec, the import " +"system will craft a default repr using whatever information is available on " +"the module. It will try to use the ``module.__name__``, " +"``module.__file__``, and ``module.__loader__`` as input into the repr, with " +"defaults for whatever information is missing." +msgstr "" +"如果模块具有 spec (``__spec__``),导入机制将尝试用它来生成一个 repr。 如果生成失败或找不到 " +"spec,导入系统将使用模块中的各种可用信息来制作一个默认 repr。 它将尝试使用 ``module.__name__``, " +"``module.__file__`` 以及 ``module.__loader__`` 作为 repr 的输入,并将任何丢失的信息赋为默认值。" + +#: ../../reference/import.rst:652 +msgid "Here are the exact rules used:" +msgstr "以下是所使用的确切规则:" + +#: ../../reference/import.rst:654 +msgid "" +"If the module has a ``__spec__`` attribute, the information in the spec is " +"used to generate the repr. The \"name\", \"loader\", \"origin\", and " +"\"has_location\" attributes are consulted." +msgstr "" +"如果模块具有 ``__spec__`` 属性,其中的规格信息会被用来生成 repr。 被查询的属性有 \"name\", \"loader\", " +"\"origin\" 和 \"has_location\" 等等。" + +#: ../../reference/import.rst:658 +msgid "" +"If the module has a ``__file__`` attribute, this is used as part of the " +"module's repr." +msgstr "如果模块具有 ``__file__`` 属性,这会被用作模块 repr 的一部分。" + +#: ../../reference/import.rst:661 +msgid "" +"If the module has no ``__file__`` but does have a ``__loader__`` that is not" +" ``None``, then the loader's repr is used as part of the module's repr." +msgstr "" +"如果模块没有 ``__file__`` 但是有 ``__loader__`` 且取值不为 ``None``,则加载器的 repr 会被用作模块 repr" +" 的一部分。" + +#: ../../reference/import.rst:664 +msgid "Otherwise, just use the module's ``__name__`` in the repr." +msgstr "对于其他情况,仅在 repr 中使用模块的 ``__name__``。" + +#: ../../reference/import.rst:666 +msgid "" +"Use of :meth:`loader.module_repr() ` has " +"been deprecated and the module spec is now used by the import machinery to " +"generate a module repr." +msgstr "" +":meth:`loader.module_repr() ` " +"已弃用,导入机制现在使用模块规格说明来生成模块 repr。" + +#: ../../reference/import.rst:671 +msgid "" +"For backward compatibility with Python 3.3, the module repr will be " +"generated by calling the loader's :meth:`~importlib.abc.Loader.module_repr` " +"method, if defined, before trying either approach described above. However," +" the method is deprecated." +msgstr "" +"为了向后兼容 Python 3.3,如果加载器定义了 :meth:`~importlib.abc.Loader.module_repr` " +"方法,则会在尝试上述两种方式之前先调用该方法来生成模块 repr。 但请注意此方法已弃用。" + +#: ../../reference/import.rst:679 +msgid "Cached bytecode invalidation" +msgstr "已缓存字节码的失效" + +#: ../../reference/import.rst:681 +msgid "" +"Before Python loads cached bytecode from a ``.pyc`` file, it checks whether " +"the cache is up-to-date with the source ``.py`` file. By default, Python " +"does this by storing the source's last-modified timestamp and size in the " +"cache file when writing it. At runtime, the import system then validates the" +" cache file by checking the stored metadata in the cache file against the " +"source's metadata." +msgstr "" +"在 Python 从 ``.pyc`` 文件加载已缓存字节码之前,它会检查缓存是否由最新的 ``.py`` 源文件所生成。 默认情况下,Python " +"通过在所写入缓存文件中保存源文件的最新修改时间戳和大小来实现这一点。 " +"在运行时,导入系统会通过比对缓存文件中保存的元数据和源文件的元数据确定该缓存的有效性。" + +#: ../../reference/import.rst:688 +msgid "" +"Python also supports \"hash-based\" cache files, which store a hash of the " +"source file's contents rather than its metadata. There are two variants of " +"hash-based ``.pyc`` files: checked and unchecked. For checked hash-based " +"``.pyc`` files, Python validates the cache file by hashing the source file " +"and comparing the resulting hash with the hash in the cache file. If a " +"checked hash-based cache file is found to be invalid, Python regenerates it " +"and writes a new checked hash-based cache file. For unchecked hash-based " +"``.pyc`` files, Python simply assumes the cache file is valid if it exists. " +"Hash-based ``.pyc`` files validation behavior may be overridden with the " +":option:`--check-hash-based-pycs` flag." +msgstr "" +"Python 也支持“基于哈希的”缓存文件,即保存源文件内容的哈希值而不是其元数据。 存在两种基于哈希的 ``.pyc`` 文件:检查型和非检查型。 " +"对于检查型基于哈希的 ``.pyc`` 文件,Python 会通过求哈希源文件并将结果哈希值与缓存文件中的哈希值比对来确定缓存有效性。 " +"如果检查型基于哈希的缓存文件被确定为失效,Python 会重新生成并写入一个新的检查型基于哈希的缓存文件。 对于非检查型 ``.pyc`` " +"文件,只要其存在 Python 就会直接认定缓存文件有效。 确定基于哈希的 ``.pyc`` 文件有效性的行为可通过 :option:`--check-" +"hash-based-pycs` 旗标来重载。" + +#: ../../reference/import.rst:699 +msgid "" +"Added hash-based ``.pyc`` files. Previously, Python only supported " +"timestamp-based invalidation of bytecode caches." +msgstr "增加了基于哈希的 ``.pyc`` 文件。在此之前,Python 只支持基于时间戳来确定字节码缓存的有效性。" + +#: ../../reference/import.rst:705 +msgid "The Path Based Finder" +msgstr "基于路径的查找器" + +#: ../../reference/import.rst:710 +msgid "" +"As mentioned previously, Python comes with several default meta path " +"finders. One of these, called the :term:`path based finder` " +"(:class:`~importlib.machinery.PathFinder`), searches an :term:`import path`," +" which contains a list of :term:`path entries `. Each path " +"entry names a location to search for modules." +msgstr "" +"在之前已经提及,Python 带有几种默认的元路径查找器。 其中之一是 :term:`path based finder` " +"(:class:`~importlib.machinery.PathFinder`),它会搜索包含一个 :term:`路径条目 ` 列表的 :term:`import path`。 每个路径条目指定一个用于搜索模块的位置。" + +#: ../../reference/import.rst:716 +msgid "" +"The path based finder itself doesn't know how to import anything. Instead, " +"it traverses the individual path entries, associating each of them with a " +"path entry finder that knows how to handle that particular kind of path." +msgstr "基于路径的查找器自身并不知道如何进行导入。 它只是遍历单独的路径条目,将它们各自关联到某个知道如何处理特定类型路径的路径条目查找器。" + +#: ../../reference/import.rst:720 +msgid "" +"The default set of path entry finders implement all the semantics for " +"finding modules on the file system, handling special file types such as " +"Python source code (``.py`` files), Python byte code (``.pyc`` files) and " +"shared libraries (e.g. ``.so`` files). When supported by the " +":mod:`zipimport` module in the standard library, the default path entry " +"finders also handle loading all of these file types (other than shared " +"libraries) from zipfiles." +msgstr "" +"默认的路径条目查找器集合实现了在文件系统中查找模块的所有语义,可处理多种特殊文件类型例如 Python 源码 (``.py`` 文件),Python " +"字节码 (``.pyc`` 文件) 以及共享库 (例如 ``.so`` 文件)。 在标准库中 :mod:`zipimport` " +"模块的支持下,默认路径条目查找器还能处理所有来自 zip 文件的上述文件类型。" + +#: ../../reference/import.rst:727 +msgid "" +"Path entries need not be limited to file system locations. They can refer " +"to URLs, database queries, or any other location that can be specified as a " +"string." +msgstr "路径条目不必仅限于文件系统位置。 它们可以指向 URL、数据库查询或可以用字符串指定的任何其他位置。" + +#: ../../reference/import.rst:731 +msgid "" +"The path based finder provides additional hooks and protocols so that you " +"can extend and customize the types of searchable path entries. For example," +" if you wanted to support path entries as network URLs, you could write a " +"hook that implements HTTP semantics to find modules on the web. This hook " +"(a callable) would return a :term:`path entry finder` supporting the " +"protocol described below, which was then used to get a loader for the module" +" from the web." +msgstr "" +"基于路径的查找器还提供了额外的钩子和协议以便能扩展和定制可搜索路径条目的类型。 例如,如果你想要支持网络 URL 形式的路径条目,你可以编写一个实现 " +"HTTP 语义在网络上查找模块的钩子。 这个钩子(可调用对象)应当返回一个支持下述协议的 :term:`path entry " +"finder`,以被用来获取一个专门针对来自网络的模块的加载器。" + +#: ../../reference/import.rst:739 +msgid "" +"A word of warning: this section and the previous both use the term *finder*," +" distinguishing between them by using the terms :term:`meta path finder` and" +" :term:`path entry finder`. These two types of finders are very similar, " +"support similar protocols, and function in similar ways during the import " +"process, but it's important to keep in mind that they are subtly different. " +"In particular, meta path finders operate at the beginning of the import " +"process, as keyed off the :data:`sys.meta_path` traversal." +msgstr "" +"预先的警告:本节和上节都使用了 *查找器* 这一术语,并通过 :term:`meta path finder` 和 :term:`path entry " +"finder` 两个术语来明确区分它们。 " +"这两种类型的查找器非常相似,支持相似的协议,且在导入过程中以相似的方式运作,但关键的一点是要记住它们是有微妙差异的。 " +"特别地,元路径查找器作用于导入过程的开始,主要是启动 :data:`sys.meta_path` 遍历。" + +#: ../../reference/import.rst:747 +msgid "" +"By contrast, path entry finders are in a sense an implementation detail of " +"the path based finder, and in fact, if the path based finder were to be " +"removed from :data:`sys.meta_path`, none of the path entry finder semantics " +"would be invoked." +msgstr "" +"相比之下,路径条目查找器在某种意义上说是基于路径的查找器的实现细节,实际上,如果需要从 :data:`sys.meta_path` " +"移除基于路径的查找器,并不会有任何路径条目查找器被唤起。" + +#: ../../reference/import.rst:754 +msgid "Path entry finders" +msgstr "路径条目查找器" + +#: ../../reference/import.rst:762 +msgid "" +"The :term:`path based finder` is responsible for finding and loading Python " +"modules and packages whose location is specified with a string :term:`path " +"entry`. Most path entries name locations in the file system, but they need " +"not be limited to this." +msgstr "" +":term:`path based finder` 会负责查找和加载通过 :term:`path entry` 字符串来指定位置的 Python " +"模块和包。 多数路径条目所指定的是文件系统中的位置,但它们并不必受限于此。" + +#: ../../reference/import.rst:767 +msgid "" +"As a meta path finder, the :term:`path based finder` implements the " +":meth:`~importlib.abc.MetaPathFinder.find_spec` protocol previously " +"described, however it exposes additional hooks that can be used to customize" +" how modules are found and loaded from the :term:`import path`." +msgstr "" +"作为一种元路径查找器,:term:`path based finder` 实现了上文描述的 " +":meth:`~importlib.abc.MetaPathFinder.find_spec` " +"协议,但是它还对外公开了一些附加钩子,可被用来定制模块如何从 :term:`import path` 查找和加载。" + +#: ../../reference/import.rst:772 +msgid "" +"Three variables are used by the :term:`path based finder`, :data:`sys.path`," +" :data:`sys.path_hooks` and :data:`sys.path_importer_cache`. The " +"``__path__`` attributes on package objects are also used. These provide " +"additional ways that the import machinery can be customized." +msgstr "" +"有三个变量由 :term:`path based finder`, :data:`sys.path`, :data:`sys.path_hooks` 和" +" :data:`sys.path_importer_cache` 所使用。 包对象的 ``__path__`` 属性也会被使用。 " +"它们提供了可用于定制导入机制的额外方式。" + +#: ../../reference/import.rst:777 +msgid "" +":data:`sys.path` contains a list of strings providing search locations for " +"modules and packages. It is initialized from the :data:`PYTHONPATH` " +"environment variable and various other installation- and implementation-" +"specific defaults. Entries in :data:`sys.path` can name directories on the " +"file system, zip files, and potentially other \"locations\" (see the " +":mod:`site` module) that should be searched for modules, such as URLs, or " +"database queries. Only strings and bytes should be present on " +":data:`sys.path`; all other data types are ignored. The encoding of bytes " +"entries is determined by the individual :term:`path entry finders `." +msgstr "" +":data:`sys.path` 包含一个提供模块和包搜索位置的字符串列表。 它初始化自 :data:`PYTHONPATH` " +"环境变量以及多种其他特定安装和实现的默认设置。 :data:`sys.path` 条目可指定的名称有文件系统中的目录、zip " +"文件和其他可用于搜索模块的潜在“位置”(参见 :mod:`site` 模块),例如 URL 或数据库查询等。 在 :data:`sys.path` " +"中只能出现字符串和字节串;所有其他数据类型都会被忽略。 字节串条目使用的编码由单独的 :term:`路径条目查找器 ` 来确定。" + +#: ../../reference/import.rst:788 +msgid "" +"The :term:`path based finder` is a :term:`meta path finder`, so the import " +"machinery begins the :term:`import path` search by calling the path based " +"finder's :meth:`~importlib.machinery.PathFinder.find_spec` method as " +"described previously. When the ``path`` argument to " +":meth:`~importlib.machinery.PathFinder.find_spec` is given, it will be a " +"list of string paths to traverse - typically a package's ``__path__`` " +"attribute for an import within that package. If the ``path`` argument is " +"``None``, this indicates a top level import and :data:`sys.path` is used." +msgstr "" +":term:`path based finder` 是一种 :term:`meta path " +"finder`,因此导入机制会通过调用上文描述的基于路径的查找器的 " +":meth:`~importlib.machinery.PathFinder.find_spec` 方法来启动 :term:`import path` " +"搜索。 当要向 :meth:`~importlib.machinery.PathFinder.find_spec` 传入 ``path`` " +"参数时,它将是一个可遍历的字符串列表 —— 通常为用来在其内部进行导入的包的 ``__path__`` 属性。 如果 ``path`` 参数为 " +"``None``,这表示最高层级的导入,将会使用 :data:`sys.path`。" + +#: ../../reference/import.rst:797 +msgid "" +"The path based finder iterates over every entry in the search path, and for " +"each of these, looks for an appropriate :term:`path entry finder` " +"(:class:`~importlib.abc.PathEntryFinder`) for the path entry. Because this " +"can be an expensive operation (e.g. there may be `stat()` call overheads for" +" this search), the path based finder maintains a cache mapping path entries " +"to path entry finders. This cache is maintained in " +":data:`sys.path_importer_cache` (despite the name, this cache actually " +"stores finder objects rather than being limited to :term:`importer` " +"objects). In this way, the expensive search for a particular :term:`path " +"entry` location's :term:`path entry finder` need only be done once. User " +"code is free to remove cache entries from :data:`sys.path_importer_cache` " +"forcing the path based finder to perform the path entry search again " +"[#fnpic]_." +msgstr "" +"基于路径的查找器会迭代搜索路径中的每个条目,并且每次都查找与路径条目对应的 :term:`path entry finder` " +"(:class:`~importlib.abc.PathEntryFinder`)。 因为这种操作可能很耗费资源(例如搜索会有 `stat()` " +"调用的开销),基于路径的查找器会维持一个缓存来将路径条目映射到路径条目查找器。 这个缓存放于 " +":data:`sys.path_importer_cache` (尽管如此命名,但这个缓存实际存放的是查找器对象而非仅限于 " +":term:`importer` 对象)。 通过这种方式,对特定 :term:`path entry` 位置的 :term:`path entry " +"finder` 的高耗费搜索只需进行一次。 用户代码可以自由地从 :data:`sys.path_importer_cache` " +"移除缓存条目,以强制基于路径的查找器再次执行路径条目搜索 [#fnpic]_。" + +#: ../../reference/import.rst:810 +msgid "" +"If the path entry is not present in the cache, the path based finder " +"iterates over every callable in :data:`sys.path_hooks`. Each of the " +":term:`path entry hooks ` in this list is called with a " +"single argument, the path entry to be searched. This callable may either " +"return a :term:`path entry finder` that can handle the path entry, or it may" +" raise :exc:`ImportError`. An :exc:`ImportError` is used by the path based " +"finder to signal that the hook cannot find a :term:`path entry finder` for " +"that :term:`path entry`. The exception is ignored and :term:`import path` " +"iteration continues. The hook should expect either a string or bytes " +"object; the encoding of bytes objects is up to the hook (e.g. it may be a " +"file system encoding, UTF-8, or something else), and if the hook cannot " +"decode the argument, it should raise :exc:`ImportError`." +msgstr "" +"如果路径条目不存在于缓存中,基于路径的查找器会迭代 :data:`sys.path_hooks` 中的每个可调用对象。 对此列表中的每个 " +":term:`路径条目钩子 ` 的调用会带有一个参数,即要搜索的路径条目。 每个可调用对象或是返回可处理路径条目的 " +":term:`path entry finder`,或是引发 :exc:`ImportError`。 基于路径的查找器使用 " +":exc:`ImportError` 来表示钩子无法找到与 :term:`path entry` 相对应的 :term:`path entry " +"finder`。 该异常会被忽略并继续进行 :term:`import path` 的迭代。 " +"每个钩子应该期待接收一个字符串或字节串对象;字节串对象的编码由钩子决定(例如可以是文件系统使用的编码 UTF-8 " +"或其它编码),如果钩子无法解码参数,它应该引发 :exc:`ImportError`。" + +#: ../../reference/import.rst:824 +msgid "" +"If :data:`sys.path_hooks` iteration ends with no :term:`path entry finder` " +"being returned, then the path based finder's " +":meth:`~importlib.machinery.PathFinder.find_spec` method will store ``None``" +" in :data:`sys.path_importer_cache` (to indicate that there is no finder for" +" this path entry) and return ``None``, indicating that this :term:`meta path" +" finder` could not find the module." +msgstr "" +"如果 :data:`sys.path_hooks` 迭代结束时没有返回 :term:`path entry finder`,则基于路径的查找器 " +":meth:`~importlib.machinery.PathFinder.find_spec` 方法将在 " +":data:`sys.path_importer_cache` 中存入 ``None`` (表示此路径条目没有对应的查找器) 并返回 " +"``None``,表示此 :term:`meta path finder` 无法找到该模块。" + +#: ../../reference/import.rst:831 +msgid "" +"If a :term:`path entry finder` *is* returned by one of the :term:`path entry" +" hook` callables on :data:`sys.path_hooks`, then the following protocol is " +"used to ask the finder for a module spec, which is then used when loading " +"the module." +msgstr "" +"如果 :data:`sys.path_hooks` 中的某个 :term:`path entry hook` 可调用对象的返回值 *是* 一个 " +":term:`path entry finder`,则以下协议会被用来向查找器请求一个模块的规格说明,并在加载该模块时被使用。" + +#: ../../reference/import.rst:836 +msgid "" +"The current working directory -- denoted by an empty string -- is handled " +"slightly differently from other entries on :data:`sys.path`. First, if the " +"current working directory is found to not exist, no value is stored in " +":data:`sys.path_importer_cache`. Second, the value for the current working " +"directory is looked up fresh for each module lookup. Third, the path used " +"for :data:`sys.path_importer_cache` and returned by " +":meth:`importlib.machinery.PathFinder.find_spec` will be the actual current " +"working directory and not the empty string." +msgstr "" +"当前工作目录 -- 由一个空字符串表示 -- 的处理方式与 :data:`sys.path` 中的其他条目略有不同。 " +"首先,如果发现当前工作目录不存在,则 :data:`sys.path_importer_cache` 中不会存放任何值。 " +"其次,每个模块查找会对当前工作目录的值进行全新查找。 第三,由 :data:`sys.path_importer_cache` 所使用并由 " +":meth:`importlib.machinery.PathFinder.find_spec` 所返回的路径将是实际的当前工作目录而非空字符串。" + +#: ../../reference/import.rst:846 +msgid "Path entry finder protocol" +msgstr "路径条目查找器协议" + +#: ../../reference/import.rst:848 +msgid "" +"In order to support imports of modules and initialized packages and also to " +"contribute portions to namespace packages, path entry finders must implement" +" the :meth:`~importlib.abc.PathEntryFinder.find_spec` method." +msgstr "" +"为了支持模块和已初始化包的导入,也为了给命名空间包提供组成部分,路径条目查找器必须实现 " +":meth:`~importlib.abc.PathEntryFinder.find_spec` 方法。" + +#: ../../reference/import.rst:852 +msgid "" +":meth:`~importlib.abc.PathEntryFinder.find_spec` takes two arguments: the " +"fully qualified name of the module being imported, and the (optional) target" +" module. ``find_spec()`` returns a fully populated spec for the module. " +"This spec will always have \"loader\" set (with one exception)." +msgstr "" +":meth:`~importlib.abc.PathEntryFinder.find_spec` " +"接受两个参数,即要导入模块的完整限定名称,以及(可选的)目标模块。 ``find_spec()`` 返回模块的完全填充好的规格说明。 " +"这个规格说明总是包含“加载器”集合(但有一个例外)。" + +#: ../../reference/import.rst:857 +msgid "" +"To indicate to the import machinery that the spec represents a namespace " +":term:`portion`, the path entry finder sets \"submodule_search_locations\" " +"to a list containing the portion." +msgstr "" +"为了向导入机制提示该规格说明代表一个命名空间 :term:`portion`,路径条目查找器会将 " +"\"submodule_search_locations\" 设为一个包含该部分的列表。" + +#: ../../reference/import.rst:861 +msgid "" +":meth:`~importlib.abc.PathEntryFinder.find_spec` replaced " +":meth:`~importlib.abc.PathEntryFinder.find_loader` and " +":meth:`~importlib.abc.PathEntryFinder.find_module`, both of which are now " +"deprecated, but will be used if ``find_spec()`` is not defined." +msgstr "" +":meth:`~importlib.abc.PathEntryFinder.find_spec` 替代了 " +":meth:`~importlib.abc.PathEntryFinder.find_loader` 和 " +":meth:`~importlib.abc.PathEntryFinder.find_module`,后两者现在都已弃用,但会在 " +"``find_spec()`` 未定义时被使用。" + +#: ../../reference/import.rst:867 +msgid "" +"Older path entry finders may implement one of these two deprecated methods " +"instead of ``find_spec()``. The methods are still respected for the sake of" +" backward compatibility. However, if ``find_spec()`` is implemented on the " +"path entry finder, the legacy methods are ignored." +msgstr "" +"较旧的路径条目查找器可能会实现这两个已弃用的方法中的一个而没有实现 ``find_spec()``。 为保持向后兼容,这两个方法仍会被接受。 " +"但是,如果在路径条目查找器上实现了 ``find_spec()``,这两个遗留方法就会被忽略。" + +#: ../../reference/import.rst:872 +msgid "" +":meth:`~importlib.abc.PathEntryFinder.find_loader` takes one argument, the " +"fully qualified name of the module being imported. ``find_loader()`` " +"returns a 2-tuple where the first item is the loader and the second item is " +"a namespace :term:`portion`." +msgstr "" +":meth:`~importlib.abc.PathEntryFinder.find_loader` 接受一个参数,即要导入模块的完整限定名称。 " +"``find_loader()`` 返回一个 2 元组,其中第一项是加载器而第二项是命名空间 :term:`portion`。" + +#: ../../reference/import.rst:877 +msgid "" +"For backwards compatibility with other implementations of the import " +"protocol, many path entry finders also support the same, traditional " +"``find_module()`` method that meta path finders support. However path entry " +"finder ``find_module()`` methods are never called with a ``path`` argument " +"(they are expected to record the appropriate path information from the " +"initial call to the path hook)." +msgstr "" +"为了向后兼容其他导入协议的实现,许多路径条目查找器也同样支持元路径查找器所支持的传统 ``find_module()`` 方法。 但是路径条目查找器 " +"``find_module()`` 方法的调用绝不会带有 ``path`` 参数(它们被期望记录来自对路径钩子初始调用的恰当路径信息)。" + +#: ../../reference/import.rst:884 +msgid "" +"The ``find_module()`` method on path entry finders is deprecated, as it does" +" not allow the path entry finder to contribute portions to namespace " +"packages. If both ``find_loader()`` and ``find_module()`` exist on a path " +"entry finder, the import system will always call ``find_loader()`` in " +"preference to ``find_module()``." +msgstr "" +"路径条目查找器的 ``find_module()`` 方法已弃用,因为它不允许路径条目查找器为命名空间包提供部分。 如果 " +"``find_loader()`` 和 ``find_module()`` 同时存在于一个路径条目查找器中,导入系统将总是调用 " +"``find_loader()`` 而不选择 ``find_module()``。" + +#: ../../reference/import.rst:892 +msgid "Replacing the standard import system" +msgstr "替换标准导入系统" + +#: ../../reference/import.rst:894 +msgid "" +"The most reliable mechanism for replacing the entire import system is to " +"delete the default contents of :data:`sys.meta_path`, replacing them " +"entirely with a custom meta path hook." +msgstr "替换整个导入系统的最可靠机制是移除 :data:`sys.meta_path` 的默认内容,,将其完全替换为自定义的元路径钩子。" + +#: ../../reference/import.rst:898 +msgid "" +"If it is acceptable to only alter the behaviour of import statements without" +" affecting other APIs that access the import system, then replacing the " +"builtin :func:`__import__` function may be sufficient. This technique may " +"also be employed at the module level to only alter the behaviour of import " +"statements within that module." +msgstr "" +"一个可行的方式是仅改变导入语句的行为而不影响访问导入系统的其他 API,那么替换内置的 :func:`__import__` 函数可能就够了。 " +"这种技巧也可以在模块层级上运用,即只在某个模块内部改变导入语句的行为。" + +#: ../../reference/import.rst:904 +msgid "" +"To selectively prevent the import of some modules from a hook early on the " +"meta path (rather than disabling the standard import system entirely), it is" +" sufficient to raise :exc:`ModuleNotFoundError` directly from " +":meth:`~importlib.abc.MetaPathFinder.find_spec` instead of returning " +"``None``. The latter indicates that the meta path search should continue, " +"while raising an exception terminates it immediately." +msgstr "" +"想要选择性地预先防止在元路径上从一个钩子导入某些模块(而不是完全禁用标准导入系统),只需直接从 " +":meth:`~importlib.abc.MetaPathFinder.find_spec` 引发 " +":exc:`ModuleNotFoundError` 而非返回 ``None`` 就足够了。 " +"返回后者表示元路径搜索应当继续,而引发异常则会立即终止搜索。" + +#: ../../reference/import.rst:914 +msgid "Package Relative Imports" +msgstr "包相对导入" + +#: ../../reference/import.rst:916 +msgid "" +"Relative imports use leading dots. A single leading dot indicates a relative" +" import, starting with the current package. Two or more leading dots " +"indicate a relative import to the parent(s) of the current package, one " +"level per dot after the first. For example, given the following package " +"layout::" +msgstr "" +"相对导入使用前缀点号。 一个前缀点号表示相对导入从当前包开始。 两个或更多前缀点号表示对当前包的上级包的相对导入,第一个点号之后的每个点号代表一级。 " +"例如,给定以下的包布局结构::" + +#: ../../reference/import.rst:932 +msgid "" +"In either ``subpackage1/moduleX.py`` or ``subpackage1/__init__.py``, the " +"following are valid relative imports::" +msgstr "" +"不论是在 ``subpackage1/moduleX.py`` 还是 ``subpackage1/__init__.py`` 中,以下导入都是有效的::" + +#: ../../reference/import.rst:942 +msgid "" +"Absolute imports may use either the ``import <>`` or ``from <> import <>`` " +"syntax, but relative imports may only use the second form; the reason for " +"this is that::" +msgstr "" +"绝对导入可以使用 ``import <>`` 或 ``from <> import <>`` 语法,但相对导入只能使用第二种形式;其中的原因在于::" + +#: ../../reference/import.rst:948 +msgid "" +"should expose ``XXX.YYY.ZZZ`` as a usable expression, but .moduleY is not a " +"valid expression." +msgstr "应当提供 ``XXX.YYY.ZZZ`` 作为可用表达式,但 .moduleY 不是一个有效的表达式。" + +#: ../../reference/import.rst:953 +msgid "Special considerations for __main__" +msgstr "有关 __main__ 的特殊事项" + +#: ../../reference/import.rst:955 +msgid "" +"The :mod:`__main__` module is a special case relative to Python's import " +"system. As noted :ref:`elsewhere `, the ``__main__`` module is " +"directly initialized at interpreter startup, much like :mod:`sys` and " +":mod:`builtins`. However, unlike those two, it doesn't strictly qualify as " +"a built-in module. This is because the manner in which ``__main__`` is " +"initialized depends on the flags and other options with which the " +"interpreter is invoked." +msgstr "" +"对于 Python 的导入系统来说 :mod:`__main__` 模块是一个特殊情况。 正如在 :ref:`另一节 ` " +"中所述,``__main__`` 模块是在解释器启动时直接初始化的,与 :mod:`sys` 和 :mod:`builtins` 很类似。 " +"但是,与那两者不同,它并不被严格归类为内置模块。 这是因为 ``__main__`` 被初始化的方式依赖于唤起解释器所附带的旗标和其他选项。" + +#: ../../reference/import.rst:966 +msgid "__main__.__spec__" +msgstr "__main__.__spec__" + +#: ../../reference/import.rst:968 +msgid "" +"Depending on how :mod:`__main__` is initialized, ``__main__.__spec__`` gets " +"set appropriately or to ``None``." +msgstr "根据 :mod:`__main__` 被初始化的方式,``__main__.__spec__`` 会被设置相应值或是 ``None``。" + +#: ../../reference/import.rst:971 +msgid "" +"When Python is started with the :option:`-m` option, ``__spec__`` is set to " +"the module spec of the corresponding module or package. ``__spec__`` is also" +" populated when the ``__main__`` module is loaded as part of executing a " +"directory, zipfile or other :data:`sys.path` entry." +msgstr "" +"当 Python 附加 :option:`-m` 选项启动时,``__spec__`` 会被设为相应模块或包的模块规格说明。 ``__spec__`` " +"也会在 ``__main__`` 模块作为执行某个目录,zip 文件或其它 :data:`sys.path` 条目的一部分加载时被填充。" + +#: ../../reference/import.rst:976 +msgid "" +"In :ref:`the remaining cases ` " +"``__main__.__spec__`` is set to ``None``, as the code used to populate the " +":mod:`__main__` does not correspond directly with an importable module:" +msgstr "" +"在 :ref:`其余的情况 ` 下 ``__main__.__spec__`` 会被设为 " +"``None``,因为用于填充 :mod:`__main__` 的代码不直接与可导入的模块相对应:" + +#: ../../reference/import.rst:980 +msgid "interactive prompt" +msgstr "交互型提示" + +#: ../../reference/import.rst:981 +msgid ":option:`-c` option" +msgstr ":option:`-c` 选项" + +#: ../../reference/import.rst:982 +msgid "running from stdin" +msgstr "从 stdin 运行" + +#: ../../reference/import.rst:983 +msgid "running directly from a source or bytecode file" +msgstr "直接从源码或字节码文件运行" + +#: ../../reference/import.rst:985 +msgid "" +"Note that ``__main__.__spec__`` is always ``None`` in the last case, *even " +"if* the file could technically be imported directly as a module instead. Use" +" the :option:`-m` switch if valid module metadata is desired in " +":mod:`__main__`." +msgstr "" +"请注意在最后一种情况中 ``__main__.__spec__`` 总是为 ``None``,*即使* 文件从技术上说可以作为一个模块被导入。 " +"如果想要让 :mod:`__main__` 中的元数据生效,请使用 :option:`-m` 开关。" + +#: ../../reference/import.rst:990 +msgid "" +"Note also that even when ``__main__`` corresponds with an importable module " +"and ``__main__.__spec__`` is set accordingly, they're still considered " +"*distinct* modules. This is due to the fact that blocks guarded by ``if " +"__name__ == \"__main__\":`` checks only execute when the module is used to " +"populate the ``__main__`` namespace, and not during normal import." +msgstr "" +"还要注意即使是在 ``__main__`` 对应于一个可导入模块且 ``__main__.__spec__`` 被相应地设定时,它们仍会被视为 " +"*不同的* 模块。 这是由于以下事实:使用 ``if __name__ == \"__main__\":`` 检测来保护的代码块仅会在模块被用来填充 " +"``__main__`` 命名空间时而非普通的导入时被执行。" + +#: ../../reference/import.rst:998 +msgid "Open issues" +msgstr "开放问题项" + +#: ../../reference/import.rst:1000 +msgid "XXX It would be really nice to have a diagram." +msgstr "XXX 最好是能增加一个图表。" + +#: ../../reference/import.rst:1002 +msgid "" +"XXX * (import_machinery.rst) how about a section devoted just to the " +"attributes of modules and packages, perhaps expanding upon or supplanting " +"the related entries in the data model reference page?" +msgstr "" +"XXX * (import_machinery.rst) 是否要专门增加一节来说明模块和包的属性,也许可以扩展或移植数据模型参考页中的相关条目?" + +#: ../../reference/import.rst:1006 +msgid "" +"XXX runpy, pkgutil, et al in the library manual should all get \"See Also\" " +"links at the top pointing to the new import system section." +msgstr "XXX 库手册中的 runpy 和 pkgutil 等等应该都在页面顶端增加指向新的导入系统章节的“另请参阅”链接。" + +#: ../../reference/import.rst:1009 +msgid "" +"XXX Add more explanation regarding the different ways in which ``__main__`` " +"is initialized?" +msgstr "XXX 是否要增加关于初始化 ``__main__`` 的不同方式的更多解释?" + +#: ../../reference/import.rst:1012 +msgid "" +"XXX Add more info on ``__main__`` quirks/pitfalls (i.e. copy from " +":pep:`395`)." +msgstr "XXX 增加更多有关 ``__main__`` 怪异/坑人特性的信息 (例如直接从 :pep:`395` 复制)。" + +#: ../../reference/import.rst:1017 +msgid "References" +msgstr "参考文献" + +#: ../../reference/import.rst:1019 +msgid "" +"The import machinery has evolved considerably since Python's early days. " +"The original `specification for packages " +"`_ is still available to read, " +"although some details have changed since the writing of that document." +msgstr "" +"导入机制自 Python 诞生之初至今已发生了很大的变化。 原始的 `包规格说明 " +"`_ 仍然可以查阅,但在撰写该文档之后许多相关细节已被修改。" + +#: ../../reference/import.rst:1024 +msgid "" +"The original specification for :data:`sys.meta_path` was :pep:`302`, with " +"subsequent extension in :pep:`420`." +msgstr "原始的 :data:`sys.meta_path` 规格说明见 :pep:`302`,后续的扩展说明见 :pep:`420`。" + +#: ../../reference/import.rst:1027 +msgid "" +":pep:`420` introduced :term:`namespace packages ` for " +"Python 3.3. :pep:`420` also introduced the :meth:`find_loader` protocol as " +"an alternative to :meth:`find_module`." +msgstr "" +":pep:`420` 为 Python 3.3 引入了 :term:`命名空间包 `。 :pep:`420` " +"还引入了 :meth:`find_loader` 协议作为 :meth:`find_module` 的替代。" + +#: ../../reference/import.rst:1031 +msgid "" +":pep:`366` describes the addition of the ``__package__`` attribute for " +"explicit relative imports in main modules." +msgstr ":pep:`366` 描述了新增的 ``__package__`` 属性,用于在模块中的显式相对导入。" + +#: ../../reference/import.rst:1034 +msgid "" +":pep:`328` introduced absolute and explicit relative imports and initially " +"proposed ``__name__`` for semantics :pep:`366` would eventually specify for " +"``__package__``." +msgstr "" +":pep:`328` 引入了绝对和显式相对导入,并初次提出了 ``__name__`` 语义,最终由 :pep:`366` 为 " +"``__package__`` 加入规范描述。" + +#: ../../reference/import.rst:1038 +msgid ":pep:`338` defines executing modules as scripts." +msgstr ":pep:`338` 定义了将模块作为脚本执行。" + +#: ../../reference/import.rst:1040 +msgid "" +":pep:`451` adds the encapsulation of per-module import state in spec " +"objects. It also off-loads most of the boilerplate responsibilities of " +"loaders back onto the import machinery. These changes allow the deprecation" +" of several APIs in the import system and also addition of new methods to " +"finders and loaders." +msgstr "" +":pep:`451` 在 spec 对象中增加了对每个模块导入状态的封装。 它还将加载器的大部分样板责任移交回导入机制中。 " +"这些改变允许弃用导入系统中的一些 API 并为查找器和加载器增加一些新的方法。" + +#: ../../reference/import.rst:1047 +msgid "Footnotes" +msgstr "备注" + +#: ../../reference/import.rst:1048 +msgid "See :class:`types.ModuleType`." +msgstr "参见 :class:`types.ModuleType`。" + +#: ../../reference/import.rst:1050 +msgid "" +"The importlib implementation avoids using the return value directly. " +"Instead, it gets the module object by looking the module name up in " +":data:`sys.modules`. The indirect effect of this is that an imported module" +" may replace itself in :data:`sys.modules`. This is implementation-specific" +" behavior that is not guaranteed to work in other Python implementations." +msgstr "" +"importlib 实现避免直接使用返回值。 而是通过在 :data:`sys.modules` 中查找模块名称来获取模块对象。 " +"这种方式的间接影响是被导入的模块可能在 :data:`sys.modules` 中替换其自身。 这属于具体实现的特定行为,不保证能在其他 Python " +"实现中起作用。" + +#: ../../reference/import.rst:1057 +msgid "" +"In legacy code, it is possible to find instances of " +":class:`imp.NullImporter` in the :data:`sys.path_importer_cache`. It is " +"recommended that code be changed to use ``None`` instead. See " +":ref:`portingpythoncode` for more details." +msgstr "" +"在遗留代码中,有可能在 :data:`sys.path_importer_cache` 中找到 :class:`imp.NullImporter` " +"的实例。 建议将这些代码修改为使用 ``None`` 代替。 详情参见 :ref:`portingpythoncode`。" diff --git a/reference/index.po b/reference/index.po new file mode 100644 index 000000000..9c96006d4 --- /dev/null +++ b/reference/index.po @@ -0,0 +1,42 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) 2001-2022, Python Software Foundation +# This file is distributed under the same license as the Python package. +# FIRST AUTHOR , YEAR. +# +# Translators: +# jaystone776 <1732865113@qq.com>, 2021 +# +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: Python 3.9\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2022-11-04 14:34+0000\n" +"PO-Revision-Date: 2017-02-16 23:38+0000\n" +"Last-Translator: jaystone776 <1732865113@qq.com>, 2021\n" +"Language-Team: Chinese (China) (https://www.transifex.com/python-doc/teams/5390/zh_CN/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: zh_CN\n" +"Plural-Forms: nplurals=1; plural=0;\n" + +#: ../../reference/index.rst:5 +msgid "The Python Language Reference" +msgstr "Python 语言参考手册" + +#: ../../reference/index.rst:7 +msgid "" +"This reference manual describes the syntax and \"core semantics\" of the " +"language. It is terse, but attempts to be exact and complete. The semantics " +"of non-essential built-in object types and of the built-in functions and " +"modules are described in :ref:`library-index`. For an informal introduction " +"to the language, see :ref:`tutorial-index`. For C or C++ programmers, two " +"additional manuals exist: :ref:`extending-index` describes the high-level " +"picture of how to write a Python extension module, and the :ref:`c-api-" +"index` describes the interfaces available to C/C++ programmers in detail." +msgstr "" +"本参考手册介绍了 Python 句法与“核心语义”。在力求简明扼要的同时,我们也尽量做到准确、完整。有关内置对象类型、内置函数、模块的语义在 " +":ref:`library-index` 中介绍。有关本语言的非正式介绍,请参阅 :ref:`tutorial-index` 。对于 C 或 C++ " +"程序员,我们还提供了两个手册::ref:`extending-index` 介绍了如何编写 Python 扩展模块,:ref:`c-api-index`" +" 则详细介绍了 C/C++ 的可用接口。" diff --git a/reference/introduction.po b/reference/introduction.po new file mode 100644 index 000000000..e48d70d90 --- /dev/null +++ b/reference/introduction.po @@ -0,0 +1,245 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) 2001-2022, Python Software Foundation +# This file is distributed under the same license as the Python package. +# FIRST AUTHOR , YEAR. +# +# Translators: +# Shengjing Zhu , 2018 +# Fei Yin , 2018 +# jaystone776 <1732865113@qq.com>, 2021 +# Freesand Leo , 2021 +# +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: Python 3.9\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2022-11-04 14:34+0000\n" +"PO-Revision-Date: 2017-02-16 23:39+0000\n" +"Last-Translator: Freesand Leo , 2021\n" +"Language-Team: Chinese (China) (https://www.transifex.com/python-doc/teams/5390/zh_CN/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: zh_CN\n" +"Plural-Forms: nplurals=1; plural=0;\n" + +#: ../../reference/introduction.rst:6 +msgid "Introduction" +msgstr "概述" + +#: ../../reference/introduction.rst:8 +msgid "" +"This reference manual describes the Python programming language. It is not " +"intended as a tutorial." +msgstr "本手册仅描述 Python 编程语言,不宜当作教程。" + +#: ../../reference/introduction.rst:11 +msgid "" +"While I am trying to be as precise as possible, I chose to use English " +"rather than formal specifications for everything except syntax and lexical " +"analysis. This should make the document more understandable to the average " +"reader, but will leave room for ambiguities. Consequently, if you were " +"coming from Mars and tried to re-implement Python from this document alone, " +"you might have to guess things and in fact you would probably end up " +"implementing quite a different language. On the other hand, if you are using" +" Python and wonder what the precise rules about a particular area of the " +"language are, you should definitely be able to find them here. If you would " +"like to see a more formal definition of the language, maybe you could " +"volunteer your time --- or invent a cloning machine :-)." +msgstr "" +"我希望尽可能地保证内容精确无误,但还是选择使用自然词句进行描述,正式的规格定义仅用于句法和词法解析。这样应该能使文档对于普通人来说更易理解,但也可能导致一些歧义。因此,如果你是来自火星并且想凭借这份文档把" +" Python 重新实现一遍,也许有时需要自行猜测,实际上最终大概会得到一个十分不同的语言。而在另一方面,如果你正在使用 Python " +"并且想了解有关该语言特定领域的精确规则,你应该能够在这里找到它们。如果你希望查看对该语言更正式的定义,也许你可以花些时间自己写上一份 --- " +"或者发明一台克隆机器 :-)" + +#: ../../reference/introduction.rst:23 +msgid "" +"It is dangerous to add too many implementation details to a language " +"reference document --- the implementation may change, and other " +"implementations of the same language may work differently. On the other " +"hand, CPython is the one Python implementation in widespread use (although " +"alternate implementations continue to gain support), and its particular " +"quirks are sometimes worth being mentioned, especially where the " +"implementation imposes additional limitations. Therefore, you'll find short " +"\"implementation notes\" sprinkled throughout the text." +msgstr "" +"在语言参考文档里加入过多的实现细节是很危险的 --- 具体实现可能发生改变,对同一语言的其他实现可能使用不同的方式。而在另一方面,CPython " +"是得到广泛使用的 Python 实现 " +"(然而其他一些实现的拥护者也在增加),其中的特殊细节有时也值得一提,特别是当其实现方式导致额外的限制时。因此,你会发现在正文里不时会跳出来一些简短的 " +"\"实现注释\"。" + +#: ../../reference/introduction.rst:32 +msgid "" +"Every Python implementation comes with a number of built-in and standard " +"modules. These are documented in :ref:`library-index`. A few built-in " +"modules are mentioned when they interact in a significant way with the " +"language definition." +msgstr "" +"每种 Python 实现都带有一些内置和标准的模块。相关的文档可参见 :ref:`library-index` " +"索引。少数内置模块也会在此提及,如果它们同语言描述存在明显的关联。" + +#: ../../reference/introduction.rst:41 +msgid "Alternate Implementations" +msgstr "其他实现" + +#: ../../reference/introduction.rst:43 +msgid "" +"Though there is one Python implementation which is by far the most popular, " +"there are some alternate implementations which are of particular interest to" +" different audiences." +msgstr "虽然官方 Python 实现差不多得到最广泛的欢迎,但也有一些其他实现对特定领域的用户来说更具吸引力。" + +#: ../../reference/introduction.rst:47 +msgid "Known implementations include:" +msgstr "知名的实现包括:" + +#: ../../reference/introduction.rst:51 +msgid "CPython" +msgstr "CPython" + +#: ../../reference/introduction.rst:50 +msgid "" +"This is the original and most-maintained implementation of Python, written " +"in C. New language features generally appear here first." +msgstr "这是最早出现并持续维护的 Python 实现,以 C 语言编写。新的语言特性通常在此率先添加。" + +#: ../../reference/introduction.rst:57 +msgid "Jython" +msgstr "Jython" + +#: ../../reference/introduction.rst:54 +msgid "" +"Python implemented in Java. This implementation can be used as a scripting " +"language for Java applications, or can be used to create applications using " +"the Java class libraries. It is also often used to create tests for Java " +"libraries. More information can be found at `the Jython website " +"`_." +msgstr "" +"以 Java 语言编写的 Python 实现。此实现可以作为 Java 应用的一个脚本语言,或者可以用来创建需要 Java " +"类库支持的应用。想了解更多信息可访问 `Jython 网站 `_。" + +#: ../../reference/introduction.rst:63 +msgid "Python for .NET" +msgstr "Python for .NET" + +#: ../../reference/introduction.rst:60 +msgid "" +"This implementation actually uses the CPython implementation, but is a " +"managed .NET application and makes .NET libraries available. It was created" +" by Brian Lloyd. For more information, see the `Python for .NET home page " +"`_." +msgstr "" +"此实现实际上使用了 CPython 实现,但是属于 .NET 托管应用并且可以引入 .NET 类库。它的创造者是 Brian " +"Lloyd。想了解详情可访问 `Python for .NET 主页 `_。" + +#: ../../reference/introduction.rst:69 +msgid "IronPython" +msgstr "IronPython" + +#: ../../reference/introduction.rst:66 +msgid "" +"An alternate Python for .NET. Unlike Python.NET, this is a complete Python " +"implementation that generates IL, and compiles Python code directly to .NET " +"assemblies. It was created by Jim Hugunin, the original creator of Jython." +" For more information, see `the IronPython website " +"`_." +msgstr "" +"另一个 .NET 的 Python 实现,与 Python.NET 不同点在于它是生成 IL 的完全 Python 实现,并且将 Python " +"代码直接编译为 .NET 程序集。它的创造者就是当初创造 Jython 的 Jim Hugunin。想了解详情可访问 `IronPython 网站 " +"`_。" + +#: ../../reference/introduction.rst:77 +msgid "PyPy" +msgstr "PyPy" + +#: ../../reference/introduction.rst:72 +msgid "" +"An implementation of Python written completely in Python. It supports " +"several advanced features not found in other implementations like stackless " +"support and a Just in Time compiler. One of the goals of the project is to " +"encourage experimentation with the language itself by making it easier to " +"modify the interpreter (since it is written in Python). Additional " +"information is available on `the PyPy project's home page " +"`_." +msgstr "" +"完全使用 Python 语言编写的 Python 实现。它支持多个其他实现所没有的高级特性,例如非栈式支持和 JIT " +"编译器等。此项目的目标之一是通过允许方便地修改解释器 (因为它是用 Python 编写的),鼓励该对语言本身进行试验。想了解详情可访问 `PyPy " +"项目主页 `_。" + +#: ../../reference/introduction.rst:79 +msgid "" +"Each of these implementations varies in some way from the language as " +"documented in this manual, or introduces specific information beyond what's " +"covered in the standard Python documentation. Please refer to the " +"implementation-specific documentation to determine what else you need to " +"know about the specific implementation you're using." +msgstr "" +"以上这些实现都可能在某些方面与此参考文档手册的描述有所差异,或是引入了超出标准 Python " +"文档范围的特定信息。请参考它们各自的专门文档,以确定你正在使用的这个实现有哪些你需要了解的东西。" + +#: ../../reference/introduction.rst:89 +msgid "Notation" +msgstr "标注" + +#: ../../reference/introduction.rst:93 +msgid "" +"The descriptions of lexical analysis and syntax use a modified BNF grammar " +"notation. This uses the following style of definition:" +msgstr "句法和词法解析的描述采用经过改进的 BNF 语法标注。这包含以下定义样式:" + +#: ../../reference/introduction.rst:100 +msgid "" +"The first line says that a ``name`` is an ``lc_letter`` followed by a " +"sequence of zero or more ``lc_letter``\\ s and underscores. An " +"``lc_letter`` in turn is any of the single characters ``'a'`` through " +"``'z'``. (This rule is actually adhered to for the names defined in lexical" +" and grammar rules in this document.)" +msgstr "" +"第一行表示 ``name`` 是 ``lc_letter`` 之后跟零个或多个 ``lc_letter`` 和下划线。而 ``lc_letter`` " +"则是任意单个 ``'a'`` 至 ``'z'`` 字符。(实际上在本文档中始终采用此规则来定义词法和语法规则的名称。)" + +#: ../../reference/introduction.rst:105 +msgid "" +"Each rule begins with a name (which is the name defined by the rule) and " +"``::=``. A vertical bar (``|``) is used to separate alternatives; it is the" +" least binding operator in this notation. A star (``*``) means zero or more" +" repetitions of the preceding item; likewise, a plus (``+``) means one or " +"more repetitions, and a phrase enclosed in square brackets (``[ ]``) means " +"zero or one occurrences (in other words, the enclosed phrase is optional). " +"The ``*`` and ``+`` operators bind as tightly as possible; parentheses are " +"used for grouping. Literal strings are enclosed in quotes. White space is " +"only meaningful to separate tokens. Rules are normally contained on a single" +" line; rules with many alternatives may be formatted alternatively with each" +" line after the first beginning with a vertical bar." +msgstr "" +"每条规则的开头是一个名称 (即该规则所定义的名称) 加上 ``::=``。 竖线 (``|``) 被用来分隔可选项,它是此标注中绑定程度最低的操作符。 " +"星号 (``*``) 表示前一项的零次或多次重复,类似地,加号 (``+``) 表示一次或多次重复,而由方括号括起的内容 (``[ ]``) " +"表示出现零次或一次 (或者说,这部分内容是可选的)。 ``*`` 和 ``+`` 操作符的绑定是最紧密的,圆括号用于分组。 字符串字面值包含在引号内。 " +"空格的作用仅限于分隔形符。 每条规则通常为一行,有许多个可选项的规则可能会以竖线为界分为多行。" + +#: ../../reference/introduction.rst:119 +msgid "" +"In lexical definitions (as the example above), two more conventions are " +"used: Two literal characters separated by three dots mean a choice of any " +"single character in the given (inclusive) range of ASCII characters. A " +"phrase between angular brackets (``<...>``) gives an informal description of" +" the symbol defined; e.g., this could be used to describe the notion of " +"'control character' if needed." +msgstr "" +"在词法定义中 (如上述示例),还额外使用了两个约定: 由三个点号分隔的两个字符字面值表示在指定 (闭) 区间范围内的任意单个 ASCII 字符。由尖括号" +" (``<...>``) 括起来的内容是对于所定义符号的非正式描述;即可以在必要时用来说明 '控制字符' 的意图。" + +#: ../../reference/introduction.rst:126 +msgid "" +"Even though the notation used is almost the same, there is a big difference " +"between the meaning of lexical and syntactic definitions: a lexical " +"definition operates on the individual characters of the input source, while " +"a syntax definition operates on the stream of tokens generated by the " +"lexical analysis. All uses of BNF in the next chapter (\"Lexical Analysis\")" +" are lexical definitions; uses in subsequent chapters are syntactic " +"definitions." +msgstr "" +"虽然所用的标注方式几乎相同,但是词法定义和句法定义是存在很大区别的: " +"词法定义作用于输入源中单独的字符,而句法定义则作用于由词法分析所生成的形符流。在下一章节 (\"词法分析\") 中使用的 BNF " +"全部都是词法定义;在之后的章节中使用的则是句法定义。" diff --git a/reference/lexical_analysis.po b/reference/lexical_analysis.po new file mode 100644 index 000000000..9ac6a6b4f --- /dev/null +++ b/reference/lexical_analysis.po @@ -0,0 +1,1193 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) 2001-2024, Python Software Foundation +# This file is distributed under the same license as the Python package. +# FIRST AUTHOR , YEAR. +# +# Translators: +# jaystone776 <1732865113@qq.com>, 2021 +# Freesand Leo , 2022 +# Rafael Fontenelle , 2024 +# +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: Python 3.9\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2024-05-31 16:34+0000\n" +"PO-Revision-Date: 2017-02-16 23:39+0000\n" +"Last-Translator: Rafael Fontenelle , 2024\n" +"Language-Team: Chinese (China) (https://app.transifex.com/python-doc/teams/5390/zh_CN/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: zh_CN\n" +"Plural-Forms: nplurals=1; plural=0;\n" + +#: ../../reference/lexical_analysis.rst:6 +msgid "Lexical analysis" +msgstr "词法分析" + +#: ../../reference/lexical_analysis.rst:10 +msgid "" +"A Python program is read by a *parser*. Input to the parser is a stream of " +"*tokens*, generated by the *lexical analyzer*. This chapter describes how " +"the lexical analyzer breaks a file into tokens." +msgstr "Python 程序由 *解析器* 读取,输入解析器的是 *词法分析器* 生成的 *形符* 流。本章介绍词法分析器怎样把文件拆成形符。" + +#: ../../reference/lexical_analysis.rst:14 +msgid "" +"Python reads program text as Unicode code points; the encoding of a source " +"file can be given by an encoding declaration and defaults to UTF-8, see " +":pep:`3120` for details. If the source file cannot be decoded, a " +":exc:`SyntaxError` is raised." +msgstr "" +"Python 将读取的程序文本转为 Unicode 代码点;编码声明用于指定源文件的编码,默认为 UTF-8,详见 " +":pep:`3120`。源文件不能解码时,触发 :exc:`SyntaxError`。" + +#: ../../reference/lexical_analysis.rst:23 +msgid "Line structure" +msgstr "行结构" + +#: ../../reference/lexical_analysis.rst:27 +msgid "A Python program is divided into a number of *logical lines*." +msgstr "Python 程序可以拆分为多个 *逻辑行*。" + +#: ../../reference/lexical_analysis.rst:33 +msgid "Logical lines" +msgstr "逻辑行" + +#: ../../reference/lexical_analysis.rst:37 +msgid "" +"The end of a logical line is represented by the token NEWLINE. Statements " +"cannot cross logical line boundaries except where NEWLINE is allowed by the " +"syntax (e.g., between statements in compound statements). A logical line is " +"constructed from one or more *physical lines* by following the explicit or " +"implicit *line joining* rules." +msgstr "" +"NEWLINE 形符表示结束逻辑行。语句不能超出逻辑行的边界,除非句法支持 NEWLINE (例如,复合语句中的多行子语句)。根据显式或隐式 *行拼接*" +" 规则,一个或多个 *物理行* 可组成逻辑行。" + +#: ../../reference/lexical_analysis.rst:47 +msgid "Physical lines" +msgstr "物理行" + +#: ../../reference/lexical_analysis.rst:49 +msgid "" +"A physical line is a sequence of characters terminated by an end-of-line " +"sequence. In source files and strings, any of the standard platform line " +"termination sequences can be used - the Unix form using ASCII LF (linefeed)," +" the Windows form using the ASCII sequence CR LF (return followed by " +"linefeed), or the old Macintosh form using the ASCII CR (return) character." +" All of these forms can be used equally, regardless of platform. The end of" +" input also serves as an implicit terminator for the final physical line." +msgstr "" +"物理行是一序列字符,由行尾序列终止。源文件和字符串可使用任意标准平台行终止序列 - Unix ASCII 字符 LF (换行)、 Windows " +"ASCII 字符序列 CR LF (回车换行)、或老式 Macintosh ASCII 字符 CR " +"(回车)。不管在哪个平台,这些形式均可等价使用。输入结束也可以用作最终物理行的隐式终止符。" + +#: ../../reference/lexical_analysis.rst:57 +msgid "" +"When embedding Python, source code strings should be passed to Python APIs " +"using the standard C conventions for newline characters (the ``\\n`` " +"character, representing ASCII LF, is the line terminator)." +msgstr "" +"嵌入 Python 时,传入 Python API 的源码字符串应使用 C 标准惯例换行符(``\\n``,代表 ASCII 字符 LF, 行终止符)。" + +#: ../../reference/lexical_analysis.rst:65 +msgid "Comments" +msgstr "注释" + +#: ../../reference/lexical_analysis.rst:70 +msgid "" +"A comment starts with a hash character (``#``) that is not part of a string " +"literal, and ends at the end of the physical line. A comment signifies the " +"end of the logical line unless the implicit line joining rules are invoked. " +"Comments are ignored by the syntax." +msgstr "" +"注释以井号 (``#``) 开头,在物理行末尾截止。注意,井号不是字符串字面值。除非应用隐式行拼接规则,否则,注释代表逻辑行结束。句法不解析注释。" + +#: ../../reference/lexical_analysis.rst:79 +msgid "Encoding declarations" +msgstr "编码声明" + +#: ../../reference/lexical_analysis.rst:84 +msgid "" +"If a comment in the first or second line of the Python script matches the " +"regular expression ``coding[=:]\\s*([-\\w.]+)``, this comment is processed " +"as an encoding declaration; the first group of this expression names the " +"encoding of the source code file. The encoding declaration must appear on a " +"line of its own. If it is the second line, the first line must also be a " +"comment-only line. The recommended forms of an encoding expression are ::" +msgstr "" +"Python 脚本第一或第二行的注释匹配正则表达式 ``coding[=:]\\s*([-\\w.]+)`` " +"时,该注释会被当作编码声明;这个表达式的第一组指定了源码文件的编码。编码声明必须独占一行,在第二行时,则第一行必须也是注释。编码表达式的形式如下:" + +#: ../../reference/lexical_analysis.rst:93 +msgid "which is recognized also by GNU Emacs, and ::" +msgstr "这也是 GNU Emacs 认可的形式,此外,还支持如下形式:" + +#: ../../reference/lexical_analysis.rst:97 +msgid "which is recognized by Bram Moolenaar's VIM." +msgstr "这是 Bram Moolenaar 的 VIM 认可的形式。" + +#: ../../reference/lexical_analysis.rst:99 +msgid "" +"If no encoding declaration is found, the default encoding is UTF-8. In " +"addition, if the first bytes of the file are the UTF-8 byte-order mark " +"(``b'\\xef\\xbb\\xbf'``), the declared file encoding is UTF-8 (this is " +"supported, among others, by Microsoft's :program:`notepad`)." +msgstr "" +"没有编码声明时,默认编码为 UTF-8。此外,如果文件的首字节为 UTF-8 " +"字节顺序标志(``b'\\xef\\xbb\\xbf'``),文件编码也声明为 UTF-8(这是 Microsoft 的 " +":program:`notepad` 等软件支持的形式)。" + +#: ../../reference/lexical_analysis.rst:104 +msgid "" +"If an encoding is declared, the encoding name must be recognized by Python " +"(see :ref:`standard-encodings`). The encoding is used for all lexical " +"analysis, including string literals, comments and identifiers." +msgstr "" +"如果声明了编码格式,该编码格式的名称必须是 Python 可识别的 (参见 :ref:`standard-encodings`)。 " +"编码格式会被用于所有的词法分析,包括字符串字面值、注释和标识符等。" + +#: ../../reference/lexical_analysis.rst:113 +msgid "Explicit line joining" +msgstr "显式拼接行" + +#: ../../reference/lexical_analysis.rst:117 +msgid "" +"Two or more physical lines may be joined into logical lines using backslash " +"characters (``\\``), as follows: when a physical line ends in a backslash " +"that is not part of a string literal or comment, it is joined with the " +"following forming a single logical line, deleting the backslash and the " +"following end-of-line character. For example::" +msgstr "" +"两个及两个以上的物理行可用反斜杠(``\\``)拼接为一个逻辑行,规则如下:以不在字符串或注释内的反斜杠结尾时,物理行将与下一行拼接成一个逻辑行,并删除反斜杠及其后的换行符。例如:" + +#: ../../reference/lexical_analysis.rst:128 +msgid "" +"A line ending in a backslash cannot carry a comment. A backslash does not " +"continue a comment. A backslash does not continue a token except for string" +" literals (i.e., tokens other than string literals cannot be split across " +"physical lines using a backslash). A backslash is illegal elsewhere on a " +"line outside a string literal." +msgstr "" +"以反斜杠结尾的行,不能加注释;反斜杠也不能拼接注释。除字符串字面值外,反斜杠不能拼接形符(如,除字符串字面值外,不能用反斜杠把形符切分至两个物理行)。反斜杠只能在代码的字符串字面值里,在其他任何位置都是非法的。" + +#: ../../reference/lexical_analysis.rst:138 +msgid "Implicit line joining" +msgstr "隐式拼接行" + +#: ../../reference/lexical_analysis.rst:140 +msgid "" +"Expressions in parentheses, square brackets or curly braces can be split " +"over more than one physical line without using backslashes. For example::" +msgstr "圆括号、方括号、花括号内的表达式可以分成多个物理行,不必使用反斜杠。例如:" + +#: ../../reference/lexical_analysis.rst:148 +msgid "" +"Implicitly continued lines can carry comments. The indentation of the " +"continuation lines is not important. Blank continuation lines are allowed. " +"There is no NEWLINE token between implicit continuation lines. Implicitly " +"continued lines can also occur within triple-quoted strings (see below); in " +"that case they cannot carry comments." +msgstr "" +"隐式行拼接可含注释;后续行的缩进并不重要;还支持空的后续行。隐式拼接行之间没有 NEWLINE " +"形符。三引号字符串支持隐式拼接行(见下文),但不支持注释。" + +#: ../../reference/lexical_analysis.rst:158 +msgid "Blank lines" +msgstr "空白行" + +#: ../../reference/lexical_analysis.rst:162 +msgid "" +"A logical line that contains only spaces, tabs, formfeeds and possibly a " +"comment, is ignored (i.e., no NEWLINE token is generated). During " +"interactive input of statements, handling of a blank line may differ " +"depending on the implementation of the read-eval-print loop. In the " +"standard interactive interpreter, an entirely blank logical line (i.e. one " +"containing not even whitespace or a comment) terminates a multi-line " +"statement." +msgstr "" +"只包含空格符、制表符、换页符、注释的逻辑行会被忽略(即不生成 NEWLINE 形符)。交互模式输入语句时,空白行的处理方式可能因读取 - 求值 - " +"打印循环(REPL)的具体实现方式而不同。标准交互模式解释器中,完全空白的逻辑行(即连空格或注释都没有)将结束多行复合语句。" + +#: ../../reference/lexical_analysis.rst:173 +msgid "Indentation" +msgstr "缩进" + +#: ../../reference/lexical_analysis.rst:177 +msgid "" +"Leading whitespace (spaces and tabs) at the beginning of a logical line is " +"used to compute the indentation level of the line, which in turn is used to " +"determine the grouping of statements." +msgstr "逻辑行开头的空白符(空格符和制表符)用于计算该行的缩进层级,决定语句组块。" + +#: ../../reference/lexical_analysis.rst:181 +msgid "" +"Tabs are replaced (from left to right) by one to eight spaces such that the " +"total number of characters up to and including the replacement is a multiple" +" of eight (this is intended to be the same rule as used by Unix). The total" +" number of spaces preceding the first non-blank character then determines " +"the line's indentation. Indentation cannot be split over multiple physical " +"lines using backslashes; the whitespace up to the first backslash determines" +" the indentation." +msgstr "" +"制表符(从左至右)被替换为一至八个空格,缩进空格的总数是八的倍数(与 Unix " +"的规则保持一致)。首个非空字符前的空格数决定了该行的缩进层次。缩进不能用反斜杠进行多行拼接;首个反斜杠之前的空白符决定了缩进的层次。" + +#: ../../reference/lexical_analysis.rst:189 +msgid "" +"Indentation is rejected as inconsistent if a source file mixes tabs and " +"spaces in a way that makes the meaning dependent on the worth of a tab in " +"spaces; a :exc:`TabError` is raised in that case." +msgstr "" +"源文件混用制表符和空格符缩进时,因空格数量与制表符相关,由此产生的不一致将导致不能正常识别缩进层次,从而触发 :exc:`TabError`。" + +#: ../../reference/lexical_analysis.rst:193 +msgid "" +"**Cross-platform compatibility note:** because of the nature of text editors" +" on non-UNIX platforms, it is unwise to use a mixture of spaces and tabs for" +" the indentation in a single source file. It should also be noted that " +"different platforms may explicitly limit the maximum indentation level." +msgstr "" +"**跨平台兼容性说明:** 鉴于非 UNIX " +"平台文本编辑器本身的特性,请勿在源文件中混用制表符和空格符。另外也请注意,不同平台有可能会显式限制最大缩进层级。" + +#: ../../reference/lexical_analysis.rst:198 +msgid "" +"A formfeed character may be present at the start of the line; it will be " +"ignored for the indentation calculations above. Formfeed characters " +"occurring elsewhere in the leading whitespace have an undefined effect (for " +"instance, they may reset the space count to zero)." +msgstr "行首含换页符时,缩进计算将忽略该换页符。换页符在行首空白符内其他位置的效果未定义(例如,可能导致空格计数重置为零)。" + +#: ../../reference/lexical_analysis.rst:205 +msgid "" +"The indentation levels of consecutive lines are used to generate INDENT and " +"DEDENT tokens, using a stack, as follows." +msgstr "连续行的缩进层级以堆栈形式生成 INDENT 和 DEDENT 形符,说明如下。" + +#: ../../reference/lexical_analysis.rst:208 +msgid "" +"Before the first line of the file is read, a single zero is pushed on the " +"stack; this will never be popped off again. The numbers pushed on the stack" +" will always be strictly increasing from bottom to top. At the beginning of" +" each logical line, the line's indentation level is compared to the top of " +"the stack. If it is equal, nothing happens. If it is larger, it is pushed on" +" the stack, and one INDENT token is generated. If it is smaller, it *must* " +"be one of the numbers occurring on the stack; all numbers on the stack that " +"are larger are popped off, and for each number popped off a DEDENT token is " +"generated. At the end of the file, a DEDENT token is generated for each " +"number remaining on the stack that is larger than zero." +msgstr "" +"读取文件第一行前,先向栈推入一个零值,该零值不会被移除。推入栈的层级值从底至顶持续增加。每个逻辑行开头的行缩进层级将与栈顶行比较。如果相等,则不做处理。如果新行层级较高,则会被推入栈顶,并生成一个" +" INDENT 形符。如果新行层级较低,则 *应当* 是栈中的层级数值之一;栈中高于该层级的所有数值都将被移除,每移除一级数值生成一个 DEDENT " +"形符。文件末尾,栈中剩余的每个大于零的数值生成一个 DEDENT 形符。" + +#: ../../reference/lexical_analysis.rst:219 +msgid "" +"Here is an example of a correctly (though confusingly) indented piece of " +"Python code::" +msgstr "下面的 Python 代码缩进示例虽然正确,但含混不清:" + +#: ../../reference/lexical_analysis.rst:234 +msgid "The following example shows various indentation errors::" +msgstr "下例展示了多种缩进错误:" + +#: ../../reference/lexical_analysis.rst:244 +msgid "" +"(Actually, the first three errors are detected by the parser; only the last " +"error is found by the lexical analyzer --- the indentation of ``return r`` " +"does not match a level popped off the stack.)" +msgstr "" +"(实际上,解析器可以识别前三个错误;只有最后一个错误由词法分析器识别 --- ``return r`` 的缩进无法匹配从栈里移除的缩进层级。)" + +#: ../../reference/lexical_analysis.rst:252 +msgid "Whitespace between tokens" +msgstr "形符间的空白字符" + +#: ../../reference/lexical_analysis.rst:254 +msgid "" +"Except at the beginning of a logical line or in string literals, the " +"whitespace characters space, tab and formfeed can be used interchangeably to" +" separate tokens. Whitespace is needed between two tokens only if their " +"concatenation could otherwise be interpreted as a different token (e.g., ab " +"is one token, but a b is two tokens)." +msgstr "" +"除非在逻辑行开头或字符串内,空格符、制表符、换页符等空白符都可以分隔形符。要把两个相连形符解读为不同形符,需要用空白符分隔(例如,ab 是一个形符,a " +"b 则是两个形符)。" + +#: ../../reference/lexical_analysis.rst:264 +msgid "Other tokens" +msgstr "其他形符" + +#: ../../reference/lexical_analysis.rst:266 +msgid "" +"Besides NEWLINE, INDENT and DEDENT, the following categories of tokens " +"exist: *identifiers*, *keywords*, *literals*, *operators*, and *delimiters*." +" Whitespace characters (other than line terminators, discussed earlier) are " +"not tokens, but serve to delimit tokens. Where ambiguity exists, a token " +"comprises the longest possible string that forms a legal token, when read " +"from left to right." +msgstr "" +"除 NEWLINE、INDENT、DEDENT 外,还有 *标识符*、*关键字*、*字面值*、*运算符* 、*分隔符* 等形符。 " +"空白符(前述的行终止符除外)不是形符,可用于分隔形符。存在二义性时,将从左至右,读取尽量长的字符串组成合法形符。" + +#: ../../reference/lexical_analysis.rst:276 +msgid "Identifiers and keywords" +msgstr "标识符和关键字" + +#: ../../reference/lexical_analysis.rst:280 +msgid "" +"Identifiers (also referred to as *names*) are described by the following " +"lexical definitions." +msgstr "标识符(也称为 *名称*)的词法定义说明如下。" + +#: ../../reference/lexical_analysis.rst:283 +msgid "" +"The syntax of identifiers in Python is based on the Unicode standard annex " +"UAX-31, with elaboration and changes as defined below; see also :pep:`3131` " +"for further details." +msgstr "Python 标识符的句法基于 Unicode 标准附件 UAX-31,并加入了下文定义的细化与修改;详见 :pep:`3131` 。" + +#: ../../reference/lexical_analysis.rst:287 +msgid "" +"Within the ASCII range (U+0001..U+007F), the valid characters for " +"identifiers are the same as in Python 2.x: the uppercase and lowercase " +"letters ``A`` through ``Z``, the underscore ``_`` and, except for the first " +"character, the digits ``0`` through ``9``." +msgstr "" +"与 Python 2.x 一样,在 ASCII 范围内(U+0001..U+007F),有效标识符字符为: 大小写字母 ``A`` 至 " +"``Z``、下划线 ``_`` 、数字 ``0`` 至 ``9``,但不能以数字开头。" + +#: ../../reference/lexical_analysis.rst:292 +msgid "" +"Python 3.0 introduces additional characters from outside the ASCII range " +"(see :pep:`3131`). For these characters, the classification uses the " +"version of the Unicode Character Database as included in the " +":mod:`unicodedata` module." +msgstr "" +"Python 3.0 引入了 ASCII 之外的更多字符(请参阅 :pep:`3131`)。这些字符的分类使用 :mod:`unicodedata` " +"模块中的 Unicode 字符数据库版本。" + +#: ../../reference/lexical_analysis.rst:296 +msgid "Identifiers are unlimited in length. Case is significant." +msgstr "标识符的长度没有限制,但区分大小写。" + +#: ../../reference/lexical_analysis.rst:305 +msgid "The Unicode category codes mentioned above stand for:" +msgstr "上述 Unicode 类别码的含义:" + +#: ../../reference/lexical_analysis.rst:307 +msgid "*Lu* - uppercase letters" +msgstr "*Lu* - 大写字母" + +#: ../../reference/lexical_analysis.rst:308 +msgid "*Ll* - lowercase letters" +msgstr "*Ll* - 小写字母" + +#: ../../reference/lexical_analysis.rst:309 +msgid "*Lt* - titlecase letters" +msgstr "*Lt* - 词首大写字母" + +#: ../../reference/lexical_analysis.rst:310 +msgid "*Lm* - modifier letters" +msgstr "*Lm* - 修饰符字母" + +#: ../../reference/lexical_analysis.rst:311 +msgid "*Lo* - other letters" +msgstr "*Lo* - 其他字母" + +#: ../../reference/lexical_analysis.rst:312 +msgid "*Nl* - letter numbers" +msgstr "*Nl* - 字母数字" + +#: ../../reference/lexical_analysis.rst:313 +msgid "*Mn* - nonspacing marks" +msgstr "*Mn* - 非空白标识" + +#: ../../reference/lexical_analysis.rst:314 +msgid "*Mc* - spacing combining marks" +msgstr "*Mc* - 含空白标识" + +#: ../../reference/lexical_analysis.rst:315 +msgid "*Nd* - decimal numbers" +msgstr "*Nd* - 十进制数字" + +#: ../../reference/lexical_analysis.rst:316 +msgid "*Pc* - connector punctuations" +msgstr "*Pc* - 连接标点" + +#: ../../reference/lexical_analysis.rst:317 +msgid "" +"*Other_ID_Start* - explicit list of characters in `PropList.txt " +"`_ to support " +"backwards compatibility" +msgstr "" +"*Other_ID_Start* - 由 `PropList.txt " +"`_ " +"定义的显式字符列表,用于支持向后兼容" + +#: ../../reference/lexical_analysis.rst:320 +msgid "*Other_ID_Continue* - likewise" +msgstr "*Other_ID_Continue* - 同上" + +#: ../../reference/lexical_analysis.rst:322 +msgid "" +"All identifiers are converted into the normal form NFKC while parsing; " +"comparison of identifiers is based on NFKC." +msgstr "在解析时,所有标识符都会被转换为规范形式 NFKC;标识符的比较都是基于 NFKC。" + +#: ../../reference/lexical_analysis.rst:325 +msgid "" +"A non-normative HTML file listing all valid identifier characters for " +"Unicode 4.1 can be found at " +"https://www.unicode.org/Public/13.0.0/ucd/DerivedCoreProperties.txt" +msgstr "" +"Unicode 4.1 中所有可用的标识符字符详见此 HTML 文件 " +"https://www.unicode.org/Public/13.0.0/ucd/DerivedCoreProperties.txt" + +#: ../../reference/lexical_analysis.rst:333 +msgid "Keywords" +msgstr "关键字" + +#: ../../reference/lexical_analysis.rst:339 +msgid "" +"The following identifiers are used as reserved words, or *keywords* of the " +"language, and cannot be used as ordinary identifiers. They must be spelled " +"exactly as written here:" +msgstr "以下标识符为保留字,或称 *关键字*,不可用于普通标识符。关键字的拼写必须与这里列出的完全一致:" + +#: ../../reference/lexical_analysis.rst:359 +msgid "Reserved classes of identifiers" +msgstr "保留的标识符类" + +#: ../../reference/lexical_analysis.rst:361 +msgid "" +"Certain classes of identifiers (besides keywords) have special meanings. " +"These classes are identified by the patterns of leading and trailing " +"underscore characters:" +msgstr "某些标识符类(除了关键字)具有特殊含义。这些类的命名模式以下划线字符开头,并以下划线结尾:" + +#: ../../reference/lexical_analysis.rst:375 +msgid "``_*``" +msgstr "``_*``" + +#: ../../reference/lexical_analysis.rst:366 +msgid "" +"Not imported by ``from module import *``. The special identifier ``_`` is " +"used in the interactive interpreter to store the result of the last " +"evaluation; it is stored in the :mod:`builtins` module. When not in " +"interactive mode, ``_`` has no special meaning and is not defined. See " +"section :ref:`import`." +msgstr "" +"``from module import *`` 时,不会导入。交互式解释器中,特殊标识符 ``_`` 用于存储最近一次求值的结果;该标识符保存在 " +":mod:`builtins` 模块里。不处于交互模式时,``_`` 没有特殊含义,也没有预定义。详见 :ref:`import`。" + +#: ../../reference/lexical_analysis.rst:373 +msgid "" +"The name ``_`` is often used in conjunction with internationalization; refer" +" to the documentation for the :mod:`gettext` module for more information on " +"this convention." +msgstr "``_`` 常用于连接国际化文本;详见 :mod:`gettext` 模块文档。" + +#: ../../reference/lexical_analysis.rst:383 +msgid "``__*__``" +msgstr "``__*__``" + +#: ../../reference/lexical_analysis.rst:378 +msgid "" +"System-defined names, informally known as \"dunder\" names. These names are " +"defined by the interpreter and its implementation (including the standard " +"library). Current system names are discussed in the :ref:`specialnames` " +"section and elsewhere. More will likely be defined in future versions of " +"Python. *Any* use of ``__*__`` names, in any context, that does not follow " +"explicitly documented use, is subject to breakage without warning." +msgstr "" +"系统定义的名称,通常简称为 \"dunder\" 。这些名称由解释器及其实现(包括标准库)定义。现有系统定义名称相关的论述详见 " +":ref:`specialnames` 等章节。Python 未来版本中还将定义更多此类名称。任何情况下,*任何* 不显式遵从 ``__*__`` " +"名称的文档用法,都可能导致无警告提示的错误。" + +#: ../../reference/lexical_analysis.rst:390 +msgid "``__*``" +msgstr "``__*``" + +#: ../../reference/lexical_analysis.rst:386 +msgid "" +"Class-private names. Names in this category, when used within the context " +"of a class definition, are re-written to use a mangled form to help avoid " +"name clashes between \"private\" attributes of base and derived classes. See" +" section :ref:`atom-identifiers`." +msgstr "" +"类的私有名称。类定义时,此类名称以一种混合形式重写,以避免基类及派生类的 \"私有\" 属性之间产生名称冲突。详见 :ref:`atom-" +"identifiers`。" + +#: ../../reference/lexical_analysis.rst:395 +msgid "Literals" +msgstr "字面值" + +#: ../../reference/lexical_analysis.rst:399 +msgid "Literals are notations for constant values of some built-in types." +msgstr "字面值是内置类型常量值的表示法。" + +#: ../../reference/lexical_analysis.rst:410 +msgid "String and Bytes literals" +msgstr "字符串与字节串字面值" + +#: ../../reference/lexical_analysis.rst:412 +msgid "String literals are described by the following lexical definitions:" +msgstr "字符串字面值的词法定义如下:" + +#: ../../reference/lexical_analysis.rst:437 +msgid "" +"One syntactic restriction not indicated by these productions is that " +"whitespace is not allowed between the :token:`stringprefix` or " +":token:`bytesprefix` and the rest of the literal. The source character set " +"is defined by the encoding declaration; it is UTF-8 if no encoding " +"declaration is given in the source file; see section :ref:`encodings`." +msgstr "" +"上述产生式没有说明以下句法限制,:token:`stringprefix` 或 :token:`bytesprefix` " +"与其他字面值之间不允许有空白符。源字符集由编码声明定义;源文件没有编码声明时,默认为 UTF-8;详见 :ref:`encodings`。" + +#: ../../reference/lexical_analysis.rst:447 +msgid "" +"In plain English: Both types of literals can be enclosed in matching single " +"quotes (``'``) or double quotes (``\"``). They can also be enclosed in " +"matching groups of three single or double quotes (these are generally " +"referred to as *triple-quoted strings*). The backslash (``\\``) character is" +" used to give special meaning to otherwise ordinary characters like ``n``, " +"which means 'newline' when escaped (``\\n``). It can also be used to escape " +"characters that otherwise have a special meaning, such as newline, backslash" +" itself, or the quote character. See :ref:`escape sequences ` below for examples." +msgstr "" +"直白的说明:两种类型的字面值都可用成对的单引号 (``'``) 或双引号 (``\"``) 括起来。 它们还可以用成对的连续三个单引号或双引号括起来 " +"(这通常被称为 *三重引号字符串*)。 反斜杠 (``\\``) 字符被用来给予普通的字符特殊含义例如 ``n``,当用斜杠转义时 (``\\n``) " +"表示 '换行'。 它还可以被用来对具有特殊含义的字符进行转义,例如换行符、反斜杠本身或者引号等。 请参阅下面的 :ref:`转义序列 ` 查看示例。" + +#: ../../reference/lexical_analysis.rst:460 +msgid "" +"Bytes literals are always prefixed with ``'b'`` or ``'B'``; they produce an " +"instance of the :class:`bytes` type instead of the :class:`str` type. They " +"may only contain ASCII characters; bytes with a numeric value of 128 or " +"greater must be expressed with escapes." +msgstr "" +"字节串字面值要加前缀 ``'b'`` 或 ``'B'``;生成的是类型 :class:`bytes` 的实例,不是类型 :class:`str` " +"的实例;字节串只能包含 ASCII 字符;字节串数值大于等于 128 时,必须用转义表示。" + +#: ../../reference/lexical_analysis.rst:469 +msgid "" +"Both string and bytes literals may optionally be prefixed with a letter " +"``'r'`` or ``'R'``; such strings are called :dfn:`raw strings` and treat " +"backslashes as literal characters. As a result, in string literals, " +"``'\\U'`` and ``'\\u'`` escapes in raw strings are not treated specially. " +"Given that Python 2.x's raw unicode literals behave differently than Python " +"3.x's the ``'ur'`` syntax is not supported." +msgstr "" +"字符串和字节串都可以加前缀 ``'r'`` 或 ``'R'``,称为 " +":dfn:`原始字符串`,原始字符串把反斜杠当作原义字符,不执行转义操作。因此,原始字符串不转义 ``'\\U'`` 和 ``'\\u'``。与 " +"Python 2.x 的原始 unicode 字面值操作不同,Python 3.x 现已不支持 ``'ur'`` 句法。" + +#: ../../reference/lexical_analysis.rst:476 +msgid "" +"The ``'rb'`` prefix of raw bytes literals has been added as a synonym of " +"``'br'``." +msgstr "新增原始字节串 ``'rb'`` 前缀,是 ``'br'`` 的同义词。" + +#: ../../reference/lexical_analysis.rst:480 +msgid "" +"Support for the unicode legacy literal (``u'value'``) was reintroduced to " +"simplify the maintenance of dual Python 2.x and 3.x codebases. See " +":pep:`414` for more information." +msgstr "" +"支持 unicode 字面值(``u'value'``)遗留代码,简化 Python 2.x 和 3.x 并行代码库的维护工作。详见 " +":pep:`414`。" + +#: ../../reference/lexical_analysis.rst:489 +msgid "" +"A string literal with ``'f'`` or ``'F'`` in its prefix is a :dfn:`formatted " +"string literal`; see :ref:`f-strings`. The ``'f'`` may be combined with " +"``'r'``, but not with ``'b'`` or ``'u'``, therefore raw formatted strings " +"are possible, but formatted bytes literals are not." +msgstr "" +"前缀为 ``'f'`` 或 ``'F'`` 的字符串称为 :dfn:`格式字符串`;详见 :ref:`f-strings`。``'f'`` 可与 " +"``'r'`` 连用,但不能与 ``'b'`` 或 ``'u'`` 连用,因此,可以使用原始格式字符串,但不能使用格式字节串字面值。" + +#: ../../reference/lexical_analysis.rst:494 +msgid "" +"In triple-quoted literals, unescaped newlines and quotes are allowed (and " +"are retained), except that three unescaped quotes in a row terminate the " +"literal. (A \"quote\" is the character used to open the literal, i.e. " +"either ``'`` or ``\"``.)" +msgstr "" +"三引号字面值可以包含未转义的换行和引号(原样保留),除了连在一起的,用于终止字面值的,未经转义的三个引号。(\"引号\" 是启用字面值的字符,可以是 " +"``'``,也可以是 ``\"``。)" + +#: ../../reference/lexical_analysis.rst:515 +msgid "" +"Unless an ``'r'`` or ``'R'`` prefix is present, escape sequences in string " +"and bytes literals are interpreted according to rules similar to those used " +"by Standard C. The recognized escape sequences are:" +msgstr "如未标注 ``'r'`` 或 ``'R'`` 前缀,字符串和字节串字面值中,转义序列以类似 C 标准的规则进行解释。可用的转义序列如下:" + +#: ../../reference/lexical_analysis.rst:520 +#: ../../reference/lexical_analysis.rst:553 +msgid "Escape Sequence" +msgstr "转义序列" + +#: ../../reference/lexical_analysis.rst:520 +#: ../../reference/lexical_analysis.rst:553 +msgid "Meaning" +msgstr "含意" + +#: ../../reference/lexical_analysis.rst:520 +#: ../../reference/lexical_analysis.rst:553 +msgid "Notes" +msgstr "备注" + +#: ../../reference/lexical_analysis.rst:522 +msgid "``\\newline``" +msgstr "``\\newline``" + +#: ../../reference/lexical_analysis.rst:522 +msgid "Backslash and newline ignored" +msgstr "忽略反斜杠与换行符" + +#: ../../reference/lexical_analysis.rst:524 +msgid "``\\\\``" +msgstr "``\\\\``" + +#: ../../reference/lexical_analysis.rst:524 +msgid "Backslash (``\\``)" +msgstr "反斜杠(``\\``)" + +#: ../../reference/lexical_analysis.rst:526 +msgid "``\\'``" +msgstr "``\\'``" + +#: ../../reference/lexical_analysis.rst:526 +msgid "Single quote (``'``)" +msgstr "单引号(``'``)" + +#: ../../reference/lexical_analysis.rst:528 +msgid "``\\\"``" +msgstr "``\\\"``" + +#: ../../reference/lexical_analysis.rst:528 +msgid "Double quote (``\"``)" +msgstr "双引号(``\"``)" + +#: ../../reference/lexical_analysis.rst:530 +msgid "``\\a``" +msgstr "``\\a``" + +#: ../../reference/lexical_analysis.rst:530 +msgid "ASCII Bell (BEL)" +msgstr "ASCII 响铃(BEL)" + +#: ../../reference/lexical_analysis.rst:532 +msgid "``\\b``" +msgstr "``\\b``" + +#: ../../reference/lexical_analysis.rst:532 +msgid "ASCII Backspace (BS)" +msgstr "ASCII 退格符(BS)" + +#: ../../reference/lexical_analysis.rst:534 +msgid "``\\f``" +msgstr "``\\f``" + +#: ../../reference/lexical_analysis.rst:534 +msgid "ASCII Formfeed (FF)" +msgstr "ASCII 换页符(FF)" + +#: ../../reference/lexical_analysis.rst:536 +msgid "``\\n``" +msgstr "``\\n``" + +#: ../../reference/lexical_analysis.rst:536 +msgid "ASCII Linefeed (LF)" +msgstr "ASCII 换行符(LF)" + +#: ../../reference/lexical_analysis.rst:538 +msgid "``\\r``" +msgstr "``\\r``" + +#: ../../reference/lexical_analysis.rst:538 +msgid "ASCII Carriage Return (CR)" +msgstr "ASCII 回车符(CR)" + +#: ../../reference/lexical_analysis.rst:540 +msgid "``\\t``" +msgstr "``\\t``" + +#: ../../reference/lexical_analysis.rst:540 +msgid "ASCII Horizontal Tab (TAB)" +msgstr "ASCII 水平制表符(TAB)" + +#: ../../reference/lexical_analysis.rst:542 +msgid "``\\v``" +msgstr "``\\v``" + +#: ../../reference/lexical_analysis.rst:542 +msgid "ASCII Vertical Tab (VT)" +msgstr "ASCII 垂直制表符(VT)" + +#: ../../reference/lexical_analysis.rst:544 +msgid "``\\ooo``" +msgstr "``\\ooo``" + +#: ../../reference/lexical_analysis.rst:544 +msgid "Character with octal value *ooo*" +msgstr "八进制数 *ooo* 字符" + +#: ../../reference/lexical_analysis.rst:544 +msgid "(1,3)" +msgstr "(1,3)" + +#: ../../reference/lexical_analysis.rst:547 +msgid "``\\xhh``" +msgstr "``\\xhh``" + +#: ../../reference/lexical_analysis.rst:547 +msgid "Character with hex value *hh*" +msgstr "十六进制数 *hh* 字符" + +#: ../../reference/lexical_analysis.rst:547 +msgid "(2,3)" +msgstr "(2,3)" + +#: ../../reference/lexical_analysis.rst:550 +msgid "Escape sequences only recognized in string literals are:" +msgstr "字符串字面值专用的转义序列:" + +#: ../../reference/lexical_analysis.rst:555 +msgid "``\\N{name}``" +msgstr "``\\N{name}``" + +#: ../../reference/lexical_analysis.rst:555 +msgid "Character named *name* in the Unicode database" +msgstr "Unicode 数据库中名为 *name* 的字符" + +#: ../../reference/lexical_analysis.rst:555 +msgid "\\(4)" +msgstr "\\(4)" + +#: ../../reference/lexical_analysis.rst:558 +msgid "``\\uxxxx``" +msgstr "``\\uxxxx``" + +#: ../../reference/lexical_analysis.rst:558 +msgid "Character with 16-bit hex value *xxxx*" +msgstr "16 位十六进制数 *xxxx* 码位的字符" + +#: ../../reference/lexical_analysis.rst:558 +msgid "\\(5)" +msgstr "\\(5)" + +#: ../../reference/lexical_analysis.rst:561 +msgid "``\\Uxxxxxxxx``" +msgstr "``\\Uxxxxxxxx``" + +#: ../../reference/lexical_analysis.rst:561 +msgid "Character with 32-bit hex value *xxxxxxxx*" +msgstr "32 位 16 进制数 *xxxxxxxx* 码位的字符" + +#: ../../reference/lexical_analysis.rst:561 +msgid "\\(6)" +msgstr "\\(6)" + +#: ../../reference/lexical_analysis.rst:565 +msgid "Notes:" +msgstr "注释:" + +#: ../../reference/lexical_analysis.rst:568 +msgid "As in Standard C, up to three octal digits are accepted." +msgstr "与 C 标准一致,接受最多三个八进制数字。" + +#: ../../reference/lexical_analysis.rst:571 +msgid "Unlike in Standard C, exactly two hex digits are required." +msgstr "与 C 标准不同,必须为两个十六进制数字。" + +#: ../../reference/lexical_analysis.rst:574 +msgid "" +"In a bytes literal, hexadecimal and octal escapes denote the byte with the " +"given value. In a string literal, these escapes denote a Unicode character " +"with the given value." +msgstr "" +"*字节串* 字面值中,十六进制数和八进制数的转义码以相应数值代表每个字节。*字符串* 字面值中,这些转义码以相应数值代表每个 Unicode 字符。" + +#: ../../reference/lexical_analysis.rst:579 +msgid "Support for name aliases [#]_ has been added." +msgstr "加入了对别名 [#]_ 的支持。" + +#: ../../reference/lexical_analysis.rst:583 +msgid "Exactly four hex digits are required." +msgstr "必须为 4 个十六进制数码。" + +#: ../../reference/lexical_analysis.rst:586 +msgid "" +"Any Unicode character can be encoded this way. Exactly eight hex digits are" +" required." +msgstr "表示任意 Unicode 字符。必须为 8 个十六进制数码。" + +#: ../../reference/lexical_analysis.rst:592 +msgid "" +"Unlike Standard C, all unrecognized escape sequences are left in the string " +"unchanged, i.e., *the backslash is left in the result*. (This behavior is " +"useful when debugging: if an escape sequence is mistyped, the resulting " +"output is more easily recognized as broken.) It is also important to note " +"that the escape sequences only recognized in string literals fall into the " +"category of unrecognized escapes for bytes literals." +msgstr "" +"与 C " +"标准不同,无法识别的转义序列在字符串里原样保留,即,*输出结果保留反斜杠*。(调试时,这种方式很有用:输错转义序列时,更容易在输出结果中识别错误。)注意,在字节串字面值内,字符串字面值专用的转义序列属于无法识别的转义序列。" + +#: ../../reference/lexical_analysis.rst:599 +msgid "" +"Unrecognized escape sequences produce a :exc:`DeprecationWarning`. In a " +"future Python version they will be a :exc:`SyntaxWarning` and eventually a " +":exc:`SyntaxError`." +msgstr "" +"无法识别的转义序列触发 :exc:`DeprecationWarning`。未来的 Python 发行版将改为触发 " +":exc:`SyntaxWarning`,最终会改为触发 :exc:`SyntaxError`。" + +#: ../../reference/lexical_analysis.rst:604 +msgid "" +"Even in a raw literal, quotes can be escaped with a backslash, but the " +"backslash remains in the result; for example, ``r\"\\\"\"`` is a valid " +"string literal consisting of two characters: a backslash and a double quote;" +" ``r\"\\\"`` is not a valid string literal (even a raw string cannot end in " +"an odd number of backslashes). Specifically, *a raw literal cannot end in a" +" single backslash* (since the backslash would escape the following quote " +"character). Note also that a single backslash followed by a newline is " +"interpreted as those two characters as part of the literal, *not* as a line " +"continuation." +msgstr "" +"即使在原始字面值中,引号也可以用反斜杠转义,但反斜杠会保留在输出结果里;例如 ``r\"\\\"\"`` " +"是由两个字符组成的有效字符串字面值:反斜杠和双引号;``r\"\\\"`` " +"则不是有效字符串字面值(原始字符串也不能以奇数个反斜杠结尾)。尤其是,*原始字面值不能以单个反斜杠结尾* " +"(反斜杠会转义其后的引号)。还要注意,反斜杠加换行在字面值中被解释为两个字符,而 *不是* 连续行。" + +#: ../../reference/lexical_analysis.rst:617 +msgid "String literal concatenation" +msgstr "字符串字面值合并" + +#: ../../reference/lexical_analysis.rst:619 +msgid "" +"Multiple adjacent string or bytes literals (delimited by whitespace), " +"possibly using different quoting conventions, are allowed, and their meaning" +" is the same as their concatenation. Thus, ``\"hello\" 'world'`` is " +"equivalent to ``\"helloworld\"``. This feature can be used to reduce the " +"number of backslashes needed, to split long strings conveniently across long" +" lines, or even to add comments to parts of strings, for example::" +msgstr "" +"以空白符分隔的多个相邻字符串或字节串字面值,可用不同引号标注,等同于合并操作。因此,``\"hello\" 'world'`` 等价于 " +"``\"helloworld\"``。此功能不需要反斜杠,即可将长字符串分为多个物理行,还可以为不同部分的字符串添加注释,例如:" + +#: ../../reference/lexical_analysis.rst:630 +msgid "" +"Note that this feature is defined at the syntactical level, but implemented " +"at compile time. The '+' operator must be used to concatenate string " +"expressions at run time. Also note that literal concatenation can use " +"different quoting styles for each component (even mixing raw strings and " +"triple quoted strings), and formatted string literals may be concatenated " +"with plain string literals." +msgstr "" +"注意,此功能在句法层面定义,在编译时实现。在运行时,合并字符串表达式必须使用 '+' " +"运算符。还要注意,字面值合并可以为每个部分应用不同的引号风格(甚至混用原始字符串和三引号字符串),格式字符串字面值也可以与纯字符串字面值合并。" + +#: ../../reference/lexical_analysis.rst:651 +msgid "Formatted string literals" +msgstr "格式字符串字面值" + +#: ../../reference/lexical_analysis.rst:655 +msgid "" +"A :dfn:`formatted string literal` or :dfn:`f-string` is a string literal " +"that is prefixed with ``'f'`` or ``'F'``. These strings may contain " +"replacement fields, which are expressions delimited by curly braces ``{}``. " +"While other string literals always have a constant value, formatted strings " +"are really expressions evaluated at run time." +msgstr "" +":dfn:`格式字符串字面值` 或称 :dfn:`f-string` 是标注了 ``'f'`` 或 ``'F'`` " +"前缀的字符串字面值。这种字符串可包含替换字段,即以 ``{}`` 标注的表达式。其他字符串字面值只是常量,格式字符串字面值则是可在运行时求值的表达式。" + +#: ../../reference/lexical_analysis.rst:661 +msgid "" +"Escape sequences are decoded like in ordinary string literals (except when a" +" literal is also marked as a raw string). After decoding, the grammar for " +"the contents of the string is:" +msgstr "除非字面值标记为原始字符串,否则,与在普通字符串字面值中一样,转义序列也会被解码。解码后,用于字符串内容的语法如下:" + +#: ../../reference/lexical_analysis.rst:675 +msgid "" +"The parts of the string outside curly braces are treated literally, except " +"that any doubled curly braces ``'{{'`` or ``'}}'`` are replaced with the " +"corresponding single curly brace. A single opening curly bracket ``'{'`` " +"marks a replacement field, which starts with a Python expression. To display" +" both the expression text and its value after evaluation, (useful in " +"debugging), an equal sign ``'='`` may be added after the expression. A " +"conversion field, introduced by an exclamation point ``'!'`` may follow. A " +"format specifier may also be appended, introduced by a colon ``':'``. A " +"replacement field ends with a closing curly bracket ``'}'``." +msgstr "" +"双花括号 ``'{{'`` 或 ``'}}'`` 被替换为单花括号,花括号外的字符串仍按字面值处理。单左花括号 ``'{'`` 标记以 Python " +"表达式开头的替换字段。在表达式后加等于号 ``'='``,可在求值后,同时显示表达式文本及其结果(用于调试)。 随后是用叹号 ``'!'`` " +"标记的转换字段。还可以在冒号 ``':'`` 后附加格式说明符。替换字段以右花括号 ``'}'`` 为结尾。" + +#: ../../reference/lexical_analysis.rst:685 +msgid "" +"Expressions in formatted string literals are treated like regular Python " +"expressions surrounded by parentheses, with a few exceptions. An empty " +"expression is not allowed, and both :keyword:`lambda` and assignment " +"expressions ``:=`` must be surrounded by explicit parentheses. Replacement " +"expressions can contain line breaks (e.g. in triple-quoted strings), but " +"they cannot contain comments. Each expression is evaluated in the context " +"where the formatted string literal appears, in order from left to right." +msgstr "" +"格式字符串字面值中,表达式的处理与圆括号中的常规 Python " +"表达式基本一样,但也有一些不同的地方。不允许使用空表达式;:keyword:`lambda` 和赋值表达式 ``:=`` " +"必须显式用圆括号标注;替换表达式可以包含换行(例如,三引号字符串中),但不能包含注释;在格式字符串字面值语境内,按从左至右的顺序,为每个表达式求值。" + +#: ../../reference/lexical_analysis.rst:694 +msgid "" +"Prior to Python 3.7, an :keyword:`await` expression and comprehensions " +"containing an :keyword:`async for` clause were illegal in the expressions in" +" formatted string literals due to a problem with the implementation." +msgstr "" +"Python 3.7 以前, 因为实现的问题,不允许在格式字符串字面值表达式中使用 :keyword:`await` 表达式与包含 " +":keyword:`async for` 子句的推导式。" + +#: ../../reference/lexical_analysis.rst:699 +msgid "" +"When the equal sign ``'='`` is provided, the output will have the expression" +" text, the ``'='`` and the evaluated value. Spaces after the opening brace " +"``'{'``, within the expression and after the ``'='`` are all retained in the" +" output. By default, the ``'='`` causes the :func:`repr` of the expression " +"to be provided, unless there is a format specified. When a format is " +"specified it defaults to the :func:`str` of the expression unless a " +"conversion ``'!r'`` is declared." +msgstr "" +"表达式里含等号 ``'='`` 时,输出内容包括表达式文本、``'='`` 、求值结果。输出内容可以保留表达式中左花括号 ``'{'`` 后,及 " +"``'='`` 后的空格。没有指定格式时,``'='`` 默认调用表达式的 :func:`repr`。指定了格式时,默认调用表达式的 " +":func:`str`,除非声明了转换字段 ``'!r'``。" + +#: ../../reference/lexical_analysis.rst:707 +msgid "The equal sign ``'='``." +msgstr "等号 ``'='``。" + +#: ../../reference/lexical_analysis.rst:710 +msgid "" +"If a conversion is specified, the result of evaluating the expression is " +"converted before formatting. Conversion ``'!s'`` calls :func:`str` on the " +"result, ``'!r'`` calls :func:`repr`, and ``'!a'`` calls :func:`ascii`." +msgstr "" +"指定了转换符时,表达式求值的结果会先转换,再格式化。转换符 ``'!s'`` 调用 :func:`str` 转换求值结果,``'!r'`` 调用 " +":func:`repr`,``'!a'`` 调用 :func:`ascii`。" + +#: ../../reference/lexical_analysis.rst:714 +msgid "" +"The result is then formatted using the :func:`format` protocol. The format " +"specifier is passed to the :meth:`__format__` method of the expression or " +"conversion result. An empty string is passed when the format specifier is " +"omitted. The formatted result is then included in the final value of the " +"whole string." +msgstr "" +"输出结果的格式化使用 :func:`format` 协议。格式说明符传入表达式或转换结果的 :meth:`__format__` " +"方法。省略格式说明符,则传入空字符串。然后,格式化结果包含在整个字符串的最终值里。" + +#: ../../reference/lexical_analysis.rst:720 +msgid "" +"Top-level format specifiers may include nested replacement fields. These " +"nested fields may include their own conversion fields and :ref:`format " +"specifiers `, but may not include more deeply-nested replacement" +" fields. The :ref:`format specifier mini-language ` is the same " +"as that used by the :meth:`str.format` method." +msgstr "" +"顶层格式说明符可以包含嵌套替换字段。嵌套字段也可以包含自己的转换字段和 :ref:`格式说明符 " +"`,但不可再包含更深层嵌套的替换字段。:ref:`格式说明符微语言 ` 与 " +":meth:`str.format` 方法使用的微语言相同。" + +#: ../../reference/lexical_analysis.rst:726 +msgid "" +"Formatted string literals may be concatenated, but replacement fields cannot" +" be split across literals." +msgstr "格式化字符串字面值可以拼接,但是一个替换字段不能拆分到多个字面值。" + +#: ../../reference/lexical_analysis.rst:729 +msgid "Some examples of formatted string literals::" +msgstr "格式字符串字面值示例如下:" + +#: ../../reference/lexical_analysis.rst:761 +msgid "" +"A consequence of sharing the same syntax as regular string literals is that " +"characters in the replacement fields must not conflict with the quoting used" +" in the outer formatted string literal::" +msgstr "与常规字符串字面值的语法一样,替换字段中的字符不能与外层格式字符串字面值的引号冲突:" + +#: ../../reference/lexical_analysis.rst:768 +msgid "" +"Backslashes are not allowed in format expressions and will raise an error::" +msgstr "格式化表达式中不允许使用反斜杠,否则导致错误:" + +#: ../../reference/lexical_analysis.rst:773 +msgid "" +"To include a value in which a backslash escape is required, create a " +"temporary variable." +msgstr "如果要包含带反斜杠的值,请创建一个临时变量。" + +#: ../../reference/lexical_analysis.rst:780 +msgid "" +"Formatted string literals cannot be used as docstrings, even if they do not " +"include expressions." +msgstr "即便未包含表达式,格式字符串字面值也不能用作文档字符串。" + +#: ../../reference/lexical_analysis.rst:791 +msgid "" +"See also :pep:`498` for the proposal that added formatted string literals, " +"and :meth:`str.format`, which uses a related format string mechanism." +msgstr "参阅 :pep:`498`,了解格式字符串字面值的提案,以及与格式字符串机制相关的 :meth:`str.format`。" + +#: ../../reference/lexical_analysis.rst:798 +msgid "Numeric literals" +msgstr "数值字面值" + +#: ../../reference/lexical_analysis.rst:804 +msgid "" +"There are three types of numeric literals: integers, floating point numbers," +" and imaginary numbers. There are no complex literals (complex numbers can " +"be formed by adding a real number and an imaginary number)." +msgstr "数值字面值有三种类型:整数、浮点数、虚数。没有复数字面值(复数由实数加虚数构成)。" + +#: ../../reference/lexical_analysis.rst:808 +msgid "" +"Note that numeric literals do not include a sign; a phrase like ``-1`` is " +"actually an expression composed of the unary operator '``-``' and the " +"literal ``1``." +msgstr "注意,数值字面值不含正负号;实际上,``-1`` 等负数是由一元运算符 '``-``' 和字面值 ``1`` 合成的。" + +#: ../../reference/lexical_analysis.rst:822 +msgid "Integer literals" +msgstr "整数字面值" + +#: ../../reference/lexical_analysis.rst:824 +msgid "Integer literals are described by the following lexical definitions:" +msgstr "整数字面值词法定义如下:" + +#: ../../reference/lexical_analysis.rst:838 +msgid "" +"There is no limit for the length of integer literals apart from what can be " +"stored in available memory." +msgstr "整数字面值的长度没有限制,能一直大到占满可用内存。" + +#: ../../reference/lexical_analysis.rst:841 +msgid "" +"Underscores are ignored for determining the numeric value of the literal. " +"They can be used to group digits for enhanced readability. One underscore " +"can occur between digits, and after base specifiers like ``0x``." +msgstr "确定数值时,会忽略字面值中的下划线。下划线只是为了分组数字,让数字更易读。下划线可在数字之间,也可在 ``0x`` 等基数说明符后。" + +#: ../../reference/lexical_analysis.rst:845 +msgid "" +"Note that leading zeros in a non-zero decimal number are not allowed. This " +"is for disambiguation with C-style octal literals, which Python used before " +"version 3.0." +msgstr "注意,除了 0 以外,十进制数字的开头不允许有零。以免与 Python 3.0 版之前使用的 C 样式八进制字面值混淆。" + +#: ../../reference/lexical_analysis.rst:849 +msgid "Some examples of integer literals::" +msgstr "整数字面值示例如下:" + +#: ../../reference/lexical_analysis.rst:855 +#: ../../reference/lexical_analysis.rst:887 +msgid "Underscores are now allowed for grouping purposes in literals." +msgstr "现已支持在字面值中,用下划线分组数字。" + +#: ../../reference/lexical_analysis.rst:866 +msgid "Floating point literals" +msgstr "浮点数字面值" + +#: ../../reference/lexical_analysis.rst:868 +msgid "" +"Floating point literals are described by the following lexical definitions:" +msgstr "浮点数字面值词法定义如下:" + +#: ../../reference/lexical_analysis.rst:878 +msgid "" +"Note that the integer and exponent parts are always interpreted using radix " +"10. For example, ``077e010`` is legal, and denotes the same number as " +"``77e10``. The allowed range of floating point literals is implementation-" +"dependent. As in integer literals, underscores are supported for digit " +"grouping." +msgstr "" +"注意,解析时,整数和指数部分总以 10 为基数。例如,``077e010`` 是合法的,表示的数值与 ``77e10`` " +"相同。浮点数字面值的支持范围取决于具体实现。整数字面值支持用下划线分组数字。" + +#: ../../reference/lexical_analysis.rst:883 +msgid "Some examples of floating point literals::" +msgstr "浮点数字面值示例如下:" + +#: ../../reference/lexical_analysis.rst:896 +msgid "Imaginary literals" +msgstr "虚数字面值" + +#: ../../reference/lexical_analysis.rst:898 +msgid "Imaginary literals are described by the following lexical definitions:" +msgstr "虚数字面值词法定义如下:" + +#: ../../reference/lexical_analysis.rst:903 +msgid "" +"An imaginary literal yields a complex number with a real part of 0.0. " +"Complex numbers are represented as a pair of floating point numbers and have" +" the same restrictions on their range. To create a complex number with a " +"nonzero real part, add a floating point number to it, e.g., ``(3+4j)``. " +"Some examples of imaginary literals::" +msgstr "" +"虚数字面值生成实部为 0.0 的复数。复数由一对浮点数表示,它们的取值范围相同。创建实部不为零的复数,则需添加浮点数,例如 " +"``(3+4j)``。虚数字面值示例如下:" + +#: ../../reference/lexical_analysis.rst:915 +msgid "Operators" +msgstr "运算符" + +#: ../../reference/lexical_analysis.rst:919 +msgid "The following tokens are operators:" +msgstr "运算符如下所示:" + +#: ../../reference/lexical_analysis.rst:932 +msgid "Delimiters" +msgstr "分隔符" + +#: ../../reference/lexical_analysis.rst:936 +msgid "The following tokens serve as delimiters in the grammar:" +msgstr "以下形符在语法中为分隔符:" + +#: ../../reference/lexical_analysis.rst:945 +msgid "" +"The period can also occur in floating-point and imaginary literals. A " +"sequence of three periods has a special meaning as an ellipsis literal. The " +"second half of the list, the augmented assignment operators, serve lexically" +" as delimiters, but also perform an operation." +msgstr "句点也可以用于浮点数和虚数字面值。三个连续句点表示省略符。列表后半部分是增强赋值操作符,用作词法分隔符,但也可以执行运算。" + +#: ../../reference/lexical_analysis.rst:950 +msgid "" +"The following printing ASCII characters have special meaning as part of " +"other tokens or are otherwise significant to the lexical analyzer:" +msgstr "以下 ASCII 字符具有特殊含义,对词法分析器有重要意义:" + +#: ../../reference/lexical_analysis.rst:957 +msgid "" +"The following printing ASCII characters are not used in Python. Their " +"occurrence outside string literals and comments is an unconditional error:" +msgstr "以下 ASCII 字符不用于 Python。在字符串字面值或注释外使用时,将直接报错:" + +#: ../../reference/lexical_analysis.rst:966 +msgid "Footnotes" +msgstr "备注" + +#: ../../reference/lexical_analysis.rst:967 +msgid "https://www.unicode.org/Public/11.0.0/ucd/NameAliases.txt" +msgstr "https://www.unicode.org/Public/11.0.0/ucd/NameAliases.txt" diff --git a/reference/simple_stmts.po b/reference/simple_stmts.po new file mode 100644 index 000000000..5b991f27d --- /dev/null +++ b/reference/simple_stmts.po @@ -0,0 +1,1189 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) 2001-2024, Python Software Foundation +# This file is distributed under the same license as the Python package. +# FIRST AUTHOR , YEAR. +# +# Translators: +# Shengjing Zhu , 2019 +# Freesand Leo , 2022 +# Rafael Fontenelle , 2024 +# +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: Python 3.9\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2024-08-30 16:51+0000\n" +"PO-Revision-Date: 2017-02-16 23:39+0000\n" +"Last-Translator: Rafael Fontenelle , 2024\n" +"Language-Team: Chinese (China) (https://app.transifex.com/python-doc/teams/5390/zh_CN/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: zh_CN\n" +"Plural-Forms: nplurals=1; plural=0;\n" + +#: ../../reference/simple_stmts.rst:6 +msgid "Simple statements" +msgstr "简单语句" + +#: ../../reference/simple_stmts.rst:10 +msgid "" +"A simple statement is comprised within a single logical line. Several simple" +" statements may occur on a single line separated by semicolons. The syntax " +"for simple statements is:" +msgstr "简单语句由一个单独的逻辑行构成。 多条简单语句可以存在于同一行内并以分号分隔。 简单语句的句法为:" + +#: ../../reference/simple_stmts.rst:36 +msgid "Expression statements" +msgstr "表达式语句" + +#: ../../reference/simple_stmts.rst:43 +msgid "" +"Expression statements are used (mostly interactively) to compute and write a" +" value, or (usually) to call a procedure (a function that returns no " +"meaningful result; in Python, procedures return the value ``None``). Other " +"uses of expression statements are allowed and occasionally useful. The " +"syntax for an expression statement is:" +msgstr "" +"表达式语句用于计算和写入值(大多是在交互模式下),或者(通常情况)调用一个过程 (过程就是不返回有意义结果的函数;在 Python 中,过程的返回值为 " +"``None``)。 表达式语句的其他使用方式也是允许且有特定用处的。 表达式语句的句法为:" + +#: ../../reference/simple_stmts.rst:52 +msgid "" +"An expression statement evaluates the expression list (which may be a single" +" expression)." +msgstr "表达式语句会对指定的表达式列表(也可能为单一表达式)进行求值。" + +#: ../../reference/simple_stmts.rst:64 +msgid "" +"In interactive mode, if the value is not ``None``, it is converted to a " +"string using the built-in :func:`repr` function and the resulting string is " +"written to standard output on a line by itself (except if the result is " +"``None``, so that procedure calls do not cause any output.)" +msgstr "" +"在交互模式下,如果结果值不为 ``None``,它会通过内置的 :func:`repr` " +"函数转换为一个字符串,该结果字符串将以单独一行的形式写入标准输出(例外情况是如果结果为 ``None``,则该过程调用不产生任何输出。)" + +#: ../../reference/simple_stmts.rst:72 +msgid "Assignment statements" +msgstr "赋值语句" + +#: ../../reference/simple_stmts.rst:82 +msgid "" +"Assignment statements are used to (re)bind names to values and to modify " +"attributes or items of mutable objects:" +msgstr "赋值语句用于将名称(重)绑定到特定值,以及修改属性或可变对象的成员项:" + +#: ../../reference/simple_stmts.rst:96 +msgid "" +"(See section :ref:`primaries` for the syntax definitions for *attributeref*," +" *subscription*, and *slicing*.)" +msgstr "(请参阅 :ref:`primaries` 一节了解 *属性引用*, *抽取* 和 *切片* 的句法定义。)" + +#: ../../reference/simple_stmts.rst:99 +msgid "" +"An assignment statement evaluates the expression list (remember that this " +"can be a single expression or a comma-separated list, the latter yielding a " +"tuple) and assigns the single resulting object to each of the target lists, " +"from left to right." +msgstr "" +"赋值语句会对指定的表达式列表进行求值(注意这可能为单一表达式或是由逗号分隔的列表,后者将产生一个元组)并将单一结果对象从左至右逐个赋值给目标列表。" + +#: ../../reference/simple_stmts.rst:108 +msgid "" +"Assignment is defined recursively depending on the form of the target " +"(list). When a target is part of a mutable object (an attribute reference, " +"subscription or slicing), the mutable object must ultimately perform the " +"assignment and decide about its validity, and may raise an exception if the " +"assignment is unacceptable. The rules observed by various types and the " +"exceptions raised are given with the definition of the object types (see " +"section :ref:`types`)." +msgstr "" +"赋值是根据目标(列表)的格式递归地定义的。 " +"当目标为一个可变对象(属性引用、抽取或切片)的组成部分时,该可变对象必须最终执行赋值并决定其有效性,如果赋值操作不可接受也可能引发异常。 " +"各种类型可用的规则和引发的异常通过对象类型的定义给出(参见 :ref:`types` 一节)。" + +#: ../../reference/simple_stmts.rst:121 +msgid "" +"Assignment of an object to a target list, optionally enclosed in parentheses" +" or square brackets, is recursively defined as follows." +msgstr "对象赋值的目标对象可以包含于圆括号或方括号内,具体操作按以下方式递归地定义。" + +#: ../../reference/simple_stmts.rst:124 +msgid "" +"If the target list is a single target with no trailing comma, optionally in " +"parentheses, the object is assigned to that target." +msgstr "如果目标列表为后面不带逗号、可以包含于圆括号内的单一目标,则将对象赋值给该目标。" + +#: ../../reference/simple_stmts.rst:127 +msgid "Else:" +msgstr "否则:" + +#: ../../reference/simple_stmts.rst:129 +msgid "" +"If the target list contains one target prefixed with an asterisk, called a " +"\"starred\" target: The object must be an iterable with at least as many " +"items as there are targets in the target list, minus one. The first items " +"of the iterable are assigned, from left to right, to the targets before the " +"starred target. The final items of the iterable are assigned to the targets" +" after the starred target. A list of the remaining items in the iterable is" +" then assigned to the starred target (the list can be empty)." +msgstr "" +"如果目标列表包含一个带有星号前缀的目标,这称为“加星”目标:则该对象至少必须为与目标列表项数减一相同项数的可迭代对象。 " +"该可迭代对象前面的项将按从左至右的顺序被赋值给加星目标之前的目标。 该可迭代对象末尾的项将被赋值给加星目标之后的目标。 " +"然后该可迭代对象中剩余项的列表将被赋值给加星目标(该列表可以为空)。" + +#: ../../reference/simple_stmts.rst:137 +msgid "" +"Else: The object must be an iterable with the same number of items as there " +"are targets in the target list, and the items are assigned, from left to " +"right, to the corresponding targets." +msgstr "否则:该对象必须为具有与目标列表相同项数的可迭代对象,这些项将按从左至右的顺序被赋值给对应的目标。" + +#: ../../reference/simple_stmts.rst:141 +msgid "" +"Assignment of an object to a single target is recursively defined as " +"follows." +msgstr "对象赋值给单个目标的操作按以下方式递归地定义。" + +#: ../../reference/simple_stmts.rst:143 +msgid "If the target is an identifier (name):" +msgstr "如果目标为标识符(名称):" + +#: ../../reference/simple_stmts.rst:145 +msgid "" +"If the name does not occur in a :keyword:`global` or :keyword:`nonlocal` " +"statement in the current code block: the name is bound to the object in the " +"current local namespace." +msgstr "" +"如果该名称未出现于当前代码块的 :keyword:`global` 或 :keyword:`nonlocal` " +"语句中:该名称将被绑定到当前局部命名空间的对象。" + +#: ../../reference/simple_stmts.rst:149 +msgid "" +"Otherwise: the name is bound to the object in the global namespace or the " +"outer namespace determined by :keyword:`nonlocal`, respectively." +msgstr "否则:该名称将被分别绑定到全局命名空间或由 :keyword:`nonlocal` 所确定的外层命名空间的对象。" + +#: ../../reference/simple_stmts.rst:154 +msgid "" +"The name is rebound if it was already bound. This may cause the reference " +"count for the object previously bound to the name to reach zero, causing the" +" object to be deallocated and its destructor (if it has one) to be called." +msgstr "" +"如果该名称已经被绑定则将被重新绑定。 这可能导致之前被绑定到该名称的对象的引用计数变为零,造成该对象进入释放过程并调用其析构器(如果存在)。" + +#: ../../reference/simple_stmts.rst:160 +msgid "" +"If the target is an attribute reference: The primary expression in the " +"reference is evaluated. It should yield an object with assignable " +"attributes; if this is not the case, :exc:`TypeError` is raised. That " +"object is then asked to assign the assigned object to the given attribute; " +"if it cannot perform the assignment, it raises an exception (usually but not" +" necessarily :exc:`AttributeError`)." +msgstr "" +"如果该对象为属性引用:引用中的原型表达式会被求值。 它应该产生一个具有可赋值属性的对象;否则将引发 :exc:`TypeError`。 " +"该对象会被要求将可赋值对象赋值给指定的属性;如果它无法执行赋值,则会引发异常 (通常应为 :exc:`AttributeError` 但并不强制要求)。" + +#: ../../reference/simple_stmts.rst:169 +msgid "" +"Note: If the object is a class instance and the attribute reference occurs " +"on both sides of the assignment operator, the right-hand side expression, " +"``a.x`` can access either an instance attribute or (if no instance attribute" +" exists) a class attribute. The left-hand side target ``a.x`` is always set" +" as an instance attribute, creating it if necessary. Thus, the two " +"occurrences of ``a.x`` do not necessarily refer to the same attribute: if " +"the right-hand side expression refers to a class attribute, the left-hand " +"side creates a new instance attribute as the target of the assignment::" +msgstr "" +"注意:如果该对象为类实例并且属性引用在赋值运算符的两侧都出现,则右侧表达式 ``a.x`` 可以访问实例属性或(如果实例属性不存在)类属性。 左侧目标 " +"``a.x`` 将总是设定为实例属性,并在必要时创建该实例属性。 因此 ``a.x`` " +"的两次出现不一定指向相同的属性:如果右侧表达式指向一个类属性,则左侧会创建一个新的实例属性作为赋值的目标::" + +#: ../../reference/simple_stmts.rst:183 +msgid "" +"This description does not necessarily apply to descriptor attributes, such " +"as properties created with :func:`property`." +msgstr "此描述不一定作用于描述器属性,例如通过 :func:`property` 创建的特征属性。" + +#: ../../reference/simple_stmts.rst:190 +msgid "" +"If the target is a subscription: The primary expression in the reference is " +"evaluated. It should yield either a mutable sequence object (such as a " +"list) or a mapping object (such as a dictionary). Next, the subscript " +"expression is evaluated." +msgstr "" +"如果目标为一个抽取项:引用中的原型表达式会被求值。 它应当产生一个可变序列对象(例如列表)或一个映射对象(例如字典)。 接下来,该抽取表达式会被求值。" + +#: ../../reference/simple_stmts.rst:199 +msgid "" +"If the primary is a mutable sequence object (such as a list), the subscript " +"must yield an integer. If it is negative, the sequence's length is added to" +" it. The resulting value must be a nonnegative integer less than the " +"sequence's length, and the sequence is asked to assign the assigned object " +"to its item with that index. If the index is out of range, " +":exc:`IndexError` is raised (assignment to a subscripted sequence cannot add" +" new items to a list)." +msgstr "" +"如果原型为一个可变序列对象(例如列表),抽取应产生一个整数。 如其为负值,则再加上序列长度。 " +"结果值必须为一个小于序列长度的非负整数,序列将把被赋值对象赋值给该整数指定索引号的项。 如果索引超出范围,将会引发 :exc:`IndexError` " +"(给被抽取序列赋值不能向列表添加新项)。" + +#: ../../reference/simple_stmts.rst:210 +msgid "" +"If the primary is a mapping object (such as a dictionary), the subscript " +"must have a type compatible with the mapping's key type, and the mapping is " +"then asked to create a key/datum pair which maps the subscript to the " +"assigned object. This can either replace an existing key/value pair with " +"the same key value, or insert a new key/value pair (if no key with the same " +"value existed)." +msgstr "" +"如果原型为一个映射对象(例如字典),抽取必须具有与该映射的键类型相兼容的类型,然后映射中会创建一个将抽取映射到被赋值对象的键/值对。 " +"这可以是替换一个现有键/值对并保持相同键值,也可以是插入一个新键/值对(如果具有相同值的键不存在)。" + +#: ../../reference/simple_stmts.rst:216 +msgid "" +"For user-defined objects, the :meth:`__setitem__` method is called with " +"appropriate arguments." +msgstr "对于用户定义对象,会调用 :meth:`__setitem__` 方法并附带适当的参数。" + +#: ../../reference/simple_stmts.rst:221 +msgid "" +"If the target is a slicing: The primary expression in the reference is " +"evaluated. It should yield a mutable sequence object (such as a list). The" +" assigned object should be a sequence object of the same type. Next, the " +"lower and upper bound expressions are evaluated, insofar they are present; " +"defaults are zero and the sequence's length. The bounds should evaluate to " +"integers. If either bound is negative, the sequence's length is added to it." +" The resulting bounds are clipped to lie between zero and the sequence's " +"length, inclusive. Finally, the sequence object is asked to replace the " +"slice with the items of the assigned sequence. The length of the slice may " +"be different from the length of the assigned sequence, thus changing the " +"length of the target sequence, if the target sequence allows it." +msgstr "" +"如果目标为一个切片:引用中的原型表达式会被求值。 它应当产生一个可变序列对象(例如列表)。 被赋值对象应当是一个相同类型的序列对象。 " +"接下来,下界与上界表达式如果存在的话将被求值;默认值分别为零和序列长度。 上下边界值应当为整数。 如果某一边界为负值,则会加上序列长度。 " +"求出的边界会被裁剪至介于零和序列长度的开区间中。 最后,将要求序列对象以被赋值序列的项替换该切片。 " +"切片的长度可能与被赋值序列的长度不同,这会在目标序列允许的情况下改变目标序列的长度。" + +#: ../../reference/simple_stmts.rst:235 +msgid "" +"In the current implementation, the syntax for targets is taken to be the " +"same as for expressions, and invalid syntax is rejected during the code " +"generation phase, causing less detailed error messages." +msgstr "在当前实现中,目标的句法被当作与表达式的句法相同,无效的句法会在代码生成阶段被拒绝,导致不太详细的错误信息。" + +#: ../../reference/simple_stmts.rst:239 +msgid "" +"Although the definition of assignment implies that overlaps between the " +"left-hand side and the right-hand side are 'simultaneous' (for example ``a, " +"b = b, a`` swaps two variables), overlaps *within* the collection of " +"assigned-to variables occur left-to-right, sometimes resulting in confusion." +" For instance, the following program prints ``[0, 2]``::" +msgstr "" +"虽然赋值的定义意味着左手边与右手边的重叠是“同时”进行的(例如 ``a, b = b, a`` 会交换两个变量的值),但在赋值给变量的多项集 *之内* " +"的重叠是从左至右进行的,这有时会令人混淆。 例如,以下程序将会打印出 ``[0, 2]``::" + +#: ../../reference/simple_stmts.rst:253 +msgid ":pep:`3132` - Extended Iterable Unpacking" +msgstr ":pep:`3132` - 扩展的可迭代对象拆包" + +#: ../../reference/simple_stmts.rst:254 +msgid "The specification for the ``*target`` feature." +msgstr "对 ``*target`` 特性的规范说明。" + +#: ../../reference/simple_stmts.rst:260 +msgid "Augmented assignment statements" +msgstr "增强赋值语句" + +#: ../../reference/simple_stmts.rst:278 +msgid "" +"Augmented assignment is the combination, in a single statement, of a binary " +"operation and an assignment statement:" +msgstr "增强赋值语句就是在单个语句中将二元运算和赋值语句合为一体:" + +#: ../../reference/simple_stmts.rst:287 +msgid "" +"(See section :ref:`primaries` for the syntax definitions of the last three " +"symbols.)" +msgstr "(请参阅 :ref:`primaries` 一节了解最后三种符号的句法定义。)" + +#: ../../reference/simple_stmts.rst:290 +msgid "" +"An augmented assignment evaluates the target (which, unlike normal " +"assignment statements, cannot be an unpacking) and the expression list, " +"performs the binary operation specific to the type of assignment on the two " +"operands, and assigns the result to the original target. The target is only" +" evaluated once." +msgstr "" +"增强赋值语句将对目标和表达式列表求值(与普通赋值语句不同的是,前者不能为可迭代对象拆包),对两个操作数相应类型的赋值执行指定的二元运算,并将结果赋值给原始目标。" +" 目标仅会被求值一次。" + +#: ../../reference/simple_stmts.rst:295 +msgid "" +"An augmented assignment expression like ``x += 1`` can be rewritten as ``x =" +" x + 1`` to achieve a similar, but not exactly equal effect. In the " +"augmented version, ``x`` is only evaluated once. Also, when possible, the " +"actual operation is performed *in-place*, meaning that rather than creating " +"a new object and assigning that to the target, the old object is modified " +"instead." +msgstr "" +"增强赋值语句例如 ``x += 1`` 可以改写为 ``x = x + 1`` 获得类似但并非完全等价的效果。 在增强赋值的版本中,``x`` " +"仅会被求值一次。 而且,在可能的情况下,实际的运算是 *原地* 执行的,也就是说并不是创建一个新对象并将其赋值给目标,而是直接修改原对象。" + +#: ../../reference/simple_stmts.rst:301 +msgid "" +"Unlike normal assignments, augmented assignments evaluate the left-hand side" +" *before* evaluating the right-hand side. For example, ``a[i] += f(x)`` " +"first looks-up ``a[i]``, then it evaluates ``f(x)`` and performs the " +"addition, and lastly, it writes the result back to ``a[i]``." +msgstr "" +"不同于普通赋值,增强赋值会在对右手边求值 *之前* 对左手边求值。 例如,``a[i] += f(x)`` 首先查找 ``a[i]``,然后对 " +"``f(x)`` 求值并执行加法操作,最后将结果写回到 ``a[i]``。" + +#: ../../reference/simple_stmts.rst:306 +msgid "" +"With the exception of assigning to tuples and multiple targets in a single " +"statement, the assignment done by augmented assignment statements is handled" +" the same way as normal assignments. Similarly, with the exception of the " +"possible *in-place* behavior, the binary operation performed by augmented " +"assignment is the same as the normal binary operations." +msgstr "" +"除了在单个语句中赋值给元组和多个目标的例外情况,增强赋值语句的赋值操作处理方式与普通赋值相同。 类似地,除了可能存在 *原地* " +"操作行为的例外情况,增强赋值语句执行的二元运算也与普通二元运算相同。" + +#: ../../reference/simple_stmts.rst:312 +msgid "" +"For targets which are attribute references, the same :ref:`caveat about " +"class and instance attributes ` applies as for regular " +"assignments." +msgstr "对于属性引用类目标,针对常规赋值的 :ref:`关于类和实例属性的警告 ` 也同样适用。" + +#: ../../reference/simple_stmts.rst:319 +msgid "Annotated assignment statements" +msgstr "带标注的赋值语句" + +#: ../../reference/simple_stmts.rst:326 +msgid "" +":term:`Annotation ` assignment is the combination, in a" +" single statement, of a variable or attribute annotation and an optional " +"assignment statement:" +msgstr ":term:`标注 ` 赋值就是在单个语句中将变量或属性标注和可选的赋值语句合为一体:" + +#: ../../reference/simple_stmts.rst:333 +msgid "" +"The difference from normal :ref:`assignment` is that only single target is " +"allowed." +msgstr "与普通 :ref:`assignment` 的差别在于仅允许单个目标。" + +#: ../../reference/simple_stmts.rst:335 +msgid "" +"For simple names as assignment targets, if in class or module scope, the " +"annotations are evaluated and stored in a special class or module attribute " +":attr:`__annotations__` that is a dictionary mapping from variable names " +"(mangled if private) to evaluated annotations. This attribute is writable " +"and is automatically created at the start of class or module body execution," +" if annotations are found statically." +msgstr "" +"对于将简单名称作为赋值目标的情况,如果是在类或模块作用域中,标注会被求值并存入一个特殊的类或模块属性 :attr:`__annotations__` " +"中,这是一个将变量名称(如为私有会被移除)映射到被求值标注的字典。 此属性为可写并且在类或模块体开始执行时如果静态地发现标注就会自动创建。" + +#: ../../reference/simple_stmts.rst:343 +msgid "" +"For expressions as assignment targets, the annotations are evaluated if in " +"class or module scope, but not stored." +msgstr "对于将表达式作为赋值目标的情况,如果是在类或模块作用域中,标注会被求值,但不会保存。" + +#: ../../reference/simple_stmts.rst:346 +msgid "" +"If a name is annotated in a function scope, then this name is local for that" +" scope. Annotations are never evaluated and stored in function scopes." +msgstr "如果一个名称在函数作用域内被标注,则该名称为该作用域的局部变量。 标注绝不会在函数作用域内被求值和保存。" + +#: ../../reference/simple_stmts.rst:349 +msgid "" +"If the right hand side is present, an annotated assignment performs the " +"actual assignment before evaluating annotations (where applicable). If the " +"right hand side is not present for an expression target, then the " +"interpreter evaluates the target except for the last :meth:`__setitem__` or " +":meth:`__setattr__` call." +msgstr "" +"如果存在右手边,带标注的赋值会在对标注求值之前(如果适用)执行实际的赋值。 如果用作表达式目标的右手边不存在,则解释器会对目标求值,但最后的 " +":meth:`__setitem__` 或 :meth:`__setattr__` 调用除外。" + +#: ../../reference/simple_stmts.rst:360 +msgid ":pep:`526` - Syntax for Variable Annotations" +msgstr ":pep:`526` - 变量标注的语法" + +#: ../../reference/simple_stmts.rst:358 +msgid "" +"The proposal that added syntax for annotating the types of variables " +"(including class variables and instance variables), instead of expressing " +"them through comments." +msgstr "该提议增加了标注变量(也包括类变量和实例变量)类型的语法,而不再是通过注释来进行表达。" + +#: ../../reference/simple_stmts.rst:364 +msgid ":pep:`484` - Type hints" +msgstr ":pep:`484` - 类型提示" + +#: ../../reference/simple_stmts.rst:363 +msgid "" +"The proposal that added the :mod:`typing` module to provide a standard " +"syntax for type annotations that can be used in static analysis tools and " +"IDEs." +msgstr "该提议增加了 :mod:`typing` 模块以便为类型标注提供标准句法,可被静态分析工具和 IDE 所使用。" + +#: ../../reference/simple_stmts.rst:367 +msgid "" +"Now annotated assignments allow same expressions in the right hand side as " +"the regular assignments. Previously, some expressions (like un-parenthesized" +" tuple expressions) caused a syntax error." +msgstr "现在带有标注的赋值允许在右边以同样的表达式作为常规赋值。 之前,某些表达式(例如未加圆括号的元组表达式)会导致语法错误。" + +#: ../../reference/simple_stmts.rst:376 +msgid "The :keyword:`!assert` statement" +msgstr ":keyword:`!assert` 语句" + +#: ../../reference/simple_stmts.rst:383 +msgid "" +"Assert statements are a convenient way to insert debugging assertions into a" +" program:" +msgstr "assert 语句是在程序中插入调试性断言的简便方式:" + +#: ../../reference/simple_stmts.rst:389 +msgid "The simple form, ``assert expression``, is equivalent to ::" +msgstr "简单形式 ``assert expression`` 等价于 ::" + +#: ../../reference/simple_stmts.rst:394 +msgid "" +"The extended form, ``assert expression1, expression2``, is equivalent to ::" +msgstr "扩展形式 ``assert expression1, expression2`` 等价于 ::" + +#: ../../reference/simple_stmts.rst:403 +msgid "" +"These equivalences assume that :const:`__debug__` and :exc:`AssertionError` " +"refer to the built-in variables with those names. In the current " +"implementation, the built-in variable :const:`__debug__` is ``True`` under " +"normal circumstances, ``False`` when optimization is requested (command line" +" option :option:`-O`). The current code generator emits no code for an " +"assert statement when optimization is requested at compile time. Note that " +"it is unnecessary to include the source code for the expression that failed " +"in the error message; it will be displayed as part of the stack trace." +msgstr "" +"以上等价形式假定 :const:`__debug__` 和 :exc:`AssertionError` 指向具有指定名称的内置变量。 " +"在当前实现中,内置变量 :const:`__debug__` 在正常情况下为 ``True``,在请求优化时为 ``False`` (对应命令行选项为 " +":option:`-O`)。 如果在编译时请求优化,当前代码生成器不会为 assert 语句发出任何代码。 " +"请注意不必在错误信息中包含失败表达式的源代码;它会被作为栈追踪的一部分被显示。" + +#: ../../reference/simple_stmts.rst:412 +msgid "" +"Assignments to :const:`__debug__` are illegal. The value for the built-in " +"variable is determined when the interpreter starts." +msgstr "赋值给 :const:`__debug__` 是非法的。 该内置变量的值会在解释器启动时确定。" + +#: ../../reference/simple_stmts.rst:419 +msgid "The :keyword:`!pass` statement" +msgstr ":keyword:`!pass` 语句" + +#: ../../reference/simple_stmts.rst:429 +msgid "" +":keyword:`pass` is a null operation --- when it is executed, nothing " +"happens. It is useful as a placeholder when a statement is required " +"syntactically, but no code needs to be executed, for example::" +msgstr "" +":keyword:`pass` 是一个空操作 --- 当它被执行时,什么都不发生。 " +"它适合当语法上需要一条语句但并不需要执行任何代码时用来临时占位,例如::" + +#: ../../reference/simple_stmts.rst:441 +msgid "The :keyword:`!del` statement" +msgstr ":keyword:`!del` 语句" + +#: ../../reference/simple_stmts.rst:451 +msgid "" +"Deletion is recursively defined very similar to the way assignment is " +"defined. Rather than spelling it out in full details, here are some hints." +msgstr "删除是递归定义的,与赋值的定义方式非常类似。 此处不再详细说明,只给出一些提示。" + +#: ../../reference/simple_stmts.rst:454 +msgid "" +"Deletion of a target list recursively deletes each target, from left to " +"right." +msgstr "目标列表的删除将从左至右递归地删除每一个目标。" + +#: ../../reference/simple_stmts.rst:460 +msgid "" +"Deletion of a name removes the binding of that name from the local or global" +" namespace, depending on whether the name occurs in a :keyword:`global` " +"statement in the same code block. If the name is unbound, a " +":exc:`NameError` exception will be raised." +msgstr "" +"名称的删除将从局部或全局命名空间中移除该名称的绑定,具体作用域的确定是看该名称是否有在同一代码块的 :keyword:`global` 语句中出现。 " +"如果该名称未被绑定,将会引发 :exc:`NameError`。" + +#: ../../reference/simple_stmts.rst:467 +msgid "" +"Deletion of attribute references, subscriptions and slicings is passed to " +"the primary object involved; deletion of a slicing is in general equivalent " +"to assignment of an empty slice of the right type (but even this is " +"determined by the sliced object)." +msgstr "属性引用、抽取和切片的删除会被传递给相应的原型对象;删除一个切片基本等价于赋值为一个右侧类型的空切片(但即便这一点也是由切片对象决定的)。" + +#: ../../reference/simple_stmts.rst:472 +msgid "" +"Previously it was illegal to delete a name from the local namespace if it " +"occurs as a free variable in a nested block." +msgstr "在之前版本中,如果一个名称作为被嵌套代码块中的自由变量出现,则将其从局部命名空间中删除是非法的。" + +#: ../../reference/simple_stmts.rst:480 +msgid "The :keyword:`!return` statement" +msgstr ":keyword:`!return` 语句" + +#: ../../reference/simple_stmts.rst:490 +msgid "" +":keyword:`return` may only occur syntactically nested in a function " +"definition, not within a nested class definition." +msgstr ":keyword:`return` 在语法上只会出现于函数定义所嵌套的代码,不会出现于类定义所嵌套的代码。" + +#: ../../reference/simple_stmts.rst:493 +msgid "" +"If an expression list is present, it is evaluated, else ``None`` is " +"substituted." +msgstr "如果提供了表达式列表,它将被求值,否则以 ``None`` 替代。" + +#: ../../reference/simple_stmts.rst:495 +msgid "" +":keyword:`return` leaves the current function call with the expression list " +"(or ``None``) as return value." +msgstr ":keyword:`return` 会离开当前函数调用,并以表达式列表 (或 ``None``) 作为返回值。" + +#: ../../reference/simple_stmts.rst:500 +msgid "" +"When :keyword:`return` passes control out of a :keyword:`try` statement with" +" a :keyword:`finally` clause, that :keyword:`!finally` clause is executed " +"before really leaving the function." +msgstr "" +"当 :keyword:`return` 将控制流传出一个带有 :keyword:`finally` 子句的 :keyword:`try` 语句时,该 " +":keyword:`!finally` 子句会先被执行然后再真正离开该函数。" + +#: ../../reference/simple_stmts.rst:504 +msgid "" +"In a generator function, the :keyword:`return` statement indicates that the " +"generator is done and will cause :exc:`StopIteration` to be raised. The " +"returned value (if any) is used as an argument to construct " +":exc:`StopIteration` and becomes the :attr:`StopIteration.value` attribute." +msgstr "" +"在一个生成器函数中,:keyword:`return` 语句表示生成器已完成并将导致 :exc:`StopIteration` 被引发。 " +"返回值(如果有的话)会被当作一个参数用来构建 :exc:`StopIteration` 并成为 :attr:`StopIteration.value` " +"属性。" + +#: ../../reference/simple_stmts.rst:509 +msgid "" +"In an asynchronous generator function, an empty :keyword:`return` statement " +"indicates that the asynchronous generator is done and will cause " +":exc:`StopAsyncIteration` to be raised. A non-empty :keyword:`!return` " +"statement is a syntax error in an asynchronous generator function." +msgstr "" +"在一个异步生成器函数中,一个空的 :keyword:`return` 语句表示异步生成器已完成并将导致 " +":exc:`StopAsyncIteration` 被引发。 一个非空的 :keyword:`!return` 语句在异步生成器函数中会导致语法错误。" + +#: ../../reference/simple_stmts.rst:517 +msgid "The :keyword:`!yield` statement" +msgstr ":keyword:`!yield` 语句" + +#: ../../reference/simple_stmts.rst:529 +msgid "" +"A :keyword:`yield` statement is semantically equivalent to a :ref:`yield " +"expression `. The yield statement can be used to omit the " +"parentheses that would otherwise be required in the equivalent yield " +"expression statement. For example, the yield statements ::" +msgstr "" +":keyword:`yield` 语句在语义上等同于 :ref:`yield 表达式 `。 yield 语句可用来省略在使用等效的" +" yield 表达式语句时所必须的圆括号。 例如,以下 yield 语句 ::" + +#: ../../reference/simple_stmts.rst:537 +msgid "are equivalent to the yield expression statements ::" +msgstr "等同于以下 yield 表达式语句 ::" + +#: ../../reference/simple_stmts.rst:542 +msgid "" +"Yield expressions and statements are only used when defining a " +":term:`generator` function, and are only used in the body of the generator " +"function. Using yield in a function definition is sufficient to cause that " +"definition to create a generator function instead of a normal function." +msgstr "" +"yield 表达式和语句仅在定义 :term:`generator` 函数时使用,并且仅被用于生成器函数的函数体内部。 在函数定义中使用 yield " +"就足以使得该定义创建的是生成器函数而非普通函数。" + +#: ../../reference/simple_stmts.rst:547 +msgid "" +"For full details of :keyword:`yield` semantics, refer to the " +":ref:`yieldexpr` section." +msgstr "有关 :keyword:`yield` 语义的完整细节请参看 :ref:`yieldexpr` 一节。" + +#: ../../reference/simple_stmts.rst:553 +msgid "The :keyword:`!raise` statement" +msgstr ":keyword:`!raise` 语句" + +#: ../../reference/simple_stmts.rst:564 +msgid "" +"If no expressions are present, :keyword:`raise` re-raises the exception that" +" is currently being handled, which is also known as the *active exception*. " +"If there isn't currently an active exception, a :exc:`RuntimeError` " +"exception is raised indicating that this is an error." +msgstr "" +"如果没有提供表达式,则 :keyword:`raise` 会重新引发当前正在处理的异常,它也被称为 *活动的异常*。 如果当前没有活动的异常,则会引发 " +":exc:`RuntimeError` 来提示发生了错误。" + +#: ../../reference/simple_stmts.rst:569 +msgid "" +"Otherwise, :keyword:`raise` evaluates the first expression as the exception " +"object. It must be either a subclass or an instance of " +":class:`BaseException`. If it is a class, the exception instance will be " +"obtained when needed by instantiating the class with no arguments." +msgstr "" +"否则的话,:keyword:`raise` 会将第一个表达式求值为异常对象。 它必须为 :class:`BaseException` 的子类或实例。 " +"如果它是一个类,当需要时会通过不带参数地实例化该类来获得异常的实例。" + +#: ../../reference/simple_stmts.rst:574 +msgid "" +"The :dfn:`type` of the exception is the exception instance's class, the " +":dfn:`value` is the instance itself." +msgstr "异常的 :dfn:`类型` 为异常实例的类,:dfn:`值` 为实例本身。" + +#: ../../reference/simple_stmts.rst:579 +msgid "" +"A traceback object is normally created automatically when an exception is " +"raised and attached to it as the :attr:`__traceback__` attribute, which is " +"writable. You can create an exception and set your own traceback in one step" +" using the :meth:`~BaseException.with_traceback` exception method (which " +"returns the same exception instance, with its traceback set to its " +"argument), like so::" +msgstr "" +"当有异常被引发时通常会自动创建一个回溯对象并将其关联到它的 :attr:`__traceback__` 属性,该属性是可写的。 你可以创建一个异常并使用" +" :meth:`~BaseException.with_traceback` " +"异常方法(该方法将返回同一异常实例,并将回溯对象设为其参数)直接设置自己的回溯对象,就像这样like so::" + +#: ../../reference/simple_stmts.rst:591 +msgid "" +"The ``from`` clause is used for exception chaining: if given, the second " +"*expression* must be another exception class or instance. If the second " +"expression is an exception instance, it will be attached to the raised " +"exception as the :attr:`__cause__` attribute (which is writable). If the " +"expression is an exception class, the class will be instantiated and the " +"resulting exception instance will be attached to the raised exception as the" +" :attr:`__cause__` attribute. If the raised exception is not handled, both " +"exceptions will be printed::" +msgstr "" +"``from`` 子句用于异常串连:如果有该子句,则第二个 *表达式* 必须为另一个异常类或实例。 如果第二个表达式是一个异常实例,它将作为可写的 " +":attr:`__cause__` 属性被关联到所引发的异常。 如果该表达式是一个异常类,这个类将被实例化且所生成的异常实例将作为 " +":attr:`__cause__` 属性被关联到所引发的异常。 如果所引发的异常未被处理,则两个异常都将被打印出来::" + +#: ../../reference/simple_stmts.rst:615 +msgid "" +"A similar mechanism works implicitly if a new exception is raised when an " +"exception is already being handled. An exception may be handled when an " +":keyword:`except` or :keyword:`finally` clause, or a :keyword:`with` " +"statement, is used. The previous exception is then attached as the new " +"exception's :attr:`__context__` attribute::" +msgstr "" +"当已经有一个异常在处理时如果有新的异常被引发则类似的机制会隐式地起作用。 异常可以通过使用 :keyword:`except` 或 " +":keyword:`finally` 子句或是 :keyword:`with` 语句来处理。 之前的异常将被关联至新异常的 " +":attr:`__context__` 属性::" + +#: ../../reference/simple_stmts.rst:636 +msgid "" +"Exception chaining can be explicitly suppressed by specifying :const:`None` " +"in the ``from`` clause::" +msgstr "异常串连可通过在 ``from`` 子句中指定 :const:`None` 来显式地加以抑制::" + +#: ../../reference/simple_stmts.rst:648 +msgid "" +"Additional information on exceptions can be found in section " +":ref:`exceptions`, and information about handling exceptions is in section " +":ref:`try`." +msgstr "有关异常的更多信息可在 :ref:`exceptions` 一节查看,有关处理异常的信息可在 :ref:`try` 一节查看。" + +#: ../../reference/simple_stmts.rst:651 +msgid ":const:`None` is now permitted as ``Y`` in ``raise X from Y``." +msgstr ":const:`None` 现在允许被用作 ``raise X from Y`` 中的 ``Y``。" + +#: ../../reference/simple_stmts.rst:654 +msgid "" +"The ``__suppress_context__`` attribute to suppress automatic display of the " +"exception context." +msgstr "使用 ``__suppress_context__`` 属性来抑制异常上下文的自动显示。" + +#: ../../reference/simple_stmts.rst:661 +msgid "The :keyword:`!break` statement" +msgstr ":keyword:`!break` 语句" + +#: ../../reference/simple_stmts.rst:672 +msgid "" +":keyword:`break` may only occur syntactically nested in a :keyword:`for` or " +":keyword:`while` loop, but not nested in a function or class definition " +"within that loop." +msgstr "" +":keyword:`break` 在语法上只会出现于 :keyword:`for` 或 :keyword:`while` " +"循环所嵌套的代码,但不会出现于该循环内部的函数或类定义所嵌套的代码。" + +#: ../../reference/simple_stmts.rst:679 +msgid "" +"It terminates the nearest enclosing loop, skipping the optional " +":keyword:`!else` clause if the loop has one." +msgstr "它会终结最近的外层循环,如果循环有可选的 :keyword:`!else` 子句,也会跳过该子句。" + +#: ../../reference/simple_stmts.rst:682 +msgid "" +"If a :keyword:`for` loop is terminated by :keyword:`break`, the loop control" +" target keeps its current value." +msgstr "如果一个 :keyword:`for` 循环被 :keyword:`break` 所终结,该循环的控制目标会保持其当前值。" + +#: ../../reference/simple_stmts.rst:687 +msgid "" +"When :keyword:`break` passes control out of a :keyword:`try` statement with " +"a :keyword:`finally` clause, that :keyword:`!finally` clause is executed " +"before really leaving the loop." +msgstr "" +"当 :keyword:`break` 将控制流传出一个带有 :keyword:`finally` 子句的 :keyword:`try` 语句时,该 " +":keyword:`!finally` 子句会先被执行然后再真正离开该循环。" + +#: ../../reference/simple_stmts.rst:695 +msgid "The :keyword:`!continue` statement" +msgstr ":keyword:`!continue` 语句" + +#: ../../reference/simple_stmts.rst:707 +msgid "" +":keyword:`continue` may only occur syntactically nested in a :keyword:`for` " +"or :keyword:`while` loop, but not nested in a function or class definition " +"within that loop. It continues with the next cycle of the nearest enclosing" +" loop." +msgstr "" +":keyword:`continue` 在语法上只会出现于 :keyword:`for` 或 :keyword:`while` " +"循环所嵌套的代码中,但不会出现于该循环内部的函数或类定义中。 它会继续执行最近的外层循环的下一个轮次。" + +#: ../../reference/simple_stmts.rst:711 +msgid "" +"When :keyword:`continue` passes control out of a :keyword:`try` statement " +"with a :keyword:`finally` clause, that :keyword:`!finally` clause is " +"executed before really starting the next loop cycle." +msgstr "" +"当 :keyword:`continue` 将控制流传出一个带有 :keyword:`finally` 子句的 :keyword:`try` 语句时,该" +" :keyword:`!finally` 子句会先被执行然后再真正开始循环的下一个轮次。" + +#: ../../reference/simple_stmts.rst:720 +msgid "The :keyword:`!import` statement" +msgstr ":keyword:`!import` 语句" + +#: ../../reference/simple_stmts.rst:741 +msgid "" +"The basic import statement (no :keyword:`from` clause) is executed in two " +"steps:" +msgstr "基本的 import 语句(不带 :keyword:`from` 子句)会分两步执行:" + +#: ../../reference/simple_stmts.rst:744 +msgid "find a module, loading and initializing it if necessary" +msgstr "查找一个模块,如果有必要还会加载并初始化模块。" + +#: ../../reference/simple_stmts.rst:745 +msgid "" +"define a name or names in the local namespace for the scope where the " +":keyword:`import` statement occurs." +msgstr "在局部命名空间中为 :keyword:`import` 语句发生位置所处的作用域定义一个或多个名称。" + +#: ../../reference/simple_stmts.rst:748 +msgid "" +"When the statement contains multiple clauses (separated by commas) the two " +"steps are carried out separately for each clause, just as though the clauses" +" had been separated out into individual import statements." +msgstr "当语句包含多个子句(由逗号分隔)时这两个步骤将对每个子句分别执行,如同这些子句被分成独立的 import 语句一样。" + +#: ../../reference/simple_stmts.rst:753 +msgid "" +"The details of the first step, finding and loading modules are described in " +"greater detail in the section on the :ref:`import system `, " +"which also describes the various types of packages and modules that can be " +"imported, as well as all the hooks that can be used to customize the import " +"system. Note that failures in this step may indicate either that the module " +"could not be located, *or* that an error occurred while initializing the " +"module, which includes execution of the module's code." +msgstr "" +"第一个步骤即查找和加载模块的详情 :ref:`导入系统 ` " +"一节中有更详细的描述,其中也描述了可被导入的多种类型的包和模块,以及可用于定制导入系统的所有钩子对象。 " +"请注意这一步如果失败,则可能说明模块无法找到,*或者* 是在初始化模块,包括执行模块代码期间发生了错误。" + +#: ../../reference/simple_stmts.rst:761 +msgid "" +"If the requested module is retrieved successfully, it will be made available" +" in the local namespace in one of three ways:" +msgstr "如果成功获取到请求的模块,则可以通过以下三种方式一之在局部命名空间中使用它:" + +#: ../../reference/simple_stmts.rst:766 +msgid "" +"If the module name is followed by :keyword:`!as`, then the name following " +":keyword:`!as` is bound directly to the imported module." +msgstr "模块名后使用 :keyword:`!as` 时,直接把 :keyword:`!as` 后的名称与导入模块绑定。" + +#: ../../reference/simple_stmts.rst:768 +msgid "" +"If no other name is specified, and the module being imported is a top level " +"module, the module's name is bound in the local namespace as a reference to " +"the imported module" +msgstr "如果没有指定其他名称,且被导入的模块为最高层级模块,则模块的名称将被绑定到局部命名空间作为对所导入模块的引用。" + +#: ../../reference/simple_stmts.rst:771 +msgid "" +"If the module being imported is *not* a top level module, then the name of " +"the top level package that contains the module is bound in the local " +"namespace as a reference to the top level package. The imported module must " +"be accessed using its full qualified name rather than directly" +msgstr "" +"如果被导入的模块 *不是* 最高层级模块,则包含该模块的最高层级包的名称将被绑定到局部命名空间作为对该最高层级包的引用。 " +"所导入的模块必须使用其完整限定名称来访问而不能直接访问。" + +#: ../../reference/simple_stmts.rst:781 +msgid "The :keyword:`from` form uses a slightly more complex process:" +msgstr ":keyword:`from` 形式使用的过程略微繁复一些:" + +#: ../../reference/simple_stmts.rst:783 +msgid "" +"find the module specified in the :keyword:`from` clause, loading and " +"initializing it if necessary;" +msgstr "查找 :keyword:`from` 子句中指定的模块,如有必要还会加载并初始化模块;" + +#: ../../reference/simple_stmts.rst:785 +msgid "" +"for each of the identifiers specified in the :keyword:`import` clauses:" +msgstr "对于 :keyword:`import` 子句中指定的每个标识符:" + +#: ../../reference/simple_stmts.rst:787 +msgid "check if the imported module has an attribute by that name" +msgstr "检查被导入模块是否有该名称的属性" + +#: ../../reference/simple_stmts.rst:788 +msgid "" +"if not, attempt to import a submodule with that name and then check the " +"imported module again for that attribute" +msgstr "如果没有,尝试导入具有该名称的子模块,然后再次检查被导入模块是否有该属性" + +#: ../../reference/simple_stmts.rst:790 +msgid "if the attribute is not found, :exc:`ImportError` is raised." +msgstr "如果未找到该属性,则引发 :exc:`ImportError`。" + +#: ../../reference/simple_stmts.rst:791 +msgid "" +"otherwise, a reference to that value is stored in the local namespace, using" +" the name in the :keyword:`!as` clause if it is present, otherwise using the" +" attribute name" +msgstr "否则的话,将对该值的引用存入局部命名空间,如果有 :keyword:`!as` 子句则使用其指定的名称,否则使用该属性的名称" + +#: ../../reference/simple_stmts.rst:795 +msgid "Examples::" +msgstr "示例::" + +#: ../../reference/simple_stmts.rst:805 +msgid "" +"If the list of identifiers is replaced by a star (``'*'``), all public names" +" defined in the module are bound in the local namespace for the scope where " +"the :keyword:`import` statement occurs." +msgstr "" +"如果标识符列表改为一个星号 (``'*'``),则在模块中定义的全部公有名称都将按 :keyword:`import` " +"语句所在的作用域被绑定到局部命名空间。" + +#: ../../reference/simple_stmts.rst:811 +msgid "" +"The *public names* defined by a module are determined by checking the " +"module's namespace for a variable named ``__all__``; if defined, it must be " +"a sequence of strings which are names defined or imported by that module. " +"The names given in ``__all__`` are all considered public and are required to" +" exist. If ``__all__`` is not defined, the set of public names includes all" +" names found in the module's namespace which do not begin with an underscore" +" character (``'_'``). ``__all__`` should contain the entire public API. It " +"is intended to avoid accidentally exporting items that are not part of the " +"API (such as library modules which were imported and used within the " +"module)." +msgstr "" +"一个模块所定义的 *公有名称* 是由在模块的命名空间中检测一个名为 ``__all__`` " +"的变量来确定的;如果有定义,它必须是一个字符串列表,其中的项为该模块所定义或导入的名称。 在 ``__all__`` " +"中所给出的名称都会被视为公有并且应当存在。 如果 ``__all__`` 没有被定义,则公有名称的集合将包含在模块的命名空间中找到的所有不以下划线字符 " +"(``'_'``) 打头的名称。 ``__all__`` 应当包括整个公有 API。 它的目标是避免意外地导出不属于 API " +"的一部分的项(例如在模块内部被导入和使用的库模块)。" + +#: ../../reference/simple_stmts.rst:821 +msgid "" +"The wild card form of import --- ``from module import *`` --- is only " +"allowed at the module level. Attempting to use it in class or function " +"definitions will raise a :exc:`SyntaxError`." +msgstr "" +"通配符形式的导入 --- ``from module import *`` --- 仅在模块层级上被允许。 尝试在类或函数定义中使用它将引发 " +":exc:`SyntaxError`。" + +#: ../../reference/simple_stmts.rst:828 +msgid "" +"When specifying what module to import you do not have to specify the " +"absolute name of the module. When a module or package is contained within " +"another package it is possible to make a relative import within the same top" +" package without having to mention the package name. By using leading dots " +"in the specified module or package after :keyword:`from` you can specify how" +" high to traverse up the current package hierarchy without specifying exact " +"names. One leading dot means the current package where the module making the" +" import exists. Two dots means up one package level. Three dots is up two " +"levels, etc. So if you execute ``from . import mod`` from a module in the " +"``pkg`` package then you will end up importing ``pkg.mod``. If you execute " +"``from ..subpkg2 import mod`` from within ``pkg.subpkg1`` you will import " +"``pkg.subpkg2.mod``. The specification for relative imports is contained in " +"the :ref:`relativeimports` section." +msgstr "" +"当指定要导入哪个模块时,你不必指定模块的绝对名称。 当一个模块或包被包含在另一个包之中时,可以在同一个最高层级包中进行相对导入,而不必提及包名称。 " +"通过在 :keyword:`from` 之后指定的模块或包中使用前缀点号,你可以在不指定确切名称的情况下指明在当前包层级结构中要上溯多少级。 " +"一个前缀点号表示是执行导入的模块所在的当前包,两个点号表示上溯一个包层级。 三个点号表示上溯两级,依此类推。 因此如果你执行 ``from . " +"import mod`` 时所处位置为 ``pkg`` 包内的一个模块,则最终你将导入 ``pkg.mod``。 如果你执行 ``from " +"..subpkg2 import mod`` 时所处位置为 ``pkg.subpkg1`` 则你将导入 ``pkg.subpkg2.mod``。 " +"有关相对导入的规范说明包含在 :ref:`relativeimports` 一节中。" + +#: ../../reference/simple_stmts.rst:842 +msgid "" +":func:`importlib.import_module` is provided to support applications that " +"determine dynamically the modules to be loaded." +msgstr ":func:`importlib.import_module` 被提供用来为动态地确定要导入模块的应用提供支持。" + +#: ../../reference/simple_stmts.rst:845 +msgid "" +"Raises an :ref:`auditing event ` ``import`` with arguments " +"``module``, ``filename``, ``sys.path``, ``sys.meta_path``, " +"``sys.path_hooks``." +msgstr "" +"引发一个 :ref:`审计事件 ` ``import`` 并附带参数 ``module``, ``filename``, " +"``sys.path``, ``sys.meta_path``, ``sys.path_hooks``。" + +#: ../../reference/simple_stmts.rst:850 +msgid "Future statements" +msgstr "future 语句" + +#: ../../reference/simple_stmts.rst:856 +msgid "" +"A :dfn:`future statement` is a directive to the compiler that a particular " +"module should be compiled using syntax or semantics that will be available " +"in a specified future release of Python where the feature becomes standard." +msgstr "" +":dfn:`future 语句` 是一种针对编译器的指令,指明某个特定模块应当使用在特定的未来某个 Python 发行版中成为标准特性的语法或语义。" + +#: ../../reference/simple_stmts.rst:860 +msgid "" +"The future statement is intended to ease migration to future versions of " +"Python that introduce incompatible changes to the language. It allows use " +"of the new features on a per-module basis before the release in which the " +"feature becomes standard." +msgstr "" +"future 语句的目的是使得向在语言中引入了不兼容改变的 Python 未来版本的迁移更为容易。 " +"它允许基于每个模块在某种新特性成为标准之前的发行版中使用该特性。" + +#: ../../reference/simple_stmts.rst:872 +msgid "" +"A future statement must appear near the top of the module. The only lines " +"that can appear before a future statement are:" +msgstr "future 语句必须在靠近模块开头的位置出现。 可以出现在 future 语句之前行只有:" + +#: ../../reference/simple_stmts.rst:875 +msgid "the module docstring (if any)," +msgstr "模块的文档字符串(如果存在)," + +#: ../../reference/simple_stmts.rst:876 +msgid "comments," +msgstr "注释," + +#: ../../reference/simple_stmts.rst:877 +msgid "blank lines, and" +msgstr "空行,以及" + +#: ../../reference/simple_stmts.rst:878 +msgid "other future statements." +msgstr "其他 future 语句。" + +#: ../../reference/simple_stmts.rst:880 +msgid "" +"The only feature that requires using the future statement is ``annotations``" +" (see :pep:`563`)." +msgstr "唯一需要使用 future 语句的特性是 ``标注`` (参见 :pep:`563`)。" + +#: ../../reference/simple_stmts.rst:883 +msgid "" +"All historical features enabled by the future statement are still recognized" +" by Python 3. The list includes ``absolute_import``, ``division``, " +"``generators``, ``generator_stop``, ``unicode_literals``, " +"``print_function``, ``nested_scopes`` and ``with_statement``. They are all " +"redundant because they are always enabled, and only kept for backwards " +"compatibility." +msgstr "" +"future 语句所启用的所有历史特性仍然为 Python 3 所认可。 其中包括 ``absolute_import``, " +"``division``, ``generators``, ``generator_stop``, ``unicode_literals``, " +"``print_function``, ``nested_scopes`` 和 ``with_statement``。 " +"它们都已成为冗余项,因为它们总是为已启用状态,保留它们只是为了向后兼容。" + +#: ../../reference/simple_stmts.rst:890 +msgid "" +"A future statement is recognized and treated specially at compile time: " +"Changes to the semantics of core constructs are often implemented by " +"generating different code. It may even be the case that a new feature " +"introduces new incompatible syntax (such as a new reserved word), in which " +"case the compiler may need to parse the module differently. Such decisions " +"cannot be pushed off until runtime." +msgstr "" +"future 语句在编译时会被识别并做特殊对待:对核心构造语义的改变常常是通过生成不同的代码来实现。 " +"新的特性甚至可能会引入新的不兼容语法(例如新的保留字),在这种情况下编译器可能需要以不同的方式来解析模块。 这样的决定不能推迟到运行时方才作出。" + +#: ../../reference/simple_stmts.rst:897 +msgid "" +"For any given release, the compiler knows which feature names have been " +"defined, and raises a compile-time error if a future statement contains a " +"feature not known to it." +msgstr "对于任何给定的发布版本,编译器要知道哪些特性名称已被定义,如果某个 future 语句包含未知的特性则会引发编译时错误。" + +#: ../../reference/simple_stmts.rst:901 +msgid "" +"The direct runtime semantics are the same as for any import statement: there" +" is a standard module :mod:`__future__`, described later, and it will be " +"imported in the usual way at the time the future statement is executed." +msgstr "" +"直接运行时的语义与任何 import 语句相同:存在一个后文将详细说明的标准模块 :mod:`__future__`,它会在执行 future " +"语句时以通常的方式被导入。" + +#: ../../reference/simple_stmts.rst:905 +msgid "" +"The interesting runtime semantics depend on the specific feature enabled by " +"the future statement." +msgstr "相应的运行时语义取决于 future 语句所启用的指定特性。" + +#: ../../reference/simple_stmts.rst:908 +msgid "Note that there is nothing special about the statement::" +msgstr "请注意以下语句没有任何特别之处::" + +#: ../../reference/simple_stmts.rst:912 +msgid "" +"That is not a future statement; it's an ordinary import statement with no " +"special semantics or syntax restrictions." +msgstr "这并非 future 语句;它只是一条没有特殊语义或语法限制的普通 import 语句。" + +#: ../../reference/simple_stmts.rst:915 +msgid "" +"Code compiled by calls to the built-in functions :func:`exec` and " +":func:`compile` that occur in a module :mod:`M` containing a future " +"statement will, by default, use the new syntax or semantics associated with " +"the future statement. This can be controlled by optional arguments to " +":func:`compile` --- see the documentation of that function for details." +msgstr "" +"在默认情况下,通过对Code compiled by calls to the 内置函数 :func:`exec` 和 :func:`compile` " +"的调用所编译的代码如果出现于一个包含有 future 语句的模块 :mod:`M` 之中,就会使用 future 语句所关联的语法和语义。 " +"此行为可以通过 :func:`compile` 的可选参数加以控制 --- 请参阅该函数的文档以了解详情。" + +#: ../../reference/simple_stmts.rst:921 +msgid "" +"A future statement typed at an interactive interpreter prompt will take " +"effect for the rest of the interpreter session. If an interpreter is " +"started with the :option:`-i` option, is passed a script name to execute, " +"and the script includes a future statement, it will be in effect in the " +"interactive session started after the script is executed." +msgstr "" +"在交互式解释器提示符中键入的 future 语句将在解释器会话此后的交互中有效。 如果一个解释器的启动使用了 :option:`-i` " +"选项启动,并传入了一个脚本名称来执行,且该脚本包含 future 语句,它将在交互式会话开始执行脚本之后保持有效。" + +#: ../../reference/simple_stmts.rst:929 +msgid ":pep:`236` - Back to the __future__" +msgstr ":pep:`236` - 回到 __future__" + +#: ../../reference/simple_stmts.rst:930 +msgid "The original proposal for the __future__ mechanism." +msgstr "有关 __future__ 机制的最初提议。" + +#: ../../reference/simple_stmts.rst:936 +msgid "The :keyword:`!global` statement" +msgstr ":keyword:`!global` 语句" + +#: ../../reference/simple_stmts.rst:946 +msgid "" +"The :keyword:`global` statement is a declaration which holds for the entire " +"current code block. It means that the listed identifiers are to be " +"interpreted as globals. It would be impossible to assign to a global " +"variable without :keyword:`!global`, although free variables may refer to " +"globals without being declared global." +msgstr "" +":keyword:`global` 语句是作用于整个当前代码块的声明。 它意味着所列出的标识符将被解读为全局变量。 要给全局变量赋值不可能不用到 " +":keyword:`!global` 关键字,不过自由变量也可以指向全局变量而不必声明为全局变量。" + +#: ../../reference/simple_stmts.rst:952 +msgid "" +"Names listed in a :keyword:`global` statement must not be used in the same " +"code block textually preceding that :keyword:`!global` statement." +msgstr "在 :keyword:`global` 语句中列出的名称不得在同一代码块内该 :keyword:`!global` 语句之前的位置中使用。" + +#: ../../reference/simple_stmts.rst:955 +msgid "" +"Names listed in a :keyword:`global` statement must not be defined as formal " +"parameters or in a :keyword:`for` loop control target, :keyword:`class` " +"definition, function definition, :keyword:`import` statement, or variable " +"annotation." +msgstr "" +"在 :keyword:`global` 语句中列出的名称不能被定义为形式参数,也不能在 :keyword:`for` " +"循环的控制目标、:keyword:`class` 定义、函数定义、:keyword:`import` 语句或变量标注中定义。" + +#: ../../reference/simple_stmts.rst:962 +msgid "" +"The current implementation does not enforce some of these restrictions, but " +"programs should not abuse this freedom, as future implementations may " +"enforce them or silently change the meaning of the program." +msgstr "当前的实现并未强制要求所有的上述限制,但程序不应当滥用这样的自由,因为未来的实现可能会改为强制要求,并静默地改变程序的含义。" + +#: ../../reference/simple_stmts.rst:971 +msgid "" +"**Programmer's note:** :keyword:`global` is a directive to the parser. It " +"applies only to code parsed at the same time as the :keyword:`!global` " +"statement. In particular, a :keyword:`!global` statement contained in a " +"string or code object supplied to the built-in :func:`exec` function does " +"not affect the code block *containing* the function call, and code contained" +" in such a string is unaffected by :keyword:`!global` statements in the code" +" containing the function call. The same applies to the :func:`eval` and " +":func:`compile` functions." +msgstr "" +"**程序员注意事项:** :keyword:`global` 是对解析器的指令。 它仅对与 :keyword:`!global` " +"语句同时被解析的代码起作用。 特别地,包含在提供给内置 :func:`exec` 函数字符串或代码对象中的 :keyword:`!global` " +"语句并不会影响 *包含* 该函数调用的代码块,而包含在这种字符串中的代码也不会受到包含该函数调用的代码中的 :keyword:`!global` " +"语句影响。 这同样适用于 :func:`eval` 和 :func:`compile` 函数。" + +#: ../../reference/simple_stmts.rst:983 +msgid "The :keyword:`!nonlocal` statement" +msgstr ":keyword:`!nonlocal` 语句" + +#: ../../reference/simple_stmts.rst:995 +msgid "" +"The :keyword:`nonlocal` statement causes the listed identifiers to refer to " +"previously bound variables in the nearest enclosing scope excluding globals." +" This is important because the default behavior for binding is to search the" +" local namespace first. The statement allows encapsulated code to rebind " +"variables outside of the local scope besides the global (module) scope." +msgstr "" +":keyword:`nonlocal` 语句会使得所列出的名称指向之前在最近的包含作用域中绑定的除全局变量以外的变量。 " +"这种功能很重要,因为绑定的默认行为是先搜索局部命名空间。 这个语句允许被封装的代码重新绑定局部作用域以外且非全局(模块)作用域当中的变量。" + +#: ../../reference/simple_stmts.rst:1005 +msgid "" +"Names listed in a :keyword:`nonlocal` statement, unlike those listed in a " +":keyword:`global` statement, must refer to pre-existing bindings in an " +"enclosing scope (the scope in which a new binding should be created cannot " +"be determined unambiguously)." +msgstr "" +"与 :keyword:`global` 语句中列出的名称不同,:keyword:`nonlocal` " +"语句中列出的名称必须指向之前存在于包含作用域之中的绑定(在这个应当用来创建新绑定的作用域不能被无歧义地确定)。" + +#: ../../reference/simple_stmts.rst:1010 +msgid "" +"Names listed in a :keyword:`nonlocal` statement must not collide with pre-" +"existing bindings in the local scope." +msgstr ":keyword:`nonlocal` 语句中列出的名称不得与之前存在于局部作用域中的绑定相冲突。" + +#: ../../reference/simple_stmts.rst:1015 +msgid ":pep:`3104` - Access to Names in Outer Scopes" +msgstr ":pep:`3104` - 访问外层作用域中的名称" + +#: ../../reference/simple_stmts.rst:1016 +msgid "The specification for the :keyword:`nonlocal` statement." +msgstr "有关 :keyword:`nonlocal` 语句的规范说明。" diff --git a/reference/toplevel_components.po b/reference/toplevel_components.po new file mode 100644 index 000000000..34d8bf772 --- /dev/null +++ b/reference/toplevel_components.po @@ -0,0 +1,135 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) 2001-2025, Python Software Foundation +# This file is distributed under the same license as the Python package. +# FIRST AUTHOR , YEAR. +# +# Translators: +# Freesand Leo , 2019 +# jaystone776 <1732865113@qq.com>, 2021 +# Rafael Fontenelle , 2025 +# +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: Python 3.9\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2025-02-07 16:40+0000\n" +"PO-Revision-Date: 2017-02-16 23:39+0000\n" +"Last-Translator: Rafael Fontenelle , 2025\n" +"Language-Team: Chinese (China) (https://app.transifex.com/python-doc/teams/5390/zh_CN/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: zh_CN\n" +"Plural-Forms: nplurals=1; plural=0;\n" + +#: ../../reference/toplevel_components.rst:6 +msgid "Top-level components" +msgstr "顶级组件" + +#: ../../reference/toplevel_components.rst:10 +msgid "" +"The Python interpreter can get its input from a number of sources: from a " +"script passed to it as standard input or as program argument, typed in " +"interactively, from a module source file, etc. This chapter gives the " +"syntax used in these cases." +msgstr "" +"Python 解释器可以从多种源获得输入:作为标准输入或程序参数传入的脚本,以交互方式键入的语句,导入的模块源文件等等。 " +"这一章将给出在这些情况下所用的语法。" + +#: ../../reference/toplevel_components.rst:19 +msgid "Complete Python programs" +msgstr "完整的 Python 程序" + +#: ../../reference/toplevel_components.rst:28 +msgid "" +"While a language specification need not prescribe how the language " +"interpreter is invoked, it is useful to have a notion of a complete Python " +"program. A complete Python program is executed in a minimally initialized " +"environment: all built-in and standard modules are available, but none have " +"been initialized, except for :mod:`sys` (various system services), " +":mod:`builtins` (built-in functions, exceptions and ``None``) and " +":mod:`__main__`. The latter is used to provide the local and global " +"namespace for execution of the complete program." +msgstr "" +"虽然语言规范描述不必规定如何唤起语言解释器,但对完整的 Python 程序加以说明还是很有用的。 一个完整的 Python " +"程序会在最小初始化环境中被执行:所有内置和标准模块均为可用,但均处于未初始化状态,只有 :mod:`sys` (各种系统服务), " +":mod:`builtins` (内置函数、异常以及 ``None``) 和 :mod:`__main__` 除外。 " +"最后一个模块用于为完整程序的执行提供局部和全局命名空间。" + +#: ../../reference/toplevel_components.rst:36 +msgid "" +"The syntax for a complete Python program is that for file input, described " +"in the next section." +msgstr "适用于一个完整 Python 程序的语法即下节所描述的文件输入。" + +#: ../../reference/toplevel_components.rst:43 +msgid "" +"The interpreter may also be invoked in interactive mode; in this case, it " +"does not read and execute a complete program but reads and executes one " +"statement (possibly compound) at a time. The initial environment is " +"identical to that of a complete program; each statement is executed in the " +"namespace of :mod:`__main__`." +msgstr "" +"解释器也可以通过交互模式被唤起;在此情况下,它并不读取和执行一个完整程序,而是每次读取和执行一条语句(可能为复合语句)。 " +"此时的初始环境与一个完整程序的相同;每条语句会在 :mod:`__main__` 的命名空间中被执行。" + +#: ../../reference/toplevel_components.rst:55 +msgid "" +"A complete program can be passed to the interpreter in three forms: with the" +" :option:`-c` *string* command line option, as a file passed as the first " +"command line argument, or as standard input. If the file or standard input " +"is a tty device, the interpreter enters interactive mode; otherwise, it " +"executes the file as a complete program." +msgstr "" +"一个完整程序可通过三种形式被传递给解释器:使用 :option:`-c` *字符串* 命令行选项,使用一个文件作为第一个命令行参数,或者使用标准输入。 " +"如果文件或标准输入是一个 tty 设置,解释器会进入交互模式;否则的话,它会将文件当作一个完整程序来执行。" + +#: ../../reference/toplevel_components.rst:65 +msgid "File input" +msgstr "文件输入" + +#: ../../reference/toplevel_components.rst:67 +msgid "All input read from non-interactive files has the same form:" +msgstr "所有从非交互式文件读取的输入都具有相同的形式:" + +#: ../../reference/toplevel_components.rst:72 +msgid "This syntax is used in the following situations:" +msgstr "此语法用于下列几种情况:" + +#: ../../reference/toplevel_components.rst:74 +msgid "when parsing a complete Python program (from a file or from a string);" +msgstr "解析一个完整 Python 程序时(从文件或字符串);" + +#: ../../reference/toplevel_components.rst:76 +msgid "when parsing a module;" +msgstr "解析一个模块时;" + +#: ../../reference/toplevel_components.rst:78 +msgid "when parsing a string passed to the :func:`exec` function;" +msgstr "解析一个传递给 :func:`exec` 函数的字符串时;" + +#: ../../reference/toplevel_components.rst:84 +msgid "Interactive input" +msgstr "交互式输入" + +#: ../../reference/toplevel_components.rst:86 +msgid "Input in interactive mode is parsed using the following grammar:" +msgstr "交互模式下的输入使用以下语法进行解析:" + +#: ../../reference/toplevel_components.rst:91 +msgid "" +"Note that a (top-level) compound statement must be followed by a blank line " +"in interactive mode; this is needed to help the parser detect the end of the" +" input." +msgstr "请注意在交互模式下一条(最高层级)复合语句必须带有一个空行;这对于帮助解析器确定输入的结束是必须的。" + +#: ../../reference/toplevel_components.rst:98 +msgid "Expression input" +msgstr "表达式输入" + +#: ../../reference/toplevel_components.rst:103 +msgid "" +":func:`eval` is used for expression input. It ignores leading whitespace. " +"The string argument to :func:`eval` must have the following form:" +msgstr ":func:`eval` 被用于表达式输入。 它会忽略开头的空白。 传递给 :func:`eval` 的字符串参数必须具有以下形式:" diff --git a/sphinx.po b/sphinx.po new file mode 100644 index 000000000..64b7826e4 --- /dev/null +++ b/sphinx.po @@ -0,0 +1,295 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) 2001-2024, Python Software Foundation +# This file is distributed under the same license as the Python package. +# FIRST AUTHOR , YEAR. +# +# Translators: +# cdarlint , 2019 +# JW H , 2019 +# Shengjing Zhu , 2019 +# Freesand Leo , 2022 +# Rafael Fontenelle , 2024 +# +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: Python 3.9\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2024-05-31 16:34+0000\n" +"PO-Revision-Date: 2017-02-16 17:32+0000\n" +"Last-Translator: Rafael Fontenelle , 2024\n" +"Language-Team: Chinese (China) (https://app.transifex.com/python-doc/teams/5390/zh_CN/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: zh_CN\n" +"Plural-Forms: nplurals=1; plural=0;\n" + +#: ../../tools/templates/customsourcelink.html:3 +msgid "This Page" +msgstr "当前页" + +#: ../../tools/templates/customsourcelink.html:5 +msgid "Report a Bug" +msgstr "报告 Bug" + +#: ../../tools/templates/customsourcelink.html:8 +msgid "Show Source" +msgstr "显示源码" + +#: ../../tools/templates/dummy.html:6 +msgid "CPython implementation detail:" +msgstr "CPython 实现细节:" + +#: ../../tools/templates/dummy.html:7 +msgid "" +"Deprecated since version {deprecated}, will be removed in version {removed}" +msgstr "从 {deprecated} 版起不建议使用,将在 {removed} 版中移除" + +#: ../../tools/templates/dummy.html:8 +msgid "Deprecated since version {deprecated}, removed in version {removed}" +msgstr "从 {deprecated} 版起不建议使用,已在 {removed} 版中移除" + +#: ../../tools/templates/dummy.html:13 +msgid "in development" +msgstr "开发中" + +#: ../../tools/templates/dummy.html:14 +msgid "pre-release" +msgstr "预发布" + +#: ../../tools/templates/dummy.html:15 +msgid "stable" +msgstr "稳定" + +#: ../../tools/templates/dummy.html:16 +msgid "security-fixes" +msgstr "安全性修补" + +#: ../../tools/templates/dummy.html:17 +msgid "EOL" +msgstr "EOL" + +#: ../../tools/templates/indexcontent.html:8 +msgid "Welcome! This is the official documentation for Python %(release)s." +msgstr "欢迎!这里是 Python %(release)s 的官方文档。" + +#: ../../tools/templates/indexcontent.html:10 +msgid "Parts of the documentation:" +msgstr "按章节浏览文档:" + +#: ../../tools/templates/indexcontent.html:13 +msgid "What's new in Python %(version)s?" +msgstr "Python %(version)s 有什么新变化?" + +#: ../../tools/templates/indexcontent.html:14 +msgid "or all \"What's new\" documents since 2.0" +msgstr "或显示自 2.0 以来的全部新变化" + +#: ../../tools/templates/indexcontent.html:15 +msgid "Tutorial" +msgstr "教程" + +#: ../../tools/templates/indexcontent.html:16 +msgid "start here" +msgstr "从这里看起" + +#: ../../tools/templates/indexcontent.html:17 +msgid "Library Reference" +msgstr "标准库参考" + +#: ../../tools/templates/indexcontent.html:18 +msgid "keep this under your pillow" +msgstr "放在枕边作为参考" + +#: ../../tools/templates/indexcontent.html:19 +msgid "Language Reference" +msgstr "语言参考" + +#: ../../tools/templates/indexcontent.html:20 +msgid "describes syntax and language elements" +msgstr "讲解基础内容和基本语法" + +#: ../../tools/templates/indexcontent.html:21 +msgid "Python Setup and Usage" +msgstr "Python安装和使用" + +#: ../../tools/templates/indexcontent.html:22 +msgid "how to use Python on different platforms" +msgstr "各种操作系统的介绍都有" + +#: ../../tools/templates/indexcontent.html:23 +msgid "Python HOWTOs" +msgstr "Python 指南" + +#: ../../tools/templates/indexcontent.html:24 +msgid "in-depth documents on specific topics" +msgstr "深入了解特定主题" + +#: ../../tools/templates/indexcontent.html:26 +msgid "Installing Python Modules" +msgstr "安装 Python 模块" + +#: ../../tools/templates/indexcontent.html:27 +msgid "installing from the Python Package Index & other sources" +msgstr "从官方的 PyPI 或者其他来源安装模块" + +#: ../../tools/templates/indexcontent.html:28 +msgid "Distributing Python Modules" +msgstr "分发 Python 模块" + +#: ../../tools/templates/indexcontent.html:29 +msgid "publishing modules for installation by others" +msgstr "发布模块,供其他人安装" + +#: ../../tools/templates/indexcontent.html:30 +msgid "Extending and Embedding" +msgstr "扩展和嵌入" + +#: ../../tools/templates/indexcontent.html:31 +msgid "tutorial for C/C++ programmers" +msgstr "给 C/C++ 程序员的教程" + +#: ../../tools/templates/indexcontent.html:32 +msgid "Python/C API" +msgstr "Python/C API 接口" + +#: ../../tools/templates/indexcontent.html:33 +msgid "reference for C/C++ programmers" +msgstr "给 C/C++ 程序员的参考手册" + +#: ../../tools/templates/indexcontent.html:34 +msgid "FAQs" +msgstr "常见问题" + +#: ../../tools/templates/indexcontent.html:35 +msgid "frequently asked questions (with answers!)" +msgstr "经常被问到的问题(答案也有!)" + +#: ../../tools/templates/indexcontent.html:39 +msgid "Indices and tables:" +msgstr "索引和表格:" + +#: ../../tools/templates/indexcontent.html:42 +msgid "Global Module Index" +msgstr "全局模块索引" + +#: ../../tools/templates/indexcontent.html:43 +msgid "quick access to all modules" +msgstr "快速查找所有的模块" + +#: ../../tools/templates/indexcontent.html:44 +msgid "General Index" +msgstr "总目录" + +#: ../../tools/templates/indexcontent.html:45 +msgid "all functions, classes, terms" +msgstr "所有的函数、类、术语" + +#: ../../tools/templates/indexcontent.html:46 +msgid "Glossary" +msgstr "术语对照表" + +#: ../../tools/templates/indexcontent.html:47 +msgid "the most important terms explained" +msgstr "解释最重要的术语" + +#: ../../tools/templates/indexcontent.html:49 +msgid "Search page" +msgstr "搜索页" + +#: ../../tools/templates/indexcontent.html:50 +msgid "search this documentation" +msgstr "搜索本文档" + +#: ../../tools/templates/indexcontent.html:51 +msgid "Complete Table of Contents" +msgstr "完整目录" + +#: ../../tools/templates/indexcontent.html:52 +msgid "lists all sections and subsections" +msgstr "列出所有的章节和子章节" + +#: ../../tools/templates/indexcontent.html:56 +msgid "Meta information:" +msgstr "元信息:" + +#: ../../tools/templates/indexcontent.html:59 +msgid "Reporting bugs" +msgstr "报告 Bug" + +#: ../../tools/templates/indexcontent.html:60 +msgid "Contributing to Docs" +msgstr "向文档提交贡献" + +#: ../../tools/templates/indexcontent.html:61 +msgid "About the documentation" +msgstr "关于本文档" + +#: ../../tools/templates/indexcontent.html:63 +msgid "History and License of Python" +msgstr "Python 的历史和许可证" + +#: ../../tools/templates/indexcontent.html:64 +msgid "Copyright" +msgstr "版权所有" + +#: ../../tools/templates/indexsidebar.html:1 +msgid "Download" +msgstr "下载" + +#: ../../tools/templates/indexsidebar.html:2 +msgid "Download these documents" +msgstr "下载这些文档" + +#: ../../tools/templates/indexsidebar.html:3 +msgid "Docs by version" +msgstr "各版文档" + +#: ../../tools/templates/indexsidebar.html:5 +msgid "Stable" +msgstr "稳定" + +#: ../../tools/templates/indexsidebar.html:6 +msgid "In development" +msgstr "开发中" + +#: ../../tools/templates/indexsidebar.html:7 +msgid "All versions" +msgstr "全部版本" + +#: ../../tools/templates/indexsidebar.html:10 +msgid "Other resources" +msgstr "其它资源" + +#: ../../tools/templates/indexsidebar.html:13 +msgid "PEP Index" +msgstr "PEP 索引" + +#: ../../tools/templates/indexsidebar.html:14 +msgid "Beginner's Guide" +msgstr "初学者指南" + +#: ../../tools/templates/indexsidebar.html:15 +msgid "Book List" +msgstr "推荐书籍" + +#: ../../tools/templates/indexsidebar.html:16 +msgid "Audio/Visual Talks" +msgstr "音视频小讲座" + +#: ../../tools/templates/indexsidebar.html:17 +msgid "Python Developer’s Guide" +msgstr "Python 开发者指南" + +#: ../../tools/templates/layout.html:6 +msgid "" +"This document is for an old version of Python that is no longer supported.\n" +" You should upgrade, and read the " +msgstr "" +"这个文档所针对的是一个已不再受支持的 Python 旧版本。\n" +" 你应当升级版本,并阅读 " + +#: ../../tools/templates/layout.html:8 +msgid " Python documentation for the current stable release" +msgstr " Python 当前稳定版本的文档" diff --git a/tutorial/appendix.po b/tutorial/appendix.po new file mode 100644 index 000000000..438356d8a --- /dev/null +++ b/tutorial/appendix.po @@ -0,0 +1,188 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) 2001-2022, Python Software Foundation +# This file is distributed under the same license as the Python package. +# FIRST AUTHOR , YEAR. +# +# Translators: +# Jerry Chen , 2017 +# 启迪 吴 , 2017 +# ww song , 2018 +# Henry Zhu , 2018 +# Freesand Leo , 2020 +# +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: Python 3.9\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2022-11-04 14:34+0000\n" +"PO-Revision-Date: 2017-02-16 23:39+0000\n" +"Last-Translator: Freesand Leo , 2020\n" +"Language-Team: Chinese (China) (https://www.transifex.com/python-doc/teams/5390/zh_CN/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: zh_CN\n" +"Plural-Forms: nplurals=1; plural=0;\n" + +#: ../../tutorial/appendix.rst:5 +msgid "Appendix" +msgstr "附录" + +#: ../../tutorial/appendix.rst:11 +msgid "Interactive Mode" +msgstr "交互模式" + +#: ../../tutorial/appendix.rst:16 +msgid "Error Handling" +msgstr "错误处理" + +#: ../../tutorial/appendix.rst:18 +msgid "" +"When an error occurs, the interpreter prints an error message and a stack " +"trace. In interactive mode, it then returns to the primary prompt; when " +"input came from a file, it exits with a nonzero exit status after printing " +"the stack trace. (Exceptions handled by an :keyword:`except` clause in a " +":keyword:`try` statement are not errors in this context.) Some errors are " +"unconditionally fatal and cause an exit with a nonzero exit; this applies to" +" internal inconsistencies and some cases of running out of memory. All " +"error messages are written to the standard error stream; normal output from " +"executed commands is written to standard output." +msgstr "" +"当发生错误时,解释器会打印错误信息和错误堆栈。在交互模式下,将返回到主命令提示符;如果输入内容来自文件,在打印错误堆栈之后,程序会以非零状态退出。(这里所说的错误不包括" +" :keyword:`try` 语句中由 :keyword:`except` " +"所捕获的异常。)有些错误是无条件致命的,会导致程序以非零状态退出;比如内部逻辑矛盾或内存耗尽。所有错误信息都会被写入标准错误流;而命令的正常输出则被写入标准输出流。" + +#: ../../tutorial/appendix.rst:28 +msgid "" +"Typing the interrupt character (usually :kbd:`Control-C` or :kbd:`Delete`) " +"to the primary or secondary prompt cancels the input and returns to the " +"primary prompt. [#]_ Typing an interrupt while a command is executing raises" +" the :exc:`KeyboardInterrupt` exception, which may be handled by a " +":keyword:`try` statement." +msgstr "" +"将中断字符(通常为 :kbd:`Control-C` 或 :kbd:`Delete` )键入主要或辅助提示会取消输入并返回主提示符。 [#]_ " +"在执行命令时键入中断引发的 :exc:`KeyboardInterrupt` 异常,可以由 :keyword:`try` 语句处理。" + +#: ../../tutorial/appendix.rst:38 +msgid "Executable Python Scripts" +msgstr "可执行的Python脚本" + +#: ../../tutorial/appendix.rst:40 +msgid "" +"On BSD'ish Unix systems, Python scripts can be made directly executable, " +"like shell scripts, by putting the line ::" +msgstr "在BSD等类Unix系统上,Python脚本可以直接执行,就像shell脚本一样,第一行添加::" + +#: ../../tutorial/appendix.rst:45 +msgid "" +"(assuming that the interpreter is on the user's :envvar:`PATH`) at the " +"beginning of the script and giving the file an executable mode. The ``#!`` " +"must be the first two characters of the file. On some platforms, this first" +" line must end with a Unix-style line ending (``'\\n'``), not a Windows " +"(``'\\r\\n'``) line ending. Note that the hash, or pound, character, " +"``'#'``, is used to start a comment in Python." +msgstr "" +"(假设解释器位于用户的 :envvar:`PATH` )脚本的开头,并将文件设置为可执行。 ``#!`` " +"必须是文件的前两个字符。在某些平台上,第一行必须以Unix样式的行结尾(``'\\n'``)结束,而不是以Windows(``'\\r\\n'``)行结尾。请注意,散列或磅字符" +" ``'#'`` 在Python中代表注释开始。" + +#: ../../tutorial/appendix.rst:52 +msgid "" +"The script can be given an executable mode, or permission, using the " +":program:`chmod` command." +msgstr "可以使用 :program:`chmod` 命令为脚本提供可执行模式或权限。" + +#: ../../tutorial/appendix.rst:59 +msgid "" +"On Windows systems, there is no notion of an \"executable mode\". The " +"Python installer automatically associates ``.py`` files with ``python.exe`` " +"so that a double-click on a Python file will run it as a script. The " +"extension can also be ``.pyw``, in that case, the console window that " +"normally appears is suppressed." +msgstr "" +"在Windows系统上,没有“可执行模式”的概念。 Python安装程序自动将 ``.py`` 文件与 ``python.exe`` " +"相关联,这样双击Python文件就会将其作为脚本运行。扩展也可以是 ``.pyw`` ,在这种情况下,会隐藏通常出现的控制台窗口。" + +#: ../../tutorial/appendix.rst:69 +msgid "The Interactive Startup File" +msgstr "交互式启动文件" + +#: ../../tutorial/appendix.rst:71 +msgid "" +"When you use Python interactively, it is frequently handy to have some " +"standard commands executed every time the interpreter is started. You can " +"do this by setting an environment variable named :envvar:`PYTHONSTARTUP` to " +"the name of a file containing your start-up commands. This is similar to " +"the :file:`.profile` feature of the Unix shells." +msgstr "" +"当您以交互方式使用Python时,每次启动解释器时都会执行一些标准命令,这通常很方便。您可以通过将名为 :envvar:`PYTHONSTARTUP` " +"的环境变量设置为包含启动命令的文件名来实现。这类似于Unix shell的 :file:`.profile` 功能。" + +#: ../../tutorial/appendix.rst:77 +msgid "" +"This file is only read in interactive sessions, not when Python reads " +"commands from a script, and not when :file:`/dev/tty` is given as the " +"explicit source of commands (which otherwise behaves like an interactive " +"session). It is executed in the same namespace where interactive commands " +"are executed, so that objects that it defines or imports can be used without" +" qualification in the interactive session. You can also change the prompts " +"``sys.ps1`` and ``sys.ps2`` in this file." +msgstr "" +"此文件只会在交互式会话时读取,而非在 Python 从脚本读取指令或是在给定 :file:`/dev/tty` " +"为指令的明确来源时(后者反而表现得像是一个交互式会话)。 该文件执行时所在的命名空间与交互式指令相同,所以它定义或导入的对象可以在交互式会话中直接使用。" +" 你也可以在该文件中更改提示符 ``sys.ps1`` 和 ``sys.ps2``。" + +#: ../../tutorial/appendix.rst:85 +msgid "" +"If you want to read an additional start-up file from the current directory, " +"you can program this in the global start-up file using code like ``if " +"os.path.isfile('.pythonrc.py'): exec(open('.pythonrc.py').read())``. If you " +"want to use the startup file in a script, you must do this explicitly in the" +" script::" +msgstr "" +"如果你想从当前目录中读取一个额外的启动文件,你可以使用像 ``if os.path.isfile('.pythonrc.py'): " +"exec(open('.pythonrc.py').read())`` " +"这样的代码在全局启动文件中对它进行编程。如果要在脚本中使用启动文件,则必须在脚本中显式执行此操作::" + +#: ../../tutorial/appendix.rst:102 +msgid "The Customization Modules" +msgstr "定制模块" + +#: ../../tutorial/appendix.rst:104 +msgid "" +"Python provides two hooks to let you customize it: :mod:`sitecustomize` and " +":mod:`usercustomize`. To see how it works, you need first to find the " +"location of your user site-packages directory. Start Python and run this " +"code::" +msgstr "" +"Python提供了两个钩子来让你自定义它::mod:`sitecustomize` 和 " +":mod:`usercustomize`。要查看其工作原理,首先需要找到用户site-packages目录的位置。启动Python并运行此代码::" + +#: ../../tutorial/appendix.rst:112 +msgid "" +"Now you can create a file named :file:`usercustomize.py` in that directory " +"and put anything you want in it. It will affect every invocation of Python," +" unless it is started with the :option:`-s` option to disable the automatic " +"import." +msgstr "" +"现在,您可以在该目录中创建一个名为 :file:`usercustomize.py` " +"的文件,并将所需内容放入其中。它会影响Python的每次启动,除非它以 :option:`-s` 选项启动,以禁用自动导入。" + +#: ../../tutorial/appendix.rst:116 +msgid "" +":mod:`sitecustomize` works in the same way, but is typically created by an " +"administrator of the computer in the global site-packages directory, and is " +"imported before :mod:`usercustomize`. See the documentation of the " +":mod:`site` module for more details." +msgstr "" +":mod:`sitecustomize` 以相同的方式工作,但通常由计算机管理员在全局 site-packages 目录中创建,并在 " +":mod:`usercustomize` 之前被导入。有关详情请参阅 :mod:`site` 模块的文档。" + +#: ../../tutorial/appendix.rst:123 +msgid "Footnotes" +msgstr "脚注" + +#: ../../tutorial/appendix.rst:124 +msgid "A problem with the GNU Readline package may prevent this." +msgstr "GNU Readline 包的问题可能会阻止这种情况。" diff --git a/tutorial/appetite.po b/tutorial/appetite.po new file mode 100644 index 000000000..ac40c5fb0 --- /dev/null +++ b/tutorial/appetite.po @@ -0,0 +1,178 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) 2001-2022, Python Software Foundation +# This file is distributed under the same license as the Python package. +# FIRST AUTHOR , YEAR. +# +# Translators: +# cdarlint , 2017 +# jaystone776 <1732865113@qq.com>, 2022 +# Freesand Leo , 2022 +# +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: Python 3.9\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2022-11-04 14:34+0000\n" +"PO-Revision-Date: 2017-02-16 23:39+0000\n" +"Last-Translator: Freesand Leo , 2022\n" +"Language-Team: Chinese (China) (https://www.transifex.com/python-doc/teams/5390/zh_CN/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: zh_CN\n" +"Plural-Forms: nplurals=1; plural=0;\n" + +#: ../../tutorial/appetite.rst:5 +msgid "Whetting Your Appetite" +msgstr "课前甜点" + +#: ../../tutorial/appetite.rst:7 +msgid "" +"If you do much work on computers, eventually you find that there's some task" +" you'd like to automate. For example, you may wish to perform a search-and-" +"replace over a large number of text files, or rename and rearrange a bunch " +"of photo files in a complicated way. Perhaps you'd like to write a small " +"custom database, or a specialized GUI application, or a simple game." +msgstr "" +"如果您的工作主要是用电脑完成的,总有一天您会想能不能自动执行一些任务。比如,对大量文本文件执行查找、替换操作;利用复杂的规则重命名、重排序一堆照片文件;也可能您想编写一个小型数据库、或开发专用的图形界面应用,甚至是开发一个简单的游戏。" + +#: ../../tutorial/appetite.rst:13 +msgid "" +"If you're a professional software developer, you may have to work with " +"several C/C++/Java libraries but find the usual write/compile/test/re-" +"compile cycle is too slow. Perhaps you're writing a test suite for such a " +"library and find writing the testing code a tedious task. Or maybe you've " +"written a program that could use an extension language, and you don't want " +"to design and implement a whole new language for your application." +msgstr "" +"专业软件开发人员可能要处理 C/C++/Java " +"库,但编码、编译、测试、再编译这些开发流程太慢了;也许您正在给这些库开发测试套件,但总觉得这项工作真是枯燥乏味。又或许,您开发了个使用扩展语言的软件,却不想为这个软件专门设计一种新语言。" + +#: ../../tutorial/appetite.rst:20 +msgid "Python is just the language for you." +msgstr "那么,Python 正好能满足您的需要。" + +#: ../../tutorial/appetite.rst:22 +msgid "" +"You could write a Unix shell script or Windows batch files for some of these" +" tasks, but shell scripts are best at moving around files and changing text " +"data, not well-suited for GUI applications or games. You could write a " +"C/C++/Java program, but it can take a lot of development time to get even a " +"first-draft program. Python is simpler to use, available on Windows, macOS," +" and Unix operating systems, and will help you get the job done more " +"quickly." +msgstr "" +"你可以针对这些任务编写 Unix shell 脚本或 Windows 批处理文件,但 shell 脚本擅长的是移动文件和改变文本数据,而不适合编写 " +"GUI 应用或游戏。 你可以编写 C/C++/Java 程序,但即使只完成一个初始版程序也需要耗费很长的开发时间。 Python " +"则更为简单易用,同时支持 Windows, macOS 和 Unix 操作系统,并能帮助你更快速地完成工作。" + +#: ../../tutorial/appetite.rst:29 +msgid "" +"Python is simple to use, but it is a real programming language, offering " +"much more structure and support for large programs than shell scripts or " +"batch files can offer. On the other hand, Python also offers much more " +"error checking than C, and, being a *very-high-level language*, it has high-" +"level data types built in, such as flexible arrays and dictionaries. " +"Because of its more general data types Python is applicable to a much larger" +" problem domain than Awk or even Perl, yet many things are at least as easy " +"in Python as in those languages." +msgstr "" +"Python 虽然简单易用,但它可是真正的编程语言,提供了大量的数据结构,也支持开发大型程序,远超 shell 脚本或批处理文件;Python " +"提供的错误检查比 C 还多;作为一种“非常高级的语言”,它内置了灵活的数组与字典等高级数据类型。正因为配备了更通用的数据类型,Python 比 " +"Awk,甚至 Perl 能解决更多问题,而且,很多时候,Python 比这些语言更简单。" + +#: ../../tutorial/appetite.rst:37 +msgid "" +"Python allows you to split your program into modules that can be reused in " +"other Python programs. It comes with a large collection of standard modules" +" that you can use as the basis of your programs --- or as examples to start " +"learning to program in Python. Some of these modules provide things like " +"file I/O, system calls, sockets, and even interfaces to graphical user " +"interface toolkits like Tk." +msgstr "" +"Python 支持把程序分割为模块,以便在其他 Python 程序中复用。它还内置了大量标准模块,作为开发程序的基础 —— 您还可以把这些模块当作学习 " +"Python 编程的实例。这些模块包括 I/O、系统调用、套接字,甚至还包括 Tk 图形用户界面工作套件。" + +#: ../../tutorial/appetite.rst:44 +msgid "" +"Python is an interpreted language, which can save you considerable time " +"during program development because no compilation and linking is necessary." +" The interpreter can be used interactively, which makes it easy to " +"experiment with features of the language, to write throw-away programs, or " +"to test functions during bottom-up program development. It is also a handy " +"desk calculator." +msgstr "" +"Python " +"是一种解释型语言,不需要编译和链接,可以节省大量开发时间。它的解释器实现了交互式操作,轻而易举地就能试用各种语言功能,编写临时程序,或在自底向上的程序开发中测试功能。同时,它还是一个超好用的计算器。" + +#: ../../tutorial/appetite.rst:50 +msgid "" +"Python enables programs to be written compactly and readably. Programs " +"written in Python are typically much shorter than equivalent C, C++, or " +"Java programs, for several reasons:" +msgstr "Python 程序简洁、易读,通常比实现同种功能的 C、C++、Java 代码短很多,原因如下:" + +#: ../../tutorial/appetite.rst:54 +msgid "" +"the high-level data types allow you to express complex operations in a " +"single statement;" +msgstr "高级数据类型允许在单一语句中表述复杂操作;" + +#: ../../tutorial/appetite.rst:57 +msgid "" +"statement grouping is done by indentation instead of beginning and ending " +"brackets;" +msgstr "使用缩进,而不是括号实现代码块分组;" + +#: ../../tutorial/appetite.rst:60 +msgid "no variable or argument declarations are necessary." +msgstr "无需预声明变量或参数。" + +#: ../../tutorial/appetite.rst:62 +msgid "" +"Python is *extensible*: if you know how to program in C it is easy to add a " +"new built-in function or module to the interpreter, either to perform " +"critical operations at maximum speed, or to link Python programs to " +"libraries that may only be available in binary form (such as a vendor-" +"specific graphics library). Once you are really hooked, you can link the " +"Python interpreter into an application written in C and use it as an " +"extension or command language for that application." +msgstr "" +"Python “可以扩展”:会开发 C 语言程序,就能快速上手为解释器增加新的内置函数或模块,不论是让核心程序以最高速度运行,还是把 Python " +"程序链接到只提供预编译程序的库(比如,硬件图形库)。只要下点功夫,就能把 Python 解释器和用 C 开发的应用链接在一起,用它来扩展和控制该应用。" + +#: ../../tutorial/appetite.rst:70 +msgid "" +"By the way, the language is named after the BBC show \"Monty Python's Flying" +" Circus\" and has nothing to do with reptiles. Making references to Monty " +"Python skits in documentation is not only allowed, it is encouraged!" +msgstr "" +"顺便提一句,本语言的命名源自 BBC 的 “Monty Python 飞行马戏团”,与爬行动物无关(Python 原义为“蟒蛇”)。欢迎大家在文档中引用" +" Monty Python 小品短篇集,多多益善!" + +#: ../../tutorial/appetite.rst:74 +msgid "" +"Now that you are all excited about Python, you'll want to examine it in some" +" more detail. Since the best way to learn a language is to use it, the " +"tutorial invites you to play with the Python interpreter as you read." +msgstr "" +"现在,您已经对 Python 跃跃欲试,想深入了解一些细节了吧。要知道,学习语言的最佳方式是上手实践,建议您边阅读本教程,边在 Python " +"解释器中练习。" + +#: ../../tutorial/appetite.rst:78 +msgid "" +"In the next chapter, the mechanics of using the interpreter are explained. " +"This is rather mundane information, but essential for trying out the " +"examples shown later." +msgstr "下一章介绍解释器的用法。这部分内容有些单调乏味,但对上手实践后面的例子来说却至关重要。" + +#: ../../tutorial/appetite.rst:82 +msgid "" +"The rest of the tutorial introduces various features of the Python language " +"and system through examples, beginning with simple expressions, statements " +"and data types, through functions and modules, and finally touching upon " +"advanced concepts like exceptions and user-defined classes." +msgstr "" +"本教程的其他部分将利用各种示例,介绍 Python " +"语言、系统的功能,开始只是简单的表达式、语句和数据类型,然后是函数、模块,最后,介绍一些高级概念,如,异常、用户定义的类等功能。" diff --git a/tutorial/classes.po b/tutorial/classes.po new file mode 100644 index 000000000..96a0e9eab --- /dev/null +++ b/tutorial/classes.po @@ -0,0 +1,1093 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) 2001-2025, Python Software Foundation +# This file is distributed under the same license as the Python package. +# FIRST AUTHOR , YEAR. +# +# Translators: +# Shengjing Zhu , 2018 +# ww song , 2018 +# Konge , 2019 +# Freesand Leo , 2020 +# Hissy , 2021 +# Rafael Fontenelle , 2025 +# +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: Python 3.9\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2025-02-21 17:04+0000\n" +"PO-Revision-Date: 2017-02-16 23:39+0000\n" +"Last-Translator: Rafael Fontenelle , 2025\n" +"Language-Team: Chinese (China) (https://app.transifex.com/python-doc/teams/5390/zh_CN/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: zh_CN\n" +"Plural-Forms: nplurals=1; plural=0;\n" + +#: ../../tutorial/classes.rst:5 +msgid "Classes" +msgstr "类" + +#: ../../tutorial/classes.rst:7 +msgid "" +"Classes provide a means of bundling data and functionality together. " +"Creating a new class creates a new *type* of object, allowing new " +"*instances* of that type to be made. Each class instance can have " +"attributes attached to it for maintaining its state. Class instances can " +"also have methods (defined by its class) for modifying its state." +msgstr "" +"类提供了把数据和功能绑定在一起的方法。创建新类时创建了新的对象 *类型*,从而能够创建该类型的新 " +"*实例*。实例具有能维持自身状态的属性,还具有能修改自身状态的方法(由其所属的类来定义)。" + +#: ../../tutorial/classes.rst:13 +msgid "" +"Compared with other programming languages, Python's class mechanism adds " +"classes with a minimum of new syntax and semantics. It is a mixture of the " +"class mechanisms found in C++ and Modula-3. Python classes provide all the " +"standard features of Object Oriented Programming: the class inheritance " +"mechanism allows multiple base classes, a derived class can override any " +"methods of its base class or classes, and a method can call the method of a " +"base class with the same name. Objects can contain arbitrary amounts and " +"kinds of data. As is true for modules, classes partake of the dynamic " +"nature of Python: they are created at runtime, and can be modified further " +"after creation." +msgstr "" +"和其他编程语言相比,Python 的类只使用了很少的新语法和语义。Python 的类有点类似于 C++ 和 Modula-3 " +"中类的结合体,而且支持面向对象编程(OOP)的所有标准特性:类的继承机制支持多个基类、派生的类能覆盖基类的方法、类的方法能调用基类中的同名方法。对象可包含任意数量和类型的数据。和模块一样,类也支持" +" Python 动态特性:在运行时创建,创建后还可以修改。" + +#: ../../tutorial/classes.rst:23 +msgid "" +"In C++ terminology, normally class members (including the data members) are " +"*public* (except see below :ref:`tut-private`), and all member functions are" +" *virtual*. As in Modula-3, there are no shorthands for referencing the " +"object's members from its methods: the method function is declared with an " +"explicit first argument representing the object, which is provided " +"implicitly by the call. As in Smalltalk, classes themselves are objects. " +"This provides semantics for importing and renaming. Unlike C++ and " +"Modula-3, built-in types can be used as base classes for extension by the " +"user. Also, like in C++, most built-in operators with special syntax " +"(arithmetic operators, subscripting etc.) can be redefined for class " +"instances." +msgstr "" +"如果用 C++ 术语来描述的话,类成员(包括数据成员)通常为 *public* (例外的情况见下文 :ref:`tut-" +"private`),所有成员函数都为 *virtual* 。与 Modula-3 " +"中一样,没有用于从对象的方法中引用本对象成员的简写形式:方法函数在声明时,有一个显式的第一个参数代表本对象,该参数由方法调用隐式提供。与在 " +"Smalltalk 中一样,Python 的类也是对象,这为导入和重命名提供了语义支持。与 C++ 和 Modula-3 不同,Python " +"的内置类型可以用作基类,供用户扩展。此外,与 C++ 一样,具有特殊语法的内置运算符(算术运算符、下标等)都可以为类实例重新定义。" + +#: ../../tutorial/classes.rst:34 +msgid "" +"(Lacking universally accepted terminology to talk about classes, I will make" +" occasional use of Smalltalk and C++ terms. I would use Modula-3 terms, " +"since its object-oriented semantics are closer to those of Python than C++, " +"but I expect that few readers have heard of it.)" +msgstr "" +"由于缺乏关于类的公认术语,本章中偶尔会使用 Smalltalk 和 C++ 的术语。本章还会使用 Modula-3 的术语,Modula-3 " +"的面向对象语义比 C++ 更接近 Python,但估计听说过这门语言的读者很少。" + +#: ../../tutorial/classes.rst:43 +msgid "A Word About Names and Objects" +msgstr "名称和对象" + +#: ../../tutorial/classes.rst:45 +msgid "" +"Objects have individuality, and multiple names (in multiple scopes) can be " +"bound to the same object. This is known as aliasing in other languages. " +"This is usually not appreciated on a first glance at Python, and can be " +"safely ignored when dealing with immutable basic types (numbers, strings, " +"tuples). However, aliasing has a possibly surprising effect on the " +"semantics of Python code involving mutable objects such as lists, " +"dictionaries, and most other types. This is usually used to the benefit of " +"the program, since aliases behave like pointers in some respects. For " +"example, passing an object is cheap since only a pointer is passed by the " +"implementation; and if a function modifies an object passed as an argument, " +"the caller will see the change --- this eliminates the need for two " +"different argument passing mechanisms as in Pascal." +msgstr "" +"对象之间相互独立,多个名称(甚至是多个作用域内的多个名称)可以绑定到同一对象。这在其他语言中通常被称为别名。Python " +"初学者通常不容易理解这个概念,处理数字、字符串、元组等不可变基本类型时,可以不必理会。但是,对于涉及可变对象(如列表、字典,以及大多数其他类型)的 " +"Python " +"代码的语义,别名可能会产生意料之外的效果。这样做,通常是为了让程序受益,因为别名在某些方面就像指针。例如,传递对象的代价很小,因为实现只传递一个指针;如果函数修改了作为参数传递的对象,调用者就可以看到更改——无需像" +" Pascal 那样用两个不同的机制来传参。" + +#: ../../tutorial/classes.rst:61 +msgid "Python Scopes and Namespaces" +msgstr "Python 作用域和命名空间" + +#: ../../tutorial/classes.rst:63 +msgid "" +"Before introducing classes, I first have to tell you something about " +"Python's scope rules. Class definitions play some neat tricks with " +"namespaces, and you need to know how scopes and namespaces work to fully " +"understand what's going on. Incidentally, knowledge about this subject is " +"useful for any advanced Python programmer." +msgstr "" +"在介绍类前,首先要介绍 Python " +"的作用域规则。类定义对命名空间有一些巧妙的技巧,了解作用域和命名空间的工作机制有利于加强对类的理解。并且,即便对于高级 Python " +"程序员,这方面的知识也很有用。" + +#: ../../tutorial/classes.rst:69 +msgid "Let's begin with some definitions." +msgstr "接下来,我们先了解一些定义。" + +#: ../../tutorial/classes.rst:71 +msgid "" +"A *namespace* is a mapping from names to objects. Most namespaces are " +"currently implemented as Python dictionaries, but that's normally not " +"noticeable in any way (except for performance), and it may change in the " +"future. Examples of namespaces are: the set of built-in names (containing " +"functions such as :func:`abs`, and built-in exception names); the global " +"names in a module; and the local names in a function invocation. In a sense" +" the set of attributes of an object also form a namespace. The important " +"thing to know about namespaces is that there is absolutely no relation " +"between names in different namespaces; for instance, two different modules " +"may both define a function ``maximize`` without confusion --- users of the " +"modules must prefix it with the module name." +msgstr "" +"*namespace* (命名空间)是从名称到对象的映射。现在,大多数命名空间都使用 Python " +"字典实现,但除非涉及到性能优化,我们一般不会关注这方面的事情,而且将来也可能会改变这种方式。命名空间的例子有:内置名称集合(包括 :func:`abs`" +" " +"函数以及内置异常的名称等);一个模块的全局名称;一个函数调用中的局部名称。对象的属性集合也是命名空间的一种形式。关于命名空间的一个重要知识点是,不同命名空间中的名称之间绝对没有关系;例如,两个不同的模块都可以定义" +" ``maximize`` 函数,且不会造成混淆。用户使用函数时必须要在函数名前面加上模块名。" + +#: ../../tutorial/classes.rst:82 +msgid "" +"By the way, I use the word *attribute* for any name following a dot --- for " +"example, in the expression ``z.real``, ``real`` is an attribute of the " +"object ``z``. Strictly speaking, references to names in modules are " +"attribute references: in the expression ``modname.funcname``, ``modname`` is" +" a module object and ``funcname`` is an attribute of it. In this case there" +" happens to be a straightforward mapping between the module's attributes and" +" the global names defined in the module: they share the same namespace! " +"[#]_" +msgstr "" +"点号之后的名称是 **属性**。例如,表达式 ``z.real`` 中,``real`` 是对象 ``z`` " +"的属性。严格来说,对模块中名称的引用是属性引用:表达式 ``modname.funcname`` 中,``modname`` " +"是模块对象,``funcname`` 是模块的属性。模块属性和模块中定义的全局名称之间存在直接的映射:它们共享相同的命名空间! [#]_" + +#: ../../tutorial/classes.rst:90 +msgid "" +"Attributes may be read-only or writable. In the latter case, assignment to " +"attributes is possible. Module attributes are writable: you can write " +"``modname.the_answer = 42``. Writable attributes may also be deleted with " +"the :keyword:`del` statement. For example, ``del modname.the_answer`` will " +"remove the attribute :attr:`the_answer` from the object named by " +"``modname``." +msgstr "" +"属性可以是只读或者可写的。如果可写,则可对属性赋值。模块属性是可写时,可以使用 ``modname.the_answer = 42`` " +"。:keyword:`del` 语句可以删除可写属性。例如, ``del modname.the_answer`` 会删除 ``modname`` " +"对象中的 :attr:`the_answer` 属性。" + +#: ../../tutorial/classes.rst:96 +msgid "" +"Namespaces are created at different moments and have different lifetimes. " +"The namespace containing the built-in names is created when the Python " +"interpreter starts up, and is never deleted. The global namespace for a " +"module is created when the module definition is read in; normally, module " +"namespaces also last until the interpreter quits. The statements executed " +"by the top-level invocation of the interpreter, either read from a script " +"file or interactively, are considered part of a module called " +":mod:`__main__`, so they have their own global namespace. (The built-in " +"names actually also live in a module; this is called :mod:`builtins`.)" +msgstr "" +"命名空间是在不同时刻创建的,且拥有不同的生命周期。内置名称的命名空间是在 Python " +"解释器启动时创建的,永远不会被删除。模块的全局命名空间在读取模块定义时创建;通常,模块的命名空间也会持续到解释器退出。从脚本文件读取或交互式读取的,由解释器顶层调用执行的语句是" +" :mod:`__main__` 模块调用的一部分,也拥有自己的全局命名空间。内置名称实际上也在模块里,即 :mod:`builtins` 。" + +#: ../../tutorial/classes.rst:106 +msgid "" +"The local namespace for a function is created when the function is called, " +"and deleted when the function returns or raises an exception that is not " +"handled within the function. (Actually, forgetting would be a better way to" +" describe what actually happens.) Of course, recursive invocations each " +"have their own local namespace." +msgstr "" +"函数的局部命名空间在函数被调用时被创建,并在函数返回或抛出未在函数内被处理的异常时,被删除。(实际上,用“遗忘”来描述实际发生的情况会更好一些。)当然,每次递归调用都有自己的局部命名空间。" + +#: ../../tutorial/classes.rst:112 +msgid "" +"A *scope* is a textual region of a Python program where a namespace is " +"directly accessible. \"Directly accessible\" here means that an unqualified" +" reference to a name attempts to find the name in the namespace." +msgstr "" +"一个命名空间的 *作用域* 是 Python " +"代码中的一段文本区域,从这个区域可直接访问该命名空间。“可直接访问”的意思是,该文本区域内的名称在被非限定引用时,查找名称的范围,是包括该命名空间在内的。" + +#: ../../tutorial/classes.rst:116 +msgid "" +"Although scopes are determined statically, they are used dynamically. At any" +" time during execution, there are 3 or 4 nested scopes whose namespaces are " +"directly accessible:" +msgstr "作用域虽然是被静态确定的,但会被动态使用。执行期间的任何时刻,都会有 3 或 4 个“命名空间可直接访问”的嵌套作用域:" + +#: ../../tutorial/classes.rst:120 +msgid "the innermost scope, which is searched first, contains the local names" +msgstr "最内层作用域,包含局部名称,并首先在其中进行搜索" + +#: ../../tutorial/classes.rst:121 +msgid "" +"the scopes of any enclosing functions, which are searched starting with the " +"nearest enclosing scope, contains non-local, but also non-global names" +msgstr "从最近的封闭作用域开始搜索的任何封闭函数的作用域包含非局部名称,也包括非全局名称" + +#: ../../tutorial/classes.rst:123 +msgid "the next-to-last scope contains the current module's global names" +msgstr "倒数第二层作用域,包含当前模块的全局名称" + +#: ../../tutorial/classes.rst:124 +msgid "" +"the outermost scope (searched last) is the namespace containing built-in " +"names" +msgstr "最外层(最后搜索)的作用域,是内置名称的命名空间" + +#: ../../tutorial/classes.rst:126 +msgid "" +"If a name is declared global, then all references and assignments go " +"directly to the middle scope containing the module's global names. To " +"rebind variables found outside of the innermost scope, the " +":keyword:`nonlocal` statement can be used; if not declared nonlocal, those " +"variables are read-only (an attempt to write to such a variable will simply " +"create a *new* local variable in the innermost scope, leaving the " +"identically named outer variable unchanged)." +msgstr "" +"如果一个名称被声明为全局变量,则所有引用和赋值将直接指向包含该模块的全局名称的中间作用域。 要重新绑定在最内层作用域以外找到的变量,可以使用 " +":keyword:`nonlocal` 语句声明为非本地变量。 " +"如果没有被声明为非本地变量,这些变量将是只读的(尝试写入这样的变量只会在最内层作用域中创建一个 *新的* 局部变量,而同名的外部变量保持不变)。" + +#: ../../tutorial/classes.rst:133 +msgid "" +"Usually, the local scope references the local names of the (textually) " +"current function. Outside functions, the local scope references the same " +"namespace as the global scope: the module's namespace. Class definitions " +"place yet another namespace in the local scope." +msgstr "" +"通常,当前局部作用域将(按字面文本)引用当前函数的局部名称。在函数之外,局部作用域引用与全局作用域一致的命名空间:模块的命名空间。 " +"类定义在局部命名空间内再放置另一个命名空间。" + +#: ../../tutorial/classes.rst:138 +msgid "" +"It is important to realize that scopes are determined textually: the global " +"scope of a function defined in a module is that module's namespace, no " +"matter from where or by what alias the function is called. On the other " +"hand, the actual search for names is done dynamically, at run time --- " +"however, the language definition is evolving towards static name resolution," +" at \"compile\" time, so don't rely on dynamic name resolution! (In fact, " +"local variables are already determined statically.)" +msgstr "" +"划重点,作用域是按字面文本确定的:模块内定义的函数的全局作用域就是该模块的命名空间,无论该函数从什么地方或以什么别名被调用。另一方面,实际的名称搜索是在运行时动态完成的。但是,Python" +" 正在朝着“编译时静态名称解析”的方向发展,因此不要过于依赖动态名称解析!(局部变量已经是被静态确定了。)" + +#: ../../tutorial/classes.rst:146 +msgid "" +"A special quirk of Python is that -- if no :keyword:`global` or " +":keyword:`nonlocal` statement is in effect -- assignments to names always go" +" into the innermost scope. Assignments do not copy data --- they just bind " +"names to objects. The same is true for deletions: the statement ``del x`` " +"removes the binding of ``x`` from the namespace referenced by the local " +"scope. In fact, all operations that introduce new names use the local " +"scope: in particular, :keyword:`import` statements and function definitions " +"bind the module or function name in the local scope." +msgstr "" +"Python 有一个特殊规定。如果不存在生效的 :keyword:`global` 或 :keyword:`nonlocal` " +"语句,则对名称的赋值总是会进入最内层作用域。赋值不会复制数据,只是将名称绑定到对象。删除也是如此:语句 ``del x`` " +"从局部作用域引用的命名空间中移除对 ``x`` 的绑定。所有引入新名称的操作都是使用局部作用域:尤其是 :keyword:`import` " +"语句和函数定义会在局部作用域中绑定模块或函数名称。" + +#: ../../tutorial/classes.rst:154 +msgid "" +"The :keyword:`global` statement can be used to indicate that particular " +"variables live in the global scope and should be rebound there; the " +":keyword:`nonlocal` statement indicates that particular variables live in an" +" enclosing scope and should be rebound there." +msgstr "" +":keyword:`global` 语句用于表明特定变量在全局作用域里,并应在全局作用域中重新绑定;:keyword:`nonlocal` " +"语句表明特定变量在外层作用域中,并应在外层作用域中重新绑定。" + +#: ../../tutorial/classes.rst:162 +msgid "Scopes and Namespaces Example" +msgstr "作用域和命名空间示例" + +#: ../../tutorial/classes.rst:164 +msgid "" +"This is an example demonstrating how to reference the different scopes and " +"namespaces, and how :keyword:`global` and :keyword:`nonlocal` affect " +"variable binding::" +msgstr "" +"下例演示了如何引用不同作用域和名称空间,以及 :keyword:`global` 和 :keyword:`nonlocal` 对变量绑定的影响:" + +#: ../../tutorial/classes.rst:191 +msgid "The output of the example code is:" +msgstr "示例代码的输出是:" + +#: ../../tutorial/classes.rst:200 +msgid "" +"Note how the *local* assignment (which is default) didn't change " +"*scope_test*\\'s binding of *spam*. The :keyword:`nonlocal` assignment " +"changed *scope_test*\\'s binding of *spam*, and the :keyword:`global` " +"assignment changed the module-level binding." +msgstr "" +"注意,**局部** 赋值(这是默认状态)不会改变 *scope_test* 对 *spam* 的绑定。 :keyword:`nonlocal` " +"赋值会改变 *scope_test* 对 *spam* 的绑定,而 :keyword:`global` 赋值会改变模块层级的绑定。" + +#: ../../tutorial/classes.rst:205 +msgid "" +"You can also see that there was no previous binding for *spam* before the " +":keyword:`global` assignment." +msgstr "而且,:keyword:`global` 赋值前没有 *spam* 的绑定。" + +#: ../../tutorial/classes.rst:212 +msgid "A First Look at Classes" +msgstr "初探类" + +#: ../../tutorial/classes.rst:214 +msgid "" +"Classes introduce a little bit of new syntax, three new object types, and " +"some new semantics." +msgstr "类引入了一点新语法,三种新的对象类型和一些新语义。" + +#: ../../tutorial/classes.rst:221 +msgid "Class Definition Syntax" +msgstr "类定义语法" + +#: ../../tutorial/classes.rst:223 +msgid "The simplest form of class definition looks like this::" +msgstr "最简单的类定义形式如下:" + +#: ../../tutorial/classes.rst:232 +msgid "" +"Class definitions, like function definitions (:keyword:`def` statements) " +"must be executed before they have any effect. (You could conceivably place " +"a class definition in a branch of an :keyword:`if` statement, or inside a " +"function.)" +msgstr "" +"与函数定义 (:keyword:`def` 语句) 一样,类定义必须先执行才能生效。把类定义放在 :keyword:`if` " +"语句的分支里或函数内部试试。" + +#: ../../tutorial/classes.rst:236 +msgid "" +"In practice, the statements inside a class definition will usually be " +"function definitions, but other statements are allowed, and sometimes useful" +" --- we'll come back to this later. The function definitions inside a class" +" normally have a peculiar form of argument list, dictated by the calling " +"conventions for methods --- again, this is explained later." +msgstr "" +"在实践中,类定义内的语句通常都是函数定义,但也可以是其他语句。这部分内容稍后再讨论。类里的函数定义一般是特殊的参数列表,这是由方法调用的约定规范所指明的" +" --- 同样,稍后再解释。" + +#: ../../tutorial/classes.rst:242 +msgid "" +"When a class definition is entered, a new namespace is created, and used as " +"the local scope --- thus, all assignments to local variables go into this " +"new namespace. In particular, function definitions bind the name of the new" +" function here." +msgstr "" +"当进入类定义时,将创建一个新的命名空间,并将其用作局部作用域 --- 因此,所有对局部变量的赋值都是在这个新命名空间之内。 " +"特别的,函数定义会绑定到这里的新函数名称。" + +#: ../../tutorial/classes.rst:247 +msgid "" +"When a class definition is left normally (via the end), a *class object* is " +"created. This is basically a wrapper around the contents of the namespace " +"created by the class definition; we'll learn more about class objects in the" +" next section. The original local scope (the one in effect just before the " +"class definition was entered) is reinstated, and the class object is bound " +"here to the class name given in the class definition header " +"(:class:`ClassName` in the example)." +msgstr "" +"当(从结尾处)正常离开类定义时,将创建一个 *类对象*。 " +"这基本上是一个包围在类定义所创建命名空间内容周围的包装器;我们将在下一节了解有关类对象的更多信息。 " +"原始的(在进入类定义之前起作用的)局部作用域将重新生效,类对象将在这里被绑定到类定义头所给出的类名称 (在这个示例中为 " +":class:`ClassName`)。" + +#: ../../tutorial/classes.rst:259 +msgid "Class Objects" +msgstr "Class 对象" + +#: ../../tutorial/classes.rst:261 +msgid "" +"Class objects support two kinds of operations: attribute references and " +"instantiation." +msgstr "类对象支持两种操作:属性引用和实例化。" + +#: ../../tutorial/classes.rst:264 +msgid "" +"*Attribute references* use the standard syntax used for all attribute " +"references in Python: ``obj.name``. Valid attribute names are all the names" +" that were in the class's namespace when the class object was created. So, " +"if the class definition looked like this::" +msgstr "" +"*属性引用* 使用 Python 中所有属性引用所使用的标准语法: ``obj.name``。 " +"有效的属性名称是类对象被创建时存在于类命名空间中的所有名称。 因此,如果类定义是这样的::" + +#: ../../tutorial/classes.rst:276 +msgid "" +"then ``MyClass.i`` and ``MyClass.f`` are valid attribute references, " +"returning an integer and a function object, respectively. Class attributes " +"can also be assigned to, so you can change the value of ``MyClass.i`` by " +"assignment. :attr:`__doc__` is also a valid attribute, returning the " +"docstring belonging to the class: ``\"A simple example class\"``." +msgstr "" +"那么 ``MyClass.i`` 和 ``MyClass.f`` 就是有效的属性引用,将分别返回一个整数和一个函数对象。 " +"类属性也可以被赋值,因此可以通过赋值来更改 ``MyClass.i`` 的值。 :attr:`__doc__` " +"也是一个有效的属性,将返回所属类的文档字符串: ``\"A simple example class\"``。" + +#: ../../tutorial/classes.rst:282 +msgid "" +"Class *instantiation* uses function notation. Just pretend that the class " +"object is a parameterless function that returns a new instance of the class." +" For example (assuming the above class)::" +msgstr "类的 *实例化* 使用函数表示法。 可以把类对象视为是返回该类的一个新实例的不带参数的函数。 举例来说(假设使用上述的类)::" + +#: ../../tutorial/classes.rst:288 +msgid "" +"creates a new *instance* of the class and assigns this object to the local " +"variable ``x``." +msgstr "创建类的新 *实例* 并将此对象分配给局部变量 ``x``。" + +#: ../../tutorial/classes.rst:291 +msgid "" +"The instantiation operation (\"calling\" a class object) creates an empty " +"object. Many classes like to create objects with instances customized to a " +"specific initial state. Therefore a class may define a special method named " +":meth:`__init__`, like this::" +msgstr "" +"实例化操作(“调用”类对象)会创建一个空对象。 许多类喜欢创建带有特定初始状态的自定义实例。 为此类定义可能包含一个名为 " +":meth:`__init__` 的特殊方法,就像这样::" + +#: ../../tutorial/classes.rst:299 +msgid "" +"When a class defines an :meth:`__init__` method, class instantiation " +"automatically invokes :meth:`__init__` for the newly-created class instance." +" So in this example, a new, initialized instance can be obtained by::" +msgstr "" +"当一个类定义了 :meth:`__init__` 方法时,类的实例化操作会自动为新创建的类实例发起调用 :meth:`__init__`。 " +"因此在这个示例中,可以通过以下语句获得一个经初始化的新实例::" + +#: ../../tutorial/classes.rst:305 +msgid "" +"Of course, the :meth:`__init__` method may have arguments for greater " +"flexibility. In that case, arguments given to the class instantiation " +"operator are passed on to :meth:`__init__`. For example, ::" +msgstr "" +"当然,:meth:`__init__` 方法还可以有额外参数以实现更高灵活性。 在这种情况下,提供给类实例化运算符的参数将被传递给 " +":meth:`__init__`。 例如,::" + +#: ../../tutorial/classes.rst:322 +msgid "Instance Objects" +msgstr "实例对象" + +#: ../../tutorial/classes.rst:324 +msgid "" +"Now what can we do with instance objects? The only operations understood by" +" instance objects are attribute references. There are two kinds of valid " +"attribute names: data attributes and methods." +msgstr "现在我们能用实例对象做什么? 实例对象所能理解的唯一操作是属性引用。 有两种有效的属性名称:数据属性和方法。" + +#: ../../tutorial/classes.rst:328 +msgid "" +"*Data attributes* correspond to \"instance variables\" in Smalltalk, and to " +"\"data members\" in C++. Data attributes need not be declared; like local " +"variables, they spring into existence when they are first assigned to. For " +"example, if ``x`` is the instance of :class:`MyClass` created above, the " +"following piece of code will print the value ``16``, without leaving a " +"trace::" +msgstr "" + +#: ../../tutorial/classes.rst:340 +msgid "" +"The other kind of instance attribute reference is a *method*. A method is a " +"function that \"belongs to\" an object. (In Python, the term method is not " +"unique to class instances: other object types can have methods as well. For" +" example, list objects have methods called append, insert, remove, sort, and" +" so on. However, in the following discussion, we'll use the term method " +"exclusively to mean methods of class instance objects, unless explicitly " +"stated otherwise.)" +msgstr "" +"另一类实例属性引用称为 *方法*。 方法是“从属于”对象的函数。 (在 Python 中,方法这个术语并不是类实例所特有的:其他对象也可以有方法。 " +"例如,列表对象具有 append, insert, remove, sort 等方法。 " +"然而,在以下讨论中,我们使用方法一词将专指类实例对象的方法,除非另外显式地说明。)" + +#: ../../tutorial/classes.rst:349 +msgid "" +"Valid method names of an instance object depend on its class. By " +"definition, all attributes of a class that are function objects define " +"corresponding methods of its instances. So in our example, ``x.f`` is a " +"valid method reference, since ``MyClass.f`` is a function, but ``x.i`` is " +"not, since ``MyClass.i`` is not. But ``x.f`` is not the same thing as " +"``MyClass.f`` --- it is a *method object*, not a function object." +msgstr "" +"实例对象的有效方法名称依赖于其所属的类。 根据定义,一个类中所有是函数对象的属性都是定义了其实例的相应方法。 因此在我们的示例中,``x.f`` " +"是有效的方法引用,因为 ``MyClass.f`` 是一个函数,而 ``x.i`` 不是方法,因为 ``MyClass.i`` 不是函数。 但是 " +"``x.f`` 与 ``MyClass.f`` 并不是一回事 --- 它是一个 *方法对象*,不是函数对象。" + +#: ../../tutorial/classes.rst:360 +msgid "Method Objects" +msgstr "方法对象" + +#: ../../tutorial/classes.rst:362 +msgid "Usually, a method is called right after it is bound::" +msgstr "通常,方法在绑定后立即被调用::" + +#: ../../tutorial/classes.rst:366 +msgid "" +"In the :class:`MyClass` example, this will return the string ``'hello " +"world'``. However, it is not necessary to call a method right away: ``x.f`` " +"is a method object, and can be stored away and called at a later time. For " +"example::" +msgstr "" +"在 :class:`MyClass` 示例中,这将返回字符串 ``'hello world'``。 但是,立即调用一个方法并不是必须的: ``x.f``" +" 是一个方法对象,它可以被保存起来以后再调用。 例如::" + +#: ../../tutorial/classes.rst:374 +msgid "will continue to print ``hello world`` until the end of time." +msgstr "将持续打印 ``hello world``,直到结束。" + +#: ../../tutorial/classes.rst:376 +msgid "" +"What exactly happens when a method is called? You may have noticed that " +"``x.f()`` was called without an argument above, even though the function " +"definition for :meth:`f` specified an argument. What happened to the " +"argument? Surely Python raises an exception when a function that requires an" +" argument is called without any --- even if the argument isn't actually " +"used..." +msgstr "" +"当一个方法被调用时到底发生了什么? 你可能已经注意到上面调用 ``x.f()`` 时并没有带参数,虽然 :meth:`f` 的函数定义指定了一个参数。 " +"这个参数发生了什么事? 当不带参数地调用一个需要参数的函数时 Python 肯定会引发异常 --- 即使参数实际未被使用..." + +#: ../../tutorial/classes.rst:382 +msgid "" +"Actually, you may have guessed the answer: the special thing about methods " +"is that the instance object is passed as the first argument of the function." +" In our example, the call ``x.f()`` is exactly equivalent to " +"``MyClass.f(x)``. In general, calling a method with a list of *n* arguments" +" is equivalent to calling the corresponding function with an argument list " +"that is created by inserting the method's instance object before the first " +"argument." +msgstr "" +"实际上,你可能已经猜到了答案:方法的特殊之处就在于实例对象会作为函数的第一个参数被传入。 在我们的示例中,调用 ``x.f()`` 其实就相当于 " +"``MyClass.f(x)``。 总之,调用一个具有 *n* " +"个参数的方法就相当于调用再多一个参数的对应函数,这个参数值为方法所属实例对象,位置在其他参数之前。" + +#: ../../tutorial/classes.rst:389 +msgid "" +"If you still don't understand how methods work, a look at the implementation" +" can perhaps clarify matters. When a non-data attribute of an instance is " +"referenced, the instance's class is searched. If the name denotes a valid " +"class attribute that is a function object, a method object is created by " +"packing (pointers to) the instance object and the function object just found" +" together in an abstract object: this is the method object. When the method" +" object is called with an argument list, a new argument list is constructed " +"from the instance object and the argument list, and the function object is " +"called with this new argument list." +msgstr "" +"如果你仍然无法理解方法的运作原理,那么看了实现细节可能会弄清楚问题。当对实例对象进行属性引用时,如果该属性在实例中无法找到,将搜索实例所属的类。如果被引用的属性名称表示一个有效的类属性中的函数对象,会打包两者(实例对象和查找到的函数对象)的指针到一个抽象对象,这个抽象对象就是方法对象。当用参数列表调用方法对象时,将基于实例对象和参数列表构建一个新的参数列表,并用这个新参数列表调用相应的函数对象。" + +#: ../../tutorial/classes.rst:403 +msgid "Class and Instance Variables" +msgstr "类和实例变量" + +#: ../../tutorial/classes.rst:405 +msgid "" +"Generally speaking, instance variables are for data unique to each instance " +"and class variables are for attributes and methods shared by all instances " +"of the class::" +msgstr "一般来说,实例变量用于每个实例的唯一数据,而类变量用于类的所有实例共享的属性和方法::" + +#: ../../tutorial/classes.rst:427 +msgid "" +"As discussed in :ref:`tut-object`, shared data can have possibly surprising " +"effects with involving :term:`mutable` objects such as lists and " +"dictionaries. For example, the *tricks* list in the following code should " +"not be used as a class variable because just a single list would be shared " +"by all *Dog* instances::" +msgstr "" +"正如 :ref:`tut-object` 中已讨论过的,共享数据可能在涉及 :term:`mutable` 对象例如列表和字典的时候导致令人惊讶的结果。" +" 例如以下代码中的 *tricks* 列表不应该被用作类变量,因为所有的 *Dog* 实例将只共享一个单独的列表::" + +#: ../../tutorial/classes.rst:450 +msgid "Correct design of the class should use an instance variable instead::" +msgstr "正确的类设计应该使用实例变量::" + +#: ../../tutorial/classes.rst:474 +msgid "Random Remarks" +msgstr "补充说明" + +#: ../../tutorial/classes.rst:478 +msgid "" +"If the same attribute name occurs in both an instance and in a class, then " +"attribute lookup prioritizes the instance::" +msgstr "如果同样的属性名称同时出现在实例和类中,则属性查找会优先选择实例::" + +#: ../../tutorial/classes.rst:493 +msgid "" +"Data attributes may be referenced by methods as well as by ordinary users " +"(\"clients\") of an object. In other words, classes are not usable to " +"implement pure abstract data types. In fact, nothing in Python makes it " +"possible to enforce data hiding --- it is all based upon convention. (On " +"the other hand, the Python implementation, written in C, can completely hide" +" implementation details and control access to an object if necessary; this " +"can be used by extensions to Python written in C.)" +msgstr "" +"数据属性可以被方法以及一个对象的普通用户(“客户端”)所引用。 换句话说,类不能用于实现纯抽象数据类型。 实际上,在 Python " +"中没有任何东西能强制隐藏数据 --- 它是完全基于约定的。 (而在另一方面,用 C 语言编写的 Python " +"实现则可以完全隐藏实现细节,并在必要时控制对象的访问;此特性可以通过用 C 编写 Python 扩展来使用。)" + +#: ../../tutorial/classes.rst:501 +msgid "" +"Clients should use data attributes with care --- clients may mess up " +"invariants maintained by the methods by stamping on their data attributes. " +"Note that clients may add data attributes of their own to an instance object" +" without affecting the validity of the methods, as long as name conflicts " +"are avoided --- again, a naming convention can save a lot of headaches here." +msgstr "" +"客户端应当谨慎地使用数据属性 --- 客户端可能通过直接操作数据属性的方式破坏由方法所维护的固定变量。 " +"请注意客户端可以向一个实例对象添加他们自己的数据属性而不会影响方法的可用性,只要保证避免名称冲突 --- " +"再次提醒,在此使用命名约定可以省去许多令人头痛的麻烦。" + +#: ../../tutorial/classes.rst:507 +msgid "" +"There is no shorthand for referencing data attributes (or other methods!) " +"from within methods. I find that this actually increases the readability of" +" methods: there is no chance of confusing local variables and instance " +"variables when glancing through a method." +msgstr "" +"在方法内部引用数据属性(或其他方法!)并没有简便方式。 我发现这实际上提升了方法的可读性:当浏览一个方法代码时,不会存在混淆局部变量和实例变量的机会。" + +#: ../../tutorial/classes.rst:512 +msgid "" +"Often, the first argument of a method is called ``self``. This is nothing " +"more than a convention: the name ``self`` has absolutely no special meaning " +"to Python. Note, however, that by not following the convention your code " +"may be less readable to other Python programmers, and it is also conceivable" +" that a *class browser* program might be written that relies upon such a " +"convention." +msgstr "" +"方法的第一个参数常常被命名为 ``self``。 这也不过就是一个约定: ``self`` 这一名称在 Python 中绝对没有特殊含义。 " +"但是要注意,不遵循此约定会使得你的代码对其他 Python 程序员来说缺乏可读性,而且也可以想像一个 *类浏览器* 程序的编写可能会依赖于这样的约定。" + +#: ../../tutorial/classes.rst:518 +msgid "" +"Any function object that is a class attribute defines a method for instances" +" of that class. It is not necessary that the function definition is " +"textually enclosed in the class definition: assigning a function object to a" +" local variable in the class is also ok. For example::" +msgstr "" +"任何一个作为类属性的函数都为该类的实例定义了一个相应方法。 函数定义的文本并非必须包含于类定义之内:将一个函数对象赋值给一个局部变量也是可以的。 " +"例如::" + +#: ../../tutorial/classes.rst:535 +msgid "" +"Now ``f``, ``g`` and ``h`` are all attributes of class :class:`C` that refer" +" to function objects, and consequently they are all methods of instances of " +":class:`C` --- ``h`` being exactly equivalent to ``g``. Note that this " +"practice usually only serves to confuse the reader of a program." +msgstr "" +"现在 ``f``, ``g`` 和 ``h`` 都是 :class:`C` 类的引用函数对象的属性,因而它们就都是 :class:`C` 的实例的方法 " +"--- 其中 ``h`` 完全等同于 ``g``。 但请注意,本示例的做法通常只会令程序的阅读者感到迷惑。" + +#: ../../tutorial/classes.rst:540 +msgid "" +"Methods may call other methods by using method attributes of the ``self`` " +"argument::" +msgstr "方法可以通过使用 ``self`` 参数的方法属性调用其他方法::" + +#: ../../tutorial/classes.rst:554 +msgid "" +"Methods may reference global names in the same way as ordinary functions. " +"The global scope associated with a method is the module containing its " +"definition. (A class is never used as a global scope.) While one rarely " +"encounters a good reason for using global data in a method, there are many " +"legitimate uses of the global scope: for one thing, functions and modules " +"imported into the global scope can be used by methods, as well as functions " +"and classes defined in it. Usually, the class containing the method is " +"itself defined in this global scope, and in the next section we'll find some" +" good reasons why a method would want to reference its own class." +msgstr "" +"方法可以通过与普通函数相同的方式引用全局名称。与方法相关联的全局作用域就是包含该方法的定义语句的模块。(类永远不会被用作全局作用域。)尽管一个人很少会有好的理由在方法中使用全局作用域中的数据,全局作用域依然存在许多合理的使用场景:举个例子,导入到全局作用域的函数和模块可以被方法所使用,定义在全局作用域中的函数和类也一样。通常,包含该方法的类本身就定义在全局作用域中,而在下一节中我们将会发现,为何有些时候方法需要引用其所属类。" + +#: ../../tutorial/classes.rst:564 +msgid "" +"Each value is an object, and therefore has a *class* (also called its " +"*type*). It is stored as ``object.__class__``." +msgstr "每个值都是一个对象,因此具有 *类* (也称为 *类型*),并存储为 ``object.__class__`` 。" + +#: ../../tutorial/classes.rst:571 +msgid "Inheritance" +msgstr "继承" + +#: ../../tutorial/classes.rst:573 +msgid "" +"Of course, a language feature would not be worthy of the name \"class\" " +"without supporting inheritance. The syntax for a derived class definition " +"looks like this::" +msgstr "当然,如果不支持继承,语言特性就不值得称为“类”。派生类定义的语法如下所示::" + +#: ../../tutorial/classes.rst:584 +msgid "" +"The name :class:`BaseClassName` must be defined in a scope containing the " +"derived class definition. In place of a base class name, other arbitrary " +"expressions are also allowed. This can be useful, for example, when the " +"base class is defined in another module::" +msgstr "" +"名称 :class:`BaseClassName` 必须定义于包含派生类定义的作用域中。 也允许用其他任意表达式代替基类名称所在的位置。 " +"这有时也可能会用得上,例如,当基类定义在另一个模块中的时候::" + +#: ../../tutorial/classes.rst:591 +msgid "" +"Execution of a derived class definition proceeds the same as for a base " +"class. When the class object is constructed, the base class is remembered. " +"This is used for resolving attribute references: if a requested attribute is" +" not found in the class, the search proceeds to look in the base class. " +"This rule is applied recursively if the base class itself is derived from " +"some other class." +msgstr "" +"派生类定义的执行过程与基类相同。 当构造类对象时,基类会被记住。 此信息将被用来解析属性引用:如果请求的属性在类中找不到,搜索将转往基类中进行查找。 " +"如果基类本身也派生自其他某个类,则此规则将被递归地应用。" + +#: ../../tutorial/classes.rst:597 +msgid "" +"There's nothing special about instantiation of derived classes: " +"``DerivedClassName()`` creates a new instance of the class. Method " +"references are resolved as follows: the corresponding class attribute is " +"searched, descending down the chain of base classes if necessary, and the " +"method reference is valid if this yields a function object." +msgstr "" +"派生类的实例化没有任何特殊之处: ``DerivedClassName()`` 会创建该类的一个新实例。 " +"方法引用将按以下方式解析:搜索相应的类属性,如有必要将按基类继承链逐步向下查找,如果产生了一个函数对象则方法引用就生效。" + +#: ../../tutorial/classes.rst:603 +msgid "" +"Derived classes may override methods of their base classes. Because methods" +" have no special privileges when calling other methods of the same object, a" +" method of a base class that calls another method defined in the same base " +"class may end up calling a method of a derived class that overrides it. " +"(For C++ programmers: all methods in Python are effectively ``virtual``.)" +msgstr "" +"派生类可能会重写其基类的方法。 " +"因为方法在调用同一对象的其他方法时没有特殊权限,所以基类方法在尝试调用调用同一基类中定义的另一方法时,可能实际上调用是该基类的派生类中定义的方法。(对 " +"C++ 程序员的提示:Python 中所有的方法实际上都是 ``virtual`` 方法。)" + +#: ../../tutorial/classes.rst:609 +msgid "" +"An overriding method in a derived class may in fact want to extend rather " +"than simply replace the base class method of the same name. There is a " +"simple way to call the base class method directly: just call " +"``BaseClassName.methodname(self, arguments)``. This is occasionally useful " +"to clients as well. (Note that this only works if the base class is " +"accessible as ``BaseClassName`` in the global scope.)" +msgstr "" +"在派生类中的重写方法实际上可能想要扩展而非简单地替换同名的基类方法。 有一种方式可以简单地直接调用基类方法:即调用 " +"``BaseClassName.methodname(self, arguments)``。 有时这对客户端来说也是有用的。 " +"(请注意仅当此基类可在全局作用域中以 ``BaseClassName`` 的名称被访问时方可使用此方式。)" + +#: ../../tutorial/classes.rst:616 +msgid "Python has two built-in functions that work with inheritance:" +msgstr "Python有两个内置函数可被用于继承机制:" + +#: ../../tutorial/classes.rst:618 +msgid "" +"Use :func:`isinstance` to check an instance's type: ``isinstance(obj, int)``" +" will be ``True`` only if ``obj.__class__`` is :class:`int` or some class " +"derived from :class:`int`." +msgstr "" +"使用 :func:`isinstance` 来检查一个实例的类型: ``isinstance(obj, int)`` 仅会在 " +"``obj.__class__`` 为 :class:`int` 或某个派生自 :class:`int` 的类时为 ``True``。" + +#: ../../tutorial/classes.rst:622 +msgid "" +"Use :func:`issubclass` to check class inheritance: ``issubclass(bool, int)``" +" is ``True`` since :class:`bool` is a subclass of :class:`int`. However, " +"``issubclass(float, int)`` is ``False`` since :class:`float` is not a " +"subclass of :class:`int`." +msgstr "" +"使用 :func:`issubclass` 来检查类的继承关系: ``issubclass(bool, int)`` 为 ``True``,因为 " +":class:`bool` 是 :class:`int` 的子类。 但是,``issubclass(float, int)`` 为 " +"``False``,因为 :class:`float` 不是 :class:`int` 的子类。" + +#: ../../tutorial/classes.rst:632 +msgid "Multiple Inheritance" +msgstr "多重继承" + +#: ../../tutorial/classes.rst:634 +msgid "" +"Python supports a form of multiple inheritance as well. A class definition " +"with multiple base classes looks like this::" +msgstr "Python 也支持一种多重继承。 带有多个基类的类定义语句如下所示::" + +#: ../../tutorial/classes.rst:644 +msgid "" +"For most purposes, in the simplest cases, you can think of the search for " +"attributes inherited from a parent class as depth-first, left-to-right, not " +"searching twice in the same class where there is an overlap in the " +"hierarchy. Thus, if an attribute is not found in :class:`DerivedClassName`, " +"it is searched for in :class:`Base1`, then (recursively) in the base classes" +" of :class:`Base1`, and if it was not found there, it was searched for in " +":class:`Base2`, and so on." +msgstr "" +"对于多数应用来说,在最简单的情况下,你可以认为搜索从父类所继承属性的操作是深度优先、从左至右的,当层次结构中存在重叠时不会在同一个类中搜索两次。 " +"因此,如果某一属性在 :class:`DerivedClassName` 中未找到,则会到 :class:`Base1` 中搜索它,然后(递归地)到 " +":class:`Base1` 的基类中搜索,如果在那里未找到,再到 :class:`Base2` 中搜索,依此类推。" + +#: ../../tutorial/classes.rst:651 +msgid "" +"In fact, it is slightly more complex than that; the method resolution order " +"changes dynamically to support cooperative calls to :func:`super`. This " +"approach is known in some other multiple-inheritance languages as call-next-" +"method and is more powerful than the super call found in single-inheritance " +"languages." +msgstr "" +"真实情况比这个更复杂一些;方法解析顺序会动态改变以支持对 :func:`super` 的协同调用。 " +"这种方式在某些其他多重继承型语言中被称为后续方法调用,它比单继承型语言中的 super 调用更强大。" + +#: ../../tutorial/classes.rst:657 +msgid "" +"Dynamic ordering is necessary because all cases of multiple inheritance " +"exhibit one or more diamond relationships (where at least one of the parent " +"classes can be accessed through multiple paths from the bottommost class). " +"For example, all classes inherit from :class:`object`, so any case of " +"multiple inheritance provides more than one path to reach :class:`object`. " +"To keep the base classes from being accessed more than once, the dynamic " +"algorithm linearizes the search order in a way that preserves the left-to-" +"right ordering specified in each class, that calls each parent only once, " +"and that is monotonic (meaning that a class can be subclassed without " +"affecting the precedence order of its parents). Taken together, these " +"properties make it possible to design reliable and extensible classes with " +"multiple inheritance. For more detail, see " +"https://www.python.org/download/releases/2.3/mro/." +msgstr "" +"动态改变顺序是有必要的,因为所有多重继承的情况都会显示出一个或更多的菱形关联(即至少有一个父类可通过多条路径被最底层类所访问)。 例如,所有类都是继承自" +" :class:`object`,因此任何多重继承的情况都提供了一条以上的路径可以通向 :class:`object`。 " +"为了确保基类不会被访问一次以上,动态算法会用一种特殊方式将搜索顺序线性化, " +"保留每个类所指定的从左至右的顺序,只调用每个父类一次,并且保持单调(即一个类可以被子类化而不影响其父类的优先顺序)。 " +"总而言之,这些特性使得设计具有多重继承的可靠且可扩展的类成为可能。 要了解更多细节,请参阅 " +"https://www.python.org/download/releases/2.3/mro/。" + +#: ../../tutorial/classes.rst:674 +msgid "Private Variables" +msgstr "私有变量" + +#: ../../tutorial/classes.rst:676 +msgid "" +"\"Private\" instance variables that cannot be accessed except from inside an" +" object don't exist in Python. However, there is a convention that is " +"followed by most Python code: a name prefixed with an underscore (e.g. " +"``_spam``) should be treated as a non-public part of the API (whether it is " +"a function, a method or a data member). It should be considered an " +"implementation detail and subject to change without notice." +msgstr "" +"那种仅限从一个对象内部访问的“私有”实例变量在 Python 中并不存在。 但是,大多数 Python 代码都遵循这样一个约定:带有一个下划线的名称 " +"(例如 ``_spam``) 应该被当作是 API 的非公有部分 (无论它是函数、方法或是数据成员)。 " +"这应当被视为一个实现细节,可能不经通知即加以改变。" + +#: ../../tutorial/classes.rst:686 +msgid "" +"Since there is a valid use-case for class-private members (namely to avoid " +"name clashes of names with names defined by subclasses), there is limited " +"support for such a mechanism, called :dfn:`name mangling`. Any identifier " +"of the form ``__spam`` (at least two leading underscores, at most one " +"trailing underscore) is textually replaced with ``_classname__spam``, where " +"``classname`` is the current class name with leading underscore(s) stripped." +" This mangling is done without regard to the syntactic position of the " +"identifier, as long as it occurs within the definition of a class." +msgstr "" +"由于存在对于类私有成员的有效使用场景(例如避免名称与子类所定义的名称相冲突),因此存在对此种机制的有限支持,称为 :dfn:`名称改写`。 任何形式为 " +"``__spam`` 的标识符(至少带有两个前缀下划线,至多一个后缀下划线)的文本将被替换为 ``_classname__spam``,其中 " +"``classname`` 为去除了前缀下划线的当前类名称。 这种改写不考虑标识符的句法位置,只要它出现在类定义内部就会进行。" + +#: ../../tutorial/classes.rst:695 +msgid "" +"Name mangling is helpful for letting subclasses override methods without " +"breaking intraclass method calls. For example::" +msgstr "名称改写有助于让子类重写方法而不破坏类内方法调用。例如::" + +#: ../../tutorial/classes.rst:717 +msgid "" +"The above example would work even if ``MappingSubclass`` were to introduce a" +" ``__update`` identifier since it is replaced with ``_Mapping__update`` in " +"the ``Mapping`` class and ``_MappingSubclass__update`` in the " +"``MappingSubclass`` class respectively." +msgstr "" +"上面的示例即使在 ``MappingSubclass`` 引入了一个 ``__update`` 标识符的情况下也不会出错,因为它会在 " +"``Mapping`` 类中被替换为 ``_Mapping__update`` 而在 ``MappingSubclass`` 类中被替换为 " +"``_MappingSubclass__update``。" + +#: ../../tutorial/classes.rst:722 +msgid "" +"Note that the mangling rules are designed mostly to avoid accidents; it " +"still is possible to access or modify a variable that is considered private." +" This can even be useful in special circumstances, such as in the debugger." +msgstr "请注意,改写规则的设计主要是为了避免意外冲突;访问或修改被视为私有的变量仍然是可能的。这在特殊情况下甚至会很有用,例如在调试器中。" + +#: ../../tutorial/classes.rst:726 +msgid "" +"Notice that code passed to ``exec()`` or ``eval()`` does not consider the " +"classname of the invoking class to be the current class; this is similar to " +"the effect of the ``global`` statement, the effect of which is likewise " +"restricted to code that is byte-compiled together. The same restriction " +"applies to ``getattr()``, ``setattr()`` and ``delattr()``, as well as when " +"referencing ``__dict__`` directly." +msgstr "" +"请注意传递给 ``exec()`` 或 ``eval()`` 的代码不会将唤起类的类名视作当前类;这类似于 ``global`` " +"语句的效果,因此这种效果仅限于同时经过字节码编译的代码。 同样的限制也适用于 ``getattr()``, ``setattr()`` 和 " +"``delattr()``,以及对于 ``__dict__`` 的直接引用。" + +#: ../../tutorial/classes.rst:737 +msgid "Odds and Ends" +msgstr "杂项说明" + +#: ../../tutorial/classes.rst:739 +msgid "" +"Sometimes it is useful to have a data type similar to the Pascal \"record\" " +"or C \"struct\", bundling together a few named data items. An empty class " +"definition will do nicely::" +msgstr "" +"有时会需要使用类似于 Pascal 的“record”或 C 的“struct”这样的数据类型,将一些命名数据项捆绑在一起。 " +"这种情况适合定义一个空类::" + +#: ../../tutorial/classes.rst:753 +msgid "" +"A piece of Python code that expects a particular abstract data type can " +"often be passed a class that emulates the methods of that data type instead." +" For instance, if you have a function that formats some data from a file " +"object, you can define a class with methods :meth:`read` and " +":meth:`!readline` that get the data from a string buffer instead, and pass " +"it as an argument." +msgstr "" +"一段需要特定抽象数据类型的 Python 代码往往可以被传入一个模拟了该数据类型的方法的类作为替代。 " +"例如,如果你有一个基于文件对象来格式化某些数据的函数,你可以定义一个带有 :meth:`read` 和 :meth:`!readline` " +"方法从字符串缓存获取数据的类,并将其作为参数传入。" + +#: ../../tutorial/classes.rst:764 +msgid "" +"Instance method objects have attributes, too: ``m.__self__`` is the instance" +" object with the method :meth:`m`, and ``m.__func__`` is the function object" +" corresponding to the method." +msgstr "" +"实例方法对象也具有属性: ``m.__self__`` 就是带有 :meth:`m` 方法的实例对象,而 ``m.__func__`` " +"则是该方法所对应的函数对象。" + +#: ../../tutorial/classes.rst:772 +msgid "Iterators" +msgstr "迭代器" + +#: ../../tutorial/classes.rst:774 +msgid "" +"By now you have probably noticed that most container objects can be looped " +"over using a :keyword:`for` statement::" +msgstr "到目前为止,您可能已经注意到大多数容器对象都可以使用 :keyword:`for` 语句::" + +#: ../../tutorial/classes.rst:788 +msgid "" +"This style of access is clear, concise, and convenient. The use of " +"iterators pervades and unifies Python. Behind the scenes, the " +":keyword:`for` statement calls :func:`iter` on the container object. The " +"function returns an iterator object that defines the method " +":meth:`~iterator.__next__` which accesses elements in the container one at a" +" time. When there are no more elements, :meth:`~iterator.__next__` raises a" +" :exc:`StopIteration` exception which tells the :keyword:`!for` loop to " +"terminate. You can call the :meth:`~iterator.__next__` method using the " +":func:`next` built-in function; this example shows how it all works::" +msgstr "" +"这种访问风格清晰、简洁又方便。 迭代器的使用非常普遍并使得 Python 成为一个统一的整体。 在幕后,:keyword:`for` " +"语句会在容器对象上调用 :func:`iter`。 该函数返回一个定义了 :meth:`~iterator.__next__` " +"方法的迭代器对象,此方法将逐一访问容器中的元素。 当元素用尽时,:meth:`~iterator.__next__` 将引发 " +":exc:`StopIteration` 异常来通知终止 :keyword:`!for` 循环。 你可以使用 :func:`next` 内置函数来调用 " +":meth:`~iterator.__next__` 方法;这个例子显示了它的运作方式::" + +#: ../../tutorial/classes.rst:813 +msgid "" +"Having seen the mechanics behind the iterator protocol, it is easy to add " +"iterator behavior to your classes. Define an :meth:`__iter__` method which " +"returns an object with a :meth:`~iterator.__next__` method. If the class " +"defines :meth:`__next__`, then :meth:`__iter__` can just return ``self``::" +msgstr "" +"看过迭代器协议的幕后机制,给你的类添加迭代器行为就很容易了。 定义一个 :meth:`__iter__` 方法来返回一个带有 " +":meth:`~iterator.__next__` 方法的对象。 如果类已定义了 :meth:`__next__`,则 " +":meth:`__iter__` 可以简单地返回 ``self``::" + +#: ../../tutorial/classes.rst:850 +msgid "Generators" +msgstr "生成器" + +#: ../../tutorial/classes.rst:852 +msgid "" +":term:`Generators ` are a simple and powerful tool for creating " +"iterators. They are written like regular functions but use the " +":keyword:`yield` statement whenever they want to return data. Each time " +":func:`next` is called on it, the generator resumes where it left off (it " +"remembers all the data values and which statement was last executed). An " +"example shows that generators can be trivially easy to create::" +msgstr "" +":term:`生成器 ` 是一个用于创建迭代器的简单而强大的工具。 它们的写法类似于标准的函数,但当它们要返回数据时会使用 " +":keyword:`yield` 语句。 每次在生成器上调用 :func:`next` " +"时,它会从上次离开的位置恢复执行(它会记住上次执行语句时的所有数据值)。 一个显示如何非常容易地创建生成器的示例如下::" + +#: ../../tutorial/classes.rst:873 +msgid "" +"Anything that can be done with generators can also be done with class-based " +"iterators as described in the previous section. What makes generators so " +"compact is that the :meth:`__iter__` and :meth:`~generator.__next__` methods" +" are created automatically." +msgstr "" +"可以用生成器来完成的操作同样可以用前一节所描述的基于类的迭代器来完成。 但生成器的写法更为紧凑,因为它会自动创建 :meth:`__iter__` 和 " +":meth:`~generator.__next__` 方法。" + +#: ../../tutorial/classes.rst:878 +msgid "" +"Another key feature is that the local variables and execution state are " +"automatically saved between calls. This made the function easier to write " +"and much more clear than an approach using instance variables like " +"``self.index`` and ``self.data``." +msgstr "" +"另一个关键特性在于局部变量和执行状态会在每次调用之间自动保存。 这使得该函数相比使用 ``self.index`` 和 ``self.data`` " +"这种实例变量的方式更易编写且更为清晰。" + +#: ../../tutorial/classes.rst:883 +msgid "" +"In addition to automatic method creation and saving program state, when " +"generators terminate, they automatically raise :exc:`StopIteration`. In " +"combination, these features make it easy to create iterators with no more " +"effort than writing a regular function." +msgstr "" +"除了会自动创建方法和保存程序状态,当生成器终结时,它们还会自动引发 :exc:`StopIteration`。 " +"这些特性结合在一起,使得创建迭代器能与编写常规函数一样容易。" + +#: ../../tutorial/classes.rst:892 +msgid "Generator Expressions" +msgstr "生成器表达式" + +#: ../../tutorial/classes.rst:894 +msgid "" +"Some simple generators can be coded succinctly as expressions using a syntax" +" similar to list comprehensions but with parentheses instead of square " +"brackets. These expressions are designed for situations where the generator " +"is used right away by an enclosing function. Generator expressions are more" +" compact but less versatile than full generator definitions and tend to be " +"more memory friendly than equivalent list comprehensions." +msgstr "" +"某些简单的生成器可以写成简洁的表达式代码,所用语法类似列表推导式,但外层为圆括号而非方括号。 这种表达式被设计用于生成器将立即被外层函数所使用的情况。 " +"生成器表达式相比完整的生成器更紧凑但较不灵活,相比等效的列表推导式则更为节省内存。" + +#: ../../tutorial/classes.rst:901 +msgid "Examples::" +msgstr "示例::" + +#: ../../tutorial/classes.rst:922 +msgid "Footnotes" +msgstr "备注" + +#: ../../tutorial/classes.rst:923 +msgid "" +"Except for one thing. Module objects have a secret read-only attribute " +"called :attr:`~object.__dict__` which returns the dictionary used to " +"implement the module's namespace; the name :attr:`~object.__dict__` is an " +"attribute but not a global name. Obviously, using this violates the " +"abstraction of namespace implementation, and should be restricted to things " +"like post-mortem debuggers." +msgstr "" +"存在一个例外。 模块对象有一个秘密的只读属性 " +":attr:`~object.__dict__`,它返回用于实现模块命名空间的字典;:attr:`~object.__dict__` " +"是属性但不是全局名称。 显然,使用这个将违反命名空间实现的抽象,应当仅被用于事后调试器之类的场合。" diff --git a/tutorial/controlflow.po b/tutorial/controlflow.po new file mode 100644 index 000000000..da5ac84ed --- /dev/null +++ b/tutorial/controlflow.po @@ -0,0 +1,920 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) 2001-2024, Python Software Foundation +# This file is distributed under the same license as the Python package. +# FIRST AUTHOR , YEAR. +# +# Translators: +# cdarlint , 2017 +# Fred , 2018 +# df2dc1c92e792f7ae8417c51df43db8f_594d92a <0f49be28017426edb1db1a2ab6e67088_717605>, 2018 +# ppcfish , 2019 +# jaystone776 <1732865113@qq.com>, 2021 +# Alpha Du , 2022 +# Rafael Fontenelle , 2024 +# Freesand Leo , 2024 +# +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: Python 3.9\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2024-05-24 16:33+0000\n" +"PO-Revision-Date: 2017-02-16 23:40+0000\n" +"Last-Translator: Freesand Leo , 2024\n" +"Language-Team: Chinese (China) (https://app.transifex.com/python-doc/teams/5390/zh_CN/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: zh_CN\n" +"Plural-Forms: nplurals=1; plural=0;\n" + +#: ../../tutorial/controlflow.rst:5 +msgid "More Control Flow Tools" +msgstr "更多控制流工具" + +#: ../../tutorial/controlflow.rst:7 +msgid "" +"Besides the :keyword:`while` statement just introduced, Python uses the " +"usual flow control statements known from other languages, with some twists." +msgstr "除了上一章介绍的 :keyword:`while` 语句,Python 还支持其他语言中常见的流程控制语句,只是稍有不同。" + +#: ../../tutorial/controlflow.rst:14 +msgid ":keyword:`!if` Statements" +msgstr ":keyword:`!if` 语句" + +#: ../../tutorial/controlflow.rst:16 +msgid "" +"Perhaps the most well-known statement type is the :keyword:`if` statement. " +"For example::" +msgstr "最让人耳熟能详的语句应当是 :keyword:`if` 语句:" + +#: ../../tutorial/controlflow.rst:33 +msgid "" +"There can be zero or more :keyword:`elif` parts, and the :keyword:`else` " +"part is optional. The keyword ':keyword:`!elif`' is short for 'else if', " +"and is useful to avoid excessive indentation. An :keyword:`!if` ... " +":keyword:`!elif` ... :keyword:`!elif` ... sequence is a substitute for the " +"``switch`` or ``case`` statements found in other languages." +msgstr "" +"可有零个或多个 :keyword:`elif` 部分,:keyword:`else` 部分也是可选的。关键字 ':keyword:`!elif`' 是 " +"'else if' 的缩写,用于避免过多的缩进。:keyword:`!if` ... :keyword:`!elif` ... " +":keyword:`!elif` ... 序列可以当作其它语言中 ``switch`` 或 ``case`` 语句的替代品。" + +#: ../../tutorial/controlflow.rst:43 +msgid ":keyword:`!for` Statements" +msgstr ":keyword:`!for` 语句" + +#: ../../tutorial/controlflow.rst:48 +msgid "" +"The :keyword:`for` statement in Python differs a bit from what you may be " +"used to in C or Pascal. Rather than always iterating over an arithmetic " +"progression of numbers (like in Pascal), or giving the user the ability to " +"define both the iteration step and halting condition (as C), Python's " +":keyword:`!for` statement iterates over the items of any sequence (a list or" +" a string), in the order that they appear in the sequence. For example (no " +"pun intended):" +msgstr "" +"Python 的 :keyword:`for` 语句与 C 或 Pascal 中的不同。Python 的 :keyword:`!for` " +"语句不迭代算术递增数值(如 Pascal),或是给予用户定义迭代步骤和结束条件的能力(如 " +"C),而是在列表或字符串等任意序列的元素上迭代,按它们在序列中出现的顺序。 例如(这不是有意要暗指什么):" + +#: ../../tutorial/controlflow.rst:69 +msgid "" +"Code that modifies a collection while iterating over that same collection " +"can be tricky to get right. Instead, it is usually more straight-forward to" +" loop over a copy of the collection or to create a new collection::" +msgstr "很难正确地在迭代多项集的同时修改多项集的内容。更简单的方法是迭代多项集的副本或者创建新的多项集:" + +#: ../../tutorial/controlflow.rst:88 +msgid "The :func:`range` Function" +msgstr ":func:`range` 函数" + +#: ../../tutorial/controlflow.rst:90 +msgid "" +"If you do need to iterate over a sequence of numbers, the built-in function " +":func:`range` comes in handy. It generates arithmetic progressions::" +msgstr "内置函数 :func:`range` 用于生成等差数列:" + +#: ../../tutorial/controlflow.rst:102 +msgid "" +"The given end point is never part of the generated sequence; ``range(10)`` " +"generates 10 values, the legal indices for items of a sequence of length 10." +" It is possible to let the range start at another number, or to specify a " +"different increment (even negative; sometimes this is called the 'step')::" +msgstr "" +"生成的序列绝不会包括给定的终止值;``range(10)`` 生成 10 个值——长度为 10 的序列的所有合法索引。range 可以不从 0 " +"开始,且可以按给定的步长递增(即使是负数步长):" + +#: ../../tutorial/controlflow.rst:116 +msgid "" +"To iterate over the indices of a sequence, you can combine :func:`range` and" +" :func:`len` as follows::" +msgstr "要按索引迭代序列,可以组合使用 :func:`range` 和 :func:`len`:" + +#: ../../tutorial/controlflow.rst:129 +msgid "" +"In most such cases, however, it is convenient to use the :func:`enumerate` " +"function, see :ref:`tut-loopidioms`." +msgstr "不过大多数情况下 :func:`enumerate` 函数很方便,详见 :ref:`tut-loopidioms`。" + +#: ../../tutorial/controlflow.rst:132 +msgid "A strange thing happens if you just print a range::" +msgstr "如果直接打印一个 range 会发生意想不到的事情:" + +#: ../../tutorial/controlflow.rst:137 +msgid "" +"In many ways the object returned by :func:`range` behaves as if it is a " +"list, but in fact it isn't. It is an object which returns the successive " +"items of the desired sequence when you iterate over it, but it doesn't " +"really make the list, thus saving space." +msgstr "" +":func:`range` " +"返回的对象在很多方面和列表的行为一样,但其实它和列表不一样。该对象只有在被迭代时才一个一个地返回所期望的列表项,并没有真正生成过一个含有全部项的列表,从而节省了空间。" + +#: ../../tutorial/controlflow.rst:142 +msgid "" +"We say such an object is :term:`iterable`, that is, suitable as a target for" +" functions and constructs that expect something from which they can obtain " +"successive items until the supply is exhausted. We have seen that the " +":keyword:`for` statement is such a construct, while an example of a function" +" that takes an iterable is :func:`sum`::" +msgstr "" +"这种对象称为可迭代对象 :term:`iterable`,适合作为需要获取一系列值的函数或程序构件的参数。:keyword:`for` " +"语句就是这样的程序构件;以可迭代对象作为参数的函数例如 :func:`sum`:" + +#: ../../tutorial/controlflow.rst:151 +msgid "" +"Later we will see more functions that return iterables and take iterables as" +" arguments. In chapter :ref:`tut-structures`, we will discuss in more " +"detail about :func:`list`." +msgstr "" +"之后我们会看到更多返回可迭代对象,或以可迭代对象作为参数的函数。在 :ref:`tut-structures` 这一章中,我们将讨论 " +":func:`list` 的更多细节。" + +#: ../../tutorial/controlflow.rst:158 +msgid "" +":keyword:`!break` and :keyword:`!continue` Statements, and :keyword:`!else` " +"Clauses on Loops" +msgstr "循环中的 :keyword:`!break`、:keyword:`!continue` 语句及 :keyword:`!else` 子句" + +#: ../../tutorial/controlflow.rst:160 +msgid "" +"The :keyword:`break` statement, like in C, breaks out of the innermost " +"enclosing :keyword:`for` or :keyword:`while` loop." +msgstr "" +":keyword:`break` 语句和 C 中的类似,用于跳出最近的 :keyword:`for` 或 :keyword:`while` 循环。" + +#: ../../tutorial/controlflow.rst:163 +msgid "" +"Loop statements may have an :keyword:`!else` clause; it is executed when the" +" loop terminates through exhaustion of the iterable (with :keyword:`for`) or" +" when the condition becomes false (with :keyword:`while`), but not when the " +"loop is terminated by a :keyword:`break` statement. This is exemplified by " +"the following loop, which searches for prime numbers::" +msgstr "" +"循环语句支持 :keyword:`!else` 子句;:keyword:`for` 循环中,可迭代对象中的元素全部循环完毕,或 " +":keyword:`while` 循环的条件为假时,执行该子句;:keyword:`break` 语句终止循环时,不执行该子句。 " +"请看下面这个查找素数的循环示例:" + +#: ../../tutorial/controlflow.rst:187 +msgid "" +"(Yes, this is the correct code. Look closely: the ``else`` clause belongs " +"to the :keyword:`for` loop, **not** the :keyword:`if` statement.)" +msgstr "" +"(没错,这段代码就是这么写。仔细看:``else`` 子句属于 :keyword:`for` 循环,**不属于** :keyword:`if` 语句。)" + +#: ../../tutorial/controlflow.rst:190 +msgid "" +"When used with a loop, the ``else`` clause has more in common with the " +"``else`` clause of a :keyword:`try` statement than it does with that of " +":keyword:`if` statements: a :keyword:`try` statement's ``else`` clause runs " +"when no exception occurs, and a loop's ``else`` clause runs when no " +"``break`` occurs. For more on the :keyword:`!try` statement and exceptions, " +"see :ref:`tut-handling`." +msgstr "" +"``else`` 子句用于循环时比起 :keyword:`if` 语句的 ``else`` 子句,更像 :keyword:`try` " +"语句的。:keyword:`try` 语句的 ``else`` 子句在未发生异常时执行,循环的 ``else`` 子句则在未发生 ``break`` " +"时执行。 :keyword:`!try` 语句和异常详见 :ref:`tut-handling`。" + +#: ../../tutorial/controlflow.rst:197 +msgid "" +"The :keyword:`continue` statement, also borrowed from C, continues with the " +"next iteration of the loop::" +msgstr ":keyword:`continue` 语句,同样借鉴自 C 语言,以执行循环的下一次迭代来继续:" + +#: ../../tutorial/controlflow.rst:218 +msgid ":keyword:`!pass` Statements" +msgstr ":keyword:`!pass` 语句" + +#: ../../tutorial/controlflow.rst:220 +msgid "" +"The :keyword:`pass` statement does nothing. It can be used when a statement " +"is required syntactically but the program requires no action. For example::" +msgstr ":keyword:`pass` 语句不执行任何动作。语法上需要一个语句,但程序毋需执行任何动作时,可以使用该语句。例如:" + +#: ../../tutorial/controlflow.rst:227 +msgid "This is commonly used for creating minimal classes::" +msgstr "这常用于创建一个最小的类:" + +#: ../../tutorial/controlflow.rst:233 +msgid "" +"Another place :keyword:`pass` can be used is as a place-holder for a " +"function or conditional body when you are working on new code, allowing you " +"to keep thinking at a more abstract level. The :keyword:`!pass` is silently" +" ignored::" +msgstr "" +":keyword:`pass` 还可用作函数或条件语句体的占位符,让你保持在更抽象的层次进行思考。:keyword:`!pass` 会被默默地忽略:" + +#: ../../tutorial/controlflow.rst:244 +msgid "Defining Functions" +msgstr "定义函数" + +#: ../../tutorial/controlflow.rst:246 +msgid "" +"We can create a function that writes the Fibonacci series to an arbitrary " +"boundary::" +msgstr "下列代码创建一个可以输出限定数值内的斐波那契数列函数:" + +#: ../../tutorial/controlflow.rst:266 +msgid "" +"The keyword :keyword:`def` introduces a function *definition*. It must be " +"followed by the function name and the parenthesized list of formal " +"parameters. The statements that form the body of the function start at the " +"next line, and must be indented." +msgstr "*定义* 函数使用关键字 :keyword:`def`,后跟函数名与括号内的形参列表。函数语句从下一行开始,并且必须缩进。" + +#: ../../tutorial/controlflow.rst:271 +msgid "" +"The first statement of the function body can optionally be a string literal;" +" this string literal is the function's documentation string, or " +":dfn:`docstring`. (More about docstrings can be found in the section " +":ref:`tut-docstrings`.) There are tools which use docstrings to " +"automatically produce online or printed documentation, or to let the user " +"interactively browse through code; it's good practice to include docstrings " +"in code that you write, so make a habit of it." +msgstr "" +"函数内的第一条语句是字符串时,该字符串就是文档字符串,也称为 :dfn:`docstring`,详见 :ref:`tut-" +"docstrings`。利用文档字符串可以自动生成在线文档或打印版文档,还可以让开发者在浏览代码时直接查阅文档;Python " +"开发者最好养成在代码中加入文档字符串的好习惯。" + +#: ../../tutorial/controlflow.rst:278 +msgid "" +"The *execution* of a function introduces a new symbol table used for the " +"local variables of the function. More precisely, all variable assignments " +"in a function store the value in the local symbol table; whereas variable " +"references first look in the local symbol table, then in the local symbol " +"tables of enclosing functions, then in the global symbol table, and finally " +"in the table of built-in names. Thus, global variables and variables of " +"enclosing functions cannot be directly assigned a value within a function " +"(unless, for global variables, named in a :keyword:`global` statement, or, " +"for variables of enclosing functions, named in a :keyword:`nonlocal` " +"statement), although they may be referenced." +msgstr "" +"函数在 *执行* " +"时使用函数局部变量符号表,所有函数变量赋值都存在局部符号表中;引用变量时,首先,在局部符号表里查找变量,然后,是外层函数局部符号表,再是全局符号表,最后是内置名称符号表。因此,尽管可以引用全局变量和外层函数的变量,但最好不要在函数内直接赋值(除非是" +" :keyword:`global` 语句定义的全局变量,或 :keyword:`nonlocal` 语句定义的外层函数变量)。" + +#: ../../tutorial/controlflow.rst:289 +msgid "" +"The actual parameters (arguments) to a function call are introduced in the " +"local symbol table of the called function when it is called; thus, arguments" +" are passed using *call by value* (where the *value* is always an object " +"*reference*, not the value of the object). [#]_ When a function calls " +"another function, or calls itself recursively, a new local symbol table is " +"created for that call." +msgstr "" +"在调用函数时会将实际参数(实参)引入到被调用函数的局部符号表中;因此,实参是使用 *按值调用* 来传递的(其中的 *值* 始终是对象的 *引用* " +"而不是对象的值)。 [#]_ 当一个函数调用另外一个函数时,会为该调用创建一个新的局部符号表。" + +#: ../../tutorial/controlflow.rst:296 +msgid "" +"A function definition associates the function name with the function object " +"in the current symbol table. The interpreter recognizes the object pointed " +"to by that name as a user-defined function. Other names can also point to " +"that same function object and can also be used to access the function::" +msgstr "" +"函数定义在当前符号表中把函数名与函数对象关联在一起。解释器把函数名指向的对象作为用户自定义函数。还可以使用其他名称指向同一个函数对象,并访问访该函数:" + +#: ../../tutorial/controlflow.rst:307 +msgid "" +"Coming from other languages, you might object that ``fib`` is not a function" +" but a procedure since it doesn't return a value. In fact, even functions " +"without a :keyword:`return` statement do return a value, albeit a rather " +"boring one. This value is called ``None`` (it's a built-in name). Writing " +"the value ``None`` is normally suppressed by the interpreter if it would be " +"the only value written. You can see it if you really want to using " +":func:`print`::" +msgstr "" +"如果你用过其他语言,你可能会认为 ``fib`` 不是函数而是一个过程,因为它没有返回值。 事实上,即使没有 :keyword:`return` " +"语句的函数也有返回值,尽管这个值可能相当无聊。 这个值被称为 ``None`` (是一个内置名称)。 通常解释器会屏蔽单独的返回值 ``None``。 " +"如果你确有需要可以使用 :func:`print` 查看它::" + +#: ../../tutorial/controlflow.rst:318 +msgid "" +"It is simple to write a function that returns a list of the numbers of the " +"Fibonacci series, instead of printing it::" +msgstr "编写不直接输出斐波那契数列运算结果,而是返回运算结果列表的函数也非常简单:" + +#: ../../tutorial/controlflow.rst:334 +msgid "This example, as usual, demonstrates some new Python features:" +msgstr "本例也新引入了一些 Python 功能:" + +#: ../../tutorial/controlflow.rst:336 +msgid "" +"The :keyword:`return` statement returns with a value from a function. " +":keyword:`!return` without an expression argument returns ``None``. Falling " +"off the end of a function also returns ``None``." +msgstr "" +":keyword:`return` 语句返回函数的值。:keyword:`!return` 语句不带表达式参数时,返回 " +"``None``。函数执行完毕退出也返回 ``None``。" + +#: ../../tutorial/controlflow.rst:340 +msgid "" +"The statement ``result.append(a)`` calls a *method* of the list object " +"``result``. A method is a function that 'belongs' to an object and is named" +" ``obj.methodname``, where ``obj`` is some object (this may be an " +"expression), and ``methodname`` is the name of a method that is defined by " +"the object's type. Different types define different methods. Methods of " +"different types may have the same name without causing ambiguity. (It is " +"possible to define your own object types and methods, using *classes*, see " +":ref:`tut-classes`) The method :meth:`append` shown in the example is " +"defined for list objects; it adds a new element at the end of the list. In " +"this example it is equivalent to ``result = result + [a]``, but more " +"efficient." +msgstr "" +"``result.append(a)`` 语句调用了列表对象 ``result`` 的 *方法* 。方法是“从属于”对象的函数,命名为 " +"``obj.methodname``,``obj`` 是对象(也可以是表达式),``methodname`` " +"是对象类型定义的方法名。不同类型定义不同的方法,不同类型的方法名可以相同,且不会引起歧义。(用 *类* 可以自定义对象类型和方法,详见 " +":ref:`tut-classes` )示例中的方法 :meth:`append` 是为列表对象定义的,用于在列表末尾添加新元素。本例中,该方法相当于 " +"``result = result + [a]`` ,但更有效。" + +#: ../../tutorial/controlflow.rst:355 +msgid "More on Defining Functions" +msgstr "函数定义详解" + +#: ../../tutorial/controlflow.rst:357 +msgid "" +"It is also possible to define functions with a variable number of arguments." +" There are three forms, which can be combined." +msgstr "函数定义支持可变数量的参数。这里列出三种可以组合使用的形式。" + +#: ../../tutorial/controlflow.rst:364 +msgid "Default Argument Values" +msgstr "默认值参数" + +#: ../../tutorial/controlflow.rst:366 +msgid "" +"The most useful form is to specify a default value for one or more " +"arguments. This creates a function that can be called with fewer arguments " +"than it is defined to allow. For example::" +msgstr "为参数指定默认值是非常有用的方式。调用函数时,可以使用比定义时更少的参数,例如:" + +#: ../../tutorial/controlflow.rst:382 +msgid "This function can be called in several ways:" +msgstr "该函数可以用以下方式调用:" + +#: ../../tutorial/controlflow.rst:384 +msgid "" +"giving only the mandatory argument: ``ask_ok('Do you really want to " +"quit?')``" +msgstr "只给出必选实参:``ask_ok('Do you really want to quit?')``" + +#: ../../tutorial/controlflow.rst:386 +msgid "" +"giving one of the optional arguments: ``ask_ok('OK to overwrite the file?', " +"2)``" +msgstr "给出一个可选实参:``ask_ok('OK to overwrite the file?', 2)``" + +#: ../../tutorial/controlflow.rst:388 +msgid "" +"or even giving all arguments: ``ask_ok('OK to overwrite the file?', 2, 'Come" +" on, only yes or no!')``" +msgstr "" +"给出所有实参:``ask_ok('OK to overwrite the file?', 2, 'Come on, only yes or " +"no!')``" + +#: ../../tutorial/controlflow.rst:391 +msgid "" +"This example also introduces the :keyword:`in` keyword. This tests whether " +"or not a sequence contains a certain value." +msgstr "本例还使用了关键字 :keyword:`in` ,用于确认序列中是否包含某个值。" + +#: ../../tutorial/controlflow.rst:394 +msgid "" +"The default values are evaluated at the point of function definition in the " +"*defining* scope, so that ::" +msgstr "默认值在 *定义* 作用域里的函数定义中求值,所以:" + +#: ../../tutorial/controlflow.rst:405 +msgid "will print ``5``." +msgstr "上例输出的是 ``5``。" + +#: ../../tutorial/controlflow.rst:407 +msgid "" +"**Important warning:** The default value is evaluated only once. This makes" +" a difference when the default is a mutable object such as a list, " +"dictionary, or instances of most classes. For example, the following " +"function accumulates the arguments passed to it on subsequent calls::" +msgstr "" +"**重要警告:** 默认值只计算一次。默认值为列表、字典或类实例等可变对象时,会产生与该规则不同的结果。例如,下面的函数会累积后续调用时传递的参数:" + +#: ../../tutorial/controlflow.rst:420 +msgid "This will print ::" +msgstr "输出结果如下:" + +#: ../../tutorial/controlflow.rst:426 +msgid "" +"If you don't want the default to be shared between subsequent calls, you can" +" write the function like this instead::" +msgstr "不想在后续调用之间共享默认值时,应以如下方式编写函数:" + +#: ../../tutorial/controlflow.rst:439 +msgid "Keyword Arguments" +msgstr "关键字参数" + +#: ../../tutorial/controlflow.rst:441 +msgid "" +"Functions can also be called using :term:`keyword arguments ` of the form ``kwarg=value``. For instance, the following " +"function::" +msgstr "" +"``kwarg=value`` 形式的 :term:`关键字参数 ` 也可以用于调用函数。函数示例如下:" + +#: ../../tutorial/controlflow.rst:450 +msgid "" +"accepts one required argument (``voltage``) and three optional arguments " +"(``state``, ``action``, and ``type``). This function can be called in any " +"of the following ways::" +msgstr "" +"该函数接受一个必选参数(``voltage``)和三个可选参数(``state``, ``action`` 和 " +"``type``)。该函数可用下列方式调用:" + +#: ../../tutorial/controlflow.rst:461 +msgid "but all the following calls would be invalid::" +msgstr "以下调用函数的方式都无效:" + +#: ../../tutorial/controlflow.rst:468 +msgid "" +"In a function call, keyword arguments must follow positional arguments. All " +"the keyword arguments passed must match one of the arguments accepted by the" +" function (e.g. ``actor`` is not a valid argument for the ``parrot`` " +"function), and their order is not important. This also includes non-" +"optional arguments (e.g. ``parrot(voltage=1000)`` is valid too). No argument" +" may receive a value more than once. Here's an example that fails due to " +"this restriction::" +msgstr "" +"函数调用时,关键字参数必须跟在位置参数后面。所有传递的关键字参数都必须匹配一个函数接受的参数(比如,``actor`` 不是函数 ``parrot`` " +"的有效参数),关键字参数的顺序并不重要。这也包括必选参数,(比如,``parrot(voltage=1000)`` " +"也有效)。不能对同一个参数多次赋值,下面就是一个因此限制而失败的例子:" + +#: ../../tutorial/controlflow.rst:484 +msgid "" +"When a final formal parameter of the form ``**name`` is present, it receives" +" a dictionary (see :ref:`typesmapping`) containing all keyword arguments " +"except for those corresponding to a formal parameter. This may be combined " +"with a formal parameter of the form ``*name`` (described in the next " +"subsection) which receives a :ref:`tuple ` containing the " +"positional arguments beyond the formal parameter list. (``*name`` must " +"occur before ``**name``.) For example, if we define a function like this::" +msgstr "" +"最后一个形参为 ``**name`` 形式时,接收一个字典(详见 " +":ref:`typesmapping`),该字典包含与函数中已定义形参对应之外的所有关键字参数。``**name`` 形参可以与 ``*name`` " +"形参(下一小节介绍)组合使用(``*name`` 必须在 ``**name`` 前面), ``*name`` 形参接收一个 :ref:`元组 `,该元组包含形参列表之外的位置参数。例如,可以定义下面这样的函数:" + +#: ../../tutorial/controlflow.rst:501 +msgid "It could be called like this::" +msgstr "该函数可以用如下方式调用:" + +#: ../../tutorial/controlflow.rst:509 +msgid "and of course it would print:" +msgstr "输出结果如下:" + +#: ../../tutorial/controlflow.rst:522 +msgid "" +"Note that the order in which the keyword arguments are printed is guaranteed" +" to match the order in which they were provided in the function call." +msgstr "注意,关键字参数在输出结果中的顺序与调用函数时的顺序一致。" + +#: ../../tutorial/controlflow.rst:526 +msgid "Special parameters" +msgstr "特殊参数" + +#: ../../tutorial/controlflow.rst:528 +msgid "" +"By default, arguments may be passed to a Python function either by position " +"or explicitly by keyword. For readability and performance, it makes sense to" +" restrict the way arguments can be passed so that a developer need only look" +" at the function definition to determine if items are passed by position, by" +" position or keyword, or by keyword." +msgstr "" +"默认情况下,参数可以按位置或显式关键字传递给 Python " +"函数。为了让代码易读、高效,最好限制参数的传递方式,这样,开发者只需查看函数定义,即可确定参数项是仅按位置、按位置或关键字,还是仅按关键字传递。" + +#: ../../tutorial/controlflow.rst:534 +msgid "A function definition may look like:" +msgstr "函数定义如下:" + +#: ../../tutorial/controlflow.rst:545 +msgid "" +"where ``/`` and ``*`` are optional. If used, these symbols indicate the kind" +" of parameter by how the arguments may be passed to the function: " +"positional-only, positional-or-keyword, and keyword-only. Keyword parameters" +" are also referred to as named parameters." +msgstr "``/`` 和 ``*`` 是可选的。这些符号表明形参如何把参数值传递给函数:位置、位置或关键字、关键字。关键字形参也叫作命名形参。" + +#: ../../tutorial/controlflow.rst:552 +msgid "Positional-or-Keyword Arguments" +msgstr "位置或关键字参数" + +#: ../../tutorial/controlflow.rst:554 +msgid "" +"If ``/`` and ``*`` are not present in the function definition, arguments may" +" be passed to a function by position or by keyword." +msgstr "函数定义中未使用 ``/`` 和 ``*`` 时,参数可以按位置或关键字传递给函数。" + +#: ../../tutorial/controlflow.rst:559 +msgid "Positional-Only Parameters" +msgstr "仅位置参数" + +#: ../../tutorial/controlflow.rst:561 +msgid "" +"Looking at this in a bit more detail, it is possible to mark certain " +"parameters as *positional-only*. If *positional-only*, the parameters' order" +" matters, and the parameters cannot be passed by keyword. Positional-only " +"parameters are placed before a ``/`` (forward-slash). The ``/`` is used to " +"logically separate the positional-only parameters from the rest of the " +"parameters. If there is no ``/`` in the function definition, there are no " +"positional-only parameters." +msgstr "" +"此处再介绍一些细节,特定形参可以标记为 *仅限位置*。*仅限位置* 时,形参的顺序很重要,且这些形参不能用关键字传递。仅限位置形参应放在 ``/`` " +"(正斜杠)前。``/`` 用于在逻辑上分割仅限位置形参与其它形参。如果函数定义中没有 ``/``,则表示没有仅限位置形参。" + +#: ../../tutorial/controlflow.rst:569 +msgid "" +"Parameters following the ``/`` may be *positional-or-keyword* or *keyword-" +"only*." +msgstr "``/`` 后可以是 *位置或关键字* 或 *仅限关键字* 形参。" + +#: ../../tutorial/controlflow.rst:573 +msgid "Keyword-Only Arguments" +msgstr "仅限关键字参数" + +#: ../../tutorial/controlflow.rst:575 +msgid "" +"To mark parameters as *keyword-only*, indicating the parameters must be " +"passed by keyword argument, place an ``*`` in the arguments list just before" +" the first *keyword-only* parameter." +msgstr "把形参标记为 *仅限关键字*,表明必须以关键字参数形式传递该形参,应在参数列表中第一个 *仅限关键字* 形参前添加 ``*``。" + +#: ../../tutorial/controlflow.rst:581 +msgid "Function Examples" +msgstr "函数示例" + +#: ../../tutorial/controlflow.rst:583 +msgid "" +"Consider the following example function definitions paying close attention " +"to the markers ``/`` and ``*``::" +msgstr "请看下面的函数定义示例,注意 ``/`` 和 ``*`` 标记:" + +#: ../../tutorial/controlflow.rst:599 +msgid "" +"The first function definition, ``standard_arg``, the most familiar form, " +"places no restrictions on the calling convention and arguments may be passed" +" by position or keyword::" +msgstr "第一个函数定义 ``standard_arg`` 是最常见的形式,对调用方式没有任何限制,可以按位置也可以按关键字传递参数:" + +#: ../../tutorial/controlflow.rst:609 +msgid "" +"The second function ``pos_only_arg`` is restricted to only use positional " +"parameters as there is a ``/`` in the function definition::" +msgstr "第二个函数 ``pos_only_arg`` 的函数定义中有 ``/``,仅限使用位置形参:" + +#: ../../tutorial/controlflow.rst:620 +msgid "" +"The third function ``kwd_only_args`` only allows keyword arguments as " +"indicated by a ``*`` in the function definition::" +msgstr "第三个函数 ``kwd_only_args`` 的函数定义通过 ``*`` 表明仅限关键字参数:" + +#: ../../tutorial/controlflow.rst:631 +msgid "" +"And the last uses all three calling conventions in the same function " +"definition::" +msgstr "最后一个函数在同一个函数定义中,使用了全部三种调用惯例:" + +#: ../../tutorial/controlflow.rst:651 +msgid "" +"Finally, consider this function definition which has a potential collision " +"between the positional argument ``name`` and ``**kwds`` which has ``name`` " +"as a key::" +msgstr "下面的函数定义中,``kwds`` 把 ``name`` 当作键,因此,可能与位置参数 ``name`` 产生潜在冲突:" + +#: ../../tutorial/controlflow.rst:656 +msgid "" +"There is no possible call that will make it return ``True`` as the keyword " +"``'name'`` will always bind to the first parameter. For example::" +msgstr "调用该函数不可能返回 ``True``,因为关键字 ``'name'`` 总与第一个形参绑定。例如:" + +#: ../../tutorial/controlflow.rst:665 +msgid "" +"But using ``/`` (positional only arguments), it is possible since it allows " +"``name`` as a positional argument and ``'name'`` as a key in the keyword " +"arguments::" +msgstr "" +"加上 ``/`` (仅限位置参数)后,就可以了。此时,函数定义把 ``name`` 当作位置参数,``'name'`` 也可以作为关键字参数的键:" + +#: ../../tutorial/controlflow.rst:672 +msgid "" +"In other words, the names of positional-only parameters can be used in " +"``**kwds`` without ambiguity." +msgstr "换句话说,仅限位置形参的名称可以在 ``**kwds`` 中使用,而不产生歧义。" + +#: ../../tutorial/controlflow.rst:677 +msgid "Recap" +msgstr "小结" + +#: ../../tutorial/controlflow.rst:679 +msgid "" +"The use case will determine which parameters to use in the function " +"definition::" +msgstr "以下用例决定哪些形参可以用于函数定义:" + +#: ../../tutorial/controlflow.rst:683 +msgid "As guidance:" +msgstr "说明:" + +#: ../../tutorial/controlflow.rst:685 +msgid "" +"Use positional-only if you want the name of the parameters to not be " +"available to the user. This is useful when parameter names have no real " +"meaning, if you want to enforce the order of the arguments when the function" +" is called or if you need to take some positional parameters and arbitrary " +"keywords." +msgstr "使用仅限位置形参,可以让用户无法使用形参名。形参名没有实际意义时,强制调用函数的实参顺序时,或同时接收位置形参和关键字时,这种方式很有用。" + +#: ../../tutorial/controlflow.rst:690 +msgid "" +"Use keyword-only when names have meaning and the function definition is more" +" understandable by being explicit with names or you want to prevent users " +"relying on the position of the argument being passed." +msgstr "当形参名有实际意义,且显式名称可以让函数定义更易理解时,阻止用户依赖传递实参的位置时,才使用关键字。" + +#: ../../tutorial/controlflow.rst:693 +msgid "" +"For an API, use positional-only to prevent breaking API changes if the " +"parameter's name is modified in the future." +msgstr "对于 API,使用仅限位置形参,可以防止未来修改形参名时造成破坏性的 API 变动。" + +#: ../../tutorial/controlflow.rst:699 +msgid "Arbitrary Argument Lists" +msgstr "任意实参列表" + +#: ../../tutorial/controlflow.rst:704 +msgid "" +"Finally, the least frequently used option is to specify that a function can " +"be called with an arbitrary number of arguments. These arguments will be " +"wrapped up in a tuple (see :ref:`tut-tuples`). Before the variable number " +"of arguments, zero or more normal arguments may occur. ::" +msgstr "" +"调用函数时,使用任意数量的实参是最少见的选项。这些实参包含在元组中(详见 :ref:`tut-tuples` " +")。在可变数量的实参之前,可能有若干个普通参数:" + +#: ../../tutorial/controlflow.rst:713 +msgid "" +"Normally, these *variadic* arguments will be last in the list of formal " +"parameters, because they scoop up all remaining input arguments that are " +"passed to the function. Any formal parameters which occur after the " +"``*args`` parameter are 'keyword-only' arguments, meaning that they can only" +" be used as keywords rather than positional arguments. ::" +msgstr "" +"*variadic* 参数用于采集传递给函数的所有剩余参数,因此,它们通常在形参列表的末尾。``*args`` " +"形参后的任何形式参数只能是仅限关键字参数,即只能用作关键字参数,不能用作位置参数:" + +#: ../../tutorial/controlflow.rst:730 +msgid "Unpacking Argument Lists" +msgstr "解包实参列表" + +#: ../../tutorial/controlflow.rst:732 +msgid "" +"The reverse situation occurs when the arguments are already in a list or " +"tuple but need to be unpacked for a function call requiring separate " +"positional arguments. For instance, the built-in :func:`range` function " +"expects separate *start* and *stop* arguments. If they are not available " +"separately, write the function call with the ``*``\\ -operator to unpack " +"the arguments out of a list or tuple::" +msgstr "" +"函数调用要求独立的位置参数,但实参在列表或元组里时,要执行相反的操作。例如,内置的 :func:`range` 函数要求独立的 *start* 和 " +"*stop* 实参。如果这些参数不是独立的,则要在调用函数时,用 ``*`` 操作符把实参从列表或元组解包出来:" + +#: ../../tutorial/controlflow.rst:748 +msgid "" +"In the same fashion, dictionaries can deliver keyword arguments with the " +"``**``\\ -operator::" +msgstr "同样,字典可以用 ``**`` 操作符传递关键字参数:" + +#: ../../tutorial/controlflow.rst:764 +msgid "Lambda Expressions" +msgstr "Lambda 表达式" + +#: ../../tutorial/controlflow.rst:766 +msgid "" +"Small anonymous functions can be created with the :keyword:`lambda` keyword." +" This function returns the sum of its two arguments: ``lambda a, b: a+b``. " +"Lambda functions can be used wherever function objects are required. They " +"are syntactically restricted to a single expression. Semantically, they are" +" just syntactic sugar for a normal function definition. Like nested " +"function definitions, lambda functions can reference variables from the " +"containing scope::" +msgstr "" +":keyword:`lambda` 关键字用于创建小巧的匿名函数。``lambda a, b: a+b`` 函数返回两个参数的和。Lambda " +"函数可用于任何需要函数对象的地方。在语法上,匿名函数只能是单个表达式。在语义上,它只是常规函数定义的语法糖。与嵌套函数定义一样,lambda " +"函数可以引用包含作用域中的变量:" + +#: ../../tutorial/controlflow.rst:783 +msgid "" +"The above example uses a lambda expression to return a function. Another " +"use is to pass a small function as an argument::" +msgstr "上例用 lambda 表达式返回函数。还可以把匿名函数用作传递的实参:" + +#: ../../tutorial/controlflow.rst:795 +msgid "Documentation Strings" +msgstr "文档字符串" + +#: ../../tutorial/controlflow.rst:802 +msgid "" +"Here are some conventions about the content and formatting of documentation " +"strings." +msgstr "以下是文档字符串内容和格式的约定。" + +#: ../../tutorial/controlflow.rst:805 +msgid "" +"The first line should always be a short, concise summary of the object's " +"purpose. For brevity, it should not explicitly state the object's name or " +"type, since these are available by other means (except if the name happens " +"to be a verb describing a function's operation). This line should begin " +"with a capital letter and end with a period." +msgstr "" +"第一行应为对象用途的简短摘要。为保持简洁,不要在这里显式说明对象名或类型,因为可通过其他方式获取这些信息(除非该名称碰巧是描述函数操作的动词)。这一行应以大写字母开头,以句点结尾。" + +#: ../../tutorial/controlflow.rst:811 +msgid "" +"If there are more lines in the documentation string, the second line should " +"be blank, visually separating the summary from the rest of the description." +" The following lines should be one or more paragraphs describing the " +"object's calling conventions, its side effects, etc." +msgstr "文档字符串为多行时,第二行应为空白行,在视觉上将摘要与其余描述分开。后面的行可包含若干段落,描述对象的调用约定、副作用等。" + +#: ../../tutorial/controlflow.rst:816 +msgid "" +"The Python parser does not strip indentation from multi-line string literals" +" in Python, so tools that process documentation have to strip indentation if" +" desired. This is done using the following convention. The first non-blank " +"line *after* the first line of the string determines the amount of " +"indentation for the entire documentation string. (We can't use the first " +"line since it is generally adjacent to the string's opening quotes so its " +"indentation is not apparent in the string literal.) Whitespace " +"\"equivalent\" to this indentation is then stripped from the start of all " +"lines of the string. Lines that are indented less should not occur, but if " +"they occur all their leading whitespace should be stripped. Equivalence of " +"whitespace should be tested after expansion of tabs (to 8 spaces, normally)." +msgstr "" +"Python 解析器不会删除 Python 中多行字符串字面值的缩进,因此,文档处理工具应在必要时删除缩进。这项操作遵循以下约定:文档字符串第一行 " +"*之后* " +"的第一个非空行决定了整个文档字符串的缩进量(第一行通常与字符串开头的引号相邻,其缩进在字符串中并不明显,因此,不能用第一行的缩进),然后,删除字符串中所有行开头处与此缩进“等价”的空白符。不能有比此缩进更少的行,但如果出现了缩进更少的行,应删除这些行的所有前导空白符。转化制表符后(通常为" +" 8 个空格),应测试空白符的等效性。" + +#: ../../tutorial/controlflow.rst:828 +msgid "Here is an example of a multi-line docstring::" +msgstr "下面是多行文档字符串的一个例子:" + +#: ../../tutorial/controlflow.rst:846 +msgid "Function Annotations" +msgstr "函数注解" + +#: ../../tutorial/controlflow.rst:854 +msgid "" +":ref:`Function annotations ` are completely optional metadata " +"information about the types used by user-defined functions (see :pep:`3107` " +"and :pep:`484` for more information)." +msgstr "" +":ref:`函数注解 ` 是可选的用户自定义函数类型的元数据完整信息(详见 :pep:`3107` 和 :pep:`484` )。" + +#: ../../tutorial/controlflow.rst:858 +msgid "" +":term:`Annotations ` are stored in the " +":attr:`__annotations__` attribute of the function as a dictionary and have " +"no effect on any other part of the function. Parameter annotations are " +"defined by a colon after the parameter name, followed by an expression " +"evaluating to the value of the annotation. Return annotations are defined " +"by a literal ``->``, followed by an expression, between the parameter list " +"and the colon denoting the end of the :keyword:`def` statement. The " +"following example has a required argument, an optional argument, and the " +"return value annotated::" +msgstr "" +":term:`标注 ` 以字典的形式存放在函数的 :attr:`__annotations__` " +"属性中,并且不会影响函数的任何其他部分。 形参标注的定义方式是在形参名后加冒号,后面跟一个表达式,该表达式会被求值为标注的值。 " +"返回值标注的定义方式是加组合符号 ``->``,后面跟一个表达式,该标注位于形参列表和表示 :keyword:`def` 语句结束的冒号之间。 " +"下面的示例有一个必须的参数,一个可选的关键字参数以及返回值都带有相应的标注::" + +#: ../../tutorial/controlflow.rst:880 +msgid "Intermezzo: Coding Style" +msgstr "小插曲:编码风格" + +#: ../../tutorial/controlflow.rst:885 +msgid "" +"Now that you are about to write longer, more complex pieces of Python, it is" +" a good time to talk about *coding style*. Most languages can be written " +"(or more concise, *formatted*) in different styles; some are more readable " +"than others. Making it easy for others to read your code is always a good " +"idea, and adopting a nice coding style helps tremendously for that." +msgstr "" +"现在你将要写更长,更复杂的 Python 代码,是时候讨论一下 *代码风格* 了。 " +"大多数语言都能以不同的风格被编写(或更准确地说,被格式化);有些比其他的更具有可读性。 " +"能让其他人轻松阅读你的代码总是一个好主意,采用一种好的编码风格对此有很大帮助。" + +#: ../../tutorial/controlflow.rst:891 +msgid "" +"For Python, :pep:`8` has emerged as the style guide that most projects " +"adhere to; it promotes a very readable and eye-pleasing coding style. Every" +" Python developer should read it at some point; here are the most important " +"points extracted for you:" +msgstr "" +"Python 项目大多都遵循 :pep:`8` 的风格指南;它推行的编码风格易于阅读、赏心悦目。Python " +"开发者均应抽时间悉心研读;以下是该提案中的核心要点:" + +#: ../../tutorial/controlflow.rst:896 +msgid "Use 4-space indentation, and no tabs." +msgstr "缩进,用 4 个空格,不要用制表符。" + +#: ../../tutorial/controlflow.rst:898 +msgid "" +"4 spaces are a good compromise between small indentation (allows greater " +"nesting depth) and large indentation (easier to read). Tabs introduce " +"confusion, and are best left out." +msgstr "4 个空格是小缩进(更深嵌套)和大缩进(更易阅读)之间的折中方案。制表符会引起混乱,最好别用。" + +#: ../../tutorial/controlflow.rst:902 +msgid "Wrap lines so that they don't exceed 79 characters." +msgstr "换行,一行不超过 79 个字符。" + +#: ../../tutorial/controlflow.rst:904 +msgid "" +"This helps users with small displays and makes it possible to have several " +"code files side-by-side on larger displays." +msgstr "这样换行的小屏阅读体验更好,还便于在大屏显示器上并排阅读多个代码文件。" + +#: ../../tutorial/controlflow.rst:907 +msgid "" +"Use blank lines to separate functions and classes, and larger blocks of code" +" inside functions." +msgstr "用空行分隔函数和类,及函数内较大的代码块。" + +#: ../../tutorial/controlflow.rst:910 +msgid "When possible, put comments on a line of their own." +msgstr "最好把注释放到单独一行。" + +#: ../../tutorial/controlflow.rst:912 +msgid "Use docstrings." +msgstr "使用文档字符串。" + +#: ../../tutorial/controlflow.rst:914 +msgid "" +"Use spaces around operators and after commas, but not directly inside " +"bracketing constructs: ``a = f(1, 2) + g(3, 4)``." +msgstr "运算符前后、逗号后要用空格,但不要直接在括号内使用: ``a = f(1, 2) + g(3, 4)``。" + +#: ../../tutorial/controlflow.rst:917 +msgid "" +"Name your classes and functions consistently; the convention is to use " +"``UpperCamelCase`` for classes and ``lowercase_with_underscores`` for " +"functions and methods. Always use ``self`` as the name for the first method" +" argument (see :ref:`tut-firstclasses` for more on classes and methods)." +msgstr "" +"类和函数的命名要一致;按惯例,命名类用 ``UpperCamelCase``,命名函数与方法用 " +"``lowercase_with_underscores``。命名方法中第一个参数总是用 ``self`` (类和方法详见 :ref:`tut-" +"firstclasses`)。" + +#: ../../tutorial/controlflow.rst:922 +msgid "" +"Don't use fancy encodings if your code is meant to be used in international " +"environments. Python's default, UTF-8, or even plain ASCII work best in any" +" case." +msgstr "编写用于国际多语环境的代码时,不要用生僻的编码。Python 默认的 UTF-8 或纯 ASCII 可以胜任各种情况。" + +#: ../../tutorial/controlflow.rst:926 +msgid "" +"Likewise, don't use non-ASCII characters in identifiers if there is only the" +" slightest chance people speaking a different language will read or maintain" +" the code." +msgstr "同理,就算多语阅读、维护代码的可能再小,也不要在标识符中使用非 ASCII 字符。" + +#: ../../tutorial/controlflow.rst:932 +msgid "Footnotes" +msgstr "备注" + +#: ../../tutorial/controlflow.rst:933 +msgid "" +"Actually, *call by object reference* would be a better description, since if" +" a mutable object is passed, the caller will see any changes the callee " +"makes to it (items inserted into a list)." +msgstr "实际上,*对象引用调用* 这种说法更好,因为,传递的是可变对象时,调用者能发现被调者做出的任何更改(插入列表的元素)。" diff --git a/tutorial/datastructures.po b/tutorial/datastructures.po new file mode 100644 index 000000000..020f01674 --- /dev/null +++ b/tutorial/datastructures.po @@ -0,0 +1,669 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) 2001-2022, Python Software Foundation +# This file is distributed under the same license as the Python package. +# FIRST AUTHOR , YEAR. +# +# Translators: +# Jerry Chen , 2017 +# xiao xu , 2018 +# Fred , 2018 +# Woko , 2018 +# df2dc1c92e792f7ae8417c51df43db8f_594d92a <0f49be28017426edb1db1a2ab6e67088_717605>, 2018 +# Freesand Leo , 2019 +# jaystone776 <1732865113@qq.com>, 2021 +# +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: Python 3.9\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2022-11-04 14:34+0000\n" +"PO-Revision-Date: 2017-02-16 23:40+0000\n" +"Last-Translator: jaystone776 <1732865113@qq.com>, 2021\n" +"Language-Team: Chinese (China) (https://www.transifex.com/python-doc/teams/5390/zh_CN/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: zh_CN\n" +"Plural-Forms: nplurals=1; plural=0;\n" + +#: ../../tutorial/datastructures.rst:5 +msgid "Data Structures" +msgstr "数据结构" + +#: ../../tutorial/datastructures.rst:7 +msgid "" +"This chapter describes some things you've learned about already in more " +"detail, and adds some new things as well." +msgstr "本章深入讲解之前学过的一些内容,同时,还增加了新的知识点。" + +#: ../../tutorial/datastructures.rst:13 +msgid "More on Lists" +msgstr "列表详解" + +#: ../../tutorial/datastructures.rst:15 +msgid "" +"The list data type has some more methods. Here are all of the methods of " +"list objects:" +msgstr "列表数据类型支持很多方法,列表对象的所有方法所示如下:" + +#: ../../tutorial/datastructures.rst:22 +msgid "" +"Add an item to the end of the list. Equivalent to ``a[len(a):] = [x]``." +msgstr "在列表末尾添加一个元素,相当于 ``a[len(a):] = [x]`` 。" + +#: ../../tutorial/datastructures.rst:28 +msgid "" +"Extend the list by appending all the items from the iterable. Equivalent to" +" ``a[len(a):] = iterable``." +msgstr "用可迭代对象的元素扩展列表。相当于 ``a[len(a):] = iterable`` 。" + +#: ../../tutorial/datastructures.rst:35 +msgid "" +"Insert an item at a given position. The first argument is the index of the " +"element before which to insert, so ``a.insert(0, x)`` inserts at the front " +"of the list, and ``a.insert(len(a), x)`` is equivalent to ``a.append(x)``." +msgstr "" +"在指定位置插入元素。第一个参数是插入元素的索引,因此,``a.insert(0, x)`` 在列表开头插入元素, ``a.insert(len(a), " +"x)`` 等同于 ``a.append(x)`` 。" + +#: ../../tutorial/datastructures.rst:43 +msgid "" +"Remove the first item from the list whose value is equal to *x*. It raises " +"a :exc:`ValueError` if there is no such item." +msgstr "从列表中删除第一个值为 *x* 的元素。未找到指定元素时,触发 :exc:`ValueError` 异常。" + +#: ../../tutorial/datastructures.rst:50 +msgid "" +"Remove the item at the given position in the list, and return it. If no " +"index is specified, ``a.pop()`` removes and returns the last item in the " +"list. (The square brackets around the *i* in the method signature denote " +"that the parameter is optional, not that you should type square brackets at " +"that position. You will see this notation frequently in the Python Library " +"Reference.)" +msgstr "" +"删除列表中指定位置的元素,并返回被删除的元素。未指定位置时,``a.pop()`` 删除并返回列表的最后一个元素。(方法签名中 *i* " +"两边的方括号表示该参数是可选的,不是要求输入方括号。这种表示法常见于 Python 参考库)。" + +#: ../../tutorial/datastructures.rst:60 +msgid "Remove all items from the list. Equivalent to ``del a[:]``." +msgstr "删除列表里的所有元素,相当于 ``del a[:]`` 。" + +#: ../../tutorial/datastructures.rst:66 +msgid "" +"Return zero-based index in the list of the first item whose value is equal " +"to *x*. Raises a :exc:`ValueError` if there is no such item." +msgstr "返回列表中第一个值为 *x* 的元素的零基索引。未找到指定元素时,触发 :exc:`ValueError` 异常。" + +#: ../../tutorial/datastructures.rst:69 +msgid "" +"The optional arguments *start* and *end* are interpreted as in the slice " +"notation and are used to limit the search to a particular subsequence of the" +" list. The returned index is computed relative to the beginning of the full" +" sequence rather than the *start* argument." +msgstr "" +"可选参数 *start* 和 *end* 是切片符号,用于将搜索限制为列表的特定子序列。返回的索引是相对于整个序列的开始计算的,而不是 *start* " +"参数。" + +#: ../../tutorial/datastructures.rst:78 +msgid "Return the number of times *x* appears in the list." +msgstr "返回列表中元素 *x* 出现的次数。" + +#: ../../tutorial/datastructures.rst:84 +msgid "" +"Sort the items of the list in place (the arguments can be used for sort " +"customization, see :func:`sorted` for their explanation)." +msgstr "就地排序列表中的元素(要了解自定义排序参数,详见 :func:`sorted`)。" + +#: ../../tutorial/datastructures.rst:91 +msgid "Reverse the elements of the list in place." +msgstr "反转列表中的元素。" + +#: ../../tutorial/datastructures.rst:97 +msgid "Return a shallow copy of the list. Equivalent to ``a[:]``." +msgstr "返回列表的浅拷贝。相当于 ``a[:]`` 。" + +#: ../../tutorial/datastructures.rst:100 +msgid "An example that uses most of the list methods::" +msgstr "列表方法示例:" + +#: ../../tutorial/datastructures.rst:123 +msgid "" +"You might have noticed that methods like ``insert``, ``remove`` or ``sort`` " +"that only modify the list have no return value printed -- they return the " +"default ``None``. [1]_ This is a design principle for all mutable data " +"structures in Python." +msgstr "" +"``insert``、``remove``、``sort`` 等方法只修改列表,不输出返回值——返回的默认值为 ``None`` 。[1]_ 这是所有 " +"Python 可变数据结构的设计原则。" + +#: ../../tutorial/datastructures.rst:128 +msgid "" +"Another thing you might notice is that not all data can be sorted or " +"compared. For instance, ``[None, 'hello', 10]`` doesn't sort because " +"integers can't be compared to strings and *None* can't be compared to other " +"types. Also, there are some types that don't have a defined ordering " +"relation. For example, ``3+4j < 5+7j`` isn't a valid comparison." +msgstr "" +"还有,不是所有数据都可以排序或比较。例如,``[None, 'hello', 10]`` 就不可排序,因为整数不能与字符串对比,而 *None* " +"不能与其他类型对比。有些类型根本就没有定义顺序关系,例如,``3+4j < 5+7j`` 这种对比操作就是无效的。" + +#: ../../tutorial/datastructures.rst:139 +msgid "Using Lists as Stacks" +msgstr "用列表实现堆栈" + +#: ../../tutorial/datastructures.rst:144 +msgid "" +"The list methods make it very easy to use a list as a stack, where the last " +"element added is the first element retrieved (\"last-in, first-out\"). To " +"add an item to the top of the stack, use :meth:`append`. To retrieve an " +"item from the top of the stack, use :meth:`pop` without an explicit index. " +"For example::" +msgstr "" +"使用列表方法实现堆栈非常容易,最后插入的最先取出(“后进先出”)。把元素添加到堆栈的顶端,使用 :meth:`append` 。从堆栈顶部取出元素,使用" +" :meth:`pop` ,不用指定索引。例如:" + +#: ../../tutorial/datastructures.rst:169 +msgid "Using Lists as Queues" +msgstr "用列表实现队列" + +#: ../../tutorial/datastructures.rst:173 +msgid "" +"It is also possible to use a list as a queue, where the first element added " +"is the first element retrieved (\"first-in, first-out\"); however, lists are" +" not efficient for this purpose. While appends and pops from the end of " +"list are fast, doing inserts or pops from the beginning of a list is slow " +"(because all of the other elements have to be shifted by one)." +msgstr "" +"列表也可以用作队列,最先加入的元素,最先取出(“先进先出”);然而,列表作为队列的效率很低。因为,在列表末尾添加和删除元素非常快,但在列表开头插入或移除元素却很慢(因为所有其他元素都必须移动一位)。" + +#: ../../tutorial/datastructures.rst:179 +msgid "" +"To implement a queue, use :class:`collections.deque` which was designed to " +"have fast appends and pops from both ends. For example::" +msgstr "实现队列最好用 :class:`collections.deque`,可以快速从两端添加或删除元素。例如:" + +#: ../../tutorial/datastructures.rst:197 +msgid "List Comprehensions" +msgstr "列表推导式" + +#: ../../tutorial/datastructures.rst:199 +msgid "" +"List comprehensions provide a concise way to create lists. Common " +"applications are to make new lists where each element is the result of some " +"operations applied to each member of another sequence or iterable, or to " +"create a subsequence of those elements that satisfy a certain condition." +msgstr "" +"列表推导式创建列表的方式更简洁。常见的用法为,对序列或可迭代对象中的每个元素应用某种操作,用生成的结果创建新的列表;或用满足特定条件的元素创建子序列。" + +#: ../../tutorial/datastructures.rst:204 +msgid "For example, assume we want to create a list of squares, like::" +msgstr "例如,创建平方值的列表:" + +#: ../../tutorial/datastructures.rst:213 +msgid "" +"Note that this creates (or overwrites) a variable named ``x`` that still " +"exists after the loop completes. We can calculate the list of squares " +"without any side effects using::" +msgstr "注意,这段代码创建(或覆盖)变量 ``x``,该变量在循环结束后仍然存在。下述方法可以无副作用地计算平方列表:" + +#: ../../tutorial/datastructures.rst:219 +msgid "or, equivalently::" +msgstr "或等价于:" + +#: ../../tutorial/datastructures.rst:223 +msgid "which is more concise and readable." +msgstr "上面这种写法更简洁、易读。" + +#: ../../tutorial/datastructures.rst:225 +msgid "" +"A list comprehension consists of brackets containing an expression followed " +"by a :keyword:`!for` clause, then zero or more :keyword:`!for` or " +":keyword:`!if` clauses. The result will be a new list resulting from " +"evaluating the expression in the context of the :keyword:`!for` and " +":keyword:`!if` clauses which follow it. For example, this listcomp combines " +"the elements of two lists if they are not equal::" +msgstr "" +"列表推导式的方括号内包含以下内容:一个表达式,后面为一个 :keyword:`!for` 子句,然后,是零个或多个 :keyword:`!for` 或 " +":keyword:`!if` 子句。结果是由表达式依据 :keyword:`!for` 和 :keyword:`!if` 子句求值计算而得出一个新列表。" +" 举例来说,以下列表推导式将两个列表中不相等的元素组合起来:" + +#: ../../tutorial/datastructures.rst:235 +msgid "and it's equivalent to::" +msgstr "等价于:" + +#: ../../tutorial/datastructures.rst:246 +msgid "" +"Note how the order of the :keyword:`for` and :keyword:`if` statements is the" +" same in both these snippets." +msgstr "注意,上面两段代码中,:keyword:`for` 和 :keyword:`if` 的顺序相同。" + +#: ../../tutorial/datastructures.rst:249 +msgid "" +"If the expression is a tuple (e.g. the ``(x, y)`` in the previous example), " +"it must be parenthesized. ::" +msgstr "表达式是元组(例如上例的 ``(x, y)``)时,必须加上括号:" + +#: ../../tutorial/datastructures.rst:280 +msgid "" +"List comprehensions can contain complex expressions and nested functions::" +msgstr "列表推导式可以使用复杂的表达式和嵌套函数:" + +#: ../../tutorial/datastructures.rst:287 +msgid "Nested List Comprehensions" +msgstr "嵌套的列表推导式" + +#: ../../tutorial/datastructures.rst:289 +msgid "" +"The initial expression in a list comprehension can be any arbitrary " +"expression, including another list comprehension." +msgstr "列表推导式中的初始表达式可以是任何表达式,甚至可以是另一个列表推导式。" + +#: ../../tutorial/datastructures.rst:292 +msgid "" +"Consider the following example of a 3x4 matrix implemented as a list of 3 " +"lists of length 4::" +msgstr "下面这个 3x4 矩阵,由 3 个长度为 4 的列表组成:" + +#: ../../tutorial/datastructures.rst:301 +msgid "The following list comprehension will transpose rows and columns::" +msgstr "下面的列表推导式可以转置行列:" + +#: ../../tutorial/datastructures.rst:306 +msgid "" +"As we saw in the previous section, the nested listcomp is evaluated in the " +"context of the :keyword:`for` that follows it, so this example is equivalent" +" to::" +msgstr "如上节所示,嵌套的列表推导式基于其后的 :keyword:`for` 求值,所以这个例子等价于:" + +#: ../../tutorial/datastructures.rst:317 +msgid "which, in turn, is the same as::" +msgstr "反过来说,也等价于:" + +#: ../../tutorial/datastructures.rst:330 +msgid "" +"In the real world, you should prefer built-in functions to complex flow " +"statements. The :func:`zip` function would do a great job for this use " +"case::" +msgstr "实际应用中,最好用内置函数替代复杂的流程语句。此时,:func:`zip` 函数更好用:" + +#: ../../tutorial/datastructures.rst:336 +msgid "" +"See :ref:`tut-unpacking-arguments` for details on the asterisk in this line." +msgstr "关于本行中星号的详细说明,参见 :ref:`tut-unpacking-arguments`。" + +#: ../../tutorial/datastructures.rst:341 +msgid "The :keyword:`!del` statement" +msgstr ":keyword:`!del` 语句" + +#: ../../tutorial/datastructures.rst:343 +msgid "" +"There is a way to remove an item from a list given its index instead of its " +"value: the :keyword:`del` statement. This differs from the :meth:`pop` " +"method which returns a value. The :keyword:`!del` statement can also be " +"used to remove slices from a list or clear the entire list (which we did " +"earlier by assignment of an empty list to the slice). For example::" +msgstr "" +":keyword:`del` 语句按索引,而不是值从列表中移除元素。与返回值的 :meth:`pop` 方法不同, :keyword:`!del` " +"语句也可以从列表中移除切片,或清空整个列表(之前是将空列表赋值给切片)。 例如:" + +#: ../../tutorial/datastructures.rst:360 +msgid ":keyword:`del` can also be used to delete entire variables::" +msgstr ":keyword:`del` 也可以用来删除整个变量:" + +#: ../../tutorial/datastructures.rst:364 +msgid "" +"Referencing the name ``a`` hereafter is an error (at least until another " +"value is assigned to it). We'll find other uses for :keyword:`del` later." +msgstr "此后,再引用 ``a`` 就会报错(直到为它赋与另一个值)。后文会介绍 :keyword:`del` 的其他用法。" + +#: ../../tutorial/datastructures.rst:371 +msgid "Tuples and Sequences" +msgstr "元组和序列" + +#: ../../tutorial/datastructures.rst:373 +msgid "" +"We saw that lists and strings have many common properties, such as indexing " +"and slicing operations. They are two examples of *sequence* data types (see" +" :ref:`typesseq`). Since Python is an evolving language, other sequence " +"data types may be added. There is also another standard sequence data type:" +" the *tuple*." +msgstr "" +"列表和字符串有很多共性,例如,索引和切片操作。这两种数据类型是 *序列* (参见 :ref:`typesseq`)。随着 Python " +"语言的发展,其他的序列类型也被加入其中。本节介绍另一种标准序列类型:*元组*。" + +#: ../../tutorial/datastructures.rst:379 +msgid "" +"A tuple consists of a number of values separated by commas, for instance::" +msgstr "元组由多个用逗号隔开的值组成,例如:" + +#: ../../tutorial/datastructures.rst:401 +msgid "" +"As you see, on output tuples are always enclosed in parentheses, so that " +"nested tuples are interpreted correctly; they may be input with or without " +"surrounding parentheses, although often parentheses are necessary anyway (if" +" the tuple is part of a larger expression). It is not possible to assign to" +" the individual items of a tuple, however it is possible to create tuples " +"which contain mutable objects, such as lists." +msgstr "" +"输出时,元组都要由圆括号标注,这样才能正确地解释嵌套元组。输入时,圆括号可有可无,不过经常是必须的(如果元组是更大的表达式的一部分)。不允许为元组中的单个元素赋值,当然,可以创建含列表等可变对象的元组。" + +#: ../../tutorial/datastructures.rst:408 +msgid "" +"Though tuples may seem similar to lists, they are often used in different " +"situations and for different purposes. Tuples are :term:`immutable`, and " +"usually contain a heterogeneous sequence of elements that are accessed via " +"unpacking (see later in this section) or indexing (or even by attribute in " +"the case of :func:`namedtuples `). Lists are " +":term:`mutable`, and their elements are usually homogeneous and are accessed" +" by iterating over the list." +msgstr "" +"虽然,元组与列表很像,但使用场景不同,用途也不同。元组是 :term:`immutable` " +"(不可变的),一般可包含异质元素序列,通过解包(见本节下文)或索引访问(如果是 :func:`namedtuples " +"`,可以属性访问)。列表是 :term:`mutable` " +"(可变的),列表元素一般为同质类型,可迭代访问。" + +#: ../../tutorial/datastructures.rst:416 +msgid "" +"A special problem is the construction of tuples containing 0 or 1 items: the" +" syntax has some extra quirks to accommodate these. Empty tuples are " +"constructed by an empty pair of parentheses; a tuple with one item is " +"constructed by following a value with a comma (it is not sufficient to " +"enclose a single value in parentheses). Ugly, but effective. For example::" +msgstr "" +"构造 0 个或 1 " +"个元素的元组比较特殊:为了适应这种情况,对句法有一些额外的改变。用一对空圆括号就可以创建空元组;只有一个元素的元组可以通过在这个元素后添加逗号来构建(圆括号里只有一个值的话不够明确)。丑陋,但是有效。例如:" + +#: ../../tutorial/datastructures.rst:431 +msgid "" +"The statement ``t = 12345, 54321, 'hello!'`` is an example of *tuple " +"packing*: the values ``12345``, ``54321`` and ``'hello!'`` are packed " +"together in a tuple. The reverse operation is also possible::" +msgstr "" +"语句 ``t = 12345, 54321, 'hello!'`` 是 *元组打包* 的例子:值 ``12345``, ``54321`` 和 " +"``'hello!'`` 一起被打包进元组。逆操作也可以:" + +#: ../../tutorial/datastructures.rst:437 +msgid "" +"This is called, appropriately enough, *sequence unpacking* and works for any" +" sequence on the right-hand side. Sequence unpacking requires that there " +"are as many variables on the left side of the equals sign as there are " +"elements in the sequence. Note that multiple assignment is really just a " +"combination of tuple packing and sequence unpacking." +msgstr "" +"称之为 *序列解包* " +"也是妥妥的,适用于右侧的任何序列。序列解包时,左侧变量与右侧序列元素的数量应相等。注意,多重赋值其实只是元组打包和序列解包的组合。" + +#: ../../tutorial/datastructures.rst:447 +msgid "Sets" +msgstr "集合" + +#: ../../tutorial/datastructures.rst:449 +msgid "" +"Python also includes a data type for *sets*. A set is an unordered " +"collection with no duplicate elements. Basic uses include membership " +"testing and eliminating duplicate entries. Set objects also support " +"mathematical operations like union, intersection, difference, and symmetric " +"difference." +msgstr "" +"Python 还支持 *集合* " +"这种数据类型。集合是由不重复元素组成的无序容器。基本用法包括成员检测、消除重复元素。集合对象支持合集、交集、差集、对称差分等数学运算。" + +#: ../../tutorial/datastructures.rst:454 +msgid "" +"Curly braces or the :func:`set` function can be used to create sets. Note: " +"to create an empty set you have to use ``set()``, not ``{}``; the latter " +"creates an empty dictionary, a data structure that we discuss in the next " +"section." +msgstr "" +"创建集合用花括号或 :func:`set` 函数。注意,创建空集合只能用 ``set()``,不能用 ``{}``,``{}`` " +"创建的是空字典,下一小节介绍数据结构:字典。" + +#: ../../tutorial/datastructures.rst:458 +msgid "Here is a brief demonstration::" +msgstr "以下是一些简单的示例:" + +#: ../../tutorial/datastructures.rst:483 +msgid "" +"Similarly to :ref:`list comprehensions `, set comprehensions " +"are also supported::" +msgstr "与 :ref:`列表推导式 ` 类似,集合也支持推导式:" + +#: ../../tutorial/datastructures.rst:494 +msgid "Dictionaries" +msgstr "字典" + +#: ../../tutorial/datastructures.rst:496 +msgid "" +"Another useful data type built into Python is the *dictionary* (see " +":ref:`typesmapping`). Dictionaries are sometimes found in other languages as" +" \"associative memories\" or \"associative arrays\". Unlike sequences, " +"which are indexed by a range of numbers, dictionaries are indexed by *keys*," +" which can be any immutable type; strings and numbers can always be keys. " +"Tuples can be used as keys if they contain only strings, numbers, or tuples;" +" if a tuple contains any mutable object either directly or indirectly, it " +"cannot be used as a key. You can't use lists as keys, since lists can be " +"modified in place using index assignments, slice assignments, or methods " +"like :meth:`append` and :meth:`extend`." +msgstr "" +"*字典* (参见 :ref:`typesmapping`) 也是一种常用的 Python 內置数据类型。其他语言可能把字典称为 *联合内存* 或 " +"*联合数组*。与以连续整数为索引的序列不同,字典以 *关键字* " +"为索引,关键字通常是字符串或数字,也可以是其他任意不可变类型。只包含字符串、数字、元组的元组,也可以用作关键字。但如果元组直接或间接地包含了可变对象,就不能用作关键字。列表不能当关键字,因为列表可以用索引、切片、:meth:`append`" +" 、:meth:`extend` 等方法修改。" + +#: ../../tutorial/datastructures.rst:507 +msgid "" +"It is best to think of a dictionary as a set of *key: value* pairs, with the" +" requirement that the keys are unique (within one dictionary). A pair of " +"braces creates an empty dictionary: ``{}``. Placing a comma-separated list " +"of key:value pairs within the braces adds initial key:value pairs to the " +"dictionary; this is also the way dictionaries are written on output." +msgstr "" +"可以把字典理解为 *键值对* 的集合,但字典的键必须是唯一的。花括号 ``{}`` " +"用于创建空字典。另一种初始化字典的方式是,在花括号里输入逗号分隔的键值对,这也是字典的输出方式。" + +#: ../../tutorial/datastructures.rst:513 +msgid "" +"The main operations on a dictionary are storing a value with some key and " +"extracting the value given the key. It is also possible to delete a " +"key:value pair with ``del``. If you store using a key that is already in " +"use, the old value associated with that key is forgotten. It is an error to" +" extract a value using a non-existent key." +msgstr "" +"字典的主要用途是通过关键字存储、提取值。用 ``del`` " +"可以删除键值对。用已存在的关键字存储值,与该关键字关联的旧值会被取代。通过不存在的键提取值,则会报错。" + +#: ../../tutorial/datastructures.rst:519 +msgid "" +"Performing ``list(d)`` on a dictionary returns a list of all the keys used " +"in the dictionary, in insertion order (if you want it sorted, just use " +"``sorted(d)`` instead). To check whether a single key is in the dictionary, " +"use the :keyword:`in` keyword." +msgstr "" +"对字典执行 ``list(d)`` 操作,返回该字典中所有键的列表,按插入次序排列(如需排序,请使用 " +"``sorted(d)``)。检查字典里是否存在某个键,使用关键字 :keyword:`in`。" + +#: ../../tutorial/datastructures.rst:524 +msgid "Here is a small example using a dictionary::" +msgstr "以下是一些字典的简单示例:" + +#: ../../tutorial/datastructures.rst:545 +msgid "" +"The :func:`dict` constructor builds dictionaries directly from sequences of " +"key-value pairs::" +msgstr ":func:`dict` 构造函数可以直接用键值对序列创建字典:" + +#: ../../tutorial/datastructures.rst:551 +msgid "" +"In addition, dict comprehensions can be used to create dictionaries from " +"arbitrary key and value expressions::" +msgstr "字典推导式可以用任意键值表达式创建字典:" + +#: ../../tutorial/datastructures.rst:557 +msgid "" +"When the keys are simple strings, it is sometimes easier to specify pairs " +"using keyword arguments::" +msgstr "关键字是比较简单的字符串时,直接用关键字参数指定键值对更便捷:" + +#: ../../tutorial/datastructures.rst:567 +msgid "Looping Techniques" +msgstr "循环的技巧" + +#: ../../tutorial/datastructures.rst:569 +msgid "" +"When looping through dictionaries, the key and corresponding value can be " +"retrieved at the same time using the :meth:`items` method. ::" +msgstr "在字典中循环时,用 :meth:`items` 方法可同时取出键和对应的值:" + +#: ../../tutorial/datastructures.rst:579 +msgid "" +"When looping through a sequence, the position index and corresponding value " +"can be retrieved at the same time using the :func:`enumerate` function. ::" +msgstr "在序列中循环时,用 :func:`enumerate` 函数可以同时取出位置索引和对应的值:" + +#: ../../tutorial/datastructures.rst:589 +msgid "" +"To loop over two or more sequences at the same time, the entries can be " +"paired with the :func:`zip` function. ::" +msgstr "同时循环两个或多个序列时,用 :func:`zip` 函数可以将其内的元素一一匹配:" + +#: ../../tutorial/datastructures.rst:601 +msgid "" +"To loop over a sequence in reverse, first specify the sequence in a forward " +"direction and then call the :func:`reversed` function. ::" +msgstr "逆向循环序列时,先正向定位序列,然后调用 :func:`reversed` 函数:" + +#: ../../tutorial/datastructures.rst:613 +msgid "" +"To loop over a sequence in sorted order, use the :func:`sorted` function " +"which returns a new sorted list while leaving the source unaltered. ::" +msgstr "按指定顺序循环序列,可以用 :func:`sorted` 函数,在不改动原序列的基础上,返回一个重新的序列:" + +#: ../../tutorial/datastructures.rst:627 +msgid "" +"Using :func:`set` on a sequence eliminates duplicate elements. The use of " +":func:`sorted` in combination with :func:`set` over a sequence is an " +"idiomatic way to loop over unique elements of the sequence in sorted order. " +"::" +msgstr "" +"使用 :func:`set` 去除序列中的重复元素。使用 :func:`sorted` 加 :func:`set` " +"则按排序后的顺序,循环遍历序列中的唯一元素:" + +#: ../../tutorial/datastructures.rst:640 +msgid "" +"It is sometimes tempting to change a list while you are looping over it; " +"however, it is often simpler and safer to create a new list instead. ::" +msgstr "一般来说,在循环中修改列表的内容时,创建新列表比较简单,且安全:" + +#: ../../tutorial/datastructures.rst:657 +msgid "More on Conditions" +msgstr "深入条件控制" + +#: ../../tutorial/datastructures.rst:659 +msgid "" +"The conditions used in ``while`` and ``if`` statements can contain any " +"operators, not just comparisons." +msgstr "``while`` 和 ``if`` 条件句不只可以进行比较,还可以使用任意运算符。" + +#: ../../tutorial/datastructures.rst:662 +msgid "" +"The comparison operators ``in`` and ``not in`` check whether a value occurs " +"(does not occur) in a sequence. The operators ``is`` and ``is not`` compare" +" whether two objects are really the same object. All comparison operators " +"have the same priority, which is lower than that of all numerical operators." +msgstr "" +"比较运算符 ``in`` 和 ``not in`` 校验序列里是否存在某个值。运算符 ``is`` 和 ``is not`` " +"比较两个对象是否为同一个对象。所有比较运算符的优先级都一样,且低于数值运算符。" + +#: ../../tutorial/datastructures.rst:667 +msgid "" +"Comparisons can be chained. For example, ``a < b == c`` tests whether ``a``" +" is less than ``b`` and moreover ``b`` equals ``c``." +msgstr "比较操作支持链式操作。例如,``a < b == c`` 校验 ``a`` 是否小于 ``b``,且 ``b`` 是否等于 ``c``。" + +#: ../../tutorial/datastructures.rst:670 +msgid "" +"Comparisons may be combined using the Boolean operators ``and`` and ``or``, " +"and the outcome of a comparison (or of any other Boolean expression) may be " +"negated with ``not``. These have lower priorities than comparison " +"operators; between them, ``not`` has the highest priority and ``or`` the " +"lowest, so that ``A and not B or C`` is equivalent to ``(A and (not B)) or " +"C``. As always, parentheses can be used to express the desired composition." +msgstr "" +"比较操作可以用布尔运算符 ``and`` 和 ``or`` 组合,并且,比较操作(或其他布尔运算)的结果都可以用 ``not`` " +"取反。这些操作符的优先级低于比较操作符;``not`` 的优先级最高, ``or`` 的优先级最低,因此,``A and not B or C`` " +"等价于 ``(A and (not B)) or C``。与其他运算符操作一样,此处也可以用圆括号表示想要的组合。" + +#: ../../tutorial/datastructures.rst:677 +msgid "" +"The Boolean operators ``and`` and ``or`` are so-called *short-circuit* " +"operators: their arguments are evaluated from left to right, and evaluation " +"stops as soon as the outcome is determined. For example, if ``A`` and ``C``" +" are true but ``B`` is false, ``A and B and C`` does not evaluate the " +"expression ``C``. When used as a general value and not as a Boolean, the " +"return value of a short-circuit operator is the last evaluated argument." +msgstr "" +"布尔运算符 ``and`` 和 ``or`` 也称为 *短路* 运算符:其参数从左至右解析,一旦可以确定结果,解析就会停止。例如,如果 ``A`` 和 " +"``C`` 为真,``B`` 为假,那么 ``A and B and C`` 不会解析 " +"``C``。用作普通值而不是布尔值时,短路操作符返回的值通常是最后一个变量。" + +#: ../../tutorial/datastructures.rst:684 +msgid "" +"It is possible to assign the result of a comparison or other Boolean " +"expression to a variable. For example, ::" +msgstr "还可以把比较操作或逻辑表达式的结果赋值给变量,例如:" + +#: ../../tutorial/datastructures.rst:692 +msgid "" +"Note that in Python, unlike C, assignment inside expressions must be done " +"explicitly with the :ref:`walrus operator ` ``:=``. This avoids a common class of problems encountered " +"in C programs: typing ``=`` in an expression when ``==`` was intended." +msgstr "" +"注意,Python 与 C 不同,在表达式内部赋值必须显式使用 :ref:`海象运算符 ` ``:=``。 这避免了 C 程序中常见的问题:要在表达式中写 ``==`` 时,却写成了 ``=``。" + +#: ../../tutorial/datastructures.rst:702 +msgid "Comparing Sequences and Other Types" +msgstr "序列和其他类型的比较" + +#: ../../tutorial/datastructures.rst:703 +msgid "" +"Sequence objects typically may be compared to other objects with the same " +"sequence type. The comparison uses *lexicographical* ordering: first the " +"first two items are compared, and if they differ this determines the outcome" +" of the comparison; if they are equal, the next two items are compared, and " +"so on, until either sequence is exhausted. If two items to be compared are " +"themselves sequences of the same type, the lexicographical comparison is " +"carried out recursively. If all items of two sequences compare equal, the " +"sequences are considered equal. If one sequence is an initial sub-sequence " +"of the other, the shorter sequence is the smaller (lesser) one. " +"Lexicographical ordering for strings uses the Unicode code point number to " +"order individual characters. Some examples of comparisons between sequences " +"of the same type::" +msgstr "" +"序列对象可以与相同序列类型的其他对象比较。这种比较使用 *字典式* " +"顺序:首先,比较前两个对应元素,如果不相等,则可确定比较结果;如果相等,则比较之后的两个元素,以此类推,直到其中一个序列结束。如果要比较的两个元素本身是相同类型的序列,则递归地执行字典式顺序比较。如果两个序列中所有的对应元素都相等,则两个序列相等。如果一个序列是另一个的初始子序列,则较短的序列可被视为较小(较少)的序列。" +" 对于字符串来说,字典式顺序使用 Unicode 码位序号排序单个字符。下面列出了一些比较相同类型序列的例子:" + +#: ../../tutorial/datastructures.rst:723 +msgid "" +"Note that comparing objects of different types with ``<`` or ``>`` is legal " +"provided that the objects have appropriate comparison methods. For example," +" mixed numeric types are compared according to their numeric value, so 0 " +"equals 0.0, etc. Otherwise, rather than providing an arbitrary ordering, " +"the interpreter will raise a :exc:`TypeError` exception." +msgstr "" +"注意,对不同类型的对象来说,只要待比较的对象提供了合适的比较方法,就可以使用 ``<`` 和 ``>`` " +"进行比较。例如,混合数值类型通过数值进行比较,所以,0 等于 0.0,等等。否则,解释器不会随便给出一个对比结果,而是触发 " +":exc:`TypeError` 异常。" + +#: ../../tutorial/datastructures.rst:731 +msgid "Footnotes" +msgstr "脚注" + +#: ../../tutorial/datastructures.rst:732 +msgid "" +"Other languages may return the mutated object, which allows method chaining," +" such as ``d->insert(\"a\")->remove(\"b\")->sort();``." +msgstr "别的语言可能会返回可变对象,允许方法连续执行,例如,``d->insert(\"a\")->remove(\"b\")->sort();``。" diff --git a/tutorial/errors.po b/tutorial/errors.po new file mode 100644 index 000000000..3e95013b0 --- /dev/null +++ b/tutorial/errors.po @@ -0,0 +1,480 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) 2001-2023, Python Software Foundation +# This file is distributed under the same license as the Python package. +# FIRST AUTHOR , YEAR. +# +# Translators: +# ww song , 2018 +# Larry Wang , 2018 +# df2dc1c92e792f7ae8417c51df43db8f_594d92a <0f49be28017426edb1db1a2ab6e67088_717605>, 2018 +# jaystone776 <1732865113@qq.com>, 2021 +# Freesand Leo , 2022 +# Rafael Fontenelle , 2023 +# +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: Python 3.9\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2023-09-01 15:40+0000\n" +"PO-Revision-Date: 2017-02-16 23:40+0000\n" +"Last-Translator: Rafael Fontenelle , 2023\n" +"Language-Team: Chinese (China) (https://app.transifex.com/python-doc/teams/5390/zh_CN/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: zh_CN\n" +"Plural-Forms: nplurals=1; plural=0;\n" + +#: ../../tutorial/errors.rst:5 +msgid "Errors and Exceptions" +msgstr "错误和异常" + +#: ../../tutorial/errors.rst:7 +msgid "" +"Until now error messages haven't been more than mentioned, but if you have " +"tried out the examples you have probably seen some. There are (at least) " +"two distinguishable kinds of errors: *syntax errors* and *exceptions*." +msgstr "" +"至此,本教程还未深入介绍错误信息,但如果您尝试过本教程前文中的例子,应该已经看到过一些错误信息。错误可(至少)被分为两种:*语法错误* 和 *异常*。" + +#: ../../tutorial/errors.rst:15 +msgid "Syntax Errors" +msgstr "语法错误" + +#: ../../tutorial/errors.rst:17 +msgid "" +"Syntax errors, also known as parsing errors, are perhaps the most common " +"kind of complaint you get while you are still learning Python::" +msgstr "语法错误又称解析错误,是学习 Python 时最常见的错误:" + +#: ../../tutorial/errors.rst:26 +msgid "" +"The parser repeats the offending line and displays a little 'arrow' pointing" +" at the earliest point in the line where the error was detected. The error " +"is caused by (or at least detected at) the token *preceding* the arrow: in " +"the example, the error is detected at the function :func:`print`, since a " +"colon (``':'``) is missing before it. File name and line number are printed" +" so you know where to look in case the input came from a script." +msgstr "" +"解析器会复现出现句法错误的代码行,并用小“箭头”指向行里检测到的第一个错误。错误是由箭头 *上方* 的 token " +"触发的(至少是在这里检测出的):本例中,在 :func:`print` 函数中检测到错误,因为,在它前面缺少冒号(``':'``) " +"。错误信息还输出文件名与行号,在使用脚本文件时,就可以知道去哪里查错。" + +#: ../../tutorial/errors.rst:37 +msgid "Exceptions" +msgstr "异常" + +#: ../../tutorial/errors.rst:39 +msgid "" +"Even if a statement or expression is syntactically correct, it may cause an " +"error when an attempt is made to execute it. Errors detected during " +"execution are called *exceptions* and are not unconditionally fatal: you " +"will soon learn how to handle them in Python programs. Most exceptions are " +"not handled by programs, however, and result in error messages as shown " +"here::" +msgstr "" +"即使语句或表达式使用了正确的语法,执行时仍可能触发错误。执行时检测到的错误称为 *异常*,异常不一定导致严重的后果:很快我们就能学会如何处理 " +"Python 的异常。大多数异常不会被程序处理,而是显示下列错误信息:" + +#: ../../tutorial/errors.rst:58 +msgid "" +"The last line of the error message indicates what happened. Exceptions come " +"in different types, and the type is printed as part of the message: the " +"types in the example are :exc:`ZeroDivisionError`, :exc:`NameError` and " +":exc:`TypeError`. The string printed as the exception type is the name of " +"the built-in exception that occurred. This is true for all built-in " +"exceptions, but need not be true for user-defined exceptions (although it is" +" a useful convention). Standard exception names are built-in identifiers " +"(not reserved keywords)." +msgstr "" +"错误信息的最后一行说明程序遇到了什么类型的错误。异常有不同的类型,而类型名称会作为错误信息的一部分中打印出来:上述示例中的异常类型依次是::exc:`ZeroDivisionError`," +" :exc:`NameError` 和 " +":exc:`TypeError`。作为异常类型打印的字符串是发生的内置异常的名称。对于所有内置异常都是如此,但对于用户定义的异常则不一定如此(虽然这种规范很有用)。标准的异常类型是内置的标识符(不是保留关键字)。" + +#: ../../tutorial/errors.rst:66 +msgid "" +"The rest of the line provides detail based on the type of exception and what" +" caused it." +msgstr "此行其余部分根据异常类型,结合出错原因,说明错误细节。" + +#: ../../tutorial/errors.rst:69 +msgid "" +"The preceding part of the error message shows the context where the " +"exception occurred, in the form of a stack traceback. In general it contains" +" a stack traceback listing source lines; however, it will not display lines " +"read from standard input." +msgstr "错误信息开头用堆栈回溯形式展示发生异常的语境。一般会列出源代码行的堆栈回溯;但不会显示从标准输入读取的行。" + +#: ../../tutorial/errors.rst:74 +msgid "" +":ref:`bltin-exceptions` lists the built-in exceptions and their meanings." +msgstr ":ref:`bltin-exceptions` 列出了内置异常及其含义。" + +#: ../../tutorial/errors.rst:80 +msgid "Handling Exceptions" +msgstr "异常的处理" + +#: ../../tutorial/errors.rst:82 +msgid "" +"It is possible to write programs that handle selected exceptions. Look at " +"the following example, which asks the user for input until a valid integer " +"has been entered, but allows the user to interrupt the program (using " +":kbd:`Control-C` or whatever the operating system supports); note that a " +"user-generated interruption is signalled by raising the " +":exc:`KeyboardInterrupt` exception. ::" +msgstr "" +"可以编写程序处理选定的异常。下例会要求用户一直输入内容,直到输入有效的整数,但允许用户中断程序(使用 :kbd:`Control-C` " +"或操作系统支持的其他操作);注意,用户中断程序会触发 :exc:`KeyboardInterrupt` 异常。" + +#: ../../tutorial/errors.rst:96 +msgid "The :keyword:`try` statement works as follows." +msgstr ":keyword:`try` 语句的工作原理如下:" + +#: ../../tutorial/errors.rst:98 +msgid "" +"First, the *try clause* (the statement(s) between the :keyword:`try` and " +":keyword:`except` keywords) is executed." +msgstr "首先,执行 *try 子句* (:keyword:`try` 和 :keyword:`except` 关键字之间的(多行)语句)。" + +#: ../../tutorial/errors.rst:101 +msgid "" +"If no exception occurs, the *except clause* is skipped and execution of the " +":keyword:`try` statement is finished." +msgstr "如果没有触发异常,则跳过 *except 子句*,:keyword:`try` 语句执行完毕。" + +#: ../../tutorial/errors.rst:104 +msgid "" +"If an exception occurs during execution of the try clause, the rest of the " +"clause is skipped. Then if its type matches the exception named after the " +":keyword:`except` keyword, the except clause is executed, and then execution" +" continues after the :keyword:`try` statement." +msgstr "" +"如果执行 try 子句时发生了异常,则跳过该子句中剩下的部分。如果异常的类型与 :keyword:`except` 关键字后面的异常匹配,则执行 " +"except 子句,然后,继续执行 :keyword:`try` 语句之后的代码。" + +#: ../../tutorial/errors.rst:109 +msgid "" +"If an exception occurs which does not match the exception named in the " +"except clause, it is passed on to outer :keyword:`try` statements; if no " +"handler is found, it is an *unhandled exception* and execution stops with a " +"message as shown above." +msgstr "" +"如果发生的异常不是 except 子句中列示的异常,则将其传递到外部的 :keyword:`try` 语句中;如果没有找到处理程序,则它是一个 " +"*未处理异常*,语句执行将终止,并显示如上所示的消息。" + +#: ../../tutorial/errors.rst:114 +msgid "" +"A :keyword:`try` statement may have more than one except clause, to specify " +"handlers for different exceptions. At most one handler will be executed. " +"Handlers only handle exceptions that occur in the corresponding try clause, " +"not in other handlers of the same :keyword:`!try` statement. An except " +"clause may name multiple exceptions as a parenthesized tuple, for example::" +msgstr "" +":keyword:`try` 语句可以有多个 except 子句,可为不同异常指定相应的处理程序。但最多只会执行一个处理程序。处理程序只处理对应的 " +"try 子句中发生的异常,而不处理同一 :keyword:`!try` 语句内其他处理程序中的异常。except 子句可以用元组命名多个异常,例如:" + +#: ../../tutorial/errors.rst:123 +msgid "" +"A class in an :keyword:`except` clause is compatible with an exception if it" +" is the same class or a base class thereof (but not the other way around ---" +" an except clause listing a derived class is not compatible with a base " +"class). For example, the following code will print B, C, D in that order::" +msgstr "" +"发生的异常与 :keyword:`except` 子句中的类是同一个类或是它的基类时,异常与 except 子句中的类兼容(反之则不成立 --- " +"列出派生类的 except 子句与基类不兼容)。例如,下面的代码依次输出 B, C, D:" + +#: ../../tutorial/errors.rst:147 +msgid "" +"Note that if the except clauses were reversed (with ``except B`` first), it " +"would have printed B, B, B --- the first matching except clause is " +"triggered." +msgstr "" +"注意,如果颠倒 except 子句的顺序(把 ``except B`` 放到第一个),则输出 B,B,B --- 即触发第一个匹配的 except " +"子句。" + +#: ../../tutorial/errors.rst:150 +msgid "" +"The last except clause may omit the exception name(s), to serve as a " +"wildcard. Use this with extreme caution, since it is easy to mask a real " +"programming error in this way! It can also be used to print an error " +"message and then re-raise the exception (allowing a caller to handle the " +"exception as well)::" +msgstr "" +"最后的 except " +"子句可以省略异常名,以用作通配符。但应谨慎使用,这种方式很容易掩盖真正的编程错误!它还可用于输出错误消息,然后重新触发异常(同样允许调用者处理异常):" + +#: ../../tutorial/errors.rst:169 +msgid "" +"The :keyword:`try` ... :keyword:`except` statement has an optional *else " +"clause*, which, when present, must follow all except clauses. It is useful " +"for code that must be executed if the try clause does not raise an " +"exception. For example::" +msgstr "" +":keyword:`try` ... :keyword:`except` 语句支持可选的 *else 子句*,该子句必须放在所有 except " +"子句之后。如果 try 子句没有触发异常,但又必须执行一些代码时,这个子句很有用。例如:" + +#: ../../tutorial/errors.rst:183 +msgid "" +"The use of the :keyword:`!else` clause is better than adding additional code" +" to the :keyword:`try` clause because it avoids accidentally catching an " +"exception that wasn't raised by the code being protected by the " +":keyword:`!try` ... :keyword:`!except` statement." +msgstr "" +"使用 :keyword:`!else` 子句比向 :keyword:`try` 子句添加额外的代码要好,可以避免意外捕获非 " +":keyword:`!try` ... :keyword:`!except` 语句保护的代码触发的异常。" + +#: ../../tutorial/errors.rst:188 +msgid "" +"When an exception occurs, it may have an associated value, also known as the" +" exception's *argument*. The presence and type of the argument depend on the" +" exception type." +msgstr "发生异常时,它可能具有关联值,即异常 *参数* 。是否需要参数,以及参数的类型取决于异常的类型。" + +#: ../../tutorial/errors.rst:192 +msgid "" +"The except clause may specify a variable after the exception name. The " +"variable is bound to an exception instance with the arguments stored in " +"``instance.args``. For convenience, the exception instance defines " +":meth:`__str__` so the arguments can be printed directly without having to " +"reference ``.args``. One may also instantiate an exception first before " +"raising it and add any attributes to it as desired. ::" +msgstr "" +"except 子句可以在异常名称后面指定一个变量。这个变量和一个异常实例绑定,它的参数存储在 ``instance.args`` " +"中。为了方便起见,异常实例定义了 :meth:`__str__` ,因此可以直接打印参数而无需引用 ``.args`` " +"。也可以在抛出之前首先实例化异常,并根据需要向其添加任何属性。::" + +#: ../../tutorial/errors.rst:216 +msgid "" +"If an exception has arguments, they are printed as the last part ('detail') " +"of the message for unhandled exceptions." +msgstr "如果异常有参数,则它们将作为未处理异常的消息的最后一部分('详细信息')打印。" + +#: ../../tutorial/errors.rst:219 +msgid "" +"Exception handlers don't just handle exceptions if they occur immediately in" +" the try clause, but also if they occur inside functions that are called " +"(even indirectly) in the try clause. For example::" +msgstr "异常处理程序不仅处理 try 子句中遇到的异常,还处理 try 子句中调用(即使是间接地)的函数内部发生的异常。例如::" + +#: ../../tutorial/errors.rst:237 +msgid "Raising Exceptions" +msgstr "触发异常" + +#: ../../tutorial/errors.rst:239 +msgid "" +"The :keyword:`raise` statement allows the programmer to force a specified " +"exception to occur. For example::" +msgstr ":keyword:`raise` 语句支持强制触发指定的异常。例如:" + +#: ../../tutorial/errors.rst:247 +msgid "" +"The sole argument to :keyword:`raise` indicates the exception to be raised. " +"This must be either an exception instance or an exception class (a class " +"that derives from :class:`Exception`). If an exception class is passed, it " +"will be implicitly instantiated by calling its constructor with no " +"arguments::" +msgstr "" +":keyword:`raise` 唯一的参数就是要触发的异常。这个参数必须是异常实例或异常类(派生自 :class:`Exception` " +"类)。如果传递的是异常类,将通过调用没有参数的构造函数来隐式实例化:" + +#: ../../tutorial/errors.rst:254 +msgid "" +"If you need to determine whether an exception was raised but don't intend to" +" handle it, a simpler form of the :keyword:`raise` statement allows you to " +"re-raise the exception::" +msgstr "如果只想判断是否触发了异常,但并不打算处理该异常,则可以使用更简单的 :keyword:`raise` 语句重新触发异常:" + +#: ../../tutorial/errors.rst:273 +msgid "Exception Chaining" +msgstr "异常链" + +#: ../../tutorial/errors.rst:275 +msgid "" +"The :keyword:`raise` statement allows an optional :keyword:`from` " +"which enables chaining exceptions. For example::" +msgstr ":keyword:`raise` 语句支持可选的 :keyword:`from` 子句,该子句用于启用链式异常。 例如:" + +#: ../../tutorial/errors.rst:281 +msgid "This can be useful when you are transforming exceptions. For example::" +msgstr "转换异常时,这种方式很有用。例如:" + +#: ../../tutorial/errors.rst:302 +msgid "" +"Exception chaining happens automatically when an exception is raised inside " +"an :keyword:`except` or :keyword:`finally` section. Exception chaining can " +"be disabled by using ``from None`` idiom:" +msgstr "" +"异常链在 :keyword:`except` 或 :keyword:`finally` 子句触发异常时自动生成。禁用异常链可使用 ``from " +"None`` 习语:" + +#: ../../tutorial/errors.rst:315 +msgid "" +"For more information about chaining mechanics, see :ref:`bltin-exceptions`." +msgstr "异常链机制详见 :ref:`bltin-exceptions`。" + +#: ../../tutorial/errors.rst:321 +msgid "User-defined Exceptions" +msgstr "用户自定义异常" + +#: ../../tutorial/errors.rst:323 +msgid "" +"Programs may name their own exceptions by creating a new exception class " +"(see :ref:`tut-classes` for more about Python classes). Exceptions should " +"typically be derived from the :exc:`Exception` class, either directly or " +"indirectly." +msgstr "" +"程序可以通过创建新的异常类命名自己的异常(Python 类的内容详见 :ref:`tut-classes`)。不论是以直接还是间接的方式,异常都应从 " +":exc:`Exception` 类派生。" + +#: ../../tutorial/errors.rst:327 +msgid "" +"Exception classes can be defined which do anything any other class can do, " +"but are usually kept simple, often only offering a number of attributes that" +" allow information about the error to be extracted by handlers for the " +"exception." +msgstr "异常类可以被定义成能做其他类所能做的任何事,但通常应当保持简单,它往往只提供一些属性,允许相应的异常处理程序提取有关错误的信息。" + +#: ../../tutorial/errors.rst:331 +msgid "" +"Most exceptions are defined with names that end in \"Error\", similar to the" +" naming of the standard exceptions." +msgstr "大多数异常命名都以 “Error” 结尾,类似标准异常的命名。" + +#: ../../tutorial/errors.rst:334 +msgid "" +"Many standard modules define their own exceptions to report errors that may " +"occur in functions they define. More information on classes is presented in" +" chapter :ref:`tut-classes`." +msgstr "许多标准模块都需要自定义异常,以报告由其定义的函数中出现的错误。有关类的说明,详见 :ref:`tut-classes`。" + +#: ../../tutorial/errors.rst:342 +msgid "Defining Clean-up Actions" +msgstr "定义清理操作" + +#: ../../tutorial/errors.rst:344 +msgid "" +"The :keyword:`try` statement has another optional clause which is intended " +"to define clean-up actions that must be executed under all circumstances. " +"For example::" +msgstr ":keyword:`try` 语句还有一个可选子句,用于定义在所有情况下都必须要执行的清理操作。例如:" + +#: ../../tutorial/errors.rst:358 +msgid "" +"If a :keyword:`finally` clause is present, the :keyword:`!finally` clause " +"will execute as the last task before the :keyword:`try` statement completes." +" The :keyword:`!finally` clause runs whether or not the :keyword:`!try` " +"statement produces an exception. The following points discuss more complex " +"cases when an exception occurs:" +msgstr "" +"如果存在 :keyword:`finally` 子句,则 :keyword:`!finally` 子句是 :keyword:`try` " +"语句结束前执行的最后一项任务。不论 :keyword:`!try` 语句是否触发异常,都会执行 :keyword:`!finally` " +"子句。以下内容介绍了几种比较复杂的触发异常情景:" + +#: ../../tutorial/errors.rst:364 +msgid "" +"If an exception occurs during execution of the :keyword:`!try` clause, the " +"exception may be handled by an :keyword:`except` clause. If the exception is" +" not handled by an :keyword:`!except` clause, the exception is re-raised " +"after the :keyword:`!finally` clause has been executed." +msgstr "" +"如果执行 :keyword:`!try` 子句期间触发了某个异常,则某个 :keyword:`except` 子句应处理该异常。如果该异常没有 " +":keyword:`!except` 子句处理,在 :keyword:`!finally` 子句执行后会被重新触发。" + +#: ../../tutorial/errors.rst:370 +msgid "" +"An exception could occur during execution of an :keyword:`!except` or " +":keyword:`!else` clause. Again, the exception is re-raised after the " +":keyword:`!finally` clause has been executed." +msgstr "" +":keyword:`!except` 或 :keyword:`!else` 子句执行期间也会触发异常。 同样,该异常会在 " +":keyword:`!finally` 子句执行之后被重新触发。" + +#: ../../tutorial/errors.rst:374 +msgid "" +"If the :keyword:`!finally` clause executes a :keyword:`break`, " +":keyword:`continue` or :keyword:`return` statement, exceptions are not re-" +"raised." +msgstr "" +"如果 :keyword:`!finally` 子句中包含 :keyword:`break`、:keyword:`continue` 或 " +":keyword:`return` 等语句,异常将不会被重新引发。" + +#: ../../tutorial/errors.rst:378 +msgid "" +"If the :keyword:`!try` statement reaches a :keyword:`break`, " +":keyword:`continue` or :keyword:`return` statement, the :keyword:`!finally` " +"clause will execute just prior to the :keyword:`!break`, " +":keyword:`!continue` or :keyword:`!return` statement's execution." +msgstr "" +"如果执行 :keyword:`!try` 语句时遇到 :keyword:`break`,、:keyword:`continue` 或 " +":keyword:`return` 语句,则 :keyword:`!finally` 子句在执行 " +":keyword:`!break`、:keyword:`!continue` 或 :keyword:`!return` 语句之前执行。" + +#: ../../tutorial/errors.rst:384 +msgid "" +"If a :keyword:`!finally` clause includes a :keyword:`!return` statement, the" +" returned value will be the one from the :keyword:`!finally` clause's " +":keyword:`!return` statement, not the value from the :keyword:`!try` " +"clause's :keyword:`!return` statement." +msgstr "" +"如果 :keyword:`!finally` 子句中包含 :keyword:`!return` 语句,则返回值来自 " +":keyword:`!finally` 子句的某个 :keyword:`!return` 语句的返回值,而不是来自 :keyword:`!try` " +"子句的 :keyword:`!return` 语句的返回值。" + +#: ../../tutorial/errors.rst:390 +msgid "For example::" +msgstr "例如:" + +#: ../../tutorial/errors.rst:401 +msgid "A more complicated example::" +msgstr "这是一个比较复杂的例子:" + +#: ../../tutorial/errors.rst:426 +msgid "" +"As you can see, the :keyword:`finally` clause is executed in any event. The" +" :exc:`TypeError` raised by dividing two strings is not handled by the " +":keyword:`except` clause and therefore re-raised after the " +":keyword:`!finally` clause has been executed." +msgstr "" +"如上所示,任何情况下都会执行 :keyword:`finally` 子句。:keyword:`except` 子句不处理两个字符串相除触发的 " +":exc:`TypeError`,因此会在 :keyword:`!finally` 子句执行后被重新触发。" + +#: ../../tutorial/errors.rst:431 +msgid "" +"In real world applications, the :keyword:`finally` clause is useful for " +"releasing external resources (such as files or network connections), " +"regardless of whether the use of the resource was successful." +msgstr "在实际应用程序中,:keyword:`finally` 子句对于释放外部资源(例如文件或者网络连接)非常有用,无论是否成功使用资源。" + +#: ../../tutorial/errors.rst:439 +msgid "Predefined Clean-up Actions" +msgstr "预定义的清理操作" + +#: ../../tutorial/errors.rst:441 +msgid "" +"Some objects define standard clean-up actions to be undertaken when the " +"object is no longer needed, regardless of whether or not the operation using" +" the object succeeded or failed. Look at the following example, which tries " +"to open a file and print its contents to the screen. ::" +msgstr "" +"某些对象定义了不需要该对象时要执行的标准清理操作。无论使用该对象的操作是否成功,都会执行清理操作。比如,下例要打开一个文件,并输出文件内容:" + +#: ../../tutorial/errors.rst:449 +msgid "" +"The problem with this code is that it leaves the file open for an " +"indeterminate amount of time after this part of the code has finished " +"executing. This is not an issue in simple scripts, but can be a problem for " +"larger applications. The :keyword:`with` statement allows objects like files" +" to be used in a way that ensures they are always cleaned up promptly and " +"correctly. ::" +msgstr "" +"这个代码的问题在于,执行完代码后,文件在一段不确定的时间内处于打开状态。在简单脚本中这没有问题,但对于较大的应用程序来说可能会出问题。:keyword:`with`" +" 语句支持以及时、正确的清理的方式使用文件对象:" + +#: ../../tutorial/errors.rst:459 +msgid "" +"After the statement is executed, the file *f* is always closed, even if a " +"problem was encountered while processing the lines. Objects which, like " +"files, provide predefined clean-up actions will indicate this in their " +"documentation." +msgstr "语句执行完毕后,即使在处理行时遇到问题,都会关闭文件 *f*。和文件一样,支持预定义清理操作的对象会在文档中指出这一点。" diff --git a/tutorial/floatingpoint.po b/tutorial/floatingpoint.po new file mode 100644 index 000000000..9135b7db9 --- /dev/null +++ b/tutorial/floatingpoint.po @@ -0,0 +1,404 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) 2001-2022, Python Software Foundation +# This file is distributed under the same license as the Python package. +# FIRST AUTHOR , YEAR. +# +# Translators: +# ww song , 2018 +# Freesand Leo , 2022 +# +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: Python 3.9\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2022-11-04 14:34+0000\n" +"PO-Revision-Date: 2017-02-16 23:40+0000\n" +"Last-Translator: Freesand Leo , 2022\n" +"Language-Team: Chinese (China) (https://www.transifex.com/python-doc/teams/5390/zh_CN/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: zh_CN\n" +"Plural-Forms: nplurals=1; plural=0;\n" + +#: ../../tutorial/floatingpoint.rst:9 +msgid "Floating Point Arithmetic: Issues and Limitations" +msgstr "浮点算术:争议和限制 " + +#: ../../tutorial/floatingpoint.rst:14 +msgid "" +"Floating-point numbers are represented in computer hardware as base 2 " +"(binary) fractions. For example, the decimal fraction ::" +msgstr "浮点数在计算机硬件中表示为以 2 为基数(二进制)的小数。举例而言,十进制的小数 ::" + +#: ../../tutorial/floatingpoint.rst:19 +msgid "" +"has value 1/10 + 2/100 + 5/1000, and in the same way the binary fraction ::" +msgstr "等于 1/10 + 2/100 + 5/1000 ,同理,二进制的小数 ::" + +#: ../../tutorial/floatingpoint.rst:23 +msgid "" +"has value 0/2 + 0/4 + 1/8. These two fractions have identical values, the " +"only real difference being that the first is written in base 10 fractional " +"notation, and the second in base 2." +msgstr "等于0/2 + 0/4 + 1/8。这两个小数具有相同的值,唯一真正的区别是第一个是以 10 为基数的小数表示法,第二个则是 2 为基数。" + +#: ../../tutorial/floatingpoint.rst:27 +msgid "" +"Unfortunately, most decimal fractions cannot be represented exactly as " +"binary fractions. A consequence is that, in general, the decimal floating-" +"point numbers you enter are only approximated by the binary floating-point " +"numbers actually stored in the machine." +msgstr "" +"不幸的是,大多数的十进制小数都不能精确地表示为二进制小数。这导致在大多数情况下,你输入的十进制浮点数都只能近似地以二进制浮点数形式储存在计算机中。" + +#: ../../tutorial/floatingpoint.rst:32 +msgid "" +"The problem is easier to understand at first in base 10. Consider the " +"fraction 1/3. You can approximate that as a base 10 fraction::" +msgstr "用十进制来理解这个问题显得更加容易一些。考虑分数 1/3 。我们可以得到它在十进制下的一个近似值 ::" + +#: ../../tutorial/floatingpoint.rst:37 ../../tutorial/floatingpoint.rst:41 +msgid "or, better, ::" +msgstr "或者,更近似的,::" + +#: ../../tutorial/floatingpoint.rst:45 +msgid "" +"and so on. No matter how many digits you're willing to write down, the " +"result will never be exactly 1/3, but will be an increasingly better " +"approximation of 1/3." +msgstr "以此类推。结果是无论你写下多少的数字,它都永远不会等于 1/3 ,只是更加更加地接近 1/3 。" + +#: ../../tutorial/floatingpoint.rst:49 +msgid "" +"In the same way, no matter how many base 2 digits you're willing to use, the" +" decimal value 0.1 cannot be represented exactly as a base 2 fraction. In " +"base 2, 1/10 is the infinitely repeating fraction ::" +msgstr "" +"同样的道理,无论你使用多少位以 2 为基数的数码,十进制的 0.1 都无法精确地表示为一个以 2 为基数的小数。 在以 2 为基数的情况下, 1/10 " +"是一个无限循环小数 ::" + +#: ../../tutorial/floatingpoint.rst:55 +msgid "" +"Stop at any finite number of bits, and you get an approximation. On most " +"machines today, floats are approximated using a binary fraction with the " +"numerator using the first 53 bits starting with the most significant bit and" +" with the denominator as a power of two. In the case of 1/10, the binary " +"fraction is ``3602879701896397 / 2 ** 55`` which is close to but not exactly" +" equal to the true value of 1/10." +msgstr "" +"在任何一个位置停下,你都只能得到一个近似值。因此,在今天的大部分架构上,浮点数都只能近似地使用二进制小数表示,对应分数的分子使用每 8 字节的前 53 " +"位表示,分母则表示为 2 的幂次。在 1/10 这个例子中,相应的二进制分数是 ``3602879701896397 / 2 ** 55`` ,它很接近" +" 1/10 ,但并不是 1/10 。" + +#: ../../tutorial/floatingpoint.rst:62 +msgid "" +"Many users are not aware of the approximation because of the way values are " +"displayed. Python only prints a decimal approximation to the true decimal " +"value of the binary approximation stored by the machine. On most machines, " +"if Python were to print the true decimal value of the binary approximation " +"stored for 0.1, it would have to display ::" +msgstr "" +"大部分用户都不会意识到这个差异的存在,因为 Python 只会打印计算机中存储的二进制值的十进制近似值。在大部分计算机中,如果 Python 想把 " +"0.1 的二进制对应的精确十进制打印出来,将会变成这样 ::" + +#: ../../tutorial/floatingpoint.rst:71 +msgid "" +"That is more digits than most people find useful, so Python keeps the number" +" of digits manageable by displaying a rounded value instead ::" +msgstr "这比大多数人认为有用的数字更多,因此Python通过显示舍入值来保持可管理的位数 ::" + +#: ../../tutorial/floatingpoint.rst:77 +msgid "" +"Just remember, even though the printed result looks like the exact value of " +"1/10, the actual stored value is the nearest representable binary fraction." +msgstr "牢记,即使输出的结果看起来好像就是 1/10 的精确值,实际储存的值只是最接近 1/10 的计算机可表示的二进制分数。" + +#: ../../tutorial/floatingpoint.rst:80 +msgid "" +"Interestingly, there are many different decimal numbers that share the same " +"nearest approximate binary fraction. For example, the numbers ``0.1`` and " +"``0.10000000000000001`` and " +"``0.1000000000000000055511151231257827021181583404541015625`` are all " +"approximated by ``3602879701896397 / 2 ** 55``. Since all of these decimal " +"values share the same approximation, any one of them could be displayed " +"while still preserving the invariant ``eval(repr(x)) == x``." +msgstr "" +"有趣的是,有许多不同的十进制数共享相同的最接近的近似二进制小数。例如, ``0.1`` 、 ``0.10000000000000001`` 、 " +"``0.1000000000000000055511151231257827021181583404541015625`` 全都近似于 " +"``3602879701896397 / 2 ** 55`` 。由于所有这些十进制值都具有相同的近似值,因此可以显示其中任何一个,同时仍然保留不变的 " +"``eval(repr(x)) == x`` 。" + +#: ../../tutorial/floatingpoint.rst:88 +msgid "" +"Historically, the Python prompt and built-in :func:`repr` function would " +"choose the one with 17 significant digits, ``0.10000000000000001``. " +"Starting with Python 3.1, Python (on most systems) is now able to choose the" +" shortest of these and simply display ``0.1``." +msgstr "" +"在历史上,Python 提示符和内置的 :func:`repr` 函数会选择具有 17 位有效数字的来显示,即 " +"``0.10000000000000001``。 从 Python 3.1 开始,Python(在大多数系统上)现在能够选择这些表示中最短的并简单地显示" +" ``0.1`` 。" + +#: ../../tutorial/floatingpoint.rst:93 +msgid "" +"Note that this is in the very nature of binary floating-point: this is not a" +" bug in Python, and it is not a bug in your code either. You'll see the " +"same kind of thing in all languages that support your hardware's floating-" +"point arithmetic (although some languages may not *display* the difference " +"by default, or in all output modes)." +msgstr "" +"请注意这种情况是二进制浮点数的本质特性:它不是 Python 的错误,也不是你代码中的错误。 " +"你会在所有支持你的硬件中的浮点运算的语言中发现同样的情况(虽然某些语言在默认状态或所有输出模块下都不会 *显示* 这种差异)。" + +#: ../../tutorial/floatingpoint.rst:99 +msgid "" +"For more pleasant output, you may wish to use string formatting to produce a" +" limited number of significant digits::" +msgstr "想要更美观的输出,你可能会希望使用字符串格式化来产生限定长度的有效位数::" + +#: ../../tutorial/floatingpoint.rst:111 +msgid "" +"It's important to realize that this is, in a real sense, an illusion: you're" +" simply rounding the *display* of the true machine value." +msgstr "必须重点了解的是,这在实际上只是一个假象:你只是将真正的机器码值进行了舍入操作再 *显示* 而已。" + +#: ../../tutorial/floatingpoint.rst:114 +msgid "" +"One illusion may beget another. For example, since 0.1 is not exactly 1/10," +" summing three values of 0.1 may not yield exactly 0.3, either::" +msgstr "一个假象还可能导致另一个假象。 例如,由于这个 0.1 并非真正的 1/10,将三个 0.1 的值相加也不一定能恰好得到 0.3::" + +#: ../../tutorial/floatingpoint.rst:120 +msgid "" +"Also, since the 0.1 cannot get any closer to the exact value of 1/10 and 0.3" +" cannot get any closer to the exact value of 3/10, then pre-rounding with " +":func:`round` function cannot help::" +msgstr "" +"而且,由于这个 0.1 无法精确表示 1/10 的值而这个 0.3 也无法精确表示 3/10 的值,使用 :func:`round` " +"函数进行预先舍入也是没用的::" + +#: ../../tutorial/floatingpoint.rst:127 +msgid "" +"Though the numbers cannot be made closer to their intended exact values, the" +" :func:`round` function can be useful for post-rounding so that results with" +" inexact values become comparable to one another::" +msgstr "虽然这些小数无法精确表示其所要代表的实际值,:func:`round` 函数还是可以用来“事后舍入”,使得实际的结果值可以做相互比较::" + +#: ../../tutorial/floatingpoint.rst:134 +msgid "" +"Binary floating-point arithmetic holds many surprises like this. The " +"problem with \"0.1\" is explained in precise detail below, in the " +"\"Representation Error\" section. See `The Perils of Floating Point " +"`_ for a more complete account of other " +"common surprises." +msgstr "" +"二进制浮点运算会造成许多这样的意外。 有关 \"0.1\" 的问题会在下面的 \"表示性错误\" 一节中更精确详细地描述。 请参阅 `浮点数的危险性 " +"`_ 了解有关其他常见意外现象的更完整介绍。" + +#: ../../tutorial/floatingpoint.rst:139 +msgid "" +"As that says near the end, \"there are no easy answers.\" Still, don't be " +"unduly wary of floating-point! The errors in Python float operations are " +"inherited from the floating-point hardware, and on most machines are on the " +"order of no more than 1 part in 2\\*\\*53 per operation. That's more than " +"adequate for most tasks, but you do need to keep in mind that it's not " +"decimal arithmetic and that every float operation can suffer a new rounding " +"error." +msgstr "" +"正如那篇文章的结尾所言,“对此问题并无简单的答案。” 但是也不必过于担心浮点数的问题! Python " +"浮点运算中的错误是从浮点运算硬件继承而来,而在大多数机器上每次浮点运算得到的 2\\*\\*53 数码位都会被作为 1 个整体来处理。 " +"这对大多数任务来说都已足够,但你确实需要记住它并非十进制算术,且每次浮点运算都可能会导致新的舍入错误。" + +#: ../../tutorial/floatingpoint.rst:146 +msgid "" +"While pathological cases do exist, for most casual use of floating-point " +"arithmetic you'll see the result you expect in the end if you simply round " +"the display of your final results to the number of decimal digits you " +"expect. :func:`str` usually suffices, and for finer control see the " +":meth:`str.format` method's format specifiers in :ref:`formatstrings`." +msgstr "" +"虽然病态的情况确实存在,但对于大多数正常的浮点运算使用来说,你只需简单地将最终显示的结果舍入为你期望的十进制数值即可得到你期望的结果。 " +":func:`str` 通常已足够,对于更精度的控制可参看 :ref:`formatstrings` 中 :meth:`str.format` " +"方法的格式描述符。" + +#: ../../tutorial/floatingpoint.rst:152 +msgid "" +"For use cases which require exact decimal representation, try using the " +":mod:`decimal` module which implements decimal arithmetic suitable for " +"accounting applications and high-precision applications." +msgstr "对于需要精确十进制表示的使用场景,请尝试使用 :mod:`decimal` 模块,该模块实现了适合会计应用和高精度应用的十进制运算。" + +#: ../../tutorial/floatingpoint.rst:156 +msgid "" +"Another form of exact arithmetic is supported by the :mod:`fractions` module" +" which implements arithmetic based on rational numbers (so the numbers like " +"1/3 can be represented exactly)." +msgstr "" +"另一种形式的精确运算由 :mod:`fractions` 模块提供支持,该模块实现了基于有理数的算术运算(因此可以精确表示像 1/3 这样的数值)。" + +#: ../../tutorial/floatingpoint.rst:160 +msgid "" +"If you are a heavy user of floating point operations you should take a look " +"at the NumPy package and many other packages for mathematical and " +"statistical operations supplied by the SciPy project. See " +"." +msgstr "" +"如果你是浮点运算的重度用户则你应当了解一下 NumPy 包以及由 SciPy 项目所提供的许多其他数字和统计运算包。 参见 " +"。" + +#: ../../tutorial/floatingpoint.rst:164 +msgid "" +"Python provides tools that may help on those rare occasions when you really " +"*do* want to know the exact value of a float. The " +":meth:`float.as_integer_ratio` method expresses the value of a float as a " +"fraction::" +msgstr "" +"Python 也提供了一些工具,可以在你真的 *想要* 知道一个浮点数精确值的少数情况下提供帮助。 例如 " +":meth:`float.as_integer_ratio` 方法会将浮点数表示为一个分数::" + +#: ../../tutorial/floatingpoint.rst:173 +msgid "" +"Since the ratio is exact, it can be used to losslessly recreate the original" +" value::" +msgstr "由于这是一个精确的比值,它可以被用来无损地重建原始值::" + +#: ../../tutorial/floatingpoint.rst:179 +msgid "" +"The :meth:`float.hex` method expresses a float in hexadecimal (base 16), " +"again giving the exact value stored by your computer::" +msgstr ":meth:`float.hex` 方法会以十六进制(以 16 为基数)来表示浮点数,同样能给出保存在你的计算机中的精确值::" + +#: ../../tutorial/floatingpoint.rst:185 +msgid "" +"This precise hexadecimal representation can be used to reconstruct the float" +" value exactly::" +msgstr "这种精确的十六进制表示法可被用来精确地重建浮点值::" + +#: ../../tutorial/floatingpoint.rst:191 +msgid "" +"Since the representation is exact, it is useful for reliably porting values " +"across different versions of Python (platform independence) and exchanging " +"data with other languages that support the same format (such as Java and " +"C99)." +msgstr "" +"由于这种表示法是精确的,它适用于跨越不同版本(平台无关)的 Python 移植数值,以及与支持相同格式的其他语言(例如 Java 和 C99)交换数据." + +#: ../../tutorial/floatingpoint.rst:195 +msgid "" +"Another helpful tool is the :func:`math.fsum` function which helps mitigate " +"loss-of-precision during summation. It tracks \"lost digits\" as values are" +" added onto a running total. That can make a difference in overall accuracy" +" so that the errors do not accumulate to the point where they affect the " +"final total:" +msgstr "" +"另一个有用的工具是 :func:`math.fsum` 函数,它有助于减少求和过程中的精度损失。 它会在数值被添加到总计值的时候跟踪“丢失的位”。 " +"这可以很好地保持总计值的精确度, 使得错误不会积累到能影响结果总数的程度:" + +#: ../../tutorial/floatingpoint.rst:209 +msgid "Representation Error" +msgstr "表示性错误" + +#: ../../tutorial/floatingpoint.rst:211 +msgid "" +"This section explains the \"0.1\" example in detail, and shows how you can " +"perform an exact analysis of cases like this yourself. Basic familiarity " +"with binary floating-point representation is assumed." +msgstr "本小节将详细解释 \"0.1\" 的例子,并说明你可以怎样亲自对此类情况进行精确分析。 假定前提是已基本熟悉二进制浮点表示法。" + +#: ../../tutorial/floatingpoint.rst:215 +msgid "" +":dfn:`Representation error` refers to the fact that some (most, actually) " +"decimal fractions cannot be represented exactly as binary (base 2) " +"fractions. This is the chief reason why Python (or Perl, C, C++, Java, " +"Fortran, and many others) often won't display the exact decimal number you " +"expect." +msgstr "" +":dfn:`表示性错误` 是指某些(其实是大多数)十进制小数无法以二进制(以 2 为基数的计数制)精确表示这一事实造成的错误。 这就是为什么 " +"Python(或者 Perl、C、C++、Java、Fortran 以及许多其他语言)经常不会显示你所期待的精确十进制数值的主要原因。" + +#: ../../tutorial/floatingpoint.rst:220 +msgid "" +"Why is that? 1/10 is not exactly representable as a binary fraction. Almost" +" all machines today (November 2000) use IEEE-754 floating point arithmetic, " +"and almost all platforms map Python floats to IEEE-754 \"double precision\"." +" 754 doubles contain 53 bits of precision, so on input the computer strives" +" to convert 0.1 to the closest fraction it can of the form *J*/2**\\ *N* " +"where *J* is an integer containing exactly 53 bits. Rewriting ::" +msgstr "" +"为什么会这样? 1/10 是无法用二进制小数精确表示的。 目前(2000年11月)几乎所有使用 IEEE-754 " +"浮点运算标准的机器以及几乎所有系统平台都会将 Python 浮点数映射为 IEEE-754 “双精度类型”。 754 双精度类型包含 53 " +"位精度,因此在输入时,计算会尽量将 0.1 转换为以 *J*/2**\\ *N* 形式所能表示的最接近分数,其中 *J* 为恰好包含 53 " +"个二进制位的整数。 重新将 ::" + +#: ../../tutorial/floatingpoint.rst:229 +msgid "as ::" +msgstr "写为 ::" + +#: ../../tutorial/floatingpoint.rst:233 +msgid "" +"and recalling that *J* has exactly 53 bits (is ``>= 2**52`` but ``< " +"2**53``), the best value for *N* is 56::" +msgstr "并且由于 *J* 恰好有 53 位 (即 ``>= 2**52`` 但 ``< 2**53``),*N* 的最佳值为 56::" + +#: ../../tutorial/floatingpoint.rst:239 +msgid "" +"That is, 56 is the only value for *N* that leaves *J* with exactly 53 bits." +" The best possible value for *J* is then that quotient rounded::" +msgstr "也就是说,56 是唯一的 *N* 值能令 *J* 恰好有 53 位。 这样 *J* 的最佳可能值就是经过舍入的商::" + +#: ../../tutorial/floatingpoint.rst:246 +msgid "" +"Since the remainder is more than half of 10, the best approximation is " +"obtained by rounding up::" +msgstr "由于余数超过 10 的一半,最佳近似值可通过四舍五入获得::" + +#: ../../tutorial/floatingpoint.rst:252 +msgid "" +"Therefore the best possible approximation to 1/10 in 754 double precision " +"is::" +msgstr "这样在 754 双精度下 1/10 的最佳近似值为::" + +#: ../../tutorial/floatingpoint.rst:256 +msgid "" +"Dividing both the numerator and denominator by two reduces the fraction to::" +msgstr "分子和分母都除以二则结果小数为::" + +#: ../../tutorial/floatingpoint.rst:260 +msgid "" +"Note that since we rounded up, this is actually a little bit larger than " +"1/10; if we had not rounded up, the quotient would have been a little bit " +"smaller than 1/10. But in no case can it be *exactly* 1/10!" +msgstr "" +"请注意由于我们做了向上舍入,这个结果实际上略大于 1/10;如果我们没有向上舍入,则商将会略小于 1/10。 但无论如何它都不会是 *精确的* " +"1/10!" + +#: ../../tutorial/floatingpoint.rst:264 +msgid "" +"So the computer never \"sees\" 1/10: what it sees is the exact fraction " +"given above, the best 754 double approximation it can get::" +msgstr "因此计算永远不会“看到”1/10:它实际看到的就是上面所给出的小数,它所能达到的最佳 754 双精度近似值::" + +#: ../../tutorial/floatingpoint.rst:270 +msgid "" +"If we multiply that fraction by 10\\*\\*55, we can see the value out to 55 " +"decimal digits::" +msgstr "如果我们将该小数乘以 10\\*\\*55,我们可以看到该值输出为 55 位的十进制数::" + +#: ../../tutorial/floatingpoint.rst:276 +msgid "" +"meaning that the exact number stored in the computer is equal to the decimal" +" value 0.1000000000000000055511151231257827021181583404541015625. Instead of" +" displaying the full decimal value, many languages (including older versions" +" of Python), round the result to 17 significant digits::" +msgstr "" +"这意味着存储在计算机中的确切数值等于十进制数值 " +"0.1000000000000000055511151231257827021181583404541015625。 许多语言(包括较旧版本的 " +"Python)都不会显示这个完整的十进制数值,而是将结果舍入为 17 位有效数字::" + +#: ../../tutorial/floatingpoint.rst:284 +msgid "" +"The :mod:`fractions` and :mod:`decimal` modules make these calculations " +"easy::" +msgstr ":mod:`fractions` 和 :mod:`decimal` 模块可令进行此类计算更加容易::" diff --git a/tutorial/index.po b/tutorial/index.po new file mode 100644 index 000000000..446c5dc2f --- /dev/null +++ b/tutorial/index.po @@ -0,0 +1,98 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) 2001-2022, Python Software Foundation +# This file is distributed under the same license as the Python package. +# FIRST AUTHOR , YEAR. +# +# Translators: +# df2dc1c92e792f7ae8417c51df43db8f_594d92a <0f49be28017426edb1db1a2ab6e67088_717605>, 2018 +# Freesand Leo , 2018 +# Shengjing Zhu , 2019 +# +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: Python 3.9\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2022-11-04 14:34+0000\n" +"PO-Revision-Date: 2017-02-16 23:40+0000\n" +"Last-Translator: Shengjing Zhu , 2019\n" +"Language-Team: Chinese (China) (https://www.transifex.com/python-doc/teams/5390/zh_CN/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: zh_CN\n" +"Plural-Forms: nplurals=1; plural=0;\n" + +#: ../../tutorial/index.rst:5 +msgid "The Python Tutorial" +msgstr "Python 教程" + +#: ../../tutorial/index.rst:7 +msgid "" +"Python is an easy to learn, powerful programming language. It has efficient " +"high-level data structures and a simple but effective approach to object-" +"oriented programming. Python's elegant syntax and dynamic typing, together " +"with its interpreted nature, make it an ideal language for scripting and " +"rapid application development in many areas on most platforms." +msgstr "" +"Python 是一种易于学习又功能强大的编程语言。它提供了高效的高级数据结构,还能简单有效地面向对象编程。Python " +"优雅的语法和动态类型,以及解释型语言的本质,使它成为多数平台上写脚本和快速开发应用的理想语言。" + +#: ../../tutorial/index.rst:13 +msgid "" +"The Python interpreter and the extensive standard library are freely " +"available in source or binary form for all major platforms from the Python " +"Web site, https://www.python.org/, and may be freely distributed. The same " +"site also contains distributions of and pointers to many free third party " +"Python modules, programs and tools, and additional documentation." +msgstr "" +"Python 解释器及丰富的标准库,提供了适用于各个主要系统平台的源码或机器码,这些可以到 Python 官网 " +"https://www.python.org/ 免费获取,并可自由地分发。许多免费的第三方 Python " +"模块、程序、工具和它们的文档,也能在这个网站上找到对应内容或链接。" + +#: ../../tutorial/index.rst:19 +msgid "" +"The Python interpreter is easily extended with new functions and data types " +"implemented in C or C++ (or other languages callable from C). Python is also" +" suitable as an extension language for customizable applications." +msgstr "" +"Python 解释器易于扩展,可以使用 C 或 C++(或者其他可以通过 C 调用的语言)扩展新的功能和数据类型。Python " +"也可用于可定制化软件中的扩展程序语言。" + +#: ../../tutorial/index.rst:23 +msgid "" +"This tutorial introduces the reader informally to the basic concepts and " +"features of the Python language and system. It helps to have a Python " +"interpreter handy for hands-on experience, but all examples are self-" +"contained, so the tutorial can be read off-line as well." +msgstr "" +"这个教程非正式地介绍了 Python 语言和系统的基本概念和功能。最好在阅读的时候准备一个 Python " +"解释器进行练习。所有的例子都是相互独立的,所以这个教程也可以离线阅读。" + +#: ../../tutorial/index.rst:28 +msgid "" +"For a description of standard objects and modules, see :ref:`library-index`." +" :ref:`reference-index` gives a more formal definition of the language. To " +"write extensions in C or C++, read :ref:`extending-index` and :ref:`c-api-" +"index`. There are also several books covering Python in depth." +msgstr "" +"有关标准的对象和模块,请参阅 :ref:`library-index`。:ref:`reference-index` 提供了更正式的语言定义。想要编写 " +"C 或者 C++ 扩展可以参考 :ref:`extending-index` 和 :ref:`c-api-index`。另外还有不少书籍深入讲解 " +"Python。" + +#: ../../tutorial/index.rst:33 +msgid "" +"This tutorial does not attempt to be comprehensive and cover every single " +"feature, or even every commonly used feature. Instead, it introduces many of" +" Python's most noteworthy features, and will give you a good idea of the " +"language's flavor and style. After reading it, you will be able to read and " +"write Python modules and programs, and you will be ready to learn more about" +" the various Python library modules described in :ref:`library-index`." +msgstr "" +"这个教程并没有完整地介绍每一个功能,甚至可能没有涉及全部的常用功能。这个教程只介绍 Python " +"中最值得注意的功能,也会让你体会到这个语言的风格特色。学习完这个教程,你将可以阅读和编写 Python 模块和程序,也可以开始学习 " +":ref:`library-index`。" + +#: ../../tutorial/index.rst:40 +msgid "The :ref:`glossary` is also worth going through." +msgstr ":ref:`glossary` 也很值得一读。" diff --git a/tutorial/inputoutput.po b/tutorial/inputoutput.po new file mode 100644 index 000000000..5176b7e65 --- /dev/null +++ b/tutorial/inputoutput.po @@ -0,0 +1,575 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) 2001-2022, Python Software Foundation +# This file is distributed under the same license as the Python package. +# FIRST AUTHOR , YEAR. +# +# Translators: +# df2dc1c92e792f7ae8417c51df43db8f_594d92a <0f49be28017426edb1db1a2ab6e67088_717605>, 2018 +# Freesand Leo , 2018 +# jaystone776 <1732865113@qq.com>, 2021 +# Alpha Du , 2022 +# +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: Python 3.9\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2022-11-04 14:34+0000\n" +"PO-Revision-Date: 2017-02-16 23:40+0000\n" +"Last-Translator: Alpha Du , 2022\n" +"Language-Team: Chinese (China) (https://www.transifex.com/python-doc/teams/5390/zh_CN/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: zh_CN\n" +"Plural-Forms: nplurals=1; plural=0;\n" + +#: ../../tutorial/inputoutput.rst:5 +msgid "Input and Output" +msgstr "输入与输出" + +#: ../../tutorial/inputoutput.rst:7 +msgid "" +"There are several ways to present the output of a program; data can be " +"printed in a human-readable form, or written to a file for future use. This " +"chapter will discuss some of the possibilities." +msgstr "程序输出有几种显示方式;数据既可以输出供人阅读的形式,也可以写入文件备用。本章探讨一些可用的方式。" + +#: ../../tutorial/inputoutput.rst:15 +msgid "Fancier Output Formatting" +msgstr "更复杂的输出格式" + +#: ../../tutorial/inputoutput.rst:17 +msgid "" +"So far we've encountered two ways of writing values: *expression statements*" +" and the :func:`print` function. (A third way is using the :meth:`write` " +"method of file objects; the standard output file can be referenced as " +"``sys.stdout``. See the Library Reference for more information on this.)" +msgstr "" +"至此,我们已学习了两种写入值的方法:*表达式语句* 和 :func:`print` 函数。第三种方法是使用文件对象的 :meth:`write` " +"方法;标准输出文件称为 ``sys.stdout``。详见标准库参考。" + +#: ../../tutorial/inputoutput.rst:22 +msgid "" +"Often you'll want more control over the formatting of your output than " +"simply printing space-separated values. There are several ways to format " +"output." +msgstr "对输出格式的控制不只是打印空格分隔的值,还需要更多方式。格式化输出包括以下几种方法。" + +#: ../../tutorial/inputoutput.rst:25 +msgid "" +"To use :ref:`formatted string literals `, begin a string with" +" ``f`` or ``F`` before the opening quotation mark or triple quotation mark. " +"Inside this string, you can write a Python expression between ``{`` and " +"``}`` characters that can refer to variables or literal values." +msgstr "" +"使用 :ref:`格式化字符串字面值 ` ,要在字符串开头的引号/三引号前添加 ``f`` 或 ``F`` " +"。在这种字符串中,可以在 ``{`` 和 ``}`` 字符之间输入引用的变量,或字面值的 Python 表达式。" + +#: ../../tutorial/inputoutput.rst:37 +msgid "" +"The :meth:`str.format` method of strings requires more manual effort. " +"You'll still use ``{`` and ``}`` to mark where a variable will be " +"substituted and can provide detailed formatting directives, but you'll also " +"need to provide the information to be formatted." +msgstr "" +"字符串的 :meth:`str.format` 方法需要更多手动操作。该方法也用 ``{`` 和 ``}`` " +"标记替换变量的位置,虽然这种方法支持详细的格式化指令,但需要提供格式化信息。" + +#: ../../tutorial/inputoutput.rst:50 +msgid "" +"Finally, you can do all the string handling yourself by using string slicing" +" and concatenation operations to create any layout you can imagine. The " +"string type has some methods that perform useful operations for padding " +"strings to a given column width." +msgstr "最后,还可以用字符串切片和合并操作完成字符串处理操作,创建任何排版布局。字符串类型还支持将字符串按给定列宽进行填充,这些方法也很有用。" + +#: ../../tutorial/inputoutput.rst:55 +msgid "" +"When you don't need fancy output but just want a quick display of some " +"variables for debugging purposes, you can convert any value to a string with" +" the :func:`repr` or :func:`str` functions." +msgstr "如果不需要花哨的输出,只想快速显示变量进行调试,可以用 :func:`repr` 或 :func:`str` 函数把值转化为字符串。" + +#: ../../tutorial/inputoutput.rst:59 +msgid "" +"The :func:`str` function is meant to return representations of values which " +"are fairly human-readable, while :func:`repr` is meant to generate " +"representations which can be read by the interpreter (or will force a " +":exc:`SyntaxError` if there is no equivalent syntax). For objects which " +"don't have a particular representation for human consumption, :func:`str` " +"will return the same value as :func:`repr`. Many values, such as numbers or" +" structures like lists and dictionaries, have the same representation using " +"either function. Strings, in particular, have two distinct representations." +msgstr "" +":func:`str` 函数返回供人阅读的值,:func:`repr` 则生成适于解释器读取的值(如果没有等效的语法,则强制执行 " +":exc:`SyntaxError`)。对于没有支持供人阅读展示结果的对象, :func:`str` 返回与 :func:`repr` " +"相同的值。一般情况下,数字、列表或字典等结构的值,使用这两个函数输出的表现形式是一样的。字符串有两种不同的表现形式。" + +#: ../../tutorial/inputoutput.rst:68 +msgid "Some examples::" +msgstr "示例如下:" + +#: ../../tutorial/inputoutput.rst:91 +msgid "" +"The :mod:`string` module contains a :class:`~string.Template` class that " +"offers yet another way to substitute values into strings, using placeholders" +" like ``$x`` and replacing them with values from a dictionary, but offers " +"much less control of the formatting." +msgstr "" +":mod:`string` 模块包含 :class:`~string.Template` 类,提供了将值替换为字符串的另一种方法。该类使用 ``$x``" +" 占位符,并用字典的值进行替换,但对格式控制的支持比较有限。" + +#: ../../tutorial/inputoutput.rst:100 +msgid "Formatted String Literals" +msgstr "格式化字符串字面值" + +#: ../../tutorial/inputoutput.rst:102 +msgid "" +":ref:`Formatted string literals ` (also called f-strings for " +"short) let you include the value of Python expressions inside a string by " +"prefixing the string with ``f`` or ``F`` and writing expressions as " +"``{expression}``." +msgstr "" +":ref:`格式化字符串字面值 ` (简称为 f-字符串)在字符串前加前缀 ``f`` 或 ``F``,通过 " +"``{expression}`` 表达式,把 Python 表达式的值添加到字符串内。" + +#: ../../tutorial/inputoutput.rst:107 +msgid "" +"An optional format specifier can follow the expression. This allows greater " +"control over how the value is formatted. The following example rounds pi to " +"three places after the decimal::" +msgstr "格式说明符是可选的,写在表达式后面,可以更好地控制格式化值的方式。下例将 pi 舍入到小数点后三位:" + +#: ../../tutorial/inputoutput.rst:115 +msgid "" +"Passing an integer after the ``':'`` will cause that field to be a minimum " +"number of characters wide. This is useful for making columns line up. ::" +msgstr "在 ``':'`` 后传递整数,为该字段设置最小字符宽度,常用于列对齐:" + +#: ../../tutorial/inputoutput.rst:126 +msgid "" +"Other modifiers can be used to convert the value before it is formatted. " +"``'!a'`` applies :func:`ascii`, ``'!s'`` applies :func:`str`, and ``'!r'`` " +"applies :func:`repr`::" +msgstr "" +"还有一些修饰符可以在格式化前转换值。 ``'!a'`` 应用 :func:`ascii` ,``'!s'`` 应用 " +":func:`str`,``'!r'`` 应用 :func:`repr`:" + +#: ../../tutorial/inputoutput.rst:136 +msgid "" +"For a reference on these format specifications, see the reference guide for " +"the :ref:`formatspec`." +msgstr "格式规范参考详见参考指南 :ref:`formatspec`。" + +#: ../../tutorial/inputoutput.rst:142 +msgid "The String format() Method" +msgstr "字符串 format() 方法" + +#: ../../tutorial/inputoutput.rst:144 +msgid "Basic usage of the :meth:`str.format` method looks like this::" +msgstr ":meth:`str.format` 方法的基本用法如下所示:" + +#: ../../tutorial/inputoutput.rst:149 +msgid "" +"The brackets and characters within them (called format fields) are replaced " +"with the objects passed into the :meth:`str.format` method. A number in the" +" brackets can be used to refer to the position of the object passed into the" +" :meth:`str.format` method. ::" +msgstr "" +"花括号及之内的字符(称为格式字段)被替换为传递给 :meth:`str.format` 方法的对象。花括号中的数字表示传递给 " +":meth:`str.format` 方法的对象所在的位置。" + +#: ../../tutorial/inputoutput.rst:159 +msgid "" +"If keyword arguments are used in the :meth:`str.format` method, their values" +" are referred to by using the name of the argument. ::" +msgstr ":meth:`str.format` 方法中使用关键字参数名引用值。" + +#: ../../tutorial/inputoutput.rst:166 +msgid "Positional and keyword arguments can be arbitrarily combined::" +msgstr "位置参数和关键字参数可以任意组合:" + +#: ../../tutorial/inputoutput.rst:172 +msgid "" +"If you have a really long format string that you don't want to split up, it " +"would be nice if you could reference the variables to be formatted by name " +"instead of by position. This can be done by simply passing the dict and " +"using square brackets ``'[]'`` to access the keys. ::" +msgstr "" +"如果不想分拆较长的格式字符串,最好按名称引用变量进行格式化,不要按位置。这项操作可以通过传递字典,并用方括号 ``'[]'`` 访问键来完成。" + +#: ../../tutorial/inputoutput.rst:182 +msgid "" +"This could also be done by passing the table as keyword arguments with the " +"'**' notation. ::" +msgstr "也可以用 '**' 符号,把 table 当作传递的关键字参数。" + +#: ../../tutorial/inputoutput.rst:189 +msgid "" +"This is particularly useful in combination with the built-in function " +":func:`vars`, which returns a dictionary containing all local variables." +msgstr "与内置函数 :func:`vars` 结合使用时,这种方式非常实用,可以返回包含所有局部变量的字典。" + +#: ../../tutorial/inputoutput.rst:192 +msgid "" +"As an example, the following lines produce a tidily-aligned set of columns " +"giving integers and their squares and cubes::" +msgstr "例如,下面的代码生成一组整齐的列,包含给定整数及其平方与立方:" + +#: ../../tutorial/inputoutput.rst:209 +msgid "" +"For a complete overview of string formatting with :meth:`str.format`, see " +":ref:`formatstrings`." +msgstr ":meth:`str.format` 进行字符串格式化的完整概述详见 :ref:`formatstrings` 。" + +#: ../../tutorial/inputoutput.rst:214 +msgid "Manual String Formatting" +msgstr "手动格式化字符串" + +#: ../../tutorial/inputoutput.rst:216 +msgid "Here's the same table of squares and cubes, formatted manually::" +msgstr "下面是使用手动格式化方式实现的同一个平方和立方的表:" + +#: ../../tutorial/inputoutput.rst:234 +msgid "" +"(Note that the one space between each column was added by the way " +":func:`print` works: it always adds spaces between its arguments.)" +msgstr "(注意,每列之间的空格是通过使用 :func:`print` 添加的:它总在其参数间添加空格。)" + +#: ../../tutorial/inputoutput.rst:237 +msgid "" +"The :meth:`str.rjust` method of string objects right-justifies a string in a" +" field of a given width by padding it with spaces on the left. There are " +"similar methods :meth:`str.ljust` and :meth:`str.center`. These methods do " +"not write anything, they just return a new string. If the input string is " +"too long, they don't truncate it, but return it unchanged; this will mess up" +" your column lay-out but that's usually better than the alternative, which " +"would be lying about a value. (If you really want truncation you can always " +"add a slice operation, as in ``x.ljust(n)[:n]``.)" +msgstr "" +"字符串对象的 :meth:`str.rjust` 方法通过在左侧填充空格,对给定宽度字段中的字符串进行右对齐。同类方法还有 " +":meth:`str.ljust` 和 :meth:`str.center` " +"。这些方法不写入任何内容,只返回一个新字符串,如果输入的字符串太长,它们不会截断字符串,而是原样返回;虽然这种方式会弄乱列布局,但也比另一种方法好,后者在显示值时可能不准确(如果真的想截断字符串,可以使用" +" ``x.ljust(n)[:n]`` 这样的切片操作 。)" + +#: ../../tutorial/inputoutput.rst:246 +msgid "" +"There is another method, :meth:`str.zfill`, which pads a numeric string on " +"the left with zeros. It understands about plus and minus signs::" +msgstr "另一种方法是 :meth:`str.zfill` ,该方法在数字字符串左边填充零,且能识别正负号:" + +#: ../../tutorial/inputoutput.rst:258 +msgid "Old string formatting" +msgstr "旧式字符串格式化方法" + +#: ../../tutorial/inputoutput.rst:260 +msgid "" +"The % operator (modulo) can also be used for string formatting. Given " +"``'string' % values``, instances of ``%`` in ``string`` are replaced with " +"zero or more elements of ``values``. This operation is commonly known as " +"string interpolation. For example::" +msgstr "" +"% 运算符(求余符)也可用于字符串格式化。给定 ``'string' % values``,则 ``string`` 中的 ``%`` " +"实例会以零个或多个 ``values`` 元素替换。此操作被称为字符串插值。例如:" + +#: ../../tutorial/inputoutput.rst:269 +msgid "" +"More information can be found in the :ref:`old-string-formatting` section." +msgstr ":ref:`old-string-formatting` 小节介绍更多相关内容。" + +#: ../../tutorial/inputoutput.rst:275 +msgid "Reading and Writing Files" +msgstr "读写文件" + +#: ../../tutorial/inputoutput.rst:281 +msgid "" +":func:`open` returns a :term:`file object`, and is most commonly used with " +"two positional arguments and one keyword argument: ``open(filename, mode, " +"encoding=None)``" +msgstr "" +":func:`open` 返回一个 :term:`file object` ,最常使用的是两个位置参数和一个关键字参数:``open(filename," +" mode, encoding=None)``" + +#: ../../tutorial/inputoutput.rst:294 +msgid "" +"The first argument is a string containing the filename. The second argument" +" is another string containing a few characters describing the way in which " +"the file will be used. *mode* can be ``'r'`` when the file will only be " +"read, ``'w'`` for only writing (an existing file with the same name will be " +"erased), and ``'a'`` opens the file for appending; any data written to the " +"file is automatically added to the end. ``'r+'`` opens the file for both " +"reading and writing. The *mode* argument is optional; ``'r'`` will be " +"assumed if it's omitted." +msgstr "" +"第一个实参是文件名字符串。第二个实参是包含描述文件使用方式字符的字符串。*mode* 的值包括 ``'r'`` ,表示文件只能读取;``'w'`` " +"表示只能写入(现有同名文件会被覆盖);``'a'`` 表示打开文件并追加内容,任何写入的数据会自动添加到文件末尾。``'r+'`` " +"表示打开文件进行读写。*mode* 实参是可选的,省略时的默认值为 ``'r'``。" + +#: ../../tutorial/inputoutput.rst:303 +msgid "" +"Normally, files are opened in :dfn:`text mode`, that means, you read and " +"write strings from and to the file, which are encoded in a specific " +"*encoding*. If *encoding* is not specified, the default is platform " +"dependent (see :func:`open`). Because UTF-8 is the modern de-facto standard," +" ``encoding=\"utf-8\"`` is recommended unless you know that you need to use " +"a different encoding. Appending a ``'b'`` to the mode opens the file in " +":dfn:`binary mode`. Binary mode data is read and written as :class:`bytes` " +"objects. You can not specify *encoding* when opening file in binary mode." +msgstr "" +"通常情况下,文件是以 :dfn:`text mode` 打开的,也就是说,你从文件中读写字符串,这些字符串是以特定的 *encoding* " +"编码的。如果没有指定 *encoding* ,默认的是与平台有关的(见 :func:`open` )。因为 UTF-8 " +"是现代事实上的标准,除非你知道你需要使用一个不同的编码,否则建议使用 ``encoding=\"utf-8\"`` 。在模式后面加上一个 ``'b'``" +" ,可以用 :dfn:`binary mode` 打开文件。二进制模式的数据是以 :class:`bytes` " +"对象的形式读写的。在二进制模式下打开文件时,你不能指定 *encoding* 。" + +#: ../../tutorial/inputoutput.rst:313 +msgid "" +"In text mode, the default when reading is to convert platform-specific line " +"endings (``\\n`` on Unix, ``\\r\\n`` on Windows) to just ``\\n``. When " +"writing in text mode, the default is to convert occurrences of ``\\n`` back " +"to platform-specific line endings. This behind-the-scenes modification to " +"file data is fine for text files, but will corrupt binary data like that in " +":file:`JPEG` or :file:`EXE` files. Be very careful to use binary mode when " +"reading and writing such files." +msgstr "" +"在文本模式下读取文件时,默认把平台特定的行结束符(Unix 上为 ``\\n``, Windows 上为 ``\\r\\n``)转换为 " +"``\\n``。在文本模式下写入数据时,默认把 ``\\n`` 转换回平台特定结束符。这种操作方式在后台修改文件数据对文本文件来说没有问题,但会破坏 " +":file:`JPEG` 或 :file:`EXE` 等二进制文件中的数据。注意,在读写此类文件时,一定要使用二进制模式。" + +#: ../../tutorial/inputoutput.rst:321 +msgid "" +"It is good practice to use the :keyword:`with` keyword when dealing with " +"file objects. The advantage is that the file is properly closed after its " +"suite finishes, even if an exception is raised at some point. Using " +":keyword:`!with` is also much shorter than writing equivalent " +":keyword:`try`\\ -\\ :keyword:`finally` blocks::" +msgstr "" +"在处理文件对象时,最好使用 :keyword:`with` 关键字。优点是,子句体结束后,文件会正确关闭,即便触发异常也可以。而且,使用 " +":keyword:`!with` 相比等效的 :keyword:`try`\\ -\\ :keyword:`finally` 代码块要简短得多:" + +#: ../../tutorial/inputoutput.rst:334 +msgid "" +"If you're not using the :keyword:`with` keyword, then you should call " +"``f.close()`` to close the file and immediately free up any system resources" +" used by it." +msgstr "如果没有使用 :keyword:`with` 关键字,则应调用 ``f.close()`` 关闭文件,即可释放文件占用的系统资源。" + +#: ../../tutorial/inputoutput.rst:339 +msgid "" +"Calling ``f.write()`` without using the :keyword:`!with` keyword or calling " +"``f.close()`` **might** result in the arguments of ``f.write()`` not being " +"completely written to the disk, even if the program exits successfully." +msgstr "" +"调用 ``f.write()`` 时,未使用 :keyword:`!with` 关键字,或未调用 " +"``f.close()``,即使程序正常退出,也**可能** 导致 ``f.write()`` 的参数没有完全写入磁盘。" + +#: ../../tutorial/inputoutput.rst:347 +msgid "" +"After a file object is closed, either by a :keyword:`with` statement or by " +"calling ``f.close()``, attempts to use the file object will automatically " +"fail. ::" +msgstr "通过 :keyword:`with` 语句,或调用 ``f.close()`` 关闭文件对象后,再次使用该文件对象将会失败。" + +#: ../../tutorial/inputoutput.rst:361 +msgid "Methods of File Objects" +msgstr "文件对象的方法" + +#: ../../tutorial/inputoutput.rst:363 +msgid "" +"The rest of the examples in this section will assume that a file object " +"called ``f`` has already been created." +msgstr "本节下文中的例子假定已创建 ``f`` 文件对象。" + +#: ../../tutorial/inputoutput.rst:366 +msgid "" +"To read a file's contents, call ``f.read(size)``, which reads some quantity " +"of data and returns it as a string (in text mode) or bytes object (in binary" +" mode). *size* is an optional numeric argument. When *size* is omitted or " +"negative, the entire contents of the file will be read and returned; it's " +"your problem if the file is twice as large as your machine's memory. " +"Otherwise, at most *size* characters (in text mode) or *size* bytes (in " +"binary mode) are read and returned. If the end of the file has been reached," +" ``f.read()`` will return an empty string (``''``). ::" +msgstr "" +"``f.read(size)`` 可用于读取文件内容,它会读取一些数据,并返回字符串(文本模式),或字节串对象(在二进制模式下)。 *size* " +"是可选的数值参数。省略 *size* 或 *size* 为负数时,读取并返回整个文件的内容;文件大小是内存的两倍时,会出现问题。*size* " +"取其他值时,读取并返回最多 *size* 个字符(文本模式)或 *size* 个字节(二进制模式)。如已到达文件末尾,``f.read()`` " +"返回空字符串(``''``)。" + +#: ../../tutorial/inputoutput.rst:380 +msgid "" +"``f.readline()`` reads a single line from the file; a newline character " +"(``\\n``) is left at the end of the string, and is only omitted on the last " +"line of the file if the file doesn't end in a newline. This makes the " +"return value unambiguous; if ``f.readline()`` returns an empty string, the " +"end of the file has been reached, while a blank line is represented by " +"``'\\n'``, a string containing only a single newline. ::" +msgstr "" +"``f.readline()`` " +"从文件中读取单行数据;字符串末尾保留换行符(``\\n``),只有在文件不以换行符结尾时,文件的最后一行才会省略换行符。这种方式让返回值清晰明确;只要 " +"``f.readline()`` 返回空字符串,就表示已经到达了文件末尾,空行使用 ``'\\n'`` 表示,该字符串只包含一个换行符。" + +#: ../../tutorial/inputoutput.rst:394 +msgid "" +"For reading lines from a file, you can loop over the file object. This is " +"memory efficient, fast, and leads to simple code::" +msgstr "从文件中读取多行时,可以用循环遍历整个文件对象。这种操作能高效利用内存,快速,且代码简单:" + +#: ../../tutorial/inputoutput.rst:403 +msgid "" +"If you want to read all the lines of a file in a list you can also use " +"``list(f)`` or ``f.readlines()``." +msgstr "如需以列表形式读取文件中的所有行,可以用 ``list(f)`` 或 ``f.readlines()``。" + +#: ../../tutorial/inputoutput.rst:406 +msgid "" +"``f.write(string)`` writes the contents of *string* to the file, returning " +"the number of characters written. ::" +msgstr "``f.write(string)`` 把 *string* 的内容写入文件,并返回写入的字符数。" + +#: ../../tutorial/inputoutput.rst:412 +msgid "" +"Other types of objects need to be converted -- either to a string (in text " +"mode) or a bytes object (in binary mode) -- before writing them::" +msgstr "写入其他类型的对象前,要先把它们转化为字符串(文本模式)或字节对象(二进制模式):" + +#: ../../tutorial/inputoutput.rst:420 +msgid "" +"``f.tell()`` returns an integer giving the file object's current position in" +" the file represented as number of bytes from the beginning of the file when" +" in binary mode and an opaque number when in text mode." +msgstr "" +"``f.tell()`` 返回整数,给出文件对象在文件中的当前位置,表示为二进制模式下时从文件开始的字节数,以及文本模式下的意义不明的数字。" + +#: ../../tutorial/inputoutput.rst:424 +msgid "" +"To change the file object's position, use ``f.seek(offset, whence)``. The " +"position is computed from adding *offset* to a reference point; the " +"reference point is selected by the *whence* argument. A *whence* value of 0" +" measures from the beginning of the file, 1 uses the current file position, " +"and 2 uses the end of the file as the reference point. *whence* can be " +"omitted and defaults to 0, using the beginning of the file as the reference " +"point. ::" +msgstr "" +"``f.seek(offset, whence)`` 可以改变文件对象的位置。通过向参考点添加 *offset* 计算位置;参考点由 *whence* " +"参数指定。 *whence* 值为 0 时,表示从文件开头计算,1 表示使用当前文件位置,2 表示使用文件末尾作为参考点。省略 *whence* " +"时,其默认值为 0,即使用文件开头作为参考点。" + +#: ../../tutorial/inputoutput.rst:443 +msgid "" +"In text files (those opened without a ``b`` in the mode string), only seeks " +"relative to the beginning of the file are allowed (the exception being " +"seeking to the very file end with ``seek(0, 2)``) and the only valid " +"*offset* values are those returned from the ``f.tell()``, or zero. Any other" +" *offset* value produces undefined behaviour." +msgstr "" +"在文本文件(模式字符串未使用 ``b`` 时打开的文件)中,只允许相对于文件开头搜索(使用 ``seek(0, 2)`` " +"搜索到文件末尾是个例外),唯一有效的 *offset* 值是能从 ``f.tell()`` 中返回的,或 0。其他 *offset* " +"值都会产生未定义的行为。" + +#: ../../tutorial/inputoutput.rst:449 +msgid "" +"File objects have some additional methods, such as :meth:`~file.isatty` and " +":meth:`~file.truncate` which are less frequently used; consult the Library " +"Reference for a complete guide to file objects." +msgstr "" +"文件对象还支持 :meth:`~file.isatty` 和 :meth:`~file.truncate` " +"等方法,但不常用;文件对象的完整指南详见库参考。" + +#: ../../tutorial/inputoutput.rst:457 +msgid "Saving structured data with :mod:`json`" +msgstr "使用 :mod:`json` 保存结构化数据" + +#: ../../tutorial/inputoutput.rst:461 +msgid "" +"Strings can easily be written to and read from a file. Numbers take a bit " +"more effort, since the :meth:`read` method only returns strings, which will " +"have to be passed to a function like :func:`int`, which takes a string like " +"``'123'`` and returns its numeric value 123. When you want to save more " +"complex data types like nested lists and dictionaries, parsing and " +"serializing by hand becomes complicated." +msgstr "" +"从文件写入或读取字符串很简单,数字则稍显麻烦,因为 :meth:`read` 方法只返回字符串,这些字符串必须传递给 :func:`int` " +"这样的函数,接受 ``'123'`` 这样的字符串,并返回数字值 123。保存嵌套列表、字典等复杂数据类型时,手动解析和序列化的操作非常复杂。" + +#: ../../tutorial/inputoutput.rst:468 +msgid "" +"Rather than having users constantly writing and debugging code to save " +"complicated data types to files, Python allows you to use the popular data " +"interchange format called `JSON (JavaScript Object Notation) " +"`_. The standard module called :mod:`json` can take Python" +" data hierarchies, and convert them to string representations; this process " +"is called :dfn:`serializing`. Reconstructing the data from the string " +"representation is called :dfn:`deserializing`. Between serializing and " +"deserializing, the string representing the object may have been stored in a " +"file or data, or sent over a network connection to some distant machine." +msgstr "" +"Python 支持 `JSON (JavaScript Object Notation) `_ " +"这种流行数据交换格式,用户无需没完没了地编写、调试代码,才能把复杂的数据类型保存到文件。:mod:`json` 标准模块采用 Python " +"数据层次结构,并将之转换为字符串表示形式;这个过程称为 :dfn:`serializing` (序列化)。从字符串表示中重建数据称为 " +":dfn:`deserializing` (解序化)。在序列化和解序化之间,表示对象的字符串可能已经存储在文件或数据中,或通过网络连接发送到远方 " +"的机器。" + +#: ../../tutorial/inputoutput.rst:479 +msgid "" +"The JSON format is commonly used by modern applications to allow for data " +"exchange. Many programmers are already familiar with it, which makes it a " +"good choice for interoperability." +msgstr "JSON 格式通常用于现代应用程序的数据交换。程序员早已对它耳熟能详,可谓是交互操作的不二之选。" + +#: ../../tutorial/inputoutput.rst:483 +msgid "" +"If you have an object ``x``, you can view its JSON string representation " +"with a simple line of code::" +msgstr "只需一行简单的代码即可查看某个对象的 JSON 字符串表现形式:" + +#: ../../tutorial/inputoutput.rst:491 +msgid "" +"Another variant of the :func:`~json.dumps` function, called " +":func:`~json.dump`, simply serializes the object to a :term:`text file`. So" +" if ``f`` is a :term:`text file` object opened for writing, we can do this::" +msgstr "" +":func:`~json.dumps` 函数还有一个变体, :func:`~json.dump` ,它只将对象序列化为 :term:`text " +"file` 。因此,如果 ``f`` 是 :term:`text file` 对象,可以这样做:" + +#: ../../tutorial/inputoutput.rst:497 +msgid "" +"To decode the object again, if ``f`` is a :term:`binary file` or :term:`text" +" file` object which has been opened for reading::" +msgstr "" +"要再次解码对象,如果 ``f`` 是已打开、供读取的 :term:`binary file` 或 :term:`text file` 对象:" + +#: ../../tutorial/inputoutput.rst:503 +msgid "" +"JSON files must be encoded in UTF-8. Use ``encoding=\"utf-8\"`` when opening" +" JSON file as a :term:`text file` for both of reading and writing." +msgstr "" +"JSON文件必须以UTF-8编码。当打开JSON文件作为一个 :term:`text file` 用于读写时,使用 " +"``encoding=\"utf-8\"`` 。" + +#: ../../tutorial/inputoutput.rst:506 +msgid "" +"This simple serialization technique can handle lists and dictionaries, but " +"serializing arbitrary class instances in JSON requires a bit of extra " +"effort. The reference for the :mod:`json` module contains an explanation of " +"this." +msgstr "" +"这种简单的序列化技术可以处理列表和字典,但在 JSON 中序列化任意类的实例,则需要付出额外努力。:mod:`json` 模块的参考包含对此的解释。" + +#: ../../tutorial/inputoutput.rst:512 +msgid ":mod:`pickle` - the pickle module" +msgstr ":mod:`pickle` - 封存模块" + +#: ../../tutorial/inputoutput.rst:514 +msgid "" +"Contrary to :ref:`JSON `, *pickle* is a protocol which allows the " +"serialization of arbitrarily complex Python objects. As such, it is " +"specific to Python and cannot be used to communicate with applications " +"written in other languages. It is also insecure by default: deserializing " +"pickle data coming from an untrusted source can execute arbitrary code, if " +"the data was crafted by a skilled attacker." +msgstr "" +"与 :ref:`JSON ` 不同,*pickle* 是一种允许对复杂 Python 对象进行序列化的协议。因此,它为 Python" +" 所特有,不能用于与其他语言编写的应用程序通信。默认情况下它也是不安全的:如果解序化的数据是由手段高明的攻击者精心设计的,这种不受信任来源的 " +"pickle 数据可以执行任意代码。" diff --git a/tutorial/interactive.po b/tutorial/interactive.po new file mode 100644 index 000000000..18fc74669 --- /dev/null +++ b/tutorial/interactive.po @@ -0,0 +1,90 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) 2001-2022, Python Software Foundation +# This file is distributed under the same license as the Python package. +# FIRST AUTHOR , YEAR. +# +# Translators: +# 3vilive D , 2018 +# ww song , 2018 +# Freesand Leo , 2018 +# +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: Python 3.9\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2022-11-04 14:34+0000\n" +"PO-Revision-Date: 2017-02-16 23:40+0000\n" +"Last-Translator: Freesand Leo , 2018\n" +"Language-Team: Chinese (China) (https://www.transifex.com/python-doc/teams/5390/zh_CN/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: zh_CN\n" +"Plural-Forms: nplurals=1; plural=0;\n" + +#: ../../tutorial/interactive.rst:5 +msgid "Interactive Input Editing and History Substitution" +msgstr "交互式编辑和编辑历史" + +#: ../../tutorial/interactive.rst:7 +msgid "" +"Some versions of the Python interpreter support editing of the current input" +" line and history substitution, similar to facilities found in the Korn " +"shell and the GNU Bash shell. This is implemented using the `GNU Readline`_" +" library, which supports various styles of editing. This library has its " +"own documentation which we won't duplicate here." +msgstr "" +"某些版本的 Python 解释器支持编辑当前输入行和编辑历史记录,类似 Korn shell 和 GNU Bash shell 的功能 。这个功能使用了" +" `GNU Readline`_ 来实现,一个支持多种编辑方式的库。这个库有它自己的文档,在这里我们就不重复说明了。" + +#: ../../tutorial/interactive.rst:17 +msgid "Tab Completion and History Editing" +msgstr "Tab 补全和编辑历史" + +#: ../../tutorial/interactive.rst:19 +msgid "" +"Completion of variable and module names is :ref:`automatically enabled " +"` at interpreter startup so that the :kbd:`Tab` key " +"invokes the completion function; it looks at Python statement names, the " +"current local variables, and the available module names. For dotted " +"expressions such as ``string.a``, it will evaluate the expression up to the " +"final ``'.'`` and then suggest completions from the attributes of the " +"resulting object. Note that this may execute application-defined code if an" +" object with a :meth:`__getattr__` method is part of the expression. The " +"default configuration also saves your history into a file named " +":file:`.python_history` in your user directory. The history will be " +"available again during the next interactive interpreter session." +msgstr "" +"在解释器启动的时候,补全变量和模块名的功能将 :ref:`自动打开`,以便在按下 :kbd:`Tab` " +"键的时候调用补全函数。它会查看 Python 语句名称,当前局部变量和可用的模块名称。处理像 ``string.a`` 的表达式,它会求值在最后一个 " +"``'.'`` 之前的表达式,接着根据求值结果对象的属性给出补全建议。如果拥有 :meth:`__getattr__` " +"方法的对象是表达式的一部分,注意这可能会执行程序定义的代码。默认配置下会把编辑历史记录保存在用户目录下名为 " +":file:`.python_history` 的文件。在下一次 Python 解释器会话期间,编辑历史记录仍旧可用。" + +#: ../../tutorial/interactive.rst:36 +msgid "Alternatives to the Interactive Interpreter" +msgstr "默认交互式解释器的替代品" + +#: ../../tutorial/interactive.rst:38 +msgid "" +"This facility is an enormous step forward compared to earlier versions of " +"the interpreter; however, some wishes are left: It would be nice if the " +"proper indentation were suggested on continuation lines (the parser knows if" +" an indent token is required next). The completion mechanism might use the " +"interpreter's symbol table. A command to check (or even suggest) matching " +"parentheses, quotes, etc., would also be useful." +msgstr "" +"Python " +"解释器与早期版本的相比,向前迈进了一大步;无论怎样,还有些希望的功能:如果能在编辑连续行时建议缩进(解析器知道接下来是否需要缩进符号),那将很棒。补全机制可以使用解释器的符号表。有命令去检查(甚至建议)括号,引号以及其他符号是否匹配。" + +#: ../../tutorial/interactive.rst:45 +msgid "" +"One alternative enhanced interactive interpreter that has been around for " +"quite some time is IPython_, which features tab completion, object " +"exploration and advanced history management. It can also be thoroughly " +"customized and embedded into other applications. Another similar enhanced " +"interactive environment is bpython_." +msgstr "" +"一个可选的增强型交互式解释器是 IPython_,它已经存在了有一段时间,它具有 tab " +"补全,探索对象和高级历史记录管理功能。它还可以彻底定制并嵌入到其他应用程序中。另一个相似的增强型交互式环境是 bpython_。" diff --git a/tutorial/interpreter.po b/tutorial/interpreter.po new file mode 100644 index 000000000..148d400d5 --- /dev/null +++ b/tutorial/interpreter.po @@ -0,0 +1,247 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) 2001-2024, Python Software Foundation +# This file is distributed under the same license as the Python package. +# FIRST AUTHOR , YEAR. +# +# Translators: +# 启迪 吴 , 2017 +# cdarlint , 2017 +# jaystone776 <1732865113@qq.com>, 2021 +# Rafael Fontenelle , 2024 +# +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: Python 3.9\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2024-02-23 21:32+0000\n" +"PO-Revision-Date: 2017-02-16 23:40+0000\n" +"Last-Translator: Rafael Fontenelle , 2024\n" +"Language-Team: Chinese (China) (https://app.transifex.com/python-doc/teams/5390/zh_CN/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: zh_CN\n" +"Plural-Forms: nplurals=1; plural=0;\n" + +#: ../../tutorial/interpreter.rst:5 +msgid "Using the Python Interpreter" +msgstr "使用 Python 的解释器" + +#: ../../tutorial/interpreter.rst:11 +msgid "Invoking the Interpreter" +msgstr "唤出解释器" + +#: ../../tutorial/interpreter.rst:13 +msgid "" +"The Python interpreter is usually installed as " +":file:`/usr/local/bin/python3.9` on those machines where it is available; " +"putting :file:`/usr/local/bin` in your Unix shell's search path makes it " +"possible to start it by typing the command:" +msgstr "" +"Python 解释器一般安装在 :file:`/usr/local/bin/python3.9` 路径下;将 " +":file:`/usr/local/bin` 加入 Unix 终端的搜索路径,键入以下命令就可以启动 Python:" + +#: ../../tutorial/interpreter.rst:21 +msgid "" +"to the shell. [#]_ Since the choice of the directory where the interpreter " +"lives is an installation option, other places are possible; check with your " +"local Python guru or system administrator. (E.g., :file:`/usr/local/python`" +" is a popular alternative location.)" +msgstr "" +"这样,就可以在 shell 中运行 Python 了 [#]_ 。因为可以选择安装目录,解释器也有可能安装在别的位置;如果还不明白,就去问问身边的 " +"Python 大神或系统管理员。(例如,常见备选路径还有 :file:`/usr/local/python`。)" + +#: ../../tutorial/interpreter.rst:26 +msgid "" +"On Windows machines where you have installed Python from the :ref:`Microsoft" +" Store `, the :file:`python3.9` command will be available. If" +" you have the :ref:`py.exe launcher ` installed, you can use the " +":file:`py` command. See :ref:`setting-envvars` for other ways to launch " +"Python." +msgstr "" +"Windows 系统中,从 :ref:`Microsoft Store ` 安装 Python 后,就可以使用 " +":file:`python3.9` 命令了。 如果安装了 :ref:`py.exe 启动器 `,则可以使用 :file:`py` " +"命令。 请参阅 :ref:`setting-envvars`,了解其他启动 Python 的方式。" + +#: ../../tutorial/interpreter.rst:31 +msgid "" +"Typing an end-of-file character (:kbd:`Control-D` on Unix, :kbd:`Control-Z` " +"on Windows) at the primary prompt causes the interpreter to exit with a zero" +" exit status. If that doesn't work, you can exit the interpreter by typing " +"the following command: ``quit()``." +msgstr "" +"在主提示符中,输入文件结束符(Unix 里是 :kbd:`Control-D`,Windows 里是 " +":kbd:`Control-Z`),就会退出解释器,退出状态码为 0。如果不能退出,还可以输入这个命令:``quit()``。" + +#: ../../tutorial/interpreter.rst:36 +msgid "" +"The interpreter's line-editing features include interactive editing, history" +" substitution and code completion on systems that support the `GNU Readline " +"`_ library. Perhaps " +"the quickest check to see whether command line editing is supported is " +"typing :kbd:`Control-P` to the first Python prompt you get. If it beeps, " +"you have command line editing; see Appendix :ref:`tut-interacting` for an " +"introduction to the keys. If nothing appears to happen, or if ``^P`` is " +"echoed, command line editing isn't available; you'll only be able to use " +"backspace to remove characters from the current line." +msgstr "" +"在支持 `GNU Readline `_ " +"库的系统中,解释器的行编辑功能包括交互式编辑、历史替换、代码补全等。检测是否支持命令行编辑最快速的方式是,在首次出现 Python 提示符时,输入 " +":kbd:`Control-P`。听到“哔”提示音,说明支持行编辑;请参阅附录 :ref:`tut-" +"interacting`,了解功能键。如果没有反应,或回显了 ``^P``,则说明不支持行编辑;只能用退格键删除当前行的字符。" + +#: ../../tutorial/interpreter.rst:46 +msgid "" +"The interpreter operates somewhat like the Unix shell: when called with " +"standard input connected to a tty device, it reads and executes commands " +"interactively; when called with a file name argument or with a file as " +"standard input, it reads and executes a *script* from that file." +msgstr "" +"解释器的操作方式类似 Unix Shell:用与 tty " +"设备关联的标准输入调用时,可以交互式地读取和执行命令;以文件名参数,或标准输入文件调用时,则读取并执行文件中的 *脚本*。" + +#: ../../tutorial/interpreter.rst:51 +msgid "" +"A second way of starting the interpreter is ``python -c command [arg] ...``," +" which executes the statement(s) in *command*, analogous to the shell's " +":option:`-c` option. Since Python statements often contain spaces or other " +"characters that are special to the shell, it is usually advised to quote " +"*command* in its entirety with single quotes." +msgstr "" +"启动解释器的另一种方式是 ``python -c command [arg] ...``,这与 shell 的 :option:`-c` " +"选项类似,其中,*command* 需换成要执行的语句。由于 Python 语句经常包含空格等被 shell " +"特殊对待的字符,一般情况下,建议用单引号标注整个 *command*。" + +#: ../../tutorial/interpreter.rst:57 +msgid "" +"Some Python modules are also useful as scripts. These can be invoked using " +"``python -m module [arg] ...``, which executes the source file for *module* " +"as if you had spelled out its full name on the command line." +msgstr "" +"Python 模块也可以当作脚本使用。输入:``python -m module [arg] ...``,会执行 *module* " +"的源文件,这跟在命令行把路径写全了一样。" + +#: ../../tutorial/interpreter.rst:61 +msgid "" +"When a script file is used, it is sometimes useful to be able to run the " +"script and enter interactive mode afterwards. This can be done by passing " +":option:`-i` before the script." +msgstr "在交互模式下运行脚本文件,只要在脚本名称参数前,加上选项 :option:`-i` 就可以了。" + +#: ../../tutorial/interpreter.rst:65 +msgid "All command line options are described in :ref:`using-on-general`." +msgstr "命令行的所有选项详见 :ref:`using-on-general`。" + +#: ../../tutorial/interpreter.rst:71 +msgid "Argument Passing" +msgstr "传入参数" + +#: ../../tutorial/interpreter.rst:73 +msgid "" +"When known to the interpreter, the script name and additional arguments " +"thereafter are turned into a list of strings and assigned to the ``argv`` " +"variable in the ``sys`` module. You can access this list by executing " +"``import sys``. The length of the list is at least one; when no script and " +"no arguments are given, ``sys.argv[0]`` is an empty string. When the script" +" name is given as ``'-'`` (meaning standard input), ``sys.argv[0]`` is set " +"to ``'-'``. When :option:`-c` *command* is used, ``sys.argv[0]`` is set to " +"``'-c'``. When :option:`-m` *module* is used, ``sys.argv[0]`` is set to " +"the full name of the located module. Options found after :option:`-c` " +"*command* or :option:`-m` *module* are not consumed by the Python " +"interpreter's option processing but left in ``sys.argv`` for the command or" +" module to handle." +msgstr "" +"解释器读取命令行参数,把脚本名与其他参数转化为字符串列表存到 ``sys`` 模块的 ``argv`` 变量里。执行 ``import " +"sys``,可以导入这个模块,并访问该列表。该列表最少有一个元素;未给定输入参数时,``sys.argv[0]`` 是空字符串。给定脚本名是 " +"``'-'`` (标准输入)时,``sys.argv[0]`` 是 ``'-'``。使用 :option:`-c` *command* " +"时,``sys.argv[0]`` 是 ``'-c'``。如果使用选项 :option:`-m` *module*,``sys.argv[0]`` " +"就是包含目录的模块全名。解释器不处理 :option:`-c` *command* 或 :option:`-m` *module* " +"之后的选项,而是直接留在 ``sys.argv`` 中由命令或模块来处理。" + +#: ../../tutorial/interpreter.rst:89 +msgid "Interactive Mode" +msgstr "交互模式" + +#: ../../tutorial/interpreter.rst:91 +msgid "" +"When commands are read from a tty, the interpreter is said to be in " +"*interactive mode*. In this mode it prompts for the next command with the " +"*primary prompt*, usually three greater-than signs (``>>>``); for " +"continuation lines it prompts with the *secondary prompt*, by default three " +"dots (``...``). The interpreter prints a welcome message stating its version" +" number and a copyright notice before printing the first prompt:" +msgstr "" +"在终端(tty)输入并执行指令时,解释器在 *交互模式(interactive mode)* 中运行。在这种模式中,会显示 " +"*主提示符*,提示输入下一条指令,主提示符通常用三个大于号(``>>>``)表示;输入连续行时,显示 " +"*次要提示符*,默认是三个点(``...``)。进入解释器时,首先显示欢迎信息、版本信息、版权声明,然后才是提示符:" + +#: ../../tutorial/interpreter.rst:108 +msgid "" +"Continuation lines are needed when entering a multi-line construct. As an " +"example, take a look at this :keyword:`if` statement::" +msgstr "输入多行架构的语句时,要用连续行。以 :keyword:`if` 为例:" + +#: ../../tutorial/interpreter.rst:118 +msgid "For more on interactive mode, see :ref:`tut-interac`." +msgstr "交互模式的内容详见 :ref:`tut-interac`。" + +#: ../../tutorial/interpreter.rst:124 +msgid "The Interpreter and Its Environment" +msgstr "解释器的运行环境" + +#: ../../tutorial/interpreter.rst:130 +msgid "Source Code Encoding" +msgstr "源文件的字符编码" + +#: ../../tutorial/interpreter.rst:132 +msgid "" +"By default, Python source files are treated as encoded in UTF-8. In that " +"encoding, characters of most languages in the world can be used " +"simultaneously in string literals, identifiers and comments --- although the" +" standard library only uses ASCII characters for identifiers, a convention " +"that any portable code should follow. To display all these characters " +"properly, your editor must recognize that the file is UTF-8, and it must use" +" a font that supports all the characters in the file." +msgstr "" +"默认情况下,Python 源码文件的编码是 UTF-8。这种编码支持世界上大多数语言的字符,可以用于字符串字面值、变量、函数名及注释 —— " +"尽管标准库只用常规的 ASCII 字符作为变量名或函数名,可移植代码都应遵守此约定。要正确显示这些字符,编辑器必须能识别 UTF-8 " +"编码,而且必须使用支持文件中所有字符的字体。" + +#: ../../tutorial/interpreter.rst:140 +msgid "" +"To declare an encoding other than the default one, a special comment line " +"should be added as the *first* line of the file. The syntax is as follows::" +msgstr "如果不使用默认编码,则要声明文件的编码,文件的 *第一* 行要写成特殊注释。句法如下:" + +#: ../../tutorial/interpreter.rst:145 +msgid "" +"where *encoding* is one of the valid :mod:`codecs` supported by Python." +msgstr "其中,*encoding* 可以是 Python 支持的任意一种 :mod:`codecs`。" + +#: ../../tutorial/interpreter.rst:147 +msgid "" +"For example, to declare that Windows-1252 encoding is to be used, the first " +"line of your source code file should be::" +msgstr "比如,声明使用 Windows-1252 编码,源码文件要写成:" + +#: ../../tutorial/interpreter.rst:152 +msgid "" +"One exception to the *first line* rule is when the source code starts with a" +" :ref:`UNIX \"shebang\" line `. In this case, the encoding " +"declaration should be added as the second line of the file. For example::" +msgstr "" +"*第一行* 的规则也有一种例外情况,源码以 :ref:`UNIX \"shebang\" 行 ` " +"开头。此时,编码声明要写在文件的第二行。例如:" + +#: ../../tutorial/interpreter.rst:160 +msgid "Footnotes" +msgstr "备注" + +#: ../../tutorial/interpreter.rst:161 +msgid "" +"On Unix, the Python 3.x interpreter is by default not installed with the " +"executable named ``python``, so that it does not conflict with a " +"simultaneously installed Python 2.x executable." +msgstr "" +"Unix 系统中,为了不与同时安装的 Python 2.x 冲突,Python 3.x 解释器默认安装的执行文件名不是 ``python``。" diff --git a/tutorial/introduction.po b/tutorial/introduction.po new file mode 100644 index 000000000..7ee6a2b87 --- /dev/null +++ b/tutorial/introduction.po @@ -0,0 +1,534 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) 2001-2023, Python Software Foundation +# This file is distributed under the same license as the Python package. +# FIRST AUTHOR , YEAR. +# +# Translators: +# 张俊(fighting) , 2017 +# cdarlint , 2018 +# QR Wang , 2018 +# Fred , 2018 +# jaystone776 <1732865113@qq.com>, 2021 +# Rafael Fontenelle , 2023 +# Freesand Leo , 2023 +# +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: Python 3.9\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2023-10-06 18:16+0000\n" +"PO-Revision-Date: 2017-02-16 23:41+0000\n" +"Last-Translator: Freesand Leo , 2023\n" +"Language-Team: Chinese (China) (https://app.transifex.com/python-doc/teams/5390/zh_CN/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: zh_CN\n" +"Plural-Forms: nplurals=1; plural=0;\n" + +#: ../../tutorial/introduction.rst:5 +msgid "An Informal Introduction to Python" +msgstr "Python 速览" + +#: ../../tutorial/introduction.rst:7 +msgid "" +"In the following examples, input and output are distinguished by the " +"presence or absence of prompts (:term:`>>>` and :term:`...`): to repeat the " +"example, you must type everything after the prompt, when the prompt appears;" +" lines that do not begin with a prompt are output from the interpreter. Note" +" that a secondary prompt on a line by itself in an example means you must " +"type a blank line; this is used to end a multi-line command." +msgstr "" +"下面的例子以是否显示提示符(:term:`>>>` 与 " +":term:`...`)区分输入与输出:输入例子中的代码时,要键入以提示符开头的行中提示符后的所有内容;未以提示符开头的行是解释器的输出。注意,例子中的某行出现的第二个提示符是用来结束多行命令的,此时,要键入一个空白行。" + +#: ../../tutorial/introduction.rst:16 +msgid "" +"You can toggle the display of prompts and output by clicking on ``>>>`` in " +"the upper-right corner of an example box. If you hide the prompts and " +"output for an example, then you can easily copy and paste the input lines " +"into your interpreter." +msgstr "" +"你可以通过在示例方块右上角的 ``>>>`` 上点击来切换显示提示符和输出。 " +"如果你隐藏了一个示例的提示符和输出,那么你可以方便地将输入行复制并粘贴到你的解释器中。" + +#: ../../tutorial/introduction.rst:23 +msgid "" +"Many of the examples in this manual, even those entered at the interactive " +"prompt, include comments. Comments in Python start with the hash character," +" ``#``, and extend to the end of the physical line. A comment may appear at" +" the start of a line or following whitespace or code, but not within a " +"string literal. A hash character within a string literal is just a hash " +"character. Since comments are to clarify code and are not interpreted by " +"Python, they may be omitted when typing in examples." +msgstr "" +"本手册中的许多例子,甚至交互式命令都包含注释。Python 注释以 ``#`` " +"开头,直到该物理行结束。注释可以在行开头,或空白符与代码之后,但不能在字符串里面。字符串中的 # 号就是 # 号。注释用于阐明代码,Python " +"不解释注释,键入例子时,可以不输入注释。" + +#: ../../tutorial/introduction.rst:31 +msgid "Some examples::" +msgstr "示例如下:" + +#: ../../tutorial/introduction.rst:42 +msgid "Using Python as a Calculator" +msgstr "Python 用作计算器" + +#: ../../tutorial/introduction.rst:44 +msgid "" +"Let's try some simple Python commands. Start the interpreter and wait for " +"the primary prompt, ``>>>``. (It shouldn't take long.)" +msgstr "现在,尝试一些简单的 Python 命令。启动解释器,等待主提示符(``>>>`` )出现。" + +#: ../../tutorial/introduction.rst:51 +msgid "Numbers" +msgstr "数字" + +#: ../../tutorial/introduction.rst:53 +msgid "" +"The interpreter acts as a simple calculator: you can type an expression at " +"it and it will write the value. Expression syntax is straightforward: the " +"operators ``+``, ``-``, ``*`` and ``/`` work just like in most other " +"languages (for example, Pascal or C); parentheses (``()``) can be used for " +"grouping. For example::" +msgstr "" +"解释器像一个简单的计算器:输入表达式,就会给出答案。表达式的语法很直接:运算符 ``+``、``-``、``*``、``/`` " +"的用法和其他大部分语言一样(比如,Pascal 或 C);括号 (``()``) 用来分组。例如:" + +#: ../../tutorial/introduction.rst:68 +msgid "" +"The integer numbers (e.g. ``2``, ``4``, ``20``) have type :class:`int`, the " +"ones with a fractional part (e.g. ``5.0``, ``1.6``) have type " +":class:`float`. We will see more about numeric types later in the tutorial." +msgstr "" +"整数(如,``2``、``4``、``20`` )的类型是 :class:`int`,带小数(如,``5.0``、``1.6`` )的类型是 " +":class:`float`。本教程后半部分将介绍更多数字类型。" + +#: ../../tutorial/introduction.rst:72 +msgid "" +"Division (``/``) always returns a float. To do :term:`floor division` and " +"get an integer result (discarding any fractional result) you can use the " +"``//`` operator; to calculate the remainder you can use ``%``::" +msgstr "" +"除法运算(``/``)返回浮点数。用 ``//`` 运算符执行 :term:`floor division` 的结果是整数(忽略小数);计算余数用 " +"``%``:" + +#: ../../tutorial/introduction.rst:86 +msgid "" +"With Python, it is possible to use the ``**`` operator to calculate powers " +"[#]_::" +msgstr "Python 用 ``**`` 运算符计算乘方 [#]_:" + +#: ../../tutorial/introduction.rst:93 +msgid "" +"The equal sign (``=``) is used to assign a value to a variable. Afterwards, " +"no result is displayed before the next interactive prompt::" +msgstr "等号(``=``)用于给变量赋值。赋值后,下一个交互提示符的位置不显示任何结果:" + +#: ../../tutorial/introduction.rst:101 +msgid "" +"If a variable is not \"defined\" (assigned a value), trying to use it will " +"give you an error::" +msgstr "如果变量未定义(即,未赋值),使用该变量会提示错误:" + +#: ../../tutorial/introduction.rst:109 +msgid "" +"There is full support for floating point; operators with mixed type operands" +" convert the integer operand to floating point::" +msgstr "Python 全面支持浮点数;混合类型运算数的运算会把整数转换为浮点数:" + +#: ../../tutorial/introduction.rst:115 +msgid "" +"In interactive mode, the last printed expression is assigned to the variable" +" ``_``. This means that when you are using Python as a desk calculator, it " +"is somewhat easier to continue calculations, for example::" +msgstr "交互模式下,上次输出的表达式会赋给变量 ``_``。把 Python 当作计算器时,用该变量实现下一步计算更简单,例如:" + +#: ../../tutorial/introduction.rst:128 +msgid "" +"This variable should be treated as read-only by the user. Don't explicitly " +"assign a value to it --- you would create an independent local variable with" +" the same name masking the built-in variable with its magic behavior." +msgstr "最好把该变量当作只读类型。不要为它显式赋值,否则会创建一个同名独立局部变量,该变量会用它的魔法行为屏蔽内置变量。" + +#: ../../tutorial/introduction.rst:132 +msgid "" +"In addition to :class:`int` and :class:`float`, Python supports other types " +"of numbers, such as :class:`~decimal.Decimal` and " +":class:`~fractions.Fraction`. Python also has built-in support for " +":ref:`complex numbers `, and uses the ``j`` or ``J`` suffix to" +" indicate the imaginary part (e.g. ``3+5j``)." +msgstr "" +"除了 :class:`int` 和 :class:`float`,Python 还支持其他数字类型,例如 " +":class:`~decimal.Decimal` 或 :class:`~fractions.Fraction`。Python 还内置支持 " +":ref:`复数 `,后缀 ``j`` 或 ``J`` 用于表示虚数(例如 ``3+5j`` )。" + +#: ../../tutorial/introduction.rst:142 +msgid "Strings" +msgstr "字符串" + +#: ../../tutorial/introduction.rst:144 +msgid "" +"Besides numbers, Python can also manipulate strings, which can be expressed " +"in several ways. They can be enclosed in single quotes (``'...'``) or " +"double quotes (``\"...\"``) with the same result [#]_. ``\\`` can be used " +"to escape quotes::" +msgstr "" +"除了数字,Python 还可以操作字符串。字符串有多种表现形式,用单引号(``'……'``)或双引号(``\"……\"``)标注的结果相同 " +"[#]_。反斜杠 ``\\`` 用于转义:" + +#: ../../tutorial/introduction.rst:162 +msgid "" +"In the interactive interpreter, the output string is enclosed in quotes and " +"special characters are escaped with backslashes. While this might sometimes" +" look different from the input (the enclosing quotes could change), the two " +"strings are equivalent. The string is enclosed in double quotes if the " +"string contains a single quote and no double quotes, otherwise it is " +"enclosed in single quotes. The :func:`print` function produces a more " +"readable output, by omitting the enclosing quotes and by printing escaped " +"and special characters::" +msgstr "" +"交互式解释器会为输出的字符串加注引号,特殊字符使用反斜杠转义。虽然,有时输出的字符串看起来与输入的字符串不一样(外加的引号可能会改变),但两个字符串是相同的。如果字符串中有单引号而没有双引号,该字符串外将加注双引号,反之,则加注单引号。:func:`print`" +" 函数输出的内容更简洁易读,它会省略两边的引号,并输出转义后的特殊字符:" + +#: ../../tutorial/introduction.rst:182 +msgid "" +"If you don't want characters prefaced by ``\\`` to be interpreted as special" +" characters, you can use *raw strings* by adding an ``r`` before the first " +"quote::" +msgstr "如果不希望前置 ``\\`` 的字符转义成特殊字符,可以使用 *原始字符串*,在引号前添加 ``r`` 即可:" + +#: ../../tutorial/introduction.rst:192 +msgid "" +"String literals can span multiple lines. One way is using triple-quotes: " +"``\"\"\"...\"\"\"`` or ``'''...'''``. End of lines are automatically " +"included in the string, but it's possible to prevent this by adding a ``\\``" +" at the end of the line. The following example::" +msgstr "" +"字符串字面值可以包含多行。 一种实现方式是使用三重引号:``\"\"\"...\"\"\"`` 或 ``'''...'''``。 " +"字符串中将自动包括行结束符,但也可以在换行的地方添加一个 ``\\`` 来避免此情况。 参见以下示例:" + +#: ../../tutorial/introduction.rst:203 +msgid "" +"produces the following output (note that the initial newline is not " +"included):" +msgstr "输出如下(请注意开始的换行符没有被包括在内):" + +#: ../../tutorial/introduction.rst:211 +msgid "" +"Strings can be concatenated (glued together) with the ``+`` operator, and " +"repeated with ``*``::" +msgstr "字符串可以用 ``+`` 合并(粘到一起),也可以用 ``*`` 重复:" + +#: ../../tutorial/introduction.rst:218 +msgid "" +"Two or more *string literals* (i.e. the ones enclosed between quotes) next " +"to each other are automatically concatenated. ::" +msgstr "相邻的两个或多个 *字符串字面值* (引号标注的字符)会自动合并:" + +#: ../../tutorial/introduction.rst:224 +msgid "" +"This feature is particularly useful when you want to break long strings::" +msgstr "拼接分隔开的长字符串时,这个功能特别实用:" + +#: ../../tutorial/introduction.rst:231 +msgid "" +"This only works with two literals though, not with variables or " +"expressions::" +msgstr "这项功能只能用于两个字面值,不能用于变量或表达式:" + +#: ../../tutorial/introduction.rst:245 +msgid "" +"If you want to concatenate variables or a variable and a literal, use " +"``+``::" +msgstr "合并多个变量,或合并变量与字面值,要用 ``+``:" + +#: ../../tutorial/introduction.rst:250 +msgid "" +"Strings can be *indexed* (subscripted), with the first character having " +"index 0. There is no separate character type; a character is simply a string" +" of size one::" +msgstr "字符串支持 *索引* (下标访问),第一个字符的索引是 0。单字符没有专用的类型,就是长度为一的字符串:" + +#: ../../tutorial/introduction.rst:260 +msgid "" +"Indices may also be negative numbers, to start counting from the right::" +msgstr "索引还支持负数,用负数索引时,从右边开始计数:" + +#: ../../tutorial/introduction.rst:269 +msgid "Note that since -0 is the same as 0, negative indices start from -1." +msgstr "注意,-0 和 0 一样,因此,负数索引从 -1 开始。" + +#: ../../tutorial/introduction.rst:271 +msgid "" +"In addition to indexing, *slicing* is also supported. While indexing is " +"used to obtain individual characters, *slicing* allows you to obtain " +"substring::" +msgstr "除了索引,字符串还支持 *切片*。索引可以提取单个字符,*切片* 则提取子字符串:" + +#: ../../tutorial/introduction.rst:279 +msgid "" +"Slice indices have useful defaults; an omitted first index defaults to zero," +" an omitted second index defaults to the size of the string being sliced. ::" +msgstr "切片索引的默认值很有用;省略开始索引时,默认值为 0,省略结束索引时,默认为到字符串的结尾:" + +#: ../../tutorial/introduction.rst:289 +msgid "" +"Note how the start is always included, and the end always excluded. This " +"makes sure that ``s[:i] + s[i:]`` is always equal to ``s``::" +msgstr "注意,输出结果包含切片开始,但不包含切片结束。因此,``s[:i] + s[i:]`` 总是等于 ``s``:" + +#: ../../tutorial/introduction.rst:297 +msgid "" +"One way to remember how slices work is to think of the indices as pointing " +"*between* characters, with the left edge of the first character numbered 0. " +"Then the right edge of the last character of a string of *n* characters has " +"index *n*, for example::" +msgstr "还可以这样理解切片,索引指向的是字符 *之间* ,第一个字符的左侧标为 0,最后一个字符的右侧标为 *n* ,*n* 是字符串长度。例如:" + +#: ../../tutorial/introduction.rst:308 +msgid "" +"The first row of numbers gives the position of the indices 0...6 in the " +"string; the second row gives the corresponding negative indices. The slice " +"from *i* to *j* consists of all characters between the edges labeled *i* and" +" *j*, respectively." +msgstr "" +"第一行数字是字符串中索引 0...6 的位置,第二行数字是对应的负数索引位置。*i* 到 *j* 的切片由 *i* 和 *j* 之间所有对应的字符组成。" + +#: ../../tutorial/introduction.rst:313 +msgid "" +"For non-negative indices, the length of a slice is the difference of the " +"indices, if both are within bounds. For example, the length of " +"``word[1:3]`` is 2." +msgstr "对于使用非负索引的切片,如果两个索引都不越界,切片长度就是起止索引之差。例如, ``word[1:3]`` 的长度是 2。" + +#: ../../tutorial/introduction.rst:317 +msgid "Attempting to use an index that is too large will result in an error::" +msgstr "索引越界会报错:" + +#: ../../tutorial/introduction.rst:324 +msgid "" +"However, out of range slice indexes are handled gracefully when used for " +"slicing::" +msgstr "但是,切片会自动处理越界索引:" + +#: ../../tutorial/introduction.rst:332 +msgid "" +"Python strings cannot be changed --- they are :term:`immutable`. Therefore, " +"assigning to an indexed position in the string results in an error::" +msgstr "Python 字符串不能修改,是 :term:`immutable` 的。因此,为字符串中某个索引位置赋值会报错:" + +#: ../../tutorial/introduction.rst:344 +msgid "If you need a different string, you should create a new one::" +msgstr "要生成不同的字符串,应新建一个字符串:" + +#: ../../tutorial/introduction.rst:351 +msgid "The built-in function :func:`len` returns the length of a string::" +msgstr "内置函数 :func:`len` 返回字符串的长度:" + +#: ../../tutorial/introduction.rst:362 +msgid ":ref:`textseq`" +msgstr ":ref:`textseq`" + +#: ../../tutorial/introduction.rst:361 +msgid "" +"Strings are examples of *sequence types*, and support the common operations " +"supported by such types." +msgstr "字符串是 *序列类型* ,支持序列类型的各种操作。" + +#: ../../tutorial/introduction.rst:366 +msgid ":ref:`string-methods`" +msgstr ":ref:`string-methods`" + +#: ../../tutorial/introduction.rst:365 +msgid "" +"Strings support a large number of methods for basic transformations and " +"searching." +msgstr "字符串支持很多变形与查找方法。" + +#: ../../tutorial/introduction.rst:369 +msgid ":ref:`f-strings`" +msgstr ":ref:`f-strings`" + +#: ../../tutorial/introduction.rst:369 +msgid "String literals that have embedded expressions." +msgstr "内嵌表达式的字符串字面值。" + +#: ../../tutorial/introduction.rst:372 +msgid ":ref:`formatstrings`" +msgstr ":ref:`formatstrings`" + +#: ../../tutorial/introduction.rst:372 +msgid "Information about string formatting with :meth:`str.format`." +msgstr "使用 :meth:`str.format` 格式化字符串。" + +#: ../../tutorial/introduction.rst:375 +msgid ":ref:`old-string-formatting`" +msgstr ":ref:`old-string-formatting`" + +#: ../../tutorial/introduction.rst:375 +msgid "" +"The old formatting operations invoked when strings are the left operand of " +"the ``%`` operator are described in more detail here." +msgstr "这里详述了用 ``%`` 运算符格式化字符串的操作。" + +#: ../../tutorial/introduction.rst:382 +msgid "Lists" +msgstr "列表" + +#: ../../tutorial/introduction.rst:384 +msgid "" +"Python knows a number of *compound* data types, used to group together other" +" values. The most versatile is the *list*, which can be written as a list " +"of comma-separated values (items) between square brackets. Lists might " +"contain items of different types, but usually the items all have the same " +"type. ::" +msgstr "" +"Python 支持多种 *复合* 数据类型,可将不同值组合在一起。最常用的 *列表* ,是用方括号标注,逗号分隔的一组值。*列表* " +"可以包含不同类型的元素,但一般情况下,各个元素的类型相同:" + +#: ../../tutorial/introduction.rst:393 +msgid "" +"Like strings (and all other built-in :term:`sequence` types), lists can be " +"indexed and sliced::" +msgstr "和字符串(及其他内置 :term:`sequence` 类型)一样,列表也支持索引和切片:" + +#: ../../tutorial/introduction.rst:403 +msgid "" +"All slice operations return a new list containing the requested elements. " +"This means that the following slice returns a :ref:`shallow copy " +"` of the list::" +msgstr "切片操作返回包含请求元素的新列表。以下切片操作会返回列表的 :ref:`浅拷贝 `:" + +#: ../../tutorial/introduction.rst:410 +msgid "Lists also support operations like concatenation::" +msgstr "列表还支持合并操作:" + +#: ../../tutorial/introduction.rst:415 +msgid "" +"Unlike strings, which are :term:`immutable`, lists are a :term:`mutable` " +"type, i.e. it is possible to change their content::" +msgstr "与 :term:`immutable` 字符串不同, 列表是 :term:`mutable` 类型,其内容可以改变:" + +#: ../../tutorial/introduction.rst:425 +msgid "" +"You can also add new items at the end of the list, by using the " +":meth:`~list.append` *method* (we will see more about methods later)::" +msgstr ":meth:`~list.append` *方法* 可以在列表末尾添加新元素(后面我们会看到更多例子):" + +#: ../../tutorial/introduction.rst:433 +msgid "" +"Assignment to slices is also possible, and this can even change the size of " +"the list or clear it entirely::" +msgstr "为切片赋值可以改变列表大小,甚至清空整个列表:" + +#: ../../tutorial/introduction.rst:452 +msgid "The built-in function :func:`len` also applies to lists::" +msgstr "内置函数 :func:`len` 也支持列表:" + +#: ../../tutorial/introduction.rst:458 +msgid "" +"It is possible to nest lists (create lists containing other lists), for " +"example::" +msgstr "还可以嵌套列表(创建包含其他列表的列表),例如:" + +#: ../../tutorial/introduction.rst:474 +msgid "First Steps Towards Programming" +msgstr "走向编程的第一步" + +#: ../../tutorial/introduction.rst:476 +msgid "" +"Of course, we can use Python for more complicated tasks than adding two and " +"two together. For instance, we can write an initial sub-sequence of the " +"`Fibonacci series `_ as " +"follows::" +msgstr "" +"当然,Python 还可以完成比二加二更复杂的任务。 例如,可以编写 `斐波那契数列 " +"`_ 的初始子序列,如下所示:" + +#: ../../tutorial/introduction.rst:496 +msgid "This example introduces several new features." +msgstr "本例引入了几个新功能。" + +#: ../../tutorial/introduction.rst:498 +msgid "" +"The first line contains a *multiple assignment*: the variables ``a`` and " +"``b`` simultaneously get the new values 0 and 1. On the last line this is " +"used again, demonstrating that the expressions on the right-hand side are " +"all evaluated first before any of the assignments take place. The right-" +"hand side expressions are evaluated from the left to the right." +msgstr "" +"第一行中的 *多重赋值* :变量 ``a`` 和 ``b`` 同时获得新值 0 和 1 " +"。最后一行又用了一次多重赋值,体现了,等号右边的所有表达式的值,都是在这一语句对任何变量赋新值之前求出来的——求值顺序为从左到右。" + +#: ../../tutorial/introduction.rst:504 +msgid "" +"The :keyword:`while` loop executes as long as the condition (here: ``a < " +"10``) remains true. In Python, like in C, any non-zero integer value is " +"true; zero is false. The condition may also be a string or list value, in " +"fact any sequence; anything with a non-zero length is true, empty sequences " +"are false. The test used in the example is a simple comparison. The " +"standard comparison operators are written the same as in C: ``<`` (less " +"than), ``>`` (greater than), ``==`` (equal to), ``<=`` (less than or equal " +"to), ``>=`` (greater than or equal to) and ``!=`` (not equal to)." +msgstr "" +":keyword:`while` 循环只要条件(这里是 ``a < 10``)为真就会一直执行。Python 和 C " +"一样,任何非零整数都为真,零为假。这个条件也可以是字符串或列表类型的值,事实上,任何序列都可以:长度非零就为真,空序列则为假。示例中的判断只是最简单的比较。比较操作符的写法和" +" C 语言一样: ``<`` (小于)、 ``>`` (大于)、 ``==`` (等于)、 ``<=`` (小于等于)、 ``>=`` (大于等于)及 " +"``!=`` (不等于)。" + +#: ../../tutorial/introduction.rst:513 +msgid "" +"The *body* of the loop is *indented*: indentation is Python's way of " +"grouping statements. At the interactive prompt, you have to type a tab or " +"space(s) for each indented line. In practice you will prepare more " +"complicated input for Python with a text editor; all decent text editors " +"have an auto-indent facility. When a compound statement is entered " +"interactively, it must be followed by a blank line to indicate completion " +"(since the parser cannot guess when you have typed the last line). Note " +"that each line within a basic block must be indented by the same amount." +msgstr "" +"*循环体* 是 *缩进的* :缩进是 Python " +"组织语句的方式。在交互式命令行里,得为每个缩进的行输入空格(或制表符)。使用文本编辑器可以实现更复杂的输入方式;所有像样的文本编辑器都支持自动缩进。交互式输入复合语句时,要在最后输入空白行表示完成(因为解析器不知道哪一行代码是代码块的最后一行)。注意,同一块语句的每一行的缩进相同。" + +#: ../../tutorial/introduction.rst:522 +msgid "" +"The :func:`print` function writes the value of the argument(s) it is given. " +"It differs from just writing the expression you want to write (as we did " +"earlier in the calculator examples) in the way it handles multiple " +"arguments, floating point quantities, and strings. Strings are printed " +"without quotes, and a space is inserted between items, so you can format " +"things nicely, like this::" +msgstr "" +":func:`print` " +"函数输出给定参数的值。除了可以以单一的表达式作为参数(比如,前面的计算器的例子),它还能处理多个参数,包括浮点数与字符串。它输出的字符串不带引号,且各参数项之间会插入一个空格,这样可以实现更好的格式化操作:" + +#: ../../tutorial/introduction.rst:533 +msgid "" +"The keyword argument *end* can be used to avoid the newline after the " +"output, or end the output with a different string::" +msgstr "关键字参数 *end* 可以取消输出后面的换行, 或用另一个字符串结尾:" + +#: ../../tutorial/introduction.rst:545 +msgid "Footnotes" +msgstr "备注" + +#: ../../tutorial/introduction.rst:546 +msgid "" +"Since ``**`` has higher precedence than ``-``, ``-3**2`` will be interpreted" +" as ``-(3**2)`` and thus result in ``-9``. To avoid this and get ``9``, you" +" can use ``(-3)**2``." +msgstr "" +"``**`` 比 ``-`` 的优先级更高, 所以 ``-3**2`` 会被解释成 ``-(3**2)`` ,因此,结果是 " +"``-9``。要避免这个问题,并且得到 ``9``, 可以用 ``(-3)**2``。" + +#: ../../tutorial/introduction.rst:550 +msgid "" +"Unlike other languages, special characters such as ``\\n`` have the same " +"meaning with both single (``'...'``) and double (``\"...\"``) quotes. The " +"only difference between the two is that within single quotes you don't need " +"to escape ``\"`` (but you have to escape ``\\'``) and vice versa." +msgstr "" +"与其他语言不同,特殊字符如 ``\\n`` 在单引号(``'...'`` )和双引号(``\"...\"`` " +")里的意义一样。这两种引号唯一的区别是,不需要在单引号里转义双引号 ``\"`` (但此时必须把单引号转义成 ``\\'`` ),反之亦然。" diff --git a/tutorial/modules.po b/tutorial/modules.po new file mode 100644 index 000000000..eb3005290 --- /dev/null +++ b/tutorial/modules.po @@ -0,0 +1,687 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) 2001-2024, Python Software Foundation +# This file is distributed under the same license as the Python package. +# FIRST AUTHOR , YEAR. +# +# Translators: +# eric R , 2018 +# ww song , 2018 +# df2dc1c92e792f7ae8417c51df43db8f_594d92a <0f49be28017426edb1db1a2ab6e67088_717605>, 2018 +# jaystone776 <1732865113@qq.com>, 2021 +# Alpha Du , 2022 +# Rafael Fontenelle , 2023 +# Freesand Leo , 2024 +# +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: Python 3.9\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2024-10-11 16:34+0000\n" +"PO-Revision-Date: 2017-02-16 23:41+0000\n" +"Last-Translator: Freesand Leo , 2024\n" +"Language-Team: Chinese (China) (https://app.transifex.com/python-doc/teams/5390/zh_CN/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: zh_CN\n" +"Plural-Forms: nplurals=1; plural=0;\n" + +#: ../../tutorial/modules.rst:5 +msgid "Modules" +msgstr "模块" + +#: ../../tutorial/modules.rst:7 +msgid "" +"If you quit from the Python interpreter and enter it again, the definitions " +"you have made (functions and variables) are lost. Therefore, if you want to " +"write a somewhat longer program, you are better off using a text editor to " +"prepare the input for the interpreter and running it with that file as input" +" instead. This is known as creating a *script*. As your program gets " +"longer, you may want to split it into several files for easier maintenance." +" You may also want to use a handy function that you've written in several " +"programs without copying its definition into each program." +msgstr "" +"退出 Python 解释器后,再次进入时,之前在 Python " +"解释器中定义的函数和变量就丢失了。因此,编写较长程序时,最好用文本编辑器代替解释器,执行文件中的输入内容,这就是编写 *脚本* " +"。随着程序越来越长,为了方便维护,最好把脚本拆分成多个文件。编写脚本还一个好处,不同程序调用同一个函数时,不用把函数定义复制到各个程序。" + +#: ../../tutorial/modules.rst:16 +msgid "" +"To support this, Python has a way to put definitions in a file and use them " +"in a script or in an interactive instance of the interpreter. Such a file is" +" called a *module*; definitions from a module can be *imported* into other " +"modules or into the *main* module (the collection of variables that you have" +" access to in a script executed at the top level and in calculator mode)." +msgstr "" +"为实现这些需求,Python 把各种定义存入一个文件,在脚本或解释器的交互式实例中使用。这个文件就是 *模块* ;模块中的定义可以 *导入* " +"到其他模块或 *主* 模块(在顶层和计算器模式下,执行脚本中可访问的变量集)。" + +#: ../../tutorial/modules.rst:22 +msgid "" +"A module is a file containing Python definitions and statements. The file " +"name is the module name with the suffix :file:`.py` appended. Within a " +"module, the module's name (as a string) is available as the value of the " +"global variable ``__name__``. For instance, use your favorite text editor " +"to create a file called :file:`fibo.py` in the current directory with the " +"following contents::" +msgstr "" +"模块是包含 Python 定义和语句的文件。其文件名是模块名加后缀名 :file:`.py` 。在模块内部,通过全局变量 ``__name__`` " +"可以获取模块名(即字符串)。例如,用文本编辑器在当前目录下创建 :file:`fibo.py` 文件,输入以下内容:" + +#: ../../tutorial/modules.rst:45 +msgid "" +"Now enter the Python interpreter and import this module with the following " +"command::" +msgstr "现在,进入 Python 解释器,用以下命令导入该模块:" + +#: ../../tutorial/modules.rst:50 +msgid "" +"This does not enter the names of the functions defined in ``fibo`` directly" +" in the current symbol table; it only enters the module name ``fibo`` there." +" Using the module name you can access the functions::" +msgstr "这项操作不直接把 ``fibo`` 函数定义的名称导入到当前符号表,只导入模块名 ``fibo`` 。要使用模块名访问函数:" + +#: ../../tutorial/modules.rst:61 +msgid "" +"If you intend to use a function often you can assign it to a local name::" +msgstr "如果经常使用某个函数,可以把它赋值给局部变量:" + +#: ../../tutorial/modules.rst:71 +msgid "More on Modules" +msgstr "模块详解" + +#: ../../tutorial/modules.rst:73 +msgid "" +"A module can contain executable statements as well as function definitions. " +"These statements are intended to initialize the module. They are executed " +"only the *first* time the module name is encountered in an import statement." +" [#]_ (They are also run if the file is executed as a script.)" +msgstr "" +"模块包含可执行语句及函数定义。这些语句用于初始化模块,且仅在 import 语句 *第一次* 遇到模块名时执行。[#]_ " +"(文件作为脚本运行时,也会执行这些语句。)" + +#: ../../tutorial/modules.rst:78 +msgid "" +"Each module has its own private symbol table, which is used as the global " +"symbol table by all functions defined in the module. Thus, the author of a " +"module can use global variables in the module without worrying about " +"accidental clashes with a user's global variables. On the other hand, if you" +" know what you are doing you can touch a module's global variables with the " +"same notation used to refer to its functions, ``modname.itemname``." +msgstr "" +"模块有自己的私有符号表,用作模块中所有函数的全局符号表。因此,在模块内使用全局变量时,不用担心与用户定义的全局变量发生冲突。另一方面,可以用与访问模块函数一样的标记法,访问模块的全局变量,``modname.itemname``。" + +#: ../../tutorial/modules.rst:85 +msgid "" +"Modules can import other modules. It is customary but not required to place" +" all :keyword:`import` statements at the beginning of a module (or script, " +"for that matter). The imported module names are placed in the importing " +"module's global symbol table." +msgstr "" +"可以把其他模块导入模块。 按惯例,所有 :keyword:`import` 语句都放在模块(或脚本)开头,但这不是必须的。 " +"被导入的模块名存在导入方模块的全局符号表里。" + +#: ../../tutorial/modules.rst:90 +msgid "" +"There is a variant of the :keyword:`import` statement that imports names " +"from a module directly into the importing module's symbol table. For " +"example::" +msgstr ":keyword:`import` 语句有一个变体,可以直接把模块里的名称导入到另一个模块的符号表。例如:" + +#: ../../tutorial/modules.rst:97 +msgid "" +"This does not introduce the module name from which the imports are taken in " +"the local symbol table (so in the example, ``fibo`` is not defined)." +msgstr "这段代码不会把模块名导入到局部符号表里(因此,本例没有定义 ``fibo``)。" + +#: ../../tutorial/modules.rst:100 +msgid "There is even a variant to import all names that a module defines::" +msgstr "还有一种变体可以导入模块内定义的所有名称:" + +#: ../../tutorial/modules.rst:106 +msgid "" +"This imports all names except those beginning with an underscore (``_``). In" +" most cases Python programmers do not use this facility since it introduces " +"an unknown set of names into the interpreter, possibly hiding some things " +"you have already defined." +msgstr "" +"这种方式会导入所有不以下划线(``_``)开头的名称。大多数情况下,不要用这个功能,这种方式向解释器导入了一批未知的名称,可能会覆盖已经定义的名称。" + +#: ../../tutorial/modules.rst:111 +msgid "" +"Note that in general the practice of importing ``*`` from a module or " +"package is frowned upon, since it often causes poorly readable code. " +"However, it is okay to use it to save typing in interactive sessions." +msgstr "" +"注意,一般情况下,不建议从模块或包内导入 ``*``,因为,这项操作经常让代码变得难以理解。不过,为了在交互式会话中少打几个字,这么用也没问题。" + +#: ../../tutorial/modules.rst:115 +msgid "" +"If the module name is followed by :keyword:`!as`, then the name following " +":keyword:`!as` is bound directly to the imported module." +msgstr "模块名后使用 :keyword:`!as` 时,直接把 :keyword:`!as` 后的名称与导入模块绑定。" + +#: ../../tutorial/modules.rst:124 +msgid "" +"This is effectively importing the module in the same way that ``import " +"fibo`` will do, with the only difference of it being available as ``fib``." +msgstr "与 ``import fibo`` 一样,这种方式也可以有效地导入模块,唯一的区别是,导入的名称是 ``fib``。" + +#: ../../tutorial/modules.rst:127 +msgid "" +"It can also be used when utilising :keyword:`from` with similar effects::" +msgstr ":keyword:`from` 中也可以使用这种方式,效果类似:" + +#: ../../tutorial/modules.rst:136 +msgid "" +"For efficiency reasons, each module is only imported once per interpreter " +"session. Therefore, if you change your modules, you must restart the " +"interpreter -- or, if it's just one module you want to test interactively, " +"use :func:`importlib.reload`, e.g. ``import importlib; " +"importlib.reload(modulename)``." +msgstr "" +"为了保证运行效率,每次解释器会话只导入一次模块。如果更改了模块内容,必须重启解释器;仅交互测试一个模块时,也可以使用 " +":func:`importlib.reload`,例如 ``import importlib; " +"importlib.reload(modulename)``。" + +#: ../../tutorial/modules.rst:146 +msgid "Executing modules as scripts" +msgstr "以脚本方式执行模块" + +#: ../../tutorial/modules.rst:148 +msgid "When you run a Python module with ::" +msgstr "可以用以下方式运行 Python 模块:" + +#: ../../tutorial/modules.rst:152 +msgid "" +"the code in the module will be executed, just as if you imported it, but " +"with the ``__name__`` set to ``\"__main__\"``. That means that by adding " +"this code at the end of your module::" +msgstr "" +"这项操作将执行模块里的代码,和导入模块一样,但会把 ``__name__`` 赋值为 ``\"__main__\"``。 " +"也就是把下列代码添加到模块末尾:" + +#: ../../tutorial/modules.rst:160 +msgid "" +"you can make the file usable as a script as well as an importable module, " +"because the code that parses the command line only runs if the module is " +"executed as the \"main\" file:" +msgstr "这个文件既能被用作脚本,又能被用作一个可供导入的模块,因为解析命令行参数的那两行代码只有在模块作为“main”文件执行时才会运行:" + +#: ../../tutorial/modules.rst:169 +msgid "If the module is imported, the code is not run::" +msgstr "当这个模块被导入到其它模块时,那两行代码不运行:" + +#: ../../tutorial/modules.rst:174 +msgid "" +"This is often used either to provide a convenient user interface to a " +"module, or for testing purposes (running the module as a script executes a " +"test suite)." +msgstr "这常用于为模块提供一个便捷的用户接口,或用于测试(把模块作为执行测试套件的脚本运行)。" + +#: ../../tutorial/modules.rst:181 +msgid "The Module Search Path" +msgstr "模块搜索路径" + +#: ../../tutorial/modules.rst:185 +msgid "" +"When a module named :mod:`spam` is imported, the interpreter first searches " +"for a built-in module with that name. These module names are listed in " +":data:`sys.builtin_module_names`. If not found, it then searches for a file " +"named :file:`spam.py` in a list of directories given by the variable " +":data:`sys.path`. :data:`sys.path` is initialized from these locations:" +msgstr "" +"当一个名为 :mod:`spam` 的模块被导入时,解释器首先搜索具有该名称的内置模块。这些模块的名字被列在 " +":data:`sys.builtin_module_names` 中。如果没有找到,它就在变量 :data:`sys.path` " +"给出的目录列表中搜索一个名为 :file:`spam.py` 的文件,:data:`sys.path` 从这些位置初始化:" + +#: ../../tutorial/modules.rst:191 +msgid "" +"The directory containing the input script (or the current directory when no " +"file is specified)." +msgstr "被命令行直接运行的脚本所在的目录(或未指定文件时的当前目录)。" + +#: ../../tutorial/modules.rst:193 +msgid "" +":envvar:`PYTHONPATH` (a list of directory names, with the same syntax as the" +" shell variable :envvar:`PATH`)." +msgstr ":envvar:`PYTHONPATH` (目录列表,与 shell 变量 :envvar:`PATH` 的语法一样)。" + +#: ../../tutorial/modules.rst:195 +msgid "" +"The installation-dependent default (by convention including a ``site-" +"packages`` directory, handled by the :mod:`site` module)." +msgstr "依赖于安装的默认值(按照惯例包括一个 ``site-packages`` 目录,由 :mod:`site` 模块处理)。" + +#: ../../tutorial/modules.rst:199 +msgid "" +"On file systems which support symlinks, the directory containing the input " +"script is calculated after the symlink is followed. In other words the " +"directory containing the symlink is **not** added to the module search path." +msgstr "" +"在支持符号链接的文件系统中,“被命令行直接运行的脚本所在的目录”是符号链接最终指向的目录。换句话说,符号链接所在的目录并 **没有** " +"被添加至模块搜索路径。" + +#: ../../tutorial/modules.rst:203 +msgid "" +"After initialization, Python programs can modify :data:`sys.path`. The " +"directory containing the script being run is placed at the beginning of the " +"search path, ahead of the standard library path. This means that scripts in " +"that directory will be loaded instead of modules of the same name in the " +"library directory. This is an error unless the replacement is intended. See" +" section :ref:`tut-standardmodules` for more information." +msgstr "" +"初始化后,Python 程序可以更改 " +":data:`sys.path`。脚本所在的目录先于标准库所在的路径被搜索。这意味着,脚本所在的目录如果有和标准库同名的文件,那么加载的是该目录里的,而不是标准库的。这一般是一个错误,除非这样的替换是你有意为之。详见" +" :ref:`tut-standardmodules`。" + +#: ../../tutorial/modules.rst:214 +msgid "\"Compiled\" Python files" +msgstr "“已编译的” Python 文件" + +#: ../../tutorial/modules.rst:216 +msgid "" +"To speed up loading modules, Python caches the compiled version of each " +"module in the ``__pycache__`` directory under the name " +":file:`module.{version}.pyc`, where the version encodes the format of the " +"compiled file; it generally contains the Python version number. For " +"example, in CPython release 3.3 the compiled version of spam.py would be " +"cached as ``__pycache__/spam.cpython-33.pyc``. This naming convention " +"allows compiled modules from different releases and different versions of " +"Python to coexist." +msgstr "" +"为了快速加载模块,Python 把模块的编译版本缓存在 ``__pycache__`` 目录中,文件名为 " +":file:`module.{version}.pyc`,version 对编译文件格式进行编码,一般是 Python 的版本号。例如,CPython " +"的 3.3 发行版中,spam.py 的编译版本缓存为 ``__pycache__/spam.cpython-33.pyc``。这种命名惯例让不同 " +"Python 版本编译的模块可以共存。" + +#: ../../tutorial/modules.rst:224 +msgid "" +"Python checks the modification date of the source against the compiled " +"version to see if it's out of date and needs to be recompiled. This is a " +"completely automatic process. Also, the compiled modules are platform-" +"independent, so the same library can be shared among systems with different " +"architectures." +msgstr "" +"Python " +"对比编译版与源码的修改日期,查看编译版是否已过期,是否要重新编译。此进程完全是自动的。此外,编译模块与平台无关,因此,可在不同架构的系统之间共享相同的库。" + +#: ../../tutorial/modules.rst:229 +msgid "" +"Python does not check the cache in two circumstances. First, it always " +"recompiles and does not store the result for the module that's loaded " +"directly from the command line. Second, it does not check the cache if " +"there is no source module. To support a non-source (compiled only) " +"distribution, the compiled module must be in the source directory, and there" +" must not be a source module." +msgstr "" +"Python " +"在两种情况下不检查缓存。一,从命令行直接载入的模块,每次都会重新编译,且不储存编译结果;二,没有源模块,就不会检查缓存。为了让一个库能以隐藏源代码的形式分发(通过将所有源代码变为编译后的版本),编译后的模块必须放在源目录而非缓存目录中,并且源目录绝不能包含同名的未编译的源模块。" + +#: ../../tutorial/modules.rst:236 +msgid "Some tips for experts:" +msgstr "给专业人士的一些小建议:" + +#: ../../tutorial/modules.rst:238 +msgid "" +"You can use the :option:`-O` or :option:`-OO` switches on the Python command" +" to reduce the size of a compiled module. The ``-O`` switch removes assert " +"statements, the ``-OO`` switch removes both assert statements and __doc__ " +"strings. Since some programs may rely on having these available, you should" +" only use this option if you know what you're doing. \"Optimized\" modules " +"have an ``opt-`` tag and are usually smaller. Future releases may change " +"the effects of optimization." +msgstr "" +"在 Python 命令中使用 :option:`-O` 或 :option:`-OO` 开关,可以减小编译模块的大小。``-O`` " +"去除断言语句,``-OO`` 去除断言语句和 __doc__ " +"字符串。有些程序可能依赖于这些内容,因此,没有十足的把握,不要使用这两个选项。“优化过的”模块带有 ``opt-`` " +"标签,并且文件通常会一小些。将来的发行版或许会改进优化的效果。" + +#: ../../tutorial/modules.rst:246 +msgid "" +"A program doesn't run any faster when it is read from a ``.pyc`` file than " +"when it is read from a ``.py`` file; the only thing that's faster about " +"``.pyc`` files is the speed with which they are loaded." +msgstr "从 ``.pyc`` 文件读取的程序不比从 ``.py`` 读取的执行速度快,``.pyc`` 文件只是加载速度更快。" + +#: ../../tutorial/modules.rst:250 +msgid "" +"The module :mod:`compileall` can create .pyc files for all modules in a " +"directory." +msgstr ":mod:`compileall` 模块可以为一个目录下的所有模块创建 .pyc 文件。" + +#: ../../tutorial/modules.rst:253 +msgid "" +"There is more detail on this process, including a flow chart of the " +"decisions, in :pep:`3147`." +msgstr "本过程的细节及决策流程图,详见 :pep:`3147`。" + +#: ../../tutorial/modules.rst:260 +msgid "Standard Modules" +msgstr "标准模块" + +#: ../../tutorial/modules.rst:264 +msgid "" +"Python comes with a library of standard modules, described in a separate " +"document, the Python Library Reference (\"Library Reference\" hereafter). " +"Some modules are built into the interpreter; these provide access to " +"operations that are not part of the core of the language but are " +"nevertheless built in, either for efficiency or to provide access to " +"operating system primitives such as system calls. The set of such modules " +"is a configuration option which also depends on the underlying platform. " +"For example, the :mod:`winreg` module is only provided on Windows systems. " +"One particular module deserves some attention: :mod:`sys`, which is built " +"into every Python interpreter. The variables ``sys.ps1`` and ``sys.ps2`` " +"define the strings used as primary and secondary prompts::" +msgstr "" +"Python 自带一个标准模块的库,它在 Python 库参考(此处以下称为\"库参考\" )里另外描述。 一些模块是内嵌到解释器里面的, " +"它们给一些虽并非语言核心但却内嵌的操作提供接口,要么是为了效率,要么是给操作系统基础操作例如系统调入提供接口。 这些模块集是一个配置选项, " +"并且还依赖于底层的操作系统。 例如,:mod:`winreg` 模块只在 Windows 系统上提供。一个特别值得注意的模块 " +":mod:`sys`,它被内嵌到每一个 Python 解释器中。``sys.ps1`` 和 ``sys.ps2`` " +"变量定义了一些字符,它们可以用作主提示符和辅助提示符::" + +#: ../../tutorial/modules.rst:287 +msgid "" +"These two variables are only defined if the interpreter is in interactive " +"mode." +msgstr "只有解释器用于交互模式时,才定义这两个变量。" + +#: ../../tutorial/modules.rst:289 +msgid "" +"The variable ``sys.path`` is a list of strings that determines the " +"interpreter's search path for modules. It is initialized to a default path " +"taken from the environment variable :envvar:`PYTHONPATH`, or from a built-in" +" default if :envvar:`PYTHONPATH` is not set. You can modify it using " +"standard list operations::" +msgstr "" +"变量 ``sys.path`` 是字符串列表,用于确定解释器的模块搜索路径。该变量以环境变量 :envvar:`PYTHONPATH` " +"提取的默认路径进行初始化,如未设置 :envvar:`PYTHONPATH`,则使用内置的默认路径。可以用标准列表操作修改该变量:" + +#: ../../tutorial/modules.rst:302 +msgid "The :func:`dir` Function" +msgstr ":func:`dir` 函数" + +#: ../../tutorial/modules.rst:304 +msgid "" +"The built-in function :func:`dir` is used to find out which names a module " +"defines. It returns a sorted list of strings::" +msgstr "内置函数 :func:`dir` 用于查找模块定义的名称。返回结果是经过排序的字符串列表:" + +#: ../../tutorial/modules.rst:333 +msgid "" +"Without arguments, :func:`dir` lists the names you have defined currently::" +msgstr "没有参数时,:func:`dir` 列出当前已定义的名称:" + +#: ../../tutorial/modules.rst:341 +msgid "" +"Note that it lists all types of names: variables, modules, functions, etc." +msgstr "注意它列出所有类型的名称:变量,模块,函数,……。" + +#: ../../tutorial/modules.rst:345 +msgid "" +":func:`dir` does not list the names of built-in functions and variables. If" +" you want a list of those, they are defined in the standard module " +":mod:`builtins`::" +msgstr ":func:`dir` 不会列出内置函数和变量的名称。这些内容的定义在标准模块 :mod:`builtins` 中:" + +#: ../../tutorial/modules.rst:384 +msgid "Packages" +msgstr "包" + +#: ../../tutorial/modules.rst:386 +msgid "" +"Packages are a way of structuring Python's module namespace by using " +"\"dotted module names\". For example, the module name :mod:`A.B` designates" +" a submodule named ``B`` in a package named ``A``. Just like the use of " +"modules saves the authors of different modules from having to worry about " +"each other's global variable names, the use of dotted module names saves the" +" authors of multi-module packages like NumPy or Pillow from having to worry " +"about each other's module names." +msgstr "" +"包是一种用“点式模块名”构造 Python 模块命名空间的方法。例如,模块名 :mod:`A.B` 表示包 ``A`` 中名为 ``B`` " +"的子模块。正如模块可以区分不同模块之间的全局变量名称一样,点式模块名可以区分 NumPy 或 Pillow 等不同多模块包之间的模块名称。" + +#: ../../tutorial/modules.rst:394 +msgid "" +"Suppose you want to design a collection of modules (a \"package\") for the " +"uniform handling of sound files and sound data. There are many different " +"sound file formats (usually recognized by their extension, for example: " +":file:`.wav`, :file:`.aiff`, :file:`.au`), so you may need to create and " +"maintain a growing collection of modules for the conversion between the " +"various file formats. There are also many different operations you might " +"want to perform on sound data (such as mixing, adding echo, applying an " +"equalizer function, creating an artificial stereo effect), so in addition " +"you will be writing a never-ending stream of modules to perform these " +"operations. Here's a possible structure for your package (expressed in " +"terms of a hierarchical filesystem):" +msgstr "" +"假设要为统一处理声音文件与声音数据设计一个模块集(“包”)。声音文件的格式很多(通常以扩展名来识别,例如::file:`.wav`,:file:`.aiff`,:file:`.au`),因此,为了不同文件格式之间的转换,需要创建和维护一个不断增长的模块集合。为了实现对声音数据的不同处理(例如,混声、添加回声、均衡器功能、创造人工立体声效果),还要编写无穷无尽的模块流。下面这个分级文件树展示了这个包的架构:" + +#: ../../tutorial/modules.rst:431 +msgid "" +"When importing the package, Python searches through the directories on " +"``sys.path`` looking for the package subdirectory." +msgstr "导入包时,Python 搜索 ``sys.path`` 里的目录,查找包的子目录。" + +#: ../../tutorial/modules.rst:434 +msgid "" +"The :file:`__init__.py` files are required to make Python treat directories " +"containing the file as packages. This prevents directories with a common " +"name, such as ``string``, unintentionally hiding valid modules that occur " +"later on the module search path. In the simplest case, :file:`__init__.py` " +"can just be an empty file, but it can also execute initialization code for " +"the package or set the ``__all__`` variable, described later." +msgstr "" +"Python 只把含 :file:`__init__.py` 文件的目录当成包。这样可以防止以 ``string`` " +"等通用名称命名的目录,无意中屏蔽出现在后方模块搜索路径中的有效模块。 最简情况下,:file:`__init__.py` " +"只是一个空文件,但该文件也可以执行包的初始化代码,或设置 ``__all__`` 变量,详见下文。" + +#: ../../tutorial/modules.rst:441 +msgid "" +"Users of the package can import individual modules from the package, for " +"example::" +msgstr "还可以从包中导入单个模块,例如:" + +#: ../../tutorial/modules.rst:446 +msgid "" +"This loads the submodule :mod:`sound.effects.echo`. It must be referenced " +"with its full name. ::" +msgstr "这段代码加载子模块 :mod:`sound.effects.echo` ,但引用时必须使用子模块的全名:" + +#: ../../tutorial/modules.rst:451 +msgid "An alternative way of importing the submodule is::" +msgstr "另一种导入子模块的方法是 :" + +#: ../../tutorial/modules.rst:455 +msgid "" +"This also loads the submodule :mod:`echo`, and makes it available without " +"its package prefix, so it can be used as follows::" +msgstr "这段代码还可以加载子模块 :mod:`echo` ,不加包前缀也可以使用。因此,可以按如下方式使用:" + +#: ../../tutorial/modules.rst:460 +msgid "" +"Yet another variation is to import the desired function or variable " +"directly::" +msgstr "Import 语句的另一种变体是直接导入所需的函数或变量:" + +#: ../../tutorial/modules.rst:464 +msgid "" +"Again, this loads the submodule :mod:`echo`, but this makes its function " +":func:`echofilter` directly available::" +msgstr "同样,这样也会加载子模块 :mod:`echo`,但可以直接使用函数 :func:`echofilter`:" + +#: ../../tutorial/modules.rst:469 +msgid "" +"Note that when using ``from package import item``, the item can be either a " +"submodule (or subpackage) of the package, or some other name defined in the" +" package, like a function, class or variable. The ``import`` statement " +"first tests whether the item is defined in the package; if not, it assumes " +"it is a module and attempts to load it. If it fails to find it, an " +":exc:`ImportError` exception is raised." +msgstr "" +"注意,使用 ``from package import item`` 时,item " +"可以是包的子模块(或子包),也可以是包中定义的函数、类或变量等其他名称。``import`` 语句首先测试包中是否定义了 " +"item;如果未在包中定义,则假定 item 是模块,并尝试加载。如果找不到 item,则触发 :exc:`ImportError` 异常。" + +#: ../../tutorial/modules.rst:476 +msgid "" +"Contrarily, when using syntax like ``import item.subitem.subsubitem``, each " +"item except for the last must be a package; the last item can be a module or" +" a package but can't be a class or function or variable defined in the " +"previous item." +msgstr "" +"相反,使用 ``import item.subitem.subsubitem`` 句法时,除最后一项外,每个 item " +"都必须是包;最后一项可以是模块或包,但不能是上一项中定义的类、函数或变量。" + +#: ../../tutorial/modules.rst:485 +msgid "Importing \\* From a Package" +msgstr "从包中导入 \\*" + +#: ../../tutorial/modules.rst:489 +msgid "" +"Now what happens when the user writes ``from sound.effects import *``? " +"Ideally, one would hope that this somehow goes out to the filesystem, finds " +"which submodules are present in the package, and imports them all. This " +"could take a long time and importing sub-modules might have unwanted side-" +"effects that should only happen when the sub-module is explicitly imported." +msgstr "" +"使用 ``from sound.effects import *`` " +"时会发生什么?你可能希望它会查找并导入包的所有子模块,但事实并非如此。因为这将花费很长的时间,并且可能会产生你不想要的副作用,如果这种副作用被你设计为只有在导入某个特定的子模块时才应该发生。" + +#: ../../tutorial/modules.rst:495 +msgid "" +"The only solution is for the package author to provide an explicit index of " +"the package. The :keyword:`import` statement uses the following convention:" +" if a package's :file:`__init__.py` code defines a list named ``__all__``, " +"it is taken to be the list of module names that should be imported when " +"``from package import *`` is encountered. It is up to the package author to" +" keep this list up-to-date when a new version of the package is released. " +"Package authors may also decide not to support it, if they don't see a use " +"for importing \\* from their package. For example, the file " +":file:`sound/effects/__init__.py` could contain the following code::" +msgstr "" +"唯一的解决办法是提供包的显式索引。:keyword:`import` 语句使用如下惯例:如果包的 :file:`__init__.py` 代码定义了列表" +" ``__all__``,运行 ``from package import *`` " +"时,它就是被导入的模块名列表。发布包的新版本时,包的作者应更新此列表。如果包的作者认为没有必要在包中执行导入 \\* " +"操作,也可以不提供此列表。例如,:file:`sound/effects/__init__.py` 文件可以包含以下代码:" + +#: ../../tutorial/modules.rst:507 +msgid "" +"This would mean that ``from sound.effects import *`` would import the three " +"named submodules of the :mod:`sound.effects` package." +msgstr "" +"这意味着 ``from sound.effects import *`` 将导入 :mod:`sound.effects` 包的以上三个子模块。" + +#: ../../tutorial/modules.rst:510 +msgid "" +"If ``__all__`` is not defined, the statement ``from sound.effects import *``" +" does *not* import all submodules from the package :mod:`sound.effects` into" +" the current namespace; it only ensures that the package " +":mod:`sound.effects` has been imported (possibly running any initialization " +"code in :file:`__init__.py`) and then imports whatever names are defined in " +"the package. This includes any names defined (and submodules explicitly " +"loaded) by :file:`__init__.py`. It also includes any submodules of the " +"package that were explicitly loaded by previous :keyword:`import` " +"statements. Consider this code::" +msgstr "" +"如果没有定义 ``__all__``,``from sound.effects import *`` 语句 *不会* 把包 " +":mod:`sound.effects` 中所有子模块都导入到当前命名空间;该语句只确保导入包 :mod:`sound.effects` (可能还会运行" +" :file:`__init__.py` 中的初始化代码),然后,再导入包中定义的名称。这些名称包括 :file:`__init__.py` " +"中定义的任何名称(以及显式加载的子模块),还包括之前 :keyword:`import` 语句显式加载的包里的子模块。请看以下代码:" + +#: ../../tutorial/modules.rst:523 +msgid "" +"In this example, the :mod:`echo` and :mod:`surround` modules are imported in" +" the current namespace because they are defined in the :mod:`sound.effects` " +"package when the ``from...import`` statement is executed. (This also works " +"when ``__all__`` is defined.)" +msgstr "" +"本例中,执行 ``from...import`` 语句时,将把 :mod:`echo` 和 :mod:`surround` " +"模块导入至当前命名空间,因为,它们是在 :mod:`sound.effects` 包里定义的。(该导入操作在定义了 ``__all__`` 时也有效。)" + +#: ../../tutorial/modules.rst:528 +msgid "" +"Although certain modules are designed to export only names that follow " +"certain patterns when you use ``import *``, it is still considered bad " +"practice in production code." +msgstr "虽然,可以把模块设计为用 ``import *`` 时只导出遵循指定模式的名称,但仍不提倡在生产代码中使用这种做法。" + +#: ../../tutorial/modules.rst:532 +msgid "" +"Remember, there is nothing wrong with using ``from package import " +"specific_submodule``! In fact, this is the recommended notation unless the " +"importing module needs to use submodules with the same name from different " +"packages." +msgstr "" +"记住,使用 ``from package import specific_submodule`` 没有任何问题! " +"实际上,除了导入模块使用不同包的同名子模块之外,这种方式是推荐用法。" + +#: ../../tutorial/modules.rst:539 +msgid "Intra-package References" +msgstr "相对导入" + +#: ../../tutorial/modules.rst:541 +msgid "" +"When packages are structured into subpackages (as with the :mod:`sound` " +"package in the example), you can use absolute imports to refer to submodules" +" of siblings packages. For example, if the module " +":mod:`sound.filters.vocoder` needs to use the :mod:`echo` module in the " +":mod:`sound.effects` package, it can use ``from sound.effects import echo``." +msgstr "" +"包中内有多个子包时(与示例中的 :mod:`sound` 包一样),可以使用绝对导入来引用兄弟包中的子模块。例如,要在模块 " +":mod:`sound.filters.vocoder` 中使用 :mod:`sound.effects` 包的 :mod:`echo` 模块时,可以用" +" ``from sound.effects import echo`` 导入。" + +#: ../../tutorial/modules.rst:547 +msgid "" +"You can also write relative imports, with the ``from module import name`` " +"form of import statement. These imports use leading dots to indicate the " +"current and parent packages involved in the relative import. From the " +":mod:`surround` module for example, you might use::" +msgstr "" +"还可以用 import 语句的 ``from module import name`` " +"形式执行相对导入。下面的导入语句使用前导句点表示相对导入中的当前包和父包。例如,相对于 :mod:`surround` 模块,可以使用:" + +#: ../../tutorial/modules.rst:556 +msgid "" +"Note that relative imports are based on the name of the current module. " +"Since the name of the main module is always ``\"__main__\"``, modules " +"intended for use as the main module of a Python application must always use " +"absolute imports." +msgstr "" +"注意,相对导入基于当前模块名。因为主模块名永远是 ``\"__main__\"`` ,所以如果计划将一个模块用作 Python " +"应用程序的主模块,那么该模块内的导入语句必须始终使用绝对导入。" + +#: ../../tutorial/modules.rst:562 +msgid "Packages in Multiple Directories" +msgstr "多目录中的包" + +#: ../../tutorial/modules.rst:564 +msgid "" +"Packages support one more special attribute, :attr:`__path__`. This is " +"initialized to be a list containing the name of the directory holding the " +"package's :file:`__init__.py` before the code in that file is executed. " +"This variable can be modified; doing so affects future searches for modules " +"and subpackages contained in the package." +msgstr "" +"包还支持一个特殊属性 :attr:`__path__` 。在包的 :file:`__init__.py` " +"中的代码被执行前,该属性被初始化为一个只含一项的列表,该项是一个字符串,是 __init__.py " +"所在目录的名称。可以修改此变量;这样做会改变在此包中搜索模块和子包的方式。" + +#: ../../tutorial/modules.rst:570 +msgid "" +"While this feature is not often needed, it can be used to extend the set of " +"modules found in a package." +msgstr "这个功能虽然不常用,但可用于扩展包中的模块集。" + +#: ../../tutorial/modules.rst:575 +msgid "Footnotes" +msgstr "备注" + +#: ../../tutorial/modules.rst:576 +msgid "" +"In fact function definitions are also 'statements' that are 'executed'; the " +"execution of a module-level function definition enters the function name in " +"the module's global symbol table." +msgstr "实际上,函数定义也是“可执行”的“语句”;执行模块级函数定义时,函数名将被导入到模块的全局符号表。" diff --git a/tutorial/stdlib.po b/tutorial/stdlib.po new file mode 100644 index 000000000..c6d889a81 --- /dev/null +++ b/tutorial/stdlib.po @@ -0,0 +1,325 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) 2001-2022, Python Software Foundation +# This file is distributed under the same license as the Python package. +# FIRST AUTHOR , YEAR. +# +# Translators: +# ww song , 2018 +# ppcfish , 2019 +# Freesand Leo , 2022 +# +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: Python 3.9\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2022-11-04 14:34+0000\n" +"PO-Revision-Date: 2017-02-16 23:41+0000\n" +"Last-Translator: Freesand Leo , 2022\n" +"Language-Team: Chinese (China) (https://www.transifex.com/python-doc/teams/5390/zh_CN/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: zh_CN\n" +"Plural-Forms: nplurals=1; plural=0;\n" + +#: ../../tutorial/stdlib.rst:5 +msgid "Brief Tour of the Standard Library" +msgstr "标准库简介" + +#: ../../tutorial/stdlib.rst:11 +msgid "Operating System Interface" +msgstr "操作系统接口" + +#: ../../tutorial/stdlib.rst:13 +msgid "" +"The :mod:`os` module provides dozens of functions for interacting with the " +"operating system::" +msgstr ":mod:`os` 模块提供了许多与操作系统交互的函数::" + +#: ../../tutorial/stdlib.rst:23 +msgid "" +"Be sure to use the ``import os`` style instead of ``from os import *``. " +"This will keep :func:`os.open` from shadowing the built-in :func:`open` " +"function which operates much differently." +msgstr "" +"一定要使用 ``import os`` 而不是 ``from os import *`` 。这将避免内建的 :func:`open` 函数被 " +":func:`os.open` 隐式替换掉,因为它们的使用方式大不相同。" + +#: ../../tutorial/stdlib.rst:29 +msgid "" +"The built-in :func:`dir` and :func:`help` functions are useful as " +"interactive aids for working with large modules like :mod:`os`::" +msgstr "内置的 :func:`dir` 和 :func:`help` 函数可用作交互式辅助工具,用于处理大型模块,如 :mod:`os`::" + +#: ../../tutorial/stdlib.rst:38 +msgid "" +"For daily file and directory management tasks, the :mod:`shutil` module " +"provides a higher level interface that is easier to use::" +msgstr "对于日常文件和目录管理任务, :mod:`shutil` 模块提供了更易于使用的更高级别的接口::" + +#: ../../tutorial/stdlib.rst:51 +msgid "File Wildcards" +msgstr "文件通配符" + +#: ../../tutorial/stdlib.rst:53 +msgid "" +"The :mod:`glob` module provides a function for making file lists from " +"directory wildcard searches::" +msgstr ":mod:`glob` 模块提供了一个在目录中使用通配符搜索创建文件列表的函数::" + +#: ../../tutorial/stdlib.rst:64 +msgid "Command Line Arguments" +msgstr "命令行参数" + +#: ../../tutorial/stdlib.rst:66 +msgid "" +"Common utility scripts often need to process command line arguments. These " +"arguments are stored in the :mod:`sys` module's *argv* attribute as a list." +" For instance the following output results from running ``python demo.py " +"one two three`` at the command line::" +msgstr "" +"通用实用程序脚本通常需要处理命令行参数。这些参数作为列表存储在 :mod:`sys` 模块的 *argv* 属性中。例如,以下输出来自在命令行运行 " +"``python demo.py one two three`` ::" + +#: ../../tutorial/stdlib.rst:75 +msgid "" +"The :mod:`argparse` module provides a more sophisticated mechanism to " +"process command line arguments. The following script extracts one or more " +"filenames and an optional number of lines to be displayed::" +msgstr ":mod:`argparse` 模块提供了一种更复杂的机制来处理命令行参数。 以下脚本可提取一个或多个文件名,并可选择要显示的行数::" + +#: ../../tutorial/stdlib.rst:89 +msgid "" +"When run at the command line with ``python top.py --lines=5 alpha.txt " +"beta.txt``, the script sets ``args.lines`` to ``5`` and ``args.filenames`` " +"to ``['alpha.txt', 'beta.txt']``." +msgstr "" +"当在通过 ``python top.py --lines=5 alpha.txt beta.txt`` 在命令行运行时,该脚本会将 " +"``args.lines`` 设为 ``5`` 并将 ``args.filenames`` 设为 ``['alpha.txt', " +"'beta.txt']``。" + +#: ../../tutorial/stdlib.rst:97 +msgid "Error Output Redirection and Program Termination" +msgstr "错误输出重定向和程序终止" + +#: ../../tutorial/stdlib.rst:99 +msgid "" +"The :mod:`sys` module also has attributes for *stdin*, *stdout*, and " +"*stderr*. The latter is useful for emitting warnings and error messages to " +"make them visible even when *stdout* has been redirected::" +msgstr "" +":mod:`sys` 模块还具有 *stdin* , *stdout* 和 *stderr* 的属性。后者对于发出警告和错误消息非常有用,即使在 " +"*stdout* 被重定向后也可以看到它们::" + +#: ../../tutorial/stdlib.rst:106 +msgid "The most direct way to terminate a script is to use ``sys.exit()``." +msgstr "终止脚本的最直接方法是使用 ``sys.exit()`` 。" + +#: ../../tutorial/stdlib.rst:112 +msgid "String Pattern Matching" +msgstr "字符串模式匹配" + +#: ../../tutorial/stdlib.rst:114 +msgid "" +"The :mod:`re` module provides regular expression tools for advanced string " +"processing. For complex matching and manipulation, regular expressions offer" +" succinct, optimized solutions::" +msgstr ":mod:`re` 模块为高级字符串处理提供正则表达式工具。对于复杂的匹配和操作,正则表达式提供简洁,优化的解决方案::" + +#: ../../tutorial/stdlib.rst:124 +msgid "" +"When only simple capabilities are needed, string methods are preferred " +"because they are easier to read and debug::" +msgstr "当只需要简单的功能时,首选字符串方法因为它们更容易阅读和调试::" + +#: ../../tutorial/stdlib.rst:134 +msgid "Mathematics" +msgstr "数学" + +#: ../../tutorial/stdlib.rst:136 +msgid "" +"The :mod:`math` module gives access to the underlying C library functions " +"for floating point math::" +msgstr ":mod:`math` 模块提供对浮点数学的底层C库函数的访问::" + +#: ../../tutorial/stdlib.rst:145 +msgid "The :mod:`random` module provides tools for making random selections::" +msgstr ":mod:`random` 模块提供了进行随机选择的工具::" + +#: ../../tutorial/stdlib.rst:157 +msgid "" +"The :mod:`statistics` module calculates basic statistical properties (the " +"mean, median, variance, etc.) of numeric data::" +msgstr ":mod:`statistics` 模块计算数值数据的基本统计属性(均值,中位数,方差等)::" + +#: ../../tutorial/stdlib.rst:169 +msgid "" +"The SciPy project has many other modules for numerical " +"computations." +msgstr "SciPy项目 有许多其他模块用于数值计算。" + +#: ../../tutorial/stdlib.rst:175 +msgid "Internet Access" +msgstr "互联网访问" + +#: ../../tutorial/stdlib.rst:177 +msgid "" +"There are a number of modules for accessing the internet and processing " +"internet protocols. Two of the simplest are :mod:`urllib.request` for " +"retrieving data from URLs and :mod:`smtplib` for sending mail::" +msgstr "" +"有许多模块可用于访问互联网和处理互联网协议。其中两个最简单的 :mod:`urllib.request` 用于从URL检索数据,以及 " +":mod:`smtplib` 用于发送邮件::" + +#: ../../tutorial/stdlib.rst:200 +msgid "" +"(Note that the second example needs a mailserver running on localhost.)" +msgstr "(请注意,第二个示例需要在localhost上运行的邮件服务器。)" + +#: ../../tutorial/stdlib.rst:206 +msgid "Dates and Times" +msgstr "日期和时间" + +#: ../../tutorial/stdlib.rst:208 +msgid "" +"The :mod:`datetime` module supplies classes for manipulating dates and times" +" in both simple and complex ways. While date and time arithmetic is " +"supported, the focus of the implementation is on efficient member extraction" +" for output formatting and manipulation. The module also supports objects " +"that are timezone aware. ::" +msgstr "" +":mod:`datetime` " +"模块提供了以简单和复杂的方式操作日期和时间的类。虽然支持日期和时间算法,但实现的重点是有效的成员提取以进行输出格式化和操作。该模块还支持可感知时区的对象。" +" ::" + +#: ../../tutorial/stdlib.rst:232 +msgid "Data Compression" +msgstr "数据压缩" + +#: ../../tutorial/stdlib.rst:234 +msgid "" +"Common data archiving and compression formats are directly supported by " +"modules including: :mod:`zlib`, :mod:`gzip`, :mod:`bz2`, :mod:`lzma`, " +":mod:`zipfile` and :mod:`tarfile`. ::" +msgstr "" +"常见的数据存档和压缩格式由模块直接支持,包括::mod:`zlib`, :mod:`gzip`, :mod:`bz2`, :mod:`lzma`, " +":mod:`zipfile` 和 :mod:`tarfile`。::" + +#: ../../tutorial/stdlib.rst:254 +msgid "Performance Measurement" +msgstr "性能测量" + +#: ../../tutorial/stdlib.rst:256 +msgid "" +"Some Python users develop a deep interest in knowing the relative " +"performance of different approaches to the same problem. Python provides a " +"measurement tool that answers those questions immediately." +msgstr "一些Python用户对了解同一问题的不同方法的相对性能产生了浓厚的兴趣。 Python提供了一种可以立即回答这些问题的测量工具。" + +#: ../../tutorial/stdlib.rst:260 +msgid "" +"For example, it may be tempting to use the tuple packing and unpacking " +"feature instead of the traditional approach to swapping arguments. The " +":mod:`timeit` module quickly demonstrates a modest performance advantage::" +msgstr "例如,元组封包和拆包功能相比传统的交换参数可能更具吸引力。:mod:`timeit` 模块可以快速演示在运行效率方面一定的优势::" + +#: ../../tutorial/stdlib.rst:270 +msgid "" +"In contrast to :mod:`timeit`'s fine level of granularity, the :mod:`profile`" +" and :mod:`pstats` modules provide tools for identifying time critical " +"sections in larger blocks of code." +msgstr "" +"与 :mod:`timeit` 的精细粒度级别相反, :mod:`profile` 和 :mod:`pstats` " +"模块提供了用于在较大的代码块中识别时间关键部分的工具。" + +#: ../../tutorial/stdlib.rst:278 +msgid "Quality Control" +msgstr "质量控制" + +#: ../../tutorial/stdlib.rst:280 +msgid "" +"One approach for developing high quality software is to write tests for each" +" function as it is developed and to run those tests frequently during the " +"development process." +msgstr "开发高质量软件的一种方法是在开发过程中为每个函数编写测试,并在开发过程中经常运行这些测试。" + +#: ../../tutorial/stdlib.rst:284 +msgid "" +"The :mod:`doctest` module provides a tool for scanning a module and " +"validating tests embedded in a program's docstrings. Test construction is " +"as simple as cutting-and-pasting a typical call along with its results into " +"the docstring. This improves the documentation by providing the user with an" +" example and it allows the doctest module to make sure the code remains true" +" to the documentation::" +msgstr "" +":mod:`doctest` " +"模块提供了一个工具,用于扫描模块并验证程序文档字符串中嵌入的测试。测试构造就像将典型调用及其结果剪切并粘贴到文档字符串一样简单。这通过向用户提供示例来改进文档,并且它允许doctest模块确保代码保持对文档的真实::" + +#: ../../tutorial/stdlib.rst:302 +msgid "" +"The :mod:`unittest` module is not as effortless as the :mod:`doctest` " +"module, but it allows a more comprehensive set of tests to be maintained in " +"a separate file::" +msgstr ":mod:`unittest` 模块不像 :mod:`doctest` 模块那样易于使用,但它允许在一个单独的文件中维护更全面的测试集::" + +#: ../../tutorial/stdlib.rst:324 +msgid "Batteries Included" +msgstr "自带电池" + +#: ../../tutorial/stdlib.rst:326 +msgid "" +"Python has a \"batteries included\" philosophy. This is best seen through " +"the sophisticated and robust capabilities of its larger packages. For " +"example:" +msgstr "Python有“自带电池”的理念。通过其包的复杂和强大功能可以最好地看到这一点。例如:" + +#: ../../tutorial/stdlib.rst:329 +msgid "" +"The :mod:`xmlrpc.client` and :mod:`xmlrpc.server` modules make implementing " +"remote procedure calls into an almost trivial task. Despite the modules' " +"names, no direct knowledge or handling of XML is needed." +msgstr "" +":mod:`xmlrpc.client` 和 :mod:`xmlrpc.server` 模块使得实现远程过程调用变成了小菜一碟。 " +"尽管存在于模块名称中,但用户不需要直接了解或处理 XML。" + +#: ../../tutorial/stdlib.rst:333 +msgid "" +"The :mod:`email` package is a library for managing email messages, including" +" MIME and other :rfc:`2822`-based message documents. Unlike :mod:`smtplib` " +"and :mod:`poplib` which actually send and receive messages, the email " +"package has a complete toolset for building or decoding complex message " +"structures (including attachments) and for implementing internet encoding " +"and header protocols." +msgstr "" +":mod:`email` 包是一个用于管理电子邮件的库,包括MIME和其他:基于 :rfc:`2822` 的邮件文档。与 :mod:`smtplib` " +"和 :mod:`poplib` " +"实际上发送和接收消息不同,电子邮件包具有完整的工具集,用于构建或解码复杂的消息结构(包括附件)以及实现互联网编码和标头协议。" + +#: ../../tutorial/stdlib.rst:340 +msgid "" +"The :mod:`json` package provides robust support for parsing this popular " +"data interchange format. The :mod:`csv` module supports direct reading and " +"writing of files in Comma-Separated Value format, commonly supported by " +"databases and spreadsheets. XML processing is supported by the " +":mod:`xml.etree.ElementTree`, :mod:`xml.dom` and :mod:`xml.sax` packages. " +"Together, these modules and packages greatly simplify data interchange " +"between Python applications and other tools." +msgstr "" +" :mod:`json` 包为解析这种流行的数据交换格式提供了强大的支持。 :mod:`csv` " +"模块支持以逗号分隔值格式直接读取和写入文件,这些格式通常由数据库和电子表格支持。 XML处理由 :mod:`xml.etree.ElementTree`" +" , :mod:`xml.dom` 和 :mod:`xml.sax` " +"包支持。这些模块和软件包共同大大简化了Python应用程序和其他工具之间的数据交换。" + +#: ../../tutorial/stdlib.rst:349 +msgid "" +"The :mod:`sqlite3` module is a wrapper for the SQLite database library, " +"providing a persistent database that can be updated and accessed using " +"slightly nonstandard SQL syntax." +msgstr ":mod:`sqlite3` 模块是SQLite数据库库的包装器,提供了一个可以使用稍微非标准的SQL语法更新和访问的持久数据库。" + +#: ../../tutorial/stdlib.rst:353 +msgid "" +"Internationalization is supported by a number of modules including " +":mod:`gettext`, :mod:`locale`, and the :mod:`codecs` package." +msgstr "国际化由许多模块支持,包括 :mod:`gettext` , :mod:`locale` ,以及 :mod:`codecs` 包。" diff --git a/tutorial/stdlib2.po b/tutorial/stdlib2.po new file mode 100644 index 000000000..43a15aa3b --- /dev/null +++ b/tutorial/stdlib2.po @@ -0,0 +1,372 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) 2001-2022, Python Software Foundation +# This file is distributed under the same license as the Python package. +# FIRST AUTHOR , YEAR. +# +# Translators: +# ww song , 2018 +# Henry Zhu , 2018 +# SKY H. , 2018 +# Freesand Leo , 2020 +# +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: Python 3.9\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2022-11-04 14:34+0000\n" +"PO-Revision-Date: 2017-02-16 23:41+0000\n" +"Last-Translator: Freesand Leo , 2020\n" +"Language-Team: Chinese (China) (https://www.transifex.com/python-doc/teams/5390/zh_CN/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: zh_CN\n" +"Plural-Forms: nplurals=1; plural=0;\n" + +#: ../../tutorial/stdlib2.rst:5 +msgid "Brief Tour of the Standard Library --- Part II" +msgstr "标准库简介 —— 第二部分" + +#: ../../tutorial/stdlib2.rst:7 +msgid "" +"This second tour covers more advanced modules that support professional " +"programming needs. These modules rarely occur in small scripts." +msgstr "第二部分涵盖了专业编程所需要的更高级的模块。这些模块很少用在小脚本中。" + +#: ../../tutorial/stdlib2.rst:14 +msgid "Output Formatting" +msgstr "格式化输出" + +#: ../../tutorial/stdlib2.rst:16 +msgid "" +"The :mod:`reprlib` module provides a version of :func:`repr` customized for " +"abbreviated displays of large or deeply nested containers::" +msgstr ":mod:`reprlib` 模块提供了一个定制化版本的 :func:`repr` 函数,用于缩略显示大型或深层嵌套的容器对象::" + +#: ../../tutorial/stdlib2.rst:23 +msgid "" +"The :mod:`pprint` module offers more sophisticated control over printing " +"both built-in and user defined objects in a way that is readable by the " +"interpreter. When the result is longer than one line, the \"pretty printer\"" +" adds line breaks and indentation to more clearly reveal data structure::" +msgstr "" +":mod:`pprint` " +"模块提供了更加复杂的打印控制,其输出的内置对象和用户自定义对象能够被解释器直接读取。当输出结果过长而需要折行时,“美化输出机制”会添加换行符和缩进,以更清楚地展示数据结构::" + +#: ../../tutorial/stdlib2.rst:39 +msgid "" +"The :mod:`textwrap` module formats paragraphs of text to fit a given screen " +"width::" +msgstr ":mod:`textwrap` 模块能够格式化文本段落,以适应给定的屏幕宽度::" + +#: ../../tutorial/stdlib2.rst:53 +msgid "" +"The :mod:`locale` module accesses a database of culture specific data " +"formats. The grouping attribute of locale's format function provides a " +"direct way of formatting numbers with group separators::" +msgstr "" +":mod:`locale` 模块处理与特定地域文化相关的数据格式。locale 模块的 format 函数包含一个 grouping " +"属性,可直接将数字格式化为带有组分隔符的样式::" + +#: ../../tutorial/stdlib2.rst:72 +msgid "Templating" +msgstr "模板" + +#: ../../tutorial/stdlib2.rst:74 +msgid "" +"The :mod:`string` module includes a versatile :class:`~string.Template` " +"class with a simplified syntax suitable for editing by end-users. This " +"allows users to customize their applications without having to alter the " +"application." +msgstr "" +":mod:`string` 模块包含一个通用的 :class:`~string.Template` " +"类,具有适用于最终用户的简化语法。它允许用户在不更改应用逻辑的情况下定制自己的应用。" + +#: ../../tutorial/stdlib2.rst:78 +msgid "" +"The format uses placeholder names formed by ``$`` with valid Python " +"identifiers (alphanumeric characters and underscores). Surrounding the " +"placeholder with braces allows it to be followed by more alphanumeric " +"letters with no intervening spaces. Writing ``$$`` creates a single escaped" +" ``$``::" +msgstr "" +"上述格式化操作是通过占位符实现的,占位符由 ``$`` 加上合法的 Python " +"标识符(只能包含字母、数字和下划线)构成。一旦使用花括号将占位符括起来,就可以在后面直接跟上更多的字母和数字而无需空格分割。``$$`` " +"将被转义成单个字符 ``$``::" + +#: ../../tutorial/stdlib2.rst:88 +msgid "" +"The :meth:`~string.Template.substitute` method raises a :exc:`KeyError` when" +" a placeholder is not supplied in a dictionary or a keyword argument. For " +"mail-merge style applications, user supplied data may be incomplete and the " +":meth:`~string.Template.safe_substitute` method may be more appropriate --- " +"it will leave placeholders unchanged if data is missing::" +msgstr "" +"如果在字典或关键字参数中未提供某个占位符的值,那么 :meth:`~string.Template.substitute` 方法将抛出 " +":exc:`KeyError`\\ 。对于邮件合并类型的应用,用户提供的数据有可能是不完整的,此时使用 " +":meth:`~string.Template.safe_substitute` 方法更加合适 —— 如果数据缺失,它会直接将占位符原样保留。" + +#: ../../tutorial/stdlib2.rst:103 +msgid "" +"Template subclasses can specify a custom delimiter. For example, a batch " +"renaming utility for a photo browser may elect to use percent signs for " +"placeholders such as the current date, image sequence number, or file " +"format::" +msgstr "Template 的子类可以自定义分隔符。例如,以下是某个照片浏览器的批量重命名功能,采用了百分号作为日期、照片序号和照片格式的占位符::" + +#: ../../tutorial/stdlib2.rst:125 +msgid "" +"Another application for templating is separating program logic from the " +"details of multiple output formats. This makes it possible to substitute " +"custom templates for XML files, plain text reports, and HTML web reports." +msgstr "" +"模板的另一个应用是将程序逻辑与多样的格式化输出细节分离开来。这使得对 XML 文件、纯文本报表和 HTML 网络报表使用自定义模板成为可能。" + +#: ../../tutorial/stdlib2.rst:133 +msgid "Working with Binary Data Record Layouts" +msgstr "使用二进制数据记录格式" + +#: ../../tutorial/stdlib2.rst:135 +msgid "" +"The :mod:`struct` module provides :func:`~struct.pack` and " +":func:`~struct.unpack` functions for working with variable length binary " +"record formats. The following example shows how to loop through header " +"information in a ZIP file without using the :mod:`zipfile` module. Pack " +"codes ``\"H\"`` and ``\"I\"`` represent two and four byte unsigned numbers " +"respectively. The ``\"<\"`` indicates that they are standard size and in " +"little-endian byte order::" +msgstr "" +":mod:`struct` 模块提供了 :func:`~struct.pack` 和 :func:`~struct.unpack` " +"函数,用于处理不定长度的二进制记录格式。下面的例子展示了在不使用 :mod:`zipfile` 模块的情况下,如何循环遍历一个 ZIP " +"文件的所有头信息。Pack 代码 ``\"H\"`` 和 ``\"I\"`` 分别代表两字节和四字节无符号整数。\\ ``\"<\"`` " +"代表它们是标准尺寸的小端字节序::" + +#: ../../tutorial/stdlib2.rst:166 +msgid "Multi-threading" +msgstr "多线程" + +#: ../../tutorial/stdlib2.rst:168 +msgid "" +"Threading is a technique for decoupling tasks which are not sequentially " +"dependent. Threads can be used to improve the responsiveness of " +"applications that accept user input while other tasks run in the background." +" A related use case is running I/O in parallel with computations in another" +" thread." +msgstr "" +"线程是一种对于非顺序依赖的多个任务进行解耦的技术。多线程可以提高应用的响应效率,当接收用户输入的同时,保持其他任务在后台运行。一个有关的应用场景是,将 " +"I/O 和计算运行在两个并行的线程中。" + +#: ../../tutorial/stdlib2.rst:173 +msgid "" +"The following code shows how the high level :mod:`threading` module can run " +"tasks in background while the main program continues to run::" +msgstr "以下代码展示了高阶的 :mod:`threading` 模块如何在后台运行任务,且不影响主程序的继续运行::" + +#: ../../tutorial/stdlib2.rst:197 +msgid "" +"The principal challenge of multi-threaded applications is coordinating " +"threads that share data or other resources. To that end, the threading " +"module provides a number of synchronization primitives including locks, " +"events, condition variables, and semaphores." +msgstr "" +"多线程应用面临的主要挑战是,相互协调的多个线程之间需要共享数据或其他资源。为此,threading " +"模块提供了多个同步操作原语,包括线程锁、事件、条件变量和信号量。" + +#: ../../tutorial/stdlib2.rst:202 +msgid "" +"While those tools are powerful, minor design errors can result in problems " +"that are difficult to reproduce. So, the preferred approach to task " +"coordination is to concentrate all access to a resource in a single thread " +"and then use the :mod:`queue` module to feed that thread with requests from " +"other threads. Applications using :class:`~queue.Queue` objects for inter-" +"thread communication and coordination are easier to design, more readable, " +"and more reliable." +msgstr "" +"尽管这些工具非常强大,但微小的设计错误却可以导致一些难以复现的问题。因此,实现多任务协作的首选方法是将所有对资源的请求集中到一个线程中,然后使用 " +":mod:`queue` 模块向该线程供应来自其他线程的请求。 应用程序使用 :class:`~queue.Queue` " +"对象进行线程间通信和协调,更易于设计,更易读,更可靠。" + +#: ../../tutorial/stdlib2.rst:213 +msgid "Logging" +msgstr "日志" + +#: ../../tutorial/stdlib2.rst:215 +msgid "" +"The :mod:`logging` module offers a full featured and flexible logging " +"system. At its simplest, log messages are sent to a file or to " +"``sys.stderr``::" +msgstr "" +":mod:`logging` 模块提供功能齐全且灵活的日志记录系统。在最简单的情况下,日志消息被发送到文件或 ``sys.stderr``\\ ::" + +#: ../../tutorial/stdlib2.rst:225 +msgid "This produces the following output:" +msgstr "这会产生以下输出:" + +#: ../../tutorial/stdlib2.rst:233 +msgid "" +"By default, informational and debugging messages are suppressed and the " +"output is sent to standard error. Other output options include routing " +"messages through email, datagrams, sockets, or to an HTTP Server. New " +"filters can select different routing based on message priority: " +":const:`~logging.DEBUG`, :const:`~logging.INFO`, :const:`~logging.WARNING`, " +":const:`~logging.ERROR`, and :const:`~logging.CRITICAL`." +msgstr "" +"默认情况下,informational 和 debugging " +"消息被压制,输出会发送到标准错误流。其他输出选项包括将消息转发到电子邮件,数据报,套接字或 HTTP " +"服务器。新的过滤器可以根据消息优先级选择不同的路由方式:\\ :const:`~logging.DEBUG`\\ ,\\ " +":const:`~logging.INFO`\\ ,\\ :const:`~logging.WARNING`\\ ,\\ " +":const:`~logging.ERROR`\\ ,和 :const:`~logging.CRITICAL`\\ 。" + +#: ../../tutorial/stdlib2.rst:240 +msgid "" +"The logging system can be configured directly from Python or can be loaded " +"from a user editable configuration file for customized logging without " +"altering the application." +msgstr "日志系统可以直接从 Python 配置,也可以从用户配置文件加载,以便自定义日志记录而无需更改应用程序。" + +#: ../../tutorial/stdlib2.rst:248 +msgid "Weak References" +msgstr "弱引用" + +#: ../../tutorial/stdlib2.rst:250 +msgid "" +"Python does automatic memory management (reference counting for most objects" +" and :term:`garbage collection` to eliminate cycles). The memory is freed " +"shortly after the last reference to it has been eliminated." +msgstr "" +"Python 会自动进行内存管理(对大多数对象进行引用计数并使用 :term:`garbage collection` 来清除循环引用)。 " +"当某个对象的最后一个引用被移除后不久就会释放其所占用的内存。" + +#: ../../tutorial/stdlib2.rst:254 +msgid "" +"This approach works fine for most applications but occasionally there is a " +"need to track objects only as long as they are being used by something else." +" Unfortunately, just tracking them creates a reference that makes them " +"permanent. The :mod:`weakref` module provides tools for tracking objects " +"without creating a reference. When the object is no longer needed, it is " +"automatically removed from a weakref table and a callback is triggered for " +"weakref objects. Typical applications include caching objects that are " +"expensive to create::" +msgstr "" +"此方式对大多数应用来说都适用,但偶尔也必须在对象持续被其他对象所使用时跟踪它们。 不幸的是,跟踪它们将创建一个会令其永久化的引用。 " +":mod:`weakref` 模块提供的工具可以不必创建引用就能跟踪对象。 " +"当对象不再需要时,它将自动从一个弱引用表中被移除,并为弱引用对象触发一个回调。 典型应用包括对创建开销较大的对象进行缓存::" + +#: ../../tutorial/stdlib2.rst:289 +msgid "Tools for Working with Lists" +msgstr "用于操作列表的工具" + +#: ../../tutorial/stdlib2.rst:291 +msgid "" +"Many data structure needs can be met with the built-in list type. However, " +"sometimes there is a need for alternative implementations with different " +"performance trade-offs." +msgstr "许多对于数据结构的需求可以通过内置列表类型来满足。 但是,有时也会需要具有不同效费比的替代实现。" + +#: ../../tutorial/stdlib2.rst:295 +msgid "" +"The :mod:`array` module provides an :class:`~array.array()` object that is " +"like a list that stores only homogeneous data and stores it more compactly." +" The following example shows an array of numbers stored as two byte " +"unsigned binary numbers (typecode ``\"H\"``) rather than the usual 16 bytes " +"per entry for regular lists of Python int objects::" +msgstr "" +":mod:`array` 模块提供了一种 :class:`~array.array()` 对象,它类似于列表,但只能存储类型一致的数据且存储密集更高。 " +"下面的例子演示了一个以两个字节为存储单元的无符号二进制数值的数组 (类型码为 ``\"H\"``),而对于普通列表来说,每个条目存储为标准 Python" +" 的 int 对象通常要占用16 个字节::" + +#: ../../tutorial/stdlib2.rst:308 +msgid "" +"The :mod:`collections` module provides a :class:`~collections.deque()` " +"object that is like a list with faster appends and pops from the left side " +"but slower lookups in the middle. These objects are well suited for " +"implementing queues and breadth first tree searches::" +msgstr "" +":mod:`collections` 模块提供了一种 :class:`~collections.deque()` " +"对象,它类似于列表,但从左端添加和弹出的速度较快,而在中间查找的速度较慢。 此种对象适用于实现队列和广度优先树搜索::" + +#: ../../tutorial/stdlib2.rst:329 +msgid "" +"In addition to alternative list implementations, the library also offers " +"other tools such as the :mod:`bisect` module with functions for manipulating" +" sorted lists::" +msgstr "在替代的列表实现以外,标准库也提供了其他工具,例如 :mod:`bisect` 模块具有用于操作有序列表的函数::" + +#: ../../tutorial/stdlib2.rst:339 +msgid "" +"The :mod:`heapq` module provides functions for implementing heaps based on " +"regular lists. The lowest valued entry is always kept at position zero. " +"This is useful for applications which repeatedly access the smallest element" +" but do not want to run a full list sort::" +msgstr "" +":mod:`heapq` 模块提供了基于常规列表来实现堆的函数。 最小值的条目总是保持在位置零。 " +"这对于需要重复访问最小元素而不希望运行完整列表排序的应用来说非常有用::" + +#: ../../tutorial/stdlib2.rst:355 +msgid "Decimal Floating Point Arithmetic" +msgstr "十进制浮点运算" + +#: ../../tutorial/stdlib2.rst:357 +msgid "" +"The :mod:`decimal` module offers a :class:`~decimal.Decimal` datatype for " +"decimal floating point arithmetic. Compared to the built-in :class:`float` " +"implementation of binary floating point, the class is especially helpful for" +msgstr "" +":mod:`decimal` 模块提供了一种 :class:`~decimal.Decimal` 数据类型用于十进制浮点运算。 相比内置的 " +":class:`float` 二进制浮点实现,该类特别适用于" + +#: ../../tutorial/stdlib2.rst:361 +msgid "" +"financial applications and other uses which require exact decimal " +"representation," +msgstr "财务应用和其他需要精确十进制表示的用途," + +#: ../../tutorial/stdlib2.rst:363 +msgid "control over precision," +msgstr "控制精度," + +#: ../../tutorial/stdlib2.rst:364 +msgid "control over rounding to meet legal or regulatory requirements," +msgstr "控制四舍五入以满足法律或监管要求," + +#: ../../tutorial/stdlib2.rst:365 +msgid "tracking of significant decimal places, or" +msgstr "跟踪有效小数位,或" + +#: ../../tutorial/stdlib2.rst:366 +msgid "" +"applications where the user expects the results to match calculations done " +"by hand." +msgstr "用户期望结果与手工完成的计算相匹配的应用程序。" + +#: ../../tutorial/stdlib2.rst:369 +msgid "" +"For example, calculating a 5% tax on a 70 cent phone charge gives different " +"results in decimal floating point and binary floating point. The difference " +"becomes significant if the results are rounded to the nearest cent::" +msgstr "例如,使用十进制浮点和二进制浮点数计算70美分手机和5%税的总费用,会产生的不同结果。如果结果四舍五入到最接近的分数差异会更大::" + +#: ../../tutorial/stdlib2.rst:379 +msgid "" +"The :class:`~decimal.Decimal` result keeps a trailing zero, automatically " +"inferring four place significance from multiplicands with two place " +"significance. Decimal reproduces mathematics as done by hand and avoids " +"issues that can arise when binary floating point cannot exactly represent " +"decimal quantities." +msgstr "" +":class:`~decimal.Decimal` 表示的结果会保留尾部的零,并根据具有两个有效位的被乘数自动推出四个有效位。 Decimal " +"可以模拟手工运算来避免当二进制浮点数无法精确表示十进制数时会导致的问题。" + +#: ../../tutorial/stdlib2.rst:385 +msgid "" +"Exact representation enables the :class:`~decimal.Decimal` class to perform " +"modulo calculations and equality tests that are unsuitable for binary " +"floating point::" +msgstr "精确表示特性使得 :class:`~decimal.Decimal` 类能够执行对于二进制浮点数来说不适用的模运算和相等性检测::" + +#: ../../tutorial/stdlib2.rst:399 +msgid "" +"The :mod:`decimal` module provides arithmetic with as much precision as " +"needed::" +msgstr ":mod:`decimal` 模块提供了运算所需要的足够精度::" diff --git a/tutorial/venv.po b/tutorial/venv.po new file mode 100644 index 000000000..15e45ff37 --- /dev/null +++ b/tutorial/venv.po @@ -0,0 +1,234 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) 2001-2022, Python Software Foundation +# This file is distributed under the same license as the Python package. +# FIRST AUTHOR , YEAR. +# +# Translators: +# Fei Yin , 2018 +# ww song , 2018 +# KaMingChung , 2020 +# Freesand Leo , 2021 +# +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: Python 3.9\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2022-11-04 14:34+0000\n" +"PO-Revision-Date: 2017-02-16 23:41+0000\n" +"Last-Translator: Freesand Leo , 2021\n" +"Language-Team: Chinese (China) (https://www.transifex.com/python-doc/teams/5390/zh_CN/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: zh_CN\n" +"Plural-Forms: nplurals=1; plural=0;\n" + +#: ../../tutorial/venv.rst:6 +msgid "Virtual Environments and Packages" +msgstr "虚拟环境和包" + +#: ../../tutorial/venv.rst:9 +msgid "Introduction" +msgstr "概述" + +#: ../../tutorial/venv.rst:11 +msgid "" +"Python applications will often use packages and modules that don't come as " +"part of the standard library. Applications will sometimes need a specific " +"version of a library, because the application may require that a particular " +"bug has been fixed or the application may be written using an obsolete " +"version of the library's interface." +msgstr "" +"Python应用程序通常会使用不在标准库内的软件包和模块。应用程序有时需要特定版本的库,因为应用程序可能需要修复特定的错误,或者可以使用库的过时版本的接口编写应用程序。" + +#: ../../tutorial/venv.rst:17 +msgid "" +"This means it may not be possible for one Python installation to meet the " +"requirements of every application. If application A needs version 1.0 of a " +"particular module but application B needs version 2.0, then the requirements" +" are in conflict and installing either version 1.0 or 2.0 will leave one " +"application unable to run." +msgstr "" +"这意味着一个Python安装可能无法满足每个应用程序的要求。如果应用程序A需要特定模块的1.0版本但应用程序B需要2.0版本,则需求存在冲突,安装版本1.0或2.0将导致某一个应用程序无法运行。" + +#: ../../tutorial/venv.rst:23 +msgid "" +"The solution for this problem is to create a :term:`virtual environment`, a " +"self-contained directory tree that contains a Python installation for a " +"particular version of Python, plus a number of additional packages." +msgstr "" +"这个问题的解决方案是创建一个 :term:`virtual environment`,一个目录树,其中安装有特定Python版本,以及许多其他包。" + +#: ../../tutorial/venv.rst:27 +msgid "" +"Different applications can then use different virtual environments. To " +"resolve the earlier example of conflicting requirements, application A can " +"have its own virtual environment with version 1.0 installed while " +"application B has another virtual environment with version 2.0. If " +"application B requires a library be upgraded to version 3.0, this will not " +"affect application A's environment." +msgstr "" +"然后,不同的应用将可以使用不同的虚拟环境。 要解决先前需求相冲突的例子,应用程序 A 可以拥有自己的 安装了 1.0 版本的虚拟环境,而应用程序 B " +"则拥有安装了 2.0 版本的另一个虚拟环境。 如果应用程序 B 要求将某个库升级到 3.0 版本,也不会影响应用程序 A 的环境。" + +#: ../../tutorial/venv.rst:36 +msgid "Creating Virtual Environments" +msgstr "创建虚拟环境" + +#: ../../tutorial/venv.rst:38 +msgid "" +"The module used to create and manage virtual environments is called " +":mod:`venv`. :mod:`venv` will usually install the most recent version of " +"Python that you have available. If you have multiple versions of Python on " +"your system, you can select a specific Python version by running ``python3``" +" or whichever version you want." +msgstr "" +"用于创建和管理虚拟环境的模块称为 :mod:`venv`。:mod:`venv` 通常会安装你可用的最新版本的 Python。如果您的系统上有多个版本的" +" Python,您可以通过运行 ``python3`` 或您想要的任何版本来选择特定的Python版本。" + +#: ../../tutorial/venv.rst:44 +msgid "" +"To create a virtual environment, decide upon a directory where you want to " +"place it, and run the :mod:`venv` module as a script with the directory " +"path::" +msgstr "要创建虚拟环境,请确定要放置它的目录,并将 :mod:`venv` 模块作为脚本运行目录路径::" + +#: ../../tutorial/venv.rst:49 +msgid "" +"This will create the ``tutorial-env`` directory if it doesn't exist, and " +"also create directories inside it containing a copy of the Python " +"interpreter, the standard library, and various supporting files." +msgstr "" +"如果 ``tutorial-env`` 目录不存在,它将为你创建一个,并在其中创建包含Python解释器,标准库和各种支持文件的副本的目录。" + +#: ../../tutorial/venv.rst:53 +msgid "" +"A common directory location for a virtual environment is ``.venv``. This " +"name keeps the directory typically hidden in your shell and thus out of the " +"way while giving it a name that explains why the directory exists. It also " +"prevents clashing with ``.env`` environment variable definition files that " +"some tooling supports." +msgstr "" +"虚拟环境的常用目录位置是 ``.venv``。 这个名称通常会令该目录在你的终端中保持隐藏,从而避免需要对所在目录进行额外解释的一般名称。 " +"它还能防止与某些工具所支持的 ``.env`` 环境变量定义文件发生冲突。" + +#: ../../tutorial/venv.rst:59 +msgid "Once you've created a virtual environment, you may activate it." +msgstr "创建虚拟环境后,您可以激活它。" + +#: ../../tutorial/venv.rst:61 +msgid "On Windows, run::" +msgstr "在Windows上,运行::" + +#: ../../tutorial/venv.rst:65 +msgid "On Unix or MacOS, run::" +msgstr "在Unix或MacOS上,运行::" + +#: ../../tutorial/venv.rst:69 +msgid "" +"(This script is written for the bash shell. If you use the :program:`csh` " +"or :program:`fish` shells, there are alternate ``activate.csh`` and " +"``activate.fish`` scripts you should use instead.)" +msgstr "" +"(这个脚本是为bash shell编写的。如果你使用 :program:`csh` 或 :program:`fish` shell,你应该改用 " +"``activate.csh`` 或 ``activate.fish`` 脚本。)" + +#: ../../tutorial/venv.rst:74 +msgid "" +"Activating the virtual environment will change your shell's prompt to show " +"what virtual environment you're using, and modify the environment so that " +"running ``python`` will get you that particular version and installation of " +"Python. For example:" +msgstr "" +"激活虚拟环境将改变你所用终端的提示符,以显示你正在使用的虚拟环境,并修改环境以使 ``python`` 命令所运行的将是已安装的特定 Python " +"版本。 例如:" + +#: ../../tutorial/venv.rst:93 +msgid "Managing Packages with pip" +msgstr "使用pip管理包" + +#: ../../tutorial/venv.rst:95 +msgid "" +"You can install, upgrade, and remove packages using a program called " +":program:`pip`. By default ``pip`` will install packages from the Python " +"Package Index, . You can browse the Python Package Index " +"by going to it in your web browser." +msgstr "" +"你可以使用一个名为 :program:`pip` 的程序来安装、升级和移除软件包。 默认情况下 ``pip`` 将从 Python Package " +"Index 安装软件包。 你可以在你的 web 浏览器中查看 Python Package Index。" + +#: ../../tutorial/venv.rst:100 +msgid "" +"``pip`` has a number of subcommands: \"install\", \"uninstall\", \"freeze\"," +" etc. (Consult the :ref:`installing-index` guide for complete documentation" +" for ``pip``.)" +msgstr "" +"``pip`` 有许多子命令: \"install\", \"uninstall\", \"freeze\" 等等。 (请在 " +":ref:`installing-index` 指南页查看完整的 ``pip`` 文档。)" + +#: ../../tutorial/venv.rst:104 +msgid "" +"You can install the latest version of a package by specifying a package's " +"name:" +msgstr "您可以通过指定包的名称来安装最新版本的包:" + +#: ../../tutorial/venv.rst:115 +msgid "" +"You can also install a specific version of a package by giving the package " +"name followed by ``==`` and the version number:" +msgstr "您还可以通过提供包名称后跟 ``==`` 和版本号来安装特定版本的包:" + +#: ../../tutorial/venv.rst:126 +msgid "" +"If you re-run this command, ``pip`` will notice that the requested version " +"is already installed and do nothing. You can supply a different version " +"number to get that version, or you can run ``pip install --upgrade`` to " +"upgrade the package to the latest version:" +msgstr "" +"如果你重新运行这个命令,``pip`` 会注意到已经安装了所请求的版本并且什么都不做。您可以提供不同的版本号来获取该版本,或者您可以运行 ``pip " +"install --upgrade`` 将软件包升级到最新版本:" + +#: ../../tutorial/venv.rst:141 +msgid "" +"``pip uninstall`` followed by one or more package names will remove the " +"packages from the virtual environment." +msgstr "``pip uninstall`` 后跟一个或多个包名称将从虚拟环境中删除包。" + +#: ../../tutorial/venv.rst:144 +msgid "``pip show`` will display information about a particular package:" +msgstr "``pip show`` 将显示有关特定包的信息:" + +#: ../../tutorial/venv.rst:161 +msgid "" +"``pip list`` will display all of the packages installed in the virtual " +"environment:" +msgstr "``pip list`` 将显示虚拟环境中安装的所有软件包:" + +#: ../../tutorial/venv.rst:173 +msgid "" +"``pip freeze`` will produce a similar list of the installed packages, but " +"the output uses the format that ``pip install`` expects. A common convention" +" is to put this list in a ``requirements.txt`` file:" +msgstr "" +"`pip freeze`` 将生成一个类似的已安装包列表,但输出使用 ``pip install`` 期望的格式。一个常见的约定是将此列表放在 " +"``requirements.txt`` 文件中:" + +#: ../../tutorial/venv.rst:185 +msgid "" +"The ``requirements.txt`` can then be committed to version control and " +"shipped as part of an application. Users can then install all the necessary" +" packages with ``install -r``:" +msgstr "" +"然后可以将 ``requirements.txt`` 提交给版本控制并作为应用程序的一部分提供。然后用户可以使用 ``install -r`` " +"安装所有必需的包:" + +#: ../../tutorial/venv.rst:202 +msgid "" +"``pip`` has many more options. Consult the :ref:`installing-index` guide " +"for complete documentation for ``pip``. When you've written a package and " +"want to make it available on the Python Package Index, consult the " +":ref:`distributing-index` guide." +msgstr "" +"``pip`` 有更多选择。有关 ``pip`` 的完整文档,请参阅 :ref:`installing-index` 指南。当您编写一个包并希望在 " +"Python 包索引中使它可用时,请参考 :ref:`distributing-index` 指南。" diff --git a/tutorial/whatnow.po b/tutorial/whatnow.po new file mode 100644 index 000000000..21e5e243d --- /dev/null +++ b/tutorial/whatnow.po @@ -0,0 +1,162 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) 2001-2022, Python Software Foundation +# This file is distributed under the same license as the Python package. +# FIRST AUTHOR , YEAR. +# +# Translators: +# ww song , 2018 +# eric R , 2019 +# Freesand Leo , 2019 +# +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: Python 3.9\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2022-11-04 14:34+0000\n" +"PO-Revision-Date: 2017-02-16 23:41+0000\n" +"Last-Translator: Freesand Leo , 2019\n" +"Language-Team: Chinese (China) (https://www.transifex.com/python-doc/teams/5390/zh_CN/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: zh_CN\n" +"Plural-Forms: nplurals=1; plural=0;\n" + +#: ../../tutorial/whatnow.rst:5 +msgid "What Now?" +msgstr "接下来?" + +#: ../../tutorial/whatnow.rst:7 +msgid "" +"Reading this tutorial has probably reinforced your interest in using Python " +"--- you should be eager to apply Python to solving your real-world problems." +" Where should you go to learn more?" +msgstr "阅读本教程可能会增强您对使用Python的兴趣 - 您应该热衷于应用Python来解决您的实际问题。你应该去哪里了解更多?" + +#: ../../tutorial/whatnow.rst:11 +msgid "" +"This tutorial is part of Python's documentation set. Some other documents " +"in the set are:" +msgstr "本教程是Python文档集的一部分。其他文档:" + +#: ../../tutorial/whatnow.rst:14 +msgid ":ref:`library-index`:" +msgstr ":ref:`library-index`:" + +#: ../../tutorial/whatnow.rst:16 +msgid "" +"You should browse through this manual, which gives complete (though terse) " +"reference material about types, functions, and the modules in the standard " +"library. The standard Python distribution includes a *lot* of additional " +"code. There are modules to read Unix mailboxes, retrieve documents via HTTP," +" generate random numbers, parse command-line options, write CGI programs, " +"compress data, and many other tasks. Skimming through the Library Reference " +"will give you an idea of what's available." +msgstr "" +"您应该浏览本手册,该手册提供了有关标准库中的类型,功能和模块的完整(尽管简洁)参考资料。标准的Python发行版包含 *很多* " +"的附加代码。有些模块可以读取Unix邮箱,通过HTTP检索文档,生成随机数,解析命令行选项,编写CGI程序,压缩数据以及许多其他任务。浏览标准库参考可以了解更多可用的内容。" + +#: ../../tutorial/whatnow.rst:24 +msgid "" +":ref:`installing-index` explains how to install additional modules written " +"by other Python users." +msgstr ":ref:`installing-index` 解释了怎么安装由其他Python开发者编写的模块。" + +#: ../../tutorial/whatnow.rst:27 +msgid "" +":ref:`reference-index`: A detailed explanation of Python's syntax and " +"semantics. It's heavy reading, but is useful as a complete guide to the " +"language itself." +msgstr ":ref:`reference-index`: Python的语法和语义的详细解释。尽管阅读完非常繁重,但作为语言本身的完整指南是有用的。" + +#: ../../tutorial/whatnow.rst:31 +msgid "More Python resources:" +msgstr "更多Python资源:" + +#: ../../tutorial/whatnow.rst:33 +msgid "" +"https://www.python.org: The major Python Web site. It contains code, " +"documentation, and pointers to Python-related pages around the Web. This " +"Web site is mirrored in various places around the world, such as Europe, " +"Japan, and Australia; a mirror may be faster than the main site, depending " +"on your geographical location." +msgstr "" +"https://www.python.org " +":主要的Python网站。它包含代码,文档以及指向Web上与Python相关的页面的链接。该网站世界很多地区都有镜像,如欧洲,日本和澳大利亚;镜像可能比主站点更快,具体取决于您的地理位置。" + +#: ../../tutorial/whatnow.rst:39 +msgid "https://docs.python.org: Fast access to Python's documentation." +msgstr "https://docs.python.org :快速访问Python的文档。" + +#: ../../tutorial/whatnow.rst:41 +msgid "" +"https://pypi.org: The Python Package Index, previously also nicknamed the " +"Cheese Shop [#]_, is an index of user-created Python modules that are " +"available for download. Once you begin releasing code, you can register it " +"here so that others can find it." +msgstr "" +"https://pypi.org: The Python Package Index,以前也被昵称为 Cheese Shop [#]_,是可下载用户自制" +" Python 模块的索引。 当你要开始发布代码时,你可以在此处进行注册以便其他人能找到它。" + +#: ../../tutorial/whatnow.rst:46 +msgid "" +"https://code.activestate.com/recipes/langs/python/: The Python Cookbook is a" +" sizable collection of code examples, larger modules, and useful scripts. " +"Particularly notable contributions are collected in a book also titled " +"Python Cookbook (O'Reilly & Associates, ISBN 0-596-00797-3.)" +msgstr "" +"https://code.activestate.com/recipes/langs/python/ :Python " +"Cookbook是一个相当大的代码示例集,更多的模块和有用的脚本。特别值得注意的贡献收集在一本名为Python " +"Cookbook(O'Reilly&Associates,ISBN 0-596-00797-3)的书中。" + +#: ../../tutorial/whatnow.rst:51 +msgid "" +"http://www.pyvideo.org collects links to Python-related videos from " +"conferences and user-group meetings." +msgstr "http://www.pyvideo.org 从会议和用户组会议中收集与Python相关的视频的链接。" + +#: ../../tutorial/whatnow.rst:54 +msgid "" +"https://scipy.org: The Scientific Python project includes modules for fast " +"array computations and manipulations plus a host of packages for such things" +" as linear algebra, Fourier transforms, non-linear solvers, random number " +"distributions, statistical analysis and the like." +msgstr "" +"https://scipy.org :Ecientific " +"Python项目包括用于快速阵列计算和操作的模块,以及用于诸如线性代数,傅里叶变换,非线性求解器,随机数分布,统计分析等的一系列包。" + +#: ../../tutorial/whatnow.rst:59 +msgid "" +"For Python-related questions and problem reports, you can post to the " +"newsgroup :newsgroup:`comp.lang.python`, or send them to the mailing list at" +" python-list@python.org. The newsgroup and mailing list are gatewayed, so " +"messages posted to one will automatically be forwarded to the other. There " +"are hundreds of postings a day, asking (and answering) questions, suggesting" +" new features, and announcing new modules. Mailing list archives are " +"available at https://mail.python.org/pipermail/." +msgstr "" +"对于与Python相关的问题和问题报告,您可以发布到新闻组 :newsgroup:`comp.lang.python` " +",或者将它们发送到邮件列表python-" +"list@python.org。新闻组和邮件列表是互通的,因此发布到一个地方将自动转发给另一个。每天有数百个帖子,询问(和回答)问题,建议新功能,以及宣布新模块。邮件列表档案可在" +" https://mail.python.org/pipermail/ 上找到。" + +#: ../../tutorial/whatnow.rst:67 +msgid "" +"Before posting, be sure to check the list of :ref:`Frequently Asked " +"Questions ` (also called the FAQ). The FAQ answers many of the " +"questions that come up again and again, and may already contain the solution" +" for your problem." +msgstr "" +"在发问之前,请务必查看以下列表 :ref:`常见问题` (或简写为 " +"FAQ)。常见问题包含了很多一次又一次问到的问题及答案,并且可能已经包含了您的问题的解决方案。" + +#: ../../tutorial/whatnow.rst:73 +msgid "Footnotes" +msgstr "备注" + +#: ../../tutorial/whatnow.rst:74 +msgid "" +"\"Cheese Shop\" is a Monty Python's sketch: a customer enters a cheese shop," +" but whatever cheese he asks for, the clerk says it's missing." +msgstr "“Cheese Shop”是 Monty Python 的一个短剧:一位顾客来到一家奶酪商店,但无论他要哪种奶酪,店员都说没有货。" diff --git a/using/cmdline.po b/using/cmdline.po new file mode 100644 index 000000000..04bd7f75d --- /dev/null +++ b/using/cmdline.po @@ -0,0 +1,1453 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) 2001-2024, Python Software Foundation +# This file is distributed under the same license as the Python package. +# FIRST AUTHOR , YEAR. +# +# Translators: +# cdarlint , 2019 +# ppcfish , 2020 +# jaystone776 <1732865113@qq.com>, 2021 +# Freesand Leo , 2024 +# Rafael Fontenelle , 2024 +# +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: Python 3.9\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2024-08-30 16:51+0000\n" +"PO-Revision-Date: 2017-02-16 23:41+0000\n" +"Last-Translator: Rafael Fontenelle , 2024\n" +"Language-Team: Chinese (China) (https://app.transifex.com/python-doc/teams/5390/zh_CN/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: zh_CN\n" +"Plural-Forms: nplurals=1; plural=0;\n" + +#: ../../using/cmdline.rst:9 +msgid "Command line and environment" +msgstr "命令行与环境" + +#: ../../using/cmdline.rst:11 +msgid "" +"The CPython interpreter scans the command line and the environment for " +"various settings." +msgstr "为获取各种设置信息,CPython 解析器会扫描命令行与环境。" + +#: ../../using/cmdline.rst:16 +msgid "" +"Other implementations' command line schemes may differ. See " +":ref:`implementations` for further resources." +msgstr "其他实现的命令行方案可能会有所不同。 详见 :ref:`implementations`。" + +#: ../../using/cmdline.rst:23 +msgid "Command line" +msgstr "命令行" + +#: ../../using/cmdline.rst:25 +msgid "When invoking Python, you may specify any of these options::" +msgstr "调用 Python 时,可以指定下列任意选项:" + +#: ../../using/cmdline.rst:29 +msgid "" +"The most common use case is, of course, a simple invocation of a script::" +msgstr "最常见的用例是启动时执行脚本:" + +#: ../../using/cmdline.rst:37 +msgid "Interface options" +msgstr "接口选项" + +#: ../../using/cmdline.rst:39 +msgid "" +"The interpreter interface resembles that of the UNIX shell, but provides " +"some additional methods of invocation:" +msgstr "解释器接口类似于 UNIX shell,但提供了额外的调用方法:" + +#: ../../using/cmdline.rst:42 +msgid "" +"When called with standard input connected to a tty device, it prompts for " +"commands and executes them until an EOF (an end-of-file character, you can " +"produce that with :kbd:`Ctrl-D` on UNIX or :kbd:`Ctrl-Z, Enter` on Windows) " +"is read." +msgstr "" +"用连接到 tty 设备的标准输入调用时,会提示输入并执行命令,输入 EOF (文件结束符,UNIX 中按 :kbd:`Ctrl-D`,Windows " +"中按 :kbd:`Ctrl-Z, Enter`)时终止。" + +#: ../../using/cmdline.rst:45 +msgid "" +"When called with a file name argument or with a file as standard input, it " +"reads and executes a script from that file." +msgstr "用文件名参数或以标准输入文件调用时,读取,并执行该脚本文件。" + +#: ../../using/cmdline.rst:47 +msgid "" +"When called with a directory name argument, it reads and executes an " +"appropriately named script from that directory." +msgstr "用目录名参数调用时,从该目录读取、执行适当名称的脚本。" + +#: ../../using/cmdline.rst:49 +msgid "" +"When called with ``-c command``, it executes the Python statement(s) given " +"as *command*. Here *command* may contain multiple statements separated by " +"newlines. Leading whitespace is significant in Python statements!" +msgstr "" +"用 ``-c command`` 调用时,执行 *command* 表示的 Python 语句。*command* " +"可以包含用换行符分隔的多条语句。注意,前导空白字符在 Python 语句中非常重要!" + +#: ../../using/cmdline.rst:52 +msgid "" +"When called with ``-m module-name``, the given module is located on the " +"Python module path and executed as a script." +msgstr "用 ``-m module-name`` 调用时,在 Python 模块路径中查找指定的模块,并将其作为脚本执行。" + +#: ../../using/cmdline.rst:55 +msgid "" +"In non-interactive mode, the entire input is parsed before it is executed." +msgstr "非交互模式下,先解析全部输入,再执行。" + +#: ../../using/cmdline.rst:57 +msgid "" +"An interface option terminates the list of options consumed by the " +"interpreter, all consecutive arguments will end up in :data:`sys.argv` -- " +"note that the first element, subscript zero (``sys.argv[0]``), is a string " +"reflecting the program's source." +msgstr "" +"接口选项会终结解释器读入的选项列表,所有后续参数都在 :data:`sys.argv` 里 -- " +"注意,首个元素,即下标为零的元素(``sys.argv[0]``)是表示程序来源的字符串。" + +#: ../../using/cmdline.rst:64 +msgid "" +"Execute the Python code in *command*. *command* can be one or more " +"statements separated by newlines, with significant leading whitespace as in " +"normal module code." +msgstr "" +"执行 *command* 中的 Python 代码。*command* " +"可以是一条语句,也可以是用换行符分隔的多条语句,其中,前导空白字符与普通模块代码中的作用一样。" + +#: ../../using/cmdline.rst:68 +msgid "" +"If this option is given, the first element of :data:`sys.argv` will be " +"``\"-c\"`` and the current directory will be added to the start of " +":data:`sys.path` (allowing modules in that directory to be imported as top " +"level modules)." +msgstr "" +"使用此选项时,:data:`sys.argv` 的首个元素为 ``\"-c\"``,并会把当前目录加入至 :data:`sys.path` " +"开头(让该目录中的模块作为顶层模块导入)。" + +#: ../../using/cmdline.rst:73 +msgid "" +"Raises an :ref:`auditing event ` ``cpython.run_command`` with " +"argument ``command``." +msgstr "" +"引发一个 :ref:`审计事件 ` ``cpython.run_command`` 并附带参数 ``command``。" + +#: ../../using/cmdline.rst:77 +msgid "" +"Search :data:`sys.path` for the named module and execute its contents as the" +" :mod:`__main__` module." +msgstr "在 :data:`sys.path` 中搜索指定模块,并以 :mod:`__main__` 模块执行其内容。" + +#: ../../using/cmdline.rst:80 +msgid "" +"Since the argument is a *module* name, you must not give a file extension " +"(``.py``). The module name should be a valid absolute Python module name, " +"but the implementation may not always enforce this (e.g. it may allow you to" +" use a name that includes a hyphen)." +msgstr "" +"该参数是 *模块名*,请勿输入文件扩展名(``.py``)。模块名应为有效的绝对 Python 模块名,但本实现对此不作强制要求(例如,允许使用含连字符" +" ``-`` 的名称)。" + +#: ../../using/cmdline.rst:85 +msgid "" +"Package names (including namespace packages) are also permitted. When a " +"package name is supplied instead of a normal module, the interpreter will " +"execute ``.__main__`` as the main module. This behaviour is " +"deliberately similar to the handling of directories and zipfiles that are " +"passed to the interpreter as the script argument." +msgstr "" +"包名称(包括命名空间包)也允许使用。使用包名称而不是普通模块名时,解释器把 ``.__main__`` " +"作为主模块执行。此行为特意被设计为与作为脚本参数传递给解释器的目录和 zip 文件的处理方式类似。" + +#: ../../using/cmdline.rst:94 +msgid "" +"This option cannot be used with built-in modules and extension modules " +"written in C, since they do not have Python module files. However, it can " +"still be used for precompiled modules, even if the original source file is " +"not available." +msgstr "" +"此选项不适用于内置模块和以 C 编写的扩展模块,因为它们并没有对应的 Python 模块文件。 但是它仍然适用于预编译的模块,即使没有可用的初始源文件。" + +#: ../../using/cmdline.rst:99 +msgid "" +"If this option is given, the first element of :data:`sys.argv` will be the " +"full path to the module file (while the module file is being located, the " +"first element will be set to ``\"-m\"``). As with the :option:`-c` option, " +"the current directory will be added to the start of :data:`sys.path`." +msgstr "" +"如果给出此选项,:data:`sys.argv` 的首个元素将为模块文件的完整路径 (在定位模块文件期间,首个元素将设为 ``\"-m\"``)。 与 " +":option:`-c` 选项一样,当前目录将被加入 :data:`sys.path` 的开头。" + +#: ../../using/cmdline.rst:104 +msgid "" +":option:`-I` option can be used to run the script in isolated mode where " +":data:`sys.path` contains neither the current directory nor the user's site-" +"packages directory. All :envvar:`PYTHON*` environment variables are ignored," +" too." +msgstr "" +":option:`-I` 选项可用来在隔离模式下运行脚本,此模式中 :data:`sys.path` 既不包含当前目录也不包含用户的 site-" +"packages 目录。 所有 :envvar:`PYTHON*` 环境变量也会被忽略。" + +#: ../../using/cmdline.rst:109 +msgid "" +"Many standard library modules contain code that is invoked on their " +"execution as a script. An example is the :mod:`timeit` module::" +msgstr "许多标准库模块都包含在执行时,以脚本方式调用的代码。例如 :mod:`timeit` 模块:" + +#: ../../using/cmdline.rst:115 +msgid "" +"Raises an :ref:`auditing event ` ``cpython.run_module`` with " +"argument ``module-name``." +msgstr "" +"引发一个 :ref:`审计事件 ` ``cpython.run_module`` 并附带参数 ``module-name``。" + +#: ../../using/cmdline.rst:119 +msgid ":func:`runpy.run_module`" +msgstr ":func:`runpy.run_module`" + +#: ../../using/cmdline.rst:119 ../../using/cmdline.rst:171 +msgid "Equivalent functionality directly available to Python code" +msgstr "Python 代码可以直接使用的等效功能" + +#: ../../using/cmdline.rst:121 +msgid ":pep:`338` -- Executing modules as scripts" +msgstr ":pep:`338` -- 将模块作为脚本执行" + +#: ../../using/cmdline.rst:123 +msgid "Supply the package name to run a ``__main__`` submodule." +msgstr "提供包名称来运行 ``__main__`` 子模块。" + +#: ../../using/cmdline.rst:126 +msgid "namespace packages are also supported" +msgstr "同样支持命名空间包" + +#: ../../using/cmdline.rst:133 +msgid "" +"Read commands from standard input (:data:`sys.stdin`). If standard input is" +" a terminal, :option:`-i` is implied." +msgstr "从标准输入 (:data:`sys.stdin`) 读取命令。标准输入为终端时,使用 :option:`-i`。" + +#: ../../using/cmdline.rst:136 +msgid "" +"If this option is given, the first element of :data:`sys.argv` will be " +"``\"-\"`` and the current directory will be added to the start of " +":data:`sys.path`." +msgstr "" +"使用此选项时,:data:`sys.argv` 的第一个元素是 ``\"-\"``, 同时,把当前目录加入 :data:`sys.path` 开头。" + +#: ../../using/cmdline.rst:140 ../../using/cmdline.rst:613 +msgid "" +"Raises an :ref:`auditing event ` ``cpython.run_stdin`` with no " +"arguments." +msgstr "引发一个不带参数的 :ref:`审计事件 ` ``cpython.run_stdin``。" + +#: ../../using/cmdline.rst:146 +msgid "" +"Execute the Python code contained in *script*, which must be a filesystem " +"path (absolute or relative) referring to either a Python file, a directory " +"containing a ``__main__.py`` file, or a zipfile containing a ``__main__.py``" +" file." +msgstr "" +"执行 *script* 中的 Python 代码,该参数应为(绝对或相对)文件系统路径,指向 Python 文件、包含 ``__main__.py`` " +"文件的目录,或包含 ``__main__.py`` 文件的 zip 文件。" + +#: ../../using/cmdline.rst:151 +msgid "" +"If this option is given, the first element of :data:`sys.argv` will be the " +"script name as given on the command line." +msgstr "给出此选项时,:data:`sys.argv` 的第一个元素就是在命令行中指定的脚本名称。" + +#: ../../using/cmdline.rst:154 +msgid "" +"If the script name refers directly to a Python file, the directory " +"containing that file is added to the start of :data:`sys.path`, and the file" +" is executed as the :mod:`__main__` module." +msgstr "" +"如果脚本名称直接指向 Python 文件,则把该文件所在目录加入 :data:`sys.path` 的开头,并且把该文件当作 " +":mod:`__main__` 模块来执行。" + +#: ../../using/cmdline.rst:158 +msgid "" +"If the script name refers to a directory or zipfile, the script name is " +"added to the start of :data:`sys.path` and the ``__main__.py`` file in that " +"location is executed as the :mod:`__main__` module." +msgstr "" +"如果脚本名称指向目录或 zip 文件,则把脚本名加入 :data:`sys.path` 的开头,并把该位置中的 ``__main__.py`` 文件当作" +" :mod:`__main__` 模块来执行。" + +#: ../../using/cmdline.rst:162 +msgid "" +":option:`-I` option can be used to run the script in isolated mode where " +":data:`sys.path` contains neither the script's directory nor the user's " +"site-packages directory. All :envvar:`PYTHON*` environment variables are " +"ignored, too." +msgstr "" +":option:`-I` 选项以隔离模式运行脚本,此模式中,:data:`sys.path` 既不包含脚本目录,也不包含用户的 site-" +"packages 目录,还会忽略所有 :envvar:`PYTHON*` 环境变量。" + +#: ../../using/cmdline.rst:167 +msgid "" +"Raises an :ref:`auditing event ` ``cpython.run_file`` with " +"argument ``filename``." +msgstr "引发一个 :ref:`审计事件 ` ``cpython.run_file`` 并附带参数 ``filename``。" + +#: ../../using/cmdline.rst:170 +msgid ":func:`runpy.run_path`" +msgstr ":func:`runpy.run_path`" + +#: ../../using/cmdline.rst:174 +msgid "" +"If no interface option is given, :option:`-i` is implied, ``sys.argv[0]`` is" +" an empty string (``\"\"``) and the current directory will be added to the " +"start of :data:`sys.path`. Also, tab-completion and history editing is " +"automatically enabled, if available on your platform (see :ref:`rlcompleter-" +"config`)." +msgstr "" +"未给出接口选项时,使用 :option:`-i`,``sys.argv[0]`` 为空字符串 (``\"\"``),并把当前目录加至 " +":data:`sys.path` 的开头。 此外,如果系统支持,还能自动启用 tab 补全和历史编辑(参见 :ref:`rlcompleter-" +"config`)。" + +#: ../../using/cmdline.rst:180 +msgid ":ref:`tut-invoking`" +msgstr ":ref:`tut-invoking`" + +#: ../../using/cmdline.rst:182 +msgid "Automatic enabling of tab-completion and history editing." +msgstr "自动启用 tab 补全和历史编辑。" + +#: ../../using/cmdline.rst:187 +msgid "Generic options" +msgstr "通用选项" + +#: ../../using/cmdline.rst:193 +msgid "Print a short description of all command line options." +msgstr "输出所有命令行选项的简介。" + +#: ../../using/cmdline.rst:199 +msgid "Print the Python version number and exit. Example output could be:" +msgstr "输出 Python 版本号并退出。示例如下:" + +#: ../../using/cmdline.rst:205 +msgid "When given twice, print more information about the build, like:" +msgstr "输入两次 ``V`` 选项时,输出更多构建信息,例如:" + +#: ../../using/cmdline.rst:212 +msgid "The ``-VV`` option." +msgstr "``-VV`` 选项。" + +#: ../../using/cmdline.rst:218 +msgid "Miscellaneous options" +msgstr "其他选项" + +#: ../../using/cmdline.rst:222 +msgid "" +"Issue a warning when comparing :class:`bytes` or :class:`bytearray` with " +":class:`str` or :class:`bytes` with :class:`int`. Issue an error when the " +"option is given twice (:option:`!-bb`)." +msgstr "" +"用 :class:`str` 与 :class:`bytes` 或 :class:`bytearray` 对比, 或对比 :class:`bytes` " +"与 :class:`int` 时,会发出警告。重复给出该选项(:option:`!-bb`)时会报错。" + +#: ../../using/cmdline.rst:226 +msgid "Affects comparisons of :class:`bytes` with :class:`int`." +msgstr "影响 :class:`bytes` 与 :class:`int` 的比较。" + +#: ../../using/cmdline.rst:231 +msgid "" +"If given, Python won't try to write ``.pyc`` files on the import of source " +"modules. See also :envvar:`PYTHONDONTWRITEBYTECODE`." +msgstr "" +"给出此选项时,Python 不在导入源模块时写入 ``.pyc`` 文件。另请参阅 :envvar:`PYTHONDONTWRITEBYTECODE`。" + +#: ../../using/cmdline.rst:237 +msgid "" +"Control the validation behavior of hash-based ``.pyc`` files. See :ref:`pyc-" +"invalidation`. When set to ``default``, checked and unchecked hash-based " +"bytecode cache files are validated according to their default semantics. " +"When set to ``always``, all hash-based ``.pyc`` files, whether checked or " +"unchecked, are validated against their corresponding source file. When set " +"to ``never``, hash-based ``.pyc`` files are not validated against their " +"corresponding source files." +msgstr "" +"控制基于哈希值的 ``.pyc`` 文件的验证行为。 参见 :ref:`pyc-invalidation`。 当设为 ``default`` " +"时,已选定和未选定的基于哈希值的字节码缓存文件将根据其默认语义进行验证。 当设为 ``always`` 时,所有基于哈希值的 ``.pyc`` " +"文件,不论是已选定还是未选定的都将根据其对应的源文件进行验证。 当设为 ``never`` 时,基于哈希值的 ``.pyc`` " +"文件将不会根据其对应的源文件进行验证。" + +#: ../../using/cmdline.rst:245 +msgid "" +"The semantics of timestamp-based ``.pyc`` files are unaffected by this " +"option." +msgstr "基于时间戳的 ``.pyc`` 文件的语义不会受此选项影响。" + +#: ../../using/cmdline.rst:251 +msgid "" +"Turn on parser debugging output (for expert only, depending on compilation " +"options). See also :envvar:`PYTHONDEBUG`." +msgstr "开启解析器调试输出(限专家使用,依赖于编译选项)。 另请参阅 :envvar:`PYTHONDEBUG`。" + +#: ../../using/cmdline.rst:257 +msgid "" +"Ignore all :envvar:`PYTHON*` environment variables, e.g. " +":envvar:`PYTHONPATH` and :envvar:`PYTHONHOME`, that might be set." +msgstr "" +"忽略所有 :envvar:`PYTHON*` 环境变量,例如,已设置的 :envvar:`PYTHONPATH` 和 " +":envvar:`PYTHONHOME`。" + +#: ../../using/cmdline.rst:263 +msgid "" +"When a script is passed as first argument or the :option:`-c` option is " +"used, enter interactive mode after executing the script or the command, even" +" when :data:`sys.stdin` does not appear to be a terminal. The " +":envvar:`PYTHONSTARTUP` file is not read." +msgstr "" +"脚本是第一个参数,或使用 :option:`-c` 时,即便 :data:`sys.stdin` 不是终端,执行脚本或命令后,也会进入交互模式。不读取 " +":envvar:`PYTHONSTARTUP` 文件。" + +#: ../../using/cmdline.rst:268 +msgid "" +"This can be useful to inspect global variables or a stack trace when a " +"script raises an exception. See also :envvar:`PYTHONINSPECT`." +msgstr "本选项用于,脚本触发异常时,检查全局变量或堆栈回溯。 详见 :envvar:`PYTHONINSPECT`。" + +#: ../../using/cmdline.rst:274 +msgid "" +"Run Python in isolated mode. This also implies -E and -s. In isolated mode " +":data:`sys.path` contains neither the script's directory nor the user's " +"site-packages directory. All :envvar:`PYTHON*` environment variables are " +"ignored, too. Further restrictions may be imposed to prevent the user from " +"injecting malicious code." +msgstr "" +"在隔离模式下运行 Python。 这将同时应用 -E 和 -s。 在隔离模式下 :data:`sys.path` 既不包含脚本所在目录也不包含用户的 " +"site-packages 目录。 所有 :envvar:`PYTHON*` 环境变量也会被忽略。 还可以施加更进一步的限制以防止用户注入恶意代码。" + +#: ../../using/cmdline.rst:285 +msgid "" +"Remove assert statements and any code conditional on the value of " +":const:`__debug__`. Augment the filename for compiled (:term:`bytecode`) " +"files by adding ``.opt-1`` before the ``.pyc`` extension (see :pep:`488`). " +"See also :envvar:`PYTHONOPTIMIZE`." +msgstr "" +"移除 assert 语句以及任何以 :const:`__debug__` 的值作为条件的代码。 通过在 ``.pyc`` 扩展名之前添加 " +"``.opt-1`` 来扩充已编译文件 (:term:`bytecode`) 的文件名 (参见 :pep:`488`)。 另请参阅 " +":envvar:`PYTHONOPTIMIZE`。" + +#: ../../using/cmdline.rst:290 ../../using/cmdline.rst:300 +msgid "Modify ``.pyc`` filenames according to :pep:`488`." +msgstr "依据 :pep:`488` 修改 ``.pyc`` 文件名。" + +#: ../../using/cmdline.rst:296 +msgid "" +"Do :option:`-O` and also discard docstrings. Augment the filename for " +"compiled (:term:`bytecode`) files by adding ``.opt-2`` before the ``.pyc`` " +"extension (see :pep:`488`)." +msgstr "" +"在启用 :option:`-O` 的同时丢弃文档字符串。 通过在 ``.pyc`` 扩展名之前添加 ``.opt-2`` 来扩展已编译文件 " +"(:term:`bytecode`) 的文件名 (参见 :pep:`488`)。" + +#: ../../using/cmdline.rst:306 +msgid "" +"Don't display the copyright and version messages even in interactive mode." +msgstr "即使在交互模式下也不显示版权和版本信息。" + +#: ../../using/cmdline.rst:313 +msgid "" +"Turn on hash randomization. This option only has an effect if the " +":envvar:`PYTHONHASHSEED` environment variable is set to ``0``, since hash " +"randomization is enabled by default." +msgstr "" +"开启哈希随机化。 此选项权 :envvar:`PYTHONHASHSEED` 环境变量设置为 ``0`` 时起作用,因为哈希随机化是默认启用的。" + +#: ../../using/cmdline.rst:317 +msgid "" +"On previous versions of Python, this option turns on hash randomization, so " +"that the :meth:`__hash__` values of str and bytes objects are \"salted\" " +"with an unpredictable random value. Although they remain constant within an" +" individual Python process, they are not predictable between repeated " +"invocations of Python." +msgstr "" +"在Python的早期版本中,此选项启用哈希随机化,将 str 和 bytes 的对象 :meth:`__hash__` 的值 \"加盐\" " +"为不可预测的随机值。虽然它们在单个Python进程中保持不变,但是在重复调用的Python进程之间它们是不可预测的。" + +#: ../../using/cmdline.rst:323 +msgid "" +"Hash randomization is intended to provide protection against a denial-of-" +"service caused by carefully-chosen inputs that exploit the worst case " +"performance of a dict construction, O(n\\ :sup:`2`) complexity. See " +"http://www.ocert.org/advisories/ocert-2011-003.html for details." +msgstr "" +"哈希随机化旨在针对由精心选择的输入引起的拒绝服务攻击提供防护,这种输入利用了构造 dict 在最坏情况下的性能即 O(n\\ :sup:`2`) " +"复杂度。 请参阅 http://www.ocert.org/advisories/ocert-2011-003.html 了解详情。" + +#: ../../using/cmdline.rst:328 +msgid "" +":envvar:`PYTHONHASHSEED` allows you to set a fixed value for the hash seed " +"secret." +msgstr ":envvar:`PYTHONHASHSEED` 允许你为哈希种子密码设置一个固定值。" + +#: ../../using/cmdline.rst:331 +msgid "The option is no longer ignored." +msgstr "此选项不会再被忽略。" + +#: ../../using/cmdline.rst:339 +msgid "" +"Don't add the :data:`user site-packages directory ` to " +":data:`sys.path`." +msgstr "" +"不要将 :data:`用户 site-packages 目录 ` 添加到 :data:`sys.path`。" + +#: ../../using/cmdline.rst:344 ../../using/cmdline.rst:706 +#: ../../using/cmdline.rst:718 +msgid ":pep:`370` -- Per user site-packages directory" +msgstr ":pep:`370` -- 分用户的 site-packages 目录" + +#: ../../using/cmdline.rst:349 +msgid "" +"Disable the import of the module :mod:`site` and the site-dependent " +"manipulations of :data:`sys.path` that it entails. Also disable these " +"manipulations if :mod:`site` is explicitly imported later (call " +":func:`site.main` if you want them to be triggered)." +msgstr "" +"禁用 :mod:`site` 的导入及其所附带的基于站点对 :data:`sys.path` 的操作。 如果 :mod:`site` " +"会在稍后被显式地导入也会禁用这些操作 (如果你希望触发它们则应调用 :func:`site.main`)。" + +#: ../../using/cmdline.rst:357 +msgid "" +"Force the stdout and stderr streams to be unbuffered. This option has no " +"effect on the stdin stream." +msgstr "强制 stdout 和 stderr 流不使用缓冲。 此选项对 stdin 流无影响。" + +#: ../../using/cmdline.rst:360 +msgid "See also :envvar:`PYTHONUNBUFFERED`." +msgstr "另请参阅 :envvar:`PYTHONUNBUFFERED`。" + +#: ../../using/cmdline.rst:362 +msgid "The text layer of the stdout and stderr streams now is unbuffered." +msgstr "stdout 和 stderr 流在文本层现在不使用缓冲。" + +#: ../../using/cmdline.rst:368 +msgid "" +"Print a message each time a module is initialized, showing the place " +"(filename or built-in module) from which it is loaded. When given twice " +"(:option:`!-vv`), print a message for each file that is checked for when " +"searching for a module. Also provides information on module cleanup at " +"exit. See also :envvar:`PYTHONVERBOSE`." +msgstr "" +"每当一个模块被初始化时打印一条信息,显示其加载位置(文件名或内置模块)。 当重复给出时 " +"(:option:`!-vv`),为搜索模块时所检查的每个文件都打印一条消息。 此外还提供退出时有关模块清理的信息A。 另请参阅 " +":envvar:`PYTHONVERBOSE`。" + +#: ../../using/cmdline.rst:378 +msgid "" +"Warning control. Python's warning machinery by default prints warning " +"messages to :data:`sys.stderr`. A typical warning message has the following" +" form:" +msgstr "警告控制。 Python 的警告机制在默认情况下会向 :data:`sys.stderr` 打印警告消息。 典型的警告消息具有如下形式:" + +#: ../../using/cmdline.rst:386 +msgid "" +"By default, each warning is printed once for each source line where it " +"occurs. This option controls how often warnings are printed." +msgstr "默认情况下,每个警告都对于其发生所在的每个源行都会打印一次。 此选项可控制警告打印的频繁程度。" + +#: ../../using/cmdline.rst:389 +msgid "" +"Multiple :option:`-W` options may be given; when a warning matches more than" +" one option, the action for the last matching option is performed. Invalid " +":option:`-W` options are ignored (though, a warning message is printed about" +" invalid options when the first warning is issued)." +msgstr "" +"可以给出多个 :option:`-W` 选项;当某个警告能与多个选项匹配时,将执行最后一个匹配选项的操作。 无效的 :option:`-W` " +"选项将被忽略(但是,在发出第一个警告时会打印有关无效选项的警告消息)。" + +#: ../../using/cmdline.rst:394 +msgid "" +"Warnings can also be controlled using the :envvar:`PYTHONWARNINGS` " +"environment variable and from within a Python program using the " +":mod:`warnings` module." +msgstr "" +"警告也可以使用 :envvar:`PYTHONWARNINGS` 环境变量以及使用 :mod:`warnings` 模块在 Python " +"程序内部进行控制。" + +#: ../../using/cmdline.rst:398 ../../using/cmdline.rst:734 +msgid "" +"The simplest settings apply a particular action unconditionally to all " +"warnings emitted by a process (even those that are otherwise ignored by " +"default)::" +msgstr "最简单的设置是将某个特定操作无条件地应用于进程所发出所有警告 (即使是在默认情况下会忽略的那些警告)::" + +#: ../../using/cmdline.rst:409 +msgid "" +"The action names can be abbreviated as desired (e.g. ``-Wi``, ``-Wd``, " +"``-Wa``, ``-We``) and the interpreter will resolve them to the appropriate " +"action name." +msgstr "" +"操作名称可以根据需要进行缩写 (例如 ``-Wi``, ``-Wd``, ``-Wa``, ``-We``),解释器将会把它们解析为适当的操作名称。" + +#: ../../using/cmdline.rst:413 ../../using/cmdline.rst:745 +msgid "" +"See :ref:`warning-filter` and :ref:`describing-warning-filters` for more " +"details." +msgstr "请参阅 :ref:`warning-filter` 和 :ref:`describing-warning-filters` 了解更多细节。" + +#: ../../using/cmdline.rst:419 +msgid "" +"Skip the first line of the source, allowing use of non-Unix forms of " +"``#!cmd``. This is intended for a DOS specific hack only." +msgstr "跳过源中第一行,以允许使用非 Unix 形式的 ``#!cmd``。 这适用于 DOS 专属的破解操作。" + +#: ../../using/cmdline.rst:425 +msgid "" +"Reserved for various implementation-specific options. CPython currently " +"defines the following possible values:" +msgstr "保留用于各种具体实现专属的选项。 CPython 目前定义了下列可用的值:" + +#: ../../using/cmdline.rst:428 +msgid "``-X faulthandler`` to enable :mod:`faulthandler`;" +msgstr "``-X faulthandler`` 启用 :mod:`faulthandler`;" + +#: ../../using/cmdline.rst:429 +msgid "" +"``-X oldparser``: enable the traditional LL(1) parser. See also " +":envvar:`PYTHONOLDPARSER` and :pep:`617`." +msgstr "" +"``-X oldparser``: 启用传统的 LL(1) 解析器。 另请参阅 :envvar:`PYTHONOLDPARSER` 和 " +":pep:`617`。" + +#: ../../using/cmdline.rst:431 +msgid "" +"``-X showrefcount`` to output the total reference count and number of used " +"memory blocks when the program finishes or after each statement in the " +"interactive interpreter. This only works on debug builds." +msgstr "" +"``-X showrefcount`` 当程序结束或在交互解释器中的每条语句之后输出总引用计数和已使用内存块计数。 此选项仅在调试版本中有效。" + +#: ../../using/cmdline.rst:434 +msgid "" +"``-X tracemalloc`` to start tracing Python memory allocations using the " +":mod:`tracemalloc` module. By default, only the most recent frame is stored " +"in a traceback of a trace. Use ``-X tracemalloc=NFRAME`` to start tracing " +"with a traceback limit of *NFRAME* frames. See the :func:`tracemalloc.start`" +" for more information." +msgstr "" +"``-X tracemalloc`` 使用 :mod:`tracemalloc` 模块启动对 Python 内存分配的跟踪。 " +"默认情况下,只有最近的帧会保存在跟踪的回溯信息中。 使用 ``-X tracemalloc=NFRAME`` 以启动限定回溯 *NFRAME* " +"帧的跟踪。 请参阅 :func:`tracemalloc.start` 了解详情。" + +#: ../../using/cmdline.rst:439 +msgid "" +"``-X int_max_str_digits`` configures the :ref:`integer string conversion " +"length limitation `. See also " +":envvar:`PYTHONINTMAXSTRDIGITS`." +msgstr "" +"``-X int_max_str_digits`` 将配置 :ref:`整数字符串转换长度限制 `。 另请参阅 " +":envvar:`PYTHONINTMAXSTRDIGITS`。" + +#: ../../using/cmdline.rst:442 +msgid "" +"``-X importtime`` to show how long each import takes. It shows module name, " +"cumulative time (including nested imports) and self time (excluding nested " +"imports). Note that its output may be broken in multi-threaded application." +" Typical usage is ``python3 -X importtime -c 'import asyncio'``. See also " +":envvar:`PYTHONPROFILEIMPORTTIME`." +msgstr "" +"``-X importtime`` 显示每次导入耗费的时间。 它会显示模块名称,累计时间(包括嵌套的导入)和自身时间(排除嵌套的导入)。 " +"请注意它的输出在多线程应用程序中可能会出错。 典型用法如 ``python3 -X importtime -c 'import asyncio'``。 " +"另请参阅 :envvar:`PYTHONPROFILEIMPORTTIME`。" + +#: ../../using/cmdline.rst:447 +msgid "" +"``-X dev``: enable :ref:`Python Development Mode `, introducing " +"additional runtime checks that are too expensive to be enabled by default." +msgstr "``-X dev``: 启用 :ref:`Python 开发模式 `,引入在默认情况下启用会导致开销过大的运行时检查。" + +#: ../../using/cmdline.rst:450 +msgid "" +"``-X utf8`` enables UTF-8 mode for operating system interfaces, overriding " +"the default locale-aware mode. ``-X utf8=0`` explicitly disables UTF-8 mode " +"(even when it would otherwise activate automatically). See " +":envvar:`PYTHONUTF8` for more details." +msgstr "" +"``-X utf8`` 为操作系统接口启用 UTF-8 模式,覆盖默认的区域感知模式。 ``-X utf8=0`` 显式地禁用 UTF-8 " +"模式(即使在它应当被自动激活的时候)。 请参阅 :envvar:`PYTHONUTF8` 了解详情。" + +#: ../../using/cmdline.rst:454 +msgid "" +"``-X pycache_prefix=PATH`` enables writing ``.pyc`` files to a parallel tree" +" rooted at the given directory instead of to the code tree. See also " +":envvar:`PYTHONPYCACHEPREFIX`." +msgstr "" +"``-X pycache_prefix=PATH`` 允许将 ``.pyc`` 文件写入以给定目录为根的并行树,而不是代码树。另见 " +":envvar:`PYTHONPYCACHEPREFIX` 。" + +#: ../../using/cmdline.rst:458 +msgid "" +"It also allows passing arbitrary values and retrieving them through the " +":data:`sys._xoptions` dictionary." +msgstr "它还允许传入任意值并通过 :data:`sys._xoptions` 字典来提取这些值。" + +#: ../../using/cmdline.rst:461 +msgid "The :option:`-X` option was added." +msgstr "增加了 :option:`-X` 选项。" + +#: ../../using/cmdline.rst:464 +msgid "The ``-X faulthandler`` option." +msgstr "``-X faulthandler`` 选项。" + +#: ../../using/cmdline.rst:467 +msgid "The ``-X showrefcount`` and ``-X tracemalloc`` options." +msgstr "``-X showrefcount`` 与 ``-X tracemalloc`` 选项。" + +#: ../../using/cmdline.rst:470 +msgid "The ``-X showalloccount`` option." +msgstr "``-X showalloccount`` 选项。" + +#: ../../using/cmdline.rst:473 +msgid "The ``-X importtime``, ``-X dev`` and ``-X utf8`` options." +msgstr "``-X importtime``, ``-X dev`` 与 ``-X utf8`` 选项。" + +#: ../../using/cmdline.rst:476 +msgid "" +"The ``-X pycache_prefix`` option. The ``-X dev`` option now logs ``close()``" +" exceptions in :class:`io.IOBase` destructor." +msgstr "" +"``-X pycache_prefix`` 选项。 ``-X dev`` 选项现在在 :class:`io.IOBase` 析构函数中记录 " +"``close()`` 异常。" + +#: ../../using/cmdline.rst:480 +msgid "" +"Using ``-X dev`` option, check *encoding* and *errors* arguments on string " +"encoding and decoding operations." +msgstr "使用 ``-X dev`` 选项,在字符串编码和解码操作时检查 *encoding* 和 *errors* 参数。" + +#: ../../using/cmdline.rst:484 +msgid "The ``-X showalloccount`` option has been removed." +msgstr "The ``-X showalloccount`` 选项已被移除。" + +#: ../../using/cmdline.rst:486 +msgid "The ``-X int_max_str_digits`` option." +msgstr "``-X int_max_str_digits`` 选项。" + +#: ../../using/cmdline.rst:490 +msgid "The ``-X oldparser`` option." +msgstr " ``-X oldparser`` 选项。" + +#: ../../using/cmdline.rst:494 +msgid "Options you shouldn't use" +msgstr "不应当使用的选项" + +#: ../../using/cmdline.rst:498 +msgid "Reserved for use by Jython_." +msgstr "保留给 Jython_ 使用。" + +#: ../../using/cmdline.rst:506 +msgid "Environment variables" +msgstr "环境变量" + +#: ../../using/cmdline.rst:508 +msgid "" +"These environment variables influence Python's behavior, they are processed " +"before the command-line switches other than -E or -I. It is customary that " +"command-line switches override environmental variables where there is a " +"conflict." +msgstr "" +"这些环境变量会影响 Python 的行为,它们是在命令行开关之前被处理的,但 -E 或 -I 除外。 " +"根据约定,当存在冲突时命令行开关会覆盖环境变量的设置。" + +#: ../../using/cmdline.rst:515 +msgid "" +"Change the location of the standard Python libraries. By default, the " +"libraries are searched in :file:`{prefix}/lib/python{version}` and " +":file:`{exec_prefix}/lib/python{version}`, where :file:`{prefix}` and " +":file:`{exec_prefix}` are installation-dependent directories, both " +"defaulting to :file:`/usr/local`." +msgstr "" +"更改标准 Python 库的位置。 默认情况下库是在 :file:`{prefix}/lib/python{version}` 和 " +":file:`{exec_prefix}/lib/python{version}` 中搜索,其中 :file:`{prefix}` 和 " +":file:`{exec_prefix}` 是由安装位置确定的目录,默认都位于 :file:`/usr/local`。" + +#: ../../using/cmdline.rst:521 +msgid "" +"When :envvar:`PYTHONHOME` is set to a single directory, its value replaces " +"both :file:`{prefix}` and :file:`{exec_prefix}`. To specify different " +"values for these, set :envvar:`PYTHONHOME` to " +":file:`{prefix}:{exec_prefix}`." +msgstr "" +"当 :envvar:`PYTHONHOME` 被设为单个目录时,它的值会同时替代 :file:`{prefix}` 和 " +":file:`{exec_prefix}`。 要为两者指定不同的值,请将 :envvar:`PYTHONHOME` 设为 " +":file:`{prefix}:{exec_prefix}`。" + +#: ../../using/cmdline.rst:528 +msgid "" +"Augment the default search path for module files. The format is the same as" +" the shell's :envvar:`PATH`: one or more directory pathnames separated by " +":data:`os.pathsep` (e.g. colons on Unix or semicolons on Windows). Non-" +"existent directories are silently ignored." +msgstr "" +"增加模块文件默认搜索路径。 所用格式与终端的 :envvar:`PATH` 相同:一个或多个由 :data:`os.pathsep` " +"分隔的目录路径名称(例如 Unix 上用冒号而在 Windows 上用分号)。 默认忽略不存在的目录。" + +#: ../../using/cmdline.rst:533 +msgid "" +"In addition to normal directories, individual :envvar:`PYTHONPATH` entries " +"may refer to zipfiles containing pure Python modules (in either source or " +"compiled form). Extension modules cannot be imported from zipfiles." +msgstr "" +"除了普通目录之外,单个 :envvar:`PYTHONPATH` " +"条目可以引用包含纯Python模块的zip文件(源代码或编译形式)。无法从zip文件导入扩展模块。" + +#: ../../using/cmdline.rst:537 +msgid "" +"The default search path is installation dependent, but generally begins with" +" :file:`{prefix}/lib/python{version}` (see :envvar:`PYTHONHOME` above). It " +"is *always* appended to :envvar:`PYTHONPATH`." +msgstr "" +"默认索引路径依赖于安装路径,但通常都是以 :file:`{prefix}/lib/python{version}` 开始 (参见上文中的 " +":envvar:`PYTHONHOME`)。 它 *总是* 会被添加到 :envvar:`PYTHONPATH`。" + +#: ../../using/cmdline.rst:541 +msgid "" +"An additional directory will be inserted in the search path in front of " +":envvar:`PYTHONPATH` as described above under :ref:`using-on-interface-" +"options`. The search path can be manipulated from within a Python program as" +" the variable :data:`sys.path`." +msgstr "" +"有一个附加目录将被插入到索引路径的 :envvar:`PYTHONPATH` 之前,正如上文中 :ref:`using-on-interface-" +"options` 所描述的。 搜索路径可以在 Python 程序内作为变量 :data:`sys.path` 来进行操作。" + +#: ../../using/cmdline.rst:549 +msgid "" +"If this is set to a non-empty string, it overrides the " +":data:`sys.platlibdir` value." +msgstr "如果它被设为非空字符串,则会覆盖 :data:`sys.platlibdir` 值。" + +#: ../../using/cmdline.rst:557 +msgid "" +"If this is the name of a readable file, the Python commands in that file are" +" executed before the first prompt is displayed in interactive mode. The " +"file is executed in the same namespace where interactive commands are " +"executed so that objects defined or imported in it can be used without " +"qualification in the interactive session. You can also change the prompts " +":data:`sys.ps1` and :data:`sys.ps2` and the hook " +":data:`sys.__interactivehook__` in this file." +msgstr "" +"这如果是一个可读文件的名称,该文件中的 Python 命令会在交互模式的首个提示符显示之前被执行。 " +"该文件会在与交互式命令执行所在的同一命名空间中被执行,因此其中所定义或导入的对象可以在交互式会话中无限制地使用。 你还可以在这个文件中修改提示符 " +":data:`sys.ps1` 和 :data:`sys.ps2` 以及钩子 :data:`sys.__interactivehook__`。" + +#: ../../using/cmdline.rst:564 +msgid "" +"Raises an :ref:`auditing event ` ``cpython.run_startup`` with " +"argument ``filename``." +msgstr "使用 ``filename`` 参数会引发 :ref:`审计事件` ``cpython.run_startup`` 。" + +#: ../../using/cmdline.rst:566 +msgid "" +"Raises an :ref:`auditing event ` ``cpython.run_startup`` with the " +"filename as the argument when called on startup." +msgstr "在启动时调用文件名作为参数会引发 :ref:`审计事件 ` ``cpython.run_startup`` 。" + +#: ../../using/cmdline.rst:572 +msgid "" +"If this is set to a non-empty string it is equivalent to specifying the " +":option:`-O` option. If set to an integer, it is equivalent to specifying " +":option:`-O` multiple times." +msgstr "" +"这如果被设为一个非空字符串,它就相当于指定 :option:`-O` 选项。 如果设为一个整数,则它就相当于多次指定 :option:`-O`。" + +#: ../../using/cmdline.rst:579 +msgid "" +"If this is set, it names a callable using dotted-path notation. The module " +"containing the callable will be imported and then the callable will be run " +"by the default implementation of :func:`sys.breakpointhook` which itself is " +"called by built-in :func:`breakpoint`. If not set, or set to the empty " +"string, it is equivalent to the value \"pdb.set_trace\". Setting this to " +"the string \"0\" causes the default implementation of " +":func:`sys.breakpointhook` to do nothing but return immediately." +msgstr "" +"此变量如果被设定,它会使用加点号的路径标记一个可调用对象。 包含该可调用对象的模块将被导入,随后该可调用对象将由 " +":func:`sys.breakpointhook` 的默认实现来运行,后者自身将由内置的 :func:`breakpoint` 来调用。 " +"如果未设定,或设定为空字符串,则它相当于值 \"pdb.set_trace\"。 将此变量设为字符串 \"0\" 会导致 " +":func:`sys.breakpointhook` 的默认实现不做任何事而直接返回。" + +#: ../../using/cmdline.rst:591 +msgid "" +"If this is set to a non-empty string it is equivalent to specifying the " +":option:`-d` option. If set to an integer, it is equivalent to specifying " +":option:`-d` multiple times." +msgstr "" +"此变量如果被设为一个非空字符串,它就相当于指定 :option:`-d` 选项。 如果设为一个整数,则它就相当于多次指定 :option:`-d`。" + +#: ../../using/cmdline.rst:598 +msgid "" +"If this is set to a non-empty string, enable the traditional LL(1) parser." +msgstr "如果将该选项设为非空字符串,则启用传统的 LL(1) 解析器。" + +#: ../../using/cmdline.rst:600 +msgid "See also the :option:`-X` ``oldparser`` option and :pep:`617`." +msgstr "另请参阅 :option:`-X` ``oldparser`` 选项和 :pep:`617`。" + +#: ../../using/cmdline.rst:607 +msgid "" +"If this is set to a non-empty string it is equivalent to specifying the " +":option:`-i` option." +msgstr "此变量如果被设为一个非空字符串,它就相当于指定 :option:`-i` 选项。" + +#: ../../using/cmdline.rst:610 +msgid "" +"This variable can also be modified by Python code using :data:`os.environ` " +"to force inspect mode on program termination." +msgstr "此变量也可由 Python 代码使用 :data:`os.environ` 来修改以在程序终结时强制检查模式。" + +#: ../../using/cmdline.rst:615 +msgid "(also 3.8.20) Emits audit events." +msgstr "" + +#: ../../using/cmdline.rst:621 +msgid "" +"If this is set to a non-empty string it is equivalent to specifying the " +":option:`-u` option." +msgstr "此变量如果被设为一个非空字符串,它就相当于指定 :option:`-u` 选项。" + +#: ../../using/cmdline.rst:627 +msgid "" +"If this is set to a non-empty string it is equivalent to specifying the " +":option:`-v` option. If set to an integer, it is equivalent to specifying " +":option:`-v` multiple times." +msgstr "" +"此变量如果被设为一个非空字符串,它就相当于指定 :option:`-v` 选项。 如果设为一个整数,则它就相当于多次指定 :option:`-v`。" + +#: ../../using/cmdline.rst:634 +msgid "" +"If this is set, Python ignores case in :keyword:`import` statements. This " +"only works on Windows and macOS." +msgstr "" +"如果设置了此变量,Python 将忽略 :keyword:`import` 语句中的大小写。 这仅在 Windows 和 macOS 上有效。" + +#: ../../using/cmdline.rst:640 +msgid "" +"If this is set to a non-empty string, Python won't try to write ``.pyc`` " +"files on the import of source modules. This is equivalent to specifying the" +" :option:`-B` option." +msgstr "" +"此变量如果被设为一个非空字符串,Python 将不会尝试在导入源模块时写入 ``.pyc`` 文件。 这相当于指定 :option:`-B` 选项。" + +#: ../../using/cmdline.rst:647 +msgid "" +"If this is set, Python will write ``.pyc`` files in a mirror directory tree " +"at this path, instead of in ``__pycache__`` directories within the source " +"tree. This is equivalent to specifying the :option:`-X` " +"``pycache_prefix=PATH`` option." +msgstr "" +"如果设置了此选项,Python将在镜像目录树中的此路径中写入 ``.pyc`` 文件,而不是源树中的 ``__pycache__`` " +"目录中。这相当于指定 :option:`-X` ``pycache_prefix=PATH`` 选项。" + +#: ../../using/cmdline.rst:657 +msgid "" +"If this variable is not set or set to ``random``, a random value is used to " +"seed the hashes of str and bytes objects." +msgstr "如果此变量未设置或设为 ``random``,将使用一个随机值作为 str 和 bytes 对象哈希运算的种子。" + +#: ../../using/cmdline.rst:660 +msgid "" +"If :envvar:`PYTHONHASHSEED` is set to an integer value, it is used as a " +"fixed seed for generating the hash() of the types covered by the hash " +"randomization." +msgstr "" +"如果 :envvar:`PYTHONHASHSEED` 被设为一个整数值,它将被作为固定的种子数用来生成哈希随机化所涵盖的类型的 hash() 结果。" + +#: ../../using/cmdline.rst:664 +msgid "" +"Its purpose is to allow repeatable hashing, such as for selftests for the " +"interpreter itself, or to allow a cluster of python processes to share hash " +"values." +msgstr "它的目的是允许可复现的哈希运算,例如用于解释器本身的自我检测,或允许一组 python 进程共享哈希值。" + +#: ../../using/cmdline.rst:668 +msgid "" +"The integer must be a decimal number in the range [0,4294967295]. " +"Specifying the value 0 will disable hash randomization." +msgstr "该整数必须为一个 [0,4294967295] 范围内的十进制数。 指定数值 0 将禁用哈希随机化。" + +#: ../../using/cmdline.rst:675 +msgid "" +"If this variable is set to an integer, it is used to configure the " +"interpreter's global :ref:`integer string conversion length limitation " +"`." +msgstr "如果将此变量设为一个整数,它会被用来配置解释器的全局 :ref:`整数字符串转换长度限制 `。" + +#: ../../using/cmdline.rst:683 +msgid "" +"If this is set before running the interpreter, it overrides the encoding " +"used for stdin/stdout/stderr, in the syntax ``encodingname:errorhandler``. " +"Both the ``encodingname`` and the ``:errorhandler`` parts are optional and " +"have the same meaning as in :func:`str.encode`." +msgstr "" +"如果此变量在运行解释器之前被设置,它会覆盖通过 ``encodingname:errorhandler`` 语法设置的 " +"stdin/stdout/stderr 所用编码。 ``encodingname`` 和 ``:errorhandler`` 部分都是可选项,与在 " +":func:`str.encode` 中的含义相同。" + +#: ../../using/cmdline.rst:688 +msgid "" +"For stderr, the ``:errorhandler`` part is ignored; the handler will always " +"be ``'backslashreplace'``." +msgstr "对于 stderr,``:errorhandler`` 部分会被忽略;处理程序将总是为 ``'backslashreplace'``。" + +#: ../../using/cmdline.rst:691 +msgid "The ``encodingname`` part is now optional." +msgstr "“encodingname” 部分现在是可选的。" + +#: ../../using/cmdline.rst:694 +msgid "" +"On Windows, the encoding specified by this variable is ignored for " +"interactive console buffers unless :envvar:`PYTHONLEGACYWINDOWSSTDIO` is " +"also specified. Files and pipes redirected through the standard streams are " +"not affected." +msgstr "" +"在 Windows 上,对于交互式控制台缓冲区会忽略此变量所指定的编码,除非还指定了 " +":envvar:`PYTHONLEGACYWINDOWSSTDIO`。 通过标准流重定向的文件和管道则不受其影响。" + +#: ../../using/cmdline.rst:701 +msgid "" +"If this is set, Python won't add the :data:`user site-packages directory " +"` to :data:`sys.path`." +msgstr "" +"如果设置了此变量,Python 将不会把 :data:`用户 site-packages 目录 ` 添加到 " +":data:`sys.path`。" + +#: ../../using/cmdline.rst:711 +msgid "" +"Defines the :data:`user base directory `, which is used to " +"compute the path of the :data:`user site-packages directory " +"` and :ref:`Distutils installation paths ` for ``python setup.py install --user``." +msgstr "" +"定义 :data:`用户基准目录 `,它会在执行 ``python setup.py install --user`` " +"时被用来计算 :data:`用户 site-packages 目录 ` 的路径以及 :ref:`Distutils " +"安装路径 `。" + +#: ../../using/cmdline.rst:723 +msgid "" +"If this environment variable is set, ``sys.argv[0]`` will be set to its " +"value instead of the value got through the C runtime. Only works on macOS." +msgstr "" +"如果设置了此环境变量,则 ``sys.argv[0]`` 将被设为此变量的值而不是通过 C 运行时所获得的值。 这仅在 macOS 上起作用。" + +#: ../../using/cmdline.rst:729 +msgid "" +"This is equivalent to the :option:`-W` option. If set to a comma separated " +"string, it is equivalent to specifying :option:`-W` multiple times, with " +"filters later in the list taking precedence over those earlier in the list." +msgstr "" +"此变量等价于 :option:`-W` 选项。 如果被设为一个以逗号分隔的字符串,它就相当于多次指定 " +":option:`-W`,列表中后出现的过滤器优先级会高于列表中先出现的。" + +#: ../../using/cmdline.rst:751 +msgid "" +"If this environment variable is set to a non-empty string, " +":func:`faulthandler.enable` is called at startup: install a handler for " +":const:`SIGSEGV`, :const:`SIGFPE`, :const:`SIGABRT`, :const:`SIGBUS` and " +":const:`SIGILL` signals to dump the Python traceback. This is equivalent to" +" :option:`-X` ``faulthandler`` option." +msgstr "" +"如果此环境变量被设为一个非空字符串,:func:`faulthandler.enable` 会在启动时被调用:为 :const:`SIGSEGV`, " +":const:`SIGFPE`, :const:`SIGABRT`, :const:`SIGBUS` 和 :const:`SIGILL` " +"等信号安装一个处理器以转储 Python 回溯信息。 此变量等价于 :option:`-X` ``faulthandler`` 选项。" + +#: ../../using/cmdline.rst:762 +msgid "" +"If this environment variable is set to a non-empty string, start tracing " +"Python memory allocations using the :mod:`tracemalloc` module. The value of " +"the variable is the maximum number of frames stored in a traceback of a " +"trace. For example, ``PYTHONTRACEMALLOC=1`` stores only the most recent " +"frame. See the :func:`tracemalloc.start` for more information." +msgstr "" +"如果此环境变量被设为一个非空字符串,则会使用 :mod:`tracemalloc` 模块启动对 Python 内存分配的跟踪。 " +"该变量的值是保存于跟踪的回溯信息中的最大帧数。 例如,``PYTHONTRACEMALLOC=1`` 只保存最近的帧。 请参阅 " +":func:`tracemalloc.start` 了解详情。" + +#: ../../using/cmdline.rst:773 +msgid "" +"If this environment variable is set to a non-empty string, Python will show " +"how long each import takes. This is exactly equivalent to setting ``-X " +"importtime`` on the command line." +msgstr "" +"如果此变量被设为一个非空字符串,Python 将显示每次导入花费了多长时间。 此变量完全等价于在命令行为设置 ``-X importtime``。" + +#: ../../using/cmdline.rst:782 +msgid "" +"If this environment variable is set to a non-empty string, enable the " +":ref:`debug mode ` of the :mod:`asyncio` module." +msgstr "" +"如果此变量被设为一个非空字符串,则会启用 :mod:`asyncio` 模块的 :ref:`调试模式 `。" + +#: ../../using/cmdline.rst:790 +msgid "Set the Python memory allocators and/or install debug hooks." +msgstr "设置 Python 内存分配器和/或安装调试钩子。" + +#: ../../using/cmdline.rst:792 +msgid "Set the family of memory allocators used by Python:" +msgstr "设置 Python 所使用的内存分配器族群:" + +#: ../../using/cmdline.rst:794 +msgid "" +"``default``: use the :ref:`default memory allocators `." +msgstr "``default``: 使用 :ref:`默认内存分配器 `。" + +#: ../../using/cmdline.rst:796 +msgid "" +"``malloc``: use the :c:func:`malloc` function of the C library for all " +"domains (:c:data:`PYMEM_DOMAIN_RAW`, :c:data:`PYMEM_DOMAIN_MEM`, " +":c:data:`PYMEM_DOMAIN_OBJ`)." +msgstr "" +"``malloc``: 对所有域 (:c:data:`PYMEM_DOMAIN_RAW`, :c:data:`PYMEM_DOMAIN_MEM`, " +":c:data:`PYMEM_DOMAIN_OBJ`) 使用 C 库的 :c:func:`malloc` 函数。" + +#: ../../using/cmdline.rst:799 +msgid "" +"``pymalloc``: use the :ref:`pymalloc allocator ` for " +":c:data:`PYMEM_DOMAIN_MEM` and :c:data:`PYMEM_DOMAIN_OBJ` domains and use " +"the :c:func:`malloc` function for the :c:data:`PYMEM_DOMAIN_RAW` domain." +msgstr "" +"``pymalloc``: 对 :c:data:`PYMEM_DOMAIN_MEM` 和 :c:data:`PYMEM_DOMAIN_OBJ` 域使用 " +":ref:`pymalloc 分配器 ` 而对 :c:data:`PYMEM_DOMAIN_RAW` 域使用 " +":c:func:`malloc` 函数。" + +#: ../../using/cmdline.rst:803 +msgid "Install debug hooks:" +msgstr "安装调试钩子:" + +#: ../../using/cmdline.rst:805 +msgid "" +"``debug``: install debug hooks on top of the :ref:`default memory allocators" +" `." +msgstr "``debug``: 在 :ref:`默认内存分配器 ` 之上安装调试钩子。" + +#: ../../using/cmdline.rst:807 +msgid "``malloc_debug``: same as ``malloc`` but also install debug hooks." +msgstr "``malloc_debug``: 与 ``malloc`` 相同但还会安装调试钩子。" + +#: ../../using/cmdline.rst:808 +msgid "``pymalloc_debug``: same as ``pymalloc`` but also install debug hooks." +msgstr "``pymalloc_debug``: 与 ``pymalloc`` 相同但还会安装调试钩子。" + +#: ../../using/cmdline.rst:810 +msgid "" +"See the :ref:`default memory allocators ` and the" +" :c:func:`PyMem_SetupDebugHooks` function (install debug hooks on Python " +"memory allocators)." +msgstr "" +"请参阅 :ref:`默认内存分配器 ` 以及 " +":c:func:`PyMem_SetupDebugHooks` 函数(在 Python 内存分配器之上安装调试钩子)。" + +#: ../../using/cmdline.rst:814 +msgid "Added the ``\"default\"`` allocator." +msgstr "增加了 ``\"default\"`` 分配器。" + +#: ../../using/cmdline.rst:822 +msgid "" +"If set to a non-empty string, Python will print statistics of the " +":ref:`pymalloc memory allocator ` every time a new pymalloc object" +" arena is created, and on shutdown." +msgstr "" +"如果设为一个非空字符串,Python 将在每次创建新的 pymalloc 对象区域以及在关闭时打印 :ref:`pymalloc 内存分配器 " +"` 的统计信息。" + +#: ../../using/cmdline.rst:826 +msgid "" +"This variable is ignored if the :envvar:`PYTHONMALLOC` environment variable " +"is used to force the :c:func:`malloc` allocator of the C library, or if " +"Python is configured without ``pymalloc`` support." +msgstr "" +"如果 :envvar:`PYTHONMALLOC` 环境变量被用来强制开启 C 库的 :c:func:`malloc` 分配器,或者如果 Python " +"的配置不支持 ``pymalloc``,则此变量将被忽略。" + +#: ../../using/cmdline.rst:830 +msgid "" +"This variable can now also be used on Python compiled in release mode. It " +"now has no effect if set to an empty string." +msgstr "此变量现在也可以被用于在发布模式下编译的 Python。 如果它被设置为一个空字符串则将没有任何效果。" + +#: ../../using/cmdline.rst:837 +msgid "" +"If set to a non-empty string, the default filesystem encoding and errors " +"mode will revert to their pre-3.6 values of 'mbcs' and 'replace', " +"respectively. Otherwise, the new defaults 'utf-8' and 'surrogatepass' are " +"used." +msgstr "" +"如果设为一个非空字符串,则默认的文件系统编码和错误模式将分别恢复为它们在 3.6 版之前的值 'mbcs' 和 'replace'。 " +"否则会使用新的默认值 'utf-8' 和 'surrogatepass'。" + +#: ../../using/cmdline.rst:841 +msgid "" +"This may also be enabled at runtime with " +":func:`sys._enablelegacywindowsfsencoding()`." +msgstr "这也可以在运行时通过 :func:`sys._enablelegacywindowsfsencoding()` 来启用。" + +#: ../../using/cmdline.rst:845 ../../using/cmdline.rst:859 +msgid ":ref:`Availability `: Windows." +msgstr ":ref:`可用性 `: Windows。" + +#: ../../using/cmdline.rst:846 +msgid "See :pep:`529` for more details." +msgstr "更多详情请参阅 :pep:`529`。" + +#: ../../using/cmdline.rst:851 +msgid "" +"If set to a non-empty string, does not use the new console reader and " +"writer. This means that Unicode characters will be encoded according to the " +"active console code page, rather than using utf-8." +msgstr "" +"如果设为一个非空字符串,则不使用新的控制台读取器和写入器。 这意味着 Unicode 字符将根据活动控制台的代码页进行编码,而不是使用 utf-8。" + +#: ../../using/cmdline.rst:855 +msgid "" +"This variable is ignored if the standard streams are redirected (to files or" +" pipes) rather than referring to console buffers." +msgstr "如果标准流被重定向(到文件或管道)而不是指向控制台缓冲区则该变量会被忽略。" + +#: ../../using/cmdline.rst:865 +msgid "" +"If set to the value ``0``, causes the main Python command line application " +"to skip coercing the legacy ASCII-based C and POSIX locales to a more " +"capable UTF-8 based alternative." +msgstr "" +"如果值设为 ``0``,将导致主 Python 命令行应用跳过将传统的基于 ASCII 的 C 与 POSIX 区域设置强制转换为更强大的基于 " +"UTF-8 的替代方案。" + +#: ../../using/cmdline.rst:869 +msgid "" +"If this variable is *not* set (or is set to a value other than ``0``), the " +"``LC_ALL`` locale override environment variable is also not set, and the " +"current locale reported for the ``LC_CTYPE`` category is either the default " +"``C`` locale, or else the explicitly ASCII-based ``POSIX`` locale, then the " +"Python CLI will attempt to configure the following locales for the " +"``LC_CTYPE`` category in the order listed before loading the interpreter " +"runtime:" +msgstr "" +"如果此变量 *未被* 设置(或被设为 ``0`` 以外的值),则覆盖环境变量的 ``LC_ALL`` 区域选项也不会被设置,并且报告给 " +"``LC_CTYPE`` 类别的当前区域选项或者为默认的 ``C`` 区域,或者为显式指明的基于 ASCII 的 ``POSIX`` 区域,然后 " +"Python CLI 将在加载解释器运行时之前尝试为 ``LC_CTYPE`` 类别按指定的顺序配置下列区域选项:" + +#: ../../using/cmdline.rst:877 +msgid "``C.UTF-8``" +msgstr "``C.UTF-8``" + +#: ../../using/cmdline.rst:878 +msgid "``C.utf8``" +msgstr "``C.utf8``" + +#: ../../using/cmdline.rst:879 +msgid "``UTF-8``" +msgstr "``UTF-8``" + +#: ../../using/cmdline.rst:881 +msgid "" +"If setting one of these locale categories succeeds, then the ``LC_CTYPE`` " +"environment variable will also be set accordingly in the current process " +"environment before the Python runtime is initialized. This ensures that in " +"addition to being seen by both the interpreter itself and other locale-aware" +" components running in the same process (such as the GNU ``readline`` " +"library), the updated setting is also seen in subprocesses (regardless of " +"whether or not those processes are running a Python interpreter), as well as" +" in operations that query the environment rather than the current C locale " +"(such as Python's own :func:`locale.getdefaultlocale`)." +msgstr "" +"如果成功设置了以上区域类别中的一个,则初始化 Python 运行时之前也将在当前进程环境中相应地设置 ``LC_CTYPE`` 环境变量。 " +"这会确保除了解释器本身和运行于同一进程中的其他可感知区域选项的组件 (例如 GNU ``readline`` 库) 之外,还能在子进程 " +"(无论这些进程是否在运行 Python 解释器) 以及在查询环境而非当前 C 区域的操作 (例如 Python 自己的 " +":func:`locale.getdefaultlocale`) 中看到更新的设置。" + +#: ../../using/cmdline.rst:891 +msgid "" +"Configuring one of these locales (either explicitly or via the above " +"implicit locale coercion) automatically enables the ``surrogateescape`` " +":ref:`error handler ` for :data:`sys.stdin` and " +":data:`sys.stdout` (:data:`sys.stderr` continues to use ``backslashreplace``" +" as it does in any other locale). This stream handling behavior can be " +"overridden using :envvar:`PYTHONIOENCODING` as usual." +msgstr "" +"(显式地或通过上述的隐式区域强制转换) 配置其中一个区域选项将自动为 :data:`sys.stdin` 和 :data:`sys.stdout` 启用" +" ``surrogateescape`` :ref:`错误处理器 ` (:data:`sys.stderr` 会继续使用" +" ``backslashreplace`` 如同在任何其他区域选项中一样)。 这种流处理行为可以按通常方式使用 " +":envvar:`PYTHONIOENCODING` 来覆盖。" + +#: ../../using/cmdline.rst:898 +msgid "" +"For debugging purposes, setting ``PYTHONCOERCECLOCALE=warn`` will cause " +"Python to emit warning messages on ``stderr`` if either the locale coercion " +"activates, or else if a locale that *would* have triggered coercion is still" +" active when the Python runtime is initialized." +msgstr "" +"出于调试目的,如果激活了区域强制转换,或者如果当 Python 运行时被初始化时某个 *应该* 触发强制转换的区域选项仍处于激活状态则设置 " +"``PYTHONCOERCECLOCALE=warn`` 将导致 Python 在 ``stderr`` 上发出警告消息。" + +#: ../../using/cmdline.rst:903 +msgid "" +"Also note that even when locale coercion is disabled, or when it fails to " +"find a suitable target locale, :envvar:`PYTHONUTF8` will still activate by " +"default in legacy ASCII-based locales. Both features must be disabled in " +"order to force the interpreter to use ``ASCII`` instead of ``UTF-8`` for " +"system interfaces." +msgstr "" +"还要注意,即使在区域转换转换被禁用,或者在其无法找到合适的目标区域时,默认 :envvar:`PYTHONUTF8` 仍将在传统的基于 ASCII " +"的区域中被激活。 必须同时禁用这两项特性以强制解释器使用 ``ASCII`` 而不是 ``UTF-8`` 作为系统接口。" + +#: ../../using/cmdline.rst:910 +msgid ":ref:`Availability `: \\*nix." +msgstr ":ref:`可用性 `: \\*nix。" + +#: ../../using/cmdline.rst:911 +msgid "See :pep:`538` for more details." +msgstr "请参阅 :pep:`538` 了解详情。" + +#: ../../using/cmdline.rst:917 +msgid "" +"If this environment variable is set to a non-empty string, enable " +":ref:`Python Development Mode `, introducing additional runtime " +"checks that are too expensive to be enabled by default." +msgstr "" +"如果将此环境变量设为非空字符串,则启用 :ref:`Python 开发模式 `,引入在默认情况下启用会导致开销过大的运行时检查。" + +#: ../../using/cmdline.rst:925 +msgid "" +"If set to ``1``, enables the interpreter's UTF-8 mode, where ``UTF-8`` is " +"used as the text encoding for system interfaces, regardless of the current " +"locale setting." +msgstr "如果设为 ``1``,则会启用解释器的 UTF-8 模式,将 ``UTF-8`` 用作系统接口的文本编码,无论当前区域选项如何设置。" + +#: ../../using/cmdline.rst:929 +msgid "This means that:" +msgstr "这意味着:" + +#: ../../using/cmdline.rst:931 +msgid "" +":func:`sys.getfilesystemencoding()` returns ``'UTF-8'`` (the locale encoding" +" is ignored)." +msgstr ":func:`sys.getfilesystemencoding()` 将返回 ``'UTF-8'`` (本地编码会被忽略)。" + +#: ../../using/cmdline.rst:933 +msgid "" +":func:`locale.getpreferredencoding()` returns ``'UTF-8'`` (the locale " +"encoding is ignored, and the function's ``do_setlocale`` parameter has no " +"effect)." +msgstr "" +":func:`locale.getpreferredencoding()` 将返回 ``'UTF-8'`` (本地编码会被忽略,并且该函数的 " +"``do_setlocale`` 参数不起作用)。" + +#: ../../using/cmdline.rst:936 +msgid "" +":data:`sys.stdin`, :data:`sys.stdout`, and :data:`sys.stderr` all use UTF-8 " +"as their text encoding, with the ``surrogateescape`` :ref:`error handler " +"` being enabled for :data:`sys.stdin` and :data:`sys.stdout`" +" (:data:`sys.stderr` continues to use ``backslashreplace`` as it does in the" +" default locale-aware mode)" +msgstr "" +":data:`sys.stdin`, :data:`sys.stdout` 和 :data:`sys.stderr` 都将 UTF-8 " +"用作它们的文本编码,并且为 :data:`sys.stdin` 和 :data:`sys.stdout` 启用 ``surrogateescape`` " +":ref:`错误处理器 ` (:data:`sys.stderr` 会继续使用 ``backslashreplace``" +" 如同在默认的局部感知模式下一样)" + +#: ../../using/cmdline.rst:942 +msgid "" +"As a consequence of the changes in those lower level APIs, other higher " +"level APIs also exhibit different default behaviours:" +msgstr "作为低层级 API 发生改变的结果,其他高层级 API 也会表现出不同的默认行为:" + +#: ../../using/cmdline.rst:945 +msgid "" +"Command line arguments, environment variables and filenames are decoded to " +"text using the UTF-8 encoding." +msgstr "命令行参数,环境变量和文件名会使用 UTF-8 编码来解码为文本。" + +#: ../../using/cmdline.rst:947 +msgid "" +":func:`os.fsdecode()` and :func:`os.fsencode()` use the UTF-8 encoding." +msgstr ":func:`os.fsdecode()` 和 :func:`os.fsencode()` 会使用 UTF-8 编码。" + +#: ../../using/cmdline.rst:948 +msgid "" +":func:`open()`, :func:`io.open()`, and :func:`codecs.open()` use the UTF-8 " +"encoding by default. However, they still use the strict error handler by " +"default so that attempting to open a binary file in text mode is likely to " +"raise an exception rather than producing nonsense data." +msgstr "" +":func:`open()`, :func:`io.open()` 和 :func:`codecs.open()` 默认会使用 UTF-8 编码。 " +"但是,它们默认仍将使用 strict 错误处理器,因此试图在文本模式下打开二进制文件将可能引发异常,而不是生成无意义的数据。" + +#: ../../using/cmdline.rst:953 +msgid "" +"Note that the standard stream settings in UTF-8 mode can be overridden by " +":envvar:`PYTHONIOENCODING` (just as they can be in the default locale-aware " +"mode)." +msgstr "" +"请注意 UTF-8 模式下的标准流设置可以被 :envvar:`PYTHONIOENCODING` 所覆盖(在默认的区域感知模式下也同样如此)。" + +#: ../../using/cmdline.rst:957 +msgid "" +"If set to ``0``, the interpreter runs in its default locale-aware mode." +msgstr "如果设置为“0”,则解释器以其默认的区域识别模式运行。" + +#: ../../using/cmdline.rst:959 +msgid "" +"Setting any other non-empty string causes an error during interpreter " +"initialisation." +msgstr "设置任何其他非空字符串会在解释器初始化期间导致错误。" + +#: ../../using/cmdline.rst:962 +msgid "" +"If this environment variable is not set at all, then the interpreter " +"defaults to using the current locale settings, *unless* the current locale " +"is identified as a legacy ASCII-based locale (as described for " +":envvar:`PYTHONCOERCECLOCALE`), and locale coercion is either disabled or " +"fails. In such legacy locales, the interpreter will default to enabling " +"UTF-8 mode unless explicitly instructed not to do so." +msgstr "" +"如果根本未设置此环境变量,则解释器默认使用当前区域设置,*除非* 当前区域被标识为基于 ASCII 的旧式区域设置(如 " +":envvar:`PYTHONCOERCECLOCALE` 所述),并且区域强制转换被禁用或失败。 在此类旧式区域设置中,解释器将默认启用 UTF-8 " +"模式,除非显式地指定不这样做。" + +#: ../../using/cmdline.rst:969 +msgid "Also available as the :option:`-X` ``utf8`` option." +msgstr "也可以使用 :option:`-X` ``utf8`` 选项。" + +#: ../../using/cmdline.rst:971 +msgid "See :pep:`540` for more details." +msgstr "有关更多详细信息,请参阅 :pep:`540` 。" + +#: ../../using/cmdline.rst:976 +msgid "Debug-mode variables" +msgstr "调试模式变量" + +#: ../../using/cmdline.rst:978 +msgid "Setting these variables only has an effect in a debug build of Python." +msgstr "设置这些变量只会在Python的调试版本中产生影响。" + +#: ../../using/cmdline.rst:982 +msgid "If set, Python will print threading debug info." +msgstr "如果设置,Python将打印线程调试信息。" + +#: ../../using/cmdline.rst:984 +msgid "Need Python configured with the ``--with-pydebug`` build option." +msgstr "需要使用 ``--with-pydebug`` 构建选项配置Python。" + +#: ../../using/cmdline.rst:989 +msgid "" +"If set, Python will dump objects and reference counts still alive after " +"shutting down the interpreter." +msgstr "如果设置,Python 将在关闭解释器后转储仍存活的对象和引用计数。" + +#: ../../using/cmdline.rst:992 +msgid "Need Python configured with the ``--with-trace-refs`` build option." +msgstr "需要使用 ``--with-trace-refs`` 构建选项配置Python。" diff --git a/using/editors.po b/using/editors.po new file mode 100644 index 000000000..d2c40ce45 --- /dev/null +++ b/using/editors.po @@ -0,0 +1,45 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) 2001-2022, Python Software Foundation +# This file is distributed under the same license as the Python package. +# FIRST AUTHOR , YEAR. +# +# Translators: +# 志正 韩 <304292903@qq.com>, 2019 +# ppcfish , 2019 +# +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: Python 3.9\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2022-11-04 14:34+0000\n" +"PO-Revision-Date: 2019-07-19 03:03+0000\n" +"Last-Translator: ppcfish , 2019\n" +"Language-Team: Chinese (China) (https://www.transifex.com/python-doc/teams/5390/zh_CN/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: zh_CN\n" +"Plural-Forms: nplurals=1; plural=0;\n" + +#: ../../using/editors.rst:7 +msgid "Editors and IDEs" +msgstr "编辑器和集成开发环境" + +#: ../../using/editors.rst:9 +msgid "" +"There are a number of IDEs that support Python programming language. Many " +"editors and IDEs provide syntax highlighting, debugging tools, and :pep:`8` " +"checks." +msgstr "有很多支持Python编程语言的集成开发环境。大多数编辑器和集成开发环境支持语法高亮,调试工具和 :pep:`8` 检查。" + +#: ../../using/editors.rst:12 +msgid "" +"Please go to `Python Editors `_ " +"and `Integrated Development Environments " +"`_ for a " +"comprehensive list." +msgstr "" +"请访问 `Python Editors `_ 和 " +"`Integrated Development Environments " +"`_ 以获取完整列表。" diff --git a/using/index.po b/using/index.po new file mode 100644 index 000000000..7464460fa --- /dev/null +++ b/using/index.po @@ -0,0 +1,34 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) 2001-2022, Python Software Foundation +# This file is distributed under the same license as the Python package. +# FIRST AUTHOR , YEAR. +# +# Translators: +# cdarlint , 2017 +# QR Wang , 2018 +# +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: Python 3.9\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2022-11-04 14:34+0000\n" +"PO-Revision-Date: 2017-02-16 23:41+0000\n" +"Last-Translator: QR Wang , 2018\n" +"Language-Team: Chinese (China) (https://www.transifex.com/python-doc/teams/5390/zh_CN/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: zh_CN\n" +"Plural-Forms: nplurals=1; plural=0;\n" + +#: ../../using/index.rst:5 +msgid "Python Setup and Usage" +msgstr "安装和使用 Python" + +#: ../../using/index.rst:8 +msgid "" +"This part of the documentation is devoted to general information on the " +"setup of the Python environment on different platforms, the invocation of " +"the interpreter and things that make working with Python easier." +msgstr "这一部分文档专门介绍在不同平台上配置Python环境的一般方法,解释器的调用以及方便使用Python的技巧。" diff --git a/using/mac.po b/using/mac.po new file mode 100644 index 000000000..a23e16eca --- /dev/null +++ b/using/mac.po @@ -0,0 +1,336 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) 2001-2022, Python Software Foundation +# This file is distributed under the same license as the Python package. +# FIRST AUTHOR , YEAR. +# +# Translators: +# cdarlint , 2017 +# Fei Yin , 2018 +# Freesand Leo , 2020 +# Alpha Du , 2022 +# +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: Python 3.9\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2022-11-04 14:34+0000\n" +"PO-Revision-Date: 2017-02-16 23:42+0000\n" +"Last-Translator: Alpha Du , 2022\n" +"Language-Team: Chinese (China) (https://www.transifex.com/python-doc/teams/5390/zh_CN/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: zh_CN\n" +"Plural-Forms: nplurals=1; plural=0;\n" + +#: ../../using/mac.rst:6 +msgid "Using Python on a Mac" +msgstr "在 Mac 上使用 Python" + +#: ../../using/mac.rst:0 +msgid "Author" +msgstr "作者" + +#: ../../using/mac.rst:8 +msgid "Bob Savage " +msgstr "Bob Savage " + +#: ../../using/mac.rst:11 +msgid "" +"Python on a Mac running macOS is in principle very similar to Python on any " +"other Unix platform, but there are a number of additional features such as " +"the IDE and the Package Manager that are worth pointing out." +msgstr "" +"在运行 macOS 的 Mac 上的 Python 原则上与在其他 Unix 平台上的 Python 非常相似,但有一些额外的特性,如 IDE " +"和包管理器,值得指出。" + +#: ../../using/mac.rst:18 +msgid "Getting and Installing MacPython" +msgstr "获取和安装 MacPython" + +#: ../../using/mac.rst:20 +msgid "" +"macOS since version 10.8 comes with Python 2.7 pre-installed by Apple. If " +"you wish, you are invited to install the most recent version of Python 3 " +"from the Python website (https://www.python.org). A current \"universal " +"binary\" build of Python, which runs natively on the Mac's new Intel and " +"legacy PPC CPU's, is available there." +msgstr "" +"macOS 从 10.8 版开始就由苹果预装了 Python 2.7 。如果你希望,你可以从 Python 网站 " +"(https://www.python.org) 安装最新的 Python 3 版本。 那里有当前的Python的 \"通用二进制\" " +"版本,它可以在Mac的新 Intel 和传统的PPC CPU 上运行。" + +#: ../../using/mac.rst:26 +msgid "What you get after installing is a number of things:" +msgstr "你安装后得到的东西有:" + +#: ../../using/mac.rst:28 +msgid "" +"A :file:`Python 3.9` folder in your :file:`Applications` folder. In here you" +" find IDLE, the development environment that is a standard part of official " +"Python distributions; and PythonLauncher, which handles double-clicking " +"Python scripts from the Finder." +msgstr "" +"会有一个 :file:`Python 3.9` 文件夹在你的 :file:`Applications` 文件夹中。 在这里你可以找到 " +"IDLE,它是作为官方 Python 发行版标准组成部分的开发环境;以及 PythonLauncher,它负责处理在 Finder 中双击 Python" +" 脚本的操作。" + +#: ../../using/mac.rst:33 +msgid "" +"A framework :file:`/Library/Frameworks/Python.framework`, which includes the" +" Python executable and libraries. The installer adds this location to your " +"shell path. To uninstall MacPython, you can simply remove these three " +"things. A symlink to the Python executable is placed in /usr/local/bin/." +msgstr "" +"框架 :file:`/Library/Frameworks/Python.framework` ,包括 Python " +"可执行文件和库。安装程序将此位置添加到 shell 路径。 要卸载 MacPython ,你可以简单地移除这三个项目。 Python " +"可执行文件的符号链接放在 /usr/local/bin/ 中。" + +#: ../../using/mac.rst:38 +msgid "" +"The Apple-provided build of Python is installed in " +":file:`/System/Library/Frameworks/Python.framework` and " +":file:`/usr/bin/python`, respectively. You should never modify or delete " +"these, as they are Apple-controlled and are used by Apple- or third-party " +"software. Remember that if you choose to install a newer Python version " +"from python.org, you will have two different but functional Python " +"installations on your computer, so it will be important that your paths and " +"usages are consistent with what you want to do." +msgstr "" +"Apple 提供的 Python 版本分别安装在 :file:`/System/Library/Frameworks/Python.framework`" +" 和 :file:`/usr/bin/python` 中。 你永远不应修改或删除这些内容,因为它们由 Apple 控制并由 Apple " +"或第三方软件使用。 请记住,如果你选择从 python.org 安装较新的 Python 版本,那么你的计算机上将安装两个不同但都有用的 Python " +",因此你的路径和用法与你想要执行的操作一致非常重要。" + +#: ../../using/mac.rst:46 +msgid "" +"IDLE includes a help menu that allows you to access Python documentation. If" +" you are completely new to Python you should start reading the tutorial " +"introduction in that document." +msgstr "IDLE 包含一个帮助菜单,允许你访问 Python 文档。 如果您是 Python 的新手,你应该开始阅读该文档中的教程介绍。" + +#: ../../using/mac.rst:50 +msgid "" +"If you are familiar with Python on other Unix platforms you should read the " +"section on running Python scripts from the Unix shell." +msgstr "如果你熟悉其他 Unix 平台上的 Python ,那么你应该阅读有关从 Unix shell 运行 Python 脚本的部分。" + +#: ../../using/mac.rst:55 +msgid "How to run a Python script" +msgstr "如何运行 Python 脚本" + +#: ../../using/mac.rst:57 +msgid "" +"Your best way to get started with Python on macOS is through the IDLE " +"integrated development environment, see section :ref:`ide` and use the Help " +"menu when the IDE is running." +msgstr "" +"你在 macOS 上开始使用 Python 的最好方法是通过 IDLE 集成开发环境,参见章节 :ref:`ide` 以及在IDE运行时使用帮助菜单。" + +#: ../../using/mac.rst:61 +msgid "" +"If you want to run Python scripts from the Terminal window command line or " +"from the Finder you first need an editor to create your script. macOS comes " +"with a number of standard Unix command line editors, :program:`vim` and " +":program:`emacs` among them. If you want a more Mac-like editor, " +":program:`BBEdit` or :program:`TextWrangler` from Bare Bones Software (see " +"http://www.barebones.com/products/bbedit/index.html) are good choices, as is" +" :program:`TextMate` (see https://macromates.com/). Other editors include " +":program:`Gvim` (http://macvim-dev.github.io/macvim/) and " +":program:`Aquamacs` (http://aquamacs.org/)." +msgstr "" +"如果你想从终端窗口的命令行或 Finder 中运行 Python 脚本,你首先需要一个编辑器来创建你的脚本。macOS 自带了一些标准的 Unix " +"命令行编辑器, :program:`vim` 和 :program:`emacs` 就是其中之二。如果你想要一个更 Mac 的编辑器,来自 Bare " +"Bones Software 的 :program:`BBEdit` 或 :program:`TextWrangler` (见 " +"http://www.barebones.com/products/bbedit/index.html )是不错的选择,还有 " +":program:`TextMate` (见 https://macromates.com/ )。其他编辑器包括 :program:`Gvim` ( " +"http://macvim-dev.github.io/macvim/ )和 :program:`Aquamacs` ( " +"http://aquamacs.org/ )。" + +#: ../../using/mac.rst:71 +msgid "" +"To run your script from the Terminal window you must make sure that " +":file:`/usr/local/bin` is in your shell search path." +msgstr "要从终端窗口运行脚本,必须确保:file:`/usr/local/bin` 位于 shell 搜索路径中。" + +#: ../../using/mac.rst:74 +msgid "To run your script from the Finder you have two options:" +msgstr "要从 Finder 运行你的脚本,你有两个选择:" + +#: ../../using/mac.rst:76 +msgid "Drag it to :program:`PythonLauncher`" +msgstr "把脚本拖拽到 :program:`PythonLauncher`" + +#: ../../using/mac.rst:78 +msgid "" +"Select :program:`PythonLauncher` as the default application to open your " +"script (or any .py script) through the finder Info window and double-click " +"it. :program:`PythonLauncher` has various preferences to control how your " +"script is launched. Option-dragging allows you to change these for one " +"invocation, or use its Preferences menu to change things globally." +msgstr "" +"选择 :program:`PythonLauncher` 作为通过 finder Info 窗口打开脚本(或任何 .py " +"脚本)的默认应用程序,然后双击脚本。 :program:`PythonLauncher` 有各种首选项来控制脚本的启动方式。 " +"拖拽方式允许你为一次调用更改这些选项,或使用其“首选项”菜单全局更改内容。" + +#: ../../using/mac.rst:88 +msgid "Running scripts with a GUI" +msgstr "运行有图形界面的脚本" + +#: ../../using/mac.rst:90 +msgid "" +"With older versions of Python, there is one macOS quirk that you need to be " +"aware of: programs that talk to the Aqua window manager (in other words, " +"anything that has a GUI) need to be run in a special way. Use " +":program:`pythonw` instead of :program:`python` to start such scripts." +msgstr "" +"对于旧版本的 Python ,有一个需要注意的 macOS 特殊问题:与 Aqua 窗口管理器通信的程序(换句话说,任何有 GUI " +"的程序)需要以特殊的方式运行。使用 :program:`pythonw` 而不是 :program:`python` 来启动此类脚本。" + +#: ../../using/mac.rst:95 +msgid "" +"With Python 3.9, you can use either :program:`python` or :program:`pythonw`." +msgstr "对于 Python 3.9,你可以使用 :program:`python` 或者 :program:`pythonw`。" + +#: ../../using/mac.rst:99 +msgid "Configuration" +msgstr "配置" + +#: ../../using/mac.rst:101 +msgid "" +"Python on macOS honors all standard Unix environment variables such as " +":envvar:`PYTHONPATH`, but setting these variables for programs started from " +"the Finder is non-standard as the Finder does not read your :file:`.profile`" +" or :file:`.cshrc` at startup. You need to create a file " +":file:`~/.MacOSX/environment.plist`. See Apple's Technical Document QA1067 " +"for details." +msgstr "" +"macOS 上的 Python 遵循所有标准的 Unix 环境变量,例如 :envvar:`PYTHONPATH` ,但是为从 Finder " +"启动的程序设置这些变量是不标准的,因为 Finder 在启动时不会读取你的 :file:`.profile` 或 :file:`.cshrc` " +"。你需要创建一个文件 :file:`~/.MacOSX/environment.plist` 。详情请看苹果的技术文件QA1067。" + +#: ../../using/mac.rst:108 +msgid "" +"For more information on installation Python packages in MacPython, see " +"section :ref:`mac-package-manager`." +msgstr "更多关于在 MacPython 中安装 Python 包的信息,参阅 :ref:`mac-package-manager` 部分。" + +#: ../../using/mac.rst:115 +msgid "The IDE" +msgstr "IDE" + +#: ../../using/mac.rst:117 +msgid "" +"MacPython ships with the standard IDLE development environment. A good " +"introduction to using IDLE can be found at " +"http://www.hashcollision.org/hkn/python/idle_intro/index.html." +msgstr "" +"MacPython 附带标准的 IDLE 开发环境。 有关使用 IDLE 的详细介绍,请访问 " +"http://www.hashcollision.org/hkn/python/idle_intro/index.html 。" + +#: ../../using/mac.rst:125 +msgid "Installing Additional Python Packages" +msgstr "安装额外的 Python 包" + +#: ../../using/mac.rst:127 +msgid "There are several methods to install additional Python packages:" +msgstr "有几个方法可以安装额外的 Python 包:" + +#: ../../using/mac.rst:129 +msgid "" +"Packages can be installed via the standard Python distutils mode (``python " +"setup.py install``)." +msgstr "可以通过标准的 Python distutils 模式( ``python setup.py install`` )安装软件包。" + +#: ../../using/mac.rst:132 +msgid "" +"Many packages can also be installed via the :program:`setuptools` extension " +"or :program:`pip` wrapper, see https://pip.pypa.io/." +msgstr "" +"许多包也可以通过 :program:`setuptools` 扩展或 :program:`pip` 包装器安装,请参阅 " +"https://pip.pypa.io/ 。" + +#: ../../using/mac.rst:137 +msgid "GUI Programming on the Mac" +msgstr "Mac 上的图形界面编程" + +#: ../../using/mac.rst:139 +msgid "" +"There are several options for building GUI applications on the Mac with " +"Python." +msgstr "使用 Python 在 Mac 上构建 GUI 应用程序有多种选择。" + +#: ../../using/mac.rst:141 +msgid "" +"*PyObjC* is a Python binding to Apple's Objective-C/Cocoa framework, which " +"is the foundation of most modern Mac development. Information on PyObjC is " +"available from https://pypi.org/project/pyobjc/." +msgstr "" +"*PyObjC* 是一个 Python 到 Apple 的 Objective-C/Cocoa 框架的绑定,这是大多数现代 Mac 开发的基础。 有关 " +"PyObjC 的信息,请访问 https://pypi.org/project/pyobjc/。" + +#: ../../using/mac.rst:145 +msgid "" +"The standard Python GUI toolkit is :mod:`tkinter`, based on the cross-" +"platform Tk toolkit (https://www.tcl.tk). An Aqua-native version of Tk is " +"bundled with OS X by Apple, and the latest version can be downloaded and " +"installed from https://www.activestate.com; it can also be built from " +"source." +msgstr "" +"标准的 Python GUI 工具包是 :mod:`tkinter` ,基于跨平台的 Tk 工具包( https://www.tcl.tk )。 " +"Apple 的 OS X 捆绑了 Aqua 原生版本的 Tk ,最新版本可以从 https://www.activestate.com " +"下载和安装;它也可以从源代码构建。" + +#: ../../using/mac.rst:150 +msgid "" +"*wxPython* is another popular cross-platform GUI toolkit that runs natively " +"on macOS. Packages and documentation are available from " +"https://www.wxpython.org." +msgstr "" +"*wxPython* 是另一个流行的跨平台 GUI 工具包,可以在 macOS 上原生运行。软件包和文档可从 " +"https://www.wxpython.org 获取。" + +#: ../../using/mac.rst:153 +msgid "" +"*PyQt* is another popular cross-platform GUI toolkit that runs natively on " +"macOS. More information can be found at " +"https://riverbankcomputing.com/software/pyqt/intro." +msgstr "" +"*PyQt* 是另一个流行的跨平台 GUI 工具包,可以在 MacOS 上原生运行。更多信息可以在 " +"https://riverbankcomputing.com/software/pyqt/intro 找到。" + +#: ../../using/mac.rst:159 +msgid "Distributing Python Applications on the Mac" +msgstr "在 Mac 上分发 Python 应用程序" + +#: ../../using/mac.rst:161 +msgid "" +"The standard tool for deploying standalone Python applications on the Mac is" +" :program:`py2app`. More information on installing and using py2app can be " +"found at https://pypi.org/project/py2app/." +msgstr "" +"在 Mac 上部署独立 Python 应用程序的标准工具是 :program:`py2app` 。关于安装和使用 py2app 的更多信息可以在 " +"https://pypi.org/project/py2app/ 找到。" + +#: ../../using/mac.rst:167 +msgid "Other Resources" +msgstr "其他资源" + +#: ../../using/mac.rst:169 +msgid "" +"The MacPython mailing list is an excellent support resource for Python users" +" and developers on the Mac:" +msgstr "MacPython 邮件列表是 Mac 上 Python 用户和开发人员的优秀支持资源:" + +#: ../../using/mac.rst:172 +msgid "https://www.python.org/community/sigs/current/pythonmac-sig/" +msgstr "https://www.python.org/community/sigs/current/pythonmac-sig/" + +#: ../../using/mac.rst:174 +msgid "Another useful resource is the MacPython wiki:" +msgstr "另一个有用的资源是 MacPython wiki :" + +#: ../../using/mac.rst:176 +msgid "https://wiki.python.org/moin/MacPython" +msgstr "https://wiki.python.org/moin/MacPython" diff --git a/using/unix.po b/using/unix.po new file mode 100644 index 000000000..4cc6d2552 --- /dev/null +++ b/using/unix.po @@ -0,0 +1,248 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) 2001-2022, Python Software Foundation +# This file is distributed under the same license as the Python package. +# FIRST AUTHOR , YEAR. +# +# Translators: +# 梁启凡 , 2017 +# wevsty , 2019 +# ppcfish , 2019 +# +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: Python 3.9\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2022-11-04 14:34+0000\n" +"PO-Revision-Date: 2017-02-16 23:42+0000\n" +"Last-Translator: ppcfish , 2019\n" +"Language-Team: Chinese (China) (https://www.transifex.com/python-doc/teams/5390/zh_CN/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: zh_CN\n" +"Plural-Forms: nplurals=1; plural=0;\n" + +#: ../../using/unix.rst:7 +msgid "Using Python on Unix platforms" +msgstr "在Unix平台中使用Python" + +#: ../../using/unix.rst:13 +msgid "Getting and installing the latest version of Python" +msgstr "获取最新版本的Python" + +#: ../../using/unix.rst:16 +msgid "On Linux" +msgstr "在Linux中" + +#: ../../using/unix.rst:18 +msgid "" +"Python comes preinstalled on most Linux distributions, and is available as a" +" package on all others. However there are certain features you might want " +"to use that are not available on your distro's package. You can easily " +"compile the latest version of Python from source." +msgstr "" +"Python预装在大多数Linux发行版上,并作为一个包提供给所有其他用户。 " +"但是,您可能想要使用的某些功能在发行版提供的软件包中不可用。这时您可以从源代码轻松编译最新版本的Python。" + +#: ../../using/unix.rst:23 +msgid "" +"In the event that Python doesn't come preinstalled and isn't in the " +"repositories as well, you can easily make packages for your own distro. " +"Have a look at the following links:" +msgstr "如果Python没有预先安装并且不在发行版提供的库中,您可以轻松地为自己使用的发行版创建包。 参阅以下链接:" + +#: ../../using/unix.rst:29 +msgid "https://www.debian.org/doc/manuals/maint-guide/first.en.html" +msgstr "https://www.debian.org/doc/manuals/maint-guide/first.en.html" + +#: ../../using/unix.rst:30 +msgid "for Debian users" +msgstr "对于Debian用户" + +#: ../../using/unix.rst:31 +msgid "https://en.opensuse.org/Portal:Packaging" +msgstr "https://en.opensuse.org/Portal:Packaging" + +#: ../../using/unix.rst:32 +msgid "for OpenSuse users" +msgstr "对于OpenSuse用户" + +#: ../../using/unix.rst:33 +msgid "" +"https://docs-old.fedoraproject.org/en-" +"US/Fedora_Draft_Documentation/0.1/html/RPM_Guide/ch-creating-rpms.html" +msgstr "" +"https://docs-old.fedoraproject.org/en-" +"US/Fedora_Draft_Documentation/0.1/html/RPM_Guide/ch-creating-rpms.html" + +#: ../../using/unix.rst:34 +msgid "for Fedora users" +msgstr "对于Fedora用户" + +#: ../../using/unix.rst:35 +msgid "http://www.slackbook.org/html/package-management-making-packages.html" +msgstr "http://www.slackbook.org/html/package-management-making-packages.html" + +#: ../../using/unix.rst:36 +msgid "for Slackware users" +msgstr "对于Slackware用户" + +#: ../../using/unix.rst:40 +msgid "On FreeBSD and OpenBSD" +msgstr "在FreeBSD和OpenBSD上" + +#: ../../using/unix.rst:42 +msgid "FreeBSD users, to add the package use::" +msgstr "FreeBSD用户,使用以下命令添加包::" + +#: ../../using/unix.rst:46 +msgid "OpenBSD users, to add the package use::" +msgstr "OpenBSD用户,使用以下命令添加包::" + +#: ../../using/unix.rst:52 +msgid "For example i386 users get the 2.5.1 version of Python using::" +msgstr "例如:i386用户获取Python 2.5.1的可用版本::" + +#: ../../using/unix.rst:58 +msgid "On OpenSolaris" +msgstr "在OpenSolaris系统上" + +#: ../../using/unix.rst:60 +msgid "" +"You can get Python from `OpenCSW `_. Various " +"versions of Python are available and can be installed with e.g. ``pkgutil -i" +" python27``." +msgstr "" +"你可以从 `OpenCSW `_ 获取、安装及使用各种版本的Python。比如 ``pkgutil " +"-i python27`` 。" + +#: ../../using/unix.rst:67 +msgid "Building Python" +msgstr "构建Python" + +#: ../../using/unix.rst:69 +msgid "" +"If you want to compile CPython yourself, first thing you should do is get " +"the `source `_. You can download " +"either the latest release's source or just grab a fresh `clone " +"`_. (If you " +"want to contribute patches, you will need a clone.)" +msgstr "" +"如果你想自己编译CPython,首先要做的是获取 `source " +"`_ 。您可以下载最新版本的源代码,也可以直接提取最新的 " +"`clone `_ 。 " +"(如果你想要制作补丁,则需要克隆代码。)" + +#: ../../using/unix.rst:75 +msgid "The build process consists of the usual commands::" +msgstr "构建过程由常用命令组成:" + +#: ../../using/unix.rst:81 +msgid "" +"Configuration options and caveats for specific Unix platforms are " +"extensively documented in the :source:`README.rst` file in the root of the " +"Python source tree." +msgstr "特定Unix平台的配置选项和注意事项通常记录在Python源代码的根目录下的 :source:`README.rst` 文件中。" + +#: ../../using/unix.rst:87 +msgid "" +"``make install`` can overwrite or masquerade the :file:`python3` binary. " +"``make altinstall`` is therefore recommended instead of ``make install`` " +"since it only installs :file:`{exec_prefix}/bin/python{version}`." +msgstr "" +"``make install`` 可以覆盖或伪装 :file:`python3` 二进制文件。因此,建议使用 ``make altinstall`` " +"而不是 ``make install`` ,因为后者只安装了 :file:`{exec_prefix}/bin/python{version}` 。" + +#: ../../using/unix.rst:93 +msgid "Python-related paths and files" +msgstr "与Python相关的路径和文件" + +#: ../../using/unix.rst:95 +msgid "" +"These are subject to difference depending on local installation conventions;" +" :envvar:`prefix` (``${prefix}``) and :envvar:`exec_prefix` " +"(``${exec_prefix}``) are installation-dependent and should be interpreted as" +" for GNU software; they may be the same." +msgstr "" +"这取决于本地安装惯例; :envvar:`prefix` ( ``${prefix}`` )和 :envvar:`exec_prefix` ( " +"``${exec_prefix}`` ) 取决于安装,应解释为GNU软件;它们可能相同。" + +#: ../../using/unix.rst:100 +msgid "" +"For example, on most Linux systems, the default for both is :file:`/usr`." +msgstr "例如,在大多数Linux系统上,两者的默认值是 :file:`/usr` 。" + +#: ../../using/unix.rst:103 +msgid "File/directory" +msgstr "文件/目录" + +#: ../../using/unix.rst:103 +msgid "Meaning" +msgstr "含义" + +#: ../../using/unix.rst:105 +msgid ":file:`{exec_prefix}/bin/python3`" +msgstr ":file:`{exec_prefix}/bin/python3`" + +#: ../../using/unix.rst:105 +msgid "Recommended location of the interpreter." +msgstr "解释器的推荐位置" + +#: ../../using/unix.rst:107 +msgid "" +":file:`{prefix}/lib/python{version}`, " +":file:`{exec_prefix}/lib/python{version}`" +msgstr "" +":file:`{prefix}/lib/python{version}`, " +":file:`{exec_prefix}/lib/python{version}`" + +#: ../../using/unix.rst:107 +msgid "" +"Recommended locations of the directories containing the standard modules." +msgstr "包含标准模块的目录的推荐位置" + +#: ../../using/unix.rst:110 +msgid "" +":file:`{prefix}/include/python{version}`, " +":file:`{exec_prefix}/include/python{version}`" +msgstr "" +":file:`{prefix}/include/python{version}`, " +":file:`{exec_prefix}/include/python{version}`" + +#: ../../using/unix.rst:110 +msgid "" +"Recommended locations of the directories containing the include files needed" +" for developing Python extensions and embedding the interpreter." +msgstr "包含开发Python扩展和嵌入解释器所需的include文件的目录的推荐位置" + +#: ../../using/unix.rst:118 +msgid "Miscellaneous" +msgstr "杂项" + +#: ../../using/unix.rst:120 +msgid "" +"To easily use Python scripts on Unix, you need to make them executable, e.g." +" with" +msgstr "要在Unix上使用Python脚本,需要添加可执行权限,例如:" + +#: ../../using/unix.rst:127 +msgid "" +"and put an appropriate Shebang line at the top of the script. A good choice" +" is usually ::" +msgstr "并在脚本的顶部放置一个合适的Shebang线。一个很好的选择通常是::" + +#: ../../using/unix.rst:132 +msgid "" +"which searches for the Python interpreter in the whole :envvar:`PATH`. " +"However, some Unices may not have the :program:`env` command, so you may " +"need to hardcode ``/usr/bin/python3`` as the interpreter path." +msgstr "" +"将在整个 :envvar:`PATH` 中搜索Python解释器。但是,某些Unix系统可能没有 :program:`env` 命令,因此可能需要将 " +"``/usr/bin/python3`` 硬编码为解释器路径。" + +#: ../../using/unix.rst:136 +msgid "" +"To use shell commands in your Python scripts, look at the :mod:`subprocess` " +"module." +msgstr "要在Python脚本中使用shell命令,请查看 :mod:`subprocess` 模块。" diff --git a/using/windows.po b/using/windows.po new file mode 100644 index 000000000..087eb92b9 --- /dev/null +++ b/using/windows.po @@ -0,0 +1,2091 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) 2001-2024, Python Software Foundation +# This file is distributed under the same license as the Python package. +# FIRST AUTHOR , YEAR. +# +# Translators: +# hanfeng , 2018 +# Shengjing Zhu , 2019 +# ppcfish , 2021 +# Freesand Leo , 2022 +# Alpha Du , 2022 +# Rafael Fontenelle , 2024 +# +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: Python 3.9\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2024-07-29 06:10+0000\n" +"PO-Revision-Date: 2017-02-16 23:42+0000\n" +"Last-Translator: Rafael Fontenelle , 2024\n" +"Language-Team: Chinese (China) (https://app.transifex.com/python-doc/teams/5390/zh_CN/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: zh_CN\n" +"Plural-Forms: nplurals=1; plural=0;\n" + +#: ../../using/windows.rst:7 +msgid "Using Python on Windows" +msgstr "在Windows上使用 Python" + +#: ../../using/windows.rst:12 +msgid "" +"This document aims to give an overview of Windows-specific behaviour you " +"should know about when using Python on Microsoft Windows." +msgstr "本文档旨在概述在 Microsoft Windows 上使用 Python 时应了解的特定于 Windows 的行为。" + +#: ../../using/windows.rst:15 +msgid "" +"Unlike most Unix systems and services, Windows does not include a system " +"supported installation of Python. To make Python available, the CPython team" +" has compiled Windows installers (MSI packages) with every `release " +"`_ for many years. These " +"installers are primarily intended to add a per-user installation of Python, " +"with the core interpreter and library being used by a single user. The " +"installer is also able to install for all users of a single machine, and a " +"separate ZIP file is available for application-local distributions." +msgstr "" +"与大多数UNIX系统和服务不同,Windows系统没有预安装Python。多年来CPython 团队已经编译了每一个 `发行版 " +"`_ 的Windows安装程序(MSI 包),已便Windows " +"用户下载和安装。这些安装程序主要用于每个用户单独安装Python时,添加核心解释器和库。安装程序还可以为一台机器的所有用户安装,并且可以为应用程序本地分发提供单独的zip文件。" + +#: ../../using/windows.rst:24 +msgid "" +"As specified in :pep:`11`, a Python release only supports a Windows platform" +" while Microsoft considers the platform under extended support. This means " +"that Python |version| supports Windows 8.1 and newer. If you require Windows" +" 7 support, please install Python 3.8." +msgstr "" +"如 :pep:`11` 所述,Python 发布版对某个 Windows 平台的支持仅限于被 Microsoft 视为处于延长支持周期内的版本。 " +"这意味着 Python |version| 支持 Windows 8.1 及其后的版本。 如果你需要 Windows 7 支持,请安装 Python " +"3.8。" + +#: ../../using/windows.rst:29 +msgid "" +"There are a number of different installers available for Windows, each with " +"certain benefits and downsides." +msgstr "Windows提供了许多不同的安装程序,每个安装程序都有一定的优点和缺点。" + +#: ../../using/windows.rst:32 +msgid "" +":ref:`windows-full` contains all components and is the best option for " +"developers using Python for any kind of project." +msgstr ":ref:`windows-full` 内含所有组件,对于使用Python 进行任何类型项目的开发人员而言,它是最佳选择。" + +#: ../../using/windows.rst:35 +msgid "" +":ref:`windows-store` is a simple installation of Python that is suitable for" +" running scripts and packages, and using IDLE or other development " +"environments. It requires Windows 10, but can be safely installed without " +"corrupting other programs. It also provides many convenient commands for " +"launching Python and its tools." +msgstr "" +":ref:`windows-store` 是一个简单的Python 安装,适用于运行脚本和包,以及使用IDLE或其他开发环境。 它需要Windows " +"10,但可以安全地安装而不会破坏其他程序。 它还提供了许多方便的命令来启动Python及其工具。" + +#: ../../using/windows.rst:41 +msgid "" +":ref:`windows-nuget` are lightweight installations intended for continuous " +"integration systems. It can be used to build Python packages or run scripts," +" but is not updateable and has no user interface tools." +msgstr "" +":ref:`windows-nuget` 是用于持续集成系统的轻量级安装。它可用于构建Python包或运行脚本,但不可更新且没有用户界面工具。" + +#: ../../using/windows.rst:45 +msgid "" +":ref:`windows-embeddable` is a minimal package of Python suitable for " +"embedding into a larger application." +msgstr ":ref:`windows-embeddable` 是Python的最小安装包,适合嵌入到更大的应用程序中。" + +#: ../../using/windows.rst:52 +msgid "The full installer" +msgstr "完整安装程序" + +#: ../../using/windows.rst:55 +msgid "Installation steps" +msgstr "安装步骤" + +#: ../../using/windows.rst:57 +msgid "" +"Four Python |version| installers are available for download - two each for " +"the 32-bit and 64-bit versions of the interpreter. The *web installer* is a " +"small initial download, and it will automatically download the required " +"components as necessary. The *offline installer* includes the components " +"necessary for a default installation and only requires an internet " +"connection for optional features. See :ref:`install-layout-option` for other" +" ways to avoid downloading during installation." +msgstr "" +"四个 Python |version| 安装程序可供下载 - 32位和64位版本的各有两个。 *web installer* " +"(网络安装包)是一个小的初始化工具,它将在安装过程中,根据需要自动下载所需的组件。 *offline installer* " +"(离线安装包)内含默认安装所需的组件,可选择功能仍需要Internet连接下载。请参阅 :ref:`install-layout-option` " +"以了解在安装过程中避免下载的其他方法。" + +#: ../../using/windows.rst:65 +msgid "After starting the installer, one of two options may be selected:" +msgstr "启动安装程序后,可以选择以下两个选项之一:" + +#: ../../using/windows.rst:69 +msgid "If you select \"Install Now\":" +msgstr "如果选择“Install Now(立即安装)”:" + +#: ../../using/windows.rst:71 +msgid "" +"You will *not* need to be an administrator (unless a system update for the C" +" Runtime Library is required or you install the :ref:`launcher` for all " +"users)" +msgstr "您 *不* 需要成为管理员(除非需要对C运行库进行系统更新,或者为所有用户安装 :ref:`launcher` )" + +#: ../../using/windows.rst:74 +msgid "Python will be installed into your user directory" +msgstr "Python将安装到您的用户目录中" + +#: ../../using/windows.rst:75 +msgid "" +"The :ref:`launcher` will be installed according to the option at the bottom " +"of the first page" +msgstr ":ref:`launcher` 将根据第一页底部的选项安装" + +#: ../../using/windows.rst:77 +msgid "The standard library, test suite, launcher and pip will be installed" +msgstr "将安装标准库,测试套件,启动器和pip" + +#: ../../using/windows.rst:78 +msgid "" +"If selected, the install directory will be added to your :envvar:`PATH`" +msgstr "如果选择将安装目录将添加到 :envvar:`PATH`" + +#: ../../using/windows.rst:79 +msgid "Shortcuts will only be visible for the current user" +msgstr "快捷方式仅对当前用户可见" + +#: ../../using/windows.rst:81 +msgid "" +"Selecting \"Customize installation\" will allow you to select the features " +"to install, the installation location and other options or post-install " +"actions. To install debugging symbols or binaries, you will need to use this" +" option." +msgstr "选择“自定义安装”将允许您选择:要安装的功能、安装位置、其他选项或安装后的操作。如果要安装调试符号或二进制文件,您需要使用此选项。" + +#: ../../using/windows.rst:85 +msgid "" +"To perform an all-users installation, you should select \"Customize " +"installation\". In this case:" +msgstr "如要为全部用户安装,应选择“自定义安装”。在这种情况下:" + +#: ../../using/windows.rst:88 +msgid "You may be required to provide administrative credentials or approval" +msgstr "您可能需要提供管理凭据或批准" + +#: ../../using/windows.rst:89 +msgid "Python will be installed into the Program Files directory" +msgstr "Python 将安装到Program Files目录中" + +#: ../../using/windows.rst:90 +msgid "The :ref:`launcher` will be installed into the Windows directory" +msgstr ":ref:`launcher` 将安装到Windows目录中" + +#: ../../using/windows.rst:91 +msgid "Optional features may be selected during installation" +msgstr "安装期间可以选择可选功能" + +#: ../../using/windows.rst:92 +msgid "The standard library can be pre-compiled to bytecode" +msgstr "标准库可以预编译为字节码" + +#: ../../using/windows.rst:93 +msgid "" +"If selected, the install directory will be added to the system " +":envvar:`PATH`" +msgstr "如果选中,安装目录将添加到系统 :envvar:`PATH`" + +#: ../../using/windows.rst:94 +msgid "Shortcuts are available for all users" +msgstr "快捷方式所有用户可用" + +#: ../../using/windows.rst:99 +msgid "Removing the MAX_PATH Limitation" +msgstr "删除 MAX_PATH 限制" + +#: ../../using/windows.rst:101 +msgid "" +"Windows historically has limited path lengths to 260 characters. This meant " +"that paths longer than this would not resolve and errors would result." +msgstr "历史上Windows的路径长度限制为260个字符。这意味着长于此的路径将无法解决并导致错误。" + +#: ../../using/windows.rst:104 +msgid "" +"In the latest versions of Windows, this limitation can be expanded to " +"approximately 32,000 characters. Your administrator will need to activate " +"the \"Enable Win32 long paths\" group policy, or set ``LongPathsEnabled`` to" +" ``1`` in the registry key " +"``HKEY_LOCAL_MACHINE\\SYSTEM\\CurrentControlSet\\Control\\FileSystem``." +msgstr "" +"在最新版本的 Windows 中,此限制可被扩展到大约 32,000 个字符。 但需要让管理员激活“启用 Win32 长路径”组策略,或在注册表键 " +"``HKEY_LOCAL_MACHINE\\SYSTEM\\CurrentControlSet\\Control\\FileSystem`` 中设置 " +"``LongPathsEnabled`` 为 ``1``。" + +#: ../../using/windows.rst:110 +msgid "" +"This allows the :func:`open` function, the :mod:`os` module and most other " +"path functionality to accept and return paths longer than 260 characters." +msgstr "这允许 :func:`open` 函数,:mod:`os` 模块和大多数其他路径功能接受并返回长度超过 260 个字符的路径。" + +#: ../../using/windows.rst:113 +msgid "After changing the above option, no further configuration is required." +msgstr "更改上述选项后,无需进一步配置。" + +#: ../../using/windows.rst:117 +msgid "Support for long paths was enabled in Python." +msgstr "Python中启用了对长路径的支持。" + +#: ../../using/windows.rst:122 +msgid "Installing Without UI" +msgstr "无UI 安装" + +#: ../../using/windows.rst:124 +msgid "" +"All of the options available in the installer UI can also be specified from " +"the command line, allowing scripted installers to replicate an installation " +"on many machines without user interaction. These options may also be set " +"without suppressing the UI in order to change some of the defaults." +msgstr "" +"安装程序UI中的所有选项也可以从命令行指定,允许脚本安装程序在许多机器上复制安装,而无需用户交互。还可以在不禁用UI的情况下设置这些选项,以更改一些默认值。" + +#: ../../using/windows.rst:129 +msgid "" +"To completely hide the installer UI and install Python silently, pass the " +"``/quiet`` option. To skip past the user interaction but still display " +"progress and errors, pass the ``/passive`` option. The ``/uninstall`` option" +" may be passed to immediately begin removing Python - no confirmation prompt" +" will be displayed." +msgstr "" +"要完全隐藏安装程序UI并静默安装Python,请使用 ``/quiet`` 选项。要跳过用户交互但仍然显示进度和错误,请使用 ``/passive`` " +"选项。可以通过 ``/uninstall`` 选项立即开始删除Python - - 不会显示任何确认提示。" + +#: ../../using/windows.rst:135 +msgid "" +"All other options are passed as ``name=value``, where the value is usually " +"``0`` to disable a feature, ``1`` to enable a feature, or a path. The full " +"list of available options is shown below." +msgstr "" +"所有其他选项都传递为 ``name=value`` ,其中值通常是 ``0`` 来禁用某个特性, ``1`` " +"来启用某个特性或路径。可用选项的完整列表如下所示。" + +#: ../../using/windows.rst:140 +msgid "Name" +msgstr "名称" + +#: ../../using/windows.rst:140 +msgid "Description" +msgstr "描述" + +#: ../../using/windows.rst:140 +msgid "Default" +msgstr "默认值" + +#: ../../using/windows.rst:142 +msgid "InstallAllUsers" +msgstr "InstallAllUsers" + +#: ../../using/windows.rst:142 +msgid "Perform a system-wide installation." +msgstr "为所有用户安装。" + +#: ../../using/windows.rst:142 ../../using/windows.rst:165 +#: ../../using/windows.rst:168 ../../using/windows.rst:177 +#: ../../using/windows.rst:195 ../../using/windows.rst:203 +#: ../../using/windows.rst:206 +msgid "0" +msgstr "0" + +#: ../../using/windows.rst:144 +msgid "TargetDir" +msgstr "TargetDir" + +#: ../../using/windows.rst:144 +msgid "The installation directory" +msgstr "安装目录" + +#: ../../using/windows.rst:144 +msgid "Selected based on InstallAllUsers" +msgstr "基于InstallAllUsers选择" + +#: ../../using/windows.rst:147 +msgid "DefaultAllUsersTargetDir" +msgstr "DefaultAllUsersTargetDir" + +#: ../../using/windows.rst:147 +msgid "The default installation directory for all-user installs" +msgstr "为所有用户安装时的默认安装路径" + +#: ../../using/windows.rst:147 +msgid "" +":file:`%ProgramFiles%\\\\\\ Python X.Y` or :file:`\\ " +"%ProgramFiles(x86)%\\\\\\ Python X.Y`" +msgstr "" +":file:`%ProgramFiles%\\\\\\ Python X.Y` 或 :file:`\\ " +"%ProgramFiles(x86)%\\\\\\ Python X.Y`" + +#: ../../using/windows.rst:152 +msgid "DefaultJustForMeTargetDir" +msgstr "DefaultJustForMeTargetDir" + +#: ../../using/windows.rst:152 +msgid "The default install directory for just-for-me installs" +msgstr "仅为当前用户安装时的默认安装路径" + +#: ../../using/windows.rst:152 +msgid "" +":file:`%LocalAppData%\\\\\\ Programs\\\\PythonXY` or " +":file:`%LocalAppData%\\\\\\ Programs\\\\PythonXY-32` or " +":file:`%LocalAppData%\\\\\\ Programs\\\\PythonXY-64`" +msgstr "" +":file:`%LocalAppData%\\\\\\ Programs\\\\PythonXY` 或 " +":file:`%LocalAppData%\\\\\\ Programs\\\\PythonXY-32` 或 " +":file:`%LocalAppData%\\\\\\ Programs\\\\PythonXY-64`" + +#: ../../using/windows.rst:159 +msgid "DefaultCustomTargetDir" +msgstr "DefaultCustomTargetDir" + +#: ../../using/windows.rst:159 +msgid "The default custom install directory displayed in the UI" +msgstr "UI中显示的默认自定义安装目录" + +#: ../../using/windows.rst:159 ../../using/windows.rst:208 +msgid "(empty)" +msgstr "(空)" + +#: ../../using/windows.rst:162 +msgid "AssociateFiles" +msgstr "AssociateFiles" + +#: ../../using/windows.rst:162 +msgid "Create file associations if the launcher is also installed." +msgstr "如果还安装了启动器,则创建文件关联。" + +#: ../../using/windows.rst:162 ../../using/windows.rst:172 +#: ../../using/windows.rst:175 ../../using/windows.rst:179 +#: ../../using/windows.rst:182 ../../using/windows.rst:185 +#: ../../using/windows.rst:187 ../../using/windows.rst:190 +#: ../../using/windows.rst:193 ../../using/windows.rst:197 +#: ../../using/windows.rst:199 ../../using/windows.rst:201 +msgid "1" +msgstr "1" + +#: ../../using/windows.rst:165 +msgid "CompileAll" +msgstr "CompileAll" + +#: ../../using/windows.rst:165 +msgid "Compile all ``.py`` files to ``.pyc``." +msgstr "将所有 ``.py`` 文件编译为 ``.pyc`` 。" + +#: ../../using/windows.rst:168 +msgid "PrependPath" +msgstr "PrependPath" + +#: ../../using/windows.rst:168 +msgid "" +"Add install and Scripts directories to :envvar:`PATH` and ``.PY`` to " +":envvar:`PATHEXT`" +msgstr "" +"将install和Scripts目录添加到 :envvar:`PATH` 以及将 ``.PY`` 添加到 :envvar:`PATHEXT` " + +#: ../../using/windows.rst:172 +msgid "Shortcuts" +msgstr "Shortcuts" + +#: ../../using/windows.rst:172 +msgid "" +"Create shortcuts for the interpreter, documentation and IDLE if installed." +msgstr "如果已安装,为解释器,文档和IDLE创建快捷方式" + +#: ../../using/windows.rst:175 +msgid "Include_doc" +msgstr "Include_doc" + +#: ../../using/windows.rst:175 +msgid "Install Python manual" +msgstr "安装Python手册" + +#: ../../using/windows.rst:177 +msgid "Include_debug" +msgstr "Include_debug" + +#: ../../using/windows.rst:177 +msgid "Install debug binaries" +msgstr "安装调试二进制文件" + +#: ../../using/windows.rst:179 +msgid "Include_dev" +msgstr "Include_dev" + +#: ../../using/windows.rst:179 +msgid "Install developer headers and libraries" +msgstr "安装开发人员头文件和库" + +#: ../../using/windows.rst:182 +msgid "Include_exe" +msgstr "Include_exe" + +#: ../../using/windows.rst:182 +msgid "Install :file:`python.exe` and related files" +msgstr "安装 :file:`python.exe` 及相关文件" + +#: ../../using/windows.rst:185 +msgid "Include_launcher" +msgstr "Include_launcher" + +#: ../../using/windows.rst:185 +msgid "Install :ref:`launcher`." +msgstr "安装 :ref:`launcher` ." + +#: ../../using/windows.rst:187 +msgid "InstallLauncherAllUsers" +msgstr "InstallLauncherAllUsers" + +#: ../../using/windows.rst:187 +msgid "Installs :ref:`launcher` for all users." +msgstr "为所有用户安装 :ref:`launcher` 。" + +#: ../../using/windows.rst:190 +msgid "Include_lib" +msgstr "Include_lib" + +#: ../../using/windows.rst:190 +msgid "Install standard library and extension modules" +msgstr "安装标准库和扩展模块" + +#: ../../using/windows.rst:193 +msgid "Include_pip" +msgstr "Include_pip" + +#: ../../using/windows.rst:193 +msgid "Install bundled pip and setuptools" +msgstr "安装捆绑的pip和setuptools" + +#: ../../using/windows.rst:195 +msgid "Include_symbols" +msgstr "Include_symbols" + +#: ../../using/windows.rst:195 +msgid "Install debugging symbols (`*`.pdb)" +msgstr "安装调试符号(`*`.pdb)" + +#: ../../using/windows.rst:197 +msgid "Include_tcltk" +msgstr "Include_tcltk" + +#: ../../using/windows.rst:197 +msgid "Install Tcl/Tk support and IDLE" +msgstr "安装Tcl/Tk 支持和IDLE" + +#: ../../using/windows.rst:199 +msgid "Include_test" +msgstr "Include_test" + +#: ../../using/windows.rst:199 +msgid "Install standard library test suite" +msgstr "安装标准库测试套件" + +#: ../../using/windows.rst:201 +msgid "Include_tools" +msgstr "Include_tools" + +#: ../../using/windows.rst:201 +msgid "Install utility scripts" +msgstr "安装实用程序脚本" + +#: ../../using/windows.rst:203 +msgid "LauncherOnly" +msgstr "LauncherOnly" + +#: ../../using/windows.rst:203 +msgid "Only installs the launcher. This will override most other options." +msgstr "仅安装启动器。这将覆盖大多数其他选项。" + +#: ../../using/windows.rst:206 +msgid "SimpleInstall" +msgstr "SimpleInstall" + +#: ../../using/windows.rst:206 +msgid "Disable most install UI" +msgstr "禁用大多数安装UI" + +#: ../../using/windows.rst:208 +msgid "SimpleInstallDescription" +msgstr "SimpleInstallDescription" + +#: ../../using/windows.rst:208 +msgid "A custom message to display when the simplified install UI is used." +msgstr "使用简化安装UI时显示的自定义消息。" + +#: ../../using/windows.rst:212 +msgid "" +"For example, to silently install a default, system-wide Python installation," +" you could use the following command (from an elevated command prompt)::" +msgstr "例如,要以静默方式全局安装默认的Python,您可以(在命令提示符>)使用以下命令::" + +#: ../../using/windows.rst:217 +msgid "" +"To allow users to easily install a personal copy of Python without the test " +"suite, you could provide a shortcut with the following command. This will " +"display a simplified initial page and disallow customization::" +msgstr "要允许用户在没有测试套件的情况下轻松安装Python的个人副本,可以使用以下命令提供快捷方式。这将显示一个简化的初始页面,不允许自定义::" + +#: ../../using/windows.rst:224 +msgid "" +"(Note that omitting the launcher also omits file associations, and is only " +"recommended for per-user installs when there is also a system-wide " +"installation that included the launcher.)" +msgstr "(请注意,省略启动器也会省略文件关联,并且仅在全局安装包含启动器时才建议用于每用户安装。)" + +#: ../../using/windows.rst:228 +msgid "" +"The options listed above can also be provided in a file named " +"``unattend.xml`` alongside the executable. This file specifies a list of " +"options and values. When a value is provided as an attribute, it will be " +"converted to a number if possible. Values provided as element text are " +"always left as strings. This example file sets the same options as the " +"previous example:" +msgstr "" +"上面列出的选项也可以在一个名为 ``unattend.xml`` " +"的文件中与可执行文件一起提供。此文件指定选项和值的列表。作为属性提供的值,(如果可能)它将转换为数字。作为文本提供的值,始终保留为字符串。此示例文件设置与上一示例采用相同的选项:" + +#: ../../using/windows.rst:247 +msgid "Installing Without Downloading" +msgstr "免下载安装" + +#: ../../using/windows.rst:249 +msgid "" +"As some features of Python are not included in the initial installer " +"download, selecting those features may require an internet connection. To " +"avoid this need, all possible components may be downloaded on-demand to " +"create a complete *layout* that will no longer require an internet " +"connection regardless of the selected features. Note that this download may " +"be bigger than required, but where a large number of installations are going" +" to be performed it is very useful to have a locally cached copy." +msgstr "" +"由于下载的初始安装包中未包含Python的某些可选功能,如果选择安装这些功能可能需要Internet连接。为了避免这种需要,可以按需下载所有可能的组件,以创建一个完整的布局,该布局将不再需要internet连接,而不管所选择的特性是什么。请注意,此下载可能比要求的要大,但是如果要执行大量安装,则拥有本地缓存​​的副本非常有用。" + +#: ../../using/windows.rst:257 +msgid "" +"Execute the following command from Command Prompt to download all possible " +"required files. Remember to substitute ``python-3.9.0.exe`` for the actual " +"name of your installer, and to create layouts in their own directories to " +"avoid collisions between files with the same name." +msgstr "" +"从命令提示符执行以下命令以下载所有可能的必需文件。 请记得要将 ``python-3.9.0.exe`` " +"替换为安装程序的实际名称,并在单独的目录中创建子目录以避免同名文件间的冲突。" + +#: ../../using/windows.rst:266 +msgid "" +"You may also specify the ``/quiet`` option to hide the progress display." +msgstr "您也可以指定 ``/quiet`` 选项来隐藏进度显示。" + +#: ../../using/windows.rst:269 +msgid "Modifying an install" +msgstr "修改安装" + +#: ../../using/windows.rst:271 +msgid "" +"Once Python has been installed, you can add or remove features through the " +"Programs and Features tool that is part of Windows. Select the Python entry " +"and choose \"Uninstall/Change\" to open the installer in maintenance mode." +msgstr "" +"安装Python后,您可以通过Windows中的“程序和功能”工具添加或删除功能。选择Python条目并选择“卸载/更改”以在维护模式下打开安装程序。" + +#: ../../using/windows.rst:275 +msgid "" +"\"Modify\" allows you to add or remove features by modifying the checkboxes " +"- unchanged checkboxes will not install or remove anything. Some options " +"cannot be changed in this mode, such as the install directory; to modify " +"these, you will need to remove and then reinstall Python completely." +msgstr "" +"“修改” 允许您通过修改复选框来添加或删除功能 - " +"未更改的复选框将不会安装或删除任何内容。在此模式下无法更改某些选项,例如安装目录;要修改这些,您需要完全删除然后重新安装Python。" + +#: ../../using/windows.rst:280 +msgid "" +"\"Repair\" will verify all the files that should be installed using the " +"current settings and replace any that have been removed or modified." +msgstr "“修复” 将使用当前设置验证应安装的所有文件,并替换已删除或修改的任何文件" + +#: ../../using/windows.rst:283 +msgid "" +"\"Uninstall\" will remove Python entirely, with the exception of the " +":ref:`launcher`, which has its own entry in Programs and Features." +msgstr "“卸载” 将完全删除Python,但 :ref:`launcher` 除外,它在“程序和功能”中有自己的条目。" + +#: ../../using/windows.rst:290 +msgid "The Microsoft Store package" +msgstr "Microsoft Store包" + +#: ../../using/windows.rst:294 +msgid "" +"The Microsoft Store package is an easily installable Python interpreter that" +" is intended mainly for interactive use, for example, by students." +msgstr "Microsoft Store 包是一个易于安装的 Python 解释器,主要针对在交互模式下使用,例如用于教学。" + +#: ../../using/windows.rst:297 +msgid "" +"To install the package, ensure you have the latest Windows 10 updates and " +"search the Microsoft Store app for \"Python |version|\". Ensure that the app" +" you select is published by the Python Software Foundation, and install it." +msgstr "" +"要安装此软件包,请确保您拥有最新的Windows 10更新,并在Microsoft Store应用程序中搜索 \"Python |version|\" " +"。确保您选择的应用程序由 Python Software Foundation 发布并安装。" + +#: ../../using/windows.rst:302 +msgid "" +"Python will always be available for free on the Microsoft Store. If you are " +"asked to pay for it, you have not selected the correct package." +msgstr "Python将始终在Microsoft Store上免费提供。如果要求您付款,则表示您没有选择正确的包。" + +#: ../../using/windows.rst:305 +msgid "" +"After installation, Python may be launched by finding it in Start. " +"Alternatively, it will be available from any Command Prompt or PowerShell " +"session by typing ``python``. Further, pip and IDLE may be used by typing " +"``pip`` or ``idle``. IDLE can also be found in Start." +msgstr "" +"安装完成后,可以在开始菜单中找到它来启动 Python。或者可以在命令提示符或 PowerShell 会话中输入 ``python`` " +"来启动。此外可以输入 ``pip`` 或 ``idle`` 来使用 pip 和 IDLE。IDLE 也在开始菜单中。" + +#: ../../using/windows.rst:310 +msgid "" +"All three commands are also available with version number suffixes, for " +"example, as ``python3.exe`` and ``python3.x.exe`` as well as ``python.exe`` " +"(where ``3.x`` is the specific version you want to launch, such as " +"|version|). Open \"Manage App Execution Aliases\" through Start to select " +"which version of Python is associated with each command. It is recommended " +"to make sure that ``pip`` and ``idle`` are consistent with whichever version" +" of ``python`` is selected." +msgstr "" +"所有这三个命令也可以使用版本号后缀,例如, ``python3.exe`` 和 ``python3.x.exe`` 以及 ``python.exe`` " +"(其中 ``3.x`` 是您要启动的特定版本,例如 |version| )。在 ``设置-->主页-->应用和功能`` 页面中,点选 " +"``管理可选功能`` ,选择与每个命令关联的python版本。建议确保 ``pip`` 和 ``idle`` 与选择的 ``python`` 版本一致。" + +#: ../../using/windows.rst:318 +msgid "" +"Virtual environments can be created with ``python -m venv`` and activated " +"and used as normal." +msgstr "可以使用 ``python -m venv`` 创建虚拟环境并激活并正常使用。" + +#: ../../using/windows.rst:321 +msgid "" +"If you have installed another version of Python and added it to your " +"``PATH`` variable, it will be available as ``python.exe`` rather than the " +"one from the Microsoft Store. To access the new installation, use " +"``python3.exe`` or ``python3.x.exe``." +msgstr "" +"如果你已经安装了另一个版本的Python并将它添加到你的 ``PATH`` 变量中,那么它将作为 ``python.exe`` " +"而不是来自Microsoft Store的那个。要访问新安装,请使用 ``python3.exe`` 或 ``python3.x.exe`` 。" + +#: ../../using/windows.rst:326 +msgid "" +"The ``py.exe`` launcher will detect this Python installation, but will " +"prefer installations from the traditional installer." +msgstr "``py.exe`` 启动器将检测此 Python 安装版,但会优先使用来自传统安装器的安装版。" + +#: ../../using/windows.rst:329 +msgid "" +"To remove Python, open Settings and use Apps and Features, or else find " +"Python in Start and right-click to select Uninstall. Uninstalling will " +"remove all packages you installed directly into this Python installation, " +"but will not remove any virtual environments" +msgstr "" +"要删除Python,请打开“设置”并使用“应用程序和功能”,或者在“开始”中找到Python,然后右键单击以选择“卸载”。卸载将删除该已安装Python程序中的所有软件包,但不会删除任何虚拟环境" + +#: ../../using/windows.rst:335 +msgid "Known Issues" +msgstr "已知的问题" + +#: ../../using/windows.rst:337 +msgid "" +"Because of restrictions on Microsoft Store apps, Python scripts may not have" +" full write access to shared locations such as ``TEMP`` and the registry. " +"Instead, it will write to a private copy. If your scripts must modify the " +"shared locations, you will need to install the full installer." +msgstr "" +"由于Microsoft Store应用程序的限制,Python脚本可能无法对共享位置(如 ``TEMP`` " +")和注册表进行完全写入访问。相反,它将写入私人副本。如果脚本必须修改共享位置,则需要安装完整安装程序。" + +#: ../../using/windows.rst:342 +msgid "" +"For more detail on the technical basis for these limitations, please consult" +" Microsoft's documentation on packaged full-trust apps, currently available " +"at `docs.microsoft.com/en-us/windows/msix/desktop/desktop-to-uwp-behind-the-" +"scenes `_" +msgstr "" +"有关此限制的技术原理的更多细节,请查询 Microsoft 已打包完全可信应用的文档,当前位于 `docs.microsoft.com/en-" +"us/windows/msix/desktop/desktop-to-uwp-behind-the-scenes " +"`_" + +#: ../../using/windows.rst:351 +msgid "The nuget.org packages" +msgstr "nuget.org 安装包" + +#: ../../using/windows.rst:355 +msgid "" +"The nuget.org package is a reduced size Python environment intended for use " +"on continuous integration and build systems that do not have a system-wide " +"install of Python. While nuget is \"the package manager for .NET\", it also " +"works perfectly fine for packages containing build-time tools." +msgstr "" +"nuget.org 是一个精简的 Python 环境,用于在没有全局安装 Python 的系统的持续集成和构建。 虽然 nuget " +"是“.NET的包管理器”,但是对于包含构建时工具的包来说,它也可以很好地工作。" + +#: ../../using/windows.rst:360 +msgid "" +"Visit `nuget.org `_ for the most up-to-date " +"information on using nuget. What follows is a summary that is sufficient for" +" Python developers." +msgstr "" +"访问 `nuget.org `_ 获取有关使用 nuget 的最新信息。 下面的摘要对 Python " +"开发人员来说已经足够了。" + +#: ../../using/windows.rst:364 +msgid "" +"The ``nuget.exe`` command line tool may be downloaded directly from " +"``https://aka.ms/nugetclidl``, for example, using curl or PowerShell. With " +"the tool, the latest version of Python for 64-bit or 32-bit machines is " +"installed using::" +msgstr "" +"``nuget.exe`` 命令行工具可以直接从 ``https://aka.ms/nugetclidl`` 下载,例如,使用 curl 或 " +"PowerShell。 使用该工具安装 64 位或 32 位最新版本的 Python::" + +#: ../../using/windows.rst:372 +msgid "" +"To select a particular version, add a ``-Version 3.x.y``. The output " +"directory may be changed from ``.``, and the package will be installed into " +"a subdirectory. By default, the subdirectory is named the same as the " +"package, and without the ``-ExcludeVersion`` option this name will include " +"the specific version installed. Inside the subdirectory is a ``tools`` " +"directory that contains the Python installation:" +msgstr "" +"要选择特定版本,请添加 ``-Version 3.x.y`` 。 输出目录可以从 ``.`` 更改,包将安装到子目录中。 " +"默认情况下,子目录的名称与包的名称相同,如果没有 ``-ExcludeVersion`` 选项,则此名称将包含已安装的特定版本。 子目录里面是一个包含 " +"Python 安装的 ``tools`` 目录:" + +#: ../../using/windows.rst:389 +msgid "" +"In general, nuget packages are not upgradeable, and newer versions should be" +" installed side-by-side and referenced using the full path. Alternatively, " +"delete the package directory manually and install it again. Many CI systems " +"will do this automatically if they do not preserve files between builds." +msgstr "" +"通常,nuget 包不可升级,应该平行安装较新版本并使用完整路径引用。 或者,手动删除程序包目录并再次安装。 如果在构建之间不保留文件,许多 CI " +"系统将自动执行此操作。" + +#: ../../using/windows.rst:394 +msgid "" +"Alongside the ``tools`` directory is a ``build\\native`` directory. This " +"contains a MSBuild properties file ``python.props`` that can be used in a " +"C++ project to reference the Python install. Including the settings will " +"automatically use the headers and import libraries in your build." +msgstr "" +"除了 ``tools`` 目录外,还有一个 ``build\\native`` 目录。 它包含一个 MSBuild 属性文件 " +"``python.props``,可以在 C++ 项目中使用该文件来引用 Python 安装。 包含这些设置将自动在生成中使用标头和导入库。" + +#: ../../using/windows.rst:399 +msgid "" +"The package information pages on nuget.org are " +"`www.nuget.org/packages/python `_ for" +" the 64-bit version and `www.nuget.org/packages/pythonx86 " +"`_ for the 32-bit version." +msgstr "" +"nuget.org上的包信息页是 `www.nuget.org/packages/python " +"`_ 对于64位版本和 " +"`www.nuget.org/packages/pythonx86 " +"`_ 表示32位版本。" + +#: ../../using/windows.rst:408 +msgid "The embeddable package" +msgstr "可嵌入的包" + +#: ../../using/windows.rst:412 +msgid "" +"The embedded distribution is a ZIP file containing a minimal Python " +"environment. It is intended for acting as part of another application, " +"rather than being directly accessed by end-users." +msgstr "嵌入式发行版是一个包含最小 Python 环境的 ZIP 文件。 它旨在作为另一个应用程序的一部分,而不是由最终用户直接访问。" + +#: ../../using/windows.rst:416 +msgid "" +"When extracted, the embedded distribution is (almost) fully isolated from " +"the user's system, including environment variables, system registry " +"settings, and installed packages. The standard library is included as pre-" +"compiled and optimized ``.pyc`` files in a ZIP, and ``python3.dll``, " +"``python37.dll``, ``python.exe`` and ``pythonw.exe`` are all provided. " +"Tcl/tk (including all dependants, such as Idle), pip and the Python " +"documentation are not included." +msgstr "" +"解压缩后,嵌入式发行版(几乎)与用户系统完全隔离,包括环境变量、系统注册表设置和已安装的软件包。标准库作为预先编译和优化的 ``.pyc`` " +"文件包含在ZIP中,并提供了 ``python3.dll`` , ``python37.dll`` , ``python.exe`` 和 " +"``pythonw.exe`` 文件。不包括Tcl/tk(包括所有依赖项,如Idle),pip和Python文档。" + +#: ../../using/windows.rst:425 +msgid "" +"The embedded distribution does not include the `Microsoft C Runtime " +"`_ and it is the responsibility" +" of the application installer to provide this. The runtime may have already " +"been installed on a user's system previously or automatically via Windows " +"Update, and can be detected by finding ``ucrtbase.dll`` in the system " +"directory." +msgstr "" +"嵌入式发行版不包括 `Microsoft C 运行时 `_,应用程序安装程序负责提供此功能。 运行时可能已经预先安装在用户的系统上或通过 " +"Windows Update 自动安装,并且可以通过在系统目录中找到 ``ucrtbase.dll`` 来检测。" + +#: ../../using/windows.rst:432 +msgid "" +"Third-party packages should be installed by the application installer " +"alongside the embedded distribution. Using pip to manage dependencies as for" +" a regular Python installation is not supported with this distribution, " +"though with some care it may be possible to include and use pip for " +"automatic updates. In general, third-party packages should be treated as " +"part of the application (\"vendoring\") so that the developer can ensure " +"compatibility with newer versions before providing updates to users." +msgstr "" +"第三方软件包应该由应用程序与嵌入式发行版一起安装。这个发行版不支持像常规 Python 安装那样使用 pip 来管理依赖关系,不过可以小心地将 pip " +"包含进来并使用它进行自动更新。 通常,第三方包应该作为应用程序的一部分(“打包”)处理,以便开发人员在向用户提供更新之前能够确保与新版本兼容。" + +#: ../../using/windows.rst:440 +msgid "" +"The two recommended use cases for this distribution are described below." +msgstr "下面描述了这个发行版的两个推荐用例。" + +#: ../../using/windows.rst:443 +msgid "Python Application" +msgstr "Python 应用程序" + +#: ../../using/windows.rst:445 +msgid "" +"An application written in Python does not necessarily require users to be " +"aware of that fact. The embedded distribution may be used in this case to " +"include a private version of Python in an install package. Depending on how " +"transparent it should be (or conversely, how professional it should appear)," +" there are two options." +msgstr "" +"用 Python 编写的应用程序并不一定要求用户了解这一事实。 在这种情况下,可以使用嵌入式发行版在安装包中包含 Python 的私有版本。 " +"根据它应该有多透明(或者相反,它应该看起来有多专业),有两个选项。" + +#: ../../using/windows.rst:451 +msgid "" +"Using a specialized executable as a launcher requires some coding, but " +"provides the most transparent experience for users. With a customized " +"launcher, there are no obvious indications that the program is running on " +"Python: icons can be customized, company and version information can be " +"specified, and file associations behave properly. In most cases, a custom " +"launcher should simply be able to call ``Py_Main`` with a hard-coded command" +" line." +msgstr "" +"使用专门的可执行文件作为启动程序需要一些编码,但为用户提供了最透明的体验。使用定制的启动器,没有明显的迹象表明程序是在 Python " +"上运行的:图标可以定制,公司和版本信息可以指定,文件关联可以正常运行。在大多数情况下,自定义启动程序应该只需使用硬编码的命令行就能调用 " +"``Py_Main``。" + +#: ../../using/windows.rst:458 +msgid "" +"The simpler approach is to provide a batch file or generated shortcut that " +"directly calls the ``python.exe`` or ``pythonw.exe`` with the required " +"command-line arguments. In this case, the application will appear to be " +"Python and not its actual name, and users may have trouble distinguishing it" +" from other running Python processes or file associations." +msgstr "" +"更简单的方法是提供批处理文件或生成的快捷方式,使用所需的命令行参数直接调用 ``python.exe`` 或 " +"``pythonw.exe``。在这种情况下,应用程序将显示为 Python 而不是其实际名称,并且用户可能无法将其与其他正在运行的 Python " +"进程或文件关联区分开来。" + +#: ../../using/windows.rst:464 +msgid "" +"With the latter approach, packages should be installed as directories " +"alongside the Python executable to ensure they are available on the path. " +"With the specialized launcher, packages can be located in other locations as" +" there is an opportunity to specify the search path before launching the " +"application." +msgstr "" +"对于后一种方法,包应该与 Python 可执行文件一起作为目录安装,以确保它们在路径上可用。 " +"使用专用的启动器,包可以位于其他位置,因为在启动应用程序之前有机会指定搜索路径。" + +#: ../../using/windows.rst:470 +msgid "Embedding Python" +msgstr "嵌入Python" + +#: ../../using/windows.rst:472 +msgid "" +"Applications written in native code often require some form of scripting " +"language, and the embedded Python distribution can be used for this purpose." +" In general, the majority of the application is in native code, and some " +"part will either invoke ``python.exe`` or directly use ``python3.dll``. For " +"either case, extracting the embedded distribution to a subdirectory of the " +"application installation is sufficient to provide a loadable Python " +"interpreter." +msgstr "" +"用本地代码编写的应用程序通常需要某种形式的脚本语言,嵌入式Python发行版可以用于此目的。通常,应用程序的大部分都是本机代码,某些部分将调用 " +"``python.exe`` 或直接使用 ``python3.dll`` " +"。无论是哪种情况,将嵌入的发行版解压缩到应用程序安装的子目录中就足以提供可加载的Python解释器。" + +#: ../../using/windows.rst:479 +msgid "" +"As with the application use, packages can be installed to any location as " +"there is an opportunity to specify search paths before initializing the " +"interpreter. Otherwise, there is no fundamental differences between using " +"the embedded distribution and a regular installation." +msgstr "与应用程序使用一样,包可以安装到任何位置,因为在初始化解释器之前有机会指定搜索路径。否则,使用嵌入式发行版和常规安装之间没有根本区别。" + +#: ../../using/windows.rst:486 +msgid "Alternative bundles" +msgstr "替代捆绑包" + +#: ../../using/windows.rst:488 +msgid "" +"Besides the standard CPython distribution, there are modified packages " +"including additional functionality. The following is a list of popular " +"versions and their key features:" +msgstr "除了标准的CPython发行版之外,还有一些包含附加功能的修改包。以下是热门版本及其主要功能的列表:" + +#: ../../using/windows.rst:493 +msgid "`ActivePython `_" +msgstr "`ActivePython `_" + +#: ../../using/windows.rst:493 +msgid "Installer with multi-platform compatibility, documentation, PyWin32" +msgstr "具有多平台兼容性的安装程序,文档,PyWin32" + +#: ../../using/windows.rst:497 +msgid "`Anaconda `_" +msgstr "`Anaconda `_" + +#: ../../using/windows.rst:496 +msgid "" +"Popular scientific modules (such as numpy, scipy and pandas) and the " +"``conda`` package manager." +msgstr "流行的科学模块(如numpy,scipy和pandas)和 ``conda`` 包管理器。" + +#: ../../using/windows.rst:501 +msgid "`Canopy `_" +msgstr "`Canopy `_" + +#: ../../using/windows.rst:500 +msgid "" +"A \"comprehensive Python analysis environment\" with editors and other " +"development tools." +msgstr "具有编辑器和其他开发工具的“全面的Python分析环境”。" + +#: ../../using/windows.rst:505 +msgid "`WinPython `_" +msgstr "`WinPython `_" + +#: ../../using/windows.rst:504 +msgid "" +"Windows-specific distribution with prebuilt scientific packages and tools " +"for building packages." +msgstr "特定于Windows的发行版,包含用于构建包的预构建科学包和工具。" + +#: ../../using/windows.rst:507 +msgid "" +"Note that these packages may not include the latest versions of Python or " +"other libraries, and are not maintained or supported by the core Python " +"team." +msgstr "请注意,这些软件包可能不包含最新版本的Python或其他库,并且不由核心Python团队维护或支持。" + +#: ../../using/windows.rst:513 +msgid "Configuring Python" +msgstr "配置Python" + +#: ../../using/windows.rst:515 +msgid "" +"To run Python conveniently from a command prompt, you might consider " +"changing some default environment variables in Windows. While the installer" +" provides an option to configure the PATH and PATHEXT variables for you, " +"this is only reliable for a single, system-wide installation. If you " +"regularly use multiple versions of Python, consider using the " +":ref:`launcher`." +msgstr "" +"要从命令提示符方便地运行Python,您可以考虑在Windows中更改一些默认环境变量。虽然安装程序提供了为您配置PATH和PATHEXT变量的选项,但这仅适用于单版本、全局安装。如果您经常使用多个版本的Python,请考虑使用" +" :ref:`launcher` 。" + +#: ../../using/windows.rst:525 +msgid "Excursus: Setting environment variables" +msgstr "附录:设置环境变量" + +#: ../../using/windows.rst:527 +msgid "" +"Windows allows environment variables to be configured permanently at both " +"the User level and the System level, or temporarily in a command prompt." +msgstr "Windows允许在用户级别和系统级别永久配置环境变量,或临时在命令提示符中配置环境变量。" + +#: ../../using/windows.rst:530 +msgid "" +"To temporarily set environment variables, open Command Prompt and use the " +":command:`set` command:" +msgstr "要临时设置环境变量,请打开命令提示符并使用 :command:`set` 命令:" + +#: ../../using/windows.rst:539 +msgid "" +"These changes will apply to any further commands executed in that console, " +"and will be inherited by any applications started from the console." +msgstr "这些环境变量的更改将应用​​于在该控制台中执行的任何其他命令,并且,由该控制台启动的任何应用程序都继承设这些设置。" + +#: ../../using/windows.rst:542 +msgid "" +"Including the variable name within percent signs will expand to the existing" +" value, allowing you to add your new value at either the start or the end. " +"Modifying :envvar:`PATH` by adding the directory containing " +":program:`python.exe` to the start is a common way to ensure the correct " +"version of Python is launched." +msgstr "" +"在百分号中包含的变量名将被现有值替换,允许在开始或结束时添加新值。通过将包含 :program:`python.exe` 的目录添加到开头来修改 " +":envvar:`PATH` 是确保启动正确版本的Python的常用方法。" + +#: ../../using/windows.rst:548 +msgid "" +"To permanently modify the default environment variables, click Start and " +"search for 'edit environment variables', or open System properties, " +":guilabel:`Advanced system settings` and click the :guilabel:`Environment " +"Variables` button. In this dialog, you can add or modify User and System " +"variables. To change System variables, you need non-restricted access to " +"your machine (i.e. Administrator rights)." +msgstr "" +"要永久修改默认环境变量,请单击“开始”并搜索“编辑环境变量”,或打开系统属性的 :guilabel:`高级系统设置` ,然后单击 " +":guilabel:`环境变量` 按钮。在此对话框中,您可以添加或修改用户和系统变量。要更改系统变量,您需要对计算机进行无限制访问(即管理员权限)。" + +#: ../../using/windows.rst:557 +msgid "" +"Windows will concatenate User variables *after* System variables, which may " +"cause unexpected results when modifying :envvar:`PATH`." +msgstr "Windows会将用户变量串联在系统变量 *之后* ,这可能会在修改 :envvar:`PATH` 时导致意外结果。" + +#: ../../using/windows.rst:560 +msgid "" +"The :envvar:`PYTHONPATH` variable is used by all versions of Python, so you " +"should not permanently configure it unless the listed paths only include " +"code that is compatible with all of your installed Python versions." +msgstr "" +":envvar:`PYTHONPATH` 变量被 Python 的所有版本使用,因此除非它列出的路径只包含与所有已安装的 Python " +"版本兼容的代码,否则不要永久配置此变量。" + +#: ../../using/windows.rst:568 +msgid "" +"https://docs.microsoft.com/en-us/windows/win32/procthread/environment-" +"variables" +msgstr "" +"https://docs.microsoft.com/en-us/windows/win32/procthread/environment-" +"variables" + +#: ../../using/windows.rst:568 +msgid "Overview of environment variables on Windows" +msgstr "Windows 中的环境变量概述" + +#: ../../using/windows.rst:571 +msgid "" +"https://docs.microsoft.com/en-us/windows-server/administration/windows-" +"commands/set_1" +msgstr "" +"https://docs.microsoft.com/en-us/windows-server/administration/windows-" +"commands/set_1" + +#: ../../using/windows.rst:571 +msgid "The ``set`` command, for temporarily modifying environment variables" +msgstr "用于临时修改环境变量的 ``set`` 命令" + +#: ../../using/windows.rst:573 +msgid "" +"https://docs.microsoft.com/en-us/windows-server/administration/windows-" +"commands/setx" +msgstr "" +"https://docs.microsoft.com/en-us/windows-server/administration/windows-" +"commands/setx" + +#: ../../using/windows.rst:574 +msgid "The ``setx`` command, for permanently modifying environment variables" +msgstr "用于永久修改环境变量的 ``setx`` 命令" + +#: ../../using/windows.rst:580 +msgid "Finding the Python executable" +msgstr "查找Python可执行文件" + +#: ../../using/windows.rst:584 +msgid "" +"Besides using the automatically created start menu entry for the Python " +"interpreter, you might want to start Python in the command prompt. The " +"installer has an option to set that up for you." +msgstr "除了使用自动创建的Python解释器的开始菜单项之外,您可能还想在命令提示符下启动Python。安装程序有一个选项可以为您设置。" + +#: ../../using/windows.rst:588 +msgid "" +"On the first page of the installer, an option labelled \"Add Python to " +"PATH\" may be selected to have the installer add the install location into " +"the :envvar:`PATH`. The location of the :file:`Scripts\\\\` folder is also " +"added. This allows you to type :command:`python` to run the interpreter, and" +" :command:`pip` for the package installer. Thus, you can also execute your " +"scripts with command line options, see :ref:`using-on-cmdline` " +"documentation." +msgstr "" +"在安装程序的第一页上,可以选择标记为“将Python添加到环境变量”的选项,以使安装程序将安装位置添加到 :envvar:`PATH` 。还添加了 " +":file:`Scripts\\\\` 文件夹的位置。这允许你输入 :command:`python` 来运行解释器,并且 :command:`pip`" +" 用于包安装程序。因此,您还可以使用命令行选项执行脚本,请参阅 :ref:`using-on-cmdline` 文档。" + +#: ../../using/windows.rst:595 +msgid "" +"If you don't enable this option at install time, you can always re-run the " +"installer, select Modify, and enable it. Alternatively, you can manually " +"modify the :envvar:`PATH` using the directions in :ref:`setting-envvars`. " +"You need to set your :envvar:`PATH` environment variable to include the " +"directory of your Python installation, delimited by a semicolon from other " +"entries. An example variable could look like this (assuming the first two " +"entries already existed)::" +msgstr "" +"如果在安装时未启用此选项,则始终可以重新运行安装程序,选择“修改”并启用它。或者,您可以使用 :ref:`setting-envvars` " +"的方法手动修改 :envvar:`PATH` 。您需要将Python安装目录添加到 :envvar:`PATH` " +"环境变量中,该内容与其他条目用分号分隔。示例变量可能如下所示(假设前两个条目已经存在)::" + +#: ../../using/windows.rst:608 +msgid "UTF-8 mode" +msgstr "UTF-8 模式" + +#: ../../using/windows.rst:612 +msgid "" +"Windows still uses legacy encodings for the system encoding (the ANSI Code " +"Page). Python uses it for the default encoding of text files (e.g. " +":func:`locale.getpreferredencoding`)." +msgstr "" +"Windows 仍然使用传统编码格式作为系统的编码格式(ANSI 代码页)。 Python 使用它作为文本文件默认的编码格式 (即 " +":func:`locale.getpreferredencoding`)。" + +#: ../../using/windows.rst:616 +msgid "" +"This may cause issues because UTF-8 is widely used on the internet and most " +"Unix systems, including WSL (Windows Subsystem for Linux)." +msgstr "" +"这可能会造成问题,因为因特网和大多数 Unix 系统包括 WSL (Windows Subsystem for Linux) 广泛使用 UTF-8。" + +#: ../../using/windows.rst:619 +msgid "" +"You can use UTF-8 mode to change the default text encoding to UTF-8. You can" +" enable UTF-8 mode via the ``-X utf8`` command line option, or the " +"``PYTHONUTF8=1`` environment variable. See :envvar:`PYTHONUTF8` for " +"enabling UTF-8 mode, and :ref:`setting-envvars` for how to modify " +"environment variables." +msgstr "" +"你可以使用 UTF-8 模式将默认的文本编码格式改为 UTF-8。 要启用 UTF-8 模式可以通过 ``-X utf8`` 命令行选项,或者 " +"``PYTHONUTF8=1`` 环境变量。 请参见 :envvar:`PYTHONUTF8` 了解如何启用 UTF-8 模式,并参见 " +":ref:`setting-envvars` 了解如何修改环境变量。" + +#: ../../using/windows.rst:625 +msgid "When UTF-8 mode is enabled:" +msgstr "当 UTF-8 模式被启用时:" + +#: ../../using/windows.rst:627 +msgid "" +":func:`locale.getpreferredencoding` returns ``'UTF-8'`` instead of the " +"system encoding. This function is used for the default text encoding in " +"many places, including :func:`open`, :class:`Popen`, :meth:`Path.read_text`," +" etc." +msgstr "" +":func:`locale.getpreferredencoding` 将返回 ``'UTF-8'`` 而不是系统的编码格式。 " +"此函数可用来在许多场合下获取默认的文本编码格式,包括 :func:`open`, :class:`Popen`, " +":meth:`Path.read_text` 等等。" + +#: ../../using/windows.rst:631 +msgid "" +":data:`sys.stdin`, :data:`sys.stdout`, and :data:`sys.stderr` all use UTF-8 " +"as their text encoding." +msgstr "" +":data:`sys.stdin`, :data:`sys.stdout` 和 :data:`sys.stderr` 都将使用 UTF-8 " +"作为其文本编码格式。" + +#: ../../using/windows.rst:633 +msgid "You can still use the system encoding via the \"mbcs\" codec." +msgstr "你仍然可以通过 \"mbcs\" 编解码器来使用系统的编码格式。" + +#: ../../using/windows.rst:635 +msgid "" +"Note that adding ``PYTHONUTF8=1`` to the default environment variables will " +"affect all Python 3.7+ applications on your system. If you have any Python " +"3.7+ applications which rely on the legacy system encoding, it is " +"recommended to set the environment variable temporarily or use the ``-X " +"utf8`` command line option." +msgstr "" +"请注意添加 ``PYTHONUTF8=1`` 到默认环境变量将会影响你的系统中的所有 Python 3.7+ 应用。 如果你有任何 Python " +"3.7+ 应用仍然依赖于传统的系统编码格式,则推荐设置临时环境变量或使用 ``-X utf8`` 命令行选项。" + +#: ../../using/windows.rst:642 +msgid "" +"Even when UTF-8 mode is disabled, Python uses UTF-8 by default on Windows " +"for:" +msgstr "即使在不启用 UTF-8 模式时,Windows 版的 Python 也会在以下情况中默认使用 UTF-8:" + +#: ../../using/windows.rst:645 +msgid "Console I/O including standard I/O (see :pep:`528` for details)." +msgstr "控制台 I/O 包括标准 I/O (详情见 :pep:`528`)。" + +#: ../../using/windows.rst:646 +msgid "The filesystem encoding (see :pep:`529` for details)." +msgstr "文件系统编码格式 (详情见 :pep:`529`)。" + +#: ../../using/windows.rst:652 +msgid "Python Launcher for Windows" +msgstr "适用于Windows的Python启动器" + +#: ../../using/windows.rst:656 +msgid "" +"The Python launcher for Windows is a utility which aids in locating and " +"executing of different Python versions. It allows scripts (or the command-" +"line) to indicate a preference for a specific Python version, and will " +"locate and execute that version." +msgstr "" +"用于Windows的Python启动器是一个实用程序,可帮助定位和执行不同的Python版本。它允许脚本(或命令行)指示特定Python版本的首选项,并将定位并执行该版本。" + +#: ../../using/windows.rst:661 +msgid "" +"Unlike the :envvar:`PATH` variable, the launcher will correctly select the " +"most appropriate version of Python. It will prefer per-user installations " +"over system-wide ones, and orders by language version rather than using the " +"most recently installed version." +msgstr "" +"与 :envvar:`PATH` " +"变量不同,启动器将正确选择最合适的Python版本。它更倾向于按用户安装而不是系统安装,并按语言版本排序,而不是使用最新安装的版本。" + +#: ../../using/windows.rst:666 +msgid "The launcher was originally specified in :pep:`397`." +msgstr "启动器最初是在 :pep:`397` 中指定的。" + +#: ../../using/windows.rst:669 +msgid "Getting started" +msgstr "入门" + +#: ../../using/windows.rst:672 +msgid "From the command-line" +msgstr "从命令行" + +#: ../../using/windows.rst:676 +msgid "" +"System-wide installations of Python 3.3 and later will put the launcher on " +"your :envvar:`PATH`. The launcher is compatible with all available versions " +"of Python, so it does not matter which version is installed. To check that " +"the launcher is available, execute the following command in Command Prompt::" +msgstr "" +"全局安装Python 3.3及更高版本将把启动器放在你的 :envvar:`PATH` " +"上。启动程序与所有可用的Python版本兼容,因此安装哪个版本无关紧要。要检查启动程序是否可用,请在命令提示符中执行以下命令:" + +#: ../../using/windows.rst:683 +msgid "" +"You should find that the latest version of Python you have installed is " +"started - it can be exited as normal, and any additional command-line " +"arguments specified will be sent directly to Python." +msgstr "您应该会发现已安装的最新版本的Python已启动 - 它可以正常退出,并且将指定的任何其他命令行参数直接发送到Python。" + +#: ../../using/windows.rst:687 +msgid "" +"If you have multiple versions of Python installed (e.g., 3.7 and |version|) " +"you will have noticed that Python |version| was started - to launch Python " +"3.7, try the command::" +msgstr "" +"如果您安装了多个版本的Python(例如,3.7和 |version| ),您会注意到Python |version| 启动 - 如果要启动 " +"Python 3.7,尝试命令:" + +#: ../../using/windows.rst:693 +msgid "" +"If you want the latest version of Python 2 you have installed, try the " +"command::" +msgstr "如果您想使用已安装的 Python 2 的最新版本,请尝试以下命令:" + +#: ../../using/windows.rst:698 +msgid "You should find the latest version of Python 3.x starts." +msgstr "你会发现 Python 3.x 的最新版本已启动。" + +#: ../../using/windows.rst:700 +msgid "" +"If you see the following error, you do not have the launcher installed::" +msgstr "如果您看到以下错误,则表明您没有安装启动器:" + +#: ../../using/windows.rst:705 +msgid "" +"Per-user installations of Python do not add the launcher to :envvar:`PATH` " +"unless the option was selected on installation." +msgstr "除非在安装时选择了该选项,单个用户安装的Python不会将启动程序添加到 :envvar:`PATH` 。" + +#: ../../using/windows.rst:708 +msgid "The command::" +msgstr "Tix 命令:" + +#: ../../using/windows.rst:712 +msgid "displays the currently installed version(s) of Python." +msgstr "显示当前已安装的Python版本。" + +#: ../../using/windows.rst:715 +msgid "Virtual environments" +msgstr "从虚拟环境" + +#: ../../using/windows.rst:719 +msgid "" +"If the launcher is run with no explicit Python version specification, and a " +"virtual environment (created with the standard library :mod:`venv` module or" +" the external ``virtualenv`` tool) active, the launcher will run the virtual" +" environment's interpreter rather than the global one. To run the global " +"interpreter, either deactivate the virtual environment, or explicitly " +"specify the global Python version." +msgstr "" +"如果启动程序运行时没有明确的Python版本,并且虚拟环境(使用标准库创建 :mod:`venv` 模块或外部 ``virtualenv`` " +"工具)处于活动状态,则启动程序将运行虚拟环境的解释器而不是全局的。要运行全局解释器,请停用虚拟环境,或显式指定全局Python版本。" + +#: ../../using/windows.rst:727 +msgid "From a script" +msgstr "从脚本" + +#: ../../using/windows.rst:729 +msgid "" +"Let's create a test Python script - create a file called ``hello.py`` with " +"the following contents" +msgstr "让我们创建一个测试Python脚本 - 创建一个名为 ``hello.py`` 的文件,其中包含以下内容" + +#: ../../using/windows.rst:738 +msgid "From the directory in which hello.py lives, execute the command::" +msgstr "从hello.py所在的目录中,执行以下命令:" + +#: ../../using/windows.rst:742 +msgid "" +"You should notice the version number of your latest Python 2.x installation " +"is printed. Now try changing the first line to be:" +msgstr "您应该注意到最新的Python 2.x安装的版本号已打印出来。现在尝试将第一行更改为:" + +#: ../../using/windows.rst:749 +msgid "" +"Re-executing the command should now print the latest Python 3.x information." +" As with the above command-line examples, you can specify a more explicit " +"version qualifier. Assuming you have Python 3.7 installed, try changing the" +" first line to ``#! python3.7`` and you should find the |version| version " +"information printed." +msgstr "" +"现在,重新执行该命令应该打印最新的Python 3.x信息。与上面的命令行示例一样,你可以更明确的指定版本限定符。假设您安装了 Python " +"3.7,请尝试将第一行更改为 ``#! python3.7`` ,你会发现打印的3.7版本信息。" + +#: ../../using/windows.rst:755 +msgid "" +"Note that unlike interactive use, a bare \"python\" will use the latest " +"version of Python 2.x that you have installed. This is for backward " +"compatibility and for compatibility with Unix, where the command ``python`` " +"typically refers to Python 2." +msgstr "" +"请注意,与交互式使用不同,裸“python”将使用您已安装的Python 2.x的最新版本。这是为了向后兼容及兼容Unix,其中命令 " +"``python`` 通常是指Python 2。" + +#: ../../using/windows.rst:761 +msgid "From file associations" +msgstr "从文件关联" + +#: ../../using/windows.rst:763 +msgid "" +"The launcher should have been associated with Python files (i.e. ``.py``, " +"``.pyw``, ``.pyc`` files) when it was installed. This means that when you " +"double-click on one of these files from Windows explorer the launcher will " +"be used, and therefore you can use the same facilities described above to " +"have the script specify the version which should be used." +msgstr "" +"安装时应该将启动器与Python文件(即 ``.py``, ``.pyw``, ``.pyc`` " +"文件)相关联。这意味着当您从Windows资源管理器中双击其中一个文件时,将使用启动程序,因此您可以使用上述相同的工具让脚本指定应使用的版本。" + +#: ../../using/windows.rst:769 +msgid "" +"The key benefit of this is that a single launcher can support multiple " +"Python versions at the same time depending on the contents of the first " +"line." +msgstr "这样做的主要好处是,单个启动程序可以同时支持多个Python版本,具体取决于第一行的内容。" + +#: ../../using/windows.rst:773 +msgid "Shebang Lines" +msgstr "Shebang 行" + +#: ../../using/windows.rst:775 +msgid "" +"If the first line of a script file starts with ``#!``, it is known as a " +"\"shebang\" line. Linux and other Unix like operating systems have native " +"support for such lines and they are commonly used on such systems to " +"indicate how a script should be executed. This launcher allows the same " +"facilities to be used with Python scripts on Windows and the examples above " +"demonstrate their use." +msgstr "" +"如果脚本文件的第一行以 ``#!`` 开头,则称为 \"shebang\" " +"行。Linux和其他类Unix操作系统都有对这些行的本机支持,它们通常在此类系统上用来指示应该如何执行脚本。这个启动器允许在Windows上对Python脚本使用相同的工具,上面的示例演示了它们的使用。" + +#: ../../using/windows.rst:782 +msgid "" +"To allow shebang lines in Python scripts to be portable between Unix and " +"Windows, this launcher supports a number of 'virtual' commands to specify " +"which interpreter to use. The supported virtual commands are:" +msgstr "" +"为了允许Python脚本中的shebang行在Unix和Windows之间移植,该启动器支持许多“虚拟”命令来指定要使用的解释器。支持的虚拟命令是:" + +#: ../../using/windows.rst:786 +msgid "``/usr/bin/env python``" +msgstr "``/usr/bin/env python``" + +#: ../../using/windows.rst:787 +msgid "``/usr/bin/python``" +msgstr "``/usr/bin/python``" + +#: ../../using/windows.rst:788 +msgid "``/usr/local/bin/python``" +msgstr "``/usr/local/bin/python``" + +#: ../../using/windows.rst:789 +msgid "``python``" +msgstr "``python``" + +#: ../../using/windows.rst:791 +msgid "For example, if the first line of your script starts with" +msgstr "例如,如果脚本开始的第一行为" + +#: ../../using/windows.rst:797 +msgid "" +"The default Python will be located and used. As many Python scripts written" +" to work on Unix will already have this line, you should find these scripts " +"can be used by the launcher without modification. If you are writing a new " +"script on Windows which you hope will be useful on Unix, you should use one " +"of the shebang lines starting with ``/usr``." +msgstr "" +"将找到并使用默认的Python。因为在Unix上编写的许多Python脚本已经有了这一行,你应该发现这些脚本可以由启动器使用而无需修改。如果您在Windows上编写一个新脚本,希望在Unix上有用,那么您应该使用以" +" ``/usr`` 开头的一个shebang行。" + +#: ../../using/windows.rst:803 +msgid "" +"Any of the above virtual commands can be suffixed with an explicit version " +"(either just the major version, or the major and minor version). Furthermore" +" the 32-bit version can be requested by adding \"-32\" after the minor " +"version. I.e. ``/usr/bin/python3.7-32`` will request usage of the 32-bit " +"python 3.7." +msgstr "" +"任何上述虚拟命令都可以显式指定版本(可以仅为主要版本,也可以为主要版本加次要版本)作为后缀。 此外,可以通过在次要版本之后添加 “-32” 来请求 32" +" 位版本。 例如 ``/usr/bin/python3.7-32`` 将请求使用 32 位 python 3.7。" + +#: ../../using/windows.rst:811 +msgid "" +"Beginning with python launcher 3.7 it is possible to request 64-bit version " +"by the \"-64\" suffix. Furthermore it is possible to specify a major and " +"architecture without minor (i.e. ``/usr/bin/python3-64``)." +msgstr "" +"从 python 启动器 3.7 开始,可以通过 \"-64\" 后缀调用 64 位版本。 此外还可以指定一个主版本号加架构而不带次版本号 (即 " +"``/usr/bin/python3-64``)。" + +#: ../../using/windows.rst:815 +msgid "" +"The ``/usr/bin/env`` form of shebang line has one further special property. " +"Before looking for installed Python interpreters, this form will search the " +"executable :envvar:`PATH` for a Python executable. This corresponds to the " +"behaviour of the Unix ``env`` program, which performs a :envvar:`PATH` " +"search." +msgstr "" +"shebang line的 ``/usr/bin/env`` 形式还有一个特殊属性。在寻找已安装的Python解释器之前,此表单将搜索可执行文件 " +":envvar:`PATH` 以获取Python可执行文件。这对应于Unix中 ``env`` 程序的行为,该程序将在 :envvar:`PATH` " +"执行搜索。" + +#: ../../using/windows.rst:821 +msgid "Arguments in shebang lines" +msgstr "shebang 行的参数" + +#: ../../using/windows.rst:823 +msgid "" +"The shebang lines can also specify additional options to be passed to the " +"Python interpreter. For example, if you have a shebang line:" +msgstr "shebang 行还可以指定要传递给Python解释器的其他选项。 举例来说,如果你有这样的 shebang 行:" + +#: ../../using/windows.rst:830 +msgid "Then Python will be started with the ``-v`` option" +msgstr "那么 Python 将以 ``-v`` 选项启动" + +#: ../../using/windows.rst:833 +msgid "Customization" +msgstr "自定义" + +#: ../../using/windows.rst:836 +msgid "Customization via INI files" +msgstr "通过INI文件自定义" + +#: ../../using/windows.rst:838 +msgid "" +"Two .ini files will be searched by the launcher - ``py.ini`` in the current " +"user's \"application data\" directory (i.e. the directory returned by " +"calling the Windows function ``SHGetFolderPath`` with " +"``CSIDL_LOCAL_APPDATA``) and ``py.ini`` in the same directory as the " +"launcher. The same .ini files are used for both the 'console' version of the" +" launcher (i.e. py.exe) and for the 'windows' version (i.e. pyw.exe)." +msgstr "" +"启动程序将搜索两个.ini文件 - 在当前用户的 \"application data\" 目录中搜索 ``py.ini`` (即通过使用 " +"``CSIDL_LOCAL_APPDATA`` 调用Windows函数 ``SHGetFolderPath`` 返回的目录)以及与启动器位于同一目录中的" +" ``py.ini`` 。相同的.ini文件既用于启动器的“控制台”版本(即 py.exe),也用于“windows”版本(即pyw.exe)" + +#: ../../using/windows.rst:845 +msgid "" +"Customization specified in the \"application directory\" will have " +"precedence over the one next to the executable, so a user, who may not have " +"write access to the .ini file next to the launcher, can override commands in" +" that global .ini file." +msgstr "" +"“应用程序目录”中指定的自定义优先于可执行文件旁边.ini文件的自定义,因此对启动程序旁边的.ini文件不具有写访问权限的用户可以覆盖该全局.ini文件中的命令。" + +#: ../../using/windows.rst:850 +msgid "Customizing default Python versions" +msgstr "自定义默认的Python版本" + +#: ../../using/windows.rst:852 +msgid "" +"In some cases, a version qualifier can be included in a command to dictate " +"which version of Python will be used by the command. A version qualifier " +"starts with a major version number and can optionally be followed by a " +"period ('.') and a minor version specifier. Furthermore it is possible to " +"specify if a 32 or 64 bit implementation shall be requested by adding " +"\"-32\" or \"-64\"." +msgstr "" +"在某些情况下,可以在命令中包含版本限定符,以指定命令将使用哪个Python版本。版本限定符以主版本号开头,可以选择后跟 ('.') " +"和次版本说明符。此外,可以通过添加 \"-32\" 或 “-64” 来指定是请求32位还是64位实现。" + +#: ../../using/windows.rst:858 +msgid "" +"For example, a shebang line of ``#!python`` has no version qualifier, while " +"``#!python3`` has a version qualifier which specifies only a major version." +msgstr "" +"例如,一个shebang 行的 ``#!python`` 行没有版本限定符,而 ``#!python3`` 有一个版本限定符,它只指定一个主版本。" + +#: ../../using/windows.rst:861 +msgid "" +"If no version qualifiers are found in a command, the environment variable " +":envvar:`PY_PYTHON` can be set to specify the default version qualifier. If " +"it is not set, the default is \"3\". The variable can specify any value that" +" may be passed on the command line, such as \"3\", \"3.7\", \"3.7-32\" or " +"\"3.7-64\". (Note that the \"-64\" option is only available with the " +"launcher included with Python 3.7 or newer.)" +msgstr "" +"如果在命令中找不到版本限定符,则可以设置环境变量 :envvar:`PY_PYTHON` 以指定默认版本限定符。 如果未设置,则默认为 \"3\"。 " +"该变量可以指定能通过命令行传递的任何值,比如 \"3\", \"3.7\", \"3.7-32\" 或 \"3.7-64\"。 (请注意 \"-64\"" +" 选项仅适用于 Python 3.7 或更高版本中包含的启动器。)" + +#: ../../using/windows.rst:868 +msgid "" +"If no minor version qualifiers are found, the environment variable " +"``PY_PYTHON{major}`` (where ``{major}`` is the current major version " +"qualifier as determined above) can be set to specify the full version. If no" +" such option is found, the launcher will enumerate the installed Python " +"versions and use the latest minor release found for the major version, which" +" is likely, although not guaranteed, to be the most recently installed " +"version in that family." +msgstr "" +"如果没有找到次版本限定符,则可以设置环境变量 ``PY_PYTHON{major}`` (其中 ``{major}`` " +"是上面确定的当前主要版本限定符)以指定完整版本。如果没有找到这样的选项,启动器将枚举已安装的Python版本并使用为主要版本找到的最新次要版本,尽管不能保证,但该版本可能是该系列中最新安装的版本。" + +#: ../../using/windows.rst:876 +msgid "" +"On 64-bit Windows with both 32-bit and 64-bit implementations of the same " +"(major.minor) Python version installed, the 64-bit version will always be " +"preferred. This will be true for both 32-bit and 64-bit implementations of " +"the launcher - a 32-bit launcher will prefer to execute a 64-bit Python " +"installation of the specified version if available. This is so the behavior " +"of the launcher can be predicted knowing only what versions are installed on" +" the PC and without regard to the order in which they were installed (i.e., " +"without knowing whether a 32 or 64-bit version of Python and corresponding " +"launcher was installed last). As noted above, an optional \"-32\" or \"-64\"" +" suffix can be used on a version specifier to change this behaviour." +msgstr "" +"在安装了相同(major.minor)Python版本的32位和64位的64位Windows上,64位版本将始终是首选。对于启动程序的32位和64位实现都是如此" +" -- 这对于启动程序32位和64位都是正确的 -- " +"如果可用,32位启动程序将倾向于执行指定版本的64位Python安装。这样就可以预测启动器的行为,只知道PC上安装了哪些版本,而不考虑它们的安装顺序(即,不知道32位或64位版本的Python和相应的启动器是否是最后安装)。如上所述,可以在版本说明符上使用可选的“-32”或“-64”后缀来更改此行为。" + +#: ../../using/windows.rst:887 +msgid "Examples:" +msgstr "示例:" + +#: ../../using/windows.rst:889 +msgid "" +"If no relevant options are set, the commands ``python`` and ``python2`` will" +" use the latest Python 2.x version installed and the command ``python3`` " +"will use the latest Python 3.x installed." +msgstr "" +"如果没有设置相关选项,命令 ``python`` 和 ``python2`` 将使用安装的最新Python 2.x版本,命令 ``python3`` " +"将使用最新安装的Python 3.x." + +#: ../../using/windows.rst:893 +msgid "" +"The command ``python3.7`` will not consult any options at all as the " +"versions are fully specified." +msgstr "命令 ``python3.7`` 根本不会查阅任何选项,因为版本已完全指定。" + +#: ../../using/windows.rst:896 +msgid "" +"If ``PY_PYTHON=3``, the commands ``python`` and ``python3`` will both use " +"the latest installed Python 3 version." +msgstr "如果 ``PY_PYTHON=3`` ,命令 ``python`` 和 ``python3`` 都将使用最新安装的Python 3版本。" + +#: ../../using/windows.rst:899 +msgid "" +"If ``PY_PYTHON=3.7-32``, the command ``python`` will use the 32-bit " +"implementation of 3.7 whereas the command ``python3`` will use the latest " +"installed Python (PY_PYTHON was not considered at all as a major version was" +" specified.)" +msgstr "" +"如果 ``PY_PYTHON=3.7-32`` ,命令 ``python`` 将使用3.7的32位实现,而命令 ``python3`` " +"将使用最新安装的Python(PY_PYTHON根本没有被视为指定了主要版本。)" + +#: ../../using/windows.rst:904 +msgid "" +"If ``PY_PYTHON=3`` and ``PY_PYTHON3=3.7``, the commands ``python`` and " +"``python3`` will both use specifically 3.7" +msgstr "" +"如果 ``PY_PYTHON=3`` 且 ``PY_PYTHON3=3.7`` ,命令 ``python`` 和 ``python3`` " +"都将特别使用3.7" + +#: ../../using/windows.rst:907 +msgid "" +"In addition to environment variables, the same settings can be configured in" +" the .INI file used by the launcher. The section in the INI file is called " +"``[defaults]`` and the key name will be the same as the environment " +"variables without the leading ``PY_`` prefix (and note that the key names in" +" the INI file are case insensitive.) The contents of an environment " +"variable will override things specified in the INI file." +msgstr "" +"除环境变量外,还可以在启动程序使用的.INI文件中配置相同的设置。 INI文件中的部分称为 ``[defaults]`` ,键名称将与没有前导 " +"``PY_`` 前缀的环境变量相同(并注意INI文件中的键名不区分大小写) 。)环境变量的内容将覆盖INI文件中指定的内容。" + +#: ../../using/windows.rst:914 +msgid "For example:" +msgstr "例如:" + +#: ../../using/windows.rst:916 +msgid "Setting ``PY_PYTHON=3.7`` is equivalent to the INI file containing:" +msgstr "设置 ``PY_PYTHON=3.7`` 等同于包含以下内容的INI文件:" + +#: ../../using/windows.rst:923 +msgid "" +"Setting ``PY_PYTHON=3`` and ``PY_PYTHON3=3.7`` is equivalent to the INI file" +" containing:" +msgstr "设置 ``PY_PYTHON=3`` 和 ``PY_PYTHON3=3.7`` 相当于包含以下内容的INI文件:" + +#: ../../using/windows.rst:933 +msgid "Diagnostics" +msgstr "诊断" + +#: ../../using/windows.rst:935 +msgid "" +"If an environment variable ``PYLAUNCH_DEBUG`` is set (to any value), the " +"launcher will print diagnostic information to stderr (i.e. to the console). " +"While this information manages to be simultaneously verbose *and* terse, it " +"should allow you to see what versions of Python were located, why a " +"particular version was chosen and the exact command-line used to execute the" +" target Python." +msgstr "" +"如果设置了环境变量 ``PYLAUNCH_DEBUG`` (任何值),启动器将诊断信息打印到stderr(即:控制台)。虽然这些信息同时具有冗长 *和*" +" 简洁性,但它应该允许您查看Python的版本、选择特定版本的原因以及用于执行目标Python的确切命令行。" + +#: ../../using/windows.rst:947 +msgid "Finding modules" +msgstr "查找模块" + +#: ../../using/windows.rst:949 +msgid "" +"Python usually stores its library (and thereby your site-packages folder) in" +" the installation directory. So, if you had installed Python to " +":file:`C:\\\\Python\\\\`, the default library would reside in " +":file:`C:\\\\Python\\\\Lib\\\\` and third-party modules should be stored in " +":file:`C:\\\\Python\\\\Lib\\\\site-packages\\\\`." +msgstr "" +"Python通常将其库(以及您的site-packages文件夹)存储在安装目录中。因此,如果您已将Python安装到 " +":file:`C:\\\\Python\\\\` ,则默认库将驻留在 :file:`C:\\\\Python\\\\Lib\\\\` " +"中,第三方模块存储在 :file:`C:\\\\Python\\\\Lib\\\\site-packages\\\\` 。" + +#: ../../using/windows.rst:955 +msgid "" +"To completely override :data:`sys.path`, create a ``._pth`` file with the " +"same name as the DLL (``python37._pth``) or the executable (``python._pth``)" +" and specify one line for each path to add to :data:`sys.path`. The file " +"based on the DLL name overrides the one based on the executable, which " +"allows paths to be restricted for any program loading the runtime if " +"desired." +msgstr "" +"若要完全覆盖 :data:`sys.path` ,请创建与DLL(``python37._pth``)或可执行文件(“python._pth`”)同名的" +" ``._pth`` 文件,并为要添加的每个路径指定一行 :data:`sys.path` " +"。基于DLL名称的文件覆盖基于可执行文件的文件,如果需要,可以为加载运行时的任何程序限制路径。" + +#: ../../using/windows.rst:961 +msgid "" +"When the file exists, all registry and environment variables are ignored, " +"isolated mode is enabled, and :mod:`site` is not imported unless one line in" +" the file specifies ``import site``. Blank paths and lines starting with " +"``#`` are ignored. Each path may be absolute or relative to the location of " +"the file. Import statements other than to ``site`` are not permitted, and " +"arbitrary code cannot be specified." +msgstr "" +"当文件存在时,将忽略所有注册表和环境变量,启用隔离模式,并且:除非文件中的一行指定 ``import site`` ,否则不会导入 " +":mod:`site` 。以 ``#`` 开头的空白路径和行将被忽略。每个路径可以是绝对的或相对于文件的位置。不允许使用除 ``site`` " +"以外的导入语句,并且不能指定任意代码。" + +#: ../../using/windows.rst:968 +msgid "" +"Note that ``.pth`` files (without leading underscore) will be processed " +"normally by the :mod:`site` module when ``import site`` has been specified." +msgstr "请注意,当指定 ``import site`` 时, ``.pth`` 文件(没有前导下划线)将由 :mod:`site` 模块正常处理。" + +#: ../../using/windows.rst:971 +msgid "" +"When no ``._pth`` file is found, this is how :data:`sys.path` is populated " +"on Windows:" +msgstr "当找不到 ``._pth`` 文件时, :data:`sys.path` 是如何在Windows上填充的:" + +#: ../../using/windows.rst:974 +msgid "" +"An empty entry is added at the start, which corresponds to the current " +"directory." +msgstr "在开始时,添加一个空条目,该条目对应于当前目录。" + +#: ../../using/windows.rst:977 +msgid "" +"If the environment variable :envvar:`PYTHONPATH` exists, as described in " +":ref:`using-on-envvars`, its entries are added next. Note that on Windows, " +"paths in this variable must be separated by semicolons, to distinguish them " +"from the colon used in drive identifiers (``C:\\`` etc.)." +msgstr "" +"如果环境变量 :envvar:`PYTHONPATH` 存在,如 :ref:`using-on-envvars` " +"中所述,则接下来添加其条目。请注意,在Windows上,此变量中的路径必须用分号分隔,以区别于驱动器标识符中使用的冒号( ``C:\\`` 等)。" + +#: ../../using/windows.rst:982 +msgid "" +"Additional \"application paths\" can be added in the registry as subkeys of " +":samp:`\\\\SOFTWARE\\\\Python\\\\PythonCore\\\\{version}\\\\PythonPath` " +"under both the ``HKEY_CURRENT_USER`` and ``HKEY_LOCAL_MACHINE`` hives. " +"Subkeys which have semicolon-delimited path strings as their default value " +"will cause each path to be added to :data:`sys.path`. (Note that all known " +"installers only use HKLM, so HKCU is typically empty.)" +msgstr "" +"额外的 \"应用程序路径\" 可以作为子键被同时添加到注册表 ``HKEY_CURRENT_USER`` 和 " +"``HKEY_LOCAL_MACHINE`` 分支下的 " +":samp:`\\\\SOFTWARE\\\\Python\\\\PythonCore\\\\{version}\\\\PythonPath` 中。 " +"以分号分隔的路径字符串作为默认值的子键将导致每个路径都被添加到 :data:`sys.path` 中。 (请注意所有已知的安装程序都只使用 " +"HKLM,因此 HKCU 通常为空。)" + +#: ../../using/windows.rst:989 +msgid "" +"If the environment variable :envvar:`PYTHONHOME` is set, it is assumed as " +"\"Python Home\". Otherwise, the path of the main Python executable is used " +"to locate a \"landmark file\" (either ``Lib\\os.py`` or ``pythonXY.zip``) to" +" deduce the \"Python Home\". If a Python home is found, the relevant sub-" +"directories added to :data:`sys.path` (``Lib``, ``plat-win``, etc) are based" +" on that folder. Otherwise, the core Python path is constructed from the " +"PythonPath stored in the registry." +msgstr "" +"如果设置了环境变量 :envvar:`PYTHONHOME` ,则将其假定为 “Python 主目录” 。否则,主Python可执行文件的路径用于定位" +" “landmark 文件” ( ``Lib\\os.py`` 或 ``pythonXY.zip`` )以推断 ”Python 主目录“ " +"。如果找到了Python主目录,则基于该文件夹将相关的子目录添加到 :data:`sys.path` (``Lib`` , ``plat-win`` " +"等)。否则,核心Python路径是从存储在注册表中的PythonPath构造的。" + +#: ../../using/windows.rst:997 +msgid "" +"If the Python Home cannot be located, no :envvar:`PYTHONPATH` is specified " +"in the environment, and no registry entries can be found, a default path " +"with relative entries is used (e.g. ``.\\Lib;.\\plat-win``, etc)." +msgstr "" +"如果找不到Python Home,也没有指定 :envvar:`PYTHONPATH` 环境变量,并且找不到注册表项,则使用具有相对条目的默认路径(例如" +" ``.\\Lib; .\\plat-win`` 等等)。" + +#: ../../using/windows.rst:1001 +msgid "" +"If a ``pyvenv.cfg`` file is found alongside the main executable or in the " +"directory one level above the executable, the following variations apply:" +msgstr "如果在主可执行文件旁边或在可执行文件上一级的目录中找到 ``pyvenv.cfg`` 文件,则以下变体适用:" + +#: ../../using/windows.rst:1004 +msgid "" +"If ``home`` is an absolute path and :envvar:`PYTHONHOME` is not set, this " +"path is used instead of the path to the main executable when deducing the " +"home location." +msgstr "" +"如果 ``home`` 是一个绝对路径,并且 :envvar:`PYTHONHOME` 未设置,则在推断起始位置时使用此路径而不是主可执行文件的路径。" + +#: ../../using/windows.rst:1008 +msgid "The end result of all this is:" +msgstr "这一切的最终结果是:" + +#: ../../using/windows.rst:1010 +msgid "" +"When running :file:`python.exe`, or any other .exe in the main Python " +"directory (either an installed version, or directly from the PCbuild " +"directory), the core path is deduced, and the core paths in the registry are" +" ignored. Other \"application paths\" in the registry are always read." +msgstr "" +"运行 :file:`python.exe` " +",或主Python目录中的任何其他.exe(安装版本,或直接来自PCbuild目录)时,推导出核心路径,并忽略注册表中的核心路径。始终读取注册表中的其他“应用程序路径”。" + +#: ../../using/windows.rst:1015 +msgid "" +"When Python is hosted in another .exe (different directory, embedded via " +"COM, etc), the \"Python Home\" will not be deduced, so the core path from " +"the registry is used. Other \"application paths\" in the registry are " +"always read." +msgstr "" +"当Python托管在另一个.exe(不同的目录,通过COM嵌入等)时,将不会推断出“Python " +"Home”,因此使用了来自注册表的核心路径。始终读取注册表中的其他“应用程序路径”。" + +#: ../../using/windows.rst:1019 +msgid "" +"If Python can't find its home and there are no registry value (frozen .exe, " +"some very strange installation setup) you get a path with some default, but " +"relative, paths." +msgstr "" +"如果Python找不到它的主目录并且没有注册表值(冻结的.exe,一些非常奇怪的安装设置),那么你会得到一条带有一些默认但相对的路径的路径。" + +#: ../../using/windows.rst:1023 +msgid "" +"For those who want to bundle Python into their application or distribution, " +"the following advice will prevent conflicts with other installations:" +msgstr "对于那些想要将Python捆绑到其应用程序或发行版中的人,以下建议将防止与其他安装冲突:" + +#: ../../using/windows.rst:1026 +msgid "" +"Include a ``._pth`` file alongside your executable containing the " +"directories to include. This will ignore paths listed in the registry and " +"environment variables, and also ignore :mod:`site` unless ``import site`` is" +" listed." +msgstr "" +"在您的可执行文件中包含一个 ``._pth`` 文件,其中包含目录。这将忽略注册表和环境变量中列出的路径,并忽略 :mod:`site` ,除非列出 " +"``import site`` 。" + +#: ../../using/windows.rst:1031 +msgid "" +"If you are loading :file:`python3.dll` or :file:`python37.dll` in your own " +"executable, explicitly call :c:func:`Py_SetPath` or (at least) " +":c:func:`Py_SetProgramName` before :c:func:`Py_Initialize`." +msgstr "" +"如果你在自己的可执行文件中加载 :file:`python3.dll` 或 :file:`python37.dll` ,在 " +":c:func:`Py_Initialize` 之前,要显式调用 :c:func:`Py_SetPath` 或(至少) " +":c:func:`Py_SetProgramName`" + +#: ../../using/windows.rst:1035 +msgid "" +"Clear and/or overwrite :envvar:`PYTHONPATH` and set :envvar:`PYTHONHOME` " +"before launching :file:`python.exe` from your application." +msgstr "" +"清除 和/或 覆盖 :envvar:`PYTHONPATH` 并在启动来自应用程序的 :file:`python.exe` 之前设置 " +":envvar:`PYTHONHOME` 。" + +#: ../../using/windows.rst:1038 +msgid "" +"If you cannot use the previous suggestions (for example, you are a " +"distribution that allows people to run :file:`python.exe` directly), ensure " +"that the landmark file (:file:`Lib\\\\os.py`) exists in your install " +"directory. (Note that it will not be detected inside a ZIP file, but a " +"correctly named ZIP file will be detected instead.)" +msgstr "" +"如果您不能使用前面的建议(例如,您是一个允许人们直接运行 :file:`python.exe` 的分发版),请确保安装目录中存在 landmark 文件" +" (:file:`Lib\\\\os.py`)。 (请注意,在 ZIP 文件中不会检测到该文件,但会检测到正确命名的 ZIP 文件。)" + +#: ../../using/windows.rst:1044 +msgid "" +"These will ensure that the files in a system-wide installation will not take" +" precedence over the copy of the standard library bundled with your " +"application. Otherwise, your users may experience problems using your " +"application. Note that the first suggestion is the best, as the others may " +"still be susceptible to non-standard paths in the registry and user site-" +"packages." +msgstr "" +"这些将确保系统范围安装中的文件不会优先于与应用程序捆绑在一起的标准库的副本。否则,用户可能会在使用您的应用程序时遇到问题请注意,第一个建议是最好的,因为其他建议可能仍然容易受到注册表和用户站点包中的非标准路径的影响。" + +#: ../../using/windows.rst:1053 +msgid "" +"Adds ``._pth`` file support and removes ``applocal`` option from " +"``pyvenv.cfg``." +msgstr "添加 ``._pth`` 文件支持并从 ``pyvenv.cfg`` 中删除 ``applocal`` 选项" + +#: ../../using/windows.rst:1055 +msgid "" +"Adds ``pythonXX.zip`` as a potential landmark when directly adjacent to the " +"executable." +msgstr "当直接与可执行文件相邻时,添加 ``pythonXX.zip`` 作为潜在的 landmark 。" + +#: ../../using/windows.rst:1061 +msgid "" +"Modules specified in the registry under ``Modules`` (not ``PythonPath``) may" +" be imported by :class:`importlib.machinery.WindowsRegistryFinder`. This " +"finder is enabled on Windows in 3.6.0 and earlier, but may need to be " +"explicitly added to :attr:`sys.meta_path` in the future." +msgstr "" +"在 ``Modules`` (不是 ``PythonPath`` )下的注册表中指定的模块可以通过以下方式导入 " +":class:`importlib.machinery.WindowsRegistryFinder` " +"。在Windows上,此查找程序在3.6.0及更早版本的可用,但可能需要在将来显式添加到 :attr:`sys.meta_path` " + +#: ../../using/windows.rst:1067 +msgid "Additional modules" +msgstr "附加模块" + +#: ../../using/windows.rst:1069 +msgid "" +"Even though Python aims to be portable among all platforms, there are " +"features that are unique to Windows. A couple of modules, both in the " +"standard library and external, and snippets exist to use these features." +msgstr "尽管Python的目标是在所有平台中都可移植,但是Windows有一些独特的特性。在标准库和外部都有一些模块和代码片段在使用这些特性。" + +#: ../../using/windows.rst:1073 +msgid "" +"The Windows-specific standard modules are documented in :ref:`mswin-" +"specific-services`." +msgstr "特定于Windows的标准模块记录在 :ref:`mswin-specific-services` 中。" + +#: ../../using/windows.rst:1077 +msgid "PyWin32" +msgstr "PyWin32" + +#: ../../using/windows.rst:1079 +msgid "" +"The `PyWin32 `_ module by Mark Hammond is " +"a collection of modules for advanced Windows-specific support. This " +"includes utilities for:" +msgstr "" +"Mark Hammond 的 `PyWin32 `_ " +"模块是一组用于高级Windows特定支持的模块。这包括以下实用程序:" + +#: ../../using/windows.rst:1083 +msgid "" +"`Component Object Model `_ (COM)" +msgstr "" +"`组件对象模型 `_ (COM)" + +#: ../../using/windows.rst:1086 +msgid "Win32 API calls" +msgstr "Win32 API 调用" + +#: ../../using/windows.rst:1087 +msgid "Registry" +msgstr "注册" + +#: ../../using/windows.rst:1088 +msgid "Event log" +msgstr "事件日志" + +#: ../../using/windows.rst:1089 +msgid "" +"`Microsoft Foundation Classes `_ (MFC) user interfaces" +msgstr "" +"`Microsoft Foundation Classes `_ (MFC) 用户界面" + +#: ../../using/windows.rst:1093 +msgid "" +"`PythonWin `_ is a sample MFC application " +"shipped with PyWin32. It is an embeddable IDE with a built-in debugger." +msgstr "" +"`PythonWin `_ " +"是PyWin32附带的一个示例MFC应用程序。它是一个内置调试器的可嵌入IDE。" + +#: ../../using/windows.rst:1100 +msgid "" +"`Win32 How Do I...? `_" +msgstr "" +"`Win32 How Do I...? `_" + +#: ../../using/windows.rst:1100 +msgid "by Tim Golden" +msgstr "Tim Golden 著" + +#: ../../using/windows.rst:1102 +msgid "`Python and COM `_" +msgstr "`Python and COM `_" + +#: ../../using/windows.rst:1103 +msgid "by David and Paul Boddie" +msgstr "David 和 Paul Boddie 著" + +#: ../../using/windows.rst:1107 +msgid "cx_Freeze" +msgstr "cx_Freeze" + +#: ../../using/windows.rst:1109 +msgid "" +"`cx_Freeze `_ is a " +":mod:`distutils` extension (see :ref:`extending-distutils`) which wraps " +"Python scripts into executable Windows programs (:file:`{*}.exe` files). " +"When you have done this, you can distribute your application without " +"requiring your users to install Python." +msgstr "" +"`cx_Freeze `_ 是一个 " +":mod:`distutils` 的扩展 (参见 :ref:`extending-distutils`),它将 Python 脚本包装成可执行的 " +"Windows 程序 (:file:`{*}.exe` 文件)。 完成此操作后,你就可以分发你的应用程序而无需用户安装 Python。" + +#: ../../using/windows.rst:1117 +msgid "Compiling Python on Windows" +msgstr "在Windows上编译Python" + +#: ../../using/windows.rst:1119 +msgid "" +"If you want to compile CPython yourself, first thing you should do is get " +"the `source `_. You can download " +"either the latest release's source or just grab a fresh `checkout " +"`_." +msgstr "" +"如果你想自己编译CPython,首先要做的是获取 `source " +"`_. 。您可以下载最新版本的源代码,也可以重新签出 " +"`checkout `_. 。" + +#: ../../using/windows.rst:1124 +msgid "" +"The source tree contains a build solution and project files for Microsoft " +"Visual Studio, which is the compiler used to build the official Python " +"releases. These files are in the :file:`PCbuild` directory." +msgstr "" +"源代码树包含Microsoft Visual Studio的构建解决方案和项目文件,它是用于构建官方Python版本的编译器。这些文件位于 " +":file:`PCbuild` 目录中。" + +#: ../../using/windows.rst:1128 +msgid "" +"Check :file:`PCbuild/readme.txt` for general information on the build " +"process." +msgstr "检查 :file:`PCbuild/readme.txt` 以获取有关构建过程的一般信息。" + +#: ../../using/windows.rst:1130 +msgid "For extension modules, consult :ref:`building-on-windows`." +msgstr "有关扩展模块,请参阅 :ref:`building-on-windows` 。" + +#: ../../using/windows.rst:1134 +msgid "Other Platforms" +msgstr "其他平台" + +#: ../../using/windows.rst:1136 +msgid "" +"With ongoing development of Python, some platforms that used to be supported" +" earlier are no longer supported (due to the lack of users or developers). " +"Check :pep:`11` for details on all unsupported platforms." +msgstr "" +"随着Python的不断发展,不再支持以前曾经支持的一些平台(由于缺少用户或开发人员)。检查 :pep:`11` 了解所有不支持的平台的详细信息。" + +#: ../../using/windows.rst:1140 +msgid "" +"`Windows CE `_ is `no longer supported " +"`__ since Python 3 (if it " +"ever was)." +msgstr "" +"`Windows CE `_ 从Python 3开始 `不再支持 " +"`__ (如果曾经支持的话)。" + +#: ../../using/windows.rst:1143 +msgid "" +"The `Cygwin `_ installer offers to install the `Python " +"interpreter `__ as well" +msgstr "" +"Cygwin ``_安装程序也提供了安装 `Python 解释器 " +"`__ 的功能。" + +#: ../../using/windows.rst:1147 +msgid "" +"See `Python for Windows `_ for " +"detailed information about platforms with pre-compiled installers." +msgstr "" +"有关具有预编译安装程序平台的详细信息,请参阅 `Python for Windows " +"`_" diff --git a/whatsnew/2.0.po b/whatsnew/2.0.po new file mode 100644 index 000000000..7b1549dc7 --- /dev/null +++ b/whatsnew/2.0.po @@ -0,0 +1,1746 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) 2001-2024, Python Software Foundation +# This file is distributed under the same license as the Python package. +# FIRST AUTHOR , YEAR. +# +# Translators: +# Fred , 2018 +# Fei Yin , 2018 +# Naisen Xu <723648649@qq.com>, 2019 +# ppcfish , 2019 +# Freesand Leo , 2024 +# Rafael Fontenelle , 2024 +# +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: Python 3.9\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2024-06-20 08:51+0000\n" +"PO-Revision-Date: 2017-02-16 23:42+0000\n" +"Last-Translator: Rafael Fontenelle , 2024\n" +"Language-Team: Chinese (China) (https://app.transifex.com/python-doc/teams/5390/zh_CN/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: zh_CN\n" +"Plural-Forms: nplurals=1; plural=0;\n" + +#: ../../whatsnew/2.0.rst:3 +msgid "What's New in Python 2.0" +msgstr "Python 2.0 有什么新变化" + +#: ../../whatsnew/2.0.rst:0 +msgid "Author" +msgstr "作者" + +#: ../../whatsnew/2.0.rst:5 +msgid "A.M. Kuchling and Moshe Zadka" +msgstr "A.M. Kuchling 和 Moshe Zadka" + +#: ../../whatsnew/2.0.rst:13 +msgid "Introduction" +msgstr "概述" + +#: ../../whatsnew/2.0.rst:15 +msgid "" +"A new release of Python, version 2.0, was released on October 16, 2000. This" +" article covers the exciting new features in 2.0, highlights some other " +"useful changes, and points out a few incompatible changes that may require " +"rewriting code." +msgstr "" +" 新的发行版 Python 2.0 发布于2000年10月16 日。本文介绍了 Python 2.0 " +"中令人兴奋的新功能,着重描述了一些其他有用的更改,并指出了一些可能需要重写代码的不兼容更改。" + +#: ../../whatsnew/2.0.rst:20 +msgid "" +"Python's development never completely stops between releases, and a steady " +"flow of bug fixes and improvements are always being submitted. A host of " +"minor fixes, a few optimizations, additional docstrings, and better error " +"messages went into 2.0; to list them all would be impossible, but they're " +"certainly significant. Consult the publicly-available CVS logs if you want " +"to see the full list. This progress is due to the five developers working " +"for PythonLabs are now getting paid to spend their days fixing bugs, and " +"also due to the improved communication resulting from moving to " +"SourceForge." +msgstr "" + +#: ../../whatsnew/2.0.rst:33 +msgid "What About Python 1.6?" +msgstr "Python 1.6 将会怎样?" + +#: ../../whatsnew/2.0.rst:35 +msgid "" +"Python 1.6 can be thought of as the Contractual Obligations Python release. " +"After the core development team left CNRI in May 2000, CNRI requested that a" +" 1.6 release be created, containing all the work on Python that had been " +"performed at CNRI. Python 1.6 therefore represents the state of the CVS " +"tree as of May 2000, with the most significant new feature being Unicode " +"support. Development continued after May, of course, so the 1.6 tree " +"received a few fixes to ensure that it's forward-compatible with Python 2.0." +" 1.6 is therefore part of Python's evolution, and not a side branch." +msgstr "" +"Python 1.6 可以被视为继续履行合同义务的 Python 发布版。 在核心开发团队于 2000 年 5 月离开 CNRI 之后,CNRI " +"要求创建一个 1.6 发布版,其中包含 CNRI 在 Python 项目上已完成的所有工作。 因此 Python 1.6 代表了截至 2000 年 5 " +"月的 CVS 树的状态,其中最重要的新特性是 Unicode 支持。 当然,5 月之后开发工作仍在继续,因此 1.6 树接受了一些修正以确保它对 " +"Python 2.0 向上兼容。 所以 1.6 仍是 Python 演化过程的组成部分,而不是一个旁支。" + +#: ../../whatsnew/2.0.rst:44 +msgid "" +"So, should you take much interest in Python 1.6? Probably not. The " +"1.6final and 2.0beta1 releases were made on the same day (September 5, " +"2000), the plan being to finalize Python 2.0 within a month or so. If you " +"have applications to maintain, there seems little point in breaking things " +"by moving to 1.6, fixing them, and then having another round of breakage " +"within a month by moving to 2.0; you're better off just going straight to " +"2.0. Most of the really interesting features described in this document are" +" only in 2.0, because a lot of work was done between May and September." +msgstr "" +"那么,你应该对 Python 1.6 保持更多关注吗?也许不必。 1.6final 和 2.0beta1 是在同一天(2000 年 9 月 5 " +"日)发布的,计划在一个月左右的时间内完成 Python 2.0 正式版。 如果你有应用程序需要维护,那么迁移到 1.6 " +"破坏兼容性,修复它们,然后在一个月内又迁移到 2.0 再进行新一轮的兼容性修复的做法似乎没有什么意义;你最好直接迁移到 2.0。 " +"本文档中介绍的大多数真正值得关注的特性都只出现在 2.0 中,因为很多工作都是在 5 月到 9 月之间完成的。" + +#: ../../whatsnew/2.0.rst:57 +msgid "New Development Process" +msgstr "新开发流程" + +#: ../../whatsnew/2.0.rst:59 +msgid "" +"The most important change in Python 2.0 may not be to the code at all, but " +"to how Python is developed: in May 2000 the Python developers began using " +"the tools made available by SourceForge for storing source code, tracking " +"bug reports, and managing the queue of patch submissions. To report bugs or" +" submit patches for Python 2.0, use the bug tracking and patch manager tools" +" available from Python's project page, located at " +"https://sourceforge.net/projects/python/." +msgstr "" +"Python 2.0 中最重要的变化可能根本不是代码,而是 Python 的开发方式:在 2000 年 5 月,Python 开发者开始使用 " +"SourceForge 提供的工具来存储源代码、跟踪错误报告以及管理补丁提交队列。 要报告 Python 2.0 的错误或提交补丁,请使用位于 " +"https://sourceforge.net/projects/python/ 的 Python项目页上的错误跟踪和补丁管理器工具。" + +#: ../../whatsnew/2.0.rst:66 +msgid "" +"The most important of the services now hosted at SourceForge is the Python " +"CVS tree, the version-controlled repository containing the source code for " +"Python. Previously, there were roughly 7 or so people who had write access " +"to the CVS tree, and all patches had to be inspected and checked in by one " +"of the people on this short list. Obviously, this wasn't very scalable. By " +"moving the CVS tree to SourceForge, it became possible to grant write access" +" to more people; as of September 2000 there were 27 people able to check in " +"changes, a fourfold increase. This makes possible large-scale changes that " +"wouldn't be attempted if they'd have to be filtered through the small group " +"of core developers. For example, one day Peter Schneider-Kamp took it into " +"his head to drop K&R C compatibility and convert the C source for Python to " +"ANSI C. After getting approval on the python-dev mailing list, he launched " +"into a flurry of checkins that lasted about a week, other developers joined " +"in to help, and the job was done. If there were only 5 people with write " +"access, probably that task would have been viewed as \"nice, but not worth " +"the time and effort needed\" and it would never have gotten done." +msgstr "" +"现在托管在SourceForge的最重要的服务是Python " +"CVS树,这是一个包含Python源代码的版本控制库。以前,大约有7个左右的人可以写入CVS树,所有的补丁都必须由这个短名单上的一个人检查和签到。很明显,这并不是非常可扩展的。通过将CVS树转移到SourceForge,有可能向更多的人授予写访问权;截至2000年9月,有27人能够检查变化,增加了4倍。这使得大规模的改变成为可能,如果它们必须通过一小群核心开发者来过滤,就不会被尝试。例如,有一天Peter" +" Schneider-Kamp想到了放弃K&R C的兼容性,将Python的C源转换为ANSI C。在获得python-" +"dev邮件列表的批准后,他发起了一连串的签到,持续了大约一周,其他开发人员加入了进来帮忙,工作就完成了。如果只有5个人可以接触到写作,那么这项任务可能会被视为" +" \"不错,但不值得花费时间和精力,而且它永远不会完成。" + +#: ../../whatsnew/2.0.rst:83 +msgid "" +"The shift to using SourceForge's services has resulted in a remarkable " +"increase in the speed of development. Patches now get submitted, commented " +"on, revised by people other than the original submitter, and bounced back " +"and forth between people until the patch is deemed worth checking in. Bugs " +"are tracked in one central location and can be assigned to a specific person" +" for fixing, and we can count the number of open bugs to measure progress. " +"This didn't come without a cost: developers now have more e-mail to deal " +"with, more mailing lists to follow, and special tools had to be written for " +"the new environment. For example, SourceForge sends default patch and bug " +"notification e-mail messages that are completely unhelpful, so Ka-Ping Yee " +"wrote an HTML screen-scraper that sends more useful messages." +msgstr "" +"转向使用 SourceForge 的服务显著提高了开发速度。 " +"补丁现在由原提交者以外的人提交、评论、修改,并在不同人员之间来回传递,直到补丁被认为值得检入。 " +"程序错误在一个中心位置被跟踪,并可以分配给特定人员进行修复,我们还可以统计未解决程序错误的数量来衡量进度。 " +"这并不是没有代价的:开发人员现在需要处理更多的电子邮件,关注更多的邮件列表,并且需要为新环境编写专门的工具。 例如,SourceForge " +"发送的默认补丁和错误通知电子邮件完全无用,所以 Ka-Ping Yee 编写了一个 HTML 屏幕抓取器以便发送更有用的信息。" + +#: ../../whatsnew/2.0.rst:95 +msgid "" +"The ease of adding code caused a few initial growing pains, such as code was" +" checked in before it was ready or without getting clear agreement from the " +"developer group. The approval process that has emerged is somewhat similar " +"to that used by the Apache group. Developers can vote +1, +0, -0, or -1 on a" +" patch; +1 and -1 denote acceptance or rejection, while +0 and -0 mean the " +"developer is mostly indifferent to the change, though with a slight positive" +" or negative slant. The most significant change from the Apache model is " +"that the voting is essentially advisory, letting Guido van Rossum, who has " +"Benevolent Dictator For Life status, know what the general opinion is. He " +"can still ignore the result of a vote, and approve or reject a change even " +"if the community disagrees with him." +msgstr "" +"添加代码的便利性引发了一些初期的成长痛苦,比如代码在准备好之前或未经开发者团队明确同意就被检入。 现在形成的审批流程有点类似于 Apache " +"团队所使用的流程。 开发者可以对补丁投票:+1、+0、-0 或 -1;+1 和 -1 表示接受或拒绝,而 +0 和 -0 " +"则表示开发者对变更大多持无所谓的态度,但略有正面或负面的倾向。 与 Apache 模型最显著的变化是投票本质上是咨询性的,让拥有终身仁慈独裁者地位的 " +"Guido van Rossum 了解总体意见。 他仍然可以忽略投票结果,并批准或拒绝变更,即使社区不同意他的决定。" + +#: ../../whatsnew/2.0.rst:106 +msgid "" +"Producing an actual patch is the last step in adding a new feature, and is " +"usually easy compared to the earlier task of coming up with a good design. " +"Discussions of new features can often explode into lengthy mailing list " +"threads, making the discussion hard to follow, and no one can read every " +"posting to python-dev. Therefore, a relatively formal process has been set " +"up to write Python Enhancement Proposals (PEPs), modelled on the Internet " +"RFC process. PEPs are draft documents that describe a proposed new feature," +" and are continually revised until the community reaches a consensus, either" +" accepting or rejecting the proposal. Quoting from the introduction to " +":pep:`1`, \"PEP Purpose and Guidelines\":" +msgstr "" + +#: ../../whatsnew/2.0.rst:120 +msgid "" +"PEP stands for Python Enhancement Proposal. A PEP is a design document " +"providing information to the Python community, or describing a new feature " +"for Python. The PEP should provide a concise technical specification of the" +" feature and a rationale for the feature." +msgstr "" +"PEP 是 Python Enhancement Proposal 的缩写。 一个 PEP 就是一份设计文档,用来向 Python " +"社区提供信息,或描述一个 Python 新增特性。 PEP 应当提供对所提议特性的精确的技术规格和原理说明。" + +#: ../../whatsnew/2.0.rst:125 +msgid "" +"We intend PEPs to be the primary mechanisms for proposing new features, for " +"collecting community input on an issue, and for documenting the design " +"decisions that have gone into Python. The PEP author is responsible for " +"building consensus within the community and documenting dissenting opinions." +msgstr "" +"我们打算将 PEP 作为提出新特性建议、收集社区对特定问题意见以及为必须加入 Python 的设计决策编写文档的首选机制。 PEP " +"的作者有责任在社区内部建立共识,并应将对立的观点也记入文档。" + +#: ../../whatsnew/2.0.rst:130 +msgid "" +"Read the rest of :pep:`1` for the details of the PEP editorial process, " +"style, and format. PEPs are kept in the Python CVS tree on SourceForge, " +"though they're not part of the Python 2.0 distribution, and are also " +"available in HTML form from https://www.python.org/dev/peps/. As of " +"September 2000, there are 25 PEPS, ranging from :pep:`201`, \"Lockstep " +"Iteration\", to PEP 225, \"Elementwise/Objectwise Operators\"." +msgstr "" + +#: ../../whatsnew/2.0.rst:141 +msgid "Unicode" +msgstr "Unicode" + +#: ../../whatsnew/2.0.rst:143 +msgid "" +"The largest new feature in Python 2.0 is a new fundamental data type: " +"Unicode strings. Unicode uses 16-bit numbers to represent characters " +"instead of the 8-bit number used by ASCII, meaning that 65,536 distinct " +"characters can be supported." +msgstr "" +"Python 2.0 中最大的新特性是引入了一种新的基本数据类型:Unicode 字符串。 Unicode 使用 16 位二进制数表示字符,而不是 " +"ASCII 所使用的 8 位,这意味着可以支持 65,536 个不同的字符。" + +#: ../../whatsnew/2.0.rst:148 +msgid "" +"The final interface for Unicode support was arrived at through countless " +"often-stormy discussions on the python-dev mailing list, and mostly " +"implemented by Marc-André Lemburg, based on a Unicode string type " +"implementation by Fredrik Lundh. A detailed explanation of the interface " +"was written up as :pep:`100`, \"Python Unicode Integration\". This article " +"will simply cover the most significant points about the Unicode interfaces." +msgstr "" +"Unicode 支持的最终接口是通过在 python-dev 邮件列表上无数次激烈的讨论达成的,主要由 Marc-André Lemburg 基于 " +"Fredrik Lundh 的 Unicode 字符串类型实现来完成。 详细的接口说明被写成了 :pep:`100` \"Python Unicode " +"Integration\"。 这篇文章只简单地涵盖关于 Unicode 接口的最重要信息。" + +#: ../../whatsnew/2.0.rst:155 +msgid "" +"In Python source code, Unicode strings are written as ``u\"string\"``. " +"Arbitrary Unicode characters can be written using a new escape sequence, " +"``\\uHHHH``, where *HHHH* is a 4-digit hexadecimal number from 0000 to FFFF." +" The existing ``\\xHHHH`` escape sequence can also be used, and octal " +"escapes can be used for characters up to U+01FF, which is represented by " +"``\\777``." +msgstr "" + +#: ../../whatsnew/2.0.rst:161 +msgid "" +"Unicode strings, just like regular strings, are an immutable sequence type. " +"They can be indexed and sliced, but not modified in place. Unicode strings " +"have an ``encode( [encoding] )`` method that returns an 8-bit string in the " +"desired encoding. Encodings are named by strings, such as ``'ascii'``, " +"``'utf-8'``, ``'iso-8859-1'``, or whatever. A codec API is defined for " +"implementing and registering new encodings that are then available " +"throughout a Python program. If an encoding isn't specified, the default " +"encoding is usually 7-bit ASCII, though it can be changed for your Python " +"installation by calling the ``sys.setdefaultencoding(encoding)`` function in" +" a customized version of :file:`site.py`." +msgstr "" +"Unicode 字符串和常规字符串一样,是一种不可变的序列类型。 它们可以被索引和切片,但不能原地修改。 Unicode 字符串有一个 " +"``encode( [encoding] )`` 方法,该方法返回一个以所需编码格式表示的 8 位字符串。 编码格式通过字符串命名,如 " +"``'ascii'``、``'utf-8'``、``'iso-8859-1'`` 等等。 为实现和注册新的编码格式定义了一个编解码器 " +"API,这些编码格式随后可在整个 Python 程序中使用。 如果未指定编码格式,默认编码格式通常是 7 位 ASCII,不过这可以通过在自定义版本的 " +":file:`site.py` 模块中调用 ``sys.setdefaultencoding(encoding)`` 函数来更改。" + +#: ../../whatsnew/2.0.rst:172 +msgid "" +"Combining 8-bit and Unicode strings always coerces to Unicode, using the " +"default ASCII encoding; the result of ``'a' + u'bc'`` is ``u'abc'``." +msgstr "" +"将 8 比特位和 Unicode 的字符串结合使用时将总是会使用默认 ASCII 编码格式强制转换到 Unicode;``'a' + u'bc'`` " +"的结果将为 ``u'abc'``。" + +#: ../../whatsnew/2.0.rst:175 +msgid "" +"New built-in functions have been added, and existing built-ins modified to " +"support Unicode:" +msgstr "新增了一批内置函数,现有的内置函数也被修改为支持 Unicode:" + +#: ../../whatsnew/2.0.rst:178 +msgid "" +"``unichr(ch)`` returns a Unicode string 1 character long, containing the " +"character *ch*." +msgstr "``unichr(ch)`` 将返回长度为 1 个字符的 Unicode 字符串,其中包含字符 *ch*。" + +#: ../../whatsnew/2.0.rst:181 +msgid "" +"``ord(u)``, where *u* is a 1-character regular or Unicode string, returns " +"the number of the character as an integer." +msgstr "``ord(u)``,其中 *u* 是长度为 1 个字符的常规或 Unicode 字符串,将以整数形式返回该字符的码位值。" + +#: ../../whatsnew/2.0.rst:184 +msgid "" +"``unicode(string [, encoding] [, errors] )`` creates a Unicode string from " +"an 8-bit string. ``encoding`` is a string naming the encoding to use. The " +"``errors`` parameter specifies the treatment of characters that are invalid " +"for the current encoding; passing ``'strict'`` as the value causes an " +"exception to be raised on any encoding error, while ``'ignore'`` causes " +"errors to be silently ignored and ``'replace'`` uses U+FFFD, the official " +"replacement character, in case of any problems." +msgstr "" +"函数 ``unicode(string [, encoding] [, errors] )`` 从 8 位字符串创建一个 Unicode 字符串。 " +"``encoding`` 是一个指定使用编码格式的字符串。``errors`` 参数指定如何处理当前编码格式中无效的字符;传入 ``'strict'``" +" 作为参数值会在有任何编码错误时引发异常,而 ``'ignore'`` 会静默忽略错误,``'replace'`` 则在出现问题时使用 U+FFFD " +"即官方的替换字符。" + +#: ../../whatsnew/2.0.rst:192 +msgid "" +"The ``exec`` statement, and various built-ins such as ``eval()``, " +"``getattr()``, and ``setattr()`` will also accept Unicode strings as well as" +" regular strings. (It's possible that the process of fixing this missed " +"some built-ins; if you find a built-in function that accepts strings but " +"doesn't accept Unicode strings at all, please report it as a bug.)" +msgstr "" +"``exec`` 语句,以及各种内置函数如 ``eval()``,``getattr()`` 和 ``setattr()`` 也会接受 Unicode " +"字符串和普通字符串。 (修复过程中可能会遗漏一些内置函数;如果你发现一个接受字符串但完全不接受 Unicode 字符串的内置函数,请报告此错误。)" + +#: ../../whatsnew/2.0.rst:198 +msgid "" +"A new module, :mod:`unicodedata`, provides an interface to Unicode character" +" properties. For example, ``unicodedata.category(u'A')`` returns the " +"2-character string 'Lu', the 'L' denoting it's a letter, and 'u' meaning " +"that it's uppercase. ``unicodedata.bidirectional(u'\\u0660')`` returns 'AN'," +" meaning that U+0660 is an Arabic number." +msgstr "" +"一个新的模块 :mod:`unicodedata` 提供了对 Unicode 字符属性的接口。 " +"例如,``unicodedata.category(u'A')`` 返回 2 个字符的字符串 'Lu',其中 'L' 表示这是一个字母,'u' " +"表示这是一个大写字母。 ``unicodedata.bidirectional(u'\\u0660')`` 返回 'AN',表示 U+0660 " +"是一个阿拉伯数字。" + +#: ../../whatsnew/2.0.rst:204 +msgid "" +"The :mod:`codecs` module contains functions to look up existing encodings " +"and register new ones. Unless you want to implement a new encoding, you'll " +"most often use the ``codecs.lookup(encoding)`` function, which returns a " +"4-element tuple: ``(encode_func, decode_func, stream_reader, " +"stream_writer)``." +msgstr "" +":mod:`codecs` 模块包含查找现有编码格式和注册新编码格式的函数。 除非你想实现一个新的编码格式,否则你最常使用的是 " +"``codecs.lookup(encoding)`` 函数,它返回一个 4 元素的元组: ``(encode_func, decode_func, " +"stream_reader, stream_writer)``。" + +#: ../../whatsnew/2.0.rst:209 +msgid "" +"*encode_func* is a function that takes a Unicode string, and returns a " +"2-tuple ``(string, length)``. *string* is an 8-bit string containing a " +"portion (perhaps all) of the Unicode string converted into the given " +"encoding, and *length* tells you how much of the Unicode string was " +"converted." +msgstr "" +"*encode_func* 是一个接受 Unicode 字符串的函数,并返回一个 2 元组 ``(string, length)``。 *string*" +" 是一个包含部分(可能是全部) Unicode 字符串转换为指定编码的 8 位字符串,*length* 告诉你转换了多少 Unicode 字符串。" + +#: ../../whatsnew/2.0.rst:214 +msgid "" +"*decode_func* is the opposite of *encode_func*, taking an 8-bit string and " +"returning a 2-tuple ``(ustring, length)``, consisting of the resulting " +"Unicode string *ustring* and the integer *length* telling how much of the " +"8-bit string was consumed." +msgstr "" +"*decode_func* 与 *encode_func* 相反,它接受一个 8 位字符串并返回一个 2 元组 ``(ustring, " +"length)``,其中 *ustring* 是转换得到的 Unicode 字符串,*length* 是一个整数,表示消耗了多少 8 位字符串。" + +#: ../../whatsnew/2.0.rst:219 +msgid "" +"*stream_reader* is a class that supports decoding input from a stream. " +"*stream_reader(file_obj)* returns an object that supports the :meth:`read`, " +":meth:`readline`, and :meth:`readlines` methods. These methods will all " +"translate from the given encoding and return Unicode strings." +msgstr "" + +#: ../../whatsnew/2.0.rst:224 +msgid "" +"*stream_writer*, similarly, is a class that supports encoding output to a " +"stream. *stream_writer(file_obj)* returns an object that supports the " +":meth:`write` and :meth:`writelines` methods. These methods expect Unicode " +"strings, translating them to the given encoding on output." +msgstr "" + +#: ../../whatsnew/2.0.rst:229 +msgid "" +"For example, the following code writes a Unicode string into a file, " +"encoding it as UTF-8::" +msgstr "例如,以下的代码将 Unicode 字符串写入一个 UTF-8 编码的文件::" + +#: ../../whatsnew/2.0.rst:243 +msgid "The following code would then read UTF-8 input from the file::" +msgstr "以下的代码则可以从文件中读取 UTF-8 输入::" + +#: ../../whatsnew/2.0.rst:249 +msgid "" +"Unicode-aware regular expressions are available through the :mod:`re` " +"module, which has a new underlying implementation called SRE written by " +"Fredrik Lundh of Secret Labs AB." +msgstr "" +"支持 Unicode 的正则表达式可以通过 :mod:`re` 模块使用,该模块有一个新的底层实现称为 SRE,由 Secret Labs AB 的 " +"Fredrik Lundh 编写。" + +#: ../../whatsnew/2.0.rst:253 +msgid "" +"A ``-U`` command line option was added which causes the Python compiler to " +"interpret all string literals as Unicode string literals. This is intended " +"to be used in testing and future-proofing your Python code, since some " +"future version of Python may drop support for 8-bit strings and provide only" +" Unicode strings." +msgstr "" +"添加了一个 ``-U`` 命令行选项,使 Python 编译器将所有字符串字面量解释为 Unicode 字符串字面量。 这用于测试和为你的 Python" +" 代码提供未来保障,因为未来某个版本的 Python 可能会取消对 8 位字符串的支持,只提供 Unicode 字符串。" + +#: ../../whatsnew/2.0.rst:262 +msgid "List Comprehensions" +msgstr "列表推导式" + +#: ../../whatsnew/2.0.rst:264 +msgid "" +"Lists are a workhorse data type in Python, and many programs manipulate a " +"list at some point. Two common operations on lists are to loop over them, " +"and either pick out the elements that meet a certain criterion, or apply " +"some function to each element. For example, given a list of strings, you " +"might want to pull out all the strings containing a given substring, or " +"strip off trailing whitespace from each line." +msgstr "" +"列表是 Python 中的一种主力数据类型,许多程序在某个时候都会处理列表。 " +"对列表的两种常见操作是遍历它们,并筛选出符合某个条件的元素,或对每个元素应用某个函数。 " +"例如,给定一个字符串列表,你可能想要提取出所有包含特定子字符串的字符串,或去掉每行的尾随空白。" + +#: ../../whatsnew/2.0.rst:271 +msgid "" +"The existing :func:`map` and :func:`filter` functions can be used for this " +"purpose, but they require a function as one of their arguments. This is " +"fine if there's an existing built-in function that can be passed directly, " +"but if there isn't, you have to create a little function to do the required " +"work, and Python's scoping rules make the result ugly if the little function" +" needs additional information. Take the first example in the previous " +"paragraph, finding all the strings in the list containing a given substring." +" You could write the following to do it::" +msgstr "" +"现有的 :func:`map` 和 :func:`filter` 函数可以用于此目的,但它们需要一个函数作为参数之一。 " +"如果有一个现有的内置函数可以直接传递,这是很好的,但如果没有,你必须创建一个小函数来完成所需的工作。 而 Python " +"的作用域规则会使结果变得丑陋,特别是如果这个小函数需要额外的信息。 以上一段中的第一个例子为例,找到列表中所有包含给定子字符串的字符串。 " +"你可以写如下代码来实现::" + +#: ../../whatsnew/2.0.rst:286 +msgid "" +"Because of Python's scoping rules, a default argument is used so that the " +"anonymous function created by the :keyword:`lambda` expression knows what " +"substring is being searched for. List comprehensions make this cleaner::" +msgstr "" +"由于 Python 的作用域规则,将会使用默认参数以使由 :keyword:`lambda` 表达式创建的匿名函数知道正在搜索哪个子字符串。 " +"列表推导能使这个过程更简洁::" + +#: ../../whatsnew/2.0.rst:292 +msgid "List comprehensions have the form::" +msgstr "列表推导式的形式如下::" + +#: ../../whatsnew/2.0.rst:299 +msgid "" +"The :keyword:`!for`...\\ :keyword:`!in` clauses contain the sequences to be " +"iterated over. The sequences do not have to be the same length, because " +"they are *not* iterated over in parallel, but from left to right; this is " +"explained more clearly in the following paragraphs. The elements of the " +"generated list will be the successive values of *expression*. The final " +":keyword:`!if` clause is optional; if present, *expression* is only " +"evaluated and added to the result if *condition* is true." +msgstr "" +":keyword:`!for`...:keyword:`!in` 子句包含要迭代的序列。 这些序列不必具有相同的长度,因为它们 *不是* " +"并行迭代的,而是从左到右依次迭代;这一点将在以下段落中更清楚地解释。 生成列表的元素将是 *表达式* 的连续值。 最后的 :keyword:`!if` " +"子句是可选的;如果存在,只有当 *condition* 为真时,*表达式* 才会被求值并添加到结果中。" + +#: ../../whatsnew/2.0.rst:307 +msgid "" +"To make the semantics very clear, a list comprehension is equivalent to the " +"following Python code::" +msgstr "为了使语义更为清晰,列表推导相当于以下 Python 代码::" + +#: ../../whatsnew/2.0.rst:319 +msgid "" +"This means that when there are multiple :keyword:`!for`...\\ :keyword:`!in` " +"clauses, the resulting list will be equal to the product of the lengths of " +"all the sequences. If you have two lists of length 3, the output list is 9 " +"elements long::" +msgstr "" +"这意味着当有多个 :keyword:`!for`...:keyword:`!in` 子句时,生成的列表将等于所有序列长的的乘积。 如果你有两个长度为 3" +" 的列表,输出列表将有 9 个元素::" + +#: ../../whatsnew/2.0.rst:330 +msgid "" +"To avoid introducing an ambiguity into Python's grammar, if *expression* is " +"creating a tuple, it must be surrounded with parentheses. The first list " +"comprehension below is a syntax error, while the second one is correct::" +msgstr "" +"为了避免在 Python 的语法中引入歧义,如果 *表达式* 创建的是一个元组,它必须用括号括起来。 " +"下面的第一个列表推导式有语法错误,而第二个则是正确的::" + +#: ../../whatsnew/2.0.rst:339 +msgid "" +"The idea of list comprehensions originally comes from the functional " +"programming language Haskell (https://www.haskell.org). Greg Ewing argued " +"most effectively for adding them to Python and wrote the initial list " +"comprehension patch, which was then discussed for a seemingly endless time " +"on the python-dev mailing list and kept up-to-date by Skip Montanaro." +msgstr "" +"列表推导的概念最初来自函数式编程语言 Haskell (https://www.haskell.org)。 Greg Ewing " +"最有力地提出了将其添加到 Python 中的建议,并编写了最初的列表推导式补丁,然后在 python-dev 邮件列表上进行了看似无休止的讨论,并由 " +"Skip Montanaro 保持更新。" + +#: ../../whatsnew/2.0.rst:349 +msgid "Augmented Assignment" +msgstr "增强赋值" + +#: ../../whatsnew/2.0.rst:351 +msgid "" +"Augmented assignment operators, another long-requested feature, have been " +"added to Python 2.0. Augmented assignment operators include ``+=``, ``-=``," +" ``*=``, and so forth. For example, the statement ``a += 2`` increments the" +" value of the variable ``a`` by 2, equivalent to the slightly lengthier ``a" +" = a + 2``." +msgstr "" +"增强赋值运算符,另一个长期以来要求添加的功能,已经被加入到 Python 2.0 中。 增强赋值运算符包括 ``+=``,``-=``,``*=`` " +"等。例如,语句 ``a += 2`` 将变量 ``a`` 的值增加 2,等同于稍长一些的 ``a = a + 2``。" + +#: ../../whatsnew/2.0.rst:356 +msgid "" +"The full list of supported assignment operators is ``+=``, ``-=``, ``*=``, " +"``/=``, ``%=``, ``**=``, ``&=``, ``|=``, ``^=``, ``>>=``, and ``<<=``. " +"Python classes can override the augmented assignment operators by defining " +"methods named :meth:`__iadd__`, :meth:`__isub__`, etc. For example, the " +"following :class:`Number` class stores a number and supports using += to " +"create a new instance with an incremented value." +msgstr "" + +#: ../../whatsnew/2.0.rst:377 +msgid "" +"The :meth:`__iadd__` special method is called with the value of the " +"increment, and should return a new instance with an appropriately modified " +"value; this return value is bound as the new value of the variable on the " +"left-hand side." +msgstr "" + +#: ../../whatsnew/2.0.rst:381 +msgid "" +"Augmented assignment operators were first introduced in the C programming " +"language, and most C-derived languages, such as :program:`awk`, C++, Java, " +"Perl, and PHP also support them. The augmented assignment patch was " +"implemented by Thomas Wouters." +msgstr "" +"增强赋值运算符最早在 C 编程语言中引入,大多数 C 派生语言,如 :program:`awk`,C++,Java 和 PHP 也支持它们。 " +"增强赋值补丁由 Thomas Wouters 实现。" + +#: ../../whatsnew/2.0.rst:390 +msgid "String Methods" +msgstr "字符串的方法" + +#: ../../whatsnew/2.0.rst:392 +msgid "" +"Until now string-manipulation functionality was in the :mod:`string` module," +" which was usually a front-end for the :mod:`strop` module written in C. " +"The addition of Unicode posed a difficulty for the :mod:`strop` module, " +"because the functions would all need to be rewritten in order to accept " +"either 8-bit or Unicode strings. For functions such as " +":func:`string.replace`, which takes 3 string arguments, that means eight " +"possible permutations, and correspondingly complicated code." +msgstr "" + +#: ../../whatsnew/2.0.rst:400 +msgid "" +"Instead, Python 2.0 pushes the problem onto the string type, making string " +"manipulation functionality available through methods on both 8-bit strings " +"and Unicode strings. ::" +msgstr "相反,Python 2.0 将这个问题推给了字符串类型,使字符串操作功能通过 8 位字符串和 Unicode 字符串上的方法来实现。" + +#: ../../whatsnew/2.0.rst:411 +msgid "" +"One thing that hasn't changed, a noteworthy April Fools' joke " +"notwithstanding, is that Python strings are immutable. Thus, the string " +"methods return new strings, and do not modify the string on which they " +"operate." +msgstr "" +"有一件事没有改变,即使是值得注意的愚人节玩笑,Python 字符串仍然是不可变的。 因此,字符串方法返回的是新的字符串,而不是修改他们操作的原字符串。" + +#: ../../whatsnew/2.0.rst:415 +msgid "" +"The old :mod:`string` module is still around for backwards compatibility, " +"but it mostly acts as a front-end to the new string methods." +msgstr "旧的 :mod:`string` 模块仍然存在以保持向向兼容,但它主要作为新字符串方法的前端。" + +#: ../../whatsnew/2.0.rst:418 +msgid "" +"Two methods which have no parallel in pre-2.0 versions, although they did " +"exist in JPython for quite some time, are :meth:`startswith` and " +":meth:`endswith`. ``s.startswith(t)`` is equivalent to ``s[:len(t)] == t``, " +"while ``s.endswith(t)`` is equivalent to ``s[-len(t):] == t``." +msgstr "" + +#: ../../whatsnew/2.0.rst:423 +msgid "" +"One other method which deserves special mention is :meth:`join`. The " +":meth:`join` method of a string receives one parameter, a sequence of " +"strings, and is equivalent to the :func:`string.join` function from the old " +":mod:`string` module, with the arguments reversed. In other words, " +"``s.join(seq)`` is equivalent to the old ``string.join(seq, s)``." +msgstr "" + +#: ../../whatsnew/2.0.rst:433 +msgid "Garbage Collection of Cycles" +msgstr "循环的垃圾回收" + +#: ../../whatsnew/2.0.rst:435 +msgid "" +"The C implementation of Python uses reference counting to implement garbage " +"collection. Every Python object maintains a count of the number of " +"references pointing to itself, and adjusts the count as references are " +"created or destroyed. Once the reference count reaches zero, the object is " +"no longer accessible, since you need to have a reference to an object to " +"access it, and if the count is zero, no references exist any longer." +msgstr "" +"Python 的 C 实现使用引用技术来实现垃圾回收。 每个 Python 对象维护一个指向自身的引用数量,并在引用创建或销毁时调整该计数。 " +"一旦引用计数达到零,对象就不再可访问,因为访问对象需要一个引用,然后如果计数为零,就不再存在任何引用。" + +#: ../../whatsnew/2.0.rst:442 +msgid "" +"Reference counting has some pleasant properties: it's easy to understand and" +" implement, and the resulting implementation is portable, fairly fast, and " +"reacts well with other libraries that implement their own memory handling " +"schemes. The major problem with reference counting is that it sometimes " +"doesn't realise that objects are no longer accessible, resulting in a memory" +" leak. This happens when there are cycles of references." +msgstr "" +"引用计数有一些令人愉快的特性:它易于理解和实现,结果实现是可移植的,相当快,并且与其他实现自己内存处理方案的库良好互动。引用计数的主要问题是有时它无法识别对象不再可访问,从而导致内存泄露,这发生在存在引用循环时。" + +#: ../../whatsnew/2.0.rst:449 +msgid "" +"Consider the simplest possible cycle, a class instance which has a " +"reference to itself::" +msgstr "考虑最简单的循环,一个类实例引用自身::" + +#: ../../whatsnew/2.0.rst:455 +msgid "" +"After the above two lines of code have been executed, the reference count of" +" ``instance`` is 2; one reference is from the variable named ``'instance'``," +" and the other is from the ``myself`` attribute of the instance." +msgstr "" +"在执行完上述两行代码后,``instance`` 的引用计数是 2;一个引用来自名为 ``'instance'`` 的变量,另一个引用来自该实例的 " +"``myself`` 属性。" + +#: ../../whatsnew/2.0.rst:459 +msgid "" +"If the next line of code is ``del instance``, what happens? The reference " +"count of ``instance`` is decreased by 1, so it has a reference count of 1; " +"the reference in the ``myself`` attribute still exists. Yet the instance is" +" no longer accessible through Python code, and it could be deleted. Several" +" objects can participate in a cycle if they have references to each other, " +"causing all of the objects to be leaked." +msgstr "" +"如果下一行代码是 ``del instance``,会发生什么? ``instance`` 的引用计数会减少 1,所以它的引用计数变为 " +"1;``myself`` 属性中的引用仍然存在。 然而,该实例不能再通过 Python 代码访问,并且它可以被删除。 " +"如果多个对象相互引用,它们可以参与一个循环,导致所有对象都无法被垃圾回收,从而导致内存泄漏。" + +#: ../../whatsnew/2.0.rst:466 +msgid "" +"Python 2.0 fixes this problem by periodically executing a cycle detection " +"algorithm which looks for inaccessible cycles and deletes the objects " +"involved. A new :mod:`gc` module provides functions to perform a garbage " +"collection, obtain debugging statistics, and tuning the collector's " +"parameters." +msgstr "" +"Python 2.0 通过周期性的执行一个循环检测算法来解决这个问题,该算法查找不可访问的循环并删除涉及的对象。 一个新的 :mod:`gc` " +"模块提供了执行垃圾回收、获取调试统计信息和调整回收器参数的功能。" + +#: ../../whatsnew/2.0.rst:471 +msgid "" +"Running the cycle detection algorithm takes some time, and therefore will " +"result in some additional overhead. It is hoped that after we've gotten " +"experience with the cycle collection from using 2.0, Python 2.1 will be able" +" to minimize the overhead with careful tuning. It's not yet obvious how " +"much performance is lost, because benchmarking this is tricky and depends " +"crucially on how often the program creates and destroys objects. The " +"detection of cycles can be disabled when Python is compiled, if you can't " +"afford even a tiny speed penalty or suspect that the cycle collection is " +"buggy, by specifying the :option:`!--without-cycle-gc` switch when running " +"the :program:`configure` script." +msgstr "" +"运行循环检测算法需要一些时间,因此会带来一些额外的开销,希望在使用 2.0 版本的循环收集经验之后,Python 2.1 " +"可以通过精细调整来尽量减少开销。 目前还不清楚性能损失有多大,因为对此进行精准测试很棘手,而且关键在于程序创建和销毁对象的频率。 " +"如果你不能接受哪怕是微小的速度损失,或者怀疑循环收集存在问题,可以在编译 Python 时禁用循环检测,通过在运行 " +":program:`configure` 脚本时指定 :option:`!--without-cycle-gc` 开关来实现。" + +#: ../../whatsnew/2.0.rst:482 +msgid "" +"Several people tackled this problem and contributed to a solution. An early" +" implementation of the cycle detection approach was written by Toby Kelsey." +" The current algorithm was suggested by Eric Tiedemann during a visit to " +"CNRI, and Guido van Rossum and Neil Schemenauer wrote two different " +"implementations, which were later integrated by Neil. Lots of other people " +"offered suggestions along the way; the March 2000 archives of the python-dev" +" mailing list contain most of the relevant discussion, especially in the " +"threads titled \"Reference cycle collection for Python\" and \"Finalization " +"again\"." +msgstr "" +"有几个人解决了这个问题并为解决方案做出了贡献。循环检测方法的早期实现由 Toby Kelsey 编写。 当前的算法是在 Eric Tiedemann " +"访问 CNRI 期间提出的,Guido van Rossum 和 Neil Schemenauer 分别编写了两个不同的实现,后来由 Neil " +"将它们整合。 许多其他人也在过程中提出了建议;python-dev 邮件列表 2000 年 3 月的存档包含了大部分相关讨论,尤其是在标题为 " +"“Reference cycle collection for Python” 和 “Finalization again” 的帖子中。" + +#: ../../whatsnew/2.0.rst:495 +msgid "Other Core Changes" +msgstr "其他核心变化" + +#: ../../whatsnew/2.0.rst:497 +msgid "" +"Various minor changes have been made to Python's syntax and built-in " +"functions. None of the changes are very far-reaching, but they're handy " +"conveniences." +msgstr "Python 的语法和内置函数进行了各种小改动。 虽然这些改动都不是非常深远,但它们都是很方便的改进。" + +#: ../../whatsnew/2.0.rst:502 +msgid "Minor Language Changes" +msgstr "细微的语言特性修改" + +#: ../../whatsnew/2.0.rst:504 +msgid "" +"A new syntax makes it more convenient to call a given function with a tuple " +"of arguments and/or a dictionary of keyword arguments. In Python 1.5 and " +"earlier, you'd use the :func:`apply` built-in function: ``apply(f, args, " +"kw)`` calls the function :func:`f` with the argument tuple *args* and the " +"keyword arguments in the dictionary *kw*. :func:`apply` is the same in " +"2.0, but thanks to a patch from Greg Ewing, ``f(*args, **kw)`` is a shorter " +"and clearer way to achieve the same effect. This syntax is symmetrical with" +" the syntax for defining functions::" +msgstr "" + +#: ../../whatsnew/2.0.rst:518 +msgid "" +"The ``print`` statement can now have its output directed to a file-like " +"object by following the ``print`` with ``>> file``, similar to the " +"redirection operator in Unix shells. Previously you'd either have to use the" +" :meth:`write` method of the file-like object, which lacks the convenience " +"and simplicity of ``print``, or you could assign a new value to " +"``sys.stdout`` and then restore the old value. For sending output to " +"standard error, it's much easier to write this::" +msgstr "" + +#: ../../whatsnew/2.0.rst:528 +msgid "" +"Modules can now be renamed on importing them, using the syntax ``import " +"module as name`` or ``from module import name as othername``. The patch was" +" submitted by Thomas Wouters." +msgstr "" +"模块现在可以在导入时重命名,使用语法 ``import module as name`` 或 ``from module import name as " +"othername``。这个补丁是由 Thomas Wouters 提交的。" + +#: ../../whatsnew/2.0.rst:532 +msgid "" +"A new format style is available when using the ``%`` operator; '%r' will " +"insert the :func:`repr` of its argument. This was also added from symmetry " +"considerations, this time for symmetry with the existing '%s' format style, " +"which inserts the :func:`str` of its argument. For example, ``'%r %s' % " +"('abc', 'abc')`` returns a string containing ``'abc' abc``." +msgstr "" +"当使用 ``%`` 操作符时有一种新的格式样式可用;'%r' 将插入其参数的 :func:`repr` 表示。 这也是为了对称性,这次是为了与现有的 " +"%s 格式样式对称,后者插入其参数的 :func:`str` 表示。例如,``'%r %s' % ('abc', 'abc')`` 返回一个包含 " +"``'abc' abc`` 的字符串。" + +#: ../../whatsnew/2.0.rst:538 +msgid "" +"Previously there was no way to implement a class that overrode Python's " +"built-in :keyword:`in` operator and implemented a custom version. ``obj in " +"seq`` returns true if *obj* is present in the sequence *seq*; Python " +"computes this by simply trying every index of the sequence until either " +"*obj* is found or an :exc:`IndexError` is encountered. Moshe Zadka " +"contributed a patch which adds a :meth:`__contains__` magic method for " +"providing a custom implementation for :keyword:`!in`. Additionally, new " +"built-in objects written in C can define what :keyword:`!in` means for them " +"via a new slot in the sequence protocol." +msgstr "" + +#: ../../whatsnew/2.0.rst:547 +msgid "" +"Earlier versions of Python used a recursive algorithm for deleting objects. " +"Deeply nested data structures could cause the interpreter to fill up the C " +"stack and crash; Christian Tismer rewrote the deletion logic to fix this " +"problem. On a related note, comparing recursive objects recursed infinitely" +" and crashed; Jeremy Hylton rewrote the code to no longer crash, producing a" +" useful result instead. For example, after this code::" +msgstr "" +"早期版本的 Python 使用递归算法来删除对象。深度嵌套的数据结构可能导致解释器填满 C 栈并崩溃。 Christian Tismer " +"重写了删除逻辑来解决这个问题。 相关地,比较递归对象时会导致无线递归并崩溃。Jeremy Hylton 重写了代码,使其不再崩溃,而是产生有用的结果。 " +"例如,在以下代码之后::" + +#: ../../whatsnew/2.0.rst:559 +msgid "" +"The comparison ``a==b`` returns true, because the two recursive data " +"structures are isomorphic. See the thread \"trashcan and PR#7\" in the April" +" 2000 archives of the python-dev mailing list for the discussion leading up " +"to this implementation, and some useful relevant links. Note that " +"comparisons can now also raise exceptions. In earlier versions of Python, a " +"comparison operation such as ``cmp(a,b)`` would always produce an answer, " +"even if a user-defined :meth:`__cmp__` method encountered an error, since " +"the resulting exception would simply be silently swallowed." +msgstr "" + +#: ../../whatsnew/2.0.rst:571 +msgid "" +"Work has been done on porting Python to 64-bit Windows on the Itanium " +"processor, mostly by Trent Mick of ActiveState. (Confusingly, " +"``sys.platform`` is still ``'win32'`` on Win64 because it seems that for " +"ease of porting, MS Visual C++ treats code as 32 bit on Itanium.) PythonWin " +"also supports Windows CE; see the Python CE page at " +"http://pythonce.sourceforge.net/ for more information." +msgstr "" + +#: ../../whatsnew/2.0.rst:577 +msgid "" +"Another new platform is Darwin/MacOS X; initial support for it is in Python " +"2.0. Dynamic loading works, if you specify \"configure --with-dyld --with-" +"suffix=.x\". Consult the README in the Python source distribution for more " +"instructions." +msgstr "" +"另一个新的平台是 Darwin/MacOS X;Python 2.0 中提供了初步支持。如果你指定 \"configure --with-dyld " +"--with-suffix=.x\",动态加载是可行的。 有关更多说明,请参阅 Python 源代码分发中的 README 文件。" + +#: ../../whatsnew/2.0.rst:581 +msgid "" +"An attempt has been made to alleviate one of Python's warts, the often-" +"confusing :exc:`NameError` exception when code refers to a local variable " +"before the variable has been assigned a value. For example, the following " +"code raises an exception on the ``print`` statement in both 1.5.2 and 2.0; " +"in 1.5.2 a :exc:`NameError` exception is raised, while 2.0 raises a new " +":exc:`UnboundLocalError` exception. :exc:`UnboundLocalError` is a subclass " +"of :exc:`NameError`, so any existing code that expects :exc:`NameError` to " +"be raised should still work. ::" +msgstr "" +"已经尝试解决 Python 的一个问题,即当代码在局部变量赋值之前引用该变量时,会引发经常令人困惑的 :exc:`NameError` " +"异常。例如,以下代码在 1.5.2 和 2.0 中都会在 ``print`` 语句上引发异常;在 1.5.2 中,会引发 " +":exc:`NameError` 异常,而在 2.0 中,会引发一个新的 :exc:`UnboundLocalError` 异常。 " +":exc:`UnboundLocalError` 是 :exc:`NameError` 的子类,因此任何期望引发 :exc:`NameError` " +"的现有代码应该仍然可以正常工作。" + +#: ../../whatsnew/2.0.rst:595 +msgid "" +"Two new exceptions, :exc:`TabError` and :exc:`IndentationError`, have been " +"introduced. They're both subclasses of :exc:`SyntaxError`, and are raised " +"when Python code is found to be improperly indented." +msgstr "" +"新引入了两个异常 :exc:`TabError` 和 :exc:`IndentationError`。 它们均为 :exc:`SyntaxError` " +"的子类,并会在发现 Python 代码缩进不正确时被引发。" + +#: ../../whatsnew/2.0.rst:601 +msgid "Changes to Built-in Functions" +msgstr "对于内置函数的修改" + +#: ../../whatsnew/2.0.rst:603 +msgid "" +"A new built-in, ``zip(seq1, seq2, ...)``, has been added. :func:`zip` " +"returns a list of tuples where each tuple contains the i-th element from " +"each of the argument sequences. The difference between :func:`zip` and " +"``map(None, seq1, seq2)`` is that :func:`map` pads the sequences with " +"``None`` if the sequences aren't all of the same length, while :func:`zip` " +"truncates the returned list to the length of the shortest argument sequence." +msgstr "" +"添加了一个新的内置函数 ``zip(seq1, seq2, ...)``。:func:`zip` " +"返回一个包含元组的列表,每个元组包含每个参数序列的第i个元素。:func:`zip` 和 ``map(None, seq1, seq2)`` " +"的区别在于,如果序列长度不一致,:func:`map` 会用 ``None`` 填充序列,而 :func:`zip` " +"会将返回的列表截短到最短的参数序列的长度。" + +#: ../../whatsnew/2.0.rst:610 +msgid "" +"The :func:`int` and :func:`long` functions now accept an optional \"base\" " +"parameter when the first argument is a string. ``int('123', 10)`` returns " +"123, while ``int('123', 16)`` returns 291. ``int(123, 16)`` raises a " +":exc:`TypeError` exception with the message \"can't convert non-string with " +"explicit base\"." +msgstr "" + +#: ../../whatsnew/2.0.rst:616 +msgid "" +"A new variable holding more detailed version information has been added to " +"the :mod:`sys` module. ``sys.version_info`` is a tuple ``(major, minor, " +"micro, level, serial)`` For example, in a hypothetical 2.0.1beta1, " +"``sys.version_info`` would be ``(2, 0, 1, 'beta', 1)``. *level* is a string " +"such as ``\"alpha\"``, ``\"beta\"``, or ``\"final\"`` for a final release." +msgstr "" +"在 :mod:`sys` 模块中添加了一个新变量,用于保存更详细的版本信息。 ``sys.version_info`` 是一个包含五个元素的元组 " +"``(major, minor, micro, level, serial)``。 例如,在假设的 2.0.1beta1 " +"版本中,``sys.version_info`` 将是 ``(2, 0, 1, 'beta', 1)``。 *level* 是一个字符串,如 " +"``\"alpha\"``、``\"beta\"`` 或代表最终发布版本的 ``\"final\"``。" + +#: ../../whatsnew/2.0.rst:622 +msgid "" +"Dictionaries have an odd new method, ``setdefault(key, default)``, which " +"behaves similarly to the existing :meth:`get` method. However, if the key " +"is missing, :meth:`setdefault` both returns the value of *default* as " +":meth:`get` would do, and also inserts it into the dictionary as the value " +"for *key*. Thus, the following lines of code::" +msgstr "" + +#: ../../whatsnew/2.0.rst:633 +msgid "" +"can be reduced to a single ``return dict.setdefault(key, [])`` statement." +msgstr "可以简化为单个``return dict.setdefault(key, [])``语句。" + +#: ../../whatsnew/2.0.rst:635 +msgid "" +"The interpreter sets a maximum recursion depth in order to catch runaway " +"recursion before filling the C stack and causing a core dump or GPF.. " +"Previously this limit was fixed when you compiled Python, but in 2.0 the " +"maximum recursion depth can be read and modified using " +":func:`sys.getrecursionlimit` and :func:`sys.setrecursionlimit`. The default" +" value is 1000, and a rough maximum value for a given platform can be found " +"by running a new script, :file:`Misc/find_recursionlimit.py`." +msgstr "" +"解释器设置了一个最大递归深度,以便在填满 C 栈并导致核心储存或 GPF 之前捕获失控递归。以前这个限制是在编译 Python 时固定的,但在 2.0 " +"中最大递归深度可以使用 :func:`sys.getrecursionlimit` 和 :func:`sys.setrecursionlimit` " +"读取和修改。 默认值是 1000,可以通过运行一个新脚本 :file:`Misc/find_recursionlimit.py` " +"来找到给定平台的大致的最大值。" + +#: ../../whatsnew/2.0.rst:647 +msgid "Porting to 2.0" +msgstr "移植 Python 2.0" + +#: ../../whatsnew/2.0.rst:649 +msgid "" +"New Python releases try hard to be compatible with previous releases, and " +"the record has been pretty good. However, some changes are considered " +"useful enough, usually because they fix initial design decisions that turned" +" out to be actively mistaken, that breaking backward compatibility can't " +"always be avoided. This section lists the changes in Python 2.0 that may " +"cause old Python code to break." +msgstr "" +"新的 Python 版本尽力与之前的版本兼容,而且兼容性记录相当不错。 " +"然而,有些变化被认为足够有用,通常是因为他们修正了最终设计中的错误决定,因此有时无法避免打破向后兼容性。 本节列出了 Python 2.0 中可能导致旧" +" Python 代码中断的更改。" + +#: ../../whatsnew/2.0.rst:656 +msgid "" +"The change which will probably break the most code is tightening up the " +"arguments accepted by some methods. Some methods would take multiple " +"arguments and treat them as a tuple, particularly various list methods such " +"as :meth:`append` and :meth:`insert`. In earlier versions of Python, if " +"``L`` is a list, ``L.append( 1,2 )`` appends the tuple ``(1,2)`` to the " +"list. In Python 2.0 this causes a :exc:`TypeError` exception to be raised, " +"with the message: 'append requires exactly 1 argument; 2 given'. The fix is" +" to simply add an extra set of parentheses to pass both values as a tuple: " +"``L.append( (1,2) )``." +msgstr "" + +#: ../../whatsnew/2.0.rst:665 +msgid "" +"The earlier versions of these methods were more forgiving because they used " +"an old function in Python's C interface to parse their arguments; 2.0 " +"modernizes them to use :func:`PyArg_ParseTuple`, the current argument " +"parsing function, which provides more helpful error messages and treats " +"multi-argument calls as errors. If you absolutely must use 2.0 but can't " +"fix your code, you can edit :file:`Objects/listobject.c` and define the " +"preprocessor symbol ``NO_STRICT_LIST_APPEND`` to preserve the old behaviour;" +" this isn't recommended." +msgstr "" + +#: ../../whatsnew/2.0.rst:673 +msgid "" +"Some of the functions in the :mod:`socket` module are still forgiving in " +"this way. For example, :func:`socket.connect( ('hostname', 25) )` is the " +"correct form, passing a tuple representing an IP address, but " +":func:`socket.connect( 'hostname', 25 )` also works. " +":func:`socket.connect_ex` and :func:`socket.bind` are similarly easy-going." +" 2.0alpha1 tightened these functions up, but because the documentation " +"actually used the erroneous multiple argument form, many people wrote code " +"which would break with the stricter checking. GvR backed out the changes in" +" the face of public reaction, so for the :mod:`socket` module, the " +"documentation was fixed and the multiple argument form is simply marked as " +"deprecated; it *will* be tightened up again in a future Python version." +msgstr "" + +#: ../../whatsnew/2.0.rst:684 +msgid "" +"The ``\\x`` escape in string literals now takes exactly 2 hex digits. " +"Previously it would consume all the hex digits following the 'x' and take " +"the lowest 8 bits of the result, so ``\\x123456`` was equivalent to " +"``\\x56``." +msgstr "" +"字符串字面量中的 ``\\x`` 转义现在必须精确地使用2个十六进制数字。之前它会消耗 x 后面的所有十六进制数字,并取结果的最低8位,所以 " +"``\\x123456`` 等同于 ``\\x56``。" + +#: ../../whatsnew/2.0.rst:688 +msgid "" +"The :exc:`AttributeError` and :exc:`NameError` exceptions have a more " +"friendly error message, whose text will be something like ``'Spam' instance " +"has no attribute 'eggs'`` or ``name 'eggs' is not defined``. Previously the" +" error message was just the missing attribute name ``eggs``, and code " +"written to take advantage of this fact will break in 2.0." +msgstr "" +":exc:`AttributeError` 和 :exc:`NameError` 异常现在有了更友好的错误消息,其文本内容类似于 ``'Spam' " +"instance has no attribute 'eggs'`` 或 ``name 'eggs' is not defined``。 " +"之前的错误消息只是缺少的属性名称,如 ``eggs``,因此利用这一事实编写的代码在 2.0 中会中断。" + +#: ../../whatsnew/2.0.rst:694 +msgid "" +"Some work has been done to make integers and long integers a bit more " +"interchangeable. In 1.5.2, large-file support was added for Solaris, to " +"allow reading files larger than 2 GiB; this made the :meth:`tell` method of " +"file objects return a long integer instead of a regular integer. Some code " +"would subtract two file offsets and attempt to use the result to multiply a " +"sequence or slice a string, but this raised a :exc:`TypeError`. In 2.0, " +"long integers can be used to multiply or slice a sequence, and it'll behave " +"as you'd intuitively expect it to; ``3L * 'abc'`` produces 'abcabcabc', and " +"``(0,1,2,3)[2L:4L]`` produces (2,3). Long integers can also be used in " +"various contexts where previously only integers were accepted, such as in " +"the :meth:`seek` method of file objects, and in the formats supported by the" +" ``%`` operator (``%d``, ``%i``, ``%x``, etc.). For example, ``\"%d\" % " +"2L**64`` will produce the string ``18446744073709551616``." +msgstr "" + +#: ../../whatsnew/2.0.rst:708 +msgid "" +"The subtlest long integer change of all is that the :func:`str` of a long " +"integer no longer has a trailing 'L' character, though :func:`repr` still " +"includes it. The 'L' annoyed many people who wanted to print long integers " +"that looked just like regular integers, since they had to go out of their " +"way to chop off the character. This is no longer a problem in 2.0, but code" +" which does ``str(longval)[:-1]`` and assumes the 'L' is there, will now " +"lose the final digit." +msgstr "" +"最微妙的长整数变化是,长整数的 :func:`str` 表示不再有尾随的 'L' 字符,尽管 :func:`repr` " +"表示仍然包含它。许多人在打印长整数时不希望看到 'L' 字符,因为他们不得不专门去掉这个字符。在2.0中,这不再是一个问题,但那些使用 " +"``str(longval)[:-1]`` 并假设存在 'L' 的代码,现在将丢失最后一个数字。" + +#: ../../whatsnew/2.0.rst:716 +msgid "" +"Taking the :func:`repr` of a float now uses a different formatting precision" +" than :func:`str`. :func:`repr` uses ``%.17g`` format string for C's " +":func:`sprintf`, while :func:`str` uses ``%.12g`` as before. The effect is " +"that :func:`repr` may occasionally show more decimal places than " +":func:`str`, for certain numbers. For example, the number 8.1 can't be " +"represented exactly in binary, so ``repr(8.1)`` is ``'8.0999999999999996'``," +" while str(8.1) is ``'8.1'``." +msgstr "" + +#: ../../whatsnew/2.0.rst:724 +msgid "" +"The ``-X`` command-line option, which turned all standard exceptions into " +"strings instead of classes, has been removed; the standard exceptions will " +"now always be classes. The :mod:`exceptions` module containing the standard" +" exceptions was translated from Python to a built-in C module, written by " +"Barry Warsaw and Fredrik Lundh." +msgstr "" + +#: ../../whatsnew/2.0.rst:740 +msgid "Extending/Embedding Changes" +msgstr "扩展/嵌入更改" + +#: ../../whatsnew/2.0.rst:742 +msgid "" +"Some of the changes are under the covers, and will only be apparent to " +"people writing C extension modules or embedding a Python interpreter in a " +"larger application. If you aren't dealing with Python's C API, you can " +"safely skip this section." +msgstr "" +"有些更改是在底层进行的,仅对编写 C 扩展模块或在更大的应用中嵌入 Python 解释器的人有价值。 如果你不处理 Python 的 C " +"API,可以安全地跳过这一节。" + +#: ../../whatsnew/2.0.rst:747 +msgid "" +"The version number of the Python C API was incremented, so C extensions " +"compiled for 1.5.2 must be recompiled in order to work with 2.0. On " +"Windows, it's not possible for Python 2.0 to import a third party extension " +"built for Python 1.5.x due to how Windows DLLs work, so Python will raise an" +" exception and the import will fail." +msgstr "" +" Python C API 的版本号已增加,因此为 1.5.2 编译的 C 扩展必须重新编译才能与 2.0 一起工作。 在 Windows 上,由于 " +"Windows DLL 的工作方式,Python 2.0 无法导入为 Python 1.5.x 构建的第三方扩展,因此 Python " +"会引发异常并造成导入失败。" + +#: ../../whatsnew/2.0.rst:753 +msgid "" +"Users of Jim Fulton's ExtensionClass module will be pleased to find out that" +" hooks have been added so that ExtensionClasses are now supported by " +":func:`isinstance` and :func:`issubclass`. This means you no longer have to " +"remember to write code such as ``if type(obj) == myExtensionClass``, but can" +" use the more natural ``if isinstance(obj, myExtensionClass)``." +msgstr "" +"使用 Jim Fulton 的 ExtensionClass 模块的用户将很高兴地发现,已经添加了钩子以支持 " +"ExtensionClasses,因此现在支持 :func:`isinstance` 和 :func:`issubclass`。 " +"这意味着你不再需要记住编写类似 ``if type(obj) == myExtensionClass`` 这样的代码,而可以使用更自然的 ``if " +"isinstance(obj, myExtensionClass)``。" + +#: ../../whatsnew/2.0.rst:759 +msgid "" +"The :file:`Python/importdl.c` file, which was a mass of #ifdefs to support " +"dynamic loading on many different platforms, was cleaned up and reorganised " +"by Greg Stein. :file:`importdl.c` is now quite small, and platform-specific" +" code has been moved into a bunch of :file:`Python/dynload_\\*.c` files. " +"Another cleanup: there were also a number of :file:`my\\*.h` files in the " +"Include/ directory that held various portability hacks; they've been merged " +"into a single file, :file:`Include/pyport.h`." +msgstr "" +":file:`Python/importdl.c` 文件,它充满了用于支持在许多不同平台上动态加载的 #ifdef,已被 Greg Stein " +"清理和重组。现在 :file:`importdl.c` 非常小,平台特定的代码已被移入一组特定的 " +":file:`Python/dynload_\\*.c` 文件中。 另一个清理工作是:Include/ 目录中有许多包含各种可移植性修改的 " +":file:`my\\*.h` 文件;它们已被合并到一个文件中,即 :file:`Include/pyport.h`。" + +#: ../../whatsnew/2.0.rst:767 +msgid "" +"Vladimir Marangozov's long-awaited malloc restructuring was completed, to " +"make it easy to have the Python interpreter use a custom allocator instead " +"of C's standard :func:`malloc`. For documentation, read the comments in " +":file:`Include/pymem.h` and :file:`Include/objimpl.h`. For the lengthy " +"discussions during which the interface was hammered out, see the Web " +"archives of the 'patches' and 'python-dev' lists at python.org." +msgstr "" + +#: ../../whatsnew/2.0.rst:774 +msgid "" +"Recent versions of the GUSI development environment for MacOS support POSIX " +"threads. Therefore, Python's POSIX threading support now works on the " +"Macintosh. Threading support using the user-space GNU ``pth`` library was " +"also contributed." +msgstr "" +"最新版本的 MacOS GUSI 开发环境支持 POSIX 线程。 因此,现在 Python 的 POSIX 线程支持在 Macintosh " +"上也可以使用。 还贡献了使用用户空间 GNU ``pth`` 库的线程支持。" + +#: ../../whatsnew/2.0.rst:779 +msgid "" +"Threading support on Windows was enhanced, too. Windows supports thread " +"locks that use kernel objects only in case of contention; in the common case" +" when there's no contention, they use simpler functions which are an order " +"of magnitude faster. A threaded version of Python 1.5.2 on NT is twice as " +"slow as an unthreaded version; with the 2.0 changes, the difference is only " +"10%. These improvements were contributed by Yakov Markovitch." +msgstr "" +"Windows 上的线程支持也得到了增强。 Windows " +"支持的线程锁在发生争用时才使用内核对象;在常见的没有争用的情况下,他们使用简单得多的函数,这些函数快一个数量级。Python 1.5.2 在 NT " +"上的线程版本比无线程版本慢两倍;有了 2.0 的改进,差异仅为 10%。 这些改进由 Yakov Markovitch 提供。" + +#: ../../whatsnew/2.0.rst:786 +msgid "" +"Python 2.0's source now uses only ANSI C prototypes, so compiling Python now" +" requires an ANSI C compiler, and can no longer be done using a compiler " +"that only supports K&R C." +msgstr "" +"Python 2.0 的源代码目前只用 ANSI C 原型,所以现在编译 Python 需要一个 ANSI C 的编译器,而不能通过仅使用支持 K&R " +"C 的编译器完成。" + +#: ../../whatsnew/2.0.rst:790 +msgid "" +"Previously the Python virtual machine used 16-bit numbers in its bytecode, " +"limiting the size of source files. In particular, this affected the maximum" +" size of literal lists and dictionaries in Python source; occasionally " +"people who are generating Python code would run into this limit. A patch by" +" Charles G. Waldman raises the limit from ``2**16`` to ``2**32``." +msgstr "" +"之前,Python 虚拟机在其字节码中使用 16 位数字,限制了源文件的大小。 特别是,这影响了 Python " +"源代码中字面量列表和字典的最大大小;偶尔会有人在生成 Python 代码时遇到这个限制。 Charles G. Waldman 的补丁将这个限制从 " +"``2**16`` 提高到 ``2**32``。" + +#: ../../whatsnew/2.0.rst:796 +msgid "" +"Three new convenience functions intended for adding constants to a module's " +"dictionary at module initialization time were added: " +":func:`PyModule_AddObject`, :func:`PyModule_AddIntConstant`, and " +":func:`PyModule_AddStringConstant`. Each of these functions takes a module " +"object, a null-terminated C string containing the name to be added, and a " +"third argument for the value to be assigned to the name. This third " +"argument is, respectively, a Python object, a C long, or a C string." +msgstr "" + +#: ../../whatsnew/2.0.rst:804 +msgid "" +"A wrapper API was added for Unix-style signal handlers. :func:`PyOS_getsig` " +"gets a signal handler and :func:`PyOS_setsig` will set a new handler." +msgstr "" + +#: ../../whatsnew/2.0.rst:811 +msgid "Distutils: Making Modules Easy to Install" +msgstr "Distutils:使模块易于安装" + +#: ../../whatsnew/2.0.rst:813 +msgid "" +"Before Python 2.0, installing modules was a tedious affair -- there was no " +"way to figure out automatically where Python is installed, or what compiler " +"options to use for extension modules. Software authors had to go through an" +" arduous ritual of editing Makefiles and configuration files, which only " +"really work on Unix and leave Windows and MacOS unsupported. Python users " +"faced wildly differing installation instructions which varied between " +"different extension packages, which made administering a Python installation" +" something of a chore." +msgstr "" +"在 Python 2.0 之前,安装模块是一件繁琐的事情 —— 没有办法自动确定 Python 的安装位置,或者用于扩展模块的编译器选项。 " +"软件作者不得不经历一套繁琐的程序来编辑 Makefile 和配置文件,这些只在 Unix 上真正有效,而 Windows 和 Mac OS 不受支持。 " +"Python 用户面对不同扩展包之间大相径庭的安装说明,这使得管理 Python 成了一件麻烦事。" + +#: ../../whatsnew/2.0.rst:821 +msgid "" +"The SIG for distribution utilities, shepherded by Greg Ward, has created the" +" Distutils, a system to make package installation much easier. They form " +"the :mod:`distutils` package, a new part of Python's standard library. In " +"the best case, installing a Python module from source will require the same " +"steps: first you simply mean unpack the tarball or zip archive, and the run " +"\"``python setup.py install``\". The platform will be automatically " +"detected, the compiler will be recognized, C extension modules will be " +"compiled, and the distribution installed into the proper directory. " +"Optional command-line arguments provide more control over the installation " +"process, the distutils package offers many places to override defaults -- " +"separating the build from the install, building or installing in non-default" +" directories, and more." +msgstr "" + +#: ../../whatsnew/2.0.rst:833 +msgid "" +"In order to use the Distutils, you need to write a :file:`setup.py` script." +" For the simple case, when the software contains only .py files, a minimal " +":file:`setup.py` can be just a few lines long::" +msgstr "" +"为了使用 Distutils,你需要编写一个 :file:`setup.py` 脚本。 在简单场景下,当软件仅包含 .py 文件时,最小化的 " +":file:`setup.py` 可以只有几行代码::" + +#: ../../whatsnew/2.0.rst:841 +msgid "" +"The :file:`setup.py` file isn't much more complicated if the software " +"consists of a few packages::" +msgstr "如果软件是由几个包组成的 :file:`setup.py` 文件也不会太过复杂::" + +#: ../../whatsnew/2.0.rst:848 +msgid "" +"A C extension can be the most complicated case; here's an example taken from" +" the PyXML package::" +msgstr "最复杂的情况可能是 C 扩展;下面是一个来自 PyXML 包的示例::" + +#: ../../whatsnew/2.0.rst:864 +msgid "" +"The Distutils can also take care of creating source and binary " +"distributions. The \"sdist\" command, run by \"``python setup.py sdist``', " +"builds a source distribution such as :file:`foo-1.0.tar.gz`. Adding new " +"commands isn't difficult, \"bdist_rpm\" and \"bdist_wininst\" commands have " +"already been contributed to create an RPM distribution and a Windows " +"installer for the software, respectively. Commands to create other " +"distribution formats such as Debian packages and Solaris :file:`.pkg` files " +"are in various stages of development." +msgstr "" +"Distutils 还可以负责创建源代码和二进制分发包。运行 ``python setup.py sdist`` 的 \"sdist\" " +"命令构建一个源代码分发包,如 :file:`foo-1.0.tar.gz`。添加新命令并不困难,已经有 \"bdist_rpm\" 和 " +"\"bdist_wininst\" 命令,分别用于创建软件的 RPM 分发包和 Windows 安装程序。创建其他分发格式的命令,如 Debian 包和" +" Solaris :file:`.pkg` 文件,也在开发的不同阶段。" + +#: ../../whatsnew/2.0.rst:873 +msgid "" +"All this is documented in a new manual, *Distributing Python Modules*, that " +"joins the basic set of Python documentation." +msgstr "所有这些都记录在一个新手册中,*Distributing Python Modules*,它加入了Python文档的基本集合中。" + +#: ../../whatsnew/2.0.rst:880 +msgid "XML Modules" +msgstr "XML 模块" + +#: ../../whatsnew/2.0.rst:882 +msgid "" +"Python 1.5.2 included a simple XML parser in the form of the :mod:`xmllib` " +"module, contributed by Sjoerd Mullender. Since 1.5.2's release, two " +"different interfaces for processing XML have become common: SAX2 (version 2 " +"of the Simple API for XML) provides an event-driven interface with some " +"similarities to :mod:`xmllib`, and the DOM (Document Object Model) provides " +"a tree-based interface, transforming an XML document into a tree of nodes " +"that can be traversed and modified. Python 2.0 includes a SAX2 interface " +"and a stripped-down DOM interface as part of the :mod:`xml` package. Here we" +" will give a brief overview of these new interfaces; consult the Python " +"documentation or the source code for complete details. The Python XML SIG is" +" also working on improved documentation." +msgstr "" + +#: ../../whatsnew/2.0.rst:896 +msgid "SAX2 Support" +msgstr "SAX2 支持" + +#: ../../whatsnew/2.0.rst:898 +msgid "" +"SAX defines an event-driven interface for parsing XML. To use SAX, you must" +" write a SAX handler class. Handler classes inherit from various classes " +"provided by SAX, and override various methods that will then be called by " +"the XML parser. For example, the :meth:`startElement` and " +":meth:`endElement` methods are called for every starting and end tag " +"encountered by the parser, the :meth:`characters` method is called for every" +" chunk of character data, and so forth." +msgstr "" + +#: ../../whatsnew/2.0.rst:906 +msgid "" +"The advantage of the event-driven approach is that the whole document " +"doesn't have to be resident in memory at any one time, which matters if you " +"are processing really huge documents. However, writing the SAX handler " +"class can get very complicated if you're trying to modify the document " +"structure in some elaborate way." +msgstr "" +"事件驱动方法的优点是整个文档不必同时驻留在内存中,这在处理非常大的文档时尤其重要。然而,如果你试图以某种复杂的方式修改文档结构,编写 SAX " +"处理程序类可能会变得非常复杂。" + +#: ../../whatsnew/2.0.rst:912 +msgid "" +"For example, this little example program defines a handler that prints a " +"message for every starting and ending tag, and then parses the file " +":file:`hamlet.xml` using it::" +msgstr "例如,这个小示例程序定义了一个处理器,它为每个开始和结束标签打印一条消息,然后使用它来解析文件 :file:`hamlet.xml`::" + +#: ../../whatsnew/2.0.rst:935 +msgid "" +"For more information, consult the Python documentation, or the XML HOWTO at " +"http://pyxml.sourceforge.net/topics/howto/xml-howto.html." +msgstr "" + +#: ../../whatsnew/2.0.rst:940 +msgid "DOM Support" +msgstr "DOM 支持" + +#: ../../whatsnew/2.0.rst:942 +msgid "" +"The Document Object Model is a tree-based representation for an XML " +"document. A top-level :class:`Document` instance is the root of the tree, " +"and has a single child which is the top-level :class:`Element` instance. " +"This :class:`Element` has children nodes representing character data and any" +" sub-elements, which may have further children of their own, and so forth. " +"Using the DOM you can traverse the resulting tree any way you like, access " +"element and attribute values, insert and delete nodes, and convert the tree " +"back into XML." +msgstr "" + +#: ../../whatsnew/2.0.rst:950 +msgid "" +"The DOM is useful for modifying XML documents, because you can create a DOM " +"tree, modify it by adding new nodes or rearranging subtrees, and then " +"produce a new XML document as output. You can also construct a DOM tree " +"manually and convert it to XML, which can be a more flexible way of " +"producing XML output than simply writing ````...\\ ```` to a " +"file." +msgstr "" +"DOM 在修改 XML 文档方面非常有用,因为你可以创建一个 DOM 树,通过添加新节点或重新排列子树来修改它,然后生成一个新的 XML " +"文档作为输出。你还可以手动构建一个 DOM 树并将其转换为 XML,这比简单地将````...\\````写入文件更灵活。" + +#: ../../whatsnew/2.0.rst:956 +msgid "" +"The DOM implementation included with Python lives in the " +":mod:`xml.dom.minidom` module. It's a lightweight implementation of the " +"Level 1 DOM with support for XML namespaces. The :func:`parse` and " +":func:`parseString` convenience functions are provided for generating a DOM " +"tree::" +msgstr "" + +#: ../../whatsnew/2.0.rst:964 +msgid "" +"``doc`` is a :class:`Document` instance. :class:`Document`, like all the " +"other DOM classes such as :class:`Element` and :class:`Text`, is a subclass " +"of the :class:`Node` base class. All the nodes in a DOM tree therefore " +"support certain common methods, such as :meth:`toxml` which returns a string" +" containing the XML representation of the node and its children. Each class" +" also has special methods of its own; for example, :class:`Element` and " +":class:`Document` instances have a method to find all child elements with a " +"given tag name. Continuing from the previous 2-line example::" +msgstr "" + +#: ../../whatsnew/2.0.rst:977 +msgid "For the *Hamlet* XML file, the above few lines output::" +msgstr "对于 *Hamlet* XML 文件,上面几行代码输出::" + +#: ../../whatsnew/2.0.rst:982 +msgid "" +"The root element of the document is available as ``doc.documentElement``, " +"and its children can be easily modified by deleting, adding, or removing " +"nodes::" +msgstr "" +"文件的根元素可以通过 ``doc.documentElement`` 访问,并且可以通过删除、添加或一处节点来听松修改节点来轻松修改其子元素::" + +#: ../../whatsnew/2.0.rst:997 +msgid "" +"Again, I will refer you to the Python documentation for a complete listing " +"of the different :class:`Node` classes and their various methods." +msgstr "" + +#: ../../whatsnew/2.0.rst:1002 +msgid "Relationship to PyXML" +msgstr "与 PyXML 的关系" + +#: ../../whatsnew/2.0.rst:1004 +msgid "" +"The XML Special Interest Group has been working on XML-related Python code " +"for a while. Its code distribution, called PyXML, is available from the " +"SIG's Web pages at https://www.python.org/community/sigs/current/xml-sig. " +"The PyXML distribution also used the package name ``xml``. If you've " +"written programs that used PyXML, you're probably wondering about its " +"compatibility with the 2.0 :mod:`xml` package." +msgstr "" + +#: ../../whatsnew/2.0.rst:1010 +msgid "" +"The answer is that Python 2.0's :mod:`xml` package isn't compatible with " +"PyXML, but can be made compatible by installing a recent version PyXML. " +"Many applications can get by with the XML support that is included with " +"Python 2.0, but more complicated applications will require that the full " +"PyXML package will be installed. When installed, PyXML versions 0.6.0 or " +"greater will replace the :mod:`xml` package shipped with Python, and will be" +" a strict superset of the standard package, adding a bunch of additional " +"features. Some of the additional features in PyXML include:" +msgstr "" +"答案是 Python 2.0 的 :mod:`xml` 包与 PyXML 不兼容,但可以通过安装最新版本的 PyXML 来使其兼容。 " +"许多应用程序可以依赖 Python 2.0 中包含的 XML 支持,但更复杂的应用程序需要安装完整的 PyXML 包。 安装后,版本为 0.6.0 " +"或更高的 PyXML 将替换随 Python 一起发布的 :mod:`xml` 包,并且将是标准包的严格超集,添加许多额外的功能。 PyXML " +"中的一些附加功能包括:" + +#: ../../whatsnew/2.0.rst:1019 +msgid "4DOM, a full DOM implementation from FourThought, Inc." +msgstr "4DOM,一个来自 FourThought, Inc. 的完整 DOM 实现。" + +#: ../../whatsnew/2.0.rst:1021 +msgid "The xmlproc validating parser, written by Lars Marius Garshol." +msgstr "xmlproc 验证解析器,由 Lars Marius Garshol 编写。" + +#: ../../whatsnew/2.0.rst:1023 +msgid "The :mod:`sgmlop` parser accelerator module, written by Fredrik Lundh." +msgstr ":mod:`sgmlop` 解析器加速器模块,由 Fredrik Lundh 编写。" + +#: ../../whatsnew/2.0.rst:1029 +msgid "Module changes" +msgstr "模块更改" + +#: ../../whatsnew/2.0.rst:1031 +msgid "" +"Lots of improvements and bugfixes were made to Python's extensive standard " +"library; some of the affected modules include :mod:`readline`, " +":mod:`ConfigParser`, :mod:`cgi`, :mod:`calendar`, :mod:`posix`, " +":mod:`readline`, :mod:`xmllib`, :mod:`aifc`, :mod:`chunk, wave`, " +":mod:`random`, :mod:`shelve`, and :mod:`nntplib`. Consult the CVS logs for " +"the exact patch-by-patch details." +msgstr "" + +#: ../../whatsnew/2.0.rst:1037 +msgid "" +"Brian Gallew contributed OpenSSL support for the :mod:`socket` module. " +"OpenSSL is an implementation of the Secure Socket Layer, which encrypts the " +"data being sent over a socket. When compiling Python, you can edit " +":file:`Modules/Setup` to include SSL support, which adds an additional " +"function to the :mod:`socket` module: ``socket.ssl(socket, keyfile, " +"certfile)``, which takes a socket object and returns an SSL socket. The " +":mod:`httplib` and :mod:`urllib` modules were also changed to support " +"``https://`` URLs, though no one has implemented FTP or SMTP over SSL." +msgstr "" + +#: ../../whatsnew/2.0.rst:1046 +msgid "" +"The :mod:`httplib` module has been rewritten by Greg Stein to support " +"HTTP/1.1. Backward compatibility with the 1.5 version of :mod:`httplib` is " +"provided, though using HTTP/1.1 features such as pipelining will require " +"rewriting code to use a different set of interfaces." +msgstr "" + +#: ../../whatsnew/2.0.rst:1051 +msgid "" +"The :mod:`Tkinter` module now supports Tcl/Tk version 8.1, 8.2, or 8.3, and " +"support for the older 7.x versions has been dropped. The Tkinter module now" +" supports displaying Unicode strings in Tk widgets. Also, Fredrik Lundh " +"contributed an optimization which makes operations like ``create_line`` and " +"``create_polygon`` much faster, especially when using lots of coordinates." +msgstr "" + +#: ../../whatsnew/2.0.rst:1057 +msgid "" +"The :mod:`curses` module has been greatly extended, starting from Oliver " +"Andrich's enhanced version, to provide many additional functions from " +"ncurses and SYSV curses, such as colour, alternative character set support, " +"pads, and mouse support. This means the module is no longer compatible with" +" operating systems that only have BSD curses, but there don't seem to be any" +" currently maintained OSes that fall into this category." +msgstr "" +":mod:`curses` 模块在 Oliver Andrich 增强版本的基础上得到了极大的扩展,提供了许多来自 ncurses 和 SYSV " +"curses 的附加功能,如颜色、替代字符集支持、手写板和鼠标支持等。 这意味着该模块不再兼容仅有 BSD curses " +"的操作系统,但目前似乎没有任何属于这一类别的操作系统正在维护中。" + +#: ../../whatsnew/2.0.rst:1064 +msgid "" +"As mentioned in the earlier discussion of 2.0's Unicode support, the " +"underlying implementation of the regular expressions provided by the " +":mod:`re` module has been changed. SRE, a new regular expression engine " +"written by Fredrik Lundh and partially funded by Hewlett Packard, supports " +"matching against both 8-bit strings and Unicode strings." +msgstr "" +"如前面讨论的 Python 2.0 对 Unicode 的支持所提到的,:mod:`re` 模块提供的正则表达式的底层实现已经更改。 " +"SRE,一个新的正则表达式引擎,由 Ferdrik Lundh 编写,部分由惠普资助,支持匹配 8 位字符串和 Unicode 字符串。" + +#: ../../whatsnew/2.0.rst:1074 +msgid "New modules" +msgstr "新增模块" + +#: ../../whatsnew/2.0.rst:1076 +msgid "" +"A number of new modules were added. We'll simply list them with brief " +"descriptions; consult the 2.0 documentation for the details of a particular " +"module." +msgstr "添加了许多新模块,我们将简单列出它们并附上简要概述;有关特定模块的详细信息,请查阅 2.0 文档。" + +#: ../../whatsnew/2.0.rst:1080 +msgid "" +":mod:`atexit`: For registering functions to be called before the Python " +"interpreter exits. Code that currently sets ``sys.exitfunc`` directly should" +" be changed to use the :mod:`atexit` module instead, importing " +":mod:`atexit` and calling :func:`atexit.register` with the function to be " +"called on exit. (Contributed by Skip Montanaro.)" +msgstr "" +":mod:`atexit` 模块用于注册在 Python 解释器退出之前调用的函数。当前直接设置 ``sys.exitfunc`` 的代码应改为使用 " +":mod:`atexit` 模块,导入 :mod:`atexit` 并使用 :func:`atexit.register` 调用要在退出时调用的函数。 " +"(由 Skip Montanaro 贡献。)" + +#: ../../whatsnew/2.0.rst:1086 +msgid "" +":mod:`codecs`, :mod:`encodings`, :mod:`unicodedata`: Added as part of the " +"new Unicode support." +msgstr "" + +#: ../../whatsnew/2.0.rst:1089 +msgid "" +":mod:`filecmp`: Supersedes the old :mod:`cmp`, :mod:`cmpcache` and " +":mod:`dircmp` modules, which have now become deprecated. (Contributed by " +"Gordon MacMillan and Moshe Zadka.)" +msgstr "" + +#: ../../whatsnew/2.0.rst:1093 +msgid "" +":mod:`gettext`: This module provides internationalization (I18N) and " +"localization (L10N) support for Python programs by providing an interface to" +" the GNU gettext message catalog library. (Integrated by Barry Warsaw, from " +"separate contributions by Martin von Löwis, Peter Funk, and James " +"Henstridge.)" +msgstr "" +":mod:`gettext`: 这个模块通过提供 GNU gettext 消息目录库的接口,为 Python " +"程序提供国际化(I18N)和本地化(L10N)支持。 (由 Barry Warsaw 整合,来自 Martin von Löwis, Peter " +"Funk 和 James Henstridge 的独立贡献。)" + +#: ../../whatsnew/2.0.rst:1098 +msgid "" +":mod:`linuxaudiodev`: Support for the :file:`/dev/audio` device on Linux, a " +"twin to the existing :mod:`sunaudiodev` module. (Contributed by Peter Bosch," +" with fixes by Jeremy Hylton.)" +msgstr "" + +#: ../../whatsnew/2.0.rst:1102 +msgid "" +":mod:`mmap`: An interface to memory-mapped files on both Windows and Unix. " +"A file's contents can be mapped directly into memory, at which point it " +"behaves like a mutable string, so its contents can be read and modified. " +"They can even be passed to functions that expect ordinary strings, such as " +"the :mod:`re` module. (Contributed by Sam Rushing, with some extensions by " +"A.M. Kuchling.)" +msgstr "" +":mod:`mmap`: 提供对内存映射文件的接口,支持 Windows 和 " +"Unix。文件的内容可以直接映射到内存中,此时它表现得像一个可变字符串,因此可以读取和修改其内容。它们甚至可以传递给期望普通字符串的函数,例如 " +":mod:`re` 模块。(由 Sam Rushing 贡献,并由 A.M. Kuchling 提供一些扩展。)" + +#: ../../whatsnew/2.0.rst:1108 +msgid "" +":mod:`pyexpat`: An interface to the Expat XML parser. (Contributed by Paul " +"Prescod.)" +msgstr "" + +#: ../../whatsnew/2.0.rst:1111 +msgid "" +":mod:`robotparser`: Parse a :file:`robots.txt` file, which is used for " +"writing Web spiders that politely avoid certain areas of a Web site. The " +"parser accepts the contents of a :file:`robots.txt` file, builds a set of " +"rules from it, and can then answer questions about the fetchability of a " +"given URL. (Contributed by Skip Montanaro.)" +msgstr "" + +#: ../../whatsnew/2.0.rst:1117 +msgid "" +":mod:`tabnanny`: A module/script to check Python source code for ambiguous " +"indentation. (Contributed by Tim Peters.)" +msgstr ":mod:`tabnanny`: 一个模块/脚本,用于检查 Python 源代码中不歧义的缩进。 (由 Tim Peters 贡献。)" + +#: ../../whatsnew/2.0.rst:1120 +msgid "" +":mod:`UserString`: A base class useful for deriving objects that behave like" +" strings." +msgstr "" + +#: ../../whatsnew/2.0.rst:1123 +msgid "" +":mod:`webbrowser`: A module that provides a platform independent way to " +"launch a web browser on a specific URL. For each platform, various browsers " +"are tried in a specific order. The user can alter which browser is launched " +"by setting the *BROWSER* environment variable. (Originally inspired by Eric" +" S. Raymond's patch to :mod:`urllib` which added similar functionality, but " +"the final module comes from code originally implemented by Fred Drake as " +":file:`Tools/idle/BrowserControl.py`, and adapted for the standard library " +"by Fred.)" +msgstr "" +":mod:`webbrowser` 模块提供了一种平台独立的方式来在特定 URL 上启动 web " +"浏览器。对于每个平台,模块会按特定顺序尝试各种浏览器。用户可以通过设置 *BROWSER* 环境变量来更改启动的浏览器。(最初的灵感来自 Eric S." +" Raymond 对 :mod:`urllib` 的补丁,该补丁增加了类似的功能,但最终的模块来自 Fred Drake 最初实现的代码 " +":file:`Tools/idle/BrowserControl.py`,并由 Fred 适配到标准库中。)" + +#: ../../whatsnew/2.0.rst:1132 +msgid "" +":mod:`_winreg`: An interface to the Windows registry. :mod:`_winreg` is an " +"adaptation of functions that have been part of PythonWin since 1995, but has" +" now been added to the core distribution, and enhanced to support Unicode. " +":mod:`_winreg` was written by Bill Tutt and Mark Hammond." +msgstr "" + +#: ../../whatsnew/2.0.rst:1137 +msgid "" +":mod:`zipfile`: A module for reading and writing ZIP-format archives. These" +" are archives produced by :program:`PKZIP` on DOS/Windows or :program:`zip` " +"on Unix, not to be confused with :program:`gzip`\\ -format files (which are " +"supported by the :mod:`gzip` module) (Contributed by James C. Ahlstrom.)" +msgstr "" +":mod:`zipfile` 模块:用于读取和写入 ZIP 格式的归档文件。 这些归档文件是由 DOS/Windows 上的 " +":program:`PKZIP` 或 Unix 上的 :program:`zip` 生成的,不要与 :program:`gzip` 格式文件(由 " +":mod:`gzip` 支持)混淆。 (由 James C. Ahlstrom 贡献。)" + +#: ../../whatsnew/2.0.rst:1142 +msgid "" +":mod:`imputil`: A module that provides a simpler way for writing customized " +"import hooks, in comparison to the existing :mod:`ihooks` module. " +"(Implemented by Greg Stein, with much discussion on python-dev along the " +"way.)" +msgstr "" + +#: ../../whatsnew/2.0.rst:1150 +msgid "IDLE Improvements" +msgstr "IDLE 改进" + +#: ../../whatsnew/2.0.rst:1152 +msgid "" +"IDLE is the official Python cross-platform IDE, written using Tkinter. " +"Python 2.0 includes IDLE 0.6, which adds a number of new features and " +"improvements. A partial list:" +msgstr "" +"IDLE 是官方的 Python 跨平台 IDE,使用 Tkinter 编写。 Python 2.0 包括了 IDLE " +"0.6,它增加了许多新特性和改进。 部分新内容列表:" + +#: ../../whatsnew/2.0.rst:1156 +msgid "" +"UI improvements and optimizations, especially in the area of syntax " +"highlighting and auto-indentation." +msgstr "界面改进和优化,特别是在语法高亮和自动缩进方面。" + +#: ../../whatsnew/2.0.rst:1159 +msgid "" +"The class browser now shows more information, such as the top level " +"functions in a module." +msgstr "类浏览器现在将显示更多信息,例如一个模块中最高层级的函数。" + +#: ../../whatsnew/2.0.rst:1162 +msgid "" +"Tab width is now a user settable option. When opening an existing Python " +"file, IDLE automatically detects the indentation conventions, and adapts." +msgstr "制表符宽度现在是一个用户可设置的选项。在打开现有的 Python 文件时,IDLE 会自动检测缩进约定并进行适应。" + +#: ../../whatsnew/2.0.rst:1165 +msgid "" +"There is now support for calling browsers on various platforms, used to open" +" the Python documentation in a browser." +msgstr "现在支持在各种平台上调用浏览器,用于在浏览器中打开 Python 文档。" + +#: ../../whatsnew/2.0.rst:1168 +msgid "" +"IDLE now has a command line, which is largely similar to the vanilla Python" +" interpreter." +msgstr "IDLE 现在有一个命令行,它与原版 Python 解释器大致相同。" + +#: ../../whatsnew/2.0.rst:1171 +msgid "Call tips were added in many places." +msgstr "在许多地方添加了调用提示。" + +#: ../../whatsnew/2.0.rst:1173 +msgid "IDLE can now be installed as a package." +msgstr "IDLE 现在可以作为一个包被安装。" + +#: ../../whatsnew/2.0.rst:1175 +msgid "In the editor window, there is now a line/column bar at the bottom." +msgstr "在编辑器窗口中,目前在底部位置增加了一个行/列显示栏。" + +#: ../../whatsnew/2.0.rst:1177 +msgid "" +"Three new keystroke commands: Check module (:kbd:`Alt-F5`), Import module " +"(:kbd:`F5`) and Run script (:kbd:`Ctrl-F5`)." +msgstr "" +"三个新的键盘快捷键:检查模块 (:kbd:`Alt-F5`),导入模块 (:kbd:`F5`) 和执行脚本 (:kbd:`Ctrl-F5`)。" + +#: ../../whatsnew/2.0.rst:1184 +msgid "Deleted and Deprecated Modules" +msgstr "删除和弃用的模块" + +#: ../../whatsnew/2.0.rst:1186 +msgid "" +"A few modules have been dropped because they're obsolete, or because there " +"are now better ways to do the same thing. The :mod:`stdwin` module is gone;" +" it was for a platform-independent windowing toolkit that's no longer " +"developed." +msgstr "" + +#: ../../whatsnew/2.0.rst:1190 +msgid "" +"A number of modules have been moved to the :file:`lib-old` subdirectory: " +":mod:`cmp`, :mod:`cmpcache`, :mod:`dircmp`, :mod:`dump`, :mod:`find`, " +":mod:`grep`, :mod:`packmail`, :mod:`poly`, :mod:`util`, :mod:`whatsound`, " +":mod:`zmod`. If you have code which relies on a module that's been moved " +"to :file:`lib-old`, you can simply add that directory to ``sys.path`` to " +"get them back, but you're encouraged to update any code that uses these " +"modules." +msgstr "" +"多个模块已被移至 :file:`lib-old` 子目录: :mod:`cmp`, :mod:`cmpcache`, :mod:`dircmp`, " +":mod:`dump`, :mod:`find`, :mod:`grep`, :mod:`packmail`, :mod:`poly`, " +":mod:`util`, :mod:`whatsound`, :mod:`zmod`。 如果你还有依赖于被移至 :file:`lib-old` " +"的模块的代码,你可以简单地将该目录添加到 ``sys.path`` 来恢复它们,但建议你对任何使用这些模块的代码进行更新。" + +#: ../../whatsnew/2.0.rst:1199 +msgid "Acknowledgements" +msgstr "致谢" + +#: ../../whatsnew/2.0.rst:1201 +msgid "" +"The authors would like to thank the following people for offering " +"suggestions on various drafts of this article: David Bolen, Mark Hammond, " +"Gregg Hauser, Jeremy Hylton, Fredrik Lundh, Detlef Lannert, Aahz Maruch, " +"Skip Montanaro, Vladimir Marangozov, Tobias Polzin, Guido van Rossum, Neil " +"Schemenauer, and Russ Schmidt." +msgstr "" +"作者感谢以下人士对本文的各种草稿提出建议: David Bolen, Mark Hammond, Gregg Hauser, Jeremy " +"Hylton, Fredrik Lundh, Detlef Lannert, Aahz Maruch, Skip Montanaro, Vladimir" +" Marangozov, Tobias Polzin, Guido van Rossum, Neil Schemenauer, and Russ " +"Schmidt." diff --git a/whatsnew/2.1.po b/whatsnew/2.1.po new file mode 100644 index 000000000..1042011fe --- /dev/null +++ b/whatsnew/2.1.po @@ -0,0 +1,1160 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) 2001-2024, Python Software Foundation +# This file is distributed under the same license as the Python package. +# FIRST AUTHOR , YEAR. +# +# Translators: +# Fei Yin , 2018 +# 叶浚安 , 2019 +# ppcfish , 2019 +# Freesand Leo , 2024 +# Rafael Fontenelle , 2024 +# +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: Python 3.9\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2024-06-28 16:34+0000\n" +"PO-Revision-Date: 2017-02-16 23:42+0000\n" +"Last-Translator: Rafael Fontenelle , 2024\n" +"Language-Team: Chinese (China) (https://app.transifex.com/python-doc/teams/5390/zh_CN/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: zh_CN\n" +"Plural-Forms: nplurals=1; plural=0;\n" + +#: ../../whatsnew/2.1.rst:3 +msgid "What's New in Python 2.1" +msgstr "Python 2.1 有什么新变化" + +#: ../../whatsnew/2.1.rst:0 +msgid "Author" +msgstr "作者" + +#: ../../whatsnew/2.1.rst:5 +msgid "A.M. Kuchling" +msgstr "A.M. Kuchling" + +#: ../../whatsnew/2.1.rst:13 +msgid "Introduction" +msgstr "概述" + +#: ../../whatsnew/2.1.rst:15 +msgid "" +"This article explains the new features in Python 2.1. While there aren't as" +" many changes in 2.1 as there were in Python 2.0, there are still some " +"pleasant surprises in store. 2.1 is the first release to be steered through" +" the use of Python Enhancement Proposals, or PEPs, so most of the sizable " +"changes have accompanying PEPs that provide more complete documentation and " +"a design rationale for the change. This article doesn't attempt to document" +" the new features completely, but simply provides an overview of the new " +"features for Python programmers. Refer to the Python 2.1 documentation, or " +"to the specific PEP, for more details about any new feature that " +"particularly interests you." +msgstr "" +"本文介绍了 Python 2.1 的新增特性。 虽然 2.1 的改变没有 Python 2.0 那么多,但是仍然有一些令人惊喜的东西。 2.1 " +"是第一个使用 Python 增强提议,即 PEP 来进行引导的发行版,因此大部分重要的改变都有相应的 PEP 来提供有关改变的更完整文档和设计思路。 " +"本文并未试图完整记录所有的新特性,而是为 Python 程序员提供新特性的简单概览。 请参阅 Python 2.1 文档,或特定的 " +"PEP,获取针对你感兴趣的任何新特性的更多细节。" + +#: ../../whatsnew/2.1.rst:25 +msgid "" +"One recent goal of the Python development team has been to accelerate the " +"pace of new releases, with a new release coming every 6 to 9 months. 2.1 is " +"the first release to come out at this faster pace, with the first alpha " +"appearing in January, 3 months after the final version of 2.0 was released." +msgstr "" +"Python 开发团队的一个近期目标是加速新发行版的步调,使得每 6 到 9 个月就有一个新发行版。 2.1 " +"是基于这个新步调推出的第一个发行版,第一个内测版将于一月发布,即 2.0 最终版发布 3 个月之后。" + +#: ../../whatsnew/2.1.rst:30 +msgid "The final release of Python 2.1 was made on April 17, 2001." +msgstr "Python 2.1 的最终版本于2001年4月17日发布。" + +#: ../../whatsnew/2.1.rst:36 +msgid "PEP 227: Nested Scopes" +msgstr "PEP 227: 嵌套的作用域" + +#: ../../whatsnew/2.1.rst:38 +msgid "" +"The largest change in Python 2.1 is to Python's scoping rules. In Python " +"2.0, at any given time there are at most three namespaces used to look up " +"variable names: local, module-level, and the built-in namespace. This often" +" surprised people because it didn't match their intuitive expectations. For" +" example, a nested recursive function definition doesn't work::" +msgstr "" +"Python 2.1 中的最大改变是 Python 的作用域规则。 在 Python 2.0 " +"中,任意给定的时刻至多使用三个命名空间来查找变量名称:局部、模块和内置命名空间。 这往往会导致令人吃惊的结果因为它与人们直觉上的预期不相匹配。 " +"例如,一个嵌套的递归函数将不起作用::" + +#: ../../whatsnew/2.1.rst:51 +msgid "" +"The function :func:`g` will always raise a :exc:`NameError` exception, " +"because the binding of the name ``g`` isn't in either its local namespace or" +" in the module-level namespace. This isn't much of a problem in practice " +"(how often do you recursively define interior functions like this?), but " +"this also made using the :keyword:`lambda` expression clumsier, and this was" +" a problem in practice. In code which uses :keyword:`lambda` you can often " +"find local variables being copied by passing them as the default values of " +"arguments. ::" +msgstr "" +"函数 :func:`g` 将总是引发 :exc:`NameError` 异常,因为名称 ``g`` 的绑定既不在局部命名空间中也不在模块级命名空间中。 " +"这在实践上不会有太大问题(你会经常这样递归地定义内部函数吗?),但是这也会让 :keyword:`lambda` " +"表达式的使用更为笨拙,这在实践上是有问题的。 在使用了 :keyword:`lambda` 的代码中你经常能发现局部变量通过作为参数的默认值被拷贝。 " +"::" + +#: ../../whatsnew/2.1.rst:65 +msgid "" +"The readability of Python code written in a strongly functional style " +"suffers greatly as a result." +msgstr "结果将会严重损害以高度函数式风格编写的 Python 代码的可读性。" + +#: ../../whatsnew/2.1.rst:68 +msgid "" +"The most significant change to Python 2.1 is that static scoping has been " +"added to the language to fix this problem. As a first effect, the " +"``name=name`` default argument is now unnecessary in the above example. Put" +" simply, when a given variable name is not assigned a value within a " +"function (by an assignment, or the :keyword:`def`, :keyword:`class`, or " +":keyword:`import` statements), references to the variable will be looked up " +"in the local namespace of the enclosing scope. A more detailed explanation " +"of the rules, and a dissection of the implementation, can be found in the " +"PEP." +msgstr "" +"Python 2.1 最显著的改变是增加了静态作用域这一语言特征来解决此问题。 作为它的第一项影响,在上述示例中的 ``name=name`` " +"默认参数现在将不再必要。 简单地说,当一个函数内部的给定变量名没有被赋值时(通过赋值语句,或者 :keyword:`def`, " +":keyword:`class` 或 :keyword:`import` 语句),对该变量的引用将在外层作用域的局部命名空间中查找。 " +"对于该规则的更详细解释,以及具体实现的分析,请参阅相应的 PEP。" + +#: ../../whatsnew/2.1.rst:77 +msgid "" +"This change may cause some compatibility problems for code where the same " +"variable name is used both at the module level and as a local variable " +"within a function that contains further function definitions. This seems " +"rather unlikely though, since such code would have been pretty confusing to " +"read in the first place." +msgstr "" +"对于同时在模块层级和包含下层函数定义的函数内部局部变量使用了相同变量名的代码来说这项改变可能会导致一些兼容性问题。 " +"不过这看来不太可能发生,因为阅读这样的代码本来就会相当令人困惑。" + +#: ../../whatsnew/2.1.rst:83 +msgid "" +"One side effect of the change is that the ``from module import *`` and " +"``exec`` statements have been made illegal inside a function scope under " +"certain conditions. The Python reference manual has said all along that " +"``from module import *`` is only legal at the top level of a module, but the" +" CPython interpreter has never enforced this before. As part of the " +"implementation of nested scopes, the compiler which turns Python source into" +" bytecodes has to generate different code to access variables in a " +"containing scope. ``from module import *`` and ``exec`` make it impossible " +"for the compiler to figure this out, because they add names to the local " +"namespace that are unknowable at compile time. Therefore, if a function " +"contains function definitions or :keyword:`lambda` expressions with free " +"variables, the compiler will flag this by raising a :exc:`SyntaxError` " +"exception." +msgstr "" +"此项改变的一个附带影响是在特定条件下函数作用域内部 ``from module import *`` 和 ``exec`` 语句将不允许使用。 " +"Python 参考手册已经写明 ``from module import *`` 仅在模块最高层级上是可用的,但此前 CPython " +"解释器从未强制实施此规则。 作为嵌套作用域具体实现的一部分,将 Python 源码转为字节码的编译器会生成不同的代码来访问某个包含作用域内的变量。 " +"``from module import *`` 和 ``exec`` 会使得编译器无法正确执行,因为它们会向局部命名空间添加在编译时还不存在的名称。 " +"为此,如果一个函数包含带有自由变量的函数定义或 :keyword:`lambda` 表达式,编译器将通过引发 :exc:`SyntaxError` " +"异常来提示。" + +#: ../../whatsnew/2.1.rst:96 +msgid "To make the preceding explanation a bit clearer, here's an example::" +msgstr "为了使前面的解释更清楚,下面是一个例子::" + +#: ../../whatsnew/2.1.rst:105 +msgid "" +"Line 4 containing the ``exec`` statement is a syntax error, since ``exec`` " +"would define a new local variable named ``x`` whose value should be accessed" +" by :func:`g`." +msgstr "" +"包含 ``exec`` 语句的第 4 行有语法错误,因为 ``exec`` 将定义一个名为 ``x`` 的新局部变量,它的值应当被 :func:`g` " +"访问。" + +#: ../../whatsnew/2.1.rst:109 +msgid "" +"This shouldn't be much of a limitation, since ``exec`` is rarely used in " +"most Python code (and when it is used, it's often a sign of a poor design " +"anyway)." +msgstr "这应该不会是太大的限制,因为 ``exec`` 在多数 Python 代码中都极少被使用(而当它被使用时,往往也是个存在糟糕设计的信号)。" + +#: ../../whatsnew/2.1.rst:113 +msgid "" +"Compatibility concerns have led to nested scopes being introduced gradually;" +" in Python 2.1, they aren't enabled by default, but can be turned on within " +"a module by using a future statement as described in :pep:`236`. (See the " +"following section for further discussion of :pep:`236`.) In Python 2.2, " +"nested scopes will become the default and there will be no way to turn them " +"off, but users will have had all of 2.1's lifetime to fix any breakage " +"resulting from their introduction." +msgstr "" +"由于兼容性问题,嵌套作用域被逐步引入;在 Python 2.1 中,它们默认未启用,但可以通过在模块中使用 future 语句来开启,如 " +":pep:`236` 所述。 (参见下一节对 :pep:`236` 的进一步讨论。) 在 Python 2.2 " +"中,嵌套作用域将成为默认设置,并且无法关闭,但用户将有整个 2.1 版本的生命周期来修复因引入嵌套作用域而导致的任何问题。" + +#: ../../whatsnew/2.1.rst:123 +msgid ":pep:`227` - Statically Nested Scopes" +msgstr ":pep:`227` - 静态嵌套作用域" + +#: ../../whatsnew/2.1.rst:124 +msgid "Written and implemented by Jeremy Hylton." +msgstr "由 Jeremy Hylton 撰写并实现。" + +#: ../../whatsnew/2.1.rst:130 +msgid "PEP 236: __future__ Directives" +msgstr "PEP 236: __future__ 指令" + +#: ../../whatsnew/2.1.rst:132 +msgid "" +"The reaction to nested scopes was widespread concern about the dangers of " +"breaking code with the 2.1 release, and it was strong enough to make the " +"Pythoneers take a more conservative approach. This approach consists of " +"introducing a convention for enabling optional functionality in release N " +"that will become compulsory in release N+1." +msgstr "" +"对嵌套作用域的反应引起了广泛关注,人们担心在 Python 2.1 版本发布时会破坏现有代码,强烈的反应促使 Python " +"开发者采取了更保守的策略。这个策略包括引入一种约定,在版本 N 中启用可选功能,该功能将在版本 N+1 中成为强制功能。" + +#: ../../whatsnew/2.1.rst:138 +msgid "" +"The syntax uses a ``from...import`` statement using the reserved module name" +" :mod:`__future__`. Nested scopes can be enabled by the following " +"statement::" +msgstr "语法使用 ``from...import`` 语句,使用保留模块名 :mod:`__future__`。可以通过以下语句启用嵌套作用域::" + +#: ../../whatsnew/2.1.rst:143 +msgid "" +"While it looks like a normal :keyword:`import` statement, it's not; there " +"are strict rules on where such a future statement can be put. They can only " +"be at the top of a module, and must precede any Python code or regular " +":keyword:`!import` statements. This is because such statements can affect " +"how the Python bytecode compiler parses code and generates bytecode, so they" +" must precede any statement that will result in bytecodes being produced." +msgstr "" +"虽然它看起来像一个普通的 :keyword:`import` 语句,但实际上并不是;关于此类 future " +"语句的位置有严格的规定。它们只能放在模块的顶部,必须位于任何 Python 代码或常规 :keyword:`!import` " +"语句之前。这是因为这样的语句会影响 Python 字节码编译器解析代码和生成字节码的方式,因此它们必须在任何会生成字节码的语句之前出现。" + +#: ../../whatsnew/2.1.rst:153 +msgid ":pep:`236` - Back to the :mod:`__future__`" +msgstr ":pep:`236` - 回到 :mod:`__future__`" + +#: ../../whatsnew/2.1.rst:154 +msgid "Written by Tim Peters, and primarily implemented by Jeremy Hylton." +msgstr "由 Tim Peters 撰写,主要由 Jeremy Hylton 实现。" + +#: ../../whatsnew/2.1.rst:160 +msgid "PEP 207: Rich Comparisons" +msgstr "PEP 207: 富比较" + +#: ../../whatsnew/2.1.rst:162 +msgid "" +"In earlier versions, Python's support for implementing comparisons on user-" +"defined classes and extension types was quite simple. Classes could " +"implement a :meth:`__cmp__` method that was given two instances of a class, " +"and could only return 0 if they were equal or +1 or -1 if they weren't; the " +"method couldn't raise an exception or return anything other than a Boolean " +"value. Users of Numeric Python often found this model too weak and " +"restrictive, because in the number-crunching programs that numeric Python is" +" used for, it would be more useful to be able to perform elementwise " +"comparisons of two matrices, returning a matrix containing the results of a " +"given comparison for each element. If the two matrices are of different " +"sizes, then the compare has to be able to raise an exception to signal the " +"error." +msgstr "" + +#: ../../whatsnew/2.1.rst:174 +msgid "" +"In Python 2.1, rich comparisons were added in order to support this need. " +"Python classes can now individually overload each of the ``<``, ``<=``, " +"``>``, ``>=``, ``==``, and ``!=`` operations. The new magic method names " +"are:" +msgstr "" +"在 Python 2.1 中增加了富比较操作以支持这一需求。 Python 类现在可以单独重载 ``<``, ``<=``, ``>``, " +"``>=``, ``==`` 和 ``!=`` 中的每个操作。 新的魔术方法名称如下:" + +#: ../../whatsnew/2.1.rst:179 +msgid "Operation" +msgstr "运算" + +#: ../../whatsnew/2.1.rst:179 +msgid "Method name" +msgstr "方法名称" + +#: ../../whatsnew/2.1.rst:181 +msgid "``<``" +msgstr "``<``" + +#: ../../whatsnew/2.1.rst:181 +msgid ":meth:`__lt__`" +msgstr ":meth:`__lt__`" + +#: ../../whatsnew/2.1.rst:183 +msgid "``<=``" +msgstr "``<=``" + +#: ../../whatsnew/2.1.rst:183 +msgid ":meth:`__le__`" +msgstr ":meth:`__le__`" + +#: ../../whatsnew/2.1.rst:185 +msgid "``>``" +msgstr "``>``" + +#: ../../whatsnew/2.1.rst:185 +msgid ":meth:`__gt__`" +msgstr ":meth:`__gt__`" + +#: ../../whatsnew/2.1.rst:187 +msgid "``>=``" +msgstr "``>=``" + +#: ../../whatsnew/2.1.rst:187 +msgid ":meth:`__ge__`" +msgstr ":meth:`__ge__`" + +#: ../../whatsnew/2.1.rst:189 +msgid "``==``" +msgstr "``==``" + +#: ../../whatsnew/2.1.rst:189 +msgid ":meth:`__eq__`" +msgstr ":meth:`__eq__`" + +#: ../../whatsnew/2.1.rst:191 +msgid "``!=``" +msgstr "``!=``" + +#: ../../whatsnew/2.1.rst:191 +msgid ":meth:`__ne__`" +msgstr ":meth:`__ne__`" + +#: ../../whatsnew/2.1.rst:194 +msgid "" +"(The magic methods are named after the corresponding Fortran operators " +"``.LT.``. ``.LE.``, &c. Numeric programmers are almost certainly quite " +"familiar with these names and will find them easy to remember.)" +msgstr "" +"(这些魔术方法是以对应的 Fortran 操作符命名的,如 ``.LT.``、``.LE.`` 等。 " +"数值程序员几乎肯定对这些名称非常熟悉,并且会发现它们易于记忆。)" + +#: ../../whatsnew/2.1.rst:198 +msgid "" +"Each of these magic methods is of the form ``method(self, other)``, where " +"``self`` will be the object on the left-hand side of the operator, while " +"``other`` will be the object on the right-hand side. For example, the " +"expression ``A < B`` will cause ``A.__lt__(B)`` to be called." +msgstr "" +"每个这样的魔术方法的形式都是 ``method(self, other)``,其中 ``self`` 是操作符左侧的对象,而 ``other`` " +"是操作符右侧的对象。 例如,表达式 ``A < B`` 会调用 ``A.__lt__(B)``。" + +#: ../../whatsnew/2.1.rst:203 +msgid "" +"Each of these magic methods can return anything at all: a Boolean, a matrix," +" a list, or any other Python object. Alternatively they can raise an " +"exception if the comparison is impossible, inconsistent, or otherwise " +"meaningless." +msgstr "" +"这些魔术方法可以返回任何类型的值:布尔值、矩阵、列表或任何其他 Python 对象。或者,如果比较是不可能的、不一致的或没有意义的,它们也可以引发异常。" + +#: ../../whatsnew/2.1.rst:207 +msgid "" +"The built-in ``cmp(A,B)`` function can use the rich comparison machinery, " +"and now accepts an optional argument specifying which comparison operation " +"to use; this is given as one of the strings ``\"<\"``, ``\"<=\"``, " +"``\">\"``, ``\">=\"``, ``\"==\"``, or ``\"!=\"``. If called without the " +"optional third argument, :func:`cmp` will only return -1, 0, or +1 as in " +"previous versions of Python; otherwise it will call the appropriate method " +"and can return any Python object." +msgstr "" + +#: ../../whatsnew/2.1.rst:214 +msgid "" +"There are also corresponding changes of interest to C programmers; there's a" +" new slot ``tp_richcmp`` in type objects and an API for performing a given " +"rich comparison. I won't cover the C API here, but will refer you to " +":pep:`207`, or to 2.1's C API documentation, for the full list of related " +"functions." +msgstr "" +"对于 C 程序员来说,也有相应的变更;类型对象中有一个新的槽位 ``tp_richcmp`` 以及一个用于执行指定富比较的 API。 这里我不会涉及 C" +" API 的具体内容,完整的相关函数列表请参阅 :pep:`207` 或 2.1 的 C API 文档。" + +#: ../../whatsnew/2.1.rst:223 +msgid ":pep:`207` - Rich Comparisons" +msgstr ":pep:`207` - 富比较" + +#: ../../whatsnew/2.1.rst:223 +msgid "" +"Written by Guido van Rossum, heavily based on earlier work by David Ascher, " +"and implemented by Guido van Rossum." +msgstr "由 Guido van Rossum 编写,大量参考 David Ascher 的先期工作,并由 Guido van Rossum 实现。" + +#: ../../whatsnew/2.1.rst:230 +msgid "PEP 230: Warning Framework" +msgstr "PEP 230: 警告框架" + +#: ../../whatsnew/2.1.rst:232 +msgid "" +"Over its 10 years of existence, Python has accumulated a certain number of " +"obsolete modules and features along the way. It's difficult to know when a " +"feature is safe to remove, since there's no way of knowing how much code " +"uses it --- perhaps no programs depend on the feature, or perhaps many do. " +"To enable removing old features in a more structured way, a warning " +"framework was added. When the Python developers want to get rid of a " +"feature, it will first trigger a warning in the next version of Python. The" +" following Python version can then drop the feature, and users will have had" +" a full release cycle to remove uses of the old feature." +msgstr "" +"在过去的 10 年中,Python 积累了一定数量的过时模块和功能。 " +"由于无法确切知道某个功能被使用的程度:可能没有程序依赖该功能,也可能有很多程序依赖,因此很难确定何时可以安全地移除某个功能,为了以更结构化的方式移除旧功能,添加了一个警告框架。" +" 当 Python 开发者想要废弃某个功能时,它会在下一个 Python 版本中首先触发一个警告。 " +"然后,在随后的Python版本中可以移除该功能,这样用户将有一个完整的发布周期来删除对旧功能的使用。" + +#: ../../whatsnew/2.1.rst:242 +msgid "" +"Python 2.1 adds the warning framework to be used in this scheme. It adds a " +":mod:`warnings` module that provide functions to issue warnings, and to " +"filter out warnings that you don't want to be displayed. Third-party modules" +" can also use this framework to deprecate old features that they no longer " +"wish to support." +msgstr "" +"Python 2.1 增加了警告框架以用于此方案。 它增加了一个 :mod:`warnings` " +"模块,该模块提供了发出警告的函数,以及过滤掉不想显示的警告的功能。 第三方模块也可以使用这个框架来弃用它们不再希望支持的旧功能。" + +#: ../../whatsnew/2.1.rst:248 +msgid "" +"For example, in Python 2.1 the :mod:`regex` module is deprecated, so " +"importing it causes a warning to be printed::" +msgstr "例如,在 Python 2.1 中 :mod:`regex` 模块已被弃用,因此导入它时会打印一条警告信息::" + +#: ../../whatsnew/2.1.rst:256 +msgid "Warnings can be issued by calling the :func:`warnings.warn` function::" +msgstr "警告可以通过调用 :func:`warnings.warn` 函数来发出::" + +#: ../../whatsnew/2.1.rst:260 +msgid "" +"The first parameter is the warning message; an additional optional " +"parameters can be used to specify a particular warning category." +msgstr "第一个形参是警告消息;额外的可选形参可被用来指定一个专门的警告类别。" + +#: ../../whatsnew/2.1.rst:263 +msgid "" +"Filters can be added to disable certain warnings; a regular expression " +"pattern can be applied to the message or to the module name in order to " +"suppress a warning. For example, you may have a program that uses the " +":mod:`regex` module and not want to spare the time to convert it to use the " +":mod:`re` module right now. The warning can be suppressed by calling ::" +msgstr "" + +#: ../../whatsnew/2.1.rst:275 +msgid "" +"This adds a filter that will apply only to warnings of the class " +":class:`DeprecationWarning` triggered in the :mod:`__main__` module, and " +"applies a regular expression to only match the message about the " +":mod:`regex` module being deprecated, and will cause such warnings to be " +"ignored. Warnings can also be printed only once, printed every time the " +"offending code is executed, or turned into exceptions that will cause the " +"program to stop (unless the exceptions are caught in the usual way, of " +"course)." +msgstr "" + +#: ../../whatsnew/2.1.rst:283 +msgid "" +"Functions were also added to Python's C API for issuing warnings; refer to " +"PEP 230 or to Python's API documentation for the details." +msgstr "Python 的 C API 也增加了用于发出警告的函数;详情请参阅 PEP 230 或 Python 的 API 文档。" + +#: ../../whatsnew/2.1.rst:293 +msgid ":pep:`5` - Guidelines for Language Evolution" +msgstr ":pep:`5` - 语言演化的准则" + +#: ../../whatsnew/2.1.rst:290 +msgid "" +"Written by Paul Prescod, to specify procedures to be followed when removing " +"old features from Python. The policy described in this PEP hasn't been " +"officially adopted, but the eventual policy probably won't be too different " +"from Prescod's proposal." +msgstr "" +"该文档由 Paul Prescod 撰写,旨在规定移除 Python 旧功能时应遵循的程序。 尽管本文描述的政策尚未被正式采纳,但最终的政策可能不会与 " +"Prescod 的提议有太大不同。" + +#: ../../whatsnew/2.1.rst:295 +msgid ":pep:`230` - Warning Framework" +msgstr ":pep:`230` - 警告框架" + +#: ../../whatsnew/2.1.rst:296 +msgid "Written and implemented by Guido van Rossum." +msgstr "由 Guido van Rossum 撰写并实现。" + +#: ../../whatsnew/2.1.rst:302 +msgid "PEP 229: New Build System" +msgstr "PEP 229: 新的构建系统" + +#: ../../whatsnew/2.1.rst:304 +msgid "" +"When compiling Python, the user had to go in and edit the " +":file:`Modules/Setup` file in order to enable various additional modules; " +"the default set is relatively small and limited to modules that compile on " +"most Unix platforms. This means that on Unix platforms with many more " +"features, most notably Linux, Python installations often don't contain all " +"useful modules they could." +msgstr "" +"在编译 Python 时,用户必须进入并编辑 :file:`Modules/Setup` 文件以启用各种附加模块;默认集相对较小,并且仅限于在大多数 " +"Unix 平台上编译的模块。这意味着在具有更多功能的 Unix 平台上,特别是 Linux,Python 安装通常不包含所有可能有用的模块。" + +#: ../../whatsnew/2.1.rst:310 +msgid "" +"Python 2.0 added the Distutils, a set of modules for distributing and " +"installing extensions. In Python 2.1, the Distutils are used to compile " +"much of the standard library of extension modules, autodetecting which ones " +"are supported on the current machine. It's hoped that this will make Python" +" installations easier and more featureful." +msgstr "" +"Python 2.0 添加了 Distutils,一组用于分发和安装扩展模块的模块。在 Python 2.1 中,Distutils " +"被用于编译大部分标准库扩展模块,自动检测当前机器上支持哪些模块。希望这将使 Python 的安装更加容易并具有更多功能。" + +#: ../../whatsnew/2.1.rst:316 +msgid "" +"Instead of having to edit the :file:`Modules/Setup` file in order to enable " +"modules, a :file:`setup.py` script in the top directory of the Python source" +" distribution is run at build time, and attempts to discover which modules " +"can be enabled by examining the modules and header files on the system. If " +"a module is configured in :file:`Modules/Setup`, the :file:`setup.py` script" +" won't attempt to compile that module and will defer to the " +":file:`Modules/Setup` file's contents. This provides a way to specific any " +"strange command-line flags or libraries that are required for a specific " +"platform." +msgstr "" +"不再需要编辑 :file:`Modules/Setup` 文件来启用模块,而是在 Python 源代码分发包的顶层目录运行一个 " +":file:`setup.py` 脚本,该脚本在构建时尝试通过检查系统上的模块和头文件来发现可以启用那些模块。 如果某个模块已在 " +":file:`Modules/Setup` 中配置,则 :file:`setup.py` 脚本不会尝试编译该模块,并会遵从 " +":file:`Modules/Setup` 文件中的内容。 这提供了一种方式来指定特定平台所需的任何奇怪的命令行旗标或库。" + +#: ../../whatsnew/2.1.rst:325 +msgid "" +"In another far-reaching change to the build mechanism, Neil Schemenauer " +"restructured things so Python now uses a single makefile that isn't " +"recursive, instead of makefiles in the top directory and in each of the " +":file:`Python/`, :file:`Parser/`, :file:`Objects/`, and :file:`Modules/` " +"subdirectories. This makes building Python faster and also makes hacking " +"the Makefiles clearer and simpler." +msgstr "" +"在对构建机制的另一项重大更改中,Neil Schemenauer 对其进行了重组,现在 Python 使用单一的非递归 " +"makefile,而不是在顶层目录和 :file:`Python/`、:file:`Parser/`、:file:`Objects/`和 " +":file:`Modules/` 子目录中的多个 makefile。这使得构建 Python 更快,同时也使修改 Makefile 更加清晰和简单。" + +#: ../../whatsnew/2.1.rst:335 +msgid ":pep:`229` - Using Distutils to Build Python" +msgstr ":pep:`229` - 使用 Distutils 来构建 Python" + +#: ../../whatsnew/2.1.rst:336 ../../whatsnew/2.1.rst:571 +msgid "Written and implemented by A.M. Kuchling." +msgstr "由 A.M. Kuchling 撰写并实现。" + +#: ../../whatsnew/2.1.rst:342 +msgid "PEP 205: Weak References" +msgstr "PEP 205: 弱引用" + +#: ../../whatsnew/2.1.rst:344 +msgid "" +"Weak references, available through the :mod:`weakref` module, are a minor " +"but useful new data type in the Python programmer's toolbox." +msgstr "弱引用,通过 :mod:`weakref` 模块提供,是 Python 程序员工具箱中一种较小但有用的新数据类型。" + +#: ../../whatsnew/2.1.rst:347 +msgid "" +"Storing a reference to an object (say, in a dictionary or a list) has the " +"side effect of keeping that object alive forever. There are a few specific " +"cases where this behaviour is undesirable, object caches being the most " +"common one, and another being circular references in data structures such as" +" trees." +msgstr "" +"存储一个指向对象的引用(例如,在字典或列表中)会导致该对象永久存活。 " +"在某些特定情况下,这种行为是不符合需要的,最常见的是对象缓存,另一个是像树这样的数据结构中的循环引用。" + +#: ../../whatsnew/2.1.rst:352 +msgid "" +"For example, consider a memoizing function that caches the results of " +"another function ``f(x)`` by storing the function's argument and its result " +"in a dictionary::" +msgstr "例如,考虑一个记忆化函数,它通过将函数的参数及其结果存储在字典中来缓存另一个函数 ``f(x)`` 的结果::" + +#: ../../whatsnew/2.1.rst:368 +msgid "" +"This version works for simple things such as integers, but it has a side " +"effect; the ``_cache`` dictionary holds a reference to the return values, so" +" they'll never be deallocated until the Python process exits and cleans up. " +"This isn't very noticeable for integers, but if :func:`f` returns an object," +" or a data structure that takes up a lot of memory, this can be a problem." +msgstr "" + +#: ../../whatsnew/2.1.rst:374 +msgid "" +"Weak references provide a way to implement a cache that won't keep objects " +"alive beyond their time. If an object is only accessible through weak " +"references, the object will be deallocated and the weak references will now " +"indicate that the object it referred to no longer exists. A weak reference " +"to an object *obj* is created by calling ``wr = weakref.ref(obj)``. The " +"object being referred to is returned by calling the weak reference as if it " +"were a function: ``wr()``. It will return the referenced object, or " +"``None`` if the object no longer exists." +msgstr "" +"弱引用提供了一种实现缓存的方法,不会让对象在其生命周期结束后仍然存活。 " +"如果一个对象仅通过弱引用访问,该对象将被释放,并且弱引用将指示它所引用的对象不再存在。 通过调用 ``wr = weakref.ref(obj)`` " +"来创建对对象 *obj* 的弱引用。 通过调用弱引用,就像调用函数一样,可以返回被引用的对象: ``wr()``。 " +"如果对象仍然存在,它将返回被引用的对象;如果对象不再存在,则返回 ``None``。" + +#: ../../whatsnew/2.1.rst:382 +msgid "" +"This makes it possible to write a :func:`memoize` function whose cache " +"doesn't keep objects alive, by storing weak references in the cache. ::" +msgstr "" + +#: ../../whatsnew/2.1.rst:400 +msgid "" +"The :mod:`weakref` module also allows creating proxy objects which behave " +"like weak references --- an object referenced only by proxy objects is " +"deallocated -- but instead of requiring an explicit call to retrieve the " +"object, the proxy transparently forwards all operations to the object as " +"long as the object still exists. If the object is deallocated, attempting " +"to use a proxy will cause a :exc:`weakref.ReferenceError` exception to be " +"raised. ::" +msgstr "" + +#: ../../whatsnew/2.1.rst:416 +msgid ":pep:`205` - Weak References" +msgstr ":pep:`205` - 弱引用" + +#: ../../whatsnew/2.1.rst:417 +msgid "Written and implemented by Fred L. Drake, Jr." +msgstr "由 Fred L. Drake, Jr 撰写并实现。" + +#: ../../whatsnew/2.1.rst:423 +msgid "PEP 232: Function Attributes" +msgstr "PEP 232: 函数属性" + +#: ../../whatsnew/2.1.rst:425 +msgid "" +"In Python 2.1, functions can now have arbitrary information attached to " +"them. People were often using docstrings to hold information about functions" +" and methods, because the ``__doc__`` attribute was the only way of " +"attaching any information to a function. For example, in the Zope Web " +"application server, functions are marked as safe for public access by having" +" a docstring, and in John Aycock's SPARK parsing framework, docstrings hold " +"parts of the BNF grammar to be parsed. This overloading is unfortunate, " +"since docstrings are really intended to hold a function's documentation; for" +" example, it means you can't properly document functions intended for " +"private use in Zope." +msgstr "" + +#: ../../whatsnew/2.1.rst:435 +msgid "" +"Arbitrary attributes can now be set and retrieved on functions using the " +"regular Python syntax::" +msgstr "现在可以使用常规的 Python 语法在函数上设置和检索任意属性::" + +#: ../../whatsnew/2.1.rst:444 +msgid "" +"The dictionary containing attributes can be accessed as the function's " +":attr:`~object.__dict__`. Unlike the :attr:`~object.__dict__` attribute of " +"class instances, in functions you can actually assign a new dictionary to " +":attr:`~object.__dict__`, though the new value is restricted to a regular " +"Python dictionary; you *can't* be tricky and set it to a :class:`UserDict` " +"instance, or any other random object that behaves like a mapping." +msgstr "" + +#: ../../whatsnew/2.1.rst:454 +msgid ":pep:`232` - Function Attributes" +msgstr ":pep:`232` - 函数属性" + +#: ../../whatsnew/2.1.rst:455 +msgid "Written and implemented by Barry Warsaw." +msgstr "由 Barry Warsaw 撰写并实现" + +#: ../../whatsnew/2.1.rst:461 +msgid "PEP 235: Importing Modules on Case-Insensitive Platforms" +msgstr "PEP 235: 在大小写不敏感的平台上导入模块" + +#: ../../whatsnew/2.1.rst:463 +msgid "" +"Some operating systems have filesystems that are case-insensitive, MacOS and" +" Windows being the primary examples; on these systems, it's impossible to " +"distinguish the filenames ``FILE.PY`` and ``file.py``, even though they do " +"store the file's name in its original case (they're case-preserving, too)." +msgstr "" +"一些操作系统的文件系统是大小写不敏感的,MacOS 和 Windows 是主要的例子;在这些系统上,无法区分文件名 ``FILE.PY`` 和 " +"``file.py``,尽管它们确实以原始大小写存储文件名(它们也是保留大小写的)。" + +#: ../../whatsnew/2.1.rst:468 +msgid "" +"In Python 2.1, the :keyword:`import` statement will work to simulate case-" +"sensitivity on case-insensitive platforms. Python will now search for the " +"first case-sensitive match by default, raising an :exc:`ImportError` if no " +"such file is found, so ``import file`` will not import a module named " +"``FILE.PY``. Case-insensitive matching can be requested by setting the " +":envvar:`PYTHONCASEOK` environment variable before starting the Python " +"interpreter." +msgstr "" +"在 Python 2.1 中,:keyword:`import` 语句可以在不区分大小写的平台上模拟大小写敏感性。 现在,Python " +"默认搜索第一个大小写敏感匹配的文件,如果找不到这样的文件,就会引发 :exc:`ImportError`,因此 ``import file`` " +"不会导入名为 ``FILE.PY`` 的模块。 在启动 Python 解释器之前,可以通过设置 :envvar:`PYTHONCASEOK` " +"环境变量来请求大小写不敏感匹配。" + +#: ../../whatsnew/2.1.rst:479 +msgid "PEP 217: Interactive Display Hook" +msgstr "PEP 217: 交互模式显示钩子" + +#: ../../whatsnew/2.1.rst:481 +msgid "" +"When using the Python interpreter interactively, the output of commands is " +"displayed using the built-in :func:`repr` function. In Python 2.1, the " +"variable :func:`sys.displayhook` can be set to a callable object which will " +"be called instead of :func:`repr`. For example, you can set it to a special " +"pretty-printing function::" +msgstr "" +"在交互模式下使用 Python 解释器时,命令的输出是通过内置的 :func:`repr` 函数显示的。 在 Python 2.1 中,可以将变量 " +":func:`sys.displayhook` 设置为一个可调用对象,该对象将在代替 :func:`repr` 函数被调用。 " +"例如,你可以将其设置为一个特殊的美化打印函数::" + +#: ../../whatsnew/2.1.rst:502 +msgid ":pep:`217` - Display Hook for Interactive Use" +msgstr ":pep:`217` - 用于交互模式的显示钩子" + +#: ../../whatsnew/2.1.rst:503 +msgid "Written and implemented by Moshe Zadka." +msgstr "由 Moshe Zadka 撰写并实现" + +#: ../../whatsnew/2.1.rst:509 +msgid "PEP 208: New Coercion Model" +msgstr "PEP 208: 新的强制转换模型" + +#: ../../whatsnew/2.1.rst:511 +msgid "" +"How numeric coercion is done at the C level was significantly modified. " +"This will only affect the authors of C extensions to Python, allowing them " +"more flexibility in writing extension types that support numeric operations." +msgstr "" +"在 C 级别上的数值类型转换方法进行了重大修改。 这只会影响编写 Python C 扩展的作者,使他们在编写支持数值运算的扩展类型时有更多的灵活性。" + +#: ../../whatsnew/2.1.rst:515 +msgid "" +"Extension types can now set the type flag ``Py_TPFLAGS_CHECKTYPES`` in their" +" ``PyTypeObject`` structure to indicate that they support the new coercion " +"model. In such extension types, the numeric slot functions can no longer " +"assume that they'll be passed two arguments of the same type; instead they " +"may be passed two arguments of differing types, and can then perform their " +"own internal coercion. If the slot function is passed a type it can't " +"handle, it can indicate the failure by returning a reference to the " +"``Py_NotImplemented`` singleton value. The numeric functions of the other " +"type will then be tried, and perhaps they can handle the operation; if the " +"other type also returns ``Py_NotImplemented``, then a :exc:`TypeError` will " +"be raised. Numeric methods written in Python can also return " +"``Py_NotImplemented``, causing the interpreter to act as if the method did " +"not exist (perhaps raising a :exc:`TypeError`, perhaps trying another " +"object's numeric methods)." +msgstr "" +"扩展类型现在可以在其 ``PyTypeObject`` 结构中设置类型标志 " +"``Py_TPFLAGS_CHECKTYPES``,以表明它们支持新的强制模型。 " +"在此类扩展类型中,数字槽函数不再假定它们将得到两个相同类型的参数;相反,它们可能会得到两个不同类型的参数,然后可以执行自己的内部强制。如果槽函数传递给它一个无法处理的类型,它可以通过返回一个指向" +" ``Py_NotImplemented`` 单一值的引用来表示失败。 然后将尝试其他类型的数值函数,也许它们可以处理该操作;如果其他类型也返回 " +"``Py_NotImplemented``,那么将引发 :exc:`TypeError`。 用 Python 写的数值方法也可以返回 " +"``Py_NotImplemented``,导致解释器当作该方法不存在(也许会引发 :exc:`TypeError`,也许会尝试另一个对象的数值方法)。" + +#: ../../whatsnew/2.1.rst:534 +msgid ":pep:`208` - Reworking the Coercion Model" +msgstr ":pep:`208` - 改写强制转换模型" + +#: ../../whatsnew/2.1.rst:533 +msgid "" +"Written and implemented by Neil Schemenauer, heavily based upon earlier work" +" by Marc-André Lemburg. Read this to understand the fine points of how " +"numeric operations will now be processed at the C level." +msgstr "" +"由 Neil Schemenauer 编写和实现,基于 Marc-André Lemburg 的早期工作。阅读这部分内容可以了解数值运算在 C " +"级别上现在如何处理的细节。" + +#: ../../whatsnew/2.1.rst:541 +msgid "PEP 241: Metadata in Python Packages" +msgstr "PEP 241: Python 包中的元数据" + +#: ../../whatsnew/2.1.rst:543 +msgid "" +"A common complaint from Python users is that there's no single catalog of " +"all the Python modules in existence. T. Middleton's Vaults of Parnassus at " +"http://www.vex.net/parnassus/ are the largest catalog of Python modules, but" +" registering software at the Vaults is optional, and many people don't " +"bother." +msgstr "" + +#: ../../whatsnew/2.1.rst:548 +msgid "" +"As a first small step toward fixing the problem, Python software packaged " +"using the Distutils :command:`sdist` command will include a file named " +":file:`PKG-INFO` containing information about the package such as its name, " +"version, and author (metadata, in cataloguing terminology). :pep:`241` " +"contains the full list of fields that can be present in the :file:`PKG-INFO`" +" file. As people began to package their software using Python 2.1, more and" +" more packages will include metadata, making it possible to build automated " +"cataloguing systems and experiment with them. With the result experience, " +"perhaps it'll be possible to design a really good catalog and then build " +"support for it into Python 2.2. For example, the Distutils :command:`sdist` " +"and :command:`bdist_\\*` commands could support an ``upload`` option that " +"would automatically upload your package to a catalog server." +msgstr "" +"作为解决这个问题的第一步,使用 Distutils :command:`sdist` 命令打包的 Python 软件将包含一个名为 " +":file:`PKG-INFO` 的文件,其中包含有关包的信息,如名称、版本和作者(在目录编制术语中称为元数据)。:file:`PKG-INFO` " +"文件可以包含的字段的完整列表见 :pep:`241`。随着人们开始使用 Python 2.1 " +"打包他们的软件,越来越多的包将包含元数据,从而使得构建自动化目录系统并进行实验成为可能。通过积累经验,也许有可能设计一个真正好的目录系统,然后在 " +"Python 2.2 中支持它。例如,Distutils 的 :command:`sdist` 和 :command:`bdist_\\*` " +"命令可以支持一个 ``upload`` 选项,自动将你的包上传到目录服务器。" + +#: ../../whatsnew/2.1.rst:561 +msgid "" +"You can start creating packages containing :file:`PKG-INFO` even if you're " +"not using Python 2.1, since a new release of the Distutils will be made for " +"users of earlier Python versions. Version 1.0.2 of the Distutils includes " +"the changes described in :pep:`241`, as well as various bugfixes and " +"enhancements. It will be available from the Distutils SIG at " +"https://www.python.org/community/sigs/current/distutils-sig/." +msgstr "" +"即使你不使用 Python 2.1,你也可以开始创建包含 :file:`PKG-INFO` 的包,因为 Distutils 的新版本将为早期 " +"Python 版本的用户发布。Distutils 1.0.2 版本包含了 :pep:`241` 所描述的更改,以及各种错误修复和增强功能。可以从 " +"Distutils SIG 上获取该版本 " +"https://www.python.org/community/sigs/current/distutils-sig/ 。" + +#: ../../whatsnew/2.1.rst:571 +msgid ":pep:`241` - Metadata for Python Software Packages" +msgstr ":pep:`241` - 针对 Python 软件包的元数据" + +#: ../../whatsnew/2.1.rst:574 +msgid ":pep:`243` - Module Repository Upload Mechanism" +msgstr ":pep:`243` - 模块仓库上传机制" + +#: ../../whatsnew/2.1.rst:574 +msgid "" +"Written by Sean Reifschneider, this draft PEP describes a proposed mechanism" +" for uploading Python packages to a central server." +msgstr "由 Sean Reifschneider 撰写,这个 PEP 草案描述了用于将 Python 软件包上传到一个中心服务器的建议机制。" + +#: ../../whatsnew/2.1.rst:581 +msgid "New and Improved Modules" +msgstr "新增和改进的模块" + +#: ../../whatsnew/2.1.rst:583 +msgid "" +"Ka-Ping Yee contributed two new modules: :mod:`inspect.py`, a module for " +"getting information about live Python code, and :mod:`pydoc.py`, a module " +"for interactively converting docstrings to HTML or text. As a bonus, " +":file:`Tools/scripts/pydoc`, which is now automatically installed, uses " +":mod:`pydoc.py` to display documentation given a Python module, package, or " +"class name. For example, ``pydoc xml.dom`` displays the following::" +msgstr "" + +#: ../../whatsnew/2.1.rst:605 +msgid "" +":file:`pydoc` also includes a Tk-based interactive help browser. " +":file:`pydoc` quickly becomes addictive; try it out!" +msgstr ":file:`pydoc` 还包括一个基于 Tk 的交互式帮助浏览器。:file:`pydoc` 很快会让人上瘾;试试看!" + +#: ../../whatsnew/2.1.rst:608 +msgid "" +"Two different modules for unit testing were added to the standard library. " +"The :mod:`doctest` module, contributed by Tim Peters, provides a testing " +"framework based on running embedded examples in docstrings and comparing the" +" results against the expected output. PyUnit, contributed by Steve Purcell," +" is a unit testing framework inspired by JUnit, which was in turn an " +"adaptation of Kent Beck's Smalltalk testing framework. See " +"http://pyunit.sourceforge.net/ for more information about PyUnit." +msgstr "" + +#: ../../whatsnew/2.1.rst:616 +msgid "" +"The :mod:`difflib` module contains a class, :class:`SequenceMatcher`, which " +"compares two sequences and computes the changes required to transform one " +"sequence into the other. For example, this module can be used to write a " +"tool similar to the Unix :program:`diff` program, and in fact the sample " +"program :file:`Tools/scripts/ndiff.py` demonstrates how to write such a " +"script." +msgstr "" + +#: ../../whatsnew/2.1.rst:622 +msgid "" +":mod:`curses.panel`, a wrapper for the panel library, part of ncurses and of" +" SYSV curses, was contributed by Thomas Gellekum. The panel library " +"provides windows with the additional feature of depth. Windows can be moved " +"higher or lower in the depth ordering, and the panel library figures out " +"where panels overlap and which sections are visible." +msgstr "" +":mod:`curses.panel`,是 ncurses 和 SYSV curses 一部分的 panel 库的包装器,由 Thomas " +"Gellekum 贡献。panel 库为窗口提供了深度特性。窗口可以在深度顺序中向上或向下移动,panel 库会计算出面板的重叠位置和哪些部分是可见的。" + +#: ../../whatsnew/2.1.rst:628 +msgid "" +"The PyXML package has gone through a few releases since Python 2.0, and " +"Python 2.1 includes an updated version of the :mod:`xml` package. Some of " +"the noteworthy changes include support for Expat 1.2 and later versions, the" +" ability for Expat parsers to handle files in any encoding supported by " +"Python, and various bugfixes for SAX, DOM, and the :mod:`minidom` module." +msgstr "" + +#: ../../whatsnew/2.1.rst:634 +msgid "" +"Ping also contributed another hook for handling uncaught exceptions. " +":func:`sys.excepthook` can be set to a callable object. When an exception " +"isn't caught by any :keyword:`try`...\\ :keyword:`except` blocks, the " +"exception will be passed to :func:`sys.excepthook`, which can then do " +"whatever it likes. At the Ninth Python Conference, Ping demonstrated an " +"application for this hook: printing an extended traceback that not only " +"lists the stack frames, but also lists the function arguments and the local " +"variables for each frame." +msgstr "" +"Ka-Ping Yee 还贡献了另一个用于处理未捕获异常的钩子。:func:`sys.excepthook` 可以设置为一个可调用对象。当异常未被任何 " +":keyword:`try`...\\ :keyword:`except` 块捕获时,异常将传递给 " +":func:`sys.excepthook`,它可以执行任何需要的操作。在第九届 Python " +"会议上,他演示了这个钩子的一个应用:打印扩展的回溯信息,不仅列出堆栈帧,还列出每个帧的函数参数和局部变量。" + +#: ../../whatsnew/2.1.rst:642 +msgid "" +"Various functions in the :mod:`time` module, such as :func:`asctime` and " +":func:`localtime`, require a floating point argument containing the time in " +"seconds since the epoch. The most common use of these functions is to work " +"with the current time, so the floating point argument has been made " +"optional; when a value isn't provided, the current time will be used. For " +"example, log file entries usually need a string containing the current time;" +" in Python 2.1, ``time.asctime()`` can be used, instead of the lengthier " +"``time.asctime(time.localtime(time.time()))`` that was previously required." +msgstr "" + +#: ../../whatsnew/2.1.rst:651 +msgid "This change was proposed and implemented by Thomas Wouters." +msgstr "此更改由 Thomas Wouters 提出并实现。" + +#: ../../whatsnew/2.1.rst:653 +msgid "" +"The :mod:`ftplib` module now defaults to retrieving files in passive mode, " +"because passive mode is more likely to work from behind a firewall. This " +"request came from the Debian bug tracking system, since other Debian " +"packages use :mod:`ftplib` to retrieve files and then don't work from behind" +" a firewall. It's deemed unlikely that this will cause problems for anyone, " +"because Netscape defaults to passive mode and few people complain, but if " +"passive mode is unsuitable for your application or network setup, call " +"``set_pasv(0)`` on FTP objects to disable passive mode." +msgstr "" +":mod:`ftplib` 模块现在默认以被动模式检索文件,因为被动模式在防火墙后面更可能正常工作。这一请求来自 Debian 错误跟踪系统,因为其他 " +"Debian 包使用 :mod:`ftplib` 来检索文件,但在防火墙后面无法正常工作。由于 Netscape " +"默认使用被动模式且几乎没有人抱怨,因此认为这不太可能会对任何人造成问题。但如果被动模式不适合你的应用程序或网络设置,可以调用 FTP 对象的 " +"``set_pasv(0)`` 来禁用被动模式。" + +#: ../../whatsnew/2.1.rst:662 +msgid "" +"Support for raw socket access has been added to the :mod:`socket` module, " +"contributed by Grant Edwards." +msgstr "对原始套接字访问的支持已添加到 :mod:`socket` 模块中,由 Grant Edwards 贡献。" + +#: ../../whatsnew/2.1.rst:665 +msgid "" +"The :mod:`pstats` module now contains a simple interactive statistics " +"browser for displaying timing profiles for Python programs, invoked when the" +" module is run as a script. Contributed by Eric S. Raymond." +msgstr "" +":mod:`pstats` 模块现在包含一个简单的交互式统计浏览器,用于显示 Python 程序的时间分析结果,当该模块作为脚本运行时调用。此功能由 " +"Eric S. Raymond 贡献。" + +#: ../../whatsnew/2.1.rst:669 +msgid "" +"A new implementation-dependent function, ``sys._getframe([depth])``, has " +"been added to return a given frame object from the current call stack. " +":func:`sys._getframe` returns the frame at the top of the call stack; if " +"the optional integer argument *depth* is supplied, the function returns the " +"frame that is *depth* calls below the top of the stack. For example, " +"``sys._getframe(1)`` returns the caller's frame object." +msgstr "" +"新增了一个依赖于实现的函数 " +"``sys._getframe([depth])``,用于从当前调用堆栈中返回给定的帧对象。:func:`sys._getframe`返回调用堆栈顶部的帧对象;如果提供了可选的整数参数" +" depth,则该函数返回堆栈顶部以下 depth 层的帧。例如,``sys._getframe(1)`` 返回调用者的帧对象。" + +#: ../../whatsnew/2.1.rst:676 +msgid "" +"This function is only present in CPython, not in Jython or the .NET " +"implementation. Use it for debugging, and resist the temptation to put it " +"into production code." +msgstr "这个函数仅存在于 CPython 中,不存在于 Jython 或 .NET 实现中。请将其用于调试,并避免将其放入生产代码中。" + +#: ../../whatsnew/2.1.rst:684 +msgid "Other Changes and Fixes" +msgstr "其他的改变和修正" + +#: ../../whatsnew/2.1.rst:686 +msgid "" +"There were relatively few smaller changes made in Python 2.1 due to the " +"shorter release cycle. A search through the CVS change logs turns up 117 " +"patches applied, and 136 bugs fixed; both figures are likely to be " +"underestimates. Some of the more notable changes are:" +msgstr "" +"由于较短的发布周期,Python 2.1 中的较小更改相对较少。通过搜索 CVS 更改日志,发现应用了 117 个补丁并修复了 136 " +"个错误;这两个数字都可能是低估的。一些较为显著的更改包括:" + +#: ../../whatsnew/2.1.rst:691 +msgid "" +"A specialized object allocator is now optionally available, that should be " +"faster than the system :func:`malloc` and have less memory overhead. The " +"allocator uses C's :func:`malloc` function to get large pools of memory, and" +" then fulfills smaller memory requests from these pools. It can be enabled " +"by providing the :option:`!--with-pymalloc` option to the " +":program:`configure` script; see :file:`Objects/obmalloc.c` for the " +"implementation details." +msgstr "" + +#: ../../whatsnew/2.1.rst:698 +msgid "" +"Authors of C extension modules should test their code with the object " +"allocator enabled, because some incorrect code may break, causing core dumps" +" at runtime. There are a bunch of memory allocation functions in Python's C " +"API that have previously been just aliases for the C library's " +":func:`malloc` and :func:`free`, meaning that if you accidentally called " +"mismatched functions, the error wouldn't be noticeable. When the object " +"allocator is enabled, these functions aren't aliases of :func:`malloc` and " +":func:`free` any more, and calling the wrong function to free memory will " +"get you a core dump. For example, if memory was allocated using " +":func:`PyMem_New`, it has to be freed using :func:`PyMem_Del`, not " +":func:`free`. A few modules included with Python fell afoul of this and had" +" to be fixed; doubtless there are more third-party modules that will have " +"the same problem." +msgstr "" + +#: ../../whatsnew/2.1.rst:711 +msgid "The object allocator was contributed by Vladimir Marangozov." +msgstr "对象分配器由 Vladimir Marangozov 贡献。" + +#: ../../whatsnew/2.1.rst:713 +msgid "" +"The speed of line-oriented file I/O has been improved because people often " +"complain about its lack of speed, and because it's often been used as a " +"naïve benchmark. The :meth:`readline` method of file objects has therefore " +"been rewritten to be much faster. The exact amount of the speedup will vary" +" from platform to platform depending on how slow the C library's " +":func:`getc` was, but is around 66%, and potentially much faster on some " +"particular operating systems. Tim Peters did much of the benchmarking and " +"coding for this change, motivated by a discussion in comp.lang.python." +msgstr "" + +#: ../../whatsnew/2.1.rst:722 +msgid "" +"A new module and method for file objects was also added, contributed by Jeff" +" Epler. The new method, :meth:`xreadlines`, is similar to the existing " +":func:`xrange` built-in. :func:`xreadlines` returns an opaque sequence " +"object that only supports being iterated over, reading a line on every " +"iteration but not reading the entire file into memory as the existing " +":meth:`readlines` method does. You'd use it like this::" +msgstr "" + +#: ../../whatsnew/2.1.rst:733 +msgid "" +"For a fuller discussion of the line I/O changes, see the python-dev summary " +"for January 1--15, 2001 at https://mail.python.org/pipermail/python-" +"dev/2001-January/." +msgstr "" +"有关行 I/O 更改的更详细讨论,请参阅 2001 年 1 月 1 日至 15 日的 python-dev 摘要 " +"https://mail.python.org/pipermail/python-dev/2001-January/ 。" + +#: ../../whatsnew/2.1.rst:736 +msgid "" +"A new method, :meth:`popitem`, was added to dictionaries to enable " +"destructively iterating through the contents of a dictionary; this can be " +"faster for large dictionaries because there's no need to construct a list " +"containing all the keys or values. ``D.popitem()`` removes a random ``(key, " +"value)`` pair from the dictionary ``D`` and returns it as a 2-tuple. This " +"was implemented mostly by Tim Peters and Guido van Rossum, after a " +"suggestion and preliminary patch by Moshe Zadka." +msgstr "" + +#: ../../whatsnew/2.1.rst:744 +msgid "" +"Modules can now control which names are imported when ``from module import " +"*`` is used, by defining an ``__all__`` attribute containing a list of names" +" that will be imported. One common complaint is that if the module imports " +"other modules such as :mod:`sys` or :mod:`string`, ``from module import *`` " +"will add them to the importing module's namespace. To fix this, simply list" +" the public names in ``__all__``::" +msgstr "" +"模块现在可以通过定义一个 ``__all__`` 属性来控制使用 ``from module import *`` 时导入的名称。 " +"一个常见的抱怨是,如果模块导入了其他模块,例如 :mod:`sys` 或 :mod:`string`,使用 ``from module import " +"*`` 会将它们添加到导入模块的命名空间中。 为了解决这个问题,只需在 ``__all__`` 模块中列出公共名称即可::" + +#: ../../whatsnew/2.1.rst:754 +msgid "" +"A stricter version of this patch was first suggested and implemented by Ben " +"Wolfson, but after some python-dev discussion, a weaker final version was " +"checked in." +msgstr "" +"此补丁的更严格版本最初由 Ben Wolfson 提出并实现,但在经过一些 python-dev 讨论后,最终版本被修改为较弱的版本并提交。" + +#: ../../whatsnew/2.1.rst:758 +msgid "" +"Applying :func:`repr` to strings previously used octal escapes for non-" +"printable characters; for example, a newline was ``'\\012'``. This was a " +"vestigial trace of Python's C ancestry, but today octal is of very little " +"practical use. Ka-Ping Yee suggested using hex escapes instead of octal " +"ones, and using the ``\\n``, ``\\t``, ``\\r`` escapes for the appropriate " +"characters, and implemented this new formatting." +msgstr "" +"以前对字符串应用 :func:`repr` 时,对于不可打印字符使用八进制转义符;例如,换行符表示为 ``'\\012'``。这是 Python 从 C" +" 语言继承而来的遗留特性,但如今八进制的实际用途非常有限。Ka-Ping Yee 建议使用十六进制转义符代替八进制,并使用 " +"``\\n``、``\\t``、``\\r`` 等转义符表示适当的字符,并实现了这种新的格式。" + +#: ../../whatsnew/2.1.rst:765 +msgid "" +"Syntax errors detected at compile-time can now raise exceptions containing " +"the filename and line number of the error, a pleasant side effect of the " +"compiler reorganization done by Jeremy Hylton." +msgstr "在编译时检测到的语法错误现在可以引发包含错误文件名和行号的异常,这是 Jeremy Hylton 进行的编译器重组的一个令人愉快的副作用。" + +#: ../../whatsnew/2.1.rst:769 +msgid "" +"C extensions which import other modules have been changed to use " +":func:`PyImport_ImportModule`, which means that they will use any import " +"hooks that have been installed. This is also encouraged for third-party " +"extensions that need to import some other module from C code." +msgstr "" + +#: ../../whatsnew/2.1.rst:774 +msgid "" +"The size of the Unicode character database was shrunk by another 340K thanks" +" to Fredrik Lundh." +msgstr "由于 Fredrik Lundh 的努力,Unicode 字符数据库的大小又减少了 340K。" + +#: ../../whatsnew/2.1.rst:777 +msgid "" +"Some new ports were contributed: MacOS X (by Steven Majewski), Cygwin (by " +"Jason Tishler); RISCOS (by Dietmar Schwertberger); Unixware 7 (by Billy G. " +"Allie)." +msgstr "" +"一些新移植版本被贡献:MacOS X(由 Steven Majewski 贡献),Cygwin(由 Jason Tishler 贡献),RISCOS(由" +" Dietmar Schwertberger 贡献),以及 Unixware 7(由 Billy G. Allie 贡献)。" + +#: ../../whatsnew/2.1.rst:781 +msgid "" +"And there's the usual list of minor bugfixes, minor memory leaks, docstring " +"edits, and other tweaks, too lengthy to be worth itemizing; see the CVS logs" +" for the full details if you want them." +msgstr "" +"此外还有一份由次要的程序错误修复、次要的内存泄漏、文档字符串编辑和其他调整组成的常规清单,因过于冗长而不值得逐项列出;如果你想了解完整细节请参阅 CVS" +" 日志。" + +#: ../../whatsnew/2.1.rst:789 +msgid "Acknowledgements" +msgstr "致谢" + +#: ../../whatsnew/2.1.rst:791 +msgid "" +"The author would like to thank the following people for offering suggestions" +" on various drafts of this article: Graeme Cross, David Goodger, Jay Graves," +" Michael Hudson, Marc-André Lemburg, Fredrik Lundh, Neil Schemenauer, Thomas" +" Wouters." +msgstr "" +"作者感谢以下人员对本文的各种草案提出建议: Graeme Cross, David Goodger, Jay Graves, Michael " +"Hudson, Marc-André Lemburg, Fredrik Lundh, Neil Schemenauer, Thomas Wouters." diff --git a/whatsnew/2.2.po b/whatsnew/2.2.po new file mode 100644 index 000000000..313664858 --- /dev/null +++ b/whatsnew/2.2.po @@ -0,0 +1,1757 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) 2001-2025, Python Software Foundation +# This file is distributed under the same license as the Python package. +# FIRST AUTHOR , YEAR. +# +# Translators: +# Fei Yin , 2018 +# ppcfish , 2019 +# Freesand Leo , 2024 +# Rafael Fontenelle , 2025 +# +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: Python 3.9\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2025-02-07 16:40+0000\n" +"PO-Revision-Date: 2017-02-16 23:42+0000\n" +"Last-Translator: Rafael Fontenelle , 2025\n" +"Language-Team: Chinese (China) (https://app.transifex.com/python-doc/teams/5390/zh_CN/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: zh_CN\n" +"Plural-Forms: nplurals=1; plural=0;\n" + +#: ../../whatsnew/2.2.rst:3 +msgid "What's New in Python 2.2" +msgstr "Python 2.2 有什么新变化" + +#: ../../whatsnew/2.2.rst:0 +msgid "Author" +msgstr "作者" + +#: ../../whatsnew/2.2.rst:5 +msgid "A.M. Kuchling" +msgstr "A.M. Kuchling" + +#: ../../whatsnew/2.2.rst:13 +msgid "Introduction" +msgstr "概述" + +#: ../../whatsnew/2.2.rst:15 +msgid "" +"This article explains the new features in Python 2.2.2, released on October " +"14, 2002. Python 2.2.2 is a bugfix release of Python 2.2, originally " +"released on December 21, 2001." +msgstr "" +"本文本介绍了 Python 2.2.2 的新增特性,该版本发布于 2002 年 10 月 14日。 Python 2.2.2 是 Python 2.2 " +"的问题修正发布版,最初发布于 2001 年 12 月 21 日。" + +#: ../../whatsnew/2.2.rst:19 +msgid "" +"Python 2.2 can be thought of as the \"cleanup release\". There are some " +"features such as generators and iterators that are completely new, but most " +"of the changes, significant and far-reaching though they may be, are aimed " +"at cleaning up irregularities and dark corners of the language design." +msgstr "" +"Python 2.2 可以被看作是 \"清理发布版\"。 " +"有一些特性如生成器和迭代器等是全新的,但大多数变化,尽管可能是重大而深远的,都是为了清理语言设计中的不规范和阴暗角落。" + +#: ../../whatsnew/2.2.rst:24 +msgid "" +"This article doesn't attempt to provide a complete specification of the new " +"features, but instead provides a convenient overview. For full details, you" +" should refer to the documentation for Python 2.2, such as the `Python " +"Library Reference `_ and the " +"`Python Reference Manual `_. If " +"you want to understand the complete implementation and design rationale for " +"a change, refer to the PEP for a particular new feature." +msgstr "" +"本文并不试图提供对新特性的完整规范说明,而是提供一个便捷的概览。 要获取全部细节,你应该参阅 Python 2.2 的文档,比如 `Python 库参考" +" `_ 和 `Python 参考指南 " +"`_。 " +"如果你想要了解某项更改的完整实现和设计理念,请参阅特定新特性的 PEP。" + +#: ../../whatsnew/2.2.rst:43 +msgid "PEPs 252 and 253: Type and Class Changes" +msgstr "PEP 252 和 253:类型和类的修改" + +#: ../../whatsnew/2.2.rst:45 +msgid "" +"The largest and most far-reaching changes in Python 2.2 are to Python's " +"model of objects and classes. The changes should be backward compatible, so" +" it's likely that your code will continue to run unchanged, but the changes " +"provide some amazing new capabilities. Before beginning this, the longest " +"and most complicated section of this article, I'll provide an overview of " +"the changes and offer some comments." +msgstr "" +"Python 2.2 中最大且影响最深远的改变是针对 Python 的对象和类模型。 " +"这些变化应该是向下兼容的,因此你的代码将能继续运行而无需修改,但这些变化提供了一些很棒的新功能。 " +"在开始本文最长和最复杂的部分之前,我提供对这些变化的概览并附带一些注释。" + +#: ../../whatsnew/2.2.rst:52 +msgid "" +"A long time ago I wrote a Web page listing flaws in Python's design. One of" +" the most significant flaws was that it's impossible to subclass Python " +"types implemented in C. In particular, it's not possible to subclass built-" +"in types, so you can't just subclass, say, lists in order to add a single " +"useful method to them. The :mod:`UserList` module provides a class that " +"supports all of the methods of lists and that can be subclassed further, but" +" there's lots of C code that expects a regular Python list and won't accept " +"a :class:`UserList` instance." +msgstr "" + +#: ../../whatsnew/2.2.rst:61 +msgid "" +"Python 2.2 fixes this, and in the process adds some exciting new " +"capabilities. A brief summary:" +msgstr "Python 2.2 修正了此问题,并在此过程中添加了一些令人激动的新功能。 简明概述如下:" + +#: ../../whatsnew/2.2.rst:64 +msgid "" +"You can subclass built-in types such as lists and even integers, and your " +"subclasses should work in every place that requires the original type." +msgstr "你可以继承内置类型,例如列表和整数,并且你的子类应该在任何需要原始类型的地方正常工作。这使得 Python 的面向对象编程更加灵活和强大。" + +#: ../../whatsnew/2.2.rst:67 +msgid "" +"It's now possible to define static and class methods, in addition to the " +"instance methods available in previous versions of Python." +msgstr "现在,除了之前版本的 Python 中可用的实例方法外,还可以定义静态方法和类方法。这使得你可以更灵活地组织类的行为。" + +#: ../../whatsnew/2.2.rst:70 +msgid "" +"It's also possible to automatically call methods on accessing or setting an " +"instance attribute by using a new mechanism called :dfn:`properties`. Many " +"uses of :meth:`__getattr__` can be rewritten to use properties instead, " +"making the resulting code simpler and faster. As a small side benefit, " +"attributes can now have docstrings, too." +msgstr "" + +#: ../../whatsnew/2.2.rst:76 +msgid "" +"The list of legal attributes for an instance can be limited to a particular " +"set using :dfn:`slots`, making it possible to safeguard against typos and " +"perhaps make more optimizations possible in future versions of Python." +msgstr "可以使用 __slots__ 限制实例的合法属性列表,从而防止拼写错误,并且在未来的 Python 版本中可能进行更多的优化。" + +#: ../../whatsnew/2.2.rst:80 +msgid "" +"Some users have voiced concern about all these changes. Sure, they say, the" +" new features are neat and lend themselves to all sorts of tricks that " +"weren't possible in previous versions of Python, but they also make the " +"language more complicated. Some people have said that they've always " +"recommended Python for its simplicity, and feel that its simplicity is being" +" lost." +msgstr "" +"一些用户对这些变化表示担忧。确实,他们说,新功能很棒,可以实现以前版本的 Python " +"无法做到的各种技巧,但它们也使语言变得更加复杂。一些人表示,他们一直推荐 Python 是因为它的简单性,现在感觉这种简单性正在丧失。" + +#: ../../whatsnew/2.2.rst:86 +msgid "" +"Personally, I think there's no need to worry. Many of the new features are " +"quite esoteric, and you can write a lot of Python code without ever needed " +"to be aware of them. Writing a simple class is no more difficult than it " +"ever was, so you don't need to bother learning or teaching them unless " +"they're actually needed. Some very complicated tasks that were previously " +"only possible from C will now be possible in pure Python, and to my mind " +"that's all for the better." +msgstr "" +"个人而言,我认为没有必要担心。许多新功能相当深奥,你可以编写大量 Python " +"代码而不需要了解它们。编写一个简单的类并不比以前更难,因此除非确实需要,否则你不必费心去学习或教授这些新功能。一些以前只有在 C " +"语言中才能实现的非常复杂的任务,现在可以用纯 Python 实现,在我看来,这一切都更好了。" + +#: ../../whatsnew/2.2.rst:93 +msgid "" +"I'm not going to attempt to cover every single corner case and small change " +"that were required to make the new features work. Instead this section will" +" paint only the broad strokes. See section :ref:`sect-rellinks`, \"Related " +"Links\", for further sources of information about Python 2.2's new object " +"model." +msgstr "" +"我不会尝试涵盖所有为了使新功能生效而需要的每一个边缘情况和小改动。相反,本节将只勾勒出大致的轮廓。有关 Python 2.2 " +"新对象模型的更多信息,请参见 :ref:`sect-rellinks` 的“相关链接”部分。" + +#: ../../whatsnew/2.2.rst:100 +msgid "Old and New Classes" +msgstr "旧式类和新式类" + +#: ../../whatsnew/2.2.rst:102 +msgid "" +"First, you should know that Python 2.2 really has two kinds of classes: " +"classic or old-style classes, and new-style classes. The old-style class " +"model is exactly the same as the class model in earlier versions of Python." +" All the new features described in this section apply only to new-style " +"classes. This divergence isn't intended to last forever; eventually old-" +"style classes will be dropped, possibly in Python 3.0." +msgstr "" +"首先,你应该知道 Python 2.2 实际上有两种类型的类:经典类(或旧式类)和新式类。旧式类模型与早期版本的 Python " +"中的类模型完全相同。本节描述的所有新功能仅适用于新式类。这种分歧并不是永久的;最终,旧式类将被淘汰,可能在 Python 3.0 中被移除。" + +#: ../../whatsnew/2.2.rst:109 +msgid "" +"So how do you define a new-style class? You do it by subclassing an " +"existing new-style class. Most of Python's built-in types, such as " +"integers, lists, dictionaries, and even files, are new-style classes now. A" +" new-style class named :class:`object`, the base class for all built-in " +"types, has also been added so if no built-in type is suitable, you can just " +"subclass :class:`object`::" +msgstr "" +"那么如何定义一个新式类呢?你可以通过继承一个现有的新式类来实现。大多数 Python " +"内置类型,如整数、列表、字典,甚至文件,现在都是新式类。此外,还添加了一个名为 :class:`object` " +"的新式类,它是所有内置类型的基类,因此如果没有合适的内置类型,你可以直接继承 :class:`object` 类:" + +#: ../../whatsnew/2.2.rst:121 +msgid "" +"This means that :keyword:`class` statements that don't have any base classes" +" are always classic classes in Python 2.2. (Actually you can also change " +"this by setting a module-level variable named :attr:`__metaclass__` --- see " +":pep:`253` for the details --- but it's easier to just subclass " +":class:`object`.)" +msgstr "" + +#: ../../whatsnew/2.2.rst:126 +msgid "" +"The type objects for the built-in types are available as built-ins, named " +"using a clever trick. Python has always had built-in functions named " +":func:`int`, :func:`float`, and :func:`str`. In 2.2, they aren't functions " +"any more, but type objects that behave as factories when called. ::" +msgstr "" +"内置类型的类型对象在 Python 2.2 中作为内置对象提供,使用了一种巧妙的技巧命名。Python 一直有名为 " +":func:`int`、:func:`float` 和 :func:`str` 的内置函数。在 Python 2.2 " +"中,它们不再是函数,而是作为被调用时表现为工厂的类型对象。" + +#: ../../whatsnew/2.2.rst:136 +msgid "" +"To make the set of types complete, new type objects such as :func:`dict` and" +" :func:`file` have been added. Here's a more interesting example, adding a " +":meth:`lock` method to file objects::" +msgstr "" + +#: ../../whatsnew/2.2.rst:146 +msgid "" +"The now-obsolete :mod:`posixfile` module contained a class that emulated all" +" of a file object's methods and also added a :meth:`lock` method, but this " +"class couldn't be passed to internal functions that expected a built-in " +"file, something which is possible with our new :class:`LockableFile`." +msgstr "" + +#: ../../whatsnew/2.2.rst:153 +msgid "Descriptors" +msgstr "描述器" + +#: ../../whatsnew/2.2.rst:155 +msgid "" +"In previous versions of Python, there was no consistent way to discover what" +" attributes and methods were supported by an object. There were some " +"informal conventions, such as defining :attr:`__members__` and " +":attr:`__methods__` attributes that were lists of names, but often the " +"author of an extension type or a class wouldn't bother to define them. You " +"could fall back on inspecting the :attr:`~object.__dict__` of an object, but" +" when class inheritance or an arbitrary :meth:`__getattr__` hook were in use" +" this could still be inaccurate." +msgstr "" + +#: ../../whatsnew/2.2.rst:163 +msgid "" +"The one big idea underlying the new class model is that an API for " +"describing the attributes of an object using :dfn:`descriptors` has been " +"formalized. Descriptors specify the value of an attribute, stating whether " +"it's a method or a field. With the descriptor API, static methods and class" +" methods become possible, as well as more exotic constructs." +msgstr "" +"新类模型的一个核心理念是正式化了使用描述符来描述对象属性的 API。描述符指定属性的值,说明它是方法还是字段。通过描述符 " +"API,静态方法和类方法成为可能,以及其他更复杂的构造。" + +#: ../../whatsnew/2.2.rst:169 +msgid "" +"Attribute descriptors are objects that live inside class objects, and have a" +" few attributes of their own:" +msgstr "属性描述符是存在于类对象内部的对象,它们自身具有一些属性。描述符协议由三个主要方法组成:" + +#: ../../whatsnew/2.2.rst:172 +msgid ":attr:`~definition.__name__` is the attribute's name." +msgstr ":attr:`~definition.__name__` 是属性的名称。" + +#: ../../whatsnew/2.2.rst:174 +msgid ":attr:`__doc__` is the attribute's docstring." +msgstr ":attr:`__doc__` 是属性的文档字符串。" + +#: ../../whatsnew/2.2.rst:176 +msgid "" +"``__get__(object)`` is a method that retrieves the attribute value from " +"*object*." +msgstr "``__get__(object)`` 是一个从 *object* 中提取属性值的方法。" + +#: ../../whatsnew/2.2.rst:179 +msgid "``__set__(object, value)`` sets the attribute on *object* to *value*." +msgstr "``__set__(object, value)`` 将 *object* 上的属性设为 *value*。" + +#: ../../whatsnew/2.2.rst:181 +msgid "" +"``__delete__(object, value)`` deletes the *value* attribute of *object*." +msgstr "``__delete__(object, value)`` 将删除 *object* 的 *value* 属性。" + +#: ../../whatsnew/2.2.rst:183 +msgid "" +"For example, when you write ``obj.x``, the steps that Python actually " +"performs are::" +msgstr "例如,当你写下 ``obj.x``,Python 实际要执行的步骤是::" + +#: ../../whatsnew/2.2.rst:189 +msgid "" +"For methods, :meth:`descriptor.__get__` returns a temporary object that's " +"callable, and wraps up the instance and the method to be called on it. This " +"is also why static methods and class methods are now possible; they have " +"descriptors that wrap up just the method, or the method and the class. As a" +" brief explanation of these new kinds of methods, static methods aren't " +"passed the instance, and therefore resemble regular functions. Class " +"methods are passed the class of the object, but not the object itself. " +"Static and class methods are defined like this::" +msgstr "" + +#: ../../whatsnew/2.2.rst:207 +msgid "" +"The :func:`staticmethod` function takes the function :func:`f`, and returns " +"it wrapped up in a descriptor so it can be stored in the class object. You " +"might expect there to be special syntax for creating such methods (``def " +"static f``, ``defstatic f()``, or something like that) but no such syntax " +"has been defined yet; that's been left for future versions of Python." +msgstr "" + +#: ../../whatsnew/2.2.rst:213 +msgid "" +"More new features, such as slots and properties, are also implemented as new" +" kinds of descriptors, and it's not difficult to write a descriptor class " +"that does something novel. For example, it would be possible to write a " +"descriptor class that made it possible to write Eiffel-style preconditions " +"and postconditions for a method. A class that used this feature might be " +"defined like this::" +msgstr "" +"更多的新功能,如 __slots__ " +"和属性,也作为新类型的描述符实现。编写一个实现新功能的描述符类并不困难。例如,可以编写一个描述符类,使其能够为方法编写类似 Eiffel " +"风格的前置条件和后置条件。使用该功能的类可能定义如下:" + +#: ../../whatsnew/2.2.rst:235 +msgid "" +"Note that a person using the new :func:`eiffelmethod` doesn't have to " +"understand anything about descriptors. This is why I think the new features" +" don't increase the basic complexity of the language. There will be a few " +"wizards who need to know about it in order to write :func:`eiffelmethod` or " +"the ZODB or whatever, but most users will just write code on top of the " +"resulting libraries and ignore the implementation details." +msgstr "" + +#: ../../whatsnew/2.2.rst:244 +msgid "Multiple Inheritance: The Diamond Rule" +msgstr "多重继承:钻石规则" + +#: ../../whatsnew/2.2.rst:246 +msgid "" +"Multiple inheritance has also been made more useful through changing the " +"rules under which names are resolved. Consider this set of classes (diagram" +" taken from :pep:`253` by Guido van Rossum)::" +msgstr "" +"通过改变名称解析规则,多重继承也变得更加有用。 请看下面这组类(图表摘自 :pep:`253` ,作者 Guido van Rossum):" + +#: ../../whatsnew/2.2.rst:264 +msgid "" +"The lookup rule for classic classes is simple but not very smart; the base " +"classes are searched depth-first, going from left to right. A reference to " +":meth:`D.save` will search the classes :class:`D`, :class:`B`, and then " +":class:`A`, where :meth:`save` would be found and returned. :meth:`C.save` " +"would never be found at all. This is bad, because if :class:`C`'s " +":meth:`save` method is saving some internal state specific to :class:`C`, " +"not calling it will result in that state never getting saved." +msgstr "" + +#: ../../whatsnew/2.2.rst:272 +msgid "" +"New-style classes follow a different algorithm that's a bit more complicated" +" to explain, but does the right thing in this situation. (Note that Python " +"2.3 changes this algorithm to one that produces the same results in most " +"cases, but produces more useful results for really complicated inheritance " +"graphs.)" +msgstr "" +"新式类遵循一种不同的算法,虽然解释起来有点复杂,但在这种情况下能做正确的事情。(请注意,Python 2.3 " +"改变了这个算法,在大多数情况下会产生相同的结果,但对于非常复杂的继承图会产生更有用的结果。)" + +#: ../../whatsnew/2.2.rst:277 +msgid "" +"List all the base classes, following the classic lookup rule and include a " +"class multiple times if it's visited repeatedly. In the above example, the " +"list of visited classes is [:class:`D`, :class:`B`, :class:`A`, :class:`C`, " +":class:`A`]." +msgstr "" + +#: ../../whatsnew/2.2.rst:282 +msgid "" +"Scan the list for duplicated classes. If any are found, remove all but one " +"occurrence, leaving the *last* one in the list. In the above example, the " +"list becomes [:class:`D`, :class:`B`, :class:`C`, :class:`A`] after dropping" +" duplicates." +msgstr "" + +#: ../../whatsnew/2.2.rst:287 +msgid "" +"Following this rule, referring to :meth:`D.save` will return :meth:`C.save`," +" which is the behaviour we're after. This lookup rule is the same as the " +"one followed by Common Lisp. A new built-in function, :func:`super`, " +"provides a way to get at a class's superclasses without having to " +"reimplement Python's algorithm. The most commonly used form will be " +"``super(class, obj)``, which returns a bound superclass object (not the " +"actual class object). This form will be used in methods to call a method in" +" the superclass; for example, :class:`D`'s :meth:`save` method would look " +"like this::" +msgstr "" + +#: ../../whatsnew/2.2.rst:303 +msgid "" +":func:`super` can also return unbound superclass objects when called as " +"``super(class)`` or ``super(class1, class2)``, but this probably won't often" +" be useful." +msgstr "" +":func:`super` 在以 ``super(class)`` 或 ``super(class1, class2)`` " +"形式调用时也可以返回未绑定的超类对象,但这可能并不常用。" + +#: ../../whatsnew/2.2.rst:309 +msgid "Attribute Access" +msgstr "属性访问" + +#: ../../whatsnew/2.2.rst:311 +msgid "" +"A fair number of sophisticated Python classes define hooks for attribute " +"access using :meth:`__getattr__`; most commonly this is done for " +"convenience, to make code more readable by automatically mapping an " +"attribute access such as ``obj.parent`` into a method call such as " +"``obj.get_parent``. Python 2.2 adds some new ways of controlling attribute " +"access." +msgstr "" + +#: ../../whatsnew/2.2.rst:317 +msgid "" +"First, ``__getattr__(attr_name)`` is still supported by new-style classes, " +"and nothing about it has changed. As before, it will be called when an " +"attempt is made to access ``obj.foo`` and no attribute named ``foo`` is " +"found in the instance's dictionary." +msgstr "" +"首先,新式类仍然支持 ``__getattr__(attr_name)``,关于它的任何内容都没有改变。 和以前一样,当试图访问 " +"``obj.foo`` 时,如果在实例的字典中找不到名为 ``foo`` 的属性,就会调用它。" + +#: ../../whatsnew/2.2.rst:322 +msgid "" +"New-style classes also support a new method, " +"``__getattribute__(attr_name)``. The difference between the two methods is " +"that :meth:`__getattribute__` is *always* called whenever any attribute is " +"accessed, while the old :meth:`__getattr__` is only called if ``foo`` isn't " +"found in the instance's dictionary." +msgstr "" + +#: ../../whatsnew/2.2.rst:328 +msgid "" +"However, Python 2.2's support for :dfn:`properties` will often be a simpler " +"way to trap attribute references. Writing a :meth:`__getattr__` method is " +"complicated because to avoid recursion you can't use regular attribute " +"accesses inside them, and instead have to mess around with the contents of " +":attr:`~object.__dict__`. :meth:`__getattr__` methods also end up being " +"called by Python when it checks for other methods such as :meth:`__repr__` " +"or :meth:`__coerce__`, and so have to be written with this in mind. Finally," +" calling a function on every attribute access results in a sizable " +"performance loss." +msgstr "" + +#: ../../whatsnew/2.2.rst:337 +msgid "" +":class:`property` is a new built-in type that packages up three functions " +"that get, set, or delete an attribute, and a docstring. For example, if you" +" want to define a :attr:`size` attribute that's computed, but also settable," +" you could write::" +msgstr "" + +#: ../../whatsnew/2.2.rst:357 +msgid "" +"That is certainly clearer and easier to write than a pair of " +":meth:`__getattr__`/:meth:`__setattr__` methods that check for the " +":attr:`size` attribute and handle it specially while retrieving all other " +"attributes from the instance's :attr:`~object.__dict__`. Accesses to " +":attr:`size` are also the only ones which have to perform the work of " +"calling a function, so references to other attributes run at their usual " +"speed." +msgstr "" + +#: ../../whatsnew/2.2.rst:364 +msgid "" +"Finally, it's possible to constrain the list of attributes that can be " +"referenced on an object using the new :attr:`~object.__slots__` class " +"attribute. Python objects are usually very dynamic; at any time it's " +"possible to define a new attribute on an instance by just doing " +"``obj.new_attr=1``. A new-style class can define a class attribute named " +":attr:`~object.__slots__` to limit the legal attributes to a particular set" +" of names. An example will make this clear::" +msgstr "" +"最后,可以使用新的类属性 :attr:`~object.__slots__` 来限制对象上可以引用的属性列表。Python " +"对象通常非常动态,可以随时通过简单地 ``obj.new_attr=1`` 来定义一个新属性。新式类可以定义一个名为 " +":attr:`~object.__slots__` 的类属性,以将合法属性限制为特定的一组名称。一个例子可以更清楚地说明这一点:" + +#: ../../whatsnew/2.2.rst:385 +msgid "" +"Note how you get an :exc:`AttributeError` on the attempt to assign to an " +"attribute not listed in :attr:`~object.__slots__`." +msgstr "" +"注意,当尝试为未列在 :attr:`~object.__slots__` 中的属性赋值时,会引发 :exc:`AttributeError`。" + +#: ../../whatsnew/2.2.rst:392 +msgid "Related Links" +msgstr "相关链接" + +#: ../../whatsnew/2.2.rst:394 +msgid "" +"This section has just been a quick overview of the new features, giving " +"enough of an explanation to start you programming, but many details have " +"been simplified or ignored. Where should you go to get a more complete " +"picture?" +msgstr "本节只是对新特性进行了简要概述,提供了足够的解释以帮助你开始编程,但许多细节已被简化或忽略。想要获得更全面的了解,你可以去哪里呢?" + +#: ../../whatsnew/2.2.rst:398 +msgid "" +"https://docs.python.org/dev/howto/descriptor.html is a lengthy tutorial " +"introduction to the descriptor features, written by Guido van Rossum. If my " +"description has whetted your appetite, go read this tutorial next, because " +"it goes into much more detail about the new features while still remaining " +"quite easy to read." +msgstr "" + +#: ../../whatsnew/2.2.rst:403 +msgid "" +"Next, there are two relevant PEPs, :pep:`252` and :pep:`253`. :pep:`252` is" +" titled \"Making Types Look More Like Classes\", and covers the descriptor " +"API. :pep:`253` is titled \"Subtyping Built-in Types\", and describes the " +"changes to type objects that make it possible to subtype built-in objects. " +":pep:`253` is the more complicated PEP of the two, and at a few points the " +"necessary explanations of types and meta-types may cause your head to " +"explode. Both PEPs were written and implemented by Guido van Rossum, with " +"substantial assistance from the rest of the Zope Corp. team." +msgstr "" +"接下来,有两个相关的 PEP,即 :pep:`252` 和 :pep:`253`。:pep:`252` 标题为“使类型更像类”,涵盖了描述符 " +"API。:pep:`253` 标题为“内置类型的子类型化”,描述了使内置对象可以进行子类型化的类型对象的更改。:pep:`253` 是这两个 PEP " +"中更复杂的一个,在某些点上,必要的类型和元类型解释可能会让人感到头疼。两个 PEP 都由 Guido van Rossum 编写和实现,并得到了 " +"Zope Corp. 团队其他成员的实质性协助。" + +#: ../../whatsnew/2.2.rst:412 +msgid "" +"Finally, there's the ultimate authority: the source code. Most of the " +"machinery for the type handling is in :file:`Objects/typeobject.c`, but you " +"should only resort to it after all other avenues have been exhausted, " +"including posting a question to python-list or python-dev." +msgstr "" +"最后,还有最终的权威来源:源代码。大部分类型处理的机制都在 :file:`Objects/typeobject.c` " +"中,但只有在所有其他途径都用尽之后,包括在 python-list 或 python-dev 上发布问题后,才应求助于源代码。" + +#: ../../whatsnew/2.2.rst:421 +msgid "PEP 234: Iterators" +msgstr "PEP 234: 迭代器" + +#: ../../whatsnew/2.2.rst:423 +msgid "" +"Another significant addition to 2.2 is an iteration interface at both the C " +"and Python levels. Objects can define how they can be looped over by " +"callers." +msgstr "Python 2.2 的另一个重要新增功能是在 C 和 Python 两个层面上引入了迭代接口。对象可以定义如何被调用者循环遍历。" + +#: ../../whatsnew/2.2.rst:426 +msgid "" +"In Python versions up to 2.1, the usual way to make ``for item in obj`` work" +" is to define a :meth:`__getitem__` method that looks something like this::" +msgstr "" + +#: ../../whatsnew/2.2.rst:432 +msgid "" +":meth:`__getitem__` is more properly used to define an indexing operation on" +" an object so that you can write ``obj[5]`` to retrieve the sixth element. " +"It's a bit misleading when you're using this only to support :keyword:`for` " +"loops. Consider some file-like object that wants to be looped over; the " +"*index* parameter is essentially meaningless, as the class probably assumes " +"that a series of :meth:`__getitem__` calls will be made with *index* " +"incrementing by one each time. In other words, the presence of the " +":meth:`__getitem__` method doesn't mean that using ``file[5]`` to randomly " +"access the sixth element will work, though it really should." +msgstr "" + +#: ../../whatsnew/2.2.rst:442 +msgid "" +"In Python 2.2, iteration can be implemented separately, and " +":meth:`__getitem__` methods can be limited to classes that really do support" +" random access. The basic idea of iterators is simple. A new built-in " +"function, ``iter(obj)`` or ``iter(C, sentinel)``, is used to get an " +"iterator. ``iter(obj)`` returns an iterator for the object *obj*, while " +"``iter(C, sentinel)`` returns an iterator that will invoke the callable " +"object *C* until it returns *sentinel* to signal that the iterator is done." +msgstr "" + +#: ../../whatsnew/2.2.rst:450 +msgid "" +"Python classes can define an :meth:`__iter__` method, which should create " +"and return a new iterator for the object; if the object is its own iterator," +" this method can just return ``self``. In particular, iterators will " +"usually be their own iterators. Extension types implemented in C can " +"implement a :c:member:`~PyTypeObject.tp_iter` function in order to return an" +" iterator, and extension types that want to behave as iterators can define a" +" :c:member:`~PyTypeObject.tp_iternext` function." +msgstr "" + +#: ../../whatsnew/2.2.rst:457 +msgid "" +"So, after all this, what do iterators actually do? They have one required " +"method, :meth:`next`, which takes no arguments and returns the next value. " +"When there are no more values to be returned, calling :meth:`next` should " +"raise the :exc:`StopIteration` exception. ::" +msgstr "" +"总结一下,迭代器实际上做什么?它们有一个必需的方法 :meth:`next`,该方法不接受任何参数并返回下一个值。当没有更多的值可以返回时,调用 " +":meth:`next` 应该引发 :exc:`StopIteration` 异常。以下是一个简单的例子来说明迭代器的工作原理:" + +#: ../../whatsnew/2.2.rst:478 +msgid "" +"In 2.2, Python's :keyword:`for` statement no longer expects a sequence; it " +"expects something for which :func:`iter` will return an iterator. For " +"backward compatibility and convenience, an iterator is automatically " +"constructed for sequences that don't implement :meth:`__iter__` or a " +":c:member:`~PyTypeObject.tp_iter` slot, so ``for i in [1,2,3]`` will still " +"work. Wherever the Python interpreter loops over a sequence, it's been " +"changed to use the iterator protocol. This means you can do things like " +"this::" +msgstr "" + +#: ../../whatsnew/2.2.rst:492 +msgid "" +"Iterator support has been added to some of Python's basic types. Calling " +":func:`iter` on a dictionary will return an iterator which loops over its " +"keys::" +msgstr "迭代器支持已被添加到Python的一些基本类型中。对字典调用 :func:`iter` 会返回一个迭代器,该迭代器遍历字典的键,如下所示:" + +#: ../../whatsnew/2.2.rst:512 +msgid "" +"That's just the default behaviour. If you want to iterate over keys, " +"values, or key/value pairs, you can explicitly call the :meth:`iterkeys`, " +":meth:`itervalues`, or :meth:`iteritems` methods to get an appropriate " +"iterator. In a minor related change, the :keyword:`in` operator now works on" +" dictionaries, so ``key in dict`` is now equivalent to " +"``dict.has_key(key)``." +msgstr "" + +#: ../../whatsnew/2.2.rst:518 +msgid "" +"Files also provide an iterator, which calls the :meth:`readline` method " +"until there are no more lines in the file. This means you can now read each" +" line of a file using code like this::" +msgstr "" +"文件也提供了一个迭代器,它会调用 :meth:`readline` " +"方法,直到文件中没有更多的行。这意味着你现在可以使用类似这样的代码来读取文件的每一行:" + +#: ../../whatsnew/2.2.rst:526 +msgid "" +"Note that you can only go forward in an iterator; there's no way to get the " +"previous element, reset the iterator, or make a copy of it. An iterator " +"object could provide such additional capabilities, but the iterator protocol" +" only requires a :meth:`next` method." +msgstr "" +"请注意,你只能在迭代器中向前移动;没有办法获取前一个元素、重置迭代器或复制迭代器。一个迭代器对象可以提供这些额外的功能,但迭代器协议只要求有一个 " +":meth:`next` 方法。" + +#: ../../whatsnew/2.2.rst:535 +msgid ":pep:`234` - Iterators" +msgstr ":pep:`234` - 迭代器" + +#: ../../whatsnew/2.2.rst:535 +msgid "" +"Written by Ka-Ping Yee and GvR; implemented by the Python Labs crew, mostly" +" by GvR and Tim Peters." +msgstr "由 Ka-Ping Yee 和 GvR 撰写;由 Python Labs 小组(主要由 GvR 和 Tim Peters)实现。" + +#: ../../whatsnew/2.2.rst:542 +msgid "PEP 255: Simple Generators" +msgstr "PEP 255: 简单的生成器" + +#: ../../whatsnew/2.2.rst:544 +msgid "" +"Generators are another new feature, one that interacts with the introduction" +" of iterators." +msgstr "生成器是另一个新增特性,它是与迭代器的引入相互关联的。" + +#: ../../whatsnew/2.2.rst:547 +msgid "" +"You're doubtless familiar with how function calls work in Python or C. When" +" you call a function, it gets a private namespace where its local variables " +"are created. When the function reaches a :keyword:`return` statement, the " +"local variables are destroyed and the resulting value is returned to the " +"caller. A later call to the same function will get a fresh new set of local" +" variables. But, what if the local variables weren't thrown away on exiting " +"a function? What if you could later resume the function where it left off? " +"This is what generators provide; they can be thought of as resumable " +"functions." +msgstr "" +"你一定熟悉在Python或C语言中函数调用的工作方式。当你调用一个函数时,它会获得一个私有命名空间,在这个命名空间中创建其局部变量。当函数执行到 " +":keyword:`return` " +"语句时,这些局部变量会被销毁,并将结果值返回给调用者。稍后对同一个函数的调用将获得一套全新的局部变量。但,如果局部变量在函数退出时不被丢弃呢?如果你可以在函数停止的地方稍后恢复执行呢?这就是生成器所提供的功能;它们可以被视为可恢复的函数。" + +#: ../../whatsnew/2.2.rst:556 +msgid "Here's the simplest example of a generator function::" +msgstr "这里是一个生成器函数的最简示例::" + +#: ../../whatsnew/2.2.rst:562 +msgid "" +"A new keyword, :keyword:`yield`, was introduced for generators. Any " +"function containing a :keyword:`!yield` statement is a generator function; " +"this is detected by Python's bytecode compiler which compiles the function " +"specially as a result. Because a new keyword was introduced, generators " +"must be explicitly enabled in a module by including a ``from __future__ " +"import generators`` statement near the top of the module's source code. In " +"Python 2.3 this statement will become unnecessary." +msgstr "" +"一个新的关键字 :keyword:`yield` 被引入用于生成器。任何包含 :keyword:`!yield` " +"语句的函数都是生成器函数;这由Python的字节码编译器检测到,并因此对函数进行特殊编译。由于引入了一个新的关键字,生成器必须通过在模块的源代码顶部附近包含一条" +" ``from __future__ import generators`` 语句来显式启用。在Python 2.3中,这条语句将变得不再必要。" + +#: ../../whatsnew/2.2.rst:570 +msgid "" +"When you call a generator function, it doesn't return a single value; " +"instead it returns a generator object that supports the iterator protocol. " +"On executing the :keyword:`yield` statement, the generator outputs the value" +" of ``i``, similar to a :keyword:`return` statement. The big difference " +"between :keyword:`!yield` and a :keyword:`!return` statement is that on " +"reaching a :keyword:`!yield` the generator's state of execution is suspended" +" and local variables are preserved. On the next call to the generator's " +"``next()`` method, the function will resume executing immediately after the " +":keyword:`!yield` statement. (For complicated reasons, the " +":keyword:`!yield` statement isn't allowed inside the :keyword:`!try` block " +"of a :keyword:`try`...\\ :keyword:`finally` statement; read :pep:`255` for a" +" full explanation of the interaction between :keyword:`!yield` and " +"exceptions.)" +msgstr "" +"当你调用一个生成器函数时,它不会返回单个值;相反,它返回一个支持迭代器协议的生成器对象。在执行 :keyword:`yield` 语句时,生成器输出 " +"``i`` 的值,类似于 :keyword:`return` 语句。:keyword:`!yield` 和 :keyword:`!return` " +"语句之间的重大区别在于,当到达 :keyword:`!yield` 时,生成器的执行状态被挂起,并且局部变量被保留。在下一次调用生成器的 " +"``next()`` 方法时,函数将立即在 :keyword:`!yield` 语句之后恢复执行。(由于复杂的原因,:keyword:`!yield` " +"语句不允许在 :keyword:`try` ... :keyword:`finally` 语句的 :keyword:`!try` 块中使用;请阅读 " +":pep:`255` 以获得关于 :keyword:`!yield` 和异常交互的详细解释。)" + +#: ../../whatsnew/2.2.rst:583 +msgid "Here's a sample usage of the :func:`generate_ints` generator::" +msgstr "这里是 :func:`generate_ints` 生成器的用法示例::" + +#: ../../whatsnew/2.2.rst:600 +msgid "" +"You could equally write ``for i in generate_ints(5)``, or ``a,b,c = " +"generate_ints(3)``." +msgstr "" +"你可以等价地写成 ``for i in generate_ints(5)`` 或 ``a,b,c = generate_ints(3)``。" + +#: ../../whatsnew/2.2.rst:603 +msgid "" +"Inside a generator function, the :keyword:`return` statement can only be " +"used without a value, and signals the end of the procession of values; " +"afterwards the generator cannot return any further values. " +":keyword:`!return` with a value, such as ``return 5``, is a syntax error " +"inside a generator function. The end of the generator's results can also be" +" indicated by raising :exc:`StopIteration` manually, or by just letting the " +"flow of execution fall off the bottom of the function." +msgstr "" +"在生成器函数内部, :keyword:`return` " +"语句只能不带值使用,并表示值的生成过程结束;之后,生成器不能再返回任何值。在生成器函数内部,带值的 :keyword:`!return`,例如 " +"``return 5``,是语法错误。生成器结果的结束也可以通过手动引发 :exc:`StopIteration` " +"异常来指示,或者只是让执行流自然地从函数底部流出。" + +#: ../../whatsnew/2.2.rst:611 +msgid "" +"You could achieve the effect of generators manually by writing your own " +"class and storing all the local variables of the generator as instance " +"variables. For example, returning a list of integers could be done by " +"setting ``self.count`` to 0, and having the :meth:`next` method increment " +"``self.count`` and return it. However, for a moderately complicated " +"generator, writing a corresponding class would be much messier. " +":file:`Lib/test/test_generators.py` contains a number of more interesting " +"examples. The simplest one implements an in-order traversal of a tree using" +" generators recursively. ::" +msgstr "" +"你可以通过编写自己的类并将生成器的所有局部变量存储为实例变量,手动实现生成器的效果。例如,返回一个整数列表可以通过将 ``self.count`` " +"设置为0,并让 :meth:`next` 方法递增 ``self.count`` " +"并返回它。然而,对于一个中等复杂的生成器,编写一个相应的类将会更加混乱。:file:`Lib/test/test_generators.py` " +"包含了一些更有趣的例子。其中最简单的一个使用生成器递归实现了树的中序遍历:" + +#: ../../whatsnew/2.2.rst:629 +msgid "" +"Two other examples in :file:`Lib/test/test_generators.py` produce solutions " +"for the N-Queens problem (placing $N$ queens on an $NxN$ chess board so that" +" no queen threatens another) and the Knight's Tour (a route that takes a " +"knight to every square of an $NxN$ chessboard without visiting any square " +"twice)." +msgstr "" +"在 :file:`Lib/test/test_generators.py` " +"中还有另外两个例子,它们分别解决了N皇后问题(在$NxN$的棋盘上放置$N$个皇后,使得没有任何皇后威胁到其他皇后)和骑士巡游问题(在$NxN$的棋盘上,骑士访问每一个方格且不重复访问任何方格的路径)。" + +#: ../../whatsnew/2.2.rst:634 +msgid "" +"The idea of generators comes from other programming languages, especially " +"Icon (https://www.cs.arizona.edu/icon/), where the idea of generators is " +"central. In Icon, every expression and function call behaves like a " +"generator. One example from \"An Overview of the Icon Programming " +"Language\" at https://www.cs.arizona.edu/icon/docs/ipd266.htm gives an idea " +"of what this looks like::" +msgstr "" + +#: ../../whatsnew/2.2.rst:644 +msgid "" +"In Icon the :func:`find` function returns the indexes at which the substring" +" \"or\" is found: 3, 23, 33. In the :keyword:`if` statement, ``i`` is first" +" assigned a value of 3, but 3 is less than 5, so the comparison fails, and " +"Icon retries it with the second value of 23. 23 is greater than 5, so the " +"comparison now succeeds, and the code prints the value 23 to the screen." +msgstr "" + +#: ../../whatsnew/2.2.rst:650 +msgid "" +"Python doesn't go nearly as far as Icon in adopting generators as a central " +"concept. Generators are considered a new part of the core Python language, " +"but learning or using them isn't compulsory; if they don't solve any " +"problems that you have, feel free to ignore them. One novel feature of " +"Python's interface as compared to Icon's is that a generator's state is " +"represented as a concrete object (the iterator) that can be passed around to" +" other functions or stored in a data structure." +msgstr "" +"Python 并没有像 Icon 那样将生成器作为核心概念来采纳。生成器被认为是 Python " +"核心语言的一部分,但学习或使用它们并不是强制性的;如果它们不能解决你的问题,可以完全忽略它们。与 Icon 相比,Python " +"的一个新颖特性是生成器的状态表示为一个具体对象(迭代器),该对象可以传递给其他函数或存储在数据结构中。" + +#: ../../whatsnew/2.2.rst:662 +msgid ":pep:`255` - Simple Generators" +msgstr ":pep:`255` - 简单生成器" + +#: ../../whatsnew/2.2.rst:662 +msgid "" +"Written by Neil Schemenauer, Tim Peters, Magnus Lie Hetland. Implemented " +"mostly by Neil Schemenauer and Tim Peters, with other fixes from the Python " +"Labs crew." +msgstr "" +"由 Neil Schemenauer, Tim Peters, Magnus Lie Hetland 撰写。 主要由 Neil Schemenauer " +"和 Tim Peters 实现,并包含来自 Python Labs 团队的修正。" + +#: ../../whatsnew/2.2.rst:669 +msgid "PEP 237: Unifying Long Integers and Integers" +msgstr "PEP 237: 统一长整数和整数" + +#: ../../whatsnew/2.2.rst:671 +msgid "" +"In recent versions, the distinction between regular integers, which are " +"32-bit values on most machines, and long integers, which can be of arbitrary" +" size, was becoming an annoyance. For example, on platforms that support " +"files larger than ``2**32`` bytes, the :meth:`tell` method of file objects " +"has to return a long integer. However, there were various bits of Python " +"that expected plain integers and would raise an error if a long integer was " +"provided instead. For example, in Python 1.5, only regular integers could " +"be used as a slice index, and ``'abc'[1L:]`` would raise a :exc:`TypeError` " +"exception with the message 'slice index must be int'." +msgstr "" + +#: ../../whatsnew/2.2.rst:681 +msgid "" +"Python 2.2 will shift values from short to long integers as required. The " +"'L' suffix is no longer needed to indicate a long integer literal, as now " +"the compiler will choose the appropriate type. (Using the 'L' suffix will " +"be discouraged in future 2.x versions of Python, triggering a warning in " +"Python 2.4, and probably dropped in Python 3.0.) Many operations that used " +"to raise an :exc:`OverflowError` will now return a long integer as their " +"result. For example::" +msgstr "" +"Python 2.2 将根据需要将数值从短整数转换为长整数。'L' 后缀不再需要用于表示长整数字面量,因为现在编译器会自动选择适当的类型。(在未来的 " +"2.x 版本的 Python 中,使用 'L' 后缀将被不鼓励,并在 Python 2.4 中触发警告,可能在 Python 3.0 " +"中被移除。)许多以前会引发 :exc:`OverflowError` 的操作现在会返回一个长整数作为结果。例如:" + +#: ../../whatsnew/2.2.rst:694 +msgid "" +"In most cases, integers and long integers will now be treated identically. " +"You can still distinguish them with the :func:`type` built-in function, but " +"that's rarely needed." +msgstr "在大多数情况下,整数和长整数现在将被视为相同。你仍然可以使用内置的 :func:`type` 函数区分它们,但这很少需要。" + +#: ../../whatsnew/2.2.rst:702 +msgid ":pep:`237` - Unifying Long Integers and Integers" +msgstr ":pep:`237` - 统一长整数和整数" + +#: ../../whatsnew/2.2.rst:702 +msgid "" +"Written by Moshe Zadka and Guido van Rossum. Implemented mostly by Guido " +"van Rossum." +msgstr "由 Moshe Zadka 和 Guido van Rossum 撰写 ; 大部分由 Guido van Rossum 实现。" + +#: ../../whatsnew/2.2.rst:709 +msgid "PEP 238: Changing the Division Operator" +msgstr "PEP 238:修改除法运算符" + +#: ../../whatsnew/2.2.rst:711 +msgid "" +"The most controversial change in Python 2.2 heralds the start of an effort " +"to fix an old design flaw that's been in Python from the beginning. " +"Currently Python's division operator, ``/``, behaves like C's division " +"operator when presented with two integer arguments: it returns an integer " +"result that's truncated down when there would be a fractional part. For " +"example, ``3/2`` is 1, not 1.5, and ``(-1)/2`` is -1, not -0.5. This means " +"that the results of division can vary unexpectedly depending on the type of " +"the two operands and because Python is dynamically typed, it can be " +"difficult to determine the possible types of the operands." +msgstr "" +"Python 2.2中最具争议的变化预示着修复一个自Python诞生以来的旧设计缺陷的努力的开始。目前,Python的除法操作符 ``/`` " +"在接收两个整数参数时表现得像C语言的除法操作符:它返回一个被截断为整数的结果。例如,``3/2`` 是1,而不是1.5,``(-1)/2`` " +"是-1,而不是-0.5。这意味着除法的结果可能会根据两个操作数的类型而意外变化,并且由于Python是动态类型的,确定操作数的可能类型可能会很困难。" + +#: ../../whatsnew/2.2.rst:721 +msgid "" +"(The controversy is over whether this is *really* a design flaw, and whether" +" it's worth breaking existing code to fix this. It's caused endless " +"discussions on python-dev, and in July 2001 erupted into a storm of acidly " +"sarcastic postings on :newsgroup:`comp.lang.python`. I won't argue for " +"either side here and will stick to describing what's implemented in 2.2. " +"Read :pep:`238` for a summary of arguments and counter-arguments.)" +msgstr "" +"(争议在于这是否*真的*算是一个设计缺陷,以及是否值得为了修复它而破坏现有代码。这在python-" +"dev上引发了无休止的讨论,并在2001年7月爆发成一场在 :newsgroup:`comp.lang.python` " +"的充满讽刺性言辞的风暴。我不会在这里为任何一方辩护,只会描述在2.2中实现的内容。请阅读 :pep:`238` 以获取争论和反驳的摘要。)" + +#: ../../whatsnew/2.2.rst:728 +msgid "" +"Because this change might break code, it's being introduced very gradually. " +"Python 2.2 begins the transition, but the switch won't be complete until " +"Python 3.0." +msgstr "" +"由于这一变化可能会破坏现有代码,因此它正在非常逐步地引入。Python 2.2 开始了这一过渡,但直到 Python 3.0 这一转换才会完全完成。" + +#: ../../whatsnew/2.2.rst:732 +msgid "" +"First, I'll borrow some terminology from :pep:`238`. \"True division\" is " +"the division that most non-programmers are familiar with: 3/2 is 1.5, 1/4 is" +" 0.25, and so forth. \"Floor division\" is what Python's ``/`` operator " +"currently does when given integer operands; the result is the floor of the " +"value returned by true division. \"Classic division\" is the current mixed " +"behaviour of ``/``; it returns the result of floor division when the " +"operands are integers, and returns the result of true division when one of " +"the operands is a floating-point number." +msgstr "" +"首先,我将借用一些来自 :pep:`238` " +"的术语。“真除法”是大多数非程序员所熟悉的除法:3/2是1.5,1/4是0.25,等等。“地板除法”是Python的 ``/`` " +"操作符在给定整数操作数时当前执行的操作;其结果是真除法返回值的地板值。“经典除法”是当前 ``/`` " +"操作符的混合行为;当操作数是整数时,它返回地板除法的结果,而当其中一个操作数是浮点数时,它返回真除法的结果。" + +#: ../../whatsnew/2.2.rst:740 +msgid "Here are the changes 2.2 introduces:" +msgstr "Python 2.2 引入了以下变化:" + +#: ../../whatsnew/2.2.rst:742 +msgid "" +"A new operator, ``//``, is the floor division operator. (Yes, we know it " +"looks like C++'s comment symbol.) ``//`` *always* performs floor division " +"no matter what the types of its operands are, so ``1 // 2`` is 0 and ``1.0 " +"// 2.0`` is also 0.0." +msgstr "" +"一个新的操作符,``//`` 是地板除法操作符。 (是的,我们知道它看起来像 C++ 的注释符号。) ``//`` *始终* " +"执行地板除法,无论其操作数的类型是什么,因此 ``1 // 2`` 是 0,``1.0 // 2.0`` 也是0.0。" + +#: ../../whatsnew/2.2.rst:747 +msgid "" +"``//`` is always available in Python 2.2; you don't need to enable it using " +"a ``__future__`` statement." +msgstr "``//`` 操作符在Python 2.2中始终可用;你不需要通过 ``__future__`` 语句来启用它。" + +#: ../../whatsnew/2.2.rst:750 +msgid "" +"By including a ``from __future__ import division`` in a module, the ``/`` " +"operator will be changed to return the result of true division, so ``1/2`` " +"is 0.5. Without the ``__future__`` statement, ``/`` still means classic " +"division. The default meaning of ``/`` will not change until Python 3.0." +msgstr "" +"通过在模块中包含 ``from __future__ import division``,``/``操作符将被更改为返回真除法的结果,因此 " +"``1/2`` 是0.5。如果没有这条 ``__future__`` 语句,``/`` 仍然表示经典除法。``/`` 的默认含义在Python " +"3.0之前不会改变。" + +#: ../../whatsnew/2.2.rst:755 +msgid "" +"Classes can define methods called :meth:`__truediv__` and " +":meth:`__floordiv__` to overload the two division operators. At the C " +"level, there are also slots in the :c:type:`PyNumberMethods` structure so " +"extension types can define the two operators." +msgstr "" + +#: ../../whatsnew/2.2.rst:760 +msgid "" +"Python 2.2 supports some command-line arguments for testing whether code " +"will work with the changed division semantics. Running python with " +":option:`!-Q warn` will cause a warning to be issued whenever division is " +"applied to two integers. You can use this to find code that's affected by " +"the change and fix it. By default, Python 2.2 will simply perform classic " +"division without a warning; the warning will be turned on by default in " +"Python 2.3." +msgstr "" +"Python 2.2 支持一些命令行参数,用于测试代码是否能在除法语义改变的情况下正常工作。运行 Python 并使用 -Q warn " +"选项时,当对两个整数应用除法时会发出警告。你可以利用这个功能找到受影响的代码并进行修复。默认情况下,Python 2.2 " +"会执行经典除法而不会发出警告;在 Python 2.3 中,警告将默认开启。" + +#: ../../whatsnew/2.2.rst:770 +msgid ":pep:`238` - Changing the Division Operator" +msgstr ":pep:`238`:改变除法运算符" + +#: ../../whatsnew/2.2.rst:771 +msgid "" +"Written by Moshe Zadka and Guido van Rossum. Implemented by Guido van " +"Rossum.." +msgstr "由 Moshe Zadka 和 Guido van Rossum 撰写 ; 由 Guido van Rossum 实现。" + +#: ../../whatsnew/2.2.rst:777 +msgid "Unicode Changes" +msgstr "Unicode 的改变" + +#: ../../whatsnew/2.2.rst:779 +msgid "" +"Python's Unicode support has been enhanced a bit in 2.2. Unicode strings " +"are usually stored as UCS-2, as 16-bit unsigned integers. Python 2.2 can " +"also be compiled to use UCS-4, 32-bit unsigned integers, as its internal " +"encoding by supplying :option:`!--enable-unicode=ucs4` to the configure " +"script. (It's also possible to specify :option:`!--disable-unicode` to " +"completely disable Unicode support.)" +msgstr "" +"Python的Unicode支持在2.2版本中有所增强。Unicode字符串通常以UCS-2形式存储,即16位无符号整数。通过向配置脚本提供 " +":option:`!--enable-unicode=ucs4` 选项,Python " +"2.2也可以编译为使用UCS-4(32位无符号整数)作为其内部编码。(也可以指定 :option:`!--disable-unicode` " +"选项来完全禁用Unicode支持。)" + +#: ../../whatsnew/2.2.rst:786 +msgid "" +"When built to use UCS-4 (a \"wide Python\"), the interpreter can natively " +"handle Unicode characters from U+000000 to U+110000, so the range of legal " +"values for the :func:`unichr` function is expanded accordingly. Using an " +"interpreter compiled to use UCS-2 (a \"narrow Python\"), values greater than" +" 65535 will still cause :func:`unichr` to raise a :exc:`ValueError` " +"exception. This is all described in :pep:`261`, \"Support for 'wide' Unicode" +" characters\"; consult it for further details." +msgstr "" + +#: ../../whatsnew/2.2.rst:794 +msgid "" +"Another change is simpler to explain. Since their introduction, Unicode " +"strings have supported an :meth:`encode` method to convert the string to a " +"selected encoding such as UTF-8 or Latin-1. A symmetric " +"``decode([*encoding*])`` method has been added to 8-bit strings (though not " +"to Unicode strings) in 2.2. :meth:`decode` assumes that the string is in the" +" specified encoding and decodes it, returning whatever is returned by the " +"codec." +msgstr "" + +#: ../../whatsnew/2.2.rst:801 +msgid "" +"Using this new feature, codecs have been added for tasks not directly " +"related to Unicode. For example, codecs have been added for uu-encoding, " +"MIME's base64 encoding, and compression with the :mod:`zlib` module::" +msgstr "" +"利用这一新特性,编解码器被添加用于与Unicode不直接相关的任务。例如,已经添加了用于uu编码、MIME的base64编码以及使用 " +":mod:`zlib` 模块进行压缩的编解码器:" + +#: ../../whatsnew/2.2.rst:822 +msgid "" +"To convert a class instance to Unicode, a :meth:`__unicode__` method can be " +"defined by a class, analogous to :meth:`__str__`." +msgstr "" + +#: ../../whatsnew/2.2.rst:825 +msgid "" +":meth:`encode`, :meth:`decode`, and :meth:`__unicode__` were implemented by " +"Marc-André Lemburg. The changes to support using UCS-4 internally were " +"implemented by Fredrik Lundh and Martin von Löwis." +msgstr "" + +#: ../../whatsnew/2.2.rst:832 +msgid ":pep:`261` - Support for 'wide' Unicode characters" +msgstr ":pep:`261` - 对 '宽' Unicode 字符的支持" + +#: ../../whatsnew/2.2.rst:833 +msgid "Written by Paul Prescod." +msgstr "由 Paul Prescod 编写。" + +#: ../../whatsnew/2.2.rst:839 +msgid "PEP 227: Nested Scopes" +msgstr "PEP 227: 嵌套的作用域" + +#: ../../whatsnew/2.2.rst:841 +msgid "" +"In Python 2.1, statically nested scopes were added as an optional feature, " +"to be enabled by a ``from __future__ import nested_scopes`` directive. In " +"2.2 nested scopes no longer need to be specially enabled, and are now always" +" present. The rest of this section is a copy of the description of nested " +"scopes from my \"What's New in Python 2.1\" document; if you read it when " +"2.1 came out, you can skip the rest of this section." +msgstr "" +"在Python 2.1中,静态嵌套作用域作为一个可选特性被添加,需要通过 ``from __future__ import " +"nested_scopes`` 指令来启用。在2.2版本中,嵌套作用域不再需要特别启用,现在总是存在。本节的其余部分是从我的《Python " +"2.1的新特性》文档中复制的嵌套作用域描述;如果你在2.1发布时已经阅读过,可以跳过本节的其余部分。" + +#: ../../whatsnew/2.2.rst:848 +msgid "" +"The largest change introduced in Python 2.1, and made complete in 2.2, is to" +" Python's scoping rules. In Python 2.0, at any given time there are at most" +" three namespaces used to look up variable names: local, module-level, and " +"the built-in namespace. This often surprised people because it didn't match" +" their intuitive expectations. For example, a nested recursive function " +"definition doesn't work::" +msgstr "" +"Python 2.1 中的最大改变是 Python 的作用域规则,在Python 2.2中得到完善。 在 Python 2.0 " +"中,任意给定的时刻至多使用三个命名空间来查找变量名称:局部、模块和内置命名空间。 这往往会导致令人吃惊的结果因为它与人们直觉上的预期不相匹配。 " +"例如,一个嵌套的递归函数将不起作用::" + +#: ../../whatsnew/2.2.rst:862 +msgid "" +"The function :func:`g` will always raise a :exc:`NameError` exception, " +"because the binding of the name ``g`` isn't in either its local namespace or" +" in the module-level namespace. This isn't much of a problem in practice " +"(how often do you recursively define interior functions like this?), but " +"this also made using the :keyword:`lambda` expression clumsier, and this was" +" a problem in practice. In code which uses :keyword:`!lambda` you can often " +"find local variables being copied by passing them as the default values of " +"arguments. ::" +msgstr "" + +#: ../../whatsnew/2.2.rst:876 +msgid "" +"The readability of Python code written in a strongly functional style " +"suffers greatly as a result." +msgstr "结果将会严重损害以高度函数式风格编写的 Python 代码的可读性。" + +#: ../../whatsnew/2.2.rst:879 +msgid "" +"The most significant change to Python 2.2 is that static scoping has been " +"added to the language to fix this problem. As a first effect, the " +"``name=name`` default argument is now unnecessary in the above example. Put" +" simply, when a given variable name is not assigned a value within a " +"function (by an assignment, or the :keyword:`def`, :keyword:`class`, or " +":keyword:`import` statements), references to the variable will be looked up " +"in the local namespace of the enclosing scope. A more detailed explanation " +"of the rules, and a dissection of the implementation, can be found in the " +"PEP." +msgstr "" +"Python 2.2 最显著的改变是增加了静态作用域这一语言特征来解决此问题。 作为它的第一项影响,在上述示例中的 ``name=name`` " +"默认参数现在将不再必要。 简单地说,当一个函数内部的给定变量名没有被赋值时(通过赋值语句,或者 :keyword:`def`, " +":keyword:`class` 或 :keyword:`import` 语句),对该变量的引用将在外层作用域的局部命名空间中查找。 " +"对于该规则的更详细解释,以及具体实现的分析,请参阅相应的 PEP。" + +#: ../../whatsnew/2.2.rst:888 +msgid "" +"This change may cause some compatibility problems for code where the same " +"variable name is used both at the module level and as a local variable " +"within a function that contains further function definitions. This seems " +"rather unlikely though, since such code would have been pretty confusing to " +"read in the first place." +msgstr "" +"对于同时在模块层级和包含下层函数定义的函数内部局部变量使用了相同变量名的代码来说这项改变可能会导致一些兼容性问题。 " +"不过这看来不太可能发生,因为阅读这样的代码本来就会相当令人困惑。" + +#: ../../whatsnew/2.2.rst:894 +msgid "" +"One side effect of the change is that the ``from module import *`` and " +"``exec`` statements have been made illegal inside a function scope under " +"certain conditions. The Python reference manual has said all along that " +"``from module import *`` is only legal at the top level of a module, but the" +" CPython interpreter has never enforced this before. As part of the " +"implementation of nested scopes, the compiler which turns Python source into" +" bytecodes has to generate different code to access variables in a " +"containing scope. ``from module import *`` and ``exec`` make it impossible " +"for the compiler to figure this out, because they add names to the local " +"namespace that are unknowable at compile time. Therefore, if a function " +"contains function definitions or :keyword:`lambda` expressions with free " +"variables, the compiler will flag this by raising a :exc:`SyntaxError` " +"exception." +msgstr "" +"此项改变的一个附带影响是在特定条件下函数作用域内部 ``from module import *`` 和 ``exec`` 语句将不允许使用。 " +"Python 参考手册已经写明 ``from module import *`` 仅在模块最高层级上是可用的,但此前 CPython " +"解释器从未强制实施此规则。 作为嵌套作用域具体实现的一部分,将 Python 源码转为字节码的编译器会生成不同的代码来访问某个包含作用域内的变量。 " +"``from module import *`` 和 ``exec`` 会使得编译器无法正确执行,因为它们会向局部命名空间添加在编译时还不存在的名称。 " +"为此,如果一个函数包含带有自由变量的函数定义或 :keyword:`lambda` 表达式,编译器将通过引发 :exc:`SyntaxError` " +"异常来提示。" + +#: ../../whatsnew/2.2.rst:907 +msgid "To make the preceding explanation a bit clearer, here's an example::" +msgstr "为了使前面的解释更清楚,下面是一个例子::" + +#: ../../whatsnew/2.2.rst:916 +msgid "" +"Line 4 containing the ``exec`` statement is a syntax error, since ``exec`` " +"would define a new local variable named ``x`` whose value should be accessed" +" by :func:`g`." +msgstr "" +"包含 ``exec`` 语句的第 4 行有语法错误,因为 ``exec`` 将定义一个名为 ``x`` 的新局部变量,它的值应当被 :func:`g` " +"访问。" + +#: ../../whatsnew/2.2.rst:920 +msgid "" +"This shouldn't be much of a limitation, since ``exec`` is rarely used in " +"most Python code (and when it is used, it's often a sign of a poor design " +"anyway)." +msgstr "这应该不会是太大的限制,因为 ``exec`` 在多数 Python 代码中都极少被使用(而当它被使用时,往往也是个存在糟糕设计的信号)。" + +#: ../../whatsnew/2.2.rst:927 +msgid ":pep:`227` - Statically Nested Scopes" +msgstr ":pep:`227` - 静态嵌套作用域" + +#: ../../whatsnew/2.2.rst:928 +msgid "Written and implemented by Jeremy Hylton." +msgstr "由 Jeremy Hylton 撰写并实现。" + +#: ../../whatsnew/2.2.rst:934 +msgid "New and Improved Modules" +msgstr "新增和改进的模块" + +#: ../../whatsnew/2.2.rst:936 +msgid "" +"The :mod:`xmlrpclib` module was contributed to the standard library by " +"Fredrik Lundh, providing support for writing XML-RPC clients. XML-RPC is a " +"simple remote procedure call protocol built on top of HTTP and XML. For " +"example, the following snippet retrieves a list of RSS channels from the " +"O'Reilly Network, and then lists the recent headlines for one channel::" +msgstr "" + +#: ../../whatsnew/2.2.rst:959 +msgid "" +"The :mod:`SimpleXMLRPCServer` module makes it easy to create straightforward" +" XML-RPC servers. See http://xmlrpc.scripting.com/ for more information " +"about XML-RPC." +msgstr "" + +#: ../../whatsnew/2.2.rst:962 +msgid "" +"The new :mod:`hmac` module implements the HMAC algorithm described by " +":rfc:`2104`. (Contributed by Gerhard Häring.)" +msgstr "新的 :mod:`hmac` 模块实现了由 :rfc:`2104` 描述的HMAC算法。(由Gerhard Häring贡献。)" + +#: ../../whatsnew/2.2.rst:965 +msgid "" +"Several functions that originally returned lengthy tuples now return pseudo-" +"sequences that still behave like tuples but also have mnemonic attributes " +"such as memberst_mtime or :attr:`tm_year`. The enhanced functions include " +":func:`stat`, :func:`fstat`, :func:`statvfs`, and :func:`fstatvfs` in the " +":mod:`os` module, and :func:`localtime`, :func:`gmtime`, and " +":func:`strptime` in the :mod:`time` module." +msgstr "" + +#: ../../whatsnew/2.2.rst:972 +msgid "" +"For example, to obtain a file's size using the old tuples, you'd end up " +"writing something like ``file_size = os.stat(filename)[stat.ST_SIZE]``, but " +"now this can be written more clearly as ``file_size = " +"os.stat(filename).st_size``." +msgstr "" +"例如,使用旧的元组来获取文件的大小时,你可能会写成 ``file_size = os.stat(filename)[stat.ST_SIZE]`` " +",但现在可以更清晰地写成 ``file_size = os.stat(filename).st_size``。" + +#: ../../whatsnew/2.2.rst:976 +msgid "The original patch for this feature was contributed by Nick Mathewson." +msgstr "此特性的初始补丁由 Nick Mathewson 贡献。" + +#: ../../whatsnew/2.2.rst:978 +msgid "" +"The Python profiler has been extensively reworked and various errors in its " +"output have been corrected. (Contributed by Fred L. Drake, Jr. and Tim " +"Peters.)" +msgstr "" +"Python 的分析器进行了大量的重构,并纠正了其输出中的各种错误。(由 Fred L. Drake, Jr. 和 Tim Peters 贡献。)" + +#: ../../whatsnew/2.2.rst:981 +msgid "" +"The :mod:`socket` module can be compiled to support IPv6; specify the " +":option:`!--enable-ipv6` option to Python's configure script. (Contributed " +"by Jun-ichiro \"itojun\" Hagino.)" +msgstr "" +":mod:`socket` 模块可以编译为支持IPv6;为Python的配置脚本指定 :option:`!--enable-ipv6` " +"选项。(由Jun-ichiro \"itojun\" Hagino贡献。)" + +#: ../../whatsnew/2.2.rst:985 +msgid "" +"Two new format characters were added to the :mod:`struct` module for 64-bit " +"integers on platforms that support the C :c:type:`long long` type. ``q`` is" +" for a signed 64-bit integer, and ``Q`` is for an unsigned one. The value " +"is returned in Python's long integer type. (Contributed by Tim Peters.)" +msgstr "" + +#: ../../whatsnew/2.2.rst:990 +msgid "" +"In the interpreter's interactive mode, there's a new built-in function " +":func:`help` that uses the :mod:`pydoc` module introduced in Python 2.1 to " +"provide interactive help. ``help(object)`` displays any available help text " +"about *object*. :func:`help` with no argument puts you in an online help " +"utility, where you can enter the names of functions, classes, or modules to " +"read their help text. (Contributed by Guido van Rossum, using Ka-Ping Yee's " +":mod:`pydoc` module.)" +msgstr "" +"在解释器的交互模式下,有一个新的内置函数 :func:`help`,它使用在Python 2.1 中引入的 :mod:`pydoc` " +"模块来提供交互式帮助。 ``help(object)`` 显示关于*object*的任何可用帮助文本。不带参数调用 :func:`help` " +"会进入一个在线帮助工具,在那里你可以输入函数、类或模块的名称来阅读它们的帮助文本。(由Guido van Rossum贡献,使用Ka-Ping Yee的" +" :mod:`pydoc` 模块。)" + +#: ../../whatsnew/2.2.rst:998 +msgid "" +"Various bugfixes and performance improvements have been made to the SRE " +"engine underlying the :mod:`re` module. For example, the :func:`re.sub` and" +" :func:`re.split` functions have been rewritten in C. Another contributed " +"patch speeds up certain Unicode character ranges by a factor of two, and a " +"new :meth:`finditer` method that returns an iterator over all the non-" +"overlapping matches in a given string. (SRE is maintained by Fredrik " +"Lundh. The BIGCHARSET patch was contributed by Martin von Löwis.)" +msgstr "" + +#: ../../whatsnew/2.2.rst:1006 +msgid "" +"The :mod:`smtplib` module now supports :rfc:`2487`, \"Secure SMTP over " +"TLS\", so it's now possible to encrypt the SMTP traffic between a Python " +"program and the mail transport agent being handed a message. :mod:`smtplib`" +" also supports SMTP authentication. (Contributed by Gerhard Häring.)" +msgstr "" +":mod:`smtplib` 模块现在支持 :rfc:`2487`:\"Secure SMTP over " +"TLS\",因此现在可以加密Python程序与接收消息的邮件传输代理之间的SMTP流量。:mod:`smtplib` " +"还支持SMTP身份验证。(由Gerhard Häring贡献。)" + +#: ../../whatsnew/2.2.rst:1011 +msgid "" +"The :mod:`imaplib` module, maintained by Piers Lauder, has support for " +"several new extensions: the NAMESPACE extension defined in :rfc:`2342`, " +"SORT, GETACL and SETACL. (Contributed by Anthony Baxter and Michel " +"Pelletier.)" +msgstr "" +":mod:`imaplib` 模块由 Piers Lauder 维护,支持几个新扩展: :rfc:`2342` 中定义的 NAMESPACE " +"扩展、SORT、GETACL和SETACL。(由 Anthony Baxter 和 Michel Pelletier 贡献。)" + +#: ../../whatsnew/2.2.rst:1015 +msgid "" +"The :mod:`rfc822` module's parsing of email addresses is now compliant with " +":rfc:`2822`, an update to :rfc:`822`. (The module's name is *not* going to " +"be changed to ``rfc2822``.) A new package, :mod:`email`, has also been " +"added for parsing and generating e-mail messages. (Contributed by Barry " +"Warsaw, and arising out of his work on Mailman.)" +msgstr "" + +#: ../../whatsnew/2.2.rst:1021 +msgid "" +"The :mod:`difflib` module now contains a new :class:`Differ` class for " +"producing human-readable lists of changes (a \"delta\") between two " +"sequences of lines of text. There are also two generator functions, " +":func:`ndiff` and :func:`restore`, which respectively return a delta from " +"two sequences, or one of the original sequences from a delta. (Grunt work " +"contributed by David Goodger, from ndiff.py code by Tim Peters who then did " +"the generatorization.)" +msgstr "" + +#: ../../whatsnew/2.2.rst:1028 +msgid "" +"New constants :const:`ascii_letters`, :const:`ascii_lowercase`, and " +":const:`ascii_uppercase` were added to the :mod:`string` module. There were" +" several modules in the standard library that used :const:`string.letters` " +"to mean the ranges A-Za-z, but that assumption is incorrect when locales are" +" in use, because :const:`string.letters` varies depending on the set of " +"legal characters defined by the current locale. The buggy modules have all " +"been fixed to use :const:`ascii_letters` instead. (Reported by an unknown " +"person; fixed by Fred L. Drake, Jr.)" +msgstr "" + +#: ../../whatsnew/2.2.rst:1037 +msgid "" +"The :mod:`mimetypes` module now makes it easier to use alternative MIME-type" +" databases by the addition of a :class:`MimeTypes` class, which takes a list" +" of filenames to be parsed. (Contributed by Fred L. Drake, Jr.)" +msgstr "" + +#: ../../whatsnew/2.2.rst:1041 +msgid "" +"A :class:`Timer` class was added to the :mod:`threading` module that allows " +"scheduling an activity to happen at some future time. (Contributed by " +"Itamar Shtull-Trauring.)" +msgstr "" + +#: ../../whatsnew/2.2.rst:1049 +msgid "Interpreter Changes and Fixes" +msgstr "解释器的改变和修正" + +#: ../../whatsnew/2.2.rst:1051 +msgid "" +"Some of the changes only affect people who deal with the Python interpreter " +"at the C level because they're writing Python extension modules, embedding " +"the interpreter, or just hacking on the interpreter itself. If you only " +"write Python code, none of the changes described here will affect you very " +"much." +msgstr "" +"有些变化只会影响那些在 C 级别处理 Python 解释器的人,因为他们正在编写 Python " +"扩展模块、嵌入解释器或仅仅是在修改解释器本身。如果你只编写 Python 代码,这里描述的变化对你几乎没有影响。" + +#: ../../whatsnew/2.2.rst:1056 +msgid "" +"Profiling and tracing functions can now be implemented in C, which can " +"operate at much higher speeds than Python-based functions and should reduce " +"the overhead of profiling and tracing. This will be of interest to authors" +" of development environments for Python. Two new C functions were added to " +"Python's API, :c:func:`PyEval_SetProfile` and :c:func:`PyEval_SetTrace`. The" +" existing :func:`sys.setprofile` and :func:`sys.settrace` functions still " +"exist, and have simply been changed to use the new C-level interface. " +"(Contributed by Fred L. Drake, Jr.)" +msgstr "" +"性能分析和追踪函数现在可以用 C 语言来实现,相比基于 Python 的函数能够显著提高运行速度并能够减少性能分析和追踪的资源开销。 Python " +"开发环境的编写者对此将会很感兴趣。 Python 的 API 增加了两个新的 C 函数,:c:func:`PyEval_SetProfile` 和 " +":c:func:`PyEval_SetTrace`。 现有的 :func:`sys.setprofile` 和 :func:`sys.settrace`" +" 函数仍然存在,并已简单地更改为使用新的 C 层级接口。 (由 Fred L. Drake, Jr. 贡献。)" + +#: ../../whatsnew/2.2.rst:1065 +msgid "" +"Another low-level API, primarily of interest to implementors of Python " +"debuggers and development tools, was added. " +":c:func:`PyInterpreterState_Head` and :c:func:`PyInterpreterState_Next` let " +"a caller walk through all the existing interpreter objects; " +":c:func:`PyInterpreterState_ThreadHead` and :c:func:`PyThreadState_Next` " +"allow looping over all the thread states for a given interpreter. " +"(Contributed by David Beazley.)" +msgstr "" + +#: ../../whatsnew/2.2.rst:1072 +msgid "" +"The C-level interface to the garbage collector has been changed to make it " +"easier to write extension types that support garbage collection and to debug" +" misuses of the functions. Various functions have slightly different " +"semantics, so a bunch of functions had to be renamed. Extensions that use " +"the old API will still compile but will *not* participate in garbage " +"collection, so updating them for 2.2 should be considered fairly high " +"priority." +msgstr "" +"垃圾收集器的 C 级接口已经发生了变化,使得编写支持垃圾收集的扩展类型和调试函数误用变得更容易。各种函数的语义略有不同,因此需要重命名一系列函数。使用旧" +" API 的扩展仍然可以编译,但不会参与垃圾收集,因此应优先考虑将它们更新为 2.2 版本。" + +#: ../../whatsnew/2.2.rst:1079 +msgid "" +"To upgrade an extension module to the new API, perform the following steps:" +msgstr "要将一个扩展模块升级至新 API,请执行下列步骤:" + +#: ../../whatsnew/2.2.rst:1081 +msgid "Rename :c:func:`Py_TPFLAGS_GC` to :c:func:`PyTPFLAGS_HAVE_GC`." +msgstr "将 :c:func:`Py_TPFLAGS_GC` 重命名为 :c:func:`PyTPFLAGS_HAVE_GC`。" + +#: ../../whatsnew/2.2.rst:1084 +msgid "" +"Use :c:func:`PyObject_GC_New` or :c:func:`PyObject_GC_NewVar` to allocate" +msgstr "使用 :c:func:`PyObject_GC_New` 或 :c:func:`PyObject_GC_NewVar` 来分配" + +#: ../../whatsnew/2.2.rst:1084 +msgid "objects, and :c:func:`PyObject_GC_Del` to deallocate them." +msgstr "对象,并使用 :c:func:`PyObject_GC_Del` 来释放它们。" + +#: ../../whatsnew/2.2.rst:1087 +msgid "Rename :c:func:`PyObject_GC_Init` to :c:func:`PyObject_GC_Track` and" +msgstr "将 :c:func:`PyObject_GC_Init` 重命名为 :c:func:`PyObject_GC_Track` 并" + +#: ../../whatsnew/2.2.rst:1087 +msgid ":c:func:`PyObject_GC_Fini` to :c:func:`PyObject_GC_UnTrack`." +msgstr "将 :c:func:`PyObject_GC_Fini` 重命名为 :c:func:`PyObject_GC_UnTrack`。" + +#: ../../whatsnew/2.2.rst:1089 +msgid "Remove :c:func:`PyGC_HEAD_SIZE` from object size calculations." +msgstr "将 :c:func:`PyGC_HEAD_SIZE` 从对象大小计算中移除。" + +#: ../../whatsnew/2.2.rst:1091 +msgid "" +"Remove calls to :c:func:`PyObject_AS_GC` and :c:func:`PyObject_FROM_GC`." +msgstr "移除对 :c:func:`PyObject_AS_GC` 和 :c:func:`PyObject_FROM_GC` 的调用。" + +#: ../../whatsnew/2.2.rst:1093 +msgid "" +"A new ``et`` format sequence was added to :c:func:`PyArg_ParseTuple`; ``et``" +" takes both a parameter and an encoding name, and converts the parameter to " +"the given encoding if the parameter turns out to be a Unicode string, or " +"leaves it alone if it's an 8-bit string, assuming it to already be in the " +"desired encoding. This differs from the ``es`` format character, which " +"assumes that 8-bit strings are in Python's default ASCII encoding and " +"converts them to the specified new encoding. (Contributed by M.-A. Lemburg, " +"and used for the MBCS support on Windows described in the following " +"section.)" +msgstr "" +"向 :c:func:`PyArg_ParseTuple` 添加了一个新的 ``et`` 格式序列;``et`` " +"接受一个形参和一个编码格式名称,如果该形参值是一个 Unicode 字符串则将其转换为给定的编码格式,或者如果它是一个 8 " +"比特位字符串则让其保持原样,即假定它已经使用了适当的编码格式。 这不同于 ``es`` 格式字符,它假定该 8 比特位字符串是使用 Python 默认的" +" ASCII 编码格式并将其转换为指定的新编码格式。 (由 M.-A. Lemburg 贡献,用于下一节所描述的 Windows 上的 MBCS " +"支持。)" + +#: ../../whatsnew/2.2.rst:1102 +msgid "" +"A different argument parsing function, :c:func:`PyArg_UnpackTuple`, has been" +" added that's simpler and presumably faster. Instead of specifying a format" +" string, the caller simply gives the minimum and maximum number of arguments" +" expected, and a set of pointers to :c:type:`PyObject\\*` variables that " +"will be filled in with argument values." +msgstr "" + +#: ../../whatsnew/2.2.rst:1108 +msgid "" +"Two new flags :const:`METH_NOARGS` and :const:`METH_O` are available in " +"method definition tables to simplify implementation of methods with no " +"arguments or a single untyped argument. Calling such methods is more " +"efficient than calling a corresponding method that uses " +":const:`METH_VARARGS`. Also, the old :const:`METH_OLDARGS` style of writing" +" C methods is now officially deprecated." +msgstr "" + +#: ../../whatsnew/2.2.rst:1114 +msgid "" +"Two new wrapper functions, :c:func:`PyOS_snprintf` and " +":c:func:`PyOS_vsnprintf` were added to provide cross-platform " +"implementations for the relatively new :c:func:`snprintf` and " +":c:func:`vsnprintf` C lib APIs. In contrast to the standard " +":c:func:`sprintf` and :c:func:`vsprintf` functions, the Python versions " +"check the bounds of the buffer used to protect against buffer overruns. " +"(Contributed by M.-A. Lemburg.)" +msgstr "" + +#: ../../whatsnew/2.2.rst:1121 +msgid "" +"The :c:func:`_PyTuple_Resize` function has lost an unused parameter, so now " +"it takes 2 parameters instead of 3. The third argument was never used, and " +"can simply be discarded when porting code from earlier versions to Python " +"2.2." +msgstr "" +":c:func:`_PyTuple_Resize` 函数去掉了一个未使用的形参,因此现在它接受 2 个形参而不是 3 个。 " +"第三个参数从未被使用,在将代码从较早的版本移植到 Python 2.2 时可以简单地丢弃它。" + +#: ../../whatsnew/2.2.rst:1129 +msgid "Other Changes and Fixes" +msgstr "其他的改变和修正" + +#: ../../whatsnew/2.2.rst:1131 +msgid "" +"As usual there were a bunch of other improvements and bugfixes scattered " +"throughout the source tree. A search through the CVS change logs finds " +"there were 527 patches applied and 683 bugs fixed between Python 2.1 and " +"2.2; 2.2.1 applied 139 patches and fixed 143 bugs; 2.2.2 applied 106 patches" +" and fixed 82 bugs. These figures are likely to be underestimates." +msgstr "" +"像往常一样,源代码树中散布着许多其他改进和错误修复。通过搜索 CVS 更改日志,可以发现 Python 2.1 到 2.2 之间应用了 527 " +"个补丁并修复了 683 个错误;2.2.1 应用了 139 个补丁并修复了 143 个错误;2.2.2 应用了 106 个补丁并修复了 82 " +"个错误。这些数字可能是低估的。" + +#: ../../whatsnew/2.2.rst:1137 +msgid "Some of the more notable changes are:" +msgstr "一些较为重要的改变:" + +#: ../../whatsnew/2.2.rst:1139 +msgid "" +"The code for the MacOS port for Python, maintained by Jack Jansen, is now " +"kept in the main Python CVS tree, and many changes have been made to support" +" MacOS X." +msgstr "" +"适用于 MacOS 的 Python 移植代码现在保存在主 Python CVS 树中,由 Jack Jansen 维护,并且为了支持 MacOS " +"X,进行了许多更改。" + +#: ../../whatsnew/2.2.rst:1142 +msgid "" +"The most significant change is the ability to build Python as a framework, " +"enabled by supplying the :option:`!--enable-framework` option to the " +"configure script when compiling Python. According to Jack Jansen, \"This " +"installs a self-contained Python installation plus the OS X framework " +"\"glue\" into :file:`/Library/Frameworks/Python.framework` (or another " +"location of choice). For now there is little immediate added benefit to this" +" (actually, there is the disadvantage that you have to change your PATH to " +"be able to find Python), but it is the basis for creating a full-blown " +"Python application, porting the MacPython IDE, possibly using Python as a " +"standard OSA scripting language and much more.\"" +msgstr "" +"最重要的变化是能够将 Python 作为框架来进行构建,这可以通过在编译 Python 时向配置脚本提供 :option:`!--enable-" +"framework` 选项来启用。 根据 Jack Jansen 的说法,“这会将一个独立的 Python 安装版加上 OS X 框架‘粘合起来’放到 " +":file:`/Library/Frameworks/Python.framework` 中(或者其他选定的位置)。 " +"就目前而言这样做并没有什么直接的额外好处(实际上,这样做还存在必须更改 PATH 才能找到Python 的坏处),但它是创建完整的 Python " +"应用程序、移植 MacPython IDE、并可能使用 Python 作为标准 OSA 脚本语言及其他更多功能的基础。”" + +#: ../../whatsnew/2.2.rst:1153 +msgid "" +"Most of the MacPython toolbox modules, which interface to MacOS APIs such as" +" windowing, QuickTime, scripting, etc. have been ported to OS X, but they've" +" been left commented out in :file:`setup.py`. People who want to experiment" +" with these modules can uncomment them manually." +msgstr "" +"作为 MacOS API 如 windowing, QuickTime, scripting 等的接口的许多 MacPython 工具箱模块已被移植到 " +"OS X,但它们在 :file:`setup.py` 中被注释掉了。 希望尝试这些模块的人可以手动取消注释它们。" + +#: ../../whatsnew/2.2.rst:1176 +msgid "" +"Keyword arguments passed to built-in functions that don't take them now " +"cause a :exc:`TypeError` exception to be raised, with the message " +"\"*function* takes no keyword arguments\"." +msgstr "" +"现在将关键字参数传给不接受它们的内置函数会导致引发 :exc:`TypeError` 异常,并附带消息 \"*function* takes no " +"keyword arguments\"。" + +#: ../../whatsnew/2.2.rst:1180 +msgid "" +"Weak references, added in Python 2.1 as an extension module, are now part of" +" the core because they're used in the implementation of new-style classes. " +"The :exc:`ReferenceError` exception has therefore moved from the " +":mod:`weakref` module to become a built-in exception." +msgstr "" +"在 Python 2.1 中作为扩展模块加入的弱引用现在已成为核心组成部分,因为它们被用于新式类的实现。 为此 " +":exc:`ReferenceError` 异常也已从 :mod:`weakref` 模块移出成为一个内置异常。" + +#: ../../whatsnew/2.2.rst:1185 +msgid "" +"A new script, :file:`Tools/scripts/cleanfuture.py` by Tim Peters, " +"automatically removes obsolete ``__future__`` statements from Python source " +"code." +msgstr "" +"由 Tim Peters 编写的新脚本 :file:`Tools/scripts/cleanfuture.py` 可自动从 Python " +"源代码移除过时的 ``__future__`` 语句。" + +#: ../../whatsnew/2.2.rst:1189 +msgid "" +"An additional *flags* argument has been added to the built-in function " +":func:`compile`, so the behaviour of ``__future__`` statements can now be " +"correctly observed in simulated shells, such as those presented by IDLE and " +"other development environments. This is described in :pep:`264`. " +"(Contributed by Michael Hudson.)" +msgstr "" +"向内置函数 :func:`compile` 添加了一个额外的 *flags* 参数,以便现在 ``__future__`` 语句的行为能在模拟的 " +"shell,例如由 IDLE 和其他开发环境所提供的此类工具中被正确地观察。 此特性的描述参见 :pep:`264`。 (由 Michael " +"Hudson 贡献。)" + +#: ../../whatsnew/2.2.rst:1195 +msgid "" +"The new license introduced with Python 1.6 wasn't GPL-compatible. This is " +"fixed by some minor textual changes to the 2.2 license, so it's now legal to" +" embed Python inside a GPLed program again. Note that Python itself is not " +"GPLed, but instead is under a license that's essentially equivalent to the " +"BSD license, same as it always was. The license changes were also applied " +"to the Python 2.0.1 and 2.1.1 releases." +msgstr "" +"Python 1.6 引入的新许可证与 GPL 不兼容。通过对 2.2 许可证进行一些小的文本修改,这个问题得以解决,因此现在可以合法地将 Python" +" 嵌入到 GPL 授权的程序中。请注意,Python 本身并不是在 GPL 授权下,而是采用一个与 BSD " +"许可证本质上等效的许可证,这与之前的情况一样。这些许可证更改也应用到了 Python 2.0.1 和 2.1.1 版本中。" + +#: ../../whatsnew/2.2.rst:1202 +msgid "" +"When presented with a Unicode filename on Windows, Python will now convert " +"it to an MBCS encoded string, as used by the Microsoft file APIs. As MBCS " +"is explicitly used by the file APIs, Python's choice of ASCII as the default" +" encoding turns out to be an annoyance. On Unix, the locale's character set" +" is used if ``locale.nl_langinfo(CODESET)`` is available. (Windows support " +"was contributed by Mark Hammond with assistance from Marc-André Lemburg. " +"Unix support was added by Martin von Löwis.)" +msgstr "" +"在 Windows 上,当 Python 遇到一个 Unicode 文件名时,现在会将其转换为 MBCS 编码的字符串,这种编码由 Microsoft " +"文件 API 使用。由于文件 API 明确使用 MBCS 编码,Python 默认选择 ASCII 作为编码方式显得很不方便。在 Unix 上,如果 " +"``locale.nl_langinfo(CODESET)`` 可用,Python 将使用本地字符集。(Windows 支持由 Mark Hammond" +" 提供,Marc-André Lemburg 提供协助。Unix 支持由 Martin von Löwis 添加。)" + +#: ../../whatsnew/2.2.rst:1210 +msgid "" +"Large file support is now enabled on Windows. (Contributed by Tim Peters.)" +msgstr "大文件支持目前已在 Windows 上启用。 (由 Tim Peters 贡献。)" + +#: ../../whatsnew/2.2.rst:1212 +msgid "" +"The :file:`Tools/scripts/ftpmirror.py` script now parses a :file:`.netrc` " +"file, if you have one. (Contributed by Mike Romberg.)" +msgstr "" +":file:`Tools/scripts/ftpmirror.py` 脚本现在会解析 :file:`.netrc` 文件,如果存在的话。 (由 Mike" +" Romberg 贡献。)" + +#: ../../whatsnew/2.2.rst:1215 +msgid "" +"Some features of the object returned by the :func:`xrange` function are now " +"deprecated, and trigger warnings when they're accessed; they'll disappear in" +" Python 2.3. :class:`xrange` objects tried to pretend they were full " +"sequence types by supporting slicing, sequence multiplication, and the " +":keyword:`in` operator, but these features were rarely used and therefore " +"buggy. The :meth:`tolist` method and the :attr:`start`, :attr:`stop`, and " +":attr:`step` attributes are also being deprecated. At the C level, the " +"fourth argument to the :c:func:`PyRange_New` function, ``repeat``, has also " +"been deprecated." +msgstr "" + +#: ../../whatsnew/2.2.rst:1224 +msgid "" +"There were a bunch of patches to the dictionary implementation, mostly to " +"fix potential core dumps if a dictionary contains objects that sneakily " +"changed their hash value, or mutated the dictionary they were contained in. " +"For a while python-dev fell into a gentle rhythm of Michael Hudson finding a" +" case that dumped core, Tim Peters fixing the bug, Michael finding another " +"case, and round and round it went." +msgstr "" +"字典实现中有一堆补丁,主要是为了修复潜在的核心转储问题,这些问题发生在字典中包含的对象悄悄改变其哈希值,或者在它们所包含的字典中发生突变时。那段时间,python-" +"dev 邮件列表进入了一个微妙的节奏:Michael Hudson 发现一个导致核心转储的案例,Tim Peters 修复这个 bug,接着 " +"Michael 又发现另一个案例,如此反复循环。" + +#: ../../whatsnew/2.2.rst:1231 +msgid "" +"On Windows, Python can now be compiled with Borland C thanks to a number of " +"patches contributed by Stephen Hansen, though the result isn't fully " +"functional yet. (But this *is* progress...)" +msgstr "" +"在 Windows 上,Python 现在可以使用 Borland C 编译,这要归功于 Stephen Hansen " +"提供的多个补丁,尽管结果还不完全可用。(但这*确实*是一个进步……)" + +#: ../../whatsnew/2.2.rst:1235 +msgid "" +"Another Windows enhancement: Wise Solutions generously offered PythonLabs " +"use of their InstallerMaster 8.1 system. Earlier PythonLabs Windows " +"installers used Wise 5.0a, which was beginning to show its age. (Packaged " +"up by Tim Peters.)" +msgstr "" +"另一个 Windows 改进:Wise Solutions 慷慨地向 PythonLabs 提供了他们的 InstallerMaster 8.1 " +"系统。早期的 PythonLabs Windows 安装程序使用的是 Wise 5.0a,已经开始显得过时。(由 Tim Peters 打包。)" + +#: ../../whatsnew/2.2.rst:1239 +msgid "" +"Files ending in ``.pyw`` can now be imported on Windows. ``.pyw`` is a " +"Windows-only thing, used to indicate that a script needs to be run using " +"PYTHONW.EXE instead of PYTHON.EXE in order to prevent a DOS console from " +"popping up to display the output. This patch makes it possible to import " +"such scripts, in case they're also usable as modules. (Implemented by David" +" Bolen.)" +msgstr "" +"在 Windows 上现在将会导入以 ``.pyw`` 结尾的文件。 ``.pyw`` 是 Windows 专属的,用来指明一个脚本需要使用 " +"PYTHONW.EXE 而不是 PYTHON.EXE 来运行以避免弹出 DOS 控制台来显示输出。 " +"该补丁使得导入这样的脚本成为可能,让它们也可以作为模块来使用。 (由 David Bolen 实现。)" + +#: ../../whatsnew/2.2.rst:1245 +msgid "" +"On platforms where Python uses the C :c:func:`dlopen` function to load " +"extension modules, it's now possible to set the flags used by " +":c:func:`dlopen` using the :func:`sys.getdlopenflags` and " +":func:`sys.setdlopenflags` functions. (Contributed by Bram Stolk.)" +msgstr "" +"在 Python 会使用 C :c:func:`dlopen` 函数来加载扩展模块的平台上,现在可以使用 " +":func:`sys.getdlopenflags` 和 :func:`sys.setdlopenflags` 等函数来设置 " +":c:func:`dlopen` 所使用的旗标。 (由 Bram Stolk 贡献。)" + +#: ../../whatsnew/2.2.rst:1250 +msgid "" +"The :func:`pow` built-in function no longer supports 3 arguments when " +"floating-point numbers are supplied. ``pow(x, y, z)`` returns ``(x**y) % " +"z``, but this is never useful for floating point numbers, and the final " +"result varies unpredictably depending on the platform. A call such as " +"``pow(2.0, 8.0, 7.0)`` will now raise a :exc:`TypeError` exception." +msgstr "" + +#: ../../whatsnew/2.2.rst:1260 +msgid "Acknowledgements" +msgstr "致谢" + +#: ../../whatsnew/2.2.rst:1262 +msgid "" +"The author would like to thank the following people for offering " +"suggestions, corrections and assistance with various drafts of this article:" +" Fred Bremmer, Keith Briggs, Andrew Dalke, Fred L. Drake, Jr., Carel " +"Fellinger, David Goodger, Mark Hammond, Stephen Hansen, Michael Hudson, Jack" +" Jansen, Marc-André Lemburg, Martin von Löwis, Fredrik Lundh, Michael McLay," +" Nick Mathewson, Paul Moore, Gustavo Niemeyer, Don O'Donnell, Joonas " +"Paalasma, Tim Peters, Jens Quade, Tom Reinhardt, Neil Schemenauer, Guido van" +" Rossum, Greg Ward, Edward Welbourne." +msgstr "" +"作者感谢以下人员为本文的各种草案提供建议,更正和帮助: Fred Bremmer, Keith Briggs, Andrew Dalke, Fred " +"L. Drake, Jr., Carel Fellinger, David Goodger, Mark Hammond, Stephen Hansen," +" Michael Hudson, Jack Jansen, Marc-André Lemburg, Martin von Löwis, Fredrik " +"Lundh, Michael McLay, Nick Mathewson, Paul Moore, Gustavo Niemeyer, Don " +"O'Donnell, Joonas Paalasma, Tim Peters, Jens Quade, Tom Reinhardt, Neil " +"Schemenauer, Guido van Rossum, Greg Ward, Edward Welbourne." diff --git a/whatsnew/2.3.po b/whatsnew/2.3.po new file mode 100644 index 000000000..8241583e4 --- /dev/null +++ b/whatsnew/2.3.po @@ -0,0 +1,2526 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) 2001-2024, Python Software Foundation +# This file is distributed under the same license as the Python package. +# FIRST AUTHOR , YEAR. +# +# Translators: +# Fei Yin , 2018 +# ppcfish , 2019 +# Naisen Xu <723648649@qq.com>, 2020 +# Rafael Fontenelle , 2024 +# Freesand Leo , 2024 +# +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: Python 3.9\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2024-12-20 16:41+0000\n" +"PO-Revision-Date: 2017-02-16 23:42+0000\n" +"Last-Translator: Freesand Leo , 2024\n" +"Language-Team: Chinese (China) (https://app.transifex.com/python-doc/teams/5390/zh_CN/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: zh_CN\n" +"Plural-Forms: nplurals=1; plural=0;\n" + +#: ../../whatsnew/2.3.rst:3 +msgid "What's New in Python 2.3" +msgstr "Python 2.3 有什么新变化" + +#: ../../whatsnew/2.3.rst:0 +msgid "Author" +msgstr "作者" + +#: ../../whatsnew/2.3.rst:5 +msgid "A.M. Kuchling" +msgstr "A.M. Kuchling" + +#: ../../whatsnew/2.3.rst:11 +msgid "" +"This article explains the new features in Python 2.3. Python 2.3 was " +"released on July 29, 2003." +msgstr "本文介绍了 Python 2.3 的新特性。 Python 2.3 发布于 2003 年 7 月 29 日。" + +#: ../../whatsnew/2.3.rst:14 +msgid "" +"The main themes for Python 2.3 are polishing some of the features added in " +"2.2, adding various small but useful enhancements to the core language, and " +"expanding the standard library. The new object model introduced in the " +"previous version has benefited from 18 months of bugfixes and from " +"optimization efforts that have improved the performance of new-style " +"classes. A few new built-in functions have been added such as :func:`sum` " +"and :func:`enumerate`. The :keyword:`in` operator can now be used for " +"substring searches (e.g. ``\"ab\" in \"abc\"`` returns :const:`True`)." +msgstr "" +"Python 2.3 的主要主题是完善在 2.2 中添加的一些功能、为核心语言添加各种小但实用的增强功能,以及扩展标准库。 " +"上一版本引入的新对象模型已经受益于 18 个月的错误修复和优化努力,这些优化提升了新式类的性能。 新增了几个内置函数,例如 :func:`sum` 和 " +":func:`enumerate`。 :keyword:`in` 操作符现在可以用于子字符串搜索 (例如,``\"ab\" in \"abc\"`` " +"将返回 :const:`True`)。" + +#: ../../whatsnew/2.3.rst:23 +msgid "" +"Some of the many new library features include Boolean, set, heap, and " +"date/time data types, the ability to import modules from ZIP-format " +"archives, metadata support for the long-awaited Python catalog, an updated " +"version of IDLE, and modules for logging messages, wrapping text, parsing " +"CSV files, processing command-line options, using BerkeleyDB databases... " +"the list of new and enhanced modules is lengthy." +msgstr "" +"许多新库功能包括布尔值、集合、堆、日期/时间数据类型,从ZIP格式的归档文件中导入模块的能力,期待已久的 Python 目录的元数据支持,更新版本的 " +"IDLE,以及用于日志记录、文本包装、解析 CSV 文件、处理命令行选项、使用 BerkeleyDB 数据库的模块…… 新模块和增强模块的列表相当长。" + +#: ../../whatsnew/2.3.rst:30 +msgid "" +"This article doesn't attempt to provide a complete specification of the new " +"features, but instead provides a convenient overview. For full details, you" +" should refer to the documentation for Python 2.3, such as the Python " +"Library Reference and the Python Reference Manual. If you want to " +"understand the complete implementation and design rationale, refer to the " +"PEP for a particular new feature." +msgstr "" +"本文并不试图提供对新功能的完整规范,而是提供了一个方便的概览。 有关详细信息,你应该参考 Python 2.3 的文档,例如 Python 库参考和 " +"Python 参考手册。 如果你想了解完整的实现和设计原理,请参阅特定新功能的 PEP。" + +#: ../../whatsnew/2.3.rst:41 +msgid "PEP 218: A Standard Set Datatype" +msgstr "PEP 218: 标准集合数据类型" + +#: ../../whatsnew/2.3.rst:43 +msgid "" +"The new :mod:`sets` module contains an implementation of a set datatype. " +"The :class:`Set` class is for mutable sets, sets that can have members added" +" and removed. The :class:`ImmutableSet` class is for sets that can't be " +"modified, and instances of :class:`ImmutableSet` can therefore be used as " +"dictionary keys. Sets are built on top of dictionaries, so the elements " +"within a set must be hashable." +msgstr "" + +#: ../../whatsnew/2.3.rst:50 +msgid "Here's a simple example::" +msgstr "这是一个简单的示例:" + +#: ../../whatsnew/2.3.rst:66 +msgid "" +"The union and intersection of sets can be computed with the :meth:`union` " +"and :meth:`intersection` methods; an alternative notation uses the bitwise " +"operators ``&`` and ``|``. Mutable sets also have in-place versions of these" +" methods, :meth:`union_update` and :meth:`intersection_update`. ::" +msgstr "" + +#: ../../whatsnew/2.3.rst:86 +msgid "" +"It's also possible to take the symmetric difference of two sets. This is " +"the set of all elements in the union that aren't in the intersection. " +"Another way of putting it is that the symmetric difference contains all " +"elements that are in exactly one set. Again, there's an alternative " +"notation (``^``), and an in-place version with the ungainly name " +":meth:`symmetric_difference_update`. ::" +msgstr "" + +#: ../../whatsnew/2.3.rst:100 +msgid "" +"There are also :meth:`issubset` and :meth:`issuperset` methods for checking " +"whether one set is a subset or superset of another::" +msgstr "另外还有 :meth:`issubset` 和 :meth:`issuperset` 方法用来检查一个集合是否为另一个集合的子集或超集::" + +#: ../../whatsnew/2.3.rst:117 +msgid ":pep:`218` - Adding a Built-In Set Object Type" +msgstr ":pep:`218` - 添加内置Set对象类型" + +#: ../../whatsnew/2.3.rst:117 +msgid "" +"PEP written by Greg V. Wilson. Implemented by Greg V. Wilson, Alex Martelli," +" and GvR." +msgstr "PEP 由 Greg V. Wilson 撰写 ; 由 Greg V. Wilson, Alex Martelli 和 GvR 实现。" + +#: ../../whatsnew/2.3.rst:126 +msgid "PEP 255: Simple Generators" +msgstr "PEP 255: 简单的生成器" + +#: ../../whatsnew/2.3.rst:128 +msgid "" +"In Python 2.2, generators were added as an optional feature, to be enabled " +"by a ``from __future__ import generators`` directive. In 2.3 generators no " +"longer need to be specially enabled, and are now always present; this means " +"that :keyword:`yield` is now always a keyword. The rest of this section is " +"a copy of the description of generators from the \"What's New in Python " +"2.2\" document; if you read it back when Python 2.2 came out, you can skip " +"the rest of this section." +msgstr "" +"在 Python 2.2 中,生成器作为一个可选特性被添加,需要通过 ``from __future__ import generators`` " +"指令来启用。 在 2.3 版本中,生成器不再需要特别启用,现在总是存在;这意味着 :keyword:`yield` 现在始终是一个关键字。 " +"本节的其余部分是从《Python 2.2的新特性》文档中复制的生成器描述;如果你在 Python 2.2 发布时已经阅读过,可以跳过本节的其余部分。" + +#: ../../whatsnew/2.3.rst:136 +msgid "" +"You're doubtless familiar with how function calls work in Python or C. When " +"you call a function, it gets a private namespace where its local variables " +"are created. When the function reaches a :keyword:`return` statement, the " +"local variables are destroyed and the resulting value is returned to the " +"caller. A later call to the same function will get a fresh new set of local" +" variables. But, what if the local variables weren't thrown away on exiting " +"a function? What if you could later resume the function where it left off? " +"This is what generators provide; they can be thought of as resumable " +"functions." +msgstr "" +"你一定熟悉在 Python 或 C 语言中函数调用的工作方式。 当你调用一个函数时,它会获得一个私有命名空间,在这个命名空间中创建其局部变量。 " +"当函数执行到 :keyword:`return` 语句时,这些局部变量会被销毁,并将结果值返回给调用者。 " +"稍后对同一个函数的调用将获得一套全新的局部变量。 " +"但是,如果局部变量在函数退出时不被丢弃呢?如果你可以在函数停止的地方稍后恢复执行呢?这就是生成器所提供的功能;它们可以被视为可恢复的函数。" + +#: ../../whatsnew/2.3.rst:145 +msgid "Here's the simplest example of a generator function::" +msgstr "这里是一个生成器函数的最简示例::" + +#: ../../whatsnew/2.3.rst:151 +msgid "" +"A new keyword, :keyword:`yield`, was introduced for generators. Any " +"function containing a :keyword:`!yield` statement is a generator function; " +"this is detected by Python's bytecode compiler which compiles the function " +"specially as a result." +msgstr "" +"一个新的关键字 :keyword:`yield` 被引入用于生成器。 任何包含 :keyword:`!yield` 语句的函数都是生成器函数;这由 " +"Python 的字节码编译器检测到,并因此对函数进行特殊编译。" + +#: ../../whatsnew/2.3.rst:156 +msgid "" +"When you call a generator function, it doesn't return a single value; " +"instead it returns a generator object that supports the iterator protocol. " +"On executing the :keyword:`yield` statement, the generator outputs the value" +" of ``i``, similar to a :keyword:`return` statement. The big difference " +"between :keyword:`!yield` and a :keyword:`!return` statement is that on " +"reaching a :keyword:`!yield` the generator's state of execution is suspended" +" and local variables are preserved. On the next call to the generator's " +"``.next()`` method, the function will resume executing immediately after the" +" :keyword:`!yield` statement. (For complicated reasons, the " +":keyword:`!yield` statement isn't allowed inside the :keyword:`try` block of" +" a :keyword:`!try`...\\ :keyword:`!finally` statement; read :pep:`255` for a" +" full explanation of the interaction between :keyword:`!yield` and " +"exceptions.)" +msgstr "" +"当您调用生成器函数时,它不会返回一个单独的值;相反,它会返回一个支持迭代器协议的生成器对象。在执行 :keyword:`yield` " +"语句时,生成器会输出 ``i`` 的值 ,类似于 :keyword:`return` 语句。 :keyword:`!yield` 与 " +":keyword:`!return` 语句之间的最大区别在于,在到达 :keyword:`!yield` 时,生成器的执行状态会暂停,并保留本地变量。 " +"在下一次调用生成器 的 ``.next()`` 方法时,函数将在 :keyword:`!yield` 语句之后立即恢复执行。 " +"(由于复杂的原因,:keyword:`!yield` 语句不允许在 :keyword:`try`...\\ :keyword:`!finally` " +"语句的 :keyword:`!try` 代码块内出现;有关 :keyword:`!yield` 和异常之间交互的完整解释,请阅读 " +":pep:`255`。)" + +#: ../../whatsnew/2.3.rst:169 +msgid "Here's a sample usage of the :func:`generate_ints` generator::" +msgstr "这里是 :func:`generate_ints` 生成器的用法示例::" + +#: ../../whatsnew/2.3.rst:186 +msgid "" +"You could equally write ``for i in generate_ints(5)``, or ``a,b,c = " +"generate_ints(3)``." +msgstr "" +"你可以等价地写成 ``for i in generate_ints(5)`` 或 ``a,b,c = generate_ints(3)``。" + +#: ../../whatsnew/2.3.rst:189 +msgid "" +"Inside a generator function, the :keyword:`return` statement can only be " +"used without a value, and signals the end of the procession of values; " +"afterwards the generator cannot return any further values. " +":keyword:`!return` with a value, such as ``return 5``, is a syntax error " +"inside a generator function. The end of the generator's results can also be" +" indicated by raising :exc:`StopIteration` manually, or by just letting the " +"flow of execution fall off the bottom of the function." +msgstr "" +"在生成器函数内部, :keyword:`return` " +"语句只能不带值使用,并表示值的生成过程结束;之后,生成器不能再返回任何值。在生成器函数内部,带值的 :keyword:`!return`,例如 " +"``return 5``,是语法错误。生成器结果的结束也可以通过手动引发 :exc:`StopIteration` " +"异常来指示,或者只是让执行流自然地从函数底部流出。" + +#: ../../whatsnew/2.3.rst:197 +msgid "" +"You could achieve the effect of generators manually by writing your own " +"class and storing all the local variables of the generator as instance " +"variables. For example, returning a list of integers could be done by " +"setting ``self.count`` to 0, and having the :meth:`next` method increment " +"``self.count`` and return it. However, for a moderately complicated " +"generator, writing a corresponding class would be much messier. " +":file:`Lib/test/test_generators.py` contains a number of more interesting " +"examples. The simplest one implements an in-order traversal of a tree using" +" generators recursively. ::" +msgstr "" +"你可以通过编写自己的类并将生成器的所有局部变量存储为实例变量,手动实现生成器的效果。例如,返回一个整数列表可以通过将 ``self.count`` " +"设置为0,并让 :meth:`next` 方法递增 ``self.count`` " +"并返回它。然而,对于一个中等复杂的生成器,编写一个相应的类将会更加混乱。:file:`Lib/test/test_generators.py` " +"包含了一些更有趣的例子。其中最简单的一个使用生成器递归实现了树的中序遍历:" + +#: ../../whatsnew/2.3.rst:215 +msgid "" +"Two other examples in :file:`Lib/test/test_generators.py` produce solutions " +"for the N-Queens problem (placing $N$ queens on an $NxN$ chess board so that" +" no queen threatens another) and the Knight's Tour (a route that takes a " +"knight to every square of an $NxN$ chessboard without visiting any square " +"twice)." +msgstr "" +"在 :file:`Lib/test/test_generators.py` " +"中还有另外两个例子,它们分别解决了N皇后问题(在$NxN$的棋盘上放置$N$个皇后,使得没有任何皇后威胁到其他皇后)和骑士巡游问题(在$NxN$的棋盘上,骑士访问每一个方格且不重复访问任何方格的路径)。" + +#: ../../whatsnew/2.3.rst:220 +msgid "" +"The idea of generators comes from other programming languages, especially " +"Icon (https://www.cs.arizona.edu/icon/), where the idea of generators is " +"central. In Icon, every expression and function call behaves like a " +"generator. One example from \"An Overview of the Icon Programming " +"Language\" at https://www.cs.arizona.edu/icon/docs/ipd266.htm gives an idea " +"of what this looks like::" +msgstr "" + +#: ../../whatsnew/2.3.rst:230 +msgid "" +"In Icon the :func:`find` function returns the indexes at which the substring" +" \"or\" is found: 3, 23, 33. In the :keyword:`if` statement, ``i`` is first" +" assigned a value of 3, but 3 is less than 5, so the comparison fails, and " +"Icon retries it with the second value of 23. 23 is greater than 5, so the " +"comparison now succeeds, and the code prints the value 23 to the screen." +msgstr "" + +#: ../../whatsnew/2.3.rst:236 +msgid "" +"Python doesn't go nearly as far as Icon in adopting generators as a central " +"concept. Generators are considered part of the core Python language, but " +"learning or using them isn't compulsory; if they don't solve any problems " +"that you have, feel free to ignore them. One novel feature of Python's " +"interface as compared to Icon's is that a generator's state is represented " +"as a concrete object (the iterator) that can be passed around to other " +"functions or stored in a data structure." +msgstr "" +"Python并不像Icon那样将生成器作为核心概念来采用。生成器被视为Python核心语言的一部分,但学习或使用它们并不是强制的;如果它们不能解决你遇到的问题,可以完全忽略它们。与Icon相比,Python接口的一个新颖特性是生成器的状态表示为一个具体的对象(迭代器),可以传递给其他函数或存储在数据结构中。" + +#: ../../whatsnew/2.3.rst:248 +msgid ":pep:`255` - Simple Generators" +msgstr ":pep:`255` - 简单生成器" + +#: ../../whatsnew/2.3.rst:248 +msgid "" +"Written by Neil Schemenauer, Tim Peters, Magnus Lie Hetland. Implemented " +"mostly by Neil Schemenauer and Tim Peters, with other fixes from the Python " +"Labs crew." +msgstr "" +"由 Neil Schemenauer, Tim Peters, Magnus Lie Hetland 撰写。 主要由 Neil Schemenauer " +"和 Tim Peters 实现,并包含来自 Python Labs 团队的修正。" + +#: ../../whatsnew/2.3.rst:257 +msgid "PEP 263: Source Code Encodings" +msgstr "PEP 263: 源代码的字符编码格式" + +#: ../../whatsnew/2.3.rst:259 +msgid "" +"Python source files can now be declared as being in different character set " +"encodings. Encodings are declared by including a specially formatted " +"comment in the first or second line of the source file. For example, a " +"UTF-8 file can be declared with::" +msgstr "" +"现在可以声明Python源文件使用不同的字符集编码。通过在源文件的第一行或第二行包含特定格式的注释来声明编码。例如,一个UTF-8文件可以这样声明:" + +#: ../../whatsnew/2.3.rst:267 +msgid "" +"Without such an encoding declaration, the default encoding used is 7-bit " +"ASCII. Executing or importing modules that contain string literals with " +"8-bit characters and have no encoding declaration will result in a " +":exc:`DeprecationWarning` being signalled by Python 2.3; in 2.4 this will be" +" a syntax error." +msgstr "" +"如果没有这样的编码声明,默认使用7位ASCII编码。执行或导入包含8位字符的字符串字面量且没有编码声明的模块时,在Python 2.3中会触发 " +":exc:`DeprecationWarning` 警告;而在Python 2.4中,这将成为语法错误" + +#: ../../whatsnew/2.3.rst:273 +msgid "" +"The encoding declaration only affects Unicode string literals, which will be" +" converted to Unicode using the specified encoding. Note that Python " +"identifiers are still restricted to ASCII characters, so you can't have " +"variable names that use characters outside of the usual alphanumerics." +msgstr "" +"编码声明只影响Unicode字符串字面量,这些字面量将使用指定的编码转换为Unicode。请注意,Python的标识符仍然限制为ASCII字符,因此变量名不能使用超出常规字母数字字符范围的字符。" + +#: ../../whatsnew/2.3.rst:282 +msgid ":pep:`263` - Defining Python Source Code Encodings" +msgstr ":pep:`263` - 定义 Python 源代码的编码格式" + +#: ../../whatsnew/2.3.rst:282 +msgid "" +"Written by Marc-André Lemburg and Martin von Löwis; implemented by Suzuki " +"Hisao and Martin von Löwis." +msgstr "" +"由 Marc-André Lemburg 和 Martin von Löwis 撰写 ; 由 Suzuki Hisao 和 Martin von " +"Löwis 实现。" + +#: ../../whatsnew/2.3.rst:289 +msgid "PEP 273: Importing Modules from ZIP Archives" +msgstr "PEP 273: 从ZIP压缩包导入模块" + +#: ../../whatsnew/2.3.rst:291 +msgid "" +"The new :mod:`zipimport` module adds support for importing modules from a " +"ZIP-format archive. You don't need to import the module explicitly; it will" +" be automatically imported if a ZIP archive's filename is added to " +"``sys.path``. For example:" +msgstr "" +"通过新的 :mod:`zipimport` 模块增加了从 ZIP 格式归档文件导入模块的支持。 你不需要显式地导入模块;它将在 ZIP " +"归档文件名被添加到 ``sys.path`` 的情况下自动导入。 例如:" + +#: ../../whatsnew/2.3.rst:314 +msgid "" +"An entry in ``sys.path`` can now be the filename of a ZIP archive. The ZIP " +"archive can contain any kind of files, but only files named :file:`\\*.py`, " +":file:`\\*.pyc`, or :file:`\\*.pyo` can be imported. If an archive only " +"contains :file:`\\*.py` files, Python will not attempt to modify the archive" +" by adding the corresponding :file:`\\*.pyc` file, meaning that if a ZIP " +"archive doesn't contain :file:`\\*.pyc` files, importing may be rather slow." +msgstr "" + +#: ../../whatsnew/2.3.rst:321 +msgid "" +"A path within the archive can also be specified to only import from a " +"subdirectory; for example, the path :file:`/tmp/example.zip/lib/` would only" +" import from the :file:`lib/` subdirectory within the archive." +msgstr "" + +#: ../../whatsnew/2.3.rst:331 +msgid ":pep:`273` - Import Modules from Zip Archives" +msgstr ":pep:`273` - 从 ZIP 压缩包导入模块" + +#: ../../whatsnew/2.3.rst:329 +msgid "" +"Written by James C. Ahlstrom, who also provided an implementation. Python " +"2.3 follows the specification in :pep:`273`, but uses an implementation " +"written by Just van Rossum that uses the import hooks described in " +":pep:`302`. See section :ref:`section-pep302` for a description of the new " +"import hooks." +msgstr "" +"由James C. Ahlstrom撰写,并提供了一个实现。Python 2.3遵循 :pep:`273` 中的规范,但使用了Just van " +"Rossum编写的实现,该实现利用了 :pep:`302` 中描述的导入钩子。有关新导入钩子的描述,请参见 :ref:`section-pep302` " +"的相关部分。" + +#: ../../whatsnew/2.3.rst:338 +msgid "PEP 277: Unicode file name support for Windows NT" +msgstr "PEP 277: 针对 Windows NT 的 Unicode 文件名支持" + +#: ../../whatsnew/2.3.rst:340 +msgid "" +"On Windows NT, 2000, and XP, the system stores file names as Unicode " +"strings. Traditionally, Python has represented file names as byte strings, " +"which is inadequate because it renders some file names inaccessible." +msgstr "" +"在Windows " +"NT、2000和XP上,系统将文件名存储为Unicode字符串。传统上,Python将文件名表示为字节字符串,这种方式不够完善,因为它会导致某些文件名无法访问。" + +#: ../../whatsnew/2.3.rst:344 +msgid "" +"Python now allows using arbitrary Unicode strings (within the limitations of" +" the file system) for all functions that expect file names, most notably the" +" :func:`open` built-in function. If a Unicode string is passed to " +":func:`os.listdir`, Python now returns a list of Unicode strings. A new " +"function, :func:`os.getcwdu`, returns the current directory as a Unicode " +"string." +msgstr "" + +#: ../../whatsnew/2.3.rst:350 +msgid "" +"Byte strings still work as file names, and on Windows Python will " +"transparently convert them to Unicode using the ``mbcs`` encoding." +msgstr "字节串仍可被用作文件名,并且在 Windows 上 Python 将透明地使用 ``mbcs`` 编码格式将其转换为 Unicode。" + +#: ../../whatsnew/2.3.rst:353 +msgid "" +"Other systems also allow Unicode strings as file names but convert them to " +"byte strings before passing them to the system, which can cause a " +":exc:`UnicodeError` to be raised. Applications can test whether arbitrary " +"Unicode strings are supported as file names by checking " +":attr:`os.path.supports_unicode_filenames`, a Boolean value." +msgstr "" + +#: ../../whatsnew/2.3.rst:359 +msgid "Under MacOS, :func:`os.listdir` may now return Unicode filenames." +msgstr "在 MacOS 下,:func:`os.listdir` 现在可以返回 Unicode 文件名。" + +#: ../../whatsnew/2.3.rst:365 +msgid ":pep:`277` - Unicode file name support for Windows NT" +msgstr ":pep:`277` - 针对 Windows NT 的 Unicode 文件名支持" + +#: ../../whatsnew/2.3.rst:365 +msgid "" +"Written by Neil Hodgson; implemented by Neil Hodgson, Martin von Löwis, and " +"Mark Hammond." +msgstr "" +"由 Neil Hodgson 撰写 ; 由 Neil Hodgson, Martin von Löwis 和 Mark Hammond 实现。" + +#: ../../whatsnew/2.3.rst:375 +msgid "PEP 278: Universal Newline Support" +msgstr "PEP 278: 通用换行支持" + +#: ../../whatsnew/2.3.rst:377 +msgid "" +"The three major operating systems used today are Microsoft Windows, Apple's " +"Macintosh OS, and the various Unix derivatives. A minor irritation of " +"cross-platform work is that these three platforms all use different " +"characters to mark the ends of lines in text files. Unix uses the linefeed " +"(ASCII character 10), MacOS uses the carriage return (ASCII character 13), " +"and Windows uses a two-character sequence of a carriage return plus a " +"newline." +msgstr "" +"目前使用的三大操作系统是微软的 Windows、苹果的 Macintosh OS 和各种 Unix " +"衍生系统。跨平台工作的一个小麻烦是,这三个平台都使用不同的字符来标记文本文件中的行结束。Unix 使用换行符(ASCII 字符 10),MacOS " +"使用回车符(ASCII 字符 13),Windows 使用回车符加换行符的双字符序列。" + +#: ../../whatsnew/2.3.rst:384 +msgid "" +"Python's file objects can now support end of line conventions other than the" +" one followed by the platform on which Python is running. Opening a file " +"with the mode ``'U'`` or ``'rU'`` will open a file for reading in " +":term:`universal newlines` mode. All three line ending conventions will be " +"translated to a ``'\\n'`` in the strings returned by the various file " +"methods such as :meth:`read` and :meth:`readline`." +msgstr "" + +#: ../../whatsnew/2.3.rst:391 +msgid "" +"Universal newline support is also used when importing modules and when " +"executing a file with the :func:`execfile` function. This means that Python" +" modules can be shared between all three operating systems without needing " +"to convert the line-endings." +msgstr "" + +#: ../../whatsnew/2.3.rst:396 +msgid "" +"This feature can be disabled when compiling Python by specifying the " +":option:`!--without-universal-newlines` switch when running Python's " +":program:`configure` script." +msgstr "" +"在编译 Python 时,可以通过在运行 Python 的 :program:`configure` 脚本时指定 :option:`!--" +"without-universal-newlines` 开关禁用该功能。" + +#: ../../whatsnew/2.3.rst:403 +msgid ":pep:`278` - Universal Newline Support" +msgstr ":pep:`278` - 通用换行支持" + +#: ../../whatsnew/2.3.rst:404 +msgid "Written and implemented by Jack Jansen." +msgstr "由 Jack Jansen 撰写并实现。" + +#: ../../whatsnew/2.3.rst:412 +msgid "PEP 279: enumerate()" +msgstr "PEP 279: enumerate()" + +#: ../../whatsnew/2.3.rst:414 +msgid "" +"A new built-in function, :func:`enumerate`, will make certain loops a bit " +"clearer. ``enumerate(thing)``, where *thing* is either an iterator or a " +"sequence, returns an iterator that will return ``(0, thing[0])``, ``(1, " +"thing[1])``, ``(2, thing[2])``, and so forth." +msgstr "" +"新的内置函数 :func:`enumerate` 将使某些循环更加清晰。 在 ``enumerate(thing)`` 中,如果 *thing* " +"是迭代器或序列,则返回一个迭代器,该迭代器将返回 ``(0, thing[0])``,``(1, thing[1])``,``(2, " +"thing[2])``,以此类推。" + +#: ../../whatsnew/2.3.rst:419 +msgid "A common idiom to change every element of a list looks like this::" +msgstr "改变一个列表中每个元素的常见写法看起来像是这样::" + +#: ../../whatsnew/2.3.rst:426 +msgid "This can be rewritten using :func:`enumerate` as::" +msgstr "可以使用 :func:`enumerate` 重写为:" + +#: ../../whatsnew/2.3.rst:435 +msgid ":pep:`279` - The enumerate() built-in function" +msgstr ":pep:`279` - 内置函数 enumerate()" + +#: ../../whatsnew/2.3.rst:436 +msgid "Written and implemented by Raymond D. Hettinger." +msgstr "由 Raymond D. Hettinger 撰写并实现。" + +#: ../../whatsnew/2.3.rst:442 +msgid "PEP 282: The logging Package" +msgstr "PEP 282: logging 包" + +#: ../../whatsnew/2.3.rst:444 +msgid "" +"A standard package for writing logs, :mod:`logging`, has been added to " +"Python 2.3. It provides a powerful and flexible mechanism for generating " +"logging output which can then be filtered and processed in various ways. A " +"configuration file written in a standard format can be used to control the " +"logging behavior of a program. Python includes handlers that will write log" +" records to standard error or to a file or socket, send them to the system " +"log, or even e-mail them to a particular address; of course, it's also " +"possible to write your own handler classes." +msgstr "" +"Python 2.3 中新增了一个用于编写日志的标准软件包 :mod:`logging`。 " +"它为生成日志输出提供了一个强大而灵活的机制,这些输出可以通过各种方式进行过滤和处理。用标准格式编写的配置文件可以用来控制程序的日志行为。 Python " +"包含的处理器可以将日志记录写入标准错误、文件或套接字,发送到系统日志,甚至通过电子邮件发送到特定地址;当然,您也可以编写自己的处理器类。" + +#: ../../whatsnew/2.3.rst:453 +msgid "" +"The :class:`Logger` class is the primary class. Most application code will " +"deal with one or more :class:`Logger` objects, each one used by a particular" +" subsystem of the application. Each :class:`Logger` is identified by a name," +" and names are organized into a hierarchy using ``.`` as the component " +"separator. For example, you might have :class:`Logger` instances named " +"``server``, ``server.auth`` and ``server.network``. The latter two " +"instances are below ``server`` in the hierarchy. This means that if you " +"turn up the verbosity for ``server`` or direct ``server`` messages to a " +"different handler, the changes will also apply to records logged to " +"``server.auth`` and ``server.network``. There's also a root :class:`Logger` " +"that's the parent of all other loggers." +msgstr "" + +#: ../../whatsnew/2.3.rst:464 +msgid "" +"For simple uses, the :mod:`logging` package contains some convenience " +"functions that always use the root log::" +msgstr "为了简化使用,:mod:`logging` 包提供了一些始终使用根日志的便捷函数::" + +#: ../../whatsnew/2.3.rst:475 ../../whatsnew/2.3.rst:500 +msgid "This produces the following output::" +msgstr "这会产生以下输出::" + +#: ../../whatsnew/2.3.rst:481 +msgid "" +"In the default configuration, informational and debugging messages are " +"suppressed and the output is sent to standard error. You can enable the " +"display of informational and debugging messages by calling the " +":meth:`setLevel` method on the root logger." +msgstr "" + +#: ../../whatsnew/2.3.rst:486 +msgid "" +"Notice the :func:`warning` call's use of string formatting operators; all of" +" the functions for logging messages take the arguments ``(msg, arg1, arg2, " +"...)`` and log the string resulting from ``msg % (arg1, arg2, ...)``." +msgstr "" + +#: ../../whatsnew/2.3.rst:490 +msgid "" +"There's also an :func:`exception` function that records the most recent " +"traceback. Any of the other functions will also record the traceback if you" +" specify a true value for the keyword argument *exc_info*. ::" +msgstr "" + +#: ../../whatsnew/2.3.rst:508 +msgid "" +"Slightly more advanced programs will use a logger other than the root " +"logger. The ``getLogger(name)`` function is used to get a particular log, " +"creating it if it doesn't exist yet. ``getLogger(None)`` returns the root " +"logger. ::" +msgstr "" + +#: ../../whatsnew/2.3.rst:519 +msgid "" +"Log records are usually propagated up the hierarchy, so a message logged to " +"``server.auth`` is also seen by ``server`` and ``root``, but a " +":class:`Logger` can prevent this by setting its :attr:`propagate` attribute " +"to :const:`False`." +msgstr "" + +#: ../../whatsnew/2.3.rst:523 +msgid "" +"There are more classes provided by the :mod:`logging` package that can be " +"customized. When a :class:`Logger` instance is told to log a message, it " +"creates a :class:`LogRecord` instance that is sent to any number of " +"different :class:`Handler` instances. Loggers and handlers can also have an" +" attached list of filters, and each filter can cause the :class:`LogRecord` " +"to be ignored or can modify the record before passing it along. When " +"they're finally output, :class:`LogRecord` instances are converted to text " +"by a :class:`Formatter` class. All of these classes can be replaced by your" +" own specially-written classes." +msgstr "" + +#: ../../whatsnew/2.3.rst:533 +msgid "" +"With all of these features the :mod:`logging` package should provide enough " +"flexibility for even the most complicated applications. This is only an " +"incomplete overview of its features, so please see the package's reference " +"documentation for all of the details. Reading :pep:`282` will also be " +"helpful." +msgstr "" +":mod:`logging` 软件包具有所有这些功能,即使是最复杂的应用程序也能灵活运用。 " +"本文仅是对其功能的不完整概述,因此请参阅软件包的参考文档了解所有细节。 阅读 :pep:`282` 也会有所帮助。" + +#: ../../whatsnew/2.3.rst:541 +msgid ":pep:`282` - A Logging System" +msgstr ":pep:`282` - Logging 系统" + +#: ../../whatsnew/2.3.rst:542 +msgid "Written by Vinay Sajip and Trent Mick; implemented by Vinay Sajip." +msgstr "由 Vinay Sajip 和 Trent Mick 撰写 ; 由 Vinay Sajip 实现。" + +#: ../../whatsnew/2.3.rst:550 +msgid "PEP 285: A Boolean Type" +msgstr "PEP 285: 布尔类型" + +#: ../../whatsnew/2.3.rst:552 +msgid "" +"A Boolean type was added to Python 2.3. Two new constants were added to the" +" :mod:`__builtin__` module, :const:`True` and :const:`False`. " +"(:const:`True` and :const:`False` constants were added to the built-ins in " +"Python 2.2.1, but the 2.2.1 versions are simply set to integer values of 1 " +"and 0 and aren't a different type.)" +msgstr "" + +#: ../../whatsnew/2.3.rst:558 +msgid "" +"The type object for this new type is named :class:`bool`; the constructor " +"for it takes any Python value and converts it to :const:`True` or " +":const:`False`. ::" +msgstr "" +"这个新类型的类型对象名为 :class:`bool`;它的构造函数接收任何 Python 值,并将其转换为 :const:`True` 或 " +":const:`False`。::" + +#: ../../whatsnew/2.3.rst:570 +msgid "" +"Most of the standard library modules and built-in functions have been " +"changed to return Booleans. ::" +msgstr "大多数标准库模块和内置函数都改为返回布尔值:" + +#: ../../whatsnew/2.3.rst:581 +msgid "" +"Python's Booleans were added with the primary goal of making code clearer. " +"For example, if you're reading a function and encounter the statement " +"``return 1``, you might wonder whether the ``1`` represents a Boolean truth " +"value, an index, or a coefficient that multiplies some other quantity. If " +"the statement is ``return True``, however, the meaning of the return value " +"is quite clear." +msgstr "" +"添加 Python 布尔运算的主要目的是使代码更清晰。 例如,如果您在阅读一个函数时遇到 ``return 1`` 语句,您可能会想知道 ``1`` " +"代表的是布尔真值、索引还是乘以其他量的系数。 然而,如果语句是 ``return True``,返回值的含义就非常清楚了。" + +#: ../../whatsnew/2.3.rst:587 +msgid "" +"Python's Booleans were *not* added for the sake of strict type-checking. A " +"very strict language such as Pascal would also prevent you performing " +"arithmetic with Booleans, and would require that the expression in an " +":keyword:`if` statement always evaluate to a Boolean result. Python is not " +"this strict and never will be, as :pep:`285` explicitly says. This means " +"you can still use any expression in an :keyword:`!if` statement, even ones " +"that evaluate to a list or tuple or some random object. The Boolean type is" +" a subclass of the :class:`int` class so that arithmetic using a Boolean " +"still works. ::" +msgstr "" +"Python 的布尔值 *不是* 为了严格的类型检查而添加的。 像 Pascal 这样非常严格的语言也会阻止您使用布尔进行算术运算,并要求 " +":keyword:`if` 语句中的表达式总是求布尔结果。 正如 :pep:`285` 所明确指出的,Python 没有这么严格,以后也不会有。 " +"这意味着您仍然可以在 :keyword:`!if` 语句中使用任何表达式,甚至是求值为 list、tuple 或一些随机对象的表达式。 布尔类型是 " +":class:`int` 类的子类,因此使用布尔值进行算术运算仍然有效:" + +#: ../../whatsnew/2.3.rst:605 +msgid "" +"To sum up :const:`True` and :const:`False` in a sentence: they're " +"alternative ways to spell the integer values 1 and 0, with the single " +"difference that :func:`str` and :func:`repr` return the strings ``'True'`` " +"and ``'False'`` instead of ``'1'`` and ``'0'``." +msgstr "" +"用一句话概括 :const:`True` 和 :const:`False`: 它们是拼写整数值 1 和 0 的另一种方式,唯一不同的是 " +":func:`str` 和 :func:`repr` 返回的字符串是 ``'True'`` 和 ``'False'``,而不是 ``'1'`` 和 " +"``'0'``。" + +#: ../../whatsnew/2.3.rst:613 +msgid ":pep:`285` - Adding a bool type" +msgstr ":pep:`285` - 添加布尔类型" + +#: ../../whatsnew/2.3.rst:614 +msgid "Written and implemented by GvR." +msgstr "由 GvR 撰写并实现。" + +#: ../../whatsnew/2.3.rst:620 +msgid "PEP 293: Codec Error Handling Callbacks" +msgstr "PEP 293: 编解码器错误处理回调" + +#: ../../whatsnew/2.3.rst:622 +msgid "" +"When encoding a Unicode string into a byte string, unencodable characters " +"may be encountered. So far, Python has allowed specifying the error " +"processing as either \"strict\" (raising :exc:`UnicodeError`), \"ignore\" " +"(skipping the character), or \"replace\" (using a question mark in the " +"output string), with \"strict\" being the default behavior. It may be " +"desirable to specify alternative processing of such errors, such as " +"inserting an XML character reference or HTML entity reference into the " +"converted string." +msgstr "" +"将 Unicode 字符串编码为字节字符串时,可能会遇到无法编码的字符。 到目前为止,Python 允许将错误处理指定为 \"strict\" (引发 " +":exc:`UnicodeError`)、\"ignore\" (跳过该字符) 或 \"replace\" (在输出字符串中使用问号),其中 " +"\"strict\" 是默认行为。 可能需要指定对此类错误的其他处理方式,例如在转换后的字符串中插入 XML 字符引用或 HTML 实体引用。" + +#: ../../whatsnew/2.3.rst:630 +msgid "" +"Python now has a flexible framework to add different processing strategies." +" New error handlers can be added with :func:`codecs.register_error`, and " +"codecs then can access the error handler with :func:`codecs.lookup_error`. " +"An equivalent C API has been added for codecs written in C. The error " +"handler gets the necessary state information such as the string being " +"converted, the position in the string where the error was detected, and the " +"target encoding. The handler can then either raise an exception or return a" +" replacement string." +msgstr "" +"Python 现在有一个灵活的框架,可以添加不同的处理策略。可以通过 :func:`codecs.register_error` " +"添加新的错误处理器,然后编解码器可以通过 :func:`codecs.lookup_error` 访问错误处理器。 " +"错误处理器会获取必要的状态信息,如正在转换的字符串、字符串中检测到错误的位置以及目标编码。 然后,处理器可以引发异常或返回替换字符串。" + +#: ../../whatsnew/2.3.rst:638 +msgid "" +"Two additional error handlers have been implemented using this framework: " +"\"backslashreplace\" uses Python backslash quoting to represent unencodable " +"characters and \"xmlcharrefreplace\" emits XML character references." +msgstr "" +"使用该框架还实现了两个额外的错误处理器: \"backslashreplace\" 使用 Python 反斜杠引号来表示无法编码的字符,而 " +"\"xmlcharrefreplace\" 则转换为 XML 字符引用。" + +#: ../../whatsnew/2.3.rst:645 +msgid ":pep:`293` - Codec Error Handling Callbacks" +msgstr ":pep:`293` - 编解码器错误处理回调" + +#: ../../whatsnew/2.3.rst:646 +msgid "Written and implemented by Walter Dörwald." +msgstr "由 Walter Dörwald 撰写并实现。" + +#: ../../whatsnew/2.3.rst:654 +msgid "PEP 301: Package Index and Metadata for Distutils" +msgstr "PEP 301: Distutils的软件包索引和元数据" + +#: ../../whatsnew/2.3.rst:656 +msgid "" +"Support for the long-requested Python catalog makes its first appearance in " +"2.3." +msgstr "广受期待的对 Python 编目的支持在 2.3 版中首次出现。" + +#: ../../whatsnew/2.3.rst:658 +msgid "" +"The heart of the catalog is the new Distutils :command:`register` command. " +"Running ``python setup.py register`` will collect the metadata describing a " +"package, such as its name, version, maintainer, description, &c., and send " +"it to a central catalog server. The resulting catalog is available from " +"https://pypi.org." +msgstr "" +"编目功能的核心是新的 Distutils :command:`register` 命令。 运行 ``python setup.py register``" +" 将会收集描述软件包的元数据,例如其名称、版本、维护者、描述信息等等,并将其发送给中央编目服务器。 结果编目数据可在 https://pypi.org " +"获取。" + +#: ../../whatsnew/2.3.rst:664 +msgid "" +"To make the catalog a bit more useful, a new optional *classifiers* keyword " +"argument has been added to the Distutils :func:`setup` function. A list of " +"`Trove `_-style strings can be supplied to help" +" classify the software." +msgstr "" + +#: ../../whatsnew/2.3.rst:669 +msgid "" +"Here's an example :file:`setup.py` with classifiers, written to be " +"compatible with older versions of the Distutils::" +msgstr "下面是一个带有分类器的 :file:`setup.py` 示例,其编写是为了兼容旧版本的 Distutils:" + +#: ../../whatsnew/2.3.rst:688 +msgid "" +"The full list of classifiers can be obtained by running ``python setup.py " +"register --list-classifiers``." +msgstr "" +"完整的 classifiers 列表可通过运行 ``python setup.py register --list-classifiers`` 来获取。" + +#: ../../whatsnew/2.3.rst:694 +msgid ":pep:`301` - Package Index and Metadata for Distutils" +msgstr ":pep:`301` - Distutils 的软件包索引和元数据" + +#: ../../whatsnew/2.3.rst:695 +msgid "Written and implemented by Richard Jones." +msgstr "由 Richard Jones 撰写并实现。" + +#: ../../whatsnew/2.3.rst:703 +msgid "PEP 302: New Import Hooks" +msgstr "PEP 302: 新导入钩子" + +#: ../../whatsnew/2.3.rst:705 +msgid "" +"While it's been possible to write custom import hooks ever since the " +":mod:`ihooks` module was introduced in Python 1.3, no one has ever been " +"really happy with it because writing new import hooks is difficult and " +"messy. There have been various proposed alternatives such as the " +":mod:`imputil` and :mod:`iu` modules, but none of them has ever gained much " +"acceptance, and none of them were easily usable from C code." +msgstr "" + +#: ../../whatsnew/2.3.rst:712 +msgid "" +":pep:`302` borrows ideas from its predecessors, especially from Gordon " +"McMillan's :mod:`iu` module. Three new items are added to the :mod:`sys` " +"module:" +msgstr "" + +#: ../../whatsnew/2.3.rst:716 +msgid "" +"``sys.path_hooks`` is a list of callable objects; most often they'll be " +"classes. Each callable takes a string containing a path and either returns " +"an importer object that will handle imports from this path or raises an " +":exc:`ImportError` exception if it can't handle this path." +msgstr "" +"``sys.path_hooks`` 是一个可调用对象列表,通常是类。 " +"每个可调用对象都接收一个包含路径的字符串,然后返回一个可处理从该路径导入的导入器对象,如果不能处理该路径,则引发 :exc:`ImportError` " +"异常。" + +#: ../../whatsnew/2.3.rst:721 +msgid "" +"``sys.path_importer_cache`` caches importer objects for each path, so " +"``sys.path_hooks`` will only need to be traversed once for each path." +msgstr "" +"``sys.path_importer_cache`` 会缓存每条路径的导入器对象,因此 ``sys.path_hooks`` 只需为每条路径遍历一次。" +" " + +#: ../../whatsnew/2.3.rst:724 +msgid "" +"``sys.meta_path`` is a list of importer objects that will be traversed " +"before ``sys.path`` is checked. This list is initially empty, but user code" +" can add objects to it. Additional built-in and frozen modules can be " +"imported by an object added to this list." +msgstr "" +"``sys.meta_path`` 是一个导入器对象列表,在检查 ``sys.path`` 之前将遍历该列表。 " +"该列表最初为空,但用户代码可以向其中添加对象。 其他内置模块和冻结模块可以通过添加到该列表中的对象导入。" + +#: ../../whatsnew/2.3.rst:729 +msgid "" +"Importer objects must have a single method, ``find_module(fullname, " +"path=None)``. *fullname* will be a module or package name, e.g. ``string`` " +"or ``distutils.core``. :meth:`find_module` must return a loader object that" +" has a single method, ``load_module(fullname)``, that creates and returns " +"the corresponding module object." +msgstr "" + +#: ../../whatsnew/2.3.rst:735 +msgid "" +"Pseudo-code for Python's new import logic, therefore, looks something like " +"this (simplified a bit; see :pep:`302` for the full details)::" +msgstr "因此,Python 新导入逻辑的伪代码如下 (略有简化;详情请参见 :pep:`302`):" + +#: ../../whatsnew/2.3.rst:760 +msgid ":pep:`302` - New Import Hooks" +msgstr ":pep:`302` - 新导入钩" + +#: ../../whatsnew/2.3.rst:761 +msgid "" +"Written by Just van Rossum and Paul Moore. Implemented by Just van Rossum." +msgstr "由 Just van Rossum 和 Paul Moore 撰写 ; 由 Just van Rossum 实现。" + +#: ../../whatsnew/2.3.rst:769 +msgid "PEP 305: Comma-separated Files" +msgstr "PEP 305: 逗号分隔文件" + +#: ../../whatsnew/2.3.rst:771 +msgid "" +"Comma-separated files are a format frequently used for exporting data from " +"databases and spreadsheets. Python 2.3 adds a parser for comma-separated " +"files." +msgstr "以逗号作为分隔符的文件是一种常用于从数据库和电子表格导出数据的格式。 Python 2.3 增加了一个针对逗号分隔文件的解析器。" + +#: ../../whatsnew/2.3.rst:774 +msgid "Comma-separated format is deceptively simple at first glance::" +msgstr "逗号分隔文件乍一看非常简单::" + +#: ../../whatsnew/2.3.rst:778 +msgid "" +"Read a line and call ``line.split(',')``: what could be simpler? But toss in" +" string data that can contain commas, and things get more complicated::" +msgstr "读取一行并调用 ``line.split(',')``: 再简单不过了吧? 但是考虑到可能包含逗号的字符串数据,事件就变得复杂起来::" + +#: ../../whatsnew/2.3.rst:783 +msgid "" +"A big ugly regular expression can parse this, but using the new :mod:`csv` " +"package is much simpler::" +msgstr "一个大的丑陋的正则表达式可以解析这些内容,但使用新的 :mod:`csv` 软件包要简单得多:" + +#: ../../whatsnew/2.3.rst:793 +msgid "" +"The :func:`reader` function takes a number of different options. The field " +"separator isn't limited to the comma and can be changed to any character, " +"and so can the quoting and line-ending characters." +msgstr "" + +#: ../../whatsnew/2.3.rst:797 +msgid "" +"Different dialects of comma-separated files can be defined and registered; " +"currently there are two dialects, both used by Microsoft Excel. A separate " +":class:`csv.writer` class will generate comma-separated files from a " +"succession of tuples or lists, quoting strings that contain the delimiter." +msgstr "" + +#: ../../whatsnew/2.3.rst:806 +msgid ":pep:`305` - CSV File API" +msgstr "该实现在“Python 增强提议” - PEP `305` (CSV 文件 API) 中被提出" + +#: ../../whatsnew/2.3.rst:806 +msgid "" +"Written and implemented by Kevin Altis, Dave Cole, Andrew McNamara, Skip " +"Montanaro, Cliff Wells." +msgstr "" +"由 Kevin Altis, Dave Cole, Andrew McNamara, Skip Montanaro, Cliff Wells " +"撰写并实现。" + +#: ../../whatsnew/2.3.rst:815 +msgid "PEP 307: Pickle Enhancements" +msgstr "PEP 307:对 pickle 的改进" + +#: ../../whatsnew/2.3.rst:817 +msgid "" +"The :mod:`pickle` and :mod:`cPickle` modules received some attention during " +"the 2.3 development cycle. In 2.2, new-style classes could be pickled " +"without difficulty, but they weren't pickled very compactly; :pep:`307` " +"quotes a trivial example where a new-style class results in a pickled string" +" three times longer than that for a classic class." +msgstr "" + +#: ../../whatsnew/2.3.rst:823 +msgid "" +"The solution was to invent a new pickle protocol. The :func:`pickle.dumps` " +"function has supported a text-or-binary flag for a long time. In 2.3, this" +" flag is redefined from a Boolean to an integer: 0 is the old text-mode " +"pickle format, 1 is the old binary format, and now 2 is a new 2.3-specific " +"format. A new constant, :const:`pickle.HIGHEST_PROTOCOL`, can be used to " +"select the fanciest protocol available." +msgstr "" +"解决办法就是发明一种新的 pickle 协议。 :func:`pickle.dumps` 函数很早就支持文本或二进制标志。 在 2.3 " +"中,该标志从布尔值重新定义为整数:0 表示旧的文本模式 pickle 格式,1 表示旧的二进制格式,现在 2 表示新的 2.3 专用格式。 一个新常量 " +":const:`pickle.HIGHEST_PROTOCOL` 可用来选择最先进的协议。" + +#: ../../whatsnew/2.3.rst:830 +msgid "" +"Unpickling is no longer considered a safe operation. 2.2's :mod:`pickle` " +"provided hooks for trying to prevent unsafe classes from being unpickled " +"(specifically, a :attr:`__safe_for_unpickling__` attribute), but none of " +"this code was ever audited and therefore it's all been ripped out in 2.3. " +"You should not unpickle untrusted data in any version of Python." +msgstr "" + +#: ../../whatsnew/2.3.rst:836 +msgid "" +"To reduce the pickling overhead for new-style classes, a new interface for " +"customizing pickling was added using three special methods: " +":meth:`__getstate__`, :meth:`__setstate__`, and :meth:`__getnewargs__`. " +"Consult :pep:`307` for the full semantics of these methods." +msgstr "" + +#: ../../whatsnew/2.3.rst:841 +msgid "" +"As a way to compress pickles yet further, it's now possible to use integer " +"codes instead of long strings to identify pickled classes. The Python " +"Software Foundation will maintain a list of standardized codes; there's also" +" a range of codes for private use. Currently no codes have been specified." +msgstr "" +"为了进一步压缩 pickle 类,现在可以使用整数代码而不是长字符串来标识 pickle 类。 Python " +"软件基金会将维护一个标准化代码列表;还有一系列供私人使用的代码。 目前还没有指定任何代码。" + +#: ../../whatsnew/2.3.rst:849 +msgid ":pep:`307` - Extensions to the pickle protocol" +msgstr ":pep:`307` - pickle 协议的扩展" + +#: ../../whatsnew/2.3.rst:850 +msgid "Written and implemented by Guido van Rossum and Tim Peters." +msgstr "PEP 由 Guido van Rossum 和 Tim Peters 撰写和实现。" + +#: ../../whatsnew/2.3.rst:858 +msgid "Extended Slices" +msgstr "扩展切片" + +#: ../../whatsnew/2.3.rst:860 +msgid "" +"Ever since Python 1.4, the slicing syntax has supported an optional third " +"\"step\" or \"stride\" argument. For example, these are all legal Python " +"syntax: ``L[1:10:2]``, ``L[:-1:1]``, ``L[::-1]``. This was added to Python " +"at the request of the developers of Numerical Python, which uses the third " +"argument extensively. However, Python's built-in list, tuple, and string " +"sequence types have never supported this feature, raising a :exc:`TypeError`" +" if you tried it. Michael Hudson contributed a patch to fix this " +"shortcoming." +msgstr "" +"从 Python 1.4 开始,切片语法支持可选的第三个“step”或“stride”参数。例如,这些都是合法的 Python 语法: " +"``L[1:10:2]``,``L[:-1:1]``,``L[::-1]``。 这是应 Numerical Python 开发者的要求添加到 " +"Python 中的,因为 Numerical Python 广泛使用第三个参数。 然而,Python 内置的 list、tuple " +"和字符串序列类型从未支持过这一特性,如果您尝试使用,会引发 :exc:`TypeError`。 Michael Hudson " +"提供了一个补丁来修复这一缺陷。" + +#: ../../whatsnew/2.3.rst:868 +msgid "" +"For example, you can now easily extract the elements of a list that have " +"even indexes::" +msgstr "例如,您现在可以轻松地提取出具有偶数索引的列表元素:" + +#: ../../whatsnew/2.3.rst:875 +msgid "" +"Negative values also work to make a copy of the same list in reverse order::" +msgstr "也可以用负值以按相反顺序复制相同的列表:" + +#: ../../whatsnew/2.3.rst:880 +msgid "This also works for tuples, arrays, and strings::" +msgstr "这也适用于元组、数组和字符串:" + +#: ../../whatsnew/2.3.rst:888 +msgid "" +"If you have a mutable sequence such as a list or an array you can assign to " +"or delete an extended slice, but there are some differences between " +"assignment to extended and regular slices. Assignment to a regular slice " +"can be used to change the length of the sequence::" +msgstr "" +"如果你有一个可变序列如列表或数组,你可以对扩展切片进行赋值或删除,但对扩展切片的赋值与对常规切片的赋值有一些区别。对常规片段的赋值可以用来改变序列的长度:" + +#: ../../whatsnew/2.3.rst:900 +msgid "" +"Extended slices aren't this flexible. When assigning to an extended slice, " +"the list on the right hand side of the statement must contain the same " +"number of items as the slice it is replacing::" +msgstr "扩展分片则没有这种灵活性。 在为扩展分片赋值时,语句右侧的列表必须包含与要替换的分片相同数量的项目:" + +#: ../../whatsnew/2.3.rst:917 +msgid "Deletion is more straightforward::" +msgstr "删除操作更为直观:" + +#: ../../whatsnew/2.3.rst:928 +msgid "" +"One can also now pass slice objects to the :meth:`__getitem__` methods of " +"the built-in sequences::" +msgstr "" + +#: ../../whatsnew/2.3.rst:934 +msgid "Or use slice objects directly in subscripts::" +msgstr "或者直接在下标中使用切片对象:" + +#: ../../whatsnew/2.3.rst:939 +msgid "" +"To simplify implementing sequences that support extended slicing, slice " +"objects now have a method ``indices(length)`` which, given the length of a " +"sequence, returns a ``(start, stop, step)`` tuple that can be passed " +"directly to :func:`range`. :meth:`indices` handles omitted and out-of-bounds" +" indices in a manner consistent with regular slices (and this innocuous " +"phrase hides a welter of confusing details!). The method is intended to be " +"used like this::" +msgstr "" + +#: ../../whatsnew/2.3.rst:957 +msgid "" +"From this example you can also see that the built-in :class:`slice` object " +"is now the type object for the slice type, and is no longer a function. " +"This is consistent with Python 2.2, where :class:`int`, :class:`str`, etc., " +"underwent the same change." +msgstr "" +"从这个例子中还可以看到,内置的 :class:`slice` 对象现在是 slice 类型的类型对象,而不再是函数。 这与 Python 2.2 " +"是一致的,在 Python 2.2 中,:class:`int`,:class:`str` 等也经历了同样的变化。" + +#: ../../whatsnew/2.3.rst:966 +msgid "Other Language Changes" +msgstr "其他语言特性修改" + +#: ../../whatsnew/2.3.rst:968 +msgid "" +"Here are all of the changes that Python 2.3 makes to the core Python " +"language." +msgstr "以下是 Python 2.3 针对核心 Python 语言的所有改变。" + +#: ../../whatsnew/2.3.rst:970 +msgid "" +"The :keyword:`yield` statement is now always a keyword, as described in " +"section :ref:`section-generators` of this document." +msgstr ":keyword:`yield` 语句现在将始终是关键字,如本文档的 :ref:`section-generators` 一节所描述的。" + +#: ../../whatsnew/2.3.rst:973 +msgid "" +"A new built-in function :func:`enumerate` was added, as described in section" +" :ref:`section-enumerate` of this document." +msgstr "新增内置函数 :func:`enumerate`,如本文档的 :ref:`section-enumerate` 一节所描述的。" + +#: ../../whatsnew/2.3.rst:976 +msgid "" +"Two new constants, :const:`True` and :const:`False` were added along with " +"the built-in :class:`bool` type, as described in section :ref:`section-bool`" +" of this document." +msgstr "" +"新增两个常量 :const:`True` 和 :const:`False` 以及内置的 :class:`bool` 类型,如本文档的 " +":ref:`section-bool` 一节所描述的。" + +#: ../../whatsnew/2.3.rst:980 +msgid "" +"The :func:`int` type constructor will now return a long integer instead of " +"raising an :exc:`OverflowError` when a string or floating-point number is " +"too large to fit into an integer. This can lead to the paradoxical result " +"that ``isinstance(int(expression), int)`` is false, but that seems unlikely " +"to cause problems in practice." +msgstr "" +":func:`int` 类型构造函数现在会返回一个长整数,而不会在字符串或浮点数太大而无法放入整数时引发 :exc:`OverflowError`。 " +"这可能会导致 ``isinstance(int(expression), int)`` 为假的矛盾结果,但在实践中似乎不太可能造成问题。" + +#: ../../whatsnew/2.3.rst:986 +msgid "" +"Built-in types now support the extended slicing syntax, as described in " +"section :ref:`section-slices` of this document." +msgstr "内置类型现在支持扩展的切分语法,详见本文档 :ref:`section-slices` 一节。" + +#: ../../whatsnew/2.3.rst:989 +msgid "" +"A new built-in function, ``sum(iterable, start=0)``, adds up the numeric " +"items in the iterable object and returns their sum. :func:`sum` only " +"accepts numbers, meaning that you can't use it to concatenate a bunch of " +"strings. (Contributed by Alex Martelli.)" +msgstr "" + +#: ../../whatsnew/2.3.rst:994 +msgid "" +"``list.insert(pos, value)`` used to insert *value* at the front of the list" +" when *pos* was negative. The behaviour has now been changed to be " +"consistent with slice indexing, so when *pos* is -1 the value will be " +"inserted before the last element, and so forth." +msgstr "" +"以前 ``list.insert(pos, value)`` 在 *pos* 为负值时会将 *value* 插入到列表的前面。 " +"现在,该行为已被修改为与切片索引一致,因此当 *pos* 为 -1 时,值将被插入最后一个元素之前,以此类推。" + +#: ../../whatsnew/2.3.rst:999 +msgid "" +"``list.index(value)``, which searches for *value* within the list and " +"returns its index, now takes optional *start* and *stop* arguments to limit" +" the search to only part of the list." +msgstr "" +"``list.index(value)`` 会在列表中搜索 *value*,并返回其索引,现在可以使用可选的 *start* 和 *stop* " +"参数,将搜索范围限制在列表的一部分。" + +#: ../../whatsnew/2.3.rst:1003 +msgid "" +"Dictionaries have a new method, ``pop(key[, *default*])``, that returns the " +"value corresponding to *key* and removes that key/value pair from the " +"dictionary. If the requested key isn't present in the dictionary, *default*" +" is returned if it's specified and :exc:`KeyError` raised if it isn't. ::" +msgstr "" +"字典有一个新方法 ``pop(key[, *default*])``,可返回 *key* " +"对应的值,并从字典中删除该键/值对。如果请求的键不在字典中,如果指定了 *default*,则返回 *default*,如果没有指定则会引发 " +":exc:`KeyError`。 ::" + +#: ../../whatsnew/2.3.rst:1025 +msgid "" +"There's also a new class method, ``dict.fromkeys(iterable, value)``, that " +"creates a dictionary with keys taken from the supplied iterator *iterable* " +"and all values set to *value*, defaulting to ``None``." +msgstr "" +"还有一个新的类方法 ``dict.fromkeys(iterable, value)``,用于创建一个字典,其键取自所提供的迭代器 " +"*iterable*,所有值设置为 *value*,默认为 ``None``。" + +#: ../../whatsnew/2.3.rst:1029 +msgid "(Patches contributed by Raymond Hettinger.)" +msgstr "(由 Raymond Hettinger 贡献补丁。)" + +#: ../../whatsnew/2.3.rst:1031 +msgid "" +"Also, the :func:`dict` constructor now accepts keyword arguments to simplify" +" creating small dictionaries::" +msgstr "此外,现在 :func:`dict` 构建器可接受关键字参数以简化小型字典的创建::" + +#: ../../whatsnew/2.3.rst:1037 +msgid "(Contributed by Just van Rossum.)" +msgstr "(由 Just van Rossum 贡献。)" + +#: ../../whatsnew/2.3.rst:1039 +msgid "" +"The :keyword:`assert` statement no longer checks the ``__debug__`` flag, so " +"you can no longer disable assertions by assigning to ``__debug__``. Running " +"Python with the :option:`-O` switch will still generate code that doesn't " +"execute any assertions." +msgstr "" +":keyword:`assert` 语句将不再检查 ``__debug__`` 旗标,因此你无法再通过为 ``__debug__`` 赋值来禁用断言。 " +"使用 :option:`-O` 开关运行 Python 仍会生成不执行任何断言的代码。" + +#: ../../whatsnew/2.3.rst:1044 +msgid "" +"Most type objects are now callable, so you can use them to create new " +"objects such as functions, classes, and modules. (This means that the " +":mod:`new` module can be deprecated in a future Python version, because you " +"can now use the type objects available in the :mod:`types` module.) For " +"example, you can create a new module object with the following code:" +msgstr "" + +#: ../../whatsnew/2.3.rst:1059 +msgid "" +"A new warning, :exc:`PendingDeprecationWarning` was added to indicate " +"features which are in the process of being deprecated. The warning will " +"*not* be printed by default. To check for use of features that will be " +"deprecated in the future, supply " +":option:`-Walways::PendingDeprecationWarning:: <-W>` on the command line or " +"use :func:`warnings.filterwarnings`." +msgstr "" +"添加了一个新的警告 :exc:`PendingDeprecationWarning`,用于指示正在被废弃的功能。 默认情况下 *不会* 打印该警告。 " +"要检查是否使用了将来会被废弃的功能,可在命令行中提供 :option:`-Walways::PendingDeprecationWarning:: " +"<-W>` 或使用 :func:`warnings.filterwarnings`。" + +#: ../../whatsnew/2.3.rst:1065 +msgid "" +"The process of deprecating string-based exceptions, as in ``raise \"Error " +"occurred\"``, has begun. Raising a string will now trigger " +":exc:`PendingDeprecationWarning`." +msgstr "" +"与 ``raise \"Error occurred\"`` 一样,基于字符串的异常的废弃过程已经开始。 现在,引发字符串异常将触发 " +":exc:`PendingDeprecationWarning`。" + +#: ../../whatsnew/2.3.rst:1069 +msgid "" +"Using ``None`` as a variable name will now result in a :exc:`SyntaxWarning` " +"warning. In a future version of Python, ``None`` may finally become a " +"keyword." +msgstr "" +"现在使用 ``None`` 作为变量名将导致 :exc:`SyntaxWarning` 警告。 在未来的 Python 版本中,``None`` " +"将最终成为一个保留关键字。" + +#: ../../whatsnew/2.3.rst:1072 +msgid "" +"The :meth:`xreadlines` method of file objects, introduced in Python 2.1, is " +"no longer necessary because files now behave as their own iterator. " +":meth:`xreadlines` was originally introduced as a faster way to loop over " +"all the lines in a file, but now you can simply write ``for line in " +"file_obj``. File objects also have a new read-only :attr:`encoding` " +"attribute that gives the encoding used by the file; Unicode strings written " +"to the file will be automatically converted to bytes using the given " +"encoding." +msgstr "" + +#: ../../whatsnew/2.3.rst:1080 +msgid "" +"The method resolution order used by new-style classes has changed, though " +"you'll only notice the difference if you have a really complicated " +"inheritance hierarchy. Classic classes are unaffected by this change. " +"Python 2.2 originally used a topological sort of a class's ancestors, but " +"2.3 now uses the C3 algorithm as described in the paper `\"A Monotonic " +"Superclass Linearization for Dylan\" " +"`_. To " +"understand the motivation for this change, read Michele Simionato's article" +" `\"Python 2.3 Method Resolution Order\" " +"`_, or read the thread on " +"python-dev starting with the message at " +"https://mail.python.org/pipermail/python-dev/2002-October/029035.html. " +"Samuele Pedroni first pointed out the problem and also implemented the fix " +"by coding the C3 algorithm." +msgstr "" + +#: ../../whatsnew/2.3.rst:1093 +msgid "" +"Python runs multithreaded programs by switching between threads after " +"executing N bytecodes. The default value for N has been increased from 10 " +"to 100 bytecodes, speeding up single-threaded applications by reducing the " +"switching overhead. Some multithreaded applications may suffer slower " +"response time, but that's easily fixed by setting the limit back to a lower " +"number using ``sys.setcheckinterval(N)``. The limit can be retrieved with " +"the new :func:`sys.getcheckinterval` function." +msgstr "" + +#: ../../whatsnew/2.3.rst:1101 +msgid "" +"One minor but far-reaching change is that the names of extension types " +"defined by the modules included with Python now contain the module and a " +"``'.'`` in front of the type name. For example, in Python 2.2, if you " +"created a socket and printed its :attr:`__class__`, you'd get this output::" +msgstr "" + +#: ../../whatsnew/2.3.rst:1110 +msgid "In 2.3, you get this::" +msgstr "在 2.3 中,您会得到以下信息:" + +#: ../../whatsnew/2.3.rst:1115 +msgid "" +"One of the noted incompatibilities between old- and new-style classes has " +"been removed: you can now assign to the :attr:`~definition.__name__` and " +":attr:`~class.__bases__` attributes of new-style classes. There are some " +"restrictions on what can be assigned to :attr:`~class.__bases__` along the " +"lines of those relating to assigning to an instance's " +":attr:`~instance.__class__` attribute." +msgstr "" +"旧式和新式类之间的不兼容问题之一已被消除:您现在可以为新式类的 :attr:`~definition.__name__` 和 " +":attr:`~class.__bases__` 属性赋值。 对 :attr:`~class.__bases__` 的赋值有一些限制,与对实例的 " +":attr:`~instance.__class__` 属性的赋值类似。" + +#: ../../whatsnew/2.3.rst:1125 +msgid "String Changes" +msgstr "字符串的改变" + +#: ../../whatsnew/2.3.rst:1127 +msgid "" +"The :keyword:`in` operator now works differently for strings. Previously, " +"when evaluating ``X in Y`` where *X* and *Y* are strings, *X* could only be " +"a single character. That's now changed; *X* can be a string of any length, " +"and ``X in Y`` will return :const:`True` if *X* is a substring of *Y*. If " +"*X* is the empty string, the result is always :const:`True`. ::" +msgstr "" +":keyword:`in` 运算符现在对字符串的作用不同了。 以前,当计算 ``X in Y`` 时,*X* 和 *Y* 都是字符串,*X* " +"只能是单字符。 现在情况有所改变;*X* 可以是任意长度的字符串,如果 *X* 是 *Y* 的子串,``X in Y`` 将返回 " +":const:`True`。 如果 *X* 是空字符串,结果总是 :const:`True`。 ::" + +#: ../../whatsnew/2.3.rst:1140 +msgid "" +"Note that this doesn't tell you where the substring starts; if you need that" +" information, use the :meth:`find` string method." +msgstr "" + +#: ../../whatsnew/2.3.rst:1143 +msgid "" +"The :meth:`strip`, :meth:`lstrip`, and :meth:`rstrip` string methods now " +"have an optional argument for specifying the characters to strip. The " +"default is still to remove all whitespace characters::" +msgstr "" + +#: ../../whatsnew/2.3.rst:1157 +msgid "(Suggested by Simon Brunning and implemented by Walter Dörwald.)" +msgstr "(由 Simon Brunning 提议并由 Walter Dörwald 实现。)" + +#: ../../whatsnew/2.3.rst:1159 +msgid "" +"The :meth:`startswith` and :meth:`endswith` string methods now accept " +"negative numbers for the *start* and *end* parameters." +msgstr "" + +#: ../../whatsnew/2.3.rst:1162 +msgid "" +"Another new string method is :meth:`zfill`, originally a function in the " +":mod:`string` module. :meth:`zfill` pads a numeric string with zeros on the" +" left until it's the specified width. Note that the ``%`` operator is still " +"more flexible and powerful than :meth:`zfill`. ::" +msgstr "" + +#: ../../whatsnew/2.3.rst:1174 +msgid "(Contributed by Walter Dörwald.)" +msgstr "(由 Walter Dörwald 贡献。)" + +#: ../../whatsnew/2.3.rst:1176 +msgid "" +"A new type object, :class:`basestring`, has been added. Both 8-bit strings " +"and Unicode strings inherit from this type, so ``isinstance(obj, " +"basestring)`` will return :const:`True` for either kind of string. It's a " +"completely abstract type, so you can't create :class:`basestring` instances." +msgstr "" + +#: ../../whatsnew/2.3.rst:1181 +msgid "" +"Interned strings are no longer immortal and will now be garbage-collected in" +" the usual way when the only reference to them is from the internal " +"dictionary of interned strings. (Implemented by Oren Tirosh.)" +msgstr "" + +#: ../../whatsnew/2.3.rst:1189 +msgid "Optimizations" +msgstr "性能优化" + +#: ../../whatsnew/2.3.rst:1191 +msgid "" +"The creation of new-style class instances has been made much faster; they're" +" now faster than classic classes!" +msgstr "新式类实例的创建速度获得大幅提升;现在已经比经典类更快了!" + +#: ../../whatsnew/2.3.rst:1194 +msgid "" +"The :meth:`sort` method of list objects has been extensively rewritten by " +"Tim Peters, and the implementation is significantly faster." +msgstr "" + +#: ../../whatsnew/2.3.rst:1197 +msgid "" +"Multiplication of large long integers is now much faster thanks to an " +"implementation of Karatsuba multiplication, an algorithm that scales better " +"than the O(n\\*n) required for the grade-school multiplication algorithm. " +"(Original patch by Christopher A. Craig, and significantly reworked by Tim " +"Peters.)" +msgstr "" + +#: ../../whatsnew/2.3.rst:1202 +msgid "" +"The ``SET_LINENO`` opcode is now gone. This may provide a small speed " +"increase, depending on your compiler's idiosyncrasies. See section " +":ref:`23section-other` for a longer explanation. (Removed by Michael " +"Hudson.)" +msgstr "" + +#: ../../whatsnew/2.3.rst:1206 +msgid "" +":func:`xrange` objects now have their own iterator, making ``for i in " +"xrange(n)`` slightly faster than ``for i in range(n)``. (Patch by Raymond " +"Hettinger.)" +msgstr "" + +#: ../../whatsnew/2.3.rst:1210 +msgid "" +"A number of small rearrangements have been made in various hotspots to " +"improve performance, such as inlining a function or removing some code. " +"(Implemented mostly by GvR, but lots of people have contributed single " +"changes.)" +msgstr "" + +#: ../../whatsnew/2.3.rst:1214 +msgid "" +"The net result of the 2.3 optimizations is that Python 2.3 runs the pystone" +" benchmark around 25% faster than Python 2.2." +msgstr "2.3 优化的总体结果是 Python 2.3 运行 pystone 基准测试的速度比 Python 2.2 加快了大约 25%。" + +#: ../../whatsnew/2.3.rst:1221 +msgid "New, Improved, and Deprecated Modules" +msgstr "新增,改进和弃用的模块" + +#: ../../whatsnew/2.3.rst:1223 +msgid "" +"As usual, Python's standard library received a number of enhancements and " +"bug fixes. Here's a partial list of the most notable changes, sorted " +"alphabetically by module name. Consult the :file:`Misc/NEWS` file in the " +"source tree for a more complete list of changes, or look through the CVS " +"logs for all the details." +msgstr "" + +#: ../../whatsnew/2.3.rst:1228 +msgid "" +"The :mod:`array` module now supports arrays of Unicode characters using the " +"``'u'`` format character. Arrays also now support using the ``+=`` " +"assignment operator to add another array's contents, and the ``*=`` " +"assignment operator to repeat an array. (Contributed by Jason Orendorff.)" +msgstr "" + +#: ../../whatsnew/2.3.rst:1233 +msgid "" +"The :mod:`bsddb` module has been replaced by version 4.1.6 of the `PyBSDDB " +"`_ package, providing a more complete " +"interface to the transactional features of the BerkeleyDB library." +msgstr "" + +#: ../../whatsnew/2.3.rst:1237 +msgid "" +"The old version of the module has been renamed to :mod:`bsddb185` and is no" +" longer built automatically; you'll have to edit :file:`Modules/Setup` to " +"enable it. Note that the new :mod:`bsddb` package is intended to be " +"compatible with the old module, so be sure to file bugs if you discover any" +" incompatibilities. When upgrading to Python 2.3, if the new interpreter is " +"compiled with a new version of the underlying BerkeleyDB library, you will " +"almost certainly have to convert your database files to the new version. " +"You can do this fairly easily with the new scripts :file:`db2pickle.py` and " +":file:`pickle2db.py` which you will find in the distribution's " +":file:`Tools/scripts` directory. If you've already been using the PyBSDDB " +"package and importing it as :mod:`bsddb3`, you will have to change your " +"``import`` statements to import it as :mod:`bsddb`." +msgstr "" + +#: ../../whatsnew/2.3.rst:1249 +msgid "" +"The new :mod:`bz2` module is an interface to the bz2 data compression " +"library. bz2-compressed data is usually smaller than corresponding " +":mod:`zlib`\\ -compressed data. (Contributed by Gustavo Niemeyer.)" +msgstr "" + +#: ../../whatsnew/2.3.rst:1253 +msgid "" +"A set of standard date/time types has been added in the new :mod:`datetime` " +"module. See the following section for more details." +msgstr "" + +#: ../../whatsnew/2.3.rst:1256 +msgid "" +"The Distutils :class:`Extension` class now supports an extra constructor " +"argument named *depends* for listing additional source files that an " +"extension depends on. This lets Distutils recompile the module if any of " +"the dependency files are modified. For example, if :file:`sampmodule.c` " +"includes the header file :file:`sample.h`, you would create the " +":class:`Extension` object like this::" +msgstr "" + +#: ../../whatsnew/2.3.rst:1267 +msgid "" +"Modifying :file:`sample.h` would then cause the module to be recompiled. " +"(Contributed by Jeremy Hylton.)" +msgstr "修改 :file:`sample.h` 将导致模块被重新编译。 (由 Jeremy Hylton 贡献。)" + +#: ../../whatsnew/2.3.rst:1270 +msgid "" +"Other minor changes to Distutils: it now checks for the :envvar:`CC`, " +":envvar:`CFLAGS`, :envvar:`CPP`, :envvar:`LDFLAGS`, and :envvar:`CPPFLAGS` " +"environment variables, using them to override the settings in Python's " +"configuration (contributed by Robert Weber)." +msgstr "" + +#: ../../whatsnew/2.3.rst:1275 +msgid "" +"Previously the :mod:`doctest` module would only search the docstrings of " +"public methods and functions for test cases, but it now also examines " +"private ones as well. The :func:`DocTestSuite` function creates a " +":class:`unittest.TestSuite` object from a set of :mod:`doctest` tests." +msgstr "" + +#: ../../whatsnew/2.3.rst:1280 +msgid "" +"The new ``gc.get_referents(object)`` function returns a list of all the " +"objects referenced by *object*." +msgstr "新的 ``gc.get_referents(object)`` 函数将返回由 *object* 引用的所有对象组成的列表。" + +#: ../../whatsnew/2.3.rst:1283 +msgid "" +"The :mod:`getopt` module gained a new function, :func:`gnu_getopt`, that " +"supports the same arguments as the existing :func:`getopt` function but uses" +" GNU-style scanning mode. The existing :func:`getopt` stops processing " +"options as soon as a non-option argument is encountered, but in GNU-style " +"mode processing continues, meaning that options and arguments can be mixed." +" For example::" +msgstr "" + +#: ../../whatsnew/2.3.rst:1294 +msgid "(Contributed by Peter Åstrand.)" +msgstr "(由 Peter Åstrand 贡献。)" + +#: ../../whatsnew/2.3.rst:1296 +msgid "" +"The :mod:`grp`, :mod:`pwd`, and :mod:`resource` modules now return enhanced " +"tuples::" +msgstr "现在 :mod:`grp`, :mod:`pwd` 和 :mod:`resource` 模块将返回加强版的元组::" + +#: ../../whatsnew/2.3.rst:1304 +msgid "The :mod:`gzip` module can now handle files exceeding 2 GiB." +msgstr "现在 :mod:`gzip` 模块能够处理超过 2 GiB 的文件。" + +#: ../../whatsnew/2.3.rst:1306 +msgid "" +"The new :mod:`heapq` module contains an implementation of a heap queue " +"algorithm. A heap is an array-like data structure that keeps items in a " +"partially sorted order such that, for every index *k*, ``heap[k] <= " +"heap[2*k+1]`` and ``heap[k] <= heap[2*k+2]``. This makes it quick to remove" +" the smallest item, and inserting a new item while maintaining the heap " +"property is O(lg n). (See " +"https://xlinux.nist.gov/dads//HTML/priorityque.html for more information " +"about the priority queue data structure.)" +msgstr "" + +#: ../../whatsnew/2.3.rst:1314 +msgid "" +"The :mod:`heapq` module provides :func:`heappush` and :func:`heappop` " +"functions for adding and removing items while maintaining the heap property " +"on top of some other mutable Python sequence type. Here's an example that " +"uses a Python list::" +msgstr "" + +#: ../../whatsnew/2.3.rst:1332 +msgid "(Contributed by Kevin O'Connor.)" +msgstr "(由 Kevin O'Connor 贡献。)" + +#: ../../whatsnew/2.3.rst:1334 +msgid "" +"The IDLE integrated development environment has been updated using the code " +"from the IDLEfork project (http://idlefork.sourceforge.net). The most " +"notable feature is that the code being developed is now executed in a " +"subprocess, meaning that there's no longer any need for manual ``reload()`` " +"operations. IDLE's core code has been incorporated into the standard library" +" as the :mod:`idlelib` package." +msgstr "" + +#: ../../whatsnew/2.3.rst:1340 +msgid "" +"The :mod:`imaplib` module now supports IMAP over SSL. (Contributed by Piers " +"Lauder and Tino Lange.)" +msgstr "" + +#: ../../whatsnew/2.3.rst:1343 +msgid "" +"The :mod:`itertools` contains a number of useful functions for use with " +"iterators, inspired by various functions provided by the ML and Haskell " +"languages. For example, ``itertools.ifilter(predicate, iterator)`` returns " +"all elements in the iterator for which the function :func:`predicate` " +"returns :const:`True`, and ``itertools.repeat(obj, N)`` returns ``obj`` *N* " +"times. There are a number of other functions in the module; see the " +"package's reference documentation for details. (Contributed by Raymond " +"Hettinger.)" +msgstr "" + +#: ../../whatsnew/2.3.rst:1352 +msgid "" +"Two new functions in the :mod:`math` module, ``degrees(rads)`` and " +"``radians(degs)``, convert between radians and degrees. Other functions in " +"the :mod:`math` module such as :func:`math.sin` and :func:`math.cos` have " +"always required input values measured in radians. Also, an optional *base* " +"argument was added to :func:`math.log` to make it easier to compute " +"logarithms for bases other than ``e`` and ``10``. (Contributed by Raymond " +"Hettinger.)" +msgstr "" + +#: ../../whatsnew/2.3.rst:1359 +msgid "" +"Several new POSIX functions (:func:`getpgid`, :func:`killpg`, " +":func:`lchown`, :func:`loadavg`, :func:`major`, :func:`makedev`, " +":func:`minor`, and :func:`mknod`) were added to the :mod:`posix` module that" +" underlies the :mod:`os` module. (Contributed by Gustavo Niemeyer, Geert " +"Jansen, and Denis S. Otkidach.)" +msgstr "" + +#: ../../whatsnew/2.3.rst:1365 +msgid "" +"In the :mod:`os` module, the :func:`\\*stat` family of functions can now " +"report fractions of a second in a timestamp. Such time stamps are " +"represented as floats, similar to the value returned by :func:`time.time`." +msgstr "" + +#: ../../whatsnew/2.3.rst:1369 +msgid "" +"During testing, it was found that some applications will break if time " +"stamps are floats. For compatibility, when using the tuple interface of the" +" :class:`stat_result` time stamps will be represented as integers. When " +"using named fields (a feature first introduced in Python 2.2), time stamps " +"are still represented as integers, unless :func:`os.stat_float_times` is " +"invoked to enable float return values::" +msgstr "" + +#: ../../whatsnew/2.3.rst:1382 +msgid "In Python 2.4, the default will change to always returning floats." +msgstr "在 Python 2.4 中,默认将改为总是返回浮点数。" + +#: ../../whatsnew/2.3.rst:1384 +msgid "" +"Application developers should enable this feature only if all their " +"libraries work properly when confronted with floating point time stamps, or " +"if they use the tuple API. If used, the feature should be activated on an " +"application level instead of trying to enable it on a per-use basis." +msgstr "" + +#: ../../whatsnew/2.3.rst:1389 +msgid "" +"The :mod:`optparse` module contains a new parser for command-line arguments " +"that can convert option values to a particular Python type and will " +"automatically generate a usage message. See the following section for more" +" details." +msgstr "" + +#: ../../whatsnew/2.3.rst:1394 +msgid "" +"The old and never-documented :mod:`linuxaudiodev` module has been " +"deprecated, and a new version named :mod:`ossaudiodev` has been added. The " +"module was renamed because the OSS sound drivers can be used on platforms " +"other than Linux, and the interface has also been tidied and brought up to " +"date in various ways. (Contributed by Greg Ward and Nicholas FitzRoy-Dale.)" +msgstr "" + +#: ../../whatsnew/2.3.rst:1400 +msgid "" +"The new :mod:`platform` module contains a number of functions that try to " +"determine various properties of the platform you're running on. There are " +"functions for getting the architecture, CPU type, the Windows OS version, " +"and even the Linux distribution version. (Contributed by Marc-André " +"Lemburg.)" +msgstr "" + +#: ../../whatsnew/2.3.rst:1405 +msgid "" +"The parser objects provided by the :mod:`pyexpat` module can now optionally " +"buffer character data, resulting in fewer calls to your character data " +"handler and therefore faster performance. Setting the parser object's " +":attr:`buffer_text` attribute to :const:`True` will enable buffering." +msgstr "" + +#: ../../whatsnew/2.3.rst:1410 +msgid "" +"The ``sample(population, k)`` function was added to the :mod:`random` " +"module. *population* is a sequence or :class:`xrange` object containing the" +" elements of a population, and :func:`sample` chooses *k* elements from the " +"population without replacing chosen elements. *k* can be any value up to " +"``len(population)``. For example::" +msgstr "" + +#: ../../whatsnew/2.3.rst:1432 +msgid "" +"The :mod:`random` module now uses a new algorithm, the Mersenne Twister, " +"implemented in C. It's faster and more extensively studied than the " +"previous algorithm." +msgstr "现在 :mod:`random` 模块使用新的“梅森旋转”算法,并以 C 实现。 它的速度更快并且与之前的算法相比研究更充分。" + +#: ../../whatsnew/2.3.rst:1436 +msgid "(All changes contributed by Raymond Hettinger.)" +msgstr "(所有改变均由 Raymond Hettinger 贡献。)" + +#: ../../whatsnew/2.3.rst:1438 +msgid "" +"The :mod:`readline` module also gained a number of new functions: " +":func:`get_history_item`, :func:`get_current_history_length`, and " +":func:`redisplay`." +msgstr "" + +#: ../../whatsnew/2.3.rst:1442 +msgid "" +"The :mod:`rexec` and :mod:`Bastion` modules have been declared dead, and " +"attempts to import them will fail with a :exc:`RuntimeError`. New-style " +"classes provide new ways to break out of the restricted execution " +"environment provided by :mod:`rexec`, and no one has interest in fixing them" +" or time to do so. If you have applications using :mod:`rexec`, rewrite " +"them to use something else." +msgstr "" + +#: ../../whatsnew/2.3.rst:1448 +msgid "" +"(Sticking with Python 2.2 or 2.1 will not make your applications any safer " +"because there are known bugs in the :mod:`rexec` module in those versions. " +"To repeat: if you're using :mod:`rexec`, stop using it immediately.)" +msgstr "" + +#: ../../whatsnew/2.3.rst:1452 +msgid "" +"The :mod:`rotor` module has been deprecated because the algorithm it uses " +"for encryption is not believed to be secure. If you need encryption, use " +"one of the several AES Python modules that are available separately." +msgstr "" + +#: ../../whatsnew/2.3.rst:1456 +msgid "" +"The :mod:`shutil` module gained a ``move(src, dest)`` function that " +"recursively moves a file or directory to a new location." +msgstr "" + +#: ../../whatsnew/2.3.rst:1459 +msgid "" +"Support for more advanced POSIX signal handling was added to the " +":mod:`signal` but then removed again as it proved impossible to make it work" +" reliably across platforms." +msgstr "" + +#: ../../whatsnew/2.3.rst:1463 +msgid "" +"The :mod:`socket` module now supports timeouts. You can call the " +"``settimeout(t)`` method on a socket object to set a timeout of *t* seconds." +" Subsequent socket operations that take longer than *t* seconds to complete " +"will abort and raise a :exc:`socket.timeout` exception." +msgstr "" + +#: ../../whatsnew/2.3.rst:1468 +msgid "" +"The original timeout implementation was by Tim O'Malley. Michael Gilfix " +"integrated it into the Python :mod:`socket` module and shepherded it through" +" a lengthy review. After the code was checked in, Guido van Rossum rewrote " +"parts of it. (This is a good example of a collaborative development process" +" in action.)" +msgstr "" + +#: ../../whatsnew/2.3.rst:1474 +msgid "" +"On Windows, the :mod:`socket` module now ships with Secure Sockets Layer " +"(SSL) support." +msgstr "在 Windows,:mod:`socket` 模块现在将附带安全套接字层(SSL)支持。" + +#: ../../whatsnew/2.3.rst:1477 +msgid "" +"The value of the C :const:`PYTHON_API_VERSION` macro is now exposed at the " +"Python level as ``sys.api_version``. The current exception can be cleared " +"by calling the new :func:`sys.exc_clear` function." +msgstr "" +"现在 C :const:`PYTHON_API_VERSION` 宏的值将在 Python 层级上暴露为 ``sys.api_version``。 " +"当前的异常可通过调用新的 :func:`sys.exc_clear` 函数来清除。" + +#: ../../whatsnew/2.3.rst:1481 +msgid "" +"The new :mod:`tarfile` module allows reading from and writing to " +":program:`tar`\\ -format archive files. (Contributed by Lars Gustäbel.)" +msgstr "" + +#: ../../whatsnew/2.3.rst:1484 +msgid "" +"The new :mod:`textwrap` module contains functions for wrapping strings " +"containing paragraphs of text. The ``wrap(text, width)`` function takes a " +"string and returns a list containing the text split into lines of no more " +"than the chosen width. The ``fill(text, width)`` function returns a single " +"string, reformatted to fit into lines no longer than the chosen width. (As " +"you can guess, :func:`fill` is built on top of :func:`wrap`. For example::" +msgstr "" + +#: ../../whatsnew/2.3.rst:1506 +msgid "" +"The module also contains a :class:`TextWrapper` class that actually " +"implements the text wrapping strategy. Both the :class:`TextWrapper` class" +" and the :func:`wrap` and :func:`fill` functions support a number of " +"additional keyword arguments for fine-tuning the formatting; consult the " +"module's documentation for details. (Contributed by Greg Ward.)" +msgstr "" + +#: ../../whatsnew/2.3.rst:1512 +msgid "" +"The :mod:`thread` and :mod:`threading` modules now have companion modules, " +":mod:`dummy_thread` and :mod:`dummy_threading`, that provide a do-nothing " +"implementation of the :mod:`thread` module's interface for platforms where " +"threads are not supported. The intention is to simplify thread-aware " +"modules (ones that *don't* rely on threads to run) by putting the following " +"code at the top::" +msgstr "" + +#: ../../whatsnew/2.3.rst:1524 +msgid "" +"In this example, :mod:`_threading` is used as the module name to make it " +"clear that the module being used is not necessarily the actual " +":mod:`threading` module. Code can call functions and use classes in " +":mod:`_threading` whether or not threads are supported, avoiding an " +":keyword:`if` statement and making the code slightly clearer. This module " +"will not magically make multithreaded code run without threads; code that " +"waits for another thread to return or to do something will simply hang " +"forever." +msgstr "" + +#: ../../whatsnew/2.3.rst:1532 +msgid "" +"The :mod:`time` module's :func:`strptime` function has long been an " +"annoyance because it uses the platform C library's :func:`strptime` " +"implementation, and different platforms sometimes have odd bugs. Brett " +"Cannon contributed a portable implementation that's written in pure Python " +"and should behave identically on all platforms." +msgstr "" + +#: ../../whatsnew/2.3.rst:1538 +msgid "" +"The new :mod:`timeit` module helps measure how long snippets of Python code " +"take to execute. The :file:`timeit.py` file can be run directly from the " +"command line, or the module's :class:`Timer` class can be imported and used " +"directly. Here's a short example that figures out whether it's faster to " +"convert an 8-bit string to Unicode by appending an empty Unicode string to " +"it or by using the :func:`unicode` function::" +msgstr "" + +#: ../../whatsnew/2.3.rst:1558 +msgid "" +"The :mod:`Tix` module has received various bug fixes and updates for the " +"current version of the Tix package." +msgstr "" + +#: ../../whatsnew/2.3.rst:1561 +msgid "" +"The :mod:`Tkinter` module now works with a thread-enabled version of Tcl. " +"Tcl's threading model requires that widgets only be accessed from the thread" +" in which they're created; accesses from another thread can cause Tcl to " +"panic. For certain Tcl interfaces, :mod:`Tkinter` will now automatically " +"avoid this when a widget is accessed from a different thread by marshalling" +" a command, passing it to the correct thread, and waiting for the results. " +"Other interfaces can't be handled automatically but :mod:`Tkinter` will now " +"raise an exception on such an access so that you can at least find out about" +" the problem. See https://mail.python.org/pipermail/python-" +"dev/2002-December/031107.html for a more detailed explanation of this " +"change. (Implemented by Martin von Löwis.)" +msgstr "" + +#: ../../whatsnew/2.3.rst:1572 +msgid "" +"Calling Tcl methods through :mod:`_tkinter` no longer returns only strings." +" Instead, if Tcl returns other objects those objects are converted to their " +"Python equivalent, if one exists, or wrapped with a " +":class:`_tkinter.Tcl_Obj` object if no Python equivalent exists. This " +"behavior can be controlled through the :meth:`wantobjects` method of " +":class:`tkapp` objects." +msgstr "" + +#: ../../whatsnew/2.3.rst:1578 +msgid "" +"When using :mod:`_tkinter` through the :mod:`Tkinter` module (as most " +"Tkinter applications will), this feature is always activated. It should not " +"cause compatibility problems, since Tkinter would always convert string " +"results to Python types where possible." +msgstr "" + +#: ../../whatsnew/2.3.rst:1583 +msgid "" +"If any incompatibilities are found, the old behavior can be restored by " +"setting the :attr:`wantobjects` variable in the :mod:`Tkinter` module to " +"false before creating the first :class:`tkapp` object. ::" +msgstr "" + +#: ../../whatsnew/2.3.rst:1590 +msgid "Any breakage caused by this change should be reported as a bug." +msgstr "" + +#: ../../whatsnew/2.3.rst:1592 +msgid "" +"The :mod:`UserDict` module has a new :class:`DictMixin` class which defines " +"all dictionary methods for classes that already have a minimum mapping " +"interface. This greatly simplifies writing classes that need to be " +"substitutable for dictionaries, such as the classes in the :mod:`shelve` " +"module." +msgstr "" + +#: ../../whatsnew/2.3.rst:1598 +msgid "" +"Adding the mix-in as a superclass provides the full dictionary interface " +"whenever the class defines :meth:`__getitem__`, :meth:`__setitem__`, " +":meth:`__delitem__`, and :meth:`keys`. For example::" +msgstr "" + +#: ../../whatsnew/2.3.rst:1639 +msgid "(Contributed by Raymond Hettinger.)" +msgstr "(由 Raymond Hettinger 贡献。)" + +#: ../../whatsnew/2.3.rst:1641 +msgid "" +"The DOM implementation in :mod:`xml.dom.minidom` can now generate XML output" +" in a particular encoding by providing an optional encoding argument to the " +":meth:`toxml` and :meth:`toprettyxml` methods of DOM nodes." +msgstr "" + +#: ../../whatsnew/2.3.rst:1645 +msgid "" +"The :mod:`xmlrpclib` module now supports an XML-RPC extension for handling " +"nil data values such as Python's ``None``. Nil values are always supported " +"on unmarshalling an XML-RPC response. To generate requests containing " +"``None``, you must supply a true value for the *allow_none* parameter when " +"creating a :class:`Marshaller` instance." +msgstr "" + +#: ../../whatsnew/2.3.rst:1651 +msgid "" +"The new :mod:`DocXMLRPCServer` module allows writing self-documenting XML-" +"RPC servers. Run it in demo mode (as a program) to see it in action. " +"Pointing the Web browser to the RPC server produces pydoc-style " +"documentation; pointing xmlrpclib to the server allows invoking the actual " +"methods. (Contributed by Brian Quinlan.)" +msgstr "" + +#: ../../whatsnew/2.3.rst:1657 +msgid "" +"Support for internationalized domain names (RFCs 3454, 3490, 3491, and 3492)" +" has been added. The \"idna\" encoding can be used to convert between a " +"Unicode domain name and the ASCII-compatible encoding (ACE) of that name. ::" +msgstr "" + +#: ../../whatsnew/2.3.rst:1664 +msgid "" +"The :mod:`socket` module has also been extended to transparently convert " +"Unicode hostnames to the ACE version before passing them to the C library. " +"Modules that deal with hostnames such as :mod:`httplib` and :mod:`ftplib`) " +"also support Unicode host names; :mod:`httplib` also sends HTTP ``Host`` " +"headers using the ACE version of the domain name. :mod:`urllib` supports " +"Unicode URLs with non-ASCII host names as long as the ``path`` part of the " +"URL is ASCII only." +msgstr "" + +#: ../../whatsnew/2.3.rst:1672 +msgid "" +"To implement this change, the :mod:`stringprep` module, the " +"``mkstringprep`` tool and the ``punycode`` encoding have been added." +msgstr "" +"为实现此项更改,增加了 :mod:`stringprep` 模块,``mkstringprep`` 工具以及 ``punycode`` 编码格式。" + +#: ../../whatsnew/2.3.rst:1679 +msgid "Date/Time Type" +msgstr "Date/Time 类型" + +#: ../../whatsnew/2.3.rst:1681 +msgid "" +"Date and time types suitable for expressing timestamps were added as the " +":mod:`datetime` module. The types don't support different calendars or many" +" fancy features, and just stick to the basics of representing time." +msgstr "" +"通过 :mod:`datetime` 模块增加了适用于表示时间戳的日期和时间类型。 这些类型并不支持其他的历法或很多丰富的特性,只专注于简单地表示时间。" + +#: ../../whatsnew/2.3.rst:1685 +msgid "" +"The three primary types are: :class:`date`, representing a day, month, and " +"year; :class:`~datetime.time`, consisting of hour, minute, and second; and " +":class:`~datetime.datetime`, which contains all the attributes of both " +":class:`date` and :class:`~datetime.time`. There's also a :class:`timedelta`" +" class representing differences between two points in time, and time zone " +"logic is implemented by classes inheriting from the abstract :class:`tzinfo`" +" class." +msgstr "" + +#: ../../whatsnew/2.3.rst:1692 +msgid "" +"You can create instances of :class:`date` and :class:`~datetime.time` by " +"either supplying keyword arguments to the appropriate constructor, e.g. " +"``datetime.date(year=1972, month=10, day=15)``, or by using one of a number " +"of class methods. For example, the :meth:`date.today` class method returns " +"the current local date." +msgstr "" + +#: ../../whatsnew/2.3.rst:1698 +msgid "" +"Once created, instances of the date/time classes are all immutable. There " +"are a number of methods for producing formatted strings from objects::" +msgstr "" + +#: ../../whatsnew/2.3.rst:1710 +msgid "" +"The :meth:`replace` method allows modifying one or more fields of a " +":class:`date` or :class:`~datetime.datetime` instance, returning a new " +"instance::" +msgstr "" + +#: ../../whatsnew/2.3.rst:1720 +msgid "" +"Instances can be compared, hashed, and converted to strings (the result is " +"the same as that of :meth:`isoformat`). :class:`date` and " +":class:`~datetime.datetime` instances can be subtracted from each other, and" +" added to :class:`timedelta` instances. The largest missing feature is that" +" there's no standard library support for parsing strings and getting back a " +":class:`date` or :class:`~datetime.datetime`." +msgstr "" + +#: ../../whatsnew/2.3.rst:1727 +msgid "" +"For more information, refer to the module's reference documentation. " +"(Contributed by Tim Peters.)" +msgstr "更多相关信息,请参阅模块的参考文档。 (由 Tim Peters 贡献。)" + +#: ../../whatsnew/2.3.rst:1734 +msgid "The optparse Module" +msgstr "optparse 模块" + +#: ../../whatsnew/2.3.rst:1736 +msgid "" +"The :mod:`getopt` module provides simple parsing of command-line arguments." +" The new :mod:`optparse` module (originally named Optik) provides more " +"elaborate command-line parsing that follows the Unix conventions, " +"automatically creates the output for :option:`!--help`, and can perform " +"different actions for different options." +msgstr "" + +#: ../../whatsnew/2.3.rst:1742 +msgid "" +"You start by creating an instance of :class:`OptionParser` and telling it " +"what your program's options are. ::" +msgstr "" + +#: ../../whatsnew/2.3.rst:1756 +msgid "" +"Parsing a command line is then done by calling the :meth:`parse_args` " +"method. ::" +msgstr "" + +#: ../../whatsnew/2.3.rst:1762 +msgid "" +"This returns an object containing all of the option values, and a list of " +"strings containing the remaining arguments." +msgstr "" + +#: ../../whatsnew/2.3.rst:1765 +msgid "" +"Invoking the script with the various arguments now works as you'd expect it " +"to. Note that the length argument is automatically converted to an integer." +msgstr "" + +#: ../../whatsnew/2.3.rst:1778 +msgid "The help message is automatically generated for you:" +msgstr "" + +#: ../../whatsnew/2.3.rst:1793 +msgid "See the module's documentation for more details." +msgstr "有关更多详细信息,请参见模块的文档。" + +#: ../../whatsnew/2.3.rst:1796 +msgid "" +"Optik was written by Greg Ward, with suggestions from the readers of the " +"Getopt SIG." +msgstr "" + +#: ../../whatsnew/2.3.rst:1805 +msgid "Pymalloc: A Specialized Object Allocator" +msgstr "" + +#: ../../whatsnew/2.3.rst:1807 +msgid "" +"Pymalloc, a specialized object allocator written by Vladimir Marangozov, was" +" a feature added to Python 2.1. Pymalloc is intended to be faster than the " +"system :c:func:`malloc` and to have less memory overhead for allocation " +"patterns typical of Python programs. The allocator uses C's :c:func:`malloc`" +" function to get large pools of memory and then fulfills smaller memory " +"requests from these pools." +msgstr "" + +#: ../../whatsnew/2.3.rst:1813 +msgid "" +"In 2.1 and 2.2, pymalloc was an experimental feature and wasn't enabled by " +"default; you had to explicitly enable it when compiling Python by providing " +"the :option:`!--with-pymalloc` option to the :program:`configure` script. " +"In 2.3, pymalloc has had further enhancements and is now enabled by default;" +" you'll have to supply :option:`!--without-pymalloc` to disable it." +msgstr "" + +#: ../../whatsnew/2.3.rst:1819 +msgid "" +"This change is transparent to code written in Python; however, pymalloc may " +"expose bugs in C extensions. Authors of C extension modules should test " +"their code with pymalloc enabled, because some incorrect code may cause core" +" dumps at runtime." +msgstr "" + +#: ../../whatsnew/2.3.rst:1824 +msgid "" +"There's one particularly common error that causes problems. There are a " +"number of memory allocation functions in Python's C API that have previously" +" just been aliases for the C library's :c:func:`malloc` and :c:func:`free`, " +"meaning that if you accidentally called mismatched functions the error " +"wouldn't be noticeable. When the object allocator is enabled, these " +"functions aren't aliases of :c:func:`malloc` and :c:func:`free` any more, " +"and calling the wrong function to free memory may get you a core dump. For " +"example, if memory was allocated using :c:func:`PyObject_Malloc`, it has to " +"be freed using :c:func:`PyObject_Free`, not :c:func:`free`. A few modules " +"included with Python fell afoul of this and had to be fixed; doubtless there" +" are more third-party modules that will have the same problem." +msgstr "" + +#: ../../whatsnew/2.3.rst:1836 +msgid "" +"As part of this change, the confusing multiple interfaces for allocating " +"memory have been consolidated down into two API families. Memory allocated " +"with one family must not be manipulated with functions from the other " +"family. There is one family for allocating chunks of memory and another " +"family of functions specifically for allocating Python objects." +msgstr "" + +#: ../../whatsnew/2.3.rst:1842 +msgid "" +"To allocate and free an undistinguished chunk of memory use the \"raw " +"memory\" family: :c:func:`PyMem_Malloc`, :c:func:`PyMem_Realloc`, and " +":c:func:`PyMem_Free`." +msgstr "" + +#: ../../whatsnew/2.3.rst:1845 +msgid "" +"The \"object memory\" family is the interface to the pymalloc facility " +"described above and is biased towards a large number of \"small\" " +"allocations: :c:func:`PyObject_Malloc`, :c:func:`PyObject_Realloc`, and " +":c:func:`PyObject_Free`." +msgstr "" + +#: ../../whatsnew/2.3.rst:1849 +msgid "" +"To allocate and free Python objects, use the \"object\" family " +":c:func:`PyObject_New`, :c:func:`PyObject_NewVar`, and " +":c:func:`PyObject_Del`." +msgstr "" + +#: ../../whatsnew/2.3.rst:1852 +msgid "" +"Thanks to lots of work by Tim Peters, pymalloc in 2.3 also provides " +"debugging features to catch memory overwrites and doubled frees in both " +"extension modules and in the interpreter itself. To enable this support, " +"compile a debugging version of the Python interpreter by running " +":program:`configure` with :option:`!--with-pydebug`." +msgstr "" + +#: ../../whatsnew/2.3.rst:1858 +msgid "" +"To aid extension writers, a header file :file:`Misc/pymemcompat.h` is " +"distributed with the source to Python 2.3 that allows Python extensions to " +"use the 2.3 interfaces to memory allocation while compiling against any " +"version of Python since 1.5.2. You would copy the file from Python's source" +" distribution and bundle it with the source of your extension." +msgstr "" + +#: ../../whatsnew/2.3.rst:1869 +msgid "https://hg.python.org/cpython/file/default/Objects/obmalloc.c" +msgstr "https://hg.python.org/cpython/file/default/Objects/obmalloc.c" + +#: ../../whatsnew/2.3.rst:1868 +msgid "" +"For the full details of the pymalloc implementation, see the comments at the" +" top of the file :file:`Objects/obmalloc.c` in the Python source code. The " +"above link points to the file within the python.org SVN browser." +msgstr "" + +#: ../../whatsnew/2.3.rst:1876 +msgid "Build and C API Changes" +msgstr "构建和 C API 的改变" + +#: ../../whatsnew/2.3.rst:1878 +msgid "Changes to Python's build process and to the C API include:" +msgstr "针对 Python 构建过程和 C API 的改变包括:" + +#: ../../whatsnew/2.3.rst:1880 +msgid "" +"The cycle detection implementation used by the garbage collection has proven" +" to be stable, so it's now been made mandatory. You can no longer compile " +"Python without it, and the :option:`!--with-cycle-gc` switch to " +":program:`configure` has been removed." +msgstr "" + +#: ../../whatsnew/2.3.rst:1885 +msgid "" +"Python can now optionally be built as a shared library " +"(:file:`libpython2.3.so`) by supplying :option:`!--enable-shared` when " +"running Python's :program:`configure` script. (Contributed by Ondrej " +"Palkovsky.)" +msgstr "" + +#: ../../whatsnew/2.3.rst:1889 +msgid "" +"The :c:macro:`DL_EXPORT` and :c:macro:`DL_IMPORT` macros are now deprecated." +" Initialization functions for Python extension modules should now be " +"declared using the new macro :c:macro:`PyMODINIT_FUNC`, while the Python " +"core will generally use the :c:macro:`PyAPI_FUNC` and :c:macro:`PyAPI_DATA` " +"macros." +msgstr "" + +#: ../../whatsnew/2.3.rst:1894 +msgid "" +"The interpreter can be compiled without any docstrings for the built-in " +"functions and modules by supplying :option:`!--without-doc-strings` to the " +":program:`configure` script. This makes the Python executable about 10% " +"smaller, but will also mean that you can't get help for Python's built-ins." +" (Contributed by Gustavo Niemeyer.)" +msgstr "" + +#: ../../whatsnew/2.3.rst:1900 +msgid "" +"The :c:func:`PyArg_NoArgs` macro is now deprecated, and code that uses it " +"should be changed. For Python 2.2 and later, the method definition table " +"can specify the :const:`METH_NOARGS` flag, signalling that there are no " +"arguments, and the argument checking can then be removed. If compatibility " +"with pre-2.2 versions of Python is important, the code could use " +"``PyArg_ParseTuple(args, \"\")`` instead, but this will be slower than using" +" :const:`METH_NOARGS`." +msgstr "" + +#: ../../whatsnew/2.3.rst:1907 +msgid "" +":c:func:`PyArg_ParseTuple` accepts new format characters for various sizes " +"of unsigned integers: ``B`` for :c:type:`unsigned char`, ``H`` for " +":c:type:`unsigned short int`, ``I`` for :c:type:`unsigned int`, and ``K`` " +"for :c:type:`unsigned long long`." +msgstr "" + +#: ../../whatsnew/2.3.rst:1912 +msgid "" +"A new function, ``PyObject_DelItemString(mapping, char *key)`` was added as " +"shorthand for ``PyObject_DelItem(mapping, PyString_New(key))``." +msgstr "" + +#: ../../whatsnew/2.3.rst:1915 +msgid "" +"File objects now manage their internal string buffer differently, increasing" +" it exponentially when needed. This results in the benchmark tests in " +":file:`Lib/test/test_bufio.py` speeding up considerably (from 57 seconds to " +"1.7 seconds, according to one measurement)." +msgstr "" + +#: ../../whatsnew/2.3.rst:1920 +msgid "" +"It's now possible to define class and static methods for a C extension type " +"by setting either the :const:`METH_CLASS` or :const:`METH_STATIC` flags in a" +" method's :c:type:`PyMethodDef` structure." +msgstr "" + +#: ../../whatsnew/2.3.rst:1924 +msgid "" +"Python now includes a copy of the Expat XML parser's source code, removing " +"any dependence on a system version or local installation of Expat." +msgstr "" + +#: ../../whatsnew/2.3.rst:1927 +msgid "" +"If you dynamically allocate type objects in your extension, you should be " +"aware of a change in the rules relating to the :attr:`__module__` and " +":attr:`~definition.__name__` attributes. In summary, you will want to " +"ensure the type's dictionary contains a ``'__module__'`` key; making the " +"module name the part of the type name leading up to the final period will no" +" longer have the desired effect. For more detail, read the API reference " +"documentation or the source." +msgstr "" + +#: ../../whatsnew/2.3.rst:1938 +msgid "Port-Specific Changes" +msgstr "移植专属的改变" + +#: ../../whatsnew/2.3.rst:1940 +msgid "" +"Support for a port to IBM's OS/2 using the EMX runtime environment was " +"merged into the main Python source tree. EMX is a POSIX emulation layer " +"over the OS/2 system APIs. The Python port for EMX tries to support all the" +" POSIX-like capability exposed by the EMX runtime, and mostly succeeds; " +":func:`fork` and :func:`fcntl` are restricted by the limitations of the " +"underlying emulation layer. The standard OS/2 port, which uses IBM's Visual" +" Age compiler, also gained support for case-sensitive import semantics as " +"part of the integration of the EMX port into CVS. (Contributed by Andrew " +"MacIntyre.)" +msgstr "" + +#: ../../whatsnew/2.3.rst:1949 +msgid "" +"On MacOS, most toolbox modules have been weaklinked to improve backward " +"compatibility. This means that modules will no longer fail to load if a " +"single routine is missing on the current OS version. Instead calling the " +"missing routine will raise an exception. (Contributed by Jack Jansen.)" +msgstr "" + +#: ../../whatsnew/2.3.rst:1954 +msgid "" +"The RPM spec files, found in the :file:`Misc/RPM/` directory in the Python " +"source distribution, were updated for 2.3. (Contributed by Sean " +"Reifschneider.)" +msgstr "" + +#: ../../whatsnew/2.3.rst:1957 +msgid "" +"Other new platforms now supported by Python include AtheOS " +"(http://www.atheos.cx/), GNU/Hurd, and OpenVMS." +msgstr "" + +#: ../../whatsnew/2.3.rst:1966 +msgid "Other Changes and Fixes" +msgstr "其他的改变和修正" + +#: ../../whatsnew/2.3.rst:1968 +msgid "" +"As usual, there were a bunch of other improvements and bugfixes scattered " +"throughout the source tree. A search through the CVS change logs finds " +"there were 523 patches applied and 514 bugs fixed between Python 2.2 and " +"2.3. Both figures are likely to be underestimates." +msgstr "" + +#: ../../whatsnew/2.3.rst:1973 +msgid "Some of the more notable changes are:" +msgstr "一些较为重要的改变:" + +#: ../../whatsnew/2.3.rst:1975 +msgid "" +"If the :envvar:`PYTHONINSPECT` environment variable is set, the Python " +"interpreter will enter the interactive prompt after running a Python " +"program, as if Python had been invoked with the :option:`-i` option. The " +"environment variable can be set before running the Python interpreter, or it" +" can be set by the Python program as part of its execution." +msgstr "" + +#: ../../whatsnew/2.3.rst:1981 +msgid "" +"The :file:`regrtest.py` script now provides a way to allow \"all resources " +"except *foo*.\" A resource name passed to the :option:`!-u` option can now " +"be prefixed with a hyphen (``'-'``) to mean \"remove this resource.\" For " +"example, the option '``-uall,-bsddb``' could be used to enable the use of " +"all resources except ``bsddb``." +msgstr "" + +#: ../../whatsnew/2.3.rst:1987 +msgid "" +"The tools used to build the documentation now work under Cygwin as well as " +"Unix." +msgstr "" + +#: ../../whatsnew/2.3.rst:1990 +msgid "" +"The ``SET_LINENO`` opcode has been removed. Back in the mists of time, this" +" opcode was needed to produce line numbers in tracebacks and support trace " +"functions (for, e.g., :mod:`pdb`). Since Python 1.5, the line numbers in " +"tracebacks have been computed using a different mechanism that works with " +"\"python -O\". For Python 2.3 Michael Hudson implemented a similar scheme " +"to determine when to call the trace function, removing the need for " +"``SET_LINENO`` entirely." +msgstr "" + +#: ../../whatsnew/2.3.rst:1998 +msgid "" +"It would be difficult to detect any resulting difference from Python code, " +"apart from a slight speed up when Python is run without :option:`-O`." +msgstr "" + +#: ../../whatsnew/2.3.rst:2001 +msgid "" +"C extensions that access the :attr:`f_lineno` field of frame objects should " +"instead call ``PyCode_Addr2Line(f->f_code, f->f_lasti)``. This will have the" +" added effect of making the code work as desired under \"python -O\" in " +"earlier versions of Python." +msgstr "" + +#: ../../whatsnew/2.3.rst:2006 +msgid "" +"A nifty new feature is that trace functions can now assign to the " +":attr:`f_lineno` attribute of frame objects, changing the line that will be " +"executed next. A ``jump`` command has been added to the :mod:`pdb` debugger" +" taking advantage of this new feature. (Implemented by Richie Hindle.)" +msgstr "" + +#: ../../whatsnew/2.3.rst:2015 +msgid "Porting to Python 2.3" +msgstr "移植到 Python 2.3" + +#: ../../whatsnew/2.3.rst:2017 +msgid "" +"This section lists previously described changes that may require changes to " +"your code:" +msgstr "本节列出了先前描述的可能需要修改你的代码的改变:" + +#: ../../whatsnew/2.3.rst:2020 +msgid "" +":keyword:`yield` is now always a keyword; if it's used as a variable name in" +" your code, a different name must be chosen." +msgstr "现在 :keyword:`yield` 始终是一个关键字;如果它在你的代码中被用作变量名,则必须选择不同的名称。" + +#: ../../whatsnew/2.3.rst:2023 +msgid "" +"For strings *X* and *Y*, ``X in Y`` now works if *X* is more than one " +"character long." +msgstr "对于字符串 *X* 和 *Y*,``X in Y`` 现在当 *X* 长度超过一个字符时也是有效的。" + +#: ../../whatsnew/2.3.rst:2026 +msgid "" +"The :func:`int` type constructor will now return a long integer instead of " +"raising an :exc:`OverflowError` when a string or floating-point number is " +"too large to fit into an integer." +msgstr "" +"现在 :func:`int` 类型构造器在字符串或浮点数因太大而无法以整数类型来容纳时将返回一个长整数而不是引发 " +":exc:`OverflowError`。" + +#: ../../whatsnew/2.3.rst:2030 +msgid "" +"If you have Unicode strings that contain 8-bit characters, you must declare " +"the file's encoding (UTF-8, Latin-1, or whatever) by adding a comment to the" +" top of the file. See section :ref:`section-encodings` for more " +"information." +msgstr "" + +#: ../../whatsnew/2.3.rst:2034 +msgid "" +"Calling Tcl methods through :mod:`_tkinter` no longer returns only strings." +" Instead, if Tcl returns other objects those objects are converted to their " +"Python equivalent, if one exists, or wrapped with a " +":class:`_tkinter.Tcl_Obj` object if no Python equivalent exists." +msgstr "" + +#: ../../whatsnew/2.3.rst:2039 +msgid "" +"Large octal and hex literals such as ``0xffffffff`` now trigger a " +":exc:`FutureWarning`. Currently they're stored as 32-bit numbers and result " +"in a negative value, but in Python 2.4 they'll become positive long " +"integers." +msgstr "" + +#: ../../whatsnew/2.3.rst:2043 +msgid "" +"There are a few ways to fix this warning. If you really need a positive " +"number, just add an ``L`` to the end of the literal. If you're trying to " +"get a 32-bit integer with low bits set and have previously used an " +"expression such as ``~(1 << 31)``, it's probably clearest to start with all " +"bits set and clear the desired upper bits. For example, to clear just the " +"top bit (bit 31), you could write ``0xffffffffL &~(1L<<31)``." +msgstr "" + +#: ../../whatsnew/2.3.rst:2050 +msgid "You can no longer disable assertions by assigning to ``__debug__``." +msgstr "" + +#: ../../whatsnew/2.3.rst:2052 +msgid "" +"The Distutils :func:`setup` function has gained various new keyword " +"arguments such as *depends*. Old versions of the Distutils will abort if " +"passed unknown keywords. A solution is to check for the presence of the new" +" :func:`get_distutil_options` function in your :file:`setup.py` and only " +"uses the new keywords with a version of the Distutils that supports them::" +msgstr "" + +#: ../../whatsnew/2.3.rst:2065 +msgid "" +"Using ``None`` as a variable name will now result in a :exc:`SyntaxWarning` " +"warning." +msgstr "" + +#: ../../whatsnew/2.3.rst:2068 +msgid "" +"Names of extension types defined by the modules included with Python now " +"contain the module and a ``'.'`` in front of the type name." +msgstr "" + +#: ../../whatsnew/2.3.rst:2077 +msgid "Acknowledgements" +msgstr "致谢" + +#: ../../whatsnew/2.3.rst:2079 +msgid "" +"The author would like to thank the following people for offering " +"suggestions, corrections and assistance with various drafts of this article:" +" Jeff Bauer, Simon Brunning, Brett Cannon, Michael Chermside, Andrew Dalke, " +"Scott David Daniels, Fred L. Drake, Jr., David Fraser, Kelly Gerber, " +"Raymond Hettinger, Michael Hudson, Chris Lambert, Detlef Lannert, Martin von" +" Löwis, Andrew MacIntyre, Lalo Martins, Chad Netzer, Gustavo Niemeyer, Neal " +"Norwitz, Hans Nowak, Chris Reedy, Francesco Ricciardi, Vinay Sajip, Neil " +"Schemenauer, Roman Suzi, Jason Tishler, Just van Rossum." +msgstr "" +"作者感谢以下人员为本文的各种草案提供建议,更正和帮助: Jeff Bauer, Simon Brunning, Brett Cannon, " +"Michael Chermside, Andrew Dalke, Scott David Daniels, Fred L. Drake, Jr., " +"David Fraser, Kelly Gerber, Raymond Hettinger, Michael Hudson, Chris " +"Lambert, Detlef Lannert, Martin von Löwis, Andrew MacIntyre, Lalo Martins, " +"Chad Netzer, Gustavo Niemeyer, Neal Norwitz, Hans Nowak, Chris Reedy, " +"Francesco Ricciardi, Vinay Sajip, Neil Schemenauer, Roman Suzi, Jason " +"Tishler, Just van Rossum." diff --git a/whatsnew/2.4.po b/whatsnew/2.4.po new file mode 100644 index 000000000..8110b075e --- /dev/null +++ b/whatsnew/2.4.po @@ -0,0 +1,1846 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) 2001-2024, Python Software Foundation +# This file is distributed under the same license as the Python package. +# FIRST AUTHOR , YEAR. +# +# Translators: +# Fei Yin , 2018 +# ppcfish , 2019 +# Nyuan Zhang, 2023 +# Freesand Leo , 2024 +# +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: Python 3.9\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2024-08-09 18:56+0000\n" +"PO-Revision-Date: 2017-02-16 23:43+0000\n" +"Last-Translator: Freesand Leo , 2024\n" +"Language-Team: Chinese (China) (https://app.transifex.com/python-doc/teams/5390/zh_CN/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: zh_CN\n" +"Plural-Forms: nplurals=1; plural=0;\n" + +#: ../../whatsnew/2.4.rst:3 +msgid "What's New in Python 2.4" +msgstr "Python 2.4 有什么新变化" + +#: ../../whatsnew/2.4.rst:0 +msgid "Author" +msgstr "作者" + +#: ../../whatsnew/2.4.rst:5 +msgid "A.M. Kuchling" +msgstr "A.M. Kuchling" + +#: ../../whatsnew/2.4.rst:14 +msgid "" +"This article explains the new features in Python 2.4.1, released on March " +"30, 2005." +msgstr "本文介绍了2005年3月30日发布的 Python 2.4.1 的新功能。" + +#: ../../whatsnew/2.4.rst:17 +msgid "" +"Python 2.4 is a medium-sized release. It doesn't introduce as many changes " +"as the radical Python 2.2, but introduces more features than the " +"conservative 2.3 release. The most significant new language features are " +"function decorators and generator expressions; most other changes are to the" +" standard library." +msgstr "" +"Python 2.4 是一个中等规模的发布版。 它引入的变化没有激进的 Python 2.2 那么多,但比保守的 2.3 发布版引入了更多的特性。 " +"最主要的新语言特性是函数装饰器和生成器表达式;其他大部分改动都是针对标准库。" + +#: ../../whatsnew/2.4.rst:22 +msgid "" +"According to the CVS change logs, there were 481 patches applied and 502 " +"bugs fixed between Python 2.3 and 2.4. Both figures are likely to be " +"underestimates." +msgstr "" +"根据 CVS 变更日志,Python 2.3 和 2.4 之间共应用了 481 个补丁并修复了 502 个错误。 这两个数字可能都被低估了。" + +#: ../../whatsnew/2.4.rst:25 +msgid "" +"This article doesn't attempt to provide a complete specification of every " +"single new feature, but instead provides a brief introduction to each " +"feature. For full details, you should refer to the documentation for Python" +" 2.4, such as the Python Library Reference and the Python Reference Manual." +" Often you will be referred to the PEP for a particular new feature for " +"explanations of the implementation and design rationale." +msgstr "" +"本文并不试图提供每一个新特性的完整规范说明,而是对每个特性进行简要的介绍。 要了解完整细节,你应该参考 Python 2.4 的文档,如 Python " +"库参考和 Python 参考手册等。 通常你需要参阅特定新特性的 PEP 以了解有关具体实现和设计原理的说明。" + +#: ../../whatsnew/2.4.rst:36 +msgid "PEP 218: Built-In Set Objects" +msgstr "PEP 218: 内置集合对象" + +#: ../../whatsnew/2.4.rst:38 +msgid "" +"Python 2.3 introduced the :mod:`sets` module. C implementations of set data" +" types have now been added to the Python core as two new built-in types, " +"``set(iterable)`` and ``frozenset(iterable)``. They provide high speed " +"operations for membership testing, for eliminating duplicates from " +"sequences, and for mathematical operations like unions, intersections, " +"differences, and symmetric differences. ::" +msgstr "" +"Python 2.3 引入了 :mod:`sets` 模块。 现在集合数据类型的 C 语言实现作为两个新的内置类型 ``set(iterable)`` " +"和 ``frozenset(iterable)`` 被添加到 Python 内核中。 " +"它们为成员测试、消除序列中的重复数据以及并集、交集、差集和对称差集等数学运算提供了高速操作。 ::" + +#: ../../whatsnew/2.4.rst:71 +msgid "" +"The :func:`frozenset` type is an immutable version of :func:`set`. Since it " +"is immutable and hashable, it may be used as a dictionary key or as a member" +" of another set." +msgstr "" +":func:`frozenset` 类型是 :func:`set` 的不可变版本。 " +"由于它是不可变且不可哈希的对象,因而可被用作字典的键或另一个集合的成员。" + +#: ../../whatsnew/2.4.rst:75 +msgid "" +"The :mod:`sets` module remains in the standard library, and may be useful if" +" you wish to subclass the :class:`Set` or :class:`ImmutableSet` classes. " +"There are currently no plans to deprecate the module." +msgstr "" +":mod:`sets` 模块仍被保留在标准库中,如果你想要子类化 :class:`Set` 或 :class:`ImmutableSet` " +"类时会很有用处。 目前还没有弃用该模块的计划。" + +#: ../../whatsnew/2.4.rst:83 +msgid ":pep:`218` - Adding a Built-In Set Object Type" +msgstr ":pep:`218` - 添加内置Set对象类型" + +#: ../../whatsnew/2.4.rst:83 +msgid "" +"Originally proposed by Greg Wilson and ultimately implemented by Raymond " +"Hettinger." +msgstr "最初由 Greg Wilson 提出,由 Raymond Hettinger 最终实现。" + +#: ../../whatsnew/2.4.rst:90 +msgid "PEP 237: Unifying Long Integers and Integers" +msgstr "PEP 237: 统一长整数和整数" + +#: ../../whatsnew/2.4.rst:92 +msgid "" +"The lengthy transition process for this PEP, begun in Python 2.2, takes " +"another step forward in Python 2.4. In 2.3, certain integer operations that" +" would behave differently after int/long unification triggered " +":exc:`FutureWarning` warnings and returned values limited to 32 or 64 bits " +"(depending on your platform). In 2.4, these expressions no longer produce a" +" warning and instead produce a different result that's usually a long " +"integer." +msgstr "" + +#: ../../whatsnew/2.4.rst:99 +msgid "" +"The problematic expressions are primarily left shifts and lengthy " +"hexadecimal and octal constants. For example, ``2 << 32`` results in a " +"warning in 2.3, evaluating to 0 on 32-bit platforms. In Python 2.4, this " +"expression now returns the correct answer, 8589934592." +msgstr "" + +#: ../../whatsnew/2.4.rst:108 +msgid ":pep:`237` - Unifying Long Integers and Integers" +msgstr ":pep:`237` - 统一长整数和整数" + +#: ../../whatsnew/2.4.rst:108 +msgid "" +"Original PEP written by Moshe Zadka and GvR. The changes for 2.4 were " +"implemented by Kalle Svensson." +msgstr "原始PEP由 Moshe Zadka 和 GvR 撰写,2.4 的变更由 Kalle Svensson 实现。" + +#: ../../whatsnew/2.4.rst:115 +msgid "PEP 289: Generator Expressions" +msgstr "PEP 289: 生成器表达式" + +#: ../../whatsnew/2.4.rst:117 +msgid "" +"The iterator feature introduced in Python 2.2 and the :mod:`itertools` " +"module make it easier to write programs that loop through large data sets " +"without having the entire data set in memory at one time. List " +"comprehensions don't fit into this picture very well because they produce a " +"Python list object containing all of the items. This unavoidably pulls all " +"of the objects into memory, which can be a problem if your data set is very " +"large. When trying to write a functionally-styled program, it would be " +"natural to write something like::" +msgstr "" + +#: ../../whatsnew/2.4.rst:129 +msgid "instead of ::" +msgstr "代替:" + +#: ../../whatsnew/2.4.rst:136 +msgid "" +"The first form is more concise and perhaps more readable, but if you're " +"dealing with a large number of link objects you'd have to write the second " +"form to avoid having all link objects in memory at the same time." +msgstr "" + +#: ../../whatsnew/2.4.rst:140 +msgid "" +"Generator expressions work similarly to list comprehensions but don't " +"materialize the entire list; instead they create a generator that will " +"return elements one by one. The above example could be written as::" +msgstr "" + +#: ../../whatsnew/2.4.rst:148 +msgid "" +"Generator expressions always have to be written inside parentheses, as in " +"the above example. The parentheses signalling a function call also count, " +"so if you want to create an iterator that will be immediately passed to a " +"function you could write::" +msgstr "" + +#: ../../whatsnew/2.4.rst:155 +msgid "" +"Generator expressions differ from list comprehensions in various small ways." +" Most notably, the loop variable (*obj* in the above example) is not " +"accessible outside of the generator expression. List comprehensions leave " +"the variable assigned to its last value; future versions of Python will " +"change this, making list comprehensions match generator expressions in this " +"respect." +msgstr "" + +#: ../../whatsnew/2.4.rst:165 +msgid ":pep:`289` - Generator Expressions" +msgstr ":pep:`289` - 生成器表达式" + +#: ../../whatsnew/2.4.rst:165 +msgid "" +"Proposed by Raymond Hettinger and implemented by Jiwon Seo with early " +"efforts steered by Hye-Shik Chang." +msgstr "" + +#: ../../whatsnew/2.4.rst:172 +msgid "PEP 292: Simpler String Substitutions" +msgstr "PEP 292: 更简单的字符串替换" + +#: ../../whatsnew/2.4.rst:174 +msgid "" +"Some new classes in the standard library provide an alternative mechanism " +"for substituting variables into strings; this style of substitution may be " +"better for applications where untrained users need to edit templates." +msgstr "" + +#: ../../whatsnew/2.4.rst:178 +msgid "" +"The usual way of substituting variables by name is the ``%`` operator::" +msgstr "按名称替换变量的常用方式是 ``%`` 运算符::" + +#: ../../whatsnew/2.4.rst:183 +msgid "" +"When writing the template string, it can be easy to forget the ``i`` or " +"``s`` after the closing parenthesis. This isn't a big problem if the " +"template is in a Python module, because you run the code, get an " +"\"Unsupported format character\" :exc:`ValueError`, and fix the problem. " +"However, consider an application such as Mailman where template strings or " +"translations are being edited by users who aren't aware of the Python " +"language. The format string's syntax is complicated to explain to such " +"users, and if they make a mistake, it's difficult to provide helpful " +"feedback to them." +msgstr "" + +#: ../../whatsnew/2.4.rst:192 +msgid "" +"PEP 292 adds a :class:`Template` class to the :mod:`string` module that uses" +" ``$`` to indicate a substitution::" +msgstr "PEP 292 给 :mod:`string` 模块增加了一个 :class:`Template`,它使用 ``$`` 来表示替换::" + +#: ../../whatsnew/2.4.rst:200 +msgid "" +"If a key is missing from the dictionary, the :meth:`substitute` method will " +"raise a :exc:`KeyError`. There's also a :meth:`safe_substitute` method that" +" ignores missing keys::" +msgstr "" +"如果某个键在字典中找不到,:meth:`substitute` 方法将引发 :exc:`KeyError`。 还有一个 " +":meth:`safe_substitute` 方法则会忽略找不到的键::" + +#: ../../whatsnew/2.4.rst:211 +msgid ":pep:`292` - Simpler String Substitutions" +msgstr ":pep:`292` - 更简单的字符串替换" + +#: ../../whatsnew/2.4.rst:212 +msgid "Written and implemented by Barry Warsaw." +msgstr "由 Barry Warsaw 撰写并实现" + +#: ../../whatsnew/2.4.rst:218 +msgid "PEP 318: Decorators for Functions and Methods" +msgstr "PEP 318: 函数和方法的装饰器" + +#: ../../whatsnew/2.4.rst:220 +msgid "" +"Python 2.2 extended Python's object model by adding static methods and class" +" methods, but it didn't extend Python's syntax to provide any new way of " +"defining static or class methods. Instead, you had to write a " +":keyword:`def` statement in the usual way, and pass the resulting method to " +"a :func:`staticmethod` or :func:`classmethod` function that would wrap up " +"the function as a method of the new type. Your code would look like this::" +msgstr "" + +#: ../../whatsnew/2.4.rst:233 +msgid "" +"If the method was very long, it would be easy to miss or forget the " +":func:`classmethod` invocation after the function body." +msgstr "" + +#: ../../whatsnew/2.4.rst:236 +msgid "" +"The intention was always to add some syntax to make such definitions more " +"readable, but at the time of 2.2's release a good syntax was not obvious. " +"Today a good syntax *still* isn't obvious but users are asking for easier " +"access to the feature; a new syntactic feature has been added to meet this " +"need." +msgstr "" + +#: ../../whatsnew/2.4.rst:241 +msgid "" +"The new feature is called \"function decorators\". The name comes from the " +"idea that :func:`classmethod`, :func:`staticmethod`, and friends are storing" +" additional information on a function object; they're *decorating* functions" +" with more details." +msgstr "" + +#: ../../whatsnew/2.4.rst:246 +msgid "" +"The notation borrows from Java and uses the ``'@'`` character as an " +"indicator. Using the new syntax, the example above would be written::" +msgstr "" + +#: ../../whatsnew/2.4.rst:256 +msgid "" +"The ``@classmethod`` is shorthand for the ``meth=classmethod(meth)`` " +"assignment. More generally, if you have the following::" +msgstr "" + +#: ../../whatsnew/2.4.rst:265 +msgid "It's equivalent to the following pre-decorator code::" +msgstr "它等价于以下无装饰器的代码::" + +#: ../../whatsnew/2.4.rst:270 +msgid "" +"Decorators must come on the line before a function definition, one decorator" +" per line, and can't be on the same line as the def statement, meaning that " +"``@A def f(): ...`` is illegal. You can only decorate function definitions," +" either at the module level or inside a class; you can't decorate class " +"definitions." +msgstr "" + +#: ../../whatsnew/2.4.rst:275 +msgid "" +"A decorator is just a function that takes the function to be decorated as an" +" argument and returns either the same function or some new object. The " +"return value of the decorator need not be callable (though it typically is)," +" unless further decorators will be applied to the result. It's easy to " +"write your own decorators. The following simple example just sets an " +"attribute on the function object::" +msgstr "" + +#: ../../whatsnew/2.4.rst:295 +msgid "" +"As a slightly more realistic example, the following decorator checks that " +"the supplied argument is an integer::" +msgstr "" + +#: ../../whatsnew/2.4.rst:313 +msgid "" +"An example in :pep:`318` contains a fancier version of this idea that lets " +"you both specify the required type and check the returned type." +msgstr "" + +#: ../../whatsnew/2.4.rst:316 +msgid "" +"Decorator functions can take arguments. If arguments are supplied, your " +"decorator function is called with only those arguments and must return a new" +" decorator function; this function must take a single function and return a " +"function, as previously described. In other words, ``@A @B @C(args)`` " +"becomes::" +msgstr "" + +#: ../../whatsnew/2.4.rst:325 +msgid "" +"Getting this right can be slightly brain-bending, but it's not too " +"difficult." +msgstr "" + +#: ../../whatsnew/2.4.rst:327 +msgid "" +"A small related change makes the :attr:`func_name` attribute of functions " +"writable. This attribute is used to display function names in tracebacks, " +"so decorators should change the name of any new function that's constructed " +"and returned." +msgstr "" + +#: ../../whatsnew/2.4.rst:338 +msgid ":pep:`318` - Decorators for Functions, Methods and Classes" +msgstr ":pep:`318` - 函数、方法和类的装饰器" + +#: ../../whatsnew/2.4.rst:336 +msgid "" +"Written by Kevin D. Smith, Jim Jewett, and Skip Montanaro. Several people " +"wrote patches implementing function decorators, but the one that was " +"actually checked in was patch #979728, written by Mark Russell." +msgstr "" + +#: ../../whatsnew/2.4.rst:340 +msgid "https://wiki.python.org/moin/PythonDecoratorLibrary" +msgstr "https://wiki.python.org/moin/PythonDecoratorLibrary" + +#: ../../whatsnew/2.4.rst:341 +msgid "This Wiki page contains several examples of decorators." +msgstr "该Wiki页面包含几个装饰器示例。" + +#: ../../whatsnew/2.4.rst:347 +msgid "PEP 322: Reverse Iteration" +msgstr "PEP 322: 反向迭代" + +#: ../../whatsnew/2.4.rst:349 +msgid "" +"A new built-in function, ``reversed(seq)``, takes a sequence and returns an " +"iterator that loops over the elements of the sequence in reverse order. " +"::" +msgstr "" + +#: ../../whatsnew/2.4.rst:359 +msgid "" +"Compared to extended slicing, such as ``range(1,4)[::-1]``, :func:`reversed`" +" is easier to read, runs faster, and uses substantially less memory." +msgstr "" + +#: ../../whatsnew/2.4.rst:362 +msgid "" +"Note that :func:`reversed` only accepts sequences, not arbitrary iterators." +" If you want to reverse an iterator, first convert it to a list with " +":func:`list`. ::" +msgstr "" + +#: ../../whatsnew/2.4.rst:376 +msgid ":pep:`322` - Reverse Iteration" +msgstr ":pep:`322` - 反向迭代" + +#: ../../whatsnew/2.4.rst:377 +msgid "Written and implemented by Raymond Hettinger." +msgstr "由 Raymond Hettinger 撰写并实现。" + +#: ../../whatsnew/2.4.rst:383 +msgid "PEP 324: New subprocess Module" +msgstr "PEP 324: 新的子进程模块" + +#: ../../whatsnew/2.4.rst:385 +msgid "" +"The standard library provides a number of ways to execute a subprocess, " +"offering different features and different levels of complexity. " +"``os.system(command)`` is easy to use, but slow (it runs a shell process " +"which executes the command) and dangerous (you have to be careful about " +"escaping the shell's metacharacters). The :mod:`popen2` module offers " +"classes that can capture standard output and standard error from the " +"subprocess, but the naming is confusing. The :mod:`subprocess` module " +"cleans this up, providing a unified interface that offers all the features " +"you might need." +msgstr "" + +#: ../../whatsnew/2.4.rst:394 +msgid "" +"Instead of :mod:`popen2`'s collection of classes, :mod:`subprocess` contains" +" a single class called :class:`Popen` whose constructor supports a number " +"of different keyword arguments. ::" +msgstr "" + +#: ../../whatsnew/2.4.rst:404 +msgid "" +"*args* is commonly a sequence of strings that will be the arguments to the " +"program executed as the subprocess. (If the *shell* argument is true, " +"*args* can be a string which will then be passed on to the shell for " +"interpretation, just as :func:`os.system` does.)" +msgstr "" + +#: ../../whatsnew/2.4.rst:409 +msgid "" +"*stdin*, *stdout*, and *stderr* specify what the subprocess's input, output," +" and error streams will be. You can provide a file object or a file " +"descriptor, or you can use the constant ``subprocess.PIPE`` to create a pipe" +" between the subprocess and the parent." +msgstr "" + +#: ../../whatsnew/2.4.rst:417 +msgid "The constructor has a number of handy options:" +msgstr "此构造器有几个方便的选项:" + +#: ../../whatsnew/2.4.rst:419 +msgid "" +"*close_fds* requests that all file descriptors be closed before running the " +"subprocess." +msgstr "*close_fds* 将在运行子进程之前请求关闭所有文件描述符。" + +#: ../../whatsnew/2.4.rst:422 +msgid "" +"*cwd* specifies the working directory in which the subprocess will be " +"executed (defaulting to whatever the parent's working directory is)." +msgstr "*cwd* 指定执行子进程将使用的工作目录(默认为父进程的工作目录)。" + +#: ../../whatsnew/2.4.rst:425 +msgid "*env* is a dictionary specifying environment variables." +msgstr "*env* 是一个指定环境变量的字典。" + +#: ../../whatsnew/2.4.rst:427 +msgid "" +"*preexec_fn* is a function that gets called before the child is started." +msgstr "*preexec_fn* 是将在子进程启动之前被调用的函数。" + +#: ../../whatsnew/2.4.rst:429 +msgid "" +"*universal_newlines* opens the child's input and output using Python's " +":term:`universal newlines` feature." +msgstr "" + +#: ../../whatsnew/2.4.rst:432 +msgid "" +"Once you've created the :class:`Popen` instance, you can call its " +":meth:`wait` method to pause until the subprocess has exited, :meth:`poll` " +"to check if it's exited without pausing, or ``communicate(data)`` to send " +"the string *data* to the subprocess's standard input. " +"``communicate(data)`` then reads any data that the subprocess has sent to " +"its standard output or standard error, returning a tuple ``(stdout_data, " +"stderr_data)``." +msgstr "" + +#: ../../whatsnew/2.4.rst:439 +msgid "" +":func:`call` is a shortcut that passes its arguments along to the " +":class:`Popen` constructor, waits for the command to complete, and returns " +"the status code of the subprocess. It can serve as a safer analog to " +":func:`os.system`::" +msgstr "" + +#: ../../whatsnew/2.4.rst:451 +msgid "" +"The command is invoked without use of the shell. If you really do want to " +"use the shell, you can add ``shell=True`` as a keyword argument and provide " +"a string instead of a sequence::" +msgstr "" + +#: ../../whatsnew/2.4.rst:457 +msgid "" +"The PEP takes various examples of shell and Python code and shows how they'd" +" be translated into Python code that uses :mod:`subprocess`. Reading this " +"section of the PEP is highly recommended." +msgstr "" + +#: ../../whatsnew/2.4.rst:465 +msgid ":pep:`324` - subprocess - New process module" +msgstr ":pep:`324` - 子进程 - 新的进程模块" + +#: ../../whatsnew/2.4.rst:465 +msgid "" +"Written and implemented by Peter Åstrand, with assistance from Fredrik Lundh" +" and others." +msgstr "由 Peter Åstrand 在 Fredrik Lundh 等人的协助下撰写并实现。" + +#: ../../whatsnew/2.4.rst:472 +msgid "PEP 327: Decimal Data Type" +msgstr "PEP 327: 十进制数据类型" + +#: ../../whatsnew/2.4.rst:474 +msgid "" +"Python has always supported floating-point (FP) numbers, based on the " +"underlying C :c:type:`double` type, as a data type. However, while most " +"programming languages provide a floating-point type, many people (even " +"programmers) are unaware that floating-point numbers don't represent certain" +" decimal fractions accurately. The new :class:`Decimal` type can represent " +"these fractions accurately, up to a user-specified precision limit." +msgstr "" + +#: ../../whatsnew/2.4.rst:483 +msgid "Why is Decimal needed?" +msgstr "为什么需要十进制?" + +#: ../../whatsnew/2.4.rst:485 +msgid "" +"The limitations arise from the representation used for floating-point " +"numbers. FP numbers are made up of three components:" +msgstr "" + +#: ../../whatsnew/2.4.rst:488 +msgid "The sign, which is positive or negative." +msgstr "" + +#: ../../whatsnew/2.4.rst:490 +msgid "" +"The mantissa, which is a single-digit binary number followed by a " +"fractional part. For example, ``1.01`` in base-2 notation is ``1 + 0/2 + " +"1/4``, or 1.25 in decimal notation." +msgstr "" + +#: ../../whatsnew/2.4.rst:494 +msgid "" +"The exponent, which tells where the decimal point is located in the number " +"represented." +msgstr "" + +#: ../../whatsnew/2.4.rst:497 +msgid "" +"For example, the number 1.25 has positive sign, a mantissa value of 1.01 (in" +" binary), and an exponent of 0 (the decimal point doesn't need to be " +"shifted). The number 5 has the same sign and mantissa, but the exponent is 2" +" because the mantissa is multiplied by 4 (2 to the power of the exponent 2);" +" 1.25 \\* 4 equals 5." +msgstr "" + +#: ../../whatsnew/2.4.rst:503 +msgid "" +"Modern systems usually provide floating-point support that conforms to a " +"standard called IEEE 754. C's :c:type:`double` type is usually implemented " +"as a 64-bit IEEE 754 number, which uses 52 bits of space for the mantissa. " +"This means that numbers can only be specified to 52 bits of precision. If " +"you're trying to represent numbers whose expansion repeats endlessly, the " +"expansion is cut off after 52 bits. Unfortunately, most software needs to " +"produce output in base 10, and common fractions in base 10 are often " +"repeating decimals in binary. For example, 1.1 decimal is binary " +"``1.0001100110011 ...``; .1 = 1/16 + 1/32 + 1/256 plus an infinite number of" +" additional terms. IEEE 754 has to chop off that infinitely repeated " +"decimal after 52 digits, so the representation is slightly inaccurate." +msgstr "" + +#: ../../whatsnew/2.4.rst:515 +msgid "Sometimes you can see this inaccuracy when the number is printed::" +msgstr "" + +#: ../../whatsnew/2.4.rst:520 +msgid "" +"The inaccuracy isn't always visible when you print the number because the " +"FP-to-decimal-string conversion is provided by the C library, and most C " +"libraries try to produce sensible output. Even if it's not displayed, " +"however, the inaccuracy is still there and subsequent operations can magnify" +" the error." +msgstr "" + +#: ../../whatsnew/2.4.rst:525 +msgid "" +"For many applications this doesn't matter. If I'm plotting points and " +"displaying them on my monitor, the difference between 1.1 and " +"1.1000000000000001 is too small to be visible. Reports often limit output " +"to a certain number of decimal places, and if you round the number to two or" +" three or even eight decimal places, the error is never apparent. However, " +"for applications where it does matter, it's a lot of work to implement your" +" own custom arithmetic routines." +msgstr "" + +#: ../../whatsnew/2.4.rst:533 +msgid "Hence, the :class:`Decimal` type was created." +msgstr "因此,创建了 :class:`Decimal` 类型。" + +#: ../../whatsnew/2.4.rst:537 +msgid "The :class:`Decimal` type" +msgstr ":class:`Decimal` 类型" + +#: ../../whatsnew/2.4.rst:539 +msgid "" +"A new module, :mod:`decimal`, was added to Python's standard library. It " +"contains two classes, :class:`Decimal` and :class:`Context`. " +":class:`Decimal` instances represent numbers, and :class:`Context` instances" +" are used to wrap up various settings such as the precision and default " +"rounding mode." +msgstr "" + +#: ../../whatsnew/2.4.rst:544 +msgid "" +":class:`Decimal` instances are immutable, like regular Python integers and " +"FP numbers; once it's been created, you can't change the value an instance " +"represents. :class:`Decimal` instances can be created from integers or " +"strings::" +msgstr "" + +#: ../../whatsnew/2.4.rst:555 +msgid "" +"You can also provide tuples containing the sign, the mantissa represented " +"as a tuple of decimal digits, and the exponent::" +msgstr "" + +#: ../../whatsnew/2.4.rst:561 +msgid "" +"Cautionary note: the sign bit is a Boolean value, so 0 is positive and 1 is " +"negative." +msgstr "" + +#: ../../whatsnew/2.4.rst:564 +msgid "" +"Converting from floating-point numbers poses a bit of a problem: should the " +"FP number representing 1.1 turn into the decimal number for exactly 1.1, or " +"for 1.1 plus whatever inaccuracies are introduced? The decision was to dodge" +" the issue and leave such a conversion out of the API. Instead, you should " +"convert the floating-point number into a string using the desired precision " +"and pass the string to the :class:`Decimal` constructor::" +msgstr "" + +#: ../../whatsnew/2.4.rst:577 +msgid "" +"Once you have :class:`Decimal` instances, you can perform the usual " +"mathematical operations on them. One limitation: exponentiation requires an" +" integer exponent::" +msgstr "" + +#: ../../whatsnew/2.4.rst:598 +msgid "" +"You can combine :class:`Decimal` instances with integers, but not with " +"floating-point numbers::" +msgstr "" + +#: ../../whatsnew/2.4.rst:609 +msgid "" +":class:`Decimal` numbers can be used with the :mod:`math` and :mod:`cmath` " +"modules, but note that they'll be immediately converted to floating-point " +"numbers before the operation is performed, resulting in a possible loss of " +"precision and accuracy. You'll also get back a regular floating-point " +"number and not a :class:`Decimal`. ::" +msgstr "" + +#: ../../whatsnew/2.4.rst:622 +msgid "" +":class:`Decimal` instances have a :meth:`sqrt` method that returns a " +":class:`Decimal`, but if you need other things such as trigonometric " +"functions you'll have to implement them. ::" +msgstr "" + +#: ../../whatsnew/2.4.rst:631 +msgid "The :class:`Context` type" +msgstr ":class:`Context` 类型" + +#: ../../whatsnew/2.4.rst:633 +msgid "" +"Instances of the :class:`Context` class encapsulate several settings for " +"decimal operations:" +msgstr "" + +#: ../../whatsnew/2.4.rst:636 +msgid ":attr:`prec` is the precision, the number of decimal places." +msgstr "" + +#: ../../whatsnew/2.4.rst:638 +msgid "" +":attr:`rounding` specifies the rounding mode. The :mod:`decimal` module has" +" constants for the various possibilities: :const:`ROUND_DOWN`, " +":const:`ROUND_CEILING`, :const:`ROUND_HALF_EVEN`, and various others." +msgstr "" + +#: ../../whatsnew/2.4.rst:642 +msgid "" +":attr:`traps` is a dictionary specifying what happens on encountering " +"certain error conditions: either an exception is raised or a value is " +"returned. Some examples of error conditions are division by zero, loss of " +"precision, and overflow." +msgstr "" + +#: ../../whatsnew/2.4.rst:647 +msgid "" +"There's a thread-local default context available by calling " +":func:`getcontext`; you can change the properties of this context to alter " +"the default precision, rounding, or trap handling. The following example " +"shows the effect of changing the precision of the default context::" +msgstr "" + +#: ../../whatsnew/2.4.rst:660 +msgid "" +"The default action for error conditions is selectable; the module can either" +" return a special value such as infinity or not-a-number, or exceptions can " +"be raised::" +msgstr "" + +#: ../../whatsnew/2.4.rst:673 +msgid "" +"The :class:`Context` instance also has various methods for formatting " +"numbers such as :meth:`to_eng_string` and :meth:`to_sci_string`." +msgstr "" + +#: ../../whatsnew/2.4.rst:676 +msgid "" +"For more information, see the documentation for the :mod:`decimal` module, " +"which includes a quick-start tutorial and a reference." +msgstr "" + +#: ../../whatsnew/2.4.rst:684 +msgid ":pep:`327` - Decimal Data Type" +msgstr ":pep:`327` - 十进数据类型" + +#: ../../whatsnew/2.4.rst:683 +msgid "" +"Written by Facundo Batista and implemented by Facundo Batista, Eric Price, " +"Raymond Hettinger, Aahz, and Tim Peters." +msgstr "" +"由 Facundo Batista 撰写,由Facundo Batista, Eric Price, Raymond Hettinger, Aahz 和" +" Tim Peters 实现。" + +#: ../../whatsnew/2.4.rst:688 +msgid "http://www.lahey.com/float.htm" +msgstr "http://www.lahey.com/float.htm" + +#: ../../whatsnew/2.4.rst:687 +msgid "" +"The article uses Fortran code to illustrate many of the problems that " +"floating-point inaccuracy can cause." +msgstr "" + +#: ../../whatsnew/2.4.rst:692 +msgid "http://speleotrove.com/decimal/" +msgstr "http://speleotrove.com/decimal/" + +#: ../../whatsnew/2.4.rst:691 +msgid "" +"A description of a decimal-based representation. This representation is " +"being proposed as a standard, and underlies the new Python decimal type. " +"Much of this material was written by Mike Cowlishaw, designer of the Rexx " +"language." +msgstr "" + +#: ../../whatsnew/2.4.rst:699 +msgid "PEP 328: Multi-line Imports" +msgstr "PEP 328: 多行导入" + +#: ../../whatsnew/2.4.rst:701 +msgid "" +"One language change is a small syntactic tweak aimed at making it easier to " +"import many names from a module. In a ``from module import names`` " +"statement, *names* is a sequence of names separated by commas. If the " +"sequence is very long, you can either write multiple imports from the same " +"module, or you can use backslashes to escape the line endings like this::" +msgstr "" + +#: ../../whatsnew/2.4.rst:712 +msgid "" +"The syntactic change in Python 2.4 simply allows putting the names within " +"parentheses. Python ignores newlines within a parenthesized expression, so " +"the backslashes are no longer needed::" +msgstr "" + +#: ../../whatsnew/2.4.rst:721 +msgid "" +"The PEP also proposes that all :keyword:`import` statements be absolute " +"imports, with a leading ``.`` character to indicate a relative import. This" +" part of the PEP was not implemented for Python 2.4, but was completed for " +"Python 2.5." +msgstr "" + +#: ../../whatsnew/2.4.rst:728 +msgid ":pep:`328` - Imports: Multi-Line and Absolute/Relative" +msgstr ":pep:`328` - 导入:多行和绝对/相对导入" + +#: ../../whatsnew/2.4.rst:729 +msgid "Written by Aahz. Multi-line imports were implemented by Dima Dorfman." +msgstr "由 Aahz 撰写,多行导入由 Dima Dorfman 实现。" + +#: ../../whatsnew/2.4.rst:735 +msgid "PEP 331: Locale-Independent Float/String Conversions" +msgstr "" + +#: ../../whatsnew/2.4.rst:737 +msgid "" +"The :mod:`locale` modules lets Python software select various conversions " +"and display conventions that are localized to a particular country or " +"language. However, the module was careful to not change the numeric locale " +"because various functions in Python's implementation required that the " +"numeric locale remain set to the ``'C'`` locale. Often this was because the" +" code was using the C library's :c:func:`atof` function." +msgstr "" + +#: ../../whatsnew/2.4.rst:744 +msgid "" +"Not setting the numeric locale caused trouble for extensions that used " +"third-party C libraries, however, because they wouldn't have the correct " +"locale set. The motivating example was GTK+, whose user interface widgets " +"weren't displaying numbers in the current locale." +msgstr "" + +#: ../../whatsnew/2.4.rst:749 +msgid "" +"The solution described in the PEP is to add three new functions to the " +"Python API that perform ASCII-only conversions, ignoring the locale setting:" +msgstr "" + +#: ../../whatsnew/2.4.rst:752 +msgid "" +"``PyOS_ascii_strtod(str, ptr)`` and ``PyOS_ascii_atof(str, ptr)`` both " +"convert a string to a C :c:type:`double`." +msgstr "" + +#: ../../whatsnew/2.4.rst:755 +msgid "" +"``PyOS_ascii_formatd(buffer, buf_len, format, d)`` converts a " +":c:type:`double` to an ASCII string." +msgstr "" + +#: ../../whatsnew/2.4.rst:758 +msgid "" +"The code for these functions came from the GLib library " +"(https://developer.gnome.org/glib/stable/), whose developers kindly " +"relicensed the relevant functions and donated them to the Python Software " +"Foundation. The :mod:`locale` module can now change the numeric locale, " +"letting extensions such as GTK+ produce the correct results." +msgstr "" + +#: ../../whatsnew/2.4.rst:767 +msgid ":pep:`331` - Locale-Independent Float/String Conversions" +msgstr "" + +#: ../../whatsnew/2.4.rst:768 +msgid "Written by Christian R. Reis, and implemented by Gustavo Carneiro." +msgstr "由Christian R. Reis撰写,由 Gustavo Carneiro 实现。" + +#: ../../whatsnew/2.4.rst:774 +msgid "Other Language Changes" +msgstr "其他语言特性修改" + +#: ../../whatsnew/2.4.rst:776 +msgid "" +"Here are all of the changes that Python 2.4 makes to the core Python " +"language." +msgstr "以下是 Python 2.4 针对核心 Python 语言的所有改变。" + +#: ../../whatsnew/2.4.rst:778 +msgid "Decorators for functions and methods were added (:pep:`318`)." +msgstr "增加了用于函数和方法的装饰器 (:pep:`318`)。" + +#: ../../whatsnew/2.4.rst:780 +msgid "" +"Built-in :func:`set` and :func:`frozenset` types were added (:pep:`218`). " +"Other new built-ins include the ``reversed(seq)`` function (:pep:`322`)." +msgstr "" + +#: ../../whatsnew/2.4.rst:783 +msgid "Generator expressions were added (:pep:`289`)." +msgstr "" + +#: ../../whatsnew/2.4.rst:785 +msgid "" +"Certain numeric expressions no longer return values restricted to 32 or 64 " +"bits (:pep:`237`)." +msgstr "" + +#: ../../whatsnew/2.4.rst:788 +msgid "" +"You can now put parentheses around the list of names in a ``from module " +"import names`` statement (:pep:`328`)." +msgstr "" + +#: ../../whatsnew/2.4.rst:791 +msgid "" +"The :meth:`dict.update` method now accepts the same argument forms as the " +":class:`dict` constructor. This includes any mapping, any iterable of " +"key/value pairs, and keyword arguments. (Contributed by Raymond Hettinger.)" +msgstr "" + +#: ../../whatsnew/2.4.rst:795 +msgid "" +"The string methods :meth:`ljust`, :meth:`rjust`, and :meth:`center` now take" +" an optional argument for specifying a fill character other than a space. " +"(Contributed by Raymond Hettinger.)" +msgstr "" + +#: ../../whatsnew/2.4.rst:799 +msgid "" +"Strings also gained an :meth:`rsplit` method that works like the " +":meth:`split` method but splits from the end of the string. (Contributed " +"by Sean Reifschneider.) ::" +msgstr "" + +#: ../../whatsnew/2.4.rst:808 +msgid "" +"Three keyword parameters, *cmp*, *key*, and *reverse*, were added to the " +":meth:`sort` method of lists. These parameters make some common usages of " +":meth:`sort` simpler. All of these parameters are optional." +msgstr "" + +#: ../../whatsnew/2.4.rst:812 +msgid "" +"For the *cmp* parameter, the value should be a comparison function that " +"takes two parameters and returns -1, 0, or +1 depending on how the " +"parameters compare. This function will then be used to sort the list. " +"Previously this was the only parameter that could be provided to " +":meth:`sort`." +msgstr "" + +#: ../../whatsnew/2.4.rst:817 +msgid "" +"*key* should be a single-parameter function that takes a list element and " +"returns a comparison key for the element. The list is then sorted using the" +" comparison keys. The following example sorts a list case-insensitively::" +msgstr "" + +#: ../../whatsnew/2.4.rst:834 +msgid "" +"The last example, which uses the *cmp* parameter, is the old way to perform " +"a case-insensitive sort. It works but is slower than using a *key* " +"parameter. Using *key* calls :meth:`lower` method once for each element in " +"the list while using *cmp* will call it twice for each comparison, so using " +"*key* saves on invocations of the :meth:`lower` method." +msgstr "" + +#: ../../whatsnew/2.4.rst:840 +msgid "" +"For simple key functions and comparison functions, it is often possible to " +"avoid a :keyword:`lambda` expression by using an unbound method instead. " +"For example, the above case-insensitive sort is best written as::" +msgstr "" + +#: ../../whatsnew/2.4.rst:848 +msgid "" +"Finally, the *reverse* parameter takes a Boolean value. If the value is " +"true, the list will be sorted into reverse order. Instead of ``L.sort(); " +"L.reverse()``, you can now write ``L.sort(reverse=True)``." +msgstr "" + +#: ../../whatsnew/2.4.rst:852 +msgid "" +"The results of sorting are now guaranteed to be stable. This means that two" +" entries with equal keys will be returned in the same order as they were " +"input. For example, you can sort a list of people by name, and then sort the" +" list by age, resulting in a list sorted by age where people with the same " +"age are in name-sorted order." +msgstr "" + +#: ../../whatsnew/2.4.rst:858 +msgid "(All changes to :meth:`sort` contributed by Raymond Hettinger.)" +msgstr "" + +#: ../../whatsnew/2.4.rst:860 +msgid "" +"There is a new built-in function ``sorted(iterable)`` that works like the " +"in-place :meth:`list.sort` method but can be used in expressions. The " +"differences are:" +msgstr "" + +#: ../../whatsnew/2.4.rst:864 +msgid "the input may be any iterable;" +msgstr "输入可以是任意可迭代对象;" + +#: ../../whatsnew/2.4.rst:866 +msgid "a newly formed copy is sorted, leaving the original intact; and" +msgstr "" + +#: ../../whatsnew/2.4.rst:868 +msgid "the expression returns the new sorted copy" +msgstr "" + +#: ../../whatsnew/2.4.rst:891 ../../whatsnew/2.4.rst:919 +#: ../../whatsnew/2.4.rst:1212 +msgid "(Contributed by Raymond Hettinger.)" +msgstr "(由 Raymond Hettinger 贡献。)" + +#: ../../whatsnew/2.4.rst:893 ../../whatsnew/2.4.rst:1519 +msgid "" +"Integer operations will no longer trigger an :exc:`OverflowWarning`. The " +":exc:`OverflowWarning` warning will disappear in Python 2.5." +msgstr "" + +#: ../../whatsnew/2.4.rst:896 +msgid "" +"The interpreter gained a new switch, :option:`-m`, that takes a name, " +"searches for the corresponding module on ``sys.path``, and runs the module " +"as a script. For example, you can now run the Python profiler with ``python" +" -m profile``. (Contributed by Nick Coghlan.)" +msgstr "" + +#: ../../whatsnew/2.4.rst:901 +msgid "" +"The ``eval(expr, globals, locals)`` and ``execfile(filename, globals, " +"locals)`` functions and the ``exec`` statement now accept any mapping type " +"for the *locals* parameter. Previously this had to be a regular Python " +"dictionary. (Contributed by Raymond Hettinger.)" +msgstr "" + +#: ../../whatsnew/2.4.rst:906 +msgid "" +"The :func:`zip` built-in function and :func:`itertools.izip` now return an " +"empty list if called with no arguments. Previously they raised a " +":exc:`TypeError` exception. This makes them more suitable for use with " +"variable length argument lists::" +msgstr "" + +#: ../../whatsnew/2.4.rst:921 +msgid "" +"Encountering a failure while importing a module no longer leaves a " +"partially-initialized module object in ``sys.modules``. The incomplete " +"module object left behind would fool further imports of the same module into" +" succeeding, leading to confusing errors. (Fixed by Tim Peters.)" +msgstr "" + +#: ../../whatsnew/2.4.rst:926 +msgid "" +":const:`None` is now a constant; code that binds a new value to the name " +"``None`` is now a syntax error. (Contributed by Raymond Hettinger.)" +msgstr "" +":const:`None` 现在是一个常量;将一个新值绑定到名称 ``None`` 的代码现在会造成语法错误。 (由 Raymond Hettinger" +" 贡献。)" + +#: ../../whatsnew/2.4.rst:933 +msgid "Optimizations" +msgstr "性能优化" + +#: ../../whatsnew/2.4.rst:935 +msgid "" +"The inner loops for list and tuple slicing were optimized and now run about " +"one-third faster. The inner loops for dictionaries were also optimized, " +"resulting in performance boosts for :meth:`keys`, :meth:`values`, " +":meth:`items`, :meth:`iterkeys`, :meth:`itervalues`, and :meth:`iteritems`. " +"(Contributed by Raymond Hettinger.)" +msgstr "" + +#: ../../whatsnew/2.4.rst:941 +msgid "" +"The machinery for growing and shrinking lists was optimized for speed and " +"for space efficiency. Appending and popping from lists now runs faster due " +"to more efficient code paths and less frequent use of the underlying system " +":c:func:`realloc`. List comprehensions also benefit. :meth:`list.extend` " +"was also optimized and no longer converts its argument into a temporary list" +" before extending the base list. (Contributed by Raymond Hettinger.)" +msgstr "" + +#: ../../whatsnew/2.4.rst:948 +msgid "" +":func:`list`, :func:`tuple`, :func:`map`, :func:`filter`, and :func:`zip` " +"now run several times faster with non-sequence arguments that supply a " +":meth:`__len__` method. (Contributed by Raymond Hettinger.)" +msgstr "" + +#: ../../whatsnew/2.4.rst:952 +msgid "" +"The methods :meth:`list.__getitem__`, :meth:`dict.__getitem__`, and " +":meth:`dict.__contains__` are now implemented as :class:`method_descriptor` " +"objects rather than :class:`wrapper_descriptor` objects. This form of " +"access doubles their performance and makes them more suitable for use as " +"arguments to functionals: ``map(mydict.__getitem__, keylist)``. (Contributed" +" by Raymond Hettinger.)" +msgstr "" + +#: ../../whatsnew/2.4.rst:959 +msgid "" +"Added a new opcode, ``LIST_APPEND``, that simplifies the generated bytecode " +"for list comprehensions and speeds them up by about a third. (Contributed " +"by Raymond Hettinger.)" +msgstr "" + +#: ../../whatsnew/2.4.rst:963 +msgid "" +"The peephole bytecode optimizer has been improved to produce shorter, " +"faster bytecode; remarkably, the resulting bytecode is more readable. " +"(Enhanced by Raymond Hettinger.)" +msgstr "" + +#: ../../whatsnew/2.4.rst:967 +msgid "" +"String concatenations in statements of the form ``s = s + \"abc\"`` and ``s " +"+= \"abc\"`` are now performed more efficiently in certain circumstances. " +"This optimization won't be present in other Python implementations such as " +"Jython, so you shouldn't rely on it; using the :meth:`join` method of " +"strings is still recommended when you want to efficiently glue a large " +"number of strings together. (Contributed by Armin Rigo.)" +msgstr "" + +#: ../../whatsnew/2.4.rst:974 +msgid "" +"The net result of the 2.4 optimizations is that Python 2.4 runs the pystone " +"benchmark around 5% faster than Python 2.3 and 35% faster than Python 2.2. " +"(pystone is not a particularly good benchmark, but it's the most commonly " +"used measurement of Python's performance. Your own applications may show " +"greater or smaller benefits from Python 2.4.)" +msgstr "" + +#: ../../whatsnew/2.4.rst:990 +msgid "New, Improved, and Deprecated Modules" +msgstr "新增,改进和弃用的模块" + +#: ../../whatsnew/2.4.rst:992 +msgid "" +"As usual, Python's standard library received a number of enhancements and " +"bug fixes. Here's a partial list of the most notable changes, sorted " +"alphabetically by module name. Consult the :file:`Misc/NEWS` file in the " +"source tree for a more complete list of changes, or look through the CVS " +"logs for all the details." +msgstr "" + +#: ../../whatsnew/2.4.rst:997 +msgid "" +"The :mod:`asyncore` module's :func:`loop` function now has a *count* " +"parameter that lets you perform a limited number of passes through the " +"polling loop. The default is still to loop forever." +msgstr "" + +#: ../../whatsnew/2.4.rst:1001 +msgid "" +"The :mod:`base64` module now has more complete :rfc:`3548` support for " +"Base64, Base32, and Base16 encoding and decoding, including optional case " +"folding and optional alternative alphabets. (Contributed by Barry Warsaw.)" +msgstr "" + +#: ../../whatsnew/2.4.rst:1005 +msgid "" +"The :mod:`bisect` module now has an underlying C implementation for improved" +" performance. (Contributed by Dmitry Vasiliev.)" +msgstr "" + +#: ../../whatsnew/2.4.rst:1008 +msgid "" +"The CJKCodecs collections of East Asian codecs, maintained by Hye-Shik " +"Chang, was integrated into 2.4. The new encodings are:" +msgstr "由 Hye-Shik Chang 维护的东亚编解码器的 CJKCodecs 集合已集成到 2.4 中。新的编码为:" + +#: ../../whatsnew/2.4.rst:1011 +msgid "Chinese (PRC): gb2312, gbk, gb18030, big5hkscs, hz" +msgstr "汉语(大陆): gb2312, gbk, gb18030, big5hkscs, hz" + +#: ../../whatsnew/2.4.rst:1013 +msgid "Chinese (ROC): big5, cp950" +msgstr "汉语(台湾): big5, cp950" + +#: ../../whatsnew/2.4.rst:1017 +msgid "Japanese: cp932, euc-jis-2004, euc-jp, euc-jisx0213, iso-2022-jp," +msgstr "日语: cp932, euc-jis-2004, euc-jp, euc-jisx0213, iso-2022-jp," + +#: ../../whatsnew/2.4.rst:1016 +msgid "" +"iso-2022-jp-1, iso-2022-jp-2, iso-2022-jp-3, iso-2022-jp-ext, " +"iso-2022-jp-2004, shift-jis, shift-jisx0213, shift-jis-2004" +msgstr "" +"iso-2022-jp-1, iso-2022-jp-2, iso-2022-jp-3, iso-2022-jp-ext, " +"iso-2022-jp-2004, shift-jis, shift-jisx0213, shift-jis-2004" + +#: ../../whatsnew/2.4.rst:1019 +msgid "Korean: cp949, euc-kr, johab, iso-2022-kr" +msgstr "韩语: cp949, euc-kr, johab, iso-2022-kr" + +#: ../../whatsnew/2.4.rst:1021 +msgid "" +"Some other new encodings were added: HP Roman8, ISO_8859-11, ISO_8859-16, " +"PCTP-154, and TIS-620." +msgstr "添加了其他一些新的编码:HP Roman8, ISO_8859-11, ISO_8859-16, PCTP-154 和 TIS-620" + +#: ../../whatsnew/2.4.rst:1024 +msgid "" +"The UTF-8 and UTF-16 codecs now cope better with receiving partial input. " +"Previously the :class:`StreamReader` class would try to read more data, " +"making it impossible to resume decoding from the stream. The :meth:`read` " +"method will now return as much data as it can and future calls will resume " +"decoding where previous ones left off. (Implemented by Walter Dörwald.)" +msgstr "" + +#: ../../whatsnew/2.4.rst:1030 +msgid "" +"There is a new :mod:`collections` module for various specialized collection" +" datatypes. Currently it contains just one type, :class:`deque`, a double-" +"ended queue that supports efficiently adding and removing elements from " +"either end::" +msgstr "" + +#: ../../whatsnew/2.4.rst:1050 +msgid "" +"Several modules, such as the :mod:`Queue` and :mod:`threading` modules, now " +"take advantage of :class:`collections.deque` for improved performance. " +"(Contributed by Raymond Hettinger.)" +msgstr "" + +#: ../../whatsnew/2.4.rst:1054 +msgid "" +"The :mod:`ConfigParser` classes have been enhanced slightly. The " +":meth:`read` method now returns a list of the files that were successfully " +"parsed, and the :meth:`set` method raises :exc:`TypeError` if passed a " +"*value* argument that isn't a string. (Contributed by John Belmonte and " +"David Goodger.)" +msgstr "" + +#: ../../whatsnew/2.4.rst:1059 +msgid "" +"The :mod:`curses` module now supports the ncurses extension " +":func:`use_default_colors`. On platforms where the terminal supports " +"transparency, this makes it possible to use a transparent background. " +"(Contributed by Jörg Lehmann.)" +msgstr "" + +#: ../../whatsnew/2.4.rst:1064 +msgid "" +"The :mod:`difflib` module now includes an :class:`HtmlDiff` class that " +"creates an HTML table showing a side by side comparison of two versions of a" +" text. (Contributed by Dan Gass.)" +msgstr "" + +#: ../../whatsnew/2.4.rst:1068 +msgid "" +"The :mod:`email` package was updated to version 3.0, which dropped various " +"deprecated APIs and removes support for Python versions earlier than 2.3. " +"The 3.0 version of the package uses a new incremental parser for MIME " +"messages, available in the :mod:`email.FeedParser` module. The new parser " +"doesn't require reading the entire message into memory, and doesn't raise " +"exceptions if a message is malformed; instead it records any problems in the" +" :attr:`defect` attribute of the message. (Developed by Anthony Baxter, " +"Barry Warsaw, Thomas Wouters, and others.)" +msgstr "" + +#: ../../whatsnew/2.4.rst:1077 +msgid "" +"The :mod:`heapq` module has been converted to C. The resulting tenfold " +"improvement in speed makes the module suitable for handling high volumes of " +"data. In addition, the module has two new functions :func:`nlargest` and " +":func:`nsmallest` that use heaps to find the N largest or smallest values in" +" a dataset without the expense of a full sort. (Contributed by Raymond " +"Hettinger.)" +msgstr "" + +#: ../../whatsnew/2.4.rst:1083 +msgid "" +"The :mod:`httplib` module now contains constants for HTTP status codes " +"defined in various HTTP-related RFC documents. Constants have names such as" +" :const:`OK`, :const:`CREATED`, :const:`CONTINUE`, and " +":const:`MOVED_PERMANENTLY`; use pydoc to get a full list. (Contributed by " +"Andrew Eland.)" +msgstr "" + +#: ../../whatsnew/2.4.rst:1089 +msgid "" +"The :mod:`imaplib` module now supports IMAP's THREAD command (contributed by" +" Yves Dionne) and new :meth:`deleteacl` and :meth:`myrights` methods " +"(contributed by Arnaud Mazin)." +msgstr "" + +#: ../../whatsnew/2.4.rst:1093 +msgid "" +"The :mod:`itertools` module gained a ``groupby(iterable[, *func*])`` " +"function. *iterable* is something that can be iterated over to return a " +"stream of elements, and the optional *func* parameter is a function that " +"takes an element and returns a key value; if omitted, the key is simply the " +"element itself. :func:`groupby` then groups the elements into subsequences " +"which have matching values of the key, and returns a series of 2-tuples " +"containing the key value and an iterator over the subsequence." +msgstr "" + +#: ../../whatsnew/2.4.rst:1101 +msgid "" +"Here's an example to make this clearer. The *key* function simply returns " +"whether a number is even or odd, so the result of :func:`groupby` is to " +"return consecutive runs of odd or even numbers. ::" +msgstr "" + +#: ../../whatsnew/2.4.rst:1117 +msgid "" +":func:`groupby` is typically used with sorted input. The logic for " +":func:`groupby` is similar to the Unix ``uniq`` filter which makes it handy " +"for eliminating, counting, or identifying duplicate elements::" +msgstr "" + +#: ../../whatsnew/2.4.rst:1140 +msgid "(Contributed by Hye-Shik Chang.)" +msgstr "(由 Hye-Shik Chang 贡献。)" + +#: ../../whatsnew/2.4.rst:1142 +msgid "" +":mod:`itertools` also gained a function named ``tee(iterator, N)`` that " +"returns *N* independent iterators that replicate *iterator*. If *N* is " +"omitted, the default is 2. ::" +msgstr "" + +#: ../../whatsnew/2.4.rst:1155 +msgid "" +"Note that :func:`tee` has to keep copies of the values returned by the " +"iterator; in the worst case, it may need to keep all of them. This should " +"therefore be used carefully if the leading iterator can run far ahead of the" +" trailing iterator in a long stream of inputs. If the separation is large, " +"then you might as well use :func:`list` instead. When the iterators track " +"closely with one another, :func:`tee` is ideal. Possible applications " +"include bookmarking, windowing, or lookahead iterators. (Contributed by " +"Raymond Hettinger.)" +msgstr "" + +#: ../../whatsnew/2.4.rst:1164 +msgid "" +"A number of functions were added to the :mod:`locale` module, such as " +":func:`bind_textdomain_codeset` to specify a particular encoding and a " +"family of :func:`l\\*gettext` functions that return messages in the chosen " +"encoding. (Contributed by Gustavo Niemeyer.)" +msgstr "" + +#: ../../whatsnew/2.4.rst:1169 +msgid "" +"Some keyword arguments were added to the :mod:`logging` package's " +":func:`basicConfig` function to simplify log configuration. The default " +"behavior is to log messages to standard error, but various keyword arguments" +" can be specified to log to a particular file, change the logging format, or" +" set the logging level. For example::" +msgstr "" + +#: ../../whatsnew/2.4.rst:1180 +msgid "" +"Other additions to the :mod:`logging` package include a ``log(level, msg)`` " +"convenience method, as well as a :class:`TimedRotatingFileHandler` class " +"that rotates its log files at a timed interval. The module already had " +":class:`RotatingFileHandler`, which rotated logs once the file exceeded a " +"certain size. Both classes derive from a new :class:`BaseRotatingHandler` " +"class that can be used to implement other rotating handlers." +msgstr "" + +#: ../../whatsnew/2.4.rst:1187 +msgid "(Changes implemented by Vinay Sajip.)" +msgstr "(更改由 Vinay Sajip 实现。)" + +#: ../../whatsnew/2.4.rst:1189 +msgid "" +"The :mod:`marshal` module now shares interned strings on unpacking a data " +"structure. This may shrink the size of certain pickle strings, but the " +"primary effect is to make :file:`.pyc` files significantly smaller. " +"(Contributed by Martin von Löwis.)" +msgstr "" + +#: ../../whatsnew/2.4.rst:1194 +msgid "" +"The :mod:`nntplib` module's :class:`NNTP` class gained :meth:`description` " +"and :meth:`descriptions` methods to retrieve newsgroup descriptions for a " +"single group or for a range of groups. (Contributed by Jürgen A. Erhard.)" +msgstr "" + +#: ../../whatsnew/2.4.rst:1198 +msgid "" +"Two new functions were added to the :mod:`operator` module, " +"``attrgetter(attr)`` and ``itemgetter(index)``. Both functions return " +"callables that take a single argument and return the corresponding attribute" +" or item; these callables make excellent data extractors when used with " +":func:`map` or :func:`sorted`. For example::" +msgstr "" + +#: ../../whatsnew/2.4.rst:1214 +msgid "" +"The :mod:`optparse` module was updated in various ways. The module now " +"passes its messages through :func:`gettext.gettext`, making it possible to " +"internationalize Optik's help and error messages. Help messages for options" +" can now include the string ``'%default'``, which will be replaced by the " +"option's default value. (Contributed by Greg Ward.)" +msgstr "" + +#: ../../whatsnew/2.4.rst:1220 +msgid "" +"The long-term plan is to deprecate the :mod:`rfc822` module in some future " +"Python release in favor of the :mod:`email` package. To this end, the " +":func:`email.Utils.formatdate` function has been changed to make it usable " +"as a replacement for :func:`rfc822.formatdate`. You may want to write new " +"e-mail processing code with this in mind. (Change implemented by Anthony " +"Baxter.)" +msgstr "" + +#: ../../whatsnew/2.4.rst:1226 +msgid "" +"A new ``urandom(n)`` function was added to the :mod:`os` module, returning a" +" string containing *n* bytes of random data. This function provides access " +"to platform-specific sources of randomness such as :file:`/dev/urandom` on " +"Linux or the Windows CryptoAPI. (Contributed by Trevor Perrin.)" +msgstr "" + +#: ../../whatsnew/2.4.rst:1231 +msgid "" +"Another new function: ``os.path.lexists(path)`` returns true if the file " +"specified by *path* exists, whether or not it's a symbolic link. This " +"differs from the existing ``os.path.exists(path)`` function, which returns " +"false if *path* is a symlink that points to a destination that doesn't " +"exist. (Contributed by Beni Cherniavsky.)" +msgstr "" + +#: ../../whatsnew/2.4.rst:1237 +msgid "" +"A new :func:`getsid` function was added to the :mod:`posix` module that " +"underlies the :mod:`os` module. (Contributed by J. Raynor.)" +msgstr "" +"在 :mod:`os` 之下 :mod:`posix` 模块中新增了一个 :func:`getsid` 函数。 (由 J. Raynor 贡献。)" + +#: ../../whatsnew/2.4.rst:1240 +msgid "" +"The :mod:`poplib` module now supports POP over SSL. (Contributed by Hector " +"Urtubia.)" +msgstr ":mod:`poplib` 模块现在已支持 SSL 上的 POP。 (由 Hector Urtubia 贡献。)" + +#: ../../whatsnew/2.4.rst:1243 +msgid "" +"The :mod:`profile` module can now profile C extension functions. " +"(Contributed by Nick Bastin.)" +msgstr "现在 :mod:`profile` 模块将可对 C 扩展函数执行性能分析。 (由 Nick Bastin 贡献。)" + +#: ../../whatsnew/2.4.rst:1246 +msgid "" +"The :mod:`random` module has a new method called ``getrandbits(N)`` that " +"returns a long integer *N* bits in length. The existing :meth:`randrange` " +"method now uses :meth:`getrandbits` where appropriate, making generation of " +"arbitrarily large random numbers more efficient. (Contributed by Raymond " +"Hettinger.)" +msgstr "" + +#: ../../whatsnew/2.4.rst:1252 +msgid "" +"The regular expression language accepted by the :mod:`re` module was " +"extended with simple conditional expressions, written as ``(?(group)A|B)``." +" *group* is either a numeric group ID or a group name defined with " +"``(?P...)`` earlier in the expression. If the specified group " +"matched, the regular expression pattern *A* will be tested against the " +"string; if the group didn't match, the pattern *B* will be used instead. " +"(Contributed by Gustavo Niemeyer.)" +msgstr "" + +#: ../../whatsnew/2.4.rst:1259 +msgid "" +"The :mod:`re` module is also no longer recursive, thanks to a massive amount" +" of work by Gustavo Niemeyer. In a recursive regular expression engine, " +"certain patterns result in a large amount of C stack space being consumed, " +"and it was possible to overflow the stack. For example, if you matched a " +"30000-byte string of ``a`` characters against the expression ``(a|b)+``, one" +" stack frame was consumed per character. Python 2.3 tried to check for " +"stack overflow and raise a :exc:`RuntimeError` exception, but certain " +"patterns could sidestep the checking and if you were unlucky Python could " +"segfault. Python 2.4's regular expression engine can match this pattern " +"without problems." +msgstr "" + +#: ../../whatsnew/2.4.rst:1269 +msgid "" +"The :mod:`signal` module now performs tighter error-checking on the " +"parameters to the :func:`signal.signal` function. For example, you can't " +"set a handler on the :const:`SIGKILL` signal; previous versions of Python " +"would quietly accept this, but 2.4 will raise a :exc:`RuntimeError` " +"exception." +msgstr "" + +#: ../../whatsnew/2.4.rst:1274 +msgid "" +"Two new functions were added to the :mod:`socket` module. :func:`socketpair`" +" returns a pair of connected sockets and ``getservbyport(port)`` looks up " +"the service name for a given port number. (Contributed by Dave Cole and " +"Barry Warsaw.)" +msgstr "" + +#: ../../whatsnew/2.4.rst:1279 +msgid "" +"The :func:`sys.exitfunc` function has been deprecated. Code should be using" +" the existing :mod:`atexit` module, which correctly handles calling multiple" +" exit functions. Eventually :func:`sys.exitfunc` will become a purely " +"internal interface, accessed only by :mod:`atexit`." +msgstr "" + +#: ../../whatsnew/2.4.rst:1284 +msgid "" +"The :mod:`tarfile` module now generates GNU-format tar files by default. " +"(Contributed by Lars Gustäbel.)" +msgstr "现在 :mod:`tarfile` 模块默认将生成 GNU 格式的 tar 文件。 (由 Lars Gustäbel 贡献。)" + +#: ../../whatsnew/2.4.rst:1287 +msgid "" +"The :mod:`threading` module now has an elegantly simple way to support " +"thread-local data. The module contains a :class:`local` class whose " +"attribute values are local to different threads. ::" +msgstr "" + +#: ../../whatsnew/2.4.rst:1297 +msgid "" +"Other threads can assign and retrieve their own values for the " +":attr:`number` and :attr:`url` attributes. You can subclass :class:`local` " +"to initialize attributes or to add methods. (Contributed by Jim Fulton.)" +msgstr "" + +#: ../../whatsnew/2.4.rst:1301 +msgid "" +"The :mod:`timeit` module now automatically disables periodic garbage " +"collection during the timing loop. This change makes consecutive timings " +"more comparable. (Contributed by Raymond Hettinger.)" +msgstr "" + +#: ../../whatsnew/2.4.rst:1305 +msgid "" +"The :mod:`weakref` module now supports a wider variety of objects including " +"Python functions, class instances, sets, frozensets, deques, arrays, files, " +"sockets, and regular expression pattern objects. (Contributed by Raymond " +"Hettinger.)" +msgstr "" + +#: ../../whatsnew/2.4.rst:1310 +msgid "" +"The :mod:`xmlrpclib` module now supports a multi-call extension for " +"transmitting multiple XML-RPC calls in a single HTTP operation. (Contributed" +" by Brian Quinlan.)" +msgstr "" + +#: ../../whatsnew/2.4.rst:1314 +msgid "" +"The :mod:`mpz`, :mod:`rotor`, and :mod:`xreadlines` modules have been " +"removed." +msgstr ":mod:`mpz`, :mod:`rotor` 和 :mod:`xreadlines` 模块已被移除。" + +#: ../../whatsnew/2.4.rst:1323 +msgid "cookielib" +msgstr "cookielib" + +#: ../../whatsnew/2.4.rst:1325 +msgid "" +"The :mod:`cookielib` library supports client-side handling for HTTP cookies," +" mirroring the :mod:`Cookie` module's server-side cookie support. Cookies " +"are stored in cookie jars; the library transparently stores cookies offered " +"by the web server in the cookie jar, and fetches the cookie from the jar " +"when connecting to the server. As in web browsers, policy objects control " +"whether cookies are accepted or not." +msgstr "" + +#: ../../whatsnew/2.4.rst:1332 +msgid "" +"In order to store cookies across sessions, two implementations of cookie " +"jars are provided: one that stores cookies in the Netscape format so " +"applications can use the Mozilla or Lynx cookie files, and one that stores " +"cookies in the same format as the Perl libwww library." +msgstr "" + +#: ../../whatsnew/2.4.rst:1337 +msgid "" +":mod:`urllib2` has been changed to interact with :mod:`cookielib`: " +":class:`HTTPCookieProcessor` manages a cookie jar that is used when " +"accessing URLs." +msgstr "" + +#: ../../whatsnew/2.4.rst:1341 +msgid "This module was contributed by John J. Lee." +msgstr "该模块由 John J. Lee 贡献。" + +#: ../../whatsnew/2.4.rst:1347 +msgid "doctest" +msgstr "doctest" + +#: ../../whatsnew/2.4.rst:1349 +msgid "" +"The :mod:`doctest` module underwent considerable refactoring thanks to " +"Edward Loper and Tim Peters. Testing can still be as simple as running " +":func:`doctest.testmod`, but the refactorings allow customizing the module's" +" operation in various ways" +msgstr "" + +#: ../../whatsnew/2.4.rst:1354 +msgid "" +"The new :class:`DocTestFinder` class extracts the tests from a given " +"object's docstrings::" +msgstr "" + +#: ../../whatsnew/2.4.rst:1370 +msgid "" +"The new :class:`DocTestRunner` class then runs individual tests and can " +"produce a summary of the results::" +msgstr "" + +#: ../../whatsnew/2.4.rst:1379 +msgid "The above example produces the following output::" +msgstr "" + +#: ../../whatsnew/2.4.rst:1387 +msgid "" +":class:`DocTestRunner` uses an instance of the :class:`OutputChecker` class " +"to compare the expected output with the actual output. This class takes a " +"number of different flags that customize its behaviour; ambitious users can " +"also write a completely new subclass of :class:`OutputChecker`." +msgstr "" + +#: ../../whatsnew/2.4.rst:1392 +msgid "" +"The default output checker provides a number of handy features. For example," +" with the :const:`doctest.ELLIPSIS` option flag, an ellipsis (``...``) in " +"the expected output matches any substring, making it easier to accommodate " +"outputs that vary in minor ways::" +msgstr "" + +#: ../../whatsnew/2.4.rst:1403 +msgid "Another special string, ````, matches a blank line::" +msgstr "" + +#: ../../whatsnew/2.4.rst:1411 +msgid "" +"Another new capability is producing a diff-style display of the output by " +"specifying the :const:`doctest.REPORT_UDIFF` (unified diffs), " +":const:`doctest.REPORT_CDIFF` (context diffs), or " +":const:`doctest.REPORT_NDIFF` (delta-style) option flags. For example::" +msgstr "" + +#: ../../whatsnew/2.4.rst:1427 +msgid "" +"Running the above function's tests with :const:`doctest.REPORT_UDIFF` " +"specified, you get the following output:" +msgstr "" + +#: ../../whatsnew/2.4.rst:1448 +msgid "Build and C API Changes" +msgstr "构建和 C API 的改变" + +#: ../../whatsnew/2.4.rst:1450 +msgid "Some of the changes to Python's build process and to the C API are:" +msgstr "对于 Python 构建过程和 C API 的一些修改:" + +#: ../../whatsnew/2.4.rst:1452 +msgid "" +"Three new convenience macros were added for common return values from " +"extension functions: :c:macro:`Py_RETURN_NONE`, :c:macro:`Py_RETURN_TRUE`, " +"and :c:macro:`Py_RETURN_FALSE`. (Contributed by Brett Cannon.)" +msgstr "" + +#: ../../whatsnew/2.4.rst:1456 +msgid "" +"Another new macro, :c:macro:`Py_CLEAR(obj)`, decreases the reference count " +"of *obj* and sets *obj* to the null pointer. (Contributed by Jim Fulton.)" +msgstr "" + +#: ../../whatsnew/2.4.rst:1459 +msgid "" +"A new function, ``PyTuple_Pack(N, obj1, obj2, ..., objN)``, constructs " +"tuples from a variable length argument list of Python objects. (Contributed" +" by Raymond Hettinger.)" +msgstr "" + +#: ../../whatsnew/2.4.rst:1463 +msgid "" +"A new function, ``PyDict_Contains(d, k)``, implements fast dictionary " +"lookups without masking exceptions raised during the look-up process. " +"(Contributed by Raymond Hettinger.)" +msgstr "" + +#: ../../whatsnew/2.4.rst:1467 +msgid "" +"The :c:macro:`Py_IS_NAN(X)` macro returns 1 if its float or double argument" +" *X* is a NaN. (Contributed by Tim Peters.)" +msgstr "" + +#: ../../whatsnew/2.4.rst:1470 +msgid "" +"C code can avoid unnecessary locking by using the new " +":c:func:`PyEval_ThreadsInitialized` function to tell if any thread " +"operations have been performed. If this function returns false, no lock " +"operations are needed. (Contributed by Nick Coghlan.)" +msgstr "" + +#: ../../whatsnew/2.4.rst:1475 +msgid "" +"A new function, :c:func:`PyArg_VaParseTupleAndKeywords`, is the same as " +":c:func:`PyArg_ParseTupleAndKeywords` but takes a :c:type:`va_list` instead" +" of a number of arguments. (Contributed by Greg Chapman.)" +msgstr "" + +#: ../../whatsnew/2.4.rst:1479 +msgid "" +"A new method flag, :const:`METH_COEXISTS`, allows a function defined in " +"slots to co-exist with a :c:type:`PyCFunction` having the same name. This " +"can halve the access time for a method such as :meth:`set.__contains__`. " +"(Contributed by Raymond Hettinger.)" +msgstr "" + +#: ../../whatsnew/2.4.rst:1484 +msgid "" +"Python can now be built with additional profiling for the interpreter " +"itself, intended as an aid to people developing the Python core. Providing " +":option:`!--enable-profiling` to the :program:`configure` script will let " +"you profile the interpreter with :program:`gprof`, and providing the " +":option:`!--with-tsc` switch enables profiling using the Pentium's Time-" +"Stamp-Counter register. Note that the :option:`!--with-tsc` switch is " +"slightly misnamed, because the profiling feature also works on the PowerPC " +"platform, though that processor architecture doesn't call that register " +"\"the TSC register\". (Contributed by Jeremy Hylton.)" +msgstr "" + +#: ../../whatsnew/2.4.rst:1494 +msgid "" +"The :c:type:`tracebackobject` type has been renamed to " +":c:type:`PyTracebackObject`." +msgstr "" + +#: ../../whatsnew/2.4.rst:1501 +msgid "Port-Specific Changes" +msgstr "移植专属的改变" + +#: ../../whatsnew/2.4.rst:1503 +msgid "" +"The Windows port now builds under MSVC++ 7.1 as well as version 6. " +"(Contributed by Martin von Löwis.)" +msgstr "" + +#: ../../whatsnew/2.4.rst:1510 +msgid "Porting to Python 2.4" +msgstr "移植到 Python 2.4" + +#: ../../whatsnew/2.4.rst:1512 +msgid "" +"This section lists previously described changes that may require changes to " +"your code:" +msgstr "本节列出了先前描述的可能需要修改你的代码的改变:" + +#: ../../whatsnew/2.4.rst:1515 +msgid "" +"Left shifts and hexadecimal/octal constants that are too large no longer " +"trigger a :exc:`FutureWarning` and return a value limited to 32 or 64 bits;" +" instead they return a long integer." +msgstr "" + +#: ../../whatsnew/2.4.rst:1522 +msgid "" +"The :func:`zip` built-in function and :func:`itertools.izip` now return an " +"empty list instead of raising a :exc:`TypeError` exception if called with no" +" arguments." +msgstr "" + +#: ../../whatsnew/2.4.rst:1526 +msgid "" +"You can no longer compare the :class:`date` and :class:`~datetime.datetime` " +"instances provided by the :mod:`datetime` module. Two instances of " +"different classes will now always be unequal, and relative comparisons " +"(``<``, ``>``) will raise a :exc:`TypeError`." +msgstr "" + +#: ../../whatsnew/2.4.rst:1531 +msgid "" +":func:`dircache.listdir` now passes exceptions to the caller instead of " +"returning empty lists." +msgstr "" + +#: ../../whatsnew/2.4.rst:1534 +msgid "" +":func:`LexicalHandler.startDTD` used to receive the public and system IDs in" +" the wrong order. This has been corrected; applications relying on the " +"wrong order need to be fixed." +msgstr "" + +#: ../../whatsnew/2.4.rst:1538 +msgid "" +":func:`fcntl.ioctl` now warns if the *mutate* argument is omitted and " +"relevant." +msgstr "现在 :func:`fcntl.ioctl` 会在 *mutate* 参数被省略并且将造成影响时发出警告。" + +#: ../../whatsnew/2.4.rst:1541 +msgid "" +"The :mod:`tarfile` module now generates GNU-format tar files by default." +msgstr "现在 :mod:`tarfile` 模块默认将生成 GNU 格式的 tar 文件。" + +#: ../../whatsnew/2.4.rst:1543 +msgid "" +"Encountering a failure while importing a module no longer leaves a " +"partially-initialized module object in ``sys.modules``." +msgstr "" + +#: ../../whatsnew/2.4.rst:1546 +msgid "" +":const:`None` is now a constant; code that binds a new value to the name " +"``None`` is now a syntax error." +msgstr "现在 :const:`None` 是一个常量;将一个新值绑定到 ``None`` 将导致语法错误。" + +#: ../../whatsnew/2.4.rst:1549 +msgid "" +"The :func:`signals.signal` function now raises a :exc:`RuntimeError` " +"exception for certain illegal values; previously these errors would pass " +"silently. For example, you can no longer set a handler on the " +":const:`SIGKILL` signal." +msgstr "" +"现在对于某些非法的值 :func:`signals.signal` 函数将引发 :exc:`RuntimeError` " +"异常;在之前版本中这些错误会静默地放过。 例如,你将不能在 :const:`SIGKILL` 信号上设置处理器。" + +#: ../../whatsnew/2.4.rst:1559 +msgid "Acknowledgements" +msgstr "致谢" + +#: ../../whatsnew/2.4.rst:1561 +msgid "" +"The author would like to thank the following people for offering " +"suggestions, corrections and assistance with various drafts of this article:" +" Koray Can, Hye-Shik Chang, Michael Dyck, Raymond Hettinger, Brian Hurt, " +"Hamish Lawson, Fredrik Lundh, Sean Reifschneider, Sadruddin Rejeb." +msgstr "" +"作者感谢以下人员对本文各种草稿给予的建议,更正和协助:Koray Can, Hye-Shik Chang, Michael Dyck, Raymond " +"Hettinger, Brian Hurt, Hamish Lawson, Fredrik Lundh, Sean Reifschneider, " +"Sadruddin Rejeb." diff --git a/whatsnew/2.5.po b/whatsnew/2.5.po new file mode 100644 index 000000000..c3e63dafd --- /dev/null +++ b/whatsnew/2.5.po @@ -0,0 +1,2787 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) 2001-2024, Python Software Foundation +# This file is distributed under the same license as the Python package. +# FIRST AUTHOR , YEAR. +# +# Translators: +# Fei Yin , 2018 +# 叶浚安 , 2019 +# Kade For, 2019 +# chen_chao , 2019 +# ppcfish , 2020 +# Rafael Fontenelle , 2024 +# Freesand Leo , 2024 +# +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: Python 3.9\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2024-09-06 19:48+0000\n" +"PO-Revision-Date: 2017-02-16 23:43+0000\n" +"Last-Translator: Freesand Leo , 2024\n" +"Language-Team: Chinese (China) (https://app.transifex.com/python-doc/teams/5390/zh_CN/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: zh_CN\n" +"Plural-Forms: nplurals=1; plural=0;\n" + +#: ../../whatsnew/2.5.rst:3 +msgid "What's New in Python 2.5" +msgstr "Python 2.5 有什么新变化" + +#: ../../whatsnew/2.5.rst:0 +msgid "Author" +msgstr "作者" + +#: ../../whatsnew/2.5.rst:5 +msgid "A.M. Kuchling" +msgstr "A.M. Kuchling" + +#: ../../whatsnew/2.5.rst:12 +msgid "" +"This article explains the new features in Python 2.5. The final release of " +"Python 2.5 is scheduled for August 2006; :pep:`356` describes the planned " +"release schedule." +msgstr "" + +#: ../../whatsnew/2.5.rst:16 +msgid "" +"The changes in Python 2.5 are an interesting mix of language and library " +"improvements. The library enhancements will be more important to Python's " +"user community, I think, because several widely-useful packages were added." +" New modules include ElementTree for XML processing (:mod:`xml.etree`), the" +" SQLite database module (:mod:`sqlite`), and the :mod:`ctypes` module for " +"calling C functions." +msgstr "" + +#: ../../whatsnew/2.5.rst:23 +msgid "" +"The language changes are of middling significance. Some pleasant new " +"features were added, but most of them aren't features that you'll use every " +"day. Conditional expressions were finally added to the language using a " +"novel syntax; see section :ref:`pep-308`. The new ':keyword:`with`' " +"statement will make writing cleanup code easier (section :ref:`pep-343`). " +"Values can now be passed into generators (section :ref:`pep-342`). Imports " +"are now visible as either absolute or relative (section :ref:`pep-328`). " +"Some corner cases of exception handling are handled better (section " +":ref:`pep-341`). All these improvements are worthwhile, but they're " +"improvements to one specific language feature or another; none of them are " +"broad modifications to Python's semantics." +msgstr "" + +#: ../../whatsnew/2.5.rst:34 +msgid "" +"As well as the language and library additions, other improvements and " +"bugfixes were made throughout the source tree. A search through the SVN " +"change logs finds there were 353 patches applied and 458 bugs fixed between " +"Python 2.4 and 2.5. (Both figures are likely to be underestimates.)" +msgstr "" + +#: ../../whatsnew/2.5.rst:39 +msgid "" +"This article doesn't try to be a complete specification of the new features;" +" instead changes are briefly introduced using helpful examples. For full " +"details, you should always refer to the documentation for Python 2.5 at " +"https://docs.python.org. If you want to understand the complete " +"implementation and design rationale, refer to the PEP for a particular new " +"feature." +msgstr "" + +#: ../../whatsnew/2.5.rst:45 +msgid "" +"Comments, suggestions, and error reports for this document are welcome; " +"please e-mail them to the author or open a bug in the Python bug tracker." +msgstr "" + +#: ../../whatsnew/2.5.rst:54 +msgid "PEP 308: Conditional Expressions" +msgstr "PEP 308: 条件表达式" + +#: ../../whatsnew/2.5.rst:56 +msgid "" +"For a long time, people have been requesting a way to write conditional " +"expressions, which are expressions that return value A or value B depending " +"on whether a Boolean value is true or false. A conditional expression lets " +"you write a single assignment statement that has the same effect as the " +"following::" +msgstr "" + +#: ../../whatsnew/2.5.rst:66 +msgid "" +"There have been endless tedious discussions of syntax on both python-dev and" +" comp.lang.python. A vote was even held that found the majority of voters " +"wanted conditional expressions in some form, but there was no syntax that " +"was preferred by a clear majority. Candidates included C's ``cond ? true_v :" +" false_v``, ``if cond then true_v else false_v``, and 16 other variations." +msgstr "" + +#: ../../whatsnew/2.5.rst:72 +msgid "Guido van Rossum eventually chose a surprising syntax::" +msgstr "Guido van Rossum 最终选择了一种令人惊讶的语法:" + +#: ../../whatsnew/2.5.rst:76 +msgid "" +"Evaluation is still lazy as in existing Boolean expressions, so the order of" +" evaluation jumps around a bit. The *condition* expression in the middle is" +" evaluated first, and the *true_value* expression is evaluated only if the " +"condition was true. Similarly, the *false_value* expression is only " +"evaluated when the condition is false." +msgstr "" + +#: ../../whatsnew/2.5.rst:82 +msgid "" +"This syntax may seem strange and backwards; why does the condition go in the" +" *middle* of the expression, and not in the front as in C's ``c ? x : y``? " +"The decision was checked by applying the new syntax to the modules in the " +"standard library and seeing how the resulting code read. In many cases " +"where a conditional expression is used, one value seems to be the 'common " +"case' and one value is an 'exceptional case', used only on rarer occasions " +"when the condition isn't met. The conditional syntax makes this pattern a " +"bit more obvious::" +msgstr "" + +#: ../../whatsnew/2.5.rst:92 +msgid "" +"I read the above statement as meaning \"here *contents* is usually assigned" +" a value of ``doc+'\\n'``; sometimes *doc* is empty, in which special case " +"an empty string is returned.\" I doubt I will use conditional expressions " +"very often where there isn't a clear common and uncommon case." +msgstr "" + +#: ../../whatsnew/2.5.rst:97 +msgid "" +"There was some discussion of whether the language should require surrounding" +" conditional expressions with parentheses. The decision was made to *not* " +"require parentheses in the Python language's grammar, but as a matter of " +"style I think you should always use them. Consider these two statements::" +msgstr "" + +#: ../../whatsnew/2.5.rst:108 +msgid "" +"In the first version, I think a reader's eye might group the statement into " +"'level = 1', 'if logging', 'else 0', and think that the condition decides " +"whether the assignment to *level* is performed. The second version reads " +"better, in my opinion, because it makes it clear that the assignment is " +"always performed and the choice is being made between two values." +msgstr "" + +#: ../../whatsnew/2.5.rst:114 +msgid "" +"Another reason for including the brackets: a few odd combinations of list " +"comprehensions and lambdas could look like incorrect conditional " +"expressions. See :pep:`308` for some examples. If you put parentheses " +"around your conditional expressions, you won't run into this case." +msgstr "" + +#: ../../whatsnew/2.5.rst:123 +msgid ":pep:`308` - Conditional Expressions" +msgstr ":pep:`308` - 条件表达式" + +#: ../../whatsnew/2.5.rst:123 +msgid "" +"PEP written by Guido van Rossum and Raymond D. Hettinger; implemented by " +"Thomas Wouters." +msgstr "PEP 由 Guido van Rossum 和 Raymond D 撰写,由 Thomas Wouters 实现。" + +#: ../../whatsnew/2.5.rst:132 +msgid "PEP 309: Partial Function Application" +msgstr "PEP 309: 部分功能应用" + +#: ../../whatsnew/2.5.rst:134 +msgid "" +"The :mod:`functools` module is intended to contain tools for functional-" +"style programming." +msgstr ":mod:`functools` 模块旨在包含用于函数式编程风格的工具。" + +#: ../../whatsnew/2.5.rst:137 +msgid "" +"One useful tool in this module is the :func:`partial` function. For programs" +" written in a functional style, you'll sometimes want to construct variants " +"of existing functions that have some of the parameters filled in. Consider " +"a Python function ``f(a, b, c)``; you could create a new function ``g(b, " +"c)`` that was equivalent to ``f(1, b, c)``. This is called \"partial " +"function application\"." +msgstr "" + +#: ../../whatsnew/2.5.rst:144 +msgid "" +":func:`partial` takes the arguments ``(function, arg1, arg2, ... " +"kwarg1=value1, kwarg2=value2)``. The resulting object is callable, so you " +"can just call it to invoke *function* with the filled-in arguments." +msgstr "" + +#: ../../whatsnew/2.5.rst:148 +msgid "Here's a small but realistic example::" +msgstr "这里有一个很小但很现实的例子::" + +#: ../../whatsnew/2.5.rst:160 +msgid "" +"Here's another example, from a program that uses PyGTK. Here a context-" +"sensitive pop-up menu is being constructed dynamically. The callback " +"provided for the menu option is a partially applied version of the " +":meth:`open_item` method, where the first argument has been provided. ::" +msgstr "" + +#: ../../whatsnew/2.5.rst:173 +msgid "" +"Another function in the :mod:`functools` module is the " +"``update_wrapper(wrapper, wrapped)`` function that helps you write well-" +"behaved decorators. :func:`update_wrapper` copies the name, module, and " +"docstring attribute to a wrapper function so that tracebacks inside the " +"wrapped function are easier to understand. For example, you might write::" +msgstr "" + +#: ../../whatsnew/2.5.rst:186 +msgid "" +":func:`wraps` is a decorator that can be used inside your own decorators to " +"copy the wrapped function's information. An alternate version of the " +"previous example would be::" +msgstr "" + +#: ../../whatsnew/2.5.rst:201 +msgid ":pep:`309` - Partial Function Application" +msgstr ":pep:`309` - 部分函数应用" + +#: ../../whatsnew/2.5.rst:201 +msgid "" +"PEP proposed and written by Peter Harris; implemented by Hye-Shik Chang and " +"Nick Coghlan, with adaptations by Raymond Hettinger." +msgstr "" +"PEP由 Peter Harris 提出并撰写;由 Hye-Shik Chang 和 Nick Coghlan 实现,并由 Raymond " +"Hettinger 适配。" + +#: ../../whatsnew/2.5.rst:210 +msgid "PEP 314: Metadata for Python Software Packages v1.1" +msgstr "PEP 314: Python软件包的元数据 v1.1" + +#: ../../whatsnew/2.5.rst:212 +msgid "" +"Some simple dependency support was added to Distutils. The :func:`setup` " +"function now has ``requires``, ``provides``, and ``obsoletes`` keyword " +"parameters. When you build a source distribution using the ``sdist`` " +"command, the dependency information will be recorded in the :file:`PKG-INFO`" +" file." +msgstr "" + +#: ../../whatsnew/2.5.rst:217 +msgid "" +"Another new keyword parameter is ``download_url``, which should be set to a " +"URL for the package's source code. This means it's now possible to look up " +"an entry in the package index, determine the dependencies for a package, and" +" download the required packages. ::" +msgstr "" + +#: ../../whatsnew/2.5.rst:231 +msgid "" +"Another new enhancement to the Python package index at https://pypi.org is " +"storing source and binary archives for a package. The new :command:`upload`" +" Distutils command will upload a package to the repository." +msgstr "" + +#: ../../whatsnew/2.5.rst:236 +msgid "" +"Before a package can be uploaded, you must be able to build a distribution " +"using the :command:`sdist` Distutils command. Once that works, you can run " +"``python setup.py upload`` to add your package to the PyPI archive. " +"Optionally you can GPG-sign the package by supplying the :option:`!--sign` " +"and :option:`!--identity` options." +msgstr "" + +#: ../../whatsnew/2.5.rst:242 +msgid "" +"Package uploading was implemented by Martin von Löwis and Richard Jones." +msgstr "包上传操作由 Martin von Löwis 和 Richard Jones 实现。" + +#: ../../whatsnew/2.5.rst:248 +msgid ":pep:`314` - Metadata for Python Software Packages v1.1" +msgstr ":pep:`314` - Python软件包的元数据 v1.1" + +#: ../../whatsnew/2.5.rst:248 +msgid "" +"PEP proposed and written by A.M. Kuchling, Richard Jones, and Fred Drake; " +"implemented by Richard Jones and Fred Drake." +msgstr "" +"PEP 由 A.M. Kuchling, Richard Jones 和 Fred Drake 提出并撰写,由 Richard Jones 和 Fred" +" Drake 实现" + +#: ../../whatsnew/2.5.rst:257 +msgid "PEP 328: Absolute and Relative Imports" +msgstr "PEP 328: 绝对导入和相对导入" + +#: ../../whatsnew/2.5.rst:259 +msgid "" +"The simpler part of :pep:`328` was implemented in Python 2.4: parentheses " +"could now be used to enclose the names imported from a module using the " +"``from ... import ...`` statement, making it easier to import many different" +" names." +msgstr "" +":pep:`328` 的较简单部分已在 Python 2.4 中实现:现在可以用圆括号将使用 ``from ... import ...`` " +"语句导入的名称括起来,以便能够更容易地导入大量不同的名称。" + +#: ../../whatsnew/2.5.rst:263 +msgid "" +"The more complicated part has been implemented in Python 2.5: importing a " +"module can be specified to use absolute or package-relative imports. The " +"plan is to move toward making absolute imports the default in future " +"versions of Python." +msgstr "" +"更复杂的部分已在 Python 2.5 中实现:可以指定使用绝对的或相对于包的导入方式来导入模块。 计划在未来的 Python " +"版本中将绝对导入方式设为默认。" + +#: ../../whatsnew/2.5.rst:267 +msgid "Let's say you have a package directory like this::" +msgstr "比如说你有这样一个包目录::" + +#: ../../whatsnew/2.5.rst:274 +msgid "" +"This defines a package named :mod:`pkg` containing the :mod:`pkg.main` and " +":mod:`pkg.string` submodules." +msgstr "这定义了一个名为 :mod:`pkg` 的包,其中包含 :mod:`pkg.main` 和 :mod:`pkg.string` 子模块。" + +#: ../../whatsnew/2.5.rst:277 +msgid "" +"Consider the code in the :file:`main.py` module. What happens if it " +"executes the statement ``import string``? In Python 2.4 and earlier, it " +"will first look in the package's directory to perform a relative import, " +"finds :file:`pkg/string.py`, imports the contents of that file as the " +":mod:`pkg.string` module, and that module is bound to the name ``string`` in" +" the :mod:`pkg.main` module's namespace." +msgstr "" + +#: ../../whatsnew/2.5.rst:284 +msgid "" +"That's fine if :mod:`pkg.string` was what you wanted. But what if you " +"wanted Python's standard :mod:`string` module? There's no clean way to " +"ignore :mod:`pkg.string` and look for the standard module; generally you had" +" to look at the contents of ``sys.modules``, which is slightly unclean. " +"Holger Krekel's :mod:`py.std` package provides a tidier way to perform " +"imports from the standard library, ``import py; py.std.string.join()``, but " +"that package isn't available on all Python installations." +msgstr "" + +#: ../../whatsnew/2.5.rst:292 +msgid "" +"Reading code which relies on relative imports is also less clear, because a " +"reader may be confused about which module, :mod:`string` or " +":mod:`pkg.string`, is intended to be used. Python users soon learned not to" +" duplicate the names of standard library modules in the names of their " +"packages' submodules, but you can't protect against having your submodule's " +"name being used for a new module added in a future version of Python." +msgstr "" + +#: ../../whatsnew/2.5.rst:299 +msgid "" +"In Python 2.5, you can switch :keyword:`import`'s behaviour to absolute " +"imports using a ``from __future__ import absolute_import`` directive. This " +"absolute-import behaviour will become the default in a future version " +"(probably Python 2.7). Once absolute imports are the default, ``import " +"string`` will always find the standard library's version. It's suggested " +"that users should begin using absolute imports as much as possible, so it's " +"preferable to begin writing ``from pkg import string`` in your code." +msgstr "" + +#: ../../whatsnew/2.5.rst:307 +msgid "" +"Relative imports are still possible by adding a leading period to the " +"module name when using the ``from ... import`` form::" +msgstr "" + +#: ../../whatsnew/2.5.rst:315 +msgid "" +"This imports the :mod:`string` module relative to the current package, so in" +" :mod:`pkg.main` this will import *name1* and *name2* from " +":mod:`pkg.string`. Additional leading periods perform the relative import " +"starting from the parent of the current package. For example, code in the " +":mod:`A.B.C` module can do::" +msgstr "" + +#: ../../whatsnew/2.5.rst:324 +msgid "" +"Leading periods cannot be used with the ``import modname`` form of the " +"import statement, only the ``from ... import`` form." +msgstr "" +"开头的句点不可用于 import 语句的 ``import modname`` 形式,只能用于 ``from ... import`` 形式。" + +#: ../../whatsnew/2.5.rst:331 +msgid ":pep:`328` - Imports: Multi-Line and Absolute/Relative" +msgstr ":pep:`328` - 导入:多行和绝对/相对导入" + +#: ../../whatsnew/2.5.rst:331 +msgid "PEP written by Aahz; implemented by Thomas Wouters." +msgstr "PEP 由 Aahz 撰写,由 Thomas Wouters 实现。" + +#: ../../whatsnew/2.5.rst:333 +msgid "https://pylib.readthedocs.io/" +msgstr "https://pylib.readthedocs.io/" + +#: ../../whatsnew/2.5.rst:334 +msgid "" +"The py library by Holger Krekel, which contains the :mod:`py.std` package." +msgstr "由 Holger Krekel 编写 py 库,其中包含 :mod:`py.std` 包。" + +#: ../../whatsnew/2.5.rst:342 +msgid "PEP 338: Executing Modules as Scripts" +msgstr "PEP 338: 将模块作为脚本执行" + +#: ../../whatsnew/2.5.rst:344 +msgid "" +"The :option:`-m` switch added in Python 2.4 to execute a module as a script " +"gained a few more abilities. Instead of being implemented in C code inside " +"the Python interpreter, the switch now uses an implementation in a new " +"module, :mod:`runpy`." +msgstr "" + +#: ../../whatsnew/2.5.rst:349 +msgid "" +"The :mod:`runpy` module implements a more sophisticated import mechanism so " +"that it's now possible to run modules in a package such as " +":mod:`pychecker.checker`. The module also supports alternative import " +"mechanisms such as the :mod:`zipimport` module. This means you can add a " +".zip archive's path to ``sys.path`` and then use the :option:`-m` switch to " +"execute code from the archive." +msgstr "" + +#: ../../whatsnew/2.5.rst:359 +msgid ":pep:`338` - Executing modules as scripts" +msgstr ":pep:`338` - 将模块作为脚本执行" + +#: ../../whatsnew/2.5.rst:360 +msgid "PEP written and implemented by Nick Coghlan." +msgstr "PEP 由 Nick Coghlan 撰写并实现。" + +#: ../../whatsnew/2.5.rst:368 +msgid "PEP 341: Unified try/except/finally" +msgstr "PEP 341: 统一 try/except/finally" + +#: ../../whatsnew/2.5.rst:370 +msgid "" +"Until Python 2.5, the :keyword:`try` statement came in two flavours. You " +"could use a :keyword:`finally` block to ensure that code is always executed," +" or one or more :keyword:`except` blocks to catch specific exceptions. You" +" couldn't combine both :keyword:`!except` blocks and a :keyword:`!finally` " +"block, because generating the right bytecode for the combined version was " +"complicated and it wasn't clear what the semantics of the combined statement" +" should be." +msgstr "" + +#: ../../whatsnew/2.5.rst:377 +msgid "" +"Guido van Rossum spent some time working with Java, which does support the " +"equivalent of combining :keyword:`except` blocks and a :keyword:`finally` " +"block, and this clarified what the statement should mean. In Python 2.5, " +"you can now write::" +msgstr "" + +#: ../../whatsnew/2.5.rst:393 +msgid "" +"The code in *block-1* is executed. If the code raises an exception, the " +"various :keyword:`except` blocks are tested: if the exception is of class " +":class:`Exception1`, *handler-1* is executed; otherwise if it's of class " +":class:`Exception2`, *handler-2* is executed, and so forth. If no exception" +" is raised, the *else-block* is executed." +msgstr "" + +#: ../../whatsnew/2.5.rst:399 +msgid "" +"No matter what happened previously, the *final-block* is executed once the " +"code block is complete and any raised exceptions handled. Even if there's an" +" error in an exception handler or the *else-block* and a new exception is " +"raised, the code in the *final-block* is still run." +msgstr "" + +#: ../../whatsnew/2.5.rst:407 +msgid ":pep:`341` - Unifying try-except and try-finally" +msgstr ":pep:`341` - 统一 try-except 和 try-finally" + +#: ../../whatsnew/2.5.rst:408 +msgid "PEP written by Georg Brandl; implementation by Thomas Lee." +msgstr "PEP 由 Georg Brandl 撰写,由 Thomas Lee 实现。" + +#: ../../whatsnew/2.5.rst:416 +msgid "PEP 342: New Generator Features" +msgstr "PEP 342: 生成器的新特性" + +#: ../../whatsnew/2.5.rst:418 +msgid "" +"Python 2.5 adds a simple way to pass values *into* a generator. As " +"introduced in Python 2.3, generators only produce output; once a generator's" +" code was invoked to create an iterator, there was no way to pass any new " +"information into the function when its execution is resumed. Sometimes the " +"ability to pass in some information would be useful. Hackish solutions to " +"this include making the generator's code look at a global variable and then " +"changing the global variable's value, or passing in some mutable object that" +" callers then modify." +msgstr "" + +#: ../../whatsnew/2.5.rst:426 +msgid "To refresh your memory of basic generators, here's a simple example::" +msgstr "" + +#: ../../whatsnew/2.5.rst:434 +msgid "" +"When you call ``counter(10)``, the result is an iterator that returns the " +"values from 0 up to 9. On encountering the :keyword:`yield` statement, the " +"iterator returns the provided value and suspends the function's execution, " +"preserving the local variables. Execution resumes on the following call to " +"the iterator's :meth:`next` method, picking up after the :keyword:`!yield` " +"statement." +msgstr "" + +#: ../../whatsnew/2.5.rst:440 +msgid "" +"In Python 2.3, :keyword:`yield` was a statement; it didn't return any value." +" In 2.5, :keyword:`!yield` is now an expression, returning a value that can" +" be assigned to a variable or otherwise operated on::" +msgstr "" + +#: ../../whatsnew/2.5.rst:446 +msgid "" +"I recommend that you always put parentheses around a :keyword:`yield` " +"expression when you're doing something with the returned value, as in the " +"above example. The parentheses aren't always necessary, but it's easier to " +"always add them instead of having to remember when they're needed." +msgstr "" + +#: ../../whatsnew/2.5.rst:451 +msgid "" +"(:pep:`342` explains the exact rules, which are that a :keyword:`yield`\\ " +"-expression must always be parenthesized except when it occurs at the top-" +"level expression on the right-hand side of an assignment. This means you " +"can write ``val = yield i`` but have to use parentheses when there's an " +"operation, as in ``val = (yield i) + 12``.)" +msgstr "" + +#: ../../whatsnew/2.5.rst:458 +msgid "" +"Values are sent into a generator by calling its ``send(value)`` method. The" +" generator's code is then resumed and the :keyword:`yield` expression " +"returns the specified *value*. If the regular :meth:`next` method is " +"called, the :keyword:`!yield` returns :const:`None`." +msgstr "" + +#: ../../whatsnew/2.5.rst:463 +msgid "" +"Here's the previous example, modified to allow changing the value of the " +"internal counter. ::" +msgstr "" + +#: ../../whatsnew/2.5.rst:476 +msgid "And here's an example of changing the counter::" +msgstr "" + +#: ../../whatsnew/2.5.rst:493 +msgid "" +":keyword:`yield` will usually return :const:`None`, so you should always " +"check for this case. Don't just use its value in expressions unless you're " +"sure that the :meth:`send` method will be the only method used to resume " +"your generator function." +msgstr "" + +#: ../../whatsnew/2.5.rst:498 +msgid "" +"In addition to :meth:`send`, there are two other new methods on generators:" +msgstr "" + +#: ../../whatsnew/2.5.rst:500 +msgid "" +"``throw(type, value=None, traceback=None)`` is used to raise an exception " +"inside the generator; the exception is raised by the :keyword:`yield` " +"expression where the generator's execution is paused." +msgstr "" + +#: ../../whatsnew/2.5.rst:504 +msgid "" +":meth:`close` raises a new :exc:`GeneratorExit` exception inside the " +"generator to terminate the iteration. On receiving this exception, the " +"generator's code must either raise :exc:`GeneratorExit` or " +":exc:`StopIteration`. Catching the :exc:`GeneratorExit` exception and " +"returning a value is illegal and will trigger a :exc:`RuntimeError`; if the " +"function raises some other exception, that exception is propagated to the " +"caller. :meth:`close` will also be called by Python's garbage collector " +"when the generator is garbage-collected." +msgstr "" + +#: ../../whatsnew/2.5.rst:512 +msgid "" +"If you need to run cleanup code when a :exc:`GeneratorExit` occurs, I " +"suggest using a ``try: ... finally:`` suite instead of catching " +":exc:`GeneratorExit`." +msgstr "" +"如果你需要在 :exc:`GeneratorExit` 发生的时候运行清理代码,我建议使用 ``try: ... finally:`` 组合来代替捕获 " +":exc:`GeneratorExit`。" + +#: ../../whatsnew/2.5.rst:515 +msgid "" +"The cumulative effect of these changes is to turn generators from one-way " +"producers of information into both producers and consumers." +msgstr "这些改变的累积效应是,让生成器从单向的信息生产者变成了既是生产者,又是消费者。" + +#: ../../whatsnew/2.5.rst:518 +msgid "" +"Generators also become *coroutines*, a more generalized form of subroutines." +" Subroutines are entered at one point and exited at another point (the top " +"of the function, and a :keyword:`return` statement), but coroutines can be " +"entered, exited, and resumed at many different points (the :keyword:`yield` " +"statements). We'll have to figure out patterns for using coroutines " +"effectively in Python." +msgstr "" + +#: ../../whatsnew/2.5.rst:524 +msgid "" +"The addition of the :meth:`close` method has one side effect that isn't " +"obvious. :meth:`close` is called when a generator is garbage-collected, so " +"this means the generator's code gets one last chance to run before the " +"generator is destroyed. This last chance means that ``try...finally`` " +"statements in generators can now be guaranteed to work; the " +":keyword:`finally` clause will now always get a chance to run. The " +"syntactic restriction that you couldn't mix :keyword:`yield` statements with" +" a ``try...finally`` suite has therefore been removed. This seems like a " +"minor bit of language trivia, but using generators and ``try...finally`` is " +"actually necessary in order to implement the :keyword:`with` statement " +"described by :pep:`343`. I'll look at this new statement in the following " +"section." +msgstr "" + +#: ../../whatsnew/2.5.rst:536 +msgid "" +"Another even more esoteric effect of this change: previously, the " +":attr:`gi_frame` attribute of a generator was always a frame object. It's " +"now possible for :attr:`gi_frame` to be ``None`` once the generator has been" +" exhausted." +msgstr "" + +#: ../../whatsnew/2.5.rst:549 +msgid ":pep:`342` - Coroutines via Enhanced Generators" +msgstr ":pep:`342` - 通过增强型生成器实现协程" + +#: ../../whatsnew/2.5.rst:545 +msgid "" +"PEP written by Guido van Rossum and Phillip J. Eby; implemented by Phillip " +"J. Eby. Includes examples of some fancier uses of generators as " +"coroutines." +msgstr "" +"PEP 由 Guido van Rossum 和 Phillip J. Eby 撰写,由 Phillip J. Eby " +"实现。包括一些更高级的使用生成器作为协程的示例。" + +#: ../../whatsnew/2.5.rst:548 +msgid "" +"Earlier versions of these features were proposed in :pep:`288` by Raymond " +"Hettinger and :pep:`325` by Samuele Pedroni." +msgstr "" +"这些功能的早期版本在 :pep:`288` (由 Raymond Hettinger 撰写) 和 :pep:`325` (由 Samuele " +"Pedroni 撰写)中提出。" + +#: ../../whatsnew/2.5.rst:552 +msgid "https://en.wikipedia.org/wiki/Coroutine" +msgstr "https://en.wikipedia.org/wiki/Coroutine" + +#: ../../whatsnew/2.5.rst:552 +msgid "The Wikipedia entry for coroutines." +msgstr "协程的Wikipedia条目。" + +#: ../../whatsnew/2.5.rst:554 +msgid "http://www.sidhe.org/~dan/blog/archives/000178.html" +msgstr "http://www.sidhe.org/~dan/blog/archives/000178.html" + +#: ../../whatsnew/2.5.rst:555 +msgid "" +"An explanation of coroutines from a Perl point of view, written by Dan " +"Sugalski." +msgstr "基于 Perl 视角对协程的介绍,由 Dan Sugalski 撰写。" + +#: ../../whatsnew/2.5.rst:563 +msgid "PEP 343: The 'with' statement" +msgstr "PEP 343: \"with\" 语句" + +#: ../../whatsnew/2.5.rst:565 +msgid "" +"The ':keyword:`with`' statement clarifies code that previously would use " +"``try...finally`` blocks to ensure that clean-up code is executed. In this " +"section, I'll discuss the statement as it will commonly be used. In the " +"next section, I'll examine the implementation details and show how to write " +"objects for use with this statement." +msgstr "" + +#: ../../whatsnew/2.5.rst:571 +msgid "" +"The ':keyword:`with`' statement is a new control-flow structure whose basic " +"structure is::" +msgstr "" + +#: ../../whatsnew/2.5.rst:577 +msgid "" +"The expression is evaluated, and it should result in an object that supports" +" the context management protocol (that is, has :meth:`__enter__` and " +":meth:`__exit__` methods." +msgstr "" + +#: ../../whatsnew/2.5.rst:581 +msgid "" +"The object's :meth:`__enter__` is called before *with-block* is executed and" +" therefore can run set-up code. It also may return a value that is bound to " +"the name *variable*, if given. (Note carefully that *variable* is *not* " +"assigned the result of *expression*.)" +msgstr "" + +#: ../../whatsnew/2.5.rst:586 +msgid "" +"After execution of the *with-block* is finished, the object's " +":meth:`__exit__` method is called, even if the block raised an exception, " +"and can therefore run clean-up code." +msgstr "" + +#: ../../whatsnew/2.5.rst:590 +msgid "" +"To enable the statement in Python 2.5, you need to add the following " +"directive to your module::" +msgstr "要在 Python 2.5 中启用该语句,你需要向你的模块添加以下指令::" + +#: ../../whatsnew/2.5.rst:595 +msgid "The statement will always be enabled in Python 2.6." +msgstr "该语句在Python 2.6 中始终启用。" + +#: ../../whatsnew/2.5.rst:597 +msgid "" +"Some standard Python objects now support the context management protocol and" +" can be used with the ':keyword:`with`' statement. File objects are one " +"example::" +msgstr "一些标准 Python 对象现在已支持上下文管理协议并可被用于 ':keyword:`with`' 语句。 文件对象就是一个例子::" + +#: ../../whatsnew/2.5.rst:605 +msgid "" +"After this statement has executed, the file object in *f* will have been " +"automatically closed, even if the :keyword:`for` loop raised an exception " +"part-way through the block." +msgstr "在此语句被执行之后,文件对象 *f* 将被自动关闭,即使是当 :keyword:`for` 循环在代码块中间引发了异常的时候也是如此。" + +#: ../../whatsnew/2.5.rst:611 +msgid "" +"In this case, *f* is the same object created by :func:`open`, because " +":meth:`file.__enter__` returns *self*." +msgstr "" + +#: ../../whatsnew/2.5.rst:614 +msgid "" +"The :mod:`threading` module's locks and condition variables also support " +"the ':keyword:`with`' statement::" +msgstr ":mod:`threading` 模块的加锁和条件变量也支持 ':keyword:`with`' 语句::" + +#: ../../whatsnew/2.5.rst:622 +msgid "" +"The lock is acquired before the block is executed and always released once " +"the block is complete." +msgstr "这个锁会在代码块被执行之前锁定并总是会在代码块完成之后释放。" + +#: ../../whatsnew/2.5.rst:625 +msgid "" +"The new :func:`localcontext` function in the :mod:`decimal` module makes it " +"easy to save and restore the current decimal context, which encapsulates the" +" desired precision and rounding characteristics for computations::" +msgstr "" + +#: ../../whatsnew/2.5.rst:644 +msgid "Writing Context Managers" +msgstr "编写上下文管理器" + +#: ../../whatsnew/2.5.rst:646 +msgid "" +"Under the hood, the ':keyword:`with`' statement is fairly complicated. Most " +"people will only use ':keyword:`!with`' in company with existing objects and" +" don't need to know these details, so you can skip the rest of this section " +"if you like. Authors of new objects will need to understand the details of " +"the underlying implementation and should keep reading." +msgstr "" + +#: ../../whatsnew/2.5.rst:652 +msgid "A high-level explanation of the context management protocol is:" +msgstr "在更高层级上对于上下文管理器协议的解释:" + +#: ../../whatsnew/2.5.rst:654 +msgid "" +"The expression is evaluated and should result in an object called a " +"\"context manager\". The context manager must have :meth:`__enter__` and " +":meth:`__exit__` methods." +msgstr "" + +#: ../../whatsnew/2.5.rst:658 +msgid "" +"The context manager's :meth:`__enter__` method is called. The value " +"returned is assigned to *VAR*. If no ``'as VAR'`` clause is present, the " +"value is simply discarded." +msgstr "" + +#: ../../whatsnew/2.5.rst:662 +msgid "The code in *BLOCK* is executed." +msgstr "*BLOCK* 中的代码会被执行。" + +#: ../../whatsnew/2.5.rst:664 +msgid "" +"If *BLOCK* raises an exception, the ``__exit__(type, value, traceback)`` is " +"called with the exception details, the same values returned by " +":func:`sys.exc_info`. The method's return value controls whether the " +"exception is re-raised: any false value re-raises the exception, and " +"``True`` will result in suppressing it. You'll only rarely want to suppress" +" the exception, because if you do the author of the code containing the " +"':keyword:`with`' statement will never realize anything went wrong." +msgstr "" + +#: ../../whatsnew/2.5.rst:672 +msgid "" +"If *BLOCK* didn't raise an exception, the :meth:`__exit__` method is still " +"called, but *type*, *value*, and *traceback* are all ``None``." +msgstr "" + +#: ../../whatsnew/2.5.rst:675 +msgid "" +"Let's think through an example. I won't present detailed code but will only" +" sketch the methods necessary for a database that supports transactions." +msgstr "" + +#: ../../whatsnew/2.5.rst:678 +msgid "" +"(For people unfamiliar with database terminology: a set of changes to the " +"database are grouped into a transaction. Transactions can be either " +"committed, meaning that all the changes are written into the database, or " +"rolled back, meaning that the changes are all discarded and the database is " +"unchanged. See any database textbook for more information.)" +msgstr "" + +#: ../../whatsnew/2.5.rst:684 +msgid "" +"Let's assume there's an object representing a database connection. Our goal " +"will be to let the user write code like this::" +msgstr "" + +#: ../../whatsnew/2.5.rst:693 +msgid "" +"The transaction should be committed if the code in the block runs flawlessly" +" or rolled back if there's an exception. Here's the basic interface for " +":class:`DatabaseConnection` that I'll assume::" +msgstr "" + +#: ../../whatsnew/2.5.rst:706 +msgid "" +"The :meth:`__enter__` method is pretty easy, having only to start a new " +"transaction. For this application the resulting cursor object would be a " +"useful result, so the method will return it. The user can then add ``as " +"cursor`` to their ':keyword:`with`' statement to bind the cursor to a " +"variable name. ::" +msgstr "" + +#: ../../whatsnew/2.5.rst:718 +msgid "" +"The :meth:`__exit__` method is the most complicated because it's where most " +"of the work has to be done. The method has to check if an exception " +"occurred. If there was no exception, the transaction is committed. The " +"transaction is rolled back if there was an exception." +msgstr "" + +#: ../../whatsnew/2.5.rst:723 +msgid "" +"In the code below, execution will just fall off the end of the function, " +"returning the default value of ``None``. ``None`` is false, so the " +"exception will be re-raised automatically. If you wished, you could be more" +" explicit and add a :keyword:`return` statement at the marked location. ::" +msgstr "" + +#: ../../whatsnew/2.5.rst:743 +msgid "The contextlib module" +msgstr "contextlib 模块" + +#: ../../whatsnew/2.5.rst:745 +msgid "" +"The new :mod:`contextlib` module provides some functions and a decorator " +"that are useful for writing objects for use with the ':keyword:`with`' " +"statement." +msgstr "" + +#: ../../whatsnew/2.5.rst:748 +msgid "" +"The decorator is called :func:`contextmanager`, and lets you write a single " +"generator function instead of defining a new class. The generator should " +"yield exactly one value. The code up to the :keyword:`yield` will be " +"executed as the :meth:`__enter__` method, and the value yielded will be the " +"method's return value that will get bound to the variable in the " +"':keyword:`with`' statement's :keyword:`!as` clause, if any. The code after" +" the :keyword:`yield` will be executed in the :meth:`__exit__` method. Any " +"exception raised in the block will be raised by the :keyword:`!yield` " +"statement." +msgstr "" + +#: ../../whatsnew/2.5.rst:757 +msgid "" +"Our database example from the previous section could be written using this " +"decorator as::" +msgstr "" + +#: ../../whatsnew/2.5.rst:777 +msgid "" +"The :mod:`contextlib` module also has a ``nested(mgr1, mgr2, ...)`` function" +" that combines a number of context managers so you don't need to write " +"nested ':keyword:`with`' statements. In this example, the single " +"':keyword:`!with`' statement both starts a database transaction and acquires" +" a thread lock::" +msgstr "" + +#: ../../whatsnew/2.5.rst:786 +msgid "" +"Finally, the ``closing(object)`` function returns *object* so that it can be" +" bound to a variable, and calls ``object.close`` at the end of the block. ::" +msgstr "" + +#: ../../whatsnew/2.5.rst:803 +msgid ":pep:`343` - The \"with\" statement" +msgstr ":pep:`343` - \"with\" 语句" + +#: ../../whatsnew/2.5.rst:800 +msgid "" +"PEP written by Guido van Rossum and Nick Coghlan; implemented by Mike Bland," +" Guido van Rossum, and Neal Norwitz. The PEP shows the code generated for a" +" ':keyword:`with`' statement, which can be helpful in learning how the " +"statement works." +msgstr "" + +#: ../../whatsnew/2.5.rst:805 +msgid "The documentation for the :mod:`contextlib` module." +msgstr ":mod:`contextlib` 模块的文档。" + +#: ../../whatsnew/2.5.rst:813 +msgid "PEP 352: Exceptions as New-Style Classes" +msgstr "PEP 352: 异常作为新型的类" + +#: ../../whatsnew/2.5.rst:815 +msgid "" +"Exception classes can now be new-style classes, not just classic classes, " +"and the built-in :exc:`Exception` class and all the standard built-in " +"exceptions (:exc:`NameError`, :exc:`ValueError`, etc.) are now new-style " +"classes." +msgstr "" + +#: ../../whatsnew/2.5.rst:819 +msgid "" +"The inheritance hierarchy for exceptions has been rearranged a bit. In 2.5, " +"the inheritance relationships are::" +msgstr "" + +#: ../../whatsnew/2.5.rst:828 +msgid "" +"This rearrangement was done because people often want to catch all " +"exceptions that indicate program errors. :exc:`KeyboardInterrupt` and " +":exc:`SystemExit` aren't errors, though, and usually represent an explicit " +"action such as the user hitting :kbd:`Control-C` or code calling " +":func:`sys.exit`. A bare ``except:`` will catch all exceptions, so you " +"commonly need to list :exc:`KeyboardInterrupt` and :exc:`SystemExit` in " +"order to re-raise them. The usual pattern is::" +msgstr "" + +#: ../../whatsnew/2.5.rst:843 +msgid "" +"In Python 2.5, you can now write ``except Exception`` to achieve the same " +"result, catching all the exceptions that usually indicate errors but " +"leaving :exc:`KeyboardInterrupt` and :exc:`SystemExit` alone. As in " +"previous versions, a bare ``except:`` still catches all exceptions." +msgstr "" + +#: ../../whatsnew/2.5.rst:848 +msgid "" +"The goal for Python 3.0 is to require any class raised as an exception to " +"derive from :exc:`BaseException` or some descendant of :exc:`BaseException`," +" and future releases in the Python 2.x series may begin to enforce this " +"constraint. Therefore, I suggest you begin making all your exception classes" +" derive from :exc:`Exception` now. It's been suggested that the bare " +"``except:`` form should be removed in Python 3.0, but Guido van Rossum " +"hasn't decided whether to do this or not." +msgstr "" + +#: ../../whatsnew/2.5.rst:856 +msgid "" +"Raising of strings as exceptions, as in the statement ``raise \"Error " +"occurred\"``, is deprecated in Python 2.5 and will trigger a warning. The " +"aim is to be able to remove the string-exception feature in a few releases." +msgstr "" + +#: ../../whatsnew/2.5.rst:863 +msgid ":pep:`352` - Required Superclass for Exceptions" +msgstr ":pep:`352` - 异常所需的超类" + +#: ../../whatsnew/2.5.rst:864 +msgid "" +"PEP written by Brett Cannon and Guido van Rossum; implemented by Brett " +"Cannon." +msgstr "PEP 由 Brett Cannon 和 Guido van Rossum 撰写,由 Brett Cannon 实现" + +#: ../../whatsnew/2.5.rst:872 +msgid "PEP 353: Using ssize_t as the index type" +msgstr "PEP 353: 使用ssize_t作为索引类型" + +#: ../../whatsnew/2.5.rst:874 +msgid "" +"A wide-ranging change to Python's C API, using a new :c:type:`Py_ssize_t` " +"type definition instead of :c:type:`int`, will permit the interpreter to " +"handle more data on 64-bit platforms. This change doesn't affect Python's " +"capacity on 32-bit platforms." +msgstr "" + +#: ../../whatsnew/2.5.rst:879 +msgid "" +"Various pieces of the Python interpreter used C's :c:type:`int` type to " +"store sizes or counts; for example, the number of items in a list or tuple " +"were stored in an :c:type:`int`. The C compilers for most 64-bit platforms " +"still define :c:type:`int` as a 32-bit type, so that meant that lists could " +"only hold up to ``2**31 - 1`` = 2147483647 items. (There are actually a few " +"different programming models that 64-bit C compilers can use -- see " +"http://www.unix.org/version2/whatsnew/lp64_wp.html for a discussion -- but " +"the most commonly available model leaves :c:type:`int` as 32 bits.)" +msgstr "" + +#: ../../whatsnew/2.5.rst:888 +msgid "" +"A limit of 2147483647 items doesn't really matter on a 32-bit platform " +"because you'll run out of memory before hitting the length limit. Each list " +"item requires space for a pointer, which is 4 bytes, plus space for a " +":c:type:`PyObject` representing the item. 2147483647\\*4 is already more " +"bytes than a 32-bit address space can contain." +msgstr "" + +#: ../../whatsnew/2.5.rst:894 +msgid "" +"It's possible to address that much memory on a 64-bit platform, however. " +"The pointers for a list that size would only require 16 GiB of space, so " +"it's not unreasonable that Python programmers might construct lists that " +"large. Therefore, the Python interpreter had to be changed to use some type " +"other than :c:type:`int`, and this will be a 64-bit type on 64-bit " +"platforms. The change will cause incompatibilities on 64-bit machines, so " +"it was deemed worth making the transition now, while the number of 64-bit " +"users is still relatively small. (In 5 or 10 years, we may *all* be on " +"64-bit machines, and the transition would be more painful then.)" +msgstr "" + +#: ../../whatsnew/2.5.rst:904 +msgid "" +"This change most strongly affects authors of C extension modules. Python " +"strings and container types such as lists and tuples now use " +":c:type:`Py_ssize_t` to store their size. Functions such as " +":c:func:`PyList_Size` now return :c:type:`Py_ssize_t`. Code in extension " +"modules may therefore need to have some variables changed to " +":c:type:`Py_ssize_t`." +msgstr "" + +#: ../../whatsnew/2.5.rst:910 +msgid "" +"The :c:func:`PyArg_ParseTuple` and :c:func:`Py_BuildValue` functions have a " +"new conversion code, ``n``, for :c:type:`Py_ssize_t`. " +":c:func:`PyArg_ParseTuple`'s ``s#`` and ``t#`` still output :c:type:`int` by" +" default, but you can define the macro :c:macro:`PY_SSIZE_T_CLEAN` before " +"including :file:`Python.h` to make them return :c:type:`Py_ssize_t`." +msgstr "" + +#: ../../whatsnew/2.5.rst:916 +msgid "" +":pep:`353` has a section on conversion guidelines that extension authors " +"should read to learn about supporting 64-bit platforms." +msgstr "" + +#: ../../whatsnew/2.5.rst:922 +msgid ":pep:`353` - Using ssize_t as the index type" +msgstr ":pep:`353` - 使用ssize_t作为索引类型" + +#: ../../whatsnew/2.5.rst:923 +msgid "PEP written and implemented by Martin von Löwis." +msgstr "PEP 由 Martin von Löwis 撰写并实现。" + +#: ../../whatsnew/2.5.rst:931 +msgid "PEP 357: The '__index__' method" +msgstr "PEP 357: '__index__' 方法" + +#: ../../whatsnew/2.5.rst:933 +msgid "" +"The NumPy developers had a problem that could only be solved by adding a new" +" special method, :meth:`__index__`. When using slice notation, as in " +"``[start:stop:step]``, the values of the *start*, *stop*, and *step* indexes" +" must all be either integers or long integers. NumPy defines a variety of " +"specialized integer types corresponding to unsigned and signed integers of " +"8, 16, 32, and 64 bits, but there was no way to signal that these types " +"could be used as slice indexes." +msgstr "" + +#: ../../whatsnew/2.5.rst:941 +msgid "" +"Slicing can't just use the existing :meth:`__int__` method because that " +"method is also used to implement coercion to integers. If slicing used " +":meth:`__int__`, floating-point numbers would also become legal slice " +"indexes and that's clearly an undesirable behaviour." +msgstr "" + +#: ../../whatsnew/2.5.rst:946 +msgid "" +"Instead, a new special method called :meth:`__index__` was added. It takes " +"no arguments and returns an integer giving the slice index to use. For " +"example::" +msgstr "" + +#: ../../whatsnew/2.5.rst:953 +msgid "" +"The return value must be either a Python integer or long integer. The " +"interpreter will check that the type returned is correct, and raises a " +":exc:`TypeError` if this requirement isn't met." +msgstr "" + +#: ../../whatsnew/2.5.rst:957 +msgid "" +"A corresponding :attr:`nb_index` slot was added to the C-level " +":c:type:`PyNumberMethods` structure to let C extensions implement this " +"protocol. ``PyNumber_Index(obj)`` can be used in extension code to call the " +":meth:`__index__` function and retrieve its result." +msgstr "" + +#: ../../whatsnew/2.5.rst:965 +msgid ":pep:`357` - Allowing Any Object to be Used for Slicing" +msgstr ":pep:`357` - 允许将任何对象用于切片" + +#: ../../whatsnew/2.5.rst:966 +msgid "PEP written and implemented by Travis Oliphant." +msgstr "PEP 由 Travis Oliphant 撰写并实现。" + +#: ../../whatsnew/2.5.rst:974 +msgid "Other Language Changes" +msgstr "其他语言特性修改" + +#: ../../whatsnew/2.5.rst:976 +msgid "" +"Here are all of the changes that Python 2.5 makes to the core Python " +"language." +msgstr "以下是 Python 2.5 针对核心 Python 语言的所有改变。" + +#: ../../whatsnew/2.5.rst:978 +msgid "" +"The :class:`dict` type has a new hook for letting subclasses provide a " +"default value when a key isn't contained in the dictionary. When a key isn't" +" found, the dictionary's ``__missing__(key)`` method will be called. This " +"hook is used to implement the new :class:`defaultdict` class in the " +":mod:`collections` module. The following example defines a dictionary that" +" returns zero for any missing key::" +msgstr "" + +#: ../../whatsnew/2.5.rst:993 +msgid "" +"Both 8-bit and Unicode strings have new ``partition(sep)`` and " +"``rpartition(sep)`` methods that simplify a common use case." +msgstr "" + +#: ../../whatsnew/2.5.rst:996 +msgid "" +"The ``find(S)`` method is often used to get an index which is then used to " +"slice the string and obtain the pieces that are before and after the " +"separator. ``partition(sep)`` condenses this pattern into a single method " +"call that returns a 3-tuple containing the substring before the separator, " +"the separator itself, and the substring after the separator. If the " +"separator isn't found, the first element of the tuple is the entire string " +"and the other two elements are empty. ``rpartition(sep)`` also returns a " +"3-tuple but starts searching from the end of the string; the ``r`` stands " +"for 'reverse'." +msgstr "" + +#: ../../whatsnew/2.5.rst:1005 +msgid "Some examples::" +msgstr "示例如下:" + +#: ../../whatsnew/2.5.rst:1018 +msgid "" +"(Implemented by Fredrik Lundh following a suggestion by Raymond Hettinger.)" +msgstr "(由 Fredrik Lundh 在 Raymond Hettinger 的建议下实现。)" + +#: ../../whatsnew/2.5.rst:1020 +msgid "" +"The :meth:`startswith` and :meth:`endswith` methods of string types now " +"accept tuples of strings to check for. ::" +msgstr "现在字符串类型的 :meth:`startswith` 和 :meth:`endswith` 方法可接受字符串元组供检查。 ::" + +#: ../../whatsnew/2.5.rst:1026 +msgid "(Implemented by Georg Brandl following a suggestion by Tom Lynn.)" +msgstr "" + +#: ../../whatsnew/2.5.rst:1030 +msgid "" +"The :func:`min` and :func:`max` built-in functions gained a ``key`` keyword " +"parameter analogous to the ``key`` argument for :meth:`sort`. This " +"parameter supplies a function that takes a single argument and is called for" +" every value in the list; :func:`min`/:func:`max` will return the element " +"with the smallest/largest return value from this function. For example, to " +"find the longest string in a list, you can do::" +msgstr "" + +#: ../../whatsnew/2.5.rst:1043 +msgid "(Contributed by Steven Bethard and Raymond Hettinger.)" +msgstr "(由 Steven Bethard 和 Raymond Hettinger 贡献。)" + +#: ../../whatsnew/2.5.rst:1045 +msgid "" +"Two new built-in functions, :func:`any` and :func:`all`, evaluate whether an" +" iterator contains any true or false values. :func:`any` returns " +":const:`True` if any value returned by the iterator is true; otherwise it " +"will return :const:`False`. :func:`all` returns :const:`True` only if all " +"of the values returned by the iterator evaluate as true. (Suggested by Guido" +" van Rossum, and implemented by Raymond Hettinger.)" +msgstr "" + +#: ../../whatsnew/2.5.rst:1052 +msgid "" +"The result of a class's :meth:`__hash__` method can now be either a long " +"integer or a regular integer. If a long integer is returned, the hash of " +"that value is taken. In earlier versions the hash value was required to be " +"a regular integer, but in 2.5 the :func:`id` built-in was changed to always " +"return non-negative numbers, and users often seem to use ``id(self)`` in " +":meth:`__hash__` methods (though this is discouraged)." +msgstr "" + +#: ../../whatsnew/2.5.rst:1061 +msgid "" +"ASCII is now the default encoding for modules. It's now a syntax error if " +"a module contains string literals with 8-bit characters but doesn't have an " +"encoding declaration. In Python 2.4 this triggered a warning, not a syntax " +"error. See :pep:`263` for how to declare a module's encoding; for example," +" you might add a line like this near the top of the source file::" +msgstr "" + +#: ../../whatsnew/2.5.rst:1069 +msgid "" +"A new warning, :class:`UnicodeWarning`, is triggered when you attempt to " +"compare a Unicode string and an 8-bit string that can't be converted to " +"Unicode using the default ASCII encoding. The result of the comparison is " +"false::" +msgstr "" + +#: ../../whatsnew/2.5.rst:1081 +msgid "" +"Previously this would raise a :class:`UnicodeDecodeError` exception, but in " +"2.5 this could result in puzzling problems when accessing a dictionary. If " +"you looked up ``unichr(128)`` and ``chr(128)`` was being used as a key, " +"you'd get a :class:`UnicodeDecodeError` exception. Other changes in 2.5 " +"resulted in this exception being raised instead of suppressed by the code in" +" :file:`dictobject.c` that implements dictionaries." +msgstr "" + +#: ../../whatsnew/2.5.rst:1088 +msgid "" +"Raising an exception for such a comparison is strictly correct, but the " +"change might have broken code, so instead :class:`UnicodeWarning` was " +"introduced." +msgstr "" + +#: ../../whatsnew/2.5.rst:1091 +msgid "(Implemented by Marc-André Lemburg.)" +msgstr "(由 Marc-André Lemburg 实现。)" + +#: ../../whatsnew/2.5.rst:1093 +msgid "" +"One error that Python programmers sometimes make is forgetting to include an" +" :file:`__init__.py` module in a package directory. Debugging this mistake " +"can be confusing, and usually requires running Python with the :option:`-v` " +"switch to log all the paths searched. In Python 2.5, a new " +":exc:`ImportWarning` warning is triggered when an import would have picked " +"up a directory as a package but no :file:`__init__.py` was found. This " +"warning is silently ignored by default; provide the :option:`-Wd <-W>` " +"option when running the Python executable to display the warning message. " +"(Implemented by Thomas Wouters.)" +msgstr "" + +#: ../../whatsnew/2.5.rst:1102 +msgid "" +"The list of base classes in a class definition can now be empty. As an " +"example, this is now legal::" +msgstr "" + +#: ../../whatsnew/2.5.rst:1108 +msgid "(Implemented by Brett Cannon.)" +msgstr "(由 Brett Cannon 实现。)" + +#: ../../whatsnew/2.5.rst:1116 +msgid "Interactive Interpreter Changes" +msgstr "交互解释器变更" + +#: ../../whatsnew/2.5.rst:1118 +msgid "" +"In the interactive interpreter, ``quit`` and ``exit`` have long been " +"strings so that new users get a somewhat helpful message when they try to " +"quit::" +msgstr "" + +#: ../../whatsnew/2.5.rst:1124 +msgid "" +"In Python 2.5, ``quit`` and ``exit`` are now objects that still produce " +"string representations of themselves, but are also callable. Newbies who try" +" ``quit()`` or ``exit()`` will now exit the interpreter as they expect. " +"(Implemented by Georg Brandl.)" +msgstr "" + +#: ../../whatsnew/2.5.rst:1129 +msgid "" +"The Python executable now accepts the standard long options " +":option:`--help` and :option:`--version`; on Windows, it also accepts the " +":option:`/? <-?>` option for displaying a help message. (Implemented by " +"Georg Brandl.)" +msgstr "" + +#: ../../whatsnew/2.5.rst:1139 +msgid "Optimizations" +msgstr "性能优化" + +#: ../../whatsnew/2.5.rst:1141 +msgid "" +"Several of the optimizations were developed at the NeedForSpeed sprint, an " +"event held in Reykjavik, Iceland, from May 21--28 2006. The sprint focused " +"on speed enhancements to the CPython implementation and was funded by EWT " +"LLC with local support from CCP Games. Those optimizations added at this " +"sprint are specially marked in the following list." +msgstr "" + +#: ../../whatsnew/2.5.rst:1147 +msgid "" +"When they were introduced in Python 2.4, the built-in :class:`set` and " +":class:`frozenset` types were built on top of Python's dictionary type. In" +" 2.5 the internal data structure has been customized for implementing sets, " +"and as a result sets will use a third less memory and are somewhat faster. " +"(Implemented by Raymond Hettinger.)" +msgstr "" + +#: ../../whatsnew/2.5.rst:1153 +msgid "" +"The speed of some Unicode operations, such as finding substrings, string " +"splitting, and character map encoding and decoding, has been improved. " +"(Substring search and splitting improvements were added by Fredrik Lundh and" +" Andrew Dalke at the NeedForSpeed sprint. Character maps were improved by " +"Walter Dörwald and Martin von Löwis.)" +msgstr "" + +#: ../../whatsnew/2.5.rst:1161 +msgid "" +"The ``long(str, base)`` function is now faster on long digit strings because" +" fewer intermediate results are calculated. The peak is for strings of " +"around 800--1000 digits where the function is 6 times faster. (Contributed " +"by Alan McIntyre and committed at the NeedForSpeed sprint.)" +msgstr "" + +#: ../../whatsnew/2.5.rst:1168 +msgid "" +"It's now illegal to mix iterating over a file with ``for line in file`` and" +" calling the file object's :meth:`read`/:meth:`readline`/:meth:`readlines` " +"methods. Iteration uses an internal buffer and the :meth:`read\\*` methods" +" don't use that buffer. Instead they would return the data following the " +"buffer, causing the data to appear out of order. Mixing iteration and these" +" methods will now trigger a :exc:`ValueError` from the :meth:`read\\*` " +"method. (Implemented by Thomas Wouters.)" +msgstr "" + +#: ../../whatsnew/2.5.rst:1178 +msgid "" +"The :mod:`struct` module now compiles structure format strings into an " +"internal representation and caches this representation, yielding a 20% " +"speedup. (Contributed by Bob Ippolito at the NeedForSpeed sprint.)" +msgstr "" + +#: ../../whatsnew/2.5.rst:1182 +msgid "" +"The :mod:`re` module got a 1 or 2% speedup by switching to Python's " +"allocator functions instead of the system's :c:func:`malloc` and " +":c:func:`free`. (Contributed by Jack Diederich at the NeedForSpeed sprint.)" +msgstr "" + +#: ../../whatsnew/2.5.rst:1186 +msgid "" +"The code generator's peephole optimizer now performs simple constant folding" +" in expressions. If you write something like ``a = 2+3``, the code " +"generator will do the arithmetic and produce code corresponding to ``a = " +"5``. (Proposed and implemented by Raymond Hettinger.)" +msgstr "" + +#: ../../whatsnew/2.5.rst:1191 +msgid "" +"Function calls are now faster because code objects now keep the most " +"recently finished frame (a \"zombie frame\") in an internal field of the " +"code object, reusing it the next time the code object is invoked. (Original" +" patch by Michael Hudson, modified by Armin Rigo and Richard Jones; " +"committed at the NeedForSpeed sprint.) Frame objects are also slightly " +"smaller, which may improve cache locality and reduce memory usage a bit. " +"(Contributed by Neal Norwitz.)" +msgstr "" + +#: ../../whatsnew/2.5.rst:1201 +msgid "" +"Python's built-in exceptions are now new-style classes, a change that speeds" +" up instantiation considerably. Exception handling in Python 2.5 is " +"therefore about 30% faster than in 2.4. (Contributed by Richard Jones, Georg" +" Brandl and Sean Reifschneider at the NeedForSpeed sprint.)" +msgstr "" + +#: ../../whatsnew/2.5.rst:1206 +msgid "" +"Importing now caches the paths tried, recording whether they exist or not " +"so that the interpreter makes fewer :c:func:`open` and :c:func:`stat` calls" +" on startup. (Contributed by Martin von Löwis and Georg Brandl.)" +msgstr "" + +#: ../../whatsnew/2.5.rst:1218 +msgid "New, Improved, and Removed Modules" +msgstr "新增,改进和删除的模块" + +#: ../../whatsnew/2.5.rst:1220 +msgid "" +"The standard library received many enhancements and bug fixes in Python 2.5." +" Here's a partial list of the most notable changes, sorted alphabetically by" +" module name. Consult the :file:`Misc/NEWS` file in the source tree for a " +"more complete list of changes, or look through the SVN logs for all the " +"details." +msgstr "" + +#: ../../whatsnew/2.5.rst:1225 +msgid "" +"The :mod:`audioop` module now supports the a-LAW encoding, and the code for " +"u-LAW encoding has been improved. (Contributed by Lars Immisch.)" +msgstr "" + +#: ../../whatsnew/2.5.rst:1228 +msgid "" +"The :mod:`codecs` module gained support for incremental codecs. The " +":func:`codec.lookup` function now returns a :class:`CodecInfo` instance " +"instead of a tuple. :class:`CodecInfo` instances behave like a 4-tuple to " +"preserve backward compatibility but also have the attributes :attr:`encode`," +" :attr:`decode`, :attr:`incrementalencoder`, :attr:`incrementaldecoder`, " +":attr:`streamwriter`, and :attr:`streamreader`. Incremental codecs can " +"receive input and produce output in multiple chunks; the output is the same " +"as if the entire input was fed to the non-incremental codec. See the " +":mod:`codecs` module documentation for details. (Designed and implemented by" +" Walter Dörwald.)" +msgstr "" + +#: ../../whatsnew/2.5.rst:1240 +msgid "" +"The :mod:`collections` module gained a new type, :class:`defaultdict`, that " +"subclasses the standard :class:`dict` type. The new type mostly behaves " +"like a dictionary but constructs a default value when a key isn't present, " +"automatically adding it to the dictionary for the requested key value." +msgstr "" + +#: ../../whatsnew/2.5.rst:1245 +msgid "" +"The first argument to :class:`defaultdict`'s constructor is a factory " +"function that gets called whenever a key is requested but not found. This " +"factory function receives no arguments, so you can use built-in type " +"constructors such as :func:`list` or :func:`int`. For example, you can " +"make an index of words based on their initial letter like this::" +msgstr "" + +#: ../../whatsnew/2.5.rst:1261 +msgid "Printing ``index`` results in the following output::" +msgstr "打印 ``index`` 导致以下输出::" + +#: ../../whatsnew/2.5.rst:1269 +msgid "(Contributed by Guido van Rossum.)" +msgstr "(由 Guido van Rossum 贡献。)" + +#: ../../whatsnew/2.5.rst:1271 +msgid "" +"The :class:`deque` double-ended queue type supplied by the " +":mod:`collections` module now has a ``remove(value)`` method that removes " +"the first occurrence of *value* in the queue, raising :exc:`ValueError` if " +"the value isn't found. (Contributed by Raymond Hettinger.)" +msgstr "" + +#: ../../whatsnew/2.5.rst:1276 +msgid "" +"New module: The :mod:`contextlib` module contains helper functions for use " +"with the new ':keyword:`with`' statement. See section :ref:`contextlibmod` " +"for more about this module." +msgstr "" + +#: ../../whatsnew/2.5.rst:1280 +msgid "" +"New module: The :mod:`cProfile` module is a C implementation of the " +"existing :mod:`profile` module that has much lower overhead. The module's " +"interface is the same as :mod:`profile`: you run ``cProfile.run('main()')`` " +"to profile a function, can save profile data to a file, etc. It's not yet " +"known if the Hotshot profiler, which is also written in C but doesn't match " +"the :mod:`profile` module's interface, will continue to be maintained in " +"future versions of Python. (Contributed by Armin Rigo.)" +msgstr "" + +#: ../../whatsnew/2.5.rst:1288 +msgid "" +"Also, the :mod:`pstats` module for analyzing the data measured by the " +"profiler now supports directing the output to any file object by supplying a" +" *stream* argument to the :class:`Stats` constructor. (Contributed by Skip " +"Montanaro.)" +msgstr "" + +#: ../../whatsnew/2.5.rst:1292 +msgid "" +"The :mod:`csv` module, which parses files in comma-separated value format, " +"received several enhancements and a number of bugfixes. You can now set the" +" maximum size in bytes of a field by calling the " +"``csv.field_size_limit(new_limit)`` function; omitting the *new_limit* " +"argument will return the currently-set limit. The :class:`reader` class now" +" has a :attr:`line_num` attribute that counts the number of physical lines " +"read from the source; records can span multiple physical lines, so " +":attr:`line_num` is not the same as the number of records read." +msgstr "" + +#: ../../whatsnew/2.5.rst:1301 +msgid "" +"The CSV parser is now stricter about multi-line quoted fields. Previously, " +"if a line ended within a quoted field without a terminating newline " +"character, a newline would be inserted into the returned field. This " +"behavior caused problems when reading files that contained carriage return " +"characters within fields, so the code was changed to return the field " +"without inserting newlines. As a consequence, if newlines embedded within " +"fields are important, the input should be split into lines in a manner that " +"preserves the newline characters." +msgstr "" + +#: ../../whatsnew/2.5.rst:1309 +msgid "(Contributed by Skip Montanaro and Andrew McNamara.)" +msgstr "(由Skip Montanaro 和 Andrew McNamara 贡献。)" + +#: ../../whatsnew/2.5.rst:1311 +msgid "" +"The :class:`~datetime.datetime` class in the :mod:`datetime` module now has" +" a ``strptime(string, format)`` method for parsing date strings, " +"contributed by Josh Spoerri. It uses the same format characters as " +":func:`time.strptime` and :func:`time.strftime`::" +msgstr "" + +#: ../../whatsnew/2.5.rst:1321 +msgid "" +"The :meth:`SequenceMatcher.get_matching_blocks` method in the :mod:`difflib`" +" module now guarantees to return a minimal list of blocks describing " +"matching subsequences. Previously, the algorithm would occasionally break a" +" block of matching elements into two list entries. (Enhancement by Tim " +"Peters.)" +msgstr "" + +#: ../../whatsnew/2.5.rst:1326 +msgid "" +"The :mod:`doctest` module gained a ``SKIP`` option that keeps an example " +"from being executed at all. This is intended for code snippets that are " +"usage examples intended for the reader and aren't actually test cases." +msgstr "" + +#: ../../whatsnew/2.5.rst:1330 +msgid "" +"An *encoding* parameter was added to the :func:`testfile` function and the " +":class:`DocFileSuite` class to specify the file's encoding. This makes it " +"easier to use non-ASCII characters in tests contained within a docstring. " +"(Contributed by Bjorn Tillenius.)" +msgstr "" + +#: ../../whatsnew/2.5.rst:1337 +msgid "" +"The :mod:`email` package has been updated to version 4.0. (Contributed by " +"Barry Warsaw.)" +msgstr ":mod:`email` 包已经升级到 4.0版 (由 Barry Warsaw 贡献)" + +#: ../../whatsnew/2.5.rst:1345 +msgid "" +"The :mod:`fileinput` module was made more flexible. Unicode filenames are " +"now supported, and a *mode* parameter that defaults to ``\"r\"`` was added " +"to the :func:`input` function to allow opening files in binary or " +":term:`universal newlines` mode. Another new parameter, *openhook*, lets " +"you use a function other than :func:`open` to open the input files. Once " +"you're iterating over the set of files, the :class:`FileInput` object's new " +":meth:`fileno` returns the file descriptor for the currently opened file. " +"(Contributed by Georg Brandl.)" +msgstr "" + +#: ../../whatsnew/2.5.rst:1354 +msgid "" +"In the :mod:`gc` module, the new :func:`get_count` function returns a " +"3-tuple containing the current collection counts for the three GC " +"generations. This is accounting information for the garbage collector; when" +" these counts reach a specified threshold, a garbage collection sweep will " +"be made. The existing :func:`gc.collect` function now takes an optional " +"*generation* argument of 0, 1, or 2 to specify which generation to collect. " +"(Contributed by Barry Warsaw.)" +msgstr "" + +#: ../../whatsnew/2.5.rst:1361 +msgid "" +"The :func:`nsmallest` and :func:`nlargest` functions in the :mod:`heapq` " +"module now support a ``key`` keyword parameter similar to the one provided " +"by the :func:`min`/:func:`max` functions and the :meth:`sort` methods. For " +"example::" +msgstr "" + +#: ../../whatsnew/2.5.rst:1373 ../../whatsnew/2.5.rst:1382 +msgid "(Contributed by Raymond Hettinger.)" +msgstr "(由 Raymond Hettinger 贡献。)" + +#: ../../whatsnew/2.5.rst:1375 +msgid "" +"The :func:`itertools.islice` function now accepts ``None`` for the start and" +" step arguments. This makes it more compatible with the attributes of slice" +" objects, so that you can now write the following::" +msgstr "" + +#: ../../whatsnew/2.5.rst:1384 +msgid "" +"The :func:`format` function in the :mod:`locale` module has been modified " +"and two new functions were added, :func:`format_string` and " +":func:`currency`." +msgstr "" + +#: ../../whatsnew/2.5.rst:1387 +msgid "" +"The :func:`format` function's *val* parameter could previously be a string " +"as long as no more than one %char specifier appeared; now the parameter must" +" be exactly one %char specifier with no surrounding text. An optional " +"*monetary* parameter was also added which, if ``True``, will use the " +"locale's rules for formatting currency in placing a separator between groups" +" of three digits." +msgstr "" + +#: ../../whatsnew/2.5.rst:1393 +msgid "" +"To format strings with multiple %char specifiers, use the new " +":func:`format_string` function that works like :func:`format` but also " +"supports mixing %char specifiers with arbitrary text." +msgstr "" + +#: ../../whatsnew/2.5.rst:1397 +msgid "" +"A new :func:`currency` function was also added that formats a number " +"according to the current locale's settings." +msgstr "" + +#: ../../whatsnew/2.5.rst:1400 +msgid "(Contributed by Georg Brandl.)" +msgstr "(由Georg Brandl 贡献。)" + +#: ../../whatsnew/2.5.rst:1404 +msgid "" +"The :mod:`mailbox` module underwent a massive rewrite to add the capability " +"to modify mailboxes in addition to reading them. A new set of classes that " +"include :class:`mbox`, :class:`MH`, and :class:`Maildir` are used to read " +"mailboxes, and have an ``add(message)`` method to add messages, " +"``remove(key)`` to remove messages, and :meth:`lock`/:meth:`unlock` to " +"lock/unlock the mailbox. The following example converts a maildir-format " +"mailbox into an mbox-format one::" +msgstr "" + +#: ../../whatsnew/2.5.rst:1422 +msgid "" +"(Contributed by Gregory K. Johnson. Funding was provided by Google's 2005 " +"Summer of Code.)" +msgstr "" + +#: ../../whatsnew/2.5.rst:1425 +msgid "" +"New module: the :mod:`msilib` module allows creating Microsoft Installer " +":file:`.msi` files and CAB files. Some support for reading the :file:`.msi`" +" database is also included. (Contributed by Martin von Löwis.)" +msgstr "" + +#: ../../whatsnew/2.5.rst:1429 +msgid "" +"The :mod:`nis` module now supports accessing domains other than the system " +"default domain by supplying a *domain* argument to the :func:`nis.match` and" +" :func:`nis.maps` functions. (Contributed by Ben Bell.)" +msgstr "" + +#: ../../whatsnew/2.5.rst:1433 +msgid "" +"The :mod:`operator` module's :func:`itemgetter` and :func:`attrgetter` " +"functions now support multiple fields. A call such as " +"``operator.attrgetter('a', 'b')`` will return a function that retrieves the" +" :attr:`a` and :attr:`b` attributes. Combining this new feature with the " +":meth:`sort` method's ``key`` parameter lets you easily sort lists using " +"multiple fields. (Contributed by Raymond Hettinger.)" +msgstr "" + +#: ../../whatsnew/2.5.rst:1440 +msgid "" +"The :mod:`optparse` module was updated to version 1.5.1 of the Optik " +"library. The :class:`OptionParser` class gained an :attr:`epilog` attribute," +" a string that will be printed after the help message, and a :meth:`destroy`" +" method to break reference cycles created by the object. (Contributed by " +"Greg Ward.)" +msgstr "" + +#: ../../whatsnew/2.5.rst:1445 +msgid "" +"The :mod:`os` module underwent several changes. The " +":attr:`stat_float_times` variable now defaults to true, meaning that " +":func:`os.stat` will now return time values as floats. (This doesn't " +"necessarily mean that :func:`os.stat` will return times that are precise to " +"fractions of a second; not all systems support such precision.)" +msgstr "" + +#: ../../whatsnew/2.5.rst:1451 +msgid "" +"Constants named :attr:`os.SEEK_SET`, :attr:`os.SEEK_CUR`, and " +":attr:`os.SEEK_END` have been added; these are the parameters to the " +":func:`os.lseek` function. Two new constants for locking are " +":attr:`os.O_SHLOCK` and :attr:`os.O_EXLOCK`." +msgstr "" + +#: ../../whatsnew/2.5.rst:1456 +msgid "" +"Two new functions, :func:`wait3` and :func:`wait4`, were added. They're " +"similar the :func:`waitpid` function which waits for a child process to exit" +" and returns a tuple of the process ID and its exit status, but " +":func:`wait3` and :func:`wait4` return additional information. " +":func:`wait3` doesn't take a process ID as input, so it waits for any child " +"process to exit and returns a 3-tuple of *process-id*, *exit-status*, " +"*resource-usage* as returned from the :func:`resource.getrusage` function. " +"``wait4(pid)`` does take a process ID. (Contributed by Chad J. Schroeder.)" +msgstr "" + +#: ../../whatsnew/2.5.rst:1465 +msgid "" +"On FreeBSD, the :func:`os.stat` function now returns times with nanosecond " +"resolution, and the returned object now has :attr:`st_gen` and " +":attr:`st_birthtime`. The :attr:`st_flags` attribute is also available, if " +"the platform supports it. (Contributed by Antti Louko and Diego Pettenò.)" +msgstr "" + +#: ../../whatsnew/2.5.rst:1472 +msgid "" +"The Python debugger provided by the :mod:`pdb` module can now store lists of" +" commands to execute when a breakpoint is reached and execution stops. Once" +" breakpoint #1 has been created, enter ``commands 1`` and enter a series of " +"commands to be executed, finishing the list with ``end``. The command list " +"can include commands that resume execution, such as ``continue`` or " +"``next``. (Contributed by Grégoire Dooms.)" +msgstr "" + +#: ../../whatsnew/2.5.rst:1481 +msgid "" +"The :mod:`pickle` and :mod:`cPickle` modules no longer accept a return value" +" of ``None`` from the :meth:`__reduce__` method; the method must return a " +"tuple of arguments instead. The ability to return ``None`` was deprecated " +"in Python 2.4, so this completes the removal of the feature." +msgstr "" + +#: ../../whatsnew/2.5.rst:1486 +msgid "" +"The :mod:`pkgutil` module, containing various utility functions for finding " +"packages, was enhanced to support :pep:`302`'s import hooks and now also " +"works for packages stored in ZIP-format archives. (Contributed by Phillip J." +" Eby.)" +msgstr "" + +#: ../../whatsnew/2.5.rst:1490 +msgid "" +"The pybench benchmark suite by Marc-André Lemburg is now included in the " +":file:`Tools/pybench` directory. The pybench suite is an improvement on the" +" commonly used :file:`pystone.py` program because pybench provides a more " +"detailed measurement of the interpreter's speed. It times particular " +"operations such as function calls, tuple slicing, method lookups, and " +"numeric operations, instead of performing many different operations and " +"reducing the result to a single number as :file:`pystone.py` does." +msgstr "" + +#: ../../whatsnew/2.5.rst:1498 +msgid "" +"The :mod:`pyexpat` module now uses version 2.0 of the Expat parser. " +"(Contributed by Trent Mick.)" +msgstr ":mod:`pyexpat` 模块现在使用 Expat 解析器的 2.0 版。 (由 Trent Mick 贡献。)" + +#: ../../whatsnew/2.5.rst:1501 +msgid "" +"The :class:`~queue.Queue` class provided by the :mod:`Queue` module gained " +"two new methods. :meth:`join` blocks until all items in the queue have been" +" retrieved and all processing work on the items have been completed. " +"Worker threads call the other new method, :meth:`task_done`, to signal that" +" processing for an item has been completed. (Contributed by Raymond " +"Hettinger.)" +msgstr "" + +#: ../../whatsnew/2.5.rst:1507 +msgid "" +"The old :mod:`regex` and :mod:`regsub` modules, which have been deprecated " +"ever since Python 2.0, have finally been deleted. Other deleted modules: " +":mod:`statcache`, :mod:`tzparse`, :mod:`whrandom`." +msgstr "" + +#: ../../whatsnew/2.5.rst:1511 +msgid "" +"Also deleted: the :file:`lib-old` directory, which includes ancient modules " +"such as :mod:`dircmp` and :mod:`ni`, was removed. :file:`lib-old` wasn't on" +" the default ``sys.path``, so unless your programs explicitly added the " +"directory to ``sys.path``, this removal shouldn't affect your code." +msgstr "" + +#: ../../whatsnew/2.5.rst:1516 +msgid "" +"The :mod:`rlcompleter` module is no longer dependent on importing the " +":mod:`readline` module and therefore now works on non-Unix platforms. (Patch" +" from Robert Kiendl.)" +msgstr "" + +#: ../../whatsnew/2.5.rst:1522 +msgid "" +"The :mod:`SimpleXMLRPCServer` and :mod:`DocXMLRPCServer` classes now have a" +" :attr:`rpc_paths` attribute that constrains XML-RPC operations to a limited" +" set of URL paths; the default is to allow only ``'/'`` and ``'/RPC2'``. " +"Setting :attr:`rpc_paths` to ``None`` or an empty tuple disables this path " +"checking." +msgstr "" + +#: ../../whatsnew/2.5.rst:1529 +msgid "" +"The :mod:`socket` module now supports :const:`AF_NETLINK` sockets on Linux, " +"thanks to a patch from Philippe Biondi. Netlink sockets are a Linux-" +"specific mechanism for communications between a user-space process and " +"kernel code; an introductory article about them is at " +"https://www.linuxjournal.com/article/7356. In Python code, netlink addresses" +" are represented as a tuple of 2 integers, ``(pid, group_mask)``." +msgstr "" + +#: ../../whatsnew/2.5.rst:1536 +msgid "" +"Two new methods on socket objects, ``recv_into(buffer)`` and " +"``recvfrom_into(buffer)``, store the received data in an object that " +"supports the buffer protocol instead of returning the data as a string. " +"This means you can put the data directly into an array or a memory-mapped " +"file." +msgstr "" + +#: ../../whatsnew/2.5.rst:1541 +msgid "" +"Socket objects also gained :meth:`getfamily`, :meth:`gettype`, and " +":meth:`getproto` accessor methods to retrieve the family, type, and protocol" +" values for the socket." +msgstr "" + +#: ../../whatsnew/2.5.rst:1545 +msgid "" +"New module: the :mod:`spwd` module provides functions for accessing the " +"shadow password database on systems that support shadow passwords." +msgstr "" + +#: ../../whatsnew/2.5.rst:1548 +msgid "" +"The :mod:`struct` is now faster because it compiles format strings into " +":class:`Struct` objects with :meth:`pack` and :meth:`unpack` methods. This " +"is similar to how the :mod:`re` module lets you create compiled regular " +"expression objects. You can still use the module-level :func:`pack` and " +":func:`unpack` functions; they'll create :class:`Struct` objects and cache " +"them. Or you can use :class:`Struct` instances directly::" +msgstr "" + +#: ../../whatsnew/2.5.rst:1560 +msgid "" +"You can also pack and unpack data to and from buffer objects directly using " +"the ``pack_into(buffer, offset, v1, v2, ...)`` and ``unpack_from(buffer, " +"offset)`` methods. This lets you store data directly into an array or a " +"memory-mapped file." +msgstr "" + +#: ../../whatsnew/2.5.rst:1565 +msgid "" +"(:class:`Struct` objects were implemented by Bob Ippolito at the " +"NeedForSpeed sprint. Support for buffer objects was added by Martin Blais, " +"also at the NeedForSpeed sprint.)" +msgstr "" + +#: ../../whatsnew/2.5.rst:1569 +msgid "" +"The Python developers switched from CVS to Subversion during the 2.5 " +"development process. Information about the exact build version is available" +" as the ``sys.subversion`` variable, a 3-tuple of ``(interpreter-name, " +"branch-name, revision-range)``. For example, at the time of writing my copy" +" of 2.5 was reporting ``('CPython', 'trunk', '45313:45315')``." +msgstr "" + +#: ../../whatsnew/2.5.rst:1575 +msgid "" +"This information is also available to C extensions via the " +":c:func:`Py_GetBuildInfo` function that returns a string of build " +"information like this: ``\"trunk:45355:45356M, Apr 13 2006, 07:42:19\"``. " +"(Contributed by Barry Warsaw.)" +msgstr "" + +#: ../../whatsnew/2.5.rst:1580 +msgid "" +"Another new function, :func:`sys._current_frames`, returns the current stack" +" frames for all running threads as a dictionary mapping thread identifiers " +"to the topmost stack frame currently active in that thread at the time the " +"function is called. (Contributed by Tim Peters.)" +msgstr "" + +#: ../../whatsnew/2.5.rst:1585 +msgid "" +"The :class:`TarFile` class in the :mod:`tarfile` module now has an " +":meth:`extractall` method that extracts all members from the archive into " +"the current working directory. It's also possible to set a different " +"directory as the extraction target, and to unpack only a subset of the " +"archive's members." +msgstr "" + +#: ../../whatsnew/2.5.rst:1590 +msgid "" +"The compression used for a tarfile opened in stream mode can now be " +"autodetected using the mode ``'r|*'``. (Contributed by Lars Gustäbel.)" +msgstr "" + +#: ../../whatsnew/2.5.rst:1595 +msgid "" +"The :mod:`threading` module now lets you set the stack size used when new " +"threads are created. The ``stack_size([*size*])`` function returns the " +"currently configured stack size, and supplying the optional *size* parameter" +" sets a new value. Not all platforms support changing the stack size, but " +"Windows, POSIX threading, and OS/2 all do. (Contributed by Andrew " +"MacIntyre.)" +msgstr "" + +#: ../../whatsnew/2.5.rst:1603 +msgid "" +"The :mod:`unicodedata` module has been updated to use version 4.1.0 of the " +"Unicode character database. Version 3.2.0 is required by some " +"specifications, so it's still available as :attr:`unicodedata.ucd_3_2_0`." +msgstr "" + +#: ../../whatsnew/2.5.rst:1607 +msgid "" +"New module: the :mod:`uuid` module generates universally unique " +"identifiers (UUIDs) according to :rfc:`4122`. The RFC defines several " +"different UUID versions that are generated from a starting string, from " +"system properties, or purely randomly. This module contains a :class:`UUID`" +" class and functions named :func:`uuid1`, :func:`uuid3`, :func:`uuid4`, " +"and :func:`uuid5` to generate different versions of UUID. (Version 2 UUIDs" +" are not specified in :rfc:`4122` and are not supported by this module.) ::" +msgstr "" + +#: ../../whatsnew/2.5.rst:1632 +msgid "(Contributed by Ka-Ping Yee.)" +msgstr "(由 Ka-Ping Yee 贡献。)" + +#: ../../whatsnew/2.5.rst:1634 +msgid "" +"The :mod:`weakref` module's :class:`WeakKeyDictionary` and " +":class:`WeakValueDictionary` types gained new methods for iterating over the" +" weak references contained in the dictionary. :meth:`iterkeyrefs` and " +":meth:`keyrefs` methods were added to :class:`WeakKeyDictionary`, and " +":meth:`itervaluerefs` and :meth:`valuerefs` were added to " +":class:`WeakValueDictionary`. (Contributed by Fred L. Drake, Jr.)" +msgstr "" + +#: ../../whatsnew/2.5.rst:1641 +msgid "" +"The :mod:`webbrowser` module received a number of enhancements. It's now " +"usable as a script with ``python -m webbrowser``, taking a URL as the " +"argument; there are a number of switches to control the behaviour " +"(:option:`!-n` for a new browser window, :option:`!-t` for a new tab). New" +" module-level functions, :func:`open_new` and :func:`open_new_tab`, were " +"added to support this. The module's :func:`open` function supports an " +"additional feature, an *autoraise* parameter that signals whether to raise " +"the open window when possible. A number of additional browsers were added to" +" the supported list such as Firefox, Opera, Konqueror, and elinks. " +"(Contributed by Oleg Broytmann and Georg Brandl.)" +msgstr "" + +#: ../../whatsnew/2.5.rst:1653 +msgid "" +"The :mod:`xmlrpclib` module now supports returning " +":class:`~datetime.datetime` objects for the XML-RPC date type. Supply " +"``use_datetime=True`` to the :func:`loads` function or the " +":class:`Unmarshaller` class to enable this feature. (Contributed by Skip " +"Montanaro.)" +msgstr "" + +#: ../../whatsnew/2.5.rst:1660 +msgid "" +"The :mod:`zipfile` module now supports the ZIP64 version of the format, " +"meaning that a .zip archive can now be larger than 4 GiB and can contain " +"individual files larger than 4 GiB. (Contributed by Ronald Oussoren.)" +msgstr "" + +#: ../../whatsnew/2.5.rst:1666 +msgid "" +"The :mod:`zlib` module's :class:`Compress` and :class:`Decompress` objects " +"now support a :meth:`copy` method that makes a copy of the object's " +"internal state and returns a new :class:`Compress` or :class:`Decompress` " +"object. (Contributed by Chris AtLee.)" +msgstr "" + +#: ../../whatsnew/2.5.rst:1679 +msgid "The ctypes package" +msgstr "ctypes 包" + +#: ../../whatsnew/2.5.rst:1681 +msgid "" +"The :mod:`ctypes` package, written by Thomas Heller, has been added to the " +"standard library. :mod:`ctypes` lets you call arbitrary functions in " +"shared libraries or DLLs. Long-time users may remember the :mod:`dl` " +"module, which provides functions for loading shared libraries and calling " +"functions in them. The :mod:`ctypes` package is much fancier." +msgstr "" + +#: ../../whatsnew/2.5.rst:1687 +msgid "" +"To load a shared library or DLL, you must create an instance of the " +":class:`CDLL` class and provide the name or path of the shared library or " +"DLL. Once that's done, you can call arbitrary functions by accessing them as" +" attributes of the :class:`CDLL` object. ::" +msgstr "" + +#: ../../whatsnew/2.5.rst:1697 +msgid "" +"Type constructors for the various C types are provided: :func:`c_int`, " +":func:`c_float`, :func:`c_double`, :func:`c_char_p` (equivalent to " +":c:type:`char \\*`), and so forth. Unlike Python's types, the C versions " +"are all mutable; you can assign to their :attr:`value` attribute to change " +"the wrapped value. Python integers and strings will be automatically " +"converted to the corresponding C types, but for other types you must call " +"the correct type constructor. (And I mean *must*; getting it wrong will " +"often result in the interpreter crashing with a segmentation fault.)" +msgstr "" + +#: ../../whatsnew/2.5.rst:1706 +msgid "" +"You shouldn't use :func:`c_char_p` with a Python string when the C function " +"will be modifying the memory area, because Python strings are supposed to " +"be immutable; breaking this rule will cause puzzling bugs. When you need a " +"modifiable memory area, use :func:`create_string_buffer`::" +msgstr "" + +#: ../../whatsnew/2.5.rst:1715 +msgid "" +"C functions are assumed to return integers, but you can set the " +":attr:`restype` attribute of the function object to change this::" +msgstr "" + +#: ../../whatsnew/2.5.rst:1724 +msgid "" +":mod:`ctypes` also provides a wrapper for Python's C API as the " +"``ctypes.pythonapi`` object. This object does *not* release the global " +"interpreter lock before calling a function, because the lock must be held " +"when calling into the interpreter's code. There's a :class:`py_object()` " +"type constructor that will create a :c:type:`PyObject \\*` pointer. A " +"simple usage::" +msgstr "" + +#: ../../whatsnew/2.5.rst:1737 +msgid "" +"Don't forget to use :class:`py_object()`; if it's omitted you end up with a" +" segmentation fault." +msgstr "" + +#: ../../whatsnew/2.5.rst:1740 +msgid "" +":mod:`ctypes` has been around for a while, but people still write and " +"distribution hand-coded extension modules because you can't rely on " +":mod:`ctypes` being present. Perhaps developers will begin to write Python " +"wrappers atop a library accessed through :mod:`ctypes` instead of extension " +"modules, now that :mod:`ctypes` is included with core Python." +msgstr "" + +#: ../../whatsnew/2.5.rst:1750 +msgid "http://starship.python.net/crew/theller/ctypes/" +msgstr "http://starship.python.net/crew/theller/ctypes/" + +#: ../../whatsnew/2.5.rst:1750 +msgid "The ctypes web page, with a tutorial, reference, and FAQ." +msgstr "ctypes的主页,含教程, 参考和常见问题解答。" + +#: ../../whatsnew/2.5.rst:1752 +msgid "The documentation for the :mod:`ctypes` module." +msgstr ":mod:`ctypes` 模块的文档。" + +#: ../../whatsnew/2.5.rst:1760 +msgid "The ElementTree package" +msgstr "ElementTree 包" + +#: ../../whatsnew/2.5.rst:1762 +msgid "" +"A subset of Fredrik Lundh's ElementTree library for processing XML has been " +"added to the standard library as :mod:`xml.etree`. The available modules " +"are :mod:`ElementTree`, :mod:`ElementPath`, and :mod:`ElementInclude` from " +"ElementTree 1.2.6. The :mod:`cElementTree` accelerator module is also " +"included." +msgstr "" + +#: ../../whatsnew/2.5.rst:1768 +msgid "" +"The rest of this section will provide a brief overview of using ElementTree." +" Full documentation for ElementTree is available at " +"https://web.archive.org/web/20201124024954/http://effbot.org/zone/element-" +"index.htm." +msgstr "" +"本节的剩余部分将提供使用 ElementTree 的简要说明。 要获取 ElementTree 的完整文档可访问 " +"https://web.archive.org/web/20201124024954/http://effbot.org/zone/element-" +"index.htm。" + +#: ../../whatsnew/2.5.rst:1772 +msgid "" +"ElementTree represents an XML document as a tree of element nodes. The text " +"content of the document is stored as the :attr:`text` and :attr:`tail` " +"attributes of (This is one of the major differences between ElementTree and" +" the Document Object Model; in the DOM there are many different types of " +"node, including :class:`TextNode`.)" +msgstr "" + +#: ../../whatsnew/2.5.rst:1778 +msgid "" +"The most commonly used parsing function is :func:`parse`, that takes either " +"a string (assumed to contain a filename) or a file-like object and returns " +"an :class:`ElementTree` instance::" +msgstr "" + +#: ../../whatsnew/2.5.rst:1790 +msgid "" +"Once you have an :class:`ElementTree` instance, you can call its " +":meth:`getroot` method to get the root :class:`Element` node." +msgstr "" + +#: ../../whatsnew/2.5.rst:1793 +msgid "" +"There's also an :func:`XML` function that takes a string literal and returns" +" an :class:`Element` node (not an :class:`ElementTree`). This function " +"provides a tidy way to incorporate XML fragments, approaching the " +"convenience of an XML literal::" +msgstr "" + +#: ../../whatsnew/2.5.rst:1803 +msgid "" +"Each XML element supports some dictionary-like and some list-like access " +"methods. Dictionary-like operations are used to access attribute values, " +"and list-like operations are used to access child nodes." +msgstr "" + +#: ../../whatsnew/2.5.rst:1808 +msgid "Operation" +msgstr "运算" + +#: ../../whatsnew/2.5.rst:1808 +msgid "Result" +msgstr "结果:" + +#: ../../whatsnew/2.5.rst:1810 +msgid "``elem[n]``" +msgstr "``elem[n]``" + +#: ../../whatsnew/2.5.rst:1810 +msgid "Returns n'th child element." +msgstr "返回第n个子元素" + +#: ../../whatsnew/2.5.rst:1812 +msgid "``elem[m:n]``" +msgstr "``elem[m:n]``" + +#: ../../whatsnew/2.5.rst:1812 +msgid "Returns list of m'th through n'th child elements." +msgstr "返回第m至第n个子元素的列表。" + +#: ../../whatsnew/2.5.rst:1815 +msgid "``len(elem)``" +msgstr "``len(elem)``" + +#: ../../whatsnew/2.5.rst:1815 +msgid "Returns number of child elements." +msgstr "返回子元素的个数" + +#: ../../whatsnew/2.5.rst:1817 +msgid "``list(elem)``" +msgstr "``list(elem)``" + +#: ../../whatsnew/2.5.rst:1817 +msgid "Returns list of child elements." +msgstr "返回子元素的列表" + +#: ../../whatsnew/2.5.rst:1819 +msgid "``elem.append(elem2)``" +msgstr "``elem.append(elem2)``" + +#: ../../whatsnew/2.5.rst:1819 +msgid "Adds *elem2* as a child." +msgstr "将 *elem2* 添加为子级。" + +#: ../../whatsnew/2.5.rst:1821 +msgid "``elem.insert(index, elem2)``" +msgstr "``elem.insert(index, elem2)``" + +#: ../../whatsnew/2.5.rst:1821 +msgid "Inserts *elem2* at the specified location." +msgstr "在指定位置插入 *elem2* 。" + +#: ../../whatsnew/2.5.rst:1823 +msgid "``del elem[n]``" +msgstr "``del elem[n]``" + +#: ../../whatsnew/2.5.rst:1823 +msgid "Deletes n'th child element." +msgstr "删除第n个子元素" + +#: ../../whatsnew/2.5.rst:1825 +msgid "``elem.keys()``" +msgstr "``elem.keys()``" + +#: ../../whatsnew/2.5.rst:1825 +msgid "Returns list of attribute names." +msgstr "返回属性名称的列表。" + +#: ../../whatsnew/2.5.rst:1827 +msgid "``elem.get(name)``" +msgstr "``elem.get(name)``" + +#: ../../whatsnew/2.5.rst:1827 +msgid "Returns value of attribute *name*." +msgstr "返回 *name* 属性的值。" + +#: ../../whatsnew/2.5.rst:1829 +msgid "``elem.set(name, value)``" +msgstr "``elem.set(name, value)``" + +#: ../../whatsnew/2.5.rst:1829 +msgid "Sets new value for attribute *name*." +msgstr "为 *name* 属性设置新值" + +#: ../../whatsnew/2.5.rst:1831 +msgid "``elem.attrib``" +msgstr "``elem.attrib``" + +#: ../../whatsnew/2.5.rst:1831 +msgid "Retrieves the dictionary containing attributes." +msgstr "检索包含属性的字典。" + +#: ../../whatsnew/2.5.rst:1834 +msgid "``del elem.attrib[name]``" +msgstr "``del elem.attrib[name]``" + +#: ../../whatsnew/2.5.rst:1834 +msgid "Deletes attribute *name*." +msgstr "删除 元素 *name* 的属性" + +#: ../../whatsnew/2.5.rst:1837 +msgid "" +"Comments and processing instructions are also represented as " +":class:`Element` nodes. To check if a node is a comment or processing " +"instructions::" +msgstr "" + +#: ../../whatsnew/2.5.rst:1845 +msgid "" +"To generate XML output, you should call the :meth:`ElementTree.write` " +"method. Like :func:`parse`, it can take either a string or a file-like " +"object::" +msgstr "" + +#: ../../whatsnew/2.5.rst:1855 +msgid "" +"(Caution: the default encoding used for output is ASCII. For general XML " +"work, where an element's name may contain arbitrary Unicode characters, " +"ASCII isn't a very useful encoding because it will raise an exception if an " +"element's name contains any characters with values greater than 127. " +"Therefore, it's best to specify a different encoding such as UTF-8 that can " +"handle any Unicode character.)" +msgstr "" + +#: ../../whatsnew/2.5.rst:1862 +msgid "" +"This section is only a partial description of the ElementTree interfaces. " +"Please read the package's official documentation for more details." +msgstr "" + +#: ../../whatsnew/2.5.rst:1868 +msgid "" +"https://web.archive.org/web/20201124024954/http://effbot.org/zone/element-" +"index.htm" +msgstr "" +"https://web.archive.org/web/20201124024954/http://effbot.org/zone/element-" +"index.htm" + +#: ../../whatsnew/2.5.rst:1869 +msgid "Official documentation for ElementTree." +msgstr "ElementTree 的官方文档" + +#: ../../whatsnew/2.5.rst:1877 +msgid "The hashlib package" +msgstr "hashlib 包" + +#: ../../whatsnew/2.5.rst:1879 +msgid "" +"A new :mod:`hashlib` module, written by Gregory P. Smith, has been added to" +" replace the :mod:`md5` and :mod:`sha` modules. :mod:`hashlib` adds support" +" for additional secure hashes (SHA-224, SHA-256, SHA-384, and SHA-512). When" +" available, the module uses OpenSSL for fast platform optimized " +"implementations of algorithms." +msgstr "" + +#: ../../whatsnew/2.5.rst:1885 +msgid "" +"The old :mod:`md5` and :mod:`sha` modules still exist as wrappers around " +"hashlib to preserve backwards compatibility. The new module's interface is " +"very close to that of the old modules, but not identical. The most " +"significant difference is that the constructor functions for creating new " +"hashing objects are named differently. ::" +msgstr "" + +#: ../../whatsnew/2.5.rst:1914 +msgid "" +"Once a hash object has been created, its methods are the same as before: " +"``update(string)`` hashes the specified string into the current digest " +"state, :meth:`digest` and :meth:`hexdigest` return the digest value as a " +"binary string or a string of hex digits, and :meth:`copy` returns a new " +"hashing object with the same digest state." +msgstr "" + +#: ../../whatsnew/2.5.rst:1923 +msgid "The documentation for the :mod:`hashlib` module." +msgstr ":mod:`hashlib` 模块的文档。" + +#: ../../whatsnew/2.5.rst:1931 +msgid "The sqlite3 package" +msgstr "sqlite3 包" + +#: ../../whatsnew/2.5.rst:1933 +msgid "" +"The pysqlite module (http://www.pysqlite.org), a wrapper for the SQLite " +"embedded database, has been added to the standard library under the package " +"name :mod:`sqlite3`." +msgstr "" +"pysqlite 模块 (http://www.pysqlite.org),一个针对 SQLite 嵌入式数据库的包装器,已使用包名 " +":mod:`sqlite3` 被添加到标准库中。" + +#: ../../whatsnew/2.5.rst:1937 +msgid "" +"SQLite is a C library that provides a lightweight disk-based database that " +"doesn't require a separate server process and allows accessing the database " +"using a nonstandard variant of the SQL query language. Some applications can" +" use SQLite for internal data storage. It's also possible to prototype an " +"application using SQLite and then port the code to a larger database such as" +" PostgreSQL or Oracle." +msgstr "" +"SQLite 是一个C语言库,它可以提供一种轻量级的基于磁盘的数据库,这种数据库不需要独立的服务器进程,也允许需要使用一种非标准的 SQL " +"查询语言来访问它。一些应用程序可以使用 SQLite 作为内部数据存储。可以用它来创建一个应用程序原型,然后再迁移到更大的数据库,比如 " +"PostgreSQL 或 Oracle。" + +#: ../../whatsnew/2.5.rst:1944 +msgid "" +"pysqlite was written by Gerhard Häring and provides a SQL interface " +"compliant with the DB-API 2.0 specification described by :pep:`249`." +msgstr "" + +#: ../../whatsnew/2.5.rst:1947 +msgid "" +"If you're compiling the Python source yourself, note that the source tree " +"doesn't include the SQLite code, only the wrapper module. You'll need to " +"have the SQLite libraries and headers installed before compiling Python, and" +" the build process will compile the module when the necessary headers are " +"available." +msgstr "" +"如果您自己编译 Python 源代码,请注意源代码树不包含 SQLite 代码,只包含封装模块。在编译 Python 之前,您需要安装 SQLite " +"库和头文件,当必要的头文件可用时,编译过程将编译模块。" + +#: ../../whatsnew/2.5.rst:1952 +msgid "" +"To use the module, you must first create a :class:`Connection` object that " +"represents the database. Here the data will be stored in the " +":file:`/tmp/example` file::" +msgstr "" + +#: ../../whatsnew/2.5.rst:1958 +msgid "" +"You can also supply the special name ``:memory:`` to create a database in " +"RAM." +msgstr "你也可以使用 ``:memory:`` 来创建一个内存中的数据库" + +#: ../../whatsnew/2.5.rst:1960 +msgid "" +"Once you have a :class:`Connection`, you can create a :class:`Cursor` " +"object and call its :meth:`execute` method to perform SQL commands::" +msgstr "" + +#: ../../whatsnew/2.5.rst:1974 +msgid "" +"Usually your SQL operations will need to use values from Python variables. " +"You shouldn't assemble your query using Python's string operations because " +"doing so is insecure; it makes your program vulnerable to an SQL injection " +"attack." +msgstr "" +"通常,您的 SQL 操作需要使用来自 Python 变量的值。 您不应该使用 Python " +"的字符串操作来组装您的查询,因为这样做是不安全的,它会使您的程序容易受到 SQL 注入攻击。" + +#: ../../whatsnew/2.5.rst:1978 +msgid "" +"Instead, use the DB-API's parameter substitution. Put ``?`` as a " +"placeholder wherever you want to use a value, and then provide a tuple of " +"values as the second argument to the cursor's :meth:`execute` method. " +"(Other database modules may use a different placeholder, such as ``%s`` or " +"``:1``.) For example::" +msgstr "" + +#: ../../whatsnew/2.5.rst:1998 +msgid "" +"To retrieve data after executing a SELECT statement, you can either treat " +"the cursor as an iterator, call the cursor's :meth:`fetchone` method to " +"retrieve a single matching row, or call :meth:`fetchall` to get a list of " +"the matching rows." +msgstr "" + +#: ../../whatsnew/2.5.rst:2003 +msgid "This example uses the iterator form::" +msgstr "下面是一个使用迭代器形式的例子:" + +#: ../../whatsnew/2.5.rst:2016 +msgid "" +"For more information about the SQL dialect supported by SQLite, see " +"https://www.sqlite.org." +msgstr "有关 SQLite 所支持的 SQL 方法的更多信息,请参阅 https://www.sqlite.org。" + +#: ../../whatsnew/2.5.rst:2023 +msgid "http://www.pysqlite.org" +msgstr "http://www.pysqlite.org" + +#: ../../whatsnew/2.5.rst:2023 +msgid "The pysqlite web page." +msgstr "pysqlite 的主页" + +#: ../../whatsnew/2.5.rst:2027 +msgid "https://www.sqlite.org" +msgstr "https://www.sqlite.org" + +#: ../../whatsnew/2.5.rst:2026 +msgid "" +"The SQLite web page; the documentation describes the syntax and the " +"available data types for the supported SQL dialect." +msgstr "SQLite的主页;它的文档详细描述了它所支持的 SQL 方言的语法和可用的数据类型。" + +#: ../../whatsnew/2.5.rst:2029 +msgid "The documentation for the :mod:`sqlite3` module." +msgstr ":mod:`sqlite3` 模块的文档。" + +#: ../../whatsnew/2.5.rst:2031 +msgid ":pep:`249` - Database API Specification 2.0" +msgstr ":pep:`249` - DB-API 2.0 规范" + +#: ../../whatsnew/2.5.rst:2032 +msgid "PEP written by Marc-André Lemburg." +msgstr "PEP 由 Marc-André Lemburg 撰写。" + +#: ../../whatsnew/2.5.rst:2040 +msgid "The wsgiref package" +msgstr "wsgiref 包" + +#: ../../whatsnew/2.5.rst:2042 +msgid "" +"The Web Server Gateway Interface (WSGI) v1.0 defines a standard interface " +"between web servers and Python web applications and is described in " +":pep:`333`. The :mod:`wsgiref` package is a reference implementation of the " +"WSGI specification." +msgstr "" + +#: ../../whatsnew/2.5.rst:2049 +msgid "" +"The package includes a basic HTTP server that will run a WSGI application; " +"this server is useful for debugging but isn't intended for production use." +" Setting up a server takes only a few lines of code::" +msgstr "该软件包包含一个基本 HTTP 服务器,可运行 WSGI 应用程序;该服务器可用于调试,但不打算用于生产环境。设置服务器只需几行代码:" + +#: ../../whatsnew/2.5.rst:2069 +msgid "http://www.wsgi.org" +msgstr "http://www.wsgi.org" + +#: ../../whatsnew/2.5.rst:2069 +msgid "A central web site for WSGI-related resources." +msgstr "WSGI相关资源的核心网站。" + +#: ../../whatsnew/2.5.rst:2071 +msgid ":pep:`333` - Python Web Server Gateway Interface v1.0" +msgstr ":pep:`333` - Python Web服务器网关接口 v1.0" + +#: ../../whatsnew/2.5.rst:2072 +msgid "PEP written by Phillip J. Eby." +msgstr "PEP 由 Phillip J. Eby 撰写" + +#: ../../whatsnew/2.5.rst:2080 +msgid "Build and C API Changes" +msgstr "构建和 C API 的改变" + +#: ../../whatsnew/2.5.rst:2082 +msgid "Changes to Python's build process and to the C API include:" +msgstr "针对 Python 构建过程和 C API 的改变包括:" + +#: ../../whatsnew/2.5.rst:2084 +msgid "" +"The Python source tree was converted from CVS to Subversion, in a complex " +"migration procedure that was supervised and flawlessly carried out by Martin" +" von Löwis. The procedure was developed as :pep:`347`." +msgstr "" + +#: ../../whatsnew/2.5.rst:2088 +msgid "" +"Coverity, a company that markets a source code analysis tool called Prevent," +" provided the results of their examination of the Python source code. The " +"analysis found about 60 bugs that were quickly fixed. Many of the bugs " +"were refcounting problems, often occurring in error-handling code. See " +"https://scan.coverity.com for the statistics." +msgstr "" + +#: ../../whatsnew/2.5.rst:2094 +msgid "" +"The largest change to the C API came from :pep:`353`, which modifies the " +"interpreter to use a :c:type:`Py_ssize_t` type definition instead of " +":c:type:`int`. See the earlier section :ref:`pep-353` for a discussion of " +"this change." +msgstr "" + +#: ../../whatsnew/2.5.rst:2099 +msgid "" +"The design of the bytecode compiler has changed a great deal, no longer " +"generating bytecode by traversing the parse tree. Instead the parse tree is" +" converted to an abstract syntax tree (or AST), and it is the abstract " +"syntax tree that's traversed to produce the bytecode." +msgstr "" + +#: ../../whatsnew/2.5.rst:2104 +msgid "" +"It's possible for Python code to obtain AST objects by using the " +":func:`compile` built-in and specifying ``_ast.PyCF_ONLY_AST`` as the value " +"of the *flags* parameter::" +msgstr "" + +#: ../../whatsnew/2.5.rst:2117 +msgid "" +"No official documentation has been written for the AST code yet, but " +":pep:`339` discusses the design. To start learning about the code, read the" +" definition of the various AST nodes in :file:`Parser/Python.asdl`. A " +"Python script reads this file and generates a set of C structure definitions" +" in :file:`Include/Python-ast.h`. The :c:func:`PyParser_ASTFromString` and " +":c:func:`PyParser_ASTFromFile`, defined in :file:`Include/pythonrun.h`, take" +" Python source as input and return the root of an AST representing the " +"contents. This AST can then be turned into a code object by " +":c:func:`PyAST_Compile`. For more information, read the source code, and " +"then ask questions on python-dev." +msgstr "" + +#: ../../whatsnew/2.5.rst:2127 +msgid "" +"The AST code was developed under Jeremy Hylton's management, and implemented" +" by (in alphabetical order) Brett Cannon, Nick Coghlan, Grant Edwards, John " +"Ehresman, Kurt Kaiser, Neal Norwitz, Tim Peters, Armin Rigo, and Neil " +"Schemenauer, plus the participants in a number of AST sprints at conferences" +" such as PyCon." +msgstr "" + +#: ../../whatsnew/2.5.rst:2136 +msgid "" +"Evan Jones's patch to obmalloc, first described in a talk at PyCon DC 2005, " +"was applied. Python 2.4 allocated small objects in 256K-sized arenas, but " +"never freed arenas. With this patch, Python will free arenas when they're " +"empty. The net effect is that on some platforms, when you allocate many " +"objects, Python's memory usage may actually drop when you delete them and " +"the memory may be returned to the operating system. (Implemented by Evan " +"Jones, and reworked by Tim Peters.)" +msgstr "" + +#: ../../whatsnew/2.5.rst:2144 +msgid "" +"Note that this change means extension modules must be more careful when " +"allocating memory. Python's API has many different functions for allocating" +" memory that are grouped into families. For example, " +":c:func:`PyMem_Malloc`, :c:func:`PyMem_Realloc`, and :c:func:`PyMem_Free` " +"are one family that allocates raw memory, while :c:func:`PyObject_Malloc`, " +":c:func:`PyObject_Realloc`, and :c:func:`PyObject_Free` are another family " +"that's supposed to be used for creating Python objects." +msgstr "" + +#: ../../whatsnew/2.5.rst:2152 +msgid "" +"Previously these different families all reduced to the platform's " +":c:func:`malloc` and :c:func:`free` functions. This meant it didn't matter" +" if you got things wrong and allocated memory with the :c:func:`PyMem` " +"function but freed it with the :c:func:`PyObject` function. With 2.5's " +"changes to obmalloc, these families now do different things and mismatches " +"will probably result in a segfault. You should carefully test your C " +"extension modules with Python 2.5." +msgstr "" + +#: ../../whatsnew/2.5.rst:2159 +msgid "" +"The built-in set types now have an official C API. Call :c:func:`PySet_New`" +" and :c:func:`PyFrozenSet_New` to create a new set, :c:func:`PySet_Add` and " +":c:func:`PySet_Discard` to add and remove elements, and " +":c:func:`PySet_Contains` and :c:func:`PySet_Size` to examine the set's " +"state. (Contributed by Raymond Hettinger.)" +msgstr "" + +#: ../../whatsnew/2.5.rst:2165 +msgid "" +"C code can now obtain information about the exact revision of the Python " +"interpreter by calling the :c:func:`Py_GetBuildInfo` function that returns " +"a string of build information like this: ``\"trunk:45355:45356M, Apr 13 " +"2006, 07:42:19\"``. (Contributed by Barry Warsaw.)" +msgstr "" + +#: ../../whatsnew/2.5.rst:2170 +msgid "" +"Two new macros can be used to indicate C functions that are local to the " +"current file so that a faster calling convention can be used. " +"``Py_LOCAL(type)`` declares the function as returning a value of the " +"specified *type* and uses a fast-calling qualifier. " +"``Py_LOCAL_INLINE(type)`` does the same thing and also requests the function" +" be inlined. If :c:func:`PY_LOCAL_AGGRESSIVE` is defined before " +":file:`python.h` is included, a set of more aggressive optimizations are " +"enabled for the module; you should benchmark the results to find out if " +"these optimizations actually make the code faster. (Contributed by Fredrik " +"Lundh at the NeedForSpeed sprint.)" +msgstr "" + +#: ../../whatsnew/2.5.rst:2181 +msgid "" +"``PyErr_NewException(name, base, dict)`` can now accept a tuple of base " +"classes as its *base* argument. (Contributed by Georg Brandl.)" +msgstr "" + +#: ../../whatsnew/2.5.rst:2184 +msgid "" +"The :c:func:`PyErr_Warn` function for issuing warnings is now deprecated in " +"favour of ``PyErr_WarnEx(category, message, stacklevel)`` which lets you " +"specify the number of stack frames separating this function and the caller." +" A *stacklevel* of 1 is the function calling :c:func:`PyErr_WarnEx`, 2 is " +"the function above that, and so forth. (Added by Neal Norwitz.)" +msgstr "" + +#: ../../whatsnew/2.5.rst:2190 +msgid "" +"The CPython interpreter is still written in C, but the code can now be " +"compiled with a C++ compiler without errors. (Implemented by Anthony " +"Baxter, Martin von Löwis, Skip Montanaro.)" +msgstr "" + +#: ../../whatsnew/2.5.rst:2194 +msgid "" +"The :c:func:`PyRange_New` function was removed. It was never documented, " +"never used in the core code, and had dangerously lax error checking. In the" +" unlikely case that your extensions were using it, you can replace it by " +"something like the following::" +msgstr "" + +#: ../../whatsnew/2.5.rst:2208 +msgid "Port-Specific Changes" +msgstr "移植专属的改变" + +#: ../../whatsnew/2.5.rst:2210 +msgid "" +"MacOS X (10.3 and higher): dynamic loading of modules now uses the " +":c:func:`dlopen` function instead of MacOS-specific functions." +msgstr "" +"MacOS X (10.3 及更高版本): 模块的动态加载现在会使用 :c:func:`dlopen` 函数而不是 MacOS 专属的函数。" + +#: ../../whatsnew/2.5.rst:2213 +msgid "" +"MacOS X: an :option:`!--enable-universalsdk` switch was added to the " +":program:`configure` script that compiles the interpreter as a universal " +"binary able to run on both PowerPC and Intel processors. (Contributed by " +"Ronald Oussoren; :issue:`2573`.)" +msgstr "" + +#: ../../whatsnew/2.5.rst:2218 +msgid "" +"Windows: :file:`.dll` is no longer supported as a filename extension for " +"extension modules. :file:`.pyd` is now the only filename extension that " +"will be searched for." +msgstr "" + +#: ../../whatsnew/2.5.rst:2228 +msgid "Porting to Python 2.5" +msgstr "移植到Python 2.5" + +#: ../../whatsnew/2.5.rst:2230 +msgid "" +"This section lists previously described changes that may require changes to " +"your code:" +msgstr "本节列出了先前描述的可能需要修改你的代码的改变:" + +#: ../../whatsnew/2.5.rst:2233 +msgid "" +"ASCII is now the default encoding for modules. It's now a syntax error if " +"a module contains string literals with 8-bit characters but doesn't have an " +"encoding declaration. In Python 2.4 this triggered a warning, not a syntax " +"error." +msgstr "" + +#: ../../whatsnew/2.5.rst:2238 +msgid "" +"Previously, the :attr:`gi_frame` attribute of a generator was always a frame" +" object. Because of the :pep:`342` changes described in section " +":ref:`pep-342`, it's now possible for :attr:`gi_frame` to be ``None``." +msgstr "" + +#: ../../whatsnew/2.5.rst:2242 +msgid "" +"A new warning, :class:`UnicodeWarning`, is triggered when you attempt to " +"compare a Unicode string and an 8-bit string that can't be converted to " +"Unicode using the default ASCII encoding. Previously such comparisons would" +" raise a :class:`UnicodeDecodeError` exception." +msgstr "" + +#: ../../whatsnew/2.5.rst:2247 +msgid "" +"Library: the :mod:`csv` module is now stricter about multi-line quoted " +"fields. If your files contain newlines embedded within fields, the input " +"should be split into lines in a manner which preserves the newline " +"characters." +msgstr "" + +#: ../../whatsnew/2.5.rst:2251 +msgid "" +"Library: the :mod:`locale` module's :func:`format` function's would " +"previously accept any string as long as no more than one %char specifier " +"appeared. In Python 2.5, the argument must be exactly one %char specifier " +"with no surrounding text." +msgstr "" + +#: ../../whatsnew/2.5.rst:2256 +msgid "" +"Library: The :mod:`pickle` and :mod:`cPickle` modules no longer accept a " +"return value of ``None`` from the :meth:`__reduce__` method; the method must" +" return a tuple of arguments instead. The modules also no longer accept the" +" deprecated *bin* keyword parameter." +msgstr "" + +#: ../../whatsnew/2.5.rst:2261 +msgid "" +"Library: The :mod:`SimpleXMLRPCServer` and :mod:`DocXMLRPCServer` classes " +"now have a :attr:`rpc_paths` attribute that constrains XML-RPC operations to" +" a limited set of URL paths; the default is to allow only ``'/'`` and " +"``'/RPC2'``. Setting :attr:`rpc_paths` to ``None`` or an empty tuple " +"disables this path checking." +msgstr "" + +#: ../../whatsnew/2.5.rst:2267 +msgid "" +"C API: Many functions now use :c:type:`Py_ssize_t` instead of :c:type:`int`" +" to allow processing more data on 64-bit machines. Extension code may need " +"to make the same change to avoid warnings and to support 64-bit machines. " +"See the earlier section :ref:`pep-353` for a discussion of this change." +msgstr "" + +#: ../../whatsnew/2.5.rst:2272 +msgid "" +"C API: The obmalloc changes mean that you must be careful to not mix usage" +" of the :c:func:`PyMem_\\*` and :c:func:`PyObject_\\*` families of " +"functions. Memory allocated with one family's :c:func:`\\*_Malloc` must be" +" freed with the corresponding family's :c:func:`\\*_Free` function." +msgstr "" + +#: ../../whatsnew/2.5.rst:2281 +msgid "Acknowledgements" +msgstr "致谢" + +#: ../../whatsnew/2.5.rst:2283 +msgid "" +"The author would like to thank the following people for offering " +"suggestions, corrections and assistance with various drafts of this article:" +" Georg Brandl, Nick Coghlan, Phillip J. Eby, Lars Gustäbel, Raymond " +"Hettinger, Ralf W. Grosse-Kunstleve, Kent Johnson, Iain Lowe, Martin von " +"Löwis, Fredrik Lundh, Andrew McNamara, Skip Montanaro, Gustavo Niemeyer, " +"Paul Prescod, James Pryor, Mike Rovner, Scott Weikart, Barry Warsaw, Thomas " +"Wouters." +msgstr "" +"作者感谢以下人员对本文各种草稿给予的建议,更正和协助: Georg Brandl, Nick Coghlan, Phillip J. Eby, Lars" +" Gustäbel, Raymond Hettinger, Ralf W. Grosse-Kunstleve, Kent Johnson, Iain " +"Lowe, Martin von Löwis, Fredrik Lundh, Andrew McNamara, Skip Montanaro, " +"Gustavo Niemeyer, Paul Prescod, James Pryor, Mike Rovner, Scott Weikart, " +"Barry Warsaw, Thomas Wouters." diff --git a/whatsnew/2.6.po b/whatsnew/2.6.po new file mode 100644 index 000000000..7f094c19d --- /dev/null +++ b/whatsnew/2.6.po @@ -0,0 +1,3805 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) 2001-2024, Python Software Foundation +# This file is distributed under the same license as the Python package. +# FIRST AUTHOR , YEAR. +# +# Translators: +# QR Wang , 2018 +# Shengjing Zhu , 2018 +# Fei Yin , 2018 +# ChenYuan , 2019 +# ppcfish , 2020 +# Alpha Du , 2023 +# Rafael Fontenelle , 2024 +# Freesand Leo , 2024 +# +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: Python 3.9\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2024-09-20 16:52+0000\n" +"PO-Revision-Date: 2017-02-16 23:43+0000\n" +"Last-Translator: Freesand Leo , 2024\n" +"Language-Team: Chinese (China) (https://app.transifex.com/python-doc/teams/5390/zh_CN/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: zh_CN\n" +"Plural-Forms: nplurals=1; plural=0;\n" + +#: ../../whatsnew/2.6.rst:5 +msgid "What's New in Python 2.6" +msgstr "Python 2.6 有什么新变化" + +#: ../../whatsnew/2.6.rst:0 +msgid "Author" +msgstr "作者" + +#: ../../whatsnew/2.6.rst:9 +msgid "A.M. Kuchling (amk at amk.ca)" +msgstr "A.M. Kuchling (amk at amk.ca)" + +#: ../../whatsnew/2.6.rst:52 +msgid "" +"This article explains the new features in Python 2.6, released on October 1 " +"2008. The release schedule is described in :pep:`361`." +msgstr "本文介绍了 Python 2.6 的新特性,它发布于 2008 年 10 月 1 日。 发布日程说明见 :pep:`361`。" + +#: ../../whatsnew/2.6.rst:55 +msgid "" +"The major theme of Python 2.6 is preparing the migration path to Python 3.0," +" a major redesign of the language. Whenever possible, Python 2.6 " +"incorporates new features and syntax from 3.0 while remaining compatible " +"with existing code by not removing older features or syntax. When it's not " +"possible to do that, Python 2.6 tries to do what it can, adding " +"compatibility functions in a :mod:`future_builtins` module and a " +":option:`!-3` switch to warn about usages that will become unsupported in " +"3.0." +msgstr "" +"Python 2.6 的主题是为迁移到 Python 3.0 做准备,这是 Python 语言的一次重大重新设计。 只要有可能,Python 2.6 " +"就会纳入 3.0 的新特性和语法,同时通过不删除旧特性或语法来保持与现有代码的兼容。 当无法做到这一点时,Python 2.6 会尽力而为,在 " +":mod:`future_builtins` 模块中添加兼容性函数,并通过 :option:`!-3` 开关来警告将在 3.0 中变得不支持的用法。" + +#: ../../whatsnew/2.6.rst:64 +msgid "" +"Some significant new packages have been added to the standard library, such " +"as the :mod:`multiprocessing` and :mod:`json` modules, but there aren't many" +" new features that aren't related to Python 3.0 in some way." +msgstr "" +"标准库中增加了一些重要的新包,如 :mod:`multiprocessing` 和 :mod:`json` 模块等,但与 Python 3.0 " +"完全无关联的新特性并不多。" + +#: ../../whatsnew/2.6.rst:69 +msgid "" +"Python 2.6 also sees a number of improvements and bugfixes throughout the " +"source. A search through the change logs finds there were 259 patches " +"applied and 612 bugs fixed between Python 2.5 and 2.6. Both figures are " +"likely to be underestimates." +msgstr "" +"Python 2.6 还对整个源代码进行了大量改进和错误修复。 通过搜索更改日志我们发现在 Python 2.5 和 2.6 之间应用了 259 " +"个补丁并修复了 612 个错误。 这两个数字可能都被低估了。" + +#: ../../whatsnew/2.6.rst:74 +msgid "" +"This article doesn't attempt to provide a complete specification of the new " +"features, but instead provides a convenient overview. For full details, you" +" should refer to the documentation for Python 2.6. If you want to understand" +" the rationale for the design and implementation, refer to the PEP for a " +"particular new feature. Whenever possible, \"What's New in Python\" links to" +" the bug/patch item for each change." +msgstr "" +"本文并不试图提供新特性的完整规范说明,而是提供一个方便的概览。 要了解完整的细节,请参阅 Python 2.6 的文档。 " +"如果你想了解有关设计和实现的具体考量,请参阅特定新特性 的 PEP。 在可能的情况下,“Python " +"有什么新变化”为每个更改的错误修正/补丁项提供链接。" + +#: ../../whatsnew/2.6.rst:90 +msgid "Python 3.0" +msgstr "Python 3.0" + +#: ../../whatsnew/2.6.rst:92 +msgid "" +"The development cycle for Python versions 2.6 and 3.0 was synchronized, with" +" the alpha and beta releases for both versions being made on the same days." +" The development of 3.0 has influenced many features in 2.6." +msgstr "" +"Python版本2.6和3.0的开发周期是同步的,两个版本的alpha和beta版本是在同一天发布的。3.0的发展影响了2.6中的许多功能。" + +#: ../../whatsnew/2.6.rst:97 +msgid "" +"Python 3.0 is a far-ranging redesign of Python that breaks compatibility " +"with the 2.x series. This means that existing Python code will need some " +"conversion in order to run on Python 3.0. However, not all the changes in " +"3.0 necessarily break compatibility. In cases where new features won't " +"cause existing code to break, they've been backported to 2.6 and are " +"described in this document in the appropriate place. Some of the " +"3.0-derived features are:" +msgstr "" +"Python 3.0 是对 Python 的大范围重新设计,打破了与 2.x 系列的兼容性。 这意味着现有的 Python 代码需要进行一些转换才能在" +" Python 3.0 上运行。 不过,并非 3.0 中的所有更改都会破坏兼容性。 在新特性不会导致现有代码崩溃的情况下,它们会被回溯到 " +"2.6,并在本文档的适当位置进行描述。 部分 3.0 衍生功能包括:" + +#: ../../whatsnew/2.6.rst:106 +msgid "" +"A :meth:`__complex__` method for converting objects to a complex number." +msgstr "用于将对象转换为复数的 :meth:`__complex__` 方法。" + +#: ../../whatsnew/2.6.rst:107 +msgid "Alternate syntax for catching exceptions: ``except TypeError as exc``." +msgstr "用于捕获异常的替代语法: ``except TypeError as exc``。" + +#: ../../whatsnew/2.6.rst:108 +msgid "" +"The addition of :func:`functools.reduce` as a synonym for the built-in " +":func:`reduce` function." +msgstr "增加 :func:`functools.reduce` 作为内置 :func:`reduce` 函数的同义词。" + +#: ../../whatsnew/2.6.rst:111 +msgid "" +"Python 3.0 adds several new built-in functions and changes the semantics of " +"some existing builtins. Functions that are new in 3.0 such as :func:`bin` " +"have simply been added to Python 2.6, but existing builtins haven't been " +"changed; instead, the :mod:`future_builtins` module has versions with the " +"new 3.0 semantics. Code written to be compatible with 3.0 can do ``from " +"future_builtins import hex, map`` as necessary." +msgstr "" +"Python 3.0 新增了一些内置函数并对部分现有内置函数的语法进行了修改。 在 3.0 中新增的函数如 :func:`bin` 已直接添加到 " +"Python 2.6 中,但现有内置函数则未修改;替代做法是在 :mod:`future_builtins` 模块中包含具有 3.0 新语法的版本。 " +"要与 3.0 兼容的代码可以在必要时执行 ``from future_builtins import hex, map``。" + +#: ../../whatsnew/2.6.rst:119 +msgid "" +"A new command-line switch, :option:`!-3`, enables warnings about features " +"that will be removed in Python 3.0. You can run code with this switch to " +"see how much work will be necessary to port code to 3.0. The value of this " +"switch is available to Python code as the boolean variable " +":data:`sys.py3kwarning`, and to C extension code as " +":c:data:`Py_Py3kWarningFlag`." +msgstr "" +"一个新的命令行开关 :option:`!-3` 可以对 Python 3.0 将移除的特性发出警告。 您可以使用该开关运行代码,以了解将代码移植到 " +"3.0 所需的工作量。 Python 代码可以使用 :data:`sys.py3kwarning` 访问该开关的值,C 扩展代码可以使用 " +":c:data:`Py_Py3kWarningFlag` 访问该开关的值。" + +#: ../../whatsnew/2.6.rst:128 +msgid "" +"The 3xxx series of PEPs, which contains proposals for Python 3.0. " +":pep:`3000` describes the development process for Python 3.0. Start with " +":pep:`3100` that describes the general goals for Python 3.0, and then " +"explore the higher-numbered PEPS that propose specific features." +msgstr "" + +#: ../../whatsnew/2.6.rst:136 +msgid "Changes to the Development Process" +msgstr "开发过程的变化" + +#: ../../whatsnew/2.6.rst:138 +msgid "" +"While 2.6 was being developed, the Python development process underwent two " +"significant changes: we switched from SourceForge's issue tracker to a " +"customized Roundup installation, and the documentation was converted from " +"LaTeX to reStructuredText." +msgstr "" +"在开发2.6时,Python开发过程经历了两个重大变化:我们从SourceForge的问题跟踪程序切换到定制的Roundup安装,文档从LaTeX转换为reStructuredText。" + +#: ../../whatsnew/2.6.rst:145 +msgid "New Issue Tracker: Roundup" +msgstr "新问题追踪:简述" + +#: ../../whatsnew/2.6.rst:147 +msgid "" +"For a long time, the Python developers had been growing increasingly annoyed" +" by SourceForge's bug tracker. SourceForge's hosted solution doesn't permit" +" much customization; for example, it wasn't possible to customize the life " +"cycle of issues." +msgstr "" +"很长一段时间以来,Python开发人员对SourceForge的bug跟踪器越来越恼火。SourceForge的托管解决方案不允许进行大量定制;例如,无法定制问题的生命周期。" + +#: ../../whatsnew/2.6.rst:152 +msgid "" +"The infrastructure committee of the Python Software Foundation therefore " +"posted a call for issue trackers, asking volunteers to set up different " +"products and import some of the bugs and patches from SourceForge. Four " +"different trackers were examined: `Jira " +"`__, `Launchpad " +"`__, `Roundup `__, " +"and `Trac `__. The committee eventually settled " +"on Jira and Roundup as the two candidates. Jira is a commercial product " +"that offers no-cost hosted instances to free-software projects; Roundup is " +"an open-source project that requires volunteers to administer it and a " +"server to host it." +msgstr "" + +#: ../../whatsnew/2.6.rst:166 +msgid "" +"After posting a call for volunteers, a new Roundup installation was set up " +"at https://bugs.python.org. One installation of Roundup can host multiple " +"trackers, and this server now also hosts issue trackers for Jython and for " +"the Python web site. It will surely find other uses in the future. Where " +"possible, this edition of \"What's New in Python\" links to the bug/patch " +"item for each change." +msgstr "" +"在发出志愿者号召后,在https://bugs.python.org的一个Roundup的安装可以托管多个跟踪器,现在该服务器还托管Jython和Python网站的问题跟踪器。它肯定会在未来找到其他用途。在可能的情况下,此版本的“What's" +" New in Python”链接到每个更改的bug/补丁项。" + +#: ../../whatsnew/2.6.rst:174 +msgid "" +"Hosting of the Python bug tracker is kindly provided by `Upfront Systems " +"`__ of Stellenbosch, South Africa. Martin" +" von Löwis put a lot of effort into importing existing bugs and patches from" +" SourceForge; his scripts for this import operation are at " +"http://svn.python.org/view/tracker/importer/ and may be useful to other " +"projects wishing to move from SourceForge to Roundup." +msgstr "" + +#: ../../whatsnew/2.6.rst:185 +msgid "https://bugs.python.org" +msgstr "https://bugs.python.org" + +#: ../../whatsnew/2.6.rst:185 +msgid "The Python bug tracker." +msgstr "Python 的错误追踪器" + +#: ../../whatsnew/2.6.rst:188 +msgid "http://bugs.jython.org:" +msgstr "http://bugs.jython.org:" + +#: ../../whatsnew/2.6.rst:188 +msgid "The Jython bug tracker." +msgstr "Jython 的错误追踪器" + +#: ../../whatsnew/2.6.rst:191 +msgid "http://roundup.sourceforge.net/" +msgstr "http://roundup.sourceforge.net/" + +#: ../../whatsnew/2.6.rst:191 +msgid "Roundup downloads and documentation." +msgstr "Roundup 下载和文档。" + +#: ../../whatsnew/2.6.rst:193 +msgid "http://svn.python.org/view/tracker/importer/" +msgstr "http://svn.python.org/view/tracker/importer/" + +#: ../../whatsnew/2.6.rst:194 +msgid "Martin von Löwis's conversion scripts." +msgstr "Martin von Löwis 的转换脚本。" + +#: ../../whatsnew/2.6.rst:197 +msgid "New Documentation Format: reStructuredText Using Sphinx" +msgstr "新的文档格式:使用 Sphinx 的 reStructuredText" + +#: ../../whatsnew/2.6.rst:199 +msgid "" +"The Python documentation was written using LaTeX since the project started " +"around 1989. In the 1980s and early 1990s, most documentation was printed " +"out for later study, not viewed online. LaTeX was widely used because it " +"provided attractive printed output while remaining straightforward to write " +"once the basic rules of the markup were learned." +msgstr "" +"自 1989 年左右项目启动以来,Python 文档一直使用 LaTeX 编写。在 1980 年代和 1990 " +"年代早期,大多数文档都是打印出来供日后学习的,而不是在网上查看。 LaTeX " +"被广泛使用,因为它既能提供美观的打印输出,又能在掌握了标记的基本规则后直接进行编写。" + +#: ../../whatsnew/2.6.rst:206 +msgid "" +"Today LaTeX is still used for writing publications destined for printing, " +"but the landscape for programming tools has shifted. We no longer print out" +" reams of documentation; instead, we browse through it online and HTML has " +"become the most important format to support. Unfortunately, converting LaTeX" +" to HTML is fairly complicated and Fred L. Drake Jr., the long-time Python " +"documentation editor, spent a lot of time maintaining the conversion " +"process. Occasionally people would suggest converting the documentation " +"into SGML and later XML, but performing a good conversion is a major task " +"and no one ever committed the time required to finish the job." +msgstr "" +"如今 LaTeX 仍被用于编写印刷出版物,但编程工具的格局已经发生了变化。 我们不再打印成堆的文档,取而代之的是在线浏览,HTML " +"已成为最重要的支持格式。 不幸的是,将 LaTeX 转换为 HTML 相当复杂,长期担任 Python 文档编辑的 Fred L. Drake Jr. " +"花了许多时间在维护转换过程上。 偶尔有人会建议将文档转换成 SGML,之后再转换成 " +"XML,但进行良好的转换是一项艰巨的任务,从来没有人投入所需的时间来完成这项工作。" + +#: ../../whatsnew/2.6.rst:217 +msgid "" +"During the 2.6 development cycle, Georg Brandl put a lot of effort into " +"building a new toolchain for processing the documentation. The resulting " +"package is called Sphinx, and is available from http://sphinx-doc.org/." +msgstr "" + +#: ../../whatsnew/2.6.rst:222 +msgid "" +"Sphinx concentrates on HTML output, producing attractively styled and modern" +" HTML; printed output is still supported through conversion to LaTeX. The " +"input format is reStructuredText, a markup syntax supporting custom " +"extensions and directives that is commonly used in the Python community." +msgstr "" +"Sphinx 专注于 HTML 输出,可生成吸引人风格的现代 HTML;通过转换为 LaTeX,仍可支持打印输出。输入格式是 " +"reStructuredText,这是一种支持自定义扩展和指令的标记语法,在 Python 社区很常用。" + +#: ../../whatsnew/2.6.rst:228 +msgid "" +"Sphinx is a standalone package that can be used for writing, and almost two " +"dozen other projects (`listed on the Sphinx web site `__) have adopted Sphinx as their " +"documentation tool." +msgstr "" +"Sphinx 是一个可用于写文档的独立软件包,将近二十多个其他项目 (`列在 Sphinx 网站 `__ 上) 已采用 Sphinx 作为其文档工具。" + +#: ../../whatsnew/2.6.rst:236 +msgid "`Documenting Python `__" +msgstr "`Documenting Python `__" + +#: ../../whatsnew/2.6.rst:236 +msgid "Describes how to write for Python's documentation." +msgstr "描述如何编写Python文档。" + +#: ../../whatsnew/2.6.rst:239 +msgid "`Sphinx `__" +msgstr "`Sphinx `__" + +#: ../../whatsnew/2.6.rst:239 +msgid "Documentation and code for the Sphinx toolchain." +msgstr "Sphinx工具链的文档和代码。" + +#: ../../whatsnew/2.6.rst:241 +msgid "`Docutils `__" +msgstr "`Docutils `__" + +#: ../../whatsnew/2.6.rst:242 +msgid "The underlying reStructuredText parser and toolset." +msgstr "reStructuredText 的基础解析器和工具集。" + +#: ../../whatsnew/2.6.rst:248 +msgid "PEP 343: The 'with' statement" +msgstr "PEP 343: \"with\" 语句" + +#: ../../whatsnew/2.6.rst:250 +msgid "" +"The previous version, Python 2.5, added the ':keyword:`with`' statement as " +"an optional feature, to be enabled by a ``from __future__ import " +"with_statement`` directive. In 2.6 the statement no longer needs to be " +"specially enabled; this means that :keyword:`!with` is now always a keyword." +" The rest of this section is a copy of the corresponding section from the " +"\"What's New in Python 2.5\" document; if you're familiar with the " +"':keyword:`!with`' statement from Python 2.5, you can skip this section." +msgstr "" +"在 Python 2.5 之前的版本中,\":keyword:`with`\" 语句是一个可选功能,可以通过 ``from __future__ " +"import with_statement`` 指令启用。 在 2.6 中,该语句不再需要特别启用;这意味着 :keyword:`!with` " +"现在总是一个关键字。 本节的其余部分是“Python 2.5 新特性”文档中相应部分的复制;如果您熟悉 Python 2.5 中的 " +"':keyword:`!with`' 语句,可以跳过本节。" + +#: ../../whatsnew/2.6.rst:259 +msgid "" +"The ':keyword:`with`' statement clarifies code that previously would use " +"``try...finally`` blocks to ensure that clean-up code is executed. In this " +"section, I'll discuss the statement as it will commonly be used. In the " +"next section, I'll examine the implementation details and show how to write " +"objects for use with this statement." +msgstr "" + +#: ../../whatsnew/2.6.rst:265 +msgid "" +"The ':keyword:`with`' statement is a control-flow structure whose basic " +"structure is::" +msgstr "The ':keyword:`with`' 语是一种基本结构如下所示的流程控制结构::" + +#: ../../whatsnew/2.6.rst:271 +msgid "" +"The expression is evaluated, and it should result in an object that supports" +" the context management protocol (that is, has :meth:`__enter__` and " +":meth:`__exit__` methods)." +msgstr "" + +#: ../../whatsnew/2.6.rst:275 +msgid "" +"The object's :meth:`__enter__` is called before *with-block* is executed and" +" therefore can run set-up code. It also may return a value that is bound to " +"the name *variable*, if given. (Note carefully that *variable* is *not* " +"assigned the result of *expression*.)" +msgstr "" + +#: ../../whatsnew/2.6.rst:280 +msgid "" +"After execution of the *with-block* is finished, the object's " +":meth:`__exit__` method is called, even if the block raised an exception, " +"and can therefore run clean-up code." +msgstr "" + +#: ../../whatsnew/2.6.rst:284 +msgid "" +"Some standard Python objects now support the context management protocol and" +" can be used with the ':keyword:`with`' statement. File objects are one " +"example::" +msgstr "一些标准 Python 对象现在已支持上下文管理协议并可被用于 ':keyword:`with`' 语句。 文件对象就是一个例子::" + +#: ../../whatsnew/2.6.rst:292 +msgid "" +"After this statement has executed, the file object in *f* will have been " +"automatically closed, even if the :keyword:`for` loop raised an exception " +"part-way through the block." +msgstr "在此语句被执行之后,文件对象 *f* 将被自动关闭,即使是当 :keyword:`for` 循环在代码块中间引发了异常的时候也是如此。" + +#: ../../whatsnew/2.6.rst:298 +msgid "" +"In this case, *f* is the same object created by :func:`open`, because " +":meth:`file.__enter__` returns *self*." +msgstr "" + +#: ../../whatsnew/2.6.rst:301 +msgid "" +"The :mod:`threading` module's locks and condition variables also support " +"the ':keyword:`with`' statement::" +msgstr ":mod:`threading` 模块的加锁和条件变量也支持 ':keyword:`with`' 语句::" + +#: ../../whatsnew/2.6.rst:309 +msgid "" +"The lock is acquired before the block is executed and always released once " +"the block is complete." +msgstr "这个锁会在代码块被执行之前锁定并总是会在代码块完成之后释放。" + +#: ../../whatsnew/2.6.rst:312 +msgid "" +"The :func:`localcontext` function in the :mod:`decimal` module makes it easy" +" to save and restore the current decimal context, which encapsulates the " +"desired precision and rounding characteristics for computations::" +msgstr "" + +#: ../../whatsnew/2.6.rst:331 +msgid "Writing Context Managers" +msgstr "编写上下文管理器" + +#: ../../whatsnew/2.6.rst:333 +msgid "" +"Under the hood, the ':keyword:`with`' statement is fairly complicated. Most " +"people will only use ':keyword:`!with`' in company with existing objects and" +" don't need to know these details, so you can skip the rest of this section " +"if you like. Authors of new objects will need to understand the details of " +"the underlying implementation and should keep reading." +msgstr "" + +#: ../../whatsnew/2.6.rst:339 +msgid "A high-level explanation of the context management protocol is:" +msgstr "在更高层级上对于上下文管理器协议的解释:" + +#: ../../whatsnew/2.6.rst:341 +msgid "" +"The expression is evaluated and should result in an object called a " +"\"context manager\". The context manager must have :meth:`__enter__` and " +":meth:`__exit__` methods." +msgstr "" + +#: ../../whatsnew/2.6.rst:345 +msgid "" +"The context manager's :meth:`__enter__` method is called. The value " +"returned is assigned to *VAR*. If no ``as VAR`` clause is present, the " +"value is simply discarded." +msgstr "" + +#: ../../whatsnew/2.6.rst:349 +msgid "The code in *BLOCK* is executed." +msgstr "*BLOCK* 中的代码会被执行。" + +#: ../../whatsnew/2.6.rst:351 +msgid "" +"If *BLOCK* raises an exception, the context manager's :meth:`__exit__` " +"method is called with three arguments, the exception details (``type, value," +" traceback``, the same values returned by :func:`sys.exc_info`, which can " +"also be ``None`` if no exception occurred). The method's return value " +"controls whether an exception is re-raised: any false value re-raises the " +"exception, and ``True`` will result in suppressing it. You'll only rarely " +"want to suppress the exception, because if you do the author of the code " +"containing the ':keyword:`with`' statement will never realize anything went " +"wrong." +msgstr "" + +#: ../../whatsnew/2.6.rst:360 +msgid "" +"If *BLOCK* didn't raise an exception, the :meth:`__exit__` method is still " +"called, but *type*, *value*, and *traceback* are all ``None``." +msgstr "" + +#: ../../whatsnew/2.6.rst:363 +msgid "" +"Let's think through an example. I won't present detailed code but will only" +" sketch the methods necessary for a database that supports transactions." +msgstr "" + +#: ../../whatsnew/2.6.rst:366 +msgid "" +"(For people unfamiliar with database terminology: a set of changes to the " +"database are grouped into a transaction. Transactions can be either " +"committed, meaning that all the changes are written into the database, or " +"rolled back, meaning that the changes are all discarded and the database is " +"unchanged. See any database textbook for more information.)" +msgstr "" + +#: ../../whatsnew/2.6.rst:372 +msgid "" +"Let's assume there's an object representing a database connection. Our goal " +"will be to let the user write code like this::" +msgstr "" + +#: ../../whatsnew/2.6.rst:381 +msgid "" +"The transaction should be committed if the code in the block runs flawlessly" +" or rolled back if there's an exception. Here's the basic interface for " +":class:`DatabaseConnection` that I'll assume::" +msgstr "" + +#: ../../whatsnew/2.6.rst:394 +msgid "" +"The :meth:`__enter__` method is pretty easy, having only to start a new " +"transaction. For this application the resulting cursor object would be a " +"useful result, so the method will return it. The user can then add ``as " +"cursor`` to their ':keyword:`with`' statement to bind the cursor to a " +"variable name. ::" +msgstr "" + +#: ../../whatsnew/2.6.rst:406 +msgid "" +"The :meth:`__exit__` method is the most complicated because it's where most " +"of the work has to be done. The method has to check if an exception " +"occurred. If there was no exception, the transaction is committed. The " +"transaction is rolled back if there was an exception." +msgstr "" + +#: ../../whatsnew/2.6.rst:411 +msgid "" +"In the code below, execution will just fall off the end of the function, " +"returning the default value of ``None``. ``None`` is false, so the " +"exception will be re-raised automatically. If you wished, you could be more" +" explicit and add a :keyword:`return` statement at the marked location. ::" +msgstr "" + +#: ../../whatsnew/2.6.rst:431 +msgid "The contextlib module" +msgstr "contextlib 模块" + +#: ../../whatsnew/2.6.rst:433 +msgid "" +"The :mod:`contextlib` module provides some functions and a decorator that " +"are useful when writing objects for use with the ':keyword:`with`' " +"statement." +msgstr "" + +#: ../../whatsnew/2.6.rst:436 +msgid "" +"The decorator is called :func:`contextmanager`, and lets you write a single " +"generator function instead of defining a new class. The generator should " +"yield exactly one value. The code up to the :keyword:`yield` will be " +"executed as the :meth:`__enter__` method, and the value yielded will be the " +"method's return value that will get bound to the variable in the " +"':keyword:`with`' statement's :keyword:`!as` clause, if any. The code after" +" the :keyword:`!yield` will be executed in the :meth:`__exit__` method. Any" +" exception raised in the block will be raised by the :keyword:`!yield` " +"statement." +msgstr "" + +#: ../../whatsnew/2.6.rst:445 +msgid "" +"Using this decorator, our database example from the previous section could " +"be written as::" +msgstr "" + +#: ../../whatsnew/2.6.rst:465 +msgid "" +"The :mod:`contextlib` module also has a ``nested(mgr1, mgr2, ...)`` function" +" that combines a number of context managers so you don't need to write " +"nested ':keyword:`with`' statements. In this example, the single " +"':keyword:`!with`' statement both starts a database transaction and acquires" +" a thread lock::" +msgstr "" + +#: ../../whatsnew/2.6.rst:474 +msgid "" +"Finally, the :func:`closing` function returns its argument so that it can be" +" bound to a variable, and calls the argument's ``.close()`` method at the " +"end of the block. ::" +msgstr "" + +#: ../../whatsnew/2.6.rst:492 +msgid ":pep:`343` - The \"with\" statement" +msgstr ":pep:`343` - \"with\" 语句" + +#: ../../whatsnew/2.6.rst:489 +msgid "" +"PEP written by Guido van Rossum and Nick Coghlan; implemented by Mike Bland," +" Guido van Rossum, and Neal Norwitz. The PEP shows the code generated for a" +" ':keyword:`with`' statement, which can be helpful in learning how the " +"statement works." +msgstr "" + +#: ../../whatsnew/2.6.rst:494 +msgid "The documentation for the :mod:`contextlib` module." +msgstr ":mod:`contextlib` 模块的文档。" + +#: ../../whatsnew/2.6.rst:501 +msgid "PEP 366: Explicit Relative Imports From a Main Module" +msgstr "PEP 366: 从主模块显式相对导入" + +#: ../../whatsnew/2.6.rst:503 +msgid "" +"Python's :option:`-m` switch allows running a module as a script. When you " +"ran a module that was located inside a package, relative imports didn't work" +" correctly." +msgstr "Python 的 :option:`-m` 开关允许将一个模块作为脚本来运行。 当你运行一个位于某个包内的模块时,相对导入将无法正确运作。" + +#: ../../whatsnew/2.6.rst:507 +msgid "" +"The fix for Python 2.6 adds a :attr:`__package__` attribute to modules. " +"When this attribute is present, relative imports will be relative to the " +"value of this attribute instead of the :attr:`__name__` attribute." +msgstr "" + +#: ../../whatsnew/2.6.rst:512 +msgid "" +"PEP 302-style importers can then set :attr:`__package__` as necessary. The " +":mod:`runpy` module that implements the :option:`-m` switch now does this, " +"so relative imports will now work correctly in scripts running from inside a" +" package." +msgstr "" + +#: ../../whatsnew/2.6.rst:522 +msgid "PEP 370: Per-user ``site-packages`` Directory" +msgstr "PEP 370: 分用户的 site-packages 目录" + +#: ../../whatsnew/2.6.rst:524 +msgid "" +"When you run Python, the module search path ``sys.path`` usually includes a " +"directory whose path ends in ``\"site-packages\"``. This directory is " +"intended to hold locally-installed packages available to all users using a " +"machine or a particular site installation." +msgstr "" + +#: ../../whatsnew/2.6.rst:529 +msgid "" +"Python 2.6 introduces a convention for user-specific site directories. The " +"directory varies depending on the platform:" +msgstr "Python 2.6 引入了一个用于用户专属站点目录的惯例。 该目录根据具体系统平台各不相同:" + +#: ../../whatsnew/2.6.rst:532 +msgid "Unix and Mac OS X: :file:`~/.local/`" +msgstr "Unix 和 Mac OS X: :file:`~/.local/`" + +#: ../../whatsnew/2.6.rst:533 +msgid "Windows: :file:`%APPDATA%/Python`" +msgstr "Windows: :file:`%APPDATA%/Python`" + +#: ../../whatsnew/2.6.rst:535 +msgid "" +"Within this directory, there will be version-specific subdirectories, such " +"as :file:`lib/python2.6/site-packages` on Unix/Mac OS and " +":file:`Python26/site-packages` on Windows." +msgstr "" + +#: ../../whatsnew/2.6.rst:539 +msgid "" +"If you don't like the default directory, it can be overridden by an " +"environment variable. :envvar:`PYTHONUSERBASE` sets the root directory used" +" for all Python versions supporting this feature. On Windows, the directory" +" for application-specific data can be changed by setting the " +":envvar:`APPDATA` environment variable. You can also modify the " +":file:`site.py` file for your Python installation." +msgstr "" + +#: ../../whatsnew/2.6.rst:546 +msgid "" +"The feature can be disabled entirely by running Python with the :option:`-s`" +" option or setting the :envvar:`PYTHONNOUSERSITE` environment variable." +msgstr "" + +#: ../../whatsnew/2.6.rst:552 +msgid ":pep:`370` - Per-user ``site-packages`` Directory" +msgstr ":pep:`370` - 分用户的 site-packages 目录" + +#: ../../whatsnew/2.6.rst:553 +msgid "PEP written and implemented by Christian Heimes." +msgstr "PEP 由 Christian Heimes 撰写并实现" + +#: ../../whatsnew/2.6.rst:561 +msgid "PEP 371: The ``multiprocessing`` Package" +msgstr "PEP 371: 多任务处理包" + +#: ../../whatsnew/2.6.rst:563 +msgid "" +"The new :mod:`multiprocessing` package lets Python programs create new " +"processes that will perform a computation and return a result to the parent." +" The parent and child processes can communicate using queues and pipes, " +"synchronize their operations using locks and semaphores, and can share " +"simple arrays of data." +msgstr "" + +#: ../../whatsnew/2.6.rst:569 +msgid "" +"The :mod:`multiprocessing` module started out as an exact emulation of the " +":mod:`threading` module using processes instead of threads. That goal was " +"discarded along the path to Python 2.6, but the general approach of the " +"module is still similar. The fundamental class is the :class:`Process`, " +"which is passed a callable object and a collection of arguments. The " +":meth:`start` method sets the callable running in a subprocess, after which " +"you can call the :meth:`is_alive` method to check whether the subprocess is " +"still running and the :meth:`join` method to wait for the process to exit." +msgstr "" + +#: ../../whatsnew/2.6.rst:579 +msgid "" +"Here's a simple example where the subprocess will calculate a factorial. " +"The function doing the calculation is written strangely so that it takes " +"significantly longer when the input argument is a multiple of 4." +msgstr "" + +#: ../../whatsnew/2.6.rst:616 +msgid "" +"A :class:`~queue.Queue` is used to communicate the result of the factorial. " +"The :class:`~queue.Queue` object is stored in a global variable. The child " +"process will use the value of the variable when the child was created; " +"because it's a :class:`~queue.Queue`, parent and child can use the object to" +" communicate. (If the parent were to change the value of the global " +"variable, the child's value would be unaffected, and vice versa.)" +msgstr "" + +#: ../../whatsnew/2.6.rst:624 +msgid "" +"Two other classes, :class:`Pool` and :class:`Manager`, provide higher-level " +"interfaces. :class:`Pool` will create a fixed number of worker processes, " +"and requests can then be distributed to the workers by calling :meth:`apply`" +" or :meth:`apply_async` to add a single request, and :meth:`map` or " +":meth:`map_async` to add a number of requests. The following code uses a " +":class:`Pool` to spread requests across 5 worker processes and retrieve a " +"list of results::" +msgstr "" + +#: ../../whatsnew/2.6.rst:642 +msgid "This produces the following output::" +msgstr "这会产生以下输出::" + +#: ../../whatsnew/2.6.rst:651 +msgid "" +"The other high-level interface, the :class:`Manager` class, creates a " +"separate server process that can hold master copies of Python data " +"structures. Other processes can then access and modify these data " +"structures using proxy objects. The following example creates a shared " +"dictionary by calling the :meth:`dict` method; the worker processes then " +"insert values into the dictionary. (Locking is not done for you " +"automatically, which doesn't matter in this example. :class:`Manager`'s " +"methods also include :meth:`Lock`, :meth:`RLock`, and :meth:`Semaphore` to " +"create shared locks.)" +msgstr "" + +#: ../../whatsnew/2.6.rst:695 +msgid "This will produce the output::" +msgstr "这将产生如下输出::" + +#: ../../whatsnew/2.6.rst:706 +msgid "The documentation for the :mod:`multiprocessing` module." +msgstr ":mod:`multiprocessing` 模块的文档。" + +#: ../../whatsnew/2.6.rst:709 +msgid ":pep:`371` - Addition of the multiprocessing package" +msgstr ":pep:`371` - 添加多任务处理包" + +#: ../../whatsnew/2.6.rst:709 +msgid "" +"PEP written by Jesse Noller and Richard Oudkerk; implemented by Richard " +"Oudkerk and Jesse Noller." +msgstr "" +"PEP 由 Jesse Noller 和 Richard Oudkerk 撰写,由 Richard Oudkerk 和 Jesse Noller 实现" + +#: ../../whatsnew/2.6.rst:718 +msgid "PEP 3101: Advanced String Formatting" +msgstr "PEP 3101: 高级字符串格式" + +#: ../../whatsnew/2.6.rst:720 +msgid "" +"In Python 3.0, the `%` operator is supplemented by a more powerful string " +"formatting method, :meth:`format`. Support for the :meth:`str.format` " +"method has been backported to Python 2.6." +msgstr "" + +#: ../../whatsnew/2.6.rst:724 +msgid "" +"In 2.6, both 8-bit and Unicode strings have a `.format()` method that treats" +" the string as a template and takes the arguments to be formatted. The " +"formatting template uses curly brackets (`{`, `}`) as special characters::" +msgstr "" + +#: ../../whatsnew/2.6.rst:737 +msgid "Curly brackets can be escaped by doubling them::" +msgstr "" + +#: ../../whatsnew/2.6.rst:742 +msgid "" +"Field names can be integers indicating positional arguments, such as " +"``{0}``, ``{1}``, etc. or names of keyword arguments. You can also supply " +"compound field names that read attributes or access dictionary keys::" +msgstr "" + +#: ../../whatsnew/2.6.rst:756 +msgid "" +"Note that when using dictionary-style notation such as ``[.mp4]``, you don't" +" need to put any quotation marks around the string; it will look up the " +"value using ``.mp4`` as the key. Strings beginning with a number will be " +"converted to an integer. You can't write more complicated expressions " +"inside a format string." +msgstr "" + +#: ../../whatsnew/2.6.rst:762 +msgid "" +"So far we've shown how to specify which field to substitute into the " +"resulting string. The precise formatting used is also controllable by " +"adding a colon followed by a format specifier. For example::" +msgstr "" + +#: ../../whatsnew/2.6.rst:776 +msgid "Format specifiers can reference other fields through nesting::" +msgstr "格式说明符可以通过嵌套来引用其他字段::" + +#: ../../whatsnew/2.6.rst:786 +msgid "The alignment of a field within the desired width can be specified:" +msgstr "可以指定所需宽度内的字段对齐方式:" + +#: ../../whatsnew/2.6.rst:789 +msgid "Character" +msgstr "字符" + +#: ../../whatsnew/2.6.rst:789 +msgid "Effect" +msgstr "效果" + +#: ../../whatsnew/2.6.rst:791 +msgid "< (default)" +msgstr "< (默认)" + +#: ../../whatsnew/2.6.rst:791 +msgid "Left-align" +msgstr "左对齐" + +#: ../../whatsnew/2.6.rst:792 +msgid ">" +msgstr ">" + +#: ../../whatsnew/2.6.rst:792 +msgid "Right-align" +msgstr "右对齐" + +#: ../../whatsnew/2.6.rst:793 +msgid "^" +msgstr "^" + +#: ../../whatsnew/2.6.rst:793 +msgid "Center" +msgstr "居中对齐" + +#: ../../whatsnew/2.6.rst:794 +msgid "=" +msgstr "=" + +#: ../../whatsnew/2.6.rst:794 +msgid "(For numeric types only) Pad after the sign." +msgstr "(仅适用于数字类型)在符号后加空格。" + +#: ../../whatsnew/2.6.rst:797 +msgid "" +"Format specifiers can also include a presentation type, which controls how " +"the value is formatted. For example, floating-point numbers can be " +"formatted as a general number or in exponential notation::" +msgstr "" + +#: ../../whatsnew/2.6.rst:806 +msgid "" +"A variety of presentation types are available. Consult the 2.6 " +"documentation for a :ref:`complete list `; here's a sample:" +msgstr "" + +#: ../../whatsnew/2.6.rst:810 +msgid "``b``" +msgstr "``b``" + +#: ../../whatsnew/2.6.rst:810 +msgid "Binary. Outputs the number in base 2." +msgstr "二进制。输出以2为底的数字。" + +#: ../../whatsnew/2.6.rst:811 +msgid "``c``" +msgstr "``c``" + +#: ../../whatsnew/2.6.rst:811 +msgid "" +"Character. Converts the integer to the corresponding Unicode character " +"before printing." +msgstr "字符。在打印之前将整数转换为相应的Unicode字符。" + +#: ../../whatsnew/2.6.rst:813 +msgid "``d``" +msgstr "``d``" + +#: ../../whatsnew/2.6.rst:813 +msgid "Decimal Integer. Outputs the number in base 10." +msgstr "十进制整数。 输出以 10 为基数的数字。" + +#: ../../whatsnew/2.6.rst:814 +msgid "``o``" +msgstr "``o``" + +#: ../../whatsnew/2.6.rst:814 +msgid "Octal format. Outputs the number in base 8." +msgstr "八进制格式。 输出以 8 为基数的数字。" + +#: ../../whatsnew/2.6.rst:815 +msgid "``x``" +msgstr "``x``" + +#: ../../whatsnew/2.6.rst:815 +msgid "" +"Hex format. Outputs the number in base 16, using lower-case letters for the " +"digits above 9." +msgstr "十六进制格式。 输出以 16 为基数的数字,使用小写字母表示 9 以上的数码。" + +#: ../../whatsnew/2.6.rst:817 +msgid "``e``" +msgstr "``e``" + +#: ../../whatsnew/2.6.rst:817 +msgid "" +"Exponent notation. Prints the number in scientific notation using the letter" +" 'e' to indicate the exponent." +msgstr "指数表示法。用字母 'e' 以科学计数法打印数字以表示指数。" + +#: ../../whatsnew/2.6.rst:819 +msgid "``g``" +msgstr "``g``" + +#: ../../whatsnew/2.6.rst:819 +msgid "" +"General format. This prints the number as a fixed-point number, unless the " +"number is too large, in which case it switches to 'e' exponent notation." +msgstr "" + +#: ../../whatsnew/2.6.rst:822 +msgid "``n``" +msgstr "``n``" + +#: ../../whatsnew/2.6.rst:822 +msgid "" +"Number. This is the same as 'g' (for floats) or 'd' (for integers), except " +"that it uses the current locale setting to insert the appropriate number " +"separator characters." +msgstr "" + +#: ../../whatsnew/2.6.rst:825 +msgid "``%``" +msgstr "``%``" + +#: ../../whatsnew/2.6.rst:825 +msgid "" +"Percentage. Multiplies the number by 100 and displays in fixed ('f') format," +" followed by a percent sign." +msgstr "" + +#: ../../whatsnew/2.6.rst:829 +msgid "" +"Classes and types can define a :meth:`__format__` method to control how " +"they're formatted. It receives a single argument, the format specifier::" +msgstr "" + +#: ../../whatsnew/2.6.rst:838 +msgid "" +"There's also a :func:`format` builtin that will format a single value. It " +"calls the type's :meth:`__format__` method with the provided specifier::" +msgstr "" + +#: ../../whatsnew/2.6.rst:849 +msgid ":ref:`formatstrings`" +msgstr ":ref:`formatstrings`" + +#: ../../whatsnew/2.6.rst:849 +msgid "The reference documentation for format fields." +msgstr "格式字段的参考文档。" + +#: ../../whatsnew/2.6.rst:851 +msgid ":pep:`3101` - Advanced String Formatting" +msgstr ":pep:`3101` - 高级字符串格式" + +#: ../../whatsnew/2.6.rst:852 +msgid "PEP written by Talin. Implemented by Eric Smith." +msgstr "PEP 由 Eric V. Smith 撰写并实现" + +#: ../../whatsnew/2.6.rst:859 +msgid "PEP 3105: ``print`` As a Function" +msgstr "PEP 3105: ``print`` 改为函数" + +#: ../../whatsnew/2.6.rst:861 +msgid "" +"The ``print`` statement becomes the :func:`print` function in Python 3.0. " +"Making :func:`print` a function makes it possible to replace the function by" +" doing ``def print(...)`` or importing a new function from somewhere else." +msgstr "" +"在 Python 3.0 中 ``print`` 语句变成了 :func:`print` 函数。 将 :func:`print` 变成函数使得可以通过 " +"``def print(...)`` 或从其他地方导入一个新函数来替换该函数。" + +#: ../../whatsnew/2.6.rst:865 +msgid "" +"Python 2.6 has a ``__future__`` import that removes ``print`` as language " +"syntax, letting you use the functional form instead. For example::" +msgstr "Python 2.6 提供了 ``__future__`` 导入语句来移除 ``print`` 语法,让你可以改用函数形式。 例如::" + +#: ../../whatsnew/2.6.rst:871 +msgid "The signature of the new function is::" +msgstr "新函数的签名为::" + +#: ../../whatsnew/2.6.rst:876 +msgid "The parameters are:" +msgstr "形参包括:" + +#: ../../whatsnew/2.6.rst:878 +msgid "*args*: positional arguments whose values will be printed out." +msgstr "*args*: 相应值将会被打印的位置参数。" + +#: ../../whatsnew/2.6.rst:879 +msgid "*sep*: the separator, which will be printed between arguments." +msgstr "*sep*: 分隔符,它将在参数之间被打印。" + +#: ../../whatsnew/2.6.rst:880 +msgid "" +"*end*: the ending text, which will be printed after all of the arguments " +"have been output." +msgstr "*end*: 结束文本,它将在所有参数输出完毕之后被打印。" + +#: ../../whatsnew/2.6.rst:882 +msgid "*file*: the file object to which the output will be sent." +msgstr "*file*: 将被作为输出发送目标的文件对象。" + +#: ../../whatsnew/2.6.rst:886 +msgid ":pep:`3105` - Make print a function" +msgstr ":pep:`3105` - print 改为函数" + +#: ../../whatsnew/2.6.rst:887 +msgid "PEP written by Georg Brandl." +msgstr "PEP 由 Georg Brandl 撰写" + +#: ../../whatsnew/2.6.rst:894 +msgid "PEP 3110: Exception-Handling Changes" +msgstr "PEP 3110: 异常处理的变更" + +#: ../../whatsnew/2.6.rst:896 +msgid "" +"One error that Python programmers occasionally make is writing the following" +" code::" +msgstr "Python 程序员偶尔会犯的一个错误是编写这样的代码::" + +#: ../../whatsnew/2.6.rst:904 +msgid "" +"The author is probably trying to catch both :exc:`TypeError` and " +":exc:`ValueError` exceptions, but this code actually does something " +"different: it will catch :exc:`TypeError` and bind the resulting exception " +"object to the local name ``\"ValueError\"``. The :exc:`ValueError` " +"exception will not be caught at all. The correct code specifies a tuple of " +"exceptions::" +msgstr "" + +#: ../../whatsnew/2.6.rst:916 +msgid "" +"This error happens because the use of the comma here is ambiguous: does it " +"indicate two different nodes in the parse tree, or a single node that's a " +"tuple?" +msgstr "" + +#: ../../whatsnew/2.6.rst:920 +msgid "" +"Python 3.0 makes this unambiguous by replacing the comma with the word " +"\"as\". To catch an exception and store the exception object in the " +"variable ``exc``, you must write::" +msgstr "" + +#: ../../whatsnew/2.6.rst:929 +msgid "" +"Python 3.0 will only support the use of \"as\", and therefore interprets the" +" first example as catching two different exceptions. Python 2.6 supports " +"both the comma and \"as\", so existing code will continue to work. We " +"therefore suggest using \"as\" when writing new Python code that will only " +"be executed with 2.6." +msgstr "" + +#: ../../whatsnew/2.6.rst:937 +msgid ":pep:`3110` - Catching Exceptions in Python 3000" +msgstr ":pep:`3110` - 在 Python 3000 中捕获异常" + +#: ../../whatsnew/2.6.rst:938 +msgid "PEP written and implemented by Collin Winter." +msgstr "PEP 由 Collin Winter 撰写并实现" + +#: ../../whatsnew/2.6.rst:945 +msgid "PEP 3112: Byte Literals" +msgstr "PEP 3112: 字节字面值" + +#: ../../whatsnew/2.6.rst:947 +msgid "" +"Python 3.0 adopts Unicode as the language's fundamental string type and " +"denotes 8-bit literals differently, either as ``b'string'`` or using a " +":class:`bytes` constructor. For future compatibility, Python 2.6 adds " +":class:`bytes` as a synonym for the :class:`str` type, and it also supports " +"the ``b''`` notation." +msgstr "" + +#: ../../whatsnew/2.6.rst:954 +msgid "" +"The 2.6 :class:`str` differs from 3.0's :class:`bytes` type in various ways;" +" most notably, the constructor is completely different. In 3.0, " +"``bytes([65, 66, 67])`` is 3 elements long, containing the bytes " +"representing ``ABC``; in 2.6, ``bytes([65, 66, 67])`` returns the 12-byte " +"string representing the :func:`str` of the list." +msgstr "" + +#: ../../whatsnew/2.6.rst:960 +msgid "" +"The primary use of :class:`bytes` in 2.6 will be to write tests of object " +"type such as ``isinstance(x, bytes)``. This will help the 2to3 converter, " +"which can't tell whether 2.x code intends strings to contain either " +"characters or 8-bit bytes; you can now use either :class:`bytes` or " +":class:`str` to represent your intention exactly, and the resulting code " +"will also be correct in Python 3.0." +msgstr "" + +#: ../../whatsnew/2.6.rst:967 +msgid "" +"There's also a ``__future__`` import that causes all string literals to " +"become Unicode strings. This means that ``\\u`` escape sequences can be " +"used to include Unicode characters::" +msgstr "" + +#: ../../whatsnew/2.6.rst:979 +msgid "" +"At the C level, Python 3.0 will rename the existing 8-bit string type, " +"called :c:type:`PyStringObject` in Python 2.x, to :c:type:`PyBytesObject`. " +"Python 2.6 uses ``#define`` to support using the names " +":c:func:`PyBytesObject`, :c:func:`PyBytes_Check`, " +":c:func:`PyBytes_FromStringAndSize`, and all the other functions and macros " +"used with strings." +msgstr "" + +#: ../../whatsnew/2.6.rst:986 +msgid "" +"Instances of the :class:`bytes` type are immutable just as strings are. A " +"new :class:`bytearray` type stores a mutable sequence of bytes::" +msgstr "" +":class:`bytes` 类型的实例与字符串一样属于不可变对象。 新增的 :class:`bytearray` 类型则用于存储可变的字节序列::" + +#: ../../whatsnew/2.6.rst:1001 +msgid "" +"Byte arrays support most of the methods of string types, such as " +":meth:`startswith`/:meth:`endswith`, :meth:`find`/:meth:`rfind`, and some of" +" the methods of lists, such as :meth:`append`, :meth:`pop`, and " +":meth:`reverse`." +msgstr "" +"字节数组支持大部分的字符串类型方法,如 :meth:`startswith`/:meth:`endswith`, " +":meth:`find`/:meth:`rfind`,以及列表的某些方法,如 :meth:`append`, :meth:`pop` 和 " +":meth:`reverse`。" + +#: ../../whatsnew/2.6.rst:1014 +msgid "" +"There's also a corresponding C API, with :c:func:`PyByteArray_FromObject`, " +":c:func:`PyByteArray_FromStringAndSize`, and various other functions." +msgstr "" +"也有一个相应的 C API,包含 :c:func:`PyByteArray_FromObject`, " +":c:func:`PyByteArray_FromStringAndSize` 以及各种其他函数。" + +#: ../../whatsnew/2.6.rst:1021 +msgid ":pep:`3112` - Bytes literals in Python 3000" +msgstr ":pep:`3112` - Python 3000 中的字节字面值" + +#: ../../whatsnew/2.6.rst:1022 +msgid "PEP written by Jason Orendorff; backported to 2.6 by Christian Heimes." +msgstr "PEP 由 Jason Orendorff 撰写, 补丁2.6 由 Christian Heimes 撰写。" + +#: ../../whatsnew/2.6.rst:1029 +msgid "PEP 3116: New I/O Library" +msgstr "PEP 3116: 新 I/O 库" + +#: ../../whatsnew/2.6.rst:1031 +msgid "" +"Python's built-in file objects support a number of methods, but file-like " +"objects don't necessarily support all of them. Objects that imitate files " +"usually support :meth:`read` and :meth:`write`, but they may not support " +":meth:`readline`, for example. Python 3.0 introduces a layered I/O library " +"in the :mod:`io` module that separates buffering and text-handling features " +"from the fundamental read and write operations." +msgstr "" + +#: ../../whatsnew/2.6.rst:1039 +msgid "" +"There are three levels of abstract base classes provided by the :mod:`io` " +"module:" +msgstr "" + +#: ../../whatsnew/2.6.rst:1042 +msgid "" +":class:`RawIOBase` defines raw I/O operations: :meth:`read`, " +":meth:`readinto`, :meth:`write`, :meth:`seek`, :meth:`tell`, " +":meth:`truncate`, and :meth:`close`. Most of the methods of this class will " +"often map to a single system call. There are also :meth:`readable`, " +":meth:`writable`, and :meth:`seekable` methods for determining what " +"operations a given object will allow." +msgstr "" + +#: ../../whatsnew/2.6.rst:1050 +msgid "" +"Python 3.0 has concrete implementations of this class for files and sockets," +" but Python 2.6 hasn't restructured its file and socket objects in this way." +msgstr "" + +#: ../../whatsnew/2.6.rst:1056 +msgid "" +":class:`BufferedIOBase` is an abstract base class that buffers data in " +"memory to reduce the number of system calls used, making I/O processing more" +" efficient. It supports all of the methods of :class:`RawIOBase`, and adds a" +" :attr:`raw` attribute holding the underlying raw object." +msgstr "" + +#: ../../whatsnew/2.6.rst:1062 +msgid "" +"There are five concrete classes implementing this ABC. " +":class:`BufferedWriter` and :class:`BufferedReader` are for objects that " +"support write-only or read-only usage that have a :meth:`seek` method for " +"random access. :class:`BufferedRandom` objects support read and write " +"access upon the same underlying stream, and :class:`BufferedRWPair` is for " +"objects such as TTYs that have both read and write operations acting upon " +"unconnected streams of data. The :class:`BytesIO` class supports reading, " +"writing, and seeking over an in-memory buffer." +msgstr "" + +#: ../../whatsnew/2.6.rst:1075 +msgid "" +":class:`TextIOBase`: Provides functions for reading and writing strings " +"(remember, strings will be Unicode in Python 3.0), and supporting " +":term:`universal newlines`. :class:`TextIOBase` defines the " +":meth:`readline` method and supports iteration upon objects." +msgstr "" + +#: ../../whatsnew/2.6.rst:1081 +msgid "" +"There are two concrete implementations. :class:`TextIOWrapper` wraps a " +"buffered I/O object, supporting all of the methods for text I/O and adding a" +" :attr:`buffer` attribute for access to the underlying object. " +":class:`StringIO` simply buffers everything in memory without ever writing " +"anything to disk." +msgstr "" + +#: ../../whatsnew/2.6.rst:1087 +msgid "" +"(In Python 2.6, :class:`io.StringIO` is implemented in pure Python, so it's " +"pretty slow. You should therefore stick with the existing :mod:`StringIO` " +"module or :mod:`cStringIO` for now. At some point Python 3.0's :mod:`io` " +"module will be rewritten into C for speed, and perhaps the C implementation " +"will be backported to the 2.x releases.)" +msgstr "" + +#: ../../whatsnew/2.6.rst:1093 +msgid "" +"In Python 2.6, the underlying implementations haven't been restructured to " +"build on top of the :mod:`io` module's classes. The module is being " +"provided to make it easier to write code that's forward-compatible with 3.0," +" and to save developers the effort of writing their own implementations of " +"buffering and text I/O." +msgstr "" + +#: ../../whatsnew/2.6.rst:1103 +msgid ":pep:`3116` - New I/O" +msgstr ":pep:`3116` - 新 I/O" + +#: ../../whatsnew/2.6.rst:1102 +msgid "" +"PEP written by Daniel Stutzbach, Mike Verdone, and Guido van Rossum. Code by" +" Guido van Rossum, Georg Brandl, Walter Doerwald, Jeremy Hylton, Martin von " +"Löwis, Tony Lownds, and others." +msgstr "" + +#: ../../whatsnew/2.6.rst:1111 +msgid "PEP 3118: Revised Buffer Protocol" +msgstr "PEP 3118: 修改缓冲区协议" + +#: ../../whatsnew/2.6.rst:1113 +msgid "" +"The buffer protocol is a C-level API that lets Python types exchange " +"pointers into their internal representations. A memory-mapped file can be " +"viewed as a buffer of characters, for example, and this lets another module " +"such as :mod:`re` treat memory-mapped files as a string of characters to be " +"searched." +msgstr "" + +#: ../../whatsnew/2.6.rst:1119 +msgid "" +"The primary users of the buffer protocol are numeric-processing packages " +"such as NumPy, which expose the internal representation of arrays so that " +"callers can write data directly into an array instead of going through a " +"slower API. This PEP updates the buffer protocol in light of experience " +"from NumPy development, adding a number of new features such as indicating " +"the shape of an array or locking a memory region." +msgstr "" + +#: ../../whatsnew/2.6.rst:1126 +msgid "" +"The most important new C API function is ``PyObject_GetBuffer(PyObject *obj," +" Py_buffer *view, int flags)``, which takes an object and a set of flags, " +"and fills in the ``Py_buffer`` structure with information about the object's" +" memory representation. Objects can use this operation to lock memory in " +"place while an external caller could be modifying the contents, so there's a" +" corresponding ``PyBuffer_Release(Py_buffer *view)`` to indicate that the " +"external caller is done." +msgstr "" + +#: ../../whatsnew/2.6.rst:1138 +msgid "" +"The *flags* argument to :c:func:`PyObject_GetBuffer` specifies constraints " +"upon the memory returned. Some examples are:" +msgstr " :c:func:`PyObject_GetBuffer` 的 *flags* 参数指明了对所返回内存的约束。 示例如下:" + +#: ../../whatsnew/2.6.rst:1141 +msgid ":const:`PyBUF_WRITABLE` indicates that the memory must be writable." +msgstr ":const:`PyBUF_WRITABLE` 指定内存必须为可写。" + +#: ../../whatsnew/2.6.rst:1143 +msgid "" +":const:`PyBUF_LOCK` requests a read-only or exclusive lock on the memory." +msgstr "" + +#: ../../whatsnew/2.6.rst:1145 +msgid "" +":const:`PyBUF_C_CONTIGUOUS` and :const:`PyBUF_F_CONTIGUOUS` requests a " +"C-contiguous (last dimension varies the fastest) or Fortran-contiguous " +"(first dimension varies the fastest) array layout." +msgstr "" + +#: ../../whatsnew/2.6.rst:1149 +msgid "" +"Two new argument codes for :c:func:`PyArg_ParseTuple`, ``s*`` and ``z*``, " +"return locked buffer objects for a parameter." +msgstr "" +"两个用于 :c:func:`PyArg_ParseTuple` 的新参数代码 ``s*`` 和 ``z*``,将为形参返回锁定的缓冲区对象。" + +#: ../../whatsnew/2.6.rst:1155 +msgid ":pep:`3118` - Revising the buffer protocol" +msgstr ":pep:`3118` - 修改缓冲区协议" + +#: ../../whatsnew/2.6.rst:1155 +msgid "" +"PEP written by Travis Oliphant and Carl Banks; implemented by Travis " +"Oliphant." +msgstr "PEP 由 Travis Oliphant 和 Carl Banks 撰写,由 Travis Oliphant 实现。" + +#: ../../whatsnew/2.6.rst:1164 +msgid "PEP 3119: Abstract Base Classes" +msgstr "PEP 3119: 抽象基类" + +#: ../../whatsnew/2.6.rst:1166 +msgid "" +"Some object-oriented languages such as Java support interfaces, declaring " +"that a class has a given set of methods or supports a given access protocol." +" Abstract Base Classes (or ABCs) are an equivalent feature for Python. The " +"ABC support consists of an :mod:`abc` module containing a metaclass called " +":class:`ABCMeta`, special handling of this metaclass by the " +":func:`isinstance` and :func:`issubclass` builtins, and a collection of " +"basic ABCs that the Python developers think will be widely useful. Future " +"versions of Python will probably add more ABCs." +msgstr "" + +#: ../../whatsnew/2.6.rst:1176 +msgid "" +"Let's say you have a particular class and wish to know whether it supports " +"dictionary-style access. The phrase \"dictionary-style\" is vague, however." +" It probably means that accessing items with ``obj[1]`` works. Does it imply" +" that setting items with ``obj[2] = value`` works? Or that the object will " +"have :meth:`keys`, :meth:`values`, and :meth:`items` methods? What about " +"the iterative variants such as :meth:`iterkeys`? :meth:`copy` and " +":meth:`update`? Iterating over the object with :func:`iter`?" +msgstr "" + +#: ../../whatsnew/2.6.rst:1184 +msgid "" +"The Python 2.6 :mod:`collections` module includes a number of different ABCs" +" that represent these distinctions. :class:`Iterable` indicates that a " +"class defines :meth:`__iter__`, and :class:`Container` means the class " +"defines a :meth:`__contains__` method and therefore supports ``x in y`` " +"expressions. The basic dictionary interface of getting items, setting " +"items, and :meth:`keys`, :meth:`values`, and :meth:`items`, is defined by " +"the :class:`MutableMapping` ABC." +msgstr "" + +#: ../../whatsnew/2.6.rst:1193 +msgid "" +"You can derive your own classes from a particular ABC to indicate they " +"support that ABC's interface::" +msgstr "" + +#: ../../whatsnew/2.6.rst:1202 +msgid "" +"Alternatively, you could write the class without deriving from the desired " +"ABC and instead register the class by calling the ABC's :meth:`register` " +"method::" +msgstr "" + +#: ../../whatsnew/2.6.rst:1213 +msgid "" +"For classes that you write, deriving from the ABC is probably clearer. The " +":meth:`register` method is useful when you've written a new ABC that can " +"describe an existing type or class, or if you want to declare that some " +"third-party class implements an ABC. For example, if you defined a " +":class:`PrintableType` ABC, it's legal to do::" +msgstr "" + +#: ../../whatsnew/2.6.rst:1225 +msgid "" +"Classes should obey the semantics specified by an ABC, but Python can't " +"check this; it's up to the class author to understand the ABC's requirements" +" and to implement the code accordingly." +msgstr "" + +#: ../../whatsnew/2.6.rst:1229 +msgid "" +"To check whether an object supports a particular interface, you can now " +"write::" +msgstr "" + +#: ../../whatsnew/2.6.rst:1236 +msgid "" +"Don't feel that you must now begin writing lots of checks as in the above " +"example. Python has a strong tradition of duck-typing, where explicit type-" +"checking is never done and code simply calls methods on an object, trusting " +"that those methods will be there and raising an exception if they aren't. " +"Be judicious in checking for ABCs and only do it where it's absolutely " +"necessary." +msgstr "" + +#: ../../whatsnew/2.6.rst:1243 +msgid "" +"You can write your own ABCs by using ``abc.ABCMeta`` as the metaclass in a " +"class definition::" +msgstr "" + +#: ../../whatsnew/2.6.rst:1264 +msgid "" +"In the :class:`Drawable` ABC above, the :meth:`draw_doubled` method renders " +"the object at twice its size and can be implemented in terms of other " +"methods described in :class:`Drawable`. Classes implementing this ABC " +"therefore don't need to provide their own implementation of " +":meth:`draw_doubled`, though they can do so. An implementation of " +":meth:`draw` is necessary, though; the ABC can't provide a useful generic " +"implementation." +msgstr "" + +#: ../../whatsnew/2.6.rst:1272 +msgid "" +"You can apply the ``@abstractmethod`` decorator to methods such as " +":meth:`draw` that must be implemented; Python will then raise an exception " +"for classes that don't define the method. Note that the exception is only " +"raised when you actually try to create an instance of a subclass lacking the" +" method::" +msgstr "" + +#: ../../whatsnew/2.6.rst:1287 +msgid "" +"Abstract data attributes can be declared using the ``@abstractproperty`` " +"decorator::" +msgstr "" + +#: ../../whatsnew/2.6.rst:1297 +msgid "Subclasses must then define a :meth:`readonly` property." +msgstr "" + +#: ../../whatsnew/2.6.rst:1303 +msgid ":pep:`3119` - Introducing Abstract Base Classes" +msgstr ":pep:`3119` - 引入抽象基类" + +#: ../../whatsnew/2.6.rst:1302 +msgid "" +"PEP written by Guido van Rossum and Talin. Implemented by Guido van Rossum. " +"Backported to 2.6 by Benjamin Aranguren, with Alex Martelli." +msgstr "" + +#: ../../whatsnew/2.6.rst:1311 +msgid "PEP 3127: Integer Literal Support and Syntax" +msgstr "PEP 3127: 整型文字支持和语法" + +#: ../../whatsnew/2.6.rst:1313 +msgid "" +"Python 3.0 changes the syntax for octal (base-8) integer literals, prefixing" +" them with \"0o\" or \"0O\" instead of a leading zero, and adds support for " +"binary (base-2) integer literals, signalled by a \"0b\" or \"0B\" prefix." +msgstr "" + +#: ../../whatsnew/2.6.rst:1318 +msgid "" +"Python 2.6 doesn't drop support for a leading 0 signalling an octal number, " +"but it does add support for \"0o\" and \"0b\"::" +msgstr "" + +#: ../../whatsnew/2.6.rst:1326 +msgid "" +"The :func:`oct` builtin still returns numbers prefixed with a leading zero, " +"and a new :func:`bin` builtin returns the binary representation for a " +"number::" +msgstr "" + +#: ../../whatsnew/2.6.rst:1337 +msgid "" +"The :func:`int` and :func:`long` builtins will now accept the \"0o\" and " +"\"0b\" prefixes when base-8 or base-2 are requested, or when the *base* " +"argument is zero (signalling that the base used should be determined from " +"the string)::" +msgstr "" + +#: ../../whatsnew/2.6.rst:1355 +msgid ":pep:`3127` - Integer Literal Support and Syntax" +msgstr ":pep:`3127` - 整型文字支持和语法" + +#: ../../whatsnew/2.6.rst:1355 +msgid "PEP written by Patrick Maupin; backported to 2.6 by Eric Smith." +msgstr "" + +#: ../../whatsnew/2.6.rst:1363 +msgid "PEP 3129: Class Decorators" +msgstr "PEP 3129: 类装饰器" + +#: ../../whatsnew/2.6.rst:1365 +msgid "" +"Decorators have been extended from functions to classes. It's now legal to " +"write::" +msgstr "装饰器已从函数扩展到类。 现在可以合法地编写::" + +#: ../../whatsnew/2.6.rst:1373 +msgid "This is equivalent to::" +msgstr "这相当于:" + +#: ../../whatsnew/2.6.rst:1382 +msgid ":pep:`3129` - Class Decorators" +msgstr ":pep:`3129` - 类装饰器" + +#: ../../whatsnew/2.6.rst:1383 +msgid "PEP written by Collin Winter." +msgstr "PEP 由 Collin Winter 撰写" + +#: ../../whatsnew/2.6.rst:1390 +msgid "PEP 3141: A Type Hierarchy for Numbers" +msgstr "PEP 3141: 数字的类型层级结构" + +#: ../../whatsnew/2.6.rst:1392 +msgid "" +"Python 3.0 adds several abstract base classes for numeric types inspired by " +"Scheme's numeric tower. These classes were backported to 2.6 as the " +":mod:`numbers` module." +msgstr "" + +#: ../../whatsnew/2.6.rst:1396 +msgid "" +"The most general ABC is :class:`Number`. It defines no operations at all, " +"and only exists to allow checking if an object is a number by doing " +"``isinstance(obj, Number)``." +msgstr "" + +#: ../../whatsnew/2.6.rst:1400 +msgid "" +":class:`Complex` is a subclass of :class:`Number`. Complex numbers can " +"undergo the basic operations of addition, subtraction, multiplication, " +"division, and exponentiation, and you can retrieve the real and imaginary " +"parts and obtain a number's conjugate. Python's built-in complex type is an" +" implementation of :class:`Complex`." +msgstr "" + +#: ../../whatsnew/2.6.rst:1406 +msgid "" +":class:`Real` further derives from :class:`Complex`, and adds operations " +"that only work on real numbers: :func:`floor`, :func:`trunc`, rounding, " +"taking the remainder mod N, floor division, and comparisons." +msgstr "" + +#: ../../whatsnew/2.6.rst:1411 +msgid "" +":class:`Rational` numbers derive from :class:`Real`, have :attr:`numerator` " +"and :attr:`denominator` properties, and can be converted to floats. Python " +"2.6 adds a simple rational-number class, :class:`Fraction`, in the " +":mod:`fractions` module. (It's called :class:`Fraction` instead of " +":class:`Rational` to avoid a name clash with :class:`numbers.Rational`.)" +msgstr "" + +#: ../../whatsnew/2.6.rst:1418 +msgid "" +":class:`Integral` numbers derive from :class:`Rational`, and can be shifted " +"left and right with ``<<`` and ``>>``, combined using bitwise operations " +"such as ``&`` and ``|``, and can be used as array indexes and slice " +"boundaries." +msgstr "" + +#: ../../whatsnew/2.6.rst:1423 +msgid "" +"In Python 3.0, the PEP slightly redefines the existing builtins " +":func:`round`, :func:`math.floor`, :func:`math.ceil`, and adds a new one, " +":func:`math.trunc`, that's been backported to Python 2.6. :func:`math.trunc`" +" rounds toward zero, returning the closest :class:`Integral` that's between " +"the function's argument and zero." +msgstr "" + +#: ../../whatsnew/2.6.rst:1432 +msgid ":pep:`3141` - A Type Hierarchy for Numbers" +msgstr "" + +#: ../../whatsnew/2.6.rst:1432 +msgid "PEP written by Jeffrey Yasskin." +msgstr "PEP 由 Jeffrey Yasskin 撰写" + +#: ../../whatsnew/2.6.rst:1434 +msgid "" +"`Scheme's numerical tower " +"`__, from the Guile manual." +msgstr "" + +#: ../../whatsnew/2.6.rst:1436 +msgid "" +"`Scheme's number datatypes " +"`__ from the R5RS Scheme specification." +msgstr "" + +#: ../../whatsnew/2.6.rst:1440 +msgid "The :mod:`fractions` Module" +msgstr ":mod:`fractions` 模块" + +#: ../../whatsnew/2.6.rst:1442 +msgid "" +"To fill out the hierarchy of numeric types, the :mod:`fractions` module " +"provides a rational-number class. Rational numbers store their values as a " +"numerator and denominator forming a fraction, and can exactly represent " +"numbers such as ``2/3`` that floating-point numbers can only approximate." +msgstr "" + +#: ../../whatsnew/2.6.rst:1448 +msgid "" +"The :class:`Fraction` constructor takes two :class:`Integral` values that " +"will be the numerator and denominator of the resulting fraction. ::" +msgstr "" + +#: ../../whatsnew/2.6.rst:1461 +msgid "" +"For converting floating-point numbers to rationals, the float type now has " +"an :meth:`as_integer_ratio()` method that returns the numerator and " +"denominator for a fraction that evaluates to the same floating-point value::" +msgstr "" + +#: ../../whatsnew/2.6.rst:1473 +msgid "" +"Note that values that can only be approximated by floating-point numbers, " +"such as 1./3, are not simplified to the number being approximated; the " +"fraction attempts to match the floating-point value **exactly**." +msgstr "" + +#: ../../whatsnew/2.6.rst:1478 +msgid "" +"The :mod:`fractions` module is based upon an implementation by Sjoerd " +"Mullender that was in Python's :file:`Demo/classes/` directory for a long " +"time. This implementation was significantly updated by Jeffrey Yasskin." +msgstr "" + +#: ../../whatsnew/2.6.rst:1485 +msgid "Other Language Changes" +msgstr "其他语言特性修改" + +#: ../../whatsnew/2.6.rst:1487 +msgid "Some smaller changes made to the core Python language are:" +msgstr "对Python 语言核心进行的小改动:" + +#: ../../whatsnew/2.6.rst:1489 +msgid "" +"Directories and zip archives containing a :file:`__main__.py` file can now " +"be executed directly by passing their name to the interpreter. The directory" +" or zip archive is automatically inserted as the first entry in sys.path. " +"(Suggestion and initial patch by Andy Chu, subsequently revised by Phillip " +"J. Eby and Nick Coghlan; :issue:`1739468`.)" +msgstr "" + +#: ../../whatsnew/2.6.rst:1496 +msgid "" +"The :func:`hasattr` function was catching and ignoring all errors, under the" +" assumption that they meant a :meth:`__getattr__` method was failing somehow" +" and the return value of :func:`hasattr` would therefore be ``False``. This" +" logic shouldn't be applied to :exc:`KeyboardInterrupt` and " +":exc:`SystemExit`, however; Python 2.6 will no longer discard such " +"exceptions when :func:`hasattr` encounters them. (Fixed by Benjamin " +"Peterson; :issue:`2196`.)" +msgstr "" + +#: ../../whatsnew/2.6.rst:1504 +msgid "" +"When calling a function using the ``**`` syntax to provide keyword " +"arguments, you are no longer required to use a Python dictionary; any " +"mapping will now work::" +msgstr "" + +#: ../../whatsnew/2.6.rst:1517 +msgid "(Contributed by Alexander Belopolsky; :issue:`1686487`.)" +msgstr "(由 Alexander Belopolsky 在 :issue:`1686487` 中贡献。)" + +#: ../../whatsnew/2.6.rst:1519 +msgid "" +"It's also become legal to provide keyword arguments after a ``*args`` " +"argument to a function call. ::" +msgstr "在函数调用的 ``*args`` 参数之后提供关键字参数也是合法的。 ::" + +#: ../../whatsnew/2.6.rst:1528 +msgid "" +"Previously this would have been a syntax error. (Contributed by Amaury " +"Forgeot d'Arc; :issue:`3473`.)" +msgstr "在之前版本中这会导致语法错误。 (由 Amaury Forgeot d'Arc 贡献;:issue:`3473`。)" + +#: ../../whatsnew/2.6.rst:1531 +msgid "" +"A new builtin, ``next(iterator, [default])`` returns the next item from the " +"specified iterator. If the *default* argument is supplied, it will be " +"returned if *iterator* has been exhausted; otherwise, the " +":exc:`StopIteration` exception will be raised. (Backported in " +":issue:`2719`.)" +msgstr "" + +#: ../../whatsnew/2.6.rst:1537 +msgid "" +"Tuples now have :meth:`index` and :meth:`count` methods matching the list " +"type's :meth:`index` and :meth:`count` methods::" +msgstr "" + +#: ../../whatsnew/2.6.rst:1546 +msgid "(Contributed by Raymond Hettinger)" +msgstr "(由 Raymond Hettinger 贡献)" + +#: ../../whatsnew/2.6.rst:1548 +msgid "" +"The built-in types now have improved support for extended slicing syntax, " +"accepting various combinations of ``(start, stop, step)``. Previously, the " +"support was partial and certain corner cases wouldn't work. (Implemented by " +"Thomas Wouters.)" +msgstr "" + +#: ../../whatsnew/2.6.rst:1555 +msgid "" +"Properties now have three attributes, :attr:`getter`, :attr:`setter` and " +":attr:`deleter`, that are decorators providing useful shortcuts for adding a" +" getter, setter or deleter function to an existing property. You would use " +"them like this::" +msgstr "" + +#: ../../whatsnew/2.6.rst:1582 +msgid "" +"Several methods of the built-in set types now accept multiple iterables: " +":meth:`intersection`, :meth:`intersection_update`, :meth:`union`, " +":meth:`update`, :meth:`difference` and :meth:`difference_update`." +msgstr "" + +#: ../../whatsnew/2.6.rst:1596 ../../whatsnew/2.6.rst:1880 +#: ../../whatsnew/2.6.rst:1901 +msgid "(Contributed by Raymond Hettinger.)" +msgstr "(由 Raymond Hettinger 贡献。)" + +#: ../../whatsnew/2.6.rst:1598 +msgid "" +"Many floating-point features were added. The :func:`float` function will " +"now turn the string ``nan`` into an IEEE 754 Not A Number value, and " +"``+inf`` and ``-inf`` into positive or negative infinity. This works on any" +" platform with IEEE 754 semantics. (Contributed by Christian Heimes; " +":issue:`1635`.)" +msgstr "" + +#: ../../whatsnew/2.6.rst:1604 +msgid "" +"Other functions in the :mod:`math` module, :func:`isinf` and :func:`isnan`, " +"return true if their floating-point argument is infinite or Not A Number. " +"(:issue:`1640`)" +msgstr "" + +#: ../../whatsnew/2.6.rst:1608 +msgid "" +"Conversion functions were added to convert floating-point numbers into " +"hexadecimal strings (:issue:`3008`). These functions convert floats to and " +"from a string representation without introducing rounding errors from the " +"conversion between decimal and binary. Floats have a :meth:`hex` method " +"that returns a string representation, and the ``float.fromhex()`` method " +"converts a string back into a number::" +msgstr "" + +#: ../../whatsnew/2.6.rst:1625 +msgid "" +"A numerical nicety: when creating a complex number from two floats on " +"systems that support signed zeros (-0 and +0), the :func:`complex` " +"constructor will now preserve the sign of the zero. (Fixed by Mark T. " +"Dickinson; :issue:`1507`.)" +msgstr "" + +#: ../../whatsnew/2.6.rst:1630 +msgid "" +"Classes that inherit a :meth:`__hash__` method from a parent class can set " +"``__hash__ = None`` to indicate that the class isn't hashable. This will " +"make ``hash(obj)`` raise a :exc:`TypeError` and the class will not be " +"indicated as implementing the :class:`Hashable` ABC." +msgstr "" + +#: ../../whatsnew/2.6.rst:1636 +msgid "" +"You should do this when you've defined a :meth:`__cmp__` or :meth:`__eq__` " +"method that compares objects by their value rather than by identity. All " +"objects have a default hash method that uses ``id(obj)`` as the hash value." +" There's no tidy way to remove the :meth:`__hash__` method inherited from a" +" parent class, so assigning ``None`` was implemented as an override. At the" +" C level, extensions can set ``tp_hash`` to " +":c:func:`PyObject_HashNotImplemented`. (Fixed by Nick Coghlan and Amaury " +"Forgeot d'Arc; :issue:`2235`.)" +msgstr "" + +#: ../../whatsnew/2.6.rst:1646 +msgid "" +"The :exc:`GeneratorExit` exception now subclasses :exc:`BaseException` " +"instead of :exc:`Exception`. This means that an exception handler that does" +" ``except Exception:`` will not inadvertently catch :exc:`GeneratorExit`. " +"(Contributed by Chad Austin; :issue:`1537`.)" +msgstr "" + +#: ../../whatsnew/2.6.rst:1652 +msgid "" +"Generator objects now have a :attr:`gi_code` attribute that refers to the " +"original code object backing the generator. (Contributed by Collin Winter; " +":issue:`1473257`.)" +msgstr "" + +#: ../../whatsnew/2.6.rst:1656 +msgid "" +"The :func:`compile` built-in function now accepts keyword arguments as well " +"as positional parameters. (Contributed by Thomas Wouters; " +":issue:`1444529`.)" +msgstr "" + +#: ../../whatsnew/2.6.rst:1660 +msgid "" +"The :func:`complex` constructor now accepts strings containing parenthesized" +" complex numbers, meaning that ``complex(repr(cplx))`` will now round-trip " +"values. For example, ``complex('(3+4j)')`` now returns the value (3+4j). " +"(:issue:`1491866`)" +msgstr "" + +#: ../../whatsnew/2.6.rst:1665 +msgid "" +"The string :meth:`translate` method now accepts ``None`` as the translation " +"table parameter, which is treated as the identity transformation. This " +"makes it easier to carry out operations that only delete characters. " +"(Contributed by Bengt Richter and implemented by Raymond Hettinger; " +":issue:`1193128`.)" +msgstr "" + +#: ../../whatsnew/2.6.rst:1671 +msgid "" +"The built-in :func:`dir` function now checks for a :meth:`__dir__` method on" +" the objects it receives. This method must return a list of strings " +"containing the names of valid attributes for the object, and lets the object" +" control the value that :func:`dir` produces. Objects that have " +":meth:`__getattr__` or :meth:`__getattribute__` methods can use this to " +"advertise pseudo-attributes they will honor. (:issue:`1591665`)" +msgstr "" + +#: ../../whatsnew/2.6.rst:1679 +msgid "" +"Instance method objects have new attributes for the object and function " +"comprising the method; the new synonym for :attr:`im_self` is " +":attr:`__self__`, and :attr:`im_func` is also available as :attr:`__func__`." +" The old names are still supported in Python 2.6, but are gone in 3.0." +msgstr "" + +#: ../../whatsnew/2.6.rst:1684 +msgid "" +"An obscure change: when you use the :func:`locals` function inside a " +":keyword:`class` statement, the resulting dictionary no longer returns free " +"variables. (Free variables, in this case, are variables referenced in the " +":keyword:`!class` statement that aren't attributes of the class.)" +msgstr "" + +#: ../../whatsnew/2.6.rst:1693 +msgid "Optimizations" +msgstr "性能优化" + +#: ../../whatsnew/2.6.rst:1695 +msgid "" +"The :mod:`warnings` module has been rewritten in C. This makes it possible " +"to invoke warnings from the parser, and may also make the interpreter's " +"startup faster. (Contributed by Neal Norwitz and Brett Cannon; " +":issue:`1631171`.)" +msgstr "" + +#: ../../whatsnew/2.6.rst:1700 +msgid "" +"Type objects now have a cache of methods that can reduce the work required " +"to find the correct method implementation for a particular class; once " +"cached, the interpreter doesn't need to traverse base classes to figure out " +"the right method to call. The cache is cleared if a base class or the class " +"itself is modified, so the cache should remain correct even in the face of " +"Python's dynamic nature. (Original optimization implemented by Armin Rigo, " +"updated for Python 2.6 by Kevin Jacobs; :issue:`1700288`.)" +msgstr "" + +#: ../../whatsnew/2.6.rst:1710 +msgid "" +"By default, this change is only applied to types that are included with the " +"Python core. Extension modules may not necessarily be compatible with this " +"cache, so they must explicitly add :c:macro:`Py_TPFLAGS_HAVE_VERSION_TAG` to" +" the module's ``tp_flags`` field to enable the method cache. (To be " +"compatible with the method cache, the extension module's code must not " +"directly access and modify the ``tp_dict`` member of any of the types it " +"implements. Most modules don't do this, but it's impossible for the Python " +"interpreter to determine that. See :issue:`1878` for some discussion.)" +msgstr "" + +#: ../../whatsnew/2.6.rst:1721 +msgid "" +"Function calls that use keyword arguments are significantly faster by doing " +"a quick pointer comparison, usually saving the time of a full string " +"comparison. (Contributed by Raymond Hettinger, after an initial " +"implementation by Antoine Pitrou; :issue:`1819`.)" +msgstr "" + +#: ../../whatsnew/2.6.rst:1726 +msgid "" +"All of the functions in the :mod:`struct` module have been rewritten in C, " +"thanks to work at the Need For Speed sprint. (Contributed by Raymond " +"Hettinger.)" +msgstr "" + +#: ../../whatsnew/2.6.rst:1730 +msgid "" +"Some of the standard built-in types now set a bit in their type objects. " +"This speeds up checking whether an object is a subclass of one of these " +"types. (Contributed by Neal Norwitz.)" +msgstr "" + +#: ../../whatsnew/2.6.rst:1734 +msgid "" +"Unicode strings now use faster code for detecting whitespace and line " +"breaks; this speeds up the :meth:`split` method by about 25% and " +":meth:`splitlines` by 35%. (Contributed by Antoine Pitrou.) Memory usage is" +" reduced by using pymalloc for the Unicode string's data." +msgstr "" + +#: ../../whatsnew/2.6.rst:1740 +msgid "" +"The ``with`` statement now stores the :meth:`__exit__` method on the stack, " +"producing a small speedup. (Implemented by Jeffrey Yasskin.)" +msgstr "" + +#: ../../whatsnew/2.6.rst:1743 +msgid "" +"To reduce memory usage, the garbage collector will now clear internal free " +"lists when garbage-collecting the highest generation of objects. This may " +"return memory to the operating system sooner." +msgstr "" + +#: ../../whatsnew/2.6.rst:1752 +msgid "Interpreter Changes" +msgstr "解释器改动" + +#: ../../whatsnew/2.6.rst:1754 +msgid "" +"Two command-line options have been reserved for use by other Python " +"implementations. The :option:`-J` switch has been reserved for use by " +"Jython for Jython-specific options, such as switches that are passed to the " +"underlying JVM. :option:`-X` has been reserved for options specific to a " +"particular implementation of Python such as CPython, Jython, or IronPython." +" If either option is used with Python 2.6, the interpreter will report that" +" the option isn't currently used." +msgstr "" + +#: ../../whatsnew/2.6.rst:1762 +msgid "" +"Python can now be prevented from writing :file:`.pyc` or :file:`.pyo` files " +"by supplying the :option:`-B` switch to the Python interpreter, or by " +"setting the :envvar:`PYTHONDONTWRITEBYTECODE` environment variable before " +"running the interpreter. This setting is available to Python programs as " +"the ``sys.dont_write_bytecode`` variable, and Python code can change the " +"value to modify the interpreter's behaviour. (Contributed by Neal Norwitz " +"and Georg Brandl.)" +msgstr "" + +#: ../../whatsnew/2.6.rst:1770 +msgid "" +"The encoding used for standard input, output, and standard error can be " +"specified by setting the :envvar:`PYTHONIOENCODING` environment variable " +"before running the interpreter. The value should be a string in the form " +"```` or ``:``. The *encoding* part " +"specifies the encoding's name, e.g. ``utf-8`` or ``latin-1``; the optional " +"*errorhandler* part specifies what to do with characters that can't be " +"handled by the encoding, and should be one of \"error\", \"ignore\", or " +"\"replace\". (Contributed by Martin von Löwis.)" +msgstr "" + +#: ../../whatsnew/2.6.rst:1783 +msgid "New and Improved Modules" +msgstr "新增和改进的模块" + +#: ../../whatsnew/2.6.rst:1785 +msgid "" +"As in every release, Python's standard library received a number of " +"enhancements and bug fixes. Here's a partial list of the most notable " +"changes, sorted alphabetically by module name. Consult the :file:`Misc/NEWS`" +" file in the source tree for a more complete list of changes, or look " +"through the Subversion logs for all the details." +msgstr "" + +#: ../../whatsnew/2.6.rst:1791 +msgid "" +"The :mod:`asyncore` and :mod:`asynchat` modules are being actively " +"maintained again, and a number of patches and bugfixes were applied. " +"(Maintained by Josiah Carlson; see :issue:`1736190` for one patch.)" +msgstr "" + +#: ../../whatsnew/2.6.rst:1796 +msgid "" +"The :mod:`bsddb` module also has a new maintainer, Jesús Cea Avión, and the " +"package is now available as a standalone package. The web page for the " +"package is `www.jcea.es/programacion/pybsddb.htm " +"`__. The plan is to remove the" +" package from the standard library in Python 3.0, because its pace of " +"releases is much more frequent than Python's." +msgstr "" + +#: ../../whatsnew/2.6.rst:1804 +msgid "" +"The :mod:`bsddb.dbshelve` module now uses the highest pickling protocol " +"available, instead of restricting itself to protocol 1. (Contributed by W. " +"Barnes.)" +msgstr "" + +#: ../../whatsnew/2.6.rst:1808 +msgid "" +"The :mod:`cgi` module will now read variables from the query string of an " +"HTTP POST request. This makes it possible to use form actions with URLs " +"that include query strings such as \"/cgi-bin/add.py?category=1\". " +"(Contributed by Alexandre Fiori and Nubis; :issue:`1817`.)" +msgstr "" + +#: ../../whatsnew/2.6.rst:1814 +msgid "" +"The :func:`parse_qs` and :func:`parse_qsl` functions have been relocated " +"from the :mod:`cgi` module to the :mod:`urlparse` module. The versions still" +" available in the :mod:`cgi` module will trigger " +":exc:`PendingDeprecationWarning` messages in 2.6 (:issue:`600362`)." +msgstr "" + +#: ../../whatsnew/2.6.rst:1820 +msgid "" +"The :mod:`cmath` module underwent extensive revision, contributed by Mark " +"Dickinson and Christian Heimes. Five new functions were added:" +msgstr "" + +#: ../../whatsnew/2.6.rst:1824 +msgid "" +":func:`polar` converts a complex number to polar form, returning the modulus" +" and argument of the complex number." +msgstr "" + +#: ../../whatsnew/2.6.rst:1827 +msgid "" +":func:`rect` does the opposite, turning a modulus, argument pair back into " +"the corresponding complex number." +msgstr "" + +#: ../../whatsnew/2.6.rst:1830 +msgid "" +":func:`phase` returns the argument (also called the angle) of a complex " +"number." +msgstr "" + +#: ../../whatsnew/2.6.rst:1833 +msgid "" +":func:`isnan` returns True if either the real or imaginary part of its " +"argument is a NaN." +msgstr "" + +#: ../../whatsnew/2.6.rst:1836 +msgid "" +":func:`isinf` returns True if either the real or imaginary part of its " +"argument is infinite." +msgstr "" + +#: ../../whatsnew/2.6.rst:1839 +msgid "" +"The revisions also improved the numerical soundness of the :mod:`cmath` " +"module. For all functions, the real and imaginary parts of the results are " +"accurate to within a few units of least precision (ulps) whenever possible." +" See :issue:`1381` for the details. The branch cuts for :func:`asinh`, " +":func:`atanh`: and :func:`atan` have also been corrected." +msgstr "" + +#: ../../whatsnew/2.6.rst:1846 +msgid "" +"The tests for the module have been greatly expanded; nearly 2000 new test " +"cases exercise the algebraic functions." +msgstr "" + +#: ../../whatsnew/2.6.rst:1849 +msgid "" +"On IEEE 754 platforms, the :mod:`cmath` module now handles IEEE 754 special " +"values and floating-point exceptions in a manner consistent with Annex 'G' " +"of the C99 standard." +msgstr "" + +#: ../../whatsnew/2.6.rst:1853 +msgid "" +"A new data type in the :mod:`collections` module: " +":class:`namedtuple(typename, fieldnames)` is a factory function that creates" +" subclasses of the standard tuple whose fields are accessible by name as " +"well as index. For example::" +msgstr "" + +#: ../../whatsnew/2.6.rst:1875 +msgid "" +"Several places in the standard library that returned tuples have been " +"modified to return :class:`namedtuple` instances. For example, the " +":meth:`Decimal.as_tuple` method now returns a named tuple with :attr:`sign`," +" :attr:`digits`, and :attr:`exponent` fields." +msgstr "" + +#: ../../whatsnew/2.6.rst:1882 +msgid "" +"Another change to the :mod:`collections` module is that the :class:`deque` " +"type now supports an optional *maxlen* parameter; if supplied, the deque's " +"size will be restricted to no more than *maxlen* items. Adding more items " +"to a full deque causes old items to be discarded." +msgstr "" + +#: ../../whatsnew/2.6.rst:1903 +msgid "" +"The :mod:`Cookie` module's :class:`Morsel` objects now support an " +":attr:`httponly` attribute. In some browsers. cookies with this attribute " +"set cannot be accessed or manipulated by JavaScript code. (Contributed by " +"Arvin Schnell; :issue:`1638033`.)" +msgstr "" + +#: ../../whatsnew/2.6.rst:1908 +msgid "" +"A new window method in the :mod:`curses` module, :meth:`chgat`, changes the " +"display attributes for a certain number of characters on a single line. " +"(Contributed by Fabian Kreutz.)" +msgstr "" + +#: ../../whatsnew/2.6.rst:1918 +msgid "" +"The :class:`Textbox` class in the :mod:`curses.textpad` module now supports " +"editing in insert mode as well as overwrite mode. Insert mode is enabled by " +"supplying a true value for the *insert_mode* parameter when creating the " +":class:`Textbox` instance." +msgstr "" + +#: ../../whatsnew/2.6.rst:1923 +msgid "" +"The :mod:`datetime` module's :meth:`strftime` methods now support a ``%f`` " +"format code that expands to the number of microseconds in the object, zero-" +"padded on the left to six places. (Contributed by Skip Montanaro; " +":issue:`1158`.)" +msgstr "" + +#: ../../whatsnew/2.6.rst:1928 +msgid "" +"The :mod:`decimal` module was updated to version 1.66 of `the General " +"Decimal Specification `__. " +"New features include some methods for some basic mathematical functions such" +" as :meth:`exp` and :meth:`log10`::" +msgstr "" + +#: ../../whatsnew/2.6.rst:1940 +msgid "" +"The :meth:`as_tuple` method of :class:`Decimal` objects now returns a named " +"tuple with :attr:`sign`, :attr:`digits`, and :attr:`exponent` fields." +msgstr "" +"现在 :class:`Decimal` 对象的 :meth:`as_tuple` 方法将返回一个由 :attr:`sign`, " +":attr:`digits` 和 :attr:`exponent` 字段组成的具名元组。" + +#: ../../whatsnew/2.6.rst:1943 +msgid "" +"(Implemented by Facundo Batista and Mark Dickinson. Named tuple support " +"added by Raymond Hettinger.)" +msgstr "" +"(由 Facundo Batista 和 Mark Dickinson 实现。 具名元组支持由 Raymond Hettinger 添加。)" + +#: ../../whatsnew/2.6.rst:1946 +msgid "" +"The :mod:`difflib` module's :class:`SequenceMatcher` class now returns named" +" tuples representing matches, with :attr:`a`, :attr:`b`, and :attr:`size` " +"attributes. (Contributed by Raymond Hettinger.)" +msgstr "" +"现在 :mod:`difflib` 模块的 :class:`SequenceMatcher` 类将返回代表匹配结果的具名元组,包含 :attr:`a`," +" :attr:`b` 和 :attr:`size` 等属性。 (由 Raymond Hettinger 贡献。)" + +#: ../../whatsnew/2.6.rst:1951 +msgid "" +"An optional ``timeout`` parameter, specifying a timeout measured in seconds," +" was added to the :class:`ftplib.FTP` class constructor as well as the " +":meth:`connect` method. (Added by Facundo Batista.) Also, the :class:`FTP` " +"class's :meth:`storbinary` and :meth:`storlines` now take an optional " +"*callback* parameter that will be called with each block of data after the " +"data has been sent. (Contributed by Phil Schwartz; :issue:`1221598`.)" +msgstr "" + +#: ../../whatsnew/2.6.rst:1959 +msgid "" +"The :func:`reduce` built-in function is also available in the " +":mod:`functools` module. In Python 3.0, the builtin has been dropped and " +":func:`reduce` is only available from :mod:`functools`; currently there are " +"no plans to drop the builtin in the 2.x series. (Patched by Christian " +"Heimes; :issue:`1739906`.)" +msgstr "" + +#: ../../whatsnew/2.6.rst:1965 +msgid "" +"When possible, the :mod:`getpass` module will now use :file:`/dev/tty` to " +"print a prompt message and read the password, falling back to standard error" +" and standard input. If the password may be echoed to the terminal, a " +"warning is printed before the prompt is displayed. (Contributed by Gregory " +"P. Smith.)" +msgstr "" + +#: ../../whatsnew/2.6.rst:1971 +msgid "" +"The :func:`glob.glob` function can now return Unicode filenames if a Unicode" +" path was used and Unicode filenames are matched within the directory. " +"(:issue:`1001604`)" +msgstr "" + +#: ../../whatsnew/2.6.rst:1975 +msgid "" +"A new function in the :mod:`heapq` module, ``merge(iter1, iter2, ...)``, " +"takes any number of iterables returning data in sorted order, and returns a " +"new generator that returns the contents of all the iterators, also in sorted" +" order. For example::" +msgstr "" + +#: ../../whatsnew/2.6.rst:1983 +msgid "" +"Another new function, ``heappushpop(heap, item)``, pushes *item* onto " +"*heap*, then pops off and returns the smallest item. This is more efficient " +"than making a call to :func:`heappush` and then :func:`heappop`." +msgstr "" + +#: ../../whatsnew/2.6.rst:1988 +msgid "" +":mod:`heapq` is now implemented to only use less-than comparison, instead of" +" the less-than-or-equal comparison it previously used. This makes " +":mod:`heapq`'s usage of a type match the :meth:`list.sort` method. " +"(Contributed by Raymond Hettinger.)" +msgstr "" + +#: ../../whatsnew/2.6.rst:1994 +msgid "" +"An optional ``timeout`` parameter, specifying a timeout measured in seconds," +" was added to the :class:`httplib.HTTPConnection` and " +":class:`HTTPSConnection` class constructors. (Added by Facundo Batista.)" +msgstr "" + +#: ../../whatsnew/2.6.rst:1999 +msgid "" +"Most of the :mod:`inspect` module's functions, such as :func:`getmoduleinfo`" +" and :func:`getargs`, now return named tuples. In addition to behaving like " +"tuples, the elements of the return value can also be accessed as " +"attributes. (Contributed by Raymond Hettinger.)" +msgstr "" + +#: ../../whatsnew/2.6.rst:2005 +msgid "" +"Some new functions in the module include :func:`isgenerator`, " +":func:`isgeneratorfunction`, and :func:`isabstract`." +msgstr "" +"此模块中的新增函数包括 :func:`isgenerator`, :func:`isgeneratorfunction` 和 " +":func:`isabstract`。" + +#: ../../whatsnew/2.6.rst:2009 +msgid "The :mod:`itertools` module gained several new functions." +msgstr ":mod:`itertools` 模块增加了几个新函数。" + +#: ../../whatsnew/2.6.rst:2011 +msgid "" +"``izip_longest(iter1, iter2, ...[, fillvalue])`` makes tuples from each of " +"the elements; if some of the iterables are shorter than others, the missing " +"values are set to *fillvalue*. For example::" +msgstr "" + +#: ../../whatsnew/2.6.rst:2018 +msgid "" +"``product(iter1, iter2, ..., [repeat=N])`` returns the Cartesian product of " +"the supplied iterables, a set of tuples containing every possible " +"combination of the elements returned from each iterable. ::" +msgstr "" + +#: ../../whatsnew/2.6.rst:2027 +msgid "" +"The optional *repeat* keyword argument is used for taking the product of an " +"iterable or a set of iterables with themselves, repeated *N* times. With a " +"single iterable argument, *N*-tuples are returned::" +msgstr "" + +#: ../../whatsnew/2.6.rst:2036 +msgid "With two iterables, *2N*-tuples are returned. ::" +msgstr "" + +#: ../../whatsnew/2.6.rst:2044 +msgid "" +"``combinations(iterable, r)`` returns sub-sequences of length *r* from the " +"elements of *iterable*. ::" +msgstr "``combinations(iterable, r)`` 基于 *iterable* 的元素返回长度为 *r* 的子序列。 ::" + +#: ../../whatsnew/2.6.rst:2055 +msgid "" +"``permutations(iter[, r])`` returns all the permutations of length *r* of " +"the iterable's elements. If *r* is not specified, it will default to the " +"number of elements produced by the iterable. ::" +msgstr "" + +#: ../../whatsnew/2.6.rst:2065 +msgid "" +"``itertools.chain(*iterables)`` is an existing function in :mod:`itertools` " +"that gained a new constructor in Python 2.6. " +"``itertools.chain.from_iterable(iterable)`` takes a single iterable that " +"should return other iterables. :func:`chain` will then return all the " +"elements of the first iterable, then all the elements of the second, and so " +"on. ::" +msgstr "" + +#: ../../whatsnew/2.6.rst:2075 +msgid "(All contributed by Raymond Hettinger.)" +msgstr "(全部由 Raymond Hettinger 贡献。)" + +#: ../../whatsnew/2.6.rst:2077 +msgid "" +"The :mod:`logging` module's :class:`FileHandler` class and its subclasses " +":class:`WatchedFileHandler`, :class:`RotatingFileHandler`, and " +":class:`TimedRotatingFileHandler` now have an optional *delay* parameter to " +"their constructors. If *delay* is true, opening of the log file is deferred" +" until the first :meth:`emit` call is made. (Contributed by Vinay Sajip.)" +msgstr "" + +#: ../../whatsnew/2.6.rst:2084 +msgid "" +":class:`TimedRotatingFileHandler` also has a *utc* constructor parameter. " +"If the argument is true, UTC time will be used in determining when midnight " +"occurs and in generating filenames; otherwise local time will be used." +msgstr "" + +#: ../../whatsnew/2.6.rst:2089 +msgid "Several new functions were added to the :mod:`math` module:" +msgstr "为 :mod:`math` 模块添加了一些新函数:" + +#: ../../whatsnew/2.6.rst:2091 +msgid "" +":func:`~math.isinf` and :func:`~math.isnan` determine whether a given float " +"is a (positive or negative) infinity or a NaN (Not a Number), respectively." +msgstr "" + +#: ../../whatsnew/2.6.rst:2094 +msgid "" +":func:`~math.copysign` copies the sign bit of an IEEE 754 number, returning " +"the absolute value of *x* combined with the sign bit of *y*. For example, " +"``math.copysign(1, -0.0)`` returns -1.0. (Contributed by Christian Heimes.)" +msgstr "" + +#: ../../whatsnew/2.6.rst:2099 +msgid "" +":func:`~math.factorial` computes the factorial of a number. (Contributed by " +"Raymond Hettinger; :issue:`2138`.)" +msgstr "" + +#: ../../whatsnew/2.6.rst:2102 +msgid "" +":func:`~math.fsum` adds up the stream of numbers from an iterable, and is " +"careful to avoid loss of precision through using partial sums. (Contributed " +"by Jean Brouwers, Raymond Hettinger, and Mark Dickinson; :issue:`2819`.)" +msgstr "" + +#: ../../whatsnew/2.6.rst:2107 +msgid "" +":func:`~math.acosh`, :func:`~math.asinh` and :func:`~math.atanh` compute the" +" inverse hyperbolic functions." +msgstr "" + +#: ../../whatsnew/2.6.rst:2110 +msgid ":func:`~math.log1p` returns the natural logarithm of *1+x* (base *e*)." +msgstr ":func:`~math.log1p` 返回 *1+x* (以 *e* 为底) 的自然对数。" + +#: ../../whatsnew/2.6.rst:2113 +msgid "" +":func:`trunc` rounds a number toward zero, returning the closest " +":class:`Integral` that's between the function's argument and zero. Added as " +"part of the backport of `PEP 3141's type hierarchy for numbers " +"<#pep-3141>`__." +msgstr "" + +#: ../../whatsnew/2.6.rst:2118 +msgid "" +"The :mod:`math` module has been improved to give more consistent behaviour " +"across platforms, especially with respect to handling of floating-point " +"exceptions and IEEE 754 special values." +msgstr "" + +#: ../../whatsnew/2.6.rst:2122 +msgid "" +"Whenever possible, the module follows the recommendations of the C99 " +"standard about 754's special values. For example, ``sqrt(-1.)`` should now " +"give a :exc:`ValueError` across almost all platforms, while " +"``sqrt(float('NaN'))`` should return a NaN on all IEEE 754 platforms. Where" +" Annex 'F' of the C99 standard recommends signaling 'divide-by-zero' or " +"'invalid', Python will raise :exc:`ValueError`. Where Annex 'F' of the C99 " +"standard recommends signaling 'overflow', Python will raise " +":exc:`OverflowError`. (See :issue:`711019` and :issue:`1640`.)" +msgstr "" + +#: ../../whatsnew/2.6.rst:2132 +msgid "(Contributed by Christian Heimes and Mark Dickinson.)" +msgstr "(由 Christian Heimes 和 Mark Dickinson 贡献。)" + +#: ../../whatsnew/2.6.rst:2134 +msgid "" +":class:`~mmap.mmap` objects now have a :meth:`rfind` method that searches " +"for a substring beginning at the end of the string and searching backwards." +" The :meth:`find` method also gained an *end* parameter giving an index at " +"which to stop searching. (Contributed by John Lenton.)" +msgstr "" + +#: ../../whatsnew/2.6.rst:2140 +msgid "" +"The :mod:`operator` module gained a :func:`methodcaller` function that takes" +" a name and an optional set of arguments, returning a callable that will " +"call the named function on any arguments passed to it. For example::" +msgstr "" + +#: ../../whatsnew/2.6.rst:2150 +msgid "" +"(Contributed by Georg Brandl, after a suggestion by Gregory Petrosyan.)" +msgstr "(由 Gregory Petrosyan 提供建议,之后由 Georg Brandl 贡献。)" + +#: ../../whatsnew/2.6.rst:2152 +msgid "" +"The :func:`attrgetter` function now accepts dotted names and performs the " +"corresponding attribute lookups::" +msgstr "现在 :func:`attrgetter` 函数可接受带点号的名称并执行相应的属性查找::" + +#: ../../whatsnew/2.6.rst:2162 +msgid "(Contributed by Georg Brandl, after a suggestion by Barry Warsaw.)" +msgstr "(由 Barry Warsaw 提供建议,之后由 Georg Brandl 贡献。)" + +#: ../../whatsnew/2.6.rst:2164 +msgid "" +"The :mod:`os` module now wraps several new system calls. ``fchmod(fd, " +"mode)`` and ``fchown(fd, uid, gid)`` change the mode and ownership of an " +"opened file, and ``lchmod(path, mode)`` changes the mode of a symlink. " +"(Contributed by Georg Brandl and Christian Heimes.)" +msgstr "" + +#: ../../whatsnew/2.6.rst:2170 +msgid "" +":func:`chflags` and :func:`lchflags` are wrappers for the corresponding " +"system calls (where they're available), changing the flags set on a file. " +"Constants for the flag values are defined in the :mod:`stat` module; some " +"possible values include :const:`UF_IMMUTABLE` to signal the file may not be " +"changed and :const:`UF_APPEND` to indicate that data can only be appended to" +" the file. (Contributed by M. Levinson.)" +msgstr "" + +#: ../../whatsnew/2.6.rst:2178 +msgid "" +"``os.closerange(low, high)`` efficiently closes all file descriptors from " +"*low* to *high*, ignoring any errors and not including *high* itself. This " +"function is now used by the :mod:`subprocess` module to make starting " +"processes faster. (Contributed by Georg Brandl; :issue:`1663329`.)" +msgstr "" + +#: ../../whatsnew/2.6.rst:2183 +msgid "" +"The ``os.environ`` object's :meth:`clear` method will now unset the " +"environment variables using :func:`os.unsetenv` in addition to clearing the " +"object's keys. (Contributed by Martin Horcicka; :issue:`1181`.)" +msgstr "" + +#: ../../whatsnew/2.6.rst:2187 +msgid "" +"The :func:`os.walk` function now has a ``followlinks`` parameter. If set to " +"True, it will follow symlinks pointing to directories and visit the " +"directory's contents. For backward compatibility, the parameter's default " +"value is false. Note that the function can fall into an infinite recursion " +"if there's a symlink that points to a parent directory. (:issue:`1273829`)" +msgstr "" + +#: ../../whatsnew/2.6.rst:2194 +msgid "" +"In the :mod:`os.path` module, the :func:`splitext` function has been changed" +" to not split on leading period characters. This produces better results " +"when operating on Unix's dot-files. For example, " +"``os.path.splitext('.ipython')`` now returns ``('.ipython', '')`` instead of" +" ``('', '.ipython')``. (:issue:`1115886`)" +msgstr "" + +#: ../../whatsnew/2.6.rst:2201 +msgid "" +"A new function, ``os.path.relpath(path, start='.')``, returns a relative " +"path from the ``start`` path, if it's supplied, or from the current working " +"directory to the destination ``path``. (Contributed by Richard Barran; " +":issue:`1339796`.)" +msgstr "" + +#: ../../whatsnew/2.6.rst:2206 +msgid "" +"On Windows, :func:`os.path.expandvars` will now expand environment variables" +" given in the form \"%var%\", and \"~user\" will be expanded into the user's" +" home directory path. (Contributed by Josiah Carlson; :issue:`957650`.)" +msgstr "" + +#: ../../whatsnew/2.6.rst:2211 +msgid "" +"The Python debugger provided by the :mod:`pdb` module gained a new command: " +"\"run\" restarts the Python program being debugged and can optionally take " +"new command-line arguments for the program. (Contributed by Rocky Bernstein;" +" :issue:`1393667`.)" +msgstr "" + +#: ../../whatsnew/2.6.rst:2216 +msgid "" +"The :func:`pdb.post_mortem` function, used to begin debugging a traceback, " +"will now use the traceback returned by :func:`sys.exc_info` if no traceback " +"is supplied. (Contributed by Facundo Batista; :issue:`1106316`.)" +msgstr "" + +#: ../../whatsnew/2.6.rst:2221 +msgid "" +"The :mod:`pickletools` module now has an :func:`optimize` function that " +"takes a string containing a pickle and removes some unused opcodes, " +"returning a shorter pickle that contains the same data structure. " +"(Contributed by Raymond Hettinger.)" +msgstr "" + +#: ../../whatsnew/2.6.rst:2226 +msgid "" +"A :func:`get_data` function was added to the :mod:`pkgutil` module that " +"returns the contents of resource files included with an installed Python " +"package. For example::" +msgstr "" + +#: ../../whatsnew/2.6.rst:2241 +msgid "(Contributed by Paul Moore; :issue:`2439`.)" +msgstr "(由 Paul Moore 在 :issue:`2439` 中贡献。)" + +#: ../../whatsnew/2.6.rst:2243 +msgid "" +"The :mod:`pyexpat` module's :class:`Parser` objects now allow setting their " +":attr:`buffer_size` attribute to change the size of the buffer used to hold " +"character data. (Contributed by Achim Gaedke; :issue:`1137`.)" +msgstr "" + +#: ../../whatsnew/2.6.rst:2248 +msgid "" +"The :mod:`Queue` module now provides queue variants that retrieve entries in" +" different orders. The :class:`PriorityQueue` class stores queued items in " +"a heap and retrieves them in priority order, and :class:`LifoQueue` " +"retrieves the most recently added entries first, meaning that it behaves " +"like a stack. (Contributed by Raymond Hettinger.)" +msgstr "" + +#: ../../whatsnew/2.6.rst:2255 +msgid "" +"The :mod:`random` module's :class:`Random` objects can now be pickled on a " +"32-bit system and unpickled on a 64-bit system, and vice versa. " +"Unfortunately, this change also means that Python 2.6's :class:`Random` " +"objects can't be unpickled correctly on earlier versions of Python. " +"(Contributed by Shawn Ligocki; :issue:`1727780`.)" +msgstr "" + +#: ../../whatsnew/2.6.rst:2262 +msgid "" +"The new ``triangular(low, high, mode)`` function returns random numbers " +"following a triangular distribution. The returned values are between *low*" +" and *high*, not including *high* itself, and with *mode* as the most " +"frequently occurring value in the distribution. (Contributed by Wladmir van" +" der Laan and Raymond Hettinger; :issue:`1681432`.)" +msgstr "" + +#: ../../whatsnew/2.6.rst:2269 +msgid "" +"Long regular expression searches carried out by the :mod:`re` module will " +"check for signals being delivered, so time-consuming searches can now be " +"interrupted. (Contributed by Josh Hoyt and Ralf Schmitt; :issue:`846388`.)" +msgstr "" + +#: ../../whatsnew/2.6.rst:2274 +msgid "" +"The regular expression module is implemented by compiling bytecodes for a " +"tiny regex-specific virtual machine. Untrusted code could create malicious " +"strings of bytecode directly and cause crashes, so Python 2.6 includes a " +"verifier for the regex bytecode. (Contributed by Guido van Rossum from work " +"for Google App Engine; :issue:`3487`.)" +msgstr "" + +#: ../../whatsnew/2.6.rst:2281 +msgid "" +"The :mod:`rlcompleter` module's :meth:`Completer.complete()` method will now" +" ignore exceptions triggered while evaluating a name. (Fixed by Lorenz " +"Quack; :issue:`2250`.)" +msgstr "" + +#: ../../whatsnew/2.6.rst:2285 +msgid "" +"The :mod:`sched` module's :class:`scheduler` instances now have a read-only " +":attr:`queue` attribute that returns the contents of the scheduler's queue, " +"represented as a list of named tuples with the fields ``(time, priority, " +"action, argument)``. (Contributed by Raymond Hettinger; :issue:`1861`.)" +msgstr "" + +#: ../../whatsnew/2.6.rst:2291 +msgid "" +"The :mod:`select` module now has wrapper functions for the Linux " +":c:func:`epoll` and BSD :c:func:`kqueue` system calls. :meth:`modify` method" +" was added to the existing :class:`poll` objects; ``pollobj.modify(fd, " +"eventmask)`` takes a file descriptor or file object and an event mask, " +"modifying the recorded event mask for that file. (Contributed by Christian " +"Heimes; :issue:`1657`.)" +msgstr "" + +#: ../../whatsnew/2.6.rst:2299 +msgid "" +"The :func:`shutil.copytree` function now has an optional *ignore* argument " +"that takes a callable object. This callable will receive each directory " +"path and a list of the directory's contents, and returns a list of names " +"that will be ignored, not copied." +msgstr "" + +#: ../../whatsnew/2.6.rst:2304 +msgid "" +"The :mod:`shutil` module also provides an :func:`ignore_patterns` function " +"for use with this new parameter. :func:`ignore_patterns` takes an arbitrary" +" number of glob-style patterns and returns a callable that will ignore any " +"files and directories that match any of these patterns. The following " +"example copies a directory tree, but skips both :file:`.svn` directories and" +" Emacs backup files, which have names ending with '~'::" +msgstr "" + +#: ../../whatsnew/2.6.rst:2315 +msgid "(Contributed by Tarek Ziadé; :issue:`2663`.)" +msgstr "(由 Tarek Ziadé 在 :issue:`2663` 中贡献。)" + +#: ../../whatsnew/2.6.rst:2317 +msgid "" +"Integrating signal handling with GUI handling event loops like those used by" +" Tkinter or GTk+ has long been a problem; most software ends up polling, " +"waking up every fraction of a second to check if any GUI events have " +"occurred. The :mod:`signal` module can now make this more efficient. Calling" +" ``signal.set_wakeup_fd(fd)`` sets a file descriptor to be used; when a " +"signal is received, a byte is written to that file descriptor. There's also" +" a C-level function, :c:func:`PySignal_SetWakeupFd`, for setting the " +"descriptor." +msgstr "" + +#: ../../whatsnew/2.6.rst:2327 +msgid "" +"Event loops will use this by opening a pipe to create two descriptors, one " +"for reading and one for writing. The writable descriptor will be passed to " +":func:`set_wakeup_fd`, and the readable descriptor will be added to the list" +" of descriptors monitored by the event loop via :c:func:`select` or " +":c:func:`poll`. On receiving a signal, a byte will be written and the main " +"event loop will be woken up, avoiding the need to poll." +msgstr "" + +#: ../../whatsnew/2.6.rst:2335 +msgid "(Contributed by Adam Olsen; :issue:`1583`.)" +msgstr "(由 Adam Olsen 在 :issue:`1583` 中贡献。)" + +#: ../../whatsnew/2.6.rst:2337 +msgid "" +"The :func:`siginterrupt` function is now available from Python code, and " +"allows changing whether signals can interrupt system calls or not. " +"(Contributed by Ralf Schmitt.)" +msgstr "" + +#: ../../whatsnew/2.6.rst:2341 +msgid "" +"The :func:`setitimer` and :func:`getitimer` functions have also been added " +"(where they're available). :func:`setitimer` allows setting interval timers" +" that will cause a signal to be delivered to the process after a specified " +"time, measured in wall-clock time, consumed process time, or combined " +"process+system time. (Contributed by Guilherme Polo; :issue:`2240`.)" +msgstr "" + +#: ../../whatsnew/2.6.rst:2348 +msgid "" +"The :mod:`smtplib` module now supports SMTP over SSL thanks to the addition " +"of the :class:`SMTP_SSL` class. This class supports an interface identical " +"to the existing :class:`SMTP` class. (Contributed by Monty Taylor.) Both " +"class constructors also have an optional ``timeout`` parameter that " +"specifies a timeout for the initial connection attempt, measured in seconds." +" (Contributed by Facundo Batista.)" +msgstr "" + +#: ../../whatsnew/2.6.rst:2356 +msgid "" +"An implementation of the LMTP protocol (:rfc:`2033`) was also added to the " +"module. LMTP is used in place of SMTP when transferring e-mail between " +"agents that don't manage a mail queue. (LMTP implemented by Leif Hedstrom; " +":issue:`957003`.)" +msgstr "" + +#: ../../whatsnew/2.6.rst:2361 +msgid "" +":meth:`SMTP.starttls` now complies with :rfc:`3207` and forgets any " +"knowledge obtained from the server not obtained from the TLS negotiation " +"itself. (Patch contributed by Bill Fenner; :issue:`829951`.)" +msgstr "" + +#: ../../whatsnew/2.6.rst:2366 +msgid "" +"The :mod:`socket` module now supports TIPC (http://tipc.sourceforge.net/), a" +" high-performance non-IP-based protocol designed for use in clustered " +"environments. TIPC addresses are 4- or 5-tuples. (Contributed by Alberto " +"Bertogli; :issue:`1646`.)" +msgstr "" + +#: ../../whatsnew/2.6.rst:2371 +msgid "" +"A new function, :func:`create_connection`, takes an address and connects to " +"it using an optional timeout value, returning the connected socket object. " +"This function also looks up the address's type and connects to it using IPv4" +" or IPv6 as appropriate. Changing your code to use " +":func:`create_connection` instead of ``socket(socket.AF_INET, ...)`` may be " +"all that's required to make your code work with IPv6." +msgstr "" + +#: ../../whatsnew/2.6.rst:2379 +msgid "" +"The base classes in the :mod:`SocketServer` module now support calling a " +":meth:`handle_timeout` method after a span of inactivity specified by the " +"server's :attr:`timeout` attribute. (Contributed by Michael Pomraning.) " +"The :meth:`serve_forever` method now takes an optional poll interval " +"measured in seconds, controlling how often the server will check for a " +"shutdown request. (Contributed by Pedro Werneck and Jeffrey Yasskin; " +":issue:`742598`, :issue:`1193577`.)" +msgstr "" + +#: ../../whatsnew/2.6.rst:2388 +msgid "" +"The :mod:`sqlite3` module, maintained by Gerhard Häring, has been updated " +"from version 2.3.2 in Python 2.5 to version 2.4.1." +msgstr "" + +#: ../../whatsnew/2.6.rst:2392 +msgid "" +"The :mod:`struct` module now supports the C99 :c:type:`_Bool` type, using " +"the format character ``'?'``. (Contributed by David Remahl.)" +msgstr "" + +#: ../../whatsnew/2.6.rst:2396 +msgid "" +"The :class:`Popen` objects provided by the :mod:`subprocess` module now have" +" :meth:`terminate`, :meth:`kill`, and :meth:`send_signal` methods. On " +"Windows, :meth:`send_signal` only supports the :const:`SIGTERM` signal, and " +"all these methods are aliases for the Win32 API function " +":c:func:`TerminateProcess`. (Contributed by Christian Heimes.)" +msgstr "" + +#: ../../whatsnew/2.6.rst:2403 +msgid "" +"A new variable in the :mod:`sys` module, :attr:`float_info`, is an object " +"containing information derived from the :file:`float.h` file about the " +"platform's floating-point support. Attributes of this object include " +":attr:`mant_dig` (number of digits in the mantissa), :attr:`epsilon` " +"(smallest difference between 1.0 and the next largest value representable), " +"and several others. (Contributed by Christian Heimes; :issue:`1534`.)" +msgstr "" + +#: ../../whatsnew/2.6.rst:2411 +msgid "" +"Another new variable, :attr:`dont_write_bytecode`, controls whether Python " +"writes any :file:`.pyc` or :file:`.pyo` files on importing a module. If this" +" variable is true, the compiled files are not written. The variable is " +"initially set on start-up by supplying the :option:`-B` switch to the Python" +" interpreter, or by setting the :envvar:`PYTHONDONTWRITEBYTECODE` " +"environment variable before running the interpreter. Python code can " +"subsequently change the value of this variable to control whether bytecode " +"files are written or not. (Contributed by Neal Norwitz and Georg Brandl.)" +msgstr "" + +#: ../../whatsnew/2.6.rst:2422 +msgid "" +"Information about the command-line arguments supplied to the Python " +"interpreter is available by reading attributes of a named tuple available as" +" ``sys.flags``. For example, the :attr:`verbose` attribute is true if " +"Python was executed in verbose mode, :attr:`debug` is true in debugging " +"mode, etc. These attributes are all read-only. (Contributed by Christian " +"Heimes.)" +msgstr "" + +#: ../../whatsnew/2.6.rst:2430 +msgid "" +"A new function, :func:`getsizeof`, takes a Python object and returns the " +"amount of memory used by the object, measured in bytes. Built-in objects " +"return correct results; third-party extensions may not, but can define a " +":meth:`__sizeof__` method to return the object's size. (Contributed by " +"Robert Schuppenies; :issue:`2898`.)" +msgstr "" + +#: ../../whatsnew/2.6.rst:2437 +msgid "" +"It's now possible to determine the current profiler and tracer functions by " +"calling :func:`sys.getprofile` and :func:`sys.gettrace`. (Contributed by " +"Georg Brandl; :issue:`1648`.)" +msgstr "" + +#: ../../whatsnew/2.6.rst:2441 +msgid "" +"The :mod:`tarfile` module now supports POSIX.1-2001 (pax) tarfiles in " +"addition to the POSIX.1-1988 (ustar) and GNU tar formats that were already " +"supported. The default format is GNU tar; specify the ``format`` parameter " +"to open a file using a different format::" +msgstr "" + +#: ../../whatsnew/2.6.rst:2449 +msgid "" +"The new ``encoding`` and ``errors`` parameters specify an encoding and an " +"error handling scheme for character conversions. ``'strict'``, " +"``'ignore'``, and ``'replace'`` are the three standard ways Python can " +"handle errors,; ``'utf-8'`` is a special value that replaces bad characters " +"with their UTF-8 representation. (Character conversions occur because the " +"PAX format supports Unicode filenames, defaulting to UTF-8 encoding.)" +msgstr "" + +#: ../../whatsnew/2.6.rst:2457 +msgid "" +"The :meth:`TarFile.add` method now accepts an ``exclude`` argument that's a " +"function that can be used to exclude certain filenames from an archive. The " +"function must take a filename and return true if the file should be excluded" +" or false if it should be archived. The function is applied to both the name" +" initially passed to :meth:`add` and to the names of files in recursively-" +"added directories." +msgstr "" + +#: ../../whatsnew/2.6.rst:2465 +msgid "(All changes contributed by Lars Gustäbel)." +msgstr "(所有改变均由 Lars Gustäbel 贡献)。" + +#: ../../whatsnew/2.6.rst:2467 +msgid "" +"An optional ``timeout`` parameter was added to the :class:`telnetlib.Telnet`" +" class constructor, specifying a timeout measured in seconds. (Added by " +"Facundo Batista.)" +msgstr "" +"为 :class:`telnetlib.Telnet` 类构造器增加了可选的 ``timeout`` 形参,指定以秒为单位的超时设置。 (由 " +"Facundo Batista 添加。)" + +#: ../../whatsnew/2.6.rst:2471 +msgid "" +"The :class:`tempfile.NamedTemporaryFile` class usually deletes the temporary" +" file it created when the file is closed. This behaviour can now be changed" +" by passing ``delete=False`` to the constructor. (Contributed by Damien " +"Miller; :issue:`1537850`.)" +msgstr "" + +#: ../../whatsnew/2.6.rst:2476 +msgid "" +"A new class, :class:`SpooledTemporaryFile`, behaves like a temporary file " +"but stores its data in memory until a maximum size is exceeded. On reaching" +" that limit, the contents will be written to an on-disk temporary file. " +"(Contributed by Dustin J. Mitchell.)" +msgstr "" + +#: ../../whatsnew/2.6.rst:2481 +msgid "" +"The :class:`NamedTemporaryFile` and :class:`SpooledTemporaryFile` classes " +"both work as context managers, so you can write ``with " +"tempfile.NamedTemporaryFile() as tmp: ...``. (Contributed by Alexander " +"Belopolsky; :issue:`2021`.)" +msgstr "" + +#: ../../whatsnew/2.6.rst:2486 +msgid "" +"The :mod:`test.test_support` module gained a number of context managers " +"useful for writing tests. :func:`EnvironmentVarGuard` is a context manager " +"that temporarily changes environment variables and automatically restores " +"them to their old values." +msgstr "" + +#: ../../whatsnew/2.6.rst:2492 +msgid "" +"Another context manager, :class:`TransientResource`, can surround calls to " +"resources that may or may not be available; it will catch and ignore a " +"specified list of exceptions. For example, a network test may ignore " +"certain failures when connecting to an external web site::" +msgstr "" + +#: ../../whatsnew/2.6.rst:2503 +msgid "" +"Finally, :func:`check_warnings` resets the :mod:`warning` module's warning " +"filters and returns an object that will record all warning messages " +"triggered (:issue:`3781`)::" +msgstr "" + +#: ../../whatsnew/2.6.rst:2513 +msgid "(Contributed by Brett Cannon.)" +msgstr "(由 Brett Cannon 贡献。)" + +#: ../../whatsnew/2.6.rst:2515 +msgid "" +"The :mod:`textwrap` module can now preserve existing whitespace at the " +"beginnings and ends of the newly-created lines by specifying " +"``drop_whitespace=False`` as an argument::" +msgstr "" + +#: ../../whatsnew/2.6.rst:2534 +msgid "(Contributed by Dwayne Bailey; :issue:`1581073`.)" +msgstr "(由 Dwayne Bailey 在 :issue:`1581073` 中贡献。)" + +#: ../../whatsnew/2.6.rst:2536 +msgid "" +"The :mod:`threading` module API is being changed to use properties such as " +":attr:`daemon` instead of :meth:`setDaemon` and :meth:`isDaemon` methods, " +"and some methods have been renamed to use underscores instead of camel-case;" +" for example, the :meth:`activeCount` method is renamed to " +":meth:`active_count`. Both the 2.6 and 3.0 versions of the module support " +"the same properties and renamed methods, but don't remove the old methods. " +"No date has been set for the deprecation of the old APIs in Python 3.x; the " +"old APIs won't be removed in any 2.x version. (Carried out by several " +"people, most notably Benjamin Peterson.)" +msgstr "" + +#: ../../whatsnew/2.6.rst:2547 +msgid "" +"The :mod:`threading` module's :class:`Thread` objects gained an " +":attr:`ident` property that returns the thread's identifier, a nonzero " +"integer. (Contributed by Gregory P. Smith; :issue:`2871`.)" +msgstr "" + +#: ../../whatsnew/2.6.rst:2552 +msgid "" +"The :mod:`timeit` module now accepts callables as well as strings for the " +"statement being timed and for the setup code. Two convenience functions were" +" added for creating :class:`Timer` instances: ``repeat(stmt, setup, time, " +"repeat, number)`` and ``timeit(stmt, setup, time, number)`` create an " +"instance and call the corresponding method. (Contributed by Erik Demaine; " +":issue:`1533909`.)" +msgstr "" + +#: ../../whatsnew/2.6.rst:2561 +msgid "" +"The :mod:`Tkinter` module now accepts lists and tuples for options, " +"separating the elements by spaces before passing the resulting value to " +"Tcl/Tk. (Contributed by Guilherme Polo; :issue:`2906`.)" +msgstr "" + +#: ../../whatsnew/2.6.rst:2566 +msgid "" +"The :mod:`turtle` module for turtle graphics was greatly enhanced by Gregor " +"Lingl. New features in the module include:" +msgstr "" + +#: ../../whatsnew/2.6.rst:2569 +msgid "Better animation of turtle movement and rotation." +msgstr "" + +#: ../../whatsnew/2.6.rst:2570 +msgid "" +"Control over turtle movement using the new :meth:`delay`, :meth:`tracer`, " +"and :meth:`speed` methods." +msgstr "" + +#: ../../whatsnew/2.6.rst:2572 +msgid "" +"The ability to set new shapes for the turtle, and to define a new coordinate" +" system." +msgstr "" + +#: ../../whatsnew/2.6.rst:2574 +msgid "Turtles now have an :meth:`undo()` method that can roll back actions." +msgstr "" + +#: ../../whatsnew/2.6.rst:2575 +msgid "" +"Simple support for reacting to input events such as mouse and keyboard " +"activity, making it possible to write simple games." +msgstr "" + +#: ../../whatsnew/2.6.rst:2577 +msgid "" +"A :file:`turtle.cfg` file can be used to customize the starting appearance " +"of the turtle's screen." +msgstr ":file:`turtle.cfg` 文件可被用来定制海龟绘图屏幕的初始外观。" + +#: ../../whatsnew/2.6.rst:2579 +msgid "" +"The module's docstrings can be replaced by new docstrings that have been " +"translated into another language." +msgstr "" + +#: ../../whatsnew/2.6.rst:2582 +msgid "(:issue:`1513695`)" +msgstr "(:issue:`1513695`)" + +#: ../../whatsnew/2.6.rst:2584 +msgid "" +"An optional ``timeout`` parameter was added to the :func:`urllib.urlopen` " +"function and the :class:`urllib.ftpwrapper` class constructor, as well as " +"the :func:`urllib2.urlopen` function. The parameter specifies a timeout " +"measured in seconds. For example::" +msgstr "" + +#: ../../whatsnew/2.6.rst:2597 +msgid "(Added by Facundo Batista.)" +msgstr "(由 Facundo Batista 添加。)" + +#: ../../whatsnew/2.6.rst:2599 +msgid "" +"The Unicode database provided by the :mod:`unicodedata` module has been " +"updated to version 5.1.0. (Updated by Martin von Löwis; :issue:`3811`.)" +msgstr "" + +#: ../../whatsnew/2.6.rst:2603 +msgid "" +"The :mod:`warnings` module's :func:`formatwarning` and :func:`showwarning` " +"gained an optional *line* argument that can be used to supply the line of " +"source code. (Added as part of :issue:`1631171`, which re-implemented part " +"of the :mod:`warnings` module in C code.)" +msgstr "" + +#: ../../whatsnew/2.6.rst:2608 +msgid "" +"A new function, :func:`catch_warnings`, is a context manager intended for " +"testing purposes that lets you temporarily modify the warning filters and " +"then restore their original values (:issue:`3781`)." +msgstr "" + +#: ../../whatsnew/2.6.rst:2612 +msgid "" +"The XML-RPC :class:`SimpleXMLRPCServer` and :class:`DocXMLRPCServer` classes" +" can now be prevented from immediately opening and binding to their socket " +"by passing ``False`` as the *bind_and_activate* constructor parameter. This" +" can be used to modify the instance's :attr:`allow_reuse_address` attribute " +"before calling the :meth:`server_bind` and :meth:`server_activate` methods " +"to open the socket and begin listening for connections. (Contributed by " +"Peter Parente; :issue:`1599845`.)" +msgstr "" + +#: ../../whatsnew/2.6.rst:2621 +msgid "" +":class:`SimpleXMLRPCServer` also has a :attr:`_send_traceback_header` " +"attribute; if true, the exception and formatted traceback are returned as " +"HTTP headers \"X-Exception\" and \"X-Traceback\". This feature is for " +"debugging purposes only and should not be used on production servers because" +" the tracebacks might reveal passwords or other sensitive information. " +"(Contributed by Alan McIntyre as part of his project for Google's Summer of " +"Code 2007.)" +msgstr "" + +#: ../../whatsnew/2.6.rst:2629 +msgid "" +"The :mod:`xmlrpclib` module no longer automatically converts " +":class:`datetime.date` and :class:`datetime.time` to the " +":class:`xmlrpclib.DateTime` type; the conversion semantics were not " +"necessarily correct for all applications. Code using :mod:`xmlrpclib` " +"should convert :class:`date` and :class:`~datetime.time` instances. " +"(:issue:`1330538`) The code can also handle dates before 1900 (contributed " +"by Ralf Schmitt; :issue:`2014`) and 64-bit integers represented by using " +"```` in XML-RPC responses (contributed by Riku Lindblad; :issue:`2985`)." +msgstr "" + +#: ../../whatsnew/2.6.rst:2639 +msgid "" +"The :mod:`zipfile` module's :class:`ZipFile` class now has :meth:`extract` " +"and :meth:`extractall` methods that will unpack a single file or all the " +"files in the archive to the current directory, or to a specified directory::" +msgstr "" + +#: ../../whatsnew/2.6.rst:2653 +msgid "(Contributed by Alan McIntyre; :issue:`467924`.)" +msgstr "(由 Alan McIntyre 在 :issue:`467924` 中贡献。)" + +#: ../../whatsnew/2.6.rst:2655 +msgid "" +"The :meth:`open`, :meth:`read` and :meth:`extract` methods can now take " +"either a filename or a :class:`ZipInfo` object. This is useful when an " +"archive accidentally contains a duplicated filename. (Contributed by Graham " +"Horler; :issue:`1775025`.)" +msgstr "" + +#: ../../whatsnew/2.6.rst:2660 +msgid "" +"Finally, :mod:`zipfile` now supports using Unicode filenames for archived " +"files. (Contributed by Alexey Borzenkov; :issue:`1734346`.)" +msgstr "" + +#: ../../whatsnew/2.6.rst:2667 +msgid "The :mod:`ast` module" +msgstr ":mod:`ast` 模块" + +#: ../../whatsnew/2.6.rst:2669 +msgid "" +"The :mod:`ast` module provides an Abstract Syntax Tree representation of " +"Python code, and Armin Ronacher contributed a set of helper functions that " +"perform a variety of common tasks. These will be useful for HTML templating" +" packages, code analyzers, and similar tools that process Python code." +msgstr "" + +#: ../../whatsnew/2.6.rst:2676 +msgid "" +"The :func:`parse` function takes an expression and returns an AST. The " +":func:`dump` function outputs a representation of a tree, suitable for " +"debugging::" +msgstr "" + +#: ../../whatsnew/2.6.rst:2690 +msgid "This outputs a deeply nested tree::" +msgstr "输出是一棵深度嵌套的树::" + +#: ../../whatsnew/2.6.rst:2723 +msgid "" +"The :func:`literal_eval` method takes a string or an AST representing a " +"literal expression, parses and evaluates it, and returns the resulting " +"value. A literal expression is a Python expression containing only strings," +" numbers, dictionaries, etc. but no statements or function calls. If you " +"need to evaluate an expression but cannot accept the security risk of using " +"an :func:`eval` call, :func:`literal_eval` will handle it safely::" +msgstr "" + +#: ../../whatsnew/2.6.rst:2739 +msgid "" +"The module also includes :class:`NodeVisitor` and :class:`NodeTransformer` " +"classes for traversing and modifying an AST, and functions for common " +"transformations such as changing line numbers." +msgstr "" + +#: ../../whatsnew/2.6.rst:2747 +msgid "The :mod:`future_builtins` module" +msgstr ":mod:`future_builtins` 模块" + +#: ../../whatsnew/2.6.rst:2749 +msgid "" +"Python 3.0 makes many changes to the repertoire of built-in functions, and " +"most of the changes can't be introduced in the Python 2.x series because " +"they would break compatibility. The :mod:`future_builtins` module provides " +"versions of these built-in functions that can be imported when writing " +"3.0-compatible code." +msgstr "" + +#: ../../whatsnew/2.6.rst:2756 +msgid "The functions in this module currently include:" +msgstr "目前此模块中的函数包括:" + +#: ../../whatsnew/2.6.rst:2758 +msgid "" +"``ascii(obj)``: equivalent to :func:`repr`. In Python 3.0, :func:`repr` " +"will return a Unicode string, while :func:`ascii` will return a pure ASCII " +"bytestring." +msgstr "" + +#: ../../whatsnew/2.6.rst:2762 +msgid "" +"``filter(predicate, iterable)``, ``map(func, iterable1, ...)``: the 3.0 " +"versions return iterators, unlike the 2.x builtins which return lists." +msgstr "" + +#: ../../whatsnew/2.6.rst:2766 +msgid "" +"``hex(value)``, ``oct(value)``: instead of calling the :meth:`__hex__` or " +":meth:`__oct__` methods, these versions will call the :meth:`__index__` " +"method and convert the result to hexadecimal or octal. :func:`oct` will use" +" the new ``0o`` notation for its result." +msgstr "" + +#: ../../whatsnew/2.6.rst:2775 +msgid "The :mod:`json` module: JavaScript Object Notation" +msgstr ":mod:`json` 模块: JavaScript Object Notation" + +#: ../../whatsnew/2.6.rst:2777 +msgid "" +"The new :mod:`json` module supports the encoding and decoding of Python " +"types in JSON (Javascript Object Notation). JSON is a lightweight " +"interchange format often used in web applications. For more information " +"about JSON, see http://www.json.org." +msgstr "" + +#: ../../whatsnew/2.6.rst:2782 +msgid "" +":mod:`json` comes with support for decoding and encoding most built-in " +"Python types. The following example encodes and decodes a dictionary::" +msgstr "" + +#: ../../whatsnew/2.6.rst:2793 +msgid "" +"It's also possible to write your own decoders and encoders to support more " +"types. Pretty-printing of the JSON strings is also supported." +msgstr "" + +#: ../../whatsnew/2.6.rst:2796 +msgid "" +":mod:`json` (originally called simplejson) was written by Bob Ippolito." +msgstr "" + +#: ../../whatsnew/2.6.rst:2803 +msgid "The :mod:`plistlib` module: A Property-List Parser" +msgstr ":mod:`plistlib` 模块:属性列表解析器" + +#: ../../whatsnew/2.6.rst:2805 +msgid "" +"The ``.plist`` format is commonly used on Mac OS X to store basic data types" +" (numbers, strings, lists, and dictionaries) by serializing them into an " +"XML-based format. It resembles the XML-RPC serialization of data types." +msgstr "" + +#: ../../whatsnew/2.6.rst:2810 +msgid "" +"Despite being primarily used on Mac OS X, the format has nothing Mac-" +"specific about it and the Python implementation works on any platform that " +"Python supports, so the :mod:`plistlib` module has been promoted to the " +"standard library." +msgstr "" + +#: ../../whatsnew/2.6.rst:2815 +msgid "Using the module is simple::" +msgstr "此模块的用法很简单::" + +#: ../../whatsnew/2.6.rst:2842 +msgid "ctypes Enhancements" +msgstr "" + +#: ../../whatsnew/2.6.rst:2844 +msgid "" +"Thomas Heller continued to maintain and enhance the :mod:`ctypes` module." +msgstr "" + +#: ../../whatsnew/2.6.rst:2847 +msgid "" +":mod:`ctypes` now supports a :class:`c_bool` datatype that represents the " +"C99 ``bool`` type. (Contributed by David Remahl; :issue:`1649190`.)" +msgstr "" + +#: ../../whatsnew/2.6.rst:2851 +msgid "" +"The :mod:`ctypes` string, buffer and array types have improved support for " +"extended slicing syntax, where various combinations of ``(start, stop, " +"step)`` are supplied. (Implemented by Thomas Wouters.)" +msgstr "" + +#: ../../whatsnew/2.6.rst:2858 +msgid "" +"All :mod:`ctypes` data types now support :meth:`from_buffer` and " +":meth:`from_buffer_copy` methods that create a ctypes instance based on a " +"provided buffer object. :meth:`from_buffer_copy` copies the contents of the" +" object, while :meth:`from_buffer` will share the same memory area." +msgstr "" + +#: ../../whatsnew/2.6.rst:2865 +msgid "" +"A new calling convention tells :mod:`ctypes` to clear the ``errno`` or Win32" +" LastError variables at the outset of each wrapped call. (Implemented by " +"Thomas Heller; :issue:`1798`.)" +msgstr "" + +#: ../../whatsnew/2.6.rst:2869 +msgid "" +"You can now retrieve the Unix ``errno`` variable after a function call. " +"When creating a wrapped function, you can supply ``use_errno=True`` as a " +"keyword parameter to the :func:`DLL` function and then call the module-level" +" methods :meth:`set_errno` and :meth:`get_errno` to set and retrieve the " +"error value." +msgstr "" + +#: ../../whatsnew/2.6.rst:2875 +msgid "" +"The Win32 LastError variable is similarly supported by the :func:`DLL`, " +":func:`OleDLL`, and :func:`WinDLL` functions. You supply " +"``use_last_error=True`` as a keyword parameter and then call the module-" +"level methods :meth:`set_last_error` and :meth:`get_last_error`." +msgstr "" + +#: ../../whatsnew/2.6.rst:2881 +msgid "" +"The :func:`byref` function, used to retrieve a pointer to a ctypes instance," +" now has an optional *offset* parameter that is a byte count that will be " +"added to the returned pointer." +msgstr "" + +#: ../../whatsnew/2.6.rst:2888 +msgid "Improved SSL Support" +msgstr "改进的 SSL 支持" + +#: ../../whatsnew/2.6.rst:2890 +msgid "" +"Bill Janssen made extensive improvements to Python 2.6's support for the " +"Secure Sockets Layer by adding a new module, :mod:`ssl`, that's built atop " +"the `OpenSSL `__ library. This new module provides" +" more control over the protocol negotiated, the X.509 certificates used, and" +" has better support for writing SSL servers (as opposed to clients) in " +"Python. The existing SSL support in the :mod:`socket` module hasn't been " +"removed and continues to work, though it will be removed in Python 3.0." +msgstr "" + +#: ../../whatsnew/2.6.rst:2899 +msgid "" +"To use the new module, you must first create a TCP connection in the usual " +"way and then pass it to the :func:`ssl.wrap_socket` function. It's possible " +"to specify whether a certificate is required, and to obtain certificate info" +" by calling the :meth:`getpeercert` method." +msgstr "" + +#: ../../whatsnew/2.6.rst:2906 +msgid "The documentation for the :mod:`ssl` module." +msgstr ":mod:`ssl` 模块的文档。" + +#: ../../whatsnew/2.6.rst:2911 +msgid "Deprecations and Removals" +msgstr "弃用和移除" + +#: ../../whatsnew/2.6.rst:2913 ../../whatsnew/2.6.rst:3241 +msgid "" +"String exceptions have been removed. Attempting to use them raises a " +":exc:`TypeError`." +msgstr "" + +#: ../../whatsnew/2.6.rst:2916 +msgid "" +"Changes to the :class:`Exception` interface as dictated by :pep:`352` " +"continue to be made. For 2.6, the :attr:`message` attribute is being " +"deprecated in favor of the :attr:`args` attribute." +msgstr "" + +#: ../../whatsnew/2.6.rst:2921 +msgid "" +"(3.0-warning mode) Python 3.0 will feature a reorganized standard library " +"that will drop many outdated modules and rename others. Python 2.6 running " +"in 3.0-warning mode will warn about these modules when they are imported." +msgstr "" + +#: ../../whatsnew/2.6.rst:2926 +msgid "" +"The list of deprecated modules is: :mod:`audiodev`, :mod:`bgenlocations`, " +":mod:`buildtools`, :mod:`bundlebuilder`, :mod:`Canvas`, :mod:`compiler`, " +":mod:`dircache`, :mod:`dl`, :mod:`fpformat`, :mod:`gensuitemodule`, " +":mod:`ihooks`, :mod:`imageop`, :mod:`imgfile`, :mod:`linuxaudiodev`, " +":mod:`mhlib`, :mod:`mimetools`, :mod:`multifile`, :mod:`new`, :mod:`pure`, " +":mod:`statvfs`, :mod:`sunaudiodev`, :mod:`test.testall`, and :mod:`toaiff`." +msgstr "" + +#: ../../whatsnew/2.6.rst:2951 +msgid "The :mod:`gopherlib` module has been removed." +msgstr ":mod:`gopherlib` 模块已被移除。" + +#: ../../whatsnew/2.6.rst:2953 +msgid "" +"The :mod:`MimeWriter` module and :mod:`mimify` module have been deprecated; " +"use the :mod:`email` package instead." +msgstr "" + +#: ../../whatsnew/2.6.rst:2957 +msgid "" +"The :mod:`md5` module has been deprecated; use the :mod:`hashlib` module " +"instead." +msgstr "" + +#: ../../whatsnew/2.6.rst:2960 +msgid "" +"The :mod:`posixfile` module has been deprecated; :func:`fcntl.lockf` " +"provides better locking." +msgstr "" + +#: ../../whatsnew/2.6.rst:2963 +msgid "" +"The :mod:`popen2` module has been deprecated; use the :mod:`subprocess` " +"module." +msgstr "" + +#: ../../whatsnew/2.6.rst:2966 +msgid "The :mod:`rgbimg` module has been removed." +msgstr ":mod:`rgbimg` 模块已被移除。" + +#: ../../whatsnew/2.6.rst:2968 +msgid "" +"The :mod:`sets` module has been deprecated; it's better to use the built-in " +":class:`set` and :class:`frozenset` types." +msgstr "" + +#: ../../whatsnew/2.6.rst:2971 +msgid "" +"The :mod:`sha` module has been deprecated; use the :mod:`hashlib` module " +"instead." +msgstr "" + +#: ../../whatsnew/2.6.rst:2979 +msgid "Build and C API Changes" +msgstr "构建和 C API 的改变" + +#: ../../whatsnew/2.6.rst:2981 +msgid "Changes to Python's build process and to the C API include:" +msgstr "针对 Python 构建过程和 C API 的改变包括:" + +#: ../../whatsnew/2.6.rst:2983 +msgid "" +"Python now must be compiled with C89 compilers (after 19 years!). This " +"means that the Python source tree has dropped its own implementations of " +":c:func:`memmove` and :c:func:`strerror`, which are in the C89 standard " +"library." +msgstr "" + +#: ../../whatsnew/2.6.rst:2988 +msgid "" +"Python 2.6 can be built with Microsoft Visual Studio 2008 (version 9.0), and" +" this is the new default compiler. See the :file:`PCbuild` directory for " +"the build files. (Implemented by Christian Heimes.)" +msgstr "" + +#: ../../whatsnew/2.6.rst:2993 +msgid "" +"On Mac OS X, Python 2.6 can be compiled as a 4-way universal build. The " +":program:`configure` script can take a :option:`!--with-universal-" +"archs=[32-bit|64-bit|all]` switch, controlling whether the binaries are " +"built for 32-bit architectures (x86, PowerPC), 64-bit (x86-64 and PPC-64), " +"or both. (Contributed by Ronald Oussoren.)" +msgstr "" + +#: ../../whatsnew/2.6.rst:3000 +msgid "" +"The BerkeleyDB module now has a C API object, available as ``bsddb.db.api``." +" This object can be used by other C extensions that wish to use the " +":mod:`bsddb` module for their own purposes. (Contributed by Duncan Grisby.)" +msgstr "" + +#: ../../whatsnew/2.6.rst:3005 +msgid "" +"The new buffer interface, previously described in `the PEP 3118 section " +"<#pep-3118-revised-buffer-protocol>`__, adds :c:func:`PyObject_GetBuffer` " +"and :c:func:`PyBuffer_Release`, as well as a few other functions." +msgstr "" + +#: ../../whatsnew/2.6.rst:3010 +msgid "" +"Python's use of the C stdio library is now thread-safe, or at least as " +"thread-safe as the underlying library is. A long-standing potential bug " +"occurred if one thread closed a file object while another thread was reading" +" from or writing to the object. In 2.6 file objects have a reference count," +" manipulated by the :c:func:`PyFile_IncUseCount` and " +":c:func:`PyFile_DecUseCount` functions. File objects can't be closed unless" +" the reference count is zero. :c:func:`PyFile_IncUseCount` should be called" +" while the GIL is still held, before carrying out an I/O operation using the" +" ``FILE *`` pointer, and :c:func:`PyFile_DecUseCount` should be called " +"immediately after the GIL is re-acquired. (Contributed by Antoine Pitrou and" +" Gregory P. Smith.)" +msgstr "" + +#: ../../whatsnew/2.6.rst:3023 +msgid "" +"Importing modules simultaneously in two different threads no longer " +"deadlocks; it will now raise an :exc:`ImportError`. A new API function, " +":c:func:`PyImport_ImportModuleNoBlock`, will look for a module in " +"``sys.modules`` first, then try to import it after acquiring an import lock." +" If the import lock is held by another thread, an :exc:`ImportError` is " +"raised. (Contributed by Christian Heimes.)" +msgstr "" + +#: ../../whatsnew/2.6.rst:3031 +msgid "" +"Several functions return information about the platform's floating-point " +"support. :c:func:`PyFloat_GetMax` returns the maximum representable " +"floating point value, and :c:func:`PyFloat_GetMin` returns the minimum " +"positive value. :c:func:`PyFloat_GetInfo` returns an object containing more" +" information from the :file:`float.h` file, such as ``\"mant_dig\"`` (number" +" of digits in the mantissa), ``\"epsilon\"`` (smallest difference between " +"1.0 and the next largest value representable), and several others. " +"(Contributed by Christian Heimes; :issue:`1534`.)" +msgstr "" + +#: ../../whatsnew/2.6.rst:3042 +msgid "" +"C functions and methods that use :c:func:`PyComplex_AsCComplex` will now " +"accept arguments that have a :meth:`__complex__` method. In particular, the" +" functions in the :mod:`cmath` module will now accept objects with this " +"method. This is a backport of a Python 3.0 change. (Contributed by Mark " +"Dickinson; :issue:`1675423`.)" +msgstr "" + +#: ../../whatsnew/2.6.rst:3049 +msgid "" +"Python's C API now includes two functions for case-insensitive string " +"comparisons, ``PyOS_stricmp(char*, char*)`` and ``PyOS_strnicmp(char*, " +"char*, Py_ssize_t)``. (Contributed by Christian Heimes; :issue:`1635`.)" +msgstr "" + +#: ../../whatsnew/2.6.rst:3054 +msgid "" +"Many C extensions define their own little macro for adding integers and " +"strings to the module's dictionary in the ``init*`` function. Python 2.6 " +"finally defines standard macros for adding values to a module, " +":c:macro:`PyModule_AddStringMacro` and :c:macro:`PyModule_AddIntMacro()`. " +"(Contributed by Christian Heimes.)" +msgstr "" + +#: ../../whatsnew/2.6.rst:3061 +msgid "" +"Some macros were renamed in both 3.0 and 2.6 to make it clearer that they " +"are macros, not functions. :c:macro:`Py_Size()` became " +":c:macro:`Py_SIZE()`, :c:macro:`Py_Type()` became :c:macro:`Py_TYPE()`, and " +":c:macro:`Py_Refcnt()` became :c:macro:`Py_REFCNT()`. The mixed-case macros " +"are still available in Python 2.6 for backward compatibility. " +"(:issue:`1629`)" +msgstr "" + +#: ../../whatsnew/2.6.rst:3070 +msgid "" +"Distutils now places C extensions it builds in a different directory when " +"running on a debug version of Python. (Contributed by Collin Winter; " +":issue:`1530959`.)" +msgstr "" + +#: ../../whatsnew/2.6.rst:3074 +msgid "" +"Several basic data types, such as integers and strings, maintain internal " +"free lists of objects that can be re-used. The data structures for these " +"free lists now follow a naming convention: the variable is always named " +"``free_list``, the counter is always named ``numfree``, and a macro " +"``Py_MAXFREELIST`` is always defined." +msgstr "" + +#: ../../whatsnew/2.6.rst:3081 +msgid "" +"A new Makefile target, \"make patchcheck\", prepares the Python source tree " +"for making a patch: it fixes trailing whitespace in all modified ``.py`` " +"files, checks whether the documentation has been changed, and reports " +"whether the :file:`Misc/ACKS` and :file:`Misc/NEWS` files have been updated." +" (Contributed by Brett Cannon.)" +msgstr "" + +#: ../../whatsnew/2.6.rst:3088 +msgid "" +"Another new target, \"make profile-opt\", compiles a Python binary using " +"GCC's profile-guided optimization. It compiles Python with profiling " +"enabled, runs the test suite to obtain a set of profiling results, and then " +"compiles using these results for optimization. (Contributed by Gregory P. " +"Smith.)" +msgstr "" + +#: ../../whatsnew/2.6.rst:3097 +msgid "Port-Specific Changes: Windows" +msgstr "特定于 Windows 的更改:" + +#: ../../whatsnew/2.6.rst:3099 +msgid "" +"The support for Windows 95, 98, ME and NT4 has been dropped. Python 2.6 " +"requires at least Windows 2000 SP4." +msgstr "" + +#: ../../whatsnew/2.6.rst:3102 +msgid "" +"The new default compiler on Windows is Visual Studio 2008 (version 9.0). The" +" build directories for Visual Studio 2003 (version 7.1) and 2005 (version " +"8.0) were moved into the PC/ directory. The new :file:`PCbuild` directory " +"supports cross compilation for X64, debug builds and Profile Guided " +"Optimization (PGO). PGO builds are roughly 10% faster than normal builds. " +"(Contributed by Christian Heimes with help from Amaury Forgeot d'Arc and " +"Martin von Löwis.)" +msgstr "" + +#: ../../whatsnew/2.6.rst:3110 +msgid "" +"The :mod:`msvcrt` module now supports both the normal and wide char variants" +" of the console I/O API. The :func:`getwch` function reads a keypress and " +"returns a Unicode value, as does the :func:`getwche` function. The " +":func:`putwch` function takes a Unicode character and writes it to the " +"console. (Contributed by Christian Heimes.)" +msgstr "" + +#: ../../whatsnew/2.6.rst:3117 +msgid "" +":func:`os.path.expandvars` will now expand environment variables in the form" +" \"%var%\", and \"~user\" will be expanded into the user's home directory " +"path. (Contributed by Josiah Carlson; :issue:`957650`.)" +msgstr "" + +#: ../../whatsnew/2.6.rst:3121 +msgid "" +"The :mod:`socket` module's socket objects now have an :meth:`ioctl` method " +"that provides a limited interface to the :c:func:`WSAIoctl` system " +"interface." +msgstr "" + +#: ../../whatsnew/2.6.rst:3125 +msgid "" +"The :mod:`_winreg` module now has a function, " +":func:`ExpandEnvironmentStrings`, that expands environment variable " +"references such as ``%NAME%`` in an input string. The handle objects " +"provided by this module now support the context protocol, so they can be " +"used in :keyword:`with` statements. (Contributed by Christian Heimes.)" +msgstr "" + +#: ../../whatsnew/2.6.rst:3132 +msgid "" +":mod:`_winreg` also has better support for x64 systems, exposing the " +":func:`DisableReflectionKey`, :func:`EnableReflectionKey`, and " +":func:`QueryReflectionKey` functions, which enable and disable registry " +"reflection for 32-bit processes running on 64-bit systems. " +"(:issue:`1753245`)" +msgstr "" + +#: ../../whatsnew/2.6.rst:3138 +msgid "" +"The :mod:`msilib` module's :class:`Record` object gained :meth:`GetInteger` " +"and :meth:`GetString` methods that return field values as an integer or a " +"string. (Contributed by Floris Bruynooghe; :issue:`2125`.)" +msgstr "" + +#: ../../whatsnew/2.6.rst:3146 +msgid "Port-Specific Changes: Mac OS X" +msgstr "特定于 Mac OS X 的更改:" + +#: ../../whatsnew/2.6.rst:3148 +msgid "" +"When compiling a framework build of Python, you can now specify the " +"framework name to be used by providing the :option:`!--with-framework-name=`" +" option to the :program:`configure` script." +msgstr "" +"现在,在编译Python的框架版本时,可以为 :program:`configure` 脚本添加 :option:`!--with-framework-" +"name=` 选项来指定要使用的框架名称。" + +#: ../../whatsnew/2.6.rst:3153 +msgid "" +"The :mod:`macfs` module has been removed. This in turn required the " +":func:`macostools.touched` function to be removed because it depended on the" +" :mod:`macfs` module. (:issue:`1490190`)" +msgstr "" +":mod:`macfs` 模块已被删除。这反过来要求删除 :func:`macostools.touched` 函数,因为它依赖于 " +":mod:`macfs` 模块。 (:issue:`1490190`)" + +#: ../../whatsnew/2.6.rst:3157 +msgid "" +"Many other Mac OS modules have been deprecated and will be removed in Python" +" 3.0: :mod:`_builtinSuites`, :mod:`aepack`, :mod:`aetools`, :mod:`aetypes`, " +":mod:`applesingle`, :mod:`appletrawmain`, :mod:`appletrunner`, " +":mod:`argvemulator`, :mod:`Audio_mac`, :mod:`autoGIL`, :mod:`Carbon`, " +":mod:`cfmfile`, :mod:`CodeWarrior`, :mod:`ColorPicker`, :mod:`EasyDialogs`, " +":mod:`Explorer`, :mod:`Finder`, :mod:`FrameWork`, :mod:`findertools`, " +":mod:`ic`, :mod:`icglue`, :mod:`icopen`, :mod:`macerrors`, :mod:`MacOS`, " +":mod:`macfs`, :mod:`macostools`, :mod:`macresource`, :mod:`MiniAEFrame`, " +":mod:`Nav`, :mod:`Netscape`, :mod:`OSATerminology`, :mod:`pimp`, " +":mod:`PixMapWrapper`, :mod:`StdSuites`, :mod:`SystemEvents`, " +":mod:`Terminal`, and :mod:`terminalcommand`." +msgstr "" +"许多其他 Mac OS 模块已弃用并将在 Python 3.0 中被删除: :mod:`_builtinSuites`, :mod:`aepack`, " +":mod:`aetools`, :mod:`aetypes`, :mod:`applesingle`, :mod:`appletrawmain`, " +":mod:`appletrunner`, :mod:`argvemulator`, :mod:`Audio_mac`, :mod:`autoGIL`, " +":mod:`Carbon`, :mod:`cfmfile`, :mod:`CodeWarrior`, :mod:`ColorPicker`, " +":mod:`EasyDialogs`, :mod:`Explorer`, :mod:`Finder`, :mod:`FrameWork`, " +":mod:`findertools`, :mod:`ic`, :mod:`icglue`, :mod:`icopen`, " +":mod:`macerrors`, :mod:`MacOS`, :mod:`macfs`, :mod:`macostools`, " +":mod:`macresource`, :mod:`MiniAEFrame`, :mod:`Nav`, :mod:`Netscape`, " +":mod:`OSATerminology`, :mod:`pimp`, :mod:`PixMapWrapper`, :mod:`StdSuites`, " +":mod:`SystemEvents`, :mod:`Terminal` 和 :mod:`terminalcommand`。" + +#: ../../whatsnew/2.6.rst:3200 +msgid "Port-Specific Changes: IRIX" +msgstr "特定于 IRIX 的更改:" + +#: ../../whatsnew/2.6.rst:3202 +msgid "" +"A number of old IRIX-specific modules were deprecated and will be removed in" +" Python 3.0: :mod:`al` and :mod:`AL`, :mod:`cd`, :mod:`cddb`, " +":mod:`cdplayer`, :mod:`CL` and :mod:`cl`, :mod:`DEVICE`, :mod:`ERRNO`, " +":mod:`FILE`, :mod:`FL` and :mod:`fl`, :mod:`flp`, :mod:`fm`, :mod:`GET`, " +":mod:`GLWS`, :mod:`GL` and :mod:`gl`, :mod:`IN`, :mod:`IOCTL`, :mod:`jpeg`, " +":mod:`panelparser`, :mod:`readcd`, :mod:`SV` and :mod:`sv`, :mod:`torgb`, " +":mod:`videoreader`, and :mod:`WAIT`." +msgstr "" +"许多旧的 IRIX 专用模块已被弃用,并将在Python 3.0中删除: :mod:`al` 和 :mod:`AL`, :mod:`cd`, " +":mod:`cddb`, :mod:`cdplayer`, :mod:`CL` 和 :mod:`cl`, :mod:`DEVICE`, " +":mod:`ERRNO`, :mod:`FILE`, :mod:`FL` 和 :mod:`fl`, :mod:`flp`, :mod:`fm`, " +":mod:`GET`, :mod:`GLWS`, :mod:`GL` 和 :mod:`gl`, :mod:`IN`, :mod:`IOCTL`, " +":mod:`jpeg`, :mod:`panelparser`, :mod:`readcd`, :mod:`SV` 和 :mod:`sv`, " +":mod:`torgb`, :mod:`videoreader`, 和 :mod:`WAIT`." + +#: ../../whatsnew/2.6.rst:3232 +msgid "Porting to Python 2.6" +msgstr "移植到Python 2.6" + +#: ../../whatsnew/2.6.rst:3234 +msgid "" +"This section lists previously described changes and other bugfixes that may " +"require changes to your code:" +msgstr "本节列出了先前描述的改变以及可能需要修改你的代码的其他问题修正:" + +#: ../../whatsnew/2.6.rst:3237 +msgid "" +"Classes that aren't supposed to be hashable should set ``__hash__ = None`` " +"in their definitions to indicate the fact." +msgstr "预期为不可哈希的类应当在其定义中设置 ``__hash__ = None`` 来指明这一点。" + +#: ../../whatsnew/2.6.rst:3244 +msgid "" +"The :meth:`__init__` method of :class:`collections.deque` now clears any " +"existing contents of the deque before adding elements from the iterable. " +"This change makes the behavior match ``list.__init__()``." +msgstr "" + +#: ../../whatsnew/2.6.rst:3249 +msgid "" +":meth:`object.__init__` previously accepted arbitrary arguments and keyword " +"arguments, ignoring them. In Python 2.6, this is no longer allowed and will" +" result in a :exc:`TypeError`. This will affect :meth:`__init__` methods " +"that end up calling the corresponding method on :class:`object` (perhaps " +"through using :func:`super`). See :issue:`1683368` for discussion." +msgstr "" + +#: ../../whatsnew/2.6.rst:3256 +msgid "" +"The :class:`Decimal` constructor now accepts leading and trailing whitespace" +" when passed a string. Previously it would raise an :exc:`InvalidOperation`" +" exception. On the other hand, the :meth:`create_decimal` method of " +":class:`Context` objects now explicitly disallows extra whitespace, raising " +"a :exc:`ConversionSyntax` exception." +msgstr "" + +#: ../../whatsnew/2.6.rst:3263 +msgid "" +"Due to an implementation accident, if you passed a file path to the built-in" +" :func:`__import__` function, it would actually import the specified file." +" This was never intended to work, however, and the implementation now " +"explicitly checks for this case and raises an :exc:`ImportError`." +msgstr "" + +#: ../../whatsnew/2.6.rst:3269 +msgid "" +"C API: the :c:func:`PyImport_Import` and :c:func:`PyImport_ImportModule` " +"functions now default to absolute imports, not relative imports. This will " +"affect C extensions that import other modules." +msgstr "" + +#: ../../whatsnew/2.6.rst:3273 +msgid "" +"C API: extension data types that shouldn't be hashable should define their " +"``tp_hash`` slot to :c:func:`PyObject_HashNotImplemented`." +msgstr "" + +#: ../../whatsnew/2.6.rst:3277 +msgid "" +"The :mod:`socket` module exception :exc:`socket.error` now inherits from " +":exc:`IOError`. Previously it wasn't a subclass of :exc:`StandardError` but" +" now it is, through :exc:`IOError`. (Implemented by Gregory P. Smith; " +":issue:`1706815`.)" +msgstr "" + +#: ../../whatsnew/2.6.rst:3282 +msgid "" +"The :mod:`xmlrpclib` module no longer automatically converts " +":class:`datetime.date` and :class:`datetime.time` to the " +":class:`xmlrpclib.DateTime` type; the conversion semantics were not " +"necessarily correct for all applications. Code using :mod:`xmlrpclib` " +"should convert :class:`date` and :class:`~datetime.time` instances. " +"(:issue:`1330538`)" +msgstr "" + +#: ../../whatsnew/2.6.rst:3289 +msgid "" +"(3.0-warning mode) The :class:`Exception` class now warns when accessed " +"using slicing or index access; having :class:`Exception` behave like a tuple" +" is being phased out." +msgstr "" + +#: ../../whatsnew/2.6.rst:3293 +msgid "" +"(3.0-warning mode) inequality comparisons between two dictionaries or two " +"objects that don't implement comparison methods are reported as warnings. " +"``dict1 == dict2`` still works, but ``dict1 < dict2`` is being phased out." +msgstr "" + +#: ../../whatsnew/2.6.rst:3298 +msgid "" +"Comparisons between cells, which are an implementation detail of Python's " +"scoping rules, also cause warnings because such comparisons are forbidden " +"entirely in 3.0." +msgstr "" + +#: ../../whatsnew/2.6.rst:3308 +msgid "Acknowledgements" +msgstr "致谢" + +#: ../../whatsnew/2.6.rst:3310 +msgid "" +"The author would like to thank the following people for offering " +"suggestions, corrections and assistance with various drafts of this article:" +" Georg Brandl, Steve Brown, Nick Coghlan, Ralph Corderoy, Jim Jewett, Kent " +"Johnson, Chris Lambacher, Martin Michlmayr, Antoine Pitrou, Brian Warner." +msgstr "" +"作者感谢以下人员对本文各种草稿给予的建议,更正和协助: Georg Brandl, Steve Brown, Nick Coghlan, Ralph " +"Corderoy, Jim Jewett, Kent Johnson, Chris Lambacher, Martin Michlmayr, " +"Antoine Pitrou, Brian Warner." diff --git a/whatsnew/2.7.po b/whatsnew/2.7.po new file mode 100644 index 000000000..11c438784 --- /dev/null +++ b/whatsnew/2.7.po @@ -0,0 +1,3440 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) 2001-2024, Python Software Foundation +# This file is distributed under the same license as the Python package. +# FIRST AUTHOR , YEAR. +# +# Translators: +# Fei Yin , 2018 +# ppcfish , 2020 +# Shengjing Zhu , 2020 +# zeroswan , 2020 +# Alpha Du , 2024 +# Rafael Fontenelle , 2024 +# Freesand Leo , 2024 +# +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: Python 3.9\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2024-07-20 02:59+0000\n" +"PO-Revision-Date: 2017-02-16 23:43+0000\n" +"Last-Translator: Freesand Leo , 2024\n" +"Language-Team: Chinese (China) (https://app.transifex.com/python-doc/teams/5390/zh_CN/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: zh_CN\n" +"Plural-Forms: nplurals=1; plural=0;\n" + +#: ../../whatsnew/2.7.rst:3 +msgid "What's New in Python 2.7" +msgstr "Python 2.7 有什么新变化" + +#: ../../whatsnew/2.7.rst:0 +msgid "Author" +msgstr "作者" + +#: ../../whatsnew/2.7.rst:5 +msgid "A.M. Kuchling (amk at amk.ca)" +msgstr "A.M. Kuchling (amk at amk.ca)" + +#: ../../whatsnew/2.7.rst:52 +msgid "" +"This article explains the new features in Python 2.7. Python 2.7 was " +"released on July 3, 2010." +msgstr "本文介绍了Python 2.7 的新功能。 Python 2.7 于2010年7月3日发布。" + +#: ../../whatsnew/2.7.rst:55 +msgid "" +"Numeric handling has been improved in many ways, for both floating-point " +"numbers and for the :class:`~decimal.Decimal` class. There are some useful " +"additions to the standard library, such as a greatly enhanced " +":mod:`unittest` module, the :mod:`argparse` module for parsing command-line " +"options, convenient :class:`~collections.OrderedDict` and " +":class:`~collections.Counter` classes in the :mod:`collections` module, and " +"many other improvements." +msgstr "" +"数字处理在许多方面得到了改进,包括浮点数和 :class:`~decimal.Decimal` 类。标准库中有一些有用的补充,例如大大增强的 " +":mod:`unittest` 模块,用于解析命令行选项的 :mod:`argparse` 模块,在 :mod:`collections` 模块中方便的" +" :class:`~collections.OrderedDict` 和 :class:`~collections.Counter` " +"类,以及许多其他改进。" + +#: ../../whatsnew/2.7.rst:63 +msgid "" +"Python 2.7 is planned to be the last of the 2.x releases, so we worked on " +"making it a good release for the long term. To help with porting to Python " +"3, several new features from the Python 3.x series have been included in " +"2.7." +msgstr "" +"Python 2.7计划成为2.x版本的最后一个发布版本,因此我们努力使其成为长期支持的好版本。为了帮助迁移到Python " +"3,我们在2.7中包含了几个来自Python 3.x系列的新特性。" + +#: ../../whatsnew/2.7.rst:68 +msgid "" +"This article doesn't attempt to provide a complete specification of the new " +"features, but instead provides a convenient overview. For full details, you" +" should refer to the documentation for Python 2.7 at " +"https://docs.python.org. If you want to understand the rationale for the " +"design and implementation, refer to the PEP for a particular new feature or " +"the issue on https://bugs.python.org in which a change was discussed. " +"Whenever possible, \"What's New in Python\" links to the bug/patch item for " +"each change." +msgstr "" +"本文并不试图提供新特性的完整规范说明,而是提供一个方便的概览。要了解完整的细节,请参阅Python " +"2.7的文档。如果你想了解有关设计和实现的具体考量,请参阅特定新特性的PEP或在https://bugs.python.org上讨论更改的问题。在可能的情况下,“What's" +" New in Python”链接到每个更改的错误修正/补丁项。" + +#: ../../whatsnew/2.7.rst:80 +msgid "The Future for Python 2.x" +msgstr "Python 2.x的未来" + +#: ../../whatsnew/2.7.rst:82 +msgid "" +"Python 2.7 is the last major release in the 2.x series, as the Python " +"maintainers have shifted the focus of their new feature development efforts " +"to the Python 3.x series. This means that while Python 2 continues to " +"receive bug fixes, and to be updated to build correctly on new hardware and " +"versions of supported operated systems, there will be no new full feature " +"releases for the language or standard library." +msgstr "" +"Python 2.7 是 2.x 系列中的最后一个主版本,因为Python 维护人员已将新功能开发工作的重点转移到了 Python 3.x " +"系列中。这意味着,尽管 Python 2 会继续修复bug并更新,以便在新的硬件和支持操作系统版本上正确构建,但不会有新的功能发布。" + +#: ../../whatsnew/2.7.rst:89 +msgid "" +"However, while there is a large common subset between Python 2.7 and Python " +"3, and many of the changes involved in migrating to that common subset, or " +"directly to Python 3, can be safely automated, some other changes (notably " +"those associated with Unicode handling) may require careful consideration, " +"and preferably robust automated regression test suites, to migrate " +"effectively." +msgstr "" +"然而,尽管在 Python 2.7 和 Python 3 之间有一个很大的公共子集,并且迁移到该公共子集或直接迁移到 Python 3 " +"所涉及的许多更改可以安全地自动化完成。但是一些其他更改(特别是那些与Unicode处理相关的更改)可能需要仔细考虑,并且最好用自动化回归测试套件进行健壮性测试,以便有效地迁移。" + +#: ../../whatsnew/2.7.rst:96 +msgid "" +"This means that Python 2.7 will remain in place for a long time, providing a" +" stable and supported base platform for production systems that have not yet" +" been ported to Python 3. The full expected lifecycle of the Python 2.7 " +"series is detailed in :pep:`373`." +msgstr "" +"这意味着 Python2.7 将长期保留,为尚未移植到 Python 3 的生产系统提供一个稳定且受支持的基础平台。Python " +"2.7系列的预期完整生命周期在 :pep:`373` 中有详细介绍。" + +#: ../../whatsnew/2.7.rst:101 +msgid "Some key consequences of the long-term significance of 2.7 are:" +msgstr "长期保留 2.7 版的的一些关键后果:" + +#: ../../whatsnew/2.7.rst:103 +msgid "" +"As noted above, the 2.7 release has a much longer period of maintenance when" +" compared to earlier 2.x versions. Python 2.7 is currently expected to " +"remain supported by the core development team (receiving security updates " +"and other bug fixes) until at least 2020 (10 years after its initial " +"release, compared to the more typical support period of 18--24 months)." +msgstr "" +"如上所述,与早期的2.x版本相比,2.7版本的维护时间更长。目前,预计核心开发团队将继续支持Python " +"2.7(接收安全更新和其他错误修复),直到至少2020年(首次发布后10年,相比之下,通常的支持期为18--24个月)。" + +#: ../../whatsnew/2.7.rst:109 +msgid "" +"As the Python 2.7 standard library ages, making effective use of the Python " +"Package Index (either directly or via a redistributor) becomes more " +"important for Python 2 users. In addition to a wide variety of third party " +"packages for various tasks, the available packages include backports of new " +"modules and features from the Python 3 standard library that are compatible " +"with Python 2, as well as various tools and libraries that can make it " +"easier to migrate to Python 3. The `Python Packaging User Guide " +"`__ provides guidance on downloading and " +"installing software from the Python Package Index." +msgstr "" +"随着 Python 2.7 标准库的老化,有效地利用 Python 包索引(直接或通过重新分发者)对 Python 2 " +"用户来说变得更加重要。除了各种任务的第三方包之外,可用的包还包括与 Python 2 兼容的 Python 3 " +"标准库中的新模块和功能的后端移植,以及各种工具和库,这些工具和库可以让用户更容易迁移到 Python 3。 `Python 包用户指南 " +"`__ 提供了从 Python 包索引的下载和安装软件的指导。" + +#: ../../whatsnew/2.7.rst:119 +msgid "" +"While the preferred approach to enhancing Python 2 is now the publication of" +" new packages on the Python Package Index, this approach doesn't necessarily" +" work in all cases, especially those related to network security. In " +"exceptional cases that cannot be handled adequately by publishing new or " +"updated packages on PyPI, the Python Enhancement Proposal process may be " +"used to make the case for adding new features directly to the Python 2 " +"standard library. Any such additions, and the maintenance releases where " +"they were added, will be noted in the :ref:`py27-maintenance-enhancements` " +"section below." +msgstr "" +"虽然现在增强 Python 2 " +"的首选方法是在Python包索引上发布新包,但这种方法不一定适用于所有情况,尤其是与网络安全相关的情况。在一些特殊情况下,如果在PyPI上发布新的或更新的包无法得到充分的处理,则可以使用Python增强建议过程来提出直接在Python" +" 2标准库中添加新功能。任何此类添加及其添加的维护版本将在下面的 :ref:`py27-maintenance-enhancements` 部分中注明。" + +#: ../../whatsnew/2.7.rst:129 +msgid "" +"For projects wishing to migrate from Python 2 to Python 3, or for library " +"and framework developers wishing to support users on both Python 2 and " +"Python 3, there are a variety of tools and guides available to help decide " +"on a suitable approach and manage some of the technical details involved. " +"The recommended starting point is the :ref:`pyporting-howto` HOWTO guide." +msgstr "" +"对于希望从 Python2 迁移到 Python3 的项目,或者对于希望同时支持 Python2 和 Python3 " +"用户的库和框架开发人员,可以使用各种工具和指南来帮助决定合适的方法并管理所涉及的一些技术细节。建议从 :ref:`pyporting-howto` " +"操作指南开始。" + +#: ../../whatsnew/2.7.rst:137 +msgid "Changes to the Handling of Deprecation Warnings" +msgstr "对于弃用警告处理方式的改变" + +#: ../../whatsnew/2.7.rst:139 +msgid "" +"For Python 2.7, a policy decision was made to silence warnings only of " +"interest to developers by default. :exc:`DeprecationWarning` and its " +"descendants are now ignored unless otherwise requested, preventing users " +"from seeing warnings triggered by an application. This change was also made" +" in the branch that became Python 3.2. (Discussed on stdlib-sig and carried " +"out in :issue:`7319`.)" +msgstr "" +"对于 Python 2.7,一个策略决定是默认情况下禁止只对开发人员有兴趣的警告。 现在,除非另有要求,否则将忽略 " +":exc:`DeprecationWarning` 及其子类,以防止用户看到应用程序触发的警告。 这个更改也在成为Python 3.2 " +"的分歧点上进行了。 (在 stdlib-sig 上进行了讨论,并在 :issue:`7319` 中执行。)" + +#: ../../whatsnew/2.7.rst:146 +msgid "" +"In previous releases, :exc:`DeprecationWarning` messages were enabled by " +"default, providing Python developers with a clear indication of where their " +"code may break in a future major version of Python." +msgstr "" +"在以前的版本中,默认情况下启用了 :exc:`DeprecationWarning` 消息,为 Python " +"开发人员提供了一个明确的指示,说明他们的代码可能在未来的 Python 主要版本中出现问题。" + +#: ../../whatsnew/2.7.rst:151 +msgid "" +"However, there are increasingly many users of Python-based applications who " +"are not directly involved in the development of those applications. " +":exc:`DeprecationWarning` messages are irrelevant to such users, making them" +" worry about an application that's actually working correctly and burdening " +"application developers with responding to these concerns." +msgstr "" +"然而,越来越多基于 Python 的应用程序的用户并不直接参与这些应用程序的开发。 :exc:`DeprecationWarning` " +"消息与这些用户无关,这让他们担心应用能否真正正常工作,并让应用开发人员承担起回应这些担忧的负担。" + +#: ../../whatsnew/2.7.rst:158 +msgid "" +"You can re-enable display of :exc:`DeprecationWarning` messages by running " +"Python with the :option:`-Wdefault <-W>` (short form: :option:`-Wd <-W>`) " +"switch, or by setting the :envvar:`PYTHONWARNINGS` environment variable to " +"``\"default\"`` (or ``\"d\"``) before running Python. Python code can also " +"re-enable them by calling ``warnings.simplefilter('default')``." +msgstr "" +"显示通过使用 :option:`-Wdefault<-W>` (简写: :option:`-Wd<-W>`) 开关运行 Python,或者在运行 " +"Python 之前将 :envvar:`PYTHONWARNINGS` 环境变量设置为 ``\"default\"`` (或 " +"``\"d\"``),可以重新启用 :exc:`DeprecationWarning` 消息。 Python 代码也可以通过调用 " +"``warnings.simplefilter('default')`` 重新启用它们。" + +#: ../../whatsnew/2.7.rst:165 +msgid "" +"The ``unittest`` module also automatically reenables deprecation warnings " +"when running tests." +msgstr "``unittest`` 模块还会在运行测试时自动重新启用弃用警告。" + +#: ../../whatsnew/2.7.rst:170 +msgid "Python 3.1 Features" +msgstr "Python 3.1 特性" + +#: ../../whatsnew/2.7.rst:172 +msgid "" +"Much as Python 2.6 incorporated features from Python 3.0, version 2.7 " +"incorporates some of the new features in Python 3.1. The 2.x series " +"continues to provide tools for migrating to the 3.x series." +msgstr "" +"就像 Python2.6 集成了 Python3.0 的特性一样,2.7版也集成了 Python3.1 中的一些新特性。2.x " +"系列继续提供迁移到3.x系列的工具。" + +#: ../../whatsnew/2.7.rst:177 +msgid "A partial list of 3.1 features that were backported to 2.7:" +msgstr "3.1 功能的部分列表,这些功能已反向移植到 2.7:" + +#: ../../whatsnew/2.7.rst:179 +msgid "The syntax for set literals (``{1,2,3}`` is a mutable set)." +msgstr "用于集合字面值的语法 (``{1,2,3}`` 是一个可变集合)。" + +#: ../../whatsnew/2.7.rst:180 +msgid "Dictionary and set comprehensions (``{i: i*2 for i in range(3)}``)." +msgstr "字典与集合推导式 (``{i: i*2 for i in range(3)}``)。" + +#: ../../whatsnew/2.7.rst:181 +msgid "Multiple context managers in a single :keyword:`with` statement." +msgstr "单个 :keyword:`with` 语句中使用多个上下文管理器。" + +#: ../../whatsnew/2.7.rst:182 +msgid "" +"A new version of the :mod:`io` library, rewritten in C for performance." +msgstr "一个 :mod:`io` 库的新版本,用 C 重写以提升性能。" + +#: ../../whatsnew/2.7.rst:183 +msgid "The ordered-dictionary type described in :ref:`pep-0372`." +msgstr ":ref:`pep-0372` 所描述的有序字典类型。" + +#: ../../whatsnew/2.7.rst:184 +msgid "The new ``\",\"`` format specifier described in :ref:`pep-0378`." +msgstr ":ref:`pep-0378` 所描述的新的 ``\",\"`` 格式说明符。" + +#: ../../whatsnew/2.7.rst:185 +msgid "The :class:`memoryview` object." +msgstr ":class:`memoryview` 对象。" + +#: ../../whatsnew/2.7.rst:186 +msgid "" +"A small subset of the :mod:`importlib` module, `described below <#importlib-" +"section>`__." +msgstr ":mod:`importlib` 模块的一个较小子集,`described below <#importlib-section>`__。" + +#: ../../whatsnew/2.7.rst:188 +msgid "" +"The :func:`repr` of a float ``x`` is shorter in many cases: it's now based " +"on the shortest decimal string that's guaranteed to round back to ``x``. As" +" in previous versions of Python, it's guaranteed that ``float(repr(x))`` " +"recovers ``x``." +msgstr "" +"在很多情况下,浮点数 ``x`` 的 :func:`repr` 更短:现在它基于最短的十进制字符串 ,保证四舍五入到 ``x``。 与 Python " +"以前的版本一样,保证 ``float(repr(x))`` 能恢复到 ``x``。" + +#: ../../whatsnew/2.7.rst:192 +msgid "" +"Float-to-string and string-to-float conversions are correctly rounded. The " +":func:`round` function is also now correctly rounded." +msgstr "浮点数到字符串和字符串到浮点数的转换已正确舍入。 :func:`round` 函数现在也能正确舍入。" + +#: ../../whatsnew/2.7.rst:194 +msgid "" +"The :c:type:`PyCapsule` type, used to provide a C API for extension modules." +msgstr ":c:type:`PyCapsule` 类型,用于为扩展模块提供 C API 。" + +#: ../../whatsnew/2.7.rst:195 +msgid "The :c:func:`PyLong_AsLongAndOverflow` C API function." +msgstr ":c:func:`PyLong_AsLongAndOverflow` C API 函数 。" + +#: ../../whatsnew/2.7.rst:197 +msgid "Other new Python3-mode warnings include:" +msgstr "其他新的 Python3 模式警告包括:" + +#: ../../whatsnew/2.7.rst:199 +msgid "" +":func:`operator.isCallable` and :func:`operator.sequenceIncludes`, which are" +" not supported in 3.x, now trigger warnings." +msgstr "" + +#: ../../whatsnew/2.7.rst:201 +msgid "" +"The :option:`!-3` switch now automatically enables the :option:`!-Qwarn` " +"switch that causes warnings about using classic division with integers and " +"long integers." +msgstr "" +":option:`!-3` 开关现在会自动启用:option:`!-Qwarn` 开关,该开关会在使用经典整除法处理整数和长整数时发出警告。" + +#: ../../whatsnew/2.7.rst:214 +msgid "PEP 372: Adding an Ordered Dictionary to collections" +msgstr "PEP 372:将有序字典 添加到收藏集" + +#: ../../whatsnew/2.7.rst:216 +msgid "" +"Regular Python dictionaries iterate over key/value pairs in arbitrary order." +" Over the years, a number of authors have written alternative " +"implementations that remember the order that the keys were originally " +"inserted. Based on the experiences from those implementations, 2.7 " +"introduces a new :class:`~collections.OrderedDict` class in the " +":mod:`collections` module." +msgstr "" +"常规 Python 字典以任意顺序遍历键/值对。 多年来,许多作者编写了替代实现,以记住键最初插入的顺序。 基于这些实现的经验,2.7 在 " +":mod:`collections` 模块中引入了一个新的 :class:`~collections.OrderedDict` 类。" + +#: ../../whatsnew/2.7.rst:222 +msgid "" +"The :class:`~collections.OrderedDict` API provides the same interface as " +"regular dictionaries but iterates over keys and values in a guaranteed order" +" depending on when a key was first inserted::" +msgstr "" +":class:`~collections.OrderedDict` API 提供与普通字典相同的接口 " +",但会根据键首次插入的时间,按一定顺序遍历键和值::" + +#: ../../whatsnew/2.7.rst:233 +msgid "" +"If a new entry overwrites an existing entry, the original insertion position" +" is left unchanged::" +msgstr "如果新条目覆盖了现有条目,则原插入位置保持不变 ::" + +#: ../../whatsnew/2.7.rst:240 +msgid "Deleting an entry and reinserting it will move it to the end::" +msgstr "删除条目并重新插入会将其移至末尾 ::" + +#: ../../whatsnew/2.7.rst:247 +msgid "" +"The :meth:`~collections.OrderedDict.popitem` method has an optional *last* " +"argument that defaults to ``True``. If *last* is true, the most recently " +"added key is returned and removed; if it's false, the oldest key is " +"selected::" +msgstr "" +":meth:`~collections.OrderedDict.popitem` 方法有一个可选 *last* 参数 ,默认为 ``True`` 。如果" +" *last* 为真 ,则返回并删除最近添加的密钥;如果为 false ,则选择最旧的密钥 ::" + +#: ../../whatsnew/2.7.rst:262 +msgid "" +"Comparing two ordered dictionaries checks both the keys and values, and " +"requires that the insertion order was the same::" +msgstr "比较两个有序字典会同时检查键和值,并要求插入顺序相同 ::" + +#: ../../whatsnew/2.7.rst:278 +msgid "" +"Comparing an :class:`~collections.OrderedDict` with a regular dictionary " +"ignores the insertion order and just compares the keys and values." +msgstr "将 :class:`~collections.OrderedDict` 与普通字典进行比较时,会忽略插入顺序,只比较键和值。" + +#: ../../whatsnew/2.7.rst:281 +msgid "" +"How does the :class:`~collections.OrderedDict` work? It maintains a doubly-" +"linked list of keys, appending new keys to the list as they're inserted. A " +"secondary dictionary maps keys to their corresponding list node, so deletion" +" doesn't have to traverse the entire linked list and therefore remains O(1)." +msgstr "" + +#: ../../whatsnew/2.7.rst:287 +msgid "" +"The standard library now supports use of ordered dictionaries in several " +"modules." +msgstr "现在,标准库支持在多个模块 中使用有序字典。" + +#: ../../whatsnew/2.7.rst:290 +msgid "" +"The :mod:`ConfigParser` module uses them by default, meaning that " +"configuration files can now be read, modified, and then written back in " +"their original order." +msgstr "" + +#: ../../whatsnew/2.7.rst:294 +msgid "" +"The :meth:`~collections.somenamedtuple._asdict()` method for " +":func:`collections.namedtuple` now returns an ordered dictionary with the " +"values appearing in the same order as the underlying tuple indices." +msgstr "" +":func:`collections.namedtuple` 的 " +":meth:`~collections.somenamedtuple._asdict()` " +"方法现在会返回一个有序字典,其值的出现顺序与底层元组的索引相同。" + +#: ../../whatsnew/2.7.rst:298 +msgid "" +"The :mod:`json` module's :class:`~json.JSONDecoder` class constructor was " +"extended with an *object_pairs_hook* parameter to allow :class:`OrderedDict`" +" instances to be built by the decoder. Support was also added for third-" +"party tools like `PyYAML `_." +msgstr "" + +#: ../../whatsnew/2.7.rst:307 +msgid ":pep:`372` - Adding an ordered dictionary to collections" +msgstr ":pep:`372` - 将有序词典添加到集合中" + +#: ../../whatsnew/2.7.rst:307 +msgid "" +"PEP written by Armin Ronacher and Raymond Hettinger; implemented by Raymond " +"Hettinger." +msgstr "PEP 由 Armin Ronacher 和 Raymond Hettinger 撰写,由 Raymond Hettinger 实现。" + +#: ../../whatsnew/2.7.rst:313 +msgid "PEP 378: Format Specifier for Thousands Separator" +msgstr "PEP 378: 千位分隔符的格式说明符" + +#: ../../whatsnew/2.7.rst:315 +msgid "" +"To make program output more readable, it can be useful to add separators to " +"large numbers, rendering them as 18,446,744,073,709,551,616 instead of " +"18446744073709551616." +msgstr "" +"为了使程序输出更易读,可以在大数字上添加分隔符,将其显示为 18,446,744,073,709,551,616 而不是 " +"18446744073709551616。" + +#: ../../whatsnew/2.7.rst:319 +msgid "" +"The fully general solution for doing this is the :mod:`locale` module, which" +" can use different separators (\",\" in North America, \".\" in Europe) and " +"different grouping sizes, but :mod:`locale` is complicated to use and " +"unsuitable for multi-threaded applications where different threads are " +"producing output for different locales." +msgstr "" +"完全通用的解决方案是 :mod:`locale` 模块 ,它可以使用不同的分隔符(北美为\",\",欧洲为\".\")和不同的分组大小,但 " +":mod:`locale` 使用起来比较复杂,而且不适合多线程应用程序,因为不同的线程会为不同的本地生成输出。" + +#: ../../whatsnew/2.7.rst:325 +msgid "" +"Therefore, a simple comma-grouping mechanism has been added to the mini-" +"language used by the :meth:`str.format` method. When formatting a floating-" +"point number, simply include a comma between the width and the precision::" +msgstr "" +"因此,在 :meth:`str.format` 方法使用的迷你语言中添加了一个简单的逗号分组机制。 在格式化浮点数时,只需在宽度和精度之间加上逗号 ::" + +#: ../../whatsnew/2.7.rst:333 +msgid "When formatting an integer, include the comma after the width:" +msgstr "格式化整数时,在宽度后面加上逗号:" + +#: ../../whatsnew/2.7.rst:338 +msgid "" +"This mechanism is not adaptable at all; commas are always used as the " +"separator and the grouping is always into three-digit groups. The comma-" +"formatting mechanism isn't as general as the :mod:`locale` module, but it's " +"easier to use." +msgstr "" +"这种机制完全没有适应性;逗号总是用作分隔符,分组总是以三位数为一组。 逗号格式机制不如 :mod:`locale` 模块通用,但使用起来更方便。" + +#: ../../whatsnew/2.7.rst:345 +msgid ":pep:`378` - Format Specifier for Thousands Separator" +msgstr ":pep:`378` - 千位分隔符的格式说明符" + +#: ../../whatsnew/2.7.rst:346 +msgid "PEP written by Raymond Hettinger; implemented by Eric Smith." +msgstr "PEP 由 Raymond Hettinger 撰写,由 Eric Smith 实现" + +#: ../../whatsnew/2.7.rst:349 +msgid "PEP 389: The argparse Module for Parsing Command Lines" +msgstr "PEP 389:用于解析命令行的 argparse 模块 " + +#: ../../whatsnew/2.7.rst:351 +msgid "" +"The :mod:`argparse` module for parsing command-line arguments was added as a" +" more powerful replacement for the :mod:`optparse` module." +msgstr "用于解析命令-line参数的 :mod:`argparse` 模块是作为 :mod:`optparse` 模块更强大的替代功能而添加的。" + +#: ../../whatsnew/2.7.rst:355 +msgid "" +"This means Python now supports three different modules for parsing command-" +"line arguments: :mod:`getopt`, :mod:`optparse`, and :mod:`argparse`. The " +":mod:`getopt` module closely resembles the C library's :c:func:`getopt` " +"function, so it remains useful if you're writing a Python prototype that " +"will eventually be rewritten in C. :mod:`optparse` becomes redundant, but " +"there are no plans to remove it because there are many scripts still using " +"it, and there's no automated way to update these scripts. (Making the " +":mod:`argparse` API consistent with :mod:`optparse`'s interface was " +"discussed but rejected as too messy and difficult.)" +msgstr "" + +#: ../../whatsnew/2.7.rst:366 +msgid "" +"In short, if you're writing a new script and don't need to worry about " +"compatibility with earlier versions of Python, use :mod:`argparse` instead " +"of :mod:`optparse`." +msgstr "" +"简而言之,如果你是在编写新脚本并且不需要担心与 Python 较早版本的兼容性,请使用 :mod:`argparse` 而不是 " +":mod:`optparse`。" + +#: ../../whatsnew/2.7.rst:370 +msgid "Here's an example::" +msgstr "以下是为示例代码::" + +#: ../../whatsnew/2.7.rst:393 +msgid "" +"Unless you override it, :option:`!-h` and :option:`!--help` switches are " +"automatically added, and produce neatly formatted output::" +msgstr "除非你覆盖它,否则会自动添加 :option:`!-h` 和 :option:`!--help` 开关,并产生格式化良好的输出::" + +#: ../../whatsnew/2.7.rst:410 +msgid "" +"As with :mod:`optparse`, the command-line switches and arguments are " +"returned as an object with attributes named by the *dest* parameters::" +msgstr "与 :mod:`optparse` 一样,命令行开关和参数将返回为一个具有通过 *dest* 形参所指定的属性的对象::" + +#: ../../whatsnew/2.7.rst:425 +msgid "" +":mod:`argparse` has much fancier validation than :mod:`optparse`; you can " +"specify an exact number of arguments as an integer, 0 or more arguments by " +"passing ``'*'``, 1 or more by passing ``'+'``, or an optional argument with " +"``'?'``. A top-level parser can contain sub-parsers to define subcommands " +"that have different sets of switches, as in ``svn commit``, ``svn " +"checkout``, etc. You can specify an argument's type as " +":class:`~argparse.FileType`, which will automatically open files for you and" +" understands that ``'-'`` means standard input or output." +msgstr "" + +#: ../../whatsnew/2.7.rst:438 +msgid ":mod:`argparse` documentation" +msgstr ":mod:`argparse` 文档" + +#: ../../whatsnew/2.7.rst:438 +msgid "The documentation page of the argparse module." +msgstr "argparse 模块的文档页面。" + +#: ../../whatsnew/2.7.rst:442 +msgid ":ref:`upgrading-optparse-code`" +msgstr ":ref:`upgrading-optparse-code`" + +#: ../../whatsnew/2.7.rst:441 +msgid "" +"Part of the Python documentation, describing how to convert code that uses " +":mod:`optparse`." +msgstr "Python 文档的一部分,描述如何转换使用了 :mod:`optparse` 的代码。" + +#: ../../whatsnew/2.7.rst:444 +msgid ":pep:`389` - argparse - New Command Line Parsing Module" +msgstr ":pep:`389` - argparse - 新的命令行解析模块" + +#: ../../whatsnew/2.7.rst:445 +msgid "PEP written and implemented by Steven Bethard." +msgstr "PEP 由 Steven Bethard 撰写并实现。" + +#: ../../whatsnew/2.7.rst:448 +msgid "PEP 391: Dictionary-Based Configuration For Logging" +msgstr "PEP 391: 基于字典的日志配置" + +#: ../../whatsnew/2.7.rst:450 +msgid "" +"The :mod:`logging` module is very flexible; applications can define a tree " +"of logging subsystems, and each logger in this tree can filter out certain " +"messages, format them differently, and direct messages to a varying number " +"of handlers." +msgstr "" + +#: ../../whatsnew/2.7.rst:455 +msgid "" +"All this flexibility can require a lot of configuration. You can write " +"Python statements to create objects and set their properties, but a complex " +"set-up requires verbose but boring code. :mod:`logging` also supports a " +":func:`~logging.fileConfig` function that parses a file, but the file format" +" doesn't support configuring filters, and it's messier to generate " +"programmatically." +msgstr "" + +#: ../../whatsnew/2.7.rst:462 +msgid "" +"Python 2.7 adds a :func:`~logging.dictConfig` function that uses a " +"dictionary to configure logging. There are many ways to produce a " +"dictionary from different sources: construct one with code; parse a file " +"containing JSON; or use a YAML parsing library if one is installed. For " +"more information see :ref:`logging-config-api`." +msgstr "" + +#: ../../whatsnew/2.7.rst:468 +msgid "" +"The following example configures two loggers, the root logger and a logger " +"named \"network\". Messages sent to the root logger will be sent to the " +"system log using the syslog protocol, and messages to the \"network\" logger" +" will be written to a :file:`network.log` file that will be rotated once the" +" log reaches 1MB." +msgstr "" + +#: ../../whatsnew/2.7.rst:518 +msgid "" +"Three smaller enhancements to the :mod:`logging` module, all implemented by " +"Vinay Sajip, are:" +msgstr "" + +#: ../../whatsnew/2.7.rst:523 +msgid "" +"The :class:`~logging.handlers.SysLogHandler` class now supports syslogging " +"over TCP. The constructor has a *socktype* parameter giving the type of " +"socket to use, either :const:`socket.SOCK_DGRAM` for UDP or " +":const:`socket.SOCK_STREAM` for TCP. The default protocol remains UDP." +msgstr "" + +#: ../../whatsnew/2.7.rst:529 +msgid "" +":class:`~logging.Logger` instances gained a :meth:`~logging.Logger.getChild`" +" method that retrieves a descendant logger using a relative path. For " +"example, once you retrieve a logger by doing ``log = getLogger('app')``, " +"calling ``log.getChild('network.listen')`` is equivalent to " +"``getLogger('app.network.listen')``." +msgstr "" + +#: ../../whatsnew/2.7.rst:535 +msgid "" +"The :class:`~logging.LoggerAdapter` class gained an " +":meth:`~logging.LoggerAdapter.isEnabledFor` method that takes a *level* and " +"returns whether the underlying logger would process a message of that level " +"of importance." +msgstr "" + +#: ../../whatsnew/2.7.rst:544 +msgid ":pep:`391` - Dictionary-Based Configuration For Logging" +msgstr ":pep:`391` - 基于字典的日志配置" + +#: ../../whatsnew/2.7.rst:545 +msgid "PEP written and implemented by Vinay Sajip." +msgstr "PEP 由 Vinay Sajip 撰写并实现" + +#: ../../whatsnew/2.7.rst:548 +msgid "PEP 3106: Dictionary Views" +msgstr "PEP 3106: 字典视图" + +#: ../../whatsnew/2.7.rst:550 +msgid "" +"The dictionary methods :meth:`~dict.keys`, :meth:`~dict.values`, and " +":meth:`~dict.items` are different in Python 3.x. They return an object " +"called a :dfn:`view` instead of a fully materialized list." +msgstr "" +"字典方法 :meth:`~dict.keys`, :meth:`~dict.values`, and :meth:`~dict.items` 在 " +"Python 3.x 有所不同。 它们将返回名为 :dfn:`view` 的对象而不是完整的列表。" + +#: ../../whatsnew/2.7.rst:554 +msgid "" +"It's not possible to change the return values of :meth:`~dict.keys`, " +":meth:`~dict.values`, and :meth:`~dict.items` in Python 2.7 because too much" +" code would break. Instead the 3.x versions were added under the new names " +":meth:`~dict.viewkeys`, :meth:`~dict.viewvalues`, and " +":meth:`~dict.viewitems`." +msgstr "" + +#: ../../whatsnew/2.7.rst:568 +msgid "" +"Views can be iterated over, but the key and item views also behave like " +"sets. The ``&`` operator performs intersection, and ``|`` performs a " +"union::" +msgstr "视图可以被迭代,但键和条目视图的行为也很像是集合。 ``&`` 运算符执行交集运算,``|`` 执行并集运算::" + +#: ../../whatsnew/2.7.rst:579 +msgid "" +"The view keeps track of the dictionary and its contents change as the " +"dictionary is modified::" +msgstr "视图会追踪字典及字典被修改时的内容变化::" + +#: ../../whatsnew/2.7.rst:589 +msgid "" +"However, note that you can't add or remove keys while you're iterating over " +"the view::" +msgstr "但是,请注意在对视图进行迭代时你是不能添加或移除键的::" + +#: ../../whatsnew/2.7.rst:599 +msgid "" +"You can use the view methods in Python 2.x code, and the 2to3 converter will" +" change them to the standard :meth:`~dict.keys`, :meth:`~dict.values`, and " +":meth:`~dict.items` methods." +msgstr "" + +#: ../../whatsnew/2.7.rst:606 +msgid ":pep:`3106` - Revamping dict.keys(), .values() and .items()" +msgstr ":pep:`3106` - 改造 dict.keys(), .values() 和 .items()" + +#: ../../whatsnew/2.7.rst:606 +msgid "" +"PEP written by Guido van Rossum. Backported to 2.7 by Alexandre Vassalotti; " +":issue:`1967`." +msgstr "" +"PEP 由 Guido van Rossum 撰写。 由 Alexandre Vassalotti 反向移植到 2.7; :issue:`1967`。" + +#: ../../whatsnew/2.7.rst:611 +msgid "PEP 3137: The memoryview Object" +msgstr "PEP 3137: memoryview 对象" + +#: ../../whatsnew/2.7.rst:613 +msgid "" +"The :class:`memoryview` object provides a view of another object's memory " +"content that matches the :class:`bytes` type's interface." +msgstr ":class:`memoryview` 对象提供与 :class:`bytes` 类型的接口相匹配的另一个对象的内存内容的视图。" + +#: ../../whatsnew/2.7.rst:631 +msgid "" +"The content of the view can be converted to a string of bytes or a list of " +"integers:" +msgstr "视图的内容可被转换为一个字节串或整数列表:" + +#: ../../whatsnew/2.7.rst:643 +msgid "" +":class:`memoryview` objects allow modifying the underlying object if it's a " +"mutable object." +msgstr ":class:`memoryview` 对象允许对属于可变对象的下层对象进行修改。" + +#: ../../whatsnew/2.7.rst:666 +msgid ":pep:`3137` - Immutable Bytes and Mutable Buffer" +msgstr ":pep:`3137` - 不变字节和可变缓冲区" + +#: ../../whatsnew/2.7.rst:665 +msgid "" +"PEP written by Guido van Rossum. Implemented by Travis Oliphant, Antoine " +"Pitrou and others. Backported to 2.7 by Antoine Pitrou; :issue:`2396`." +msgstr "" +"PEP 由 Guido van Rossum 撰写。 由 Travis Oliphant, Antoine Pitrou 等人实现。 由 Antoine" +" Pitrou 向下移植到 2.7; :issue:`2396`。" + +#: ../../whatsnew/2.7.rst:672 +msgid "Other Language Changes" +msgstr "其他语言特性修改" + +#: ../../whatsnew/2.7.rst:674 +msgid "Some smaller changes made to the core Python language are:" +msgstr "对Python 语言核心进行的小改动:" + +#: ../../whatsnew/2.7.rst:676 +msgid "" +"The syntax for set literals has been backported from Python 3.x. Curly " +"brackets are used to surround the contents of the resulting mutable set; set" +" literals are distinguished from dictionaries by not containing colons and " +"values. ``{}`` continues to represent an empty dictionary; use ``set()`` for" +" an empty set." +msgstr "" +"已从 Python 3.x 向下移植了集合字面值语法。 使用花括号来标记可变集合的内容;集合与字典的区别在于它不包含冒号及映射的值。 ``{}`` " +"仍然表示空字典;请使用 ``set()`` 来表示空集合。" + +#: ../../whatsnew/2.7.rst:693 +msgid "Backported by Alexandre Vassalotti; :issue:`2335`." +msgstr "由 Alexandre Vassalotti 向下移植; :issue:`2335`。" + +#: ../../whatsnew/2.7.rst:695 +msgid "" +"Dictionary and set comprehensions are another feature backported from 3.x, " +"generalizing list/generator comprehensions to use the literal syntax for " +"sets and dictionaries." +msgstr "字典与集合推导式是另一个从 3.x 向下移植的特性,对列表/生成器推导式进行一般化以针对集合与字典使用字面值语法。" + +#: ../../whatsnew/2.7.rst:707 +msgid "Backported by Alexandre Vassalotti; :issue:`2333`." +msgstr "由 Alexandre Vassalotti 向下移植; :issue:`2333`。" + +#: ../../whatsnew/2.7.rst:709 +msgid "" +"The :keyword:`with` statement can now use multiple context managers in one " +"statement. Context managers are processed from left to right and each one " +"is treated as beginning a new :keyword:`!with` statement. This means that::" +msgstr "" +"现在 :keyword:`with` 语句可以在一个语句中使用多个上下文管理器。 上下文管理器将按从左到右的顺序处理并且每个都会被视为开始一个新的 " +":keyword:`!with` 语句。 这意味着::" + +#: ../../whatsnew/2.7.rst:717 +msgid "is equivalent to::" +msgstr "相当于::" + +#: ../../whatsnew/2.7.rst:723 +msgid "" +"The :func:`contextlib.nested` function provides a very similar function, so " +"it's no longer necessary and has been deprecated." +msgstr "" + +#: ../../whatsnew/2.7.rst:726 +msgid "" +"(Proposed in https://codereview.appspot.com/53094; implemented by Georg " +"Brandl.)" +msgstr "" + +#: ../../whatsnew/2.7.rst:729 +msgid "" +"Conversions between floating-point numbers and strings are now correctly " +"rounded on most platforms. These conversions occur in many different " +"places: :func:`str` on floats and complex numbers; the :class:`float` and " +":class:`complex` constructors; numeric formatting; serializing and " +"deserializing floats and complex numbers using the :mod:`marshal`, " +":mod:`pickle` and :mod:`json` modules; parsing of float and imaginary " +"literals in Python code; and :class:`~decimal.Decimal`-to-float conversion." +msgstr "" + +#: ../../whatsnew/2.7.rst:741 +msgid "" +"Related to this, the :func:`repr` of a floating-point number *x* now returns" +" a result based on the shortest decimal string that's guaranteed to round " +"back to *x* under correct rounding (with round-half-to-even rounding mode)." +" Previously it gave a string based on rounding x to 17 decimal digits." +msgstr "" + +#: ../../whatsnew/2.7.rst:749 +msgid "" +"The rounding library responsible for this improvement works on Windows and " +"on Unix platforms using the gcc, icc, or suncc compilers. There may be a " +"small number of platforms where correct operation of this code cannot be " +"guaranteed, so the code is not used on such systems. You can find out which" +" code is being used by checking :data:`sys.float_repr_style`, which will be" +" ``short`` if the new code is in use and ``legacy`` if it isn't." +msgstr "" + +#: ../../whatsnew/2.7.rst:757 +msgid "" +"Implemented by Eric Smith and Mark Dickinson, using David Gay's " +":file:`dtoa.c` library; :issue:`7117`." +msgstr "" + +#: ../../whatsnew/2.7.rst:760 +msgid "" +"Conversions from long integers and regular integers to floating point now " +"round differently, returning the floating-point number closest to the " +"number. This doesn't matter for small integers that can be converted " +"exactly, but for large numbers that will unavoidably lose precision, Python " +"2.7 now approximates more closely. For example, Python 2.6 computed the " +"following::" +msgstr "" + +#: ../../whatsnew/2.7.rst:773 +msgid "" +"Python 2.7's floating-point result is larger, but much closer to the true " +"value::" +msgstr "" + +#: ../../whatsnew/2.7.rst:782 +msgid "(Implemented by Mark Dickinson; :issue:`3166`.)" +msgstr "" + +#: ../../whatsnew/2.7.rst:784 +msgid "" +"Integer division is also more accurate in its rounding behaviours. (Also " +"implemented by Mark Dickinson; :issue:`1811`.)" +msgstr "" + +#: ../../whatsnew/2.7.rst:787 +msgid "" +"Implicit coercion for complex numbers has been removed; the interpreter will" +" no longer ever attempt to call a :meth:`__coerce__` method on complex " +"objects. (Removed by Meador Inge and Mark Dickinson; :issue:`5211`.)" +msgstr "" + +#: ../../whatsnew/2.7.rst:791 +msgid "" +"The :meth:`str.format` method now supports automatic numbering of the " +"replacement fields. This makes using :meth:`str.format` more closely " +"resemble using ``%s`` formatting::" +msgstr "" + +#: ../../whatsnew/2.7.rst:800 +msgid "" +"The auto-numbering takes the fields from left to right, so the first " +"``{...}`` specifier will use the first argument to :meth:`str.format`, the " +"next specifier will use the next argument, and so on. You can't mix auto-" +"numbering and explicit numbering -- either number all of your specifier " +"fields or none of them -- but you can mix auto-numbering and named fields, " +"as in the second example above. (Contributed by Eric Smith; :issue:`5237`.)" +msgstr "" + +#: ../../whatsnew/2.7.rst:807 +msgid "" +"Complex numbers now correctly support usage with :func:`format`, and default" +" to being right-aligned. Specifying a precision or comma-separation applies " +"to both the real and imaginary parts of the number, but a specified field " +"width and alignment is applied to the whole of the resulting ``1.5+3j`` " +"output. (Contributed by Eric Smith; :issue:`1588` and :issue:`7988`.)" +msgstr "" + +#: ../../whatsnew/2.7.rst:814 +msgid "" +"The 'F' format code now always formats its output using uppercase " +"characters, so it will now produce 'INF' and 'NAN'. (Contributed by Eric " +"Smith; :issue:`3382`.)" +msgstr "" + +#: ../../whatsnew/2.7.rst:818 +msgid "" +"A low-level change: the :meth:`object.__format__` method now triggers a " +":exc:`PendingDeprecationWarning` if it's passed a format string, because the" +" :meth:`__format__` method for :class:`object` converts the object to a " +"string representation and formats that. Previously the method silently " +"applied the format string to the string representation, but that could hide " +"mistakes in Python code. If you're supplying formatting information such as" +" an alignment or precision, presumably you're expecting the formatting to be" +" applied in some object-specific way. (Fixed by Eric Smith; :issue:`7994`.)" +msgstr "" + +#: ../../whatsnew/2.7.rst:828 +msgid "" +"The :func:`int` and :func:`long` types gained a ``bit_length`` method that " +"returns the number of bits necessary to represent its argument in binary::" +msgstr "" + +#: ../../whatsnew/2.7.rst:843 +msgid "(Contributed by Fredrik Johansson and Victor Stinner; :issue:`3439`.)" +msgstr "" + +#: ../../whatsnew/2.7.rst:845 +msgid "" +"The :keyword:`import` statement will no longer try an absolute import if a " +"relative import (e.g. ``from .os import sep``) fails. This fixes a bug, but" +" could possibly break certain :keyword:`!import` statements that were only " +"working by accident. (Fixed by Meador Inge; :issue:`7902`.)" +msgstr "" + +#: ../../whatsnew/2.7.rst:851 +msgid "" +"It's now possible for a subclass of the built-in :class:`unicode` type to " +"override the :meth:`__unicode__` method. (Implemented by Victor Stinner; " +":issue:`1583863`.)" +msgstr "" + +#: ../../whatsnew/2.7.rst:855 +msgid "" +"The :class:`bytearray` type's :meth:`~bytearray.translate` method now " +"accepts ``None`` as its first argument. (Fixed by Georg Brandl; " +":issue:`4759`.)" +msgstr "" + +#: ../../whatsnew/2.7.rst:861 +msgid "" +"When using ``@classmethod`` and ``@staticmethod`` to wrap methods as class " +"or static methods, the wrapper object now exposes the wrapped function as " +"their :attr:`__func__` attribute. (Contributed by Amaury Forgeot d'Arc, " +"after a suggestion by George Sakkis; :issue:`5982`.)" +msgstr "" + +#: ../../whatsnew/2.7.rst:867 ../../whatsnew/2.7.rst:2462 +msgid "" +"When a restricted set of attributes were set using ``__slots__``, deleting " +"an unset attribute would not raise :exc:`AttributeError` as you would " +"expect. Fixed by Benjamin Peterson; :issue:`7604`.)" +msgstr "" + +#: ../../whatsnew/2.7.rst:871 +msgid "" +"Two new encodings are now supported: \"cp720\", used primarily for Arabic " +"text; and \"cp858\", a variant of CP 850 that adds the euro symbol. (CP720 " +"contributed by Alexander Belchenko and Amaury Forgeot d'Arc in " +":issue:`1616979`; CP858 contributed by Tim Hatch in :issue:`8016`.)" +msgstr "" + +#: ../../whatsnew/2.7.rst:877 +msgid "" +"The :class:`file` object will now set the :attr:`filename` attribute on the " +":exc:`IOError` exception when trying to open a directory on POSIX platforms " +"(noted by Jan Kaliszewski; :issue:`4764`), and now explicitly checks for and" +" forbids writing to read-only file objects instead of trusting the C library" +" to catch and report the error (fixed by Stefan Krah; :issue:`5677`)." +msgstr "" + +#: ../../whatsnew/2.7.rst:884 +msgid "" +"The Python tokenizer now translates line endings itself, so the " +":func:`compile` built-in function now accepts code using any line-ending " +"convention. Additionally, it no longer requires that the code end in a " +"newline." +msgstr "" + +#: ../../whatsnew/2.7.rst:889 +msgid "" +"Extra parentheses in function definitions are illegal in Python 3.x, meaning" +" that you get a syntax error from ``def f((x)): pass``. In Python3-warning " +"mode, Python 2.7 will now warn about this odd usage. (Noted by James " +"Lingard; :issue:`7362`.)" +msgstr "" + +#: ../../whatsnew/2.7.rst:894 +msgid "" +"It's now possible to create weak references to old-style class objects. " +"New-style classes were always weak-referenceable. (Fixed by Antoine Pitrou;" +" :issue:`8268`.)" +msgstr "" + +#: ../../whatsnew/2.7.rst:898 +msgid "" +"When a module object is garbage-collected, the module's dictionary is now " +"only cleared if no one else is holding a reference to the dictionary " +"(:issue:`7140`)." +msgstr "" + +#: ../../whatsnew/2.7.rst:907 +msgid "Interpreter Changes" +msgstr "解释器改动" + +#: ../../whatsnew/2.7.rst:909 +msgid "" +"A new environment variable, :envvar:`PYTHONWARNINGS`, allows controlling " +"warnings. It should be set to a string containing warning settings, " +"equivalent to those used with the :option:`-W` switch, separated by commas. " +"(Contributed by Brian Curtin; :issue:`7301`.)" +msgstr "" + +#: ../../whatsnew/2.7.rst:915 +msgid "" +"For example, the following setting will print warnings every time they " +"occur, but turn warnings from the :mod:`Cookie` module into an error. (The " +"exact syntax for setting an environment variable varies across operating " +"systems and shells.)" +msgstr "" + +#: ../../whatsnew/2.7.rst:928 +msgid "Optimizations" +msgstr "性能优化" + +#: ../../whatsnew/2.7.rst:930 +msgid "Several performance enhancements have been added:" +msgstr "" + +#: ../../whatsnew/2.7.rst:932 +msgid "" +"A new opcode was added to perform the initial setup for :keyword:`with` " +"statements, looking up the :meth:`__enter__` and :meth:`__exit__` methods. " +"(Contributed by Benjamin Peterson.)" +msgstr "" + +#: ../../whatsnew/2.7.rst:936 +msgid "" +"The garbage collector now performs better for one common usage pattern: when" +" many objects are being allocated without deallocating any of them. This " +"would previously take quadratic time for garbage collection, but now the " +"number of full garbage collections is reduced as the number of objects on " +"the heap grows. The new logic only performs a full garbage collection pass " +"when the middle generation has been collected 10 times and when the number " +"of survivor objects from the middle generation exceeds 10% of the number of " +"objects in the oldest generation. (Suggested by Martin von Löwis and " +"implemented by Antoine Pitrou; :issue:`4074`.)" +msgstr "" + +#: ../../whatsnew/2.7.rst:947 +msgid "" +"The garbage collector tries to avoid tracking simple containers which can't " +"be part of a cycle. In Python 2.7, this is now true for tuples and dicts " +"containing atomic types (such as ints, strings, etc.). Transitively, a dict " +"containing tuples of atomic types won't be tracked either. This helps reduce" +" the cost of each garbage collection by decreasing the number of objects to " +"be considered and traversed by the collector. (Contributed by Antoine " +"Pitrou; :issue:`4688`.)" +msgstr "" + +#: ../../whatsnew/2.7.rst:956 +msgid "" +"Long integers are now stored internally either in base ``2**15`` or in base " +"``2**30``, the base being determined at build time. Previously, they were " +"always stored in base ``2**15``. Using base ``2**30`` gives significant " +"performance improvements on 64-bit machines, but benchmark results on 32-bit" +" machines have been mixed. Therefore, the default is to use base ``2**30`` " +"on 64-bit machines and base ``2**15`` on 32-bit machines; on Unix, there's a" +" new configure option :option:`!--enable-big-digits` that can be used to " +"override this default." +msgstr "" + +#: ../../whatsnew/2.7.rst:965 +msgid "" +"Apart from the performance improvements this change should be invisible to " +"end users, with one exception: for testing and debugging purposes there's a " +"new structseq :data:`sys.long_info` that provides information about the " +"internal format, giving the number of bits per digit and the size in bytes " +"of the C type used to store each digit::" +msgstr "" + +#: ../../whatsnew/2.7.rst:976 +msgid "(Contributed by Mark Dickinson; :issue:`4258`.)" +msgstr "(由 Mark Dickinson在 :issue:`4258` 贡献)" + +#: ../../whatsnew/2.7.rst:978 +msgid "" +"Another set of changes made long objects a few bytes smaller: 2 bytes " +"smaller on 32-bit systems and 6 bytes on 64-bit. (Contributed by Mark " +"Dickinson; :issue:`5260`.)" +msgstr "" + +#: ../../whatsnew/2.7.rst:982 +msgid "" +"The division algorithm for long integers has been made faster by tightening " +"the inner loop, doing shifts instead of multiplications, and fixing an " +"unnecessary extra iteration. Various benchmarks show speedups of between 50%" +" and 150% for long integer divisions and modulo operations. (Contributed by " +"Mark Dickinson; :issue:`5512`.) Bitwise operations are also significantly " +"faster (initial patch by Gregory Smith; :issue:`1087418`)." +msgstr "" + +#: ../../whatsnew/2.7.rst:991 +msgid "" +"The implementation of ``%`` checks for the left-side operand being a Python " +"string and special-cases it; this results in a 1--3% performance increase " +"for applications that frequently use ``%`` with strings, such as templating " +"libraries. (Implemented by Collin Winter; :issue:`5176`.)" +msgstr "" + +#: ../../whatsnew/2.7.rst:997 +msgid "" +"List comprehensions with an ``if`` condition are compiled into faster " +"bytecode. (Patch by Antoine Pitrou, back-ported to 2.7 by Jeffrey Yasskin; " +":issue:`4715`.)" +msgstr "" + +#: ../../whatsnew/2.7.rst:1001 +msgid "" +"Converting an integer or long integer to a decimal string was made faster by" +" special-casing base 10 instead of using a generalized conversion function " +"that supports arbitrary bases. (Patch by Gawain Bolton; :issue:`6713`.)" +msgstr "" + +#: ../../whatsnew/2.7.rst:1006 +msgid "" +"The :meth:`split`, :meth:`replace`, :meth:`rindex`, :meth:`rpartition`, and " +":meth:`rsplit` methods of string-like types (strings, Unicode strings, and " +":class:`bytearray` objects) now use a fast reverse-search algorithm instead " +"of a character-by-character scan. This is sometimes faster by a factor of " +"10. (Added by Florent Xicluna; :issue:`7462` and :issue:`7622`.)" +msgstr "" + +#: ../../whatsnew/2.7.rst:1013 +msgid "" +"The :mod:`pickle` and :mod:`cPickle` modules now automatically intern the " +"strings used for attribute names, reducing memory usage of the objects " +"resulting from unpickling. (Contributed by Jake McGuire; :issue:`5084`.)" +msgstr "" + +#: ../../whatsnew/2.7.rst:1018 +msgid "" +"The :mod:`cPickle` module now special-cases dictionaries, nearly halving the" +" time required to pickle them. (Contributed by Collin Winter; " +":issue:`5670`.)" +msgstr "" + +#: ../../whatsnew/2.7.rst:1025 +msgid "New and Improved Modules" +msgstr "新增和改进的模块" + +#: ../../whatsnew/2.7.rst:1027 +msgid "" +"As in every release, Python's standard library received a number of " +"enhancements and bug fixes. Here's a partial list of the most notable " +"changes, sorted alphabetically by module name. Consult the :file:`Misc/NEWS`" +" file in the source tree for a more complete list of changes, or look " +"through the Subversion logs for all the details." +msgstr "" + +#: ../../whatsnew/2.7.rst:1033 +msgid "" +"The :mod:`bdb` module's base debugging class :class:`~bdb.Bdb` gained a " +"feature for skipping modules. The constructor now takes an iterable " +"containing glob-style patterns such as ``django.*``; the debugger will not " +"step into stack frames from a module that matches one of these patterns. " +"(Contributed by Maru Newby after a suggestion by Senthil Kumaran; " +":issue:`5142`.)" +msgstr "" + +#: ../../whatsnew/2.7.rst:1041 +msgid "" +"The :mod:`binascii` module now supports the buffer API, so it can be used " +"with :class:`memoryview` instances and other similar buffer objects. " +"(Backported from 3.x by Florent Xicluna; :issue:`7703`.)" +msgstr "" + +#: ../../whatsnew/2.7.rst:1045 +msgid "" +"Updated module: the :mod:`bsddb` module has been updated from 4.7.2devel9 to" +" version 4.8.4 of `the pybsddb package " +"`__. The new version features " +"better Python 3.x compatibility, various bug fixes, and adds several new " +"BerkeleyDB flags and methods. (Updated by Jesús Cea Avión; :issue:`8156`. " +"The pybsddb changelog can be read at " +"http://hg.jcea.es/pybsddb/file/tip/ChangeLog.)" +msgstr "" + +#: ../../whatsnew/2.7.rst:1053 +msgid "" +"The :mod:`bz2` module's :class:`~bz2.BZ2File` now supports the context " +"management protocol, so you can write ``with bz2.BZ2File(...) as f:``. " +"(Contributed by Hagen Fürstenau; :issue:`3860`.)" +msgstr "" + +#: ../../whatsnew/2.7.rst:1057 +msgid "" +"New class: the :class:`~collections.Counter` class in the :mod:`collections`" +" module is useful for tallying data. :class:`~collections.Counter` " +"instances behave mostly like dictionaries but return zero for missing keys " +"instead of raising a :exc:`KeyError`:" +msgstr "" + +#: ../../whatsnew/2.7.rst:1079 +msgid "" +"There are three additional :class:`~collections.Counter` methods. " +":meth:`~collections.Counter.most_common` returns the N most common elements " +"and their counts. :meth:`~collections.Counter.elements` returns an iterator" +" over the contained elements, repeating each element as many times as its " +"count. :meth:`~collections.Counter.subtract` takes an iterable and subtracts" +" one for each element instead of adding; if the argument is a dictionary or " +"another :class:`Counter`, the counts are subtracted. ::" +msgstr "" + +#: ../../whatsnew/2.7.rst:1102 +msgid "Contributed by Raymond Hettinger; :issue:`1696199`." +msgstr "" + +#: ../../whatsnew/2.7.rst:1106 +msgid "" +"New class: :class:`~collections.OrderedDict` is described in the earlier " +"section :ref:`pep-0372`." +msgstr "" + +#: ../../whatsnew/2.7.rst:1109 +msgid "" +"New method: The :class:`~collections.deque` data type now has a " +":meth:`~collections.deque.count` method that returns the number of contained" +" elements equal to the supplied argument *x*, and a " +":meth:`~collections.deque.reverse` method that reverses the elements of the " +"deque in-place. :class:`~collections.deque` also exposes its maximum length" +" as the read-only :attr:`~collections.deque.maxlen` attribute. (Both " +"features added by Raymond Hettinger.)" +msgstr "" + +#: ../../whatsnew/2.7.rst:1117 +msgid "" +"The :class:`~collections.namedtuple` class now has an optional *rename* " +"parameter. If *rename* is true, field names that are invalid because they've" +" been repeated or aren't legal Python identifiers will be renamed to legal " +"names that are derived from the field's position within the list of fields:" +msgstr "" + +#: ../../whatsnew/2.7.rst:1128 +msgid "(Added by Raymond Hettinger; :issue:`1818`.)" +msgstr "" + +#: ../../whatsnew/2.7.rst:1130 +msgid "" +"Finally, the :class:`~collections.Mapping` abstract base class now returns " +":const:`NotImplemented` if a mapping is compared to another type that isn't " +"a :class:`Mapping`. (Fixed by Daniel Stutzbach; :issue:`8729`.)" +msgstr "" + +#: ../../whatsnew/2.7.rst:1135 +msgid "" +"Constructors for the parsing classes in the :mod:`ConfigParser` module now " +"take an *allow_no_value* parameter, defaulting to false; if true, options " +"without values will be allowed. For example::" +msgstr "" + +#: ../../whatsnew/2.7.rst:1157 +msgid "(Contributed by Mats Kindahl; :issue:`7005`.)" +msgstr "" + +#: ../../whatsnew/2.7.rst:1159 +msgid "" +"Deprecated function: :func:`contextlib.nested`, which allows handling more " +"than one context manager with a single :keyword:`with` statement, has been " +"deprecated, because the :keyword:`!with` statement now supports multiple " +"context managers." +msgstr "" + +#: ../../whatsnew/2.7.rst:1164 +msgid "" +"The :mod:`cookielib` module now ignores cookies that have an invalid version" +" field, one that doesn't contain an integer value. (Fixed by John J. Lee; " +":issue:`3924`.)" +msgstr "" + +#: ../../whatsnew/2.7.rst:1168 +msgid "" +"The :mod:`copy` module's :func:`~copy.deepcopy` function will now correctly " +"copy bound instance methods. (Implemented by Robert Collins; " +":issue:`1515`.)" +msgstr "" + +#: ../../whatsnew/2.7.rst:1172 +msgid "" +"The :mod:`ctypes` module now always converts ``None`` to a C ``NULL`` " +"pointer for arguments declared as pointers. (Changed by Thomas Heller; " +":issue:`4606`.) The underlying `libffi library " +"`__ has been updated to version 3.0.9, " +"containing various fixes for different platforms. (Updated by Matthias " +"Klose; :issue:`8142`.)" +msgstr "" + +#: ../../whatsnew/2.7.rst:1179 +msgid "" +"New method: the :mod:`datetime` module's :class:`~datetime.timedelta` class " +"gained a :meth:`~datetime.timedelta.total_seconds` method that returns the " +"number of seconds in the duration. (Contributed by Brian Quinlan; " +":issue:`5788`.)" +msgstr "" + +#: ../../whatsnew/2.7.rst:1183 +msgid "" +"New method: the :class:`~decimal.Decimal` class gained a " +":meth:`~decimal.Decimal.from_float` class method that performs an exact " +"conversion of a floating-point number to a :class:`~decimal.Decimal`. This " +"exact conversion strives for the closest decimal approximation to the " +"floating-point representation's value; the resulting decimal value will " +"therefore still include the inaccuracy, if any. For example, " +"``Decimal.from_float(0.1)`` returns " +"``Decimal('0.1000000000000000055511151231257827021181583404541015625')``. " +"(Implemented by Raymond Hettinger; :issue:`4796`.)" +msgstr "" + +#: ../../whatsnew/2.7.rst:1194 +msgid "" +"Comparing instances of :class:`~decimal.Decimal` with floating-point numbers" +" now produces sensible results based on the numeric values of the operands." +" Previously such comparisons would fall back to Python's default rules for " +"comparing objects, which produced arbitrary results based on their type. " +"Note that you still cannot combine :class:`Decimal` and floating-point in " +"other operations such as addition, since you should be explicitly choosing " +"how to convert between float and :class:`~decimal.Decimal`. (Fixed by Mark " +"Dickinson; :issue:`2531`.)" +msgstr "" + +#: ../../whatsnew/2.7.rst:1203 +msgid "" +"The constructor for :class:`~decimal.Decimal` now accepts floating-point " +"numbers (added by Raymond Hettinger; :issue:`8257`) and non-European Unicode" +" characters such as Arabic-Indic digits (contributed by Mark Dickinson; " +":issue:`6595`)." +msgstr "" + +#: ../../whatsnew/2.7.rst:1208 +msgid "" +"Most of the methods of the :class:`~decimal.Context` class now accept " +"integers as well as :class:`~decimal.Decimal` instances; the only exceptions" +" are the :meth:`~decimal.Context.canonical` and " +":meth:`~decimal.Context.is_canonical` methods. (Patch by Juan José Conti; " +":issue:`7633`.)" +msgstr "" + +#: ../../whatsnew/2.7.rst:1213 +msgid "" +"When using :class:`~decimal.Decimal` instances with a string's " +":meth:`~str.format` method, the default alignment was previously left-" +"alignment. This has been changed to right-alignment, which is more sensible" +" for numeric types. (Changed by Mark Dickinson; :issue:`6857`.)" +msgstr "" + +#: ../../whatsnew/2.7.rst:1218 +msgid "" +"Comparisons involving a signaling NaN value (or ``sNAN``) now signal " +":const:`InvalidOperation` instead of silently returning a true or false " +"value depending on the comparison operator. Quiet NaN values (or ``NaN``) " +"are now hashable. (Fixed by Mark Dickinson; :issue:`7279`.)" +msgstr "" + +#: ../../whatsnew/2.7.rst:1224 +msgid "" +"The :mod:`difflib` module now produces output that is more compatible with " +"modern :command:`diff`/:command:`patch` tools through one small change, " +"using a tab character instead of spaces as a separator in the header giving " +"the filename. (Fixed by Anatoly Techtonik; :issue:`7585`.)" +msgstr "" + +#: ../../whatsnew/2.7.rst:1230 +msgid "" +"The Distutils ``sdist`` command now always regenerates the :file:`MANIFEST` " +"file, since even if the :file:`MANIFEST.in` or :file:`setup.py` files " +"haven't been modified, the user might have created some new files that " +"should be included. (Fixed by Tarek Ziadé; :issue:`8688`.)" +msgstr "" + +#: ../../whatsnew/2.7.rst:1236 +msgid "" +"The :mod:`doctest` module's :const:`IGNORE_EXCEPTION_DETAIL` flag will now " +"ignore the name of the module containing the exception being tested. (Patch" +" by Lennart Regebro; :issue:`7490`.)" +msgstr "" + +#: ../../whatsnew/2.7.rst:1240 +msgid "" +"The :mod:`email` module's :class:`~email.message.Message` class will now " +"accept a Unicode-valued payload, automatically converting the payload to the" +" encoding specified by :attr:`output_charset`. (Added by R. David Murray; " +":issue:`1368247`.)" +msgstr "" + +#: ../../whatsnew/2.7.rst:1245 +msgid "" +"The :class:`~fractions.Fraction` class now accepts a single float or " +":class:`~decimal.Decimal` instance, or two rational numbers, as arguments to" +" its constructor. (Implemented by Mark Dickinson; rationals added in " +":issue:`5812`, and float/decimal in :issue:`8294`.)" +msgstr "" + +#: ../../whatsnew/2.7.rst:1251 +msgid "" +"Ordering comparisons (``<``, ``<=``, ``>``, ``>=``) between fractions and " +"complex numbers now raise a :exc:`TypeError`. This fixes an oversight, " +"making the :class:`~fractions.Fraction` match the other numeric types." +msgstr "" + +#: ../../whatsnew/2.7.rst:1258 +msgid "" +"New class: :class:`~ftplib.FTP_TLS` in the :mod:`ftplib` module provides " +"secure FTP connections using TLS encapsulation of authentication as well as " +"subsequent control and data transfers. (Contributed by Giampaolo Rodola; " +":issue:`2054`.)" +msgstr "" + +#: ../../whatsnew/2.7.rst:1264 +msgid "" +"The :meth:`~ftplib.FTP.storbinary` method for binary uploads can now restart" +" uploads thanks to an added *rest* parameter (patch by Pablo Mouzo; " +":issue:`6845`.)" +msgstr "" + +#: ../../whatsnew/2.7.rst:1268 +msgid "" +"New class decorator: :func:`~functools.total_ordering` in the " +":mod:`functools` module takes a class that defines an :meth:`__eq__` method " +"and one of :meth:`__lt__`, :meth:`__le__`, :meth:`__gt__`, or " +":meth:`__ge__`, and generates the missing comparison methods. Since the " +":meth:`__cmp__` method is being deprecated in Python 3.x, this decorator " +"makes it easier to define ordered classes. (Added by Raymond Hettinger; " +":issue:`5479`.)" +msgstr "" + +#: ../../whatsnew/2.7.rst:1276 +msgid "" +"New function: :func:`~functools.cmp_to_key` will take an old-style " +"comparison function that expects two arguments and return a new callable " +"that can be used as the *key* parameter to functions such as :func:`sorted`," +" :func:`min` and :func:`max`, etc. The primary intended use is to help with" +" making code compatible with Python 3.x. (Added by Raymond Hettinger.)" +msgstr "" + +#: ../../whatsnew/2.7.rst:1283 +msgid "" +"New function: the :mod:`gc` module's :func:`~gc.is_tracked` returns true if " +"a given instance is tracked by the garbage collector, false otherwise. " +"(Contributed by Antoine Pitrou; :issue:`4688`.)" +msgstr "" + +#: ../../whatsnew/2.7.rst:1287 +msgid "" +"The :mod:`gzip` module's :class:`~gzip.GzipFile` now supports the context " +"management protocol, so you can write ``with gzip.GzipFile(...) as f:`` " +"(contributed by Hagen Fürstenau; :issue:`3860`), and it now implements the " +":class:`io.BufferedIOBase` ABC, so you can wrap it with " +":class:`io.BufferedReader` for faster processing (contributed by Nir Aides; " +":issue:`7471`). It's also now possible to override the modification time " +"recorded in a gzipped file by providing an optional timestamp to the " +"constructor. (Contributed by Jacques Frechet; :issue:`4272`.)" +msgstr "" + +#: ../../whatsnew/2.7.rst:1297 +msgid "" +"Files in gzip format can be padded with trailing zero bytes; the :mod:`gzip`" +" module will now consume these trailing bytes. (Fixed by Tadek Pietraszek " +"and Brian Curtin; :issue:`2846`.)" +msgstr "" + +#: ../../whatsnew/2.7.rst:1301 +msgid "" +"New attribute: the :mod:`hashlib` module now has an " +":attr:`~hashlib.hashlib.algorithms` attribute containing a tuple naming the " +"supported algorithms. In Python 2.7, ``hashlib.algorithms`` contains " +"``('md5', 'sha1', 'sha224', 'sha256', 'sha384', 'sha512')``. (Contributed by" +" Carl Chenet; :issue:`7418`.)" +msgstr "" + +#: ../../whatsnew/2.7.rst:1307 +msgid "" +"The default :class:`~httplib.HTTPResponse` class used by the :mod:`httplib` " +"module now supports buffering, resulting in much faster reading of HTTP " +"responses. (Contributed by Kristján Valur Jónsson; :issue:`4879`.)" +msgstr "" + +#: ../../whatsnew/2.7.rst:1311 +msgid "" +"The :class:`~httplib.HTTPConnection` and :class:`~httplib.HTTPSConnection` " +"classes now support a *source_address* parameter, a ``(host, port)`` 2-tuple" +" giving the source address that will be used for the connection. " +"(Contributed by Eldon Ziegler; :issue:`3972`.)" +msgstr "" + +#: ../../whatsnew/2.7.rst:1316 +msgid "" +"The :mod:`ihooks` module now supports relative imports. Note that " +":mod:`ihooks` is an older module for customizing imports, superseded by the " +":mod:`imputil` module added in Python 2.0. (Relative import support added by" +" Neil Schemenauer.)" +msgstr "" + +#: ../../whatsnew/2.7.rst:1323 +msgid "" +"The :mod:`imaplib` module now supports IPv6 addresses. (Contributed by Derek" +" Morr; :issue:`1655`.)" +msgstr "" + +#: ../../whatsnew/2.7.rst:1326 +msgid "" +"New function: the :mod:`inspect` module's :func:`~inspect.getcallargs` takes" +" a callable and its positional and keyword arguments, and figures out which " +"of the callable's parameters will receive each argument, returning a " +"dictionary mapping argument names to their values. For example::" +msgstr "" + +#: ../../whatsnew/2.7.rst:1343 +msgid "Contributed by George Sakkis; :issue:`3135`." +msgstr "由 Georg Sakkis 在 :issue:`3135` 中贡献。" + +#: ../../whatsnew/2.7.rst:1345 +msgid "" +"Updated module: The :mod:`io` library has been upgraded to the version " +"shipped with Python 3.1. For 3.1, the I/O library was entirely rewritten in" +" C and is 2 to 20 times faster depending on the task being performed. The " +"original Python version was renamed to the :mod:`_pyio` module." +msgstr "" + +#: ../../whatsnew/2.7.rst:1350 +msgid "" +"One minor resulting change: the :class:`io.TextIOBase` class now has an " +":attr:`errors` attribute giving the error setting used for encoding and " +"decoding errors (one of ``'strict'``, ``'replace'``, ``'ignore'``)." +msgstr "" + +#: ../../whatsnew/2.7.rst:1355 +msgid "" +"The :class:`io.FileIO` class now raises an :exc:`OSError` when passed an " +"invalid file descriptor. (Implemented by Benjamin Peterson; :issue:`4991`.)" +" The :meth:`~io.IOBase.truncate` method now preserves the file position; " +"previously it would change the file position to the end of the new file. " +"(Fixed by Pascal Chambon; :issue:`6939`.)" +msgstr "" + +#: ../../whatsnew/2.7.rst:1361 +msgid "" +"New function: ``itertools.compress(data, selectors)`` takes two iterators. " +"Elements of *data* are returned if the corresponding value in *selectors* is" +" true::" +msgstr "" + +#: ../../whatsnew/2.7.rst:1370 +msgid "" +"New function: ``itertools.combinations_with_replacement(iter, r)`` returns " +"all the possible *r*-length combinations of elements from the iterable " +"*iter*. Unlike :func:`~itertools.combinations`, individual elements can be " +"repeated in the generated combinations::" +msgstr "" + +#: ../../whatsnew/2.7.rst:1379 +msgid "" +"Note that elements are treated as unique depending on their position in the " +"input, not their actual values." +msgstr "" + +#: ../../whatsnew/2.7.rst:1382 +msgid "" +"The :func:`itertools.count` function now has a *step* argument that allows " +"incrementing by values other than 1. :func:`~itertools.count` also now " +"allows keyword arguments, and using non-integer values such as floats or " +":class:`~decimal.Decimal` instances. (Implemented by Raymond Hettinger; " +":issue:`5032`.)" +msgstr "" + +#: ../../whatsnew/2.7.rst:1388 +msgid "" +":func:`itertools.combinations` and :func:`itertools.product` previously " +"raised :exc:`ValueError` for values of *r* larger than the input iterable. " +"This was deemed a specification error, so they now return an empty iterator." +" (Fixed by Raymond Hettinger; :issue:`4816`.)" +msgstr "" + +#: ../../whatsnew/2.7.rst:1393 +msgid "" +"Updated module: The :mod:`json` module was upgraded to version 2.0.9 of the " +"simplejson package, which includes a C extension that makes encoding and " +"decoding faster. (Contributed by Bob Ippolito; :issue:`4136`.)" +msgstr "" + +#: ../../whatsnew/2.7.rst:1398 +msgid "" +"To support the new :class:`collections.OrderedDict` type, :func:`json.load` " +"now has an optional *object_pairs_hook* parameter that will be called with " +"any object literal that decodes to a list of pairs. (Contributed by Raymond " +"Hettinger; :issue:`5381`.)" +msgstr "" + +#: ../../whatsnew/2.7.rst:1403 +msgid "" +"The :mod:`mailbox` module's :class:`~mailbox.Maildir` class now records the " +"timestamp on the directories it reads, and only re-reads them if the " +"modification time has subsequently changed. This improves performance by " +"avoiding unneeded directory scans. (Fixed by A.M. Kuchling and Antoine " +"Pitrou; :issue:`1607951`, :issue:`6896`.)" +msgstr "" + +#: ../../whatsnew/2.7.rst:1409 +msgid "" +"New functions: the :mod:`math` module gained :func:`~math.erf` and " +":func:`~math.erfc` for the error function and the complementary error " +"function, :func:`~math.expm1` which computes ``e**x - 1`` with more " +"precision than using :func:`~math.exp` and subtracting 1, " +":func:`~math.gamma` for the Gamma function, and :func:`~math.lgamma` for the" +" natural log of the Gamma function. (Contributed by Mark Dickinson and " +"nirinA raseliarison; :issue:`3366`.)" +msgstr "" + +#: ../../whatsnew/2.7.rst:1417 +msgid "" +"The :mod:`multiprocessing` module's :class:`Manager*` classes can now be " +"passed a callable that will be called whenever a subprocess is started, " +"along with a set of arguments that will be passed to the callable. " +"(Contributed by lekma; :issue:`5585`.)" +msgstr "" + +#: ../../whatsnew/2.7.rst:1423 +msgid "" +"The :class:`~multiprocessing.Pool` class, which controls a pool of worker " +"processes, now has an optional *maxtasksperchild* parameter. Worker " +"processes will perform the specified number of tasks and then exit, causing " +"the :class:`~multiprocessing.Pool` to start a new worker. This is useful if" +" tasks may leak memory or other resources, or if some tasks will cause the " +"worker to become very large. (Contributed by Charles Cazabon; " +":issue:`6963`.)" +msgstr "" + +#: ../../whatsnew/2.7.rst:1431 +msgid "" +"The :mod:`nntplib` module now supports IPv6 addresses. (Contributed by Derek" +" Morr; :issue:`1664`.)" +msgstr "" + +#: ../../whatsnew/2.7.rst:1434 +msgid "" +"New functions: the :mod:`os` module wraps the following POSIX system calls: " +":func:`~os.getresgid` and :func:`~os.getresuid`, which return the real, " +"effective, and saved GIDs and UIDs; :func:`~os.setresgid` and " +":func:`~os.setresuid`, which set real, effective, and saved GIDs and UIDs to" +" new values; :func:`~os.initgroups`, which initialize the group access list " +"for the current process. (GID/UID functions contributed by Travis H.; " +":issue:`6508`. Support for initgroups added by Jean-Paul Calderone; " +":issue:`7333`.)" +msgstr "" + +#: ../../whatsnew/2.7.rst:1444 +msgid "" +"The :func:`os.fork` function now re-initializes the import lock in the child" +" process; this fixes problems on Solaris when :func:`~os.fork` is called " +"from a thread. (Fixed by Zsolt Cserna; :issue:`7242`.)" +msgstr "" + +#: ../../whatsnew/2.7.rst:1448 +msgid "" +"In the :mod:`os.path` module, the :func:`~os.path.normpath` and " +":func:`~os.path.abspath` functions now preserve Unicode; if their input path" +" is a Unicode string, the return value is also a Unicode string. " +"(:meth:`~os.path.normpath` fixed by Matt Giuca in :issue:`5827`; " +":meth:`~os.path.abspath` fixed by Ezio Melotti in :issue:`3426`.)" +msgstr "" + +#: ../../whatsnew/2.7.rst:1454 +msgid "" +"The :mod:`pydoc` module now has help for the various symbols that Python " +"uses. You can now do ``help('<<')`` or ``help('@')``, for example. " +"(Contributed by David Laban; :issue:`4739`.)" +msgstr "" + +#: ../../whatsnew/2.7.rst:1458 +msgid "" +"The :mod:`re` module's :func:`~re.split`, :func:`~re.sub`, and " +":func:`~re.subn` now accept an optional *flags* argument, for consistency " +"with the other functions in the module. (Added by Gregory P. Smith.)" +msgstr "" + +#: ../../whatsnew/2.7.rst:1462 +msgid "" +"New function: :func:`~runpy.run_path` in the :mod:`runpy` module will " +"execute the code at a provided *path* argument. *path* can be the path of a" +" Python source file (:file:`example.py`), a compiled bytecode file " +"(:file:`example.pyc`), a directory (:file:`./package/`), or a zip archive " +"(:file:`example.zip`). If a directory or zip path is provided, it will be " +"added to the front of ``sys.path`` and the module :mod:`__main__` will be " +"imported. It's expected that the directory or zip contains a " +":file:`__main__.py`; if it doesn't, some other :file:`__main__.py` might be " +"imported from a location later in ``sys.path``. This makes more of the " +"machinery of :mod:`runpy` available to scripts that want to mimic the way " +"Python's command line processes an explicit path name. (Added by Nick " +"Coghlan; :issue:`6816`.)" +msgstr "" + +#: ../../whatsnew/2.7.rst:1476 +msgid "" +"New function: in the :mod:`shutil` module, :func:`~shutil.make_archive` " +"takes a filename, archive type (zip or tar-format), and a directory path, " +"and creates an archive containing the directory's contents. (Added by Tarek " +"Ziadé.)" +msgstr "" + +#: ../../whatsnew/2.7.rst:1481 +msgid "" +":mod:`shutil`'s :func:`~shutil.copyfile` and :func:`~shutil.copytree` " +"functions now raise a :exc:`~shutil.SpecialFileError` exception when asked " +"to copy a named pipe. Previously the code would treat named pipes like a " +"regular file by opening them for reading, and this would block indefinitely." +" (Fixed by Antoine Pitrou; :issue:`3002`.)" +msgstr "" + +#: ../../whatsnew/2.7.rst:1487 +msgid "" +"The :mod:`signal` module no longer re-installs the signal handler unless " +"this is truly necessary, which fixes a bug that could make it impossible to " +"catch the EINTR signal robustly. (Fixed by Charles-Francois Natali; " +":issue:`8354`.)" +msgstr "" + +#: ../../whatsnew/2.7.rst:1492 +msgid "" +"New functions: in the :mod:`site` module, three new functions return various" +" site- and user-specific paths. :func:`~site.getsitepackages` returns a list" +" containing all global site-packages directories, " +":func:`~site.getusersitepackages` returns the path of the user's site-" +"packages directory, and :func:`~site.getuserbase` returns the value of the " +":envvar:`USER_BASE` environment variable, giving the path to a directory " +"that can be used to store data. (Contributed by Tarek Ziadé; :issue:`6693`.)" +msgstr "" + +#: ../../whatsnew/2.7.rst:1503 +msgid "" +"The :mod:`site` module now reports exceptions occurring when the " +":mod:`sitecustomize` module is imported, and will no longer catch and " +"swallow the :exc:`KeyboardInterrupt` exception. (Fixed by Victor Stinner; " +":issue:`3137`.)" +msgstr "" + +#: ../../whatsnew/2.7.rst:1508 +msgid "" +"The :func:`~socket.create_connection` function gained a *source_address* " +"parameter, a ``(host, port)`` 2-tuple giving the source address that will be" +" used for the connection. (Contributed by Eldon Ziegler; :issue:`3972`.)" +msgstr "" + +#: ../../whatsnew/2.7.rst:1513 +msgid "" +"The :meth:`~socket.socket.recv_into` and " +":meth:`~socket.socket.recvfrom_into` methods will now write into objects " +"that support the buffer API, most usefully the :class:`bytearray` and " +":class:`memoryview` objects. (Implemented by Antoine Pitrou; " +":issue:`8104`.)" +msgstr "" + +#: ../../whatsnew/2.7.rst:1518 +msgid "" +"The :mod:`SocketServer` module's :class:`~SocketServer.TCPServer` class now " +"supports socket timeouts and disabling the Nagle algorithm. The " +":attr:`~SocketServer.TCPServer.disable_nagle_algorithm` class attribute " +"defaults to ``False``; if overridden to be true, new request connections " +"will have the TCP_NODELAY option set to prevent buffering many small sends " +"into a single TCP packet. The :attr:`~SocketServer.BaseServer.timeout` class" +" attribute can hold a timeout in seconds that will be applied to the request" +" socket; if no request is received within that time, " +":meth:`~SocketServer.BaseServer.handle_timeout` will be called and " +":meth:`~SocketServer.BaseServer.handle_request` will return. (Contributed by" +" Kristján Valur Jónsson; :issue:`6192` and :issue:`6267`.)" +msgstr "" + +#: ../../whatsnew/2.7.rst:1530 +msgid "" +"Updated module: the :mod:`sqlite3` module has been updated to version 2.6.0 " +"of the `pysqlite package `__. Version " +"2.6.0 includes a number of bugfixes, and adds the ability to load SQLite " +"extensions from shared libraries. Call the ``enable_load_extension(True)`` " +"method to enable extensions, and then call " +":meth:`~sqlite3.Connection.load_extension` to load a particular shared " +"library. (Updated by Gerhard Häring.)" +msgstr "" + +#: ../../whatsnew/2.7.rst:1537 +msgid "" +"The :mod:`ssl` module's :class:`~ssl.SSLSocket` objects now support the " +"buffer API, which fixed a test suite failure (fix by Antoine Pitrou; " +":issue:`7133`) and automatically set OpenSSL's " +":c:macro:`SSL_MODE_AUTO_RETRY`, which will prevent an error code being " +"returned from :meth:`recv` operations that trigger an SSL renegotiation (fix" +" by Antoine Pitrou; :issue:`8222`)." +msgstr "" + +#: ../../whatsnew/2.7.rst:1544 +msgid "" +"The :func:`ssl.wrap_socket` constructor function now takes a *ciphers* " +"argument that's a string listing the encryption algorithms to be allowed; " +"the format of the string is described `in the OpenSSL documentation " +"`__. (Added by Antoine Pitrou; :issue:`8322`.)" +msgstr "" + +#: ../../whatsnew/2.7.rst:1551 +msgid "" +"Another change makes the extension load all of OpenSSL's ciphers and digest " +"algorithms so that they're all available. Some SSL certificates couldn't be" +" verified, reporting an \"unknown algorithm\" error. (Reported by Beda " +"Kosata, and fixed by Antoine Pitrou; :issue:`8484`.)" +msgstr "" + +#: ../../whatsnew/2.7.rst:1557 +msgid "" +"The version of OpenSSL being used is now available as the module attributes " +":data:`ssl.OPENSSL_VERSION` (a string), :data:`ssl.OPENSSL_VERSION_INFO` (a " +"5-tuple), and :data:`ssl.OPENSSL_VERSION_NUMBER` (an integer). (Added by " +"Antoine Pitrou; :issue:`8321`.)" +msgstr "" + +#: ../../whatsnew/2.7.rst:1563 +msgid "" +"The :mod:`struct` module will no longer silently ignore overflow errors when" +" a value is too large for a particular integer format code (one of " +"``bBhHiIlLqQ``); it now always raises a :exc:`struct.error` exception. " +"(Changed by Mark Dickinson; :issue:`1523`.) The :func:`~struct.pack` " +"function will also attempt to use :meth:`__index__` to convert and pack non-" +"integers before trying the :meth:`__int__` method or reporting an error. " +"(Changed by Mark Dickinson; :issue:`8300`.)" +msgstr "" + +#: ../../whatsnew/2.7.rst:1572 +msgid "" +"New function: the :mod:`subprocess` module's " +":func:`~subprocess.check_output` runs a command with a specified set of " +"arguments and returns the command's output as a string when the command runs" +" without error, or raises a :exc:`~subprocess.CalledProcessError` exception " +"otherwise." +msgstr "" + +#: ../../whatsnew/2.7.rst:1587 +msgid "(Contributed by Gregory P. Smith.)" +msgstr "(由 Gregory P. Smith 贡献)" + +#: ../../whatsnew/2.7.rst:1589 +msgid "" +"The :mod:`subprocess` module will now retry its internal system calls on " +"receiving an :const:`EINTR` signal. (Reported by several people; final " +"patch by Gregory P. Smith in :issue:`1068268`.)" +msgstr "" + +#: ../../whatsnew/2.7.rst:1593 +msgid "" +"New function: :func:`~symtable.Symbol.is_declared_global` in the " +":mod:`symtable` module returns true for variables that are explicitly " +"declared to be global, false for ones that are implicitly global. " +"(Contributed by Jeremy Hylton.)" +msgstr "" + +#: ../../whatsnew/2.7.rst:1598 ../../whatsnew/2.7.rst:2496 +msgid "" +"The :mod:`syslog` module will now use the value of ``sys.argv[0]`` as the " +"identifier instead of the previous default value of ``'python'``. (Changed " +"by Sean Reifschneider; :issue:`8451`.)" +msgstr "" + +#: ../../whatsnew/2.7.rst:1602 +msgid "" +"The ``sys.version_info`` value is now a named tuple, with attributes named " +":attr:`major`, :attr:`minor`, :attr:`micro`, :attr:`releaselevel`, and " +":attr:`serial`. (Contributed by Ross Light; :issue:`4285`.)" +msgstr "" + +#: ../../whatsnew/2.7.rst:1607 +msgid "" +":func:`sys.getwindowsversion` also returns a named tuple, with attributes " +"named :attr:`major`, :attr:`minor`, :attr:`build`, :attr:`platform`, " +":attr:`service_pack`, :attr:`service_pack_major`, " +":attr:`service_pack_minor`, :attr:`suite_mask`, and :attr:`product_type`. " +"(Contributed by Brian Curtin; :issue:`7766`.)" +msgstr "" + +#: ../../whatsnew/2.7.rst:1613 ../../whatsnew/2.7.rst:2500 +msgid "" +"The :mod:`tarfile` module's default error handling has changed, to no longer" +" suppress fatal errors. The default error level was previously 0, which " +"meant that errors would only result in a message being written to the debug " +"log, but because the debug log is not activated by default, these errors go " +"unnoticed. The default error level is now 1, which raises an exception if " +"there's an error. (Changed by Lars Gustäbel; :issue:`7357`.)" +msgstr "" + +#: ../../whatsnew/2.7.rst:1621 +msgid "" +":mod:`tarfile` now supports filtering the :class:`~tarfile.TarInfo` objects " +"being added to a tar file. When you call :meth:`~tarfile.TarFile.add`, you " +"may supply an optional *filter* argument that's a callable. The *filter* " +"callable will be passed the :class:`~tarfile.TarInfo` for every file being " +"added, and can modify and return it. If the callable returns ``None``, the " +"file will be excluded from the resulting archive. This is more powerful " +"than the existing *exclude* argument, which has therefore been deprecated. " +"(Added by Lars Gustäbel; :issue:`6856`.) The :class:`~tarfile.TarFile` class" +" also now supports the context management protocol. (Added by Lars Gustäbel;" +" :issue:`7232`.)" +msgstr "" + +#: ../../whatsnew/2.7.rst:1633 +msgid "" +"The :meth:`~threading.Event.wait` method of the :class:`threading.Event` " +"class now returns the internal flag on exit. This means the method will " +"usually return true because :meth:`~threading.Event.wait` is supposed to " +"block until the internal flag becomes true. The return value will only be " +"false if a timeout was provided and the operation timed out. (Contributed by" +" Tim Lesher; :issue:`1674032`.)" +msgstr "" + +#: ../../whatsnew/2.7.rst:1640 +msgid "" +"The Unicode database provided by the :mod:`unicodedata` module is now used " +"internally to determine which characters are numeric, whitespace, or " +"represent line breaks. The database also includes information from the " +":file:`Unihan.txt` data file (patch by Anders Chrigström and Amaury Forgeot " +"d'Arc; :issue:`1571184`) and has been updated to version 5.2.0 (updated by " +"Florent Xicluna; :issue:`8024`)." +msgstr "" + +#: ../../whatsnew/2.7.rst:1648 ../../whatsnew/2.7.rst:2508 +msgid "" +"The :mod:`urlparse` module's :func:`~urlparse.urlsplit` now handles unknown " +"URL schemes in a fashion compliant with :rfc:`3986`: if the URL is of the " +"form ``\"://...\"``, the text before the ``://`` is treated as " +"the scheme, even if it's a made-up scheme that the module doesn't know " +"about. This change may break code that worked around the old behaviour. " +"For example, Python 2.6.4 or 2.5 will return the following:" +msgstr "" + +#: ../../whatsnew/2.7.rst:1663 ../../whatsnew/2.7.rst:2523 +msgid "Python 2.7 (and Python 2.6.5) will return:" +msgstr "" + +#: ../../whatsnew/2.7.rst:1672 ../../whatsnew/2.7.rst:2532 +msgid "" +"(Python 2.7 actually produces slightly different output, since it returns a " +"named tuple instead of a standard tuple.)" +msgstr "" + +#: ../../whatsnew/2.7.rst:1675 +msgid "" +"The :mod:`urlparse` module also supports IPv6 literal addresses as defined " +"by :rfc:`2732` (contributed by Senthil Kumaran; :issue:`2987`)." +msgstr "" + +#: ../../whatsnew/2.7.rst:1685 +msgid "" +"New class: the :class:`~weakref.WeakSet` class in the :mod:`weakref` module " +"is a set that only holds weak references to its elements; elements will be " +"removed once there are no references pointing to them. (Originally " +"implemented in Python 3.x by Raymond Hettinger, and backported to 2.7 by " +"Michael Foord.)" +msgstr "" + +#: ../../whatsnew/2.7.rst:1691 +msgid "" +"The ElementTree library, :mod:`xml.etree`, no longer escapes ampersands and " +"angle brackets when outputting an XML processing instruction (which looks " +"like ````) or comment (which looks like " +"````). (Patch by Neil Muller; :issue:`2746`.)" +msgstr "" + +#: ../../whatsnew/2.7.rst:1697 +msgid "" +"The XML-RPC client and server, provided by the :mod:`xmlrpclib` and " +":mod:`SimpleXMLRPCServer` modules, have improved performance by supporting " +"HTTP/1.1 keep-alive and by optionally using gzip encoding to compress the " +"XML being exchanged. The gzip compression is controlled by the " +":attr:`encode_threshold` attribute of :class:`SimpleXMLRPCRequestHandler`, " +"which contains a size in bytes; responses larger than this will be " +"compressed. (Contributed by Kristján Valur Jónsson; :issue:`6267`.)" +msgstr "" + +#: ../../whatsnew/2.7.rst:1706 +msgid "" +"The :mod:`zipfile` module's :class:`~zipfile.ZipFile` now supports the " +"context management protocol, so you can write ``with zipfile.ZipFile(...) as" +" f:``. (Contributed by Brian Curtin; :issue:`5511`.)" +msgstr "" + +#: ../../whatsnew/2.7.rst:1710 +msgid "" +":mod:`zipfile` now also supports archiving empty directories and extracts " +"them correctly. (Fixed by Kuba Wieczorek; :issue:`4710`.) Reading files out" +" of an archive is faster, and interleaving :meth:`~zipfile.ZipFile.read` and" +" :meth:`~zipfile.ZipFile.readline` now works correctly. (Contributed by Nir " +"Aides; :issue:`7610`.)" +msgstr "" + +#: ../../whatsnew/2.7.rst:1716 +msgid "" +"The :func:`~zipfile.is_zipfile` function now accepts a file object, in " +"addition to the path names accepted in earlier versions. (Contributed by " +"Gabriel Genellina; :issue:`4756`.)" +msgstr "" + +#: ../../whatsnew/2.7.rst:1720 +msgid "" +"The :meth:`~zipfile.ZipFile.writestr` method now has an optional " +"*compress_type* parameter that lets you override the default compression " +"method specified in the :class:`~zipfile.ZipFile` constructor. (Contributed" +" by Ronald Oussoren; :issue:`6003`.)" +msgstr "" + +#: ../../whatsnew/2.7.rst:1733 +msgid "New module: importlib" +msgstr "新模块:importlib" + +#: ../../whatsnew/2.7.rst:1735 +msgid "" +"Python 3.1 includes the :mod:`importlib` package, a re-implementation of the" +" logic underlying Python's :keyword:`import` statement. :mod:`importlib` is " +"useful for implementors of Python interpreters and to users who wish to " +"write new importers that can participate in the import process. Python 2.7 " +"doesn't contain the complete :mod:`importlib` package, but instead has a " +"tiny subset that contains a single function, " +":func:`~importlib.import_module`." +msgstr "" + +#: ../../whatsnew/2.7.rst:1743 +msgid "" +"``import_module(name, package=None)`` imports a module. *name* is a string " +"containing the module or package's name. It's possible to do relative " +"imports by providing a string that begins with a ``.`` character, such as " +"``..utils.errors``. For relative imports, the *package* argument must be " +"provided and is the name of the package that will be used as the anchor for " +"the relative import. :func:`~importlib.import_module` both inserts the " +"imported module into ``sys.modules`` and returns the module object." +msgstr "" + +#: ../../whatsnew/2.7.rst:1752 +msgid "Here are some examples::" +msgstr "这是一些例子::" + +#: ../../whatsnew/2.7.rst:1763 +msgid "" +":mod:`importlib` was implemented by Brett Cannon and introduced in Python " +"3.1." +msgstr "" + +#: ../../whatsnew/2.7.rst:1768 +msgid "New module: sysconfig" +msgstr "新模块:sysconfig" + +#: ../../whatsnew/2.7.rst:1770 +msgid "" +"The :mod:`sysconfig` module has been pulled out of the Distutils package, " +"becoming a new top-level module in its own right. :mod:`sysconfig` provides " +"functions for getting information about Python's build process: compiler " +"switches, installation paths, the platform name, and whether Python is " +"running from its source directory." +msgstr "" + +#: ../../whatsnew/2.7.rst:1777 +msgid "Some of the functions in the module are:" +msgstr "该模块中的部分函数:" + +#: ../../whatsnew/2.7.rst:1779 +msgid "" +":func:`~sysconfig.get_config_var` returns variables from Python's Makefile " +"and the :file:`pyconfig.h` file." +msgstr "" +":func:`~sysconfig.get_config_var` 返回来自 Python 的 Makefile 和 " +":file:`pyconfig.h` 文件的变量。" + +#: ../../whatsnew/2.7.rst:1781 +msgid "" +":func:`~sysconfig.get_config_vars` returns a dictionary containing all of " +"the configuration variables." +msgstr ":func:`~sysconfig.get_config_vars` 返回一个包含所有配置变量的字典。" + +#: ../../whatsnew/2.7.rst:1783 +msgid "" +":func:`~sysconfig.get_path` returns the configured path for a particular " +"type of module: the standard library, site-specific modules, platform-" +"specific modules, etc." +msgstr ":func:`~sysconfig.get_path` 返回特定模块类型的配置路径:标准库、站点专属模块、平台专属模块等等。" + +#: ../../whatsnew/2.7.rst:1786 +msgid "" +":func:`~sysconfig.is_python_build` returns true if you're running a binary " +"from a Python source tree, and false otherwise." +msgstr "" +":func:`~sysconfig.is_python_build` 会在你从 Python " +"源码树运行二进制可执行文件时返回真值,而在其他情况下返回假值。" + +#: ../../whatsnew/2.7.rst:1789 +msgid "" +"Consult the :mod:`sysconfig` documentation for more details and for a " +"complete list of functions." +msgstr "" + +#: ../../whatsnew/2.7.rst:1792 +msgid "" +"The Distutils package and :mod:`sysconfig` are now maintained by Tarek " +"Ziadé, who has also started a Distutils2 package (source repository at " +"https://hg.python.org/distutils2/) for developing a next-generation version " +"of Distutils." +msgstr "" + +#: ../../whatsnew/2.7.rst:1799 +msgid "ttk: Themed Widgets for Tk" +msgstr "ttk:Tk 主题组件" + +#: ../../whatsnew/2.7.rst:1801 +msgid "" +"Tcl/Tk 8.5 includes a set of themed widgets that re-implement basic Tk " +"widgets but have a more customizable appearance and can therefore more " +"closely resemble the native platform's widgets. This widget set was " +"originally called Tile, but was renamed to Ttk (for \"themed Tk\") on being " +"added to Tcl/Tck release 8.5." +msgstr "" + +#: ../../whatsnew/2.7.rst:1807 +msgid "" +"To learn more, read the :mod:`ttk` module documentation. You may also wish " +"to read the Tcl/Tk manual page describing the Ttk theme engine, available at" +" https://www.tcl.tk/man/tcl8.5/TkCmd/ttk_intro.htm. Some screenshots of the " +"Python/Ttk code in use are at https://code.google.com/archive/p/python-" +"ttk/wikis/Screenshots.wiki." +msgstr "" + +#: ../../whatsnew/2.7.rst:1814 +msgid "" +"The :mod:`ttk` module was written by Guilherme Polo and added in " +":issue:`2983`. An alternate version called ``Tile.py``, written by Martin " +"Franklin and maintained by Kevin Walzer, was proposed for inclusion in " +":issue:`2618`, but the authors argued that Guilherme Polo's work was more " +"comprehensive." +msgstr "" + +#: ../../whatsnew/2.7.rst:1824 +msgid "Updated module: unittest" +msgstr "更新的模块:unittest" + +#: ../../whatsnew/2.7.rst:1826 +msgid "" +"The :mod:`unittest` module was greatly enhanced; many new features were " +"added. Most of these features were implemented by Michael Foord, unless " +"otherwise noted. The enhanced version of the module is downloadable " +"separately for use with Python versions 2.4 to 2.6, packaged as the " +":mod:`unittest2` package, from https://pypi.org/project/unittest2." +msgstr "" + +#: ../../whatsnew/2.7.rst:1833 +msgid "" +"When used from the command line, the module can automatically discover " +"tests. It's not as fancy as `py.test `__ or `nose " +"`__, but provides a simple way to run tests " +"kept within a set of package directories. For example, the following " +"command will search the :file:`test/` subdirectory for any importable test " +"files named ``test*.py``::" +msgstr "" + +#: ../../whatsnew/2.7.rst:1842 +msgid "" +"Consult the :mod:`unittest` module documentation for more details. " +"(Developed in :issue:`6001`.)" +msgstr "" + +#: ../../whatsnew/2.7.rst:1845 +msgid "The :func:`~unittest.main` function supports some other new options:" +msgstr "" + +#: ../../whatsnew/2.7.rst:1847 +msgid "" +":option:`-b ` or :option:`!--buffer` will buffer the standard " +"output and standard error streams during each test. If the test passes, any" +" resulting output will be discarded; on failure, the buffered output will be" +" displayed." +msgstr "" + +#: ../../whatsnew/2.7.rst:1852 +msgid "" +":option:`-c ` or :option:`!--catch` will cause the control-C " +"interrupt to be handled more gracefully. Instead of interrupting the test " +"process immediately, the currently running test will be completed and then " +"the partial results up to the interruption will be reported. If you're " +"impatient, a second press of control-C will cause an immediate interruption." +msgstr "" + +#: ../../whatsnew/2.7.rst:1859 +msgid "" +"This control-C handler tries to avoid causing problems when the code being " +"tested or the tests being run have defined a signal handler of their own, by" +" noticing that a signal handler was already set and calling it. If this " +"doesn't work for you, there's a :func:`~unittest.removeHandler` decorator " +"that can be used to mark tests that should have the control-C handling " +"disabled." +msgstr "" + +#: ../../whatsnew/2.7.rst:1866 +msgid "" +":option:`-f ` or :option:`!--failfast` makes test execution " +"stop immediately when a test fails instead of continuing to execute further " +"tests. (Suggested by Cliff Dyer and implemented by Michael Foord; " +":issue:`8074`.)" +msgstr "" + +#: ../../whatsnew/2.7.rst:1871 +msgid "" +"The progress messages now show 'x' for expected failures and 'u' for " +"unexpected successes when run in verbose mode. (Contributed by Benjamin " +"Peterson.)" +msgstr "" + +#: ../../whatsnew/2.7.rst:1875 +msgid "" +"Test cases can raise the :exc:`~unittest.SkipTest` exception to skip a test " +"(:issue:`1034053`)." +msgstr "" + +#: ../../whatsnew/2.7.rst:1878 +msgid "" +"The error messages for :meth:`~unittest.TestCase.assertEqual`, " +":meth:`~unittest.TestCase.assertTrue`, and " +":meth:`~unittest.TestCase.assertFalse` failures now provide more " +"information. If you set the :attr:`~unittest.TestCase.longMessage` " +"attribute of your :class:`~unittest.TestCase` classes to true, both the " +"standard error message and any additional message you provide will be " +"printed for failures. (Added by Michael Foord; :issue:`5663`.)" +msgstr "" + +#: ../../whatsnew/2.7.rst:1885 +msgid "" +"The :meth:`~unittest.TestCase.assertRaises` method now returns a context " +"handler when called without providing a callable object to run. For " +"example, you can write this::" +msgstr "" + +#: ../../whatsnew/2.7.rst:1892 +msgid "(Implemented by Antoine Pitrou; :issue:`4444`.)" +msgstr "" + +#: ../../whatsnew/2.7.rst:1896 +msgid "" +"Module- and class-level setup and teardown fixtures are now supported. " +"Modules can contain :func:`~unittest.setUpModule` and " +":func:`~unittest.tearDownModule` functions. Classes can have " +":meth:`~unittest.TestCase.setUpClass` and " +":meth:`~unittest.TestCase.tearDownClass` methods that must be defined as " +"class methods (using ``@classmethod`` or equivalent). These functions and " +"methods are invoked when the test runner switches to a test case in a " +"different module or class." +msgstr "" + +#: ../../whatsnew/2.7.rst:1904 +msgid "" +"The methods :meth:`~unittest.TestCase.addCleanup` and " +":meth:`~unittest.TestCase.doCleanups` were added. " +":meth:`~unittest.TestCase.addCleanup` lets you add cleanup functions that " +"will be called unconditionally (after :meth:`~unittest.TestCase.setUp` if " +":meth:`~unittest.TestCase.setUp` fails, otherwise after " +":meth:`~unittest.TestCase.tearDown`). This allows for much simpler resource " +"allocation and deallocation during tests (:issue:`5679`)." +msgstr "" + +#: ../../whatsnew/2.7.rst:1912 +msgid "" +"A number of new methods were added that provide more specialized tests. " +"Many of these methods were written by Google engineers for use in their test" +" suites; Gregory P. Smith, Michael Foord, and GvR worked on merging them " +"into Python's version of :mod:`unittest`." +msgstr "" + +#: ../../whatsnew/2.7.rst:1917 +msgid "" +":meth:`~unittest.TestCase.assertIsNone` and " +":meth:`~unittest.TestCase.assertIsNotNone` take one expression and verify " +"that the result is or is not ``None``." +msgstr "" + +#: ../../whatsnew/2.7.rst:1920 +msgid "" +":meth:`~unittest.TestCase.assertIs` and " +":meth:`~unittest.TestCase.assertIsNot` take two values and check whether the" +" two values evaluate to the same object or not. (Added by Michael Foord; " +":issue:`2578`.)" +msgstr "" + +#: ../../whatsnew/2.7.rst:1924 +msgid "" +":meth:`~unittest.TestCase.assertIsInstance` and " +":meth:`~unittest.TestCase.assertNotIsInstance` check whether the resulting " +"object is an instance of a particular class, or of one of a tuple of " +"classes. (Added by Georg Brandl; :issue:`7031`.)" +msgstr "" + +#: ../../whatsnew/2.7.rst:1929 +msgid "" +":meth:`~unittest.TestCase.assertGreater`, " +":meth:`~unittest.TestCase.assertGreaterEqual`, " +":meth:`~unittest.TestCase.assertLess`, and " +":meth:`~unittest.TestCase.assertLessEqual` compare two quantities." +msgstr "" + +#: ../../whatsnew/2.7.rst:1933 +msgid "" +":meth:`~unittest.TestCase.assertMultiLineEqual` compares two strings, and if" +" they're not equal, displays a helpful comparison that highlights the " +"differences in the two strings. This comparison is now used by default when" +" Unicode strings are compared with :meth:`~unittest.TestCase.assertEqual`." +msgstr "" + +#: ../../whatsnew/2.7.rst:1938 +msgid "" +":meth:`~unittest.TestCase.assertRegexpMatches` and " +":meth:`~unittest.TestCase.assertNotRegexpMatches` checks whether the first " +"argument is a string matching or not matching the regular expression " +"provided as the second argument (:issue:`8038`)." +msgstr "" + +#: ../../whatsnew/2.7.rst:1943 +msgid "" +":meth:`~unittest.TestCase.assertRaisesRegexp` checks whether a particular " +"exception is raised, and then also checks that the string representation of " +"the exception matches the provided regular expression." +msgstr "" + +#: ../../whatsnew/2.7.rst:1947 +msgid "" +":meth:`~unittest.TestCase.assertIn` and " +":meth:`~unittest.TestCase.assertNotIn` tests whether *first* is or is not in" +" *second*." +msgstr "" + +#: ../../whatsnew/2.7.rst:1950 +msgid "" +":meth:`~unittest.TestCase.assertItemsEqual` tests whether two provided " +"sequences contain the same elements." +msgstr "" + +#: ../../whatsnew/2.7.rst:1953 +msgid "" +":meth:`~unittest.TestCase.assertSetEqual` compares whether two sets are " +"equal, and only reports the differences between the sets in case of error." +msgstr "" + +#: ../../whatsnew/2.7.rst:1956 +msgid "" +"Similarly, :meth:`~unittest.TestCase.assertListEqual` and " +":meth:`~unittest.TestCase.assertTupleEqual` compare the specified types and " +"explain any differences without necessarily printing their full values; " +"these methods are now used by default when comparing lists and tuples using " +":meth:`~unittest.TestCase.assertEqual`. More generally, " +":meth:`~unittest.TestCase.assertSequenceEqual` compares two sequences and " +"can optionally check whether both sequences are of a particular type." +msgstr "" + +#: ../../whatsnew/2.7.rst:1964 +msgid "" +":meth:`~unittest.TestCase.assertDictEqual` compares two dictionaries and " +"reports the differences; it's now used by default when you compare two " +"dictionaries using :meth:`~unittest.TestCase.assertEqual`. " +":meth:`~unittest.TestCase.assertDictContainsSubset` checks whether all of " +"the key/value pairs in *first* are found in *second*." +msgstr "" + +#: ../../whatsnew/2.7.rst:1969 +msgid "" +":meth:`~unittest.TestCase.assertAlmostEqual` and " +":meth:`~unittest.TestCase.assertNotAlmostEqual` test whether *first* and " +"*second* are approximately equal. This method can either round their " +"difference to an optionally-specified number of *places* (the default is 7) " +"and compare it to zero, or require the difference to be smaller than a " +"supplied *delta* value." +msgstr "" + +#: ../../whatsnew/2.7.rst:1975 +msgid "" +":meth:`~unittest.TestLoader.loadTestsFromName` properly honors the " +":attr:`~unittest.TestLoader.suiteClass` attribute of the " +":class:`~unittest.TestLoader`. (Fixed by Mark Roddy; :issue:`6866`.)" +msgstr "" + +#: ../../whatsnew/2.7.rst:1979 +msgid "" +"A new hook lets you extend the :meth:`~unittest.TestCase.assertEqual` method" +" to handle new data types. The " +":meth:`~unittest.TestCase.addTypeEqualityFunc` method takes a type object " +"and a function. The function will be used when both of the objects being " +"compared are of the specified type. This function should compare the two " +"objects and raise an exception if they don't match; it's a good idea for the" +" function to provide additional information about why the two objects aren't" +" matching, much as the new sequence comparison methods do." +msgstr "" + +#: ../../whatsnew/2.7.rst:1988 +msgid "" +":func:`unittest.main` now takes an optional ``exit`` argument. If false, " +":func:`~unittest.main` doesn't call :func:`sys.exit`, allowing " +":func:`~unittest.main` to be used from the interactive interpreter. " +"(Contributed by J. Pablo Fernández; :issue:`3379`.)" +msgstr "" + +#: ../../whatsnew/2.7.rst:1993 +msgid "" +":class:`~unittest.TestResult` has new " +":meth:`~unittest.TestResult.startTestRun` and " +":meth:`~unittest.TestResult.stopTestRun` methods that are called immediately" +" before and after a test run. (Contributed by Robert Collins; " +":issue:`5728`.)" +msgstr "" + +#: ../../whatsnew/2.7.rst:1997 +msgid "" +"With all these changes, the :file:`unittest.py` was becoming awkwardly " +"large, so the module was turned into a package and the code split into " +"several files (by Benjamin Peterson). This doesn't affect how the module is" +" imported or used." +msgstr "" + +#: ../../whatsnew/2.7.rst:2005 +msgid "http://www.voidspace.org.uk/python/articles/unittest2.shtml" +msgstr "http://www.voidspace.org.uk/python/articles/unittest2.shtml" + +#: ../../whatsnew/2.7.rst:2005 +msgid "" +"Describes the new features, how to use them, and the rationale for various " +"design decisions. (By Michael Foord.)" +msgstr "" + +#: ../../whatsnew/2.7.rst:2011 +msgid "Updated module: ElementTree 1.3" +msgstr "更新的模块:ElementTree 1.3" + +#: ../../whatsnew/2.7.rst:2013 +msgid "" +"The version of the ElementTree library included with Python was updated to " +"version 1.3. Some of the new features are:" +msgstr "" + +#: ../../whatsnew/2.7.rst:2016 +msgid "" +"The various parsing functions now take a *parser* keyword argument giving an" +" :class:`~xml.etree.ElementTree.XMLParser` instance that will be used. This" +" makes it possible to override the file's internal encoding::" +msgstr "" + +#: ../../whatsnew/2.7.rst:2023 +msgid "" +"Errors in parsing XML now raise a :exc:`ParseError` exception, whose " +"instances have a :attr:`position` attribute containing a (*line*, *column*) " +"tuple giving the location of the problem." +msgstr "" + +#: ../../whatsnew/2.7.rst:2027 +msgid "" +"ElementTree's code for converting trees to a string has been significantly " +"reworked, making it roughly twice as fast in many cases. The " +":meth:`ElementTree.write() ` and " +":meth:`Element.write` methods now have a *method* parameter that can be " +"\"xml\" (the default), \"html\", or \"text\". HTML mode will output empty " +"elements as ```` instead of ````, and text mode will " +"skip over elements and only output the text chunks. If you set the " +":attr:`tag` attribute of an element to ``None`` but leave its children in " +"place, the element will be omitted when the tree is written out, so you " +"don't need to do more extensive rearrangement to remove a single element." +msgstr "" + +#: ../../whatsnew/2.7.rst:2039 +msgid "" +"Namespace handling has also been improved. All ``xmlns:`` " +"declarations are now output on the root element, not scattered throughout " +"the resulting XML. You can set the default namespace for a tree by setting " +"the :attr:`default_namespace` attribute and can register new prefixes with " +":meth:`~xml.etree.ElementTree.register_namespace`. In XML mode, you can use" +" the true/false *xml_declaration* parameter to suppress the XML declaration." +msgstr "" + +#: ../../whatsnew/2.7.rst:2047 +msgid "" +"New :class:`~xml.etree.ElementTree.Element` method: " +":meth:`~xml.etree.ElementTree.Element.extend` appends the items from a " +"sequence to the element's children. Elements themselves behave like " +"sequences, so it's easy to move children from one element to another::" +msgstr "" + +#: ../../whatsnew/2.7.rst:2064 +msgid "" +"New :class:`Element` method: :meth:`~xml.etree.ElementTree.Element.iter` " +"yields the children of the element as a generator. It's also possible to " +"write ``for child in elem:`` to loop over an element's children. The " +"existing method :meth:`getiterator` is now deprecated, as is " +":meth:`getchildren` which constructs and returns a list of children." +msgstr "" + +#: ../../whatsnew/2.7.rst:2071 +msgid "" +"New :class:`Element` method: :meth:`~xml.etree.ElementTree.Element.itertext`" +" yields all chunks of text that are descendants of the element. For " +"example::" +msgstr "" + +#: ../../whatsnew/2.7.rst:2082 +msgid "" +"Deprecated: using an element as a Boolean (i.e., ``if elem:``) would return " +"true if the element had any children, or false if there were no children. " +"This behaviour is confusing -- ``None`` is false, but so is a childless " +"element? -- so it will now trigger a :exc:`FutureWarning`. In your code, " +"you should be explicit: write ``len(elem) != 0`` if you're interested in the" +" number of children, or ``elem is not None``." +msgstr "" + +#: ../../whatsnew/2.7.rst:2090 +msgid "" +"Fredrik Lundh develops ElementTree and produced the 1.3 version; you can " +"read his article describing 1.3 at " +"https://web.archive.org/web/20200703234532/http://effbot.org/zone/elementtree-13-intro.htm." +" Florent Xicluna updated the version included with Python, after discussions" +" on python-dev and in :issue:`6472`.)" +msgstr "" + +#: ../../whatsnew/2.7.rst:2100 +msgid "Build and C API Changes" +msgstr "构建和 C API 的改变" + +#: ../../whatsnew/2.7.rst:2102 +msgid "Changes to Python's build process and to the C API include:" +msgstr "针对 Python 构建过程和 C API 的改变包括:" + +#: ../../whatsnew/2.7.rst:2104 +msgid "" +"The latest release of the GNU Debugger, GDB 7, can be `scripted using Python" +" `__. When " +"you begin debugging an executable program P, GDB will look for a file named " +"``P-gdb.py`` and automatically read it. Dave Malcolm contributed a " +":file:`python-gdb.py` that adds a number of commands useful when debugging " +"Python itself. For example, ``py-up`` and ``py-down`` go up or down one " +"Python stack frame, which usually corresponds to several C stack frames. " +"``py-print`` prints the value of a Python variable, and ``py-bt`` prints the" +" Python stack trace. (Added as a result of :issue:`8032`.)" +msgstr "" + +#: ../../whatsnew/2.7.rst:2116 +msgid "" +"If you use the :file:`.gdbinit` file provided with Python, the \"pyo\" macro" +" in the 2.7 version now works correctly when the thread being debugged " +"doesn't hold the GIL; the macro now acquires it before printing. " +"(Contributed by Victor Stinner; :issue:`3632`.)" +msgstr "" + +#: ../../whatsnew/2.7.rst:2121 +msgid "" +":c:func:`Py_AddPendingCall` is now thread-safe, letting any worker thread " +"submit notifications to the main Python thread. This is particularly useful" +" for asynchronous IO operations. (Contributed by Kristján Valur Jónsson; " +":issue:`4293`.)" +msgstr "" + +#: ../../whatsnew/2.7.rst:2126 +msgid "" +"New function: :c:func:`PyCode_NewEmpty` creates an empty code object; only " +"the filename, function name, and first line number are required. This is " +"useful for extension modules that are attempting to construct a more useful " +"traceback stack. Previously such extensions needed to call " +":c:func:`PyCode_New`, which had many more arguments. (Added by Jeffrey " +"Yasskin.)" +msgstr "" + +#: ../../whatsnew/2.7.rst:2133 +msgid "" +"New function: :c:func:`PyErr_NewExceptionWithDoc` creates a new exception " +"class, just as the existing :c:func:`PyErr_NewException` does, but takes an " +"extra ``char *`` argument containing the docstring for the new exception " +"class. (Added by 'lekma' on the Python bug tracker; :issue:`7033`.)" +msgstr "" + +#: ../../whatsnew/2.7.rst:2139 +msgid "" +"New function: :c:func:`PyFrame_GetLineNumber` takes a frame object and " +"returns the line number that the frame is currently executing. Previously " +"code would need to get the index of the bytecode instruction currently " +"executing, and then look up the line number corresponding to that address. " +"(Added by Jeffrey Yasskin.)" +msgstr "" + +#: ../../whatsnew/2.7.rst:2145 +msgid "" +"New functions: :c:func:`PyLong_AsLongAndOverflow` and " +":c:func:`PyLong_AsLongLongAndOverflow` approximates a Python long integer " +"as a C :c:type:`long` or :c:type:`long long`. If the number is too large to " +"fit into the output type, an *overflow* flag is set and returned to the " +"caller. (Contributed by Case Van Horsen; :issue:`7528` and :issue:`7767`.)" +msgstr "" + +#: ../../whatsnew/2.7.rst:2152 +msgid "" +"New function: stemming from the rewrite of string-to-float conversion, a new" +" :c:func:`PyOS_string_to_double` function was added. The old " +":c:func:`PyOS_ascii_strtod` and :c:func:`PyOS_ascii_atof` functions are now " +"deprecated." +msgstr "" + +#: ../../whatsnew/2.7.rst:2157 +msgid "" +"New function: :c:func:`PySys_SetArgvEx` sets the value of ``sys.argv`` and " +"can optionally update ``sys.path`` to include the directory containing the " +"script named by ``sys.argv[0]`` depending on the value of an *updatepath* " +"parameter." +msgstr "" + +#: ../../whatsnew/2.7.rst:2162 +msgid "" +"This function was added to close a security hole for applications that embed" +" Python. The old function, :c:func:`PySys_SetArgv`, would always update " +"``sys.path``, and sometimes it would add the current directory. This meant " +"that, if you ran an application embedding Python in a directory controlled " +"by someone else, attackers could put a Trojan-horse module in the directory " +"(say, a file named :file:`os.py`) that your application would then import " +"and run." +msgstr "" + +#: ../../whatsnew/2.7.rst:2170 +msgid "" +"If you maintain a C/C++ application that embeds Python, check whether you're" +" calling :c:func:`PySys_SetArgv` and carefully consider whether the " +"application should be using :c:func:`PySys_SetArgvEx` with *updatepath* set " +"to false." +msgstr "" + +#: ../../whatsnew/2.7.rst:2175 +msgid "" +"Security issue reported as `CVE-2008-5983 `_; discussed in :issue:`5753`, and fixed" +" by Antoine Pitrou." +msgstr "" + +#: ../../whatsnew/2.7.rst:2179 +msgid "" +"New macros: the Python header files now define the following macros: " +":c:macro:`Py_ISALNUM`, :c:macro:`Py_ISALPHA`, :c:macro:`Py_ISDIGIT`, " +":c:macro:`Py_ISLOWER`, :c:macro:`Py_ISSPACE`, :c:macro:`Py_ISUPPER`, " +":c:macro:`Py_ISXDIGIT`, :c:macro:`Py_TOLOWER`, and :c:macro:`Py_TOUPPER`. " +"All of these functions are analogous to the C standard macros for " +"classifying characters, but ignore the current locale setting, because in " +"several places Python needs to analyze characters in a locale-independent " +"way. (Added by Eric Smith; :issue:`5793`.)" +msgstr "" + +#: ../../whatsnew/2.7.rst:2197 +msgid "" +"Removed function: :c:macro:`PyEval_CallObject` is now only available as a " +"macro. A function version was being kept around to preserve ABI linking " +"compatibility, but that was in 1997; it can certainly be deleted by now. " +"(Removed by Antoine Pitrou; :issue:`8276`.)" +msgstr "" + +#: ../../whatsnew/2.7.rst:2202 +msgid "" +"New format codes: the :c:func:`PyFormat_FromString`, " +":c:func:`PyFormat_FromStringV`, and :c:func:`PyErr_Format` functions now " +"accept ``%lld`` and ``%llu`` format codes for displaying C's :c:type:`long " +"long` types. (Contributed by Mark Dickinson; :issue:`7228`.)" +msgstr "" + +#: ../../whatsnew/2.7.rst:2208 +msgid "" +"The complicated interaction between threads and process forking has been " +"changed. Previously, the child process created by :func:`os.fork` might " +"fail because the child is created with only a single thread running, the " +"thread performing the :func:`os.fork`. If other threads were holding a lock," +" such as Python's import lock, when the fork was performed, the lock would " +"still be marked as \"held\" in the new process. But in the child process " +"nothing would ever release the lock, since the other threads weren't " +"replicated, and the child process would no longer be able to perform " +"imports." +msgstr "" + +#: ../../whatsnew/2.7.rst:2218 +msgid "" +"Python 2.7 acquires the import lock before performing an :func:`os.fork`, " +"and will also clean up any locks created using the :mod:`threading` module." +" C extension modules that have internal locks, or that call " +":c:func:`fork()` themselves, will not benefit from this clean-up." +msgstr "" + +#: ../../whatsnew/2.7.rst:2224 +msgid "(Fixed by Thomas Wouters; :issue:`1590864`.)" +msgstr "" + +#: ../../whatsnew/2.7.rst:2226 +msgid "" +"The :c:func:`Py_Finalize` function now calls the internal " +":func:`threading._shutdown` function; this prevents some exceptions from " +"being raised when an interpreter shuts down. (Patch by Adam Olsen; " +":issue:`1722344`.)" +msgstr "" + +#: ../../whatsnew/2.7.rst:2231 +msgid "" +"When using the :c:type:`PyMemberDef` structure to define attributes of a " +"type, Python will no longer let you try to delete or set a " +":const:`T_STRING_INPLACE` attribute." +msgstr "" + +#: ../../whatsnew/2.7.rst:2237 +msgid "" +"Global symbols defined by the :mod:`ctypes` module are now prefixed with " +"``Py``, or with ``_ctypes``. (Implemented by Thomas Heller; :issue:`3102`.)" +msgstr "" + +#: ../../whatsnew/2.7.rst:2241 +msgid "" +"New configure option: the :option:`!--with-system-expat` switch allows " +"building the :mod:`pyexpat` module to use the system Expat library. " +"(Contributed by Arfrever Frehtes Taifersar Arahesis; :issue:`7609`.)" +msgstr "" + +#: ../../whatsnew/2.7.rst:2245 +msgid "" +"New configure option: the :option:`!--with-valgrind` option will now disable" +" the pymalloc allocator, which is difficult for the Valgrind memory-error " +"detector to analyze correctly. Valgrind will therefore be better at " +"detecting memory leaks and overruns. (Contributed by James Henstridge; " +":issue:`2422`.)" +msgstr "" + +#: ../../whatsnew/2.7.rst:2252 +msgid "" +"New configure option: you can now supply an empty string to :option:`!--" +"with-dbmliborder=` in order to disable all of the various DBM modules. " +"(Added by Arfrever Frehtes Taifersar Arahesis; :issue:`6491`.)" +msgstr "" + +#: ../../whatsnew/2.7.rst:2257 +msgid "" +"The :program:`configure` script now checks for floating-point rounding bugs " +"on certain 32-bit Intel chips and defines a :c:macro:`X87_DOUBLE_ROUNDING` " +"preprocessor definition. No code currently uses this definition, but it's " +"available if anyone wishes to use it. (Added by Mark Dickinson; " +":issue:`2937`.)" +msgstr "" + +#: ../../whatsnew/2.7.rst:2263 +msgid "" +":program:`configure` also now sets a :envvar:`LDCXXSHARED` Makefile variable" +" for supporting C++ linking. (Contributed by Arfrever Frehtes Taifersar " +"Arahesis; :issue:`1222585`.)" +msgstr "" + +#: ../../whatsnew/2.7.rst:2267 +msgid "" +"The build process now creates the necessary files for pkg-config support. " +"(Contributed by Clinton Roy; :issue:`3585`.)" +msgstr "" + +#: ../../whatsnew/2.7.rst:2270 +msgid "" +"The build process now supports Subversion 1.7. (Contributed by Arfrever " +"Frehtes Taifersar Arahesis; :issue:`6094`.)" +msgstr "" + +#: ../../whatsnew/2.7.rst:2277 +msgid "Capsules" +msgstr "Capsule 对象" + +#: ../../whatsnew/2.7.rst:2279 +msgid "" +"Python 3.1 adds a new C datatype, :c:type:`PyCapsule`, for providing a C API" +" to an extension module. A capsule is essentially the holder of a C ``void " +"*`` pointer, and is made available as a module attribute; for example, the " +":mod:`socket` module's API is exposed as ``socket.CAPI``, and " +":mod:`unicodedata` exposes ``ucnhash_CAPI``. Other extensions can import " +"the module, access its dictionary to get the capsule object, and then get " +"the ``void *`` pointer, which will usually point to an array of pointers to " +"the module's various API functions." +msgstr "" + +#: ../../whatsnew/2.7.rst:2288 +msgid "" +"There is an existing data type already used for this, :c:type:`PyCObject`, " +"but it doesn't provide type safety. Evil code written in pure Python could " +"cause a segmentation fault by taking a :c:type:`PyCObject` from module A and" +" somehow substituting it for the :c:type:`PyCObject` in module B. Capsules" +" know their own name, and getting the pointer requires providing the name:" +msgstr "" + +#: ../../whatsnew/2.7.rst:2306 +msgid "" +"You are assured that ``vtable`` points to whatever you're expecting. If a " +"different capsule was passed in, :c:func:`PyCapsule_IsValid` would detect " +"the mismatched name and return false. Refer to :ref:`using-capsules` for " +"more information on using these objects." +msgstr "" + +#: ../../whatsnew/2.7.rst:2311 +msgid "" +"Python 2.7 now uses capsules internally to provide various extension-module " +"APIs, but the :c:func:`PyCObject_AsVoidPtr` was modified to handle capsules," +" preserving compile-time compatibility with the :c:type:`CObject` interface." +" Use of :c:func:`PyCObject_AsVoidPtr` will signal a " +":exc:`PendingDeprecationWarning`, which is silent by default." +msgstr "" + +#: ../../whatsnew/2.7.rst:2318 +msgid "" +"Implemented in Python 3.1 and backported to 2.7 by Larry Hastings; discussed" +" in :issue:`5630`." +msgstr "" + +#: ../../whatsnew/2.7.rst:2325 +msgid "Port-Specific Changes: Windows" +msgstr "特定于 Windows 的更改:" + +#: ../../whatsnew/2.7.rst:2327 +msgid "" +"The :mod:`msvcrt` module now contains some constants from the " +":file:`crtassem.h` header file: :data:`CRT_ASSEMBLY_VERSION`, " +":data:`VC_ASSEMBLY_PUBLICKEYTOKEN`, and " +":data:`LIBRARIES_ASSEMBLY_NAME_PREFIX`. (Contributed by David Cournapeau; " +":issue:`4365`.)" +msgstr "" + +#: ../../whatsnew/2.7.rst:2334 +msgid "" +"The :mod:`_winreg` module for accessing the registry now implements the " +":func:`~_winreg.CreateKeyEx` and :func:`~_winreg.DeleteKeyEx` functions, " +"extended versions of previously-supported functions that take several extra " +"arguments. The :func:`~_winreg.DisableReflectionKey`, " +":func:`~_winreg.EnableReflectionKey`, and " +":func:`~_winreg.QueryReflectionKey` were also tested and documented. " +"(Implemented by Brian Curtin: :issue:`7347`.)" +msgstr "" + +#: ../../whatsnew/2.7.rst:2342 +msgid "" +"The new :c:func:`_beginthreadex` API is used to start threads, and the " +"native thread-local storage functions are now used. (Contributed by Kristján" +" Valur Jónsson; :issue:`3582`.)" +msgstr "" + +#: ../../whatsnew/2.7.rst:2346 +msgid "" +"The :func:`os.kill` function now works on Windows. The signal value can be " +"the constants :const:`CTRL_C_EVENT`, :const:`CTRL_BREAK_EVENT`, or any " +"integer. The first two constants will send :kbd:`Control-C` and " +":kbd:`Control-Break` keystroke events to subprocesses; any other value will " +"use the :c:func:`TerminateProcess` API. (Contributed by Miki Tebeka; " +":issue:`1220212`.)" +msgstr "" + +#: ../../whatsnew/2.7.rst:2353 +msgid "" +"The :func:`os.listdir` function now correctly fails for an empty path. " +"(Fixed by Hirokazu Yamamoto; :issue:`5913`.)" +msgstr "" + +#: ../../whatsnew/2.7.rst:2356 +msgid "" +"The :mod:`mimelib` module will now read the MIME database from the Windows " +"registry when initializing. (Patch by Gabriel Genellina; :issue:`4969`.)" +msgstr "" + +#: ../../whatsnew/2.7.rst:2363 +msgid "Port-Specific Changes: Mac OS X" +msgstr "特定于 Mac OS X 的更改:" + +#: ../../whatsnew/2.7.rst:2365 +msgid "" +"The path ``/Library/Python/2.7/site-packages`` is now appended to " +"``sys.path``, in order to share added packages between the system " +"installation and a user-installed copy of the same version. (Changed by " +"Ronald Oussoren; :issue:`4865`.)" +msgstr "" + +#: ../../whatsnew/2.7.rst:2372 +msgid "" +"As of 2.7.13, this change was removed. ``/Library/Python/2.7/site-" +"packages``, the site-packages directory used by the Apple-supplied system " +"Python 2.7 is no longer appended to ``sys.path`` for user-installed Pythons " +"such as from the python.org installers. As of macOS 10.12, Apple changed " +"how the system site-packages directory is configured, which could cause " +"installation of pip components, like setuptools, to fail. Packages " +"installed for the system Python will no longer be shared with user-installed" +" Pythons. (:issue:`28440`)" +msgstr "" + +#: ../../whatsnew/2.7.rst:2383 +msgid "Port-Specific Changes: FreeBSD" +msgstr "特定于 FreeBSD 的更改:" + +#: ../../whatsnew/2.7.rst:2385 +msgid "" +"FreeBSD 7.1's :const:`SO_SETFIB` constant, used with " +":func:`~socket.getsockopt`/:func:`~socket.setsockopt` to select an alternate" +" routing table, is now available in the :mod:`socket` module. (Added by " +"Kyle VanderBeek; :issue:`8235`.)" +msgstr "" + +#: ../../whatsnew/2.7.rst:2391 +msgid "Other Changes and Fixes" +msgstr "其他的改变和修正" + +#: ../../whatsnew/2.7.rst:2393 +msgid "" +"Two benchmark scripts, :file:`iobench` and :file:`ccbench`, were added to " +"the :file:`Tools` directory. :file:`iobench` measures the speed of the " +"built-in file I/O objects returned by :func:`open` while performing various " +"operations, and :file:`ccbench` is a concurrency benchmark that tries to " +"measure computing throughput, thread switching latency, and IO processing " +"bandwidth when performing several tasks using a varying number of threads." +msgstr "" + +#: ../../whatsnew/2.7.rst:2401 +msgid "" +"The :file:`Tools/i18n/msgfmt.py` script now understands plural forms in " +":file:`.po` files. (Fixed by Martin von Löwis; :issue:`5464`.)" +msgstr "" + +#: ../../whatsnew/2.7.rst:2405 +msgid "" +"When importing a module from a :file:`.pyc` or :file:`.pyo` file with an " +"existing :file:`.py` counterpart, the :attr:`co_filename` attributes of the " +"resulting code objects are overwritten when the original filename is " +"obsolete. This can happen if the file has been renamed, moved, or is " +"accessed through different paths. (Patch by Ziga Seilnacht and Jean-Paul " +"Calderone; :issue:`1180193`.)" +msgstr "" + +#: ../../whatsnew/2.7.rst:2412 +msgid "" +"The :file:`regrtest.py` script now takes a :option:`!--randseed=` switch " +"that takes an integer that will be used as the random seed for the " +":option:`!-r` option that executes tests in random order. The :option:`!-r` " +"option also reports the seed that was used (Added by Collin Winter.)" +msgstr "" + +#: ../../whatsnew/2.7.rst:2418 +msgid "" +"Another :file:`regrtest.py` switch is :option:`!-j`, which takes an integer " +"specifying how many tests run in parallel. This allows reducing the total " +"runtime on multi-core machines. This option is compatible with several other" +" options, including the :option:`!-R` switch which is known to produce long " +"runtimes. (Added by Antoine Pitrou, :issue:`6152`.) This can also be used " +"with a new :option:`!-F` switch that runs selected tests in a loop until " +"they fail. (Added by Antoine Pitrou; :issue:`7312`.)" +msgstr "" + +#: ../../whatsnew/2.7.rst:2427 +msgid "" +"When executed as a script, the :file:`py_compile.py` module now accepts " +"``'-'`` as an argument, which will read standard input for the list of " +"filenames to be compiled. (Contributed by Piotr Ożarowski; :issue:`8233`.)" +msgstr "" + +#: ../../whatsnew/2.7.rst:2435 +msgid "Porting to Python 2.7" +msgstr "移植到 Python 2.7" + +#: ../../whatsnew/2.7.rst:2437 +msgid "" +"This section lists previously described changes and other bugfixes that may " +"require changes to your code:" +msgstr "本节列出了先前描述的改变以及可能需要修改你的代码的其他问题修正:" + +#: ../../whatsnew/2.7.rst:2440 +msgid "" +"The :func:`range` function processes its arguments more consistently; it " +"will now call :meth:`__int__` on non-float, non-integer arguments that are " +"supplied to it. (Fixed by Alexander Belopolsky; :issue:`1533`.)" +msgstr "" + +#: ../../whatsnew/2.7.rst:2445 +msgid "" +"The string :meth:`format` method changed the default precision used for " +"floating-point and complex numbers from 6 decimal places to 12, which " +"matches the precision used by :func:`str`. (Changed by Eric Smith; " +":issue:`5920`.)" +msgstr "" + +#: ../../whatsnew/2.7.rst:2450 +msgid "" +"Because of an optimization for the :keyword:`with` statement, the special " +"methods :meth:`__enter__` and :meth:`__exit__` must belong to the object's " +"type, and cannot be directly attached to the object's instance. This " +"affects new-style classes (derived from :class:`object`) and C extension " +"types. (:issue:`6101`.)" +msgstr "" + +#: ../../whatsnew/2.7.rst:2456 +msgid "" +"Due to a bug in Python 2.6, the *exc_value* parameter to :meth:`__exit__` " +"methods was often the string representation of the exception, not an " +"instance. This was fixed in 2.7, so *exc_value* will be an instance as " +"expected. (Fixed by Florent Xicluna; :issue:`7853`.)" +msgstr "" + +#: ../../whatsnew/2.7.rst:2466 +msgid "In the standard library:" +msgstr "在标准库中:" + +#: ../../whatsnew/2.7.rst:2468 +msgid "" +"Operations with :class:`~datetime.datetime` instances that resulted in a " +"year falling outside the supported range didn't always raise " +":exc:`OverflowError`. Such errors are now checked more carefully and will " +"now raise the exception. (Reported by Mark Leander, patch by Anand B. Pillai" +" and Alexander Belopolsky; :issue:`7150`.)" +msgstr "" + +#: ../../whatsnew/2.7.rst:2474 +msgid "" +"When using :class:`~decimal.Decimal` instances with a string's " +":meth:`format` method, the default alignment was previously left-alignment." +" This has been changed to right-alignment, which might change the output of" +" your programs. (Changed by Mark Dickinson; :issue:`6857`.)" +msgstr "" + +#: ../../whatsnew/2.7.rst:2480 +msgid "" +"Comparisons involving a signaling NaN value (or ``sNAN``) now signal " +":const:`~decimal.InvalidOperation` instead of silently returning a true or " +"false value depending on the comparison operator. Quiet NaN values (or " +"``NaN``) are now hashable. (Fixed by Mark Dickinson; :issue:`7279`.)" +msgstr "" + +#: ../../whatsnew/2.7.rst:2486 +msgid "" +"The ElementTree library, :mod:`xml.etree`, no longer escapes ampersands and " +"angle brackets when outputting an XML processing instruction (which looks " +"like ``) or comment (which looks like " +"``). (Patch by Neil Muller; :issue:`2746`.)" +msgstr "" + +#: ../../whatsnew/2.7.rst:2492 +msgid "" +"The :meth:`~StringIO.StringIO.readline` method of " +":class:`~StringIO.StringIO` objects now does nothing when a negative length " +"is requested, as other file-like objects do. (:issue:`7348`)." +msgstr "" + +#: ../../whatsnew/2.7.rst:2535 +msgid "For C extensions:" +msgstr "对于C 扩展模块:" + +#: ../../whatsnew/2.7.rst:2537 +msgid "" +"C extensions that use integer format codes with the ``PyArg_Parse*`` family " +"of functions will now raise a :exc:`TypeError` exception instead of " +"triggering a :exc:`DeprecationWarning` (:issue:`5080`)." +msgstr "" + +#: ../../whatsnew/2.7.rst:2541 +msgid "" +"Use the new :c:func:`PyOS_string_to_double` function instead of the old " +":c:func:`PyOS_ascii_strtod` and :c:func:`PyOS_ascii_atof` functions, which " +"are now deprecated." +msgstr "" + +#: ../../whatsnew/2.7.rst:2545 +msgid "For applications that embed Python:" +msgstr "对于嵌入Python的应用程序:" + +#: ../../whatsnew/2.7.rst:2547 +msgid "" +"The :c:func:`PySys_SetArgvEx` function was added, letting applications close" +" a security hole when the existing :c:func:`PySys_SetArgv` function was " +"used. Check whether you're calling :c:func:`PySys_SetArgv` and carefully " +"consider whether the application should be using :c:func:`PySys_SetArgvEx` " +"with *updatepath* set to false." +msgstr "" + +#: ../../whatsnew/2.7.rst:2560 +msgid "New Features Added to Python 2.7 Maintenance Releases" +msgstr "" + +#: ../../whatsnew/2.7.rst:2562 +msgid "" +"New features may be added to Python 2.7 maintenance releases when the " +"situation genuinely calls for it. Any such additions must go through the " +"Python Enhancement Proposal process, and make a compelling case for why they" +" can't be adequately addressed by either adding the new feature solely to " +"Python 3, or else by publishing it on the Python Package Index." +msgstr "" + +#: ../../whatsnew/2.7.rst:2568 +msgid "" +"In addition to the specific proposals listed below, there is a general " +"exemption allowing new ``-3`` warnings to be added in any Python 2.7 " +"maintenance release." +msgstr "" + +#: ../../whatsnew/2.7.rst:2574 +msgid "Two new environment variables for debug mode" +msgstr "" + +#: ../../whatsnew/2.7.rst:2576 +msgid "" +"In debug mode, the ``[xxx refs]`` statistic is not written by default, the " +":envvar:`PYTHONSHOWREFCOUNT` environment variable now must also be set. " +"(Contributed by Victor Stinner; :issue:`31733`.)" +msgstr "" + +#: ../../whatsnew/2.7.rst:2580 +msgid "" +"When Python is compiled with ``COUNT_ALLOC`` defined, allocation counts are " +"no longer dumped by default anymore: the :envvar:`PYTHONSHOWALLOCCOUNT` " +"environment variable must now also be set. Moreover, allocation counts are " +"now dumped into stderr, rather than stdout. (Contributed by Victor Stinner; " +":issue:`31692`.)" +msgstr "" + +#: ../../whatsnew/2.7.rst:2589 +msgid "PEP 434: IDLE Enhancement Exception for All Branches" +msgstr "" + +#: ../../whatsnew/2.7.rst:2591 +msgid "" +":pep:`434` describes a general exemption for changes made to the IDLE " +"development environment shipped along with Python. This exemption makes it " +"possible for the IDLE developers to provide a more consistent user " +"experience across all supported versions of Python 2 and 3." +msgstr "" + +#: ../../whatsnew/2.7.rst:2596 +msgid "" +"For details of any IDLE changes, refer to the NEWS file for the specific " +"release." +msgstr "" + +#: ../../whatsnew/2.7.rst:2601 +msgid "PEP 466: Network Security Enhancements for Python 2.7" +msgstr "PEP 466: 针对 Python 2.7 的网络安全加固" + +#: ../../whatsnew/2.7.rst:2603 +msgid "" +":pep:`466` describes a number of network security enhancement proposals that" +" have been approved for inclusion in Python 2.7 maintenance releases, with " +"the first of those changes appearing in the Python 2.7.7 release." +msgstr "" + +#: ../../whatsnew/2.7.rst:2607 +msgid ":pep:`466` related features added in Python 2.7.7:" +msgstr ":pep:`466` Python 2.7.7 中添加的相关功能:" + +#: ../../whatsnew/2.7.rst:2609 +msgid "" +":func:`hmac.compare_digest` was backported from Python 3 to make a timing " +"attack resistant comparison operation available to Python 2 applications. " +"(Contributed by Alex Gaynor; :issue:`21306`.)" +msgstr "" + +#: ../../whatsnew/2.7.rst:2613 +msgid "" +"OpenSSL 1.0.1g was upgraded in the official Windows installers published on " +"python.org. (Contributed by Zachary Ware; :issue:`21462`.)" +msgstr "" + +#: ../../whatsnew/2.7.rst:2616 +msgid ":pep:`466` related features added in Python 2.7.8:" +msgstr ":pep:`466` Python 2.7.8 中添加的相关功能:" + +#: ../../whatsnew/2.7.rst:2618 +msgid "" +":func:`hashlib.pbkdf2_hmac` was backported from Python 3 to make a hashing " +"algorithm suitable for secure password storage broadly available to Python 2" +" applications. (Contributed by Alex Gaynor; :issue:`21304`.)" +msgstr "" + +#: ../../whatsnew/2.7.rst:2622 +msgid "" +"OpenSSL 1.0.1h was upgraded for the official Windows installers published on" +" python.org. (contributed by Zachary Ware in :issue:`21671` for " +"CVE-2014-0224)" +msgstr "" + +#: ../../whatsnew/2.7.rst:2625 +msgid ":pep:`466` related features added in Python 2.7.9:" +msgstr ":pep:`466` Python 2.7.9 中添加的相关功能:" + +#: ../../whatsnew/2.7.rst:2627 +msgid "" +"Most of Python 3.4's :mod:`ssl` module was backported. This means :mod:`ssl`" +" now supports Server Name Indication, TLS1.x settings, access to the " +"platform certificate store, the :class:`~ssl.SSLContext` class, and other " +"features. (Contributed by Alex Gaynor and David Reid; :issue:`21308`.)" +msgstr "" + +#: ../../whatsnew/2.7.rst:2632 +msgid "" +"Refer to the \"Version added: 2.7.9\" notes in the module documentation for " +"specific details." +msgstr "" + +#: ../../whatsnew/2.7.rst:2635 +msgid "" +":func:`os.urandom` was changed to cache a file descriptor to " +"``/dev/urandom`` instead of reopening ``/dev/urandom`` on every call. " +"(Contributed by Alex Gaynor; :issue:`21305`.)" +msgstr "" + +#: ../../whatsnew/2.7.rst:2639 +msgid "" +":data:`hashlib.algorithms_guaranteed` and " +":data:`hashlib.algorithms_available` were backported from Python 3 to make " +"it easier for Python 2 applications to select the strongest available hash " +"algorithm. (Contributed by Alex Gaynor in :issue:`21307`)" +msgstr "" + +#: ../../whatsnew/2.7.rst:2646 +msgid "PEP 477: Backport ensurepip (PEP 453) to Python 2.7" +msgstr "PEP 477: 将 ensurepip (PEP 453) 向下移植到 Python 2.7" + +#: ../../whatsnew/2.7.rst:2648 +msgid "" +":pep:`477` approves the inclusion of the :pep:`453` ensurepip module and the" +" improved documentation that was enabled by it in the Python 2.7 maintenance" +" releases, appearing first in the Python 2.7.9 release." +msgstr "" + +#: ../../whatsnew/2.7.rst:2654 +msgid "Bootstrapping pip By Default" +msgstr "默认对 pip 进行初始设置" + +#: ../../whatsnew/2.7.rst:2656 +msgid "" +"The new :mod:`ensurepip` module (defined in :pep:`453`) provides a standard " +"cross-platform mechanism to bootstrap the pip installer into Python " +"installations. The version of ``pip`` included with Python 2.7.9 is ``pip`` " +"1.5.6, and future 2.7.x maintenance releases will update the bundled version" +" to the latest version of ``pip`` that is available at the time of creating " +"the release candidate." +msgstr "" + +#: ../../whatsnew/2.7.rst:2663 +msgid "" +"By default, the commands ``pip``, ``pipX`` and ``pipX.Y`` will be installed " +"on all platforms (where X.Y stands for the version of the Python " +"installation), along with the ``pip`` Python package and its dependencies." +msgstr "" + +#: ../../whatsnew/2.7.rst:2667 +msgid "" +"For CPython :ref:`source builds on POSIX systems `," +" the ``make install`` and ``make altinstall`` commands do not bootstrap " +"``pip`` by default. This behaviour can be controlled through configure " +"options, and overridden through Makefile options." +msgstr "" + +#: ../../whatsnew/2.7.rst:2672 +msgid "" +"On Windows and Mac OS X, the CPython installers now default to installing " +"``pip`` along with CPython itself (users may opt out of installing it during" +" the installation process). Window users will need to opt in to the " +"automatic ``PATH`` modifications to have ``pip`` available from the command " +"line by default, otherwise it can still be accessed through the Python " +"launcher for Windows as ``py -m pip``." +msgstr "" +"在 Windows 和 Mac OS X 上,现在 CPython 安装程序默认会将 ``pip`` 与 CPython " +"本身一同安装(用户可以在安装过程中选择不安装它)。 Window 用户需要选择执行 ``PATH`` 修改以使 ``pip`` " +"在命令行中默认可用,在其他情况下它仍然可以通过 Windows 版 Python 启动器以 ``py -m pip`` 的方式使用。" + +#: ../../whatsnew/2.7.rst:2679 +msgid "" +"As `discussed in the PEP`__, platform packagers may choose not to install " +"these commands by default, as long as, when invoked, they provide clear and " +"simple directions on how to install them on that platform (usually using the" +" system package manager)." +msgstr "" +"正如 `在 PEP " +"中已讨论的`__,平台打包者可以选择默认不安装这些命令,只需要在它们被发起调用时,能够提供有关如何在该平台上安装它们的简单清晰的指引(通常是使用系统包管理器)。" + +#: ../../whatsnew/2.7.rst:2688 +msgid "Documentation Changes" +msgstr "文档更改" + +#: ../../whatsnew/2.7.rst:2690 +msgid "" +"As part of this change, the :ref:`installing-index` and :ref:`distributing-" +"index` sections of the documentation have been completely redesigned as " +"short getting started and FAQ documents. Most packaging documentation has " +"now been moved out to the Python Packaging Authority maintained `Python " +"Packaging User Guide `__ and the documentation " +"of the individual projects." +msgstr "" + +#: ../../whatsnew/2.7.rst:2698 +msgid "" +"However, as this migration is currently still incomplete, the legacy " +"versions of those guides remaining available as :ref:`install-index` and " +":ref:`distutils-index`." +msgstr "" + +#: ../../whatsnew/2.7.rst:2705 +msgid ":pep:`453` -- Explicit bootstrapping of pip in Python installations" +msgstr ":pep:`453` -- Python 安装版中对 pip 的显式初始设置" + +#: ../../whatsnew/2.7.rst:2705 +msgid "" +"PEP written by Donald Stufft and Nick Coghlan, implemented by Donald Stufft," +" Nick Coghlan, Martin von Löwis and Ned Deily." +msgstr "" +"PEP 由Donald Stufft 和 Nick Coghlan 撰写,由 Donald Stufft,Nick Coghlan,Martin von" +" Löwis 和 Ned Deily 实现。" + +#: ../../whatsnew/2.7.rst:2709 +msgid "" +"PEP 476: Enabling certificate verification by default for stdlib http " +"clients" +msgstr "PEP 476: 默认为 stdlib http 客户端启用证书验证" + +#: ../../whatsnew/2.7.rst:2711 +msgid "" +":pep:`476` updated :mod:`httplib` and modules which use it, such as " +":mod:`urllib2` and :mod:`xmlrpclib`, to now verify that the server presents " +"a certificate which is signed by a Certificate Authority in the platform " +"trust store and whose hostname matches the hostname being requested by " +"default, significantly improving security for many applications. This change" +" was made in the Python 2.7.9 release." +msgstr "" + +#: ../../whatsnew/2.7.rst:2718 +msgid "" +"For applications which require the old previous behavior, they can pass an " +"alternate context::" +msgstr "对于需要之前版本的旧有行为的应用程序,可以传入一个替代的上下文::" + +#: ../../whatsnew/2.7.rst:2735 +msgid "PEP 493: HTTPS verification migration tools for Python 2.7" +msgstr "PEP 493:适用于Python 2.7 的 HTTPS 验证迁移工具" + +#: ../../whatsnew/2.7.rst:2737 +msgid "" +":pep:`493` provides additional migration tools to support a more incremental" +" infrastructure upgrade process for environments containing applications and" +" services relying on the historically permissive processing of server " +"certificates when establishing client HTTPS connections. These additions " +"were made in the Python 2.7.12 release." +msgstr "" + +#: ../../whatsnew/2.7.rst:2743 +msgid "" +"These tools are intended for use in cases where affected applications and " +"services can't be modified to explicitly pass a more permissive SSL context " +"when establishing the connection." +msgstr "" + +#: ../../whatsnew/2.7.rst:2747 +msgid "" +"For applications and services which can't be modified at all, the new " +"``PYTHONHTTPSVERIFY`` environment variable may be set to ``0`` to revert an " +"entire Python process back to the default permissive behaviour of Python " +"2.7.8 and earlier." +msgstr "" + +#: ../../whatsnew/2.7.rst:2752 +msgid "" +"For cases where the connection establishment code can't be modified, but the" +" overall application can be, the new :func:`ssl._https_verify_certificates` " +"function can be used to adjust the default behaviour at runtime." +msgstr "" + +#: ../../whatsnew/2.7.rst:2758 +msgid "New ``make regen-all`` build target" +msgstr "新增 ``make regen-all`` 构建目标" + +#: ../../whatsnew/2.7.rst:2760 +msgid "" +"To simplify cross-compilation, and to ensure that CPython can reliably be " +"compiled without requiring an existing version of Python to already be " +"available, the autotools-based build system no longer attempts to implicitly" +" recompile generated files based on file modification times." +msgstr "" +"为了简化交叉编译,并确保 CPython 能够可靠地编译而不需要已存在可用的 Python 版本,基于 autotools " +"的构建系统将不再尝试根据文件修改时间隐式地重新编译已生成的文件。" + +#: ../../whatsnew/2.7.rst:2765 +msgid "" +"Instead, a new ``make regen-all`` command has been added to force " +"regeneration of these files when desired (e.g. after an initial version of " +"Python has already been built based on the pregenerated versions)." +msgstr "" +"取而代之的是,新增了一个 ``make regen-all`` 命令以便在需要时强制重新生成这些文件(例如在基于预生成版本构建了 Python " +"的初始版本之后)。" + +#: ../../whatsnew/2.7.rst:2769 +msgid "" +"More selective regeneration targets are also defined - see " +":source:`Makefile.pre.in` for details." +msgstr "还定义了其他一些更具选择性的重生成目标 —— 详情参见 :source:`Makefile.pre.in`。" + +#: ../../whatsnew/2.7.rst:2772 ../../whatsnew/2.7.rst:2785 +msgid "(Contributed by Victor Stinner in :issue:`23404`.)" +msgstr "(由 Victor Stinner 在 :issue:`23404` 中贡献。)" + +#: ../../whatsnew/2.7.rst:2778 +msgid "Removal of ``make touch`` build target" +msgstr "移除了 ``make touch`` 构建目标" + +#: ../../whatsnew/2.7.rst:2780 +msgid "" +"The ``make touch`` build target previously used to request implicit " +"regeneration of generated files by updating their modification times has " +"been removed." +msgstr "之前用于通过更新生成文件的修改时间来请求隐式的重新生成这些文件的 ``make touch`` 构建目标已被移除。" + +#: ../../whatsnew/2.7.rst:2783 +msgid "It has been replaced by the new ``make regen-all`` target." +msgstr "它已被新的 ``make regen-all`` 目标所替代。" + +#: ../../whatsnew/2.7.rst:2794 +msgid "Acknowledgements" +msgstr "致谢" + +#: ../../whatsnew/2.7.rst:2796 +msgid "" +"The author would like to thank the following people for offering " +"suggestions, corrections and assistance with various drafts of this article:" +" Nick Coghlan, Philip Jenvey, Ryan Lovett, R. David Murray, Hugh Secker-" +"Walker." +msgstr "" +"作者要感谢以下人员为本文的各种草案提供建议,更正和帮助: Nick Coghlan, Philip Jenvey, Ryan Lovett, R. " +"David Murray, Hugh Secker-Walker." diff --git a/whatsnew/3.0.po b/whatsnew/3.0.po new file mode 100644 index 000000000..1230c9214 --- /dev/null +++ b/whatsnew/3.0.po @@ -0,0 +1,1500 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) 2001-2025, Python Software Foundation +# This file is distributed under the same license as the Python package. +# FIRST AUTHOR , YEAR. +# +# Translators: +# Fei Yin , 2018 +# ppcfish , 2019 +# Lu , 2022 +# Rafael Fontenelle , 2025 +# Freesand Leo , 2025 +# +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: Python 3.9\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2025-04-25 16:43+0000\n" +"PO-Revision-Date: 2017-02-16 23:43+0000\n" +"Last-Translator: Freesand Leo , 2025\n" +"Language-Team: Chinese (China) (https://app.transifex.com/python-doc/teams/5390/zh_CN/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: zh_CN\n" +"Plural-Forms: nplurals=1; plural=0;\n" + +#: ../../whatsnew/3.0.rst:3 +msgid "What's New In Python 3.0" +msgstr "Python 3.0 有什么新变化" + +#: ../../whatsnew/3.0.rst:0 +msgid "Author" +msgstr "作者" + +#: ../../whatsnew/3.0.rst:7 +msgid "Guido van Rossum" +msgstr "Guido van Rossum" + +#: ../../whatsnew/3.0.rst:54 +msgid "" +"This article explains the new features in Python 3.0, compared to 2.6. " +"Python 3.0, also known as \"Python 3000\" or \"Py3K\", is the first ever " +"*intentionally backwards incompatible* Python release. There are more " +"changes than in a typical release, and more that are important for all " +"Python users. Nevertheless, after digesting the changes, you'll find that " +"Python really hasn't changed all that much -- by and large, we're mostly " +"fixing well-known annoyances and warts, and removing a lot of old cruft." +msgstr "" + +#: ../../whatsnew/3.0.rst:63 +msgid "" +"This article doesn't attempt to provide a complete specification of all new " +"features, but instead tries to give a convenient overview. For full details," +" you should refer to the documentation for Python 3.0, and/or the many PEPs " +"referenced in the text. If you want to understand the complete " +"implementation and design rationale for a particular feature, PEPs usually " +"have more details than the regular documentation; but note that PEPs usually" +" are not kept up-to-date once a feature has been fully implemented." +msgstr "" +"本文并不试图提供所有新特性的完整规范,而是试图提供一个方便的概述。 要了解完整的细节,您应该参考 Python 3.0 的文档和/或文中引用的许多 " +"PEP。 如果您想了解某个特性的完整实现和设计原理,PEP 通常比常规文档有更多的细节;但要注意的是,一旦某个特性被完全实现,PEP 通常不会保持更新。" + +#: ../../whatsnew/3.0.rst:72 +msgid "" +"Due to time constraints this document is not as complete as it should have " +"been. As always for a new release, the ``Misc/NEWS`` file in the source " +"distribution contains a wealth of detailed information about every small " +"thing that was changed." +msgstr "" +"由于时间有限,本文档不够完整。 对于新发布的版本,源代码发行版中的 ``Misc/NEWS`` 文件总是包含大量关于每一个细小改动的详细信息。" + +#: ../../whatsnew/3.0.rst:89 +msgid "Common Stumbling Blocks" +msgstr "常见的绊脚石" + +#: ../../whatsnew/3.0.rst:91 +msgid "" +"This section lists those few changes that are most likely to trip you up if " +"you're used to Python 2.5." +msgstr "本节列出了在你已习惯了 Python 2.5 的情况下最有可能让您感到困惑的几处更改。" + +#: ../../whatsnew/3.0.rst:95 +msgid "Print Is A Function" +msgstr "Print 是函数" + +#: ../../whatsnew/3.0.rst:97 +msgid "" +"The ``print`` statement has been replaced with a :func:`print` function, " +"with keyword arguments to replace most of the special syntax of the old " +"``print`` statement (:pep:`3105`). Examples::" +msgstr "" +"``print`` 语句已被 :func:`print` 函数取代,其关键字参数取代了旧 ``print`` 语句 (:pep:`3105`) " +"的大部分特殊语法。 示例::" + +#: ../../whatsnew/3.0.rst:116 +msgid "You can also customize the separator between items, e.g.::" +msgstr "你还可以自定义条目间的分隔符,例如 ::" + +#: ../../whatsnew/3.0.rst:120 +msgid "which produces:" +msgstr "这将产生如下结果:" + +#: ../../whatsnew/3.0.rst:126 +msgid "Note:" +msgstr "注意" + +#: ../../whatsnew/3.0.rst:128 +msgid "" +"The :func:`print` function doesn't support the \"softspace\" feature of the " +"old ``print`` statement. For example, in Python 2.x, ``print \"A\\n\", " +"\"B\"`` would write ``\"A\\nB\\n\"``; but in Python 3.0, ``print(\"A\\n\", " +"\"B\")`` writes ``\"A\\n B\\n\"``." +msgstr "" +":func:`print` 函数不支持旧 ``print`` 语句的 \"softspace\" 功能。例如,在 Python 2.x " +"中,``print \"A\\n\", \"B\"`` 会写入 ``\"A\\nB\\n\"``;但在 Python 3.0 " +"中,``print(\"A\\n\", \"B\")`` 会写入 ``\"A\\n B\\n\"``。" + +#: ../../whatsnew/3.0.rst:133 +msgid "" +"Initially, you'll be finding yourself typing the old ``print x`` a lot in " +"interactive mode. Time to retrain your fingers to type ``print(x)`` " +"instead!" +msgstr "最初,您会发现自己在交互模式下经常输入旧的 ``print x`` 。是时候重新训练你的手指以输入 ``print(x)`` 了!" + +#: ../../whatsnew/3.0.rst:137 +msgid "" +"When using the ``2to3`` source-to-source conversion tool, all ``print`` " +"statements are automatically converted to :func:`print` function calls, so " +"this is mostly a non-issue for larger projects." +msgstr "" +"使用 ``2to3`` 源代码到源代码转换工具时,所有 ``print`` 语句都会自动转换为 :func:`print` " +"函数调用,因此对于大型项目来说,这基本上不是问题。" + +#: ../../whatsnew/3.0.rst:143 +msgid "Views And Iterators Instead Of Lists" +msgstr "用视图和迭代器取代列表" + +#: ../../whatsnew/3.0.rst:145 +msgid "Some well-known APIs no longer return lists:" +msgstr "某些知名的 API 将不再返回列表:" + +#: ../../whatsnew/3.0.rst:147 +msgid "" +":class:`dict` methods :meth:`dict.keys`, :meth:`dict.items` and " +":meth:`dict.values` return \"views\" instead of lists. For example, this no" +" longer works: ``k = d.keys(); k.sort()``. Use ``k = sorted(d)`` instead " +"(this works in Python 2.5 too and is just as efficient)." +msgstr "" +":class:`dict` 方法 :meth:`dict.keys`、:meth:`dict.items` 和 :meth:`dict.values` " +"返回 “视图” 而不是列表。 例如,这个写法不再有效: ``k = d.keys(); k.sort()``。 请使用 ``k = " +"sorted(d)`` 代替(这在 Python 2.5 中也有效,而且同样高效)。" + +#: ../../whatsnew/3.0.rst:153 +msgid "" +"Also, the :meth:`dict.iterkeys`, :meth:`dict.iteritems` and " +":meth:`dict.itervalues` methods are no longer supported." +msgstr "" +"此外,不再支持 :meth:`dict.iterkeys`、:meth:`dict.iteritems` 和 " +":meth:`dict.itervalues` 方法。" + +#: ../../whatsnew/3.0.rst:156 +msgid "" +":func:`map` and :func:`filter` return iterators. If you really need a list " +"and the input sequences are all of equal length, a quick fix is to wrap " +":func:`map` in :func:`list`, e.g. ``list(map(...))``, but a better fix is " +"often to use a list comprehension (especially when the original code uses " +":keyword:`lambda`), or rewriting the code so it doesn't need a list at all." +" Particularly tricky is :func:`map` invoked for the side effects of the " +"function; the correct transformation is to use a regular :keyword:`for` loop" +" (since creating a list would just be wasteful)." +msgstr "" +":func:`map` 和 :func:`filter` 均返回迭代器。 如果你确实需要一个列表并且所有输入序列的长度相等,简单的解决办法是将 " +":func:`map` 包装在 :func:`list` 中,例如 " +"``list(map(...))``,但更好的办法通常是使用列表推导式(特别是当原始代码使用了 :keyword:`lambda` " +"的时候),或是重写代码使得它完全不需要列表。 还有一种特殊技巧是将 :func:`map` 作为函数的附带影响被唤起;正确的转换方式是使用一个常规的 " +":keyword:`for` 循环(因为创建列表会浪费资源)。" + +#: ../../whatsnew/3.0.rst:167 +msgid "" +"If the input sequences are not of equal length, :func:`map` will stop at the" +" termination of the shortest of the sequences. For full compatibility with " +":func:`map` from Python 2.x, also wrap the sequences in " +":func:`itertools.zip_longest`, e.g. ``map(func, *sequences)`` becomes " +"``list(map(func, itertools.zip_longest(*sequences)))``." +msgstr "" +"如果输入序列的长度不相等,:func:`map` 将在最短序列的终点停止。 为了与 Python 2.x 中的 :func:`map` " +"完全兼容,也可将序列包装在 :func:`itertools.zip_longest` 中,例如将 ``map(func, *sequences)`` " +"变成 ``list(map(func, itertools.zip_longest(*sequences)))``。" + +#: ../../whatsnew/3.0.rst:173 +msgid "" +":func:`range` now behaves like :func:`xrange` used to behave, except it " +"works with values of arbitrary size. The latter no longer exists." +msgstr "" +"现在 :func:`range` 的行为与过去 :func:`xrange` 的行为类似,区别在于它可以处理任意大小的值。 后者已不复存在。" + +#: ../../whatsnew/3.0.rst:177 +msgid ":func:`zip` now returns an iterator." +msgstr ":func:`zip` 现在将返回一个迭代器。" + +#: ../../whatsnew/3.0.rst:180 +msgid "Ordering Comparisons" +msgstr "排序比较" + +#: ../../whatsnew/3.0.rst:182 +msgid "Python 3.0 has simplified the rules for ordering comparisons:" +msgstr "Python 3.0 简化了排序比较的规则:" + +#: ../../whatsnew/3.0.rst:184 +msgid "" +"The ordering comparison operators (``<``, ``<=``, ``>=``, ``>``) raise a " +"TypeError exception when the operands don't have a meaningful natural " +"ordering. Thus, expressions like ``1 < ''``, ``0 > None`` or ``len <= len``" +" are no longer valid, and e.g. ``None < None`` raises :exc:`TypeError` " +"instead of returning ``False``. A corollary is that sorting a heterogeneous" +" list no longer makes sense -- all the elements must be comparable to each " +"other. Note that this does not apply to the ``==`` and ``!=`` operators: " +"objects of different incomparable types always compare unequal to each " +"other." +msgstr "" +"当操作数不存在有意义的自然排序时,排序比较操作符 (``<``, ``<=``, ``>=``, ``>``) 会引发 TypeError 异常。 " +"因此,像 ``1 < ''``, ``0 > None`` 或 ``len <= len`` 这样的表达式不再有效,例如 ``None < None``" +" 会引发 :exc:`TypeError` 而不是返回 ``False``。 由此推论,对异构列表进行排序不再有意义 —— 所有元素必须相互可比。 " +"请注意,这不适用于 ``==`` 和 ``!=`` 操作符:不同的不可比类型的对象总是互不相等的。" + +#: ../../whatsnew/3.0.rst:195 +msgid "" +":meth:`builtin.sorted` and :meth:`list.sort` no longer accept the *cmp* " +"argument providing a comparison function. Use the *key* argument instead. " +"N.B. the *key* and *reverse* arguments are now \"keyword-only\"." +msgstr "" +":meth:`builtin.sorted` 和 :meth:`list.sort` 不再接受提供比较函数的 *cmp* 参数。 请使用 *key* " +"参数。 注意 *key* 和 *reverse* 参数现在是“仅限关键字”参数。 " + +#: ../../whatsnew/3.0.rst:200 +msgid "" +"The :func:`cmp` function should be treated as gone, and the :meth:`__cmp__` " +"special method is no longer supported. Use :meth:`__lt__` for sorting, " +":meth:`__eq__` with :meth:`__hash__`, and other rich comparisons as needed. " +"(If you really need the :func:`cmp` functionality, you could use the " +"expression ``(a > b) - (a < b)`` as the equivalent for ``cmp(a, b)``.)" +msgstr "" +":func:`cmp` 函数应视为已不复存在,而 :meth:`__cmp__` 特殊方法也不再支持。 请使用 :meth:`__lt__` " +"进行排序,使用 :meth:`__eq__` 与 :meth:`__hash__` 进行比较,并根据需要使用其他的丰富比较方法。 (如果确实需要 " +":func:`cmp` 功能,可以使用表达式 ``(a > b) - (a < b)`` 以实现 ``cmp(a, b)``。)" + +#: ../../whatsnew/3.0.rst:207 +msgid "Integers" +msgstr "整数" + +#: ../../whatsnew/3.0.rst:209 +msgid "" +":pep:`237`: Essentially, :class:`long` renamed to :class:`int`. That is, " +"there is only one built-in integral type, named :class:`int`; but it behaves" +" mostly like the old :class:`long` type." +msgstr "" +":pep:`237`: 在实质上,:class:`long` 已被重命名为 :class:`int`。 也就是说,现在只有一种内置整数类型,叫做 " +":class:`int`;但其行为更像是旧的 :class:`long` 类型。" + +#: ../../whatsnew/3.0.rst:213 +msgid "" +":pep:`238`: An expression like ``1/2`` returns a float. Use ``1//2`` to get" +" the truncating behavior. (The latter syntax has existed for years, at " +"least since Python 2.2.)" +msgstr "" +":pep:`238`: 像 ``1/2`` 这样的表达式将返回一个浮点数。 请使用 ``1//2`` 来得到取整的行为。 " +"(后面这种语法已存在多年,至少从 Python 2.2 起就有了。)" + +#: ../../whatsnew/3.0.rst:217 +msgid "" +"The :data:`sys.maxint` constant was removed, since there is no longer a " +"limit to the value of integers. However, :data:`sys.maxsize` can be used as" +" an integer larger than any practical list or string index. It conforms to " +"the implementation's \"natural\" integer size and is typically the same as " +":data:`sys.maxint` in previous releases on the same platform (assuming the " +"same build options)." +msgstr "" +":data:`sys.maxint` 常量已被删除,因为整数值不再有限制。 不过,:data:`sys.maxsize` " +"仍可用作大于任何实际列表或字符串索引的整数。 它符合实现的“自然”整数大小,通常与同一平台上以前版本中的 :data:`sys.maxint` " +"相同(假设使用相同的构建选项)。" + +#: ../../whatsnew/3.0.rst:224 +msgid "" +"The :func:`repr` of a long integer doesn't include the trailing ``L`` " +"anymore, so code that unconditionally strips that character will chop off " +"the last digit instead. (Use :func:`str` instead.)" +msgstr "" +"长整数的 :func:`repr` 不再包括尾部的 ``L``,因此无条件地删除该字符的代码会删除最后一位数字。 (请使用 :func:`str` " +"代替。)" + +#: ../../whatsnew/3.0.rst:228 +msgid "" +"Octal literals are no longer of the form ``0720``; use ``0o720`` instead." +msgstr "八进制数字面值不再是 ``0720`` 的形式;而是改用 ``0o720`` 的形式。" + +#: ../../whatsnew/3.0.rst:232 +msgid "Text Vs. Data Instead Of Unicode Vs. 8-bit" +msgstr "文本与数据而不是 Unicode 与 8 比特位" + +#: ../../whatsnew/3.0.rst:234 +msgid "" +"Everything you thought you knew about binary data and Unicode has changed." +msgstr "你对二进制数据和 Unicode 的所有认知都已改变。" + +#: ../../whatsnew/3.0.rst:237 +msgid "" +"Python 3.0 uses the concepts of *text* and (binary) *data* instead of " +"Unicode strings and 8-bit strings. All text is Unicode; however *encoded* " +"Unicode is represented as binary data. The type used to hold text is " +":class:`str`, the type used to hold data is :class:`bytes`. The biggest " +"difference with the 2.x situation is that any attempt to mix text and data " +"in Python 3.0 raises :exc:`TypeError`, whereas if you were to mix Unicode " +"and 8-bit strings in Python 2.x, it would work if the 8-bit string happened " +"to contain only 7-bit (ASCII) bytes, but you would get " +":exc:`UnicodeDecodeError` if it contained non-ASCII values. This value-" +"specific behavior has caused numerous sad faces over the years." +msgstr "" +"Python 3.0 使用 *文本* 和 (二进制) *数据* 等概念来替代 Unicode 字符串和 8 位字符串。 所有文本均使用 " +"Unicode;不过 *已编码* Unicode 是以二进制数据来表示的。 用于存放文本的类型是 :class:`str`,用于存放数据的类型是 " +":class:`bytes`。 与 2.x 场景的最大区别是在 Python 3.0 中任何混用文本和数据的尝试都将引发 " +":exc:`TypeError`,而当你在 Python 2.x 中混用 Unicode 和 8 位字符串时,如果 8 位字符串恰好仅包含 7 位 " +"(ASCII) 字节数据那就没有问题,但是如果包含非 ASCII 值则将引发 :exc:`UnicodeDecodeError`。 " +"这种依赖于特定值的行为多年来造成了无数的苦恼。" + +#: ../../whatsnew/3.0.rst:250 +msgid "" +"As a consequence of this change in philosophy, pretty much all code that " +"uses Unicode, encodings or binary data most likely has to change. The " +"change is for the better, as in the 2.x world there were numerous bugs " +"having to do with mixing encoded and unencoded text. To be prepared in " +"Python 2.x, start using :class:`unicode` for all unencoded text, and " +":class:`str` for binary or encoded data only. Then the ``2to3`` tool will " +"do most of the work for you." +msgstr "" + +#: ../../whatsnew/3.0.rst:258 +msgid "" +"You can no longer use ``u\"...\"`` literals for Unicode text. However, you " +"must use ``b\"...\"`` literals for binary data." +msgstr "你不能再使用 ``u\"...\"`` 字面值来表示 Unicode 文本。 不过,你必须使用 ``b\"...\"`` 字面值来表示二进制数据。" + +#: ../../whatsnew/3.0.rst:261 +msgid "" +"As the :class:`str` and :class:`bytes` types cannot be mixed, you must " +"always explicitly convert between them. Use :meth:`str.encode` to go from " +":class:`str` to :class:`bytes`, and :meth:`bytes.decode` to go from " +":class:`bytes` to :class:`str`. You can also use ``bytes(s, encoding=...)``" +" and ``str(b, encoding=...)``, respectively." +msgstr "" +"由于 :class:`str` 和 :class:`bytes` 类型无法混用,你必须始终在它们之间执行显式转换。 使用 " +":meth:`str.encode` 将 :class:`str` 转为 :class:`bytes`,并使用 :meth:`bytes.decode`" +" 将 :class:`bytes` 转为 :class:`str`。 你也可以分别使用 ``bytes(s, encoding=...)`` 和 " +"``str(b, encoding=...)``。" + +#: ../../whatsnew/3.0.rst:268 +msgid "" +"Like :class:`str`, the :class:`bytes` type is immutable. There is a " +"separate *mutable* type to hold buffered binary data, :class:`bytearray`. " +"Nearly all APIs that accept :class:`bytes` also accept :class:`bytearray`. " +"The mutable API is based on :class:`collections.MutableSequence`." +msgstr "" +"与 :class:`str` 一样,:class:`bytes` 类型是不可变的。 还有一个单独的 *mutable* 类型用于保存缓冲二进制数据,即 " +":class:`bytearray`。 几乎所有接受 :class:`bytes` 的应用程序接口也接受 :class:`bytearray`。 可变 " +"API 基于 :class:`collections.MutableSequence`。" + +#: ../../whatsnew/3.0.rst:274 +msgid "" +"All backslashes in raw string literals are interpreted literally. This means" +" that ``'\\U'`` and ``'\\u'`` escapes in raw strings are not treated " +"specially. For example, ``r'\\u20ac'`` is a string of 6 characters in " +"Python 3.0, whereas in 2.6, ``ur'\\u20ac'`` was the single \"euro\" " +"character. (Of course, this change only affects raw string literals; the " +"euro character is ``'\\u20ac'`` in Python 3.0.)" +msgstr "" +"原始字符串字面中的所有反斜线均按字面解释。 这意味着原始字符串中的 ``'\\U'`` 和 ``'\\u'`` 转义符不会被特殊处理。 例如,在 " +"Python 3.0 中,``r'\\u20ac'`` 是一个包含 6 个字符的字符串,而在 2.6 中,``ur'\\u20ac'`` 是一个 " +"“欧元” 字符。 (当然,这种变化只影响原始字符串的字面意义;在 Python 3.0 中,欧元字符是 ``'\\u20ac'``。)" + +#: ../../whatsnew/3.0.rst:281 +msgid "" +"The built-in :class:`basestring` abstract type was removed. Use " +":class:`str` instead. The :class:`str` and :class:`bytes` types don't have " +"functionality enough in common to warrant a shared base class. The ``2to3``" +" tool (see below) replaces every occurrence of :class:`basestring` with " +":class:`str`." +msgstr "" +"内置的 :class:`basestring` 抽象类型已被移除,请使用 :class:`str` 代替。 :class:`str` 和 " +":class:`bytes` 类型在功能上没有足够的共通性,因此不需要共享基类。 ``2to3`` 工具(见下文)用 :class:`str` " +"替换了每一个 :class:`basestring`。" + +#: ../../whatsnew/3.0.rst:287 +msgid "" +"Files opened as text files (still the default mode for :func:`open`) always " +"use an encoding to map between strings (in memory) and bytes (on disk). " +"Binary files (opened with a ``b`` in the mode argument) always use bytes in " +"memory. This means that if a file is opened using an incorrect mode or " +"encoding, I/O will likely fail loudly, instead of silently producing " +"incorrect data. It also means that even Unix users will have to specify the" +" correct mode (text or binary) when opening a file. There is a platform-" +"dependent default encoding, which on Unixy platforms can be set with the " +"``LANG`` environment variable (and sometimes also with some other platform-" +"specific locale-related environment variables). In many cases, but not all," +" the system default is UTF-8; you should never count on this default. Any " +"application reading or writing more than pure ASCII text should probably " +"have a way to override the encoding. There is no longer any need for using " +"the encoding-aware streams in the :mod:`codecs` module." +msgstr "" +"作为文本文件打开的文件(仍然是 :func:`open` 的默认模式)总是会使用一个编码格式在(内存中的)字符串和(磁盘中的)字节串之间建立映射。 " +"二进制文件(将 mode 参数设为 ``b`` 来打开)在内存中总是会使用数字串。 这意味着如果一个文件是使用不正确的模式或编码格式打开的,I/O " +"操作很可能会报告失败,而不是静默地产生不正确的数据。 这也意味着即使是 Unix 用户在打开文件时也必须指定正确的模式(文本或二进制)。 " +"存在一个依赖于具体平台的默认编码格式,在类 Unix 平台上可以通过 ``LANG`` " +"环境变量来设置(有时也会使用其他一些平台专属的语言区域相关的环境变量)。 在多数情况下,系统默认使用 " +"UTF-8,但并非全都如此;你绝不应该依赖这个默认值。 任何读写超出纯 ASCII 文本范围的内容的应用程序都应该提供重写编码格式的选项。 " +"现在已不再需要使用 :mod:`codecs` 模块中可感知编码格式的流。" + +#: ../../whatsnew/3.0.rst:304 +msgid "" +"The initial values of :data:`sys.stdin`, :data:`sys.stdout` and " +":data:`sys.stderr` are now unicode-only text files (i.e., they are instances" +" of :class:`io.TextIOBase`). To read and write bytes data with these " +"streams, you need to use their :data:`io.TextIOBase.buffer` attribute." +msgstr "" +":data:`sys.stdin`、:data:`sys.stdout` 和 :data:`sys.stderr` 的初始值现在是仅 Unicode " +"的文本文件(即它们是 :class:`io.TextIOBase` 的实例)。 要使用这些数据流读写字节数据,需要使用它们的 " +":data:`io.TextIOBase.buffer` 属性。" + +#: ../../whatsnew/3.0.rst:310 +msgid "" +"Filenames are passed to and returned from APIs as (Unicode) strings. This " +"can present platform-specific problems because on some platforms filenames " +"are arbitrary byte strings. (On the other hand, on Windows filenames are " +"natively stored as Unicode.) As a work-around, most APIs (e.g. :func:`open`" +" and many functions in the :mod:`os` module) that take filenames accept " +":class:`bytes` objects as well as strings, and a few APIs have a way to ask " +"for a :class:`bytes` return value. Thus, :func:`os.listdir` returns a list " +"of :class:`bytes` instances if the argument is a :class:`bytes` instance, " +"and :func:`os.getcwdb` returns the current working directory as a " +":class:`bytes` instance. Note that when :func:`os.listdir` returns a list " +"of strings, filenames that cannot be decoded properly are omitted rather " +"than raising :exc:`UnicodeError`." +msgstr "" +"文件名是以(Unicode)字符串的形式传给 API 并返回的。 这可能产生特定平台专属的问题因为在某些平台上文件名强制使用字节串。 (另一方面,在 " +"Windows 上文件名则原生存储为 Unicode。) 为绕过此问题,多数接受文件名的 API(例如 :func:`open` 和 :mod:`os`" +" 模块中的许多函数)都同时接受 :class:`bytes` 对象和字符串,而少数 API 会发出要求 :class:`bytes` 返回值的提示。 " +"因而,当参数为 :class:`bytes` 的实例时 :func:`os.listdir` 会返回由 :class:`bytes` " +"实例组成的列表,:func:`os.getcwdb` 则会将当前工作目录作为 :class:`bytes` 实例返回。 请注意当 " +":func:`os.listdir` 返回字符串的列表时,无法被正确解码的文件名会被忽略而不是引发 :exc:`UnicodeError`。" + +#: ../../whatsnew/3.0.rst:325 +msgid "" +"Some system APIs like :data:`os.environ` and :data:`sys.argv` can also " +"present problems when the bytes made available by the system is not " +"interpretable using the default encoding. Setting the ``LANG`` variable and" +" rerunning the program is probably the best approach." +msgstr "" +"当系统提供的字节无法使用默认编码进行解释时,一些系统 API,如 :data:`os.environ` 和 " +":data:`sys.argv`,也会出现问题。 最好的办法可能是设置 ``LANG`` 变量并重新运行程序。" + +#: ../../whatsnew/3.0.rst:330 +msgid "" +":pep:`3138`: The :func:`repr` of a string no longer escapes non-ASCII " +"characters. It still escapes control characters and code points with non-" +"printable status in the Unicode standard, however." +msgstr "" +":pep:`3138`: 字符串的 :func:`repr` 将不再转义非 ASCII 字符。 不过,它仍然会转义控制字符和在 Unicode " +"标准中具有不可打印状态的码位。" + +#: ../../whatsnew/3.0.rst:334 +msgid ":pep:`3120`: The default source encoding is now UTF-8." +msgstr ":pep:`3120`:现在默认的源码编码格式是UTF-8。" + +#: ../../whatsnew/3.0.rst:336 +msgid "" +":pep:`3131`: Non-ASCII letters are now allowed in identifiers. (However, the" +" standard library remains ASCII-only with the exception of contributor names" +" in comments.)" +msgstr "" +":pep:`3131`: 现在允许在标识符中使用非 ASCII 字符(不过,标准库中的异常和注释中的贡献者名字仍然只使用 ASCII 字符)。" + +#: ../../whatsnew/3.0.rst:340 +msgid "" +"The :mod:`StringIO` and :mod:`cStringIO` modules are gone. Instead, import " +"the :mod:`io` module and use :class:`io.StringIO` or :class:`io.BytesIO` for" +" text and data respectively." +msgstr "" + +#: ../../whatsnew/3.0.rst:344 +msgid "See also the :ref:`unicode-howto`, which was updated for Python 3.0." +msgstr "另请参阅 :ref:`unicode-howto`,其内容已针对 Python 3.0 进行更新。" + +#: ../../whatsnew/3.0.rst:348 +msgid "Overview Of Syntax Changes" +msgstr "语法变化概述" + +#: ../../whatsnew/3.0.rst:350 +msgid "" +"This section gives a brief overview of every *syntactic* change in Python " +"3.0." +msgstr "本节提供了 Python 3.0 中每个 *语法* 变化的简要说明。" + +#: ../../whatsnew/3.0.rst:354 +msgid "New Syntax" +msgstr "新语法" + +#: ../../whatsnew/3.0.rst:356 +msgid "" +":pep:`3107`: Function argument and return value annotations. This provides " +"a standardized way of annotating a function's parameters and return value. " +"There are no semantics attached to such annotations except that they can be " +"introspected at runtime using the :attr:`__annotations__` attribute. The " +"intent is to encourage experimentation through metaclasses, decorators or " +"frameworks." +msgstr "" + +#: ../../whatsnew/3.0.rst:363 +msgid "" +":pep:`3102`: Keyword-only arguments. Named parameters occurring after " +"``*args`` in the parameter list *must* be specified using keyword syntax in " +"the call. You can also use a bare ``*`` in the parameter list to indicate " +"that you don't accept a variable-length argument list, but you do have " +"keyword-only arguments." +msgstr "" +":pep:`3102`:仅限关键字参数。在参数列表``*args`` 之后出现的命名参数 *必须* " +"在调用中使用关键字语法指定。也可以在参数列表中使用``*``来表示不接受长度可变的参数列表,但可以使用只包含关键字的参数。" + +#: ../../whatsnew/3.0.rst:369 +msgid "" +"Keyword arguments are allowed after the list of base classes in a class " +"definition. This is used by the new convention for specifying a metaclass " +"(see next section), but can be used for other purposes as well, as long as " +"the metaclass supports it." +msgstr "类定义中的基类列表后允许使用关键字参数。 这是用于指定元类的新约定(见下一节),但也可用于其他目的,只要元类支持它。" + +#: ../../whatsnew/3.0.rst:374 +msgid "" +":pep:`3104`: :keyword:`nonlocal` statement. Using ``nonlocal x`` you can " +"now assign directly to a variable in an outer (but non-global) scope. " +":keyword:`!nonlocal` is a new reserved word." +msgstr "" +":pep:`3104`: :keyword:`nonlocal` 语句。 现在你可以使用 ``nonlocal x`` " +"直接赋值到一个外层(但非全局)作用域。 :keyword:`!nonlocal` 是新的保留字。" + +#: ../../whatsnew/3.0.rst:378 +msgid "" +":pep:`3132`: Extended Iterable Unpacking. You can now write things like " +"``a, b, *rest = some_sequence``. And even ``*rest, a = stuff``. The " +"``rest`` object is always a (possibly empty) list; the right-hand side may " +"be any iterable. Example::" +msgstr "" +":pep:`3132`: 扩展可迭代对象解包。 你现在可以编写像 ``a, b, *rest = some_sequence`` 这样的代码。 甚至 " +"``*rest, a = stuff``。 ``rest`` 对象将总是为一个(可能为空的)列表;右侧的对象可以是任意可迭代对象。 例如::" + +#: ../../whatsnew/3.0.rst:385 +msgid "This sets *a* to ``0``, *b* to ``4``, and *rest* to ``[1, 2, 3]``." +msgstr "这会将 *a* 设为 ``0``,*b* 设为 ``4``,而将 *rest* 设为 ``[1, 2, 3]``。" + +#: ../../whatsnew/3.0.rst:387 +msgid "" +"Dictionary comprehensions: ``{k: v for k, v in stuff}`` means the same thing" +" as ``dict(stuff)`` but is more flexible. (This is :pep:`274` vindicated. " +":-)" +msgstr "" +"新增字典推导式: ``{k: v for k, v in stuff}`` 的含义与 ``dict(stuff)`` 相同但是更为灵活。 " +"(对此特性的解释见 :pep:`274`。 :-)" + +#: ../../whatsnew/3.0.rst:391 +msgid "" +"Set literals, e.g. ``{1, 2}``. Note that ``{}`` is an empty dictionary; use" +" ``set()`` for an empty set. Set comprehensions are also supported; e.g., " +"``{x for x in stuff}`` means the same thing as ``set(stuff)`` but is more " +"flexible." +msgstr "" +"新增集合字面值,例如 ``{1, 2}``。 请注意 ``{}`` 是空字典;要用 ``set()`` 表示空集合。 集合推导式也受到支持;例如 " +"``{x for x in stuff}`` 的含义与 ``set(stuff)`` 相同但是更为灵活。" + +#: ../../whatsnew/3.0.rst:396 +msgid "" +"New octal literals, e.g. ``0o720`` (already in 2.6). The old octal literals" +" (``0720``) are gone." +msgstr "新增八进制字面值,例如 ``0o720`` (已存在于 2.6 中)。 旧的八进制字面值 (``0720``) 已不复存在。" + +#: ../../whatsnew/3.0.rst:399 +msgid "" +"New binary literals, e.g. ``0b1010`` (already in 2.6), and there is a new " +"corresponding built-in function, :func:`bin`." +msgstr "新增二进制字面值,例如 ``0b1010`` (已存在于 2.6 中),还有对应的新增内置函数 :func:`bin`。" + +#: ../../whatsnew/3.0.rst:402 +msgid "" +"Bytes literals are introduced with a leading ``b`` or ``B``, and there is a " +"new corresponding built-in function, :func:`bytes`." +msgstr "引入了带有 ``b`` 或 ``B`` 前缀的字节串字面值,还有对应的新增内置函数 :func:`bytes`。" + +#: ../../whatsnew/3.0.rst:406 +msgid "Changed Syntax" +msgstr "语法变化" + +#: ../../whatsnew/3.0.rst:408 +msgid "" +":pep:`3109` and :pep:`3134`: new :keyword:`raise` statement syntax: " +":samp:`raise [{expr} [from {expr}]]`. See below." +msgstr "" +":pep:`3109` 和 :pep:`3134`: 新增 :keyword:`raise` 语句的语法: :samp:`raise [{expr} " +"[from {expr}]]`。 见下文。" + +#: ../../whatsnew/3.0.rst:411 +msgid "" +":keyword:`!as` and :keyword:`with` are now reserved words. (Since 2.6, " +"actually.)" +msgstr "现在 :keyword:`!as` 和 :keyword:`with` 是保留关键字。 (实际是从 2.6 开始。)" + +#: ../../whatsnew/3.0.rst:414 +msgid "" +"``True``, ``False``, and ``None`` are reserved words. (2.6 partially " +"enforced the restrictions on ``None`` already.)" +msgstr "``True``, ``False`` 和 ``None`` 已成为保留关键字。 (2.6 已经对 ``None`` 部分强制应用限制。)" + +#: ../../whatsnew/3.0.rst:417 +msgid "" +"Change from :keyword:`except` *exc*, *var* to :keyword:`!except` *exc* " +":keyword:`!as` *var*. See :pep:`3110`." +msgstr "" +"将 :keyword:`except` *exc*, *var* 改为 :keyword:`!except` *exc* :keyword:`!as` " +"*var*。 参见 :pep:`3110`。" + +#: ../../whatsnew/3.0.rst:420 +msgid ":pep:`3115`: New Metaclass Syntax. Instead of::" +msgstr ":pep:`3115`: 新的元类语法。 替换::" + +#: ../../whatsnew/3.0.rst:426 +msgid "you must now use::" +msgstr "你现在需要使用::" + +#: ../../whatsnew/3.0.rst:431 +msgid "" +"The module-global :data:`__metaclass__` variable is no longer supported. " +"(It was a crutch to make it easier to default to new-style classes without " +"deriving every class from :class:`object`.)" +msgstr "" +"不再支持全局模块变量 :data:`__metaclass__`。 (它是一个“拐杖”,可以使默认使用新风格类变得更容易,而无需从 " +":class:`object` 派生每个类。)" + +#: ../../whatsnew/3.0.rst:436 +msgid "" +"List comprehensions no longer support the syntactic form :samp:`[... for " +"{var} in {item1}, {item2}, ...]`. Use :samp:`[... for {var} in ({item1}, " +"{item2}, ...)]` instead. Also note that list comprehensions have different " +"semantics: they are closer to syntactic sugar for a generator expression " +"inside a :func:`list` constructor, and in particular the loop control " +"variables are no longer leaked into the surrounding scope." +msgstr "" +"列表推导式不再支持 :samp:`[... for {var} in {item1}, {item2}, ...]` 这样的语法形式。 请改用 " +":samp:`[... for {var} in ({item1}, {item2}, ...)]`。 还要注意列表推导式具有不同的句法:它们更像是 " +":func:`list` 构造器内部用于生成器表达式的语法糖,具体来说就是循环控制变量将不会再泄漏到外层作用域中。" + +#: ../../whatsnew/3.0.rst:444 +msgid "" +"The *ellipsis* (``...``) can be used as an atomic expression anywhere. " +"(Previously it was only allowed in slices.) Also, it *must* now be spelled " +"as ``...``. (Previously it could also be spelled as ``. . .``, by a mere " +"accident of the grammar.)" +msgstr "" +"*ellipsis* (``...``) 可以在任何地方作为原子表达式使用。(以前只允许在片段中使用。)另外,现在 *必须* 拼写为``...`` " +"。(以前也可以拼写为``. . .`` ,这只是一个偶然的语法。)" + +#: ../../whatsnew/3.0.rst:450 +msgid "Removed Syntax" +msgstr "移除的语法" + +#: ../../whatsnew/3.0.rst:452 +msgid "" +":pep:`3113`: Tuple parameter unpacking removed. You can no longer write " +"``def foo(a, (b, c)): ...``. Use ``def foo(a, b_c): b, c = b_c`` instead." +msgstr "" +":pep:`3113`: 元组形参解包已被移除。 你不能再使用 ``def foo(a, (b, c)): ...`` 的写法。 请改用 ``def " +"foo(a, b_c): b, c = b_c``。" + +#: ../../whatsnew/3.0.rst:456 +msgid "Removed backticks (use :func:`repr` instead)." +msgstr "移除了反引号(请使用 :func:`repr` 代替)。" + +#: ../../whatsnew/3.0.rst:458 +msgid "Removed ``<>`` (use ``!=`` instead)." +msgstr "移除了 ``<>`` (请改用 ``!=``)。" + +#: ../../whatsnew/3.0.rst:460 +msgid "" +"Removed keyword: :func:`exec` is no longer a keyword; it remains as a " +"function. (Fortunately the function syntax was also accepted in 2.x.) Also" +" note that :func:`exec` no longer takes a stream argument; instead of " +"``exec(f)`` you can use ``exec(f.read())``." +msgstr "" +"移除的关键字: :func:`exec` 不再是一个关键字;它仍是一个函数。 (幸运的是该函数语法也在 2.x 中被接受。) 还要注意 " +":func:`exec` 将不再接受流作为参数;你可以将原来的 ``exec(f)`` 改为使用 ``exec(f.read())``。" + +#: ../../whatsnew/3.0.rst:465 +msgid "Integer literals no longer support a trailing ``l`` or ``L``." +msgstr "整数字面值不再支持 ``l`` 或 ``L`` 后缀。" + +#: ../../whatsnew/3.0.rst:467 +msgid "String literals no longer support a leading ``u`` or ``U``." +msgstr "字符串字面值不再支持 ``u`` 或 ``U`` 前缀。" + +#: ../../whatsnew/3.0.rst:469 +msgid "" +"The :keyword:`from` *module* :keyword:`import` ``*`` syntax is only allowed " +"at the module level, no longer inside functions." +msgstr "" +":keyword:`from` *module* :keyword:`import` ``*`` 语法仅允许在模块层级使用,不再允许出现于函数内部。" + +#: ../../whatsnew/3.0.rst:472 +msgid "" +"The only acceptable syntax for relative imports is :samp:`from .[{module}] " +"import {name}`. All :keyword:`import` forms not starting with ``.`` are " +"interpreted as absolute imports. (:pep:`328`)" +msgstr "" +"唯一可接受的相对导入语法为 :samp:`from .[{module}] import {name}`。 所有不以 ``.`` 开头的 " +":keyword:`import` 形式都将被解读为绝对导入。 (:pep:`328`)" + +#: ../../whatsnew/3.0.rst:476 +msgid "Classic classes are gone." +msgstr "经典类已不复存在。" + +#: ../../whatsnew/3.0.rst:480 +msgid "Changes Already Present In Python 2.6" +msgstr "已存在于 Python 2.6 中的改变" + +#: ../../whatsnew/3.0.rst:482 +msgid "" +"Since many users presumably make the jump straight from Python 2.5 to Python" +" 3.0, this section reminds the reader of new features that were originally " +"designed for Python 3.0 but that were back-ported to Python 2.6. The " +"corresponding sections in :ref:`whats-new-in-2.6` should be consulted for " +"longer descriptions." +msgstr "" +"由于许多用户可能会直接从 Python 2.5 跳到 Python 3.0,因此本节提醒读者注意最初为 Python 3.0 设计但后来移植到 " +"Python 2.6 的新特性。 如需更详细的说明请参阅 :ref:`whats-new-in-2.6` 中的相应章节。" + +#: ../../whatsnew/3.0.rst:488 +msgid "" +":ref:`pep-0343`. The :keyword:`with` statement is now a standard feature " +"and no longer needs to be imported from the :mod:`__future__`. Also check " +"out :ref:`new-26-context-managers` and :ref:`new-module-contextlib`." +msgstr "" +":ref:`pep-0343`。 现在 :keyword:`with` 语句已是一个标准特性而不再需要从 :mod:`__future__` 导入。 " +"另请参阅 :ref:`new-26-context-managers` 和 :ref:`new-module-contextlib`。" + +#: ../../whatsnew/3.0.rst:493 +msgid "" +":ref:`pep-0366`. This enhances the usefulness of the :option:`-m` option " +"when the referenced module lives in a package." +msgstr ":ref:`pep-0366`。 这增强了 :option:`-m` 选项在被引用的模块位于包中时的实用性。" + +#: ../../whatsnew/3.0.rst:496 +msgid ":ref:`pep-0370`." +msgstr ":ref:`pep-0370`." + +#: ../../whatsnew/3.0.rst:498 +msgid ":ref:`pep-0371`." +msgstr ":ref:`pep-0371`." + +#: ../../whatsnew/3.0.rst:500 +msgid "" +":ref:`pep-3101`. Note: the 2.6 description mentions the :meth:`format` " +"method for both 8-bit and Unicode strings. In 3.0, only the :class:`str` " +"type (text strings with Unicode support) supports this method; the " +":class:`bytes` type does not. The plan is to eventually make this the only " +"API for string formatting, and to start deprecating the ``%`` operator in " +"Python 3.1." +msgstr "" +":ref:`pep-3101`。 注意:2.6 说明文档提到 :meth:`format` 方法同时适用于 8 位和 Unicode 字符串。 在 " +"3.0 中,只有 :class:`str` 类型(带有 Unicode 支持的文本字符串)才支持此方法;:class:`bytes` 类型并不支持。 " +"最终的计划是使其成为仅针对字符串格式化的 API,并在 Python 3.1 中开始弃用 ``%`` 字符串运算符。" + +#: ../../whatsnew/3.0.rst:507 +msgid "" +":ref:`pep-3105`. This is now a standard feature and no longer needs to be " +"imported from :mod:`__future__`. More details were given above." +msgstr ":ref:`pep-3105`。 现在这已是一个标准特性而不再需要从 :mod:`__future__` 导入。 更多详情见上文。" + +#: ../../whatsnew/3.0.rst:510 +msgid "" +":ref:`pep-3110`. The :keyword:`except` *exc* :keyword:`!as` *var* syntax is" +" now standard and :keyword:`!except` *exc*, *var* is no longer supported. " +"(Of course, the :keyword:`!as` *var* part is still optional.)" +msgstr "" +":ref:`pep-3110`。 现在 :keyword:`except` *exc* :keyword:`!as` *var* 语法已成为标准而 " +":keyword:`!except` *exc*, *var* 不再受到支持。 (当然,:keyword:`!as` *var* 部分仍为可选项。)" + +#: ../../whatsnew/3.0.rst:515 +msgid "" +":ref:`pep-3112`. The ``b\"...\"`` string literal notation (and its variants" +" like ``b'...'``, ``b\"\"\"...\"\"\"``, and ``br\"...\"``) now produces a " +"literal of type :class:`bytes`." +msgstr "" +":ref:`pep-3112`。 现在 ``b\"...\"`` 字节串字面值标记法(及其变化形式如 ``b'...'``, " +"``b\"\"\"...\"\"\"`` 和 ``br\"...\"`` 等将产生 :class:`bytes` 类型的字面值。" + +#: ../../whatsnew/3.0.rst:519 +msgid "" +":ref:`pep-3116`. The :mod:`io` module is now the standard way of doing file" +" I/O. The built-in :func:`open` function is now an alias for " +":func:`io.open` and has additional keyword arguments *encoding*, *errors*, " +"*newline* and *closefd*. Also note that an invalid *mode* argument now " +"raises :exc:`ValueError`, not :exc:`IOError`. The binary file object " +"underlying a text file object can be accessed as :attr:`f.buffer` (but " +"beware that the text object maintains a buffer of itself in order to speed " +"up the encoding and decoding operations)." +msgstr "" +":ref:`pep-3116`: :mod:`io` 模块现在是进行文件输入/输出的标准方法。 内置的 :func:`open` 函数现在是 " +":func:`io.open` 的别名,并增加了 *encoding*、*errors*、*newline* 和 *closefd* 等关键字参数。 " +"还要注意的是,无效的 *mode* 参数现在会引发 :exc:`ValueError`,而不是 :exc:`IOError`。 " +"文本文件对象底层的二进制文件对象可以像 :attr:`f.buffer` 一样访问(但要注意,文本对象会为自己保留一个缓冲区,以加快编码和解码操作。)" + +#: ../../whatsnew/3.0.rst:529 +msgid "" +":ref:`pep-3118`. The old builtin :func:`buffer` is now really gone; the new" +" builtin :func:`memoryview` provides (mostly) similar functionality." +msgstr "" + +#: ../../whatsnew/3.0.rst:533 +msgid "" +":ref:`pep-3119`. The :mod:`abc` module and the ABCs defined in the " +":mod:`collections` module plays a somewhat more prominent role in the " +"language now, and built-in collection types like :class:`dict` and " +":class:`list` conform to the :class:`collections.MutableMapping` and " +":class:`collections.MutableSequence` ABCs, respectively." +msgstr "" + +#: ../../whatsnew/3.0.rst:539 +msgid "" +":ref:`pep-3127`. As mentioned above, the new octal literal notation is the " +"only one supported, and binary literals have been added." +msgstr ":ref:`pep-3127`。 如上文所述,新的八进制字面值标记法是唯一受支持的形式,并增加了二进制字面值。" + +#: ../../whatsnew/3.0.rst:543 +msgid ":ref:`pep-3129`." +msgstr ":ref:`pep-3129`." + +#: ../../whatsnew/3.0.rst:545 +msgid "" +":ref:`pep-3141`. The :mod:`numbers` module is another new use of ABCs, " +"defining Python's \"numeric tower\". Also note the new :mod:`fractions` " +"module which implements :class:`numbers.Rational`." +msgstr "" +":ref:`pep-3141`。 :mod:`numbers` 模块是 ABC 的另一个新用例,它定义了 Python 的“数字层级塔”。 另请注意新的" +" :mod:`fractions` 模块,它实现了 :class:`numbers.Rational`。" + +#: ../../whatsnew/3.0.rst:551 +msgid "Library Changes" +msgstr "库的修改" + +#: ../../whatsnew/3.0.rst:553 +msgid "" +"Due to time constraints, this document does not exhaustively cover the very " +"extensive changes to the standard library. :pep:`3108` is the reference for" +" the major changes to the library. Here's a capsule review:" +msgstr "由于时间有限,本文档并未完全覆盖标准库的所有变化内容。 :pep:`3108` 提供了对标准库主要修改的引用列表。 以下是精简版的预览:" + +#: ../../whatsnew/3.0.rst:558 +msgid "" +"Many old modules were removed. Some, like :mod:`gopherlib` (no longer used)" +" and :mod:`md5` (replaced by :mod:`hashlib`), were already deprecated by " +":pep:`4`. Others were removed as a result of the removal of support for " +"various platforms such as Irix, BeOS and Mac OS 9 (see :pep:`11`). Some " +"modules were also selected for removal in Python 3.0 due to lack of use or " +"because a better replacement exists. See :pep:`3108` for an exhaustive " +"list." +msgstr "" + +#: ../../whatsnew/3.0.rst:566 +msgid "" +"The :mod:`bsddb3` package was removed because its presence in the core " +"standard library has proved over time to be a particular burden for the core" +" developers due to testing instability and Berkeley DB's release schedule. " +"However, the package is alive and well, externally maintained at " +"https://www.jcea.es/programacion/pybsddb.htm." +msgstr "" + +#: ../../whatsnew/3.0.rst:572 +msgid "" +"Some modules were renamed because their old name disobeyed :pep:`8`, or for " +"various other reasons. Here's the list:" +msgstr "一些模块名称已被修改因为它们的旧名称不符合 :pep:`8`,或是出于各种其他理由。 具体列表如下:" + +#: ../../whatsnew/3.0.rst:576 +msgid "Old Name" +msgstr "旧名称" + +#: ../../whatsnew/3.0.rst:576 +msgid "New Name" +msgstr "新名称" + +#: ../../whatsnew/3.0.rst:578 +msgid "_winreg" +msgstr "_winreg" + +#: ../../whatsnew/3.0.rst:578 +msgid "winreg" +msgstr "winreg" + +#: ../../whatsnew/3.0.rst:579 +msgid "ConfigParser" +msgstr "ConfigParser" + +#: ../../whatsnew/3.0.rst:579 +msgid "configparser" +msgstr "configparser" + +#: ../../whatsnew/3.0.rst:580 +msgid "copy_reg" +msgstr "copy_reg" + +#: ../../whatsnew/3.0.rst:580 +msgid "copyreg" +msgstr "copyreg" + +#: ../../whatsnew/3.0.rst:581 +msgid "Queue" +msgstr "Queue" + +#: ../../whatsnew/3.0.rst:581 +msgid "queue" +msgstr "queue" + +#: ../../whatsnew/3.0.rst:582 +msgid "SocketServer" +msgstr "SocketServer" + +#: ../../whatsnew/3.0.rst:582 +msgid "socketserver" +msgstr "socketserver" + +#: ../../whatsnew/3.0.rst:583 +msgid "markupbase" +msgstr "markupbase" + +#: ../../whatsnew/3.0.rst:583 +msgid "_markupbase" +msgstr "_markupbase" + +#: ../../whatsnew/3.0.rst:584 +msgid "repr" +msgstr "repr" + +#: ../../whatsnew/3.0.rst:584 +msgid "reprlib" +msgstr "reprlib" + +#: ../../whatsnew/3.0.rst:585 +msgid "test.test_support" +msgstr "test.test_support" + +#: ../../whatsnew/3.0.rst:585 +msgid "test.support" +msgstr "test.support" + +#: ../../whatsnew/3.0.rst:588 +msgid "" +"A common pattern in Python 2.x is to have one version of a module " +"implemented in pure Python, with an optional accelerated version implemented" +" as a C extension; for example, :mod:`pickle` and :mod:`cPickle`. This " +"places the burden of importing the accelerated version and falling back on " +"the pure Python version on each user of these modules. In Python 3.0, the " +"accelerated versions are considered implementation details of the pure " +"Python versions. Users should always import the standard version, which " +"attempts to import the accelerated version and falls back to the pure Python" +" version. The :mod:`pickle` / :mod:`cPickle` pair received this treatment." +" The :mod:`profile` module is on the list for 3.1. The :mod:`StringIO` " +"module has been turned into a class in the :mod:`io` module." +msgstr "" + +#: ../../whatsnew/3.0.rst:602 +msgid "" +"Some related modules have been grouped into packages, and usually the " +"submodule names have been simplified. The resulting new packages are:" +msgstr "一些有关联的模块已被组织为包,通常其子模块名也得到了简化。 这样产生的新包有:" + +#: ../../whatsnew/3.0.rst:606 +msgid "" +":mod:`dbm` (:mod:`anydbm`, :mod:`dbhash`, :mod:`dbm`, :mod:`dumbdbm`, " +":mod:`gdbm`, :mod:`whichdb`)." +msgstr "" + +#: ../../whatsnew/3.0.rst:609 +msgid ":mod:`html` (:mod:`HTMLParser`, :mod:`htmlentitydefs`)." +msgstr "" + +#: ../../whatsnew/3.0.rst:611 +msgid "" +":mod:`http` (:mod:`httplib`, :mod:`BaseHTTPServer`, :mod:`CGIHTTPServer`, " +":mod:`SimpleHTTPServer`, :mod:`Cookie`, :mod:`cookielib`)." +msgstr "" + +#: ../../whatsnew/3.0.rst:615 +msgid "" +":mod:`tkinter` (all :mod:`Tkinter`-related modules except :mod:`turtle`). " +"The target audience of :mod:`turtle` doesn't really care about " +":mod:`tkinter`. Also note that as of Python 2.6, the functionality of " +":mod:`turtle` has been greatly enhanced." +msgstr "" + +#: ../../whatsnew/3.0.rst:620 +msgid "" +":mod:`urllib` (:mod:`urllib`, :mod:`urllib2`, :mod:`urlparse`, " +":mod:`robotparse`)." +msgstr "" + +#: ../../whatsnew/3.0.rst:623 +msgid "" +":mod:`xmlrpc` (:mod:`xmlrpclib`, :mod:`DocXMLRPCServer`, " +":mod:`SimpleXMLRPCServer`)." +msgstr "" + +#: ../../whatsnew/3.0.rst:626 +msgid "" +"Some other changes to standard library modules, not covered by :pep:`3108`:" +msgstr "其他一些针对标准库模块的改变,未被 :pep:`3108` 覆盖:" + +#: ../../whatsnew/3.0.rst:629 +msgid "Killed :mod:`sets`. Use the built-in :func:`set` class." +msgstr "" + +#: ../../whatsnew/3.0.rst:631 +msgid "" +"Cleanup of the :mod:`sys` module: removed :func:`sys.exitfunc`, " +":func:`sys.exc_clear`, :data:`sys.exc_type`, :data:`sys.exc_value`, " +":data:`sys.exc_traceback`. (Note that :data:`sys.last_type` etc. remain.)" +msgstr "" + +#: ../../whatsnew/3.0.rst:636 +msgid "" +"Cleanup of the :class:`array.array` type: the :meth:`read` and :meth:`write`" +" methods are gone; use :meth:`fromfile` and :meth:`tofile` instead. Also, " +"the ``'c'`` typecode for array is gone -- use either ``'b'`` for bytes or " +"``'u'`` for Unicode characters." +msgstr "" + +#: ../../whatsnew/3.0.rst:642 +msgid "" +"Cleanup of the :mod:`operator` module: removed :func:`sequenceIncludes` and " +":func:`isCallable`." +msgstr "" + +#: ../../whatsnew/3.0.rst:645 +msgid "" +"Cleanup of the :mod:`thread` module: :func:`acquire_lock` and " +":func:`release_lock` are gone; use :func:`acquire` and :func:`release` " +"instead." +msgstr "" + +#: ../../whatsnew/3.0.rst:649 +msgid "" +"Cleanup of the :mod:`random` module: removed the :func:`jumpahead` API." +msgstr "" + +#: ../../whatsnew/3.0.rst:651 +msgid "The :mod:`new` module is gone." +msgstr "" + +#: ../../whatsnew/3.0.rst:653 +msgid "" +"The functions :func:`os.tmpnam`, :func:`os.tempnam` and :func:`os.tmpfile` " +"have been removed in favor of the :mod:`tempfile` module." +msgstr "" + +#: ../../whatsnew/3.0.rst:657 +msgid "" +"The :mod:`tokenize` module has been changed to work with bytes. The main " +"entry point is now :func:`tokenize.tokenize`, instead of generate_tokens." +msgstr "" +":mod:`tokenize` 模块已被修改以适用于字节串。 主入口点现在是 :func:`tokenize.tokenize`,而不是 " +"generate_tokens。" + +#: ../../whatsnew/3.0.rst:661 +msgid "" +":data:`string.letters` and its friends (:data:`string.lowercase` and " +":data:`string.uppercase`) are gone. Use :data:`string.ascii_letters` etc. " +"instead. (The reason for the removal is that :data:`string.letters` and " +"friends had locale-specific behavior, which is a bad idea for such " +"attractively-named global \"constants\".)" +msgstr "" + +#: ../../whatsnew/3.0.rst:668 +msgid "" +"Renamed module :mod:`__builtin__` to :mod:`builtins` (removing the " +"underscores, adding an 's'). The :data:`__builtins__` variable found in " +"most global namespaces is unchanged. To modify a builtin, you should use " +":mod:`builtins`, not :data:`__builtins__`!" +msgstr "" + +#: ../../whatsnew/3.0.rst:675 +msgid ":pep:`3101`: A New Approach To String Formatting" +msgstr ":pep:`3101`: 字符串格式化的新方式" + +#: ../../whatsnew/3.0.rst:677 +msgid "" +"A new system for built-in string formatting operations replaces the ``%`` " +"string formatting operator. (However, the ``%`` operator is still " +"supported; it will be deprecated in Python 3.1 and removed from the " +"language at some later time.) Read :pep:`3101` for the full scoop." +msgstr "" +"一种针对内置字符串格式化操作的新系统替代了 ``%`` 字符串格式化运算符。 (不过,``%`` 运算符仍然受到支持;它将在 Python 3.1 " +"中被弃用并在今后某一时刻从语言特性中移除。) 请参阅 :pep:`3101` 了解详情。" + +#: ../../whatsnew/3.0.rst:685 +msgid "Changes To Exceptions" +msgstr "对异常的修改" + +#: ../../whatsnew/3.0.rst:687 +msgid "" +"The APIs for raising and catching exception have been cleaned up and new " +"powerful features added:" +msgstr "用于引发和捕获异常的 API 已经过清理并增加了强大的新特性:" + +#: ../../whatsnew/3.0.rst:690 +msgid "" +":pep:`352`: All exceptions must be derived (directly or indirectly) from " +":exc:`BaseException`. This is the root of the exception hierarchy. This is" +" not new as a recommendation, but the *requirement* to inherit from " +":exc:`BaseException` is new. (Python 2.6 still allowed classic classes to " +"be raised, and placed no restriction on what you can catch.) As a " +"consequence, string exceptions are finally truly and utterly dead." +msgstr "" +":pep:`352`: 所有异常都必须(直接或间接地)派生自 :exc:`BaseException`。 这是异常层级结构的根对象。 " +"作为推荐方式这并不是新的变化,但 *必须* 从 :exc:`BaseException` 继承是新的变化。 (Python 2.6 " +"仍然允许引发经典类,并且不限制你能捕获的异常。) 作为此变化的结果,字符串异常终于真正彻底地死亡了。" + +#: ../../whatsnew/3.0.rst:698 +msgid "" +"Almost all exceptions should actually derive from :exc:`Exception`; " +":exc:`BaseException` should only be used as a base class for exceptions that" +" should only be handled at the top level, such as :exc:`SystemExit` or " +":exc:`KeyboardInterrupt`. The recommended idiom for handling all exceptions" +" except for this latter category is to use :keyword:`except` " +":exc:`Exception`." +msgstr "" +"几乎所有异常实际上都应当派生自 :exc:`Exception`;:exc:`BaseException` " +"仅应当被用作那些仅应当在最高层级中处理的异常的基类,如 :exc:`SystemExit` 或 :exc:`KeyboardInterrupt`。 " +"处理除了后面这一类之外的所有异常的推荐写法是使用 :keyword:`except` :exc:`Exception`。" + +#: ../../whatsnew/3.0.rst:705 +msgid ":exc:`StandardError` was removed." +msgstr "" + +#: ../../whatsnew/3.0.rst:707 +msgid "" +"Exceptions no longer behave as sequences. Use the :attr:`args` attribute " +"instead." +msgstr "" + +#: ../../whatsnew/3.0.rst:710 +msgid "" +":pep:`3109`: Raising exceptions. You must now use :samp:`raise " +"{Exception}({args})` instead of :samp:`raise {Exception}, {args}`. " +"Additionally, you can no longer explicitly specify a traceback; instead, if " +"you *have* to do this, you can assign directly to the :attr:`__traceback__` " +"attribute (see below)." +msgstr "" + +#: ../../whatsnew/3.0.rst:716 +msgid "" +":pep:`3110`: Catching exceptions. You must now use :samp:`except " +"{SomeException} as {variable}` instead of :samp:`except {SomeException}, " +"{variable}`. Moreover, the *variable* is explicitly deleted when the " +":keyword:`except` block is left." +msgstr "" +":pep:`3110`: 捕获异常。 你现在必须使用 :samp:`except {SomeException} as {variable}` 而不是 " +":samp:`except {SomeException}, {variable}`。 此外,*variable* 会在离开 " +":keyword:`except` 代码块时被显式地删除。" + +#: ../../whatsnew/3.0.rst:722 +msgid "" +":pep:`3134`: Exception chaining. There are two cases: implicit chaining and" +" explicit chaining. Implicit chaining happens when an exception is raised " +"in an :keyword:`except` or :keyword:`finally` handler block. This usually " +"happens due to a bug in the handler block; we call this a *secondary* " +"exception. In this case, the original exception (that was being handled) is" +" saved as the :attr:`__context__` attribute of the secondary exception. " +"Explicit chaining is invoked with this syntax::" +msgstr "" + +#: ../../whatsnew/3.0.rst:733 +msgid "" +"(where *primary_exception* is any expression that produces an exception " +"object, probably an exception that was previously caught). In this case, the" +" primary exception is stored on the :attr:`__cause__` attribute of the " +"secondary exception. The traceback printed when an unhandled exception " +"occurs walks the chain of :attr:`__cause__` and :attr:`__context__` " +"attributes and prints a separate traceback for each component of the chain, " +"with the primary exception at the top. (Java users may recognize this " +"behavior.)" +msgstr "" + +#: ../../whatsnew/3.0.rst:742 +msgid "" +":pep:`3134`: Exception objects now store their traceback as the " +":attr:`__traceback__` attribute. This means that an exception object now " +"contains all the information pertaining to an exception, and there are fewer" +" reasons to use :func:`sys.exc_info` (though the latter is not removed)." +msgstr "" + +#: ../../whatsnew/3.0.rst:748 +msgid "" +"A few exception messages are improved when Windows fails to load an " +"extension module. For example, ``error code 193`` is now ``%1 is not a " +"valid Win32 application``. Strings now deal with non-English locales." +msgstr "" +"一些提示 Windows 载入扩展模块失败的异常消息得到了改进。 例如,``error code 193`` 现在是 ``%1 is not a " +"valid Win32 application``。 字符串现在可处理非英语的语言区域。" + +#: ../../whatsnew/3.0.rst:755 +msgid "Miscellaneous Other Changes" +msgstr "其他杂项修改" + +#: ../../whatsnew/3.0.rst:758 +msgid "Operators And Special Methods" +msgstr "运算符与特殊方法" + +#: ../../whatsnew/3.0.rst:760 +msgid "" +"``!=`` now returns the opposite of ``==``, unless ``==`` returns " +":data:`NotImplemented`." +msgstr "现在 ``!=`` 将返回与 ``==`` 相反的结果,除非 ``==`` 是返回 :data:`NotImplemented`。" + +#: ../../whatsnew/3.0.rst:763 +msgid "" +"The concept of \"unbound methods\" has been removed from the language. When " +"referencing a method as a class attribute, you now get a plain function " +"object." +msgstr "“未绑定方法”的概念已从语言中移除。 现在当把一个方法作为类属性来引用时,你将得到一个基本函数对象。" + +#: ../../whatsnew/3.0.rst:767 +msgid "" +":meth:`__getslice__`, :meth:`__setslice__` and :meth:`__delslice__` were " +"killed. The syntax ``a[i:j]`` now translates to ``a.__getitem__(slice(i, " +"j))`` (or :meth:`__setitem__` or :meth:`__delitem__`, when used as an " +"assignment or deletion target, respectively)." +msgstr "" + +#: ../../whatsnew/3.0.rst:773 +msgid "" +":pep:`3114`: the standard :meth:`next` method has been renamed to " +":meth:`~iterator.__next__`." +msgstr ":pep:`3114`: 标准的 :meth:`next` 方法已被重命名为 :meth:`~iterator.__next__`。" + +#: ../../whatsnew/3.0.rst:776 +msgid "" +"The :meth:`__oct__` and :meth:`__hex__` special methods are removed -- " +":func:`oct` and :func:`hex` use :meth:`__index__` now to convert the " +"argument to an integer." +msgstr "" + +#: ../../whatsnew/3.0.rst:780 +msgid "Removed support for :attr:`__members__` and :attr:`__methods__`." +msgstr "" + +#: ../../whatsnew/3.0.rst:782 +msgid "" +"The function attributes named :attr:`func_X` have been renamed to use the " +":data:`__X__` form, freeing up these names in the function attribute " +"namespace for user-defined attributes. To wit, :attr:`func_closure`, " +":attr:`func_code`, :attr:`func_defaults`, :attr:`func_dict`, " +":attr:`func_doc`, :attr:`func_globals`, :attr:`func_name` were renamed to " +":attr:`__closure__`, :attr:`__code__`, :attr:`__defaults__`, " +":attr:`~object.__dict__`, :attr:`__doc__`, :attr:`__globals__`, " +":attr:`~definition.__name__`, respectively." +msgstr "" + +#: ../../whatsnew/3.0.rst:792 +msgid ":meth:`__nonzero__` is now :meth:`__bool__`." +msgstr "" + +#: ../../whatsnew/3.0.rst:795 +msgid "Builtins" +msgstr "内置对象" + +#: ../../whatsnew/3.0.rst:797 +msgid "" +":pep:`3135`: New :func:`super`. You can now invoke :func:`super` without " +"arguments and (assuming this is in a regular instance method defined inside " +"a :keyword:`class` statement) the right class and instance will " +"automatically be chosen. With arguments, the behavior of :func:`super` is " +"unchanged." +msgstr "" +":pep:`3135`: 新的 :func:`super`。 现在你可以不带参数地唤起 :func:`super` 这样(假定这发生在定义于 " +":keyword:`class` 语句内部的常规实例方法中)将会自动选择正确的类和实例。 附带参数时,:func:`super` 的行为保持不变。" + +#: ../../whatsnew/3.0.rst:803 +msgid "" +":pep:`3111`: :func:`raw_input` was renamed to :func:`input`. That is, the " +"new :func:`input` function reads a line from :data:`sys.stdin` and returns " +"it with the trailing newline stripped. It raises :exc:`EOFError` if the " +"input is terminated prematurely. To get the old behavior of :func:`input`, " +"use ``eval(input())``." +msgstr "" + +#: ../../whatsnew/3.0.rst:809 +msgid "" +"A new built-in function :func:`next` was added to call the " +":meth:`~iterator.__next__` method on an object." +msgstr "新增内置函数 :func:`next` 用于在对象上调用 :meth:`~iterator.__next__` 方法。" + +#: ../../whatsnew/3.0.rst:812 +msgid "" +"The :func:`round` function rounding strategy and return type have changed. " +"Exact halfway cases are now rounded to the nearest even result instead of " +"away from zero. (For example, ``round(2.5)`` now returns ``2`` rather than " +"``3``.) ``round(x[, n])`` now delegates to ``x.__round__([n])`` instead of " +"always returning a float. It generally returns an integer when called with " +"a single argument and a value of the same type as ``x`` when called with two" +" arguments." +msgstr "" +":func:`round` 函数的舍入策略和返回类型已有改变。 对于两边差值相同的情况现在将会舍入到最接近的偶数结果而不是远离零值的结果。 " +"(例如,``round(2.5)`` 现在将返回 ``2`` 而不是 ``3``。) 现在 ``round(x[, n])`` 将委托给 " +"``x.__round__([n])`` 而不是始终返回一个浮点数。 它通常会在附带一个参数调用时返回整数而在附带两个参数调用时返回与 ``x`` " +"相同类型的值。" + +#: ../../whatsnew/3.0.rst:821 +msgid "Moved :func:`intern` to :func:`sys.intern`." +msgstr "" + +#: ../../whatsnew/3.0.rst:823 +msgid "" +"Removed: :func:`apply`. Instead of ``apply(f, args)`` use ``f(*args)``." +msgstr "" + +#: ../../whatsnew/3.0.rst:826 +msgid "" +"Removed :func:`callable`. Instead of ``callable(f)`` you can use " +"``isinstance(f, collections.Callable)``. The :func:`operator.isCallable` " +"function is also gone." +msgstr "" + +#: ../../whatsnew/3.0.rst:830 +msgid "" +"Removed :func:`coerce`. This function no longer serves a purpose now that " +"classic classes are gone." +msgstr "" + +#: ../../whatsnew/3.0.rst:833 +msgid "" +"Removed :func:`execfile`. Instead of ``execfile(fn)`` use " +"``exec(open(fn).read())``." +msgstr "" + +#: ../../whatsnew/3.0.rst:836 +msgid "" +"Removed the :class:`file` type. Use :func:`open`. There are now several " +"different kinds of streams that open can return in the :mod:`io` module." +msgstr "" + +#: ../../whatsnew/3.0.rst:839 +msgid "" +"Removed :func:`reduce`. Use :func:`functools.reduce` if you really need it;" +" however, 99 percent of the time an explicit :keyword:`for` loop is more " +"readable." +msgstr "" + +#: ../../whatsnew/3.0.rst:843 +msgid "Removed :func:`reload`. Use :func:`imp.reload`." +msgstr "" + +#: ../../whatsnew/3.0.rst:845 +msgid "" +"Removed. :meth:`dict.has_key` -- use the :keyword:`in` operator instead." +msgstr "" + +#: ../../whatsnew/3.0.rst:852 +msgid "Build and C API Changes" +msgstr "构建和 C API 的改变" + +#: ../../whatsnew/3.0.rst:854 +msgid "" +"Due to time constraints, here is a *very* incomplete list of changes to the " +"C API." +msgstr "由于时间约束,下面 C API 的变化列表 *非常* 不完整。" + +#: ../../whatsnew/3.0.rst:857 +msgid "" +"Support for several platforms was dropped, including but not limited to Mac " +"OS 9, BeOS, RISCOS, Irix, and Tru64." +msgstr "已放弃对某些平台的支持,包括但不限于 Mac OS 9, BeOS, RISCOS, Irix 和 Tru64。" + +#: ../../whatsnew/3.0.rst:860 +msgid ":pep:`3118`: New Buffer API." +msgstr ":pep:`3118`: 新的缓冲区 API。" + +#: ../../whatsnew/3.0.rst:862 +msgid ":pep:`3121`: Extension Module Initialization & Finalization." +msgstr ":pep:`3121`: 扩展模块初始化与最终化。" + +#: ../../whatsnew/3.0.rst:864 +msgid ":pep:`3123`: Making :c:macro:`PyObject_HEAD` conform to standard C." +msgstr ":pep:`3123`: 使 :c:macro:`PyObject_HEAD` 与标准 C 一致。" + +#: ../../whatsnew/3.0.rst:866 +msgid "No more C API support for restricted execution." +msgstr "已去除对受限执行的 C API 支持。" + +#: ../../whatsnew/3.0.rst:868 +msgid "" +":c:func:`PyNumber_Coerce`, :c:func:`PyNumber_CoerceEx`, " +":c:func:`PyMember_Get`, and :c:func:`PyMember_Set` C APIs are removed." +msgstr "" +":c:func:`PyNumber_Coerce`, :c:func:`PyNumber_CoerceEx`, " +":c:func:`PyMember_Get`, and :c:func:`PyMember_Set` C API 已被移除。" + +#: ../../whatsnew/3.0.rst:871 +msgid "" +"New C API :c:func:`PyImport_ImportModuleNoBlock`, works like " +":c:func:`PyImport_ImportModule` but won't block on the import lock " +"(returning an error instead)." +msgstr "" +"新的 C API :c:func:`PyImport_ImportModuleNoBlock`,类似于 " +":c:func:`PyImport_ImportModule` 但不会因导入锁而阻塞(改为返回错误)。" + +#: ../../whatsnew/3.0.rst:875 +msgid "" +"Renamed the boolean conversion C-level slot and method: ``nb_nonzero`` is " +"now ``nb_bool``." +msgstr "重命名布尔转换的 C 层级槽位和方法: ``nb_nonzero`` 现在改为 ``nb_bool``。" + +#: ../../whatsnew/3.0.rst:878 +msgid "" +"Removed :c:macro:`METH_OLDARGS` and :c:macro:`WITH_CYCLE_GC` from the C API." +msgstr "从 C API 中移除 :c:macro:`METH_OLDARGS` 和 :c:macro:`WITH_CYCLE_GC`。" + +#: ../../whatsnew/3.0.rst:884 +msgid "Performance" +msgstr "性能" + +#: ../../whatsnew/3.0.rst:886 +msgid "" +"The net result of the 3.0 generalizations is that Python 3.0 runs the " +"pystone benchmark around 10% slower than Python 2.5. Most likely the " +"biggest cause is the removal of special-casing for small integers. There's " +"room for improvement, but it will happen after 3.0 is released!" +msgstr "" +"综合而言 3.0 的改变使得 Python 3.0 运行 pystone 基准测试的速度比 Python 2.5 慢了约 10%。 " +"其中最大的原因可能是移除了针对小整数的特别场景的处理。 虽然存在改进空间,但这将在 3.0 发布之后再进行!" + +#: ../../whatsnew/3.0.rst:896 +msgid "Porting To Python 3.0" +msgstr "移植到 Python 3.0" + +#: ../../whatsnew/3.0.rst:898 +msgid "" +"For porting existing Python 2.5 or 2.6 source code to Python 3.0, the best " +"strategy is the following:" +msgstr "对于将现有 Python 2.5 或 2.6 源代码移植到 Python 3.0,最佳的策略如下:" + +#: ../../whatsnew/3.0.rst:901 +msgid "(Prerequisite:) Start with excellent test coverage." +msgstr "(必要前提:)启动良好的测试覆盖。" + +#: ../../whatsnew/3.0.rst:903 +msgid "" +"Port to Python 2.6. This should be no more work than the average port from " +"Python 2.x to Python 2.(x+1). Make sure all your tests pass." +msgstr "" +"移植到 Python 2.6。 这应该不会比从 Python 2.x 到 Python 2.(x+1) 的正常移植更麻烦。 请确保所有的测试均能通过。" + +#: ../../whatsnew/3.0.rst:907 +msgid "" +"(Still using 2.6:) Turn on the :option:`!-3` command line switch. This " +"enables warnings about features that will be removed (or change) in 3.0. " +"Run your test suite again, and fix code that you get warnings about until " +"there are no warnings left, and all your tests still pass." +msgstr "" +"(仍然使用 2.6:) 打开 :option:`!-3` 命令行开关。 这将启用针对将在 3.0 中被移除(或修改)的特性的警告。 " +"再次运行你的测试套件,并修复你收到相关警告的代码直至不再有任何警告,并且所有的测试仍然能通过。" + +#: ../../whatsnew/3.0.rst:913 +msgid "" +"Run the ``2to3`` source-to-source translator over your source code tree. " +"(See :ref:`2to3-reference` for more on this tool.) Run the result of the " +"translation under Python 3.0. Manually fix up any remaining issues, fixing " +"problems until all tests pass again." +msgstr "" + +#: ../../whatsnew/3.0.rst:918 +msgid "" +"It is not recommended to try to write source code that runs unchanged under " +"both Python 2.6 and 3.0; you'd have to use a very contorted coding style, " +"e.g. avoiding ``print`` statements, metaclasses, and much more. If you are " +"maintaining a library that needs to support both Python 2.6 and Python 3.0, " +"the best approach is to modify step 3 above by editing the 2.6 version of " +"the source code and running the ``2to3`` translator again, rather than " +"editing the 3.0 version of the source code." +msgstr "" +"不建议尝试编写可不加修改地同时运行于 Python 2.6 和 3.0 的源代码;你将不得不使用一种非常扭曲的代码风格,例如避免 ``print`` " +"语句、元类和许多其他特性。 如果你正在维护需要同时支持 Python 2.6 和 Python 3.0 的库,最佳做法是将上述的步骤 3 " +"修改为编辑源代码的 2.6 版本并再次运行 ``2to3`` 翻译器,而不是修改源代码的 3.0 版本。" + +#: ../../whatsnew/3.0.rst:927 +msgid "" +"For porting C extensions to Python 3.0, please see :ref:`cporting-howto`." +msgstr "有关如何将 C 扩展移植到 Python 3.0,请参阅 :ref:`cporting-howto`。" diff --git a/whatsnew/3.1.po b/whatsnew/3.1.po new file mode 100644 index 000000000..0f7bfc0ed --- /dev/null +++ b/whatsnew/3.1.po @@ -0,0 +1,788 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) 2001-2024, Python Software Foundation +# This file is distributed under the same license as the Python package. +# FIRST AUTHOR , YEAR. +# +# Translators: +# Shengjing Zhu , 2018 +# Fei Yin , 2018 +# ppcfish , 2019 +# Rafael Fontenelle , 2023 +# Freesand Leo , 2024 +# +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: Python 3.9\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2024-04-26 21:29+0000\n" +"PO-Revision-Date: 2017-02-16 23:44+0000\n" +"Last-Translator: Freesand Leo , 2024\n" +"Language-Team: Chinese (China) (https://app.transifex.com/python-doc/teams/5390/zh_CN/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: zh_CN\n" +"Plural-Forms: nplurals=1; plural=0;\n" + +#: ../../whatsnew/3.1.rst:3 +msgid "What's New In Python 3.1" +msgstr "Python 3.1 有什么新变化" + +#: ../../whatsnew/3.1.rst:0 +msgid "Author" +msgstr "作者" + +#: ../../whatsnew/3.1.rst:5 +msgid "Raymond Hettinger" +msgstr "Raymond Hettinger(译者:wh2099 at outlook dot com)" + +#: ../../whatsnew/3.1.rst:49 +msgid "This article explains the new features in Python 3.1, compared to 3.0." +msgstr "" + +#: ../../whatsnew/3.1.rst:53 +msgid "PEP 372: Ordered Dictionaries" +msgstr "PEP 372: 有序字典" + +#: ../../whatsnew/3.1.rst:55 +msgid "" +"Regular Python dictionaries iterate over key/value pairs in arbitrary order." +" Over the years, a number of authors have written alternative " +"implementations that remember the order that the keys were originally " +"inserted. Based on the experiences from those implementations, a new " +":class:`collections.OrderedDict` class has been introduced." +msgstr "" +"常规的 Python 字典会以任意顺序迭代键/值对。 多年以来,有好几位作者编写了可以记住键的初始插入顺序的替代实现。 " +"基于这些实现的经验,现在引入了新的 :class:`collections.OrderedDict` 类。" + +#: ../../whatsnew/3.1.rst:61 +msgid "" +"The OrderedDict API is substantially the same as regular dictionaries but " +"will iterate over keys and values in a guaranteed order depending on when a " +"key was first inserted. If a new entry overwrites an existing entry, the " +"original insertion position is left unchanged. Deleting an entry and " +"reinserting it will move it to the end." +msgstr "" +"OrderedDict API 与常规字典基本相同,但将根据每个键首次插入的时间以有保证的顺序来迭代键和值。 " +"如果一个新条目覆盖了现有的条目,则原始插入位置会保持不变。 删除条目并重新插入则会将其移至末尾。" + +#: ../../whatsnew/3.1.rst:67 +msgid "" +"The standard library now supports use of ordered dictionaries in several " +"modules. The :mod:`configparser` module uses them by default. This lets " +"configuration files be read, modified, and then written back in their " +"original order. The *_asdict()* method for :func:`collections.namedtuple` " +"now returns an ordered dictionary with the values appearing in the same " +"order as the underlying tuple indices. The :mod:`json` module is being " +"built-out with an *object_pairs_hook* to allow OrderedDicts to be built by " +"the decoder. Support was also added for third-party tools like `PyYAML " +"`_." +msgstr "" + +#: ../../whatsnew/3.1.rst:79 +msgid ":pep:`372` - Ordered Dictionaries" +msgstr ":pep:`372` - 有序字典" + +#: ../../whatsnew/3.1.rst:79 +msgid "" +"PEP written by Armin Ronacher and Raymond Hettinger. Implementation written" +" by Raymond Hettinger." +msgstr "PEP 由 Armin Ronacher 和 Raymond Hettinger 撰写,由 Raymond Hettinger 实现。" + +#: ../../whatsnew/3.1.rst:84 +msgid "PEP 378: Format Specifier for Thousands Separator" +msgstr "PEP 378: 千位分隔符的格式说明符" + +#: ../../whatsnew/3.1.rst:86 +msgid "" +"The built-in :func:`format` function and the :meth:`str.format` method use a" +" mini-language that now includes a simple, non-locale aware way to format a " +"number with a thousands separator. That provides a way to humanize a " +"program's output, improving its professional appearance and readability::" +msgstr "" +"内置的 :func:`format` 函数和 :meth:`str.format` " +"方法使用的迷你语言现在包括一种以千位分隔符格式化数字的简单、不可感知语言区域的方式。 这提供了更为人性化的程序输出,提升了外观专业程度与可读性::" + +#: ../../whatsnew/3.1.rst:100 +msgid "" +"The supported types are :class:`int`, :class:`float`, :class:`complex` and " +":class:`decimal.Decimal`." +msgstr "" +"支持的类型有 :class:`int`, :class:`float`, :class:`complex` 和 " +":class:`decimal.Decimal`。" + +#: ../../whatsnew/3.1.rst:103 +msgid "" +"Discussions are underway about how to specify alternative separators like " +"dots, spaces, apostrophes, or underscores. Locale-aware applications should" +" use the existing *n* format specifier which already has some support for " +"thousands separators." +msgstr "" +"目前还在讨论要如何指定替代分隔符如点号、空格、撇号或下划线等。 可感知语言区域的应用程序应当使用现有的支持千位分隔符的 *n* 格式说明符。" + +#: ../../whatsnew/3.1.rst:111 +msgid ":pep:`378` - Format Specifier for Thousands Separator" +msgstr ":pep:`378` - 千位分隔符的格式说明符" + +#: ../../whatsnew/3.1.rst:111 +msgid "" +"PEP written by Raymond Hettinger and implemented by Eric Smith and Mark " +"Dickinson." +msgstr "PEP 由 Raymond Hettinger 撰写,并由 Eric Smith 和 Mark Dickinson 实现" + +#: ../../whatsnew/3.1.rst:116 +msgid "Other Language Changes" +msgstr "其他语言特性修改" + +#: ../../whatsnew/3.1.rst:118 +msgid "Some smaller changes made to the core Python language are:" +msgstr "对Python 语言核心进行的小改动:" + +#: ../../whatsnew/3.1.rst:120 +msgid "" +"Directories and zip archives containing a :file:`__main__.py` file can now " +"be executed directly by passing their name to the interpreter. The " +"directory/zipfile is automatically inserted as the first entry in sys.path." +" (Suggestion and initial patch by Andy Chu; revised patch by Phillip J. Eby" +" and Nick Coghlan; :issue:`1739468`.)" +msgstr "" +"包括 :file:`__main__.py` 文件的目录和 zip 归档文件现在可通过将其名称传给解释器来直接执行。 这样的目录/zip 文件会自动作为" +" sys.path 的第一个条目插入。 (由 Andy Chu 提议并编写初始补丁;由 Phillip J. Eby 和 Nick Coghlan " +"改进补丁;:issue:`1739468`。)" + +#: ../../whatsnew/3.1.rst:126 +msgid "" +"The :func:`int` type gained a ``bit_length`` method that returns the number " +"of bits necessary to represent its argument in binary::" +msgstr ":func:`int` 类型增加了一个 ``bit_length`` 方法用来返回以二进制代表其参数值所需的比特位数量::" + +#: ../../whatsnew/3.1.rst:140 +msgid "" +"(Contributed by Fredrik Johansson, Victor Stinner, Raymond Hettinger, and " +"Mark Dickinson; :issue:`3439`.)" +msgstr "" +"(由 Fredrik Johansson, Victor Stinner, Raymond Hettinger 和 Mark Dickinson 在 " +":issue:`3439` 中贡献。)" + +#: ../../whatsnew/3.1.rst:143 +msgid "" +"The fields in :func:`format` strings can now be automatically numbered::" +msgstr ":func:`format` 字符串中的字段现在可被自动编号::" + +#: ../../whatsnew/3.1.rst:149 +msgid "" +"Formerly, the string would have required numbered fields such as: ``'Sir {0}" +" of {1}'``." +msgstr "之前,字符串应当具有所需的编号字段例如: ``'Sir {0} of {1}'``。" + +#: ../../whatsnew/3.1.rst:152 +msgid "(Contributed by Eric Smith; :issue:`5237`.)" +msgstr "(由 Eric Smith在 :issue:`5237` 中贡献)" + +#: ../../whatsnew/3.1.rst:154 +msgid "" +"The :func:`string.maketrans` function is deprecated and is replaced by new " +"static methods, :meth:`bytes.maketrans` and :meth:`bytearray.maketrans`. " +"This change solves the confusion around which types were supported by the " +":mod:`string` module. Now, :class:`str`, :class:`bytes`, and " +":class:`bytearray` each have their own **maketrans** and **translate** " +"methods with intermediate translation tables of the appropriate type." +msgstr "" +":func:`string.maketrans` 函数已被弃用并由新的静态方法 :meth:`bytes.maketrans` 和 " +":meth:`bytearray.maketrans` 取代。 这项修改解决了对于 :mod:`string` 模块支持类型的困惑。 " +"现在,:class:`str`, :class:`bytes` 和 :class:`bytearray` 分别拥有它们自己的附带适当类型的中间转写表的 " +"**maketrans** 和 **translate** 方法。" + +#: ../../whatsnew/3.1.rst:161 +msgid "(Contributed by Georg Brandl; :issue:`5675`.)" +msgstr "(由Georg Brandl在 :issue:`5675` 中贡献)" + +#: ../../whatsnew/3.1.rst:163 +msgid "" +"The syntax of the :keyword:`with` statement now allows multiple context " +"managers in a single statement::" +msgstr "The syntax of the :keyword:`with` 语句的语法现在允许单个语句中存在多个上下文管理器::" + +#: ../../whatsnew/3.1.rst:171 +msgid "" +"With the new syntax, the :func:`contextlib.nested` function is no longer " +"needed and is now deprecated." +msgstr "有了这个新语法,:func:`contextlib.nested` 函数已不再必要因而现在已被弃用。" + +#: ../../whatsnew/3.1.rst:174 +msgid "" +"(Contributed by Georg Brandl and Mattias Brändström; `appspot issue 53094 " +"`_.)" +msgstr "" +"(由 Georg Brandl 和 Mattias Brändström 贡献; `appspot issue 53094 " +"`_。)" + +#: ../../whatsnew/3.1.rst:177 +msgid "" +"``round(x, n)`` now returns an integer if *x* is an integer. Previously it " +"returned a float::" +msgstr "现在 ``round(x, n)`` 当 *x* 为整数时将返回整数。 之前是返回浮点数::" + +#: ../../whatsnew/3.1.rst:183 +msgid "(Contributed by Mark Dickinson; :issue:`4707`.)" +msgstr "(由 Mark Dickinson在 :issue:`4707` 贡献)" + +#: ../../whatsnew/3.1.rst:185 +msgid "" +"Python now uses David Gay's algorithm for finding the shortest floating " +"point representation that doesn't change its value. This should help " +"mitigate some of the confusion surrounding binary floating point numbers." +msgstr "Python 现在使用 David Gay 的算法来查找不会改变实际值的最短浮点表示形式。 这应当有助于缓解某些对于二进制浮点数的困惑。" + +#: ../../whatsnew/3.1.rst:190 +msgid "" +"The significance is easily seen with a number like ``1.1`` which does not " +"have an exact equivalent in binary floating point. Since there is no exact " +"equivalent, an expression like ``float('1.1')`` evaluates to the nearest " +"representable value which is ``0x1.199999999999ap+0`` in hex or " +"``1.100000000000000088817841970012523233890533447265625`` in decimal. That " +"nearest value was and still is used in subsequent floating point " +"calculations." +msgstr "" +"这项改进的优点对于 ``1.1`` 这样无法用二进制浮点精确表示的数来说是很明显的。 由于没有完全等价的表示,``float('1.1')`` " +"这样的表达式会被求解为最接近的可表示值即十六进制的 ``0x1.199999999999ap+0`` 或十进制的 " +"``1.100000000000000088817841970012523233890533447265625``。 " +"这个最接近的值过去和现在仍然会在后续的浮点运算中被使用。" + +#: ../../whatsnew/3.1.rst:198 +msgid "" +"What is new is how the number gets displayed. Formerly, Python used a " +"simple approach. The value of ``repr(1.1)`` was computed as ``format(1.1, " +"'.17g')`` which evaluated to ``'1.1000000000000001'``. The advantage of " +"using 17 digits was that it relied on IEEE-754 guarantees to assure that " +"``eval(repr(1.1))`` would round-trip exactly to its original value. The " +"disadvantage is that many people found the output to be confusing (mistaking" +" intrinsic limitations of binary floating point representation as being a " +"problem with Python itself)." +msgstr "" +"新的改变针对的是如何显示数字。 在之前,Python 使用了一种简单的方式。 ``repr(1.1)`` 的值会被计算为 ``format(1.1, " +"'.17g')`` 并将被求解为 ``'1.1000000000000001'``。 使用 17 个数位的优点是它将凭借 IEEE-754 标准来确保 " +"``eval(repr(1.1))`` 将恰好被舍入到其原始值。 缺点则是会让许多人感觉这样的输出令人困惑(将二进制浮点表示形式的内在局限性误认为是 " +"Python 本身的问题)。" + +#: ../../whatsnew/3.1.rst:207 +msgid "" +"The new algorithm for ``repr(1.1)`` is smarter and returns ``'1.1'``. " +"Effectively, it searches all equivalent string representations (ones that " +"get stored with the same underlying float value) and returns the shortest " +"representation." +msgstr "" +"用于 ``repr(1.1)`` 的新算法更为智能并将返回 ``'1.1'``。 " +"在实际上,它会搜索所有等价的字符串表示形式(使用相同的下层浮点值进行排序)并返回其中最短的表示形式。" + +#: ../../whatsnew/3.1.rst:212 +msgid "" +"The new algorithm tends to emit cleaner representations when possible, but " +"it does not change the underlying values. So, it is still the case that " +"``1.1 + 2.2 != 3.3`` even though the representations may suggest otherwise." +msgstr "" +"新算法倾向于尽可能放出更为清晰的表示形式,但它并不改变下层的值。 因此仍然会是 ``1.1 + 2.2 != 3.3`` " +"虽然从表示形式上看情况不是这样。" + +#: ../../whatsnew/3.1.rst:216 +msgid "" +"The new algorithm depends on certain features in the underlying floating " +"point implementation. If the required features are not found, the old " +"algorithm will continue to be used. Also, the text pickle protocols assure " +"cross-platform portability by using the old algorithm." +msgstr "" +"这个新算法依赖于下层浮点实现的某些特性。 如果未找到所需的特性,则将继续使用旧算法。 此外,文本 pickle " +"协议也会通过使用旧算法来保证跨平台的可移植性。" + +#: ../../whatsnew/3.1.rst:221 +msgid "(Contributed by Eric Smith and Mark Dickinson; :issue:`1580`)" +msgstr "(由 Eric Smith 和 Mark Dickinson 在 :issue:`1580` 贡献)" + +#: ../../whatsnew/3.1.rst:224 +msgid "New, Improved, and Deprecated Modules" +msgstr "新增,改进和弃用的模块" + +#: ../../whatsnew/3.1.rst:226 +msgid "" +"Added a :class:`collections.Counter` class to support convenient counting of" +" unique items in a sequence or iterable::" +msgstr "增加了一个 :class:`collections.Counter` 类以支持方便地统计一个序列或可迭代对象中的唯一条目数量。::" + +#: ../../whatsnew/3.1.rst:232 +msgid "(Contributed by Raymond Hettinger; :issue:`1696199`.)" +msgstr "(由 Raymond Hettinger 在 :issue:`1696199` 中贡献。)" + +#: ../../whatsnew/3.1.rst:234 +msgid "" +"Added a new module, :mod:`tkinter.ttk` for access to the Tk themed widget " +"set. The basic idea of ttk is to separate, to the extent possible, the code " +"implementing a widget's behavior from the code implementing its appearance." +msgstr "" +"半圆了一个新模块 :mod:`tkinter.ttk` 用于访问带主题的 Tk 部件集。 ttk " +"的基本设计思路,就是尽可能地把实现部件行为的代码与实现其外观的代码分离开来。" + +#: ../../whatsnew/3.1.rst:238 +msgid "(Contributed by Guilherme Polo; :issue:`2983`.)" +msgstr "(由 Guilherme Polo 在 :issue:`2983` 中贡献。)" + +#: ../../whatsnew/3.1.rst:240 +msgid "" +"The :class:`gzip.GzipFile` and :class:`bz2.BZ2File` classes now support the " +"context management protocol::" +msgstr ":class:`gzip.GzipFile` 和 :class:`bz2.BZ2File` 类现在已支持上下文管理协议::" + +#: ../../whatsnew/3.1.rst:247 +msgid "(Contributed by Antoine Pitrou.)" +msgstr "(由 Antoine Pitrou 贡献。)" + +#: ../../whatsnew/3.1.rst:249 +msgid "" +"The :mod:`decimal` module now supports methods for creating a decimal object" +" from a binary :class:`float`. The conversion is exact but can sometimes be" +" surprising::" +msgstr "" +":mod:`decimal` 模块现在支持基于一个二进制 :class:`float` 来创建 decimal 对象。 " +"转换是准确的但有时也会令人吃惊::" + +#: ../../whatsnew/3.1.rst:256 +msgid "" +"The long decimal result shows the actual binary fraction being stored for " +"*1.1*. The fraction has many digits because *1.1* cannot be exactly " +"represented in binary." +msgstr "这个长长的 decimal 结果值显示了 *1.1* 所保存的实际二进制分数。 这个分数有许多位因为 *1.1* 无法用二进制来精确表示。" + +#: ../../whatsnew/3.1.rst:260 +msgid "(Contributed by Raymond Hettinger and Mark Dickinson.)" +msgstr "(由Raymond Hettinger 和 Mark Dickinson贡献。)" + +#: ../../whatsnew/3.1.rst:262 +msgid "" +"The :mod:`itertools` module grew two new functions. The " +":func:`itertools.combinations_with_replacement` function is one of four for " +"generating combinatorics including permutations and Cartesian products. The" +" :func:`itertools.compress` function mimics its namesake from APL. Also, " +"the existing :func:`itertools.count` function now has an optional *step* " +"argument and can accept any type of counting sequence including " +":class:`fractions.Fraction` and :class:`decimal.Decimal`::" +msgstr "" +":mod:`itertools` 模块增加了两个新函数。 :func:`itertools.combinations_with_replacement`" +" 函数是生成组合数学结果包括排列与笛卡尔积的四个函数之一。 :func:`itertools.compress` 函数模仿了 APL 中的同名函数。 " +"此外,现有的 :func:`itertools.count` 函数现在有一个可选的 *step* 参数并可接受任意类型的计数序列包括 " +":class:`fractions.Fraction` 和 :class:`decimal.Decimal`::" + +#: ../../whatsnew/3.1.rst:281 +msgid "(Contributed by Raymond Hettinger.)" +msgstr "(由 Raymond Hettinger 贡献。)" + +#: ../../whatsnew/3.1.rst:283 +msgid "" +":func:`collections.namedtuple` now supports a keyword argument *rename* " +"which lets invalid fieldnames be automatically converted to positional names" +" in the form _0, _1, etc. This is useful when the field names are being " +"created by an external source such as a CSV header, SQL field list, or user " +"input::" +msgstr "" +":func:`collections.namedtuple` 现在支持关键字参数 *rename*,它允许将无效的字段名自动转换为 _0, _1 " +"等形式的位置名称。 这在字段名是由外部源如 CSV 标头、SQL 字段列表或用户输入创建的时候会很有用处::" + +#: ../../whatsnew/3.1.rst:300 +msgid "(Contributed by Raymond Hettinger; :issue:`1818`.)" +msgstr "(由 Raymond Hettinger 在 :issue:`1818` 中贡献。)" + +#: ../../whatsnew/3.1.rst:302 +msgid "" +"The :func:`re.sub`, :func:`re.subn` and :func:`re.split` functions now " +"accept a flags parameter." +msgstr "" +":func:`re.sub`, :func:`re.subn` 和 :func:`re.split` 函数现在可接受一个 flags 形参。" + +#: ../../whatsnew/3.1.rst:305 +msgid "(Contributed by Gregory Smith.)" +msgstr "(由 Gregory Smith 贡献)" + +#: ../../whatsnew/3.1.rst:307 +msgid "" +"The :mod:`logging` module now implements a simple " +":class:`logging.NullHandler` class for applications that are not using " +"logging but are calling library code that does. Setting-up a null handler " +"will suppress spurious warnings such as \"No handlers could be found for " +"logger foo\"::" +msgstr "" +":mod:`logging` 模块现在为不使用 logging 但是调用了使用它的库代码的应用程序实现了一个简单的 " +":class:`logging.NullHandler` 类。 设置一个空处理器将会屏蔽诸如 \"找不到日志记录器 foo 的处理器\" " +"这样的虚假警告::" + +#: ../../whatsnew/3.1.rst:315 +msgid "(Contributed by Vinay Sajip; :issue:`4384`)." +msgstr "(由 Vinay Sajip 在 :issue:`4384` 中贡献。)" + +#: ../../whatsnew/3.1.rst:317 +msgid "" +"The :mod:`runpy` module which supports the ``-m`` command line switch now " +"supports the execution of packages by looking for and executing a " +"``__main__`` submodule when a package name is supplied." +msgstr "" +"支持 ``-m`` 命令行开关的 :mod:`runpy` 模块现在也支持当提供包名称时通过查找并执行 ``__main__`` 子模块来执行包。" + +#: ../../whatsnew/3.1.rst:321 +msgid "(Contributed by Andi Vajda; :issue:`4195`.)" +msgstr "(由 Andi Vajda 在 :issue:`4195` 中贡献。)" + +#: ../../whatsnew/3.1.rst:323 +msgid "" +"The :mod:`pdb` module can now access and display source code loaded via " +":mod:`zipimport` (or any other conformant :pep:`302` loader)." +msgstr "" +":mod:`pdb` 模块现在可以访问并显示通过 :mod:`zipimport` (或其他符合规范的 :pep:`302` 加载器) 加载的源代码。" + +#: ../../whatsnew/3.1.rst:326 +msgid "(Contributed by Alexander Belopolsky; :issue:`4201`.)" +msgstr "(由 Alexander Belopolsky 在 :issue:`4201` 中贡献。)" + +#: ../../whatsnew/3.1.rst:328 +msgid ":class:`functools.partial` objects can now be pickled." +msgstr ":class:`functools.partial` 对象现在可以被封存。" + +#: ../../whatsnew/3.1.rst:330 +msgid "" +"(Suggested by Antoine Pitrou and Jesse Noller. Implemented by Jack " +"Diederich; :issue:`5228`.)" +msgstr "" +"(由 Antoine Pitrou 和 Jesse Noller 提议,由 Jack Diederich 实现; :issue:`5228`。)" + +#: ../../whatsnew/3.1.rst:333 +msgid "" +"Add :mod:`pydoc` help topics for symbols so that ``help('@')`` works as " +"expected in the interactive environment." +msgstr "为符号增加 :mod:`pydoc` 帮助主题以使得在交互环境下 ``help('@')`` 能符合预期的效果。" + +#: ../../whatsnew/3.1.rst:336 +msgid "(Contributed by David Laban; :issue:`4739`.)" +msgstr "(由 David Laban 在 :issue:`4739` 中贡献。)" + +#: ../../whatsnew/3.1.rst:338 +msgid "" +"The :mod:`unittest` module now supports skipping individual tests or classes" +" of tests. And it supports marking a test as an expected failure, a test " +"that is known to be broken, but shouldn't be counted as a failure on a " +"TestResult::" +msgstr "" +":mod:`unittest` 模块现在支持跳过单个测试或测试类。 并且它还支持将一个测试标记为已预期会失败,即已经知道不可用,但不应在 " +"TestResult 上被计为一次失败::" + +#: ../../whatsnew/3.1.rst:353 +msgid "" +"Also, tests for exceptions have been builtout to work with context managers " +"using the :keyword:`with` statement::" +msgstr "此外,还创建了一些针对异常的测试以便与使用 :keyword:`with` 语句的上下文管理器一起工作::" + +#: ../../whatsnew/3.1.rst:360 +msgid "" +"In addition, several new assertion methods were added including " +":func:`assertSetEqual`, :func:`assertDictEqual`, " +":func:`assertDictContainsSubset`, :func:`assertListEqual`, " +":func:`assertTupleEqual`, :func:`assertSequenceEqual`, " +":func:`assertRaisesRegexp`, :func:`assertIsNone`, and " +":func:`assertIsNotNone`." +msgstr "" +"此外,还增加了一些新的断言方法包括 :func:`assertSetEqual`, :func:`assertDictEqual`, " +":func:`assertDictContainsSubset`, :func:`assertListEqual`, " +":func:`assertTupleEqual`, :func:`assertSequenceEqual`, " +":func:`assertRaisesRegexp`, :func:`assertIsNone` 以及 :func:`assertIsNotNone`。" + +#: ../../whatsnew/3.1.rst:367 +msgid "(Contributed by Benjamin Peterson and Antoine Pitrou.)" +msgstr "(由Benjamin Peterson 和 Antoine Pitrou 贡献。)" + +#: ../../whatsnew/3.1.rst:369 +msgid "" +"The :mod:`io` module has three new constants for the :meth:`seek` method " +":data:`SEEK_SET`, :data:`SEEK_CUR`, and :data:`SEEK_END`." +msgstr "" +":mod:`io` 模块新增了三个常量来代表 :meth:`seek` 方法 :data:`SEEK_SET`, :data:`SEEK_CUR` 和" +" :data:`SEEK_END`。" + +#: ../../whatsnew/3.1.rst:372 +msgid "The :attr:`sys.version_info` tuple is now a named tuple::" +msgstr ":attr:`sys.version_info` 元组现在是一个具名元组::" + +#: ../../whatsnew/3.1.rst:377 +msgid "(Contributed by Ross Light; :issue:`4285`.)" +msgstr "(由 Ross Light 在 :issue:`4285` 中贡献。)" + +#: ../../whatsnew/3.1.rst:379 +msgid "The :mod:`nntplib` and :mod:`imaplib` modules now support IPv6." +msgstr ":mod:`nntplib` 和 :mod:`imaplib` 模块现在支持 IPv6。" + +#: ../../whatsnew/3.1.rst:381 +msgid "(Contributed by Derek Morr; :issue:`1655` and :issue:`1664`.)" +msgstr "(由 Derek Morr 在 :issue:`1655` 和 :issue:`1664` 中贡献。)" + +#: ../../whatsnew/3.1.rst:383 +msgid "" +"The :mod:`pickle` module has been adapted for better interoperability with " +"Python 2.x when used with protocol 2 or lower. The reorganization of the " +"standard library changed the formal reference for many objects. For " +"example, ``__builtin__.set`` in Python 2 is called ``builtins.set`` in " +"Python 3. This change confounded efforts to share data between different " +"versions of Python. But now when protocol 2 or lower is selected, the " +"pickler will automatically use the old Python 2 names for both loading and " +"dumping. This remapping is turned-on by default but can be disabled with the" +" *fix_imports* option::" +msgstr "" +"当使用协议 2 或更低的版本时,:mod:`pickle` 模块已被调适以获得与 Python 2.x 更好的互操作性。 " +"标准库的重组改变了对于许多对象的正式引用。 例如,Python 2 中的 ``__builtin__.set`` 在 Python 3 中称为 " +"``builtins.set``。 这一改变使得在不同版本的 Python 之间共享数据的努力陷入混乱。 但是现在当选择协议 2 " +"或更低的版本时,封存器将自动使用旧的 Python 2 名称进行加载和转储。 这样的重映射将默认启用但可以通过 *fix_imports* " +"选项来禁用::" + +#: ../../whatsnew/3.1.rst:399 +msgid "" +"An unfortunate but unavoidable side-effect of this change is that protocol 2" +" pickles produced by Python 3.1 won't be readable with Python 3.0. The " +"latest pickle protocol, protocol 3, should be used when migrating data " +"between Python 3.x implementations, as it doesn't attempt to remain " +"compatible with Python 2.x." +msgstr "" +"这项改变的一个不幸但无可避免的副作用是由 Python 3.1 所产生的协议 2 版本的 pickle 对象对于 Python 3.0 将不可读。 当在" +" Python 3.x 实现之间迁移数据时,应当使用最新的协议 3 版本的 pickle 协议,因为它不会试图与 Python 2.x 保持兼容。" + +#: ../../whatsnew/3.1.rst:405 +msgid "" +"(Contributed by Alexandre Vassalotti and Antoine Pitrou, :issue:`6137`.)" +msgstr "(由 Alexandre Vassalotti 和 Antoine Pitrou 在 :issue:`6137` 中贡献。)" + +#: ../../whatsnew/3.1.rst:407 +msgid "" +"A new module, :mod:`importlib` was added. It provides a complete, portable," +" pure Python reference implementation of the :keyword:`import` statement and" +" its counterpart, the :func:`__import__` function. It represents a " +"substantial step forward in documenting and defining the actions that take " +"place during imports." +msgstr "" +"增加了一个新模块 :mod:`importlib`。 它提供了针对 :keyword:`import` 语句及其对应物 " +":func:`__import__` 函数的完整、可移植的纯 Python 引用实现。 它代表了在记录和定义导入期间所发生的行动中实质性的一步。" + +#: ../../whatsnew/3.1.rst:413 +msgid "(Contributed by Brett Cannon.)" +msgstr "(由 Brett Cannon 贡献。)" + +#: ../../whatsnew/3.1.rst:416 +msgid "Optimizations" +msgstr "性能优化" + +#: ../../whatsnew/3.1.rst:418 +msgid "Major performance enhancements have been added:" +msgstr "已增加的主要性能改善:" + +#: ../../whatsnew/3.1.rst:420 +msgid "" +"The new I/O library (as defined in :pep:`3116`) was mostly written in Python" +" and quickly proved to be a problematic bottleneck in Python 3.0. In Python " +"3.1, the I/O library has been entirely rewritten in C and is 2 to 20 times " +"faster depending on the task at hand. The pure Python version is still " +"available for experimentation purposes through the ``_pyio`` module." +msgstr "" +"新的 I/O 库(如 :pep:`3116` 所定义的)主要是用 Python 编写并很快被证明是 Python 3.0 中的一个问题瓶颈。 在 " +"Python 3.1 中,I/O 库已完全用 C 重写并根据具体任务的不同有 2 到 20 倍的速度提升。 纯 Python 版本仍然可通过 " +"``_pyio`` 模块访问以用于实验性目的。" + +#: ../../whatsnew/3.1.rst:427 +msgid "(Contributed by Amaury Forgeot d'Arc and Antoine Pitrou.)" +msgstr "(由 Amaury Forgeot d'Arc 和 Antoine Pitrou 贡献。)" + +#: ../../whatsnew/3.1.rst:429 +msgid "" +"Added a heuristic so that tuples and dicts containing only untrackable " +"objects are not tracked by the garbage collector. This can reduce the size " +"of collections and therefore the garbage collection overhead on long-running" +" programs, depending on their particular use of datatypes." +msgstr "" +"添加了一个启发式的工具以使仅包含不可追踪对象的元组和字典不会被垃圾回收器所追踪。 " +"这可以减少收集数据的大小从而减少长时间运行的程序的垃圾收集开销,具体取决于它们对类型类型的使用方式。" + +#: ../../whatsnew/3.1.rst:434 +msgid "(Contributed by Antoine Pitrou, :issue:`4688`.)" +msgstr "(由 Antoine Pitrou 在 :issue:`4688` 中贡献。)" + +#: ../../whatsnew/3.1.rst:436 +msgid "" +"Enabling a configure option named ``--with-computed-gotos`` on compilers " +"that support it (notably: gcc, SunPro, icc), the bytecode evaluation loop is" +" compiled with a new dispatch mechanism which gives speedups of up to 20%, " +"depending on the system, the compiler, and the benchmark." +msgstr "" +"通过在受支持的编译器(主要有: gcc, SunPro, icc)上启用名为 ``--with-computed-gotos`` " +"的配置选项,字节码求值循环会使用新的分派机制进行编译,根据系统、编译器和基准测试工具的不同,该机制可获得至多 20% 的速度提升。" + +#: ../../whatsnew/3.1.rst:442 +msgid "" +"(Contributed by Antoine Pitrou along with a number of other participants, " +":issue:`4753`)." +msgstr "(由 Antoine Pitrou 以及其他一些参与者在 :issue:`4753` 中贡献。)" + +#: ../../whatsnew/3.1.rst:445 +msgid "" +"The decoding of UTF-8, UTF-16 and LATIN-1 is now two to four times faster." +msgstr "UTF-8, UTF-16 和 LATIN-1 的解码速度现已提升了二至四倍。" + +#: ../../whatsnew/3.1.rst:448 +msgid "" +"(Contributed by Antoine Pitrou and Amaury Forgeot d'Arc, :issue:`4868`.)" +msgstr "(由 Antoine Pitrou 和 Amaury Forgeot d'Arc 在 :issue:`4868` 中贡献。)" + +#: ../../whatsnew/3.1.rst:450 +msgid "" +"The :mod:`json` module now has a C extension to substantially improve its " +"performance. In addition, the API was modified so that json works only with" +" :class:`str`, not with :class:`bytes`. That change makes the module " +"closely match the `JSON specification `_ which is defined " +"in terms of Unicode." +msgstr "" + +#: ../../whatsnew/3.1.rst:456 +msgid "" +"(Contributed by Bob Ippolito and converted to Py3.1 by Antoine Pitrou and " +"Benjamin Peterson; :issue:`4136`.)" +msgstr "" +"(由 Bob Ippolito 在 :issue:`4136` 中贡献。并由 Antoine Pitrou 和 Benjamin Peterson " +"转换为Py3.1)" + +#: ../../whatsnew/3.1.rst:459 +msgid "" +"Unpickling now interns the attribute names of pickled objects. This saves " +"memory and allows pickles to be smaller." +msgstr "解封操作现在将固定已封存对象的属性名称。 这可以节省内存并让封存对象变得更小。" + +#: ../../whatsnew/3.1.rst:462 +msgid "(Contributed by Jake McGuire and Antoine Pitrou; :issue:`5084`.)" +msgstr "(由 Jake McGuire 和 Antoine Pitrou 在 :issue:`5084` 中贡献。)" + +#: ../../whatsnew/3.1.rst:465 +msgid "IDLE" +msgstr "IDLE" + +#: ../../whatsnew/3.1.rst:467 +msgid "" +"IDLE's format menu now provides an option to strip trailing whitespace from " +"a source file." +msgstr "IDLE 的格式菜单现在提供了一个从源文件中去除尾部空格的选项。" + +#: ../../whatsnew/3.1.rst:470 +msgid "(Contributed by Roger D. Serwy; :issue:`5150`.)" +msgstr "(由 Roger D. Serwy 在 :issue:`5150` 中贡献。)" + +#: ../../whatsnew/3.1.rst:473 +msgid "Build and C API Changes" +msgstr "构建和 C API 的改变" + +#: ../../whatsnew/3.1.rst:475 +msgid "Changes to Python's build process and to the C API include:" +msgstr "针对 Python 构建过程和 C API 的改变包括:" + +#: ../../whatsnew/3.1.rst:477 +msgid "" +"Integers are now stored internally either in base ``2**15`` or in base " +"``2**30``, the base being determined at build time. Previously, they were " +"always stored in base ``2**15``. Using base ``2**30`` gives significant " +"performance improvements on 64-bit machines, but benchmark results on 32-bit" +" machines have been mixed. Therefore, the default is to use base ``2**30`` " +"on 64-bit machines and base ``2**15`` on 32-bit machines; on Unix, there's a" +" new configure option ``--enable-big-digits`` that can be used to override " +"this default." +msgstr "" +"现在整数在内部是以 ``2**15`` 为基数或以 ``2**30`` 为基数来存储的,这个基数会在构建时被确定。 在之前版本中,它们总是以 " +"``2**15`` 为基数来存储。 在 64 位机器上使用 ``2**30`` 为基数可显著提升性能,但在 32 位机器上的基准测试结果则好坏参半。 " +"因此,默认会在 64 位机器上使用 ``2**30`` 为基数而在 32 位机器上使用 ``2**15`` 为基数;在 Unix 上,有一个新的配置选项" +" ``--enable-big-digits`` 可被用于覆盖此默认值。" + +#: ../../whatsnew/3.1.rst:486 +msgid "" +"Apart from the performance improvements this change should be invisible to " +"end users, with one exception: for testing and debugging purposes there's a " +"new :attr:`sys.int_info` that provides information about the internal " +"format, giving the number of bits per digit and the size in bytes of the C " +"type used to store each digit::" +msgstr "" +"除了性能提升之外这项改变对最终用户来说应当是不可见的,只有一个例外:出于测试和调试目的有一个新的提供相关内部格式信息的 " +":attr:`sys.int_info`,它给出了每个数位对应的比特位数和用于存储每个数位的以字节数表示的 C 类型大小::" + +#: ../../whatsnew/3.1.rst:496 +msgid "(Contributed by Mark Dickinson; :issue:`4258`.)" +msgstr "(由 Mark Dickinson在 :issue:`4258` 贡献)" + +#: ../../whatsnew/3.1.rst:498 +msgid "" +"The :c:func:`PyLong_AsUnsignedLongLong()` function now handles a negative " +"*pylong* by raising :exc:`OverflowError` instead of :exc:`TypeError`." +msgstr "" +":c:func:`PyLong_AsUnsignedLongLong()` 函数现在将通过引发 :exc:`OverflowError` 而不是 " +":exc:`TypeError` 来处理负的 *pylong*。" + +#: ../../whatsnew/3.1.rst:501 +msgid "(Contributed by Mark Dickinson and Lisandro Dalcrin; :issue:`5175`.)" +msgstr "(由 Mark Dickinson 和 Lisandro Dalcrin 在 :issue:`5175` 中贡献。)" + +#: ../../whatsnew/3.1.rst:503 +msgid "" +"Deprecated :c:func:`PyNumber_Int`. Use :c:func:`PyNumber_Long` instead." +msgstr "已弃用 :c:func:`PyNumber_Int` 。请改用 :c:func:`PyNumber_Long` 。" + +#: ../../whatsnew/3.1.rst:505 +msgid "(Contributed by Mark Dickinson; :issue:`4910`.)" +msgstr "(由 Mark Dickinson在 :issue:`4910` 贡献)" + +#: ../../whatsnew/3.1.rst:507 +msgid "" +"Added a new :c:func:`PyOS_string_to_double` function to replace the " +"deprecated functions :c:func:`PyOS_ascii_strtod` and " +":c:func:`PyOS_ascii_atof`." +msgstr "" +"增加了一个新的 :c:func:`PyOS_string_to_double` 函数来替代已弃用的函数 " +":c:func:`PyOS_ascii_strtod` 和 :c:func:`PyOS_ascii_atof`。" + +#: ../../whatsnew/3.1.rst:510 +msgid "(Contributed by Mark Dickinson; :issue:`5914`.)" +msgstr "(由 Mark Dickinson 在 :issue:`5914` 贡献)" + +#: ../../whatsnew/3.1.rst:512 +msgid "" +"Added :c:type:`PyCapsule` as a replacement for the :c:type:`PyCObject` API. " +"The principal difference is that the new type has a well defined interface " +"for passing typing safety information and a less complicated signature for " +"calling a destructor. The old type had a problematic API and is now " +"deprecated." +msgstr "" +"增加了 :c:type:`PyCapsule` 作为 :c:type:`PyCObject` API 的替代。 " +"主要区别在于新类型拥有一个定义良好的接口用来传递类型安全信息并拥有一个较低复杂度的签名用来调用析构器。 旧类型的 API 存在问题且现在已被弃用。" + +#: ../../whatsnew/3.1.rst:518 +msgid "(Contributed by Larry Hastings; :issue:`5630`.)" +msgstr "(由 Larry Hastings 在 :issue:`5630` 中贡献。)" + +#: ../../whatsnew/3.1.rst:521 +msgid "Porting to Python 3.1" +msgstr "移植到 Python 3.1" + +#: ../../whatsnew/3.1.rst:523 +msgid "" +"This section lists previously described changes and other bugfixes that may " +"require changes to your code:" +msgstr "本节列出了先前描述的改变以及可能需要修改你的代码的其他问题修正:" + +#: ../../whatsnew/3.1.rst:526 +msgid "" +"The new floating point string representations can break existing doctests. " +"For example::" +msgstr "新的浮点字符串表示形式可能会破坏现有的 doctest。 例如::" + +#: ../../whatsnew/3.1.rst:549 +msgid "" +"The automatic name remapping in the pickle module for protocol 2 or lower " +"can make Python 3.1 pickles unreadable in Python 3.0. One solution is to " +"use protocol 3. Another solution is to set the *fix_imports* option to " +"``False``. See the discussion above for more details." +msgstr "" +"在 pickle 模块中用于协议 2 或更低版本的自动名称重映射会使得 Python 3.1 的 pickle 在 Python 3.0 中无法读取。 " +"一种解决方案是使用协议 3。 另一种解决方案是将 *fix_imports* 选项设为 ``False``。 请参阅上面的讨论来了解更多细节。" diff --git a/whatsnew/3.2.po b/whatsnew/3.2.po new file mode 100644 index 000000000..efc460bea --- /dev/null +++ b/whatsnew/3.2.po @@ -0,0 +1,3348 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) 2001-2025, Python Software Foundation +# This file is distributed under the same license as the Python package. +# FIRST AUTHOR , YEAR. +# +# Translators: +# cdarlint , 2017 +# Shengjing Zhu , 2018 +# Fei Yin , 2018 +# ww song , 2018 +# Alpha Du , 2019 +# ppcfish , 2019 +# Rafael Fontenelle , 2024 +# Freesand Leo , 2025 +# +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: Python 3.9\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2025-04-25 16:43+0000\n" +"PO-Revision-Date: 2017-02-16 23:44+0000\n" +"Last-Translator: Freesand Leo , 2025\n" +"Language-Team: Chinese (China) (https://app.transifex.com/python-doc/teams/5390/zh_CN/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: zh_CN\n" +"Plural-Forms: nplurals=1; plural=0;\n" + +#: ../../whatsnew/3.2.rst:3 +msgid "What's New In Python 3.2" +msgstr "Python 3.2 有什么新变化" + +#: ../../whatsnew/3.2.rst:0 +msgid "Author" +msgstr "作者" + +#: ../../whatsnew/3.2.rst:5 +msgid "Raymond Hettinger" +msgstr "Raymond Hettinger(译者:wh2099 at outlook dot com)" + +#: ../../whatsnew/3.2.rst:51 +msgid "" +"This article explains the new features in Python 3.2 as compared to 3.1. It" +" focuses on a few highlights and gives a few examples. For full details, " +"see the `Misc/NEWS " +"`_" +" file." +msgstr "" + +#: ../../whatsnew/3.2.rst:59 +msgid ":pep:`392` - Python 3.2 Release Schedule" +msgstr ":pep:`392` - Python 3.2 发布计划" + +#: ../../whatsnew/3.2.rst:63 +msgid "PEP 384: Defining a Stable ABI" +msgstr "PEP 384: 定义稳定的ABI" + +#: ../../whatsnew/3.2.rst:65 +msgid "" +"In the past, extension modules built for one Python version were often not " +"usable with other Python versions. Particularly on Windows, every feature " +"release of Python required rebuilding all extension modules that one wanted " +"to use. This requirement was the result of the free access to Python " +"interpreter internals that extension modules could use." +msgstr "" +"过去,为一个 Python 版本所构建的扩展模块通常无法用于其他 Python 版本。 特别是在 Windows 上,每一个 Python " +"新特性发布版都必须重新构建想要使用的所有扩展模块。 之所以有这样的要求是因为扩展模块可以任意访问 Python 解释器的内部对象。" + +#: ../../whatsnew/3.2.rst:71 +msgid "" +"With Python 3.2, an alternative approach becomes available: extension " +"modules which restrict themselves to a limited API (by defining " +"Py_LIMITED_API) cannot use many of the internals, but are constrained to a " +"set of API functions that are promised to be stable for several releases. As" +" a consequence, extension modules built for 3.2 in that mode will also work " +"with 3.3, 3.4, and so on. Extension modules that make use of details of " +"memory structures can still be built, but will need to be recompiled for " +"every feature release." +msgstr "" +"在 Python 3.2 中,则有了一种替代方式:扩展模块将自己约束于一个受限 API(通过定义 " +"Py_LIMITED_API)因而不能使用许多内部对象,仅限使用一组承诺会在多个发布版中保持稳定的 API 函数。 作为其结果,在这种模式下为 3.2 " +"构建的扩展模块也将能在 3.3、3.4 等版本中运行。 使用了内存结构体细节数据的扩展模块仍然可以被构建,但将需要为每个新特性发布版重新编译。" + +#: ../../whatsnew/3.2.rst:82 +msgid ":pep:`384` - Defining a Stable ABI" +msgstr ":pep:`384` - 定义稳定的ABI" + +#: ../../whatsnew/3.2.rst:83 +msgid "PEP written by Martin von Löwis." +msgstr "PEP 由 Martin von Löwis 撰写" + +#: ../../whatsnew/3.2.rst:87 +msgid "PEP 389: Argparse Command Line Parsing Module" +msgstr "PEP 389: Argparse 命令行解析模块" + +#: ../../whatsnew/3.2.rst:89 +msgid "" +"A new module for command line parsing, :mod:`argparse`, was introduced to " +"overcome the limitations of :mod:`optparse` which did not provide support " +"for positional arguments (not just options), subcommands, required options " +"and other common patterns of specifying and validating options." +msgstr "" + +#: ../../whatsnew/3.2.rst:94 +msgid "" +"This module has already had widespread success in the community as a third-" +"party module. Being more fully featured than its predecessor, the " +":mod:`argparse` module is now the preferred module for command-line " +"processing. The older module is still being kept available because of the " +"substantial amount of legacy code that depends on it." +msgstr "" + +#: ../../whatsnew/3.2.rst:100 +msgid "" +"Here's an annotated example parser showing features like limiting results to" +" a set of choices, specifying a *metavar* in the help screen, validating " +"that one or more positional arguments is present, and making a required " +"option::" +msgstr "" + +#: ../../whatsnew/3.2.rst:119 +msgid "Example of calling the parser on a command string::" +msgstr "在命令字符串中调用解析器的示例::" + +#: ../../whatsnew/3.2.rst:130 +msgid "Example of the parser's automatically generated help::" +msgstr "解释器自动生成的帮助示例::" + +#: ../../whatsnew/3.2.rst:149 +msgid "" +"An especially nice :mod:`argparse` feature is the ability to define " +"subparsers, each with their own argument patterns and help displays::" +msgstr "一个非常好的 :mod:`argparse` 特性是可以定义子解析器,每个子解析器拥有它们自己的参数模式和帮助显示::" + +#: ../../whatsnew/3.2.rst:175 +msgid ":pep:`389` - New Command Line Parsing Module" +msgstr ":pep:`389` - 新的命令行解析模块" + +#: ../../whatsnew/3.2.rst:175 +msgid "PEP written by Steven Bethard." +msgstr "PEP 由 Steven Bethard 撰写" + +#: ../../whatsnew/3.2.rst:177 +msgid "" +":ref:`upgrading-optparse-code` for details on the differences from " +":mod:`optparse`." +msgstr "参阅 :ref:`upgrading-optparse-code` 了解与 :mod:`optparse` 的差异的细节。" + +#: ../../whatsnew/3.2.rst:181 +msgid "PEP 391: Dictionary Based Configuration for Logging" +msgstr "PEP 391: 基于字典的日志配置" + +#: ../../whatsnew/3.2.rst:183 +msgid "" +"The :mod:`logging` module provided two kinds of configuration, one style " +"with function calls for each option or another style driven by an external " +"file saved in a :mod:`ConfigParser` format. Those options did not provide " +"the flexibility to create configurations from JSON or YAML files, nor did " +"they support incremental configuration, which is needed for specifying " +"logger options from a command line." +msgstr "" + +#: ../../whatsnew/3.2.rst:190 +msgid "" +"To support a more flexible style, the module now offers " +":func:`logging.config.dictConfig` for specifying logging configuration with " +"plain Python dictionaries. The configuration options include formatters, " +"handlers, filters, and loggers. Here's a working example of a configuration" +" dictionary::" +msgstr "" + +#: ../../whatsnew/3.2.rst:214 +msgid "" +"If that dictionary is stored in a file called :file:`conf.json`, it can be " +"loaded and called with code like this::" +msgstr "" + +#: ../../whatsnew/3.2.rst:229 +msgid ":pep:`391` - Dictionary Based Configuration for Logging" +msgstr ":pep:`391` - 基于字典的日志配置" + +#: ../../whatsnew/3.2.rst:230 +msgid "PEP written by Vinay Sajip." +msgstr "PEP 由 Vinay Sajip 撰写" + +#: ../../whatsnew/3.2.rst:234 +msgid "PEP 3148: The ``concurrent.futures`` module" +msgstr "PEP 3148: ``concurrent.futures`` 模块" + +#: ../../whatsnew/3.2.rst:236 +msgid "" +"Code for creating and managing concurrency is being collected in a new top-" +"level namespace, *concurrent*. Its first member is a *futures* package " +"which provides a uniform high-level interface for managing threads and " +"processes." +msgstr "" + +#: ../../whatsnew/3.2.rst:240 +msgid "" +"The design for :mod:`concurrent.futures` was inspired by the " +"*java.util.concurrent* package. In that model, a running call and its " +"result are represented by a :class:`~concurrent.futures.Future` object that " +"abstracts features common to threads, processes, and remote procedure calls." +" That object supports status checks (running or done), timeouts, " +"cancellations, adding callbacks, and access to results or exceptions." +msgstr "" + +#: ../../whatsnew/3.2.rst:247 +msgid "" +"The primary offering of the new module is a pair of executor classes for " +"launching and managing calls. The goal of the executors is to make it " +"easier to use existing tools for making parallel calls. They save the effort" +" needed to setup a pool of resources, launch the calls, create a results " +"queue, add time-out handling, and limit the total number of threads, " +"processes, or remote procedure calls." +msgstr "" + +#: ../../whatsnew/3.2.rst:254 +msgid "" +"Ideally, each application should share a single executor across multiple " +"components so that process and thread limits can be centrally managed. This" +" solves the design challenge that arises when each component has its own " +"competing strategy for resource management." +msgstr "" + +#: ../../whatsnew/3.2.rst:259 +msgid "" +"Both classes share a common interface with three methods: " +":meth:`~concurrent.futures.Executor.submit` for scheduling a callable and " +"returning a :class:`~concurrent.futures.Future` object; " +":meth:`~concurrent.futures.Executor.map` for scheduling many asynchronous " +"calls at a time, and :meth:`~concurrent.futures.Executor.shutdown` for " +"freeing resources. The class is a :term:`context manager` and can be used " +"in a :keyword:`with` statement to assure that resources are automatically " +"released when currently pending futures are done executing." +msgstr "" + +#: ../../whatsnew/3.2.rst:268 +msgid "" +"A simple of example of :class:`~concurrent.futures.ThreadPoolExecutor` is a " +"launch of four parallel threads for copying files::" +msgstr "" + +#: ../../whatsnew/3.2.rst:281 +msgid ":pep:`3148` - Futures -- Execute Computations Asynchronously" +msgstr ":pep:`3148` -- futures - 异步执行指令" + +#: ../../whatsnew/3.2.rst:281 +msgid "PEP written by Brian Quinlan." +msgstr "PEP 由 Brian Quinlan 撰写" + +#: ../../whatsnew/3.2.rst:283 +msgid "" +":ref:`Code for Threaded Parallel URL reads`, an " +"example using threads to fetch multiple web pages in parallel." +msgstr "" + +#: ../../whatsnew/3.2.rst:286 +msgid "" +":ref:`Code for computing prime numbers in parallel`, an example demonstrating " +":class:`~concurrent.futures.ProcessPoolExecutor`." +msgstr "" + +#: ../../whatsnew/3.2.rst:292 +msgid "PEP 3147: PYC Repository Directories" +msgstr "PEP 3147: PYC 仓库目录" + +#: ../../whatsnew/3.2.rst:294 +msgid "" +"Python's scheme for caching bytecode in *.pyc* files did not work well in " +"environments with multiple Python interpreters. If one interpreter " +"encountered a cached file created by another interpreter, it would recompile" +" the source and overwrite the cached file, thus losing the benefits of " +"caching." +msgstr "" + +#: ../../whatsnew/3.2.rst:299 +msgid "" +"The issue of \"pyc fights\" has become more pronounced as it has become " +"commonplace for Linux distributions to ship with multiple versions of " +"Python. These conflicts also arise with CPython alternatives such as Unladen" +" Swallow." +msgstr "" + +#: ../../whatsnew/3.2.rst:303 +msgid "" +"To solve this problem, Python's import machinery has been extended to use " +"distinct filenames for each interpreter. Instead of Python 3.2 and Python " +"3.3 and Unladen Swallow each competing for a file called \"mymodule.pyc\", " +"they will now look for \"mymodule.cpython-32.pyc\", " +"\"mymodule.cpython-33.pyc\", and \"mymodule.unladen10.pyc\". And to prevent" +" all of these new files from cluttering source directories, the *pyc* files " +"are now collected in a \"__pycache__\" directory stored under the package " +"directory." +msgstr "" + +#: ../../whatsnew/3.2.rst:311 +msgid "" +"Aside from the filenames and target directories, the new scheme has a few " +"aspects that are visible to the programmer:" +msgstr "" + +#: ../../whatsnew/3.2.rst:314 +msgid "" +"Imported modules now have a :attr:`__cached__` attribute which stores the " +"name of the actual file that was imported:" +msgstr "" + +#: ../../whatsnew/3.2.rst:321 +msgid "" +"The tag that is unique to each interpreter is accessible from the :mod:`imp`" +" module:" +msgstr "针对每个解释器的唯一标签可以从 :mod:`imp` 模块访问:" + +#: ../../whatsnew/3.2.rst:328 +msgid "" +"Scripts that try to deduce source filename from the imported file now need " +"to be smarter. It is no longer sufficient to simply strip the \"c\" from a " +"\".pyc\" filename. Instead, use the new functions in the :mod:`imp` module:" +msgstr "" + +#: ../../whatsnew/3.2.rst:337 +msgid "" +"The :mod:`py_compile` and :mod:`compileall` modules have been updated to " +"reflect the new naming convention and target directory. The command-line " +"invocation of *compileall* has new options: ``-i`` for specifying a list of " +"files and directories to compile and ``-b`` which causes bytecode files to " +"be written to their legacy location rather than *__pycache__*." +msgstr "" + +#: ../../whatsnew/3.2.rst:344 +msgid "" +"The :mod:`importlib.abc` module has been updated with new :term:`abstract " +"base classes ` for loading bytecode files. The " +"obsolete ABCs, :class:`~importlib.abc.PyLoader` and " +":class:`~importlib.abc.PyPycLoader`, have been deprecated (instructions on " +"how to stay Python 3.1 compatible are included with the documentation)." +msgstr "" + +#: ../../whatsnew/3.2.rst:352 +msgid ":pep:`3147` - PYC Repository Directories" +msgstr ":pep:`3147` - PYC 仓库目录" + +#: ../../whatsnew/3.2.rst:353 ../../whatsnew/3.2.rst:384 +msgid "PEP written by Barry Warsaw." +msgstr "PEP 由 Barry Warsaw 撰写" + +#: ../../whatsnew/3.2.rst:357 +msgid "PEP 3149: ABI Version Tagged .so Files" +msgstr "PEP 3149: 带有 ABI 版本标签的 .so 文件" + +#: ../../whatsnew/3.2.rst:359 +msgid "" +"The PYC repository directory allows multiple bytecode cache files to be co-" +"located. This PEP implements a similar mechanism for shared object files by" +" giving them a common directory and distinct names for each version." +msgstr "" + +#: ../../whatsnew/3.2.rst:363 +msgid "" +"The common directory is \"pyshared\" and the file names are made distinct by" +" identifying the Python implementation (such as CPython, PyPy, Jython, " +"etc.), the major and minor version numbers, and optional build flags (such " +"as \"d\" for debug, \"m\" for pymalloc, \"u\" for wide-unicode). For an " +"arbitrary package \"foo\", you may see these files when the distribution " +"package is installed::" +msgstr "" + +#: ../../whatsnew/3.2.rst:372 +msgid "" +"In Python itself, the tags are accessible from functions in the " +":mod:`sysconfig` module::" +msgstr "对于 Python 本身,可以通过 :mod:`sysconfig` 模块中的函数来访问这些标签::" + +#: ../../whatsnew/3.2.rst:383 +msgid ":pep:`3149` - ABI Version Tagged .so Files" +msgstr ":pep:`3149` - 带有 ABI 版本标签的 .so 文件" + +#: ../../whatsnew/3.2.rst:388 +msgid "PEP 3333: Python Web Server Gateway Interface v1.0.1" +msgstr "PEP 3333: Python Web服务器网关接口v1.0.1" + +#: ../../whatsnew/3.2.rst:390 +msgid "" +"This informational PEP clarifies how bytes/text issues are to be handled by " +"the WSGI protocol. The challenge is that string handling in Python 3 is " +"most conveniently handled with the :class:`str` type even though the HTTP " +"protocol is itself bytes oriented." +msgstr "" + +#: ../../whatsnew/3.2.rst:395 +msgid "" +"The PEP differentiates so-called *native strings* that are used for " +"request/response headers and metadata versus *byte strings* which are used " +"for the bodies of requests and responses." +msgstr "" + +#: ../../whatsnew/3.2.rst:399 +msgid "" +"The *native strings* are always of type :class:`str` but are restricted to " +"code points between *U+0000* through *U+00FF* which are translatable to " +"bytes using *Latin-1* encoding. These strings are used for the keys and " +"values in the environment dictionary and for response headers and statuses " +"in the :func:`start_response` function. They must follow :rfc:`2616` with " +"respect to encoding. That is, they must either be *ISO-8859-1* characters or" +" use :rfc:`2047` MIME encoding." +msgstr "" + +#: ../../whatsnew/3.2.rst:407 +msgid "" +"For developers porting WSGI applications from Python 2, here are the salient" +" points:" +msgstr "" + +#: ../../whatsnew/3.2.rst:410 +msgid "" +"If the app already used strings for headers in Python 2, no change is " +"needed." +msgstr "" + +#: ../../whatsnew/3.2.rst:412 +msgid "" +"If instead, the app encoded output headers or decoded input headers, then " +"the headers will need to be re-encoded to Latin-1. For example, an output " +"header encoded in utf-8 was using ``h.encode('utf-8')`` now needs to convert" +" from bytes to native strings using ``h.encode('utf-8').decode('latin-1')``." +msgstr "" + +#: ../../whatsnew/3.2.rst:417 +msgid "" +"Values yielded by an application or sent using the :meth:`write` method must" +" be byte strings. The :func:`start_response` function and environ must use " +"native strings. The two cannot be mixed." +msgstr "" + +#: ../../whatsnew/3.2.rst:421 +msgid "" +"For server implementers writing CGI-to-WSGI pathways or other CGI-style " +"protocols, the users must to be able access the environment using native " +"strings even though the underlying platform may have a different convention." +" To bridge this gap, the :mod:`wsgiref` module has a new function, " +":func:`wsgiref.handlers.read_environ` for transcoding CGI variables from " +":attr:`os.environ` into native strings and returning a new dictionary." +msgstr "" + +#: ../../whatsnew/3.2.rst:430 +msgid ":pep:`3333` - Python Web Server Gateway Interface v1.0.1" +msgstr ":pep:`3333` - Python Web服务器网关接口v1.0.1" + +#: ../../whatsnew/3.2.rst:431 +msgid "PEP written by Phillip Eby." +msgstr "PEP 由 Phillip Eby 撰写" + +#: ../../whatsnew/3.2.rst:435 +msgid "Other Language Changes" +msgstr "其他语言特性修改" + +#: ../../whatsnew/3.2.rst:437 +msgid "Some smaller changes made to the core Python language are:" +msgstr "对Python 语言核心进行的小改动:" + +#: ../../whatsnew/3.2.rst:439 +msgid "" +"String formatting for :func:`format` and :meth:`str.format` gained new " +"capabilities for the format character **#**. Previously, for integers in " +"binary, octal, or hexadecimal, it caused the output to be prefixed with " +"'0b', '0o', or '0x' respectively. Now it can also handle floats, complex, " +"and Decimal, causing the output to always have a decimal point even when no " +"digits follow it." +msgstr "" + +#: ../../whatsnew/3.2.rst:451 +msgid "" +"(Suggested by Mark Dickinson and implemented by Eric Smith in " +":issue:`7094`.)" +msgstr "" + +#: ../../whatsnew/3.2.rst:453 +msgid "" +"There is also a new :meth:`str.format_map` method that extends the " +"capabilities of the existing :meth:`str.format` method by accepting " +"arbitrary :term:`mapping` objects. This new method makes it possible to use" +" string formatting with any of Python's many dictionary-like objects such as" +" :class:`~collections.defaultdict`, :class:`~shelve.Shelf`, " +":class:`~configparser.ConfigParser`, or :mod:`dbm`. It is also useful with " +"custom :class:`dict` subclasses that normalize keys before look-up or that " +"supply a :meth:`__missing__` method for unknown keys::" +msgstr "" + +#: ../../whatsnew/3.2.rst:480 +msgid "" +"(Suggested by Raymond Hettinger and implemented by Eric Smith in " +":issue:`6081`.)" +msgstr "(由 Raymond Hettinger 提议并由 Eric Smith 在 :issue:`6081` 中贡献。)" + +#: ../../whatsnew/3.2.rst:483 +msgid "" +"The interpreter can now be started with a quiet option, ``-q``, to prevent " +"the copyright and version information from being displayed in the " +"interactive mode. The option can be introspected using the " +":attr:`sys.flags` attribute:" +msgstr "" + +#: ../../whatsnew/3.2.rst:495 +msgid "(Contributed by Marcin Wojdyr in :issue:`1772833`)." +msgstr "(由 Marcin Wojdyr 在 :issue:`1772833` 中贡献。)" + +#: ../../whatsnew/3.2.rst:497 +msgid "" +"The :func:`hasattr` function works by calling :func:`getattr` and detecting " +"whether an exception is raised. This technique allows it to detect methods " +"created dynamically by :meth:`__getattr__` or :meth:`__getattribute__` which" +" would otherwise be absent from the class dictionary. Formerly, *hasattr* " +"would catch any exception, possibly masking genuine errors. Now, *hasattr* " +"has been tightened to only catch :exc:`AttributeError` and let other " +"exceptions pass through::" +msgstr "" + +#: ../../whatsnew/3.2.rst:516 +msgid "" +"(Discovered by Yury Selivanov and fixed by Benjamin Peterson; " +":issue:`9666`.)" +msgstr "(由 Yury Selivanov 发现并由 Benjamin Peterson 修正;:issue:`9666`。)" + +#: ../../whatsnew/3.2.rst:518 +msgid "" +"The :func:`str` of a float or complex number is now the same as its " +":func:`repr`. Previously, the :func:`str` form was shorter but that just " +"caused confusion and is no longer needed now that the shortest possible " +":func:`repr` is displayed by default:" +msgstr "" + +#: ../../whatsnew/3.2.rst:529 +msgid "(Proposed and implemented by Mark Dickinson; :issue:`9337`.)" +msgstr "(由 Mark Dickinson 提议并实现;:issue:`9337`。)" + +#: ../../whatsnew/3.2.rst:531 +msgid "" +":class:`memoryview` objects now have a :meth:`~memoryview.release()` method " +"and they also now support the context management protocol. This allows " +"timely release of any resources that were acquired when requesting a buffer " +"from the original object." +msgstr "" + +#: ../../whatsnew/3.2.rst:540 +msgid "(Added by Antoine Pitrou; :issue:`9757`.)" +msgstr "(由 Antoine Pitrou 添加;:issue:`9757`。)" + +#: ../../whatsnew/3.2.rst:542 +msgid "" +"Previously it was illegal to delete a name from the local namespace if it " +"occurs as a free variable in a nested block::" +msgstr "" + +#: ../../whatsnew/3.2.rst:551 +msgid "" +"This is now allowed. Remember that the target of an :keyword:`except` " +"clause is cleared, so this code which used to work with Python 2.6, raised a" +" :exc:`SyntaxError` with Python 3.1 and now works again::" +msgstr "" + +#: ../../whatsnew/3.2.rst:564 +msgid "(See :issue:`4617`.)" +msgstr "(参见 :issue:`4617`。)" + +#: ../../whatsnew/3.2.rst:566 +msgid "" +"The internal :c:type:`structsequence` tool now creates subclasses of tuple. " +"This means that C structures like those returned by :func:`os.stat`, " +":func:`time.gmtime`, and :attr:`sys.version_info` now work like a " +":term:`named tuple` and now work with functions and methods that expect a " +"tuple as an argument. This is a big step forward in making the C structures" +" as flexible as their pure Python counterparts:" +msgstr "" + +#: ../../whatsnew/3.2.rst:579 +msgid "" +"(Suggested by Arfrever Frehtes Taifersar Arahesis and implemented by " +"Benjamin Peterson in :issue:`8413`.)" +msgstr "" + +#: ../../whatsnew/3.2.rst:582 +msgid "" +"Warnings are now easier to control using the :envvar:`PYTHONWARNINGS` " +"environment variable as an alternative to using ``-W`` at the command line:" +msgstr "" + +#: ../../whatsnew/3.2.rst:589 +msgid "" +"(Suggested by Barry Warsaw and implemented by Philip Jenvey in " +":issue:`7301`.)" +msgstr "" + +#: ../../whatsnew/3.2.rst:591 +msgid "" +"A new warning category, :exc:`ResourceWarning`, has been added. It is " +"emitted when potential issues with resource consumption or cleanup are " +"detected. It is silenced by default in normal release builds but can be " +"enabled through the means provided by the :mod:`warnings` module, or on the " +"command line." +msgstr "" + +#: ../../whatsnew/3.2.rst:597 +msgid "" +"A :exc:`ResourceWarning` is issued at interpreter shutdown if the " +":data:`gc.garbage` list isn't empty, and if :attr:`gc.DEBUG_UNCOLLECTABLE` " +"is set, all uncollectable objects are printed. This is meant to make the " +"programmer aware that their code contains object finalization issues." +msgstr "" + +#: ../../whatsnew/3.2.rst:602 +msgid "" +"A :exc:`ResourceWarning` is also issued when a :term:`file object` is " +"destroyed without having been explicitly closed. While the deallocator for " +"such object ensures it closes the underlying operating system resource " +"(usually, a file descriptor), the delay in deallocating the object could " +"produce various issues, especially under Windows. Here is an example of " +"enabling the warning from the command line:" +msgstr "" + +#: ../../whatsnew/3.2.rst:616 +msgid "" +"(Added by Antoine Pitrou and Georg Brandl in :issue:`10093` and " +":issue:`477863`.)" +msgstr "" + +#: ../../whatsnew/3.2.rst:618 +msgid "" +":class:`range` objects now support *index* and *count* methods. This is part" +" of an effort to make more objects fully implement the " +":class:`collections.Sequence` :term:`abstract base class`. As a result, the" +" language will have a more uniform API. In addition, :class:`range` objects" +" now support slicing and negative indices, even with values larger than " +":attr:`sys.maxsize`. This makes *range* more interoperable with lists::" +msgstr "" + +#: ../../whatsnew/3.2.rst:634 +msgid "" +"(Contributed by Daniel Stutzbach in :issue:`9213`, by Alexander Belopolsky " +"in :issue:`2690`, and by Nick Coghlan in :issue:`10889`.)" +msgstr "" +"(由 Daniel Stutzbach 在 :issue:`9213` 中贡献,由 Alexander Belopolsky 在 " +":issue:`2690` 中贡献,由 Nick Coghlan 在 :issue:`10889` 中贡献。)" + +#: ../../whatsnew/3.2.rst:637 +msgid "" +"The :func:`callable` builtin function from Py2.x was resurrected. It " +"provides a concise, readable alternative to using an :term:`abstract base " +"class` in an expression like ``isinstance(x, collections.Callable)``:" +msgstr "" + +#: ../../whatsnew/3.2.rst:646 +msgid "(See :issue:`10518`.)" +msgstr "(参见 :issue:`10518`。)" + +#: ../../whatsnew/3.2.rst:648 +msgid "" +"Python's import mechanism can now load modules installed in directories with" +" non-ASCII characters in the path name. This solved an aggravating problem " +"with home directories for users with non-ASCII characters in their " +"usernames." +msgstr "" + +#: ../../whatsnew/3.2.rst:652 +msgid "(Required extensive work by Victor Stinner in :issue:`9425`.)" +msgstr "(需要 Victor Stinner 在 :issue:`9425` 中做大量工作。)" + +#: ../../whatsnew/3.2.rst:656 +msgid "New, Improved, and Deprecated Modules" +msgstr "新增,改进和弃用的模块" + +#: ../../whatsnew/3.2.rst:658 +msgid "" +"Python's standard library has undergone significant maintenance efforts and " +"quality improvements." +msgstr "Python 标准库经过了大量的维护工作和质量改进。" + +#: ../../whatsnew/3.2.rst:661 +msgid "" +"The biggest news for Python 3.2 is that the :mod:`email` package, " +":mod:`mailbox` module, and :mod:`nntplib` modules now work correctly with " +"the bytes/text model in Python 3. For the first time, there is correct " +"handling of messages with mixed encodings." +msgstr "" + +#: ../../whatsnew/3.2.rst:666 +msgid "" +"Throughout the standard library, there has been more careful attention to " +"encodings and text versus bytes issues. In particular, interactions with " +"the operating system are now better able to exchange non-ASCII data using " +"the Windows MBCS encoding, locale-aware encodings, or UTF-8." +msgstr "" + +#: ../../whatsnew/3.2.rst:671 +msgid "" +"Another significant win is the addition of substantially better support for " +"*SSL* connections and security certificates." +msgstr "" + +#: ../../whatsnew/3.2.rst:674 +msgid "" +"In addition, more classes now implement a :term:`context manager` to support" +" convenient and reliable resource clean-up using a :keyword:`with` " +"statement." +msgstr "" + +#: ../../whatsnew/3.2.rst:678 +msgid "email" +msgstr "email" + +#: ../../whatsnew/3.2.rst:680 +msgid "" +"The usability of the :mod:`email` package in Python 3 has been mostly fixed " +"by the extensive efforts of R. David Murray. The problem was that emails " +"are typically read and stored in the form of :class:`bytes` rather than " +":class:`str` text, and they may contain multiple encodings within a single " +"email. So, the email package had to be extended to parse and generate email" +" messages in bytes format." +msgstr "" + +#: ../../whatsnew/3.2.rst:687 +msgid "" +"New functions :func:`~email.message_from_bytes` and " +":func:`~email.message_from_binary_file`, and new classes " +":class:`~email.parser.BytesFeedParser` and " +":class:`~email.parser.BytesParser` allow binary message data to be parsed " +"into model objects." +msgstr "" + +#: ../../whatsnew/3.2.rst:692 +msgid "" +"Given bytes input to the model, :meth:`~email.message.Message.get_payload` " +"will by default decode a message body that has a :mailheader:`Content-" +"Transfer-Encoding` of *8bit* using the charset specified in the MIME headers" +" and return the resulting string." +msgstr "" + +#: ../../whatsnew/3.2.rst:697 +msgid "" +"Given bytes input to the model, :class:`~email.generator.Generator` will " +"convert message bodies that have a :mailheader:`Content-Transfer-Encoding` " +"of *8bit* to instead have a *7bit* :mailheader:`Content-Transfer-Encoding`." +msgstr "" + +#: ../../whatsnew/3.2.rst:701 +msgid "" +"Headers with unencoded non-ASCII bytes are deemed to be :rfc:`2047`\\ " +"-encoded using the *unknown-8bit* character set." +msgstr "" + +#: ../../whatsnew/3.2.rst:704 +msgid "" +"A new class :class:`~email.generator.BytesGenerator` produces bytes as " +"output, preserving any unchanged non-ASCII data that was present in the " +"input used to build the model, including message bodies with a " +":mailheader:`Content-Transfer-Encoding` of *8bit*." +msgstr "" + +#: ../../whatsnew/3.2.rst:709 +msgid "" +"The :mod:`smtplib` :class:`~smtplib.SMTP` class now accepts a byte string " +"for the *msg* argument to the :meth:`~smtplib.SMTP.sendmail` method, and a " +"new method, :meth:`~smtplib.SMTP.send_message` accepts a " +":class:`~email.message.Message` object and can optionally obtain the " +"*from_addr* and *to_addrs* addresses directly from the object." +msgstr "" + +#: ../../whatsnew/3.2.rst:715 +msgid "" +"(Proposed and implemented by R. David Murray, :issue:`4661` and " +":issue:`10321`.)" +msgstr "" + +#: ../../whatsnew/3.2.rst:718 +msgid "elementtree" +msgstr "elementtree" + +#: ../../whatsnew/3.2.rst:720 +msgid "" +"The :mod:`xml.etree.ElementTree` package and its " +":mod:`xml.etree.cElementTree` counterpart have been updated to version 1.3." +msgstr "" +":mod:`xml.etree.ElementTree` 包及其对应的 :mod:`xml.etree.cElementTree` 已更新至 1.3 " +"版。" + +#: ../../whatsnew/3.2.rst:723 +msgid "Several new and useful functions and methods have been added:" +msgstr "新增了几个有用的函数和方法:" + +#: ../../whatsnew/3.2.rst:725 +msgid "" +":func:`xml.etree.ElementTree.fromstringlist` which builds an XML document " +"from a sequence of fragments" +msgstr ":func:`xml.etree.ElementTree.fromstringlist` 可根据一系列片段生成 XML 文档" + +#: ../../whatsnew/3.2.rst:727 +msgid "" +":func:`xml.etree.ElementTree.register_namespace` for registering a global " +"namespace prefix" +msgstr ":func:`xml.etree.ElementTree.register_namespace` 用于注册全局命名空间前缀" + +#: ../../whatsnew/3.2.rst:729 +msgid "" +":func:`xml.etree.ElementTree.tostringlist` for string representation " +"including all sublists" +msgstr ":func:`xml.etree.ElementTree.tostringlist` 用于字符串表示包括所有子列表" + +#: ../../whatsnew/3.2.rst:731 +msgid "" +":meth:`xml.etree.ElementTree.Element.extend` for appending a sequence of " +"zero or more elements" +msgstr ":meth:`xml.etree.ElementTree.Element.extend` 用于添加包含零个或多个元素的序列" + +#: ../../whatsnew/3.2.rst:733 +msgid "" +":meth:`xml.etree.ElementTree.Element.iterfind` searches an element and " +"subelements" +msgstr ":meth:`xml.etree.ElementTree.Element.iterfind` 可搜索元素和子元素" + +#: ../../whatsnew/3.2.rst:735 +msgid "" +":meth:`xml.etree.ElementTree.Element.itertext` creates a text iterator over " +"an element and its subelements" +msgstr ":meth:`xml.etree.ElementTree.Element.itertext` 创建一个包含指定元素及其子元素的文本迭代器。" + +#: ../../whatsnew/3.2.rst:737 +msgid "" +":meth:`xml.etree.ElementTree.TreeBuilder.end` closes the current element" +msgstr ":meth:`xml.etree.ElementTree.TreeBuilder.end` 关闭当前元素" + +#: ../../whatsnew/3.2.rst:738 +msgid "" +":meth:`xml.etree.ElementTree.TreeBuilder.doctype` handles a doctype " +"declaration" +msgstr ":meth:`xml.etree.ElementTree.TreeBuilder.doctype` 处理 doctype 声明" + +#: ../../whatsnew/3.2.rst:741 +msgid "Two methods have been deprecated:" +msgstr "两个方法被弃用:" + +#: ../../whatsnew/3.2.rst:743 +msgid ":meth:`xml.etree.ElementTree.getchildren` use ``list(elem)`` instead." +msgstr ":meth:`xml.etree.ElementTree.getchildren` 被 ``list(elem)`` 替代。" + +#: ../../whatsnew/3.2.rst:744 +msgid "" +":meth:`xml.etree.ElementTree.getiterator` use ``Element.iter`` instead." +msgstr ":meth:`xml.etree.ElementTree.getiterator` 被 ``Element.iter`` 替代。" + +#: ../../whatsnew/3.2.rst:746 +msgid "" +"For details of the update, see `Introducing ElementTree " +"`_" +" on Fredrik Lundh's website." +msgstr "" + +#: ../../whatsnew/3.2.rst:750 +msgid "(Contributed by Florent Xicluna and Fredrik Lundh, :issue:`6472`.)" +msgstr "(由 Florent Xicluna 和 Fredrik Lundh 在 :issue:`6472` 中贡献。)" + +#: ../../whatsnew/3.2.rst:753 +msgid "functools" +msgstr "functools" + +#: ../../whatsnew/3.2.rst:755 +msgid "" +"The :mod:`functools` module includes a new decorator for caching function " +"calls. :func:`functools.lru_cache` can save repeated queries to an external" +" resource whenever the results are expected to be the same." +msgstr "" + +#: ../../whatsnew/3.2.rst:759 +msgid "" +"For example, adding a caching decorator to a database query function can " +"save database accesses for popular searches:" +msgstr "" + +#: ../../whatsnew/3.2.rst:772 +msgid "" +"To help with choosing an effective cache size, the wrapped function is " +"instrumented for tracking cache statistics:" +msgstr "" + +#: ../../whatsnew/3.2.rst:778 +msgid "" +"If the phonelist table gets updated, the outdated contents of the cache can " +"be cleared with:" +msgstr "" + +#: ../../whatsnew/3.2.rst:783 +msgid "" +"(Contributed by Raymond Hettinger and incorporating design ideas from Jim " +"Baker, Miki Tebeka, and Nick Coghlan; see `recipe 498245 " +"`_\\, `recipe 577479 " +"`_\\, :issue:`10586`, and " +":issue:`10593`.)" +msgstr "" + +#: ../../whatsnew/3.2.rst:789 +msgid "" +"The :func:`functools.wraps` decorator now adds a :attr:`__wrapped__` " +"attribute pointing to the original callable function. This allows wrapped " +"functions to be introspected. It also copies :attr:`__annotations__` if " +"defined. And now it also gracefully skips over missing attributes such as " +":attr:`__doc__` which might not be defined for the wrapped callable." +msgstr "" + +#: ../../whatsnew/3.2.rst:795 +msgid "" +"In the above example, the cache can be removed by recovering the original " +"function:" +msgstr "" + +#: ../../whatsnew/3.2.rst:800 +msgid "" +"(By Nick Coghlan and Terrence Cole; :issue:`9567`, :issue:`3445`, and " +":issue:`8814`.)" +msgstr "" +"(由 Nick Coghlan 和 Terrence Cole 在 :issue:`9567`, :issue:`3445` 和 " +":issue:`8814` 中贡献。)" + +#: ../../whatsnew/3.2.rst:803 +msgid "" +"To help write classes with rich comparison methods, a new decorator " +":func:`functools.total_ordering` will use existing equality and inequality " +"methods to fill in the remaining methods." +msgstr "" +"为帮助编写具有丰富比较方法的类,新增的装饰器 :func:`functools.total_ordering` " +"将使用现有的相等和不相等方法来填充其余的方法。" + +#: ../../whatsnew/3.2.rst:807 +msgid "" +"For example, supplying *__eq__* and *__lt__* will enable " +":func:`~functools.total_ordering` to fill-in *__le__*, *__gt__* and " +"*__ge__*::" +msgstr "" +"例如,提供 *__eq__* and *__lt__* 将启用 :func:`~functools.total_ordering` 来填充 " +"*__le__*, *__gt__* 和 *__ge__*::" + +#: ../../whatsnew/3.2.rst:820 +msgid "" +"With the *total_ordering* decorator, the remaining comparison methods are " +"filled in automatically." +msgstr "使用 *total_ordering* 装饰器时,将会自动填充其余的比较方法。" + +#: ../../whatsnew/3.2.rst:823 ../../whatsnew/3.2.rst:835 +#: ../../whatsnew/3.2.rst:879 ../../whatsnew/3.2.rst:900 +#: ../../whatsnew/3.2.rst:914 ../../whatsnew/3.2.rst:1784 +#: ../../whatsnew/3.2.rst:1829 +msgid "(Contributed by Raymond Hettinger.)" +msgstr "(由 Raymond Hettinger 贡献。)" + +#: ../../whatsnew/3.2.rst:825 +msgid "" +"To aid in porting programs from Python 2, the :func:`functools.cmp_to_key` " +"function converts an old-style comparison function to modern :term:`key " +"function`:" +msgstr "" +"为帮助移植 Python 2 程序,:func:`functools.cmp_to_key` 函数可将旧式的比较函数转换为新式的 :term:`key " +"function`:" + +#: ../../whatsnew/3.2.rst:832 +msgid "" +"For sorting examples and a brief sorting tutorial, see the `Sorting HowTo " +"`_ tutorial." +msgstr "" + +#: ../../whatsnew/3.2.rst:838 +msgid "itertools" +msgstr "itertools" + +#: ../../whatsnew/3.2.rst:840 +msgid "" +"The :mod:`itertools` module has a new :func:`~itertools.accumulate` function" +" modeled on APL's *scan* operator and Numpy's *accumulate* function:" +msgstr "" + +#: ../../whatsnew/3.2.rst:851 +msgid "" +"For an example using :func:`~itertools.accumulate`, see the :ref:`examples " +"for the random module `." +msgstr "" + +#: ../../whatsnew/3.2.rst:854 +msgid "" +"(Contributed by Raymond Hettinger and incorporating design suggestions from " +"Mark Dickinson.)" +msgstr "" + +#: ../../whatsnew/3.2.rst:858 +msgid "collections" +msgstr "collections" + +#: ../../whatsnew/3.2.rst:860 +msgid "" +"The :class:`collections.Counter` class now has two forms of in-place " +"subtraction, the existing *-=* operator for `saturating subtraction " +"`_ and the new " +":meth:`~collections.Counter.subtract` method for regular subtraction. The " +"former is suitable for `multisets `_" +" which only have positive counts, and the latter is more suitable for use " +"cases that allow negative counts:" +msgstr "" + +#: ../../whatsnew/3.2.rst:881 +msgid "" +"The :class:`collections.OrderedDict` class has a new method " +":meth:`~collections.OrderedDict.move_to_end` which takes an existing key and" +" moves it to either the first or last position in the ordered sequence." +msgstr "" + +#: ../../whatsnew/3.2.rst:885 +msgid "" +"The default is to move an item to the last position. This is equivalent of " +"renewing an entry with ``od[k] = od.pop(k)``." +msgstr "" + +#: ../../whatsnew/3.2.rst:888 +msgid "" +"A fast move-to-end operation is useful for resequencing entries. For " +"example, an ordered dictionary can be used to track order of access by aging" +" entries from the oldest to the most recently accessed." +msgstr "" + +#: ../../whatsnew/3.2.rst:902 +msgid "" +"The :class:`collections.deque` class grew two new methods " +":meth:`~collections.deque.count` and :meth:`~collections.deque.reverse` that" +" make them more substitutable for :class:`list` objects:" +msgstr "" + +#: ../../whatsnew/3.2.rst:917 +msgid "threading" +msgstr "threading" + +#: ../../whatsnew/3.2.rst:919 +msgid "" +"The :mod:`threading` module has a new :class:`~threading.Barrier` " +"synchronization class for making multiple threads wait until all of them " +"have reached a common barrier point. Barriers are useful for making sure " +"that a task with multiple preconditions does not run until all of the " +"predecessor tasks are complete." +msgstr "" + +#: ../../whatsnew/3.2.rst:925 +msgid "" +"Barriers can work with an arbitrary number of threads. This is a " +"generalization of a `Rendezvous " +"`_ which is defined " +"for only two threads." +msgstr "" + +#: ../../whatsnew/3.2.rst:929 +msgid "" +"Implemented as a two-phase cyclic barrier, :class:`~threading.Barrier` " +"objects are suitable for use in loops. The separate *filling* and " +"*draining* phases assure that all threads get released (drained) before any " +"one of them can loop back and re-enter the barrier. The barrier fully " +"resets after each cycle." +msgstr "" + +#: ../../whatsnew/3.2.rst:934 +msgid "Example of using barriers::" +msgstr "" + +#: ../../whatsnew/3.2.rst:948 +msgid "" +"In this example, the barrier enforces a rule that votes cannot be counted at" +" any polling site until all polls are closed. Notice how a solution with a " +"barrier is similar to one with :meth:`threading.Thread.join`, but the " +"threads stay alive and continue to do work (summarizing ballots) after the " +"barrier point is crossed." +msgstr "" + +#: ../../whatsnew/3.2.rst:954 +msgid "" +"If any of the predecessor tasks can hang or be delayed, a barrier can be " +"created with an optional *timeout* parameter. Then if the timeout period " +"elapses before all the predecessor tasks reach the barrier point, all " +"waiting threads are released and a :exc:`~threading.BrokenBarrierError` " +"exception is raised::" +msgstr "" + +#: ../../whatsnew/3.2.rst:970 +msgid "" +"In this example, the barrier enforces a more robust rule. If some election " +"sites do not finish before midnight, the barrier times-out and the ballots " +"are sealed and deposited in a queue for later handling." +msgstr "" + +#: ../../whatsnew/3.2.rst:974 +msgid "" +"See `Barrier Synchronization Patterns " +"`_" +" for more examples of how barriers can be used in parallel computing. Also," +" there is a simple but thorough explanation of barriers in `The Little Book " +"of Semaphores " +"`_, " +"*section 3.6*." +msgstr "" + +#: ../../whatsnew/3.2.rst:980 +msgid "" +"(Contributed by Kristján Valur Jónsson with an API review by Jeffrey Yasskin" +" in :issue:`8777`.)" +msgstr "" + +#: ../../whatsnew/3.2.rst:984 +msgid "datetime and time" +msgstr "datetime 和 time" + +#: ../../whatsnew/3.2.rst:986 +msgid "" +"The :mod:`datetime` module has a new type :class:`~datetime.timezone` that " +"implements the :class:`~datetime.tzinfo` interface by returning a fixed UTC " +"offset and timezone name. This makes it easier to create timezone-aware " +"datetime objects::" +msgstr "" + +#: ../../whatsnew/3.2.rst:999 +msgid "" +"Also, :class:`~datetime.timedelta` objects can now be multiplied by " +":class:`float` and divided by :class:`float` and :class:`int` objects. And " +":class:`~datetime.timedelta` objects can now divide one another." +msgstr "" + +#: ../../whatsnew/3.2.rst:1003 +msgid "" +"The :meth:`datetime.date.strftime` method is no longer restricted to years " +"after 1900. The new supported year range is from 1000 to 9999 inclusive." +msgstr "" + +#: ../../whatsnew/3.2.rst:1006 +msgid "" +"Whenever a two-digit year is used in a time tuple, the interpretation has " +"been governed by :attr:`time.accept2dyear`. The default is ``True`` which " +"means that for a two-digit year, the century is guessed according to the " +"POSIX rules governing the ``%y`` strptime format." +msgstr "" + +#: ../../whatsnew/3.2.rst:1011 +msgid "" +"Starting with Py3.2, use of the century guessing heuristic will emit a " +":exc:`DeprecationWarning`. Instead, it is recommended that " +":attr:`time.accept2dyear` be set to ``False`` so that large date ranges can " +"be used without guesswork::" +msgstr "" + +#: ../../whatsnew/3.2.rst:1030 +msgid "" +"Several functions now have significantly expanded date ranges. When " +":attr:`time.accept2dyear` is false, the :func:`time.asctime` function will " +"accept any year that fits in a C int, while the :func:`time.mktime` and " +":func:`time.strftime` functions will accept the full range supported by the " +"corresponding operating system functions." +msgstr "" + +#: ../../whatsnew/3.2.rst:1036 +msgid "" +"(Contributed by Alexander Belopolsky and Victor Stinner in :issue:`1289118`," +" :issue:`5094`, :issue:`6641`, :issue:`2706`, :issue:`1777412`, " +":issue:`8013`, and :issue:`10827`.)" +msgstr "" +"(由 Alexander Belopolsky 和 Victor Stinner 在 :issue:`1289118`, :issue:`5094`, " +":issue:`6641`, :issue:`2706`, :issue:`1777412`, :issue:`8013` 和 " +":issue:`10827` 中贡献。)" + +#: ../../whatsnew/3.2.rst:1043 +msgid "math" +msgstr "math" + +#: ../../whatsnew/3.2.rst:1045 +msgid "" +"The :mod:`math` module has been updated with six new functions inspired by " +"the C99 standard." +msgstr ":mod:`math` 模块基于 C99 标准增加了六个新函数。" + +#: ../../whatsnew/3.2.rst:1048 +msgid "" +"The :func:`~math.isfinite` function provides a reliable and fast way to " +"detect special values. It returns ``True`` for regular numbers and " +"``False`` for *Nan* or *Infinity*:" +msgstr "" + +#: ../../whatsnew/3.2.rst:1056 +msgid "" +"The :func:`~math.expm1` function computes ``e**x-1`` for small values of *x*" +" without incurring the loss of precision that usually accompanies the " +"subtraction of nearly equal quantities:" +msgstr "" + +#: ../../whatsnew/3.2.rst:1064 +msgid "" +"The :func:`~math.erf` function computes a probability integral or `Gaussian " +"error function `_. The " +"complementary error function, :func:`~math.erfc`, is ``1 - erf(x)``:" +msgstr "" + +#: ../../whatsnew/3.2.rst:1079 +msgid "" +"The :func:`~math.gamma` function is a continuous extension of the factorial " +"function. See https://en.wikipedia.org/wiki/Gamma_function for details. " +"Because the function is related to factorials, it grows large even for small" +" values of *x*, so there is also a :func:`~math.lgamma` function for " +"computing the natural logarithm of the gamma function:" +msgstr "" + +#: ../../whatsnew/3.2.rst:1091 +msgid "(Contributed by Mark Dickinson.)" +msgstr "(由 Mark Dickinson 贡献)" + +#: ../../whatsnew/3.2.rst:1094 +msgid "abc" +msgstr "abc" + +#: ../../whatsnew/3.2.rst:1096 +msgid "" +"The :mod:`abc` module now supports :func:`~abc.abstractclassmethod` and " +":func:`~abc.abstractstaticmethod`." +msgstr "" + +#: ../../whatsnew/3.2.rst:1099 +msgid "" +"These tools make it possible to define an :term:`abstract base class` that " +"requires a particular :func:`classmethod` or :func:`staticmethod` to be " +"implemented::" +msgstr "" + +#: ../../whatsnew/3.2.rst:1111 +msgid "(Patch submitted by Daniel Urban; :issue:`5867`.)" +msgstr "" + +#: ../../whatsnew/3.2.rst:1114 +msgid "io" +msgstr "io" + +#: ../../whatsnew/3.2.rst:1116 +msgid "" +"The :class:`io.BytesIO` has a new method, :meth:`~io.BytesIO.getbuffer`, " +"which provides functionality similar to :func:`memoryview`. It creates an " +"editable view of the data without making a copy. The buffer's random access" +" and support for slice notation are well-suited to in-place editing::" +msgstr "" + +#: ../../whatsnew/3.2.rst:1142 +msgid "(Contributed by Antoine Pitrou in :issue:`5506`.)" +msgstr "(由 Antoine Pitrou 在 :issue:`5506` 中贡献。)" + +#: ../../whatsnew/3.2.rst:1145 +msgid "reprlib" +msgstr "reprlib" + +#: ../../whatsnew/3.2.rst:1147 +msgid "" +"When writing a :meth:`__repr__` method for a custom container, it is easy to" +" forget to handle the case where a member refers back to the container " +"itself. Python's builtin objects such as :class:`list` and :class:`set` " +"handle self-reference by displaying \"...\" in the recursive part of the " +"representation string." +msgstr "" + +#: ../../whatsnew/3.2.rst:1153 +msgid "" +"To help write such :meth:`__repr__` methods, the :mod:`reprlib` module has a" +" new decorator, :func:`~reprlib.recursive_repr`, for detecting recursive " +"calls to :meth:`__repr__` and substituting a placeholder string instead::" +msgstr "" + +#: ../../whatsnew/3.2.rst:1168 +msgid "(Contributed by Raymond Hettinger in :issue:`9826` and :issue:`9840`.)" +msgstr "(由 Raymond Hettinger 在 :issue:`9826` 和 :issue:`9840` 中贡献。)" + +#: ../../whatsnew/3.2.rst:1171 +msgid "logging" +msgstr "logging" + +#: ../../whatsnew/3.2.rst:1173 +msgid "" +"In addition to dictionary-based configuration described above, the " +":mod:`logging` package has many other improvements." +msgstr "" + +#: ../../whatsnew/3.2.rst:1176 +msgid "" +"The logging documentation has been augmented by a :ref:`basic tutorial " +"`\\, an :ref:`advanced tutorial `\\, and a :ref:`cookbook ` of logging recipes. " +"These documents are the fastest way to learn about logging." +msgstr "" + +#: ../../whatsnew/3.2.rst:1181 +msgid "" +"The :func:`logging.basicConfig` set-up function gained a *style* argument to" +" support three different types of string formatting. It defaults to \"%\" " +"for traditional %-formatting, can be set to \"{\" for the new " +":meth:`str.format` style, or can be set to \"$\" for the shell-style " +"formatting provided by :class:`string.Template`. The following three " +"configurations are equivalent::" +msgstr "" + +#: ../../whatsnew/3.2.rst:1192 +msgid "" +"If no configuration is set-up before a logging event occurs, there is now a " +"default configuration using a :class:`~logging.StreamHandler` directed to " +":attr:`sys.stderr` for events of ``WARNING`` level or higher. Formerly, an " +"event occurring before a configuration was set-up would either raise an " +"exception or silently drop the event depending on the value of " +":attr:`logging.raiseExceptions`. The new default handler is stored in " +":attr:`logging.lastResort`." +msgstr "" + +#: ../../whatsnew/3.2.rst:1200 +msgid "" +"The use of filters has been simplified. Instead of creating a " +":class:`~logging.Filter` object, the predicate can be any Python callable " +"that returns ``True`` or ``False``." +msgstr "" + +#: ../../whatsnew/3.2.rst:1204 +msgid "" +"There were a number of other improvements that add flexibility and simplify " +"configuration. See the module documentation for a full listing of changes " +"in Python 3.2." +msgstr "" + +#: ../../whatsnew/3.2.rst:1209 +msgid "csv" +msgstr "csv" + +#: ../../whatsnew/3.2.rst:1211 +msgid "" +"The :mod:`csv` module now supports a new dialect, " +":class:`~csv.unix_dialect`, which applies quoting for all fields and a " +"traditional Unix style with ``'\\n'`` as the line terminator. The " +"registered dialect name is ``unix``." +msgstr "" + +#: ../../whatsnew/3.2.rst:1215 +msgid "" +"The :class:`csv.DictWriter` has a new method, " +":meth:`~csv.DictWriter.writeheader` for writing-out an initial row to " +"document the field names::" +msgstr "" + +#: ../../whatsnew/3.2.rst:1229 +msgid "" +"(New dialect suggested by Jay Talbot in :issue:`5975`, and the new method " +"suggested by Ed Abraham in :issue:`1537721`.)" +msgstr "" + +#: ../../whatsnew/3.2.rst:1233 +msgid "contextlib" +msgstr "contextlib" + +#: ../../whatsnew/3.2.rst:1235 +msgid "" +"There is a new and slightly mind-blowing tool " +":class:`~contextlib.ContextDecorator` that is helpful for creating a " +":term:`context manager` that does double duty as a function decorator." +msgstr "" + +#: ../../whatsnew/3.2.rst:1239 +msgid "" +"As a convenience, this new functionality is used by " +":func:`~contextlib.contextmanager` so that no extra effort is needed to " +"support both roles." +msgstr "" + +#: ../../whatsnew/3.2.rst:1243 +msgid "" +"The basic idea is that both context managers and function decorators can be " +"used for pre-action and post-action wrappers. Context managers wrap a group" +" of statements using a :keyword:`with` statement, and function decorators " +"wrap a group of statements enclosed in a function. So, occasionally there " +"is a need to write a pre-action or post-action wrapper that can be used in " +"either role." +msgstr "" + +#: ../../whatsnew/3.2.rst:1249 +msgid "" +"For example, it is sometimes useful to wrap functions or groups of " +"statements with a logger that can track the time of entry and time of exit." +" Rather than writing both a function decorator and a context manager for " +"the task, the :func:`~contextlib.contextmanager` provides both capabilities " +"in a single definition::" +msgstr "" + +#: ../../whatsnew/3.2.rst:1266 +msgid "Formerly, this would have only been usable as a context manager::" +msgstr "" + +#: ../../whatsnew/3.2.rst:1272 +msgid "Now, it can be used as a decorator as well::" +msgstr "" + +#: ../../whatsnew/3.2.rst:1279 +msgid "" +"Trying to fulfill two roles at once places some limitations on the " +"technique. Context managers normally have the flexibility to return an " +"argument usable by a :keyword:`with` statement, but there is no parallel for" +" function decorators." +msgstr "" + +#: ../../whatsnew/3.2.rst:1283 +msgid "" +"In the above example, there is not a clean way for the " +"*track_entry_and_exit* context manager to return a logging instance for use " +"in the body of enclosed statements." +msgstr "" + +#: ../../whatsnew/3.2.rst:1287 +msgid "(Contributed by Michael Foord in :issue:`9110`.)" +msgstr "(由 Michael Foord 在 :issue:`9110` 中贡献。)" + +#: ../../whatsnew/3.2.rst:1290 +msgid "decimal and fractions" +msgstr "" + +#: ../../whatsnew/3.2.rst:1292 +msgid "" +"Mark Dickinson crafted an elegant and efficient scheme for assuring that " +"different numeric datatypes will have the same hash value whenever their " +"actual values are equal (:issue:`8188`)::" +msgstr "" + +#: ../../whatsnew/3.2.rst:1299 +msgid "" +"Some of the hashing details are exposed through a new attribute, " +":attr:`sys.hash_info`, which describes the bit width of the hash value, the " +"prime modulus, the hash values for *infinity* and *nan*, and the multiplier " +"used for the imaginary part of a number:" +msgstr "" + +#: ../../whatsnew/3.2.rst:1307 +msgid "" +"An early decision to limit the inter-operability of various numeric types " +"has been relaxed. It is still unsupported (and ill-advised) to have " +"implicit mixing in arithmetic expressions such as ``Decimal('1.1') + " +"float('1.1')`` because the latter loses information in the process of " +"constructing the binary float. However, since existing floating point value" +" can be converted losslessly to either a decimal or rational representation," +" it makes sense to add them to the constructor and to support mixed-type " +"comparisons." +msgstr "" + +#: ../../whatsnew/3.2.rst:1315 +msgid "" +"The :class:`decimal.Decimal` constructor now accepts :class:`float` objects " +"directly so there in no longer a need to use the " +":meth:`~decimal.Decimal.from_float` method (:issue:`8257`)." +msgstr "" + +#: ../../whatsnew/3.2.rst:1319 +msgid "" +"Mixed type comparisons are now fully supported so that " +":class:`~decimal.Decimal` objects can be directly compared with " +":class:`float` and :class:`fractions.Fraction` (:issue:`2531` and " +":issue:`8188`)." +msgstr "" + +#: ../../whatsnew/3.2.rst:1323 +msgid "" +"Similar changes were made to :class:`fractions.Fraction` so that the " +":meth:`~fractions.Fraction.from_float()` and " +":meth:`~fractions.Fraction.from_decimal` methods are no longer needed " +"(:issue:`8294`):" +msgstr "" + +#: ../../whatsnew/3.2.rst:1334 +msgid "" +"Another useful change for the :mod:`decimal` module is that the " +":attr:`Context.clamp` attribute is now public. This is useful in creating " +"contexts that correspond to the decimal interchange formats specified in " +"IEEE 754 (see :issue:`8540`)." +msgstr "" + +#: ../../whatsnew/3.2.rst:1339 +msgid "(Contributed by Mark Dickinson and Raymond Hettinger.)" +msgstr "(由 Mark Dickinson 和 Raymond Hettinger贡献。)" + +#: ../../whatsnew/3.2.rst:1342 +msgid "ftp" +msgstr "ftp" + +#: ../../whatsnew/3.2.rst:1344 +msgid "" +"The :class:`ftplib.FTP` class now supports the context management protocol " +"to unconditionally consume :exc:`socket.error` exceptions and to close the " +"FTP connection when done::" +msgstr "" + +#: ../../whatsnew/3.2.rst:1359 +msgid "" +"Other file-like objects such as :class:`mmap.mmap` and " +":func:`fileinput.input` also grew auto-closing context managers::" +msgstr "" +"其他文件型对象如 :class:`mmap.mmap` 和 :func:`fileinput.input` 也有了支持自动关闭的上下文管理器::" + +#: ../../whatsnew/3.2.rst:1366 +msgid "" +"(Contributed by Tarek Ziadé and Giampaolo Rodolà in :issue:`4972`, and by " +"Georg Brandl in :issue:`8046` and :issue:`1286`.)" +msgstr "" +"(由 Tarek Ziadé 和 Giampaolo Rodolà 在 :issue:`4972` 贡献,由 Georg Brandl 在 " +":issue:`8046` 和 :issue:`1286` 贡献。)" + +#: ../../whatsnew/3.2.rst:1369 +msgid "" +"The :class:`~ftplib.FTP_TLS` class now accepts a *context* parameter, which " +"is a :class:`ssl.SSLContext` object allowing bundling SSL configuration " +"options, certificates and private keys into a single (potentially long-" +"lived) structure." +msgstr "" + +#: ../../whatsnew/3.2.rst:1373 +msgid "(Contributed by Giampaolo Rodolà; :issue:`8806`.)" +msgstr "(由 Giampaolo Rodolà 在 :issue:`8806` 中贡献。)" + +#: ../../whatsnew/3.2.rst:1376 +msgid "popen" +msgstr "popen" + +#: ../../whatsnew/3.2.rst:1378 +msgid "" +"The :func:`os.popen` and :func:`subprocess.Popen` functions now support " +":keyword:`with` statements for auto-closing of the file descriptors." +msgstr "" +":func:`os.popen` 和 :func:`subprocess.Popen` 函数现在支持使用 :keyword:`with` " +"语句来自动关闭文件描述符。" + +#: ../../whatsnew/3.2.rst:1381 +msgid "" +"(Contributed by Antoine Pitrou and Brian Curtin in :issue:`7461` and " +":issue:`10554`.)" +msgstr "" +"(由 Antoine Pitrou 和 Brian Curtin 在 :issue:`7461` 和 :issue:`10554` 中贡献。)" + +#: ../../whatsnew/3.2.rst:1385 +msgid "select" +msgstr "select" + +#: ../../whatsnew/3.2.rst:1387 +msgid "" +"The :mod:`select` module now exposes a new, constant attribute, " +":attr:`~select.PIPE_BUF`, which gives the minimum number of bytes which are " +"guaranteed not to block when :func:`select.select` says a pipe is ready for " +"writing." +msgstr "" + +#: ../../whatsnew/3.2.rst:1396 +msgid "(Available on Unix systems. Patch by Sébastien Sablé in :issue:`9862`)" +msgstr "(在 Unix 系统上可用。 由 Sébastien Sablé 在 :issue:`9862` 中提供补丁)" + +#: ../../whatsnew/3.2.rst:1399 +msgid "gzip and zipfile" +msgstr "gzip 和 zipfile" + +#: ../../whatsnew/3.2.rst:1401 +msgid "" +":class:`gzip.GzipFile` now implements the :class:`io.BufferedIOBase` " +":term:`abstract base class` (except for ``truncate()``). It also has a " +":meth:`~gzip.GzipFile.peek` method and supports unseekable as well as zero-" +"padded file objects." +msgstr "" + +#: ../../whatsnew/3.2.rst:1406 +msgid "" +"The :mod:`gzip` module also gains the :func:`~gzip.compress` and " +":func:`~gzip.decompress` functions for easier in-memory compression and " +"decompression. Keep in mind that text needs to be encoded as :class:`bytes`" +" before compressing and decompressing:" +msgstr "" + +#: ../../whatsnew/3.2.rst:1423 +msgid "" +"(Contributed by Anand B. Pillai in :issue:`3488`; and by Antoine Pitrou, Nir" +" Aides and Brian Curtin in :issue:`9962`, :issue:`1675951`, :issue:`7471` " +"and :issue:`2846`.)" +msgstr "" +"(由 Anand B. Pillai 在 :issue:`3488` 中贡献,由Antoine Pitrou, Nir Aides 和 Brian " +"Curtin 在 :issue:`9962`,:issue:`1675951` ,:issue:`7471` 和 :issue:`2846` 中贡献。)" + +#: ../../whatsnew/3.2.rst:1427 +msgid "" +"Also, the :class:`zipfile.ZipExtFile` class was reworked internally to " +"represent files stored inside an archive. The new implementation is " +"significantly faster and can be wrapped in an :class:`io.BufferedReader` " +"object for more speedups. It also solves an issue where interleaved calls " +"to *read* and *readline* gave the wrong results." +msgstr "" + +#: ../../whatsnew/3.2.rst:1433 +msgid "(Patch submitted by Nir Aides in :issue:`7610`.)" +msgstr "(补丁由 Nir Aides 在 :issue:`7610` 中提交。)" + +#: ../../whatsnew/3.2.rst:1436 +msgid "tarfile" +msgstr "tarfile" + +#: ../../whatsnew/3.2.rst:1438 +msgid "" +"The :class:`~tarfile.TarFile` class can now be used as a context manager. " +"In addition, its :meth:`~tarfile.TarFile.add` method has a new option, " +"*filter*, that controls which files are added to the archive and allows the " +"file metadata to be edited." +msgstr "" + +#: ../../whatsnew/3.2.rst:1443 +msgid "" +"The new *filter* option replaces the older, less flexible *exclude* " +"parameter which is now deprecated. If specified, the optional *filter* " +"parameter needs to be a :term:`keyword argument`. The user-supplied filter " +"function accepts a :class:`~tarfile.TarInfo` object and returns an updated " +":class:`~tarfile.TarInfo` object, or if it wants the file to be excluded, " +"the function can return ``None``::" +msgstr "" + +#: ../../whatsnew/3.2.rst:1467 +msgid "" +"(Proposed by Tarek Ziadé and implemented by Lars Gustäbel in :issue:`6856`.)" +msgstr "(由 Tarek Ziadé 提议并由 Lars Gustäbel 在 :issue:`6856` 中实现。)" + +#: ../../whatsnew/3.2.rst:1470 +msgid "hashlib" +msgstr "hashlib" + +#: ../../whatsnew/3.2.rst:1472 +msgid "" +"The :mod:`hashlib` module has two new constant attributes listing the " +"hashing algorithms guaranteed to be present in all implementations and those" +" available on the current implementation::" +msgstr "" + +#: ../../whatsnew/3.2.rst:1487 +msgid "(Suggested by Carl Chenet in :issue:`7418`.)" +msgstr "(由 Carl Chenet 在 :issue:`7418` 中建议。)" + +#: ../../whatsnew/3.2.rst:1490 +msgid "ast" +msgstr "ast" + +#: ../../whatsnew/3.2.rst:1492 +msgid "" +"The :mod:`ast` module has a wonderful a general-purpose tool for safely " +"evaluating expression strings using the Python literal syntax. The " +":func:`ast.literal_eval` function serves as a secure alternative to the " +"builtin :func:`eval` function which is easily abused. Python 3.2 adds " +":class:`bytes` and :class:`set` literals to the list of supported types: " +"strings, bytes, numbers, tuples, lists, dicts, sets, booleans, and ``None``." +msgstr "" + +#: ../../whatsnew/3.2.rst:1513 +msgid "(Implemented by Benjamin Peterson and Georg Brandl.)" +msgstr "(由Benjamin Peterson 和 Georg Brandl 实现。)" + +#: ../../whatsnew/3.2.rst:1516 +msgid "os" +msgstr "os" + +#: ../../whatsnew/3.2.rst:1518 +msgid "" +"Different operating systems use various encodings for filenames and " +"environment variables. The :mod:`os` module provides two new functions, " +":func:`~os.fsencode` and :func:`~os.fsdecode`, for encoding and decoding " +"filenames:" +msgstr "" + +#: ../../whatsnew/3.2.rst:1528 +msgid "" +"Some operating systems allow direct access to encoded bytes in the " +"environment. If so, the :attr:`os.supports_bytes_environ` constant will be " +"true." +msgstr "" + +#: ../../whatsnew/3.2.rst:1532 +msgid "" +"For direct access to encoded environment variables (if available), use the " +"new :func:`os.getenvb` function or use :data:`os.environb` which is a bytes " +"version of :data:`os.environ`." +msgstr "" + +#: ../../whatsnew/3.2.rst:1536 +msgid "(Contributed by Victor Stinner.)" +msgstr "(由 Victor Stinner 贡献。)" + +#: ../../whatsnew/3.2.rst:1539 +msgid "shutil" +msgstr "shutil" + +#: ../../whatsnew/3.2.rst:1541 +msgid "The :func:`shutil.copytree` function has two new options:" +msgstr ":func:`shutil.copytree` 函数增加了两个新选项:" + +#: ../../whatsnew/3.2.rst:1543 +msgid "" +"*ignore_dangling_symlinks*: when ``symlinks=False`` so that the function " +"copies a file pointed to by a symlink, not the symlink itself. This option " +"will silence the error raised if the file doesn't exist." +msgstr "" + +#: ../../whatsnew/3.2.rst:1547 +msgid "" +"*copy_function*: is a callable that will be used to copy files. " +":func:`shutil.copy2` is used by default." +msgstr "" + +#: ../../whatsnew/3.2.rst:1550 ../../whatsnew/3.2.rst:1588 +msgid "(Contributed by Tarek Ziadé.)" +msgstr "(由 Tarek Ziadé 贡献。)" + +#: ../../whatsnew/3.2.rst:1552 +msgid "" +"In addition, the :mod:`shutil` module now supports :ref:`archiving " +"operations ` for zipfiles, uncompressed tarfiles, " +"gzipped tarfiles, and bzipped tarfiles. And there are functions for " +"registering additional archiving file formats (such as xz compressed " +"tarfiles or custom formats)." +msgstr "" + +#: ../../whatsnew/3.2.rst:1557 +msgid "" +"The principal functions are :func:`~shutil.make_archive` and " +":func:`~shutil.unpack_archive`. By default, both operate on the current " +"directory (which can be set by :func:`os.chdir`) and on any sub-directories." +" The archive filename needs to be specified with a full pathname. The " +"archiving step is non-destructive (the original files are left unchanged)." +msgstr "" + +#: ../../whatsnew/3.2.rst:1591 +msgid "sqlite3" +msgstr "sqlite3" + +#: ../../whatsnew/3.2.rst:1593 +msgid "" +"The :mod:`sqlite3` module was updated to pysqlite version 2.6.0. It has two" +" new capabilities." +msgstr ":mod:`sqlite3` 模块被更新至 pysqlite 2.6.0 版。 它拥有两个新功能。" + +#: ../../whatsnew/3.2.rst:1595 +msgid "" +"The :attr:`sqlite3.Connection.in_transit` attribute is true if there is an " +"active transaction for uncommitted changes." +msgstr "" + +#: ../../whatsnew/3.2.rst:1598 +msgid "" +"The :meth:`sqlite3.Connection.enable_load_extension` and " +":meth:`sqlite3.Connection.load_extension` methods allows you to load SQLite " +"extensions from \".so\" files. One well-known extension is the fulltext-" +"search extension distributed with SQLite." +msgstr "" + +#: ../../whatsnew/3.2.rst:1603 +msgid "(Contributed by R. David Murray and Shashwat Anand; :issue:`8845`.)" +msgstr "(由 R. David Murray 和 Shashwat Anand 在 :issue:`8845` 中贡献。)" + +#: ../../whatsnew/3.2.rst:1606 +msgid "html" +msgstr "html" + +#: ../../whatsnew/3.2.rst:1608 +msgid "" +"A new :mod:`html` module was introduced with only a single function, " +":func:`~html.escape`, which is used for escaping reserved characters from " +"HTML markup:" +msgstr "" + +#: ../../whatsnew/3.2.rst:1617 +msgid "socket" +msgstr "socket" + +#: ../../whatsnew/3.2.rst:1619 +msgid "The :mod:`socket` module has two new improvements." +msgstr ":mod:`socket` 模块有两项新改进。" + +#: ../../whatsnew/3.2.rst:1621 +msgid "" +"Socket objects now have a :meth:`~socket.socket.detach()` method which puts " +"the socket into closed state without actually closing the underlying file " +"descriptor. The latter can then be reused for other purposes. (Added by " +"Antoine Pitrou; :issue:`8524`.)" +msgstr "" + +#: ../../whatsnew/3.2.rst:1626 +msgid "" +":func:`socket.create_connection` now supports the context management " +"protocol to unconditionally consume :exc:`socket.error` exceptions and to " +"close the socket when done. (Contributed by Giampaolo Rodolà; " +":issue:`9794`.)" +msgstr "" + +#: ../../whatsnew/3.2.rst:1632 +msgid "ssl" +msgstr "ssl" + +#: ../../whatsnew/3.2.rst:1634 +msgid "" +"The :mod:`ssl` module added a number of features to satisfy common " +"requirements for secure (encrypted, authenticated) internet connections:" +msgstr "" + +#: ../../whatsnew/3.2.rst:1637 +msgid "" +"A new class, :class:`~ssl.SSLContext`, serves as a container for persistent " +"SSL data, such as protocol settings, certificates, private keys, and various" +" other options. It includes a :meth:`~ssl.SSLContext.wrap_socket` for " +"creating an SSL socket from an SSL context." +msgstr "" + +#: ../../whatsnew/3.2.rst:1642 +msgid "" +"A new function, :func:`ssl.match_hostname`, supports server identity " +"verification for higher-level protocols by implementing the rules of HTTPS " +"(from :rfc:`2818`) which are also suitable for other protocols." +msgstr "" + +#: ../../whatsnew/3.2.rst:1646 +msgid "" +"The :func:`ssl.wrap_socket` constructor function now takes a *ciphers* " +"argument. The *ciphers* string lists the allowed encryption algorithms " +"using the format described in the `OpenSSL documentation " +"`__." +msgstr "" + +#: ../../whatsnew/3.2.rst:1651 +msgid "" +"When linked against recent versions of OpenSSL, the :mod:`ssl` module now " +"supports the Server Name Indication extension to the TLS protocol, allowing " +"multiple \"virtual hosts\" using different certificates on a single IP port." +" This extension is only supported in client mode, and is activated by " +"passing the *server_hostname* argument to " +":meth:`ssl.SSLContext.wrap_socket`." +msgstr "" + +#: ../../whatsnew/3.2.rst:1657 +msgid "" +"Various options have been added to the :mod:`ssl` module, such as " +":data:`~ssl.OP_NO_SSLv2` which disables the insecure and obsolete SSLv2 " +"protocol." +msgstr "" + +#: ../../whatsnew/3.2.rst:1661 +msgid "" +"The extension now loads all the OpenSSL ciphers and digest algorithms. If " +"some SSL certificates cannot be verified, they are reported as an \"unknown " +"algorithm\" error." +msgstr "" + +#: ../../whatsnew/3.2.rst:1665 +msgid "" +"The version of OpenSSL being used is now accessible using the module " +"attributes :data:`ssl.OPENSSL_VERSION` (a string), " +":data:`ssl.OPENSSL_VERSION_INFO` (a 5-tuple), and " +":data:`ssl.OPENSSL_VERSION_NUMBER` (an integer)." +msgstr "" + +#: ../../whatsnew/3.2.rst:1670 +msgid "" +"(Contributed by Antoine Pitrou in :issue:`8850`, :issue:`1589`, " +":issue:`8322`, :issue:`5639`, :issue:`4870`, :issue:`8484`, and " +":issue:`8321`.)" +msgstr "" +"(由 Antoine Pitrou 在 :issue:`8850`, :issue:`1589`, :issue:`8322`, " +":issue:`5639`, :issue:`4870`, :issue:`8484` 和 :issue:`8321` 中贡献。)" + +#: ../../whatsnew/3.2.rst:1674 +msgid "nntp" +msgstr "nntp" + +#: ../../whatsnew/3.2.rst:1676 +msgid "" +"The :mod:`nntplib` module has a revamped implementation with better bytes " +"and text semantics as well as more practical APIs. These improvements break" +" compatibility with the nntplib version in Python 3.1, which was partly " +"dysfunctional in itself." +msgstr "" + +#: ../../whatsnew/3.2.rst:1681 +msgid "" +"Support for secure connections through both implicit (using " +":class:`nntplib.NNTP_SSL`) and explicit (using " +":meth:`nntplib.NNTP.starttls`) TLS has also been added." +msgstr "" + +#: ../../whatsnew/3.2.rst:1685 +msgid "" +"(Contributed by Antoine Pitrou in :issue:`9360` and Andrew Vant in " +":issue:`1926`.)" +msgstr "" +"(由 Antoine Pitrou 在 :issue:`9360` 中贡献,由 Andrew Vant 在 :issue:`1926` 中贡献。)" + +#: ../../whatsnew/3.2.rst:1688 +msgid "certificates" +msgstr "certificates" + +#: ../../whatsnew/3.2.rst:1690 +msgid "" +":class:`http.client.HTTPSConnection`, :class:`urllib.request.HTTPSHandler` " +"and :func:`urllib.request.urlopen` now take optional arguments to allow for " +"server certificate checking against a set of Certificate Authorities, as " +"recommended in public uses of HTTPS." +msgstr "" + +#: ../../whatsnew/3.2.rst:1695 +msgid "(Added by Antoine Pitrou, :issue:`9003`.)" +msgstr "(由 Antoine Pitrou 添加,:issue:`9003`。)" + +#: ../../whatsnew/3.2.rst:1698 +msgid "imaplib" +msgstr "imaplib" + +#: ../../whatsnew/3.2.rst:1700 +msgid "" +"Support for explicit TLS on standard IMAP4 connections has been added " +"through the new :mod:`imaplib.IMAP4.starttls` method." +msgstr "" + +#: ../../whatsnew/3.2.rst:1703 +msgid "(Contributed by Lorenzo M. Catucci and Antoine Pitrou, :issue:`4471`.)" +msgstr "(由 Lorenzo M. Catucci 和 Antoine Pitrou 在 :issue:`4471` 中贡献。)" + +#: ../../whatsnew/3.2.rst:1706 +msgid "http.client" +msgstr "http.client" + +#: ../../whatsnew/3.2.rst:1708 +msgid "" +"There were a number of small API improvements in the :mod:`http.client` " +"module. The old-style HTTP 0.9 simple responses are no longer supported and " +"the *strict* parameter is deprecated in all classes." +msgstr "" + +#: ../../whatsnew/3.2.rst:1712 +msgid "" +"The :class:`~http.client.HTTPConnection` and " +":class:`~http.client.HTTPSConnection` classes now have a *source_address* " +"parameter for a (host, port) tuple indicating where the HTTP connection is " +"made from." +msgstr "" + +#: ../../whatsnew/3.2.rst:1717 +msgid "" +"Support for certificate checking and HTTPS virtual hosts were added to " +":class:`~http.client.HTTPSConnection`." +msgstr "" + +#: ../../whatsnew/3.2.rst:1720 +msgid "" +"The :meth:`~http.client.HTTPConnection.request` method on connection objects" +" allowed an optional *body* argument so that a :term:`file object` could be " +"used to supply the content of the request. Conveniently, the *body* " +"argument now also accepts an :term:`iterable` object so long as it includes " +"an explicit ``Content-Length`` header. This extended interface is much more" +" flexible than before." +msgstr "" + +#: ../../whatsnew/3.2.rst:1727 +msgid "" +"To establish an HTTPS connection through a proxy server, there is a new " +":meth:`~http.client.HTTPConnection.set_tunnel` method that sets the host and" +" port for HTTP Connect tunneling." +msgstr "" + +#: ../../whatsnew/3.2.rst:1731 +msgid "" +"To match the behavior of :mod:`http.server`, the HTTP client library now " +"also encodes headers with ISO-8859-1 (Latin-1) encoding. It was already " +"doing that for incoming headers, so now the behavior is consistent for both " +"incoming and outgoing traffic. (See work by Armin Ronacher in " +":issue:`10980`.)" +msgstr "" + +#: ../../whatsnew/3.2.rst:1737 +msgid "unittest" +msgstr "unittest" + +#: ../../whatsnew/3.2.rst:1739 +msgid "" +"The unittest module has a number of improvements supporting test discovery " +"for packages, easier experimentation at the interactive prompt, new testcase" +" methods, improved diagnostic messages for test failures, and better method " +"names." +msgstr "" + +#: ../../whatsnew/3.2.rst:1744 +msgid "" +"The command-line call ``python -m unittest`` can now accept file paths " +"instead of module names for running specific tests (:issue:`10620`). The " +"new test discovery can find tests within packages, locating any test " +"importable from the top-level directory. The top-level directory can be " +"specified with the `-t` option, a pattern for matching files with ``-p``, " +"and a directory to start discovery with ``-s``:" +msgstr "" + +#: ../../whatsnew/3.2.rst:1755 ../../whatsnew/3.2.rst:1764 +#: ../../whatsnew/3.2.rst:1920 +msgid "(Contributed by Michael Foord.)" +msgstr "(由 Michael Foord 贡献)" + +#: ../../whatsnew/3.2.rst:1757 +msgid "" +"Experimentation at the interactive prompt is now easier because the " +":class:`unittest.case.TestCase` class can now be instantiated without " +"arguments:" +msgstr "" + +#: ../../whatsnew/3.2.rst:1766 +msgid "" +"The :mod:`unittest` module has two new methods, " +":meth:`~unittest.TestCase.assertWarns` and " +":meth:`~unittest.TestCase.assertWarnsRegex` to verify that a given warning " +"type is triggered by the code under test::" +msgstr "" + +#: ../../whatsnew/3.2.rst:1774 +msgid "(Contributed by Antoine Pitrou, :issue:`9754`.)" +msgstr "(由 Antoine Pitrou 在 :issue:`9754` 中贡献。)" + +#: ../../whatsnew/3.2.rst:1776 +msgid "" +"Another new method, :meth:`~unittest.TestCase.assertCountEqual` is used to " +"compare two iterables to determine if their element counts are equal " +"(whether the same elements are present with the same number of occurrences " +"regardless of order)::" +msgstr "" + +#: ../../whatsnew/3.2.rst:1786 +msgid "" +"A principal feature of the unittest module is an effort to produce " +"meaningful diagnostics when a test fails. When possible, the failure is " +"recorded along with a diff of the output. This is especially helpful for " +"analyzing log files of failed test runs. However, since diffs can sometime " +"be voluminous, there is a new :attr:`~unittest.TestCase.maxDiff` attribute " +"that sets maximum length of diffs displayed." +msgstr "" + +#: ../../whatsnew/3.2.rst:1793 +msgid "" +"In addition, the method names in the module have undergone a number of " +"clean-ups." +msgstr "" + +#: ../../whatsnew/3.2.rst:1795 +msgid "" +"For example, :meth:`~unittest.TestCase.assertRegex` is the new name for " +":meth:`~unittest.TestCase.assertRegexpMatches` which was misnamed because " +"the test uses :func:`re.search`, not :func:`re.match`. Other methods using " +"regular expressions are now named using short form \"Regex\" in preference " +"to \"Regexp\" -- this matches the names used in other unittest " +"implementations, matches Python's old name for the :mod:`re` module, and it " +"has unambiguous camel-casing." +msgstr "" + +#: ../../whatsnew/3.2.rst:1803 +msgid "(Contributed by Raymond Hettinger and implemented by Ezio Melotti.)" +msgstr "(由 Raymond Hettinger 贡献并由 Ezio Melotti 实现。)" + +#: ../../whatsnew/3.2.rst:1805 +msgid "" +"To improve consistency, some long-standing method aliases are being " +"deprecated in favor of the preferred names:" +msgstr "" + +#: ../../whatsnew/3.2.rst:1809 +msgid "Old Name" +msgstr "旧名称" + +#: ../../whatsnew/3.2.rst:1809 +msgid "Preferred Name" +msgstr "首选名称" + +#: ../../whatsnew/3.2.rst:1811 +msgid ":meth:`assert_`" +msgstr ":meth:`assert_`" + +#: ../../whatsnew/3.2.rst:1811 +msgid ":meth:`.assertTrue`" +msgstr ":meth:`.assertTrue`" + +#: ../../whatsnew/3.2.rst:1812 +msgid ":meth:`assertEquals`" +msgstr ":meth:`assertEquals`" + +#: ../../whatsnew/3.2.rst:1812 +msgid ":meth:`.assertEqual`" +msgstr ":meth:`.assertEqual`" + +#: ../../whatsnew/3.2.rst:1813 +msgid ":meth:`assertNotEquals`" +msgstr ":meth:`assertNotEquals`" + +#: ../../whatsnew/3.2.rst:1813 +msgid ":meth:`.assertNotEqual`" +msgstr ":meth:`.assertNotEqual`" + +#: ../../whatsnew/3.2.rst:1814 +msgid ":meth:`assertAlmostEquals`" +msgstr ":meth:`assertAlmostEquals`" + +#: ../../whatsnew/3.2.rst:1814 +msgid ":meth:`.assertAlmostEqual`" +msgstr ":meth:`.assertAlmostEqual`" + +#: ../../whatsnew/3.2.rst:1815 +msgid ":meth:`assertNotAlmostEquals`" +msgstr ":meth:`assertNotAlmostEquals`" + +#: ../../whatsnew/3.2.rst:1815 +msgid ":meth:`.assertNotAlmostEqual`" +msgstr ":meth:`.assertNotAlmostEqual`" + +#: ../../whatsnew/3.2.rst:1818 +msgid "" +"Likewise, the ``TestCase.fail*`` methods deprecated in Python 3.1 are " +"expected to be removed in Python 3.3. Also see the :ref:`deprecated-" +"aliases` section in the :mod:`unittest` documentation." +msgstr "" + +#: ../../whatsnew/3.2.rst:1822 +msgid "(Contributed by Ezio Melotti; :issue:`9424`.)" +msgstr "(由 Ezio Melotti 在 :issue:`9424` 中贡献。)" + +#: ../../whatsnew/3.2.rst:1824 +msgid "" +"The :meth:`~unittest.TestCase.assertDictContainsSubset` method was " +"deprecated because it was misimplemented with the arguments in the wrong " +"order. This created hard-to-debug optical illusions where tests like " +"``TestCase().assertDictContainsSubset({'a':1, 'b':2}, {'a':1})`` would fail." +msgstr "" + +#: ../../whatsnew/3.2.rst:1832 +msgid "random" +msgstr "random" + +#: ../../whatsnew/3.2.rst:1834 +msgid "" +"The integer methods in the :mod:`random` module now do a better job of " +"producing uniform distributions. Previously, they computed selections with " +"``int(n*random())`` which had a slight bias whenever *n* was not a power of " +"two. Now, multiple selections are made from a range up to the next power of " +"two and a selection is kept only when it falls within the range ``0 <= x < " +"n``. The functions and methods affected are :func:`~random.randrange`, " +":func:`~random.randint`, :func:`~random.choice`, :func:`~random.shuffle` and" +" :func:`~random.sample`." +msgstr "" + +#: ../../whatsnew/3.2.rst:1843 +msgid "(Contributed by Raymond Hettinger; :issue:`9025`.)" +msgstr "(由 Raymond Hettinger 在 :issue:`9025` 中贡献。)" + +#: ../../whatsnew/3.2.rst:1846 +msgid "poplib" +msgstr "poplib" + +#: ../../whatsnew/3.2.rst:1848 +msgid "" +":class:`~poplib.POP3_SSL` class now accepts a *context* parameter, which is " +"a :class:`ssl.SSLContext` object allowing bundling SSL configuration " +"options, certificates and private keys into a single (potentially long-" +"lived) structure." +msgstr "" + +#: ../../whatsnew/3.2.rst:1853 +msgid "(Contributed by Giampaolo Rodolà; :issue:`8807`.)" +msgstr "(由 Giampaolo Rodolà 在 :issue:`8807` 中贡献。)" + +#: ../../whatsnew/3.2.rst:1856 +msgid "asyncore" +msgstr "asyncore" + +#: ../../whatsnew/3.2.rst:1858 +msgid "" +":class:`asyncore.dispatcher` now provides a " +":meth:`~asyncore.dispatcher.handle_accepted()` method returning a `(sock, " +"addr)` pair which is called when a connection has actually been established " +"with a new remote endpoint. This is supposed to be used as a replacement for" +" old :meth:`~asyncore.dispatcher.handle_accept()` and avoids the user to " +"call :meth:`~asyncore.dispatcher.accept()` directly." +msgstr "" + +#: ../../whatsnew/3.2.rst:1865 +msgid "(Contributed by Giampaolo Rodolà; :issue:`6706`.)" +msgstr "(由 Giampaolo Rodolà 在 :issue:`6706` 中贡献。)" + +#: ../../whatsnew/3.2.rst:1868 +msgid "tempfile" +msgstr "tempfile" + +#: ../../whatsnew/3.2.rst:1870 +msgid "" +"The :mod:`tempfile` module has a new context manager, " +":class:`~tempfile.TemporaryDirectory` which provides easy deterministic " +"cleanup of temporary directories::" +msgstr "" + +#: ../../whatsnew/3.2.rst:1877 +msgid "(Contributed by Neil Schemenauer and Nick Coghlan; :issue:`5178`.)" +msgstr "(由 Neil Schemenauer 和 Nick Coghlan 在 :issue:`5178` 中贡献。)" + +#: ../../whatsnew/3.2.rst:1880 +msgid "inspect" +msgstr "inspect" + +#: ../../whatsnew/3.2.rst:1882 +msgid "" +"The :mod:`inspect` module has a new function " +":func:`~inspect.getgeneratorstate` to easily identify the current state of a" +" generator-iterator::" +msgstr "" +":mod:`inspect` 模块有一个新函数 :func:`~inspect.getgeneratorstate` " +"用来方便地标识一个生成器迭代器的当前状态::" + +#: ../../whatsnew/3.2.rst:1900 +msgid "(Contributed by Rodolpho Eckhardt and Nick Coghlan, :issue:`10220`.)" +msgstr "(由 Rodolpho Eckhardt 和 Nick Coghlan 在 :issue:`10220` 中贡献。)" + +#: ../../whatsnew/3.2.rst:1902 +msgid "" +"To support lookups without the possibility of activating a dynamic " +"attribute, the :mod:`inspect` module has a new function, " +":func:`~inspect.getattr_static`. Unlike :func:`hasattr`, this is a true " +"read-only search, guaranteed not to change state while it is searching::" +msgstr "" + +#: ../../whatsnew/3.2.rst:1923 +msgid "pydoc" +msgstr "pydoc" + +#: ../../whatsnew/3.2.rst:1925 +msgid "" +"The :mod:`pydoc` module now provides a much-improved Web server interface, " +"as well as a new command-line option ``-b`` to automatically open a browser " +"window to display that server:" +msgstr "" + +#: ../../whatsnew/3.2.rst:1933 +msgid "(Contributed by Ron Adam; :issue:`2001`.)" +msgstr "(由 Ron Adam 在 :issue:`2001` 中贡献。)" + +#: ../../whatsnew/3.2.rst:1936 +msgid "dis" +msgstr "dis" + +#: ../../whatsnew/3.2.rst:1938 +msgid "" +"The :mod:`dis` module gained two new functions for inspecting code, " +":func:`~dis.code_info` and :func:`~dis.show_code`. Both provide detailed " +"code object information for the supplied function, method, source code " +"string or code object. The former returns a string and the latter prints " +"it::" +msgstr "" + +#: ../../whatsnew/3.2.rst:1965 +msgid "" +"In addition, the :func:`~dis.dis` function now accepts string arguments so " +"that the common idiom ``dis(compile(s, '', 'eval'))`` can be shortened to " +"``dis(s)``::" +msgstr "" + +#: ../../whatsnew/3.2.rst:1987 +msgid "" +"Taken together, these improvements make it easier to explore how CPython is " +"implemented and to see for yourself what the language syntax does under-the-" +"hood." +msgstr "" + +#: ../../whatsnew/3.2.rst:1991 +msgid "(Contributed by Nick Coghlan in :issue:`9147`.)" +msgstr "(由 Nick Coghlan 在 :issue:`9147` 中贡献。)" + +#: ../../whatsnew/3.2.rst:1994 +msgid "dbm" +msgstr "dbm" + +#: ../../whatsnew/3.2.rst:1996 +msgid "" +"All database modules now support the :meth:`get` and :meth:`setdefault` " +"methods." +msgstr "所有数据库模块现在都支持 :meth:`get` 和 :meth:`setdefault` 方法。" + +#: ../../whatsnew/3.2.rst:1998 +msgid "(Suggested by Ray Allen in :issue:`9523`.)" +msgstr "(由 Ray Allen 在 :issue:`9523` 中建议。)" + +#: ../../whatsnew/3.2.rst:2001 +msgid "ctypes" +msgstr "ctypes" + +#: ../../whatsnew/3.2.rst:2003 +msgid "" +"A new type, :class:`ctypes.c_ssize_t` represents the C :c:type:`ssize_t` " +"datatype." +msgstr "一个新类型 :class:`ctypes.c_ssize_t` 用来表示 C :c:type:`ssize_t` 数据类型。" + +#: ../../whatsnew/3.2.rst:2006 +msgid "site" +msgstr "site" + +#: ../../whatsnew/3.2.rst:2008 +msgid "" +"The :mod:`site` module has three new functions useful for reporting on the " +"details of a given Python installation." +msgstr ":mod:`site` 模块新增了三个用于报告给定 Python 安装版详细信息的函数。" + +#: ../../whatsnew/3.2.rst:2011 +msgid "" +":func:`~site.getsitepackages` lists all global site-packages directories." +msgstr ":func:`~site.getsitepackages` 列出所有全局 site-packages 目录。" + +#: ../../whatsnew/3.2.rst:2013 +msgid "" +":func:`~site.getuserbase` reports on the user's base directory where data " +"can be stored." +msgstr ":func:`~site.getuserbase` 报告可用来存储数据的用户基准目录。" + +#: ../../whatsnew/3.2.rst:2016 +msgid "" +":func:`~site.getusersitepackages` reveals the user-specific site-packages " +"directory path." +msgstr ":func:`~site.getusersitepackages` 将揭示用户专属的 site-packages 目录路径。" + +#: ../../whatsnew/3.2.rst:2031 +msgid "" +"Conveniently, some of site's functionality is accessible directly from the " +"command-line:" +msgstr "部分 site 功能可方便地直接通过命令行访问:" + +#: ../../whatsnew/3.2.rst:2041 +msgid "(Contributed by Tarek Ziadé in :issue:`6693`.)" +msgstr "(由 Tarek Ziadé 在 :issue:`6693` 中贡献。)" + +#: ../../whatsnew/3.2.rst:2044 +msgid "sysconfig" +msgstr "sysconfig" + +#: ../../whatsnew/3.2.rst:2046 +msgid "" +"The new :mod:`sysconfig` module makes it straightforward to discover " +"installation paths and configuration variables that vary across platforms " +"and installations." +msgstr "新增的 :mod:`sysconfig` 模块使得发现依赖于不同系统平台和安装版的安装路径和配置变量更为简单直观。" + +#: ../../whatsnew/3.2.rst:2050 +msgid "" +"The module offers access simple access functions for platform and version " +"information:" +msgstr "该模块提供了对平台和版本信息获取函数的访问:" + +#: ../../whatsnew/3.2.rst:2053 +msgid "" +":func:`~sysconfig.get_platform` returning values like *linux-i586* or " +"*macosx-10.6-ppc*." +msgstr "" +":func:`~sysconfig.get_platform` 将返回 *linux-i586* 或 *macosx-10.6-ppc* 形式的值。" + +#: ../../whatsnew/3.2.rst:2055 +msgid "" +":func:`~sysconfig.get_python_version` returns a Python version string such " +"as \"3.2\"." +msgstr ":func:`~sysconfig.get_python_version` 将返回 Python 版本字符串如 \"3.2\"。" + +#: ../../whatsnew/3.2.rst:2058 +msgid "" +"It also provides access to the paths and variables corresponding to one of " +"seven named schemes used by :mod:`distutils`. Those include *posix_prefix*," +" *posix_home*, *posix_user*, *nt*, *nt_user*, *os2*, *os2_home*:" +msgstr "" + +#: ../../whatsnew/3.2.rst:2062 +msgid "" +":func:`~sysconfig.get_paths` makes a dictionary containing installation " +"paths for the current installation scheme." +msgstr "" + +#: ../../whatsnew/3.2.rst:2064 +msgid "" +":func:`~sysconfig.get_config_vars` returns a dictionary of platform specific" +" variables." +msgstr "" + +#: ../../whatsnew/3.2.rst:2067 +msgid "There is also a convenient command-line interface:" +msgstr "还有一个方便的命令行界面:" + +#: ../../whatsnew/3.2.rst:2106 +msgid "(Moved out of Distutils by Tarek Ziadé.)" +msgstr "(由TarekZiadé 移出Distutils。)" + +#: ../../whatsnew/3.2.rst:2109 +msgid "pdb" +msgstr "pdb" + +#: ../../whatsnew/3.2.rst:2111 +msgid "" +"The :mod:`pdb` debugger module gained a number of usability improvements:" +msgstr "" + +#: ../../whatsnew/3.2.rst:2113 +msgid "" +":file:`pdb.py` now has a ``-c`` option that executes commands as given in a " +":file:`.pdbrc` script file." +msgstr "" + +#: ../../whatsnew/3.2.rst:2115 +msgid "" +"A :file:`.pdbrc` script file can contain ``continue`` and ``next`` commands " +"that continue debugging." +msgstr "" + +#: ../../whatsnew/3.2.rst:2117 +msgid "The :class:`Pdb` class constructor now accepts a *nosigint* argument." +msgstr "" + +#: ../../whatsnew/3.2.rst:2118 +msgid "" +"New commands: ``l(list)``, ``ll(long list)`` and ``source`` for listing " +"source code." +msgstr "" + +#: ../../whatsnew/3.2.rst:2120 +msgid "" +"New commands: ``display`` and ``undisplay`` for showing or hiding the value " +"of an expression if it has changed." +msgstr "" + +#: ../../whatsnew/3.2.rst:2122 +msgid "" +"New command: ``interact`` for starting an interactive interpreter containing" +" the global and local names found in the current scope." +msgstr "" + +#: ../../whatsnew/3.2.rst:2124 +msgid "Breakpoints can be cleared by breakpoint number." +msgstr "" + +#: ../../whatsnew/3.2.rst:2126 +msgid "(Contributed by Georg Brandl, Antonio Cuni and Ilya Sandler.)" +msgstr "(由Georg Brandl, Antonio Cuni 和 Ilya Sandler 贡献。)" + +#: ../../whatsnew/3.2.rst:2129 +msgid "configparser" +msgstr "configparser" + +#: ../../whatsnew/3.2.rst:2131 +msgid "" +"The :mod:`configparser` module was modified to improve usability and " +"predictability of the default parser and its supported INI syntax. The old " +":class:`ConfigParser` class was removed in favor of " +":class:`SafeConfigParser` which has in turn been renamed to " +":class:`~configparser.ConfigParser`. Support for inline comments is now " +"turned off by default and section or option duplicates are not allowed in a " +"single configuration source." +msgstr "" + +#: ../../whatsnew/3.2.rst:2138 +msgid "Config parsers gained a new API based on the mapping protocol::" +msgstr "" + +#: ../../whatsnew/3.2.rst:2166 +msgid "" +"The new API is implemented on top of the classical API, so custom parser " +"subclasses should be able to use it without modifications." +msgstr "" + +#: ../../whatsnew/3.2.rst:2169 +msgid "" +"The INI file structure accepted by config parsers can now be customized. " +"Users can specify alternative option/value delimiters and comment prefixes, " +"change the name of the *DEFAULT* section or switch the interpolation syntax." +msgstr "" + +#: ../../whatsnew/3.2.rst:2173 +msgid "" +"There is support for pluggable interpolation including an additional " +"interpolation handler :class:`~configparser.ExtendedInterpolation`::" +msgstr "" + +#: ../../whatsnew/3.2.rst:2206 +msgid "" +"A number of smaller features were also introduced, like support for " +"specifying encoding in read operations, specifying fallback values for get-" +"functions, or reading directly from dictionaries and strings." +msgstr "" + +#: ../../whatsnew/3.2.rst:2210 +msgid "(All changes contributed by Łukasz Langa.)" +msgstr "(所有改变均由 Łukasz Langa 贡献。)" + +#: ../../whatsnew/3.2.rst:2215 +msgid "urllib.parse" +msgstr "urllib.parse" + +#: ../../whatsnew/3.2.rst:2217 +msgid "" +"A number of usability improvements were made for the :mod:`urllib.parse` " +"module." +msgstr "" + +#: ../../whatsnew/3.2.rst:2219 +msgid "" +"The :func:`~urllib.parse.urlparse` function now supports `IPv6 " +"`_ addresses as described in " +":rfc:`2732`:" +msgstr "" + +#: ../../whatsnew/3.2.rst:2231 +msgid "" +"The :func:`~urllib.parse.urldefrag` function now returns a :term:`named " +"tuple`::" +msgstr "" + +#: ../../whatsnew/3.2.rst:2241 +msgid "" +"And, the :func:`~urllib.parse.urlencode` function is now much more flexible," +" accepting either a string or bytes type for the *query* argument. If it is" +" a string, then the *safe*, *encoding*, and *error* parameters are sent to " +":func:`~urllib.parse.quote_plus` for encoding::" +msgstr "" + +#: ../../whatsnew/3.2.rst:2252 +msgid "" +"As detailed in :ref:`parsing-ascii-encoded-bytes`, all the " +":mod:`urllib.parse` functions now accept ASCII-encoded byte strings as " +"input, so long as they are not mixed with regular strings. If ASCII-encoded" +" byte strings are given as parameters, the return types will also be an " +"ASCII-encoded byte strings:" +msgstr "" + +#: ../../whatsnew/3.2.rst:2261 +msgid "" +"(Work by Nick Coghlan, Dan Mahn, and Senthil Kumaran in :issue:`2987`, " +":issue:`5468`, and :issue:`9873`.)" +msgstr "" + +#: ../../whatsnew/3.2.rst:2265 +msgid "mailbox" +msgstr "mailbox" + +#: ../../whatsnew/3.2.rst:2267 +msgid "" +"Thanks to a concerted effort by R. David Murray, the :mod:`mailbox` module " +"has been fixed for Python 3.2. The challenge was that mailbox had been " +"originally designed with a text interface, but email messages are best " +"represented with :class:`bytes` because various parts of a message may have " +"different encodings." +msgstr "" + +#: ../../whatsnew/3.2.rst:2272 +msgid "" +"The solution harnessed the :mod:`email` package's binary support for parsing" +" arbitrary email messages. In addition, the solution required a number of " +"API changes." +msgstr "" + +#: ../../whatsnew/3.2.rst:2276 +msgid "" +"As expected, the :meth:`~mailbox.Mailbox.add` method for " +":class:`mailbox.Mailbox` objects now accepts binary input." +msgstr "" + +#: ../../whatsnew/3.2.rst:2279 +msgid "" +":class:`~io.StringIO` and text file input are deprecated. Also, string " +"input will fail early if non-ASCII characters are used. Previously it would" +" fail when the email was processed in a later step." +msgstr "" + +#: ../../whatsnew/3.2.rst:2283 +msgid "" +"There is also support for binary output. The " +":meth:`~mailbox.Mailbox.get_file` method now returns a file in the binary " +"mode (where it used to incorrectly set the file to text-mode). There is " +"also a new :meth:`~mailbox.Mailbox.get_bytes` method that returns a " +":class:`bytes` representation of a message corresponding to a given *key*." +msgstr "" + +#: ../../whatsnew/3.2.rst:2289 +msgid "" +"It is still possible to get non-binary output using the old API's " +":meth:`~mailbox.Mailbox.get_string` method, but that approach is not very " +"useful. Instead, it is best to extract messages from a " +":class:`~mailbox.Message` object or to load them from binary input." +msgstr "" + +#: ../../whatsnew/3.2.rst:2294 +msgid "" +"(Contributed by R. David Murray, with efforts from Steffen Daode Nurpmeso " +"and an initial patch by Victor Stinner in :issue:`9124`.)" +msgstr "" + +#: ../../whatsnew/3.2.rst:2298 +msgid "turtledemo" +msgstr "turtledemo" + +#: ../../whatsnew/3.2.rst:2300 +msgid "" +"The demonstration code for the :mod:`turtle` module was moved from the " +"*Demo* directory to main library. It includes over a dozen sample scripts " +"with lively displays. Being on :attr:`sys.path`, it can now be run directly" +" from the command-line:" +msgstr "" + +#: ../../whatsnew/3.2.rst:2309 +msgid "" +"(Moved from the Demo directory by Alexander Belopolsky in :issue:`10199`.)" +msgstr "" + +#: ../../whatsnew/3.2.rst:2312 +msgid "Multi-threading" +msgstr "多线程" + +#: ../../whatsnew/3.2.rst:2314 +msgid "" +"The mechanism for serializing execution of concurrently running Python " +"threads (generally known as the :term:`GIL` or Global Interpreter Lock) has " +"been rewritten. Among the objectives were more predictable switching " +"intervals and reduced overhead due to lock contention and the number of " +"ensuing system calls. The notion of a \"check interval\" to allow thread " +"switches has been abandoned and replaced by an absolute duration expressed " +"in seconds. This parameter is tunable through " +":func:`sys.setswitchinterval()`. It currently defaults to 5 milliseconds." +msgstr "" + +#: ../../whatsnew/3.2.rst:2323 +msgid "" +"Additional details about the implementation can be read from a `python-dev " +"mailing-list message `_ (however, \"priority requests\" as exposed " +"in this message have not been kept for inclusion)." +msgstr "" + +#: ../../whatsnew/3.2.rst:2329 +msgid "(Contributed by Antoine Pitrou.)" +msgstr "(由 Antoine Pitrou 贡献。)" + +#: ../../whatsnew/3.2.rst:2331 +msgid "" +"Regular and recursive locks now accept an optional *timeout* argument to " +"their :meth:`~threading.Lock.acquire` method. (Contributed by Antoine " +"Pitrou; :issue:`7316`.)" +msgstr "" + +#: ../../whatsnew/3.2.rst:2335 +msgid "" +"Similarly, :meth:`threading.Semaphore.acquire` also gained a *timeout* " +"argument. (Contributed by Torsten Landschoff; :issue:`850728`.)" +msgstr "" + +#: ../../whatsnew/3.2.rst:2338 +msgid "" +"Regular and recursive lock acquisitions can now be interrupted by signals on" +" platforms using Pthreads. This means that Python programs that deadlock " +"while acquiring locks can be successfully killed by repeatedly sending " +"SIGINT to the process (by pressing :kbd:`Ctrl+C` in most shells). " +"(Contributed by Reid Kleckner; :issue:`8844`.)" +msgstr "" + +#: ../../whatsnew/3.2.rst:2346 +msgid "Optimizations" +msgstr "性能优化" + +#: ../../whatsnew/3.2.rst:2348 +msgid "A number of small performance enhancements have been added:" +msgstr "" + +#: ../../whatsnew/3.2.rst:2350 +msgid "" +"Python's peephole optimizer now recognizes patterns such ``x in {1, 2, 3}`` " +"as being a test for membership in a set of constants. The optimizer recasts" +" the :class:`set` as a :class:`frozenset` and stores the pre-built constant." +msgstr "" + +#: ../../whatsnew/3.2.rst:2354 +msgid "" +"Now that the speed penalty is gone, it is practical to start writing " +"membership tests using set-notation. This style is both semantically clear " +"and operationally fast::" +msgstr "" + +#: ../../whatsnew/3.2.rst:2362 +msgid "" +"(Patch and additional tests contributed by Dave Malcolm; :issue:`6690`)." +msgstr "(补丁和附加测试由 Dave Malcolm 在 :issue:`6690` 中贡献)。" + +#: ../../whatsnew/3.2.rst:2364 +msgid "" +"Serializing and unserializing data using the :mod:`pickle` module is now " +"several times faster." +msgstr "" + +#: ../../whatsnew/3.2.rst:2367 +msgid "" +"(Contributed by Alexandre Vassalotti, Antoine Pitrou and the Unladen Swallow" +" team in :issue:`9410` and :issue:`3873`.)" +msgstr "" +"(由 Alexandre Vassalotti, Antoine Pitrou 和 Unladen Swallow 团队在 :issue:`9410` " +"和 :issue:`3873` 中贡献。)" + +#: ../../whatsnew/3.2.rst:2370 +msgid "" +"The `Timsort algorithm `_ used in " +":meth:`list.sort` and :func:`sorted` now runs faster and uses less memory " +"when called with a :term:`key function`. Previously, every element of a " +"list was wrapped with a temporary object that remembered the key value " +"associated with each element. Now, two arrays of keys and values are sorted" +" in parallel. This saves the memory consumed by the sort wrappers, and it " +"saves time lost to delegating comparisons." +msgstr "" + +#: ../../whatsnew/3.2.rst:2378 +msgid "(Patch by Daniel Stutzbach in :issue:`9915`.)" +msgstr "" + +#: ../../whatsnew/3.2.rst:2380 +msgid "" +"JSON decoding performance is improved and memory consumption is reduced " +"whenever the same string is repeated for multiple keys. Also, JSON encoding" +" now uses the C speedups when the ``sort_keys`` argument is true." +msgstr "" + +#: ../../whatsnew/3.2.rst:2384 +msgid "" +"(Contributed by Antoine Pitrou in :issue:`7451` and by Raymond Hettinger and" +" Antoine Pitrou in :issue:`10314`.)" +msgstr "" +"(由Antoine Pitrou 在 :issue:`7451` 中贡献,由 Raymond Hettinger 和 Antoine Pitrou 在 " +":issue:`10314` 中贡献。)" + +#: ../../whatsnew/3.2.rst:2387 +msgid "" +"Recursive locks (created with the :func:`threading.RLock` API) now benefit " +"from a C implementation which makes them as fast as regular locks, and " +"between 10x and 15x faster than their previous pure Python implementation." +msgstr "" + +#: ../../whatsnew/3.2.rst:2391 +msgid "(Contributed by Antoine Pitrou; :issue:`3001`.)" +msgstr "(由 Antoine Pitrou 在 :issue:`3001` 中贡献。)" + +#: ../../whatsnew/3.2.rst:2393 +msgid "" +"The fast-search algorithm in stringlib is now used by the :meth:`split`, " +":meth:`rsplit`, :meth:`splitlines` and :meth:`replace` methods on " +":class:`bytes`, :class:`bytearray` and :class:`str` objects. Likewise, the " +"algorithm is also used by :meth:`rfind`, :meth:`rindex`, :meth:`rsplit` and " +":meth:`rpartition`." +msgstr "" + +#: ../../whatsnew/3.2.rst:2399 +msgid "(Patch by Florent Xicluna in :issue:`7622` and :issue:`7462`.)" +msgstr "" + +#: ../../whatsnew/3.2.rst:2402 +msgid "" +"Integer to string conversions now work two \"digits\" at a time, reducing " +"the number of division and modulo operations." +msgstr "" + +#: ../../whatsnew/3.2.rst:2405 +msgid "(:issue:`6713` by Gawain Bolton, Mark Dickinson, and Victor Stinner.)" +msgstr "" + +#: ../../whatsnew/3.2.rst:2407 +msgid "" +"There were several other minor optimizations. Set differencing now runs " +"faster when one operand is much larger than the other (patch by Andress " +"Bennetts in :issue:`8685`). The :meth:`array.repeat` method has a faster " +"implementation (:issue:`1569291` by Alexander Belopolsky). The " +":class:`BaseHTTPRequestHandler` has more efficient buffering (:issue:`3709` " +"by Andrew Schaaf). The :func:`operator.attrgetter` function has been sped-" +"up (:issue:`10160` by Christos Georgiou). And :class:`ConfigParser` loads " +"multi-line arguments a bit faster (:issue:`7113` by Łukasz Langa)." +msgstr "" + +#: ../../whatsnew/3.2.rst:2418 +msgid "Unicode" +msgstr "Unicode" + +#: ../../whatsnew/3.2.rst:2420 +msgid "" +"Python has been updated to `Unicode 6.0.0 " +"`_. The update to the standard " +"adds over 2,000 new characters including `emoji " +"`_ symbols which are important for " +"mobile phones." +msgstr "" + +#: ../../whatsnew/3.2.rst:2425 +msgid "" +"In addition, the updated standard has altered the character properties for " +"two Kannada characters (U+0CF1, U+0CF2) and one New Tai Lue numeric " +"character (U+19DA), making the former eligible for use in identifiers while " +"disqualifying the latter. For more information, see `Unicode Character " +"Database Changes " +"`_." +msgstr "" + +#: ../../whatsnew/3.2.rst:2433 +msgid "Codecs" +msgstr "编解码器" + +#: ../../whatsnew/3.2.rst:2435 +msgid "Support was added for *cp720* Arabic DOS encoding (:issue:`1616979`)." +msgstr "" + +#: ../../whatsnew/3.2.rst:2437 +msgid "" +"MBCS encoding no longer ignores the error handler argument. In the default " +"strict mode, it raises an :exc:`UnicodeDecodeError` when it encounters an " +"undecodable byte sequence and an :exc:`UnicodeEncodeError` for an " +"unencodable character." +msgstr "" + +#: ../../whatsnew/3.2.rst:2442 +msgid "" +"The MBCS codec supports ``'strict'`` and ``'ignore'`` error handlers for " +"decoding, and ``'strict'`` and ``'replace'`` for encoding." +msgstr "" + +#: ../../whatsnew/3.2.rst:2445 +msgid "" +"To emulate Python3.1 MBCS encoding, select the ``'ignore'`` handler for " +"decoding and the ``'replace'`` handler for encoding." +msgstr "" + +#: ../../whatsnew/3.2.rst:2448 +msgid "" +"On Mac OS X, Python decodes command line arguments with ``'utf-8'`` rather " +"than the locale encoding." +msgstr "" + +#: ../../whatsnew/3.2.rst:2451 +msgid "" +"By default, :mod:`tarfile` uses ``'utf-8'`` encoding on Windows (instead of " +"``'mbcs'``) and the ``'surrogateescape'`` error handler on all operating " +"systems." +msgstr "" +"默认情况下,:mod:`tarfile` 在 Windows 上使用 ``'utf-8'`` 编码格式 (而不是 ``'mbcs'``) " +"并在所有操作系统上使用 ``'surrogateescape'`` 错误处理器。" + +#: ../../whatsnew/3.2.rst:2457 +msgid "Documentation" +msgstr "文档" + +#: ../../whatsnew/3.2.rst:2459 +msgid "The documentation continues to be improved." +msgstr "文档继续得到改进。" + +#: ../../whatsnew/3.2.rst:2461 +msgid "" +"A table of quick links has been added to the top of lengthy sections such as" +" :ref:`built-in-funcs`. In the case of :mod:`itertools`, the links are " +"accompanied by tables of cheatsheet-style summaries to provide an overview " +"and memory jog without having to read all of the docs." +msgstr "" + +#: ../../whatsnew/3.2.rst:2466 +msgid "" +"In some cases, the pure Python source code can be a helpful adjunct to the " +"documentation, so now many modules now feature quick links to the latest " +"version of the source code. For example, the :mod:`functools` module " +"documentation has a quick link at the top labeled:" +msgstr "" + +#: ../../whatsnew/3.2.rst:2471 +msgid "**Source code** :source:`Lib/functools.py`." +msgstr "**源代码** :source:`Lib/functools.py`." + +#: ../../whatsnew/3.2.rst:2473 +msgid "" +"(Contributed by Raymond Hettinger; see `rationale " +"`_.)" +msgstr "" +"(由 Raymond Hettinger 贡献,参见 `rationale " +"`_。)" + +#: ../../whatsnew/3.2.rst:2476 +msgid "" +"The docs now contain more examples and recipes. In particular, :mod:`re` " +"module has an extensive section, :ref:`re-examples`. Likewise, the " +":mod:`itertools` module continues to be updated with new :ref:`itertools-" +"recipes`." +msgstr "" + +#: ../../whatsnew/3.2.rst:2481 +msgid "" +"The :mod:`datetime` module now has an auxiliary implementation in pure " +"Python. No functionality was changed. This just provides an easier-to-read " +"alternate implementation." +msgstr "" + +#: ../../whatsnew/3.2.rst:2485 +msgid "(Contributed by Alexander Belopolsky in :issue:`9528`.)" +msgstr "(由 Alexander Belopolsky 在 :issue:`9528` 中贡献。)" + +#: ../../whatsnew/3.2.rst:2487 +msgid "" +"The unmaintained :file:`Demo` directory has been removed. Some demos were " +"integrated into the documentation, some were moved to the :file:`Tools/demo`" +" directory, and others were removed altogether." +msgstr "" + +#: ../../whatsnew/3.2.rst:2491 +msgid "(Contributed by Georg Brandl in :issue:`7962`.)" +msgstr "(由 Georg Brandl 在 :issue:`7962` 中贡献)" + +#: ../../whatsnew/3.2.rst:2495 +msgid "IDLE" +msgstr "IDLE" + +#: ../../whatsnew/3.2.rst:2497 +msgid "" +"The format menu now has an option to clean source files by stripping " +"trailing whitespace." +msgstr "" + +#: ../../whatsnew/3.2.rst:2500 +msgid "(Contributed by Raymond Hettinger; :issue:`5150`.)" +msgstr "(由 Raymond Hettinger 在 :issue:`5150` 中贡献。)" + +#: ../../whatsnew/3.2.rst:2502 +msgid "IDLE on Mac OS X now works with both Carbon AquaTk and Cocoa AquaTk." +msgstr "" + +#: ../../whatsnew/3.2.rst:2504 +msgid "" +"(Contributed by Kevin Walzer, Ned Deily, and Ronald Oussoren; " +":issue:`6075`.)" +msgstr "(由 Kevin Walzer, Ned Deily 和 Ronald Oussoren 在 :issue:`6075` 中贡献。)" + +#: ../../whatsnew/3.2.rst:2507 +msgid "Code Repository" +msgstr "代码库" + +#: ../../whatsnew/3.2.rst:2509 +msgid "" +"In addition to the existing Subversion code repository at " +"http://svn.python.org there is now a `Mercurial `_ repository at https://hg.python.org/\\ ." +msgstr "" + +#: ../../whatsnew/3.2.rst:2513 +msgid "" +"After the 3.2 release, there are plans to switch to Mercurial as the primary" +" repository. This distributed version control system should make it easier " +"for members of the community to create and share external changesets. See " +":pep:`385` for details." +msgstr "" + +#: ../../whatsnew/3.2.rst:2518 +msgid "" +"To learn to use the new version control system, see the `Quick Start " +"`_ or the `Guide to Mercurial" +" Workflows `_." +msgstr "" +"要学习使用新的版本控制系统,请参阅 `Quick Start `_ 或 `Guide to Mercurial Workflows " +"`_。" + +#: ../../whatsnew/3.2.rst:2524 +msgid "Build and C API Changes" +msgstr "构建和 C API 的改变" + +#: ../../whatsnew/3.2.rst:2526 +msgid "Changes to Python's build process and to the C API include:" +msgstr "针对 Python 构建过程和 C API 的改变包括:" + +#: ../../whatsnew/3.2.rst:2528 +msgid "" +"The *idle*, *pydoc* and *2to3* scripts are now installed with a version-" +"specific suffix on ``make altinstall`` (:issue:`10679`)." +msgstr "" +"现在 *idle*, *pydoc* 和 *2to3* 脚本的安装将在 ``make altinstall`` 中附带特定版本的后缀 " +"(:issue:`10679`)。" + +#: ../../whatsnew/3.2.rst:2531 +msgid "" +"The C functions that access the Unicode Database now accept and return " +"characters from the full Unicode range, even on narrow unicode builds " +"(Py_UNICODE_TOLOWER, Py_UNICODE_ISDECIMAL, and others). A visible " +"difference in Python is that :func:`unicodedata.numeric` now returns the " +"correct value for large code points, and :func:`repr` may consider more " +"characters as printable." +msgstr "" + +#: ../../whatsnew/3.2.rst:2538 +msgid "" +"(Reported by Bupjoe Lee and fixed by Amaury Forgeot D'Arc; :issue:`5127`.)" +msgstr "" + +#: ../../whatsnew/3.2.rst:2540 +msgid "" +"Computed gotos are now enabled by default on supported compilers (which are " +"detected by the configure script). They can still be disabled selectively " +"by specifying ``--without-computed-gotos``." +msgstr "" + +#: ../../whatsnew/3.2.rst:2544 +msgid "(Contributed by Antoine Pitrou; :issue:`9203`.)" +msgstr "(由 Antoine Pitrou 在 :issue:`9203` 中贡献。)" + +#: ../../whatsnew/3.2.rst:2546 +msgid "" +"The option ``--with-wctype-functions`` was removed. The built-in unicode " +"database is now used for all functions." +msgstr "" + +#: ../../whatsnew/3.2.rst:2549 +msgid "(Contributed by Amaury Forgeot D'Arc; :issue:`9210`.)" +msgstr "(由 Amaury Forgeot d'Arc 在 :issue:`9210` 中贡献。)" + +#: ../../whatsnew/3.2.rst:2551 +msgid "" +"Hash values are now values of a new type, :c:type:`Py_hash_t`, which is " +"defined to be the same size as a pointer. Previously they were of type " +"long, which on some 64-bit operating systems is still only 32 bits long. As" +" a result of this fix, :class:`set` and :class:`dict` can now hold more than" +" ``2**32`` entries on builds with 64-bit pointers (previously, they could " +"grow to that size but their performance degraded catastrophically)." +msgstr "" + +#: ../../whatsnew/3.2.rst:2558 +msgid "" +"(Suggested by Raymond Hettinger and implemented by Benjamin Peterson; " +":issue:`9778`.)" +msgstr "" + +#: ../../whatsnew/3.2.rst:2561 +msgid "" +"A new macro :c:macro:`Py_VA_COPY` copies the state of the variable argument " +"list. It is equivalent to C99 *va_copy* but available on all Python " +"platforms (:issue:`2443`)." +msgstr "" + +#: ../../whatsnew/3.2.rst:2565 +msgid "" +"A new C API function :c:func:`PySys_SetArgvEx` allows an embedded " +"interpreter to set :attr:`sys.argv` without also modifying :attr:`sys.path` " +"(:issue:`5753`)." +msgstr "" + +#: ../../whatsnew/3.2.rst:2569 +msgid "" +":c:macro:`PyEval_CallObject` is now only available in macro form. The " +"function declaration, which was kept for backwards compatibility reasons, is" +" now removed -- the macro was introduced in 1997 (:issue:`8276`)." +msgstr "" + +#: ../../whatsnew/3.2.rst:2573 +msgid "" +"There is a new function :c:func:`PyLong_AsLongLongAndOverflow` which is " +"analogous to :c:func:`PyLong_AsLongAndOverflow`. They both serve to convert" +" Python :class:`int` into a native fixed-width type while providing " +"detection of cases where the conversion won't fit (:issue:`7767`)." +msgstr "" + +#: ../../whatsnew/3.2.rst:2578 +msgid "" +"The :c:func:`PyUnicode_CompareWithASCIIString` function now returns *not " +"equal* if the Python string is *NUL* terminated." +msgstr "" + +#: ../../whatsnew/3.2.rst:2581 +msgid "" +"There is a new function :c:func:`PyErr_NewExceptionWithDoc` that is like " +":c:func:`PyErr_NewException` but allows a docstring to be specified. This " +"lets C exceptions have the same self-documenting capabilities as their pure " +"Python counterparts (:issue:`7033`)." +msgstr "" + +#: ../../whatsnew/3.2.rst:2586 +msgid "" +"When compiled with the ``--with-valgrind`` option, the pymalloc allocator " +"will be automatically disabled when running under Valgrind. This gives " +"improved memory leak detection when running under Valgrind, while taking " +"advantage of pymalloc at other times (:issue:`2422`)." +msgstr "" + +#: ../../whatsnew/3.2.rst:2591 +msgid "" +"Removed the ``O?`` format from the *PyArg_Parse* functions. The format is " +"no longer used and it had never been documented (:issue:`8837`)." +msgstr "" + +#: ../../whatsnew/3.2.rst:2594 +msgid "" +"There were a number of other small changes to the C-API. See the " +":source:`Misc/NEWS` file for a complete list." +msgstr "" + +#: ../../whatsnew/3.2.rst:2597 +msgid "" +"Also, there were a number of updates to the Mac OS X build, see " +":source:`Mac/BuildScript/README.txt` for details. For users running a " +"32/64-bit build, there is a known problem with the default Tcl/Tk on Mac OS " +"X 10.6. Accordingly, we recommend installing an updated alternative such as " +"`ActiveState Tcl/Tk 8.5.9 " +"`_\\. See " +"https://www.python.org/download/mac/tcltk/ for additional details." +msgstr "" + +#: ../../whatsnew/3.2.rst:2605 +msgid "Porting to Python 3.2" +msgstr "移植到 Python 3.2" + +#: ../../whatsnew/3.2.rst:2607 +msgid "" +"This section lists previously described changes and other bugfixes that may " +"require changes to your code:" +msgstr "本节列出了先前描述的改变以及可能需要修改你的代码的其他问题修正:" + +#: ../../whatsnew/3.2.rst:2610 +msgid "" +"The :mod:`configparser` module has a number of clean-ups. The major change " +"is to replace the old :class:`ConfigParser` class with long-standing " +"preferred alternative :class:`SafeConfigParser`. In addition there are a " +"number of smaller incompatibilities:" +msgstr "" + +#: ../../whatsnew/3.2.rst:2615 +msgid "" +"The interpolation syntax is now validated on " +":meth:`~configparser.ConfigParser.get` and " +":meth:`~configparser.ConfigParser.set` operations. In the default " +"interpolation scheme, only two tokens with percent signs are valid: " +"``%(name)s`` and ``%%``, the latter being an escaped percent sign." +msgstr "" + +#: ../../whatsnew/3.2.rst:2621 +msgid "" +"The :meth:`~configparser.ConfigParser.set` and " +":meth:`~configparser.ConfigParser.add_section` methods now verify that " +"values are actual strings. Formerly, unsupported types could be introduced " +"unintentionally." +msgstr "" + +#: ../../whatsnew/3.2.rst:2626 +msgid "" +"Duplicate sections or options from a single source now raise either " +":exc:`~configparser.DuplicateSectionError` or " +":exc:`~configparser.DuplicateOptionError`. Formerly, duplicates would " +"silently overwrite a previous entry." +msgstr "" + +#: ../../whatsnew/3.2.rst:2631 +msgid "" +"Inline comments are now disabled by default so now the **;** character can " +"be safely used in values." +msgstr "" + +#: ../../whatsnew/3.2.rst:2634 +msgid "" +"Comments now can be indented. Consequently, for **;** or **#** to appear at" +" the start of a line in multiline values, it has to be interpolated. This " +"keeps comment prefix characters in values from being mistaken as comments." +msgstr "" + +#: ../../whatsnew/3.2.rst:2638 +msgid "" +"``\"\"`` is now a valid value and is no longer automatically converted to an" +" empty string. For empty strings, use ``\"option =\"`` in a line." +msgstr "" + +#: ../../whatsnew/3.2.rst:2641 +msgid "" +"The :mod:`nntplib` module was reworked extensively, meaning that its APIs " +"are often incompatible with the 3.1 APIs." +msgstr "" + +#: ../../whatsnew/3.2.rst:2644 +msgid "" +":class:`bytearray` objects can no longer be used as filenames; instead, they" +" should be converted to :class:`bytes`." +msgstr "" + +#: ../../whatsnew/3.2.rst:2647 +msgid "" +"The :meth:`array.tostring` and :meth:`array.fromstring` have been renamed to" +" :meth:`array.tobytes` and :meth:`array.frombytes` for clarity. The old " +"names have been deprecated. (See :issue:`8990`.)" +msgstr "" + +#: ../../whatsnew/3.2.rst:2651 +msgid "``PyArg_Parse*()`` functions:" +msgstr "``PyArg_Parse*()`` 函数:" + +#: ../../whatsnew/3.2.rst:2653 +msgid "\"t#\" format has been removed: use \"s#\" or \"s*\" instead" +msgstr "\"t#\" 格式已被移除:改用 \"s#\" 或 \"s*\"" + +#: ../../whatsnew/3.2.rst:2654 +msgid "\"w\" and \"w#\" formats has been removed: use \"w*\" instead" +msgstr "\"w\" 和 \"w#\" 格式已被移除:改用 \"w*\"" + +#: ../../whatsnew/3.2.rst:2656 +msgid "" +"The :c:type:`PyCObject` type, deprecated in 3.1, has been removed. To wrap " +"opaque C pointers in Python objects, the :c:type:`PyCapsule` API should be " +"used instead; the new type has a well-defined interface for passing typing " +"safety information and a less complicated signature for calling a " +"destructor." +msgstr "" + +#: ../../whatsnew/3.2.rst:2661 +msgid "" +"The :func:`sys.setfilesystemencoding` function was removed because it had a " +"flawed design." +msgstr "" + +#: ../../whatsnew/3.2.rst:2664 +msgid "" +"The :func:`random.seed` function and method now salt string seeds with an " +"sha512 hash function. To access the previous version of *seed* in order to " +"reproduce Python 3.1 sequences, set the *version* argument to *1*, " +"``random.seed(s, version=1)``." +msgstr "" + +#: ../../whatsnew/3.2.rst:2669 +msgid "" +"The previously deprecated :func:`string.maketrans` function has been removed" +" in favor of the static methods :meth:`bytes.maketrans` and " +":meth:`bytearray.maketrans`. This change solves the confusion around which " +"types were supported by the :mod:`string` module. Now, :class:`str`, " +":class:`bytes`, and :class:`bytearray` each have their own **maketrans** and" +" **translate** methods with intermediate translation tables of the " +"appropriate type." +msgstr "" + +#: ../../whatsnew/3.2.rst:2677 +msgid "(Contributed by Georg Brandl; :issue:`5675`.)" +msgstr "(由Georg Brandl在 :issue:`5675` 中贡献)" + +#: ../../whatsnew/3.2.rst:2679 +msgid "" +"The previously deprecated :func:`contextlib.nested` function has been " +"removed in favor of a plain :keyword:`with` statement which can accept " +"multiple context managers. The latter technique is faster (because it is " +"built-in), and it does a better job finalizing multiple context managers " +"when one of them raises an exception::" +msgstr "" + +#: ../../whatsnew/3.2.rst:2690 +msgid "" +"(Contributed by Georg Brandl and Mattias Brändström; `appspot issue 53094 " +"`_.)" +msgstr "" +"(由 Georg Brandl 和 Mattias Brändström 贡献; `appspot issue 53094 " +"`_。)" + +#: ../../whatsnew/3.2.rst:2693 +msgid "" +":func:`struct.pack` now only allows bytes for the ``s`` string pack code. " +"Formerly, it would accept text arguments and implicitly encode them to bytes" +" using UTF-8. This was problematic because it made assumptions about the " +"correct encoding and because a variable-length encoding can fail when " +"writing to fixed length segment of a structure." +msgstr "" + +#: ../../whatsnew/3.2.rst:2699 +msgid "" +"Code such as ``struct.pack('<6sHHBBB', 'GIF87a', x, y)`` should be rewritten" +" with to use bytes instead of text, ``struct.pack('<6sHHBBB', b'GIF87a', x, " +"y)``." +msgstr "" + +#: ../../whatsnew/3.2.rst:2702 +msgid "" +"(Discovered by David Beazley and fixed by Victor Stinner; :issue:`10783`.)" +msgstr "" + +#: ../../whatsnew/3.2.rst:2704 +msgid "" +"The :class:`xml.etree.ElementTree` class now raises an " +":exc:`xml.etree.ElementTree.ParseError` when a parse fails. Previously it " +"raised an :exc:`xml.parsers.expat.ExpatError`." +msgstr "" + +#: ../../whatsnew/3.2.rst:2708 +msgid "" +"The new, longer :func:`str` value on floats may break doctests which rely on" +" the old output format." +msgstr "" + +#: ../../whatsnew/3.2.rst:2711 +msgid "" +"In :class:`subprocess.Popen`, the default value for *close_fds* is now " +"``True`` under Unix; under Windows, it is ``True`` if the three standard " +"streams are set to ``None``, ``False`` otherwise. Previously, *close_fds* " +"was always ``False`` by default, which produced difficult to solve bugs or " +"race conditions when open file descriptors would leak into the child " +"process." +msgstr "" + +#: ../../whatsnew/3.2.rst:2718 +msgid "" +"Support for legacy HTTP 0.9 has been removed from :mod:`urllib.request` and " +":mod:`http.client`. Such support is still present on the server side (in " +":mod:`http.server`)." +msgstr "" +"对旧式 HTTP 0.9 的支持已从 :mod:`urllib.request` 和 :mod:`http.client` 中移除。 " +"此项支持仍然存在于服务器端(在 :mod:`http.server` 中)。" + +#: ../../whatsnew/3.2.rst:2722 +msgid "(Contributed by Antoine Pitrou, :issue:`10711`.)" +msgstr "(由 Antoine Pitrou 在 :issue:`10711` 中贡献。)" + +#: ../../whatsnew/3.2.rst:2724 +msgid "" +"SSL sockets in timeout mode now raise :exc:`socket.timeout` when a timeout " +"occurs, rather than a generic :exc:`~ssl.SSLError`." +msgstr "" +"超时模式下的 SSL 套接字现在如发生超时则会引发 :exc:`socket.timeout`,而不是一般性的 " +":exc:`~ssl.SSLError`。" + +#: ../../whatsnew/3.2.rst:2727 +msgid "(Contributed by Antoine Pitrou, :issue:`10272`.)" +msgstr "(由 Antoine Pitrou 在 :issue:`10272` 中贡献。)" + +#: ../../whatsnew/3.2.rst:2729 +msgid "" +"The misleading functions :c:func:`PyEval_AcquireLock()` and " +":c:func:`PyEval_ReleaseLock()` have been officially deprecated. The thread-" +"state aware APIs (such as :c:func:`PyEval_SaveThread()` and " +":c:func:`PyEval_RestoreThread()`) should be used instead." +msgstr "" + +#: ../../whatsnew/3.2.rst:2734 +msgid "" +"Due to security risks, :func:`asyncore.handle_accept` has been deprecated, " +"and a new function, :func:`asyncore.handle_accepted`, was added to replace " +"it." +msgstr "" + +#: ../../whatsnew/3.2.rst:2737 +msgid "(Contributed by Giampaolo Rodola in :issue:`6706`.)" +msgstr "(由 Giampaolo Rodola 在 :issue:`6706` 中贡献。)" + +#: ../../whatsnew/3.2.rst:2739 +msgid "" +"Due to the new :term:`GIL` implementation, :c:func:`PyEval_InitThreads()` " +"cannot be called before :c:func:`Py_Initialize()` anymore." +msgstr "" +"由于新的 :term:`GIL` 实现,:c:func:`PyEval_InitThreads()` 将不再能在 " +":c:func:`Py_Initialize()` 之前被调用。" diff --git a/whatsnew/3.3.po b/whatsnew/3.3.po new file mode 100644 index 000000000..f7011237a --- /dev/null +++ b/whatsnew/3.3.po @@ -0,0 +1,4009 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) 2001-2025, Python Software Foundation +# This file is distributed under the same license as the Python package. +# FIRST AUTHOR , YEAR. +# +# Translators: +# Kaizhao Zhang , 2018 +# jacky , 2019 +# sgqy , 2019 +# ppcfish , 2020 +# Dai Xu , 2021 +# Rafael Fontenelle , 2024 +# Freesand Leo , 2025 +# +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: Python 3.9\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2025-04-25 16:43+0000\n" +"PO-Revision-Date: 2017-02-16 23:44+0000\n" +"Last-Translator: Freesand Leo , 2025\n" +"Language-Team: Chinese (China) (https://app.transifex.com/python-doc/teams/5390/zh_CN/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: zh_CN\n" +"Plural-Forms: nplurals=1; plural=0;\n" + +#: ../../whatsnew/3.3.rst:3 +msgid "What's New In Python 3.3" +msgstr "Python 3.3 有什么新变化" + +#: ../../whatsnew/3.3.rst:45 +msgid "" +"This article explains the new features in Python 3.3, compared to 3.2. " +"Python 3.3 was released on September 29, 2012. For full details, see the " +"`changelog `_." +msgstr "" +"本文介绍了 Python 3.3 相比 3.2 的新增特性。 Python 3.3 于 2012 年 9 月 29 日 发布。 有关完整详细信息,请参见" +" `changelog `_。" + +#: ../../whatsnew/3.3.rst:51 +msgid ":pep:`398` - Python 3.3 Release Schedule" +msgstr ":pep:`398` - Python 3.3 发布计划" + +#: ../../whatsnew/3.3.rst:55 +msgid "Summary -- Release highlights" +msgstr "摘要 -- 发布重点" + +#: ../../whatsnew/3.3.rst:60 +msgid "New syntax features:" +msgstr "新的语法特性:" + +#: ../../whatsnew/3.3.rst:62 +msgid "" +"New ``yield from`` expression for :ref:`generator delegation `." +msgstr "新增 ``yield from`` 表达式用于 :ref:`生成器委托 `。" + +#: ../../whatsnew/3.3.rst:63 +msgid "The ``u'unicode'`` syntax is accepted again for :class:`str` objects." +msgstr "``u'unicode'`` 语法重新被接受用于 :class:`str` 对象。" + +#: ../../whatsnew/3.3.rst:65 +msgid "New library modules:" +msgstr "新的库模块:" + +#: ../../whatsnew/3.3.rst:67 +msgid ":mod:`faulthandler` (helps debugging low-level crashes)" +msgstr ":mod:`faulthandler` (帮助调试低层级的崩溃)" + +#: ../../whatsnew/3.3.rst:68 +msgid "" +":mod:`ipaddress` (high-level objects representing IP addresses and masks)" +msgstr ":mod:`ipaddress` (代表 IP 地址和掩码的高层级对象)" + +#: ../../whatsnew/3.3.rst:69 +msgid ":mod:`lzma` (compress data using the XZ / LZMA algorithm)" +msgstr ":mod:`lzma` (使用 XZ / LZMA 算法压缩数据)" + +#: ../../whatsnew/3.3.rst:70 +msgid "" +":mod:`unittest.mock` (replace parts of your system under test with mock " +"objects)" +msgstr ":mod:`unittest.mock` (使用模拟对象替换你的受测试系统中的某些部分)" + +#: ../../whatsnew/3.3.rst:71 +msgid "" +":mod:`venv` (Python :ref:`virtual environments `, as in the popular" +" ``virtualenv`` package)" +msgstr ":mod:`venv` (Python :ref:`虚拟环境 `,类似于流行的 ``virtualenv`` 包)" + +#: ../../whatsnew/3.3.rst:74 +msgid "New built-in features:" +msgstr "新的内置特性:" + +#: ../../whatsnew/3.3.rst:76 +msgid "Reworked :ref:`I/O exception hierarchy `." +msgstr "重写 :ref:`I/O 异常的层次结构`." + +#: ../../whatsnew/3.3.rst:78 +msgid "Implementation improvements:" +msgstr "实现的改进:" + +#: ../../whatsnew/3.3.rst:80 +msgid "" +"Rewritten :ref:`import machinery ` based on :mod:`importlib`." +msgstr "基于 :mod:`importlib` 重写 :ref:`import machinery`" + +#: ../../whatsnew/3.3.rst:81 +msgid "More compact :ref:`unicode strings `." +msgstr "更紧凑的 :ref:`Unicode 字符串 `。" + +#: ../../whatsnew/3.3.rst:82 +msgid "More compact :ref:`attribute dictionaries `." +msgstr "更紧凑的 :ref:`属性字典 `。" + +#: ../../whatsnew/3.3.rst:84 +msgid "Significantly Improved Library Modules:" +msgstr "显著改进的库模块:" + +#: ../../whatsnew/3.3.rst:86 +msgid "C Accelerator for the :ref:`decimal ` module." +msgstr "针对 :ref:`decimal ` 模块的 C 加速器。" + +#: ../../whatsnew/3.3.rst:87 +msgid "" +"Better unicode handling in the :ref:`email ` module " +"(:term:`provisional `)." +msgstr "" +":ref:`email ` 模块中更好的 Unicode 处理 (:term:`暂定 `)。" + +#: ../../whatsnew/3.3.rst:90 +msgid "Security improvements:" +msgstr "安全改进:" + +#: ../../whatsnew/3.3.rst:92 +msgid "Hash randomization is switched on by default." +msgstr "哈希随机化被默认启用。" + +#: ../../whatsnew/3.3.rst:94 +msgid "Please read on for a comprehensive list of user-facing changes." +msgstr "请继续阅读有关面向用户的改变的详细清单。" + +#: ../../whatsnew/3.3.rst:100 +msgid "PEP 405: Virtual Environments" +msgstr "PEP 405: 虚拟环境" + +#: ../../whatsnew/3.3.rst:102 +msgid "" +"Virtual environments help create separate Python setups while sharing a " +"system-wide base install, for ease of maintenance. Virtual environments " +"have their own set of private site packages (i.e. locally-installed " +"libraries), and are optionally segregated from the system-wide site " +"packages. Their concept and implementation are inspired by the popular " +"``virtualenv`` third-party package, but benefit from tighter integration " +"with the interpreter core." +msgstr "" + +#: ../../whatsnew/3.3.rst:110 +msgid "" +"This PEP adds the :mod:`venv` module for programmatic access, and the " +"``pyvenv`` script for command-line access and administration. The Python " +"interpreter checks for a ``pyvenv.cfg``, file whose existence signals the " +"base of a virtual environment's directory tree." +msgstr "" +"本 PEP 添加了 :mod:`venv` 模块用于编程访问,以及 ``pyvenv`` 脚本用于命令在线访问和管理。 Python 解释器会检查 " +"``pyvenv.cfg``,文件的存在标志着虚拟环境目录树的基础。" + +#: ../../whatsnew/3.3.rst:118 +msgid ":pep:`405` - Python Virtual Environments" +msgstr ":pep:`405` - Python虚拟环境" + +#: ../../whatsnew/3.3.rst:119 +msgid "" +"PEP written by Carl Meyer; implementation by Carl Meyer and Vinay Sajip" +msgstr "PEP 由 Carl Meyer 撰写 ; 由 Carl Meyer 和 Vinay Sajip 实现。" + +#: ../../whatsnew/3.3.rst:123 +msgid "PEP 420: Implicit Namespace Packages" +msgstr "PEP 420: 隐式命名空间包" + +#: ../../whatsnew/3.3.rst:125 +msgid "" +"Native support for package directories that don't require ``__init__.py`` " +"marker files and can automatically span multiple path segments (inspired by " +"various third party approaches to namespace packages, as described in " +":pep:`420`)" +msgstr "" +"原生支持不要求 ``__init__.py`` 标记文件和可以自动跨越多个路径节的包目录(灵感来自多个命名空间包的第三方方案,如 :pep:`420` " +"中所述)" + +#: ../../whatsnew/3.3.rst:133 +msgid ":pep:`420` - Implicit Namespace Packages" +msgstr ":pep:`420` - 隐式命名空间包" + +#: ../../whatsnew/3.3.rst:133 +msgid "" +"PEP written by Eric V. Smith; implementation by Eric V. Smith and Barry " +"Warsaw" +msgstr "PEP 由 Eric V. Smith 撰写,由 Eric V. Smith 和 Barry Warsaw 实现" + +#: ../../whatsnew/3.3.rst:140 +msgid "" +"PEP 3118: New memoryview implementation and buffer protocol documentation" +msgstr "PEP 3118: 新的内存视图实现和缓冲协议文档" + +#: ../../whatsnew/3.3.rst:142 +msgid "The implementation of :pep:`3118` has been significantly improved." +msgstr ":pep:`3118` 的实现已获得大幅改进。" + +#: ../../whatsnew/3.3.rst:144 +msgid "" +"The new memoryview implementation comprehensively fixes all ownership and " +"lifetime issues of dynamically allocated fields in the Py_buffer struct that" +" led to multiple crash reports. Additionally, several functions that crashed" +" or returned incorrect results for non-contiguous or multi-dimensional input" +" have been fixed." +msgstr "" +"新的 memoryview 实现全面修复了 Py_buffer 结构体中曾导致多起崩溃报告的动态分配字段的所有权和生命周期问题。 " +"此外,还修复了多个函数在非连续或多维输入时崩溃或返回不正确结果的问题。" + +#: ../../whatsnew/3.3.rst:150 +msgid "" +"The memoryview object now has a PEP-3118 compliant getbufferproc() that " +"checks the consumer's request type. Many new features have been added, most " +"of them work in full generality for non-contiguous arrays and arrays with " +"suboffsets." +msgstr "" +"现在 memoryview 对象具有符合 PEP-3118 标准的 getbufferproc(),可以检查使用者的请求类型。 " +"新增了许多新的特性,其中的大部分已适用于非连续数组和带有子偏移量的数组。" + +#: ../../whatsnew/3.3.rst:155 +msgid "" +"The documentation has been updated, clearly spelling out responsibilities " +"for both exporters and consumers. Buffer request flags are grouped into " +"basic and compound flags. The memory layout of non-contiguous and multi-" +"dimensional NumPy-style arrays is explained." +msgstr "" +"文档已进行更新,清楚地列出了导出方和使用方的责任。 缓冲区请求旗标志被划分为基本旗标和复合旗标。 对非连续和多维的 NumPy " +"风格数组的内存布局进行了说明。" + +#: ../../whatsnew/3.3.rst:161 ../../whatsnew/3.3.rst:1122 +msgid "Features" +msgstr "相关特性" + +#: ../../whatsnew/3.3.rst:163 +msgid "" +"All native single character format specifiers in struct module syntax " +"(optionally prefixed with '@') are now supported." +msgstr "现在 struct 模块语法中所有原生单字符格式指示符(可以选择添加 '@' 前缀)均受到支持。" + +#: ../../whatsnew/3.3.rst:166 +msgid "" +"With some restrictions, the cast() method allows changing of format and " +"shape of C-contiguous arrays." +msgstr "在某些限制条件下,cast() 方法允许改变 C 连续数组的格式和形状。" + +#: ../../whatsnew/3.3.rst:169 +msgid "" +"Multi-dimensional list representations are supported for any array type." +msgstr "任何数组类型都支持多维列表的表示形式。" + +#: ../../whatsnew/3.3.rst:171 +msgid "Multi-dimensional comparisons are supported for any array type." +msgstr "任何数组类型都支持多维比较操作。" + +#: ../../whatsnew/3.3.rst:173 +msgid "" +"One-dimensional memoryviews of hashable (read-only) types with formats B, b " +"or c are now hashable. (Contributed by Antoine Pitrou in :issue:`13411`.)" +msgstr "" +"格式为 B、b 或 c 的可哈希(只读)类型的一维 memoryview 现在将是可哈希的。 (由 Antoine Pitrou 在 " +":issue:`13411` 中贡献。)" + +#: ../../whatsnew/3.3.rst:176 +msgid "" +"Arbitrary slicing of any 1-D arrays type is supported. For example, it is " +"now possible to reverse a memoryview in O(1) by using a negative step." +msgstr "" + +#: ../../whatsnew/3.3.rst:180 ../../whatsnew/3.3.rst:1132 +msgid "API changes" +msgstr "API 的变化" + +#: ../../whatsnew/3.3.rst:182 +msgid "The maximum number of dimensions is officially limited to 64." +msgstr "官方的最大维度数量限制已更改为 64。" + +#: ../../whatsnew/3.3.rst:184 +msgid "" +"The representation of empty shape, strides and suboffsets is now an empty " +"tuple instead of ``None``." +msgstr "空形状、区间和子偏移量的表示形式现在是空元组而不是 ``None``。" + +#: ../../whatsnew/3.3.rst:187 +msgid "" +"Accessing a memoryview element with format 'B' (unsigned bytes) now returns " +"an integer (in accordance with the struct module syntax). For returning a " +"bytes object the view must be cast to 'c' first." +msgstr "" +"现在对格式为 'B' (无符号字节型) 的 memoryview 元素的访问将返回一个整数(遵循结构体模块语法)。 " +"要返回字节串对象则必须先将视图强制转换为 'c'。" + +#: ../../whatsnew/3.3.rst:191 +msgid "" +"memoryview comparisons now use the logical structure of the operands and " +"compare all array elements by value. All format strings in struct module " +"syntax are supported. Views with unrecognised format strings are still " +"permitted, but will always compare as unequal, regardless of view contents." +msgstr "" +"现在 memoryview 比较将使用操作数的逻辑结构并会按值来比较所有数组元素。 结构体模块语法中的所有格式化字符串均受到支持。 " +"带有不可识别的格式化字符串的视图仍然被允许,但无论视图内容如何比较结果总是不相等。" + +#: ../../whatsnew/3.3.rst:197 +msgid "" +"For further changes see `Build and C API Changes`_ and `Porting C code`_." +msgstr "更多改变请参阅 `Build and C API Changes`_ 和 `Porting C code`_。" + +#: ../../whatsnew/3.3.rst:199 +msgid "(Contributed by Stefan Krah in :issue:`10181`.)" +msgstr "(由 Stefan Krah 在 :issue:`10181` 中贡献。)" + +#: ../../whatsnew/3.3.rst:203 +msgid ":pep:`3118` - Revising the Buffer Protocol" +msgstr ":pep:`3118` - 修改缓冲区协议" + +#: ../../whatsnew/3.3.rst:209 +msgid "PEP 393: Flexible String Representation" +msgstr "PEP 393: 灵活的字符串表示" + +#: ../../whatsnew/3.3.rst:211 +msgid "" +"The Unicode string type is changed to support multiple internal " +"representations, depending on the character with the largest Unicode ordinal" +" (1, 2, or 4 bytes) in the represented string. This allows a space-" +"efficient representation in common cases, but gives access to full UCS-4 on " +"all systems. For compatibility with existing APIs, several representations " +"may exist in parallel; over time, this compatibility should be phased out." +msgstr "" +"Unicode字符串类型已改为支持多种内部表示法,具体取决于所表示的字符串中具有最大 Unicode 序号(1、2 或 4 字节)的字符 。 " +"这样,在常见情况下可以节省空间,但在所有系统上都能使用完整的 UCS-4。 对于使用现有应用程序接口的兼容性 " +"来说,可能会并行存在几种表示法;随着时间的推移,这种兼容性 应逐步淘汰。" + +#: ../../whatsnew/3.3.rst:218 +msgid "On the Python side, there should be no downside to this change." +msgstr "在 Python 一方,此项改变应当没有任何缺点。" + +#: ../../whatsnew/3.3.rst:220 +msgid "" +"On the C API side, :pep:`393` is fully backward compatible. The legacy API " +"should remain available at least five years. Applications using the legacy " +"API will not fully benefit of the memory reduction, or - worse - may use a " +"bit more memory, because Python may have to maintain two versions of each " +"string (in the legacy format and in the new efficient storage)." +msgstr "" +"在 C API 方面,:pep:`393` 完全向下兼容。 旧的 API 至少还能使用五年。 使用传统 API " +"的应用程序不会完全受益于内存的减少,或者更糟的是,可能会使用更多的内存,因为 Python 可能需要维护每个字符串的两个版本(传统格式和新的高效存储)。" + +#: ../../whatsnew/3.3.rst:227 +msgid "Functionality" +msgstr "功能" + +#: ../../whatsnew/3.3.rst:229 +msgid "Changes introduced by :pep:`393` are the following:" +msgstr "由 :pep:`393` 引入的改变如下:" + +#: ../../whatsnew/3.3.rst:231 +msgid "" +"Python now always supports the full range of Unicode code points, including " +"non-BMP ones (i.e. from ``U+0000`` to ``U+10FFFF``). The distinction " +"between narrow and wide builds no longer exists and Python now behaves like " +"a wide build, even under Windows." +msgstr "" +"Python 现在始终支持全部 Unicode 码位,包括非 BMP 码位 (即从``U+0000`` 到 ``U+10FFFF``)。 " +"窄编译版本和宽编译版本之间的区别已不复存在,Python 现在的行为就像宽编译版本,甚至在 Windows 下也是如此。" + +#: ../../whatsnew/3.3.rst:236 +msgid "" +"With the death of narrow builds, the problems specific to narrow builds have" +" also been fixed, for example:" +msgstr "随着窄编译版本的消亡,窄编译版本特有的问题也得到了解决,例如:" + +#: ../../whatsnew/3.3.rst:239 +msgid "" +":func:`len` now always returns 1 for non-BMP characters, so " +"``len('\\U0010FFFF') == 1``;" +msgstr "现在 :func:`len` 对于非 BMP 字符总是返回 1,因此 ``len('\\U0010FFFF') == 1``;" + +#: ../../whatsnew/3.3.rst:242 +msgid "" +"surrogate pairs are not recombined in string literals, so ``'\\uDBFF\\uDFFF'" +" != '\\U0010FFFF'``;" +msgstr "替换对不会在字符串字面值中重新合并,因此 ``'\\uDBFF\\uDFFF' != '\\U0010FFFF'``;" + +#: ../../whatsnew/3.3.rst:245 +msgid "" +"indexing or slicing non-BMP characters returns the expected value, so " +"``'\\U0010FFFF'[0]`` now returns ``'\\U0010FFFF'`` and not ``'\\uDBFF'``;" +msgstr "" +"索引或切分非 BMP 字符会返回预期的值,因此 ``'\\U0010FFFF'[0]`` 现在会返回 ``'\\U0010FFFF'`` 而不是 " +"``'\\uDBFF'``;" + +#: ../../whatsnew/3.3.rst:248 +msgid "" +"all other functions in the standard library now correctly handle non-BMP " +"code points." +msgstr "标准库中的所有其他函数现在都能正确处理非 BMP 代码点。" + +#: ../../whatsnew/3.3.rst:251 +msgid "" +"The value of :data:`sys.maxunicode` is now always ``1114111`` (``0x10FFFF`` " +"in hexadecimal). The :c:func:`PyUnicode_GetMax` function still returns " +"either ``0xFFFF`` or ``0x10FFFF`` for backward compatibility, and it should " +"not be used with the new Unicode API (see :issue:`13054`)." +msgstr "" + +#: ../../whatsnew/3.3.rst:256 +msgid "The :file:`./configure` flag ``--with-wide-unicode`` has been removed." +msgstr ":file:`./configure` 标志 ``--with-wide-unicode`` 已被移除。" + +#: ../../whatsnew/3.3.rst:259 +msgid "Performance and resource usage" +msgstr "性能和资源使用情况" + +#: ../../whatsnew/3.3.rst:261 +msgid "" +"The storage of Unicode strings now depends on the highest code point in the " +"string:" +msgstr "现在,Unicode 字符串的存储取决于字符串中的最高码位:" + +#: ../../whatsnew/3.3.rst:263 +msgid "" +"pure ASCII and Latin1 strings (``U+0000-U+00FF``) use 1 byte per code point;" +msgstr "纯 ASCII 和 Latin1 字符串 (``U+0000-U+00FF``) 每个码位使用 1 个字节;" + +#: ../../whatsnew/3.3.rst:265 +msgid "BMP strings (``U+0000-U+FFFF``) use 2 bytes per code point;" +msgstr "BMP 字符串 (``U+0000-U+FFFF``) 每个码位使用 2 个字节;" + +#: ../../whatsnew/3.3.rst:267 +msgid "non-BMP strings (``U+10000-U+10FFFF``) use 4 bytes per code point." +msgstr "非 BMP 字符串 (``U+10000-U+10FFFF``) 每个码位使用 4 个字节。" + +#: ../../whatsnew/3.3.rst:269 +msgid "" +"The net effect is that for most applications, memory usage of string storage" +" should decrease significantly - especially compared to former wide unicode " +"builds - as, in many cases, strings will be pure ASCII even in international" +" contexts (because many strings store non-human language data, such as XML " +"fragments, HTTP headers, JSON-encoded data, etc.). We also hope that it " +"will, for the same reasons, increase CPU cache efficiency on non-trivial " +"applications. The memory usage of Python 3.3 is two to three times smaller " +"than Python 3.2, and a little bit better than Python 2.7, on a Django " +"benchmark (see the PEP for details)." +msgstr "" +"这样做的效果是,对于大多数应用而言,字符串存储的内存使用量应该会大幅减少 —— 尤其是与以前的宽 unicode 版本相比 —— " +"因为在许多情况下,即使在国际环境中,字符串也将是纯 ASCII 格式(因为许多字符串存储的是非人类语言数据,如 XML 片段、HTTP 标头、JSON " +"编码数据等)。 出于同样的原因,我们还希望它能提高非小应用程序的 CPU 缓存效率。 在 Django 基准测试中,Python 3.3 的内存使用量比" +" Python 3.2 少两到三倍,比 Python 2.7 略好一些(详情请参见 PEP)。" + +#: ../../whatsnew/3.3.rst:283 +msgid ":pep:`393` - Flexible String Representation" +msgstr ":pep:`393` - 灵活的字符串表示" + +#: ../../whatsnew/3.3.rst:283 +msgid "" +"PEP written by Martin von Löwis; implementation by Torsten Becker and Martin" +" von Löwis." +msgstr "PEP 由 Martin von Löwis 撰写 ; 由 Torsten Becker 和 Martin von Löwis 实现。" + +#: ../../whatsnew/3.3.rst:290 +msgid "PEP 397: Python Launcher for Windows" +msgstr "PEP 397: 适用于Windows的Python启动器" + +#: ../../whatsnew/3.3.rst:292 +msgid "" +"The Python 3.3 Windows installer now includes a ``py`` launcher application " +"that can be used to launch Python applications in a version independent " +"fashion." +msgstr "" +"Python 3.3 的 Windows 安装程序现在包含一个 ``py`` 启动程序,可用于以版本无关的方式启动 Python 应用程序。" + +#: ../../whatsnew/3.3.rst:296 +msgid "" +"This launcher is invoked implicitly when double-clicking ``*.py`` files. If " +"only a single Python version is installed on the system, that version will " +"be used to run the file. If multiple versions are installed, the most recent" +" version is used by default, but this can be overridden by including a Unix-" +"style \"shebang line\" in the Python script." +msgstr "" +"双击 ``*.py`` 文件时会隐式调用该启动器。 如果系统中只安装了一个 Python 版本,则将使用该版本运行文件。 " +"如果安装了多个版本,则默认使用最新版本,但也可以通过在 Python 脚本中加入 Unix 风格的“shebang 行”来覆盖该版本。" + +#: ../../whatsnew/3.3.rst:302 +msgid "" +"The launcher can also be used explicitly from the command line as the ``py``" +" application. Running ``py`` follows the same version selection rules as " +"implicitly launching scripts, but a more specific version can be selected by" +" passing appropriate arguments (such as ``-3`` to request Python 3 when " +"Python 2 is also installed, or ``-2.6`` to specifically request an earlier " +"Python version when a more recent version is installed)." +msgstr "" +"启动器也可以作为 ``py`` 应用程序在命令行中显式使用。运行 ``py`` " +"遵循与隐式启动脚本相同的版本选择规则,但可以通过传递适当的参数来选择更具体的版本(例如,当 Python 2 也已安装时,使用 ``-3`` 来请求 " +"Python 3;当安装了较新的 Python 版本时,使用 ``-2.6`` 来特别请求较早的 Python 版本)。" + +#: ../../whatsnew/3.3.rst:309 +msgid "" +"In addition to the launcher, the Windows installer now includes an option to" +" add the newly installed Python to the system PATH. (Contributed by Brian " +"Curtin in :issue:`3561`.)" +msgstr "" +"除了启动器之外,Windows 安装程序现在还包含一个选项,可将新安装的 Python 添加到系统 PATH 中。 (由 Brian Curtin 在 " +":issue:`3561` 中贡献)。" + +#: ../../whatsnew/3.3.rst:317 +msgid ":pep:`397` - Python Launcher for Windows" +msgstr ":pep:`397` - 适用于Windows的Python启动器" + +#: ../../whatsnew/3.3.rst:316 +msgid "" +"PEP written by Mark Hammond and Martin v. Löwis; implementation by Vinay " +"Sajip." +msgstr "PEP 由 Mark Hammond 和 Martin v. Löwis 撰写 ; 由 Vinay Sajip实现。" + +#: ../../whatsnew/3.3.rst:319 +msgid "Launcher documentation: :ref:`launcher`" +msgstr "启动器文档: :ref:`launcher`" + +#: ../../whatsnew/3.3.rst:321 +msgid "Installer PATH modification: :ref:`windows-path-mod`" +msgstr "安装器 PATH 修改: :ref:`windows-path-mod`" + +#: ../../whatsnew/3.3.rst:327 +msgid "PEP 3151: Reworking the OS and IO exception hierarchy" +msgstr "PEP 3151: 重写 OS 和 IO 异常的层次结构" + +#: ../../whatsnew/3.3.rst:329 +msgid "" +"The hierarchy of exceptions raised by operating system errors is now both " +"simplified and finer-grained." +msgstr "现在,由操作系统错误引发的异常层次结构既得到了简化,又更加精细。" + +#: ../../whatsnew/3.3.rst:332 +msgid "" +"You don't have to worry anymore about choosing the appropriate exception " +"type between :exc:`OSError`, :exc:`IOError`, :exc:`EnvironmentError`, " +":exc:`WindowsError`, :exc:`mmap.error`, :exc:`socket.error` or " +":exc:`select.error`. All these exception types are now only one: " +":exc:`OSError`. The other names are kept as aliases for compatibility " +"reasons." +msgstr "" +"您不必再为在 " +":exc:`OSError`、:exc:`IOError`、:exc:`EnvironmentError`、:exc:`WindowsError`、:exc:`mmap.error`、:exc:`socket.error`" +" 或 :exc:`select.error` 之间选择合适的异常类型而烦恼。 所有这些异常类型现在都只有一个: :exc:`OSError`。 " +"出于兼容性考虑,其他名称将作为别名保留。" + +#: ../../whatsnew/3.3.rst:339 +msgid "" +"Also, it is now easier to catch a specific error condition. Instead of " +"inspecting the ``errno`` attribute (or ``args[0]``) for a particular " +"constant from the :mod:`errno` module, you can catch the adequate " +":exc:`OSError` subclass. The available subclasses are the following:" +msgstr "" +"此外,现在捕捉特定错误条件也更容易了。无需从 :mod:`errno` 模块中检查 ``errno`` 属性(或 ``args[0]`` " +")中的特定常量,您可以捕捉适当的 :exc:`OSError` 子类。可用的子类如下:" + +#: ../../whatsnew/3.3.rst:344 +msgid ":exc:`BlockingIOError`" +msgstr ":exc:`BlockingIOError`" + +#: ../../whatsnew/3.3.rst:345 +msgid ":exc:`ChildProcessError`" +msgstr ":exc:`ChildProcessError`" + +#: ../../whatsnew/3.3.rst:346 +msgid ":exc:`ConnectionError`" +msgstr ":exc:`ConnectionError`" + +#: ../../whatsnew/3.3.rst:347 +msgid ":exc:`FileExistsError`" +msgstr ":exc:`FileExistsError`" + +#: ../../whatsnew/3.3.rst:348 +msgid ":exc:`FileNotFoundError`" +msgstr ":exc:`FileNotFoundError`" + +#: ../../whatsnew/3.3.rst:349 +msgid ":exc:`InterruptedError`" +msgstr ":exc:`InterruptedError`" + +#: ../../whatsnew/3.3.rst:350 +msgid ":exc:`IsADirectoryError`" +msgstr ":exc:`IsADirectoryError`" + +#: ../../whatsnew/3.3.rst:351 +msgid ":exc:`NotADirectoryError`" +msgstr ":exc:`NotADirectoryError`" + +#: ../../whatsnew/3.3.rst:352 +msgid ":exc:`PermissionError`" +msgstr ":exc:`PermissionError`" + +#: ../../whatsnew/3.3.rst:353 +msgid ":exc:`ProcessLookupError`" +msgstr ":exc:`ProcessLookupError`" + +#: ../../whatsnew/3.3.rst:354 +msgid ":exc:`TimeoutError`" +msgstr ":exc:`TimeoutError`" + +#: ../../whatsnew/3.3.rst:356 +msgid "And the :exc:`ConnectionError` itself has finer-grained subclasses:" +msgstr "并且 :exc:`ConnectionError` 本身具有细粒度的子类:" + +#: ../../whatsnew/3.3.rst:358 +msgid ":exc:`BrokenPipeError`" +msgstr ":exc:`BrokenPipeError`" + +#: ../../whatsnew/3.3.rst:359 +msgid ":exc:`ConnectionAbortedError`" +msgstr ":exc:`ConnectionAbortedError`" + +#: ../../whatsnew/3.3.rst:360 +msgid ":exc:`ConnectionRefusedError`" +msgstr ":exc:`ConnectionRefusedError`" + +#: ../../whatsnew/3.3.rst:361 +msgid ":exc:`ConnectionResetError`" +msgstr ":exc:`ConnectionResetError`" + +#: ../../whatsnew/3.3.rst:363 +msgid "" +"Thanks to the new exceptions, common usages of the :mod:`errno` can now be " +"avoided. For example, the following code written for Python 3.2::" +msgstr "有了新的异常,现在就可以避免 :mod:`errno` 的常见用法了。 例如,下面是为 Python 3.2 编写的代码:" + +#: ../../whatsnew/3.3.rst:379 +msgid "" +"can now be written without the :mod:`errno` import and without manual " +"inspection of exception attributes::" +msgstr "现在无需导入 :mod:`errno`,也无需手动检查异常属性:" + +#: ../../whatsnew/3.3.rst:392 +msgid ":pep:`3151` - Reworking the OS and IO Exception Hierarchy" +msgstr ":pep:`3151` - 重写 OS 和 IO 异常的层次结构" + +#: ../../whatsnew/3.3.rst:393 +msgid "PEP written and implemented by Antoine Pitrou" +msgstr "PEP 由 Antoine Pitrou 撰写并实现" + +#: ../../whatsnew/3.3.rst:402 +msgid "PEP 380: Syntax for Delegating to a Subgenerator" +msgstr "PEP 380: 委托给子生成器的语法" + +#: ../../whatsnew/3.3.rst:404 +msgid "" +"PEP 380 adds the ``yield from`` expression, allowing a :term:`generator` to " +"delegate part of its operations to another generator. This allows a section " +"of code containing :keyword:`yield` to be factored out and placed in another" +" generator. Additionally, the subgenerator is allowed to return with a " +"value, and the value is made available to the delegating generator." +msgstr "" +"PEP 380 增加了 ``yield from`` 表达式,允许 :term:`generator` 将其部分操作委托给另一个生成器。 这样,包含 " +":keyword:`yield` 的代码部分就可以被分解出来,放在另一个生成器中。 此外,还允许子生成器返回一个值,并将该值提供给委托生成器。" + +#: ../../whatsnew/3.3.rst:411 +msgid "" +"While designed primarily for use in delegating to a subgenerator, the " +"``yield from`` expression actually allows delegation to arbitrary " +"subiterators." +msgstr "虽然 ``yield from`` 表达式主要用于委托给子生成器,但它实际上允许委托给任意子生成器。" + +#: ../../whatsnew/3.3.rst:414 +msgid "" +"For simple iterators, ``yield from iterable`` is essentially just a " +"shortened form of ``for item in iterable: yield item``::" +msgstr "" +"对于简单的迭代器而言,``yield from iterable`` 本质上只是 ``for item in iterable: yield " +"item`` 的简写形式:" + +#: ../../whatsnew/3.3.rst:424 +msgid "" +"However, unlike an ordinary loop, ``yield from`` allows subgenerators to " +"receive sent and thrown values directly from the calling scope, and return a" +" final value to the outer generator::" +msgstr "但是,与普通的循环不同,``yield from`` 允许子生成器直接从调用方作用域获取、发送和抛出值,并向外层生成器返回一个最终值::" + +#: ../../whatsnew/3.3.rst:455 +msgid "" +"The main principle driving this change is to allow even generators that are " +"designed to be used with the ``send`` and ``throw`` methods to be split into" +" multiple subgenerators as easily as a single large function can be split " +"into multiple subfunctions." +msgstr "" +"推动这项改变的主要原则是允许即便被设计用来配合 ``send`` 和 ``throw`` " +"方法使用的生成器也能像一个大函数能拆分成多个子函数那样容易地拆分为多个子生成器。" + +#: ../../whatsnew/3.3.rst:464 +msgid ":pep:`380` - Syntax for Delegating to a Subgenerator" +msgstr ":pep:`380` - 委托给子生成器的语法" + +#: ../../whatsnew/3.3.rst:463 +msgid "" +"PEP written by Greg Ewing; implementation by Greg Ewing, integrated into 3.3" +" by Renaud Blanch, Ryan Kelly and Nick Coghlan; documentation by Zbigniew " +"Jędrzejewski-Szmek and Nick Coghlan" +msgstr "" +"PEP 由 Greg Ewing 撰写,由 Greg Ewing 实现。由 Renaud Blanch,Ryan Kelly 和 Nick " +"Coghlan 集成到3.3,由 Zbigniew Jędrzejewski-Szmek 和 Nick Coghlan 编写文档" + +#: ../../whatsnew/3.3.rst:469 +msgid "PEP 409: Suppressing exception context" +msgstr "PEP 409: 清除异常上下文" + +#: ../../whatsnew/3.3.rst:471 +msgid "" +"PEP 409 introduces new syntax that allows the display of the chained " +"exception context to be disabled. This allows cleaner error messages in " +"applications that convert between exception types::" +msgstr "PEP 409 引入了允许禁用串连的异常上下文显示的新语法。 这允许在不同异常类型间进行转换的应用程序具有更清晰的错误消息::" + +#: ../../whatsnew/3.3.rst:490 +msgid "" +"Without the ``from None`` suffix to suppress the cause, the original " +"exception would be displayed by default::" +msgstr "如果后面没有 ``from None`` 来屏蔽异常原因,则默认原始异常将被显示::" + +#: ../../whatsnew/3.3.rst:514 +msgid "" +"No debugging capability is lost, as the original exception context remains " +"available if needed (for example, if an intervening library has incorrectly " +"suppressed valuable underlying details)::" +msgstr "调试功能并未丢失,因为原始异常上下文在需要时仍然可用(举例来说,如果某个中间库不正确地抑制了有价值的下层细节)::" + +#: ../../whatsnew/3.3.rst:528 +msgid ":pep:`409` - Suppressing exception context" +msgstr ":pep:`409` - 清除异常上下文" + +#: ../../whatsnew/3.3.rst:528 +msgid "" +"PEP written by Ethan Furman; implemented by Ethan Furman and Nick Coghlan." +msgstr "PEP 由 Ethan Furman 撰写 ,由 Ethan Furman 和 Nick Coghlan 实现。" + +#: ../../whatsnew/3.3.rst:533 +msgid "PEP 414: Explicit Unicode literals" +msgstr "PEP 414: 显式的Unicode文本" + +#: ../../whatsnew/3.3.rst:535 +msgid "" +"To ease the transition from Python 2 for Unicode aware Python applications " +"that make heavy use of Unicode literals, Python 3.3 once again supports the " +"\"``u``\" prefix for string literals. This prefix has no semantic " +"significance in Python 3, it is provided solely to reduce the number of " +"purely mechanical changes in migrating to Python 3, making it easier for " +"developers to focus on the more significant semantic changes (such as the " +"stricter default separation of binary and text data)." +msgstr "" +"为使从 Python 2 迁移重度使用 Unicode 字面值的 Unicode 自适应型 Python 应用程序更为容易,Python 3.3 " +"重新支持字符串字面值使用 \"``u``\" 前缀。 该前缀在 Python 3 中并无语法意义,提供它只是为了减少在迁移到 Python 3 " +"时纯粹机械性的修改数量,让开发者能更轻松的关注更重要的语法变化(比如默认更严格的二进制和文本数据的区分)。" + +#: ../../whatsnew/3.3.rst:545 +msgid ":pep:`414` - Explicit Unicode literals" +msgstr ":pep:`414` - 显式的Unicode文本" + +#: ../../whatsnew/3.3.rst:546 +msgid "PEP written by Armin Ronacher." +msgstr "PEP 由 Armin Ronacher 撰写" + +#: ../../whatsnew/3.3.rst:550 +msgid "PEP 3155: Qualified name for classes and functions" +msgstr "PEP 3155: 类和函数的限定名称" + +#: ../../whatsnew/3.3.rst:552 +msgid "" +"Functions and class objects have a new ``__qualname__`` attribute " +"representing the \"path\" from the module top-level to their definition. " +"For global functions and classes, this is the same as ``__name__``. For " +"other functions and classes, it provides better information about where they" +" were actually defined, and how they might be accessible from the global " +"scope." +msgstr "" + +#: ../../whatsnew/3.3.rst:558 +msgid "Example with (non-bound) methods::" +msgstr "包含(未绑定)方法的示例::" + +#: ../../whatsnew/3.3.rst:568 +msgid "Example with nested classes::" +msgstr "包含嵌套类的示例::" + +#: ../../whatsnew/3.3.rst:584 +msgid "Example with nested functions::" +msgstr "包含嵌套函数的示例::" + +#: ../../whatsnew/3.3.rst:596 +msgid "" +"The string representation of those objects is also changed to include the " +"new, more precise information::" +msgstr "这些对象的字符串表示形式也被修改以包括新的更准确的信息::" + +#: ../../whatsnew/3.3.rst:606 +msgid ":pep:`3155` - Qualified name for classes and functions" +msgstr ":pep:`3155` - 类和函数的限定名称" + +#: ../../whatsnew/3.3.rst:607 +msgid "PEP written and implemented by Antoine Pitrou." +msgstr "PEP 由 Antoine Pitrou 撰写并实现" + +#: ../../whatsnew/3.3.rst:613 +msgid "PEP 412: Key-Sharing Dictionary" +msgstr "PEP 412: Key-Sharing Dictionary" + +#: ../../whatsnew/3.3.rst:615 +msgid "" +"Dictionaries used for the storage of objects' attributes are now able to " +"share part of their internal storage between each other (namely, the part " +"which stores the keys and their respective hashes). This reduces the memory" +" consumption of programs creating many instances of non-builtin types." +msgstr "" +"用于存储对象属性的字典现在能够在彼此之间共享部分内部存储(比如说,存储键及其对应哈希值的部分)。 这减少了程序创建多个非内置类型实例的内存消耗。" + +#: ../../whatsnew/3.3.rst:622 +msgid ":pep:`412` - Key-Sharing Dictionary" +msgstr ":pep:`412` - Key-Sharing Dictionary" + +#: ../../whatsnew/3.3.rst:623 +msgid "PEP written and implemented by Mark Shannon." +msgstr "PEP 由 Mark Shannon 撰写并实现。" + +#: ../../whatsnew/3.3.rst:627 +msgid "PEP 362: Function Signature Object" +msgstr "PEP 362: 函数签名对象" + +#: ../../whatsnew/3.3.rst:629 +msgid "" +"A new function :func:`inspect.signature` makes introspection of python " +"callables easy and straightforward. A broad range of callables is " +"supported: python functions, decorated or not, classes, and " +":func:`functools.partial` objects. New classes :class:`inspect.Signature`, " +":class:`inspect.Parameter` and :class:`inspect.BoundArguments` hold " +"information about the call signatures, such as, annotations, default values," +" parameters kinds, and bound arguments, which considerably simplifies " +"writing decorators and any code that validates or amends calling signatures " +"or arguments." +msgstr "" + +#: ../../whatsnew/3.3.rst:641 +msgid ":pep:`362`: - Function Signature Object" +msgstr ":pep:`362`: - 函数签名对象" + +#: ../../whatsnew/3.3.rst:641 +msgid "" +"PEP written by Brett Cannon, Yury Selivanov, Larry Hastings, Jiwon Seo; " +"implemented by Yury Selivanov." +msgstr "" +"PEP 由 Brett Cannon,Yury Selivanov,Larry Hastings,Jiwon Seo 撰写,由 Yury " +"Selivanov 实现" + +#: ../../whatsnew/3.3.rst:646 +msgid "PEP 421: Adding sys.implementation" +msgstr "PEP 421: 添加 sys.implementation" + +#: ../../whatsnew/3.3.rst:648 +msgid "" +"A new attribute on the :mod:`sys` module exposes details specific to the " +"implementation of the currently running interpreter. The initial set of " +"attributes on :attr:`sys.implementation` are ``name``, ``version``, " +"``hexversion``, and ``cache_tag``." +msgstr "" + +#: ../../whatsnew/3.3.rst:653 +msgid "" +"The intention of ``sys.implementation`` is to consolidate into one namespace" +" the implementation-specific data used by the standard library. This allows" +" different Python implementations to share a single standard library code " +"base much more easily. In its initial state, ``sys.implementation`` holds " +"only a small portion of the implementation-specific data. Over time that " +"ratio will shift in order to make the standard library more portable." +msgstr "" + +#: ../../whatsnew/3.3.rst:660 +msgid "" +"One example of improved standard library portability is ``cache_tag``. As " +"of Python 3.3, ``sys.implementation.cache_tag`` is used by :mod:`importlib` " +"to support :pep:`3147` compliance. Any Python implementation that uses " +"``importlib`` for its built-in import system may use ``cache_tag`` to " +"control the caching behavior for modules." +msgstr "" + +#: ../../whatsnew/3.3.rst:667 +msgid "SimpleNamespace" +msgstr "" + +#: ../../whatsnew/3.3.rst:669 +msgid "" +"The implementation of ``sys.implementation`` also introduces a new type to " +"Python: :class:`types.SimpleNamespace`. In contrast to a mapping-based " +"namespace, like :class:`dict`, ``SimpleNamespace`` is attribute-based, like " +":class:`object`. However, unlike ``object``, ``SimpleNamespace`` instances " +"are writable. This means that you can add, remove, and modify the namespace" +" through normal attribute access." +msgstr "" + +#: ../../whatsnew/3.3.rst:678 +msgid ":pep:`421` - Adding sys.implementation" +msgstr ":pep:`421` - 添加 sys.implementation" + +#: ../../whatsnew/3.3.rst:679 +msgid "PEP written and implemented by Eric Snow." +msgstr "PEP 由 Eric Snow 撰写并实现" + +#: ../../whatsnew/3.3.rst:685 +msgid "Using importlib as the Implementation of Import" +msgstr "使用 importlib 作为导入的实现" + +#: ../../whatsnew/3.3.rst:686 +msgid "" +":issue:`2377` - Replace __import__ w/ importlib.__import__ :issue:`13959` - " +"Re-implement parts of :mod:`imp` in pure Python :issue:`14605` - Make import" +" machinery explicit :issue:`14646` - Require loaders set __loader__ and " +"__package__" +msgstr "" +":issue:`2377` - 替代 __import__ w/ importlib.__import__ :issue:`13959` - 以纯 " +"Python 重新实现部分 :mod:`imp` :issue:`14605` - 使导入机制成为显式的 :issue:`14646` - " +"要求加载器设置 __loader__ 和 __package__" + +#: ../../whatsnew/3.3.rst:691 +msgid "" +"The :func:`__import__` function is now powered by " +":func:`importlib.__import__`. This work leads to the completion of \"phase " +"2\" of :pep:`302`. There are multiple benefits to this change. First, it has" +" allowed for more of the machinery powering import to be exposed instead of " +"being implicit and hidden within the C code. It also provides a single " +"implementation for all Python VMs supporting Python 3.3 to use, helping to " +"end any VM-specific deviations in import semantics. And finally it eases the" +" maintenance of import, allowing for future growth to occur." +msgstr "" + +#: ../../whatsnew/3.3.rst:700 +msgid "" +"For the common user, there should be no visible change in semantics. For " +"those whose code currently manipulates import or calls import " +"programmatically, the code changes that might possibly be required are " +"covered in the `Porting Python code`_ section of this document." +msgstr "" + +#: ../../whatsnew/3.3.rst:706 +msgid "New APIs" +msgstr "新的API" + +#: ../../whatsnew/3.3.rst:707 +msgid "" +"One of the large benefits of this work is the exposure of what goes into " +"making the import statement work. That means the various importers that were" +" once implicit are now fully exposed as part of the :mod:`importlib` " +"package." +msgstr "" + +#: ../../whatsnew/3.3.rst:711 +msgid "" +"The abstract base classes defined in :mod:`importlib.abc` have been expanded" +" to properly delineate between :term:`meta path finders ` " +"and :term:`path entry finders ` by introducing " +":class:`importlib.abc.MetaPathFinder` and " +":class:`importlib.abc.PathEntryFinder`, respectively. The old ABC of " +":class:`importlib.abc.Finder` is now only provided for backwards-" +"compatibility and does not enforce any method requirements." +msgstr "" + +#: ../../whatsnew/3.3.rst:719 +msgid "" +"In terms of finders, :class:`importlib.machinery.FileFinder` exposes the " +"mechanism used to search for source and bytecode files of a module. " +"Previously this class was an implicit member of :attr:`sys.path_hooks`." +msgstr "" + +#: ../../whatsnew/3.3.rst:723 +msgid "" +"For loaders, the new abstract base class :class:`importlib.abc.FileLoader` " +"helps write a loader that uses the file system as the storage mechanism for " +"a module's code. The loader for source files " +"(:class:`importlib.machinery.SourceFileLoader`), sourceless bytecode files " +"(:class:`importlib.machinery.SourcelessFileLoader`), and extension modules " +"(:class:`importlib.machinery.ExtensionFileLoader`) are now available for " +"direct use." +msgstr "" + +#: ../../whatsnew/3.3.rst:731 +msgid "" +":exc:`ImportError` now has ``name`` and ``path`` attributes which are set " +"when there is relevant data to provide. The message for failed imports will " +"also provide the full name of the module now instead of just the tail end of" +" the module's name." +msgstr "" + +#: ../../whatsnew/3.3.rst:736 +msgid "" +"The :func:`importlib.invalidate_caches` function will now call the method " +"with the same name on all finders cached in :attr:`sys.path_importer_cache` " +"to help clean up any stored state as necessary." +msgstr "" + +#: ../../whatsnew/3.3.rst:741 +msgid "Visible Changes" +msgstr "可见的改变" + +#: ../../whatsnew/3.3.rst:743 +msgid "" +"For potential required changes to code, see the `Porting Python code`_ " +"section." +msgstr "" + +#: ../../whatsnew/3.3.rst:746 +msgid "" +"Beyond the expanse of what :mod:`importlib` now exposes, there are other " +"visible changes to import. The biggest is that :attr:`sys.meta_path` and " +":attr:`sys.path_hooks` now store all of the meta path finders and path entry" +" hooks used by import. Previously the finders were implicit and hidden " +"within the C code of import instead of being directly exposed. This means " +"that one can now easily remove or change the order of the various finders to" +" fit one's needs." +msgstr "" + +#: ../../whatsnew/3.3.rst:753 +msgid "" +"Another change is that all modules have a ``__loader__`` attribute, storing " +"the loader used to create the module. :pep:`302` has been updated to make " +"this attribute mandatory for loaders to implement, so in the future once " +"3rd-party loaders have been updated people will be able to rely on the " +"existence of the attribute. Until such time, though, import is setting the " +"module post-load." +msgstr "" + +#: ../../whatsnew/3.3.rst:759 +msgid "" +"Loaders are also now expected to set the ``__package__`` attribute from " +":pep:`366`. Once again, import itself is already setting this on all loaders" +" from :mod:`importlib` and import itself is setting the attribute post-load." +msgstr "" + +#: ../../whatsnew/3.3.rst:763 +msgid "" +"``None`` is now inserted into :attr:`sys.path_importer_cache` when no finder" +" can be found on :attr:`sys.path_hooks`. Since :class:`imp.NullImporter` is " +"not directly exposed on :attr:`sys.path_hooks` it could no longer be relied " +"upon to always be available to use as a value representing no finder found." +msgstr "" + +#: ../../whatsnew/3.3.rst:768 +msgid "" +"All other changes relate to semantic changes which should be taken into " +"consideration when updating code for Python 3.3, and thus should be read " +"about in the `Porting Python code`_ section of this document." +msgstr "" + +#: ../../whatsnew/3.3.rst:772 +msgid "(Implementation by Brett Cannon)" +msgstr "(由 Brett Cannon 编写的实现)" + +#: ../../whatsnew/3.3.rst:776 +msgid "Other Language Changes" +msgstr "其他语言特性修改" + +#: ../../whatsnew/3.3.rst:778 +msgid "Some smaller changes made to the core Python language are:" +msgstr "对Python 语言核心进行的小改动:" + +#: ../../whatsnew/3.3.rst:780 +msgid "" +"Added support for Unicode name aliases and named sequences. Both " +":func:`unicodedata.lookup()` and ``'\\N{...}'`` now resolve name aliases, " +"and :func:`unicodedata.lookup()` resolves named sequences too." +msgstr "" + +#: ../../whatsnew/3.3.rst:784 +msgid "(Contributed by Ezio Melotti in :issue:`12753`.)" +msgstr "(由 Ezio Melotti 在 :issue:`12753` 中贡献。)" + +#: ../../whatsnew/3.3.rst:786 +msgid "Unicode database updated to UCD version 6.1.0" +msgstr "Unicode 数据库更新至 UCD 版本 6.1.0" + +#: ../../whatsnew/3.3.rst:788 +msgid "" +"Equality comparisons on :func:`range` objects now return a result reflecting" +" the equality of the underlying sequences generated by those range objects. " +"(:issue:`13201`)" +msgstr "" + +#: ../../whatsnew/3.3.rst:792 +msgid "" +"The ``count()``, ``find()``, ``rfind()``, ``index()`` and ``rindex()`` " +"methods of :class:`bytes` and :class:`bytearray` objects now accept an " +"integer between 0 and 255 as their first argument." +msgstr "" + +#: ../../whatsnew/3.3.rst:796 +msgid "(Contributed by Petri Lehtinen in :issue:`12170`.)" +msgstr "(由 Petri Lehtinen 在 :issue:`12170` 中贡献。)" + +#: ../../whatsnew/3.3.rst:798 +msgid "" +"The ``rjust()``, ``ljust()``, and ``center()`` methods of :class:`bytes` and" +" :class:`bytearray` now accept a :class:`bytearray` for the ``fill`` " +"argument. (Contributed by Petri Lehtinen in :issue:`12380`.)" +msgstr "" + +#: ../../whatsnew/3.3.rst:802 +msgid "" +"New methods have been added to :class:`list` and :class:`bytearray`: " +"``copy()`` and ``clear()`` (:issue:`10516`). Consequently, " +":class:`~collections.abc.MutableSequence` now also defines a " +":meth:`~collections.abc.MutableSequence.clear` method (:issue:`11388`)." +msgstr "" + +#: ../../whatsnew/3.3.rst:807 +msgid "Raw bytes literals can now be written ``rb\"...\"`` as well as ``br\"...\"``." +msgstr "" + +#: ../../whatsnew/3.3.rst:809 +msgid "(Contributed by Antoine Pitrou in :issue:`13748`.)" +msgstr "(由 Antoine Pitrou 在 :issue:`13748` 中贡献。)" + +#: ../../whatsnew/3.3.rst:811 +msgid "" +":meth:`dict.setdefault` now does only one lookup for the given key, making " +"it atomic when used with built-in types." +msgstr "" + +#: ../../whatsnew/3.3.rst:814 +msgid "(Contributed by Filip Gruszczyński in :issue:`13521`.)" +msgstr "(由 Filip Gruszczyński 在 :issue:`13521` 中贡献。)" + +#: ../../whatsnew/3.3.rst:816 +msgid "" +"The error messages produced when a function call does not match the function" +" signature have been significantly improved." +msgstr "" + +#: ../../whatsnew/3.3.rst:819 +msgid "(Contributed by Benjamin Peterson.)" +msgstr "(由 Benjamin Peterson 贡献。)" + +#: ../../whatsnew/3.3.rst:823 +msgid "A Finer-Grained Import Lock" +msgstr "" + +#: ../../whatsnew/3.3.rst:825 +msgid "" +"Previous versions of CPython have always relied on a global import lock. " +"This led to unexpected annoyances, such as deadlocks when importing a module" +" would trigger code execution in a different thread as a side-effect. Clumsy" +" workarounds were sometimes employed, such as the " +":c:func:`PyImport_ImportModuleNoBlock` C API function." +msgstr "" + +#: ../../whatsnew/3.3.rst:831 +msgid "" +"In Python 3.3, importing a module takes a per-module lock. This correctly " +"serializes importation of a given module from multiple threads (preventing " +"the exposure of incompletely initialized modules), while eliminating the " +"aforementioned annoyances." +msgstr "" + +#: ../../whatsnew/3.3.rst:836 +msgid "(Contributed by Antoine Pitrou in :issue:`9260`.)" +msgstr "(由 Antoine Pitrou 在 :issue:`9260` 中贡献。)" + +#: ../../whatsnew/3.3.rst:840 +msgid "Builtin functions and types" +msgstr "内置函数和类型" + +#: ../../whatsnew/3.3.rst:842 +msgid "" +":func:`open` gets a new *opener* parameter: the underlying file descriptor " +"for the file object is then obtained by calling *opener* with (*file*, " +"*flags*). It can be used to use custom flags like :data:`os.O_CLOEXEC` for " +"example. The ``'x'`` mode was added: open for exclusive creation, failing if" +" the file already exists." +msgstr "" + +#: ../../whatsnew/3.3.rst:847 +msgid "" +":func:`print`: added the *flush* keyword argument. If the *flush* keyword " +"argument is true, the stream is forcibly flushed." +msgstr ":func:`print`: 增加了 *flush* 关键字参数。 如果 *flush* 关键字参数为真值,流会被强制刷新。" + +#: ../../whatsnew/3.3.rst:849 +msgid "" +":func:`hash`: hash randomization is enabled by default, see " +":meth:`object.__hash__` and :envvar:`PYTHONHASHSEED`." +msgstr "" +":func:`hash`: 默认将启用哈希随机化,参见 :meth:`object.__hash__` 和 " +":envvar:`PYTHONHASHSEED`。" + +#: ../../whatsnew/3.3.rst:851 +msgid "" +"The :class:`str` type gets a new :meth:`~str.casefold` method: return a " +"casefolded copy of the string, casefolded strings may be used for caseless " +"matching. For example, ``'ß'.casefold()`` returns ``'ss'``." +msgstr "" + +#: ../../whatsnew/3.3.rst:854 +msgid "" +"The sequence documentation has been substantially rewritten to better " +"explain the binary/text sequence distinction and to provide specific " +"documentation sections for the individual builtin sequence types " +"(:issue:`4966`)." +msgstr "" + +#: ../../whatsnew/3.3.rst:861 +msgid "New Modules" +msgstr "新增模块" + +#: ../../whatsnew/3.3.rst:864 +msgid "faulthandler" +msgstr "faulthandler" + +#: ../../whatsnew/3.3.rst:866 +msgid "" +"This new debug module :mod:`faulthandler` contains functions to dump Python " +"tracebacks explicitly, on a fault (a crash like a segmentation fault), after" +" a timeout, or on a user signal. Call :func:`faulthandler.enable` to install" +" fault handlers for the :const:`SIGSEGV`, :const:`SIGFPE`, :const:`SIGABRT`," +" :const:`SIGBUS`, and :const:`SIGILL` signals. You can also enable them at " +"startup by setting the :envvar:`PYTHONFAULTHANDLER` environment variable or " +"by using :option:`-X` ``faulthandler`` command line option." +msgstr "" + +#: ../../whatsnew/3.3.rst:874 +msgid "Example of a segmentation fault on Linux:" +msgstr "Linux 上的段错误示例:" + +#: ../../whatsnew/3.3.rst:890 +msgid "ipaddress" +msgstr "ipaddress" + +#: ../../whatsnew/3.3.rst:892 +msgid "" +"The new :mod:`ipaddress` module provides tools for creating and manipulating" +" objects representing IPv4 and IPv6 addresses, networks and interfaces (i.e." +" an IP address associated with a specific IP subnet)." +msgstr "" +"新的 :mod:`ipaddress` 模块提供了用于创建和操作代表 IPv4 和 IPv6 地址、网络和接口(即关联到特定 IP 子网的 IP " +"地址)的工具。" + +#: ../../whatsnew/3.3.rst:896 +msgid "(Contributed by Google and Peter Moody in :pep:`3144`.)" +msgstr "(由 Google 和 Peter Moody 在 :issue:`3144` 中贡献。)" + +#: ../../whatsnew/3.3.rst:899 +msgid "lzma" +msgstr "lzma" + +#: ../../whatsnew/3.3.rst:901 +msgid "" +"The newly-added :mod:`lzma` module provides data compression and " +"decompression using the LZMA algorithm, including support for the ``.xz`` " +"and ``.lzma`` file formats." +msgstr "" + +#: ../../whatsnew/3.3.rst:905 +msgid "(Contributed by Nadeem Vawda and Per Øyvind Karlsen in :issue:`6715`.)" +msgstr "(由 Nadeem Vawda 和 Per Øyvind Karlsen 在 :issue:`6715` 中贡献。)" + +#: ../../whatsnew/3.3.rst:909 +msgid "Improved Modules" +msgstr "改进的模块" + +#: ../../whatsnew/3.3.rst:912 +msgid "abc" +msgstr "abc" + +#: ../../whatsnew/3.3.rst:914 +msgid "" +"Improved support for abstract base classes containing descriptors composed " +"with abstract methods. The recommended approach to declaring abstract " +"descriptors is now to provide :attr:`__isabstractmethod__` as a dynamically " +"updated property. The built-in descriptors have been updated accordingly." +msgstr "" + +#: ../../whatsnew/3.3.rst:919 ../../whatsnew/3.3.rst:2245 +msgid "" +":class:`abc.abstractproperty` has been deprecated, use :class:`property` " +"with :func:`abc.abstractmethod` instead." +msgstr "" + +#: ../../whatsnew/3.3.rst:921 ../../whatsnew/3.3.rst:2247 +msgid "" +":class:`abc.abstractclassmethod` has been deprecated, use " +":class:`classmethod` with :func:`abc.abstractmethod` instead." +msgstr "" + +#: ../../whatsnew/3.3.rst:923 ../../whatsnew/3.3.rst:2249 +msgid "" +":class:`abc.abstractstaticmethod` has been deprecated, use " +":class:`staticmethod` with :func:`abc.abstractmethod` instead." +msgstr "" + +#: ../../whatsnew/3.3.rst:926 +msgid "(Contributed by Darren Dale in :issue:`11610`.)" +msgstr "(由 Pablo Galindo 在 :issue:`11610` 中贡献。)" + +#: ../../whatsnew/3.3.rst:928 +msgid "" +":meth:`abc.ABCMeta.register` now returns the registered subclass, which " +"means it can now be used as a class decorator (:issue:`10868`)." +msgstr "" + +#: ../../whatsnew/3.3.rst:933 +msgid "array" +msgstr "array" + +#: ../../whatsnew/3.3.rst:935 +msgid "" +"The :mod:`array` module supports the :c:type:`long long` type using ``q`` " +"and ``Q`` type codes." +msgstr "" + +#: ../../whatsnew/3.3.rst:938 +msgid "" +"(Contributed by Oren Tirosh and Hirokazu Yamamoto in :issue:`1172711`.)" +msgstr "(由 Oren Tirosh 和 Hirokazu Yamamoto 在 :issue:`1172711` 中贡献。)" + +#: ../../whatsnew/3.3.rst:942 +msgid "base64" +msgstr "base64" + +#: ../../whatsnew/3.3.rst:944 +msgid "" +"ASCII-only Unicode strings are now accepted by the decoding functions of the" +" :mod:`base64` modern interface. For example, ``base64.b64decode('YWJj')`` " +"returns ``b'abc'``. (Contributed by Catalin Iacob in :issue:`13641`.)" +msgstr "" + +#: ../../whatsnew/3.3.rst:950 +msgid "binascii" +msgstr "binascii" + +#: ../../whatsnew/3.3.rst:952 +msgid "" +"In addition to the binary objects they normally accept, the ``a2b_`` " +"functions now all also accept ASCII-only strings as input. (Contributed by " +"Antoine Pitrou in :issue:`13637`.)" +msgstr "" + +#: ../../whatsnew/3.3.rst:958 +msgid "bz2" +msgstr "bz2" + +#: ../../whatsnew/3.3.rst:960 +msgid "" +"The :mod:`bz2` module has been rewritten from scratch. In the process, " +"several new features have been added:" +msgstr ":mod:`bz2` 模块已被重新编写。 在此过程中,添加了一些新的特征:" + +#: ../../whatsnew/3.3.rst:963 +msgid "" +"New :func:`bz2.open` function: open a bzip2-compressed file in binary or " +"text mode." +msgstr "新的 :func:`bz2.open` 函数:以二进制或文本模式打开 bzip2 压缩文件。" + +#: ../../whatsnew/3.3.rst:966 +msgid "" +":class:`bz2.BZ2File` can now read from and write to arbitrary file-like " +"objects, by means of its constructor's *fileobj* argument." +msgstr ":class:`bz2.BZ2File` 现在可以读写任意文件型对象,具体方式是通过其构造器的 *fileobj* 参数。" + +#: ../../whatsnew/3.3.rst:969 +msgid "(Contributed by Nadeem Vawda in :issue:`5863`.)" +msgstr "(由 Nadeem Vawda 在 :issue:`5863` 中贡献。)" + +#: ../../whatsnew/3.3.rst:971 +msgid "" +":class:`bz2.BZ2File` and :func:`bz2.decompress` can now decompress multi-" +"stream inputs (such as those produced by the :program:`pbzip2` tool). " +":class:`bz2.BZ2File` can now also be used to create this type of file, using" +" the ``'a'`` (append) mode." +msgstr "" + +#: ../../whatsnew/3.3.rst:976 +msgid "(Contributed by Nir Aides in :issue:`1625`.)" +msgstr "(由 Nir Aides 在 :issue:`1625` 中贡献。)" + +#: ../../whatsnew/3.3.rst:978 +msgid "" +":class:`bz2.BZ2File` now implements all of the :class:`io.BufferedIOBase` " +"API, except for the :meth:`detach` and :meth:`truncate` methods." +msgstr "" + +#: ../../whatsnew/3.3.rst:983 +msgid "codecs" +msgstr "编码器" + +#: ../../whatsnew/3.3.rst:985 +msgid "" +"The :mod:`~encodings.mbcs` codec has been rewritten to handle correctly " +"``replace`` and ``ignore`` error handlers on all Windows versions. The " +":mod:`~encodings.mbcs` codec now supports all error handlers, instead of " +"only ``replace`` to encode and ``ignore`` to decode." +msgstr "" + +#: ../../whatsnew/3.3.rst:990 +msgid "" +"A new Windows-only codec has been added: ``cp65001`` (:issue:`13216`). It is" +" the Windows code page 65001 (Windows UTF-8, ``CP_UTF8``). For example, it " +"is used by ``sys.stdout`` if the console output code page is set to cp65001 " +"(e.g., using ``chcp 65001`` command)." +msgstr "" + +#: ../../whatsnew/3.3.rst:995 +msgid "" +"Multibyte CJK decoders now resynchronize faster. They only ignore the first" +" byte of an invalid byte sequence. For example, " +"``b'\\xff\\n'.decode('gb2312', 'replace')`` now returns a ``\\n`` after the " +"replacement character." +msgstr "" + +#: ../../whatsnew/3.3.rst:999 +msgid "(:issue:`12016`)" +msgstr "(:issue:`12016`)" + +#: ../../whatsnew/3.3.rst:1001 +msgid "" +"Incremental CJK codec encoders are no longer reset at each call to their " +"encode() methods. For example::" +msgstr "" + +#: ../../whatsnew/3.3.rst:1009 +msgid "" +"This example gives ``b'~{Np~}~{J)~}~{l6~}~{HK~}~{!#~} Bye.'`` with older " +"Python versions." +msgstr "对于旧版 Python 此示例将给出 ``b'~{Np~}~{J)~}~{l6~}~{HK~}~{!#~} Bye.'``。" + +#: ../../whatsnew/3.3.rst:1012 +msgid "(:issue:`12100`)" +msgstr "(:issue:`12100`)" + +#: ../../whatsnew/3.3.rst:1014 +msgid "The ``unicode_internal`` codec has been deprecated." +msgstr "``unicode_internal`` 编解码器已被弃用。" + +#: ../../whatsnew/3.3.rst:1018 +msgid "collections" +msgstr "collections" + +#: ../../whatsnew/3.3.rst:1020 +msgid "" +"Addition of a new :class:`~collections.ChainMap` class to allow treating a " +"number of mappings as a single unit. (Written by Raymond Hettinger for " +":issue:`11089`, made public in :issue:`11297`.)" +msgstr "" + +#: ../../whatsnew/3.3.rst:1024 +msgid "" +"The abstract base classes have been moved in a new :mod:`collections.abc` " +"module, to better differentiate between the abstract and the concrete " +"collections classes. Aliases for ABCs are still present in the " +":mod:`collections` module to preserve existing imports. (:issue:`11085`)" +msgstr "" + +#: ../../whatsnew/3.3.rst:1031 +msgid "" +"The :class:`~collections.Counter` class now supports the unary ``+`` and " +"``-`` operators, as well as the in-place operators ``+=``, ``-=``, ``|=``, " +"and ``&=``. (Contributed by Raymond Hettinger in :issue:`13121`.)" +msgstr "" + +#: ../../whatsnew/3.3.rst:1037 +msgid "contextlib" +msgstr "contextlib" + +#: ../../whatsnew/3.3.rst:1039 +msgid "" +":class:`~contextlib.ExitStack` now provides a solid foundation for " +"programmatic manipulation of context managers and similar cleanup " +"functionality. Unlike the previous ``contextlib.nested`` API (which was " +"deprecated and removed), the new API is designed to work correctly " +"regardless of whether context managers acquire their resources in their " +"``__init__`` method (for example, file objects) or in their ``__enter__`` " +"method (for example, synchronisation objects from the :mod:`threading` " +"module)." +msgstr "" + +#: ../../whatsnew/3.3.rst:1048 +msgid "(:issue:`13585`)" +msgstr "(:issue:`13585`)" + +#: ../../whatsnew/3.3.rst:1052 +msgid "crypt" +msgstr "crypt" + +#: ../../whatsnew/3.3.rst:1054 +msgid "" +"Addition of salt and modular crypt format (hashing method) and the " +":func:`~crypt.mksalt` function to the :mod:`crypt` module." +msgstr "" + +#: ../../whatsnew/3.3.rst:1057 +msgid "(:issue:`10924`)" +msgstr "(:issue:`10924`)" + +#: ../../whatsnew/3.3.rst:1060 +msgid "curses" +msgstr "curses" + +#: ../../whatsnew/3.3.rst:1062 +msgid "" +"If the :mod:`curses` module is linked to the ncursesw library, use Unicode " +"functions when Unicode strings or characters are passed (e.g. " +":c:func:`waddwstr`), and bytes functions otherwise (e.g. :c:func:`waddstr`)." +msgstr "" + +#: ../../whatsnew/3.3.rst:1065 +msgid "" +"Use the locale encoding instead of ``utf-8`` to encode Unicode strings." +msgstr "" + +#: ../../whatsnew/3.3.rst:1066 +msgid "" +":class:`curses.window` has a new :attr:`curses.window.encoding` attribute." +msgstr ":class:`curses.window` 添加了新的 :attr:`curses.window.encoding` 属性。" + +#: ../../whatsnew/3.3.rst:1067 +msgid "" +"The :class:`curses.window` class has a new :meth:`~curses.window.get_wch` " +"method to get a wide character" +msgstr "" +":class:`curses.window` 类有一个新的 :meth:`~curses.window.get_wch` 方法用来获取一个宽字符。" + +#: ../../whatsnew/3.3.rst:1069 +msgid "" +"The :mod:`curses` module has a new :meth:`~curses.unget_wch` function to " +"push a wide character so the next :meth:`~curses.window.get_wch` will return" +" it" +msgstr "" +":mod:`curses` 模块有一个新的 :meth:`~curses.unget_wch` 函数用来推入一个宽字符以便下一个 " +":meth:`~curses.window.get_wch` 将返回它。" + +#: ../../whatsnew/3.3.rst:1073 +msgid "(Contributed by Iñigo Serna in :issue:`6755`.)" +msgstr "(由 Iñigo Serna 在 :issue:`6755` 中贡献。)" + +#: ../../whatsnew/3.3.rst:1076 +msgid "datetime" +msgstr "datetime" + +#: ../../whatsnew/3.3.rst:1078 +msgid "" +"Equality comparisons between naive and aware :class:`~datetime.datetime` " +"instances now return :const:`False` instead of raising :exc:`TypeError` " +"(:issue:`15006`)." +msgstr "" + +#: ../../whatsnew/3.3.rst:1081 +msgid "" +"New :meth:`datetime.datetime.timestamp` method: Return POSIX timestamp " +"corresponding to the :class:`~datetime.datetime` instance." +msgstr "" + +#: ../../whatsnew/3.3.rst:1083 +msgid "" +"The :meth:`datetime.datetime.strftime` method supports formatting years " +"older than 1000." +msgstr "" + +#: ../../whatsnew/3.3.rst:1085 +msgid "" +"The :meth:`datetime.datetime.astimezone` method can now be called without " +"arguments to convert datetime instance to the system timezone." +msgstr "" + +#: ../../whatsnew/3.3.rst:1093 +msgid "decimal" +msgstr "decimal" + +#: ../../whatsnew/3.3.rst:1096 +msgid ":issue:`7652` - integrate fast native decimal arithmetic." +msgstr "" + +#: ../../whatsnew/3.3.rst:1096 +msgid "C-module and libmpdec written by Stefan Krah." +msgstr "" + +#: ../../whatsnew/3.3.rst:1098 +msgid "" +"The new C version of the decimal module integrates the high speed libmpdec " +"library for arbitrary precision correctly-rounded decimal floating point " +"arithmetic. libmpdec conforms to IBM's General Decimal Arithmetic " +"Specification." +msgstr "" + +#: ../../whatsnew/3.3.rst:1102 +msgid "" +"Performance gains range from 10x for database applications to 100x for " +"numerically intensive applications. These numbers are expected gains for " +"standard precisions used in decimal floating point arithmetic. Since the " +"precision is user configurable, the exact figures may vary. For example, in " +"integer bignum arithmetic the differences can be significantly higher." +msgstr "" + +#: ../../whatsnew/3.3.rst:1108 +msgid "" +"The following table is meant as an illustration. Benchmarks are available at" +" http://www.bytereef.org/mpdecimal/quickstart.html." +msgstr "" + +#: ../../whatsnew/3.3.rst:1112 +msgid "decimal.py" +msgstr "decimal.py" + +#: ../../whatsnew/3.3.rst:1112 +msgid "_decimal" +msgstr "_decimal" + +#: ../../whatsnew/3.3.rst:1112 +msgid "speedup" +msgstr "加速" + +#: ../../whatsnew/3.3.rst:1114 +msgid "pi" +msgstr "pi" + +#: ../../whatsnew/3.3.rst:1114 +msgid "42.02s" +msgstr "42.02秒" + +#: ../../whatsnew/3.3.rst:1114 +msgid "0.345s" +msgstr "0.345秒" + +#: ../../whatsnew/3.3.rst:1114 +msgid "120x" +msgstr "120倍" + +#: ../../whatsnew/3.3.rst:1116 +msgid "telco" +msgstr "telco" + +#: ../../whatsnew/3.3.rst:1116 +msgid "172.19s" +msgstr "172.19秒" + +#: ../../whatsnew/3.3.rst:1116 +msgid "5.68s" +msgstr "5.68秒" + +#: ../../whatsnew/3.3.rst:1116 +msgid "30x" +msgstr "30倍" + +#: ../../whatsnew/3.3.rst:1118 +msgid "psycopg" +msgstr "psycopg" + +#: ../../whatsnew/3.3.rst:1118 +msgid "3.57s" +msgstr "3.57秒" + +#: ../../whatsnew/3.3.rst:1118 +msgid "0.29s" +msgstr "0.29秒" + +#: ../../whatsnew/3.3.rst:1118 +msgid "12x" +msgstr "12倍" + +#: ../../whatsnew/3.3.rst:1124 +msgid "" +"The :exc:`~decimal.FloatOperation` signal optionally enables stricter " +"semantics for mixing floats and Decimals." +msgstr "" + +#: ../../whatsnew/3.3.rst:1127 +msgid "" +"If Python is compiled without threads, the C version automatically disables " +"the expensive thread local context machinery. In this case, the variable " +":data:`~decimal.HAVE_THREADS` is set to ``False``." +msgstr "" + +#: ../../whatsnew/3.3.rst:1134 +msgid "" +"The C module has the following context limits, depending on the machine " +"architecture:" +msgstr "C模块上下文限制(如下表),具体取决于计算机体系结构:" + +#: ../../whatsnew/3.3.rst:1138 +msgid "32-bit" +msgstr "32位" + +#: ../../whatsnew/3.3.rst:1138 +msgid "64-bit" +msgstr "64位" + +#: ../../whatsnew/3.3.rst:1140 +msgid ":const:`MAX_PREC`" +msgstr ":const:`MAX_PREC`" + +#: ../../whatsnew/3.3.rst:1140 ../../whatsnew/3.3.rst:1142 +msgid ":const:`425000000`" +msgstr ":const:`425000000`" + +#: ../../whatsnew/3.3.rst:1140 ../../whatsnew/3.3.rst:1142 +msgid ":const:`999999999999999999`" +msgstr ":const:`999999999999999999`" + +#: ../../whatsnew/3.3.rst:1142 +msgid ":const:`MAX_EMAX`" +msgstr ":const:`MAX_EMAX`" + +#: ../../whatsnew/3.3.rst:1144 +msgid ":const:`MIN_EMIN`" +msgstr ":const:`MIN_EMIN`" + +#: ../../whatsnew/3.3.rst:1144 +msgid ":const:`-425000000`" +msgstr ":const:`-425000000`" + +#: ../../whatsnew/3.3.rst:1144 +msgid ":const:`-999999999999999999`" +msgstr ":const:`-999999999999999999`" + +#: ../../whatsnew/3.3.rst:1147 +msgid "" +"In the context templates (:class:`~decimal.DefaultContext`, " +":class:`~decimal.BasicContext` and :class:`~decimal.ExtendedContext`) the " +"magnitude of :attr:`~decimal.Context.Emax` and :attr:`~decimal.Context.Emin`" +" has changed to :const:`999999`." +msgstr "" + +#: ../../whatsnew/3.3.rst:1152 +msgid "" +"The :class:`~decimal.Decimal` constructor in decimal.py does not observe the" +" context limits and converts values with arbitrary exponents or precision " +"exactly. Since the C version has internal limits, the following scheme is " +"used: If possible, values are converted exactly, otherwise " +":exc:`~decimal.InvalidOperation` is raised and the result is NaN. In the " +"latter case it is always possible to use " +":meth:`~decimal.Context.create_decimal` in order to obtain a rounded or " +"inexact value." +msgstr "" + +#: ../../whatsnew/3.3.rst:1161 +msgid "" +"The power function in decimal.py is always correctly-rounded. In the C " +"version, it is defined in terms of the correctly-rounded " +":meth:`~decimal.Decimal.exp` and :meth:`~decimal.Decimal.ln` functions, but " +"the final result is only \"almost always correctly rounded\"." +msgstr "" + +#: ../../whatsnew/3.3.rst:1167 +msgid "" +"In the C version, the context dictionary containing the signals is a " +":class:`~collections.abc.MutableMapping`. For speed reasons, " +":attr:`~decimal.Context.flags` and :attr:`~decimal.Context.traps` always " +"refer to the same :class:`~collections.abc.MutableMapping` that the context " +"was initialized with. If a new signal dictionary is assigned, " +":attr:`~decimal.Context.flags` and :attr:`~decimal.Context.traps` are " +"updated with the new values, but they do not reference the RHS dictionary." +msgstr "" + +#: ../../whatsnew/3.3.rst:1177 +msgid "" +"Pickling a :class:`~decimal.Context` produces a different output in order to" +" have a common interchange format for the Python and C versions." +msgstr "" + +#: ../../whatsnew/3.3.rst:1181 +msgid "" +"The order of arguments in the :class:`~decimal.Context` constructor has been" +" changed to match the order displayed by :func:`repr`." +msgstr "" + +#: ../../whatsnew/3.3.rst:1185 +msgid "" +"The ``watchexp`` parameter in the :meth:`~decimal.Decimal.quantize` method " +"is deprecated." +msgstr ":meth:`~decimal.Decimal.quantize` 方法的 ``watchexp`` 形参已被弃用。" + +#: ../../whatsnew/3.3.rst:1192 +msgid "email" +msgstr "email" + +#: ../../whatsnew/3.3.rst:1195 +msgid "Policy Framework" +msgstr "策略框架" + +#: ../../whatsnew/3.3.rst:1197 +msgid "" +"The email package now has a :mod:`~email.policy` framework. A " +":class:`~email.policy.Policy` is an object with several methods and " +"properties that control how the email package behaves. The primary policy " +"for Python 3.3 is the :class:`~email.policy.Compat32` policy, which provides" +" backward compatibility with the email package in Python 3.2. A ``policy`` " +"can be specified when an email message is parsed by a :mod:`~email.parser`, " +"or when a :class:`~email.message.Message` object is created, or when an " +"email is serialized using a :mod:`~email.generator`. Unless overridden, a " +"policy passed to a ``parser`` is inherited by all the ``Message`` object and" +" sub-objects created by the ``parser``. By default a ``generator`` will use" +" the policy of the ``Message`` object it is serializing. The default policy" +" is :data:`~email.policy.compat32`." +msgstr "" + +#: ../../whatsnew/3.3.rst:1210 +msgid "The minimum set of controls implemented by all ``policy`` objects are:" +msgstr "" + +#: ../../whatsnew/3.3.rst:1215 +msgid "max_line_length" +msgstr "" + +#: ../../whatsnew/3.3.rst:1215 +msgid "" +"The maximum length, excluding the linesep character(s), individual lines may" +" have when a ``Message`` is serialized. Defaults to 78." +msgstr "" + +#: ../../whatsnew/3.3.rst:1219 +msgid "linesep" +msgstr "" + +#: ../../whatsnew/3.3.rst:1219 +msgid "" +"The character used to separate individual lines when a ``Message`` is " +"serialized. Defaults to ``\\n``." +msgstr "" + +#: ../../whatsnew/3.3.rst:1222 +msgid "cte_type" +msgstr "" + +#: ../../whatsnew/3.3.rst:1222 +msgid "" +"``7bit`` or ``8bit``. ``8bit`` applies only to a ``Bytes`` ``generator``, " +"and means that non-ASCII may be used where allowed by the protocol (or where" +" it exists in the original input)." +msgstr "" + +#: ../../whatsnew/3.3.rst:1227 +msgid "raise_on_defect" +msgstr "raise_on_defect" + +#: ../../whatsnew/3.3.rst:1227 +msgid "" +"Causes a ``parser`` to raise error when defects are encountered instead of " +"adding them to the ``Message`` object's ``defects`` list." +msgstr "导致一个 ``parser`` 在遇到缺陷时引发错误而不是将它们添加到 ``Message`` 对象的 ``defects`` 列表。" + +#: ../../whatsnew/3.3.rst:1232 +msgid "" +"A new policy instance, with new settings, is created using the " +":meth:`~email.policy.Policy.clone` method of policy objects. ``clone`` " +"takes any of the above controls as keyword arguments. Any control not " +"specified in the call retains its default value. Thus you can create a " +"policy that uses ``\\r\\n`` linesep characters like this::" +msgstr "" + +#: ../../whatsnew/3.3.rst:1240 +msgid "" +"Policies can be used to make the generation of messages in the format needed" +" by your application simpler. Instead of having to remember to specify " +"``linesep='\\r\\n'`` in all the places you call a ``generator``, you can " +"specify it once, when you set the policy used by the ``parser`` or the " +"``Message``, whichever your program uses to create ``Message`` objects. On " +"the other hand, if you need to generate messages in multiple forms, you can " +"still specify the parameters in the appropriate ``generator`` call. Or you " +"can have custom policy instances for your different cases, and pass those in" +" when you create the ``generator``." +msgstr "" + +#: ../../whatsnew/3.3.rst:1252 +msgid "Provisional Policy with New Header API" +msgstr "" + +#: ../../whatsnew/3.3.rst:1254 +msgid "" +"While the policy framework is worthwhile all by itself, the main motivation " +"for introducing it is to allow the creation of new policies that implement " +"new features for the email package in a way that maintains backward " +"compatibility for those who do not use the new policies. Because the new " +"policies introduce a new API, we are releasing them in Python 3.3 as a " +":term:`provisional policy `. Backwards incompatible " +"changes (up to and including removal of the code) may occur if deemed " +"necessary by the core developers." +msgstr "" + +#: ../../whatsnew/3.3.rst:1262 +msgid "" +"The new policies are instances of :class:`~email.policy.EmailPolicy`, and " +"add the following additional controls:" +msgstr "" + +#: ../../whatsnew/3.3.rst:1268 +msgid "refold_source" +msgstr "" + +#: ../../whatsnew/3.3.rst:1268 +msgid "" +"Controls whether or not headers parsed by a :mod:`~email.parser` are " +"refolded by the :mod:`~email.generator`. It can be ``none``, ``long``, or " +"``all``. The default is ``long``, which means that source headers with a " +"line longer than ``max_line_length`` get refolded. ``none`` means no line " +"get refolded, and ``all`` means that all lines get refolded." +msgstr "" + +#: ../../whatsnew/3.3.rst:1277 +msgid "header_factory" +msgstr "" + +#: ../../whatsnew/3.3.rst:1277 +msgid "" +"A callable that take a ``name`` and ``value`` and produces a custom header " +"object." +msgstr "" + +#: ../../whatsnew/3.3.rst:1281 +msgid "" +"The ``header_factory`` is the key to the new features provided by the new " +"policies. When one of the new policies is used, any header retrieved from a" +" ``Message`` object is an object produced by the ``header_factory``, and any" +" time you set a header on a ``Message`` it becomes an object produced by " +"``header_factory``. All such header objects have a ``name`` attribute equal" +" to the header name. Address and Date headers have additional attributes " +"that give you access to the parsed data of the header. This means you can " +"now do things like this::" +msgstr "" + +#: ../../whatsnew/3.3.rst:1309 +msgid "" +"You will note that the unicode display name is automatically encoded as " +"``utf-8`` when the message is serialized, but that when the header is " +"accessed directly, you get the unicode version. This eliminates any need to" +" deal with the :mod:`email.header` :meth:`~email.header.decode_header` or " +":meth:`~email.header.make_header` functions." +msgstr "" + +#: ../../whatsnew/3.3.rst:1315 +msgid "You can also create addresses from parts::" +msgstr "" + +#: ../../whatsnew/3.3.rst:1325 +msgid "Decoding to unicode is done automatically::" +msgstr "" + +#: ../../whatsnew/3.3.rst:1331 +msgid "" +"When you parse a message, you can use the ``addresses`` and ``groups`` " +"attributes of the header objects to access the groups and individual " +"addresses::" +msgstr "" + +#: ../../whatsnew/3.3.rst:1340 +msgid "" +"In summary, if you use one of the new policies, header manipulation works " +"the way it ought to: your application works with unicode strings, and the " +"email package transparently encodes and decodes the unicode to and from the " +"RFC standard Content Transfer Encodings." +msgstr "" + +#: ../../whatsnew/3.3.rst:1346 +msgid "Other API Changes" +msgstr "" + +#: ../../whatsnew/3.3.rst:1348 +msgid "" +"New :class:`~email.parser.BytesHeaderParser`, added to the " +":mod:`~email.parser` module to complement " +":class:`~email.parser.HeaderParser` and complete the Bytes API." +msgstr "" + +#: ../../whatsnew/3.3.rst:1352 +msgid "New utility functions:" +msgstr "" + +#: ../../whatsnew/3.3.rst:1354 +msgid "" +":func:`~email.utils.format_datetime`: given a :class:`~datetime.datetime`, " +"produce a string formatted for use in an email header." +msgstr "" + +#: ../../whatsnew/3.3.rst:1357 +msgid "" +":func:`~email.utils.parsedate_to_datetime`: given a date string from an " +"email header, convert it into an aware :class:`~datetime.datetime`, or a " +"naive :class:`~datetime.datetime` if the offset is ``-0000``." +msgstr "" + +#: ../../whatsnew/3.3.rst:1361 +msgid "" +":func:`~email.utils.localtime`: With no argument, returns the current local " +"time as an aware :class:`~datetime.datetime` using the local " +":class:`~datetime.timezone`. Given an aware :class:`~datetime.datetime`, " +"converts it into an aware :class:`~datetime.datetime` using the local " +":class:`~datetime.timezone`." +msgstr "" + +#: ../../whatsnew/3.3.rst:1369 +msgid "ftplib" +msgstr "ftplib" + +#: ../../whatsnew/3.3.rst:1371 +msgid "" +":class:`ftplib.FTP` now accepts a ``source_address`` keyword argument to " +"specify the ``(host, port)`` to use as the source address in the bind call " +"when creating the outgoing socket. (Contributed by Giampaolo Rodolà in " +":issue:`8594`.)" +msgstr "" +"现在 :class:`ftplib.FTP` 接受一个 ``source_address`` 关键字参数用于在创建外发套接字时指定 ``(host, " +"port)`` 作为绑定调用中的源地址。 (由 Giampaolo Rodolà 在 :issue:`8594` 中贡献。)" + +#: ../../whatsnew/3.3.rst:1376 +msgid "" +"The :class:`~ftplib.FTP_TLS` class now provides a new " +":func:`~ftplib.FTP_TLS.ccc` function to revert control channel back to " +"plaintext. This can be useful to take advantage of firewalls that know how " +"to handle NAT with non-secure FTP without opening fixed ports. (Contributed" +" by Giampaolo Rodolà in :issue:`12139`.)" +msgstr "" + +#: ../../whatsnew/3.3.rst:1382 +msgid "" +"Added :meth:`ftplib.FTP.mlsd` method which provides a parsable directory " +"listing format and deprecates :meth:`ftplib.FTP.nlst` and " +":meth:`ftplib.FTP.dir`. (Contributed by Giampaolo Rodolà in " +":issue:`11072`.)" +msgstr "" + +#: ../../whatsnew/3.3.rst:1388 +msgid "functools" +msgstr "functools" + +#: ../../whatsnew/3.3.rst:1390 +msgid "" +"The :func:`functools.lru_cache` decorator now accepts a ``typed`` keyword " +"argument (that defaults to ``False`` to ensure that it caches values of " +"different types that compare equal in separate cache slots. (Contributed by" +" Raymond Hettinger in :issue:`13227`.)" +msgstr "" + +#: ../../whatsnew/3.3.rst:1397 +msgid "gc" +msgstr "gc" + +#: ../../whatsnew/3.3.rst:1399 +msgid "" +"It is now possible to register callbacks invoked by the garbage collector " +"before and after collection using the new :data:`~gc.callbacks` list." +msgstr "" + +#: ../../whatsnew/3.3.rst:1404 +msgid "hmac" +msgstr "hmac" + +#: ../../whatsnew/3.3.rst:1406 +msgid "" +"A new :func:`~hmac.compare_digest` function has been added to prevent side " +"channel attacks on digests through timing analysis. (Contributed by Nick " +"Coghlan and Christian Heimes in :issue:`15061`.)" +msgstr "" + +#: ../../whatsnew/3.3.rst:1412 +msgid "http" +msgstr "http" + +#: ../../whatsnew/3.3.rst:1414 +msgid "" +":class:`http.server.BaseHTTPRequestHandler` now buffers the headers and " +"writes them all at once when " +":meth:`~http.server.BaseHTTPRequestHandler.end_headers` is called. A new " +"method :meth:`~http.server.BaseHTTPRequestHandler.flush_headers` can be used" +" to directly manage when the accumulated headers are sent. (Contributed by " +"Andrew Schaaf in :issue:`3709`.)" +msgstr "" + +#: ../../whatsnew/3.3.rst:1420 +msgid "" +":class:`http.server` now produces valid ``HTML 4.01 strict`` output. " +"(Contributed by Ezio Melotti in :issue:`13295`.)" +msgstr "" + +#: ../../whatsnew/3.3.rst:1423 +msgid "" +":class:`http.client.HTTPResponse` now has a " +":meth:`~http.client.HTTPResponse.readinto` method, which means it can be " +"used as an :class:`io.RawIOBase` class. (Contributed by John Kuhn in " +":issue:`13464`.)" +msgstr "" + +#: ../../whatsnew/3.3.rst:1430 +msgid "html" +msgstr "html" + +#: ../../whatsnew/3.3.rst:1432 +msgid "" +":class:`html.parser.HTMLParser` is now able to parse broken markup without " +"raising errors, therefore the *strict* argument of the constructor and the " +":exc:`~html.parser.HTMLParseError` exception are now deprecated. The ability" +" to parse broken markup is the result of a number of bug fixes that are also" +" available on the latest bug fix releases of Python 2.7/3.2. (Contributed by" +" Ezio Melotti in :issue:`15114`, and :issue:`14538`, :issue:`13993`, " +":issue:`13960`, :issue:`13358`, :issue:`1745761`, :issue:`755670`, " +":issue:`13357`, :issue:`12629`, :issue:`1200313`, :issue:`670664`, " +":issue:`13273`, :issue:`12888`, :issue:`7311`.)" +msgstr "" + +#: ../../whatsnew/3.3.rst:1442 +msgid "" +"A new :data:`~html.entities.html5` dictionary that maps HTML5 named " +"character references to the equivalent Unicode character(s) (e.g. " +"``html5['gt;'] == '>'``) has been added to the :mod:`html.entities` module." +" The dictionary is now also used by :class:`~html.parser.HTMLParser`. " +"(Contributed by Ezio Melotti in :issue:`11113` and :issue:`15156`.)" +msgstr "" + +#: ../../whatsnew/3.3.rst:1450 +msgid "imaplib" +msgstr "imaplib" + +#: ../../whatsnew/3.3.rst:1452 +msgid "" +"The :class:`~imaplib.IMAP4_SSL` constructor now accepts an SSLContext " +"parameter to control parameters of the secure channel." +msgstr "" + +#: ../../whatsnew/3.3.rst:1455 +msgid "(Contributed by Sijin Joseph in :issue:`8808`.)" +msgstr "(由 Sijin Joseph 在 :issue:`8808` 中贡献。)" + +#: ../../whatsnew/3.3.rst:1459 +msgid "inspect" +msgstr "inspect" + +#: ../../whatsnew/3.3.rst:1461 +msgid "" +"A new :func:`~inspect.getclosurevars` function has been added. This function" +" reports the current binding of all names referenced from the function body " +"and where those names were resolved, making it easier to verify correct " +"internal state when testing code that relies on stateful closures." +msgstr "" + +#: ../../whatsnew/3.3.rst:1466 +msgid "(Contributed by Meador Inge and Nick Coghlan in :issue:`13062`.)" +msgstr "(由 Meador Inge 和 Nick Coghlan 在 :issue:`13062` 中贡献。)" + +#: ../../whatsnew/3.3.rst:1468 +msgid "" +"A new :func:`~inspect.getgeneratorlocals` function has been added. This " +"function reports the current binding of local variables in the generator's " +"stack frame, making it easier to verify correct internal state when testing " +"generators." +msgstr "" + +#: ../../whatsnew/3.3.rst:1473 +msgid "(Contributed by Meador Inge in :issue:`15153`.)" +msgstr "(由 Meador Inge 在 :issue:`15153` 中贡献。)" + +#: ../../whatsnew/3.3.rst:1476 +msgid "io" +msgstr "io" + +#: ../../whatsnew/3.3.rst:1478 +msgid "" +"The :func:`~io.open` function has a new ``'x'`` mode that can be used to " +"exclusively create a new file, and raise a :exc:`FileExistsError` if the " +"file already exists. It is based on the C11 'x' mode to fopen()." +msgstr "" + +#: ../../whatsnew/3.3.rst:1482 +msgid "(Contributed by David Townshend in :issue:`12760`.)" +msgstr "(由 David Townshend 在 :issue:`12760` 中贡献。)" + +#: ../../whatsnew/3.3.rst:1484 +msgid "" +"The constructor of the :class:`~io.TextIOWrapper` class has a new " +"*write_through* optional argument. If *write_through* is ``True``, calls to " +":meth:`~io.TextIOWrapper.write` are guaranteed not to be buffered: any data " +"written on the :class:`~io.TextIOWrapper` object is immediately handled to " +"its underlying binary buffer." +msgstr "" + +#: ../../whatsnew/3.3.rst:1492 +msgid "itertools" +msgstr "itertools" + +#: ../../whatsnew/3.3.rst:1494 +msgid "" +":func:`~itertools.accumulate` now takes an optional ``func`` argument for " +"providing a user-supplied binary function." +msgstr "" + +#: ../../whatsnew/3.3.rst:1499 +msgid "logging" +msgstr "logging" + +#: ../../whatsnew/3.3.rst:1501 +msgid "" +"The :func:`~logging.basicConfig` function now supports an optional " +"``handlers`` argument taking an iterable of handlers to be added to the root" +" logger." +msgstr "" + +#: ../../whatsnew/3.3.rst:1504 +msgid "" +"A class level attribute :attr:`~logging.handlers.SysLogHandler.append_nul` " +"has been added to :class:`~logging.handlers.SysLogHandler` to allow control " +"of the appending of the ``NUL`` (``\\000``) byte to syslog records, since " +"for some daemons it is required while for others it is passed through to the" +" log." +msgstr "" + +#: ../../whatsnew/3.3.rst:1512 +msgid "math" +msgstr "math" + +#: ../../whatsnew/3.3.rst:1514 +msgid "" +"The :mod:`math` module has a new function, :func:`~math.log2`, which " +"returns the base-2 logarithm of *x*." +msgstr "" + +#: ../../whatsnew/3.3.rst:1517 +msgid "(Written by Mark Dickinson in :issue:`11888`.)" +msgstr "" + +#: ../../whatsnew/3.3.rst:1521 +msgid "mmap" +msgstr "mmap" + +#: ../../whatsnew/3.3.rst:1523 +msgid "" +"The :meth:`~mmap.mmap.read` method is now more compatible with other file-" +"like objects: if the argument is omitted or specified as ``None``, it " +"returns the bytes from the current file position to the end of the mapping." +" (Contributed by Petri Lehtinen in :issue:`12021`.)" +msgstr "" + +#: ../../whatsnew/3.3.rst:1530 +msgid "multiprocessing" +msgstr "multiprocessing" + +#: ../../whatsnew/3.3.rst:1532 +msgid "" +"The new :func:`multiprocessing.connection.wait` function allows polling " +"multiple objects (such as connections, sockets and pipes) with a timeout. " +"(Contributed by Richard Oudkerk in :issue:`12328`.)" +msgstr "" + +#: ../../whatsnew/3.3.rst:1536 +msgid "" +":class:`multiprocessing.Connection` objects can now be transferred over " +"multiprocessing connections. (Contributed by Richard Oudkerk in " +":issue:`4892`.)" +msgstr "" + +#: ../../whatsnew/3.3.rst:1540 +msgid "" +":class:`multiprocessing.Process` now accepts a ``daemon`` keyword argument " +"to override the default behavior of inheriting the ``daemon`` flag from the " +"parent process (:issue:`6064`)." +msgstr "" + +#: ../../whatsnew/3.3.rst:1544 +msgid "" +"New attribute :data:`multiprocessing.Process.sentinel` allows a program to " +"wait on multiple :class:`~multiprocessing.Process` objects at one time using" +" the appropriate OS primitives (for example, :mod:`select` on posix " +"systems)." +msgstr "" + +#: ../../whatsnew/3.3.rst:1549 +msgid "" +"New methods :meth:`multiprocessing.pool.Pool.starmap` and " +":meth:`~multiprocessing.pool.Pool.starmap_async` provide " +":func:`itertools.starmap` equivalents to the existing " +":meth:`multiprocessing.pool.Pool.map` and " +":meth:`~multiprocessing.pool.Pool.map_async` functions. (Contributed by " +"Hynek Schlawack in :issue:`12708`.)" +msgstr "" + +#: ../../whatsnew/3.3.rst:1558 +msgid "nntplib" +msgstr "nntplib" + +#: ../../whatsnew/3.3.rst:1560 +msgid "" +"The :class:`nntplib.NNTP` class now supports the context management protocol" +" to unconditionally consume :exc:`socket.error` exceptions and to close the " +"NNTP connection when done::" +msgstr "" + +#: ../../whatsnew/3.3.rst:1571 +msgid "(Contributed by Giampaolo Rodolà in :issue:`9795`.)" +msgstr "(由 Giampaolo Rodolà 在 :issue:`9795` 中贡献。)" + +#: ../../whatsnew/3.3.rst:1575 +msgid "os" +msgstr "os" + +#: ../../whatsnew/3.3.rst:1577 +msgid "" +"The :mod:`os` module has a new :func:`~os.pipe2` function that makes it " +"possible to create a pipe with :data:`~os.O_CLOEXEC` or " +":data:`~os.O_NONBLOCK` flags set atomically. This is especially useful to " +"avoid race conditions in multi-threaded programs." +msgstr "" + +#: ../../whatsnew/3.3.rst:1582 +msgid "" +"The :mod:`os` module has a new :func:`~os.sendfile` function which provides " +"an efficient \"zero-copy\" way for copying data from one file (or socket) " +"descriptor to another. The phrase \"zero-copy\" refers to the fact that all " +"of the copying of data between the two descriptors is done entirely by the " +"kernel, with no copying of data into userspace buffers. :func:`~os.sendfile`" +" can be used to efficiently copy data from a file on disk to a network " +"socket, e.g. for downloading a file." +msgstr "" + +#: ../../whatsnew/3.3.rst:1590 +msgid "" +"(Patch submitted by Ross Lagerwall and Giampaolo Rodolà in :issue:`10882`.)" +msgstr "" + +#: ../../whatsnew/3.3.rst:1592 +msgid "" +"To avoid race conditions like symlink attacks and issues with temporary " +"files and directories, it is more reliable (and also faster) to manipulate " +"file descriptors instead of file names. Python 3.3 enhances existing " +"functions and introduces new functions to work on file descriptors " +"(:issue:`4761`, :issue:`10755` and :issue:`14626`)." +msgstr "" + +#: ../../whatsnew/3.3.rst:1598 +msgid "" +"The :mod:`os` module has a new :func:`~os.fwalk` function similar to " +":func:`~os.walk` except that it also yields file descriptors referring to " +"the directories visited. This is especially useful to avoid symlink races." +msgstr "" + +#: ../../whatsnew/3.3.rst:1602 +msgid "" +"The following functions get new optional *dir_fd* (:ref:`paths relative to " +"directory descriptors `) and/or *follow_symlinks* (:ref:`not " +"following symlinks `): :func:`~os.access`, " +":func:`~os.chflags`, :func:`~os.chmod`, :func:`~os.chown`, :func:`~os.link`," +" :func:`~os.lstat`, :func:`~os.mkdir`, :func:`~os.mkfifo`, " +":func:`~os.mknod`, :func:`~os.open`, :func:`~os.readlink`, " +":func:`~os.remove`, :func:`~os.rename`, :func:`~os.replace`, " +":func:`~os.rmdir`, :func:`~os.stat`, :func:`~os.symlink`, " +":func:`~os.unlink`, :func:`~os.utime`. Platform support for using these " +"parameters can be checked via the sets :data:`os.supports_dir_fd` and " +":data:`os.supports_follows_symlinks`." +msgstr "" + +#: ../../whatsnew/3.3.rst:1613 +msgid "" +"The following functions now support a file descriptor for their path " +"argument: :func:`~os.chdir`, :func:`~os.chmod`, :func:`~os.chown`, " +":func:`~os.execve`, :func:`~os.listdir`, :func:`~os.pathconf`, " +":func:`~os.path.exists`, :func:`~os.stat`, :func:`~os.statvfs`, " +":func:`~os.utime`. Platform support for this can be checked via the " +":data:`os.supports_fd` set." +msgstr "" + +#: ../../whatsnew/3.3.rst:1619 +msgid "" +":func:`~os.access` accepts an ``effective_ids`` keyword argument to turn on " +"using the effective uid/gid rather than the real uid/gid in the access " +"check. Platform support for this can be checked via the " +":data:`~os.supports_effective_ids` set." +msgstr "" + +#: ../../whatsnew/3.3.rst:1624 +msgid "" +"The :mod:`os` module has two new functions: :func:`~os.getpriority` and " +":func:`~os.setpriority`. They can be used to get or set process " +"niceness/priority in a fashion similar to :func:`os.nice` but extended to " +"all processes instead of just the current one." +msgstr "" + +#: ../../whatsnew/3.3.rst:1629 +msgid "(Patch submitted by Giampaolo Rodolà in :issue:`10784`.)" +msgstr "" + +#: ../../whatsnew/3.3.rst:1631 +msgid "" +"The new :func:`os.replace` function allows cross-platform renaming of a file" +" with overwriting the destination. With :func:`os.rename`, an existing " +"destination file is overwritten under POSIX, but raises an error under " +"Windows. (Contributed by Antoine Pitrou in :issue:`8828`.)" +msgstr "" + +#: ../../whatsnew/3.3.rst:1637 +msgid "" +"The stat family of functions (:func:`~os.stat`, :func:`~os.fstat`, and " +":func:`~os.lstat`) now support reading a file's timestamps with nanosecond " +"precision. Symmetrically, :func:`~os.utime` can now write file timestamps " +"with nanosecond precision. (Contributed by Larry Hastings in " +":issue:`14127`.)" +msgstr "" + +#: ../../whatsnew/3.3.rst:1643 +msgid "" +"The new :func:`os.get_terminal_size` function queries the size of the " +"terminal attached to a file descriptor. See also " +":func:`shutil.get_terminal_size`. (Contributed by Zbigniew Jędrzejewski-" +"Szmek in :issue:`13609`.)" +msgstr "" + +#: ../../whatsnew/3.3.rst:1650 +msgid "" +"New functions to support Linux extended attributes (:issue:`12720`): " +":func:`~os.getxattr`, :func:`~os.listxattr`, :func:`~os.removexattr`, " +":func:`~os.setxattr`." +msgstr "" + +#: ../../whatsnew/3.3.rst:1654 +msgid "" +"New interface to the scheduler. These functions control how a process is " +"allocated CPU time by the operating system. New functions: " +":func:`~os.sched_get_priority_max`, :func:`~os.sched_get_priority_min`, " +":func:`~os.sched_getaffinity`, :func:`~os.sched_getparam`, " +":func:`~os.sched_getscheduler`, :func:`~os.sched_rr_get_interval`, " +":func:`~os.sched_setaffinity`, :func:`~os.sched_setparam`, " +":func:`~os.sched_setscheduler`, :func:`~os.sched_yield`," +msgstr "" + +#: ../../whatsnew/3.3.rst:1663 +msgid "New functions to control the file system:" +msgstr "" + +#: ../../whatsnew/3.3.rst:1665 +msgid "" +":func:`~os.posix_fadvise`: Announces an intention to access data in a " +"specific pattern thus allowing the kernel to make optimizations." +msgstr "" + +#: ../../whatsnew/3.3.rst:1667 +msgid "" +":func:`~os.posix_fallocate`: Ensures that enough disk space is allocated for" +" a file." +msgstr "" + +#: ../../whatsnew/3.3.rst:1669 +msgid ":func:`~os.sync`: Force write of everything to disk." +msgstr "" + +#: ../../whatsnew/3.3.rst:1671 +msgid "Additional new posix functions:" +msgstr "" + +#: ../../whatsnew/3.3.rst:1673 +msgid "" +":func:`~os.lockf`: Apply, test or remove a POSIX lock on an open file " +"descriptor." +msgstr "" + +#: ../../whatsnew/3.3.rst:1674 +msgid "" +":func:`~os.pread`: Read from a file descriptor at an offset, the file offset" +" remains unchanged." +msgstr "" + +#: ../../whatsnew/3.3.rst:1676 +msgid "" +":func:`~os.pwrite`: Write to a file descriptor from an offset, leaving the " +"file offset unchanged." +msgstr "" + +#: ../../whatsnew/3.3.rst:1678 +msgid "" +":func:`~os.readv`: Read from a file descriptor into a number of writable " +"buffers." +msgstr "" + +#: ../../whatsnew/3.3.rst:1679 +msgid "" +":func:`~os.truncate`: Truncate the file corresponding to *path*, so that it " +"is at most *length* bytes in size." +msgstr "" + +#: ../../whatsnew/3.3.rst:1681 +msgid "" +":func:`~os.waitid`: Wait for the completion of one or more child processes." +msgstr "" + +#: ../../whatsnew/3.3.rst:1682 +msgid "" +":func:`~os.writev`: Write the contents of *buffers* to a file descriptor, " +"where *buffers* is an arbitrary sequence of buffers." +msgstr "" + +#: ../../whatsnew/3.3.rst:1684 +msgid "" +":func:`~os.getgrouplist` (:issue:`9344`): Return list of group ids that " +"specified user belongs to." +msgstr "" + +#: ../../whatsnew/3.3.rst:1687 +msgid "" +":func:`~os.times` and :func:`~os.uname`: Return type changed from a tuple to" +" a tuple-like object with named attributes." +msgstr "" + +#: ../../whatsnew/3.3.rst:1690 +msgid "" +"Some platforms now support additional constants for the :func:`~os.lseek` " +"function, such as ``os.SEEK_HOLE`` and ``os.SEEK_DATA``." +msgstr "" + +#: ../../whatsnew/3.3.rst:1693 +msgid "" +"New constants :data:`~os.RTLD_LAZY`, :data:`~os.RTLD_NOW`, " +":data:`~os.RTLD_GLOBAL`, :data:`~os.RTLD_LOCAL`, :data:`~os.RTLD_NODELETE`, " +":data:`~os.RTLD_NOLOAD`, and :data:`~os.RTLD_DEEPBIND` are available on " +"platforms that support them. These are for use with the " +":func:`sys.setdlopenflags` function, and supersede the similar constants " +"defined in :mod:`ctypes` and :mod:`DLFCN`. (Contributed by Victor Stinner " +"in :issue:`13226`.)" +msgstr "" + +#: ../../whatsnew/3.3.rst:1701 +msgid "" +":func:`os.symlink` now accepts (and ignores) the ``target_is_directory`` " +"keyword argument on non-Windows platforms, to ease cross-platform support." +msgstr "" + +#: ../../whatsnew/3.3.rst:1706 +msgid "pdb" +msgstr "pdb" + +#: ../../whatsnew/3.3.rst:1708 +msgid "" +"Tab-completion is now available not only for command names, but also their " +"arguments. For example, for the ``break`` command, function and file names " +"are completed." +msgstr "" + +#: ../../whatsnew/3.3.rst:1712 +msgid "(Contributed by Georg Brandl in :issue:`14210`)" +msgstr "(由 Georg Brandl 在 :issue:`14210` 中贡献)" + +#: ../../whatsnew/3.3.rst:1716 +msgid "pickle" +msgstr "pickle" + +#: ../../whatsnew/3.3.rst:1718 +msgid "" +":class:`pickle.Pickler` objects now have an optional " +":attr:`~pickle.Pickler.dispatch_table` attribute allowing per-pickler " +"reduction functions to be set." +msgstr "" + +#: ../../whatsnew/3.3.rst:1722 +msgid "(Contributed by Richard Oudkerk in :issue:`14166`.)" +msgstr "(由 Richard Oudkerk 在 :issue:`14166` 中贡献。)" + +#: ../../whatsnew/3.3.rst:1726 +msgid "pydoc" +msgstr "pydoc" + +#: ../../whatsnew/3.3.rst:1728 +msgid "" +"The Tk GUI and the :func:`~pydoc.serve` function have been removed from the " +":mod:`pydoc` module: ``pydoc -g`` and :func:`~pydoc.serve` have been " +"deprecated in Python 3.2." +msgstr "" + +#: ../../whatsnew/3.3.rst:1734 +msgid "re" +msgstr "re" + +#: ../../whatsnew/3.3.rst:1736 +msgid ":class:`str` regular expressions now support ``\\u`` and ``\\U`` escapes." +msgstr "" + +#: ../../whatsnew/3.3.rst:1738 +msgid "(Contributed by Serhiy Storchaka in :issue:`3665`.)" +msgstr "(由 Serhiy Storchaka 在 :issue:`3665` 中贡献。)" + +#: ../../whatsnew/3.3.rst:1742 +msgid "sched" +msgstr "" + +#: ../../whatsnew/3.3.rst:1744 +msgid "" +":meth:`~sched.scheduler.run` now accepts a *blocking* parameter which when " +"set to false makes the method execute the scheduled events due to expire " +"soonest (if any) and then return immediately. This is useful in case you " +"want to use the :class:`~sched.scheduler` in non-blocking applications. " +"(Contributed by Giampaolo Rodolà in :issue:`13449`.)" +msgstr "" + +#: ../../whatsnew/3.3.rst:1750 +msgid "" +":class:`~sched.scheduler` class can now be safely used in multi-threaded " +"environments. (Contributed by Josiah Carlson and Giampaolo Rodolà in " +":issue:`8684`.)" +msgstr "" + +#: ../../whatsnew/3.3.rst:1754 +msgid "" +"*timefunc* and *delayfunct* parameters of :class:`~sched.scheduler` class " +"constructor are now optional and defaults to :func:`time.time` and " +":func:`time.sleep` respectively. (Contributed by Chris Clark in " +":issue:`13245`.)" +msgstr "" + +#: ../../whatsnew/3.3.rst:1759 +msgid "" +":meth:`~sched.scheduler.enter` and :meth:`~sched.scheduler.enterabs` " +"*argument* parameter is now optional. (Contributed by Chris Clark in " +":issue:`13245`.)" +msgstr "" + +#: ../../whatsnew/3.3.rst:1763 +msgid "" +":meth:`~sched.scheduler.enter` and :meth:`~sched.scheduler.enterabs` now " +"accept a *kwargs* parameter. (Contributed by Chris Clark in " +":issue:`13245`.)" +msgstr "" + +#: ../../whatsnew/3.3.rst:1769 +msgid "select" +msgstr "select" + +#: ../../whatsnew/3.3.rst:1771 +msgid "" +"Solaris and derivative platforms have a new class :class:`select.devpoll` " +"for high performance asynchronous sockets via :file:`/dev/poll`. " +"(Contributed by Jesús Cea Avión in :issue:`6397`.)" +msgstr "" + +#: ../../whatsnew/3.3.rst:1777 +msgid "shlex" +msgstr "shlex" + +#: ../../whatsnew/3.3.rst:1779 +msgid "" +"The previously undocumented helper function ``quote`` from the :mod:`pipes` " +"modules has been moved to the :mod:`shlex` module and documented. " +":func:`~shlex.quote` properly escapes all characters in a string that might " +"be otherwise given special meaning by the shell." +msgstr "" + +#: ../../whatsnew/3.3.rst:1786 +msgid "shutil" +msgstr "shutil" + +#: ../../whatsnew/3.3.rst:1788 +msgid "New functions:" +msgstr "新的函数:" + +#: ../../whatsnew/3.3.rst:1790 +msgid "" +":func:`~shutil.disk_usage`: provides total, used and free disk space " +"statistics. (Contributed by Giampaolo Rodolà in :issue:`12442`.)" +msgstr "" + +#: ../../whatsnew/3.3.rst:1792 +msgid "" +":func:`~shutil.chown`: allows one to change user and/or group of the given " +"path also specifying the user/group names and not only their numeric ids. " +"(Contributed by Sandro Tosi in :issue:`12191`.)" +msgstr "" + +#: ../../whatsnew/3.3.rst:1795 +msgid "" +":func:`shutil.get_terminal_size`: returns the size of the terminal window to" +" which the interpreter is attached. (Contributed by Zbigniew Jędrzejewski-" +"Szmek in :issue:`13609`.)" +msgstr "" + +#: ../../whatsnew/3.3.rst:1799 +msgid "" +":func:`~shutil.copy2` and :func:`~shutil.copystat` now preserve file " +"timestamps with nanosecond precision on platforms that support it. They also" +" preserve file \"extended attributes\" on Linux. (Contributed by Larry " +"Hastings in :issue:`14127` and :issue:`15238`.)" +msgstr "" + +#: ../../whatsnew/3.3.rst:1804 +msgid "" +"Several functions now take an optional ``symlinks`` argument: when that " +"parameter is true, symlinks aren't dereferenced and the operation instead " +"acts on the symlink itself (or creates one, if relevant). (Contributed by " +"Hynek Schlawack in :issue:`12715`.)" +msgstr "" + +#: ../../whatsnew/3.3.rst:1809 +msgid "" +"When copying files to a different file system, :func:`~shutil.move` now " +"handles symlinks the way the posix ``mv`` command does, recreating the " +"symlink rather than copying the target file contents. (Contributed by " +"Jonathan Niehof in :issue:`9993`.) :func:`~shutil.move` now also returns " +"the ``dst`` argument as its result." +msgstr "" + +#: ../../whatsnew/3.3.rst:1815 +msgid "" +":func:`~shutil.rmtree` is now resistant to symlink attacks on platforms " +"which support the new ``dir_fd`` parameter in :func:`os.open` and " +":func:`os.unlink`. (Contributed by Martin von Löwis and Hynek Schlawack in " +":issue:`4489`.)" +msgstr "" + +#: ../../whatsnew/3.3.rst:1822 +msgid "signal" +msgstr "signal" + +#: ../../whatsnew/3.3.rst:1824 +msgid "The :mod:`signal` module has new functions:" +msgstr ":mod:`signal` 模块新增的函数:" + +#: ../../whatsnew/3.3.rst:1826 +msgid "" +":func:`~signal.pthread_sigmask`: fetch and/or change the signal mask of the " +"calling thread (Contributed by Jean-Paul Calderone in :issue:`8407`);" +msgstr "" +":func:`~signal.pthread_sigmask`: 获取和/或改变调用方线程的信号掩码(由 Jean-Paul Calderone 在 " +":issue:`8407` 中贡献);" + +#: ../../whatsnew/3.3.rst:1828 +msgid ":func:`~signal.pthread_kill`: send a signal to a thread;" +msgstr ":func:`~signal.pthread_kill`: 向指定线程发送信号;" + +#: ../../whatsnew/3.3.rst:1829 +msgid ":func:`~signal.sigpending`: examine pending functions;" +msgstr ":func:`~signal.sigpending`: 检查挂起的函数;" + +#: ../../whatsnew/3.3.rst:1830 +msgid ":func:`~signal.sigwait`: wait a signal;" +msgstr ":func:`~signal.sigwait`: 等待一个信号;" + +#: ../../whatsnew/3.3.rst:1831 +msgid "" +":func:`~signal.sigwaitinfo`: wait for a signal, returning detailed " +"information about it;" +msgstr ":func:`~signal.sigwaitinfo`: 等待信号,返回相关的详细信息;" + +#: ../../whatsnew/3.3.rst:1833 +msgid "" +":func:`~signal.sigtimedwait`: like :func:`~signal.sigwaitinfo` but with a " +"timeout." +msgstr "" + +#: ../../whatsnew/3.3.rst:1836 +msgid "" +"The signal handler writes the signal number as a single byte instead of a " +"nul byte into the wakeup file descriptor. So it is possible to wait more " +"than one signal and know which signals were raised." +msgstr "" + +#: ../../whatsnew/3.3.rst:1840 +msgid "" +":func:`signal.signal` and :func:`signal.siginterrupt` raise an OSError, " +"instead of a RuntimeError: OSError has an errno attribute." +msgstr "" + +#: ../../whatsnew/3.3.rst:1845 +msgid "smtpd" +msgstr "smtpd" + +#: ../../whatsnew/3.3.rst:1847 +msgid "" +"The :mod:`smtpd` module now supports :rfc:`5321` (extended SMTP) and " +":rfc:`1870` (size extension). Per the standard, these extensions are " +"enabled if and only if the client initiates the session with an ``EHLO`` " +"command." +msgstr "" + +#: ../../whatsnew/3.3.rst:1851 +msgid "" +"(Initial ``ELHO`` support by Alberto Trevino. Size extension by Juhana " +"Jauhiainen. Substantial additional work on the patch contributed by Michele" +" Orrù and Dan Boswell. :issue:`8739`)" +msgstr "" + +#: ../../whatsnew/3.3.rst:1857 +msgid "smtplib" +msgstr "smtplib" + +#: ../../whatsnew/3.3.rst:1859 +msgid "" +"The :class:`~smtplib.SMTP`, :class:`~smtplib.SMTP_SSL`, and " +":class:`~smtplib.LMTP` classes now accept a ``source_address`` keyword " +"argument to specify the ``(host, port)`` to use as the source address in the" +" bind call when creating the outgoing socket. (Contributed by Paulo " +"Scardine in :issue:`11281`.)" +msgstr "" + +#: ../../whatsnew/3.3.rst:1865 +msgid "" +":class:`~smtplib.SMTP` now supports the context management protocol, " +"allowing an ``SMTP`` instance to be used in a ``with`` statement. " +"(Contributed by Giampaolo Rodolà in :issue:`11289`.)" +msgstr "" + +#: ../../whatsnew/3.3.rst:1869 +msgid "" +"The :class:`~smtplib.SMTP_SSL` constructor and the " +":meth:`~smtplib.SMTP.starttls` method now accept an SSLContext parameter to " +"control parameters of the secure channel. (Contributed by Kasun Herath in " +":issue:`8809`.)" +msgstr "" + +#: ../../whatsnew/3.3.rst:1875 +msgid "socket" +msgstr "socket" + +#: ../../whatsnew/3.3.rst:1877 +msgid "" +"The :class:`~socket.socket` class now exposes additional methods to process " +"ancillary data when supported by the underlying platform:" +msgstr "" + +#: ../../whatsnew/3.3.rst:1880 +msgid ":func:`~socket.socket.sendmsg`" +msgstr ":func:`~socket.socket.sendmsg`" + +#: ../../whatsnew/3.3.rst:1881 +msgid ":func:`~socket.socket.recvmsg`" +msgstr ":func:`~socket.socket.recvmsg`" + +#: ../../whatsnew/3.3.rst:1882 +msgid ":func:`~socket.socket.recvmsg_into`" +msgstr ":func:`~socket.socket.recvmsg_into`" + +#: ../../whatsnew/3.3.rst:1884 +msgid "" +"(Contributed by David Watson in :issue:`6560`, based on an earlier patch by " +"Heiko Wundram)" +msgstr "" + +#: ../../whatsnew/3.3.rst:1887 +msgid "" +"The :class:`~socket.socket` class now supports the PF_CAN protocol family " +"(https://en.wikipedia.org/wiki/Socketcan), on Linux " +"(https://lwn.net/Articles/253425)." +msgstr "" + +#: ../../whatsnew/3.3.rst:1891 +msgid "" +"(Contributed by Matthias Fuchs, updated by Tiago Gonçalves in " +":issue:`10141`.)" +msgstr "" + +#: ../../whatsnew/3.3.rst:1893 +msgid "" +"The :class:`~socket.socket` class now supports the PF_RDS protocol family " +"(https://en.wikipedia.org/wiki/Reliable_Datagram_Sockets and " +"https://oss.oracle.com/projects/rds/)." +msgstr "" + +#: ../../whatsnew/3.3.rst:1897 +msgid "" +"The :class:`~socket.socket` class now supports the ``PF_SYSTEM`` protocol " +"family on OS X. (Contributed by Michael Goderbauer in :issue:`13777`.)" +msgstr "" + +#: ../../whatsnew/3.3.rst:1900 +msgid "" +"New function :func:`~socket.sethostname` allows the hostname to be set on " +"unix systems if the calling process has sufficient privileges. (Contributed " +"by Ross Lagerwall in :issue:`10866`.)" +msgstr "" + +#: ../../whatsnew/3.3.rst:1906 +msgid "socketserver" +msgstr "socketserver" + +#: ../../whatsnew/3.3.rst:1908 +msgid "" +":class:`~socketserver.BaseServer` now has an overridable method " +":meth:`~socketserver.BaseServer.service_actions` that is called by the " +":meth:`~socketserver.BaseServer.serve_forever` method in the service loop. " +":class:`~socketserver.ForkingMixIn` now uses this to clean up zombie child " +"processes. (Contributed by Justin Warkentin in :issue:`11109`.)" +msgstr "" + +#: ../../whatsnew/3.3.rst:1916 +msgid "sqlite3" +msgstr "sqlite3" + +#: ../../whatsnew/3.3.rst:1918 +msgid "" +"New :class:`sqlite3.Connection` method " +":meth:`~sqlite3.Connection.set_trace_callback` can be used to capture a " +"trace of all sql commands processed by sqlite. (Contributed by Torsten " +"Landschoff in :issue:`11688`.)" +msgstr "" + +#: ../../whatsnew/3.3.rst:1925 +msgid "ssl" +msgstr "ssl" + +#: ../../whatsnew/3.3.rst:1927 +msgid "The :mod:`ssl` module has two new random generation functions:" +msgstr "" + +#: ../../whatsnew/3.3.rst:1929 +msgid "" +":func:`~ssl.RAND_bytes`: generate cryptographically strong pseudo-random " +"bytes." +msgstr "" + +#: ../../whatsnew/3.3.rst:1931 +msgid ":func:`~ssl.RAND_pseudo_bytes`: generate pseudo-random bytes." +msgstr ":func:`~ssl.RAND_pseudo_bytes`: 生成伪随机字节。" + +#: ../../whatsnew/3.3.rst:1933 +msgid "(Contributed by Victor Stinner in :issue:`12049`.)" +msgstr "(由 Victor Stinner 在 :issue:`12049` 中贡献。)" + +#: ../../whatsnew/3.3.rst:1935 +msgid "" +"The :mod:`ssl` module now exposes a finer-grained exception hierarchy in " +"order to make it easier to inspect the various kinds of errors. (Contributed" +" by Antoine Pitrou in :issue:`11183`.)" +msgstr "" + +#: ../../whatsnew/3.3.rst:1939 +msgid "" +":meth:`~ssl.SSLContext.load_cert_chain` now accepts a *password* argument to" +" be used if the private key is encrypted. (Contributed by Adam Simpkins in " +":issue:`12803`.)" +msgstr "" + +#: ../../whatsnew/3.3.rst:1943 +msgid "" +"Diffie-Hellman key exchange, both regular and Elliptic Curve-based, is now " +"supported through the :meth:`~ssl.SSLContext.load_dh_params` and " +":meth:`~ssl.SSLContext.set_ecdh_curve` methods. (Contributed by Antoine " +"Pitrou in :issue:`13626` and :issue:`13627`.)" +msgstr "" + +#: ../../whatsnew/3.3.rst:1948 +msgid "" +"SSL sockets have a new :meth:`~ssl.SSLSocket.get_channel_binding` method " +"allowing the implementation of certain authentication mechanisms such as " +"SCRAM-SHA-1-PLUS. (Contributed by Jacek Konieczny in :issue:`12551`.)" +msgstr "" + +#: ../../whatsnew/3.3.rst:1952 +msgid "" +"You can query the SSL compression algorithm used by an SSL socket, thanks to" +" its new :meth:`~ssl.SSLSocket.compression` method. The new attribute " +":attr:`~ssl.OP_NO_COMPRESSION` can be used to disable compression. " +"(Contributed by Antoine Pitrou in :issue:`13634`.)" +msgstr "" + +#: ../../whatsnew/3.3.rst:1957 +msgid "" +"Support has been added for the Next Protocol Negotiation extension using the" +" :meth:`ssl.SSLContext.set_npn_protocols` method. (Contributed by Colin Marc" +" in :issue:`14204`.)" +msgstr "" + +#: ../../whatsnew/3.3.rst:1961 +msgid "" +"SSL errors can now be introspected more easily thanks to " +":attr:`~ssl.SSLError.library` and :attr:`~ssl.SSLError.reason` attributes. " +"(Contributed by Antoine Pitrou in :issue:`14837`.)" +msgstr "" + +#: ../../whatsnew/3.3.rst:1965 +msgid "" +"The :func:`~ssl.get_server_certificate` function now supports IPv6. " +"(Contributed by Charles-François Natali in :issue:`11811`.)" +msgstr "" + +#: ../../whatsnew/3.3.rst:1968 +msgid "" +"New attribute :attr:`~ssl.OP_CIPHER_SERVER_PREFERENCE` allows setting SSLv3 " +"server sockets to use the server's cipher ordering preference rather than " +"the client's (:issue:`13635`)." +msgstr "" + +#: ../../whatsnew/3.3.rst:1974 +msgid "stat" +msgstr "stat" + +#: ../../whatsnew/3.3.rst:1976 +msgid "" +"The undocumented tarfile.filemode function has been moved to " +":func:`stat.filemode`. It can be used to convert a file's mode to a string " +"of the form '-rwxrwxrwx'." +msgstr "" + +#: ../../whatsnew/3.3.rst:1980 +msgid "(Contributed by Giampaolo Rodolà in :issue:`14807`.)" +msgstr "(由 Giampaolo Rodolà 在 :issue:`14807` 中贡献。)" + +#: ../../whatsnew/3.3.rst:1984 +msgid "struct" +msgstr "struct" + +#: ../../whatsnew/3.3.rst:1986 +msgid "" +"The :mod:`struct` module now supports ``ssize_t`` and ``size_t`` via the new" +" codes ``n`` and ``N``, respectively. (Contributed by Antoine Pitrou in " +":issue:`3163`.)" +msgstr "" + +#: ../../whatsnew/3.3.rst:1992 +msgid "subprocess" +msgstr "subprocess" + +#: ../../whatsnew/3.3.rst:1994 +msgid "" +"Command strings can now be bytes objects on posix platforms. (Contributed " +"by Victor Stinner in :issue:`8513`.)" +msgstr "" + +#: ../../whatsnew/3.3.rst:1997 +msgid "" +"A new constant :data:`~subprocess.DEVNULL` allows suppressing output in a " +"platform-independent fashion. (Contributed by Ross Lagerwall in " +":issue:`5870`.)" +msgstr "" + +#: ../../whatsnew/3.3.rst:2003 +msgid "sys" +msgstr "sys" + +#: ../../whatsnew/3.3.rst:2005 +msgid "" +"The :mod:`sys` module has a new :data:`~sys.thread_info` :term:`named tuple`" +" holding information about the thread implementation (:issue:`11223`)." +msgstr "" + +#: ../../whatsnew/3.3.rst:2011 +msgid "tarfile" +msgstr "tarfile" + +#: ../../whatsnew/3.3.rst:2013 +msgid "" +":mod:`tarfile` now supports ``lzma`` encoding via the :mod:`lzma` module. " +"(Contributed by Lars Gustäbel in :issue:`5689`.)" +msgstr "" + +#: ../../whatsnew/3.3.rst:2018 +msgid "tempfile" +msgstr "tempfile" + +#: ../../whatsnew/3.3.rst:2020 +msgid "" +":class:`tempfile.SpooledTemporaryFile`\\'s " +":meth:`~tempfile.SpooledTemporaryFile.truncate` method now accepts a " +"``size`` parameter. (Contributed by Ryan Kelly in :issue:`9957`.)" +msgstr "" + +#: ../../whatsnew/3.3.rst:2026 +msgid "textwrap" +msgstr "textwrap" + +#: ../../whatsnew/3.3.rst:2028 +msgid "" +"The :mod:`textwrap` module has a new :func:`~textwrap.indent` that makes it " +"straightforward to add a common prefix to selected lines in a block of text" +" (:issue:`13857`)." +msgstr "" + +#: ../../whatsnew/3.3.rst:2034 +msgid "threading" +msgstr "threading" + +#: ../../whatsnew/3.3.rst:2036 +msgid "" +":class:`threading.Condition`, :class:`threading.Semaphore`, " +":class:`threading.BoundedSemaphore`, :class:`threading.Event`, and " +":class:`threading.Timer`, all of which used to be factory functions " +"returning a class instance, are now classes and may be subclassed. " +"(Contributed by Éric Araujo in :issue:`10968`.)" +msgstr "" + +#: ../../whatsnew/3.3.rst:2042 +msgid "" +"The :class:`threading.Thread` constructor now accepts a ``daemon`` keyword " +"argument to override the default behavior of inheriting the ``daemon`` flag " +"value from the parent thread (:issue:`6064`)." +msgstr "" + +#: ../../whatsnew/3.3.rst:2046 +msgid "" +"The formerly private function ``_thread.get_ident`` is now available as the " +"public function :func:`threading.get_ident`. This eliminates several cases " +"of direct access to the ``_thread`` module in the stdlib. Third party code " +"that used ``_thread.get_ident`` should likewise be changed to use the new " +"public interface." +msgstr "" + +#: ../../whatsnew/3.3.rst:2054 +msgid "time" +msgstr "time" + +#: ../../whatsnew/3.3.rst:2056 +msgid "The :pep:`418` added new functions to the :mod:`time` module:" +msgstr "" + +#: ../../whatsnew/3.3.rst:2058 +msgid ":func:`~time.get_clock_info`: Get information on a clock." +msgstr "" + +#: ../../whatsnew/3.3.rst:2059 +msgid "" +":func:`~time.monotonic`: Monotonic clock (cannot go backward), not affected " +"by system clock updates." +msgstr "" + +#: ../../whatsnew/3.3.rst:2061 +msgid "" +":func:`~time.perf_counter`: Performance counter with the highest available " +"resolution to measure a short duration." +msgstr "" + +#: ../../whatsnew/3.3.rst:2063 +msgid "" +":func:`~time.process_time`: Sum of the system and user CPU time of the " +"current process." +msgstr "" + +#: ../../whatsnew/3.3.rst:2066 +msgid "Other new functions:" +msgstr "" + +#: ../../whatsnew/3.3.rst:2068 +msgid "" +":func:`~time.clock_getres`, :func:`~time.clock_gettime` and " +":func:`~time.clock_settime` functions with ``CLOCK_xxx`` constants. " +"(Contributed by Victor Stinner in :issue:`10278`.)" +msgstr "" + +#: ../../whatsnew/3.3.rst:2072 +msgid "" +"To improve cross platform consistency, :func:`~time.sleep` now raises a " +":exc:`ValueError` when passed a negative sleep value. Previously this was " +"an error on posix, but produced an infinite sleep on Windows." +msgstr "" + +#: ../../whatsnew/3.3.rst:2078 +msgid "types" +msgstr "types" + +#: ../../whatsnew/3.3.rst:2080 +msgid "" +"Add a new :class:`types.MappingProxyType` class: Read-only proxy of a " +"mapping. (:issue:`14386`)" +msgstr "" + +#: ../../whatsnew/3.3.rst:2084 +msgid "" +"The new functions :func:`types.new_class` and :func:`types.prepare_class` " +"provide support for :pep:`3115` compliant dynamic type creation. " +"(:issue:`14588`)" +msgstr "" + +#: ../../whatsnew/3.3.rst:2089 +msgid "unittest" +msgstr "unittest" + +#: ../../whatsnew/3.3.rst:2091 +msgid "" +":meth:`.assertRaises`, :meth:`.assertRaisesRegex`, :meth:`.assertWarns`, and" +" :meth:`.assertWarnsRegex` now accept a keyword argument *msg* when used as " +"context managers. (Contributed by Ezio Melotti and Winston Ewert in " +":issue:`10775`.)" +msgstr "" + +#: ../../whatsnew/3.3.rst:2096 +msgid "" +":meth:`unittest.TestCase.run` now returns the :class:`~unittest.TestResult` " +"object." +msgstr "" + +#: ../../whatsnew/3.3.rst:2101 +msgid "urllib" +msgstr "urllib" + +#: ../../whatsnew/3.3.rst:2103 +msgid "" +"The :class:`~urllib.request.Request` class, now accepts a *method* argument " +"used by :meth:`~urllib.request.Request.get_method` to determine what HTTP " +"method should be used. For example, this will send a ``'HEAD'`` request::" +msgstr "" + +#: ../../whatsnew/3.3.rst:2109 +msgid "(:issue:`1673007`)" +msgstr "" + +#: ../../whatsnew/3.3.rst:2113 +msgid "webbrowser" +msgstr "webbrowser" + +#: ../../whatsnew/3.3.rst:2115 +msgid "" +"The :mod:`webbrowser` module supports more \"browsers\": Google Chrome " +"(named :program:`chrome`, :program:`chromium`, :program:`chrome-browser` or " +":program:`chromium-browser` depending on the version and operating system), " +"and the generic launchers :program:`xdg-open`, from the FreeDesktop.org " +"project, and :program:`gvfs-open`, which is the default URI handler for " +"GNOME 3. (The former contributed by Arnaud Calmettes in :issue:`13620`, the" +" latter by Matthias Klose in :issue:`14493`.)" +msgstr "" + +#: ../../whatsnew/3.3.rst:2125 +msgid "xml.etree.ElementTree" +msgstr "xml.etree.ElementTree" + +#: ../../whatsnew/3.3.rst:2127 +msgid "" +"The :mod:`xml.etree.ElementTree` module now imports its C accelerator by " +"default; there is no longer a need to explicitly import " +":mod:`xml.etree.cElementTree` (this module stays for backwards " +"compatibility, but is now deprecated). In addition, the ``iter`` family of" +" methods of :class:`~xml.etree.ElementTree.Element` has been optimized " +"(rewritten in C). The module's documentation has also been greatly improved " +"with added examples and a more detailed reference." +msgstr "" + +#: ../../whatsnew/3.3.rst:2137 +msgid "zlib" +msgstr "zlib" + +#: ../../whatsnew/3.3.rst:2139 +msgid "" +"New attribute :attr:`zlib.Decompress.eof` makes it possible to distinguish " +"between a properly-formed compressed stream and an incomplete or truncated " +"one. (Contributed by Nadeem Vawda in :issue:`12646`.)" +msgstr "" + +#: ../../whatsnew/3.3.rst:2143 +msgid "" +"New attribute :attr:`zlib.ZLIB_RUNTIME_VERSION` reports the version string " +"of the underlying ``zlib`` library that is loaded at runtime. (Contributed " +"by Torsten Landschoff in :issue:`12306`.)" +msgstr "" + +#: ../../whatsnew/3.3.rst:2149 +msgid "Optimizations" +msgstr "性能优化" + +#: ../../whatsnew/3.3.rst:2151 +msgid "Major performance enhancements have been added:" +msgstr "已增加的主要性能改善:" + +#: ../../whatsnew/3.3.rst:2153 +msgid "" +"Thanks to :pep:`393`, some operations on Unicode strings have been " +"optimized:" +msgstr "得益于:pep:`393` ,Unicode 字符串的某些操作已得到优化:" + +#: ../../whatsnew/3.3.rst:2155 +msgid "the memory footprint is divided by 2 to 4 depending on the text" +msgstr "" + +#: ../../whatsnew/3.3.rst:2156 +msgid "" +"encode an ASCII string to UTF-8 doesn't need to encode characters anymore, " +"the UTF-8 representation is shared with the ASCII representation" +msgstr "将 ASCII 字符串编码为 UTF-8 不再需要对字符进行编码,UTF-8 的表示法与 ASCII 的表示法是共享的" + +#: ../../whatsnew/3.3.rst:2158 +msgid "the UTF-8 encoder has been optimized" +msgstr "" + +#: ../../whatsnew/3.3.rst:2159 +msgid "" +"repeating a single ASCII letter and getting a substring of an ASCII string " +"is 4 times faster" +msgstr "" + +#: ../../whatsnew/3.3.rst:2162 +msgid "" +"UTF-8 is now 2x to 4x faster. UTF-16 encoding is now up to 10x faster." +msgstr "UTF-8 编码现在快 2 到 4 倍。 UTF-16 编码的速度现在提高了 10 倍。" + +#: ../../whatsnew/3.3.rst:2164 +msgid "" +"(Contributed by Serhiy Storchaka, :issue:`14624`, :issue:`14738` and " +":issue:`15026`.)" +msgstr "" +"(由 Serhiy Storchaka 在 :issue:`14624`, :issue:`14738` 和 :issue:`15026` 中贡献)。" + +#: ../../whatsnew/3.3.rst:2169 +msgid "Build and C API Changes" +msgstr "构建和 C API 的改变" + +#: ../../whatsnew/3.3.rst:2171 +msgid "Changes to Python's build process and to the C API include:" +msgstr "针对 Python 构建过程和 C API 的改变包括:" + +#: ../../whatsnew/3.3.rst:2173 +msgid "New :pep:`3118` related function:" +msgstr "新的 :pep:`3118` 相关功能:" + +#: ../../whatsnew/3.3.rst:2175 +msgid ":c:func:`PyMemoryView_FromMemory`" +msgstr ":c:func:`PyMemoryView_FromMemory`" + +#: ../../whatsnew/3.3.rst:2177 +msgid ":pep:`393` added new Unicode types, macros and functions:" +msgstr ":pep:`393` 添加了新的 Unicode 类型,宏和函数" + +#: ../../whatsnew/3.3.rst:2179 +msgid "High-level API:" +msgstr "高阶 API" + +#: ../../whatsnew/3.3.rst:2181 +msgid ":c:func:`PyUnicode_CopyCharacters`" +msgstr ":c:func:`PyUnicode_CopyCharacters`" + +#: ../../whatsnew/3.3.rst:2182 +msgid ":c:func:`PyUnicode_FindChar`" +msgstr ":c:func:`PyUnicode_FindChar`" + +#: ../../whatsnew/3.3.rst:2183 +msgid ":c:func:`PyUnicode_GetLength`, :c:macro:`PyUnicode_GET_LENGTH`" +msgstr ":c:func:`PyUnicode_GetLength`, :c:macro:`PyUnicode_GET_LENGTH`" + +#: ../../whatsnew/3.3.rst:2184 +msgid ":c:func:`PyUnicode_New`" +msgstr ":c:func:`PyUnicode_New`" + +#: ../../whatsnew/3.3.rst:2185 +msgid ":c:func:`PyUnicode_Substring`" +msgstr ":c:func:`PyUnicode_Substring`" + +#: ../../whatsnew/3.3.rst:2186 +msgid ":c:func:`PyUnicode_ReadChar`, :c:func:`PyUnicode_WriteChar`" +msgstr ":c:func:`PyUnicode_ReadChar`, :c:func:`PyUnicode_WriteChar`" + +#: ../../whatsnew/3.3.rst:2188 +msgid "Low-level API:" +msgstr "低阶 API:" + +#: ../../whatsnew/3.3.rst:2190 +msgid ":c:type:`Py_UCS1`, :c:type:`Py_UCS2`, :c:type:`Py_UCS4` types" +msgstr ":c:type:`Py_UCS1`, :c:type:`Py_UCS2`, :c:type:`Py_UCS4` 类型" + +#: ../../whatsnew/3.3.rst:2191 +msgid "" +":c:type:`PyASCIIObject` and :c:type:`PyCompactUnicodeObject` structures" +msgstr ":c:type:`PyASCIIObject` 和 :c:type:`PyCompactUnicodeObject` 结构" + +#: ../../whatsnew/3.3.rst:2192 +msgid ":c:macro:`PyUnicode_READY`" +msgstr ":c:macro:`PyUnicode_READY`" + +#: ../../whatsnew/3.3.rst:2193 +msgid ":c:func:`PyUnicode_FromKindAndData`" +msgstr ":c:func:`PyUnicode_FromKindAndData`" + +#: ../../whatsnew/3.3.rst:2194 +msgid ":c:func:`PyUnicode_AsUCS4`, :c:func:`PyUnicode_AsUCS4Copy`" +msgstr ":c:func:`PyUnicode_AsUCS4`, :c:func:`PyUnicode_AsUCS4Copy`" + +#: ../../whatsnew/3.3.rst:2195 +msgid "" +":c:macro:`PyUnicode_DATA`, :c:macro:`PyUnicode_1BYTE_DATA`, " +":c:macro:`PyUnicode_2BYTE_DATA`, :c:macro:`PyUnicode_4BYTE_DATA`" +msgstr "" +":c:macro:`PyUnicode_DATA`, :c:macro:`PyUnicode_1BYTE_DATA`, " +":c:macro:`PyUnicode_2BYTE_DATA`, :c:macro:`PyUnicode_4BYTE_DATA`" + +#: ../../whatsnew/3.3.rst:2197 +msgid "" +":c:macro:`PyUnicode_KIND` with :c:type:`PyUnicode_Kind` enum: " +":c:data:`PyUnicode_WCHAR_KIND`, :c:data:`PyUnicode_1BYTE_KIND`, " +":c:data:`PyUnicode_2BYTE_KIND`, :c:data:`PyUnicode_4BYTE_KIND`" +msgstr "" +":c:macro:`PyUnicode_KIND` 使用 :c:type:`PyUnicode_Kind` 枚举: " +":c:data:`PyUnicode_WCHAR_KIND`, :c:data:`PyUnicode_1BYTE_KIND`, " +":c:data:`PyUnicode_2BYTE_KIND`, :c:data:`PyUnicode_4BYTE_KIND`" + +#: ../../whatsnew/3.3.rst:2200 +msgid "" +":c:macro:`PyUnicode_READ`, :c:macro:`PyUnicode_READ_CHAR`, " +":c:macro:`PyUnicode_WRITE`" +msgstr "" +":c:macro:`PyUnicode_READ`, :c:macro:`PyUnicode_READ_CHAR`, " +":c:macro:`PyUnicode_WRITE`" + +#: ../../whatsnew/3.3.rst:2201 +msgid ":c:macro:`PyUnicode_MAX_CHAR_VALUE`" +msgstr ":c:macro:`PyUnicode_MAX_CHAR_VALUE`" + +#: ../../whatsnew/3.3.rst:2203 +msgid "" +":c:macro:`PyArg_ParseTuple` now accepts a :class:`bytearray` for the ``c`` " +"format (:issue:`12380`)." +msgstr "" +":c:macro:`PyArg_ParseTuple` 现在接受 ``c`` 格式的 :class:`bytearray` " +"(:issue:`12380`)。" + +#: ../../whatsnew/3.3.rst:2209 +msgid "Deprecated" +msgstr "弃用" + +#: ../../whatsnew/3.3.rst:2212 +msgid "Unsupported Operating Systems" +msgstr "不支持的操作系统" + +#: ../../whatsnew/3.3.rst:2214 +msgid "OS/2 and VMS are no longer supported due to the lack of a maintainer." +msgstr "由于缺少维护人员,不再支持 OS/2 和 VMS 系统 。" + +#: ../../whatsnew/3.3.rst:2216 +msgid "" +"Windows 2000 and Windows platforms which set ``COMSPEC`` to ``command.com`` " +"are no longer supported due to maintenance burden." +msgstr "" +"由于维护负担,将 ``COMSPEC`` 设置为 ``command.com`` 的 Windows平台(含Windows 2000)不再受支持。" + +#: ../../whatsnew/3.3.rst:2219 +msgid "OSF support, which was deprecated in 3.2, has been completely removed." +msgstr "OSF支持在3.2中被弃用,现在已经被完全删除。" + +#: ../../whatsnew/3.3.rst:2223 +msgid "Deprecated Python modules, functions and methods" +msgstr "已弃用的 Python 模块、函数和方法" + +#: ../../whatsnew/3.3.rst:2225 +msgid "" +"Passing a non-empty string to ``object.__format__()`` is deprecated, and " +"will produce a :exc:`TypeError` in Python 3.4 (:issue:`9856`)." +msgstr "" +"向 ``object.__format__()`` 传递非空字符串的做法已被弃用,在 Python 3.4 中会产生一个 " +":exc:`TypeError` (:issue:`9856`)。" + +#: ../../whatsnew/3.3.rst:2227 +msgid "" +"The ``unicode_internal`` codec has been deprecated because of the " +":pep:`393`, use UTF-8, UTF-16 (``utf-16-le`` or ``utf-16-be``), or UTF-32 " +"(``utf-32-le`` or ``utf-32-be``)" +msgstr "" +"由于:pep:`393`,``unicode_internal`` 编解码器已被弃用 。请使用 UTF-8、UTF-16 (``utf-16-le`` " +"或``utf-16-be``) 或 UTF-32 (``utf-32-le`` 或``utf-32-be``)" + +#: ../../whatsnew/3.3.rst:2230 +msgid "" +":meth:`ftplib.FTP.nlst` and :meth:`ftplib.FTP.dir`: use " +":meth:`ftplib.FTP.mlsd`" +msgstr "" + +#: ../../whatsnew/3.3.rst:2232 +msgid "" +":func:`platform.popen`: use the :mod:`subprocess` module. Check especially " +"the :ref:`subprocess-replacements` section (:issue:`11377`)." +msgstr "" + +#: ../../whatsnew/3.3.rst:2234 +msgid "" +":issue:`13374`: The Windows bytes API has been deprecated in the :mod:`os` " +"module. Use Unicode filenames, instead of bytes filenames, to not depend on " +"the ANSI code page anymore and to support any filename." +msgstr "" + +#: ../../whatsnew/3.3.rst:2237 +msgid "" +":issue:`13988`: The :mod:`xml.etree.cElementTree` module is deprecated. The" +" accelerator is used automatically whenever available." +msgstr "" + +#: ../../whatsnew/3.3.rst:2239 +msgid "" +"The behaviour of :func:`time.clock` depends on the platform: use the new " +":func:`time.perf_counter` or :func:`time.process_time` function instead, " +"depending on your requirements, to have a well defined behaviour." +msgstr "" + +#: ../../whatsnew/3.3.rst:2242 +msgid "The :func:`os.stat_float_times` function is deprecated." +msgstr "" + +#: ../../whatsnew/3.3.rst:2243 +msgid ":mod:`abc` module:" +msgstr "" + +#: ../../whatsnew/3.3.rst:2252 +msgid ":mod:`importlib` package:" +msgstr "" + +#: ../../whatsnew/3.3.rst:2254 +msgid "" +":meth:`importlib.abc.SourceLoader.path_mtime` is now deprecated in favour of" +" :meth:`importlib.abc.SourceLoader.path_stats` as bytecode files now store " +"both the modification time and size of the source file the bytecode file was" +" compiled from." +msgstr "" + +#: ../../whatsnew/3.3.rst:2264 +msgid "Deprecated functions and types of the C API" +msgstr "已弃用的 C API 函数和类型" + +#: ../../whatsnew/3.3.rst:2266 +msgid "" +"The :c:type:`Py_UNICODE` has been deprecated by :pep:`393` and will be " +"removed in Python 4. All functions using this type are deprecated:" +msgstr "" +":c:type:`Py_UNICODE` 已经在 :pep:`393` 弃用,并将于 Python 4 中移除。所有使用此类型的函数都已弃用:" + +#: ../../whatsnew/3.3.rst:2269 +msgid "" +"Unicode functions and methods using :c:type:`Py_UNICODE` and " +":c:type:`Py_UNICODE*` types:" +msgstr "" + +#: ../../whatsnew/3.3.rst:2272 +msgid "" +":c:macro:`PyUnicode_FromUnicode`: use :c:func:`PyUnicode_FromWideChar` or " +":c:func:`PyUnicode_FromKindAndData`" +msgstr "" +":c:macro:`PyUnicode_FromUnicode`: 使用 :c:func:`PyUnicode_FromWideChar` 或 " +":c:func:`PyUnicode_FromKindAndData`" + +#: ../../whatsnew/3.3.rst:2274 +msgid "" +":c:macro:`PyUnicode_AS_UNICODE`, :c:func:`PyUnicode_AsUnicode`, " +":c:func:`PyUnicode_AsUnicodeAndSize`: use " +":c:func:`PyUnicode_AsWideCharString`" +msgstr "" +":c:macro:`PyUnicode_AS_UNICODE`, :c:func:`PyUnicode_AsUnicode`, " +":c:func:`PyUnicode_AsUnicodeAndSize`: 使用 " +":c:func:`PyUnicode_AsWideCharString`" + +#: ../../whatsnew/3.3.rst:2276 +msgid "" +":c:macro:`PyUnicode_AS_DATA`: use :c:macro:`PyUnicode_DATA` with " +":c:macro:`PyUnicode_READ` and :c:macro:`PyUnicode_WRITE`" +msgstr "" +":c:macro:`PyUnicode_AS_DATA`: 使用 :c:macro:`PyUnicode_DATA` 以及 " +":c:macro:`PyUnicode_READ` 和 :c:macro:`PyUnicode_WRITE`" + +#: ../../whatsnew/3.3.rst:2278 +msgid "" +":c:macro:`PyUnicode_GET_SIZE`, :c:func:`PyUnicode_GetSize`: use " +":c:macro:`PyUnicode_GET_LENGTH` or :c:func:`PyUnicode_GetLength`" +msgstr "" +":c:macro:`PyUnicode_GET_SIZE`, :c:func:`PyUnicode_GetSize`: 使用 " +":c:macro:`PyUnicode_GET_LENGTH` 或 :c:func:`PyUnicode_GetLength`" + +#: ../../whatsnew/3.3.rst:2280 +msgid "" +":c:macro:`PyUnicode_GET_DATA_SIZE`: use ``PyUnicode_GET_LENGTH(str) * " +"PyUnicode_KIND(str)`` (only work on ready strings)" +msgstr "" +":c:macro:`PyUnicode_GET_DATA_SIZE`: 使用 ``PyUnicode_GET_LENGTH(str) * " +"PyUnicode_KIND(str)`` (仅适用于现成的字符串)" + +#: ../../whatsnew/3.3.rst:2283 +msgid "" +":c:func:`PyUnicode_AsUnicodeCopy`: use :c:func:`PyUnicode_AsUCS4Copy` or " +":c:func:`PyUnicode_AsWideCharString`" +msgstr "" +":c:func:`PyUnicode_AsUnicodeCopy`: 使用 :c:func:`PyUnicode_AsUCS4Copy` 或 " +":c:func:`PyUnicode_AsWideCharString`" + +#: ../../whatsnew/3.3.rst:2285 +msgid ":c:func:`PyUnicode_GetMax`" +msgstr ":c:func:`PyUnicode_GetMax`" + +#: ../../whatsnew/3.3.rst:2288 +msgid "Functions and macros manipulating Py_UNICODE* strings:" +msgstr "" + +#: ../../whatsnew/3.3.rst:2290 +msgid "" +":c:macro:`Py_UNICODE_strlen`: use :c:func:`PyUnicode_GetLength` or " +":c:macro:`PyUnicode_GET_LENGTH`" +msgstr "" +":c:macro:`Py_UNICODE_strlen`: 使用 :c:func:`PyUnicode_GetLength` 或 " +":c:macro:`PyUnicode_GET_LENGTH`" + +#: ../../whatsnew/3.3.rst:2292 +msgid "" +":c:macro:`Py_UNICODE_strcat`: use :c:func:`PyUnicode_CopyCharacters` or " +":c:func:`PyUnicode_FromFormat`" +msgstr "" +":c:macro:`Py_UNICODE_strcat`: 使用 :c:func:`PyUnicode_CopyCharacters` 或 " +":c:func:`PyUnicode_FromFormat`" + +#: ../../whatsnew/3.3.rst:2294 +msgid "" +":c:macro:`Py_UNICODE_strcpy`, :c:macro:`Py_UNICODE_strncpy`, " +":c:macro:`Py_UNICODE_COPY`: use :c:func:`PyUnicode_CopyCharacters` or " +":c:func:`PyUnicode_Substring`" +msgstr "" +":c:macro:`Py_UNICODE_strcpy`, :c:macro:`Py_UNICODE_strncpy`, " +":c:macro:`Py_UNICODE_COPY`: 使用 :c:func:`PyUnicode_CopyCharacters` 或 " +":c:func:`PyUnicode_Substring`" + +#: ../../whatsnew/3.3.rst:2297 +msgid ":c:macro:`Py_UNICODE_strcmp`: use :c:func:`PyUnicode_Compare`" +msgstr ":c:macro:`Py_UNICODE_strcmp`: 使用 :c:func:`PyUnicode_Compare`" + +#: ../../whatsnew/3.3.rst:2298 +msgid ":c:macro:`Py_UNICODE_strncmp`: use :c:func:`PyUnicode_Tailmatch`" +msgstr ":c:macro:`Py_UNICODE_strncmp`: 使用 :c:func:`PyUnicode_Tailmatch`" + +#: ../../whatsnew/3.3.rst:2299 +msgid "" +":c:macro:`Py_UNICODE_strchr`, :c:macro:`Py_UNICODE_strrchr`: use " +":c:func:`PyUnicode_FindChar`" +msgstr "" +":c:macro:`Py_UNICODE_strchr`, :c:macro:`Py_UNICODE_strrchr`: 使用 " +":c:func:`PyUnicode_FindChar`" + +#: ../../whatsnew/3.3.rst:2301 +msgid ":c:macro:`Py_UNICODE_FILL`: use :c:func:`PyUnicode_Fill`" +msgstr ":c:macro:`Py_UNICODE_FILL`: 使用 :c:func:`PyUnicode_Fill`" + +#: ../../whatsnew/3.3.rst:2302 +msgid ":c:macro:`Py_UNICODE_MATCH`" +msgstr ":c:macro:`Py_UNICODE_MATCH`" + +#: ../../whatsnew/3.3.rst:2304 +msgid "Encoders:" +msgstr "编码器:" + +#: ../../whatsnew/3.3.rst:2306 +msgid ":c:func:`PyUnicode_Encode`: use :c:func:`PyUnicode_AsEncodedObject`" +msgstr ":c:func:`PyUnicode_Encode`: 使用 :c:func:`PyUnicode_AsEncodedObject`" + +#: ../../whatsnew/3.3.rst:2307 +msgid ":c:func:`PyUnicode_EncodeUTF7`" +msgstr ":c:func:`PyUnicode_EncodeUTF7`" + +#: ../../whatsnew/3.3.rst:2308 +msgid "" +":c:func:`PyUnicode_EncodeUTF8`: use :c:func:`PyUnicode_AsUTF8` or " +":c:func:`PyUnicode_AsUTF8String`" +msgstr "" +":c:func:`PyUnicode_EncodeUTF8`: 使用 :c:func:`PyUnicode_AsUTF8` 或 " +":c:func:`PyUnicode_AsUTF8String`" + +#: ../../whatsnew/3.3.rst:2310 +msgid ":c:func:`PyUnicode_EncodeUTF32`" +msgstr ":c:func:`PyUnicode_EncodeUTF32`" + +#: ../../whatsnew/3.3.rst:2311 +msgid ":c:func:`PyUnicode_EncodeUTF16`" +msgstr ":c:func:`PyUnicode_EncodeUTF16`" + +#: ../../whatsnew/3.3.rst:2312 +msgid "" +":c:func:`PyUnicode_EncodeUnicodeEscape` use " +":c:func:`PyUnicode_AsUnicodeEscapeString`" +msgstr "" + +#: ../../whatsnew/3.3.rst:2314 +msgid "" +":c:func:`PyUnicode_EncodeRawUnicodeEscape` use " +":c:func:`PyUnicode_AsRawUnicodeEscapeString`" +msgstr "" + +#: ../../whatsnew/3.3.rst:2316 +msgid "" +":c:func:`PyUnicode_EncodeLatin1`: use :c:func:`PyUnicode_AsLatin1String`" +msgstr "" +":c:func:`PyUnicode_EncodeLatin1`: 使用 :c:func:`PyUnicode_AsLatin1String`" + +#: ../../whatsnew/3.3.rst:2317 +msgid ":c:func:`PyUnicode_EncodeASCII`: use :c:func:`PyUnicode_AsASCIIString`" +msgstr ":c:func:`PyUnicode_EncodeASCII`: 使用 :c:func:`PyUnicode_AsASCIIString`" + +#: ../../whatsnew/3.3.rst:2318 +msgid ":c:func:`PyUnicode_EncodeCharmap`" +msgstr ":c:func:`PyUnicode_EncodeCharmap`" + +#: ../../whatsnew/3.3.rst:2319 +msgid ":c:func:`PyUnicode_TranslateCharmap`" +msgstr ":c:func:`PyUnicode_TranslateCharmap`" + +#: ../../whatsnew/3.3.rst:2320 +msgid "" +":c:func:`PyUnicode_EncodeMBCS`: use :c:func:`PyUnicode_AsMBCSString` or " +":c:func:`PyUnicode_EncodeCodePage` (with ``CP_ACP`` code_page)" +msgstr "" +":c:func:`PyUnicode_EncodeMBCS`: 使用 :c:func:`PyUnicode_AsMBCSString` 或 " +":c:func:`PyUnicode_EncodeCodePage` (和 ``CP_ACP`` code_page)" + +#: ../../whatsnew/3.3.rst:2322 +msgid "" +":c:func:`PyUnicode_EncodeDecimal`, " +":c:func:`PyUnicode_TransformDecimalToASCII`" +msgstr "" +":c:func:`PyUnicode_EncodeDecimal`, " +":c:func:`PyUnicode_TransformDecimalToASCII`" + +#: ../../whatsnew/3.3.rst:2327 +msgid "Deprecated features" +msgstr "弃用的功能" + +#: ../../whatsnew/3.3.rst:2329 +msgid "" +"The :mod:`array` module's ``'u'`` format code is now deprecated and will be " +"removed in Python 4 together with the rest of the (:c:type:`Py_UNICODE`) " +"API." +msgstr "" +":mod:`array` 模块的``'u'`` 格式代码现已弃用,将在 Python 4 中与 (:c:type:`Py_UNICODE`) API " +"的其他部分一起删除。" + +#: ../../whatsnew/3.3.rst:2334 +msgid "Porting to Python 3.3" +msgstr "移植到 Python 3.3" + +#: ../../whatsnew/3.3.rst:2336 +msgid "" +"This section lists previously described changes and other bugfixes that may " +"require changes to your code." +msgstr "本节列出了先前描述的更改以及可能需要更改代码的其他错误修正." + +#: ../../whatsnew/3.3.rst:2342 +msgid "Porting Python code" +msgstr "移植 Python 代码" + +#: ../../whatsnew/3.3.rst:2344 +msgid "" +"Hash randomization is enabled by default. Set the :envvar:`PYTHONHASHSEED` " +"environment variable to ``0`` to disable hash randomization. See also the " +":meth:`object.__hash__` method." +msgstr "" +"默认启用哈希随机化。 将 :envvar:`PYTHONHASHSEED` 环境变量设为 ``0`` 可禁用哈希随机化。 另请参阅 " +":meth:`object.__hash__` 方法。" + +#: ../../whatsnew/3.3.rst:2348 +msgid "" +":issue:`12326`: On Linux, sys.platform doesn't contain the major version " +"anymore. It is now always 'linux', instead of 'linux2' or 'linux3' depending" +" on the Linux version used to build Python. Replace sys.platform == 'linux2'" +" with sys.platform.startswith('linux'), or directly sys.platform == 'linux' " +"if you don't need to support older Python versions." +msgstr "" +":issue:`12326`: 在 Linux 上,sys.platform 不再包含主要版本。现在它始终是 \"linux\",而不是 " +"\"linux2\" 或 \"linux3\",这取决于用于构建 Python 的 Linux 版本。请用 " +"sys.platform.startswith('linux') 替换 sys.platform == 'linux2',如果不需要支持较旧的 " +"Python 版本,则可直接替换成 sys.platform == 'linux'。" + +#: ../../whatsnew/3.3.rst:2354 +msgid "" +":issue:`13847`, :issue:`14180`: :mod:`time` and :mod:`datetime`: " +":exc:`OverflowError` is now raised instead of :exc:`ValueError` if a " +"timestamp is out of range. :exc:`OSError` is now raised if C functions " +":c:func:`gmtime` or :c:func:`localtime` failed." +msgstr "" +":issue:`13847`, :issue:`14180`: :mod:`time` 和 :mod:`datetime`: " +"现在如果时间戳超出范围将会引发 :exc:`OverflowError` 而不是 :exc:`ValueError`。 现在如果 C 函数 " +":c:func:`gmtime` 或 :c:func:`localtime` 失败 将会引发 :exc:`OSError`。" + +#: ../../whatsnew/3.3.rst:2359 +msgid "" +"The default finders used by import now utilize a cache of what is contained " +"within a specific directory. If you create a Python source file or " +"sourceless bytecode file, make sure to call " +":func:`importlib.invalidate_caches` to clear out the cache for the finders " +"to notice the new file." +msgstr "" + +#: ../../whatsnew/3.3.rst:2364 +msgid "" +":exc:`ImportError` now uses the full name of the module that was attempted " +"to be imported. Doctests that check ImportErrors' message will need to be " +"updated to use the full name of the module instead of just the tail of the " +"name." +msgstr "" + +#: ../../whatsnew/3.3.rst:2369 +msgid "" +"The *index* argument to :func:`__import__` now defaults to 0 instead of -1 " +"and no longer support negative values. It was an oversight when :pep:`328` " +"was implemented that the default value remained -1. If you need to continue " +"to perform a relative import followed by an absolute import, then perform " +"the relative import using an index of 1, followed by another import using an" +" index of 0. It is preferred, though, that you use " +":func:`importlib.import_module` rather than call :func:`__import__` " +"directly." +msgstr "" + +#: ../../whatsnew/3.3.rst:2377 +msgid "" +":func:`__import__` no longer allows one to use an index value other than 0 " +"for top-level modules. E.g. ``__import__('sys', level=1)`` is now an error." +msgstr "" + +#: ../../whatsnew/3.3.rst:2380 +msgid "" +"Because :attr:`sys.meta_path` and :attr:`sys.path_hooks` now have finders on" +" them by default, you will most likely want to use :meth:`list.insert` " +"instead of :meth:`list.append` to add to those lists." +msgstr "" + +#: ../../whatsnew/3.3.rst:2384 +msgid "" +"Because ``None`` is now inserted into :attr:`sys.path_importer_cache`, if " +"you are clearing out entries in the dictionary of paths that do not have a " +"finder, you will need to remove keys paired with values of ``None`` **and** " +":class:`imp.NullImporter` to be backwards-compatible. This will lead to " +"extra overhead on older versions of Python that re-insert ``None`` into " +":attr:`sys.path_importer_cache` where it represents the use of implicit " +"finders, but semantically it should not change anything." +msgstr "" + +#: ../../whatsnew/3.3.rst:2392 +msgid "" +":class:`importlib.abc.Finder` no longer specifies a `find_module()` abstract" +" method that must be implemented. If you were relying on subclasses to " +"implement that method, make sure to check for the method's existence first. " +"You will probably want to check for `find_loader()` first, though, in the " +"case of working with :term:`path entry finders `." +msgstr "" + +#: ../../whatsnew/3.3.rst:2398 +msgid "" +":mod:`pkgutil` has been converted to use :mod:`importlib` internally. This " +"eliminates many edge cases where the old behaviour of the :pep:`302` import " +"emulation failed to match the behaviour of the real import system. The " +"import emulation itself is still present, but is now deprecated. The " +":func:`pkgutil.iter_importers` and :func:`pkgutil.walk_packages` functions " +"special case the standard import hooks so they are still supported even " +"though they do not provide the non-standard ``iter_modules()`` method." +msgstr "" + +#: ../../whatsnew/3.3.rst:2406 +msgid "" +"A longstanding RFC-compliance bug (:issue:`1079`) in the parsing done by " +":func:`email.header.decode_header` has been fixed. Code that uses the " +"standard idiom to convert encoded headers into unicode " +"(``str(make_header(decode_header(h))``) will see no change, but code that " +"looks at the individual tuples returned by decode_header will see that " +"whitespace that precedes or follows ``ASCII`` sections is now included in " +"the ``ASCII`` section. Code that builds headers using ``make_header`` " +"should also continue to work without change, since ``make_header`` continues" +" to add whitespace between ``ASCII`` and non-``ASCII`` sections if it is not" +" already present in the input strings." +msgstr "" + +#: ../../whatsnew/3.3.rst:2417 +msgid "" +":func:`email.utils.formataddr` now does the correct content transfer " +"encoding when passed non-``ASCII`` display names. Any code that depended on" +" the previous buggy behavior that preserved the non-``ASCII`` unicode in the" +" formatted output string will need to be changed (:issue:`1690608`)." +msgstr "" + +#: ../../whatsnew/3.3.rst:2422 +msgid "" +":meth:`poplib.POP3.quit` may now raise protocol errors like all other " +"``poplib`` methods. Code that assumes ``quit`` does not raise " +":exc:`poplib.error_proto` errors may need to be changed if errors on " +"``quit`` are encountered by a particular application (:issue:`11291`)." +msgstr "" + +#: ../../whatsnew/3.3.rst:2427 +msgid "" +"The ``strict`` argument to :class:`email.parser.Parser`, deprecated since " +"Python 2.4, has finally been removed." +msgstr "" + +#: ../../whatsnew/3.3.rst:2430 +msgid "" +"The deprecated method ``unittest.TestCase.assertSameElements`` has been " +"removed." +msgstr "" + +#: ../../whatsnew/3.3.rst:2433 +msgid "The deprecated variable ``time.accept2dyear`` has been removed." +msgstr "" + +#: ../../whatsnew/3.3.rst:2435 +msgid "" +"The deprecated ``Context._clamp`` attribute has been removed from the " +":mod:`decimal` module. It was previously replaced by the public attribute " +":attr:`~decimal.Context.clamp`. (See :issue:`8540`.)" +msgstr "" +"被弃用的 ``Context._clamp`` 属性已从 :mod:`decimal` 模块中移除。 在此之前它已被公有属性 " +":attr:`~decimal.Context.clamp` 取代。 (参见 :issue:`8540`。)" + +#: ../../whatsnew/3.3.rst:2439 +msgid "" +"The undocumented internal helper class ``SSLFakeFile`` has been removed from" +" :mod:`smtplib`, since its functionality has long been provided directly by " +":meth:`socket.socket.makefile`." +msgstr "" + +#: ../../whatsnew/3.3.rst:2443 +msgid "" +"Passing a negative value to :func:`time.sleep` on Windows now raises an " +"error instead of sleeping forever. It has always raised an error on posix." +msgstr "" + +#: ../../whatsnew/3.3.rst:2446 +msgid "" +"The ``ast.__version__`` constant has been removed. If you need to make " +"decisions affected by the AST version, use :attr:`sys.version_info` to make " +"the decision." +msgstr "" + +#: ../../whatsnew/3.3.rst:2450 +msgid "" +"Code that used to work around the fact that the :mod:`threading` module used" +" factory functions by subclassing the private classes will need to change to" +" subclass the now-public classes." +msgstr "" + +#: ../../whatsnew/3.3.rst:2454 +msgid "" +"The undocumented debugging machinery in the threading module has been " +"removed, simplifying the code. This should have no effect on production " +"code, but is mentioned here in case any application debug frameworks were " +"interacting with it (:issue:`13550`)." +msgstr "" + +#: ../../whatsnew/3.3.rst:2461 +msgid "Porting C code" +msgstr "移植 C 代码" + +#: ../../whatsnew/3.3.rst:2463 +msgid "" +"In the course of changes to the buffer API the undocumented " +":c:member:`~Py_buffer.smalltable` member of the :c:type:`Py_buffer` " +"structure has been removed and the layout of the " +":c:type:`PyMemoryViewObject` has changed." +msgstr "" + +#: ../../whatsnew/3.3.rst:2468 +msgid "" +"All extensions relying on the relevant parts in ``memoryobject.h`` or " +"``object.h`` must be rebuilt." +msgstr "" + +#: ../../whatsnew/3.3.rst:2471 +msgid "" +"Due to :ref:`PEP 393 `, the :c:type:`Py_UNICODE` type and all " +"functions using this type are deprecated (but will stay available for at " +"least five years). If you were using low-level Unicode APIs to construct " +"and access unicode objects and you want to benefit of the memory footprint " +"reduction provided by :pep:`393`, you have to convert your code to the new " +":doc:`Unicode API <../c-api/unicode>`." +msgstr "" + +#: ../../whatsnew/3.3.rst:2478 +msgid "" +"However, if you only have been using high-level functions such as " +":c:func:`PyUnicode_Concat()`, :c:func:`PyUnicode_Join` or " +":c:func:`PyUnicode_FromFormat()`, your code will automatically take " +"advantage of the new unicode representations." +msgstr "" + +#: ../../whatsnew/3.3.rst:2483 +msgid ":c:func:`PyImport_GetMagicNumber` now returns ``-1`` upon failure." +msgstr "" + +#: ../../whatsnew/3.3.rst:2485 +msgid "" +"As a negative value for the *level* argument to :func:`__import__` is no " +"longer valid, the same now holds for :c:func:`PyImport_ImportModuleLevel`. " +"This also means that the value of *level* used by " +":c:func:`PyImport_ImportModuleEx` is now ``0`` instead of ``-1``." +msgstr "" + +#: ../../whatsnew/3.3.rst:2492 +msgid "Building C extensions" +msgstr "" + +#: ../../whatsnew/3.3.rst:2494 +msgid "" +"The range of possible file names for C extensions has been narrowed. Very " +"rarely used spellings have been suppressed: under POSIX, files named " +"``xxxmodule.so``, ``xxxmodule.abi3.so`` and ``xxxmodule.cpython-*.so`` are " +"no longer recognized as implementing the ``xxx`` module. If you had been " +"generating such files, you have to switch to the other spellings (i.e., " +"remove the ``module`` string from the file names)." +msgstr "" + +#: ../../whatsnew/3.3.rst:2502 +msgid "(implemented in :issue:`14040`.)" +msgstr "(在 :issue:`14040` 中实现。)" + +#: ../../whatsnew/3.3.rst:2506 +msgid "Command Line Switch Changes" +msgstr "命令行开关的变化" + +#: ../../whatsnew/3.3.rst:2508 +msgid "" +"The -Q command-line flag and related artifacts have been removed. Code " +"checking sys.flags.division_warning will need updating." +msgstr "删除了 -Q命令-line旗标 和相关工具。 检查 sys.flags.division_warning 的代码需要更新。" + +#: ../../whatsnew/3.3.rst:2511 +msgid "(:issue:`10998`, contributed by Éric Araujo.)" +msgstr "(:issue:`10998`,由 Éric Araujo 贡献。)" + +#: ../../whatsnew/3.3.rst:2513 +msgid "" +"When :program:`python` is started with :option:`-S`, ``import site`` will no" +" longer add site-specific paths to the module search paths. In previous " +"versions, it did." +msgstr "" +"当 :program:`python` 附带 :option:`-S` 启动时,``import site`` 将不再向模块搜索路径添加 site " +"专属路径。 在之前版本中则会这样做。" + +#: ../../whatsnew/3.3.rst:2517 +msgid "" +"(:issue:`11591`, contributed by Carl Meyer with editions by Éric Araujo.)" +msgstr "(由 Carl Meyer 在 :issue:`11591` 中贡献并由 Éric Araujo 进行修改。)" diff --git a/whatsnew/3.4.po b/whatsnew/3.4.po new file mode 100644 index 000000000..f20b7e5ae --- /dev/null +++ b/whatsnew/3.4.po @@ -0,0 +1,4367 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) 2001-2025, Python Software Foundation +# This file is distributed under the same license as the Python package. +# FIRST AUTHOR , YEAR. +# +# Translators: +# Fei Yin , 2018 +# Kaizhao Zhang , 2018 +# jacky , 2019 +# ppcfish , 2020 +# zeroswan , 2022 +# Rafael Fontenelle , 2025 +# Freesand Leo , 2025 +# +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: Python 3.9\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2025-04-18 16:42+0000\n" +"PO-Revision-Date: 2017-02-16 23:44+0000\n" +"Last-Translator: Freesand Leo , 2025\n" +"Language-Team: Chinese (China) (https://app.transifex.com/python-doc/teams/5390/zh_CN/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: zh_CN\n" +"Plural-Forms: nplurals=1; plural=0;\n" + +#: ../../whatsnew/3.4.rst:3 +msgid "What's New In Python 3.4" +msgstr "Python 3.4 有什么新变化" + +#: ../../whatsnew/3.4.rst:0 +msgid "Author" +msgstr "作者" + +#: ../../whatsnew/3.4.rst:5 +msgid "R. David Murray (Editor)" +msgstr "R. David Murray (Editor)" + +#: ../../whatsnew/3.4.rst:63 +msgid "" +"This article explains the new features in Python 3.4, compared to 3.3. " +"Python 3.4 was released on March 16, 2014. For full details, see the " +"`changelog `_." +msgstr "" +"这篇文章介绍了 Python 3.4 相比 3.3 增加的新特性。 Python 3.4 发布于 2014 年 3 月 16 日。 " +"对于完整的细节,请参见 `更新日志 `_。" + +#: ../../whatsnew/3.4.rst:70 +msgid ":pep:`429` -- Python 3.4 Release Schedule" +msgstr ":pep:`429` -- Python 3.4 发布计划" + +#: ../../whatsnew/3.4.rst:75 +msgid "Summary -- Release Highlights" +msgstr "摘要 - 发布重点" + +#: ../../whatsnew/3.4.rst:80 +msgid "New syntax features:" +msgstr "新的语法特性:" + +#: ../../whatsnew/3.4.rst:82 +msgid "No new syntax features were added in Python 3.4." +msgstr "Python 3.4 中没有增加新的语法特性。" + +#: ../../whatsnew/3.4.rst:84 +msgid "Other new features:" +msgstr "其他的新特性" + +#: ../../whatsnew/3.4.rst:86 +msgid ":ref:`pip should always be available ` (:pep:`453`)." +msgstr ":ref:`pip 能够随时可用 ` (:pep:`453`)." + +#: ../../whatsnew/3.4.rst:87 +msgid "" +":ref:`Newly created file descriptors are non-inheritable `" +" (:pep:`446`)." +msgstr ":ref:`新创建的文件描述符是不可继承的 ` (:pep:`446`)。" + +#: ../../whatsnew/3.4.rst:89 +msgid "" +"command line option for :ref:`isolated mode ` " +"(:issue:`16499`)." +msgstr "对应 :ref:`隔离模式 ` 的命令行选项 (:issue:`16499`)。" + +#: ../../whatsnew/3.4.rst:91 +msgid "" +":ref:`improvements in the handling of codecs ` " +"that are not text encodings (multiple issues)." +msgstr "针对非文本编码格式的 :ref:`编解码器处理方式的改进 ` (多个相关问题)。" + +#: ../../whatsnew/3.4.rst:93 +msgid "" +":ref:`A ModuleSpec Type ` for the Import System " +"(:pep:`451`). (Affects importer authors.)" +msgstr "" +"针对导入系统的 :ref:`ModuleSpec 类型 ` (:pep:`451`)。 (将影响导入器的作者。)" + +#: ../../whatsnew/3.4.rst:95 +msgid "" +"The :mod:`marshal` format has been made :ref:`more compact and efficient " +"` (:issue:`16475`)." +msgstr "" +":mod:`marshal` 格式已被改进为 :ref:`更为紧凑与高效 ` (:issue:`16475`)。" + +#: ../../whatsnew/3.4.rst:98 +msgid "New library modules:" +msgstr "新的库模块:" + +#: ../../whatsnew/3.4.rst:100 +msgid "" +":mod:`asyncio`: :ref:`New provisional API for asynchronous IO ` (:pep:`3156`)." +msgstr "" +":mod:`asyncio`: :ref:`针对异步 IO 的新版暂定 API ` (:pep:`3156`)。" + +#: ../../whatsnew/3.4.rst:102 +msgid "" +":mod:`ensurepip`: :ref:`Bootstrapping the pip installer ` (:pep:`453`)." +msgstr "" +":mod:`ensurepip`: :ref:`引导设置 pip 安装器 ` (:pep:`453`)。" + +#: ../../whatsnew/3.4.rst:104 +msgid "" +":mod:`enum`: :ref:`Support for enumeration types ` " +"(:pep:`435`)." +msgstr ":mod:`enum`: :ref:`对枚举类型的支持 ` (:pep:`435`)。" + +#: ../../whatsnew/3.4.rst:106 +msgid "" +":mod:`pathlib`: :ref:`Object-oriented filesystem paths ` " +"(:pep:`428`)." +msgstr ":mod:`pathlib`: :ref:`面向对象的文件系统路径 ` (:pep:`428`)。" + +#: ../../whatsnew/3.4.rst:108 +msgid "" +":mod:`selectors`: :ref:`High-level and efficient I/O multiplexing `, built upon the :mod:`select` module primitives (part of " +":pep:`3156`)." +msgstr "" +":mod:`selectors`: :ref:`高层级且高效率的 I/O 复用 `,在 " +":mod:`select` 模块的基础之上建立(为 :pep:`3156` 的组成部分)。" + +#: ../../whatsnew/3.4.rst:111 +msgid "" +":mod:`statistics`: A basic :ref:`numerically stable statistics library " +"` (:pep:`450`)." +msgstr "" +":mod:`statistics`: 基础 :ref:`数字领域稳定统计库 ` (:pep:`450`)。" + +#: ../../whatsnew/3.4.rst:113 +msgid "" +":mod:`tracemalloc`: :ref:`Trace Python memory allocations ` (:pep:`454`)." +msgstr "" +":mod:`tracemalloc`: :ref:`追踪 Python 内存分配 ` " +"(:pep:`454`)。" + +#: ../../whatsnew/3.4.rst:116 +msgid "Significantly improved library modules:" +msgstr "显著改进的库模块:" + +#: ../../whatsnew/3.4.rst:118 +msgid "" +":ref:`Single-dispatch generic functions ` in " +":mod:`functools` (:pep:`443`)." +msgstr "" +":mod:`functools` 中的 :ref:`单一调度泛型函数 ` (:pep:`443`)。" + +#: ../../whatsnew/3.4.rst:120 +msgid "" +"New :mod:`pickle` :ref:`protocol 4 ` (:pep:`3154`)." +msgstr "新的 :mod:`pickle` :ref:`协议 4 ` (:pep:`3154`)。" + +#: ../../whatsnew/3.4.rst:121 +msgid "" +":mod:`multiprocessing` now has :ref:`an option to avoid using os.fork on " +"Unix ` (:issue:`8713`)." +msgstr "" +":mod:`multiprocessing` 现在包含 :ref:`一个避免在 Unix 上使用 os.fork 的选项 ` (:issue:`8713`)。" + +#: ../../whatsnew/3.4.rst:123 +msgid "" +":mod:`email` has a new submodule, :mod:`~email.contentmanager`, and a new " +":mod:`~email.message.Message` subclass " +"(:class:`~email.contentmanager.EmailMessage`) that :ref:`simplify MIME " +"handling ` (:issue:`18891`)." +msgstr "" +":mod:`email` 增加新的子模块 :mod:`~email.contentmanager` 和新的子类型 " +":mod:`~email.message.Message` (:class:`~email.contentmanager.EmailMessage`) " +"用以 :ref:`简化 MIME 处理 ` (:issue:`18891`)。" + +#: ../../whatsnew/3.4.rst:127 +msgid "" +"The :mod:`inspect` and :mod:`pydoc` modules are now capable of correct " +"introspection of a much wider variety of callable objects, which improves " +"the output of the Python :func:`help` system." +msgstr "" +":mod:`inspect` 和 :mod:`pydoc` 模块现在能够自省更多种类的可调用对象,这改进了 Python :func:`help` " +"系统的输出。" + +#: ../../whatsnew/3.4.rst:130 +msgid "The :mod:`ipaddress` module API has been declared stable" +msgstr ":mod:`ipaddress` 模块 API 已被声明为稳定状态" + +#: ../../whatsnew/3.4.rst:132 +msgid "Security improvements:" +msgstr "安全改进:" + +#: ../../whatsnew/3.4.rst:134 +msgid "" +":ref:`Secure and interchangeable hash algorithm ` " +"(:pep:`456`)." +msgstr ":ref:`安全且可互换的哈希算法 ` (:pep:`456`)。" + +#: ../../whatsnew/3.4.rst:136 +msgid "" +":ref:`Make newly created file descriptors non-inheritable ` (:pep:`446`) to avoid leaking file descriptors to child processes." +msgstr "" +":ref:`将新创建的文件描述符设为不可继承 ` (:pep:`446`) 以避免将文件描述符泄露给子进程。" + +#: ../../whatsnew/3.4.rst:138 +msgid "" +"New command line option for :ref:`isolated mode `, " +"(:issue:`16499`)." +msgstr "新增对应 :ref:`隔离模式 ` 的命令行选项。 (:issue:`16499`)。" + +#: ../../whatsnew/3.4.rst:140 +msgid "" +":mod:`multiprocessing` now has :ref:`an option to avoid using os.fork on " +"Unix `. *spawn* and *forkserver* are more" +" secure because they avoid sharing data with child processes." +msgstr "" +"现在 :mod:`multiprocessing` 具有 :ref:`一个在 Unix 上避免使用 os.fork 的选项 `。 *spawn* 和 *forkserver* 更为安全因为它们会避免与子进程共享数据。" + +#: ../../whatsnew/3.4.rst:143 +msgid "" +":mod:`multiprocessing` child processes on Windows no longer inherit all of " +"the parent's inheritable handles, only the necessary ones." +msgstr "在 Windows 上 :mod:`multiprocessing` 子进程将不再继承父进程的所有可继承句柄,而仅继承必需的几个。" + +#: ../../whatsnew/3.4.rst:145 +msgid "" +"A new :func:`hashlib.pbkdf2_hmac` function provides the `PKCS#5 password-" +"based key derivation function 2 `_." +msgstr "" +"新增的 :func:`hashlib.pbkdf2_hmac` 函数可提供 `PKCS#5 基于口令的密钥派生函数 2 " +"`_。" + +#: ../../whatsnew/3.4.rst:148 +msgid "" +":ref:`TLSv1.1 and TLSv1.2 support ` for :mod:`ssl`." +msgstr "在 :mod:`ssl` 中对于 :ref:`TLSv1.1 和 TLSv1.2 的支持 `。" + +#: ../../whatsnew/3.4.rst:149 +msgid "" +":ref:`Retrieving certificates from the Windows system cert store support " +"` for :mod:`ssl`." +msgstr "" +"在 :mod:`ssl` 中对于 :ref:`从 Windows 系统证书库获取证书的支持 `。" + +#: ../../whatsnew/3.4.rst:151 +msgid "" +":ref:`Server-side SNI (Server Name Indication) support ` for" +" :mod:`ssl`." +msgstr "" +"在 :mod:`ssl` 中对于 :ref:`服务端 SNI (Server Name Indication) 的支持 " +"`。" + +#: ../../whatsnew/3.4.rst:153 +msgid "" +"The :class:`ssl.SSLContext` class has a :ref:`lot of improvements " +"`." +msgstr ":class:`ssl.SSLContext` 类具有 :ref:`大量改进 `。" + +#: ../../whatsnew/3.4.rst:155 +msgid "" +"All modules in the standard library that support SSL now support server " +"certificate verification, including hostname matching " +"(:func:`ssl.match_hostname`) and CRLs (Certificate Revocation lists, see " +":func:`ssl.SSLContext.load_verify_locations`)." +msgstr "" +"标准库中所有支持 SSL 的模块现在都支持服务器证书验证,包括主机名匹配 (:func:`ssl.match_hostname`) 和 CRL " +"(Certificate Revocation Lists,参见 " +":func:`ssl.SSLContext.load_verify_locations`)。" + +#: ../../whatsnew/3.4.rst:160 +msgid "CPython implementation improvements:" +msgstr "CPython 实现的改进:" + +#: ../../whatsnew/3.4.rst:162 +msgid ":ref:`Safe object finalization ` (:pep:`442`)." +msgstr ":ref:`安全的对象最终化 ` (:pep:`442`)。" + +#: ../../whatsnew/3.4.rst:163 +msgid "" +"Leveraging :pep:`442`, in most cases :ref:`module globals are no longer set " +"to None during finalization ` (:issue:`18214`)." +msgstr "" +"通过应用 :pep:`442`,在大多数情况下 :ref:`模块的 globals 在最终化期间将不再被设为 None ` (:issue:`18214`)。" + +#: ../../whatsnew/3.4.rst:165 +msgid ":ref:`Configurable memory allocators ` (:pep:`445`)." +msgstr ":ref:`可配置的内存分配器 ` (:pep:`445`)。" + +#: ../../whatsnew/3.4.rst:166 +msgid ":ref:`Argument Clinic ` (:pep:`436`)." +msgstr ":ref:`Argument Clinic ` (:pep:`436`)。" + +#: ../../whatsnew/3.4.rst:168 +msgid "" +"Please read on for a comprehensive list of user-facing changes, including " +"many other smaller improvements, CPython optimizations, deprecations, and " +"potential porting issues." +msgstr "请继续阅读有关针对用户的改变的完整清单,包括许多其他较小的改进、CPython 优化、弃用以及潜在的移植问题。" + +#: ../../whatsnew/3.4.rst:175 +msgid "New Features" +msgstr "新的特性" + +#: ../../whatsnew/3.4.rst:180 +msgid "PEP 453: Explicit Bootstrapping of PIP in Python Installations" +msgstr "PEP 453: 在 Python 安装版中对 PIP 的显式初始设置" + +#: ../../whatsnew/3.4.rst:183 +msgid "Bootstrapping pip By Default" +msgstr "默认对 pip 进行初始设置" + +#: ../../whatsnew/3.4.rst:185 +msgid "" +"The new :mod:`ensurepip` module (defined in :pep:`453`) provides a standard " +"cross-platform mechanism to bootstrap the pip installer into Python " +"installations and virtual environments. The version of ``pip`` included with" +" Python 3.4.0 is ``pip`` 1.5.4, and future 3.4.x maintenance releases will " +"update the bundled version to the latest version of ``pip`` that is " +"available at the time of creating the release candidate." +msgstr "" +"新增的 :mod:`ensurepip` 模块(在 :pep:`453` 中定义)提供了一个在 Python 安装版和虚拟环境中初始设置 pip " +"安装器的标准跨平台机制。 包括在 Python 3.4.0 中的 ``pip`` 版本是 ``pip`` 1.5.4,未来的 3.4.x " +"维护发布版会将附带版本升级为创建候选发布版时的 ``pip`` 最新版本。" + +#: ../../whatsnew/3.4.rst:192 +msgid "" +"By default, the commands ``pipX`` and ``pipX.Y`` will be installed on all " +"platforms (where X.Y stands for the version of the Python installation), " +"along with the ``pip`` Python package and its dependencies. On Windows and " +"in virtual environments on all platforms, the unversioned ``pip`` command " +"will also be installed. On other platforms, the system wide unversioned " +"``pip`` command typically refers to the separately installed Python 2 " +"version." +msgstr "" +"在默认情况下,将在所有平台上安装 ``pipX`` 和 ``pipX.Y`` 等命令(其中 X.Y 表示 Python 安装包的版本),并包括 " +"``pip`` Python 包及其依赖。 在 Windows 中以及所有平台的虚拟环境中,还将安装不带版本号的 ``pip`` 命令。 " +"在其他平台中,系统层级上不带版本号的 ``pip`` 命令通常是指向单独安装的 Python 2 版本。" + +#: ../../whatsnew/3.4.rst:200 +msgid "" +"The ``pyvenv`` command line utility and the :mod:`venv` module make use of " +"the :mod:`ensurepip` module to make ``pip`` readily available in virtual " +"environments. When using the command line utility, ``pip`` is installed by " +"default, while when using the :mod:`venv` module :ref:`venv-api` " +"installation of ``pip`` must be requested explicitly." +msgstr "" +"``pyvenv`` 命令行工具和 :mod:`venv` 模块可利用 :mod:`ensurepip` 模块在虚拟环境中准备好 ``pip``。 " +"当使用命令行工具时,会默认安装 ``pip``,而当使用 :mod:`venv` 模块的 :ref:`venv-api` 安装版时必须显式地安装 " +"``pip``。" + +#: ../../whatsnew/3.4.rst:206 +msgid "" +"For CPython :ref:`source builds on POSIX systems `," +" the ``make install`` and ``make altinstall`` commands bootstrap ``pip`` by " +"default. This behaviour can be controlled through configure options, and " +"overridden through Makefile options." +msgstr "" +"对于 CPython :ref:`在 POSIX 系统上的源代码编译版 `,``make " +"install`` 和 ``make altinstall`` 命令默认会初始设置 ``pip``。 此行为可通过配置选项来控制,并通过 " +"Makefile 选项来重写。" + +#: ../../whatsnew/3.4.rst:211 +msgid "" +"On Windows and Mac OS X, the CPython installers now default to installing " +"``pip`` along with CPython itself (users may opt out of installing it during" +" the installation process). Window users will need to opt in to the " +"automatic ``PATH`` modifications to have ``pip`` available from the command " +"line by default, otherwise it can still be accessed through the Python " +"launcher for Windows as ``py -m pip``." +msgstr "" +"在 Windows 和 Mac OS X 上,现在 CPython 安装程序默认会将 ``pip`` 与 CPython " +"本身一同安装(用户可以在安装过程中选择不安装它)。 Window 用户需要选择执行 ``PATH`` 修改以使 ``pip`` " +"在命令行中默认可用,在其他情况下它仍然可以通过 Windows 版 Python 启动器以 ``py -m pip`` 的方式使用。" + +#: ../../whatsnew/3.4.rst:218 +msgid "" +"As `discussed in the PEP`__, platform packagers may choose not to install " +"these commands by default, as long as, when invoked, they provide clear and " +"simple directions on how to install them on that platform (usually using the" +" system package manager)." +msgstr "" +"正如 `在 PEP " +"中已讨论的`__,平台打包者可以选择默认不安装这些命令,只需要在它们被发起调用时,能够提供有关如何在该平台上安装它们的简单清晰的指引(通常是使用系统包管理器)。" + +#: ../../whatsnew/3.4.rst:227 +msgid "" +"To avoid conflicts between parallel Python 2 and Python 3 installations, " +"only the versioned ``pip3`` and ``pip3.4`` commands are bootstrapped by " +"default when ``ensurepip`` is invoked directly - the ``--default-pip`` " +"option is needed to also request the unversioned ``pip`` command. ``pyvenv``" +" and the Windows installer ensure that the unqualified ``pip`` command is " +"made available in those environments, and ``pip`` can always be invoked via " +"the ``-m`` switch rather than directly to avoid ambiguity on systems with " +"multiple Python installations." +msgstr "" +"为了避免同时存在的 Python 2 和 Python 3 安装版之前的冲突,当 ``ensurepip`` 被直接唤起时默认只会初始设置带版本号的 " +"``pip3`` 和 ``pip3.4`` 命令 —— 需要添加 ``--default-pip`` 选项来请求设置不带版本号的 ``pip`` 命令。" +" ``pyvenv`` 和 Windows 安装程序会确保未限定版本的 ``pip`` 命令在环境中可用,并且 ``pip`` 始终可以通过 " +"``-m`` 选项开关而不是直接唤起以避免在具有多个 Python 安装版的系统中造成歧义。" + +#: ../../whatsnew/3.4.rst:238 +msgid "Documentation Changes" +msgstr "文档更改" + +#: ../../whatsnew/3.4.rst:240 +msgid "" +"As part of this change, the :ref:`installing-index` and :ref:`distributing-" +"index` sections of the documentation have been completely redesigned as " +"short getting started and FAQ documents. Most packaging documentation has " +"now been moved out to the Python Packaging Authority maintained `Python " +"Packaging User Guide `__ and the documentation" +" of the individual projects." +msgstr "" +"作为此项更改的一部分,文档的 :ref:`installing-index` 和 :ref:`distributing-index` " +"章节已经完全重新设计,快速入门和 FAQ 文档也是如此。 大部分打包指南文档现在都已被移至由 Python Packaging Authority " +"维护的 `Python Packaging User Guide `__ " +"以及相应的独立项目文档。" + +#: ../../whatsnew/3.4.rst:248 +msgid "" +"However, as this migration is currently still incomplete, the legacy " +"versions of those guides remaining available as :ref:`install-index` and " +":ref:`distutils-index`." +msgstr "" + +#: ../../whatsnew/3.4.rst:255 +msgid ":pep:`453` -- Explicit bootstrapping of pip in Python installations" +msgstr ":pep:`453` -- Python 安装版中对 pip 的显式初始设置" + +#: ../../whatsnew/3.4.rst:255 +msgid "" +"PEP written by Donald Stufft and Nick Coghlan, implemented by Donald Stufft," +" Nick Coghlan, Martin von Löwis and Ned Deily." +msgstr "" +"PEP 由Donald Stufft 和 Nick Coghlan 撰写,由 Donald Stufft,Nick Coghlan,Martin von" +" Löwis 和 Ned Deily 实现。" + +#: ../../whatsnew/3.4.rst:262 +msgid "PEP 446: Newly Created File Descriptors Are Non-Inheritable" +msgstr "PEP 446: 新创建的文件描述符将设为不可继承" + +#: ../../whatsnew/3.4.rst:264 +msgid "" +":pep:`446` makes newly created file descriptors :ref:`non-inheritable " +"`. In general, this is the behavior an application will " +"want: when launching a new process, having currently open files also open in" +" the new process can lead to all sorts of hard to find bugs, and potentially" +" to security issues." +msgstr "" +":pep:`446` 将新创建的文件描述符设为 :ref:`不可继承的 `。 " +"通常,这就是应用程序所需要的行为:当启动一个新进程时,让当前打开的文件也在新进程里打开可能导致各种难以查找的程序错误以及潜在的安全问题。" + +#: ../../whatsnew/3.4.rst:270 +msgid "" +"However, there are occasions when inheritance is desired. To support these " +"cases, the following new functions and methods are available:" +msgstr "不过,也存在一些需要继承行为的情况。 为了支持这些情况,可以使用以下的新增函数和方法:" + +#: ../../whatsnew/3.4.rst:273 +msgid ":func:`os.get_inheritable`, :func:`os.set_inheritable`" +msgstr ":func:`os.get_inheritable`, :func:`os.set_inheritable`" + +#: ../../whatsnew/3.4.rst:274 +msgid ":func:`os.get_handle_inheritable`, :func:`os.set_handle_inheritable`" +msgstr ":func:`os.get_handle_inheritable`, :func:`os.set_handle_inheritable`" + +#: ../../whatsnew/3.4.rst:275 +msgid "" +":meth:`socket.socket.get_inheritable`, :meth:`socket.socket.set_inheritable`" +msgstr "" +":meth:`socket.socket.get_inheritable`, :meth:`socket.socket.set_inheritable`" + +#: ../../whatsnew/3.4.rst:279 +msgid ":pep:`446` -- Make newly created file descriptors non-inheritable" +msgstr ":pep:`446` -- 将新创建的文件描述符设为不可继承" + +#: ../../whatsnew/3.4.rst:280 ../../whatsnew/3.4.rst:1812 +msgid "PEP written and implemented by Victor Stinner." +msgstr "PEP 由 Victor Stinner 撰写并实现。" + +#: ../../whatsnew/3.4.rst:286 +msgid "Improvements to Codec Handling" +msgstr "编解码器处理方式的改进" + +#: ../../whatsnew/3.4.rst:288 +msgid "" +"Since it was first introduced, the :mod:`codecs` module has always been " +"intended to operate as a type-neutral dynamic encoding and decoding system. " +"However, its close coupling with the Python text model, especially the type " +"restricted convenience methods on the builtin :class:`str`, :class:`bytes` " +"and :class:`bytearray` types, has historically obscured that fact." +msgstr "" +"自首次被引入以来,:mod:`codecs` 模块始终是作为一个类型中立的动态编码和解码系统来运作的。 然而,它与 Python 文本模型,尤其是内置 " +":class:`str`、:class:`bytes` 和 :class:`bytearray` " +"类型上的限定类型的便捷方法的紧密耦合,在历史上掩盖了这一事实。" + +#: ../../whatsnew/3.4.rst:295 +msgid "" +"As a key step in clarifying the situation, the :meth:`codecs.encode` and " +":meth:`codecs.decode` convenience functions are now properly documented in " +"Python 2.7, 3.3 and 3.4. These functions have existed in the :mod:`codecs` " +"module (and have been covered by the regression test suite) since Python " +"2.4, but were previously only discoverable through runtime introspection." +msgstr "" +"作为明晰情况的关键一步,现在 :meth:`codecs.encode` 和 :meth:`codecs.decode` 便捷函数在 Python " +"2.7、3.3 和 3.4 中都正确地写入了文档。 自 Python 2.4 以来这些函数即已存在于 :mod:`codecs` " +"模块中(并已被回归测试套件所覆盖),但在此前只能通过运行时自省才能发现。" + +#: ../../whatsnew/3.4.rst:301 +msgid "" +"Unlike the convenience methods on :class:`str`, :class:`bytes` and " +":class:`bytearray`, the :mod:`codecs` convenience functions support " +"arbitrary codecs in both Python 2 and Python 3, rather than being limited to" +" Unicode text encodings (in Python 3) or ``basestring`` <-> ``basestring`` " +"conversions (in Python 2)." +msgstr "" +"不同于 :class:`str`, :class:`bytes` 和 :class:`bytearray` 上的便捷方法,:mod:`codecs` " +"的便捷函数同时支持 Python 2 和 Python 3 中的任意编解码器,而非仅限于 Unicode 文本编码格式(在 Python 3 中) 或 " +"``basestring`` <-> ``basestring`` 转换(在 Python 2 中)。" + +#: ../../whatsnew/3.4.rst:307 +msgid "" +"In Python 3.4, the interpreter is able to identify the known non-text " +"encodings provided in the standard library and direct users towards these " +"general purpose convenience functions when appropriate::" +msgstr "在 Python 3.4 中,解释器能够识别标准库中提供的已知非文本编码格式并会在适当的时候引导用户找到这些通用型便捷函数::" + +#: ../../whatsnew/3.4.rst:326 +msgid "" +"In a related change, whenever it is feasible without breaking backwards " +"compatibility, exceptions raised during encoding and decoding operations are" +" wrapped in a chained exception of the same type that mentions the name of " +"the codec responsible for producing the error::" +msgstr "" +"在相关的改变中,只要在不破坏向下兼容性 " +"的情况下是可行的,则在编码和解码操作期间引发的异常都会被包装在一个特定类型的链式异常中,该类型的名称与产生错误的相应编解码器一致::" + +#: ../../whatsnew/3.4.rst:359 +msgid "" +"Finally, as the examples above show, these improvements have permitted the " +"restoration of the convenience aliases for the non-Unicode codecs that were " +"themselves restored in Python 3.2. This means that encoding binary data to " +"and from its hexadecimal representation (for example) can now be written " +"as::" +msgstr "" +"最后,正如上面的例子所示,这些改进允许恢复非 Unicode 编解码器的便捷别名,这些别名在 Python 3.2 中已被恢复。 " +"这意味着(举例来说)二进制数据到其十六进制表示形式的编码转换现在可以写成::" + +#: ../../whatsnew/3.4.rst:371 +msgid "" +"The binary and text transforms provided in the standard library are detailed" +" in :ref:`binary-transforms` and :ref:`text-transforms`." +msgstr "" +"在标准库中提供的二进制和文本转换操作详见 :ref:`binary-transforms` 和 :ref:`text-transforms`。" + +#: ../../whatsnew/3.4.rst:374 +msgid "" +"(Contributed by Nick Coghlan in :issue:`7475`, :issue:`17827`, " +":issue:`17828` and :issue:`19619`.)" +msgstr "" +"(由 Nick Coghlan 在 :issue:`7475`, :issue:`17827`, :issue:`17828` 和 " +":issue:`19619` 中贡献。)" + +#: ../../whatsnew/3.4.rst:381 +msgid "PEP 451: A ModuleSpec Type for the Import System" +msgstr "PEP 451: 针对导入系统的 ModuleSpec 类型" + +#: ../../whatsnew/3.4.rst:383 +msgid "" +":pep:`451` provides an encapsulation of the information about a module that " +"the import machinery will use to load it (that is, a module specification)." +" This helps simplify both the import implementation and several import-" +"related APIs. The change is also a stepping stone for `several future " +"import-related improvements`__." +msgstr "" +":pep:`451` 提供了对模块相关信息的封装,导入机制将使用这些信息来加载它(即模块规范说明)。 这有助于简化导入的实现和几个导入相关的 API。 " +"这一改动也是 `某些未来导入相关改进`__ 的基石。" + +#: ../../whatsnew/3.4.rst:391 +msgid "" +"The public-facing changes from the PEP are entirely backward-compatible. " +"Furthermore, they should be transparent to everyone but importer authors. " +"Key finder and loader methods have been deprecated, but they will continue " +"working. New importers should use the new methods described in the PEP. " +"Existing importers should be updated to implement the new methods. See the " +":ref:`deprecated-3.4` section for a list of methods that should be replaced " +"and their replacements." +msgstr "" +"PEP 中面向公众的修改是完全向下兼容的。 并且,它们应当对除导入器开发者之外的其他所有人都可见。 主要查找器和加载器方法已被弃用,但它们将继续工作。 " +"新的导入器应当使用 PEP 中描述的新方法。 现有的导入器应当被更新以实现这些新方法。 请参阅 :ref:`deprecated-3.4` " +"一节获取应当被替代的方法及其替代物的列表。" + +#: ../../whatsnew/3.4.rst:401 +msgid "Other Language Changes" +msgstr "其他语言特性修改" + +#: ../../whatsnew/3.4.rst:403 +msgid "Some smaller changes made to the core Python language are:" +msgstr "对Python 语言核心进行的小改动:" + +#: ../../whatsnew/3.4.rst:405 +msgid "Unicode database updated to UCD version 6.3." +msgstr "Unicode 数据库更新至 UCD 版本 6.3。" + +#: ../../whatsnew/3.4.rst:407 +msgid "" +":func:`min` and :func:`max` now accept a *default* keyword-only argument " +"that can be used to specify the value they return if the iterable they are " +"evaluating has no elements. (Contributed by Julian Berman in " +":issue:`18111`.)" +msgstr "" +"现在 :func:`min` 和 :func:`max` 均接受一个 *default* " +"仅限关键字参数可被用来指定当它们要求值的可迭代对象中没有任何元素时要返回的值。 (由 Julian Berman 在 :issue:`18111` " +"中贡献。)" + +#: ../../whatsnew/3.4.rst:412 +msgid "Module objects are now :mod:`weakref`'able." +msgstr "" + +#: ../../whatsnew/3.4.rst:414 +msgid "" +"Module ``__file__`` attributes (and related values) should now always " +"contain absolute paths by default, with the sole exception of " +"``__main__.__file__`` when a script has been executed directly using a " +"relative path. (Contributed by Brett Cannon in :issue:`18416`.)" +msgstr "" +"模块的 ``__file__`` 属性(以及相关的值)现在应当总是默认包含绝对路径,唯一的例外是当使用相对路径直接执行一个脚本时的 " +"``__main__.__file__``。 (由 Brett Cannon 在 :issue:`18416` 中贡献。)" + +#: ../../whatsnew/3.4.rst:419 +msgid "" +"All the UTF-\\* codecs (except UTF-7) now reject surrogates during both " +"encoding and decoding unless the ``surrogatepass`` error handler is used, " +"with the exception of the UTF-16 decoder (which accepts valid surrogate " +"pairs) and the UTF-16 encoder (which produces them while encoding non-BMP " +"characters). (Contributed by Victor Stinner, Kang-Hao (Kenny) Lu and Serhiy " +"Storchaka in :issue:`12892`.)" +msgstr "" +"现在所有 UTF-\\* 编解码器(UTF-7 除外)在编码和解码期间都将拒绝替代符除非使用 ``surrogatepass`` 错误处理器,例外情况有" +" UTF-16 解码器(接受有效的替代符对)和 UTF-16 编码器(在编码非 BMP 字符时会产生替代符)。 (由 Victor Stinner, " +"Kang-Hao (Kenny) Lu 和 Serhiy Storchaka 在 :issue:`12892` 中贡献。)" + +#: ../../whatsnew/3.4.rst:426 +msgid "" +"New German EBCDIC :ref:`codec ` ``cp273``. (Contributed" +" by Michael Bierenfeld and Andrew Kuchling in :issue:`1097797`.)" +msgstr "" +"新增 German EBCDIC :ref:`编解码器 ` ``cp273``。 (由 Michael " +"Bierenfeld 和 Andrew Kuchling 在 :issue:`1097797` 中贡献。)" + +#: ../../whatsnew/3.4.rst:429 +msgid "" +"New Ukrainian :ref:`codec ` ``cp1125``. (Contributed by" +" Serhiy Storchaka in :issue:`19668`.)" +msgstr "" +"新增 Ukrainian :ref:`编解码器 ` ``cp1125``。 (由 Serhiy " +"Storchaka 在 :issue:`19668` 中贡献。)" + +#: ../../whatsnew/3.4.rst:432 +msgid "" +":class:`bytes`.join() and :class:`bytearray`.join() now accept arbitrary " +"buffer objects as arguments. (Contributed by Antoine Pitrou in " +":issue:`15958`.)" +msgstr "" +"现在 :class:`bytes`.join() 和 :class:`bytearray`.join() 接受任意缓冲区对象作为参数。 (由 " +"Antoine Pitrou 在 :issue:`15958` 中贡献。)" + +#: ../../whatsnew/3.4.rst:436 +msgid "" +"The :class:`int` constructor now accepts any object that has an " +"``__index__`` method for its *base* argument. (Contributed by Mark " +"Dickinson in :issue:`16772`.)" +msgstr "" +"现在 :class:`int` 构造器接受任何具有 ``__index__`` 方法的对象作为其 *base* 参数。 (由 Mark " +"Dickinson 在 :issue:`16772` 中贡献。)" + +#: ../../whatsnew/3.4.rst:440 +msgid "" +"Frame objects now have a :func:`~frame.clear` method that clears all " +"references to local variables from the frame. (Contributed by Antoine " +"Pitrou in :issue:`17934`.)" +msgstr "" +"帧对象现在具有 :func:`~frame.clear` 方法用来从帧中清除所有对局部变量的引用。 (由 Antoine Pitrou 在 " +":issue:`17934` 中贡献。)" + +#: ../../whatsnew/3.4.rst:444 +msgid "" +":class:`memoryview` is now registered as a :class:`Sequence " +"`, and supports the :func:`reversed` builtin. (Contributed" +" by Nick Coghlan and Claudiu Popa in :issue:`18690` and :issue:`19078`.)" +msgstr "" +"现在 :class:`memoryview` 被注册为 :class:`序列 `,并支持 " +":func:`reversed` 内置函数。 (由 Nick Coghlan 和 Claudiu Popa 在 :issue:`18690` 和 " +":issue:`19078` 中贡献。)" + +#: ../../whatsnew/3.4.rst:448 +msgid "" +"Signatures reported by :func:`help` have been modified and improved in " +"several cases as a result of the introduction of Argument Clinic and other " +"changes to the :mod:`inspect` and :mod:`pydoc` modules." +msgstr "" +"作为对引入 Argument Clinic 以及对 :mod:`inspect` 和 :mod:`pydoc` 模块的其他修改的结果,在各种场合下由 " +":func:`help` 所报告的签名信息已获得修改和提升。" + +#: ../../whatsnew/3.4.rst:452 +msgid "" +":meth:`~object.__length_hint__` is now part of the formal language " +"specification (see :pep:`424`). (Contributed by Armin Ronacher in " +":issue:`16148`.)" +msgstr "" +"现在 :meth:`~object.__length_hint__` 已成为正式语言规范的一部分 (参见 :pep:`424`)。 (由 Armin " +"Ronacher 在 :issue:`16148` 中贡献。)" + +#: ../../whatsnew/3.4.rst:458 +msgid "New Modules" +msgstr "新增模块" + +#: ../../whatsnew/3.4.rst:464 +msgid "asyncio" +msgstr "asyncio" + +#: ../../whatsnew/3.4.rst:466 +msgid "" +"The new :mod:`asyncio` module (defined in :pep:`3156`) provides a standard " +"pluggable event loop model for Python, providing solid asynchronous IO " +"support in the standard library, and making it easier for other event loop " +"implementations to interoperate with the standard library and each other." +msgstr "" +"新增的 :mod:`asyncio` 模块(在 :pep:`3156` 中定义)为 Python " +"提供了一个标准的可插入事件循环模型,在标准库中提供了坚实的异步 IO 支持,并使得其他事件循环的实现与标准库和其他库的相互操作更为容易。" + +#: ../../whatsnew/3.4.rst:471 ../../whatsnew/3.4.rst:534 +msgid "For Python 3.4, this module is considered a :term:`provisional API`." +msgstr "对于 Python 3.4,此模块被视为属于 :term:`provisional API`。" + +#: ../../whatsnew/3.4.rst:475 +msgid ":pep:`3156` -- Asynchronous IO Support Rebooted: the \"asyncio\" Module" +msgstr ":pep:`3156` -- 异步 IO 支持的重启: \"asyncio\" 模块" + +#: ../../whatsnew/3.4.rst:476 +msgid "PEP written and implementation led by Guido van Rossum." +msgstr "PEP 由 Guido van Rossum 领导编写和实现。" + +#: ../../whatsnew/3.4.rst:482 +msgid "ensurepip" +msgstr "ensurepip" + +#: ../../whatsnew/3.4.rst:484 +msgid "" +"The new :mod:`ensurepip` module is the primary infrastructure for the " +":pep:`453` implementation. In the normal course of events end users will " +"not need to interact with this module, but it can be used to manually " +"bootstrap ``pip`` if the automated bootstrapping into an installation or " +"virtual environment was declined." +msgstr "" +"新增的 :mod:`ensurepip` 模块是用于 :pep:`453` 实现的主要基础设施。 " +"在正常情况下最终用户不需要与此模块进行交互,但如果对安装版或虚拟环境的自动初始设置遭到拒绝则可使用它来手动初始设置 ``pip``。" + +#: ../../whatsnew/3.4.rst:490 +msgid "" +":mod:`ensurepip` includes a bundled copy of ``pip``, up-to-date as of the " +"first release candidate of the release of CPython with which it ships (this " +"applies to both maintenance releases and feature releases). ``ensurepip`` " +"does not access the internet. If the installation has Internet access, " +"after ``ensurepip`` is run the bundled ``pip`` can be used to upgrade " +"``pip`` to a more recent release than the bundled one. (Note that such an " +"upgraded version of ``pip`` is considered to be a separately installed " +"package and will not be removed if Python is uninstalled.)" +msgstr "" + +#: ../../whatsnew/3.4.rst:499 +msgid "" +"The module is named *ensure*\\ pip because if called when ``pip`` is already" +" installed, it does nothing. It also has an ``--upgrade`` option that will " +"cause it to install the bundled copy of ``pip`` if the existing installed " +"version of ``pip`` is older than the bundled copy." +msgstr "" +"该模块被命名为 *ensure*\\ pip 是因为如果在已安装 ``pip`` 的情况下被调用,它将不做任何操作。 它还有一个 " +"``--upgrade`` 选项可以在当前已安装的 ``pip`` 版本比所捆绑的副本更旧的情况下安装所捆绑的 ``pip`` 副本。" + +#: ../../whatsnew/3.4.rst:508 +msgid "enum" +msgstr "enum" + +#: ../../whatsnew/3.4.rst:510 +msgid "" +"The new :mod:`enum` module (defined in :pep:`435`) provides a standard " +"implementation of enumeration types, allowing other modules (such as " +":mod:`socket`) to provide more informative error messages and better " +"debugging support by replacing opaque integer constants with backwards " +"compatible enumeration values." +msgstr "" +"新增的 :mod:`enum` 模块(在 :pep:`435` 中定义)提供了枚举类型的标准实现,允许其他模块(如 :mod:`socket` " +"等)通过将含义不清晰的整数常量替换为可向下兼容的枚举值来提供更具信息量的错误消息和更好的调试支持。" + +#: ../../whatsnew/3.4.rst:519 +msgid ":pep:`435` -- Adding an Enum type to the Python standard library" +msgstr ":pep:`435` -- 为 Python 标准库增加了 Enum 类型" + +#: ../../whatsnew/3.4.rst:519 +msgid "" +"PEP written by Barry Warsaw, Eli Bendersky and Ethan Furman, implemented by " +"Ethan Furman." +msgstr "" +"PEP 由 Barry Warsaw,Eli Bendersky 和 Ethan Furman 撰写 ,由 Ethan Furman 实现。" + +#: ../../whatsnew/3.4.rst:526 +msgid "pathlib" +msgstr "pathlib" + +#: ../../whatsnew/3.4.rst:528 +msgid "" +"The new :mod:`pathlib` module offers classes representing filesystem paths " +"with semantics appropriate for different operating systems. Path classes " +"are divided between *pure paths*, which provide purely computational " +"operations without I/O, and *concrete paths*, which inherit from pure paths " +"but also provide I/O operations." +msgstr "" +"新增的 :mod:`pathlib` 模块提供了代表文件系统路径的类,其语义适用于不同的操作系统。 路径类被划分为提供不带 I/O 的纯计算操作的 " +"*纯路径*,以及继承自纯路径但提供 I/O 操作的 *实体路径*。" + +#: ../../whatsnew/3.4.rst:538 +msgid ":pep:`428` -- The pathlib module -- object-oriented filesystem paths" +msgstr ":pep:`428` -- pathlib 模块 -- 面向对象的文件系统路径" + +#: ../../whatsnew/3.4.rst:539 ../../whatsnew/3.4.rst:1835 +msgid "PEP written and implemented by Antoine Pitrou." +msgstr "PEP 由 Antoine Pitrou 撰写并实现" + +#: ../../whatsnew/3.4.rst:545 +msgid "selectors" +msgstr "selectors" + +#: ../../whatsnew/3.4.rst:547 +msgid "" +"The new :mod:`selectors` module (created as part of implementing " +":pep:`3156`) allows high-level and efficient I/O multiplexing, built upon " +"the :mod:`select` module primitives." +msgstr "" +"新增的 :mod:`selectors` 模块(作为 :pep:`3156` 实现的一部分被创建)允许高层级且高效的 I/O 多路复用,它是在 " +":mod:`select` 模块的基础上构建的。" + +#: ../../whatsnew/3.4.rst:555 +msgid "statistics" +msgstr "statistics" + +#: ../../whatsnew/3.4.rst:557 +msgid "" +"The new :mod:`statistics` module (defined in :pep:`450`) offers some core " +"statistics functionality directly in the standard library. This module " +"supports calculation of the mean, median, mode, variance and standard " +"deviation of a data series." +msgstr "" +"新增的 :mod:`statistics` 模块(在 :pep:`450` 中定义)直接在标准库中提供了一些核心统计功能。 " +"该模块支持计算数据系列的平均值、中位数、模式、方差和标准差等。" + +#: ../../whatsnew/3.4.rst:564 +msgid ":pep:`450` -- Adding A Statistics Module To The Standard Library" +msgstr ":pep:`450` -- 为标准库增加 statistics 模块" + +#: ../../whatsnew/3.4.rst:565 +msgid "PEP written and implemented by Steven D'Aprano" +msgstr "PEP 由 Steven D'Aprano 撰写并实现。" + +#: ../../whatsnew/3.4.rst:571 +msgid "tracemalloc" +msgstr "tracemalloc" + +#: ../../whatsnew/3.4.rst:573 +msgid "" +"The new :mod:`tracemalloc` module (defined in :pep:`454`) is a debug tool to" +" trace memory blocks allocated by Python. It provides the following " +"information:" +msgstr "" +"新增的 :mod:`tracemalloc` 模块(在 :pep:`454` 中定义)是用于追踪由 Python 所分配的内存块的调试工具。 " +"它提供了以下信息:" + +#: ../../whatsnew/3.4.rst:576 +msgid "Trace where an object was allocated" +msgstr "追踪对象被分配所在的位置" + +#: ../../whatsnew/3.4.rst:577 +msgid "" +"Statistics on allocated memory blocks per filename and per line number: " +"total size, number and average size of allocated memory blocks" +msgstr "按文件、按行统计python的内存块分配情况: 总大小、块的数量以及块平均大小。" + +#: ../../whatsnew/3.4.rst:579 +msgid "Compute the differences between two snapshots to detect memory leaks" +msgstr "对比两个内存快照的差异,以便排查内存泄漏" + +#: ../../whatsnew/3.4.rst:583 +msgid "" +":pep:`454` -- Add a new tracemalloc module to trace Python memory " +"allocations" +msgstr ":pep:`454` -- 新增 tracemalloc 模块用于追踪 Python 内存分配" + +#: ../../whatsnew/3.4.rst:584 +msgid "PEP written and implemented by Victor Stinner" +msgstr "PEP 由 Victor Stinner 撰写并实现" + +#: ../../whatsnew/3.4.rst:589 +msgid "Improved Modules" +msgstr "改进的模块" + +#: ../../whatsnew/3.4.rst:593 +msgid "abc" +msgstr "abc" + +#: ../../whatsnew/3.4.rst:595 +msgid "" +"New function :func:`abc.get_cache_token` can be used to know when to " +"invalidate caches that are affected by changes in the object graph. " +"(Contributed by Łukasz Langa in :issue:`16832`.)" +msgstr "" +"新增的函数 :func:`abc.get_cache_token` 可被用来获知何时使得受到对象图改变影响的缓存失效。 (由 Łukasz Langa " +"在 :issue:`16832` 中贡献。)" + +#: ../../whatsnew/3.4.rst:599 +msgid "" +"New class :class:`~abc.ABC` has :class:`~abc.ABCMeta` as its meta class. " +"Using ``ABC`` as a base class has essentially the same effect as specifying " +"``metaclass=abc.ABCMeta``, but is simpler to type and easier to read. " +"(Contributed by Bruno Dupuis in :issue:`16049`.)" +msgstr "" +"新增的类型 :class:`~abc.ABC` 以 :class:`~abc.ABCMeta` 作为其元类。 使用 ``ABC`` " +"作为基类的效果实际上相当于指定 ``metaclass=abc.ABCMeta``,但其写法更简单也更易读。 (由 Bruno Dupuis 在 " +":issue:`16049` 中贡献。)" + +#: ../../whatsnew/3.4.rst:606 +msgid "aifc" +msgstr "aifc" + +#: ../../whatsnew/3.4.rst:608 +msgid "" +"The :meth:`~aifc.aifc.getparams` method now returns a namedtuple rather than" +" a plain tuple. (Contributed by Claudiu Popa in :issue:`17818`.)" +msgstr "" +"现在 :meth:`~aifc.aifc.getparams` 将返回一个具名元组而不是普通元组。 (由 Claudiu Popa 在 " +":issue:`17818` 中贡献。)" + +#: ../../whatsnew/3.4.rst:611 +msgid "" +":func:`aifc.open` now supports the context management protocol: when used in" +" a :keyword:`with` block, the :meth:`~aifc.aifc.close` method of the " +"returned object will be called automatically at the end of the block. " +"(Contributed by Serhiy Storchacha in :issue:`16486`.)" +msgstr "" +"现在 :func:`aifc.open` 已支持上下文管理协议:当在 :keyword:`with` 代码块中使用时,所返回对象的 " +":meth:`~aifc.aifc.close` 方法将在代码块结束时被自动调用。 (由 Serhiy Storchacha 在 " +":issue:`16486` 中贡献。)" + +#: ../../whatsnew/3.4.rst:616 +msgid "" +"The :meth:`~aifc.aifc.writeframesraw` and :meth:`~aifc.aifc.writeframes` " +"methods now accept any :term:`bytes-like object`. (Contributed by Serhiy " +"Storchaka in :issue:`8311`.)" +msgstr "" +"现在 :meth:`~aifc.aifc.writeframesraw` 和 :meth:`~aifc.aifc.writeframes` " +"方法将接受任意 :term:`bytes-like object`。 (由 Serhiy Storchaka 在 :issue:`8311` 中贡献。)" + +#: ../../whatsnew/3.4.rst:622 +msgid "argparse" +msgstr "argparse" + +#: ../../whatsnew/3.4.rst:624 +msgid "" +"The :class:`~argparse.FileType` class now accepts *encoding* and *errors* " +"arguments, which are passed through to :func:`open`. (Contributed by Lucas " +"Maystre in :issue:`11175`.)" +msgstr "" +"现在 :class:`~argparse.FileType` 类可接受 *encoding* 和 *errors* 参数,它们将被传递给 " +":func:`open`。 (由 Lucas Maystre 在 :issue:`11175` 中贡献。)" + +#: ../../whatsnew/3.4.rst:630 +msgid "audioop" +msgstr "audioop" + +#: ../../whatsnew/3.4.rst:632 +msgid "" +":mod:`audioop` now supports 24-bit samples. (Contributed by Serhiy " +"Storchaka in :issue:`12866`.)" +msgstr "" +"现在 :mod:`audioop` 可支持 24 位采样。 (由 Serhiy Storchaka 在 :issue:`12866` 中贡献。)" + +#: ../../whatsnew/3.4.rst:635 +msgid "" +"New :func:`~audioop.byteswap` function converts big-endian samples to " +"little-endian and vice versa. (Contributed by Serhiy Storchaka in " +":issue:`19641`.)" +msgstr "" +"新增的 :func:`~audioop.byteswap` 函数可将大端序样本转换为小端序,并可反向转换。 (由 Serhiy Storchaka 在 " +":issue:`19641` 中贡献。)" + +#: ../../whatsnew/3.4.rst:639 +msgid "" +"All :mod:`audioop` functions now accept any :term:`bytes-like object`. " +"Strings are not accepted: they didn't work before, now they raise an error " +"right away. (Contributed by Serhiy Storchaka in :issue:`16685`.)" +msgstr "" +"所有 :mod:`audioop` 函数现在均接受任意 :term:`bytes-like object`。 " +"字符串将不被接受:它们在之前也不可用,现在它们将立即引发错误。 (由 Serhiy Storchaka 在 :issue:`16685` 中贡献。)" + +#: ../../whatsnew/3.4.rst:645 +msgid "base64" +msgstr "base64" + +#: ../../whatsnew/3.4.rst:647 +msgid "" +"The encoding and decoding functions in :mod:`base64` now accept any " +":term:`bytes-like object` in cases where it previously required a " +":class:`bytes` or :class:`bytearray` instance. (Contributed by Nick Coghlan" +" in :issue:`17839`.)" +msgstr "" +"现在 :mod:`base64` 中的编码和解码函数在之前需要 :class:`bytes` 或 :class:`bytearray` " +"实例的场合下均接受任意 :term:`bytes-like object`。 (由 Nick Coghlan 在 :issue:`17839` " +"中贡献。)" + +#: ../../whatsnew/3.4.rst:652 +msgid "" +"New functions :func:`~base64.a85encode`, :func:`~base64.a85decode`, " +":func:`~base64.b85encode`, and :func:`~base64.b85decode` provide the ability" +" to encode and decode binary data from and to ``Ascii85`` and the " +"git/mercurial ``Base85`` formats, respectively. The ``a85`` functions have " +"options that can be used to make them compatible with the variants of the " +"``Ascii85`` encoding, including the Adobe variant. (Contributed by Martin " +"Morrison, the Mercurial project, Serhiy Storchaka, and Antoine Pitrou in " +":issue:`17618`.)" +msgstr "" +"新增的函数 :func:`~base64.a85encode`, :func:`~base64.a85decode`, " +":func:`~base64.b85encode` 以及 :func:`~base64.b85decode` 分别提供针对 ``Ascii85`` 以及" +" git/mercurial ``Base85`` 格式的二进制数据进行编码和解码的能力。 ``a85`` 函数具有可被用于使其与 " +"``Ascii85`` 编码格式的变种,包括 Adobe 变种相互兼容的选项。 (由 Martin Morrison, Mercurial 项目, " +"Serhiy Storchaka 和 Antoine Pitrou 在 :issue:`17618` 中贡献。)" + +#: ../../whatsnew/3.4.rst:662 +msgid "collections" +msgstr "collections" + +#: ../../whatsnew/3.4.rst:664 +msgid "" +"The :meth:`.ChainMap.new_child` method now accepts an *m* argument " +"specifying the child map to add to the chain. This allows an existing " +"mapping and/or a custom mapping type to be used for the child. (Contributed" +" by Vinay Sajip in :issue:`16613`.)" +msgstr "" +"现在 :meth:`.ChainMap.new_child` 方法接受一个 *m* 参数用于指定要向链结构中添加的子映射表。 " +"这允许将现有的映射和/或自定义映射类型用于子映射表。 (由 Vinay Sajip 在 :issue:`16613` 中贡献。)" + +#: ../../whatsnew/3.4.rst:671 +msgid "colorsys" +msgstr "colorsys" + +#: ../../whatsnew/3.4.rst:673 +msgid "" +"The number of digits in the coefficients for the RGB --- YIQ conversions " +"have been expanded so that they match the FCC NTSC versions. The change in " +"results should be less than 1% and may better match results found elsewhere." +" (Contributed by Brian Landers and Serhiy Storchaka in :issue:`14323`.)" +msgstr "" +"用于 RGB --- YIQ 转换系数的数码位数已被扩展以使其与 FCC NTSC 版本匹配。 结果中的变化应当少于 1% " +"并可与在其他地方找到的结果更好地匹配。 (由 Brian Landers 和 Serhiy Storchaka 在 :issue:`14323` " +"中贡献。)" + +#: ../../whatsnew/3.4.rst:680 +msgid "contextlib" +msgstr "contextlib" + +#: ../../whatsnew/3.4.rst:682 +msgid "" +"The new :class:`contextlib.suppress` context manager helps to clarify the " +"intent of code that deliberately suppresses exceptions from a single " +"statement. (Contributed by Raymond Hettinger in :issue:`15806` and Zero " +"Piraeus in :issue:`19266`.)" +msgstr "" +"新增的 :class:`contextlib.suppress` 上下文管理器可以帮助澄清故意抑制来自单条语句的异常的代码的意图。 (由 Raymond" +" Hettinger 在 :issue:`15806` 和 Zero Piraeus 在 :issue:`19266` 中贡献。)" + +#: ../../whatsnew/3.4.rst:687 +msgid "" +"The new :func:`contextlib.redirect_stdout` context manager makes it easier " +"for utility scripts to handle inflexible APIs that write their output to " +":data:`sys.stdout` and don't provide any options to redirect it. Using the " +"context manager, the :data:`sys.stdout` output can be redirected to any " +"other stream or, in conjunction with :class:`io.StringIO`, to a string. The " +"latter can be especially useful, for example, to capture output from a " +"function that was written to implement a command line interface. It is " +"recommended only for utility scripts because it affects the global state of " +":data:`sys.stdout`. (Contributed by Raymond Hettinger in :issue:`15805`.)" +msgstr "" +"新增的 :func:`contextlib.redirect_stdout` 上下文管理器使得工具脚本能更容易地处理将输出写入 " +":data:`sys.stdout` 并且不提供任何重定向选项的不灵活 API。 使用该上下文管理器,可以将 :data:`sys.stdout` " +"的输出重定向到任何其他流,或者配合使用 :class:`io.StringIO` 来重定向到字符串。 后一种方式有时会特别有用,例如写入函数的输出来实现" +" 命令行接口。 由于它会影响 :data:`sys.stdout` 的全局状态因此只推荐用于工具脚本。 (由 Raymond Hettinger 在 " +":issue:`15805` 中贡献。)" + +#: ../../whatsnew/3.4.rst:698 +msgid "" +"The :mod:`contextlib` documentation has also been updated to include a " +":ref:`discussion ` of the differences" +" between single use, reusable and reentrant context managers." +msgstr "" +":mod:`contextlib` 文档也已获得更新以包括有关仅单用、可重用与可重入上下文管理器之间的区别的 :ref:`讨论 `。" + +#: ../../whatsnew/3.4.rst:704 +msgid "dbm" +msgstr "dbm" + +#: ../../whatsnew/3.4.rst:706 +msgid "" +":func:`dbm.open` objects now support the context management protocol. When " +"used in a :keyword:`with` statement, the ``close`` method of the database " +"object will be called automatically at the end of the block. (Contributed " +"by Claudiu Popa and Nick Coghlan in :issue:`19282`.)" +msgstr "" +"现在 :func:`dbm.open` 对象已支持上下文管理器协议。 当在 :keyword:`with` 语句中使用时,数据库对象的 " +"``close`` 方法将在代码块结束时被自动调用。 (由 Claudiu Popa 和 Nick Coghlan 在 :issue:`19282` " +"中贡献。)" + +#: ../../whatsnew/3.4.rst:713 +msgid "dis" +msgstr "dis" + +#: ../../whatsnew/3.4.rst:715 +msgid "" +"Functions :func:`~dis.show_code`, :func:`~dis.dis`, :func:`~dis.distb`, and " +":func:`~dis.disassemble` now accept a keyword-only *file* argument that " +"controls where they write their output." +msgstr "" +"现在 :func:`~dis.show_code`, :func:`~dis.dis`, :func:`~dis.distb` 和 " +":func:`~dis.disassemble` 等函数可接受仅限关键字参数 *file* 来控制其输出的写入目标。" + +#: ../../whatsnew/3.4.rst:719 +msgid "" +"The :mod:`dis` module is now built around an :class:`~dis.Instruction` class" +" that provides object oriented access to the details of each individual " +"bytecode operation." +msgstr "" +"现在 :mod:`dis` 模块是围绕 :class:`~dis.Instruction` " +"类来构建的,该类以面向对象的访问方式提供对于每个单独字节码操作的细节。" + +#: ../../whatsnew/3.4.rst:723 +msgid "" +"A new method, :func:`~dis.get_instructions`, provides an iterator that emits" +" the Instruction stream for a given piece of Python code. Thus it is now " +"possible to write a program that inspects and manipulates a bytecode object " +"in ways different from those provided by the :mod:`~dis` module itself. For" +" example::" +msgstr "" +"新增的方法 :func:`~dis.get_instructions` 提供了一个为给定 Python 代码段产生 Instruction 流的迭代器。" +" 这使得现在可以编写以不同于由 :mod:`~dis` 模块本身所提供的方式检查和操纵字节码对象的程序。 例如::" + +#: ../../whatsnew/3.4.rst:737 +msgid "" +"The various display tools in the :mod:`dis` module have been rewritten to " +"use these new components." +msgstr ":mod:`dis` 模块中的各种显示工具已被重新编写以使用这些新组件。" + +#: ../../whatsnew/3.4.rst:740 +msgid "" +"In addition, a new application-friendly class :class:`~dis.Bytecode` " +"provides an object-oriented API for inspecting bytecode in both in human-" +"readable form and for iterating over instructions. The " +":class:`~dis.Bytecode` constructor takes the same arguments that " +":func:`~dis.get_instruction` does (plus an optional *current_offset*), and " +"the resulting object can be iterated to produce :class:`~dis.Instruction` " +"objects. But it also has a :mod:`~dis.Bytecode.dis` method, equivalent to " +"calling :mod:`~dis.dis` on the constructor argument, but returned as a " +"multi-line string::" +msgstr "" +"此外,新增的对应用程序友好的类 :class:`~dis.Bytecode` 提供了一个面向对象的 API " +"用于以人类可读的形式检查字节码并对指令进行迭代。 :class:`~dis.Bytecode` 构造器接受与 " +":func:`~dis.get_instruction` 相同的参数(外加一个可选的 *current_offset* 参数),其结果对象可被迭代以产生" +" :class:`~dis.Instruction` 对象。 但它还有一个 :mod:`~dis.Bytecode.dis` " +"方法,相当于在构造器参数上调用 :mod:`~dis.dis`,但是返回一个多行字符串::" + +#: ../../whatsnew/3.4.rst:762 +msgid "" +":class:`~dis.Bytecode` also has a class method, " +":meth:`~dis.Bytecode.from_traceback`, that provides the ability to " +"manipulate a traceback (that is, " +"``print(Bytecode.from_traceback(tb).dis())`` is equivalent to " +"``distb(tb)``)." +msgstr "" +":class:`~dis.Bytecode` 还有一个类方法 " +":meth:`~dis.Bytecode.from_traceback`,它提供了操纵回溯对象的能力(也就是说,``print(Bytecode.from_traceback(tb).dis())``" +" 等价于 ``distb(tb)``。)" + +#: ../../whatsnew/3.4.rst:767 +msgid "" +"(Contributed by Nick Coghlan, Ryan Kelly and Thomas Kluyver in " +":issue:`11816` and Claudiu Popa in :issue:`17916`.)" +msgstr "" +"(由 Nick Coghlan, Ryan Kelly 和 Thomas Kluyver 在 :issue:`11816` 并由 Claudiu " +"Popa 在 :issue:`17916` 中贡献。)" + +#: ../../whatsnew/3.4.rst:770 +msgid "" +"New function :func:`~dis.stack_effect` computes the effect on the Python " +"stack of a given opcode and argument, information that is not otherwise " +"available. (Contributed by Larry Hastings in :issue:`19722`.)" +msgstr "" +"新增的函数 :func:`~dis.stack_effect` 可在给定操作码和参数的 Python 栈上计算其效果,相关信息是无法以其他方式获得的。 " +"(由 Larry Hastings 在 :issue:`19722` 中贡献。)" + +#: ../../whatsnew/3.4.rst:776 +msgid "doctest" +msgstr "doctest" + +#: ../../whatsnew/3.4.rst:778 +msgid "" +"A new :ref:`option flag `, :data:`~doctest.FAIL_FAST`, " +"halts test running as soon as the first failure is detected. (Contributed " +"by R. David Murray and Daniel Urban in :issue:`16522`.)" +msgstr "" + +#: ../../whatsnew/3.4.rst:782 +msgid "" +"The :mod:`doctest` command line interface now uses :mod:`argparse`, and has " +"two new options, ``-o`` and ``-f``. ``-o`` allows :ref:`doctest options " +"` to be specified on the command line, and ``-f`` is a " +"shorthand for ``-o FAIL_FAST`` (to parallel the similar option supported by " +"the :mod:`unittest` CLI). (Contributed by R. David Murray in " +":issue:`11390`.)" +msgstr "" +"现在 :mod:`doctest` 的命令行接口使用 :mod:`argparse`,并新增了两个选项 ``-o`` 和 ``-f``。 ``-o`` " +"允许在命令行中指定 :ref:`doctest 选项 `,而 ``-f`` 是 ``-o FAIL_FAST`` " +"的简写形式(与 :mod:`unittest` CLI 所支持的类似选项相对应)。 (由 R. David Murray 在 " +":issue:`11390` 中贡献。)" + +#: ../../whatsnew/3.4.rst:788 +msgid "" +":mod:`doctest` will now find doctests in extension module ``__doc__`` " +"strings. (Contributed by Zachary Ware in :issue:`3158`.)" +msgstr "" +"现在 :mod:`doctest` 会在扩展模块的 ``__doc__`` 字符串中查找文档测试。 (由 Zachary Ware 在 " +":issue:`3158` 中贡献。)" + +#: ../../whatsnew/3.4.rst:793 +msgid "email" +msgstr "email" + +#: ../../whatsnew/3.4.rst:795 +msgid "" +":meth:`~email.message.Message.as_string` now accepts a *policy* argument to " +"override the default policy of the message when generating a string " +"representation of it. This means that ``as_string`` can now be used in more" +" circumstances, instead of having to create and use a " +":mod:`~email.generator` in order to pass formatting parameters to its " +"``flatten`` method. (Contributed by R. David Murray in :issue:`18600`.)" +msgstr "" +"现在 :meth:`~email.message.Message.as_string` 接受一个 *policy* " +"参数用于在生成其字符串表示形式时重写默认的消息策略。 这意味着 ``as_string`` 现在可以在更多情况下被使用,而不必创建和使用 " +":mod:`~email.generator` 来将已格式化的形参传递给其 ``flatten`` 方法。 (由 R. David Murray 在 " +":issue:`18600` 中贡献。)" + +#: ../../whatsnew/3.4.rst:802 +msgid "" +"New method :meth:`~email.message.Message.as_bytes` added to produce a bytes " +"representation of the message in a fashion similar to how ``as_string`` " +"produces a string representation. It does not accept the *maxheaderlen* " +"argument, but does accept the *unixfrom* and *policy* arguments. The " +":class:`~email.message.Message` :meth:`~email.message.Message.__bytes__` " +"method calls it, meaning that ``bytes(mymsg)`` will now produce the " +"intuitive result: a bytes object containing the fully formatted message. " +"(Contributed by R. David Murray in :issue:`18600`.)" +msgstr "" +"新增方法 :meth:`~email.message.Message.as_bytes` 用于产生消息的与 ``as_string`` " +"所产生的字符串表示形式类似的字节串表示形式。 它不接受 *maxheaderlen* 参数,但接受 *unixfrom* 和 *policy* 参数。 " +":class:`~email.message.Message` 的 :meth:`~email.message.Message.__bytes__` " +"方法将调用它,这意味着现在 ``bytes(mymsg)`` 将产生直观的结果:一个包含完整已格式化消息的字节串对象。 (由 R. David " +"Murray 在 :issue:`18600` 中贡献。)" + +#: ../../whatsnew/3.4.rst:811 +msgid "" +"The :meth:`.Message.set_param` message now accepts a *replace* keyword " +"argument. When specified, the associated header will be updated without " +"changing its location in the list of headers. For backward compatibility, " +"the default is ``False``. (Contributed by R. David Murray in " +":issue:`18891`.)" +msgstr "" +"现在 :meth:`.Message.set_param` 消息接受一个 *replace* 关键字参数。 " +"当指定该参数时,关联的标头将被更新而不会修改其在标头列表中的位置。 为了保持向下兼容,该参数默认值为 ``False``。 (由 R. David " +"Murray 在 :issue:`18891` 中贡献。)" + +#: ../../whatsnew/3.4.rst:819 +msgid "" +"A pair of new subclasses of :class:`~email.message.Message` have been added " +"(:class:`.EmailMessage` and :class:`.MIMEPart`), along with a new sub-" +"module, :mod:`~email.contentmanager` and a new :mod:`~email.policy` " +"attribute :attr:`~email.policy.EmailPolicy.content_manager`. All " +"documentation is currently in the new module, which is being added as part " +"of email's new :term:`provisional API`. These classes provide a number of " +"new methods that make extracting content from and inserting content into " +"email messages much easier. For details, see the " +":mod:`~email.contentmanager` documentation and the :ref:`email-examples`. " +"These API additions complete the bulk of the work that was planned as part " +"of the email6 project. The currently provisional API is scheduled to become" +" final in Python 3.5 (possibly with a few minor additions in the area of " +"error handling). (Contributed by R. David Murray in :issue:`18891`.)" +msgstr "" +"新增了一对 :class:`~email.message.Message` 的子类 (:class:`.EmailMessage` 和 " +":class:`.MIMEPart`),以及新的子模块 :mod:`~email.contentmanager` 和新的 " +":mod:`~email.policy` 属性 :attr:`~email.policy.EmailPolicy.content_manager`。 " +"所有文档目前都在新模块中,它是作为 email 的新 :term:`provisional API` 的一部分添加的。 " +"这些类提供了多个使从内容提取邮件消息和插入内容到消息更容易的新方法。 相关细节,请参阅 :mod:`~email.contentmanager` 文档和" +" :ref:`email-examples`。 这些 API 的加入完成了作为 email6 项目计划组成部分的大部分工作。 目前的暂定 API 计划在" +" Python 3.5 最终确定 (可能在错误处理方面再增加少量内容)。 (由 R. David Murray 在 :issue:`18891` " +"中贡献。)" + +#: ../../whatsnew/3.4.rst:835 +msgid "filecmp" +msgstr "filecmp" + +#: ../../whatsnew/3.4.rst:837 +msgid "" +"A new :func:`~filecmp.clear_cache` function provides the ability to clear " +"the :mod:`filecmp` comparison cache, which uses :func:`os.stat` information " +"to determine if the file has changed since the last compare. This can be " +"used, for example, if the file might have been changed and re-checked in " +"less time than the resolution of a particular filesystem's file modification" +" time field. (Contributed by Mark Levitt in :issue:`18149`.)" +msgstr "" +"新增的 :func:`~filecmp.clear_cache` 函数提供了清除 :mod:`filecmp` 比较缓存的功能,它使用 " +":func:`os.stat` 信息来确定文件自上次比较后是否发生了更改。 " +"例如,如果文件被修改和重新检查的时间短于特定文件系统文件修改时间的精度就可使用这一功能。 (由 Mark Levitt 在 :issue:`18149`" +" 中贡献。)" + +#: ../../whatsnew/3.4.rst:844 +msgid "" +"New module attribute :data:`~filecmp.DEFAULT_IGNORES` provides the list of " +"directories that are used as the default value for the *ignore* parameter of" +" the :func:`~filecmp.dircmp` function. (Contributed by Eli Bendersky in " +":issue:`15442`.)" +msgstr "" + +#: ../../whatsnew/3.4.rst:851 +msgid "functools" +msgstr "functools" + +#: ../../whatsnew/3.4.rst:853 +msgid "" +"The new :func:`~functools.partialmethod` descriptor brings partial argument " +"application to descriptors, just as :func:`~functools.partial` provides for " +"normal callables. The new descriptor also makes it easier to get arbitrary " +"callables (including :func:`~functools.partial` instances) to behave like " +"normal instance methods when included in a class definition. (Contributed by" +" Alon Horev and Nick Coghlan in :issue:`4331`.)" +msgstr "" +"新增的 :func:`~functools.partialmethod` 描述器提供了对描述器的部分参数应用,就像 " +":func:`~functools.partial` 为普通可调用对象提供的一样。 新的描述器还可以让任意可调用对象 (包括 " +":func:`~functools.partial` 实例)在包括在类定义中时表现得像普通的实例方法一样。 (由 Alon Horev 和 Nick " +"Coghlan 在 :issue:`4331` 中贡献。)" + +#: ../../whatsnew/3.4.rst:862 +msgid "" +"The new :func:`~functools.singledispatch` decorator brings support for " +"single-dispatch generic functions to the Python standard library. Where " +"object oriented programming focuses on grouping multiple operations on a " +"common set of data into a class, a generic function focuses on grouping " +"multiple implementations of an operation that allows it to work with " +"*different* kinds of data." +msgstr "" +"新增的 :func:`~functools.singledispatch` 装饰器为 Python 标准库带来了对单分派泛型函数的支持。 " +"面向对象编程侧重于将对一组共同数据的多种操作组合到一个类中,而泛型函数则侧重于将一种操作的多个实现组合在一起使其能够处理 *不同* 种类的数据。" + +#: ../../whatsnew/3.4.rst:871 +msgid ":pep:`443` -- Single-dispatch generic functions" +msgstr ":pep:`443` -- 单分派泛型函数" + +#: ../../whatsnew/3.4.rst:872 +msgid "PEP written and implemented by Łukasz Langa." +msgstr "PEP 由 Łukasz Langa 撰写并实现。" + +#: ../../whatsnew/3.4.rst:874 +msgid "" +":func:`~functools.total_ordering` now supports a return value of " +":const:`NotImplemented` from the underlying comparison function. " +"(Contributed by Katie Miller in :issue:`10042`.)" +msgstr "" + +#: ../../whatsnew/3.4.rst:878 +msgid "" +"A pure-python version of the :func:`~functools.partial` function is now in " +"the stdlib; in CPython it is overridden by the C accelerated version, but it" +" is available for other implementations to use. (Contributed by Brian " +"Thorne in :issue:`12428`.)" +msgstr "" +"现在标准库中增加了 :func:`~functools.partial` 函数的纯 Python 版本;在 CPython 中它会被 C " +"加速版本覆盖,但它以供其他实现来使用。 (由 Brian Thorne 在 :issue:`12428` 中贡献。)" + +#: ../../whatsnew/3.4.rst:885 +msgid "gc" +msgstr "gc" + +#: ../../whatsnew/3.4.rst:887 +msgid "" +"New function :func:`~gc.get_stats` returns a list of three per-generation " +"dictionaries containing the collections statistics since interpreter " +"startup. (Contributed by Antoine Pitrou in :issue:`16351`.)" +msgstr "" +"新增的函数 :func:`~gc.get_stats` 可返回由三个单独生成字典组成的列表,每个字典均包含自解释器启动以来收集的统计信息。 (由 " +"Antoine Pitrou 在 :issue:`16351` 中贡献。)" + +#: ../../whatsnew/3.4.rst:893 +msgid "glob" +msgstr "glob" + +#: ../../whatsnew/3.4.rst:895 +msgid "" +"A new function :func:`~glob.escape` provides a way to escape special " +"characters in a filename so that they do not become part of the globbing " +"expansion but are instead matched literally. (Contributed by Serhiy " +"Storchaka in :issue:`8402`.)" +msgstr "" +"新增函数 :func:`~glob.escape` 提供了为文件名中的特殊字符进行转义的方式以使它们不会成为 glob " +"扩展的组成部分而是按字面值来匹配。 (由 Serhiy Storchaka 在 :issue:`8402` 中贡献。)" + +#: ../../whatsnew/3.4.rst:901 +msgid "hashlib" +msgstr "hashlib" + +#: ../../whatsnew/3.4.rst:903 +msgid "" +"A new :func:`hashlib.pbkdf2_hmac` function provides the `PKCS#5 password-" +"based key derivation function 2 `_. " +"(Contributed by Christian Heimes in :issue:`18582`.)" +msgstr "" +"新增的 :func:`hashlib.pbkdf2_hmac` 函数提供了 `PKCS#5 基于口令的密钥派生函数 2 " +"`_。 (由 Christian Heimes 在 " +":issue:`18582` 中贡献。)" + +#: ../../whatsnew/3.4.rst:908 +msgid "" +"The :attr:`~hashlib.hash.name` attribute of :mod:`hashlib` hash objects is " +"now a formally supported interface. It has always existed in CPython's " +":mod:`hashlib` (although it did not return lower case names for all " +"supported hashes), but it was not a public interface and so some other " +"Python implementations have not previously supported it. (Contributed by " +"Jason R. Coombs in :issue:`18532`.)" +msgstr "" +"现在 :mod:`hashlib` 哈希对象的 :attr:`~hashlib.hash.name` 属性已成为受正式支持的接口。 它一直存在于 " +"CPython 的 :mod:`hashlib` 中(尽管它没有返回所有受支持的哈希算法的小写名称),但它不是一个公开的接口因此其他一些 Python " +"实现以前并不支持它。 (由 Jason R. Coombs 在 :issue:`18532` 中提供。)" + +#: ../../whatsnew/3.4.rst:917 +msgid "hmac" +msgstr "hmac" + +#: ../../whatsnew/3.4.rst:919 +msgid "" +":mod:`hmac` now accepts ``bytearray`` as well as ``bytes`` for the *key* " +"argument to the :func:`~hmac.new` function, and the *msg* parameter to both " +"the :func:`~hmac.new` function and the :meth:`~hmac.HMAC.update` method now " +"accepts any type supported by the :mod:`hashlib` module. (Contributed by " +"Jonas Borgström in :issue:`18240`.)" +msgstr "" +"现在 :mod:`hmac` 可接受 ``bytearray`` 和 ``bytes`` 作为传给 :func:`~hmac.new` 函数的 " +"*key* 参数,而传给 :func:`~hmac.new` 函数和 :meth:`~hmac.HMAC.update` 方法的 *msg* " +"形参现在可接受 :mod:`hashlib` 模块所支持的任何类型。 (由 Jonas Borgström 的 :issue:`18240` 中贡献。)" + +#: ../../whatsnew/3.4.rst:925 +msgid "" +"The *digestmod* argument to the :func:`hmac.new` function may now be any " +"hash digest name recognized by :mod:`hashlib`. In addition, the current " +"behavior in which the value of *digestmod* defaults to ``MD5`` is " +"deprecated: in a future version of Python there will be no default value. " +"(Contributed by Christian Heimes in :issue:`17276`.)" +msgstr "" +"传给 :func:`hmac.new` 函数的 *digestmod* 参数现在可以是 :mod:`hashlib` 能识别的任何哈希摘要名称。 " +"此外,当前将 *digestmod* 默认值设为 ``MD5`` 的行为已被弃用:在未来的 Python 版本中将没有默认值。 (由 Christian" +" Heimes 在 :issue:`17276` 中贡献。)" + +#: ../../whatsnew/3.4.rst:931 +msgid "" +"With the addition of :attr:`~hmac.HMAC.block_size` and " +":attr:`~hmac.HMAC.name` attributes (and the formal documentation of the " +":attr:`~hmac.HMAC.digest_size` attribute), the :mod:`hmac` module now " +"conforms fully to the :pep:`247` API. (Contributed by Christian Heimes in " +":issue:`18775`.)" +msgstr "" +"由于增加了 :attr:`~hmac.HMAC.block_size` 和 :attr:`~hmac.HMAC.name` 属性 (以及 " +":attr:`~hmac.HMAC.digest_size` 属性的正式文档),:mod:`hmac` 模块现在已完全符合 :pep:`247` " +"API。 (由 Christian Heimes 在 :issue:`18775` 中贡献。)" + +#: ../../whatsnew/3.4.rst:938 +msgid "html" +msgstr "html" + +#: ../../whatsnew/3.4.rst:940 +msgid "" +"New function :func:`~html.unescape` function converts HTML5 character " +"references to the corresponding Unicode characters. (Contributed by Ezio " +"Melotti in :issue:`2927`.)" +msgstr "" +"新增的函数 :func:`~html.unescape` 用于将 HTML5 字符引用转换为相应的 Unicode 字符。 (由 Ezio " +"Melotti 在 :issue:`2927` 中贡献。).)" + +#: ../../whatsnew/3.4.rst:944 +msgid "" +":class:`~html.parser.HTMLParser` accepts a new keyword argument " +"*convert_charrefs* that, when ``True``, automatically converts all character" +" references. For backward-compatibility, its value defaults to ``False``, " +"but it will change to ``True`` in a future version of Python, so you are " +"invited to set it explicitly and update your code to use this new feature. " +"(Contributed by Ezio Melotti in :issue:`13633`.)" +msgstr "" +":class:`~html.parser.HTMLParser` 接受新的关键字参数 *convert_charrefs*,当其为 ``True`` " +"时,会自动转换所有字符引用。 为了保持向下兼容,其值默认为 ``False``,但在未来的 Python 版本中将改为 " +"``True``,因此建议你显式地设置它并更新代码以使用这个新特性。 (由 Ezio Melotti 在 :issue:`13633` 中贡献。)" + +#: ../../whatsnew/3.4.rst:951 +msgid "" +"The *strict* argument of :class:`~html.parser.HTMLParser` is now deprecated." +" (Contributed by Ezio Melotti in :issue:`15114`.)" +msgstr "" +"现在 :class:`~html.parser.HTMLParser` 的 *strict* 参数已被弃用。 (由 Ezio Melotti 在 " +":issue:`15114` 中贡献。)" + +#: ../../whatsnew/3.4.rst:956 +msgid "http" +msgstr "http" + +#: ../../whatsnew/3.4.rst:958 +msgid "" +":meth:`~http.server.BaseHTTPRequestHandler.send_error` now accepts an " +"optional additional *explain* parameter which can be used to provide an " +"extended error description, overriding the hardcoded default if there is " +"one. This extended error description will be formatted using the " +":attr:`~http.server.HTTP.error_message_format` attribute and sent as the " +"body of the error response. (Contributed by Karl Cow in :issue:`12921`.)" +msgstr "" +"现在 :meth:`~http.server.BaseHTTPRequestHandler.send_error` 接受可选的附加形参 " +"*explain* 用于提供扩展的错误描述,覆盖可能存在的硬编码的默认值。 这个扩展的描述将使用 " +":attr:`~http.server.HTTP.error_message_format` 进行格式化并作为错误响应体发送。 (由 Karl Cow " +"在 :issue:`12921` 中贡献。)" + +#: ../../whatsnew/3.4.rst:965 +msgid "" +"The :mod:`http.server` :ref:`command line interface ` now " +"has a ``-b/--bind`` option that causes the server to listen on a specific " +"address. (Contributed by Malte Swart in :issue:`17764`.)" +msgstr "" +"现在 :mod:`http.server` :ref:`命令行界面 ` 增加了一个 ``-b/--bind`` " +"选项用于让服务器在指定的地址上进行监听。 (由 Malte Swart 在 :issue:`17764` 中贡献。)" + +#: ../../whatsnew/3.4.rst:971 +msgid "idlelib and IDLE" +msgstr "idlelib 与 IDLE" + +#: ../../whatsnew/3.4.rst:973 +msgid "" +"Since idlelib implements the IDLE shell and editor and is not intended for " +"import by other programs, it gets improvements with every release. See " +":file:`Lib/idlelib/NEWS.txt` for a cumulative list of changes since 3.3.0, " +"as well as changes made in future 3.4.x releases. This file is also " +"available from the IDLE :menuselection:`Help --> About IDLE` dialog." +msgstr "" +"由于 idlelib 实现了 IDLE 命令行界面和编辑器且不应被其他程序导入,它将随每个发布版获得改进。 请参阅 " +":file:`Lib/idlelib/NEWS.txt` 查看 3.3.0 以来的累积变化列表,以及未来 3.4.x 发布版即将发生的变化。 " +"此文件也可通过 IDLE :menuselection:`Help --> About IDLE` 对话框来查看。" + +#: ../../whatsnew/3.4.rst:981 +msgid "importlib" +msgstr "importlib" + +#: ../../whatsnew/3.4.rst:983 +msgid "" +"The :class:`~importlib.abc.InspectLoader` ABC defines a new method, " +":meth:`~importlib.abc.InspectLoader.source_to_code` that accepts source data" +" and a path and returns a code object. The default implementation is " +"equivalent to ``compile(data, path, 'exec', dont_inherit=True)``. " +"(Contributed by Eric Snow and Brett Cannon in :issue:`15627`.)" +msgstr "" +":class:`~importlib.abc.InspectLoader` ABC 定义了一个新方法 " +":meth:`~importlib.abc.InspectLoader.source_to_code`,它接受源数据和一个路径并返回一个代码对象。 " +"其默认实现等价于 ``compile(data, path, 'exec', dont_inherit=True)``。 (由 Eric Snow 和 " +"Brett Cannon 在 :issue:`15627` 中贡献。)" + +#: ../../whatsnew/3.4.rst:989 +msgid "" +":class:`~importlib.abc.InspectLoader` also now has a default implementation " +"for the :meth:`~importlib.abc.InspectLoader.get_code` method. However, it " +"will normally be desirable to override the default implementation for " +"performance reasons. (Contributed by Brett Cannon in :issue:`18072`.)" +msgstr "" +"现在 :class:`~importlib.abc.InspectLoader` 也具有 " +":meth:`~importlib.abc.InspectLoader.get_code` 方法的默认实现。 不过,出于性能原因通常需要重写默认实现。 " +"(由 Brett Cannon 在 :issue:`18072` 中贡献。)" + +#: ../../whatsnew/3.4.rst:994 +msgid "" +"The :func:`~importlib.reload` function has been moved from :mod:`imp` to " +":mod:`importlib` as part of the :mod:`imp` module deprecation. (Contributed" +" by Berker Peksag in :issue:`18193`.)" +msgstr "" + +#: ../../whatsnew/3.4.rst:998 +msgid "" +":mod:`importlib.util` now has a :data:`~importlib.util.MAGIC_NUMBER` " +"attribute providing access to the bytecode version number. This replaces " +"the :func:`~imp.get_magic` function in the deprecated :mod:`imp` module. " +"(Contributed by Brett Cannon in :issue:`18192`.)" +msgstr "" + +#: ../../whatsnew/3.4.rst:1003 +msgid "" +"New :mod:`importlib.util` functions " +":func:`~importlib.util.cache_from_source` and " +":func:`~importlib.util.source_from_cache` replace the same-named functions " +"in the deprecated :mod:`imp` module. (Contributed by Brett Cannon in " +":issue:`18194`.)" +msgstr "" + +#: ../../whatsnew/3.4.rst:1008 +msgid "" +"The :mod:`importlib` bootstrap :class:`.NamespaceLoader` now conforms to the" +" :class:`.InspectLoader` ABC, which means that ``runpy`` and ``python -m`` " +"can now be used with namespace packages. (Contributed by Brett Cannon in " +":issue:`18058`.)" +msgstr "" +"现在 :mod:`importlib` 将以符合 :class:`.InspectLoader` ABC 的方式初始设置 " +":class:`.NamespaceLoader`,这意味着 ``runpy `` 和``python -m`` 现在可以与命名空间包一起使用。 (由 " +"Brett Cannon 在 :issue:`18058` 中贡献。)" + +#: ../../whatsnew/3.4.rst:1013 +msgid "" +":mod:`importlib.util` has a new function " +":func:`~importlib.util.decode_source` that decodes source from bytes using " +"universal newline processing. This is useful for implementing " +":meth:`.InspectLoader.get_source` methods." +msgstr "" +":mod:`importlib.util` 中新增的函数 :func:`~importlib.util.decode_source` " +"可使用通用换行处理方式从字节数据中解码源代码。 这适用于实现 :meth:`.InspectLoader.get_source` 方法。" + +#: ../../whatsnew/3.4.rst:1017 +msgid "" +":class:`importlib.machinery.ExtensionFileLoader` now has a " +":meth:`~importlib.machinery.ExtensionFileLoader.get_filename` method. This " +"was inadvertently omitted in the original implementation. (Contributed by " +"Eric Snow in :issue:`19152`.)" +msgstr "" +"现在 :class:`importlib.machinery.ExtensionFileLoader` 增加了 " +":meth:`~importlib.machinery.ExtensionFileLoader.get_filename` 方法。 " +"此方法在最初的实现中意外缺失。 (由 Eric Snow 在 :issue:`19152` 中贡献。)" + +#: ../../whatsnew/3.4.rst:1024 +msgid "inspect" +msgstr "inspect" + +#: ../../whatsnew/3.4.rst:1026 +msgid "" +"The :mod:`inspect` module now offers a basic :ref:`command line interface " +"` to quickly display source code and other information " +"for modules, classes and functions. (Contributed by Claudiu Popa and Nick " +"Coghlan in :issue:`18626`.)" +msgstr "" +"现在 :mod:`inspect` 模块提供了一个基本的 :ref:`命令行界面 ` " +"用于快速显示模块、类和函数的源代码以及其他信息。 (由 Claudiu Popa 和 Nick Coghlan 在 :issue:`18626` " +"中贡献。)" + +#: ../../whatsnew/3.4.rst:1031 +msgid "" +":func:`~inspect.unwrap` makes it easy to unravel wrapper function chains " +"created by :func:`functools.wraps` (and any other API that sets the " +"``__wrapped__`` attribute on a wrapper function). (Contributed by Daniel " +"Urban, Aaron Iles and Nick Coghlan in :issue:`13266`.)" +msgstr "" +":func:`~inspect.unwrap` 用于方便地解开由 :func:`functools.wraps` (以及任何在包装器函数上设置 " +"``__wrapped__`` 属性的 API) 创建的包装器函数链。 (由 Daniel Urban, Aaron Iles 和 Nick " +"Coghlan 在 :issue:`13266` 中贡献。)" + +#: ../../whatsnew/3.4.rst:1036 +msgid "" +"As part of the implementation of the new :mod:`enum` module, the " +":mod:`inspect` module now has substantially better support for custom " +"``__dir__`` methods and dynamic class attributes provided through " +"metaclasses. (Contributed by Ethan Furman in :issue:`18929` and " +":issue:`19030`.)" +msgstr "" +"作为新的 :mod:`enum` 模块实现的一部分,现在 :mod:`inspect` 模块通过元类为自定义 ``__dir__`` " +"方法和动态类属性提供了更好的支持。 (由 Ethan Furman 在 :issue:`18929` 和 :issue:`19030` 中贡献。)" + +#: ../../whatsnew/3.4.rst:1042 +msgid "" +":func:`~inspect.getfullargspec` and :func:`~inspect.getargspec` now use the " +":func:`~inspect.signature` API. This allows them to support a much broader " +"range of callables, including those with ``__signature__`` attributes, those" +" with metadata provided by argument clinic, :func:`functools.partial` " +"objects and more. Note that, unlike :func:`~inspect.signature`, these " +"functions still ignore ``__wrapped__`` attributes, and report the already " +"bound first argument for bound methods, so it is still necessary to update " +"your code to use :func:`~inspect.signature` directly if those features are " +"desired. (Contributed by Yury Selivanov in :issue:`17481`.)" +msgstr "" +"现在 :func:`~inspect.getfullargspec` 和 :func:`~inspect.getargspec` 将使用 " +":func:`~inspect.signature` API。 这允许它们支持更多种类的可调用对象,包括具有 ``__signature__`` " +"属性的、具有通过 argument clinic 提供元数据的、:func:`functools.partial` 对象等等。 请注意,不同于 " +":func:`~inspect.signature`,这些函数仍然会忽略 ``__wrapped__`` " +"属性,并会报告绑定方法已绑定的第一个参数,所以如果想要这些特性的话你仍然需要更新你的代码以直接使用 " +":func:`~inspect.signature`。 (由 Yury Selivanov 在 :issue:`17481` 中贡献。)" + +#: ../../whatsnew/3.4.rst:1053 +msgid "" +":func:`~inspect.signature` now supports duck types of CPython functions, " +"which adds support for functions compiled with Cython. (Contributed by " +"Stefan Behnel and Yury Selivanov in :issue:`17159`.)" +msgstr "" +"现在 :func:`~inspect.signature` 支持 CPython 函数的鸭子类型,它增加了对使用 Cython 编译的函数的支持。 (由" +" Stefan Behnel 和 Yury Selivanov 在 :issue:`17159` 中贡献。)" + +#: ../../whatsnew/3.4.rst:1059 +msgid "ipaddress" +msgstr "ipaddress" + +#: ../../whatsnew/3.4.rst:1061 +msgid "" +":mod:`ipaddress` was added to the standard library in Python 3.3 as a " +":term:`provisional API`. With the release of Python 3.4, this qualification " +"has been removed: :mod:`ipaddress` is now considered a stable API, covered " +"by the normal standard library requirements to maintain backwards " +"compatibility." +msgstr "" +":mod:`ipaddress` 已在 Python 3.3 中作为 :term:`provisional API` 被添加到标准库。 随着 " +"Python 3.4 的发布,此限定已被移除:现在 :mod:`ipaddress` 属于稳定 API,由常规的标准库需求所覆盖以维护向下兼容性。" + +#: ../../whatsnew/3.4.rst:1067 +msgid "" +"A new :attr:`~ipaddress.IPv4Address.is_global` property is ``True`` if an " +"address is globally routeable. (Contributed by Peter Moody in " +":issue:`17400`.)" +msgstr "" +"如果一个地址是全局可路由的则新增的 :attr:`~ipaddress.IPv4Address.is_global` 属性将为 ``True``。 (由" +" Peter Moody 在 :issue:`17400` 中贡献。)" + +#: ../../whatsnew/3.4.rst:1073 +msgid "logging" +msgstr "logging" + +#: ../../whatsnew/3.4.rst:1075 +msgid "" +"The :class:`~logging.handlers.TimedRotatingFileHandler` has a new *atTime* " +"parameter that can be used to specify the time of day when rollover should " +"happen. (Contributed by Ronald Oussoren in :issue:`9556`.)" +msgstr "" +":class:`~logging.handlers.TimedRotatingFileHandler` 新增的 *atTime* " +"形参可被用于指定每日要执行日志文件轮转的时间。 (由 Ronald Oussoren 在 :issue:`9556` 中贡献。)" + +#: ../../whatsnew/3.4.rst:1079 +msgid "" +":class:`~logging.handlers.SocketHandler` and " +":class:`~logging.handlers.DatagramHandler` now support Unix domain sockets " +"(by setting *port* to ``None``). (Contributed by Vinay Sajip in commit " +"ce46195b56a9.)" +msgstr "" +"现在 :class:`~logging.handlers.SocketHandler` 和 " +":class:`~logging.handlers.DatagramHandler` 已支持 Unix 域套接字 (通过将 *port* 设为 " +"``None``)。 (由 Vinay Sajip 在 commit ce46195b56a9 中贡献。)" + +#: ../../whatsnew/3.4.rst:1084 +msgid "" +":func:`~logging.config.fileConfig` now accepts a " +":class:`configparser.RawConfigParser` subclass instance for the *fname* " +"parameter. This facilitates using a configuration file when logging " +"configuration is just a part of the overall application configuration, or " +"where the application modifies the configuration before passing it to " +":func:`~logging.config.fileConfig`. (Contributed by Vinay Sajip in " +":issue:`16110`.)" +msgstr "" +"现在 :func:`~logging.config.fileConfig` 接受一个 " +":class:`configparser.RawConfigParser` 子类实例作为 *fname* 形参。 " +"这有助于在日志配置只是整体应用程序配置的一部分,或者在将配置传递给 :func:`~logging.config.fileConfig` " +"之前对其进行了修改时使用配置文件。 (由 Vinay Sajip 在 :issue:`16110` 中贡献。)" + +#: ../../whatsnew/3.4.rst:1092 +msgid "" +"Logging configuration data received from a socket via the " +":func:`logging.config.listen` function can now be validated before being " +"processed by supplying a verification function as the argument to the new " +"*verify* keyword argument. (Contributed by Vinay Sajip in :issue:`15452`.)" +msgstr "" +"现在通过 :func:`logging.config.listen` 函数从套接字接收的日志配置数据可以在处理前以将验证函数作为参数提供给新的 " +"*verify* 关键字参数 的方式执行验证。 (由 Vinay Sajip 在 :issue:`15452` 中贡献。)" + +#: ../../whatsnew/3.4.rst:1101 +msgid "marshal" +msgstr "marshal" + +#: ../../whatsnew/3.4.rst:1103 +msgid "" +"The default :mod:`marshal` version has been bumped to 3. The code " +"implementing the new version restores the Python2 behavior of recording only" +" one copy of interned strings and preserving the interning on " +"deserialization, and extends this \"one copy\" ability to any object type " +"(including handling recursive references). This reduces both the size of " +"``.pyc`` files and the amount of memory a module occupies in memory when it " +"is loaded from a ``.pyc`` (or ``.pyo``) file. (Contributed by Kristján " +"Valur Jónsson in :issue:`16475`, with additional speedups by Antoine Pitrou " +"in :issue:`19219`.)" +msgstr "" +"默认的 :mod:`marshal` 版本已被提升至 3。 新版本的代码实现恢复了 Python2 " +"行为即只记录内联字符串的一份副本并在反序列化时保留内联状态,并将此“一份副本”功能扩展到任何对象类型(包括处理递归引用)。 这既减少了 ``.pyc``" +" 文件的大小也减少了模块从 ``.pyc`` (或``.pyo``) 文件加载时占用的内存量。 (由 Kristján Valur Jónsson 在 " +":issue:`16475` 中贡献,并由 Antoine Pitrou 在 :issue:`19219` 中提供进一步的加速。)" + +#: ../../whatsnew/3.4.rst:1114 +msgid "mmap" +msgstr "mmap" + +#: ../../whatsnew/3.4.rst:1116 +msgid "" +"mmap objects can now be :mod:`weakref`\\ ed. (Contributed by Valerie " +"Lambert in :issue:`4885`.)" +msgstr "" + +#: ../../whatsnew/3.4.rst:1121 +msgid "multiprocessing" +msgstr "multiprocessing" + +#: ../../whatsnew/3.4.rst:1125 +msgid "" +"On Unix two new :ref:`start methods `, " +"``spawn`` and ``forkserver``, have been added for starting processes using " +":mod:`multiprocessing`. These make the mixing of processes with threads " +"more robust, and the ``spawn`` method matches the semantics that " +"multiprocessing has always used on Windows. New function " +":func:`~multiprocessing.get_all_start_methods` reports all start methods " +"available on the platform, :func:`~multiprocessing.get_start_method` reports" +" the current start method, and :func:`~multiprocessing.set_start_method` " +"sets the start method. (Contributed by Richard Oudkerk in :issue:`8713`.)" +msgstr "" +"在 Unix 上新增了两个 :ref:`启动方法 ` ``spawn`` 和 " +"``forkserver`` 可使用 :mod:`multiprocessing` 来启动进程。 这两个方法使得进程和线程的混合更为健壮,并且 " +"``spawn`` 方法可以匹配 multiprocessing 在 Windows 上一直使用的语法。 新增的函数 " +":func:`~multiprocessing.get_all_start_methods` " +"可报告平台上可用的所有启动方法,:func:`~multiprocessing.get_start_method` 可报告当前的启动方法,而 " +":func:`~multiprocessing.set_start_method` 可设置启动方法。 (由 Richard Oudkerk 在 " +":issue:`8713` 中贡献。)" + +#: ../../whatsnew/3.4.rst:1135 +msgid "" +":mod:`multiprocessing` also now has the concept of a ``context``, which " +"determines how child processes are created. New function " +":func:`~multiprocessing.get_context` returns a context that uses a specified" +" start method. It has the same API as the :mod:`multiprocessing` module " +"itself, so you can use it to create :class:`~multiprocessing.pool.Pool`\\ s " +"and other objects that will operate within that context. This allows a " +"framework and an application or different parts of the same application to " +"use multiprocessing without interfering with each other. (Contributed by " +"Richard Oudkerk in :issue:`18999`.)" +msgstr "" +"现在 :mod:`multiprocessing` 还具有 ``上下文`` 的概念,它决定了子进程的创建方式。 新增的函数 " +":func:`~multiprocessing.get_context` 可返回一个使用指定启动方法的上下文。 它具有与 " +":mod:`multiprocessing` 模块本身一致的 API,因此你可以使用它来创建 " +":class:`~multiprocessing.pool.Pool` 和其他在上下文中执行操作的对象。 " +"这允许一个框架和某个应用程序或相同应用程序的不同部分使用多进程而不会彼此干扰。 (由 Richard Oudkerk 在 :issue:`18999` " +"中贡献。)" + +#: ../../whatsnew/3.4.rst:1145 +msgid "" +"Except when using the old *fork* start method, child processes no longer " +"inherit unneeded handles/file descriptors from their parents (part of " +":issue:`8713`)." +msgstr "除非是在使用旧的 *fork* 启动方法,子进程将不再从其父进程继承不需要的句柄/文件描述符 (:issue:`8713` 的一部分)。" + +#: ../../whatsnew/3.4.rst:1149 +msgid "" +":mod:`multiprocessing` now relies on :mod:`runpy` (which implements the " +"``-m`` switch) to initialise ``__main__`` appropriately in child processes " +"when using the ``spawn`` or ``forkserver`` start methods. This resolves some" +" edge cases where combining multiprocessing, the ``-m`` command line switch," +" and explicit relative imports could cause obscure failures in child " +"processes. (Contributed by Nick Coghlan in :issue:`19946`.)" +msgstr "" +"现在当使用 ``spawn`` 或 ``forkserver`` 启动方法时 :mod:`multiprocessing` 依赖于 " +":mod:`runpy` (它实现了 ``-m`` 开关) 在子进程中正确地初始化 ``__main__``。 " +"这解决了一些合并多进程操作中,``-m`` 命令行开关和显式相对导入可能在子进程中导致失败的边缘场景问题。 (由 Nick Coghlan 在 " +":issue:`19946` 中贡献。)" + +#: ../../whatsnew/3.4.rst:1158 +msgid "operator" +msgstr "operator" + +#: ../../whatsnew/3.4.rst:1160 +msgid "" +"New function :func:`~operator.length_hint` provides an implementation of the" +" specification for how the :meth:`~object.__length_hint__` special method " +"should be used, as part of the :pep:`424` formal specification of this " +"language feature. (Contributed by Armin Ronacher in :issue:`16148`.)" +msgstr "" +"新增的函数 :func:`~operator.length_hint` 提供了应当如何使用 " +":meth:`~object.__length_hint__` 特殊方法的规范实现,作为该语言特性的 :pep:`424` 正式规范说明的一部分。 (由" +" Armin Ronacher 在 :issue:`16148` 中贡献。)" + +#: ../../whatsnew/3.4.rst:1165 +msgid "" +"There is now a pure-python version of the :mod:`operator` module available " +"for reference and for use by alternate implementations of Python. " +"(Contributed by Zachary Ware in :issue:`16694`.)" +msgstr "" +"现在提供了一个纯 Python 版本的 :mod:`operator` 模块,可用于参考并由 Python 的其他实现使用。 (由 Zachary " +"Ware 在 :issue:`16694` 中贡献。)" + +#: ../../whatsnew/3.4.rst:1171 +msgid "os" +msgstr "os" + +#: ../../whatsnew/3.4.rst:1173 +msgid "" +"There are new functions to get and set the :ref:`inheritable flag " +"` of a file descriptor (:func:`os.get_inheritable`, " +":func:`os.set_inheritable`) or a Windows handle " +"(:func:`os.get_handle_inheritable`, :func:`os.set_handle_inheritable`)." +msgstr "" +"新增一些函数用于获取和设置文件描述符或 Windows 句柄的 :ref:`可继承旗标 ` " +"(:func:`os.get_inheritable`, :func:`os.set_inheritable`) 或 " +"(:func:`os.get_handle_inheritable`, :func:`os.set_handle_inheritable`)。" + +#: ../../whatsnew/3.4.rst:1178 +msgid "" +"New function :func:`~os.cpu_count` reports the number of CPUs available on " +"the platform on which Python is running (or ``None`` if the count can't be " +"determined). The :func:`multiprocessing.cpu_count` function is now " +"implemented in terms of this function). (Contributed by Trent Nelson, " +"Yogesh Chaudhari, Victor Stinner, and Charles-François Natali in " +":issue:`17914`.)" +msgstr "" +"新增函数 :func:`~os.cpu_count` 可报告 Python 运行所在平台上可用 CPU 的数量 (如果无法确定数量则为 " +"``None``)。 现在 :func:`multiprocessing.cpu_count` 函数是根据此函数实现的。 (由 Trent " +"Nelson, Yogesh Chaudhari, Victor Stinner 和 Charles-François Natali 在 " +":issue:`17914` 中贡献。)" + +#: ../../whatsnew/3.4.rst:1184 +msgid "" +":func:`os.path.samestat` is now available on the Windows platform (and the " +":func:`os.path.samefile` implementation is now shared between Unix and " +"Windows). (Contributed by Brian Curtin in :issue:`11939`.)" +msgstr "" +"现在 :func:`os.path.samestat` 将在 Windows 平台上可用(并且现在 :func:`os.path.samefile` " +"实现可在 Unix 和 Windows 间共享)。 (由 Brian Curtin 在 :issue:`11939` 中贡献。)" + +#: ../../whatsnew/3.4.rst:1188 +msgid "" +":func:`os.path.ismount` now recognizes volumes mounted below a drive root on" +" Windows. (Contributed by Tim Golden in :issue:`9035`.)" +msgstr "" +"现在 :func:`os.path.ismount` 可识别 Windows 中在驱动器根目录下加载的卷。 (由 Tim Golden 在 " +":issue:`9035` 中贡献。)" + +#: ../../whatsnew/3.4.rst:1191 +msgid "" +":func:`os.open` supports two new flags on platforms that provide them, " +":data:`~os.O_PATH` (un-opened file descriptor), and :data:`~os.O_TMPFILE` " +"(unnamed temporary file; as of 3.4.0 release available only on Linux systems" +" with a kernel version of 3.11 or newer that have uapi headers). " +"(Contributed by Christian Heimes in :issue:`18673` and Benjamin Peterson, " +"respectively.)" +msgstr "" + +#: ../../whatsnew/3.4.rst:1199 +msgid "pdb" +msgstr "pdb" + +#: ../../whatsnew/3.4.rst:1201 +msgid "" +":mod:`pdb` has been enhanced to handle generators, :keyword:`yield`, and " +"``yield from`` in a more useful fashion. This is especially helpful when " +"debugging :mod:`asyncio` based programs. (Contributed by Andrew Svetlov and" +" Xavier de Gaye in :issue:`16596`.)" +msgstr "" +":mod:`pdb` 已被增强以通过更有用的方式来处理生成器, :keyword:`yield` 和 ``yield from``。 这在调试基于 " +":mod:`asyncio` 的程序时特别有帮助。 (由 Andrew Svetlov 和 Xavier de Gaye 在 " +":issue:`16596` 中贡献。)" + +#: ../../whatsnew/3.4.rst:1206 +msgid "" +"The ``print`` command has been removed from :mod:`pdb`, restoring access to " +"the Python :func:`print` function from the pdb command line. Python2's " +"``pdb`` did not have a ``print`` command; instead, entering ``print`` " +"executed the ``print`` statement. In Python3 ``print`` was mistakenly made " +"an alias for the pdb :pdbcmd:`p` command. ``p``, however, prints the " +"``repr`` of its argument, not the ``str`` like the Python2 ``print`` command" +" did. Worse, the Python3 ``pdb print`` command shadowed the Python3 " +"``print`` function, making it inaccessible at the ``pdb`` prompt. " +"(Contributed by Connor Osborn in :issue:`18764`.)" +msgstr "" +"``print`` 命令已从 :mod:`pdb` 中移除,恢复了从 pdb 命令行对 Python :func:`print` 函数的访问。 " +"Python2 的 ``pdb`` 没有 ``print`` 命令;而是会在输入 ``print`` 时执行 ``print`` 语句。 在 " +"Python3 中 ``print`` 被错误地设为 pdb :pdbcmd:`p` 命令的别名。 然而,``p`` 会打印其参数的 " +"``repr``,而不是像 Python2 ``print`` 命令那样打印其参数的 ``str``。 更糟糕的是,Python3 ``pdb " +"print`` 命令会覆盖 Python3 ``print`` 函数,导致其在 ``pdb`` 提示符下无法被访问。 (由 Connor Osborn " +"在 :issue:`18764` 中贡献。)" + +#: ../../whatsnew/3.4.rst:1220 +msgid "pickle" +msgstr "pickle" + +#: ../../whatsnew/3.4.rst:1222 +msgid "" +":mod:`pickle` now supports (but does not use by default) a new pickle " +"protocol, protocol 4. This new protocol addresses a number of issues that " +"were present in previous protocols, such as the serialization of nested " +"classes, very large strings and containers, and classes whose " +":meth:`__new__` method takes keyword-only arguments. It also provides some " +"efficiency improvements." +msgstr "" +"现在 :mod:`pickle` 支持(但默认不使用)新的 pickle 协议即协议 4。 " +"这个新协议解决了在之前版本中存在的多个问题,例如嵌套类、超长字符串和容器、以及 :meth:`__new__` 方法接受仅限关键字参数的类的序列化。 " +"它还提供了一些效率上的改进。" + +#: ../../whatsnew/3.4.rst:1230 +msgid ":pep:`3154` -- Pickle protocol 4" +msgstr ":pep:`3154` -- pickle 协议 4" + +#: ../../whatsnew/3.4.rst:1231 +msgid "PEP written by Antoine Pitrou and implemented by Alexandre Vassalotti." +msgstr "PEP 由 Antoine Pitrou 撰写,并由 Alexandre Vassalotti 实现" + +#: ../../whatsnew/3.4.rst:1235 +msgid "plistlib" +msgstr "plistlib" + +#: ../../whatsnew/3.4.rst:1237 +msgid "" +":mod:`plistlib` now has an API that is similar to the standard pattern for " +"stdlib serialization protocols, with new :func:`~plistlib.load`, " +":func:`~plistlib.dump`, :func:`~plistlib.loads`, and :func:`~plistlib.dumps`" +" functions. (The older API is now deprecated.) In addition to the already " +"supported XML plist format (:data:`~plistlib.FMT_XML`), it also now supports" +" the binary plist format (:data:`~plistlib.FMT_BINARY`). (Contributed by " +"Ronald Oussoren and others in :issue:`14455`.)" +msgstr "" + +#: ../../whatsnew/3.4.rst:1247 +msgid "poplib" +msgstr "poplib" + +#: ../../whatsnew/3.4.rst:1249 +msgid "" +"Two new methods have been added to :mod:`poplib`: :meth:`~poplib.POP3.capa`," +" which returns the list of capabilities advertised by the POP server, and " +":meth:`~poplib.POP3.stls`, which switches a clear-text POP3 session into an " +"encrypted POP3 session if the POP server supports it. (Contributed by " +"Lorenzo Catucci in :issue:`4473`.)" +msgstr "" +"在 :mod:`poplib` 中新增了两个方法: :meth:`~poplib.POP3.capa`,它将返回 POP 服务器公开的功能列表,以及 " +":meth:`~poplib.POP3.stls`,它将在 POP 支持的情况下将明文 POP3 会话切换为加密 POP3 会话。 (由 Lorenzo" +" Catucci 在 :issue:`4473` 中贡献。)" + +#: ../../whatsnew/3.4.rst:1257 +msgid "pprint" +msgstr "pprint" + +#: ../../whatsnew/3.4.rst:1259 +msgid "" +"The :mod:`pprint` module's :class:`~pprint.PrettyPrinter` class and its " +":func:`~pprint.pformat`, and :func:`~pprint.pprint` functions have a new " +"option, *compact*, that controls how the output is formatted. Currently " +"setting *compact* to ``True`` means that sequences will be printed with as " +"many sequence elements as will fit within *width* on each (indented) line. " +"(Contributed by Serhiy Storchaka in :issue:`19132`.)" +msgstr "" +":mod:`pprint` 模块的 :class:`~pprint.PrettyPrinter` 类以及 :func:`~pprint.pformat`" +" 和 :func:`~pprint.pprint` 函数新增了一个选项 *compact*,它可控制输出所使用的格式。 目前将 *compact* 设为" +" ``True`` 表示打印序列时将在每个(缩进的)行中放入 *width* 所允许的尽可能多的元素。 (由 Serhiy Storchaka 在 " +":issue:`19132` 中贡献。)" + +#: ../../whatsnew/3.4.rst:1266 +msgid "" +"Long strings are now wrapped using Python's normal line continuation syntax." +" (Contributed by Antoine Pitrou in :issue:`17150`.)" +msgstr "" +"长字符串现在将使用 Python 的常规续行语法进行包装。 (由 Antoine Pitrou 在 :issue:`17150` 中贡献。)" + +#: ../../whatsnew/3.4.rst:1271 +msgid "pty" +msgstr "pty" + +#: ../../whatsnew/3.4.rst:1273 +msgid "" +":func:`pty.spawn` now returns the status value from :func:`os.waitpid` on " +"the child process, instead of ``None``. (Contributed by Gregory P. Smith.)" +msgstr "" +"现在 :func:`pty.spawn` 将返回来自子进程上 :func:`os.waitpid` 的状态值,而不是 ``None``。 (由 " +"Gregory P. Smith 贡献。)" + +#: ../../whatsnew/3.4.rst:1278 +msgid "pydoc" +msgstr "pydoc" + +#: ../../whatsnew/3.4.rst:1280 +msgid "" +"The :mod:`pydoc` module is now based directly on the " +":func:`inspect.signature` introspection API, allowing it to provide " +"signature information for a wider variety of callable objects. This change " +"also means that ``__wrapped__`` attributes are now taken into account when " +"displaying help information. (Contributed by Larry Hastings in " +":issue:`19674`.)" +msgstr "" +"现在 :mod:`pydoc` 模块是直接基于 :func:`inspect.signature` 内省 API,这允许它提供更多可调用对象的签名信息。" +" 这一改变也意味着现在当显示帮助信息时 ``__wrapped__`` 属性也会被纳入考虑。 (由 Larry Hastings 在 " +":issue:`19674` 中贡献。)" + +#: ../../whatsnew/3.4.rst:1286 +msgid "" +"The :mod:`pydoc` module no longer displays the ``self`` parameter for " +"already bound methods. Instead, it aims to always display the exact current " +"signature of the supplied callable. (Contributed by Larry Hastings in " +":issue:`20710`.)" +msgstr "" +":mod:`pydoc` 模块将不再显示已绑定方法的 ``self`` 形参。 现在,它总是会显示所提供可调用对象实际的当前签名。 (由 Larry " +"Hastings 在 :issue:`20710` 中贡献。)" + +#: ../../whatsnew/3.4.rst:1291 +msgid "" +"In addition to the changes that have been made to :mod:`pydoc` directly, its" +" handling of custom ``__dir__`` methods and various descriptor behaviours " +"has also been improved substantially by the underlying changes in the " +":mod:`inspect` module." +msgstr "" +"除了 :mod:`pydoc` 已有的直接修改,它对自定义 ``__dir__`` 方法和各种描述器行为的处理也通过对下层 :mod:`inspect`" +" 模块的修改获得了显著的改进。" + +#: ../../whatsnew/3.4.rst:1296 +msgid "" +"As the :func:`help` builtin is based on :mod:`pydoc`, the above changes also" +" affect the behaviour of :func:`help`." +msgstr "由于 :func:`help` 内置函数是基于 :mod:`pydoc` 的,上述的变化也会影响 :func:`help` 的行为。" + +#: ../../whatsnew/3.4.rst:1301 +msgid "re" +msgstr "re" + +#: ../../whatsnew/3.4.rst:1303 +msgid "" +"New :func:`~re.fullmatch` function and :meth:`.regex.fullmatch` method " +"anchor the pattern at both ends of the string to match. This provides a way" +" to be explicit about the goal of the match, which avoids a class of subtle " +"bugs where ``$`` characters get lost during code changes or the addition of " +"alternatives to an existing regular expression. (Contributed by Matthew " +"Barnett in :issue:`16203`.)" +msgstr "" +"新增的 :func:`~re.fullmatch` 函数和 :meth:`.regex.fullmatch` 方法可将模式锚定到要匹配的字符串的两端。 " +"这提供了一种明确匹配目标的方式,从而避免了一类微妙的错误错误,即在代码更改或为现有正则表达式添加替代项时丢失 ``$`` 字符。 (由 Matthew " +"Barnett 在 :issue:`16203` 中贡献。)" + +#: ../../whatsnew/3.4.rst:1310 +msgid "" +"The repr of :ref:`regex objects ` now includes the pattern and " +"the flags; the repr of :ref:`match objects ` now includes the" +" start, end, and the part of the string that matched. (Contributed by Hugo " +"Lopes Tavares and Serhiy Storchaka in :issue:`13592` and :issue:`17087`.)" +msgstr "" +":ref:`正则表达式对象 ` 的 repr 现在将包括模式和旗标;:ref:`匹配对象 ` 的 " +"repr 现在将包括已匹配字符串的开头、末尾和组成。 (由 Hugo Lopes Tavares 和 Serhiy Storchaka 在 " +":issue:`13592` 和 :issue:`17087` 中贡献。)" + +#: ../../whatsnew/3.4.rst:1318 +msgid "resource" +msgstr "resource" + +#: ../../whatsnew/3.4.rst:1320 +msgid "" +"New :func:`~resource.prlimit` function, available on Linux platforms with a " +"kernel version of 2.6.36 or later and glibc of 2.13 or later, provides the " +"ability to query or set the resource limits for processes other than the one" +" making the call. (Contributed by Christian Heimes in :issue:`16595`.)" +msgstr "" +"新增的 :func:`~resource.prlimit` 函数,在内核版本 2.6.36 以上的 Linux 平台及 glibc 版本 2.13 " +"以上可用,提供了查询或设置执行调用的进程以外的进程的资源限制的功能。 (由 Christian Heimes 在 :issue:`16595` " +"中贡献。)" + +#: ../../whatsnew/3.4.rst:1325 +msgid "" +"On Linux kernel version 2.6.36 or later, there are also some new Linux " +"specific constants: :attr:`~resource.RLIMIT_MSGQUEUE`, " +":attr:`~resource.RLIMIT_NICE`, :attr:`~resource.RLIMIT_RTPRIO`, " +":attr:`~resource.RLIMIT_RTTIME`, and :attr:`~resource.RLIMIT_SIGPENDING`. " +"(Contributed by Christian Heimes in :issue:`19324`.)" +msgstr "" + +#: ../../whatsnew/3.4.rst:1331 +msgid "" +"On FreeBSD version 9 and later, there some new FreeBSD specific constants: " +":attr:`~resource.RLIMIT_SBSIZE`, :attr:`~resource.RLIMIT_SWAP`, and " +":attr:`~resource.RLIMIT_NPTS`. (Contributed by Claudiu Popa in " +":issue:`19343`.)" +msgstr "" + +#: ../../whatsnew/3.4.rst:1338 +msgid "select" +msgstr "select" + +#: ../../whatsnew/3.4.rst:1340 +msgid "" +":class:`~select.epoll` objects now support the context management protocol. " +"When used in a :keyword:`with` statement, the :meth:`~select.epoll.close` " +"method will be called automatically at the end of the block. (Contributed " +"by Serhiy Storchaka in :issue:`16488`.)" +msgstr "" +"现在 :class:`~select.epoll` 对象可支持上下文管理协议。 当在 :keyword:`with` " +"语句中使用时,:meth:`~select.epoll.close` 方法将在代码块结束时被自动调用。 (由 Serhiy Storchaka 在 " +":issue:`16488` 中贡献。)" + +#: ../../whatsnew/3.4.rst:1345 +msgid "" +":class:`~select.devpoll` objects now have :meth:`~select.devpoll.fileno` and" +" :meth:`~select.devpoll.close` methods, as well as a new attribute " +":attr:`~select.devpoll.closed`. (Contributed by Victor Stinner in " +":issue:`18794`.)" +msgstr "" +"现在 :class:`~select.devpoll` 对象具有 :meth:`~select.devpoll.fileno` 和 " +":meth:`~select.devpoll.close` 方法,以及新的属性 :attr:`~select.devpoll.closed`。 (由 " +"Victor Stinner 在 :issue:`18794` 中贡献。)" + +#: ../../whatsnew/3.4.rst:1352 +msgid "shelve" +msgstr "shelve" + +#: ../../whatsnew/3.4.rst:1354 +msgid "" +":class:`~shelve.Shelf` instances may now be used in :keyword:`with` " +"statements, and will be automatically closed at the end of the " +":keyword:`!with` block. (Contributed by Filip Gruszczyński in " +":issue:`13896`.)" +msgstr "" +"现在 :class:`~shelve.Shelf` 实例可以在 :keyword:`with` 语句中使用,并将在 :keyword:`!with` " +"代码块结束时自动关闭。 (由 Filip Gruszczyński 在 :issue:`13896` 中贡献。)" + +#: ../../whatsnew/3.4.rst:1360 +msgid "shutil" +msgstr "shutil" + +#: ../../whatsnew/3.4.rst:1362 +msgid "" +":func:`~shutil.copyfile` now raises a specific :exc:`~shutil.Error` " +"subclass, :exc:`~shutil.SameFileError`, when the source and destination are " +"the same file, which allows an application to take appropriate action on " +"this specific error. (Contributed by Atsuo Ishimoto and Hynek Schlawack in " +":issue:`1492704`.)" +msgstr "" +"现在当源和目标为相同文件时 :func:`~shutil.copyfile` 会引发专门的 :exc:`~shutil.Error` 子类 " +":exc:`~shutil.SameFileError`,这允许应用程序针对这个特定错误采取适当的动作。 (由 Atsuo Ishimoto 和 " +"Hynek Schlawack 在 :issue:`1492704` 中贡献。)" + +#: ../../whatsnew/3.4.rst:1370 +msgid "smtpd" +msgstr "smtpd" + +#: ../../whatsnew/3.4.rst:1372 +msgid "" +"The :class:`~smtpd.SMTPServer` and :class:`~smtpd.SMTPChannel` classes now " +"accept a *map* keyword argument which, if specified, is passed in to " +":class:`asynchat.async_chat` as its *map* argument. This allows an " +"application to avoid affecting the global socket map. (Contributed by Vinay" +" Sajip in :issue:`11959`.)" +msgstr "" + +#: ../../whatsnew/3.4.rst:1380 +msgid "smtplib" +msgstr "smtplib" + +#: ../../whatsnew/3.4.rst:1382 +msgid "" +":exc:`~smtplib.SMTPException` is now a subclass of :exc:`OSError`, which " +"allows both socket level errors and SMTP protocol level errors to be caught " +"in one try/except statement by code that only cares whether or not an error " +"occurred. (Contributed by Ned Jackson Lovely in :issue:`2118`.)" +msgstr "" +"现在 :exc:`~smtplib.SMTPException` 是 :exc:`OSError` 的子类,它允许仅需关注是否有错误发生的代码在一个 " +"try/except 语句中同时捕获套接字级错误和 SMTP 协议级错误。 (由 Ned Jackson Lovely 在 :issue:`2118` " +"中贡献。)" + +#: ../../whatsnew/3.4.rst:1389 +msgid "socket" +msgstr "socket" + +#: ../../whatsnew/3.4.rst:1391 +msgid "" +"The socket module now supports the :data:`~socket.CAN_BCM` protocol on " +"platforms that support it. (Contributed by Brian Thorne in :issue:`15359`.)" +msgstr "" + +#: ../../whatsnew/3.4.rst:1394 +msgid "" +"Socket objects have new methods to get or set their :ref:`inheritable flag " +"`, :meth:`~socket.socket.get_inheritable` and " +":meth:`~socket.socket.set_inheritable`." +msgstr "" +"Socket 对象新增了用于获取或设置其 :ref:`可继承旗标 ` " +"的方法,:meth:`~socket.socket.get_inheritable` 和 " +":meth:`~socket.socket.set_inheritable`。" + +#: ../../whatsnew/3.4.rst:1398 +msgid "" +"The ``socket.AF_*`` and ``socket.SOCK_*`` constants are now enumeration " +"values using the new :mod:`enum` module. This allows meaningful names to be" +" printed during debugging, instead of integer \"magic numbers\"." +msgstr "" +"现在 ``socket.AF_*`` 和 ``socket.SOCK_*`` 常量是使用了新增的 :mod:`enum` 模块的枚举值。 " +"这允许在调试期间打印有意义的名称,而不是整数形式的“魔法数字”。" + +#: ../../whatsnew/3.4.rst:1402 +msgid "The :data:`~socket.AF_LINK` constant is now available on BSD and OSX." +msgstr "" + +#: ../../whatsnew/3.4.rst:1404 +msgid "" +":func:`~socket.inet_pton` and :func:`~socket.inet_ntop` are now supported on" +" Windows. (Contributed by Atsuo Ishimoto in :issue:`7171`.)" +msgstr "" +"现在 :func:`~socket.inet_pton` 和 :func:`~socket.inet_ntop` 在 Windows 上已受到支持。 " +"(由 Atsuo Ishimoto 在 :issue:`7171` 中贡献。)" + +#: ../../whatsnew/3.4.rst:1409 +msgid "sqlite3" +msgstr "sqlite3" + +#: ../../whatsnew/3.4.rst:1411 +msgid "" +"A new boolean parameter to the :func:`~sqlite3.connect` function, *uri*, can" +" be used to indicate that the *database* parameter is a ``uri`` (see the " +"`SQLite URI documentation `_). " +"(Contributed by poq in :issue:`13773`.)" +msgstr "" +":func:`~sqlite3.connect` 函数新增布尔值形参 *uri*,它可被用来指明 *database* 形参是一个 ``uri`` " +"(参见 `SQLite URI 文档 `_)。 (由 poq 在 " +":issue:`13773` 中贡献。)" + +#: ../../whatsnew/3.4.rst:1418 +msgid "ssl" +msgstr "ssl" + +#: ../../whatsnew/3.4.rst:1422 +msgid "" +":data:`~ssl.PROTOCOL_TLSv1_1` and :data:`~ssl.PROTOCOL_TLSv1_2` (TLSv1.1 and" +" TLSv1.2 support) have been added; support for these protocols is only " +"available if Python is linked with OpenSSL 1.0.1 or later. (Contributed by " +"Michele Orrù and Antoine Pitrou in :issue:`16692`.)" +msgstr "" +"添加了 :data:`~ssl.PROTOCOL_TLSv1_1` 和 :data:`~ssl.PROTOCOL_TLSv1_2` (TLSv1.1 和" +" TLSv1.2 支持);对这些协议的支持仅在 Python 使用 OpenSSL 1.0.1 或更高版本链接时可用。 (由 Michele Orrù " +"和 Antoine Pitrou 在 :issue:`16692` 中贡献。)" + +#: ../../whatsnew/3.4.rst:1429 +msgid "" +"New function :func:`~ssl.create_default_context` provides a standard way to " +"obtain an :class:`~ssl.SSLContext` whose settings are intended to be a " +"reasonable balance between compatibility and security. These settings are " +"more stringent than the defaults provided by the :class:`~ssl.SSLContext` " +"constructor, and may be adjusted in the future, without prior deprecation, " +"if best-practice security requirements change. The new recommended best " +"practice for using stdlib libraries that support SSL is to use " +":func:`~ssl.create_default_context` to obtain an :class:`~ssl.SSLContext` " +"object, modify it if needed, and then pass it as the *context* argument of " +"the appropriate stdlib API. (Contributed by Christian Heimes in " +":issue:`19689`.)" +msgstr "" +"新增的函数 :func:`~ssl.create_default_context` 提供了获取 :class:`~ssl.SSLContext` " +"的标准方式,其设置旨在合理兼顾兼容性和安全性。 这些设置比 :class:`~ssl.SSLContext` " +"构造器所提供的默认设置更为严格,如果最佳实践的安全要求发生变化,将来可能会对其进行调整,而不预先提示弃用。 对于使用支持 SSL 的 stdlib " +"库来新推荐的最佳实践是使用 :func:`~ssl.create_default_context` 来获取 " +":class:`~ssl.SSLContext` 对象,必要时对其进行修改,然后将其作为相应 stdlib API 的 *contex* 参数传入。 " +"(由 Christian Heimes 在 :issue:`19689` 中贡献。)" + +#: ../../whatsnew/3.4.rst:1441 +msgid "" +":class:`~ssl.SSLContext` method " +":meth:`~ssl.SSLContext.load_verify_locations` accepts a new optional " +"argument *cadata*, which can be used to provide PEM or DER encoded " +"certificates directly via strings or bytes, respectively. (Contributed by " +"Christian Heimes in :issue:`18138`.)" +msgstr "" +":class:`~ssl.SSLContext` 方法 :meth:`~ssl.SSLContext.load_verify_locations` " +"接受新增的可选参数 *cadata*,它可被来分别通过字符串或字节串来直接提供 PEM 或 DER 编码的证书。 (由 Christian Heimes" +" 在 :issue:`18138` 中贡献。)" + +#: ../../whatsnew/3.4.rst:1446 +msgid "" +"New function :func:`~ssl.get_default_verify_paths` returns a named tuple of " +"the paths and environment variables that the " +":meth:`~ssl.SSLContext.set_default_verify_paths` method uses to set " +"OpenSSL's default ``cafile`` and ``capath``. This can be an aid in " +"debugging default verification issues. (Contributed by Christian Heimes in " +":issue:`18143`.)" +msgstr "" +"新增的函数 :func:`~ssl.get_default_verify_paths` 可返回一个由路径和环境变量组成的具名元组, 供 " +":meth:`~ssl.SSLContext.set_default_verify_paths` 方法用来设置 OpenSSL 的默认 " +"``cafile`` 和``capath``。 这有助于对默认的验证问题进行调试。 (由 Christian Heimes 在 " +":issue:`18143` 中贡献。)" + +#: ../../whatsnew/3.4.rst:1453 +msgid "" +":class:`~ssl.SSLContext` has a new method, " +":meth:`~ssl.SSLContext.cert_store_stats`, that reports the number of loaded " +"``X.509`` certs, ``X.509 CA`` certs, and certificate revocation lists " +"(``crl``\\ s), as well as a :meth:`~ssl.SSLContext.get_ca_certs` method that" +" returns a list of the loaded ``CA`` certificates. (Contributed by " +"Christian Heimes in :issue:`18147`.)" +msgstr "" +":class:`~ssl.SSLContext` 增加了一个新方法 " +":meth:`~ssl.SSLContext.cert_store_stats`,用来报告已加载的 ``X.509`` 证书, ``X.509 CA``" +" 证书数量和证书吊销列表 (``crl``\\ s),以及 :meth:`~ssl.SSLContext.get_ca_certs` " +"方法用来返回已加载的 ``CA`` 证书列表。 (由 Christian Heimes 在 :issue:`18147` 中贡献。)" + +#: ../../whatsnew/3.4.rst:1460 +msgid "" +"If OpenSSL 0.9.8 or later is available, :class:`~ssl.SSLContext` has a new " +"attribute :attr:`~ssl.SSLContext.verify_flags` that can be used to control " +"the certificate verification process by setting it to some combination of " +"the new constants :data:`~ssl.VERIFY_DEFAULT`, " +":data:`~ssl.VERIFY_CRL_CHECK_LEAF`, :data:`~ssl.VERIFY_CRL_CHECK_CHAIN`, or " +":data:`~ssl.VERIFY_X509_STRICT`. OpenSSL does not do any CRL verification by" +" default. (Contributed by Christien Heimes in :issue:`8813`.)" +msgstr "" + +#: ../../whatsnew/3.4.rst:1468 +msgid "" +"New :class:`~ssl.SSLContext` method " +":meth:`~ssl.SSLContext.load_default_certs` loads a set of default " +"\"certificate authority\" (CA) certificates from default locations, which " +"vary according to the platform. It can be used to load both TLS web server " +"authentication certificates (``purpose=``:data:`~ssl.Purpose.SERVER_AUTH`) " +"for a client to use to verify a server, and certificates for a server to use" +" in verifying client certificates " +"(``purpose=``:data:`~ssl.Purpose.CLIENT_AUTH`). (Contributed by Christian " +"Heimes in :issue:`19292`.)" +msgstr "" +"新增的 :class:`~ssl.SSLContext` 方法 :meth:`~ssl.SSLContext.load_default_certs` " +"可从默认位置加载一组默认的“证书颁发机构”(CA)证书,此位置随平台而异。 它可被用于加载 TLS Web 服务器验证证书 " +"(``purpose=``:data:`~ssl.Purpose.SERVER_AUTH` ) " +"供客户端用来验证服务器,或加载证书供服务器用来验证客户端证书 (``purpose=``:data:`~ssl.Purpose.CLIENT_AUTH`" +" )。 (由 Christian Heimes 在 :issue:`19292` 中贡献。)" + +#: ../../whatsnew/3.4.rst:1479 +msgid "" +"Two new windows-only functions, :func:`~ssl.enum_certificates` and " +":func:`~ssl.enum_crls` provide the ability to retrieve certificates, " +"certificate information, and CRLs from the Windows cert store. (Contributed" +" by Christian Heimes in :issue:`17134`.)" +msgstr "" +"新增的两个 Windows 专属函数 :func:`~ssl.enum_certificates` 和 :func:`~ssl.enum_crls` " +"提供了从 Windows 证书存储库提取证书、证书信息和 CRL 的功能。 (由 Christian Heimes 在 :issue:`17134` " +"中贡献。)" + +#: ../../whatsnew/3.4.rst:1486 +msgid "" +"Support for server-side SNI (Server Name Indication) using the new " +":meth:`ssl.SSLContext.set_servername_callback` method. (Contributed by " +"Daniel Black in :issue:`8109`.)" +msgstr "" +"使用新增的 :meth:`ssl.SSLContext.set_servername_callback` 方法来支持服务器端 SNI (Server " +"Name Indication)。 (由 Daniel Black 在 :issue:`8109` 中贡献。)" + +#: ../../whatsnew/3.4.rst:1490 +msgid "" +"The dictionary returned by :meth:`.SSLSocket.getpeercert` contains " +"additional ``X509v3`` extension items: ``crlDistributionPoints``, " +"``calIssuers``, and ``OCSP`` URIs. (Contributed by Christian Heimes in " +":issue:`18379`.)" +msgstr "" +"由 :meth:`.SSLSocket.getpeercert` 返回的字典包含额外的 ``X509v3`` 扩展条目: " +"``crlDistributionPoints``, ``calIssuers`` 和 ``OCSP`` URI。 (由 Christian " +"Heimes 在 :issue:`18379` 中贡献。)" + +#: ../../whatsnew/3.4.rst:1496 +msgid "stat" +msgstr "stat" + +#: ../../whatsnew/3.4.rst:1498 +msgid "" +"The :mod:`stat` module is now backed by a C implementation in :mod:`_stat`. " +"A C implementation is required as most of the values aren't standardized and" +" are platform-dependent. (Contributed by Christian Heimes in " +":issue:`11016`.)" +msgstr "" +"现在 :mod:`stat` 模块以 :mod:`_stat` 中的 C 实现作为后端。 C 实现是必需的因为大多数值都未被标准化并且依赖于平台。 (由" +" Christian Heimes 在 :issue:`11016` 中贡献。)" + +#: ../../whatsnew/3.4.rst:1502 +msgid "" +"The module supports new :mod:`~stat.ST_MODE` flags, :mod:`~stat.S_IFDOOR`, " +":attr:`~stat.S_IFPORT`, and :attr:`~stat.S_IFWHT`. (Contributed by " +"Christian Hiemes in :issue:`11016`.)" +msgstr "" + +#: ../../whatsnew/3.4.rst:1508 +msgid "struct" +msgstr "struct" + +#: ../../whatsnew/3.4.rst:1510 +msgid "" +"New function :mod:`~struct.iter_unpack` and a new " +":meth:`struct.Struct.iter_unpack` method on compiled formats provide " +"streamed unpacking of a buffer containing repeated instances of a given " +"format of data. (Contributed by Antoine Pitrou in :issue:`17804`.)" +msgstr "" +"新增函数 :mod:`~struct.iter_unpack` 和在已编译格式上的新增方法 " +":meth:`struct.Struct.iter_unpack` 提供了对包含给定格式数据的重复实例的缓冲区的流式解包功能。 (由 Antoine " +"Pitrou 在 :issue:`17804` 中贡献。)" + +#: ../../whatsnew/3.4.rst:1517 +msgid "subprocess" +msgstr "subprocess" + +#: ../../whatsnew/3.4.rst:1519 +msgid "" +":func:`~subprocess.check_output` now accepts an *input* argument that can be" +" used to provide the contents of ``stdin`` for the command that is run. " +"(Contributed by Zack Weinberg in :issue:`16624`.)" +msgstr "" +"现在 :func:`~subprocess.check_output` 接受一个 *input* 参数用于为所运行的命令提供 ``stdin`` " +"的内容。 (由 Zack Weinberg 在 :issue:`16624` 中贡献。)" + +#: ../../whatsnew/3.4.rst:1523 +msgid "" +":func:`~subprocess.getstatus` and :func:`~subprocess.getstatusoutput` now " +"work on Windows. This change was actually inadvertently made in 3.3.4. " +"(Contributed by Tim Golden in :issue:`10197`.)" +msgstr "" +"现在 :func:`~subprocess.getstatus` 和 :func:`~subprocess.getstatusoutput` 已适用于 " +"Windows。 这一修改是在 3.3.4 中意外实施的。 (由 Tim Golden 在 :issue:`10197` 中贡献。)" + +#: ../../whatsnew/3.4.rst:1529 +msgid "sunau" +msgstr "sunau" + +#: ../../whatsnew/3.4.rst:1531 +msgid "" +"The :meth:`~sunau.getparams` method now returns a namedtuple rather than a " +"plain tuple. (Contributed by Claudiu Popa in :issue:`18901`.)" +msgstr "" +"现在 :meth:`~sunau.getparams` 方法将返回一个具名元组而不是普通元组。 (由 Claudiu Popa 在 " +":issue:`18901` 中贡献。)" + +#: ../../whatsnew/3.4.rst:1534 +msgid "" +":meth:`sunau.open` now supports the context management protocol: when used " +"in a :keyword:`with` block, the ``close`` method of the returned object will" +" be called automatically at the end of the block. (Contributed by Serhiy " +"Storchaka in :issue:`18878`.)" +msgstr "" +"现在 :meth:`sunau.open` 已支持上下文管理协议:当在 :keyword:`with` 代码块中使用时,所返回对象的 ``close``" +" 方法将在代码块结束时被自动调用。 (由 Serhiy Storchaka 在 :issue:`18878` 中贡献。)" + +#: ../../whatsnew/3.4.rst:1539 +msgid "" +":meth:`.AU_write.setsampwidth` now supports 24 bit samples, thus adding " +"support for writing 24 sample using the module. (Contributed by Serhiy " +"Storchaka in :issue:`19261`.)" +msgstr "" +"现在 :meth:`.AU_write.setsampwidth` 已支持 24 位采样,因此增加了使用该模块写入 24 位采样的支持。 (由 " +"Serhiy Storchaka 在 :issue:`19261` 中贡献。)" + +#: ../../whatsnew/3.4.rst:1543 +msgid "" +"The :meth:`~sunau.AU_write.writeframesraw` and " +":meth:`~sunau.AU_write.writeframes` methods now accept any :term:`bytes-like" +" object`. (Contributed by Serhiy Storchaka in :issue:`8311`.)" +msgstr "" +"现在 :meth:`~sunau.AU_write.writeframesraw` 和 " +":meth:`~sunau.AU_write.writeframes` 方法将接受任意 :term:`bytes-like object`。 (由 " +"Serhiy Storchaka 在 :issue:`8311` 中贡献。)" + +#: ../../whatsnew/3.4.rst:1549 +msgid "sys" +msgstr "sys" + +#: ../../whatsnew/3.4.rst:1551 +msgid "" +"New function :func:`sys.getallocatedblocks` returns the current number of " +"blocks allocated by the interpreter. (In CPython with the default ``--with-" +"pymalloc`` setting, this is allocations made through the " +":c:func:`PyObject_Malloc` API.) This can be useful for tracking memory " +"leaks, especially if automated via a test suite. (Contributed by Antoine " +"Pitrou in :issue:`13390`.)" +msgstr "" +"新增函数 :func:`sys.getallocatedblocks` 可返回当前由解释器所分配的内存块数量。 (在使用默认 ``--with-" +"pymalloc`` 设置的 CPython 中,这将是通过 :c:func:`PyObject_Malloc` API 执行的分配。) " +"这在追踪内存泄漏时会很有用处,特别是对于通过测试套件自动追踪的场景。 (由 Antoine Pitrou 在 :issue:`13390` 中贡献。)" + +#: ../../whatsnew/3.4.rst:1558 +msgid "" +"When the Python interpreter starts in :ref:`interactive mode `, it checks for an :data:`~sys.__interactivehook__` attribute " +"on the :mod:`sys` module. If the attribute exists, its value is called with" +" no arguments just before interactive mode is started. The check is made " +"after the :envvar:`PYTHONSTARTUP` file is read, so it can be set there. The" +" :mod:`site` module :ref:`sets it ` to a function that " +"enables tab completion and history saving (in :file:`~/.python-history`) if " +"the platform supports :mod:`readline`. If you do not want this (new) " +"behavior, you can override it in :envvar:`PYTHONSTARTUP`, " +":mod:`sitecustomize`, or :mod:`usercustomize` by deleting this attribute " +"from :mod:`sys` (or setting it to some other callable). (Contributed by " +"Éric Araujo and Antoine Pitrou in :issue:`5845`.)" +msgstr "" +"当 Python 解释器以 :ref:`交互模式 ` 启动时,它会检查 :mod:`sys` 模块中的 " +":data:`~sys.__interactivehook__` 属性。 如果该属性存在,它的值将在交互模式启动之前不附带参数地被调用。 " +"这个检查是在读取 :envvar:`PYTHONSTARTUP` 文件之后进行的,因此可以在那里设置它。 :mod:`site` 模块会在平台支持 " +":mod:`readline` 的情况下 :ref:`把它设置为 ` 一个启用制表符补全和历史记录保存(在 " +":file:`~/.python-history` 中)的函数。 如果你不想要这个(新增的)行为,可以通过从 :mod:`sys` " +"中删除这个属性(或将其设为其他可调用对象)在 :envvar:`PYTHONSTARTUP`, :mod:`sitecustomize` 或 " +":mod:`usercustomize` 中覆盖它。 (由 Éric Araujo 和 Antoine Pitrou 在 :issue:`5845` " +"中贡献。)" + +#: ../../whatsnew/3.4.rst:1573 +msgid "tarfile" +msgstr "tarfile" + +#: ../../whatsnew/3.4.rst:1575 +msgid "" +"The :mod:`tarfile` module now supports a simple :ref:`tarfile-commandline` " +"when called as a script directly or via ``-m``. This can be used to create " +"and extract tarfile archives. (Contributed by Berker Peksag in " +":issue:`13477`.)" +msgstr "" +"现在 :mod:`tarfile` 模块当直接作为脚本或通过 ``-m`` 调用时将支持简单的 :ref:`tarfile-commandline`。 " +"这可被用来创建和提取 tar 归档文件。 (由 Berker Peksag 在 :issue:`13477` 中贡献。)" + +#: ../../whatsnew/3.4.rst:1581 +msgid "textwrap" +msgstr "textwrap" + +#: ../../whatsnew/3.4.rst:1583 +msgid "" +"The :class:`~textwrap.TextWrapper` class has two new attributes/constructor " +"arguments: :attr:`~textwrap.TextWrapper.max_lines`, which limits the number " +"of lines in the output, and :attr:`~textwrap.TextWrapper.placeholder`, which" +" is a string that will appear at the end of the output if it has been " +"truncated because of *max_lines*. Building on these capabilities, a new " +"convenience function :func:`~textwrap.shorten` collapses all of the " +"whitespace in the input to single spaces and produces a single line of a " +"given *width* that ends with the *placeholder* (by default, ``[...]``). " +"(Contributed by Antoine Pitrou and Serhiy Storchaka in :issue:`18585` and " +":issue:`18725`.)" +msgstr "" +":class:`~textwrap.TextWrapper` 类新增了两个属性/构造器参数: " +":attr:`~textwrap.TextWrapper.max_lines`,用来限制输出的行数,以及 " +":attr:`~textwrap.TextWrapper.placeholder`,它是一个当输出由于 *max_lines* " +"限制被截断时将出现在输出末尾处的字符串。 一个在此功能之上新增的便捷函数 :func:`~textwrap.shorten` " +"可将输入中的所有空格压缩为单个空格并产生一个宽度为 *width* 并以 *placeholder* (默认为 ``[...]``) 结束的单独行。 " +"(由 Antoine Pitrou 和 Serhiy Storchaka 在 :issue:`18585` 和 :issue:`18725` 中贡献。)" + +#: ../../whatsnew/3.4.rst:1595 +msgid "threading" +msgstr "threading" + +#: ../../whatsnew/3.4.rst:1597 +msgid "" +"The :class:`~threading.Thread` object representing the main thread can be " +"obtained from the new :func:`~threading.main_thread` function. In normal " +"conditions this will be the thread from which the Python interpreter was " +"started. (Contributed by Andrew Svetlov in :issue:`18882`.)" +msgstr "" +"代表可通过新增的 :func:`~threading.main_thread` 函数来获取的主线程的 " +":class:`~threading.Thread` 对象。 在通常条件下这将是启动 Python 解释器所在的线程。 (由 Andrew " +"Svetlov 在 :issue:`18882` 中贡献。)" + +#: ../../whatsnew/3.4.rst:1604 +msgid "traceback" +msgstr "回溯" + +#: ../../whatsnew/3.4.rst:1606 +msgid "" +"A new :func:`traceback.clear_frames` function takes a traceback object and " +"clears the local variables in all of the frames it references, reducing the " +"amount of memory consumed. (Contributed by Andrew Kuchling in " +":issue:`1565525`.)" +msgstr "" +"新增的 :func:`traceback.clear_frames` 函数可接受一个回溯对象清除它所引用的所有帧中的局部变量,以减少内存消耗量。 (由 " +"Andrew Kuchling 在 :issue:`1565525` 中贡献。)" + +#: ../../whatsnew/3.4.rst:1613 +msgid "types" +msgstr "types" + +#: ../../whatsnew/3.4.rst:1615 +msgid "" +"A new :func:`~types.DynamicClassAttribute` descriptor provides a way to " +"define an attribute that acts normally when looked up through an instance " +"object, but which is routed to the *class* ``__getattr__`` when looked up " +"through the class. This allows one to have properties active on a class, " +"and have virtual attributes on the class with the same name (see :mod:`Enum`" +" for an example). (Contributed by Ethan Furman in :issue:`19030`.)" +msgstr "" +"新增的 :func:`~types.DynamicClassAttribute` " +"描述器提供了一种定义属性的方式,这种属性可正常地在实例对象中查找,但在类中查找时会被导向 *类的* ``__getattr__``。 " +"这将允许设置在类上激活的特征属性,并在相同名称的类上具有虚拟属性(参见 :mod:`Enum` 的例子)。 (由 Ethan Furman 在 " +":issue:`19030` 中贡献。)" + +#: ../../whatsnew/3.4.rst:1624 +msgid "urllib" +msgstr "urllib" + +#: ../../whatsnew/3.4.rst:1626 +msgid "" +":mod:`urllib.request` now supports ``data:`` URLs via the " +":class:`~urllib.request.DataHandler` class. (Contributed by Mathias " +"Panzenböck in :issue:`16423`.)" +msgstr "" +"现在 :mod:`urllib.request` 支持 ``data:`` 使用 " +":class:`~urllib.request.DataHandler` 类的 URL。 (由 Mathias Panzenböck 在 " +":issue:`16423` 中贡献。)" + +#: ../../whatsnew/3.4.rst:1630 +msgid "" +"The http method that will be used by a :class:`~urllib.request.Request` " +"class can now be specified by setting a " +":class:`~urllib.request.Request.method` class attribute on the subclass. " +"(Contributed by Jason R Coombs in :issue:`18978`.)" +msgstr "" +"由 :class:`~urllib.request.Request` 类使用的 http 方法现在可通过在子类上设置 " +":class:`~urllib.request.Request.method` 类属性来指定。 (由 Jason R Coombs 在 " +":issue:`18978` 中贡献。)" + +#: ../../whatsnew/3.4.rst:1635 +msgid "" +":class:`~urllib.request.Request` objects are now reusable: if the " +":attr:`~urllib.request.Request.full_url` or " +":attr:`~urllib.request.Request.data` attributes are modified, all relevant " +"internal properties are updated. This means, for example, that it is now " +"possible to use the same :class:`~urllib.request.Request` object in more " +"than one :meth:`.OpenerDirector.open` call with different *data* arguments, " +"or to modify a :class:`~urllib.request.Request`\\ 's ``url`` rather than " +"recomputing it from scratch. There is also a new " +":meth:`~urllib.request.Request.remove_header` method that can be used to " +"remove headers from a :class:`~urllib.request.Request`. (Contributed by " +"Alexey Kachayev in :issue:`16464`, Daniel Wozniak in :issue:`17485`, and " +"Damien Brecht and Senthil Kumaran in :issue:`17272`.)" +msgstr "" +"现在 :class:`~urllib.request.Request` 对象是可重用的:如果 " +":attr:`~urllib.request.Request.full_url` 或 " +":attr:`~urllib.request.Request.data` 属性被修改,所有相关的内部特征属性都将被更新。 " +"例如,这意味着现在可以在多个使用不同 *data* 参数的 :meth:`.OpenerDirector.open` 调用中使用相同的 " +":class:`~urllib.request.Request` 对象,或者修改 :class:`~urllib.request.Request` 的 " +"``url`` 而不必从头重新计算它们。 此外还有新增的 :meth:`~urllib.request.Request.remove_header` " +"方法可被用来从 :class:`~urllib.request.Request` 中移除标头。 (由 Alexey Kachayev 在 " +":issue:`16464` 中,Daniel Wozniak 在 :issue:`17485` 中,以及 Damien Brecht 和 " +"Senthil Kumaran 在 :issue:`17272` 中贡献。)" + +#: ../../whatsnew/3.4.rst:1648 +msgid "" +":class:`~urllib.error.HTTPError` objects now have a " +":attr:`~urllib.error.HTTPError.headers` attribute that provides access to " +"the HTTP response headers associated with the error. (Contributed by Berker" +" Peksag in :issue:`15701`.)" +msgstr "" +"现在 :class:`~urllib.error.HTTPError` 对象具有一个 " +":attr:`~urllib.error.HTTPError.headers` 属性可提供对与错误相关的 HTTP 响应的访问。 (由 Berker " +"Peksag 在 :issue:`15701` 中贡献。)" + +#: ../../whatsnew/3.4.rst:1655 +msgid "unittest" +msgstr "unittest" + +#: ../../whatsnew/3.4.rst:1657 +msgid "" +"The :class:`~unittest.TestCase` class has a new method, " +":meth:`~unittest.TestCase.subTest`, that produces a context manager whose " +":keyword:`with` block becomes a \"sub-test\". This context manager allows a" +" test method to dynamically generate subtests by, say, calling the " +"``subTest`` context manager inside a loop. A single test method can thereby" +" produce an indefinite number of separately-identified and separately-" +"counted tests, all of which will run even if one or more of them fail. For " +"example::" +msgstr "" + +#: ../../whatsnew/3.4.rst:1671 +msgid "" +"will result in six subtests, each identified in the unittest verbose output " +"with a label consisting of the variable name ``i`` and a particular value " +"for that variable (``i=0``, ``i=1``, etc). See :ref:`subtests` for the full" +" version of this example. (Contributed by Antoine Pitrou in " +":issue:`16997`.)" +msgstr "" +"将得到六个子测试,在单元测试详细输出中各自以变量名 ``i`` 加该变量专属的值来标识 (``i=0``, ``i=1`` 等等)。 该示例的完整版本见" +" :ref:`subtests`。 (由 Antoine Pitrou 在 :issue:`16997` 中贡献。)" + +#: ../../whatsnew/3.4.rst:1676 +msgid "" +":func:`unittest.main` now accepts an iterable of test names for " +"*defaultTest*, where previously it only accepted a single test name as a " +"string. (Contributed by Jyrki Pulliainen in :issue:`15132`.)" +msgstr "" +"现在 :func:`unittest.main` 接受一个包含测试名称的可迭代对象作为 " +"*defaultTest*,而在之前版本中它只接受单个字符串形式的测试名称。 (由 Jyrki Pulliainen 在 :issue:`15132` " +"中贡献。)" + +#: ../../whatsnew/3.4.rst:1680 +msgid "" +"If :class:`~unittest.SkipTest` is raised during test discovery (that is, at " +"the module level in the test file), it is now reported as a skip instead of " +"an error. (Contributed by Zach Ware in :issue:`16935`.)" +msgstr "" +"如果在测试发现期间(即在测试文件中的模块层级)引发了 :class:`~unittest.SkipTest`,现在它将被报告为跳过而不是错误。 (由 " +"Zach Ware 在 :issue:`16935` 中贡献。)" + +#: ../../whatsnew/3.4.rst:1684 +msgid "" +":meth:`~unittest.TestLoader.discover` now sorts the discovered files to " +"provide consistent test ordering. (Contributed by Martin Melin and Jeff " +"Ramnani in :issue:`16709`.)" +msgstr "" +"现在 :meth:`~unittest.TestLoader.discover` 会对所发现的文件进行排序以提供一致的测试顺序。 (由 Martin " +"Melin 和 Jeff Ramnani 在 :issue:`16709` 中贡献。)" + +#: ../../whatsnew/3.4.rst:1688 +msgid "" +":class:`~unittest.TestSuite` now drops references to tests as soon as the " +"test has been run, if the test is successful. On Python interpreters that " +"do garbage collection, this allows the tests to be garbage collected if " +"nothing else is holding a reference to the test. It is possible to override" +" this behavior by creating a :class:`~unittest.TestSuite` subclass that " +"defines a custom ``_removeTestAtIndex`` method. (Contributed by Tom " +"Wardill, Matt McClure, and Andrew Svetlov in :issue:`11798`.)" +msgstr "" +"如果测试成功,现在 :class:`~unittest.TestSuite` 会在测试完成运行时立即丢弃对测试的引用。 在支持垃圾回收的 Python " +"解释器上,这允许当没有其他对象持有对测试的引用时将该测试作为垃圾回收。 可以通过创建一个定义了自定义 ``_removeTestAtIndex`` " +"方法的 :class:`~unittest.TestSuite` 子类来覆盖此行为。 (由 Tom Wardill, Matt McClure 和 " +"Andrew Svetlov 在 :issue:`11798` 中贡献。)" + +#: ../../whatsnew/3.4.rst:1696 +msgid "" +"A new test assertion context-manager, :meth:`~unittest.TestCase.assertLogs`," +" will ensure that a given block of code emits a log message using the " +":mod:`logging` module. By default the message can come from any logger and " +"have a priority of ``INFO`` or higher, but both the logger name and an " +"alternative minimum logging level may be specified. The object returned by " +"the context manager can be queried for the :class:`~logging.LogRecord`\\ s " +"and/or formatted messages that were logged. (Contributed by Antoine Pitrou " +"in :issue:`18937`.)" +msgstr "" +"新增的测试断言上下文管理器 :meth:`~unittest.TestCase.assertLogs` 将确保给定的代码块使用 " +":mod:`logging` 模块发出日志记录消息。 在默认情况下消息可来自任意日志记录器并具有 ``INFO`` " +"或更高的优先级,但要指明日志记录器名称和替代的最低日志级别。 可以在该上下文管理器所返回的对象中查询 " +":class:`~logging.LogRecord` 和/或所记录的已格式化消息。 (由 Antoine Pitrou 在 " +":issue:`18937` 中贡献。)" + +#: ../../whatsnew/3.4.rst:1705 +msgid "" +"Test discovery now works with namespace packages (Contributed by Claudiu " +"Popa in :issue:`17457`.)" +msgstr "现在测试发现将可用于命名空间包(由 Claudiu Popa 在 :issue:`17457` 中贡献。).)" + +#: ../../whatsnew/3.4.rst:1708 +msgid "" +":mod:`unittest.mock` objects now inspect their specification signatures when" +" matching calls, which means an argument can now be matched by either " +"position or name, instead of only by position. (Contributed by Antoine " +"Pitrou in :issue:`17015`.)" +msgstr "" +"现在 :mod:`unittest.mock` 对象可以在匹配调用时检查其规范签名,这意味着现在可以通过位置或名称来匹配参数,而不是仅能通过位置。 (由" +" Antoine Pitrou 在 :issue:`17015` 中贡献。)" + +#: ../../whatsnew/3.4.rst:1713 +msgid "" +":func:`~mock.mock_open` objects now have ``readline`` and ``readlines`` " +"methods. (Contributed by Toshio Kuratomi in :issue:`17467`.)" +msgstr "" +"现在 :func:`~mock.mock_open` 对象具有 ``readline`` 和 ``readlines`` 方法。 (由 Toshio " +"Kuratomi 在 :issue:`17467` 中贡献。)" + +#: ../../whatsnew/3.4.rst:1718 +msgid "venv" +msgstr "venv" + +#: ../../whatsnew/3.4.rst:1720 +msgid "" +":mod:`venv` now includes activation scripts for the ``csh`` and ``fish`` " +"shells. (Contributed by Andrew Svetlov in :issue:`15417`.)" +msgstr "" +"现在 :mod:`venv` 包括了用于 ``csh`` 和 ``fish`` shell 的激活脚本。 (由 Andrew Svetlov 在 " +":issue:`15417` 中贡献。)" + +#: ../../whatsnew/3.4.rst:1723 +msgid "" +":class:`~venv.EnvBuilder` and the :func:`~venv.create` convenience function " +"take a new keyword argument *with_pip*, which defaults to ``False``, that " +"controls whether or not :class:`~venv.EnvBuilder` ensures that ``pip`` is " +"installed in the virtual environment. (Contributed by Nick Coghlan in " +":issue:`19552` as part of the :pep:`453` implementation.)" +msgstr "" +":class:`~venv.EnvBuilder` 和 :func:`~venv.create` 便捷函数接受新的关键字参数 " +"*with_pip*,默认值为 ``False``,它控制 :class:`~venv.EnvBuilder` 是否确保 ``pip`` " +"在虚拟环境中安装。 (作为 :pep:`453` 实现的组成部分由 Nick Coghlan 在 :issue:`19552` 中贡献。)" + +#: ../../whatsnew/3.4.rst:1731 +msgid "wave" +msgstr "wave" + +#: ../../whatsnew/3.4.rst:1733 +msgid "" +"The :meth:`~wave.getparams` method now returns a namedtuple rather than a " +"plain tuple. (Contributed by Claudiu Popa in :issue:`17487`.)" +msgstr "" +"现在 :meth:`~wave.getparams` 方法将返回一个具名元组而不是普通元组。 (由 Claudiu Popa 在 " +":issue:`17487` 中贡献。)" + +#: ../../whatsnew/3.4.rst:1736 +msgid "" +":meth:`wave.open` now supports the context management protocol. " +"(Contributed by Claudiu Popa in :issue:`17616`.)" +msgstr "" +"现在 :meth:`wave.open` 已支持上下文管理器协议。 (由 Claudiu Popa 在 :issue:`17616` 中贡献。)" + +#: ../../whatsnew/3.4.rst:1739 +msgid "" +":mod:`wave` can now :ref:`write output to unseekable files `. (Contributed by David Jones, Guilherme Polo, and Serhiy " +"Storchaka in :issue:`5202`.)" +msgstr "" +"现在 :mod:`wave` 可以 :ref:`将输出写入到不可定位的文件 `。 (由 David Jones," +" Guilherme Polo 和 Serhiy Storchaka 在 :issue:`5202` 中贡献。)" + +#: ../../whatsnew/3.4.rst:1743 +msgid "" +"The :meth:`~wave.Wave_write.writeframesraw` and " +":meth:`~wave.Wave_write.writeframes` methods now accept any :term:`bytes-" +"like object`. (Contributed by Serhiy Storchaka in :issue:`8311`.)" +msgstr "" +"现在 :meth:`~wave.Wave_write.writeframesraw` 和 " +":meth:`~wave.Wave_write.writeframes` 方法将接受任意 :term:`bytes-like object`。 (由 " +"Serhiy Storchaka 在 :issue:`8311` 中贡献。)" + +#: ../../whatsnew/3.4.rst:1749 +msgid "weakref" +msgstr "weakref" + +#: ../../whatsnew/3.4.rst:1751 +msgid "" +"New :class:`~weakref.WeakMethod` class simulates weak references to bound " +"methods. (Contributed by Antoine Pitrou in :issue:`14631`.)" +msgstr "" +"新增的 :class:`~weakref.WeakMethod` 类可模拟指向绑定方法的弱引用。 (由 Antoine Pitrou 在 " +":issue:`14631` 中贡献。)" + +#: ../../whatsnew/3.4.rst:1754 +msgid "" +"New :class:`~weakref.finalize` class makes it possible to register a " +"callback to be invoked when an object is garbage collected, without needing " +"to carefully manage the lifecycle of the weak reference itself. " +"(Contributed by Richard Oudkerk in :issue:`15528`.)" +msgstr "" +"新增的 :class:`~weakref.finalize` " +"类使得注册一个当对象被作为垃圾回收时唤起的回调成为可能,而无需小心地管理弱引用本身的生命周期。 (由 Richard Oudkerk 在 " +":issue:`15528` 中贡献。)" + +#: ../../whatsnew/3.4.rst:1759 +msgid "" +"The callback, if any, associated with a :class:`~weakref.ref` is now exposed" +" via the :attr:`~weakref.ref.__callback__` attribute. (Contributed by Mark " +"Dickinson in :issue:`17643`.)" +msgstr "" +"如果存在任何与 :class:`~weakref.ref` 相关联的回调,现在将通过 :attr:`~weakref.ref.__callback__`" +" 属性对外公开。 (由 Mark Dickinson 在 :issue:`17643` 中贡献。)" + +#: ../../whatsnew/3.4.rst:1765 +msgid "xml.etree" +msgstr "xml.etree" + +#: ../../whatsnew/3.4.rst:1767 +msgid "" +"A new parser, :class:`~xml.etree.ElementTree.XMLPullParser`, allows a non-" +"blocking applications to parse XML documents. An example can be seen at " +":ref:`elementtree-pull-parsing`. (Contributed by Antoine Pitrou in " +":issue:`17741`.)" +msgstr "" +"新增的解析器 :class:`~xml.etree.ElementTree.XMLPullParser` 允许用非阻塞的应用程序来解析 XML 文档。 " +"相关示例可参见 :ref:`elementtree-pull-parsing`。 (由 Antoine Pitrou 在 :issue:`17741` " +"中贡献。)" + +#: ../../whatsnew/3.4.rst:1772 +msgid "" +"The :mod:`xml.etree.ElementTree` :func:`~xml.etree.ElementTree.tostring` and" +" :func:`~xml.etree.ElementTree.tostringlist` functions, and the " +":class:`~xml.etree.ElementTree.ElementTree` " +":meth:`~xml.etree.ElementTree.ElementTree.write` method, now have a " +"*short_empty_elements* :ref:`keyword-only parameter ` providing control over whether elements with no content are" +" written in abbreviated (````) or expanded (````) form. " +"(Contributed by Ariel Poliak and Serhiy Storchaka in :issue:`14377`.)" +msgstr "" +"现在 :mod:`xml.etree.ElementTree` :func:`~xml.etree.ElementTree.tostring` 和 " +":func:`~xml.etree.ElementTree.tostringlist` 函数,以及 " +":class:`~xml.etree.ElementTree.ElementTree` 的 " +":meth:`~xml.etree.ElementTree.ElementTree.write` 方法都具有一个 " +"*short_empty_elements* :ref:`仅限关键字形参 ` " +"用来提供对于无内容的元素要采取缩写 (````) 还是扩展 (````) 形式的控制。 (由 Ariel " +"Poliak 和 Serhiy Storchaka 在 :issue:`14377` 中贡献。)" + +#: ../../whatsnew/3.4.rst:1783 +msgid "zipfile" +msgstr "zipfile" + +#: ../../whatsnew/3.4.rst:1785 +msgid "" +"The :meth:`~zipfile.PyZipFile.writepy` method of the " +":class:`~zipfile.PyZipFile` class has a new *filterfunc* option that can be " +"used to control which directories and files are added to the archive. For " +"example, this could be used to exclude test files from the archive. " +"(Contributed by Christian Tismer in :issue:`19274`.)" +msgstr "" +":class:`~zipfile.PyZipFile` 类的 :meth:`~zipfile.PyZipFile.writepy` 方法新增的 " +"*filterfunc* 选项可用来控制要将哪些目录添加到归档中。 例如,可以用它将测试文件排除在归档之外。 (由 Christian Tismer 在" +" :issue:`19274` 中贡献。)" + +#: ../../whatsnew/3.4.rst:1791 +msgid "" +"The *allowZip64* parameter to :class:`~zipfile.ZipFile` and " +":class:`~zipfile.PyZipfile` is now ``True`` by default. (Contributed by " +"William Mallard in :issue:`17201`.)" +msgstr "" +"现在 :class:`~zipfile.ZipFile` 和 :class:`~zipfile.PyZipfile` 的 *allowZip64* " +"形参默认值为 ``True``。 (由 William Mallard 在 :issue:`17201` 中贡献。)" + +#: ../../whatsnew/3.4.rst:1798 +msgid "CPython Implementation Changes" +msgstr "CPython 实现的变化" + +#: ../../whatsnew/3.4.rst:1804 +msgid "PEP 445: Customization of CPython Memory Allocators" +msgstr "PEP 445: 自定义 CPython 内存分配器" + +#: ../../whatsnew/3.4.rst:1806 +msgid "" +":pep:`445` adds new C level interfaces to customize memory allocation in the" +" CPython interpreter." +msgstr ":pep:`445` 添加了新的 C 层级接口用来在 CPython 解释器中对内存分配进行自定义。" + +#: ../../whatsnew/3.4.rst:1811 +msgid ":pep:`445` -- Add new APIs to customize Python memory allocators" +msgstr ":pep:`445` -- 新增用于自定义 Python 内存分配器的 API" + +#: ../../whatsnew/3.4.rst:1818 +msgid "PEP 442: Safe Object Finalization" +msgstr "PEP 442: 安全的对象最终化" + +#: ../../whatsnew/3.4.rst:1820 +msgid "" +":pep:`442` removes the current limitations and quirks of object finalization" +" in CPython. With it, objects with :meth:`__del__` methods, as well as " +"generators with :keyword:`finally` clauses, can be finalized when they are " +"part of a reference cycle." +msgstr "" +":pep:`442` 移除了 CPython 中有关对象最终化的限制和特殊处理。 有了它,具有 :meth:`__del__` 方法的对象,以及具有 " +":keyword:`finally` 子句的生成器在有循环引用的情况下也可以被最终化。" + +#: ../../whatsnew/3.4.rst:1825 +msgid "" +"As part of this change, module globals are no longer forcibly set to " +":const:`None` during interpreter shutdown in most cases, instead relying on " +"the normal operation of the cyclic garbage collector. This avoids a whole " +"class of interpreter-shutdown-time errors, usually involving ``__del__`` " +"methods, that have plagued Python since the cyclic GC was first introduced." +msgstr "" +"作为此项改变的一部分,大多数情况下在解释器关闭期间模块的全局变量不会被强制设为 :const:`None`,而是取决于循环垃圾回收器的正常操作。 " +"这避免了大量的解释器关闭时错误,这类错误通常都涉及 ``__del__`` 方法,它们自循环 GC 首次被引入起就一直困扰着 Python。" + +#: ../../whatsnew/3.4.rst:1834 +msgid ":pep:`442` -- Safe object finalization" +msgstr ":pep:`442` -- 安全的对象最终化" + +#: ../../whatsnew/3.4.rst:1841 +msgid "PEP 456: Secure and Interchangeable Hash Algorithm" +msgstr "PEP 456: 安全且可互换的哈希算法" + +#: ../../whatsnew/3.4.rst:1843 +msgid "" +":pep:`456` follows up on earlier security fix work done on Python's hash " +"algorithm to address certain DOS attacks to which public facing APIs backed " +"by dictionary lookups may be subject. (See :issue:`14621` for the start of " +"the current round of improvements.) The PEP unifies CPython's hash code to " +"make it easier for a packager to substitute a different hash algorithm, and " +"switches Python's default implementation to a SipHash implementation on " +"platforms that have a 64 bit data type. Any performance differences in " +"comparison with the older FNV algorithm are trivial." +msgstr "" +":pep:`456` 在早先对 Python 的哈希算法所做安全修复上更进一步以解决特定的 DOS 攻击问题,以字典查找为基础的对外公开的 API " +"可能面临此种攻击。(请参阅 :issue:`14621` 了解此轮改进的缘起。) 该 PEP 统一了 CPython " +"的哈希代码以使打包者能更容易地用不同哈希算法进行替换,并在具有 64 位数据类型的平台上将 Python 的默认实现切换为 SipHash 实现。 " +"与旧版 FNV 算法相比只有很小的性能差异。" + +#: ../../whatsnew/3.4.rst:1852 +msgid "" +"The PEP adds additional fields to the :attr:`sys.hash_info` named tuple to " +"describe the hash algorithm in use by the currently executing binary. " +"Otherwise, the PEP does not alter any existing CPython APIs." +msgstr "" + +#: ../../whatsnew/3.4.rst:1860 +msgid "PEP 436: Argument Clinic" +msgstr "PEP 436: Argument Clinic" + +#: ../../whatsnew/3.4.rst:1862 +msgid "" +"\"Argument Clinic\" (:pep:`436`) is now part of the CPython build process " +"and can be used to simplify the process of defining and maintaining accurate" +" signatures for builtins and standard library extension modules implemented " +"in C." +msgstr "" +"现在 \"Argument Clinic\" (:pep:`436`) 是 CPython 构建过程的一部分并可被用于简化为内置对象和以 C " +"实现的标准库扩展模块定义和维护准确签名的过程。" + +#: ../../whatsnew/3.4.rst:1867 +msgid "" +"Some standard library extension modules have been converted to use Argument " +"Clinic in Python 3.4, and :mod:`pydoc` and :mod:`inspect` have been updated " +"accordingly." +msgstr "" +"在 Python 3.4 中有一些标准库模块已被转换为使用 Argument Clinic,而 :mod:`pydoc` 和 " +":mod:`inspect` 也进行了相应的更新。" + +#: ../../whatsnew/3.4.rst:1871 +msgid "" +"It is expected that signature metadata for programmatic introspection will " +"be added to additional callables implemented in C as part of Python 3.4 " +"maintenance releases." +msgstr "预期针对程序化内省的签名元数据将被添加到更多的以 C 实现的可调用对象中作为 Python 3.4 维护发布版的组成部分。" + +#: ../../whatsnew/3.4.rst:1876 +msgid "" +"The Argument Clinic PEP is not fully up to date with the state of the " +"implementation. This has been deemed acceptable by the release manager and " +"core development team in this case, as Argument Clinic will not be made " +"available as a public API for third party use in Python 3.4." +msgstr "" +"Argument Clinic PEP 尚未完整更新到与具体实现的状态相一致。 这种情况被发布版管理者和核心开发团队认为是可接受的,因为 " +"Argument Clinic 在 Python 3.4 中将不会作为公有 API 提供给第三方。" + +#: ../../whatsnew/3.4.rst:1883 +msgid ":pep:`436` -- The Argument Clinic DSL" +msgstr ":pep:`436` -- The Argument Clinic DSL" + +#: ../../whatsnew/3.4.rst:1884 +msgid "PEP written and implemented by Larry Hastings." +msgstr "PEP 由 Larry Hastings 撰写并实现" + +#: ../../whatsnew/3.4.rst:1888 +msgid "Other Build and C API Changes" +msgstr "其他的构建和 C API 的改变" + +#: ../../whatsnew/3.4.rst:1890 +msgid "" +"The new :c:func:`PyType_GetSlot` function has been added to the stable ABI, " +"allowing retrieval of function pointers from named type slots when using the" +" limited API. (Contributed by Martin von Löwis in :issue:`17162`.)" +msgstr "" +"新的 :c:func:`PyType_GetSlot` 函数已被添加到稳定 ABI,以允许在使用受限 API 时从指定的类型槽位提取函数指针。 (由 " +"Martin von Löwis 在 :issue:`17162` 中贡献。)" + +#: ../../whatsnew/3.4.rst:1894 +msgid "" +"The new :c:func:`Py_SetStandardStreamEncoding` pre-initialization API allows" +" applications embedding the CPython interpreter to reliably force a " +"particular encoding and error handler for the standard streams. (Contributed" +" by Bastien Montagne and Nick Coghlan in :issue:`16129`.)" +msgstr "" + +#: ../../whatsnew/3.4.rst:1899 +msgid "" +"Most Python C APIs that don't mutate string arguments are now correctly " +"marked as accepting ``const char *`` rather than ``char *``. (Contributed " +"by Serhiy Storchaka in :issue:`1772673`.)" +msgstr "" +"大多数不修改字符串参数的 Python C API 现在已被正确地标记为接受 ``const char *`` 而不是 ``char *``。 (由 " +"Serhiy Storchaka 在 :issue:`1772673` 中贡献。)" + +#: ../../whatsnew/3.4.rst:1903 +msgid "" +"A new shell version of ``python-config`` can be used even when a python " +"interpreter is not available (for example, in cross compilation scenarios)." +msgstr "" +"一个新的 ``python-config`` 的 shell 版本即使在 python 解释器不可用时仍可被使用(例如,在交叉编译的场景中)。" + +#: ../../whatsnew/3.4.rst:1906 +msgid "" +":c:func:`PyUnicode_FromFormat` now supports width and precision " +"specifications for ``%s``, ``%A``, ``%U``, ``%V``, ``%S``, and ``%R``. " +"(Contributed by Ysj Ray and Victor Stinner in :issue:`7330`.)" +msgstr "" +"现在 :c:func:`PyUnicode_FromFormat` 支持为 ``%s``, ``%A``, ``%U``, ``%V``, ``%S``" +" 和 ``%R`` 使用宽度和精度说明符。 (由 Ysj Ray 和 Victor Stinner 在 :issue:`7330` 中贡献。)" + +#: ../../whatsnew/3.4.rst:1910 +msgid "" +"New function :c:func:`PyStructSequence_InitType2` supplements the existing " +":c:func:`PyStructSequence_InitType` function. The difference is that it " +"returns ``0`` on success and ``-1`` on failure." +msgstr "" +"新的函数 :c:func:`PyStructSequence_InitType2` 为现有的 " +":c:func:`PyStructSequence_InitType` 函数提供了补充。 其不同之处在于它会在成功时返回 ``0`` 而在失败时返回 " +"``-1``。" + +#: ../../whatsnew/3.4.rst:1914 +msgid "" +"The CPython source can now be compiled using the address sanity checking " +"features of recent versions of GCC and clang: the false alarms in the small" +" object allocator have been silenced. (Contributed by Dhiru Kholia in " +":issue:`18596`.)" +msgstr "" +"现在 CPython 源代码可以使用最近版本的 GCC 和 clang 的地址确定性检查特性进行编译:小对象分配器中的假警报已被消除。 (由 Dhiru" +" Kholia 在 :issue:`18596` 中贡献。)" + +#: ../../whatsnew/3.4.rst:1919 +msgid "" +"The Windows build now uses `Address Space Layout Randomization " +"`_ and " +"`Data Execution Prevention " +"`_. (Contributed " +"by Christian Heimes in :issue:`16632`.)" +msgstr "" +"Windows 构建版现在会使用 `寻址空间布局随机化 " +"`_ 和 " +"`数据执行保护 `_。 (由 " +"Christian Heimes 在 :issue:`16632` 中贡献。)" + +#: ../../whatsnew/3.4.rst:1924 +msgid "" +"New function :c:func:`PyObject_LengthHint` is the C API equivalent of " +":func:`operator.length_hint`. (Contributed by Armin Ronacher in " +":issue:`16148`.)" +msgstr "" +"新的函数 :c:func:`PyObject_LengthHint` 是 :func:`operator.length_hint` 的 C API " +"等价形式。 (由 Armin Ronacher 在 :issue:`16148` 中贡献。)" + +#: ../../whatsnew/3.4.rst:1932 +msgid "Other Improvements" +msgstr "其他改进" + +#: ../../whatsnew/3.4.rst:1936 +msgid "" +"The :ref:`python ` command has a new :ref:`option `, ``-I``, which causes it to run in \"isolated mode\", " +"which means that :data:`sys.path` contains neither the script's directory " +"nor the user's ``site-packages`` directory, and all :envvar:`PYTHON*` " +"environment variables are ignored (it implies both ``-s`` and ``-E``). " +"Other restrictions may also be applied in the future, with the goal being to" +" isolate the execution of a script from the user's environment. This is " +"appropriate, for example, when Python is used to run a system script. On " +"most POSIX systems it can and should be used in the ``#!`` line of system " +"scripts. (Contributed by Christian Heimes in :issue:`16499`.)" +msgstr "" + +#: ../../whatsnew/3.4.rst:1947 +msgid "" +"Tab-completion is now enabled by default in the interactive interpreter on " +"systems that support :mod:`readline`. History is also enabled by default, " +"and is written to (and read from) the file :file:`~/.python-history`. " +"(Contributed by Antoine Pitrou and Éric Araujo in :issue:`5845`.)" +msgstr "" +"在支持 :mod:`readline` 的系统上的交互模式中现在将默认启用 Tab 键补全。 历史记录也将默认启用,并会写入到 " +":file:`~/.python-history` 文件(也会从中读取)。 (由 Antoine Pitrou 和 Éric Araujo 在 " +":issue:`5845` 中贡献。)" + +#: ../../whatsnew/3.4.rst:1952 +msgid "" +"Invoking the Python interpreter with ``--version`` now outputs the version " +"to standard output instead of standard error (:issue:`18338`). Similar " +"changes were made to :mod:`argparse` (:issue:`18920`) and other modules that" +" have script-like invocation capabilities (:issue:`18922`)." +msgstr "" +"现在附带 ``--version`` 唤起 Python 解释器将会把版本信息输出到标准输出而不是标准错误 (:issue:`18338`)。 对于 " +":mod:`argparse` (:issue:`18920`) 和其他具有脚本类唤起功能的模块也做了类似的修改 (:issue:`18922`)。" + +#: ../../whatsnew/3.4.rst:1957 +msgid "" +"The CPython Windows installer now adds ``.py`` to the :envvar:`PATHEXT` " +"variable when extensions are registered, allowing users to run a python " +"script at the windows command prompt by just typing its name without the " +"``.py`` extension. (Contributed by Paul Moore in :issue:`18569`.)" +msgstr "" +"现在 CPython Windows 安装程序会在注册扩展名时将 ``.py`` 添加到 :envvar:`PATHEXT` 变量,以允许用户在 " +"windows 命令提示符下直接键入不带 ``.py`` 扩展名的 python 脚本名称来运行它。 (由 Paul Moore 在 " +":issue:`18569` 中贡献。)" + +#: ../../whatsnew/3.4.rst:1962 +msgid "" +"A new ``make`` target `coverage-report " +"`_ will build python, run the test suite, and generate an HTML" +" coverage report for the C codebase using ``gcov`` and `lcov " +"`_." +msgstr "" + +#: ../../whatsnew/3.4.rst:1968 +msgid "" +"The ``-R`` option to the :ref:`python regression test suite ` now " +"also checks for memory allocation leaks, using " +":func:`sys.getallocatedblocks()`. (Contributed by Antoine Pitrou in " +":issue:`13390`.)" +msgstr "" + +#: ../../whatsnew/3.4.rst:1973 +msgid "``python -m`` now works with namespace packages." +msgstr "现在 ``python -m`` 将可用于命名空间包。" + +#: ../../whatsnew/3.4.rst:1975 +msgid "" +"The :mod:`stat` module is now implemented in C, which means it gets the " +"values for its constants from the C header files, instead of having the " +"values hard-coded in the python module as was previously the case." +msgstr "" +"现在 :mod:`stat` 模块是用 C 实现的,这意味着它将从 C 头文件中获取其常量值,而不是像之前版本中那样将值码编码在 python 模块中。" + +#: ../../whatsnew/3.4.rst:1979 +msgid "" +"Loading multiple python modules from a single OS module (``.so``, ``.dll``) " +"now works correctly (previously it silently returned the first python module" +" in the file). (Contributed by Václav Šmilauer in :issue:`16421`.)" +msgstr "" +"现在将能够正确地从单个 OS 模块加载多个 (``.so``, ``.dll``) python 模块(在之前版本中则会静默地返回文件中的第一个 " +"python 模块)。 (由 Václav Šmilauer 在 :issue:`16421` 中贡献。)" + +#: ../../whatsnew/3.4.rst:1983 +msgid "" +"A new opcode, :opcode:`LOAD_CLASSDEREF`, has been added to fix a bug in the " +"loading of free variables in class bodies that could be triggered by certain" +" uses of :ref:`__prepare__ `. (Contributed by Benjamin Peterson in" +" :issue:`17853`.)" +msgstr "" +"增加了新的操作码 :opcode:`LOAD_CLASSDEREF`,用于修复一个在类体中加载自由变量的程序错误,它可能因 " +":ref:`__prepare__ ` 的特定用法而触发。 (由 Benjamin Peterson 在 :issue:`17853`" +" 中贡献。)" + +#: ../../whatsnew/3.4.rst:1988 +msgid "" +"A number of MemoryError-related crashes were identified and fixed by Victor " +"Stinner using his :pep:`445`-based ``pyfailmalloc`` tool (:issue:`18408`, " +":issue:`18520`)." +msgstr "" +"多个有关 MemoryError 的崩溃问题被 Victor Stinner 使用他基于 :pep:`445` 的 ``pyfailmalloc`` " +"工具加以确定并修复 (:issue:`18408`, :issue:`18520`)。" + +#: ../../whatsnew/3.4.rst:1992 +msgid "" +"The ``pyvenv`` command now accepts a ``--copies`` option to use copies " +"rather than symlinks even on systems where symlinks are the default. " +"(Contributed by Vinay Sajip in :issue:`18807`.)" +msgstr "" +"现在 ``pyvenv`` 命令接受一个 ``--copies`` 选项以使用拷贝而不是符号链接,即使在默认使用符号链接的系统上也是如此。 (由 " +"Vinay Sajip 在 :issue:`18807` 中贡献。)" + +#: ../../whatsnew/3.4.rst:1996 +msgid "" +"The ``pyvenv`` command also accepts a ``--without-pip`` option to suppress " +"the otherwise-automatic bootstrapping of pip into the virtual environment. " +"(Contributed by Nick Coghlan in :issue:`19552` as part of the :pep:`453` " +"implementation.)" +msgstr "" +"``pyvenv`` 命令也接受一个 ``--without-pip`` 选项用来抑制在其他情况下将自动将 pip 初始设置到虚拟环境中。 (作为 " +":pep:`453` 实现的一部分由 Nick Coghlan 在 :issue:`19552` 中贡献。)" + +#: ../../whatsnew/3.4.rst:2001 +msgid "" +"The encoding name is now optional in the value set for the " +":envvar:`PYTHONIOENCODING` environment variable. This makes it possible to " +"set just the error handler, without changing the default encoding. " +"(Contributed by Serhiy Storchaka in :issue:`18818`.)" +msgstr "" +"现在编码格式名称在 :envvar:`PYTHONIOENCODING` 环境变量的设置值中将为可选项。 " +"这使得只设置错误处理器而不改变默认编码格式成为可能。 (由 Serhiy Storchaka 在 :issue:`18818` 中贡献。)" + +#: ../../whatsnew/3.4.rst:2006 +msgid "" +"The :mod:`bz2`, :mod:`lzma`, and :mod:`gzip` module ``open`` functions now " +"support ``x`` (exclusive creation) mode. (Contributed by Tim Heaney and " +"Vajrasky Kok in :issue:`19201`, :issue:`19222`, and :issue:`19223`.)" +msgstr "" +"现在 :mod:`bz2`, :mod:`lzma`, and :mod:`gzip` 模块的 ``open`` 函数已支持 ``x`` (独占式创建)" +" 模式。 (由 Tim Heaney 和 Vajrasky Kok 在 :issue:`19201`, :issue:`19222` 和 " +":issue:`19223` 中贡献。)" + +#: ../../whatsnew/3.4.rst:2012 +msgid "Significant Optimizations" +msgstr "显著的优化" + +#: ../../whatsnew/3.4.rst:2014 +msgid "" +"The UTF-32 decoder is now 3x to 4x faster. (Contributed by Serhiy Storchaka" +" in :issue:`14625`.)" +msgstr "" +"现在 UTF-32 解码器获得了 3x 至 4x 的提速。 (由 Serhiy Storchaka 在 :issue:`14625` 中贡献。)" + +#: ../../whatsnew/3.4.rst:2017 +msgid "" +"The cost of hash collisions for sets is now reduced. Each hash table probe " +"now checks a series of consecutive, adjacent key/hash pairs before " +"continuing to make random probes through the hash table. This exploits " +"cache locality to make collision resolution less expensive. The collision " +"resolution scheme can be described as a hybrid of linear probing and open " +"addressing. The number of additional linear probes defaults to nine. This " +"can be changed at compile-time by defining LINEAR_PROBES to be any value. " +"Set LINEAR_PROBES=0 to turn-off linear probing entirely. (Contributed by " +"Raymond Hettinger in :issue:`18771`.)" +msgstr "" +"针对集合的哈希碰撞的耗费现在已被降低。 每次哈希表检测现在会先检查一系列连续的、相邻的键/哈希值对再继续对整个哈希表执行随机检测。 " +"这将利用缓存本地化来使得碰撞求解付出较少代价。 这种碰撞求解方案可被描述为线性检测和开放寻址的结合。 额外的线性检测数默认为九次。 这可以在编译时通过将" +" LINEAR_PROBES 定义为任意值来修改。 设置 LINEAR_PROBES=0 可完全关闭线性检测。 (由 Raymond Hettinger" +" 在 :issue:`18771` 中贡献。)" + +#: ../../whatsnew/3.4.rst:2028 +msgid "" +"The interpreter starts about 30% faster. A couple of measures lead to the " +"speedup. The interpreter loads fewer modules on startup, e.g. the :mod:`re`," +" :mod:`collections` and :mod:`locale` modules and their dependencies are no " +"longer imported by default. The marshal module has been improved to load " +"compiled Python code faster. (Contributed by Antoine Pitrou, Christian " +"Heimes and Victor Stinner in :issue:`19219`, :issue:`19218`, :issue:`19209`," +" :issue:`19205` and :issue:`9548`.)" +msgstr "" +"解释器启动速度加快了约 30%。 多项措施促成了此次加速。 解释器在启动时加载的模块有所减少,例如 :mod:`re`, " +":mod:`collections` 和 :mod:`locale` 模块及其依赖默认不再被导入。 marshal 模块得到改进以便更快速地加载已编译的" +" Python 代码。 (由 Antoine Pitrou, Christian Heimes 和 Victor Stinner 在 " +":issue:`19219`, :issue:`19218`, :issue:`19209`, :issue:`19205` 和 " +":issue:`9548` 中贡献。)" + +#: ../../whatsnew/3.4.rst:2036 +msgid "" +":class:`bz2.BZ2File` is now as fast or faster than the Python2 version for " +"most cases. :class:`lzma.LZMAFile` has also been optimized. (Contributed " +"by Serhiy Storchaka and Nadeem Vawda in :issue:`16034`.)" +msgstr "" +"现在 :class:`bz2.BZ2File` 在多数情况下相比 Python2 版本速度都一样快更快或。 :class:`lzma.LZMAFile`" +" 也获得了优化。 (由 Serhiy Storchaka 和 Nadeem Vawda 在 :issue:`16034` 中贡献。)" + +#: ../../whatsnew/3.4.rst:2040 +msgid "" +":func:`random.getrandbits` is 20%-40% faster for small integers (the most " +"common use case). (Contributed by Serhiy Storchaka in :issue:`16674`.)" +msgstr "" +":func:`random.getrandbits` 对于小整数(最常见的应用场景)可加速 20%-40%。 (由 Serhiy Storchaka 在" +" :issue:`16674` 中贡献。)" + +#: ../../whatsnew/3.4.rst:2043 +msgid "" +"By taking advantage of the new storage format for strings, pickling of " +"strings is now significantly faster. (Contributed by Victor Stinner and " +"Antoine Pitrou in :issue:`15596`.)" +msgstr "" +"得益于字符串的新存储格式,对字符串执行 pickle 操作现在将有明显加速。 (由 Victor Stinner 和 Antoine Pitrou 在 " +":issue:`15596` 中贡献。)" + +#: ../../whatsnew/3.4.rst:2047 +msgid "" +"A performance issue in :meth:`io.FileIO.readall` has been solved. This " +"particularly affects Windows, and significantly speeds up the case of piping" +" significant amounts of data through :mod:`subprocess`. (Contributed by " +"Richard Oudkerk in :issue:`15758`.)" +msgstr "" +"一个 :meth:`io.FileIO.readall` 中的性能问题已被解决。 这对 Windows 有更具体的情况,将显著地提升通过 " +":mod:`subprocess` 以管道方式传递大量数据这一应用场景下的速度。 (由 Richard Oudkerk 在 :issue:`15758`" +" 中贡献。)" + +#: ../../whatsnew/3.4.rst:2052 +msgid "" +":func:`html.escape` is now 10x faster. (Contributed by Matt Bryant in " +":issue:`18020`.)" +msgstr "" +"现在 :func:`html.escape` 获得了 10x 速度提升。 (由 Matt Bryant 在 :issue:`18020` 中贡献。)" + +#: ../../whatsnew/3.4.rst:2055 +msgid "" +"On Windows, the native ``VirtualAlloc`` is now used instead of the CRT " +"``malloc`` in ``obmalloc``. Artificial benchmarks show about a 3% memory " +"savings." +msgstr "" +"在 Windows 上,现在将使用原生的 ``VirtualAlloc`` 而不是 ``obmalloc`` 中的 CRT ``malloc``。 " +"人工基准测试显示可节省约 3% 的内存。" + +#: ../../whatsnew/3.4.rst:2059 +msgid "" +":func:`os.urandom` now uses a lazily-opened persistent file descriptor so as" +" to avoid using many file descriptors when run in parallel from multiple " +"threads. (Contributed by Antoine Pitrou in :issue:`18756`.)" +msgstr "" + +#: ../../whatsnew/3.4.rst:2067 +msgid "Deprecated" +msgstr "弃用" + +#: ../../whatsnew/3.4.rst:2069 +msgid "" +"This section covers various APIs and other features that have been " +"deprecated in Python 3.4, and will be removed in Python 3.5 or later. In " +"most (but not all) cases, using the deprecated APIs will produce a " +":exc:`DeprecationWarning` when the interpreter is run with deprecation " +"warnings enabled (for example, by using ``-Wd``)." +msgstr "" +"本小节列出了已在 Python 3.4 中弃用,并将在 Python 3.5 或之后的版本中移除的各种 API 和其他特性。 " +"在大多数(但并非全部)情况下,在解释器运行时设置了弃用警告时(例如通过使用 ``-Wd`` 选项)使用已弃用的 API 将产生 " +":exc:`DeprecationWarning`。" + +#: ../../whatsnew/3.4.rst:2077 +msgid "Deprecations in the Python API" +msgstr "Python API 中的弃用" + +#: ../../whatsnew/3.4.rst:2079 +msgid "" +"As mentioned in :ref:`whatsnew-pep-451`, a number of :mod:`importlib` " +"methods and functions are deprecated: :meth:`importlib.find_loader` is " +"replaced by :func:`importlib.util.find_spec`; " +":meth:`importlib.machinery.PathFinder.find_module` is replaced by " +":meth:`importlib.machinery.PathFinder.find_spec`; " +":meth:`importlib.abc.MetaPathFinder.find_module` is replaced by " +":meth:`importlib.abc.MetaPathFinder.find_spec`; " +":meth:`importlib.abc.PathEntryFinder.find_loader` and " +":meth:`~importlib.abc.PathEntryFinder.find_module` are replaced by " +":meth:`importlib.abc.PathEntryFinder.find_spec`; all of the ``xxxLoader`` " +"ABC ``load_module`` methods (:meth:`importlib.abc.Loader.load_module`, " +":meth:`importlib.abc.InspectLoader.load_module`, " +":meth:`importlib.abc.FileLoader.load_module`, " +":meth:`importlib.abc.SourceLoader.load_module`) should no longer be " +"implemented, instead loaders should implement an ``exec_module`` method " +"(:meth:`importlib.abc.Loader.exec_module`, " +":meth:`importlib.abc.InspectLoader.exec_module` " +":meth:`importlib.abc.SourceLoader.exec_module`) and let the import system " +"take care of the rest; and :meth:`importlib.abc.Loader.module_repr`, " +":meth:`importlib.util.module_for_loader`, :meth:`importlib.util.set_loader`," +" and :meth:`importlib.util.set_package` are no longer needed because their " +"functions are now handled automatically by the import system." +msgstr "" + +#: ../../whatsnew/3.4.rst:2104 +msgid "" +"The :mod:`imp` module is pending deprecation. To keep compatibility with " +"Python 2/3 code bases, the module's removal is currently not scheduled." +msgstr "" + +#: ../../whatsnew/3.4.rst:2107 +msgid "" +"The :mod:`formatter` module is pending deprecation and is slated for removal" +" in Python 3.6." +msgstr ":mod:`formatter` 模块已被弃用并计划在 Python 3.6 中移除。" + +#: ../../whatsnew/3.4.rst:2110 +msgid "" +"``MD5`` as the default *digestmod* for the :func:`hmac.new` function is " +"deprecated. Python 3.6 will require an explicit digest name or constructor " +"as *digestmod* argument." +msgstr "" +"将 ``MD5`` 作为 :func:`hmac.new` 函数的默认 *digestmod* 的设置已被弃用。 Python 3.6 " +"将要求以一个显式的摘要名称或构造器作为 *digestmod* 参数。" + +#: ../../whatsnew/3.4.rst:2114 +msgid "" +"The internal ``Netrc`` class in the :mod:`ftplib` module has been documented" +" as deprecated in its docstring for quite some time. It now emits a " +":exc:`DeprecationWarning` and will be removed completely in Python 3.5." +msgstr "" +"很长一段时间以来 :mod:`ftplib` 模块中的内部 ``Netrc`` 类在其文档字符串中被声明为已弃用。 现在它将发出 " +":exc:`DeprecationWarning` 并将在 Python 3.5 中完全移除。" + +#: ../../whatsnew/3.4.rst:2118 +msgid "" +"The undocumented *endtime* argument to :meth:`subprocess.Popen.wait` should " +"not have been exposed and is hopefully not in use; it is deprecated and will" +" mostly likely be removed in Python 3.5." +msgstr "" +"传给 :meth:`subprocess.Popen.wait` 的未写入文档的 *endtime* 参数不应被公开也不应被使用;它已被弃用并很可能在 " +"Python 3.5 中移除。" + +#: ../../whatsnew/3.4.rst:2122 +msgid "" +"The *strict* argument of :class:`~html.parser.HTMLParser` is deprecated." +msgstr ":class:`~html.parser.HTMLParser` 的 *strict* 参数已被弃用。" + +#: ../../whatsnew/3.4.rst:2124 +msgid "" +"The :mod:`plistlib` :func:`~plistlib.readPlist`, " +":func:`~plistlib.writePlist`, :func:`~plistlib.readPlistFromBytes`, and " +":func:`~plistlib.writePlistToBytes` functions are deprecated in favor of the" +" corresponding new functions :func:`~plistlib.load`, :func:`~plistlib.dump`," +" :func:`~plistlib.loads`, and :func:`~plistlib.dumps`. " +":func:`~plistlib.Data` is deprecated in favor of just using the " +":class:`bytes` constructor." +msgstr "" +":mod:`plistlib` :func:`~plistlib.readPlist`, :func:`~plistlib.writePlist`, " +":func:`~plistlib.readPlistFromBytes` 和 :func:`~plistlib.writePlistToBytes` " +"等函数已被弃用而应改用相应的新函数 :func:`~plistlib.load`, :func:`~plistlib.dump`, " +":func:`~plistlib.loads` 和 :func:`~plistlib.dumps`。 :func:`~plistlib.Data` " +"已被弃用而应直接使用 :class:`bytes` 构造器。" + +#: ../../whatsnew/3.4.rst:2131 +msgid "" +"The :mod:`sysconfig` key ``SO`` is deprecated, it has been replaced by " +"``EXT_SUFFIX``." +msgstr ":mod:`sysconfig` 的键 ``SO`` 已被弃用,它已被 ``EXT_SUFFIX`` 所替代。" + +#: ../../whatsnew/3.4.rst:2134 +msgid "" +"The ``U`` mode accepted by various ``open`` functions is deprecated. In " +"Python3 it does not do anything useful, and should be replaced by " +"appropriate uses of :class:`io.TextIOWrapper` (if needed) and its *newline* " +"argument." +msgstr "" +"各种 ``open`` 函数所接受的 ``U`` 模式已被弃用。 在 Python3 中它已不再有任何实际作用,并应当改用适当的 " +":class:`io.TextIOWrapper` (如有必要) 及其 *newline* 参数。" + +#: ../../whatsnew/3.4.rst:2139 +msgid "" +"The *parser* argument of :func:`xml.etree.ElementTree.iterparse` has been " +"deprecated, as has the *html* argument of " +":func:`~xml.etree.ElementTree.XMLParser`. To prepare for the removal of the" +" latter, all arguments to ``XMLParser`` should be passed by keyword." +msgstr "" +":func:`xml.etree.ElementTree.iterparse` 的 *parser* 参数,就如 " +":func:`~xml.etree.ElementTree.XMLParser` 的 *html* 参数一样。 要对后者的移除做好准备,所有 " +"``XMLParser`` 的参数都应当以关键字形式传入。" + +#: ../../whatsnew/3.4.rst:2146 +msgid "Deprecated Features" +msgstr "弃用的特性" + +#: ../../whatsnew/3.4.rst:2148 +msgid "" +"Running :ref:`idle` with the ``-n`` flag (no subprocess) is deprecated. " +"However, the feature will not be removed until :issue:`18823` is resolved." +msgstr "" +"运行 :ref:`idle` 时附带 ``-n`` 旗标(无子进程)的做法已被弃用。 但是,该特性在 :issue:`18823` " +"解决之前将不会被移除。" + +#: ../../whatsnew/3.4.rst:2151 +msgid "" +"The site module adding a \"site-python\" directory to sys.path, if it " +"exists, is deprecated (:issue:`19375`)." +msgstr "site 模块在 \"site-python\" 目录存在的情况下 sys.path 添加该目录的做法已被弃用 (:issue:`19375`)。" + +#: ../../whatsnew/3.4.rst:2157 +msgid "Removed" +msgstr "移除" + +#: ../../whatsnew/3.4.rst:2161 +msgid "Operating Systems No Longer Supported" +msgstr "不再支持的操作系统" + +#: ../../whatsnew/3.4.rst:2163 +msgid "" +"Support for the following operating systems has been removed from the source" +" and build tools:" +msgstr "从源代码和构建工具中删除了对以下操作系统的支持:" + +#: ../../whatsnew/3.4.rst:2166 +msgid "OS/2 (:issue:`16135`)." +msgstr "OS/2 (:issue:`16135`)." + +#: ../../whatsnew/3.4.rst:2167 +msgid "Windows 2000 (changeset e52df05b496a)." +msgstr "Windows 2000(变更集e52df05b496a)。" + +#: ../../whatsnew/3.4.rst:2168 +msgid "" +"Windows systems where ``COMSPEC`` points to ``command.com`` " +"(:issue:`14470`)." +msgstr "Windows系统中 ``COMSPEC`` 指向 ``command.com`` 的版本( :issue:`14470` )。" + +#: ../../whatsnew/3.4.rst:2169 +msgid "VMS (:issue:`16136`)." +msgstr "VMS (:issue:`16136`)." + +#: ../../whatsnew/3.4.rst:2173 +msgid "API and Feature Removals" +msgstr "API 与特性的移除" + +#: ../../whatsnew/3.4.rst:2175 +msgid "" +"The following obsolete and previously deprecated APIs and features have been" +" removed:" +msgstr "以下过时并在之前版本中弃用的 API 和特性现已被移除:" + +#: ../../whatsnew/3.4.rst:2178 +msgid "" +"The unmaintained ``Misc/TextMate`` and ``Misc/vim`` directories have been " +"removed (see the `devguide `_ for suggestions " +"on what to use instead)." +msgstr "" +"不再继续维护的 ``Misc/TextMate`` 和 ``Misc/vim`` 目录已被移除(请参阅 `devguide " +"`_ 了解相关替代器的使用建议)。" + +#: ../../whatsnew/3.4.rst:2182 +msgid "" +"The ``SO`` makefile macro is removed (it was replaced by the " +"``SHLIB_SUFFIX`` and ``EXT_SUFFIX`` macros) (:issue:`16754`)." +msgstr "" +"``SO`` makefile 宏已被移除(被 ``SHLIB_SUFFIX`` 和 ``EXT_SUFFIX`` 宏所替代) " +"(:issue:`16754`)。" + +#: ../../whatsnew/3.4.rst:2185 +msgid "" +"The ``PyThreadState.tick_counter`` field has been removed; its value has " +"been meaningless since Python 3.2, when the \"new GIL\" was introduced " +"(:issue:`19199`)." +msgstr "" +"``PyThreadState.tick_counter`` 字段已被移除;该字段值自 Python 3.2 即 \"新 GIL\" " +"被引入时起就不再有意义了 (:issue:`19199`)。" + +#: ../../whatsnew/3.4.rst:2189 +msgid "" +"``PyLoader`` and ``PyPycLoader`` have been removed from :mod:`importlib`. " +"(Contributed by Taras Lyapun in :issue:`15641`.)" +msgstr "" +"``PyLoader`` 和 ``PyPycLoader`` 已从 :mod:`importlib` 中移除。 (由 Taras Lyapun 在 " +":issue:`15641` 中贡献。)" + +#: ../../whatsnew/3.4.rst:2192 +msgid "" +"The *strict* argument to :class:`~http.client.HTTPConnection` and " +":class:`~http.client.HTTPSConnection` has been removed. HTTP 0.9-style " +"\"Simple Responses\" are no longer supported." +msgstr "" +":class:`~http.client.HTTPConnection` 和 :class:`~http.client.HTTPSConnection`" +" 的 *strict* 参数已被移除。 HTTP 0.9 风格的 \"简单响应\" 不再受到支持。" + +#: ../../whatsnew/3.4.rst:2196 +msgid "" +"The deprecated :mod:`urllib.request.Request` getter and setter methods " +"``add_data``, ``has_data``, ``get_data``, ``get_type``, ``get_host``, " +"``get_selector``, ``set_proxy``, ``get_origin_req_host``, and " +"``is_unverifiable`` have been removed (use direct attribute access instead)." +msgstr "" +"被弃用的 :mod:`urllib.request.Request` 读取和设置方法 ``add_data``, ``has_data``, " +"``get_data``, ``get_type``, ``get_host``, ``get_selector``, ``set_proxy``, " +"``get_origin_req_host`` 和 ``is_unverifiable`` 已被移除(请改为直接属性访问)。" + +#: ../../whatsnew/3.4.rst:2201 +msgid "" +"Support for loading the deprecated ``TYPE_INT64`` has been removed from " +":mod:`marshal`. (Contributed by Dan Riti in :issue:`15480`.)" +msgstr "" +"对加载已弃用的 ``TYPE_INT64`` 的支持已从 :mod:`marshal` 中被移除。 (由 Dan Riti 在 " +":issue:`15480` 中贡献。)" + +#: ../../whatsnew/3.4.rst:2204 +msgid "" +":class:`inspect.Signature`: positional-only parameters are now required to " +"have a valid name." +msgstr ":class:`inspect.Signature`: 仅限位置形参现在需要有一个合法的名称。" + +#: ../../whatsnew/3.4.rst:2207 +msgid "" +":meth:`object.__format__` no longer accepts non-empty format strings, it now" +" raises a :exc:`TypeError` instead. Using a non-empty string has been " +"deprecated since Python 3.2. This change has been made to prevent a " +"situation where previously working (but incorrect) code would start failing " +"if an object gained a __format__ method, which means that your code may now " +"raise a :exc:`TypeError` if you are using an ``'s'`` format code with " +"objects that do not have a __format__ method that handles it. See " +":issue:`7994` for background." +msgstr "" +":meth:`object.__format__` 不再接受非空格式字符串,它现在会改为引发 :exc:`TypeError`。 使用非空字符串自 " +"Python 3.2 起已被弃用。 做出此项改变是为了防止当对象获得 __format__ " +"方法时之前可用(但不正确)的代码执行失败的情况,这意味着现在当你对没有用于处理 ``'s'`` 的 __format__ " +"方法的对象使用该格式代码时你的代码可能会引发 :exc:`TypeError`。 请参阅 :issue:`7994` 了解相关背景。" + +#: ../../whatsnew/3.4.rst:2216 +msgid "" +":meth:`difflib.SequenceMatcher.isbjunk` and " +":meth:`difflib.SequenceMatcher.isbpopular` were deprecated in 3.2, and have " +"now been removed: use ``x in sm.bjunk`` and ``x in sm.bpopular``, where *sm*" +" is a :class:`~difflib.SequenceMatcher` object (:issue:`13248`)." +msgstr "" +":meth:`difflib.SequenceMatcher.isbjunk` 和 " +":meth:`difflib.SequenceMatcher.isbpopular` 已在 3.2 中被弃用,现在已被移除:请使用 ``x in " +"sm.bjunk`` 和 ``x in sm.bpopular``,其中 *sm* 是一个 " +":class:`~difflib.SequenceMatcher` 对象 (:issue:`13248`)。" + +#: ../../whatsnew/3.4.rst:2224 +msgid "Code Cleanups" +msgstr "代码清理" + +#: ../../whatsnew/3.4.rst:2226 +msgid "" +"The unused and undocumented internal ``Scanner`` class has been removed from" +" the :mod:`pydoc` module." +msgstr "未被使用并且未写入文档的内部 ``Scanner`` 类已从 :mod:`pydoc` 模块中移除。" + +#: ../../whatsnew/3.4.rst:2229 +msgid "" +"The private and effectively unused ``_gestalt`` module has been removed, " +"along with the private :mod:`platform` functions ``_mac_ver_lookup``, " +"``_mac_ver_gstalt``, and ``_bcd2str``, which would only have ever been " +"called on badly broken OSX systems (see :issue:`18393`)." +msgstr "" +"私有并且实际未使用的 ``_gestalt`` 模块已被移除,同时移除了私有的 :mod:`platform` 函数 " +"``_mac_ver_lookup``, ``_mac_ver_gstalt`` 和 ``_bcd2str``,它们仅会在严重过时的 OSX " +"系统上被调用 (参见 :issue:`18393`)。" + +#: ../../whatsnew/3.4.rst:2234 +msgid "" +"The hardcoded copies of certain :mod:`stat` constants that were included in " +"the :mod:`tarfile` module namespace have been removed." +msgstr "曾经包括于 :mod:`tarfile` 模块命名空间的某些 :mod:`stat` 常量的硬编码副本已被移除。" + +#: ../../whatsnew/3.4.rst:2240 +msgid "Porting to Python 3.4" +msgstr "移植到 Python 3.4" + +#: ../../whatsnew/3.4.rst:2242 +msgid "" +"This section lists previously described changes and other bugfixes that may " +"require changes to your code." +msgstr "本节列出了先前描述的更改以及可能需要更改代码的其他错误修正." + +#: ../../whatsnew/3.4.rst:2247 +msgid "Changes in 'python' Command Behavior" +msgstr " 'python' 命令行为的变化" + +#: ../../whatsnew/3.4.rst:2249 +msgid "" +"In a posix shell, setting the :envvar:`PATH` environment variable to an " +"empty value is equivalent to not setting it at all. However, setting " +":envvar:`PYTHONPATH` to an empty value was *not* equivalent to not setting " +"it at all: setting :envvar:`PYTHONPATH` to an empty value was equivalent to " +"setting it to ``.``, which leads to confusion when reasoning by analogy to " +"how :envvar:`PATH` works. The behavior now conforms to the posix convention" +" for :envvar:`PATH`." +msgstr "" +"在 posix shell 中,将 :envvar:`PATH` 环境变量设为空值就等于完全不设置。 不过,将 :envvar:`PYTHONPATH`" +" 设为空值则 *不等于* 完全不设置:将 :envvar:`PYTHONPATH` 设为空值等于将其设为 ``.``,这在类 " +":envvar:`PATH` 运作方式来进行理解时会导致困惑。 现在的行为将与 posix 中 :envvar:`PATH` 的惯例保持一致。" + +#: ../../whatsnew/3.4.rst:2257 +msgid "" +"The [X refs, Y blocks] output of a debug (``--with-pydebug``) build of the " +"CPython interpreter is now off by default. It can be re-enabled using the " +"``-X showrefcount`` option. (Contributed by Ezio Melotti in " +":issue:`17323`.)" +msgstr "" +"现在 CPython 解释器的调试构建版 (``--with-pydebug``) 的 [X refs, Y blocks] 输出默认将关闭。 可以使用" +" ``-X showrefcount`` 选项来重新启用它。 (由 Ezio Melotti 在 :issue:`17323` 中贡献。)" + +#: ../../whatsnew/3.4.rst:2261 +msgid "" +"The python command and most stdlib scripts (as well as :mod:`argparse`) now " +"output ``--version`` information to ``stdout`` instead of ``stderr`` (for " +"issue list see :ref:`other-improvements-3.4` above)." +msgstr "" +"现在 python 命令和大多数标准库脚本(和 :mod:`argparse` 一样)会将 ``--version`` 信息输出到 ``stdout``" +" 而不是 ``stderr`` (相关问题列表参见上面的 :ref:`other-improvements-3.4`)。" + +#: ../../whatsnew/3.4.rst:2267 +msgid "Changes in the Python API" +msgstr "Python API 的变化" + +#: ../../whatsnew/3.4.rst:2269 +msgid "" +"The ABCs defined in :mod:`importlib.abc` now either raise the appropriate " +"exception or return a default value instead of raising " +":exc:`NotImplementedError` blindly. This will only affect code calling " +":func:`super` and falling through all the way to the ABCs. For " +"compatibility, catch both :exc:`NotImplementedError` or the appropriate " +"exception as needed." +msgstr "" +"在 :mod:`importlib.abc` 中定义的 ABC 现在将会引发适当的异常或是返回默认值而不是无脑引发 " +":exc:`NotImplementedError`。 这将只影响调用 :func:`super` 并一路下落到这些 ABC 的代码。 " +"为保持兼容性,:exc:`NotImplementedError` 和所需的相应异常都要被捕获。" + +#: ../../whatsnew/3.4.rst:2275 +msgid "" +"The module type now initializes the :attr:`__package__` and " +":attr:`__loader__` attributes to ``None`` by default. To determine if these " +"attributes were set in a backwards-compatible fashion, use e.g. " +"``getattr(module, '__loader__', None) is not None``. (:issue:`17115`.)" +msgstr "" + +#: ../../whatsnew/3.4.rst:2280 +msgid "" +":meth:`importlib.util.module_for_loader` now sets ``__loader__`` and " +"``__package__`` unconditionally to properly support reloading. If this is " +"not desired then you will need to set these attributes manually. You can use" +" :func:`importlib.util.module_to_load` for module management." +msgstr "" + +#: ../../whatsnew/3.4.rst:2285 +msgid "" +"Import now resets relevant attributes (e.g. ``__name__``, ``__loader__``, " +"``__package__``, ``__file__``, ``__cached__``) unconditionally when " +"reloading. Note that this restores a pre-3.3 behavior in that it means a " +"module is re-found when re-loaded (:issue:`19413`)." +msgstr "" +"当重载时 import 操作现在会无条件地重置相关属性 (例如 ``__name__``, ``__loader__``, " +"``__package__``, ``__file__``, ``__cached__``)。 请注意在模块重载时会被重发现这一点上该操作恢复了 3.3" +" 之前的行为 (:issue:`19413`)。" + +#: ../../whatsnew/3.4.rst:2290 +msgid "" +"Frozen packages no longer set ``__path__`` to a list containing the package " +"name, they now set it to an empty list. The previous behavior could cause " +"the import system to do the wrong thing on submodule imports if there was " +"also a directory with the same name as the frozen package. The correct way " +"to determine if a module is a package or not is to use ``hasattr(module, " +"'__path__')`` (:issue:`18065`)." +msgstr "" +"冻结的包将不再把 ``__path__`` 设为一个包含包名的列表,它们现在会把它设为一个空列表。 " +"当存在与冻结的包同名的目录时之前版本的行为可能会使导入系统错误地处理子模块。 确定一个模块是否属于包的正确方式是使用 ``hasattr(module," +" '__path__')`` (:issue:`18065`)。" + +#: ../../whatsnew/3.4.rst:2297 +msgid "" +"Frozen modules no longer define a ``__file__`` attribute. It's semantically " +"incorrect for frozen modules to set the attribute as they are not loaded " +"from any explicit location. If you must know that a module comes from frozen" +" code then you can see if the module's ``__spec__.location`` is set to " +"``'frozen'``, check if the loader is a subclass of " +":class:`importlib.machinery.FrozenImporter`, or if Python 2 compatibility is" +" necessary you can use :func:`imp.is_frozen`." +msgstr "" + +#: ../../whatsnew/3.4.rst:2305 +msgid "" +":func:`py_compile.compile` now raises :exc:`FileExistsError` if the file " +"path it would write to is a symlink or a non-regular file. This is to act as" +" a warning that import will overwrite those files with a regular file " +"regardless of what type of file path they were originally." +msgstr "" +"现在 :func:`py_compile.compile` 在它要写入的文件路径是符号链接或非常规文件时会引发 " +":exc:`FileExistsError`。 这是为了提示导入系统将用一个常规文件覆盖相应文件而不管原始文件路径是什么类型而发出警告。" + +#: ../../whatsnew/3.4.rst:2310 +msgid "" +":meth:`importlib.abc.SourceLoader.get_source` no longer raises " +":exc:`ImportError` when the source code being loaded triggers a " +":exc:`SyntaxError` or :exc:`UnicodeDecodeError`. As :exc:`ImportError` is " +"meant to be raised only when source code cannot be found but it should, it " +"was felt to be over-reaching/overloading of that meaning when the source " +"code is found but improperly structured. If you were catching ImportError " +"before and wish to continue to ignore syntax or decoding issues, catch all " +"three exceptions now." +msgstr "" +"当被加载的源代码触发了 :exc:`SyntaxError` 或 :exc:`UnicodeDecodeError` 时 " +":meth:`importlib.abc.SourceLoader.get_source` 将不再引发 :exc:`ImportError`。 因为 " +":exc:`ImportError` 本意只是在应该找到源代码但却找不到时被引发,而在源代码已找到但结构不正确时使用此异常会感觉有些过度/过载。 " +"如果你在之前是捕获 ImportError 并希望继续忽略语法或解码问题,现在应当捕获所有这三个异常。" + +#: ../../whatsnew/3.4.rst:2319 +msgid "" +":func:`functools.update_wrapper` and :func:`functools.wraps` now correctly " +"set the ``__wrapped__`` attribute to the function being wrapped, even if " +"that function also had its ``__wrapped__`` attribute set. This means " +"``__wrapped__`` attributes now correctly link a stack of decorated functions" +" rather than every ``__wrapped__`` attribute in the chain referring to the " +"innermost function. Introspection libraries that assumed the previous " +"behaviour was intentional can use :func:`inspect.unwrap` to access the first" +" function in the chain that has no ``__wrapped__`` attribute." +msgstr "" +"现在 :func:`functools.update_wrapper` 和 :func:`functools.wraps` 会正确地将 " +"``__wrapped__`` 属性设为被包装的函数,即使该函数同样设置了 ``__wrapped__`` 属性。 这意味着 " +"``__wrapped__`` 属性现在会正确地链接由被装饰函数组成的栈而不是链中指向最内层函数的的每个 ``__wrapped__`` 属性。 " +"确定要沿袭之前版本行为的内省库可以使用 :func:`inspect.unwrap` 来访问链中没有 ``__wrapped__`` 属性的第一个函数。" + +#: ../../whatsnew/3.4.rst:2329 +msgid "" +":func:`inspect.getfullargspec` has been reimplemented on top of " +":func:`inspect.signature` and hence handles a much wider variety of callable" +" objects than it did in the past. It is expected that additional builtin and" +" extension module callables will gain signature metadata over the course of " +"the Python 3.4 series. Code that assumes that :func:`inspect.getfullargspec`" +" will fail on non-Python callables may need to be adjusted accordingly." +msgstr "" +":func:`inspect.getfullargspec` 已在 :func:`inspect.signature` " +"之上重新实现因而能够处理比之前更多种类的可调用对象。 预计在 Python 3.4 系列发布过程中将会有更多内置和扩展模块的可调用对象获得签名元数据。 " +"假定 :func:`inspect.getfullargspec` 会在非 Python 可调用对象上出错的代码可能需要做相应的调整。" + +#: ../../whatsnew/3.4.rst:2337 +msgid "" +":class:`importlib.machinery.PathFinder` now passes on the current working " +"directory to objects in :data:`sys.path_hooks` for the empty string. This " +"results in :data:`sys.path_importer_cache` never containing ``''``, thus " +"iterating through :data:`sys.path_importer_cache` based on :data:`sys.path` " +"will not find all keys. A module's ``__file__`` when imported in the current" +" working directory will also now have an absolute path, including when using" +" ``-m`` with the interpreter (except for ``__main__.__file__`` when a script" +" has been executed directly using a relative path) (Contributed by Brett " +"Cannon in :issue:`18416`). is specified on the command-line) " +"(:issue:`18416`)." +msgstr "" +"对于空字符串 :class:`importlib.machinery.PathFinder` 现在会将当前工作目录传给 " +":data:`sys.path_hooks` 中的对象。 这导致 :data:`sys.path_importer_cache` 绝不会包含 " +"``''``,因此基于 :data:`sys.path` 迭代 :data:`sys.path_importer_cache` 将不无找出所有的键。 " +"当从当前工作目录导入时模块的 ``__file__`` 现在也将是一个绝对路径,包括在命令行中指定解释器使用 ``-m`` " +"的情况(但当一个脚本已经直接使用相对路径被执行时的 ``__main__.__file__`` 除外) (由 Brett Cannon 在 " +":issue:`18416` 中贡献)。 (:issue:`18416`)。" + +#: ../../whatsnew/3.4.rst:2348 +msgid "" +"The removal of the *strict* argument to :class:`~http.client.HTTPConnection`" +" and :class:`~http.client.HTTPSConnection` changes the meaning of the " +"remaining arguments if you are specifying them positionally rather than by " +"keyword. If you've been paying attention to deprecation warnings your code " +"should already be specifying any additional arguments via keywords." +msgstr "" +"传给 :class:`~http.client.HTTPConnection` 和 " +":class:`~http.client.HTTPSConnection` 的 *strict* " +"参数被移除会改变剩余参数的含义,如果你是以位置参数而不是关键字参数方式指定它们的话。 " +"如果你已经注意到弃用警告那么你的代码应当已经通过关键字参数方式指定所有额外参数了。" + +#: ../../whatsnew/3.4.rst:2354 +msgid "" +"Strings between ``from __future__ import ...`` statements now *always* raise" +" a :exc:`SyntaxError`. Previously if there was no leading docstring, an " +"interstitial string would sometimes be ignored. This brings CPython into " +"compliance with the language spec; Jython and PyPy already were. " +"(:issue:`17434`)." +msgstr "" +"现在 ``from __future__ import ...`` 语句之间的字符串 *总是* 会引发 :exc:`SyntaxError`。 " +"在之前版本中如果没有开头的文档字符串,则中间的字符串有时会被忽略。 这使得 CPython 与语言规范保持一致;Jython 和 PyPy " +"已经是这样了。 (:issue:`17434`)。" + +#: ../../whatsnew/3.4.rst:2360 +msgid "" +":meth:`ssl.SSLSocket.getpeercert` and :meth:`ssl.SSLSocket.do_handshake` now" +" raise an :exc:`OSError` with ``ENOTCONN`` when the ``SSLSocket`` is not " +"connected, instead of the previous behavior of raising an " +":exc:`AttributeError`. In addition, :meth:`~ssl.SSLSocket.getpeercert` will" +" raise a :exc:`ValueError` if the handshake has not yet been done." +msgstr "" +"当 ``SSLSocket`` 未连接时 :meth:`ssl.SSLSocket.getpeercert` 和 " +":meth:`ssl.SSLSocket.do_handshake` 现在会引发 :exc:`OSError` 并附带 " +"``ENOTCONN``,而非如之前版本的行为那样引发 :exc:`AttributeError`。 此外,当握手尚未完成时 " +":meth:`~ssl.SSLSocket.getpeercert` 将会引发 :exc:`ValueError`。" + +#: ../../whatsnew/3.4.rst:2366 +msgid "" +":func:`base64.b32decode` now raises a :exc:`binascii.Error` when the input " +"string contains non-b32-alphabet characters, instead of a :exc:`TypeError`." +" This particular :exc:`TypeError` was missed when the other " +":exc:`TypeError`\\ s were converted. (Contributed by Serhiy Storchaka in " +":issue:`18011`.) Note: this change was also inadvertently applied in Python" +" 3.3.3." +msgstr "" +"当输入字符串包含 non-b32-alphabet 字符时 :func:`base64.b32decode` 现在会引发 " +":exc:`binascii.Error`,而不是 :exc:`TypeError`。 之前在其他 :exc:`TypeError` 被转换时这个 " +":exc:`TypeError` 被忽略了。 (由 Serhiy Storchaka 在 :issue:`18011` 中贡献。) " +"注意:这项修改也被非故意地应用到了 Python 3.3.3。" + +#: ../../whatsnew/3.4.rst:2373 +msgid "" +"The :attr:`~cgi.FieldStorage.file` attribute is now automatically closed " +"when the creating :class:`cgi.FieldStorage` instance is garbage collected. " +"If you were pulling the file object out separately from the " +":class:`cgi.FieldStorage` instance and not keeping the instance alive, then " +"you should either store the entire :class:`cgi.FieldStorage` instance or " +"read the contents of the file before the :class:`cgi.FieldStorage` instance " +"is garbage collected." +msgstr "" + +#: ../../whatsnew/3.4.rst:2380 +msgid "" +"Calling ``read`` or ``write`` on a closed SSL socket now raises an " +"informative :exc:`ValueError` rather than the previous more mysterious " +":exc:`AttributeError` (:issue:`9177`)." +msgstr "" +"在已关闭的 SSL 套接字上调用 ``read`` 或 ``write`` 现在会引发更具信息量的 :exc:`ValueError` " +"而非之前更令人困惑的 :exc:`AttributeError` (:issue:`9177`)。" + +#: ../../whatsnew/3.4.rst:2384 +msgid "" +":meth:`slice.indices` no longer produces an :exc:`OverflowError` for huge " +"values. As a consequence of this fix, :meth:`slice.indices` now raises a " +":exc:`ValueError` if given a negative length; previously it returned " +"nonsense values (:issue:`14794`)." +msgstr "" +"对于巨大数值 :meth:`slice.indices` 将不再产生 :exc:`OverflowError`。 作为此项修复的结果,当给予负的长度时 " +":meth:`slice.indices` 现在会引发 :exc:`ValueError`;在之前版本中它会返回无意义的值 " +"(:issue:`14794`)。" + +#: ../../whatsnew/3.4.rst:2389 +msgid "" +"The :class:`complex` constructor, unlike the :mod:`cmath` functions, was " +"incorrectly accepting :class:`float` values if an object's ``__complex__`` " +"special method returned one. This now raises a :exc:`TypeError`. " +"(:issue:`16290`.)" +msgstr "" +"与 :mod:`cmath` 中的函数不同,当一个对象的 ``__complex__`` 特殊方法返回 :class:`float` 值时 " +":class:`complex` 构造器会不正确地接受它。 现在这会引发 :exc:`TypeError`。 (:issue:`16290`。)" + +#: ../../whatsnew/3.4.rst:2394 +msgid "" +"The :class:`int` constructor in 3.2 and 3.3 erroneously accepts " +":class:`float` values for the *base* parameter. It is unlikely anyone was " +"doing this, but if so, it will now raise a :exc:`TypeError` " +"(:issue:`16772`)." +msgstr "" +"在 3.2 和 3.3 中的 :class:`int` 构造器会错误地接受 :class:`float` 值作为 *base* 形参。 " +"多数人不太可能这样做,但如果真的如此,现在它将引发 :exc:`TypeError` (:issue:`16772`)。" + +#: ../../whatsnew/3.4.rst:2398 +msgid "" +"Defaults for keyword-only arguments are now evaluated *after* defaults for " +"regular keyword arguments, instead of before. Hopefully no one wrote any " +"code that depends on the previous buggy behavior (:issue:`16967`)." +msgstr "" +"现在仅限关键字参数的默认值将在常规关键字参数的默认值 *之后* 被求值,而非之前。 希望没有人写过任何依赖于之前的有缺陷行为的代码 " +"(:issue:`16967`)。" + +#: ../../whatsnew/3.4.rst:2402 +msgid "" +"Stale thread states are now cleared after :func:`~os.fork`. This may cause " +"some system resources to be released that previously were incorrectly kept " +"perpetually alive (for example, database connections kept in thread-local " +"storage). (:issue:`17094`.)" +msgstr "" +"现在陈旧的线程状态将在 :func:`~os.fork` 之后被清除。 " +"这可能导致某些之前被不正确地保持永久存活的系统资源(例如,保存在本线程存储中的数据库连接)被释放。 (:issue:`17094`。)" + +#: ../../whatsnew/3.4.rst:2407 +msgid "" +"Parameter names in ``__annotations__`` dicts are now mangled properly, " +"similarly to ``__kwdefaults__``. (Contributed by Yury Selivanov in " +":issue:`20625`.)" +msgstr "" + +#: ../../whatsnew/3.4.rst:2411 +msgid "" +":attr:`hashlib.hash.name` now always returns the identifier in lower case. " +"Previously some builtin hashes had uppercase names, but now that it is a " +"formal public interface the naming has been made consistent " +"(:issue:`18532`)." +msgstr "" +"现在 :attr:`hashlib.hash.name` 将总是返回小写形式的标识符。 " +"在之前版本中某些内置哈希具有大写的名称,但现在它已成为命名方式保持一致的正式公有接口 (:issue:`18532`)。" + +#: ../../whatsnew/3.4.rst:2415 +msgid "" +"Because :mod:`unittest.TestSuite` now drops references to tests after they " +"are run, test harnesses that re-use a :class:`~unittest.TestSuite` to re-run" +" a set of tests may fail. Test suites should not be re-used in this " +"fashion since it means state is retained between test runs, breaking the " +"test isolation that :mod:`unittest` is designed to provide. However, if the" +" lack of isolation is considered acceptable, the old behavior can be " +"restored by creating a :mod:`~unittest.TestSuite` subclass that defines a " +"``_removeTestAtIndex`` method that does nothing (see " +":meth:`.TestSuite.__iter__`) (:issue:`11798`)." +msgstr "" + +#: ../../whatsnew/3.4.rst:2425 +msgid "" +":mod:`unittest` now uses :mod:`argparse` for command line parsing. There " +"are certain invalid command forms that used to work that are no longer " +"allowed; in theory this should not cause backward compatibility issues since" +" the disallowed command forms didn't make any sense and are unlikely to be " +"in use." +msgstr "" +"现在 :mod:`unittest` 会使用 :mod:`argparse` 执行命令行解析。 " +"有些过去可用的不合法命令形式将不再被允许;理论上说这不会导致向下兼容性问题因为这些不允许的命令形式没有任何意义也不大可能会被使用。" + +#: ../../whatsnew/3.4.rst:2430 +msgid "" +"The :func:`re.split`, :func:`re.findall`, and :func:`re.sub` functions, and " +"the :meth:`~re.match.group` and :meth:`~re.match.groups` methods of " +"``match`` objects now always return a *bytes* object when the string to be " +"matched is a :term:`bytes-like object`. Previously the return type matched " +"the input type, so if your code was depending on the return value being, " +"say, a ``bytearray``, you will need to change your code." +msgstr "" +"现在当要匹配的对象类型为 :term:`bytes-like object` 时 :func:`re.split`, " +":func:`re.findall` 和 :func:`re.sub` 等函数,以及 ``match`` 对象的 " +":meth:`~re.match.group` 和 :meth:`~re.match.groups` 方法将总是返回 *bytes* 对象。 " +"在之前版本中返回类型将与输入类型相匹配,因此如果你的代码依赖于返回值必须为 ``bytearray`` 之类的行为,你将需要修改你的代码。" + +#: ../../whatsnew/3.4.rst:2437 +msgid "" +":mod:`audioop` functions now raise an error immediately if passed string " +"input, instead of failing randomly later on (:issue:`16685`)." +msgstr "" + +#: ../../whatsnew/3.4.rst:2440 +msgid "" +"The new *convert_charrefs* argument to :class:`~html.parser.HTMLParser` " +"currently defaults to ``False`` for backward compatibility, but will " +"eventually be changed to default to ``True``. It is recommended that you " +"add this keyword, with the appropriate value, to any " +":class:`~html.parser.HTMLParser` calls in your code (:issue:`13633`)." +msgstr "" +"新增的传给 :class:`~html.parser.HTMLParser` 的 *convert_charrefs* 参数目前默认为 " +"``False`` 以保持向下兼容,但最终将修改成默认为 ``True``。 建议你在你的代码中为所有 " +":class:`~html.parser.HTMLParser` 调用添加此关键字,并设置适当的值 (:issue:`13633`)。" + +#: ../../whatsnew/3.4.rst:2446 +msgid "" +"Since the *digestmod* argument to the :func:`hmac.new` function will in the " +"future have no default, all calls to :func:`hmac.new` should be changed to " +"explicitly specify a *digestmod* (:issue:`17276`)." +msgstr "" +"由于传给 :func:`hmac.new` 函数的 *digestmod* 参数在未来将不设默认值,所有对 :func:`hmac.new` " +"的调用都应当修改为显式地指定 *digestmod* (:issue:`17276`)。" + +#: ../../whatsnew/3.4.rst:2450 +msgid "" +"Calling :func:`sysconfig.get_config_var` with the ``SO`` key, or looking " +"``SO`` up in the results of a call to :func:`sysconfig.get_config_vars` is " +"deprecated. This key should be replaced by ``EXT_SUFFIX`` or " +"``SHLIB_SUFFIX``, depending on the context (:issue:`19555`)." +msgstr "" +"附带 ``SO`` 键调用 :func:`sysconfig.get_config_var`,或者在对 " +":func:`sysconfig.get_config_vars` 的调用结果中查找 ``SO`` 的做法已被弃用。 该键应当被 " +"``EXT_SUFFIX`` 或 ``SHLIB_SUFFIX`` 替代,由具体场景决定 (:issue:`19555`)。" + +#: ../../whatsnew/3.4.rst:2455 +msgid "" +"Any calls to ``open`` functions that specify ``U`` should be modified. ``U``" +" is ineffective in Python3 and will eventually raise an error if used. " +"Depending on the function, the equivalent of its old Python2 behavior can be" +" achieved using either a *newline* argument, or if necessary by wrapping the" +" stream in :mod:`~io.TextIOWrapper` to use its *newline* argument " +"(:issue:`15204`)." +msgstr "" +"任何指定了 ``U`` 的 ``open`` 函数调用都应当被修改。 ``U`` 在 Python3 将没有效果并且最终会在被使用时引发错误。 " +"对于该函数,要得到与它的旧 Python2 行为相同的效果可以使用 *newline* 参数,或者在必要时将流包装在 " +":mod:`~io.TextIOWrapper` 以使用其 *newline* 参数 (:issue:`15204`)。" + +#: ../../whatsnew/3.4.rst:2462 +msgid "" +"If you use ``pyvenv`` in a script and desire that pip *not* be installed, " +"you must add ``--without-pip`` to your command invocation." +msgstr "" +"如果你在脚本中使用 ``pyvenv`` 并且希望 *不要* 安装 pip,你必须在你的唤起命令中添加 ``--without-pip``。" + +#: ../../whatsnew/3.4.rst:2466 +msgid "" +"The default behavior of :func:`json.dump` and :func:`json.dumps` when an " +"indent is specified has changed: it no longer produces trailing spaces after" +" the item separating commas at the ends of lines. This will matter only if " +"you have tests that are doing white-space-sensitive comparisons of such " +"output (:issue:`16333`)." +msgstr "" +":func:`json.dump` 和 :func:`json.dumps` " +"在指定了缩进值时的默认行为已被改变:它不会在行末的条目分隔逗号后面再附加空格。 此项改变仅在你使用了对这样的输出执行空格敏感比较的测试时才会有影响 " +"(:issue:`16333`)。" + +#: ../../whatsnew/3.4.rst:2472 +msgid "" +":mod:`doctest` now looks for doctests in extension module ``__doc__`` " +"strings, so if your doctest test discovery includes extension modules that " +"have things that look like doctests in them you may see test failures you've" +" never seen before when running your tests (:issue:`3158`)." +msgstr "" +"现在 :mod:`doctest` 会在扩展模块的 ``__doc__`` 字符串中寻找 doctest,因此如果你的 doctest " +"测试发现包括具有类似 doctest 内容的扩展模块那么你可能会遇到在你之前运行测试时从未遇到过的测试失败 (:issue:`3158`)。" + +#: ../../whatsnew/3.4.rst:2477 +msgid "" +"The :mod:`collections.abc` module has been slightly refactored as part of " +"the Python startup improvements. As a consequence of this, it is no longer " +"the case that importing :mod:`collections` automatically imports " +":mod:`collections.abc`. If your program depended on the (undocumented) " +"implicit import, you will need to add an explicit ``import collections.abc``" +" (:issue:`20784`)." +msgstr "" +"作为 Python 启动过程改进的一部分 :mod:`collections.abc` 模块进行了小幅度的重构。 作为此项重构的结果,导入 " +":mod:`collections` 将不再自动导入 :mod:`collections.abc`。 " +"如果你的程序依赖于这个(未写入文档的)隐式导入,你将需要添加显式的 ``import collections.abc`` " +"(:issue:`20784`)。" + +#: ../../whatsnew/3.4.rst:2486 +msgid "Changes in the C API" +msgstr "C API 的变化" + +#: ../../whatsnew/3.4.rst:2488 +msgid "" +":c:func:`PyEval_EvalFrameEx`, :c:func:`PyObject_Repr`, and " +":c:func:`PyObject_Str`, along with some other internal C APIs, now include a" +" debugging assertion that ensures they are not used in situations where they" +" may silently discard a currently active exception. In cases where " +"discarding the active exception is expected and desired (for example, " +"because it has already been saved locally with :c:func:`PyErr_Fetch` or is " +"being deliberately replaced with a different exception), an explicit " +":c:func:`PyErr_Clear` call will be needed to avoid triggering the assertion " +"when invoking these operations (directly or indirectly) and running against " +"a version of Python that is compiled with assertions enabled." +msgstr "" +"现在 :c:func:`PyEval_EvalFrameEx`, :c:func:`PyObject_Repr` 和 " +":c:func:`PyObject_Str` 以及其他一些内部 C API " +"都包括了一个调试断言,以确保它们不会在可能会静默地丢弃当前活动异常的情况下使用。 在预期并且希望丢弃活动异常的情况下(例如,由于已通过 " +":c:func:`PyErr_Fetch` 将其保存在本地或是有意将其替换为不同的异常 ),则需调用显式的 :c:func:`PyErr_Clear` " +"以避免在(直接或间接)唤起这些操作和针对启用断言编译的 Python 的版本运行时触发断言。" + +#: ../../whatsnew/3.4.rst:2500 +msgid "" +":c:func:`PyErr_SetImportError` now sets :exc:`TypeError` when its **msg** " +"argument is not set. Previously only ``NULL`` was returned with no exception" +" set." +msgstr "" +"现在 :c:func:`PyErr_SetImportError` 在其 **msg** 参数未被设置时会设置 :exc:`TypeError`。 " +"在之前版本中仅会返回 ``NULL`` 而不设置异常。" + +#: ../../whatsnew/3.4.rst:2504 +msgid "" +"The result of the :c:data:`PyOS_ReadlineFunctionPointer` callback must now " +"be a string allocated by :c:func:`PyMem_RawMalloc` or " +":c:func:`PyMem_RawRealloc`, or ``NULL`` if an error occurred, instead of a " +"string allocated by :c:func:`PyMem_Malloc` or :c:func:`PyMem_Realloc` " +"(:issue:`16742`)" +msgstr "" +"现在 :c:data:`PyOS_ReadlineFunctionPointer` 回调的结果必须是一个由 " +":c:func:`PyMem_RawMalloc` 或 :c:func:`PyMem_RawRealloc` 分配的字符串,或者如果发生错误则为 " +"``NULL``,而不是由 :c:func:`PyMem_Malloc` 或 :c:func:`PyMem_Realloc` 分配的字符串 " +"(:issue:`16742`)" + +#: ../../whatsnew/3.4.rst:2510 +msgid "" +":c:func:`PyThread_set_key_value` now always set the value. In Python 3.3, " +"the function did nothing if the key already exists (if the current value is " +"a non-``NULL`` pointer)." +msgstr "" +"现在 :c:func:`PyThread_set_key_value` 总是会设置值。 在 Python 3.3 中,如果键已存在(如果当前值为非 " +"``NULL`` 指针)该函数将不执行任何操作。" + +#: ../../whatsnew/3.4.rst:2514 +msgid "" +"The ``f_tstate`` (thread state) field of the :c:type:`PyFrameObject` " +"structure has been removed to fix a bug: see :issue:`14432` for the " +"rationale." +msgstr "" +":c:type:`PyFrameObject` 结构体的 ``f_tstate`` (线程状态) 字段已被移除以修复一个程序错误;相关理由参见 " +":issue:`14432`。" + +#: ../../whatsnew/3.4.rst:2519 +msgid "Changed in 3.4.3" +msgstr "3.4.3 的变化" + +#: ../../whatsnew/3.4.rst:2524 +msgid "" +"PEP 476: Enabling certificate verification by default for stdlib http " +"clients" +msgstr "PEP 476: 默认为 stdlib http 客户端启用证书验证" + +#: ../../whatsnew/3.4.rst:2526 +msgid "" +":mod:`http.client` and modules which use it, such as :mod:`urllib.request` " +"and :mod:`xmlrpc.client`, will now verify that the server presents a " +"certificate which is signed by a CA in the platform trust store and whose " +"hostname matches the hostname being requested by default, significantly " +"improving security for many applications." +msgstr "" +":mod:`http.client` 及其他依赖它的模块,比如 :mod:`urllib.request` 和 " +":mod:`xmlrpc.client`,现在将验证服务器是否提供了由平台信任的仓库中的 CA " +"签名的证书并且其主机名与默认被请求的主机名相匹配,这将显著提升许多应用程序的安全性。" + +#: ../../whatsnew/3.4.rst:2532 +msgid "" +"For applications which require the old previous behavior, they can pass an " +"alternate context::" +msgstr "对于需要之前版本的旧有行为的应用程序,可以传入一个替代的上下文::" diff --git a/whatsnew/3.5.po b/whatsnew/3.5.po new file mode 100644 index 000000000..55d4fcbee --- /dev/null +++ b/whatsnew/3.5.po @@ -0,0 +1,4097 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) 2001-2025, Python Software Foundation +# This file is distributed under the same license as the Python package. +# FIRST AUTHOR , YEAR. +# +# Translators: +# Kaizhao Zhang , 2018 +# jacky , 2019 +# 汇民 王 , 2019 +# Alpha Du , 2019 +# ppcfish , 2019 +# Sean Chao , 2020 +# Freesand Leo , 2024 +# Rafael Fontenelle , 2025 +# +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: Python 3.9\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2025-02-07 16:40+0000\n" +"PO-Revision-Date: 2017-02-16 23:44+0000\n" +"Last-Translator: Rafael Fontenelle , 2025\n" +"Language-Team: Chinese (China) (https://app.transifex.com/python-doc/teams/5390/zh_CN/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: zh_CN\n" +"Plural-Forms: nplurals=1; plural=0;\n" + +#: ../../whatsnew/3.5.rst:3 +msgid "What's New In Python 3.5" +msgstr "Python 3.5 有什么新变化" + +#: ../../whatsnew/3.5.rst:0 +msgid "Editors" +msgstr "编者" + +#: ../../whatsnew/3.5.rst:5 +msgid "Elvis Pranskevichus , Yury Selivanov " +msgstr "Elvis Pranskevichus , Yury Selivanov " + +#: ../../whatsnew/3.5.rst:47 +msgid "" +"This article explains the new features in Python 3.5, compared to 3.4. " +"Python 3.5 was released on September 13, 2015.  See the `changelog " +"`_ for a full list of " +"changes." +msgstr "" +"这篇文章介绍了 Python 3.5 相比 3.4 增加的新特性。 Python 3.5 发布于 2015 年 9 月 13 日。 " +"更完整的变化清单请参阅 `changelog " +"`_。" + +#: ../../whatsnew/3.5.rst:54 +msgid ":pep:`478` - Python 3.5 Release Schedule" +msgstr ":pep:`478` - Python 3.5 发布计划" + +#: ../../whatsnew/3.5.rst:58 +msgid "Summary -- Release highlights" +msgstr "摘要 -- 发布重点" + +#: ../../whatsnew/3.5.rst:60 +msgid "New syntax features:" +msgstr "新的语法特性:" + +#: ../../whatsnew/3.5.rst:62 +msgid "" +":ref:`PEP 492 `, coroutines with async and await syntax." +msgstr ":ref:`PEP 492 `, 使用 async 和 await 语法实现协程。" + +#: ../../whatsnew/3.5.rst:63 +msgid "" +":ref:`PEP 465 `, a new matrix multiplication operator: ``a" +" @ b``." +msgstr ":ref:`PEP 465 `, 新的矩阵乘法运算符: ``a @ b``." + +#: ../../whatsnew/3.5.rst:64 +msgid "" +":ref:`PEP 448 `, additional unpacking generalizations." +msgstr ":ref:`PEP 448 `, 额外的解包通用化。" + +#: ../../whatsnew/3.5.rst:67 +msgid "New library modules:" +msgstr "新的库模块:" + +#: ../../whatsnew/3.5.rst:69 +msgid ":mod:`typing`: :ref:`PEP 484 -- Type Hints `." +msgstr ":mod:`typing`: :ref:`PEP 484 —— 类型注解 `." + +#: ../../whatsnew/3.5.rst:70 +msgid "" +":mod:`zipapp`: :ref:`PEP 441 Improving Python ZIP Application Support " +"`." +msgstr ":mod:`zipapp`: :ref:`PEP 441 改进Python ZIP应用程序支持 `." + +#: ../../whatsnew/3.5.rst:74 +msgid "New built-in features:" +msgstr "新的内置特性:" + +#: ../../whatsnew/3.5.rst:76 +msgid "" +"``bytes % args``, ``bytearray % args``: :ref:`PEP 461 ` --" +" Adding ``%`` formatting to bytes and bytearray." +msgstr "" +"``bytes % args``, ``bytearray % args``: :ref:`PEP 461 ` --" +" 为字节串和字节数组增加 ``%`` 格式化。" + +#: ../../whatsnew/3.5.rst:79 +msgid "" +"New :meth:`bytes.hex`, :meth:`bytearray.hex` and :meth:`memoryview.hex` " +"methods. (Contributed by Arnon Yaari in :issue:`9951`.)" +msgstr "" +"新增 :meth:`bytes.hex`, :meth:`bytearray.hex` 和 :meth:`memoryview.hex` 方法。 (由 " +"Arnon Yaari 在 :issue:`9951` 中贡献。)" + +#: ../../whatsnew/3.5.rst:82 +msgid "" +":class:`memoryview` now supports tuple indexing (including multi-" +"dimensional). (Contributed by Antoine Pitrou in :issue:`23632`.)" +msgstr "" +":class:`memoryview` 现在支持元组索引(包括多维度)。 (由 Antoine Pitrou 在 :issue:`23632` " +"中贡献。)" + +#: ../../whatsnew/3.5.rst:85 +msgid "" +"Generators have a new ``gi_yieldfrom`` attribute, which returns the object " +"being iterated by ``yield from`` expressions. (Contributed by Benno Leslie " +"and Yury Selivanov in :issue:`24450`.)" +msgstr "" +"生成器具有一个新的 ``gi_yieldfrom`` 属性,它将返回 ``yield from`` 表达式所迭代的对象。 (由 Benno Leslie" +" 和 Yury Selivanov 在 :issue:`24450` 中贡献。)" + +#: ../../whatsnew/3.5.rst:89 +msgid "" +"A new :exc:`RecursionError` exception is now raised when maximum recursion " +"depth is reached. (Contributed by Georg Brandl in :issue:`19235`.)" +msgstr "" +"现在当达到最大递归尝试时将引发新的 :exc:`RecursionError` 异常。 (由 Georg Brandl 在 :issue:`19235`" +" 中贡献。)" + +#: ../../whatsnew/3.5.rst:94 +msgid "CPython implementation improvements:" +msgstr "CPython 实现的改进:" + +#: ../../whatsnew/3.5.rst:96 +msgid "" +"When the ``LC_TYPE`` locale is the POSIX locale (``C`` locale), " +":py:data:`sys.stdin` and :py:data:`sys.stdout` now use the " +"``surrogateescape`` error handler, instead of the ``strict`` error handler. " +"(Contributed by Victor Stinner in :issue:`19977`.)" +msgstr "" +"当 ``LC_TYPE`` 语言区域为 POSIX 语言区域(即 ``C`` 语言区域)时,:py:data:`sys.stdin` 和 " +":py:data:`sys.stdout` 现在将使用 ``surrogateescape`` 错误处理器,而不是 ``strict`` 错误处理器。 " +"(由 Victor Stinner 在 :issue:`19977` 中贡献。)" + +#: ../../whatsnew/3.5.rst:101 +msgid "" +"``.pyo`` files are no longer used and have been replaced by a more flexible " +"scheme that includes the optimization level explicitly in ``.pyc`` name. " +"(See :ref:`PEP 488 overview `.)" +msgstr "" +"``.pyo`` 文件已不再被使用而是被替换为一个更灵活的方案即在 ``.pyc`` 名称中显式地包括优化级别。 (参见 :ref:`PEP 488 " +"概览 `。)" + +#: ../../whatsnew/3.5.rst:105 +msgid "" +"Builtin and extension modules are now initialized in a multi-phase process, " +"which is similar to how Python modules are loaded. (See :ref:`PEP 489 " +"overview `.)" +msgstr "" +"内置与扩展模块现在将经过多阶段的过程被初始化,这类似于 Python 模块的加载方式。 (参见 :ref:`PEP 489 概览 `。)" + +#: ../../whatsnew/3.5.rst:110 +msgid "Significant improvements in the standard library:" +msgstr "标准库中的重大改进:" + +#: ../../whatsnew/3.5.rst:112 +msgid "" +":class:`collections.OrderedDict` is now :ref:`implemented in C `, which makes it 4 to 100 times faster." +msgstr "" +":class:`collections.OrderedDict` 现在已 :ref:`用 C 实现 `,这使它的速度快了 4 到 100 部。" + +#: ../../whatsnew/3.5.rst:116 +msgid "" +"The :mod:`ssl` module gained :ref:`support for Memory BIO `, which decouples SSL protocol handling from network IO." +msgstr "" +"The :mod:`ssl` 模块获得了 :ref:`对内存 BIO 的支持 `,它使得 SSL " +"协议处理与网络 IO 实现了解耦。" + +#: ../../whatsnew/3.5.rst:120 +msgid "" +"The new :func:`os.scandir` function provides a :ref:`better and " +"significantly faster way ` of directory traversal." +msgstr "" +"新的 :func:`os.scandir` 函数提供了对于目录遍历 :ref:`更好和明显更快速的方式 `。" + +#: ../../whatsnew/3.5.rst:124 +msgid "" +":func:`functools.lru_cache` has been mostly :ref:`reimplemented in C " +"`, yielding much better performance." +msgstr "" +":func:`functools.lru_cache` 已经大部分 :ref:`用 C 重新实现 `,产生了更好的性能。" + +#: ../../whatsnew/3.5.rst:128 +msgid "" +"The new :func:`subprocess.run` function provides a :ref:`streamlined way to " +"run subprocesses `." +msgstr "" +"新的 :func:`subprocess.run` 函数提供了一个 :ref:`运行子进程的简便方式 `。" + +#: ../../whatsnew/3.5.rst:131 +msgid "" +"The :mod:`traceback` module has been significantly :ref:`enhanced ` for improved performance and developer convenience." +msgstr ":mod:`traceback` 模块已被显著 :ref:`增强 ` 以改善性能和开发者便捷度。" + +#: ../../whatsnew/3.5.rst:136 +msgid "Security improvements:" +msgstr "安全改进:" + +#: ../../whatsnew/3.5.rst:138 +msgid "" +"SSLv3 is now disabled throughout the standard library. It can still be " +"enabled by instantiating a :class:`ssl.SSLContext` manually. (See " +":issue:`22638` for more details; this change was backported to CPython 3.4 " +"and 2.7.)" +msgstr "" +"SSLv3 目前在整个标准库中被禁用。 它仍然可以通过手动实例化一个 :class:`ssl.SSLContext` 来启用。 (请参阅 " +":issue:`22638` 了解详情;此修改已向下移植到 CPython 3.4 和 2.7。)" + +#: ../../whatsnew/3.5.rst:143 +msgid "" +"HTTP cookie parsing is now stricter, in order to protect against potential " +"injection attacks. (Contributed by Antoine Pitrou in :issue:`22796`.)" +msgstr "" +"HTTP cookie 解析现在将更严格,以防止潜在的注入攻击。 (由 Antoine Pitrou 在 :issue:`22796` 中贡献。)" + +#: ../../whatsnew/3.5.rst:148 +msgid "Windows improvements:" +msgstr "Windows改进:" + +#: ../../whatsnew/3.5.rst:150 +msgid "" +"A new installer for Windows has replaced the old MSI. See :ref:`using-on-" +"windows` for more information." +msgstr "使用新的 Windows 安装器替代了旧版 MSI。 请参阅 :ref:`using-on-windows` 了解详情。" + +#: ../../whatsnew/3.5.rst:153 +msgid "" +"Windows builds now use Microsoft Visual C++ 14.0, and extension modules " +"should use the same." +msgstr "Windows 编译版现在使用 Microsoft Visual C++ 14.0,扩展模块也应当使用同一版本。" + +#: ../../whatsnew/3.5.rst:157 +msgid "" +"Please read on for a comprehensive list of user-facing changes, including " +"many other smaller improvements, CPython optimizations, deprecations, and " +"potential porting issues." +msgstr "请继续阅读有关针对用户的改变的完整清单,包括许多其他较小的改进、CPython 优化、弃用以及潜在的移植问题。" + +#: ../../whatsnew/3.5.rst:163 +msgid "New Features" +msgstr "新的特性" + +#: ../../whatsnew/3.5.rst:168 +msgid "PEP 492 - Coroutines with async and await syntax" +msgstr "PEP 492 - 使用 async 和 await 语法实现协程" + +#: ../../whatsnew/3.5.rst:170 +msgid "" +":pep:`492` greatly improves support for asynchronous programming in Python " +"by adding :term:`awaitable objects `, :term:`coroutine functions " +"`, :term:`asynchronous iteration `, and :term:`asynchronous context managers `." +msgstr "" +":pep:`492` 通过添加 :term:`可等待对象 `, :term:`协程函数 `, :term:`异步迭代 ` 和 :term:`异步上下文管理器 " +"` 极大地改善了 Python 对异步编程的支持。" + +#: ../../whatsnew/3.5.rst:176 +msgid "" +"Coroutine functions are declared using the new :keyword:`async def` syntax::" +msgstr "协程函数是使用新的 :keyword:`async def` 语法来声明的::" + +#: ../../whatsnew/3.5.rst:181 +msgid "" +"Inside a coroutine function, the new :keyword:`await` expression can be used" +" to suspend coroutine execution until the result is available. Any object " +"can be *awaited*, as long as it implements the :term:`awaitable` protocol by" +" defining the :meth:`__await__` method." +msgstr "" +"在协程函数内部,新的 :keyword:`await` 表达式可用于挂起协程的执行直到其结果可用。 任何对象都可以被 *等待*,只要它通过定义 " +":meth:`__await__` 方法实现了 :term:`awaitable` 协议。" + +#: ../../whatsnew/3.5.rst:186 +msgid "" +"PEP 492 also adds :keyword:`async for` statement for convenient iteration " +"over asynchronous iterables." +msgstr "PEP 492 还增加了 :keyword:`async for` 语句用于方便地迭代异步可迭代对象。" + +#: ../../whatsnew/3.5.rst:189 +msgid "An example of a rudimentary HTTP client written using the new syntax::" +msgstr "一个使用新语法编写的基本 HTTP 客户端示例::" + +#: ../../whatsnew/3.5.rst:215 +msgid "" +"Similarly to asynchronous iteration, there is a new syntax for asynchronous " +"context managers. The following script::" +msgstr "与异步迭代类似,增加了用于异步上下文管理器的新语法。 以下代码::" + +#: ../../whatsnew/3.5.rst:235 +msgid "will output::" +msgstr "将输出:" + +#: ../../whatsnew/3.5.rst:244 +msgid "" +"Note that both :keyword:`async for` and :keyword:`async with` can only be " +"used inside a coroutine function declared with :keyword:`async def`." +msgstr "" +"请注意 :keyword:`async for` 和 :keyword:`async with` 都只能在通过 :keyword:`async def`" +" 声明的协程函数中使用。" + +#: ../../whatsnew/3.5.rst:247 +msgid "" +"Coroutine functions are intended to be run inside a compatible event loop, " +"such as the :ref:`asyncio loop `." +msgstr "协程函数应当在兼容的事件循环内部运行,例如 :ref:`asyncio 循环 `。" + +#: ../../whatsnew/3.5.rst:253 +msgid "" +"Starting with CPython 3.5.2, ``__aiter__`` can directly return " +":term:`asynchronous iterators `. Returning an " +":term:`awaitable` object will result in a :exc:`PendingDeprecationWarning`." +msgstr "" +"从 CPython 3.5.2 开始,``__aiter__`` 可以直接返回 :term:`异步迭代器 `。 返回 :term:`awaitable` 对象将会导致 :exc:`PendingDeprecationWarning`。" + +#: ../../whatsnew/3.5.rst:259 +msgid "See more details in the :ref:`async-iterators` documentation section." +msgstr "详情参见文档的 :ref:`async-iterators` 一节。" + +#: ../../whatsnew/3.5.rst:265 +msgid ":pep:`492` -- Coroutines with async and await syntax" +msgstr ":pep:`492` -- 使用 async 和 await 语法实现协程" + +#: ../../whatsnew/3.5.rst:266 +msgid "PEP written and implemented by Yury Selivanov." +msgstr "PEP 由 Yury Selivanov 撰写并实现" + +#: ../../whatsnew/3.5.rst:272 +msgid "PEP 465 - A dedicated infix operator for matrix multiplication" +msgstr "PEP 465 - 用于矩阵乘法的专用中缀运算符" + +#: ../../whatsnew/3.5.rst:274 +msgid "" +":pep:`465` adds the ``@`` infix operator for matrix multiplication. " +"Currently, no builtin Python types implement the new operator, however, it " +"can be implemented by defining :meth:`__matmul__`, :meth:`__rmatmul__`, and " +":meth:`__imatmul__` for regular, reflected, and in-place matrix " +"multiplication. The semantics of these methods is similar to that of " +"methods defining other infix arithmetic operators." +msgstr "" +":pep:`465` 增加了用于矩阵乘法的 ``@`` 中缀运算符。 目前,还没有内置的 Python 类型实现这个新运算符,不过,它可通过定义 " +":meth:`__matmul__`, :meth:`__rmatmul__` 和 :meth:`__imatmul__` " +"分别用于常规、反射和原地矩阵乘法来实现。 这些方法的语义与定义其他中缀算术运算符的方法类似。" + +#: ../../whatsnew/3.5.rst:281 +msgid "" +"Matrix multiplication is a notably common operation in many fields of " +"mathematics, science, engineering, and the addition of ``@`` allows writing " +"cleaner code::" +msgstr "矩阵乘法在数学,科学,工程学的许多领域中是一种常见的操作,使用 ``@`` 运算符可以编写更简洁的代码:" + +#: ../../whatsnew/3.5.rst:287 +msgid "instead of::" +msgstr "代替:" + +#: ../../whatsnew/3.5.rst:292 +msgid "NumPy 1.10 has support for the new operator::" +msgstr "NumPy 1.10 支持新的运算符:" + +#: ../../whatsnew/3.5.rst:312 +msgid ":pep:`465` -- A dedicated infix operator for matrix multiplication" +msgstr ":pep:`465` -- 用于矩阵乘法的专用中缀运算符" + +#: ../../whatsnew/3.5.rst:313 +msgid "PEP written by Nathaniel J. Smith; implemented by Benjamin Peterson." +msgstr "PEP 由 Nathaniel J. Smith 撰写,由 Benjamin Peterson 实现。" + +#: ../../whatsnew/3.5.rst:319 +msgid "PEP 448 - Additional Unpacking Generalizations" +msgstr "PEP 448 - 进一步的解包标准化" + +#: ../../whatsnew/3.5.rst:321 +msgid "" +":pep:`448` extends the allowed uses of the ``*`` iterable unpacking operator" +" and ``**`` dictionary unpacking operator. It is now possible to use an " +"arbitrary number of unpackings in :ref:`function calls `::" +msgstr "" +":pep:`448` 扩展了 ``*`` 可迭代对象解包操作符和 ``**`` 字典解包操作符的允许使用范围。 现在将可以在 :ref:`函数调用 " +"` 中使用任意数量的解包操作::" + +#: ../../whatsnew/3.5.rst:335 +msgid "" +"Similarly, tuple, list, set, and dictionary displays allow multiple " +"unpackings (see :ref:`exprlists` and :ref:`dict`)::" +msgstr "类似地,元组、列表、集合与字典表示形式也允许多重解包 (参见 :ref:`exprlists` 和 :ref:`dict`)::" + +#: ../../whatsnew/3.5.rst:353 +msgid ":pep:`448` -- Additional Unpacking Generalizations" +msgstr ":pep:`448` -- 进一步的解包标准化" + +#: ../../whatsnew/3.5.rst:353 +msgid "" +"PEP written by Joshua Landau; implemented by Neil Girdhar, Thomas Wouters, " +"and Joshua Landau." +msgstr "" +"PEP 由 Joshua Landau 撰写 ,由 Neil Girdhar,Thomas Wouters 和 Joshua Landau 实现。" + +#: ../../whatsnew/3.5.rst:360 +msgid "PEP 461 - percent formatting support for bytes and bytearray" +msgstr "PEP 461 - 针对 bytes 和 bytearray 的百分号格式化支持" + +#: ../../whatsnew/3.5.rst:362 +msgid "" +":pep:`461` adds support for the ``%`` :ref:`interpolation operator ` to :class:`bytes` and :class:`bytearray`." +msgstr "" +":pep:`461` 增加了 ``%`` :ref:`插值运算符 ` 对 :class:`bytes` 和 " +":class:`bytearray` 的支持。" + +#: ../../whatsnew/3.5.rst:366 +msgid "" +"While interpolation is usually thought of as a string operation, there are " +"cases where interpolation on ``bytes`` or ``bytearrays`` makes sense, and " +"the work needed to make up for this missing functionality detracts from the " +"overall readability of the code. This issue is particularly important when " +"dealing with wire format protocols, which are often a mixture of binary and " +"ASCII compatible text." +msgstr "" +"虽然插值通常被认为是一种字符串操作,但在某些情况下针对 ``bytes`` 或 ``bytearrays`` " +"的插值操作也是有意义,而弥补这种功能缺失所需的工作可能会影响代码的整体可读性。 在处理通常会混合二进制和 ASCII 兼容文本的 wire " +"格式化协议时,这个问题尤为重要。" + +#: ../../whatsnew/3.5.rst:373 ../../whatsnew/3.5.rst:1848 +msgid "Examples::" +msgstr "示例::" + +#: ../../whatsnew/3.5.rst:381 +msgid "" +"Unicode is not allowed for ``%b``, but it is accepted by ``%a`` (equivalent " +"of ``repr(obj).encode('ascii', 'backslashreplace')``)::" +msgstr "" +"Unicode 对于 ``%b`` 来说是不允许的,但对 ``%a`` 来说则是可接受的 (等价于 " +"``repr(obj).encode('ascii', 'backslashreplace')``)::" + +#: ../../whatsnew/3.5.rst:392 +msgid "" +"Note that ``%s`` and ``%r`` conversion types, although supported, should " +"only be used in codebases that need compatibility with Python 2." +msgstr "请注意 ``%s`` 和 ``%r`` 转换类型虽然受到支持,但应当只被用于需要与 Python 2 保持兼容性的代码中。" + +#: ../../whatsnew/3.5.rst:398 +msgid ":pep:`461` -- Adding % formatting to bytes and bytearray" +msgstr ":pep:`461` -- 为 bytes 和 bytearray 添加 % 格式化" + +#: ../../whatsnew/3.5.rst:398 +msgid "" +"PEP written by Ethan Furman; implemented by Neil Schemenauer and Ethan " +"Furman." +msgstr "PEP 由 Ethan Furman 撰写 ,由 Neil Schemenauer 和 Ethan Furman 实现。" + +#: ../../whatsnew/3.5.rst:405 +msgid "PEP 484 - Type Hints" +msgstr "PEP 484 —— 类型提示" + +#: ../../whatsnew/3.5.rst:407 +msgid "" +"Function annotation syntax has been a Python feature since version 3.0 " +"(:pep:`3107`), however the semantics of annotations has been left undefined." +msgstr "函数标注语法自 3.0 版起即已成为 Python 的特性 (:pep:`3107`),标注的语义尚未得到定义。" + +#: ../../whatsnew/3.5.rst:410 +msgid "" +"Experience has shown that the majority of function annotation uses were to " +"provide type hints to function parameters and return values. It became " +"evident that it would be beneficial for Python users, if the standard " +"library included the base definitions and tools for type annotations." +msgstr "" +"经验表明大多数函数标注的使用都是为了向函数形参和返回值提供类型提示。 很显然如果标准库可以包括用于类型标注的基本定义和工具,对 Python " +"用户来说将大有裨益。" + +#: ../../whatsnew/3.5.rst:415 +msgid "" +":pep:`484` introduces a :term:`provisional module ` to " +"provide these standard definitions and tools, along with some conventions " +"for situations where annotations are not available." +msgstr "" +":pep:`484` 引入了一个 :term:`暂定模块 ` " +"来提供这些标准定义和工具,以及针对标注不可用的场合的一些惯例。" + +#: ../../whatsnew/3.5.rst:419 +msgid "" +"For example, here is a simple function whose argument and return type are " +"declared in the annotations::" +msgstr "例如,以下是一个在标注中声明了参数和返回值类型的简单函数::" + +#: ../../whatsnew/3.5.rst:425 +msgid "" +"While these annotations are available at runtime through the usual " +":attr:`__annotations__` attribute, *no automatic type checking happens at " +"runtime*. Instead, it is assumed that a separate off-line type checker " +"(e.g. `mypy `_) will be used for on-demand source code" +" analysis." +msgstr "" + +#: ../../whatsnew/3.5.rst:431 +msgid "" +"The type system supports unions, generic types, and a special type named " +":class:`~typing.Any` which is consistent with (i.e. assignable to and from) " +"all types." +msgstr "类型系统支持合并、泛型类型以及名为 :class:`~typing.Any` 的能够适用于所有类型(即作为赋值的来源和目标)的特殊类型。" + +#: ../../whatsnew/3.5.rst:437 +msgid ":mod:`typing` module documentation" +msgstr ":mod:`typing` 模块文档" + +#: ../../whatsnew/3.5.rst:439 +msgid ":pep:`484` -- Type Hints" +msgstr ":pep:`484` —— 类型提示" + +#: ../../whatsnew/3.5.rst:439 +msgid "" +"PEP written by Guido van Rossum, Jukka Lehtosalo, and Łukasz Langa; " +"implemented by Guido van Rossum." +msgstr "" +"PEP 由 Guido van Rossum,Jukka Lehtosalo 和 Łukasz Langa 撰写;由 Guido van Rossum " +"实现。" + +#: ../../whatsnew/3.5.rst:441 +msgid ":pep:`483` -- The Theory of Type Hints" +msgstr ":pep:`483` -- 类型提示理论" + +#: ../../whatsnew/3.5.rst:442 +msgid "PEP written by Guido van Rossum" +msgstr "PEP 由 Yury Selivanov 撰写" + +#: ../../whatsnew/3.5.rst:448 +msgid "" +"PEP 471 - os.scandir() function -- a better and faster directory iterator" +msgstr "PEP 471 - os.scandir() 函数 -- 一个更好且更快的目录迭代器" + +#: ../../whatsnew/3.5.rst:450 +msgid "" +":pep:`471` adds a new directory iteration function, :func:`os.scandir`, to " +"the standard library. Additionally, :func:`os.walk` is now implemented " +"using ``scandir``, which makes it 3 to 5 times faster on POSIX systems and 7" +" to 20 times faster on Windows systems. This is largely achieved by greatly" +" reducing the number of calls to :func:`os.stat` required to walk a " +"directory tree." +msgstr "" +":pep:`471` 向标准库添加了一个新的目录迭代函数 :func:`os.scandir`。 此外,:func:`os.walk` 现在是使用 " +"``scandir`` 来实现,这使它在 POSIX 系统上可提速 3 至 5 倍而在 Windows 系统上可提速 7 至 20 倍。 " +"这样的效果主要是通过大幅减少遍历目录树所需调用 :func:`os.stat` 的次数来达成的。" + +#: ../../whatsnew/3.5.rst:457 +msgid "" +"Additionally, ``scandir`` returns an iterator, as opposed to returning a " +"list of file names, which improves memory efficiency when iterating over " +"very large directories." +msgstr "此外,``scandir`` 是返回一个迭代器,而不是返回一个文件名列表,这提升了迭代非常大的目录时的内存效率。" + +#: ../../whatsnew/3.5.rst:461 +msgid "" +"The following example shows a simple use of :func:`os.scandir` to display " +"all the files (excluding directories) in the given *path* that don't start " +"with ``'.'``. The :meth:`entry.is_file() ` call will " +"generally not make an additional system call::" +msgstr "" +"下面的例子演示了 :func:`os.scandir` 的简单用法,显示给定 *path* 中所有不以 ``'.'`` 开头的文件(不包括目录)。 " +":meth:`entry.is_file() ` 调用通常不会执行额外的系统调用::" + +#: ../../whatsnew/3.5.rst:472 +msgid "" +":pep:`471` -- os.scandir() function -- a better and faster directory " +"iterator" +msgstr ":pep:`471` -- os.scandir() 函数 -- 一个更好且更快的目录迭代器" + +#: ../../whatsnew/3.5.rst:473 +msgid "" +"PEP written and implemented by Ben Hoyt with the help of Victor Stinner." +msgstr "PEP 由 Ben Hoyt 在 Victor Stinner 的帮助下撰写并实现" + +#: ../../whatsnew/3.5.rst:479 +msgid "PEP 475: Retry system calls failing with EINTR" +msgstr "PEP 475: 重试返回 EINTR 失败码的系统调用" + +#: ../../whatsnew/3.5.rst:481 +msgid "" +"An :py:data:`errno.EINTR` error code is returned whenever a system call, " +"that is waiting for I/O, is interrupted by a signal. Previously, Python " +"would raise :exc:`InterruptedError` in such cases. This meant that, when " +"writing a Python application, the developer had two choices:" +msgstr "" + +#: ../../whatsnew/3.5.rst:486 +msgid "Ignore the ``InterruptedError``." +msgstr "忽略 ``InterruptedError``。" + +#: ../../whatsnew/3.5.rst:487 +msgid "" +"Handle the ``InterruptedError`` and attempt to restart the interrupted " +"system call at every call site." +msgstr "处理 ``InterruptedError`` 并在每个调用位置尝试重新启动被中断的系统调用。" + +#: ../../whatsnew/3.5.rst:490 +msgid "" +"The first option makes an application fail intermittently. The second option" +" adds a large amount of boilerplate that makes the code nearly unreadable. " +"Compare::" +msgstr "第一个选项会使应用程序中途出错。 第二个选项添加了大量的额外处理使得代码几乎不可读。 比较::" + +#: ../../whatsnew/3.5.rst:496 +msgid "and::" +msgstr "和::" + +#: ../../whatsnew/3.5.rst:505 +msgid "" +":pep:`475` implements automatic retry of system calls on ``EINTR``. This " +"removes the burden of dealing with ``EINTR`` or :exc:`InterruptedError` in " +"user code in most situations and makes Python programs, including the " +"standard library, more robust. Note that the system call is only retried if" +" the signal handler does not raise an exception." +msgstr "" +":pep:`475` 实现了在 ``EINTR`` 时自动重试系统调用。 这移除了大部分场合下在用户代码中处理 ``EINTR`` 或 " +":exc:`InterruptedError` 的负担,并使得 Python 程序,包括标准库的程序更为健壮。 " +"请注意只有在信号处理器未引发异常时系统调用才会被重试。" + +#: ../../whatsnew/3.5.rst:512 +msgid "" +"Below is a list of functions which are now retried when interrupted by a " +"signal:" +msgstr "以下是现在当被信号中断时会被重试的函数的列表:" + +#: ../../whatsnew/3.5.rst:515 +msgid ":func:`open` and :func:`io.open`;" +msgstr ":func:`open` 和 :func:`io.open`;" + +#: ../../whatsnew/3.5.rst:517 +msgid "functions of the :mod:`faulthandler` module;" +msgstr ":mod:`faulthandler` 模块的功能" + +#: ../../whatsnew/3.5.rst:519 +msgid "" +":mod:`os` functions: :func:`~os.fchdir`, :func:`~os.fchmod`, " +":func:`~os.fchown`, :func:`~os.fdatasync`, :func:`~os.fstat`, " +":func:`~os.fstatvfs`, :func:`~os.fsync`, :func:`~os.ftruncate`, " +":func:`~os.mkfifo`, :func:`~os.mknod`, :func:`~os.open`, " +":func:`~os.posix_fadvise`, :func:`~os.posix_fallocate`, :func:`~os.pread`, " +":func:`~os.pwrite`, :func:`~os.read`, :func:`~os.readv`, " +":func:`~os.sendfile`, :func:`~os.wait3`, :func:`~os.wait4`, " +":func:`~os.wait`, :func:`~os.waitid`, :func:`~os.waitpid`, " +":func:`~os.write`, :func:`~os.writev`;" +msgstr "" +":mod:`os` 函数: :func:`~os.fchdir`, :func:`~os.fchmod`, :func:`~os.fchown`, " +":func:`~os.fdatasync`, :func:`~os.fstat`, :func:`~os.fstatvfs`, " +":func:`~os.fsync`, :func:`~os.ftruncate`, :func:`~os.mkfifo`, " +":func:`~os.mknod`, :func:`~os.open`, :func:`~os.posix_fadvise`, " +":func:`~os.posix_fallocate`, :func:`~os.pread`, :func:`~os.pwrite`, " +":func:`~os.read`, :func:`~os.readv`, :func:`~os.sendfile`, " +":func:`~os.wait3`, :func:`~os.wait4`, :func:`~os.wait`, :func:`~os.waitid`, " +":func:`~os.waitpid`, :func:`~os.write`, :func:`~os.writev`;" + +#: ../../whatsnew/3.5.rst:529 +msgid "" +"special cases: :func:`os.close` and :func:`os.dup2` now ignore " +":py:data:`~errno.EINTR` errors; the syscall is not retried (see the PEP for " +"the rationale);" +msgstr "" +"特例: :func:`os.close` 和 :func:`os.dup2` 现在会忽略 :py:data:`~errno.EINTR` 错误; " +"不重试系统调用(请参阅PEP了解基本原理)" + +#: ../../whatsnew/3.5.rst:533 +msgid "" +":mod:`select` functions: :func:`devpoll.poll() `, " +":func:`epoll.poll() `, :func:`kqueue.control() " +"`, :func:`poll.poll() `, " +":func:`~select.select`;" +msgstr "" +":mod:`select` 函数: :func:`devpoll.poll() `, " +":func:`epoll.poll() `, :func:`kqueue.control() " +"`, :func:`poll.poll() `, " +":func:`~select.select`;" + +#: ../../whatsnew/3.5.rst:538 +msgid "" +"methods of the :class:`~socket.socket` class: :meth:`~socket.socket.accept`," +" :meth:`~socket.socket.connect` (except for non-blocking sockets), " +":meth:`~socket.socket.recv`, :meth:`~socket.socket.recvfrom`, " +":meth:`~socket.socket.recvmsg`, :meth:`~socket.socket.send`, " +":meth:`~socket.socket.sendall`, :meth:`~socket.socket.sendmsg`, " +":meth:`~socket.socket.sendto`;" +msgstr "" +":class:`~socket.socket` 类的方法: :meth:`~socket.socket.accept`, " +":meth:`~socket.socket.connect` (除了非阻塞套接字), :meth:`~socket.socket.recv`, " +":meth:`~socket.socket.recvfrom`, :meth:`~socket.socket.recvmsg`, " +":meth:`~socket.socket.send`, :meth:`~socket.socket.sendall`, " +":meth:`~socket.socket.sendmsg`, :meth:`~socket.socket.sendto`;" + +#: ../../whatsnew/3.5.rst:545 +msgid ":func:`signal.sigtimedwait` and :func:`signal.sigwaitinfo`;" +msgstr ":func:`signal.sigtimedwait` 和 :func:`signal.sigwaitinfo`;" + +#: ../../whatsnew/3.5.rst:547 +msgid ":func:`time.sleep`." +msgstr ":func:`time.sleep`." + +#: ../../whatsnew/3.5.rst:552 +msgid ":pep:`475` -- Retry system calls failing with EINTR" +msgstr ":pep:`475` -- 重试返回 EINTR 失败码的系统调用" + +#: ../../whatsnew/3.5.rst:552 +msgid "" +"PEP and implementation written by Charles-François Natali and Victor " +"Stinner, with the help of Antoine Pitrou (the French connection)." +msgstr "" +"PEP 和具体实现由 Charles-François Natali 和 Victor Stinner 撰写,并获得 Antoine Pitrou " +"的协助(同为法国人)。" + +#: ../../whatsnew/3.5.rst:559 +msgid "PEP 479: Change StopIteration handling inside generators" +msgstr "PEP 479:更改生成器内部的 StopIteration 处理" + +#: ../../whatsnew/3.5.rst:561 +msgid "" +"The interaction of generators and :exc:`StopIteration` in Python 3.4 and " +"earlier was sometimes surprising, and could conceal obscure bugs. " +"Previously, ``StopIteration`` raised accidentally inside a generator " +"function was interpreted as the end of the iteration by the loop construct " +"driving the generator." +msgstr "" +"生成器与 :exc:`StopIteration` 的交互在 Python 3.4 及更早版本中有时会令人惊讶,并可能隐藏难以觉察的程序错误。 " +"在之前版本中,一个生成器函数内部意外引发的 ``StopIteration`` 会被驱动该生成器的循环构造解读为迭代的结束。" + +#: ../../whatsnew/3.5.rst:567 +msgid "" +":pep:`479` changes the behavior of generators: when a ``StopIteration`` " +"exception is raised inside a generator, it is replaced with a " +":exc:`RuntimeError` before it exits the generator frame. The main goal of " +"this change is to ease debugging in the situation where an unguarded " +":func:`next` call raises ``StopIteration`` and causes the iteration " +"controlled by the generator to terminate silently. This is particularly " +"pernicious in combination with the ``yield from`` construct." +msgstr "" +":pep:`479` 更改了生成器的行为:当一个 ``StopIteration`` 异常在生成器内部被引发时,它会在其退出生成器所在帧时被替换为 " +":exc:`RuntimeError`。 这一更改的主要目的是方便在无防护的 :func:`next` 调用引发了 ``StopIteration`` " +"并导致生成器所控制的迭代静默地终结的情况下进行调试。 此情况在与 ``yield from`` 构造相结合时会特别令人困扰。" + +#: ../../whatsnew/3.5.rst:575 +msgid "" +"This is a backwards incompatible change, so to enable the new behavior, a " +":term:`__future__` import is necessary::" +msgstr "这是一个向下不兼容的更改,所以想要启用这个新行为,必须执行 :term:`__future__` 导入::" + +#: ../../whatsnew/3.5.rst:595 +msgid "" +"Without a ``__future__`` import, a :exc:`PendingDeprecationWarning` will be " +"raised whenever a :exc:`StopIteration` exception is raised inside a " +"generator." +msgstr "" +"如果未执行 ``__future__`` 导入,当在生成器内部引发 :exc:`StopIteration` 异常时将导致 " +":exc:`PendingDeprecationWarning` 被引发。" + +#: ../../whatsnew/3.5.rst:601 +msgid ":pep:`479` -- Change StopIteration handling inside generators" +msgstr ":pep:`479` -- 更改生成器内部的 StopIteration 处理" + +#: ../../whatsnew/3.5.rst:601 +msgid "" +"PEP written by Chris Angelico and Guido van Rossum. Implemented by Chris " +"Angelico, Yury Selivanov and Nick Coghlan." +msgstr "" +"PEP 由 Chris Angelico 和 Guido van Rossum 撰写,由 Chris Angelico,Yury Selivanov 和" +" Nick Coghlan 实现。" + +#: ../../whatsnew/3.5.rst:608 +msgid "PEP 485: A function for testing approximate equality" +msgstr "PEP 485:用于测试近似相等的函数" + +#: ../../whatsnew/3.5.rst:610 +msgid "" +":pep:`485` adds the :func:`math.isclose` and :func:`cmath.isclose` functions" +" which tell whether two values are approximately equal or \"close\" to each " +"other. Whether or not two values are considered close is determined " +"according to given absolute and relative tolerances. Relative tolerance is " +"the maximum allowed difference between ``isclose`` arguments, relative to " +"the larger absolute value::" +msgstr "" +":pep:`485` 增加了 :func:`math.isclose` 和 :func:`cmath.isclose` " +"函数用于检测两个值是否近似相等或称“接近”。 两个值是否接近是根据给定的绝对和相对范围来确定的。 相对范围是 ``isclose`` " +"参数之间的最大允许差值,即相对于较大的那个绝对数值的距离::" + +#: ../../whatsnew/3.5.rst:625 +msgid "" +"It is also possible to compare two values using absolute tolerance, which " +"must be a non-negative value::" +msgstr "也可以使用绝对范围来比较两个值,它必须是一个非负数值::" + +#: ../../whatsnew/3.5.rst:639 +msgid ":pep:`485` -- A function for testing approximate equality" +msgstr ":pep:`485` —— 用于测试近似相等的函数" + +#: ../../whatsnew/3.5.rst:639 +msgid "" +"PEP written by Christopher Barker; implemented by Chris Barker and Tal " +"Einat." +msgstr "PEP 由 Christopher Barker 撰写,由 Chris Barker 和 Tal Einat 实现。" + +#: ../../whatsnew/3.5.rst:646 +msgid "PEP 486: Make the Python Launcher aware of virtual environments" +msgstr "PEP 486:让 Python 启动器识别虚拟环境" + +#: ../../whatsnew/3.5.rst:648 +msgid "" +":pep:`486` makes the Windows launcher (see :pep:`397`) aware of an active " +"virtual environment. When the default interpreter would be used and the " +"``VIRTUAL_ENV`` environment variable is set, the interpreter in the virtual " +"environment will be used." +msgstr "" +":pep:`486` 让 Windows 版启动器 (参见 :pep:`397`) 能够识别激活的虚拟环境。 当要使用默认解释器并且设置了 " +"``VIRTUAL_ENV`` 环境变量时,将使用虚拟环境中的解释器。" + +#: ../../whatsnew/3.5.rst:655 +msgid ":pep:`486` -- Make the Python Launcher aware of virtual environments" +msgstr ":pep:`486` -- 让 Python 启动器识别虚拟环境" + +#: ../../whatsnew/3.5.rst:656 +msgid "PEP written and implemented by Paul Moore." +msgstr "PEP 由 Paul Moore 撰写并实现" + +#: ../../whatsnew/3.5.rst:662 +msgid "PEP 488: Elimination of PYO files" +msgstr "PEP 488:去除 PYO 文件" + +#: ../../whatsnew/3.5.rst:664 +msgid "" +":pep:`488` does away with the concept of ``.pyo`` files. This means that " +"``.pyc`` files represent both unoptimized and optimized bytecode. To prevent" +" the need to constantly regenerate bytecode files, ``.pyc`` files now have " +"an optional ``opt-`` tag in their name when the bytecode is optimized. This " +"has the side-effect of no more bytecode file name clashes when running under" +" either :option:`-O` or :option:`-OO`. Consequently, bytecode files " +"generated from :option:`-O`, and :option:`-OO` may now exist simultaneously." +" :func:`importlib.util.cache_from_source` has an updated API to help with " +"this change." +msgstr "" +":pep:`488` 取消了 ``.pyo`` 文件的概念。 这意味着 ``.pyc`` 文件将同时代表未优化和已优化的字节码。 " +"为了防止经常需要重新生成字节码文件,现在 ``.pyc`` 文件可以在其名称中设置可选的 ``opt-`` 标签来表示已优化字节码。 " +"该设置的附带效果是当以 :option:`-O` 和 :option:`-OO` 运行时将不会有字节码文件名冲突。 其结果是,使用 " +":option:`-O` 和 :option:`-OO` 生成的字节码现在可以同时存在。 " +":func:`importlib.util.cache_from_source` 专门针对此项变化更新了 API。" + +#: ../../whatsnew/3.5.rst:676 +msgid ":pep:`488` -- Elimination of PYO files" +msgstr ":pep:`488` -- 去除 PYO 文件" + +#: ../../whatsnew/3.5.rst:677 +msgid "PEP written and implemented by Brett Cannon." +msgstr "PEP 由 Brett Cannon 撰写并实现。" + +#: ../../whatsnew/3.5.rst:683 +msgid "PEP 489: Multi-phase extension module initialization" +msgstr "PEP 489:多阶段扩展模块初始化" + +#: ../../whatsnew/3.5.rst:685 +msgid "" +":pep:`489` updates extension module initialization to take advantage of the " +"two step module loading mechanism introduced by :pep:`451` in Python 3.4." +msgstr ":pep:`489` 更新了扩展模块初始化操作以便利用 Python 3.4 中通过 :pep:`451` 引入的两步模块加载机制的优势。" + +#: ../../whatsnew/3.5.rst:688 +msgid "" +"This change brings the import semantics of extension modules that opt-in to " +"using the new mechanism much closer to those of Python source and bytecode " +"modules, including the ability to use any valid identifier as a module name," +" rather than being restricted to ASCII." +msgstr "" +"这一变化让选择使用新机制的扩展模块的导入语义与 Python 源代码和字节码模块的更为接近,包括可以使用任何有效标识符作为模块名称,而不是仅限于 " +"ASCII。" + +#: ../../whatsnew/3.5.rst:696 +msgid ":pep:`489` -- Multi-phase extension module initialization" +msgstr ":pep:`489` -- 多阶段扩展模块初始化" + +#: ../../whatsnew/3.5.rst:696 +msgid "" +"PEP written by Petr Viktorin, Stefan Behnel, and Nick Coghlan; implemented " +"by Petr Viktorin." +msgstr "" +"PEP 由 Petr Viktorin , Stefan Behnel 和 Nick Coghlan 撰写,由 Petr Viktorin 实现。" + +#: ../../whatsnew/3.5.rst:701 +msgid "Other Language Changes" +msgstr "其他语言特性修改" + +#: ../../whatsnew/3.5.rst:703 +msgid "Some smaller changes made to the core Python language are:" +msgstr "对Python 语言核心进行的小改动:" + +#: ../../whatsnew/3.5.rst:705 +msgid "" +"Added the ``\"namereplace\"`` error handlers. The ``\"backslashreplace\"`` " +"error handlers now work with decoding and translating. (Contributed by " +"Serhiy Storchaka in :issue:`19676` and :issue:`22286`.)" +msgstr "" +"增加了 ``\"namereplace\"`` 错误处理器。 ``\"backslashreplace\"`` 错误处理器现在可用于解码和转译。 (由 " +"Serhiy Storchaka 在 :issue:`19676` 和 :issue:`22286` 中贡献。)" + +#: ../../whatsnew/3.5.rst:709 +msgid "" +"The :option:`-b` option now affects comparisons of :class:`bytes` with " +":class:`int`. (Contributed by Serhiy Storchaka in :issue:`23681`.)" +msgstr "" +"现在 :option:`-b` 选项会影响 :class:`bytes` 与 :class:`int` 的比较。 (由 Serhiy Storchaka" +" 在 :issue:`23681` 中贡献。)" + +#: ../../whatsnew/3.5.rst:712 +msgid "" +"New Kazakh ``kz1048`` and Tajik ``koi8_t`` :ref:`codecs `. (Contributed by Serhiy Storchaka in :issue:`22682` and " +":issue:`22681`.)" +msgstr "" +"新增 Kazakh ``kz1048`` 和 Tajik ``koi8_t`` :ref:`编解码器 `。 (由" +" Serhiy Storchaka 在 :issue:`22682` 和 :issue:`22681` 中贡献。)" + +#: ../../whatsnew/3.5.rst:715 +msgid "" +"Property docstrings are now writable. This is especially useful for " +":func:`collections.namedtuple` docstrings. (Contributed by Berker Peksag in " +":issue:`24064`.)" +msgstr "" +"特征属性文档字符串现在将是可写的。 这对于 :func:`collections.namedtuple` 文档字符串特别适用。 (由 Berker " +"Peksag 在 :issue:`24064` 中贡献。)" + +#: ../../whatsnew/3.5.rst:719 +msgid "" +"Circular imports involving relative imports are now supported. (Contributed " +"by Brett Cannon and Antoine Pitrou in :issue:`17636`.)" +msgstr "" +"涉及相对导入的环形导入现在已受到支持。 (由 Brett Cannon 和 Antoine Pitrou 在 :issue:`17636` 中贡献。)" + +#: ../../whatsnew/3.5.rst:724 +msgid "New Modules" +msgstr "新增模块" + +#: ../../whatsnew/3.5.rst:727 +msgid "typing" +msgstr "typing" + +#: ../../whatsnew/3.5.rst:729 +msgid "" +"The new :mod:`typing` :term:`provisional ` module provides " +"standard definitions and tools for function type annotations. See :ref:`Type" +" Hints ` for more information." +msgstr "" +"新增的 :mod:`typing` :term:`暂定 ` 模块提供了对函数类型标注的标准定义和工具。 详情参见 " +":ref:`类型提示 `。" + +#: ../../whatsnew/3.5.rst:736 +msgid "zipapp" +msgstr "zipapp" + +#: ../../whatsnew/3.5.rst:738 +msgid "" +"The new :mod:`zipapp` module (specified in :pep:`441`) provides an API and " +"command line tool for creating executable Python Zip Applications, which " +"were introduced in Python 2.6 in :issue:`1739468`, but which were not well " +"publicized, either at the time or since." +msgstr "" +"新增的 :mod:`zipapp` 模块(在 :pep:`441` 中描述)提供了用于创建可执行 Python Zip 应用程序的 API " +"和命令行工具,它是根据 :issue:`1739468` 在 Python 2.6 中引入的,但在当时和之后都没有足够的推广。" + +#: ../../whatsnew/3.5.rst:743 +msgid "" +"With the new module, bundling your application is as simple as putting all " +"the files, including a ``__main__.py`` file, into a directory ``myapp`` and " +"running:" +msgstr "" +"使用这个新模块,想要打包你的应用程序只需简单地将所有文件,包括一个 ``__main__.py`` 文件放到一个目录 ``myapp`` 中并运行:" + +#: ../../whatsnew/3.5.rst:752 +msgid "" +"The module implementation has been contributed by Paul Moore in " +":issue:`23491`." +msgstr "该模块的实现由 Paul Moore 在 :issue:`23491` 中贡献。" + +#: ../../whatsnew/3.5.rst:757 +msgid ":pep:`441` -- Improving Python ZIP Application Support" +msgstr ":pep:`441` -- 改进 Python ZIP 应用程序支持" + +#: ../../whatsnew/3.5.rst:761 +msgid "Improved Modules" +msgstr "改进的模块" + +#: ../../whatsnew/3.5.rst:764 +msgid "argparse" +msgstr "argparse" + +#: ../../whatsnew/3.5.rst:766 +msgid "" +"The :class:`~argparse.ArgumentParser` class now allows disabling " +":ref:`abbreviated usage ` of long options by setting " +":ref:`allow_abbrev` to ``False``. (Contributed by Jonathan Paugh, Steven " +"Bethard, paul j3 and Daniel Eriksson in :issue:`14910`.)" +msgstr "" +"现在 :class:`~argparse.ArgumentParser` 类允许通过将 :ref:`allow_abbrev` 设为 ``False``" +" 来禁用长选项的 :ref:`缩写用法 `。 (由 Jonathan Paugh, Steven Bethard, " +"paul j3 和 Daniel Eriksson 在 :issue:`14910` 中贡献。)" + +#: ../../whatsnew/3.5.rst:773 +msgid "asyncio" +msgstr "asyncio" + +#: ../../whatsnew/3.5.rst:775 +msgid "" +"Since the :mod:`asyncio` module is :term:`provisional `, " +"all changes introduced in Python 3.5 have also been backported to Python " +"3.4.x." +msgstr "" +"由于 :mod:`asyncio` 模块处于 :term:`暂定状态 `,在 Python 3.5 " +"中引入的所有改变都已被向下移植到 Python 3.4.x。" + +#: ../../whatsnew/3.5.rst:778 +msgid "Notable changes in the :mod:`asyncio` module since Python 3.4.0:" +msgstr "自 Python 3.4.0 开始 :mod:`asyncio` 模块中的重要变化:" + +#: ../../whatsnew/3.5.rst:780 +msgid "" +"New debugging APIs: :meth:`loop.set_debug() ` and " +":meth:`loop.get_debug() ` methods. (Contributed by " +"Victor Stinner.)" +msgstr "" +"新增的调试 API: :meth:`loop.set_debug() ` 和 " +":meth:`loop.get_debug() ` 方法。 (由 Victor Stinner 贡献。)" + +#: ../../whatsnew/3.5.rst:784 +msgid "" +"The proactor event loop now supports SSL. (Contributed by Antoine Pitrou and" +" Victor Stinner in :issue:`22560`.)" +msgstr "" +"现在 proactor 事件循环已支持 SSL。 (由 Antoine Pitrou 和 Victor Stinner 在 :issue:`22560`" +" 中贡献。)" + +#: ../../whatsnew/3.5.rst:787 +msgid "" +"A new :meth:`loop.is_closed() ` method to check if " +"the event loop is closed. (Contributed by Victor Stinner in :issue:`21326`.)" +msgstr "" +"新增的 :meth:`loop.is_closed() ` 方法可检测事件循环是否已关闭。 (由 " +"Victor Stinner 在 :issue:`21326` 中贡献。).)" + +#: ../../whatsnew/3.5.rst:791 +msgid "" +"A new :meth:`loop.create_task() ` to conveniently " +"create and schedule a new :class:`~asyncio.Task` for a coroutine. The " +"``create_task`` method is also used by all asyncio functions that wrap " +"coroutines into tasks, such as :func:`asyncio.wait`, :func:`asyncio.gather`," +" etc. (Contributed by Victor Stinner.)" +msgstr "" +"新增的 :meth:`loop.create_task() ` 用来方便地新建一个 " +":class:`~asyncio.Task` 并将其排入协程的计划任务。 ``create_task`` 方法还可供所有将协程包装为任务的 " +"asyncio 函数使用,例如 :func:`asyncio.wait`, :func:`asyncio.gather` 等。 (由 Victor " +"Stinner 贡献。)" + +#: ../../whatsnew/3.5.rst:798 +msgid "" +"A new :meth:`transport.get_write_buffer_limits() " +"` method to inquire for " +"*high-* and *low-* water limits of the flow control. (Contributed by Victor " +"Stinner.)" +msgstr "" +"新增的 :meth:`transport.get_write_buffer_limits() " +"` 方法用于查询流程控制的 *高* 与 *低* " +"水位限制。 (由 Victor Stinner 贡献。)" + +#: ../../whatsnew/3.5.rst:803 +msgid "" +"The :func:`~asyncio.async` function is deprecated in favor of " +":func:`~asyncio.ensure_future`. (Contributed by Yury Selivanov.)" +msgstr "" +":func:`~asyncio.async` 函数已被弃用并由 :func:`~asyncio.ensure_future` 取代。 (由 Yury " +"Selivanov 贡献。)" + +#: ../../whatsnew/3.5.rst:807 +msgid "" +"New :meth:`loop.set_task_factory() ` and " +":meth:`loop.get_task_factory() ` methods to " +"customize the task factory that :meth:`loop.create_task() " +"` method uses. (Contributed by Yury Selivanov.)" +msgstr "" +"新增 :meth:`loop.set_task_factory() ` 和 " +":meth:`loop.get_task_factory() ` 方法用于自定义供 " +":meth:`loop.create_task() ` 方法使用的任务工厂。 (由 Yury " +"Selivanov 贡献。)" + +#: ../../whatsnew/3.5.rst:814 +msgid "" +"New :meth:`Queue.join() ` and :meth:`Queue.task_done() " +"` queue methods. (Contributed by Victor Stinner.)" +msgstr "" +"新增 :meth:`Queue.join() ` 和 :meth:`Queue.task_done() " +"` 队列方法。 (由 Victor Stinner 贡献。)" + +#: ../../whatsnew/3.5.rst:818 +msgid "" +"The ``JoinableQueue`` class was removed, in favor of the " +":class:`asyncio.Queue` class. (Contributed by Victor Stinner.)" +msgstr "" +"移除了 ``JoinableQueue`` 类,建议改用 :class:`asyncio.Queue` 类。 (由 Victor Stinner " +"贡献。)" + +#: ../../whatsnew/3.5.rst:822 +msgid "Updates in 3.5.1:" +msgstr "3.5.1 中的更新:" + +#: ../../whatsnew/3.5.rst:824 +msgid "" +"The :func:`~asyncio.ensure_future` function and all functions that use it, " +"such as :meth:`loop.run_until_complete() `," +" now accept all kinds of :term:`awaitable objects `. (Contributed" +" by Yury Selivanov.)" +msgstr "" +":func:`~asyncio.ensure_future` 函数以及所有用到它的函数,比如 " +":meth:`loop.run_until_complete() " +"`,现在将接受所有种类的 :term:`可等待对象 `。 (由 " +"Yury Selivanov 贡献。)" + +#: ../../whatsnew/3.5.rst:829 +msgid "" +"New :func:`~asyncio.run_coroutine_threadsafe` function to submit coroutines " +"to event loops from other threads. (Contributed by Vincent Michel.)" +msgstr "" +"新增 :func:`~asyncio.run_coroutine_threadsafe` 函数用于从其他线程向事件循环提交协程。(由 Vincent " +"Michel 贡献。)" + +#: ../../whatsnew/3.5.rst:833 +msgid "" +"New :meth:`Transport.is_closing() ` method" +" to check if the transport is closing or closed. (Contributed by Yury " +"Selivanov.)" +msgstr "" +"新增 :meth:`Transport.is_closing() ` " +"方法用于检查传输是否正在关闭或已经关闭。 (由 Yury Selivanov 贡献。)" + +#: ../../whatsnew/3.5.rst:837 +msgid "" +"The :meth:`loop.create_server() ` method can now" +" accept a list of hosts. (Contributed by Yann Sionneau.)" +msgstr "" +":meth:`loop.create_server() ` 方法现在可以接受一个主机列表。 (由" +" Yann Sionneau 贡献。)" + +#: ../../whatsnew/3.5.rst:841 +msgid "Updates in 3.5.2:" +msgstr "3.5.2 中的更新:" + +#: ../../whatsnew/3.5.rst:843 +msgid "" +"New :meth:`loop.create_future() ` method to " +"create Future objects. This allows alternative event loop implementations, " +"such as `uvloop `_, to provide a " +"faster :class:`asyncio.Future` implementation. (Contributed by Yury " +"Selivanov.)" +msgstr "" +"新增 :meth:`loop.create_future() ` 方法用来创建 Future " +"对象。 这允许替代性的事件循环实现,比如 `uvloop " +"`_,以提供更快速的 :class:`asyncio.Future` 实现。" +" (由 Yury Selivanov 贡献。)" + +#: ../../whatsnew/3.5.rst:850 +msgid "" +"New :meth:`loop.get_exception_handler() " +"` method to get the current exception " +"handler. (Contributed by Yury Selivanov.)" +msgstr "" +"新增 :meth:`loop.get_exception_handler() `" +" 方法用于获取当前异常处理器。 (由 Yury Selivanov 贡献。)" + +#: ../../whatsnew/3.5.rst:854 +msgid "" +"New :meth:`StreamReader.readuntil() ` method" +" to read data from the stream until a separator bytes sequence appears. " +"(Contributed by Mark Korenberg.)" +msgstr "" +"新增 :meth:`StreamReader.readuntil() ` " +"方法用于从流读取数据直到出现作为分隔符的字节序列。 (由 Mark Korenberg 贡献。)" + +#: ../../whatsnew/3.5.rst:859 +msgid "" +"The :meth:`loop.create_connection() ` and " +":meth:`loop.create_server() ` methods are " +"optimized to avoid calling the system ``getaddrinfo`` function if the " +"address is already resolved. (Contributed by A. Jesse Jiryu Davis.)" +msgstr "" +":meth:`loop.create_connection() ` 和 " +":meth:`loop.create_server() ` " +"方法已获得优化以避免当地址已被解析时调用系统的 ``getaddrinfo`` 函数。 (由 A. Jesse Jiryu Davis 贡献。)" + +#: ../../whatsnew/3.5.rst:865 +msgid "" +"The :meth:`loop.sock_connect(sock, address) ` no " +"longer requires the *address* to be resolved prior to the call. (Contributed" +" by A. Jesse Jiryu Davis.)" +msgstr "" +":meth:`loop.sock_connect(sock, address) ` " +"不再要求在其被调用之前已解析 *address*。 (由 A. Jesse Jiryu Davis 贡献。)" + +#: ../../whatsnew/3.5.rst:871 +msgid "bz2" +msgstr "bz2" + +#: ../../whatsnew/3.5.rst:873 +msgid "" +"The :meth:`BZ2Decompressor.decompress ` " +"method now accepts an optional *max_length* argument to limit the maximum " +"size of decompressed data. (Contributed by Nikolaus Rath in :issue:`15955`.)" +msgstr "" +"现在 :meth:`BZ2Decompressor.decompress ` " +"方法接受可选的 *max_length* 参数用来限制解压缩数据的大小上限。 (由 Nikolaus Rath 在 :issue:`15955` " +"中贡献。)" + +#: ../../whatsnew/3.5.rst:879 +msgid "cgi" +msgstr "cgi" + +#: ../../whatsnew/3.5.rst:881 +msgid "" +"The :class:`~cgi.FieldStorage` class now supports the :term:`context " +"manager` protocol. (Contributed by Berker Peksag in :issue:`20289`.)" +msgstr "" +"现在 :class:`~cgi.FieldStorage` 类已支持 :term:`context manager` 协议。 (由 Berker " +"Peksag 在 :issue:`20289` 中贡献。)" + +#: ../../whatsnew/3.5.rst:886 +msgid "cmath" +msgstr "cmath" + +#: ../../whatsnew/3.5.rst:888 +msgid "" +"A new function :func:`~cmath.isclose` provides a way to test for approximate" +" equality. (Contributed by Chris Barker and Tal Einat in :issue:`24270`.)" +msgstr "" +"新增函数 :func:`~cmath.isclose` 提供了一种测试近似相等的方式。 (由 Chris Barker 和 Tal Einat 在 " +":issue:`24270` 中贡献。)" + +#: ../../whatsnew/3.5.rst:893 +msgid "code" +msgstr "code" + +#: ../../whatsnew/3.5.rst:895 +msgid "" +"The :func:`InteractiveInterpreter.showtraceback() " +"` method now prints the full " +"chained traceback, just like the interactive interpreter. (Contributed by " +"Claudiu Popa in :issue:`17442`.)" +msgstr "" +"现在 :func:`InteractiveInterpreter.showtraceback() " +"` 方法将打印完整的回溯链,就像在交互模式解释器中一样。 (由 " +"Claudiu Popa 在 :issue:`17442` 中贡献。)" + +#: ../../whatsnew/3.5.rst:901 +msgid "collections" +msgstr "collections" + +#: ../../whatsnew/3.5.rst:905 +msgid "" +"The :class:`~collections.OrderedDict` class is now implemented in C, which " +"makes it 4 to 100 times faster. (Contributed by Eric Snow in " +":issue:`16991`.)" +msgstr "" +"现在 :class:`~collections.OrderedDict` 类使用 C 来实现,令其可提速 4 至 100 倍。 (由 Eric Snow" +" 在 :issue:`16991` 中贡献。)" + +#: ../../whatsnew/3.5.rst:908 +msgid "" +":meth:`OrderedDict.items() `, " +":meth:`OrderedDict.keys() `, " +":meth:`OrderedDict.values() ` views now " +"support :func:`reversed` iteration. (Contributed by Serhiy Storchaka in " +":issue:`19505`.)" +msgstr "" +":meth:`OrderedDict.items() `, " +":meth:`OrderedDict.keys() `, " +":meth:`OrderedDict.values() ` 等视图现在支持 " +":func:`reversed` 迭代。 (由 Serhiy Storchaka 在 :issue:`19505` 中贡献。)" + +#: ../../whatsnew/3.5.rst:914 +msgid "" +"The :class:`~collections.deque` class now defines " +":meth:`~collections.deque.index`, :meth:`~collections.deque.insert`, and " +":meth:`~collections.deque.copy`, and supports the ``+`` and ``*`` operators." +" This allows deques to be recognized as a " +":class:`~collections.abc.MutableSequence` and improves their " +"substitutability for lists. (Contributed by Raymond Hettinger in " +":issue:`23704`.)" +msgstr "" +":class:`~collections.deque` 类现在定义了 :meth:`~collections.deque.index`, " +":meth:`~collections.deque.insert` 和 :meth:`~collections.deque.copy`,并且支持 " +"``+`` 和 ``*`` 运算符。 这允许 deque 被识别为 :class:`~collections.abc.MutableSequence` " +"并提升其替代列表的能力。 (由 Raymond Hettinger 在 :issue:`23704` 中贡献。)" + +#: ../../whatsnew/3.5.rst:921 +msgid "" +"Docstrings produced by :func:`~collections.namedtuple` can now be updated::" +msgstr "由 :func:`~collections.namedtuple` 产生的文档字符串现在可以被更新::" + +#: ../../whatsnew/3.5.rst:928 +msgid "(Contributed by Berker Peksag in :issue:`24064`.)" +msgstr "(由 Berker Peksag 在 :issue:`24064` 中贡献。)" + +#: ../../whatsnew/3.5.rst:930 +msgid "" +"The :class:`~collections.UserString` class now implements the " +":meth:`__getnewargs__`, :meth:`__rmod__`, :meth:`~str.casefold`, " +":meth:`~str.format_map`, :meth:`~str.isprintable`, and " +":meth:`~str.maketrans` methods to match the corresponding methods of " +":class:`str`. (Contributed by Joe Jevnik in :issue:`22189`.)" +msgstr "" +"现在 :class:`~collections.UserString` 类已实现 :meth:`__getnewargs__`, " +":meth:`__rmod__`, :meth:`~str.casefold`, :meth:`~str.format_map`, " +":meth:`~str.isprintable` 和 :meth:`~str.maketrans` 类以与对应的 :class:`str` 方法相匹配。" +" (由 Joe Jevnik 在 :issue:`22189` 中贡献。)" + +#: ../../whatsnew/3.5.rst:938 +msgid "collections.abc" +msgstr "collections.abc" + +#: ../../whatsnew/3.5.rst:940 +msgid "" +"The :meth:`Sequence.index() ` method now " +"accepts *start* and *stop* arguments to match the corresponding methods of " +":class:`tuple`, :class:`list`, etc. (Contributed by Devin Jeanpierre in " +":issue:`23086`.)" +msgstr "" +"现在 :meth:`Sequence.index() ` 方法接受 *start* 和 " +"*stop* 参数以与对应的 :class:`tuple`, :class:`list` 等的方法相匹配。 (由 Devin Jeanpierre 在 " +":issue:`23086` 中贡献。)" + +#: ../../whatsnew/3.5.rst:945 +msgid "" +"A new :class:`~collections.abc.Generator` abstract base class. (Contributed " +"by Stefan Behnel in :issue:`24018`.)" +msgstr "" +"新增 :class:`~collections.abc.Generator` 抽象基类。 (由 Stefan Behnel 在 " +":issue:`24018` 中贡献。)" + +#: ../../whatsnew/3.5.rst:948 +msgid "" +"New :class:`~collections.abc.Awaitable`, " +":class:`~collections.abc.Coroutine`, " +":class:`~collections.abc.AsyncIterator`, and " +":class:`~collections.abc.AsyncIterable` abstract base classes. (Contributed " +"by Yury Selivanov in :issue:`24184`.)" +msgstr "" +"新增 :class:`~collections.abc.Awaitable`, :class:`~collections.abc.Coroutine`," +" :class:`~collections.abc.AsyncIterator` 和 " +":class:`~collections.abc.AsyncIterable` 抽象基类。 (由 Yury Selivanov 在 " +":issue:`24184` 中贡献。)" + +#: ../../whatsnew/3.5.rst:953 +msgid "" +"For earlier Python versions, a backport of the new ABCs is available in an " +"external `PyPI package `_." +msgstr "" +"对于更早的 Python,这些新 ABC 的向下移植版可通过一个外部的 `PyPI 包 " +"`_ 来获取。" + +#: ../../whatsnew/3.5.rst:958 +msgid "compileall" +msgstr "compileall" + +#: ../../whatsnew/3.5.rst:960 +msgid "" +"A new :mod:`compileall` option, :samp:`-j {N}`, allows running *N* workers " +"simultaneously to perform parallel bytecode compilation. The " +":func:`~compileall.compile_dir` function has a corresponding ``workers`` " +"parameter. (Contributed by Claudiu Popa in :issue:`16104`.)" +msgstr "" +"新增 :mod:`compileall` 选项 :samp:`-j {N}`,允许同时运行 *N* 个工作进程来执行并行的字节码编译。 " +":func:`~compileall.compile_dir` 函数增加了相应的 ``workers`` 形参。 (由 Claudiu Popa 在 " +":issue:`16104` 中贡献。)" + +#: ../../whatsnew/3.5.rst:965 +msgid "" +"Another new option, ``-r``, allows controlling the maximum recursion level " +"for subdirectories. (Contributed by Claudiu Popa in :issue:`19628`.)" +msgstr "另一个新选项 ``-r``,允许控制最大的子目录递归层级。 (由 Claudiu Popa 在 :issue:`19628` 中贡献。)" + +#: ../../whatsnew/3.5.rst:968 +msgid "" +"The ``-q`` command line option can now be specified more than once, in which" +" case all output, including errors, will be suppressed. The corresponding " +"``quiet`` parameter in :func:`~compileall.compile_dir`, " +":func:`~compileall.compile_file`, and :func:`~compileall.compile_path` can " +"now accept an integer value indicating the level of output suppression. " +"(Contributed by Thomas Kluyver in :issue:`21338`.)" +msgstr "" +"现在可以多次指定 ``-q`` 命令行选项,在此情况下,所有输出包括错误都将被抑制。 在 " +":func:`~compileall.compile_dir`, :func:`~compileall.compile_file` 和 " +":func:`~compileall.compile_path` 中相应的 ``quiet`` 形参现在可接受一个整数值来指明输出抑制的级别。 (由 " +"Thomas Kluyver 在 :issue:`21338` 中贡献。)" + +#: ../../whatsnew/3.5.rst:977 +msgid "concurrent.futures" +msgstr "concurrent.futures" + +#: ../../whatsnew/3.5.rst:979 +msgid "" +"The :meth:`Executor.map() ` method now " +"accepts a *chunksize* argument to allow batching of tasks to improve " +"performance when :meth:`~concurrent.futures.ProcessPoolExecutor` is used. " +"(Contributed by Dan O'Reilly in :issue:`11271`.)" +msgstr "" +"现在 :meth:`Executor.map() ` 方法接受一个 " +"*chunksize* 参数以允许在使用 :meth:`~concurrent.futures.ProcessPoolExecutor` " +"设置任务批次来提升运行效率。 (由 Dan O'Reilly 在 :issue:`11271` 中贡献。)" + +#: ../../whatsnew/3.5.rst:984 +msgid "" +"The number of workers in the :class:`~concurrent.futures.ThreadPoolExecutor`" +" constructor is optional now. The default value is 5 times the number of " +"CPUs. (Contributed by Claudiu Popa in :issue:`21527`.)" +msgstr "" +"现在 :class:`~concurrent.futures.ThreadPoolExecutor` 构造器中的工作线程数量是可选的。 默认值为 CPU" +" 数量的 5 倍。 (由 Claudiu Popa 在 :issue:`21527` 中贡献。)" + +#: ../../whatsnew/3.5.rst:990 +msgid "configparser" +msgstr "configparser" + +#: ../../whatsnew/3.5.rst:992 +msgid "" +":mod:`configparser` now provides a way to customize the conversion of values" +" by specifying a dictionary of converters in the " +":class:`~configparser.ConfigParser` constructor, or by defining them as " +"methods in ``ConfigParser`` subclasses. Converters defined in a parser " +"instance are inherited by its section proxies." +msgstr "" +"现在 :mod:`configparser` 提供了一种方式通过在 :class:`~configparser.ConfigParser` " +"构造器中指定一个由转换器组成的字典,或将它们定义为 ``ConfigParser`` 子类中的方法来定制值的转换。 " +"在解析器实例中定义的转换器将被它的节代理所继承。" + +#: ../../whatsnew/3.5.rst:998 +msgid "Example::" +msgstr "示例::" + +#: ../../whatsnew/3.5.rst:1016 +msgid "(Contributed by Łukasz Langa in :issue:`18159`.)" +msgstr "(由 Łukasz Langa 在 :issue:`18159` 中贡献。)" + +#: ../../whatsnew/3.5.rst:1020 +msgid "contextlib" +msgstr "contextlib" + +#: ../../whatsnew/3.5.rst:1022 +msgid "" +"The new :func:`~contextlib.redirect_stderr` :term:`context manager` (similar" +" to :func:`~contextlib.redirect_stdout`) makes it easier for utility scripts" +" to handle inflexible APIs that write their output to :data:`sys.stderr` and" +" don't provide any options to redirect it::" +msgstr "" +"新增的 :func:`~contextlib.redirect_stderr` :term:`context manager` (类似于 " +":func:`~contextlib.redirect_stdout`) 使得工具脚本更容易处理那些将输出写入到 :data:`sys.stderr` " +"并且不提供任何重定向选项的不灵活 API。" + +#: ../../whatsnew/3.5.rst:1035 +msgid "(Contributed by Berker Peksag in :issue:`22389`.)" +msgstr "(由 Berker Peksag 在 :issue:`22389` 中贡献。)" + +#: ../../whatsnew/3.5.rst:1039 +msgid "csv" +msgstr "csv" + +#: ../../whatsnew/3.5.rst:1041 +msgid "" +"The :meth:`~csv.csvwriter.writerow` method now supports arbitrary iterables," +" not just sequences. (Contributed by Serhiy Storchaka in :issue:`23171`.)" +msgstr "" +"现在 :meth:`~csv.csvwriter.writerow` 方法可支持任意可迭代对象,而不仅是序列。 (由 Serhiy Storchaka " +"在 :issue:`23171` 中贡献。)" + +#: ../../whatsnew/3.5.rst:1046 +msgid "curses" +msgstr "curses" + +#: ../../whatsnew/3.5.rst:1048 +msgid "" +"The new :func:`~curses.update_lines_cols` function updates the " +":envvar:`LINES` and :envvar:`COLS` environment variables. This is useful " +"for detecting manual screen resizing. (Contributed by Arnon Yaari in " +":issue:`4254`.)" +msgstr "" + +#: ../../whatsnew/3.5.rst:1054 +msgid "dbm" +msgstr "dbm" + +#: ../../whatsnew/3.5.rst:1056 +msgid "" +":func:`dumb.open ` always creates a new database when the " +"flag has the value ``\"n\"``. (Contributed by Claudiu Popa in " +":issue:`18039`.)" +msgstr "" +"当设置旗标值为 ``\"n\"`` 时 :func:`dumb.open ` 将总是创建新的数据库。 (由 Claudiu" +" Popa 在 :issue:`18039` 中贡献。)" + +#: ../../whatsnew/3.5.rst:1061 +msgid "difflib" +msgstr "difflib" + +#: ../../whatsnew/3.5.rst:1063 +msgid "" +"The charset of HTML documents generated by :meth:`HtmlDiff.make_file() " +"` can now be customized by using a new *charset*" +" keyword-only argument. The default charset of HTML document changed from " +"``\"ISO-8859-1\"`` to ``\"utf-8\"``. (Contributed by Berker Peksag in " +":issue:`2052`.)" +msgstr "" +"由 :meth:`HtmlDiff.make_file() ` 生成的 HTML " +"文档的字符集现在可通过使用新增的 *charset* 仅限关键字参数来自定义。 HTML 文档的默认字符集已从 ``\"ISO-8859-1\"`` " +"改为 ``\"utf-8\"``。 (由 Berker Peksag 在 :issue:`2052` 中贡献。)" + +#: ../../whatsnew/3.5.rst:1070 +msgid "" +"The :func:`~difflib.diff_bytes` function can now compare lists of byte " +"strings. This fixes a regression from Python 2. (Contributed by Terry J. " +"Reedy and Greg Ward in :issue:`17445`.)" +msgstr "" +"现在 :func:`~difflib.diff_bytes` 函数可能比较字节串的列表。 这修复了一个来自 Python 2 遗留总是。 (由 " +"Terry J. Reedy 和 Greg Ward 在 :issue:`17445` 中贡献。)" + +#: ../../whatsnew/3.5.rst:1076 +msgid "distutils" +msgstr "distutils" + +#: ../../whatsnew/3.5.rst:1078 +msgid "" +"Both the ``build`` and ``build_ext`` commands now accept a ``-j`` option to " +"enable parallel building of extension modules. (Contributed by Antoine " +"Pitrou in :issue:`5309`.)" +msgstr "" +"现在 ``build`` 和 ``build_ext`` 命令都接受一个 ``-j`` 选项以启用扩展模块的并行编译。 (由 Antoine " +"Pitrou 在 :issue:`5309` 中贡献。)" + +#: ../../whatsnew/3.5.rst:1082 +msgid "" +"The :mod:`distutils` module now supports ``xz`` compression, and can be " +"enabled by passing ``xztar`` as an argument to ``bdist --format``. " +"(Contributed by Serhiy Storchaka in :issue:`16314`.)" +msgstr "" + +#: ../../whatsnew/3.5.rst:1088 +msgid "doctest" +msgstr "doctest" + +#: ../../whatsnew/3.5.rst:1090 +msgid "" +"The :func:`~doctest.DocTestSuite` function returns an empty " +":class:`unittest.TestSuite` if *module* contains no docstrings, instead of " +"raising :exc:`ValueError`. (Contributed by Glenn Jones in :issue:`15916`.)" +msgstr "" +"如果 *module* 不包含任何文档字符串则 :func:`~doctest.DocTestSuite` 函数将返回一个空的 " +":class:`unittest.TestSuite`,而不是引发 :exc:`ValueError`。 (由 Glenn Jones 在 " +":issue:`15916` 中贡献。)" + +#: ../../whatsnew/3.5.rst:1096 +msgid "email" +msgstr "email" + +#: ../../whatsnew/3.5.rst:1098 +msgid "" +"A new policy option :attr:`Policy.mangle_from_ " +"` controls whether or not lines that start" +" with ``\"From \"`` in email bodies are prefixed with a ``\">\"`` character " +"by generators. The default is ``True`` for :attr:`~email.policy.compat32` " +"and ``False`` for all other policies. (Contributed by Milan Oberkirch in " +":issue:`20098`.)" +msgstr "" +"新增的策略选项 :attr:`Policy.mangle_from_ ` " +"可控制生成器是否要为电子邮件消息体中以controls whether or not lines that start with ``\"From " +"\"`` 打头的行添加 ``\">\"`` 字符前缀。 默认 :attr:`~email.policy.compat32` 为 ``True`` " +"而所有其他策略均为 ``False``。 (由 Milan Oberkirch 在 :issue:`20098` 中贡献。)" + +#: ../../whatsnew/3.5.rst:1104 +msgid "" +"A new :meth:`Message.get_content_disposition() " +"` method provides easy access" +" to a canonical value for the :mailheader:`Content-Disposition` header. " +"(Contributed by Abhilash Raj in :issue:`21083`.)" +msgstr "" +"新增的 :meth:`Message.get_content_disposition() " +"` 方法可提供对 " +":mailheader:`Content-Disposition` 标头规范值的便捷访问。 (由 Abhilash Raj 在 " +":issue:`21083` 中贡献。)" + +#: ../../whatsnew/3.5.rst:1110 +msgid "" +"A new policy option :attr:`EmailPolicy.utf8 `" +" can be set to ``True`` to encode email headers using the UTF-8 charset " +"instead of using encoded words. This allows ``Messages`` to be formatted " +"according to :rfc:`6532` and used with an SMTP server that supports the " +":rfc:`6531` ``SMTPUTF8`` extension. (Contributed by R. David Murray in " +":issue:`24211`.)" +msgstr "" +"新增的策略选项 :attr:`EmailPolicy.utf8 ` 可被设为 " +"``True`` 以使用 UTF-8 字符集而不是使用已编码的字来编码电子邮件标头。 这将允许根据 :rfc:`6532` 来格式化 " +"``Messages`` 并配合支持 :rfc:`6531` ``SMTPUTF8`` 扩展的 SMTP 服务器使用。 (由 R. David " +"Murray 在 :issue:`24211` 中贡献。)" + +#: ../../whatsnew/3.5.rst:1117 +msgid "" +"The :class:`mime.text.MIMEText ` constructor now " +"accepts a :class:`charset.Charset ` instance. " +"(Contributed by Claude Paroz and Berker Peksag in :issue:`16324`.)" +msgstr "" +"现在 :class:`mime.text.MIMEText ` 构造器可接受一个 " +":class:`charset.Charset ` 实例。 (由 Claude Paroz 和 " +"Berker Peksag 在 :issue:`16324` 中贡献。)" + +#: ../../whatsnew/3.5.rst:1123 +msgid "enum" +msgstr "enum" + +#: ../../whatsnew/3.5.rst:1125 +msgid "" +"The :class:`~enum.Enum` callable has a new parameter *start* to specify the " +"initial number of enum values if only *names* are provided::" +msgstr "" +":class:`~enum.Enum` 可调用对象新增了一个形参 *start* 用于在只提供了 *names* 的情况下指定枚举值的初始数量::" + +#: ../../whatsnew/3.5.rst:1134 +msgid "(Contributed by Ethan Furman in :issue:`21706`.)" +msgstr "(由 Ethan Furman 在 :issue:`21706` 中贡献。)" + +#: ../../whatsnew/3.5.rst:1138 +msgid "faulthandler" +msgstr "faulthandler" + +#: ../../whatsnew/3.5.rst:1140 +msgid "" +"The :func:`~faulthandler.enable`, :func:`~faulthandler.register`, " +":func:`~faulthandler.dump_traceback` and " +":func:`~faulthandler.dump_traceback_later` functions now accept file " +"descriptors in addition to file-like objects. (Contributed by Wei Wu in " +":issue:`23566`.)" +msgstr "" +"现在 :func:`~faulthandler.enable`, :func:`~faulthandler.register`, " +":func:`~faulthandler.dump_traceback` 和 " +":func:`~faulthandler.dump_traceback_later` 函数除了接受文件型对象以外也接受文件描述符。 (由 Wei Wu " +"在 :issue:`23566` 中贡献。)" + +#: ../../whatsnew/3.5.rst:1148 +msgid "functools" +msgstr "functools" + +#: ../../whatsnew/3.5.rst:1152 +msgid "" +"Most of the :func:`~functools.lru_cache` machinery is now implemented in C, " +"making it significantly faster. (Contributed by Matt Joiner, Alexey " +"Kachayev, and Serhiy Storchaka in :issue:`14373`.)" +msgstr "" +"现在大部分 :func:`~functools.lru_cache` 机制已使用 C 实现,使其速度显著提升。 (由 Matt Joiner, " +"Alexey Kachayev 和 Serhiy Storchaka 在 :issue:`14373` 中贡献。)" + +#: ../../whatsnew/3.5.rst:1158 +msgid "glob" +msgstr "glob" + +#: ../../whatsnew/3.5.rst:1160 +msgid "" +"The :func:`~glob.iglob` and :func:`~glob.glob` functions now support " +"recursive search in subdirectories, using the ``\"**\"`` pattern. " +"(Contributed by Serhiy Storchaka in :issue:`13968`.)" +msgstr "" +"现在 :func:`~glob.iglob` 和 :func:`~glob.glob` 函数支持通过使用 ``\"**\"`` 模式在子目录中递归搜索。" +" (由 Serhiy Storchaka 在 :issue:`13968` 中贡献。)" + +#: ../../whatsnew/3.5.rst:1166 +msgid "gzip" +msgstr "gzip" + +#: ../../whatsnew/3.5.rst:1168 +msgid "" +"The *mode* argument of the :class:`~gzip.GzipFile` constructor now accepts " +"``\"x\"`` to request exclusive creation. (Contributed by Tim Heaney in " +":issue:`19222`.)" +msgstr "" +"现在 :class:`~gzip.GzipFile` 构造器的 *mode* 参数可接受 ``\"x\"`` 来请求独占式的创建。 (由 Tim " +"Heaney 在 :issue:`19222` 中贡献。)" + +#: ../../whatsnew/3.5.rst:1174 +msgid "heapq" +msgstr "heapq" + +#: ../../whatsnew/3.5.rst:1176 +msgid "" +"Element comparison in :func:`~heapq.merge` can now be customized by passing " +"a :term:`key function` in a new optional *key* keyword argument, and a new " +"optional *reverse* keyword argument can be used to reverse element " +"comparison::" +msgstr "" +"现在 :func:`~heapq.merge` 中的元素比较可通过在新增的可选关键字参数 *key* 中传入一个 :term:`key " +"function` 来进行定制,并且新增了可选关键字参数 *reverse* 用于反向的元素比较::" + +#: ../../whatsnew/3.5.rst:1189 +msgid "(Contributed by Raymond Hettinger in :issue:`13742`.)" +msgstr "(由 Raymond Hettinger 在 :issue:`13742` 中贡献。)" + +#: ../../whatsnew/3.5.rst:1193 +msgid "http" +msgstr "http" + +#: ../../whatsnew/3.5.rst:1195 +msgid "" +"A new :class:`HTTPStatus ` enum that defines a set of HTTP " +"status codes, reason phrases and long descriptions written in English. " +"(Contributed by Demian Brecht in :issue:`21793`.)" +msgstr "" +"新增的 :class:`HTTPStatus ` 枚举定义了一组 HTTP 状态码、英文短说明和长描述。 (由 " +"Demian Brecht 在 :issue:`21793` 中贡献。)" + +#: ../../whatsnew/3.5.rst:1201 +msgid "http.client" +msgstr "http.client" + +#: ../../whatsnew/3.5.rst:1203 +msgid "" +":meth:`HTTPConnection.getresponse() " +"` now raises a " +":exc:`~http.client.RemoteDisconnected` exception when a remote server " +"connection is closed unexpectedly. Additionally, if a " +":exc:`ConnectionError` (of which ``RemoteDisconnected`` is a subclass) is " +"raised, the client socket is now closed automatically, and will reconnect on" +" the next request::" +msgstr "" +"现在 :meth:`HTTPConnection.getresponse() " +"` 在远程服务器连接被意外关闭时会引发 " +":exc:`~http.client.RemoteDisconnected` 异常。 此外,如果引发了 :exc:`ConnectionError` " +"(``RemoteDisconnected`` 是其子类),客户端套接字现在会自动关闭,并将在下次请求时重新连接::" + +#: ../../whatsnew/3.5.rst:1219 +msgid "(Contributed by Martin Panter in :issue:`3566`.)" +msgstr "(由 Martin Panter 在 :issue:`3566` 中贡献。)" + +#: ../../whatsnew/3.5.rst:1223 +msgid "idlelib and IDLE" +msgstr "idlelib 与 IDLE" + +#: ../../whatsnew/3.5.rst:1225 +msgid "" +"Since idlelib implements the IDLE shell and editor and is not intended for " +"import by other programs, it gets improvements with every release. See " +":file:`Lib/idlelib/NEWS.txt` for a cumulative list of changes since 3.4.0, " +"as well as changes made in future 3.5.x releases. This file is also " +"available from the IDLE :menuselection:`Help --> About IDLE` dialog." +msgstr "" +"由于 idlelib 实现了 IDLE 命令行界面和编辑器且不应被其他程序导入,它将随每个发布版获得不断改进。 请参阅 " +":file:`Lib/idlelib/NEWS.txt` 查看 3.4.0 以来的累积改变列表,以及未来 3.5.x 发布版将进行的改变。 " +"此文件也可通过 IDLE :menuselection:`Help --> About IDLE` 对话框查看。" + +#: ../../whatsnew/3.5.rst:1233 +msgid "imaplib" +msgstr "imaplib" + +#: ../../whatsnew/3.5.rst:1235 +msgid "" +"The :class:`~imaplib.IMAP4` class now supports the :term:`context manager` " +"protocol. When used in a :keyword:`with` statement, the IMAP4 ``LOGOUT`` " +"command will be called automatically at the end of the block. (Contributed " +"by Tarek Ziadé and Serhiy Storchaka in :issue:`4972`.)" +msgstr "" +"现在 :class:`~imaplib.IMAP4` 类已支持 :term:`context manager` 协议。 当用于 " +":keyword:`with` 语句时,IMAP4 ``LOGOUT`` 命令将在代码块的末尾被自动调用。 (由 Tarek Ziadé 和 " +"Serhiy Storchaka 在 :issue:`4972` 中贡献。)" + +#: ../../whatsnew/3.5.rst:1240 +msgid "" +"The :mod:`imaplib` module now supports :rfc:`5161` (ENABLE Extension) and " +":rfc:`6855` (UTF-8 Support) via the :meth:`IMAP4.enable() " +"` method. A new :attr:`IMAP4.utf8_enabled " +"` attribute tracks whether or not :rfc:`6855` " +"support is enabled. (Contributed by Milan Oberkirch, R. David Murray, and " +"Maciej Szulik in :issue:`21800`.)" +msgstr "" +"现在 :mod:`imaplib` 模块已通过 :meth:`IMAP4.enable() ` 方法支持 " +":rfc:`5161` (ENABLE 扩展) 和 :rfc:`6855` (UTF-8 支持)。 新增的 " +":attr:`IMAP4.utf8_enabled ` 属性可跟踪 :rfc:`6855` " +"支持是否被启用。 (由 Milan Oberkirch, R. David Murray 和 Maciej Szulik 在 " +":issue:`21800` 中贡献。)" + +#: ../../whatsnew/3.5.rst:1247 +msgid "" +"The :mod:`imaplib` module now automatically encodes non-ASCII string " +"usernames and passwords using UTF-8, as recommended by the RFCs. " +"(Contributed by Milan Oberkirch in :issue:`21800`.)" +msgstr "" +"现在 :mod:`imaplib` 模块会自动使用 UTF-8 自动编码非 ASCII 字符串的用户名和密码,如 RFC 所建议的那样。 (由 " +"Milan Oberkirch 在 :issue:`21800` 中贡献。)" + +#: ../../whatsnew/3.5.rst:1253 +msgid "imghdr" +msgstr "imghdr" + +#: ../../whatsnew/3.5.rst:1255 +msgid "" +"The :func:`~imghdr.what` function now recognizes the `OpenEXR " +"`_ format (contributed by Martin Vignali and Claudiu" +" Popa in :issue:`20295`), and the `WebP " +"`_ format (contributed by Fabrice Aneche" +" and Claudiu Popa in :issue:`20197`.)" +msgstr "" + +#: ../../whatsnew/3.5.rst:1263 +msgid "importlib" +msgstr "importlib" + +#: ../../whatsnew/3.5.rst:1265 +msgid "" +"The :class:`util.LazyLoader ` class allows for " +"lazy loading of modules in applications where startup time is important. " +"(Contributed by Brett Cannon in :issue:`17621`.)" +msgstr "" +":class:`util.LazyLoader ` " +"类允许在对启动时间敏感的应用程序中使用模块的惰性加载。 (由 Brett Cannon 在 :issue:`17621` 中贡献。)" + +#: ../../whatsnew/3.5.rst:1269 +msgid "" +"The :func:`abc.InspectLoader.source_to_code() " +"` method is now a static method." +" This makes it easier to initialize a module object with code compiled from" +" a string by running ``exec(code, module.__dict__)``. (Contributed by Brett " +"Cannon in :issue:`21156`.)" +msgstr "" +"现在 :func:`abc.InspectLoader.source_to_code() " +"` 方法属于静态方法。 这样将可更方便地通过运行 " +"``exec(code, module.__dict__)`` 基于字符串编译的代码来初始化模块。 (由 Brett Cannon 在 " +":issue:`21156` 中贡献。)" + +#: ../../whatsnew/3.5.rst:1275 +msgid "" +"The new :func:`util.module_from_spec() ` " +"function is now the preferred way to create a new module. As opposed to " +"creating a :class:`types.ModuleType` instance directly, this new function " +"will set the various import-controlled attributes based on the passed-in " +"spec object. (Contributed by Brett Cannon in :issue:`20383`.)" +msgstr "" +"新增的 :func:`util.module_from_spec() ` " +"函数现在是创建新模块的首先方式。 相比直接创建 :class:`types.ModuleType` " +"实例,这个新函数将基于传入的规格说明对象设置各种导入控制的属性。 (由 Brett Cannon 在 :issue:`20383` 中贡献。)" + +#: ../../whatsnew/3.5.rst:1283 +msgid "inspect" +msgstr "inspect" + +#: ../../whatsnew/3.5.rst:1285 +msgid "" +"Both the :class:`~inspect.Signature` and :class:`~inspect.Parameter` classes" +" are now picklable and hashable. (Contributed by Yury Selivanov in " +":issue:`20726` and :issue:`20334`.)" +msgstr "" +"现在 :class:`~inspect.Signature` 和 :class:`~inspect.Parameter` 类都是可封存和可哈希的对象。 " +"(由 Yury Selivanov 在 :issue:`20726` 和 :issue:`20334` 中贡献。)" + +#: ../../whatsnew/3.5.rst:1289 +msgid "" +"A new :meth:`BoundArguments.apply_defaults() " +"` method provides a way to set " +"default values for missing arguments::" +msgstr "" +"新增的 :meth:`BoundArguments.apply_defaults() " +"` 方法提供了一种为缺失的参数设置默认值的方式::" + +#: ../../whatsnew/3.5.rst:1299 +msgid "(Contributed by Yury Selivanov in :issue:`24190`.)" +msgstr "(由 Yury Selivanov 在 :issue:`24190` 中贡献。)" + +#: ../../whatsnew/3.5.rst:1301 +msgid "" +"A new class method :meth:`Signature.from_callable() " +"` makes subclassing of " +":class:`~inspect.Signature` easier. (Contributed by Yury Selivanov and Eric" +" Snow in :issue:`17373`.)" +msgstr "" +"新增的类方法 :meth:`Signature.from_callable() ` " +"使得 :class:`~inspect.Signature` 的子类化更为容易。 (由 Yury Selivanov 和 Eric Snow 在 " +":issue:`17373` 中贡献。)" + +#: ../../whatsnew/3.5.rst:1306 +msgid "" +"The :func:`~inspect.signature` function now accepts a *follow_wrapped* " +"optional keyword argument, which, when set to ``False``, disables automatic " +"following of ``__wrapped__`` links. (Contributed by Yury Selivanov in " +":issue:`20691`.)" +msgstr "" +"现在 :func:`~inspect.signature` 函数接受 *follow_wrapped* 可选关键字参数,当其设为 ``False`` " +"时,将禁用 ``__wrapped__`` 链接的自动跟随。 (由 Yury Selivanov 在 :issue:`20691` 中贡献。)" + +#: ../../whatsnew/3.5.rst:1311 +msgid "" +"A set of new functions to inspect :term:`coroutine functions ` and :term:`coroutine objects ` has been added: " +":func:`~inspect.iscoroutine`, :func:`~inspect.iscoroutinefunction`, " +":func:`~inspect.isawaitable`, :func:`~inspect.getcoroutinelocals`, and " +":func:`~inspect.getcoroutinestate`. (Contributed by Yury Selivanov in " +":issue:`24017` and :issue:`24400`.)" +msgstr "" +"新增了一组用于检查 :term:`协程函数 ` 和 :term:`协程对象 ` 的函数: " +":func:`~inspect.iscoroutine`, :func:`~inspect.iscoroutinefunction`, " +":func:`~inspect.isawaitable`, :func:`~inspect.getcoroutinelocals` 和 " +":func:`~inspect.getcoroutinestate`。 (由 Yury Selivanov 在 :issue:`24017` 和 " +":issue:`24400` 中贡献。)" + +#: ../../whatsnew/3.5.rst:1319 +msgid "" +"The :func:`~inspect.stack`, :func:`~inspect.trace`, " +":func:`~inspect.getouterframes`, and :func:`~inspect.getinnerframes` " +"functions now return a list of named tuples. (Contributed by Daniel Shahaf " +"in :issue:`16808`.)" +msgstr "" +"现在 :func:`~inspect.stack`, :func:`~inspect.trace`, " +":func:`~inspect.getouterframes` 和 :func:`~inspect.getinnerframes` " +"函数将返回具名元组的列表。 (由 Daniel Shahaf 在 :issue:`16808` 中贡献。)" + +#: ../../whatsnew/3.5.rst:1326 +msgid "io" +msgstr "io" + +#: ../../whatsnew/3.5.rst:1328 +msgid "" +"A new :meth:`BufferedIOBase.readinto1() ` " +"method, that uses at most one call to the underlying raw stream's " +":meth:`RawIOBase.read() ` or :meth:`RawIOBase.readinto() " +"` methods. (Contributed by Nikolaus Rath in " +":issue:`20578`.)" +msgstr "" +"新增 :meth:`BufferedIOBase.readinto1() ` " +"方法,该方法会使用至少一次对下层原始流的调用 :meth:`RawIOBase.read() ` 或 " +":meth:`RawIOBase.readinto() ` 方法。 (由 Nikolaus Rath 在 " +":issue:`20578` 中贡献。)" + +#: ../../whatsnew/3.5.rst:1336 +msgid "ipaddress" +msgstr "ipaddress" + +#: ../../whatsnew/3.5.rst:1338 +msgid "" +"Both the :class:`~ipaddress.IPv4Network` and :class:`~ipaddress.IPv6Network`" +" classes now accept an ``(address, netmask)`` tuple argument, so as to " +"easily construct network objects from existing addresses::" +msgstr "" +"现在 :class:`~ipaddress.IPv4Network` 和 :class:`~ipaddress.IPv6Network` 类均接受一个 " +"``(address, netmask)`` 元组参数,可以根据现有地址方便地构造网络对象::" + +#: ../../whatsnew/3.5.rst:1348 +msgid "(Contributed by Peter Moody and Antoine Pitrou in :issue:`16531`.)" +msgstr "(由 Peter Moody 和 Antoine Pitrou 在 :issue:`16531` 中贡献。)" + +#: ../../whatsnew/3.5.rst:1350 +msgid "" +"A new :attr:`~ipaddress.IPv4Network.reverse_pointer` attribute for the " +":class:`~ipaddress.IPv4Network` and :class:`~ipaddress.IPv6Network` classes " +"returns the name of the reverse DNS PTR record::" +msgstr "" +"新增 :class:`~ipaddress.IPv4Network` 和 :class:`~ipaddress.IPv6Network` 类的 " +":attr:`~ipaddress.IPv4Network.reverse_pointer` 属性用于返回 DNS PTR 反向记录的名称::" + +#: ../../whatsnew/3.5.rst:1362 +msgid "(Contributed by Leon Weber in :issue:`20480`.)" +msgstr "(由 Leon Weber 在 :issue:`20480` 中贡献。)" + +#: ../../whatsnew/3.5.rst:1366 +msgid "json" +msgstr "json" + +#: ../../whatsnew/3.5.rst:1368 +msgid "" +"The :mod:`json.tool` command line interface now preserves the order of keys " +"in JSON objects passed in input. The new ``--sort-keys`` option can be used" +" to sort the keys alphabetically. (Contributed by Berker Peksag in " +":issue:`21650`.)" +msgstr "" +"现在 :mod:`json.tool` 命令行接口会保留输入中传入的 JSON 对象中键的顺序。 新的 ``--sort-keys`` " +"选项可用于按字母顺序对键进行排序。 (由 Berker Peksag 在 :issue:`21650` 中贡献。)" + +#: ../../whatsnew/3.5.rst:1373 +msgid "" +"JSON decoder now raises :exc:`~json.JSONDecodeError` instead of " +":exc:`ValueError` to provide better context information about the error. " +"(Contributed by Serhiy Storchaka in :issue:`19361`.)" +msgstr "" +"现在 JSON 解码器会引发 :exc:`~json.JSONDecodeError` 而不是 :exc:`ValueError` " +"以提供有关错误的更好的上下文信息。 (由 Serhiy Storchaka 在 :issue:`19361` 中贡献。)" + +#: ../../whatsnew/3.5.rst:1379 +msgid "linecache" +msgstr "linecache" + +#: ../../whatsnew/3.5.rst:1381 +msgid "" +"A new :func:`~linecache.lazycache` function can be used to capture " +"information about a non-file-based module to permit getting its lines later " +"via :func:`~linecache.getline`. This avoids doing I/O until a line is " +"actually needed, without having to carry the module globals around " +"indefinitely. (Contributed by Robert Collins in :issue:`17911`.)" +msgstr "" +"新增的 :func:`~linecache.lazycache` 函数可用于捕获非基于文件的模块 的信息以允许在此后通过 " +":func:`~linecache.getline` 获取其行数据。 这样就可以避免在实际需要某一行之前执行 I/O 操作,从而不需要无限期地持有模块 " +"globals。 (由 Robert Collins 在 :issue:`17911` 中贡献。)" + +#: ../../whatsnew/3.5.rst:1389 +msgid "locale" +msgstr "locale" + +#: ../../whatsnew/3.5.rst:1391 +msgid "" +"A new :func:`~locale.delocalize` function can be used to convert a string " +"into a normalized number string, taking the ``LC_NUMERIC`` settings into " +"account::" +msgstr "" +"新增的 :func:`~locale.delocalize` 函数可用于将字符串转换为表示规范化数字的字符串 ,并会考虑 ``LC_NUMERIC`` " +"的设置::" + +#: ../../whatsnew/3.5.rst:1404 +msgid "(Contributed by Cédric Krier in :issue:`13918`.)" +msgstr "(由 Cédric Krier 在 :issue:`13918` 中贡献。)" + +#: ../../whatsnew/3.5.rst:1408 +msgid "logging" +msgstr "logging" + +#: ../../whatsnew/3.5.rst:1410 +msgid "" +"All logging methods (:class:`~logging.Logger` :meth:`~logging.Logger.log`, " +":meth:`~logging.Logger.exception`, :meth:`~logging.Logger.critical`, " +":meth:`~logging.Logger.debug`, etc.), now accept exception instances as an " +"*exc_info* argument, in addition to boolean values and exception tuples::" +msgstr "" +"所有日志记录方法(如 :class:`~logging.Logger` :meth:`~logging.Logger.log`, " +":meth:`~logging.Logger.exception`, :meth:`~logging.Logger.critical`, " +":meth:`~logging.Logger.debug` 等)的 *exc_info* 参数现在除接受布尔值和异常元组以外,也接受异常实例::" + +#: ../../whatsnew/3.5.rst:1423 +msgid "(Contributed by Yury Selivanov in :issue:`20537`.)" +msgstr "(由 Yury Selivanov 在 :issue:`20537` 中贡献。)" + +#: ../../whatsnew/3.5.rst:1425 +msgid "" +"The :class:`handlers.HTTPHandler ` class now " +"accepts an optional :class:`ssl.SSLContext` instance to configure SSL " +"settings used in an HTTP connection. (Contributed by Alex Gaynor in " +":issue:`22788`.)" +msgstr "" +"现在 :class:`handlers.HTTPHandler ` 类接受一个可选的 " +":class:`ssl.SSLContext` 实例来配置在 HTTP 连接中使用的 SSL 设置。 (由 Alex Gaynor 在 " +":issue:`22788` 中贡献。)" + +#: ../../whatsnew/3.5.rst:1430 +msgid "" +"The :class:`handlers.QueueListener ` class " +"now takes a *respect_handler_level* keyword argument which, if set to " +"``True``, will pass messages to handlers taking handler levels into account." +" (Contributed by Vinay Sajip.)" +msgstr "" +"现在 :class:`handlers.QueueListener ` 类接受一个 " +"*respect_handler_level* 关键字参数,如果将该参数设为 ``True``,会向处理器传递消息以将处理器级别纳入考量。 (由 " +"Vinay Sajip 贡献。)" + +#: ../../whatsnew/3.5.rst:1437 +msgid "lzma" +msgstr "lzma" + +#: ../../whatsnew/3.5.rst:1439 +msgid "" +"The :meth:`LZMADecompressor.decompress() `" +" method now accepts an optional *max_length* argument to limit the maximum " +"size of decompressed data. (Contributed by Martin Panter in :issue:`15955`.)" +msgstr "" +"现在 :meth:`LZMADecompressor.decompress() ` " +"方法接受一个可选的 *max_length* 参数用来限制解压缩数据的大小上限。 (由 Martin Panter 在 :issue:`15955` " +"中贡献。)" + +#: ../../whatsnew/3.5.rst:1446 +msgid "math" +msgstr "math" + +#: ../../whatsnew/3.5.rst:1448 +msgid "" +"Two new constants have been added to the :mod:`math` module: " +":data:`~math.inf` and :data:`~math.nan`. (Contributed by Mark Dickinson in " +":issue:`23185`.)" +msgstr "" +"向 :mod:`math` 模块增加了两个新常量: :data:`~math.inf` 和 :data:`~math.nan`。 (由 Mark " +"Dickinson 在 :issue:`23185` 中贡献。)" + +#: ../../whatsnew/3.5.rst:1451 +msgid "" +"A new function :func:`~math.isclose` provides a way to test for approximate " +"equality. (Contributed by Chris Barker and Tal Einat in :issue:`24270`.)" +msgstr "" +"新增函数 :func:`~math.isclose` 提供了一种测试近似相等的方式。 (由 Chris Barker 和 Tal Einat 在 " +":issue:`24270` 中贡献。)" + +#: ../../whatsnew/3.5.rst:1454 +msgid "" +"A new :func:`~math.gcd` function has been added. The :func:`fractions.gcd` " +"function is now deprecated. (Contributed by Mark Dickinson and Serhiy " +"Storchaka in :issue:`22486`.)" +msgstr "" +"新增 :func:`~math.gcd` 函数。 现在 :func:`fractions.gcd` 函数已被弃用。 (由 Mark Dickinson " +"和 Serhiy Storchaka 在 :issue:`22486` 中贡献。)" + +#: ../../whatsnew/3.5.rst:1460 +msgid "multiprocessing" +msgstr "multiprocessing" + +#: ../../whatsnew/3.5.rst:1462 +msgid "" +":func:`sharedctypes.synchronized() " +"` objects now support the " +":term:`context manager` protocol. (Contributed by Charles-François Natali in" +" :issue:`21565`.)" +msgstr "" +"现在 :func:`sharedctypes.synchronized() " +"` 对象支持 :term:`context manager` " +"协议。 (由 Charles-François Natali 在 :issue:`21565` 中贡献。)" + +#: ../../whatsnew/3.5.rst:1468 +msgid "operator" +msgstr "operator" + +#: ../../whatsnew/3.5.rst:1470 +msgid "" +":func:`~operator.attrgetter`, :func:`~operator.itemgetter`, and " +":func:`~operator.methodcaller` objects now support pickling. (Contributed by" +" Josh Rosenberg and Serhiy Storchaka in :issue:`22955`.)" +msgstr "" +"现在 :func:`~operator.attrgetter`, :func:`~operator.itemgetter` 和 " +":func:`~operator.methodcaller` 对象支持封存操作。 (由 Josh Rosenberg 和 Serhiy " +"Storchaka 在 :issue:`22955` 中贡献。)" + +#: ../../whatsnew/3.5.rst:1474 +msgid "" +"New :func:`~operator.matmul` and :func:`~operator.imatmul` functions to " +"perform matrix multiplication. (Contributed by Benjamin Peterson in " +":issue:`21176`.)" +msgstr "" +"新增 :func:`~operator.matmul` 和 :func:`~operator.imatmul` 函数用于执行矩阵乘法。 (由 " +"Benjamin Peterson 在 :issue:`21176` 中贡献。)" + +#: ../../whatsnew/3.5.rst:1480 +msgid "os" +msgstr "os" + +#: ../../whatsnew/3.5.rst:1482 +msgid "" +"The new :func:`~os.scandir` function returning an iterator of " +":class:`~os.DirEntry` objects has been added. If possible, " +":func:`~os.scandir` extracts file attributes while scanning a directory, " +"removing the need to perform subsequent system calls to determine file type " +"or attributes, which may significantly improve performance. (Contributed by" +" Ben Hoyt with the help of Victor Stinner in :issue:`22524`.)" +msgstr "" +"新增 :func:`~os.scandir` 函数可返回一个 :class:`~os.DirEntry` 对象的迭代器。 " +"如有可能,:func:`~os.scandir` 会在扫描目录时提取文件属性,不必再执行后续的系统调用来确定文件类型或属性,这可以显著提升运行效率。 " +"(由 Ben Hoyt 在 :issue:`22524` 并得到 Victor Stinner 的协助。)" + +#: ../../whatsnew/3.5.rst:1489 +msgid "" +"On Windows, a new :attr:`stat_result.st_file_attributes " +"` attribute is now available. It " +"corresponds to the ``dwFileAttributes`` member of the " +"``BY_HANDLE_FILE_INFORMATION`` structure returned by " +"``GetFileInformationByHandle()``. (Contributed by Ben Hoyt in " +":issue:`21719`.)" +msgstr "" +"在 Windows 上,现在可使用新的 :attr:`stat_result.st_file_attributes " +"` 属性。 它对应于 " +"``GetFileInformationByHandle()`` 所返回的 ``BY_HANDLE_FILE_INFORMATION`` 结构体的 " +"``dwFileAttributes`` 成员。 (由 Ben Hoyt 在 :issue:`21719` 中贡献。)" + +#: ../../whatsnew/3.5.rst:1495 +msgid "" +"The :func:`~os.urandom` function now uses the ``getrandom()`` syscall on " +"Linux 3.17 or newer, and ``getentropy()`` on OpenBSD 5.6 and newer, removing" +" the need to use ``/dev/urandom`` and avoiding failures due to potential " +"file descriptor exhaustion. (Contributed by Victor Stinner in " +":issue:`22181`.)" +msgstr "" +"现在 :func:`~os.urandom` 函数在 Linux 3.17 或更新的系统上会使用 ``getrandom()`` 系统调用,而在 " +"OpenBSD 5.6 或更新的系统上会使用 ``getentropy()``,不必再使用 ``/dev/urandom`` " +"并避免由于潜在的文件描述符耗尽导致的执行失败。 (由 Victor Stinner 在 :issue:`22181` 中贡献。)" + +#: ../../whatsnew/3.5.rst:1500 +msgid "" +"New :func:`~os.get_blocking` and :func:`~os.set_blocking` functions allow " +"getting and setting a file descriptor's blocking mode " +"(:data:`~os.O_NONBLOCK`.) (Contributed by Victor Stinner in :issue:`22054`.)" +msgstr "" + +#: ../../whatsnew/3.5.rst:1504 +msgid "" +"The :func:`~os.truncate` and :func:`~os.ftruncate` functions are now " +"supported on Windows. (Contributed by Steve Dower in :issue:`23668`.)" +msgstr "" +"现在 :func:`~os.truncate` 和 :func:`~os.ftruncate` 函数在 Windows 上已受到支持。 (由 Steve" +" Dower 在 :issue:`23668` 中贡献。)" + +#: ../../whatsnew/3.5.rst:1507 +msgid "" +"There is a new :func:`os.path.commonpath` function returning the longest " +"common sub-path of each passed pathname. Unlike the " +":func:`os.path.commonprefix` function, it always returns a valid path::" +msgstr "" +"新增的 :func:`os.path.commonpath` 函数可返回所传入的每个路径名的最长共同子路径。 与 " +":func:`os.path.commonprefix` 函数不同,该函数总是会返回一个有效的路径::" + +#: ../../whatsnew/3.5.rst:1518 +msgid "(Contributed by Rafik Draoui and Serhiy Storchaka in :issue:`10395`.)" +msgstr "(由 Rafik Draoui 和 Serhiy Storchaka 在 :issue:`10395` 中贡献。)" + +#: ../../whatsnew/3.5.rst:1522 +msgid "pathlib" +msgstr "pathlib" + +#: ../../whatsnew/3.5.rst:1524 +msgid "" +"The new :meth:`Path.samefile() ` method can be used " +"to check whether the path points to the same file as another path, which can" +" be either another :class:`~pathlib.Path` object, or a string::" +msgstr "" +"新增的 :meth:`Path.samefile() ` " +"方法可被用来检查一个路径是否与另一个路径指向相同的文件,两个路径可以是 :class:`~pathlib.Path` 对象,也可以是字符串::" + +#: ../../whatsnew/3.5.rst:1534 +msgid "(Contributed by Vajrasky Kok and Antoine Pitrou in :issue:`19775`.)" +msgstr "(由 Vajrasky Kok 和 Antoine Pitrou 在 :issue:`19775` 中贡献。)" + +#: ../../whatsnew/3.5.rst:1536 +msgid "" +"The :meth:`Path.mkdir() ` method now accepts a new " +"optional *exist_ok* argument to match ``mkdir -p`` and :func:`os.makedirs` " +"functionality. (Contributed by Berker Peksag in :issue:`21539`.)" +msgstr "" +"现在 :meth:`Path.mkdir() ` 方法接受一个新的 *exist_ok* 可选参数以与 " +"``mkdir -p`` 和 :func:`os.makedirs` 的功能相匹配。 (由 Berker Peksag 在 :issue:`21539`" +" 中贡献。)" + +#: ../../whatsnew/3.5.rst:1540 +msgid "" +"There is a new :meth:`Path.expanduser() ` method to" +" expand ``~`` and ``~user`` prefixes. (Contributed by Serhiy Storchaka and " +"Claudiu Popa in :issue:`19776`.)" +msgstr "" +"新增了一个 :meth:`Path.expanduser() ` 方法用于扩展 ``~`` 和 " +"``~user`` 前缀。 (由 Serhiy Storchaka 和 Claudiu Popa 在 :issue:`19776` 中贡献。)" + +#: ../../whatsnew/3.5.rst:1544 +msgid "" +"A new :meth:`Path.home() ` class method can be used to " +"get a :class:`~pathlib.Path` instance representing the user’s home " +"directory. (Contributed by Victor Salgado and Mayank Tripathi in " +":issue:`19777`.)" +msgstr "" +"新增的 :meth:`Path.home() ` 类方法可被用于获取代表用户家目录的 " +":class:`~pathlib.Path` 实例。 (由 Victor Salgado 和 Mayank Tripathi 在 " +":issue:`19777` 中贡献。)" + +#: ../../whatsnew/3.5.rst:1549 +msgid "" +"New :meth:`Path.write_text() `, " +":meth:`Path.read_text() `, :meth:`Path.write_bytes()" +" `, :meth:`Path.read_bytes() " +"` methods to simplify read/write operations on " +"files." +msgstr "" +"新增 :meth:`Path.write_text() `, " +":meth:`Path.read_text() `, :meth:`Path.write_bytes()" +" `, :meth:`Path.read_bytes() " +"` 方法用于简化对文件的读/写操作。" + +#: ../../whatsnew/3.5.rst:1555 +msgid "" +"The following code snippet will create or rewrite existing file " +"``~/spam42``::" +msgstr "以下代码片段将创建或重写现有的文件 ``~/spam42``::" + +#: ../../whatsnew/3.5.rst:1563 +msgid "(Contributed by Christopher Welborn in :issue:`20218`.)" +msgstr "(由 Christopher Welborn 在 :issue:`20218` 中贡献。)" + +#: ../../whatsnew/3.5.rst:1567 +msgid "pickle" +msgstr "pickle" + +#: ../../whatsnew/3.5.rst:1569 +msgid "" +"Nested objects, such as unbound methods or nested classes, can now be " +"pickled using :ref:`pickle protocols ` older than protocol" +" version 4. Protocol version 4 already supports these cases. (Contributed " +"by Serhiy Storchaka in :issue:`23611`.)" +msgstr "" +"嵌套的对象,例如未绑定方法或嵌套的类,现在可以使用早于协议版本 4 的 :ref:`pickle 协议 `。 " +"协议版本 4 在此前已支持此种场景。 (由 Serhiy Storchaka 在 :issue:`23611` 中贡献。)" + +#: ../../whatsnew/3.5.rst:1576 +msgid "poplib" +msgstr "poplib" + +#: ../../whatsnew/3.5.rst:1578 +msgid "" +"A new :meth:`POP3.utf8() ` command enables :rfc:`6856` " +"(Internationalized Email) support, if a POP server supports it. (Contributed" +" by Milan OberKirch in :issue:`21804`.)" +msgstr "" +"新增 :meth:`POP3.utf8() ` 命令可以启用 :rfc:`6856` (国际化 Email) " +"支持,如果 POP 服务器支持的话。 (由 Milan OberKirch 在 :issue:`21804` 中贡献。)" + +#: ../../whatsnew/3.5.rst:1584 +msgid "re" +msgstr "re" + +#: ../../whatsnew/3.5.rst:1586 +msgid "" +"References and conditional references to groups with fixed length are now " +"allowed in lookbehind assertions::" +msgstr "现在对固定长度分组的引用和有条件引用在后视断言中已被允许::" + +#: ../../whatsnew/3.5.rst:1596 +msgid "(Contributed by Serhiy Storchaka in :issue:`9179`.)" +msgstr "(由 Serhiy Storchaka 在 :issue:`9179` 中贡献。)" + +#: ../../whatsnew/3.5.rst:1598 +msgid "" +"The number of capturing groups in regular expressions is no longer limited " +"to 100. (Contributed by Serhiy Storchaka in :issue:`22437`.)" +msgstr "" +"在正则表达式中捕获分组的数量不再有 100 个的上限。 (由 Serhiy Storchaka 在 :issue:`22437` 中贡献。)" + +#: ../../whatsnew/3.5.rst:1601 +msgid "" +"The :func:`~re.sub` and :func:`~re.subn` functions now replace unmatched " +"groups with empty strings instead of raising an exception. (Contributed by " +"Serhiy Storchaka in :issue:`1519638`.)" +msgstr "" +"现在 :func:`~re.sub` 和 :func:`~re.subn` 函数将用空字符串替换不匹配的分组而不是引发异常。 (由 Serhiy " +"Storchaka 在 :issue:`1519638` 中贡献。)" + +#: ../../whatsnew/3.5.rst:1605 +msgid "" +"The :class:`re.error` exceptions have new attributes, :attr:`~re.error.msg`," +" :attr:`~re.error.pattern`, :attr:`~re.error.pos`, :attr:`~re.error.lineno`," +" and :attr:`~re.error.colno`, that provide better context information about " +"the error::" +msgstr "" +":class:`re.error` 异常添加了新的属性 :attr:`~re.error.msg`, " +":attr:`~re.error.pattern`, :attr:`~re.error.pos`, :attr:`~re.error.lineno` 和" +" :attr:`~re.error.colno`,以提供更详细的错误上下文信息::" + +#: ../../whatsnew/3.5.rst:1619 +msgid "(Contributed by Serhiy Storchaka in :issue:`22578`.)" +msgstr "(由 Serhiy Storchaka 在 :issue:`22578` 中贡献。)" + +#: ../../whatsnew/3.5.rst:1623 +msgid "readline" +msgstr "readline" + +#: ../../whatsnew/3.5.rst:1625 +msgid "" +"A new :func:`~readline.append_history_file` function can be used to append " +"the specified number of trailing elements in history to the given file. " +"(Contributed by Bruno Cauet in :issue:`22940`.)" +msgstr "" +"新增的 :func:`~readline.append_history_file` 函数可被用于将历史数据中指定数量的末尾元素添加到给定的文件中。 (由" +" Bruno Cauet 在 :issue:`22940` 中贡献。)" + +#: ../../whatsnew/3.5.rst:1631 +msgid "selectors" +msgstr "selectors" + +#: ../../whatsnew/3.5.rst:1633 +msgid "" +"The new :class:`~selectors.DevpollSelector` supports efficient ``/dev/poll``" +" polling on Solaris. (Contributed by Giampaolo Rodola' in :issue:`18931`.)" +msgstr "" +"新增的 :class:`~selectors.DevpollSelector` 在 Solaris 上支持高效的 ``/dev/poll`` 轮询。 " +"(由 Giampaolo Rodola' 在 :issue:`18931` 中贡献。)" + +#: ../../whatsnew/3.5.rst:1639 +msgid "shutil" +msgstr "shutil" + +#: ../../whatsnew/3.5.rst:1641 +msgid "" +"The :func:`~shutil.move` function now accepts a *copy_function* argument, " +"allowing, for example, the :func:`~shutil.copy` function to be used instead " +"of the default :func:`~shutil.copy2` if there is a need to ignore file " +"metadata when moving. (Contributed by Claudiu Popa in :issue:`19840`.)" +msgstr "" +"现在 :func:`~shutil.move` 函数现在接受一个 *copy_function* " +"参数,举例来说,如果需要在移动文件时忽略其元数据,可以使用 :func:`~shutil.copy` 函数来代替默认的 " +":func:`~shutil.copy2`。 (由 Claudiu Popa 在 :issue:`19840` 中贡献。)" + +#: ../../whatsnew/3.5.rst:1647 +msgid "" +"The :func:`~shutil.make_archive` function now supports the *xztar* format. " +"(Contributed by Serhiy Storchaka in :issue:`5411`.)" +msgstr "" +"现在 :func:`~shutil.make_archive` 函数已支持 *xztar* 格式。 (由 Serhiy Storchaka 在 " +":issue:`5411` 中贡献。)" + +#: ../../whatsnew/3.5.rst:1652 +msgid "signal" +msgstr "signal" + +#: ../../whatsnew/3.5.rst:1654 +msgid "" +"On Windows, the :func:`~signal.set_wakeup_fd` function now also supports " +"socket handles. (Contributed by Victor Stinner in :issue:`22018`.)" +msgstr "" +"在 Windows 上,现在 :func:`~signal.set_wakeup_fd` 函数还可以支持套接字句柄。 (由 Victor Stinner" +" 在 :issue:`22018` 中贡献。)" + +#: ../../whatsnew/3.5.rst:1657 +msgid "" +"Various ``SIG*`` constants in the :mod:`signal` module have been converted " +"into :mod:`Enums `. This allows meaningful names to be printed during" +" debugging, instead of integer \"magic numbers\". (Contributed by Giampaolo " +"Rodola' in :issue:`21076`.)" +msgstr "" +":mod:`signal` 模块中的各个 ``SIG*`` 常量已被转换为 :mod:`枚举 `。 " +"这允许在调试期间打印有意义的名称,而不是整数类型的“魔法数字”。 (由 Giampaolo Rodola' 在 :issue:`21076` 中贡献。)" + +#: ../../whatsnew/3.5.rst:1664 +msgid "smtpd" +msgstr "smtpd" + +#: ../../whatsnew/3.5.rst:1666 +msgid "" +"Both the :class:`~smtpd.SMTPServer` and :class:`~smtpd.SMTPChannel` classes " +"now accept a *decode_data* keyword argument to determine if the ``DATA`` " +"portion of the SMTP transaction is decoded using the ``\"utf-8\"`` codec or " +"is instead provided to the :meth:`SMTPServer.process_message() " +"` method as a byte string. The default is" +" ``True`` for backward compatibility reasons, but will change to ``False`` " +"in Python 3.6. If *decode_data* is set to ``False``, the " +"``process_message`` method must be prepared to accept keyword arguments. " +"(Contributed by Maciej Szulik in :issue:`19662`.)" +msgstr "" + +#: ../../whatsnew/3.5.rst:1677 +msgid "" +"The :class:`~smtpd.SMTPServer` class now advertises the ``8BITMIME`` " +"extension (:rfc:`6152`) if *decode_data* has been set ``True``. If the " +"client specifies ``BODY=8BITMIME`` on the ``MAIL`` command, it is passed to " +":meth:`SMTPServer.process_message() ` via " +"the *mail_options* keyword. (Contributed by Milan Oberkirch and R. David " +"Murray in :issue:`21795`.)" +msgstr "" + +#: ../../whatsnew/3.5.rst:1684 +msgid "" +"The :class:`~smtpd.SMTPServer` class now also supports the ``SMTPUTF8`` " +"extension (:rfc:`6531`: Internationalized Email). If the client specified " +"``SMTPUTF8 BODY=8BITMIME`` on the ``MAIL`` command, they are passed to " +":meth:`SMTPServer.process_message() ` via " +"the *mail_options* keyword. It is the responsibility of the " +"``process_message`` method to correctly handle the ``SMTPUTF8`` data. " +"(Contributed by Milan Oberkirch in :issue:`21725`.)" +msgstr "" + +#: ../../whatsnew/3.5.rst:1692 +msgid "" +"It is now possible to provide, directly or via name resolution, IPv6 " +"addresses in the :class:`~smtpd.SMTPServer` constructor, and have it " +"successfully connect. (Contributed by Milan Oberkirch in :issue:`14758`.)" +msgstr "" + +#: ../../whatsnew/3.5.rst:1698 +msgid "smtplib" +msgstr "smtplib" + +#: ../../whatsnew/3.5.rst:1700 +msgid "" +"A new :meth:`SMTP.auth() ` method provides a convenient " +"way to implement custom authentication mechanisms. (Contributed by Milan " +"Oberkirch in :issue:`15014`.)" +msgstr "" +"新增的 :meth:`SMTP.auth() ` 方法为实现自定义身份验证机制提供了一个便捷的方式。 (由 " +"Milan Oberkirch 在 :issue:`15014` 中贡献。)" + +#: ../../whatsnew/3.5.rst:1704 +msgid "" +"The :meth:`SMTP.set_debuglevel() ` method now " +"accepts an additional debuglevel (2), which enables timestamps in debug " +"messages. (Contributed by Gavin Chappell and Maciej Szulik in " +":issue:`16914`.)" +msgstr "" +"现在 :meth:`SMTP.set_debuglevel() ` 方法可接受额外的 " +"debuglevel (2),它将在调试消息中启用时间戳。 (由 Gavin Chappell 和 Maciej Szulik 在 " +":issue:`16914` 中贡献。)" + +#: ../../whatsnew/3.5.rst:1708 +msgid "" +"Both the :meth:`SMTP.sendmail() ` and " +":meth:`SMTP.send_message() ` methods now support " +":rfc:`6531` (SMTPUTF8). (Contributed by Milan Oberkirch and R. David Murray " +"in :issue:`22027`.)" +msgstr "" +"现在 :meth:`SMTP.sendmail() ` 和 " +":meth:`SMTP.send_message() ` 方法均支持 :rfc:`6531` " +"(SMTPUTF8)。 (由 Milan Oberkirch 和 R. David Murray 在 :issue:`22027` 中贡献。)" + +#: ../../whatsnew/3.5.rst:1715 +msgid "sndhdr" +msgstr "sndhdr" + +#: ../../whatsnew/3.5.rst:1717 +msgid "" +"The :func:`~sndhdr.what` and :func:`~sndhdr.whathdr` functions now return a" +" :func:`~collections.namedtuple`. (Contributed by Claudiu Popa in " +":issue:`18615`.)" +msgstr "" +"现在 :func:`~sndhdr.what` 和 :func:`~sndhdr.whathdr` 函数将返回 " +":func:`~collections.namedtuple`。 (由 Claudiu Popa 在 :issue:`18615` 中贡献。).)" + +#: ../../whatsnew/3.5.rst:1723 +msgid "socket" +msgstr "socket" + +#: ../../whatsnew/3.5.rst:1725 +msgid "" +"Functions with timeouts now use a monotonic clock, instead of a system " +"clock. (Contributed by Victor Stinner in :issue:`22043`.)" +msgstr "现在函数的超时设置将使用单调时钟,而不是系统时钟。 (由 Victor Stinner 在 :issue:`22043` 中贡献。)" + +#: ../../whatsnew/3.5.rst:1728 +msgid "" +"A new :meth:`socket.sendfile() ` method allows " +"sending a file over a socket by using the high-performance " +":func:`os.sendfile` function on UNIX, resulting in uploads being from 2 to 3" +" times faster than when using plain :meth:`socket.send() " +"`. (Contributed by Giampaolo Rodola' in :issue:`17552`.)" +msgstr "" +"新增的 :meth:`socket.sendfile() ` 方法允许在 UNIX 上使用高性能的 " +":func:`os.sendfile` 函数通过套接字发送文件,使得上传速度比使用简单的 :meth:`socket.send() " +"` 快 2 至 3 倍。 (由 Giampaolo Rodola' 在 :issue:`17552` 中贡献。)" + +#: ../../whatsnew/3.5.rst:1734 +msgid "" +"The :meth:`socket.sendall() ` method no longer resets" +" the socket timeout every time bytes are received or sent. The socket " +"timeout is now the maximum total duration to send all data. (Contributed by " +"Victor Stinner in :issue:`23853`.)" +msgstr "" +":meth:`socket.sendall() ` 方法每次接受或发送字节数据时将不再重置套接字超时。 " +"现在套接字超时将为发送所有数据最大总计持续时间。 (由 Victor Stinner 在 :issue:`23853` 中贡献。)" + +#: ../../whatsnew/3.5.rst:1739 +msgid "" +"The *backlog* argument of the :meth:`socket.listen() `" +" method is now optional. By default it is set to :data:`SOMAXCONN " +"` or to ``128``, whichever is less. (Contributed by " +"Charles-François Natali in :issue:`21455`.)" +msgstr "" +"现在 :meth:`socket.listen() ` 方法的 *backlog* 参数将是可选的。 " +"在默认情况下它会被设为 :data:`SOMAXCONN ` 或 ``128``,取其中的较小值。 (由 " +"Charles-François Natali 在 :issue:`21455` 中贡献。)" + +#: ../../whatsnew/3.5.rst:1746 +msgid "ssl" +msgstr "ssl" + +#: ../../whatsnew/3.5.rst:1751 +msgid "Memory BIO Support" +msgstr "内存 BIO 支持" + +#: ../../whatsnew/3.5.rst:1753 +msgid "(Contributed by Geert Jansen in :issue:`21965`.)" +msgstr "(由 Geert Jansen 在 :issue:`21965` 中贡献。)" + +#: ../../whatsnew/3.5.rst:1755 +msgid "" +"The new :class:`~ssl.SSLObject` class has been added to provide SSL protocol" +" support for cases when the network I/O capabilities of " +":class:`~ssl.SSLSocket` are not necessary or are suboptimal. ``SSLObject`` " +"represents an SSL protocol instance, but does not implement any network I/O " +"methods, and instead provides a memory buffer interface. The new " +":class:`~ssl.MemoryBIO` class can be used to pass data between Python and an" +" SSL protocol instance." +msgstr "" +"新增了 :class:`~ssl.SSLObject` 类以针对 :class:`~ssl.SSLSocket` 的网络 I/O " +"能力是非必要或未优化的情况提供 SSL 协议支持。 ``SSLObject`` 代表一个 SSL 协议实例,但不实现任何网络 I/O " +"方法,而是提供一个内存缓冲区接口。 新增的 :class:`~ssl.MemoryBIO` 类可被用于在 Python 和 SSL " +"协议实例之间传递数据。" + +#: ../../whatsnew/3.5.rst:1762 +msgid "" +"The memory BIO SSL support is primarily intended to be used in frameworks " +"implementing asynchronous I/O for which :class:`~ssl.SSLSocket`'s readiness " +"model (\"select/poll\") is inefficient." +msgstr "" +"内存 BIO SSL 支持主要被用来为对 :class:`~ssl.SSLSocket` 的就绪模型(\"选择/轮询\")来说效率较低的框架实现异步 " +"I/O。" + +#: ../../whatsnew/3.5.rst:1766 +msgid "" +"A new :meth:`SSLContext.wrap_bio() ` method can be " +"used to create a new ``SSLObject`` instance." +msgstr "" +"新增的 :meth:`SSLContext.wrap_bio() ` 方法可被用于创建新的 " +"``SSLObject`` 实例。" + +#: ../../whatsnew/3.5.rst:1771 +msgid "Application-Layer Protocol Negotiation Support" +msgstr "应用层协议协商支持" + +#: ../../whatsnew/3.5.rst:1773 +msgid "(Contributed by Benjamin Peterson in :issue:`20188`.)" +msgstr "(由 Benjamin Peterson 在 :issue:`20188` 中贡献。)" + +#: ../../whatsnew/3.5.rst:1775 +msgid "" +"Where OpenSSL support is present, the :mod:`ssl` module now implements the " +"*Application-Layer Protocol Negotiation* TLS extension as described in " +":rfc:`7301`." +msgstr "如果有 OpenSSL 支持,现在 :mod:`ssl` 模块可实现 :rfc:`7301` 中描述的 *应用层协议协商* TLS 扩展。" + +#: ../../whatsnew/3.5.rst:1779 +msgid "" +"The new :meth:`SSLContext.set_alpn_protocols() " +"` can be used to specify which protocols " +"a socket should advertise during the TLS handshake." +msgstr "" +"新增的 :meth:`SSLContext.set_alpn_protocols() " +"` 可被用来指定在 TLS 握手期间套接字所要应用的协议。" + +#: ../../whatsnew/3.5.rst:1783 +msgid "" +"The new :meth:`SSLSocket.selected_alpn_protocol() " +"` returns the protocol that was " +"selected during the TLS handshake. The :data:`~ssl.HAS_ALPN` flag indicates " +"whether ALPN support is present." +msgstr "" + +#: ../../whatsnew/3.5.rst:1790 +msgid "Other Changes" +msgstr "其他改变" + +#: ../../whatsnew/3.5.rst:1792 +msgid "" +"There is a new :meth:`SSLSocket.version() ` method to" +" query the actual protocol version in use. (Contributed by Antoine Pitrou in" +" :issue:`20421`.)" +msgstr "" +"新增 :meth:`SSLSocket.version() ` 方法以便查询实际使用的协议。 (由 " +"Antoine Pitrou 在 :issue:`20421` 中贡献。)" + +#: ../../whatsnew/3.5.rst:1796 +msgid "" +"The :class:`~ssl.SSLSocket` class now implements a " +":meth:`SSLSocket.sendfile() ` method. (Contributed " +"by Giampaolo Rodola' in :issue:`17552`.)" +msgstr "" +"现在 :class:`~ssl.SSLSocket` 类已实现了 :meth:`SSLSocket.sendfile() " +"` 方法。 (由 Giampaolo Rodola' 在 :issue:`17552` 中贡献。)" + +#: ../../whatsnew/3.5.rst:1800 +msgid "" +"The :meth:`SSLSocket.send() ` method now raises either " +"the :exc:`ssl.SSLWantReadError` or :exc:`ssl.SSLWantWriteError` exception on" +" a non-blocking socket if the operation would block. Previously, it would " +"return ``0``. (Contributed by Nikolaus Rath in :issue:`20951`.)" +msgstr "" +"现在当操作将要阻塞时 :meth:`SSLSocket.send() ` 方法将在非阻塞的套接字上引发 " +":exc:`ssl.SSLWantReadError` 或 :exc:`ssl.SSLWantWriteError` 异常。 在之前版本中,它将返回 " +"``0``。 (由 Nikolaus Rath 在 :issue:`20951` 中贡献。)" + +#: ../../whatsnew/3.5.rst:1805 +msgid "" +"The :func:`~ssl.cert_time_to_seconds` function now interprets the input time" +" as UTC and not as local time, per :rfc:`5280`. Additionally, the return " +"value is always an :class:`int`. (Contributed by Akira Li in " +":issue:`19940`.)" +msgstr "" +"根据 :rfc:`5280`,现在 :func:`~ssl.cert_time_to_seconds` 函数会将输入的时间解读为 UTC " +"而不是本地时间。 此外,其返回值必定为 :class:`int`。 (由 Akira Li 在 :issue:`19940` 中贡献。)" + +#: ../../whatsnew/3.5.rst:1809 +msgid "" +"New :meth:`SSLObject.shared_ciphers() ` and " +":meth:`SSLSocket.shared_ciphers() ` methods " +"return the list of ciphers sent by the client during the handshake. " +"(Contributed by Benjamin Peterson in :issue:`23186`.)" +msgstr "" +"新增的 :meth:`SSLObject.shared_ciphers() ` 和 " +":meth:`SSLSocket.shared_ciphers() ` " +"方法将返回客户端在握手期间中发送的密码列表。 (由 Benjamin Peterson 在 :issue:`23186` 中贡献。)" + +#: ../../whatsnew/3.5.rst:1814 +msgid "" +"The :meth:`SSLSocket.do_handshake() `, " +":meth:`SSLSocket.read() `, :meth:`SSLSocket.shutdown() " +"`, and :meth:`SSLSocket.write() " +"` methods of the :class:`~ssl.SSLSocket` class no " +"longer reset the socket timeout every time bytes are received or sent. The " +"socket timeout is now the maximum total duration of the method. (Contributed" +" by Victor Stinner in :issue:`23853`.)" +msgstr "" +":class:`~ssl.SSLSocket` 类的 :meth:`SSLSocket.do_handshake() " +"`, :meth:`SSLSocket.read() " +"`, :meth:`SSLSocket.shutdown() `" +" 和 :meth:`SSLSocket.write() ` " +"方法在每次接收或发送字节数据时将不再重置套接字超时。 现在套接字超时将为方法的最长运行时间。 (由 Victor Stinner 在 " +":issue:`23853` 中贡献。)" + +#: ../../whatsnew/3.5.rst:1822 +msgid "" +"The :func:`~ssl.match_hostname` function now supports matching of IP " +"addresses. (Contributed by Antoine Pitrou in :issue:`23239`.)" +msgstr "" +"现在 :func:`~ssl.match_hostname` 函数也支持 IP 地址的匹配。 (由 Antoine Pitrou 在 " +":issue:`23239` 中贡献。)" + +#: ../../whatsnew/3.5.rst:1827 +msgid "sqlite3" +msgstr "sqlite3" + +#: ../../whatsnew/3.5.rst:1829 +msgid "" +"The :class:`~sqlite3.Row` class now fully supports the sequence protocol, in" +" particular :func:`reversed` iteration and slice indexing. (Contributed by " +"Claudiu Popa in :issue:`10203`; by Lucas Sinclair, Jessica McKellar, and " +"Serhiy Storchaka in :issue:`13583`.)" +msgstr "" +"现在 :class:`~sqlite3.Row` 类可完整支持序列协议,特别是 :func:`reversed` 迭代和切片索引。 (由 Claudiu" +" Popa 在 :issue:`10203` 中贡献;由 Lucas Sinclair, Jessica McKellar 和 Serhiy " +"Storchaka 在 :issue:`13583` 中贡献。)" + +#: ../../whatsnew/3.5.rst:1838 +msgid "subprocess" +msgstr "subprocess" + +#: ../../whatsnew/3.5.rst:1840 +msgid "" +"The new :func:`~subprocess.run` function has been added. It runs the " +"specified command and returns a :class:`~subprocess.CompletedProcess` " +"object, which describes a finished process. The new API is more consistent " +"and is the recommended approach to invoking subprocesses in Python code that" +" does not need to maintain compatibility with earlier Python versions. " +"(Contributed by Thomas Kluyver in :issue:`23342`.)" +msgstr "" +"新增了 :func:`~subprocess.run` 函数。 它可运行指定的命令并返回一个 " +":class:`~subprocess.CompletedProcess` 对象,该对象表示已结束的进程。 这个新 API 有更好的一致性并且是在 " +"Python 中唤起子进程的推荐方式,它不需要维持与更早的 Python 的兼容性。 (由 Thomas Kluyver 在 " +":issue:`23342` 中贡献。)" + +#: ../../whatsnew/3.5.rst:1864 +msgid "sys" +msgstr "sys" + +#: ../../whatsnew/3.5.rst:1866 +msgid "" +"A new :func:`~sys.set_coroutine_wrapper` function allows setting a global " +"hook that will be called whenever a :term:`coroutine object ` is " +"created by an :keyword:`async def` function. A corresponding " +":func:`~sys.get_coroutine_wrapper` can be used to obtain a currently set " +"wrapper. Both functions are :term:`provisional `, and are " +"intended for debugging purposes only. (Contributed by Yury Selivanov in " +":issue:`24017`.)" +msgstr "" +"新增的 :func:`~sys.set_coroutine_wrapper` 函数允许设置一个要在 :term:`协程对象 ` 被" +" :keyword:`async def` 函数创建时被调用的全局钩子。 可以使用相应的 " +":func:`~sys.get_coroutine_wrapper` 来获取当前设置的包装器。 这两个函数均为 :term:`暂定状态 " +"`,并应当仅用于调试目的。 (由 Yury Selivanov 在 :issue:`24017` 中贡献。)" + +#: ../../whatsnew/3.5.rst:1874 +msgid "" +"A new :func:`~sys.is_finalizing` function can be used to check if the Python" +" interpreter is :term:`shutting down `. (Contributed " +"by Antoine Pitrou in :issue:`22696`.)" +msgstr "" +"新增的 :func:`~sys.is_finalizing` 函数可用于检测 Python 解释器是否 :term:`正在关闭 `。 (由 Antoine Pitrou 在 :issue:`22696` 中贡献。)" + +#: ../../whatsnew/3.5.rst:1880 +msgid "sysconfig" +msgstr "sysconfig" + +#: ../../whatsnew/3.5.rst:1882 +msgid "" +"The name of the user scripts directory on Windows now includes the first two" +" components of the Python version. (Contributed by Paul Moore in " +":issue:`23437`.)" +msgstr "" +"在 Windows 上用户脚本的名称现在将包括 Python 版本号的前两个数字。 (由 Paul Moore 在 :issue:`23437` " +"中贡献。)" + +#: ../../whatsnew/3.5.rst:1888 +msgid "tarfile" +msgstr "tarfile" + +#: ../../whatsnew/3.5.rst:1890 +msgid "" +"The *mode* argument of the :func:`~tarfile.open` function now accepts " +"``\"x\"`` to request exclusive creation. (Contributed by Berker Peksag in " +":issue:`21717`.)" +msgstr "" +"现在 :func:`~tarfile.open` 函数的 *mode* 参数可接受 ``\"x\"`` 来请求独占式的创建。 (由 Berker " +"Peksag 在 :issue:`21717` 中贡献。)" + +#: ../../whatsnew/3.5.rst:1893 +msgid "" +"The :meth:`TarFile.extractall() ` and " +":meth:`TarFile.extract() ` methods now take a " +"keyword argument *numeric_owner*. If set to ``True``, the extracted files " +"and directories will be owned by the numeric ``uid`` and ``gid`` from the " +"tarfile. If set to ``False`` (the default, and the behavior in versions " +"prior to 3.5), they will be owned by the named user and group in the " +"tarfile. (Contributed by Michael Vogt and Eric Smith in :issue:`23193`.)" +msgstr "" +"现在 :meth:`TarFile.extractall() ` 和 " +":meth:`TarFile.extract() ` 方法可接受关键字参数 " +"*numeric_owner*。 如果设为 ``True``,解压的文件和目录将归属于 tar 文件保存的数字 ``uid`` 和 ``gid``。 " +"如果设为 ``False`` (默认值,也是 3.5 之前版本的行为),则它们将归属于 tar 文件保存的用户和组名称。 (由 Michael Vogt" +" 和 Eric Smith 在 :issue:`23193` 中贡献。)" + +#: ../../whatsnew/3.5.rst:1901 +msgid "" +"The :meth:`TarFile.list() ` now accepts an optional " +"*members* keyword argument that can be set to a subset of the list returned " +"by :meth:`TarFile.getmembers() `. (Contributed " +"by Serhiy Storchaka in :issue:`21549`.)" +msgstr "" +"现在 :meth:`TarFile.list() ` 接受可选的 *members* 关键字参数,它可被设为" +" :meth:`TarFile.getmembers() ` 所返回的列表的一个子集。 (由 " +"Serhiy Storchaka 在 :issue:`21549` 中贡献。)" + +#: ../../whatsnew/3.5.rst:1908 +msgid "threading" +msgstr "threading" + +#: ../../whatsnew/3.5.rst:1910 +msgid "" +"Both the :meth:`Lock.acquire() ` and " +":meth:`RLock.acquire() ` methods now use a " +"monotonic clock for timeout management. (Contributed by Victor Stinner in " +":issue:`22043`.)" +msgstr "" +"现在 :meth:`Lock.acquire() ` 和 :meth:`RLock.acquire() " +"` 方法均使用单调时钟进行超时管理。 (由 Victor Stinner 在 " +":issue:`22043` 中贡献。)" + +#: ../../whatsnew/3.5.rst:1917 +msgid "time" +msgstr "time" + +#: ../../whatsnew/3.5.rst:1919 +msgid "" +"The :func:`~time.monotonic` function is now always available. (Contributed " +"by Victor Stinner in :issue:`22043`.)" +msgstr "" +"现在 :func:`~time.monotonic` 函数将总是可用。 (由 Victor Stinner 在 :issue:`22043` 中贡献。)" + +#: ../../whatsnew/3.5.rst:1924 +msgid "timeit" +msgstr "timeit" + +#: ../../whatsnew/3.5.rst:1926 +msgid "" +"A new command line option ``-u`` or :samp:`--unit={U}` can be used to " +"specify the time unit for the timer output. Supported options are ``usec``," +" ``msec``, or ``sec``. (Contributed by Julian Gindi in :issue:`18983`.)" +msgstr "" +"新增的命令行选项 ``-u`` 或 :samp:`--unit={U}` 可被用于指定计时器输出的时间单位。 受支持的选项有 ``usec``, " +"``msec`` 或 ``sec``。 (由 Julian Gindi 在 :issue:`18983` 中贡献。)" + +#: ../../whatsnew/3.5.rst:1930 +msgid "" +"The :func:`~timeit.timeit` function has a new *globals* parameter for " +"specifying the namespace in which the code will be running. (Contributed by " +"Ben Roberts in :issue:`2527`.)" +msgstr "" +":func:`~timeit.timeit` 函数新增了 *globals* 形参用于指定代码运行所在的命名空间。 (由 Ben Roberts 在 " +":issue:`2527` 中贡献。).)" + +#: ../../whatsnew/3.5.rst:1936 +msgid "tkinter" +msgstr "tkinter" + +#: ../../whatsnew/3.5.rst:1938 +msgid "" +"The :mod:`tkinter._fix` module used for setting up the Tcl/Tk environment on" +" Windows has been replaced by a private function in the :mod:`_tkinter` " +"module which makes no permanent changes to environment variables. " +"(Contributed by Zachary Ware in :issue:`20035`.)" +msgstr "" +"用于在 Windows 上设置 Tcl/Tk 环境的 :mod:`tkinter._fix` 模块已被 :mod:`_tkinter` " +"模块中的私有函数所替换,该函数不会永久性修改环境变量。 (由 Zachary Ware 在 :issue:`20035` 中贡献。)" + +#: ../../whatsnew/3.5.rst:1947 +msgid "traceback" +msgstr "回溯" + +#: ../../whatsnew/3.5.rst:1949 +msgid "" +"New :func:`~traceback.walk_stack` and :func:`~traceback.walk_tb` functions " +"to conveniently traverse frame and traceback objects. (Contributed by Robert" +" Collins in :issue:`17911`.)" +msgstr "" + +#: ../../whatsnew/3.5.rst:1953 +msgid "" +"New lightweight classes: :class:`~traceback.TracebackException`, " +":class:`~traceback.StackSummary`, and :class:`~traceback.FrameSummary`. " +"(Contributed by Robert Collins in :issue:`17911`.)" +msgstr "" +"新增轻量级的类: :class:`~traceback.TracebackException`, " +":class:`~traceback.StackSummary` 和 :class:`~traceback.FrameSummary`。 (由 " +"Robert Collins 在 :issue:`17911` 中贡献。)" + +#: ../../whatsnew/3.5.rst:1957 +msgid "" +"Both the :func:`~traceback.print_tb` and :func:`~traceback.print_stack` " +"functions now support negative values for the *limit* argument. (Contributed" +" by Dmitry Kazakov in :issue:`22619`.)" +msgstr "" +"现在 :func:`~traceback.print_tb` 和 :func:`~traceback.print_stack` 函数均支持 " +"*limit* 参数使用负值。 (由 Dmitry Kazakov 在 :issue:`22619` 中贡献。).)" + +#: ../../whatsnew/3.5.rst:1963 +msgid "types" +msgstr "types" + +#: ../../whatsnew/3.5.rst:1965 +msgid "" +"A new :func:`~types.coroutine` function to transform :term:`generator " +"` and :class:`generator-like " +"` objects into :term:`awaitables `. " +"(Contributed by Yury Selivanov in :issue:`24017`.)" +msgstr "" +"新增 :func:`~types.coroutine` 函数用于将 :term:`生成器 ` 和 " +":class:`生成器型 ` 对象转换为 :term:`可等待对象 `。 " +"(由 Yury Selivanov 在 :issue:`24017` 中贡献。)" + +#: ../../whatsnew/3.5.rst:1971 +msgid "" +"A new type called :class:`~types.CoroutineType`, which is used for " +":term:`coroutine` objects created by :keyword:`async def` functions. " +"(Contributed by Yury Selivanov in :issue:`24400`.)" +msgstr "" +"新增一个名为 :class:`~types.CoroutineType` 的类型,用于由 :keyword:`async def` 函数创建的 " +":term:`coroutine` 对象。 (由 Yury Selivanov 在 :issue:`24400` 中贡献。)" + +#: ../../whatsnew/3.5.rst:1977 +msgid "unicodedata" +msgstr "unicodedata" + +#: ../../whatsnew/3.5.rst:1979 +msgid "" +"The :mod:`unicodedata` module now uses data from `Unicode 8.0.0 " +"`_." +msgstr "" + +#: ../../whatsnew/3.5.rst:1984 +msgid "unittest" +msgstr "unittest" + +#: ../../whatsnew/3.5.rst:1986 +msgid "" +"The :meth:`TestLoader.loadTestsFromModule() " +"` method now accepts a keyword-only" +" argument *pattern* which is passed to ``load_tests`` as the third argument." +" Found packages are now checked for ``load_tests`` regardless of whether " +"their path matches *pattern*, because it is impossible for a package name to" +" match the default pattern. (Contributed by Robert Collins and Barry A. " +"Warsaw in :issue:`16662`.)" +msgstr "" +"现在 :meth:`TestLoader.loadTestsFromModule() " +"` 方法可接受仅限关键字参数 *pattern*,它将作为传给 " +"``load_tests`` 的第三个参数。 找到的包无论其路径是否匹配 *pattern* 都会针对 ``load_tests`` " +"进行检查,因为包名不可能与默认模式相匹配。 (由 Robert Collins 和 Barry A. Warsaw 在 :issue:`16662` " +"中贡献。)" + +#: ../../whatsnew/3.5.rst:1993 +msgid "" +"Unittest discovery errors now are exposed in the :data:`TestLoader.errors " +"` attribute of the :class:`~unittest.TestLoader`" +" instance. (Contributed by Robert Collins in :issue:`19746`.)" +msgstr "" +"单元测试发现错误现在将会暴露为 :class:`~unittest.TestLoader` 的 :data:`TestLoader.errors " +"` 属性。 (由 Robert Collins 在 :issue:`19746` 中贡献。)" + +#: ../../whatsnew/3.5.rst:1998 +msgid "" +"A new command line option ``--locals`` to show local variables in " +"tracebacks. (Contributed by Robert Collins in :issue:`22936`.)" +msgstr "" +"新增的命令行选项 ``--locals`` 可显示回溯中的局部变量。 (由 Robert Collins 在 :issue:`22936` 中贡献。)" + +#: ../../whatsnew/3.5.rst:2003 +msgid "unittest.mock" +msgstr "unittest.mock" + +#: ../../whatsnew/3.5.rst:2005 +msgid "The :class:`~unittest.mock.Mock` class has the following improvements:" +msgstr ":class:`~unittest.mock.Mock` 类具有以下改进:" + +#: ../../whatsnew/3.5.rst:2007 +msgid "" +"The class constructor has a new *unsafe* parameter, which causes mock " +"objects to raise :exc:`AttributeError` on attribute names starting with " +"``\"assert\"``. (Contributed by Kushal Das in :issue:`21238`.)" +msgstr "" +"类构造器新增了 *unsafe* 形参,它可导致模拟对象在名称以 ``\"assert\"`` 打头的属性名上引发 " +":exc:`AttributeError`。 (由 Kushal Das 在 :issue:`21238` 中贡献。)" + +#: ../../whatsnew/3.5.rst:2012 +msgid "" +"A new :meth:`Mock.assert_not_called() " +"` method to check if the mock object " +"was called. (Contributed by Kushal Das in :issue:`21262`.)" +msgstr "" +"新增了 :meth:`Mock.assert_not_called() ` " +"方法用于检测模拟对象是否已被调用。 (由 Kushal Das 在 :issue:`21262` 中贡献。)" + +#: ../../whatsnew/3.5.rst:2016 +msgid "" +"The :class:`~unittest.mock.MagicMock` class now supports " +":meth:`__truediv__`, :meth:`__divmod__` and :meth:`__matmul__` operators. " +"(Contributed by Johannes Baiter in :issue:`20968`, and Håkan Lövdahl in " +":issue:`23581` and :issue:`23568`.)" +msgstr "" +"现在 :class:`~unittest.mock.MagicMock` 类已支持 :meth:`__truediv__`, " +":meth:`__divmod__` 和 :meth:`__matmul__` 运算符。 (由 Johannes Baiter 在 " +":issue:`20968` 中贡献,并由 Håkan Lövdahl 在 :issue:`23581` 和 :issue:`23568` 中贡献。)" + +#: ../../whatsnew/3.5.rst:2021 +msgid "" +"It is no longer necessary to explicitly pass ``create=True`` to the " +":func:`~unittest.mock.patch` function when patching builtin names. " +"(Contributed by Kushal Das in :issue:`17660`.)" +msgstr "" +"在对内置名称打补丁时不再需要显式地将 ``create=True`` 传给 :func:`~unittest.mock.patch` 函数。 (由 " +"Kushal Das 在 :issue:`17660` 中贡献。)" + +#: ../../whatsnew/3.5.rst:2027 +msgid "urllib" +msgstr "urllib" + +#: ../../whatsnew/3.5.rst:2029 +msgid "" +"A new :class:`request.HTTPPasswordMgrWithPriorAuth " +"` class allows HTTP Basic " +"Authentication credentials to be managed so as to eliminate unnecessary " +"``401`` response handling, or to unconditionally send credentials on the " +"first request in order to communicate with servers that return a ``404`` " +"response instead of a ``401`` if the ``Authorization`` header is not sent. " +"(Contributed by Matej Cepl in :issue:`19494` and Akshit Khurana in " +":issue:`7159`.)" +msgstr "" +"新增的 :class:`request.HTTPPasswordMgrWithPriorAuth " +"` 类允许对 HTTP 基本认证凭据进行管理以消除不必要的 " +"``401`` 响应处理,或在第一次请求时无条件地发送凭据,以便与返回 ``404`` 响应的服务器通信而不是在未发送 " +"``Authorization`` 头信息的情况下发送 ``401``。 (由 Matej Cepl 在 :issue:`19494` 以及 " +"Akshit Khurana 在 :issue:`7159` 中贡献。)" + +#: ../../whatsnew/3.5.rst:2038 +msgid "" +"A new *quote_via* argument for the :func:`parse.urlencode() " +"` function provides a way to control the encoding of" +" query parts if needed. (Contributed by Samwyse and Arnon Yaari in " +":issue:`13866`.)" +msgstr "" +"为 :func:`parse.urlencode() ` 函数新增的 *quote_via* " +"参数提供了一种在需要时控制查询部分的编码格式的手段。 (由 Samwyse 和 Arnon Yaari 在 :issue:`13866` 中贡献。)" + +#: ../../whatsnew/3.5.rst:2043 +msgid "" +"The :func:`request.urlopen() ` function accepts an " +":class:`ssl.SSLContext` object as a *context* argument, which will be used " +"for the HTTPS connection. (Contributed by Alex Gaynor in :issue:`22366`.)" +msgstr "" +":func:`request.urlopen() ` 函数接受 " +":class:`ssl.SSLContext` 对象作为 *context* 参数,它将被用于 HTTPS 连接。 (由 Alex Gaynor 在 " +":issue:`22366` 中贡献。).)" + +#: ../../whatsnew/3.5.rst:2047 +msgid "" +"The :func:`parse.urljoin() ` was updated to use the " +":rfc:`3986` semantics for the resolution of relative URLs, rather than " +":rfc:`1808` and :rfc:`2396`. (Contributed by Demian Brecht and Senthil " +"Kumaran in :issue:`22118`.)" +msgstr "" +":func:`parse.urljoin() ` 已获得更新已使用 :rfc:`3986` 语义来解析相对 " +"URL,而不是 :rfc:`1808` 和 :rfc:`2396`。 (由 Demian Brecht 和 Senthil Kumaran 在 " +":issue:`22118` 中贡献。)" + +#: ../../whatsnew/3.5.rst:2054 +msgid "wsgiref" +msgstr "wsgiref" + +#: ../../whatsnew/3.5.rst:2056 +msgid "" +"The *headers* argument of the :class:`headers.Headers " +"` class constructor is now optional. (Contributed " +"by Pablo Torres Navarrete and SilentGhost in :issue:`5800`.)" +msgstr "" +"现在 :class:`headers.Headers ` 类构造器的 *headers* " +"参数将是可选的。 (由 Pablo Torres Navarrete 和 SilentGhost 在 :issue:`5800` 中贡献。)" + +#: ../../whatsnew/3.5.rst:2062 +msgid "xmlrpc" +msgstr "xmlrpc" + +#: ../../whatsnew/3.5.rst:2064 +msgid "" +"The :class:`client.ServerProxy ` class now " +"supports the :term:`context manager` protocol. (Contributed by Claudiu Popa " +"in :issue:`20627`.)" +msgstr "" +"现在 :class:`client.ServerProxy ` 类已支持 " +":term:`context manager` 协议。 (由 Claudiu Popa 在 :issue:`20627` 中贡献。)" + +#: ../../whatsnew/3.5.rst:2068 +msgid "" +"The :class:`client.ServerProxy ` constructor now " +"accepts an optional :class:`ssl.SSLContext` instance. (Contributed by Alex " +"Gaynor in :issue:`22960`.)" +msgstr "" +"现在 :class:`client.ServerProxy ` 构造器接受可选的 " +":class:`ssl.SSLContext` 实例。 (由 Alex Gaynor 在 :issue:`22960` 中贡献。)" + +#: ../../whatsnew/3.5.rst:2074 +msgid "xml.sax" +msgstr "xml.sax" + +#: ../../whatsnew/3.5.rst:2076 +msgid "" +"SAX parsers now support a character stream of the " +":class:`xmlreader.InputSource ` object. " +"(Contributed by Serhiy Storchaka in :issue:`2175`.)" +msgstr "" +"现在 SAX 解析器已支持 :class:`xmlreader.InputSource `" +" 对象的字符流。 (由 Serhiy Storchaka 在 :issue:`2175` 中贡献。)" + +#: ../../whatsnew/3.5.rst:2080 +msgid "" +":func:`~xml.sax.parseString` now accepts a :class:`str` instance. " +"(Contributed by Serhiy Storchaka in :issue:`10590`.)" +msgstr "" +"现在 :func:`~xml.sax.parseString` 接受 :class:`str` 实例。 (由 Serhiy Storchaka 在 " +":issue:`10590` 中贡献。)" + +#: ../../whatsnew/3.5.rst:2085 +msgid "zipfile" +msgstr "zipfile" + +#: ../../whatsnew/3.5.rst:2087 +msgid "" +"ZIP output can now be written to unseekable streams. (Contributed by Serhiy " +"Storchaka in :issue:`23252`.)" +msgstr "现在可以将 ZIP 输出写入到不可定位的流。 (由 Serhiy Storchaka 在 :issue:`23252` 中贡献。)" + +#: ../../whatsnew/3.5.rst:2090 +msgid "" +"The *mode* argument of :meth:`ZipFile.open() ` method " +"now accepts ``\"x\"`` to request exclusive creation. (Contributed by Serhiy " +"Storchaka in :issue:`21717`.)" +msgstr "" +"现在 :meth:`ZipFile.open() ` 方法的 *mode* 参数可接受 ``\"x\"`` " +"来请求独占式的创建。 (由 Serhiy Storchaka 在 :issue:`21717` 中贡献。)" + +#: ../../whatsnew/3.5.rst:2096 +msgid "Other module-level changes" +msgstr "其他模块级更改" + +#: ../../whatsnew/3.5.rst:2098 +msgid "" +"Many functions in the :mod:`mmap`, :mod:`ossaudiodev`, :mod:`socket`, " +":mod:`ssl`, and :mod:`codecs` modules now accept writable :term:`bytes-like " +"objects `. (Contributed by Serhiy Storchaka in " +":issue:`23001`.)" +msgstr "" +"现在 :mod:`mmap`, :mod:`ossaudiodev`, :mod:`socket`, :mod:`ssl` 和 " +":mod:`codecs` 模块中的许多函数都接受可写的 :term:`字节型对象 `。 (由 Serhiy " +"Storchaka 在 :issue:`23001` 中贡献。)" + +#: ../../whatsnew/3.5.rst:2105 +msgid "Optimizations" +msgstr "性能优化" + +#: ../../whatsnew/3.5.rst:2107 +msgid "" +"The :func:`os.walk` function has been sped up by 3 to 5 times on POSIX " +"systems, and by 7 to 20 times on Windows. This was done using the new " +":func:`os.scandir` function, which exposes file information from the " +"underlying ``readdir`` or ``FindFirstFile``/``FindNextFile`` system calls. " +"(Contributed by Ben Hoyt with help from Victor Stinner in :issue:`23605`.)" +msgstr "" +":func:`os.walk` 函数在 POSIX 系统上可提速 3 至 5 倍,而在 Windows 上可提速 7 至 20 倍。 这是因为使用了新的" +" :func:`os.scandir` 函数,它可以暴露来自下层 ``readdir`` 或 " +"``FindFirstFile``/``FindNextFile`` 系统调用的文件信息。 (由 Ben Hoyt 在 :issue:`23605` " +"中贡献并得到 Victor Stinner 的协助。)" + +#: ../../whatsnew/3.5.rst:2113 +msgid "" +"Construction of ``bytes(int)`` (filled by zero bytes) is faster and uses " +"less memory for large objects. ``calloc()`` is used instead of ``malloc()`` " +"to allocate memory for these objects. (Contributed by Victor Stinner in " +":issue:`21233`.)" +msgstr "" +"对于大对象 ``bytes(int)`` (以零字节填充) 的构建速度更快且使用更少内存。 将使用 ``calloc()`` 而不是 " +"``malloc()`` 为这些对象分配内存。 (由 Victor Stinner 在 :issue:`21233` 中贡献。)" + +#: ../../whatsnew/3.5.rst:2118 +msgid "" +"Some operations on :mod:`ipaddress` :class:`~ipaddress.IPv4Network` and " +":class:`~ipaddress.IPv6Network` have been massively sped up, such as " +":meth:`~ipaddress.IPv4Network.subnets`, " +":meth:`~ipaddress.IPv4Network.supernet`, " +":func:`~ipaddress.summarize_address_range`, " +":func:`~ipaddress.collapse_addresses`. The speed up can range from 3 to 15 " +"times. (Contributed by Antoine Pitrou, Michel Albert, and Markus in " +":issue:`21486`, :issue:`21487`, :issue:`20826`, :issue:`23266`.)" +msgstr "" +":mod:`ipaddress` 中的 :class:`~ipaddress.IPv4Network` 和 " +":class:`~ipaddress.IPv6Network` 等操作获得了大幅度的加速,比如 " +":meth:`~ipaddress.IPv4Network.subnets`, " +":meth:`~ipaddress.IPv4Network.supernet`, " +":func:`~ipaddress.summarize_address_range`, " +":func:`~ipaddress.collapse_addresses`。 加速幅度从 3 到 15 倍不等。 (由 Antoine Pitrou, " +"Michel Albert 和 Markus 在 :issue:`21486`, :issue:`21487`, :issue:`20826`, " +":issue:`23266` 中贡献。)" + +#: ../../whatsnew/3.5.rst:2126 +msgid "" +"Pickling of :mod:`ipaddress` objects was optimized to produce significantly " +"smaller output. (Contributed by Serhiy Storchaka in :issue:`23133`.)" +msgstr "" +":mod:`ipaddress` 对象的封存操作获得了优化以产生显著减小的输出。 (由 Serhiy Storchaka 在 " +":issue:`23133` 中贡献。)" + +#: ../../whatsnew/3.5.rst:2129 +msgid "" +"Many operations on :class:`io.BytesIO` are now 50% to 100% faster. " +"(Contributed by Serhiy Storchaka in :issue:`15381` and David Wilson in " +":issue:`22003`.)" +msgstr "" +"现在 :class:`io.BytesIO` 上的许多操作可提速 50% 至 100%。 (由 Serhiy Storchaka 在 " +":issue:`15381` 以及 David Wilson 在 :issue:`22003` 中贡献。)" + +#: ../../whatsnew/3.5.rst:2133 +msgid "" +"The :func:`marshal.dumps` function is now faster: 65--85% with versions 3 " +"and 4, 20--25% with versions 0 to 2 on typical data, and up to 5 times in " +"best cases. (Contributed by Serhiy Storchaka in :issue:`20416` and " +":issue:`23344`.)" +msgstr "" +"现在 :func:`marshal.dumps` 函数速度可提升:对于典型数据来说版本 3 和 4 为 65--85%,版本 0 至 2 为 20--" +"25%,最佳场景下最多可达 5 倍。 (由 Serhiy Storchaka 在 :issue:`20416` 和 :issue:`23344` " +"中贡献。)" + +#: ../../whatsnew/3.5.rst:2138 +msgid "" +"The UTF-32 encoder is now 3 to 7 times faster. (Contributed by Serhiy " +"Storchaka in :issue:`15027`.)" +msgstr "现在 UTF-32 编码器可提速 3 至 7 倍。 (由 Serhiy Storchaka 在 :issue:`15027` 中贡献。)" + +#: ../../whatsnew/3.5.rst:2141 +msgid "" +"Regular expressions are now parsed up to 10% faster. (Contributed by Serhiy " +"Storchaka in :issue:`19380`.)" +msgstr "现在正则表达式的解析可提速至多 10%。 (由 Serhiy Storchaka 在 :issue:`19380` 中贡献。).)" + +#: ../../whatsnew/3.5.rst:2144 +msgid "" +"The :func:`json.dumps` function was optimized to run with " +"``ensure_ascii=False`` as fast as with ``ensure_ascii=True``. (Contributed " +"by Naoki Inada in :issue:`23206`.)" +msgstr "" +":func:`json.dumps` 函数已获优化使得设置 ``ensure_ascii=False`` 时与设置 " +"``ensure_ascii=True`` 时运行得一样快。 (由 Naoki Inada 在 :issue:`23206` 中贡献。)" + +#: ../../whatsnew/3.5.rst:2148 +msgid "" +"The :c:func:`PyObject_IsInstance` and :c:func:`PyObject_IsSubclass` " +"functions have been sped up in the common case that the second argument has " +":class:`type` as its metaclass. (Contributed Georg Brandl by in " +":issue:`22540`.)" +msgstr "" +":c:func:`PyObject_IsInstance` 和 :c:func:`PyObject_IsSubclass` 函数在第二个参数以 " +":class:`type` 作为其元类的常见情况下已获得加速。 (由 Georg Brandl 在 :issue:`22540` 中贡献。)" + +#: ../../whatsnew/3.5.rst:2153 +msgid "" +"Method caching was slightly improved, yielding up to 5% performance " +"improvement in some benchmarks. (Contributed by Antoine Pitrou in " +":issue:`22847`.)" +msgstr "" +"方法缓存操作已获少量改进,在某些基准测试中可产生至多 5% 的性能提升。 (由 Antoine Pitrou 在 :issue:`22847` " +"中贡献。)" + +#: ../../whatsnew/3.5.rst:2157 +msgid "" +"Objects from the :mod:`random` module now use 50% less memory on 64-bit " +"builds. (Contributed by Serhiy Storchaka in :issue:`23488`.)" +msgstr "" +"现在来自 :mod:`random` 模块的对象在 64 位编译版上使用的内存将减少 50%。 (由 Serhiy Storchaka 在 " +":issue:`23488` 中贡献。)" + +#: ../../whatsnew/3.5.rst:2160 +msgid "" +"The :func:`property` getter calls are up to 25% faster. (Contributed by Joe " +"Jevnik in :issue:`23910`.)" +msgstr "" +":func:`property` getter 调用可提速 25%。 (由 Joe Jevnik 在 :issue:`23910` 中贡献。)" + +#: ../../whatsnew/3.5.rst:2163 +msgid "" +"Instantiation of :class:`fractions.Fraction` is now up to 30% faster. " +"(Contributed by Stefan Behnel in :issue:`22464`.)" +msgstr "" +"现在 :class:`fractions.Fraction` 的实例化可提速至多 30%。 (由 Stefan Behnel 在 " +":issue:`22464` 中贡献。)" + +#: ../../whatsnew/3.5.rst:2166 +msgid "" +"String methods :meth:`~str.find`, :meth:`~str.rfind`, :meth:`~str.split`, " +":meth:`~str.partition` and the :keyword:`in` string operator are now " +"significantly faster for searching 1-character substrings. (Contributed by " +"Serhiy Storchaka in :issue:`23573`.)" +msgstr "" +"现在字符串方法 :meth:`~str.find`, :meth:`~str.rfind`, :meth:`~str.split`, " +":meth:`~str.partition` 和 :keyword:`in` 字符串运算符在搜索 1 个字符的子字符串时将显著提速。 (由 Serhiy" +" Storchaka 在 :issue:`23573` 中贡献。)" + +#: ../../whatsnew/3.5.rst:2173 +msgid "Build and C API Changes" +msgstr "构建和 C API 的改变" + +#: ../../whatsnew/3.5.rst:2175 +msgid "New ``calloc`` functions were added:" +msgstr "增加了 ``calloc`` 函数" + +#: ../../whatsnew/3.5.rst:2177 +msgid ":c:func:`PyMem_RawCalloc`," +msgstr ":c:func:`PyMem_RawCalloc`," + +#: ../../whatsnew/3.5.rst:2178 +msgid ":c:func:`PyMem_Calloc`," +msgstr ":c:func:`PyMem_Calloc`," + +#: ../../whatsnew/3.5.rst:2179 +msgid ":c:func:`PyObject_Calloc`." +msgstr ":c:func:`PyObject_Calloc`." + +#: ../../whatsnew/3.5.rst:2181 +msgid "(Contributed by Victor Stinner in :issue:`21233`.)" +msgstr "(Victor Stinner 贡献于 :issue:`21233`.)" + +#: ../../whatsnew/3.5.rst:2183 +msgid "New encoding/decoding helper functions:" +msgstr "新的 encoding/decoding 帮助函数:" + +#: ../../whatsnew/3.5.rst:2185 +msgid ":c:func:`Py_DecodeLocale` (replaced ``_Py_char2wchar()``)," +msgstr ":c:func:`Py_DecodeLocale` (替代 ``_Py_char2wchar()``)," + +#: ../../whatsnew/3.5.rst:2186 +msgid ":c:func:`Py_EncodeLocale` (replaced ``_Py_wchar2char()``)." +msgstr ":c:func:`Py_EncodeLocale` (替代 ``_Py_wchar2char()``)." + +#: ../../whatsnew/3.5.rst:2188 +msgid "(Contributed by Victor Stinner in :issue:`18395`.)" +msgstr "(由 Victor Stinner 在 :issue:`18395` 中贡献。)" + +#: ../../whatsnew/3.5.rst:2190 +msgid "" +"A new :c:func:`PyCodec_NameReplaceErrors` function to replace the unicode " +"encode error with ``\\N{...}`` escapes. (Contributed by Serhiy Storchaka in " +":issue:`19676`.)" +msgstr "" +"新增的 :c:func:`PyCodec_NameReplaceErrors` 函数可以将 unicode 编码错误替换为 ``\\N{...}`` " +"转义符号。 (由 Serhiy Storchaka 在 :issue:`19676` 中贡献。)" + +#: ../../whatsnew/3.5.rst:2194 +msgid "" +"A new :c:func:`PyErr_FormatV` function similar to :c:func:`PyErr_Format`, " +"but accepts a ``va_list`` argument. (Contributed by Antoine Pitrou in " +":issue:`18711`.)" +msgstr "" + +#: ../../whatsnew/3.5.rst:2198 +msgid "" +"A new :c:data:`PyExc_RecursionError` exception. (Contributed by Georg Brandl" +" in :issue:`19235`.)" +msgstr "" +"新增 :c:data:`PyExc_RecursionError` 异常。 (由 Georg Brandl 在 :issue:`19235` 中贡献。)" + +#: ../../whatsnew/3.5.rst:2201 +msgid "" +"New :c:func:`PyModule_FromDefAndSpec`, :c:func:`PyModule_FromDefAndSpec2`, " +"and :c:func:`PyModule_ExecDef` functions introduced by :pep:`489` -- multi-" +"phase extension module initialization. (Contributed by Petr Viktorin in " +":issue:`24268`.)" +msgstr "" +"新增 :c:func:`PyModule_FromDefAndSpec`, :c:func:`PyModule_FromDefAndSpec2` 和 " +":c:func:`PyModule_ExecDef` 函数,来自 :pep:`489` -- 多阶段扩展模块初始化。 (由 Petr Viktorin " +"在 :issue:`24268` 中贡献。)" + +#: ../../whatsnew/3.5.rst:2206 +msgid "" +"New :c:func:`PyNumber_MatrixMultiply` and " +":c:func:`PyNumber_InPlaceMatrixMultiply` functions to perform matrix " +"multiplication. (Contributed by Benjamin Peterson in :issue:`21176`. See " +"also :pep:`465` for details.)" +msgstr "" +"新增 :c:func:`PyNumber_MatrixMultiply` 和 " +":c:func:`PyNumber_InPlaceMatrixMultiply` 函数用于执行矩阵乘法。 (由 Benjamin Peterson 在 " +":issue:`21176` 中贡献。 另请参阅 :pep:`465` 了解详情。)" + +#: ../../whatsnew/3.5.rst:2212 +msgid "" +"The :c:member:`PyTypeObject.tp_finalize` slot is now part of the stable ABI." +msgstr "现在 :c:member:`PyTypeObject.tp_finalize` 槽位已成为稳定 ABI 的一部分。" + +#: ../../whatsnew/3.5.rst:2214 +msgid "" +"Windows builds now require Microsoft Visual C++ 14.0, which is available as " +"part of `Visual Studio 2015 `_." +msgstr "" + +#: ../../whatsnew/3.5.rst:2217 +msgid "" +"Extension modules now include a platform information tag in their filename " +"on some platforms (the tag is optional, and CPython will import extensions " +"without it, although if the tag is present and mismatched, the extension " +"won't be loaded):" +msgstr "" +"现在扩展模块在某些平台上的文件名将包括平台信息标签(该标签是可选的,即使没有它 CPython " +"也会导入扩展,但是如果存在不匹配的标签,扩展将不会被加载):" + +#: ../../whatsnew/3.5.rst:2222 +msgid "" +"On Linux, extension module filenames end with " +"``.cpython-m--.pyd``:" +msgstr "" +"在 Linux 上,扩展模块文件名将以 ``.cpython-m--.pyd`` 结束:" + +#: ../../whatsnew/3.5.rst:2225 ../../whatsnew/3.5.rst:2242 +msgid "" +"```` is the major number of the Python version; for Python 3.5 this " +"is ``3``." +msgstr "```` 为 Python 主版本号;对于 Python 3.5 即为 ``3``。" + +#: ../../whatsnew/3.5.rst:2228 ../../whatsnew/3.5.rst:2245 +msgid "" +"```` is the minor number of the Python version; for Python 3.5 this " +"is ``5``." +msgstr "```` 为 Python 次版本号;对于 Python 3.5 即为 ``5``。" + +#: ../../whatsnew/3.5.rst:2231 +msgid "" +"```` is the hardware architecture the extension module was " +"built to run on. It's most commonly either ``i386`` for 32-bit Intel " +"platforms or ``x86_64`` for 64-bit Intel (and AMD) platforms." +msgstr "" +"```` 为扩展模块构建在运行时所使用的硬件架构。 最常见的值是 ``i386`` 表示 32 位 Intel 平台或 " +"``x86_64`` 表示 64 位 Intel (和 AMD) 平台。" + +#: ../../whatsnew/3.5.rst:2235 +msgid "" +"```` is always ``linux-gnu``, except for extensions built to talk to the" +" 32-bit ABI on 64-bit platforms, in which case it is ``linux-gnu32`` (and " +"```` will be ``x86_64``)." +msgstr "" +"```` 将始终为 ``linux-gnu``,除非扩展构建是针对 64 位平台上的 32 位 ABI,在此情况下它将为 ``linux-" +"gnu32`` (而 ```` 将为 ``x86_64``)。" + +#: ../../whatsnew/3.5.rst:2239 +msgid "" +"On Windows, extension module filenames end with " +"``.cp-.pyd``:" +msgstr "在 Windows 上,扩展模块文件名将以 ``.cp-.pyd`` 结束:" + +#: ../../whatsnew/3.5.rst:2248 +msgid "" +"```` is the platform the extension module was built for, either " +"``win32`` for Win32, ``win_amd64`` for Win64, ``win_ia64`` for Windows " +"Itanium 64, and ``win_arm`` for Windows on ARM." +msgstr "" +"```` 是扩展模块构建所针对的平台,可以为 ``win32`` 表示 Win32,``win_amd64`` 表示 " +"Win64,``win_ia64`` 表示 Windows Itanium 64,``win_arm`` 表示 ARM 版 Windows。" + +#: ../../whatsnew/3.5.rst:2252 +msgid "" +"If built in debug mode, ```` will be ``_d``, otherwise it will be " +"blank." +msgstr "如果以调试模式构建,则 ```` 将为 ``_d``,在其他情况下将为空白。" + +#: ../../whatsnew/3.5.rst:2255 +msgid "" +"On OS X platforms, extension module filenames now end with ``-darwin.so``." +msgstr "在 OS X 平台上,扩展模块文件名现在将以 ``-darwin.so`` 结束。" + +#: ../../whatsnew/3.5.rst:2257 +msgid "" +"On all other platforms, extension module filenames are the same as they were" +" with Python 3.4." +msgstr "在所有其他平台上,扩展模块文件名与 Python 3.4 时一样。" + +#: ../../whatsnew/3.5.rst:2262 +msgid "Deprecated" +msgstr "弃用" + +#: ../../whatsnew/3.5.rst:2265 +msgid "New Keywords" +msgstr "新关键字" + +#: ../../whatsnew/3.5.rst:2267 +msgid "" +"``async`` and ``await`` are not recommended to be used as variable, class, " +"function or module names. Introduced by :pep:`492` in Python 3.5, they will" +" become proper keywords in Python 3.7." +msgstr "" +"不建议将 ``async`` 和 ``await`` 用作变量、类、函数或模块的名称。 它们根据 :pep:`492` 在 Python 3.5 " +"中被引入,并将在 Python 3.7 成为保留关键字。" + +#: ../../whatsnew/3.5.rst:2273 +msgid "Deprecated Python Behavior" +msgstr "已弃用的 Python 行为" + +#: ../../whatsnew/3.5.rst:2275 +msgid "" +"Raising the :exc:`StopIteration` exception inside a generator will now " +"generate a silent :exc:`PendingDeprecationWarning`, which will become a non-" +"silent deprecation warning in Python 3.6 and will trigger a " +":exc:`RuntimeError` in Python 3.7. See :ref:`PEP 479: Change StopIteration " +"handling inside generators ` for details." +msgstr "" +"在生成器内部引发 :exc:`StopIteration` 异常现在将静默生成一个 " +":exc:`PendingDeprecationWarning`,这将在 Python 3.6 中改为非静默的弃用警告并在 Python 3.7 中触发" +" :exc:`RuntimeError`。 请参阅 :ref:`PEP 479: 修改生成器内部的 StopIteration 处理方式 " +"` 了解详情。" + +#: ../../whatsnew/3.5.rst:2283 +msgid "Unsupported Operating Systems" +msgstr "不支持的操作系统" + +#: ../../whatsnew/3.5.rst:2285 +msgid "" +"Windows XP is no longer supported by Microsoft, thus, per :PEP:`11`, CPython" +" 3.5 is no longer officially supported on this OS." +msgstr "" +"Windows XP 已不再被 Microsoft 所支持,因此根据 :PEP:`11`,CPython 3.5 不再对该操作系统提供官方支持。" + +#: ../../whatsnew/3.5.rst:2290 +msgid "Deprecated Python modules, functions and methods" +msgstr "已弃用的 Python 模块、函数和方法" + +#: ../../whatsnew/3.5.rst:2292 +msgid "" +"The :mod:`formatter` module has now graduated to full deprecation and is " +"still slated for removal in Python 3.6." +msgstr "现在 :mod:`formatter` 模块状态已转为完全弃用并仍计划在 Python 3.6 中移除。" + +#: ../../whatsnew/3.5.rst:2295 +msgid "" +"The :func:`asyncio.async` function is deprecated in favor of " +":func:`~asyncio.ensure_future`." +msgstr ":func:`asyncio.async` 函数已被弃用并由 of :func:`~asyncio.ensure_future` 取代。" + +#: ../../whatsnew/3.5.rst:2298 +msgid "" +"The :mod:`smtpd` module has in the past always decoded the DATA portion of " +"email messages using the ``utf-8`` codec. This can now be controlled by the" +" new *decode_data* keyword to :class:`~smtpd.SMTPServer`. The default value" +" is ``True``, but this default is deprecated. Specify the *decode_data* " +"keyword with an appropriate value to avoid the deprecation warning." +msgstr "" + +#: ../../whatsnew/3.5.rst:2304 +msgid "" +"Directly assigning values to the :attr:`~http.cookies.Morsel.key`, " +":attr:`~http.cookies.Morsel.value` and " +":attr:`~http.cookies.Morsel.coded_value` of :class:`http.cookies.Morsel` " +"objects is deprecated. Use the :meth:`~http.cookies.Morsel.set` method " +"instead. In addition, the undocumented *LegalChars* parameter of " +":meth:`~http.cookies.Morsel.set` is deprecated, and is now ignored." +msgstr "" +"直接向 :class:`http.cookies.Morsel` 对象的 :attr:`~http.cookies.Morsel.key`, " +":attr:`~http.cookies.Morsel.value` 和 " +":attr:`~http.cookies.Morsel.coded_value` 赋值操作已弃用。 请改用 " +":meth:`~http.cookies.Morsel.set`。 此外,:meth:`~http.cookies.Morsel.set` 未写入文档的" +" *LegalChars* 形参也已弃用,现在将会被忽略。" + +#: ../../whatsnew/3.5.rst:2311 +msgid "" +"Passing a format string as keyword argument *format_string* to the " +":meth:`~string.Formatter.format` method of the :class:`string.Formatter` " +"class has been deprecated. (Contributed by Serhiy Storchaka in " +":issue:`23671`.)" +msgstr "" +"将格式字符串作为关键字参数 *format_string* 传给 :class:`string.Formatter` 类的 " +":meth:`~string.Formatter.format` 方法的操作已被弃用。 (由 Serhiy Storchaka 在 " +":issue:`23671` 贡献。)" + +#: ../../whatsnew/3.5.rst:2316 +msgid "" +"The :func:`platform.dist` and :func:`platform.linux_distribution` functions " +"are now deprecated. Linux distributions use too many different ways of " +"describing themselves, so the functionality is left to a package. " +"(Contributed by Vajrasky Kok and Berker Peksag in :issue:`1322`.)" +msgstr "" +"现在 :func:`platform.dist` 和 :func:`platform.linux_distribution` 函数已被弃用。 各种 " +"Linux 发行版使用太多不同的方式来描述自己,所以此功能将留给具体的包来实现。 (由 Vajrasky Kok 和 Berker Peksag 在 " +":issue:`1322` 中贡献。)" + +#: ../../whatsnew/3.5.rst:2321 +msgid "" +"The previously undocumented ``from_function`` and ``from_builtin`` methods " +"of :class:`inspect.Signature` are deprecated. Use the new " +":meth:`Signature.from_callable() ` method " +"instead. (Contributed by Yury Selivanov in :issue:`24248`.)" +msgstr "" +"之前未写入文档的 :class:`inspect.Signature` 的 ``from_function`` 和 ``from_builtin`` " +"方法已被弃用。 请改用新的 :meth:`Signature.from_callable() " +"` 方法。 (由 Yury Selivanov 在 :issue:`24248` " +"中贡献。)" + +#: ../../whatsnew/3.5.rst:2326 +msgid "" +"The :func:`inspect.getargspec` function is deprecated and scheduled to be " +"removed in Python 3.6. (See :issue:`20438` for details.)" +msgstr "" +":func:`inspect.getargspec` 函数已被弃用并计划在 Python 3.6 中移除。 (请参阅 :issue:`20438` " +"了解详情。)" + +#: ../../whatsnew/3.5.rst:2329 +msgid "" +"The :mod:`inspect` :func:`~inspect.getfullargspec`, " +":func:`~inspect.getcallargs`, and :func:`~inspect.formatargspec` functions " +"are deprecated in favor of the :func:`inspect.signature` API. (Contributed " +"by Yury Selivanov in :issue:`20438`.)" +msgstr "" +":mod:`inspect` 的 :func:`~inspect.getfullargspec`, " +":func:`~inspect.getcallargs` 和 :func:`~inspect.formatargspec` 函数已被弃用而应改用 " +":func:`inspect.signature` API。 (由 Yury Selivanov 在 :issue:`20438` 中贡献。)" + +#: ../../whatsnew/3.5.rst:2334 +msgid "" +":func:`~inspect.getargvalues` and :func:`~inspect.formatargvalues` functions" +" were inadvertently marked as deprecated with the release of Python 3.5.0." +msgstr "" +"在 Python 3.5.0 发布时 :func:`~inspect.getargvalues` 和 " +":func:`~inspect.formatargvalues` 函数被误标记为已弃用。" + +#: ../../whatsnew/3.5.rst:2337 +msgid "" +"Use of :const:`re.LOCALE` flag with str patterns or :const:`re.ASCII` is now" +" deprecated. (Contributed by Serhiy Storchaka in :issue:`22407`.)" +msgstr "" +"在 str 模式中使用 :const:`re.LOCALE` 旗标或 :const:`re.ASCII` 的做法现在已被弃用。 (由 Serhiy " +"Storchaka 在 :issue:`22407` 中贡献。)" + +#: ../../whatsnew/3.5.rst:2340 +msgid "" +"Use of unrecognized special sequences consisting of ``'\\'`` and an ASCII " +"letter in regular expression patterns and replacement patterns now raises a " +"deprecation warning and will be forbidden in Python 3.6. (Contributed by " +"Serhiy Storchaka in :issue:`23622`.)" +msgstr "" +"在正则表达式模式和替换模式中使用不可识别的由 ``'\\'`` 加一个 ASCII 字母组成的序列的做法现在会引发弃用警告并将在 Python 3.6 " +"中被禁止。 (由 Serhiy Storchaka 在 :issue:`23622` 中贡献。)" + +#: ../../whatsnew/3.5.rst:2345 +msgid "" +"The undocumented and unofficial *use_load_tests* default argument of the " +":meth:`unittest.TestLoader.loadTestsFromModule` method now is deprecated and" +" ignored. (Contributed by Robert Collins and Barry A. Warsaw in " +":issue:`16662`.)" +msgstr "" +"现在 :meth:`unittest.TestLoader.loadTestsFromModule` 方法未写入文档的非官方 " +"*use_load_tests* 默认参数已被弃用并会被忽略。 (由 Robert Collins 和 Barry A. Warsaw 在 " +":issue:`16662` 中贡献。)" + +#: ../../whatsnew/3.5.rst:2352 +msgid "Removed" +msgstr "移除" + +#: ../../whatsnew/3.5.rst:2355 +msgid "API and Feature Removals" +msgstr "API 与特性的移除" + +#: ../../whatsnew/3.5.rst:2357 +msgid "" +"The following obsolete and previously deprecated APIs and features have been" +" removed:" +msgstr "以下过时并在之前版本中弃用的 API 和特性现已被移除:" + +#: ../../whatsnew/3.5.rst:2360 +msgid "" +"The ``__version__`` attribute has been dropped from the email package. The " +"email code hasn't been shipped separately from the stdlib for a long time, " +"and the ``__version__`` string was not updated in the last few releases." +msgstr "" +"``__version__`` 属性已从 mail 包中被去除。 email 包的代码已经很久没有与 stdlib 分开发布了,而 " +"``__version__`` 字符串在最近几次发布版中也没有被更新。" + +#: ../../whatsnew/3.5.rst:2364 +msgid "" +"The internal ``Netrc`` class in the :mod:`ftplib` module was deprecated in " +"3.4, and has now been removed. (Contributed by Matt Chaput in " +":issue:`6623`.)" +msgstr "" +"在 :mod:`ftplib` 模块中的内部 ``Netrc`` 类在 3.4 中被弃用,现在已被移除。 (由 Matt Chaput 在 " +":issue:`6623` 中贡献。)" + +#: ../../whatsnew/3.5.rst:2368 +msgid "The concept of ``.pyo`` files has been removed." +msgstr "``.pyo`` 文件的概念已被移除。" + +#: ../../whatsnew/3.5.rst:2370 +msgid "" +"The JoinableQueue class in the provisional :mod:`asyncio` module was " +"deprecated in 3.4.4 and is now removed. (Contributed by A. Jesse Jiryu Davis" +" in :issue:`23464`.)" +msgstr "" +"暂定的 :mod:`asyncio` 模块中的 JoinableQueue 类在 3.4.4 中被弃用,现在已被移除。 (由 A. Jesse " +"Jiryu Davis 在 :issue:`23464` 中贡献。)" + +#: ../../whatsnew/3.5.rst:2376 +msgid "Porting to Python 3.5" +msgstr "移植到Python 3.5" + +#: ../../whatsnew/3.5.rst:2378 +msgid "" +"This section lists previously described changes and other bugfixes that may " +"require changes to your code." +msgstr "本节列出了先前描述的更改以及可能需要更改代码的其他错误修正." + +#: ../../whatsnew/3.5.rst:2383 +msgid "Changes in Python behavior" +msgstr "Python 行为的改变" + +#: ../../whatsnew/3.5.rst:2385 +msgid "" +"Due to an oversight, earlier Python versions erroneously accepted the " +"following syntax::" +msgstr "由于一个疏忽,之前的 Python 版本会错误地接受以下语法::" + +#: ../../whatsnew/3.5.rst:2391 +msgid "" +"Python 3.5 now correctly raises a :exc:`SyntaxError`, as generator " +"expressions must be put in parentheses if not a sole argument to a function." +msgstr "" +"对于生成器表达式不是传给函数的唯一参数时必须放在圆括号内的情况,Python 3.5 现在会正确地引发 :exc:`SyntaxError`。" + +#: ../../whatsnew/3.5.rst:2396 +msgid "Changes in the Python API" +msgstr "Python API 的变化" + +#: ../../whatsnew/3.5.rst:2398 +msgid "" +":pep:`475`: System calls are now retried when interrupted by a signal " +"instead of raising :exc:`InterruptedError` if the Python signal handler does" +" not raise an exception." +msgstr "" +":pep:`475`: 现在当系统调用被信号中断时如果 Python 信号处理器没有引发异常则会执行重试而不是引发 " +":exc:`InterruptedError`。" + +#: ../../whatsnew/3.5.rst:2402 +msgid "" +"Before Python 3.5, a :class:`datetime.time` object was considered to be " +"false if it represented midnight in UTC. This behavior was considered " +"obscure and error-prone and has been removed in Python 3.5. See " +":issue:`13936` for full details." +msgstr "" +"在 Python 3.5 之前,如果一个 :class:`datetime.time` 对象是表示 UTC 时间的午夜则会被视为假值。 " +"此行为被认为容易造成困惑和错误因而在 Python 3.5 中已被去除。 详情参见 :issue:`13936`。" + +#: ../../whatsnew/3.5.rst:2407 +msgid "" +"The :meth:`ssl.SSLSocket.send()` method now raises either " +":exc:`ssl.SSLWantReadError` or :exc:`ssl.SSLWantWriteError` on a non-" +"blocking socket if the operation would block. Previously, it would return " +"``0``. (Contributed by Nikolaus Rath in :issue:`20951`.)" +msgstr "" +"现在当操作将要阻塞时 :meth:`ssl.SSLSocket.send()` 方法将在非阻塞的套接字上引发 " +":exc:`ssl.SSLWantReadError` 或 :exc:`ssl.SSLWantWriteError`。 在之前版本中,它将返回 " +"``0``。 (由 Nikolaus Rath 在 :issue:`20951` 中贡献。)" + +#: ../../whatsnew/3.5.rst:2412 +msgid "" +"The ``__name__`` attribute of generators is now set from the function name, " +"instead of being set from the code name. Use ``gen.gi_code.co_name`` to " +"retrieve the code name. Generators also have a new ``__qualname__`` " +"attribute, the qualified name, which is now used for the representation of a" +" generator (``repr(gen)``). (Contributed by Victor Stinner in " +":issue:`21205`.)" +msgstr "" +"现在生成器的 ``__name__`` 属性是根据函数名设置的,而不是根据代码名设置的。 请使用 ``gen.gi_code.co_name`` " +"来获取代码名。 生成器还有一个新的 ``__qualname__`` 属性,即限定名称,它现在用于生成器的表示形式 (``repr(gen)``)。 " +"(由 Victor Stinner 在 :issue:`21205` 中贡献。)" + +#: ../../whatsnew/3.5.rst:2419 +msgid "" +"The deprecated \"strict\" mode and argument of " +":class:`~html.parser.HTMLParser`, :meth:`HTMLParser.error`, and the " +":exc:`HTMLParserError` exception have been removed. (Contributed by Ezio " +"Melotti in :issue:`15114`.) The *convert_charrefs* argument of " +":class:`~html.parser.HTMLParser` is now ``True`` by default. (Contributed " +"by Berker Peksag in :issue:`21047`.)" +msgstr "" + +#: ../../whatsnew/3.5.rst:2425 +msgid "" +"Although it is not formally part of the API, it is worth noting for porting " +"purposes (ie: fixing tests) that error messages that were previously of the " +"form \"'sometype' does not support the buffer protocol\" are now of the form" +" \"a :term:`bytes-like object` is required, not 'sometype'\". (Contributed " +"by Ezio Melotti in :issue:`16518`.)" +msgstr "" +"虽然不是 API 的正式组成部分,但对于移植目的(例如:修复测试)来说需要注意之前 \"'sometype' does not support the " +"buffer protocol\" 形式的错误消息现在将为 \"a :term:`bytes-like object` is required, not" +" 'sometype'\" 形式。 (由 Ezio Melotti 在 :issue:`16518` 中贡献。)" + +#: ../../whatsnew/3.5.rst:2431 +msgid "" +"If the current directory is set to a directory that no longer exists then " +":exc:`FileNotFoundError` will no longer be raised and instead " +":meth:`~importlib.machinery.FileFinder.find_spec` will return ``None`` " +"**without** caching ``None`` in :data:`sys.path_importer_cache`, which is " +"different than the typical case (:issue:`22834`)." +msgstr "" +"在当前目录被设为已不存在的目录时将不再引发 :exc:`FileNotFoundError` 而是改为 " +":meth:`~importlib.machinery.FileFinder.find_spec` 返回 ``None`` 并且 **不在** " +":data:`sys.path_importer_cache` 中缓存 ``None``,这与典型的场景存在区别 (:issue:`22834`)。" + +#: ../../whatsnew/3.5.rst:2437 +msgid "" +"HTTP status code and messages from :mod:`http.client` and :mod:`http.server`" +" were refactored into a common :class:`~http.HTTPStatus` enum. The values " +"in :mod:`http.client` and :mod:`http.server` remain available for backwards " +"compatibility. (Contributed by Demian Brecht in :issue:`21793`.)" +msgstr "" +":mod:`http.client` 和 :mod:`http.server` 中的 HTTP 状态码和消息被重构为一个通用的 " +":class:`~http.HTTPStatus` 枚举。 :mod:`http.client` 和 :mod:`http.server` " +"中的值仍可被用于向下兼容性。 (由 Demian Brecht 在 :issue:`21793` 中贡献。)" + +#: ../../whatsnew/3.5.rst:2442 +msgid "" +"When an import loader defines :meth:`importlib.machinery.Loader.exec_module`" +" it is now expected to also define " +":meth:`~importlib.machinery.Loader.create_module` (raises a " +":exc:`DeprecationWarning` now, will be an error in Python 3.6). If the " +"loader inherits from :class:`importlib.abc.Loader` then there is nothing to " +"do, else simply define :meth:`~importlib.machinery.Loader.create_module` to " +"return ``None``. (Contributed by Brett Cannon in :issue:`23014`.)" +msgstr "" +"现在当一个导入加载器定义了 :meth:`importlib.machinery.Loader.exec_module` 时它也应该定义 " +":meth:`~importlib.machinery.Loader.create_module` (现在会引发 " +":exc:`DeprecationWarning`,在 Python 3.6 中将引发错误)。 如果加载器是继承自 " +":class:`importlib.abc.Loader` 那么就不需要做什么,在其他情况下只须定义 " +":meth:`~importlib.machinery.Loader.create_module` 来返回 ``None``。 (由 Brett " +"Cannon 在 :issue:`23014` 中贡献。)" + +#: ../../whatsnew/3.5.rst:2450 +msgid "" +"The :func:`re.split` function always ignored empty pattern matches, so the " +"``\"x*\"`` pattern worked the same as ``\"x+\"``, and the ``\"\\b\"`` " +"pattern never worked. Now :func:`re.split` raises a warning if the pattern " +"could match an empty string. For compatibility, use patterns that never " +"match an empty string (e.g. ``\"x+\"`` instead of ``\"x*\"``). Patterns " +"that could only match an empty string (such as ``\"\\b\"``) now raise an " +"error. (Contributed by Serhiy Storchaka in :issue:`22818`.)" +msgstr "" +":func:`re.split` 函数总是会忽略空的模式匹配,因此 ``\"x*\"`` 模式的效果与 ``\"x+\"`` 相同,而 " +"``\"\\b\"`` 模式则没有效果。 现在当模式将匹配空字符串时 :func:`re.split` 会引发一个警告。 " +"为保持兼容性,请使用绝不会匹配空字符串的模式 (例如使用 ``\"x+\"`` 而不是 ``\"x*\"``)。 只匹配空字符串的模式 (例如 " +"``\"\\b\"``) 现在会引发一个错误。 (由 Serhiy Storchaka 在 :issue:`22818` 中贡献。)" + +#: ../../whatsnew/3.5.rst:2458 +msgid "" +"The :class:`http.cookies.Morsel` dict-like interface has been made self " +"consistent: morsel comparison now takes the " +":attr:`~http.cookies.Morsel.key` and :attr:`~http.cookies.Morsel.value` into" +" account, :meth:`~http.cookies.Morsel.copy` now results in a " +":class:`~http.cookies.Morsel` instance rather than a :class:`dict`, and " +":meth:`~http.cookies.Morsel.update` will now raise an exception if any of " +"the keys in the update dictionary are invalid. In addition, the " +"undocumented *LegalChars* parameter of :func:`~http.cookies.Morsel.set` is " +"deprecated and is now ignored. (Contributed by Demian Brecht in " +":issue:`2211`.)" +msgstr "" +":class:`http.cookies.Morsel` 字典型接口已更为自洽:morsel 比较现在会将 " +":attr:`~http.cookies.Morsel.key` 和 :attr:`~http.cookies.Morsel.value` " +"都纳入考虑,:meth:`~http.cookies.Morsel.copy` 现在将得到一个 " +":class:`~http.cookies.Morsel` 实例而不是 :class:`dict`,而 " +":meth:`~http.cookies.Morsel.update` 现在当更新字典中的任一个键无效时将引发一个异常。 " +"此外,:func:`~http.cookies.Morsel.set` 中未写入文档的 *LegalChars* 形参已被弃用并且现在会被忽略。 (由 " +"Demian Brecht 在 :issue:`2211` 中贡献。)" + +#: ../../whatsnew/3.5.rst:2468 +msgid "" +":pep:`488` has removed ``.pyo`` files from Python and introduced the " +"optional ``opt-`` tag in ``.pyc`` file names. The " +":func:`importlib.util.cache_from_source` has gained an *optimization* " +"parameter to help control the ``opt-`` tag. Because of this, the " +"*debug_override* parameter of the function is now deprecated. `.pyo` files " +"are also no longer supported as a file argument to the Python interpreter " +"and thus serve no purpose when distributed on their own (i.e. sourceless " +"code distribution). Due to the fact that the magic number for bytecode has " +"changed in Python 3.5, all old `.pyo` files from previous versions of Python" +" are invalid regardless of this PEP." +msgstr "" + +#: ../../whatsnew/3.5.rst:2479 +msgid "" +"The :mod:`socket` module now exports the :data:`~socket.CAN_RAW_FD_FRAMES` " +"constant on linux 3.6 and greater." +msgstr "" + +#: ../../whatsnew/3.5.rst:2482 +msgid "" +"The :func:`ssl.cert_time_to_seconds` function now interprets the input time " +"as UTC and not as local time, per :rfc:`5280`. Additionally, the return " +"value is always an :class:`int`. (Contributed by Akira Li in " +":issue:`19940`.)" +msgstr "" +"根据 :rfc:`5280`,现在 :func:`ssl.cert_time_to_seconds` 函数会将输入的时间解读为 UTC 而不是本地时间。" +" 此外,其返回值必须为 :class:`int`。 (由 Akira Li 在 :issue:`19940` 中贡献。)" + +#: ../../whatsnew/3.5.rst:2486 +msgid "" +"The ``pygettext.py`` Tool now uses the standard +NNNN format for timezones " +"in the POT-Creation-Date header." +msgstr "现在 ``pygettext.py`` 工具将为 POT-Creation-Date 标头中的时区使用标准的 +NNNN 格式。" + +#: ../../whatsnew/3.5.rst:2489 +msgid "" +"The :mod:`smtplib` module now uses :data:`sys.stderr` instead of the " +"previous module-level :data:`stderr` variable for debug output. If your " +"(test) program depends on patching the module-level variable to capture the " +"debug output, you will need to update it to capture sys.stderr instead." +msgstr "" +"现在 :mod:`smtplib` 模块对于调试输出将使用 :data:`sys.stderr` 而不是之前的模块级 :data:`stderr` " +"变量。 如果你的(测试)程序依赖于对模块级变量打补丁来捕获调试输出,你将需要更新代码将其改为捕获 sys.stderr。" + +#: ../../whatsnew/3.5.rst:2494 +msgid "" +"The :meth:`str.startswith` and :meth:`str.endswith` methods no longer return" +" ``True`` when finding the empty string and the indexes are completely out " +"of range. (Contributed by Serhiy Storchaka in :issue:`24284`.)" +msgstr "" +"当发现空字符串且索引完全超出范围时 :meth:`str.startswith` 和 :meth:`str.endswith` 方法将不再返回 " +"``True``。 (由 Serhiy Storchaka 在 :issue:`24284` 中贡献。)" + +#: ../../whatsnew/3.5.rst:2498 +msgid "" +"The :func:`inspect.getdoc` function now returns documentation strings " +"inherited from base classes. Documentation strings no longer need to be " +"duplicated if the inherited documentation is appropriate. To suppress an " +"inherited string, an empty string must be specified (or the documentation " +"may be filled in). This change affects the output of the :mod:`pydoc` " +"module and the :func:`help` function. (Contributed by Serhiy Storchaka in " +":issue:`15582`.)" +msgstr "" +"现在 :func:`inspect.getdoc` 将返回从基类继承的文档字符串。 如果继承的文档字符串可用就不需要再复制文档字符串。 " +"要屏蔽继承的字符串,必须指定一个空字符串(否则将会填充文档)。 此项改变将影响 :mod:`pydoc` 模块和 :func:`help` 函数的输出。" +" (由 Serhiy Storchaka 在 :issue:`15582` 中贡献。)" + +#: ../../whatsnew/3.5.rst:2506 +msgid "" +"Nested :func:`functools.partial` calls are now flattened. If you were " +"relying on the previous behavior, you can now either add an attribute to a " +":func:`functools.partial` object or you can create a subclass of " +":func:`functools.partial`. (Contributed by Alexander Belopolsky in " +":issue:`7830`.)" +msgstr "" +"嵌套的 :func:`functools.partial` 调用现在已被展平。 如果你需要之前的行为,现在你可以为 " +":func:`functools.partial` 对象添加一个属性或者创建一个 :func:`functools.partial` 的子类。 (由 " +"Alexander Belopolsky 在 :issue:`7830` 中贡献。)" + +#: ../../whatsnew/3.5.rst:2513 +msgid "Changes in the C API" +msgstr "C API 的变化" + +#: ../../whatsnew/3.5.rst:2515 +msgid "" +"The undocumented :c:member:`~PyMemoryViewObject.format` member of the (non-" +"public) :c:type:`PyMemoryViewObject` structure has been removed. All " +"extensions relying on the relevant parts in ``memoryobject.h`` must be " +"rebuilt." +msgstr "" + +#: ../../whatsnew/3.5.rst:2520 +msgid "" +"The :c:type:`PyMemAllocator` structure was renamed to " +":c:type:`PyMemAllocatorEx` and a new ``calloc`` field was added." +msgstr "" +" :c:type:`PyMemAllocator` 结构被重命名为 :c:type:`PyMemAllocatorEx` 并且添加了一个字段 " +"``calloc`` 。" + +#: ../../whatsnew/3.5.rst:2523 +msgid "" +"Removed non-documented macro :c:macro:`PyObject_REPR` which leaked " +"references. Use format character ``%R`` in " +":c:func:`PyUnicode_FromFormat`-like functions to format the :func:`repr` of " +"the object. (Contributed by Serhiy Storchaka in :issue:`22453`.)" +msgstr "" + +#: ../../whatsnew/3.5.rst:2528 +msgid "" +"Because the lack of the :attr:`__module__` attribute breaks pickling and " +"introspection, a deprecation warning is now raised for builtin types without" +" the :attr:`__module__` attribute. This would be an AttributeError in the " +"future. (Contributed by Serhiy Storchaka in :issue:`20204`.)" +msgstr "" +"由于缺少 :attr:`__module__` 属性会破坏封存和内省特性,现在对于没有 :attr:`__module__` " +"属性的内置类型会引发弃用警告。 这在将来会改为 AttributeError。 (由 Serhiy Storchaka 在 :issue:`20204`" +" 中贡献。)" + +#: ../../whatsnew/3.5.rst:2534 +msgid "" +"As part of the :pep:`492` implementation, the ``tp_reserved`` slot of " +":c:type:`PyTypeObject` was replaced with a :c:member:`tp_as_async` slot. " +"Refer to :ref:`coro-objects` for new types, structures and functions." +msgstr "" + +#: ../../whatsnew/3.5.rst:2541 +msgid "Notable changes in Python 3.5.4" +msgstr "Python 3.5.4 的显著变化" + +#: ../../whatsnew/3.5.rst:2544 +msgid "New ``make regen-all`` build target" +msgstr "新增 ``make regen-all`` 构建目标" + +#: ../../whatsnew/3.5.rst:2546 +msgid "" +"To simplify cross-compilation, and to ensure that CPython can reliably be " +"compiled without requiring an existing version of Python to already be " +"available, the autotools-based build system no longer attempts to implicitly" +" recompile generated files based on file modification times." +msgstr "" +"为了简化交叉编译,并确保 CPython 能够可靠地编译而不需要已存在可用的 Python 版本,基于 autotools " +"的构建系统将不再尝试根据文件修改时间隐式地重新编译已生成的文件。" + +#: ../../whatsnew/3.5.rst:2551 +msgid "" +"Instead, a new ``make regen-all`` command has been added to force " +"regeneration of these files when desired (e.g. after an initial version of " +"Python has already been built based on the pregenerated versions)." +msgstr "" +"取而代之的是,新增了一个 ``make regen-all`` 命令以便在需要时强制重新生成这些文件(例如在基于预生成版本构建了 Python " +"的初始版本之后)。" + +#: ../../whatsnew/3.5.rst:2555 +msgid "" +"More selective regeneration targets are also defined - see " +":source:`Makefile.pre.in` for details." +msgstr "还定义了其他一些更具选择性的重生成目标 —— 详情参见 :source:`Makefile.pre.in`。" + +#: ../../whatsnew/3.5.rst:2558 ../../whatsnew/3.5.rst:2571 +msgid "(Contributed by Victor Stinner in :issue:`23404`.)" +msgstr "(由 Victor Stinner 在 :issue:`23404` 中贡献。)" + +#: ../../whatsnew/3.5.rst:2564 +msgid "Removal of ``make touch`` build target" +msgstr "移除了 ``make touch`` 构建目标" + +#: ../../whatsnew/3.5.rst:2566 +msgid "" +"The ``make touch`` build target previously used to request implicit " +"regeneration of generated files by updating their modification times has " +"been removed." +msgstr "之前用于通过更新生成文件的修改时间来请求隐式的重新生成这些文件的 ``make touch`` 构建目标已被移除。" + +#: ../../whatsnew/3.5.rst:2569 +msgid "It has been replaced by the new ``make regen-all`` target." +msgstr "它已被新的 ``make regen-all`` 目标所替代。" diff --git a/whatsnew/3.6.po b/whatsnew/3.6.po new file mode 100644 index 000000000..e461831cd --- /dev/null +++ b/whatsnew/3.6.po @@ -0,0 +1,3925 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) 2001-2024, Python Software Foundation +# This file is distributed under the same license as the Python package. +# FIRST AUTHOR , YEAR. +# +# Translators: +# Kaizhao Zhang , 2018 +# jacky , 2019 +# sgqy , 2019 +# ppcfish , 2019 +# Bryan不可思议, 2022 +# Rafael Fontenelle , 2024 +# Freesand Leo , 2024 +# +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: Python 3.9\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2024-02-16 21:12+0000\n" +"PO-Revision-Date: 2017-02-16 23:45+0000\n" +"Last-Translator: Freesand Leo , 2024\n" +"Language-Team: Chinese (China) (https://app.transifex.com/python-doc/teams/5390/zh_CN/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: zh_CN\n" +"Plural-Forms: nplurals=1; plural=0;\n" + +#: ../../whatsnew/3.6.rst:3 +msgid "What's New In Python 3.6" +msgstr "Python 3.6 有什么新变化" + +#: ../../whatsnew/3.6.rst:0 +msgid "Editors" +msgstr "编者" + +#: ../../whatsnew/3.6.rst:5 +msgid "Elvis Pranskevichus , Yury Selivanov " +msgstr "Elvis Pranskevichus , Yury Selivanov " + +#: ../../whatsnew/3.6.rst:47 +msgid "" +"This article explains the new features in Python 3.6, compared to 3.5. " +"Python 3.6 was released on December 23, 2016.  See the `changelog " +"`_ for a full list of " +"changes." +msgstr "" +"本文解释了与3.5相比,Python 3.6中的新功能。 Python 3.6于2016年12月23日发布。请参阅 `changelog " +"`_ 以获取完整的更改列表。" + +#: ../../whatsnew/3.6.rst:54 +msgid ":pep:`494` - Python 3.6 Release Schedule" +msgstr ":pep:`494` - Python 3.6 发布计划" + +#: ../../whatsnew/3.6.rst:58 +msgid "Summary -- Release highlights" +msgstr "摘要 -- 发布重点" + +#: ../../whatsnew/3.6.rst:60 +msgid "New syntax features:" +msgstr "新的语法特性:" + +#: ../../whatsnew/3.6.rst:62 +msgid ":ref:`PEP 498 `, formatted string literals." +msgstr ":ref:`PEP 498 `, 格式化字符串字面值" + +#: ../../whatsnew/3.6.rst:64 +msgid ":ref:`PEP 515 `, underscores in numeric literals." +msgstr ":ref:`PEP 515 `, 数字字面值中的下划线。" + +#: ../../whatsnew/3.6.rst:66 +msgid ":ref:`PEP 526 `, syntax for variable annotations." +msgstr ":ref:`PEP 526 ` , 变量标注语法。" + +#: ../../whatsnew/3.6.rst:68 +msgid ":ref:`PEP 525 `, asynchronous generators." +msgstr ":ref:`PEP 525 `,异步生成器。" + +#: ../../whatsnew/3.6.rst:70 +msgid ":ref:`PEP 530 `: asynchronous comprehensions." +msgstr ":ref:`PEP 530 `: 异步推导式。" + +#: ../../whatsnew/3.6.rst:73 +msgid "New library modules:" +msgstr "新的库模块:" + +#: ../../whatsnew/3.6.rst:75 +msgid "" +":mod:`secrets`: :ref:`PEP 506 -- Adding A Secrets Module To The Standard " +"Library `." +msgstr "" +":mod:`secrets`: :ref:`PEP 506 -- Python 标准库增加一个密码模块 `。" + +#: ../../whatsnew/3.6.rst:78 +msgid "CPython implementation improvements:" +msgstr "CPython 实现的改进:" + +#: ../../whatsnew/3.6.rst:80 +msgid "" +"The :ref:`dict ` type has been reimplemented to use a " +":ref:`more compact representation ` based on `a " +"proposal by Raymond Hettinger `_ and similar to the `PyPy dict " +"implementation`_. This resulted in dictionaries using 20% to 25% less " +"memory when compared to Python 3.5." +msgstr "" +"根据 `Raymond Hettinger 的提议 `_ 已将 :ref:`dict ` 类型重新实现为使用 " +":ref:`更紧凑的表示形式 ` 并类似于 `PyPy dict implementation`_。 " +"这使得字典所使用的内存相对于 Python 3.5 版减少了 20% 到 25%。" + +#: ../../whatsnew/3.6.rst:87 +msgid "" +"Customization of class creation has been simplified with the :ref:`new " +"protocol `." +msgstr "类创建的定制过程通过 :ref:`新协议 ` 得到了简化。" + +#: ../../whatsnew/3.6.rst:90 +msgid "" +"The class attribute definition order is :ref:`now preserved " +"`." +msgstr "类属性的定义顺序 :ref:`现在会被保留 `。" + +#: ../../whatsnew/3.6.rst:93 +msgid "" +"The order of elements in ``**kwargs`` now :ref:`corresponds to the order " +"` in which keyword arguments were passed to the function." +msgstr "现在 ``**kwargs`` 中的元素会与传给函数的关键字参数 :ref:`保持对应顺序 `。" + +#: ../../whatsnew/3.6.rst:97 +msgid "" +"DTrace and SystemTap :ref:`probing support ` has been " +"added." +msgstr "添加了 DTrace 和 SystemTap :ref:`探测支持 `" + +#: ../../whatsnew/3.6.rst:100 +msgid "" +"The new :ref:`PYTHONMALLOC ` environment variable " +"can now be used to debug the interpreter memory allocation and access " +"errors." +msgstr "" +"新的 :ref:`PYTHONMALLOC ` 环境变量可被用来调试解释器的内存分配和访问错误。" + +#: ../../whatsnew/3.6.rst:105 +msgid "Significant improvements in the standard library:" +msgstr "标准库中的重大改进:" + +#: ../../whatsnew/3.6.rst:107 +msgid "" +"The :mod:`asyncio` module has received new features, significant usability " +"and performance improvements, and a fair amount of bug fixes. Starting with " +"Python 3.6 the ``asyncio`` module is no longer provisional and its API is " +"considered stable." +msgstr "" +":mod:`asyncio` 模块获得了许多新特性,显著的可用性和性能提升,以及大量的问题修正。 从 Python 3.6 开始 ``asyncio``" +" 模块不再处于待定状态,它已被视为稳定 API。" + +#: ../../whatsnew/3.6.rst:112 +msgid "" +"A new :ref:`file system path protocol ` has been " +"implemented to support :term:`path-like objects `. All " +"standard library functions operating on paths have been updated to work with" +" the new protocol." +msgstr "" +"实现了新的 :ref:`文件系统路径协议 ` 以支持 :term:`路径类对象 `。 所有操作路径的标准库函数已被更新为使用新的协议。" + +#: ../../whatsnew/3.6.rst:117 +msgid "" +"The :mod:`datetime` module has gained support for :ref:`Local Time " +"Disambiguation `." +msgstr ":mod:`datetime` 模块已获得对 :ref:`本地时间消歧义 ` 的支持。" + +#: ../../whatsnew/3.6.rst:120 +msgid "" +"The :mod:`typing` module received a number of :ref:`improvements " +"`." +msgstr ":mod:`typing` 模块获得了大量的 :ref:`改进 `。" + +#: ../../whatsnew/3.6.rst:123 +msgid "" +"The :mod:`tracemalloc` module has been significantly reworked and is now " +"used to provide better output for :exc:`ResourceWarning` as well as provide " +"better diagnostics for memory allocation errors. See the :ref:`PYTHONMALLOC " +"section ` for more information." +msgstr "" +":mod:`tracemalloc` 模块已被大幅重写,现在将被用于为 :exc:`ResourceWarning` " +"提供更好的输出,并为内存分配错误提供更好的诊断。 请参阅 :ref:`PYTHONMALLOC 一节 " +"` 来了解详情。" + +#: ../../whatsnew/3.6.rst:130 +msgid "Security improvements:" +msgstr "安全改进:" + +#: ../../whatsnew/3.6.rst:132 +msgid "" +"The new :mod:`secrets` module has been added to simplify the generation of " +"cryptographically strong pseudo-random numbers suitable for managing secrets" +" such as account authentication, tokens, and similar." +msgstr "添加了 :mod:`secrets` 模块以简化适用于密码管理的高加密强度伪随机数的生成,例如账户验证、安全凭据等场景。" + +#: ../../whatsnew/3.6.rst:136 ../../whatsnew/3.6.rst:1283 +msgid "" +"On Linux, :func:`os.urandom` now blocks until the system urandom entropy " +"pool is initialized to increase the security. See the :pep:`524` for the " +"rationale." +msgstr "" +"在 Linux 上,现在 :func:`os.urandom` 会阻塞直到系统的 urandom 熵池被初始化以提升安全性。 其理由参见 " +":pep:`524`。" + +#: ../../whatsnew/3.6.rst:140 +msgid "The :mod:`hashlib` and :mod:`ssl` modules now support OpenSSL 1.1.0." +msgstr ":mod:`hashlib` 和 :mod:`ssl` 模块现在支持 OpenSSL 1.1.0。" + +#: ../../whatsnew/3.6.rst:142 +msgid "" +"The default settings and feature set of the :mod:`ssl` module have been " +"improved." +msgstr ":mod:`ssl` 模块的默认设置和特性集已得到改进。" + +#: ../../whatsnew/3.6.rst:145 +msgid "" +"The :mod:`hashlib` module received support for the BLAKE2, SHA-3 and SHAKE " +"hash algorithms and the :func:`~hashlib.scrypt` key derivation function." +msgstr "" +":mod:`hashlib` 模块获得了对 BLAKE2, SHA-3 和 SHAKE 哈希算法以及 :func:`~hashlib.scrypt` " +"密钥派生函数的支持。" + +#: ../../whatsnew/3.6.rst:149 +msgid "Windows improvements:" +msgstr "Windows改进:" + +#: ../../whatsnew/3.6.rst:151 +msgid "" +":ref:`PEP 528 ` and :ref:`PEP 529 `, " +"Windows filesystem and console encoding changed to UTF-8." +msgstr "" +":ref:`PEP 528 ` 和 :ref:`PEP 529 `, " +"将Windows文件系统和控制台的编码更改为UTF-8" + +#: ../../whatsnew/3.6.rst:154 +msgid "" +"The ``py.exe`` launcher, when used interactively, no longer prefers Python 2" +" over Python 3 when the user doesn't specify a version (via command line " +"arguments or a config file). Handling of shebang lines remains unchanged - " +"\"python\" refers to Python 2 in that case." +msgstr "" +"在交互式地使用 ``py.exe`` 启动器时,当用户未(通过命令行参数或配置文件)指定版本时不再优先选择 Python 2 而是选择 Python " +"3。 对声明行的处理则保持不变 —— 在这种情况下 \"python\" 还是指 Python 2。" + +#: ../../whatsnew/3.6.rst:159 +msgid "" +"``python.exe`` and ``pythonw.exe`` have been marked as long-path aware, " +"which means that the 260 character path limit may no longer apply. See " +":ref:`removing the MAX_PATH limitation ` for details." +msgstr "" +"``python.exe`` 和 ``pythonw.exe`` 已被标记为支持长路径,这意味着不再有 260 个字符的路径长度限制。 详情参见 " +":ref:`移除 MAX_PATH 限制 `。" + +#: ../../whatsnew/3.6.rst:163 +msgid "" +"A ``._pth`` file can be added to force isolated mode and fully specify all " +"search paths to avoid registry and environment lookup. See :ref:`the " +"documentation ` for more information." +msgstr "" +"可以添加一个 ``._pth`` 文件来强制使用隔离模式和完整指定所有搜索路径来避免注册表和环境查找。 更多信息请参阅 :ref:`相关文档 " +"`。" + +#: ../../whatsnew/3.6.rst:167 +msgid "" +"A ``python36.zip`` file now works as a landmark to infer " +":envvar:`PYTHONHOME`. See :ref:`the documentation ` for " +"more information." +msgstr "" +"现在 ``python36.zip`` 文件可以作为推断 :envvar:`PYTHONHOME` 的标志。 更多信息请参阅 :ref:`相关文档 " +"`。" + +#: ../../whatsnew/3.6.rst:176 +msgid "New Features" +msgstr "新的特性" + +#: ../../whatsnew/3.6.rst:181 +msgid "PEP 498: Formatted string literals" +msgstr "PEP 498: 格式化字符串字面值" + +#: ../../whatsnew/3.6.rst:183 +msgid "" +":pep:`498` introduces a new kind of string literals: *f-strings*, or " +":ref:`formatted string literals `." +msgstr ":pep:`498` 引入了一种新型的字符串字面值: *f-字符串*,或称 :ref:`格式化字符串字面值 `。" + +#: ../../whatsnew/3.6.rst:186 +msgid "" +"Formatted string literals are prefixed with ``'f'`` and are similar to the " +"format strings accepted by :meth:`str.format`. They contain replacement " +"fields surrounded by curly braces. The replacement fields are expressions, " +"which are evaluated at run time, and then formatted using the :func:`format`" +" protocol::" +msgstr "" +"格式化字符串字面值带有 ``'f'`` 前缀并且类似于 :meth:`str.format` 所接受的格式字符串。 其中包含由花括号包围的替换字段。 " +"替换字段属于表达式,它们会在运行时被求值,然后使用 :func:`format` 协议进行格式化::" + +#: ../../whatsnew/3.6.rst:204 +msgid ":pep:`498` -- Literal String Interpolation." +msgstr ":pep:`498` -- 字符串字面值插值。" + +#: ../../whatsnew/3.6.rst:204 +msgid "PEP written and implemented by Eric V. Smith." +msgstr "PEP 由 Eric V. Smith 撰写并实现" + +#: ../../whatsnew/3.6.rst:206 +msgid ":ref:`Feature documentation `." +msgstr ":ref:`特性文档 `。" + +#: ../../whatsnew/3.6.rst:212 +msgid "PEP 526: Syntax for variable annotations" +msgstr "PEP 526: 变量标注的语法" + +#: ../../whatsnew/3.6.rst:214 +msgid "" +":pep:`484` introduced the standard for type annotations of function " +"parameters, a.k.a. type hints. This PEP adds syntax to Python for annotating" +" the types of variables including class variables and instance variables::" +msgstr "" +":pep:`484` 引入了函数形参类型标注即类型提示的标准。 这个 PEP 为 Python 添加了标注变量类型的语法,包括类变量和实例变量::" + +#: ../../whatsnew/3.6.rst:225 +msgid "" +"Just as for function annotations, the Python interpreter does not attach any" +" particular meaning to variable annotations and only stores them in the " +"``__annotations__`` attribute of a class or module." +msgstr "" +"与函数标注一样,Python 解释器不会为变量标注附加任何特殊含义,仅会将其保存在类或模块的 ``__annotations__`` 属性中。" + +#: ../../whatsnew/3.6.rst:229 +msgid "" +"In contrast to variable declarations in statically typed languages, the goal" +" of annotation syntax is to provide an easy way to specify structured type " +"metadata for third party tools and libraries via the abstract syntax tree " +"and the ``__annotations__`` attribute." +msgstr "" +"与静态类型语法的变量声明不同,标注语法的目的是通过抽象语法树和 ``__annotations__`` " +"属性提供一个简单方式来为第三方工具和库指定结构化类型元数据。" + +#: ../../whatsnew/3.6.rst:238 +msgid ":pep:`526` -- Syntax for variable annotations." +msgstr ":pep:`526` -- 变量标注的语法。" + +#: ../../whatsnew/3.6.rst:237 +msgid "" +"PEP written by Ryan Gonzalez, Philip House, Ivan Levkivskyi, Lisa Roach, and" +" Guido van Rossum. Implemented by Ivan Levkivskyi." +msgstr "" +"PEP 由 Ryan Gonzalez, Philip House, Ivan Levkivskyi, Lisa Roach, 和 Guido van " +"Rossum 撰写,由 Ivan Levkivskyi 实现。" + +#: ../../whatsnew/3.6.rst:240 +msgid "" +"Tools that use or will use the new syntax: `mypy `_, `pytype `_, PyCharm, etc." +msgstr "" +"使用或将要使用此新语法的工具有: `mypy `_, `pytype " +"`_, PyCharm 等等。" + +#: ../../whatsnew/3.6.rst:248 +msgid "PEP 515: Underscores in Numeric Literals" +msgstr "PEP 515: 数字字面值中的下划线。" + +#: ../../whatsnew/3.6.rst:250 +msgid "" +":pep:`515` adds the ability to use underscores in numeric literals for " +"improved readability. For example::" +msgstr ":pep:`515` 增加了在数字字面值中使用下划线的能力以改善可读性。 例如::" + +#: ../../whatsnew/3.6.rst:258 +msgid "" +"Single underscores are allowed between digits and after any base specifier." +" Leading, trailing, or multiple underscores in a row are not allowed." +msgstr "单个下划线允许用在数码之间和任何数制指示符之后。 一行内不允许有开头、末尾或多个下划线。" + +#: ../../whatsnew/3.6.rst:262 +msgid "" +"The :ref:`string formatting ` language also now has support for " +"the ``'_'`` option to signal the use of an underscore for a thousands " +"separator for floating point presentation types and for integer presentation" +" type ``'d'``. For integer presentation types ``'b'``, ``'o'``, ``'x'``, " +"and ``'X'``, underscores will be inserted every 4 digits::" +msgstr "" +":ref:`字符串格式化 ` 微语言现在也支持以 ``'_'`` 选项来表示用下划线作为浮点表示类型和整数表示类型 " +"``'d'`` 的千位分隔符。 对于整数表示类型 ``'b'``, ``'o'``, ``'x'`` 和 ``'X'``,将每隔 4 " +"个数码插入一个下划线::" + +#: ../../whatsnew/3.6.rst:276 +msgid ":pep:`515` -- Underscores in Numeric Literals" +msgstr ":pep:`515` -- 数字字面值中的下划线。" + +#: ../../whatsnew/3.6.rst:277 +msgid "PEP written by Georg Brandl and Serhiy Storchaka." +msgstr "PEP 由 Georg Brandl 和 Serhiy Storchaka 撰写" + +#: ../../whatsnew/3.6.rst:283 +msgid "PEP 525: Asynchronous Generators" +msgstr "PEP 525: 异步生成器" + +#: ../../whatsnew/3.6.rst:285 +msgid "" +":pep:`492` introduced support for native coroutines and ``async`` / " +"``await`` syntax to Python 3.5. A notable limitation of the Python 3.5 " +"implementation is that it was not possible to use ``await`` and ``yield`` in" +" the same function body. In Python 3.6 this restriction has been lifted, " +"making it possible to define *asynchronous generators*::" +msgstr "" +":pep:`492` 将对原生协程和 ``async`` / ``await`` 语法的支持引入到 Python 3.5 中。 但 Python 3.5" +" 实现的一个明显限制是不可能在同一函数体中同时使用 ``await`` 和 ``yield``。 在 Python 3.6 " +"中此限制已被解除,这样就就能够定义 *异步生成器*::" + +#: ../../whatsnew/3.6.rst:297 +msgid "The new syntax allows for faster and more concise code." +msgstr "这个新语法允许更快速且更精简的代码。" + +#: ../../whatsnew/3.6.rst:301 +msgid ":pep:`525` -- Asynchronous Generators" +msgstr ":pep:`525` -- 异步生成器" + +#: ../../whatsnew/3.6.rst:302 ../../whatsnew/3.6.rst:323 +msgid "PEP written and implemented by Yury Selivanov." +msgstr "PEP 由 Yury Selivanov 撰写并实现" + +#: ../../whatsnew/3.6.rst:308 +msgid "PEP 530: Asynchronous Comprehensions" +msgstr "PEP 530: 异步推导式" + +#: ../../whatsnew/3.6.rst:310 +msgid "" +":pep:`530` adds support for using ``async for`` in list, set, dict " +"comprehensions and generator expressions::" +msgstr ":pep:`530` 添加了对在列表、集合与字典推导式和生成器表达式中使用 ``async for`` 的支持::" + +#: ../../whatsnew/3.6.rst:315 +msgid "" +"Additionally, ``await`` expressions are supported in all kinds of " +"comprehensions::" +msgstr "此外,``await`` 表达式也在所有种类的推导式中得到支持::" + +#: ../../whatsnew/3.6.rst:322 +msgid ":pep:`530` -- Asynchronous Comprehensions" +msgstr ":pep:`530` -- 异步推导式" + +#: ../../whatsnew/3.6.rst:329 +msgid "PEP 487: Simpler customization of class creation" +msgstr "PEP 487: 更简单的自定义类创建" + +#: ../../whatsnew/3.6.rst:331 +msgid "" +"It is now possible to customize subclass creation without using a metaclass." +" The new ``__init_subclass__`` classmethod will be called on the base class " +"whenever a new subclass is created::" +msgstr "" +"现在可以在不使用元类的情况下自定义子类的创建。 当一个新的子类被创建时将在基类上调用新的 ``__init_subclass__`` 类方法::" + +#: ../../whatsnew/3.6.rst:348 +msgid "" +"In order to allow zero-argument :func:`super` calls to work correctly from " +":meth:`~object.__init_subclass__` implementations, custom metaclasses must " +"ensure that the new ``__classcell__`` namespace entry is propagated to " +"``type.__new__`` (as described in :ref:`class-object-creation`)." +msgstr "" +"为了让来自 :meth:`~object.__init_subclass__` 实现的零参数 :func:`super` " +"调用能正确工作,自定义元类必须保证新的 ``__classcell__`` 命名空间入口被传播到 ``type.__new__`` (如 " +":ref:`class-object-creation` 中所描述)。" + +#: ../../whatsnew/3.6.rst:356 ../../whatsnew/3.6.rst:394 +msgid ":pep:`487` -- Simpler customization of class creation" +msgstr ":pep:`487` -- 更简单的自定义类创建" + +#: ../../whatsnew/3.6.rst:356 ../../whatsnew/3.6.rst:394 +msgid "PEP written and implemented by Martin Teichmann." +msgstr "PEP 由 Martin Teichmann 撰写并实现。" + +#: ../../whatsnew/3.6.rst:358 +msgid ":ref:`Feature documentation `" +msgstr ":ref:`特性文档 `" + +#: ../../whatsnew/3.6.rst:364 +msgid "PEP 487: Descriptor Protocol Enhancements" +msgstr "PEP 487: 描述器协议的增强" + +#: ../../whatsnew/3.6.rst:366 +msgid "" +":pep:`487` extends the descriptor protocol to include the new optional " +":meth:`~object.__set_name__` method. Whenever a new class is defined, the " +"new method will be called on all descriptors included in the definition, " +"providing them with a reference to the class being defined and the name " +"given to the descriptor within the class namespace. In other words, " +"instances of descriptors can now know the attribute name of the descriptor " +"in the owner class::" +msgstr "" +":pep:`487` 扩展了描述器协议以包括新的可选方法 :meth:`~object.__set_name__`。 " +"当创建一个新类时,这个新方法将在定义中包括的所有描述器上被调用,为它们提供对所定义类的引用以及在类命名中间中给予描述器的名称。 " +"换句话说,描述器的实例现在能知道描述器在所有者类中的属性名称::" + +#: ../../whatsnew/3.6.rst:396 +msgid ":ref:`Feature documentation `" +msgstr ":ref:`特性文档 `" + +#: ../../whatsnew/3.6.rst:402 +msgid "PEP 519: Adding a file system path protocol" +msgstr "PEP 519: 添加文件系统路径协议" + +#: ../../whatsnew/3.6.rst:404 +msgid "" +"File system paths have historically been represented as :class:`str` or " +":class:`bytes` objects. This has led to people who write code which operate " +"on file system paths to assume that such objects are only one of those two " +"types (an :class:`int` representing a file descriptor does not count as that" +" is not a file path). Unfortunately that assumption prevents alternative " +"object representations of file system paths like :mod:`pathlib` from working" +" with pre-existing code, including Python's standard library." +msgstr "" +"文件系统路径历来被表示为 :class:`str` 或 :class:`bytes` 对象。 " +"这使得编写对文件系统路径进行操作的代码的人会假定这种对象只能是这两种类型之一(不考虑表示文件描述符的 :class:`int` 因为它不是文件路径)。 " +"不幸的是,这种假定阻止了像 :mod:`pathlib` 这样的文件系统路径的替代对象表示形式与包括 Python 标准库在内的现有代码协同工作。" + +#: ../../whatsnew/3.6.rst:413 +msgid "" +"To fix this situation, a new interface represented by :class:`os.PathLike` " +"has been defined. By implementing the :meth:`~os.PathLike.__fspath__` " +"method, an object signals that it represents a path. An object can then " +"provide a low-level representation of a file system path as a :class:`str` " +"or :class:`bytes` object. This means an object is considered :term:`path-" +"like ` if it implements :class:`os.PathLike` or is a " +":class:`str` or :class:`bytes` object which represents a file system path. " +"Code can use :func:`os.fspath`, :func:`os.fsdecode`, or :func:`os.fsencode` " +"to explicitly get a :class:`str` and/or :class:`bytes` representation of a " +"path-like object." +msgstr "" +"为了修正这种情况,一个由 :class:`os.PathLike` 表示的新接口被定义出来。 通过实现 " +":meth:`~os.PathLike.__fspath__` 方法,对象可以表明它代表一个路径。 这样一个对象就能以 :class:`str` 或 " +":class:`bytes` 对象的形式提供文件系统路径的低层级表示。 这意味着如果一个对象实现了 :class:`os.PathLike` " +"或者是表示文件系统路径的 :class:`str` 或 :class:`bytes` 对象它就会被当作是 :term:`路径型对象 `。 代码可以使用 :func:`os.fspath`、:func:`os.fsdecode` 或 " +":func:`os.fsencode` 来显式地获取一个路径型对象的 :class:`str` 和/或 :class:`bytes` 表示形式。" + +#: ../../whatsnew/3.6.rst:426 +msgid "" +"The built-in :func:`open` function has been updated to accept " +":class:`os.PathLike` objects, as have all relevant functions in the " +":mod:`os` and :mod:`os.path` modules, and most other functions and classes " +"in the standard library. The :class:`os.DirEntry` class and relevant " +"classes in :mod:`pathlib` have also been updated to implement " +":class:`os.PathLike`." +msgstr "" +"内置 :func:`open` 函数已被更新为接受 :class:`os.PathLike` 对象,就像 :mod:`os` 和 " +":mod:`os.path` 模块中的所有相关函数和标准库中的大多数其他函数和类一样。 :class:`os.DirEntry` 类和 " +":mod:`pathlib` 中的相关类也已被更新以实现 :class:`os.PathLike`。" + +#: ../../whatsnew/3.6.rst:433 +msgid "" +"The hope is that updating the fundamental functions for operating on file " +"system paths will lead to third-party code to implicitly support all " +":term:`path-like objects ` without any code changes, or at" +" least very minimal ones (e.g. calling :func:`os.fspath` at the beginning of" +" code before operating on a path-like object)." +msgstr "" +"希望对于针对文件系统路径操作的基本函数的更新将会使得第三方代码都能隐式地支持所有 :term:`路径型对象 ` " +"而无须修改任何代码,或者至少只需极少的修改(例如当对路径型对象进行操作之前在代码的开头调用 :func:`os.fspath` 即可)。" + +#: ../../whatsnew/3.6.rst:440 +msgid "" +"Here are some examples of how the new interface allows for " +":class:`pathlib.Path` to be used more easily and transparently with pre-" +"existing code::" +msgstr "下面的这些示例说明了新的接口是如何让 :class:`pathlib.Path` 被更容易、更透明地用于已有代码的::" + +#: ../../whatsnew/3.6.rst:457 +msgid "" +"(Implemented by Brett Cannon, Ethan Furman, Dusty Phillips, and Jelle " +"Zijlstra.)" +msgstr "(由 Brett Cannon, Ethan Furman, Dusty Phillips 和 Jelle Zijlstra 实现。)" + +#: ../../whatsnew/3.6.rst:461 +msgid ":pep:`519` -- Adding a file system path protocol" +msgstr ":pep:`519` -- 添加文件系统路径协议" + +#: ../../whatsnew/3.6.rst:462 +msgid "PEP written by Brett Cannon and Koos Zevenhoven." +msgstr "PEP 由 Brett Cannon 和 Koos Zevenhoven 撰写。" + +#: ../../whatsnew/3.6.rst:468 +msgid "PEP 495: Local Time Disambiguation" +msgstr "PEP 495: 消除本地时间的歧义" + +#: ../../whatsnew/3.6.rst:470 +msgid "" +"In most world locations, there have been and will be times when local clocks" +" are moved back. In those times, intervals are introduced in which local " +"clocks show the same time twice in the same day. In these situations, the " +"information displayed on a local clock (or stored in a Python datetime " +"instance) is insufficient to identify a particular moment in time." +msgstr "" +"在世界上大多数地方,过去和将来都会存在本地时钟后移的时候。 在这种时候,本地时钟会在同一天内两次显示相同的时间。 " +"对于这些情况,本地时钟所显示的(或存储在 Python datetime 实例中的)信息将不足以标识某个特定的时间点。" + +#: ../../whatsnew/3.6.rst:476 +msgid "" +":pep:`495` adds the new *fold* attribute to instances of " +":class:`datetime.datetime` and :class:`datetime.time` classes to " +"differentiate between two moments in time for which local times are the " +"same::" +msgstr "" +":pep:`495` 为 :class:`datetime.datetime` 和 :class:`datetime.time` 类的实例添加了新的 " +"*fold* 属性以在本地时间相同的两个时间点之间进行区分::" + +#: ../../whatsnew/3.6.rst:491 +msgid "" +"The values of the :attr:`fold ` attribute have the " +"value ``0`` for all instances except those that represent the second " +"(chronologically) moment in time in an ambiguous case." +msgstr "" +":attr:`fold ` 属性的值在大多数实例上均为 " +"``0``,只有在代表存在歧义的时间的第二个(按发生顺序)实例上例外。" + +#: ../../whatsnew/3.6.rst:498 +msgid ":pep:`495` -- Local Time Disambiguation" +msgstr ":pep:`495` -- 消除本地时间的歧义" + +#: ../../whatsnew/3.6.rst:498 +msgid "" +"PEP written by Alexander Belopolsky and Tim Peters, implementation by " +"Alexander Belopolsky." +msgstr "PEP 由 Alexander Belopolsky 和 Tim Peters 撰写,由 Alexander Belopolsky 实现。" + +#: ../../whatsnew/3.6.rst:505 +msgid "PEP 529: Change Windows filesystem encoding to UTF-8" +msgstr "PEP 529: 将 Windows 文件系统编码格式更改为 UTF-8" + +#: ../../whatsnew/3.6.rst:507 +msgid "" +"Representing filesystem paths is best performed with str (Unicode) rather " +"than bytes. However, there are some situations where using bytes is " +"sufficient and correct." +msgstr "在表示文件系统路径时最好是使用 str (Unicode) 而不是 bytes。 不过,在某些情况下使用 bytes 就是足够而且正确的。" + +#: ../../whatsnew/3.6.rst:511 +msgid "" +"Prior to Python 3.6, data loss could result when using bytes paths on " +"Windows. With this change, using bytes to represent paths is now supported " +"on Windows, provided those bytes are encoded with the encoding returned by " +":func:`sys.getfilesystemencoding()`, which now defaults to ``'utf-8'``." +msgstr "" +"在 Python 3.6 之前,在 Windows 上使用 bytes 路径值可能会导致数据丢失。 有了这一更改,现在 Windows 上将支持使用 " +"bytes 来表示路径,前提是这些 bytes 值是用 :func:`sys.getfilesystemencoding()` " +"所返回的编码格式来编码的,现在此编码格式默认为 ``'utf-8'``。" + +#: ../../whatsnew/3.6.rst:516 +msgid "" +"Applications that do not use str to represent paths should use " +":func:`os.fsencode()` and :func:`os.fsdecode()` to ensure their bytes are " +"correctly encoded. To revert to the previous behaviour, set " +":envvar:`PYTHONLEGACYWINDOWSFSENCODING` or call " +":func:`sys._enablelegacywindowsfsencoding`." +msgstr "" +"不使用 str 来表示路径的应用程序应当使用 :func:`os.fsencode()` 和 :func:`os.fsdecode()` 来确保 " +"bytes 被正确地编码。 要恢复以前的行为,请设置 :envvar:`PYTHONLEGACYWINDOWSFSENCODING` 或调用 " +":func:`sys._enablelegacywindowsfsencoding`。" + +#: ../../whatsnew/3.6.rst:522 +msgid "" +"See :pep:`529` for more information and discussion of code modifications " +"that may be required." +msgstr "有关详细信息和可能需要的代码修改的讨论,请参见 :pep:`529` 。" + +#: ../../whatsnew/3.6.rst:529 +msgid "PEP 528: Change Windows console encoding to UTF-8" +msgstr "PEP 528: 将 Windows 控制台编码格式更改为 UTF-8" + +#: ../../whatsnew/3.6.rst:531 +msgid "" +"The default console on Windows will now accept all Unicode characters and " +"provide correctly read str objects to Python code. ``sys.stdin``, " +"``sys.stdout`` and ``sys.stderr`` now default to utf-8 encoding." +msgstr "" +"现在,Windows 上的默认控制台将接受所有 Unicode 字符并为 Python 代码提供正确读取的 str 对象。``sys.stdin``, " +"``sys.stdout`` 和 ``sys.stderr`` 现在默认使用 utf-8 编码格式。" + +#: ../../whatsnew/3.6.rst:535 +msgid "" +"This change only applies when using an interactive console, and not when " +"redirecting files or pipes. To revert to the previous behaviour for " +"interactive console use, set :envvar:`PYTHONLEGACYWINDOWSSTDIO`." +msgstr "" +"此更改仅在使用交互式控制台时适用,而不适用于重定向文件或管道。 要恢复以前使用交互式控制台时的行为,请设置 " +":envvar:`PYTHONLEGACYWINDOWSSTDIO`。" + +#: ../../whatsnew/3.6.rst:541 +msgid ":pep:`528` -- Change Windows console encoding to UTF-8" +msgstr ":pep:`528` -- 将 Windows 控制台编码格式更改为 UTF-8" + +#: ../../whatsnew/3.6.rst:542 +msgid "PEP written and implemented by Steve Dower." +msgstr "PEP 由 Steve Dower 撰写并实现。" + +#: ../../whatsnew/3.6.rst:548 +msgid "PEP 520: Preserving Class Attribute Definition Order" +msgstr "PEP 520: 保留类属性定义顺序" + +#: ../../whatsnew/3.6.rst:550 +msgid "" +"Attributes in a class definition body have a natural ordering: the same " +"order in which the names appear in the source. This order is now preserved " +"in the new class's :attr:`~object.__dict__` attribute." +msgstr "" +"类定义体中的属性具有自然的排序:与名称在源代码中出现的顺序相同。 现在此排序会在新类的 :attr:`~object.__dict__` 属性中被保留。" + +#: ../../whatsnew/3.6.rst:554 +msgid "" +"Also, the effective default class *execution* namespace (returned from " +":ref:`type.__prepare__() `) is now an insertion-order-preserving " +"mapping." +msgstr "" +"并且,实际的默认类 *execution* 命名空间 (从 :ref:`type.__prepare__() ` 返回) " +"现在将是一个保留插入顺序的映射对象。" + +#: ../../whatsnew/3.6.rst:560 +msgid ":pep:`520` -- Preserving Class Attribute Definition Order" +msgstr ":pep:`520` -- 保留类属性定义顺序" + +#: ../../whatsnew/3.6.rst:561 ../../whatsnew/3.6.rst:575 +msgid "PEP written and implemented by Eric Snow." +msgstr "PEP 由 Eric Snow 撰写并实现" + +#: ../../whatsnew/3.6.rst:567 +msgid "PEP 468: Preserving Keyword Argument Order" +msgstr "PEP 468: 保留关键字参数顺序" + +#: ../../whatsnew/3.6.rst:569 +msgid "" +"``**kwargs`` in a function signature is now guaranteed to be an insertion-" +"order-preserving mapping." +msgstr "函数签名中的 ``**kwargs`` 现在将保证是一个保留插入顺序的映射对象。" + +#: ../../whatsnew/3.6.rst:574 +msgid ":pep:`468` -- Preserving Keyword Argument Order" +msgstr ":pep:`468` -- 保留关键字参数顺序" + +#: ../../whatsnew/3.6.rst:581 +msgid "New :ref:`dict ` implementation" +msgstr "新的 :ref:`dict ` 实现" + +#: ../../whatsnew/3.6.rst:583 +msgid "" +"The :ref:`dict ` type now uses a \"compact\" representation " +"based on `a proposal by Raymond Hettinger " +"`_ " +"which was `first implemented by PyPy " +"`_. The memory usage of the new :func:`dict` is between 20% and " +"25% smaller compared to Python 3.5." +msgstr "" +":ref:`dict ` 类型现在会使用一种基于 `Raymond Hettinger 的提议 " +"`_ " +"的“紧凑”表示形式,该表示形式 `最初由 PyPy 实现 `_。 新的The memory usage of the new " +":func:`dict` 的内存占用相比 Python 3.5 减少了 20% 到 25%。" + +#: ../../whatsnew/3.6.rst:591 +msgid "" +"The order-preserving aspect of this new implementation is considered an " +"implementation detail and should not be relied upon (this may change in the " +"future, but it is desired to have this new dict implementation in the " +"language for a few releases before changing the language spec to mandate " +"order-preserving semantics for all current and future Python " +"implementations; this also helps preserve backwards-compatibility with older" +" versions of the language where random iteration order is still in effect, " +"e.g. Python 3.5)." +msgstr "" +"这个新实现对原始顺序的保留被认为是一个实现细节而不应当被依赖(这在将来可能会改变,但我们希望在改变语言规范以强制所有当前和将来的 Python " +"实现都使用保留顺序的语义之前先在几个发布版的语言内部使用这个新的 dict 实现;这也有助于让仍在使用随机迭代顺序的旧版本语言例如 Python 3.5" +" 保持向下兼容性)。" + +#: ../../whatsnew/3.6.rst:600 +msgid "" +"(Contributed by INADA Naoki in :issue:`27350`. Idea `originally suggested by" +" Raymond Hettinger `_.)" +msgstr "" +"(由 INADA Naoki 在 :issue:`27350` 中贡献。 该特性 `最初由 Raymond Hettinger 提议 " +"`_。)" + +#: ../../whatsnew/3.6.rst:608 +msgid "PEP 523: Adding a frame evaluation API to CPython" +msgstr "PEP 523: 向 CPython 添加帧求值 API" + +#: ../../whatsnew/3.6.rst:610 +msgid "" +"While Python provides extensive support to customize how code executes, one " +"place it has not done so is in the evaluation of frame objects. If you " +"wanted some way to intercept frame evaluation in Python there really wasn't " +"any way without directly manipulating function pointers for defined " +"functions." +msgstr "" +"虽然 Python 为自定义代码执行方式提供了广泛的支持,但有一个地方它没有这样做,那就是帧对象的求值。 如果您想在 Python " +"中拦截帧的求值,那么确实没有除了直接操纵自定义函数的函数指针以外的任何办法。" + +#: ../../whatsnew/3.6.rst:616 +msgid "" +":pep:`523` changes this by providing an API to make frame evaluation " +"pluggable at the C level. This will allow for tools such as debuggers and " +"JITs to intercept frame evaluation before the execution of Python code " +"begins. This enables the use of alternative evaluation implementations for " +"Python code, tracking frame evaluation, etc." +msgstr "" +":pep:`523` 通过提供使帧求值在 C 语言层级上可插入的 API 从而改变了这一状况。 这将允许调试器和 JIT 等工具在 Python " +"代码开始执行之前拦截帧求值。 这样就能允许 Python 代码使用替代性求值实现,跟踪帧求值等做法。" + +#: ../../whatsnew/3.6.rst:623 +msgid "" +"This API is not part of the limited C API and is marked as private to signal" +" that usage of this API is expected to be limited and only applicable to " +"very select, low-level use-cases. Semantics of the API will change with " +"Python as necessary." +msgstr "" +"这个 API 并不是受限 C API 的组成部分,它被标记为私有以表明该 API 的使用受到限制并且只适用于非常少的、低层级的用例。 这个 API " +"的语义将根据需要随 Python 的一起发生变化。" + +#: ../../whatsnew/3.6.rst:630 +msgid ":pep:`523` -- Adding a frame evaluation API to CPython" +msgstr ":pep:`523` -- 向 CPython 添加帧求值 API" + +#: ../../whatsnew/3.6.rst:631 +msgid "PEP written by Brett Cannon and Dino Viehland." +msgstr "PEP 由 Brett Cannon 和 Dino Viehland 撰写。" + +#: ../../whatsnew/3.6.rst:637 +msgid "PYTHONMALLOC environment variable" +msgstr "PYTHONMALLOC 环境变量" + +#: ../../whatsnew/3.6.rst:639 +msgid "" +"The new :envvar:`PYTHONMALLOC` environment variable allows setting the " +"Python memory allocators and installing debug hooks." +msgstr "新的 :envvar:`PYTHONMALLOC` 环境变量允许设置 Python 内存分配器并安装调试钩子。" + +#: ../../whatsnew/3.6.rst:642 +msgid "" +"It is now possible to install debug hooks on Python memory allocators on " +"Python compiled in release mode using ``PYTHONMALLOC=debug``. Effects of " +"debug hooks:" +msgstr "" +"现在将可以使用 ``PYTHONMALLOC=debug`` 在以发布模式编译的 Python 上为 Python 内存分配器安装调试钩子。 " +"调试钩子的效果:" + +#: ../../whatsnew/3.6.rst:645 +msgid "Newly allocated memory is filled with the byte ``0xCB``" +msgstr "新分配的内存中填充字节 ``0xCB``" + +#: ../../whatsnew/3.6.rst:646 +msgid "Freed memory is filled with the byte ``0xDB``" +msgstr "释放的内存中填充了字节 ``0xDB``" + +#: ../../whatsnew/3.6.rst:647 +msgid "" +"Detect violations of the Python memory allocator API. For example, " +":c:func:`PyObject_Free` called on a memory block allocated by " +":c:func:`PyMem_Malloc`." +msgstr "" +"检测违反 Python 内存分配器 API 的操作。 例如,:c:func:`PyObject_Free` 在 " +":c:func:`PyMem_Malloc` 所分配的内存块上被调用。" + +#: ../../whatsnew/3.6.rst:650 +msgid "Detect writes before the start of a buffer (buffer underflows)" +msgstr "在缓冲区开始之前检测写操作(缓冲区下溢)" + +#: ../../whatsnew/3.6.rst:651 +msgid "Detect writes after the end of a buffer (buffer overflows)" +msgstr "在缓冲区结束后检测写操作(缓冲区溢出)" + +#: ../../whatsnew/3.6.rst:652 +msgid "" +"Check that the :term:`GIL ` is held when allocator " +"functions of :c:data:`PYMEM_DOMAIN_OBJ` (ex: :c:func:`PyObject_Malloc`) and " +":c:data:`PYMEM_DOMAIN_MEM` (ex: :c:func:`PyMem_Malloc`) domains are called." +msgstr "" +"检测当调用 :c:data:`PYMEM_DOMAIN_OBJ` (如: :c:func:`PyObject_Malloc`) 和 " +":c:data:`PYMEM_DOMAIN_MEM` (如: :c:func:`PyMem_Malloc`) 域的分配器函数时 :term:`GIL " +"` 已被持有。" + +#: ../../whatsnew/3.6.rst:656 +msgid "Checking if the GIL is held is also a new feature of Python 3.6." +msgstr "检查是否保留了 GIL 也是Python 3.6 的新特性。" + +#: ../../whatsnew/3.6.rst:658 +msgid "" +"See the :c:func:`PyMem_SetupDebugHooks` function for debug hooks on Python " +"memory allocators." +msgstr "请参阅 :c:func:`PyMem_SetupDebugHooks` 函数来了解 Python 内存分配器上的调试钩子。" + +#: ../../whatsnew/3.6.rst:661 +msgid "" +"It is now also possible to force the usage of the :c:func:`malloc` allocator" +" of the C library for all Python memory allocations using " +"``PYTHONMALLOC=malloc``. This is helpful when using external memory " +"debuggers like Valgrind on a Python compiled in release mode." +msgstr "" +"现在还可以使用 ``PYTHONMALLOC=malloc`` 为所有的 Python 内存分配强制使用 C 库的 :c:func:`malloc` " +"分配器。 这在以发布模式编译的 Python 上使用外部内存调试器如 Valgrind 时会很有用处。" + +#: ../../whatsnew/3.6.rst:666 +msgid "" +"On error, the debug hooks on Python memory allocators now use the " +":mod:`tracemalloc` module to get the traceback where a memory block was " +"allocated." +msgstr "发生错误时,Python 内存分配器上的调试钩子现在会使用 :mod:`tracemalloc` 模块来获取内存块被分配所在位置上的回溯。" + +#: ../../whatsnew/3.6.rst:670 +msgid "" +"Example of fatal error on buffer overflow using ``python3.6 -X " +"tracemalloc=5`` (store 5 frames in traces)::" +msgstr "使用 ``python3.6 -X tracemalloc=5`` (在回溯中存储 5 帧) 的缓冲区溢出的致命错误示例::" + +#: ../../whatsnew/3.6.rst:707 +msgid "(Contributed by Victor Stinner in :issue:`26516` and :issue:`26564`.)" +msgstr "(由 Victor Stinner 在 :issue:`26516` 和 :issue:`26564` 中贡献。)" + +#: ../../whatsnew/3.6.rst:713 +msgid "DTrace and SystemTap probing support" +msgstr "DTrace 和 SystemTap 探测支持" + +#: ../../whatsnew/3.6.rst:715 +msgid "" +"Python can now be built ``--with-dtrace`` which enables static markers for " +"the following events in the interpreter:" +msgstr "Python 现在可以附带 ``--with-dtrace`` 来构建以便为解释器中的下列事件启用静态标记:" + +#: ../../whatsnew/3.6.rst:718 +msgid "function call/return" +msgstr "函数调用/返回" + +#: ../../whatsnew/3.6.rst:720 +msgid "garbage collection started/finished" +msgstr "垃圾收集开始/完成" + +#: ../../whatsnew/3.6.rst:722 +msgid "line of code executed." +msgstr "执行的代码行。" + +#: ../../whatsnew/3.6.rst:724 +msgid "" +"This can be used to instrument running interpreters in production, without " +"the need to recompile specific debug builds or providing application-" +"specific profiling/debugging code." +msgstr "" + +#: ../../whatsnew/3.6.rst:728 +msgid "More details in :ref:`instrumentation`." +msgstr "更多信息,请参见 :ref:`instrumentation` 。" + +#: ../../whatsnew/3.6.rst:730 +msgid "" +"The current implementation is tested on Linux and macOS. Additional markers" +" may be added in the future." +msgstr "当前的实现已在 Linux 和 macOS 上进行了测试。将来可能会添加其他标记。" + +#: ../../whatsnew/3.6.rst:733 +msgid "" +"(Contributed by Łukasz Langa in :issue:`21590`, based on patches by Jesús " +"Cea Avión, David Malcolm, and Nikhil Benesch.)" +msgstr "" +"(由 Łukasz Langa 在 :issue:`21590` 中贡献,基于 Jesús Cea Avión, David Malcolm 和 " +"Nikhil Benesch 的补丁。)" + +#: ../../whatsnew/3.6.rst:738 +msgid "Other Language Changes" +msgstr "其他语言特性修改" + +#: ../../whatsnew/3.6.rst:740 +msgid "Some smaller changes made to the core Python language are:" +msgstr "对Python 语言核心进行的小改动:" + +#: ../../whatsnew/3.6.rst:742 +msgid "" +"A ``global`` or ``nonlocal`` statement must now textually appear before the " +"first use of the affected name in the same scope. Previously this was a " +":exc:`SyntaxWarning`." +msgstr "" +"现在 ``global`` 或 ``nonlocal`` 语句必须以文本形式出现在同一作用域中首次使用受影响的名称之前。 在之前版本中这只是 " +":exc:`SyntaxWarning`。" + +#: ../../whatsnew/3.6.rst:746 +msgid "" +"It is now possible to set a :ref:`special method ` to ``None``" +" to indicate that the corresponding operation is not available. For example," +" if a class sets :meth:`__iter__` to ``None``, the class is not iterable. " +"(Contributed by Andrew Barnert and Ivan Levkivskyi in :issue:`25958`.)" +msgstr "" +"现在可以将某个 :ref:`特殊方法 ` 设为 ``None`` 来表示相应操作不可用。 举例来说,如果某个类将 " +":meth:`__iter__` 设为 ``None``,则该类就将不可迭代。 (由 Andrew Barnert 和 Ivan Levkivskyi " +"在 :issue:`25958` 中贡献。)" + +#: ../../whatsnew/3.6.rst:752 +msgid "" +"Long sequences of repeated traceback lines are now abbreviated as " +"``\"[Previous line repeated {count} more times]\"`` (see " +":ref:`whatsnew36-traceback` for an example). (Contributed by Emanuel Barry " +"in :issue:`26823`.)" +msgstr "" +"由重复的回溯行组成的长序列现在将被简化为 ``\"[Previous line repeated {count} more times]\"`` " +"(请参阅 :ref:`whatsnew36-traceback` 获取样例)。 (由 Emanuel Barry 在 :issue:`26823` " +"中贡献。)" + +#: ../../whatsnew/3.6.rst:757 +msgid "" +"Import now raises the new exception :exc:`ModuleNotFoundError` (subclass of " +":exc:`ImportError`) when it cannot find a module. Code that currently " +"checks for ImportError (in try-except) will still work. (Contributed by Eric" +" Snow in :issue:`15767`.)" +msgstr "" +"现在导入操作在无法找到模块时将引发新的异常 :exc:`ModuleNotFoundError` (:exc:`ImportError` 的子类)。 " +"目前 (在 try-except 中) 检测 ImportError 的代码仍将有效。 (由 Eric Snow 在 :issue:`15767` " +"中贡献。)" + +#: ../../whatsnew/3.6.rst:762 +msgid "" +"Class methods relying on zero-argument ``super()`` will now work correctly " +"when called from metaclass methods during class creation. (Contributed by " +"Martin Teichmann in :issue:`23722`.)" +msgstr "" +"现在依赖于零参数形式 ``super()`` 的类方法在类创建期间从元类方法调用时将正确地生效。 (由 Martin Teichmann 在 " +":issue:`23722` 中贡献。)" + +#: ../../whatsnew/3.6.rst:768 +msgid "New Modules" +msgstr "新增模块" + +#: ../../whatsnew/3.6.rst:773 +msgid "secrets" +msgstr "secrets" + +#: ../../whatsnew/3.6.rst:775 +msgid "" +"The main purpose of the new :mod:`secrets` module is to provide an obvious " +"way to reliably generate cryptographically strong pseudo-random values " +"suitable for managing secrets, such as account authentication, tokens, and " +"similar." +msgstr "" +"新的 :mod:`secrets` 模块的主要目的是提供一种直观的方式来可靠地生成适用于密码管理的高加密强度的伪随机值,如账户验证、安全凭据等等。" + +#: ../../whatsnew/3.6.rst:781 +msgid "" +"Note that the pseudo-random generators in the :mod:`random` module should " +"*NOT* be used for security purposes. Use :mod:`secrets` on Python 3.6+ and " +":func:`os.urandom()` on Python 3.5 and earlier." +msgstr "" +"注意 :mod:`random` 模块中的伪随机数发生器 *不应* 被用于安全目的。 请在 Python 3.6+ 上使用 :mod:`secrets`" +" 而在 Python 3.5 及更早的版本上使用 :func:`os.urandom()`。" + +#: ../../whatsnew/3.6.rst:787 +msgid ":pep:`506` -- Adding A Secrets Module To The Standard Library" +msgstr ":pep:`506` -- Secrets模块被加入Python标准库" + +#: ../../whatsnew/3.6.rst:788 +msgid "PEP written and implemented by Steven D'Aprano." +msgstr "PEP 由 Steven D'Aprano 撰写并实现。" + +#: ../../whatsnew/3.6.rst:792 +msgid "Improved Modules" +msgstr "改进的模块" + +#: ../../whatsnew/3.6.rst:795 +msgid "array" +msgstr "array" + +#: ../../whatsnew/3.6.rst:797 +msgid "" +"Exhausted iterators of :class:`array.array` will now stay exhausted even if " +"the iterated array is extended. This is consistent with the behavior of " +"other mutable sequences." +msgstr "" +"现在已被耗尽的输出 :class:`array.array` 的迭代器将保持耗尽状态,即使迭代后的数组被扩展时也是如此。 " +"这将与其他可变序列的行为保持一致。" + +#: ../../whatsnew/3.6.rst:801 +msgid "Contributed by Serhiy Storchaka in :issue:`26492`." +msgstr "由 Serhiy Storchaka 在 :issue:`26492` 中贡献。" + +#: ../../whatsnew/3.6.rst:804 +msgid "ast" +msgstr "ast" + +#: ../../whatsnew/3.6.rst:806 +msgid "" +"The new :class:`ast.Constant` AST node has been added. It can be used by " +"external AST optimizers for the purposes of constant folding." +msgstr "新增了 :class:`ast.Constant` AST 节点。 它可被外部 AST 优化器用于常量折叠操作。" + +#: ../../whatsnew/3.6.rst:809 +msgid "Contributed by Victor Stinner in :issue:`26146`." +msgstr "由 Victor Stinner 在 :issue:`26146` 中贡献。" + +#: ../../whatsnew/3.6.rst:813 +msgid "asyncio" +msgstr "asyncio" + +#: ../../whatsnew/3.6.rst:815 +msgid "" +"Starting with Python 3.6 the ``asyncio`` module is no longer provisional and" +" its API is considered stable." +msgstr "从 Python 3.6 开始 ``asyncio`` 模块不再处于暂定状态,其 API 被认为已经稳定。" + +#: ../../whatsnew/3.6.rst:818 +msgid "" +"Notable changes in the :mod:`asyncio` module since Python 3.5.0 (all " +"backported to 3.5.x due to the provisional status):" +msgstr "自 Python 3.5.0 以来 :mod:`asyncio` 模块中值得注意的变化(由于暂定状态所有变化都已反向移植到 3.5.x):" + +#: ../../whatsnew/3.6.rst:821 +msgid "" +"The :func:`~asyncio.get_event_loop` function has been changed to always " +"return the currently running loop when called from coroutines and callbacks." +" (Contributed by Yury Selivanov in :issue:`28613`.)" +msgstr "" +":func:`~asyncio.get_event_loop` 函数已更改为当在例程和回调中被调用时始终返回当前正在运行的循环。(由 Yury " +"Selivanov 在 :issue:`28613` 中贡献。)" + +#: ../../whatsnew/3.6.rst:826 +msgid "" +"The :func:`~asyncio.ensure_future` function and all functions that use it, " +"such as :meth:`loop.run_until_complete() `," +" now accept all kinds of :term:`awaitable objects `. (Contributed" +" by Yury Selivanov.)" +msgstr "" +":func:`~asyncio.ensure_future` 函数以及所有用到它的函数,比如 " +":meth:`loop.run_until_complete() " +"`,现在将接受所有种类的 :term:`可等待对象 `。 (由 " +"Yury Selivanov 贡献。)" + +#: ../../whatsnew/3.6.rst:831 +msgid "" +"New :func:`~asyncio.run_coroutine_threadsafe` function to submit coroutines " +"to event loops from other threads. (Contributed by Vincent Michel.)" +msgstr "" +"新增 :func:`~asyncio.run_coroutine_threadsafe` 函数用于从其他线程向事件循环提交协程。(由 Vincent " +"Michel 贡献。)" + +#: ../../whatsnew/3.6.rst:835 +msgid "" +"New :meth:`Transport.is_closing() ` method" +" to check if the transport is closing or closed. (Contributed by Yury " +"Selivanov.)" +msgstr "" +"新增 :meth:`Transport.is_closing() ` " +"方法用于检查传输是否正在关闭或已经关闭。 (由 Yury Selivanov 贡献。)" + +#: ../../whatsnew/3.6.rst:839 +msgid "" +"The :meth:`loop.create_server() ` method can now" +" accept a list of hosts. (Contributed by Yann Sionneau.)" +msgstr "" +":meth:`loop.create_server() ` 方法现在可以接受一个主机列表。 (由" +" Yann Sionneau 贡献。)" + +#: ../../whatsnew/3.6.rst:843 +msgid "" +"New :meth:`loop.create_future() ` method to " +"create Future objects. This allows alternative event loop implementations, " +"such as `uvloop `_, to provide a " +"faster :class:`asyncio.Future` implementation. (Contributed by Yury " +"Selivanov in :issue:`27041`.)" +msgstr "" +"新增 :meth:`loop.create_future() ` 方法用来创建 Future " +"对象。 这允许替代性的事件循环实现,比如 `uvloop " +"`_,以提供更快速的 :class:`asyncio.Future` 实现。" +" (由 Yury Selivanov 在 :issue:`27041` 中贡献。)" + +#: ../../whatsnew/3.6.rst:850 +msgid "" +"New :meth:`loop.get_exception_handler() " +"` method to get the current exception " +"handler. (Contributed by Yury Selivanov in :issue:`27040`.)" +msgstr "" +"新增 :meth:`loop.get_exception_handler() `" +" 方法用于获取当前异常处理句柄。 (由 Yury Selivanov 在 :issue:`27040` 中贡献。)" + +#: ../../whatsnew/3.6.rst:854 +msgid "" +"New :meth:`StreamReader.readuntil() ` method" +" to read data from the stream until a separator bytes sequence appears. " +"(Contributed by Mark Korenberg.)" +msgstr "" +"新增 :meth:`StreamReader.readuntil() ` " +"方法用于从流读取数据直到出现作为分隔符的字节序列。 (由 Mark Korenberg 贡献。)" + +#: ../../whatsnew/3.6.rst:859 +msgid "" +"The performance of :meth:`StreamReader.readexactly() " +"` has been improved. (Contributed by Mark " +"Korenberg in :issue:`28370`.)" +msgstr "" +":meth:`StreamReader.readexactly() ` " +"的性能已获得提升。 (由 Mark Korenberg 在 :issue:`28370` 中贡献。)" + +#: ../../whatsnew/3.6.rst:863 +msgid "" +"The :meth:`loop.getaddrinfo() ` method is " +"optimized to avoid calling the system ``getaddrinfo`` function if the " +"address is already resolved. (Contributed by A. Jesse Jiryu Davis.)" +msgstr "" +":meth:`loop.getaddrinfo() ` 方法已获得优化已避免当地址已被解析时调用系统" +" ``getaddrinfo`` 函数。 (由 A. Jesse Jiryu Davis 贡献。)" + +#: ../../whatsnew/3.6.rst:868 +msgid "" +"The :meth:`loop.stop() ` method has been changed to stop " +"the loop immediately after the current iteration. Any new callbacks " +"scheduled as a result of the last iteration will be discarded. (Contributed " +"by Guido van Rossum in :issue:`25593`.)" +msgstr "" +":meth:`loop.stop() ` 方法已被更改为在当前迭代之后立即停止循环。 " +"任何作为上次迭代的结果被加入计划任务的新回调都将被丢弃。 (由 Guido van Rossum 在 :issue:`25593` 中贡献。)" + +#: ../../whatsnew/3.6.rst:874 +msgid "" +":meth:`Future.set_exception ` will now" +" raise :exc:`TypeError` when passed an instance of the :exc:`StopIteration` " +"exception. (Contributed by Chris Angelico in :issue:`26221`.)" +msgstr "" +"现在 :meth:`Future.set_exception ` 在传入一个" +" :exc:`StopIteration` 异常的实例时将引发 :exc:`TypeError`。 (由 Chris Angelico 在 " +":issue:`26221` 中贡献。)" + +#: ../../whatsnew/3.6.rst:879 +msgid "" +"New :meth:`loop.connect_accepted_socket() " +"` method to be used by servers that " +"accept connections outside of asyncio, but that use asyncio to handle them. " +"(Contributed by Jim Fulton in :issue:`27392`.)" +msgstr "" +"新增 :meth:`loop.connect_accepted_socket() " +"` 方法供接受 asyncio 以外的连接,但使用 asyncio " +"来处理它们的服务器使用。 (由 Jim Fulton 在 :issue:`27392` 中贡献。)" + +#: ../../whatsnew/3.6.rst:884 +msgid "" +"``TCP_NODELAY`` flag is now set for all TCP transports by default. " +"(Contributed by Yury Selivanov in :issue:`27456`.)" +msgstr "" +"现在 ``TCP_NODELAY`` 旗标将默认针对所有 TCP 传输进行设置。 (由 Yury Selivanov 在 :issue:`27456` " +"中贡献。)" + +#: ../../whatsnew/3.6.rst:887 +msgid "" +"New :meth:`loop.shutdown_asyncgens() ` to " +"properly close pending asynchronous generators before closing the loop. " +"(Contributed by Yury Selivanov in :issue:`28003`.)" +msgstr "" +"新增 :meth:`loop.shutdown_asyncgens() ` " +"用来在结束循环之前正确地关闭现有的异步生成器。 (由 Yury Selivanov 在 :issue:`28003` 中贡献。)" + +#: ../../whatsnew/3.6.rst:892 +msgid "" +":class:`Future ` and :class:`Task ` classes " +"now have an optimized C implementation which makes asyncio code up to 30% " +"faster. (Contributed by Yury Selivanov and INADA Naoki in :issue:`26081` and" +" :issue:`28544`.)" +msgstr "" +":class:`Future ` 和 :class:`Task ` 类现在已有经优化过的 C" +" 实现使得 asyncio 代码加速至多 30%。 (由 Yury Selivanov 和 INADA Naoki 在 :issue:`26081` 和" +" :issue:`28544` 中贡献。)" + +#: ../../whatsnew/3.6.rst:900 +msgid "binascii" +msgstr "binascii" + +#: ../../whatsnew/3.6.rst:902 +msgid "" +"The :func:`~binascii.b2a_base64` function now accepts an optional *newline* " +"keyword argument to control whether the newline character is appended to the" +" return value. (Contributed by Victor Stinner in :issue:`25357`.)" +msgstr "" +":func:`~binascii.b2a_base64` 函数现在接受可选的 *newline* 关键字参数用来控制是否要在返回值中添加换行符。 (由 " +"Victor Stinner 在 :issue:`25357` 中贡献。)" + +#: ../../whatsnew/3.6.rst:909 +msgid "cmath" +msgstr "cmath" + +#: ../../whatsnew/3.6.rst:911 +msgid "" +"The new :const:`cmath.tau` (*τ*) constant has been added. (Contributed by " +"Lisa Roach in :issue:`12345`, see :pep:`628` for details.)" +msgstr "" +"新增 :const:`cmath.tau` (*τ*) 常量。 (由 Lisa Roach 在 :issue:`12345` 中贡献,详情见 " +":pep:`628`。)" + +#: ../../whatsnew/3.6.rst:914 +msgid "" +"New constants: :const:`cmath.inf` and :const:`cmath.nan` to match " +":const:`math.inf` and :const:`math.nan`, and also :const:`cmath.infj` and " +":const:`cmath.nanj` to match the format used by complex repr. (Contributed " +"by Mark Dickinson in :issue:`23229`.)" +msgstr "" +"新增常量: :const:`cmath.inf` 和 :const:`cmath.nan` 用于匹配 :const:`math.inf` 和 " +":const:`math.nan`,以及 :const:`cmath.infj` 和 :const:`cmath.nanj` 用于匹配由 complex" +" 的 repr 所使用的格式。 (由 Mark Dickinson 在 :issue:`23229` 中贡献。)" + +#: ../../whatsnew/3.6.rst:921 +msgid "collections" +msgstr "collections" + +#: ../../whatsnew/3.6.rst:923 +msgid "" +"The new :class:`~collections.abc.Collection` abstract base class has been " +"added to represent sized iterable container classes. (Contributed by Ivan " +"Levkivskyi, docs by Neil Girdhar in :issue:`27598`.)" +msgstr "" +"添加了新的 :class:`~collections.abc.Collection` 抽象基类用于表示有具体大小的可迭代容器类。 (由 Ivan " +"Levkivskyi 在 :issue:`27598` 中贡献并由 Neil Girdhar 撰写文档。)" + +#: ../../whatsnew/3.6.rst:927 +msgid "" +"The new :class:`~collections.abc.Reversible` abstract base class represents " +"iterable classes that also provide the :meth:`__reversed__` method. " +"(Contributed by Ivan Levkivskyi in :issue:`25987`.)" +msgstr "" +"添加了新的 :class:`~collections.abc.Reversible` 抽象基类用于表示同时提供 :meth:`__reversed__`" +" 方法的可迭代类。 (由 Ivan Levkivskyi 在 :issue:`25987` 中贡献。)" + +#: ../../whatsnew/3.6.rst:931 +msgid "" +"The new :class:`~collections.abc.AsyncGenerator` abstract base class " +"represents asynchronous generators. (Contributed by Yury Selivanov in " +":issue:`28720`.)" +msgstr "" +"新增代表异步生成器的 :class:`~collections.abc.AsyncGenerator` 抽象基类。 (由 Yury Selivanov " +"在 :issue:`28720` 中贡献。)" + +#: ../../whatsnew/3.6.rst:935 +msgid "" +"The :func:`~collections.namedtuple` function now accepts an optional keyword" +" argument *module*, which, when specified, is used for the ``__module__`` " +"attribute of the returned named tuple class. (Contributed by Raymond " +"Hettinger in :issue:`17941`.)" +msgstr "" +":func:`~collections.namedtuple` 函数现在接受可选的关键字参数 " +"*module*,当指定该参数时,它将被用作所返回的具名元组类的 ``__module__`` 属性。 (由 Raymond Hettinger 在 " +":issue:`17941` 中贡献。)" + +#: ../../whatsnew/3.6.rst:940 ../../whatsnew/3.6.rst:2278 +msgid "" +"The *verbose* and *rename* arguments for :func:`~collections.namedtuple` are" +" now keyword-only. (Contributed by Raymond Hettinger in :issue:`25628`.)" +msgstr "" +":func:`~collections.namedtuple` 的 *verbose* 和 *rename* 参数现在是仅限关键字参数。 (由 " +"Raymond Hettinger 在 :issue:`25628` 中贡献。)" + +#: ../../whatsnew/3.6.rst:944 +msgid "" +"Recursive :class:`collections.deque` instances can now be pickled. " +"(Contributed by Serhiy Storchaka in :issue:`26482`.)" +msgstr "" +"递归的 :class:`collections.deque` 实例现在可以被 pickle。 (由 Serhiy Storchaka 在 " +":issue:`26482` 中贡献。)" + +#: ../../whatsnew/3.6.rst:949 +msgid "concurrent.futures" +msgstr "concurrent.futures" + +#: ../../whatsnew/3.6.rst:951 +msgid "" +"The :class:`ThreadPoolExecutor ` " +"class constructor now accepts an optional *thread_name_prefix* argument to " +"make it possible to customize the names of the threads created by the pool. " +"(Contributed by Gregory P. Smith in :issue:`27664`.)" +msgstr "" +":class:`ThreadPoolExecutor ` " +"类构造器现在接受可选的 *thread_name_prefix* 参数以便能够自定义由线程池所创建的线程的名称。 (由 Gregory P. Smith" +" 在 :issue:`27664` 中贡献。)" + +#: ../../whatsnew/3.6.rst:959 +msgid "contextlib" +msgstr "contextlib" + +#: ../../whatsnew/3.6.rst:961 +msgid "" +"The :class:`contextlib.AbstractContextManager` class has been added to " +"provide an abstract base class for context managers. It provides a sensible" +" default implementation for `__enter__()` which returns ``self`` and leaves " +"`__exit__()` an abstract method. A matching class has been added to the " +":mod:`typing` module as :class:`typing.ContextManager`. (Contributed by " +"Brett Cannon in :issue:`25609`.)" +msgstr "" + +#: ../../whatsnew/3.6.rst:971 +msgid "datetime" +msgstr "datetime" + +#: ../../whatsnew/3.6.rst:973 +msgid "" +"The :class:`~datetime.datetime` and :class:`~datetime.time` classes have the" +" new :attr:`~time.fold` attribute used to disambiguate local time when " +"necessary. Many functions in the :mod:`datetime` have been updated to " +"support local time disambiguation. See :ref:`Local Time Disambiguation " +"` section for more information. (Contributed by Alexander" +" Belopolsky in :issue:`24773`.)" +msgstr "" +":class:`~datetime.datetime` 和 :class:`~datetime.time` 类新增了 " +":attr:`~time.fold` 属性用来在必要时消除本地时间的歧义。 在 :mod:`datetime` " +"中的许多函数已被更新为支持本地时间的消除歧义。 请参阅 :ref:`本地时间消歧义 ` 一节了解更多信息。 (由 " +"Alexander Belopolsky 在 :issue:`24773` 中贡献。)" + +#: ../../whatsnew/3.6.rst:981 +msgid "" +"The :meth:`datetime.strftime() ` and " +":meth:`date.strftime() ` methods now support ISO " +"8601 date directives ``%G``, ``%u`` and ``%V``. (Contributed by Ashley " +"Anderson in :issue:`12006`.)" +msgstr "" +"现在 :meth:`datetime.strftime() ` 和 " +":meth:`date.strftime() ` 方法将支持 ISO 8601 日期指令符 " +"``%G``, ``%u`` 和 ``%V``。 (由 Ashley Anderson 在 :issue:`12006` 中贡献。).)" + +#: ../../whatsnew/3.6.rst:986 +msgid "" +"The :func:`datetime.isoformat() ` function now " +"accepts an optional *timespec* argument that specifies the number of " +"additional components of the time value to include. (Contributed by " +"Alessandro Cucci and Alexander Belopolsky in :issue:`19475`.)" +msgstr "" +":func:`datetime.isoformat() ` 函数现在接受可选的 " +"*timespec* 参数用来指定时间值要包括的额外组件数量。 (由 Alessandro Cucci 和 Alexander Belopolsky 在" +" :issue:`19475` 中贡献。)" + +#: ../../whatsnew/3.6.rst:991 +msgid "" +"The :meth:`datetime.combine() ` now accepts an " +"optional *tzinfo* argument. (Contributed by Alexander Belopolsky in " +":issue:`27661`.)" +msgstr "" +":meth:`datetime.combine() ` 现在接受可选的 *tzinfo* 参数。 " +"(由 Alexander Belopolsky 在 :issue:`27661` 中贡献。)" + +#: ../../whatsnew/3.6.rst:997 +msgid "decimal" +msgstr "decimal" + +#: ../../whatsnew/3.6.rst:999 +msgid "" +"New :meth:`Decimal.as_integer_ratio() ` " +"method that returns a pair ``(n, d)`` of integers that represent the given " +":class:`~decimal.Decimal` instance as a fraction, in lowest terms and with a" +" positive denominator::" +msgstr "" +"新增 :meth:`Decimal.as_integer_ratio() ` " +"方法,它返回一对整数 ``(n, d)`` 将给定的 :class:`~decimal.Decimal` 实例表示为一个最简形式且分母为正值的分数::" + +#: ../../whatsnew/3.6.rst:1007 +msgid "(Contributed by Stefan Krah amd Mark Dickinson in :issue:`25928`.)" +msgstr "(由 Stefan Krah 和 Mark Dickinson 在 :issue:`25928` 中贡献。)" + +#: ../../whatsnew/3.6.rst:1012 ../../whatsnew/3.6.rst:1986 +msgid "distutils" +msgstr "distutils" + +#: ../../whatsnew/3.6.rst:1014 +msgid "" +"The ``default_format`` attribute has been removed from " +":class:`distutils.command.sdist.sdist` and the ``formats`` attribute " +"defaults to ``['gztar']``. Although not anticipated, any code relying on the" +" presence of ``default_format`` may need to be adapted. See :issue:`27819` " +"for more details." +msgstr "" + +#: ../../whatsnew/3.6.rst:1022 +msgid "email" +msgstr "email" + +#: ../../whatsnew/3.6.rst:1024 +msgid "" +"The new email API, enabled via the *policy* keyword to various constructors," +" is no longer provisional. The :mod:`email` documentation has been " +"reorganized and rewritten to focus on the new API, while retaining the old " +"documentation for the legacy API. (Contributed by R. David Murray in " +":issue:`24277`.)" +msgstr "" +"通过多个构造器的 *policy* 关键字来启用的新 email API 已不再为暂定状态。 :mod:`email` " +"文档已被重新组织并重新撰写以聚集新 API,同时保留旧式 API 的原有文档。 (由 R. David Murray 在 :issue:`24277` " +"中贡献。)" + +#: ../../whatsnew/3.6.rst:1029 +msgid "" +"The :mod:`email.mime` classes now all accept an optional *policy* keyword. " +"(Contributed by Berker Peksag in :issue:`27331`.)" +msgstr "" +":mod:`email.mime` 中的类现在都接受可选的 *policy* 关键字参数。 (由 Berker Peksag 在 " +":issue:`27331` 中贡献。).)" + +#: ../../whatsnew/3.6.rst:1032 +msgid "" +"The :class:`~email.generator.DecodedGenerator` now supports the *policy* " +"keyword." +msgstr ":class:`~email.generator.DecodedGenerator` 现在支持 *policy* 关键字。" + +#: ../../whatsnew/3.6.rst:1035 +msgid "" +"There is a new :mod:`~email.policy` attribute, " +":attr:`~email.policy.Policy.message_factory`, that controls what class is " +"used by default when the parser creates new message objects. For the " +":attr:`email.policy.compat32` policy this is " +":class:`~email.message.Message`, for the new policies it is " +":class:`~email.message.EmailMessage`. (Contributed by R. David Murray in " +":issue:`20476`.)" +msgstr "" +"新增 :mod:`~email.policy` 属性,:attr:`~email.policy.Policy.message_factory` " +"控制当解析器新建消息对象时默认要使用的类。 对于 :attr:`email.policy.compat32` 策略来说将为 " +":class:`~email.message.Message`,对于新策略来说将为 " +":class:`~email.message.EmailMessage`。 (由 R. David Murray 在 :issue:`20476` " +"中贡献。)" + +#: ../../whatsnew/3.6.rst:1044 +msgid "encodings" +msgstr "encodings" + +#: ../../whatsnew/3.6.rst:1046 +msgid "" +"On Windows, added the ``'oem'`` encoding to use ``CP_OEMCP``, and the " +"``'ansi'`` alias for the existing ``'mbcs'`` encoding, which uses the " +"``CP_ACP`` code page. (Contributed by Steve Dower in :issue:`27959`.)" +msgstr "" +"在 Windows 上,增加了 ``'oem'`` 编码格式用于 ``CP_OEMCP``,以及 ``'ansi'`` 别名用于现有的 " +"``'mbcs'`` 编码格式,它使用 ``CP_ACP`` 代码页。 (由 Steve Dower 在 :issue:`27959` 中贡献。)" + +#: ../../whatsnew/3.6.rst:1052 +msgid "enum" +msgstr "enum" + +#: ../../whatsnew/3.6.rst:1054 +msgid "" +"Two new enumeration base classes have been added to the :mod:`enum` module: " +":class:`~enum.Flag` and :class:`~enum.IntFlags`. Both are used to define " +"constants that can be combined using the bitwise operators. (Contributed by " +"Ethan Furman in :issue:`23591`.)" +msgstr "" +"在 :mod:`enum` 模块中新增了两个枚举基类: :class:`~enum.Flag` 和 :class:`~enum.IntFlags`。 " +"两者均被用于定义可使用按位运算符进行组合的常量。 (由 Ethan Furman 在 :issue:`23591` 中贡献。)" + +#: ../../whatsnew/3.6.rst:1059 +msgid "" +"Many standard library modules have been updated to use the " +":class:`~enum.IntFlags` class for their constants." +msgstr "许多标准库模块已被更新以使用 :class:`~enum.IntFlags` 类作为其常量。" + +#: ../../whatsnew/3.6.rst:1062 +msgid "" +"The new :class:`enum.auto` value can be used to assign values to enum " +"members automatically::" +msgstr "新增的 :class:`enum.auto` 值可被用于自动为枚举成员赋值::" + +#: ../../whatsnew/3.6.rst:1076 +msgid "faulthandler" +msgstr "faulthandler" + +#: ../../whatsnew/3.6.rst:1078 +msgid "" +"On Windows, the :mod:`faulthandler` module now installs a handler for " +"Windows exceptions: see :func:`faulthandler.enable`. (Contributed by Victor " +"Stinner in :issue:`23848`.)" +msgstr "" +"在 Windows 上,:mod:`faulthandler` 模块现在会为 Windows 异常安装处理句柄:参见 " +":func:`faulthandler.enable`。 (由 Victor Stinner 在 :issue:`23848` 中贡献。)" + +#: ../../whatsnew/3.6.rst:1084 +msgid "fileinput" +msgstr "fileinput" + +#: ../../whatsnew/3.6.rst:1086 +msgid "" +":func:`~fileinput.hook_encoded` now supports the *errors* argument. " +"(Contributed by Joseph Hackman in :issue:`25788`.)" +msgstr "" +":func:`~fileinput.hook_encoded` 现在支持 *errors* 参数。 (由 Joseph Hackman 在 " +":issue:`25788` 中贡献。)" + +#: ../../whatsnew/3.6.rst:1091 +msgid "hashlib" +msgstr "hashlib" + +#: ../../whatsnew/3.6.rst:1093 +msgid "" +":mod:`hashlib` supports OpenSSL 1.1.0. The minimum recommend version is " +"1.0.2. (Contributed by Christian Heimes in :issue:`26470`.)" +msgstr "" +":mod:`hashlib` 已支持 OpenSSL 1.1.0。 最低的建议版本为 1.0.2。 (由 Christian Heimes 在 " +":issue:`26470` 中贡献。)" + +#: ../../whatsnew/3.6.rst:1096 +msgid "" +"BLAKE2 hash functions were added to the module. :func:`~hashlib.blake2b` and" +" :func:`~hashlib.blake2s` are always available and support the full feature " +"set of BLAKE2. (Contributed by Christian Heimes in :issue:`26798` based on " +"code by Dmitry Chestnykh and Samuel Neves. Documentation written by Dmitry " +"Chestnykh.)" +msgstr "" +"本模块增加了 BLAKE2 哈希函数。 :func:`~hashlib.blake2b` 和 :func:`~hashlib.blake2s` " +"将始终可用并支持 BLAKE2 的完整特性集。 (由 Christian Heimes 在 :issue:`26798` 中基于 Dmitry " +"Chestnykh 和 Samuel Neves 的代码贡献。 文档由 Dmitry Chestnykh 撰写。)" + +#: ../../whatsnew/3.6.rst:1102 +msgid "" +"The SHA-3 hash functions :func:`~hashlib.sha3_224`, " +":func:`~hashlib.sha3_256`, :func:`~hashlib.sha3_384`, " +":func:`~hashlib.sha3_512`, and SHAKE hash functions " +":func:`~hashlib.shake_128` and :func:`~hashlib.shake_256` were added. " +"(Contributed by Christian Heimes in :issue:`16113`. Keccak Code Package by " +"Guido Bertoni, Joan Daemen, Michaël Peeters, Gilles Van Assche, and Ronny " +"Van Keer.)" +msgstr "" +"增加了 SHA-3 哈希函数 :func:`~hashlib.sha3_224`, :func:`~hashlib.sha3_256`, " +":func:`~hashlib.sha3_384`, :func:`~hashlib.sha3_512`,以及 SHAKE 哈希函数 " +":func:`~hashlib.shake_128` 和 :func:`~hashlib.shake_256`。 (由 Christian Heimes" +" 在 :issue:`16113` 中贡献。 Keccak 代码包由 Guido Bertoni, Joan Daemen, Michaël " +"Peeters, Gilles Van Assche 和 Ronny Van Keer 编写。)" + +#: ../../whatsnew/3.6.rst:1109 +msgid "" +"The password-based key derivation function :func:`~hashlib.scrypt` is now " +"available with OpenSSL 1.1.0 and newer. (Contributed by Christian Heimes in " +":issue:`27928`.)" +msgstr "" +"基于密码的密钥推导函数 :func:`~hashlib.scrypt` 现可用于 OpenSSL 1.1.0 及更新版本。 (由 Christian " +"Heimes 在 :issue:`27928` 中贡献。)" + +#: ../../whatsnew/3.6.rst:1114 +msgid "http.client" +msgstr "http.client" + +#: ../../whatsnew/3.6.rst:1116 +msgid "" +":meth:`HTTPConnection.request() ` and " +":meth:`~http.client.HTTPConnection.endheaders` both now support chunked " +"encoding request bodies. (Contributed by Demian Brecht and Rolf Krahl in " +":issue:`12319`.)" +msgstr "" +":meth:`HTTPConnection.request() ` 和 " +":meth:`~http.client.HTTPConnection.endheaders` 现在都支持分块编码格式请求体。 (由 Demian " +"Brecht 和 Rolf Krahl 在 :issue:`12319` 中贡献。)" + +#: ../../whatsnew/3.6.rst:1123 +msgid "idlelib and IDLE" +msgstr "idlelib 与 IDLE" + +#: ../../whatsnew/3.6.rst:1125 +msgid "" +"The idlelib package is being modernized and refactored to make IDLE look and" +" work better and to make the code easier to understand, test, and improve. " +"Part of making IDLE look better, especially on Linux and Mac, is using ttk " +"widgets, mostly in the dialogs. As a result, IDLE no longer runs with " +"tcl/tk 8.4. It now requires tcl/tk 8.5 or 8.6. We recommend running the " +"latest release of either." +msgstr "" +"对 idlelib 包执行现代化和重构以使 IDLE 的外观和功能更好并使代码更易于理解、测试和改进。 让 IDLE 外观更好的部分工作,尤其是在 " +"Linux 和 Mac 上,在于使用了 ttk 部件,主要是在对话框中。 因此,IDLE 不再使用 tcl/tk 8.4。 现在它需要 tcl/tk " +"8.5 或 8.6。 我们建议运行这两个软件的最新发布版。" + +#: ../../whatsnew/3.6.rst:1132 +msgid "" +"'Modernizing' includes renaming and consolidation of idlelib modules. The " +"renaming of files with partial uppercase names is similar to the renaming " +"of, for instance, Tkinter and TkFont to tkinter and tkinter.font in 3.0. As" +" a result, imports of idlelib files that worked in 3.5 will usually not work" +" in 3.6. At least a module name change will be needed (see " +"idlelib/README.txt), sometimes more. (Name changes contributed by Al " +"Swiegart and Terry Reedy in :issue:`24225`. Most idlelib patches since have" +" been and will be part of the process.)" +msgstr "" +"‘现代化’包括 idlelib 模块的重命名与合并。 对具有部分大写名称的文件的重命名类似于 3.0 中将 Tkinter 和 TkFont 重命名为 " +"tkinter 和 tkinter.font。 因此,在 3.5 中可用的 idlelib 文件导入在 3.6 中通常将不再可用。 " +"至少需要修改模块名称(参见 idlelib/README.txt),有时还需要更多修改。 (名称更改由 Al Swiegart 和 Terry " +"Reedy 在 :issue:`24225` 中贡献。 大多数 idlelib 补丁都是已经是或即将纳入该处理过程。)" + +#: ../../whatsnew/3.6.rst:1141 +msgid "" +"In compensation, the eventual result with be that some idlelib classes will " +"be easier to use, with better APIs and docstrings explaining them. " +"Additional useful information will be added to idlelib when available." +msgstr "" +"作为补偿,最终的结果是一些 idlelib 类将更会易于使用,并有更好的 API 和文档字符串加以说明。 附加的有用信息准备好后将被添加到 " +"idlelib 中。" + +#: ../../whatsnew/3.6.rst:1145 +msgid "New in 3.6.2:" +msgstr "在 3.6.2 中新增:" + +#: ../../whatsnew/3.6.rst:1147 +msgid "" +"Multiple fixes for autocompletion. (Contributed by Louie Lu in " +":issue:`15786`.)" +msgstr "多个对自动补全的修正。 (由 Louie Lu 在 :issue:`15786` 中贡献。)" + +#: ../../whatsnew/3.6.rst:1149 +msgid "New in 3.6.3:" +msgstr "在 3.6.3 中新增:" + +#: ../../whatsnew/3.6.rst:1151 +msgid "" +"Module Browser (on the File menu, formerly called Class Browser), now " +"displays nested functions and classes in addition to top-level functions and" +" classes. (Contributed by Guilherme Polo, Cheryl Sabella, and Terry Jan " +"Reedy in :issue:`1612262`.)" +msgstr "" +"Module Browser (在 File 菜单中,之前称为 Class Browser) 现在会在最高层级函数和类之外显示嵌套的函数和类。 (由 " +"Guilherme Polo, Cheryl Sabella 和 Terry Jan Reedy 在 :issue:`1612262` 中贡献。)" + +#: ../../whatsnew/3.6.rst:1157 +msgid "" +"The IDLE features formerly implemented as extensions have been reimplemented" +" as normal features. Their settings have been moved from the Extensions tab" +" to other dialog tabs. (Contributed by Charles Wohlganger and Terry Jan " +"Reedy in :issue:`27099`.)" +msgstr "" +"之前以扩展形式实现的 IDLE 特性已作为正常特性重新实现。 它们的设置已从 Extensions 选项卡移至其他对话框选项卡。 (由 Charles " +"Wohlganger 和 Terry Jan Reedy 在 :issue:`27099` 中实现。)" + +#: ../../whatsnew/3.6.rst:1162 +msgid "" +"The Settings dialog (Options, Configure IDLE) has been partly rewritten to " +"improve both appearance and function. (Contributed by Cheryl Sabella and " +"Terry Jan Reedy in multiple issues.)" +msgstr "" +"Settings 对话框 (Options 中的 Configure IDLE) 已经被部分重写以改进外观和功能。 (由 Cheryl Sabella " +"和 Terry Jan Reedy 在多个问题项中贡献。)" + +#: ../../whatsnew/3.6.rst:1166 +msgid "New in 3.6.4:" +msgstr "在 3.6.4 中新增:" + +#: ../../whatsnew/3.6.rst:1168 +msgid "" +"The font sample now includes a selection of non-Latin characters so that " +"users can better see the effect of selecting a particular font. (Contributed" +" by Terry Jan Reedy in :issue:`13802`.) The sample can be edited to include " +"other characters. (Contributed by Serhiy Storchaka in :issue:`31860`.)" +msgstr "" +"字体样本现在包括一组非拉丁字符以便用户能更好地查看所选特定字体的效果。 (由 Terry Jan Reedy 在 :issue:`13802` " +"中贡献。) 样本可以被修改以包括其他字符。 (由 Serhiy Storchaka 在 :issue:`31860` 中贡献。)" + +#: ../../whatsnew/3.6.rst:1174 +msgid "New in 3.6.6:" +msgstr "在 3.6.6 中新增:" + +#: ../../whatsnew/3.6.rst:1176 +msgid "" +"Editor code context option revised. Box displays all context lines up to " +"maxlines. Clicking on a context line jumps the editor to that line. " +"Context colors for custom themes is added to Highlights tab of Settings " +"dialog. (Contributed by Cheryl Sabella and Terry Jan Reedy in " +":issue:`33642`, :issue:`33768`, and :issue:`33679`.)" +msgstr "" +"编辑器代码上下文选项已经过修改。 Box 会显示所有上下文行直到最大行数。 点击一个上下文行会使编辑器跳转到该行。 自定义主题的上下文颜色已添加到 " +"Settings 对话框的 Highlights 选项卡。 (由 Cheryl Sabella 和 Terry Jan Reedy 在 " +":issue:`33642`, :issue:`33768` 和 :issue:`33679` 中贡献。)" + +#: ../../whatsnew/3.6.rst:1182 +msgid "" +"On Windows, a new API call tells Windows that tk scales for DPI. On Windows " +"8.1+ or 10, with DPI compatibility properties of the Python binary " +"unchanged, and a monitor resolution greater than 96 DPI, this should make " +"text and lines sharper. It should otherwise have no effect. (Contributed by" +" Terry Jan Reedy in :issue:`33656`.)" +msgstr "" +"在 Windows 上,会有新的 API 调用将 tk 对 DPI 的调整告知 Windows。 在 Windows 8.1+ 或 10 上,如果 " +"Python 二进制码的 DPI 兼容属性未改变,并且监视器分辨率大于 96 DPI,这应该会令文本和线条更清晰。 否则的话它应该不造成影响。 (由 " +"Terry Jan Reedy 在 :issue:`33656` 中贡献。)" + +#: ../../whatsnew/3.6.rst:1188 +msgid "New in 3.6.7:" +msgstr "在 3.6.7 中新增:" + +#: ../../whatsnew/3.6.rst:1190 +msgid "" +"Output over N lines (50 by default) is squeezed down to a button. N can be " +"changed in the PyShell section of the General page of the Settings dialog. " +"Fewer, but possibly extra long, lines can be squeezed by right clicking on " +"the output. Squeezed output can be expanded in place by double-clicking the" +" button or into the clipboard or a separate window by right-clicking the " +"button. (Contributed by Tal Einat in :issue:`1529353`.)" +msgstr "" +"超过 N 行(默认值为 50)的输出将被折叠为一个按钮。 N 可以在 Settings 对话框的 General 页的 PyShell 部分中进行修改。" +" 数量较少但是超长的行可以通过在输出上右击来折叠。 被折叠的输出可通过双击按钮来展开,或是通过右击按钮来放入剪贴板或是单独的窗口。 (由 Tal " +"Einat 在 :issue:`1529353` 中贡献。)" + +#: ../../whatsnew/3.6.rst:1199 ../../whatsnew/3.6.rst:2003 +msgid "importlib" +msgstr "importlib" + +#: ../../whatsnew/3.6.rst:1201 +msgid "" +"Import now raises the new exception :exc:`ModuleNotFoundError` (subclass of " +":exc:`ImportError`) when it cannot find a module. Code that current checks " +"for ``ImportError`` (in try-except) will still work. (Contributed by Eric " +"Snow in :issue:`15767`.)" +msgstr "" +"现在导入操作在无法找到模块时将引发新的异常 :exc:`ModuleNotFoundError` (:exc:`ImportError` 的子类)。 " +"目前 (在 try-except 中) 检测 ``ImportError`` 的代码仍将有效。 (由 Eric Snow 在 " +":issue:`15767` 中贡献。)" + +#: ../../whatsnew/3.6.rst:1206 +msgid "" +":class:`importlib.util.LazyLoader` now calls " +":meth:`~importlib.abc.Loader.create_module` on the wrapped loader, removing " +"the restriction that :class:`importlib.machinery.BuiltinImporter` and " +":class:`importlib.machinery.ExtensionFileLoader` couldn't be used with " +":class:`importlib.util.LazyLoader`." +msgstr "" +":class:`importlib.util.LazyLoader` 现在将调用被包装的加载器上的 " +":meth:`~importlib.abc.Loader.create_module`,移除了 " +":class:`importlib.machinery.BuiltinImporter` 和 " +":class:`importlib.machinery.ExtensionFileLoader` 不能用于 " +":class:`importlib.util.LazyLoader` 的限制。" + +#: ../../whatsnew/3.6.rst:1212 +msgid "" +":func:`importlib.util.cache_from_source`, " +":func:`importlib.util.source_from_cache`, and " +":func:`importlib.util.spec_from_file_location` now accept a :term:`path-like" +" object`." +msgstr "" +":func:`importlib.util.cache_from_source`, " +":func:`importlib.util.source_from_cache` 和 " +":func:`importlib.util.spec_from_file_location` 现在将接受 :term:`path-like " +"object`。" + +#: ../../whatsnew/3.6.rst:1219 +msgid "inspect" +msgstr "inspect" + +#: ../../whatsnew/3.6.rst:1221 +msgid "" +"The :func:`inspect.signature() ` function now reports the" +" implicit ``.0`` parameters generated by the compiler for comprehension and " +"generator expression scopes as if they were positional-only parameters " +"called ``implicit0``. (Contributed by Jelle Zijlstra in :issue:`19611`.)" +msgstr "" +":func:`inspect.signature() ` " +"函数现在会报告编译器为推导式和生成器表达式作用域生成的隐式 ``.0`` 形参,就像它们是调用``implicit0`` 时的仅限位置形参一样。 (由 " +"Jelle Zijlstra 在 :issue:`19611` 中贡献。)" + +#: ../../whatsnew/3.6.rst:1226 +msgid "" +"To reduce code churn when upgrading from Python 2.7 and the legacy " +":func:`inspect.getargspec` API, the previously documented deprecation of " +":func:`inspect.getfullargspec` has been reversed. While this function is " +"convenient for single/source Python 2/3 code bases, the richer " +":func:`inspect.signature` interface remains the recommended approach for new" +" code. (Contributed by Nick Coghlan in :issue:`27172`)" +msgstr "" +"为了减少从 Python 2.7 和旧式 :func:`inspect.getargspec` API 升级时的代码问题,先前被写入文档的对 " +":func:`inspect.getfullargspec` 的弃用已被撤销。 虽然这个函数对于单/源 Python 2/3 " +"代码库来说很方便,但对于新代码来说功能更丰富的 :func:`inspect.signature` 接口仍然是推荐的方式。 (由 Nick " +"Coghlan 在 :issue:`27172` 中贡献。)" + +#: ../../whatsnew/3.6.rst:1235 +msgid "json" +msgstr "json" + +#: ../../whatsnew/3.6.rst:1237 +msgid "" +":func:`json.load` and :func:`json.loads` now support binary input. Encoded " +"JSON should be represented using either UTF-8, UTF-16, or UTF-32. " +"(Contributed by Serhiy Storchaka in :issue:`17909`.)" +msgstr "" +"现在 :func:`json.load` 和 :func:`json.loads` 均支持二进制输入。 已编码的 JSON 应当使用 UTF-8, " +"UTF-16 或 UTF-32 来表示。 (由 Serhiy Storchaka 在 :issue:`17909` 中贡献。)" + +#: ../../whatsnew/3.6.rst:1243 +msgid "logging" +msgstr "logging" + +#: ../../whatsnew/3.6.rst:1245 +msgid "" +"The new :meth:`WatchedFileHandler.reopenIfNeeded() " +"` method has been added " +"to add the ability to check if the log file needs to be reopened. " +"(Contributed by Marian Horban in :issue:`24884`.)" +msgstr "" +"新增 :meth:`WatchedFileHandler.reopenIfNeeded() " +"` " +"方法以添加检测日志文件是否需要被重新打开的能力。 (由 Marian Horban 在 :issue:`24884` 中贡献。).)" + +#: ../../whatsnew/3.6.rst:1252 +msgid "math" +msgstr "math" + +#: ../../whatsnew/3.6.rst:1254 +msgid "" +"The tau (*τ*) constant has been added to the :mod:`math` and :mod:`cmath` " +"modules. (Contributed by Lisa Roach in :issue:`12345`, see :pep:`628` for " +"details.)" +msgstr "" +"为 :mod:`math` 和 :mod:`cmath` 模块增加了 tau (*τ*) 常量。 (由 Lisa Roach 在 " +":issue:`12345` 中贡献,详情见 :pep:`628`。)" + +#: ../../whatsnew/3.6.rst:1260 +msgid "multiprocessing" +msgstr "multiprocessing" + +#: ../../whatsnew/3.6.rst:1262 +msgid "" +":ref:`Proxy Objects ` returned by " +":func:`multiprocessing.Manager` can now be nested. (Contributed by Davin " +"Potts in :issue:`6766`.)" +msgstr "" +"由 :func:`multiprocessing.Manager` 返回的 :ref:`代理对象 ` 现在可以被嵌套。 (由 Davin Potts 在 :issue:`6766` 中贡献。)" + +#: ../../whatsnew/3.6.rst:1268 ../../whatsnew/3.6.rst:2017 +msgid "os" +msgstr "os" + +#: ../../whatsnew/3.6.rst:1270 +msgid "" +"See the summary of :ref:`PEP 519 ` for details on how the" +" :mod:`os` and :mod:`os.path` modules now support :term:`path-like objects " +"`." +msgstr "" +"请参阅 :ref:`PEP 519 ` 的概览了解现在 :mod:`os` 和 :mod:`os.path` " +"模块如何支持 :term:`路径型对象 ` 的详情。" + +#: ../../whatsnew/3.6.rst:1274 +msgid ":func:`~os.scandir` now supports :class:`bytes` paths on Windows." +msgstr "现在 :func:`~os.scandir` 支持 Windows 上的 :class:`bytes` 路径。" + +#: ../../whatsnew/3.6.rst:1276 +msgid "" +"A new :meth:`~os.scandir.close` method allows explicitly closing a " +":func:`~os.scandir` iterator. The :func:`~os.scandir` iterator now supports" +" the :term:`context manager` protocol. If a :func:`scandir` iterator is " +"neither exhausted nor explicitly closed a :exc:`ResourceWarning` will be " +"emitted in its destructor. (Contributed by Serhiy Storchaka in " +":issue:`25994`.)" +msgstr "" +"新增的 :meth:`~os.scandir.close` 方法允许显式地关闭 :func:`~os.scandir` 迭代器。 " +":func:`~os.scandir` 迭代器现在支持 :term:`context manager` 协议。 如果一个 :func:`scandir`" +" 迭代器既没有被耗尽也没有被显式地关闭则会在其析构器中发出 :exc:`ResourceWarning`。 (由 Serhiy Storchaka 在 " +":issue:`25994` 中贡献。)" + +#: ../../whatsnew/3.6.rst:1286 +msgid "" +"The Linux ``getrandom()`` syscall (get random bytes) is now exposed as the " +"new :func:`os.getrandom` function. (Contributed by Victor Stinner, part of " +"the :pep:`524`)" +msgstr "" +"Linux ``getrandom()`` 系统调用(获取随机字节数据)现在被暴露为新的 :func:`os.getrandom` 函数。 (由 " +"Victor Stinner 贡献,为 :pep:`524` 的一部分)" + +#: ../../whatsnew/3.6.rst:1292 +msgid "pathlib" +msgstr "pathlib" + +#: ../../whatsnew/3.6.rst:1294 +msgid "" +":mod:`pathlib` now supports :term:`path-like objects `. " +"(Contributed by Brett Cannon in :issue:`27186`.)" +msgstr "" +":mod:`pathlib` 现在支持 :term:`路径型对象 `。 (由 Brett Cannon 在 " +":issue:`27186` 中贡献。)" + +#: ../../whatsnew/3.6.rst:1297 +msgid "See the summary of :ref:`PEP 519 ` for details." +msgstr "请参阅 :ref:`PEP 519 ` 的概览了解详情。" + +#: ../../whatsnew/3.6.rst:1301 +msgid "pdb" +msgstr "pdb" + +#: ../../whatsnew/3.6.rst:1303 +msgid "" +"The :class:`~pdb.Pdb` class constructor has a new optional *readrc* argument" +" to control whether ``.pdbrc`` files should be read." +msgstr ":class:`~pdb.Pdb` 类构造器新增可选的 *readrc* 参数用来控制是否应当读取 ``.pdbrc`` 文件。" + +#: ../../whatsnew/3.6.rst:1308 +msgid "pickle" +msgstr "pickle" + +#: ../../whatsnew/3.6.rst:1310 +msgid "" +"Objects that need ``__new__`` called with keyword arguments can now be " +"pickled using :ref:`pickle protocols ` older than protocol" +" version 4. Protocol version 4 already supports this case. (Contributed by " +"Serhiy Storchaka in :issue:`24164`.)" +msgstr "" +"需要附带关键字参数调用 ``__new__`` 的对象现在可以使用早于协议版本 4 的 :ref:`pickle 协议 ` 来 pickle。 协议版本 4 之前已支持此场景。 (由 Serhiy Storchaka 在 :issue:`24164` " +"中贡献。)" + +#: ../../whatsnew/3.6.rst:1317 +msgid "pickletools" +msgstr "pickletools" + +#: ../../whatsnew/3.6.rst:1319 +msgid "" +":func:`pickletools.dis()` now outputs the implicit memo index for the " +"``MEMOIZE`` opcode. (Contributed by Serhiy Storchaka in :issue:`25382`.)" +msgstr "" +"现在 :func:`pickletools.dis()` 将为 ``MEMOIZE`` 操作码输出隐式的 memo 索引。 (由 Serhiy " +"Storchaka 在 :issue:`25382` 中贡献。)" + +#: ../../whatsnew/3.6.rst:1325 +msgid "pydoc" +msgstr "pydoc" + +#: ../../whatsnew/3.6.rst:1327 +msgid "" +"The :mod:`pydoc` module has learned to respect the ``MANPAGER`` environment " +"variable. (Contributed by Matthias Klose in :issue:`8637`.)" +msgstr "" +":mod:`pydoc` 模块将能遵守 ``MANPAGER`` 环境变量的设置。 (由 Matthias Klose 在 :issue:`8637` " +"中贡献。)" + +#: ../../whatsnew/3.6.rst:1331 +msgid "" +":func:`help` and :mod:`pydoc` can now list named tuple fields in the order " +"they were defined rather than alphabetically. (Contributed by Raymond " +"Hettinger in :issue:`24879`.)" +msgstr "" +":func:`help` 和 :mod:`pydoc` 现在将以具名元组字段被定义的顺序而非字母顺序列出它们。 (由 Raymond Hettinger" +" 在 :issue:`24879` 中贡献。)" + +#: ../../whatsnew/3.6.rst:1337 +msgid "random" +msgstr "random" + +#: ../../whatsnew/3.6.rst:1339 +msgid "" +"The new :func:`~random.choices` function returns a list of elements of " +"specified size from the given population with optional weights. (Contributed" +" by Raymond Hettinger in :issue:`18844`.)" +msgstr "" +"新增 :func:`~random.choices` 函数用于从给定的总体中返回指定大小的元素列表并有可选权重。 (由 Raymond " +"Hettinger 在 :issue:`18844` 中贡献。)" + +#: ../../whatsnew/3.6.rst:1345 ../../whatsnew/3.6.rst:2025 +msgid "re" +msgstr "re" + +#: ../../whatsnew/3.6.rst:1347 +msgid "" +"Added support of modifier spans in regular expressions. Examples: " +"``'(?i:p)ython'`` matches ``'python'`` and ``'Python'``, but not " +"``'PYTHON'``; ``'(?i)g(?-i:v)r'`` matches ``'GvR'`` and ``'gvr'``, but not " +"``'GVR'``. (Contributed by Serhiy Storchaka in :issue:`433028`.)" +msgstr "" +"在正则表达式中增加了对修饰符区段的支持。 示例: ``'(?i:p)ython'`` 匹配 ``'python'`` 和 " +"``'Python'``,但不匹配 ``'PYTHON'``;``'(?i)g(?-i:v)r'`` 匹配 ``'GvR'`` 和 " +"``'gvr'``,但不匹配 ``'GVR'``。 (由 Serhiy Storchaka 在 :issue:`433028` 中贡献。)" + +#: ../../whatsnew/3.6.rst:1352 +msgid "" +"Match object groups can be accessed by ``__getitem__``, which is equivalent " +"to ``group()``. So ``mo['name']`` is now equivalent to " +"``mo.group('name')``. (Contributed by Eric Smith in :issue:`24454`.)" +msgstr "" +"Match 对象分组可通过 ``__getitem__`` 来访问,这等价于 ``group()``。 因此 ``mo['name']`` 现在将等价于" +" ``mo.group('name')``。 (由 Eric Smith 在 :issue:`24454` 中贡献。)" + +#: ../../whatsnew/3.6.rst:1356 +msgid "" +":class:`~re.Match` objects now support :meth:`index-like objects " +"` as group indices. (Contributed by Jeroen Demeyer and " +"Xiang Zhang in :issue:`27177`.)" +msgstr "" +":class:`~re.Match` 对象现在支持将 :meth:`索引型对象 ` 作为分组索引。 (由 " +"Jeroen Demeyer 和 Xiang Zhang 在 :issue:`27177` 中贡献。)" + +#: ../../whatsnew/3.6.rst:1363 +msgid "readline" +msgstr "readline" + +#: ../../whatsnew/3.6.rst:1365 +msgid "" +"Added :func:`~readline.set_auto_history` to enable or disable automatic " +"addition of input to the history list. (Contributed by Tyler Crompton in " +":issue:`26870`.)" +msgstr "" +"新增 :func:`~readline.set_auto_history` 来启用或禁用历史列表输入的自动添加。 (由 Tyler Crompton 在" +" :issue:`26870` 中贡献。)" + +#: ../../whatsnew/3.6.rst:1371 +msgid "rlcompleter" +msgstr "rlcompleter" + +#: ../../whatsnew/3.6.rst:1373 +msgid "" +"Private and special attribute names now are omitted unless the prefix starts" +" with underscores. A space or a colon is added after some completed " +"keywords. (Contributed by Serhiy Storchaka in :issue:`25011` and " +":issue:`25209`.)" +msgstr "" +"私有和特殊属性名称现在会被省略除非带有以下划线开头的前缀。 在某些已完成的关键字后会加上空格或冒号。 (由 Serhiy Storchaka 在 " +":issue:`25011` 和 :issue:`25209` 中贡献。)" + +#: ../../whatsnew/3.6.rst:1379 +msgid "shlex" +msgstr "shlex" + +#: ../../whatsnew/3.6.rst:1381 +msgid "" +"The :class:`~shlex.shlex` has much :ref:`improved shell compatibility " +"` through the new *punctuation_chars* argument" +" to control which characters are treated as punctuation. (Contributed by " +"Vinay Sajip in :issue:`1521950`.)" +msgstr "" +":class:`~shlex.shlex` 通过新的 *punctuation_chars* 参数来控制哪些字符会被当作标点符号大幅度地 " +":ref:`改进了 shell 兼容性 `。 (由 Vinay Sajip 在 " +":issue:`1521950` 中贡献。)" + +#: ../../whatsnew/3.6.rst:1389 +msgid "site" +msgstr "site" + +#: ../../whatsnew/3.6.rst:1391 +msgid "" +"When specifying paths to add to :attr:`sys.path` in a `.pth` file, you may " +"now specify file paths on top of directories (e.g. zip files). (Contributed " +"by Wolfgang Langner in :issue:`26587`)." +msgstr "" + +#: ../../whatsnew/3.6.rst:1397 +msgid "sqlite3" +msgstr "sqlite3" + +#: ../../whatsnew/3.6.rst:1399 +msgid "" +":attr:`sqlite3.Cursor.lastrowid` now supports the ``REPLACE`` statement. " +"(Contributed by Alex LordThorsen in :issue:`16864`.)" +msgstr "" +":attr:`sqlite3.Cursor.lastrowid` 现在支持 ``REPLACE`` 语句。 (由 Alex LordThorsen 在 " +":issue:`16864` 中贡献。)" + +#: ../../whatsnew/3.6.rst:1404 +msgid "socket" +msgstr "socket" + +#: ../../whatsnew/3.6.rst:1406 +msgid "" +"The :func:`~socket.socket.ioctl` function now supports the " +":data:`~socket.SIO_LOOPBACK_FAST_PATH` control code. (Contributed by Daniel " +"Stokes in :issue:`26536`.)" +msgstr "" + +#: ../../whatsnew/3.6.rst:1410 +msgid "" +"The :meth:`~socket.socket.getsockopt` constants ``SO_DOMAIN``, " +"``SO_PROTOCOL``, ``SO_PEERSEC``, and ``SO_PASSSEC`` are now supported. " +"(Contributed by Christian Heimes in :issue:`26907`.)" +msgstr "" +":meth:`~socket.socket.getsockopt` 常量 ``SO_DOMAIN``, ``SO_PROTOCOL``, " +"``SO_PEERSEC`` 和 ``SO_PASSSEC`` 现在已得到支持。 (由 Christian Heimes 在 " +":issue:`26907` 中贡献。)" + +#: ../../whatsnew/3.6.rst:1414 +msgid "" +"The :meth:`~socket.socket.setsockopt` now supports the ``setsockopt(level, " +"optname, None, optlen: int)`` form. (Contributed by Christian Heimes in " +":issue:`27744`.)" +msgstr "" +":meth:`~socket.socket.setsockopt` 现在支持 ``setsockopt(level, optname, None, " +"optlen: int)`` 的形式。 (由 Christian Heimes 在 :issue:`27744` 中贡献。)" + +#: ../../whatsnew/3.6.rst:1418 +msgid "" +"The socket module now supports the address family :data:`~socket.AF_ALG` to " +"interface with Linux Kernel crypto API. ``ALG_*``, ``SOL_ALG`` and " +":meth:`~socket.socket.sendmsg_afalg` were added. (Contributed by Christian " +"Heimes in :issue:`27744` with support from Victor Stinner.)" +msgstr "" + +#: ../../whatsnew/3.6.rst:1424 +msgid "" +"New Linux constants ``TCP_USER_TIMEOUT`` and ``TCP_CONGESTION`` were added. " +"(Contributed by Omar Sandoval, issue:`26273`)." +msgstr "" + +#: ../../whatsnew/3.6.rst:1429 +msgid "socketserver" +msgstr "socketserver" + +#: ../../whatsnew/3.6.rst:1431 +msgid "" +"Servers based on the :mod:`socketserver` module, including those defined in " +":mod:`http.server`, :mod:`xmlrpc.server` and :mod:`wsgiref.simple_server`, " +"now support the :term:`context manager` protocol. (Contributed by Aviv " +"Palivoda in :issue:`26404`.)" +msgstr "" +"基于 :mod:`socketserver` 模块的服务器,包括在 :mod:`http.server`、:mod:`xmlrpc.server` 和 " +":mod:`wsgiref.simple_server` 中定义的服务器,现在都支持 :term:`context manager` 协议。(由 " +"Aviv Palivoda 在 :issue:`26404` 中贡献。)" + +#: ../../whatsnew/3.6.rst:1437 +msgid "" +"The :attr:`~socketserver.StreamRequestHandler.wfile` attribute of " +":class:`~socketserver.StreamRequestHandler` classes now implements the " +":class:`io.BufferedIOBase` writable interface. In particular, calling " +":meth:`~io.BufferedIOBase.write` is now guaranteed to send the data in full." +" (Contributed by Martin Panter in :issue:`26721`.)" +msgstr "" +":class:`~socketserver.StreamRequestHandler` 类的 " +":attr:`~socketserver.StreamRequestHandler.wfile` 属性现在实现了 " +":class:`io.BufferedIOBase` 可写接口。 特别地,现在调用 :meth:`~io.BufferedIOBase.write` " +"会保证完整地发送数据。 (由 Martin Panter 在 :issue:`26721` 中贡献。)" + +#: ../../whatsnew/3.6.rst:1445 ../../whatsnew/3.6.rst:2033 +msgid "ssl" +msgstr "ssl" + +#: ../../whatsnew/3.6.rst:1447 +msgid "" +":mod:`ssl` supports OpenSSL 1.1.0. The minimum recommend version is 1.0.2. " +"(Contributed by Christian Heimes in :issue:`26470`.)" +msgstr "" +":mod:`ssl` 已支持 OpenSSL 1.1.0。 最低的建议版本为 1.0.2。 (由 Christian Heimes 在 " +":issue:`26470` 中贡献。)" + +#: ../../whatsnew/3.6.rst:1450 +msgid "" +"3DES has been removed from the default cipher suites and ChaCha20 Poly1305 " +"cipher suites have been added. (Contributed by Christian Heimes in " +":issue:`27850` and :issue:`27766`.)" +msgstr "" +"已从默认的密码套件中删除 3DES 并添加了 ChaCha20 Poly1305 密码套件。 (由 Christian Heimes 在 " +":issue:`27850` 和 :issue:`27766` 中贡献。)" + +#: ../../whatsnew/3.6.rst:1454 +msgid "" +":class:`~ssl.SSLContext` has better default configuration for options and " +"ciphers. (Contributed by Christian Heimes in :issue:`28043`.)" +msgstr "" +":class:`~ssl.SSLContext` 已具有更好的选项和密码配置。 (由 Christian Heimes 在 :issue:`28043`" +" 中贡献。).)" + +#: ../../whatsnew/3.6.rst:1458 +msgid "" +"SSL session can be copied from one client-side connection to another with " +"the new :class:`~ssl.SSLSession` class. TLS session resumption can speed up" +" the initial handshake, reduce latency and improve performance (Contributed " +"by Christian Heimes in :issue:`19500` based on a draft by Alex Warhawk.)" +msgstr "" +"SSL 会话可以通过新的 :class:`~ssl.SSLSession` 类从一个客户端连接复制到另一个。 TLS " +"会话恢复可以加快初始握手过程、减少延迟并提升性能。 (由 Christian Heimes 根据 Alex Warhawk 的草案在 " +":issue:`19500` 中贡献。)" + +#: ../../whatsnew/3.6.rst:1464 +msgid "" +"The new :meth:`~ssl.SSLContext.get_ciphers` method can be used to get a list" +" of enabled ciphers in order of cipher priority." +msgstr "新的 :meth:`~ssl.SSLContext.get_ciphers` 方法可被用来获取按密码优先级排序的已启用密码列表。" + +#: ../../whatsnew/3.6.rst:1467 +msgid "" +"All constants and flags have been converted to :class:`~enum.IntEnum` and " +":class:`~enum.IntFlags`. (Contributed by Christian Heimes in " +":issue:`28025`.)" +msgstr "" +"所有常量和旗标都已被转换为 :class:`~enum.IntEnum` 和 :class:`~enum.IntFlags`。 (由 Christian" +" Heimes 在 :issue:`28025` 中贡献。)" + +#: ../../whatsnew/3.6.rst:1471 +msgid "" +"Server and client-side specific TLS protocols for :class:`~ssl.SSLContext` " +"were added. (Contributed by Christian Heimes in :issue:`28085`.)" +msgstr "" +"为 :class:`~ssl.SSLContext` 添加了服务器和客户端专属的 TLS 协议。 (由 Christian Heimes 在 " +":issue:`28085` 中贡献。)" + +#: ../../whatsnew/3.6.rst:1477 +msgid "statistics" +msgstr "statistics" + +#: ../../whatsnew/3.6.rst:1479 +msgid "" +"A new :func:`~statistics.harmonic_mean` function has been added. " +"(Contributed by Steven D'Aprano in :issue:`27181`.)" +msgstr "" +"新增 :func:`~statistics.harmonic_mean` 函数。 (由 Steven D'Aprano 在 :issue:`27181`" +" 中贡献。)" + +#: ../../whatsnew/3.6.rst:1484 +msgid "struct" +msgstr "struct" + +#: ../../whatsnew/3.6.rst:1486 +msgid "" +":mod:`struct` now supports IEEE 754 half-precision floats via the ``'e'`` " +"format specifier. (Contributed by Eli Stevens, Mark Dickinson in " +":issue:`11734`.)" +msgstr "" +"现在 :mod:`struct` 可通过 ``'e'`` 格式说明符支持 IEEE 754 半精度浮点数。 (由 Eli Stevens 和 Mark " +"Dickinson 在 :issue:`11734` 中贡献。)" + +#: ../../whatsnew/3.6.rst:1492 +msgid "subprocess" +msgstr "subprocess" + +#: ../../whatsnew/3.6.rst:1494 +msgid "" +":class:`subprocess.Popen` destructor now emits a :exc:`ResourceWarning` " +"warning if the child process is still running. Use the context manager " +"protocol (``with proc: ...``) or explicitly call the " +":meth:`~subprocess.Popen.wait` method to read the exit status of the child " +"process. (Contributed by Victor Stinner in :issue:`26741`.)" +msgstr "" +"现在 :class:`subprocess.Popen` 析构器会在子进程仍然运行时发出 :exc:`ResourceWarning` 警告。 " +"请使用上下文管理器协议 (``with proc: ...``) 或显式地调用 :meth:`~subprocess.Popen.wait` " +"方法来读取子进程的退出状态。 (由 Victor Stinner 在 :issue:`26741` 中贡献。)" + +#: ../../whatsnew/3.6.rst:1500 +msgid "" +"The :class:`subprocess.Popen` constructor and all functions that pass " +"arguments through to it now accept *encoding* and *errors* arguments. " +"Specifying either of these will enable text mode for the *stdin*, *stdout* " +"and *stderr* streams. (Contributed by Steve Dower in :issue:`6135`.)" +msgstr "" +":class:`subprocess.Popen` 构造器以及所有会向其传递参数的函数现在可接受 *encoding* 和 *errors* 参数。 " +"指定这两者中的任何一个都将为 *stdin*, *stdout* 和 *stderr* 流启用文本模式。 (由 Steve Dower 在 " +":issue:`6135` 中贡献。)" + +#: ../../whatsnew/3.6.rst:1507 +msgid "sys" +msgstr "sys" + +#: ../../whatsnew/3.6.rst:1509 +msgid "" +"The new :func:`~sys.getfilesystemencodeerrors` function returns the name of " +"the error mode used to convert between Unicode filenames and bytes " +"filenames. (Contributed by Steve Dower in :issue:`27781`.)" +msgstr "" +"新的 :func:`~sys.getfilesystemencodeerrors` 函数可返回在 Unicode 文件名和 bytes " +"文件名之间进行转换时使用的错误模式的名称。 (由 Steve Dower 在 :issue:`27781` 中贡献。)" + +#: ../../whatsnew/3.6.rst:1513 +msgid "" +"On Windows the return value of the :func:`~sys.getwindowsversion` function " +"now includes the *platform_version* field which contains the accurate major " +"version, minor version and build number of the current operating system, " +"rather than the version that is being emulated for the process (Contributed " +"by Steve Dower in :issue:`27932`.)" +msgstr "" +"在 Windows 上 :func:`~sys.getwindowsversion` 函数的返回值现在将包括 *platform_version* " +"字段,该字段包含当前操作系统准确的主版本、次版本和构建版本号,而不是进行所模拟的版本信息。 (由 Steve Dower 在 " +":issue:`27932` 中提供贡献。)" + +#: ../../whatsnew/3.6.rst:1521 +msgid "telnetlib" +msgstr "telnetlib" + +#: ../../whatsnew/3.6.rst:1523 +msgid "" +":class:`~telnetlib.Telnet` is now a context manager (contributed by Stéphane" +" Wirtel in :issue:`25485`)." +msgstr "" +":class:`~telnetlib.Telnet` 现在是一个上下文管理器。 (由 Stéphane Wirtel 在 :issue:`25485` " +"中贡献。)" + +#: ../../whatsnew/3.6.rst:1528 +msgid "time" +msgstr "time" + +#: ../../whatsnew/3.6.rst:1530 +msgid "" +"The :class:`~time.struct_time` attributes :attr:`tm_gmtoff` and " +":attr:`tm_zone` are now available on all platforms." +msgstr "" +"现在 :class:`~time.struct_time` 的属性 :attr:`tm_gmtoff` 和 :attr:`tm_zone` " +"在所有平台上均可用。" + +#: ../../whatsnew/3.6.rst:1535 +msgid "timeit" +msgstr "timeit" + +#: ../../whatsnew/3.6.rst:1537 +msgid "" +"The new :meth:`Timer.autorange() ` convenience " +"method has been added to call :meth:`Timer.timeit() ` " +"repeatedly so that the total run time is greater or equal to 200 " +"milliseconds. (Contributed by Steven D'Aprano in :issue:`6422`.)" +msgstr "" +"新增的 :meth:`Timer.autorange() ` 便捷方法会重复调用 " +":meth:`Timer.timeit() ` 以使总运行时间大于等于 200 毫秒。 (由 Steven " +"D'Aprano 在 :issue:`6422` 中贡献。)" + +#: ../../whatsnew/3.6.rst:1542 +msgid "" +":mod:`timeit` now warns when there is substantial (4x) variance between best" +" and worst times. (Contributed by Serhiy Storchaka in :issue:`23552`.)" +msgstr "" +"现在 :mod:`timeit` 在最佳时间和最差时间之间存在显著(4 倍)差异时将会发出警告。 (由 Serhiy Storchaka 在 " +":issue:`23552` 中贡献。)" + +#: ../../whatsnew/3.6.rst:1548 ../../whatsnew/3.6.rst:2050 +msgid "tkinter" +msgstr "tkinter" + +#: ../../whatsnew/3.6.rst:1550 +msgid "" +"Added methods :meth:`~tkinter.Variable.trace_add`, " +":meth:`~tkinter.Variable.trace_remove` and " +":meth:`~tkinter.Variable.trace_info` in the :class:`tkinter.Variable` class." +" They replace old methods :meth:`~tkinter.Variable.trace_variable`, " +":meth:`~tkinter.Variable.trace`, :meth:`~tkinter.Variable.trace_vdelete` and" +" :meth:`~tkinter.Variable.trace_vinfo` that use obsolete Tcl commands and " +"might not work in future versions of Tcl. (Contributed by Serhiy Storchaka " +"in :issue:`22115`)." +msgstr "" +"在 :class:`tkinter.Variable` 类中添加了方法 :meth:`~tkinter.Variable.trace_add`, " +":meth:`~tkinter.Variable.trace_remove` 和 " +":meth:`~tkinter.Variable.trace_info`。 它们取代了使用过时 Tcl 命令的旧方法 " +":meth:`~tkinter.Variable.trace_variable`, :meth:`~tkinter.Variable.trace`, " +":meth:`~tkinter.Variable.trace_vdelete` 和 " +":meth:`~tkinter.Variable.trace_vinfo`,旧方法在未来版本的 Tcl 中可能会无法使用。 (由 Serhiy " +"Storchaka 在 :issue:`22115` 中贡献。)" + +#: ../../whatsnew/3.6.rst:1563 +msgid "traceback" +msgstr "回溯" + +#: ../../whatsnew/3.6.rst:1565 +msgid "" +"Both the traceback module and the interpreter's builtin exception display " +"now abbreviate long sequences of repeated lines in tracebacks as shown in " +"the following example::" +msgstr "traceback 模块和解释器的内置异常显示现在都会对回溯中重复行的长序列进行缩写,如下面的例子所示::" + +#: ../../whatsnew/3.6.rst:1580 +msgid "(Contributed by Emanuel Barry in :issue:`26823`.)" +msgstr "(由 Emanuel Barry在 :issue:`26823` 中贡献。)" + +#: ../../whatsnew/3.6.rst:1584 +msgid "tracemalloc" +msgstr "tracemalloc" + +#: ../../whatsnew/3.6.rst:1586 +msgid "" +"The :mod:`tracemalloc` module now supports tracing memory allocations in " +"multiple different address spaces." +msgstr ":mod:`tracemalloc` 模块现在支持跟踪在多个不同地址空间中的内存分配情况。" + +#: ../../whatsnew/3.6.rst:1589 +msgid "" +"The new :class:`~tracemalloc.DomainFilter` filter class has been added to " +"filter block traces by their address space (domain)." +msgstr "新增 :class:`~tracemalloc.DomainFilter` 过滤器类用于按地址空间(域)过滤块跟踪信息。" + +#: ../../whatsnew/3.6.rst:1592 +msgid "(Contributed by Victor Stinner in :issue:`26588`.)" +msgstr "(由 Victor Stinner 在 :issue:`26588` 中贡献。)" + +#: ../../whatsnew/3.6.rst:1598 +msgid "typing" +msgstr "typing" + +#: ../../whatsnew/3.6.rst:1600 +msgid "" +"Since the :mod:`typing` module is :term:`provisional `, all" +" changes introduced in Python 3.6 have also been backported to Python 3.5.x." +msgstr "" +"由于 :mod:`typing` 模块处于 :term:`暂定状态 `,在 Python 3.6 " +"中引入的所有改变都已被反向移植到 Python 3.5.x。" + +#: ../../whatsnew/3.6.rst:1604 +msgid "" +"The :mod:`typing` module has a much improved support for generic type " +"aliases. For example ``Dict[str, Tuple[S, T]]`` is now a valid type " +"annotation. (Contributed by Guido van Rossum in `Github #195 " +"`_.)" +msgstr "" +":mod:`typing` 模块对泛型类别名的支持得到大幅改进。 例如 ``Dict[str, Tuple[S, T]]`` 现在将是有效的类型标注。 " +"(由 Guido van Rossum 在 `Github #195 中贡献 " +"`_。)" + +#: ../../whatsnew/3.6.rst:1610 +msgid "" +"The :class:`typing.ContextManager` class has been added for representing " +":class:`contextlib.AbstractContextManager`. (Contributed by Brett Cannon in " +":issue:`25609`.)" +msgstr "" +"增加 :class:`typing.ContextManager` 类用来表示 " +":class:`contextlib.AbstractContextManager`。 (由 Brett Cannon 在 :issue:`25609`" +" 中贡献。)" + +#: ../../whatsnew/3.6.rst:1614 +msgid "" +"The :class:`typing.Collection` class has been added for representing " +":class:`collections.abc.Collection`. (Contributed by Ivan Levkivskyi in " +":issue:`27598`.)" +msgstr "" +"增加 :class:`typing.Collection` 类用来表示 :class:`collections.abc.Collection`。 (由 " +"Ivan Levkivskyi 在 :issue:`27598` 中贡献。)" + +#: ../../whatsnew/3.6.rst:1618 +msgid "" +"The :const:`typing.ClassVar` type construct has been added to mark class " +"variables. As introduced in :pep:`526`, a variable annotation wrapped in " +"ClassVar indicates that a given attribute is intended to be used as a class " +"variable and should not be set on instances of that class. (Contributed by " +"Ivan Levkivskyi in `Github #280 " +"`_.)" +msgstr "" +"增加 :const:`typing.ClassVar` 类型结构体用来标记类变量。 变量标注在 :pep:`526` 中被引入,包装在 ClassVar" +" 中的变量标注表示给定的属性将被用作类变量而不应在该类的实例上设置。 (由 Ivan Levkivskyi 在 `Github #280 中贡献 " +"`_。)" + +#: ../../whatsnew/3.6.rst:1625 +msgid "" +"A new :const:`~typing.TYPE_CHECKING` constant that is assumed to be ``True``" +" by the static type checkers, but is ``False`` at runtime. (Contributed by " +"Guido van Rossum in `Github #230 " +"`_.)" +msgstr "" +"新增 :const:`~typing.TYPE_CHECKING` 常量将被静态类型检查器视为 ``True``,但在运行时将为 ``False``。 " +"(由 Guido van Rossum 在 `Github #230 中贡献 " +"`_。)" + +#: ../../whatsnew/3.6.rst:1630 +msgid "" +"A new :func:`~typing.NewType` helper function has been added to create " +"lightweight distinct types for annotations::" +msgstr "新增 :func:`~typing.NewType` 辅助函数用来创建针对标注的轻量级单独类型::" + +#: ../../whatsnew/3.6.rst:1638 +msgid "" +"The static type checker will treat the new type as if it were a subclass of " +"the original type. (Contributed by Ivan Levkivskyi in `Github #189 " +"`_.)" +msgstr "" +"静态类型检查器将把新类型当作原始类型的子类来处理。 (由 Ivan Levkivskyi 在 `Github #189 中贡献 " +"`_。)" + +#: ../../whatsnew/3.6.rst:1644 +msgid "unicodedata" +msgstr "unicodedata" + +#: ../../whatsnew/3.6.rst:1646 +msgid "" +"The :mod:`unicodedata` module now uses data from `Unicode 9.0.0 " +"`_. (Contributed by Benjamin " +"Peterson.)" +msgstr "" + +#: ../../whatsnew/3.6.rst:1652 +msgid "unittest.mock" +msgstr "unittest.mock" + +#: ../../whatsnew/3.6.rst:1654 +msgid "The :class:`~unittest.mock.Mock` class has the following improvements:" +msgstr ":class:`~unittest.mock.Mock` 类具有以下改进:" + +#: ../../whatsnew/3.6.rst:1656 +msgid "" +"Two new methods, :meth:`Mock.assert_called() " +"` and :meth:`Mock.assert_called_once() " +"` to check if the mock object was " +"called. (Contributed by Amit Saha in :issue:`26323`.)" +msgstr "" +"两个新方法,:meth:`Mock.assert_called() ` 和 " +":meth:`Mock.assert_called_once() ` " +"用于检测 mock 对象是否已被调用。 (由 Amit Saha 在 :issue:`26323` 中贡献。)" + +#: ../../whatsnew/3.6.rst:1662 +msgid "" +"The :meth:`Mock.reset_mock() ` method now has" +" two optional keyword only arguments: *return_value* and *side_effect*. " +"(Contributed by Kushal Das in :issue:`21271`.)" +msgstr "" +":meth:`Mock.reset_mock() ` 方法现在有两个可选的仅限关键字参数:" +" *return_value* 和 *side_effect*。 (由 Kushal Das 在 :issue:`21271` 中贡献。)" + +#: ../../whatsnew/3.6.rst:1669 +msgid "urllib.request" +msgstr "urllib.request" + +#: ../../whatsnew/3.6.rst:1671 +msgid "" +"If a HTTP request has a file or iterable body (other than a bytes object) " +"but no ``Content-Length`` header, rather than throwing an error, " +":class:`~urllib.request.AbstractHTTPHandler` now falls back to use chunked " +"transfer encoding. (Contributed by Demian Brecht and Rolf Krahl in " +":issue:`12319`.)" +msgstr "" +"如果一个 HTTP 请求具有文件或可迭代对象请求体(而不是 bytes 对象)但没有 ``Content-Length`` " +"标头,:class:`~urllib.request.AbstractHTTPHandler` 现在将不会抛出错误,而是回退为使用分块传输编码格式。 " +"(由 Demian Brecht 和 Rolf Krahl 在 :issue:`12319` 中贡献。)" + +#: ../../whatsnew/3.6.rst:1679 +msgid "urllib.robotparser" +msgstr "urllib.robotparser" + +#: ../../whatsnew/3.6.rst:1681 +msgid "" +":class:`~urllib.robotparser.RobotFileParser` now supports the ``Crawl-" +"delay`` and ``Request-rate`` extensions. (Contributed by Nikolay Bogoychev " +"in :issue:`16099`.)" +msgstr "" +":class:`~urllib.robotparser.RobotFileParser` 现在将支持 ``Crawl-delay`` 和 " +"``Request-rate`` 扩展。 (由 Nikolay Bogoychev 在 :issue:`16099` 中贡献。)" + +#: ../../whatsnew/3.6.rst:1687 ../../whatsnew/3.6.rst:2056 +msgid "venv" +msgstr "venv" + +#: ../../whatsnew/3.6.rst:1689 +msgid "" +":mod:`venv` accepts a new parameter ``--prompt``. This parameter provides an" +" alternative prefix for the virtual environment. (Proposed by Łukasz " +"Balcerzak and ported to 3.6 by Stéphane Wirtel in :issue:`22829`.)" +msgstr "" +":mod:`venv` 接受一个新的形参 ``--prompt``。 此形参提供了用于虚拟环境的替代前缀。 (由 Łukasz Balcerzak " +"提议并由 Stéphane Wirtel 在 :issue:`22829` 中移植到 3.6。)" + +#: ../../whatsnew/3.6.rst:1695 +msgid "warnings" +msgstr "warnings" + +#: ../../whatsnew/3.6.rst:1697 +msgid "" +"A new optional *source* parameter has been added to the " +":func:`warnings.warn_explicit` function: the destroyed object which emitted " +"a :exc:`ResourceWarning`. A *source* attribute has also been added to " +":class:`warnings.WarningMessage` (contributed by Victor Stinner in " +":issue:`26568` and :issue:`26567`)." +msgstr "" +"为 :func:`warnings.warn_explicit` 新增可选的 *source* 形参:被销毁的对象将发出 " +":exc:`ResourceWarning`。 还为 :class:`warnings.WarningMessage` 增加了 *source* 属性。" +" (由 Victor Stinner 在 :issue:`26568` 和 :issue:`26567` 中贡献。)" + +#: ../../whatsnew/3.6.rst:1703 +msgid "" +"When a :exc:`ResourceWarning` warning is logged, the :mod:`tracemalloc` " +"module is now used to try to retrieve the traceback where the destroyed " +"object was allocated." +msgstr "" +"当一个 :exc:`ResourceWarning` 警告被记入日志时,现在会使用 :mod:`tracemalloc` " +"模块来尝试提取分配给已销毁对象的回溯信息。" + +#: ../../whatsnew/3.6.rst:1706 +msgid "Example with the script ``example.py``::" +msgstr "使用 ``example.py`` 脚本的示例::" + +#: ../../whatsnew/3.6.rst:1716 +msgid "Output of the command ``python3.6 -Wd -X tracemalloc=5 example.py``::" +msgstr "命令 ``python3.6 -Wd -X tracemalloc=5 example.py`` 的输出::" + +#: ../../whatsnew/3.6.rst:1726 +msgid "" +"The \"Object allocated at\" traceback is new and is only displayed if " +":mod:`tracemalloc` is tracing Python memory allocations and if the " +":mod:`warnings` module was already imported." +msgstr "" +"\"Object allocated at\" 回溯信息是新增的并且仅当 :mod:`tracemalloc` 在跟踪 Python 内存分配且 " +":mod:`warnings` 模块已被导入时才会显示。" + +#: ../../whatsnew/3.6.rst:1732 +msgid "winreg" +msgstr "winreg" + +#: ../../whatsnew/3.6.rst:1734 +msgid "" +"Added the 64-bit integer type :data:`REG_QWORD `. " +"(Contributed by Clement Rouault in :issue:`23026`.)" +msgstr "" +"增加了 64 位整数类型 :data:`REG_QWORD `。 (由 Clement Rouault 在 " +":issue:`23026` 中贡献。)" + +#: ../../whatsnew/3.6.rst:1739 +msgid "winsound" +msgstr "winsound" + +#: ../../whatsnew/3.6.rst:1741 +msgid "" +"Allowed keyword arguments to be passed to :func:`Beep `, " +":func:`MessageBeep `, and :func:`PlaySound " +"` (:issue:`27982`)." +msgstr "" +"允许将关键字参数传给 :func:`Beep `, :func:`MessageBeep " +"` 和 :func:`PlaySound ` " +"(:issue:`27982`)。" + +#: ../../whatsnew/3.6.rst:1747 +msgid "xmlrpc.client" +msgstr "xmlrpc.client" + +#: ../../whatsnew/3.6.rst:1749 +msgid "" +"The :mod:`xmlrpc.client` module now supports unmarshalling additional data " +"types used by the Apache XML-RPC implementation for numerics and ``None``. " +"(Contributed by Serhiy Storchaka in :issue:`26885`.)" +msgstr "" +":mod:`xmlrpc.client` 模块现在支持反 marshall 由 Apache XML-RPC 的数字和 ``None`` " +"实现所使用的附加数据类型。 (由 Serhiy Storchaka 在 :issue:`26885` 中贡献。)" + +#: ../../whatsnew/3.6.rst:1756 +msgid "zipfile" +msgstr "zipfile" + +#: ../../whatsnew/3.6.rst:1758 +msgid "" +"A new :meth:`ZipInfo.from_file() ` class method " +"allows making a :class:`~zipfile.ZipInfo` instance from a filesystem file. A" +" new :meth:`ZipInfo.is_dir() ` method can be used to" +" check if the :class:`~zipfile.ZipInfo` instance represents a directory. " +"(Contributed by Thomas Kluyver in :issue:`26039`.)" +msgstr "" +"新增的 :meth:`ZipInfo.from_file() ` " +"类方法允许基于文件系统中的文件创建 :class:`~zipfile.ZipInfo` 实例。 新增的 :meth:`ZipInfo.is_dir() " +"` 方法可被用来检测 :class:`~zipfile.ZipInfo` 实例是否代表一个目录。 (由 " +"Thomas Kluyver 在 :issue:`26039` 中贡献。)" + +#: ../../whatsnew/3.6.rst:1764 +msgid "" +"The :meth:`ZipFile.open() ` method can now be used to " +"write data into a ZIP file, as well as for extracting data. (Contributed by " +"Thomas Kluyver in :issue:`26039`.)" +msgstr "" +"现在 :meth:`ZipFile.open() ` 方法可被用来将数据写入 ZIP 文件,以及提取数据。 " +"(由 Thomas Kluyver 在 :issue:`26039` 中贡献。)" + +#: ../../whatsnew/3.6.rst:1770 +msgid "zlib" +msgstr "zlib" + +#: ../../whatsnew/3.6.rst:1772 +msgid "" +"The :func:`~zlib.compress` and :func:`~zlib.decompress` functions now accept" +" keyword arguments. (Contributed by Aviv Palivoda in :issue:`26243` and " +"Xiang Zhang in :issue:`16764` respectively.)" +msgstr "" +"现在 :func:`~zlib.compress` 和 :func:`~zlib.decompress` 函数均可接受关键字参数。 (分别由 Aviv " +"Palivoda 在 :issue:`26243` 以及 Xiang Zhang 在 :issue:`16764` 中贡献。)" + +#: ../../whatsnew/3.6.rst:1779 +msgid "Optimizations" +msgstr "性能优化" + +#: ../../whatsnew/3.6.rst:1781 +msgid "" +"The Python interpreter now uses a 16-bit wordcode instead of bytecode which " +"made a number of opcode optimizations possible. (Contributed by Demur Rumed " +"with input and reviews from Serhiy Storchaka and Victor Stinner in " +":issue:`26647` and :issue:`28050`.)" +msgstr "" +"Python 解释器现在使用 16 位字代码而不是字节代码,这使得许多操作码优化成为可能。 (由 Demur Rumed 在 " +":issue:`26647` 和 :issue:`28050` 中贡献并得到来自 Serhiy Storchaka 和 Victor Stinner " +"的协助和评估。)" + +#: ../../whatsnew/3.6.rst:1786 +msgid "" +"The :class:`asyncio.Future` class now has an optimized C implementation. " +"(Contributed by Yury Selivanov and INADA Naoki in :issue:`26081`.)" +msgstr "" +"现在 :class:`asyncio.Future` 类已拥有经优化的 C 实现。 (由 Yury Selivanov 和 INADA Naoki 在 " +":issue:`26081` 中贡献。)" + +#: ../../whatsnew/3.6.rst:1789 +msgid "" +"The :class:`asyncio.Task` class now has an optimized C implementation. " +"(Contributed by Yury Selivanov in :issue:`28544`.)" +msgstr "" +"现在 :class:`asyncio.Task` 类已拥有经优化的 C 实现。 (由 Yury Selivanov 在 :issue:`28544` " +"中贡献。)" + +#: ../../whatsnew/3.6.rst:1792 +msgid "" +"Various implementation improvements in the :mod:`typing` module (such as " +"caching of generic types) allow up to 30 times performance improvements and " +"reduced memory footprint." +msgstr "在 :mod:`typing` 模块中多项对实现的改进(如泛型类型的缓存)获得至多 30 倍的运行效率提升并降低了内存消耗。" + +#: ../../whatsnew/3.6.rst:1796 +msgid "" +"The ASCII decoder is now up to 60 times as fast for error handlers " +"``surrogateescape``, ``ignore`` and ``replace`` (Contributed by Victor " +"Stinner in :issue:`24870`)." +msgstr "" +"现在 ASCII 解码器使用 ``surrogateescape``, ``ignore`` 和 ``replace`` 错误处理句柄时可提速至多 60" +" 倍。 (由 Victor Stinner 在 :issue:`24870` 中贡献。)" + +#: ../../whatsnew/3.6.rst:1800 +msgid "" +"The ASCII and the Latin1 encoders are now up to 3 times as fast for the " +"error handler ``surrogateescape`` (Contributed by Victor Stinner in " +":issue:`25227`)." +msgstr "" +"现在 ASCII 和 Latin1 解码器使用 ``surrogateescape`` 错误处理句柄时可提速至多 3 倍。 (由 Victor " +"Stinner 在 :issue:`25227` 中贡献。)" + +#: ../../whatsnew/3.6.rst:1804 +msgid "" +"The UTF-8 encoder is now up to 75 times as fast for error handlers " +"``ignore``, ``replace``, ``surrogateescape``, ``surrogatepass`` (Contributed" +" by Victor Stinner in :issue:`25267`)." +msgstr "" +"现在 UTF-8 解码器使用 ``ignore``, ``replace``, ``surrogateescape``, " +"``surrogatepass`` 错误处理句柄时可提速至多 75 倍。 (由 Victor Stinner 在 :issue:`25267` " +"中贡献。)" + +#: ../../whatsnew/3.6.rst:1808 +msgid "" +"The UTF-8 decoder is now up to 15 times as fast for error handlers " +"``ignore``, ``replace`` and ``surrogateescape`` (Contributed by Victor " +"Stinner in :issue:`25301`)." +msgstr "" +"现在 UTF-8 解码器使用 ``ignore``, ``replace`` 和 ``surrogateescape`` 错误处理句柄时可提速至多 15" +" 倍。 (由 Victor Stinner 在 :issue:`25301` 中贡献。)" + +#: ../../whatsnew/3.6.rst:1812 +msgid "" +"``bytes % args`` is now up to 2 times faster. (Contributed by Victor Stinner" +" in :issue:`25349`)." +msgstr "" +"现在 ``bytes % args`` 可提速至多 2 倍。 (由 Victor Stinner 在 :issue:`25349` 中贡献。)" + +#: ../../whatsnew/3.6.rst:1815 +msgid "" +"``bytearray % args`` is now between 2.5 and 5 times faster. (Contributed by " +"Victor Stinner in :issue:`25399`)." +msgstr "" +"现在 ``bytearray % args`` 可提速 2.5 至 5 倍。 (由 Victor Stinner 在 :issue:`25399` " +"中贡献。)" + +#: ../../whatsnew/3.6.rst:1818 +msgid "" +"Optimize :meth:`bytes.fromhex` and :meth:`bytearray.fromhex`: they are now " +"between 2x and 3.5x faster. (Contributed by Victor Stinner in " +":issue:`25401`)." +msgstr "" +"优化 :meth:`bytes.fromhex` 和 :meth:`bytearray.fromhex`: 现在它们获得了 2x 和 3.5x 的提速。" +" (由 Victor Stinner 在 :issue:`25401` 中贡献。)" + +#: ../../whatsnew/3.6.rst:1821 +msgid "" +"Optimize ``bytes.replace(b'', b'.')`` and ``bytearray.replace(b'', b'.')``: " +"up to 80% faster. (Contributed by Josh Snider in :issue:`26574`)." +msgstr "" +"优化 ``bytes.replace(b'', b'.')`` 和 ``bytearray.replace(b'', b'.')``: 提速至多 " +"80%。 (由 Josh Snider 在 :issue:`26574` 中贡献。)" + +#: ../../whatsnew/3.6.rst:1824 +msgid "" +"Allocator functions of the :c:func:`PyMem_Malloc` domain " +"(:c:data:`PYMEM_DOMAIN_MEM`) now use the :ref:`pymalloc memory allocator " +"` instead of :c:func:`malloc` function of the C library. The " +"pymalloc allocator is optimized for objects smaller or equal to 512 bytes " +"with a short lifetime, and use :c:func:`malloc` for larger memory blocks. " +"(Contributed by Victor Stinner in :issue:`26249`)." +msgstr "" + +#: ../../whatsnew/3.6.rst:1831 +msgid "" +":func:`pickle.load` and :func:`pickle.loads` are now up to 10% faster when " +"deserializing many small objects (Contributed by Victor Stinner in " +":issue:`27056`)." +msgstr "" +"现在 :func:`pickle.load` 和 :func:`pickle.loads` 在反序列化许多小对象时可提速多至 10%。 (由 " +"Victor Stinner 在 :issue:`27056` 中贡献。)" + +#: ../../whatsnew/3.6.rst:1835 +msgid "" +"Passing :term:`keyword arguments ` to a function has an " +"overhead in comparison with passing :term:`positional arguments `. Now in extension functions implemented with using Argument " +"Clinic this overhead is significantly decreased. (Contributed by Serhiy " +"Storchaka in :issue:`27574`)." +msgstr "" +"向函数传入 :term:`关键字参数 ` 相比传入 :term:`位置参数 ` 会有额外的开销。 现在对于使用 Argument Clinic 实现的扩展函数此开销已显著降低。 (由 Serhiy " +"Storchaka 在 :issue:`27574` 中贡献。)" + +#: ../../whatsnew/3.6.rst:1841 +msgid "" +"Optimized :func:`~glob.glob` and :func:`~glob.iglob` functions in the " +":mod:`glob` module; they are now about 3--6 times faster. (Contributed by " +"Serhiy Storchaka in :issue:`25596`)." +msgstr "" +"优化了 :mod:`glob` 模块中的 :func:`~glob.glob` 和 :func:`~glob.iglob` 函数;现在它们可提速约 3" +"--6 倍。 (由 Serhiy Storchaka 在 :issue:`25596` 中贡献。)" + +#: ../../whatsnew/3.6.rst:1845 +msgid "" +"Optimized globbing in :mod:`pathlib` by using :func:`os.scandir`; it is now " +"about 1.5--4 times faster. (Contributed by Serhiy Storchaka in " +":issue:`26032`)." +msgstr "" +"通过使用 :func:`os.scandir` 优化了 :mod:`pathlib` 中的 glob 操作;现在它可提速约 1.5--4 倍。 (由 " +"Serhiy Storchaka 在 :issue:`26032` 中贡献。)" + +#: ../../whatsnew/3.6.rst:1849 +msgid "" +":class:`xml.etree.ElementTree` parsing, iteration and deepcopy performance " +"has been significantly improved. (Contributed by Serhiy Storchaka in " +":issue:`25638`, :issue:`25873`, and :issue:`25869`.)" +msgstr "" +":class:`xml.etree.ElementTree` 解析、迭代和深拷贝效率已获得显著提升。 (由 Serhiy Storchaka 在 " +":issue:`25638`, :issue:`25873` 和 :issue:`25869` 中贡献。)" + +#: ../../whatsnew/3.6.rst:1854 +msgid "" +"Creation of :class:`fractions.Fraction` instances from floats and decimals " +"is now 2 to 3 times faster. (Contributed by Serhiy Storchaka in " +":issue:`25971`.)" +msgstr "" +"基于 float 和 decimal 创建 :class:`fractions.Fraction` 实例现已提速 2 至 3 倍。 (由 Serhiy " +"Storchaka 在 :issue:`25971` 中贡献。)" + +#: ../../whatsnew/3.6.rst:1860 +msgid "Build and C API Changes" +msgstr "构建和 C API 的改变" + +#: ../../whatsnew/3.6.rst:1862 +msgid "" +"Python now requires some C99 support in the toolchain to build. Most " +"notably, Python now uses standard integer types and macros in place of " +"custom macros like ``PY_LONG_LONG``. For more information, see :pep:`7` and " +":issue:`17884`." +msgstr "" +"Python 现在需要在工具链中提供一些 C99 支持来进行构建 。 最值得注意的是,Python 现在使用标准的整数类型和宏来代替像 " +"``PY_LONG_LONG`` 这样的自定义宏。 要获取更多信息,参见 :pep:`7` 和 :issue:`17884`。" + +#: ../../whatsnew/3.6.rst:1867 +msgid "" +"Cross-compiling CPython with the Android NDK and the Android API level set " +"to 21 (Android 5.0 Lollipop) or greater runs successfully. While Android is " +"not yet a supported platform, the Python test suite runs on the Android " +"emulator with only about 16 tests failures. See the Android meta-issue " +":issue:`26865`." +msgstr "" +"使用 Android NDK 和将 Android API 设为 21(Android 5.0 Lollipop)或更高级别的交叉编译 CPython " +"可成功运行。 虽然 Android 还不是一个受支持的平台,但 Python 测试套件在 Android 模拟器上运行时只有约 16 次测试失败。 " +"请参见 Android meta-issue :issue:`26865`。" + +#: ../../whatsnew/3.6.rst:1872 +msgid "" +"The ``--enable-optimizations`` configure flag has been added. Turning it on " +"will activate expensive optimizations like PGO. (Original patch by " +"Alecsandru Patrascu of Intel in :issue:`26359`.)" +msgstr "" +"已添加 ``--enable-optimizations`` 配置旗标 。 打开它将激活 PGO 等高消耗的优化功能。 (原始补丁由 Intel 的 " +"Alecsandru Patrascu 在 :issue:`26359` 中贡献。)" + +#: ../../whatsnew/3.6.rst:1876 +msgid "" +"The :term:`GIL ` must now be held when allocator " +"functions of :c:data:`PYMEM_DOMAIN_OBJ` (ex: :c:func:`PyObject_Malloc`) and " +":c:data:`PYMEM_DOMAIN_MEM` (ex: :c:func:`PyMem_Malloc`) domains are called." +msgstr "" + +#: ../../whatsnew/3.6.rst:1880 +msgid "" +"New :c:func:`Py_FinalizeEx` API which indicates if flushing buffered data " +"failed. (Contributed by Martin Panter in :issue:`5319`.)" +msgstr "" +"新增 :c:func:`Py_FinalizeEx` API 用于提示缓冲数据的刷新是否失败。 (由 Martin Panter 在 " +":issue:`5319` 中贡献。)" + +#: ../../whatsnew/3.6.rst:1884 +msgid "" +":c:func:`PyArg_ParseTupleAndKeywords` now supports :ref:`positional-only " +"parameters `. Positional-only parameters are " +"defined by empty names. (Contributed by Serhiy Storchaka in :issue:`26282`)." +msgstr "" +":c:func:`PyArg_ParseTupleAndKeywords` 现在支持 :ref:`仅限位置形参 `,仅限位置形参是不带名称定义的。 (由 Serhiy Storchaka 在 :issue:`26282` 中贡献。)" + +#: ../../whatsnew/3.6.rst:1889 +msgid "" +"``PyTraceback_Print`` method now abbreviates long sequences of repeated " +"lines as ``\"[Previous line repeated {count} more times]\"``. (Contributed " +"by Emanuel Barry in :issue:`26823`.)" +msgstr "" +"现在 ``PyTraceback_Print`` 方法会将由重复行组成的长序列缩写为 ``\"[Previous line repeated " +"{count} more times]\"``。 (由 Emanuel Barry 在 :issue:`26823` 中贡献。)" + +#: ../../whatsnew/3.6.rst:1893 +msgid "" +"The new :c:func:`PyErr_SetImportErrorSubclass` function allows for " +"specifying a subclass of :exc:`ImportError` to raise. (Contributed by Eric " +"Snow in :issue:`15767`.)" +msgstr "" +"新增的 :c:func:`PyErr_SetImportErrorSubclass` 函数允许指定一个要引发的 :exc:`ImportError` " +"子类。 (由 Eric Snow 在 :issue:`15767` 中贡献。)" + +#: ../../whatsnew/3.6.rst:1897 +msgid "" +"The new :c:func:`PyErr_ResourceWarning` function can be used to generate a " +":exc:`ResourceWarning` providing the source of the resource allocation. " +"(Contributed by Victor Stinner in :issue:`26567`.)" +msgstr "" +"新增的 :c:func:`PyErr_ResourceWarning` 函数可被用于生成提供资源分配来源的 " +":exc:`ResourceWarning`。(由 Victor Stinner 在 :issue:`26567` 中贡献。)" + +#: ../../whatsnew/3.6.rst:1901 +msgid "" +"The new :c:func:`PyOS_FSPath` function returns the file system " +"representation of a :term:`path-like object`. (Contributed by Brett Cannon " +"in :issue:`27186`.)" +msgstr "" +"新增的 :c:func:`PyOS_FSPath` 函数可返回一个 :term:`path-like object` 的文件系统表示形式。 (由 " +"Brett Cannon 在 :issue:`27186` 中贡献。)" + +#: ../../whatsnew/3.6.rst:1905 +msgid "" +"The :c:func:`PyUnicode_FSConverter` and :c:func:`PyUnicode_FSDecoder` " +"functions will now accept :term:`path-like objects `." +msgstr "" +"现在 :c:func:`PyUnicode_FSConverter` 和 :c:func:`PyUnicode_FSDecoder` 函数将接受 " +":term:`路径类对象 `。" + +#: ../../whatsnew/3.6.rst:1910 +msgid "Other Improvements" +msgstr "其他改进" + +#: ../../whatsnew/3.6.rst:1912 +msgid "" +"When :option:`--version` (short form: :option:`-V`) is supplied twice, " +"Python prints :data:`sys.version` for detailed information." +msgstr "" +"当 :option:`--version` (简短形式: :option:`-V`) 提供了两次时,Python 将针对细节信息打印 " +":data:`sys.version`。" + +#: ../../whatsnew/3.6.rst:1923 +msgid "Deprecated" +msgstr "弃用" + +#: ../../whatsnew/3.6.rst:1926 +msgid "New Keywords" +msgstr "新关键字" + +#: ../../whatsnew/3.6.rst:1928 +msgid "" +"``async`` and ``await`` are not recommended to be used as variable, class, " +"function or module names. Introduced by :pep:`492` in Python 3.5, they will" +" become proper keywords in Python 3.7. Starting in Python 3.6, the use of " +"``async`` or ``await`` as names will generate a :exc:`DeprecationWarning`." +msgstr "" +"不建议将 ``async`` 和 ``await`` 作为变量、类、函数或模块的名称。 它们通过 :pep:`492` 在 Python 3.5 " +"中被引入,并将在 Python 3.7 成为保留关键字。 从 Python 3.6 开始,使用 ``async`` 或 ``await`` " +"作为名称将会产生 :exc:`DeprecationWarning`。" + +#: ../../whatsnew/3.6.rst:1935 +msgid "Deprecated Python behavior" +msgstr "已弃用的 Python 行为" + +#: ../../whatsnew/3.6.rst:1937 +msgid "" +"Raising the :exc:`StopIteration` exception inside a generator will now " +"generate a :exc:`DeprecationWarning`, and will trigger a :exc:`RuntimeError`" +" in Python 3.7. See :ref:`whatsnew-pep-479` for details." +msgstr "" +"在生成器内部引发 :exc:`StopIteration` 异常现在将产生 :exc:`DeprecationWarning`,并将在 Python " +"3.7 中触发 :exc:`RuntimeError`。 详情参见 :ref:`whatsnew-pep-479`。" + +#: ../../whatsnew/3.6.rst:1941 +msgid "" +"The :meth:`__aiter__` method is now expected to return an asynchronous " +"iterator directly instead of returning an awaitable as previously. Doing the" +" former will trigger a :exc:`DeprecationWarning`. Backward compatibility " +"will be removed in Python 3.7. (Contributed by Yury Selivanov in " +":issue:`27243`.)" +msgstr "" +"现在 :meth:`__aiter__` 方法应当直接返回一个异步迭代器而非如之前那样返回一个可等待对象。 继续返回可等待对象将触发 " +":exc:`DeprecationWarning`。 向下兼容将在 Python 3.7 中被移除。 (由 Yury Selivanov 在 " +":issue:`27243` 中贡献。)" + +#: ../../whatsnew/3.6.rst:1947 +msgid "" +"A backslash-character pair that is not a valid escape sequence now generates" +" a :exc:`DeprecationWarning`. Although this will eventually become a " +":exc:`SyntaxError`, that will not be for several Python releases. " +"(Contributed by Emanuel Barry in :issue:`27364`.)" +msgstr "" +"现在如果一个反斜杠-字符对不是有效的转义序列则会产生 :exc:`DeprecationWarning`。 虽然这最终会改为 " +":exc:`SyntaxError`,但在近几个 Python 发布版都不会实施。 (由 Emanuel Barry 在 :issue:`27364` " +"中贡献。)" + +#: ../../whatsnew/3.6.rst:1952 +msgid "" +"When performing a relative import, falling back on ``__name__`` and " +"``__path__`` from the calling module when ``__spec__`` or ``__package__`` " +"are not defined now raises an :exc:`ImportWarning`. (Contributed by Rose " +"Ames in :issue:`25791`.)" +msgstr "" +"当执行相对导入时,现在当 ``__spec__`` 或 ``__package__`` 未被定义时从调用方模块回退到 ``__name__`` 和 " +"``__path__`` 会引发 :exc:`ImportWarning`。 (由 Rose Ames 在 :issue:`25791` 中贡献。)" + +#: ../../whatsnew/3.6.rst:1959 +msgid "Deprecated Python modules, functions and methods" +msgstr "已弃用的 Python 模块、函数和方法" + +#: ../../whatsnew/3.6.rst:1962 +msgid "asynchat" +msgstr "asynchat" + +#: ../../whatsnew/3.6.rst:1964 +msgid "" +"The :mod:`asynchat` has been deprecated in favor of :mod:`asyncio`. " +"(Contributed by Mariatta in :issue:`25002`.)" +msgstr "" + +#: ../../whatsnew/3.6.rst:1969 +msgid "asyncore" +msgstr "asyncore" + +#: ../../whatsnew/3.6.rst:1971 +msgid "" +"The :mod:`asyncore` has been deprecated in favor of :mod:`asyncio`. " +"(Contributed by Mariatta in :issue:`25002`.)" +msgstr "" + +#: ../../whatsnew/3.6.rst:1976 +msgid "dbm" +msgstr "dbm" + +#: ../../whatsnew/3.6.rst:1978 +msgid "" +"Unlike other :mod:`dbm` implementations, the :mod:`dbm.dumb` module creates " +"databases with the ``'rw'`` mode and allows modifying the database opened " +"with the ``'r'`` mode. This behavior is now deprecated and will be removed " +"in 3.8. (Contributed by Serhiy Storchaka in :issue:`21708`.)" +msgstr "" +"与其他 :mod:`dbm` 实现不同,:mod:`dbm.dumb` 模块会以 ``'rw'`` 模式创建数据库并允许修改以 ``'r'`` " +"模式打开的数据库。 此行为现在已被弃用并将在 3.8 中移除。 (由 Serhiy Storchaka 在 :issue:`21708` 中贡献。)" + +#: ../../whatsnew/3.6.rst:1988 +msgid "" +"The undocumented ``extra_path`` argument to the " +":class:`~distutils.Distribution` constructor is now considered deprecated " +"and will raise a warning if set. Support for this parameter will be " +"removed in a future Python release. See :issue:`27919` for details." +msgstr "" + +#: ../../whatsnew/3.6.rst:1995 +msgid "grp" +msgstr "grp" + +#: ../../whatsnew/3.6.rst:1997 +msgid "" +"The support of non-integer arguments in :func:`~grp.getgrgid` has been " +"deprecated. (Contributed by Serhiy Storchaka in :issue:`26129`.)" +msgstr "" +"在 :func:`~grp.getgrgid` 中对非整数参数的支持已被弃用。 (由 Serhiy Storchaka 在 :issue:`26129`" +" 中贡献。)" + +#: ../../whatsnew/3.6.rst:2005 +msgid "" +"The :meth:`importlib.machinery.SourceFileLoader.load_module` and " +":meth:`importlib.machinery.SourcelessFileLoader.load_module` methods are now" +" deprecated. They were the only remaining implementations of " +":meth:`importlib.abc.Loader.load_module` in :mod:`importlib` that had not " +"been deprecated in previous versions of Python in favour of " +":meth:`importlib.abc.Loader.exec_module`." +msgstr "" +"现在 :meth:`importlib.machinery.SourceFileLoader.load_module` 和 " +":meth:`importlib.machinery.SourcelessFileLoader.load_module` 方法已被弃用。 它们是 " +":mod:`importlib` 中仅存的尚未在之前的 Python 版本中被弃用并改为 " +":meth:`importlib.abc.Loader.exec_module` 的 " +":meth:`importlib.abc.Loader.load_module` 实现。" + +#: ../../whatsnew/3.6.rst:2012 +msgid "" +"The :class:`importlib.machinery.WindowsRegistryFinder` class is now " +"deprecated. As of 3.6.0, it is still added to :attr:`sys.meta_path` by " +"default (on Windows), but this may change in future releases." +msgstr "" + +#: ../../whatsnew/3.6.rst:2019 +msgid "" +"Undocumented support of general :term:`bytes-like objects ` as paths in :mod:`os` functions, :func:`compile` and similar " +"functions is now deprecated. (Contributed by Serhiy Storchaka in " +":issue:`25791` and :issue:`26754`.)" +msgstr "" +"未写入文档的对于将普通 :term:`字节型对象 ` 作为 :mod:`os` 的函数, " +":func:`compile` 及类似函数中的路径的支持现已被弃用。 (由 Serhiy Storchaka 在 :issue:`25791` 和 " +":issue:`26754` 中贡献。)" + +#: ../../whatsnew/3.6.rst:2027 +msgid "" +"Support for inline flags ``(?letters)`` in the middle of the regular " +"expression has been deprecated and will be removed in a future Python " +"version. Flags at the start of a regular expression are still allowed. " +"(Contributed by Serhiy Storchaka in :issue:`22493`.)" +msgstr "" +"对于在正则表达式中间使用内联旗标 ``(?letters)`` 的支持已被弃用并将在未来的 Python 版本中移除。 " +"在正则表达式开头的旗标仍然被允许。 (由 Serhiy Storchaka 在 :issue:`22493` 中贡献。)" + +#: ../../whatsnew/3.6.rst:2035 +msgid "" +"OpenSSL 0.9.8, 1.0.0 and 1.0.1 are deprecated and no longer supported. In " +"the future the :mod:`ssl` module will require at least OpenSSL 1.0.2 or " +"1.1.0." +msgstr "" +"OpenSSL 0.9.8, 1.0.0 和 1.0.1 已被弃用并不再受支持。 未来的 :mod:`ssl` 模块将至少需要 OpenSSL " +"1.0.2 或 1.1.0。" + +#: ../../whatsnew/3.6.rst:2039 +msgid "" +"SSL-related arguments like ``certfile``, ``keyfile`` and ``check_hostname`` " +"in :mod:`ftplib`, :mod:`http.client`, :mod:`imaplib`, :mod:`poplib`, and " +":mod:`smtplib` have been deprecated in favor of ``context``. (Contributed by" +" Christian Heimes in :issue:`28022`.)" +msgstr "" +":mod:`ftplib`, :mod:`http.client`, :mod:`imaplib`, :mod:`poplib` 和 " +":mod:`smtplib` 中的 SSL 相关参数如 ``certfile``, ``keyfile`` 和 ``check_hostname`` " +"已被弃用而应改用 ``context``。 (由 Christian Heimes 在 :issue:`28022` 中贡献。)" + +#: ../../whatsnew/3.6.rst:2044 +msgid "" +"A couple of protocols and functions of the :mod:`ssl` module are now " +"deprecated. Some features will no longer be available in future versions of " +"OpenSSL. Other features are deprecated in favor of a different API. " +"(Contributed by Christian Heimes in :issue:`28022` and :issue:`26470`.)" +msgstr "" +":mod:`ssl` 模块中的多个协议和函数现已被弃用。 某些特性在未来的 OpenSSL 版本中将不再可用。 另一些特性则因建议使用不同的 API " +"而被弃用。 (由 Christian Heimes 在 :issue:`28022` 和 :issue:`26470` 中贡献。)" + +#: ../../whatsnew/3.6.rst:2052 +msgid "" +"The :mod:`tkinter.tix` module is now deprecated. :mod:`tkinter` users " +"should use :mod:`tkinter.ttk` instead." +msgstr ":mod:`tkinter.tix` 模块现已被弃用。 :mod:`tkinter` 用户应当改用 :mod:`tkinter.ttk`。" + +#: ../../whatsnew/3.6.rst:2058 +msgid "" +"The ``pyvenv`` script has been deprecated in favour of ``python3 -m venv``. " +"This prevents confusion as to what Python interpreter ``pyvenv`` is " +"connected to and thus what Python interpreter will be used by the virtual " +"environment. (Contributed by Brett Cannon in :issue:`25154`.)" +msgstr "" +"``pyvenv`` 脚本已被弃用而应改用 ``python3 -m venv``。 这可以避免 ``pyvenv`` 容易混淆所连接的 Python " +"解释器从而导致弄错虚拟环境所使用的 Python 解释器这样的问题。 (由 Brett Cannon 在 :issue:`25154` 中贡献。)" + +#: ../../whatsnew/3.6.rst:2065 +msgid "Deprecated functions and types of the C API" +msgstr "已弃用的 C API 函数和类型" + +#: ../../whatsnew/3.6.rst:2067 +msgid "" +"Undocumented functions :c:func:`PyUnicode_AsEncodedObject`, " +":c:func:`PyUnicode_AsDecodedObject`, :c:func:`PyUnicode_AsEncodedUnicode` " +"and :c:func:`PyUnicode_AsDecodedUnicode` are deprecated now. Use the " +":ref:`generic codec based API ` instead." +msgstr "" + +#: ../../whatsnew/3.6.rst:2074 +msgid "Deprecated Build Options" +msgstr "弃用的构建选项" + +#: ../../whatsnew/3.6.rst:2076 +msgid "" +"The ``--with-system-ffi`` configure flag is now on by default on non-macOS " +"UNIX platforms. It may be disabled by using ``--without-system-ffi``, but " +"using the flag is deprecated and will not be accepted in Python 3.7. macOS " +"is unaffected by this change. Note that many OS distributors already use " +"the ``--with-system-ffi`` flag when building their system Python." +msgstr "" +"现在 ``--with-system-ffi`` 配置旗标在非 macOS UNIX 平台上将默认启用。 它可以通过 ``--without-" +"system-ffi`` 来禁用,但该旗标已被弃用并将在 Python 3.7 中不再被接受。 macOS 不会受此变化的影响。 请注意许多 OS " +"发布方在构建它们的系统 Python 时已经使用了 ``--with-system-ffi`` 旗标。" + +#: ../../whatsnew/3.6.rst:2084 +msgid "Removed" +msgstr "移除" + +#: ../../whatsnew/3.6.rst:2087 +msgid "API and Feature Removals" +msgstr "API 与特性的移除" + +#: ../../whatsnew/3.6.rst:2089 +msgid "" +"Unknown escapes consisting of ``'\\'`` and an ASCII letter in regular " +"expressions will now cause an error. In replacement templates for " +":func:`re.sub` they are still allowed, but deprecated. The " +":const:`re.LOCALE` flag can now only be used with binary patterns." +msgstr "" +"正则表达式中由 ``'\\'`` 和一个 ASCII 字母组成的未知转义序列现在将导致报错。 它们在 :func:`re.sub` " +"的替换模板中仍被允许,但已被弃用。 现在 :const:`re.LOCALE` 旗标只能用于二进制模式。" + +#: ../../whatsnew/3.6.rst:2094 +msgid "" +"``inspect.getmoduleinfo()`` was removed (was deprecated since CPython 3.3). " +":func:`inspect.getmodulename` should be used for obtaining the module name " +"for a given path. (Contributed by Yury Selivanov in :issue:`13248`.)" +msgstr "" +"``inspect.getmoduleinfo()`` 已被移除(自 CPython 3.3 起已被弃用)。 应当使用 " +":func:`inspect.getmodulename` 来获取对应于给定路径的模块名称。 (由 Yury Selivanov 在 " +":issue:`13248` 中贡献。)" + +#: ../../whatsnew/3.6.rst:2099 +msgid "" +"``traceback.Ignore`` class and ``traceback.usage``, ``traceback.modname``, " +"``traceback.fullmodname``, ``traceback.find_lines_from_code``, " +"``traceback.find_lines``, ``traceback.find_strings``, " +"``traceback.find_executable_lines`` methods were removed from the " +":mod:`traceback` module. They were undocumented methods deprecated since " +"Python 3.2 and equivalent functionality is available from private methods." +msgstr "" +"``traceback.Ignore`` 类和 ``traceback.usage``, ``traceback.modname``, " +"``traceback.fullmodname``, ``traceback.find_lines_from_code``, " +"``traceback.find_lines``, ``traceback.find_strings``, " +"``traceback.find_executable_lines`` 等方法已从 :mod:`traceback` 模块中移除。 它们是自 " +"Python 3.2 起即已被弃用的未写入文档的方法并可通过私有方法使用等价的功能。" + +#: ../../whatsnew/3.6.rst:2106 +msgid "" +"The ``tk_menuBar()`` and ``tk_bindForTraversal()`` dummy methods in " +":mod:`tkinter` widget classes were removed (corresponding Tk commands were " +"obsolete since Tk 4.0)." +msgstr "" +":mod:`tkinter` 控件类中的 ``tk_menuBar()`` 和 ``tk_bindForTraversal()`` " +"虚拟方法已被移除(相应的 Tk 命令自 Tk 4.0 起即已过时)。" + +#: ../../whatsnew/3.6.rst:2110 +msgid "" +"The :meth:`~zipfile.ZipFile.open` method of the :class:`zipfile.ZipFile` " +"class no longer supports the ``'U'`` mode (was deprecated since Python 3.4)." +" Use :class:`io.TextIOWrapper` for reading compressed text files in " +":term:`universal newlines` mode." +msgstr "" +":class:`zipfile.ZipFile` 类的 :meth:`~zipfile.ZipFile.open` 方法已不再支持 ``'U'`` " +"模式(自 Python 3.4 起已被弃用)。 请使用 :class:`io.TextIOWrapper` 以 :term:`universal " +"newlines` 模式读取压缩文本文件。" + +#: ../../whatsnew/3.6.rst:2115 +msgid "" +"The undocumented ``IN``, ``CDROM``, ``DLFCN``, ``TYPES``, ``CDIO``, and " +"``STROPTS`` modules have been removed. They had been available in the " +"platform specific ``Lib/plat-*/`` directories, but were chronically out of " +"date, inconsistently available across platforms, and unmaintained. The " +"script that created these modules is still available in the source " +"distribution at :source:`Tools/scripts/h2py.py`." +msgstr "" + +#: ../../whatsnew/3.6.rst:2122 +msgid "The deprecated ``asynchat.fifo`` class has been removed." +msgstr "已弃用的 ``asynchat.fifo`` 类现已被移除。" + +#: ../../whatsnew/3.6.rst:2126 +msgid "Porting to Python 3.6" +msgstr "移植到Python 3.6" + +#: ../../whatsnew/3.6.rst:2128 +msgid "" +"This section lists previously described changes and other bugfixes that may " +"require changes to your code." +msgstr "本节列出了先前描述的更改以及可能需要更改代码的其他错误修正." + +#: ../../whatsnew/3.6.rst:2132 +msgid "Changes in 'python' Command Behavior" +msgstr " 'python' 命令行为的变化" + +#: ../../whatsnew/3.6.rst:2134 +msgid "" +"The output of a special Python build with defined ``COUNT_ALLOCS``, " +"``SHOW_ALLOC_COUNT`` or ``SHOW_TRACK_COUNT`` macros is now off by default. " +"It can be re-enabled using the ``-X showalloccount`` option. It now outputs " +"to ``stderr`` instead of ``stdout``. (Contributed by Serhiy Storchaka in " +":issue:`23034`.)" +msgstr "" +"带有 ``COUNT_ALLOCS``, ``SHOW_ALLOC_COUNT`` 或 ``SHOW_TRACK_COUNT`` 宏定义的特殊 " +"Python 编译版的输出现在默认被关闭。 可以使用 ``-X showalloccount`` 选项重新启用它。 现在它将输出到 ``stderr``" +" 而不是 ``stdout``。 (由 Serhiy Storchaka 在 :issue:`23034` 中贡献。)" + +#: ../../whatsnew/3.6.rst:2142 +msgid "Changes in the Python API" +msgstr "Python API 的变化" + +#: ../../whatsnew/3.6.rst:2144 +msgid "" +":func:`open() ` will no longer allow combining the ``'U'`` mode flag " +"with ``'+'``. (Contributed by Jeff Balogh and John O'Connor in " +":issue:`2091`.)" +msgstr "" +":func:`open() ` 将不再允许组合使用 ``'U'`` 模式旗标与 ``'+'``。 (由 Jeff Balogh 和 John" +" O'Connor 在 :issue:`2091` 中贡献。)" + +#: ../../whatsnew/3.6.rst:2148 +msgid "" +":mod:`sqlite3` no longer implicitly commits an open transaction before DDL " +"statements." +msgstr ":mod:`sqlite3` 将不再隐式地在 DDL 语句之前提交未完成的事务。" + +#: ../../whatsnew/3.6.rst:2151 +msgid "" +"On Linux, :func:`os.urandom` now blocks until the system urandom entropy " +"pool is initialized to increase the security." +msgstr "在 Linux 上,现在 :func:`os.urandom` 会阻塞直到系统的 urandom 熵池被初始化以提升安全性。" + +#: ../../whatsnew/3.6.rst:2154 +msgid "" +"When :meth:`importlib.abc.Loader.exec_module` is defined, " +":meth:`importlib.abc.Loader.create_module` must also be defined." +msgstr "" +"当 :meth:`importlib.abc.Loader.exec_module` " +"被定义时,:meth:`importlib.abc.Loader.create_module` 也必须被定义。" + +#: ../../whatsnew/3.6.rst:2157 +msgid "" +":c:func:`PyErr_SetImportError` now sets :exc:`TypeError` when its **msg** " +"argument is not set. Previously only ``NULL`` was returned." +msgstr "" +"现在 :c:func:`PyErr_SetImportError` 当其 **msg** 参数未被设置时将设置 :exc:`TypeError`。 " +"在之前版本中仅返回 ``NULL``。" + +#: ../../whatsnew/3.6.rst:2160 +msgid "" +"The format of the ``co_lnotab`` attribute of code objects changed to support" +" a negative line number delta. By default, Python does not emit bytecode " +"with a negative line number delta. Functions using ``frame.f_lineno``, " +"``PyFrame_GetLineNumber()`` or ``PyCode_Addr2Line()`` are not affected. " +"Functions directly decoding ``co_lnotab`` should be updated to use a signed " +"8-bit integer type for the line number delta, but this is only required to " +"support applications using a negative line number delta. See " +"``Objects/lnotab_notes.txt`` for the ``co_lnotab`` format and how to decode " +"it, and see the :pep:`511` for the rationale." +msgstr "" + +#: ../../whatsnew/3.6.rst:2170 +msgid "" +"The functions in the :mod:`compileall` module now return booleans instead of" +" ``1`` or ``0`` to represent success or failure, respectively. Thanks to " +"booleans being a subclass of integers, this should only be an issue if you " +"were doing identity checks for ``1`` or ``0``. See :issue:`25768`." +msgstr "" +"现在 :mod:`compileall` 模块中的函数将返回布尔值而不是 ``1`` 或 ``0`` 来分别表示成功或失败。 " +"由于布尔值是整数的子类,这应当只有在你对 ``1`` 或 ``0`` 执行标识号检测时才会出现问题。 参见 :issue:`25768`。" + +#: ../../whatsnew/3.6.rst:2175 +msgid "" +"Reading the :attr:`~urllib.parse.SplitResult.port` attribute of " +":func:`urllib.parse.urlsplit` and :func:`~urllib.parse.urlparse` results now" +" raises :exc:`ValueError` for out-of-range values, rather than returning " +":const:`None`. See :issue:`20059`." +msgstr "" +"现在读取 :func:`urllib.parse.urlsplit` 和 :func:`~urllib.parse.urlparse` 结果的 " +":attr:`~urllib.parse.SplitResult.port` 属性对于超出范围的值将引发 :exc:`ValueError`,而不是返回" +" :const:`None`。 参见 :issue:`20059`。" + +#: ../../whatsnew/3.6.rst:2180 +msgid "" +"The :mod:`imp` module now raises a :exc:`DeprecationWarning` instead of " +":exc:`PendingDeprecationWarning`." +msgstr "" + +#: ../../whatsnew/3.6.rst:2183 +msgid "" +"The following modules have had missing APIs added to their :attr:`__all__` " +"attributes to match the documented APIs: :mod:`calendar`, :mod:`cgi`, " +":mod:`csv`, :mod:`~xml.etree.ElementTree`, :mod:`enum`, :mod:`fileinput`, " +":mod:`ftplib`, :mod:`logging`, :mod:`mailbox`, :mod:`mimetypes`, " +":mod:`optparse`, :mod:`plistlib`, :mod:`smtpd`, :mod:`subprocess`, " +":mod:`tarfile`, :mod:`threading` and :mod:`wave`. This means they will " +"export new symbols when ``import *`` is used. (Contributed by Joel Taddei " +"and Jacek Kołodziej in :issue:`23883`.)" +msgstr "" + +#: ../../whatsnew/3.6.rst:2194 +msgid "" +"When performing a relative import, if ``__package__`` does not compare equal" +" to ``__spec__.parent`` then :exc:`ImportWarning` is raised. (Contributed by" +" Brett Cannon in :issue:`25791`.)" +msgstr "" +"当执行相对导入时,如果 ``__package__`` 与 ``__spec__.parent`` 的比较结果不相等则会引发 " +":exc:`ImportWarning`。 (由 Brett Cannon 在 :issue:`25791` 中贡献。)" + +#: ../../whatsnew/3.6.rst:2198 +msgid "" +"When a relative import is performed and no parent package is known, then " +":exc:`ImportError` will be raised. Previously, :exc:`SystemError` could be " +"raised. (Contributed by Brett Cannon in :issue:`18018`.)" +msgstr "" +"当执行相对导入而上级包未知时,则会引发 :exc:`ImportError`。 在之前版本中,可能会引发 :exc:`SystemError`。 (由 " +"Brett Cannon 在 :issue:`18018` 中贡献。)" + +#: ../../whatsnew/3.6.rst:2202 +msgid "" +"Servers based on the :mod:`socketserver` module, including those defined in " +":mod:`http.server`, :mod:`xmlrpc.server` and :mod:`wsgiref.simple_server`, " +"now only catch exceptions derived from :exc:`Exception`. Therefore if a " +"request handler raises an exception like :exc:`SystemExit` or " +":exc:`KeyboardInterrupt`, :meth:`~socketserver.BaseServer.handle_error` is " +"no longer called, and the exception will stop a single-threaded server. " +"(Contributed by Martin Panter in :issue:`23430`.)" +msgstr "" +"基于 :mod:`socketserver` 模块的服务器,包括在 :mod:`http.server`, :mod:`xmlrpc.server` 和" +" :mod:`wsgiref.simple_server` 定义的服务器,现在将只捕获派生自 :exc:`Exception` 的异常。 " +"因此如果一个请求处理句柄引发了 :exc:`SystemExit` 或 :exc:`KeyboardInterrupt` " +"之类的异常,:meth:`~socketserver.BaseServer.handle_error` 不再会被调用,异常将会停止单线程的服务器。 (由" +" Martin Panter 在 :issue:`23430` 中贡献。)" + +#: ../../whatsnew/3.6.rst:2211 +msgid "" +":func:`spwd.getspnam` now raises a :exc:`PermissionError` instead of " +":exc:`KeyError` if the user doesn't have privileges." +msgstr "" +"如果用户没有权限, :func:`spwd.getspnam` 现在会抛出 :exc:`PermissionError` 而非之前的 " +":exc:`KeyError` 。" + +#: ../../whatsnew/3.6.rst:2214 +msgid "" +"The :meth:`socket.socket.close` method now raises an exception if an error " +"(e.g. ``EBADF``) was reported by the underlying system call. (Contributed by" +" Martin Panter in :issue:`26685`.)" +msgstr "" +"现在 :meth:`socket.socket.close` 方法当下层系统调用报告错误 (例如 ``EBADF``) 时将会引发一个异常。 (由 " +"Martin Panter 在 :issue:`26685` 中贡献。)" + +#: ../../whatsnew/3.6.rst:2218 +msgid "" +"The *decode_data* argument for the :class:`smtpd.SMTPChannel` and " +":class:`smtpd.SMTPServer` constructors is now ``False`` by default. This " +"means that the argument passed to :meth:`~smtpd.SMTPServer.process_message` " +"is now a bytes object by default, and ``process_message()`` will be passed " +"keyword arguments. Code that has already been updated in accordance with the" +" deprecation warning generated by 3.5 will not be affected." +msgstr "" + +#: ../../whatsnew/3.6.rst:2226 +msgid "" +"All optional arguments of the :func:`~json.dump`, :func:`~json.dumps`, " +":func:`~json.load` and :func:`~json.loads` functions and " +":class:`~json.JSONEncoder` and :class:`~json.JSONDecoder` class constructors" +" in the :mod:`json` module are now :ref:`keyword-only `. (Contributed by Serhiy Storchaka in :issue:`18726`.)" +msgstr "" +"现在 :mod:`json` 模块中 :func:`~json.dump`, :func:`~json.dumps`, " +":func:`~json.load` 和 :func:`~json.loads` 函数以及 :class:`~json.JSONEncoder` 和 " +":class:`~json.JSONDecoder` 类构造器的所有可选参数都是 :ref:`仅限关键字参数 `。 (由 Serhiy Storchaka 在 :issue:`18726` 中贡献。)" + +#: ../../whatsnew/3.6.rst:2233 +msgid "" +"Subclasses of :class:`type` which don't override ``type.__new__`` may no " +"longer use the one-argument form to get the type of an object." +msgstr ":class:`type` 的子类如果未重载 ``type.__new__``,将不再能使用一个参数的形式来获取对象的类型。" + +#: ../../whatsnew/3.6.rst:2236 +msgid "" +"As part of :pep:`487`, the handling of keyword arguments passed to " +":class:`type` (other than the metaclass hint, ``metaclass``) is now " +"consistently delegated to :meth:`object.__init_subclass__`. This means that " +":meth:`type.__new__` and :meth:`type.__init__` both now accept arbitrary " +"keyword arguments, but :meth:`object.__init_subclass__` (which is called " +"from :meth:`type.__new__`) will reject them by default. Custom metaclasses " +"accepting additional keyword arguments will need to adjust their calls to " +":meth:`type.__new__` (whether direct or via :class:`super`) accordingly." +msgstr "" +"作为 :pep:`487` 的一部分,对传递给 :class:`type` 的关键字参数的处理(元类提示 ``metaclass`` " +"除外)现在统一委托给 :meth:`object.__init_subclass__`。 这意味着 :meth:`type.__new__` 和 " +":meth:`type.__init__` 现在都接受任意的关键字参数,但 :meth:`object.__init_subclass__` (从 " +":meth:`type.__new__` 调用)默认将拒绝它们。 接受额外关键字参数的自定义元类需要相应调整对 :meth:`type.__new__`" +" 的调用(无论是直接调用还是通过 :class:`super` 间接调用)。" + +#: ../../whatsnew/3.6.rst:2245 +msgid "" +"In :class:`distutils.command.sdist.sdist`, the ``default_format`` attribute " +"has been removed and is no longer honored. Instead, the gzipped tarfile " +"format is the default on all platforms and no platform-specific selection is" +" made. In environments where distributions are built on Windows and zip " +"distributions are required, configure the project with a ``setup.cfg`` file " +"containing the following:" +msgstr "" + +#: ../../whatsnew/3.6.rst:2258 +msgid "" +"This behavior has also been backported to earlier Python versions by " +"Setuptools 26.0.0." +msgstr "此行为已通过 Setuptools 26.0.0 反向移植到更早的 Python 版本中。" + +#: ../../whatsnew/3.6.rst:2261 +msgid "" +"In the :mod:`urllib.request` module and the " +":meth:`http.client.HTTPConnection.request` method, if no Content-Length " +"header field has been specified and the request body is a file object, it is" +" now sent with HTTP 1.1 chunked encoding. If a file object has to be sent to" +" a HTTP 1.0 server, the Content-Length value now has to be specified by the " +"caller. (Contributed by Demian Brecht and Rolf Krahl with tweaks from Martin" +" Panter in :issue:`12319`.)" +msgstr "" +"在 :mod:`urllib.request` 模块和 :meth:`http.client.HTTPConnection.request` " +"方法中,如果没有指定 Content-Length 标头字段并且请求体是一个文件对象,现在它将使用 HTTP 1.1 分块编码格式发送。 " +"如果必须要将一个文件对象发送给 HTTP 1.0 服务器,那么现在必须由调用方指定 Content-Length 值。 (由 Demian Brecht" +" 和 Rolf Krahl 在 :issue:`12319` 中贡献并由 Martin Panter 进行修改。)" + +#: ../../whatsnew/3.6.rst:2270 +msgid "" +"The :class:`~csv.DictReader` now returns rows of type " +":class:`~collections.OrderedDict`. (Contributed by Steve Holden in " +":issue:`27842`.)" +msgstr "" +"现在 :class:`~csv.DictReader` 将返回类型为 :class:`~collections.OrderedDict` 的行。 (由 " +"Steve Holden 在 :issue:`27842` 中贡献。)" + +#: ../../whatsnew/3.6.rst:2274 +msgid "" +"The :const:`crypt.METHOD_CRYPT` will no longer be added to ``crypt.methods``" +" if unsupported by the platform. (Contributed by Victor Stinner in " +":issue:`25287`.)" +msgstr "" +":const:`crypt.METHOD_CRYPT` 如果不受平台支持将不再被添加到 ``crypt.methods``。 (由 Victor " +"Stinner 在 :issue:`25287` 中贡献。)" + +#: ../../whatsnew/3.6.rst:2282 +msgid "" +"On Linux, :func:`ctypes.util.find_library` now looks in ``LD_LIBRARY_PATH`` " +"for shared libraries. (Contributed by Vinay Sajip in :issue:`9998`.)" +msgstr "" +"在 Linux 上,:func:`ctypes.util.find_library` 现在会到 ``LD_LIBRARY_PATH`` 中查找共享库。 " +"(由 Vinay Sajip 在 :issue:`9998` 中贡献。)" + +#: ../../whatsnew/3.6.rst:2286 +msgid "" +"The :class:`imaplib.IMAP4` class now handles flags containing the ``']'`` " +"character in messages sent from the server to improve real-world " +"compatibility. (Contributed by Lita Cho in :issue:`21815`.)" +msgstr "" +":class:`imaplib.IMAP4` 类现在可以处理服务器发送的消息中包含 ``']'`` 字符的旗标,以改善在现实世界中的兼容性。 (由 " +"Lita Cho 在 :issue:`21815` 中贡献。)" + +#: ../../whatsnew/3.6.rst:2291 +msgid "" +"The :func:`mmap.write() ` function now returns the number of " +"bytes written like other write methods. (Contributed by Jakub Stasiak in " +":issue:`26335`.)" +msgstr "" +"现在 :func:`mmap.write() ` 函数将像其他写入方法一样返回写入的字节数。 (由 Jakub Stasiak " +"在 :issue:`26335` 中贡献。)" + +#: ../../whatsnew/3.6.rst:2295 +msgid "" +"The :func:`pkgutil.iter_modules` and :func:`pkgutil.walk_packages` functions" +" now return :class:`~pkgutil.ModuleInfo` named tuples. (Contributed by " +"Ramchandra Apte in :issue:`17211`.)" +msgstr "" +"现在 :func:`pkgutil.iter_modules` 和 :func:`pkgutil.walk_packages` 函数将返回 " +":class:`~pkgutil.ModuleInfo` 具名元组。 (由 Ramchandra Apte 在 :issue:`17211` 中贡献。)" + +#: ../../whatsnew/3.6.rst:2299 +msgid "" +":func:`re.sub` now raises an error for invalid numerical group references in" +" replacement templates even if the pattern is not found in the string. The " +"error message for invalid group references now includes the group index and " +"the position of the reference. (Contributed by SilentGhost, Serhiy Storchaka" +" in :issue:`25953`.)" +msgstr "" +"现在 :func:`re.sub` 即使未在字符串中找到模式也会针对替换模板中无效的数字分组引用引发错误。 " +"针对无效分组引用的错误消息现在将包括分组索引和引用位置。 (由 SilentGhost, Serhiy Storchaka 在 " +":issue:`25953` 中贡献。)" + +#: ../../whatsnew/3.6.rst:2305 +msgid "" +":class:`zipfile.ZipFile` will now raise :exc:`NotImplementedError` for " +"unrecognized compression values. Previously a plain :exc:`RuntimeError` was" +" raised. Additionally, calling :class:`~zipfile.ZipFile` methods on a " +"closed ZipFile or calling the :meth:`~zipfile.ZipFile.write` method on a " +"ZipFile created with mode ``'r'`` will raise a :exc:`ValueError`. " +"Previously, a :exc:`RuntimeError` was raised in those scenarios." +msgstr "" +"现在 :class:`zipfile.ZipFile` 对于无法识别的压缩值将引发 :exc:`NotImplementedError`。 " +"在之前版本中是引发简单的 :exc:`RuntimeError`。 此外,在已关闭的 ZipFile 上调用 " +":class:`~zipfile.ZipFile` 或者在使用 ``'r'`` 模式创建的 ZipFile 上调用 " +":meth:`~zipfile.ZipFile.write` 将引发 :exc:`ValueError`。 在之前版本中,对于这些场景是引发 " +":exc:`RuntimeError`。" + +#: ../../whatsnew/3.6.rst:2312 +msgid "" +"when custom metaclasses are combined with zero-argument :func:`super` or " +"direct references from methods to the implicit ``__class__`` closure " +"variable, the implicit ``__classcell__`` namespace entry must now be passed " +"up to ``type.__new__`` for initialisation. Failing to do so will result in a" +" :exc:`DeprecationWarning` in Python 3.6 and a :exc:`RuntimeError` in Python" +" 3.8." +msgstr "" +"当自定义元类与零参数的 :func:`super` 或从方法到隐式的 ``__class__`` 闭包变量的直接引用相结合时,隐式的 " +"``__classcell__`` 命名空间条目现在必须传到 ``type.__new__`` 进行初始化。 如果不这样做那么在 Python 3.6 " +"中将会导致 :exc:`DeprecationWarning` 而在 Python 3.8 中将会导致 :exc:`RuntimeError`。" + +#: ../../whatsnew/3.6.rst:2319 +msgid "" +"With the introduction of :exc:`ModuleNotFoundError`, import system consumers" +" may start expecting import system replacements to raise that more specific " +"exception when appropriate, rather than the less-specific " +":exc:`ImportError`. To provide future compatibility with such consumers, " +"implementors of alternative import systems that completely replace " +":func:`__import__` will need to update their implementations to raise the " +"new subclass when a module can't be found at all. Implementors of compliant " +"plugins to the default import system shouldn't need to make any changes, as " +"the default import system will raise the new subclass when appropriate." +msgstr "" +"随着 :exc:`ModuleNotFoundError` " +"的引入,导入系统的消费方可能会开始期望导入系统的替代品在能适当的时候引发更具体的异常,而非不够具体的 :exc:`ImportError`。 " +"为了在未来向此类消费方提供兼容性,完全取代 :func:`__import__` " +"的替代导入系统的实现者需要更新其实现以便在完全未找到模块时引发新的子类。 " +"兼容默认导入系统的插件的实现者不需要做任何更改,因为默认导入系统会在适当的时候引发新的子类。" + +#: ../../whatsnew/3.6.rst:2331 +msgid "Changes in the C API" +msgstr "C API 的变化" + +#: ../../whatsnew/3.6.rst:2333 +msgid "" +"The :c:func:`PyMem_Malloc` allocator family now uses the :ref:`pymalloc " +"allocator ` rather than the system :c:func:`malloc`. Applications " +"calling :c:func:`PyMem_Malloc` without holding the GIL can now crash. Set " +"the :envvar:`PYTHONMALLOC` environment variable to ``debug`` to validate the" +" usage of memory allocators in your application. See :issue:`26249`." +msgstr "" +"现在 :c:func:`PyMem_Malloc` 分配器族将使用 :ref:`pymalloc 分配器 ` 而不是系统 " +":c:func:`malloc`。 调用 :c:func:`PyMem_Malloc` 时未持有 GIL 的应用程序现在可能发生崩溃。 请将 " +":envvar:`PYTHONMALLOC` 环境变量设为 ``debug`` 以便在你的应用程序中验证内存分配器的使用。 参见 " +":issue:`26249`。" + +#: ../../whatsnew/3.6.rst:2339 +msgid "" +":c:func:`Py_Exit` (and the main interpreter) now override the exit status " +"with 120 if flushing buffered data failed. See :issue:`5319`." +msgstr "" +"现在如果缓冲数据刷新失败 :c:func:`Py_Exit` (以及主解释器) 会将退出状态重写为 120。 参见 :issue:`5319`。" + +#: ../../whatsnew/3.6.rst:2344 +msgid "CPython bytecode changes" +msgstr "CPython 字节码的改变" + +#: ../../whatsnew/3.6.rst:2346 +msgid "" +"There have been several major changes to the :term:`bytecode` in Python 3.6." +msgstr "在 Python 3.6 中对 :term:`bytecode` 进行了一些重大修改。" + +#: ../../whatsnew/3.6.rst:2348 +msgid "" +"The Python interpreter now uses a 16-bit wordcode instead of bytecode. " +"(Contributed by Demur Rumed with input and reviews from Serhiy Storchaka and" +" Victor Stinner in :issue:`26647` and :issue:`28050`.)" +msgstr "" +"Python 解释器现在使用 16 位字代码而不是字节代码。 (由 Demur Rumed 在 :issue:`26647` 和 " +":issue:`28050` 中贡献并得到来自 Serhiy Storchaka 和 Victor Stinner 的协助和评估。)" + +#: ../../whatsnew/3.6.rst:2352 +msgid "" +"The new :opcode:`FORMAT_VALUE` and :opcode:`BUILD_STRING` opcodes as part of" +" the :ref:`formatted string literal ` implementation. " +"(Contributed by Eric Smith in :issue:`25483` and Serhiy Storchaka in " +":issue:`27078`.)" +msgstr "" +"新增 :opcode:`FORMAT_VALUE` 和 :opcode:`BUILD_STRING` 操作码作为 :ref:`格式化字符串字面值 " +"` 实现的组成部分。 (由 Eric Smith 在 :issue:`25483` 以及 Serhiy " +"Storchaka 在 :issue:`27078` 中贡献。)" + +#: ../../whatsnew/3.6.rst:2357 +msgid "" +"The new :opcode:`BUILD_CONST_KEY_MAP` opcode to optimize the creation of " +"dictionaries with constant keys. (Contributed by Serhiy Storchaka in " +":issue:`27140`.)" +msgstr "" +"新增的 :opcode:`BUILD_CONST_KEY_MAP` 操作码用于优化具有常量键的字典的创建。 (由 Serhiy Storchaka 在 " +":issue:`27140` 中创建。)" + +#: ../../whatsnew/3.6.rst:2361 +msgid "" +"The function call opcodes have been heavily reworked for better performance " +"and simpler implementation. The :opcode:`MAKE_FUNCTION`, " +":opcode:`CALL_FUNCTION`, :opcode:`CALL_FUNCTION_KW` and " +":opcode:`BUILD_MAP_UNPACK_WITH_CALL` opcodes have been modified, the new " +":opcode:`CALL_FUNCTION_EX` and :opcode:`BUILD_TUPLE_UNPACK_WITH_CALL` have " +"been added, and ``CALL_FUNCTION_VAR``, ``CALL_FUNCTION_VAR_KW`` and " +"``MAKE_CLOSURE`` opcodes have been removed. (Contributed by Demur Rumed in " +":issue:`27095`, and Serhiy Storchaka in :issue:`27213`, :issue:`28257`.)" +msgstr "" +"函数调用操作码进行了大幅改进以提升效率并简化实现。 :opcode:`MAKE_FUNCTION`, :opcode:`CALL_FUNCTION`, " +":opcode:`CALL_FUNCTION_KW` 和 :opcode:`BUILD_MAP_UNPACK_WITH_CALL` " +"操作码已被修改,新增了 :opcode:`CALL_FUNCTION_EX` 和 " +":opcode:`BUILD_TUPLE_UNPACK_WITH_CALL`,并移除了 ``CALL_FUNCTION_VAR``, " +"``CALL_FUNCTION_VAR_KW`` 和 ``MAKE_CLOSURE`` 操作码。 (由 Demur Rumed 在 " +":issue:`27095` 中,以及 Serhiy Storchaka 在 :issue:`27213`, :issue:`28257` 中贡献。)" + +#: ../../whatsnew/3.6.rst:2372 +msgid "" +"The new :opcode:`SETUP_ANNOTATIONS` and :opcode:`STORE_ANNOTATION` opcodes " +"have been added to support the new :term:`variable annotation` syntax. " +"(Contributed by Ivan Levkivskyi in :issue:`27985`.)" +msgstr "" +"新增了 :opcode:`SETUP_ANNOTATIONS` 和 :opcode:`STORE_ANNOTATION` 操作码以支持新的 " +":term:`variable annotation` 语法。 (由 Ivan Levkivskyi 在 :issue:`27985` 中贡献。)" + +#: ../../whatsnew/3.6.rst:2378 +msgid "Notable changes in Python 3.6.2" +msgstr "Python 3.6.2 中的重要变化" + +#: ../../whatsnew/3.6.rst:2381 +msgid "New ``make regen-all`` build target" +msgstr "新增 ``make regen-all`` 构建目标" + +#: ../../whatsnew/3.6.rst:2383 +msgid "" +"To simplify cross-compilation, and to ensure that CPython can reliably be " +"compiled without requiring an existing version of Python to already be " +"available, the autotools-based build system no longer attempts to implicitly" +" recompile generated files based on file modification times." +msgstr "" +"为了简化交叉编译,并确保 CPython 能够可靠地编译而不需要已存在可用的 Python 版本,基于 autotools " +"的构建系统将不再尝试根据文件修改时间隐式地重新编译已生成的文件。" + +#: ../../whatsnew/3.6.rst:2388 +msgid "" +"Instead, a new ``make regen-all`` command has been added to force " +"regeneration of these files when desired (e.g. after an initial version of " +"Python has already been built based on the pregenerated versions)." +msgstr "" +"取而代之的是,新增了一个 ``make regen-all`` 命令以便在需要时强制重新生成这些文件(例如在基于预生成版本构建了 Python " +"的初始版本之后)。" + +#: ../../whatsnew/3.6.rst:2392 +msgid "" +"More selective regeneration targets are also defined - see " +":source:`Makefile.pre.in` for details." +msgstr "还定义了其他一些更具选择性的重生成目标 —— 详情参见 :source:`Makefile.pre.in`。" + +#: ../../whatsnew/3.6.rst:2395 ../../whatsnew/3.6.rst:2408 +msgid "(Contributed by Victor Stinner in :issue:`23404`.)" +msgstr "(由 Victor Stinner 在 :issue:`23404` 中贡献。)" + +#: ../../whatsnew/3.6.rst:2401 +msgid "Removal of ``make touch`` build target" +msgstr "移除了 ``make touch`` 构建目标" + +#: ../../whatsnew/3.6.rst:2403 +msgid "" +"The ``make touch`` build target previously used to request implicit " +"regeneration of generated files by updating their modification times has " +"been removed." +msgstr "之前用于通过更新生成文件的修改时间来请求隐式的重新生成这些文件的 ``make touch`` 构建目标已被移除。" + +#: ../../whatsnew/3.6.rst:2406 +msgid "It has been replaced by the new ``make regen-all`` target." +msgstr "它已被新的 ``make regen-all`` 目标所替代。" + +#: ../../whatsnew/3.6.rst:2414 +msgid "Notable changes in Python 3.6.4" +msgstr "Python 3.6.4 中的重要变化" + +#: ../../whatsnew/3.6.rst:2416 +msgid "" +"The ``PyExc_RecursionErrorInst`` singleton that was part of the public API " +"has been removed as its members being never cleared may cause a segfault " +"during finalization of the interpreter. (Contributed by Xavier de Gaye in " +":issue:`22898` and :issue:`30697`.)" +msgstr "" +"曾经作为 API 一部分的 ``PyExc_RecursionErrorInst`` " +"单例已被移除,因为它的成员永远不会被清理,可能在解释器的最终化过程中导致段错误。 (由 Xavier de Gaye 在 :issue:`22898` " +"和 :issue:`30697` 中贡献。)" + +#: ../../whatsnew/3.6.rst:2423 +msgid "Notable changes in Python 3.6.5" +msgstr "Python 3.6.5 中的重要变化" + +#: ../../whatsnew/3.6.rst:2425 +msgid "" +"The :func:`locale.localeconv` function now sets temporarily the ``LC_CTYPE``" +" locale to the ``LC_NUMERIC`` locale in some cases. (Contributed by Victor " +"Stinner in :issue:`31900`.)" +msgstr "" +"在某些情况下 :func:`locale.localeconv` 函数现在会临时将 ``LC_CTYPE`` 语言区域设为 ``LC_NUMERIC``" +" 语言区域。 (由 Victor Stinner 在 :issue:`31900` 中贡献。)" + +#: ../../whatsnew/3.6.rst:2430 +msgid "Notable changes in Python 3.6.7" +msgstr "Python 3.6.7 中的重要变化" + +#: ../../whatsnew/3.6.rst:2432 +msgid "" +"In 3.6.7 the :mod:`tokenize` module now implicitly emits a ``NEWLINE`` token" +" when provided with input that does not have a trailing new line. This " +"behavior now matches what the C tokenizer does internally. (Contributed by " +"Ammar Askar in :issue:`33899`.)" +msgstr "" +"在 3.6.7 中当提供不带末尾换行符的输入时 :mod:`tokenize` 模块现在会隐式地发出 ``NEWLINE`` 形符。 此行为现在已与 C" +" 分词器的内部行为相匹配。 (由 Ammar Askar 在 :issue:`33899` 中贡献。)" + +#: ../../whatsnew/3.6.rst:2438 +msgid "Notable changes in Python 3.6.10" +msgstr "Python 3.6.10 中的重要变化" + +#: ../../whatsnew/3.6.rst:2440 +msgid "" +"Due to significant security concerns, the *reuse_address* parameter of " +":meth:`asyncio.loop.create_datagram_endpoint` is no longer supported. This " +"is because of the behavior of the socket option ``SO_REUSEADDR`` in UDP. For" +" more details, see the documentation for " +"``loop.create_datagram_endpoint()``. (Contributed by Kyle Stanley, Antoine " +"Pitrou, and Yury Selivanov in :issue:`37228`.)" +msgstr "" +"出于重要的安全性考量,:meth:`asyncio.loop.create_datagram_endpoint` 的 *reuse_address* " +"形参不再被支持。 这是由 UDP 中的套接字选项 ``SO_REUSEADDR`` 的行为导致的。 更多细节请参阅 " +"``loop.create_datagram_endpoint()`` 的文档。 (由 Kyle Stanley, Antoine Pitrou 和 " +"Yury Selivanov 在 :issue:`37228` 中贡献。。)" + +#: ../../whatsnew/3.6.rst:2448 +msgid "Notable changes in Python 3.6.13" +msgstr "Python 3.6.13 中的重要变化" + +#: ../../whatsnew/3.6.rst:2450 +msgid "" +"Earlier Python versions allowed using both ``;`` and ``&`` as query " +"parameter separators in :func:`urllib.parse.parse_qs` and " +":func:`urllib.parse.parse_qsl`. Due to security concerns, and to conform " +"with newer W3C recommendations, this has been changed to allow only a single" +" separator key, with ``&`` as the default. This change also affects " +":func:`cgi.parse` and :func:`cgi.parse_multipart` as they use the affected " +"functions internally. For more details, please see their respective " +"documentation. (Contributed by Adam Goldschmidt, Senthil Kumaran and Ken Jin" +" in :issue:`42967`.)" +msgstr "" +"早先的 Python 版本允许使用 ``;`` 和 ``&`` 作为 :func:`urllib.parse.parse_qs` 和 " +":func:`urllib.parse.parse_qsl` 中 query 形参的分隔键。 出于安全考虑,也为了遵循更新的 W3C " +"推荐设置,这已被改为只允许单个分隔键,默认为 ``&``。 这一改变还会影响 :func:`cgi.parse` 和 " +":func:`cgi.parse_multipart` 因为它们在内部使用了受影响的函数。 要了解更多细节,请查看它们各自的文档。 (由 Adam " +"Goldschmidt, Senthil Kumaran 和 Ken Jin 在 :issue:`42967` 中贡献。)" diff --git a/whatsnew/3.7.po b/whatsnew/3.7.po new file mode 100644 index 000000000..580e7a3b4 --- /dev/null +++ b/whatsnew/3.7.po @@ -0,0 +1,4550 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) 2001-2022, Python Software Foundation +# This file is distributed under the same license as the Python package. +# FIRST AUTHOR , YEAR. +# +# Translators: +# Kaizhao Zhang , 2018 +# ww song , 2018 +# jacky , 2019 +# ppcfish , 2019 +# Freesand Leo , 2022 +# +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: Python 3.9\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2022-11-04 14:34+0000\n" +"PO-Revision-Date: 2018-06-29 21:15+0000\n" +"Last-Translator: Freesand Leo , 2022\n" +"Language-Team: Chinese (China) (https://www.transifex.com/python-doc/teams/5390/zh_CN/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: zh_CN\n" +"Plural-Forms: nplurals=1; plural=0;\n" + +#: ../../whatsnew/3.7.rst:3 +msgid "What's New In Python 3.7" +msgstr "Python 3.7 有什么新变化" + +#: ../../whatsnew/3.7.rst:0 +msgid "Editor" +msgstr "编者" + +#: ../../whatsnew/3.7.rst:5 +msgid "Elvis Pranskevichus " +msgstr "Elvis Pranskevichus " + +#: ../../whatsnew/3.7.rst:47 +msgid "" +"This article explains the new features in Python 3.7, compared to 3.6. " +"Python 3.7 was released on June 27, 2018. For full details, see the " +":ref:`changelog `." +msgstr "" +"本文解释了 Python 3.7 相比 3.6 的新增特性。Python 3.7 于 2018 年 6 月 27 日发布。完整的详情可参阅 " +":ref:`更新日志 `。" + +#: ../../whatsnew/3.7.rst:53 +msgid "Summary -- Release Highlights" +msgstr "摘要 - 发布重点" + +#: ../../whatsnew/3.7.rst:58 +msgid "New syntax features:" +msgstr "新的语法特性:" + +#: ../../whatsnew/3.7.rst:60 +msgid "" +":ref:`PEP 563 `, postponed evaluation of type " +"annotations." +msgstr ":ref:`PEP 563 `,类型标注延迟求值。" + +#: ../../whatsnew/3.7.rst:62 +msgid "Backwards incompatible syntax changes:" +msgstr "向后不兼容的语法更改:" + +#: ../../whatsnew/3.7.rst:64 +msgid ":keyword:`async` and :keyword:`await` are now reserved keywords." +msgstr ":keyword:`async` 和 :keyword:`await` 现在是保留的关键字。" + +#: ../../whatsnew/3.7.rst:66 +msgid "New library modules:" +msgstr "新的库模块:" + +#: ../../whatsnew/3.7.rst:68 +msgid "" +":mod:`contextvars`: :ref:`PEP 567 -- Context Variables `" +msgstr ":mod:`contextvars`: :ref:`PEP 567 -- 上下文变量 `" + +#: ../../whatsnew/3.7.rst:69 +msgid ":mod:`dataclasses`: :ref:`PEP 557 -- Data Classes `" +msgstr ":mod:`dataclasses`: :ref:`PEP 557 -- 数据类 `" + +#: ../../whatsnew/3.7.rst:70 +msgid ":ref:`whatsnew37_importlib_resources`" +msgstr ":ref:`whatsnew37_importlib_resources`" + +#: ../../whatsnew/3.7.rst:72 +msgid "New built-in features:" +msgstr "新的内置特性:" + +#: ../../whatsnew/3.7.rst:74 +msgid "" +":ref:`PEP 553 `, the new :func:`breakpoint` function." +msgstr ":ref:`PEP 553 `, 新的 :func:`breakpoint` 函数。" + +#: ../../whatsnew/3.7.rst:76 +msgid "Python data model improvements:" +msgstr "对 Python 数据模型的改进:" + +#: ../../whatsnew/3.7.rst:78 +msgid "" +":ref:`PEP 562 `, customization of access to module " +"attributes." +msgstr ":ref:`PEP 562 `, 自定义可访问的模块属性。" + +#: ../../whatsnew/3.7.rst:81 +msgid "" +":ref:`PEP 560 `, core support for typing module and " +"generic types." +msgstr ":ref:`PEP 560 `, typing模块和泛型类型的核心支持。" + +#: ../../whatsnew/3.7.rst:84 +msgid "" +"the insertion-order preservation nature of :ref:`dict ` " +"objects `has been declared`_ to be an official part of the Python language " +"spec." +msgstr "" +":ref:`dict ` 对象会保持插入时的顺序这个特性 `正式宣布`_ 成为 Python 语言官方规范的一部分。" + +#: ../../whatsnew/3.7.rst:90 +msgid "Significant improvements in the standard library:" +msgstr "标准库中的重大改进:" + +#: ../../whatsnew/3.7.rst:92 +msgid "" +"The :mod:`asyncio` module has received new features, significant " +":ref:`usability and performance improvements `." +msgstr "" +":mod:`asyncio` 模块添加了新的功能,重大改进请参阅 :ref:`可用性与性能提升 `。" + +#: ../../whatsnew/3.7.rst:95 +msgid "" +"The :mod:`time` module gained support for :ref:`functions with nanosecond " +"resolution `." +msgstr ":mod:`time` 模块现在提供 :ref:`纳秒级精度函数 ` 的支持。" + +#: ../../whatsnew/3.7.rst:98 +msgid "CPython implementation improvements:" +msgstr "CPython 实现的改进:" + +#: ../../whatsnew/3.7.rst:100 +msgid "Avoiding the use of ASCII as a default text encoding:" +msgstr "避免使用 ASCII 作为默认的文本编码:" + +#: ../../whatsnew/3.7.rst:102 +msgid ":ref:`PEP 538 `, legacy C locale coercion" +msgstr ":ref:`PEP 538 `,传统 C 区域强制转换" + +#: ../../whatsnew/3.7.rst:103 +msgid ":ref:`PEP 540 `, forced UTF-8 runtime mode" +msgstr ":ref:`PEP 540 `,强制 UTF-8 运行时模式" + +#: ../../whatsnew/3.7.rst:104 +msgid ":ref:`PEP 552 `, deterministic .pycs" +msgstr ":ref:`PEP 552 `,确定性的 .pyc 文件" + +#: ../../whatsnew/3.7.rst:105 +msgid ":ref:`New Python Development Mode `" +msgstr ":ref:`新的 Python 开发模式 `" + +#: ../../whatsnew/3.7.rst:106 +msgid "" +":ref:`PEP 565 `, improved :exc:`DeprecationWarning` " +"handling" +msgstr ":ref:`PEP 565 `,改进的 :exc:`DeprecationWarning` 处理" + +#: ../../whatsnew/3.7.rst:109 +msgid "C API improvements:" +msgstr "C API 的改进:" + +#: ../../whatsnew/3.7.rst:111 +msgid ":ref:`PEP 539 `, new C API for thread-local storage" +msgstr ":ref:`PEP 539 `,用于线程本地存储的新 C API" + +#: ../../whatsnew/3.7.rst:113 +msgid "Documentation improvements:" +msgstr "文档的改进:" + +#: ../../whatsnew/3.7.rst:115 +msgid ":ref:`PEP 545 `, Python documentation translations" +msgstr ":ref:`PEP 545 `, Python 文档翻译" + +#: ../../whatsnew/3.7.rst:116 +msgid "" +"New documentation translations: `Japanese `_, " +"`French `_, and `Korean " +"`_." +msgstr "" +"新的文档翻译:`Japanese `_,`French " +"`_ 和 `Korean `_。" + +#: ../../whatsnew/3.7.rst:120 +msgid "" +"This release features notable performance improvements in many areas. The " +":ref:`whatsnew37-perf` section lists them in detail." +msgstr "此版本在诸多方面有显著的性能改进。:ref:`whatsnew37-perf` 章节详细列出了它们。" + +#: ../../whatsnew/3.7.rst:123 +msgid "" +"For a list of changes that may affect compatibility with previous Python " +"releases please refer to the :ref:`porting-to-python-37` section." +msgstr "和之前的 Python 版本存在兼容性的更改列表,请参阅 :ref:`porting-to-python-37` 章节。" + +#: ../../whatsnew/3.7.rst:128 +msgid "New Features" +msgstr "新的特性" + +#: ../../whatsnew/3.7.rst:133 +msgid "PEP 563: Postponed Evaluation of Annotations" +msgstr "PEP 563:延迟的标注求值" + +#: ../../whatsnew/3.7.rst:135 +msgid "" +"The advent of type hints in Python uncovered two glaring usability issues " +"with the functionality of annotations added in :pep:`3107` and refined " +"further in :pep:`526`:" +msgstr "" +"随着 :pep:`3107` 加入标注功能并在 :pep:`526` 进一步细化,Python 中类型提示的出现揭示了两个明显的可用性问题:" + +#: ../../whatsnew/3.7.rst:139 +msgid "" +"annotations could only use names which were already available in the current" +" scope, in other words they didn't support forward references of any kind; " +"and" +msgstr "标注只能使用在当前作用域中已经存在的名称,也就是说,它们不支持任何形式的前向引用;而且——" + +#: ../../whatsnew/3.7.rst:143 +msgid "" +"annotating source code had adverse effects on startup time of Python " +"programs." +msgstr "标注源码对 Python 程序的启动时间有不利的影响。" + +#: ../../whatsnew/3.7.rst:146 +msgid "" +"Both of these issues are fixed by postponing the evaluation of annotations." +" Instead of compiling code which executes expressions in annotations at " +"their definition time, the compiler stores the annotation in a string form " +"equivalent to the AST of the expression in question. If needed, annotations " +"can be resolved at runtime using :func:`typing.get_type_hints`. In the " +"common case where this is not required, the annotations are cheaper to store" +" (since short strings are interned by the interpreter) and make startup time" +" faster." +msgstr "" +"这两个问题都可以通过延迟标注求值来解决。在定义标注的时候,编译器并不会编译执行相应表达式的代码,而是保存与相应表达式的 AST " +"等价的字符串形式。如果有需要,标注可以在运行时使用 :func:`typing.get_type_hints` " +"进行解析。在不需要这种解析的通常情况下,标注的存储成本更低(因为解析器只需处理较短的字符串)且启动时间更短。" + +#: ../../whatsnew/3.7.rst:155 +msgid "" +"Usability-wise, annotations now support forward references, making the " +"following syntax valid::" +msgstr "在可用性方面,标注现在支持向前引用,以使以下句法有效::" + +#: ../../whatsnew/3.7.rst:169 +msgid "" +"Since this change breaks compatibility, the new behavior needs to be enabled" +" on a per-module basis in Python 3.7 using a :mod:`__future__` import::" +msgstr "" +"由于此修改会破坏兼容性,在 Python 3.7 中此种新的行为需要在每个模块层级上使用 :mod:`__future__` 导入来启用::" + +#: ../../whatsnew/3.7.rst:174 +msgid "It will become the default in Python 3.10." +msgstr "它将在 Python 3.10 中成为默认行为。" + +#: ../../whatsnew/3.7.rst:178 +msgid ":pep:`563` -- Postponed evaluation of annotations" +msgstr ":pep:`563` -- 延迟的标注求值" + +#: ../../whatsnew/3.7.rst:179 +msgid "PEP written and implemented by Łukasz Langa." +msgstr "PEP 由 Łukasz Langa 撰写并实现。" + +#: ../../whatsnew/3.7.rst:185 +msgid "PEP 538: Legacy C Locale Coercion" +msgstr "PEP 538: 传统 C 区域强制转换" + +#: ../../whatsnew/3.7.rst:187 +msgid "" +"An ongoing challenge within the Python 3 series has been determining a " +"sensible default strategy for handling the \"7-bit ASCII\" text encoding " +"assumption currently implied by the use of the default C or POSIX locale on " +"non-Windows platforms." +msgstr "" +"Python 3 系列有一个持续的挑战就是为处理 7 比特位 ASCII 文本的假定编码确定合理的默认策略,目前的设定是在非 Windows " +"平台上使用默认的 C 或 POSIX 区域设置。" + +#: ../../whatsnew/3.7.rst:192 +msgid "" +":pep:`538` updates the default interpreter command line interface to " +"automatically coerce that locale to an available UTF-8 based locale as " +"described in the documentation of the new :envvar:`PYTHONCOERCECLOCALE` " +"environment variable. Automatically setting ``LC_CTYPE`` this way means that" +" both the core interpreter and locale-aware C extensions (such as " +":mod:`readline`) will assume the use of UTF-8 as the default text encoding, " +"rather than ASCII." +msgstr "" +":pep:`538` 更新了默认的解释器命令行接口,以自动将上述区域强制转换为可用的基于 UTF-8 的区域,具体描述可参见有关新增环境变量 " +":envvar:`PYTHONCOERCECLOCALE` 的文档。 以这种方式自动设置 ``LC_CTYPE`` 意味着核心解释器和能感知区域的 C " +"扩展 (例如 :mod:`readline`) 都将会假定 UTF-8 已被用作默认的文本编码,而不再是 ASCII。" + +#: ../../whatsnew/3.7.rst:200 +msgid "" +"The platform support definition in :pep:`11` has also been updated to limit " +"full text handling support to suitably configured non-ASCII based locales." +msgstr ":pep:`11` 中的平台支持定义也已被更新以限制完整文本处理支持适当配置的基于非 ASCII 的语言区域。" + +#: ../../whatsnew/3.7.rst:203 +msgid "" +"As part of this change, the default error handler for :data:`~sys.stdin` and" +" :data:`~sys.stdout` is now ``surrogateescape`` (rather than ``strict``) " +"when using any of the defined coercion target locales (currently " +"``C.UTF-8``, ``C.utf8``, and ``UTF-8``). The default error handler for " +":data:`~sys.stderr` continues to be ``backslashreplace``, regardless of " +"locale." +msgstr "" +"作为此更改的一部分,当使用任何已定义的强制转换目标区域时 (目前为 ``C.UTF-8``, ``C.utf8`` 和 ``UTF-8``) " +":data:`~sys.stdin` 和 :data:`~sys.stdout` 默认的处理器现在将为 ``surrogateescape`` (而不是" +" ``strict``)。 而无论是什么区域,:data:`~sys.stderr` 默认的处理器仍为 ``backslashreplace``。" + +#: ../../whatsnew/3.7.rst:209 +msgid "" +"Locale coercion is silent by default, but to assist in debugging potentially" +" locale related integration problems, explicit warnings (emitted directly on" +" :data:`~sys.stderr`) can be requested by setting " +"``PYTHONCOERCECLOCALE=warn``. This setting will also cause the Python " +"runtime to emit a warning if the legacy C locale remains active when the " +"core interpreter is initialized." +msgstr "" +"默认情况下区域强制转换会静默进行,但为了辅助调试潜在的区域相关集成问题,可以通过设置 ``PYTHONCOERCECLOCALE=warn`` " +"来请求显式地启用警告信息(直接在 :data:`~sys.stderr` 上发出)。 此设置还会使得 Python 运行时在核心解释器初始化时如果传统 " +"C 区域仍然处于激活状态时发出警告。" + +#: ../../whatsnew/3.7.rst:215 +msgid "" +"While :pep:`538`'s locale coercion has the benefit of also affecting " +"extension modules (such as GNU ``readline``), as well as child processes " +"(including those running non-Python applications and older versions of " +"Python), it has the downside of requiring that a suitable target locale be " +"present on the running system. To better handle the case where no suitable " +"target locale is available (as occurs on RHEL/CentOS 7, for example), Python" +" 3.7 also implements :ref:`whatsnew37-pep540`." +msgstr "" +"虽然 :pep:`538` 的区域强制转换的好处在于它还会同时影响扩展模块 (例如 GNU ``readline``) 以及子进程 (包括运行非 " +"Python 应用和旧版本 Python 的子进程),但它也存在需要所运行系统必须存在适合的目标区域的缺点。 为了更好地处理没有可用适合的目标区域的情况" +" (例如在 RHEL/CentOS 7 上就会出现此情况),Python 3.7 还实现了 :ref:`whatsnew37-pep540`。" + +#: ../../whatsnew/3.7.rst:225 +msgid ":pep:`538` -- Coercing the legacy C locale to a UTF-8 based locale" +msgstr ":pep:`538` -- 强制转换传统 C 区域到基于 UTF-8 的区域" + +#: ../../whatsnew/3.7.rst:226 +msgid "PEP written and implemented by Nick Coghlan." +msgstr "PEP 由 Nick Coghlan 撰写并实现。" + +#: ../../whatsnew/3.7.rst:232 +msgid "PEP 540: Forced UTF-8 Runtime Mode" +msgstr "PEP 540: 强制 UTF-8 运行时模式" + +#: ../../whatsnew/3.7.rst:234 +msgid "" +"The new :option:`-X` ``utf8`` command line option and :envvar:`PYTHONUTF8` " +"environment variable can be used to enable the CPython *UTF-8 mode*." +msgstr "" +"新的 :option:`-X` ``utf8`` 命令行选项和 :envvar:`PYTHONUTF8` 环境变量可被用来启用 CPython 的 " +"*UTF-8 模式*。" + +#: ../../whatsnew/3.7.rst:237 +msgid "" +"When in UTF-8 mode, CPython ignores the locale settings, and uses the UTF-8 " +"encoding by default. The error handlers for :data:`sys.stdin` and " +":data:`sys.stdout` streams are set to ``surrogateescape``." +msgstr "" +"当处于 UTF-8 模式时,CPython 会忽略区域设置,并默认使用 UTF-8 编码。 用于 :data:`sys.stdin` 和 " +":data:`sys.stdout` 流的错误处理器将设置为 ``surrogateescape``。" + +#: ../../whatsnew/3.7.rst:241 +msgid "" +"The forced UTF-8 mode can be used to change the text handling behavior in an" +" embedded Python interpreter without changing the locale settings of an " +"embedding application." +msgstr "强制 UTF-8 模式可被用来在嵌入的 Python 解释器中改变文本处理行为,而不会改变嵌入方应用的区域设置。" + +#: ../../whatsnew/3.7.rst:245 +msgid "" +"While :pep:`540`'s UTF-8 mode has the benefit of working regardless of which" +" locales are available on the running system, it has the downside of having " +"no effect on extension modules (such as GNU ``readline``), child processes " +"running non-Python applications, and child processes running older versions " +"of Python. To reduce the risk of corrupting text data when communicating " +"with such components, Python 3.7 also implements :ref:`whatsnew37-pep540`)." +msgstr "" +":pep:`540` 的 UTF-8 模式的好处是不必关心运行所在系统中有哪些可用区域即可工作,但它也存在对扩展模块 (例如 GNU " +"``readline``)、运行非 Python 应用的子进程以及运行旧版本 Python 的子进程不起作用的缺点。 " +"为了减小与这些组件通信时破坏文本数据的风险,Python 3.7 还实现了 :ref:`whatsnew37-pep540`)。" + +#: ../../whatsnew/3.7.rst:252 +msgid "" +"The UTF-8 mode is enabled by default when the locale is ``C`` or ``POSIX``, " +"and the :pep:`538` locale coercion feature fails to change it to a UTF-8 " +"based alternative (whether that failure is due to ``PYTHONCOERCECLOCALE=0`` " +"being set, ``LC_ALL`` being set, or the lack of a suitable target locale)." +msgstr "" +"UTF-8 模式在语言区域为 ``C`` 或 ``POSIX`` 并且 :pep:`538` 区域强制转换特性无法将其修改为某种基于 UTF-8 " +"的替代项时会被默认启用(无论修改失败是由于设置了 ``PYTHONCOERCECLOCALE=0``, ``LC_ALL`` " +"还是由于缺少适合的目标区域)。" + +#: ../../whatsnew/3.7.rst:259 +msgid ":pep:`540` -- Add a new UTF-8 mode" +msgstr ":pep:`540` -- 增加了新的 UTF-8 模式" + +#: ../../whatsnew/3.7.rst:260 ../../whatsnew/3.7.rst:362 +msgid "PEP written and implemented by Victor Stinner" +msgstr "PEP 由 Victor Stinner 撰写并实现" + +#: ../../whatsnew/3.7.rst:266 +msgid "PEP 553: Built-in ``breakpoint()``" +msgstr "PEP 553: 内置的 ``breakpoint()``" + +#: ../../whatsnew/3.7.rst:268 +msgid "" +"Python 3.7 includes the new built-in :func:`breakpoint` function as an easy " +"and consistent way to enter the Python debugger." +msgstr "Python 3.7 包含了新的内置 :func:`breakpoint` 函数,作为一种简单方便地进入 Python 调试器的方式。" + +#: ../../whatsnew/3.7.rst:271 +msgid "" +"Built-in ``breakpoint()`` calls :func:`sys.breakpointhook`. By default, the" +" latter imports :mod:`pdb` and then calls ``pdb.set_trace()``, but by " +"binding ``sys.breakpointhook()`` to the function of your choosing, " +"``breakpoint()`` can enter any debugger. Additionally, the environment " +"variable :envvar:`PYTHONBREAKPOINT` can be set to the callable of your " +"debugger of choice. Set ``PYTHONBREAKPOINT=0`` to completely disable built-" +"in ``breakpoint()``." +msgstr "" +"内置 ``breakpoint()`` 会调用 :func:`sys.breakpointhook`。 在默认情况下后者会导入 :mod:`pdb` " +"然后再调用 ``pdb.set_trace()``,但是通过将 ``sys.breakpointhook()`` " +"绑定到你选定的函数,``breakpoint()`` 可以进入任何调试器。 此外,环境变量 :envvar:`PYTHONBREAKPOINT` " +"可被设置为你选定的调试器的可调用对象。 设置 ``PYTHONBREAKPOINT=0`` 会完全禁用内置 ``breakpoint()``。" + +#: ../../whatsnew/3.7.rst:281 +msgid ":pep:`553` -- Built-in breakpoint()" +msgstr ":pep:`553` -- 内置的 breakpoint()" + +#: ../../whatsnew/3.7.rst:282 +msgid "PEP written and implemented by Barry Warsaw" +msgstr "PEP 由 Barry Warsaw 撰写并实现" + +#: ../../whatsnew/3.7.rst:288 +msgid "PEP 539: New C API for Thread-Local Storage" +msgstr "PEP 539: 用于线程局部存储的新 C API" + +#: ../../whatsnew/3.7.rst:290 +msgid "" +"While Python provides a C API for thread-local storage support; the existing" +" :ref:`Thread Local Storage (TLS) API ` has used " +":c:type:`int` to represent TLS keys across all platforms. This has not " +"generally been a problem for officially-support platforms, but that is " +"neither POSIX-compliant, nor portable in any practical sense." +msgstr "" +"虽然 Python 已提供了用于线程局部存储支持的 C API;但原有的 :ref:`线程局部存储 (TLS) API ` 使用 :c:type:`int` 来表示所有平台上的 TLS 密钥。 对于官方支持的平台而言这通常不是问题,但这既不符合 " +"POSIX 标准,也不具备任何实际意义上的可移植性。" + +#: ../../whatsnew/3.7.rst:296 +msgid "" +":pep:`539` changes this by providing a new :ref:`Thread Specific Storage " +"(TSS) API ` to CPython which supersedes use of " +"the existing TLS API within the CPython interpreter, while deprecating the " +"existing API. The TSS API uses a new type :c:type:`Py_tss_t` instead of " +":c:type:`int` to represent TSS keys--an opaque type the definition of which " +"may depend on the underlying TLS implementation. Therefore, this will allow" +" to build CPython on platforms where the native TLS key is defined in a way " +"that cannot be safely cast to :c:type:`int`." +msgstr "" +":pep:`539` 通过向 CPython 提供了一个新的 :ref:`线程特定存储 (TSS) API ` 来改变这一点,它取代了原有的 CPython 内部 TLS API 的使用,并且原有 API 已弃用。 TSS API " +"使用一种新类型 :c:type:`Py_tss_t` 而非 :c:type:`int` 来表示 TSS 密钥 -- " +"这是一种不透明类型,其定义可能依赖于下层的 TLS 实现。 因此,这将允许在以无法安全地转换为 :c:type:`int` 的方式定义原生 TLS " +"密钥的平台上构建 CPython。" + +#: ../../whatsnew/3.7.rst:305 +msgid "" +"Note that on platforms where the native TLS key is defined in a way that " +"cannot be safely cast to :c:type:`int`, all functions of the existing TLS " +"API will be no-op and immediately return failure. This indicates clearly " +"that the old API is not supported on platforms where it cannot be used " +"reliably, and that no effort will be made to add such support." +msgstr "" +"请注意在原生 TLS 密钥定义方式无法被安全地转换为 :c:type:`int` 的平台上,原有 TLS API " +"中的全部函数将无法执行并会立即返回失败信息。 这样能清楚地表明原有 API 在无法可靠使用的平台上不受支持,并且不会再尝试添加此类支持。" + +#: ../../whatsnew/3.7.rst:313 +msgid ":pep:`539` -- A New C-API for Thread-Local Storage in CPython" +msgstr ":pep:`539` -- 在 CPython 中用于线程局部存储的新 C-API" + +#: ../../whatsnew/3.7.rst:314 +msgid "PEP written by Erik M. Bray; implementation by Masayuki Yamamoto." +msgstr "PEP 由 Erik M. Bray 撰写;由 Masayuki Yamamoto 实现。" + +#: ../../whatsnew/3.7.rst:320 +msgid "PEP 562: Customization of Access to Module Attributes" +msgstr "PEP 562: 定制对模块属性的访问" + +#: ../../whatsnew/3.7.rst:322 +msgid "" +"Python 3.7 allows defining :meth:`__getattr__` on modules and will call it " +"whenever a module attribute is otherwise not found. Defining " +":meth:`__dir__` on modules is now also allowed." +msgstr "" +"Python 3.7 允许在模块上定义 :meth:`__getattr__` 并且当以其他方式找不到某个模块属性时将会调用它。 在模块上定义 " +":meth:`__dir__` 现在也是允许的。" + +#: ../../whatsnew/3.7.rst:326 +msgid "" +"A typical example of where this may be useful is module attribute " +"deprecation and lazy loading." +msgstr "一个典型的可能有用的例子是已弃用模块属性和惰性加载。" + +#: ../../whatsnew/3.7.rst:331 +msgid ":pep:`562` -- Module ``__getattr__`` and ``__dir__``" +msgstr ":pep:`562` -- 模块的 ``__getattr__`` 和 ``__dir__``" + +#: ../../whatsnew/3.7.rst:332 ../../whatsnew/3.7.rst:421 +msgid "PEP written and implemented by Ivan Levkivskyi" +msgstr "PEP 由 Ivan Levkivskyi 撰写并实现" + +#: ../../whatsnew/3.7.rst:338 +msgid "PEP 564: New Time Functions With Nanosecond Resolution" +msgstr "PEP 564: 具有纳秒级精度的新时间函数" + +#: ../../whatsnew/3.7.rst:340 +msgid "" +"The resolution of clocks in modern systems can exceed the limited precision " +"of a floating point number returned by the :func:`time.time` function and " +"its variants. To avoid loss of precision, :pep:`564` adds six new " +"\"nanosecond\" variants of the existing timer functions to the :mod:`time` " +"module:" +msgstr "" +"现代系统的时钟精度可以超过由 :func:`time.time` 函数及其变化形式所返回的浮点数的有限精度。 为了避免精度损失,:pep:`564` 在" +" :mod:`time` 模块中增加了原有计时器函数的六个新“纳秒版”变化形式:" + +#: ../../whatsnew/3.7.rst:346 ../../whatsnew/3.7.rst:1446 +msgid ":func:`time.clock_gettime_ns`" +msgstr ":func:`time.clock_gettime_ns`" + +#: ../../whatsnew/3.7.rst:347 ../../whatsnew/3.7.rst:1447 +msgid ":func:`time.clock_settime_ns`" +msgstr ":func:`time.clock_settime_ns`" + +#: ../../whatsnew/3.7.rst:348 ../../whatsnew/3.7.rst:1448 +msgid ":func:`time.monotonic_ns`" +msgstr ":func:`time.monotonic_ns`" + +#: ../../whatsnew/3.7.rst:349 ../../whatsnew/3.7.rst:1449 +msgid ":func:`time.perf_counter_ns`" +msgstr ":func:`time.perf_counter_ns`" + +#: ../../whatsnew/3.7.rst:350 ../../whatsnew/3.7.rst:1450 +msgid ":func:`time.process_time_ns`" +msgstr ":func:`time.process_time_ns`" + +#: ../../whatsnew/3.7.rst:351 ../../whatsnew/3.7.rst:1451 +msgid ":func:`time.time_ns`" +msgstr ":func:`time.time_ns`" + +#: ../../whatsnew/3.7.rst:353 +msgid "" +"The new functions return the number of nanoseconds as an integer value." +msgstr "这些新函数会以整数值的形式返回纳秒数。" + +#: ../../whatsnew/3.7.rst:355 +msgid "" +"`Measurements `_ show that on Linux and Windows the resolution of " +":func:`time.time_ns` is approximately 3 times better than that of " +":func:`time.time`." +msgstr "" +"`测量 `_ 表明在 Linux 和 Windows 上 :func:`time.time_ns` 的精度大约比 " +":func:`time.time` 要高 3 倍。" + +#: ../../whatsnew/3.7.rst:361 +msgid ":pep:`564` -- Add new time functions with nanosecond resolution" +msgstr ":pep:`564` -- 增加具有纳秒级精度的新时间函数" + +#: ../../whatsnew/3.7.rst:368 +msgid "PEP 565: Show DeprecationWarning in ``__main__``" +msgstr "PEP 565: 在 ``__main__`` 中显示 DeprecationWarning" + +#: ../../whatsnew/3.7.rst:370 +msgid "" +"The default handling of :exc:`DeprecationWarning` has been changed such that" +" these warnings are once more shown by default, but only when the code " +"triggering them is running directly in the :mod:`__main__` module. As a " +"result, developers of single file scripts and those using Python " +"interactively should once again start seeing deprecation warnings for the " +"APIs they use, but deprecation warnings triggered by imported application, " +"library and framework modules will continue to be hidden by default." +msgstr "" +":exc:`DeprecationWarning` 的默认处理方式已经被更改,这此警告默认只显示一次,仅有当直接在 :mod:`__main__` " +"模块中运行的代码触发它们时才会再次显示。 因此,单文件脚本开发者以及 Python 交互模式使用者应该会再次开始看到针对他们所使用 API " +"的已弃用警告,但被导入应用、库和框架模块所触发的已弃用警告默认将继续隐藏。" + +#: ../../whatsnew/3.7.rst:378 +msgid "" +"As a result of this change, the standard library now allows developers to " +"choose between three different deprecation warning behaviours:" +msgstr "作为此项更改的结果,标准库现在允许开发者在三种不同的已弃用警告行为之间进行选择:" + +#: ../../whatsnew/3.7.rst:381 +msgid "" +":exc:`FutureWarning`: always displayed by default, recommended for warnings " +"intended to be seen by application end users (e.g. for deprecated " +"application configuration settings)." +msgstr "" +":exc:`FutureWarning`: 默认情况下总是会显示,建议用于应用程序最终用户应该看到的警告信息(例如对于已弃用的应用程序配置的设置选项)。" + +#: ../../whatsnew/3.7.rst:384 +msgid "" +":exc:`DeprecationWarning`: displayed by default only in :mod:`__main__` and " +"when running tests, recommended for warnings intended to be seen by other " +"Python developers where a version upgrade may result in changed behaviour or" +" an error." +msgstr "" +":exc:`DeprecationWarning`: 默认情况下仅在 :mod:`__main__` 中以及当运行测试时会显示,建议用于其他 " +"Python 开发者应该看到的警告信息,提示版本升级可能导致行为改变或者错误。" + +#: ../../whatsnew/3.7.rst:388 +msgid "" +":exc:`PendingDeprecationWarning`: displayed by default only when running " +"tests, intended for cases where a future version upgrade will change the " +"warning category to :exc:`DeprecationWarning` or :exc:`FutureWarning`." +msgstr "" +":exc:`PendingDeprecationWarning`: 默认情况下仅在运行测试时会显示,可用于提示未来版本升级将会改变警告类别为 " +":exc:`DeprecationWarning` 或 :exc:`FutureWarning` 的情况。" + +#: ../../whatsnew/3.7.rst:392 +msgid "" +"Previously both :exc:`DeprecationWarning` and " +":exc:`PendingDeprecationWarning` were only visible when running tests, which" +" meant that developers primarily writing single file scripts or using Python" +" interactively could be surprised by breaking changes in the APIs they used." +msgstr "" +"在此之前 :exc:`DeprecationWarning` 和 :exc:`PendingDeprecationWarning` " +"都仅在运行测试时可见,这意味着主要编写单文件脚本或使用 Python 交互模式的开发者可能会因他们所用 API 突然出现的改变而感到惊讶。" + +#: ../../whatsnew/3.7.rst:399 +msgid ":pep:`565` -- Show DeprecationWarning in ``__main__``" +msgstr ":pep:`565` -- 在 ``__main__`` 中显示 DeprecationWarning" + +#: ../../whatsnew/3.7.rst:400 +msgid "PEP written and implemented by Nick Coghlan" +msgstr "PEP 由 Nick Coghlan 撰写并实现" + +#: ../../whatsnew/3.7.rst:406 +msgid "PEP 560: Core Support for ``typing`` module and Generic Types" +msgstr "PEP 560: 对 ``typing`` 模块和泛型类型的核心支持" + +#: ../../whatsnew/3.7.rst:408 +msgid "" +"Initially :pep:`484` was designed in such way that it would not introduce " +"*any* changes to the core CPython interpreter. Now type hints and the " +":mod:`typing` module are extensively used by the community, so this " +"restriction is removed. The PEP introduces two special methods " +":meth:`__class_getitem__` and ``__mro_entries__``, these methods are now " +"used by most classes and special constructs in :mod:`typing`. As a result, " +"the speed of various operations with types increased up to 7 times, the " +"generic types can be used without metaclass conflicts, and several long " +"standing bugs in :mod:`typing` module are fixed." +msgstr "" +":pep:`484` 最初的设计方式使其不会向核心 CPython 解释器引入 *任何* 更改。 现在类型提示和 :mod:`typing` " +"模块已被社区广泛使用,因此这个限制已被取消。 这个 PEP 引入了两个特殊方法 :meth:`__class_getitem__` 和 " +"``__mro_entries__``,这些方法现在被 :mod:`typing` 中的大多数类和特殊构造所使用。 " +"结果就是与类型相关的各类操作的速度提升了 7 倍,泛型类型可以在没有元类冲突的情况下被使用,而 :mod:`typing` " +"模块中几个长期存在的错误也已被修正。" + +#: ../../whatsnew/3.7.rst:420 +msgid ":pep:`560` -- Core support for typing module and generic types" +msgstr ":pep:`560` -- 对 typing 模块和泛型类型的核心支持" + +#: ../../whatsnew/3.7.rst:427 +msgid "PEP 552: Hash-based .pyc Files" +msgstr "PEP 552: 基于哈希值的 .pyc 文件" + +#: ../../whatsnew/3.7.rst:429 +msgid "" +"Python has traditionally checked the up-to-dateness of bytecode cache files " +"(i.e., ``.pyc`` files) by comparing the source metadata (last-modified " +"timestamp and size) with source metadata saved in the cache file header when" +" it was generated. While effective, this invalidation method has its " +"drawbacks. When filesystem timestamps are too coarse, Python can miss " +"source updates, leading to user confusion. Additionally, having a timestamp " +"in the cache file is problematic for `build reproducibility " +"`_ and content-based build systems." +msgstr "" +"传统上 Python 检查字节码缓存文件 (即 ``.pyc`` 文件) 是否最新的方式是通过对源码元数据 " +"(最后更改的时间戳和大小)和生成缓存时保存在其文件头中的源码元数据进行比较。 这种检查方法虽然有效,但也存在缺点。 " +"当文件系统的时间戳太粗糙时,Python 有可能错过源码更新,导致用户感到困惑。 此外,在缓存文件中存在时间戳对于 `构建可再现 " +"`_ 并且基于内容的构建系统来说是有问题的。" + +#: ../../whatsnew/3.7.rst:438 +msgid "" +":pep:`552` extends the pyc format to allow the hash of the source file to be" +" used for invalidation instead of the source timestamp. Such ``.pyc`` files " +"are called \"hash-based\". By default, Python still uses timestamp-based " +"invalidation and does not generate hash-based ``.pyc`` files at runtime. " +"Hash-based ``.pyc`` files may be generated with :mod:`py_compile` or " +":mod:`compileall`." +msgstr "" +":pep:`552` 扩展了 pyc 格式以允许使用源文件的哈希值而非源文件的时间戳来检查有效性。 这种 ``.pyc`` 文件就称为“基于哈希值的”。" +" 默认情况下,Python 仍然使用基于时间戳的有效性检查,不会在运行时生成基于哈希值的 ``.pyc`` 文件。 基于哈希值的 ``.pyc`` " +"文件可以使用 :mod:`py_compile` 或 :mod:`compileall` 来生成。" + +#: ../../whatsnew/3.7.rst:444 +msgid "" +"Hash-based ``.pyc`` files come in two variants: checked and unchecked. " +"Python validates checked hash-based ``.pyc`` files against the corresponding" +" source files at runtime but doesn't do so for unchecked hash-based pycs. " +"Unchecked hash-based ``.pyc`` files are a useful performance optimization " +"for environments where a system external to Python (e.g., the build system) " +"is responsible for keeping ``.pyc`` files up-to-date." +msgstr "" +"基于哈希值的 ``.pyc`` 文件包含两种变体:已选定和未选定。 Python 会在运行时针对相应源码文件验证已选定基于哈希值的 ``.pyc`` " +"文件,但对未选定基于哈希值的 pyc 文件则不会这样做。 未选定基于哈希值的 ``.pyc`` 文件对于需要由 Python " +"外部的系统(例如构建系统)负责使 ``.pyc`` 文件保持最新的环境来说是一种有用的性能优化。" + +#: ../../whatsnew/3.7.rst:451 +msgid "See :ref:`pyc-invalidation` for more information." +msgstr "请参阅 :ref:`pyc-invalidation` 了解更多信息。" + +#: ../../whatsnew/3.7.rst:455 +msgid ":pep:`552` -- Deterministic pycs" +msgstr ":pep:`552` -- 确定性的 pyc 文件" + +#: ../../whatsnew/3.7.rst:456 +msgid "PEP written and implemented by Benjamin Peterson" +msgstr "PEP 由 Benjamin Peterson 撰写并实现" + +#: ../../whatsnew/3.7.rst:462 +msgid "PEP 545: Python Documentation Translations" +msgstr "PEP 545: Python 文档翻译" + +#: ../../whatsnew/3.7.rst:464 +msgid "" +":pep:`545` describes the process of creating and maintaining Python " +"documentation translations." +msgstr ":pep:`545` 描述了创建和维护 Python 文档翻译的整个过程。" + +#: ../../whatsnew/3.7.rst:467 +msgid "Three new translations have been added:" +msgstr "新增了三个新的翻译版本:" + +#: ../../whatsnew/3.7.rst:469 +msgid "Japanese: https://docs.python.org/ja/" +msgstr "日语: https://docs.python.org/ja/" + +#: ../../whatsnew/3.7.rst:470 +msgid "French: https://docs.python.org/fr/" +msgstr "法语: https://docs.python.org/fr/" + +#: ../../whatsnew/3.7.rst:471 +msgid "Korean: https://docs.python.org/ko/" +msgstr "韩语: https://docs.python.org/ko/" + +#: ../../whatsnew/3.7.rst:476 +msgid ":pep:`545` -- Python Documentation Translations" +msgstr ":pep:`545` -- Python 文档翻译" + +#: ../../whatsnew/3.7.rst:476 +msgid "" +"PEP written and implemented by Julien Palard, Inada Naoki, and Victor " +"Stinner." +msgstr "PEP 由 Julien Palard, Inada Naoki 和 Victor Stinner 撰写并实现。" + +#: ../../whatsnew/3.7.rst:483 +msgid "Python Development Mode (-X dev)" +msgstr "Python 开发模式 (-X dev)" + +#: ../../whatsnew/3.7.rst:485 +msgid "" +"The new :option:`-X` ``dev`` command line option or the new " +":envvar:`PYTHONDEVMODE` environment variable can be used to enable " +":ref:`Python Development Mode `. When in development mode, Python " +"performs additional runtime checks that are too expensive to be enabled by " +"default. See :ref:`Python Development Mode ` documentation for the " +"full description." +msgstr "" +"新的 :option:`-X` ``dev`` 命令行选项或新的 :envvar:`PYTHONDEVMODE` 环境变量可被用来启用 " +":ref:`Python 开发模式 `。 在开发模式下,Python 将执行额外的如果默认启用会导致开销过大的运行时检查。 请参阅 " +":ref:`Python 开发模式 ` 文档查看完整说明。" + +#: ../../whatsnew/3.7.rst:494 +msgid "Other Language Changes" +msgstr "其他语言特性修改" + +#: ../../whatsnew/3.7.rst:496 +msgid "" +"An :keyword:`await` expression and comprehensions containing an " +":keyword:`async for` clause were illegal in the expressions in " +":ref:`formatted string literals ` due to a problem with the " +"implementation. In Python 3.7 this restriction was lifted." +msgstr "" +":keyword:`await` 表达式和包含 :keyword:`async for` 子句的推导式不允许在 :ref:`格式化字符串字面值 " +"` 的表达式中使用。 在 Python 3.7 中此限制已被取消。" + +#: ../../whatsnew/3.7.rst:501 +msgid "" +"More than 255 arguments can now be passed to a function, and a function can " +"now have more than 255 parameters. (Contributed by Serhiy Storchaka in " +":issue:`12844` and :issue:`18896`.)" +msgstr "" +"现在可以将超过 255 个参数传递给一个函数,而现在一个函数也可以拥有超过 255 个形参。 (由 Serhiy Storchaka 在 " +":issue:`12844` 和 :issue:`18896` 中贡献。)" + +#: ../../whatsnew/3.7.rst:505 +msgid "" +":meth:`bytes.fromhex` and :meth:`bytearray.fromhex` now ignore all ASCII " +"whitespace, not only spaces. (Contributed by Robert Xiao in :issue:`28927`.)" +msgstr "" +"现在 :meth:`bytes.fromhex` 和 :meth:`bytearray.fromhex` 会忽略所有 ASCII " +"空白符,而非仅是空格符. (由 Robert Xiao 在 :issue:`28927` 中贡献。)" + +#: ../../whatsnew/3.7.rst:508 +msgid "" +":class:`str`, :class:`bytes`, and :class:`bytearray` gained support for the " +"new :meth:`isascii() ` method, which can be used to test if a " +"string or bytes contain only the ASCII characters. (Contributed by INADA " +"Naoki in :issue:`32677`.)" +msgstr "" +":class:`str`, :class:`bytes` 和 :class:`bytearray` 获得了对新 :meth:`isascii() " +"` 方法的支持,该方法可被用来测试是个字符串或字节串是否仅包含 ASCII 字符。 (由 INADA Naoki 在 " +":issue:`32677` 中贡献。)" + +#: ../../whatsnew/3.7.rst:513 +msgid "" +":exc:`ImportError` now displays module name and module ``__file__`` path " +"when ``from ... import ...`` fails. (Contributed by Matthias Bussonnier in " +":issue:`29546`.)" +msgstr "" +"现在当 ``from ... import ...`` 失败时 :exc:`ImportError` 会显示模块名称和模块 ``__file__`` " +"路径。 (由 Matthias Bussonnier 在 :issue:`29546` 中贡献。)" + +#: ../../whatsnew/3.7.rst:517 +msgid "" +"Circular imports involving absolute imports with binding a submodule to a " +"name are now supported. (Contributed by Serhiy Storchaka in :issue:`30024`.)" +msgstr "" +"现在已支持涉及将子模块绑定到一个名称的绝对导入的循环导入。 (由 Serhiy Storchaka 在 :issue:`30024` 中贡献。)" + +#: ../../whatsnew/3.7.rst:521 +msgid "" +"``object.__format__(x, '')`` is now equivalent to ``str(x)`` rather than " +"``format(str(self), '')``. (Contributed by Serhiy Storchaka in " +":issue:`28974`.)" +msgstr "" +"现在 ``object.__format__(x, '')`` 等价于 ``str(x)`` 而非 ``format(str(self), '')``。" +" (由 Serhiy Storchaka d :issue:`28974` 中贡献。)" + +#: ../../whatsnew/3.7.rst:525 +msgid "" +"In order to better support dynamic creation of stack traces, " +":class:`types.TracebackType` can now be instantiated from Python code, and " +"the ``tb_next`` attribute on :ref:`tracebacks ` is now " +"writable. (Contributed by Nathaniel J. Smith in :issue:`30579`.)" +msgstr "" +"为更好地支持栈跟踪的动态创建,现在 :class:`types.TracebackType` 可以从 Python 代码中被实例化,并且 " +":ref:`回溯对象 ` 的 ``tb_next`` 属性现在是可写的。 (由 Nathaniel J. " +"Smith 在 :issue:`30579` 中贡献。)" + +#: ../../whatsnew/3.7.rst:531 +msgid "" +"When using the :option:`-m` switch, ``sys.path[0]`` is now eagerly expanded " +"to the full starting directory path, rather than being left as the empty " +"directory (which allows imports from the *current* working directory at the " +"time when an import occurs) (Contributed by Nick Coghlan in :issue:`33053`.)" +msgstr "" +"当使用 :option:`-m` 开关时,现在 ``sys.path[0]`` " +"会主动扩展为完整的起始目录路径,而不是保持为空目录(这将允许在发生导入时从 *当前* 工作目录导入) (由 Nick Coghlan 在 " +":issue:`33053` 中贡献。)" + +#: ../../whatsnew/3.7.rst:537 +msgid "" +"The new :option:`-X` ``importtime`` option or the " +":envvar:`PYTHONPROFILEIMPORTTIME` environment variable can be used to show " +"the timing of each module import. (Contributed by Inada Naoki in " +":issue:`31415`.)" +msgstr "" +"新的 :option:`-X` ``importtime`` 选项或 :envvar:`PYTHONPROFILEIMPORTTIME` " +"环境变量可被用来显示每次模块导入的时间。 (由 Inada Naoki 在 :issue:`31415` 中贡献。)" + +#: ../../whatsnew/3.7.rst:544 +msgid "New Modules" +msgstr "新增模块" + +#: ../../whatsnew/3.7.rst:549 +msgid "contextvars" +msgstr "contextvars" + +#: ../../whatsnew/3.7.rst:551 +msgid "" +"The new :mod:`contextvars` module and a set of :ref:`new C APIs " +"` introduce support for *context variables*. Context " +"variables are conceptually similar to thread-local variables. Unlike TLS, " +"context variables support asynchronous code correctly." +msgstr "" +"新的 :mod:`contextvars` 模块和一组 :ref:`新的 C API ` 引入了对 " +"*上下文变量* 的支持。 上下文变量在概念上类似于线程局部变量。 与 TLS 不同,上下文变量能正确地支持异步代码。" + +#: ../../whatsnew/3.7.rst:557 +msgid "" +"The :mod:`asyncio` and :mod:`decimal` modules have been updated to use and " +"support context variables out of the box. Particularly the active decimal " +"context is now stored in a context variable, which allows decimal operations" +" to work with the correct context in asynchronous code." +msgstr "" +":mod:`asyncio` 和 :mod:`decimal` 已得到更新以使用和支持开箱即用的上下文变量。 特别是激活的 decimal " +"上下文现在将存储在上下文变量中,它允许十进制运算在异步代码中使用正确的上下文。" + +#: ../../whatsnew/3.7.rst:564 +msgid ":pep:`567` -- Context Variables" +msgstr ":pep:`567` -- 上下文变量" + +#: ../../whatsnew/3.7.rst:565 +msgid "PEP written and implemented by Yury Selivanov" +msgstr "PEP 由 Yury Selivanov 撰写并实现" + +#: ../../whatsnew/3.7.rst:571 +msgid "dataclasses" +msgstr "dataclasses" + +#: ../../whatsnew/3.7.rst:573 +msgid "" +"The new :func:`~dataclasses.dataclass` decorator provides a way to declare " +"*data classes*. A data class describes its attributes using class variable " +"annotations. Its constructor and other magic methods, such as " +":meth:`~object.__repr__`, :meth:`~object.__eq__`, and " +":meth:`~object.__hash__` are generated automatically." +msgstr "" +"新的 :func:`~dataclasses.dataclass` 装饰器提供了一种声明 *数据类* 的方式。 数据类使用变量标注来描述其属性。 " +"它的构造器和其他魔术方法例如 :meth:`~object.__repr__`, :meth:`~object.__eq__` 以及 " +":meth:`~object.__hash__` 会自动地生成。" + +#: ../../whatsnew/3.7.rst:579 +msgid "Example::" +msgstr "示例::" + +#: ../../whatsnew/3.7.rst:592 +msgid ":pep:`557` -- Data Classes" +msgstr ":pep:`557` -- 数据类" + +#: ../../whatsnew/3.7.rst:593 +msgid "PEP written and implemented by Eric V. Smith" +msgstr "PEP 由 Eric V. Smith 撰写并实现" + +#: ../../whatsnew/3.7.rst:599 +msgid "importlib.resources" +msgstr "importlib.resources" + +#: ../../whatsnew/3.7.rst:601 +msgid "" +"The new :mod:`importlib.resources` module provides several new APIs and one " +"new ABC for access to, opening, and reading *resources* inside packages. " +"Resources are roughly similar to files inside packages, but they needn't be " +"actual files on the physical file system. Module loaders can provide a " +":meth:`get_resource_reader()` function which returns a " +":class:`importlib.abc.ResourceReader` instance to support this new API. " +"Built-in file path loaders and zip file loaders both support this." +msgstr "" +"新的 :mod:`importlib.resources` 模块提供了一些新的 API 和一个新的 ABC 用于访问、打开和读取包内的 *资源*。 " +"资源基本上类似于包内的文件,但它们不一定是物理文件系统中实际的文件。 模块加载器可以提供 :meth:`get_resource_reader()` " +"函数,它会返回一个 :class:`importlib.abc.ResourceReader` 实例来支持这个新 API。 内置的文件路径加载器和 " +"zip 文件加载器都支持此特性。" + +#: ../../whatsnew/3.7.rst:609 +msgid "Contributed by Barry Warsaw and Brett Cannon in :issue:`32248`." +msgstr "由 Barry Warsaw 和 Brett Cannon 在 :issue:`32248` 中贡献。" + +#: ../../whatsnew/3.7.rst:613 +msgid "" +"`importlib_resources `_ -- a PyPI backport for earlier Python" +" versions." +msgstr "" +"`importlib_resources `_ -- 用于先前 Python 版本的 PyPI 下层接口。" + +#: ../../whatsnew/3.7.rst:618 +msgid "Improved Modules" +msgstr "改进的模块" + +#: ../../whatsnew/3.7.rst:622 +msgid "argparse" +msgstr "argparse" + +#: ../../whatsnew/3.7.rst:624 +msgid "" +"The new :meth:`ArgumentParser.parse_intermixed_args() " +"` method allows intermixing " +"options and positional arguments. (Contributed by paul.j3 in " +":issue:`14191`.)" +msgstr "" +"新的 :meth:`ArgumentParser.parse_intermixed_args() " +"` 方法允许混合选项与位置参数。 (由 paul.j3 在" +" :issue:`14191` 中提供。)" + +#: ../../whatsnew/3.7.rst:633 ../../whatsnew/3.7.rst:1950 +msgid "asyncio" +msgstr "asyncio" + +#: ../../whatsnew/3.7.rst:635 +msgid "" +"The :mod:`asyncio` module has received many new features, usability and " +":ref:`performance improvements `. Notable changes " +"include:" +msgstr "" +":mod:`asyncio` 模块获得了许多新的特性、可用性和 :ref:`性能提升 `。 " +"重要的改变包括:" + +#: ../../whatsnew/3.7.rst:639 +msgid "" +"The new :term:`provisional ` :func:`asyncio.run` function " +"can be used to run a coroutine from synchronous code by automatically " +"creating and destroying the event loop. (Contributed by Yury Selivanov in " +":issue:`32314`.)" +msgstr "" +"新的 :term:`暂定 ` :func:`asyncio.run` " +"函数可被用于通过自动创建和销毁事件循环来基于同步代码运行协程。 (由 Yury Selivanov 在 :issue:`32314` 中贡献。)" + +#: ../../whatsnew/3.7.rst:644 +msgid "" +"asyncio gained support for :mod:`contextvars`. :meth:`loop.call_soon() " +"`, :meth:`loop.call_soon_threadsafe() " +"`, :meth:`loop.call_later() " +"`, :meth:`loop.call_at() `, " +"and :meth:`Future.add_done_callback() ` " +"have a new optional keyword-only *context* parameter. :class:`Tasks " +"` now track their context automatically. See :pep:`567` for " +"more details. (Contributed by Yury Selivanov in :issue:`32436`.)" +msgstr "" +"asyncio 增加支持 :mod:`contextvars`. :meth:`loop.call_soon() " +"`, :meth:`loop.call_soon_threadsafe() " +"`, :meth:`loop.call_later() " +"`, :meth:`loop.call_at() ` 并且" +" :meth:`Future.add_done_callback() ` " +"具有新的可选仅关键字参数 *context*。 现在 :class:`Tasks ` 会自动跟踪其上下文。 详情参见 " +":pep:`567`。 (由 Yury Selivanov 在 :issue:`32436` 中贡献。)" + +#: ../../whatsnew/3.7.rst:655 +msgid "" +"The new :func:`asyncio.create_task` function has been added as a shortcut to" +" ``asyncio.get_event_loop().create_task()``. (Contributed by Andrew Svetlov " +"in :issue:`32311`.)" +msgstr "" +"增加了新的 :func:`asyncio.create_task` 函数作为 " +"``asyncio.get_event_loop().create_task()`` 的快捷方式。 (由 Andrew Svetlov 在 " +":issue:`32311` 中贡献。)" + +#: ../../whatsnew/3.7.rst:659 +msgid "" +"The new :meth:`loop.start_tls() ` method can be used" +" to upgrade an existing connection to TLS. (Contributed by Yury Selivanov in" +" :issue:`23749`.)" +msgstr "" +"新的 :meth:`loop.start_tls() ` 方法可用于升级现有的 TLS 连接。 (由 " +"Yury Selivanov 在 :issue:`23749` 中贡献。)" + +#: ../../whatsnew/3.7.rst:663 +msgid "" +"The new :meth:`loop.sock_recv_into() ` method " +"allows reading data from a socket directly into a provided buffer making it " +"possible to reduce data copies. (Contributed by Antoine Pitrou in " +":issue:`31819`.)" +msgstr "" +"新的 :meth:`loop.sock_recv_into() ` " +"方法允许直接从套接字读取数据放入所提供的缓冲区,从而可以减少数据复制。 (由 Antoine Pitrou 在 :issue:`31819` 中贡献。)" + +#: ../../whatsnew/3.7.rst:668 +msgid "" +"The new :func:`asyncio.current_task` function returns the currently running " +":class:`~asyncio.Task` instance, and the new :func:`asyncio.all_tasks` " +"function returns a set of all existing ``Task`` instances in a given loop. " +"The :meth:`Task.current_task() ` and " +":meth:`Task.all_tasks() ` methods have been " +"deprecated. (Contributed by Andrew Svetlov in :issue:`32250`.)" +msgstr "" +"新的 :func:`asyncio.current_task` 函数可返回当前运行的 :class:`~asyncio.Task` 实例,以及新的 " +":func:`asyncio.all_tasks` 函数可返回给定循环中所有现存 ``Task`` 实例的集合。 " +":meth:`Task.current_task() ` 和 " +":meth:`Task.all_tasks() ` 方法已弃用。 (由 Andrew Svetlov 在" +" :issue:`32250` 中贡献。)" + +#: ../../whatsnew/3.7.rst:675 +msgid "" +"The new *provisional* :class:`~asyncio.BufferedProtocol` class allows " +"implementing streaming protocols with manual control over the receive " +"buffer. (Contributed by Yury Selivanov in :issue:`32251`.)" +msgstr "" +"新的 *暂定* :class:`~asyncio.BufferedProtocol` 类允许通过手动控制接收缓冲区来实现流式协议。 (由 Yury " +"Selivanov 在 :issue:`32251` 中贡献。)" + +#: ../../whatsnew/3.7.rst:679 +msgid "" +"The new :func:`asyncio.get_running_loop` function returns the currently " +"running loop, and raises a :exc:`RuntimeError` if no loop is running. This " +"is in contrast with :func:`asyncio.get_event_loop`, which will *create* a " +"new event loop if none is running. (Contributed by Yury Selivanov in " +":issue:`32269`.)" +msgstr "" +"新的 :func:`asyncio.get_running_loop` 函数可返回当前运行的循环,如果没有循环在运行则引发 " +":exc:`RuntimeError`。 这与 :func:`asyncio.get_event_loop` 不同,后者在没有循环在运行时将 *创建* " +"一个新的事件循环。 (由 Yury Selivanov 在 :issue:`32269` 中提供。)" + +#: ../../whatsnew/3.7.rst:685 +msgid "" +"The new :meth:`StreamWriter.wait_closed() " +"` coroutine method allows waiting until " +"the stream writer is closed. The new :meth:`StreamWriter.is_closing() " +"` method can be used to determine if the " +"writer is closing. (Contributed by Andrew Svetlov in :issue:`32391`.)" +msgstr "" +"新的 :meth:`StreamWriter.wait_closed() ` " +"协程方法允许执行等待直到流写入器被关闭。 新的 :meth:`StreamWriter.is_closing() " +"` 方法可用于确定写入器是否被关闭。 (由 Andrew Svetlov 在 " +":issue:`32391` 中贡献。)" + +#: ../../whatsnew/3.7.rst:691 +msgid "" +"The new :meth:`loop.sock_sendfile() ` coroutine " +"method allows sending files using :mod:`os.sendfile` when possible. " +"(Contributed by Andrew Svetlov in :issue:`32410`.)" +msgstr "" +"新的 :meth:`loop.sock_sendfile() ` 协程方法允许在可能的情况下使用" +" :mod:`os.sendfile` 发送文件。 (由 Andrew Svetlov 在 :issue:`32410` 中贡献。)" + +#: ../../whatsnew/3.7.rst:695 +msgid "" +"The new :meth:`Future.get_loop() ` and " +"``Task.get_loop()`` methods return the instance of the loop on which a task " +"or a future were created. :meth:`Server.get_loop() " +"` allows doing the same for :class:`asyncio.Server`" +" objects. (Contributed by Yury Selivanov in :issue:`32415` and Srinivas " +"Reddy Thatiparthy in :issue:`32418`.)" +msgstr "" +"新的 :meth:`Future.get_loop() ` 和 ``Task.get_loop()``" +" 方法会返回创建 task 或 future 对象的事件循环的实例。 :meth:`Server.get_loop() " +"` 允许为 :class:`asyncio.Server` 对象执行同样操作。 (由 Yury " +"Selivanov 在 :issue:`32415` 中,以及由 Srinivas Reddy Thatiparthy 在 :issue:`32418`" +" 中贡献。)" + +#: ../../whatsnew/3.7.rst:703 +msgid "" +"It is now possible to control how instances of :class:`asyncio.Server` begin" +" serving. Previously, the server would start serving immediately when " +"created. The new *start_serving* keyword argument to " +":meth:`loop.create_server() ` and " +":meth:`loop.create_unix_server() `, as well" +" as :meth:`Server.start_serving() `, and " +":meth:`Server.serve_forever() ` can be used to" +" decouple server instantiation and serving. The new " +":meth:`Server.is_serving() ` method returns " +"``True`` if the server is serving. :class:`~asyncio.Server` objects are now" +" asynchronous context managers::" +msgstr "" +"现在可以控制 :class:`asyncio.Server` 的实例如何开启服务。 之前,服务在创建后将立即开启服务。 新的 " +"*start_serving* 关键字参数已添加到 :meth:`loop.create_server() " +"` 和 :meth:`loop.create_unix_server() " +"`,并且 :meth:`Server.start_serving() " +"`, 和 :meth:`Server.serve_forever() " +"` 可被用来分离服务的实例化和服务的开启。 新的 " +":meth:`Server.is_serving() ` 方法会在服务开启时返回 " +"``True``。 现在 :class:`~asyncio.Server` 对象已是异步上下文管理器::" + +#: ../../whatsnew/3.7.rst:722 +msgid "(Contributed by Yury Selivanov in :issue:`32662`.)" +msgstr "(由 Yury Selivanov 在 :issue:`32662` 中贡献。)" + +#: ../../whatsnew/3.7.rst:724 +msgid "" +"Callback objects returned by :func:`loop.call_later() " +"` gained the new :meth:`when() " +"` method which returns an absolute scheduled " +"callback timestamp. (Contributed by Andrew Svetlov in :issue:`32741`.)" +msgstr "" +"由 :func:`loop.call_later() ` 所返回的回调对象已获得新的 " +":meth:`when() ` 方法,该方法会返回一个排入计划日程的绝对时间戳。 (由 Andrew" +" Svetlov 在 :issue:`32741` 中贡献。)" + +#: ../../whatsnew/3.7.rst:730 +msgid "" +"The :meth:`loop.create_datagram_endpoint() \\ " +"` method gained support for Unix " +"sockets. (Contributed by Quentin Dawans in :issue:`31245`.)" +msgstr "" +":meth:`loop.create_datagram_endpoint() \\ " +"` 方法已获得对 Unix 套接字的支持。 (由 Quentin " +"Dawans 在 :issue:`31245` 中贡献。)" + +#: ../../whatsnew/3.7.rst:735 +msgid "" +"The :func:`asyncio.open_connection`, :func:`asyncio.start_server` functions," +" :meth:`loop.create_connection() `, " +":meth:`loop.create_server() `, " +":meth:`loop.create_accepted_socket() `" +" methods and their corresponding UNIX socket variants now accept the " +"*ssl_handshake_timeout* keyword argument. (Contributed by Neil Aspinall in " +":issue:`29970`.)" +msgstr "" +":func:`asyncio.open_connection`, :func:`asyncio.start_server` functions, " +":meth:`loop.create_connection() `, " +":meth:`loop.create_server() `, " +":meth:`loop.create_accepted_socket() `" +" 方法及其对应的 UNIX 套接字变体现在接受 *ssl_handshake_timeout* 关键字参数。 (由 Neil Aspinall 在 " +":issue:`29970` 中贡献。)" + +#: ../../whatsnew/3.7.rst:743 +msgid "" +"The new :meth:`Handle.cancelled() ` method returns" +" ``True`` if the callback was cancelled. (Contributed by Marat Sharafutdinov" +" in :issue:`31943`.)" +msgstr "" +"新的 :meth:`Handle.cancelled() ` 方法会在回调被取消时返回 " +"``True``。 (由 Marat Sharafutdinov 在 :issue:`31943` 中贡献。)" + +#: ../../whatsnew/3.7.rst:747 +msgid "" +"The asyncio source has been converted to use the " +":keyword:`async`/:keyword:`await` syntax. (Contributed by Andrew Svetlov in " +":issue:`32193`.)" +msgstr "" +"asyncio 源已被转换为使用 :keyword:`async`/:keyword:`await` 语法。 (由 Andrew Svetlov 在 " +":issue:`32193` 中贡献。)" + +#: ../../whatsnew/3.7.rst:751 +msgid "" +"The new :meth:`ReadTransport.is_reading() " +"` method can be used to determine the " +"reading state of the transport. Additionally, calls to " +":meth:`ReadTransport.resume_reading() " +"` and " +":meth:`ReadTransport.pause_reading() ` " +"are now idempotent. (Contributed by Yury Selivanov in :issue:`32356`.)" +msgstr "" +"新的 :meth:`ReadTransport.is_reading() ` " +"方法可用于确定传输的读取状态。 此外,对 :meth:`ReadTransport.resume_reading() " +"` 和 " +":meth:`ReadTransport.pause_reading() ` " +"的调用现在是幂等的。 (由 Yury Selivanov 在 :issue:`32356` 中贡献。)" + +#: ../../whatsnew/3.7.rst:759 +msgid "" +"Loop methods which accept socket paths now support passing :term:`path-like " +"objects `. (Contributed by Yury Selivanov in " +":issue:`32066`.)" +msgstr "" +"接受套接字路径的循环方法现在支持传入 :term:`路径类对象 `。 (由 Yury Selivanov 在 " +":issue:`32066` 中贡献。)" + +#: ../../whatsnew/3.7.rst:763 +msgid "" +"In :mod:`asyncio` TCP sockets on Linux are now created with ``TCP_NODELAY`` " +"flag set by default. (Contributed by Yury Selivanov and Victor Stinner in " +":issue:`27456`.)" +msgstr "" +"在 :mod:`asyncio` 中,Linux 上的 TCP 套接字现在创建时默认带有 ``TCP_NODELAY`` 旗标设置。 (由 Yury " +"Selivanov 和 Victor Stinner 在 :issue:`27456` 中贡献。)" + +#: ../../whatsnew/3.7.rst:767 +msgid "" +"Exceptions occurring in cancelled tasks are no longer logged. (Contributed " +"by Yury Selivanov in :issue:`30508`.)" +msgstr "在被取消任务中发生的异常不会再被记录。 (由 Yury Selivanov 在 :issue:`30508` 中贡献。)" + +#: ../../whatsnew/3.7.rst:770 +msgid "" +"New ``WindowsSelectorEventLoopPolicy`` and " +"``WindowsProactorEventLoopPolicy`` classes. (Contributed by Yury Selivanov " +"in :issue:`33792`.)" +msgstr "" +"新的 ``WindowsSelectorEventLoopPolicy`` 和 ``WindowsProactorEventLoopPolicy`` " +"类。 (由 Yury Selivanov 在 :issue:`33792` 中贡献。)" + +#: ../../whatsnew/3.7.rst:774 +msgid "" +"Several ``asyncio`` APIs have been :ref:`deprecated `." +msgstr "部分 ``asyncio`` API 改为 :ref:`已弃用 `。" + +#: ../../whatsnew/3.7.rst:779 +msgid "binascii" +msgstr "binascii" + +#: ../../whatsnew/3.7.rst:781 +msgid "" +"The :func:`~binascii.b2a_uu` function now accepts an optional *backtick* " +"keyword argument. When it's true, zeros are represented by ``'`'`` instead " +"of spaces. (Contributed by Xiang Zhang in :issue:`30103`.)" +msgstr "" +":func:`~binascii.b2a_uu` 函数现在接受可选的 *backtick* 关键字参数。 当其为真值时,零会以 ``'`'`` " +"而非空格来表示。 (由 Xiang Zhang 在 :issue:`30103` 中贡献。)" + +#: ../../whatsnew/3.7.rst:787 +msgid "calendar" +msgstr "calendar" + +#: ../../whatsnew/3.7.rst:789 +msgid "" +"The :class:`~calendar.HTMLCalendar` class has new class attributes which " +"ease the customization of CSS classes in the produced HTML calendar. " +"(Contributed by Oz Tiram in :issue:`30095`.)" +msgstr "" +":class:`~calendar.HTMLCalendar` 类具有新的类属性,可以简化所生成 HTML 日历中 CSS 类的自定义。 (由 Oz " +"Tiram 在 :issue:`30095` 中贡献。)" + +#: ../../whatsnew/3.7.rst:795 ../../whatsnew/3.7.rst:1964 +msgid "collections" +msgstr "collections" + +#: ../../whatsnew/3.7.rst:797 +msgid "" +"``collections.namedtuple()`` now supports default values. (Contributed by " +"Raymond Hettinger in :issue:`32320`.)" +msgstr "" +"``collections.namedtuple()`` 现在支持默认值。 (由 Raymond Hettinger 在 :issue:`32320` " +"中贡献。)" + +#: ../../whatsnew/3.7.rst:802 +msgid "compileall" +msgstr "compileall" + +#: ../../whatsnew/3.7.rst:804 +msgid "" +":func:`compileall.compile_dir` learned the new *invalidation_mode* " +"parameter, which can be used to enable :ref:`hash-based .pyc invalidation " +"`. The invalidation mode can also be specified on the " +"command line using the new ``--invalidation-mode`` argument. (Contributed by" +" Benjamin Peterson in :issue:`31650`.)" +msgstr "" +":func:`compileall.compile_dir` 增加了新的 *invalidation_mode* 形参,可用于启用 " +":ref:`基于哈希值的 .pyc 有效性检测 `。 失效模式也可以在命令行中使用新的 " +"``--invalidation-mode`` 参数来指定。 (由 Benjamin Peterson 在 :issue:`31650` 中贡献。)" + +#: ../../whatsnew/3.7.rst:813 +msgid "concurrent.futures" +msgstr "concurrent.futures" + +#: ../../whatsnew/3.7.rst:815 +msgid "" +":class:`ProcessPoolExecutor ` and " +":class:`ThreadPoolExecutor ` now " +"support the new *initializer* and *initargs* constructor arguments. " +"(Contributed by Antoine Pitrou in :issue:`21423`.)" +msgstr "" +":class:`ProcessPoolExecutor ` 和 " +":class:`ThreadPoolExecutor ` 现在支持新的 " +"*初始化器* 以及 *initargs* 构造器参数。 (由 Antoine Pitrou 在 :issue:`21423` 中贡献。)" + +#: ../../whatsnew/3.7.rst:820 +msgid "" +"The :class:`ProcessPoolExecutor ` " +"can now take the multiprocessing context via the new *mp_context* argument. " +"(Contributed by Thomas Moreau in :issue:`31540`.)" +msgstr "" +":class:`ProcessPoolExecutor ` " +"现在能通过新的 *mp_context* 参数来接受多进程上下文。 (由 Thomas Moreau 在 :issue:`31540` 中贡献。)" + +#: ../../whatsnew/3.7.rst:826 +msgid "contextlib" +msgstr "contextlib" + +#: ../../whatsnew/3.7.rst:828 +msgid "" +"The new :func:`~contextlib.nullcontext` is a simpler and faster no-op " +"context manager than :class:`~contextlib.ExitStack`. (Contributed by Jesse-" +"Bakker in :issue:`10049`.)" +msgstr "" +"新的 :func:`~contextlib.nullcontext` 是一个比 :class:`~contextlib.ExitStack` " +"更简单和快速的无操作上下文管理器。 (由 Jesse-Bakker 在 :issue:`10049` 中贡献。)" + +#: ../../whatsnew/3.7.rst:832 +msgid "" +"The new :func:`~contextlib.asynccontextmanager`, " +":class:`~contextlib.AbstractAsyncContextManager`, and " +":class:`~contextlib.AsyncExitStack` have been added to complement their " +"synchronous counterparts. (Contributed by Jelle Zijlstra in :issue:`29679` " +"and :issue:`30241`, and by Alexander Mohr and Ilya Kulakov in " +":issue:`29302`.)" +msgstr "" +"增加了新的 :func:`~contextlib.asynccontextmanager`, " +":class:`~contextlib.AbstractAsyncContextManager` 和 " +":class:`~contextlib.AsyncExitStack` 以补充它们所对应的同步项。 (由 Jelle Zijlstra 在 " +":issue:`29679` 和 :issue:`30241` 中,以及由 Alexander Mohr 和 Ilya Kulakov 在 " +":issue:`29302` 中贡献。)" + +#: ../../whatsnew/3.7.rst:841 +msgid "cProfile" +msgstr "cProfile" + +#: ../../whatsnew/3.7.rst:843 +msgid "" +"The :mod:`cProfile` command line now accepts ``-m module_name`` as an " +"alternative to script path. (Contributed by Sanyam Khurana in " +":issue:`21862`.)" +msgstr "" +":mod:`cProfile` 命令行现在接受 ``-m module_name`` 作为脚本路径的替代。 (由 Sanyam Khurana 在 " +":issue:`21862` 中贡献。)" + +#: ../../whatsnew/3.7.rst:848 +msgid "crypt" +msgstr "crypt" + +#: ../../whatsnew/3.7.rst:850 +msgid "" +"The :mod:`crypt` module now supports the Blowfish hashing method. " +"(Contributed by Serhiy Storchaka in :issue:`31664`.)" +msgstr "" +":mod:`crypt` 模块现在支持 Blowfish 哈希方法。 (由 Serhiy Storchaka 在 :issue:`31664` " +"中贡献。)" + +#: ../../whatsnew/3.7.rst:853 +msgid "" +"The :func:`~crypt.mksalt` function now allows specifying the number of " +"rounds for hashing. (Contributed by Serhiy Storchaka in :issue:`31702`.)" +msgstr "" +":func:`~crypt.mksalt` 函数现在允许指定哈希操作的轮数。 (由 Serhiy Storchaka 在 :issue:`31702` " +"中贡献。)" + +#: ../../whatsnew/3.7.rst:858 +msgid "datetime" +msgstr "datetime" + +#: ../../whatsnew/3.7.rst:860 +msgid "" +"The new :meth:`datetime.fromisoformat() ` " +"method constructs a :class:`~datetime.datetime` object from a string in one " +"of the formats output by :meth:`datetime.isoformat() " +"`. (Contributed by Paul Ganssle in " +":issue:`15873`.)" +msgstr "" +"新的 :meth:`datetime.fromisoformat() ` 方法会基于由" +" :meth:`datetime.isoformat()` 所输出的某一特定格式字符串构建 :class:`~datetime.datetime` " +"对象。 (由 Paul Ganssle 在 :issue:`15873` 中贡献。)" + +#: ../../whatsnew/3.7.rst:866 +msgid "" +"The :class:`tzinfo ` class now supports sub-minute offsets." +" (Contributed by Alexander Belopolsky in :issue:`5288`.)" +msgstr "" +":class:`tzinfo ` 类现在支持小于一分钟的偏移量。 (由 Alexander Belopolsky 在 " +":issue:`5288` 中贡献。)" + +#: ../../whatsnew/3.7.rst:871 ../../whatsnew/3.7.rst:1974 +msgid "dbm" +msgstr "dbm" + +#: ../../whatsnew/3.7.rst:873 +msgid "" +":mod:`dbm.dumb` now supports reading read-only files and no longer writes " +"the index file when it is not changed." +msgstr ":mod:`dbm.dumb` 现在支持读取只读文件,并且在其未改变时不再写入索引文件。" + +#: ../../whatsnew/3.7.rst:878 +msgid "decimal" +msgstr "decimal" + +#: ../../whatsnew/3.7.rst:880 +msgid "" +"The :mod:`decimal` module now uses :ref:`context variables " +"` to store the decimal context. (Contributed by Yury " +"Selivanov in :issue:`32630`.)" +msgstr "" +":mod:`decimal` 模块现在使用 :ref:`上下文变量 ` 来储存十进制值上下文。 (由 Yury " +"Selivanov 在 :issue:`32630` 中贡献。)" + +#: ../../whatsnew/3.7.rst:886 +msgid "dis" +msgstr "dis" + +#: ../../whatsnew/3.7.rst:888 +msgid "" +"The :func:`~dis.dis` function is now able to disassemble nested code objects" +" (the code of comprehensions, generator expressions and nested functions, " +"and the code used for building nested classes). The maximum depth of " +"disassembly recursion is controlled by the new *depth* parameter. " +"(Contributed by Serhiy Storchaka in :issue:`11822`.)" +msgstr "" +":func:`~dis.dis` 函数现在能够反汇编嵌套的代码对象(推导式、生成器表达式和嵌套函数的代码,以及用于构建嵌套类的代码)。 " +"反汇编递归的最大深度由新的 *depth* 形参来控制。 (由 Serhiy Storchaka 在 :issue:`11822` 中贡献。)" + +#: ../../whatsnew/3.7.rst:897 +msgid "distutils" +msgstr "distutils" + +#: ../../whatsnew/3.7.rst:899 +msgid "" +"``README.rst`` is now included in the list of distutils standard READMEs and" +" therefore included in source distributions. (Contributed by Ryan Gonzalez " +"in :issue:`11913`.)" +msgstr "" +"``README.rst`` 现在包含在 distutils 的标准 README 列表之中,因而也包含在源码发布之中。 (由 Ryan " +"Gonzalez 在 :issue:`11913` 中贡献。)" + +#: ../../whatsnew/3.7.rst:905 ../../whatsnew/3.7.rst:1984 +msgid "enum" +msgstr "enum" + +#: ../../whatsnew/3.7.rst:907 +msgid "" +"The :class:`Enum ` learned the new ``_ignore_`` class property, " +"which allows listing the names of properties which should not become enum " +"members. (Contributed by Ethan Furman in :issue:`31801`.)" +msgstr "" +":class:`Enum ` 增加了新的 ``_ignore_`` 类特征属性,该属性允许列出不应当成为枚举成员的特征属性名称。 " +"(由 Ethan Furman 在 :issue:`31801` 中贡献。)" + +#: ../../whatsnew/3.7.rst:912 +msgid "" +"In Python 3.8, attempting to check for non-Enum objects in :class:`Enum` " +"classes will raise a :exc:`TypeError` (e.g. ``1 in Color``); similarly, " +"attempting to check for non-Flag objects in a :class:`Flag` member will " +"raise :exc:`TypeError` (e.g. ``1 in Perm.RW``); currently, both operations " +"return :const:`False` instead and are deprecated. (Contributed by Ethan " +"Furman in :issue:`33217`.)" +msgstr "" +"在 Python 3.8 中,尝试在 :class:`Enum` 类中检查非 Enum 对象将引发 :exc:`TypeError` (例如 ``1 " +"in Color``);类似地,尝试在 :class:`Flag` 成员中检查非 Flag 对象也将引发 :exc:`TypeError` (例如 " +"``1 in Perm.RW``);目前,两种操作均会返回 :const:`False` 并且已弃用。 (由 Ethan Furman 在 " +":issue:`33217` 中贡献。)" + +#: ../../whatsnew/3.7.rst:921 +msgid "functools" +msgstr "functools" + +#: ../../whatsnew/3.7.rst:923 +msgid "" +":func:`functools.singledispatch` now supports registering implementations " +"using type annotations. (Contributed by Łukasz Langa in :issue:`32227`.)" +msgstr "" +":func:`functools.singledispatch` 现在支持使用类型标注来注册实现。 (由 Łukasz Langa 在 " +":issue:`32227` 中贡献。)" + +#: ../../whatsnew/3.7.rst:929 +msgid "gc" +msgstr "gc" + +#: ../../whatsnew/3.7.rst:931 +msgid "" +"The new :func:`gc.freeze` function allows freezing all objects tracked by " +"the garbage collector and excluding them from future collections. This can " +"be used before a POSIX ``fork()`` call to make the GC copy-on-write friendly" +" or to speed up collection. The new :func:`gc.unfreeze` functions reverses " +"this operation. Additionally, :func:`gc.get_freeze_count` can be used to " +"obtain the number of frozen objects. (Contributed by Li Zekun in " +":issue:`31558`.)" +msgstr "" +"新的 :func:`gc.freeze` 函数允许冻结由垃圾回收器所跟踪的所有对象,并将它们从未来的集合中排除。 这可以在 POSIX " +"``fork()`` 调用之前使用以令 GC 友好地进行写入时复制或加速收集。 新的 :func:`gc.unfreeze` 函数会反转此操作。 " +"此外,:func:`gc.get_freeze_count` 可被用于获取冻结对象的数量。 (由 Li Zekun 在 :issue:`31558` " +"中贡献。)" + +#: ../../whatsnew/3.7.rst:941 +msgid "hmac" +msgstr "hmac" + +#: ../../whatsnew/3.7.rst:943 +msgid "" +"The :mod:`hmac` module now has an optimized one-shot :func:`~hmac.digest` " +"function, which is up to three times faster than :func:`~hmac.HMAC`. " +"(Contributed by Christian Heimes in :issue:`32433`.)" +msgstr "" +":mod:`hmac` 现在具有经优化的一次性 :func:`~hmac.digest` 函数,其速度比 :func:`~hmac.HMAC` " +"要快三倍。 (由 Christian Heimes 在 :issue:`32433` 中贡献。)" + +#: ../../whatsnew/3.7.rst:949 +msgid "http.client" +msgstr "http.client" + +#: ../../whatsnew/3.7.rst:951 +msgid "" +":class:`~http.client.HTTPConnection` and " +":class:`~http.client.HTTPSConnection` now support the new *blocksize* " +"argument for improved upload throughput. (Contributed by Nir Soffer in " +":issue:`31945`.)" +msgstr "" +":class:`~http.client.HTTPConnection` 和 :class:`~http.client.HTTPSConnection`" +" 现在支持新的 *blocksize* 参数以提升上传吞吐量。 (由 Nir Soffer 在 :issue:`31945` 中贡献。)" + +#: ../../whatsnew/3.7.rst:957 +msgid "http.server" +msgstr "http.server" + +#: ../../whatsnew/3.7.rst:959 +msgid "" +":class:`~http.server.SimpleHTTPRequestHandler` now supports the HTTP ``If-" +"Modified-Since`` header. The server returns the 304 response status if the " +"target file was not modified after the time specified in the header. " +"(Contributed by Pierre Quentel in :issue:`29654`.)" +msgstr "" +":class:`~http.server.SimpleHTTPRequestHandler` 现在支持 HTTP ``If-Modified-" +"Since`` 标头。 如果目标文件在该标点指定的时间之后未被修改则服务器会返回 304 响应状态。 (由 Pierre Quentel 在 " +":issue:`29654` 中贡献。)" + +#: ../../whatsnew/3.7.rst:964 +msgid "" +":class:`~http.server.SimpleHTTPRequestHandler` accepts the new *directory* " +"argument, in addition to the new ``--directory`` command line argument. With" +" this parameter, the server serves the specified directory, by default it " +"uses the current working directory. (Contributed by Stéphane Wirtel and " +"Julien Palard in :issue:`28707`.)" +msgstr "" +":class:`~http.server.SimpleHTTPRequestHandler` 接受新的 *directory* 参数并增加了新的 " +"``--directory`` 命令行参数。 通过此形参,服务器可以对服务指定目录,默认情况下它使用当前工作目录。 (由 Stéphane Wirtel" +" 和 Julien Palard 在 :issue:`28707` 中贡献。)" + +#: ../../whatsnew/3.7.rst:970 +msgid "" +"The new :class:`ThreadingHTTPServer ` class" +" uses threads to handle requests using " +":class:`~socketserver.ThreadingMixin`. It is used when ``http.server`` is " +"run with ``-m``. (Contributed by Julien Palard in :issue:`31639`.)" +msgstr "" +"新的 :class:`ThreadingHTTPServer ` 类使用线程来处理使用" +" :class:`~socketserver.ThreadingMixin` 的请求。 它会在 ``http.server`` 附带 ``-m`` " +"运行时被使用。 (由 Julien Palard 在 :issue:`31639` 中贡献。)" + +#: ../../whatsnew/3.7.rst:977 +msgid "idlelib and IDLE" +msgstr "idlelib 与 IDLE" + +#: ../../whatsnew/3.7.rst:979 +msgid "" +"Multiple fixes for autocompletion. (Contributed by Louie Lu in " +":issue:`15786`.)" +msgstr "多个对自动补全的修正。 (由 Louie Lu 在 :issue:`15786` 中贡献。)" + +#: ../../whatsnew/3.7.rst:981 +msgid "" +"Module Browser (on the File menu, formerly called Class Browser), now " +"displays nested functions and classes in addition to top-level functions and" +" classes. (Contributed by Guilherme Polo, Cheryl Sabella, and Terry Jan " +"Reedy in :issue:`1612262`.)" +msgstr "" +"Module Browser (在 File 菜单中,之前称为 Class Browser) 现在会在最高层级函数和类之外显示嵌套的函数和类。 (由 " +"Guilherme Polo, Cheryl Sabella 和 Terry Jan Reedy 在 :issue:`1612262` 中贡献。)" + +#: ../../whatsnew/3.7.rst:987 +msgid "" +"The Settings dialog (Options, Configure IDLE) has been partly rewritten to " +"improve both appearance and function. (Contributed by Cheryl Sabella and " +"Terry Jan Reedy in multiple issues.)" +msgstr "" +"Settings 对话框 (Options 中的 Configure IDLE) 已经被部分重写以改进外观和功能。 (由 Cheryl Sabella " +"和 Terry Jan Reedy 在多个问题项中贡献。)" + +#: ../../whatsnew/3.7.rst:991 +msgid "" +"The font sample now includes a selection of non-Latin characters so that " +"users can better see the effect of selecting a particular font. (Contributed" +" by Terry Jan Reedy in :issue:`13802`.) The sample can be edited to include " +"other characters. (Contributed by Serhiy Storchaka in :issue:`31860`.)" +msgstr "" +"字体样本现在包括一组非拉丁字符以便用户能更好地查看所选特定字体的效果。 (由 Terry Jan Reedy 在 :issue:`13802` " +"中贡献。) 样本可以被修改以包括其他字符。 (由 Serhiy Storchaka 在 :issue:`31860` 中贡献。)" + +#: ../../whatsnew/3.7.rst:997 +msgid "" +"The IDLE features formerly implemented as extensions have been reimplemented" +" as normal features. Their settings have been moved from the Extensions tab" +" to other dialog tabs. (Contributed by Charles Wohlganger and Terry Jan " +"Reedy in :issue:`27099`.)" +msgstr "" +"之前以扩展形式实现的 IDLE 特性已作为正常特性重新实现。 它们的设置已从 Extensions 选项卡移至其他对话框选项卡。 (由 Charles " +"Wohlganger 和 Terry Jan Reedy 在 :issue:`27099` 中实现。)" + +#: ../../whatsnew/3.7.rst:1002 +msgid "" +"Editor code context option revised. Box displays all context lines up to " +"maxlines. Clicking on a context line jumps the editor to that line. " +"Context colors for custom themes is added to Highlights tab of Settings " +"dialog. (Contributed by Cheryl Sabella and Terry Jan Reedy in " +":issue:`33642`, :issue:`33768`, and :issue:`33679`.)" +msgstr "" +"编辑器代码上下文选项已经过修改。 Box 会显示所有上下文行直到最大行数。 点击一个上下文行会使编辑器跳转到该行。 自定义主题的上下文颜色已添加到 " +"Settings 对话框的 Highlights 选项卡。 (由 Cheryl Sabella 和 Terry Jan Reedy 在 " +":issue:`33642`, :issue:`33768` 和 :issue:`33679` 中贡献。)" + +#: ../../whatsnew/3.7.rst:1008 +msgid "" +"On Windows, a new API call tells Windows that tk scales for DPI. On Windows " +"8.1+ or 10, with DPI compatibility properties of the Python binary " +"unchanged, and a monitor resolution greater than 96 DPI, this should make " +"text and lines sharper. It should otherwise have no effect. (Contributed by" +" Terry Jan Reedy in :issue:`33656`.)" +msgstr "" +"在 Windows 上,会有新的 API 调用将 tk 对 DPI 的调整告知 Windows。 在 Windows 8.1+ 或 10 上,如果 " +"Python 二进制码的 DPI 兼容属性未改变,并且监视器分辨率大于 96 DPI,这应该会令文本和线条更清晰。 否则的话它应该不造成影响。 (由 " +"Terry Jan Reedy 在 :issue:`33656` 中贡献。)" + +#: ../../whatsnew/3.7.rst:1014 +msgid "New in 3.7.1:" +msgstr "在 3.7.1 中新增:" + +#: ../../whatsnew/3.7.rst:1016 +msgid "" +"Output over N lines (50 by default) is squeezed down to a button. N can be " +"changed in the PyShell section of the General page of the Settings dialog. " +"Fewer, but possibly extra long, lines can be squeezed by right clicking on " +"the output. Squeezed output can be expanded in place by double-clicking the" +" button or into the clipboard or a separate window by right-clicking the " +"button. (Contributed by Tal Einat in :issue:`1529353`.)" +msgstr "" +"超过 N 行(默认值为 50)的输出将被折叠为一个按钮。 N 可以在 Settings 对话框的 General 页的 PyShell 部分中进行修改。" +" 数量较少但是超长的行可以通过在输出上右击来折叠。 被折叠的输出可通过双击按钮来展开,或是通过右击按钮来放入剪贴板或是单独的窗口。 (由 Tal " +"Einat 在 :issue:`1529353` 中贡献。)" + +#: ../../whatsnew/3.7.rst:1023 +msgid "The changes above have been backported to 3.6 maintenance releases." +msgstr "上述修改已被反向移植到 3.6 维护发行版中。" + +#: ../../whatsnew/3.7.rst:1025 +msgid "NEW in 3.7.4:" +msgstr "在 3.7.4 中新增:" + +#: ../../whatsnew/3.7.rst:1027 +msgid "" +"Add \"Run Customized\" to the Run menu to run a module with customized " +"settings. Any command line arguments entered are added to sys.argv. They re-" +"appear in the box for the next customized run. One can also suppress the " +"normal Shell main module restart. (Contributed by Cheryl Sabella, Terry Jan" +" Reedy, and others in :issue:`5680` and :issue:`37627`.)" +msgstr "" +"在 Run 菜单中增加了 \"Run Customized\" 以使用自定义设置来运行模块。 输入的任何命令行参数都会被加入 sys.argv。 " +"它们在下次自定义运行时会再次显示在窗体中。 用户也可以禁用通常的 Shell 主模块重启。 (由 Cheryl Sabella, Terry Jan " +"Reedy 等人在 :issue:`5680` 和 :issue:`37627` 中贡献。)" + +#: ../../whatsnew/3.7.rst:1033 +msgid "New in 3.7.5:" +msgstr "在 3.7.5 中新增:" + +#: ../../whatsnew/3.7.rst:1035 +msgid "" +"Add optional line numbers for IDLE editor windows. Windows open without line" +" numbers unless set otherwise in the General tab of the configuration " +"dialog. Line numbers for an existing window are shown and hidden in the " +"Options menu. (Contributed by Tal Einat and Saimadhav Heblikar in " +":issue:`17535`.)" +msgstr "" +"在 IDLE 编辑器窗口中增加了可选的行序号。 窗口打开时默认不带行序号,除非在配置对话框的 General 选项卡中进行设置。 " +"已打开窗口中的行序号可以在 Options 菜单中显示和隐藏。 (由 Tal Einat 和 Saimadhav Heblikar 在 " +":issue:`17535` 中贡献。)" + +#: ../../whatsnew/3.7.rst:1043 ../../whatsnew/3.7.rst:2003 +msgid "importlib" +msgstr "importlib" + +#: ../../whatsnew/3.7.rst:1045 +msgid "" +"The :class:`importlib.abc.ResourceReader` ABC was introduced to support the " +"loading of resources from packages. See also " +":ref:`whatsnew37_importlib_resources`. (Contributed by Barry Warsaw, Brett " +"Cannon in :issue:`32248`.)" +msgstr "" +"引入了 :class:`importlib.abc.ResourceReader` ABC 以支持从包中加载资源。 另请参阅 " +":ref:`whatsnew37_importlib_resources`。 (由 Barry Warsaw, Brett Cannon 在 " +":issue:`32248` 中贡献。)" + +#: ../../whatsnew/3.7.rst:1050 +msgid "" +":func:`importlib.reload` now raises :exc:`ModuleNotFoundError` if the module" +" lacks a spec. (Contributed by Garvit Khatri in :issue:`29851`.)" +msgstr "" +"如果模块缺少规格描述 :func:`importlib.reload` 现在会引发 :exc:`ModuleNotFoundError`。 (由 " +"Garvit Khatri 在 :issue:`29851` 中贡献。)" + +#: ../../whatsnew/3.7.rst:1054 +msgid "" +":func:`importlib.find_spec` now raises :exc:`ModuleNotFoundError` instead of" +" :exc:`AttributeError` if the specified parent module is not a package (i.e." +" lacks a ``__path__`` attribute). (Contributed by Milan Oberkirch in " +":issue:`30436`.)" +msgstr "" +"如果指定的父模块不是一个包 (即缺少 ``__path__`` 属性) :func:`importlib.find_spec` 现在会引发 " +":exc:`ModuleNotFoundError` 而非 :exc:`AttributeError`。 (由 Milan Oberkirch 在 " +":issue:`30436` 中贡献。)" + +#: ../../whatsnew/3.7.rst:1059 +msgid "" +"The new :func:`importlib.source_hash` can be used to compute the hash of the" +" passed source. A :ref:`hash-based .pyc file ` embeds " +"the value returned by this function." +msgstr "" +"新的 :func:`importlib.source_hash` 可被用来计算传入源的哈希值。 :ref:`基于哈希值的 .pyc 文件 " +"` 会嵌入此函数所返回的值。" + +#: ../../whatsnew/3.7.rst:1065 +msgid "io" +msgstr "io" + +#: ../../whatsnew/3.7.rst:1067 +msgid "" +"The new :meth:`TextIOWrapper.reconfigure() ` " +"method can be used to reconfigure the text stream with the new settings. " +"(Contributed by Antoine Pitrou in :issue:`30526` and INADA Naoki in " +":issue:`15216`.)" +msgstr "" +"新的 :meth:`TextIOWrapper.reconfigure() ` " +"方法可用于根据新的设置重新配置文本流。 (由 Antoine Pitrou 在 :issue:`30526` 以及 INADA Naoki 在 " +":issue:`15216` 中贡献。)" + +#: ../../whatsnew/3.7.rst:1074 +msgid "ipaddress" +msgstr "ipaddress" + +#: ../../whatsnew/3.7.rst:1076 +msgid "" +"The new ``subnet_of()`` and ``supernet_of()`` methods of " +":class:`ipaddress.IPv6Network` and :class:`ipaddress.IPv4Network` can be " +"used for network containment tests. (Contributed by Michel Albert and Cheryl" +" Sabella in :issue:`20825`.)" +msgstr "" +"methods of :class:`ipaddress.IPv6Network` 和 :class:`ipaddress.IPv4Network` " +"中新的 ``subnet_of()`` 以及 ``supernet_of()`` 方法可用于网络包含测试。 (由 Michel Albert 和 " +"Cheryl Sabella 在 :issue:`20825` 中贡献。)" + +#: ../../whatsnew/3.7.rst:1083 +msgid "itertools" +msgstr "itertools" + +#: ../../whatsnew/3.7.rst:1085 +msgid "" +":func:`itertools.islice` now accepts :meth:`integer-like objects " +"` as start, stop, and slice arguments. (Contributed by " +"Will Roberts in :issue:`30537`.)" +msgstr "" +":func:`itertools.islice` 现在接受 :meth:`类整数对象 ` 作为 start, " +"stop 和 slice 参数。 (由 Will Roberts 在 :issue:`30537` 中贡献。)" + +#: ../../whatsnew/3.7.rst:1092 ../../whatsnew/3.7.rst:2021 +msgid "locale" +msgstr "locale" + +#: ../../whatsnew/3.7.rst:1094 +msgid "" +"The new *monetary* argument to :func:`locale.format_string` can be used to " +"make the conversion use monetary thousands separators and grouping strings." +" (Contributed by Garvit in :issue:`10379`.)" +msgstr "" +":func:`locale.format_string` 中新的 *monetary* 参数可用于转换所使用的千位分隔符和分组字符串。 (由 " +"Garvit 在 :issue:`10379` 中贡献。)" + +#: ../../whatsnew/3.7.rst:1098 +msgid "" +"The :func:`locale.getpreferredencoding` function now always returns " +"``'UTF-8'`` on Android or when in the :ref:`forced UTF-8 mode " +"`." +msgstr "" +"现在 :func:`locale.getpreferredencoding` 函数在 Android 上或是在 :ref:`强制 UTF-8 模式 " +"` 下总是返回 ``'UTF-8'`` 。" + +#: ../../whatsnew/3.7.rst:1103 +msgid "logging" +msgstr "logging" + +#: ../../whatsnew/3.7.rst:1105 +msgid "" +":class:`~logging.Logger` instances can now be pickled. (Contributed by Vinay" +" Sajip in :issue:`30520`.)" +msgstr "" +":class:`~logging.Logger` 实例现在可以被 pickle。 (由 Vinay Sajip 在 :issue:`30520` " +"中贡献。)" + +#: ../../whatsnew/3.7.rst:1108 +msgid "" +"The new :meth:`StreamHandler.setStream() ` " +"method can be used to replace the logger stream after handler creation. " +"(Contributed by Vinay Sajip in :issue:`30522`.)" +msgstr "" +"新的 :meth:`StreamHandler.setStream() ` " +"方法可用于在句柄创建之后替换日志流。 (由 Vinay Sajip 在 :issue:`30522` 中创建。)" + +#: ../../whatsnew/3.7.rst:1112 +msgid "" +"It is now possible to specify keyword arguments to handler constructors in " +"configuration passed to :func:`logging.config.fileConfig`. (Contributed by " +"Preston Landers in :issue:`31080`.)" +msgstr "" +"现在可以在传递给 :func:`logging.config.fileConfig` 的配置信息中对句柄构造器指定关键字参数。 (由 Preston " +"Landers 在 :issue:`31080` 中贡献。)" + +#: ../../whatsnew/3.7.rst:1118 +msgid "math" +msgstr "math" + +#: ../../whatsnew/3.7.rst:1120 +msgid "" +"The new :func:`math.remainder` function implements the IEEE 754-style " +"remainder operation. (Contributed by Mark Dickinson in :issue:`29962`.)" +msgstr "" +"新的 :func:`math.remainder` 函数实现了 IEEE 754 风格的余数运算。 (由 Mark Dickinson 在 " +":issue:`29962` 中贡献。)" + +#: ../../whatsnew/3.7.rst:1125 +msgid "mimetypes" +msgstr "mimetypes" + +#: ../../whatsnew/3.7.rst:1127 +msgid "" +"The MIME type of .bmp has been changed from ``'image/x-ms-bmp'`` to " +"``'image/bmp'``. (Contributed by Nitish Chandra in :issue:`22589`.)" +msgstr "" +".bmp 的 MIME type 从 ``'image/x-ms-bmp'`` 改为 ``'image/bmp'``。 (由 Nitish " +"Chandra 在 :issue:`22589` 中贡献。)" + +#: ../../whatsnew/3.7.rst:1133 +msgid "msilib" +msgstr "msilib" + +#: ../../whatsnew/3.7.rst:1135 +msgid "" +"The new :meth:`Database.Close() ` method can be used " +"to close the :abbr:`MSI` database. (Contributed by Berker Peksag in " +":issue:`20486`.)" +msgstr "" +"新的 :meth:`Database.Close() ` 方法可用于关闭 :abbr:`MSI` 数据库。" +" (由 Berker Peksag 在 :issue:`20486` 中贡献。)" + +#: ../../whatsnew/3.7.rst:1141 +msgid "multiprocessing" +msgstr "multiprocessing" + +#: ../../whatsnew/3.7.rst:1143 +msgid "" +"The new :meth:`Process.close() ` method " +"explicitly closes the process object and releases all resources associated " +"with it. :exc:`ValueError` is raised if the underlying process is still " +"running. (Contributed by Antoine Pitrou in :issue:`30596`.)" +msgstr "" +"新的 :meth:`Process.close() ` " +"方法会显式地关闭进程对象并释放与其关联的所有资源。 如果底层进程仍在运行则将引发 :exc:`ValueError`。 (由 Antoine " +"Pitrou 在 :issue:`30596` 中贡献。)" + +#: ../../whatsnew/3.7.rst:1149 +msgid "" +"The new :meth:`Process.kill() ` method can be " +"used to terminate the process using the :data:`SIGKILL` signal on Unix. " +"(Contributed by Vitor Pereira in :issue:`30794`.)" +msgstr "" +"新的 :meth:`Process.kill() ` 方法可用于在 Unix 上使用 " +":data:`SIGKILL` 信号来终止进程。 (由 Vitor Pereira 在 :issue:`30794` 中贡献。)" + +#: ../../whatsnew/3.7.rst:1153 +msgid "" +"Non-daemonic threads created by :class:`~multiprocessing.Process` are now " +"joined on process exit. (Contributed by Antoine Pitrou in :issue:`18966`.)" +msgstr "" +"由 :class:`~multiprocessing.Process` 所创建的非守护线程现在会在进程退出时被合并。 (由 Antoine Pitrou" +" 在 :issue:`18966` 中贡献。)" + +#: ../../whatsnew/3.7.rst:1159 +msgid "os" +msgstr "os" + +#: ../../whatsnew/3.7.rst:1161 +msgid "" +":func:`os.fwalk` now accepts the *path* argument as :class:`bytes`. " +"(Contributed by Serhiy Storchaka in :issue:`28682`.)" +msgstr "" +":func:`os.fwalk` 现在接受 :class:`bytes` 类型的 *path* 参数。 (由 Serhiy Storchaka 在 " +":issue:`28682` 中贡献。)" + +#: ../../whatsnew/3.7.rst:1164 +msgid "" +":func:`os.scandir` gained support for :ref:`file descriptors `. " +"(Contributed by Serhiy Storchaka in :issue:`25996`.)" +msgstr "" +":func:`os.scandir` 已获得对 :ref:`文件描述器 ` 的支持。 (由 Serhiy Storchaka 在 " +":issue:`25996` 中贡献。)" + +#: ../../whatsnew/3.7.rst:1167 +msgid "" +"The new :func:`~os.register_at_fork` function allows registering Python " +"callbacks to be executed at process fork. (Contributed by Antoine Pitrou in " +":issue:`16500`.)" +msgstr "" +"新的 :func:`~os.register_at_fork` 函数允许注册 Python 回调以便在进程分叉中执行。 (由 Antoine " +"Pitrou 在 :issue:`16500` 中贡献。)" + +#: ../../whatsnew/3.7.rst:1171 +msgid "" +"Added :func:`os.preadv` (combine the functionality of :func:`os.readv` and " +":func:`os.pread`) and :func:`os.pwritev` functions (combine the " +"functionality of :func:`os.writev` and :func:`os.pwrite`). (Contributed by " +"Pablo Galindo in :issue:`31368`.)" +msgstr "" +"增加了 :func:`os.preadv` (结合了 :func:`os.readv` 与 :func:`os.pread` 的功能) 以及 " +":func:`os.pwritev` 函数 (结合了 :func:`os.writev` 和 :func:`os.pwrite` 的功能)。 (由 " +"Pablo Galindo 在 :issue:`31368` 中贡献。)" + +#: ../../whatsnew/3.7.rst:1176 +msgid "" +"The mode argument of :func:`os.makedirs` no longer affects the file " +"permission bits of newly-created intermediate-level directories. " +"(Contributed by Serhiy Storchaka in :issue:`19930`.)" +msgstr "" +":func:`os.makedirs` 的 mode 参数不再影响新创建的中间层级目录的文件权限。 (由 Serhiy Storchaka 在 " +":issue:`19930` 中贡献。)" + +#: ../../whatsnew/3.7.rst:1180 +msgid "" +":func:`os.dup2` now returns the new file descriptor. Previously, ``None`` " +"was always returned. (Contributed by Benjamin Peterson in :issue:`32441`.)" +msgstr "" +":func:`os.dup2` 现在会返回新的文件描述器。 之前,返回的总是 ``None``。 (由 Benjamin Peterson 在 " +":issue:`32441` 中贡献。)" + +#: ../../whatsnew/3.7.rst:1184 +msgid "" +"The structure returned by :func:`os.stat` now contains the " +":attr:`~os.stat_result.st_fstype` attribute on Solaris and its derivatives. " +"(Contributed by Jesús Cea Avión in :issue:`32659`.)" +msgstr "" +"在 Solaris 及其派生系统上 :func:`os.stat` 所返回的结构现在会包含 " +":attr:`~os.stat_result.st_fstype` 属性。 (由 Jesús Cea Avión 在 :issue:`32659` " +"中贡献。)" + +#: ../../whatsnew/3.7.rst:1190 +msgid "pathlib" +msgstr "pathlib" + +#: ../../whatsnew/3.7.rst:1192 +msgid "" +"The new :meth:`Path.is_mount() ` method is now " +"available on POSIX systems and can be used to determine whether a path is a " +"mount point. (Contributed by Cooper Ry Lees in :issue:`30897`.)" +msgstr "" +"在 POSIX 类系统上新的 :meth:`Path.is_mount() ` " +"方法现在可用于确定一个路径是否为挂载点。 (由 Cooper Ry Lees 在 :issue:`30897` 中贡献。)" + +#: ../../whatsnew/3.7.rst:1198 +msgid "pdb" +msgstr "pdb" + +#: ../../whatsnew/3.7.rst:1200 +msgid "" +":func:`pdb.set_trace` now takes an optional *header* keyword-only argument." +" If given, it is printed to the console just before debugging begins. " +"(Contributed by Barry Warsaw in :issue:`31389`.)" +msgstr "" +":func:`pdb.set_trace` 现在接受一个可选的限关键字参数 *header*。 如果给出,它会在调试开始之前被打印到控制台。 (由 " +"Barry Warsaw 在 :issue:`31389` 中贡献。)" + +#: ../../whatsnew/3.7.rst:1204 +msgid "" +":mod:`pdb` command line now accepts ``-m module_name`` as an alternative to " +"script file. (Contributed by Mario Corchero in :issue:`32206`.)" +msgstr "" +":mod:`pdb` 命令行现在接受 ``-m module_name`` 作为对脚本文件的替代。 (由 Mario Corchero 在 " +":issue:`32206` 中贡献。)" + +#: ../../whatsnew/3.7.rst:1209 +msgid "py_compile" +msgstr "py_compile" + +#: ../../whatsnew/3.7.rst:1211 +msgid "" +":func:`py_compile.compile` -- and by extension, :mod:`compileall` -- now " +"respects the :envvar:`SOURCE_DATE_EPOCH` environment variable by " +"unconditionally creating ``.pyc`` files for hash-based validation. This " +"allows for guaranteeing `reproducible builds `_ of ``.pyc`` files when they are created eagerly. (Contributed" +" by Bernhard M. Wiedemann in :issue:`29708`.)" +msgstr "" +":func:`py_compile.compile` -- 及其扩展形式 :mod:`compileall` -- " +"现在会通过无条件地为基于哈希值的有效性验证创建 ``.pyc`` 文件来支持 :envvar:`SOURCE_DATE_EPOCH` 环境变量。 " +"这样可以确保当 ``.pyc`` 文件被主动创建时 `可重现的生成 `_。 (由 " +"Bernhard M. Wiedemann 在 :issue:`29708` 中贡献。)" + +#: ../../whatsnew/3.7.rst:1221 +msgid "pydoc" +msgstr "pydoc" + +#: ../../whatsnew/3.7.rst:1223 +msgid "" +"The pydoc server can now bind to an arbitrary hostname specified by the new " +"``-n`` command-line argument. (Contributed by Feanil Patel in " +":issue:`31128`.)" +msgstr "" +"pydoc 服务器现在可以绑定到由新的 ``-n`` 命令行参数所指定的任意主机名。 (由 Feanil Patel 在 :issue:`31128` " +"中贡献。)" + +#: ../../whatsnew/3.7.rst:1229 +msgid "queue" +msgstr "queue" + +#: ../../whatsnew/3.7.rst:1231 +msgid "" +"The new :class:`~queue.SimpleQueue` class is an unbounded :abbr:`FIFO` " +"queue. (Contributed by Antoine Pitrou in :issue:`14976`.)" +msgstr "" +"新的 :class:`~queue.SimpleQueue` 类是一个无界的 :abbr:`FIFO` 队列。 (由 Antoine Pitrou 在 " +":issue:`14976` 中贡献。)" + +#: ../../whatsnew/3.7.rst:1236 +msgid "re" +msgstr "re" + +#: ../../whatsnew/3.7.rst:1238 +msgid "" +"The flags :const:`re.ASCII`, :const:`re.LOCALE` and :const:`re.UNICODE` can " +"be set within the scope of a group. (Contributed by Serhiy Storchaka in " +":issue:`31690`.)" +msgstr "" +"旗标 :const:`re.ASCII`, :const:`re.LOCALE` 和 :const:`re.UNICODE` 可以在组的范围内设置。 " +"(由 Serhiy Storchaka 在 :issue:`31690` 中贡献。)" + +#: ../../whatsnew/3.7.rst:1242 +msgid "" +":func:`re.split` now supports splitting on a pattern like ``r'\\b'``, " +"``'^$'`` or ``(?=-)`` that matches an empty string. (Contributed by Serhiy " +"Storchaka in :issue:`25054`.)" +msgstr "" +":func:`re.split` 现在支持基于匹配一个空字符串的模式例如 ``r'\\b'``, ``'^$'`` 或 ``(?=-)`` 进行拆分。 " +"(由 Serhiy Storchaka 在 :issue:`25054` 中贡献。)" + +#: ../../whatsnew/3.7.rst:1246 +msgid "" +"Regular expressions compiled with the :const:`re.LOCALE` flag no longer " +"depend on the locale at compile time. Locale settings are applied only when" +" the compiled regular expression is used. (Contributed by Serhiy Storchaka " +"in :issue:`30215`.)" +msgstr "" +"使用 :const:`re.LOCALE` 旗标编译的正则表达式不再依赖于编译时的区域设置。 区域设置仅在已编译正则表达式被使用时才被应用。 (由 " +"Serhiy Storchaka 在 :issue:`30215` 中贡献。)" + +#: ../../whatsnew/3.7.rst:1251 +msgid "" +":exc:`FutureWarning` is now emitted if a regular expression contains " +"character set constructs that will change semantically in the future, such " +"as nested sets and set operations. (Contributed by Serhiy Storchaka in " +":issue:`30349`.)" +msgstr "" +"现在如果一个正则表达式包含语义将在未来发生改变的字符集构造,则会引发 :exc:`FutureWarning`,例如嵌套集与集合操作等。 (由 " +"Serhiy Storchaka 在 :issue:`30349` 中贡献。)" + +#: ../../whatsnew/3.7.rst:1256 +msgid "" +"Compiled regular expression and match objects can now be copied using " +":func:`copy.copy` and :func:`copy.deepcopy`. (Contributed by Serhiy " +"Storchaka in :issue:`10076`.)" +msgstr "" +"已编译正则表达式和匹配对象现在可以使用 :func:`copy.copy` 和 :func:`copy.deepcopy` 进行拷贝。 (由 " +"Serhiy Storchaka 在 :issue:`10076` 中贡献。)" + +#: ../../whatsnew/3.7.rst:1262 +msgid "signal" +msgstr "signal" + +#: ../../whatsnew/3.7.rst:1264 +msgid "" +"The new *warn_on_full_buffer* argument to the :func:`signal.set_wakeup_fd` " +"function makes it possible to specify whether Python prints a warning on " +"stderr when the wakeup buffer overflows. (Contributed by Nathaniel J. Smith " +"in :issue:`30050`.)" +msgstr "" +":func:`signal.set_wakeup_fd` 函数新增的 *warn_on_full_buffer* 参数可以指定当唤醒缓冲区溢出时 " +"Python 是否要在 stderr 上打印警告信息。 (由 Nathaniel J. Smith 在 :issue:`30050` 中贡献。)" + +#: ../../whatsnew/3.7.rst:1271 ../../whatsnew/3.7.rst:2044 +msgid "socket" +msgstr "socket" + +#: ../../whatsnew/3.7.rst:1273 +msgid "" +"The new :func:`socket.getblocking() ` method " +"returns ``True`` if the socket is in blocking mode and ``False`` otherwise. " +"(Contributed by Yury Selivanov in :issue:`32373`.)" +msgstr "" +"新增的 :func:`socket.getblocking() ` " +"方法会在套接字处于阻塞模式时返回 ``True``,否则返回 ``False``。 (由 Yury Selivanov 在 :issue:`32373`" +" 中贡献。)" + +#: ../../whatsnew/3.7.rst:1277 +msgid "" +"The new :func:`socket.close` function closes the passed socket file " +"descriptor. This function should be used instead of :func:`os.close` for " +"better compatibility across platforms. (Contributed by Christian Heimes in " +":issue:`32454`.)" +msgstr "" +"新的 :func:`socket.close` 函数可关闭所传入的套接字文件描述符。 应该用此函数来代替 :func:`os.close` " +"以获得更好的跨平台兼容性。 (由 Christian Heimes 在 :issue:`32454` 中贡献。)" + +#: ../../whatsnew/3.7.rst:1282 +msgid "" +"The :mod:`socket` module now exposes the :data:`socket.TCP_CONGESTION` " +"(Linux 2.6.13), :data:`socket.TCP_USER_TIMEOUT` (Linux 2.6.37), and " +":data:`socket.TCP_NOTSENT_LOWAT` (Linux 3.12) constants. (Contributed by " +"Omar Sandoval in :issue:`26273` and Nathaniel J. Smith in :issue:`29728`.)" +msgstr "" +":mod:`socket` 模块现在会公开 :data:`socket.TCP_CONGESTION` (Linux 2.6.13), " +":data:`socket.TCP_USER_TIMEOUT` (Linux 2.6.37) 以及 " +":data:`socket.TCP_NOTSENT_LOWAT` (Linux 3.12) 常量。 (由 Omar Sandoval 在 " +":issue:`26273` 以及 Nathaniel J. Smith 在 :issue:`29728` 中贡献。)" + +#: ../../whatsnew/3.7.rst:1288 +msgid "" +"Support for :data:`socket.AF_VSOCK` sockets has been added to allow " +"communication between virtual machines and their hosts. (Contributed by " +"Cathy Avery in :issue:`27584`.)" +msgstr "" +"已加入对 :data:`socket.AF_VSOCK` 套接字的支持以允许在虚拟机及其宿主机之间进行通讯。 (由 Cathy Avery 在 " +":issue:`27584` 中贡献。)" + +#: ../../whatsnew/3.7.rst:1292 +msgid "" +"Sockets now auto-detect family, type and protocol from file descriptor by " +"default. (Contributed by Christian Heimes in :issue:`28134`.)" +msgstr "" +"套接字现在默认会根据文件描述符自动检测所属族、类型和协议。 (由 Christian Heimes 在 :issue:`28134` 中贡献。)" + +#: ../../whatsnew/3.7.rst:1298 +msgid "socketserver" +msgstr "socketserver" + +#: ../../whatsnew/3.7.rst:1300 +msgid "" +":meth:`socketserver.ThreadingMixIn.server_close` now waits until all non-" +"daemon threads complete. :meth:`socketserver.ForkingMixIn.server_close` now " +"waits until all child processes complete." +msgstr "" +":meth:`socketserver.ThreadingMixIn.server_close` 现在会等待所有非守护线程完成。 " +":meth:`socketserver.ForkingMixIn.server_close` 现在会等待所有子进程完成。" + +#: ../../whatsnew/3.7.rst:1304 +msgid "" +"Add a new :attr:`socketserver.ForkingMixIn.block_on_close` class attribute " +"to :class:`socketserver.ForkingMixIn` and " +":class:`socketserver.ThreadingMixIn` classes. Set the class attribute to " +"``False`` to get the pre-3.7 behaviour." +msgstr "" +"为 :class:`socketserver.ForkingMixIn` 和 :class:`socketserver.ThreadingMixIn` " +"类增加了新的 :attr:`socketserver.ForkingMixIn.block_on_close` 类属性。 该类属性值设为 " +"``False`` 以保持 3.7 之前的行为。" + +#: ../../whatsnew/3.7.rst:1310 +msgid "sqlite3" +msgstr "sqlite3" + +#: ../../whatsnew/3.7.rst:1312 +msgid "" +":class:`sqlite3.Connection` now exposes the " +":meth:`~sqlite3.Connection.backup` method when the underlying SQLite library" +" is at version 3.6.11 or higher. (Contributed by Lele Gaifax in " +":issue:`27645`.)" +msgstr "" +"现在当下层的 SQLite 库版本为 3.6.11 及以上时 :class:`sqlite3.Connection` 会开放 " +":meth:`~sqlite3.Connection.backup` 方法。 (由 Lele Gaifax 在 :issue:`27645` 中贡献。)" + +#: ../../whatsnew/3.7.rst:1316 +msgid "" +"The *database* argument of :func:`sqlite3.connect` now accepts any " +":term:`path-like object`, instead of just a string. (Contributed by Anders " +"Lorentsen in :issue:`31843`.)" +msgstr "" +":func:`sqlite3.connect` 的 *database* 参数现在接受任何 :term:`path-like " +"object`,而不是只接受字符串。 (由 Anders Lorentsen 在 :issue:`31843` 中贡献。)" + +#: ../../whatsnew/3.7.rst:1322 ../../whatsnew/3.7.rst:2053 +msgid "ssl" +msgstr "ssl" + +#: ../../whatsnew/3.7.rst:1324 +msgid "" +"The :mod:`ssl` module now uses OpenSSL's builtin API instead of " +":func:`~ssl.match_hostname` to check a host name or an IP address. Values " +"are validated during TLS handshake. Any certificate validation error " +"including failing the host name check now raises " +":exc:`~ssl.SSLCertVerificationError` and aborts the handshake with a proper " +"TLS Alert message. The new exception contains additional information. Host " +"name validation can be customized with " +":attr:`SSLContext.hostname_checks_common_name " +"`. (Contributed by Christian " +"Heimes in :issue:`31399`.)" +msgstr "" +":mod:`ssl` 模块现在使用 OpenSSL 的内置 API 代替 :func:`~ssl.match_hostname` 来检查主机名或 IP " +"地址。 值的验证会在 TLS 握手期间进行。 任何证书验证错误包括主机名检查失败现在将引发 " +":exc:`~ssl.SSLCertVerificationError` 并使用正确的 TLS Alert 消息中止握手过程。 " +"这个新异常包含有额外的信息。 主机名验证可通过 :attr:`SSLContext.hostname_checks_common_name " +"` 进行自定义。 (由 Christian Heimes 在 " +":issue:`31399` 中贡献。)" + +#: ../../whatsnew/3.7.rst:1335 +msgid "" +"The improved host name check requires a *libssl* implementation compatible " +"with OpenSSL 1.0.2 or 1.1. Consequently, OpenSSL 0.9.8 and 1.0.1 are no " +"longer supported (see :ref:`37-platform-support-removals` for more details)." +" The ssl module is mostly compatible with LibreSSL 2.7.2 and newer." +msgstr "" +"改进的主机名检测需要有兼容 OpenSSL 1.0.2 或 1.1 的 *libssl* 实现。 因此,OpenSSL 0.9.8 和 1.0.1 " +"不再被支持(请参阅 :ref:`37-platform-support-removals` 了解详情)。 目前 ssl 模块主要兼容 LibreSSL " +"2.7.2 及更高版本。" + +#: ../../whatsnew/3.7.rst:1340 +msgid "" +"The ``ssl`` module no longer sends IP addresses in SNI TLS extension. " +"(Contributed by Christian Heimes in :issue:`32185`.)" +msgstr "" +"``ssl`` 模块不再以 SNI TLS 扩展发送 IP 地址。 (由 Christian Heimes 在 :issue:`32185` 中贡献。)" + +#: ../../whatsnew/3.7.rst:1343 +msgid "" +":func:`~ssl.match_hostname` no longer supports partial wildcards like " +"``www*.example.org``. (Contributed by Mandeep Singh in :issue:`23033` and " +"Christian Heimes in :issue:`31399`.)" +msgstr "" +":func:`~ssl.match_hostname` 不再支持部分通配符例如 ``www*.example.org``。 (由 Mandeep " +"Singh 在 :issue:`23033` 以及 Christian Heimes 在 :issue:`31399` 中贡献。)" + +#: ../../whatsnew/3.7.rst:1348 +msgid "" +"The default cipher suite selection of the ``ssl`` module now uses a " +"blacklist approach rather than a hard-coded whitelist. Python no longer re-" +"enables ciphers that have been blocked by OpenSSL security updates. Default" +" cipher suite selection can be configured at compile time. (Contributed by " +"Christian Heimes in :issue:`31429`.)" +msgstr "" +"``ssl`` 模块默认的加密套件选择现在是使用黑名单方式而非硬编码的白名单。 Python 不会再重新启用已经被 OpenSSL " +"安全更新所阻止的加密。 默认的加密套件选择可以在编译时进行配置。 (由 Christian Heimes 在 :issue:`31429` 中贡献。)" + +#: ../../whatsnew/3.7.rst:1354 +msgid "" +"Validation of server certificates containing internationalized domain names " +"(IDNs) is now supported. As part of this change, the " +":attr:`SSLSocket.server_hostname ` attribute " +"now stores the expected hostname in A-label form (``\"xn--pythn-" +"mua.org\"``), rather than the U-label form (``\"pythön.org\"``). " +"(Contributed by Nathaniel J. Smith and Christian Heimes in :issue:`28414`.)" +msgstr "" +"现在已支持包含国际化域名 (IDN) 的服务器证书验证。 作为此更改的一部分,:attr:`SSLSocket.server_hostname " +"` 属性现在会以预期的 A 标签形式 (``\"xn--pythn-" +"mua.org\"``) 而不是以 U 标签形式 (``\"pythön.org\"``) 存储。 (由 Nathaniel J. Smith 与 " +"Christian Heimes 在 :issue:`28414` 中贡献。)" + +#: ../../whatsnew/3.7.rst:1361 +msgid "" +"The ``ssl`` module has preliminary and experimental support for TLS 1.3 and " +"OpenSSL 1.1.1. At the time of Python 3.7.0 release, OpenSSL 1.1.1 is still " +"under development and TLS 1.3 hasn't been finalized yet. The TLS 1.3 " +"handshake and protocol behaves slightly differently than TLS 1.2 and " +"earlier, see :ref:`ssl-tlsv1_3`. (Contributed by Christian Heimes in " +":issue:`32947`, :issue:`20995`, :issue:`29136`, :issue:`30622` and " +":issue:`33618`)" +msgstr "" +"``ssl`` 模块对 TLS 1.3 和 OpenSSL 1.1.1 具有初步和实验性的支持。 在 Python 3.7.0 " +"发布的时刻,OpenSSL 1.1.1 仍在开发中,而 TLS 1.3 尚未最终确定。 TLS 1.3 握手和协议行为与 TLS 1.2 " +"及更早的版本略有差异,请参阅 :ref:`ssl-tlsv1_3`。 (由 Christian Heimes 在 :issue:`32947`, " +":issue:`20995`, :issue:`29136`, :issue:`30622` 以及 :issue:`33618` 中贡献。)" + +#: ../../whatsnew/3.7.rst:1369 +msgid "" +":class:`~ssl.SSLSocket` and :class:`~ssl.SSLObject` no longer have a public " +"constructor. Direct instantiation was never a documented and supported " +"feature. Instances must be created with :class:`~ssl.SSLContext` methods " +":meth:`~ssl.SSLContext.wrap_socket` and :meth:`~ssl.SSLContext.wrap_bio`. " +"(Contributed by Christian Heimes in :issue:`32951`)" +msgstr "" +":class:`~ssl.SSLSocket` 和 :class:`~ssl.SSLObject` 不再具有公共构造器。 " +"直接实例化从未成为有文档和受支持的特性。 实际必须通过 :class:`~ssl.SSLContext` 的方法 " +":meth:`~ssl.SSLContext.wrap_socket` 和 :meth:`~ssl.SSLContext.wrap_bio` 来创建。 " +"(由 Christian Heimes 在 :issue:`32951` 中贡献。)" + +#: ../../whatsnew/3.7.rst:1375 +msgid "" +"OpenSSL 1.1 APIs for setting the minimum and maximum TLS protocol version " +"are available as :attr:`SSLContext.minimum_version " +"` and :attr:`SSLContext.maximum_version " +"`. Supported protocols are indicated by " +"several new flags, such as :data:`~ssl.HAS_TLSv1_1`. (Contributed by " +"Christian Heimes in :issue:`32609`.)" +msgstr "" +"用于设置最小和最大 TLS 协议版本的 OpenSSL 1.1 API 现已可用,名称分别为 " +":attr:`SSLContext.minimum_version ` 和 " +":attr:`SSLContext.maximum_version `。 " +"受支持的协议由几个新增旗标指定,例如 :data:`~ssl.HAS_TLSv1_1`。 (由 Christian Heimes 在 " +":issue:`32609` 中贡献。)" + +#: ../../whatsnew/3.7.rst:1384 +msgid "string" +msgstr "string" + +#: ../../whatsnew/3.7.rst:1386 +msgid "" +":class:`string.Template` now lets you to optionally modify the regular " +"expression pattern for braced placeholders and non-braced placeholders " +"separately. (Contributed by Barry Warsaw in :issue:`1198569`.)" +msgstr "" +":class:`string.Template` 现在允许你有选择地分别修改带大括号的占位符和不带大括号的占位符所对应的正则表达式模式。 (由 " +"Barry Warsaw 在 :issue:`1198569` 中贡献。)" + +#: ../../whatsnew/3.7.rst:1392 +msgid "subprocess" +msgstr "subprocess" + +#: ../../whatsnew/3.7.rst:1394 +msgid "" +"The :func:`subprocess.run` function accepts the new *capture_output* keyword" +" argument. When true, stdout and stderr will be captured. This is " +"equivalent to passing :data:`subprocess.PIPE` as *stdout* and *stderr* " +"arguments. (Contributed by Bo Bayles in :issue:`32102`.)" +msgstr "" +":func:`subprocess.run` 函数接受新的 *capture_output* 关键字参数。 当其为真值时,将会捕获 stdout 和 " +"stderr。 这相当于将 :data:`subprocess.PIPE` 作为 *stdout* 和 *stderr* 参数传入。 (由 Bo " +"Bayles 在 :issue:`32102` 中贡献。)" + +#: ../../whatsnew/3.7.rst:1400 +msgid "" +"The ``subprocess.run`` function and the :class:`subprocess.Popen` " +"constructor now accept the *text* keyword argument as an alias to " +"*universal_newlines*. (Contributed by Andrew Clegg in :issue:`31756`.)" +msgstr "" +"``subprocess.run`` 函数和 :class:`subprocess.Popen` 构造器现在接受 *text* 关键字参数作为 " +"*universal_newlines* 的别名。 (由 Andrew Clegg 在 :issue:`31756` 中贡献。)" + +#: ../../whatsnew/3.7.rst:1405 +msgid "" +"On Windows the default for *close_fds* was changed from ``False`` to " +"``True`` when redirecting the standard handles. It's now possible to set " +"*close_fds* to true when redirecting the standard handles. See " +":class:`subprocess.Popen`. This means that *close_fds* now defaults to " +"``True`` on all supported platforms. (Contributed by Segev Finer in " +":issue:`19764`.)" +msgstr "" +"在 Windows 中当重定向标准句柄时 *close_fds* 的默认值由 ``False`` 改为 ``True``。 现在可以在重定向标准句柄时将" +" *close_fds* 设为真值。 参阅 :class:`subprocess.Popen`。 这意味着现在 *close_fds* " +"在所有受支持的平台上默认值均为 ``True``。 (由 Segev Finer 在 :issue:`19764` 中贡献。)" + +#: ../../whatsnew/3.7.rst:1412 +msgid "" +"The subprocess module is now more graceful when handling " +":exc:`KeyboardInterrupt` during :func:`subprocess.call`, " +":func:`subprocess.run`, or in a :class:`~subprocess.Popen` context manager." +" It now waits a short amount of time for the child to exit, before " +"continuing the handling of the ``KeyboardInterrupt`` exception. (Contributed" +" by Gregory P. Smith in :issue:`25942`.)" +msgstr "" +"在 :func:`subprocess.call`, :func:`subprocess.run` 期间或在 " +":class:`~subprocess.Popen` 上下文管理器中,subprocess 模块现在能更优雅地处理 " +":exc:`KeyboardInterrupt`。 它现在会等待一小段时间以便子进程退出,然后再继续处理 ``KeyboardInterrupt`` " +"异常。 (由 Gregory P. Smith 在 :issue:`25942` 中贡献。)" + +#: ../../whatsnew/3.7.rst:1422 ../../whatsnew/3.7.rst:2069 +msgid "sys" +msgstr "sys" + +#: ../../whatsnew/3.7.rst:1424 +msgid "" +"The new :func:`sys.breakpointhook` hook function is called by the built-in " +":func:`breakpoint`. (Contributed by Barry Warsaw in :issue:`31353`.)" +msgstr "" +"新增 :func:`sys.breakpointhook` 钩子函数,供内置的 :func:`breakpoint` 进行调用。 (由 Barry " +"Warsaw 在 :issue:`31353` 中贡献。)" + +#: ../../whatsnew/3.7.rst:1428 +msgid "" +"On Android, the new :func:`sys.getandroidapilevel` returns the build-time " +"Android API version. (Contributed by Victor Stinner in :issue:`28740`.)" +msgstr "" +"在 Android 中新增的 :func:`sys.getandroidapilevel` 会返回构建时的 Android API 版本。 (由 " +"Victor Stinner 在 :issue:`28740` 中贡献。)" + +#: ../../whatsnew/3.7.rst:1432 +msgid "" +"The new :func:`sys.get_coroutine_origin_tracking_depth` function returns the" +" current coroutine origin tracking depth, as set by the new " +":func:`sys.set_coroutine_origin_tracking_depth`. :mod:`asyncio` has been " +"converted to use this new API instead of the deprecated " +":func:`sys.set_coroutine_wrapper`. (Contributed by Nathaniel J. Smith in " +":issue:`32591`.)" +msgstr "" +"新的 :func:`sys.get_coroutine_origin_tracking_depth` 函数会返回当前协程的由新的 " +":func:`sys.set_coroutine_origin_tracking_depth` 所设定的原始跟踪深度。 :mod:`asyncio` " +"已转换为使用这个新 API 代替已弃用的 :func:`sys.set_coroutine_wrapper`。 (由 Nathaniel J. " +"Smith 在 :issue:`32591` 中贡献。)" + +#: ../../whatsnew/3.7.rst:1441 +msgid "time" +msgstr "time" + +#: ../../whatsnew/3.7.rst:1443 +msgid "" +":pep:`564` adds six new functions with nanosecond resolution to the " +":mod:`time` module:" +msgstr ":pep:`564` 向 :mod:`time` 模块增加六个具有纳秒级精度的新函数:" + +#: ../../whatsnew/3.7.rst:1453 +msgid "New clock identifiers have been added:" +msgstr "增加了新的时钟标识符:" + +#: ../../whatsnew/3.7.rst:1455 +msgid "" +":data:`time.CLOCK_BOOTTIME` (Linux): Identical to " +":data:`time.CLOCK_MONOTONIC`, except it also includes any time that the " +"system is suspended." +msgstr "" +":data:`time.CLOCK_BOOTTIME` (Linux): 与 :data:`time.CLOCK_MONOTONIC` " +"相似,不同点在于它还包括任何系统挂起的时间。" + +#: ../../whatsnew/3.7.rst:1458 +msgid "" +":data:`time.CLOCK_PROF` (FreeBSD, NetBSD and OpenBSD): High-resolution per-" +"process CPU timer." +msgstr ":data:`time.CLOCK_PROF` (FreeBSD, NetBSD 和 OpenBSD): 高精度的分进程 CPU 计时器。" + +#: ../../whatsnew/3.7.rst:1460 +msgid "" +":data:`time.CLOCK_UPTIME` (FreeBSD, OpenBSD): Time whose absolute value is " +"the time the system has been running and not suspended, providing accurate " +"uptime measurement." +msgstr "" +":data:`time.CLOCK_UPTIME` (FreeBSD, OpenBSD): " +"该时间的绝对值是系统运行且未挂起的时间,提供准确的正常运行时间度量。" + +#: ../../whatsnew/3.7.rst:1464 +msgid "" +"The new :func:`time.thread_time` and :func:`time.thread_time_ns` functions " +"can be used to get per-thread CPU time measurements. (Contributed by Antoine" +" Pitrou in :issue:`32025`.)" +msgstr "" +"新的 :func:`time.thread_time` 和 :func:`time.thread_time_ns` 函数可用于获取每线程的 CPU " +"时间度量。 (由 Antoine Pitrou 在 :issue:`32025` 中贡献。)" + +#: ../../whatsnew/3.7.rst:1468 +msgid "" +"The new :func:`time.pthread_getcpuclockid` function returns the clock ID of " +"the thread-specific CPU-time clock." +msgstr "新的 :func:`time.pthread_getcpuclockid` 函数会返回特定线程中 CPU 时钟的时钟 ID。" + +#: ../../whatsnew/3.7.rst:1473 +msgid "tkinter" +msgstr "tkinter" + +#: ../../whatsnew/3.7.rst:1475 +msgid "" +"The new :class:`tkinter.ttk.Spinbox` class is now available. (Contributed by" +" Alan Moore in :issue:`32585`.)" +msgstr "" +"新的 :class:`tkinter.ttk.Spinbox` 类现已可用。 (由 Alan Moore 在 :issue:`32585` 中贡献。)" + +#: ../../whatsnew/3.7.rst:1480 +msgid "tracemalloc" +msgstr "tracemalloc" + +#: ../../whatsnew/3.7.rst:1482 +msgid "" +":class:`tracemalloc.Traceback` behaves more like regular tracebacks, sorting" +" the frames from oldest to most recent. :meth:`Traceback.format() " +"` now accepts negative *limit*, truncating the" +" result to the ``abs(limit)`` oldest frames. To get the old behaviour, use " +"the new *most_recent_first* argument to ``Traceback.format()``. (Contributed" +" by Jesse Bakker in :issue:`32121`.)" +msgstr "" +":class:`tracemalloc.Traceback` 的行为更接近正规的回溯,会对所有帧按从最旧到最新来排序。 " +":meth:`Traceback.format() ` 现在接受负的 " +"*limit*,并会将结果截短至排在第 ``abs(limit)`` 位的旧帧。 如果要获得旧的行为,请在 ``Traceback.format()``" +" 中使用新的 *most_recent_first* 参数。 (由 Jesse Bakker 在 :issue:`32121` 中贡献。)" + +#: ../../whatsnew/3.7.rst:1492 +msgid "types" +msgstr "types" + +#: ../../whatsnew/3.7.rst:1494 +msgid "" +"The new :class:`~types.WrapperDescriptorType`, " +":class:`~types.MethodWrapperType`, :class:`~types.MethodDescriptorType`, and" +" :class:`~types.ClassMethodDescriptorType` classes are now available. " +"(Contributed by Manuel Krebber and Guido van Rossum in :issue:`29377`, and " +"Serhiy Storchaka in :issue:`32265`.)" +msgstr "" +"新的 :class:`~types.WrapperDescriptorType`, :class:`~types.MethodWrapperType`," +" :class:`~types.MethodDescriptorType` 和 " +":class:`~types.ClassMethodDescriptorType` 类现已可用。 (由 Manuel Krebber 和 Guido " +"van Rossum 在 :issue:`29377` 以及 Serhiy Storchaka 在 :issue:`32265` 中贡献。)" + +#: ../../whatsnew/3.7.rst:1500 +msgid "" +"The new :func:`types.resolve_bases` function resolves MRO entries " +"dynamically as specified by :pep:`560`. (Contributed by Ivan Levkivskyi in " +":issue:`32717`.)" +msgstr "" +"新的 :func:`types.resolve_bases` 函数会以 :pep:`560` 所规定的方式动态解析 MRO 条目。 (由 Ivan " +"Levkivskyi 在 :issue:`32717` 中贡献。)" + +#: ../../whatsnew/3.7.rst:1506 +msgid "unicodedata" +msgstr "unicodedata" + +#: ../../whatsnew/3.7.rst:1508 +msgid "" +"The internal :mod:`unicodedata` database has been upgraded to use `Unicode " +"11 `_. (Contributed by " +"Benjamin Peterson.)" +msgstr "" +"内部的 :mod:`unicodedata` 数据库已升级为使用 `Unicode 11 " +"`_。 (由 Benjamin Peterson " +"贡献。)" + +#: ../../whatsnew/3.7.rst:1514 +msgid "unittest" +msgstr "unittest" + +#: ../../whatsnew/3.7.rst:1516 +msgid "" +"The new ``-k`` command-line option allows filtering tests by a name " +"substring or a Unix shell-like pattern. For example, ``python -m unittest -k" +" foo`` runs ``foo_tests.SomeTest.test_something``, " +"``bar_tests.SomeTest.test_foo``, but not " +"``bar_tests.FooTest.test_something``. (Contributed by Jonas Haag in " +":issue:`32071`.)" +msgstr "" +"新的 ``-k`` 命令行选项允许通过名称子字符串或类似于 Unix shell 的模式来筛选测试项。 例如,``python -m unittest " +"-k foo`` 将运行 ``foo_tests.SomeTest.test_something``, " +"``bar_tests.SomeTest.test_foo``,但不会运行 ``bar_tests.FooTest.test_something``。 " +"(由 Jonas Haag 在 :issue:`32071` 中贡献。)" + +#: ../../whatsnew/3.7.rst:1525 +msgid "unittest.mock" +msgstr "unittest.mock" + +#: ../../whatsnew/3.7.rst:1527 +msgid "" +"The :const:`~unittest.mock.sentinel` attributes now preserve their identity " +"when they are :mod:`copied ` or :mod:`pickled `. (Contributed " +"by Serhiy Storchaka in :issue:`20804`.)" +msgstr "" +"现在 :const:`~unittest.mock.sentinel` 属性会在它们被 :mod:`复制 ` 或 :mod:`封存 " +"` 时保存其标识。 (由 Serhiy Storchaka 在 :issue:`20804` 中贡献。)" + +#: ../../whatsnew/3.7.rst:1531 +msgid "" +"The new :func:`~unittest.mock.seal` function allows sealing " +":class:`~unittest.mock.Mock` instances, which will disallow further creation" +" of attribute mocks. The seal is applied recursively to all attributes that" +" are themselves mocks. (Contributed by Mario Corchero in :issue:`30541`.)" +msgstr "" +"新的 :func:`~unittest.mock.seal` 函数允许 :class:`~unittest.mock.Mock` " +"对实例进行密封,这将禁止进一步创建属性模拟。 密封会以递归方式应用于自身模拟的所有属性。 (由 Mario Corchero 在 " +":issue:`30541` 中贡献。)" + +#: ../../whatsnew/3.7.rst:1539 +msgid "urllib.parse" +msgstr "urllib.parse" + +#: ../../whatsnew/3.7.rst:1541 +msgid "" +":func:`urllib.parse.quote` has been updated from :rfc:`2396` to :rfc:`3986`," +" adding ``~`` to the set of characters that are never quoted by default. " +"(Contributed by Christian Theune and Ratnadeep Debnath in :issue:`16285`.)" +msgstr "" +":func:`urllib.parse.quote` 已经从 :rfc:`2396` 更新为 :rfc:`3986`,将 ``~`` " +"添加到默认情况下从未引用的字符集。 (由 Christian Theune 和 Ratnadeep Debnath 在 :issue:`16285` " +"中贡献。)" + +#: ../../whatsnew/3.7.rst:1547 +msgid "uu" +msgstr "uu" + +#: ../../whatsnew/3.7.rst:1549 +msgid "" +"The :func:`uu.encode` function now accepts an optional *backtick* keyword " +"argument. When it's true, zeros are represented by ``'`'`` instead of " +"spaces. (Contributed by Xiang Zhang in :issue:`30103`.)" +msgstr "" +":func:`uu.encode` 函数现在接受可选的 *backtick* 关键字参数。 当其为真时,零会以 ``'`'`` 而非空格来表示。 (由 " +"Xiang Zhang 在 :issue:`30103` 中贡献。)" + +#: ../../whatsnew/3.7.rst:1555 +msgid "uuid" +msgstr "uuid" + +#: ../../whatsnew/3.7.rst:1557 +msgid "" +"The new :attr:`UUID.is_safe ` attribute relays " +"information from the platform about whether generated UUIDs are generated " +"with a multiprocessing-safe method. (Contributed by Barry Warsaw in " +":issue:`22807`.)" +msgstr "" +"新的 :attr:`UUID.is_safe ` 属性会从平台中继有关是否使用多进程安全模式来生成所需 UUID" +" 的信息。 (由 Barry Warsaw 在 :issue:`22807` 中贡献。)" + +#: ../../whatsnew/3.7.rst:1562 +msgid "" +":func:`uuid.getnode` now prefers universally administered MAC addresses over" +" locally administered MAC addresses. This makes a better guarantee for " +"global uniqueness of UUIDs returned from :func:`uuid.uuid1`. If only " +"locally administered MAC addresses are available, the first such one found " +"is returned. (Contributed by Barry Warsaw in :issue:`32107`.)" +msgstr "" +":func:`uuid.getnode` 现在更倾向于统一管理的 MAC 地址而不是本地管理的 MAC 地址。 这样可以更好地保证从 " +":func:`uuid.uuid1` 返回的 UUID 的全局唯一性。 如果只有本地管理的 MAC 地址可用,则返回首个找到的此类地址。 (由 " +"Barry Warsaw 在 :issue:`32107` 中贡献。)" + +#: ../../whatsnew/3.7.rst:1571 +msgid "warnings" +msgstr "warnings" + +#: ../../whatsnew/3.7.rst:1573 +msgid "" +"The initialization of the default warnings filters has changed as follows:" +msgstr "默认警告过滤器的初始化已进行以下更改:" + +#: ../../whatsnew/3.7.rst:1575 +msgid "" +"warnings enabled via command line options (including those for :option:`-b` " +"and the new CPython-specific :option:`-X` ``dev`` option) are always passed " +"to the warnings machinery via the :data:`sys.warnoptions` attribute." +msgstr "" +"通过命令行选项(包括 :option:`-b` 以及新的 CPython 专属的 :option:`-X` ``dev`` 选项)启用的警告总是会通过 " +":data:`sys.warnoptions` 属性被传递给警告机制。" + +#: ../../whatsnew/3.7.rst:1579 +msgid "" +"warnings filters enabled via the command line or the environment now have " +"the following order of precedence:" +msgstr "通过命令行或环境变量启用的警告过滤器现在具有以下优先顺序:" + +#: ../../whatsnew/3.7.rst:1582 +msgid "the ``BytesWarning`` filter for :option:`-b` (or ``-bb``)" +msgstr "用于 :option:`-b` (或 ``-bb``) 的 ``BytesWarning`` 过滤器" + +#: ../../whatsnew/3.7.rst:1583 +msgid "any filters specified with the :option:`-W` option" +msgstr "通过 :option:`-W` 选项指定的任何过滤器" + +#: ../../whatsnew/3.7.rst:1584 +msgid "" +"any filters specified with the :envvar:`PYTHONWARNINGS` environment variable" +msgstr "通过 :envvar:`PYTHONWARNINGS` 环境变量指定的任何过滤器" + +#: ../../whatsnew/3.7.rst:1586 +msgid "" +"any other CPython specific filters (e.g. the ``default`` filter added for " +"the new ``-X dev`` mode)" +msgstr "任何其他 CPython 专属过滤器(例如 ``-X dev`` 模式中新增的 ``default`` 过滤器)" + +#: ../../whatsnew/3.7.rst:1588 +msgid "any implicit filters defined directly by the warnings machinery" +msgstr "由警告机制所定义的任何隐式过滤器" + +#: ../../whatsnew/3.7.rst:1590 +msgid "" +"in CPython debug builds, all warnings are now displayed by default (the " +"implicit filter list is empty)" +msgstr "在 CPython 调试版本中,现在默认情况下会显示所有警告(隐式过滤器列表为空)" + +#: ../../whatsnew/3.7.rst:1593 +msgid "" +"(Contributed by Nick Coghlan and Victor Stinner in :issue:`20361`, " +":issue:`32043`, and :issue:`32230`.)" +msgstr "" +"(由 Nick Coghlan 和 Victor Stinner 在 :issue:`20361`, :issue:`32043` 以及 " +":issue:`32230` 中贡献。)" + +#: ../../whatsnew/3.7.rst:1596 +msgid "" +"Deprecation warnings are once again shown by default in single-file scripts " +"and at the interactive prompt. See :ref:`whatsnew37-pep565` for details. " +"(Contributed by Nick Coghlan in :issue:`31975`.)" +msgstr "" +"在单文件脚本和交互式提示符中,默认情况下会再次显示已弃用警告。 详情参见 :ref:`whatsnew37-pep565`。 (由 Nick " +"Coghlan 在 :issue:`31975` 中贡献。)" + +#: ../../whatsnew/3.7.rst:1602 +msgid "xml.etree" +msgstr "xml.etree" + +#: ../../whatsnew/3.7.rst:1604 +msgid "" +":ref:`ElementPath ` predicates in the :meth:`find` " +"methods can now compare text of the current node with ``[. = \"text\"]``, " +"not only text in children. Predicates also allow adding spaces for better " +"readability. (Contributed by Stefan Behnel in :issue:`31648`.)" +msgstr "" +":meth:`find` 方法中的 :ref:`ElementPath ` 描述词现在可以将当前节点文本与 " +"``[. = \"text\"]`` 进行比较,而不仅是子节点中的文本。 描述词还允许添加空格以提高可读性。 (由 Stefan Behnel 在 " +":issue:`31648` 中贡献。)" + +#: ../../whatsnew/3.7.rst:1611 +msgid "xmlrpc.server" +msgstr "xmlrpc.server" + +#: ../../whatsnew/3.7.rst:1613 +msgid "" +":meth:`SimpleXMLRPCDispatcher.register_function " +"` can now be used as a decorator. " +"(Contributed by Xiang Zhang in :issue:`7769`.)" +msgstr "" +":meth:`SimpleXMLRPCDispatcher.register_function " +"` 现在可以被用作装饰器。 (由 Xiang Zhang 在 " +":issue:`7769` 中贡献。)" + +#: ../../whatsnew/3.7.rst:1619 +msgid "zipapp" +msgstr "zipapp" + +#: ../../whatsnew/3.7.rst:1621 +msgid "" +"Function :func:`~zipapp.create_archive` now accepts an optional *filter* " +"argument to allow the user to select which files should be included in the " +"archive. (Contributed by Irmen de Jong in :issue:`31072`.)" +msgstr "" +"函数 :func:`~zipapp.create_archive` 现在接受可选的 *filter* 参数,以允许用户选择哪些文件应被加入归档包。 (由" +" Irmen de Jong 在 :issue:`31072` 中贡献。)" + +#: ../../whatsnew/3.7.rst:1625 +msgid "" +"Function :func:`~zipapp.create_archive` now accepts an optional *compressed*" +" argument to generate a compressed archive. A command line option " +"``--compress`` has also been added to support compression. (Contributed by " +"Zhiming Wang in :issue:`31638`.)" +msgstr "" +"函数 :func:`~zipapp.create_archive` 现在接受可选的 *compressed* 参数,以生成压缩归档包。 " +"另外也加入了命令行选项 ``--compress`` 以支持压缩。 (由 Zhiming Wang 在 :issue:`31638` 中贡献。)" + +#: ../../whatsnew/3.7.rst:1632 +msgid "zipfile" +msgstr "zipfile" + +#: ../../whatsnew/3.7.rst:1634 +msgid "" +":class:`~zipfile.ZipFile` now accepts the new *compresslevel* parameter to " +"control the compression level. (Contributed by Bo Bayles in :issue:`21417`.)" +msgstr "" +":class:`~zipfile.ZipFile` 现在接受新的 *compresslevel* 形参,以控制压缩级别。 (由 Bo Bayles 在 " +":issue:`21417` 中贡献。)" + +#: ../../whatsnew/3.7.rst:1638 +msgid "" +"Subdirectories in archives created by ``ZipFile`` are now stored in " +"alphabetical order. (Contributed by Bernhard M. Wiedemann in " +":issue:`30693`.)" +msgstr "" +"``ZipFile`` 所创建的归档包中的子目录现在会按字母表顺序保存。 (由 Bernhard M. Wiedemann 在 " +":issue:`30693` 中贡献。)" + +#: ../../whatsnew/3.7.rst:1644 +msgid "C API Changes" +msgstr "C API 的改变" + +#: ../../whatsnew/3.7.rst:1646 +msgid "" +"A new API for thread-local storage has been implemented. See " +":ref:`whatsnew37-pep539` for an overview and :ref:`thread-specific-storage-" +"api` for a complete reference. (Contributed by Masayuki Yamamoto in " +":issue:`25658`.)" +msgstr "" +"已实现了用于线程本地存储的新 API。 相关概述请参阅 :ref:`whatsnew37-pep539`,完整参考文档请查看 :ref:`thread-" +"specific-storage-api`。 (由 Masayuki Yamamoto 在 :issue:`25658` 中贡献。)" + +#: ../../whatsnew/3.7.rst:1651 +msgid "" +"The new :ref:`context variables ` functionality exposes a" +" number of :ref:`new C APIs `." +msgstr "" +"新的 :ref:`上下文变量 ` 功能开放了许多 :ref:`新的 C API " +"`。" + +#: ../../whatsnew/3.7.rst:1654 +msgid "" +"The new :c:func:`PyImport_GetModule` function returns the previously " +"imported module with the given name. (Contributed by Eric Snow in " +":issue:`28411`.)" +msgstr "" +"新的 :c:func:`PyImport_GetModule` 函数会返回之前所导入的具有给定名称的模块。 (由 Eric Snow 在 " +":issue:`28411` 中贡献。)" + +#: ../../whatsnew/3.7.rst:1658 +msgid "" +"The new :c:macro:`Py_RETURN_RICHCOMPARE` macro eases writing rich comparison" +" functions. (Contributed by Petr Victorin in :issue:`23699`.)" +msgstr "" +"新的 :c:macro:`Py_RETURN_RICHCOMPARE` 宏可以简化丰富比较函数的编写。 (由 Petr Victorin 在 " +":issue:`23699` 中贡献。)" + +#: ../../whatsnew/3.7.rst:1662 +msgid "" +"The new :c:macro:`Py_UNREACHABLE` macro can be used to mark unreachable code" +" paths. (Contributed by Barry Warsaw in :issue:`31338`.)" +msgstr "" +"新的 :c:macro:`Py_UNREACHABLE` 宏可用于标记不可到达的代码路径。 (由 Barry Warsaw 在 " +":issue:`31338` 中贡献。)" + +#: ../../whatsnew/3.7.rst:1666 +msgid "" +"The :mod:`tracemalloc` now exposes a C API through the new " +":c:func:`PyTraceMalloc_Track` and :c:func:`PyTraceMalloc_Untrack` functions." +" (Contributed by Victor Stinner in :issue:`30054`.)" +msgstr "" +":mod:`tracemalloc` 现在通过新的 :c:func:`PyTraceMalloc_Track` 和 " +":c:func:`PyTraceMalloc_Untrack` 函数公开了一个 C API。 (由 Victor Stinner 在 " +":issue:`30054` 中贡献。)" + +#: ../../whatsnew/3.7.rst:1671 +msgid "" +"The new :c:func:`import__find__load__start` and " +":c:func:`import__find__load__done` static markers can be used to trace " +"module imports. (Contributed by Christian Heimes in :issue:`31574`.)" +msgstr "" +"新的 :c:func:`import__find__load__start` 和 :c:func:`import__find__load__done` " +"静态标记可用于跟踪模块导入。 (由 Christian Heimes 在 :issue:`31574` 中贡献。)" + +#: ../../whatsnew/3.7.rst:1676 +msgid "" +"The fields :c:member:`name` and :c:member:`doc` of structures " +":c:type:`PyMemberDef`, :c:type:`PyGetSetDef`, " +":c:type:`PyStructSequence_Field`, :c:type:`PyStructSequence_Desc`, and " +":c:type:`wrapperbase` are now of type ``const char *`` rather of ``char *``." +" (Contributed by Serhiy Storchaka in :issue:`28761`.)" +msgstr "" +"结构体 :c:type:`PyMemberDef`, :c:type:`PyGetSetDef`, " +":c:type:`PyStructSequence_Field`, :c:type:`PyStructSequence_Desc` 和 " +":c:type:`wrapperbase` 的字段 :c:member:`name` 和 :c:member:`doc` 现在的类型为 ``const " +"char *`` 而不是 ``char *``。 (由 Serhiy Storchaka 在 :issue:`28761` 中贡献。)" + +#: ../../whatsnew/3.7.rst:1682 +msgid "" +"The result of :c:func:`PyUnicode_AsUTF8AndSize` and " +":c:func:`PyUnicode_AsUTF8` is now of type ``const char *`` rather of ``char " +"*``. (Contributed by Serhiy Storchaka in :issue:`28769`.)" +msgstr "" +":c:func:`PyUnicode_AsUTF8AndSize` 和 :c:func:`PyUnicode_AsUTF8` 的结果类型现在是 " +"``const char *`` 而非 ``char *``。 (由 Serhiy Storchaka 在 :issue:`28769` 中贡献。)" + +#: ../../whatsnew/3.7.rst:1686 +msgid "" +"The result of :c:func:`PyMapping_Keys`, :c:func:`PyMapping_Values` and " +":c:func:`PyMapping_Items` is now always a list, rather than a list or a " +"tuple. (Contributed by Oren Milman in :issue:`28280`.)" +msgstr "" +":c:func:`PyMapping_Keys`, :c:func:`PyMapping_Values` 和 " +":c:func:`PyMapping_Items` 的结果现在肯定是列表,而非可能是列表也可能是元组。 (由 Oren Milman 在 " +":issue:`28280` 中贡献。)" + +#: ../../whatsnew/3.7.rst:1690 +msgid "" +"Added functions :c:func:`PySlice_Unpack` and " +":c:func:`PySlice_AdjustIndices`. (Contributed by Serhiy Storchaka in " +":issue:`27867`.)" +msgstr "" +"添加了函数 :c:func:`PySlice_Unpack` 和 :c:func:`PySlice_AdjustIndices`。 (由 Serhiy " +"Storchaka 在 :issue:`27867` 中贡献。)" + +#: ../../whatsnew/3.7.rst:1693 +msgid "" +":c:func:`PyOS_AfterFork` is deprecated in favour of the new functions " +":c:func:`PyOS_BeforeFork`, :c:func:`PyOS_AfterFork_Parent` and " +":c:func:`PyOS_AfterFork_Child`. (Contributed by Antoine Pitrou in " +":issue:`16500`.)" +msgstr "" +":c:func:`PyOS_AfterFork` 已弃用,建议改用新的 functions :c:func:`PyOS_BeforeFork`, " +":c:func:`PyOS_AfterFork_Parent` 和 :c:func:`PyOS_AfterFork_Child`。 (由 Antoine" +" Pitrou 在 :issue:`16500` 中贡献。)" + +#: ../../whatsnew/3.7.rst:1698 +msgid "" +"The ``PyExc_RecursionErrorInst`` singleton that was part of the public API " +"has been removed as its members being never cleared may cause a segfault " +"during finalization of the interpreter. Contributed by Xavier de Gaye in " +":issue:`22898` and :issue:`30697`." +msgstr "" +"曾经作为公共 API 一部分的 ``PyExc_RecursionErrorInst`` " +"单例已被移除,因为它的成员永远不会被清理,可能在解释器的最终化过程中导致段错误。 由 Xavier de Gaye 在 :issue:`22898` 和" +" :issue:`30697` 中贡献。" + +#: ../../whatsnew/3.7.rst:1703 +msgid "" +"Added C API support for timezones with timezone constructors " +":c:func:`PyTimeZone_FromOffset` and :c:func:`PyTimeZone_FromOffsetAndName`, " +"and access to the UTC singleton with :c:data:`PyDateTime_TimeZone_UTC`. " +"Contributed by Paul Ganssle in :issue:`10381`." +msgstr "" +"添加 C API 对使用 timezone 的构造器 :c:func:`PyTimeZone_FromOffset` 和 " +":c:func:`PyTimeZone_FromOffsetAndName` 的时区的支持,以及通常 " +":c:data:`PyDateTime_TimeZone_UTC` 使用 UTC 单例。 由 Paul Ganssle 在 :issue:`10381`" +" 中贡献。" + +#: ../../whatsnew/3.7.rst:1708 +msgid "" +"The type of results of :c:func:`PyThread_start_new_thread` and " +":c:func:`PyThread_get_thread_ident`, and the *id* parameter of " +":c:func:`PyThreadState_SetAsyncExc` changed from :c:type:`long` to " +":c:type:`unsigned long`. (Contributed by Serhiy Storchaka in :issue:`6532`.)" +msgstr "" +":c:func:`PyThread_start_new_thread` 和 :c:func:`PyThread_get_thread_ident` " +"的结果类型以及 :c:func:`PyThreadState_SetAsyncExc` 的 *id* 参数类型由 :c:type:`long` 改为 " +":c:type:`unsigned long`。 (由 Serhiy Storchaka 在 :issue:`6532` 中贡献。)" + +#: ../../whatsnew/3.7.rst:1714 +msgid "" +":c:func:`PyUnicode_AsWideCharString` now raises a :exc:`ValueError` if the " +"second argument is ``NULL`` and the :c:type:`wchar_t*` string contains null " +"characters. (Contributed by Serhiy Storchaka in :issue:`30708`.)" +msgstr "" +"现在 :c:func:`PyUnicode_AsWideCharString` 如果第二个参数为 ``NULL`` 并且 " +":c:type:`wchar_t*` 字符串包含空字符则会引发 :exc:`ValueError`。 (由 Serhiy Storchaka 在 " +":issue:`30708` 中贡献。)" + +#: ../../whatsnew/3.7.rst:1718 +msgid "" +"Changes to the startup sequence and the management of dynamic memory " +"allocators mean that the long documented requirement to call " +":c:func:`Py_Initialize` before calling most C API functions is now relied on" +" more heavily, and failing to abide by it may lead to segfaults in embedding" +" applications. See the :ref:`porting-to-python-37` section in this document " +"and the :ref:`pre-init-safe` section in the C API documentation for more " +"details." +msgstr "" +"对启动顺序以及动态内存分配器管理的更改意味着早已记录在案的,对在调用大多数 C API 函数之前调用 :c:func:`Py_Initialize` " +"的要求的依赖现在变得更加强烈,未遵循此要求可能导致嵌入式应用程序中的段错误。 请参阅此文档的 :ref:`porting-to-python-37` " +"一节以及 C API 文档的 :ref:`pre-init-safe` 一节了解更多细节。" + +#: ../../whatsnew/3.7.rst:1726 +msgid "" +"The new :c:func:`PyInterpreterState_GetID` returns the unique ID for a given" +" interpreter. (Contributed by Eric Snow in :issue:`29102`.)" +msgstr "" +"新的 :c:func:`PyInterpreterState_GetID` 会返回给定解释器的唯一 ID。 (由 Eric Snow 在 " +":issue:`29102` 中贡献。)" + +#: ../../whatsnew/3.7.rst:1730 +msgid "" +":c:func:`Py_DecodeLocale`, :c:func:`Py_EncodeLocale` now use the UTF-8 " +"encoding when the :ref:`UTF-8 mode ` is enabled. " +"(Contributed by Victor Stinner in :issue:`29240`.)" +msgstr "" +"现在当启用 :ref:`UTF-8 模式 ` 时 :c:func:`Py_DecodeLocale`, " +":c:func:`Py_EncodeLocale` 会使用 UTF-8 编码。 (由 Victor Stinner 在 :issue:`29240` " +"中贡献。)" + +#: ../../whatsnew/3.7.rst:1734 +msgid "" +":c:func:`PyUnicode_DecodeLocaleAndSize` and :c:func:`PyUnicode_EncodeLocale`" +" now use the current locale encoding for ``surrogateescape`` error handler. " +"(Contributed by Victor Stinner in :issue:`29240`.)" +msgstr "" +":c:func:`PyUnicode_DecodeLocaleAndSize` 和 :c:func:`PyUnicode_EncodeLocale` " +"现在会为 ``surrogateescape`` 错误句柄使用当前区域编码。 (由 Victor Stinner 在 :issue:`29240` " +"中贡献。)" + +#: ../../whatsnew/3.7.rst:1738 +msgid "" +"The *start* and *end* parameters of :c:func:`PyUnicode_FindChar` are now " +"adjusted to behave like string slices. (Contributed by Xiang Zhang in " +":issue:`28822`.)" +msgstr "" +":c:func:`PyUnicode_FindChar` 的 *start* 和 *end* 形参的行为现在调整为与字符串切片类似。 (由 Xiang " +"Zhang 在 :issue:`28822` 中贡献。)" + +#: ../../whatsnew/3.7.rst:1744 +msgid "Build Changes" +msgstr "构建的改变" + +#: ../../whatsnew/3.7.rst:1746 +msgid "" +"Support for building ``--without-threads`` has been removed. The " +":mod:`threading` module is now always available. (Contributed by Antoine " +"Pitrou in :issue:`31370`.)." +msgstr "" +"对于 ``--without-threads`` 构建的支持已被移除。 :mod:`threading` 模块现在将总是可用。 (由 Antoine " +"Pitrou 在 :issue:`31370` 中贡献。)" + +#: ../../whatsnew/3.7.rst:1750 +msgid "" +"A full copy of libffi is no longer bundled for use when building the " +":mod:`_ctypes ` module on non-OSX UNIX platforms. An installed copy" +" of libffi is now required when building ``_ctypes`` on such platforms. " +"(Contributed by Zachary Ware in :issue:`27979`.)" +msgstr "" +"在非 OSX UNIX 平台上已不再包含用于构建 :mod:`_ctypes ` 模块的完整 libffi 副本。 " +"现在当在此类平台上构建 ``_ctypes`` 时需要事先装有 libffi 的副本。 (由 Zachary Ware 在 :issue:`27979`" +" 中贡献。)" + +#: ../../whatsnew/3.7.rst:1755 +msgid "" +"The Windows build process no longer depends on Subversion to pull in " +"external sources, a Python script is used to download zipfiles from GitHub " +"instead. If Python 3.6 is not found on the system (via ``py -3.6``), NuGet " +"is used to download a copy of 32-bit Python for this purpose. (Contributed " +"by Zachary Ware in :issue:`30450`.)" +msgstr "" +"Windows 构建过程不再依赖 Subversion 来拉取外部源码,而是改用一段 Python 脚本从 GitHub 下载 zip 文件。 " +"如果未在系统中找到 Python 3.6 (通过 ``py -3.6``),则会使用 NuGet 下载一份 32 位的 Python 副本用于此目的。 " +"(由 Zachary Ware 在 :issue:`30450` 中贡献。)" + +#: ../../whatsnew/3.7.rst:1761 +msgid "" +"The :mod:`ssl` module requires OpenSSL 1.0.2 or 1.1 compatible libssl. " +"OpenSSL 1.0.1 has reached end of lifetime on 2016-12-31 and is no longer " +"supported. LibreSSL is temporarily not supported as well. LibreSSL releases " +"up to version 2.6.4 are missing required OpenSSL 1.0.2 APIs." +msgstr "" +":mod:`ssl` 模块需要兼容 OpenSSL 1.0.2 或 1.1 的 libssl。 OpenSSL 1.0.1 的生命期已于 " +"2016-12-31 终止且不再受支持。 LibreSSL 暂时也不受支持。 LibreSSL 发布版直到 2.6.4 版还缺少所需的 OpenSSL " +"1.0.2 API。" + +#: ../../whatsnew/3.7.rst:1770 +msgid "Optimizations" +msgstr "性能优化" + +#: ../../whatsnew/3.7.rst:1772 +msgid "" +"The overhead of calling many methods of various standard library classes " +"implemented in C has been significantly reduced by porting more code to use " +"the ``METH_FASTCALL`` convention. (Contributed by Victor Stinner in " +":issue:`29300`, :issue:`29507`, :issue:`29452`, and :issue:`29286`.)" +msgstr "" +"通过移植更多代码来使用 ``METH_FASTCALL`` 的约定,可以显著地减少调用 C 代码中实现的各类标准库的很多方法的开销。 (由 Victor" +" Stinner 在 :issue:`29300`、:issue:`29507`、:issue:`29452` 以及 :issue:`29286` " +"中贡献。)" + +#: ../../whatsnew/3.7.rst:1778 +msgid "" +"Various optimizations have reduced Python startup time by 10% on Linux and " +"up to 30% on macOS. (Contributed by Victor Stinner, INADA Naoki in " +":issue:`29585`, and Ivan Levkivskyi in :issue:`31333`.)" +msgstr "" +"通过各种优化方式,使 Python 在 Linux 上的启动时间缩短了 10%,在 macOS 上缩短了 30%。 (由 Victor Stinner," +" INADA Naoki 在 :issue:`29585` 中,以及 Ivan Levkivskyi 在 :issue:`31333` 中贡献。)" + +#: ../../whatsnew/3.7.rst:1783 +msgid "" +"Method calls are now up to 20% faster due to the bytecode changes which " +"avoid creating bound method instances. (Contributed by Yury Selivanov and " +"INADA Naoki in :issue:`26110`.)" +msgstr "" +"由于避免创建绑定方法案例的字节码更改,方法调用速度现在加快了 20%。 (由 Yury Selivanov 和 INADA Naoki 在 " +":issue:`26110` 中贡献。)" + +#: ../../whatsnew/3.7.rst:1789 +msgid "" +"The :mod:`asyncio` module received a number of notable optimizations for " +"commonly used functions:" +msgstr "对 :mod:`asyncio` 模块里面的一些常用函数做了显著的性能优化。" + +#: ../../whatsnew/3.7.rst:1792 +msgid "" +"The :func:`asyncio.get_event_loop` function has been reimplemented in C to " +"make it up to 15 times faster. (Contributed by Yury Selivanov in " +":issue:`32296`.)" +msgstr "" +":func:`asyncio.get_event_loop` 函数已经改用 C 重新实现,使其执行速度加快了 15 倍。 (由 Yury " +"Selivanov 在 :issue:`32296` 中贡献。)" + +#: ../../whatsnew/3.7.rst:1796 +msgid "" +":class:`asyncio.Future` callback management has been optimized. (Contributed" +" by Yury Selivanov in :issue:`32348`.)" +msgstr "" +":class:`asyncio.Future` 回调管理已经过优化。 (由 Yury Selivanov 在 :issue:`32348` 中贡献。)" + +#: ../../whatsnew/3.7.rst:1799 +msgid "" +":func:`asyncio.gather` is now up to 15% faster. (Contributed by Yury " +"Selivanov in :issue:`32355`.)" +msgstr "" +":func:`asyncio.gather` 的执行速度现在加快了 15%。 (由 Yury Selivanov 在 :issue:`32355` " +"中贡献。)" + +#: ../../whatsnew/3.7.rst:1802 +msgid "" +":func:`asyncio.sleep` is now up to 2 times faster when the *delay* argument " +"is zero or negative. (Contributed by Andrew Svetlov in :issue:`32351`.)" +msgstr "" +"当 *delay* 参数为零或负值时 :func:`asyncio.sleep` 的执行速度现在加快了 2 倍。 (由 Andrew Svetlov 在" +" :issue:`32351` 中贡献。)" + +#: ../../whatsnew/3.7.rst:1806 +msgid "" +"The performance overhead of asyncio debug mode has been reduced. " +"(Contributed by Antoine Pitrou in :issue:`31970`.)" +msgstr "asyncio 调试模式的执行开销已获减轻。 (由 Antoine Pitrou 在 :issue:`31970` 中贡献。)" + +#: ../../whatsnew/3.7.rst:1809 +msgid "" +"As a result of :ref:`PEP 560 work `, the import time of " +":mod:`typing` has been reduced by a factor of 7, and many typing operations " +"are now faster. (Contributed by Ivan Levkivskyi in :issue:`32226`.)" +msgstr "" +"作为 :ref:`PEP 560 工作 ` 的结果,:mod:`typing` 的导入时间已减少了 7 " +"倍,许多与类型相关的操作现在会执行得更快。 (由 Ivan Levkivskyi 在 :issue:`32226` 中贡献。)" + +#: ../../whatsnew/3.7.rst:1814 +msgid "" +":func:`sorted` and :meth:`list.sort` have been optimized for common cases to" +" be up to 40-75% faster. (Contributed by Elliot Gorokhovsky in " +":issue:`28685`.)" +msgstr "" +":func:`sorted` 和 :meth:`list.sort` 已经过优化,在通常情况下执行速度可提升 40-75%。 (由 Elliot " +"Gorokhovsky 在 :issue:`28685` 中贡献。)" + +#: ../../whatsnew/3.7.rst:1818 +msgid "" +":meth:`dict.copy` is now up to 5.5 times faster. (Contributed by Yury " +"Selivanov in :issue:`31179`.)" +msgstr "" +":meth:`dict.copy` 的执行速度现在加快了 5.5 倍。 (由 Yury Selivanov 在 :issue:`31179` 中贡献。)" + +#: ../../whatsnew/3.7.rst:1821 +msgid "" +":func:`hasattr` and :func:`getattr` are now about 4 times faster when *name*" +" is not found and *obj* does not override :meth:`object.__getattr__` or " +":meth:`object.__getattribute__`. (Contributed by INADA Naoki in " +":issue:`32544`.)" +msgstr "" +"当 *name* 未找到并且 *obj* 未重载 :meth:`object.__getattr__` 或 " +":meth:`object.__getattribute__` 时 :func:`hasattr` 和 :func:`getattr` " +"现在会比原来快大约 4 倍。 (由 INADA Naoki 在 :issue:`32544` 中贡献。)" + +#: ../../whatsnew/3.7.rst:1826 +msgid "" +"Searching for certain Unicode characters (like Ukrainian capital \"Є\") in a" +" string was up to 25 times slower than searching for other characters. It is" +" now only 3 times slower in the worst case. (Contributed by Serhiy Storchaka" +" in :issue:`24821`.)" +msgstr "" +"在字符串中搜索特定的 Unicode 字符(例如乌克兰语字母“Є”)会比搜索其他字符慢上 25 倍。 而现在最坏情况下也只会慢上 3 倍。 (由 " +"Serhiy Storchaka 在 :issue:`24821` 中贡献。)" + +#: ../../whatsnew/3.7.rst:1831 +msgid "" +"The :func:`collections.namedtuple` factory has been reimplemented to make " +"the creation of named tuples 4 to 6 times faster. (Contributed by Jelle " +"Zijlstra with further improvements by INADA Naoki, Serhiy Storchaka, and " +"Raymond Hettinger in :issue:`28638`.)" +msgstr "" +":func:`collections.namedtuple` 工厂对象已经重写实现,使得创建具名元组的速度加快了 4 到 6 倍。 (由 Jelle " +"Zijlstra 在 :issue:`28638` 中贡献,进一步的改进由 INADA Naoki, Serhiy Storchaka 和 " +"Raymond Hettinger 贡献。)" + +#: ../../whatsnew/3.7.rst:1836 +msgid "" +":meth:`date.fromordinal` and :meth:`date.fromtimestamp` are now up to 30% " +"faster in the common case. (Contributed by Paul Ganssle in :issue:`32403`.)" +msgstr "" +"现在 :meth:`date.fromordinal` 和 :meth:`date.fromtimestamp` 在通常情况下执行速度可提升 30%。 " +"(由 Paul Ganssle 在 :issue:`32403` 中贡献。)" + +#: ../../whatsnew/3.7.rst:1840 +msgid "" +"The :func:`os.fwalk` function is now up to 2 times faster thanks to the use " +"of :func:`os.scandir`. (Contributed by Serhiy Storchaka in :issue:`25996`.)" +msgstr "" +"由于使用了 :func:`os.scandir`,现在 :func:`os.fwalk` 函数执行速度提升了 2 倍。 (由 Serhiy " +"Storchaka 在 :issue:`25996` 中贡献。)" + +#: ../../whatsnew/3.7.rst:1844 +msgid "" +"The speed of the :func:`shutil.rmtree` function has been improved by 20--40%" +" thanks to the use of the :func:`os.scandir` function. (Contributed by " +"Serhiy Storchaka in :issue:`28564`.)" +msgstr "" +"由于使用了 :func:`os.scandir` 函数,:func:`shutil.rmtree` 函数的执行速度已经提升了 20--40%。 (由 " +"Serhiy Storchaka 在 :issue:`28564` 中贡献。)" + +#: ../../whatsnew/3.7.rst:1848 +msgid "" +"Optimized case-insensitive matching and searching of :mod:`regular " +"expressions `. Searching some patterns can now be up to 20 times " +"faster. (Contributed by Serhiy Storchaka in :issue:`30285`.)" +msgstr "" +":mod:`正则表达式 ` 忽略大小写的匹配和搜索已获得优化。 现在搜索某些模式的速度提升了 20 倍。 (由 Serhiy Storchaka" +" 在 :issue:`30285` 中贡献。)" + +#: ../../whatsnew/3.7.rst:1852 +msgid "" +":func:`re.compile` now converts ``flags`` parameter to int object if it is " +"``RegexFlag``. It is now as fast as Python 3.5, and faster than Python 3.6 " +"by about 10% depending on the pattern. (Contributed by INADA Naoki in " +":issue:`31671`.)" +msgstr "" +":func:`re.compile` 现在会将 ``flags`` 形参转换为 int 对象,如果它是 ``RegexFlag`` 的话。 它现在会和 " +"Python 3.5 一样快,而比 Python 3.6 快大约 10%,实际速度取决于具体的模式。 (由 INADA Naoki 在 " +":issue:`31671` 中贡献。)" + +#: ../../whatsnew/3.7.rst:1857 +msgid "" +"The :meth:`~selectors.BaseSelector.modify` methods of classes " +":class:`selectors.EpollSelector`, :class:`selectors.PollSelector` and " +":class:`selectors.DevpollSelector` may be around 10% faster under heavy " +"loads. (Contributed by Giampaolo Rodola' in :issue:`30014`)" +msgstr "" +":class:`selectors.EpollSelector`, :class:`selectors.PollSelector` 和 " +":class:`selectors.DevpollSelector` 这几个类的 " +":meth:`~selectors.BaseSelector.modify` 方法在重负载下可以加快 10% 左右。 (由 Giampaolo " +"Rodola' 在 :issue:`30014` 中贡献。)" + +#: ../../whatsnew/3.7.rst:1862 +msgid "" +"Constant folding has been moved from the peephole optimizer to the new AST " +"optimizer, which is able perform optimizations more consistently. " +"(Contributed by Eugene Toder and INADA Naoki in :issue:`29469` and " +":issue:`11549`.)" +msgstr "" +"常量折叠已经从窥孔优化器迁移至新的 AST 优化器,后者可以以更高的一致性来执行优化。 (由 Eugene Toder 和 INADA Naoki 在 " +":issue:`29469` 和 :issue:`11549` 中贡献。)" + +#: ../../whatsnew/3.7.rst:1867 +msgid "" +"Most functions and methods in :mod:`abc` have been rewritten in C. This " +"makes creation of abstract base classes, and calling :func:`isinstance` and " +":func:`issubclass` on them 1.5x faster. This also reduces Python start-up " +"time by up to 10%. (Contributed by Ivan Levkivskyi and INADA Naoki in " +":issue:`31333`)" +msgstr "" +":mod:`abc` 中的大部分函数和方法已经用 C 重写。 这使得创建抽像基类以及调用其 :func:`isinstance` 和 " +":func:`issubclass` 的速度加快了 1.5 倍。 这也使得 Python 启动耗时减少了 10%。 (由 Ivan Levkivskyi" +" 和 INADA Naoki 在 :issue:`31333` 中贡献。)" + +#: ../../whatsnew/3.7.rst:1873 +msgid "" +"Significant speed improvements to alternate constructors for " +":class:`datetime.date` and :class:`datetime.datetime` by using fast-path " +"constructors when not constructing subclasses. (Contributed by Paul Ganssle " +"in :issue:`32403`)" +msgstr "" +"在不构造子类时,通过使用快速路径构造器使得 :class:`datetime.date` 和 :class:`datetime.datetime` " +"的替代构造器获得了显著的速度提升。 (由 Paul Ganssle 在 :issue:`32403` 中贡献。)" + +#: ../../whatsnew/3.7.rst:1878 +msgid "" +"The speed of comparison of :class:`array.array` instances has been improved " +"considerably in certain cases. It is now from 10x to 70x faster when " +"comparing arrays holding values of the same integer type. (Contributed by " +"Adrian Wielgosik in :issue:`24700`.)" +msgstr "" +"在特定情况下 :class:`array.array` 实例的比较速度已获得很大提升。 现在当比较存放相同的整数类型的值的数组时会比原来快 10 到 " +"70 倍。 (由 Adrian Wielgosik 在 :issue:`24700` 中贡献。)" + +#: ../../whatsnew/3.7.rst:1883 +msgid "" +"The :func:`math.erf` and :func:`math.erfc` functions now use the (faster) C " +"library implementation on most platforms. (Contributed by Serhiy Storchaka " +"in :issue:`26121`.)" +msgstr "" +"在大多数平台上 :func:`math.erf` 和 :func:`math.erfc` 函数现在使用(更快的)C 库实现。 (由 Serhiy " +"Storchaka 在 :issue:`26121` 中贡献。)" + +#: ../../whatsnew/3.7.rst:1889 +msgid "Other CPython Implementation Changes" +msgstr "其他 CPython 实现的改变" + +#: ../../whatsnew/3.7.rst:1891 +msgid "" +"Trace hooks may now opt out of receiving the ``line`` and opt into receiving" +" the ``opcode`` events from the interpreter by setting the corresponding new" +" ``f_trace_lines`` and ``f_trace_opcodes`` attributes on the frame being " +"traced. (Contributed by Nick Coghlan in :issue:`31344`.)" +msgstr "" +"跟踪钩子现在可以选择不接收 ``line`` 而是选择从解释器接收 ``opcode`` 事件,具体做法是在被跟踪的帧上相应地设置新的 " +"``f_trace_lines`` 和 ``f_trace_opcodes`` 属性。 (由 Nick Coghlan 在 :issue:`31344`" +" 中贡献。)" + +#: ../../whatsnew/3.7.rst:1896 +msgid "" +"Fixed some consistency problems with namespace package module attributes. " +"Namespace module objects now have an ``__file__`` that is set to ``None`` " +"(previously unset), and their ``__spec__.origin`` is also set to ``None`` " +"(previously the string ``\"namespace\"``). See :issue:`32305`. Also, the " +"namespace module object's ``__spec__.loader`` is set to the same value as " +"``__loader__`` (previously, the former was set to ``None``). See " +":issue:`32303`." +msgstr "" +"修复了一些命名空间包模块属性的一致性问题。 命名空间模块对象的 ``__file__`` 被设置为 ``None`` (原先未设置),对象的 " +"``__spec__.origin`` 也被设置为 ``None`` (之前为字符串 ``\"namespace\"``)。 参见 " +":issue:`32305`。 而且,命名空间模块对象的 ``__spec__.loader`` 被设置的值与 ``__loader__`` 相同 " +"(原先前者被设置为 ``None``)。 参见 :issue:`32303`。" + +#: ../../whatsnew/3.7.rst:1904 +msgid "" +"The :func:`locals` dictionary now displays in the lexical order that " +"variables were defined. Previously, the order was undefined. (Contributed " +"by Raymond Hettinger in :issue:`32690`.)" +msgstr "" +":func:`locals` 字典现在以变量定义的词法顺序显示。 原先未定义顺序。 (由 Raymond Hettinger 在 " +":issue:`32690` 中贡献。)" + +#: ../../whatsnew/3.7.rst:1908 +msgid "" +"The :mod:`distutils` ``upload`` command no longer tries to change CR end-of-" +"line characters to CRLF. This fixes a corruption issue with sdists that " +"ended with a byte equivalent to CR. (Contributed by Bo Bayles in " +":issue:`32304`.)" +msgstr "" +":mod:`distutils` ``upload`` 命令不会再试图将行结束字符 CR 改为 CRLF。 这修复了 sdists 的一个以与 CR " +"等价的字节结束的数据损坏问题。 (由 Bo Bayles 在 :issue:`32304` 中贡献。)" + +#: ../../whatsnew/3.7.rst:1915 +msgid "Deprecated Python Behavior" +msgstr "已弃用的 Python 行为" + +#: ../../whatsnew/3.7.rst:1917 +msgid "" +"Yield expressions (both ``yield`` and ``yield from`` clauses) are now " +"deprecated in comprehensions and generator expressions (aside from the " +"iterable expression in the leftmost :keyword:`!for` clause). This ensures " +"that comprehensions always immediately return a container of the appropriate" +" type (rather than potentially returning a :term:`generator iterator` " +"object), while generator expressions won't attempt to interleave their " +"implicit output with the output from any explicit yield expressions. In " +"Python 3.7, such expressions emit :exc:`DeprecationWarning` when compiled, " +"in Python 3.8 this will be a :exc:`SyntaxError`. (Contributed by Serhiy " +"Storchaka in :issue:`10544`.)" +msgstr "" +"在推导式和生成器表达式中的 yield 语句(包括 ``yield`` 和 ``yield from`` 子句)现在已弃用(最左端的 " +":keyword:`!for` 子句中的可迭代对象表达式除外)。 这确保了推导式总是立即返回适当类型的容器(而不是有可能返回 " +":term:`generator iterator` 对象),这样生成器表达式不会试图将它们的隐式输出与任何来自显式 yield 表达式的输出交错起来。" +" 在 Python 3.7 中,这样的表达式会在编译时引发 :exc:`DeprecationWarning`,在 Python 3.8 中则将引发 " +":exc:`SyntaxError`。 (由 Serhiy Storchaka 在 :issue:`10544` 中贡献。)" + +#: ../../whatsnew/3.7.rst:1928 +msgid "" +"Returning a subclass of :class:`complex` from :meth:`object.__complex__` is " +"deprecated and will be an error in future Python versions. This makes " +"``__complex__()`` consistent with :meth:`object.__int__` and " +":meth:`object.__float__`. (Contributed by Serhiy Storchaka in " +":issue:`28894`.)" +msgstr "" +"从 :meth:`object.__complex__` 返回一个 :class:`complex` 的子类的行为已弃用并将在未来的 Python " +"版本中引发错误。 这使得 ``__complex__()`` 的行为与 :meth:`object.__int__` 和 " +":meth:`object.__float__` 保持一致。 (由 Serhiy Storchaka 在 :issue:`28894` 中贡献。)" + +#: ../../whatsnew/3.7.rst:1937 +msgid "Deprecated Python modules, functions and methods" +msgstr "已弃用的 Python 模块、函数和方法" + +#: ../../whatsnew/3.7.rst:1940 +msgid "aifc" +msgstr "aifc" + +#: ../../whatsnew/3.7.rst:1942 +msgid "" +":func:`aifc.openfp` has been deprecated and will be removed in Python 3.9. " +"Use :func:`aifc.open` instead. (Contributed by Brian Curtin in " +":issue:`31985`.)" +msgstr "" +":func:`aifc.openfp` 已弃用并将在 Python 3.9 中被移除。 请改用 :func:`aifc.open`。 (由 Brian " +"Curtin 在 :issue:`31985` 中贡献。)" + +#: ../../whatsnew/3.7.rst:1952 +msgid "" +"Support for directly ``await``-ing instances of :class:`asyncio.Lock` and " +"other asyncio synchronization primitives has been deprecated. An " +"asynchronous context manager must be used in order to acquire and release " +"the synchronization resource. (Contributed by Andrew Svetlov in " +":issue:`32253`.)" +msgstr "" +"对 :class:`asyncio.Lock` 和其他 asyncio 同步原语的 ``await`` 实例的直接支持已弃用。 " +"想要获取并释放同步资源必须使用异步上下文管理器。 (由 Andrew Svetlov 在 :issue:`32253` 中贡献。)" + +#: ../../whatsnew/3.7.rst:1958 +msgid "" +"The :meth:`asyncio.Task.current_task` and :meth:`asyncio.Task.all_tasks` " +"methods have been deprecated. (Contributed by Andrew Svetlov in " +":issue:`32250`.)" +msgstr "" +":meth:`asyncio.Task.current_task` 和 :meth:`asyncio.Task.all_tasks` 方法已弃用。 (由" +" Andrew Svetlov 在 :issue:`32250` 中贡献。)" + +#: ../../whatsnew/3.7.rst:1966 +msgid "" +"In Python 3.8, the abstract base classes in :mod:`collections.abc` will no " +"longer be exposed in the regular :mod:`collections` module. This will help " +"create a clearer distinction between the concrete classes and the abstract " +"base classes. (Contributed by Serhiy Storchaka in :issue:`25988`.)" +msgstr "" +"在 Python 3.8 中,:mod:`collections.abc` 内的抽象基类将不会再通过常规的 :mod:`collections` " +"模块公开。 这有助于更清晰地区别具体类与抽象基类。 (由 Serhiy Storchaka 在 :issue:`25988` 中贡献。)" + +#: ../../whatsnew/3.7.rst:1976 +msgid "" +":mod:`dbm.dumb` now supports reading read-only files and no longer writes " +"the index file when it is not changed. A deprecation warning is now emitted" +" if the index file is missing and recreated in the ``'r'`` and ``'w'`` modes" +" (this will be an error in future Python releases). (Contributed by Serhiy " +"Storchaka in :issue:`28847`.)" +msgstr "" +":mod:`dbm.dumb` 现在支持读取只读文件,且当其未被更改时不会再写入索引文件。 现在如果索引文件丢失并在 ``'r'`` 与 ``'w'``" +" 模式下被重新创建,则会发出已弃用警告(在未来的 Python 发布版中将改为错误)。 (由 Serhiy Storchaka 在 " +":issue:`28847` 中贡献。)" + +#: ../../whatsnew/3.7.rst:1986 +msgid "" +"In Python 3.8, attempting to check for non-Enum objects in :class:`Enum` " +"classes will raise a :exc:`TypeError` (e.g. ``1 in Color``); similarly, " +"attempting to check for non-Flag objects in a :class:`Flag` member will " +"raise :exc:`TypeError` (e.g. ``1 in Perm.RW``); currently, both operations " +"return :const:`False` instead. (Contributed by Ethan Furman in " +":issue:`33217`.)" +msgstr "" +"在 Python 3.8 中,尝试在 :class:`Enum` 类中检查非 Enum 对象将引发 :exc:`TypeError` (例如 ``1 " +"in Color``);类似地,尝试在 :class:`Flag` 成员中检查非 Flag 对象也将引发 :exc:`TypeError` (例如 " +"``1 in Perm.RW``);目前,两种操作均会返回 :const:`False`。 (由 Ethan Furman 在 " +":issue:`33217` 中贡献。)" + +#: ../../whatsnew/3.7.rst:1995 +msgid "gettext" +msgstr "gettext" + +#: ../../whatsnew/3.7.rst:1997 +msgid "" +"Using non-integer value for selecting a plural form in :mod:`gettext` is now" +" deprecated. It never correctly worked. (Contributed by Serhiy Storchaka in" +" :issue:`28692`.)" +msgstr "" +"使用非整数值在 :mod:`gettext` 中选择复数形式现在已弃用。 它从未正确地发挥作用。 (由 Serhiy Storchaka 在 " +":issue:`28692` 中贡献。)" + +#: ../../whatsnew/3.7.rst:2005 +msgid "" +"Methods :meth:`MetaPathFinder.find_module() " +"` (replaced by " +":meth:`MetaPathFinder.find_spec() `)" +" and :meth:`PathEntryFinder.find_loader() " +"` (replaced by " +":meth:`PathEntryFinder.find_spec() " +"`) both deprecated in Python 3.4 " +"now emit :exc:`DeprecationWarning`. (Contributed by Matthias Bussonnier in " +":issue:`29576`)" +msgstr "" +"下列方法 :meth:`MetaPathFinder.find_module() " +"` (被 " +":meth:`MetaPathFinder.find_spec() 替代 " +"`) 和 " +":meth:`PathEntryFinder.find_loader() " +"` (被 " +":meth:`PathEntryFinder.find_spec() 替代 " +"`) 都在 Python 3.4 中已弃用,现在会引发 " +":exc:`DeprecationWarning`。 (由 Matthias Bussonnier 在 :issue:`29576` 中贡献)" + +#: ../../whatsnew/3.7.rst:2016 +msgid "" +"The :class:`importlib.abc.ResourceLoader` ABC has been deprecated in favour " +"of :class:`importlib.abc.ResourceReader`." +msgstr "" +":class:`importlib.abc.ResourceLoader` ABC 已弃用,推荐改用 " +":class:`importlib.abc.ResourceReader`。" + +#: ../../whatsnew/3.7.rst:2023 +msgid "" +":func:`locale.format` has been deprecated, use :meth:`locale.format_string` " +"instead. (Contributed by Garvit in :issue:`10379`.)" +msgstr "" +":func:`locale.format` 已弃用,请改用 :meth:`locale.format_string`。 (由 Garvit 在 " +":issue:`10379` 中贡献。)" + +#: ../../whatsnew/3.7.rst:2028 +msgid "macpath" +msgstr "macpath" + +#: ../../whatsnew/3.7.rst:2030 +msgid "" +"The :mod:`macpath` is now deprecated and will be removed in Python 3.8. " +"(Contributed by Chi Hsuan Yen in :issue:`9850`.)" +msgstr "" +":mod:`macpath` 现在已弃用,将在 Python 3.8 中被移除。 (由 Chi Hsuan Yen 在 :issue:`9850` " +"中贡献。)" + +#: ../../whatsnew/3.7.rst:2035 +msgid "threading" +msgstr "threading" + +#: ../../whatsnew/3.7.rst:2037 +msgid "" +":mod:`dummy_threading` and :mod:`_dummy_thread` have been deprecated. It is" +" no longer possible to build Python with threading disabled. Use " +":mod:`threading` instead. (Contributed by Antoine Pitrou in :issue:`31370`.)" +msgstr "" +":mod:`dummy_threading` 和 :mod:`_dummy_thread` 已弃用。 构建禁用线程的 Python 已不再可能。 请改用" +" :mod:`threading`。 (由 Antoine Pitrou 在 :issue:`31370` 中贡献。)" + +#: ../../whatsnew/3.7.rst:2046 +msgid "" +"The silent argument value truncation in :func:`socket.htons` and " +":func:`socket.ntohs` has been deprecated. In future versions of Python, if " +"the passed argument is larger than 16 bits, an exception will be raised. " +"(Contributed by Oren Milman in :issue:`28332`.)" +msgstr "" +":func:`socket.htons` 和 :func:`socket.ntohs` 中的静默参数截断已弃用。 在未来的 Python " +"版本中,如果传入的参数长度大于 16 比特位,将会引发异常。 (由 Oren Milman 在 :issue:`28332` 中贡献。)" + +#: ../../whatsnew/3.7.rst:2055 +msgid "" +":func:`ssl.wrap_socket` is deprecated. Use " +":meth:`ssl.SSLContext.wrap_socket` instead. (Contributed by Christian Heimes" +" in :issue:`28124`.)" +msgstr "" +":func:`ssl.wrap_socket` 已弃用。 请改用 :meth:`ssl.SSLContext.wrap_socket`。 (由 " +"Christian Heimes 在 :issue:`28124` 中贡献。)" + +#: ../../whatsnew/3.7.rst:2061 +msgid "sunau" +msgstr "sunau" + +#: ../../whatsnew/3.7.rst:2063 +msgid "" +":func:`sunau.openfp` has been deprecated and will be removed in Python 3.9. " +"Use :func:`sunau.open` instead. (Contributed by Brian Curtin in " +":issue:`31985`.)" +msgstr "" +":func:`sunau.openfp` 已弃用并将在 Python 3.9 中被移除。 请改用 :func:`sunau.open`。 (由 " +"Brian Curtin 在 :issue:`31985` 中贡献。)" + +#: ../../whatsnew/3.7.rst:2071 +msgid "" +"Deprecated :func:`sys.set_coroutine_wrapper` and " +":func:`sys.get_coroutine_wrapper`." +msgstr "" +"已弃用 :func:`sys.set_coroutine_wrapper` 和 :func:`sys.get_coroutine_wrapper`。" + +#: ../../whatsnew/3.7.rst:2074 +msgid "" +"The undocumented ``sys.callstats()`` function has been deprecated and will " +"be removed in a future Python version. (Contributed by Victor Stinner in " +":issue:`28799`.)" +msgstr "" +"未写入文档的 ``sys.callstats()`` 函数已弃用并将在未来的 Python 版本中被移除。 (由 Victor Stinner 在 " +":issue:`28799` 中贡献。)" + +#: ../../whatsnew/3.7.rst:2080 +msgid "wave" +msgstr "wave" + +#: ../../whatsnew/3.7.rst:2082 +msgid "" +":func:`wave.openfp` has been deprecated and will be removed in Python 3.9. " +"Use :func:`wave.open` instead. (Contributed by Brian Curtin in " +":issue:`31985`.)" +msgstr "" +":func:`wave.openfp` 已弃用并将在 Python 3.9 中被移除。 请改用 :func:`wave.open`。 (由 Brian " +"Curtin 在 :issue:`31985` 中贡献。)" + +#: ../../whatsnew/3.7.rst:2088 +msgid "Deprecated functions and types of the C API" +msgstr "已弃用的 C API 函数和类型" + +#: ../../whatsnew/3.7.rst:2090 +msgid "" +"Function :c:func:`PySlice_GetIndicesEx` is deprecated and replaced with a " +"macro if ``Py_LIMITED_API`` is not set or set to a value in the range " +"between ``0x03050400`` and ``0x03060000`` (not inclusive), or is " +"``0x03060100`` or higher. (Contributed by Serhiy Storchaka in " +":issue:`27867`.)" +msgstr "" +"如果 ``Py_LIMITED_API`` 未设定或设定为范围在 ``0x03050400`` 和 ``0x03060000`` (不含) 之间,或为 " +"``0x03060100`` 或更高的值,函数 :c:func:`PySlice_GetIndicesEx` 已弃用并被一个宏所替代。 (由 " +"Serhiy Storchaka 在 :issue:`27867` 中贡献。)" + +#: ../../whatsnew/3.7.rst:2095 +msgid "" +":c:func:`PyOS_AfterFork` has been deprecated. Use " +":c:func:`PyOS_BeforeFork`, :c:func:`PyOS_AfterFork_Parent` or " +":c:func:`PyOS_AfterFork_Child()` instead. (Contributed by Antoine Pitrou in " +":issue:`16500`.)" +msgstr "" +":c:func:`PyOS_AfterFork` 已弃用。 请改用 :c:func:`PyOS_BeforeFork`, " +":c:func:`PyOS_AfterFork_Parent` 或 :c:func:`PyOS_AfterFork_Child()`。 (由 " +"Antoine Pitrou 在 :issue:`16500` 中贡献。)" + +#: ../../whatsnew/3.7.rst:2103 +msgid "Platform Support Removals" +msgstr "平台支持的移除" + +#: ../../whatsnew/3.7.rst:2105 +msgid "FreeBSD 9 and older are no longer officially supported." +msgstr "官方已不再支持 FreeBSD 9 及更旧的版本。" + +#: ../../whatsnew/3.7.rst:2106 +msgid "" +"For full Unicode support, including within extension modules, \\*nix " +"platforms are now expected to provide at least one of ``C.UTF-8`` (full " +"locale), ``C.utf8`` (full locale) or ``UTF-8`` (``LC_CTYPE``-only locale) as" +" an alternative to the legacy ``ASCII``-based ``C`` locale." +msgstr "" +"为了完整的 Unicode 支持,包括在扩展模块之内,\\*nix 平台现在至少应当提供 ``C.UTF-8`` (完整区域), ``C.utf8`` " +"(完整区域) 或 ``UTF-8`` (``LC_CTYPE`` 专属区域) 中的一个作为基于 ``ASCII`` 的传统 ``C`` 区域的替代。" + +#: ../../whatsnew/3.7.rst:2110 +msgid "" +"OpenSSL 0.9.8 and 1.0.1 are no longer supported, which means building " +"CPython 3.7 with SSL/TLS support on older platforms still using these " +"versions requires custom build options that link to a more recent version of" +" OpenSSL." +msgstr "" +"OpenSSL 0.9.8 和 1.0.1 已不再受支持,这意味着在仍然使用这些版本的旧平台上构建带有 SSL/TLS 支持的 CPython 3.7 " +"时,需要自定义构建选项以链接到更新的 OpenSSL 版本。" + +#: ../../whatsnew/3.7.rst:2114 +msgid "" +"Notably, this issue affects the Debian 8 (aka \"jessie\") and Ubuntu 14.04 " +"(aka \"Trusty\") LTS Linux distributions, as they still use OpenSSL 1.0.1 by" +" default." +msgstr "" +"注意,此问题会影响到 Debian 8 (代号“jessie”) 和 Ubuntu 14.04 (代号“Trusty”) 等长期支持 Linux " +"发行版,因为它们默认仍然使用 OpenSSL 1.0.1。" + +#: ../../whatsnew/3.7.rst:2118 +msgid "" +"Debian 9 (\"stretch\") and Ubuntu 16.04 (\"xenial\"), as well as recent " +"releases of other LTS Linux releases (e.g. RHEL/CentOS 7.5, SLES 12-SP3), " +"use OpenSSL 1.0.2 or later, and remain supported in the default build " +"configuration." +msgstr "" +"Debian 9 (“stretch”) 和 Ubuntu 16.04 (“xenial”) 以及其他最新的长期支持 Linux 发行版 (例如 " +"RHEL/CentOS 7.5, SLES 12-SP3) 都使用 OpenSSL 1.0.2 或更新的版本,因此继续在默认的构建配置中受到支持。" + +#: ../../whatsnew/3.7.rst:2122 +msgid "" +"CPython's own :source:`CI configuration file <.travis.yml>` provides an " +"example of using the SSL :source:`compatibility testing infrastructure " +"` in CPython's test suite to build and link " +"against OpenSSL 1.1.0 rather than an outdated system provided OpenSSL." +msgstr "" +"CPython 自己的 :source:`CI 配置文件 <.travis.yml>` 提供了一个使用 CPython 测试套件中的 SSL " +":source:`兼容性测试架构 ` 基于 OpenSSL 1.1.0 " +"进行构建和链接的例子,而不是使用过时的系统所提供的 OpenSSL。" + +#: ../../whatsnew/3.7.rst:2130 +msgid "API and Feature Removals" +msgstr "API 与特性的移除" + +#: ../../whatsnew/3.7.rst:2132 +msgid "The following features and APIs have been removed from Python 3.7:" +msgstr "下列特性与 API 已从 Python 3.7 中移除:" + +#: ../../whatsnew/3.7.rst:2134 +msgid "" +"The ``os.stat_float_times()`` function has been removed. It was introduced " +"in Python 2.3 for backward compatibility with Python 2.2, and was deprecated" +" since Python 3.1." +msgstr "" +"``os.stat_float_times()`` 函数已被移除。 它在 Python 2.3 中被引入用于向下兼容 Python 2.2,并自 " +"Python 3.1 起就已弃用。" + +#: ../../whatsnew/3.7.rst:2138 +msgid "" +"Unknown escapes consisting of ``'\\'`` and an ASCII letter in replacement " +"templates for :func:`re.sub` were deprecated in Python 3.5, and will now " +"cause an error." +msgstr "" +"在 :func:`re.sub` 的替换模块中由 ``'\\'`` 与一个 ASCII 字母构成的未知转义在 Python 3.5 " +"中已弃用,现在将会引发错误。" + +#: ../../whatsnew/3.7.rst:2142 +msgid "" +"Removed support of the *exclude* argument in :meth:`tarfile.TarFile.add`. It" +" was deprecated in Python 2.7 and 3.2. Use the *filter* argument instead." +msgstr "" +"在 :meth:`tarfile.TarFile.add` 中移除了对 *exclude* 参数的支持。 它在 Python 2.7 和 3.2 " +"中已弃用。 请改用 *filter* 参数。" + +#: ../../whatsnew/3.7.rst:2145 +msgid "" +"The ``splitunc()`` function in the :mod:`ntpath` module was deprecated in " +"Python 3.1, and has now been removed. Use the :func:`~os.path.splitdrive` " +"function instead." +msgstr "" +":mod:`ntpath` 模块中的 ``splitunc()`` 函数在 Python 3.1 中已弃用,现在已被移除。 请改用 " +":func:`~os.path.splitdrive` 函数。" + +#: ../../whatsnew/3.7.rst:2149 +msgid "" +":func:`collections.namedtuple` no longer supports the *verbose* parameter or" +" ``_source`` attribute which showed the generated source code for the named " +"tuple class. This was part of an optimization designed to speed-up class " +"creation. (Contributed by Jelle Zijlstra with further improvements by INADA" +" Naoki, Serhiy Storchaka, and Raymond Hettinger in :issue:`28638`.)" +msgstr "" +":func:`collections.namedtuple` 不再支持 *verbose* 形参或 ``_source`` " +"属性,该属性会显示为具名元组类所生成的源代码。 这是加速类创建的设计优化的一部分。 (由 Jelle Zijlstra 在 :issue:`28638`" +" 中贡献,进一步的改进由 INADA Naoki, Serhiy Storchaka 和 Raymond Hettinger 贡献。)" + +#: ../../whatsnew/3.7.rst:2155 +msgid "" +"Functions :func:`bool`, :func:`float`, :func:`list` and :func:`tuple` no " +"longer take keyword arguments. The first argument of :func:`int` can now be" +" passed only as positional argument." +msgstr "" +"函数 :func:`bool`, :func:`float`, :func:`list` 和 :func:`tuple` 不再接受关键字参数。 " +":func:`int` 的第一个参数现在只能作为位置参数传入。" + +#: ../../whatsnew/3.7.rst:2159 +msgid "" +"Removed previously deprecated in Python 2.4 classes ``Plist``, ``Dict`` and " +"``_InternalDict`` in the :mod:`plistlib` module. Dict values in the result " +"of functions :func:`~plistlib.readPlist` and " +":func:`~plistlib.readPlistFromBytes` are now normal dicts. You no longer " +"can use attribute access to access items of these dictionaries." +msgstr "" +"移除了之前在 Python 2.4 中已弃用的 :mod:`plistlib` 模块的类 ``Plist``, ``Dict`` 和 " +"``_InternalDict``。 作为函数 :func:`~plistlib.readPlist` 和 " +":func:`~plistlib.readPlistFromBytes` 返回结果的 Dict 值现在为普通 dict。 " +"你不能再使用属性访问来获取这些字典的项。" + +#: ../../whatsnew/3.7.rst:2165 +msgid "" +"The ``asyncio.windows_utils.socketpair()`` function has been removed. Use " +"the :func:`socket.socketpair` function instead, it is available on all " +"platforms since Python 3.5. ``asyncio.windows_utils.socketpair`` was just an" +" alias to ``socket.socketpair`` on Python 3.5 and newer." +msgstr "" +"``asyncio.windows_utils.socketpair()`` 函数已被移除。 请改用 :func:`socket.socketpair`" +" 函数,它自 Python 3.5 起就在所有平台上可用。 ``asyncio.windows_utils.socketpair`` 在 Python " +"3.5 及更新版本上只是 ``socket.socketpair`` 的别名。" + +#: ../../whatsnew/3.7.rst:2171 +msgid "" +":mod:`asyncio` no longer exports the :mod:`selectors` and :mod:`_overlapped`" +" modules as ``asyncio.selectors`` and ``asyncio._overlapped``. Replace " +"``from asyncio import selectors`` with ``import selectors``." +msgstr "" +":mod:`asyncio` 不再将 :mod:`selectors` 和 :mod:`_overlapped` 模块导出为 " +"``asyncio.selectors`` 和 ``asyncio._overlapped``。 请将 ``from asyncio import " +"selectors`` 替换为 ``import selectors``。" + +#: ../../whatsnew/3.7.rst:2176 +msgid "" +"Direct instantiation of :class:`ssl.SSLSocket` and :class:`ssl.SSLObject` " +"objects is now prohibited. The constructors were never documented, tested, " +"or designed as public constructors. Users were supposed to use " +":func:`ssl.wrap_socket` or :class:`ssl.SSLContext`. (Contributed by " +"Christian Heimes in :issue:`32951`.)" +msgstr "" +"现在已禁止直接实例化 :class:`ssl.SSLSocket` 和 :class:`ssl.SSLObject` 对象。 " +"相应构造器从未写入文档、也从未作为公有构造器进行测试或设计。 用户应当使用 :func:`ssl.wrap_socket` 或 " +":class:`ssl.SSLContext`。 (由 Christian Heimes 在 :issue:`32951` 中贡献。)" + +#: ../../whatsnew/3.7.rst:2182 +msgid "" +"The unused :mod:`distutils` ``install_misc`` command has been removed. " +"(Contributed by Eric N. Vander Weele in :issue:`29218`.)" +msgstr "" +"未被使用的 :mod:`distutils` ``install_misc`` 命令已被移除。 (由 Eric N. Vander Weele 在 " +":issue:`29218` 中贡献。)" + +#: ../../whatsnew/3.7.rst:2187 +msgid "Module Removals" +msgstr "移除的模块" + +#: ../../whatsnew/3.7.rst:2189 +msgid "" +"The ``fpectl`` module has been removed. It was never enabled by default, " +"never worked correctly on x86-64, and it changed the Python ABI in ways that" +" caused unexpected breakage of C extensions. (Contributed by Nathaniel J. " +"Smith in :issue:`29137`.)" +msgstr "" +"``fpectl`` 模块已被移除。 它从未被默认启用,从未在 x86-64 上正确发挥效果,并且它对 Python ABI 的改变会导致 C " +"扩展的意外损坏。 (由 Nathaniel J. Smith 在 :issue:`29137` 中贡献。)" + +#: ../../whatsnew/3.7.rst:2196 ../../whatsnew/3.7.rst:2472 +msgid "Windows-only Changes" +msgstr "Windows 专属的改变" + +#: ../../whatsnew/3.7.rst:2198 +msgid "" +"The python launcher, (py.exe), can accept 32 & 64 bit specifiers **without**" +" having to specify a minor version as well. So ``py -3-32`` and ``py -3-64``" +" become valid as well as ``py -3.7-32``, also the -*m*-64 and -*m.n*-64 " +"forms are now accepted to force 64 bit python even if 32 bit would have " +"otherwise been used. If the specified version is not available py.exe will " +"error exit. (Contributed by Steve Barnes in :issue:`30291`.)" +msgstr "" +"Python 启动器(py.exe)可以接受 32 位或 64 位标记而 **不必** 同时指定一个小版本。 因此 ``py -3-32`` 和 " +"``py -3-64`` 与 ``py -3.7-32`` 均为有效,并且现在还接受 -*m*-64 和 -*m.n*-64 来强制使用 64 位 " +"python 命令,即使是本应使用 32 位的时候。 如果指定版本不可用则 py.exe 将报错退出。 (由 Steve Barnes 在 " +":issue:`30291` 中贡献。)" + +#: ../../whatsnew/3.7.rst:2205 +msgid "" +"The launcher can be run as ``py -0`` to produce a list of the installed " +"pythons, *with default marked with an asterisk*. Running ``py -0p`` will " +"include the paths. If py is run with a version specifier that cannot be " +"matched it will also print the *short form* list of available specifiers. " +"(Contributed by Steve Barnes in :issue:`30362`.)" +msgstr "" +"启动器可以运行 ``py -0`` 来列出已安装的所有 python,*默认版本会以星号标出*。 运行 ``py -0p`` 将同时列出相应的路径。 " +"如果运行 py 时指定了无法匹配的版本,它将显示 *简短形式* 的可用版本列表。 (由 Steve Barnes 在 :issue:`30362` " +"中贡献。)" + +#: ../../whatsnew/3.7.rst:2215 +msgid "Porting to Python 3.7" +msgstr "移植到 Python 3.7" + +#: ../../whatsnew/3.7.rst:2217 +msgid "" +"This section lists previously described changes and other bugfixes that may " +"require changes to your code." +msgstr "本节列出了先前描述的更改以及可能需要更改代码的其他错误修正." + +#: ../../whatsnew/3.7.rst:2222 +msgid "Changes in Python Behavior" +msgstr "Python 行为的更改" + +#: ../../whatsnew/3.7.rst:2224 +msgid "" +":keyword:`async` and :keyword:`await` names are now reserved keywords. Code " +"using these names as identifiers will now raise a :exc:`SyntaxError`. " +"(Contributed by Jelle Zijlstra in :issue:`30406`.)" +msgstr "" +":keyword:`async` 和 :keyword:`await` 现在是保留关键字。 使用了这些名称作为标识符的代码现在将引发 " +":exc:`SyntaxError`。 (由 Jelle Zijlstra 在 :issue:`30406` 中贡献。)" + +#: ../../whatsnew/3.7.rst:2228 +msgid "" +":pep:`479` is enabled for all code in Python 3.7, meaning that " +":exc:`StopIteration` exceptions raised directly or indirectly in coroutines " +"and generators are transformed into :exc:`RuntimeError` exceptions. " +"(Contributed by Yury Selivanov in :issue:`32670`.)" +msgstr "" +":pep:`479` 在 Python 3.7 中对所有代码启用,在协程和生成器中直接或间接引发的 :exc:`StopIteration` " +"异常会被转换为 :exc:`RuntimeError` 异常。 (由 Yury Selivanov 在 :issue:`32670` 中贡献。)" + +#: ../../whatsnew/3.7.rst:2234 +msgid "" +":meth:`object.__aiter__` methods can no longer be declared as asynchronous." +" (Contributed by Yury Selivanov in :issue:`31709`.)" +msgstr "" +":meth:`object.__aiter__` 方法不再能被声明为异步的。 (由 Yury Selivanov 在 :issue:`31709` " +"中贡献。)" + +#: ../../whatsnew/3.7.rst:2237 +msgid "" +"Due to an oversight, earlier Python versions erroneously accepted the " +"following syntax::" +msgstr "由于一个疏忽,之前的 Python 版本会错误地接受以下语法::" + +#: ../../whatsnew/3.7.rst:2245 +msgid "" +"Python 3.7 now correctly raises a :exc:`SyntaxError`, as a generator " +"expression always needs to be directly inside a set of parentheses and " +"cannot have a comma on either side, and the duplication of the parentheses " +"can be omitted only on calls. (Contributed by Serhiy Storchaka in " +":issue:`32012` and :issue:`32023`.)" +msgstr "" +"现在 Python 3.7 会正确地引发 :exc:`SyntaxError`,因为生成器表达式总是必须直接包含于一对括号之内, " +"且前后都不能有逗号,仅在调用时可以忽略重复的括号。 (由 Serhiy Storchaka 在 :issue:`32012` 和 " +":issue:`32023` 中贡献。)" + +#: ../../whatsnew/3.7.rst:2251 +msgid "" +"When using the :option:`-m` switch, the initial working directory is now " +"added to :data:`sys.path`, rather than an empty string (which dynamically " +"denoted the current working directory at the time of each import). Any " +"programs that are checking for the empty string, or otherwise relying on the" +" previous behaviour, will need to be updated accordingly (e.g. by also " +"checking for ``os.getcwd()`` or ``os.path.dirname(__main__.__file__)``, " +"depending on why the code was checking for the empty string in the first " +"place)." +msgstr "" +"现在当使用 :option:`-m` 开关时,会将初始工作目录添加到 " +":data:`sys.path`,而不再是一个空字符串(即在每次导入时动态地指明当前工作目录)。 " +"任何会检测该空字符串,或是以其他方式依赖之前行为的的程序将需要进行相应的更新(例如改为还要检测 ``os.getcwd()`` 或 " +"``os.path.dirname(__main__.__file__)``,具体做法首先要取决于为何要对代码执行空字符串检测)。" + +#: ../../whatsnew/3.7.rst:2261 +msgid "Changes in the Python API" +msgstr "更改的Python API" + +#: ../../whatsnew/3.7.rst:2263 +msgid "" +":meth:`socketserver.ThreadingMixIn.server_close` now waits until all non-" +"daemon threads complete. Set the new " +":attr:`socketserver.ThreadingMixIn.block_on_close` class attribute to " +"``False`` to get the pre-3.7 behaviour. (Contributed by Victor Stinner in " +":issue:`31233` and :issue:`33540`.)" +msgstr "" +":meth:`socketserver.ThreadingMixIn.server_close` 现在会等待所有非守护线程完成。 将新增的 " +":attr:`socketserver.ThreadingMixIn.block_on_close` 类属性设为 ``False`` 可获得 3.7 " +"之前版本的行为。 (由 Victor Stinner 在 :issue:`31233` 和 :issue:`33540` 中贡献。)" + +#: ../../whatsnew/3.7.rst:2269 +msgid "" +":meth:`socketserver.ForkingMixIn.server_close` now waits until all child " +"processes complete. Set the new " +":attr:`socketserver.ForkingMixIn.block_on_close` class attribute to " +"``False`` to get the pre-3.7 behaviour. (Contributed by Victor Stinner in " +":issue:`31151` and :issue:`33540`.)" +msgstr "" +":meth:`socketserver.ForkingMixIn.server_close` 现在会等等所有子进程完成。 将新增的 " +":attr:`socketserver.ForkingMixIn.block_on_close` 类属性设为 ``False`` 可获得 3.7 " +"之前版本的行为。 (由 Victor Stinner 在 :issue:`31151` 和 :issue:`33540` 中贡献。)" + +#: ../../whatsnew/3.7.rst:2275 +msgid "" +"The :func:`locale.localeconv` function now temporarily sets the ``LC_CTYPE``" +" locale to the value of ``LC_NUMERIC`` in some cases. (Contributed by Victor" +" Stinner in :issue:`31900`.)" +msgstr "" +"某些情况下 :func:`locale.localeconv` 函数现在会临时将 ``LC_CTYPE`` 区域设置为 ``LC_NUMERIC`` " +"的值。 (由 Victor Stinner 在 :issue:`31900` 中贡献。)" + +#: ../../whatsnew/3.7.rst:2279 +msgid "" +":meth:`pkgutil.walk_packages` now raises a :exc:`ValueError` if *path* is a " +"string. Previously an empty list was returned. (Contributed by Sanyam " +"Khurana in :issue:`24744`.)" +msgstr "" +"如果 *path* 为字符串 :meth:`pkgutil.walk_packages` 现在会引发 :exc:`ValueError`。 " +"之前则是返回一个空列表。 (由 Sanyam Khurana 在 :issue:`24744` 中贡献。)" + +#: ../../whatsnew/3.7.rst:2283 +msgid "" +"A format string argument for :meth:`string.Formatter.format` is now " +":ref:`positional-only `. Passing it as a keyword " +"argument was deprecated in Python 3.5. (Contributed by Serhiy Storchaka in " +":issue:`29193`.)" +msgstr "" +":meth:`string.Formatter.format` 的格式字符串参数现在为 :ref:`仅限位置 ` 参数。 将其作为关键字参数传入的方式自 Python 3.5 起已弃用。 (由 Serhiy Storchaka 在 " +":issue:`29193` 中贡献。)" + +#: ../../whatsnew/3.7.rst:2288 +msgid "" +"Attributes :attr:`~http.cookies.Morsel.key`, " +":attr:`~http.cookies.Morsel.value` and " +":attr:`~http.cookies.Morsel.coded_value` of class " +":class:`http.cookies.Morsel` are now read-only. Assigning to them was " +"deprecated in Python 3.5. Use the :meth:`~http.cookies.Morsel.set` method " +"for setting them. (Contributed by Serhiy Storchaka in :issue:`29192`.)" +msgstr "" +"类 :class:`http.cookies.Morsel` 的属性 :attr:`~http.cookies.Morsel.key`, " +":attr:`~http.cookies.Morsel.value` 和 " +":attr:`~http.cookies.Morsel.coded_value` 现在均为只读。 对其赋值的操作自 Python 3.5 起已弃用。 " +"要设置它们的值请使用 :meth:`~http.cookies.Morsel.set` 方法。 (由 Serhiy Storchaka 在 " +":issue:`29192` 中贡献。)" + +#: ../../whatsnew/3.7.rst:2296 +msgid "" +"The *mode* argument of :func:`os.makedirs` no longer affects the file " +"permission bits of newly-created intermediate-level directories. To set " +"their file permission bits you can set the umask before invoking " +"``makedirs()``. (Contributed by Serhiy Storchaka in :issue:`19930`.)" +msgstr "" +":func:`os.makedirs` 的 *mode* 参数不会再影响新建中间层级目录的文件权限位。 要设置它们的文件权限位你可以在发起调用 " +"``makedirs()`` 之前设置 umask。 (由 Serhiy Storchaka 在 :issue:`19930` 中贡献。)" + +#: ../../whatsnew/3.7.rst:2302 +msgid "" +"The :attr:`struct.Struct.format` type is now :class:`str` instead of " +":class:`bytes`. (Contributed by Victor Stinner in :issue:`21071`.)" +msgstr "" +":attr:`struct.Struct.format` 的类型现在是 :class:`str` 而非 :class:`bytes`。 (由 " +"Victor Stinner 在 :issue:`21071` 中贡献。)" + +#: ../../whatsnew/3.7.rst:2305 +msgid "" +":func:`~cgi.parse_multipart` now accepts the *encoding* and *errors* " +"arguments and returns the same results as :class:`~FieldStorage`: for non-" +"file fields, the value associated to a key is a list of strings, not bytes. " +"(Contributed by Pierre Quentel in :issue:`29979`.)" +msgstr "" +":func:`~cgi.parse_multipart` 现在接受 *encoding* 和 *errors* 参数并返回与 " +":class:`~FieldStorage` 同样的结果:对于非文件字段,与键相关联的值是一个字符串列表,而非字节串。 (由 Pierre " +"Quentel 在 :issue:`29979` 中贡献。)" + +#: ../../whatsnew/3.7.rst:2311 +msgid "" +"Due to internal changes in :mod:`socket`, calling :func:`socket.fromshare` " +"on a socket created by :func:`socket.share ` in older " +"Python versions is not supported." +msgstr "" +"由于 :mod:`socket` 中的内部更改,在由旧版 Python 中的 :func:`socket.share " +"` 所创建的套接字上调用 :func:`socket.fromshare` 已不受支持。" + +#: ../../whatsnew/3.7.rst:2315 +msgid "" +"``repr`` for :exc:`BaseException` has changed to not include the trailing " +"comma. Most exceptions are affected by this change. (Contributed by Serhiy " +"Storchaka in :issue:`30399`.)" +msgstr "" +":exc:`BaseException` 的 ``repr`` 已更改为不包含末尾的逗号。 大多数异常都会受此更改影响。 (由 Serhiy " +"Storchaka 在 :issue:`30399` 中贡献。)" + +#: ../../whatsnew/3.7.rst:2319 +msgid "" +"``repr`` for :class:`datetime.timedelta` has changed to include the keyword " +"arguments in the output. (Contributed by Utkarsh Upadhyay in " +":issue:`30302`.)" +msgstr "" +":class:`datetime.timedelta` 的 ``repr`` 已更改为在输出中包含关键字参数。 (由 Utkarsh Upadhyay " +"在 :issue:`30302` 中贡献。)" + +#: ../../whatsnew/3.7.rst:2322 +msgid "" +"Because :func:`shutil.rmtree` is now implemented using the " +":func:`os.scandir` function, the user specified handler *onerror* is now " +"called with the first argument ``os.scandir`` instead of ``os.listdir`` when" +" listing the directory is failed." +msgstr "" +"因为 :func:`shutil.rmtree` 现在是使用 :func:`os.scandir` 函数实现的,用户指定的句柄 *onerror* " +"现在被调用时如果列目录失败会附带第一个参数 ``os.scandir`` 而不是 ``os.listdir``。" + +#: ../../whatsnew/3.7.rst:2327 +msgid "" +"Support for nested sets and set operations in regular expressions as in " +"`Unicode Technical Standard #18`_ might be added in the future. This would " +"change the syntax. To facilitate this future change a :exc:`FutureWarning` " +"will be raised in ambiguous cases for the time being. That include sets " +"starting with a literal ``'['`` or containing literal character sequences " +"``'--'``, ``'&&'``, ``'~~'``, and ``'||'``. To avoid a warning, escape them" +" with a backslash. (Contributed by Serhiy Storchaka in :issue:`30349`.)" +msgstr "" +"未来可能加入在正则表达式中对 `Unicode 技术标准 #18`_ 中嵌套集合与集合操作的支持。 这会改变现有语法。 " +"为了推动这项未来的改变,目前在有歧义的情况下会引发 :exc:`FutureWarning`。 这包括以字面值 ``'['`` 开头或包含字面值字符序列" +" ``'--'``, ``'&&'``, ``'~~'`` 以及 ``'||'`` 的集合。 要避免警告,请用反斜杠对其进行转义。 (由 Serhiy" +" Storchaka 在 :issue:`30349` 中贡献。)" + +#: ../../whatsnew/3.7.rst:2338 +msgid "" +"The result of splitting a string on a :mod:`regular expression ` that " +"could match an empty string has been changed. For example splitting on " +"``r'\\s*'`` will now split not only on whitespaces as it did previously, but" +" also on empty strings before all non-whitespace characters and just before " +"the end of the string. The previous behavior can be restored by changing the" +" pattern to ``r'\\s+'``. A :exc:`FutureWarning` was emitted for such " +"patterns since Python 3.5." +msgstr "" +"基于可以匹配空字符串的 :mod:`正则表达式 ` 对字符串进行拆分的结果已被更改。 例如基于 ``r'\\s*'`` " +"的拆分现在不仅会像原先那样拆分空格符,而且会拆分所有非空格字符之前和字符串结尾处的空字符串。 通过将模式修改为 ``r'\\s+'`` " +"可以恢复原先的行为。 自 Python 3.5 开始此类模式将会引发 :exc:`FutureWarning`。" + +#: ../../whatsnew/3.7.rst:2347 +msgid "" +"For patterns that match both empty and non-empty strings, the result of " +"searching for all matches may also be changed in other cases. For example " +"in the string ``'a\\n\\n'``, the pattern ``r'(?m)^\\s*?$'`` will not only " +"match empty strings at positions 2 and 3, but also the string ``'\\n'`` at " +"positions 2--3. To match only blank lines, the pattern should be rewritten " +"as ``r'(?m)^[^\\S\\n]*$'``." +msgstr "" +"对于同时匹配空字符串和非空字符串的模式,在其他情况下搜索所有匹配的结果也可能会被更改。 例如在字符串 ``'a\\n\\n'`` 中,模式 " +"``r'(?m)^\\s*?$'`` 将不仅会匹配位置 2 和 3 上的空字符串,还会匹配位置 2--3 上的字符串 ``'\\n'``。 " +"想要只匹配空行,模式应当改写为 ``r'(?m)^[^\\S\\n]*$'``。" + +#: ../../whatsnew/3.7.rst:2354 +msgid "" +":func:`re.sub()` now replaces empty matches adjacent to a previous non-empty" +" match. For example ``re.sub('x*', '-', 'abxd')`` returns now ``'-a-b--" +"d-'`` instead of ``'-a-b-d-'`` (the first minus between 'b' and 'd' replaces" +" 'x', and the second minus replaces an empty string between 'x' and 'd')." +msgstr "" +":func:`re.sub()` 现在会替换与前一个的非空匹配相邻的空匹配。 例如 ``re.sub('x*', '-', 'abxd')`` " +"现在会返回 ``'-a-b--d-'`` 而不是 ``'-a-b-d-'`` ('b' 和 'd' 之间的第一个减号是替换 'x',而第二个减号则是替换" +" 'x' 和 'd' 之间的空字符串)。" + +#: ../../whatsnew/3.7.rst:2360 +msgid "" +"(Contributed by Serhiy Storchaka in :issue:`25054` and :issue:`32308`.)" +msgstr "(由 Serhiy Storchaka 在 :issue:`25054` 和 :issue:`32308` 中贡献。)" + +#: ../../whatsnew/3.7.rst:2362 +msgid "" +"Change :func:`re.escape` to only escape regex special characters instead of " +"escaping all characters other than ASCII letters, numbers, and ``'_'``. " +"(Contributed by Serhiy Storchaka in :issue:`29995`.)" +msgstr "" +":func:`re.escape` 更改为只转义正则表达式特殊字符,而不转义 ASCII 字母、数字和 ``'_'`` 以外的所有字符。 (由 " +"Serhiy Storchaka 在 :issue:`29995` 中贡献。)" + +#: ../../whatsnew/3.7.rst:2366 +msgid "" +":class:`tracemalloc.Traceback` frames are now sorted from oldest to most " +"recent to be more consistent with :mod:`traceback`. (Contributed by Jesse " +"Bakker in :issue:`32121`.)" +msgstr "" +":class:`tracemalloc.Traceback` 帧现在是按从最旧到最新排序,以便与 :mod:`traceback` 更为一致。 (由 " +"Jesse Bakker 在 :issue:`32121` 中贡献。)" + +#: ../../whatsnew/3.7.rst:2370 +msgid "" +"On OSes that support :const:`socket.SOCK_NONBLOCK` or " +":const:`socket.SOCK_CLOEXEC` bit flags, the :attr:`socket.type " +"` no longer has them applied. Therefore, checks like " +"``if sock.type == socket.SOCK_STREAM`` work as expected on all platforms. " +"(Contributed by Yury Selivanov in :issue:`32331`.)" +msgstr "" +"在支持 :const:`socket.SOCK_NONBLOCK` 或 :const:`socket.SOCK_CLOEXEC` " +"标志位的操作系统上,:attr:`socket.type ` 不再应用它们。 因此,像 ``if " +"sock.type == socket.SOCK_STREAM`` 之类的检测会在所有平台上按预期的方式工作。 (由 Yury Selivanov 在 " +":issue:`32331` 中贡献。)" + +#: ../../whatsnew/3.7.rst:2377 +msgid "" +"On Windows the default for the *close_fds* argument of " +":class:`subprocess.Popen` was changed from :const:`False` to :const:`True` " +"when redirecting the standard handles. If you previously depended on handles" +" being inherited when using :class:`subprocess.Popen` with standard io " +"redirection, you will have to pass ``close_fds=False`` to preserve the " +"previous behaviour, or use :attr:`STARTUPINFO.lpAttributeList " +"`." +msgstr "" +"在 Windows 上当重定向标准句柄时,:class:`subprocess.Popen` 的 *close_fds* 参数的默认值从 " +":const:`False` 更改为 :const:`True`。 如果你以前依赖于在使用带有标准 io 重定向的 " +":class:`subprocess.Popen` 时所继承的句柄,则必须传入 ``close_fds=False`` 以保留原先的行为,或是使用 " +":attr:`STARTUPINFO.lpAttributeList " +"`。" + +#: ../../whatsnew/3.7.rst:2385 +msgid "" +":meth:`importlib.machinery.PathFinder.invalidate_caches` -- which implicitly" +" affects :func:`importlib.invalidate_caches` -- now deletes entries in " +":data:`sys.path_importer_cache` which are set to ``None``. (Contributed by " +"Brett Cannon in :issue:`33169`.)" +msgstr "" +":meth:`importlib.machinery.PathFinder.invalidate_caches` -- 此方法隐式地影响 " +":func:`importlib.invalidate_caches` -- 现在会删除 :data:`sys.path_importer_cache`" +" 中被设为 ``None`` 的条目。 (由 Brett Cannon 在 :issue:`33169` 中贡献。)" + +#: ../../whatsnew/3.7.rst:2390 +msgid "" +"In :mod:`asyncio`, :meth:`loop.sock_recv() `, " +":meth:`loop.sock_sendall() `, " +":meth:`loop.sock_accept() `, " +":meth:`loop.getaddrinfo() `, " +":meth:`loop.getnameinfo() ` have been changed to " +"be proper coroutine methods to match their documentation. Previously, these" +" methods returned :class:`asyncio.Future` instances. (Contributed by Yury " +"Selivanov in :issue:`32327`.)" +msgstr "" +"在 :mod:`asyncio` 中,:meth:`loop.sock_recv() `, " +":meth:`loop.sock_sendall() `, " +":meth:`loop.sock_accept() `, " +":meth:`loop.getaddrinfo() `, " +":meth:`loop.getnameinfo() ` " +"已被更改为正确的协程方法以与培训五日文档相匹配。 之前,这些方法会返回 :class:`asyncio.Future` 实例。 (由 Yury " +"Selivanov 在 :issue:`32327` 中贡献。)" + +#: ../../whatsnew/3.7.rst:2401 +msgid "" +":attr:`asyncio.Server.sockets` now returns a copy of the internal list of " +"server sockets, instead of returning it directly. (Contributed by Yury " +"Selivanov in :issue:`32662`.)" +msgstr "" +":attr:`asyncio.Server.sockets` 现在会返回服务器套接字列表的副本,而不是直接地返回它。 (由 Yury Selivanov" +" 在 :issue:`32662` 中贡献。)" + +#: ../../whatsnew/3.7.rst:2405 +msgid "" +":attr:`Struct.format ` is now a :class:`str` instance " +"instead of a :class:`bytes` instance. (Contributed by Victor Stinner in " +":issue:`21071`.)" +msgstr "" +":attr:`Struct.format ` 现在是一个 :class:`str` 实例而非 " +":class:`bytes` 实例。 (由 Victor Stinner 在 :issue:`21071` 中贡献。)" + +#: ../../whatsnew/3.7.rst:2409 +msgid "" +":mod:`argparse` subparsers can now be made mandatory by passing " +"``required=True`` to :meth:`ArgumentParser.add_subparsers() " +"`. (Contributed by Anthony Sottile " +"in :issue:`26510`.)" +msgstr "" +"现在可以通过将 ``required=True`` 传给 :meth:`ArgumentParser.add_subparsers() " +"` 使得 :mod:`argparse` 子解析器成为必需的。 (由 " +"Anthony Sottile 在 :issue:`26510` 中贡献。)" + +#: ../../whatsnew/3.7.rst:2413 +msgid "" +":meth:`ast.literal_eval()` is now stricter. Addition and subtraction of " +"arbitrary numbers are no longer allowed. (Contributed by Serhiy Storchaka in" +" :issue:`31778`.)" +msgstr "" +":meth:`ast.literal_eval()` 现在更为严格。 任意地加减数字已不再被允许。 (由 Serhiy Storchaka 在 " +":issue:`31778` 中贡献。)" + +#: ../../whatsnew/3.7.rst:2417 +msgid "" +":meth:`Calendar.itermonthdates ` will now " +"consistently raise an exception when a date falls outside of the " +"``0001-01-01`` through ``9999-12-31`` range. To support applications that " +"cannot tolerate such exceptions, the new :meth:`Calendar.itermonthdays3 " +"` and :meth:`Calendar.itermonthdays4 " +"` can be used. The new methods return " +"tuples and are not restricted by the range supported by " +":class:`datetime.date`. (Contributed by Alexander Belopolsky in " +":issue:`28292`.)" +msgstr "" +"当一个日期超出 ``0001-01-01`` 到 ``9999-12-31`` 范围时 :meth:`Calendar.itermonthdates " +"` 现在将始终如一地引发异常,以便支持不能容忍此类异常的应用程序,可以使用新增的 " +":meth:`Calendar.itermonthdays3 ` 和 " +":meth:`Calendar.itermonthdays4 `。 " +"这些新方法返回元组,并且其不受 :class:`datetime.date` 所支持的范围限制。 (由 Alexander Belopolsky 在 " +":issue:`28292` 中贡献。)" + +#: ../../whatsnew/3.7.rst:2427 +msgid "" +":class:`collections.ChainMap` now preserves the order of the underlying " +"mappings. (Contributed by Raymond Hettinger in :issue:`32792`.)" +msgstr "" +":class:`collections.ChainMap` 现在会保留底层映射的顺序。 (由 Raymond Hettinger 在 " +":issue:`32792` 中贡献。)" + +#: ../../whatsnew/3.7.rst:2430 +msgid "" +"The ``submit()`` method of :class:`concurrent.futures.ThreadPoolExecutor` " +"and :class:`concurrent.futures.ProcessPoolExecutor` now raises a " +":exc:`RuntimeError` if called during interpreter shutdown. (Contributed by " +"Mark Nemec in :issue:`33097`.)" +msgstr "" +"如果在解释器关闭期间被调用,:class:`concurrent.futures.ThreadPoolExecutor` 和 " +":class:`concurrent.futures.ProcessPoolExecutor` 的 ``submit()`` 方法现在会引发 " +":exc:`RuntimeError`。 (由 Mark Nemec 在 :issue:`33097` 中贡献。)" + +#: ../../whatsnew/3.7.rst:2435 +msgid "" +"The :class:`configparser.ConfigParser` constructor now uses ``read_dict()`` " +"to process the default values, making its behavior consistent with the rest " +"of the parser. Non-string keys and values in the defaults dictionary are " +"now being implicitly converted to strings. (Contributed by James Tocknell in" +" :issue:`23835`.)" +msgstr "" +":class:`configparser.ConfigParser` 构造器现在使用 ``read_dict()`` " +"来处理默认值,以使其行为与解析器的其余部分保持致。 在默认字典中的非字符串键和值现在会被隐式地转换为字符串。 (由 James Tocknell 在 " +":issue:`23835` 中贡献。)" + +#: ../../whatsnew/3.7.rst:2441 +msgid "" +"Several undocumented internal imports were removed. One example is that " +"``os.errno`` is no longer available; use ``import errno`` directly instead. " +"Note that such undocumented internal imports may be removed any time without" +" notice, even in micro version releases." +msgstr "" +"一些未写入文档的内部导入已被移除。 一个例子是 ``os.errno`` 已不再可用;应改为直接使用 ``import errno``。 " +"请注意此类未写入文档的内部导入可能未经通知地随时被移除,甚至是在微版本号发行版中移除。" + +#: ../../whatsnew/3.7.rst:2449 +msgid "Changes in the C API" +msgstr "C API 中的改变" + +#: ../../whatsnew/3.7.rst:2451 +msgid "" +"The function :c:func:`PySlice_GetIndicesEx` is considered unsafe for " +"resizable sequences. If the slice indices are not instances of " +":class:`int`, but objects that implement the :meth:`!__index__` method, the " +"sequence can be resized after passing its length to " +":c:func:`!PySlice_GetIndicesEx`. This can lead to returning indices out of " +"the length of the sequence. For avoiding possible problems use new " +"functions :c:func:`PySlice_Unpack` and :c:func:`PySlice_AdjustIndices`. " +"(Contributed by Serhiy Storchaka in :issue:`27867`.)" +msgstr "" +"函数 :c:func:`PySlice_GetIndicesEx` 被认为对于大小可变的序列来说并不安全。 如果切片索引不是 :class:`int` " +"的实例,而是实现了 :meth:`!__index__` 方法的对象,则序列可以在其长度被传给 " +":c:func:`!PySlice_GetIndicesEx` 之后调整大小。 这可能导致返回超出序列长度的索引号。 " +"为了避免可能的问题,请使用新增的函数 :c:func:`PySlice_Unpack` 和 " +":c:func:`PySlice_AdjustIndices`。 (由 Serhiy Storchaka 在 :issue:`27867` 中贡献。)" + +#: ../../whatsnew/3.7.rst:2462 +msgid "CPython bytecode changes" +msgstr "CPython 字节码的改变" + +#: ../../whatsnew/3.7.rst:2464 +msgid "" +"There are two new opcodes: :opcode:`LOAD_METHOD` and :opcode:`CALL_METHOD`. " +"(Contributed by Yury Selivanov and INADA Naoki in :issue:`26110`.)" +msgstr "" +"新增了两个操作码: :opcode:`LOAD_METHOD` 和 :opcode:`CALL_METHOD`。 (由 Yury Selivanov 和" +" INADA Naoki 在 :issue:`26110` 中贡献。)" + +#: ../../whatsnew/3.7.rst:2467 +msgid "" +"The :opcode:`STORE_ANNOTATION` opcode has been removed. (Contributed by Mark" +" Shannon in :issue:`32550`.)" +msgstr "" +":opcode:`STORE_ANNOTATION` 操作码已被移除。 (由 Mark Shannon 在 :issue:`32550` 中贡献。)" + +#: ../../whatsnew/3.7.rst:2474 +msgid "" +"The file used to override :data:`sys.path` is now called ``._pth`` instead of ``'sys.path'``. See :ref:`finding_modules` for" +" more information. (Contributed by Steve Dower in :issue:`28137`.)" +msgstr "" +"用于重载 :data:`sys.path` 的文件现在命名为 ``._pth`` 而不是 " +"``'sys.path'``。 请参阅 :ref:`finding_modules` 了解更多信息。 (由 Steve Dower 在 " +":issue:`28137` 中贡献。)" + +#: ../../whatsnew/3.7.rst:2481 +msgid "Other CPython implementation changes" +msgstr "其他 CPython 实现的改变" + +#: ../../whatsnew/3.7.rst:2483 +msgid "" +"In preparation for potential future changes to the public CPython runtime " +"initialization API (see :pep:`432` for an initial, but somewhat outdated, " +"draft), CPython's internal startup and configuration management logic has " +"been significantly refactored. While these updates are intended to be " +"entirely transparent to both embedding applications and users of the regular" +" CPython CLI, they're being mentioned here as the refactoring changes the " +"internal order of various operations during interpreter startup, and hence " +"may uncover previously latent defects, either in embedding applications, or " +"in CPython itself. (Initially contributed by Nick Coghlan and Eric Snow as " +"part of :issue:`22257`, and further updated by Nick, Eric, and Victor " +"Stinner in a number of other issues). Some known details affected:" +msgstr "" +"为了准备在未来对公开的 CPython 运行时初始化 API 进行潜在更改(请参阅 :pep:`432` 获取最初但略为过时的文稿),CPython " +"内部的启动和配置管理逻辑已经过大幅重构。 虽然这些更新旨在对嵌入式应用程序和常规的 CPython CLI " +"用户都完全透明,但它们在这里被提及是因为重构会改变解释器启动期间许多操作的内部顺序,因此可能提示出原先隐藏的缺陷,这可能存在于嵌入式应用程序中,或是在 " +"CPython 自身内部。 (最初由 Nick Coghlan 和 Eric Snow 作为 :issue:`22257` 的一部分贡献,并由 " +"Nick, Eric 和 Victor Stinner 在一系列其他问题报告中进一步更新)。 已知会受到影响的一些细节:" + +#: ../../whatsnew/3.7.rst:2496 +msgid "" +":c:func:`PySys_AddWarnOptionUnicode` is not currently usable by embedding " +"applications due to the requirement to create a Unicode object prior to " +"calling `Py_Initialize`. Use :c:func:`PySys_AddWarnOption` instead." +msgstr "" +":c:func:`PySys_AddWarnOptionUnicode` 目前对嵌入式应用程序不可用,因为在调用 `Py_Initialize` " +"之前需要创建 Unicode 对象。 请改用 :c:func:`PySys_AddWarnOption`。" + +#: ../../whatsnew/3.7.rst:2500 +msgid "" +"warnings filters added by an embedding application with " +":c:func:`PySys_AddWarnOption` should now more consistently take precedence " +"over the default filters set by the interpreter" +msgstr "" +"嵌入式应用程序通过 :c:func:`PySys_AddWarnOption` 所添加的警告过滤器现在应该以更高的一致性优先于由解释器所设置的默认过滤器" + +#: ../../whatsnew/3.7.rst:2504 +msgid "" +"Due to changes in the way the default warnings filters are configured, " +"setting :c:data:`Py_BytesWarningFlag` to a value greater than one is no " +"longer sufficient to both emit :exc:`BytesWarning` messages and have them " +"converted to exceptions. Instead, the flag must be set (to cause the " +"warnings to be emitted in the first place), and an explicit " +"``error::BytesWarning`` warnings filter added to convert them to exceptions." +msgstr "" +"由于默认警告过滤器的配置方式发生了变化,将 :c:data:`Py_BytesWarningFlag` 设置为大于一的值不再足以在发出 " +":exc:`BytesWarning` 消息的同时将其转换为异常。 而是改为必须设置旗标(以便首先发出警告),以及添加显式的 " +"``error::BytesWarning`` 警告过滤器来将其转换为异常。" + +#: ../../whatsnew/3.7.rst:2511 +msgid "" +"Due to a change in the way docstrings are handled by the compiler, the " +"implicit ``return None`` in a function body consisting solely of a docstring" +" is now marked as occurring on the same line as the docstring, not on the " +"function's header line." +msgstr "" +"由于编译器处理文档字符串的方式发生了变化,一个仅由文档字符串构成的函数体中隐式的 ``return None`` " +"现在被标记为在与文档字符串相同的行,而不是在函数的标题行。" + +#: ../../whatsnew/3.7.rst:2516 +msgid "" +"The current exception state has been moved from the frame object to the co-" +"routine. This simplified the interpreter and fixed a couple of obscure bugs " +"caused by having swap exception state when entering or exiting a generator. " +"(Contributed by Mark Shannon in :issue:`25612`.)" +msgstr "" +"当前异常状态已从帧对象移到协程对象。 这会简化解释器并修正由于在进入或退出生成器时具有交换异常状态而导致的一些模糊错误。 (由 Mark Shannon" +" 在 :issue:`25612` 中贡献。)" + +#: ../../whatsnew/3.7.rst:2522 +msgid "Notable changes in Python 3.7.1" +msgstr "Python 3.7.1 中的重要变化" + +#: ../../whatsnew/3.7.rst:2524 +msgid "" +"Starting in 3.7.1, :c:func:`Py_Initialize` now consistently reads and " +"respects all of the same environment settings as :c:func:`Py_Main` (in " +"earlier Python versions, it respected an ill-defined subset of those " +"environment variables, while in Python 3.7.0 it didn't read any of them due " +"to :issue:`34247`). If this behavior is unwanted, set " +":c:data:`Py_IgnoreEnvironmentFlag` to 1 before calling " +":c:func:`Py_Initialize`." +msgstr "" +"从 3.7.1 开始,:c:func:`Py_Initialize` 现在始终会读取并遵循与 :c:func:`Py_Main` " +"相同的环境设置(在更早的 Python 版本中,它会遵循一个错误定义的环境变量子集,而在 Python 3.7.0 中则会由于 " +":issue:`34247` 而完全不读取它们)。 如果不想要此行为,请在调用 :c:func:`Py_Initialize` 之前将 " +":c:data:`Py_IgnoreEnvironmentFlag` 设为 1。" + +#: ../../whatsnew/3.7.rst:2531 +msgid "" +"In 3.7.1 the C API for Context Variables :ref:`was updated " +"` to use :c:type:`PyObject` pointers." +" See also :issue:`34762`." +msgstr "" +"在 3.7.1 中,上下文变量的 C API 已 :ref:`获得更新 `" +" 以使用 :c:type:`PyObject` 指针。 另请参阅 :issue:`34762`。" + +#: ../../whatsnew/3.7.rst:2535 +msgid "" +"In 3.7.1 the :mod:`tokenize` module now implicitly emits a ``NEWLINE`` token" +" when provided with input that does not have a trailing new line. This " +"behavior now matches what the C tokenizer does internally. (Contributed by " +"Ammar Askar in :issue:`33899`.)" +msgstr "" +"在 3.7.1 中,当提供不带末尾新行的输入时 :mod:`tokenize` 模块现在会隐式地添加 ``NEWLINE`` 形符。 此行为现在已与 C" +" 词法分析器的内部行为相匹配。 (由 Ammar Askar 在 :issue:`33899` 中贡献。)" + +#: ../../whatsnew/3.7.rst:2541 +msgid "Notable changes in Python 3.7.2" +msgstr "Python 3.7.2 中的重要变化" + +#: ../../whatsnew/3.7.rst:2543 +msgid "" +"In 3.7.2, :mod:`venv` on Windows no longer copies the original binaries, but" +" creates redirector scripts named ``python.exe`` and ``pythonw.exe`` " +"instead. This resolves a long standing issue where all virtual environments " +"would have to be upgraded or recreated with each Python update. However, " +"note that this release will still require recreation of virtual environments" +" in order to get the new scripts." +msgstr "" +"在 3.7.2 中,Windows 下的 :mod:`venv` 不再复制原来的二进制文件,而是改为创建名为 ``python.exe`` 和 " +"``pythonw.exe`` 的重定向脚本。 这解决了一个长期存在的问题,即所有虚拟环境在每次 Python 升级后都必须进行升级或是重新创建。 " +"然而,要注意此发布版仍然要求重新创建虚拟环境以获得新的脚本。" + +#: ../../whatsnew/3.7.rst:2551 +msgid "Notable changes in Python 3.7.6" +msgstr "Python 3.7.6 中的重要变化" + +#: ../../whatsnew/3.7.rst:2553 +msgid "" +"Due to significant security concerns, the *reuse_address* parameter of " +":meth:`asyncio.loop.create_datagram_endpoint` is no longer supported. This " +"is because of the behavior of the socket option ``SO_REUSEADDR`` in UDP. For" +" more details, see the documentation for " +"``loop.create_datagram_endpoint()``. (Contributed by Kyle Stanley, Antoine " +"Pitrou, and Yury Selivanov in :issue:`37228`.)" +msgstr "" +"出于重要的安全性考量,:meth:`asyncio.loop.create_datagram_endpoint` 的 *reuse_address* " +"形参不再被支持。 这是由 UDP 中的套接字选项 ``SO_REUSEADDR`` 的行为导致的。 更多细节请参阅 " +"``loop.create_datagram_endpoint()`` 的文档。 (由 Kyle Stanley, Antoine Pitrou 和 " +"Yury Selivanov 在 :issue:`37228` 中贡献。。)" + +#: ../../whatsnew/3.7.rst:2561 +msgid "Notable changes in Python 3.7.10" +msgstr "Python 3.7.10 中的重要变化" + +#: ../../whatsnew/3.7.rst:2563 +msgid "" +"Earlier Python versions allowed using both ``;`` and ``&`` as query " +"parameter separators in :func:`urllib.parse.parse_qs` and " +":func:`urllib.parse.parse_qsl`. Due to security concerns, and to conform " +"with newer W3C recommendations, this has been changed to allow only a single" +" separator key, with ``&`` as the default. This change also affects " +":func:`cgi.parse` and :func:`cgi.parse_multipart` as they use the affected " +"functions internally. For more details, please see their respective " +"documentation. (Contributed by Adam Goldschmidt, Senthil Kumaran and Ken Jin" +" in :issue:`42967`.)" +msgstr "" +"早先的 Python 版本允许使用 ``;`` 和 ``&`` 作为 :func:`urllib.parse.parse_qs` 和 " +":func:`urllib.parse.parse_qsl` 中 query 形参的分隔键。 出于安全考虑,也为了遵循更新的 W3C " +"推荐设置,这已被改为只允许单个分隔键,默认为 ``&``。 这一改变还会影响 :func:`cgi.parse` 和 " +":func:`cgi.parse_multipart` 因为它们在内部使用了受影响的函数。 要了解更多细节,请查看它们各自的文档。 (由 Adam " +"Goldschmidt, Senthil Kumaran 和 Ken Jin 在 :issue:`42967` 中贡献。)" diff --git a/whatsnew/3.8.po b/whatsnew/3.8.po new file mode 100644 index 000000000..eb07e0bc6 --- /dev/null +++ b/whatsnew/3.8.po @@ -0,0 +1,3584 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) 2001-2025, Python Software Foundation +# This file is distributed under the same license as the Python package. +# FIRST AUTHOR , YEAR. +# +# Translators: +# Alpha Du , 2019 +# jacky , 2019 +# Kaizhao Zhang , 2019 +# Han YANG , 2019 +# 汇民 王 , 2019 +# ppcfish , 2019 +# Freesand Leo , 2023 +# Rafael Fontenelle , 2025 +# +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: Python 3.9\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2025-02-07 16:40+0000\n" +"PO-Revision-Date: 2019-09-01 14:44+0000\n" +"Last-Translator: Rafael Fontenelle , 2025\n" +"Language-Team: Chinese (China) (https://app.transifex.com/python-doc/teams/5390/zh_CN/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: zh_CN\n" +"Plural-Forms: nplurals=1; plural=0;\n" + +#: ../../whatsnew/3.8.rst:3 +msgid "What's New In Python 3.8" +msgstr "Python 3.8 有什么新变化" + +#: ../../whatsnew/3.8.rst:0 +msgid "Editor" +msgstr "编者" + +#: ../../whatsnew/3.8.rst:45 +msgid "Raymond Hettinger" +msgstr "Raymond Hettinger(译者:wh2099 at outlook dot com)" + +#: ../../whatsnew/3.8.rst:47 +msgid "" +"This article explains the new features in Python 3.8, compared to 3.7. For " +"full details, see the :ref:`changelog `." +msgstr "本文解释了 Python 3.8 相比 3.7 的新增特性。 完整的详情可参阅 :ref:`更新日志 `。" + +#: ../../whatsnew/3.8.rst:60 +msgid "Summary -- Release highlights" +msgstr "摘要 -- 发布重点" + +#: ../../whatsnew/3.8.rst:71 +msgid "New Features" +msgstr "新的特性" + +#: ../../whatsnew/3.8.rst:74 +msgid "Assignment expressions" +msgstr "赋值表达式" + +#: ../../whatsnew/3.8.rst:76 +msgid "" +"There is new syntax ``:=`` that assigns values to variables as part of a " +"larger expression. It is affectionately known as \"the walrus operator\" due" +" to its resemblance to `the eyes and tusks of a walrus " +"`_." +msgstr "" +"新增的语法 ``:=`` 可在表达式内部为变量赋值。 它被昵称为“海象运算符”因为它很像是 `海象的眼睛和长牙 " +"`_。" + +#: ../../whatsnew/3.8.rst:81 +msgid "" +"In this example, the assignment expression helps avoid calling :func:`len` " +"twice::" +msgstr "在这个示例中,赋值表达式可以避免调用 :func:`len` 两次::" + +#: ../../whatsnew/3.8.rst:87 +msgid "" +"A similar benefit arises during regular expression matching where match " +"objects are needed twice, once to test whether a match occurred and another " +"to extract a subgroup::" +msgstr "类似的益处还可出现在正则表达式匹配中需要使用两次匹配对象的情况中,一次检测用于匹配是否发生,另一次用于提取子分组::" + +#: ../../whatsnew/3.8.rst:95 +msgid "" +"The operator is also useful with while-loops that compute a value to test " +"loop termination and then need that same value again in the body of the " +"loop::" +msgstr "此运算符也适用于配合 while 循环计算一个值来检测循环是否终止,而同一个值又在循环体中再次被使用的情况::" + +#: ../../whatsnew/3.8.rst:103 +msgid "" +"Another motivating use case arises in list comprehensions where a value " +"computed in a filtering condition is also needed in the expression body::" +msgstr "另一个值得介绍的用例出现于列表推导式中,在筛选条件中计算一个值,而同一个值又在表达式中需要被使用::" + +#: ../../whatsnew/3.8.rst:110 +msgid "" +"Try to limit use of the walrus operator to clean cases that reduce " +"complexity and improve readability." +msgstr "请尽量将海象运算符的使用限制在清晰的场合中,以降低复杂性并提升可读性。" + +#: ../../whatsnew/3.8.rst:113 +msgid "See :pep:`572` for a full description." +msgstr "请参阅 :pep:`572` 了解详情。" + +#: ../../whatsnew/3.8.rst:115 +msgid "(Contributed by Emily Morehouse in :issue:`35224`.)" +msgstr "(由 Morehouse 在 :issue:`35224` 中贡献。)" + +#: ../../whatsnew/3.8.rst:119 +msgid "Positional-only parameters" +msgstr "仅限位置形参" + +#: ../../whatsnew/3.8.rst:121 +msgid "" +"There is a new function parameter syntax ``/`` to indicate that some " +"function parameters must be specified positionally and cannot be used as " +"keyword arguments. This is the same notation shown by ``help()`` for C " +"functions annotated with Larry Hastings' `Argument Clinic " +"`_ tool." +msgstr "" +"新增了一个函数形参语法 ``/`` 用来指明某些函数形参必须使用仅限位置而非关键字参数的形式。 这种标记语法与通过 ``help()`` 所显示的使用 " +"Larry Hastings 的 `Argument Clinic " +"`_ 工具标记的 C 函数相同。" + +#: ../../whatsnew/3.8.rst:127 +msgid "" +"In the following example, parameters *a* and *b* are positional-only, while " +"*c* or *d* can be positional or keyword, and *e* or *f* are required to be " +"keywords::" +msgstr "" +"在下面的例子中,形参 *a* 和 *b* 为仅限位置形参,*c* 或 *d* 可以是位置形参或关键字形参,而 *e* 或 *f* 要求为关键字形参::" + +#: ../../whatsnew/3.8.rst:134 +msgid "The following is a valid call::" +msgstr "以下均为合法的调用::" + +#: ../../whatsnew/3.8.rst:138 +msgid "However, these are invalid calls::" +msgstr "但是,以下均为不合法的调用::" + +#: ../../whatsnew/3.8.rst:143 +msgid "" +"One use case for this notation is that it allows pure Python functions to " +"fully emulate behaviors of existing C coded functions. For example, the " +"built-in :func:`divmod` function does not accept keyword arguments::" +msgstr "" +"这种标记形式的一个用例是它允许纯 Python 函数完整模拟现有的用 C 代码编写的函数的行为。 例如,内置的 :func:`divmod` " +"函数不接受关键字参数::" + +#: ../../whatsnew/3.8.rst:151 +msgid "" +"Another use case is to preclude keyword arguments when the parameter name is" +" not helpful. For example, the builtin :func:`len` function has the " +"signature ``len(obj, /)``. This precludes awkward calls such as::" +msgstr "" +"另一个用例是在不需要形参名称时排除关键字参数。 例如,内置的 :func:`len` 函数的签名为 ``len(obj, /)``。 " +"这可以排除如下这种笨拙的调用形式::" + +#: ../../whatsnew/3.8.rst:157 +msgid "" +"A further benefit of marking a parameter as positional-only is that it " +"allows the parameter name to be changed in the future without risk of " +"breaking client code. For example, in the :mod:`statistics` module, the " +"parameter name *dist* may be changed in the future. This was made possible " +"with the following function specification::" +msgstr "" +"另一个益处是将形参标记为仅限位置形参将允许在未来修改形参名而不会破坏客户的代码。 例如,在 :mod:`statistics` 模块中,形参名 " +"*dist* 在未来可能被修改。 这使得以下函数描述成为可能::" + +#: ../../whatsnew/3.8.rst:166 +msgid "" +"Since the parameters to the left of ``/`` are not exposed as possible " +"keywords, the parameters names remain available for use in ``**kwargs``::" +msgstr "由于在 ``/`` 左侧的形参不会被公开为可用关键字,其他形参名仍可在 ``**kwargs`` 中使用::" + +#: ../../whatsnew/3.8.rst:175 +msgid "" +"This greatly simplifies the implementation of functions and methods that " +"need to accept arbitrary keyword arguments. For example, here is an excerpt" +" from code in the :mod:`collections` module::" +msgstr "这极大地简化了需要接受任意关键字参数的函数和方法的实现。 例如,以下是一段摘自 :mod:`collections` 模块的代码::" + +#: ../../whatsnew/3.8.rst:184 +msgid "See :pep:`570` for a full description." +msgstr "请参阅 :pep:`570` 了解详情。" + +#: ../../whatsnew/3.8.rst:186 +msgid "(Contributed by Pablo Galindo in :issue:`36540`.)" +msgstr "(由 Pablo Galindo 在 :issue:`36540` 中贡献。)" + +#: ../../whatsnew/3.8.rst:192 +msgid "Parallel filesystem cache for compiled bytecode files" +msgstr "用于已编译字节码文件的并行文件系统缓存" + +#: ../../whatsnew/3.8.rst:194 +msgid "" +"The new :envvar:`PYTHONPYCACHEPREFIX` setting (also available as " +":option:`-X` ``pycache_prefix``) configures the implicit bytecode cache to " +"use a separate parallel filesystem tree, rather than the default " +"``__pycache__`` subdirectories within each source directory." +msgstr "" +"新增的 :envvar:`PYTHONPYCACHEPREFIX` 设置 (也可使用 :option:`-X` ``pycache_prefix``) " +"可将隐式的字节码缓存配置为使用单独的并行文件系统树,而不是默认的每个源代码目录下的 ``__pycache__`` 子目录。" + +#: ../../whatsnew/3.8.rst:200 +msgid "" +"The location of the cache is reported in :data:`sys.pycache_prefix` " +"(:const:`None` indicates the default location in ``__pycache__`` " +"subdirectories)." +msgstr "" +"缓存的位置会在 :data:`sys.pycache_prefix` 中报告 (:const:`None` 表示默认位置即 " +"``__pycache__`` 子目录)。" + +#: ../../whatsnew/3.8.rst:204 +msgid "(Contributed by Carl Meyer in :issue:`33499`.)" +msgstr "(由 Carl Meyer 在 :issue:`33499` 中贡献。)" + +#: ../../whatsnew/3.8.rst:208 +msgid "Debug build uses the same ABI as release build" +msgstr "调试构建使用与发布构建相同的 ABI" + +#: ../../whatsnew/3.8.rst:210 +msgid "" +"Python now uses the same ABI whether it's built in release or debug mode. On" +" Unix, when Python is built in debug mode, it is now possible to load C " +"extensions built in release mode and C extensions built using the stable " +"ABI." +msgstr "" +"Python 现在不论是以发布模式还是调试模式进行构建都将使用相同的 ABI。 在 Unix 上,当 Python " +"以调试模式构建时,现在将可以加载以发布模式构建的 C 扩展和使用稳定版 ABI 构建的 C 扩展。" + +#: ../../whatsnew/3.8.rst:214 +msgid "" +"Release builds and debug builds are now ABI compatible: defining the " +"``Py_DEBUG`` macro no longer implies the ``Py_TRACE_REFS`` macro, which " +"introduces the only ABI incompatibility. The ``Py_TRACE_REFS`` macro, which " +"adds the :func:`sys.getobjects` function and the :envvar:`PYTHONDUMPREFS` " +"environment variable, can be set using the new ``./configure --with-trace-" +"refs`` build option. (Contributed by Victor Stinner in :issue:`36465`.)" +msgstr "" +"发布构建和调试构建现在都是 ABI 兼容的:定义 ``Py_DEBUG`` 宏不会再启用 ``Py_TRACE_REFS`` 宏,它引入了唯一的 ABI" +" 不兼容性。 ``Py_TRACE_REFS`` 宏添加了 :func:`sys.getobjects` 函数和 " +":envvar:`PYTHONDUMPREFS` 环境变量,它可以使用新的 ``./configure --with-trace-refs`` " +"构建选项来设置。 (由 Victor Stinner 在 :issue:`36465` 中贡献。)" + +#: ../../whatsnew/3.8.rst:222 +msgid "" +"On Unix, C extensions are no longer linked to libpython except on Android " +"and Cygwin. It is now possible for a statically linked Python to load a C " +"extension built using a shared library Python. (Contributed by Victor " +"Stinner in :issue:`21536`.)" +msgstr "" +"在 Unix 上,C 扩展不会再被链接到 libpython,但 Android 和 Cygwin 例外。 现在静态链接的 Python " +"将可以加载使用共享库 Python 构建的 C 扩展。 (由 Victor Stinner 在 :issue:`21536` 中贡献。)" + +#: ../../whatsnew/3.8.rst:229 +msgid "" +"On Unix, when Python is built in debug mode, import now also looks for C " +"extensions compiled in release mode and for C extensions compiled with the " +"stable ABI. (Contributed by Victor Stinner in :issue:`36722`.)" +msgstr "" +"在 Unix 上,当 Python 以调试模式构建时,导入操作现在也会查找在发布模式下编译的 C 扩展以及使用稳定版 ABI 编译的 C 扩展。 (由 " +"Victor Stinner 在 :issue:`36722` 中贡献。)" + +#: ../../whatsnew/3.8.rst:234 +msgid "" +"To embed Python into an application, a new ``--embed`` option must be passed" +" to ``python3-config --libs --embed`` to get ``-lpython3.8`` (link the " +"application to libpython). To support both 3.8 and older, try " +"``python3-config --libs --embed`` first and fallback to ``python3-config " +"--libs`` (without ``--embed``) if the previous command fails." +msgstr "" +"要将 Python 嵌入到一个应用中,必须将新增的 ``--embed`` 选项传给 ``python3-config --libs --embed``" +" 以获得 ``-lpython3.8`` (将应用链接到 libpython)。 要同时支持 3.8 和旧版本,请先尝试 " +"``python3-config --libs --embed`` 并在此命令失败时回退到 ``python3-config --libs`` (即不带" +" ``--embed``)。" + +#: ../../whatsnew/3.8.rst:240 +msgid "" +"Add a pkg-config ``python-3.8-embed`` module to embed Python into an " +"application: ``pkg-config python-3.8-embed --libs`` includes " +"``-lpython3.8``. To support both 3.8 and older, try ``pkg-config " +"python-X.Y-embed --libs`` first and fallback to ``pkg-config python-X.Y " +"--libs`` (without ``--embed``) if the previous command fails (replace " +"``X.Y`` with the Python version)." +msgstr "" +"增加一个 pkg-config ``python-3.8-embed`` 模块用来将 Python 嵌入到一个应用中: ``pkg-config " +"python-3.8-embed --libs`` 包含 ``-lpython3.8``。 要同时支持 3.8 和旧版本,请先尝试 ``pkg-" +"config python-X.Y-embed --libs`` 并在此命令失败时回退到 ``pkg-config python-X.Y " +"--libs`` (即不带 ``--embed``) (请将 ``X.Y`` 替换为 Python 版本号)。" + +#: ../../whatsnew/3.8.rst:246 +msgid "" +"On the other hand, ``pkg-config python3.8 --libs`` no longer contains " +"``-lpython3.8``. C extensions must not be linked to libpython (except on " +"Android and Cygwin, whose cases are handled by the script); this change is " +"backward incompatible on purpose. (Contributed by Victor Stinner in " +":issue:`36721`.)" +msgstr "" +"另一方面,``pkg-config python3.8 --libs`` 不再包含 ``-lpython3.8``。 C 扩展不可被链接到 " +"libpython (但 Android 和 Cygwin 例外,这两者的情况由脚本处理);此改变是故意被设为向下不兼容的。 (由 Victor " +"Stinner 在 :issue:`36721` 中贡献。)" + +#: ../../whatsnew/3.8.rst:254 +msgid "f-strings support ``=`` for self-documenting expressions and debugging" +msgstr "f-字符串支持 ``=`` 用于自动记录表达式和调试文档" + +#: ../../whatsnew/3.8.rst:256 +msgid "" +"Added an ``=`` specifier to :term:`f-string`\\s. An f-string such as " +"``f'{expr=}'`` will expand to the text of the expression, an equal sign, " +"then the representation of the evaluated expression. For example:" +msgstr "" +"增加 ``=`` 说明符用于 :term:`f-string`。 形式为 ``f'{expr=}'`` 的 " +"f-字符串将扩展表示为表达式文本,加一个等于号,再加表达式的求值结果。 例如:" + +#: ../../whatsnew/3.8.rst:265 +msgid "" +"The usual :ref:`f-string format specifiers ` allow more control " +"over how the result of the expression is displayed::" +msgstr "通常的 :ref:`f-字符串格式说明符 ` 允许更细致地控制所要显示的表达式结果::" + +#: ../../whatsnew/3.8.rst:272 +msgid "" +"The ``=`` specifier will display the whole expression so that calculations " +"can be shown::" +msgstr "``=`` 说明符将输出整个表达式,以便详细演示计算过程::" + +#: ../../whatsnew/3.8.rst:278 +msgid "(Contributed by Eric V. Smith and Larry Hastings in :issue:`36817`.)" +msgstr "(由 Eric V. Smith 和 Larry Hastings 在 :issue:`36817` 中贡献。)" + +#: ../../whatsnew/3.8.rst:282 +msgid "PEP 578: Python Runtime Audit Hooks" +msgstr "PEP 578: Python 运行时审核钩子" + +#: ../../whatsnew/3.8.rst:284 +msgid "" +"The PEP adds an Audit Hook and Verified Open Hook. Both are available from " +"Python and native code, allowing applications and frameworks written in pure" +" Python code to take advantage of extra notifications, while also allowing " +"embedders or system administrators to deploy builds of Python where auditing" +" is always enabled." +msgstr "" +"此 PEP 添加了审核钩子和已验证开放钩子。 两者在 Python 与本机代码中均可用。允许以纯 Python " +"代码编写的应用和框架利用额外的通知,同时允许嵌入开发人员或系统管理员部署始终启用审核的 Python 版本。" + +#: ../../whatsnew/3.8.rst:290 +msgid "See :pep:`578` for full details." +msgstr "请参阅 :pep:`578` 了解详情。" + +#: ../../whatsnew/3.8.rst:294 +msgid "PEP 587: Python Initialization Configuration" +msgstr "PEP 587: Python 初始化配置" + +#: ../../whatsnew/3.8.rst:296 +msgid "" +"The :pep:`587` adds a new C API to configure the Python Initialization " +"providing finer control on the whole configuration and better error " +"reporting." +msgstr ":pep:`587` 增加了一个新的 C API 用来配置 Python 初始化,提供对整个配置过程的更细致控制以及更好的错误报告。" + +#: ../../whatsnew/3.8.rst:299 +msgid "New structures:" +msgstr "新的结构:" + +#: ../../whatsnew/3.8.rst:301 +msgid ":c:type:`PyConfig`" +msgstr ":c:type:`PyConfig`" + +#: ../../whatsnew/3.8.rst:302 +msgid ":c:type:`PyPreConfig`" +msgstr ":c:type:`PyPreConfig`" + +#: ../../whatsnew/3.8.rst:303 +msgid ":c:type:`PyStatus`" +msgstr ":c:type:`PyStatus`" + +#: ../../whatsnew/3.8.rst:304 +msgid ":c:type:`PyWideStringList`" +msgstr ":c:type:`PyWideStringList`" + +#: ../../whatsnew/3.8.rst:306 +msgid "New functions:" +msgstr "新的函数:" + +#: ../../whatsnew/3.8.rst:308 +msgid ":c:func:`PyConfig_Clear`" +msgstr ":c:func:`PyConfig_Clear`" + +#: ../../whatsnew/3.8.rst:309 +msgid ":c:func:`PyConfig_InitIsolatedConfig`" +msgstr ":c:func:`PyConfig_InitIsolatedConfig`" + +#: ../../whatsnew/3.8.rst:310 +msgid ":c:func:`PyConfig_InitPythonConfig`" +msgstr ":c:func:`PyConfig_InitPythonConfig`" + +#: ../../whatsnew/3.8.rst:311 +msgid ":c:func:`PyConfig_Read`" +msgstr ":c:func:`PyConfig_Read`" + +#: ../../whatsnew/3.8.rst:312 +msgid ":c:func:`PyConfig_SetArgv`" +msgstr ":c:func:`PyConfig_SetArgv`" + +#: ../../whatsnew/3.8.rst:313 +msgid ":c:func:`PyConfig_SetBytesArgv`" +msgstr ":c:func:`PyConfig_SetBytesArgv`" + +#: ../../whatsnew/3.8.rst:314 +msgid ":c:func:`PyConfig_SetBytesString`" +msgstr ":c:func:`PyConfig_SetBytesString`" + +#: ../../whatsnew/3.8.rst:315 +msgid ":c:func:`PyConfig_SetString`" +msgstr ":c:func:`PyConfig_SetString`" + +#: ../../whatsnew/3.8.rst:316 +msgid ":c:func:`PyPreConfig_InitIsolatedConfig`" +msgstr ":c:func:`PyPreConfig_InitIsolatedConfig`" + +#: ../../whatsnew/3.8.rst:317 +msgid ":c:func:`PyPreConfig_InitPythonConfig`" +msgstr ":c:func:`PyPreConfig_InitPythonConfig`" + +#: ../../whatsnew/3.8.rst:318 +msgid ":c:func:`PyStatus_Error`" +msgstr ":c:func:`PyStatus_Error`" + +#: ../../whatsnew/3.8.rst:319 +msgid ":c:func:`PyStatus_Exception`" +msgstr ":c:func:`PyStatus_Exception`" + +#: ../../whatsnew/3.8.rst:320 +msgid ":c:func:`PyStatus_Exit`" +msgstr ":c:func:`PyStatus_Exit`" + +#: ../../whatsnew/3.8.rst:321 +msgid ":c:func:`PyStatus_IsError`" +msgstr ":c:func:`PyStatus_IsError`" + +#: ../../whatsnew/3.8.rst:322 +msgid ":c:func:`PyStatus_IsExit`" +msgstr ":c:func:`PyStatus_IsExit`" + +#: ../../whatsnew/3.8.rst:323 +msgid ":c:func:`PyStatus_NoMemory`" +msgstr ":c:func:`PyStatus_NoMemory`" + +#: ../../whatsnew/3.8.rst:324 +msgid ":c:func:`PyStatus_Ok`" +msgstr ":c:func:`PyStatus_Ok`" + +#: ../../whatsnew/3.8.rst:325 +msgid ":c:func:`PyWideStringList_Append`" +msgstr ":c:func:`PyWideStringList_Append`" + +#: ../../whatsnew/3.8.rst:326 +msgid ":c:func:`PyWideStringList_Insert`" +msgstr ":c:func:`PyWideStringList_Insert`" + +#: ../../whatsnew/3.8.rst:327 +msgid ":c:func:`Py_BytesMain`" +msgstr ":c:func:`Py_BytesMain`" + +#: ../../whatsnew/3.8.rst:328 +msgid ":c:func:`Py_ExitStatusException`" +msgstr ":c:func:`Py_ExitStatusException`" + +#: ../../whatsnew/3.8.rst:329 +msgid ":c:func:`Py_InitializeFromConfig`" +msgstr ":c:func:`Py_InitializeFromConfig`" + +#: ../../whatsnew/3.8.rst:330 +msgid ":c:func:`Py_PreInitialize`" +msgstr ":c:func:`Py_PreInitialize`" + +#: ../../whatsnew/3.8.rst:331 +msgid ":c:func:`Py_PreInitializeFromArgs`" +msgstr ":c:func:`Py_PreInitializeFromArgs`" + +#: ../../whatsnew/3.8.rst:332 +msgid ":c:func:`Py_PreInitializeFromBytesArgs`" +msgstr ":c:func:`Py_PreInitializeFromBytesArgs`" + +#: ../../whatsnew/3.8.rst:333 +msgid ":c:func:`Py_RunMain`" +msgstr ":c:func:`Py_RunMain`" + +#: ../../whatsnew/3.8.rst:335 +msgid "" +"This PEP also adds ``_PyRuntimeState.preconfig`` (:c:type:`PyPreConfig` " +"type) and ``PyInterpreterState.config`` (:c:type:`PyConfig` type) fields to " +"these internal structures. ``PyInterpreterState.config`` becomes the new " +"reference configuration, replacing global configuration variables and other " +"private variables." +msgstr "" +"此 PEP 还为这些内部结构添加了 ``_PyRuntimeState.preconfig`` (:c:type:`PyPreConfig` 类型) 和" +" ``PyInterpreterState.config`` (:c:type:`PyConfig` 类型) 字段。 " +"``PyInterpreterState.config`` 成为新的引用配置,替代全局配置变量和其他私有变量。" + +#: ../../whatsnew/3.8.rst:341 +msgid "" +"See :ref:`Python Initialization Configuration ` for the " +"documentation." +msgstr "请参阅 :ref:`Python 初始化配置 ` 获取详细文档。" + +#: ../../whatsnew/3.8.rst:344 +msgid "See :pep:`587` for a full description." +msgstr "请参阅 :pep:`587` 了解详情。" + +#: ../../whatsnew/3.8.rst:346 +msgid "(Contributed by Victor Stinner in :issue:`36763`.)" +msgstr "(由 Victor Stinner 在 :issue:`36763` 中贡献。)" + +#: ../../whatsnew/3.8.rst:350 +msgid "PEP 590: Vectorcall: a fast calling protocol for CPython" +msgstr "PEP 590: Vectorcall: 用于 CPython 的快速调用协议" + +#: ../../whatsnew/3.8.rst:352 +msgid "" +":ref:`vectorcall` is added to the Python/C API. It is meant to formalize " +"existing optimizations which were already done for various classes. Any " +"static type implementing a callable can use this protocol." +msgstr "" +"将 :ref:`vectorcall` 添加到 Python/C API。 它的目标是对已被应用于许多类的现有优化进行正式化。 " +"任何实现可调用对象的静态类型均可使用此协议。" + +#: ../../whatsnew/3.8.rst:357 +msgid "" +"This is currently provisional. The aim is to make it fully public in Python " +"3.9." +msgstr "此特性目前为暂定状态,计划在 Python 3.9 将其完全公开。" + +#: ../../whatsnew/3.8.rst:360 +msgid "See :pep:`590` for a full description." +msgstr "请参阅 :pep:`590` 了解详情。" + +#: ../../whatsnew/3.8.rst:362 +msgid "" +"(Contributed by Jeroen Demeyer, Mark Shannon and Petr Viktorin in " +":issue:`36974`.)" +msgstr "" +"(由 Jeroen Demeyer, Mark Shannon 和 Petr Viktorin 在 :issue:`36974` 中贡献。)" + +#: ../../whatsnew/3.8.rst:366 +msgid "Pickle protocol 5 with out-of-band data buffers" +msgstr "具有外部数据缓冲区的 pickle 协议 5" + +#: ../../whatsnew/3.8.rst:368 +msgid "" +"When :mod:`pickle` is used to transfer large data between Python processes " +"in order to take advantage of multi-core or multi-machine processing, it is " +"important to optimize the transfer by reducing memory copies, and possibly " +"by applying custom techniques such as data-dependent compression." +msgstr "" +"当使用 :mod:`pickle` 在 Python " +"进程间传输大量数据以充分发挥多核或多机处理的优势时,非常重要一点是通过减少内存拷贝来优化传输效率,并可能应用一些定制技巧例如针对特定数据的压缩。" + +#: ../../whatsnew/3.8.rst:373 +msgid "" +"The :mod:`pickle` protocol 5 introduces support for out-of-band buffers " +"where :pep:`3118`-compatible data can be transmitted separately from the " +"main pickle stream, at the discretion of the communication layer." +msgstr "" +":mod:`pickle` 协议 5 引入了对于外部缓冲区的支持,这样 :pep:`3118` 兼容的数据可以与主 pickle " +"流分开进行传输,这是由通信层来确定的。" + +#: ../../whatsnew/3.8.rst:377 +msgid "See :pep:`574` for a full description." +msgstr "请参阅 :pep:`574` 了解详情。" + +#: ../../whatsnew/3.8.rst:379 +msgid "(Contributed by Antoine Pitrou in :issue:`36785`.)" +msgstr "(由 Antoine Pitrou 在 :issue:`36785` 中贡献。)" + +#: ../../whatsnew/3.8.rst:383 +msgid "Other Language Changes" +msgstr "其他语言特性修改" + +#: ../../whatsnew/3.8.rst:385 +msgid "" +"A :keyword:`continue` statement was illegal in the :keyword:`finally` clause" +" due to a problem with the implementation. In Python 3.8 this restriction " +"was lifted. (Contributed by Serhiy Storchaka in :issue:`32489`.)" +msgstr "" +"在之前版本中 :keyword:`continue` 语句不允许在 :keyword:`finally` 子句中使用,这是因为具体实现存在一个问题。 在" +" Python 3.8 中此限制已被取消。 (由 Serhiy Storchaka 在 :issue:`32489` 中贡献。)" + +#: ../../whatsnew/3.8.rst:390 +msgid "" +"The :class:`bool`, :class:`int`, and :class:`fractions.Fraction` types now " +"have an :meth:`~int.as_integer_ratio` method like that found in " +":class:`float` and :class:`decimal.Decimal`. This minor API extension makes" +" it possible to write ``numerator, denominator = x.as_integer_ratio()`` and " +"have it work across multiple numeric types. (Contributed by Lisa Roach in " +":issue:`33073` and Raymond Hettinger in :issue:`37819`.)" +msgstr "" +":class:`bool`, :class:`int` 和 :class:`fractions.Fraction` 类型现在都有一个 " +":meth:`~int.as_integer_ratio` 方法,与 :class:`float` 和 :class:`decimal.Decimal`" +" 中的已有方法类似。 这个微小的 API 扩展使得 ``numerator, denominator = x.as_integer_ratio()`` " +"这样的写法在多种数字类型上通用成为可能。 (由 Lisa Roach 在 :issue:`33073` 和 Raymond Hettinger 在 " +":issue:`37819` 中贡献。)" + +#: ../../whatsnew/3.8.rst:398 +msgid "" +"Constructors of :class:`int`, :class:`float` and :class:`complex` will now " +"use the :meth:`~object.__index__` special method, if available and the " +"corresponding method :meth:`~object.__int__`, :meth:`~object.__float__` or " +":meth:`~object.__complex__` is not available. (Contributed by Serhiy " +"Storchaka in :issue:`20092`.)" +msgstr "" +":class:`int`, :class:`float` 和 :class:`complex` 的构造器现在会使用 " +":meth:`~object.__index__` 特殊方法,如果该方法可用而对应的方法 method :meth:`~object.__int__`," +" :meth:`~object.__float__` 或 :meth:`~object.__complex__` 方法不可用的话。 (由 Serhiy " +"Storchaka 在 :issue:`20092` 中贡献。)" + +#: ../../whatsnew/3.8.rst:404 +msgid "" +"Added support of ``\\N{name}`` escapes in :mod:`regular expressions `::" +msgstr "添加 ``\\N{name}`` 转义符在 :mod:`正则表达式 ` 中的支持::" + +#: ../../whatsnew/3.8.rst:411 +msgid "" +"(Contributed by Jonathan Eunice and Serhiy Storchaka in :issue:`30688`.)" +msgstr "(由 Jonathan Eunice 和 Serhiy Storchaka 在 :issue:`30688` 中贡献。)" + +#: ../../whatsnew/3.8.rst:413 +msgid "" +"Dict and dictviews are now iterable in reversed insertion order using " +":func:`reversed`. (Contributed by Rémi Lapeyre in :issue:`33462`.)" +msgstr "" +"现在 dict 和 dictview 可以使用 :func:`reversed` 按插入顺序反向迭代。 (由 Rémi Lapeyre 在 " +":issue:`33462` 中贡献。)" + +#: ../../whatsnew/3.8.rst:416 +msgid "" +"The syntax allowed for keyword names in function calls was further " +"restricted. In particular, ``f((keyword)=arg)`` is no longer allowed. It was" +" never intended to permit more than a bare name on the left-hand side of a " +"keyword argument assignment term. (Contributed by Benjamin Peterson in " +":issue:`34641`.)" +msgstr "" +"在函数调用中允许使用的关键字名称语法受到进一步的限制。 特别地,``f((keyword)=arg)`` 不再被允许。 " +"关键字参数赋值形式的左侧绝不允许一般标识符以外的其他内容。 (由 Benjamin Peterson 在 :issue:`34641` 中贡献。)" + +#: ../../whatsnew/3.8.rst:422 +msgid "" +"Generalized iterable unpacking in :keyword:`yield` and :keyword:`return` " +"statements no longer requires enclosing parentheses. This brings the *yield*" +" and *return* syntax into better agreement with normal assignment syntax::" +msgstr "" +"在 :keyword:`yield` 和 :keyword:`return` 语句中的一般可迭代对象解包不再要求加圆括号。 这使得 *yield* 和 " +"*return* 的语法与正常的赋值语法更为一致::" + +#: ../../whatsnew/3.8.rst:434 +msgid "(Contributed by David Cuthbert and Jordan Chapman in :issue:`32117`.)" +msgstr "(由 David Cuthbert 和 Jordan Chapman 在 :issue:`32117` 中贡献。)" + +#: ../../whatsnew/3.8.rst:436 +msgid "" +"When a comma is missed in code such as ``[(10, 20) (30, 40)]``, the compiler" +" displays a :exc:`SyntaxWarning` with a helpful suggestion. This improves on" +" just having a :exc:`TypeError` indicating that the first tuple was not " +"callable. (Contributed by Serhiy Storchaka in :issue:`15248`.)" +msgstr "" +"当类似 ``[(10, 20) (30, 40)]`` 这样在代码中少了一个逗号时,编译器将显示 :exc:`SyntaxWarning` " +"并附带更有帮助的提示。 这相比原来用 :exc:`TypeError` 来提示第一个元组是不可调用的更容易被理解。 (由 Serhiy " +"Storchaka 在 :issue:`15248` 中贡献。)" + +#: ../../whatsnew/3.8.rst:442 +msgid "" +"Arithmetic operations between subclasses of :class:`datetime.date` or " +":class:`datetime.datetime` and :class:`datetime.timedelta` objects now " +"return an instance of the subclass, rather than the base class. This also " +"affects the return type of operations whose implementation (directly or " +"indirectly) uses :class:`datetime.timedelta` arithmetic, such as " +":meth:`~datetime.datetime.astimezone`. (Contributed by Paul Ganssle in " +":issue:`32417`.)" +msgstr "" +":class:`datetime.date` 或 :class:`datetime.datetime` 和 " +":class:`datetime.timedelta` 对象之间的算术运算现在将返回相应子类的实例而不是基类的实例。 " +"这也会影响到在具体实现中(直接或间接地)使用了 :class:`datetime.timedelta` 算术运算的返回类型,例如 " +":meth:`~datetime.datetime.astimezone`。 (由 Paul Ganssle 在 :issue:`32417` " +"中贡献。)" + +#: ../../whatsnew/3.8.rst:450 +msgid "" +"When the Python interpreter is interrupted by Ctrl-C (SIGINT) and the " +"resulting :exc:`KeyboardInterrupt` exception is not caught, the Python " +"process now exits via a SIGINT signal or with the correct exit code such " +"that the calling process can detect that it died due to a Ctrl-C. Shells on" +" POSIX and Windows use this to properly terminate scripts in interactive " +"sessions. (Contributed by Google via Gregory P. Smith in :issue:`1054041`.)" +msgstr "" +"当 Python 解释器通过 Ctrl-C (SIGINT) 被中断并且所产生的 :exc:`KeyboardInterrupt` " +"异常未被捕获,Python 进程现在会通过一个 SIGINT 信号或是使得唤起的进程能检测到它是由 Ctrl-C 操作杀死的正确退出代码来退出。 " +"POSIX 和 Windows 上的终端会相应地使用此代码在交互式会话中终止脚本。 (由 Google 的 Gregory P. Smith 在 " +":issue:`1054041` 中贡献。)" + +#: ../../whatsnew/3.8.rst:457 +msgid "" +"Some advanced styles of programming require updating the " +":class:`types.CodeType` object for an existing function. Since code objects" +" are immutable, a new code object needs to be created, one that is modeled " +"on the existing code object. With 19 parameters, this was somewhat tedious." +" Now, the new ``replace()`` method makes it possible to create a clone with" +" a few altered parameters." +msgstr "" +"某些高级编程风格要求为现有的函数更新 :class:`types.CodeType` 对象。 " +"由于代码对象是不可变的,需要基于现有代码对象模型创建一个新的代码对象。 使用 19 个形参将会相当繁琐。 现在,新的 ``replace()`` " +"方法使得通过少量修改的形参创建克隆对象成为可能。" + +#: ../../whatsnew/3.8.rst:464 +msgid "" +"Here's an example that alters the :func:`statistics.mean` function to " +"prevent the *data* parameter from being used as a keyword argument::" +msgstr "下面是一个修改 :func:`statistics.mean` 函数来防止 *data* 形参被用作关键字参数的例子::" + +#: ../../whatsnew/3.8.rst:476 +msgid "(Contributed by Victor Stinner in :issue:`37032`.)" +msgstr "(由 Victor Stinner 在 :issue:`37032` 中贡献。)" + +#: ../../whatsnew/3.8.rst:478 +msgid "" +"For integers, the three-argument form of the :func:`pow` function now " +"permits the exponent to be negative in the case where the base is relatively" +" prime to the modulus. It then computes a modular inverse to the base when " +"the exponent is ``-1``, and a suitable power of that inverse for other " +"negative exponents. For example, to compute the `modular multiplicative " +"inverse `_ of " +"38 modulo 137, write::" +msgstr "" +"对于整数,现在 :func:`pow` 函数的三参数形式在底数与模数不可约的情况下允许指数为负值。 随后它会在指数为 ``-1`` " +"时计算底数的模乘逆元,并对其他负指数计算反模的适当幂次。 例如,要计算 38 模 137 的 `模乘逆元 " +"`_ 则可写为::" + +#: ../../whatsnew/3.8.rst:492 +msgid "" +"Modular inverses arise in the solution of `linear Diophantine equations " +"`_. For example, to find" +" integer solutions for ``4258𝑥 + 147𝑦 = 369``, first rewrite as ``4258𝑥 ≡ " +"369 (mod 147)`` then solve:" +msgstr "" +"模乘逆元在求解 `线性丢番图方程 `_ " +"会被用到。 例如,想要求出 ``4258𝑥 + 147𝑦 = 369`` 的整数解,首先应重写为 ``4258𝑥 ≡ 369 (mod 147)`` " +"然后求解:" + +#: ../../whatsnew/3.8.rst:502 +msgid "(Contributed by Mark Dickinson in :issue:`36027`.)" +msgstr "(由 Mark Dickinson 在 :issue:`36027` 中贡献。)" + +#: ../../whatsnew/3.8.rst:504 +msgid "" +"Dict comprehensions have been synced-up with dict literals so that the key " +"is computed first and the value second::" +msgstr "字典推导式已与字典字面值实现同步,会先计算键再计算值::" + +#: ../../whatsnew/3.8.rst:519 +msgid "" +"The guaranteed execution order is helpful with assignment expressions " +"because variables assigned in the key expression will be available in the " +"value expression::" +msgstr "对执行顺序的保证对赋值表达式来说很有用,因为在键表达式中赋值的变量将可在值表达式中被使用::" + +#: ../../whatsnew/3.8.rst:529 +msgid "(Contributed by Jörn Heissler in :issue:`35224`.)" +msgstr "(由 Jörn Heissler 在 :issue:`35224` 中贡献。)" + +#: ../../whatsnew/3.8.rst:531 +msgid "" +"The :meth:`object.__reduce__` method can now return a tuple from two to six " +"elements long. Formerly, five was the limit. The new, optional sixth " +"element is a callable with a ``(obj, state)`` signature. This allows the " +"direct control over the state-updating behavior of a specific object. If " +"not *None*, this callable will have priority over the object's " +":meth:`~__setstate__` method. (Contributed by Pierre Glaser and Olivier " +"Grisel in :issue:`35900`.)" +msgstr "" +":meth:`object.__reduce__` 方法现在可返回长度为二至六个元素的元组。 之前的上限为五个。 新增的第六个可选元素是签名为 " +"``(obj, state)`` 的可调用对象。 这样就允许直接控制特定对象的状态更新。 如果元素值不为 *None*,该可调用对象将优先于对象的 " +":meth:`~__setstate__` 方法。 (由 Pierre Glaser 和 Olivier Grisel 在 :issue:`35900`" +" 中贡献。)" + +#: ../../whatsnew/3.8.rst:540 +msgid "New Modules" +msgstr "新增模块" + +#: ../../whatsnew/3.8.rst:542 +msgid "" +"The new :mod:`importlib.metadata` module provides (provisional) support for " +"reading metadata from third-party packages. For example, it can extract an " +"installed package's version number, list of entry points, and more::" +msgstr "" +"新增的 :mod:`importlib.metadata` 模块提供了从第三方包读取元数据的(临时)支持。 " +"例如,它可以提取一个已安装软件包的版本号、入口点列表等等::" + +#: ../../whatsnew/3.8.rst:561 +msgid "(Contributed by Barry Warsaw and Jason R. Coombs in :issue:`34632`.)" +msgstr "(由 Barry Warsaw 和 Jason R. Coombs 在 :issue:`34632` 中贡献)。" + +#: ../../whatsnew/3.8.rst:565 +msgid "Improved Modules" +msgstr "改进的模块" + +#: ../../whatsnew/3.8.rst:568 +msgid "ast" +msgstr "ast" + +#: ../../whatsnew/3.8.rst:570 +msgid "" +"AST nodes now have ``end_lineno`` and ``end_col_offset`` attributes, which " +"give the precise location of the end of the node. (This only applies to " +"nodes that have ``lineno`` and ``col_offset`` attributes.)" +msgstr "" +"AST 节点现在具有 ``end_lineno`` 和 ``end_col_offset`` 属性,它们给出节点结束的精确位置。 (这只适用于具有 " +"``lineno`` 和 ``col_offset`` 属性的节点。)" + +#: ../../whatsnew/3.8.rst:574 +msgid "" +"New function :func:`ast.get_source_segment` returns the source code for a " +"specific AST node." +msgstr "新增函数 :func:`ast.get_source_segment` 返回指定 AST 节点的源代码。" + +#: ../../whatsnew/3.8.rst:577 +msgid "(Contributed by Ivan Levkivskyi in :issue:`33416`.)" +msgstr "(由 Ivan Levkivskyi 在 :issue:`33416` 中贡献。)" + +#: ../../whatsnew/3.8.rst:579 +msgid "The :func:`ast.parse` function has some new flags:" +msgstr ":func:`ast.parse` 函数具有一些新的旗标:" + +#: ../../whatsnew/3.8.rst:581 +msgid "" +"``type_comments=True`` causes it to return the text of :pep:`484` and " +":pep:`526` type comments associated with certain AST nodes;" +msgstr "" +"``type_comments=True`` 导致其返回与特定 AST 节点相关联的 :pep:`484` 和 :pep:`526` 类型注释文本;" + +#: ../../whatsnew/3.8.rst:584 +msgid "" +"``mode='func_type'`` can be used to parse :pep:`484` \"signature type " +"comments\" (returned for function definition AST nodes);" +msgstr "``mode='func_type'`` 可被用于解析 :pep:`484` \"签名类型注释\" (为函数定义 AST 节点而返回);" + +#: ../../whatsnew/3.8.rst:587 +msgid "" +"``feature_version=(3, N)`` allows specifying an earlier Python 3 version. " +"For example, ``feature_version=(3, 4)`` will treat :keyword:`async` and " +":keyword:`await` as non-reserved words." +msgstr "" +"``feature_version=(3, N)`` 允许指定一个更早的 Python 3 版本。 例如,``feature_version=(3, " +"4)`` 将把 :keyword:`async` 和 :keyword:`await` 视为非保留字。" + +#: ../../whatsnew/3.8.rst:591 +msgid "(Contributed by Guido van Rossum in :issue:`35766`.)" +msgstr "(由 Guido van Rossum 在 :issue:`35766` 中贡献。)" + +#: ../../whatsnew/3.8.rst:595 +msgid "asyncio" +msgstr "asyncio" + +#: ../../whatsnew/3.8.rst:597 +msgid "" +":func:`asyncio.run` has graduated from the provisional to stable API. This " +"function can be used to execute a :term:`coroutine` and return the result " +"while automatically managing the event loop. For example::" +msgstr "" +":func:`asyncio.run` 已经从暂定状态晋级为稳定 API。 此函数可被用于执行一个 :term:`coroutine` " +"并返回结果,同时自动管理事件循环。 例如::" + +#: ../../whatsnew/3.8.rst:609 +msgid "This is *roughly* equivalent to::" +msgstr "这 *大致* 等价于::" + +#: ../../whatsnew/3.8.rst:626 +msgid "" +"The actual implementation is significantly more complex. Thus, " +":func:`asyncio.run` should be the preferred way of running asyncio programs." +msgstr "实际的实现要更复杂许多。 因此 :func:`asyncio.run` 应该作为运行 asyncio 程序的首选方式。" + +#: ../../whatsnew/3.8.rst:629 +msgid "(Contributed by Yury Selivanov in :issue:`32314`.)" +msgstr "(由 Yury Selivanov 在 :issue:`32314` 中贡献。)" + +#: ../../whatsnew/3.8.rst:631 +msgid "" +"Running ``python -m asyncio`` launches a natively async REPL. This allows " +"rapid experimentation with code that has a top-level :keyword:`await`. " +"There is no longer a need to directly call ``asyncio.run()`` which would " +"spawn a new event loop on every invocation:" +msgstr "" +"运行 ``python -m asyncio`` 将启动一个原生异步 REPL。 这允许快速体验具有最高层级 :keyword:`await` 的代码。" +" 这时不再需要直接调用 ``asyncio.run()``,因为此操作会在每次唤起时产生一个新事件循环:" + +#: ../../whatsnew/3.8.rst:646 +msgid "(Contributed by Yury Selivanov in :issue:`37028`.)" +msgstr "(由 Yury Selivanov 在 :issue:`37028` 中贡献。)" + +#: ../../whatsnew/3.8.rst:648 ../../whatsnew/3.8.rst:1964 +msgid "" +"The exception :class:`asyncio.CancelledError` now inherits from " +":class:`BaseException` rather than :class:`Exception` and no longer inherits" +" from :class:`concurrent.futures.CancelledError`. (Contributed by Yury " +"Selivanov in :issue:`32528`.)" +msgstr "" +"异常 :class:`asyncio.CancelledError` 现在继承自 :class:`BaseException` 而不是 " +":class:`Exception` 并且不再继承自 :class:`concurrent.futures.CancelledError`。 (由 " +"Yury Selivanov 在 :issue:`32528` 中贡献。)" + +#: ../../whatsnew/3.8.rst:653 +msgid "" +"On Windows, the default event loop is now " +":class:`~asyncio.ProactorEventLoop`. (Contributed by Victor Stinner in " +":issue:`34687`.)" +msgstr "" +"在 Windows 上,现在默认的事件循环为 :class:`~asyncio.ProactorEventLoop`。 (由 Victor " +"Stinner 在 :issue:`34687` 中贡献。)" + +#: ../../whatsnew/3.8.rst:656 +msgid "" +":class:`~asyncio.ProactorEventLoop` now also supports UDP. (Contributed by " +"Adam Meily and Andrew Svetlov in :issue:`29883`.)" +msgstr "" +":class:`~asyncio.ProactorEventLoop` 现在也支持 UDP。 (由 Adam Meily 和 Andrew " +"Svetlov 在 :issue:`29883` 中贡献。)" + +#: ../../whatsnew/3.8.rst:659 +msgid "" +":class:`~asyncio.ProactorEventLoop` can now be interrupted by " +":exc:`KeyboardInterrupt` (\"CTRL+C\"). (Contributed by Vladimir Matveev in " +":issue:`23057`.)" +msgstr "" +":class:`~asyncio.ProactorEventLoop` 现在可通过 :exc:`KeyboardInterrupt` " +"(\"CTRL+C\") 来中断。 (由 Vladimir Matveev 在 :issue:`23057` 中贡献。)" + +#: ../../whatsnew/3.8.rst:663 +msgid "" +"Added :meth:`asyncio.Task.get_coro` for getting the wrapped coroutine within" +" an :class:`asyncio.Task`. (Contributed by Alex Grönholm in :issue:`36999`.)" +msgstr "" +"添加了 :meth:`asyncio.Task.get_coro` 用来获取 :class:`asyncio.Task` 中的已包装协程。 (由 " +"Alex Grönholm 在 :issue:`36999` 中贡献。)" + +#: ../../whatsnew/3.8.rst:667 +msgid "" +"Asyncio tasks can now be named, either by passing the ``name`` keyword " +"argument to :func:`asyncio.create_task` or the " +":meth:`~asyncio.loop.create_task` event loop method, or by calling the " +":meth:`~asyncio.Task.set_name` method on the task object. The task name is " +"visible in the ``repr()`` output of :class:`asyncio.Task` and can also be " +"retrieved using the :meth:`~asyncio.Task.get_name` method. (Contributed by " +"Alex Grönholm in :issue:`34270`.)" +msgstr "" +"asyncio 任务现在可以被命名,或者是通过将 ``name`` 关键字参数传给 :func:`asyncio.create_task` 或 " +":meth:`~asyncio.loop.create_task` 事件循环方法,或者是通过在任务对象上调用 " +":meth:`~asyncio.Task.set_name` 方法。 任务名称在 :class:`asyncio.Task` 的 ``repr()`` " +"输出中可见,并且还可以使用 :meth:`~asyncio.Task.get_name` 方法来获取。 (由 Alex Grönholm 在 " +":issue:`34270` 中贡献。)" + +#: ../../whatsnew/3.8.rst:675 +msgid "" +"Added support for `Happy Eyeballs " +"`_ to " +":func:`asyncio.loop.create_connection`. To specify the behavior, two new " +"parameters have been added: *happy_eyeballs_delay* and *interleave*. The " +"Happy Eyeballs algorithm improves responsiveness in applications that " +"support IPv4 and IPv6 by attempting to simultaneously connect using both. " +"(Contributed by twisteroid ambassador in :issue:`33530`.)" +msgstr "" +"将对 `Happy Eyeballs `_ 的支持添加到 " +":func:`asyncio.loop.create_connection`。 要指定此行为,已增加了两个新的形参: " +"*happy_eyeballs_delay* 和 *interleave*。 Happy Eyeballs 算法可提升支持 IPv4 和 IPv6 " +"的应用的响应速度,具体做法是尝试同时使用两者进行连接。 (由 twisteroid ambassador 在 :issue:`33530` 中贡献。)" + +#: ../../whatsnew/3.8.rst:685 +msgid "builtins" +msgstr "builtins" + +#: ../../whatsnew/3.8.rst:687 +msgid "" +"The :func:`compile` built-in has been improved to accept the " +"``ast.PyCF_ALLOW_TOP_LEVEL_AWAIT`` flag. With this new flag passed, " +":func:`compile` will allow top-level ``await``, ``async for`` and ``async " +"with`` constructs that are usually considered invalid syntax. Asynchronous " +"code object marked with the ``CO_COROUTINE`` flag may then be returned. " +"(Contributed by Matthias Bussonnier in :issue:`34616`)" +msgstr "" +"内置的 :func:`compile` 已改进为可接受 ``ast.PyCF_ALLOW_TOP_LEVEL_AWAIT`` 旗标。 " +"当传入此新旗标时,:func:`compile` 将允许通常被视为无效语法的最高层级 ``await``, ``async for`` 和 " +"``async with`` 构造。 此后将可返回带有 ``CO_COROUTINE`` 旗标的异步代码对象。 (由 Matthias " +"Bussonnier 在 :issue:`34616` 中贡献。)" + +#: ../../whatsnew/3.8.rst:696 +msgid "collections" +msgstr "collections" + +#: ../../whatsnew/3.8.rst:698 +msgid "" +"The :meth:`~collections.somenamedtuple._asdict` method for " +":func:`collections.namedtuple` now returns a :class:`dict` instead of a " +":class:`collections.OrderedDict`. This works because regular dicts have " +"guaranteed ordering since Python 3.7. If the extra features of " +":class:`OrderedDict` are required, the suggested remediation is to cast the " +"result to the desired type: ``OrderedDict(nt._asdict())``. (Contributed by " +"Raymond Hettinger in :issue:`35864`.)" +msgstr "" +":func:`collections.namedtuple` 的 :meth:`~collections.somenamedtuple._asdict`" +" 方法现在将返回 :class:`dict` 而不是 :class:`collections.OrderedDict`。 此项更改是由于普通字典自 " +"Python 3.7 起已保证具有确定的元素顺序。 如果还需要 :class:`OrderedDict` " +"的额外特性,建议的解决方案是将结果转换为需要的类型: ``OrderedDict(nt._asdict())``。 (由 Raymond " +"Hettinger 在 :issue:`35864` 中贡献。)" + +#: ../../whatsnew/3.8.rst:708 +msgid "cProfile" +msgstr "cProfile" + +#: ../../whatsnew/3.8.rst:710 +msgid "" +"The :class:`cProfile.Profile ` class can now be used as a " +"context manager. Profile a block of code by running::" +msgstr "" +":class:`cProfile.Profile ` 类现在可被用作上下文管理器。 " +"在运行时对一个代码块实现性能分析::" + +#: ../../whatsnew/3.8.rst:719 +msgid "(Contributed by Scott Sanderson in :issue:`29235`.)" +msgstr "(由 Scott Sanderson 在 :issue:`29235` 中贡献。)" + +#: ../../whatsnew/3.8.rst:723 +msgid "csv" +msgstr "csv" + +#: ../../whatsnew/3.8.rst:725 +msgid "" +"The :class:`csv.DictReader` now returns instances of :class:`dict` instead " +"of a :class:`collections.OrderedDict`. The tool is now faster and uses less" +" memory while still preserving the field order. (Contributed by Michael " +"Selik in :issue:`34003`.)" +msgstr "" +":class:`csv.DictReader` 现在将返回 :class:`dict` 而不是 " +":class:`collections.OrderedDict`。 此工具现在会更快速且消耗更少内存同时仍然保留字段顺序。 (由 Michael " +"Selik 在 :issue:`34003` 中贡献。)" + +#: ../../whatsnew/3.8.rst:732 +msgid "curses" +msgstr "curses" + +#: ../../whatsnew/3.8.rst:734 +msgid "" +"Added a new variable holding structured version information for the " +"underlying ncurses library: :data:`~curses.ncurses_version`. (Contributed by" +" Serhiy Storchaka in :issue:`31680`.)" +msgstr "" +"添加了一个新变量用于保存下层 ncurses 库的结构版信息: :data:`~curses.ncurses_version`。 (由 Serhiy " +"Storchaka 在 :issue:`31680` 中贡献。)" + +#: ../../whatsnew/3.8.rst:740 +msgid "ctypes" +msgstr "ctypes" + +#: ../../whatsnew/3.8.rst:742 +msgid "" +"On Windows, :class:`~ctypes.CDLL` and subclasses now accept a *winmode* " +"parameter to specify flags for the underlying ``LoadLibraryEx`` call. The " +"default flags are set to only load DLL dependencies from trusted locations, " +"including the path where the DLL is stored (if a full or partial path is " +"used to load the initial DLL) and paths added by " +":func:`~os.add_dll_directory`. (Contributed by Steve Dower in " +":issue:`36085`.)" +msgstr "" +"在 Windows 上,:class:`~ctypes.CDLL` 及其子类现在接受 *winmode* 形参来指定用于底层 " +"``LoadLibraryEx`` 调用的旗标。 默认旗标被设为仅加载来自可信任位置的 DLL 依赖项,包括 DLL 的存放路径(如果加载初始 DLL " +"时使用了完整或部分路径)以及通过 :func:`~os.add_dll_directory` 添加的路径。 (由 Steve Dower 在 " +":issue:`36085` 中贡献。)" + +#: ../../whatsnew/3.8.rst:751 +msgid "datetime" +msgstr "datetime" + +#: ../../whatsnew/3.8.rst:753 +msgid "" +"Added new alternate constructors :meth:`datetime.date.fromisocalendar` and " +":meth:`datetime.datetime.fromisocalendar`, which construct :class:`date` and" +" :class:`datetime` objects respectively from ISO year, week number, and " +"weekday; these are the inverse of each class's ``isocalendar`` method. " +"(Contributed by Paul Ganssle in :issue:`36004`.)" +msgstr "" +"添加了新的替代构造器 :meth:`datetime.date.fromisocalendar` 和 " +":meth:`datetime.datetime.fromisocalendar`,它们分别基于 ISO 年份、周序号和周内日序号来构造 " +":class:`date` 和 :class:`datetime` 对象;这两者分别是其所对应类中 ``isocalendar`` 方法的逆操作。 (由" +" Paul Ganssle 在 :issue:`36004` 中贡献。)" + +#: ../../whatsnew/3.8.rst:761 +msgid "functools" +msgstr "functools" + +#: ../../whatsnew/3.8.rst:763 +msgid "" +":func:`functools.lru_cache` can now be used as a straight decorator rather " +"than as a function returning a decorator. So both of these are now " +"supported::" +msgstr ":func:`functools.lru_cache` 现在可直接作为装饰器而不是作为返回装饰器的函数。 因此这两种写法现在都被支持::" + +#: ../../whatsnew/3.8.rst:774 +msgid "(Contributed by Raymond Hettinger in :issue:`36772`.)" +msgstr "(由 Raymond Hettinger 在 :issue:`36772` 中贡献。)" + +#: ../../whatsnew/3.8.rst:776 +msgid "" +"Added a new :func:`functools.cached_property` decorator, for computed " +"properties cached for the life of the instance. ::" +msgstr "添加了新的 :func:`functools.cached_property` 装饰器,用于在实例生命周期内缓存的已计算特征属性。 ::" + +#: ../../whatsnew/3.8.rst:790 +msgid "(Contributed by Carl Meyer in :issue:`21145`)" +msgstr "(由 Carl Meyer 在 :issue:`21145` 中贡献)" + +#: ../../whatsnew/3.8.rst:793 +msgid "" +"Added a new :func:`functools.singledispatchmethod` decorator that converts " +"methods into :term:`generic functions ` using " +":term:`single dispatch`::" +msgstr "" +"添加了新的 :func:`functools.singledispatchmethod` 装饰器可使用 :term:`single dispatch` " +"将方法转换为 :term:`泛型函数 `::" + +#: ../../whatsnew/3.8.rst:815 +msgid "(Contributed by Ethan Smith in :issue:`32380`)" +msgstr "(由 Ethan Smith 在 :issue:`32380` 中贡献)" + +#: ../../whatsnew/3.8.rst:818 +msgid "gc" +msgstr "gc" + +#: ../../whatsnew/3.8.rst:820 +msgid "" +":func:`~gc.get_objects` can now receive an optional *generation* parameter " +"indicating a generation to get objects from. (Contributed by Pablo Galindo " +"in :issue:`36016`.)" +msgstr "" +":func:`~gc.get_objects` 现在能接受一个可选的 *generation* 形参来指定一个用于获取对象的生成器。 (由 Pablo " +"Galindo 在 :issue:`36016` 中贡献。)" + +#: ../../whatsnew/3.8.rst:826 +msgid "gettext" +msgstr "gettext" + +#: ../../whatsnew/3.8.rst:828 +msgid "" +"Added :func:`~gettext.pgettext` and its variants. (Contributed by Franz " +"Glasner, Éric Araujo, and Cheryl Sabella in :issue:`2504`.)" +msgstr "" +"添加了 :func:`~gettext.pgettext` 及其变化形式。 (由 Franz Glasner, Éric Araujo 和 Cheryl" +" Sabella 在 :issue:`2504` 中贡献。)" + +#: ../../whatsnew/3.8.rst:833 +msgid "gzip" +msgstr "gzip" + +#: ../../whatsnew/3.8.rst:835 +msgid "" +"Added the *mtime* parameter to :func:`gzip.compress` for reproducible " +"output. (Contributed by Guo Ci Teo in :issue:`34898`.)" +msgstr "" +"添加 *mtime* 形参到 :func:`gzip.compress` 用于可重现的输出。 (由 Guo Ci Teo 在 " +":issue:`34898` 中贡献。)" + +#: ../../whatsnew/3.8.rst:838 +msgid "" +"A :exc:`~gzip.BadGzipFile` exception is now raised instead of :exc:`OSError`" +" for certain types of invalid or corrupt gzip files. (Contributed by Filip " +"Gruszczyński, Michele Orrù, and Zackery Spytz in :issue:`6584`.)" +msgstr "" +"对于特定类型的无效或已损坏 gzip 文件现在将引发 :exc:`~gzip.BadGzipFile` 而不是 :exc:`OSError`。 (由 " +"Filip Gruszczyński, Michele Orrù 和 Zackery Spytz 在 :issue:`6584` 中贡献。)" + +#: ../../whatsnew/3.8.rst:845 +msgid "IDLE and idlelib" +msgstr "IDLE 与 idlelib" + +#: ../../whatsnew/3.8.rst:847 +msgid "" +"Output over N lines (50 by default) is squeezed down to a button. N can be " +"changed in the PyShell section of the General page of the Settings dialog. " +"Fewer, but possibly extra long, lines can be squeezed by right clicking on " +"the output. Squeezed output can be expanded in place by double-clicking the" +" button or into the clipboard or a separate window by right-clicking the " +"button. (Contributed by Tal Einat in :issue:`1529353`.)" +msgstr "" +"超过 N 行(默认值为 50)的输出将被折叠为一个按钮。 N 可以在 Settings 对话框的 General 页的 PyShell 部分中进行修改。" +" 数量较少但是超长的行可以通过在输出上右击来折叠。 被折叠的输出可通过双击按钮来展开,或是通过右击按钮来放入剪贴板或是单独的窗口。 (由 Tal " +"Einat 在 :issue:`1529353` 中贡献。)" + +#: ../../whatsnew/3.8.rst:854 +msgid "" +"Add \"Run Customized\" to the Run menu to run a module with customized " +"settings. Any command line arguments entered are added to sys.argv. They " +"also re-appear in the box for the next customized run. One can also " +"suppress the normal Shell main module restart. (Contributed by Cheryl " +"Sabella, Terry Jan Reedy, and others in :issue:`5680` and :issue:`37627`.)" +msgstr "" +"在 Run 菜单中增加了 \"Run Customized\" 以使用自定义设置来运行模块。 输入的任何命令行参数都会被加入 sys.argv。 " +"它们在下次自定义运行时会再次显示在窗体中。 用户也可以禁用通常的 Shell 主模块重启。 (由 Cheryl Sabella, Terry Jan " +"Reedy 等人在 :issue:`5680` 和 :issue:`37627` 中贡献。)" + +#: ../../whatsnew/3.8.rst:860 +msgid "" +"Added optional line numbers for IDLE editor windows. Windows open without " +"line numbers unless set otherwise in the General tab of the configuration " +"dialog. Line numbers for an existing window are shown and hidden in the " +"Options menu. (Contributed by Tal Einat and Saimadhav Heblikar in " +":issue:`17535`.)" +msgstr "" +"在 IDLE 编辑器窗口中增加了可选的行号。 窗口打开时默认不显示行号,除非在配置对话框的 General 选项卡中特别设置。 已打开窗口中的行号可以在" +" Options 菜单中显示和隐藏。 (由 Tal Einat 和 Saimadhav Heblikar 在 :issue:`17535` 中贡献。)" + +#: ../../whatsnew/3.8.rst:866 +msgid "" +"OS native encoding is now used for converting between Python strings and Tcl" +" objects. This allows IDLE to work with emoji and other non-BMP characters. " +"These characters can be displayed or copied and pasted to or from the " +"clipboard. Converting strings from Tcl to Python and back now never fails. " +"(Many people worked on this for eight years but the problem was finally " +"solved by Serhiy Storchaka in :issue:`13153`.)" +msgstr "" +"现在会使用 OS 本机编码格式在 Python 字符串和 Tcl 对象间进行转换。 这允许在 IDLE 中处理 emoji 和其他非 BMP 字符。 " +"这些字符将可被显示或是从剪贴板复制和粘贴。 字符串从 Tcl 到 Python 的来回转换现在不会再发生失败。 " +"(过去八年有许多人都为此付出过努力,问题最终由 Serhiy Storchaka 在 :issue:`13153` 中解决。)" + +#: ../../whatsnew/3.8.rst:873 +msgid "New in 3.8.1:" +msgstr "在 3.8.1 中新增:" + +#: ../../whatsnew/3.8.rst:875 +msgid "" +"Add option to toggle cursor blink off. (Contributed by Zackery Spytz in " +":issue:`4603`.)" +msgstr "添加切换光标闪烁停止的选项。 (由 Zackery Spytz 在 :issue:`4603` 中贡献。)" + +#: ../../whatsnew/3.8.rst:878 +msgid "" +"Escape key now closes IDLE completion windows. (Contributed by Johnny " +"Najera in :issue:`38944`.)" +msgstr "Esc 键现在会关闭 IDLE 补全提示窗口。 (由 Johnny Najera 在 :issue:`38944` 中贡献。)" + +#: ../../whatsnew/3.8.rst:881 +msgid "The changes above have been backported to 3.7 maintenance releases." +msgstr "上述修改已被反向移植到 3.7 维护发行版中。" + +#: ../../whatsnew/3.8.rst:883 +msgid "" +"Add keywords to module name completion list. (Contributed by Terry J. Reedy" +" in :issue:`37765`.)" +msgstr "添加关键字到模块名称补全列表。 (由 Terry J. Reedy 在 :issue:`37765` 中贡献。)" + +#: ../../whatsnew/3.8.rst:887 +msgid "inspect" +msgstr "inspect" + +#: ../../whatsnew/3.8.rst:889 +msgid "" +"The :func:`inspect.getdoc` function can now find docstrings for " +"``__slots__`` if that attribute is a :class:`dict` where the values are " +"docstrings. This provides documentation options similar to what we already " +"have for :func:`property`, :func:`classmethod`, and :func:`staticmethod`::" +msgstr "" +":func:`inspect.getdoc` 函数现在可以找到 ``__slots__`` 的文档字符串,如果该属性是一个元素值为文档字符串的 " +":class:`dict` 的话。 这提供了类似于目前已有的 :func:`property`, :func:`classmethod` 和 " +":func:`staticmethod` 等函数的文档选项::" + +#: ../../whatsnew/3.8.rst:901 +msgid "(Contributed by Raymond Hettinger in :issue:`36326`.)" +msgstr "(由 Raymond Hettinger 在 :issue:`36326` 中贡献。)" + +#: ../../whatsnew/3.8.rst:905 +msgid "io" +msgstr "io" + +#: ../../whatsnew/3.8.rst:907 +msgid "" +"In development mode (:option:`-X` ``env``) and in debug build, the " +":class:`io.IOBase` finalizer now logs the exception if the ``close()`` " +"method fails. The exception is ignored silently by default in release build." +" (Contributed by Victor Stinner in :issue:`18748`.)" +msgstr "" +"在开发模式 (:option:`-X` ``env``) 和调试构建中,:class:`io.IOBase` 终结器现在会在 ``close()`` " +"方法失败时将异常写入日志。 发生的异常在发布构建中默认会被静默忽略。 (由 Victor Stinner 在 :issue:`18748` 中贡献。)" + +#: ../../whatsnew/3.8.rst:914 +msgid "itertools" +msgstr "itertools" + +#: ../../whatsnew/3.8.rst:916 +msgid "" +"The :func:`itertools.accumulate` function added an option *initial* keyword " +"argument to specify an initial value::" +msgstr ":func:`itertools.accumulate` 函数增加了可选的 *initial* 关键字参数用来指定一个初始值::" + +#: ../../whatsnew/3.8.rst:923 +msgid "(Contributed by Lisa Roach in :issue:`34659`.)" +msgstr "(由 Lisa Roach 在 :issue:`34659` 中贡献。)" + +#: ../../whatsnew/3.8.rst:927 +msgid "json.tool" +msgstr "json.tool" + +#: ../../whatsnew/3.8.rst:929 +msgid "" +"Add option ``--json-lines`` to parse every input line as a separate JSON " +"object. (Contributed by Weipeng Hong in :issue:`31553`.)" +msgstr "" +"添加选项 ``--json-lines`` 用于将每个输入行解析为单独的 JSON 对象。 (由 Weipeng Hong 在 " +":issue:`31553` 中贡献。)" + +#: ../../whatsnew/3.8.rst:934 +msgid "logging" +msgstr "logging" + +#: ../../whatsnew/3.8.rst:936 +msgid "" +"Added a *force* keyword argument to :func:`logging.basicConfig()` When set " +"to true, any existing handlers attached to the root logger are removed and " +"closed before carrying out the configuration specified by the other " +"arguments." +msgstr "" +"为 :func:`logging.basicConfig()` 添加了 *force* " +"关键字参数,当设为真值时,关联到根日志记录器的任何现有处理程序都将在执行由其他参数所指定的配置之前被移除并关闭。" + +#: ../../whatsnew/3.8.rst:941 +msgid "" +"This solves a long-standing problem. Once a logger or *basicConfig()* had " +"been called, subsequent calls to *basicConfig()* were silently ignored. This" +" made it difficult to update, experiment with, or teach the various logging " +"configuration options using the interactive prompt or a Jupyter notebook." +msgstr "" +"这解决了一个长期存在的问题。 当一个日志处理器或 *basicConfig()* 被调用时,对 *basicConfig()* " +"的后续调用会被静默地忽略。 这导致使用交互提示符或 Jupyter 笔记本更新、试验或讲解各种日志配置选项变得相当困难。" + +#: ../../whatsnew/3.8.rst:947 +msgid "" +"(Suggested by Raymond Hettinger, implemented by Dong-hee Na, and reviewed by" +" Vinay Sajip in :issue:`33897`.)" +msgstr "" +"(由 Raymond Hettinger 提议,由 Dong-hee Na 实现,并由 Vinay Sajip 在 :issue:`33897` " +"中完成审核。)" + +#: ../../whatsnew/3.8.rst:952 +msgid "math" +msgstr "math" + +#: ../../whatsnew/3.8.rst:954 +msgid "" +"Added new function :func:`math.dist` for computing Euclidean distance " +"between two points. (Contributed by Raymond Hettinger in :issue:`33089`.)" +msgstr "" +"添加了新的函数 :func:`math.dist` 用于计算两点之间的欧几里得距离。 (由 Raymond Hettinger 在 " +":issue:`33089` 中贡献。)" + +#: ../../whatsnew/3.8.rst:957 +msgid "" +"Expanded the :func:`math.hypot` function to handle multiple dimensions. " +"Formerly, it only supported the 2-D case. (Contributed by Raymond Hettinger " +"in :issue:`33089`.)" +msgstr "" +"扩展了 :func:`math.hypot` 函数以便处理更多的维度。 之前它仅支持 2-D 的情况。 (由 Raymond Hettinger 在 " +":issue:`33089` 中贡献。)" + +#: ../../whatsnew/3.8.rst:961 +msgid "" +"Added new function, :func:`math.prod`, as analogous function to :func:`sum` " +"that returns the product of a 'start' value (default: 1) times an iterable " +"of numbers::" +msgstr "" +"添加了新的函数 :func:`math.prod` 作为的 :func:`sum` 同类,该函数返回 'start' 值 (默认值: 1) " +"乘以一个数字可迭代对象的积::" + +#: ../../whatsnew/3.8.rst:970 +msgid "(Contributed by Pablo Galindo in :issue:`35606`.)" +msgstr "(由 Pablo Galindo 在 :issue:`35606` 中贡献。)" + +#: ../../whatsnew/3.8.rst:972 +msgid "" +"Added two new combinatoric functions :func:`math.perm` and " +":func:`math.comb`::" +msgstr "添加了两个新的组合函数 :func:`math.perm` 和 :func:`math.comb`::" + +#: ../../whatsnew/3.8.rst:979 +msgid "" +"(Contributed by Yash Aggarwal, Keller Fuchs, Serhiy Storchaka, and Raymond " +"Hettinger in :issue:`37128`, :issue:`37178`, and :issue:`35431`.)" +msgstr "" +"(由 Yash Aggarwal, Keller Fuchs, Serhiy Storchaka 和 Raymond Hettinger 在 " +":issue:`37128`, :issue:`37178` 和 :issue:`35431` 中贡献。)" + +#: ../../whatsnew/3.8.rst:982 +msgid "" +"Added a new function :func:`math.isqrt` for computing accurate integer " +"square roots without conversion to floating point. The new function " +"supports arbitrarily large integers. It is faster than ``floor(sqrt(n))`` " +"but slower than :func:`math.sqrt`::" +msgstr "" +"添加了一个新函数 :func:`math.isqrt` 用于计算精确整数平方根而无需转换为浮点数。 该新函数支持任意大整数。 它的执行速度比 " +"``floor(sqrt(n))`` 快但是比 :func:`math.sqrt` 慢::" + +#: ../../whatsnew/3.8.rst:994 +msgid "(Contributed by Mark Dickinson in :issue:`36887`.)" +msgstr "(由 Mark Dickinson 在 :issue:`36887` 中贡献。)" + +#: ../../whatsnew/3.8.rst:996 +msgid "" +"The function :func:`math.factorial` no longer accepts arguments that are not" +" int-like. (Contributed by Pablo Galindo in :issue:`33083`.)" +msgstr "" +"函数 :func:`math.factorial` 不再接受非整数类参数。 (由 Pablo Galindo 在 :issue:`33083` " +"中贡献。)" + +#: ../../whatsnew/3.8.rst:1001 +msgid "mmap" +msgstr "mmap" + +#: ../../whatsnew/3.8.rst:1003 +msgid "" +"The :class:`mmap.mmap` class now has an :meth:`~mmap.mmap.madvise` method to" +" access the ``madvise()`` system call. (Contributed by Zackery Spytz in " +":issue:`32941`.)" +msgstr "" +":class:`mmap.mmap` 类现在具有一个 :meth:`~mmap.mmap.madvise` 方法用于访问 ``madvise()`` " +"系统调用。 (由 Zackery Spytz 在 :issue:`32941` 中贡献。)" + +#: ../../whatsnew/3.8.rst:1009 +msgid "multiprocessing" +msgstr "multiprocessing" + +#: ../../whatsnew/3.8.rst:1011 +msgid "" +"Added new :mod:`multiprocessing.shared_memory` module. (Contributed by Davin" +" Potts in :issue:`35813`.)" +msgstr "" +"添加了新的 :mod:`multiprocessing.shared_memory` 模块。 (由 Davin Potts 在 " +":issue:`35813` 中贡献。)" + +#: ../../whatsnew/3.8.rst:1014 +msgid "" +"On macOS, the *spawn* start method is now used by default. (Contributed by " +"Victor Stinner in :issue:`33725`.)" +msgstr "" +"在macOS上,现在默认使用的启动方式是*spawn*启动方式。\n" +"(由 Victor Stinner 在 :issue:`33725` 中贡献。)" + +#: ../../whatsnew/3.8.rst:1019 +msgid "os" +msgstr "os" + +#: ../../whatsnew/3.8.rst:1021 +msgid "" +"Added new function :func:`~os.add_dll_directory` on Windows for providing " +"additional search paths for native dependencies when importing extension " +"modules or loading DLLs using :mod:`ctypes`. (Contributed by Steve Dower in " +":issue:`36085`.)" +msgstr "" +"在 Windows 上添加了新函数 :func:`~os.add_dll_directory` 用于在导入扩展模块或使用 :mod:`ctypes` " +"加载 DLL 时为本机依赖提供额外搜索路径 。 (由 Steve Dower 在 :issue:`36085` 中贡献。)" + +#: ../../whatsnew/3.8.rst:1026 +msgid "" +"A new :func:`os.memfd_create` function was added to wrap the " +"``memfd_create()`` syscall. (Contributed by Zackery Spytz and Christian " +"Heimes in :issue:`26836`.)" +msgstr "" +"添加了新的 :func:`os.memfd_create` 函数用于包装 ``memfd_create()`` 系统调用。 (由 Zackery " +"Spytz 和 Christian Heimes 在 :issue:`26836` 中贡献。)" + +#: ../../whatsnew/3.8.rst:1030 +msgid "" +"On Windows, much of the manual logic for handling reparse points (including " +"symlinks and directory junctions) has been delegated to the operating " +"system. Specifically, :func:`os.stat` will now traverse anything supported " +"by the operating system, while :func:`os.lstat` will only open reparse " +"points that identify as \"name surrogates\" while others are opened as for " +":func:`os.stat`. In all cases, :attr:`stat_result.st_mode` will only have " +"``S_IFLNK`` set for symbolic links and not other kinds of reparse points. To" +" identify other kinds of reparse point, check the new " +":attr:`stat_result.st_reparse_tag` attribute." +msgstr "" +"在 Windows 上,大部分用于处理重解析点,(包括符号链接和目录连接)的手动逻辑已被委托给操作系统。 特别地,:func:`os.stat` " +"现在将会遍历操作系统所支持的任何内容,而 :func:`os.lstat` 将只打开被标识为“名称代理”的重解析点,而其要由 " +":func:`os.stat` 打开其他的重解析点。 在所有情况下,:attr:`stat_result.st_mode` " +"将只为符号链接而非其他种类的重解析点设置 ``S_IFLNK``。 要标识其他种类的重解析点,请检查新的 " +":attr:`stat_result.st_reparse_tag` 属性。" + +#: ../../whatsnew/3.8.rst:1039 +msgid "" +"On Windows, :func:`os.readlink` is now able to read directory junctions. " +"Note that :func:`~os.path.islink` will return ``False`` for directory " +"junctions, and so code that checks ``islink`` first will continue to treat " +"junctions as directories, while code that handles errors from " +":func:`os.readlink` may now treat junctions as links." +msgstr "" +"在 Windows 上,:func:`os.readlink` 现在能够读取目录连接。 请注意 :func:`~os.path.islink` " +"会对目录连接返回 ``False``,因此首先检查 ``islink`` 的代码将连续把连接视为目录,而会处理 :func:`os.readlink` " +"所引发错误的代码现在会把连接视为链接。" + +#: ../../whatsnew/3.8.rst:1045 ../../whatsnew/3.8.rst:1070 +msgid "(Contributed by Steve Dower in :issue:`37834`.)" +msgstr "(由 Steve Dower 在 :issue:`37834` 中贡献。)" + +#: ../../whatsnew/3.8.rst:1049 +msgid "os.path" +msgstr "os.path" + +#: ../../whatsnew/3.8.rst:1051 +msgid "" +":mod:`os.path` functions that return a boolean result like " +":func:`~os.path.exists`, :func:`~os.path.lexists`, :func:`~os.path.isdir`, " +":func:`~os.path.isfile`, :func:`~os.path.islink`, and " +":func:`~os.path.ismount` now return ``False`` instead of raising " +":exc:`ValueError` or its subclasses :exc:`UnicodeEncodeError` and " +":exc:`UnicodeDecodeError` for paths that contain characters or bytes " +"unrepresentable at the OS level. (Contributed by Serhiy Storchaka in " +":issue:`33721`.)" +msgstr "" +"返回布尔值结果的 :mod:`os.path` 函数例如 :func:`~os.path.exists`, " +":func:`~os.path.lexists`, :func:`~os.path.isdir`, :func:`~os.path.isfile`, " +":func:`~os.path.islink`, 以及 :func:`~os.path.ismount` 现在对于包含在 OS " +"层级无法表示的字符或字节的路径将会返回 ``False`` 而不是引发 :exc:`ValueError` 或其子类 " +":exc:`UnicodeEncodeError` 和 :exc:`UnicodeDecodeError`。 (由 Serhiy Storchaka 在" +" :issue:`33721` 中贡献。)" + +#: ../../whatsnew/3.8.rst:1059 ../../whatsnew/3.8.rst:1959 +msgid "" +":func:`~os.path.expanduser` on Windows now prefers the :envvar:`USERPROFILE`" +" environment variable and does not use :envvar:`HOME`, which is not normally" +" set for regular user accounts. (Contributed by Anthony Sottile in " +":issue:`36264`.)" +msgstr "" +":func:`~os.path.expanduser` 在 Windows 上现在改用 :envvar:`USERPROFILE` 环境变量而不再使用 " +":envvar:`HOME`,后者通常不会为一般用户账户设置。 (由 Anthony Sottile 在 :issue:`36264` 中贡献。)" + +#: ../../whatsnew/3.8.rst:1064 +msgid "" +":func:`~os.path.isdir` on Windows no longer returns ``True`` for a link to a" +" non-existent directory." +msgstr ":func:`~os.path.isdir` 在 Windows 上将不再为不存在的目录的链接返回 ``True``。" + +#: ../../whatsnew/3.8.rst:1067 +msgid "" +":func:`~os.path.realpath` on Windows now resolves reparse points, including " +"symlinks and directory junctions." +msgstr ":func:`~os.path.realpath` 在 Windows 上现在会识别重解析点,包括符号链接和目录连接。" + +#: ../../whatsnew/3.8.rst:1074 +msgid "pathlib" +msgstr "pathlib" + +#: ../../whatsnew/3.8.rst:1076 +msgid "" +":mod:`pathlib.Path` methods that return a boolean result like " +":meth:`~pathlib.Path.exists()`, :meth:`~pathlib.Path.is_dir()`, " +":meth:`~pathlib.Path.is_file()`, :meth:`~pathlib.Path.is_mount()`, " +":meth:`~pathlib.Path.is_symlink()`, :meth:`~pathlib.Path.is_block_device()`," +" :meth:`~pathlib.Path.is_char_device()`, :meth:`~pathlib.Path.is_fifo()`, " +":meth:`~pathlib.Path.is_socket()` now return ``False`` instead of raising " +":exc:`ValueError` or its subclass :exc:`UnicodeEncodeError` for paths that " +"contain characters unrepresentable at the OS level. (Contributed by Serhiy " +"Storchaka in :issue:`33721`.)" +msgstr "" +"返回布尔值结果的 :mod:`pathlib.Path` 方法例如 :meth:`~pathlib.Path.exists()`, " +":meth:`~pathlib.Path.is_dir()`, :meth:`~pathlib.Path.is_file()`, " +":meth:`~pathlib.Path.is_mount()`, :meth:`~pathlib.Path.is_symlink()`, " +":meth:`~pathlib.Path.is_block_device()`, " +":meth:`~pathlib.Path.is_char_device()`, :meth:`~pathlib.Path.is_fifo()`, " +":meth:`~pathlib.Path.is_socket()` 现在对于包含在 OS 层级无法表示的字符或字节的路径将会返回 ``False`` " +"而不是引发 :exc:`ValueError` 或其子类 :exc:`UnicodeEncodeError`。 (由 Serhiy Storchaka " +"在 :issue:`33721` 中贡献。)" + +#: ../../whatsnew/3.8.rst:1086 +msgid "" +"Added :meth:`pathlib.Path.link_to()` which creates a hard link pointing to a" +" path. (Contributed by Joannah Nanjekye in :issue:`26978`)" +msgstr "" +"增加了 :meth:`pathlib.Path.link_to()` 用于创建指向路径的硬链接。 (由 Joannah Nanjekye 在 " +":issue:`26978` 中贡献。)" + +#: ../../whatsnew/3.8.rst:1092 +msgid "pickle" +msgstr "pickle" + +#: ../../whatsnew/3.8.rst:1094 +msgid "" +":mod:`pickle` extensions subclassing the C-optimized " +":class:`~pickle.Pickler` can now override the pickling logic of functions " +"and classes by defining the special :meth:`~pickle.Pickler.reducer_override`" +" method. (Contributed by Pierre Glaser and Olivier Grisel in " +":issue:`35900`.)" +msgstr "" +":mod:`pickle` 扩展子类化针对 C 优化的 :class:`~pickle.Pickler` 现在可通过定义特殊的 " +":meth:`~pickle.Pickler.reducer_override` 方法来重载函数和类的封存逻辑。 (由 Pierre Glaser 和 " +"Olivier Grisel 在 :issue:`35900` 中贡献。)" + +#: ../../whatsnew/3.8.rst:1101 +msgid "plistlib" +msgstr "plistlib" + +#: ../../whatsnew/3.8.rst:1103 +msgid "" +"Added new :class:`plistlib.UID` and enabled support for reading and writing " +"NSKeyedArchiver-encoded binary plists. (Contributed by Jon Janzen in " +":issue:`26707`.)" +msgstr "" +"添加了新的 :class:`plistlib.UID` 并启动了对读取和写入经过 NSKeyedArchiver 编码的二进制 plists 的支持。 " +"(由 Jon Janzen 在 :issue:`26707` 中贡献。)" + +#: ../../whatsnew/3.8.rst:1109 +msgid "pprint" +msgstr "pprint" + +#: ../../whatsnew/3.8.rst:1111 +msgid "" +"The :mod:`pprint` module added a *sort_dicts* parameter to several " +"functions. By default, those functions continue to sort dictionaries before " +"rendering or printing. However, if *sort_dicts* is set to false, the " +"dictionaries retain the order that keys were inserted. This can be useful " +"for comparison to JSON inputs during debugging." +msgstr "" +":mod:`pprint` 模块为一些函数添加了 *sort_dicts* 形参。 默认情况下,这些函数会继续在渲染或打印之前对字典进行排序。 " +"但是,如果 *sort_dicts* 设为假值,则字典将保持键插入时的顺序。 这在调试期间与 JSON 输入进行比较时会很有用。" + +#: ../../whatsnew/3.8.rst:1117 +msgid "" +"In addition, there is a convenience new function, :func:`pprint.pp` that is " +"like :func:`pprint.pprint` but with *sort_dicts* defaulting to ``False``::" +msgstr "" +"除此之外,还增加了一个方便的新函数 :func:`pprint.pp`,它类似于 :func:`pprint.pprint` 但它的 " +"*sort_dicts* 默认为 ``False``::" + +#: ../../whatsnew/3.8.rst:1131 +msgid "(Contributed by Rémi Lapeyre in :issue:`30670`.)" +msgstr "(由 Rémi Lapeyre 在 :issue:`30670` 中贡献。)" + +#: ../../whatsnew/3.8.rst:1135 +msgid "py_compile" +msgstr "py_compile" + +#: ../../whatsnew/3.8.rst:1137 +msgid "" +":func:`py_compile.compile` now supports silent mode. (Contributed by Joannah" +" Nanjekye in :issue:`22640`.)" +msgstr "" +":func:`py_compile.compile` 现在支持静默模式。 (由 Joannah Nanjekye 在 :issue:`22640` " +"中贡献。)" + +#: ../../whatsnew/3.8.rst:1142 +msgid "shlex" +msgstr "shlex" + +#: ../../whatsnew/3.8.rst:1144 +msgid "" +"The new :func:`shlex.join` function acts as the inverse of " +":func:`shlex.split`. (Contributed by Bo Bayles in :issue:`32102`.)" +msgstr "" +"新增了 :func:`shlex.join` 函数作为 :func:`shlex.split` 的逆操作。 (由 Bo Bayles 在 " +":issue:`32102` 中贡献。)" + +#: ../../whatsnew/3.8.rst:1149 +msgid "shutil" +msgstr "shutil" + +#: ../../whatsnew/3.8.rst:1151 +msgid "" +":func:`shutil.copytree` now accepts a new ``dirs_exist_ok`` keyword " +"argument. (Contributed by Josh Bronson in :issue:`20849`.)" +msgstr "" +":func:`shutil.copytree` 现在接受新的 ``dirs_exist_ok`` 关键字参数。 (由 Josh Bronson 在 " +":issue:`20849` 中贡献。)" + +#: ../../whatsnew/3.8.rst:1154 +msgid "" +":func:`shutil.make_archive` now defaults to the modern pax (POSIX.1-2001) " +"format for new archives to improve portability and standards conformance, " +"inherited from the corresponding change to the :mod:`tarfile` module. " +"(Contributed by C.A.M. Gerlach in :issue:`30661`.)" +msgstr "" +":func:`shutil.make_archive` 现在对新的归档默认使用 modern pax (POSIX.1-2001) " +"格式以提升可移植性和标准一致性,此特性继承自对 :mod:`tarfile` 模块的相应更改。 (由 C.A.M. Gerlach 在 " +":issue:`30661` 中贡献。)" + +#: ../../whatsnew/3.8.rst:1159 +msgid "" +":func:`shutil.rmtree` on Windows now removes directory junctions without " +"recursively removing their contents first. (Contributed by Steve Dower in " +":issue:`37834`.)" +msgstr "" +":func:`shutil.rmtree` 在 Windows 上现在会移除目录连接而不会递归地先移除其中的内容。 (由 Steve Dower 在 " +":issue:`37834` 中贡献。)" + +#: ../../whatsnew/3.8.rst:1165 +msgid "socket" +msgstr "socket" + +#: ../../whatsnew/3.8.rst:1167 +msgid "" +"Added :meth:`~socket.create_server()` and " +":meth:`~socket.has_dualstack_ipv6()` convenience functions to automate the " +"necessary tasks usually involved when creating a server socket, including " +"accepting both IPv4 and IPv6 connections on the same socket. (Contributed " +"by Giampaolo Rodolà in :issue:`17561`.)" +msgstr "" +"添加了便捷的 :meth:`~socket.create_server()` 和 " +":meth:`~socket.has_dualstack_ipv6()` " +"函数以自动化在创建服务器套接字时通常情况下所必须的任务,包括在同一套接字中同时接受 IPv4 和 IPv6 连接。 (由 Giampaolo " +"Rodolà 在 :issue:`17561` 中贡献。)" + +#: ../../whatsnew/3.8.rst:1172 +msgid "" +"The :func:`socket.if_nameindex()`, :func:`socket.if_nametoindex()`, and " +":func:`socket.if_indextoname()` functions have been implemented on Windows. " +"(Contributed by Zackery Spytz in :issue:`37007`.)" +msgstr "" +":func:`socket.if_nameindex()`, :func:`socket.if_nametoindex()` 和 " +":func:`socket.if_indextoname()` 函数已经在 Windows 上实现。 (由 Zackery Spytz 在 " +":issue:`37007` 中贡献。)" + +#: ../../whatsnew/3.8.rst:1178 +msgid "ssl" +msgstr "ssl" + +#: ../../whatsnew/3.8.rst:1180 +msgid "" +"Added :attr:`~ssl.SSLContext.post_handshake_auth` to enable and " +":meth:`~ssl.SSLSocket.verify_client_post_handshake` to initiate TLS 1.3 " +"post-handshake authentication. (Contributed by Christian Heimes in " +":issue:`34670`.)" +msgstr "" +"增加了 :attr:`~ssl.SSLContext.post_handshake_auth` 和 " +":meth:`~ssl.SSLSocket.verify_client_post_handshake` 分别启用和初始化 TLS 1.3 握手后验证。 " +"(由 Christian Heimes 在 :issue:`34670` 中贡献。)" + +#: ../../whatsnew/3.8.rst:1187 +msgid "statistics" +msgstr "statistics" + +#: ../../whatsnew/3.8.rst:1189 +msgid "" +"Added :func:`statistics.fmean` as a faster, floating point variant of " +":func:`statistics.mean()`. (Contributed by Raymond Hettinger and Steven " +"D'Aprano in :issue:`35904`.)" +msgstr "" +"添加了 :func:`statistics.fmean` 作为 :func:`statistics.mean()` 的更快速的浮点数版版本。 (由 " +"Raymond Hettinger 和 Steven D'Aprano 在 :issue:`35904` 中贡献。)" + +#: ../../whatsnew/3.8.rst:1193 +msgid "" +"Added :func:`statistics.geometric_mean()` (Contributed by Raymond Hettinger " +"in :issue:`27181`.)" +msgstr "" +"添加了 :func:`statistics.geometric_mean()` (由 Raymond Hettinger 在 " +":issue:`27181` 中贡献。)" + +#: ../../whatsnew/3.8.rst:1196 +msgid "" +"Added :func:`statistics.multimode` that returns a list of the most common " +"values. (Contributed by Raymond Hettinger in :issue:`35892`.)" +msgstr "" +"添加了 :func:`statistics.multimode` 用于返回最常见值的列表。 (由 Raymond Hettinger 在 " +":issue:`35892` 中贡献。)" + +#: ../../whatsnew/3.8.rst:1199 +msgid "" +"Added :func:`statistics.quantiles` that divides data or a distribution in to" +" equiprobable intervals (e.g. quartiles, deciles, or percentiles). " +"(Contributed by Raymond Hettinger in :issue:`36546`.)" +msgstr "" +"添加了 :func:`statistics.quantiles` 用于将数据或分布划分为多个等概率区间(例如四分位、十分位或百分位)。 (由 " +"Raymond Hettinger 在 :issue:`36546` 中贡献。)" + +#: ../../whatsnew/3.8.rst:1203 +msgid "" +"Added :class:`statistics.NormalDist`, a tool for creating and manipulating " +"normal distributions of a random variable. (Contributed by Raymond Hettinger" +" in :issue:`36018`.)" +msgstr "" +"添加了 :class:`statistics.NormalDist` 用于创建和操纵随机变量的正态分布。 (由 Raymond Hettinger 在 " +":issue:`36018` 中贡献。)" + +#: ../../whatsnew/3.8.rst:1233 +msgid "sys" +msgstr "sys" + +#: ../../whatsnew/3.8.rst:1235 +msgid "" +"Add new :func:`sys.unraisablehook` function which can be overridden to " +"control how \"unraisable exceptions\" are handled. It is called when an " +"exception has occurred but there is no way for Python to handle it. For " +"example, when a destructor raises an exception or during garbage collection " +"(:func:`gc.collect`). (Contributed by Victor Stinner in :issue:`36829`.)" +msgstr "" +"添加了新的 :func:`sys.unraisablehook` 函数,可被重载以便控制如何处理“不可引发的异常”。 它会在发生了一个异常但 " +"Python 没有办法处理时被调用。 例如,当一个析构器在垃圾回收时 (:func:`gc.collect`) 所引发的异常。 (由 Victor " +"Stinner 在 :issue:`36829` 中贡献。)" + +#: ../../whatsnew/3.8.rst:1244 +msgid "tarfile" +msgstr "tarfile" + +#: ../../whatsnew/3.8.rst:1246 +msgid "" +"The :mod:`tarfile` module now defaults to the modern pax (POSIX.1-2001) " +"format for new archives, instead of the previous GNU-specific one. This " +"improves cross-platform portability with a consistent encoding (UTF-8) in a " +"standardized and extensible format, and offers several other benefits. " +"(Contributed by C.A.M. Gerlach in :issue:`36268`.)" +msgstr "" +":mod:`tarfile` 模块现在对新的归档默认使用 modern pax (POSIX.1-2001) 格式而不再是之前的 GNU 专属格式。 " +"这通过标准化和可扩展格式的统一编码 (UTF-8) 提升了跨平台可移植性,还提供了其他一些益处。 (由 C.A.M. Gerlach 在 " +":issue:`36268` 中贡献。)" + +#: ../../whatsnew/3.8.rst:1254 +msgid "threading" +msgstr "threading" + +#: ../../whatsnew/3.8.rst:1256 +msgid "" +"Add a new :func:`threading.excepthook` function which handles uncaught " +":meth:`threading.Thread.run` exception. It can be overridden to control how " +"uncaught :meth:`threading.Thread.run` exceptions are handled. (Contributed " +"by Victor Stinner in :issue:`1230540`.)" +msgstr "" +"添加了新的 :func:`threading.excepthook` 函数用来处理未捕获的 :meth:`threading.Thread.run` " +"异常。 它可被重载以便控制如何处理未捕获的 :meth:`threading.Thread.run` 异常。 (由 Victor Stinner 在 " +":issue:`1230540` 中贡献。)" + +#: ../../whatsnew/3.8.rst:1261 +msgid "" +"Add a new :func:`threading.get_native_id` function and a " +":data:`~threading.Thread.native_id` attribute to the " +":class:`threading.Thread` class. These return the native integral Thread ID " +"of the current thread assigned by the kernel. This feature is only available" +" on certain platforms, see :func:`get_native_id ` " +"for more information. (Contributed by Jake Tesler in :issue:`36084`.)" +msgstr "" +"添加了新的 :func:`threading.get_native_id` 函数以及 :class:`threading.Thread` 类的 " +":data:`~threading.Thread.native_id` 属性。 它们会返回内核所分配给当前线程的原生整数线程 ID。 " +"此特性仅在特定平台上可用,参见 :func:`get_native_id ` 了解详情。 (由 " +"Jake Tesler 在 :issue:`36084` 中贡献。)" + +#: ../../whatsnew/3.8.rst:1271 +msgid "tokenize" +msgstr "tokenize" + +#: ../../whatsnew/3.8.rst:1273 +msgid "" +"The :mod:`tokenize` module now implicitly emits a ``NEWLINE`` token when " +"provided with input that does not have a trailing new line. This behavior " +"now matches what the C tokenizer does internally. (Contributed by Ammar " +"Askar in :issue:`33899`.)" +msgstr "" +"当提供不带末尾新行的输入时,:mod:`tokenize` 模块现在会隐式地添加 ``NEWLINE`` 形符。 此行为现在已与 C " +"词法分析器的内部行为相匹配。 (由 Ammar Askar 在 :issue:`33899` 中贡献。)" + +#: ../../whatsnew/3.8.rst:1280 +msgid "tkinter" +msgstr "tkinter" + +#: ../../whatsnew/3.8.rst:1282 +msgid "" +"Added methods :meth:`~tkinter.Spinbox.selection_from`, " +":meth:`~tkinter.Spinbox.selection_present`, " +":meth:`~tkinter.Spinbox.selection_range` and " +":meth:`~tkinter.Spinbox.selection_to` in the :class:`tkinter.Spinbox` class." +" (Contributed by Juliette Monsel in :issue:`34829`.)" +msgstr "" +"在 :class:`tkinter.Spinbox` 中添加了方法 :meth:`~tkinter.Spinbox.selection_from`, " +":meth:`~tkinter.Spinbox.selection_present`, " +":meth:`~tkinter.Spinbox.selection_range` 和 " +":meth:`~tkinter.Spinbox.selection_to`。 (由 Juliette Monsel 在 :issue:`34829` " +"中贡献。)" + +#: ../../whatsnew/3.8.rst:1289 +msgid "" +"Added method :meth:`~tkinter.Canvas.moveto` in the :class:`tkinter.Canvas` " +"class. (Contributed by Juliette Monsel in :issue:`23831`.)" +msgstr "" +"在 :class:`tkinter.Canvas` 类中添加了方法 :meth:`~tkinter.Canvas.moveto`。 (由 " +"Juliette Monsel 在 :issue:`23831` 中贡献。)" + +#: ../../whatsnew/3.8.rst:1293 +msgid "" +"The :class:`tkinter.PhotoImage` class now has " +":meth:`~tkinter.PhotoImage.transparency_get` and " +":meth:`~tkinter.PhotoImage.transparency_set` methods. (Contributed by " +"Zackery Spytz in :issue:`25451`.)" +msgstr "" +":class:`tkinter.PhotoImage` 类现在具有 " +":meth:`~tkinter.PhotoImage.transparency_get` 和 " +":meth:`~tkinter.PhotoImage.transparency_set` 方法。 (由 Zackery Spytz 在 " +":issue:`25451` 中贡献。)" + +#: ../../whatsnew/3.8.rst:1300 +msgid "time" +msgstr "time" + +#: ../../whatsnew/3.8.rst:1302 +msgid "" +"Added new clock :data:`~time.CLOCK_UPTIME_RAW` for macOS 10.12. (Contributed" +" by Joannah Nanjekye in :issue:`35702`.)" +msgstr "" +"为 macOS 10.12 添加了新的时钟 :data:`~time.CLOCK_UPTIME_RAW`。 (由 Joannah Nanjekye 在 " +":issue:`35702` 中贡献。)" + +#: ../../whatsnew/3.8.rst:1307 +msgid "typing" +msgstr "typing" + +#: ../../whatsnew/3.8.rst:1309 +msgid "The :mod:`typing` module incorporates several new features:" +msgstr ":mod:`typing` 模块加入了一些新特性:" + +#: ../../whatsnew/3.8.rst:1311 +msgid "" +"A dictionary type with per-key types. See :pep:`589` and " +":class:`typing.TypedDict`. TypedDict uses only string keys. By default, " +"every key is required to be present. Specify \"total=False\" to allow keys " +"to be optional::" +msgstr "" +"一个带有键专属类型的字典类型。 参见 :pep:`589` 和 :class:`typing.TypedDict`。 TypedDict " +"只使用字符串作为键。 默认情况下每个键都要求提供。 指定 \"total=False\" 以允许键作为可选项::" + +#: ../../whatsnew/3.8.rst:1321 +msgid "" +"Literal types. See :pep:`586` and :class:`typing.Literal`. Literal types " +"indicate that a parameter or return value is constrained to one or more " +"specific literal values::" +msgstr "" +"Literal 类型。 参见 :pep:`586` 和 :class:`typing.Literal`。 Literal " +"类型指明一个形参或返回值被限定为一个或多个特定的字面值::" + +#: ../../whatsnew/3.8.rst:1328 +msgid "" +"\"Final\" variables, functions, methods and classes. See :pep:`591`, " +":class:`typing.Final` and :func:`typing.final`. The final qualifier " +"instructs a static type checker to restrict subclassing, overriding, or " +"reassignment::" +msgstr "" +"\"Final\" 变量、函数、方法和类。 参见 :pep:`591`, :class:`typing.Final` 和 " +":func:`typing.final`。 final 限定符会指示静态类型检查器限制进行子类化、重载或重新赋值::" + +#: ../../whatsnew/3.8.rst:1335 +msgid "" +"Protocol definitions. See :pep:`544`, :class:`typing.Protocol` and " +":func:`typing.runtime_checkable`. Simple ABCs like " +":class:`typing.SupportsInt` are now ``Protocol`` subclasses." +msgstr "" +"协议定义。 参见 :pep:`544`, :class:`typing.Protocol` 和 " +":func:`typing.runtime_checkable`。 简单的 ABC 例如 :class:`typing.SupportsInt` 现在是" +" ``Protocol`` 的子类。" + +#: ../../whatsnew/3.8.rst:1339 +msgid "New protocol class :class:`typing.SupportsIndex`." +msgstr "新的协议类 :class:`typing.SupportsIndex`。" + +#: ../../whatsnew/3.8.rst:1341 +msgid "New functions :func:`typing.get_origin` and :func:`typing.get_args`." +msgstr "新的函数 :func:`typing.get_origin` 和 :func:`typing.get_args`。" + +#: ../../whatsnew/3.8.rst:1345 +msgid "unicodedata" +msgstr "unicodedata" + +#: ../../whatsnew/3.8.rst:1347 +msgid "" +"The :mod:`unicodedata` module has been upgraded to use the `Unicode 12.1.0 " +"`_ release." +msgstr "" +":mod:`unicodedata` 模块现在已升级为使用 `Unicode 12.1.0 " +"`_ 发布版。" + +#: ../../whatsnew/3.8.rst:1350 +msgid "" +"New function :func:`~unicodedata.is_normalized` can be used to verify a " +"string is in a specific normal form, often much faster than by actually " +"normalizing the string. (Contributed by Max Belanger, David Euresti, and " +"Greg Price in :issue:`32285` and :issue:`37966`)." +msgstr "" +"新的函数 :func:`~unicodedata.is_normalized` " +"可被用来验证字符串是否为特定正规形式,通常会比实际进行字符串正规化要快得多。 (由 Max Belanger, David Euresti 和 Greg" +" Price 在 :issue:`32285` 和 :issue:`37966` 中贡献。)" + +#: ../../whatsnew/3.8.rst:1357 +msgid "unittest" +msgstr "unittest" + +#: ../../whatsnew/3.8.rst:1359 +msgid "" +"Added :class:`~unittest.mock.AsyncMock` to support an asynchronous version " +"of :class:`~unittest.mock.Mock`. Appropriate new assert functions for " +"testing have been added as well. (Contributed by Lisa Roach in " +":issue:`26467`)." +msgstr "" +"添加了 :class:`~unittest.mock.AsyncMock` 以支持异步版本的 :class:`~unittest.mock.Mock`。" +" 同时也添加了相应的断言函数用于测试。 (由 Lisa Roach 在 :issue:`26467` 中贡献。)" + +#: ../../whatsnew/3.8.rst:1364 +msgid "" +"Added :func:`~unittest.addModuleCleanup()` and " +":meth:`~unittest.TestCase.addClassCleanup()` to unittest to support cleanups" +" for :func:`~unittest.setUpModule()` and " +":meth:`~unittest.TestCase.setUpClass()`. (Contributed by Lisa Roach in " +":issue:`24412`.)" +msgstr "" +"unittest 添加了 :func:`~unittest.addModuleCleanup()` 和 " +":meth:`~unittest.TestCase.addClassCleanup()` 以支持对 " +":func:`~unittest.setUpModule()` 和 :meth:`~unittest.TestCase.setUpClass()` " +"进行清理。 (由 Lisa Roach 在 :issue:`24412` 中贡献。)" + +#: ../../whatsnew/3.8.rst:1370 +msgid "" +"Several mock assert functions now also print a list of actual calls upon " +"failure. (Contributed by Petter Strandmark in :issue:`35047`.)" +msgstr "" +"一些模拟断言函数现在也会在失败时打印一个实际调用列表。 (由 Petter Strandmark 在 :issue:`35047` 中贡献。)" + +#: ../../whatsnew/3.8.rst:1373 +msgid "" +":mod:`unittest` module gained support for coroutines to be used as test " +"cases with :class:`unittest.IsolatedAsyncioTestCase`. (Contributed by Andrew" +" Svetlov in :issue:`32972`.)" +msgstr "" +":mod:`unittest` 模块已支持通过 :class:`unittest.IsolatedAsyncioTestCase` " +"来使用协程作为测试用例。 (由 Andrew Svetlov 在 :issue:`32972` 中贡献。)" + +#: ../../whatsnew/3.8.rst:1377 +msgid "Example::" +msgstr "示例::" + +#: ../../whatsnew/3.8.rst:1400 +msgid "venv" +msgstr "venv" + +#: ../../whatsnew/3.8.rst:1402 +msgid "" +":mod:`venv` now includes an ``Activate.ps1`` script on all platforms for " +"activating virtual environments under PowerShell Core 6.1. (Contributed by " +"Brett Cannon in :issue:`32718`.)" +msgstr "" +"现在 :mod:`venv` 在所有平台上都会包含 ``Activate.ps1`` 脚本用于在 PowerShell Core 6.1 " +"下激活虚拟环境。 (由 Brett Cannon 在 :issue:`32718` 中贡献。)" + +#: ../../whatsnew/3.8.rst:1408 +msgid "weakref" +msgstr "weakref" + +#: ../../whatsnew/3.8.rst:1410 +msgid "" +"The proxy objects returned by :func:`weakref.proxy` now support the matrix " +"multiplication operators ``@`` and ``@=`` in addition to the other numeric " +"operators. (Contributed by Mark Dickinson in :issue:`36669`.)" +msgstr "" +"由 :func:`weakref.proxy` 返回的代理对象现在除其他算术运算符外也支持矩阵乘法运算符 ``@`` 和 ``@=``。 (由 Mark" +" Dickinson 在 :issue:`36669` 中贡献。)" + +#: ../../whatsnew/3.8.rst:1416 +msgid "xml" +msgstr "xml" + +#: ../../whatsnew/3.8.rst:1418 +msgid "" +"As mitigation against DTD and external entity retrieval, the " +":mod:`xml.dom.minidom` and :mod:`xml.sax` modules no longer process external" +" entities by default. (Contributed by Christian Heimes in :issue:`17239`.)" +msgstr "" +"作为对 DTD 和外部实体检索的缓解,在默认情况下 :mod:`xml.dom.minidom` 和 :mod:`xml.sax` " +"模块不再处理外部实体。 (由 Christian Heimes 在 :issue:`17239` 中贡献。)" + +#: ../../whatsnew/3.8.rst:1423 +msgid "" +"The ``.find*()`` methods in the :mod:`xml.etree.ElementTree` module support " +"wildcard searches like ``{*}tag`` which ignores the namespace and " +"``{namespace}*`` which returns all tags in the given namespace. (Contributed" +" by Stefan Behnel in :issue:`28238`.)" +msgstr "" +":mod:`xml.etree.ElementTree` 模块中的 ``.find*()`` 方法支持通配符搜索例如 " +"``{*}tag``,此搜索会忽略命名空间以及返回给定命名空间中所有标签的 ``{namespace}*``。 (由 Stefan Behnel 在 " +":issue:`28238` 中贡献。)" + +#: ../../whatsnew/3.8.rst:1428 +msgid "" +"The :mod:`xml.etree.ElementTree` module provides a new function " +":func:`–xml.etree.ElementTree.canonicalize()` that implements C14N 2.0. " +"(Contributed by Stefan Behnel in :issue:`13611`.)" +msgstr "" +":mod:`xml.etree.ElementTree` 模块提供了实现 C14N 2.0 的新函数 " +":func:`–xml.etree.ElementTree.canonicalize()`。 (由 Stefan Behnel 在 " +":issue:`13611` 中贡献。)" + +#: ../../whatsnew/3.8.rst:1432 +msgid "" +"The target object of :class:`xml.etree.ElementTree.XMLParser` can receive " +"namespace declaration events through the new callback methods ``start_ns()``" +" and ``end_ns()``. Additionally, the " +":class:`xml.etree.ElementTree.TreeBuilder` target can be configured to " +"process events about comments and processing instructions to include them in" +" the generated tree. (Contributed by Stefan Behnel in :issue:`36676` and " +":issue:`36673`.)" +msgstr "" +":class:`xml.etree.ElementTree.XMLParser` 的目标对象可通过新的回调方法 ``start_ns()`` 和 " +"``end_ns()`` 来接受命名空间声明事件。 此外,:class:`xml.etree.ElementTree.TreeBuilder` " +"目标可被配置为处理有关注释和处理指令事件以将它们包含在所生成的树当中。 (由 Stefan Behnel 在 :issue:`36676` 和 " +":issue:`36673` 中贡献。)" + +#: ../../whatsnew/3.8.rst:1442 +msgid "xmlrpc" +msgstr "xmlrpc" + +#: ../../whatsnew/3.8.rst:1444 +msgid "" +":class:`xmlrpc.client.ServerProxy` now supports an optional *headers* " +"keyword argument for a sequence of HTTP headers to be sent with each " +"request. Among other things, this makes it possible to upgrade from default" +" basic authentication to faster session authentication. (Contributed by " +"Cédric Krier in :issue:`35153`.)" +msgstr "" +":class:`xmlrpc.client.ServerProxy` 现在支持可选的 *headers* 关键字参数作为随同每次请求发送的 HTTP " +"标头序列。 此特征的作用之一是使得从默认的基础认证升级到更快速的会话认证成为可能。 (由 Cédric Krier 在 :issue:`35153` " +"中贡献。)" + +#: ../../whatsnew/3.8.rst:1452 +msgid "Optimizations" +msgstr "性能优化" + +#: ../../whatsnew/3.8.rst:1454 +msgid "" +"The :mod:`subprocess` module can now use the :func:`os.posix_spawn` function" +" in some cases for better performance. Currently, it is only used on macOS " +"and Linux (using glibc 2.24 or newer) if all these conditions are met:" +msgstr "" +":mod:`subprocess` 模块现在能在某些情况下使用 :func:`os.posix_spawn` 函数以获得更好的性能。 目前,它的使用仅限" +" macOS 和 Linux(使用 glibc 2.24 或更新版本),并要求满足以下条件:" + +#: ../../whatsnew/3.8.rst:1458 +msgid "*close_fds* is false;" +msgstr "*close_fds* 为假值;" + +#: ../../whatsnew/3.8.rst:1459 +msgid "" +"*preexec_fn*, *pass_fds*, *cwd* and *start_new_session* parameters are not " +"set;" +msgstr "*preexec_fn*, *pass_fds*, *cwd* 和 *start_new_session* 形参未设置;" + +#: ../../whatsnew/3.8.rst:1461 +msgid "the *executable* path contains a directory." +msgstr "*executable* 路径包含一个目录。" + +#: ../../whatsnew/3.8.rst:1463 +msgid "" +"(Contributed by Joannah Nanjekye and Victor Stinner in :issue:`35537`.)" +msgstr "(由 Joannah Nanjekye 和 Victor Stinner 在 :issue:`35537` 中贡献。)" + +#: ../../whatsnew/3.8.rst:1465 +msgid "" +":func:`shutil.copyfile`, :func:`shutil.copy`, :func:`shutil.copy2`, " +":func:`shutil.copytree` and :func:`shutil.move` use platform-specific " +"\"fast-copy\" syscalls on Linux and macOS in order to copy the file more " +"efficiently. \"fast-copy\" means that the copying operation occurs within " +"the kernel, avoiding the use of userspace buffers in Python as in " +"\"``outfd.write(infd.read())``\". On Windows :func:`shutil.copyfile` uses a " +"bigger default buffer size (1 MiB instead of 16 KiB) and a " +":func:`memoryview`-based variant of :func:`shutil.copyfileobj` is used. The " +"speedup for copying a 512 MiB file within the same partition is about +26% " +"on Linux, +50% on macOS and +40% on Windows. Also, much less CPU cycles are " +"consumed. See :ref:`shutil-platform-dependent-efficient-copy-operations` " +"section. (Contributed by Giampaolo Rodolà in :issue:`33671`.)" +msgstr "" +":func:`shutil.copyfile`, :func:`shutil.copy`, :func:`shutil.copy2`, " +":func:`shutil.copytree` 和 :func:`shutil.move` 在 Linux 和 macOS 上会使用平台专属的 " +"\"fast-copy\" 系统调用以提高效率。 \"fast-copy\" 意味着拷贝操作发生于内核中,从而避免在进行 " +"\"``outfd.write(infd.read())``\" 等操作时使用 Python 中的用户空间缓冲区。 在 Windows 上 " +":func:`shutil.copyfile` 会使用更大的默认缓冲区(1 MiB 而不是 16 KiB)并且使用基于 " +":func:`memoryview` 的 :func:`shutil.copyfileobj` 版本。 在同一分区内拷贝一个 512 MiB " +"文件的速度提升在 Linux 上约为 +26%,在 macOS 上为 +50%,在 Windows 上为 +40%。 此外还将消耗更少的 CPU 周期。" +" 参见 :ref:`shutil-platform-dependent-efficient-copy-operations` 一节。 (由 " +"Giampaolo Rodolà 在 :issue:`33671` 中贡献。)" + +#: ../../whatsnew/3.8.rst:1481 +msgid "" +":func:`shutil.copytree` uses :func:`os.scandir` function and all copy " +"functions depending from it use cached :func:`os.stat` values. The speedup " +"for copying a directory with 8000 files is around +9% on Linux, +20% on " +"Windows and +30% on a Windows SMB share. Also the number of :func:`os.stat` " +"syscalls is reduced by 38% making :func:`shutil.copytree` especially faster " +"on network filesystems. (Contributed by Giampaolo Rodolà in :issue:`33695`.)" +msgstr "" +":func:`shutil.copytree` 会根据其所用缓存的 :func:`os.stat` 值使用 :func:`os.scandir` " +"函数及所有拷贝函数。 拷贝一个包含 8000 文件的目录的速度提升在 Linux 上约为 +9%,在 Windows 上为 +20%,对于 " +"Windows SMB 共享目录则为 +30%。 此外 :func:`os.stat` 系统调用的次数也减少了 38%,使得 " +":func:`shutil.copytree` 在网络文件系统上会特别快速。 (由Giampaolo Rodolà 在 :issue:`33695` " +"中贡献。)" + +#: ../../whatsnew/3.8.rst:1488 +msgid "" +"The default protocol in the :mod:`pickle` module is now Protocol 4, first " +"introduced in Python 3.4. It offers better performance and smaller size " +"compared to Protocol 3 available since Python 3.0." +msgstr "" +":mod:`pickle` 模块使用的默认协议现在为 Protocol 4,最早在 Python 3.4 中被引入。 它提供了比自 Python 3.0" +" 起可用的 Protocol 3 更好的性能和更小的数据尺寸。" + +#: ../../whatsnew/3.8.rst:1492 +msgid "" +"Removed one :c:type:`Py_ssize_t` member from ``PyGC_Head``. All GC tracked " +"objects (e.g. tuple, list, dict) size is reduced 4 or 8 bytes. (Contributed " +"by Inada Naoki in :issue:`33597`.)" +msgstr "" +"从 ``PyGC_Head`` 移除了一个 :c:type:`Py_ssize_t` 成员。 所有跟踪 GC 的对象(例如 tuple, list, " +"dict)大小减少了 4 或 8 字节。 (由 Inada Naoki 在 :issue:`33597` 中贡献。)" + +#: ../../whatsnew/3.8.rst:1496 +msgid "" +":class:`uuid.UUID` now uses ``__slots__`` to reduce its memory footprint. " +"(Contributed by Wouter Bolsterlee and Tal Einat in :issue:`30977`)" +msgstr "" +":class:`uuid.UUID` 现在会使用 ``__slots__`` 以减少内存足迹。 (由 Wouter Bolsterlee 和 Tal " +"Einat 在 :issue:`30977` 中贡献。)" + +#: ../../whatsnew/3.8.rst:1499 +msgid "" +"Improved performance of :func:`operator.itemgetter` by 33%. Optimized " +"argument handling and added a fast path for the common case of a single non-" +"negative integer index into a tuple (which is the typical use case in the " +"standard library). (Contributed by Raymond Hettinger in :issue:`35664`.)" +msgstr "" +":func:`operator.itemgetter` 的性能提升了 33%。 " +"优化了参数处理,并为常见的在元组中单个非负整数索引的情况新增了一条快速路径(这是标准库中的典型用例)。 (由 Raymond Hettinger 在 " +":issue:`35664` 中贡献。" + +#: ../../whatsnew/3.8.rst:1505 +msgid "" +"Sped-up field lookups in :func:`collections.namedtuple`. They are now more " +"than two times faster, making them the fastest form of instance variable " +"lookup in Python. (Contributed by Raymond Hettinger, Pablo Galindo, and Joe " +"Jevnik, Serhiy Storchaka in :issue:`32492`.)" +msgstr "" +"加快了在 :func:`collections.namedtuple` 中的字段查找。 它们现在的速度快了两倍以上,成为 Python " +"中最快的实例变量查找形式。 (由 Raymond Hettinger, Pablo Galindo 和 Joe Jevnik, Serhiy " +"Storchaka 在 :issue:`32492` 中贡献。)" + +#: ../../whatsnew/3.8.rst:1510 +msgid "" +"The :class:`list` constructor does not overallocate the internal item buffer" +" if the input iterable has a known length (the input implements " +"``__len__``). This makes the created list 12% smaller on average. " +"(Contributed by Raymond Hettinger and Pablo Galindo in :issue:`33234`.)" +msgstr "" +"如果输入的可迭代对象的长度已知 (即输入对象实现了 ``__len__``),:class:`list` 构造器不会过度分配内部项缓冲区。 " +"这使得所创建的列表资源占用平均减少了 12%。 (由 Raymond Hettinger 和 Pablo Galindo 在 " +":issue:`33234` 中贡献。)" + +#: ../../whatsnew/3.8.rst:1515 +msgid "" +"Doubled the speed of class variable writes. When a non-dunder attribute was" +" updated, there was an unnecessary call to update slots. (Contributed by " +"Stefan Behnel, Pablo Galindo Salgado, Raymond Hettinger, Neil Schemenauer, " +"and Serhiy Storchaka in :issue:`36012`.)" +msgstr "" +"类变量写入速度加倍。 当一个非冗余属性被更新时,之前存在一个更新 slots 的非必要调用。 (由 Stefan Behnel, Pablo " +"Galindo Salgado, Raymond Hettinger, Neil Schemenauer, 和 Serhiy Storchaka 在 " +":issue:`36012` 中贡献。)" + +#: ../../whatsnew/3.8.rst:1520 +msgid "" +"Reduced an overhead of converting arguments passed to many builtin functions" +" and methods. This sped up calling some simple builtin functions and " +"methods up to 20--50%. (Contributed by Serhiy Storchaka in :issue:`23867`, " +":issue:`35582` and :issue:`36127`.)" +msgstr "" +"减少了传递给许多内置函数和方法的参数转换的开销。 这使得某些简单内置函数和方法的速度提升了 20--50%。 (由 Serhiy Storchaka 在" +" :issue:`23867`, :issue:`35582` 和 :issue:`36127` 中贡献。)" + +#: ../../whatsnew/3.8.rst:1525 +msgid "" +"``LOAD_GLOBAL`` instruction now uses new \"per opcode cache\" mechanism. It " +"is about 40% faster now. (Contributed by Yury Selivanov and Inada Naoki in " +":issue:`26219`.)" +msgstr "" +"``LOAD_GLOBAL`` 指令现在会使用新的 \"per opcode cache\" 机制。 它的速度现在提升了大约 40%。 (由 Yury " +"Selivanov 和 Inada Naoki 在 :issue:`26219` 中贡献。)" + +#: ../../whatsnew/3.8.rst:1531 +msgid "Build and C API Changes" +msgstr "构建和 C API 的改变" + +#: ../../whatsnew/3.8.rst:1533 +msgid "" +"Default :data:`sys.abiflags` became an empty string: the ``m`` flag for " +"pymalloc became useless (builds with and without pymalloc are ABI " +"compatible) and so has been removed. (Contributed by Victor Stinner in " +":issue:`36707`.)" +msgstr "" +"默认的 :data:`sys.abiflags` 成为一个空字符串:pymalloc 的 ``m`` 旗标不再有意义(无论是否启用 pymalloc " +"构建都是兼容 ABI 的)因此已被移除。 (由 Victor Stinner 在 :issue:`36707` 中贡献。)" + +#: ../../whatsnew/3.8.rst:1537 +msgid "Example of changes:" +msgstr "改变的例子:" + +#: ../../whatsnew/3.8.rst:1539 +msgid "" +"Only ``python3.8`` program is installed, ``python3.8m`` program is gone." +msgstr "只会安装 ``python3.8`` 程序,不再有 ``python3.8m`` 程序。" + +#: ../../whatsnew/3.8.rst:1540 +msgid "" +"Only ``python3.8-config`` script is installed, ``python3.8m-config`` script " +"is gone." +msgstr "只会安装 ``python3.8-config`` 脚本,不再有 ``python3.8m-config`` 脚本。" + +#: ../../whatsnew/3.8.rst:1542 +msgid "" +"The ``m`` flag has been removed from the suffix of dynamic library " +"filenames: extension modules in the standard library as well as those " +"produced and installed by third-party packages, like those downloaded from " +"PyPI. On Linux, for example, the Python 3.7 suffix " +"``.cpython-37m-x86_64-linux-gnu.so`` became ``.cpython-38-x86_64-linux-" +"gnu.so`` in Python 3.8." +msgstr "" +"``m`` 旗标已经从动态库文件名后缀中移除:包括标准库中的扩展模块以及第三方包所产生和安装的模块例如从 PyPI 下载的模块。 以 Linux " +"为例,Python 3.7 的后缀 ``.cpython-37m-x86_64-linux-gnu.so`` 在 Python 3.8 中改为 " +"``.cpython-38-x86_64-linux-gnu.so``。" + +#: ../../whatsnew/3.8.rst:1549 +msgid "" +"The header files have been reorganized to better separate the different " +"kinds of APIs:" +msgstr "重新组织了所有头文件以更好地区分不同种类的 API:" + +#: ../../whatsnew/3.8.rst:1552 +msgid "``Include/*.h`` should be the portable public stable C API." +msgstr "``Include/*.h`` 应为可移植的公有稳定版 C API。" + +#: ../../whatsnew/3.8.rst:1553 +msgid "" +"``Include/cpython/*.h`` should be the unstable C API specific to CPython; " +"public API, with some private API prefixed by ``_Py`` or ``_PY``." +msgstr "" +"``Include/cpython/*.h`` 应为 CPython 专属的不稳定版 C API;公有 API,部分私有 API 附加 ``_Py`` " +"or ``_PY`` 前缀。" + +#: ../../whatsnew/3.8.rst:1555 +msgid "" +"``Include/internal/*.h`` is the private internal C API very specific to " +"CPython. This API comes with no backward compatibility warranty and should " +"not be used outside CPython. It is only exposed for very specific needs like" +" debuggers and profiles which has to access to CPython internals without " +"calling functions. This API is now installed by ``make install``." +msgstr "" +"``Include/internal/*.h`` 应为 CPython 特别专属的私有内部 C API。 此 API 不具备向下兼容保证并且不应在 " +"CPython 以外被使用。 它们的公开仅适用于特别限定的需求例如调试器和性能分析等必须直接访问 CPython 内部数据而不通过调用函数的应用。 此 " +"API 现在是通过 ``make install`` 安装的。" + +#: ../../whatsnew/3.8.rst:1561 +msgid "" +"(Contributed by Victor Stinner in :issue:`35134` and :issue:`35081`, work " +"initiated by Eric Snow in Python 3.7.)" +msgstr "" +"(由 Victor Stinner 在 :issue:`35134` 和 :issue:`35081` 中贡献,相关工作由 Eric Snow 在 " +"Python 3.7 中发起。)" + +#: ../../whatsnew/3.8.rst:1564 +msgid "" +"Some macros have been converted to static inline functions: parameter types " +"and return type are well defined, they don't have issues specific to macros," +" variables have a local scopes. Examples:" +msgstr "某些宏已被转换为静态内联函数:形参类型和返回类型定义良好,它们不再会有与宏相关的问题,变量具有局部作用域。 例如:" + +#: ../../whatsnew/3.8.rst:1568 +msgid ":c:func:`Py_INCREF`, :c:func:`Py_DECREF`" +msgstr ":c:func:`Py_INCREF`, :c:func:`Py_DECREF`" + +#: ../../whatsnew/3.8.rst:1569 +msgid ":c:func:`Py_XINCREF`, :c:func:`Py_XDECREF`" +msgstr ":c:func:`Py_XINCREF`, :c:func:`Py_XDECREF`" + +#: ../../whatsnew/3.8.rst:1570 +msgid ":c:func:`PyObject_INIT`, :c:func:`PyObject_INIT_VAR`" +msgstr ":c:func:`PyObject_INIT`, :c:func:`PyObject_INIT_VAR`" + +#: ../../whatsnew/3.8.rst:1571 +msgid "" +"Private functions: :c:func:`_PyObject_GC_TRACK`, " +":c:func:`_PyObject_GC_UNTRACK`, :c:func:`_Py_Dealloc`" +msgstr "" +"私有函数: :c:func:`_PyObject_GC_TRACK`, :c:func:`_PyObject_GC_UNTRACK`, " +":c:func:`_Py_Dealloc`" + +#: ../../whatsnew/3.8.rst:1574 +msgid "(Contributed by Victor Stinner in :issue:`35059`.)" +msgstr "(由 Victor Stinner 在 :issue:`35059` 中贡献。)" + +#: ../../whatsnew/3.8.rst:1576 +msgid "" +"The :c:func:`PyByteArray_Init` and :c:func:`PyByteArray_Fini` functions have" +" been removed. They did nothing since Python 2.7.4 and Python 3.2.0, were " +"excluded from the limited API (stable ABI), and were not documented. " +"(Contributed by Victor Stinner in :issue:`35713`.)" +msgstr "" +":c:func:`PyByteArray_Init` 和 :c:func:`PyByteArray_Fini` 函数已被移除。 它们自 Python " +"2.7.4 和 Python 3.2.0 起就没有任何用处,被排除在受限 API (稳定版 ABI) 之外,并且未被写入文档。 (由 Victor " +"Stinner 在 :issue:`35713` 中贡献。)" + +#: ../../whatsnew/3.8.rst:1581 +msgid "" +"The result of :c:func:`PyExceptionClass_Name` is now of type ``const char " +"*`` rather of ``char *``. (Contributed by Serhiy Storchaka in " +":issue:`33818`.)" +msgstr "" +":c:func:`PyExceptionClass_Name` 的结果类型现在是 ``const char *`` 而非 ``char *``。 (由 " +"Serhiy Storchaka 在 :issue:`33818` 中贡献。)" + +#: ../../whatsnew/3.8.rst:1585 +msgid "" +"The duality of ``Modules/Setup.dist`` and ``Modules/Setup`` has been " +"removed. Previously, when updating the CPython source tree, one had to " +"manually copy ``Modules/Setup.dist`` (inside the source tree) to " +"``Modules/Setup`` (inside the build tree) in order to reflect any changes " +"upstream. This was of a small benefit to packagers at the expense of a " +"frequent annoyance to developers following CPython development, as " +"forgetting to copy the file could produce build failures." +msgstr "" +"``Modules/Setup.dist`` 与 ``Modules/Setup`` 两者的共存已被移除。 之前在更新 CPython " +"源码树时,开发者必须手动拷贝 ``Modules/Setup.dist`` (在源码树内) 到 ``Modules/Setup`` (在构建树内) " +"以反映上游的任何改变。 旧特性对打包者来说有一点益处,但代价是对追踪 CPython " +"开发进程的开发者造成经常性的麻烦,因为忘记拷贝该文件可能导致构建失败。" + +#: ../../whatsnew/3.8.rst:1593 +msgid "" +"Now the build system always reads from ``Modules/Setup`` inside the source " +"tree. People who want to customize that file are encouraged to maintain " +"their changes in a git fork of CPython or as patch files, as they would do " +"for any other change to the source tree." +msgstr "" +"现在构建系统总是会从源码树内的 ``Modules/Setup`` 读取数据。 建议希望定制该文件的开发者在 CPython 的一个 git " +"分叉或补丁文件中维护他们的更改,就如他们对源码树做任何其他改变时一样。" + +#: ../../whatsnew/3.8.rst:1598 +msgid "(Contributed by Antoine Pitrou in :issue:`32430`.)" +msgstr "(由 Antoine Pitrou 在 :issue:`32430` 中贡献。)" + +#: ../../whatsnew/3.8.rst:1600 +msgid "" +"Functions that convert Python number to C integer like " +":c:func:`PyLong_AsLong` and argument parsing functions like " +":c:func:`PyArg_ParseTuple` with integer converting format units like ``'i'``" +" will now use the :meth:`~object.__index__` special method instead of " +":meth:`~object.__int__`, if available. The deprecation warning will be " +"emitted for objects with the ``__int__()`` method but without the " +"``__index__()`` method (like :class:`~decimal.Decimal` and " +":class:`~fractions.Fraction`). :c:func:`PyNumber_Check` will now return " +"``1`` for objects implementing ``__index__()``. :c:func:`PyNumber_Long`, " +":c:func:`PyNumber_Float` and :c:func:`PyFloat_AsDouble` also now use the " +"``__index__()`` method if available. (Contributed by Serhiy Storchaka in " +":issue:`36048` and :issue:`20092`.)" +msgstr "" +"将 Python 数字转换为 C 整型的函数例如 :c:func:`PyLong_AsLong` 以及带有 ``'i'`` " +"之类整型转换格式单元的参数解析函数例如 :c:func:`PyArg_ParseTuple` 现在如果可能将会使用 " +":meth:`~object.__index__` 特殊方法而不是 :meth:`~object.__int__`。 对于带有 " +"``__int__()`` 方法但没有 ``__index__()`` 方法的对象 (例如 :class:`~decimal.Decimal` 和 " +":class:`~fractions.Fraction`) 将会发出弃用警告。 对于实现了 ``__index__()`` 的对象 " +":c:func:`PyNumber_Check` 现在将返回 ``1``。 :c:func:`PyNumber_Long`, " +":c:func:`PyNumber_Float` 和 :c:func:`PyFloat_AsDouble` 现在如果可能也将会使用 " +"``__index__()`` 方法。 (由 Serhiy Storchaka 在 :issue:`36048` 和 :issue:`20092` " +"中贡献。)" + +#: ../../whatsnew/3.8.rst:1614 +msgid "" +"Heap-allocated type objects will now increase their reference count in " +":c:func:`PyObject_Init` (and its parallel macro ``PyObject_INIT``) instead " +"of in :c:func:`PyType_GenericAlloc`. Types that modify instance allocation " +"or deallocation may need to be adjusted. (Contributed by Eddie Elizondo in " +":issue:`35810`.)" +msgstr "" +"堆分配类型对象现在将增加它们在 :c:func:`PyObject_Init` (及其对应的宏 ``PyObject_INIT``) " +"中的引用计数而不是在 :c:func:`PyType_GenericAlloc` 中。 修改实例分配或中止分配的类型可能需要进行调整。 (由 " +"Elizondo 在 :issue:`35810` 中贡献。)" + +#: ../../whatsnew/3.8.rst:1620 +msgid "" +"The new function :c:func:`PyCode_NewWithPosOnlyArgs` allows to create code " +"objects like :c:func:`PyCode_New`, but with an extra *posonlyargcount* " +"parameter for indicating the number of positional-only arguments. " +"(Contributed by Pablo Galindo in :issue:`37221`.)" +msgstr "" +"新增函数 :c:func:`PyCode_NewWithPosOnlyArgs` 允许创建代码对象例如 " +":c:func:`PyCode_New`,但带有一个额外的 *posonlyargcount* 形参以指明仅限位置参数的数量。 (由 Pablo " +"Galindo 在 :issue:`37221` 中贡献。)" + +#: ../../whatsnew/3.8.rst:1625 +msgid "" +":c:func:`Py_SetPath` now sets :data:`sys.executable` to the program full " +"path (:c:func:`Py_GetProgramFullPath`) rather than to the program name " +"(:c:func:`Py_GetProgramName`). (Contributed by Victor Stinner in " +":issue:`38234`.)" +msgstr "" +":c:func:`Py_SetPath` 现在会将 :data:`sys.executable` 设为程序完整路径 " +"(:c:func:`Py_GetProgramFullPath`) 而不是程序名称 (:c:func:`Py_GetProgramName`)。 (由 " +"Victor Stinner 在 :issue:`38234` 中贡献。)" + +#: ../../whatsnew/3.8.rst:1632 +msgid "Deprecated" +msgstr "弃用" + +#: ../../whatsnew/3.8.rst:1634 +msgid "" +"The distutils ``bdist_wininst`` command is now deprecated, use " +"``bdist_wheel`` (wheel packages) instead. (Contributed by Victor Stinner in " +":issue:`37481`.)" +msgstr "" +"distutils 的 ``bdist_wininst`` 命令现在已弃用,请改用 ``bdist_wheel`` (wheel 包)。 (由 " +"Victor Stinner 在 :issue:`37481` 中贡献。)" + +#: ../../whatsnew/3.8.rst:1638 +msgid "" +"Deprecated methods ``getchildren()`` and ``getiterator()`` in the " +":mod:`~xml.etree.ElementTree` module now emit a :exc:`DeprecationWarning` " +"instead of :exc:`PendingDeprecationWarning`. They will be removed in Python " +"3.9. (Contributed by Serhiy Storchaka in :issue:`29209`.)" +msgstr "" +":mod:`~xml.etree.ElementTree` 模块中的已弃用方法 ``getchildren()`` 和 " +"``getiterator()`` 现在会引发 :exc:`DeprecationWarning` 而不是 " +":exc:`PendingDeprecationWarning`。 它们将在 Python 3.9 中被移除。 (由 Serhiy Storchaka " +"在 :issue:`29209` 中贡献。)" + +#: ../../whatsnew/3.8.rst:1644 +msgid "" +"Passing an object that is not an instance of " +":class:`concurrent.futures.ThreadPoolExecutor` to " +":meth:`loop.set_default_executor() ` is " +"deprecated and will be prohibited in Python 3.9. (Contributed by Elvis " +"Pranskevichus in :issue:`34075`.)" +msgstr "" +"将不是 :class:`concurrent.futures.ThreadPoolExecutor` 的实例的对象传给 " +":meth:`loop.set_default_executor() ` " +"已被弃用,并将在 Python 3.9 中被禁止。 (由 Elvis Pranskevichus 在 :issue:`34075` 中贡献。)" + +#: ../../whatsnew/3.8.rst:1650 +msgid "" +"The :meth:`__getitem__` methods of :class:`xml.dom.pulldom.DOMEventStream`, " +":class:`wsgiref.util.FileWrapper` and :class:`fileinput.FileInput` have been" +" deprecated." +msgstr "" +":class:`xml.dom.pulldom.DOMEventStream`, :class:`wsgiref.util.FileWrapper` 和" +" :class:`fileinput.FileInput` 的 :meth:`__getitem__` 方法已被弃用。" + +#: ../../whatsnew/3.8.rst:1654 +msgid "" +"Implementations of these methods have been ignoring their *index* parameter," +" and returning the next item instead. (Contributed by Berker Peksag in " +":issue:`9372`.)" +msgstr "" +"这些方法的实现会忽略它们的 *index* 形参,并改为返回下一条目。 (由 Berker Peksag 在 :issue:`9372` 中贡献。)" + +#: ../../whatsnew/3.8.rst:1658 +msgid "" +"The :class:`typing.NamedTuple` class has deprecated the ``_field_types`` " +"attribute in favor of the ``__annotations__`` attribute which has the same " +"information. (Contributed by Raymond Hettinger in :issue:`36320`.)" +msgstr "" +":class:`typing.NamedTuple` 类已弃用了 ``_field_types`` 属性而改用具有同样信息的 " +"``__annotations__`` 属性。 (由 Raymond Hettinger 在 :issue:`36320` 中贡献。)" + +#: ../../whatsnew/3.8.rst:1662 +msgid "" +":mod:`ast` classes ``Num``, ``Str``, ``Bytes``, ``NameConstant`` and " +"``Ellipsis`` are considered deprecated and will be removed in future Python " +"versions. :class:`~ast.Constant` should be used instead. (Contributed by " +"Serhiy Storchaka in :issue:`32892`.)" +msgstr "" +":mod:`ast` 类 ``Num``, ``Str``, ``Bytes``, ``NameConstant`` 和 ``Ellipsis`` " +"被视为已弃用并将在未来的 Python 版本中被移除。 应当改用 :class:`~ast.Constant`。 (由 Serhiy Storchaka" +" 在 :issue:`32892` 中贡献。)" + +#: ../../whatsnew/3.8.rst:1667 +msgid "" +":class:`ast.NodeVisitor` methods ``visit_Num()``, ``visit_Str()``, " +"``visit_Bytes()``, ``visit_NameConstant()`` and ``visit_Ellipsis()`` are " +"deprecated now and will not be called in future Python versions. Add the " +":meth:`~ast.NodeVisitor.visit_Constant` method to handle all constant nodes." +" (Contributed by Serhiy Storchaka in :issue:`36917`.)" +msgstr "" +":class:`ast.NodeVisitor` 的方法 ``visit_Num()``, ``visit_Str()``, " +"``visit_Bytes()``, ``visit_NameConstant()`` 和 ``visit_Ellipsis()`` " +"现在已被弃用,并且在未来的 Python 版本中将不再被调用。 添加 :meth:`~ast.NodeVisitor.visit_Constant` " +"方法来处理所有常量节点。 (由 Serhiy Storchaka 在 :issue:`36917` 中贡献。)" + +#: ../../whatsnew/3.8.rst:1674 +msgid "" +"The :func:`asyncio.coroutine` :term:`decorator` is deprecated and will be " +"removed in version 3.10. Instead of ``@asyncio.coroutine``, use " +":keyword:`async def` instead. (Contributed by Andrew Svetlov in " +":issue:`36921`.)" +msgstr "" +":func:`asyncio.coroutine` :term:`decorator` 已弃用并将在 3.10 版中被移除。 原有的 " +"``@asyncio.coroutine`` 请改用 :keyword:`async def` 来替代。 (由 Andrew Svetlov 在 " +":issue:`36921` 中贡献。)" + +#: ../../whatsnew/3.8.rst:1679 +msgid "" +"In :mod:`asyncio`, the explicit passing of a *loop* argument has been " +"deprecated and will be removed in version 3.10 for the following: " +":func:`asyncio.sleep`, :func:`asyncio.gather`, :func:`asyncio.shield`, " +":func:`asyncio.wait_for`, :func:`asyncio.wait`, " +":func:`asyncio.as_completed`, :class:`asyncio.Task`, :class:`asyncio.Lock`, " +":class:`asyncio.Event`, :class:`asyncio.Condition`, " +":class:`asyncio.Semaphore`, :class:`asyncio.BoundedSemaphore`, " +":class:`asyncio.Queue`, :func:`asyncio.create_subprocess_exec`, and " +":func:`asyncio.create_subprocess_shell`." +msgstr "" +"在 :mod:`asyncio` 中,*loop* 参数的显式传递已被弃用并且到 3.10 版时将会在以下函数中被移除: " +":func:`asyncio.sleep`, :func:`asyncio.gather`, :func:`asyncio.shield`, " +":func:`asyncio.wait_for`, :func:`asyncio.wait`, " +":func:`asyncio.as_completed`, :class:`asyncio.Task`, :class:`asyncio.Lock`, " +":class:`asyncio.Event`, :class:`asyncio.Condition`, " +":class:`asyncio.Semaphore`, :class:`asyncio.BoundedSemaphore`, " +":class:`asyncio.Queue`, :func:`asyncio.create_subprocess_exec` 以及 " +":func:`asyncio.create_subprocess_shell`。" + +#: ../../whatsnew/3.8.rst:1689 +msgid "" +"The explicit passing of coroutine objects to :func:`asyncio.wait` has been " +"deprecated and will be removed in version 3.11. (Contributed by Yury " +"Selivanov in :issue:`34790`.)" +msgstr "" +"将协程对象显式传递给 :func:`asyncio.wait` 的做法已被弃用并且将在 3.11 版中被移除。 (由 Yury Selivanov 在 " +":issue:`34790` 中贡献。)" + +#: ../../whatsnew/3.8.rst:1693 +msgid "" +"The following functions and methods are deprecated in the :mod:`gettext` " +"module: :func:`~gettext.lgettext`, :func:`~gettext.ldgettext`, " +":func:`~gettext.lngettext` and :func:`~gettext.ldngettext`. They return " +"encoded bytes, and it's possible that you will get unexpected Unicode-" +"related exceptions if there are encoding problems with the translated " +"strings. It's much better to use alternatives which return Unicode strings " +"in Python 3. These functions have been broken for a long time." +msgstr "" +":mod:`gettext` 模块中的下列函数和方法已被弃用: :func:`~gettext.lgettext`, " +":func:`~gettext.ldgettext`, :func:`~gettext.lngettext` 和 " +":func:`~gettext.ldngettext`。 它们返回已编码的字节串,如果转换后的字符串存在编码问题你将可能遭遇预期之外的异常。 " +"更好的做法是使用 Python 3 中返回 Unicode 字符串的操作作为替代。 前面的函数都早已不宜使用。" + +#: ../../whatsnew/3.8.rst:1701 +msgid "" +"Function :func:`~gettext.bind_textdomain_codeset`, methods " +":meth:`~gettext.NullTranslations.output_charset` and " +":meth:`~gettext.NullTranslations.set_output_charset`, and the *codeset* " +"parameter of functions :func:`~gettext.translation` and " +":func:`~gettext.install` are also deprecated, since they are only used for " +"the ``l*gettext()`` functions. (Contributed by Serhiy Storchaka in " +":issue:`33710`.)" +msgstr "" +"函数 :func:`~gettext.bind_textdomain_codeset`,方法 " +":meth:`~gettext.NullTranslations.output_charset` 和 " +":meth:`~gettext.NullTranslations.set_output_charset`,以及函数 " +":func:`~gettext.translation` 和 :func:`~gettext.install` 的 *codeset* " +"形参也已被弃用,因为它们仅适用于 ``l*gettext()`` 函数。 (由 Serhiy Storchaka 在 :issue:`33710` " +"中贡献。)" + +#: ../../whatsnew/3.8.rst:1709 +msgid "" +"The :meth:`~threading.Thread.isAlive()` method of :class:`threading.Thread` " +"has been deprecated. (Contributed by Dong-hee Na in :issue:`35283`.)" +msgstr "" +":class:`threading.Thread` 的 :meth:`~threading.Thread.isAlive()` 方法已弃用。 (由 " +"Dong-hee Na 在 :issue:`35283` 中贡献。)" + +#: ../../whatsnew/3.8.rst:1713 +msgid "" +"Many builtin and extension functions that take integer arguments will now " +"emit a deprecation warning for :class:`~decimal.Decimal`\\ s, " +":class:`~fractions.Fraction`\\ s and any other objects that can be converted" +" to integers only with a loss (e.g. that have the :meth:`~object.__int__` " +"method but do not have the :meth:`~object.__index__` method). In future " +"version they will be errors. (Contributed by Serhiy Storchaka in " +":issue:`36048`.)" +msgstr "" +"许多接受整数参数的内置和扩展模块的函数现在将对传入 :class:`~decimal.Decimal`, " +":class:`~fractions.Fraction` 以及任何其他可被转换为整数但会丢失精度(即具有 :meth:`~object.__int__`" +" 方法但没有 :meth:`~object.__index__` 方法)的对象发出弃用警告。 在未来的版本中则将报错。 (由 Serhiy " +"Storchaka 在 :issue:`36048` 中贡献。)" + +#: ../../whatsnew/3.8.rst:1721 +msgid "Deprecated passing the following arguments as keyword arguments:" +msgstr "以下参数作为关键字参数传递的方式已被弃用:" + +#: ../../whatsnew/3.8.rst:1723 +msgid "" +"*func* in :func:`functools.partialmethod`, :func:`weakref.finalize`, " +":meth:`profile.Profile.runcall`, :meth:`cProfile.Profile.runcall`, " +":meth:`bdb.Bdb.runcall`, :meth:`trace.Trace.runfunc` and " +":func:`curses.wrapper`." +msgstr "" +":func:`functools.partialmethod`, :func:`weakref.finalize`, " +":meth:`profile.Profile.runcall`, :meth:`cProfile.Profile.runcall`, " +":meth:`bdb.Bdb.runcall`, :meth:`trace.Trace.runfunc` 与 " +":func:`curses.wrapper` 中的 *func*。" + +#: ../../whatsnew/3.8.rst:1727 +msgid "*function* in :meth:`unittest.TestCase.addCleanup`." +msgstr ":meth:`unittest.TestCase.addCleanup` 中的 *function*。" + +#: ../../whatsnew/3.8.rst:1728 +msgid "" +"*fn* in the :meth:`~concurrent.futures.Executor.submit` method of " +":class:`concurrent.futures.ThreadPoolExecutor` and " +":class:`concurrent.futures.ProcessPoolExecutor`." +msgstr "" +":class:`concurrent.futures.ThreadPoolExecutor` 和 " +":class:`concurrent.futures.ProcessPoolExecutor` 的 " +":meth:`~concurrent.futures.Executor.submit` 方法中的 *fn*。" + +#: ../../whatsnew/3.8.rst:1731 +msgid "" +"*callback* in :meth:`contextlib.ExitStack.callback`, " +":meth:`contextlib.AsyncExitStack.callback` and " +":meth:`contextlib.AsyncExitStack.push_async_callback`." +msgstr "" +":meth:`contextlib.ExitStack.callback`, " +":meth:`contextlib.AsyncExitStack.callback` 和 " +":meth:`contextlib.AsyncExitStack.push_async_callback` 中的 *callback*。" + +#: ../../whatsnew/3.8.rst:1734 +msgid "" +"*c* and *typeid* in the :meth:`~multiprocessing.managers.Server.create` " +"method of :class:`multiprocessing.managers.Server` and " +":class:`multiprocessing.managers.SharedMemoryServer`." +msgstr "" +":class:`multiprocessing.managers.Server` 和 " +":class:`multiprocessing.managers.SharedMemoryServer` 的 " +":meth:`~multiprocessing.managers.Server.create` 方法中的 *c* 和 *typeid*。" + +#: ../../whatsnew/3.8.rst:1737 +msgid "*obj* in :func:`weakref.finalize`." +msgstr ":func:`weakref.finalize` 中的 *obj*。" + +#: ../../whatsnew/3.8.rst:1739 +msgid "" +"In future releases of Python, they will be :ref:`positional-only " +"`. (Contributed by Serhiy Storchaka in " +":issue:`36492`.)" +msgstr "" +"在未来版本的 Python 中,它们将成为 :ref:`仅限位置参数 `。 (由 Serhiy " +"Storchaka 在 :issue:`36492` 中贡献。)" + +#: ../../whatsnew/3.8.rst:1745 +msgid "API and Feature Removals" +msgstr "API 与特性的移除" + +#: ../../whatsnew/3.8.rst:1747 +msgid "The following features and APIs have been removed from Python 3.8:" +msgstr "下列特性与 API 已从 Python 3.8 中移除:" + +#: ../../whatsnew/3.8.rst:1749 +msgid "" +"Starting with Python 3.3, importing ABCs from :mod:`collections` was " +"deprecated, and importing should be done from :mod:`collections.abc`. Being " +"able to import from collections was marked for removal in 3.8, but has been " +"delayed to 3.9. (See :issue:`36952`.)" +msgstr "" +"自 Python 3.3 起,从 :mod:`collections` 导入 ABC 的做法已弃用,而应当从 " +":mod:`collections.abc` 执行导入。 从 collections 导入的操作在 3.8 中已标记为被移除,但将推迟到 3.9 " +"中实施。 (参见 :issue:`36952`。)" + +#: ../../whatsnew/3.8.rst:1754 +msgid "" +"The :mod:`macpath` module, deprecated in Python 3.7, has been removed. " +"(Contributed by Victor Stinner in :issue:`35471`.)" +msgstr "" +":mod:`macpath` 模块,在 Python 3.7 中弃用,现已被移除。 (由 Victor Stinner 在 :issue:`35471`" +" 中贡献。)" + +#: ../../whatsnew/3.8.rst:1757 ../../whatsnew/3.8.rst:1876 +msgid "" +"The function :func:`platform.popen` has been removed, after having been " +"deprecated since Python 3.3: use :func:`os.popen` instead. (Contributed by " +"Victor Stinner in :issue:`35345`.)" +msgstr "" +"函数 :func:`platform.popen` 已被移除,它自 Python 3.3 起就已被弃用:请改用 :func:`os.popen`。 (由" +" Victor Stinner 在 :issue:`35345` 中贡献。)" + +#: ../../whatsnew/3.8.rst:1761 +msgid "" +"The function :func:`time.clock` has been removed, after having been " +"deprecated since Python 3.3: use :func:`time.perf_counter` or " +":func:`time.process_time` instead, depending on your requirements, to have " +"well-defined behavior. (Contributed by Matthias Bussonnier in " +":issue:`36895`.)" +msgstr "" +"函数 :func:`time.clock` 已被移除,它自 Python 3.3 起就已被弃用:请根据具体需求改用 " +":func:`time.perf_counter` 或 :func:`time.process_time` 以获得具有良好定义的行为。 (由 " +"Matthias Bussonnier 在 :issue:`36895` 中贡献。)" + +#: ../../whatsnew/3.8.rst:1767 +msgid "" +"The ``pyvenv`` script has been removed in favor of ``python3.8 -m venv`` to " +"help eliminate confusion as to what Python interpreter the ``pyvenv`` script" +" is tied to. (Contributed by Brett Cannon in :issue:`25427`.)" +msgstr "" +"``pyvenv`` 脚本已被移除,推荐改用 ``python3.8 -m venv`` 来帮助消除容易混淆 ``pyvenv`` 脚本所关联的 " +"Python 解释器这一问题。 (由 Brett Cannon 在 :issue:`25427` 中贡献。)" + +#: ../../whatsnew/3.8.rst:1771 +msgid "" +"``parse_qs``, ``parse_qsl``, and ``escape`` are removed from the :mod:`cgi` " +"module. They are deprecated in Python 3.2 or older. They should be imported" +" from the ``urllib.parse`` and ``html`` modules instead." +msgstr "" +"``parse_qs``, ``parse_qsl`` 和 ``escape`` 已从 :mod:`cgi` 模块中被移除。 这些函数自 Python " +"3.2 或更早就已被弃用。 它们应改为从 ``urllib.parse`` 和 ``html`` 模块导入。" + +#: ../../whatsnew/3.8.rst:1775 +msgid "" +"``filemode`` function is removed from the :mod:`tarfile` module. It is not " +"documented and deprecated since Python 3.3." +msgstr "" +"``filemode`` 函数已从 :mod:`tarfile` 模块中被移除。 该函数未被写入文档,自 Python 3.3 起就已弃用。" + +#: ../../whatsnew/3.8.rst:1778 +msgid "" +"The :class:`~xml.etree.ElementTree.XMLParser` constructor no longer accepts " +"the *html* argument. It never had an effect and was deprecated in Python " +"3.4. All other parameters are now :ref:`keyword-only `. (Contributed by Serhiy Storchaka in :issue:`29209`.)" +msgstr "" +":class:`~xml.etree.ElementTree.XMLParser` 构造器不再接受 *html* 参数。 它从来没有任何作用并在 " +"Python 3.4 中已被弃用。 所有其他形参现在都是 :ref:`仅限关键字参数 `。 (由 " +"Serhiy Storchaka 在 :issue:`29209` 中贡献。)" + +#: ../../whatsnew/3.8.rst:1783 +msgid "" +"Removed the ``doctype()`` method of " +":class:`~xml.etree.ElementTree.XMLParser`. (Contributed by Serhiy Storchaka " +"in :issue:`29209`.)" +msgstr "" +":class:`~xml.etree.ElementTree.XMLParser` 的 ``doctype()`` 方法已被移除。 (由 Serhiy " +"Storchaka 在 :issue:`29209` 中贡献。)" + +#: ../../whatsnew/3.8.rst:1786 +msgid "" +"\"unicode_internal\" codec is removed. (Contributed by Inada Naoki in " +":issue:`36297`.)" +msgstr "\"unicode_internal\" 编解码器已被移除。 (由 Inada Naoki 在 :issue:`36297` 中贡献。)" + +#: ../../whatsnew/3.8.rst:1789 +msgid "" +"The ``Cache`` and ``Statement`` objects of the :mod:`sqlite3` module are not" +" exposed to the user. (Contributed by Aviv Palivoda in :issue:`30262`.)" +msgstr "" +":mod:`sqlite3` 模块的 ``Cache`` 和 ``Statement`` 对象已不再公开给用户。 (由 Aviv Palivoda 在 " +":issue:`30262` 中贡献。)" + +#: ../../whatsnew/3.8.rst:1793 +msgid "" +"The ``bufsize`` keyword argument of :func:`fileinput.input` and " +":func:`fileinput.FileInput` which was ignored and deprecated since Python " +"3.6 has been removed. :issue:`36952` (Contributed by Matthias Bussonnier.)" +msgstr "" +":func:`fileinput.input` 和 :func:`fileinput.FileInput` 中自 Python 3.6 " +"起就已被忽略并弃用的 ``bufsize`` 关键字参数已被移除。 由 Matthias Bussonnier 在 :issue:`36952` " +"中贡献。)" + +#: ../../whatsnew/3.8.rst:1797 +msgid "" +"The functions :func:`sys.set_coroutine_wrapper` and " +":func:`sys.get_coroutine_wrapper` deprecated in Python 3.7 have been " +"removed; :issue:`36933` (Contributed by Matthias Bussonnier.)" +msgstr "" +"在 Python 3.7 中弃用的函数 :func:`sys.set_coroutine_wrapper` 和 " +":func:`sys.get_coroutine_wrapper` 已被移除。 (由 Matthias Bussonnier 在 " +":issue:`36933` 中贡献。)" + +#: ../../whatsnew/3.8.rst:1803 +msgid "Porting to Python 3.8" +msgstr "移植到 Python 3.8" + +#: ../../whatsnew/3.8.rst:1805 +msgid "" +"This section lists previously described changes and other bugfixes that may " +"require changes to your code." +msgstr "本节列出了先前描述的更改以及可能需要更改代码的其他错误修正." + +#: ../../whatsnew/3.8.rst:1810 +msgid "Changes in Python behavior" +msgstr "Python 行为的改变" + +#: ../../whatsnew/3.8.rst:1812 +msgid "" +"Yield expressions (both ``yield`` and ``yield from`` clauses) are now " +"disallowed in comprehensions and generator expressions (aside from the " +"iterable expression in the leftmost :keyword:`!for` clause). (Contributed by" +" Serhiy Storchaka in :issue:`10544`.)" +msgstr "" +"yield 表达式(包括 ``yield`` 和 ``yield from`` 子句)现在不允许在推导式和生成器表达式中使用(但最左边的 " +":keyword:`!for` 子句中的可迭代对象表达式除外)。 (由 Serhiy Storchaka 在 :issue:`10544` 中贡献。)" + +#: ../../whatsnew/3.8.rst:1817 +msgid "" +"The compiler now produces a :exc:`SyntaxWarning` when identity checks " +"(``is`` and ``is not``) are used with certain types of literals (e.g. " +"strings, numbers). These can often work by accident in CPython, but are not" +" guaranteed by the language spec. The warning advises users to use equality" +" tests (``==`` and ``!=``) instead. (Contributed by Serhiy Storchaka in " +":issue:`34850`.)" +msgstr "" +"当标识号检测 (``is`` 和 ``is not``) 与特定类型的字面值 (例如字符串和数字) 一同使用时编译器现在会产生 " +":exc:`SyntaxWarning`。 这在 CPython 中通常是可行的,但并不被语言定义所保证。 该警告会建议用户改用相等性检测 " +"(``==`` and ``!=``)。 (由 Serhiy Storchaka 在 :issue:`34850` 中贡献。)" + +#: ../../whatsnew/3.8.rst:1824 +msgid "" +"The CPython interpreter can swallow exceptions in some circumstances. In " +"Python 3.8 this happens in fewer cases. In particular, exceptions raised " +"when getting the attribute from the type dictionary are no longer ignored. " +"(Contributed by Serhiy Storchaka in :issue:`35459`.)" +msgstr "" +"CPython 解释器在某些情况下可以忽略异常。 在 Python 3.8 中这种情况会更少发生。 特别地,从类型字典获取属性时引发的异常不会再被忽略。" +" (由 Serhiy Storchaka 在 :issue:`35459` 中贡献。)" + +#: ../../whatsnew/3.8.rst:1829 +msgid "" +"Removed ``__str__`` implementations from builtin types :class:`bool`, " +":class:`int`, :class:`float`, :class:`complex` and few classes from the " +"standard library. They now inherit ``__str__()`` from :class:`object`. As " +"result, defining the ``__repr__()`` method in the subclass of these classes " +"will affect their string representation. (Contributed by Serhiy Storchaka in" +" :issue:`36793`.)" +msgstr "" +"从内置类型 :class:`bool`, :class:`int`, :class:`float`, :class:`complex` " +"和标准库的一些类中移除了 ``__str__`` 实现。 它们现在会从 :class:`object` 继承 ``__str__()``。 " +"作为结果,在这些类的子类中定义 ``__repr__()`` 方法将会影响它们的字符串表示。 (由 Serhiy Storchaka 在 " +":issue:`36793` 中贡献。)" + +#: ../../whatsnew/3.8.rst:1836 +msgid "" +"On AIX, :attr:`sys.platform` doesn't contain the major version anymore. It " +"is always ``'aix'``, instead of ``'aix3'`` .. ``'aix7'``. Since older " +"Python versions include the version number, so it is recommended to always " +"use ``sys.platform.startswith('aix')``. (Contributed by M. Felt in " +":issue:`36588`.)" +msgstr "" +"在 AIX 上,:attr:`sys.platform` 将不再包含主要版本号。 它将总是 ``'aix'`` 而不再是 ``'aix3'`` .. " +"``'aix7'``。 由于较旧的 Python 版本会包含该版本号,因此推荐总是使用 " +"``sys.platform.startswith('aix')``。 (由 M. Felt 在 :issue:`36588` 中贡献。)" + +#: ../../whatsnew/3.8.rst:1842 +msgid "" +":c:func:`PyEval_AcquireLock` and :c:func:`PyEval_AcquireThread` now " +"terminate the current thread if called while the interpreter is finalizing, " +"making them consistent with :c:func:`PyEval_RestoreThread`, " +":c:func:`Py_END_ALLOW_THREADS`, and :c:func:`PyGILState_Ensure`. If this " +"behavior is not desired, guard the call by checking " +":c:func:`_Py_IsFinalizing` or :c:func:`sys.is_finalizing`. (Contributed by " +"Joannah Nanjekye in :issue:`36475`.)" +msgstr "" +"现在 :c:func:`PyEval_AcquireLock` 和 :c:func:`PyEval_AcquireThread` " +"如果当解释器终结化时被调用将会终结当前线程,以使它们与 :c:func:`PyEval_RestoreThread`, " +":c:func:`Py_END_ALLOW_THREADS` 以及 :c:func:`PyGILState_Ensure` 保持一致。 " +"如果不想要这样的行为,请通过检测 :c:func:`_Py_IsFinalizing` 或 :c:func:`sys.is_finalizing` " +"来保护该调用。 (由 Joannah Nanjekye 在 :issue:`36475` 中贡献。)" + +#: ../../whatsnew/3.8.rst:1852 +msgid "Changes in the Python API" +msgstr "Python API 的变化" + +#: ../../whatsnew/3.8.rst:1854 +msgid "" +"The :func:`os.getcwdb` function now uses the UTF-8 encoding on Windows, " +"rather than the ANSI code page: see :pep:`529` for the rationale. The " +"function is no longer deprecated on Windows. (Contributed by Victor Stinner " +"in :issue:`37412`.)" +msgstr "" +"在 Windows 上 :func:`os.getcwdb` 函数现在会使用 UTF-8 编码格式而不是 ANSI 代码页:请参看 :pep:`529`" +" 了解具体原因。 该函数在 Windows 上不再被弃用。 (由 Victor Stinner 在 :issue:`37412` 中贡献。)" + +#: ../../whatsnew/3.8.rst:1859 +msgid "" +":class:`subprocess.Popen` can now use :func:`os.posix_spawn` in some cases " +"for better performance. On Windows Subsystem for Linux and QEMU User " +"Emulation, the :class:`Popen` constructor using :func:`os.posix_spawn` no " +"longer raises an exception on errors like \"missing program\". Instead the " +"child process fails with a non-zero :attr:`~Popen.returncode`. (Contributed " +"by Joannah Nanjekye and Victor Stinner in :issue:`35537`.)" +msgstr "" +"现在 :class:`subprocess.Popen` 在某些情况下会使用 :func:`os.posix_spawn` 以获得更好的性能。 在适用于" +" Linux 的 Windows 子系统和 QEMU 用户模拟器上,使用 :func:`os.posix_spawn` 的 :class:`Popen`" +" 构造器不会再因为“找不到程序”这样的错误引发异常。 而是让子进程失败并返回一个非零的 :attr:`~Popen.returncode`。 (由 " +"Joannah Nanjekye 和 Victor Stinner 在 :issue:`35537` 中贡献。)" + +#: ../../whatsnew/3.8.rst:1866 +msgid "" +"The *preexec_fn* argument of * :class:`subprocess.Popen` is no longer " +"compatible with subinterpreters. The use of the parameter in a " +"subinterpreter now raises :exc:`RuntimeError`. (Contributed by Eric Snow in " +":issue:`34651`, modified by Christian Heimes in :issue:`37951`.)" +msgstr "" +"* :class:`subprocess.Popen` 的 *preexec_fn* 参数已不再兼容子解释器。 在子解释器中使用该形参现在将引发 " +":exc:`RuntimeError`。 (由 Eric Snow 在 :issue:`34651` 中贡献,由 Christian Heimes 在 " +":issue:`37951` 中修改。)" + +#: ../../whatsnew/3.8.rst:1872 +msgid "" +"The :meth:`imap.IMAP4.logout` method no longer silently ignores arbitrary " +"exceptions. (Contributed by Victor Stinner in :issue:`36348`.)" +msgstr "" +":meth:`imap.IMAP4.logout` 方法不会再静默地忽略任意异常。 (由 Victor Stinner 在 :issue:`36348`" +" 中贡献。)" + +#: ../../whatsnew/3.8.rst:1880 +msgid "" +"The :func:`statistics.mode` function no longer raises an exception when " +"given multimodal data. Instead, it returns the first mode encountered in " +"the input data. (Contributed by Raymond Hettinger in :issue:`35892`.)" +msgstr "" +"当传入多模数据时 :func:`statistics.mode` 函数不会再引发异常。 它将改为返回在输入数据中遇到的第一个模式。 (由 Raymond" +" Hettinger 在 :issue:`35892` 中贡献。)" + +#: ../../whatsnew/3.8.rst:1885 +msgid "" +"The :meth:`~tkinter.ttk.Treeview.selection` method of the " +":class:`tkinter.ttk.Treeview` class no longer takes arguments. Using it " +"with arguments for changing the selection was deprecated in Python 3.6. Use" +" specialized methods like :meth:`~tkinter.ttk.Treeview.selection_set` for " +"changing the selection. (Contributed by Serhiy Storchaka in " +":issue:`31508`.)" +msgstr "" +":class:`tkinter.ttk.Treeview` 类的 :meth:`~tkinter.ttk.Treeview.selection` " +"方法不再接受参数。 带参数调用该方法来改变选择在 Python 3.6 中已弃用。 请使用专门方法例如 " +":meth:`~tkinter.ttk.Treeview.selection_set` 来改变选择。 (由 Serhiy Storchaka 在 " +":issue:`31508` 中贡献。)" + +#: ../../whatsnew/3.8.rst:1891 +msgid "" +"The :meth:`writexml`, :meth:`toxml` and :meth:`toprettyxml` methods of " +":mod:`xml.dom.minidom`, and the :meth:`write` method of :mod:`xml.etree`, " +"now preserve the attribute order specified by the user. (Contributed by " +"Diego Rojas and Raymond Hettinger in :issue:`34160`.)" +msgstr "" +":mod:`xml.dom.minidom` 的 :meth:`writexml`, :meth:`toxml` 和 " +":meth:`toprettyxml` 方法以及 :mod:`xml.etree` 的 :meth:`write` 方法现在会保留用户指定的属性顺序。 " +"(由 Diego Rojas 和 Raymond Hettinger 在 :issue:`34160` 中贡献。)" + +#: ../../whatsnew/3.8.rst:1896 +msgid "" +"A :mod:`dbm.dumb` database opened with flags ``'r'`` is now read-only. " +":func:`dbm.dumb.open` with flags ``'r'`` and ``'w'`` no longer creates a " +"database if it does not exist. (Contributed by Serhiy Storchaka in " +":issue:`32749`.)" +msgstr "" +"附带 ``'r'`` 旗标打开的 :mod:`dbm.dumb` 数据库现在将是只读的。 如果数据库不存在,附带 ``'r'`` 和 ``'w'`` " +"旗标的 :func:`dbm.dumb.open` 不会再创建数据库。 (由 Serhiy Storchaka 在 :issue:`32749` " +"中贡献。)" + +#: ../../whatsnew/3.8.rst:1901 +msgid "" +"The ``doctype()`` method defined in a subclass of " +":class:`~xml.etree.ElementTree.XMLParser` will no longer be called and will " +"emit a :exc:`RuntimeWarning` instead of a :exc:`DeprecationWarning`. Define " +"the :meth:`doctype() ` method on " +"a target for handling an XML doctype declaration. (Contributed by Serhiy " +"Storchaka in :issue:`29209`.)" +msgstr "" +"在 :class:`~xml.etree.ElementTree.XMLParser` 的子类中定义的 ``doctype()`` " +"方法将不会再被调用,并将导致发出 :exc:`RuntimeWarning` 而不是 :exc:`DeprecationWarning`。 " +"请在目标上定义 :meth:`doctype() ` 方法来处理 " +"XML doctype 声明。 (由 Serhiy Storchaka 在 :issue:`29209` 中贡献。)" + +#: ../../whatsnew/3.8.rst:1908 +msgid "" +"A :exc:`RuntimeError` is now raised when the custom metaclass doesn't " +"provide the ``__classcell__`` entry in the namespace passed to " +"``type.__new__``. A :exc:`DeprecationWarning` was emitted in Python 3.6--" +"3.7. (Contributed by Serhiy Storchaka in :issue:`23722`.)" +msgstr "" +"现在当自定义元类未在传给 ``type.__new__`` 的命名空间中提供 ``__classcell__`` 入口时将引发 " +":exc:`RuntimeError`。 在 Python 3.6--3.7 中是则是引发 :exc:`DeprecationWarning`。 (由 " +"Serhiy Storchaka 在 :issue:`23722` 中贡献。)" + +#: ../../whatsnew/3.8.rst:1913 +msgid "" +"The :class:`cProfile.Profile` class can now be used as a context manager. " +"(Contributed by Scott Sanderson in :issue:`29235`.)" +msgstr "" +":class:`cProfile.Profile` 类现在可被用作上下文管理器。 (由 Scott Sanderson 在 :issue:`29235`" +" 中贡献。)" + +#: ../../whatsnew/3.8.rst:1916 +msgid "" +":func:`shutil.copyfile`, :func:`shutil.copy`, :func:`shutil.copy2`, " +":func:`shutil.copytree` and :func:`shutil.move` use platform-specific " +"\"fast-copy\" syscalls (see :ref:`shutil-platform-dependent-efficient-copy-" +"operations` section)." +msgstr "" +":func:`shutil.copyfile`, :func:`shutil.copy`, :func:`shutil.copy2`, " +":func:`shutil.copytree` 和 :func:`shutil.move` 会使用平台专属的 \"fast-copy\" 系统调用(参见" +" :ref:`shutil-platform-dependent-efficient-copy-operations` 一节)。" + +#: ../../whatsnew/3.8.rst:1921 +msgid "" +":func:`shutil.copyfile` default buffer size on Windows was changed from 16 " +"KiB to 1 MiB." +msgstr ":func:`shutil.copyfile` 在 Windows 上的默认缓冲区大小从 16 KiB 改为 1 MiB。" + +#: ../../whatsnew/3.8.rst:1924 +msgid "" +"The ``PyGC_Head`` struct has changed completely. All code that touched the " +"struct member should be rewritten. (See :issue:`33597`.)" +msgstr "``PyGC_Head`` 结构已被完全改变。 所有接触到该结构的代码都应当被重写。 (参见 :issue:`33597`。)" + +#: ../../whatsnew/3.8.rst:1927 +msgid "" +"The :c:type:`PyInterpreterState` struct has been moved into the \"internal\"" +" header files (specifically Include/internal/pycore_pystate.h). An opaque " +"``PyInterpreterState`` is still available as part of the public API (and " +"stable ABI). The docs indicate that none of the struct's fields are public," +" so we hope no one has been using them. However, if you do rely on one or " +"more of those private fields and have no alternative then please open a BPO " +"issue. We'll work on helping you adjust (possibly including adding accessor" +" functions to the public API). (See :issue:`35886`.)" +msgstr "" +":c:type:`PyInterpreterState` 结构已被移入 \"internal\" 头文件(特别是 " +"Include/internal/pycore_pystate.h)。 不透明的 ``PyInterpreterState`` 作为仅有 " +"API(以及稳定版 ABI)的一部分仍然可用。 文档指明该结构的任何字段都不是公有的,因此我们希望没人在使用它们。 " +"但是,如果你确实依赖其中某一个或更多个私有字段并且没有其他替代选项,则请开一个 BPO 问题。 我们将尽力帮助你进行调整(可能包括向公有 API " +"添加访问器函数)。 (参见 :issue:`35886`。)" + +#: ../../whatsnew/3.8.rst:1937 +msgid "" +"The :meth:`mmap.flush() ` method now returns ``None`` on " +"success and raises an exception on error under all platforms. Previously, " +"its behavior was platform-dependent: a nonzero value was returned on " +"success; zero was returned on error under Windows. A zero value was " +"returned on success; an exception was raised on error under Unix. " +"(Contributed by Berker Peksag in :issue:`2122`.)" +msgstr "" +"现在所有平台下的 :meth:`mmap.flush() ` 方法都会在成功时返回 ``None`` " +"并在错误时引发异常。 之前它的行为取决于具体平台: Windows 下会在成功时返回非零值;在失败时返回零。 Unix " +"下会在成功时返回零;在失败时引发错误。 (由 Berker Peksag 在 :issue:`2122` 中贡献。)" + +#: ../../whatsnew/3.8.rst:1944 +msgid "" +":mod:`xml.dom.minidom` and :mod:`xml.sax` modules no longer process external" +" entities by default. (Contributed by Christian Heimes in :issue:`17239`.)" +msgstr "" +":mod:`xml.dom.minidom` 和 :mod:`xml.sax` 模块默认将不再处理外部实体。 (由 Christian Heimes 在" +" :issue:`17239` 中贡献。)" + +#: ../../whatsnew/3.8.rst:1948 +msgid "" +"Deleting a key from a read-only :mod:`dbm` database (:mod:`dbm.dumb`, " +":mod:`dbm.gnu` or :mod:`dbm.ndbm`) raises :attr:`error` " +"(:exc:`dbm.dumb.error`, :exc:`dbm.gnu.error` or :exc:`dbm.ndbm.error`) " +"instead of :exc:`KeyError`. (Contributed by Xiang Zhang in :issue:`33106`.)" +msgstr "" +"从只读的 :mod:`dbm` 数据库 (:mod:`dbm.dumb`, :mod:`dbm.gnu` 或 :mod:`dbm.ndbm`) " +"删除键将会引发 :attr:`error` (:exc:`dbm.dumb.error`, :exc:`dbm.gnu.error` 或 " +":exc:`dbm.ndbm.error`) 而不是 :exc:`KeyError`。 (由 Xiang Zhang 在 :issue:`33106` " +"中贡献。)" + +#: ../../whatsnew/3.8.rst:1953 +msgid "" +"Simplified AST for literals. All constants will be represented as " +":class:`ast.Constant` instances. Instantiating old classes ``Num``, " +"``Str``, ``Bytes``, ``NameConstant`` and ``Ellipsis`` will return an " +"instance of ``Constant``. (Contributed by Serhiy Storchaka in " +":issue:`32892`.)" +msgstr "" +"简化了字面值的 AST。 所有常量将被表示为 :class:`ast.Constant` 的实例。 实例化旧类 ``Num``, ``Str``, " +"``Bytes``, ``NameConstant`` 和 ``Ellipsis`` 都将返回 ``Constant`` 的实例。 (由 Serhiy " +"Storchaka 在 :issue:`32892` 中贡献。)" + +#: ../../whatsnew/3.8.rst:1969 +msgid "" +"The function :func:`asyncio.wait_for` now correctly waits for cancellation " +"when using an instance of :class:`asyncio.Task`. Previously, upon reaching " +"*timeout*, it was cancelled and immediately returned. (Contributed by Elvis " +"Pranskevichus in :issue:`32751`.)" +msgstr "" +"当使用 :class:`asyncio.Task` 的实例时,函数 :func:`asyncio.wait_for` 现在会正确地等待撤销。 " +"在此之前当达到 *timeout* 时,它会被撤销并立即返回。 (由 Elvis Pranskevichus 在 :issue:`32751` " +"中贡献。)" + +#: ../../whatsnew/3.8.rst:1974 +msgid "" +"The function :func:`asyncio.BaseTransport.get_extra_info` now returns a safe" +" to use socket object when 'socket' is passed to the *name* parameter. " +"(Contributed by Yury Selivanov in :issue:`37027`.)" +msgstr "" +"当将 'socket' 作为 *name* 形参传入时,函数 :func:`asyncio.BaseTransport.get_extra_info` " +"现在会返回一个可安全使用的套接字对象。 (由 Yury Selivanov 在 :issue:`37027` 中贡献。)" + +#: ../../whatsnew/3.8.rst:1978 +msgid ":class:`asyncio.BufferedProtocol` has graduated to the stable API." +msgstr ":class:`asyncio.BufferedProtocol` 已经晋级为稳定 API。" + +#: ../../whatsnew/3.8.rst:1982 +msgid "" +"DLL dependencies for extension modules and DLLs loaded with :mod:`ctypes` on" +" Windows are now resolved more securely. Only the system paths, the " +"directory containing the DLL or PYD file, and directories added with " +":func:`~os.add_dll_directory` are searched for load-time dependencies. " +"Specifically, :envvar:`PATH` and the current working directory are no longer" +" used, and modifications to these will no longer have any effect on normal " +"DLL resolution. If your application relies on these mechanisms, you should " +"check for :func:`~os.add_dll_directory` and if it exists, use it to add your" +" DLLs directory while loading your library. Note that Windows 7 users will " +"need to ensure that Windows Update KB2533623 has been installed (this is " +"also verified by the installer). (Contributed by Steve Dower in " +":issue:`36085`.)" +msgstr "" +"在 Windows 上对扩展模块的 DLL 依赖以及通过 :mod:`ctypes` 加载的 DLL 的解析现在将更为安全。 只有系统路径、包含相信 " +"DLL 或 PYD 文件的路径以及通过 :func:`~os.add_dll_directory` 添加的目录才会被作为加载时依赖的搜索位置。 " +"特别地,:envvar:`PATH` 和当前工作目录将不再被使用,对它们的修改将不再对正常的 DLL 解析产生影响。 " +"如果你的应用依赖于这些机制,你应当先检查 :func:`~os.add_dll_directory`,如果它存在就用它在加载你的库时添加你的 DLL " +"目录。 请注意 Windows 7 用户还需要确保 Windows 更新包 KB2533623 已安装(这一点也会由安装器进行验证)。 (由 Steve" +" Dower 在 :issue:`36085` 中贡献。)" + +#: ../../whatsnew/3.8.rst:1995 +msgid "" +"The header files and functions related to pgen have been removed after its " +"replacement by a pure Python implementation. (Contributed by Pablo Galindo " +"in :issue:`36623`.)" +msgstr "" +"关联到 pgen 的头文件和函数在其被纯 Python 实现取代后已被移除。 (由 Pablo Galindo 在 :issue:`36623` " +"中贡献。)" + +#: ../../whatsnew/3.8.rst:1999 +msgid "" +":class:`types.CodeType` has a new parameter in the second position of the " +"constructor (*posonlyargcount*) to support positional-only arguments defined" +" in :pep:`570`. The first argument (*argcount*) now represents the total " +"number of positional arguments (including positional-only arguments). The " +"new ``replace()`` method of :class:`types.CodeType` can be used to make the " +"code future-proof." +msgstr "" +":class:`types.CodeType` 在构造器的第二个位置新增了一个形参 (*posonlyargcount*) 以支持在 " +":pep:`570` 中定义的仅限位置参数。 第一个参数 (*argcount*) 现在表示位置参数的总数量 (包括仅限位置参数)。 " +":class:`types.CodeType` 中新增的 ``replace()`` 方法可用于让代码支持 future 特性。" + +#: ../../whatsnew/3.8.rst:2006 +msgid "" +"The parameter ``digestmod`` for :func:`hmac.new` no longer uses the MD5 " +"digest by default." +msgstr ":func:`hmac.new` 的 ``digestmod`` 形参不再默认使用 MD5 摘要。" + +#: ../../whatsnew/3.8.rst:2010 +msgid "Changes in the C API" +msgstr "C API 的变化" + +#: ../../whatsnew/3.8.rst:2012 +msgid "" +"The :c:type:`PyCompilerFlags` structure got a new *cf_feature_version* " +"field. It should be initialized to ``PY_MINOR_VERSION``. The field is " +"ignored by default, and is used if and only if ``PyCF_ONLY_AST`` flag is set" +" in *cf_flags*. (Contributed by Guido van Rossum in :issue:`35766`.)" +msgstr "" +":c:type:`PyCompilerFlags` 结构体添加了一个新的 *cf_feature_version* 字段。 它应当被初始化为 " +"``PY_MINOR_VERSION``。 该字段默认会被忽略,当且仅当 ``PyCF_ONLY_AST`` 在 *cf_flags* " +"中设置旗标时才会被使用。 (由 Guido van Rossum 在 :issue:`35766` 中贡献。)" + +#: ../../whatsnew/3.8.rst:2018 +msgid "" +"The :c:func:`PyEval_ReInitThreads` function has been removed from the C API." +" It should not be called explicitly: use :c:func:`PyOS_AfterFork_Child` " +"instead. (Contributed by Victor Stinner in :issue:`36728`.)" +msgstr "" +":c:func:`PyEval_ReInitThreads` 函数已从 C API 中移除。 它不应当被显式地调用;请改用 " +":c:func:`PyOS_AfterFork_Child`。 (由 Victor Stinner 在 :issue:`36728` 中贡献。)" + +#: ../../whatsnew/3.8.rst:2023 +msgid "" +"On Unix, C extensions are no longer linked to libpython except on Android " +"and Cygwin. When Python is embedded, ``libpython`` must not be loaded with " +"``RTLD_LOCAL``, but ``RTLD_GLOBAL`` instead. Previously, using " +"``RTLD_LOCAL``, it was already not possible to load C extensions which were " +"not linked to ``libpython``, like C extensions of the standard library built" +" by the ``*shared*`` section of ``Modules/Setup``. (Contributed by Victor " +"Stinner in :issue:`21536`.)" +msgstr "" +"在 Unix 上,C 扩展不会再被链接到 libpython,但 Android 和 Cygwin 例外。 当 Python " +"被嵌入时,``libpython`` 不可使用 ``RTLD_LOCAL`` 加载,而要改用 ``RTLD_GLOBAL``。 之前使用 " +"``RTLD_LOCAL`` 已经不可能加载未链接到 ``libpython`` 的 C 扩展了,例如通过 ``Modules/Setup`` 的 " +"``*shared*`` 部分构建的标准库 C 扩展。 (由 Victor Stinner 在 :issue:`21536` 中贡献。)" + +#: ../../whatsnew/3.8.rst:2031 +msgid "" +"Use of ``#`` variants of formats in parsing or building value (e.g. " +":c:func:`PyArg_ParseTuple`, :c:func:`Py_BuildValue`, " +":c:func:`PyObject_CallFunction`, etc.) without ``PY_SSIZE_T_CLEAN`` defined " +"raises ``DeprecationWarning`` now. It will be removed in 3.10 or 4.0. Read " +":ref:`arg-parsing` for detail. (Contributed by Inada Naoki in " +":issue:`36381`.)" +msgstr "" +"在解析或构建值时(例如 :c:func:`PyArg_ParseTuple`, :c:func:`Py_BuildValue`, " +":c:func:`PyObject_CallFunction` 等等)使用形如 ``#`` 的格式而不定义 ``PY_SSIZE_T_CLEAN`` " +"现在将会引发 ``DeprecationWarning``。 它将在 3.10 或 4.0 中被移除。 请参阅 :ref:`arg-parsing` " +"了解详情。 (由 Inada Naoki 在 :issue:`36381` 中贡献。)" + +#: ../../whatsnew/3.8.rst:2037 +msgid "" +"Instances of heap-allocated types (such as those created with " +":c:func:`PyType_FromSpec`) hold a reference to their type object. Increasing" +" the reference count of these type objects has been moved from " +":c:func:`PyType_GenericAlloc` to the more low-level functions, " +":c:func:`PyObject_Init` and :c:func:`PyObject_INIT`. This makes types " +"created through :c:func:`PyType_FromSpec` behave like other classes in " +"managed code." +msgstr "" +"堆分配类型的实例(例如使用 :c:func:`PyType_FromSpec` 创建的实例)会保存一个对其类型对象的引用。 " +"提升这些类型对象引用计数的操作已从 :c:func:`PyType_GenericAlloc` 移至更低层级的函数 " +":c:func:`PyObject_Init` 和 :c:func:`PyObject_INIT`。 这使用通过This makes types " +"created through :c:func:`PyType_FromSpec` 所创建类型的行为与管理代码中的其他类保持一致。" + +#: ../../whatsnew/3.8.rst:2045 +msgid "Statically allocated types are not affected." +msgstr "静态分配类型将不受影响。" + +#: ../../whatsnew/3.8.rst:2047 +msgid "" +"For the vast majority of cases, there should be no side effect. However, " +"types that manually increase the reference count after allocating an " +"instance (perhaps to work around the bug) may now become immortal. To avoid " +"this, these classes need to call Py_DECREF on the type object during " +"instance deallocation." +msgstr "" +"在大部分情况下,这应该都不会有附带影响。 但是,在分配实例后手动提升引用计数的类型(也许是为了绕过漏洞)现在可能永远不会被销毁。 " +"要避免这种情况,这些类需要在实例撤销分配期间在类型对象上调用 Py_DECREF。" + +#: ../../whatsnew/3.8.rst:2053 +msgid "" +"To correctly port these types into 3.8, please apply the following changes:" +msgstr "要正确地将这些类型移植到 3.8,请应用以下修改:" + +#: ../../whatsnew/3.8.rst:2056 +msgid "" +"Remove :c:macro:`Py_INCREF` on the type object after allocating an instance " +"- if any. This may happen after calling :c:func:`PyObject_New`, " +":c:func:`PyObject_NewVar`, :c:func:`PyObject_GC_New`, " +":c:func:`PyObject_GC_NewVar`, or any other custom allocator that uses " +":c:func:`PyObject_Init` or :c:func:`PyObject_INIT`." +msgstr "" +"在分配实例之后在类型对象上移除 :c:macro:`Py_INCREF` —— 如果有的话。 这可以发生在调用 " +":c:func:`PyObject_New`, :c:func:`PyObject_NewVar`, " +":c:func:`PyObject_GC_New`, :c:func:`PyObject_GC_NewVar` 或任何其他使用 " +":c:func:`PyObject_Init` 或 :c:func:`PyObject_INIT` 的自定义分配器之后。" + +#: ../../whatsnew/3.8.rst:2063 ../../whatsnew/3.8.rst:2082 +#: ../../whatsnew/3.8.rst:2101 +msgid "Example:" +msgstr "示例:" + +#: ../../whatsnew/3.8.rst:2079 +msgid "" +"Ensure that all custom ``tp_dealloc`` functions of heap-allocated types " +"decrease the type's reference count." +msgstr "确保所有堆分配类型的自定义 ``tp_dealloc`` 函数会减少类型的引用计数。" + +#: ../../whatsnew/3.8.rst:2096 +msgid "(Contributed by Eddie Elizondo in :issue:`35810`.)" +msgstr "(由 Eddie Elizondo 在 :issue:`35810` 中贡献。)" + +#: ../../whatsnew/3.8.rst:2098 +msgid "" +"The :c:macro:`Py_DEPRECATED()` macro has been implemented for MSVC. The " +"macro now must be placed before the symbol name." +msgstr ":c:macro:`Py_DEPRECATED()` 宏已经针对 MSVC 实现。 这个宏现在必须放在符号名称之前。" + +#: ../../whatsnew/3.8.rst:2107 +msgid "(Contributed by Zackery Spytz in :issue:`33407`.)" +msgstr "(由 Zackery Spytz 在 :issue:`33407` 中贡献。)" + +#: ../../whatsnew/3.8.rst:2109 +msgid "" +"The interpreter does not pretend to support binary compatibility of " +"extension types across feature releases, anymore. A :c:type:`PyTypeObject` " +"exported by a third-party extension module is supposed to have all the slots" +" expected in the current Python version, including " +":c:member:`~PyTypeObject.tp_finalize` (:const:`Py_TPFLAGS_HAVE_FINALIZE` is " +"not checked anymore before reading :c:member:`~PyTypeObject.tp_finalize`)." +msgstr "" +"解释器将不再假装支持跨发布版本的扩展类型二进制兼容性。 由第三方扩展模块所导出的 :c:type:`PyTypeObject` 应该具有当前 " +"Python 版本所要求的所有空位,包括 :c:member:`~PyTypeObject.tp_finalize` " +"(:const:`Py_TPFLAGS_HAVE_FINALIZE` 不会再在读取 " +":c:member:`~PyTypeObject.tp_finalize` 之前被检查)。" + +#: ../../whatsnew/3.8.rst:2116 +msgid "(Contributed by Antoine Pitrou in :issue:`32388`.)" +msgstr "(由 Antoine Pitrou 在 :issue:`32388` 中贡献。)" + +#: ../../whatsnew/3.8.rst:2118 +msgid "" +"The functions :c:func:`PyNode_AddChild` and :c:func:`PyParser_AddToken` now " +"accept two additional ``int`` arguments *end_lineno* and *end_col_offset*." +msgstr "" +"函数 :c:func:`PyNode_AddChild` 和 :c:func:`PyParser_AddToken` 现在接受两个额外的 ``int``" +" 参数 *end_lineno* 和 *end_col_offset*。" + +#: ../../whatsnew/3.8.rst:2121 +msgid "" +"The :file:`libpython38.a` file to allow MinGW tools to link directly against" +" :file:`python38.dll` is no longer included in the regular Windows " +"distribution. If you require this file, it may be generated with the " +"``gendef`` and ``dlltool`` tools, which are part of the MinGW binutils " +"package:" +msgstr "" +"允许 MinGW 工具直接链接到 :file:`python38.dll` 的 :file:`libpython38.a` 文件已不再包含于标准的 " +"Windows 分发包中。 如果你需要此文件,可使用 ``gendef`` 和 ``dlltool`` 工具来生成它,这些工具是 MinGW " +"binutils 包的一部分:" + +#: ../../whatsnew/3.8.rst:2131 +msgid "" +"The location of an installed :file:`pythonXY.dll` will depend on the " +"installation options and the version and language of Windows. See " +":ref:`using-on-windows` for more information. The resulting library should " +"be placed in the same directory as :file:`pythonXY.lib`, which is generally " +"the :file:`libs` directory under your Python installation." +msgstr "" +"已安装的 :file:`pythonXY.dll` 所在位置将取决于安装选项以及 Windows 的版本和语言。 请参阅 :ref:`using-on-" +"windows` 了解更多信息。 该结果库应当放在与 :file:`pythonXY.lib` 相同的目录下,这通常是你的 Python 安装路径下的 " +":file:`libs` 目录。" + +#: ../../whatsnew/3.8.rst:2137 +msgid "(Contributed by Steve Dower in :issue:`37351`.)" +msgstr "(由 Steve Dower 在 :issue:`37351` 中贡献。)" + +#: ../../whatsnew/3.8.rst:2141 +msgid "CPython bytecode changes" +msgstr "CPython 字节码的改变" + +#: ../../whatsnew/3.8.rst:2143 +msgid "" +"The interpreter loop has been simplified by moving the logic of unrolling " +"the stack of blocks into the compiler. The compiler emits now explicit " +"instructions for adjusting the stack of values and calling the cleaning-up " +"code for :keyword:`break`, :keyword:`continue` and :keyword:`return`." +msgstr "" +"解释器循环已通过将块堆栈展开逻辑移入编译器获得了简化。 编译器现在会发出显式指令来调整值堆栈并为 :keyword:`break`, " +":keyword:`continue` 和 :keyword:`return` 调用清除代码。" + +#: ../../whatsnew/3.8.rst:2149 +msgid "" +"Removed opcodes :opcode:`BREAK_LOOP`, :opcode:`CONTINUE_LOOP`, " +":opcode:`SETUP_LOOP` and :opcode:`SETUP_EXCEPT`. Added new opcodes " +":opcode:`ROT_FOUR`, :opcode:`BEGIN_FINALLY`, :opcode:`CALL_FINALLY` and " +":opcode:`POP_FINALLY`. Changed the behavior of :opcode:`END_FINALLY` and " +":opcode:`WITH_CLEANUP_START`." +msgstr "" +"移除了操作码 :opcode:`BREAK_LOOP`, :opcode:`CONTINUE_LOOP`, :opcode:`SETUP_LOOP` 和" +" :opcode:`SETUP_EXCEPT`。 添加了新的操作码 :opcode:`ROT_FOUR`, " +":opcode:`BEGIN_FINALLY`, :opcode:`CALL_FINALLY` 和 :opcode:`POP_FINALLY`。 修改了" +" :opcode:`END_FINALLY` 和 :opcode:`WITH_CLEANUP_START` 的行为。" + +#: ../../whatsnew/3.8.rst:2155 +msgid "" +"(Contributed by Mark Shannon, Antoine Pitrou and Serhiy Storchaka in " +":issue:`17611`.)" +msgstr "" +"(由 Mark Shannon, Antoine Pitrou 和 Serhiy Storchaka 在 :issue:`17611` 中贡献。)" + +#: ../../whatsnew/3.8.rst:2158 +msgid "" +"Added new opcode :opcode:`END_ASYNC_FOR` for handling exceptions raised when" +" awaiting a next item in an :keyword:`async for` loop. (Contributed by " +"Serhiy Storchaka in :issue:`33041`.)" +msgstr "" +"添加了新的操作码 :opcode:`END_ASYNC_FOR` 用于处理当等待 :keyword:`async for` 循环的下一项时引发的异常。 " +"(由 Serhiy Storchaka 在 :issue:`33041` 中贡献。)" + +#: ../../whatsnew/3.8.rst:2162 +msgid "" +"The :opcode:`MAP_ADD` now expects the value as the first element in the " +"stack and the key as the second element. This change was made so the key is " +"always evaluated before the value in dictionary comprehensions, as proposed " +"by :pep:`572`. (Contributed by Jörn Heissler in :issue:`35224`.)" +msgstr "" +":opcode:`MAP_ADD` 现在会预期值为栈的第一个元素而键为第二个元素。 作出此改变以使得字典推导式能如 :pep:`572` " +"所提议的那样,键总是会在值之前被求值。 (由 Jörn Heissler 在 :issue:`35224` 中贡献。)" + +#: ../../whatsnew/3.8.rst:2169 +msgid "Demos and Tools" +msgstr "演示和工具" + +#: ../../whatsnew/3.8.rst:2171 +msgid "" +"Added a benchmark script for timing various ways to access variables: " +"``Tools/scripts/var_access_benchmark.py``. (Contributed by Raymond Hettinger" +" in :issue:`35884`.)" +msgstr "" +"添加了一个检测脚本用于对访问变量的不同方式进行计时: ``Tools/scripts/var_access_benchmark.py``。 (由 " +"Raymond Hettinger 在 :issue:`35884` 中贡献。)" + +#: ../../whatsnew/3.8.rst:2175 +msgid "Here's a summary of performance improvements since Python 3.3:" +msgstr "以下是自 Python 3.3 以来性能提升情况的总结:" + +#: ../../whatsnew/3.8.rst:2222 +msgid "" +"The benchmarks were measured on an `Intel® Core™ i7-4960HQ processor " +"`_ running the macOS " +"64-bit builds found at `python.org `_. The benchmark script displays timings in nanoseconds." +msgstr "" +"基准测试是在 `Intel® Core™ i7-4960HQ 处理器 " +"`_ 上运行从 `python.org " +"`_ 获取的 macOS 64 位版得到的数据。 " +"基准测试脚本显示时间以纳秒为单位。" + +#: ../../whatsnew/3.8.rst:2231 +msgid "Notable changes in Python 3.8.1" +msgstr "Python 3.8.1 中的重要变化" + +#: ../../whatsnew/3.8.rst:2233 +msgid "" +"Due to significant security concerns, the *reuse_address* parameter of " +":meth:`asyncio.loop.create_datagram_endpoint` is no longer supported. This " +"is because of the behavior of the socket option ``SO_REUSEADDR`` in UDP. For" +" more details, see the documentation for " +"``loop.create_datagram_endpoint()``. (Contributed by Kyle Stanley, Antoine " +"Pitrou, and Yury Selivanov in :issue:`37228`.)" +msgstr "" +"出于重要的安全性考量,:meth:`asyncio.loop.create_datagram_endpoint` 的 *reuse_address* " +"形参不再被支持。 这是由 UDP 中的套接字选项 ``SO_REUSEADDR`` 的行为导致的。 更多细节请参阅 " +"``loop.create_datagram_endpoint()`` 的文档。 (由 Kyle Stanley, Antoine Pitrou 和 " +"Yury Selivanov 在 :issue:`37228` 中贡献。。)" + +#: ../../whatsnew/3.8.rst:2241 +msgid "Notable changes in Python 3.8.8" +msgstr "Python 3.8.8 中的重要变化" + +#: ../../whatsnew/3.8.rst:2243 +msgid "" +"Earlier Python versions allowed using both ``;`` and ``&`` as query " +"parameter separators in :func:`urllib.parse.parse_qs` and " +":func:`urllib.parse.parse_qsl`. Due to security concerns, and to conform " +"with newer W3C recommendations, this has been changed to allow only a single" +" separator key, with ``&`` as the default. This change also affects " +":func:`cgi.parse` and :func:`cgi.parse_multipart` as they use the affected " +"functions internally. For more details, please see their respective " +"documentation. (Contributed by Adam Goldschmidt, Senthil Kumaran and Ken Jin" +" in :issue:`42967`.)" +msgstr "" +"早先的 Python 版本允许使用 ``;`` 和 ``&`` 作为 :func:`urllib.parse.parse_qs` 和 " +":func:`urllib.parse.parse_qsl` 中 query 形参的分隔键。 出于安全考虑,也为了遵循更新的 W3C " +"推荐设置,这已被改为只允许单个分隔键,默认为 ``&``。 这一改变还会影响 :func:`cgi.parse` 和 " +":func:`cgi.parse_multipart` 因为它们在内部使用了受影响的函数。 要了解更多细节,请查看它们各自的文档。 (由 Adam " +"Goldschmidt, Senthil Kumaran 和 Ken Jin 在 :issue:`42967` 中贡献。)" + +#: ../../whatsnew/3.8.rst:2254 +msgid "Notable changes in Python 3.8.12" +msgstr "Python 3.8.12 中的重要变化" + +#: ../../whatsnew/3.8.rst:2256 +msgid "" +"Starting with Python 3.8.12 the :mod:`ipaddress` module no longer accepts " +"any leading zeros in IPv4 address strings. Leading zeros are ambiguous and " +"interpreted as octal notation by some libraries. For example the legacy " +"function :func:`socket.inet_aton` treats leading zeros as octal notation. " +"glibc implementation of modern :func:`~socket.inet_pton` does not accept any" +" leading zeros." +msgstr "" +"从 Python 3.8.12 开始 :mod:`ipaddress` 模块不再接受 IPv4 地址字符串中有任何前缀的零。 " +"前缀的零有歧义且会被某些库解读为八进制数字。 例如旧版函数 :func:`socket.inet_aton` 就将前缀的零视为八进制数字。 最新 " +":func:`~socket.inet_pton` 的 glibc 实现则不接受任何前缀的零。" + +#: ../../whatsnew/3.8.rst:2263 +msgid "" +"(Originally contributed by Christian Heimes in :issue:`36384`, and " +"backported to 3.8 by Achraf Merzouki.)" +msgstr "" +"(最初由 Christian Heimes 在 :issue:`36384` 中贡献,并由 Achraf Merzouki 向下移植到 3.8。)" diff --git a/whatsnew/3.9.po b/whatsnew/3.9.po new file mode 100644 index 000000000..807bda5bf --- /dev/null +++ b/whatsnew/3.9.po @@ -0,0 +1,3041 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) 2001-2024, Python Software Foundation +# This file is distributed under the same license as the Python package. +# FIRST AUTHOR , YEAR. +# +# Translators: +# jacky , 2020 +# Xu Siyuan, 2020 +# Leo Li , 2020 +# Kaizhao Zhang , 2020 +# jaystone776 <1732865113@qq.com>, 2020 +# Alpha Du , 2022 +# Jason Ren, 2023 +# Rafael Fontenelle , 2024 +# Freesand Leo , 2024 +# ppcfish , 2024 +# +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: Python 3.9\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2024-09-06 19:48+0000\n" +"PO-Revision-Date: 2020-05-31 09:32+0000\n" +"Last-Translator: ppcfish , 2024\n" +"Language-Team: Chinese (China) (https://app.transifex.com/python-doc/teams/5390/zh_CN/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: zh_CN\n" +"Plural-Forms: nplurals=1; plural=0;\n" + +#: ../../whatsnew/3.9.rst:3 +msgid "What's New In Python 3.9" +msgstr "Python 3.9 有什么新变化" + +#: ../../whatsnew/3.9.rst:0 +msgid "Release" +msgstr "发布版本" + +#: ../../whatsnew/3.9.rst:5 +msgid "|release|" +msgstr "|release|" + +#: ../../whatsnew/3.9.rst:0 +msgid "Date" +msgstr "日期" + +#: ../../whatsnew/3.9.rst:6 +msgid "|today|" +msgstr "|today|" + +#: ../../whatsnew/3.9.rst:0 +msgid "Editor" +msgstr "编者" + +#: ../../whatsnew/3.9.rst:7 +msgid "Łukasz Langa" +msgstr "Łukasz Langa" + +#: ../../whatsnew/3.9.rst:47 +msgid "" +"This article explains the new features in Python 3.9, compared to 3.8. " +"Python 3.9 was released on October 5th, 2020." +msgstr "本文介绍了 Python 3.9 相比 3.8 的新特性。 Python 3.9 发布于 2020 年 10 月 5 日。" + +#: ../../whatsnew/3.9.rst:50 +msgid "For full details, see the :ref:`changelog `." +msgstr "详情请参阅 :ref:`更新日志 `。" + +#: ../../whatsnew/3.9.rst:54 +msgid ":pep:`596` - Python 3.9 Release Schedule" +msgstr ":pep:`596` - Python 3.9 发布计划" + +#: ../../whatsnew/3.9.rst:58 +msgid "Summary -- Release highlights" +msgstr "摘要 -- 发布重点" + +#: ../../whatsnew/3.9.rst:63 +msgid "New syntax features:" +msgstr "新的语法特性:" + +#: ../../whatsnew/3.9.rst:65 +msgid ":pep:`584`, union operators added to ``dict``;" +msgstr ":pep:`584`,为 ``dict`` 增加合并运算符;" + +#: ../../whatsnew/3.9.rst:66 +msgid ":pep:`585`, type hinting generics in standard collections;" +msgstr ":pep:`585`,标准多项集中的类型标注泛型。" + +#: ../../whatsnew/3.9.rst:67 +msgid ":pep:`614`, relaxed grammar restrictions on decorators." +msgstr ":pep:`614`,放宽对装饰器的语法限制。" + +#: ../../whatsnew/3.9.rst:69 +msgid "New built-in features:" +msgstr "新的内置特性:" + +#: ../../whatsnew/3.9.rst:71 +msgid ":pep:`616`, string methods to remove prefixes and suffixes." +msgstr ":pep:`616`,移除前缀和后缀的字符串方法。" + +#: ../../whatsnew/3.9.rst:73 +msgid "New features in the standard library:" +msgstr "标准库中的新特性:" + +#: ../../whatsnew/3.9.rst:75 +msgid ":pep:`593`, flexible function and variable annotations;" +msgstr ":pep:`593`,灵活函数和变量注解;" + +#: ../../whatsnew/3.9.rst:76 +msgid "" +":func:`os.pidfd_open` added that allows process management without races and" +" signals." +msgstr "添加了 :func:`os.pidfd_open` 以允许不带竞争和信号的进程管理。" + +#: ../../whatsnew/3.9.rst:79 +msgid "Interpreter improvements:" +msgstr "解释器的改进:" + +#: ../../whatsnew/3.9.rst:81 +msgid "" +":pep:`573`, fast access to module state from methods of C extension types;" +msgstr ":pep:`573`,从 C 扩展类型的方法快速访问模块状态;" + +#: ../../whatsnew/3.9.rst:83 +msgid ":pep:`617`, CPython now uses a new parser based on PEG;" +msgstr ":pep:`617`,CPython 现在使用基于 PEG 的新解析器;" + +#: ../../whatsnew/3.9.rst:84 +msgid "" +"a number of Python builtins (range, tuple, set, frozenset, list, dict) are " +"now sped up using :pep:`590` vectorcall;" +msgstr "" +"一些 Python 内置类型(range、tuple、set、frozenset、list、dict)现已使用 :pep:`590` " +"vectorcall 加速;" + +#: ../../whatsnew/3.9.rst:86 +msgid "garbage collection does not block on resurrected objects;" +msgstr "垃圾回收不会因恢复的对象而阻塞;" + +#: ../../whatsnew/3.9.rst:87 +msgid "" +"a number of Python modules (:mod:`_abc`, :mod:`audioop`, :mod:`_bz2`, " +":mod:`_codecs`, :mod:`_contextvars`, :mod:`_crypt`, :mod:`_functools`, " +":mod:`_json`, :mod:`_locale`, :mod:`math`, :mod:`operator`, :mod:`resource`," +" :mod:`time`, :mod:`_weakref`) now use multiphase initialization as defined " +"by PEP 489;" +msgstr "" +"一些 Python " +"模块(:mod:`_abc`、:mod:`audioop`、:mod:`_bz2`、:mod:`_codecs`、:mod:`_contextvars`、:mod:`_crypt`、:mod:`_functools`、:mod:`_json`、:mod:`_locale`、:mod:`math`、:mod:`operator`、:mod:`resource`、:mod:`time`、:mod:`_weakref`)现已使用" +" PEP 489 中定义的多段初始化;" + +#: ../../whatsnew/3.9.rst:92 +msgid "" +"a number of standard library modules (:mod:`audioop`, :mod:`ast`, " +":mod:`grp`, :mod:`_hashlib`, :mod:`pwd`, :mod:`_posixsubprocess`, " +":mod:`random`, :mod:`select`, :mod:`struct`, :mod:`termios`, :mod:`zlib`) " +"are now using the stable ABI defined by PEP 384." +msgstr "" +"一些标准库模块 " +"(:mod:`audioop`、:mod:`ast`、:mod:`grp`、:mod:`_hashlib`、:mod:`pwd`、:mod:`_posixsubprocess`、:mod:`random`、:mod:`select`、:mod:`struct`、:mod:`termios`、:mod:`zlib`)" +" 现已使用 PEP 384 中定义的稳定 ABI。" + +#: ../../whatsnew/3.9.rst:97 +msgid "New library modules:" +msgstr "新的库模块:" + +#: ../../whatsnew/3.9.rst:99 +msgid "" +":pep:`615`, the IANA Time Zone Database is now present in the standard " +"library in the :mod:`zoneinfo` module;" +msgstr ":pep:`615`,标准库的 :mod:`zoneinfo` 模块现已支持 IANA 时区数据库;" + +#: ../../whatsnew/3.9.rst:101 +msgid "" +"an implementation of a topological sort of a graph is now provided in the " +"new :mod:`graphlib` module." +msgstr "图的拓扑排序实现现在已由新的 :mod:`graphlib` 模块提供。" + +#: ../../whatsnew/3.9.rst:104 +msgid "Release process changes:" +msgstr "发布进程的变化:" + +#: ../../whatsnew/3.9.rst:106 +msgid ":pep:`602`, CPython adopts an annual release cycle." +msgstr ":pep:`602`,CPython 采用年度发布周期。" + +#: ../../whatsnew/3.9.rst:110 +msgid "You should check for DeprecationWarning in your code" +msgstr "请检查代码中的 DeprecationWarning。" + +#: ../../whatsnew/3.9.rst:112 +msgid "" +"When Python 2.7 was still supported, a lot of functionality in Python 3 was " +"kept for backward compatibility with Python 2.7. With the end of Python 2 " +"support, these backward compatibility layers have been removed, or will be " +"removed soon. Most of them emitted a :exc:`DeprecationWarning` warning for " +"several years. For example, using ``collections.Mapping`` instead of " +"``collections.abc.Mapping`` emits a :exc:`DeprecationWarning` since Python " +"3.3, released in 2012." +msgstr "" +"Python 2.7 支持未终止时,为了实现向下兼容 Python 2.7,Python 3 保留了许多旧版功能。Python 2 " +"的支持终止后,已经移除了一部分向下兼容层,剩余部分很快也会被移除。这几年,大部分兼容层都会触发 :exc:`DeprecationWarning` " +"警告。例如,2012 年发布 Python 3.3 后,用 ``collections.Mapping`` 替代 " +"``collections.abc.Mapping`` 就会触发 :exc:`DeprecationWarning`。" + +#: ../../whatsnew/3.9.rst:120 +msgid "" +"Test your application with the :option:`-W` ``default`` command-line option " +"to see :exc:`DeprecationWarning` and :exc:`PendingDeprecationWarning`, or " +"even with :option:`-W` ``error`` to treat them as errors. :ref:`Warnings " +"Filter ` can be used to ignore warnings from third-party " +"code." +msgstr "" +"请用 :option:`-W` ``default`` 命令行选项测试应用程序来查看 :exc:`DeprecationWarning` 和 " +":exc:`PendingDeprecationWarning`,甚至可以用 :option:`-W` ``error`` 将它们视为错误。 可以用 " +":ref:`警告过滤器 ` 忽略来自第三方代码的警告。" + +#: ../../whatsnew/3.9.rst:125 +msgid "" +"Python 3.9 is the last version providing those Python 2 backward " +"compatibility layers, to give more time to Python projects maintainers to " +"organize the removal of the Python 2 support and add support for Python 3.9." +msgstr "" +"Python 3.9 是最后一个提供 Python 2 向下兼容层的版本,以给予 Python 项目维护者更多时间移除 Python 2 支持,添加 " +"Python 3.9 支持。" + +#: ../../whatsnew/3.9.rst:129 +msgid "" +"Aliases to :ref:`Abstract Base Classes ` " +"in the :mod:`collections` module, like ``collections.Mapping`` alias to " +":class:`collections.abc.Mapping`, are kept for one last release for backward" +" compatibility. They will be removed from Python 3.10." +msgstr "" +":mod:`collections` 模块中 :ref:`抽象基类 ` " +"的别名,例如 :class:`collections.abc.Mapping` 的别名 ``collections.Mapping`` " +"会为向下兼容最后保留一个发行版。 这些内容将在 Python 3.10 中移除。" + +#: ../../whatsnew/3.9.rst:134 +msgid "" +"More generally, try to run your tests in the :ref:`Python Development Mode " +"` which helps to prepare your code to make it compatible with the " +"next Python version." +msgstr "" +"更通俗的说法是,请在 :ref:`Python 开发模式 ` 下运行测试,这样做有助于让代码兼容 Python 的后续版本。" + +#: ../../whatsnew/3.9.rst:138 +msgid "" +"Note: a number of pre-existing deprecations were removed in this version of " +"Python as well. Consult the :ref:`removed-in-python-39` section." +msgstr "注:一些前期已弃用的内容也将在此 Python 版本中移除。 详见 :ref:`removed-in-python-39` 一节。" + +#: ../../whatsnew/3.9.rst:143 ../../whatsnew/3.9.rst:1290 +msgid "New Features" +msgstr "新的特性" + +#: ../../whatsnew/3.9.rst:146 +msgid "Dictionary Merge & Update Operators" +msgstr "字典合并与更新运算符" + +#: ../../whatsnew/3.9.rst:148 +msgid "" +"Merge (``|``) and update (``|=``) operators have been added to the built-in " +":class:`dict` class. Those complement the existing ``dict.update`` and " +"``{**d1, **d2}`` methods of merging dictionaries." +msgstr "" +"合并 (``|``) 与更新 (``|=``) 运算符已被加入内置的 :class:`dict` 类。 它们为现有的 ``dict.update`` 和" +" ``{**d1, **d2}`` 字典合并方法提供了补充。" + +#: ../../whatsnew/3.9.rst:152 ../../whatsnew/3.9.rst:285 +msgid "Example::" +msgstr "示例::" + +#: ../../whatsnew/3.9.rst:161 +msgid "" +"See :pep:`584` for a full description. (Contributed by Brandt Bucher in " +":issue:`36144`.)" +msgstr "详见 :pep:`584`。(Brandt Bucher 在 :issue:`36144` 中的贡献。)" + +#: ../../whatsnew/3.9.rst:165 +msgid "New String Methods to Remove Prefixes and Suffixes" +msgstr "新增用于移除前缀和后缀的字符串方法" + +#: ../../whatsnew/3.9.rst:167 +msgid "" +":meth:`str.removeprefix(prefix)` and " +":meth:`str.removesuffix(suffix)` have been added to easily" +" remove an unneeded prefix or a suffix from a string. Corresponding " +"``bytes``, ``bytearray``, and ``collections.UserString`` methods have also " +"been added. See :pep:`616` for a full description. (Contributed by Dennis " +"Sweeney in :issue:`39939`.)" +msgstr "" +"增加了 :meth:`str.removeprefix(prefix)` 和 " +":meth:`str.removesuffix(suffix)` 用于方便地从字符串移除不需要的前缀或后缀。 " +"也增加了 ``bytes``, ``bytearray`` 以及 ``collections.UserString`` 的对应方法。 请参阅 " +":pep:`616` 了解详情。 (由 Dennis Sweeney 在 :issue:`39939` 中贡献。)" + +#: ../../whatsnew/3.9.rst:175 +msgid "Type Hinting Generics in Standard Collections" +msgstr "标准多项集中的类型标注泛型" + +#: ../../whatsnew/3.9.rst:177 +msgid "" +"In type annotations you can now use built-in collection types such as " +"``list`` and ``dict`` as generic types instead of importing the " +"corresponding capitalized types (e.g. ``List`` or ``Dict``) from ``typing``." +" Some other types in the standard library are also now generic, for example" +" ``queue.Queue``." +msgstr "" +"在类型标注中现在你可以使用内置多项集类型例如 ``list`` 和 ``dict`` 作为通用类型而不必从 ``typing`` " +"导入对应的大写形式类型名 (例如 ``List`` 和 ``Dict``)。 标准库中的其他一些类型现在同样也是通用的,例如 " +"``queue.Queue``。" + +#: ../../whatsnew/3.9.rst:183 ../../whatsnew/3.9.rst:1179 +msgid "Example:" +msgstr "示例:" + +#: ../../whatsnew/3.9.rst:191 +msgid "" +"See :pep:`585` for more details. (Contributed by Guido van Rossum, Ethan " +"Smith, and Batuhan Taşkaya in :issue:`39481`.)" +msgstr "" +"详见 :pep:`585`。(由 Guido van Rossum、Ethan Smith 和 Batuhan Taşkaya 在 " +":issue:`39481` 中贡献。)" + +#: ../../whatsnew/3.9.rst:195 +msgid "New Parser" +msgstr "新的解析器" + +#: ../../whatsnew/3.9.rst:197 +msgid "" +"Python 3.9 uses a new parser, based on `PEG " +"`_ instead of " +"`LL(1) `_. The new parser's " +"performance is roughly comparable to that of the old parser, but the PEG " +"formalism is more flexible than LL(1) when it comes to designing new " +"language features. We'll start using this flexibility in Python 3.10 and " +"later." +msgstr "" +"Python 3.9 使用于基于 `PEG " +"`_ 的新解析器替代 `LL(1) " +"`_。 新解析器的性能与旧解析器大致相当,但 PEG " +"在设计新语言特性时的形式化比 LL(1) 更灵活。 我们将在 Python 3.10 及之后版本中开始使用这种灵活性。" + +#: ../../whatsnew/3.9.rst:205 +msgid "" +"The :mod:`ast` module uses the new parser and produces the same AST as the " +"old parser." +msgstr ":mod:`ast` 模块会使用新解析器并会生成与旧解析器一致的 AST。" + +#: ../../whatsnew/3.9.rst:208 +msgid "" +"In Python 3.10, the old parser will be deleted and so will all functionality" +" that depends on it (primarily the :mod:`parser` module, which has long been" +" deprecated). In Python 3.9 *only*, you can switch back to the LL(1) parser" +" using a command line switch (``-X oldparser``) or an environment variable " +"(``PYTHONOLDPARSER=1``)." +msgstr "" +"在 Python 3.10 中,旧解析器将被移除,依赖于它的所有功能也将被移除(主要是 :mod:`parser` 模块,它早已被弃用)。 *只有* " +"在 Python 3.9 中,你可以使用命令行开关 (``-X oldparser``) 或环境变量 (``PYTHONOLDPARSER=1``) " +"切换回 LL(1) 解析器。" + +#: ../../whatsnew/3.9.rst:214 +msgid "" +"See :pep:`617` for more details. (Contributed by Guido van Rossum, Pablo " +"Galindo and Lysandros Nikolaou in :issue:`40334`.)" +msgstr "" +"请参阅 :pep:`617` 了解详情。 (由 Guido van Rossum, Pablo Galindo 和 Lysandros Nikolaou" +" 在 :issue:`40334` 中贡献。)" + +#: ../../whatsnew/3.9.rst:219 +msgid "Other Language Changes" +msgstr "其他语言特性修改" + +#: ../../whatsnew/3.9.rst:221 +msgid "" +":func:`__import__` now raises :exc:`ImportError` instead of " +":exc:`ValueError`, which used to occur when a relative import went past its " +"top-level package. (Contributed by Ngalim Siregar in :issue:`37444`.)" +msgstr "" +":func:`__import__` 现在会引发 :exc:`ImportError` 而不是 " +":exc:`ValueError`,后者曾经会在相对导入超出其最高层级包时发生。 (由 Ngalim Siregar 在 :issue:`37444` " +"中贡献。)" + +#: ../../whatsnew/3.9.rst:226 +msgid "" +"Python now gets the absolute path of the script filename specified on the " +"command line (ex: ``python3 script.py``): the ``__file__`` attribute of the " +":mod:`__main__` module became an absolute path, rather than a relative path." +" These paths now remain valid after the current directory is changed by " +":func:`os.chdir`. As a side effect, the traceback also displays the absolute" +" path for :mod:`__main__` module frames in this case. (Contributed by Victor" +" Stinner in :issue:`20443`.)" +msgstr "" +"Python 现在会获取命令行中指定的脚本文件名 (例如: ``python3 script.py``) 的绝对路径: :mod:`__main__` " +"模块的 ``__file__`` 属性将是一个绝对路径,而不是相对路径。 现在此路径在当前目录通过 :func:`os.chdir` " +"被改变后仍将保持有效。 作为附带效果,回溯信息也将在此情况下为 :mod:`__main__` 模块帧显示绝对路径。 (由 Victor Stinner" +" 在 :issue:`20443` 中贡献。)" + +#: ../../whatsnew/3.9.rst:234 +msgid "" +"In the :ref:`Python Development Mode ` and in debug build, the " +"*encoding* and *errors* arguments are now checked for string encoding and " +"decoding operations. Examples: :func:`open`, :meth:`str.encode` and " +":meth:`bytes.decode`." +msgstr "" +"在 :ref:`Python 开发模式 ` 以及调试编译版本中,现在会针对字符串编码和解码操作检查 *encoding* 和 " +"*errors* 参数。 例如: :func:`open`, :meth:`str.encode` 和 :meth:`bytes.decode`。" + +#: ../../whatsnew/3.9.rst:239 +msgid "" +"By default, for best performance, the *errors* argument is only checked at " +"the first encoding/decoding error and the *encoding* argument is sometimes " +"ignored for empty strings. (Contributed by Victor Stinner in " +":issue:`37388`.)" +msgstr "" +"默认设置下,为保证性能,*errors* 参数只会在第一次发生编码/解码错误时被检查,并且对于空字符串 *encoding* 参数有时会被忽略。 (由 " +"Victor Stinner 在 :issue:`37388` 中贡献。)" + +#: ../../whatsnew/3.9.rst:244 +msgid "" +"``\"\".replace(\"\", s, n)`` now returns ``s`` instead of an empty string " +"for all non-zero ``n``. It is now consistent with ``\"\".replace(\"\", " +"s)``. There are similar changes for :class:`bytes` and :class:`bytearray` " +"objects. (Contributed by Serhiy Storchaka in :issue:`28029`.)" +msgstr "" +"``\"\".replace(\"\", s, n)`` 对于所有非零的 ``n`` 都将返回 ``s`` 而不是空字符串。 现在此方法会与 " +"``\"\".replace(\"\", s)`` 保持一致。 对于 :class:`bytes` 和 :class:`bytearray` " +"对象也有类似的修改。 (由 Serhiy Storchaka 在 :issue:`28029` 中贡献。)" + +#: ../../whatsnew/3.9.rst:249 +msgid "" +"Any valid expression can now be used as a :term:`decorator`. Previously, " +"the grammar was much more restrictive. See :pep:`614` for details. " +"(Contributed by Brandt Bucher in :issue:`39702`.)" +msgstr "" +"任何有效的表达式现在都可被用作 :term:`decorator`。 在之前版本中,相关语法则更为严格。 请参阅 :pep:`614` 了解详情。 (由" +" Brandt Bucher 在 :issue:`39702` 中贡献。)" + +#: ../../whatsnew/3.9.rst:253 +msgid "" +"Improved help for the :mod:`typing` module. Docstrings are now shown for all" +" special forms and special generic aliases (like ``Union`` and ``List``). " +"Using :func:`help` with generic alias like ``List[int]`` will show the help " +"for the correspondent concrete type (``list`` in this case). (Contributed by" +" Serhiy Storchaka in :issue:`40257`.)" +msgstr "" +"改进了 :mod:`typing` 模块的帮助信息。 现在将为所有特殊形式和特殊通用别名 (例如 ``Union`` 和 ``List``) " +"显示文档字符串。 使用 :func:`help` 时传入通用别名例如 ``List[int]`` 将显示对应实体类型 (这里对应的是 ``list``)" +" 的帮助信息。 (由 Serhiy Storchaka 在 :issue:`40257` 中贡献。)" + +#: ../../whatsnew/3.9.rst:259 +msgid "" +"Parallel running of :meth:`~agen.aclose` / :meth:`~agen.asend` / " +":meth:`~agen.athrow` is now prohibited, and ``ag_running`` now reflects the " +"actual running status of the async generator. (Contributed by Yury Selivanov" +" in :issue:`30773`.)" +msgstr "" +":meth:`~agen.aclose` / :meth:`~agen.asend` / :meth:`~agen.athrow` " +"的并行运行现在已被禁止,且 ``ag_running`` 现在会反映异步生成器的实际运行状态。 (由 Yury Selivanov 在 " +":issue:`30773` 中贡献。)" + +#: ../../whatsnew/3.9.rst:264 +msgid "" +"Unexpected errors in calling the ``__iter__`` method are no longer masked by" +" ``TypeError`` in the :keyword:`in` operator and functions " +":func:`~operator.contains`, :func:`~operator.indexOf` and " +":func:`~operator.countOf` of the :mod:`operator` module. (Contributed by " +"Serhiy Storchaka in :issue:`40824`.)" +msgstr "" +"调用 ``__iter__`` 方法时发生的非预期错误不会再被 :keyword:`in` 运算符以及 :mod:`operator` 的 " +":func:`~operator.contains`, :func:`~operator.indexOf` 和 " +":func:`~operator.countOf` 中的 ``TypeError`` 所掩盖。 (由 Serhiy Storchaka 在 " +":issue:`40824` 中贡献。)" + +#: ../../whatsnew/3.9.rst:270 +msgid "" +"Unparenthesized lambda expressions can no longer be the expression part in " +"an ``if`` clause in comprehensions and generator expressions. See " +":issue:`41848` and :issue:`43755` for details." +msgstr "" +"未加圆括号的 lambda 表达式不能再作为推导式和生成器表达式的 ``if`` 子句的表达式部分。 请参阅 :issue:`41848` 和 " +":issue:`43755` 了解详情。" + +#: ../../whatsnew/3.9.rst:276 +msgid "New Modules" +msgstr "新增模块" + +#: ../../whatsnew/3.9.rst:279 +msgid "zoneinfo" +msgstr "zoneinfo" + +#: ../../whatsnew/3.9.rst:281 +msgid "" +"The :mod:`zoneinfo` module brings support for the IANA time zone database to" +" the standard library. It adds :class:`zoneinfo.ZoneInfo`, a concrete " +":class:`datetime.tzinfo` implementation backed by the system's time zone " +"data." +msgstr "" +":mod:`zoneinfo` 模块为标准库引入了 IANA 时区数据库。 它添加了 " +":class:`zoneinfo.ZoneInfo`,这是一个基于系统时区数据的实体 :class:`datetime.tzinfo` 实现。" + +#: ../../whatsnew/3.9.rst:305 +msgid "" +"As a fall-back source of data for platforms that don't ship the IANA " +"database, the |tzdata|_ module was released as a first-party package -- " +"distributed via PyPI and maintained by the CPython core team." +msgstr "" +"作为不包含 IANA 数据库的平台的一个回退数据源,还以第一方软件包的形式发布了 |tzdata|_ 模块 -- 通过 PyPI 发行并由 " +"CPython 核心团队维护。" + +#: ../../whatsnew/3.9.rst:314 +msgid "" +":pep:`615` -- Support for the IANA Time Zone Database in the Standard " +"Library" +msgstr ":pep:`615` -- 在标准库中支持 IANA 时区数据库" + +#: ../../whatsnew/3.9.rst:315 +msgid "PEP written and implemented by Paul Ganssle" +msgstr "PEP 由 Paul Ganssle 撰写并实现" + +#: ../../whatsnew/3.9.rst:319 +msgid "graphlib" +msgstr "graphlib" + +#: ../../whatsnew/3.9.rst:321 +msgid "" +"A new module, :mod:`graphlib`, was added that contains the " +":class:`graphlib.TopologicalSorter` class to offer functionality to perform " +"topological sorting of graphs. (Contributed by Pablo Galindo, Tim Peters and" +" Larry Hastings in :issue:`17005`.)" +msgstr "" +"添加了新的 :mod:`graphlib` 模块,其中包含 :class:`graphlib.TopologicalSorter` " +"类来提供图的拓扑排序功能。 (由 Pablo Galindo, Tim Peters 和 Larry Hastings 在 :issue:`17005`" +" 中贡献。)" + +#: ../../whatsnew/3.9.rst:328 +msgid "Improved Modules" +msgstr "改进的模块" + +#: ../../whatsnew/3.9.rst:331 +msgid "ast" +msgstr "ast" + +#: ../../whatsnew/3.9.rst:333 +msgid "" +"Added the *indent* option to :func:`~ast.dump` which allows it to produce a " +"multiline indented output. (Contributed by Serhiy Storchaka in " +":issue:`37995`.)" +msgstr "" +"将 *indent* 选项添加到 :func:`~ast.dump`,这允许它产生多行缩进的输出。 (由 Serhiy Storchaka 在 " +":issue:`37995` 中贡献。)" + +#: ../../whatsnew/3.9.rst:337 +msgid "" +"Added :func:`ast.unparse` as a function in the :mod:`ast` module that can be" +" used to unparse an :class:`ast.AST` object and produce a string with code " +"that would produce an equivalent :class:`ast.AST` object when parsed. " +"(Contributed by Pablo Galindo and Batuhan Taskaya in :issue:`38870`.)" +msgstr "" +"添加了 :func:`ast.unparse` 作为 :mod:`ast` 模块中的一个函数,它可被用来反解析 :class:`ast.AST` " +"对象并产生相应的代码字符串,当它被解析时将会产生一个等价的 :class:`ast.AST` 对象。 (由 Pablo Galindo 和 " +"Batuhan Taskaya 在 :issue:`38870` 中贡献。)" + +#: ../../whatsnew/3.9.rst:342 +msgid "" +"Added docstrings to AST nodes that contains the ASDL signature used to " +"construct that node. (Contributed by Batuhan Taskaya in :issue:`39638`.)" +msgstr "" +"为 AST 节点添加了文档字符串,其中包含 ASDL 签名,可被用来构造对应的节点。 (由 Batuhan Taskaya 在 " +":issue:`39638` 中贡献。)" + +#: ../../whatsnew/3.9.rst:346 +msgid "asyncio" +msgstr "asyncio" + +#: ../../whatsnew/3.9.rst:348 +msgid "" +"Due to significant security concerns, the *reuse_address* parameter of " +":meth:`asyncio.loop.create_datagram_endpoint` is no longer supported. This " +"is because of the behavior of the socket option ``SO_REUSEADDR`` in UDP. For" +" more details, see the documentation for " +"``loop.create_datagram_endpoint()``. (Contributed by Kyle Stanley, Antoine " +"Pitrou, and Yury Selivanov in :issue:`37228`.)" +msgstr "" +"出于重要的安全性考量,:meth:`asyncio.loop.create_datagram_endpoint` 的 *reuse_address* " +"形参不再被支持。 这是由 UDP 中的套接字选项 ``SO_REUSEADDR`` 的行为导致的。 更多细节请参阅 " +"``loop.create_datagram_endpoint()`` 的文档。 (由 Kyle Stanley, Antoine Pitrou 和 " +"Yury Selivanov 在 :issue:`37228` 中贡献。。)" + +#: ../../whatsnew/3.9.rst:355 +msgid "" +"Added a new :term:`coroutine` " +":meth:`~asyncio.loop.shutdown_default_executor` that schedules a shutdown " +"for the default executor that waits on the " +":class:`~concurrent.futures.ThreadPoolExecutor` to finish closing. Also, " +":func:`asyncio.run` has been updated to use the new :term:`coroutine`. " +"(Contributed by Kyle Stanley in :issue:`34037`.)" +msgstr "" +"添加了新的 :term:`coroutine` " +":meth:`~asyncio.loop.shutdown_default_executor`,它可为等待 " +":class:`~concurrent.futures.ThreadPoolExecutor` 结束关闭的默认执行器安排关闭日程操作。 " +"此外,:func:`asyncio.run` 已被更新以使用新的 :term:`coroutine`。 (由 Kyle Stanley 在 " +":issue:`34037` 中贡献。)" + +#: ../../whatsnew/3.9.rst:361 +msgid "" +"Added :class:`asyncio.PidfdChildWatcher`, a Linux-specific child watcher " +"implementation that polls process file descriptors. (:issue:`38692`)" +msgstr "" +"添加了 :class:`asyncio.PidfdChildWatcher`,这是一个 Linux 专属的子监视器实现,它负责轮询进程的文件描述符。 " +"(:issue:`38692`)" + +#: ../../whatsnew/3.9.rst:364 +msgid "" +"Added a new :term:`coroutine` :func:`asyncio.to_thread`. It is mainly used " +"for running IO-bound functions in a separate thread to avoid blocking the " +"event loop, and essentially works as a high-level version of " +":meth:`~asyncio.loop.run_in_executor` that can directly take keyword " +"arguments. (Contributed by Kyle Stanley and Yury Selivanov in " +":issue:`32309`.)" +msgstr "" +"添加了新的 :term:`coroutine` :func:`asyncio.to_thread`。 它主要被用于在单独线程中运行 IO " +"密集型函数以避免阻塞事件循环,实质上就相当于是 :meth:`~asyncio.loop.run_in_executor` " +"的高层级版本,可直接接受关键字参数。 (由 Kyle Stanley 和 Yury Selivanov 在 :issue:`32309` 中贡献。)" + +#: ../../whatsnew/3.9.rst:370 +msgid "" +"When cancelling the task due to a timeout, :meth:`asyncio.wait_for` will now" +" wait until the cancellation is complete also in the case when *timeout* is " +"<= 0, like it does with positive timeouts. (Contributed by Elvis " +"Pranskevichus in :issue:`32751`.)" +msgstr "" +"当由于超时而取消任务时,:meth:`asyncio.wait_for` 现在将会等待直到也在 *timeout* 值 <= 0 的情况下完成取消。 " +"就像 timeout 值为正数时一样。 (由 Elvis Pranskevichus 在 :issue:`32751` 中贡献。)" + +#: ../../whatsnew/3.9.rst:375 +msgid "" +":mod:`asyncio` now raises :exc:`TyperError` when calling incompatible " +"methods with an :class:`ssl.SSLSocket` socket. (Contributed by Ido Michael " +"in :issue:`37404`.)" +msgstr "" +"当附带 :class:`ssl.SSLSocket` 套接字调用不兼容的方法时 :mod:`asyncio` 现在会引发 " +":exc:`TyperError`。 (由 Ido Michael 在 :issue:`37404` 中贡献。)" + +#: ../../whatsnew/3.9.rst:380 +msgid "compileall" +msgstr "compileall" + +#: ../../whatsnew/3.9.rst:382 +msgid "" +"Added new possibility to use hardlinks for duplicated ``.pyc`` files: " +"*hardlink_dupes* parameter and --hardlink-dupes command line option. " +"(Contributed by Lumír 'Frenzy' Balhar in :issue:`40495`.)" +msgstr "" +"为重复的 ``.pyc`` 文件添加了使用硬软件的可能性: *hardlink_dupes* 形参以及 --hardlink-dupes 命令行选项。 " +"(由 Lumír 'Frenzy' Balhar 在 :issue:`40495` 中贡献。)" + +#: ../../whatsnew/3.9.rst:385 +msgid "" +"Added new options for path manipulation in resulting ``.pyc`` files: " +"*stripdir*, *prependdir*, *limit_sl_dest* parameters and -s, -p, -e command " +"line options. Added the possibility to specify the option for an " +"optimization level multiple times. (Contributed by Lumír 'Frenzy' Balhar in " +":issue:`38112`.)" +msgstr "" +"新增了一些用于在结果 ``.pyc`` 文件中操纵路径的选项: *stripdir*, *prependdir*, *limit_sl_dest* " +"形参以及 -s, -p, -e 命令行选项。 并使得为优化等级多次指定选项成为可能。 (由 Lumír 'Frenzy' Balhar 在 " +":issue:`38112` 中贡献。)" + +#: ../../whatsnew/3.9.rst:390 +msgid "concurrent.futures" +msgstr "concurrent.futures" + +#: ../../whatsnew/3.9.rst:392 +msgid "" +"Added a new *cancel_futures* parameter to " +":meth:`concurrent.futures.Executor.shutdown` that cancels all pending " +"futures which have not started running, instead of waiting for them to " +"complete before shutting down the executor. (Contributed by Kyle Stanley in " +":issue:`39349`.)" +msgstr "" +"将新的 *cancel_futures* 形参添加到 " +":meth:`concurrent.futures.Executor.shutdown`,可以取消尚未开始运行的所有挂起的 " +"Future,而不必等待它们完成运行再关闭执行器。 (由 Kyle Stanley 在 :issue:`39349` 中贡献。)" + +#: ../../whatsnew/3.9.rst:398 +msgid "" +"Removed daemon threads from :class:`~concurrent.futures.ThreadPoolExecutor` " +"and :class:`~concurrent.futures.ProcessPoolExecutor`. This improves " +"compatibility with subinterpreters and predictability in their shutdown " +"processes. (Contributed by Kyle Stanley in :issue:`39812`.)" +msgstr "" +"从 :class:`~concurrent.futures.ThreadPoolExecutor` 和 " +":class:`~concurrent.futures.ProcessPoolExecutor` 中移除了守护线程。 " +"这改善与与子解释器的兼容性及它们在关闭进程时的可预测性。 (由 Kyle Stanley 在 :issue:`39812` 中贡献。)" + +#: ../../whatsnew/3.9.rst:403 +msgid "" +"Workers in :class:`~concurrent.futures.ProcessPoolExecutor` are now spawned " +"on demand, only when there are no available idle workers to reuse. This " +"optimizes startup overhead and reduces the amount of lost CPU time to idle " +"workers. (Contributed by Kyle Stanley in :issue:`39207`.)" +msgstr "" +"现在 :class:`~concurrent.futures.ProcessPoolExecutor` " +"中的工作进程仅会在没有可重用的空闲工作进程时按需产生。 这优化了启动开销并减少了由空闲工作进程导致的 CPU 时间损失。 (由 Kyle Stanley" +" 在 :issue:`39207` 中贡献。)" + +#: ../../whatsnew/3.9.rst:409 +msgid "curses" +msgstr "curses" + +#: ../../whatsnew/3.9.rst:411 +msgid "" +"Added :func:`curses.get_escdelay`, :func:`curses.set_escdelay`, " +":func:`curses.get_tabsize`, and :func:`curses.set_tabsize` functions. " +"(Contributed by Anthony Sottile in :issue:`38312`.)" +msgstr "" +"增加了 :func:`curses.get_escdelay`, :func:`curses.set_escdelay`, " +":func:`curses.get_tabsize` 以及 :func:`curses.set_tabsize` 函数。(由 Anthony " +"Sottile 在 :issue:`38312` 中贡献。)" + +#: ../../whatsnew/3.9.rst:416 +msgid "datetime" +msgstr "datetime" + +#: ../../whatsnew/3.9.rst:417 +msgid "" +"The :meth:`~datetime.date.isocalendar()` of :class:`datetime.date` and " +":meth:`~datetime.datetime.isocalendar()` of :class:`datetime.datetime` " +"methods now returns a :func:`~collections.namedtuple` instead of a " +":class:`tuple`. (Contributed by Dong-hee Na in :issue:`24416`.)" +msgstr "" +":class:`datetime.date` 的 :meth:`~datetime.date.isocalendar()` 以及 " +":class:`datetime.datetime` 的 :meth:`~datetime.datetime.isocalendar()` " +"等方法现在将返回 :func:`~collections.namedtuple` 而不是 :class:`tuple`。 (由 Dong-hee Na " +"在 :issue:`24416` 中贡献。)" + +#: ../../whatsnew/3.9.rst:423 +msgid "distutils" +msgstr "distutils" + +#: ../../whatsnew/3.9.rst:425 +msgid "" +"The :command:`upload` command now creates SHA2-256 and Blake2b-256 hash " +"digests. It skips MD5 on platforms that block MD5 digest. (Contributed by " +"Christian Heimes in :issue:`40698`.)" +msgstr "" +":command:`upload` 命令现在会创建 SHA2-256 和 Blake2b-256 哈希摘要。 它会在禁用 MD5 摘要的平台上跳过 " +"MD5。 (由 Christian Heimes 在 :issue:`40698` 中贡献。)" + +#: ../../whatsnew/3.9.rst:430 +msgid "fcntl" +msgstr "fcntl" + +#: ../../whatsnew/3.9.rst:432 +msgid "" +"Added constants :data:`~fcntl.F_OFD_GETLK`, :data:`~fcntl.F_OFD_SETLK` and " +":data:`~fcntl.F_OFD_SETLKW`. (Contributed by Dong-hee Na in :issue:`38602`.)" +msgstr "" +"增加了 :data:`~fcntl.F_OFD_GETLK`, :data:`~fcntl.F_OFD_SETLK` 和 " +":data:`~fcntl.F_OFD_SETLKW` 等常量。 (由 Dong-hee Na 在 :issue:`38602` 中贡献。)" + +#: ../../whatsnew/3.9.rst:437 +msgid "ftplib" +msgstr "ftplib" + +#: ../../whatsnew/3.9.rst:439 +msgid "" +":class:`~ftplib.FTP` and :class:`~ftplib.FTP_TLS` now raise a " +":class:`ValueError` if the given timeout for their constructor is zero to " +"prevent the creation of a non-blocking socket. (Contributed by Dong-hee Na " +"in :issue:`39259`.)" +msgstr "" +"现在 :class:`~ftplib.FTP` 和 :class:`~ftplib.FTP_TLS` " +"当它们的构造器所给定的超时参数为零以防止创建非阻塞套接字时会引发 :class:`ValueError`。 (由 Dong-hee Na 在 " +":issue:`39259` 中贡献。)" + +#: ../../whatsnew/3.9.rst:444 +msgid "gc" +msgstr "gc" + +#: ../../whatsnew/3.9.rst:446 +msgid "" +"When the garbage collector makes a collection in which some objects " +"resurrect (they are reachable from outside the isolated cycles after the " +"finalizers have been executed), do not block the collection of all objects " +"that are still unreachable. (Contributed by Pablo Galindo and Tim Peters in " +":issue:`38379`.)" +msgstr "" +"当垃圾回收器进行某些复活对象的收集时(在终结器被执行之后这些对象可以在隔离周期之外被访问),不会阻止对所有仍然无法访问的对象的收集。 (由 Pablo " +"Galindo 和 Tim Peters 在 :issue:`38379` 中贡献。)" + +#: ../../whatsnew/3.9.rst:451 +msgid "" +"Added a new function :func:`gc.is_finalized` to check if an object has been " +"finalized by the garbage collector. (Contributed by Pablo Galindo in " +":issue:`39322`.)" +msgstr "" +"增加了一个新的函数 :func:`gc.is_finalized` 用来检测一个对象是否已被垃圾回收器所终结。 (由 Pablo Galindo 在 " +":issue:`39322` 中贡献。)" + +#: ../../whatsnew/3.9.rst:456 +msgid "hashlib" +msgstr "hashlib" + +#: ../../whatsnew/3.9.rst:458 +msgid "" +"The :mod:`hashlib` module can now use SHA3 hashes and SHAKE XOF from OpenSSL" +" when available. (Contributed by Christian Heimes in :issue:`37630`.)" +msgstr "" +":mod:`hashlib` 模块现在会在可能的情况下使用 OpenSSL 中的 SHA3 哈希和 SHAKE XOF。 (由 Christian " +"Heimes 在 :issue:`37630` 中贡献。)" + +#: ../../whatsnew/3.9.rst:462 +msgid "" +"Builtin hash modules can now be disabled with ``./configure --without-" +"builtin-hashlib-hashes`` or selectively enabled with e.g. ``./configure " +"--with-builtin-hashlib-hashes=sha3,blake2`` to force use of OpenSSL based " +"implementation. (Contributed by Christian Heimes in :issue:`40479`)" +msgstr "" +"内置的哈希模块现在可通过 ``./configure --without-builtin-hashlib-hashes`` 禁用或通过 " +"``./configure --with-builtin-hashlib-hashes=sha3,blake2`` 这样的形式有选择地启用以强制使用基于" +" OpenSSL 的实现。 (由 Christian Heimes 在 :issue:`40479` 中贡献)" + +#: ../../whatsnew/3.9.rst:470 +msgid "http" +msgstr "http" + +#: ../../whatsnew/3.9.rst:472 +msgid "" +"HTTP status codes ``103 EARLY_HINTS``, ``418 IM_A_TEAPOT`` and ``425 " +"TOO_EARLY`` are added to :class:`http.HTTPStatus`. (Contributed by Dong-hee " +"Na in :issue:`39509` and Ross Rhodes in :issue:`39507`.)" +msgstr "" +"添加 HTTP 状态码 ``103 EARLY_HINTS``, ``418 IM_A_TEAPOT`` 和 ``425 TOO_EARLY`` 到 " +":class:`http.HTTPStatus`。 (由 Dong-hee Na 在 :issue:`39509` 以及 Ross Rhodes 在 " +":issue:`39507` 中贡献。)" + +#: ../../whatsnew/3.9.rst:476 +msgid "IDLE and idlelib" +msgstr "IDLE 与 idlelib" + +#: ../../whatsnew/3.9.rst:478 +msgid "" +"Added option to toggle cursor blink off. (Contributed by Zackery Spytz in " +":issue:`4603`.)" +msgstr "添加了切换光标闪烁停止的选项。 (由 Zackery Spytz 在 :issue:`4603` 中贡献。)" + +#: ../../whatsnew/3.9.rst:481 +msgid "" +"Escape key now closes IDLE completion windows. (Contributed by Johnny " +"Najera in :issue:`38944`.)" +msgstr "Esc 键现在会关闭 IDLE 补全提示窗口。 (由 Johnny Najera 在 :issue:`38944` 中贡献。)" + +#: ../../whatsnew/3.9.rst:484 +msgid "" +"Added keywords to module name completion list. (Contributed by Terry J. " +"Reedy in :issue:`37765`.)" +msgstr "添加关键字到模块名称补全列表。 (由 Terry J. Reedy 在 :issue:`37765` 中贡献。)" + +#: ../../whatsnew/3.9.rst:487 +msgid "New in 3.9 maintenance releases" +msgstr "3.9 维护版本中的新内容" + +#: ../../whatsnew/3.9.rst:489 +msgid "" +"Make IDLE invoke :func:`sys.excepthook` (when started without '-n'). User " +"hooks were previously ignored. (Contributed by Ken Hilton in " +":issue:`43008`.)" +msgstr "" +"使 IDLE 调用 :func:`sys.excepthook` (当启动时没有 '-n' )。用户钩子以前是被忽略的。 (由 Ken Hilton 在" +" :issue:`43008` 中贡献。)" + +#: ../../whatsnew/3.9.rst:493 +msgid "The changes above have been backported to 3.8 maintenance releases." +msgstr "上述修改已被反向移植到 3.8 维护发行版中。" + +#: ../../whatsnew/3.9.rst:495 +msgid "" +"Rearrange the settings dialog. Split the General tab into Windows and " +"Shell/Ed tabs. Move help sources, which extend the Help menu, to the " +"Extensions tab. Make space for new options and shorten the dialog. The " +"latter makes the dialog better fit small screens. (Contributed by Terry Jan" +" Reedy in :issue:`40468`.) Move the indent space setting from the Font tab " +"to the new Windows tab. (Contributed by Mark Roseman and Terry Jan Reedy in" +" :issue:`33962`.)" +msgstr "" +"重新安排设置对话框。 将常规选项卡分成 Windows 和 Shell/Ed 选项卡。 " +"将扩展帮助菜单的帮助源移至扩展标签。为新选项留出空间,并缩短对话框。后者使对话框更适合小屏幕。 (由 Terry Jan Reedy 贡献于 " +":issue:`40468` 。) 将缩进空间设置从字体标签移到新的 Windows 标签。 (由 Mark Roseman 和 Terry Jan " +"Reedy 在 :issue:`33962` 中提供)。" + +#: ../../whatsnew/3.9.rst:503 +msgid "" +"Apply syntax highlighting to `.pyi` files. (Contributed by Alex Waygood and " +"Terry Jan Reedy in :issue:`45447`.)" +msgstr "" +"对 `.pyi` 文件应用语法高亮。(由 Alex Waygood 和 Terry Jan Reedy 在 :issue:`45447` 中贡献。)" + +#: ../../whatsnew/3.9.rst:507 +msgid "imaplib" +msgstr "imaplib" + +#: ../../whatsnew/3.9.rst:509 +msgid "" +":class:`~imaplib.IMAP4` and :class:`~imaplib.IMAP4_SSL` now have an optional" +" *timeout* parameter for their constructors. Also, the " +":meth:`~imaplib.IMAP4.open` method now has an optional *timeout* parameter " +"with this change. The overridden methods of :class:`~imaplib.IMAP4_SSL` and " +":class:`~imaplib.IMAP4_stream` were applied to this change. (Contributed by " +"Dong-hee Na in :issue:`38615`.)" +msgstr "" +"现在 :class:`~imaplib.IMAP4` 和 :class:`~imaplib.IMAP4_SSL` 的构造器具有可选的 *timeout*" +" 形参。 并且,现在 :meth:`~imaplib.IMAP4.open` 方法也具有可选的 *timeout* 形参提供同样的修改。 " +":class:`~imaplib.IMAP4_SSL` 和 :class:`~imaplib.IMAP4_stream` " +"中被重载的方法也应用了这个修改。 (由 Dong-hee Na 在 :issue:`38615` 中贡献。)" + +#: ../../whatsnew/3.9.rst:516 +msgid "" +":meth:`imaplib.IMAP4.unselect` is added. :meth:`imaplib.IMAP4.unselect` " +"frees server's resources associated with the selected mailbox and returns " +"the server to the authenticated state. This command performs the same " +"actions as :meth:`imaplib.IMAP4.close`, except that no messages are " +"permanently removed from the currently selected mailbox. (Contributed by " +"Dong-hee Na in :issue:`40375`.)" +msgstr "" +"增加了 :meth:`imaplib.IMAP4.unselect`。 :meth:`imaplib.IMAP4.unselect` " +"会释放关联到选定邮箱的服务器资源并将服务器返回到已认证状态。 此命令会执行与 :meth:`imaplib.IMAP4.close` " +"相同的动作,区别在于它不会从当前选定邮箱中永久性地移除消息。 (由 Dong-hee Na 在 :issue:`40375` 中贡献。)" + +#: ../../whatsnew/3.9.rst:524 +msgid "importlib" +msgstr "importlib" + +#: ../../whatsnew/3.9.rst:526 +msgid "" +"To improve consistency with import statements, " +":func:`importlib.util.resolve_name` now raises :exc:`ImportError` instead of" +" :exc:`ValueError` for invalid relative import attempts. (Contributed by " +"Ngalim Siregar in :issue:`37444`.)" +msgstr "" +"为提升与 import 语句的一致性,现在 :func:`importlib.util.resolve_name` 对于无效的相对导入尝试会引发 " +":exc:`ImportError` 而不是 :exc:`ValueError`。 (由 Ngalim Siregar 在 :issue:`37444`" +" 中贡献。)" + +#: ../../whatsnew/3.9.rst:531 +msgid "" +"Import loaders which publish immutable module objects can now publish " +"immutable packages in addition to individual modules. (Contributed by Dino " +"Viehland in :issue:`39336`.)" +msgstr "" +"发布不可变模块对象的导入加载器除了发布单独模块以外现在也可以发布不可变包。 (由 Dino Viehland 在 :issue:`39336` " +"中贡献。)" + +#: ../../whatsnew/3.9.rst:535 +msgid "" +"Added :func:`importlib.resources.files` function with support for " +"subdirectories in package data, matching backport in ``importlib_resources``" +" version 1.5. (Contributed by Jason R. Coombs in :issue:`39791`.)" +msgstr "" +"添加了带有对包数据中子目录支持的 :func:`importlib.resources.files` 函数,与 " +"``importlib_resources`` 1.5 版的反向端口相匹配。(由 Jason R. Coombs 在 :issue:`39791` " +"中贡献。)" + +#: ../../whatsnew/3.9.rst:540 +msgid "" +"Refreshed ``importlib.metadata`` from ``importlib_metadata`` version 1.6.1." +msgstr "来自 ``importlib_metadata`` 1.6.1 版的已更新 ``importlib.metadata``。" + +#: ../../whatsnew/3.9.rst:543 +msgid "inspect" +msgstr "inspect" + +#: ../../whatsnew/3.9.rst:545 +msgid "" +":attr:`inspect.BoundArguments.arguments` is changed from ``OrderedDict`` to " +"regular dict. (Contributed by Inada Naoki in :issue:`36350` and " +":issue:`39775`.)" +msgstr "" +":attr:`inspect.BoundArguments.arguments` 已从 ``OrderedDict`` 改为常规字典。 (由 Inada" +" Naoki 在 :issue:`36350` 和 :issue:`39775` 中贡献。)" + +#: ../../whatsnew/3.9.rst:549 ../../whatsnew/3.9.rst:1639 +msgid "ipaddress" +msgstr "ipaddress" + +#: ../../whatsnew/3.9.rst:551 +msgid "" +":mod:`ipaddress` now supports IPv6 Scoped Addresses (IPv6 address with " +"suffix ``%``)." +msgstr ":mod:`ipaddress` 现在支持 IPv6 作用域地址(即带有 ``%`` 前缀的 IPv6 地址)。" + +#: ../../whatsnew/3.9.rst:553 +msgid "" +"Scoped IPv6 addresses can be parsed using :class:`ipaddress.IPv6Address`. If" +" present, scope zone ID is available through the " +":attr:`~ipaddress.IPv6Address.scope_id` attribute. (Contributed by Oleksandr" +" Pavliuk in :issue:`34788`.)" +msgstr "" +"IPv6 作用域地址可使用 :class:`ipaddress.IPv6Address` 来解析。 作用域的区 ID 如果存在,可通过 " +":attr:`~ipaddress.IPv6Address.scope_id` 属性来获取。 (由 Oleksandr Pavliuk 在 " +":issue:`34788` 中贡献。)" + +#: ../../whatsnew/3.9.rst:557 +msgid "" +"Starting with Python 3.9.5 the :mod:`ipaddress` module no longer accepts any" +" leading zeros in IPv4 address strings. (Contributed by Christian Heimes in " +":issue:`36384`)." +msgstr "" +"从 Python 3.9.5 开始 :mod:`ipaddress` 模块不再接受 IPv4 地址字符串中有任何前缀的零。 (由 Christian " +"Heimes 在 :issue:`36384` 中贡献。)" + +#: ../../whatsnew/3.9.rst:562 +msgid "math" +msgstr "math" + +#: ../../whatsnew/3.9.rst:564 +msgid "" +"Expanded the :func:`math.gcd` function to handle multiple arguments. " +"Formerly, it only supported two arguments. (Contributed by Serhiy Storchaka " +"in :issue:`39648`.)" +msgstr "" +"对 :func:`math.gcd` 函数进行了扩展以处理多个参数。 在之前版本中,它只支持两个参数。 (由 Serhiy Storchaka 在 " +":issue:`39648` 中贡献。)" + +#: ../../whatsnew/3.9.rst:568 +msgid "" +"Added :func:`math.lcm`: return the least common multiple of specified " +"arguments. (Contributed by Mark Dickinson, Ananthakrishnan and Serhiy " +"Storchaka in :issue:`39479` and :issue:`39648`.)" +msgstr "" +"增加了 :func:`math.lcm`: 返回指定参数的最小公倍数。 (由 Mark Dickinson, Ananthakrishnan 和 " +"Serhiy Storchaka 在 :issue:`39479` 和 :issue:`39648` 中贡献。)" + +#: ../../whatsnew/3.9.rst:572 +msgid "" +"Added :func:`math.nextafter`: return the next floating-point value after *x*" +" towards *y*. (Contributed by Victor Stinner in :issue:`39288`.)" +msgstr "" +"增加了 :func:`math.nextafter`: 返回从 *x* 往 *y* 方向的下一个浮点数值。 (由 Victor Stinner 在 " +":issue:`39288` 中贡献。)" + +#: ../../whatsnew/3.9.rst:576 +msgid "" +"Added :func:`math.ulp`: return the value of the least significant bit of a " +"float. (Contributed by Victor Stinner in :issue:`39310`.)" +msgstr "" +"增加了 :func:`math.ulp`: 返回一个浮点数的最小有效比特位。 (由 Victor Stinner 在 :issue:`39310` " +"中贡献。)" + +#: ../../whatsnew/3.9.rst:581 +msgid "multiprocessing" +msgstr "multiprocessing" + +#: ../../whatsnew/3.9.rst:583 +msgid "" +"The :class:`multiprocessing.SimpleQueue` class has a new " +":meth:`~multiprocessing.SimpleQueue.close` method to explicitly close the " +"queue. (Contributed by Victor Stinner in :issue:`30966`.)" +msgstr "" +":class:`multiprocessing.SimpleQueue` 类新增了 " +":meth:`~multiprocessing.SimpleQueue.close` 方法用来显式地关闭队列。 (由 Victor Stinner 在 " +":issue:`30966` 中贡献。)" + +#: ../../whatsnew/3.9.rst:589 +msgid "nntplib" +msgstr "nntplib" + +#: ../../whatsnew/3.9.rst:591 +msgid "" +":class:`~nntplib.NNTP` and :class:`~nntplib.NNTP_SSL` now raise a " +":class:`ValueError` if the given timeout for their constructor is zero to " +"prevent the creation of a non-blocking socket. (Contributed by Dong-hee Na " +"in :issue:`39259`.)" +msgstr "" +"现在 :class:`~nntplib.NNTP` 和 :class:`~nntplib.NNTP_SSL` " +"当它们的构造器所给定的超时参数为零以防止创建非阻塞套接字时会引发 :class:`ValueError`。 (由 Dong-hee Na 在 " +":issue:`39259` 中贡献。)" + +#: ../../whatsnew/3.9.rst:596 +msgid "os" +msgstr "os" + +#: ../../whatsnew/3.9.rst:598 +msgid "" +"Added :data:`~os.CLD_KILLED` and :data:`~os.CLD_STOPPED` for " +":attr:`si_code`. (Contributed by Dong-hee Na in :issue:`38493`.)" +msgstr "" +"增加了 :data:`~os.CLD_KILLED` 和 :data:`~os.CLD_STOPPED` 作为 :attr:`si_code`。 (由 " +"Dong-hee Na 在 :issue:`38493` 中贡献。)" + +#: ../../whatsnew/3.9.rst:601 +msgid "" +"Exposed the Linux-specific :func:`os.pidfd_open` (:issue:`38692`) and " +":data:`os.P_PIDFD` (:issue:`38713`) for process management with file " +"descriptors." +msgstr "" +"对外公开了 Linux 专属的 :func:`os.pidfd_open` (:issue:`38692`) 和 :data:`os.P_PIDFD` " +"(:issue:`38713`) 用于文件描述符的进程管理。" + +#: ../../whatsnew/3.9.rst:605 +msgid "" +"The :func:`os.unsetenv` function is now also available on Windows. " +"(Contributed by Victor Stinner in :issue:`39413`.)" +msgstr "" +"现在 :func:`os.unsetenv` 函数在 Windows 上也已可用。 (由 Victor Stinner 在 :issue:`39413`" +" 中贡献。)" + +#: ../../whatsnew/3.9.rst:608 +msgid "" +"The :func:`os.putenv` and :func:`os.unsetenv` functions are now always " +"available. (Contributed by Victor Stinner in :issue:`39395`.)" +msgstr "" +"现在 :func:`os.putenv` 和 :func:`os.unsetenv` 函数将总是可用。 (由 Victor Stinner 在 " +":issue:`39395` 中贡献。)" + +#: ../../whatsnew/3.9.rst:612 +msgid "" +"Added :func:`os.waitstatus_to_exitcode` function: convert a wait status to " +"an exit code. (Contributed by Victor Stinner in :issue:`40094`.)" +msgstr "" +"增加了 :func:`os.waitstatus_to_exitcode` 函数:将等待状态转换为退出码。 (由 Victor Stinner 在 " +":issue:`40094` 中贡献。)" + +#: ../../whatsnew/3.9.rst:616 +msgid "" +"As of 3.9.20, :func:`os.mkdir` and :func:`os.makedirs` on Windows now " +"support passing a *mode* value of ``0o700`` to apply access control to the " +"new directory. This implicitly affects :func:`tempfile.mkdtemp` and is a " +"mitigation for CVE-2024-4030. Other values for *mode* continue to be " +"ignored. (Contributed by Steve Dower in :gh:`118486`.)" +msgstr "" + +#: ../../whatsnew/3.9.rst:624 +msgid "pathlib" +msgstr "pathlib" + +#: ../../whatsnew/3.9.rst:626 +msgid "" +"Added :meth:`pathlib.Path.readlink()` which acts similarly to " +":func:`os.readlink`. (Contributed by Girts Folkmanis in :issue:`30618`)" +msgstr "" +"增加了 :meth:`pathlib.Path.readlink()`,其行为类似于 :func:`os.readlink`。 (由 Girts " +"Folkmanis 在 :issue:`30618` 中贡献。)" + +#: ../../whatsnew/3.9.rst:631 +msgid "pdb" +msgstr "pdb" + +#: ../../whatsnew/3.9.rst:633 +msgid "" +"On Windows now :class:`~pdb.Pdb` supports ``~/.pdbrc``. (Contributed by Tim " +"Hopper and Dan Lidral-Porter in :issue:`20523`.)" +msgstr "" +"在 Windows 上 :class:`~pdb.Pdb` 现在支持 ``~/.pdbrc``。 (由 Tim Hopper 和 Dan Lidral-" +"Porter 在 :issue:`20523` 中贡献。)" + +#: ../../whatsnew/3.9.rst:637 +msgid "poplib" +msgstr "poplib" + +#: ../../whatsnew/3.9.rst:639 +msgid "" +":class:`~poplib.POP3` and :class:`~poplib.POP3_SSL` now raise a " +":class:`ValueError` if the given timeout for their constructor is zero to " +"prevent the creation of a non-blocking socket. (Contributed by Dong-hee Na " +"in :issue:`39259`.)" +msgstr "" +"现在 :class:`~poplib.POP3` 和 :class:`~poplib.POP3_SSL` " +"当它们的构造器所给定的超时参数为零以防止创建非阻塞套接字时会引发 :class:`ValueError`。 (由 Dong-hee Na 在 " +":issue:`39259` 中贡献。)" + +#: ../../whatsnew/3.9.rst:644 +msgid "pprint" +msgstr "pprint" + +#: ../../whatsnew/3.9.rst:646 +msgid "" +":mod:`pprint` can now pretty-print :class:`types.SimpleNamespace`. " +"(Contributed by Carl Bordum Hansen in :issue:`37376`.)" +msgstr "" +"现在 :mod:`pprint` 能美化打印 :class:`types.SimpleNamespace`。 (由 Carl Bordum Hansen" +" 在 :issue:`37376` 中贡献。)" + +#: ../../whatsnew/3.9.rst:650 +msgid "pydoc" +msgstr "pydoc" + +#: ../../whatsnew/3.9.rst:652 +msgid "" +"The documentation string is now shown not only for class, function, method " +"etc, but for any object that has its own ``__doc__`` attribute. (Contributed" +" by Serhiy Storchaka in :issue:`40257`.)" +msgstr "" +"文档字符串的显示现在不仅针对类、函数、方法等,也针对任何具有自己的 ``__doc__`` 属性的对象。 (由 Serhiy Storchaka 在 " +":issue:`40257` 中贡献。)" + +#: ../../whatsnew/3.9.rst:657 +msgid "random" +msgstr "random" + +#: ../../whatsnew/3.9.rst:659 +msgid "" +"Added a new :attr:`random.Random.randbytes` method: generate random bytes. " +"(Contributed by Victor Stinner in :issue:`40286`.)" +msgstr "" +"增加了新的 :attr:`random.Random.randbytes` 方法:生成随机字节串。 (由 Victor Stinner 在 " +":issue:`40286` 中贡献。)" + +#: ../../whatsnew/3.9.rst:663 +msgid "signal" +msgstr "signal" + +#: ../../whatsnew/3.9.rst:665 +msgid "" +"Exposed the Linux-specific :func:`signal.pidfd_send_signal` for sending to " +"signals to a process using a file descriptor instead of a pid. " +"(:issue:`38712`)" +msgstr "" +"对外公开了 Linux 专属的 :func:`signal.pidfd_send_signal` 用于向使用文件描述符而非 pid 的进程发送信号。 " +"(:issue:`38712`)" + +#: ../../whatsnew/3.9.rst:669 +msgid "smtplib" +msgstr "smtplib" + +#: ../../whatsnew/3.9.rst:671 +msgid "" +":class:`~smtplib.SMTP` and :class:`~smtplib.SMTP_SSL` now raise a " +":class:`ValueError` if the given timeout for their constructor is zero to " +"prevent the creation of a non-blocking socket. (Contributed by Dong-hee Na " +"in :issue:`39259`.)" +msgstr "" +"现在 :class:`~smtplib.SMTP` 和 :class:`~smtplib.SMTP_SSL` " +"当它们的构造器所给定的超时参数为零以防止创建非阻塞套接字时会引发 :class:`ValueError`。 (由 Dong-hee Na 在 " +":issue:`39259` 中贡献。)" + +#: ../../whatsnew/3.9.rst:675 +msgid "" +":class:`~smtplib.LMTP` constructor now has an optional *timeout* parameter." +" (Contributed by Dong-hee Na in :issue:`39329`.)" +msgstr "" +"现在 :class:`~smtplib.LMTP` 构造器具有可选的 *timeout* 形参。 (由 Dong-hee Na 在 " +":issue:`39329` 中贡献。)" + +#: ../../whatsnew/3.9.rst:679 +msgid "socket" +msgstr "socket" + +#: ../../whatsnew/3.9.rst:681 +msgid "" +"The :mod:`socket` module now exports the " +":data:`~socket.CAN_RAW_JOIN_FILTERS` constant on Linux 4.1 and greater. " +"(Contributed by Stefan Tatschner and Zackery Spytz in :issue:`25780`.)" +msgstr "" +":mod:`socket` 模块现在会在 Linux 4.1 或更高版本上导出 :data:`~socket.CAN_RAW_JOIN_FILTERS`" +" 常量。 (由 Stefan Tatschner 和 Zackery Spytz 在 :issue:`25780` 中贡献。)" + +#: ../../whatsnew/3.9.rst:685 +msgid "" +"The socket module now supports the :data:`~socket.CAN_J1939` protocol on " +"platforms that support it. (Contributed by Karl Ding in :issue:`40291`.)" +msgstr "" +"现在 socket 模块会在支持的平台上支持 :data:`~socket.CAN_J1939` 协议。 (由 Karl Ding 在 " +":issue:`40291` 上贡献。)" + +#: ../../whatsnew/3.9.rst:688 +msgid "" +"The socket module now has the :func:`socket.send_fds` and " +":func:`socket.recv_fds` functions. (Contributed by Joannah Nanjekye, Shinya " +"Okano and Victor Stinner in :issue:`28724`.)" +msgstr "" +"现在 socket 模块具有 :func:`socket.send_fds` 和 :func:`socket.recv_fds` 函数。 (由 " +"Joannah Nanjekye, Shinya Okano 和 Victor Stinner 在 :issue:`28724` 中贡献。)" + +#: ../../whatsnew/3.9.rst:694 +msgid "time" +msgstr "time" + +#: ../../whatsnew/3.9.rst:696 +msgid "" +"On AIX, :func:`~time.thread_time` is now implemented with " +"``thread_cputime()`` which has nanosecond resolution, rather than " +"``clock_gettime(CLOCK_THREAD_CPUTIME_ID)`` which has a resolution of 10 ms. " +"(Contributed by Batuhan Taskaya in :issue:`40192`)" +msgstr "" +"在 AIX 上,现在 :func:`~time.thread_time` 是使用具有纳秒级精度的 ``thread_cputime()`` " +"实现,而不再是只有 10 毫秒精度的 ``clock_gettime(CLOCK_THREAD_CPUTIME_ID)``。 (由 Batuhan " +"Taskaya 在 :issue:`40192` 中贡献。)" + +#: ../../whatsnew/3.9.rst:702 +msgid "sys" +msgstr "sys" + +#: ../../whatsnew/3.9.rst:704 +msgid "" +"Added a new :attr:`sys.platlibdir` attribute: name of the platform-specific " +"library directory. It is used to build the path of standard library and the " +"paths of installed extension modules. It is equal to ``\"lib\"`` on most " +"platforms. On Fedora and SuSE, it is equal to ``\"lib64\"`` on 64-bit " +"platforms. (Contributed by Jan Matějek, Matěj Cepl, Charalampos Stratakis " +"and Victor Stinner in :issue:`1294959`.)" +msgstr "" +"增加了新的 :attr:`sys.platlibdir` 属性:平台专属库目录的名称。 它被用于构建标准库的路径以及已安装扩展模块的路径。 " +"它在大多数平台上等于 ``\"lib\"``。 在 Fedora 和 SuSE 上,它等于 64 位平台上的 ``\"lib64\"``。 (由 Jan" +" Matějek, Matěj Cepl, Charalampos Stratakis 和 Victor Stinner 在 " +":issue:`1294959` 中贡献。)" + +#: ../../whatsnew/3.9.rst:710 +msgid "" +"Previously, :attr:`sys.stderr` was block-buffered when non-interactive. Now " +"``stderr`` defaults to always being line-buffered. (Contributed by Jendrik " +"Seipp in :issue:`13601`.)" +msgstr "" +"之前的版本中,:attr:`sys.stderr` 在非交互模式时是带块缓冲的。 现在 ``stderr`` 默认总是为行缓冲的。 (由 Jendrik" +" Seipp 在 :issue:`13601` 中贡献。)" + +#: ../../whatsnew/3.9.rst:715 +msgid "tempfile" +msgstr "tempfile" + +#: ../../whatsnew/3.9.rst:717 +msgid "" +"As of 3.9.20 on Windows, the default mode ``0o700`` used by " +":func:`tempfile.mkdtemp` now limits access to the new directory due to " +"changes to :func:`os.mkdir`. This is a mitigation for CVE-2024-4030. " +"(Contributed by Steve Dower in :gh:`118486`.)" +msgstr "" + +#: ../../whatsnew/3.9.rst:723 +msgid "tracemalloc" +msgstr "tracemalloc" + +#: ../../whatsnew/3.9.rst:725 +msgid "" +"Added :func:`tracemalloc.reset_peak` to set the peak size of traced memory " +"blocks to the current size, to measure the peak of specific pieces of code. " +"(Contributed by Huon Wilson in :issue:`40630`.)" +msgstr "" +"增加了 :func:`tracemalloc.reset_peak` 用于将跟踪的内存块峰值大小设为当前大小,以测量特定代码段的峰值。 (由 Huon " +"Wilson 在 :issue:`40630` 中贡献。)" + +#: ../../whatsnew/3.9.rst:730 ../../whatsnew/3.9.rst:1512 +msgid "typing" +msgstr "typing" + +#: ../../whatsnew/3.9.rst:732 +msgid "" +":pep:`593` introduced an :data:`typing.Annotated` type to decorate existing " +"types with context-specific metadata and new ``include_extras`` parameter to" +" :func:`typing.get_type_hints` to access the metadata at runtime. " +"(Contributed by Till Varoquaux and Konstantin Kashin.)" +msgstr "" +":pep:`593` 引入了一种 :data:`typing.Annotated` 类型以使用上下文专属的元数据来装饰现有类型,并将新的 " +"``include_extras`` 形参添加到 :func:`typing.get_type_hints` 以在运行时访问元数据。 (由 Till " +"Varoquaux 和 Konstantin Kashin 贡献。)" + +#: ../../whatsnew/3.9.rst:738 +msgid "unicodedata" +msgstr "unicodedata" + +#: ../../whatsnew/3.9.rst:740 +msgid "" +"The Unicode database has been updated to version 13.0.0. (:issue:`39926`)." +msgstr "Unicode 数据库已更新到 13.0.0 版。 (:issue:`39926`)。" + +#: ../../whatsnew/3.9.rst:743 +msgid "venv" +msgstr "venv" + +#: ../../whatsnew/3.9.rst:745 +msgid "" +"The activation scripts provided by :mod:`venv` now all specify their prompt " +"customization consistently by always using the value specified by " +"``__VENV_PROMPT__``. Previously some scripts unconditionally used " +"``__VENV_PROMPT__``, others only if it happened to be set (which was the " +"default case), and one used ``__VENV_NAME__`` instead. (Contributed by Brett" +" Cannon in :issue:`37663`.)" +msgstr "" +"由 :mod:`venv` 所提供的激活脚本现在总是会使用 ``__VENV_PROMPT__`` 设置的值来一致地指明它们的自定义提示符。 " +"在之前版本中某些脚本会无条件地使用 ``__VENV_PROMPT__``,而另一些脚本只在其恰好被设置时(这是默认情况)才会使用,还有的脚本会改用 " +"``__VENV_NAME__``。 (由 Brett Cannon 在 :issue:`37663` 中贡献。)" + +#: ../../whatsnew/3.9.rst:753 +msgid "xml" +msgstr "xml" + +#: ../../whatsnew/3.9.rst:755 +msgid "" +"White space characters within attributes are now preserved when serializing " +":mod:`xml.etree.ElementTree` to XML file. EOLNs are no longer normalized to " +"\"\\n\". This is the result of discussion about how to interpret section " +"2.11 of XML spec. (Contributed by Mefistotelis in :issue:`39011`.)" +msgstr "" +"当把 :mod:`xml.etree.ElementTree` 序列化为 XML 文件时属性内部的空白字符现在将被保留。 不同的行结束符不会再被正规化为" +" \"\\n\"。 这是对于如何解读 XML 规范 2.11 节的相关讨论的最终结果。 (由 Mefistotelis 在 :issue:`39011`" +" 中贡献。)" + +#: ../../whatsnew/3.9.rst:763 +msgid "Optimizations" +msgstr "性能优化" + +#: ../../whatsnew/3.9.rst:765 +msgid "" +"Optimized the idiom for assignment a temporary variable in comprehensions. " +"Now ``for y in [expr]`` in comprehensions is as fast as a simple assignment " +"``y = expr``. For example:" +msgstr "" +"优化了在推导式中为临时变量赋值的惯用方式。 现在推导式中的 ``for y in [expr]`` 会与简单赋值语句 ``y = expr`` " +"一样快速。 例如:" + +#: ../../whatsnew/3.9.rst:769 +msgid "sums = [s for s in [0] for x in data for s in [s + x]]" +msgstr "sums = [s for s in [0] for x in data for s in [s + x]]" + +#: ../../whatsnew/3.9.rst:771 +msgid "" +"Unlike the ``:=`` operator this idiom does not leak a variable to the outer " +"scope." +msgstr "不同于 ``:=`` 运算符,这个惯用方式不会使变量泄露到外部作用域中。" + +#: ../../whatsnew/3.9.rst:774 +msgid "(Contributed by Serhiy Storchaka in :issue:`32856`.)" +msgstr "(由 Serhiy Storchaka 在 :issue:`32856` 中贡献。)" + +#: ../../whatsnew/3.9.rst:776 +msgid "" +"Optimized signal handling in multithreaded applications. If a thread " +"different than the main thread gets a signal, the bytecode evaluation loop " +"is no longer interrupted at each bytecode instruction to check for pending " +"signals which cannot be handled. Only the main thread of the main " +"interpreter can handle signals." +msgstr "" +"优化了多线程应用中的信号处理。 如果一个线程不是获得信号的主线程,字节码求值循环不会在每条字节码指令上被打断以检查无法被处理的挂起信号。 " +"只有主解释器的主线程能够处理信号。" + +#: ../../whatsnew/3.9.rst:782 +msgid "" +"Previously, the bytecode evaluation loop was interrupted at each instruction" +" until the main thread handles signals. (Contributed by Victor Stinner in " +":issue:`40010`.)" +msgstr "" +"在之前版本中,字节码求值循环会在每条指令上被打断直到主线程处理了信号。 (由 Victor Stinner 在 :issue:`40010` 上贡献。)" + +#: ../../whatsnew/3.9.rst:786 +msgid "" +"Optimized the :mod:`subprocess` module on FreeBSD using ``closefrom()``. " +"(Contributed by Ed Maste, Conrad Meyer, Kyle Evans, Kubilay Kocak and Victor" +" Stinner in :issue:`38061`.)" +msgstr "" +"在 FreeBSD 上使用 ``closefrom()`` 优化了 :mod:`subprocess` 模块。 (由 Ed Maste, Conrad " +"Meyer, Kyle Evans, Kubilay Kocak 和 Victor Stinner 在 :issue:`38061` 中贡献。)" + +#: ../../whatsnew/3.9.rst:790 +msgid "" +":c:func:`PyLong_FromDouble` is now up to 1.87x faster for values that fit " +"into :c:type:`long`. (Contributed by Sergey Fedoseev in :issue:`37986`.)" +msgstr "" +":c:func:`PyLong_FromDouble` 对于匹配 :c:type:`long` 的值执行速度现在加快了 1.87 倍。 (由 " +"Sergey Fedoseev d :issue:`37986` 中贡献。)" + +#: ../../whatsnew/3.9.rst:794 +msgid "" +"A number of Python builtins (:class:`range`, :class:`tuple`, :class:`set`, " +":class:`frozenset`, :class:`list`, :class:`dict`) are now sped up by using " +":pep:`590` vectorcall protocol. (Contributed by Dong-hee Na, Mark Shannon, " +"Jeroen Demeyer and Petr Viktorin in :issue:`37207`.)" +msgstr "" +"多个 Python 内置类型 (:class:`range`, :class:`tuple`, :class:`set`, " +":class:`frozenset`, :class:`list`, :class:`dict`) 现在通过使用 :pep:`590` " +"向量调用协议得到加速。 (由 Dong-hee Na, Mark Shannon, Jeroen Demeyer 和 Petr Viktorin 在 " +":issue:`37207` 中贡献。)" + +#: ../../whatsnew/3.9.rst:799 +msgid "" +"Optimized :func:`~set.difference_update` for the case when the other set is " +"much larger than the base set. (Suggested by Evgeny Kapun with code " +"contributed by Michele Orrù in :issue:`8425`.)" +msgstr "" +"当另一集合远大于基础集合的情况下优化了 :func:`~set.difference_update` 的性能。 (由 Evgeny Kapun 提议,由" +" Michele Orrù 在 :issue:`8425` 中贡献代码。)" + +#: ../../whatsnew/3.9.rst:803 +msgid "" +"Python's small object allocator (``obmalloc.c``) now allows (no more than) " +"one empty arena to remain available for immediate reuse, without returning " +"it to the OS. This prevents thrashing in simple loops where an arena could " +"be created and destroyed anew on each iteration. (Contributed by Tim Peters " +"in :issue:`37257`.)" +msgstr "" +"Python 的小对象分配器 (``obmalloc.c``) 现在允许(至多)一个空位可用于立即重用,而不必将其返回给 OS。 " +"这可以防止简单循环中的多余消耗,在每次迭代中可以创建和销毁全新的空位。 (由 Tim Peters 在 :issue:`37257` 中贡献。)" + +#: ../../whatsnew/3.9.rst:809 +msgid "" +":term:`floor division` of float operation now has a better performance. Also" +" the message of :exc:`ZeroDivisionError` for this operation is updated. " +"(Contributed by Dong-hee Na in :issue:`39434`.)" +msgstr "" +"浮点数运算中的 :term:`floor division` 现在会有更好的性能。 并且此运算的 :exc:`ZeroDivisionError` " +"的消息也已更新。 (由 Dong-hee Na 在 :issue:`39434` 中贡献。)" + +#: ../../whatsnew/3.9.rst:813 +msgid "" +"Decoding short ASCII strings with UTF-8 and ascii codecs is now about 15% " +"faster. (Contributed by Inada Naoki in :issue:`37348`.)" +msgstr "" +"使用 UTF-8 和 ascii 编解码器解码短 ASCII 字符串现在会加快大约 15%。 (由 Inada Naoki 在 " +":issue:`37348` 中贡献。)" + +#: ../../whatsnew/3.9.rst:816 +msgid "" +"Here's a summary of performance improvements from Python 3.4 through Python " +"3.9:" +msgstr "以下是对从 Python 3.4 到 Python 3.9 的提升提升情况的总结:" + +#: ../../whatsnew/3.9.rst:863 +msgid "" +"These results were generated from the variable access benchmark script at: " +"``Tools/scripts/var_access_benchmark.py``. The benchmark script displays " +"timings in nanoseconds. The benchmarks were measured on an `Intel® Core™ " +"i7-4960HQ processor " +"`_ running the macOS " +"64-bit builds found at `python.org `_." +msgstr "" +"以上结果是由以下变量访问基准测试脚本所生成的: ``Tools/scripts/var_access_benchmark.py``。 " +"该基准测试脚本以纳秒为单位显示时间。 基准测试数据是在一块 `Intel® Core™ i7-4960HQ 处理器 " +"`_ 运行从 `python.org " +"`_ 获取的 macOS 64 位编译版本所得到的。" + +#: ../../whatsnew/3.9.rst:873 +msgid "Deprecated" +msgstr "弃用" + +#: ../../whatsnew/3.9.rst:875 +msgid "" +"The distutils ``bdist_msi`` command is now deprecated, use ``bdist_wheel`` " +"(wheel packages) instead. (Contributed by Hugo van Kemenade in " +":issue:`39586`.)" +msgstr "" +"distutils 的 ``bdist_msi`` 命令现在已被弃用,请改用 ``bdist_wheel`` (wheel 包)。 (由 Hugo " +"van Kemenade 在 :issue:`39586` 中贡献。)" + +#: ../../whatsnew/3.9.rst:879 +msgid "" +"Currently :func:`math.factorial` accepts :class:`float` instances with non-" +"negative integer values (like ``5.0``). It raises a :exc:`ValueError` for " +"non-integral and negative floats. It is now deprecated. In future Python " +"versions it will raise a :exc:`TypeError` for all floats. (Contributed by " +"Serhiy Storchaka in :issue:`37315`.)" +msgstr "" +"目前 :func:`math.factorial` 接受具有非负整数值的 :class:`float` 实例 (如 ``5.0``)。 " +"对于非整数和负浮点数它会引发 :exc:`ValueError`。 此行为现在已被弃用。 在未来的 Python 版本中对所有浮点数都将引发 " +":exc:`TypeError`。 (由 Serhiy Storchaka 在 :issue:`37315` 中贡献。)" + +#: ../../whatsnew/3.9.rst:885 +msgid "" +"The :mod:`parser` and :mod:`symbol` modules are deprecated and will be " +"removed in future versions of Python. For the majority of use cases, users " +"can leverage the Abstract Syntax Tree (AST) generation and compilation " +"stage, using the :mod:`ast` module." +msgstr "" +":mod:`parser` 和 :mod:`symbol` 模块已被弃用并将在未来的 Python 版本中移除。 对于大多数用例,用户都可以使用 " +":mod:`ast` 模块来控制抽象语法树 (AST) 的生成和编译阶段。" + +#: ../../whatsnew/3.9.rst:890 +msgid "" +"The Public C API functions :c:func:`PyParser_SimpleParseStringFlags`, " +":c:func:`PyParser_SimpleParseStringFlagsFilename`, " +":c:func:`PyParser_SimpleParseFileFlags` and :c:func:`PyNode_Compile` are " +"deprecated and will be removed in Python 3.10 together with the old parser." +msgstr "" +"公有 C API 函数 :c:func:`PyParser_SimpleParseStringFlags`, " +":c:func:`PyParser_SimpleParseStringFlagsFilename`, " +":c:func:`PyParser_SimpleParseFileFlags` 和 :c:func:`PyNode_Compile` 已被弃用并将在 " +"Python 3.10 版与旧解析器一起被移除。" + +#: ../../whatsnew/3.9.rst:895 +msgid "" +"Using :data:`NotImplemented` in a boolean context has been deprecated, as it" +" is almost exclusively the result of incorrect rich comparator " +"implementations. It will be made a :exc:`TypeError` in a future version of " +"Python. (Contributed by Josh Rosenberg in :issue:`35712`.)" +msgstr "" +"在布尔运算中使用 :data:`NotImplemented` 已被弃用,因为它几乎必定是不正确的富比较运算符实现的结果。 它将在未来的 Python " +"版本中引发 :exc:`TypeError`。 (由 Josh Rosenberg 在 :issue:`35712` 中贡献。)" + +#: ../../whatsnew/3.9.rst:901 +msgid "" +"The :mod:`random` module currently accepts any hashable type as a possible " +"seed value. Unfortunately, some of those types are not guaranteed to have a" +" deterministic hash value. After Python 3.9, the module will restrict its " +"seeds to :const:`None`, :class:`int`, :class:`float`, :class:`str`, " +":class:`bytes`, and :class:`bytearray`." +msgstr "" +":mod:`random` 模块目前接受任何可哈希类型作为可能的种子值。 不幸的是,某些这样的类型并不保证具有确定性的哈希值。 在 Python 3.9" +" 之后,该模块将限定其种子值为 :const:`None`, :class:`int`, :class:`float`, :class:`str`, " +":class:`bytes` 以及 :class:`bytearray`。" + +#: ../../whatsnew/3.9.rst:907 +msgid "" +"Opening the :class:`~gzip.GzipFile` file for writing without specifying the " +"*mode* argument is deprecated. In future Python versions it will always be " +"opened for reading by default. Specify the *mode* argument for opening it " +"for writing and silencing a warning. (Contributed by Serhiy Storchaka in " +":issue:`28286`.)" +msgstr "" +"打开 :class:`~gzip.GzipFile` 文件用于写入而不指定 *mode* 参数的特性已被弃用。 在未来的 Python " +"版本中将总是默认打开用于读取。 在打开文件用于写入时请指定 *mode* 参数以静默相关警告信息。 (由 Serhiy Storchaka 在 " +":issue:`28286` 中贡献。)" + +#: ../../whatsnew/3.9.rst:913 +msgid "" +"Deprecated the ``split()`` method of :class:`_tkinter.TkappType` in favour " +"of the ``splitlist()`` method which has more consistent and predicable " +"behavior. (Contributed by Serhiy Storchaka in :issue:`38371`.)" +msgstr "" +"弃用了 :class:`_tkinter.TkappType` 的 ``split()`` 方法而改用 ``splitlist()`` " +"方法,此方法具有更稳定且可预测的行为。 (由 Serhiy Storchaka 在 :issue:`38371` 中贡献。)" + +#: ../../whatsnew/3.9.rst:918 +msgid "" +"The explicit passing of coroutine objects to :func:`asyncio.wait` has been " +"deprecated and will be removed in version 3.11. (Contributed by Yury " +"Selivanov and Kyle Stanley in :issue:`34790`.)" +msgstr "" +"将协程对象显式传递给 :func:`asyncio.wait` 的做法已被弃用并且将在 3.11 版中被移除。 (由 Yury Selivanov 和 " +"Kyle Stanley 在 :issue:`34790` 中贡献。)" + +#: ../../whatsnew/3.9.rst:922 +msgid "" +"binhex4 and hexbin4 standards are now deprecated. The :mod:`binhex` module " +"and the following :mod:`binascii` functions are now deprecated:" +msgstr "" +"binhex4 和 hexbin4 标准现已被弃用。 :mod:`binhex` 模块和下列 :mod:`binascii` 函数现已被弃用:" + +#: ../../whatsnew/3.9.rst:925 +msgid ":func:`~binascii.b2a_hqx`, :func:`~binascii.a2b_hqx`" +msgstr ":func:`~binascii.b2a_hqx`, :func:`~binascii.a2b_hqx`" + +#: ../../whatsnew/3.9.rst:926 +msgid ":func:`~binascii.rlecode_hqx`, :func:`~binascii.rledecode_hqx`" +msgstr ":func:`~binascii.rlecode_hqx`, :func:`~binascii.rledecode_hqx`" + +#: ../../whatsnew/3.9.rst:928 +msgid "(Contributed by Victor Stinner in :issue:`39353`.)" +msgstr "(由 Victor Stinner 在 :issue:`39353` 中贡献。)" + +#: ../../whatsnew/3.9.rst:930 +msgid "" +":mod:`ast` classes ``slice``, ``Index`` and ``ExtSlice`` are considered " +"deprecated and will be removed in future Python versions. ``value`` itself " +"should be used instead of ``Index(value)``. ``Tuple(slices, Load())`` " +"should be used instead of ``ExtSlice(slices)``. (Contributed by Serhiy " +"Storchaka in :issue:`34822`.)" +msgstr "" +":mod:`ast` 类 ``slice``, ``Index`` 和 ``ExtSlice`` 被视为已弃用并将在未来的 Python 版本中被移除。" +" 应当使用 ``value`` 本身而不再是 ``Index(value)``。 应当使用 ``Tuple(slices, Load())`` 而不再是" +" ``ExtSlice(slices)``。 (由 Serhiy Storchaka 在 :issue:`34822` 中贡献。)" + +#: ../../whatsnew/3.9.rst:936 +msgid "" +":mod:`ast` classes ``Suite``, ``Param``, ``AugLoad`` and ``AugStore`` are " +"considered deprecated and will be removed in future Python versions. They " +"were not generated by the parser and not accepted by the code generator in " +"Python 3. (Contributed by Batuhan Taskaya in :issue:`39639` and " +":issue:`39969` and Serhiy Storchaka in :issue:`39988`.)" +msgstr "" +":mod:`ast` 类 ``Suite``, ``Param``, ``AugLoad`` 和 ``AugStore`` 被视为已弃用并将在未来的 " +"Python 版本中被移除。 它们不会被解析器所生成且不会被 Python 3 中的代码生成器所接受。 (由 Batuhan Taskaya 在 " +":issue:`39639` 和 :issue:`39969` 中以及 Serhiy Storchaka 在 :issue:`39988` 中贡献。)" + +#: ../../whatsnew/3.9.rst:943 +msgid "" +"The :c:func:`PyEval_InitThreads` and :c:func:`PyEval_ThreadsInitialized` " +"functions are now deprecated and will be removed in Python 3.11. Calling " +":c:func:`PyEval_InitThreads` now does nothing. The :term:`GIL` is " +"initialized by :c:func:`Py_Initialize()` since Python 3.7. (Contributed by " +"Victor Stinner in :issue:`39877`.)" +msgstr "" +":c:func:`PyEval_InitThreads` 和 :c:func:`PyEval_ThreadsInitialized` " +"函数现已被弃用并将在 Python 3.11 中被移除。 调用 :c:func:`PyEval_InitThreads` 现在没有任何效果。 自 " +"Python 3.7 起 :term:`GIL` 会由 :c:func:`Py_Initialize()` 初始化。 (由 Victor Stinner" +" 在 :issue:`39877` 中贡献。)" + +#: ../../whatsnew/3.9.rst:949 +msgid "" +"Passing ``None`` as the first argument to the :func:`shlex.split` function " +"has been deprecated. (Contributed by Zackery Spytz in :issue:`33262`.)" +msgstr "" +"传入 ``None`` 作为 :func:`shlex.split` 函数的第一个参数的做法已被弃用。 (由 Zackery Spytz 在 " +":issue:`33262` 中贡献。)" + +#: ../../whatsnew/3.9.rst:952 +msgid "" +":func:`smtpd.MailmanProxy` is now deprecated as it is unusable without an " +"external module, ``mailman``. (Contributed by Samuel Colvin in " +":issue:`35800`.)" +msgstr "" +":func:`smtpd.MailmanProxy` 现在已被弃用,因为它在没有外部模块 ``mailman`` 的情况下无法使用。 (由 Samuel" +" Colvin 在 :issue:`35800` 中贡献。)" + +#: ../../whatsnew/3.9.rst:955 +msgid "" +"The :mod:`lib2to3` module now emits a :exc:`PendingDeprecationWarning`. " +"Python 3.9 switched to a PEG parser (see :pep:`617`), and Python 3.10 may " +"include new language syntax that is not parsable by lib2to3's LL(1) parser. " +"The ``lib2to3`` module may be removed from the standard library in a future " +"Python version. Consider third-party alternatives such as `LibCST`_ or " +"`parso`_. (Contributed by Carl Meyer in :issue:`40360`.)" +msgstr "" +"现在 :mod:`lib2to3` 模块将发出 :exc:`PendingDeprecationWarning`。 Python 3.9 已切换到 " +"PEG 解析器 (参见 :pep:`617`),Python 3.10 可以会包含 lib2to3 的 LL(1) 解析器所不能解析的新语法。 " +"``lib2to3`` 模块可能会在未来的 Python 版本中被移出标准库。 请考虑使用第三方替换例如 `LibCST`_ 或 `parso`_。 " +"(由 Carl Meyer 在 :issue:`40360` 中贡献。)" + +#: ../../whatsnew/3.9.rst:963 +msgid "" +"The *random* parameter of :func:`random.shuffle` has been deprecated. " +"(Contributed by Raymond Hettinger in :issue:`40465`)" +msgstr "" +":func:`random.shuffle` 的 *random* 形参已被弃用。 (由 Raymond Hettinger 在 " +":issue:`40465` 中贡献。)" + +#: ../../whatsnew/3.9.rst:972 ../../whatsnew/3.9.rst:1426 +msgid "Removed" +msgstr "移除" + +#: ../../whatsnew/3.9.rst:974 +msgid "" +"The erroneous version at :data:`unittest.mock.__version__` has been removed." +msgstr ":data:`unittest.mock.__version__` 上的错误版本已经被移除。" + +#: ../../whatsnew/3.9.rst:976 +msgid "" +":class:`nntplib.NNTP`: ``xpath()`` and ``xgtitle()`` methods have been " +"removed. These methods are deprecated since Python 3.3. Generally, these " +"extensions are not supported or not enabled by NNTP server administrators. " +"For ``xgtitle()``, please use :meth:`nntplib.NNTP.descriptions` or " +":meth:`nntplib.NNTP.description` instead. (Contributed by Dong-hee Na in " +":issue:`39366`.)" +msgstr "" +":class:`nntplib.NNTP`: ``xpath()`` 和 ``xgtitle()`` 方法已被移除。 这些方法自 Python 3.3 " +"起已被弃用。 一般来说,这些扩展都不再为 NNTP 服务管理员所支持或启用。 对于 ``xgtitle()``,请改用 " +":meth:`nntplib.NNTP.descriptions` 或 :meth:`nntplib.NNTP.description`。 (由 " +"Dong-hee Na 在 :issue:`39366` 中贡献。)" + +#: ../../whatsnew/3.9.rst:983 +msgid "" +":class:`array.array`: ``tostring()`` and ``fromstring()`` methods have been " +"removed. They were aliases to ``tobytes()`` and ``frombytes()``, deprecated " +"since Python 3.2. (Contributed by Victor Stinner in :issue:`38916`.)" +msgstr "" +":class:`array.array`: ``tostring()`` 和 ``fromstring()`` 方法已被移除。 它们分别是 " +"``tobytes()`` 和 ``frombytes()`` 的别名,自 Python 3.2 起已被弃用。 (由 Victor Stinner 在 " +":issue:`38916` 中贡献。)" + +#: ../../whatsnew/3.9.rst:988 +msgid "" +"The undocumented ``sys.callstats()`` function has been removed. Since Python" +" 3.7, it was deprecated and always returned :const:`None`. It required a " +"special build option ``CALL_PROFILE`` which was already removed in Python " +"3.7. (Contributed by Victor Stinner in :issue:`37414`.)" +msgstr "" +"未写入文档的 ``sys.callstats()`` 函数已被移除。 自 Python 3.7 起它就已被弃用并且总是会返回 " +":const:`None`。 它需要一个特殊的构建选项 ``CALL_PROFILE`` 而该选项在 Python 3.7 中已被移除。 (由 " +"Victor Stinner 在 :issue:`37414` 中贡献。)" + +#: ../../whatsnew/3.9.rst:993 +msgid "" +"The ``sys.getcheckinterval()`` and ``sys.setcheckinterval()`` functions have" +" been removed. They were deprecated since Python 3.2. Use " +":func:`sys.getswitchinterval` and :func:`sys.setswitchinterval` instead. " +"(Contributed by Victor Stinner in :issue:`37392`.)" +msgstr "" +"``sys.getcheckinterval()`` 和 ``sys.setcheckinterval()`` 函数已被移除。 它们自 Python " +"3.2 起已被弃用。 请改用 :func:`sys.getswitchinterval` 和 " +":func:`sys.setswitchinterval`。 (由 Victor Stinner 在 :issue:`37392` 中贡献。)" + +#: ../../whatsnew/3.9.rst:998 +msgid "" +"The C function ``PyImport_Cleanup()`` has been removed. It was documented " +"as: \"Empty the module table. For internal use only.\" (Contributed by " +"Victor Stinner in :issue:`36710`.)" +msgstr "" +"C 函数 ``PyImport_Cleanup()`` 已被移除。 它原本的文档为: \"清空模块表。 仅限内部使用。\" (由 Victor " +"Stinner 在 :issue:`36710` 中贡献。)" + +#: ../../whatsnew/3.9.rst:1002 +msgid "" +"``_dummy_thread`` and ``dummy_threading`` modules have been removed. These " +"modules were deprecated since Python 3.7 which requires threading support. " +"(Contributed by Victor Stinner in :issue:`37312`.)" +msgstr "" +"``_dummy_thread`` 和 ``dummy_threading`` 模块已被移除。 这些模块自 Python 3.7 " +"起已被弃用,它们需要线程支持。 (由 Victor Stinner 在 :issue:`37312` 中贡献。)" + +#: ../../whatsnew/3.9.rst:1006 +msgid "" +"``aifc.openfp()`` alias to ``aifc.open()``, ``sunau.openfp()`` alias to " +"``sunau.open()``, and ``wave.openfp()`` alias to :func:`wave.open()` have " +"been removed. They were deprecated since Python 3.7. (Contributed by Victor " +"Stinner in :issue:`37320`.)" +msgstr "" +"``aifc.open()`` 的别名 ``aifc.openfp()``,``sunau.open()`` 的别名 " +"``sunau.openfp()``,以及 :func:`wave.open()` 的别名 ``wave.openfp()`` 已被移除。 它们自 " +"Python 3.7 起已被弃用。 (由 Victor Stinner 在 :issue:`37320` 中贡献。)" + +#: ../../whatsnew/3.9.rst:1011 +msgid "" +"The :meth:`~threading.Thread.isAlive()` method of :class:`threading.Thread` " +"has been removed. It was deprecated since Python 3.8. Use " +":meth:`~threading.Thread.is_alive()` instead. (Contributed by Dong-hee Na in" +" :issue:`37804`.)" +msgstr "" +":class:`threading.Thread` 的 :meth:`~threading.Thread.isAlive()` 方法已被移除。 它自 " +"Python 3.8 起已被弃用。 请改用 :meth:`~threading.Thread.is_alive()`。 (由 Dong-hee Na 在" +" :issue:`37804` 中贡献。)" + +#: ../../whatsnew/3.9.rst:1016 +msgid "" +"Methods ``getchildren()`` and ``getiterator()`` of classes " +":class:`~xml.etree.ElementTree.ElementTree` and " +":class:`~xml.etree.ElementTree.Element` in the :mod:`~xml.etree.ElementTree`" +" module have been removed. They were deprecated in Python 3.2. Use " +"``iter(x)`` or ``list(x)`` instead of ``x.getchildren()`` and ``x.iter()`` " +"or ``list(x.iter())`` instead of ``x.getiterator()``. (Contributed by Serhiy" +" Storchaka in :issue:`36543`.)" +msgstr "" +":mod:`~xml.etree.ElementTree` 模块中 " +":class:`~xml.etree.ElementTree.ElementTree` 和 " +":class:`~xml.etree.ElementTree.Element` 等类的 ``getchildren()`` 和 " +"``getiterator()`` 方法已被移除。 它们在 Python 3.2 中已被弃用。 请使用 ``iter(x)`` 或 " +"``list(x)`` 替代 ``x.getchildren()`` 并用 ``x.iter()`` 或 ``list(x.iter())`` 替代 " +"``x.getiterator()``。 (由 Serhiy Storchaka 在 :issue:`36543` 中贡献。)" + +#: ../../whatsnew/3.9.rst:1024 +msgid "" +"The old :mod:`plistlib` API has been removed, it was deprecated since Python" +" 3.4. Use the :func:`~plistlib.load`, :func:`~plistlib.loads`, " +":func:`~plistlib.dump`, and :func:`~plistlib.dumps` functions. Additionally," +" the *use_builtin_types* parameter was removed, standard :class:`bytes` " +"objects are always used instead. (Contributed by Jon Janzen in " +":issue:`36409`.)" +msgstr "" +"旧的 :mod:`plistlib` API 已被移除,它自 Python 3.4 起已被弃用。 请使用 :func:`~plistlib.load`," +" :func:`~plistlib.loads`, :func:`~plistlib.dump` 和 :func:`~plistlib.dumps` " +"等函数。 此外,*use_builtin_types* 形参已被移除而总是会使用 :class:`bytes` 对象。 (由 Jon Janzen 在 " +":issue:`36409` 中贡献。)" + +#: ../../whatsnew/3.9.rst:1030 +msgid "" +"The C function ``PyGen_NeedsFinalizing`` has been removed. It was not " +"documented, tested, or used anywhere within CPython after the implementation" +" of :pep:`442`. Patch by Joannah Nanjekye. (Contributed by Joannah Nanjekye " +"in :issue:`15088`)" +msgstr "" +"C 函数 ``PyGen_NeedsFinalizing`` 已被移除。 它未被写入文档、未经测试,且自 :pep:`442` 实现之后未在 " +"CPython 的任何地方被使用。 由 Joannah Nanjekye 提供补丁。 (由 Joannah Nanjekye 在 " +":issue:`15088` 中贡献。)" + +#: ../../whatsnew/3.9.rst:1035 +msgid "" +"``base64.encodestring()`` and ``base64.decodestring()``, aliases deprecated " +"since Python 3.1, have been removed: use :func:`base64.encodebytes` and " +":func:`base64.decodebytes` instead. (Contributed by Victor Stinner in " +":issue:`39351`.)" +msgstr "" +"自 Python 3.1 起被弃用的别名 ``base64.encodestring()`` 和 ``base64.decodestring()`` " +"已被移除:请改用 :func:`base64.encodebytes` 和 :func:`base64.decodebytes`。 (由 Victor " +"Stinner 在 :issue:`39351` 中贡献。)" + +#: ../../whatsnew/3.9.rst:1040 +msgid "" +"``fractions.gcd()`` function has been removed, it was deprecated since " +"Python 3.5 (:issue:`22486`): use :func:`math.gcd` instead. (Contributed by " +"Victor Stinner in :issue:`39350`.)" +msgstr "" +"``fractions.gcd()`` 函数已被移除,它自 Python 3.5 起被弃用 (:issue:`22486`):请改用 " +":func:`math.gcd`。 (由 Victor Stinner 在 :issue:`39350` 中贡献。)" + +#: ../../whatsnew/3.9.rst:1044 +msgid "" +"The *buffering* parameter of :class:`bz2.BZ2File` has been removed. Since " +"Python 3.0, it was ignored and using it emitted a :exc:`DeprecationWarning`." +" Pass an open file object to control how the file is opened. (Contributed by" +" Victor Stinner in :issue:`39357`.)" +msgstr "" +":class:`bz2.BZ2File` 的 *buffering* 形参已被移除。 它自 Python 3.0 起即被忽略,使用它将会引发 " +":exc:`DeprecationWarning`。 请传入一个打开文件对象来控制文件的打开方式。 (由 Victor Stinner 在 " +":issue:`39357` 中贡献。)" + +#: ../../whatsnew/3.9.rst:1049 +msgid "" +"The *encoding* parameter of :func:`json.loads` has been removed. As of " +"Python 3.1, it was deprecated and ignored; using it has emitted a " +":exc:`DeprecationWarning` since Python 3.8. (Contributed by Inada Naoki in " +":issue:`39377`)" +msgstr "" +":func:`json.loads` 的 *encoding* 形参已被移除。 它在 Python 3.1 中已被弃用和忽略;自 Python 3.8 " +"起使用它将会引发 :exc:`DeprecationWarning`。 (由 Inada Naoki 在 :issue:`39377` 中贡献。)" + +#: ../../whatsnew/3.9.rst:1054 +msgid "" +"``with (await asyncio.lock):`` and ``with (yield from asyncio.lock):`` " +"statements are not longer supported, use ``async with lock`` instead. The " +"same is correct for ``asyncio.Condition`` and ``asyncio.Semaphore``. " +"(Contributed by Andrew Svetlov in :issue:`34793`.)" +msgstr "" +"``with (await asyncio.lock):`` 和 ``with (yield from asyncio.lock):`` " +"语句已不再受支持,请改用 ``async with lock``。 ``asyncio.Condition`` 和 " +"``asyncio.Semaphore`` 也同样如此。 (由 Andrew Svetlov 在 :issue:`34793` 中贡献。)" + +#: ../../whatsnew/3.9.rst:1059 +msgid "" +"The :func:`sys.getcounts` function, the ``-X showalloccount`` command line " +"option and the ``show_alloc_count`` field of the C structure " +":c:type:`PyConfig` have been removed. They required a special Python build " +"by defining ``COUNT_ALLOCS`` macro. (Contributed by Victor Stinner in " +":issue:`39489`.)" +msgstr "" +":func:`sys.getcounts` 函数,``-X showalloccount`` 命令行选项以及 C 结构体 " +":c:type:`PyConfig` 的 ``show_alloc_count`` 字段已被移除。 它们需要使用定义了 ``COUNT_ALLOCS``" +" 宏的特殊 Python 编译版本。 (由 Victor Stinner 在 :issue:`39489` 中贡献。)" + +#: ../../whatsnew/3.9.rst:1065 +msgid "" +"The ``_field_types`` attribute of the :class:`typing.NamedTuple` class has " +"been removed. It was deprecated since Python 3.8. Use the " +"``__annotations__`` attribute instead. (Contributed by Serhiy Storchaka in " +":issue:`40182`.)" +msgstr "" +":class:`typing.NamedTuple` 类的 ``_field_types`` 属性已被移除。 它自 Python 3.8 起已被弃用。 " +"请改用 ``__annotations__`` 属性。 (由 Serhiy Storchaka 在 :issue:`40182` 中贡献。)" + +#: ../../whatsnew/3.9.rst:1070 +msgid "" +"The :meth:`symtable.SymbolTable.has_exec` method has been removed. It was " +"deprecated since 2006, and only returning ``False`` when it's called. " +"(Contributed by Batuhan Taskaya in :issue:`40208`)" +msgstr "" +":meth:`symtable.SymbolTable.has_exec` 方法已被移除。 它自 2006 年起已被弃用,当被调用时仅会返回 " +"``False``。 (由 Batuhan Taskaya 在 :issue:`40208` 中贡献。)" + +#: ../../whatsnew/3.9.rst:1074 +msgid "" +"The :meth:`asyncio.Task.current_task` and :meth:`asyncio.Task.all_tasks` " +"have been removed. They were deprecated since Python 3.7 and you can use " +":func:`asyncio.current_task` and :func:`asyncio.all_tasks` instead. " +"(Contributed by Rémi Lapeyre in :issue:`40967`)" +msgstr "" +":meth:`asyncio.Task.current_task` 和 :meth:`asyncio.Task.all_tasks` 已被移除。 它们自" +" Python 3.7 起已被弃用,你可以改用 :func:`asyncio.current_task` 和 " +":func:`asyncio.all_tasks`。 (由 Rémi Lapeyre 在 :issue:`40967` 中贡献。)" + +#: ../../whatsnew/3.9.rst:1079 +msgid "" +"The ``unescape()`` method in the :class:`html.parser.HTMLParser` class has " +"been removed (it was deprecated since Python 3.4). :func:`html.unescape` " +"should be used for converting character references to the corresponding " +"unicode characters." +msgstr "" +":class:`html.parser.HTMLParser` 类的 ``unescape()`` 方法已被移除(它自 Python 3.4 " +"起已被弃用)。 应当使用 :func:`html.unescape` 来将字符引用转换为对应的 unicode 字符。" + +#: ../../whatsnew/3.9.rst:1086 ../../whatsnew/3.9.rst:1352 +msgid "Porting to Python 3.9" +msgstr "移植到 Python 3.9" + +#: ../../whatsnew/3.9.rst:1088 +msgid "" +"This section lists previously described changes and other bugfixes that may " +"require changes to your code." +msgstr "本节列出了先前描述的更改以及可能需要更改代码的其他错误修正." + +#: ../../whatsnew/3.9.rst:1093 +msgid "Changes in the Python API" +msgstr "Python API 的变化" + +#: ../../whatsnew/3.9.rst:1095 +msgid "" +":func:`__import__` and :func:`importlib.util.resolve_name` now raise " +":exc:`ImportError` where it previously raised :exc:`ValueError`. Callers " +"catching the specific exception type and supporting both Python 3.9 and " +"earlier versions will need to catch both using ``except (ImportError, " +"ValueError):``." +msgstr "" +":func:`__import__` 和 :func:`importlib.util.resolve_name` 现在会引发 " +":exc:`ImportError` 取代之前所引发的 :exc:`ValueError`。 捕获特定异常类型并同时支持 Python 3.9 " +"和更早版本的调用者将需要使用 ``except (ImportError, ValueError):`` 来同时捕获两者。" + +#: ../../whatsnew/3.9.rst:1100 +msgid "" +"The :mod:`venv` activation scripts no longer special-case when " +"``__VENV_PROMPT__`` is set to ``\"\"``." +msgstr ":mod:`venv` 激活脚本不再将 ``__VENV_PROMPT__`` 被设为 ``\"\"`` 的情况作为特例处理。" + +#: ../../whatsnew/3.9.rst:1103 +msgid "" +"The :meth:`select.epoll.unregister` method no longer ignores the " +":data:`~errno.EBADF` error. (Contributed by Victor Stinner in " +":issue:`39239`.)" +msgstr "" +":meth:`select.epoll.unregister` 方法不会再忽略 :data:`~errno.EBADF` 错误。 (由 Victor " +"Stinner 在 :issue:`39239` 中贡献。)" + +#: ../../whatsnew/3.9.rst:1107 +msgid "" +"The *compresslevel* parameter of :class:`bz2.BZ2File` became keyword-only, " +"since the *buffering* parameter has been removed. (Contributed by Victor " +"Stinner in :issue:`39357`.)" +msgstr "" +":class:`bz2.BZ2File` 的 *compresslevel* 形参已成为仅限关键字形参,因为 *buffering* 形参已被移除。 " +"(由 Victor Stinner 在 :issue:`39357` 中贡献。)" + +#: ../../whatsnew/3.9.rst:1111 +msgid "" +"Simplified AST for subscription. Simple indices will be represented by their" +" value, extended slices will be represented as tuples. ``Index(value)`` will" +" return a ``value`` itself, ``ExtSlice(slices)`` will return ``Tuple(slices," +" Load())``. (Contributed by Serhiy Storchaka in :issue:`34822`.)" +msgstr "" +"简化了 AST 的抽取操作。 简单索引将以它们的值来代表,扩展切片将以元组形式来代表。 ``Index(value)`` 将返回 ``value`` " +"本身,``ExtSlice(slices)`` 将返回 ``Tuple(slices, Load())``。 (由 Serhiy Storchaka 在" +" :issue:`34822` 中贡献。)" + +#: ../../whatsnew/3.9.rst:1117 +msgid "" +"The :mod:`importlib` module now ignores the :envvar:`PYTHONCASEOK` " +"environment variable when the :option:`-E` or :option:`-I` command line " +"options are being used." +msgstr "" +"当使用了 :option:`-E` 或 :option:`-I` 命令行参数时 :mod:`importlib` 模块现在会忽略 " +":envvar:`PYTHONCASEOK` 环境变量。" + +#: ../../whatsnew/3.9.rst:1121 +msgid "" +"The *encoding* parameter has been added to the classes :class:`ftplib.FTP` " +"and :class:`ftplib.FTP_TLS` as a keyword-only parameter, and the default " +"encoding is changed from Latin-1 to UTF-8 to follow :rfc:`2640`." +msgstr "" +"*encoding* 形参已作为仅限关键字形参被添加到 :class:`ftplib.FTP` 和 :class:`ftplib.FTP_TLS` " +"类,并且默认编码格式由 Latin-1 改为 UTF-8 以遵循 :rfc:`2640`。" + +#: ../../whatsnew/3.9.rst:1125 +msgid "" +":meth:`asyncio.loop.shutdown_default_executor` has been added to " +":class:`~asyncio.AbstractEventLoop`, meaning alternative event loops that " +"inherit from it should have this method defined. (Contributed by Kyle " +"Stanley in :issue:`34037`.)" +msgstr "" +":meth:`asyncio.loop.shutdown_default_executor` 已被添加到 " +":class:`~asyncio.AbstractEventLoop`,这意味着继承自它的替代事件循环应当定义此方法。 (由 Kyle Stanley " +"在 :issue:`34037` 中贡献。)" + +#: ../../whatsnew/3.9.rst:1130 +msgid "" +"The constant values of future flags in the :mod:`__future__` module is " +"updated in order to prevent collision with compiler flags. Previously " +"``PyCF_ALLOW_TOP_LEVEL_AWAIT`` was clashing with ``CO_FUTURE_DIVISION``. " +"(Contributed by Batuhan Taskaya in :issue:`39562`)" +msgstr "" +"更新了 :mod:`__future__` 模块中未来特性旗标的常量值以防止与编译器旗标相冲突。 在之前版本中 " +"``PyCF_ALLOW_TOP_LEVEL_AWAIT`` 会与 ``CO_FUTURE_DIVISION`` 发生冲突。 (由 Batuhan " +"Taskaya 在 :issue:`39562` 中贡献。)" + +#: ../../whatsnew/3.9.rst:1135 +msgid "" +"``array('u')`` now uses ``wchar_t`` as C type instead of ``Py_UNICODE``. " +"This change doesn't affect to its behavior because ``Py_UNICODE`` is alias " +"of ``wchar_t`` since Python 3.3. (Contributed by Inada Naoki in " +":issue:`34538`.)" +msgstr "" +"``array('u')`` 现在使用 ``wchar_t`` 作为 C 类型而不是 ``Py_UNICODE``。 这个改变不会影响其行为,因为自 " +"Python 3.3 起 ``Py_UNICODE`` 是 ``wchar_t`` 的别名。 (由 Inada Naoki 在 " +":issue:`34538` 中贡献。)" + +#: ../../whatsnew/3.9.rst:1140 +msgid "" +"The :func:`logging.getLogger` API now returns the root logger when passed " +"the name ``'root'``, whereas previously it returned a non-root logger named " +"``'root'``. This could affect cases where user code explicitly wants a non-" +"root logger named ``'root'``, or instantiates a logger using " +"``logging.getLogger(__name__)`` in some top-level module called " +"``'root.py'``. (Contributed by Vinay Sajip in :issue:`37742`.)" +msgstr "" +"现在 :func:`logging.getLogger` API 当传入名称 ``'root'`` 时将返回根日志记录器,而在之前它则返回一个名为 " +"``'root'`` 的非根日志记录器。 这可能会影响到用户代码明确希望使用一个名为 ``'root'`` 的非根日志记录器,或在某个名为 " +"``'root.py'`` 的最高层级模块中使用 ``logging.getLogger(__name__)`` 来实例化日志记录器的情况。 (由 " +"Vinay Sajip 在 :issue:`37742` 中贡献。)" + +#: ../../whatsnew/3.9.rst:1147 +msgid "" +"Division handling of :class:`~pathlib.PurePath` now returns " +"``NotImplemented`` instead of raising a :exc:`TypeError` when passed " +"something other than an instance of ``str`` or :class:`~pathlib.PurePath`. " +"This allows creating compatible classes that don't inherit from those " +"mentioned types. (Contributed by Roger Aiudi in :issue:`34775`)." +msgstr "" +"现在 :class:`~pathlib.PurePath` 的拆分处理当传入 ``str`` 或 :class:`~pathlib.PurePath` " +"的实例以外的对象时会返回 ``NotImplemented`` 而不是引发 :exc:`TypeError`。 这将允许创建不继承自上述类型的兼容类。 " +"(由 Roger Aiudi 在 :issue:`34775` 中贡献。)" + +#: ../../whatsnew/3.9.rst:1153 +msgid "" +"Starting with Python 3.9.5 the :mod:`ipaddress` module no longer accepts any" +" leading zeros in IPv4 address strings. Leading zeros are ambiguous and " +"interpreted as octal notation by some libraries. For example the legacy " +"function :func:`socket.inet_aton` treats leading zeros as octal notatation. " +"glibc implementation of modern :func:`~socket.inet_pton` does not accept any" +" leading zeros. (Contributed by Christian Heimes in :issue:`36384`)." +msgstr "" +"从 Python 3.9.5 开始 :mod:`ipaddress` 模块不再接受 IPv4 地址字符串中有任何前缀的零。 " +"前缀的零有歧义且会被某些库解读为八进制数字。 例如旧版函数 :func:`socket.inet_aton` 就瘵前缀的零视为八进制数字。 最新 " +":func:`~socket.inet_pton` 的 glibc 实现则不接受任何前缀的零。 (由 Christian Heimes 在 " +":issue:`36384` 中贡献)。" + +#: ../../whatsnew/3.9.rst:1161 +msgid "" +":func:`codecs.lookup` now normalizes the encoding name the same way as " +":func:`encodings.normalize_encoding`, except that :func:`codecs.lookup` also" +" converts the name to lower case. For example, ``\"latex+latin1\"`` encoding" +" name is now normalized to ``\"latex_latin1\"``. (Contributed by Jordon Xu " +"in :issue:`37751`.)" +msgstr "" +":func:`codecs.lookup` 现在会以与 :func:`encodings.normalize_encoding` " +"相同的方式正规化编码格式名称,不同之处在于 :func:`codecs.lookup` 还会将名称转换为小写形式。 例如 " +"``\"latex+latin1\"`` 编写格式名称现在会被正规化为 ``\"latex_latin1\"``。 (由 Jordon Xu 在 " +":issue:`37751` 中贡献。)" + +#: ../../whatsnew/3.9.rst:1169 +msgid "Changes in the C API" +msgstr "C API 的变化" + +#: ../../whatsnew/3.9.rst:1171 +msgid "" +"Instances of heap-allocated types (such as those created with " +":c:func:`PyType_FromSpec` and similar APIs) hold a reference to their type " +"object since Python 3.8. As indicated in the \"Changes in the C API\" of " +"Python 3.8, for the vast majority of cases, there should be no side effect " +"but for types that have a custom :c:member:`~PyTypeObject.tp_traverse` " +"function, ensure that all custom ``tp_traverse`` functions of heap-allocated" +" types visit the object's type." +msgstr "" +"堆分配类型的实例(例如使用 :c:func:`PyType_FromSpec` 和类似 API 创建的实例)自 Python 3.8 " +"起会带有一个对其类型对象的引用。 正如 Python 3.8 的 \"C API 中的改变\" " +"部分所述,对于大部分情况来说,这应当不会有任何副作用,但对于具有自定义 :c:member:`~PyTypeObject.tp_traverse` " +"函数的类型来说,则要确保所有堆分配类型的自定义 ``tp_traverse`` 函数可访问对象的类型。" + +#: ../../whatsnew/3.9.rst:1192 +msgid "" +"If your traverse function delegates to ``tp_traverse`` of its base class (or" +" another type), ensure that ``Py_TYPE(self)`` is visited only once. Note " +"that only heap types are expected to visit the type in ``tp_traverse``." +msgstr "" +"如果你的遍历函数委托给了基类(或其他类)的 ``tp_traverse``,则要确保 ``Py_TYPE(self)`` 只被访问一次。 " +"请注意应当只有堆类型可访问 ``tp_traverse`` 中的类型。" + +#: ../../whatsnew/3.9.rst:1196 +msgid "For example, if your ``tp_traverse`` function includes:" +msgstr "举例来说,如果你的 ``tp_traverse`` 函数包括以下内容:" + +#: ../../whatsnew/3.9.rst:1202 +msgid "then add:" +msgstr "则要添加:" + +#: ../../whatsnew/3.9.rst:1215 +msgid "(See :issue:`35810` and :issue:`40217` for more information.)" +msgstr "(参阅 :issue:`35810` 和 :issue:`40217` 了解更多信息。)" + +#: ../../whatsnew/3.9.rst:1217 +msgid "" +"The functions ``PyEval_CallObject``, ``PyEval_CallFunction``, " +"``PyEval_CallMethod`` and ``PyEval_CallObjectWithKeywords`` are deprecated. " +"Use :c:func:`PyObject_Call` and its variants instead. (See more details in " +":issue:`29548`.)" +msgstr "" +"``PyEval_CallObject``, ``PyEval_CallFunction``, ``PyEval_CallMethod`` 和 " +"``PyEval_CallObjectWithKeywords`` 函数已被弃用。 请改用 :c:func:`PyObject_Call` " +"及其变化形式。 (详情参见 :issue:`29548`。)" + +#: ../../whatsnew/3.9.rst:1223 +msgid "CPython bytecode changes" +msgstr "CPython 字节码的改变" + +#: ../../whatsnew/3.9.rst:1225 +msgid "" +"The :opcode:`LOAD_ASSERTION_ERROR` opcode was added for handling the " +":keyword:`assert` statement. Previously, the assert statement would not work" +" correctly if the :exc:`AssertionError` exception was being shadowed. " +"(Contributed by Zackery Spytz in :issue:`34880`.)" +msgstr "" +"添加了 :opcode:`LOAD_ASSERTION_ERROR` 操作码用于处理 :keyword:`assert` 语句。 在之前的版本中,如果 " +":exc:`AssertionError` 异常被屏蔽则 assert 语句将不能正常运作。 (由 Zackery Spytz 在 " +":issue:`34880` 中贡献。)" + +#: ../../whatsnew/3.9.rst:1230 +msgid "" +"The :opcode:`COMPARE_OP` opcode was split into four distinct instructions:" +msgstr ":opcode:`COMPARE_OP` 操作码已被拆分为四个单独指令:" + +#: ../../whatsnew/3.9.rst:1232 +msgid "``COMPARE_OP`` for rich comparisons" +msgstr "``COMPARE_OP`` 用于富比较" + +#: ../../whatsnew/3.9.rst:1233 +msgid "``IS_OP`` for 'is' and 'is not' tests" +msgstr "``IS_OP`` 用于 'is' 和 'is not' 检测" + +#: ../../whatsnew/3.9.rst:1234 +msgid "``CONTAINS_OP`` for 'in' and 'not in' tests" +msgstr "``CONTAINS_OP`` 用于 'in' 和 'not in' 检测" + +#: ../../whatsnew/3.9.rst:1235 +msgid "" +"``JUMP_IF_NOT_EXC_MATCH`` for checking exceptions in 'try-except' " +"statements." +msgstr "``JUMP_IF_NOT_EXC_MATCH`` 用于检查 'try-except' 语句中的异常。" + +#: ../../whatsnew/3.9.rst:1238 +msgid "(Contributed by Mark Shannon in :issue:`39156`.)" +msgstr "(由 Mark Shannon 在 :issue:`39156` 中贡献。)" + +#: ../../whatsnew/3.9.rst:1242 +msgid "Build Changes" +msgstr "构建的改变" + +#: ../../whatsnew/3.9.rst:1244 +msgid "" +"Added ``--with-platlibdir`` option to the ``configure`` script: name of the " +"platform-specific library directory, stored in the new " +":attr:`sys.platlibdir` attribute. See :attr:`sys.platlibdir` attribute for " +"more information. (Contributed by Jan Matějek, Matěj Cepl, Charalampos " +"Stratakis and Victor Stinner in :issue:`1294959`.)" +msgstr "" +"将 ``--with-platlibdir`` 选项添加到 ``configure`` 脚本:平台专属库目录的名称,保存在新的 " +":attr:`sys.platlibdir` 属性中。 请参阅 :attr:`sys.platlibdir` 属性了解详情。 (由 Jan " +"Matějek, Matěj Cepl, Charalampos Stratakis 和 Victor Stinner 在 " +":issue:`1294959` 中贡献。)" + +#: ../../whatsnew/3.9.rst:1250 +msgid "" +"The ``COUNT_ALLOCS`` special build macro has been removed. (Contributed by " +"Victor Stinner in :issue:`39489`.)" +msgstr "``COUNT_ALLOCS`` 特殊构建宏已被移除。 (由 Victor Stinner 在 :issue:`39489` 中贡献。)" + +#: ../../whatsnew/3.9.rst:1253 +msgid "" +"On non-Windows platforms, the :c:func:`setenv` and :c:func:`unsetenv` " +"functions are now required to build Python. (Contributed by Victor Stinner " +"in :issue:`39395`.)" +msgstr "" +"在非 Windows 平台上,现在需要用 :c:func:`setenv` 和 :c:func:`unsetenv` 函数来构建 Python。 (由 " +"Victor Stinner 在 :issue:`39395` 中贡献。)" + +#: ../../whatsnew/3.9.rst:1257 +msgid "" +"On non-Windows platforms, creating ``bdist_wininst`` installers is now " +"officially unsupported. (See :issue:`10945` for more details.)" +msgstr "" +"在非 Windows 平台上,创建 ``bdist_wininst`` 安装器现在已不受官方支持。 (详情参见 :issue:`10945`。)" + +#: ../../whatsnew/3.9.rst:1260 +msgid "" +"When building Python on macOS from source, ``_tkinter`` now links with non-" +"system Tcl and Tk frameworks if they are installed in " +"``/Library/Frameworks``, as had been the case on older releases of macOS. If" +" a macOS SDK is explicitly configured, by using ``--enable-universalsdk=`` " +"or ``-isysroot``, only the SDK itself is searched. The default behavior can " +"still be overridden with ``--with-tcltk-includes`` and ``--with-tcltk-" +"libs``. (Contributed by Ned Deily in :issue:`34956`.)" +msgstr "" +"当在 macOS 上用源代码编译 Python 时,``_tkinter`` 现在会链接到非系统的 Tcl 和 Tk 框架,如果它们被安装到 " +"``/Library/Frameworks`` 的话,就如在较旧的 macOS 发行版上的情况一样。 如果通过使用 ``--enable-" +"universalsdk=`` 或 ``-isysroot`` 明确地配置了 macOS SDK,则只会搜索 SDK 本身。 默认行为仍然可以通过 " +"``--with-tcltk-includes`` 和 ``--with-tcltk-libs`` 来覆盖。 (由 Ned Deily 在 " +":issue:`34956` 中贡献。)" + +#: ../../whatsnew/3.9.rst:1269 +msgid "" +"Python can now be built for Windows 10 ARM64. (Contributed by Steve Dower in" +" :issue:`33125`.)" +msgstr "" +"Python 现在可以针对 Windows 10 ARM64 进行编译。 (由 Steve Dower 在 :issue:`33125` 中贡献。)" + +#: ../../whatsnew/3.9.rst:1272 +msgid "" +"Some individual tests are now skipped when ``--pgo`` is used. The tests in " +"question increased the PGO task time significantly and likely didn't help " +"improve optimization of the final executable. This speeds up the task by a " +"factor of about 15x. Running the full unit test suite is slow. This change" +" may result in a slightly less optimized build since not as many code " +"branches will be executed. If you are willing to wait for the much slower " +"build, the old behavior can be restored using ``./configure [..] " +"PROFILE_TASK=\"-m test --pgo-extended\"``. We make no guarantees as to " +"which PGO task set produces a faster build. Users who care should run their" +" own relevant benchmarks as results can depend on the environment, workload," +" and compiler tool chain. (See :issue:`36044` and :issue:`37707` for more " +"details.)" +msgstr "" +"现在当使用 ``--pgo`` 时一些单独的测试会被跳过。 这些测试显著增加了 PGO 任务的时间并且可能无助于提升最终可执行文件的优化程度。 " +"这样能使任务加速大约 15 倍。 运行完整的单元测试是很慢的。 这个改变可能导致优化程序稍差的构建,因为将被执行的代码分支不够多。 " +"如果你愿意等待更缓慢的构建,则可以使用 ``./configure [..] PROFILE_TASK=\"-m test --pgo-" +"extended\"`` 来恢复旧版本的行为。 我们不保证哪个 PGO 任务集能产生更快的构建。 " +"关心此问题的用户应当自行运行相关基准测试,因为结果可能取决于具体环境、工作负载以及编译工具链。 (请参阅 :issue:`36044` 和 " +":issue:`37707` 了解详情。)" + +#: ../../whatsnew/3.9.rst:1287 +msgid "C API Changes" +msgstr "C API 的改变" + +#: ../../whatsnew/3.9.rst:1292 +msgid "" +":pep:`573`: Added :c:func:`PyType_FromModuleAndSpec` to associate a module " +"with a class; :c:func:`PyType_GetModule` and :c:func:`PyType_GetModuleState`" +" to retrieve the module and its state; and :c:data:`PyCMethod` and " +":c:data:`METH_METHOD` to allow a method to access the class it was defined " +"in. (Contributed by Marcel Plch and Petr Viktorin in :issue:`38787`.)" +msgstr "" +":pep:`573`: 添加了 :c:func:`PyType_FromModuleAndSpec` " +"用于通过类来关联一个模块;:c:func:`PyType_GetModule` 和 :c:func:`PyType_GetModuleState` " +"用于获取模块及其状态;以及 :c:data:`PyCMethod` 和 :c:data:`METH_METHOD` 用于允许一个方法访问其定义所在的类。" +" (由 Marcel Plch 和 Petr Viktorin 在 :issue:`38787` 中贡献。)" + +#: ../../whatsnew/3.9.rst:1299 +msgid "" +"Added :c:func:`PyFrame_GetCode` function: get a frame code. Added " +":c:func:`PyFrame_GetBack` function: get the frame next outer frame. " +"(Contributed by Victor Stinner in :issue:`40421`.)" +msgstr "" +"增加了 :c:func:`PyFrame_GetCode` 函数:获取帧代码。 增加了 :c:func:`PyFrame_GetBack` " +"函数:获取帧的下一个外部帧。 (由 Victor Stinner 在 :issue:`40421` 中贡献。)" + +#: ../../whatsnew/3.9.rst:1303 +msgid "" +"Added :c:func:`PyFrame_GetLineNumber` to the limited C API. (Contributed by " +"Victor Stinner in :issue:`40421`.)" +msgstr "" +"将 :c:func:`PyFrame_GetLineNumber` 添加到受限的 C API。 (由 Victor Stinner 在 " +":issue:`40421` 中贡献。)" + +#: ../../whatsnew/3.9.rst:1306 +msgid "" +"Added :c:func:`PyThreadState_GetInterpreter` and " +":c:func:`PyInterpreterState_Get` functions to get the interpreter. Added " +":c:func:`PyThreadState_GetFrame` function to get the current frame of a " +"Python thread state. Added :c:func:`PyThreadState_GetID` function: get the " +"unique identifier of a Python thread state. (Contributed by Victor Stinner " +"in :issue:`39947`.)" +msgstr "" +"增加了 :c:func:`PyThreadState_GetInterpreter` 和 " +":c:func:`PyInterpreterState_Get` 函数用于获取解释器。 增加了 " +":c:func:`PyThreadState_GetFrame` 函数用于获取 Python 线程状态的当前帧。 增加了 " +":c:func:`PyThreadState_GetID` 函数:获取 Python 线程状态的唯一标识符。 (由 Victor Stinner 在 " +":issue:`39947` 中贡献。)" + +#: ../../whatsnew/3.9.rst:1314 +msgid "" +"Added a new public :c:func:`PyObject_CallNoArgs` function to the C API, " +"which calls a callable Python object without any arguments. It is the most " +"efficient way to call a callable Python object without any argument. " +"(Contributed by Victor Stinner in :issue:`37194`.)" +msgstr "" +"将新的公有 :c:func:`PyObject_CallNoArgs` 函数添加到 C API,该函数可不带任何参数调用一个 Python 可调用对象。" +" 它是不带参数调用 Python 可调用对象最有效率的方式。 (由 Victor Stinner 在 :issue:`37194` 中贡献。)" + +#: ../../whatsnew/3.9.rst:1319 ../../whatsnew/3.9.rst:1437 +msgid "Changes in the limited C API (if ``Py_LIMITED_API`` macro is defined):" +msgstr "受限 C API 中的改变(如果定义了 ``Py_LIMITED_API`` 宏):" + +#: ../../whatsnew/3.9.rst:1321 +msgid "" +"Provide :c:func:`Py_EnterRecursiveCall` and :c:func:`Py_LeaveRecursiveCall` " +"as regular functions for the limited API. Previously, there were defined as " +"macros, but these macros didn't compile with the limited C API which cannot " +"access ``PyThreadState.recursion_depth`` field (the structure is opaque in " +"the limited C API)." +msgstr "" +"提供 :c:func:`Py_EnterRecursiveCall` 和 :c:func:`Py_LeaveRecursiveCall` " +"作为常规函数用于受限 API。 在之前版本中是使用宏定义,但这些宏不能与无法访问 ``PyThreadState.recursion_depth`` " +"字段的受限 C API 一同编译(该结构体在受限 C API 中是不透明的)。" + +#: ../../whatsnew/3.9.rst:1327 +msgid "" +"``PyObject_INIT()`` and ``PyObject_INIT_VAR()`` become regular \"opaque\" " +"function to hide implementation details." +msgstr "``PyObject_INIT()`` 和 ``PyObject_INIT_VAR()`` 已成为常规“不透明”函数以隐藏实现细节。" + +#: ../../whatsnew/3.9.rst:1330 ../../whatsnew/3.9.rst:1464 +msgid "(Contributed by Victor Stinner in :issue:`38644` and :issue:`39542`.)" +msgstr "(由 Victor Stinner 在 :issue:`38644` 和 :issue:`39542` 中贡献。)" + +#: ../../whatsnew/3.9.rst:1332 +msgid "" +"The :c:func:`PyModule_AddType` function is added to help adding a type to a " +"module. (Contributed by Dong-hee Na in :issue:`40024`.)" +msgstr "" +"增加了 :c:func:`PyModule_AddType` 函数以协助将类型加入到模块中。 (由 Dong-hee Na 在 " +":issue:`40024` 中贡献。)" + +#: ../../whatsnew/3.9.rst:1336 +msgid "" +"Added the functions :c:func:`PyObject_GC_IsTracked` and " +":c:func:`PyObject_GC_IsFinalized` to the public API to allow to query if " +"Python objects are being currently tracked or have been already finalized by" +" the garbage collector respectively. (Contributed by Pablo Galindo Salgado " +"in :issue:`40241`.)" +msgstr "" +"将 :c:func:`PyObject_GC_IsTracked` 和 :c:func:`PyObject_GC_IsFinalized` " +"函数添加到公有 API 以允许分别查询 Python 对象当前是正在被追踪还是已经被垃圾回收器所终结。 (由 Pablo Galindo Salgado" +" 在 :issue:`40241` 中贡献。)" + +#: ../../whatsnew/3.9.rst:1342 +msgid "" +"Added :c:func:`_PyObject_FunctionStr` to get a user-friendly string " +"representation of a function-like object. (Patch by Jeroen Demeyer in " +":issue:`37645`.)" +msgstr "" +"增加了 :c:func:`_PyObject_FunctionStr` 以获取函数类对象的用户友好的表示形式。 (由 Jeroen Demeyer 在 " +":issue:`37645` 中修正。)" + +#: ../../whatsnew/3.9.rst:1346 +msgid "" +"Added :c:func:`PyObject_CallOneArg` for calling an object with one " +"positional argument (Patch by Jeroen Demeyer in :issue:`37483`.)" +msgstr "" +"增加了 :c:func:`PyObject_CallOneArg` 用于调用具有一个位置参数的对象(由 Jeroen Demeyer 在 " +":issue:`37483` 中修正。)" + +#: ../../whatsnew/3.9.rst:1354 +msgid "" +"``PyInterpreterState.eval_frame`` (:pep:`523`) now requires a new mandatory " +"*tstate* parameter (``PyThreadState*``). (Contributed by Victor Stinner in " +":issue:`38500`.)" +msgstr "" +"``PyInterpreterState.eval_frame`` (:pep:`523`) 现在需要有新的强制性形参 *tstate* " +"(``PyThreadState*``)。 (由 Victor Stinner 在 :issue:`38500` 中贡献。)" + +#: ../../whatsnew/3.9.rst:1358 +msgid "" +"Extension modules: :c:member:`~PyModuleDef.m_traverse`, " +":c:member:`~PyModuleDef.m_clear` and :c:member:`~PyModuleDef.m_free` " +"functions of :c:type:`PyModuleDef` are no longer called if the module state " +"was requested but is not allocated yet. This is the case immediately after " +"the module is created and before the module is executed " +"(:c:data:`Py_mod_exec` function). More precisely, these functions are not " +"called if :c:member:`~PyModuleDef.m_size` is greater than 0 and the module " +"state (as returned by :c:func:`PyModule_GetState`) is ``NULL``." +msgstr "" +"扩展模块: :c:type:`PyModuleDef` 的 :c:member:`~PyModuleDef.m_traverse`, " +":c:member:`~PyModuleDef.m_clear` 和 :c:member:`~PyModuleDef.m_free` " +"等函数在模块状态被请求但尚未被分配时将不会再被调用。 这种情况出现在模块被创建之后且模块被执行 (:c:data:`Py_mod_exec` 函数) " +"之前的时刻。 更准确地说,这些函数在 :c:member:`~PyModuleDef.m_size` 大于 0 并且模块状态(即 " +":c:func:`PyModule_GetState` 的返回值)为 ``NULL`` 时将不会被调用。" + +#: ../../whatsnew/3.9.rst:1367 +msgid "" +"Extension modules without module state (``m_size <= 0``) are not affected." +msgstr "没有模块状态的扩展模块 (``m_size <= 0``) 不会受到影响。" + +#: ../../whatsnew/3.9.rst:1369 +msgid "" +"If :c:func:`Py_AddPendingCall` is called in a subinterpreter, the function " +"is now scheduled to be called from the subinterpreter, rather than being " +"called from the main interpreter. Each subinterpreter now has its own list " +"of scheduled calls. (Contributed by Victor Stinner in :issue:`39984`.)" +msgstr "" +"现在如果 :c:func:`Py_AddPendingCall` 是在子解释器内部被调用,该函数会被排入子解释器的调用日程,而不是由主解释器调用。 " +"每个子解释器现在都拥有它们自己的调用日程列表。 (由 Victor Stinner 在 :issue:`39984` 中贡献。)" + +#: ../../whatsnew/3.9.rst:1375 +msgid "" +"The Windows registry is no longer used to initialize :data:`sys.path` when " +"the ``-E`` option is used (if :c:member:`PyConfig.use_environment` is set to" +" ``0``). This is significant when embedding Python on Windows. (Contributed " +"by Zackery Spytz in :issue:`8901`.)" +msgstr "" +"当 ``-E`` 选项被使用 (如果 :c:member:`PyConfig.use_environment` 设为 ``0``) 时将不再使用 " +"Windows 注册表来初始化 :data:`sys.path`。 这会影响在 Windows 上嵌入 Python 的操作。 (由 Zackery " +"Spytz 在 :issue:`8901` 中贡献。)" + +#: ../../whatsnew/3.9.rst:1380 +msgid "" +"The global variable :c:data:`PyStructSequence_UnnamedField` is now a " +"constant and refers to a constant string. (Contributed by Serhiy Storchaka " +"in :issue:`38650`.)" +msgstr "" +"全局变量 :c:data:`PyStructSequence_UnnamedField` 现在为常量并且指向一个字符串常量。 (由 Serhiy " +"Storchaka 在 :issue:`38650` 中贡献。)" + +#: ../../whatsnew/3.9.rst:1384 +msgid "" +"The :c:type:`PyGC_Head` structure is now opaque. It is only defined in the " +"internal C API (``pycore_gc.h``). (Contributed by Victor Stinner in " +":issue:`40241`.)" +msgstr "" +"现在 :c:type:`PyGC_Head` 结构是不透明的。 它只在内部 C API (``pycore_gc.h``) 中定义。 (由 Victor" +" Stinner 在 :issue:`40241` 中贡献。)" + +#: ../../whatsnew/3.9.rst:1388 +msgid "" +"The ``Py_UNICODE_COPY``, ``Py_UNICODE_FILL``, ``PyUnicode_WSTR_LENGTH``, " +":c:func:`PyUnicode_FromUnicode`, :c:func:`PyUnicode_AsUnicode`, " +"``_PyUnicode_AsUnicode``, and :c:func:`PyUnicode_AsUnicodeAndSize` are " +"marked as deprecated in C. They have been deprecated by :pep:`393` since " +"Python 3.3. (Contributed by Inada Naoki in :issue:`36346`.)" +msgstr "" +"``Py_UNICODE_COPY``, ``Py_UNICODE_FILL``, ``PyUnicode_WSTR_LENGTH``, " +":c:func:`PyUnicode_FromUnicode`, :c:func:`PyUnicode_AsUnicode`, " +"``_PyUnicode_AsUnicode`` 以及 :c:func:`PyUnicode_AsUnicodeAndSize` 在 C " +"中被标记为已弃用。 它们自 Python 3.3 起就已被 :pep:`393` 弃用。 (由 Inada Naoki 在 :issue:`36346`" +" 中贡献。)" + +#: ../../whatsnew/3.9.rst:1395 +msgid "" +"The :c:func:`Py_FatalError` function is replaced with a macro which logs " +"automatically the name of the current function, unless the " +"``Py_LIMITED_API`` macro is defined. (Contributed by Victor Stinner in " +":issue:`39882`.)" +msgstr "" +":c:func:`Py_FatalError` 函数会被一个自动记录当前函数名称的宏所替代,除非已定义了 ``Py_LIMITED_API`` 宏。 " +"(由 Victor Stinner 在 :issue:`39882` 中贡献。)" + +#: ../../whatsnew/3.9.rst:1400 +msgid "" +"The vectorcall protocol now requires that the caller passes only strings as " +"keyword names. (See :issue:`37540` for more information.)" +msgstr "vectorcall 协议现在要求调用者只传入字符串作为键名。 (请参阅 :issue:`37540` 了解详情。)" + +#: ../../whatsnew/3.9.rst:1403 +msgid "" +"Implementation details of a number of macros and functions are now hidden:" +msgstr "多个宏和函数的实现细节现在已被隐藏:" + +#: ../../whatsnew/3.9.rst:1405 +msgid ":c:func:`PyObject_IS_GC` macro was converted to a function." +msgstr ":c:func:`PyObject_IS_GC` 宏已被转换为函数。" + +#: ../../whatsnew/3.9.rst:1407 +msgid "" +"The :c:func:`PyObject_NEW` macro becomes an alias to the " +":c:func:`PyObject_New` macro, and the :c:func:`PyObject_NEW_VAR` macro " +"becomes an alias to the :c:func:`PyObject_NewVar` macro. They no longer " +"access directly the :c:member:`PyTypeObject.tp_basicsize` member." +msgstr "" +":c:func:`PyObject_NEW` 宏已成为 :c:func:`PyObject_New` 宏的别名,而 " +":c:func:`PyObject_NEW_VAR` 宏已成为 :c:func:`PyObject_NewVar` 宏的别名。 它们将不再直接访问 " +":c:member:`PyTypeObject.tp_basicsize` 成员。" + +#: ../../whatsnew/3.9.rst:1412 +msgid "" +":c:func:`PyObject_GET_WEAKREFS_LISTPTR` macro was converted to a function: " +"the macro accessed directly the :c:member:`PyTypeObject.tp_weaklistoffset` " +"member." +msgstr "" +":c:func:`PyObject_GET_WEAKREFS_LISTPTR` 宏已被转换为函数:该宏会直接访问 " +":c:member:`PyTypeObject.tp_weaklistoffset` 成员。" + +#: ../../whatsnew/3.9.rst:1416 +msgid "" +":c:func:`PyObject_CheckBuffer` macro was converted to a function: the macro " +"accessed directly the :c:member:`PyTypeObject.tp_as_buffer` member." +msgstr "" +":c:func:`PyObject_CheckBuffer` 宏已被转换为函数:该宏会直接访问 " +":c:member:`PyTypeObject.tp_as_buffer` 成员。" + +#: ../../whatsnew/3.9.rst:1419 +msgid "" +":c:func:`PyIndex_Check` is now always declared as an opaque function to hide" +" implementation details: removed the ``PyIndex_Check()`` macro. The macro " +"accessed directly the :c:member:`PyTypeObject.tp_as_number` member." +msgstr "" +"现在 :c:func:`PyIndex_Check` 总是被声明为不透明函数以隐藏实现细节;``PyIndex_Check()`` 宏已被移除。 " +"该宏会直接访问 :c:member:`PyTypeObject.tp_as_number` 成员。" + +#: ../../whatsnew/3.9.rst:1423 +msgid "(See :issue:`40170` for more details.)" +msgstr "(详情请参阅 :issue:`40170`。)" + +#: ../../whatsnew/3.9.rst:1428 +msgid "" +"Excluded ``PyFPE_START_PROTECT()`` and ``PyFPE_END_PROTECT()`` macros of " +"``pyfpe.h`` from the limited C API. (Contributed by Victor Stinner in " +":issue:`38835`.)" +msgstr "" +"``pyfpe.h`` 的 ``PyFPE_START_PROTECT()`` 和 ``PyFPE_END_PROTECT()`` 宏已从受限的 C " +"API 中被排除。 (由 Victor Stinner 在 :issue:`38835` 中贡献。)" + +#: ../../whatsnew/3.9.rst:1432 +msgid "" +"The ``tp_print`` slot of :ref:`PyTypeObject ` has been " +"removed. It was used for printing objects to files in Python 2.7 and before." +" Since Python 3.0, it has been ignored and unused. (Contributed by Jeroen " +"Demeyer in :issue:`36974`.)" +msgstr "" +":ref:`PyTypeObject ` 的 ``tp_print`` 空位已被移除。 它在 Python 2.7 " +"及之前的版本中被用来将对象打印到文件。 自 Python 3.0 起,它已被忽略并且不再使用。 (由 Jeroen Demeyer 在 " +":issue:`36974` 中贡献。)" + +#: ../../whatsnew/3.9.rst:1439 +msgid "Excluded the following functions from the limited C API:" +msgstr "以下函数已从受限 C API 中排除:" + +#: ../../whatsnew/3.9.rst:1441 +msgid "" +"``PyThreadState_DeleteCurrent()`` (Contributed by Joannah Nanjekye in " +":issue:`37878`.)" +msgstr "" +"``PyThreadState_DeleteCurrent()`` (由 Joannah Nanjekye 在 :issue:`37878` 中贡献。)" + +#: ../../whatsnew/3.9.rst:1443 +msgid "``_Py_CheckRecursionLimit``" +msgstr "``_Py_CheckRecursionLimit``" + +#: ../../whatsnew/3.9.rst:1444 +msgid "``_Py_NewReference()``" +msgstr "``_Py_NewReference()``" + +#: ../../whatsnew/3.9.rst:1445 +msgid "``_Py_ForgetReference()``" +msgstr "``_Py_ForgetReference()``" + +#: ../../whatsnew/3.9.rst:1446 +msgid "``_PyTraceMalloc_NewReference()``" +msgstr "``_PyTraceMalloc_NewReference()``" + +#: ../../whatsnew/3.9.rst:1447 +msgid "``_Py_GetRefTotal()``" +msgstr "``_Py_GetRefTotal()``" + +#: ../../whatsnew/3.9.rst:1448 +msgid "The trashcan mechanism which never worked in the limited C API." +msgstr "在受限 C API 中从未使用的垃圾箱机制。" + +#: ../../whatsnew/3.9.rst:1449 +msgid "``PyTrash_UNWIND_LEVEL``" +msgstr "``PyTrash_UNWIND_LEVEL``" + +#: ../../whatsnew/3.9.rst:1450 +msgid "``Py_TRASHCAN_BEGIN_CONDITION``" +msgstr "``Py_TRASHCAN_BEGIN_CONDITION``" + +#: ../../whatsnew/3.9.rst:1451 +msgid "``Py_TRASHCAN_BEGIN``" +msgstr "``Py_TRASHCAN_BEGIN``" + +#: ../../whatsnew/3.9.rst:1452 +msgid "``Py_TRASHCAN_END``" +msgstr "``Py_TRASHCAN_END``" + +#: ../../whatsnew/3.9.rst:1453 +msgid "``Py_TRASHCAN_SAFE_BEGIN``" +msgstr "``Py_TRASHCAN_SAFE_BEGIN``" + +#: ../../whatsnew/3.9.rst:1454 +msgid "``Py_TRASHCAN_SAFE_END``" +msgstr "``Py_TRASHCAN_SAFE_END``" + +#: ../../whatsnew/3.9.rst:1456 +msgid "Moved following functions and definitions to the internal C API:" +msgstr "已将下列函数和定义移至内部 C API:" + +#: ../../whatsnew/3.9.rst:1458 +msgid "``_PyDebug_PrintTotalRefs()``" +msgstr "``_PyDebug_PrintTotalRefs()``" + +#: ../../whatsnew/3.9.rst:1459 +msgid "``_Py_PrintReferences()``" +msgstr "``_Py_PrintReferences()``" + +#: ../../whatsnew/3.9.rst:1460 +msgid "``_Py_PrintReferenceAddresses()``" +msgstr "``_Py_PrintReferenceAddresses()``" + +#: ../../whatsnew/3.9.rst:1461 +msgid "``_Py_tracemalloc_config``" +msgstr "``_Py_tracemalloc_config``" + +#: ../../whatsnew/3.9.rst:1462 +msgid "``_Py_AddToAllObjects()`` (specific to ``Py_TRACE_REFS`` build)" +msgstr "``_Py_AddToAllObjects()`` (``Py_TRACE_REFS`` 构建专属)" + +#: ../../whatsnew/3.9.rst:1466 +msgid "" +"Removed ``_PyRuntime.getframe`` hook and removed ``_PyThreadState_GetFrame``" +" macro which was an alias to ``_PyRuntime.getframe``. They were only exposed" +" by the internal C API. Removed also ``PyThreadFrameGetter`` type. " +"(Contributed by Victor Stinner in :issue:`39946`.)" +msgstr "" +"移除了 ``_PyRuntime.getframe`` 钩子并移除了 ``_PyThreadState_GetFrame`` 宏,该宏是 " +"``_PyRuntime.getframe`` 的一个别名。 它们仅由内部 C API 对外公开。 同样地移除了 " +"``PyThreadFrameGetter`` 类型。 (由 Victor Stinner 在 :issue:`39946` 中贡献。)" + +#: ../../whatsnew/3.9.rst:1471 +msgid "" +"Removed the following functions from the C API. Call :c:func:`PyGC_Collect` " +"explicitly to clear all free lists. (Contributed by Inada Naoki and Victor " +"Stinner in :issue:`37340`, :issue:`38896` and :issue:`40428`.)" +msgstr "" +"从 C API 移除了下列函数。 请显式地调用 :c:func:`PyGC_Collect` 来清空所有自由列表。 (由 Inada Naoki 和 " +"Victor Stinner 在 :issue:`37340`, :issue:`38896` 和 :issue:`40428` 中贡献。)" + +#: ../../whatsnew/3.9.rst:1476 +msgid "``PyAsyncGen_ClearFreeLists()``" +msgstr "``PyAsyncGen_ClearFreeLists()``" + +#: ../../whatsnew/3.9.rst:1477 +msgid "``PyContext_ClearFreeList()``" +msgstr "``PyContext_ClearFreeList()``" + +#: ../../whatsnew/3.9.rst:1478 +msgid "``PyDict_ClearFreeList()``" +msgstr "``PyDict_ClearFreeList()``" + +#: ../../whatsnew/3.9.rst:1479 +msgid "``PyFloat_ClearFreeList()``" +msgstr "``PyFloat_ClearFreeList()``" + +#: ../../whatsnew/3.9.rst:1480 +msgid "``PyFrame_ClearFreeList()``" +msgstr "``PyFrame_ClearFreeList()``" + +#: ../../whatsnew/3.9.rst:1481 +msgid "``PyList_ClearFreeList()``" +msgstr "``PyList_ClearFreeList()``" + +#: ../../whatsnew/3.9.rst:1482 +msgid "" +"``PyMethod_ClearFreeList()`` and ``PyCFunction_ClearFreeList()``: the free " +"lists of bound method objects have been removed." +msgstr "" +"``PyMethod_ClearFreeList()`` 和 ``PyCFunction_ClearFreeList()``: " +"绑定方法对象的自由列表已被移除。" + +#: ../../whatsnew/3.9.rst:1484 +msgid "" +"``PySet_ClearFreeList()``: the set free list has been removed in Python 3.4." +msgstr "``PySet_ClearFreeList()``: 集合自由列表已在 Python 3.4 中被移除。" + +#: ../../whatsnew/3.9.rst:1486 +msgid "``PyTuple_ClearFreeList()``" +msgstr "``PyTuple_ClearFreeList()``" + +#: ../../whatsnew/3.9.rst:1487 +msgid "" +"``PyUnicode_ClearFreeList()``: the Unicode free list has been removed in " +"Python 3.3." +msgstr "``PyUnicode_ClearFreeList()``: Unicode 自由列表已在 Python 3.3 中被移除。" + +#: ../../whatsnew/3.9.rst:1490 +msgid "" +"Removed ``_PyUnicode_ClearStaticStrings()`` function. (Contributed by Victor" +" Stinner in :issue:`39465`.)" +msgstr "" +"移除了 ``_PyUnicode_ClearStaticStrings()`` 函数。 (由 Victor Stinner 在 " +":issue:`39465` 中贡献。)" + +#: ../../whatsnew/3.9.rst:1493 +msgid "" +"Removed ``Py_UNICODE_MATCH``. It has been deprecated by :pep:`393`, and " +"broken since Python 3.3. The :c:func:`PyUnicode_Tailmatch` function can be " +"used instead. (Contributed by Inada Naoki in :issue:`36346`.)" +msgstr "" +"移除了 ``Py_UNICODE_MATCH``。 它已被 :pep:`393` 所弃用,并自 Python 3.3 起不再可用。 可以改用 " +":c:func:`PyUnicode_Tailmatch` 函数。 (由 Inada Naoki 在 :issue:`36346` 中贡献。)" + +#: ../../whatsnew/3.9.rst:1498 +msgid "" +"Cleaned header files of interfaces defined but with no implementation. The " +"public API symbols being removed are: " +"``_PyBytes_InsertThousandsGroupingLocale``, " +"``_PyBytes_InsertThousandsGrouping``, ``_Py_InitializeFromArgs``, " +"``_Py_InitializeFromWideArgs``, ``_PyFloat_Repr``, ``_PyFloat_Digits``, " +"``_PyFloat_DigitsInit``, ``PyFrame_ExtendStack``, ``_PyAIterWrapper_Type``, " +"``PyNullImporter_Type``, ``PyCmpWrapper_Type``, ``PySortWrapper_Type``, " +"``PyNoArgsFunction``. (Contributed by Pablo Galindo Salgado in " +":issue:`39372`.)" +msgstr "" +"清除了已定义但未实现的接口的头文件。 被移除了公共 API 符号有: " +"``_PyBytes_InsertThousandsGroupingLocale``, " +"``_PyBytes_InsertThousandsGrouping``, ``_Py_InitializeFromArgs``, " +"``_Py_InitializeFromWideArgs``, ``_PyFloat_Repr``, ``_PyFloat_Digits``, " +"``_PyFloat_DigitsInit``, ``PyFrame_ExtendStack``, ``_PyAIterWrapper_Type``, " +"``PyNullImporter_Type``, ``PyCmpWrapper_Type``, ``PySortWrapper_Type``, " +"``PyNoArgsFunction``。 (由 Pablo Galindo Salgado 在 :issue:`39372` 中贡献。)" + +#: ../../whatsnew/3.9.rst:1509 +msgid "Notable changes in Python 3.9.1" +msgstr "Python 3.9.1 中的重要变化" + +#: ../../whatsnew/3.9.rst:1514 +msgid "" +"The behavior of :class:`typing.Literal` was changed to conform with " +":pep:`586` and to match the behavior of static type checkers specified in " +"the PEP." +msgstr ":class:`typing.Literal` 的行为被改为遵循 :pep:`586` 并匹配该 PEP 所描述的静态类型检查器的行为。" + +#: ../../whatsnew/3.9.rst:1517 +msgid "``Literal`` now de-duplicates parameters." +msgstr "``Literal`` 现在将是去重复的形参。" + +#: ../../whatsnew/3.9.rst:1518 +msgid "" +"Equality comparisons between ``Literal`` objects are now order independent." +msgstr "``Literal`` 对象间的相等性比较现在将是顺序无关的。" + +#: ../../whatsnew/3.9.rst:1519 +msgid "" +"``Literal`` comparisons now respect types. For example, ``Literal[0] == " +"Literal[False]`` previously evaluated to ``True``. It is now ``False``. To" +" support this change, the internally used type cache now supports " +"differentiating types." +msgstr "" +"``Literal`` 比较现在会考虑类型。 例如 ``Literal[0] == Literal[False]`` 之前的结果值为 ``True``。" +" 现在则为 ``False``。 为支持此改变,内部使用的类型缓存现在也支持区分类型。" + +#: ../../whatsnew/3.9.rst:1523 +msgid "" +"``Literal`` objects will now raise a :exc:`TypeError` exception during " +"equality comparisons if any of their parameters are not :term:`hashable`. " +"Note that declaring ``Literal`` with mutable parameters will not throw an " +"error::" +msgstr "" +"现在如果有任何一个参数不为 :term:`hashable`,``Literal`` 对象将在相等性比较期间引发 :exc:`TypeError`。 " +"请注意使用可变参数声明 ``Literal`` 将不会抛出异常::" + +#: ../../whatsnew/3.9.rst:1535 +msgid "(Contributed by Yurii Karabas in :issue:`42345`.)" +msgstr "(由 Yurii Karabas 在 :issue:`42345` 中贡献。)" + +#: ../../whatsnew/3.9.rst:1538 +msgid "macOS 11.0 (Big Sur) and Apple Silicon Mac support" +msgstr "macOS 11.0 (Big Sur) 与 Apple Silicon Mac 支持" + +#: ../../whatsnew/3.9.rst:1540 +msgid "" +"As of 3.9.1, Python now fully supports building and running on macOS 11.0 " +"(Big Sur) and on Apple Silicon Macs (based on the ``ARM64`` architecture). A" +" new universal build variant, ``universal2``, is now available to natively " +"support both ``ARM64`` and ``Intel 64`` in one set of executables. Binaries " +"can also now be built on current versions of macOS to be deployed on a range" +" of older macOS versions (tested to 10.9) while making some newer OS " +"functions and options conditionally available based on the operating system " +"version in use at runtime (\"weaklinking\")." +msgstr "" +"对于 3.9.1 版来说,Python 现在完全支持在 macOS 11.0 (Big Sur) 和 Apple Silicon Macs (基于 " +"``ARM64`` 架构) 上构建和运行。 现在提供了一个新的通用构建类型 ``universal2``,用于在一组可执行文件上原生支持 " +"``ARM64`` 和 ``Intel 64``。 二进制文件现在也可以在当前版本的 macOS 上编译以部署到多种较旧的 macOS 版本上 (已测试" +" 10.9),同时会基于运行时所使用的操作系统版本让某些较新的 OS 功能和选项有条件地可用 (\"弱链接\") 。" + +#: ../../whatsnew/3.9.rst:1549 +msgid "" +"(Contributed by Ronald Oussoren and Lawrence D'Anna in :issue:`41100`.)" +msgstr "(由 Ronald Oussoren 和 Lawrence D'Anna 在 :issue:`41100` 中贡献。)" + +#: ../../whatsnew/3.9.rst:1552 +msgid "Notable changes in Python 3.9.2" +msgstr "Python 3.9.2 中的重要变化" + +#: ../../whatsnew/3.9.rst:1555 +msgid "collections.abc" +msgstr "collections.abc" + +#: ../../whatsnew/3.9.rst:1557 +msgid "" +":class:`collections.abc.Callable` generic now flattens type parameters, " +"similar to what :data:`typing.Callable` currently does. This means that " +"``collections.abc.Callable[[int, str], str]`` will have ``__args__`` of " +"``(int, str, str)``; previously this was ``([int, str], str)``. To allow " +"this change, :class:`types.GenericAlias` can now be subclassed, and a " +"subclass will be returned when subscripting the " +":class:`collections.abc.Callable` type. Code which accesses the arguments " +"via :func:`typing.get_args` or ``__args__`` need to account for this change." +" A :exc:`DeprecationWarning` may be emitted for invalid forms of " +"parameterizing :class:`collections.abc.Callable` which may have passed " +"silently in Python 3.9.1. This :exc:`DeprecationWarning` will become a " +":exc:`TypeError` in Python 3.10. (Contributed by Ken Jin in :issue:`42195`.)" +msgstr "" +"现在 :class:`collections.abc.Callable` 泛型会将类型形参展平,类似于 :data:`typing.Callable` " +"当前所做的那样。 这意味着 ``collections.abc.Callable[[int, str], str]`` 的 ``__args__`` " +"将为 ``(int, str, str)``;之前则为 ``([int, str], str)``。 " +"为了允许这个改变,:class:`types.GenericAlias` 现在可以被子类化,并且在抽取 " +":class:`collections.abc.Callable` 类型时将返回一个子类。 通过 :func:`typing.get_args` 或 " +"``__args__`` 访问参数的代码需要考虑到这个改变。 对于无效的 :class:`collections.abc.Callable` " +"参数化形式可能会发出 :exc:`DeprecationWarning`,这在 Python 3.9.1 中可能会静默地传递。 这个 " +":exc:`DeprecationWarning` 将在 Python 3.10 中变为 :exc:`TypeError`。 (由 Ken Jin 在 " +":issue:`42195` 中贡献。)" + +#: ../../whatsnew/3.9.rst:1571 ../../whatsnew/3.9.rst:1596 +msgid "urllib.parse" +msgstr "urllib.parse" + +#: ../../whatsnew/3.9.rst:1573 +msgid "" +"Earlier Python versions allowed using both ``;`` and ``&`` as query " +"parameter separators in :func:`urllib.parse.parse_qs` and " +":func:`urllib.parse.parse_qsl`. Due to security concerns, and to conform " +"with newer W3C recommendations, this has been changed to allow only a single" +" separator key, with ``&`` as the default. This change also affects " +":func:`cgi.parse` and :func:`cgi.parse_multipart` as they use the affected " +"functions internally. For more details, please see their respective " +"documentation. (Contributed by Adam Goldschmidt, Senthil Kumaran and Ken Jin" +" in :issue:`42967`.)" +msgstr "" +"早先的 Python 版本允许使用 ``;`` 和 ``&`` 作为 :func:`urllib.parse.parse_qs` 和 " +":func:`urllib.parse.parse_qsl` 中 query 形参的分隔键。 出于安全考虑,也为了遵循更新的 W3C " +"推荐设置,这已被改为只允许单个分隔键,默认为 ``&``。 这一改变还会影响 :func:`cgi.parse` 和 " +":func:`cgi.parse_multipart` 因为它们在内部使用了受影响的函数。 要了解更多细节,请查看它们各自的文档。 (由 Adam " +"Goldschmidt, Senthil Kumaran 和 Ken Jin 在 :issue:`42967` 中贡献。)" + +#: ../../whatsnew/3.9.rst:1584 +msgid "Notable changes in Python 3.9.3" +msgstr "Python 3.9.3 中的重要变化" + +#: ../../whatsnew/3.9.rst:1586 +msgid "" +"A security fix alters the :class:`ftplib.FTP` behavior to not trust the IPv4" +" address sent from the remote server when setting up a passive data channel." +" We reuse the ftp server IP address instead. For unusual code requiring " +"the old behavior, set a ``trust_server_pasv_ipv4_address`` attribute on your" +" FTP instance to ``True``. (See :issue:`43285`)" +msgstr "" +"新的安全修正将A security fix alters the :class:`ftplib.FTP` " +"的行为改成当设置被动数据通道时不信任远程服务器所发送的 IPv4 地址。 我们会改为重用 FTP 服务器的 IP 地址。 " +"对于需要原先行为的不常见代码,请在你的 FTP 实例上设置 ``trust_server_pasv_ipv4_address`` 属性为 " +"``True``。 (参见 :issue:`43285`)" + +#: ../../whatsnew/3.9.rst:1593 +msgid "Notable changes in Python 3.9.5" +msgstr "Python 3.9.5 中的重要变化" + +#: ../../whatsnew/3.9.rst:1598 +msgid "" +"The presence of newline or tab characters in parts of a URL allows for some " +"forms of attacks. Following the WHATWG specification that updates " +":rfc:`3986`, ASCII newline ``\\n``, ``\\r`` and tab ``\\t`` characters are " +"stripped from the URL by the parser in :mod:`urllib.parse` preventing such " +"attacks. The removal characters are controlled by a new module level " +"variable ``urllib.parse._UNSAFE_URL_BYTES_TO_REMOVE``. (See :issue:`43882`)" +msgstr "" +"在 URL 中存在换行符或制表符,可能会导致某些形式的攻击。根据 WHATWG 的规范更新了:rfc:`3986`, " +":mod:`urllib.parse` 中的解析器将从 URL 中移除 ASCII 换行符 ``\\n`` 、``\\r`` 和 " +"``\\t``字符,以防止这种攻击。将移除的字符由一个新的模块级变量``urllib.parse._UNSAFE_URL_BYTES_TO_REMOVE``" +" 控制。(参阅 :issue:`43882` )" + +#: ../../whatsnew/3.9.rst:1606 +msgid "Notable security feature in 3.9.14" +msgstr "3.9.14 中的重要安全特性" + +#: ../../whatsnew/3.9.rst:1608 +msgid "" +"Converting between :class:`int` and :class:`str` in bases other than 2 " +"(binary), 4, 8 (octal), 16 (hexadecimal), or 32 such as base 10 (decimal) " +"now raises a :exc:`ValueError` if the number of digits in string form is " +"above a limit to avoid potential denial of service attacks due to the " +"algorithmic complexity. This is a mitigation for `CVE-2020-10735 " +"`_. This " +"limit can be configured or disabled by environment variable, command line " +"flag, or :mod:`sys` APIs. See the :ref:`integer string conversion length " +"limitation ` documentation. The default limit is 4300 " +"digits in string form." +msgstr "" +"使用十进制以外的底,如 2(二进制)、4、8(八进制)、16(十六进制)、32 以外作为基数在 :class:`int` 和 :class:`str`" +" 之间进行转换,如果字符串形式的数字数量超过一个限制,会抛出 :exc:`ValueError`,以避免因算法复杂而导致的潜在拒绝服务攻击。这是对 " +"`CVE-2020-10735 `_ 的缓解方案。这个限制可以通过环境变量、命令行旗标或 :mod:`sys` " +"API 进行配置或禁用。参见 :ref:`integer string conversion length limitation " +"` 文档。默认限制是字符串形式的 4300 位数字。" + +#: ../../whatsnew/3.9.rst:1620 +msgid "Notable Changes in 3.9.17" +msgstr "" + +#: ../../whatsnew/3.9.rst:1623 +msgid "tarfile" +msgstr "tarfile" + +#: ../../whatsnew/3.9.rst:1625 +msgid "" +"The extraction methods in :mod:`tarfile`, and :func:`shutil.unpack_archive`," +" have a new a *filter* argument that allows limiting tar features than may " +"be surprising or dangerous, such as creating files outside the destination " +"directory. See :ref:`tarfile-extraction-filter` for details. In Python 3.12," +" use without the *filter* argument will show a :exc:`DeprecationWarning`. In" +" Python 3.14, the default will switch to ``'data'``. (Contributed by Petr " +"Viktorin in :pep:`706`.)" +msgstr "" +":mod:`tarfile` 中的提取方法和 :func:`shutil.unpack_archive` 都新增了 *filter* " +"参数以允许限制可能令人意外或危险的 tar 特性,例如在目标目录之外创建文件。 相关细节参见 :ref:`tarfile-extraction-" +"filter`。 在 Python 3.12 中,不带 *filter* 参数的用法将显示 :exc:`DeprecationWarning`。 在 " +"Python 3.14 中,默认值将切换为 ``'data'``。 (由 Petr Viktorin 在 :pep:`706` 中贡献。)" + +#: ../../whatsnew/3.9.rst:1636 +msgid "Notable changes in 3.9.20" +msgstr "" + +#: ../../whatsnew/3.9.rst:1641 +msgid "" +"Fixed ``is_global`` and ``is_private`` behavior in ``IPv4Address``, " +"``IPv6Address``, ``IPv4Network`` and ``IPv6Network``." +msgstr "" +"修正了 ``IPv4Address``, ``IPv6Address``, ``IPv4Network`` 和 ``IPv6Network`` 中的 " +"``is_global`` 和 ``is_private`` 行为。" + +#: ../../whatsnew/3.9.rst:1645 +msgid "email" +msgstr "email" + +#: ../../whatsnew/3.9.rst:1647 +msgid "Headers with embedded newlines are now quoted on output." +msgstr "带有嵌入的换行符的标头现在输出时会加引号。" + +#: ../../whatsnew/3.9.rst:1649 +msgid "" +"The :mod:`~email.generator` will now refuse to serialize (write) headers " +"that are improperly folded or delimited, such that they would be parsed as " +"multiple headers or joined with adjacent data. If you need to turn this " +"safety feature off, set " +":attr:`~email.policy.Policy.verify_generated_headers`. (Contributed by Bas " +"Bloemsaat and Petr Viktorin in :gh:`121650`.)" +msgstr "" +"现在 :mod:`~email.generator` 会拒绝序列化(写入)不正确地折叠或分隔的标头,例如将被解析为多个标头或与相邻数据合并的标头等。 " +"如果你需要禁用此安全特性,请设置 :attr:`~email.policy.Policy.verify_generated_headers`。 (由 " +"Bas Bloemsaat 和 Petr Viktorin 在 :gh:`121650` 中贡献。)" + +#: ../../whatsnew/3.9.rst:1656 +msgid "" +":func:`email.utils.getaddresses` and :func:`email.utils.parseaddr` now " +"return ``('', '')`` 2-tuples in more situations where invalid email " +"addresses are encountered, instead of potentially inaccurate values. An " +"optional *strict* parameter was added to these two functions: use " +"``strict=False`` to get the old behavior, accepting malformed inputs. " +"``getattr(email.utils, 'supports_strict_parsing', False)`` can be used to " +"check if the *strict* paramater is available. (Contributed by Thomas Dwyer " +"and Victor Stinner for :gh:`102988` to improve the CVE-2023-27043 fix.)" +msgstr "" diff --git a/whatsnew/changelog.po b/whatsnew/changelog.po new file mode 100644 index 000000000..ec8c165d4 --- /dev/null +++ b/whatsnew/changelog.po @@ -0,0 +1,41905 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) 2001-2025, Python Software Foundation +# This file is distributed under the same license as the Python package. +# FIRST AUTHOR , YEAR. +# +# Translators: +# cdarlint , 2024 +# isaced , 2024 +# Jack Wu , 2024 +# emrich , 2024 +# Claude Manchester , 2024 +# Xiao Wang , 2024 +# Shengjing Zhu , 2024 +# Dai Xu , 2024 +# ppcfish , 2024 +# ww song , 2024 +# Freesand Leo , 2025 +# +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: Python 3.9\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2025-04-11 16:36+0000\n" +"PO-Revision-Date: 2017-02-16 23:45+0000\n" +"Last-Translator: Freesand Leo , 2025\n" +"Language-Team: Chinese (China) (https://app.transifex.com/python-doc/teams/5390/zh_CN/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: zh_CN\n" +"Plural-Forms: nplurals=1; plural=0;\n" + +#: ../../whatsnew/changelog.rst:5 +msgid "Changelog" +msgstr "更新日志" + +#: ../../../build/NEWS:5 +msgid "Python 3.9.22 final" +msgstr "" + +#: ../../../build/NEWS:7 +msgid "*Release date: 2025-04-08*" +msgstr "*发布日期: 2025-04-08*" + +#: ../../../build/NEWS:10 ../../../build/NEWS:67 ../../../build/NEWS:120 +#: ../../../build/NEWS:203 ../../../build/NEWS:282 ../../../build/NEWS:318 +#: ../../../build/NEWS:383 ../../../build/NEWS:437 ../../../build/NEWS:487 +#: ../../../build/NEWS:1671 ../../../build/NEWS:2009 ../../../build/NEWS:2235 +#: ../../../build/NEWS:2455 ../../../build/NEWS:2618 ../../../build/NEWS:2997 +#: ../../../build/NEWS:3603 ../../../build/NEWS:3705 ../../../build/NEWS:4147 +#: ../../../build/NEWS:4500 ../../../build/NEWS:4952 ../../../build/NEWS:5458 +#: ../../../build/NEWS:6161 ../../../build/NEWS:6546 ../../../build/NEWS:8497 +#: ../../../build/NEWS:9253 ../../../build/NEWS:9797 ../../../build/NEWS:10327 +#: ../../../build/NEWS:13858 ../../../build/NEWS:14076 +#: ../../../build/NEWS:15804 ../../../build/NEWS:18255 +#: ../../../build/NEWS:19022 ../../../build/NEWS:19485 +#: ../../../build/NEWS:19512 ../../../build/NEWS:21556 +#: ../../../build/NEWS:21767 ../../../build/NEWS:22058 +#: ../../../build/NEWS:23354 ../../../build/NEWS:23413 +#: ../../../build/NEWS:23830 ../../../build/NEWS:24533 +msgid "Security" +msgstr "安全性" + +#: ../../../build/NEWS:12 +msgid ":gh:`131809`: Update bundled libexpat to 2.7.1" +msgstr "" + +#: ../../../build/NEWS:14 +msgid ":gh:`131261`: Upgrade to libexpat 2.7.0" +msgstr ":gh:`131261`: 更新至 libexpat 2.7.0" + +#: ../../../build/NEWS:16 +msgid "" +":gh:`105704`: When using :func:`urllib.parse.urlsplit` and " +":func:`urllib.parse.urlparse` host parsing would not reject domain names " +"containing square brackets (``[`` and ``]``). Square brackets are only valid" +" for IPv6 and IPvFuture hosts according to `RFC 3986 Section 3.2.2 " +"`__." +msgstr "" +":gh:`105704`: 当使用 :func:`urllib.parse.urlsplit` 和 " +":func:`urllib.parse.urlparse` 时主机解析将不会拒绝包含方括号 (``[`` 和 ``]``) 的主机名。 根据 `RFC " +"3986 第 3.2.2 节 `__方括号仅适用于 IPv6 和 IPvFuture 主机。" + +#: ../../../build/NEWS:22 +msgid "" +":gh:`121284`: Fix bug in the folding of rfc2047 encoded-words when " +"flattening an email message using a modern email policy. Previously when an " +"encoded-word was too long for a line, it would be decoded, split across " +"lines, and re-encoded. But commas and other special characters in the " +"original text could be left unencoded and unquoted. This could theoretically" +" be used to spoof header lines using a carefully constructed encoded-word if" +" the resulting rendered email was transmitted or re-parsed." +msgstr "" + +#: ../../../build/NEWS:30 +msgid "" +":gh:`119511`: Fix a potential denial of service in the :mod:`imaplib` " +"module. When connecting to a malicious server, it could cause an arbitrary " +"amount of memory to be allocated. On many systems this is harmless as unused" +" virtual memory is only a mapping, but if this hit a virtual address size " +"limit it could lead to a :exc:`MemoryError` or other process crash. On " +"unusual systems or builds where all allocated memory is touched and backed " +"by actual ram or storage it could've consumed resources doing so until " +"similarly crashing." +msgstr "" + +#: ../../../build/NEWS:40 ../../../build/NEWS:86 ../../../build/NEWS:254 +#: ../../../build/NEWS:691 ../../../build/NEWS:1014 ../../../build/NEWS:1220 +#: ../../../build/NEWS:1350 ../../../build/NEWS:1553 ../../../build/NEWS:1896 +#: ../../../build/NEWS:2122 ../../../build/NEWS:2349 ../../../build/NEWS:2549 +#: ../../../build/NEWS:2815 ../../../build/NEWS:3194 ../../../build/NEWS:3477 +#: ../../../build/NEWS:3565 ../../../build/NEWS:3671 ../../../build/NEWS:4372 +#: ../../../build/NEWS:4816 ../../../build/NEWS:5274 ../../../build/NEWS:5678 +#: ../../../build/NEWS:6102 ../../../build/NEWS:6418 ../../../build/NEWS:7762 +#: ../../../build/NEWS:9066 ../../../build/NEWS:9532 ../../../build/NEWS:10009 +#: ../../../build/NEWS:10251 ../../../build/NEWS:12437 +#: ../../../build/NEWS:13412 ../../../build/NEWS:13622 +#: ../../../build/NEWS:13772 ../../../build/NEWS:13990 +#: ../../../build/NEWS:14235 ../../../build/NEWS:14560 +#: ../../../build/NEWS:14900 ../../../build/NEWS:15383 +#: ../../../build/NEWS:15726 ../../../build/NEWS:17334 +#: ../../../build/NEWS:18088 ../../../build/NEWS:18444 +#: ../../../build/NEWS:18841 ../../../build/NEWS:19239 +#: ../../../build/NEWS:19808 ../../../build/NEWS:20128 +#: ../../../build/NEWS:20284 ../../../build/NEWS:20387 +#: ../../../build/NEWS:21746 ../../../build/NEWS:21997 +#: ../../../build/NEWS:23164 ../../../build/NEWS:23724 +#: ../../../build/NEWS:24391 ../../../build/NEWS:25117 +#: ../../../build/NEWS:25678 ../../../build/NEWS:25931 +#: ../../../build/NEWS:26130 ../../../build/NEWS:26441 +#: ../../../build/NEWS:28641 +msgid "Documentation" +msgstr "文档" + +#: ../../../build/NEWS:42 +msgid "" +":gh:`121277`: Writers of CPython's documentation can now use ``next`` as the" +" version for the ``versionchanged``, ``versionadded``, ``deprecated`` " +"directives." +msgstr "" + +#: ../../../build/NEWS:48 +msgid "Python 3.9.21 final" +msgstr "" + +#: ../../../build/NEWS:50 +msgid "*Release date: 2024-12-03*" +msgstr "*发布日期: 2024-12-03*" + +#: ../../../build/NEWS:53 ../../../build/NEWS:111 ../../../build/NEWS:536 +#: ../../../build/NEWS:738 ../../../build/NEWS:1020 ../../../build/NEWS:1240 +#: ../../../build/NEWS:1585 ../../../build/NEWS:1946 ../../../build/NEWS:2158 +#: ../../../build/NEWS:2364 ../../../build/NEWS:2565 ../../../build/NEWS:2827 +#: ../../../build/NEWS:2964 ../../../build/NEWS:3225 ../../../build/NEWS:3367 +#: ../../../build/NEWS:3497 ../../../build/NEWS:3845 ../../../build/NEWS:4091 +#: ../../../build/NEWS:4389 ../../../build/NEWS:4830 ../../../build/NEWS:5293 +#: ../../../build/NEWS:5703 ../../../build/NEWS:6432 ../../../build/NEWS:7866 +#: ../../../build/NEWS:9114 ../../../build/NEWS:9567 ../../../build/NEWS:10023 +#: ../../../build/NEWS:10262 ../../../build/NEWS:12602 +#: ../../../build/NEWS:13637 ../../../build/NEWS:13791 +#: ../../../build/NEWS:14007 ../../../build/NEWS:14259 +#: ../../../build/NEWS:14573 ../../../build/NEWS:14905 +#: ../../../build/NEWS:15389 ../../../build/NEWS:17382 +#: ../../../build/NEWS:18126 ../../../build/NEWS:18239 +#: ../../../build/NEWS:18464 ../../../build/NEWS:18854 +#: ../../../build/NEWS:19251 ../../../build/NEWS:19830 +#: ../../../build/NEWS:20141 ../../../build/NEWS:20392 +#: ../../../build/NEWS:20527 ../../../build/NEWS:20798 +#: ../../../build/NEWS:21228 ../../../build/NEWS:21501 +#: ../../../build/NEWS:21755 ../../../build/NEWS:22009 +#: ../../../build/NEWS:23182 ../../../build/NEWS:23742 +#: ../../../build/NEWS:24396 ../../../build/NEWS:24517 +#: ../../../build/NEWS:25140 ../../../build/NEWS:25702 +#: ../../../build/NEWS:25946 ../../../build/NEWS:26123 +#: ../../../build/NEWS:26432 ../../../build/NEWS:26661 +#: ../../../build/NEWS:26871 ../../../build/NEWS:28681 +msgid "Tests" +msgstr "测试" + +#: ../../../build/NEWS:55 +msgid "" +":gh:`125041`: Re-enable skipped tests for :mod:`zlib` on the s390x " +"architecture: only skip checks of the compressed bytes, which can be " +"different between zlib's software implementation and the hardware-" +"accelerated implementation." +msgstr "" + +#: ../../../build/NEWS:60 +msgid "" +":gh:`109396`: Fix ``test_socket.test_hmac_sha1()`` in FIPS mode. Use a " +"longer key: FIPS mode requires at least of at least 112 bits. The previous " +"key was only 32 bits. Patch by Victor Stinner." +msgstr "" + +#: ../../../build/NEWS:64 +msgid ":gh:`100454`: Fix SSL tests CI for OpenSSL 3.1+" +msgstr "" + +#: ../../../build/NEWS:69 +msgid ":gh:`126623`: Upgrade libexpat to 2.6.4" +msgstr "" + +#: ../../../build/NEWS:71 +msgid "" +":gh:`122792`: Changed IPv4-mapped ``ipaddress.IPv6Address`` to consistently " +"use the mapped IPv4 address value for deciding properties. Properties which " +"have their behavior fixed are ``is_multicast``, ``is_reserved``, " +"``is_link_local``, ``is_global``, and ``is_unspecified``." +msgstr "" + +#: ../../../build/NEWS:77 ../../../build/NEWS:151 ../../../build/NEWS:226 +#: ../../../build/NEWS:293 ../../../build/NEWS:353 ../../../build/NEWS:461 +#: ../../../build/NEWS:520 ../../../build/NEWS:591 ../../../build/NEWS:789 +#: ../../../build/NEWS:884 ../../../build/NEWS:1146 ../../../build/NEWS:1336 +#: ../../../build/NEWS:1411 ../../../build/NEWS:1746 ../../../build/NEWS:2039 +#: ../../../build/NEWS:2282 ../../../build/NEWS:2442 ../../../build/NEWS:2502 +#: ../../../build/NEWS:2691 ../../../build/NEWS:2928 ../../../build/NEWS:3084 +#: ../../../build/NEWS:3351 ../../../build/NEWS:3419 ../../../build/NEWS:3532 +#: ../../../build/NEWS:3648 ../../../build/NEWS:3773 ../../../build/NEWS:3937 +#: ../../../build/NEWS:4005 ../../../build/NEWS:4211 ../../../build/NEWS:4599 +#: ../../../build/NEWS:5086 ../../../build/NEWS:5546 ../../../build/NEWS:5909 +#: ../../../build/NEWS:6256 ../../../build/NEWS:6912 ../../../build/NEWS:8676 +#: ../../../build/NEWS:9340 ../../../build/NEWS:9884 ../../../build/NEWS:10178 +#: ../../../build/NEWS:10930 ../../../build/NEWS:13338 +#: ../../../build/NEWS:13371 ../../../build/NEWS:13499 +#: ../../../build/NEWS:13707 ../../../build/NEWS:13898 +#: ../../../build/NEWS:14103 ../../../build/NEWS:14401 +#: ../../../build/NEWS:14722 ../../../build/NEWS:15047 +#: ../../../build/NEWS:15637 ../../../build/NEWS:16296 +#: ../../../build/NEWS:17965 ../../../build/NEWS:18311 +#: ../../../build/NEWS:18677 ../../../build/NEWS:19001 +#: ../../../build/NEWS:19103 ../../../build/NEWS:19566 +#: ../../../build/NEWS:19953 ../../../build/NEWS:20256 +#: ../../../build/NEWS:20338 ../../../build/NEWS:20441 +#: ../../../build/NEWS:20611 ../../../build/NEWS:20946 +#: ../../../build/NEWS:21364 ../../../build/NEWS:21582 +#: ../../../build/NEWS:21819 ../../../build/NEWS:22356 +#: ../../../build/NEWS:23383 ../../../build/NEWS:23401 +#: ../../../build/NEWS:23489 ../../../build/NEWS:23970 +#: ../../../build/NEWS:24685 ../../../build/NEWS:25349 +#: ../../../build/NEWS:25787 ../../../build/NEWS:25814 +#: ../../../build/NEWS:25852 ../../../build/NEWS:25872 +#: ../../../build/NEWS:25979 ../../../build/NEWS:26073 +#: ../../../build/NEWS:26169 ../../../build/NEWS:26244 +#: ../../../build/NEWS:26502 ../../../build/NEWS:26725 +#: ../../../build/NEWS:26898 ../../../build/NEWS:27256 +msgid "Library" +msgstr "库" + +#: ../../../build/NEWS:79 +msgid "" +":gh:`124651`: Properly quote template strings in :mod:`venv` activation " +"scripts." +msgstr "" + +#: ../../../build/NEWS:82 +msgid "" +":gh:`103848`: Add checks to ensure that ``[`` bracketed ``]`` hosts found by" +" :func:`urllib.parse.urlsplit` are of IPv6 or IPvFuture format." +msgstr "" + +#: ../../../build/NEWS:88 +msgid "" +":gh:`95588`: Clarified the conflicting advice given in the :mod:`ast` " +"documentation about :func:`ast.literal_eval` being \"safe\" for use on " +"untrusted input while at the same time warning that it can crash the " +"process. The latter statement is true and is deemed unfixable without a " +"large amount of work unsuitable for a bugfix. So we keep the warning and no " +"longer claim that ``literal_eval`` is safe." +msgstr "" + +#: ../../../build/NEWS:97 +msgid "Python 3.9.20 final" +msgstr "" + +#: ../../../build/NEWS:99 +msgid "*Release date: 2024-09-06*" +msgstr "" + +#: ../../../build/NEWS:102 ../../../build/NEWS:260 ../../../build/NEWS:367 +#: ../../../build/NEWS:466 ../../../build/NEWS:759 ../../../build/NEWS:1071 +#: ../../../build/NEWS:1296 ../../../build/NEWS:1359 ../../../build/NEWS:1636 +#: ../../../build/NEWS:1981 ../../../build/NEWS:2176 ../../../build/NEWS:2381 +#: ../../../build/NEWS:2607 ../../../build/NEWS:2855 ../../../build/NEWS:3271 +#: ../../../build/NEWS:3508 ../../../build/NEWS:3574 ../../../build/NEWS:3881 +#: ../../../build/NEWS:4107 ../../../build/NEWS:4408 ../../../build/NEWS:4868 +#: ../../../build/NEWS:5326 ../../../build/NEWS:5717 ../../../build/NEWS:6497 +#: ../../../build/NEWS:8108 ../../../build/NEWS:9173 ../../../build/NEWS:9682 +#: ../../../build/NEWS:10050 ../../../build/NEWS:10295 +#: ../../../build/NEWS:12887 ../../../build/NEWS:13431 +#: ../../../build/NEWS:13814 ../../../build/NEWS:14022 +#: ../../../build/NEWS:14269 ../../../build/NEWS:14608 +#: ../../../build/NEWS:14914 ../../../build/NEWS:15449 +#: ../../../build/NEWS:17557 ../../../build/NEWS:18154 +#: ../../../build/NEWS:18485 ../../../build/NEWS:18896 +#: ../../../build/NEWS:19273 ../../../build/NEWS:19844 +#: ../../../build/NEWS:20093 ../../../build/NEWS:20223 +#: ../../../build/NEWS:20513 ../../../build/NEWS:20754 +#: ../../../build/NEWS:21284 ../../../build/NEWS:21516 +#: ../../../build/NEWS:22019 ../../../build/NEWS:23288 +#: ../../../build/NEWS:23793 ../../../build/NEWS:24427 +#: ../../../build/NEWS:25222 ../../../build/NEWS:25269 +#: ../../../build/NEWS:25726 ../../../build/NEWS:27015 +#: ../../../build/NEWS:28828 +msgid "Windows" +msgstr "Windows" + +#: ../../../build/NEWS:104 +msgid "" +":gh:`119690`: Fixes data type confusion in audit events raised by " +"``_winapi.CreateFile`` and ``_winapi.CreateNamedPipe``." +msgstr "" + +#: ../../../build/NEWS:107 +msgid "" +":gh:`116773`: Fix instances of ``<_overlapped.Overlapped object at 0xXXX> " +"still has pending operation at deallocation, the process may crash``." +msgstr "" + +#: ../../../build/NEWS:113 +msgid "" +":gh:`112769`: The tests now correctly compare zlib version when " +":const:`zlib.ZLIB_RUNTIME_VERSION` contains non-integer suffixes. For " +"example zlib-ng defines the version as ``1.3.0.zlib-ng``." +msgstr "" + +#: ../../../build/NEWS:117 +msgid ":gh:`117187`: Fix XML tests for vanilla Expat <2.6.0." +msgstr "" + +#: ../../../build/NEWS:122 +msgid ":gh:`123678`: Upgrade libexpat to 2.6.3" +msgstr "" + +#: ../../../build/NEWS:124 +msgid "" +":gh:`121957`: Fixed missing audit events around interactive use of Python, " +"now also properly firing for ``python -i``, as well as for ``python -m " +"asyncio``. The event in question is ``cpython.run_stdin``." +msgstr "" + +#: ../../../build/NEWS:128 +msgid "" +":gh:`122133`: Authenticate the socket connection for the " +"``socket.socketpair()`` fallback on platforms where ``AF_UNIX`` is not " +"available like Windows." +msgstr "" + +#: ../../../build/NEWS:132 +msgid "" +"Patch by Gregory P. Smith and Seth Larson " +". Reported by Ellie " +msgstr "" + +#: ../../../build/NEWS:135 +msgid "" +":gh:`121285`: Remove backtracking from tarfile header parsing for " +"``hdrcharset``, PAX, and GNU sparse headers." +msgstr "" + +#: ../../../build/NEWS:138 +msgid "" +":gh:`118486`: :func:`os.mkdir` on Windows now accepts *mode* of ``0o700`` to" +" restrict the new directory to the current user. This fixes CVE-2024-4030 " +"affecting :func:`tempfile.mkdtemp` in scenarios where the base temporary " +"directory is more permissive than the default." +msgstr "" + +#: ../../../build/NEWS:143 +msgid "" +":gh:`114572`: :meth:`ssl.SSLContext.cert_store_stats` and " +":meth:`ssl.SSLContext.get_ca_certs` now correctly lock access to the " +"certificate store, when the :class:`ssl.SSLContext` is shared across " +"multiple threads." +msgstr "" + +#: ../../../build/NEWS:148 +msgid ":gh:`116741`: Update bundled libexpat to 2.6.2" +msgstr "" + +#: ../../../build/NEWS:153 +msgid "" +":gh:`123270`: Applied a more surgical fix for malformed payloads in " +":class:`zipfile.Path` causing infinite loops (:gh:`122905`) without breaking" +" contents using legitimate characters." +msgstr "" + +#: ../../../build/NEWS:157 +msgid "" +":gh:`123067`: Fix quadratic complexity in parsing ``\"``-quoted cookie " +"values with backslashes by :mod:`http.cookies`." +msgstr "" + +#: ../../../build/NEWS:160 +msgid "" +":gh:`121650`: :mod:`email` headers with embedded newlines are now quoted on " +"output. The :mod:`~email.generator` will now refuse to serialize (write) " +"headers that are unsafely folded or delimited; see " +":attr:`~email.policy.Policy.verify_generated_headers`. (Contributed by Bas " +"Bloemsaat and Petr Viktorin in :gh:`121650`.)" +msgstr "" + +#: ../../../build/NEWS:166 +msgid ":gh:`113171`: Fixed various false positives and false negatives in" +msgstr "" + +#: ../../../build/NEWS:168 +msgid ":attr:`ipaddress.IPv4Address.is_private` (see these docs for details)" +msgstr "" + +#: ../../../build/NEWS:169 +msgid ":attr:`ipaddress.IPv4Address.is_global`" +msgstr "" + +#: ../../../build/NEWS:170 +msgid ":attr:`ipaddress.IPv6Address.is_private`" +msgstr "" + +#: ../../../build/NEWS:171 +msgid ":attr:`ipaddress.IPv6Address.is_global`" +msgstr "" + +#: ../../../build/NEWS:173 +msgid "" +"Also in the corresponding :class:`ipaddress.IPv4Network` and " +":class:`ipaddress.IPv6Network` attributes." +msgstr "" + +#: ../../../build/NEWS:176 +msgid "" +":gh:`102988`: :func:`email.utils.getaddresses` and " +":func:`email.utils.parseaddr` now return ``('', '')`` 2-tuples in more " +"situations where invalid email addresses are encountered instead of " +"potentially inaccurate values. Add optional *strict* parameter to these two " +"functions: use ``strict=False`` to get the old behavior, accept malformed " +"inputs. ``getattr(email.utils, 'supports_strict_parsing', False)`` can be " +"use to check if the *strict* paramater is available. Patch by Thomas Dwyer " +"and Victor Stinner to improve the CVE-2023-27043 fix." +msgstr "" + +#: ../../../build/NEWS:185 +msgid "" +":gh:`67693`: Fix :func:`urllib.parse.urlunparse` and " +":func:`urllib.parse.urlunsplit` for URIs with path starting with multiple " +"slashes and no authority. Based on patch by Ashwin Ramaswami." +msgstr "" + +#: ../../../build/NEWS:190 ../../../build/NEWS:220 ../../../build/NEWS:344 +#: ../../../build/NEWS:449 ../../../build/NEWS:510 ../../../build/NEWS:554 +#: ../../../build/NEWS:782 ../../../build/NEWS:844 ../../../build/NEWS:1110 +#: ../../../build/NEWS:1330 ../../../build/NEWS:1374 ../../../build/NEWS:1692 +#: ../../../build/NEWS:2015 ../../../build/NEWS:2271 ../../../build/NEWS:2434 +#: ../../../build/NEWS:2477 ../../../build/NEWS:2628 ../../../build/NEWS:2919 +#: ../../../build/NEWS:3012 ../../../build/NEWS:3384 ../../../build/NEWS:3526 +#: ../../../build/NEWS:3618 ../../../build/NEWS:3714 ../../../build/NEWS:3958 +#: ../../../build/NEWS:4153 ../../../build/NEWS:4515 ../../../build/NEWS:4959 +#: ../../../build/NEWS:5469 ../../../build/NEWS:5811 ../../../build/NEWS:6179 +#: ../../../build/NEWS:6595 ../../../build/NEWS:8512 ../../../build/NEWS:9271 +#: ../../../build/NEWS:9809 ../../../build/NEWS:10114 +#: ../../../build/NEWS:10376 ../../../build/NEWS:13356 +#: ../../../build/NEWS:13468 ../../../build/NEWS:13681 +#: ../../../build/NEWS:13872 ../../../build/NEWS:14082 +#: ../../../build/NEWS:14326 ../../../build/NEWS:14645 +#: ../../../build/NEWS:14949 ../../../build/NEWS:15549 +#: ../../../build/NEWS:15838 ../../../build/NEWS:17928 +#: ../../../build/NEWS:18265 ../../../build/NEWS:18582 +#: ../../../build/NEWS:19031 ../../../build/NEWS:19519 +#: ../../../build/NEWS:19861 ../../../build/NEWS:19885 +#: ../../../build/NEWS:20209 ../../../build/NEWS:20239 +#: ../../../build/NEWS:20303 ../../../build/NEWS:20417 +#: ../../../build/NEWS:20541 ../../../build/NEWS:20809 +#: ../../../build/NEWS:21318 ../../../build/NEWS:21565 +#: ../../../build/NEWS:21779 ../../../build/NEWS:22071 +#: ../../../build/NEWS:23377 ../../../build/NEWS:23438 +#: ../../../build/NEWS:23839 ../../../build/NEWS:24512 +#: ../../../build/NEWS:24555 ../../../build/NEWS:25263 +#: ../../../build/NEWS:25281 ../../../build/NEWS:25804 +#: ../../../build/NEWS:25839 ../../../build/NEWS:25867 +#: ../../../build/NEWS:25959 ../../../build/NEWS:26046 +#: ../../../build/NEWS:26151 ../../../build/NEWS:26194 +#: ../../../build/NEWS:26470 ../../../build/NEWS:26705 +#: ../../../build/NEWS:26891 ../../../build/NEWS:27030 +msgid "Core and Builtins" +msgstr "核心与内置函数" + +#: ../../../build/NEWS:192 +msgid "" +":gh:`112275`: A deadlock involving ``pystate.c``'s ``HEAD_LOCK`` in " +"``posixmodule.c`` at fork is now fixed. Patch by ChuBoning based on previous" +" Python 3.12 fix by Victor Stinner." +msgstr "" + +#: ../../../build/NEWS:198 +msgid "Python 3.9.19 final" +msgstr "" + +#: ../../../build/NEWS:200 +msgid "*Release date: 2024-03-19*" +msgstr "" + +#: ../../../build/NEWS:205 +msgid "" +":gh:`115398`: Allow controlling Expat >=2.6.0 reparse deferral " +"(CVE-2023-52425) by adding five new methods:" +msgstr "" + +#: ../../../build/NEWS:208 +msgid ":meth:`xml.etree.ElementTree.XMLParser.flush`" +msgstr ":meth:`xml.etree.ElementTree.XMLParser.flush`" + +#: ../../../build/NEWS:209 +msgid ":meth:`xml.etree.ElementTree.XMLPullParser.flush`" +msgstr ":meth:`xml.etree.ElementTree.XMLPullParser.flush`" + +#: ../../../build/NEWS:210 +msgid ":meth:`xml.parsers.expat.xmlparser.GetReparseDeferralEnabled`" +msgstr ":meth:`xml.parsers.expat.xmlparser.GetReparseDeferralEnabled`" + +#: ../../../build/NEWS:211 +msgid ":meth:`xml.parsers.expat.xmlparser.SetReparseDeferralEnabled`" +msgstr ":meth:`xml.parsers.expat.xmlparser.SetReparseDeferralEnabled`" + +#: ../../../build/NEWS:212 +msgid ":meth:`xml.sax.expatreader.ExpatParser.flush`" +msgstr "" + +#: ../../../build/NEWS:214 +msgid ":gh:`115399`: Update bundled libexpat to 2.6.0" +msgstr "" + +#: ../../../build/NEWS:216 +msgid "" +":gh:`113659`: Skip ``.pth`` files with names starting with a dot or hidden " +"file attribute." +msgstr "" + +#: ../../../build/NEWS:222 +msgid "" +":gh:`102388`: Fix a bug where ``iso2022_jp_3`` and ``iso2022_jp_2004`` " +"codecs read out of bounds" +msgstr "" + +#: ../../../build/NEWS:228 +msgid "" +":gh:`115197`: ``urllib.request`` no longer resolves the hostname before " +"checking it against the system's proxy bypass list on macOS and Windows." +msgstr "" + +#: ../../../build/NEWS:231 +msgid "" +":gh:`115133`: Fix tests for :class:`~xml.etree.ElementTree.XMLPullParser` " +"with Expat 2.6.0." +msgstr "" + +#: ../../../build/NEWS:234 +msgid "" +":gh:`81194`: Fix a crash in :func:`socket.if_indextoname` with specific " +"value (UINT_MAX). Fix an integer overflow in :func:`socket.if_indextoname` " +"on 64-bit non-Windows platforms." +msgstr "" + +#: ../../../build/NEWS:238 +msgid "" +":gh:`109858`: Protect :mod:`zipfile` from \"quoted-overlap\" zipbomb. It now" +" raises BadZipFile when try to read an entry that overlaps with other entry " +"or central directory." +msgstr "" + +#: ../../../build/NEWS:242 +msgid "" +":gh:`107077`: Seems that in some conditions, OpenSSL will return " +"``SSL_ERROR_SYSCALL`` instead of ``SSL_ERROR_SSL`` when a certification " +"verification has failed, but the error parameters will still contain " +"``ERR_LIB_SSL`` and ``SSL_R_CERTIFICATE_VERIFY_FAILED``. We are now " +"detecting this situation and raising the appropiate " +"``ssl.SSLCertVerificationError``. Patch by Pablo Galindo" +msgstr "" + +#: ../../../build/NEWS:249 +msgid "" +":gh:`91133`: Fix a bug in :class:`tempfile.TemporaryDirectory` cleanup, " +"which now no longer dereferences symlinks when working around file system " +"permission errors." +msgstr "" + +#: ../../../build/NEWS:256 +msgid "" +":gh:`115399`: Document CVE-2023-52425 of Expat <2.6.0 under \"XML " +"vulnerabilities\"." +msgstr "" + +#: ../../../build/NEWS:262 +msgid ":gh:`111239`: Update Windows builds to use zlib v1.3.1." +msgstr "" + +#: ../../../build/NEWS:264 +msgid "" +":gh:`109991`: Windows builds now use OpenSSL 1.1.1w. Note that OpenSSL 1.1 " +"has reached its end of life and no future fixes will be made, and this " +"version of Python is no longer receiving maintenance fixes and will not be " +"updated to OpenSSL 3.0." +msgstr "" + +#: ../../../build/NEWS:270 ../../../build/NEWS:300 ../../../build/NEWS:770 +#: ../../../build/NEWS:1313 ../../../build/NEWS:2212 ../../../build/NEWS:2890 +#: ../../../build/NEWS:4433 ../../../build/NEWS:4895 ../../../build/NEWS:5368 +#: ../../../build/NEWS:8351 ../../../build/NEWS:9211 ../../../build/NEWS:9750 +#: ../../../build/NEWS:10091 ../../../build/NEWS:13215 +#: ../../../build/NEWS:13837 ../../../build/NEWS:14054 +#: ../../../build/NEWS:14314 ../../../build/NEWS:14920 +#: ../../../build/NEWS:15508 ../../../build/NEWS:17821 +#: ../../../build/NEWS:18209 ../../../build/NEWS:18550 +#: ../../../build/NEWS:18973 ../../../build/NEWS:19459 +#: ../../../build/NEWS:19824 ../../../build/NEWS:20218 +#: ../../../build/NEWS:20292 ../../../build/NEWS:21277 +#: ../../../build/NEWS:21738 ../../../build/NEWS:22046 +#: ../../../build/NEWS:23306 ../../../build/NEWS:24415 +#: ../../../build/NEWS:25241 ../../../build/NEWS:25764 +#: ../../../build/NEWS:26451 ../../../build/NEWS:26670 +#: ../../../build/NEWS:26878 ../../../build/NEWS:28789 +msgid "Tools/Demos" +msgstr "工具/示例" + +#: ../../../build/NEWS:272 +msgid "" +":gh:`109991`: Update GitHub CI workflows to use OpenSSL 3.0.11 and " +"multissltests to use 1.1.1w and 3.0.11." +msgstr "" + +#: ../../../build/NEWS:277 +msgid "Python 3.9.18 final" +msgstr "" + +#: ../../../build/NEWS:279 +msgid "*Release date: 2023-08-24*" +msgstr "" + +#: ../../../build/NEWS:284 +msgid "" +":gh:`108310`: Fixed an issue where instances of :class:`ssl.SSLSocket` were " +"vulnerable to a bypass of the TLS handshake and included protections (like " +"certificate verification) and treating sent unencrypted data as if it were " +"post-handshake TLS encrypted data. Security issue reported as " +"`CVE-2023-40217 `_ by Aapo Oksman. Patch by Gregory P. " +"Smith." +msgstr "" + +#: ../../../build/NEWS:295 +msgid "" +":gh:`107845`: :func:`tarfile.data_filter` now takes the location of symlinks" +" into account when determining their target, so it will no longer reject " +"some valid tarballs with ``LinkOutsideDestinationError``." +msgstr "" + +#: ../../../build/NEWS:302 +msgid "" +":gh:`107565`: Update multissltests and GitHub CI workflows to use OpenSSL " +"1.1.1v, 3.0.10, and 3.1.2." +msgstr "" + +#: ../../../build/NEWS:306 ../../../build/NEWS:1318 ../../../build/NEWS:1657 +#: ../../../build/NEWS:2218 ../../../build/NEWS:2899 ../../../build/NEWS:3335 +#: ../../../build/NEWS:3514 ../../../build/NEWS:3691 ../../../build/NEWS:3916 +#: ../../../build/NEWS:4129 ../../../build/NEWS:4446 ../../../build/NEWS:4907 +#: ../../../build/NEWS:5380 ../../../build/NEWS:5752 ../../../build/NEWS:6140 +#: ../../../build/NEWS:6527 ../../../build/NEWS:8376 ../../../build/NEWS:9217 +#: ../../../build/NEWS:9755 ../../../build/NEWS:10098 +#: ../../../build/NEWS:13254 ../../../build/NEWS:13344 +#: ../../../build/NEWS:14060 ../../../build/NEWS:14630 +#: ../../../build/NEWS:14927 ../../../build/NEWS:15520 +#: ../../../build/NEWS:15782 ../../../build/NEWS:17852 +#: ../../../build/NEWS:18227 ../../../build/NEWS:18560 +#: ../../../build/NEWS:18980 ../../../build/NEWS:19782 +#: ../../../build/NEWS:20111 ../../../build/NEWS:20279 +#: ../../../build/NEWS:20780 ../../../build/NEWS:21219 +#: ../../../build/NEWS:21709 ../../../build/NEWS:22038 +#: ../../../build/NEWS:23327 ../../../build/NEWS:23802 +#: ../../../build/NEWS:24382 ../../../build/NEWS:26694 +#: ../../../build/NEWS:27009 ../../../build/NEWS:28612 +msgid "C API" +msgstr "C API" + +#: ../../../build/NEWS:308 +msgid "" +":gh:`99612`: Fix :c:func:`PyUnicode_DecodeUTF8Stateful` for ASCII-only data:" +" ``*consumed`` was not set." +msgstr "" + +#: ../../../build/NEWS:313 +msgid "Python 3.9.17 final" +msgstr "" + +#: ../../../build/NEWS:315 +msgid "*Release date: 2023-06-06*" +msgstr "" + +#: ../../../build/NEWS:320 +msgid "" +":gh:`103142`: The version of OpenSSL used in our binary builds has been " +"upgraded to 1.1.1u to address several CVEs." +msgstr "" + +#: ../../../build/NEWS:323 +msgid "" +":gh:`99889`: Fixed a security in flaw in :func:`uu.decode` that could allow " +"for directory traversal based on the input if no ``out_file`` was specified." +msgstr "" + +#: ../../../build/NEWS:327 +msgid "" +":gh:`104049`: Do not expose the local on-disk location in directory indexes " +"produced by :class:`http.client.SimpleHTTPRequestHandler`." +msgstr "" + +#: ../../../build/NEWS:330 +msgid "" +":gh:`102153`: :func:`urllib.parse.urlsplit` now strips leading C0 control " +"and space characters following the specification for URLs defined by WHATWG " +"in response to CVE-2023-24329. Patch by Illia Volochii." +msgstr "" + +#: ../../../build/NEWS:334 +msgid "" +":gh:`101727`: Updated the OpenSSL version used in Windows and macOS binary " +"release builds to 1.1.1t to address CVE-2023-0286, CVE-2022-4303, and " +"CVE-2022-4303 per `the OpenSSL 2023-02-07 security advisory " +"`_." +msgstr "" + +#: ../../../build/NEWS:339 +msgid "" +":gh:`101283`: :class:`subprocess.Popen` now uses a safer approach to find " +"``cmd.exe`` when launching with ``shell=True``. Patch by Eryk Sun, based on " +"a patch by Oleg Iarygin." +msgstr "" + +#: ../../../build/NEWS:346 +msgid "" +":gh:`102126`: Fix deadlock at shutdown when clearing thread states if any " +"finalizer tries to acquire the runtime head lock. Patch by Kumar Aditya." +msgstr "" + +#: ../../../build/NEWS:349 +msgid "" +":gh:`100892`: Fix race while iterating over thread states in clearing " +":class:`threading.local`. Patch by Kumar Aditya." +msgstr "" + +#: ../../../build/NEWS:355 +msgid "" +":gh:`103935`: Use :func:`io.open_code` for files to be executed instead of " +"raw :func:`open`" +msgstr "" + +#: ../../../build/NEWS:358 +msgid "" +":gh:`102953`: The extraction methods in :mod:`tarfile`, and " +":func:`shutil.unpack_archive`, have a new a *filter* argument that allows " +"limiting tar features than may be surprising or dangerous, such as creating " +"files outside the destination directory. See :ref:`tarfile-extraction-" +"filter` for details." +msgstr "" + +#: ../../../build/NEWS:364 +msgid ":gh:`101997`: Upgrade pip wheel bundled with ensurepip (pip 23.0.1)" +msgstr "" + +#: ../../../build/NEWS:369 +msgid ":gh:`100180`: Update Windows installer to OpenSSL 1.1.1s" +msgstr "" + +#: ../../../build/NEWS:372 ../../../build/NEWS:471 ../../../build/NEWS:1085 +#: ../../../build/NEWS:1305 ../../../build/NEWS:1644 ../../../build/NEWS:1992 +#: ../../../build/NEWS:2183 ../../../build/NEWS:2404 ../../../build/NEWS:2585 +#: ../../../build/NEWS:2862 ../../../build/NEWS:2975 ../../../build/NEWS:3287 +#: ../../../build/NEWS:3677 ../../../build/NEWS:3893 ../../../build/NEWS:4116 +#: ../../../build/NEWS:4420 ../../../build/NEWS:4875 ../../../build/NEWS:5349 +#: ../../../build/NEWS:6504 ../../../build/NEWS:8227 ../../../build/NEWS:9187 +#: ../../../build/NEWS:9735 ../../../build/NEWS:12997 +#: ../../../build/NEWS:13659 ../../../build/NEWS:13819 +#: ../../../build/NEWS:14031 ../../../build/NEWS:14288 +#: ../../../build/NEWS:14619 ../../../build/NEWS:15464 +#: ../../../build/NEWS:18159 ../../../build/NEWS:18510 +#: ../../../build/NEWS:18905 +msgid "macOS" +msgstr "macOS" + +#: ../../../build/NEWS:374 +msgid ":gh:`103142`: Update macOS installer to use OpenSSL 1.1.1u." +msgstr "" + +#: ../../../build/NEWS:378 +msgid "Python 3.9.16 final" +msgstr "" + +#: ../../../build/NEWS:380 +msgid "*Release date: 2022-12-06*" +msgstr "" + +#: ../../../build/NEWS:385 +msgid "" +":gh:`100001`: ``python -m http.server`` no longer allows terminal control " +"characters sent within a garbage request to be printed to the stderr server " +"log." +msgstr "" + +#: ../../../build/NEWS:389 +msgid "" +"This is done by changing the :mod:`http.server` " +":class:`BaseHTTPRequestHandler` ``.log_message`` method to replace control " +"characters with a ``\\xHH`` hex escape before printing." +msgstr "" + +#: ../../../build/NEWS:393 +msgid "" +":gh:`87604`: Avoid publishing list of active per-interpreter audit hooks via" +" the :mod:`gc` module" +msgstr "" + +#: ../../../build/NEWS:396 +msgid "" +":gh:`98433`: The IDNA codec decoder used on DNS hostnames by :mod:`socket` " +"or :mod:`asyncio` related name resolution functions no longer involves a " +"quadratic algorithm. This prevents a potential CPU denial of service if an " +"out-of-spec excessive length hostname involving bidirectional characters " +"were decoded. Some protocols such as :mod:`urllib` http ``3xx`` redirects " +"potentially allow for an attacker to supply such a name." +msgstr "" + +#: ../../../build/NEWS:403 +msgid ":gh:`98739`: Update bundled libexpat to 2.5.0" +msgstr "" + +#: ../../../build/NEWS:405 +msgid "" +":gh:`98517`: Port XKCP's fix for the buffer overflows in SHA-3 " +"(CVE-2022-37454)." +msgstr "" + +#: ../../../build/NEWS:408 +msgid "" +":gh:`97514`: On Linux the :mod:`multiprocessing` module returns to using " +"filesystem backed unix domain sockets for communication with the " +"*forkserver* process instead of the Linux abstract socket namespace. Only " +"code that chooses to use the :ref:`\"forkserver\" start method " +"` is affected." +msgstr "" + +#: ../../../build/NEWS:414 +msgid "" +"Abstract sockets have no permissions and could allow any user on the system " +"in the same `network namespace `_ (often the whole system) to inject " +"code into the multiprocessing *forkserver* process. This was a potential " +"privilege escalation. Filesystem based socket permissions restrict this to " +"the *forkserver* process user as was the default in Python 3.8 and earlier." +msgstr "" + +#: ../../../build/NEWS:422 +msgid "" +"This prevents Linux `CVE-2022-42919 `_." +msgstr "" + +#: ../../../build/NEWS:425 +msgid "" +":gh:`68966`: The deprecated mailcap module now refuses to inject unsafe text" +" (filenames, MIME types, parameters) into shell commands. Instead of using " +"such text, it will warn and act as if a match was not found (or for test " +"commands, as if the test failed)." +msgstr "" + +#: ../../../build/NEWS:432 +msgid "Python 3.9.15 final" +msgstr "" + +#: ../../../build/NEWS:434 +msgid "*Release date: 2022-10-11*" +msgstr "" + +#: ../../../build/NEWS:439 +msgid "" +":gh:`97616`: Fix multiplying a list by an integer (``list *= int``): detect " +"the integer overflow when the new allocated length is close to the maximum " +"size. Issue reported by Jordan Limor. Patch by Victor Stinner." +msgstr "" + +#: ../../../build/NEWS:443 +msgid "" +":gh:`97612`: Fix a shell code injection vulnerability in the ``get-remote-" +"certificate.py`` example script. The script no longer uses a shell to run " +"``openssl`` commands. Issue reported and initial fix by Caleb Shortt. Patch " +"by Victor Stinner." +msgstr "" + +#: ../../../build/NEWS:451 +msgid "" +":gh:`96848`: Fix command line parsing: reject :option:`-X int_max_str_digits" +" <-X>` option with no value (invalid) when the " +":envvar:`PYTHONINTMAXSTRDIGITS` environment variable is set to a valid " +"limit. Patch by Victor Stinner." +msgstr "" + +#: ../../../build/NEWS:456 +msgid "" +":gh:`95778`: When :exc:`ValueError` is raised if an integer is larger than " +"the limit, mention the :func:`sys.set_int_max_str_digits` function in the " +"error message. Patch by Victor Stinner." +msgstr "" + +#: ../../../build/NEWS:463 +msgid ":gh:`97005`: Update bundled libexpat to 2.4.9" +msgstr "" + +#: ../../../build/NEWS:468 +msgid ":gh:`96577`: Fixes a potential buffer overrun in :mod:`msilib`." +msgstr "" + +#: ../../../build/NEWS:473 +msgid "" +":gh:`97897`: The macOS 13 SDK includes support for the ``mkfifoat`` and " +"``mknodat`` system calls. Using the ``dir_fd`` option with either " +":func:`os.mkfifo` or :func:`os.mknod` could result in a segfault if cpython " +"is built with the macOS 13 SDK but run on an earlier version of macOS. " +"Prevent this by adding runtime support for detection of these system calls " +"(\"weaklinking\") as is done for other newer syscalls on macOS." +msgstr "" + +#: ../../../build/NEWS:482 +msgid "Python 3.9.14 final" +msgstr "" + +#: ../../../build/NEWS:484 +msgid "*Release date: 2022-09-06*" +msgstr "" + +#: ../../../build/NEWS:489 +msgid "" +":gh:`95778`: Converting between :class:`int` and :class:`str` in bases other" +" than 2 (binary), 4, 8 (octal), 16 (hexadecimal), or 32 such as base 10 " +"(decimal) now raises a :exc:`ValueError` if the number of digits in string " +"form is above a limit to avoid potential denial of service attacks due to " +"the algorithmic complexity. This is a mitigation for `CVE-2020-10735 " +"`_." +msgstr "" + +#: ../../../build/NEWS:496 +msgid "" +"This new limit can be configured or disabled by environment variable, " +"command line flag, or :mod:`sys` APIs. See the :ref:`integer string " +"conversion length limitation ` documentation. The " +"default limit is 4300 digits in string form." +msgstr "" + +#: ../../../build/NEWS:501 +msgid "" +"Patch by Gregory P. Smith [Google] and Christian Heimes [Red Hat] with " +"feedback from Victor Stinner, Thomas Wouters, Steve Dower, Ned Deily, and " +"Mark Dickinson." +msgstr "" + +#: ../../../build/NEWS:505 +msgid "" +":gh:`87389`: :mod:`http.server`: Fix an open redirection vulnerability in " +"the HTTP server when an URI path starts with ``//``. Vulnerability " +"discovered, and initial fix proposed, by Hamza Avvan." +msgstr "" + +#: ../../../build/NEWS:512 +msgid "" +":gh:`93065`: Fix contextvars HAMT implementation to handle iteration over " +"deep trees." +msgstr "" + +#: ../../../build/NEWS:515 +msgid "" +"The bug was discovered and fixed by Eli Libman. See " +"`MagicStack/immutables#84 " +"`_ for more details." +msgstr "" + +#: ../../../build/NEWS:522 +msgid "" +":gh:`94821`: Fix binding of unix socket to empty address on Linux to use an " +"available address from the abstract namespace, instead of \"\\0\"." +msgstr "" + +#: ../../../build/NEWS:525 +msgid "" +":gh:`91810`: Suppress writing an XML declaration in open files in " +"``ElementTree.write()`` with ``encoding='unicode'`` and " +"``xml_declaration=None``." +msgstr "" + +#: ../../../build/NEWS:529 +msgid "" +":issue:`45393`: Fix the formatting for ``await x`` and ``not x`` in the " +"operator precedence table when using the :func:`help` system." +msgstr "" + +#: ../../../build/NEWS:532 +msgid "" +":issue:`46197`: Fix :mod:`ensurepip` environment isolation for subprocess " +"running ``pip``." +msgstr "" + +#: ../../../build/NEWS:538 +msgid "" +":gh:`95280`: Fix problem with ``test_ssl`` ``test_get_ciphers`` on systems " +"that require perfect forward secrecy (PFS) ciphers." +msgstr "" + +#: ../../../build/NEWS:541 +msgid "" +":gh:`94208`: ``test_ssl`` is now checking for supported TLS version and " +"protocols in more tests." +msgstr "" + +#: ../../../build/NEWS:544 +msgid "" +":issue:`47016`: Create a GitHub Actions workflow for verifying bundled pip " +"and setuptools. Patch by Illia Volochii and Adam Turner." +msgstr "" + +#: ../../../build/NEWS:549 +msgid "Python 3.9.13 final" +msgstr "" + +#: ../../../build/NEWS:551 +msgid "*Release date: 2022-05-17*" +msgstr "" + +#: ../../../build/NEWS:556 +msgid "" +":gh:`92311`: Fixed a bug where setting ``frame.f_lineno`` to jump over a " +"list comprehension could misbehave or crash." +msgstr "" + +#: ../../../build/NEWS:559 +msgid "" +":gh:`92112`: Fix crash triggered by an evil custom ``mro()`` on a metaclass." +msgstr "" + +#: ../../../build/NEWS:561 +msgid "" +":gh:`92036`: Fix a crash in subinterpreters related to the garbage " +"collector. When a subinterpreter is deleted, untrack all objects tracked by " +"its GC. To prevent a crash in deallocator functions expecting objects to be " +"tracked by the GC, leak a strong reference to these objects on purpose, so " +"they are never deleted and their deallocator functions are not called. Patch" +" by Victor Stinner." +msgstr "" + +#: ../../../build/NEWS:568 +msgid ":gh:`91421`: Fix a potential integer overflow in _Py_DecodeUTF8Ex." +msgstr "" + +#: ../../../build/NEWS:570 +msgid "" +":issue:`46775`: Some Windows system error codes(>= 10000) are now mapped " +"into the correct errno and may now raise a subclass of :exc:`OSError`. Patch" +" by Dong-hee Na." +msgstr "" + +#: ../../../build/NEWS:574 +msgid "" +":issue:`46962`: Classes and functions that unconditionally declared their " +"docstrings ignoring the `--without-doc-strings` compilation flag no longer " +"do so." +msgstr "" + +#: ../../../build/NEWS:578 +msgid "" +"The classes affected are :class:`pickle.PickleBuffer`, " +":class:`testcapi.RecursingInfinitelyError`, and :class:`types.GenericAlias`." +msgstr "" + +#: ../../../build/NEWS:582 +msgid "The functions affected are 24 methods in :mod:`ctypes`." +msgstr "" + +#: ../../../build/NEWS:584 +msgid "Patch by Oleg Iarygin." +msgstr "" + +#: ../../../build/NEWS:586 +msgid "" +":issue:`36819`: Fix crashes in built-in encoders with error handlers that " +"return position less or equal than the starting position of non-encodable " +"characters." +msgstr "" + +#: ../../../build/NEWS:593 +msgid "" +":gh:`91581`: :meth:`~datetime.datetime.utcfromtimestamp` no longer attempts " +"to resolve ``fold`` in the pure Python implementation, since the fold is " +"never 1 in UTC. In addition to being slightly faster in the common case, " +"this also prevents some errors when the timestamp is close to " +":attr:`datetime.min `. Patch by Paul Ganssle." +msgstr "" + +#: ../../../build/NEWS:599 +msgid "" +":gh:`92530`: Fix an issue that occurred after interrupting " +":func:`threading.Condition.notify`." +msgstr "" + +#: ../../../build/NEWS:602 +msgid "" +":gh:`92049`: Forbid pickling constants ``re._constants.SUCCESS`` etc. " +"Previously, pickling did not fail, but the result could not be unpickled." +msgstr "" + +#: ../../../build/NEWS:605 +msgid "" +":issue:`47029`: Always close the read end of the pipe used by " +":class:`multiprocessing.Queue` *after* the last write of buffered data to " +"the write end of the pipe to avoid :exc:`BrokenPipeError` at garbage " +"collection and at :meth:`multiprocessing.Queue.close` calls. Patch by Géry " +"Ogam." +msgstr "" + +#: ../../../build/NEWS:611 +msgid "" +":gh:`91910`: Add missing f prefix to f-strings in error messages from the " +":mod:`multiprocessing` and :mod:`asyncio` modules." +msgstr "" + +#: ../../../build/NEWS:614 +msgid "" +":gh:`91810`: :class:`~xml.etree.ElementTree.ElementTree` method " +":meth:`~xml.etree.ElementTree.ElementTree.write` and function " +":func:`~xml.etree.ElementTree.tostring` now use the text file's encoding " +"(\"UTF-8\" if not available) instead of locale encoding in XML declaration " +"when ``encoding=\"unicode\"`` is specified." +msgstr "" + +#: ../../../build/NEWS:620 +msgid "" +":gh:`91832`: Add ``required`` attribute to :class:`argparse.Action` repr " +"output." +msgstr "" + +#: ../../../build/NEWS:623 +msgid ":gh:`91734`: Fix OSS audio support on Solaris." +msgstr "" + +#: ../../../build/NEWS:625 +msgid "" +":gh:`91700`: Compilation of regular expression containing a conditional " +"expression ``(?(group)...)`` now raises an appropriate :exc:`re.error` if " +"the group number refers to not defined group. Previously an internal " +"RuntimeError was raised." +msgstr "" + +#: ../../../build/NEWS:630 +msgid "" +":gh:`91676`: Fix :class:`unittest.IsolatedAsyncioTestCase` to shutdown the " +"per test event loop executor before returning from its ``run`` method so " +"that a not yet stopped or garbage collected executor state does not persist " +"beyond the test." +msgstr "" + +#: ../../../build/NEWS:635 +msgid "" +":gh:`90568`: Parsing ``\\N`` escapes of Unicode Named Character Sequences in" +" a :mod:`regular expression ` raises now :exc:`re.error` instead of " +"``TypeError``." +msgstr "" + +#: ../../../build/NEWS:639 +msgid "" +":gh:`91595`: Fix the comparison of character and integer inside " +":func:`Tools.gdb.libpython.write_repr`. Patch by Yu Liu." +msgstr "" + +#: ../../../build/NEWS:642 +msgid "" +":gh:`90622`: Worker processes for " +":class:`concurrent.futures.ProcessPoolExecutor` are no longer spawned on " +"demand (a feature added in 3.9) when the multiprocessing context start " +"method is ``\"fork\"`` as that can lead to deadlocks in the child processes " +"due to a fork happening while threads are running." +msgstr "" + +#: ../../../build/NEWS:648 +msgid "" +":gh:`91575`: Update case-insensitive matching in the :mod:`re` module to the" +" latest Unicode version." +msgstr "" + +#: ../../../build/NEWS:651 +msgid "" +":gh:`91581`: Remove an unhandled error case in the C implementation of calls" +" to :meth:`datetime.fromtimestamp ` with no" +" time zone (i.e. getting a local time from an epoch timestamp). This should " +"have no user-facing effect other than giving a possibly more accurate error " +"message when called with timestamps that fall on 10000-01-01 in the local " +"time. Patch by Paul Ganssle." +msgstr "" + +#: ../../../build/NEWS:658 +msgid "" +":issue:`34480`: Fix a bug where :mod:`_markupbase` raised an " +":exc:`UnboundLocalError` when an invalid keyword was found in marked " +"section. Patch by Marek Suscak." +msgstr "" + +#: ../../../build/NEWS:662 +msgid "" +":issue:`27929`: Fix :meth:`asyncio.loop.sock_connect` to only resolve names " +"for :const:`socket.AF_INET` or :const:`socket.AF_INET6` families. Resolution" +" may not make sense for other families, like :const:`socket.AF_BLUETOOTH` " +"and :const:`socket.AF_UNIX`." +msgstr "" + +#: ../../../build/NEWS:667 +msgid "" +":issue:`43323`: Fix errors in the :mod:`email` module if the charset itself " +"contains undecodable/unencodable characters." +msgstr "" + +#: ../../../build/NEWS:670 +msgid "" +":issue:`46787`: Fix :class:`concurrent.futures.ProcessPoolExecutor` " +"exception memory leak" +msgstr "" + +#: ../../../build/NEWS:673 +msgid "" +":issue:`46415`: Fix ipaddress.ip_{address,interface,network} raising " +"TypeError instead of ValueError if given invalid tuple as address parameter." +msgstr "" + +#: ../../../build/NEWS:676 +msgid "" +":issue:`44911`: :class:`~unittest.IsolatedAsyncioTestCase` will no longer " +"throw an exception while cancelling leaked tasks. Patch by Bar Harel." +msgstr "" + +#: ../../../build/NEWS:679 +msgid ":issue:`44493`: Add missing terminated NUL in sockaddr_un's length" +msgstr "" + +#: ../../../build/NEWS:681 +msgid "" +"This was potentially observable when using non-abstract AF_UNIX datagram " +"sockets to processes written in another programming language." +msgstr "" + +#: ../../../build/NEWS:684 +msgid "" +":issue:`42627`: Fix incorrect parsing of Windows registry proxy settings" +msgstr "" + +#: ../../../build/NEWS:686 +msgid "" +":issue:`36073`: Raise :exc:`~sqlite3.ProgrammingError` instead of " +"segfaulting on recursive usage of cursors in :mod:`sqlite3` converters. " +"Patch by Sergey Fedoseev." +msgstr "" + +#: ../../../build/NEWS:693 +msgid "" +":gh:`91888`: Add a new ``gh`` role to the documentation to link to GitHub " +"issues." +msgstr "" + +#: ../../../build/NEWS:696 +msgid "" +":gh:`91783`: Document security issues concerning the use of the function " +":meth:`shutil.unpack_archive`" +msgstr "" + +#: ../../../build/NEWS:699 +msgid ":gh:`91547`: Remove \"Undocumented modules\" page." +msgstr "" + +#: ../../../build/NEWS:701 +msgid "" +":issue:`44347`: Clarify the meaning of *dirs_exist_ok*, a kwarg of " +":func:`shutil.copytree`." +msgstr "" + +#: ../../../build/NEWS:704 +msgid "" +":issue:`38668`: Update the introduction to documentation for :mod:`os.path` " +"to remove warnings that became irrelevant after the implementations of " +":pep:`383` and :pep:`529`." +msgstr "" + +#: ../../../build/NEWS:708 +msgid "" +":issue:`47138`: Pin Jinja to a version compatible with Sphinx version 2.4.4." +msgstr "" + +#: ../../../build/NEWS:710 +msgid "" +":issue:`46962`: All docstrings in code snippets are now wrapped into " +":func:`PyDoc_STR` to follow the guideline of `PEP 7's Documentation Strings " +"paragraph `_. Patch by Oleg Iarygin." +msgstr "" + +#: ../../../build/NEWS:716 +msgid "" +":issue:`26792`: Improve the docstrings of :func:`runpy.run_module` and " +":func:`runpy.run_path`. Original patch by Andrew Brezovsky." +msgstr "" + +#: ../../../build/NEWS:719 +msgid "" +":issue:`45790`: Adjust inaccurate phrasing in " +":doc:`../extending/newtypes_tutorial` about the ``ob_base`` field and the " +"macros used to access its contents." +msgstr "" + +#: ../../../build/NEWS:723 +msgid "" +":issue:`42340`: Document that in some circumstances :exc:`KeyboardInterrupt`" +" may cause the code to enter an inconsistent state. Provided a sample " +"workaround to avoid it if needed." +msgstr "" + +#: ../../../build/NEWS:727 +msgid "" +":issue:`41233`: Link the errnos referenced in ``Doc/library/exceptions.rst``" +" to their respective section in ``Doc/library/errno.rst``, and vice versa. " +"Previously this was only done for EINTR and InterruptedError. Patch by Yan " +"\"yyyyyyyan\" Orestes." +msgstr "" + +#: ../../../build/NEWS:732 +msgid "" +":issue:`38056`: Overhaul the :ref:`error-handlers` documentation in " +":mod:`codecs`." +msgstr "" + +#: ../../../build/NEWS:735 +msgid ":issue:`13553`: Document tkinter.Tk args." +msgstr "" + +#: ../../../build/NEWS:740 +msgid "" +":gh:`91607`: Fix ``test_concurrent_futures`` to test the correct " +"multiprocessing start method context in several cases where the test logic " +"mixed this up." +msgstr "" + +#: ../../../build/NEWS:744 +msgid "" +":issue:`47205`: Skip test for :func:`~os.sched_getaffinity` and " +":func:`~os.sched_setaffinity` error case on FreeBSD." +msgstr "" + +#: ../../../build/NEWS:747 +msgid "" +":issue:`29890`: Add tests for :class:`ipaddress.IPv4Interface` and " +":class:`ipaddress.IPv6Interface` construction with tuple arguments. Original" +" patch and tests by louisom." +msgstr "" + +#: ../../../build/NEWS:752 ../../../build/NEWS:1052 ../../../build/NEWS:1267 +#: ../../../build/NEWS:1616 ../../../build/NEWS:1973 ../../../build/NEWS:2170 +#: ../../../build/NEWS:2577 ../../../build/NEWS:2836 ../../../build/NEWS:3253 +#: ../../../build/NEWS:3372 ../../../build/NEWS:3502 ../../../build/NEWS:3876 +#: ../../../build/NEWS:3945 ../../../build/NEWS:4097 ../../../build/NEWS:4398 +#: ../../../build/NEWS:4856 ../../../build/NEWS:5309 ../../../build/NEWS:5712 +#: ../../../build/NEWS:6116 ../../../build/NEWS:6487 ../../../build/NEWS:8036 +#: ../../../build/NEWS:9150 ../../../build/NEWS:9621 ../../../build/NEWS:10036 +#: ../../../build/NEWS:12769 ../../../build/NEWS:13424 +#: ../../../build/NEWS:13646 ../../../build/NEWS:13797 +#: ../../../build/NEWS:14017 ../../../build/NEWS:14264 +#: ../../../build/NEWS:14593 ../../../build/NEWS:15416 +#: ../../../build/NEWS:15736 ../../../build/NEWS:17445 +#: ../../../build/NEWS:18134 ../../../build/NEWS:18244 +#: ../../../build/NEWS:18479 ../../../build/NEWS:18871 +#: ../../../build/NEWS:19007 ../../../build/NEWS:19267 +#: ../../../build/NEWS:19788 ../../../build/NEWS:19872 +#: ../../../build/NEWS:20163 ../../../build/NEWS:20228 +#: ../../../build/NEWS:20400 ../../../build/NEWS:20518 +#: ../../../build/NEWS:20787 ../../../build/NEWS:21242 +#: ../../../build/NEWS:21528 ../../../build/NEWS:21716 +#: ../../../build/NEWS:22029 ../../../build/NEWS:23225 +#: ../../../build/NEWS:23780 ../../../build/NEWS:24442 +#: ../../../build/NEWS:25163 ../../../build/NEWS:25715 +#: ../../../build/NEWS:25775 ../../../build/NEWS:25792 +#: ../../../build/NEWS:26034 ../../../build/NEWS:26139 +#: ../../../build/NEWS:26652 ../../../build/NEWS:26866 +#: ../../../build/NEWS:27001 ../../../build/NEWS:28532 +msgid "Build" +msgstr "构建" + +#: ../../../build/NEWS:754 +msgid "" +":issue:`47103`: Windows ``PGInstrument`` builds now copy a required DLL into" +" the output directory, making it easier to run the profile stage of a PGO " +"build." +msgstr "" + +#: ../../../build/NEWS:761 +msgid ":issue:`47194`: Update ``zlib`` to v1.2.12 to resolve CVE-2018-25032." +msgstr "" + +#: ../../../build/NEWS:763 +msgid "" +":issue:`46785`: Fix race condition between :func:`os.stat` and unlinking a " +"file on Windows, by using errors codes returned by ``FindFirstFileW()`` when" +" appropriate in ``win32_xstat_impl``." +msgstr "" + +#: ../../../build/NEWS:767 +msgid ":issue:`40859`: Update Windows build to use xz-5.2.5" +msgstr "" + +#: ../../../build/NEWS:772 +msgid "" +":gh:`91583`: Fix regression in the code generated by Argument Clinic for " +"functions with the ``defining_class`` parameter." +msgstr "" + +#: ../../../build/NEWS:777 +msgid "Python 3.9.12 final" +msgstr "" + +#: ../../../build/NEWS:779 +msgid "*Release date: 2022-03-23*" +msgstr "" + +#: ../../../build/NEWS:784 +msgid "" +":issue:`46968`: Check for the existence of the \"sys/auxv.h\" header in " +":mod:`faulthandler` to avoid compilation problems in systems where this " +"header doesn't exist. Patch by Pablo Galindo" +msgstr "" + +#: ../../../build/NEWS:791 +msgid "" +":issue:`47101`: :const:`hashlib.algorithms_available` now lists only " +"algorithms that are provided by activated crypto providers on OpenSSL 3.0. " +"Legacy algorithms are not listed unless the legacy provider has been loaded " +"into the default OSSL context." +msgstr "" + +#: ../../../build/NEWS:796 +msgid "" +":issue:`23691`: Protect the :func:`re.finditer` iterator from re-entering." +msgstr "" + +#: ../../../build/NEWS:798 +msgid "" +":issue:`42369`: Fix thread safety of :meth:`zipfile._SharedFile.tell` to " +"avoid a \"zipfile.BadZipFile: Bad CRC-32 for file\" exception when reading a" +" :class:`ZipFile` from multiple threads." +msgstr "" + +#: ../../../build/NEWS:802 +msgid "" +":issue:`38256`: Fix :func:`binascii.crc32` when it is compiled to use zlib'c" +" crc32 to work properly on inputs 4+GiB in length instead of returning the " +"wrong result. The workaround prior to this was to always feed the function " +"data in increments smaller than 4GiB or to just call the zlib module " +"function." +msgstr "" + +#: ../../../build/NEWS:808 +msgid "" +":issue:`39394`: A warning about inline flags not at the start of the regular" +" expression now contains the position of the flag." +msgstr "" + +#: ../../../build/NEWS:811 +msgid ":issue:`47061`: Deprecate the various modules listed by :pep:`594`:" +msgstr "" + +#: ../../../build/NEWS:813 +msgid "" +"aifc, asynchat, asyncore, audioop, cgi, cgitb, chunk, crypt, imghdr, msilib," +" nntplib, nis, ossaudiodev, pipes, smtpd, sndhdr, spwd, sunau, telnetlib, " +"uu, xdrlib" +msgstr "" + +#: ../../../build/NEWS:817 +msgid "" +":issue:`2604`: Fix bug where doctests using globals would fail when run " +"multiple times." +msgstr "" + +#: ../../../build/NEWS:820 +msgid ":issue:`45997`: Fix :class:`asyncio.Semaphore` re-aquiring FIFO order." +msgstr "" + +#: ../../../build/NEWS:822 +msgid "" +":issue:`47022`: The :mod:`asynchat`, :mod:`asyncore` and :mod:`smtpd` " +"modules have been deprecated since at least Python 3.6. Their documentation " +"has now been updated to note they will removed in Python 3.12 (:pep:`594`)." +msgstr "" + +#: ../../../build/NEWS:826 +msgid "" +":issue:`46421`: Fix a unittest issue where if the command was invoked as " +"``python -m unittest`` and the filename(s) began with a dot (.), a " +"``ValueError`` is returned." +msgstr "" + +#: ../../../build/NEWS:830 +msgid ":issue:`40296`: Fix supporting generic aliases in :mod:`pydoc`." +msgstr "" + +#: ../../../build/NEWS:832 +msgid "" +":issue:`14156`: argparse.FileType now supports an argument of '-' in binary " +"mode, returning the .buffer attribute of sys.stdin/sys.stdout as " +"appropriate. Modes including 'x' and 'a' are treated equivalently to 'w' " +"when argument is '-'. Patch contributed by Josh Rosenberg" +msgstr "" + +#: ../../../build/NEWS:839 +msgid "Python 3.9.11 final" +msgstr "" + +#: ../../../build/NEWS:841 +msgid "*Release date: 2022-03-16*" +msgstr "" + +#: ../../../build/NEWS:846 +msgid "" +":issue:`46852`: Rename the private undocumented ``float.__set_format__()`` " +"method to ``float.__setformat__()`` to fix a typo introduced in Python 3.7. " +"The method is only used by test_float. Patch by Victor Stinner." +msgstr "" + +#: ../../../build/NEWS:850 +msgid ":issue:`46794`: Bump up the libexpat version into 2.4.6" +msgstr "" + +#: ../../../build/NEWS:852 +msgid "" +":issue:`46762`: Fix an assert failure in debug builds when a '<', '>', or " +"'=' is the last character in an f-string that's missing a closing right " +"brace." +msgstr "" + +#: ../../../build/NEWS:855 +msgid "" +":issue:`46732`: Correct the docstring for the :meth:`__bool__` method. Patch" +" by Jelle Zijlstra." +msgstr "" + +#: ../../../build/NEWS:858 +msgid "" +":issue:`40479`: Add a missing call to ``va_end()`` in " +"``Modules/_hashopenssl.c``." +msgstr "" + +#: ../../../build/NEWS:861 +msgid "" +":issue:`46615`: When iterating over sets internally in ``setobject.c``, " +"acquire strong references to the resulting items from the set. This " +"prevents crashes in corner-cases of various set operations where the set " +"gets mutated." +msgstr "" + +#: ../../../build/NEWS:866 +msgid "" +":issue:`43721`: Fix docstrings of :attr:`~property.getter`, " +":attr:`~property.setter`, and :attr:`~property.deleter` to clarify that they" +" create a new copy of the property." +msgstr "" + +#: ../../../build/NEWS:870 +msgid "" +":issue:`46503`: Fix an assert when parsing some invalid \\N escape sequences" +" in f-strings." +msgstr "" + +#: ../../../build/NEWS:873 +msgid "" +":issue:`46417`: Fix a race condition on setting a type ``__bases__`` " +"attribute: the internal function ``add_subclass()`` now gets the " +"``PyTypeObject.tp_subclasses`` member after calling " +":c:func:`PyWeakref_NewRef` which can trigger a garbage collection which can " +"indirectly modify ``PyTypeObject.tp_subclasses``. Patch by Victor Stinner." +msgstr "" + +#: ../../../build/NEWS:880 +msgid "" +":issue:`46383`: Fix invalid signature of ``_zoneinfo``'s ``module_free`` " +"function to resolve a crash on wasm32-emscripten platform." +msgstr "" + +#: ../../../build/NEWS:886 +msgid "" +":issue:`43253`: Fix a crash when closing transports where the underlying " +"socket handle is already invalid on the Proactor event loop." +msgstr "" + +#: ../../../build/NEWS:889 +msgid "" +":issue:`47004`: Apply bugfixes from importlib_metadata 4.11.3, including " +"bugfix for EntryPoint.extras, which was returning match objects and not the " +"extras strings." +msgstr "" + +#: ../../../build/NEWS:893 +msgid ":issue:`46985`: Upgrade pip wheel bundled with ensurepip (pip 22.0.4)" +msgstr "" + +#: ../../../build/NEWS:895 +msgid "" +":issue:`46968`: :mod:`faulthandler`: On Linux 5.14 and newer, dynamically " +"determine size of signal handler stack size CPython allocates using " +"``getauxval(AT_MINSIGSTKSZ)``. This changes allows for Python extension's " +"request to Linux kernel to use AMX_TILE instruction set on Sapphire Rapids " +"Xeon processor to succeed, unblocking use of the ISA in frameworks." +msgstr "" + +#: ../../../build/NEWS:901 +msgid "" +":issue:`46955`: Expose :class:`asyncio.base_events.Server` as " +":class:`asyncio.Server`. Patch by Stefan Zabka." +msgstr "" + +#: ../../../build/NEWS:904 +msgid ":issue:`46932`: Update bundled libexpat to 2.4.7" +msgstr "" + +#: ../../../build/NEWS:906 +msgid "" +":issue:`25707`: Fixed a file leak in :func:`xml.etree.ElementTree.iterparse`" +" when the iterator is not exhausted. Patch by Jacob Walls." +msgstr "" + +#: ../../../build/NEWS:909 +msgid "" +":issue:`44886`: Inherit asyncio proactor datagram transport from " +":class:`asyncio.DatagramTransport`." +msgstr "" + +#: ../../../build/NEWS:912 +msgid "" +":issue:`46827`: Support UDP sockets in :meth:`asyncio.loop.sock_connect` " +"for selector-based event loops. Patch by Thomas Grainger." +msgstr "" + +#: ../../../build/NEWS:915 +msgid ":issue:`46811`: Make test suite support Expat >=2.4.5" +msgstr "" + +#: ../../../build/NEWS:917 +msgid "" +":issue:`46252`: Raise :exc:`TypeError` if :class:`ssl.SSLSocket` is passed " +"to transport-based APIs." +msgstr "" + +#: ../../../build/NEWS:920 +msgid "" +":issue:`46784`: Fix libexpat symbols collisions with user dynamically loaded" +" or statically linked libexpat in embedded Python." +msgstr "" + +#: ../../../build/NEWS:923 +msgid "" +":issue:`39327`: :func:`shutil.rmtree` can now work with VirtualBox shared " +"folders when running from the guest operating-system." +msgstr "" + +#: ../../../build/NEWS:926 +msgid "" +":issue:`46756`: Fix a bug in " +":meth:`urllib.request.HTTPPasswordMgr.find_user_password` and " +":meth:`urllib.request.HTTPPasswordMgrWithPriorAuth.is_authenticated` which " +"allowed to bypass authorization. For example, access to URI " +"``example.org/foobar`` was allowed if the user was authorized for URI " +"``example.org/foo``." +msgstr "" + +#: ../../../build/NEWS:933 +msgid "" +":issue:`45863`: When the :mod:`tarfile` module creates a pax format archive," +" it will put an integer representation of timestamps in the ustar header (if" +" possible) for the benefit of older unarchivers, in addition to the existing" +" full-precision timestamps in the pax extended header." +msgstr "" + +#: ../../../build/NEWS:938 +msgid "" +":issue:`46672`: Fix ``NameError`` in :func:`asyncio.gather` when initial " +"type check fails." +msgstr "" + +#: ../../../build/NEWS:941 +msgid "" +":issue:`45948`: Fixed a discrepancy in the C implementation of the " +":mod:`xml.etree.ElementTree` module. Now, instantiating an " +":class:`xml.etree.ElementTree.XMLParser` with a ``target=None`` keyword " +"provides a default :class:`xml.etree.ElementTree.TreeBuilder` target as the " +"Python implementation does." +msgstr "" + +#: ../../../build/NEWS:947 +msgid "" +":issue:`46591`: Make the IDLE doc URL on the About IDLE dialog clickable." +msgstr "" + +#: ../../../build/NEWS:949 +msgid ":issue:`46400`: expat: Update libexpat from 2.4.1 to 2.4.4" +msgstr "" + +#: ../../../build/NEWS:951 +msgid "" +":issue:`46487`: Add the ``get_write_buffer_limits`` method to " +":class:`asyncio.transports.WriteTransport` and to the SSL transport." +msgstr "" + +#: ../../../build/NEWS:954 +msgid "" +":issue:`46539`: In :func:`typing.get_type_hints`, support evaluating " +"stringified ``ClassVar`` and ``Final`` annotations inside ``Annotated``. " +"Patch by Gregory Beauregard." +msgstr "" + +#: ../../../build/NEWS:958 +msgid "" +":issue:`46491`: Allow :data:`typing.Annotated` to wrap :data:`typing.Final` " +"and :data:`typing.ClassVar`. Patch by Gregory Beauregard." +msgstr "" + +#: ../../../build/NEWS:961 +msgid "" +":issue:`46436`: Fix command-line option ``-d``/``--directory`` in module " +":mod:`http.server` which is ignored when combined with command-line option " +"``--cgi``. Patch by Géry Ogam." +msgstr "" + +#: ../../../build/NEWS:965 +msgid "" +":issue:`41403`: Make :meth:`mock.patch` raise a :exc:`TypeError` with a " +"relevant error message on invalid arg. Previously it allowed a cryptic " +":exc:`AttributeError` to escape." +msgstr "" + +#: ../../../build/NEWS:969 +msgid "" +":issue:`46474`: In ``importlib.metadata.EntryPoint.pattern``, avoid " +"potential REDoS by limiting ambiguity in consecutive whitespace." +msgstr "" + +#: ../../../build/NEWS:972 +msgid "" +":issue:`46469`: :mod:`asyncio` generic classes now return " +":class:`types.GenericAlias` in ``__class_getitem__`` instead of the same " +"class." +msgstr "" + +#: ../../../build/NEWS:976 +msgid "" +":issue:`46434`: :mod:`pdb` now gracefully handles ``help`` when " +":attr:`__doc__` is missing, for example when run with pregenerated optimized" +" ``.pyc`` files." +msgstr "" + +#: ../../../build/NEWS:980 +msgid "" +":issue:`46333`: The :meth:`__eq__` and :meth:`__hash__` methods of " +":class:`typing.ForwardRef` now honor the ``module`` parameter of " +":class:`typing.ForwardRef`. Forward references from different modules are " +"now differentiated." +msgstr "" + +#: ../../../build/NEWS:985 +msgid "" +":issue:`43118`: Fix a bug in :func:`inspect.signature` that was causing it " +"to fail on some subclasses of classes with a ``__text_signature__`` " +"referencing module globals. Patch by Weipeng Hong." +msgstr "" + +#: ../../../build/NEWS:989 +msgid "" +":issue:`21987`: Fix an issue with :meth:`tarfile.TarFile.getmember` getting " +"a directory name with a trailing slash." +msgstr "" + +#: ../../../build/NEWS:992 +msgid "" +":issue:`20392`: Fix inconsistency with uppercase file extensions in " +":meth:`MimeTypes.guess_type`. Patch by Kumar Aditya." +msgstr "" + +#: ../../../build/NEWS:995 +msgid "" +":issue:`46080`: Fix exception in argparse help text generation if a " +":class:`argparse.BooleanOptionalAction` argument's default is " +"``argparse.SUPPRESS`` and it has ``help`` specified. Patch by Felix " +"Fontein." +msgstr "" + +#: ../../../build/NEWS:1000 +msgid "" +":issue:`44439`: Fix ``.write()`` method of a member file in ``ZipFile``, " +"when the input data is an object that supports the buffer protocol, the file" +" length may be wrong." +msgstr "" + +#: ../../../build/NEWS:1004 +msgid "" +":issue:`45703`: When a namespace package is imported before another module " +"from the same namespace is created/installed in a different :data:`sys.path`" +" location while the program is running, calling the " +":func:`importlib.invalidate_caches` function will now also guarantee the new" +" module is noticed." +msgstr "" + +#: ../../../build/NEWS:1010 +msgid "" +":issue:`24959`: Fix bug where :mod:`unittest` sometimes drops frames from " +"tracebacks of exceptions raised in tests." +msgstr "" + +#: ../../../build/NEWS:1016 +msgid "" +":issue:`46463`: Fixes :file:`escape4chm.py` script used when building the " +"CHM documentation file" +msgstr "" + +#: ../../../build/NEWS:1022 +msgid "" +":issue:`46913`: Fix test_faulthandler.test_sigfpe() if Python is built with " +"undefined behavior sanitizer (UBSAN): disable UBSAN on the " +"faulthandler_sigfpe() function. Patch by Victor Stinner." +msgstr "" + +#: ../../../build/NEWS:1026 +msgid "" +":issue:`46708`: Prevent default asyncio event loop policy modification " +"warning after ``test_asyncio`` execution." +msgstr "" + +#: ../../../build/NEWS:1029 +msgid "" +":issue:`46616`: Ensures ``test_importlib.test_windows`` cleans up registry " +"keys after completion." +msgstr "" + +#: ../../../build/NEWS:1032 +msgid "" +":issue:`44359`: test_ftplib now silently ignores socket errors to prevent " +"logging unhandled threading exceptions. Patch by Victor Stinner." +msgstr "" + +#: ../../../build/NEWS:1035 +msgid "" +":issue:`46542`: Fix a Python crash in test_lib2to3 when using Python built " +"in debug mode: limit the recursion limit. Patch by Victor Stinner." +msgstr "" + +#: ../../../build/NEWS:1038 +msgid "" +":issue:`46576`: test_peg_generator now disables compiler optimization when " +"testing compilation of its own C extensions to significantly speed up the " +"testing on non-debug builds of CPython." +msgstr "" + +#: ../../../build/NEWS:1042 +msgid "" +":issue:`46542`: Fix ``test_json`` tests checking for :exc:`RecursionError`: " +"modify these tests to use ``support.infinite_recursion()``. Patch by Victor " +"Stinner." +msgstr "" + +#: ../../../build/NEWS:1046 +msgid "" +":issue:`13886`: Skip test_builtin PTY tests on non-ASCII characters if the " +"readline module is loaded. The readline module changes input() behavior, but" +" test_builtin is not intented to test the readline module. Patch by Victor " +"Stinner." +msgstr "" + +#: ../../../build/NEWS:1054 +msgid "" +":issue:`47024`: Update OpenSSL to 1.1.1n for macOS installers and all " +"Windows builds." +msgstr "" + +#: ../../../build/NEWS:1057 +msgid "" +":issue:`38472`: Fix GCC detection in setup.py when cross-compiling. The C " +"compiler is now run with LC_ALL=C. Previously, the detection failed with a " +"German locale." +msgstr "" + +#: ../../../build/NEWS:1061 +msgid "" +":issue:`46513`: :program:`configure` no longer uses ``AC_C_CHAR_UNSIGNED`` " +"macro and ``pyconfig.h`` no longer defines reserved symbol " +"``__CHAR_UNSIGNED__``." +msgstr "" + +#: ../../../build/NEWS:1065 +msgid ":issue:`45925`: Update Windows installer to use SQLite 3.37.2." +msgstr "" + +#: ../../../build/NEWS:1067 +msgid "" +":issue:`47032`: Ensure Windows install builds fail correctly with a non-zero" +" exit code when part of the build fails." +msgstr "" + +#: ../../../build/NEWS:1073 +msgid "" +":issue:`44549`: Update bzip2 to 1.0.8 in Windows builds to mitigate " +"CVE-2016-3189 and CVE-2019-12900" +msgstr "" + +#: ../../../build/NEWS:1076 +msgid "" +":issue:`46948`: Prevent CVE-2022-26488 by ensuring the Add to PATH option in" +" the Windows installer uses the correct path when being repaired." +msgstr "" + +#: ../../../build/NEWS:1079 +msgid "" +":issue:`46638`: Ensures registry virtualization is consistently disabled. " +"For 3.10 and earlier, it remains enabled (some registry writes are " +"protected), while for 3.11 and later it is disabled (registry modifications " +"affect all applications)." +msgstr "" + +#: ../../../build/NEWS:1087 +msgid ":issue:`45925`: Update macOS installer to SQLite 3.37.2." +msgstr "" + +#: ../../../build/NEWS:1090 ../../../build/NEWS:1651 ../../../build/NEWS:2192 +#: ../../../build/NEWS:2422 ../../../build/NEWS:2590 ../../../build/NEWS:2876 +#: ../../../build/NEWS:2984 ../../../build/NEWS:3310 ../../../build/NEWS:3587 +#: ../../../build/NEWS:3682 ../../../build/NEWS:3908 ../../../build/NEWS:4121 +#: ../../../build/NEWS:4885 ../../../build/NEWS:5354 ../../../build/NEWS:5737 +#: ../../../build/NEWS:6129 ../../../build/NEWS:6511 ../../../build/NEWS:8248 +#: ../../../build/NEWS:9194 ../../../build/NEWS:9743 ../../../build/NEWS:10062 +#: ../../../build/NEWS:10311 ../../../build/NEWS:13033 +#: ../../../build/NEWS:13436 ../../../build/NEWS:13666 +#: ../../../build/NEWS:13824 ../../../build/NEWS:14040 +#: ../../../build/NEWS:14293 ../../../build/NEWS:15469 +#: ../../../build/NEWS:15755 ../../../build/NEWS:17624 +#: ../../../build/NEWS:18164 ../../../build/NEWS:18518 +#: ../../../build/NEWS:18910 ../../../build/NEWS:19287 +#: ../../../build/NEWS:19759 ../../../build/NEWS:20085 +#: ../../../build/NEWS:21199 ../../../build/NEWS:21472 +#: ../../../build/NEWS:21674 ../../../build/NEWS:21935 +#: ../../../build/NEWS:23054 ../../../build/NEWS:24354 +#: ../../../build/NEWS:24522 ../../../build/NEWS:25064 +#: ../../../build/NEWS:25581 ../../../build/NEWS:25914 +#: ../../../build/NEWS:26426 ../../../build/NEWS:28449 +msgid "IDLE" +msgstr "IDLE" + +#: ../../../build/NEWS:1092 +msgid "" +":issue:`46630`: Make query dialogs on Windows start with a cursor in the " +"entry box." +msgstr "" + +#: ../../../build/NEWS:1095 +msgid "" +":issue:`45296`: Clarify close, quit, and exit in IDLE. In the File menu, " +"'Close' and 'Exit' are now 'Close Window' (the current one) and 'Exit' is " +"now 'Exit IDLE' (by closing all windows). In Shell, 'quit()' and 'exit()' " +"mean 'close Shell'. If there are no other windows, this also exits IDLE." +msgstr "" + +#: ../../../build/NEWS:1100 +msgid "" +":issue:`45447`: Apply IDLE syntax highlighting to `.pyi` files. Patch by " +"Alex Waygood and Terry Jan Reedy." +msgstr "" + +#: ../../../build/NEWS:1105 +msgid "Python 3.9.10 final" +msgstr "" + +#: ../../../build/NEWS:1107 +msgid "*Release date: 2022-01-13*" +msgstr "" + +#: ../../../build/NEWS:1112 +msgid "" +":issue:`46070`: :c:func:`Py_EndInterpreter` now explicitly untracks all " +"objects currently tracked by the GC. Previously, if an object was used later" +" by another interpreter, calling :c:func:`PyObject_GC_UnTrack` on the object" +" crashed if the previous or the next object of the :c:type:`PyGC_Head` " +"structure became a dangling pointer. Patch by Victor Stinner." +msgstr "" + +#: ../../../build/NEWS:1118 +msgid ":issue:`46085`: Fix iterator cache mechanism of :class:`OrderedDict`." +msgstr "" + +#: ../../../build/NEWS:1120 +msgid "" +":issue:`46110`: Add a maximum recursion check to the PEG parser to avoid " +"stack overflow. Patch by Pablo Galindo" +msgstr "" + +#: ../../../build/NEWS:1123 +msgid "" +":issue:`46000`: Improve compatibility of the :mod:`curses` module with " +"NetBSD curses." +msgstr "" + +#: ../../../build/NEWS:1126 +msgid "" +":issue:`45614`: Fix :mod:`traceback` display for exceptions with invalid " +"module name." +msgstr "" + +#: ../../../build/NEWS:1129 +msgid "" +":issue:`45806`: Re-introduced fix that allows recovery from stack overflow " +"without crashing the interpreter. The original fix as part of " +":issue:`42500` was reverted (see release notes for Python 3.9.4) since it " +"introduced an ABI change in a bugfix release which is not allowed. The new " +"fix doesn't introduce any ABI changes. Patch by Mark Shannon." +msgstr "" + +#: ../../../build/NEWS:1135 +msgid "" +":issue:`45822`: Fixed a bug in the parser that was causing it to not respect" +" :pep:`263` coding cookies when no flags are provided. Patch by Pablo " +"Galindo" +msgstr "" + +#: ../../../build/NEWS:1139 +msgid "" +":issue:`45820`: Fix a segfault when the parser fails without reading any " +"input. Patch by Pablo Galindo" +msgstr "" + +#: ../../../build/NEWS:1142 +msgid "" +":issue:`42540`: Fix crash when :func:`os.fork` is called with an active non-" +"default memory allocator." +msgstr "" + +#: ../../../build/NEWS:1148 +msgid "" +":issue:`40479`: Fix :mod:`hashlib` *usedforsecurity* option to work " +"correctly with OpenSSL 3.0.0 in FIPS mode." +msgstr "" + +#: ../../../build/NEWS:1151 +msgid "" +":issue:`46070`: Fix possible segfault when importing the :mod:`asyncio` " +"module from different sub-interpreters in parallel. Patch by Erlend E. " +"Aasland." +msgstr "" + +#: ../../../build/NEWS:1154 +msgid "" +":issue:`46278`: Reflect ``context`` argument in " +"``AbstractEventLoop.call_*()`` methods. Loop implementations already support" +" it." +msgstr "" + +#: ../../../build/NEWS:1157 +msgid "" +":issue:`46239`: Improve error message when importing " +":mod:`asyncio.windows_events` on non-Windows." +msgstr "" + +#: ../../../build/NEWS:1160 +msgid "" +":issue:`20369`: :func:`concurrent.futures.wait` no longer blocks forever " +"when given duplicate Futures. Patch by Kumar Aditya." +msgstr "" + +#: ../../../build/NEWS:1163 +msgid "" +":issue:`46105`: Honor spec when generating requirement specs with urls and " +"extras (importlib_metadata 4.8.3)." +msgstr "" + +#: ../../../build/NEWS:1166 +msgid "" +":issue:`26952`: :mod:`argparse` raises :exc:`ValueError` with clear message " +"when trying to render usage for an empty mutually-exclusive group. " +"Previously it raised a cryptic :exc:`IndexError`." +msgstr "" + +#: ../../../build/NEWS:1170 +msgid "" +":issue:`27718`: Fix help for the :mod:`signal` module. Some functions (e.g. " +"``signal()`` and ``getsignal()``) were omitted." +msgstr "" + +#: ../../../build/NEWS:1173 +msgid "" +":issue:`46032`: The ``registry()`` method of " +":func:`functools.singledispatch` functions checks now the first argument or " +"the first parameter annotation and raises a TypeError if it is not " +"supported. Previously unsupported \"types\" were ignored (e.g. " +"``typing.List[int]``) or caused an error at calling time (e.g. " +"``list[int]``)." +msgstr "" + +#: ../../../build/NEWS:1179 +msgid "" +":issue:`46018`: Ensure that :func:`math.expm1` does not raise on underflow." +msgstr "" + +#: ../../../build/NEWS:1181 +msgid "" +":issue:`27946`: Fix possible crash when getting an attribute of " +"class:`xml.etree.ElementTree.Element` simultaneously with replacing the " +"``attrib`` dict." +msgstr "" + +#: ../../../build/NEWS:1185 +msgid "" +":issue:`13236`: :class:`unittest.TextTestResult` and " +":class:`unittest.TextTestRunner` flush now the output stream more often." +msgstr "" + +#: ../../../build/NEWS:1188 +msgid "" +":issue:`37658`: Fix issue when on certain conditions ``asyncio.wait_for()`` " +"may allow a coroutine to complete successfully, but fail to return the " +"result, potentially causing memory leaks or other issues." +msgstr "" + +#: ../../../build/NEWS:1192 +msgid "" +":issue:`45831`: :mod:`faulthandler` can now write ASCII-only strings (like " +"filenames and function names) with a single write() syscall when dumping a " +"traceback. It reduces the risk of getting an unreadable dump when two " +"threads or two processes dump a traceback to the same file (like stderr) at " +"the same time. Patch by Victor Stinner." +msgstr "" + +#: ../../../build/NEWS:1198 +msgid "" +":issue:`41735`: Fix thread lock in ``zlib.Decompress.flush()`` method before" +" ``PyObject_GetBuffer``." +msgstr "" + +#: ../../../build/NEWS:1201 +msgid "" +":issue:`45664`: Fix :func:`types.resolve_bases` and :func:`types.new_class` " +"for :class:`types.GenericAlias` instance as a base." +msgstr "" + +#: ../../../build/NEWS:1204 +msgid "" +":issue:`45663`: Fix :func:`dataclasses.is_dataclass` for dataclasses which " +"are subclasses of :class:`types.GenericAlias`." +msgstr "" + +#: ../../../build/NEWS:1207 +msgid "" +":issue:`45662`: Fix the repr of :data:`dataclasses.InitVar` with a type " +"alias to the built-in class, e.g. ``InitVar[list[int]]``." +msgstr "" + +#: ../../../build/NEWS:1210 +msgid "" +":issue:`43498`: Avoid a possible *\"RuntimeError: dictionary changed size " +"during iteration\"* when adjusting the process count of " +":class:`ProcessPoolExecutor`." +msgstr "" + +#: ../../../build/NEWS:1214 +msgid "" +":issue:`29620`: :func:`~unittest.TestCase.assertWarns` no longer raises a " +"``RuntimeException`` when accessing a module's ``__warningregistry__`` " +"causes importation of a new module, or when a new module is imported in " +"another thread. Patch by Kernc." +msgstr "" + +#: ../../../build/NEWS:1222 +msgid "" +":issue:`19737`: Update the documentation for the :func:`globals` function." +msgstr "" + +#: ../../../build/NEWS:1224 +msgid "" +":issue:`45840`: Improve cross-references in the documentation for the data " +"model." +msgstr "" + +#: ../../../build/NEWS:1227 +msgid "" +":issue:`45788`: Link doc for sys.prefix to sysconfig doc on installation " +"paths." +msgstr "" + +#: ../../../build/NEWS:1229 +msgid "" +":issue:`25381`: In the extending chapter of the extending doc, update a " +"paragraph about the global variables containing exception information." +msgstr "" + +#: ../../../build/NEWS:1232 +msgid "" +":issue:`43905`: Expanded :func:`~dataclasses.astuple` and " +":func:`~dataclasses.asdict` docs, warning about deepcopy being applied and " +"providing a workaround." +msgstr "" + +#: ../../../build/NEWS:1236 +msgid "" +":issue:`41028`: Language and version switchers, previously maintained in " +"every cpython branches, are now handled by docsbuild-script." +msgstr "" + +#: ../../../build/NEWS:1242 +msgid ":issue:`46205`: Fix hang in runtest_mp due to race condition" +msgstr "" + +#: ../../../build/NEWS:1244 +msgid "" +":issue:`46263`: Fix test_capi on FreeBSD 14-dev: instruct jemalloc to not " +"fill freed memory with junk byte." +msgstr "" + +#: ../../../build/NEWS:1247 +msgid "" +":issue:`46150`: Now ``fakename`` in " +"``test_pathlib.PosixPathTest.test_expanduser`` is checked to be non-" +"existent." +msgstr "" + +#: ../../../build/NEWS:1251 +msgid "" +":issue:`46129`: Rewrite ``asyncio.locks`` tests with " +":class:`unittest.IsolatedAsyncioTestCase` usage." +msgstr "" + +#: ../../../build/NEWS:1254 +msgid "" +":issue:`23819`: Fixed :mod:`asyncio` tests in python optimized mode. Patch " +"by Kumar Aditya." +msgstr "" + +#: ../../../build/NEWS:1257 +msgid "" +":issue:`46114`: Fix test case for OpenSSL 3.0.1 version. OpenSSL 3.0 uses " +"``0xMNN00PP0L``." +msgstr "" + +#: ../../../build/NEWS:1260 +msgid "" +":issue:`19460`: Add new Test for " +":class:`email.mime.nonmultipart.MIMENonMultipart`." +msgstr "" + +#: ../../../build/NEWS:1263 +msgid "" +":issue:`45835`: Fix race condition in test_queue tests with multiple " +"\"feeder\" threads." +msgstr "" + +#: ../../../build/NEWS:1269 +msgid "" +":issue:`46263`: ``configure`` no longer sets ``MULTIARCH`` on FreeBSD " +"platforms." +msgstr "" + +#: ../../../build/NEWS:1272 +msgid "" +":issue:`46106`: Updated OpenSSL to 1.1.1m in Windows builds, macOS installer" +" builds, and CI. Patch by Kumar Aditya." +msgstr "" + +#: ../../../build/NEWS:1275 +msgid "" +":issue:`44035`: CI now verifies that autoconf files have been regenerated " +"with a current and unpatched autoconf package." +msgstr "" + +#: ../../../build/NEWS:1278 +msgid "" +":issue:`33393`: Update ``config.guess`` to 2021-06-03 and ``config.sub`` to " +"2021-08-14. ``Makefile`` now has an ``update-config`` target to make " +"updating more convenient." +msgstr "" + +#: ../../../build/NEWS:1282 +msgid "" +":issue:`45866`: ``make regen-all`` now produces the same output when run " +"from a directory other than the source tree: when building Python out of the" +" source tree. pegen now strips directory of the \"generated by pygen from " +"\" header Patch by Victor Stinner." +msgstr "" + +#: ../../../build/NEWS:1287 +msgid "" +":issue:`41498`: Python now compiles on platforms without ``sigset_t``. " +"Several functions in :mod:`signal` are not available when ``sigset_t`` is " +"missing." +msgstr "" + +#: ../../../build/NEWS:1290 +msgid "Based on patch by Roman Yurchak for pyodide." +msgstr "" + +#: ../../../build/NEWS:1292 +msgid "" +":issue:`45881`: ``setup.py`` now uses ``CC`` from environment first to " +"discover multiarch and cross compile paths." +msgstr "" + +#: ../../../build/NEWS:1298 +msgid "" +":issue:`45901`: When installed through the Microsoft Store and set as the " +"default app for :file:`*.py` files, command line arguments will now be " +"passed to Python when invoking a script without explicitly launching Python " +"(that is, ``script.py args`` rather than ``python script.py args``)." +msgstr "" + +#: ../../../build/NEWS:1307 +msgid "" +":issue:`40477`: The Python Launcher app for macOS now properly launches " +"scripts and, if necessary, the Terminal app when running on recent macOS " +"releases." +msgstr "" + +#: ../../../build/NEWS:1310 +msgid "" +":issue:`45732`: Update python.org macOS installer to use Tcl/Tk 8.6.12." +msgstr "" + +#: ../../../build/NEWS:1315 +msgid "" +":issue:`45838`: Fix line number calculation when debugging Python with GDB." +msgstr "" + +#: ../../../build/NEWS:1320 +msgid "" +":issue:`39026`: Fix Python.h to build C extensions with Xcode: remove a " +"relative include from ``Include/cpython/pystate.h``." +msgstr "" + +#: ../../../build/NEWS:1325 +msgid "Python 3.9.9 final" +msgstr "" + +#: ../../../build/NEWS:1327 +msgid "*Release date: 2021-11-15*" +msgstr "" + +#: ../../../build/NEWS:1332 +msgid "" +":issue:`45738`: Fix computation of error location for invalid continuation " +"characters in the parser. Patch by Pablo Galindo." +msgstr "" + +#: ../../../build/NEWS:1338 +msgid "" +":issue:`45235`: Reverted an argparse bugfix that caused regression in the " +"handling of default arguments for subparsers. This prevented leaf level " +"arguments from taking precedence over root level arguments." +msgstr "" + +#: ../../../build/NEWS:1342 +msgid "" +":issue:`45765`: In importlib.metadata, fix distribution discovery for an " +"empty path." +msgstr "" + +#: ../../../build/NEWS:1345 +msgid "" +":issue:`45644`: In-place JSON file formatting using ``python3 -m json.tool " +"infile infile`` now works correctly, previously it left the file empty. " +"Patch by Chris Wesseling." +msgstr "" + +#: ../../../build/NEWS:1352 +msgid "" +":issue:`45772`: ``socket.socket`` documentation is corrected to a class from" +" a function." +msgstr "" + +#: ../../../build/NEWS:1355 +msgid "" +":issue:`45392`: Update the docstring of the :class:`type` built-in to remove" +" a redundant line and to mention keyword arguments for the constructor." +msgstr "" + +#: ../../../build/NEWS:1361 +msgid ":issue:`45732`: Updates bundled Tcl/Tk to 8.6.12." +msgstr "" + +#: ../../../build/NEWS:1363 +msgid "" +":issue:`45720`: Internal reference to :file:`shlwapi.dll` was dropped to " +"help improve startup time. This DLL will no longer be loaded at the start of" +" every Python process." +msgstr "" + +#: ../../../build/NEWS:1369 +msgid "Python 3.9.8 final" +msgstr "" + +#: ../../../build/NEWS:1371 +msgid "*Release date: 2021-11-05*" +msgstr "" + +#: ../../../build/NEWS:1376 +msgid "" +":issue:`30570`: Fixed a crash in ``issubclass()`` from infinite recursion " +"when searching pathological ``__bases__`` tuples." +msgstr "" + +#: ../../../build/NEWS:1379 +msgid "" +":issue:`45494`: Fix parser crash when reporting errors involving invalid " +"continuation characters. Patch by Pablo Galindo." +msgstr "" + +#: ../../../build/NEWS:1382 +msgid "" +":issue:`45385`: Fix reference leak from descr_check. Patch by Dong-hee Na." +msgstr "" + +#: ../../../build/NEWS:1384 +msgid "" +":issue:`45167`: Fix deepcopying of :class:`types.GenericAlias` objects." +msgstr "" + +#: ../../../build/NEWS:1386 +msgid "" +":issue:`44219`: Release the GIL while performing ``isatty`` system calls on " +"arbitrary file descriptors. In particular, this affects :func:`os.isatty`, " +":func:`os.device_encoding` and :class:`io.TextIOWrapper`. By extension, " +":func:`io.open` in text mode is also affected. This change solves a deadlock" +" in :func:`os.isatty`. Patch by Vincent Michel in :issue:`44219`." +msgstr "" + +#: ../../../build/NEWS:1392 +msgid "" +":issue:`44959`: Added fallback to extension modules with '.sl' suffix on HP-" +"UX" +msgstr "" + +#: ../../../build/NEWS:1394 +msgid "" +":issue:`44050`: Extensions that indicate they use global state (by setting " +"``m_size`` to -1) can again be used in multiple interpreters. This reverts " +"to behavior of Python 3.8." +msgstr "" + +#: ../../../build/NEWS:1398 +msgid "" +":issue:`45121`: Fix issue where ``Protocol.__init__`` raises " +"``RecursionError`` when it's called directly or via ``super()``. Patch " +"provided by Yurii Karabas." +msgstr "" + +#: ../../../build/NEWS:1402 +msgid "" +":issue:`45083`: When the interpreter renders an exception, its name now has " +"a complete qualname. Previously only the class name was concatenated to the " +"module name, which sometimes resulted in an incorrect full name being " +"displayed." +msgstr "" + +#: ../../../build/NEWS:1407 +msgid "" +"(This issue impacted only the C code exception rendering, the " +":mod:`traceback` module was using qualname already)." +msgstr "" + +#: ../../../build/NEWS:1413 +msgid "" +":issue:`45678`: Fix bug in Python 3.9 that meant " +"``functools.singledispatchmethod`` failed to properly wrap the attributes of" +" the target method. Patch by Alex Waygood." +msgstr "" + +#: ../../../build/NEWS:1417 +msgid "" +":issue:`45679`: Fix caching of multi-value :data:`typing.Literal`. " +"``Literal[True, 2]`` is no longer equal to ``Literal[1, 2]``." +msgstr "" + +#: ../../../build/NEWS:1420 +msgid "" +":issue:`45438`: Fix typing.Signature string representation for generic " +"builtin types." +msgstr "" + +#: ../../../build/NEWS:1423 +msgid "" +":issue:`45581`: :meth:`sqlite3.connect` now correctly raises " +":exc:`MemoryError` if the underlying SQLite API signals memory error. Patch " +"by Erlend E. Aasland." +msgstr "" + +#: ../../../build/NEWS:1427 +msgid "" +":issue:`39679`: Fix bug in :class:`functools.singledispatchmethod` that " +"caused it to fail when attempting to register a :func:`classmethod` or " +":func:`staticmethod` using type annotations. Patch contributed by Alex " +"Waygood." +msgstr "" + +#: ../../../build/NEWS:1432 +msgid "" +":issue:`45515`: Add references to :mod:`zoneinfo` in the :mod:`datetime` " +"documentation, mostly replacing outdated references to ``dateutil.tz``. " +"Change by Paul Ganssle." +msgstr "" + +#: ../../../build/NEWS:1436 +msgid "" +":issue:`45467`: Fix incremental decoder and stream reader in the \"raw-" +"unicode-escape\" codec. Previously they failed if the escape sequence was " +"split." +msgstr "" + +#: ../../../build/NEWS:1440 +msgid "" +":issue:`45461`: Fix incremental decoder and stream reader in the \"unicode-" +"escape\" codec. Previously they failed if the escape sequence was split." +msgstr "" + +#: ../../../build/NEWS:1444 +msgid "" +":issue:`45239`: Fixed :func:`email.utils.parsedate_tz` crashing with " +":exc:`UnboundLocalError` on certain invalid input instead of returning " +"``None``. Patch by Ben Hoyt." +msgstr "" + +#: ../../../build/NEWS:1448 +msgid "" +":issue:`44904`: Fix bug in the :mod:`doctest` module that caused it to fail " +"if a docstring included an example with a ``classmethod`` ``property``. " +"Patch by Alex Waygood." +msgstr "" + +#: ../../../build/NEWS:1452 +msgid "" +":issue:`45406`: Make :func:`inspect.getmodule` catch ``FileNotFoundError`` " +"raised by :'func:`inspect.getabsfile`, and return ``None`` to indicate that " +"the module could not be determined." +msgstr "" + +#: ../../../build/NEWS:1456 +msgid "" +":issue:`45262`: Prevent use-after-free in asyncio. Make sure the cached " +"running loop holder gets cleared on dealloc to prevent use-after-free in " +"get_running_loop" +msgstr "" + +#: ../../../build/NEWS:1460 +msgid "" +":issue:`45386`: Make :mod:`xmlrpc.client` more robust to C runtimes where " +"the underlying C ``strftime`` function results in a ``ValueError`` when " +"testing for year formatting options." +msgstr "" + +#: ../../../build/NEWS:1464 +msgid "" +":issue:`45371`: Fix clang rpath issue in :mod:`distutils`. The UnixCCompiler" +" now uses correct clang option to add a runtime library directory (rpath) to" +" a shared library." +msgstr "" + +#: ../../../build/NEWS:1468 +msgid "" +":issue:`20028`: Improve error message of :class:`csv.Dialect` when " +"initializing. Patch by Vajrasky Kok and Dong-hee Na." +msgstr "" + +#: ../../../build/NEWS:1471 +msgid ":issue:`45343`: Update bundled pip to 21.2.4 and setuptools to 58.1.0" +msgstr "" + +#: ../../../build/NEWS:1473 +msgid "" +":issue:`41710`: On Unix, if the ``sem_clockwait()`` function is available in" +" the C library (glibc 2.30 and newer), the :meth:`threading.Lock.acquire` " +"method now uses the monotonic clock (:data:`time.CLOCK_MONOTONIC`) for the " +"timeout, rather than using the system clock (:data:`time.CLOCK_REALTIME`), " +"to not be affected by system clock changes. Patch by Victor Stinner." +msgstr "" + +#: ../../../build/NEWS:1479 +msgid "" +":issue:`45328`: Fixed :class:`http.client.HTTPConnection` to work properly " +"in OSs that don't support the ``TCP_NODELAY`` socket option." +msgstr "" + +#: ../../../build/NEWS:1482 +msgid "" +":issue:`1596321`: Fix the :func:`threading._shutdown` function when the " +":mod:`threading` module was imported first from a thread different than the " +"main thread: no longer log an error at Python exit." +msgstr "" + +#: ../../../build/NEWS:1486 +msgid "" +":issue:`45274`: Fix a race condition in the :meth:`Thread.join() " +"` method of the :mod:`threading` module. If the " +"function is interrupted by a signal and the signal handler raises an " +"exception, make sure that the thread remains in a consistent state to " +"prevent a deadlock. Patch by Victor Stinner." +msgstr "" + +#: ../../../build/NEWS:1492 +msgid "" +":issue:`45238`: Fix :meth:`unittest.IsolatedAsyncioTestCase.debug`: it runs " +"now asynchronous methods and callbacks." +msgstr "" + +#: ../../../build/NEWS:1495 +msgid "" +":issue:`36674`: :meth:`unittest.TestCase.debug` raises now a " +":class:`unittest.SkipTest` if the class or the test method are decorated " +"with the skipping decorator." +msgstr "" + +#: ../../../build/NEWS:1499 +msgid "" +":issue:`45235`: Fix an issue where argparse would not preserve values in a " +"provided namespace when using a subparser with defaults." +msgstr "" + +#: ../../../build/NEWS:1502 +msgid "" +":issue:`45234`: Fixed a regression in :func:`~shutil.copyfile`, " +":func:`~shutil.copy`, :func:`~shutil.copy2` raising :exc:`FileNotFoundError`" +" when source is a directory, which should raise :exc:`IsADirectoryError`" +msgstr "" + +#: ../../../build/NEWS:1507 +msgid "" +":issue:`45228`: Fix stack buffer overflow in parsing J1939 network address." +msgstr "" + +#: ../../../build/NEWS:1509 +msgid "" +":issue:`45192`: Fix the ``tempfile._infer_return_type`` function so that the" +" ``dir`` argument of the :mod:`tempfile` functions accepts an object " +"implementing the ``os.PathLike`` protocol." +msgstr "" + +#: ../../../build/NEWS:1513 +msgid "Patch by Kyungmin Lee." +msgstr "" + +#: ../../../build/NEWS:1515 +msgid "" +":issue:`45160`: When tracing a tkinter variable used by a ttk OptionMenu, " +"callbacks are no longer made twice." +msgstr "" + +#: ../../../build/NEWS:1518 +msgid "" +":issue:`35474`: Calling :func:`mimetypes.guess_all_extensions` with " +"``strict=False`` no longer affects the result of the following call with " +"``strict=True``. Also, mutating the returned list no longer affects the " +"global state." +msgstr "" + +#: ../../../build/NEWS:1523 +msgid "" +":issue:`45166`: :func:`typing.get_type_hints` now works with " +":data:`~typing.Final` wrapped in :class:`~typing.ForwardRef`." +msgstr "" + +#: ../../../build/NEWS:1526 +msgid "" +":issue:`45097`: Remove deprecation warnings about the loop argument in " +":mod:`asyncio` incorrectly emitted in cases when the user does not pass the " +"loop argument." +msgstr "" + +#: ../../../build/NEWS:1530 +msgid "" +":issue:`45081`: Fix issue when dataclasses that inherit from " +"``typing.Protocol`` subclasses have wrong ``__init__``. Patch provided by " +"Yurii Karabas." +msgstr "" + +#: ../../../build/NEWS:1534 +msgid "" +":issue:`24444`: Fixed an error raised in :mod:`argparse` help display when " +"help for an option is set to 1+ blank spaces or when *choices* arg is an " +"empty container." +msgstr "" + +#: ../../../build/NEWS:1538 +msgid "" +":issue:`45021`: Fix a potential deadlock at shutdown of forked children when" +" using :mod:`concurrent.futures` module" +msgstr "" + +#: ../../../build/NEWS:1541 +msgid "" +":issue:`45030`: Fix integer overflow in pickling and copying the range " +"iterator." +msgstr "" + +#: ../../../build/NEWS:1544 +msgid "" +":issue:`39039`: tarfile.open raises :exc:`~tarfile.ReadError` when a zlib " +"error occurs during file extraction." +msgstr "" + +#: ../../../build/NEWS:1547 +msgid "" +":issue:`44594`: Fix an edge case of :class:`ExitStack` and " +":class:`AsyncExitStack` exception chaining. They will now match ``with`` " +"block behavior when ``__context__`` is explicitly set to ``None`` when the " +"exception is in flight." +msgstr "" + +#: ../../../build/NEWS:1555 +msgid "" +":issue:`45726`: Improve documentation for :func:`functools.singledispatch` " +"and :class:`functools.singledispatchmethod`." +msgstr "" + +#: ../../../build/NEWS:1558 +msgid "" +":issue:`45680`: Amend the docs on ``GenericAlias`` objects to clarify that " +"non-container classes can also implement ``__class_getitem__``. Patch " +"contributed by Alex Waygood." +msgstr "" + +#: ../../../build/NEWS:1562 +msgid "" +":issue:`45655`: Add a new \"relevant PEPs\" section to the top of the " +"documentation for the ``typing`` module. Patch by Alex Waygood." +msgstr "" + +#: ../../../build/NEWS:1565 +msgid "" +":issue:`45604`: Add ``level`` argument to ``multiprocessing.log_to_stderr`` " +"function docs." +msgstr "" + +#: ../../../build/NEWS:1568 +msgid "" +":issue:`45464`: Mention in the documentation of :ref:`Built-in Exceptions " +"` that inheriting from multiple exception types in a " +"single subclass is not recommended due to possible memory layout " +"incompatibility." +msgstr "" + +#: ../../../build/NEWS:1573 +msgid ":issue:`45449`: Add note about :pep:`585` in :mod:`collections.abc`." +msgstr "" + +#: ../../../build/NEWS:1575 +msgid "" +":issue:`45516`: Add protocol description to the " +":class:`importlib.abc.Traversable` documentation." +msgstr "" + +#: ../../../build/NEWS:1578 +msgid "" +":issue:`20692`: Add Programming FAQ entry explaining that int literal " +"attribute access requires either a space after or parentheses around the " +"literal." +msgstr "" + +#: ../../../build/NEWS:1581 +msgid "" +":issue:`45216`: Remove extra documentation listing methods in ``difflib``. " +"It was rendering twice in pydoc and was outdated in some places." +msgstr "" + +#: ../../../build/NEWS:1587 +msgid ":issue:`45578`: Add tests for :func:`dis.distb`" +msgstr "" + +#: ../../../build/NEWS:1589 +msgid "" +":issue:`45577`: Add subtests for all ``pickle`` protocols in " +"``test_zoneinfo``." +msgstr "" + +#: ../../../build/NEWS:1591 +msgid "" +":issue:`43592`: :mod:`test.libregrtest` now raises the soft resource limit " +"for the maximum number of file descriptors when the default is too low for " +"our test suite as was often the case on macOS." +msgstr "" + +#: ../../../build/NEWS:1595 +msgid "" +":issue:`40173`: Fix :func:`test.support.import_helper.import_fresh_module`." +msgstr "" + +#: ../../../build/NEWS:1597 +msgid ":issue:`45280`: Add a test case for empty :class:`typing.NamedTuple`." +msgstr "" + +#: ../../../build/NEWS:1599 +msgid "" +":issue:`45269`: Cover case when invalid ``markers`` type is supplied to " +"``c_make_encoder``." +msgstr "" + +#: ../../../build/NEWS:1602 +msgid "" +":issue:`45209`: Fix ``UserWarning: resource_tracker`` warning in " +"``_test_multiprocessing._TestSharedMemory.test_shared_memory_cleaned_after_process_termination``" +msgstr "" + +#: ../../../build/NEWS:1605 +msgid "" +":issue:`45195`: Fix test_readline.test_nonascii(): sometimes, the newline " +"character is not written at the end, so don't expect it in the output. Patch" +" by Victor Stinner." +msgstr "" + +#: ../../../build/NEWS:1609 +msgid "" +":issue:`45156`: Fixes infinite loop on :func:`unittest.mock.seal` of mocks " +"created by :func:`~unittest.create_autospec`." +msgstr "" + +#: ../../../build/NEWS:1612 +msgid "" +":issue:`45042`: Fixes that test classes decorated with " +"``@hashlib_helper.requires_hashdigest`` were skipped all the time." +msgstr "" + +#: ../../../build/NEWS:1618 +msgid "" +":issue:`43158`: ``setup.py`` now uses values from configure script to build " +"the ``_uuid`` extension module. Configure now detects util-linux's " +"``libuuid``, too." +msgstr "" + +#: ../../../build/NEWS:1622 +msgid "" +":issue:`45571`: ``Modules/Setup`` now use ``PY_CFLAGS_NODIST`` instead of " +"``PY_CFLAGS`` to compile shared modules." +msgstr "" + +#: ../../../build/NEWS:1625 +msgid "" +":issue:`45532`: Update :data:`sys.version` to use ``main`` as fallback " +"information. Patch by Jeong YunWon." +msgstr "" + +#: ../../../build/NEWS:1628 +msgid "" +":issue:`45405`: Prevent ``internal configure error`` when running " +"``configure`` with recent versions of non-Apple clang. Patch by David " +"Bohman." +msgstr "" + +#: ../../../build/NEWS:1631 +msgid "" +":issue:`45220`: Avoid building with the Windows 11 SDK previews " +"automatically. This may be overridden by setting the " +"``DefaultWindowsSDKVersion`` environment variable before building." +msgstr "" + +#: ../../../build/NEWS:1638 +msgid "" +":issue:`45337`: venv now warns when the created environment may need to be " +"accessed at a different path, due to redirections, links or junctions. It " +"also now correctly installs or upgrades components when the alternate path " +"is required." +msgstr "" + +#: ../../../build/NEWS:1646 +msgid "" +":issue:`44828`: Avoid tkinter file dialog failure on macOS 12 Monterey when " +"using the Tk 8.6.11 provided by python.org macOS installers. Patch by Marc " +"Culler of the Tk project." +msgstr "" + +#: ../../../build/NEWS:1653 +msgid "" +":issue:`45296`: On Windows, change exit/quit message to suggest Ctrl-D, " +"which works, instead of , which does not work in IDLE." +msgstr "" + +#: ../../../build/NEWS:1659 +msgid "" +":issue:`44687`: :meth:`BufferedReader.peek` no longer raises " +":exc:`ValueError` when the entire file has already been buffered." +msgstr "" + +#: ../../../build/NEWS:1662 +msgid "" +":issue:`44751`: Remove ``crypt.h`` include from the public ``Python.h`` " +"header." +msgstr "" + +#: ../../../build/NEWS:1666 +msgid "Python 3.9.7 final" +msgstr "" + +#: ../../../build/NEWS:1668 +msgid "*Release date: 2021-08-30*" +msgstr "" + +#: ../../../build/NEWS:1673 +msgid "" +":issue:`42278`: Replaced usage of :func:`tempfile.mktemp` with " +":class:`~tempfile.TemporaryDirectory` to avoid a potential race condition." +msgstr "" + +#: ../../../build/NEWS:1676 +msgid "" +":issue:`41180`: Add auditing events to the :mod:`marshal` module, and stop " +"raising ``code.__init__`` events for every unmarshalled code object. " +"Directly instantiated code objects will continue to raise an event, and " +"audit event handlers should inspect or collect the raw marshal data. This " +"reduces a significant performance overhead when loading from ``.pyc`` files." +msgstr "" + +#: ../../../build/NEWS:1683 +msgid "" +":issue:`44394`: Update the vendored copy of libexpat to 2.4.1 (from 2.2.8) " +"to get the fix for the CVE-2013-0340 \"Billion Laughs\" vulnerability. This " +"copy is most used on Windows and macOS." +msgstr "" + +#: ../../../build/NEWS:1687 +msgid "" +":issue:`43124`: Made the internal ``putcmd`` function in :mod:`smtplib` " +"sanitize input for presence of ``\\r`` and ``\\n`` characters to avoid " +"(unlikely) command injection." +msgstr "" + +#: ../../../build/NEWS:1694 +msgid "" +":issue:`45018`: Fixed pickling of range iterators that iterated for over " +"2**32 times." +msgstr "" + +#: ../../../build/NEWS:1697 +msgid "" +":issue:`44962`: Fix a race in WeakKeyDictionary, WeakValueDictionary and " +"WeakSet when two threads attempt to commit the last pending removal. This " +"fixes asyncio.create_task and fixes a data loss in asyncio.run where " +"shutdown_asyncgens is not run" +msgstr "" + +#: ../../../build/NEWS:1702 +msgid "" +":issue:`44954`: Fixed a corner case bug where the result of " +"``float.fromhex('0x.8p-1074')`` was rounded the wrong way." +msgstr "" + +#: ../../../build/NEWS:1705 +msgid "" +":issue:`44947`: Refine the syntax error for trailing commas in import " +"statements. Patch by Pablo Galindo." +msgstr "" + +#: ../../../build/NEWS:1708 +msgid "" +":issue:`44698`: Restore behaviour of complex exponentiation with integer-" +"valued exponent of type :class:`float` or :class:`complex`." +msgstr "" + +#: ../../../build/NEWS:1711 +msgid "" +":issue:`44885`: Correct the ast locations of f-strings with format specs and" +" repeated expressions. Patch by Pablo Galindo" +msgstr "" + +#: ../../../build/NEWS:1714 +msgid "" +":issue:`44872`: Use new trashcan macros (Py_TRASHCAN_BEGIN/END) in " +"frameobject.c instead of the old ones (Py_TRASHCAN_SAFE_BEGIN/END)." +msgstr "" + +#: ../../../build/NEWS:1717 +msgid "" +":issue:`33930`: Fix segmentation fault with deep recursion when cleaning " +"method objects. Patch by Augusto Goulart and Pablo Galindo." +msgstr "" + +#: ../../../build/NEWS:1720 +msgid "" +":issue:`25782`: Fix bug where ``PyErr_SetObject`` hangs when the current " +"exception has a cycle in its context chain." +msgstr "" + +#: ../../../build/NEWS:1723 +msgid "" +":issue:`44856`: Fix reference leaks in the error paths of ``update_bases()``" +" and ``__build_class__``. Patch by Pablo Galindo." +msgstr "" + +#: ../../../build/NEWS:1726 +msgid "" +":issue:`44698`: Fix undefined behaviour in complex object exponentiation." +msgstr "" + +#: ../../../build/NEWS:1728 +msgid "" +":issue:`44562`: Remove uses of :c:func:`PyObject_GC_Del` in error path when " +"initializing :class:`types.GenericAlias`." +msgstr "" + +#: ../../../build/NEWS:1731 +msgid "" +":issue:`44523`: Remove the pass-through for :func:`hash` of " +":class:`weakref.proxy` objects to prevent unintended consequences when the " +"original referred object dies while the proxy is part of a hashable object. " +"Patch by Pablo Galindo." +msgstr "" + +#: ../../../build/NEWS:1736 +msgid "" +":issue:`44472`: Fix ltrace functionality when exceptions are raised. Patch " +"by Pablo Galindo" +msgstr "" + +#: ../../../build/NEWS:1739 +msgid "" +":issue:`44184`: Fix a crash at Python exit when a deallocator function " +"removes the last strong reference to a heap type. Patch by Victor Stinner." +msgstr "" + +#: ../../../build/NEWS:1742 +msgid "" +":issue:`39091`: Fix crash when using passing a non-exception to a " +"generator's ``throw()`` method. Patch by Noah Oxer" +msgstr "" + +#: ../../../build/NEWS:1748 +msgid "" +":issue:`41620`: :meth:`~unittest.TestCase.run` now always return a " +":class:`~unittest.TestResult` instance. Previously it returned ``None`` if " +"the test class or method was decorated with a skipping decorator." +msgstr "" + +#: ../../../build/NEWS:1752 +msgid "" +":issue:`43913`: Fix bugs in cleaning up classes and modules in " +":mod:`unittest`:" +msgstr "" + +#: ../../../build/NEWS:1754 +msgid "" +"Functions registered with :func:`~unittest.addModuleCleanup` were not called" +" unless the user defines ``tearDownModule()`` in their test module." +msgstr "" + +#: ../../../build/NEWS:1755 +msgid "" +"Functions registered with :meth:`~unittest.TestCase.addClassCleanup` were " +"not called if ``tearDownClass`` is set to ``None``." +msgstr "" + +#: ../../../build/NEWS:1756 +msgid "" +"Buffering in :class:`~unittest.TestResult` did not work with functions " +"registered with ``addClassCleanup()`` and ``addModuleCleanup()``." +msgstr "" + +#: ../../../build/NEWS:1757 +msgid "" +"Errors in functions registered with ``addClassCleanup()`` and " +"``addModuleCleanup()`` were not handled correctly in buffered and debug " +"modes." +msgstr "" + +#: ../../../build/NEWS:1758 +msgid "" +"Errors in ``setUpModule()`` and functions registered with " +"``addModuleCleanup()`` were reported in wrong order." +msgstr "" + +#: ../../../build/NEWS:1759 +msgid "And several lesser bugs." +msgstr "" + +#: ../../../build/NEWS:1761 +msgid "" +":issue:`45001`: Made email date parsing more robust against malformed input," +" namely a whitespace-only ``Date:`` header. Patch by Wouter Bolsterlee." +msgstr "" + +#: ../../../build/NEWS:1764 +msgid "" +":issue:`44449`: Fix a crash in the signal handler of the :mod:`faulthandler`" +" module: no longer modify the reference count of frame objects. Patch by " +"Victor Stinner." +msgstr "" + +#: ../../../build/NEWS:1768 +msgid "" +":issue:`44955`: Method :meth:`~unittest.TestResult.stopTestRun` is now " +"always called in pair with method :meth:`~unittest.TestResult.startTestRun` " +"for :class:`~unittest.TestResult` objects implicitly created in " +":meth:`~unittest.TestCase.run`. Previously it was not called for test " +"methods and classes decorated with a skipping decorator." +msgstr "" + +#: ../../../build/NEWS:1774 +msgid "" +":issue:`38956`: :class:`argparse.BooleanOptionalAction`'s default value is " +"no longer printed twice when used with " +":class:`argparse.ArgumentDefaultsHelpFormatter`." +msgstr "" + +#: ../../../build/NEWS:1778 +msgid ":issue:`44581`: Upgrade bundled pip to 21.2.3 and setuptools to 57.4.0" +msgstr "" + +#: ../../../build/NEWS:1780 +msgid "" +":issue:`44849`: Fix the :func:`os.set_inheritable` function on FreeBSD 14 " +"for file descriptor opened with the :data:`~os.O_PATH` flag: ignore the " +":data:`~errno.EBADF` error on ``ioctl()``, fallback on the ``fcntl()`` " +"implementation. Patch by Victor Stinner." +msgstr "" + +#: ../../../build/NEWS:1785 +msgid "" +":issue:`44605`: The @functools.total_ordering() decorator now works with " +"metaclasses." +msgstr "" + +#: ../../../build/NEWS:1788 +msgid "" +":issue:`44822`: :mod:`sqlite3` user-defined functions and aggregators " +"returning :class:`strings ` with embedded NUL characters are no longer " +"truncated. Patch by Erlend E. Aasland." +msgstr "" + +#: ../../../build/NEWS:1792 +msgid "" +":issue:`44815`: Always show ``loop=`` arg deprecations in " +":func:`asyncio.gather` and :func:`asyncio.sleep`" +msgstr "" + +#: ../../../build/NEWS:1795 +msgid "" +":issue:`44806`: Non-protocol subclasses of :class:`typing.Protocol` ignore " +"now the ``__init__`` method inherited from protocol base classes." +msgstr "" + +#: ../../../build/NEWS:1798 +msgid "" +":issue:`44667`: The :func:`tokenize.tokenize` doesn't incorrectly generate a" +" ``NEWLINE`` token if the source doesn't end with a new line character but " +"the last line is a comment, as the function is already generating a ``NL`` " +"token. Patch by Pablo Galindo" +msgstr "" + +#: ../../../build/NEWS:1803 +msgid "" +":issue:`42853`: Fix ``http.client.HTTPSConnection`` fails to download >2GiB " +"data." +msgstr "" + +#: ../../../build/NEWS:1806 +msgid "" +":issue:`44752`: :mod:`rcompleter` does not call :func:`getattr` on " +":class:`property` objects to avoid the side-effect of evaluating the " +"corresponding method." +msgstr "" + +#: ../../../build/NEWS:1810 +msgid "" +":issue:`44720`: ``weakref.proxy`` objects referencing non-iterators now " +"raise ``TypeError`` rather than dereferencing the null ``tp_iternext`` slot " +"and crashing." +msgstr "" + +#: ../../../build/NEWS:1814 +msgid "" +":issue:`44704`: The implementation of ``collections.abc.Set._hash()`` now " +"matches that of ``frozenset.__hash__()``." +msgstr "" + +#: ../../../build/NEWS:1817 +msgid "" +":issue:`44666`: Fixed issue in :func:`compileall.compile_file` when " +"``sys.stdout`` is redirected. Patch by Stefan Hölzl." +msgstr "" + +#: ../../../build/NEWS:1820 +msgid "" +":issue:`40897`: Give priority to using the current class constructor in " +":func:`inspect.signature`. Patch by Weipeng Hong." +msgstr "" + +#: ../../../build/NEWS:1823 +msgid "" +":issue:`44608`: Fix memory leak in :func:`_tkinter._flatten` if it is called" +" with a sequence or set, but not list or tuple." +msgstr "" + +#: ../../../build/NEWS:1826 +msgid "" +":issue:`41928`: Update :func:`shutil.copyfile` to raise " +":exc:`FileNotFoundError` instead of confusing :exc:`IsADirectoryError` when " +"a path ending with a :const:`os.path.sep` does not exist; " +":func:`shutil.copy` and :func:`shutil.copy2` are also affected." +msgstr "" + +#: ../../../build/NEWS:1831 +msgid "" +":issue:`44566`: handle StopIteration subclass raised from " +"@contextlib.contextmanager generator" +msgstr "" + +#: ../../../build/NEWS:1834 +msgid "" +":issue:`44558`: Make the implementation consistency of " +":func:`~operator.indexOf` between C and Python versions. Patch by Dong-hee " +"Na." +msgstr "" + +#: ../../../build/NEWS:1838 +msgid "" +":issue:`41249`: Fixes ``TypedDict`` to work with ``typing.get_type_hints()``" +" and postponed evaluation of annotations across modules." +msgstr "" + +#: ../../../build/NEWS:1841 +msgid "" +":issue:`44461`: Fix bug with :mod:`pdb`'s handling of import error due to a " +"package which does not have a ``__main__`` module" +msgstr "" + +#: ../../../build/NEWS:1844 +msgid "" +":issue:`42892`: Fixed an exception thrown while parsing a malformed " +"multipart email by :class:`email.message.EmailMessage`." +msgstr "" + +#: ../../../build/NEWS:1847 +msgid "" +":issue:`27827`: :meth:`pathlib.PureWindowsPath.is_reserved` now identifies a" +" greater range of reserved filenames, including those with trailing spaces " +"or colons." +msgstr "" + +#: ../../../build/NEWS:1851 +msgid "" +":issue:`34266`: Handle exceptions from parsing the arg of :mod:`pdb`'s " +"run/restart command." +msgstr "" + +#: ../../../build/NEWS:1854 +msgid "" +":issue:`27334`: The :mod:`sqlite3` context manager now performs a rollback " +"(thus releasing the database lock) if commit failed. Patch by Luca Citi and" +" Erlend E. Aasland." +msgstr "" + +#: ../../../build/NEWS:1858 +msgid "" +":issue:`43853`: Improved string handling for :mod:`sqlite3` user-defined " +"functions and aggregates:" +msgstr "" + +#: ../../../build/NEWS:1861 +msgid "" +"It is now possible to pass strings with embedded null characters to UDFs" +msgstr "" + +#: ../../../build/NEWS:1862 +msgid "Conversion failures now correctly raise :exc:`MemoryError`" +msgstr "" + +#: ../../../build/NEWS:1864 +msgid "Patch by Erlend E. Aasland." +msgstr "" + +#: ../../../build/NEWS:1866 +msgid "" +":issue:`43048`: Handle `RecursionError` in " +":class:`~traceback.TracebackException`'s constructor, so that long " +"exceptions chains are truncated instead of causing traceback formatting to " +"fail." +msgstr "" + +#: ../../../build/NEWS:1871 +msgid "" +":issue:`41402`: Fix :meth:`email.message.EmailMessage.set_content` when " +"called with binary data and ``7bit`` content transfer encoding." +msgstr "" + +#: ../../../build/NEWS:1874 +msgid "" +":issue:`32695`: The *compresslevel* and *preset* keyword arguments of " +":func:`tarfile.open` are now both documented and tested." +msgstr "" + +#: ../../../build/NEWS:1877 +msgid "" +":issue:`34990`: Fixed a Y2k38 bug in the compileall module where it would " +"fail to compile files with a modification time after the year 2038." +msgstr "" + +#: ../../../build/NEWS:1880 +msgid "" +":issue:`38840`: Fix ``test___all__`` on platforms lacking a shared memory " +"implementation." +msgstr "" + +#: ../../../build/NEWS:1883 +msgid "" +":issue:`30256`: Pass multiprocessing BaseProxy argument ``manager_owned`` " +"through AutoProxy." +msgstr "" + +#: ../../../build/NEWS:1886 +msgid "" +":issue:`27513`: :func:`email.utils.getaddresses` now accepts " +":class:`email.header.Header` objects along with string values. Patch by " +"Zackery Spytz." +msgstr "" + +#: ../../../build/NEWS:1890 +msgid ":issue:`33349`: lib2to3 now recognizes async generators everywhere." +msgstr "" + +#: ../../../build/NEWS:1892 +msgid "" +":issue:`29298`: Fix ``TypeError`` when required subparsers without ``dest`` " +"do not receive arguments. Patch by Anthony Sottile." +msgstr "" + +#: ../../../build/NEWS:1898 +msgid "" +":issue:`44903`: Removed the othergui.rst file, any references to it, and the" +" list of GUI frameworks in the FAQ. In their place I've added links to the " +"Python Wiki `page on GUI frameworks " +"`." +msgstr "" + +#: ../../../build/NEWS:1903 +msgid "" +":issue:`44693`: Update the definition of __future__ in the glossary by " +"replacing the confusing word \"pseudo-module\" with a more accurate " +"description." +msgstr "" + +#: ../../../build/NEWS:1907 +msgid ":issue:`35183`: Add typical examples to os.path.splitext docs" +msgstr "" + +#: ../../../build/NEWS:1909 +msgid "" +":issue:`30511`: Clarify that :func:`shutil.make_archive` is not thread-safe " +"due to reliance on changing the current working directory." +msgstr "" + +#: ../../../build/NEWS:1912 +msgid "" +":issue:`44561`: Update of three expired hyperlinks in " +"Doc/distributing/index.rst: \"Project structure\", \"Building and packaging " +"the project\", and \"Uploading the project to the Python Packaging Index\"." +msgstr "" + +#: ../../../build/NEWS:1916 +msgid "" +":issue:`42958`: Updated the docstring and docs of :func:`filecmp.cmp` to be " +"more accurate and less confusing especially in respect to *shallow* arg." +msgstr "" + +#: ../../../build/NEWS:1919 +msgid "" +":issue:`44558`: Match the docstring and python implementation of " +":func:`~operator.countOf` to the behavior of its c implementation." +msgstr "" + +#: ../../../build/NEWS:1922 +msgid "" +":issue:`44544`: List all kwargs for :func:`textwrap.wrap`, " +":func:`textwrap.fill`, and :func:`textwrap.shorten`. Now, there are nav " +"links to attributes of :class:`TextWrap`, which makes navigation much easier" +" while minimizing duplication in the documentation." +msgstr "" + +#: ../../../build/NEWS:1927 +msgid "" +":issue:`38062`: Clarify that atexit uses equality comparisons internally." +msgstr "" + +#: ../../../build/NEWS:1929 +msgid "" +":issue:`43066`: Added a warning to :mod:`zipfile` docs: filename arg with a " +"leading slash may cause archive to be un-openable on Windows systems." +msgstr "" + +#: ../../../build/NEWS:1932 +msgid ":issue:`27752`: Documentation of csv.Dialect is more descriptive." +msgstr "" + +#: ../../../build/NEWS:1934 +msgid "" +":issue:`44453`: Fix documentation for the return type of " +":func:`sysconfig.get_path`." +msgstr "" + +#: ../../../build/NEWS:1937 +msgid "" +":issue:`39498`: Add a \"Security Considerations\" index which links to " +"standard library modules that have explicitly documented security " +"considerations." +msgstr "" + +#: ../../../build/NEWS:1940 +msgid "" +":issue:`33479`: Remove the unqualified claim that tkinter is threadsafe. It " +"has not been true for several years and likely never was. An explanation of " +"what is true may be added later, after more discussion, and possibly after " +"patching _tkinter.c," +msgstr "" + +#: ../../../build/NEWS:1948 +msgid "" +":issue:`25130`: Add calls of :func:`gc.collect` in tests to support PyPy." +msgstr "" + +#: ../../../build/NEWS:1950 +msgid "" +":issue:`45011`: Made tests relying on the :mod:`_asyncio` C extension module" +" optional to allow running on alternative Python implementations. Patch by " +"Serhiy Storchaka." +msgstr "" + +#: ../../../build/NEWS:1954 +msgid "" +":issue:`44949`: Fix auto history tests of test_readline: sometimes, the " +"newline character is not written at the end, so don't expect it in the " +"output." +msgstr "" + +#: ../../../build/NEWS:1957 +msgid "" +":issue:`44852`: Add ability to wholesale silence DeprecationWarnings while " +"running the regression test suite." +msgstr "" + +#: ../../../build/NEWS:1960 +msgid "" +":issue:`40928`: Notify users running test_decimal regression tests on macOS " +"of potential harmless \"malloc can't allocate region\" messages spewed by " +"test_decimal." +msgstr "" + +#: ../../../build/NEWS:1964 +msgid ":issue:`44734`: Fixed floating point precision issue in turtle tests." +msgstr "" + +#: ../../../build/NEWS:1966 +msgid "" +":issue:`44708`: Regression tests, when run with -w, are now re-running only " +"the affected test methods instead of re-running the entire test file." +msgstr "" + +#: ../../../build/NEWS:1969 +msgid "" +":issue:`30256`: Add test for nested queues when using ``multiprocessing`` " +"shared objects ``AutoProxy[Queue]`` inside ``ListProxy`` and ``DictProxy``" +msgstr "" + +#: ../../../build/NEWS:1975 +msgid "" +":issue:`44535`: Enable building using a Visual Studio 2022 install on " +"Windows." +msgstr "" + +#: ../../../build/NEWS:1977 +msgid "" +":issue:`43298`: Improved error message when building without a Windows SDK " +"installed." +msgstr "" + +#: ../../../build/NEWS:1983 +msgid ":issue:`45007`: Update to OpenSSL 1.1.1l in Windows build" +msgstr "" + +#: ../../../build/NEWS:1985 +msgid "" +":issue:`44572`: Avoid consuming standard input in the :mod:`platform` module" +msgstr "" + +#: ../../../build/NEWS:1987 +msgid "" +":issue:`40263`: This is a follow-on bug from " +"https://bugs.python.org/issue26903. Once that is applied we run into an off-" +"by-one assertion problem. The assert was not correct." +msgstr "" + +#: ../../../build/NEWS:1994 +msgid ":issue:`45007`: Update macOS installer builds to use OpenSSL 1.1.1l." +msgstr "" + +#: ../../../build/NEWS:1996 +msgid "" +":issue:`44689`: :meth:`ctypes.util.find_library` now works correctly on " +"macOS 11 Big Sur even if Python is built on an older version of macOS. " +"Previously, when built on older macOS systems, ``find_library`` was not able" +" to find macOS system libraries when running on Big Sur due to changes in " +"how system libraries are stored." +msgstr "" + +#: ../../../build/NEWS:2004 +msgid "Python 3.9.6 final" +msgstr "Python 3.9.6 最终版" + +#: ../../../build/NEWS:2006 +msgid "*Release date: 2021-06-28*" +msgstr "*发布日期: 2021-06-28*" + +#: ../../../build/NEWS:2011 +msgid "" +":issue:`44022`: mod:`http.client` now avoids infinitely reading potential " +"HTTP headers after a ``100 Continue`` status response from the server." +msgstr "" + +#: ../../../build/NEWS:2017 +msgid "" +":issue:`44409`: Fix error location information for tokenizer errors raised " +"on initialization of the tokenizer. Patch by Pablo Galindo." +msgstr "" + +#: ../../../build/NEWS:2020 +msgid "" +":issue:`43667`: Improve Unicode support in non-UTF locales on Oracle " +"Solaris. This issue does not affect other Solaris systems." +msgstr "" + +#: ../../../build/NEWS:2023 +msgid "" +":issue:`44168`: Fix error message in the parser involving keyword arguments " +"with invalid expressions. Patch by Pablo Galindo" +msgstr "" + +#: ../../../build/NEWS:2026 +msgid "" +":issue:`44114`: Fix incorrect dictkeys_reversed and dictitems_reversed " +"function signatures in C code, which broke webassembly builds." +msgstr "" + +#: ../../../build/NEWS:2029 +msgid "" +":issue:`44070`: No longer eagerly makes import filenames absolute, except " +"for extension modules, which was introduced in 3.9.5." +msgstr "" + +#: ../../../build/NEWS:2032 +msgid ":issue:`28146`: Fix a confusing error message in :func:`str.format`." +msgstr "" + +#: ../../../build/NEWS:2034 +msgid "" +":issue:`11105`: When compiling :class:`ast.AST` objects with recursive " +"references through :func:`compile`, the interpreter doesn't crash anymore " +"instead it raises a :exc:`RecursionError`." +msgstr "" + +#: ../../../build/NEWS:2041 +msgid ":issue:`44516`: Update vendored pip to 21.1.3" +msgstr "" + +#: ../../../build/NEWS:2043 +msgid "" +":issue:`44482`: Fix very unlikely resource leak in :mod:`glob` in alternate " +"Python implementations." +msgstr "" + +#: ../../../build/NEWS:2046 +msgid "" +":issue:`44439`: Fix in :meth:`bz2.BZ2File.write` / " +":meth:`lzma.LZMAFile.write` methods, when the input data is an object that " +"supports the buffer protocol, the file length may be wrong." +msgstr "" + +#: ../../../build/NEWS:2050 +msgid "" +":issue:`44434`: _thread.start_new_thread() no longer calls " +"PyThread_exit_thread() explicitly at the thread exit, the call was " +"redundant. On Linux with the glibc, pthread_exit() aborts the whole process " +"if dlopen() fails to open libgcc_s.so file (ex: EMFILE error). Patch by " +"Victor Stinner." +msgstr "" + +#: ../../../build/NEWS:2056 +msgid "" +":issue:`44422`: The :func:`threading.enumerate` function now uses a " +"reentrant lock to prevent a hang on reentrant call. Patch by Victor Stinner." +msgstr "" + +#: ../../../build/NEWS:2059 +msgid "" +":issue:`44395`: Fix :meth:`~email.message.MIMEPart.as_string` to pass " +"unixfrom properly. Patch by Dong-hee Na." +msgstr "" + +#: ../../../build/NEWS:2062 +msgid "" +":issue:`44342`: [Enum] Be more robust in searching for pickle support before" +" making an enum class unpicklable." +msgstr "" + +#: ../../../build/NEWS:2065 +msgid "" +":issue:`44356`: [Enum] Allow multiple data-type mixins if they are all the " +"same." +msgstr "" + +#: ../../../build/NEWS:2068 +msgid "" +":issue:`44254`: On Mac, give turtledemo button text a color that works on " +"both light or dark background. Programmers cannot control the latter." +msgstr "" + +#: ../../../build/NEWS:2071 +msgid "" +":issue:`44145`: :mod:`hmac` computations were not releasing the GIL while " +"calling the OpenSSL ``HMAC_Update`` C API (a new feature in 3.9). This " +"unintentionally prevented parallel computation as other :mod:`hashlib` " +"algorithms support." +msgstr "" + +#: ../../../build/NEWS:2076 +msgid "" +":issue:`37788`: Fix a reference leak when a Thread object is never joined." +msgstr "" + +#: ../../../build/NEWS:2078 +msgid "" +":issue:`44061`: Fix regression in previous release when calling " +":func:`pkgutil.iter_modules` with a list of :class:`pathlib.Path` objects" +msgstr "" + +#: ../../../build/NEWS:2081 +msgid "" +":issue:`36515`: The :mod:`hashlib` module no longer does unaligned memory " +"accesses when compiled for ARM platforms." +msgstr "" + +#: ../../../build/NEWS:2084 +msgid ":issue:`44018`: random.seed() no longer mutates bytearray inputs." +msgstr "" + +#: ../../../build/NEWS:2086 +msgid "" +":issue:`38352`: Add ``IO``, ``BinaryIO``, ``TextIO``, ``Match``, and " +"``Pattern`` to ``typing.__all__``. Patch by Jelle Zijlstra." +msgstr "" + +#: ../../../build/NEWS:2089 +msgid "" +":issue:`43972`: When :class:`http.server.SimpleHTTPRequestHandler` sends a " +"``301 (Moved Permanently)`` for a directory path not ending with `/`, add a " +"``Content-Length: 0`` header. This improves the behavior for certain " +"clients." +msgstr "" + +#: ../../../build/NEWS:2094 +msgid "" +":issue:`28528`: Fix a bug in :mod:`pdb` where :meth:`~pdb.Pdb.checkline` " +"raises :exc:`AttributeError` if it is called after :meth:`~pdb.Pdb.reset`." +msgstr "" + +#: ../../../build/NEWS:2097 +msgid "" +":issue:`43776`: When :class:`subprocess.Popen` args are provided as a string" +" or as :class:`pathlib.Path`, the Popen instance repr now shows the right " +"thing." +msgstr "" + +#: ../../../build/NEWS:2101 +msgid "" +":issue:`43666`: AIX: `Lib/_aix_support.get_platform()` may fail in an AIX " +"WPAR. The fileset bos.rte appears to have a builddate in both LPAR and WPAR " +"so this fileset is queried rather than bos.mp64. To prevent a similiar " +"situation (no builddate in ODM) a value (9988) sufficient for completing a " +"build is provided. Patch by M Felt." +msgstr "" + +#: ../../../build/NEWS:2107 +msgid "" +":issue:`43650`: Fix :exc:`MemoryError` in :func:`shutil.unpack_archive` " +"which fails inside :func:`shutil._unpack_zipfile` on large files. Patch by " +"Igor Bolshakov." +msgstr "" + +#: ../../../build/NEWS:2111 +msgid "" +":issue:`43318`: Fix a bug where :mod:`pdb` does not always echo cleared " +"breakpoints." +msgstr "" + +#: ../../../build/NEWS:2114 +msgid "" +":issue:`43295`: :meth:`datetime.datetime.strptime` now raises ``ValueError``" +" instead of ``IndexError`` when matching ``'z'`` with the ``%z`` format " +"specifier." +msgstr "" + +#: ../../../build/NEWS:2118 +msgid "" +":issue:`37022`: :mod:`pdb` now displays exceptions from ``repr()`` with its " +"``p`` and ``pp`` commands." +msgstr "" + +#: ../../../build/NEWS:2124 +msgid "" +":issue:`40620`: Convert examples in tutorial controlflow.rst section 4.3 to " +"be interpreter-demo style." +msgstr "" + +#: ../../../build/NEWS:2127 +msgid "" +":issue:`13814`: In the Design FAQ, answer \"Why don't generators support the" +" with statement?\"" +msgstr "" + +#: ../../../build/NEWS:2130 +msgid "" +":issue:`44392`: Added a new section in the C API documentation for types " +"used in type hinting. Documented ``Py_GenericAlias`` and " +"``Py_GenericAliasType``." +msgstr "" + +#: ../../../build/NEWS:2134 +msgid "" +":issue:`38291`: Mark ``typing.io`` and ``typing.re`` as deprecated since " +"Python 3.8 in the documentation. They were never properly supported by type " +"checkers." +msgstr "" + +#: ../../../build/NEWS:2138 +msgid "" +":issue:`44322`: Document that SyntaxError args have a details tuple and that" +" details are adjusted for errors in f-string field replacement expressions." +msgstr "" + +#: ../../../build/NEWS:2141 +msgid "" +":issue:`44195`: Corrected references to ``TraversableResources`` in docs. " +"There is no ``TraversableReader``." +msgstr "" + +#: ../../../build/NEWS:2144 +msgid "" +":issue:`41963`: Document that ``ConfigParser`` strips off comments when " +"reading configuration files." +msgstr "" + +#: ../../../build/NEWS:2147 +msgid "" +":issue:`44072`: Correct where in the numeric ABC hierarchy ``**`` support is" +" added, i.e., in numbers.Complex, not numbers.Integral." +msgstr "" + +#: ../../../build/NEWS:2150 +msgid "" +":issue:`43558`: Add the remark to :mod:`dataclasses` documentation that the " +":meth:`__init__` of any base class has to be called in " +":meth:`__post_init__`, along with a code example." +msgstr "" + +#: ../../../build/NEWS:2154 +msgid "" +":issue:`41621`: Document that :class:`collections.defaultdict` parameter " +"``default_factory`` defaults to None and is positional-only." +msgstr "" + +#: ../../../build/NEWS:2160 +msgid "" +":issue:`44287`: Fix asyncio test_popen() of test_windows_utils by using a " +"longer timeout. Use military grade battle-tested " +":data:`test.support.SHORT_TIMEOUT` timeout rather than a hardcoded timeout " +"of 10 seconds: it's 30 seconds by default, but it is made longer on slow " +"buildbots. Patch by Victor Stinner." +msgstr "" + +#: ../../../build/NEWS:2166 +msgid "" +":issue:`44363`: Account for address sanitizer in test_capi. test_capi now " +"passes when run GCC address sanitizer." +msgstr "" + +#: ../../../build/NEWS:2172 +msgid "" +":issue:`44381`: The Windows build now accepts " +":envvar:`EnableControlFlowGuard` set to ``guard`` to enable CFG." +msgstr "" + +#: ../../../build/NEWS:2178 +msgid "" +":issue:`41299`: Fix 16ms jitter when using timeouts in :mod:`threading`, " +"such as with :meth:`threading.Lock.acquire` or " +":meth:`threading.Condition.wait`." +msgstr "" + +#: ../../../build/NEWS:2185 +msgid "" +":issue:`43568`: Relax unnecessarily restrictive MACOSX_DEPLOYMENT_TARGET " +"check when building extension modules for macOS. Patch by Joshua Root." +msgstr "" + +#: ../../../build/NEWS:2188 +msgid "" +":issue:`43109`: Allow --with-lto configure option to work with Apple-" +"supplied Xcode or Command Line Tools." +msgstr "" + +#: ../../../build/NEWS:2194 +msgid "" +":issue:`40128`: Mostly fix completions on macOS when not using tcl/tk 8.6.11" +" (as with 3.9). The added update_idletask call should be harmless and " +"possibly helpful otherwise." +msgstr "" + +#: ../../../build/NEWS:2198 +msgid "" +":issue:`33962`: Move the indent space setting from the Font tab to the new " +"Windows tab. Patch by Mark Roseman and Terry Jan Reedy." +msgstr "" + +#: ../../../build/NEWS:2201 +msgid "" +":issue:`40468`: Split the settings dialog General tab into Windows and " +"Shell/ED tabs. Move help sources, which extend the Help menu, to the " +"Extensions tab. Make space for new options and shorten the dialog. The " +"latter makes the dialog better fit small screens." +msgstr "" + +#: ../../../build/NEWS:2206 +msgid "" +":issue:`41611`: Avoid uncaught exceptions in " +"``AutoCompleteWindow.winconfig_event()``." +msgstr "" + +#: ../../../build/NEWS:2209 +msgid "" +":issue:`41611`: Fix IDLE sometimes freezing upon tab-completion on macOS." +msgstr "" + +#: ../../../build/NEWS:2214 +msgid "" +":issue:`44074`: Make patchcheck automatically detect the correct base branch" +" name (previously it was hardcoded to 'master')" +msgstr "" + +#: ../../../build/NEWS:2220 +msgid "" +":issue:`44441`: :c:func:`Py_RunMain` now resets :c:data:`PyImport_Inittab` " +"to its initial value at exit. It must be possible to call " +":c:func:`PyImport_AppendInittab` or :c:func:`PyImport_ExtendInittab` at each" +" Python initialization. Patch by Victor Stinner." +msgstr "" + +#: ../../../build/NEWS:2225 +msgid "" +":issue:`42083`: Fix crash in :c:func:`PyStructSequence_NewType` when passed " +"``NULL`` in the documentation string slot." +msgstr "" + +#: ../../../build/NEWS:2230 +msgid "Python 3.9.5 final" +msgstr "Python 3.9.5 最终版" + +#: ../../../build/NEWS:2232 +msgid "*Release date: 2021-05-03*" +msgstr "*发布日期: 2021-05-03*" + +#: ../../../build/NEWS:2237 +msgid "" +":issue:`43434`: Creating a :class:`sqlite3.Connection` object now also " +"produces a ``sqlite3.connect`` :ref:`auditing event `. Previously " +"this event was only produced by :func:`sqlite3.connect` calls. Patch by " +"Erlend E. Aasland." +msgstr "" + +#: ../../../build/NEWS:2242 +msgid "" +":issue:`43882`: The presence of newline or tab characters in parts of a URL " +"could allow some forms of attacks." +msgstr "" + +#: ../../../build/NEWS:2245 +msgid "" +"Following the controlling specification for URLs defined by WHATWG " +":func:`urllib.parse` now removes ASCII newlines and tabs from URLs, " +"preventing such attacks." +msgstr "" + +#: ../../../build/NEWS:2249 +msgid "" +":issue:`43472`: Ensures interpreter-level audit hooks receive the " +"``cpython.PyInterpreterState_New`` event when called through the " +"``_xxsubinterpreters`` module." +msgstr "" + +#: ../../../build/NEWS:2253 +msgid "" +":issue:`36384`: :mod:`ipaddress` module no longer accepts any leading zeros " +"in IPv4 address strings. Leading zeros are ambiguous and interpreted as " +"octal notation by some libraries. For example the legacy function " +":func:`socket.inet_aton` treats leading zeros as octal notatation. glibc " +"implementation of modern :func:`~socket.inet_pton` does not accept any " +"leading zeros. For a while the :mod:`ipaddress` module used to accept " +"ambiguous leading zeros." +msgstr "" + +#: ../../../build/NEWS:2261 +msgid "" +":issue:`43075`: Fix Regular Expression Denial of Service (ReDoS) " +"vulnerability in :class:`urllib.request.AbstractBasicAuthHandler`. The " +"ReDoS-vulnerable regex has quadratic worst-case complexity and it allows " +"cause a denial of service when identifying crafted invalid RFCs. This ReDoS " +"issue is on the client side and needs remote attackers to control the HTTP " +"server." +msgstr "" + +#: ../../../build/NEWS:2267 +msgid "" +":issue:`42800`: Audit hooks are now fired for frame.f_code, " +"traceback.tb_frame, and generator code/frame attribute access." +msgstr "" + +#: ../../../build/NEWS:2273 +msgid "" +":issue:`43105`: Importlib now resolves relative paths when creating module " +"spec objects from file locations." +msgstr "" + +#: ../../../build/NEWS:2276 +msgid "" +":issue:`42924`: Fix ``bytearray`` repetition incorrectly copying data from " +"the start of the buffer, even if the data is offset within the buffer (e.g. " +"after reassigning a slice at the start of the ``bytearray`` to a shorter " +"byte string)." +msgstr "" + +#: ../../../build/NEWS:2284 +msgid ":issue:`43993`: Update bundled pip to 21.1.1." +msgstr "" + +#: ../../../build/NEWS:2286 +msgid "" +":issue:`43937`: Fixed the :mod:`turtle` module working with non-default root" +" window." +msgstr "" + +#: ../../../build/NEWS:2289 +msgid ":issue:`43930`: Update bundled pip to 21.1 and setuptools to 56.0.0" +msgstr "" + +#: ../../../build/NEWS:2291 +msgid "" +":issue:`43920`: OpenSSL 3.0.0: :meth:`~ssl.SSLContext.load_verify_locations`" +" now returns a consistent error message when cadata contains no valid " +"certificate." +msgstr "" + +#: ../../../build/NEWS:2295 +msgid "" +":issue:`43607`: :mod:`urllib` can now convert Windows paths with ``\\\\?\\``" +" prefixes into URL paths." +msgstr "" + +#: ../../../build/NEWS:2298 +msgid "" +":issue:`43284`: platform.win32_ver derives the windows version from " +"sys.getwindowsversion().platform_version which in turn derives the version " +"from kernel32.dll (which can be of a different version than Windows itself)." +" Therefore change the platform.win32_ver to determine the version using the " +"platform module's _syscmd_ver private function to return an accurate " +"version." +msgstr "" + +#: ../../../build/NEWS:2305 +msgid "" +":issue:`42248`: [Enum] ensure exceptions raised in ``_missing_`` are " +"released." +msgstr "" + +#: ../../../build/NEWS:2307 +msgid "" +":issue:`43799`: OpenSSL 3.0.0: define ``OPENSSL_API_COMPAT`` 1.1.1 to " +"suppress deprecation warnings. Python requires OpenSSL 1.1.1 APIs." +msgstr "" + +#: ../../../build/NEWS:2310 +msgid "" +":issue:`43794`: Add :data:`ssl.OP_IGNORE_UNEXPECTED_EOF` constants (OpenSSL " +"3.0.0)" +msgstr "" + +#: ../../../build/NEWS:2313 +msgid "" +":issue:`43789`: OpenSSL 3.0.0: Don't call the password callback function a " +"second time when first call has signaled an error condition." +msgstr "" + +#: ../../../build/NEWS:2316 +msgid "" +":issue:`43788`: The header files for :mod:`ssl` error codes are now OpenSSL " +"version-specific. Exceptions will now show correct reason and library codes." +" The ``make_ssl_data.py`` script has been rewritten to use OpenSSL's text " +"file with error codes." +msgstr "" + +#: ../../../build/NEWS:2321 +msgid "" +":issue:`43655`: :mod:`tkinter` dialog windows are now recognized as dialogs " +"by window managers on macOS and X Window." +msgstr "" + +#: ../../../build/NEWS:2324 +msgid "" +":issue:`43534`: :func:`turtle.textinput` and :func:`turtle.numinput` create " +"now a transient window working on behalf of the canvas window." +msgstr "" + +#: ../../../build/NEWS:2327 +msgid "" +":issue:`43522`: Fix problem with " +":attr:`~ssl.SSLContext.hostname_checks_common_name`. OpenSSL does not copy " +"hostflags from *struct SSL_CTX* to *struct SSL*." +msgstr "" + +#: ../../../build/NEWS:2331 +msgid "" +":issue:`42967`: Allow :class:`bytes` ``separator`` argument in " +"``urllib.parse.parse_qs`` and ``urllib.parse.parse_qsl`` when parsing " +":class:`str` query strings. Previously, this raised a ``TypeError``." +msgstr "" + +#: ../../../build/NEWS:2335 +msgid "" +":issue:`43176`: Fixed processing of a dataclass that inherits from a frozen " +"dataclass with no fields. It is now correctly detected as an error." +msgstr "" + +#: ../../../build/NEWS:2338 +msgid "" +":issue:`41735`: Fix thread locks in zlib module may go wrong in rare case. " +"Patch by Ma Lin." +msgstr "" + +#: ../../../build/NEWS:2341 +msgid "" +":issue:`36470`: Fix dataclasses with ``InitVar``\\s and " +":func:`~dataclasses.replace()`. Patch by Claudiu Popa." +msgstr "" + +#: ../../../build/NEWS:2344 +msgid "" +":issue:`32745`: Fix a regression in the handling of ctypes' " +":data:`ctypes.c_wchar_p` type: embedded null characters would cause a " +":exc:`ValueError` to be raised. Patch by Zackery Spytz." +msgstr "" + +#: ../../../build/NEWS:2351 +msgid "" +":issue:`43959`: The documentation on the PyContextVar C-API was clarified." +msgstr "" + +#: ../../../build/NEWS:2353 +msgid "" +":issue:`43938`: Update dataclasses documentation to express that " +"FrozenInstanceError is derived from AttributeError." +msgstr "" + +#: ../../../build/NEWS:2356 +msgid "" +":issue:`43755`: Update documentation to reflect that unparenthesized lambda " +"expressions can no longer be the expression part in an ``if`` clause in " +"comprehensions and generator expressions since Python 3.9." +msgstr "" + +#: ../../../build/NEWS:2360 +msgid "" +":issue:`43739`: Fixing the example code in Doc/extending/extending.rst to " +"declare and initialize the pmodule variable to be of the right type." +msgstr "" + +#: ../../../build/NEWS:2366 +msgid "" +":issue:`43961`: Fix test_logging.test_namer_rotator_inheritance() on " +"Windows: use :func:`os.replace` rather than :func:`os.rename`. Patch by " +"Victor Stinner." +msgstr "" + +#: ../../../build/NEWS:2370 +msgid "" +":issue:`43842`: Fix a race condition in the SMTP test of test_logging. Don't" +" close a file descriptor (socket) from a different thread while " +"asyncore.loop() is polling the file descriptor. Patch by Victor Stinner." +msgstr "" + +#: ../../../build/NEWS:2374 +msgid "" +":issue:`43811`: Tests multiple OpenSSL versions on GitHub Actions. Use " +"ccache to speed up testing." +msgstr "" + +#: ../../../build/NEWS:2377 +msgid "" +":issue:`43791`: OpenSSL 3.0.0: Disable testing of legacy protocols TLS 1.0 " +"and 1.1. Tests are failing with TLSV1_ALERT_INTERNAL_ERROR." +msgstr "" + +#: ../../../build/NEWS:2383 +msgid "" +":issue:`35306`: Avoid raising errors from :meth:`pathlib.Path.exists()` when" +" passed an invalid filename." +msgstr "" + +#: ../../../build/NEWS:2386 +msgid "" +":issue:`38822`: Fixed :func:`os.stat` failing on inaccessible directories " +"with a trailing slash, rather than falling back to the parent directory's " +"metadata. This implicitly affected :func:`os.path.exists` and " +":func:`os.path.isdir`." +msgstr "" + +#: ../../../build/NEWS:2391 +msgid "" +":issue:`26227`: Fixed decoding of host names in :func:`socket.gethostbyaddr`" +" and :func:`socket.gethostbyname_ex`." +msgstr "" + +#: ../../../build/NEWS:2394 +msgid "" +":issue:`40432`: Updated pegen regeneration script on Windows to find and use" +" Python 3.8 or higher. Prior to this, pegen regeneration already required " +"3.8 or higher, but the script may have used lower versions of Python." +msgstr "" + +#: ../../../build/NEWS:2398 +msgid "" +":issue:`43745`: Actually updates Windows release to OpenSSL 1.1.1k. Earlier " +"releases were mislabelled and actually included 1.1.1i again." +msgstr "" + +#: ../../../build/NEWS:2401 +msgid ":issue:`43492`: Upgrade Windows installer to use SQLite 3.35.5." +msgstr "" + +#: ../../../build/NEWS:2406 +msgid "" +":issue:`42119`: Fix check for macOS SDK paths when building Python. Narrow " +"search to match contents of SDKs, namely only files in ``/System/Library``, " +"``/System/IOSSupport``, and ``/usr`` other than ``/usr/local``. Previously, " +"anything under ``/System`` was assumed to be in an SDK which causes problems" +" with the new file system layout in 10.15+ where user file systems may " +"appear to be mounted under ``/System``. Paths in ``/Library`` were also " +"incorrectly treated as SDK locations." +msgstr "" + +#: ../../../build/NEWS:2414 +msgid "" +":issue:`44009`: Provide \"python3.x-intel64\" executable to allow reliably " +"forcing macOS universal2 framework builds to run under Rosetta 2 Intel-64 " +"emulation on Apple Silicon Macs. This can be useful for testing or when " +"universal2 wheels are not yet available." +msgstr "" + +#: ../../../build/NEWS:2419 +msgid ":issue:`43492`: Update macOS installer to use SQLite 3.35.4." +msgstr "" + +#: ../../../build/NEWS:2424 +msgid "" +":issue:`43655`: IDLE dialog windows are now recognized as dialogs by window " +"managers on macOS and X Window." +msgstr "" + +#: ../../../build/NEWS:2429 +msgid "Python 3.9.4 final" +msgstr "" + +#: ../../../build/NEWS:2431 +msgid "*Release date: 2021-04-04*" +msgstr "" + +#: ../../../build/NEWS:2436 +msgid "" +":issue:`43710`: Reverted the fix for https://bugs.python.org/issue42500 as " +"it changed the PyThreadState struct size and broke the 3.9.x ABI in the " +"3.9.3 release (visible on 32-bit platforms using binaries compiled using an " +"earlier version of Python 3.9.x headers)." +msgstr "" + +#: ../../../build/NEWS:2444 +msgid "" +":issue:`26053`: Fixed bug where the :mod:`pdb` interactive run command " +"echoed the args from the shell command line, even if those have been " +"overridden at the pdb prompt." +msgstr "" + +#: ../../../build/NEWS:2450 +msgid "Python 3.9.3 final" +msgstr "" + +#: ../../../build/NEWS:2452 +msgid "*Release date: 2021-04-02*" +msgstr "" + +#: ../../../build/NEWS:2457 +msgid "" +":issue:`42988`: CVE-2021-3426: Remove the ``getfile`` feature of the " +":mod:`pydoc` module which could be abused to read arbitrary files on the " +"disk (directory traversal vulnerability). Moreover, even source code of " +"Python modules can contain sensitive data like passwords. Vulnerability " +"reported by David Schwörer." +msgstr "" + +#: ../../../build/NEWS:2463 +msgid "" +":issue:`43285`: :mod:`ftplib` no longer trusts the IP address value returned" +" from the server in response to the PASV command by default. This prevents " +"a malicious FTP server from using the response to probe IPv4 address and " +"port combinations on the client network." +msgstr "" + +#: ../../../build/NEWS:2468 +msgid "" +"Code that requires the former vulnerable behavior may set a " +"``trust_server_pasv_ipv4_address`` attribute on their :class:`ftplib.FTP` " +"instances to ``True`` to re-enable it." +msgstr "" + +#: ../../../build/NEWS:2472 +msgid "" +":issue:`43439`: Add audit hooks for :func:`gc.get_objects`, " +":func:`gc.get_referrers` and :func:`gc.get_referents`. Patch by Pablo " +"Galindo." +msgstr "" + +#: ../../../build/NEWS:2479 +msgid "" +":issue:`43660`: Fix crash that happens when replacing ``sys.stderr`` with a " +"callable that can remove the object while an exception is being printed. " +"Patch by Pablo Galindo." +msgstr "" + +#: ../../../build/NEWS:2483 +msgid "" +":issue:`43555`: Report the column offset for :exc:`SyntaxError` for invalid " +"line continuation characters. Patch by Pablo Galindo." +msgstr "" + +#: ../../../build/NEWS:2486 +msgid "" +":issue:`43517`: Fix misdetection of circular imports when using ``from " +"pkg.mod import attr``, which caused false positives in non-trivial multi-" +"threaded code." +msgstr "" + +#: ../../../build/NEWS:2490 +msgid "" +":issue:`35883`: Python no longer fails at startup with a fatal error if a " +"command line argument contains an invalid Unicode character. The " +":c:func:`Py_DecodeLocale` function now escapes byte sequences which would be" +" decoded as Unicode characters outside the [U+0000; U+10ffff] range." +msgstr "" + +#: ../../../build/NEWS:2495 +msgid "" +":issue:`43406`: Fix a possible race condition where ``PyErr_CheckSignals`` " +"tries to execute a non-Python signal handler." +msgstr "" + +#: ../../../build/NEWS:2498 +msgid "" +":issue:`42500`: Improve handling of exceptions near recursion limit. " +"Converts a number of Fatal Errors in RecursionErrors." +msgstr "" + +#: ../../../build/NEWS:2504 +msgid "" +":issue:`43433`: :class:`xmlrpc.client.ServerProxy` no longer ignores query " +"and fragment in the URL of the server." +msgstr "" + +#: ../../../build/NEWS:2507 +msgid "" +":issue:`35930`: Raising an exception raised in a \"future\" instance will " +"create reference cycles." +msgstr "" + +#: ../../../build/NEWS:2510 +msgid "" +":issue:`43577`: Fix deadlock when using :class:`ssl.SSLContext` debug " +"callback with :meth:`ssl.SSLContext.sni_callback`." +msgstr "" + +#: ../../../build/NEWS:2513 +msgid ":issue:`43521`: ``ast.unparse`` can now render NaNs and empty sets." +msgstr "" + +#: ../../../build/NEWS:2515 +msgid "" +":issue:`43423`: :func:`subprocess.communicate` no longer raises an " +"IndexError when there is an empty stdout or stderr IO buffer during a " +"timeout on Windows." +msgstr "" + +#: ../../../build/NEWS:2519 +msgid "" +":issue:`27820`: Fixed long-standing bug of smtplib.SMTP where doing AUTH " +"LOGIN with initial_response_ok=False will fail." +msgstr "" + +#: ../../../build/NEWS:2522 +msgid "" +"The cause is that SMTP.auth_login _always_ returns a password if provided " +"with a challenge string, thus non-compliant with the standard for AUTH " +"LOGIN." +msgstr "" + +#: ../../../build/NEWS:2526 +msgid "Also fixes bug with the test for smtpd." +msgstr "" + +#: ../../../build/NEWS:2528 +msgid "" +":issue:`43332`: Improves the networking efficiency of :mod:`http.client` " +"when using a proxy via :meth:`~HTTPConnection.set_tunnel`. Fewer small send" +" calls are made during connection setup." +msgstr "" + +#: ../../../build/NEWS:2532 +msgid "" +":issue:`43399`: Fix ``ElementTree.extend`` not working on iterators when " +"using the Python implementation" +msgstr "" + +#: ../../../build/NEWS:2535 +msgid "" +":issue:`43316`: The ``python -m gzip`` command line application now properly" +" fails when detecting an unsupported extension. It exits with a non-zero " +"exit code and prints an error message to stderr." +msgstr "" + +#: ../../../build/NEWS:2539 +msgid "" +":issue:`43260`: Fix TextIOWrapper can not flush internal buffer forever " +"after very large text is written." +msgstr "" + +#: ../../../build/NEWS:2542 +msgid "" +":issue:`42782`: Fail fast in :func:`shutil.move()` to avoid creating " +"destination directories on failure." +msgstr "" + +#: ../../../build/NEWS:2545 +msgid "" +":issue:`37193`: Fixed memory leak in ``socketserver.ThreadingMixIn`` " +"introduced in Python 3.7." +msgstr "" + +#: ../../../build/NEWS:2551 +msgid "" +":issue:`43199`: Answer \"Why is there no goto?\" in the Design and History " +"FAQ." +msgstr "" + +#: ../../../build/NEWS:2553 +msgid "" +":issue:`43407`: Clarified that a result from :func:`time.monotonic`, " +":func:`time.perf_counter`, :func:`time.process_time`, or " +":func:`time.thread_time` can be compared with the result from any following " +"call to the same function - not just the next immediate call." +msgstr "" + +#: ../../../build/NEWS:2558 +msgid "" +":issue:`27646`: Clarify that 'yield from ' works with any iterable, " +"not just iterators." +msgstr "" + +#: ../../../build/NEWS:2561 +msgid "" +":issue:`36346`: Update some deprecated unicode APIs which are documented as " +"\"will be removed in 4.0\" to \"3.12\". See :pep:`623` for detail." +msgstr "" + +#: ../../../build/NEWS:2567 +msgid "" +":issue:`37945`: Fix test_getsetlocale_issue1813() of test_locale: skip the " +"test if ``setlocale()`` fails. Patch by Victor Stinner." +msgstr "" + +#: ../../../build/NEWS:2570 +msgid "" +":issue:`41561`: Add workaround for Ubuntu's custom OpenSSL security level " +"policy." +msgstr "" + +#: ../../../build/NEWS:2573 +msgid "" +":issue:`43288`: Fix test_importlib to correctly skip Unicode file tests if " +"the fileystem does not support them." +msgstr "" + +#: ../../../build/NEWS:2579 +msgid ":issue:`43631`: Update macOS, Windows, and CI to OpenSSL 1.1.1k." +msgstr "" + +#: ../../../build/NEWS:2581 +msgid "" +":issue:`43617`: Improve configure.ac: Check for presence of autoconf-archive" +" package and remove our copies of M4 macros." +msgstr "" + +#: ../../../build/NEWS:2587 +msgid ":issue:`41837`: Update macOS installer build to use OpenSSL 1.1.1j." +msgstr "" + +#: ../../../build/NEWS:2592 +msgid "" +":issue:`42225`: Document that IDLE can fail on Unix either from " +"misconfigured IP masquerage rules or failure displaying complex colored " +"(non-ascii) characters." +msgstr "" + +#: ../../../build/NEWS:2596 +msgid "" +":issue:`43283`: Document why printing to IDLE's Shell is often slower than " +"printing to a system terminal and that it can be made faster by pre-" +"formatting a single string before printing." +msgstr "" + +#: ../../../build/NEWS:2602 +msgid "Python 3.9.2 final" +msgstr "" + +#: ../../../build/NEWS:2604 +msgid "*Release date: 2021-02-19*" +msgstr "*发布日期: 2021-02-19*" + +#: ../../../build/NEWS:2609 +msgid "" +":issue:`43155`: :c:func:`PyCMethod_New` is now present in ``python3.lib``." +msgstr "" + +#: ../../../build/NEWS:2613 +msgid "Python 3.9.2 release candidate 1" +msgstr "Python 3.9.2 发布候选版 1" + +#: ../../../build/NEWS:2615 +msgid "*Release date: 2021-02-16*" +msgstr "*发布日期: 2021-02-16*" + +#: ../../../build/NEWS:2620 +msgid "" +":issue:`42967`: Fix web cache poisoning vulnerability by defaulting the " +"query args separator to ``&``, and allowing the user to choose a custom " +"separator." +msgstr "" + +#: ../../../build/NEWS:2624 +msgid "" +":issue:`42938`: Avoid static buffers when computing the repr of " +":class:`ctypes.c_double` and :class:`ctypes.c_longdouble` values." +msgstr "" + +#: ../../../build/NEWS:2630 +msgid "" +":issue:`42819`: :mod:`readline`: Explicitly disable bracketed paste in the " +"interactive interpreter, even if it's set in the inputrc, is enabled by " +"default (eg GNU Readline 8.1), or a user calls " +"``readline.read_init_file()``. The Python REPL has not implemented bracketed" +" paste support. Also, bracketed mode writes the ``\"\\x1b[?2004h\"`` escape " +"sequence into stdout which causes test failures in applications that don't " +"support it. It can still be explicitly enabled by calling " +"``readline.parse_and_bind(\"set enable-bracketed-paste on\")``. Patch by " +"Dustin Rodrigues." +msgstr "" + +#: ../../../build/NEWS:2640 +msgid "" +":issue:`42806`: Fix the column offsets for f-strings :mod:`ast` nodes " +"surrounded by parentheses and for nodes that spawn multiple lines. Patch by " +"Pablo Galindo." +msgstr "" + +#: ../../../build/NEWS:2644 +msgid "" +":issue:`40631`: Fix regression where a single parenthesized starred " +"expression was a valid assignment target." +msgstr "" + +#: ../../../build/NEWS:2647 +msgid "" +":issue:`32381`: Fix encoding name when running a ``.pyc`` file on Windows: " +":c:func:`PyRun_SimpleFileExFlags()` now uses the correct encoding to decode " +"the filename." +msgstr "" + +#: ../../../build/NEWS:2651 +msgid "" +":issue:`42536`: Several built-in and standard library types now ensure that " +"their internal result tuples are always tracked by the :term:`garbage " +"collector `:" +msgstr "" + +#: ../../../build/NEWS:2655 +msgid ":meth:`collections.OrderedDict.items() `" +msgstr ":meth:`collections.OrderedDict.items() `" + +#: ../../../build/NEWS:2657 +msgid ":meth:`dict.items`" +msgstr ":meth:`dict.items`" + +#: ../../../build/NEWS:2659 +msgid ":func:`enumerate`" +msgstr ":func:`enumerate`" + +#: ../../../build/NEWS:2661 +msgid ":func:`functools.reduce`" +msgstr ":func:`functools.reduce`" + +#: ../../../build/NEWS:2663 +msgid ":func:`itertools.combinations`" +msgstr ":func:`itertools.combinations`" + +#: ../../../build/NEWS:2665 +msgid ":func:`itertools.combinations_with_replacement`" +msgstr ":func:`itertools.combinations_with_replacement`" + +#: ../../../build/NEWS:2667 +msgid ":func:`itertools.permutations`" +msgstr ":func:`itertools.permutations`" + +#: ../../../build/NEWS:2669 +msgid ":func:`itertools.product`" +msgstr ":func:`itertools.product`" + +#: ../../../build/NEWS:2671 +msgid ":func:`itertools.zip_longest`" +msgstr ":func:`itertools.zip_longest`" + +#: ../../../build/NEWS:2673 +msgid ":func:`zip`" +msgstr ":func:`zip`" + +#: ../../../build/NEWS:2675 +msgid "" +"Previously, they could have become untracked by a prior garbage collection. " +"Patch by Brandt Bucher." +msgstr "之前,它们可能会被前一次垃圾回收取消追踪。 由 Brandt Bucher 提供补丁。" + +#: ../../../build/NEWS:2678 +msgid "" +":issue:`42195`: The ``__args__`` of the parameterized generics for " +":data:`typing.Callable` and :class:`collections.abc.Callable` are now " +"consistent. The ``__args__`` for :class:`collections.abc.Callable` are now " +"flattened while :data:`typing.Callable`'s have not changed. To allow this " +"change, :class:`types.GenericAlias` can now be subclassed and " +"``collections.abc.Callable``'s ``__class_getitem__`` will now return a " +"subclass of ``types.GenericAlias``. Tests for typing were also updated to " +"not subclass things like ``Callable[..., T]`` as that is not a valid base " +"class. Finally, both types no longer validate their ``argtypes``, in " +"``Callable[[argtypes], resulttype]`` to prepare for :pep:`612`. Patch by " +"Ken Jin." +msgstr "" + +#: ../../../build/NEWS:2693 +msgid "" +":issue:`43102`: The namedtuple __new__ method had its __builtins__ set to " +"None instead of an actual dictionary. This created problems for " +"introspection tools." +msgstr "" + +#: ../../../build/NEWS:2697 +msgid "" +":issue:`43108`: Fixed a reference leak in the :mod:`curses` module. Patch by" +" Pablo Galindo" +msgstr "" + +#: ../../../build/NEWS:2700 +msgid "" +":issue:`42944`: Fix ``random.Random.sample`` when ``counts`` argument is not" +" ``None``." +msgstr "" + +#: ../../../build/NEWS:2703 +msgid ":issue:`42931`: Add :func:`randbytes` to ``random.__all__``." +msgstr "" + +#: ../../../build/NEWS:2705 +msgid "" +":issue:`42780`: Fix os.set_inheritable() for O_PATH file descriptors on " +"Linux." +msgstr "" + +#: ../../../build/NEWS:2707 +msgid ":issue:`42851`: remove __init_subclass__ support for Enum members" +msgstr "" + +#: ../../../build/NEWS:2709 +msgid "" +":issue:`41748`: Fix HTMLParser parsing rules for element attributes " +"containing commas with spaces. Patch by Karl Dubost." +msgstr "" + +#: ../../../build/NEWS:2712 +msgid "" +":issue:`42759`: Fixed equality comparison of :class:`tkinter.Variable` and " +":class:`tkinter.font.Font`. Objects which belong to different Tcl " +"interpreters are now always different, even if they have the same name." +msgstr "" + +#: ../../../build/NEWS:2716 +msgid "" +":issue:`42756`: Configure LMTP Unix-domain socket to use socket global " +"default timeout when a timeout is not explicitly provided." +msgstr "" + +#: ../../../build/NEWS:2719 +msgid "" +":issue:`23328`: Allow / character in username, password fields on _PROXY " +"envars." +msgstr "" + +#: ../../../build/NEWS:2722 +msgid "" +":issue:`42655`: :mod:`subprocess` *extra_groups* is now correctly passed " +"into setgroups() system call." +msgstr "" + +#: ../../../build/NEWS:2725 +msgid "" +":issue:`42727`: ``EnumMeta.__prepare__`` now accepts ``**kwds`` to properly " +"support ``__init_subclass__``" +msgstr "" + +#: ../../../build/NEWS:2728 +msgid "" +":issue:`42681`: Fixed range checks for color and pair numbers in " +":mod:`curses`." +msgstr "" + +#: ../../../build/NEWS:2730 +msgid "" +":issue:`37961`: Fix crash in :func:`tracemalloc.Traceback.__repr__` " +"(regressed in Python 3.9)." +msgstr "" + +#: ../../../build/NEWS:2733 +msgid "" +":issue:`42630`: :mod:`tkinter` functions and constructors which need a " +"default root window raise now :exc:`RuntimeError` with descriptive message " +"instead of obscure :exc:`AttributeError` or :exc:`NameError` if it is not " +"created yet or cannot be created automatically." +msgstr "" + +#: ../../../build/NEWS:2738 +msgid "" +":issue:`42644`: `logging.disable` will now validate the types and value of " +"its parameter. It also now accepts strings representing the levels (as does " +"`loging.setLevel`) instead of only the numerical values." +msgstr "" + +#: ../../../build/NEWS:2742 +msgid "" +":issue:`36541`: Fixed lib2to3.pgen2 to be able to parse PEP-570 positional " +"only argument syntax." +msgstr "" + +#: ../../../build/NEWS:2745 +msgid "" +":issue:`42517`: Enum: private names will raise a DeprecationWarning; in 3.10" +" they will become normal attributes" +msgstr "" + +#: ../../../build/NEWS:2748 +msgid "" +":issue:`42678`: `Enum`: call `__init_subclass__` after members have been " +"added" +msgstr "" + +#: ../../../build/NEWS:2750 +msgid "" +":issue:`42532`: Remove unexpected call of ``__bool__`` when passing a " +"``spec_arg`` argument to a Mock." +msgstr "" + +#: ../../../build/NEWS:2753 +msgid "" +":issue:`42388`: Fix subprocess.check_output(..., input=None) behavior when " +"text=True to be consistent with that of the documentation and " +"universal_newlines=True." +msgstr "" + +#: ../../../build/NEWS:2757 +msgid "" +":issue:`34463`: Fixed discrepancy between :mod:`traceback` and the " +"interpreter in formatting of SyntaxError with lineno not set " +"(:mod:`traceback` was changed to match interpreter)." +msgstr "" + +#: ../../../build/NEWS:2761 +msgid ":issue:`42375`: subprocess module update for DragonFlyBSD support." +msgstr "" + +#: ../../../build/NEWS:2763 +msgid "" +":issue:`42384`: Make pdb populate sys.path[0] exactly the same as regular " +"python execution." +msgstr "" + +#: ../../../build/NEWS:2766 +msgid "" +":issue:`42383`: Fix pdb: previously pdb would fail to restart the debugging " +"target if it was specified using a relative path and the current directory " +"changed." +msgstr "" + +#: ../../../build/NEWS:2770 +msgid "" +":issue:`42318`: Fixed support of non-BMP characters in :mod:`tkinter` on " +"macOS." +msgstr "" + +#: ../../../build/NEWS:2772 +msgid "" +":issue:`42163`: Restore compatibility for ``uname_result`` around deepcopy " +"and _replace." +msgstr "" + +#: ../../../build/NEWS:2775 +msgid "" +":issue:`39825`: Windows: Change ``sysconfig.get_config_var('EXT_SUFFIX')`` " +"to the expected full ``platform_tag.extension`` format. Previously it was " +"hard-coded to ``.pyd``, now it is compatible with ``distutils.sysconfig`` " +"and will result in something like ``.cp38-win_amd64.pyd``. This brings " +"windows into conformance with the other platforms." +msgstr "" + +#: ../../../build/NEWS:2781 +msgid "" +":issue:`42059`: :class:`typing.TypedDict` types created using the " +"alternative call-style syntax now correctly respect the ``total`` keyword " +"argument when setting their ``__required_keys__`` and ``__optional_keys__`` " +"class attributes." +msgstr "" + +#: ../../../build/NEWS:2786 +msgid "" +":issue:`39101`: Fixed tests using IsolatedAsyncioTestCase from hanging on " +"BaseExceptions." +msgstr "" + +#: ../../../build/NEWS:2789 +msgid "" +":issue:`42005`: Fix CLI of :mod:`cProfile` and :mod:`profile` to catch " +":exc:`BrokenPipeError`." +msgstr "" + +#: ../../../build/NEWS:2792 +msgid ":issue:`41907`: fix `format()` behavior for `IntFlag`" +msgstr "" + +#: ../../../build/NEWS:2794 +msgid "" +":issue:`41889`: Enum: fix regression involving inheriting a multiply-" +"inherited enum" +msgstr "" + +#: ../../../build/NEWS:2797 +msgid ":issue:`41891`: Ensure asyncio.wait_for waits for task completion" +msgstr "" + +#: ../../../build/NEWS:2799 +msgid "" +":issue:`41604`: Don't decrement the reference count of the previous user_ptr" +" when set_panel_userptr fails." +msgstr "" + +#: ../../../build/NEWS:2802 +msgid "" +":issue:`40219`: Lowered :class:`tkinter.ttk.LabeledScale` dummy widget to " +"prevent hiding part of the content label." +msgstr "" + +#: ../../../build/NEWS:2805 +msgid "" +":issue:`40084`: Fix ``Enum.__dir__``: dir(Enum.member) now includes " +"attributes as well as methods." +msgstr "" + +#: ../../../build/NEWS:2808 +msgid "" +":issue:`39068`: Fix initialization race condition in :func:`a85encode` and " +":func:`b85encode` in :mod:`base64`. Patch by Brandon Stansbury." +msgstr "" + +#: ../../../build/NEWS:2811 +msgid "" +":issue:`33289`: Correct call to :mod:`tkinter.colorchooser` to return RGB " +"triplet of ints instead of floats. Patch by Cheryl Sabella." +msgstr "" + +#: ../../../build/NEWS:2817 +msgid "" +":issue:`40304`: Fix doc for type(name, bases, dict). Patch by Boris " +"Verkhovskiy and Éric Araujo." +msgstr "" + +#: ../../../build/NEWS:2820 +msgid "" +":issue:`42811`: Updated importlib.utils.resolve_name() doc to use " +"__spec__.parent instead of __package__. (Thanks Yair Frid.)" +msgstr "" + +#: ../../../build/NEWS:2823 +msgid "" +":issue:`17140`: Add documentation for the " +":class:`multiprocessing.pool.ThreadPool` class." +msgstr "" + +#: ../../../build/NEWS:2829 +msgid "" +":issue:`42794`: Update test_nntplib to use offical group name of " +"news.aioe.org for testing. Patch by Dong-hee Na." +msgstr "" + +#: ../../../build/NEWS:2832 +msgid "" +":issue:`40810`: In :mod:`sqlite3`, fix ``CheckTraceCallbackContent`` for " +"SQLite pre 3.7.15." +msgstr "" + +#: ../../../build/NEWS:2838 +msgid ":issue:`43174`: Windows build now uses ``/utf-8`` compiler option." +msgstr "" + +#: ../../../build/NEWS:2840 +msgid "" +":issue:`42692`: Fix __builtin_available check on older compilers. Patch by " +"Joshua Root." +msgstr "" + +#: ../../../build/NEWS:2843 +msgid "" +":issue:`42604`: Now all platforms use a value for the \"EXT_SUFFIX\" build " +"variable derived from SOABI (for instance in freeBSD, \"EXT_SUFFIX\" is now " +"\".cpython-310d.so\" instead of \".so\"). Previosuly only Linux, Mac and " +"VxWorks were using a value for \"EXT_SUFFIX\" that included \"SOABI\"." +msgstr "" + +#: ../../../build/NEWS:2848 +msgid "" +":issue:`42598`: Fix implicit function declarations in configure which could " +"have resulted in incorrect configuration checks. Patch contributed by " +"Joshua Root." +msgstr "" + +#: ../../../build/NEWS:2852 +msgid ":issue:`29076`: Add fish shell support to macOS installer." +msgstr "" + +#: ../../../build/NEWS:2857 +msgid ":issue:`41837`: Updated Windows installer to include OpenSSL 1.1.1i" +msgstr "" + +#: ../../../build/NEWS:2859 +msgid ":issue:`42584`: Upgrade Windows installer to use SQLite 3.34.0." +msgstr "" + +#: ../../../build/NEWS:2864 +msgid "" +":issue:`42504`: Ensure that the value of " +"sysconfig.get_config_var('MACOSX_DEPLOYMENT_TARGET') is always a string, " +"even in when the value is parsable as an integer." +msgstr "" + +#: ../../../build/NEWS:2868 +msgid "" +":issue:`42361`: Update macOS installer build to use Tcl/Tk 8.6.11 (rc2, " +"expected to be final release)." +msgstr "" + +#: ../../../build/NEWS:2871 +msgid ":issue:`41837`: Update macOS installer build to use OpenSSL 1.1.1i." +msgstr "" + +#: ../../../build/NEWS:2873 +msgid ":issue:`42584`: Update macOS installer to use SQLite 3.34.0." +msgstr "" + +#: ../../../build/NEWS:2878 +msgid "" +":issue:`43008`: Make IDLE invoke :func:`sys.excepthook` in normal, 2-process" +" mode. Patch by Ken Hilton." +msgstr "" + +#: ../../../build/NEWS:2881 +msgid "" +":issue:`33065`: Fix problem debugging user classes with __repr__ method." +msgstr "" + +#: ../../../build/NEWS:2883 +msgid "" +":issue:`23544`: Disable Debug=>Stack Viewer when user code is running or " +"Debugger is active, to prevent hang or crash. Patch by Zackery Spytz." +msgstr "" + +#: ../../../build/NEWS:2886 +msgid "" +":issue:`32631`: Finish zzdummy example extension module: make menu entries " +"work; add docstrings and tests with 100% coverage." +msgstr "" + +#: ../../../build/NEWS:2892 +msgid "" +":issue:`42726`: Fixed Python 3 compatibility issue with gdb/libpython.py " +"handling of attribute dictionaries." +msgstr "" + +#: ../../../build/NEWS:2895 +msgid "" +":issue:`42613`: Fix ``freeze.py`` tool to use the prope config and library " +"directories. Patch by Victor Stinner." +msgstr "" + +#: ../../../build/NEWS:2901 +msgid "" +":issue:`43030`: Fixed a compiler warning in :c:func:`Py_UNICODE_ISSPACE()` " +"on platforms with signed ``wchar_t``." +msgstr "" + +#: ../../../build/NEWS:2904 +msgid "" +":issue:`42591`: Export the :c:func:`Py_FrozenMain` function: fix a Python " +"3.9.0 regression. Python 3.9 uses ``-fvisibility=hidden`` and the function " +"was not exported explicitly and so not exported." +msgstr "" + +#: ../../../build/NEWS:2908 +msgid "" +":issue:`40052`: Fix an alignment build warning/error in function " +"``PyVectorcall_Function()``. Patch by Andreas Schneider, Antoine Pitrou and " +"Petr Viktorin." +msgstr "" + +#: ../../../build/NEWS:2914 +msgid "Python 3.9.1 final" +msgstr "" + +#: ../../../build/NEWS:2916 +msgid "*Release date: 2020-12-07*" +msgstr "*发布日期: 2020-12-07*" + +#: ../../../build/NEWS:2921 +msgid "" +":issue:`42576`: ``types.GenericAlias`` will now raise a ``TypeError`` when " +"attempting to initialize with a keyword argument. Previously, this would " +"cause the interpreter to crash if the interpreter was compiled with debug " +"symbols. This does not affect interpreters compiled for release. Patch by " +"Ken Jin." +msgstr "" + +#: ../../../build/NEWS:2930 +msgid "" +":issue:`5054`: CGIHTTPRequestHandler.run_cgi() HTTP_ACCEPT improperly " +"parsed. Replace the special purpose getallmatchingheaders with generic " +"get_all method and add relevant tests." +msgstr "" + +#: ../../../build/NEWS:2934 +msgid "Original Patch by Martin Panter. Modified by Senthil Kumaran." +msgstr "" + +#: ../../../build/NEWS:2936 +msgid "" +":issue:`17735`: :func:`inspect.findsource` now raises :exc:`OSError` instead" +" of :exc:`IndexError` when :attr:`co_lineno` of a code object is greater " +"than the file length. This can happen, for example, when a file is edited " +"after it was imported. PR by Irit Katriel." +msgstr "" + +#: ../../../build/NEWS:2941 +msgid "" +":issue:`42116`: Fix handling of trailing comments by " +":func:`inspect.getsource`." +msgstr "" + +#: ../../../build/NEWS:2943 +msgid "" +":issue:`42487`: ChainMap.__iter__ no longer calls __getitem__ on underlying " +"maps" +msgstr "" + +#: ../../../build/NEWS:2946 +msgid "" +":issue:`42482`: :class:`~traceback.TracebackException` no longer holds a " +"reference to the exception's traceback object. Consequently, instances of " +"TracebackException for equivalent but non-equal exceptions now compare as " +"equal." +msgstr "" + +#: ../../../build/NEWS:2951 +msgid "" +":issue:`42406`: We fixed an issue in `pickle.whichmodule` in which importing" +" `multiprocessing` could change the how pickle identifies which module an " +"object belongs to, potentially breaking the unpickling of those objects." +msgstr "" + +#: ../../../build/NEWS:2955 +msgid "" +":issue:`34215`: Clarify the error message for " +":exc:`asyncio.IncompleteReadError` when ``expected`` is ``None``." +msgstr "" + +#: ../../../build/NEWS:2958 +msgid "" +":issue:`12800`: Extracting a symlink from a tarball should succeed and " +"overwrite the symlink if it already exists. The fix is to remove the " +"existing file or symlink before extraction. Based on patch by Chris AtLee, " +"Jeffrey Kintscher, and Senthil Kumaran." +msgstr "" + +#: ../../../build/NEWS:2966 +msgid "" +":issue:`41473`: Reenable test_gdb on gdb 9.2 and newer: " +"https://bugzilla.redhat.com/show_bug.cgi?id=1866884 bug is fixed in gdb " +"10.1." +msgstr "" + +#: ../../../build/NEWS:2970 +msgid "" +":issue:`42553`: Fix ``test_asyncio.test_call_later()`` race condition: don't" +" measure asyncio performance in the ``call_later()`` unit test. The test " +"failed randomly on the CI." +msgstr "" + +#: ../../../build/NEWS:2977 +msgid "" +":issue:`41116`: If no explicit macOS SDK was specified, setup.py should " +"check for Tcl and TK frameworks in /Library/Frameworks; the previous commit " +"inadvertently broke that test." +msgstr "" + +#: ../../../build/NEWS:2981 +msgid "" +":issue:`42504`: Fix build on macOS Big Sur when MACOSX_DEPLOYMENT_TARGET=11" +msgstr "" + +#: ../../../build/NEWS:2986 +msgid "" +":issue:`42508`: Keep IDLE running on macOS. Remove obsolete workaround that" +" prevented running files with shortcuts when using new universal2 installers" +" built on macOS 11." +msgstr "" + +#: ../../../build/NEWS:2992 +msgid "Python 3.9.1 release candidate 1" +msgstr "" + +#: ../../../build/NEWS:2994 +msgid "*Release date: 2020-11-24*" +msgstr "" + +#: ../../../build/NEWS:2999 +msgid "" +":issue:`42103`: Prevented potential DoS attack via CPU and RAM exhaustion " +"when processing malformed Apple Property List files in binary format." +msgstr "" + +#: ../../../build/NEWS:3002 +msgid "" +":issue:`42051`: The :mod:`plistlib` module no longer accepts entity " +"declarations in XML plist files to avoid XML vulnerabilities. This should " +"not affect users as entity declarations are not used in regular plist files." +msgstr "" + +#: ../../../build/NEWS:3007 +msgid "" +":issue:`40791`: Add ``volatile`` to the accumulator variable in " +"``hmac.compare_digest``, making constant-time-defeating optimizations less " +"likely." +msgstr "" + +#: ../../../build/NEWS:3014 +msgid "" +":issue:`41686`: On Windows, the ``SIGINT`` event, ``_PyOS_SigintEvent()``, " +"is now created even if Python is configured to not install signal handlers " +"(if :c:member:`PyConfig.install_signal_handlers` equals to 0, or " +"``Py_InitializeEx(0)``)." +msgstr "" + +#: ../../../build/NEWS:3019 +msgid "" +":issue:`42381`: Allow assignment expressions in set literals and set " +"comprehensions as per PEP 572. Patch by Pablo Galindo." +msgstr "" + +#: ../../../build/NEWS:3022 +msgid "" +":issue:`42374`: Fix a regression introduced by the new parser, where an " +"unparenthesized walrus operator was not allowed within generator " +"expressions." +msgstr "" + +#: ../../../build/NEWS:3026 +msgid "" +":issue:`42296`: On Windows, fix a regression in signal handling which " +"prevented to interrupt a program using CTRL+C. The signal handler can be run" +" in a thread different than the Python thread, in which case the test " +"deciding if the thread can handle signals is wrong." +msgstr "" + +#: ../../../build/NEWS:3031 +msgid "" +":issue:`42332`: :class:`types.GenericAlias` objects can now be the targets " +"of weakrefs." +msgstr "" + +#: ../../../build/NEWS:3034 +msgid "" +":issue:`42218`: Fixed a bug in the PEG parser that was causing crashes in " +"debug mode. Now errors are checked in left-recursive rules to avoid cases " +"where such errors do not get handled in time and appear as long-distance " +"crashes in other places." +msgstr "" + +#: ../../../build/NEWS:3039 +msgid "" +":issue:`42214`: Fixed a possible crash in the PEG parser when checking for " +"the '!=' token in the ``barry_as_flufl`` rule. Patch by Pablo Galindo." +msgstr "" + +#: ../../../build/NEWS:3042 +msgid "" +":issue:`42143`: Fix handling of errors during creation of " +"``PyFunctionObject``, which resulted in operations on uninitialized memory. " +"Patch by Yonatan Goldschmidt." +msgstr "" + +#: ../../../build/NEWS:3046 +msgid "" +":issue:`41659`: Fix a bug in the parser, where a curly brace following a " +"`primary` didn't fail immediately. This led to invalid expressions like `a " +"{b}` to throw a :exc:`SyntaxError` with a wrong offset, or invalid " +"expressions ending with a curly brace like `a {` to not fail immediately in " +"the REPL." +msgstr "" + +#: ../../../build/NEWS:3052 +msgid "" +":issue:`42150`: Fix possible buffer overflow in the new parser when checking" +" for continuation lines. Patch by Pablo Galindo." +msgstr "" + +#: ../../../build/NEWS:3055 +msgid "" +":issue:`42123`: Run the parser two times. On the first run, disable all the " +"rules that only generate better error messages to gain performance. If " +"there's a parse failure, run the parser a second time with those enabled." +msgstr "" + +#: ../../../build/NEWS:3059 +msgid "" +":issue:`42057`: Fix peephole optimizer misoptimize conditional jump + " +"JUMP_IF_NOT_EXC_MATCH pair." +msgstr "" + +#: ../../../build/NEWS:3062 +msgid "" +":issue:`41984`: The garbage collector now tracks all user-defined classes. " +"Patch by Brandt Bucher." +msgstr "" + +#: ../../../build/NEWS:3065 +msgid "" +":issue:`41993`: Fixed potential issues with removing not completely " +"initialized module from ``sys.modules`` when import fails." +msgstr "" + +#: ../../../build/NEWS:3068 +msgid "" +":issue:`41979`: Star-unpacking is now allowed for with item's targets in the" +" PEG parser." +msgstr "" + +#: ../../../build/NEWS:3071 +msgid "" +":issue:`41909`: Fixed stack overflow in :func:`issubclass` and " +":func:`isinstance` when getting the ``__bases__`` attribute leads to " +"infinite recursion." +msgstr "" + +#: ../../../build/NEWS:3075 +msgid "" +":issue:`41894`: When loading a native module and a load failure occurs, " +"prevent a possible UnicodeDecodeError when not running in a UTF-8 locale by " +"decoding the load error message using the current locale's encoding." +msgstr "" + +#: ../../../build/NEWS:3079 +msgid "" +":issue:`39934`: Correctly count control blocks in 'except' in compiler. " +"Ensures that a syntax error, rather a fatal error, occurs for deeply nested," +" named exception handlers." +msgstr "" + +#: ../../../build/NEWS:3086 +msgid "" +":issue:`42328`: Fixed :meth:`tkinter.ttk.Style.map`. The function accepts " +"now the representation of the default state as empty sequence (as returned " +"by ``Style.map()``). The structure of the result is now the same on all " +"platform and does not depend on the value of ``wantobjects``." +msgstr "" + +#: ../../../build/NEWS:3091 +msgid "" +":issue:`42345`: Fix various issues with ``typing.Literal`` parameter " +"handling (flatten, deduplicate, use type to cache key). Patch provided by " +"Yurii Karabas." +msgstr "" + +#: ../../../build/NEWS:3095 +msgid "" +":issue:`42350`: Fix the :class:`threading.Thread` class at fork: do nothing " +"if the thread is already stopped (ex: fork called at Python exit). " +"Previously, an error was logged in the child process." +msgstr "" + +#: ../../../build/NEWS:3099 +msgid "" +":issue:`42014`: The ``onerror`` callback from ``shutil.rmtree`` now receives" +" correct function when ``os.open`` fails." +msgstr "" + +#: ../../../build/NEWS:3102 +msgid ":issue:`42237`: Fix `os.sendfile()` on illumos." +msgstr "" + +#: ../../../build/NEWS:3104 +msgid ":issue:`42249`: Fixed writing binary Plist files larger than 4 GiB." +msgstr "" + +#: ../../../build/NEWS:3106 +msgid "" +":issue:`35455`: On Solaris, :func:`~time.thread_time` is now implemented " +"with ``gethrvtime()`` because ``clock_gettime(CLOCK_THREAD_CPUTIME_ID)`` is " +"not always available. Patch by Jakub Kulik." +msgstr "" + +#: ../../../build/NEWS:3110 +msgid "" +":issue:`42233`: The :func:`repr` of :mod:`typing` types containing " +":ref:`Generic Alias Types ` previously did not show the " +"parameterized types in the ``GenericAlias``. They have now been changed to " +"do so." +msgstr "" + +#: ../../../build/NEWS:3115 +msgid "" +":issue:`41754`: webbrowser: Ignore *NotADirectoryError* when calling ``xdg-" +"settings``." +msgstr "" + +#: ../../../build/NEWS:3118 +msgid "" +":issue:`29566`: ``binhex.binhex()`` consistently writes macOS 9 line " +"endings." +msgstr "" + +#: ../../../build/NEWS:3120 +msgid "" +":issue:`42183`: Fix a stack overflow error for asyncio Task or Future " +"repr()." +msgstr "" + +#: ../../../build/NEWS:3122 +msgid "" +"The overflow occurs under some circumstances when a Task or Future " +"recursively returns itself." +msgstr "在 Task 或 Future 递归返回自身的情形下会导致栈溢出。" + +#: ../../../build/NEWS:3125 +msgid "" +":issue:`42146`: Fix memory leak in :func:`subprocess.Popen` in case an uid " +"(gid) specified in `user` (`group`, `extra_groups`) overflows `uid_t` " +"(`gid_t`)." +msgstr "" + +#: ../../../build/NEWS:3129 +msgid "" +":issue:`42140`: Improve asyncio.wait function to create the futures set just" +" one time." +msgstr "" + +#: ../../../build/NEWS:3132 +msgid "" +":issue:`42103`: :exc:`~plistlib.InvalidFileException` and " +":exc:`RecursionError` are now the only errors caused by loading malformed " +"binary Plist file (previously ValueError and TypeError could be raised in " +"some specific cases)." +msgstr "" + +#: ../../../build/NEWS:3137 +msgid "" +":issue:`41052`: Pickling heap types implemented in C with protocols 0 and 1 " +"raises now an error instead of producing incorrect data." +msgstr "" + +#: ../../../build/NEWS:3140 +msgid "" +":issue:`41491`: plistlib: fix parsing XML plists with hexadecimal integer " +"values" +msgstr "" + +#: ../../../build/NEWS:3143 +msgid "" +":issue:`42065`: Fix an incorrectly formatted error from " +":meth:`_codecs.charmap_decode` when called with a mapped value outside the " +"range of valid Unicode code points. PR by Max Bernstein." +msgstr "" + +#: ../../../build/NEWS:3147 +msgid "" +":issue:`41966`: Fix pickling pure Python :class:`datetime.time` subclasses. " +"Patch by Dean Inwood." +msgstr "" + +#: ../../../build/NEWS:3150 +msgid "" +":issue:`41976`: Fixed a bug that was causing " +":func:`ctypes.util.find_library` to return ``None`` when triying to locate a" +" library in an environment when gcc>=9 is available and ``ldconfig`` is not." +" Patch by Pablo Galindo" +msgstr "" + +#: ../../../build/NEWS:3154 +msgid "" +":issue:`41900`: C14N 2.0 serialisation in xml.etree.ElementTree failed for " +"unprefixed attributes when a default namespace was defined." +msgstr "" + +#: ../../../build/NEWS:3157 +msgid "" +":issue:`41840`: Fix a bug in the :mod:`symtable` module that was causing " +"module-scope global variables to not be reported as both local and global. " +"Patch by Pablo Galindo." +msgstr "" + +#: ../../../build/NEWS:3161 +msgid "" +":issue:`41831`: ``str()`` for the ``type`` attribute of the " +"``tkinter.Event`` object always returns now the numeric code returned by Tk " +"instead of the name of the event type." +msgstr "" + +#: ../../../build/NEWS:3165 +msgid "" +":issue:`41817`: fix `tkinter.EventType` Enum so all members are strings, and" +" none are tuples" +msgstr "" + +#: ../../../build/NEWS:3168 ../../../build/NEWS:3353 +msgid "" +":issue:`41815`: Fix SQLite3 segfault when backing up closed database. Patch " +"contributed by Peter David McCormick." +msgstr "" + +#: ../../../build/NEWS:3171 +msgid "" +":issue:`41316`: Fix the :mod:`tarfile` module to write only basename of TAR " +"file to GZIP compression header." +msgstr "" + +#: ../../../build/NEWS:3174 +msgid "" +":issue:`16396`: Allow ``ctypes.wintypes`` to be imported on non-Windows " +"systems." +msgstr "" + +#: ../../../build/NEWS:3177 +msgid "" +":issue:`40592`: :func:`shutil.which` now ignores empty entries in " +":envvar:`PATHEXT` instead of treating them as a match." +msgstr "" + +#: ../../../build/NEWS:3180 +msgid "" +":issue:`40550`: Fix time-of-check/time-of-action issue in " +"subprocess.Popen.send_signal." +msgstr "" + +#: ../../../build/NEWS:3183 +msgid "" +":issue:`40492`: Fix ``--outfile`` for :mod:`cProfile` / :mod:`profile` not " +"writing the output file in the original directory when the program being " +"profiled changes the working directory. PR by Anthony Sottile." +msgstr "" + +#: ../../../build/NEWS:3187 +msgid "" +":issue:`40105`: ZipFile truncates files to avoid corruption when a shorter " +"comment is provided in append (\"a\") mode. Patch by Jan Mazur." +msgstr "" + +#: ../../../build/NEWS:3190 +msgid "" +":issue:`27321`: Fixed KeyError exception when flattening an email to a " +"string attempts to replace a non-existent Content-Transfer-Encoding header." +msgstr "" + +#: ../../../build/NEWS:3196 +msgid ":issue:`42153`: Fix the URL for the IMAP protocol documents." +msgstr "" + +#: ../../../build/NEWS:3198 +msgid ":issue:`42061`: Document __format__ functionality for IP addresses." +msgstr "" + +#: ../../../build/NEWS:3200 +msgid "" +":issue:`41910`: Document the default implementation of `object.__eq__`." +msgstr "" + +#: ../../../build/NEWS:3202 +msgid "" +":issue:`42010`: Clarify that subscription expressions are also valid for " +"certain :term:`classes ` and :term:`types ` in the standard " +"library, and for user-defined classes and types if the classmethod " +":meth:`__class_getitem__` is provided." +msgstr "" + +#: ../../../build/NEWS:3207 +msgid "" +":issue:`41805`: Documented :ref:`generic alias type ` " +"and :data:`types.GenericAlias`. Also added an entry in glossary for " +":term:`generic types `." +msgstr "" + +#: ../../../build/NEWS:3211 +msgid "" +":issue:`41774`: In Programming FAQ \"Sequences (Tuples/Lists)\" section, add" +" \"How do you remove multiple items from a list\"." +msgstr "" + +#: ../../../build/NEWS:3214 +msgid "" +":issue:`35293`: Fix RemovedInSphinx40Warning when building the " +"documentation. Patch by Dong-hee Na." +msgstr "" + +#: ../../../build/NEWS:3217 +msgid "" +":issue:`41726`: Update the refcounts info of ``PyType_FromModuleAndSpec``." +msgstr "" + +#: ../../../build/NEWS:3219 +msgid ":issue:`39693`: Fix tarfile's extractfile documentation" +msgstr "" + +#: ../../../build/NEWS:3221 +msgid "" +":issue:`39416`: Document some restrictions on the default string " +"representations of numeric classes." +msgstr "" + +#: ../../../build/NEWS:3227 +msgid "" +":issue:`40754`: Include ``_testinternalcapi`` module in Windows installer " +"for test suite" +msgstr "" + +#: ../../../build/NEWS:3230 +msgid "" +":issue:`41739`: Fix test_logging.test_race_between_set_target_and_flush(): " +"the test now waits until all threads complete to avoid leaking running " +"threads." +msgstr "" + +#: ../../../build/NEWS:3234 +msgid "" +":issue:`41970`: Avoid a test failure in ``test_lib2to3`` if the module has " +"already imported at the time the test executes. Patch by Pablo Galindo." +msgstr "" + +#: ../../../build/NEWS:3237 +msgid "" +":issue:`41944`: Tests for CJK codecs no longer call ``eval()`` on content " +"received via HTTP." +msgstr "" + +#: ../../../build/NEWS:3240 +msgid "" +":issue:`41939`: Fix test_site.test_license_exists_at_url(): call " +"``urllib.request.urlcleanup()`` to reset the global " +"``urllib.request._opener``. Patch by Victor Stinner." +msgstr "" + +#: ../../../build/NEWS:3244 +msgid "" +":issue:`41561`: test_ssl: skip test_min_max_version_mismatch when TLS 1.0 is" +" not available" +msgstr "" + +#: ../../../build/NEWS:3247 ../../../build/NEWS:3369 +msgid ":issue:`41602`: Add tests for SIGINT handling in the runpy module." +msgstr "" + +#: ../../../build/NEWS:3249 +msgid "" +":issue:`41306`: Fixed a failure in ``test_tk.test_widgets.ScaleTest`` " +"happening when executing the test with Tk 8.6.10." +msgstr "" + +#: ../../../build/NEWS:3255 +msgid "" +":issue:`42398`: Fix a race condition in \"make regen-all\" when make -jN " +"option is used to run jobs in parallel. The clinic.py script now only use " +"atomic write to write files. Moveover, generated files are now left " +"unchanged if the content does not change, to not change the file " +"modification time." +msgstr "" + +#: ../../../build/NEWS:3260 +msgid "" +":issue:`41617`: Fix building ``pycore_bitutils.h`` internal header on old " +"clang version without ``__builtin_bswap16()`` (ex: Xcode 4.6.3 on Mac OS X " +"10.7). Patch by Joshua Root and Victor Stinner." +msgstr "" + +#: ../../../build/NEWS:3264 ../../../build/NEWS:3374 +msgid "" +":issue:`38249`: Update :c:macro:`Py_UNREACHABLE` to use " +"__builtin_unreachable() if only the compiler is able to use it. Patch by " +"Dong-hee Na." +msgstr "" + +#: ../../../build/NEWS:3267 +msgid "" +":issue:`40998`: Addressed three compiler warnings found by undefined " +"behavior sanitizer (ubsan)." +msgstr "" + +#: ../../../build/NEWS:3273 +msgid "" +":issue:`42120`: Remove macro definition of ``copysign`` (to ``_copysign``) " +"in headers." +msgstr "" + +#: ../../../build/NEWS:3276 +msgid "" +":issue:`38439`: Updates the icons for IDLE in the Windows Store package." +msgstr "" + +#: ../../../build/NEWS:3278 +msgid "" +":issue:`41744`: Fixes automatic import of props file when using the Nuget " +"package." +msgstr "" + +#: ../../../build/NEWS:3281 +msgid ":issue:`41557`: Update Windows installer to use SQLite 3.33.0." +msgstr "" + +#: ../../../build/NEWS:3283 +msgid "" +":issue:`38324`: Avoid Unicode errors when accessing certain locale data on " +"Windows." +msgstr "" + +#: ../../../build/NEWS:3289 +msgid "" +":issue:`41116`: Ensure distutils.unixxcompiler.find_library_file can find " +"system provided libraries on macOS 11." +msgstr "" + +#: ../../../build/NEWS:3292 +msgid ":issue:`41100`: Add support for macOS 11 and Apple Silicon systems." +msgstr "" + +#: ../../../build/NEWS:3294 +msgid "" +"It is now possible to build \"Universal 2\" binaries using \"--enable-" +"universalsdk --with-universal-archs=universal2\"." +msgstr "" + +#: ../../../build/NEWS:3297 +msgid "" +"Binaries build on later macOS versions can be deployed back to older " +"versions (tested up to macOS 10.9), when using the correct deployment " +"target. This is tested using Xcode 11 and later." +msgstr "" + +#: ../../../build/NEWS:3301 +msgid "" +":issue:`38443`: The ``--enable-universalsdk`` and ``--with-universal-archs``" +" options for the configure script now check that the specified architectures" +" can be used." +msgstr "" + +#: ../../../build/NEWS:3305 +msgid "" +":issue:`41471`: Ignore invalid prefix lengths in system proxy excludes." +msgstr "" + +#: ../../../build/NEWS:3307 +msgid ":issue:`41557`: Update macOS installer to use SQLite 3.33.0." +msgstr "" + +#: ../../../build/NEWS:3312 +msgid ":issue:`42426`: Fix reporting offset of the RE error in searchengine." +msgstr "" + +#: ../../../build/NEWS:3314 +msgid "" +":issue:`42415`: Get docstrings for IDLE calltips more often by using " +"inspect.getdoc." +msgstr "" + +#: ../../../build/NEWS:3317 +msgid "" +":issue:`33987`: Mostly finish using ttk widgets, mainly for editor, " +"settings, and searches. Some patches by Mark Roseman." +msgstr "" + +#: ../../../build/NEWS:3320 +msgid ":issue:`41775`: Use 'IDLE Shell' as shell title" +msgstr "" + +#: ../../../build/NEWS:3322 +msgid ":issue:`35764`: Rewrite the Calltips doc section." +msgstr "" + +#: ../../../build/NEWS:3324 +msgid "" +":issue:`40181`: In calltips, stop reminding that '/' marks the end of " +"positional-only arguments." +msgstr "" + +#: ../../../build/NEWS:3327 +msgid "" +":issue:`40511`: Typing opening and closing parentheses inside the " +"parentheses of a function call will no longer cause unnecessary \"flashing\"" +" off and on of an existing open call-tip, e.g. when typed in a string " +"literal." +msgstr "" + +#: ../../../build/NEWS:3331 +msgid "" +":issue:`38439`: Add a 256×256 pixel IDLE icon to the Windows .ico file. " +"Created by Andrew Clover. Remove the low-color gif variations from the .ico " +"file." +msgstr "" + +#: ../../../build/NEWS:3337 +msgid "" +":issue:`42015`: Fix potential crash in deallocating method objects when " +"dynamically allocated `PyMethodDef`'s lifetime is managed through the " +"``self`` argument of a `PyCFunction`." +msgstr "" + +#: ../../../build/NEWS:3341 +msgid "" +":issue:`41986`: :c:data:`Py_FileSystemDefaultEncodeErrors` and " +":c:data:`Py_UTF8Mode` are available again in limited API." +msgstr "" + +#: ../../../build/NEWS:3346 +msgid "Python 3.9.0 final" +msgstr "" + +#: ../../../build/NEWS:3348 +msgid "*Release date: 2020-10-04*" +msgstr "" + +#: ../../../build/NEWS:3356 +msgid "" +":issue:`41662`: No longer override exceptions raised in ``__len__()`` of a " +"sequence of parameters in :mod:`sqlite3` with " +":exc:`~sqlite3.ProgrammingError`." +msgstr "" + +#: ../../../build/NEWS:3360 +msgid "" +":issue:`41662`: Fixed crash when mutate list of parameters during iteration " +"in :mod:`sqlite3`." +msgstr "" + +#: ../../../build/NEWS:3363 +msgid "" +":issue:`39728`: fix default `_missing_` so a duplicate `ValueError` is not " +"set as the `__context__` of the original `ValueError`" +msgstr "" + +#: ../../../build/NEWS:3379 +msgid "Python 3.9.0 release candidate 2" +msgstr "" + +#: ../../../build/NEWS:3381 +msgid "*Release date: 2020-09-16*" +msgstr "" + +#: ../../../build/NEWS:3386 +msgid "" +":issue:`41780`: Fix :meth:`__dir__` of :class:`types.GenericAlias`. Patch by" +" Batuhan Taskaya." +msgstr "" + +#: ../../../build/NEWS:3389 +msgid "" +":issue:`41690`: Fix a possible stack overflow in the parser when parsing " +"functions and classes with a huge ammount of arguments. Patch by Pablo " +"Galindo." +msgstr "" + +#: ../../../build/NEWS:3393 +msgid "" +":issue:`41681`: Fixes the wrong error description in the error raised by " +"using 2 `,` in format string in f-string and :meth:`str.format`." +msgstr "" + +#: ../../../build/NEWS:3396 +msgid "" +":issue:`41654`: Fix a crash that occurred when destroying subclasses of " +":class:`MemoryError`. Patch by Pablo Galindo." +msgstr "" + +#: ../../../build/NEWS:3399 +msgid "" +":issue:`41631`: The ``_ast`` module uses again a global state. Using a " +"module state per module instance is causing subtle practical problems. For " +"example, the Mercurial project replaces the ``__import__()`` function to " +"implement lazy import, whereas Python expected that ``import _ast`` always " +"return a fully initialized ``_ast`` module." +msgstr "" + +#: ../../../build/NEWS:3405 +msgid "" +":issue:`41533`: Free the stack allocated in ``va_build_stack`` if " +"``do_mkstack`` fails and the stack is not a ``small_stack``." +msgstr "" + +#: ../../../build/NEWS:3408 +msgid "" +":issue:`41531`: Fix a bug that was dropping keys when compiling dict " +"literals with more than 0xFFFF elements. Patch by Pablo Galindo." +msgstr "" + +#: ../../../build/NEWS:3411 +msgid "" +":issue:`41525`: The output of ``python --help`` contains now only ASCII " +"characters." +msgstr "" + +#: ../../../build/NEWS:3414 +msgid "" +":issue:`29590`: Make the stack trace correct after calling " +":meth:`generator.throw` on a generator that has yielded from a ``yield " +"from``." +msgstr "" + +#: ../../../build/NEWS:3421 +msgid "" +":issue:`41517`: fix bug allowing Enums to be extended via multiple " +"inheritance" +msgstr "" + +#: ../../../build/NEWS:3423 +msgid "" +":issue:`39587`: use the correct mix-in data type when constructing Enums" +msgstr "" + +#: ../../../build/NEWS:3425 +msgid "" +":issue:`41789`: Honor `object` overrides in `Enum` class creation " +"(specifically, `__str__`, `__repr__`, `__format__`, and `__reduce_ex__`)." +msgstr "" + +#: ../../../build/NEWS:3428 +msgid "" +":issue:`39651`: Fix a race condition in the ``call_soon_threadsafe()`` " +"method of ``asyncio.ProactorEventLoop``: do nothing if the self-pipe socket " +"has been closed." +msgstr "" + +#: ../../../build/NEWS:3432 +msgid "" +":issue:`41720`: Fixed :meth:`turtle.Vec2D.__rmul__` for arguments which are " +"not int or float." +msgstr "" + +#: ../../../build/NEWS:3435 +msgid "" +":issue:`41696`: Fix handling of debug mode in :func:`asyncio.run`. This " +"allows setting ``PYTHONASYNCIODEBUG`` or ``-X dev`` to enable asyncio debug " +"mode when using :func:`asyncio.run`." +msgstr "" + +#: ../../../build/NEWS:3439 +msgid "" +":issue:`41687`: Fix implementation of sendfile to be compatible with " +"Solaris." +msgstr "" + +#: ../../../build/NEWS:3441 +msgid "" +":issue:`39010`: Restarting a ``ProactorEventLoop`` on Windows no longer logs" +" spurious ``ConnectionResetErrors``." +msgstr "" + +#: ../../../build/NEWS:3444 +msgid "" +":issue:`41609`: The pdb whatis command correctly reports instance methods as" +" 'Method' rather than 'Function'." +msgstr "" + +#: ../../../build/NEWS:3447 +msgid "" +":issue:`32751`: When cancelling the task due to a timeout, " +":meth:`asyncio.wait_for` will now wait until the cancellation is complete " +"also in the case when *timeout* is <= 0, like it does with positive " +"timeouts." +msgstr "" + +#: ../../../build/NEWS:3452 +msgid "" +":issue:`37658`: :meth:`asyncio.wait_for` now properly handles races between " +"cancellation of itself and the completion of the wrapped awaitable." +msgstr "" + +#: ../../../build/NEWS:3455 +msgid "" +":issue:`40782`: Change the method asyncio.AbstractEventLoop.run_in_executor " +"to not be a coroutine." +msgstr "" + +#: ../../../build/NEWS:3458 +msgid "" +":issue:`41520`: Fix :mod:`codeop` regression that prevented turning compile " +"warnings into errors." +msgstr "" + +#: ../../../build/NEWS:3461 +msgid "" +":issue:`41503`: Fixed a race between setTarget and flush in " +"logging.handlers.MemoryHandler." +msgstr "" + +#: ../../../build/NEWS:3464 +msgid "" +":issue:`41344`: Prevent creating :class:`shared_memory.SharedMemory` objects" +" with :code:`size=0`." +msgstr "" + +#: ../../../build/NEWS:3467 +msgid "" +":issue:`41025`: Fixed an issue preventing the C implementation of " +":class:`zoneinfo.ZoneInfo` from being subclassed." +msgstr "" + +#: ../../../build/NEWS:3470 +msgid "" +":issue:`31122`: ssl.wrap_socket() now raises ssl.SSLEOFError rather than " +"OSError when peer closes connection during TLS negotiation" +msgstr "" + +#: ../../../build/NEWS:3473 +msgid "" +":issue:`33660`: Fix pathlib.PosixPath to resolve a relative path located on " +"the root directory properly." +msgstr "" + +#: ../../../build/NEWS:3479 +msgid "" +":issue:`37149`: Change Shipman tkinter doc link from archive.org to TkDocs. " +"(The doc has been removed from the NMT server.) The new link responds much " +"faster and includes a short explanatory note." +msgstr "" + +#: ../../../build/NEWS:3483 +msgid ":issue:`41624`: Fix the signature of :class:`typing.Coroutine`." +msgstr "" + +#: ../../../build/NEWS:3485 +msgid "" +":issue:`40204`: Enable Sphinx 3.2 ``c_allow_pre_v3`` option and disable " +"``c_warn_on_allowed_pre_v3`` option to make the documentation compatible " +"with Sphinx 2 and Sphinx 3." +msgstr "" + +#: ../../../build/NEWS:3489 +msgid "" +":issue:`40979`: Refactored typing.rst, arranging more than 70 classes, " +"functions, and decorators into new sub-sections." +msgstr "" + +#: ../../../build/NEWS:3492 +msgid "" +":issue:`39883`: Make code, examples, and recipes in the Python documentation" +" be licensed under the more permissive BSD0 license in addition to the " +"existing Python 2.0 license." +msgstr "" + +#: ../../../build/NEWS:3499 +msgid ":issue:`41731`: Make test_cmd_line_script pass with option '-vv'." +msgstr "" + +#: ../../../build/NEWS:3504 +msgid "" +":issue:`41617`: Fix ``pycore_byteswap.h`` header file to support old clang " +"versions: ``__builtin_bswap16()`` is not available in LLVM clang 3.0." +msgstr "" + +#: ../../../build/NEWS:3510 +msgid "" +":issue:`41526`: Fixed layout of final page of the installer by removing the " +"special thanks to Mark Hammond (with his permission)." +msgstr "" + +#: ../../../build/NEWS:3516 +msgid "" +":issue:`41524`: Fix bug in PyOS_mystrnicmp and PyOS_mystricmp that " +"incremented pointers beyond the end of a string." +msgstr "" + +#: ../../../build/NEWS:3521 +msgid "Python 3.9.0 release candidate 1" +msgstr "Python 3.9.0 发布候选版 1" + +#: ../../../build/NEWS:3523 +msgid "*Release date: 2020-08-11*" +msgstr "*发布日期: 2020-08-11*" + +#: ../../../build/NEWS:3528 +msgid "" +":issue:`38156`: Handle interrupts that come after EOF correctly in " +"``PyOS_StdioReadline``." +msgstr "" + +#: ../../../build/NEWS:3534 +msgid ":issue:`41497`: Fix potential UnicodeDecodeError in dis module." +msgstr "" + +#: ../../../build/NEWS:3536 +msgid "" +":issue:`41490`: Update :mod:`ensurepip` to install pip 20.2.1 and setuptools" +" 49.2.1." +msgstr "" + +#: ../../../build/NEWS:3539 +msgid "" +":issue:`41467`: On Windows, fix asyncio ``recv_into()`` return value when " +"the socket/pipe is closed (:exc:`BrokenPipeError`): return ``0`` rather than" +" an empty byte string (``b''``)." +msgstr "" + +#: ../../../build/NEWS:3543 +msgid ":issue:`41425`: Make tkinter doc example runnable." +msgstr "" + +#: ../../../build/NEWS:3545 +msgid "" +":issue:`41384`: Raise TclError instead of TypeError when an unknown option " +"is passed to tkinter.OptionMenu." +msgstr "" + +#: ../../../build/NEWS:3548 +msgid "" +":issue:`38731`: Fix :exc:`NameError` in command-line interface of " +":mod:`py_compile`." +msgstr "" + +#: ../../../build/NEWS:3551 +msgid "" +":issue:`41317`: Use add_done_callback() in asyncio.loop.sock_accept() to " +"unsubscribe reader early on cancellation." +msgstr "" + +#: ../../../build/NEWS:3554 +msgid ":issue:`41364`: Reduce import overhead of :mod:`uuid`." +msgstr "" + +#: ../../../build/NEWS:3556 +msgid "" +":issue:`41341`: Recursive evaluation of `typing.ForwardRef` in " +"`get_type_hints`." +msgstr "" + +#: ../../../build/NEWS:3559 +msgid "" +":issue:`41182`: selector: use DefaultSelector based upon implementation" +msgstr "" + +#: ../../../build/NEWS:3561 +msgid "" +":issue:`40726`: Handle cases where the ``end_lineno`` is ``None`` on " +":func:`ast.increment_lineno`." +msgstr "" + +#: ../../../build/NEWS:3567 +msgid ":issue:`41045`: Add documentation for debug feature of f-strings." +msgstr "" + +#: ../../../build/NEWS:3569 +msgid "" +":issue:`41314`: Changed the release when ``from __future__ import " +"annotations`` becomes the default from ``4.0`` to ``3.10`` (following a " +"change in PEP 563)." +msgstr "" + +#: ../../../build/NEWS:3576 +msgid ":issue:`41492`: Fixes the description that appears in UAC prompts." +msgstr "" + +#: ../../../build/NEWS:3578 +msgid "" +":issue:`40948`: Improve post-install message to direct people to the \"py\" " +"command." +msgstr "" + +#: ../../../build/NEWS:3581 +msgid "" +":issue:`41412`: The installer will now fail to install on Windows 7 and " +"Windows 8. Further, the UCRT dependency is now always downloaded on demand." +msgstr "" + +#: ../../../build/NEWS:3584 +msgid ":issue:`40741`: Update Windows release to include SQLite 3.32.3." +msgstr "" + +#: ../../../build/NEWS:3589 +msgid "" +":issue:`41468`: Improve IDLE run crash error message (which users should " +"never see)." +msgstr "" + +#: ../../../build/NEWS:3592 +msgid "" +":issue:`41373`: Save files loaded with no line ending, as when blank, or " +"different line endings, by setting its line ending to the system default. " +"Fix regression in 3.8.4 and 3.9.0b4." +msgstr "" + +#: ../../../build/NEWS:3598 +msgid "Python 3.9.0 beta 5" +msgstr "" + +#: ../../../build/NEWS:3600 +msgid "*Release date: 2020-07-20*" +msgstr "" + +#: ../../../build/NEWS:3605 +msgid "" +":issue:`41304`: Fixes `python3x._pth` being ignored on Windows, caused by " +"the fix for :issue:`29778` (CVE-2020-15801)." +msgstr "" + +#: ../../../build/NEWS:3608 +msgid "" +":issue:`41162`: Audit hooks are now cleared later during finalization to " +"avoid missing events." +msgstr "" + +#: ../../../build/NEWS:3611 +msgid "" +":issue:`29778`: Ensure :file:`python3.dll` is loaded from correct locations " +"when Python is embedded (CVE-2020-15523)." +msgstr "" + +#: ../../../build/NEWS:3614 +msgid "" +":issue:`39603`: Prevent http header injection by rejecting control " +"characters in http.client.putrequest(...)." +msgstr "" + +#: ../../../build/NEWS:3620 +msgid "" +":issue:`41295`: Resolve a regression in CPython 3.8.4 where defining " +"\"__setattr__\" in a multi-inheritance setup and calling up the hierarchy " +"chain could fail if builtins/extension types were involved in the base " +"types." +msgstr "" + +#: ../../../build/NEWS:3625 +msgid "" +":issue:`41247`: Always cache the running loop holder when running " +"``asyncio.set_running_loop``." +msgstr "" + +#: ../../../build/NEWS:3628 +msgid "" +":issue:`41252`: Fix incorrect refcounting in _ssl.c's " +"``_servername_callback()``." +msgstr "" + +#: ../../../build/NEWS:3631 +msgid "" +":issue:`41215`: Use non-NULL default values in the PEG parser keyword list " +"to overcome a bug that was preventing Python from being properly compiled " +"when using the XLC compiler. Patch by Pablo Galindo." +msgstr "" + +#: ../../../build/NEWS:3635 +msgid "" +":issue:`41218`: Python 3.8.3 had a regression where compiling with " +"ast.PyCF_ALLOW_TOP_LEVEL_AWAIT would aggressively mark list comprehension " +"with CO_COROUTINE. Now only list comprehension making use of async/await " +"will tagged as so." +msgstr "" + +#: ../../../build/NEWS:3640 +msgid "" +":issue:`41175`: Guard against a NULL pointer dereference within " +"bytearrayobject triggered by the ``bytearray() + bytearray()`` operation." +msgstr "" + +#: ../../../build/NEWS:3643 +msgid "" +":issue:`39960`: The \"hackcheck\" that prevents sneaking around a type's " +"__setattr__() by calling the superclass method was rewritten to allow C " +"implemented heap types." +msgstr "" + +#: ../../../build/NEWS:3650 +msgid "" +":issue:`41288`: Unpickling invalid NEWOBJ_EX opcode with the C " +"implementation raises now UnpicklingError instead of crashing." +msgstr "" + +#: ../../../build/NEWS:3653 +msgid "" +":issue:`39017`: Avoid infinite loop when reading specially crafted TAR files" +" using the tarfile module (CVE-2019-20907)." +msgstr "" + +#: ../../../build/NEWS:3656 +msgid "" +":issue:`41235`: Fix the error handling in " +":meth:`ssl.SSLContext.load_dh_params`." +msgstr "" + +#: ../../../build/NEWS:3659 +msgid "" +":issue:`41207`: In distutils.spawn, restore expectation that " +"DistutilsExecError is raised when the command is not found." +msgstr "" + +#: ../../../build/NEWS:3662 +msgid "" +":issue:`39168`: Remove the ``__new__`` method of :class:`typing.Generic`." +msgstr "" + +#: ../../../build/NEWS:3664 +msgid "" +":issue:`41194`: Fix a crash in the ``_ast`` module: it can no longer be " +"loaded more than once. It now uses a global state rather than a module " +"state." +msgstr "" + +#: ../../../build/NEWS:3667 +msgid "" +":issue:`39384`: Fixed email.contentmanager to allow set_content() to set a " +"null string." +msgstr "" + +#: ../../../build/NEWS:3673 +msgid "" +":issue:`37703`: Updated Documentation to comprehensively elaborate on the " +"behaviour of gather.cancel()" +msgstr "" + +#: ../../../build/NEWS:3679 +msgid ":issue:`40741`: Update macOS installer to use SQLite 3.32.3." +msgstr "" + +#: ../../../build/NEWS:3684 +msgid "" +":issue:`41300`: Save files with non-ascii chars. Fix regression released in " +"3.9.0b4 and 3.8.4." +msgstr "" + +#: ../../../build/NEWS:3687 +msgid "" +":issue:`37765`: Add keywords to module name completion list. Rewrite " +"Completions section of IDLE doc." +msgstr "" + +#: ../../../build/NEWS:3693 +msgid "" +":issue:`40170`: Revert :c:func:`PyType_HasFeature` change: it reads again " +"directly the :c:member:`PyTypeObject.tp_flags` member when the limited C API" +" is not used, rather than always calling :c:func:`PyType_GetFlags` which " +"hides implementation details." +msgstr "" + +#: ../../../build/NEWS:3700 +msgid "Python 3.9.0 beta 4" +msgstr "" + +#: ../../../build/NEWS:3702 +msgid "*Release date: 2020-07-02*" +msgstr "" + +#: ../../../build/NEWS:3707 +msgid "" +":issue:`41004`: The __hash__() methods of ipaddress.IPv4Interface and " +"ipaddress.IPv6Interface incorrectly generated constant hash values of 32 and" +" 128 respectively. This resulted in always causing hash collisions. The fix " +"uses hash() to generate hash values for the tuple of (address, mask length, " +"network address)." +msgstr "" + +#: ../../../build/NEWS:3716 +msgid "" +":issue:`41094`: Fix decoding errors with audit when open files with non-" +"ASCII names on non-UTF-8 locale." +msgstr "" + +#: ../../../build/NEWS:3719 +msgid "" +":issue:`41084`: Prefix the error message with 'f-string: ', when parsing an " +"f-string expression which throws a :exc:`SyntaxError`." +msgstr "" + +#: ../../../build/NEWS:3722 +msgid "" +":issue:`41076`: Pre-feed the parser with the location of the f-string " +"expression, not the f-string itself, which allows us to skip the shifting of" +" the AST node locations after the parsing is completed." +msgstr "" + +#: ../../../build/NEWS:3726 +msgid ":issue:`40939`: Deprecate :c:func:`PyNode_Compile`." +msgstr "" + +#: ../../../build/NEWS:3728 +msgid "" +":issue:`41056`: Fixes a reference to deallocated stack space during startup " +"when constructing sys.path involving a relative symlink when code was " +"supplied via -c. (discovered via Coverity)" +msgstr "" + +#: ../../../build/NEWS:3732 +msgid "" +":issue:`41061`: Fix incorrect expressions and asserts in hashtable code and " +"tests." +msgstr "" + +#: ../../../build/NEWS:3735 +msgid "" +":issue:`41052`: Opt out serialization/deserialization for _random.Random" +msgstr "" + +#: ../../../build/NEWS:3737 +msgid "" +":issue:`40939`: Deprecate :c:func:`PyParser_SimpleParseStringFlags`, " +":c:func:`PyParser_SimpleParseStringFlagsFilename` and " +":c:func:`PyParser_SimpleParseFileFlags`." +msgstr "" + +#: ../../../build/NEWS:3741 +msgid "" +":issue:`35975`: Stefan Behnel reported that cf_feature_version is used even " +"when PyCF_ONLY_AST is not set. This is against the intention and against the" +" documented behavior, so it's been fixed." +msgstr "" + +#: ../../../build/NEWS:3745 +msgid "" +":issue:`40985`: Fix a bug that caused the :exc:`SyntaxError` text to be " +"empty when a file ends with a line ending in a line continuation character " +"(i.e. backslash). The error text should contain the text of the last line." +msgstr "" + +#: ../../../build/NEWS:3749 +msgid "" +":issue:`40958`: Fix a possible buffer overflow in the PEG parser when " +"gathering information for emitting syntax errors. Patch by Pablo Galindo." +msgstr "" + +#: ../../../build/NEWS:3752 +msgid "" +":issue:`40957`: Fix refleak in _Py_fopen_obj() when PySys_Audit() fails" +msgstr "" + +#: ../../../build/NEWS:3754 +msgid "" +":issue:`40947`: The Python :ref:`Path Configuration ` now " +"takes :c:member:`PyConfig.platlibdir` in account." +msgstr "" + +#: ../../../build/NEWS:3757 +msgid "" +":issue:`40847`: Fix a bug where a line with only a line continuation " +"character is not considered a blank line at tokenizer level. In such cases, " +"more than a single `NEWLINE` token was emitted. The old parser was working " +"around the issue, but the new parser threw a :exc:`SyntaxError` for valid " +"input due to this. For example, an empty line following a line continuation " +"character was interpreted as a :exc:`SyntaxError`." +msgstr "" + +#: ../../../build/NEWS:3764 +msgid "" +":issue:`40824`: Unexpected errors in calling the ``__iter__`` method are no " +"longer masked by ``TypeError`` in the :keyword:`in` operator and functions " +":func:`~operator.contains`, :func:`~operator.indexOf` and " +":func:`~operator.countOf` of the :mod:`operator` module." +msgstr "" + +#: ../../../build/NEWS:3769 +msgid "" +":issue:`19569`: Add the private macros ``_Py_COMP_DIAG_PUSH``, " +"``_Py_COMP_DIAG_IGNORE_DEPR_DECLS``, and ``_Py_COMP_DIAG_POP``." +msgstr "" + +#: ../../../build/NEWS:3775 +msgid "" +":issue:`41193`: The ``write_history()`` atexit function of the readline " +"completer now ignores any :exc:`OSError` to ignore error if the filesystem " +"is read-only, instead of only ignoring :exc:`FileNotFoundError` and " +":exc:`PermissionError`." +msgstr "" + +#: ../../../build/NEWS:3780 +msgid "" +":issue:`41161`: The decimal module now requires libmpdec-2.5.0. Users of " +"--with-system-libmpdec should update their system library." +msgstr "" + +#: ../../../build/NEWS:3783 +msgid ":issue:`40874`: The decimal module now requires libmpdec-2.5.0." +msgstr "" + +#: ../../../build/NEWS:3785 +msgid "" +":issue:`41138`: Fixed the :mod:`trace` module CLI for Python source files " +"with non-UTF-8 encoding." +msgstr "" + +#: ../../../build/NEWS:3788 +msgid "" +":issue:`31938`: Fix default-value signatures of several functions in the " +":mod:`select` module - by Anthony Sottile." +msgstr "" + +#: ../../../build/NEWS:3791 +msgid "" +":issue:`41068`: Fixed reading files with non-ASCII names from ZIP archive " +"directly after writing them." +msgstr "" + +#: ../../../build/NEWS:3794 +msgid "" +":issue:`41058`: :func:`pdb.find_function` now correctly determines the " +"source file encoding." +msgstr "" + +#: ../../../build/NEWS:3797 +msgid "" +":issue:`41056`: Fix a NULL pointer dereference within the ssl module during " +"a MemoryError in the keylog callback. (discovered by Coverity)" +msgstr "" + +#: ../../../build/NEWS:3800 +msgid "" +":issue:`41056`: Fixed an instance where a MemoryError within the zoneinfo " +"module might not be reported or not reported at its source. (found by " +"Coverity)" +msgstr "" + +#: ../../../build/NEWS:3804 +msgid "" +":issue:`41048`: :func:`mimetypes.read_mime_types` function reads the rule " +"file using UTF-8 encoding, not the locale encoding. Patch by Srinivas Reddy " +"Thatiparthy." +msgstr "" + +#: ../../../build/NEWS:3808 +msgid "" +":issue:`41043`: Fixed the use of :func:`~glob.glob` in the stdlib: literal " +"part of the path is now always correctly escaped." +msgstr "" + +#: ../../../build/NEWS:3811 +msgid "" +":issue:`40448`: :mod:`ensurepip` now disables the use of `pip` cache when " +"installing the bundled versions of `pip` and `setuptools`. Patch by " +"Krzysztof Konopko." +msgstr "" + +#: ../../../build/NEWS:3815 +msgid "" +":issue:`40967`: Removed :meth:`asyncio.Task.current_task` and " +":meth:`asyncio.Task.all_tasks`. Patch contributed by Rémi Lapeyre." +msgstr "" + +#: ../../../build/NEWS:3818 +msgid "" +":issue:`40955`: Fix a minor memory leak in :mod:`subprocess` module when " +"extra_groups was specified." +msgstr "" + +#: ../../../build/NEWS:3821 +msgid "" +":issue:`40855`: The standard deviation and variance functions in the " +"statistics module were ignoring their mu and xbar arguments." +msgstr "" + +#: ../../../build/NEWS:3824 +msgid "" +":issue:`40924`: Removed support for loaders implementing .files and " +"supplying TraversableResources." +msgstr "" + +#: ../../../build/NEWS:3827 +msgid "" +":issue:`40939`: Use the new PEG parser when generating the stdlib " +":mod:`keyword` module." +msgstr "" + +#: ../../../build/NEWS:3830 +msgid "" +":issue:`40834`: Fix truncate when sending str object " +"with_xxsubinterpreters.channel_send." +msgstr "" + +#: ../../../build/NEWS:3833 +msgid "" +":issue:`26407`: Unexpected errors in calling the ``__iter__`` method are no " +"longer masked by ``TypeError`` in :func:`csv.reader`, " +":func:`csv.writer.writerow` and :meth:`csv.writer.writerows`." +msgstr "" + +#: ../../../build/NEWS:3837 +msgid "" +":issue:`38488`: Update ensurepip to install pip 20.1.1 and setuptools " +"47.1.0." +msgstr "" + +#: ../../../build/NEWS:3839 +msgid "" +":issue:`36543`: Restored the deprecated :mod:`xml.etree.cElementTree` " +"module." +msgstr "" + +#: ../../../build/NEWS:3841 +msgid "" +":issue:`34226`: Fix `cgi.parse_multipart` without content_length. Patch by " +"Roger Duran" +msgstr "" + +#: ../../../build/NEWS:3847 +msgid "" +":issue:`41085`: Fix integer overflow in the :meth:`array.array.index` method" +" on 64-bit Windows for index larger than ``2**31``." +msgstr "" + +#: ../../../build/NEWS:3850 +msgid "" +":issue:`41069`: :data:`test.support.TESTFN` and the current directory for " +"tests when run via ``test.regrtest`` contain now non-ascii characters if " +"possible." +msgstr "" + +#: ../../../build/NEWS:3854 +msgid "" +":issue:`38377`: On Linux, skip tests using multiprocessing if the current " +"user cannot create a file in ``/dev/shm/`` directory. Add the " +":func:`~test.support.skip_if_broken_multiprocessing_synchronize` function to" +" the :mod:`test.support` module." +msgstr "" + +#: ../../../build/NEWS:3859 +msgid "" +":issue:`41009`: Fix use of ``support.require_{linux|mac|freebsd}_version()``" +" decorators as class decorator." +msgstr "" + +#: ../../../build/NEWS:3862 +msgid "" +":issue:`41003`: Fix ``test_copyreg`` when ``numpy`` is installed: " +"``test.pickletester`` now saves/restores warnings filters when importing " +"``numpy``, to ignore filters installed by ``numpy``." +msgstr "" + +#: ../../../build/NEWS:3866 +msgid "" +":issue:`40964`: Disable remote :mod:`imaplib` tests, host " +"cyrus.andrew.cmu.edu is blocking incoming connections." +msgstr "" + +#: ../../../build/NEWS:3869 +msgid "" +":issue:`40927`: Fix test_binhex when run twice: it now uses " +"import_fresh_module() to ensure that it raises DeprecationWarning each time." +msgstr "" + +#: ../../../build/NEWS:3873 +msgid "" +":issue:`34401`: Make test_gdb properly run on HP-UX. Patch by Michael " +"Osipov." +msgstr "" + +#: ../../../build/NEWS:3878 +msgid ":issue:`40204`: Pin Sphinx version to 2.3.1 in ``Doc/Makefile``." +msgstr "" + +#: ../../../build/NEWS:3883 +msgid "" +":issue:`41074`: Fixed support of non-ASCII names in functions " +":func:`msilib.OpenDatabase` and :func:`msilib.init_database` and non-ASCII " +"SQL in method :meth:`msilib.Database.OpenView`." +msgstr "" + +#: ../../../build/NEWS:3887 +msgid ":issue:`40164`: Updates Windows OpenSSL to 1.1.1g" +msgstr "" + +#: ../../../build/NEWS:3889 +msgid "" +":issue:`37556`: Extend py.exe help to mention overrides via venv, shebang, " +"environmental variables & ini files." +msgstr "" + +#: ../../../build/NEWS:3895 +msgid "" +":issue:`39580`: Avoid opening Finder window if running installer from the " +"command line. Patch contributed by Rick Heil." +msgstr "" + +#: ../../../build/NEWS:3898 +msgid "" +":issue:`41100`: Fix configure error when building on macOS 11. Note that the" +" current Python release was released shortly after the first developer " +"preview of macOS 11 (Big Sur); there are other known issues with building " +"and running on the developer preview. Big Sur is expected to be fully " +"supported in a future bugfix release of Python 3.8.x and with 3.9.0." +msgstr "" + +#: ../../../build/NEWS:3904 +msgid "" +":issue:`41005`: fixed an XDG settings issue not allowing macos to open " +"browser in webbrowser.py" +msgstr "" + +#: ../../../build/NEWS:3910 +msgid "" +":issue:`41152`: The encoding of ``stdin``, ``stdout`` and ``stderr`` in IDLE" +" is now always UTF-8." +msgstr "" + +#: ../../../build/NEWS:3913 +msgid "" +":issue:`41144`: Make Open Module open a special module such as os.path." +msgstr "" + +#: ../../../build/NEWS:3918 +msgid "" +":issue:`36346`: Mark ``Py_UNICODE_COPY``, ``Py_UNICODE_FILL``, " +"``PyUnicode_WSTR_LENGTH``, ``PyUnicode_FromUnicode``, " +"``PyUnicode_AsUnicode``, ``_PyUnicode_AsUnicode``, and " +"``PyUnicode_AsUnicodeAndSize`` as deprecated in C. Remove " +"``Py_UNICODE_MATCH`` which was deprecated and broken since Python 3.3." +msgstr "" + +#: ../../../build/NEWS:3924 +msgid "" +":issue:`36020`: On Windows, ``#include \"pyerrors.h\"`` no longer defines " +"``snprintf`` and ``vsnprintf`` macros." +msgstr "" + +#: ../../../build/NEWS:3927 +msgid "" +":issue:`40703`: The PyType_FromSpec*() functions no longer overwrite the " +"type's \"__module__\" attribute if it is set via \"Py_tp_members\" or " +"\"Py_tp_getset\"." +msgstr "" + +#: ../../../build/NEWS:3932 +msgid "Python 3.9.0 beta 3" +msgstr "" + +#: ../../../build/NEWS:3934 +msgid "*Release date: 2020-06-09*" +msgstr "" + +#: ../../../build/NEWS:3939 +msgid "" +":issue:`40924`: `importlib.resources`: Reverted ``TraversableResources`` " +"implementations from the built-in loaders (SourceFileLoader and ZipImporter)" +" as it was an incompatible change introduced in 3.9.0 beta 2 causing through" +" a chain of events for root TLS certificates to be missing." +msgstr "" + +#: ../../../build/NEWS:3947 +msgid "" +":issue:`40684`: ``make install`` now uses the ``PLATLIBDIR`` variable for " +"the destination ``lib-dynload/`` directory when ``./configure --with-" +"platlibdir`` is used." +msgstr "" + +#: ../../../build/NEWS:3953 +msgid "Python 3.9.0 beta 2" +msgstr "" + +#: ../../../build/NEWS:3955 +msgid "*Release date: 2020-06-08*" +msgstr "" + +#: ../../../build/NEWS:3960 +msgid "" +":issue:`40904`: Fix possible segfault in the new PEG parser when parsing " +"f-string containing yield statements with no value (:code:`f\"{yield}\"`). " +"Patch by Pablo Galindo" +msgstr "" + +#: ../../../build/NEWS:3964 +msgid "" +":issue:`40903`: Fixed a possible segfault in the new PEG parser when " +"producing error messages for invalid assignments of the form :code:`p=p=`. " +"Patch by Pablo Galindo" +msgstr "" + +#: ../../../build/NEWS:3968 +msgid "" +":issue:`40880`: Fix invalid memory read in the new parser when checking " +"newlines in string literals. Patch by Pablo Galindo." +msgstr "" + +#: ../../../build/NEWS:3971 +msgid "" +":issue:`40883`: Fix memory leak in when parsing f-strings in the new parser." +" Patch by Pablo Galindo" +msgstr "" + +#: ../../../build/NEWS:3974 +msgid "" +":issue:`40870`: Raise :exc:`ValueError` when validating custom AST's where " +"the constants ``True``, ``False`` and ``None`` are used within a " +":class:`ast.Name` node." +msgstr "" + +#: ../../../build/NEWS:3978 +msgid "" +":issue:`40854`: Allow overriding :data:`sys.platlibdir` via a new " +":envvar:`PYTHONPLATLIBDIR` environment variable." +msgstr "" + +#: ../../../build/NEWS:3981 +msgid "" +":issue:`40826`: Fix GIL usage in :c:func:`PyOS_Readline`: lock the GIL to " +"set an exception and pass the Python thread state when checking if there is " +"a pending signal." +msgstr "" + +#: ../../../build/NEWS:3985 +msgid "" +":issue:`40780`: Fix a corner case where g-style string formatting of a float" +" failed to remove trailing zeros." +msgstr "" + +#: ../../../build/NEWS:3988 +msgid "" +":issue:`38964`: When there's a :exc:`SyntaxError` in the expression part of " +"an fstring, the filename attribute of the :exc:`SyntaxError` gets correctly " +"set to the name of the file the fstring resides in." +msgstr "" + +#: ../../../build/NEWS:3992 +msgid "" +":issue:`40750`: Support the \"-d\" debug flag in the new PEG parser. Patch " +"by Pablo Galindo" +msgstr "" + +#: ../../../build/NEWS:3995 +msgid "" +":issue:`40217`: Instances of types created with " +":c:func:`PyType_FromSpecWithBases` will no longer automatically visit their " +"class object when traversing references in the garbage collector. The user " +"is expected to manually visit the object's class. Patch by Pablo Galindo." +msgstr "" + +#: ../../../build/NEWS:4001 +msgid "" +":issue:`40696`: Fix a hang that can arise after :meth:`generator.throw` due " +"to a cycle in the exception context chain." +msgstr "" + +#: ../../../build/NEWS:4007 +msgid "" +":issue:`39791`: Refresh importlib.metadata from importlib_metadata 1.6.1." +msgstr "" + +#: ../../../build/NEWS:4009 +msgid "" +":issue:`40807`: Stop codeop._maybe_compile, used by " +"code.InteractiveInterpreter (and IDLE). from from emitting each warning " +"three times." +msgstr "" + +#: ../../../build/NEWS:4012 +msgid "" +":issue:`39791`: Built-in loaders (SourceFileLoader and ZipImporter) now " +"supply ``TraversableResources`` implementations for ``ResourceReader``, and " +"the fallback function has been removed." +msgstr "" + +#: ../../../build/NEWS:4016 +msgid "" +":issue:`17005`: The topological sort functionality that was introduced " +"initially in the :mod:`functools` module has been moved to a new " +":mod:`graphlib` module to better accommodate the new tools and keep the " +"original scope of the :mod:`functools` module. Patch by Pablo Galindo" +msgstr "" + +#: ../../../build/NEWS:4021 +msgid "" +":issue:`40777`: Initialize PyDateTime_IsoCalendarDateType.tp_base at run-" +"time to avoid errors on some compilers." +msgstr "" + +#: ../../../build/NEWS:4024 +msgid "" +":issue:`40767`: :mod:`webbrowser` now properly finds the default browser in " +"pure Wayland systems by checking the WAYLAND_DISPLAY environment variable. " +"Patch contributed by Jérémy Attali." +msgstr "" + +#: ../../../build/NEWS:4028 +msgid "" +":issue:`40791`: :func:`hashlib.compare_digest` uses OpenSSL's " +"``CRYPTO_memcmp()`` function when OpenSSL is available." +msgstr "" + +#: ../../../build/NEWS:4031 +msgid "" +":issue:`40795`: :mod:`ctypes` module: If ctypes fails to convert the result " +"of a callback or if a ctypes callback function raises an exception, " +"sys.unraisablehook is now called with an exception set. Previously, the " +"error was logged into stderr by :c:func:`PyErr_Print`." +msgstr "" + +#: ../../../build/NEWS:4036 +msgid "" +":issue:`30008`: Fix :mod:`ssl` code to be compatible with OpenSSL 1.1.x " +"builds that use ``no-deprecated`` and ``--api=1.1.0``." +msgstr "" + +#: ../../../build/NEWS:4039 +msgid ":issue:`30064`: Fix asyncio ``loop.sock_*`` race condition issue" +msgstr "" + +#: ../../../build/NEWS:4041 +msgid ":issue:`40759`: Deprecate the :mod:`symbol` module." +msgstr "" + +#: ../../../build/NEWS:4043 +msgid "" +":issue:`40737`: Fix possible reference leak for :mod:`sqlite3` " +"initialization." +msgstr "" + +#: ../../../build/NEWS:4045 +msgid "" +":issue:`40698`: :mod:`distutils` upload creates SHA2-256 and Blake2b-256 " +"digests. MD5 digests is skipped if platform blocks MD5." +msgstr "" + +#: ../../../build/NEWS:4048 +msgid "" +":issue:`40695`: :mod:`hashlib` no longer falls back to builtin hash " +"implementations when OpenSSL provides a hash digest and the algorithm is " +"blocked by security policy." +msgstr "" + +#: ../../../build/NEWS:4052 +msgid "" +":issue:`9216`: func:`hashlib.new` passed ``usedforsecurity`` to OpenSSL EVP " +"constructor ``_hashlib.new()``. test_hashlib and test_smtplib handle strict " +"security policy better." +msgstr "" + +#: ../../../build/NEWS:4056 +msgid "" +":issue:`40614`: :func:`ast.parse` will not parse self documenting " +"expressions in f-strings when passed ``feature_version`` is less than ``(3, " +"8)``." +msgstr "" + +#: ../../../build/NEWS:4059 +msgid "" +":issue:`40671`: Prepare ``_hashlib`` for :pep:`489` and use " +":c:func:`PyModule_AddType`." +msgstr "" + +#: ../../../build/NEWS:4062 +msgid "" +":issue:`32309`: Added a new :term:`coroutine` :func:`asyncio.to_thread`. It " +"is mainly used for running IO-bound functions in a separate thread to avoid " +"blocking the event loop, and essentially works as a high-level version of " +":meth:`~asyncio.loop.run_in_executor` that can directly take keyword " +"arguments." +msgstr "" + +#: ../../../build/NEWS:4068 +msgid "" +":issue:`40630`: Added :func:`tracemalloc.reset_peak` to set the peak size of" +" traced memory blocks to the current size, to measure the peak of specific " +"pieces of code." +msgstr "" + +#: ../../../build/NEWS:4072 +msgid "" +":issue:`13097`: ``ctypes`` now raises an ``ArgumentError`` when a callback " +"is invoked with more than 1024 arguments." +msgstr "" + +#: ../../../build/NEWS:4075 +msgid "" +":issue:`23082`: Updated the error message and docs of PurePath.relative_to()" +" to better reflect the function behaviour." +msgstr "" + +#: ../../../build/NEWS:4078 +msgid "" +":issue:`39244`: Fixed :class:`multiprocessing.context.get_all_start_methods`" +" to properly return the default method first on macOS." +msgstr "" + +#: ../../../build/NEWS:4081 +msgid "" +":issue:`39040`: Fix parsing of invalid mime headers parameters by collapsing" +" whitespace between encoded words in a bare-quote-string." +msgstr "" + +#: ../../../build/NEWS:4084 +msgid "" +":issue:`35714`: :exc:`struct.error` is now raised if there is a null " +"character in a :mod:`struct` format string." +msgstr "" + +#: ../../../build/NEWS:4087 +msgid "" +":issue:`36290`: AST nodes are now raising :exc:`TypeError` on conflicting " +"keyword arguments. Patch contributed by Rémi Lapeyre." +msgstr "" + +#: ../../../build/NEWS:4093 +msgid "" +":issue:`17258`: Skip some :mod:`multiprocessing` tests when MD5 hash digest " +"is blocked." +msgstr "" + +#: ../../../build/NEWS:4099 +msgid "" +":issue:`40514`: Remove ``--with-experimental-isolated-subinterpreters`` " +"configure option in Python 3.9: the experiment continues in the master " +"branch, but it's no longer needed in 3.9." +msgstr "" + +#: ../../../build/NEWS:4103 +msgid "" +":issue:`40683`: Fixed an issue where the :mod:`zoneinfo` module and its " +"tests were not included when Python is installed with ``make``." +msgstr "" + +#: ../../../build/NEWS:4109 +msgid "" +":issue:`39631`: Changes the registered MIME type for ``.py`` files on " +"Windows to ``text/x-python`` instead of ``text/plain``." +msgstr "" + +#: ../../../build/NEWS:4112 +msgid "" +":issue:`40677`: Manually define IO_REPARSE_TAG_APPEXECLINK in case some old " +"Windows SDK doesn't have it." +msgstr "" + +#: ../../../build/NEWS:4118 +msgid ":issue:`40741`: Update macOS installer to use SQLite 3.32.2." +msgstr "" + +#: ../../../build/NEWS:4123 +msgid "" +":issue:`39885`: Make context menu Cut and Copy work again when right-" +"clicking within a selection." +msgstr "" + +#: ../../../build/NEWS:4126 +msgid ":issue:`40723`: Make test_idle pass when run after import." +msgstr "" + +#: ../../../build/NEWS:4131 +msgid "" +":issue:`40910`: Export explicitly the :c:func:`Py_GetArgcArgv` function to " +"the C API and document the function. Previously, it was exported implicitly " +"which no longer works since Python is built with ``-fvisibility=hidden``." +msgstr "" + +#: ../../../build/NEWS:4135 +msgid ":issue:`40724`: Allow defining buffer slots in type specs." +msgstr "" + +#: ../../../build/NEWS:4137 +msgid "" +":issue:`40826`: :c:func:`PyOS_InterruptOccurred` now fails with a fatal " +"error if it is called with the GIL released." +msgstr "" + +#: ../../../build/NEWS:4142 +msgid "Python 3.9.0 beta 1" +msgstr "" + +#: ../../../build/NEWS:4144 +msgid "*Release date: 2020-05-19*" +msgstr "*发布日期: 2020-05-19*" + +#: ../../../build/NEWS:4149 +msgid "" +":issue:`40501`: :mod:`uuid` no longer uses :mod:`ctypes` to load " +":file:`libuuid` or :file:`rpcrt4.dll` at runtime." +msgstr "" + +#: ../../../build/NEWS:4155 +msgid "" +":issue:`40663`: Correctly generate annotations where parentheses are omitted" +" but required (e.g: ``Type[(str, int, *other))]``." +msgstr "" + +#: ../../../build/NEWS:4158 +msgid "" +":issue:`40596`: Fixed :meth:`str.isidentifier` for non-canonicalized strings" +" containing non-BMP characters on Windows." +msgstr "" + +#: ../../../build/NEWS:4161 +msgid "" +":issue:`40593`: Improved syntax errors for invalid characters in source " +"code." +msgstr "" + +#: ../../../build/NEWS:4163 +msgid "" +":issue:`40585`: Fixed a bug when using :func:`codeop.compile_command` that " +"was causing exceptions to be swallowed with the new parser. Patch by Pablo " +"Galindo" +msgstr "" + +#: ../../../build/NEWS:4167 +msgid ":issue:`40566`: Apply :pep:`573` to :mod:`abc`." +msgstr "" + +#: ../../../build/NEWS:4169 +msgid "" +":issue:`40502`: Initialize ``n->n_col_offset``. (Patch by Joannah Nanjekye)" +msgstr "" + +#: ../../../build/NEWS:4171 +msgid "" +":issue:`40527`: Fix command line argument parsing: no longer write errors " +"multiple times into stderr." +msgstr "" + +#: ../../../build/NEWS:4174 +msgid "" +":issue:`1635741`: Port :mod:`errno` to multiphase initialization " +"(:pep:`489`)." +msgstr "" + +#: ../../../build/NEWS:4176 +msgid "" +":issue:`40523`: Add pass-throughs for :func:`hash` and :func:`reversed` to " +":class:`weakref.proxy` objects. Patch by Pablo Galindo." +msgstr "" + +#: ../../../build/NEWS:4179 +msgid "" +":issue:`1635741`: Port :mod:`syslog` to multiphase initialization " +"(:pep:`489`)." +msgstr "" + +#: ../../../build/NEWS:4181 +msgid "" +":issue:`40246`: Reporting a specialised error message for invalid string " +"prefixes, which was introduced in :issue:`40246`, is being reverted due to " +"backwards compatibility concerns for strings that immediately follow a " +"reserved keyword without whitespace between them. Constructs like " +"`bg=\"#d00\" if clear else\"#fca\"` were failing to parse, which is not an " +"acceptable breakage on such short notice." +msgstr "" + +#: ../../../build/NEWS:4188 +msgid "" +":issue:`40417`: Fix imp module deprecation warning when " +"PyImport_ReloadModule is called. Patch by Robert Rouhani." +msgstr "" + +#: ../../../build/NEWS:4191 +msgid "" +":issue:`40408`: Fixed support of nested type variables in GenericAlias (e.g." +" ``list[list[T]]``)." +msgstr "" + +#: ../../../build/NEWS:4194 +msgid "" +":issue:`1635741`: Port _stat module to multiphase initialization " +"(:pep:`489`)." +msgstr "" + +#: ../../../build/NEWS:4196 +msgid "" +":issue:`29587`: Enable implicit exception chaining when calling " +":meth:`generator.throw`." +msgstr "" + +#: ../../../build/NEWS:4199 +msgid "" +":issue:`40328`: Add tools for generating mappings headers for CJKCodecs." +msgstr "" + +#: ../../../build/NEWS:4201 +msgid "" +":issue:`40228`: Setting frame.f_lineno is now robust w.r.t. changes in the " +"source-to-bytecode compiler" +msgstr "" + +#: ../../../build/NEWS:4204 +msgid "" +":issue:`38880`: Added the ability to list interpreters associated with " +"channel ends in the internal subinterpreters module." +msgstr "" + +#: ../../../build/NEWS:4207 +msgid "" +":issue:`37986`: Improve performance of :c:func:`PyLong_FromDouble` for " +"values that fit into :c:type:`long`." +msgstr "" + +#: ../../../build/NEWS:4213 +msgid "" +":issue:`40662`: Fixed :func:`ast.get_source_segment` for ast nodes that have" +" incomplete location information. Patch by Irit Katriel." +msgstr "" + +#: ../../../build/NEWS:4216 +msgid ":issue:`40665`: Convert :mod:`bisect` to use Argument Clinic." +msgstr "" + +#: ../../../build/NEWS:4218 +msgid "" +":issue:`40536`: Added the :func:`~zoneinfo.available_timezones` function to " +"the :mod:`zoneinfo` module. Patch by Paul Ganssle." +msgstr "" + +#: ../../../build/NEWS:4221 +msgid "" +":issue:`40645`: The :class:`hmac.HMAC` exposes internal implementation " +"details. The attributes ``digest_cons``, ``inner``, and ``outer`` are " +"deprecated and will be removed in the future." +msgstr "" + +#: ../../../build/NEWS:4225 +msgid "" +":issue:`40645`: The internal module ``_hashlib`` wraps and exposes OpenSSL's" +" HMAC API. The new code will be used in Python 3.10 after the internal " +"implementation details of the pure Python HMAC module are no longer part of " +"the public API." +msgstr "" + +#: ../../../build/NEWS:4230 +msgid "" +":issue:`40637`: Builtin hash modules can now be disabled or selectively " +"enabled with ``configure --with-builtin-hashlib-hashes=sha3,blake1`` or " +"``--without-builtin-hashlib-hashes``." +msgstr "" + +#: ../../../build/NEWS:4234 +msgid "" +":issue:`37630`: The :mod:`hashlib` module can now use SHA3 hashes and SHAKE " +"XOF from OpenSSL when available." +msgstr "" + +#: ../../../build/NEWS:4237 +msgid "" +":issue:`40479`: The :mod:`hashlib` now compiles with OpenSSL 3.0.0-alpha2." +msgstr "" + +#: ../../../build/NEWS:4239 +msgid ":issue:`40257`: Revert changes to :func:`inspect.getdoc`." +msgstr "" + +#: ../../../build/NEWS:4241 +msgid "" +":issue:`40607`: When cancelling a task due to timeout, " +":meth:`asyncio.wait_for` will now propagate the exception if an error " +"happens during cancellation. Patch by Roman Skurikhin." +msgstr "" + +#: ../../../build/NEWS:4245 +msgid "" +":issue:`40612`: Fix edge cases in SyntaxError formatting. If the offset is " +"<= 0, no caret is printed. If the offset is > line length, the caret is " +"printed pointing just after the last character." +msgstr "" + +#: ../../../build/NEWS:4249 +msgid "" +":issue:`40597`: If text content lines are longer than " +"policy.max_line_length, always use a content-encoding to make sure they are " +"wrapped." +msgstr "" + +#: ../../../build/NEWS:4252 +msgid "" +":issue:`40571`: Added functools.cache() as a simpler, more discoverable way " +"to access the unbounded cache variant of lru_cache(maxsize=None)." +msgstr "" + +#: ../../../build/NEWS:4255 +msgid "" +":issue:`40503`: :pep:`615`, the :mod:`zoneinfo` module. Adds support for the" +" IANA time zone database." +msgstr "" + +#: ../../../build/NEWS:4258 +msgid "" +":issue:`40397`: Removed attributes ``__args__`` and ``__parameters__`` from " +"special generic aliases like ``typing.List`` (not subscripted)." +msgstr "" + +#: ../../../build/NEWS:4261 +msgid "" +":issue:`40549`: Convert posixmodule.c (\"posix\" or \"nt\" module) to the " +"multiphase initialization (PEP 489)." +msgstr "" + +#: ../../../build/NEWS:4264 +msgid "" +":issue:`31033`: Add a ``msg`` argument to :meth:`Future.cancel` and " +":meth:`Task.cancel`." +msgstr "" + +#: ../../../build/NEWS:4267 +msgid "" +":issue:`40541`: Added an optional *counts* parameter to random.sample()." +msgstr "" + +#: ../../../build/NEWS:4269 +msgid "" +":issue:`40515`: The :mod:`ssl` and :mod:`hashlib` modules now actively check" +" that OpenSSL is build with thread support. Python 3.7.0 made thread support" +" mandatory and no longer works safely with a no-thread builds." +msgstr "" + +#: ../../../build/NEWS:4273 +msgid "" +":issue:`31033`: When a :class:`asyncio.Task` is cancelled, the exception " +"traceback now chains all the way back to where the task was first " +"interrupted." +msgstr "" + +#: ../../../build/NEWS:4277 +msgid "" +":issue:`40504`: :func:`functools.lru_cache` objects can now be the targets " +"of weakrefs." +msgstr "" + +#: ../../../build/NEWS:4280 +msgid "" +":issue:`40559`: Fix possible memory leak in the C implementation of " +":class:`asyncio.Task`." +msgstr "" + +#: ../../../build/NEWS:4283 +msgid "" +":issue:`40480`: ``fnmatch.fnmatch()`` could take exponential time in the " +"presence of multiple ``*`` pattern characters. This was repaired by " +"generating more elaborate regular expressions to avoid futile backtracking." +msgstr "" + +#: ../../../build/NEWS:4288 +msgid "" +":issue:`40495`: :mod:`compileall` is now able to use hardlinks to prevent " +"duplicates in a case when ``.pyc`` files for different optimization levels " +"have the same content." +msgstr "" + +#: ../../../build/NEWS:4292 +msgid "" +":issue:`40457`: The ssl module now support OpenSSL builds without TLS 1.0 " +"and 1.1 methods." +msgstr "" + +#: ../../../build/NEWS:4295 +msgid "" +":issue:`40355`: Improve error reporting in :func:`ast.literal_eval` in the " +"presence of malformed :class:`ast.Dict` nodes instead of silently ignoring " +"any non-conforming elements. Patch by Curtis Bucher." +msgstr "" + +#: ../../../build/NEWS:4299 +msgid "" +":issue:`40465`: Deprecated the optional *random* argument to " +"*random.shuffle()*." +msgstr "" + +#: ../../../build/NEWS:4302 +msgid "" +":issue:`40459`: :func:`platform.win32_ver` now produces correct *ptype* " +"strings instead of empty strings." +msgstr "" + +#: ../../../build/NEWS:4305 +msgid "" +":issue:`39435`: The first argument of :func:`pickle.loads` is now " +"positional-only." +msgstr "" + +#: ../../../build/NEWS:4308 +msgid "" +":issue:`39305`: Update :mod:`nntplib` to merge :class:`nntplib.NNTP` and " +":class:`nntplib._NNTPBase`. Patch by Dong-hee Na." +msgstr "" + +#: ../../../build/NEWS:4311 +msgid "" +":issue:`32494`: Update :mod:`dbm.gnu` to use gdbm_count if possible when " +"calling :func:`len`. Patch by Dong-hee Na." +msgstr "" + +#: ../../../build/NEWS:4314 +msgid "" +":issue:`40453`: Add ``isolated=True`` keyword-only parameter to " +"``_xxsubinterpreters.create()``. An isolated subinterpreter cannot spawn " +"threads, spawn a child process or call ``os.fork()``." +msgstr "" + +#: ../../../build/NEWS:4318 +msgid "" +":issue:`40286`: Remove ``_random.Random.randbytes()``: the C implementation " +"of ``randbytes()``. Implement the method in Python to ease subclassing: " +"``randbytes()`` now directly reuses ``getrandbits()``." +msgstr "" + +#: ../../../build/NEWS:4322 +msgid "" +":issue:`40394`: Added default arguments to " +":meth:`difflib.SequenceMatcher.find_longest_match()`." +msgstr "" + +#: ../../../build/NEWS:4325 +msgid "" +":issue:`39995`: Fix a race condition in concurrent.futures._ThreadWakeup: " +"access to _ThreadWakeup is now protected with the shutdown lock." +msgstr "" + +#: ../../../build/NEWS:4328 +msgid "" +":issue:`30966`: ``Process.shutdown(wait=True)`` of :mod:`concurrent.futures`" +" now closes explicitly the result queue." +msgstr "" + +#: ../../../build/NEWS:4331 +msgid "" +":issue:`30966`: Add a new :meth:`~multiprocessing.SimpleQueue.close` method " +"to the :class:`~multiprocessing.SimpleQueue` class to explicitly close the " +"queue." +msgstr "" + +#: ../../../build/NEWS:4335 +msgid "" +":issue:`39966`: Revert :issue:`25597`. :class:`unittest.mock.MagicMock` with" +" wraps' set uses default return values for magic methods." +msgstr "" + +#: ../../../build/NEWS:4338 +msgid "" +":issue:`39791`: Added ``files()`` function to importlib.resources with " +"support for subdirectories in package data, matching backport in " +"importlib_resources 1.5." +msgstr "" + +#: ../../../build/NEWS:4342 +msgid "" +":issue:`40375`: :meth:`imaplib.IMAP4.unselect` is added. Patch by Dong-hee " +"Na." +msgstr "" + +#: ../../../build/NEWS:4344 +msgid "" +":issue:`40389`: ``repr()`` now returns ``typing.Optional[T]`` when called " +"for ``typing.Union`` of two types, one of which is ``NoneType``." +msgstr "" + +#: ../../../build/NEWS:4347 +msgid "" +":issue:`40291`: Add support for CAN_J1939 sockets (available on Linux 5.4+)" +msgstr "" + +#: ../../../build/NEWS:4349 +msgid ":issue:`40273`: :class:`types.MappingProxyType` is now reversible." +msgstr "" + +#: ../../../build/NEWS:4351 +msgid "" +":issue:`39075`: The repr for :class:`types.SimpleNamespace` is now insertion" +" ordered rather than alphabetical." +msgstr "" + +#: ../../../build/NEWS:4354 +msgid "" +":issue:`40192`: On AIX, :func:`~time.thread_time` is now implemented with " +"``thread_cputime()`` which has nanosecond resolution, rather than " +"``clock_gettime(CLOCK_THREAD_CPUTIME_ID)`` which has a resolution of 10 ms. " +"Patch by Batuhan Taskaya." +msgstr "" + +#: ../../../build/NEWS:4359 +msgid "" +":issue:`40025`: Raise TypeError when _generate_next_value_ is defined after " +"members. Patch by Ethan Onstott." +msgstr "" + +#: ../../../build/NEWS:4362 +msgid "" +":issue:`39058`: In the argparse module, the repr for Namespace() and other " +"argument holders now displayed in the order attributes were added. Formerly," +" it displayed in alphabetical order even though argument order is preserved " +"the user visible parts of the module." +msgstr "" + +#: ../../../build/NEWS:4367 +msgid "" +":issue:`24416`: The ``isocalendar()`` methods of :class:`datetime.date` and " +":class:`datetime.datetime` now return a :term:`named tuple` instead of a " +":class:`tuple`." +msgstr "" + +#: ../../../build/NEWS:4374 +msgid "" +":issue:`34790`: Add version of removal for explicit passing of coros to " +"`asyncio.wait()`'s documentation" +msgstr "" + +#: ../../../build/NEWS:4377 +msgid ":issue:`40561`: Provide docstrings for webbrowser open functions." +msgstr "" + +#: ../../../build/NEWS:4379 +msgid "" +":issue:`40499`: Mention that :func:`asyncio.wait` requires a non-empty set " +"of awaitables." +msgstr "" + +#: ../../../build/NEWS:4382 +msgid "" +":issue:`39705`: Tutorial example for sorted() in the Loop Techniques section" +" is given a better explanation. Also a new example is included to explain " +"sorted()'s basic behavior." +msgstr "" + +#: ../../../build/NEWS:4386 +msgid "" +":issue:`39435`: Fix an incorrect signature for :func:`pickle.loads` in the " +"docs" +msgstr "" + +#: ../../../build/NEWS:4391 +msgid "" +":issue:`40055`: distutils.tests now saves/restores warnings filters to leave" +" them unchanged. Importing tests imports docutils which imports " +"pkg_resources which adds a warnings filter." +msgstr "" + +#: ../../../build/NEWS:4395 +msgid "" +":issue:`40436`: test_gdb and test.pythoninfo now check gdb command exit " +"code." +msgstr "" + +#: ../../../build/NEWS:4400 +msgid "" +":issue:`40653`: Move _dirnameW out of HAVE_SYMLINK to fix a potential " +"compiling issue." +msgstr "" + +#: ../../../build/NEWS:4403 +msgid "" +":issue:`40514`: Add ``--with-experimental-isolated-subinterpreters`` build " +"option to ``configure``: better isolate subinterpreters, experimental build " +"mode." +msgstr "" + +#: ../../../build/NEWS:4410 +msgid ":issue:`40650`: Include winsock2.h in pytime.c for timeval." +msgstr "" + +#: ../../../build/NEWS:4412 +msgid "" +":issue:`40458`: Increase reserved stack space to prevent overflow crash on " +"Windows." +msgstr "" + +#: ../../../build/NEWS:4415 +msgid "" +":issue:`39148`: Add IPv6 support to :mod:`asyncio` datagram endpoints in " +"ProactorEventLoop. Change the raised exception for unknown address families " +"to ValueError as it's not coming from Windows API." +msgstr "" + +#: ../../../build/NEWS:4422 +msgid "" +":issue:`34956`: When building Python on macOS from source, ``_tkinter`` now " +"links with non-system Tcl and Tk frameworks if they are installed in " +"``/Library/Frameworks``, as had been the case on older releases of macOS. If" +" a macOS SDK is explicitly configured, by using ``--enable-universalsdk=`` " +"or ``-isysroot``, only the SDK itself is searched. The default behavior can " +"still be overridden with ``--with-tcltk-includes`` and ``--with-tcltk-" +"libs``." +msgstr "" + +#: ../../../build/NEWS:4430 +msgid ":issue:`35569`: Expose RFC 3542 IPv6 socket options." +msgstr "" + +#: ../../../build/NEWS:4435 +msgid "" +":issue:`40479`: Update multissltest helper to test with latest OpenSSL " +"1.0.2, 1.1.0, 1.1.1, and 3.0.0-alpha." +msgstr "" + +#: ../../../build/NEWS:4438 +msgid "" +":issue:`40431`: Fix a syntax typo in ``turtledemo`` that now raises a " +"``SyntaxError``." +msgstr "" + +#: ../../../build/NEWS:4441 +msgid "" +":issue:`40163`: Fix multissltest tool. OpenSSL has changed download URL for " +"old releases. The multissltest tool now tries to download from current and " +"old download URLs." +msgstr "" + +#: ../../../build/NEWS:4448 +msgid "" +":issue:`39465`: Remove the ``_PyUnicode_ClearStaticStrings()`` function from" +" the C API." +msgstr "" + +#: ../../../build/NEWS:4451 +msgid "" +":issue:`38787`: Add PyCFunction_CheckExact() macro for exact type checks now" +" that we allow subtypes of PyCFunction, as well as PyCMethod_CheckExact() " +"and PyCMethod_Check() for the new PyCMethod subtype." +msgstr "" + +#: ../../../build/NEWS:4455 +msgid "" +":issue:`40545`: Declare ``_PyErr_GetTopmostException()`` with " +"``PyAPI_FUNC()`` to properly export the function in the C API. The function " +"remains private (``_Py``) prefix." +msgstr "" + +#: ../../../build/NEWS:4459 +msgid "" +":issue:`40412`: Nullify inittab_copy during finalization, preventing future " +"interpreter initializations in an embedded situation from crashing. Patch by" +" Gregory Szorc." +msgstr "" + +#: ../../../build/NEWS:4463 +msgid "" +":issue:`40429`: The :c:func:`PyThreadState_GetFrame` function now returns a " +"strong reference to the frame." +msgstr "" + +#: ../../../build/NEWS:4466 +msgid "" +":issue:`40428`: Remove the following functions from the C API. Call " +":c:func:`PyGC_Collect` explicitly to free all free lists." +msgstr "" + +#: ../../../build/NEWS:4469 +msgid "``PyAsyncGen_ClearFreeLists()``" +msgstr "``PyAsyncGen_ClearFreeLists()``" + +#: ../../../build/NEWS:4470 +msgid "``PyContext_ClearFreeList()``" +msgstr "``PyContext_ClearFreeList()``" + +#: ../../../build/NEWS:4471 +msgid "``PyDict_ClearFreeList()``" +msgstr "``PyDict_ClearFreeList()``" + +#: ../../../build/NEWS:4472 +msgid "``PyFloat_ClearFreeList()``" +msgstr "``PyFloat_ClearFreeList()``" + +#: ../../../build/NEWS:4473 +msgid "``PyFrame_ClearFreeList()``" +msgstr "``PyFrame_ClearFreeList()``" + +#: ../../../build/NEWS:4474 +msgid "``PyList_ClearFreeList()``" +msgstr "``PyList_ClearFreeList()``" + +#: ../../../build/NEWS:4475 +msgid "``PySet_ClearFreeList()``" +msgstr "" + +#: ../../../build/NEWS:4476 +msgid "``PyTuple_ClearFreeList()``" +msgstr "``PyTuple_ClearFreeList()``" + +#: ../../../build/NEWS:4478 +msgid "" +":issue:`40421`: New :c:func:`PyFrame_GetBack` function: get the frame next " +"outer frame." +msgstr "" + +#: ../../../build/NEWS:4481 +msgid "" +":issue:`40421`: New :c:func:`PyFrame_GetCode` function: return a borrowed " +"reference to the frame code." +msgstr "" + +#: ../../../build/NEWS:4484 +msgid "" +":issue:`40217`: Ensure that instances of types created with " +":c:func:`PyType_FromSpecWithBases` will visit its class object when " +"traversing references in the garbage collector (implemented as an extension " +"of the provided :c:member:`~PyTypeObject.tp_traverse`). Patch by Pablo " +"Galindo." +msgstr "" + +#: ../../../build/NEWS:4490 +msgid "" +":issue:`38787`: Module C state is now accessible from C-defined heap type " +"methods (:pep:`573`). Patch by Marcel Plch and Petr Viktorin." +msgstr "" + +#: ../../../build/NEWS:4495 +msgid "Python 3.9.0 alpha 6" +msgstr "" + +#: ../../../build/NEWS:4497 +msgid "*Release date: 2020-04-27*" +msgstr "*发布日期: 2020-04-27*" + +#: ../../../build/NEWS:4502 +msgid ":issue:`40121`: Fixes audit events raised on creating a new socket." +msgstr "" + +#: ../../../build/NEWS:4504 +msgid "" +":issue:`39073`: Disallow CR or LF in email.headerregistry.Address arguments " +"to guard against header injection attacks." +msgstr "" + +#: ../../../build/NEWS:4507 +msgid "" +":issue:`39503`: CVE-2020-8492: The " +":class:`~urllib.request.AbstractBasicAuthHandler` class of the " +":mod:`urllib.request` module uses an inefficient regular expression which " +"can be exploited by an attacker to cause a denial of service. Fix the regex " +"to prevent the catastrophic backtracking. Vulnerability reported by Ben " +"Caller and Matt Schwager." +msgstr "" + +#: ../../../build/NEWS:4517 +msgid ":issue:`40313`: Improve the performance of bytes.hex()." +msgstr "" + +#: ../../../build/NEWS:4519 +msgid "" +":issue:`40334`: Switch to a new parser, based on PEG. For more details see " +"PEP 617. To temporarily switch back to the old parser, use ``-X oldparser`` " +"or ``PYTHONOLDPARSER=1``. In Python 3.10 we will remove the old parser " +"completely, including the ``parser`` module (already deprecated) and " +"anything that depends on it." +msgstr "" + +#: ../../../build/NEWS:4525 +msgid "" +":issue:`40267`: Fix the tokenizer to display the correct error message, when" +" there is a SyntaxError on the last input character and no newline follows. " +"It used to be `unexpected EOF while parsing`, while it should be `invalid " +"syntax`." +msgstr "" + +#: ../../../build/NEWS:4530 +msgid "" +":issue:`39522`: Correctly unparse explicit ``u`` prefix for strings when " +"postponed evaluation for annotations activated. Patch by Batuhan Taskaya." +msgstr "" + +#: ../../../build/NEWS:4533 +msgid "" +":issue:`40246`: Report a specialized error message, `invalid string prefix`," +" when the tokenizer encounters a string with an invalid prefix." +msgstr "" + +#: ../../../build/NEWS:4536 +msgid "" +":issue:`40082`: Fix the signal handler: it now always uses the main " +"interpreter, rather than trying to get the current Python thread state." +msgstr "" + +#: ../../../build/NEWS:4539 +msgid "" +":issue:`37388`: str.encode() and str.decode() no longer check the encoding " +"and errors in development mode or in debug mode during Python finalization. " +"The codecs machinery can no longer work on very late calls to str.encode() " +"and str.decode()." +msgstr "" + +#: ../../../build/NEWS:4544 +msgid "" +":issue:`40077`: Fix possible refleaks in :mod:`_json`, memo of " +"PyScannerObject should be traversed." +msgstr "" + +#: ../../../build/NEWS:4547 +msgid "" +":issue:`37207`: Speed up calls to ``dict()`` by using the :pep:`590` " +"``vectorcall`` calling convention." +msgstr "" + +#: ../../../build/NEWS:4550 +msgid "" +":issue:`40141`: Add column and line information to ``ast.keyword`` nodes. " +"Patch by Pablo Galindo." +msgstr "" + +#: ../../../build/NEWS:4553 +msgid "" +":issue:`1635741`: Port :mod:`resource` to multiphase initialization " +"(:pep:`489`)." +msgstr "" + +#: ../../../build/NEWS:4556 +msgid "" +":issue:`1635741`: Port :mod:`math` to multiphase initialization " +"(:pep:`489`)." +msgstr "" + +#: ../../../build/NEWS:4558 +msgid "" +":issue:`1635741`: Port _uuid module to multiphase initialization " +"(:pep:`489`)." +msgstr "" + +#: ../../../build/NEWS:4560 +msgid ":issue:`40077`: Convert json module to use :c:func:`PyType_FromSpec`." +msgstr "" + +#: ../../../build/NEWS:4562 +msgid "" +":issue:`40067`: Improve the error message for multiple star expressions in " +"an assignment. Patch by Furkan Onder" +msgstr "" + +#: ../../../build/NEWS:4565 +msgid "" +":issue:`1635741`: Port _functools module to multiphase initialization (PEP " +"489). Patch by Paulo Henrique Silva." +msgstr "" + +#: ../../../build/NEWS:4568 +msgid "" +":issue:`1635741`: Port operator module to multiphase initialization (PEP " +"489). Patch by Paulo Henrique Silva." +msgstr "" + +#: ../../../build/NEWS:4571 +msgid "" +":issue:`20526`: Fix :c:func:`PyThreadState_Clear()`. ``PyThreadState.frame``" +" is a borrowed reference, not a strong reference: ``PyThreadState_Clear()`` " +"must not call ``Py_CLEAR(tstate->frame)``." +msgstr "" + +#: ../../../build/NEWS:4575 +msgid "" +":issue:`1635741`: Port time module to multiphase initialization " +"(:pep:`489`). Patch by Paulo Henrique Silva." +msgstr "" + +#: ../../../build/NEWS:4578 ../../../build/NEWS:4970 +msgid "" +":issue:`1635741`: Port _weakref extension module to multiphase " +"initialization (:pep:`489`)." +msgstr "" + +#: ../../../build/NEWS:4581 +msgid "" +":issue:`40020`: Fix a leak and subsequent crash in parsetok.c caused by " +"realloc misuse on a rare codepath." +msgstr "" + +#: ../../../build/NEWS:4584 +msgid "" +":issue:`39939`: Added str.removeprefix and str.removesuffix methods and " +"corresponding bytes, bytearray, and collections.UserString methods to remove" +" affixes from a string if present. See :pep:`616` for a full description. " +"Patch by Dennis Sweeney." +msgstr "" + +#: ../../../build/NEWS:4589 +msgid "" +":issue:`39481`: Implement PEP 585. This supports list[int], tuple[str, ...] " +"etc." +msgstr "" + +#: ../../../build/NEWS:4592 +msgid "" +":issue:`32894`: Support unparsing of infinity numbers in postponed " +"annotations. Patch by Batuhan Taşkaya." +msgstr "" + +#: ../../../build/NEWS:4595 +msgid "" +":issue:`37207`: Speed up calls to ``list()`` by using the :pep:`590` " +"``vectorcall`` calling convention. Patch by Mark Shannon." +msgstr "" + +#: ../../../build/NEWS:4601 +msgid "" +":issue:`40398`: :func:`typing.get_args` now always returns an empty tuple " +"for special generic aliases." +msgstr "" + +#: ../../../build/NEWS:4604 +msgid "" +":issue:`40396`: Functions :func:`typing.get_origin`, :func:`typing.get_args`" +" and :func:`typing.get_type_hints` support now generic aliases like " +"``list[int]``." +msgstr "" + +#: ../../../build/NEWS:4608 +msgid "" +":issue:`38061`: Optimize the :mod:`subprocess` module on FreeBSD using " +"``closefrom()``. A single ``close(fd)`` syscall is cheap, but when " +"``sysconf(_SC_OPEN_MAX)`` is high, the loop calling ``close(fd)`` on each " +"file descriptor can take several milliseconds." +msgstr "" + +#: ../../../build/NEWS:4613 +msgid "" +"The workaround on FreeBSD to improve performance was to load and mount the " +"fdescfs kernel module, but this is not enabled by default." +msgstr "" + +#: ../../../build/NEWS:4616 ../../../build/NEWS:4624 +msgid "" +"Initial patch by Ed Maste (emaste), Conrad Meyer (cem), Kyle Evans (kevans) " +"and Kubilay Kocak (koobs): " +"https://bugs.freebsd.org/bugzilla/show_bug.cgi?id=242274" +msgstr "" + +#: ../../../build/NEWS:4620 +msgid "" +":issue:`38061`: On FreeBSD, ``os.closerange(fd_low, fd_high)`` now calls " +"``closefrom(fd_low)`` if *fd_high* is greater than or equal to " +"``sysconf(_SC_OPEN_MAX)``." +msgstr "" + +#: ../../../build/NEWS:4628 +msgid "" +":issue:`40360`: The :mod:`lib2to3` module is pending deprecation due to " +":pep:`617`." +msgstr "" + +#: ../../../build/NEWS:4631 +msgid "" +":issue:`40138`: Fix the Windows implementation of :func:`os.waitpid` for " +"exit code larger than ``INT_MAX >> 8``. The exit status is now interpreted " +"as an unsigned number." +msgstr "" + +#: ../../../build/NEWS:4635 +msgid "" +":issue:`39942`: Set \"__main__\" as the default module name when " +"\"__name__\" is missing in :class:`typing.TypeVar`. Patch by Weipeng Hong." +msgstr "" + +#: ../../../build/NEWS:4638 +msgid "" +":issue:`40275`: The :mod:`logging` package is now imported lazily in " +":mod:`unittest` only when the :meth:`~unittest.TestCase.assertLogs` " +"assertion is used." +msgstr "" + +#: ../../../build/NEWS:4642 +msgid "" +":issue:`40275`: The :mod:`asyncio` package is now imported lazily in " +":mod:`unittest` only when the :class:`~unittest.IsolatedAsyncioTestCase` " +"class is used." +msgstr "" + +#: ../../../build/NEWS:4646 +msgid "" +":issue:`40330`: In :meth:`ShareableList.__setitem__`, check the size of a " +"new string item after encoding it to utf-8, not before." +msgstr "" + +#: ../../../build/NEWS:4649 +msgid "" +":issue:`40148`: Added :meth:`pathlib.Path.with_stem()` to create a new Path " +"with the stem replaced." +msgstr "" + +#: ../../../build/NEWS:4652 +msgid ":issue:`40325`: Deprecated support for set objects in random.sample()." +msgstr "" + +#: ../../../build/NEWS:4654 +msgid "" +":issue:`40257`: Improved help for the :mod:`typing` module. Docstrings are " +"now shown for all special forms and special generic aliases (like ``Union`` " +"and ``List``). Using ``help()`` with generic alias like ``List[int]`` will " +"show the help for the correspondent concrete type (``list`` in this case)." +msgstr "" + +#: ../../../build/NEWS:4659 +msgid "" +":issue:`40257`: func:`inspect.getdoc` no longer returns docstring inherited " +"from the type of the object or from parent class if it is a class if it is " +"not defined in the object itself. In :mod:`pydoc` the documentation string " +"is now shown not only for class, function, method etc, but for any object " +"that has its own ``__doc__`` attribute." +msgstr "" + +#: ../../../build/NEWS:4665 +msgid "" +":issue:`40287`: Fixed ``SpooledTemporaryFile.seek()`` to return the " +"position." +msgstr "" + +#: ../../../build/NEWS:4667 +msgid ":issue:`40290`: Added zscore() to statistics.NormalDist()." +msgstr "" + +#: ../../../build/NEWS:4669 +msgid "" +":issue:`40282`: Allow ``random.getrandbits(0)`` to succeed and to return 0." +msgstr "" + +#: ../../../build/NEWS:4671 +msgid "" +":issue:`40286`: Add :func:`random.randbytes` function and " +":meth:`random.Random.randbytes` method to generate random bytes." +msgstr "" + +#: ../../../build/NEWS:4674 +msgid "" +":issue:`40277`: :func:`collections.namedtuple` now provides a human-readable" +" repr for its field accessors." +msgstr "" + +#: ../../../build/NEWS:4677 +msgid "" +":issue:`40270`: The included copy of sqlite3 on Windows is now compiled with" +" the json extension. This allows the use of functions such as " +"``json_object``." +msgstr "" + +#: ../../../build/NEWS:4681 +msgid "" +":issue:`29255`: Wait in `KqueueSelector.select` when no fds are registered" +msgstr "" + +#: ../../../build/NEWS:4683 +msgid "" +":issue:`40260`: Ensure :mod:`modulefinder` uses :func:`io.open_code` and " +"respects coding comments." +msgstr "" + +#: ../../../build/NEWS:4686 +msgid "" +":issue:`40234`: Allow again to spawn daemon threads in subinterpreters " +"(revert change which denied them)." +msgstr "" + +#: ../../../build/NEWS:4689 +msgid "" +":issue:`39207`: Workers in :class:`~concurrent.futures.ProcessPoolExecutor` " +"are now spawned on demand, only when there are no available idle workers to " +"reuse. This optimizes startup overhead and reduces the amount of lost CPU " +"time to idle workers. Patch by Kyle Stanley." +msgstr "" + +#: ../../../build/NEWS:4694 +msgid "" +":issue:`40091`: Fix a hang at fork in the logging module: the new private " +"_at_fork_reinit() method is now used to reinitialize locks at fork in the " +"child process." +msgstr "" + +#: ../../../build/NEWS:4698 +msgid "" +":issue:`40149`: Implement traverse and clear slots in _abc._abc_data type." +msgstr "" + +#: ../../../build/NEWS:4700 +msgid "" +":issue:`40208`: Remove deprecated :meth:`symtable.SymbolTable.has_exec`." +msgstr "" + +#: ../../../build/NEWS:4702 +msgid "" +":issue:`40196`: Fix a bug in the :mod:`symtable` module that was causing " +"incorrectly report global variables as local. Patch by Pablo Galindo." +msgstr "" + +#: ../../../build/NEWS:4705 +msgid "" +":issue:`40190`: Add support for ``_SC_AIX_REALMEM`` to " +":func:`posix.sysconf`." +msgstr "" + +#: ../../../build/NEWS:4707 +msgid "" +":issue:`40182`: Removed the ``_field_types`` attribute of the " +":class:`typing.NamedTuple` class." +msgstr "" + +#: ../../../build/NEWS:4710 +msgid "" +":issue:`36517`: Multiple inheritance with :class:`typing.NamedTuple` now " +"raises an error instead of silently ignoring other types." +msgstr "" + +#: ../../../build/NEWS:4713 +msgid "" +":issue:`40126`: Fixed reverting multiple patches in unittest.mock. Patcher's" +" ``__exit__()`` is now never called if its ``__enter__()`` is failed. " +"Returning true from ``__exit__()`` silences now the exception." +msgstr "" + +#: ../../../build/NEWS:4717 +msgid "" +":issue:`40094`: CGIHTTPRequestHandler of http.server now logs the CGI script" +" exit code, rather than the CGI script exit status of os.waitpid(). For " +"example, if the script is killed by signal 11, it now logs: \"CGI script " +"exit code -11.\"" +msgstr "" + +#: ../../../build/NEWS:4722 +msgid "" +":issue:`40108`: Improve the error message when triying to import a module " +"using :mod:`runpy` and incorrently use the \".py\" extension at the end of " +"the module name. Patch by Pablo Galindo." +msgstr "" + +#: ../../../build/NEWS:4726 +msgid "" +":issue:`40094`: Add :func:`os.waitstatus_to_exitcode` function: convert a " +"wait status to an exit code." +msgstr "" + +#: ../../../build/NEWS:4729 +msgid "" +":issue:`40089`: Fix threading._after_fork(): if fork was not called by a " +"thread spawned by threading.Thread, threading._after_fork() now creates a " +"_MainThread instance for _main_thread, instead of a _DummyThread instance." +msgstr "" + +#: ../../../build/NEWS:4733 +msgid "" +":issue:`40089`: Add a private ``_at_fork_reinit()`` method to " +":class:`_thread.Lock`, :class:`_thread.RLock`, :class:`threading.RLock` and " +":class:`threading.Condition` classes: reinitialize the lock at fork in the " +"child process, reset the lock to the unlocked state. Rename also the private" +" ``_reset_internal_locks()`` method of :class:`threading.Event` to " +"``_at_fork_reinit()``." +msgstr "" + +#: ../../../build/NEWS:4740 +msgid "" +":issue:`25780`: Expose :data:`~socket.CAN_RAW_JOIN_FILTERS` in the " +":mod:`socket` module." +msgstr "" + +#: ../../../build/NEWS:4743 +msgid "" +":issue:`39503`: :class:`~urllib.request.AbstractBasicAuthHandler` of " +":mod:`urllib.request` now parses all WWW-Authenticate HTTP headers and " +"accepts multiple challenges per header: use the realm of the first Basic " +"challenge." +msgstr "" + +#: ../../../build/NEWS:4748 +msgid "" +":issue:`39812`: Removed daemon threads from :mod:`concurrent.futures` by " +"adding an internal `threading._register_atexit()`, which calls registered " +"functions prior to joining all non-daemon threads. This allows for " +"compatibility with subinterpreters, which don't support daemon threads." +msgstr "" + +#: ../../../build/NEWS:4753 +msgid "" +":issue:`40050`: Fix ``importlib._bootstrap_external``: avoid creating a new " +"``winreg`` builtin module if it's already available in :data:`sys.modules`, " +"and remove redundant imports." +msgstr "" + +#: ../../../build/NEWS:4757 +msgid "" +":issue:`40014`: Fix ``os.getgrouplist()``: if ``getgrouplist()`` function " +"fails because the group list is too small, retry with a larger group list. " +"On failure, the glibc implementation of ``getgrouplist()`` sets ``ngroups`` " +"to the total number of groups. For other implementations, double the group " +"list size." +msgstr "" + +#: ../../../build/NEWS:4763 +msgid "" +":issue:`40017`: Add :data:`time.CLOCK_TAI` constant if the operating system " +"support it." +msgstr "" + +#: ../../../build/NEWS:4766 +msgid "" +":issue:`40016`: In re docstring, clarify the relationship between inline and" +" argument compile flags." +msgstr "" + +#: ../../../build/NEWS:4769 +msgid "" +":issue:`39953`: Update internal table of OpenSSL error codes in the ``ssl`` " +"module." +msgstr "" + +#: ../../../build/NEWS:4772 +msgid "" +":issue:`36144`: Added :pep:`584` operators to " +":class:`weakref.WeakValueDictionary`." +msgstr "" + +#: ../../../build/NEWS:4775 +msgid "" +":issue:`36144`: Added :pep:`584` operators to " +":class:`weakref.WeakKeyDictionary`." +msgstr "" + +#: ../../../build/NEWS:4778 +msgid "" +":issue:`38891`: Fix linear runtime behaviour of the `__getitem__` and " +"`__setitem__` methods in " +":class:`multiprocessing.shared_memory.ShareableList`. This avoids quadratic " +"performance when iterating a `ShareableList`. Patch by Thomas Krennwallner." +msgstr "" + +#: ../../../build/NEWS:4784 +msgid "" +":issue:`39682`: Remove undocumented support for *closing* a `pathlib.Path` " +"object via its context manager. The context manager magic methods remain, " +"but they are now a no-op, making `Path` objects immutable." +msgstr "" + +#: ../../../build/NEWS:4788 +msgid "" +":issue:`36144`: Added :pep:`584` operators (``|`` and ``|=``) to " +":class:`collections.ChainMap`." +msgstr "" + +#: ../../../build/NEWS:4791 +msgid "" +":issue:`39011`: Normalization of line endings in ElementTree attributes was " +"removed, as line endings which were replaced by entity numbers should be " +"preserved in original form." +msgstr "" + +#: ../../../build/NEWS:4795 +msgid "" +":issue:`38410`: Properly handle :func:`sys.audit` failures in " +":func:`sys.set_asyncgen_hooks`." +msgstr "" + +#: ../../../build/NEWS:4798 +msgid "" +":issue:`36541`: lib2to3 now recognizes named assignment expressions (the " +"walrus operator, ``:=``)" +msgstr "" + +#: ../../../build/NEWS:4801 +msgid "" +":issue:`35967`: In platform, delay the invocation of 'uname -p' until the " +"processor attribute is requested." +msgstr "" + +#: ../../../build/NEWS:4804 +msgid "" +":issue:`35113`: :meth:`inspect.getsource` now returns correct source code " +"for inner class with same name as module level class. Decorators are also " +"returned as part of source of the class. Patch by Karthikeyan Singaravelan." +msgstr "" + +#: ../../../build/NEWS:4809 +msgid "" +":issue:`33262`: Deprecate passing None as an argument for " +":func:`shlex.split()`'s ``s`` parameter. Patch by Zackery Spytz." +msgstr "" + +#: ../../../build/NEWS:4812 +msgid "" +":issue:`31758`: Prevent crashes when using an uninitialized " +"``_elementtree.XMLParser`` object. Patch by Oren Milman." +msgstr "" + +#: ../../../build/NEWS:4818 +msgid "" +":issue:`27635`: The pickle documentation incorrectly claimed that " +"``__new__`` isn't called by default when unpickling." +msgstr "" + +#: ../../../build/NEWS:4821 +msgid "" +":issue:`39879`: Updated :ref:`datamodel` docs to include :func:`dict` " +"insertion order preservation. Patch by Furkan Onder and Samy Lahfa." +msgstr "" + +#: ../../../build/NEWS:4824 +msgid "" +":issue:`38387`: Document :c:macro:`PyDoc_STRVAR` macro in the C-API " +"reference." +msgstr "" + +#: ../../../build/NEWS:4826 +msgid "" +":issue:`13743`: Some methods within xml.dom.minidom.Element class are now " +"better documented." +msgstr "" + +#: ../../../build/NEWS:4832 +msgid "" +":issue:`31904`: Set expected default encoding in test_c_locale_coercion.py " +"for VxWorks RTOS." +msgstr "" + +#: ../../../build/NEWS:4835 +msgid ":issue:`40162`: Update Travis CI configuration to OpenSSL 1.1.1f." +msgstr "" + +#: ../../../build/NEWS:4837 +msgid ":issue:`40146`: Update OpenSSL to 1.1.1f in Azure Pipelines." +msgstr "" + +#: ../../../build/NEWS:4839 +msgid ":issue:`40094`: Add :func:`test.support.wait_process` function." +msgstr "" + +#: ../../../build/NEWS:4841 +msgid "" +":issue:`40003`: ``test.bisect_cmd`` now copies Python command line options " +"like ``-O`` or ``-W``. Moreover, emit a warning if ``test.bisect_cmd`` is " +"used with ``-w``/``--verbose2`` option." +msgstr "" + +#: ../../../build/NEWS:4845 +msgid "" +":issue:`39380`: Add the encoding in :class:`ftplib.FTP` and " +":class:`ftplib.FTP_TLS` to the constructor as keyword-only and change the " +"default from ``latin-1`` to ``utf-8`` to follow :rfc:`2640`." +msgstr "" + +#: ../../../build/NEWS:4849 +msgid "" +":issue:`39793`: Use the same domain when testing ``make_msgid``. Patch by " +"Batuhan Taskaya." +msgstr "" + +#: ../../../build/NEWS:4852 +msgid "" +":issue:`1812`: Fix newline handling in doctest.testfile when loading from a " +"package whose loader has a get_data method. Patch by Peter Donis." +msgstr "" + +#: ../../../build/NEWS:4858 +msgid ":issue:`38360`: Support single-argument form of macOS -isysroot flag." +msgstr "" + +#: ../../../build/NEWS:4860 +msgid "" +":issue:`40158`: Fix CPython MSBuild Properties in NuGet Package " +"(build/native/python.props)" +msgstr "" + +#: ../../../build/NEWS:4863 +msgid "" +":issue:`38527`: Fix configure check on Solaris for \"float word ordering\": " +"sometimes, the correct \"grep\" command was not being used. Patch by Arnon " +"Yaari." +msgstr "" + +#: ../../../build/NEWS:4870 +msgid ":issue:`40164`: Updates Windows to OpenSSL 1.1.1f" +msgstr "" + +#: ../../../build/NEWS:4872 +msgid "" +":issue:`8901`: Ignore the Windows registry when the ``-E`` option is used." +msgstr "" + +#: ../../../build/NEWS:4877 +msgid "" +":issue:`38329`: python.org macOS installers now update the Current version " +"symlink of /Library/Frameworks/Python.framework/Versions for 3.9 installs. " +"Previously, Current was only updated for Python 2.x installs. This should " +"make it easier to embed Python 3 into other macOS applications." +msgstr "" + +#: ../../../build/NEWS:4882 +msgid ":issue:`40164`: Update macOS installer builds to use OpenSSL 1.1.1g." +msgstr "" + +#: ../../../build/NEWS:4887 +msgid "" +":issue:`38439`: Add a 256×256 pixel IDLE icon to support more modern " +"environments. Created by Andrew Clover. Delete the unused macOS idle.icns " +"icon file." +msgstr "" + +#: ../../../build/NEWS:4891 +msgid "" +":issue:`38689`: IDLE will no longer freeze when inspect.signature fails when" +" fetching a calltip." +msgstr "" + +#: ../../../build/NEWS:4897 +msgid "" +":issue:`40385`: Removed the checkpyc.py tool. Please see compileall without " +"force mode as a potential alternative." +msgstr "" + +#: ../../../build/NEWS:4900 +msgid ":issue:`40179`: Fixed translation of ``#elif`` in Argument Clinic." +msgstr "" + +#: ../../../build/NEWS:4902 +msgid "" +":issue:`40094`: Fix ``which.py`` script exit code: it now uses " +":func:`os.waitstatus_to_exitcode` to convert :func:`os.system` exit status " +"into an exit code." +msgstr "" + +#: ../../../build/NEWS:4909 +msgid "" +":issue:`40241`: Move the :c:type:`PyGC_Head` structure to the internal C " +"API." +msgstr "" + +#: ../../../build/NEWS:4911 +msgid "" +":issue:`40170`: Convert :c:func:`PyObject_IS_GC` macro to a function to hide" +" implementation details." +msgstr "" + +#: ../../../build/NEWS:4914 +msgid "" +":issue:`40241`: Add the functions :c:func:`PyObject_GC_IsTracked` and " +":c:func:`PyObject_GC_IsFinalized` to the public API to allow to query if " +"Python objects are being currently tracked or have been already finalized by" +" the garbage collector respectively. Patch by Pablo Galindo." +msgstr "" + +#: ../../../build/NEWS:4919 +msgid "" +":issue:`40170`: The :c:func:`PyObject_NEW` macro becomes an alias to the " +":c:func:`PyObject_New` macro, and the :c:func:`PyObject_NEW_VAR` macro " +"becomes an alias to the :c:func:`PyObject_NewVar` macro, to hide " +"implementation details. They no longer access directly the " +":c:member:`PyTypeObject.tp_basicsize` member." +msgstr "" + +#: ../../../build/NEWS:4925 +msgid "" +":issue:`40170`: :c:func:`PyType_HasFeature` now always calls " +":c:func:`PyType_GetFlags` to hide implementation details. Previously, it " +"accessed directly the :c:member:`PyTypeObject.tp_flags` member when the " +"limited C API was not used." +msgstr "" + +#: ../../../build/NEWS:4930 +msgid "" +":issue:`40170`: Convert the :c:func:`PyObject_GET_WEAKREFS_LISTPTR` macro to" +" a function to hide implementation details: the macro accessed directly to " +"the :c:member:`PyTypeObject.tp_weaklistoffset` member." +msgstr "" + +#: ../../../build/NEWS:4934 +msgid "" +":issue:`40170`: Convert :c:func:`PyObject_CheckBuffer` macro to a function " +"to hide implementation details: the macro accessed directly the " +":c:member:`PyTypeObject.tp_as_buffer` member." +msgstr "" + +#: ../../../build/NEWS:4938 +msgid "" +":issue:`40170`: Always declare :c:func:`PyIndex_Check` as an opaque function" +" to hide implementation details: remove ``PyIndex_Check()`` macro. The macro" +" accessed directly the :c:member:`PyTypeObject.tp_as_number` member." +msgstr "" + +#: ../../../build/NEWS:4942 +msgid "" +":issue:`39947`: Add :c:func:`PyThreadState_GetID` function: get the unique " +"identifier of a Python thread state." +msgstr "" + +#: ../../../build/NEWS:4947 +msgid "Python 3.9.0 alpha 5" +msgstr "" + +#: ../../../build/NEWS:4949 +msgid "*Release date: 2020-03-23*" +msgstr "*发布日期: 2020-03-23*" + +#: ../../../build/NEWS:4954 +msgid "" +":issue:`38576`: Disallow control characters in hostnames in http.client, " +"addressing CVE-2019-18348. Such potentially malicious header injection URLs " +"now cause a InvalidURL to be raised." +msgstr "" + +#: ../../../build/NEWS:4961 +msgid "" +":issue:`40010`: Optimize pending calls in multithreaded applications. If a " +"thread different than the main thread schedules a pending call " +"(:c:func:`Py_AddPendingCall`), the bytecode evaluation loop is no longer " +"interrupted at each bytecode instruction to check for pending calls which " +"cannot be executed. Only the main thread can execute pending calls." +msgstr "" + +#: ../../../build/NEWS:4967 +msgid "" +"Previously, the bytecode evaluation loop was interrupted at each instruction" +" until the main thread executes pending calls." +msgstr "" + +#: ../../../build/NEWS:4973 +msgid "" +":issue:`1635741`: Port _collections module to multiphase initialization " +"(:pep:`489`)." +msgstr "" + +#: ../../../build/NEWS:4976 +msgid "" +":issue:`40010`: Optimize signal handling in multithreaded applications. If a" +" thread different than the main thread gets a signal, the bytecode " +"evaluation loop is no longer interrupted at each bytecode instruction to " +"check for pending signals which cannot be handled. Only the main thread of " +"the main interpreter can handle signals." +msgstr "" + +#: ../../../build/NEWS:4982 +msgid "" +"Previously, the bytecode evaluation loop was interrupted at each instruction" +" until the main thread handles signals." +msgstr "" + +#: ../../../build/NEWS:4985 +msgid "" +":issue:`39984`: If :c:func:`Py_AddPendingCall` is called in a " +"subinterpreter, the function is now scheduled to be called from the " +"subinterpreter, rather than being called from the main interpreter. Each " +"subinterpreter now has its own list of scheduled calls." +msgstr "" + +#: ../../../build/NEWS:4990 +msgid ":issue:`1635741`: Port _heapq module to multiphase initialization." +msgstr "" + +#: ../../../build/NEWS:4992 +msgid "" +":issue:`1635741`: Port itertools module to multiphase initialization " +"(:pep:`489`)." +msgstr "" + +#: ../../../build/NEWS:4995 +msgid "" +":issue:`37207`: Speed up calls to ``frozenset()`` by using the :pep:`590` " +"``vectorcall`` calling convention. Patch by Dong-hee Na." +msgstr "" + +#: ../../../build/NEWS:4998 +msgid "" +":issue:`39984`: subinterpreters: Move " +"``_PyRuntimeState.ceval.tracing_possible`` to " +"``PyInterpreterState.ceval.tracing_possible``: each interpreter now has its " +"own variable." +msgstr "" + +#: ../../../build/NEWS:5003 +msgid "" +":issue:`37207`: Speed up calls to ``set()`` by using the :pep:`590` " +"``vectorcall`` calling convention. Patch by Dong-hee Na." +msgstr "" + +#: ../../../build/NEWS:5006 +msgid "" +":issue:`1635741`: Port _statistics module to multiphase initialization " +"(:pep:`489`)." +msgstr "" + +#: ../../../build/NEWS:5009 +msgid "" +":issue:`39968`: Use inline function to replace extension modules' " +"get_module_state macros." +msgstr "" + +#: ../../../build/NEWS:5012 +msgid "" +":issue:`39965`: Correctly raise ``SyntaxError`` if *await* is used inside " +"non-async functions and ``PyCF_ALLOW_TOP_LEVEL_AWAIT`` is set (like in the " +"asyncio REPL). Patch by Pablo Galindo." +msgstr "" + +#: ../../../build/NEWS:5016 +msgid "" +":issue:`39562`: Allow executing asynchronous comprehensions on the top level" +" when the ``PyCF_ALLOW_TOP_LEVEL_AWAIT`` flag is given. Patch by Batuhan " +"Taskaya." +msgstr "" + +#: ../../../build/NEWS:5020 +msgid "" +":issue:`37207`: Speed up calls to ``tuple()`` by using the :pep:`590` " +"``vectorcall`` calling convention. Patch by Dong-hee Na." +msgstr "" + +#: ../../../build/NEWS:5023 +msgid "" +":issue:`38373`: Changed list overallocation strategy. It no longer " +"overallocates if the new size is closer to overalocated size than to the old" +" size and adds padding." +msgstr "" + +#: ../../../build/NEWS:5027 +msgid ":issue:`39926`: Update Unicode database to Unicode version 13.0.0." +msgstr "" + +#: ../../../build/NEWS:5029 +msgid "" +":issue:`19466`: Clear the frames of daemon threads earlier during the Python" +" shutdown to call objects destructors. So \"unclosed file\" resource " +"warnings are now emitted for daemon threads in a more reliable way." +msgstr "" + +#: ../../../build/NEWS:5033 +msgid "" +":issue:`38894`: Fix a bug that was causing incomplete results when calling " +"``pathlib.Path.glob`` in the presence of symlinks that point to files where " +"the user does not have read access. Patch by Pablo Galindo and Matt " +"Wozniski." +msgstr "" + +#: ../../../build/NEWS:5038 +msgid "" +":issue:`39877`: Fix :c:func:`PyEval_RestoreThread` random crash at exit with" +" daemon threads. It now accesses the ``_PyRuntime`` variable directly " +"instead of using ``tstate->interp->runtime``, since ``tstate`` can be a " +"dangling pointer after :c:func:`Py_Finalize` has been called. Moreover, the " +"daemon thread now exits before trying to take the GIL." +msgstr "" + +#: ../../../build/NEWS:5044 +msgid "" +":issue:`39871`: Fix a possible :exc:`SystemError` in " +"``math.{atan2,copysign,remainder}()`` when the first argument cannot be " +"converted to a :class:`float`. Patch by Zackery Spytz." +msgstr "" + +#: ../../../build/NEWS:5048 +msgid "" +":issue:`39776`: Fix race condition where threads created by " +"PyGILState_Ensure() could get a duplicate id." +msgstr "" + +#: ../../../build/NEWS:5051 +msgid "" +"This affects consumers of tstate->id like the contextvar caching machinery, " +"which could return invalid cached objects under heavy thread load (observed " +"in embedded scenarios)." +msgstr "" + +#: ../../../build/NEWS:5055 +msgid "" +":issue:`39778`: Fixed a crash due to incorrect handling of weak references " +"in ``collections.OrderedDict`` classes. Patch by Pablo Galindo." +msgstr "" + +#: ../../../build/NEWS:5058 +msgid "" +":issue:`1635741`: Port audioop extension module to multiphase initialization" +" (:pep:`489`)." +msgstr "" + +#: ../../../build/NEWS:5061 +msgid "" +":issue:`39702`: Relax :term:`decorator` grammar restrictions to allow any " +"valid expression (:pep:`614`)." +msgstr "" + +#: ../../../build/NEWS:5064 +msgid "" +":issue:`38091`: Tweak import deadlock detection code to not deadlock itself." +msgstr "" + +#: ../../../build/NEWS:5066 +msgid "" +":issue:`1635741`: Port _locale extension module to multiphase initialization" +" (:pep:`489`)." +msgstr "" + +#: ../../../build/NEWS:5069 +msgid "" +":issue:`39087`: Optimize :c:func:`PyUnicode_AsUTF8` and " +":c:func:`PyUnicode_AsUTF8AndSize` slightly when they need to create internal" +" UTF-8 cache." +msgstr "" + +#: ../../../build/NEWS:5073 +msgid "" +":issue:`39520`: Fix unparsing of ext slices with no items (``foo[:,]``). " +"Patch by Batuhan Taskaya." +msgstr "" + +#: ../../../build/NEWS:5076 +msgid "" +":issue:`39220`: Do not optimize annotations if 'from __future__ import " +"annotations' is used. Patch by Pablo Galindo." +msgstr "" + +#: ../../../build/NEWS:5079 +msgid "" +":issue:`35712`: Using :data:`NotImplemented` in a boolean context has been " +"deprecated. Patch contributed by Josh Rosenberg." +msgstr "" + +#: ../../../build/NEWS:5082 +msgid "" +":issue:`22490`: Don't leak environment variable ``__PYVENV_LAUNCHER__`` into" +" the interpreter session on macOS." +msgstr "" + +#: ../../../build/NEWS:5088 +msgid "" +":issue:`39830`: Add :class:`zipfile.Path` to ``__all__`` in the " +":mod:`zipfile` module." +msgstr "" + +#: ../../../build/NEWS:5091 +msgid "" +":issue:`40000`: Improved error messages for validation of ``ast.Constant`` " +"nodes. Patch by Batuhan Taskaya." +msgstr "" + +#: ../../../build/NEWS:5094 +msgid "" +":issue:`39999`: ``__module__`` of the AST node classes is now set to \"ast\"" +" instead of \"_ast\". Added docstrings for dummy AST node classes and " +"deprecated attributes." +msgstr "" + +#: ../../../build/NEWS:5098 +msgid "" +":issue:`39991`: :func:`uuid.getnode` now skips IPv6 addresses with the same " +"string length than a MAC address (17 characters): only use MAC addresses." +msgstr "" + +#: ../../../build/NEWS:5101 +msgid "" +":issue:`39988`: Deprecated ``ast.AugLoad`` and ``ast.AugStore`` node classes" +" because they are no longer used." +msgstr "" + +#: ../../../build/NEWS:5104 +msgid "" +":issue:`39656`: Ensure ``bin/python3.#`` is always present in virtual " +"environments on POSIX platforms - by Anthony Sottile." +msgstr "" + +#: ../../../build/NEWS:5107 +msgid "" +":issue:`39969`: Deprecated ``ast.Param`` node class because it's no longer " +"used. Patch by Batuhan Taskaya." +msgstr "" + +#: ../../../build/NEWS:5110 +msgid "" +":issue:`39360`: Ensure all workers exit when finalizing a " +":class:`multiprocessing.Pool` implicitly via the module finalization " +"handlers of multiprocessing. This fixes a deadlock situation that can be " +"experienced when the Pool is not properly finalized via the context manager " +"or a call to ``multiprocessing.Pool.terminate``. Patch by Batuhan Taskaya " +"and Pablo Galindo." +msgstr "" + +#: ../../../build/NEWS:5117 +msgid "" +":issue:`35370`: sys.settrace(), sys.setprofile() and " +"_lsprof.Profiler.enable() now properly report :c:func:`PySys_Audit` error if" +" \"sys.setprofile\" or \"sys.settrace\" audit event is denied." +msgstr "" + +#: ../../../build/NEWS:5121 +msgid "" +":issue:`39936`: AIX: Fix _aix_support module when the subprocess is not " +"available, when building Python from scratch. It now uses new private " +"_bootsubprocess module, rather than having two implementations depending if " +"subprocess is available or not. So _aix_support.aix_platform() result is now" +" the same if subprocess is available or not." +msgstr "" + +#: ../../../build/NEWS:5127 +msgid "" +":issue:`36144`: :class:`collections.OrderedDict` now implements ``|`` and " +"``|=`` (:pep:`584`)." +msgstr "" + +#: ../../../build/NEWS:5130 +msgid "" +":issue:`39652`: The column name found in ``sqlite3.Cursor.description`` is " +"now truncated on the first '[' only if the PARSE_COLNAMES option is set." +msgstr "" + +#: ../../../build/NEWS:5133 +msgid "" +":issue:`39915`: Ensure :attr:`unittest.mock.AsyncMock.await_args_list` has " +"call objects in the order of awaited arguments instead of using " +":attr:`unittest.mock.Mock.call_args` which has the last value of the call. " +"Patch by Karthikeyan Singaravelan." +msgstr "" + +#: ../../../build/NEWS:5138 +msgid "" +":issue:`36144`: Updated :data:`os.environ` and :data:`os.environb` to " +"support :pep:`584`'s merge (``|``) and update (``|=``) operators." +msgstr "" + +#: ../../../build/NEWS:5141 +msgid "" +":issue:`38662`: The ``ensurepip`` module now invokes ``pip`` via the " +"``runpy`` module. Hence it is no longer tightly coupled with the internal " +"API of the bundled ``pip`` version, allowing easier updates to a newer " +"``pip`` version both internally and for distributors." +msgstr "" + +#: ../../../build/NEWS:5146 +msgid "" +":issue:`38075`: Fix the :meth:`random.Random.seed` method when a " +":class:`bool` is passed as the seed." +msgstr "" + +#: ../../../build/NEWS:5149 +msgid "" +":issue:`39916`: More reliable use of ``os.scandir()`` in ``Path.glob()``. It" +" no longer emits a ResourceWarning when interrupted." +msgstr "" + +#: ../../../build/NEWS:5152 +msgid "" +":issue:`39850`: :mod:`multiprocessing` now supports abstract socket " +"addresses (if abstract sockets are supported in the running platform). When " +"creating arbitrary addresses (like when default-constructing " +":class:`multiprocessing.connection.Listener` objects) abstract sockets are " +"preferred to avoid the case when the temporary-file-generated address is too" +" large for an AF_UNIX socket address. Patch by Pablo Galindo." +msgstr "" + +#: ../../../build/NEWS:5159 +msgid "" +":issue:`36287`: :func:`ast.dump()` no longer outputs optional fields and " +"attributes with default values. The default values for optional fields and " +"attributes of AST nodes are now set as class attributes (e.g. " +"``Constant.kind`` is set to ``None``)." +msgstr "" + +#: ../../../build/NEWS:5164 +msgid "" +":issue:`39889`: Fixed :func:`ast.unparse` for extended slices containing a " +"single element (e.g. ``a[i:j,]``). Remove redundant tuples when index with a" +" tuple (e.g. ``a[i, j]``)." +msgstr "" + +#: ../../../build/NEWS:5168 +msgid "" +":issue:`39828`: Fix :mod:`json.tool` to catch :exc:`BrokenPipeError`. Patch " +"by Dong-hee Na." +msgstr "" + +#: ../../../build/NEWS:5171 +msgid "" +":issue:`13487`: Avoid a possible *\"RuntimeError: dictionary changed size " +"during iteration\"* from :func:`inspect.getmodule` when it tried to loop " +"through :attr:`sys.modules`." +msgstr "" + +#: ../../../build/NEWS:5175 +msgid "" +":issue:`39674`: Revert \":issue:`37330`: open() no longer accept 'U' in file" +" mode\". The \"U\" mode of open() is kept in Python 3.9 to ease transition " +"from Python 2.7, but will be removed in Python 3.10." +msgstr "" + +#: ../../../build/NEWS:5179 +msgid "" +":issue:`28577`: The hosts method on 32-bit prefix length IPv4Networks and " +"128-bit prefix IPv6Networks now returns a list containing the single Address" +" instead of an empty list." +msgstr "" + +#: ../../../build/NEWS:5183 +msgid "" +":issue:`39826`: Add getConnection method to logging HTTPHandler to enable " +"custom connections." +msgstr "" + +#: ../../../build/NEWS:5186 +msgid "" +":issue:`39763`: Reimplement :func:`distutils.spawn.spawn` function with the " +":mod:`subprocess` module." +msgstr "" + +#: ../../../build/NEWS:5189 +msgid "" +":issue:`39794`: Add --without-decimal-contextvar build option. This enables" +" a thread-local rather than a coroutine local context." +msgstr "" + +#: ../../../build/NEWS:5192 +msgid "" +":issue:`36144`: :class:`collections.defaultdict` now implements ``|`` " +"(:pep:`584`)." +msgstr "" + +#: ../../../build/NEWS:5195 +msgid ":issue:`39517`: Fix runpy.run_path() when using pathlike objects" +msgstr "" + +#: ../../../build/NEWS:5197 +msgid "" +":issue:`39775`: Change ``inspect.Signature.parameters`` back to " +"``collections.OrderedDict``. This was changed to ``dict`` in Python 3.9.0a4." +msgstr "" + +#: ../../../build/NEWS:5201 +msgid "" +":issue:`39678`: Refactor queue_manager in " +":class:`concurrent.futures.ProcessPoolExecutor` to make it easier to " +"maintain." +msgstr "" + +#: ../../../build/NEWS:5205 +msgid "" +":issue:`39764`: Fix AttributeError when calling get_stack on a " +"PyAsyncGenObject Task" +msgstr "" + +#: ../../../build/NEWS:5208 +msgid "" +":issue:`39769`: The :func:`compileall.compile_dir` function's *ddir* " +"parameter and the compileall command line flag `-d` no longer write the " +"wrong pathname to the generated pyc file for submodules beneath the root of " +"the directory tree being compiled. This fixes a regression introduced with " +"Python 3.5." +msgstr "" + +#: ../../../build/NEWS:5214 +msgid "" +":issue:`36144`: :class:`types.MappingProxyType` objects now support the " +"merge (``|``) operator from :pep:`584`." +msgstr "" + +#: ../../../build/NEWS:5217 +msgid "" +":issue:`38691`: The :mod:`importlib` module now ignores the " +":envvar:`PYTHONCASEOK` environment variable when the :option:`-E` or " +":option:`-I` command line options are being used." +msgstr "" + +#: ../../../build/NEWS:5221 +msgid "" +":issue:`39719`: Remove :meth:`tempfile.SpooledTemporaryFile.softspace` as " +"files no longer have the ``softspace`` attribute in Python 3. Patch by " +"Shantanu." +msgstr "" + +#: ../../../build/NEWS:5224 +msgid "" +":issue:`39667`: Improve pathlib.Path compatibility on zipfile.Path and " +"correct performance degradation as found in zipp 3.0." +msgstr "" + +#: ../../../build/NEWS:5227 +msgid "" +":issue:`39638`: Keep ASDL signatures in the docstrings for ``AST`` nodes. " +"Patch by Batuhan Taskaya" +msgstr "" + +#: ../../../build/NEWS:5230 +msgid "" +":issue:`39639`: Deprecated ``ast.Suite`` node class because it's no longer " +"used. Patch by Batuhan Taskaya." +msgstr "" + +#: ../../../build/NEWS:5233 +msgid ":issue:`39609`: Add thread_name_prefix to default asyncio executor" +msgstr "" + +#: ../../../build/NEWS:5235 +msgid "" +":issue:`39548`: Fix handling of header in " +":class:`urllib.request.AbstractDigestAuthHandler` when the optional ``qop`` " +"parameter is not present." +msgstr "" + +#: ../../../build/NEWS:5239 +msgid "" +":issue:`39509`: HTTP status codes ``103 EARLY_HINTS`` and ``425 TOO_EARLY`` " +"are added to :class:`http.HTTPStatus`. Patch by Dong-hee Na." +msgstr "" + +#: ../../../build/NEWS:5242 +msgid "" +":issue:`39507`: Adding HTTP status 418 \"I'm a Teapot\" to HTTPStatus in " +"http library. Patch by Ross Rhodes." +msgstr "" + +#: ../../../build/NEWS:5245 +msgid "" +":issue:`39495`: Remove default value from *attrs* parameter of " +":meth:`xml.etree.ElementTree.TreeBuilder.start` for consistency between " +"Python and C implementations." +msgstr "" + +#: ../../../build/NEWS:5249 +msgid "" +":issue:`38971`: Open issue in the BPO indicated a desire to make the " +"implementation of codecs.open() at parity with io.open(), which implements a" +" try/except to assure file stream gets closed before an exception is raised." +msgstr "" + +#: ../../../build/NEWS:5254 +msgid "" +":issue:`38641`: Added starred expressions support to ``return`` and " +"``yield`` statements for ``lib2to3``. Patch by Vlad Emelianov." +msgstr "" + +#: ../../../build/NEWS:5257 +msgid "" +":issue:`37534`: When using minidom module to generate XML documents the " +"ability to add Standalone Document Declaration is added. All the changes are" +" made to generate a document in compliance with Extensible Markup Language " +"(XML) 1.0 (Fifth Edition) W3C Recommendation (available here: " +"https://www.w3.org/TR/xml/#sec-prolog-dtd)." +msgstr "" + +#: ../../../build/NEWS:5263 +msgid "" +":issue:`34788`: Add support for scoped IPv6 addresses to :mod:`ipaddress`. " +"Patch by Oleksandr Pavliuk." +msgstr "" + +#: ../../../build/NEWS:5266 +msgid "" +":issue:`34822`: Simplified AST for subscription. Simple indices are now " +"represented by their value, extended slices are represented as tuples. " +":mod:`ast` classes ``Index`` and ``ExtSlice`` are considered deprecated and " +"will be removed in future Python versions. In the meantime, ``Index(value)``" +" now returns a ``value`` itself, ``ExtSlice(slices)`` returns " +"``Tuple(slices, Load())``." +msgstr "" + +#: ../../../build/NEWS:5276 +msgid ":issue:`39868`: Updated the Language Reference for :pep:`572`." +msgstr "" + +#: ../../../build/NEWS:5278 +msgid ":issue:`13790`: Change 'string' to 'specification' in format doc." +msgstr "" + +#: ../../../build/NEWS:5280 +msgid "" +":issue:`17422`: The language reference no longer restricts default class " +"namespaces to dicts only." +msgstr "" + +#: ../../../build/NEWS:5283 +msgid "" +":issue:`39530`: Fix misleading documentation about mixed-type numeric " +"comparisons." +msgstr "" + +#: ../../../build/NEWS:5286 +msgid "" +":issue:`39718`: Update :mod:`token` documentation to reflect additions in " +"Python 3.8" +msgstr "" + +#: ../../../build/NEWS:5289 +msgid "" +":issue:`39677`: Changed operand name of **MAKE_FUNCTION** from *argc* to " +"*flags* for module :mod:`dis`" +msgstr "" + +#: ../../../build/NEWS:5295 +msgid "" +":issue:`40019`: test_gdb now skips tests if it detects that gdb failed to " +"read debug information because the Python binary is optimized." +msgstr "" + +#: ../../../build/NEWS:5298 +msgid "" +":issue:`27807`: ``test_site.test_startup_imports()`` is now skipped if a " +"path of :data:`sys.path` contains a ``.pth`` file." +msgstr "" + +#: ../../../build/NEWS:5301 +msgid "" +":issue:`26067`: Do not fail test_shutil test_chown test when uid or gid of " +"user cannot be resolved to a name." +msgstr "" + +#: ../../../build/NEWS:5304 +msgid "" +":issue:`39855`: test_subprocess.test_user() now skips the test on an user " +"name if the user name doesn't exist. For example, skip the test if the user " +"\"nobody\" doesn't exist on Linux." +msgstr "" + +#: ../../../build/NEWS:5311 +msgid ":issue:`39761`: Fix build with DTrace but without additional DFLAGS." +msgstr "" + +#: ../../../build/NEWS:5313 +msgid "" +":issue:`39763`: setup.py now uses a basic implementation of the " +":mod:`subprocess` module if the :mod:`subprocess` module is not available: " +"before required C extension modules are built." +msgstr "" + +#: ../../../build/NEWS:5317 +msgid "" +":issue:`1294959`: Add ``--with-platlibdir`` option to the configure script: " +"name of the platform-specific library directory, stored in the new " +":attr:`sys.platlibdir` attribute. It is used to build the path of platform-" +"specific extension modules and the path of the standard library. It is equal" +" to ``\"lib\"`` on most platforms. On Fedora and SuSE, it is equal to " +"``\"lib64\"`` on 64-bit platforms. Patch by Jan Matějek, Matěj Cepl, " +"Charalampos Stratakis and Victor Stinner." +msgstr "" + +#: ../../../build/NEWS:5328 +msgid "" +":issue:`39930`: Ensures the required :file:`vcruntime140.dll` is included in" +" install packages." +msgstr "" + +#: ../../../build/NEWS:5331 +msgid "" +":issue:`39847`: Avoid hang when computer is hibernated whilst waiting for a " +"mutex (for lock-related objects from :mod:`threading`) around 49-day uptime." +msgstr "" + +#: ../../../build/NEWS:5335 +msgid "" +":issue:`38597`: :mod:`distutils` will no longer statically link " +":file:`vcruntime140.dll` when a redistributable version is unavailable. All " +"future releases of CPython will include a copy of this DLL to ensure " +"distributed extensions can continue to load." +msgstr "" + +#: ../../../build/NEWS:5340 +msgid ":issue:`38380`: Update Windows builds to use SQLite 3.31.1" +msgstr "" + +#: ../../../build/NEWS:5342 +msgid "" +":issue:`39789`: Update Windows release build machines to Visual Studio 2019 " +"(MSVC 14.2)." +msgstr "" + +#: ../../../build/NEWS:5345 +msgid "" +":issue:`34803`: Package for nuget.org now includes repository reference and " +"bundled icon image." +msgstr "" + +#: ../../../build/NEWS:5351 +msgid ":issue:`38380`: Update macOS builds to use SQLite 3.31.1" +msgstr "" + +#: ../../../build/NEWS:5356 +msgid "" +":issue:`27115`: For 'Go to Line', use a Query box subclass with IDLE " +"standard behavior and improved error checking." +msgstr "" + +#: ../../../build/NEWS:5359 +msgid "" +":issue:`39885`: Since clicking to get an IDLE context menu moves the cursor," +" any text selection should be and now is cleared." +msgstr "" + +#: ../../../build/NEWS:5362 +msgid "" +":issue:`39852`: Edit \"Go to line\" now clears any selection, preventing " +"accidental deletion. It also updates Ln and Col on the status bar." +msgstr "" + +#: ../../../build/NEWS:5365 +msgid ":issue:`39781`: Selecting code context lines no longer causes a jump." +msgstr "" + +#: ../../../build/NEWS:5370 +msgid "" +":issue:`36184`: Port python-gdb.py to FreeBSD. python-gdb.py now checks for " +"\"take_gil\" function name to check if a frame tries to acquire the GIL, " +"instead of checking for \"pthread_cond_timedwait\" which is specific to " +"Linux and can be a different condition than the GIL." +msgstr "" + +#: ../../../build/NEWS:5375 +msgid "" +":issue:`38080`: Added support to fix ``getproxies`` in the " +":mod:`lib2to3.fixes.fix_urllib` module. Patch by José Roberto Meza Cabrera." +msgstr "" + +#: ../../../build/NEWS:5382 +msgid "" +":issue:`40024`: Add :c:func:`PyModule_AddType` helper function: add a type " +"to a module. Patch by Dong-hee Na." +msgstr "" + +#: ../../../build/NEWS:5385 +msgid "" +":issue:`39946`: Remove ``_PyRuntime.getframe`` hook and remove " +"``_PyThreadState_GetFrame`` macro which was an alias to " +"``_PyRuntime.getframe``. They were only exposed by the internal C API. " +"Remove also ``PyThreadFrameGetter`` type." +msgstr "" + +#: ../../../build/NEWS:5390 +msgid "" +":issue:`39947`: Add :c:func:`PyThreadState_GetFrame` function: get the " +"current frame of a Python thread state." +msgstr "" + +#: ../../../build/NEWS:5393 +msgid "" +":issue:`37207`: Add _PyArg_NoKwnames helper function. Patch by Dong-hee Na." +msgstr "" + +#: ../../../build/NEWS:5395 +msgid "" +":issue:`39947`: Add :c:func:`PyThreadState_GetInterpreter`: get the " +"interpreter of a Python thread state." +msgstr "" + +#: ../../../build/NEWS:5398 +msgid "" +":issue:`39947`: Add :c:func:`PyInterpreterState_Get` function to the limited" +" C API." +msgstr "" + +#: ../../../build/NEWS:5401 +msgid "" +":issue:`35370`: If :c:func:`PySys_Audit` fails in " +":c:func:`PyEval_SetProfile` or :c:func:`PyEval_SetTrace`, log the error as " +"an unraisable exception." +msgstr "" + +#: ../../../build/NEWS:5404 +msgid "" +":issue:`39947`: Move the static inline function flavor of " +"Py_EnterRecursiveCall() and Py_LeaveRecursiveCall() to the internal C API: " +"they access PyThreadState attributes. The limited C API provides regular " +"functions which hide implementation details." +msgstr "" + +#: ../../../build/NEWS:5409 +msgid "" +":issue:`39947`: Py_TRASHCAN_BEGIN_CONDITION and Py_TRASHCAN_END macro no " +"longer access PyThreadState attributes, but call new private " +"_PyTrash_begin() and _PyTrash_end() functions which hide implementation " +"details." +msgstr "" + +#: ../../../build/NEWS:5413 +msgid "" +":issue:`39884`: :c:func:`PyDescr_NewMethod` and :c:func:`PyCFunction_NewEx` " +"now include the method name in the SystemError \"bad call flags\" error " +"message to ease debug." +msgstr "" + +#: ../../../build/NEWS:5417 +msgid "" +":issue:`39877`: Deprecated :c:func:`PyEval_InitThreads` and " +":c:func:`PyEval_ThreadsInitialized`. Calling :c:func:`PyEval_InitThreads` " +"now does nothing." +msgstr "" + +#: ../../../build/NEWS:5421 +msgid "" +":issue:`38249`: :c:macro:`Py_UNREACHABLE` is now implemented with " +"``__builtin_unreachable()`` and analogs in release mode." +msgstr "" + +#: ../../../build/NEWS:5424 +msgid "" +":issue:`38643`: :c:func:`PyNumber_ToBase` now raises a :exc:`SystemError` " +"instead of crashing when called with invalid base." +msgstr "" + +#: ../../../build/NEWS:5427 +msgid "" +":issue:`39882`: The :c:func:`Py_FatalError` function is replaced with a " +"macro which logs automatically the name of the current function, unless the " +"``Py_LIMITED_API`` macro is defined." +msgstr "" + +#: ../../../build/NEWS:5431 +msgid "" +":issue:`39824`: Extension modules: :c:member:`~PyModuleDef.m_traverse`, " +":c:member:`~PyModuleDef.m_clear` and :c:member:`~PyModuleDef.m_free` " +"functions of :c:type:`PyModuleDef` are no longer called if the module state " +"was requested but is not allocated yet. This is the case immediately after " +"the module is created and before the module is executed " +"(:c:data:`Py_mod_exec` function). More precisely, these functions are not " +"called if :c:member:`~PyModuleDef.m_size` is greater than 0 and the module " +"state (as returned by :c:func:`PyModule_GetState`) is ``NULL``." +msgstr "" + +#: ../../../build/NEWS:5440 +msgid "" +"Extension modules without module state (``m_size <= 0``) are not affected." +msgstr "没有模块状态的扩展模块 (``m_size <= 0``) 不会受到影响。" + +#: ../../../build/NEWS:5442 +msgid "" +":issue:`38913`: Fixed segfault in ``Py_BuildValue()`` called with a format " +"containing \"#\" and undefined PY_SSIZE_T_CLEAN whwn an exception is set." +msgstr "" + +#: ../../../build/NEWS:5445 +msgid "" +":issue:`38500`: Add a private API to get and set the frame evaluation " +"function: add :c:func:`_PyInterpreterState_GetEvalFrameFunc` and " +":c:func:`_PyInterpreterState_SetEvalFrameFunc` C functions. The " +":c:type:`_PyFrameEvalFunction` function type now takes a *tstate* parameter." +msgstr "" + +#: ../../../build/NEWS:5453 +msgid "Python 3.9.0 alpha 4" +msgstr "" + +#: ../../../build/NEWS:5455 +msgid "*Release date: 2020-02-25*" +msgstr "*发布日期: 2020-02-25*" + +#: ../../../build/NEWS:5460 +msgid "" +":issue:`39184`: Add audit events to functions in `fcntl`, `msvcrt`, `os`, " +"`resource`, `shutil`, `signal` and `syslog`." +msgstr "" + +#: ../../../build/NEWS:5463 +msgid "" +":issue:`39401`: Avoid unsafe DLL load at startup on Windows 7 and earlier." +msgstr "" + +#: ../../../build/NEWS:5465 +msgid "" +":issue:`39184`: Add audit events to command execution functions in os and " +"pty modules." +msgstr "" + +#: ../../../build/NEWS:5471 +msgid "" +":issue:`39382`: Fix a use-after-free in the single inheritance path of " +"``issubclass()``, when the ``__bases__`` of an object has a single " +"reference, and so does its first item. Patch by Yonatan Goldschmidt." +msgstr "" + +#: ../../../build/NEWS:5475 +msgid "" +":issue:`39573`: Update clinic tool to use :c:func:`Py_IS_TYPE`. Patch by " +"Dong-hee Na." +msgstr "" + +#: ../../../build/NEWS:5478 +msgid ":issue:`39619`: Enable use of :func:`os.chroot` on HP-UX systems." +msgstr "" + +#: ../../../build/NEWS:5480 +msgid "" +":issue:`39573`: Add :c:func:`Py_IS_TYPE` static inline function to check " +"whether the object *o* type is *type*." +msgstr "" + +#: ../../../build/NEWS:5483 +msgid "" +":issue:`39606`: Fix regression caused by fix for :issue:`39386`, that " +"prevented calling ``aclose`` on an async generator that had already been " +"closed or exhausted." +msgstr "" + +#: ../../../build/NEWS:5487 +msgid "" +":issue:`39579`: Change the ending column offset of `Attribute` nodes " +"constructed in `ast_for_dotted_name` to point at the end of the current node" +" and not at the end of the last `NAME` node." +msgstr "" + +#: ../../../build/NEWS:5491 +msgid "" +":issue:`1635741`: Port _crypt extension module to multiphase initialization " +"(:pep:`489`)." +msgstr "" + +#: ../../../build/NEWS:5494 +msgid "" +":issue:`1635741`: Port _contextvars extension module to multiphase " +"initialization (:pep:`489`)." +msgstr "" + +#: ../../../build/NEWS:5497 +msgid "" +":issue:`39510`: Fix segfault in ``readinto()`` method on closed " +"BufferedReader." +msgstr "" + +#: ../../../build/NEWS:5499 +msgid "" +":issue:`39502`: Fix :func:`time.localtime` on 64-bit AIX to support years " +"before 1902 and after 2038. Patch by M Felt." +msgstr "" + +#: ../../../build/NEWS:5502 +msgid "" +":issue:`39492`: Fix a reference cycle in the C Pickler that was preventing " +"the garbage collection of deleted, pickled objects." +msgstr "" + +#: ../../../build/NEWS:5505 +msgid "" +":issue:`39453`: Fixed a possible crash in :meth:`list.__contains__` when a " +"list is changed during comparing items. Patch by Dong-hee Na." +msgstr "" + +#: ../../../build/NEWS:5508 +msgid "" +":issue:`39434`: :term:`floor division` of float operation now has a better " +"performance. Also the message of :exc:`ZeroDivisionError` for this operation" +" is updated. Patch by Dong-hee Na." +msgstr "" + +#: ../../../build/NEWS:5512 +msgid "" +":issue:`1635741`: Port _codecs extension module to multiphase initialization" +" (:pep:`489`)." +msgstr "" + +#: ../../../build/NEWS:5515 +msgid "" +":issue:`1635741`: Port _bz2 extension module to multiphase initialization " +"(:pep:`489`)." +msgstr "" + +#: ../../../build/NEWS:5518 +msgid "" +":issue:`1635741`: Port _abc extension module to multiphase initialization " +"(:pep:`489`)." +msgstr "" + +#: ../../../build/NEWS:5521 +msgid "" +":issue:`39320`: Replace two complex bytecodes for building dicts with two " +"simpler ones. The new bytecodes ``DICT_MERGE`` and ``DICT_UPDATE`` have been" +" added The old bytecodes ``BUILD_MAP_UNPACK`` and " +"``BUILD_MAP_UNPACK_WITH_CALL`` have been removed." +msgstr "" + +#: ../../../build/NEWS:5526 +msgid "" +":issue:`39219`: Syntax errors raised in the tokenizer now always set correct" +" \"text\" and \"offset\" attributes." +msgstr "" + +#: ../../../build/NEWS:5529 +msgid "" +":issue:`36051`: Drop the GIL during large ``bytes.join`` operations. Patch " +"by Bruce Merry." +msgstr "" + +#: ../../../build/NEWS:5532 +msgid "" +":issue:`38960`: Fix DTrace build issues on FreeBSD. Patch by David Carlier." +msgstr "" + +#: ../../../build/NEWS:5534 +msgid "" +":issue:`37207`: Speed up calls to ``range()`` by about 30%, by using the PEP" +" 590 ``vectorcall`` calling convention. Patch by Mark Shannon." +msgstr "" + +#: ../../../build/NEWS:5537 +msgid "" +":issue:`36144`: :class:`dict` (and :class:`collections.UserDict`) objects " +"now support PEP 584's merge (``|``) and update (``|=``) operators. Patch by " +"Brandt Bucher." +msgstr "" + +#: ../../../build/NEWS:5541 +msgid "" +":issue:`32856`: Optimized the idiom for assignment a temporary variable in " +"comprehensions. Now ``for y in [expr]`` in comprehensions is as fast as a " +"simple assignment ``y = expr``." +msgstr "" + +#: ../../../build/NEWS:5548 +msgid "" +":issue:`30566`: Fix :exc:`IndexError` when trying to decode an invalid " +"string with punycode codec." +msgstr "" + +#: ../../../build/NEWS:5551 +msgid "" +":issue:`39649`: Remove obsolete check for `__args__` in " +"bdb.Bdb.format_stack_entry." +msgstr "" + +#: ../../../build/NEWS:5554 +msgid "" +":issue:`39648`: Expanded :func:`math.gcd` and :func:`math.lcm` to handle " +"multiple arguments." +msgstr "" + +#: ../../../build/NEWS:5557 +msgid "" +":issue:`39681`: Fix a regression where the C pickle module wouldn't allow " +"unpickling from a file-like object that doesn't expose a readinto() method." +msgstr "" + +#: ../../../build/NEWS:5561 +msgid "" +":issue:`35950`: Raise :exc:`io.UnsupportedOperation` in " +":meth:`io.BufferedReader.truncate` when it is called on a read-only " +":class:`io.BufferedReader` instance." +msgstr "" + +#: ../../../build/NEWS:5565 +msgid ":issue:`39479`: Add :func:`math.lcm` function: least common multiple." +msgstr "" + +#: ../../../build/NEWS:5567 +msgid "" +":issue:`39674`: Revert \"Do not expose abstract collection classes in the " +"collections module\" change (:issue:`25988`). Aliases to ABC like " +"collections.Mapping are kept in Python 3.9 to ease transition from Python " +"2.7, but will be removed in Python 3.10." +msgstr "" + +#: ../../../build/NEWS:5572 +msgid "" +":issue:`39104`: Fix hanging ProcessPoolExcutor on ``shutdown(wait=False)`` " +"when a task has failed pickling." +msgstr "" + +#: ../../../build/NEWS:5575 +msgid ":issue:`39627`: Fixed TypedDict totality check for inherited keys." +msgstr "" + +#: ../../../build/NEWS:5577 +msgid "" +":issue:`39474`: Fixed starting position of AST for expressions like " +"``(a)(b)``, ``(a)[b]`` and ``(a).b``." +msgstr "" + +#: ../../../build/NEWS:5580 +msgid "" +":issue:`21016`: The :mod:`pydoc` and :mod:`trace` modules now use the " +":mod:`sysconfig` module to get the path to the Python standard library, to " +"support uncommon installation path like ``/usr/lib64/python3.9/`` on Fedora." +" Patch by Jan Matějek." +msgstr "" + +#: ../../../build/NEWS:5585 +msgid "" +":issue:`39590`: Collections.deque now holds strong references during " +"deque.__contains__ and deque.count, fixing crashes." +msgstr "" + +#: ../../../build/NEWS:5588 +msgid "" +":issue:`39586`: The distutils ``bdist_msi`` command is deprecated in Python " +"3.9, use ``bdist_wheel`` (wheel packages) instead." +msgstr "" + +#: ../../../build/NEWS:5591 +msgid "" +":issue:`39595`: Improved performance of zipfile.Path for files with a large " +"number of entries. Also improved performance and fixed minor issue as " +"published with `importlib_metadata 1.5 `_." +msgstr "" + +#: ../../../build/NEWS:5596 +msgid "" +":issue:`39350`: Fix regression in :class:`fractions.Fraction` if the " +"numerator and/or the denominator is an :class:`int` subclass. The " +":func:`math.gcd` function is now used to normalize the *numerator* and " +"*denominator*. :func:`math.gcd` always return a :class:`int` type. " +"Previously, the GCD type depended on *numerator* and *denominator*." +msgstr "" + +#: ../../../build/NEWS:5602 +msgid "" +":issue:`39567`: Added audit for :func:`os.walk`, :func:`os.fwalk`, " +":meth:`pathlib.Path.glob` and :meth:`pathlib.Path.rglob`." +msgstr "" + +#: ../../../build/NEWS:5605 +msgid "" +":issue:`39559`: Remove unused, undocumented argument ``getters`` from " +":func:`uuid.getnode`" +msgstr "" + +#: ../../../build/NEWS:5608 +msgid "" +":issue:`38149`: :func:`sys.audit` is now called only once per call of " +":func:`glob.glob` and :func:`glob.iglob`." +msgstr "" + +#: ../../../build/NEWS:5611 +msgid "" +":issue:`39546`: Fix a regression in :class:`~argparse.ArgumentParser` where " +"``allow_abbrev=False`` was ignored for long options that used a prefix " +"character other than \"-\"." +msgstr "" + +#: ../../../build/NEWS:5615 +msgid "" +":issue:`39450`: Striped whitespace from docstring before returning it from " +":func:`unittest.case.shortDescription`." +msgstr "" + +#: ../../../build/NEWS:5618 +msgid "" +":issue:`12915`: A new function ``resolve_name`` has been added to the " +"``pkgutil`` module. This resolves a string of the form ``'a.b.c.d'`` or " +"``'a.b:c.d'`` to an object. In the example, ``a.b`` is a package/module and " +"``c.d`` is an object within that package/module reached via recursive " +"attribute access." +msgstr "" + +#: ../../../build/NEWS:5624 +msgid "" +":issue:`39353`: The :func:`binascii.crc_hqx` function is no longer " +"deprecated." +msgstr "" + +#: ../../../build/NEWS:5626 +msgid ":issue:`39493`: Mark ``typing.IO.closed`` as a property" +msgstr "" + +#: ../../../build/NEWS:5628 +msgid "" +":issue:`39491`: Add :data:`typing.Annotated` and ``include_extras`` " +"parameter to :func:`typing.get_type_hints` as part of :pep:`593`. Patch by " +"Till Varoquaux, documentation by Till Varoquaux and Konstantin Kashin." +msgstr "" + +#: ../../../build/NEWS:5632 +msgid "" +":issue:`39485`: Fix a bug in :func:`unittest.mock.create_autospec` that " +"would complain about the wrong number of arguments for custom descriptors " +"defined in an extension module returning functions." +msgstr "" + +#: ../../../build/NEWS:5636 +msgid "" +":issue:`38932`: Mock fully resets child objects on reset_mock(). Patch by " +"Vegard Stikbakke" +msgstr "" + +#: ../../../build/NEWS:5639 +msgid "" +":issue:`39082`: Allow AsyncMock to correctly patch static/class methods" +msgstr "" + +#: ../../../build/NEWS:5641 +msgid "" +":issue:`39432`: Implement PEP-489 algorithm for non-ascii \"PyInit\\_...\" " +"symbol names in distutils to make it export the correct init symbol also on " +"Windows." +msgstr "" + +#: ../../../build/NEWS:5645 +msgid "" +":issue:`18819`: Omit ``devmajor`` and ``devminor`` fields for non-device " +"files in :mod:`tarfile` archives, enabling bit-for-bit compatibility with " +"GNU ``tar(1)``." +msgstr "" + +#: ../../../build/NEWS:5649 +msgid "" +":issue:`39349`: Added a new *cancel_futures* parameter to " +":meth:`concurrent.futures.Executor.shutdown` that cancels all pending " +"futures which have not started running, instead of waiting for them to " +"complete before shutting down the executor." +msgstr "" + +#: ../../../build/NEWS:5654 +msgid "" +":issue:`39274`: ``bool(fraction.Fraction)`` now returns a boolean even if " +"(numerator != 0) does not return a boolean (ex: numpy number)." +msgstr "" + +#: ../../../build/NEWS:5657 +msgid "" +":issue:`34793`: Remove support for ``with (await asyncio.lock):`` and ``with" +" (yield from asyncio.lock):``. The same is correct for " +"``asyncio.Condition`` and ``asyncio.Semaphore``." +msgstr "" + +#: ../../../build/NEWS:5661 +msgid "" +":issue:`25597`: Ensure, if ``wraps`` is supplied to " +":class:`unittest.mock.MagicMock`, it is used to calculate return values for " +"the magic methods instead of using the default return values. Patch by " +"Karthikeyan Singaravelan." +msgstr "" + +#: ../../../build/NEWS:5666 +msgid "" +":issue:`36350`: `inspect.Signature.parameters` and " +"`inspect.BoundArguments.arguments` are now dicts instead of OrderedDicts. " +"Patch contributed by Rémi Lapeyre." +msgstr "" + +#: ../../../build/NEWS:5670 +msgid "" +":issue:`35727`: Fix sys.exit() and sys.exit(None) exit code propagation when" +" used in multiprocessing.Process." +msgstr "" + +#: ../../../build/NEWS:5673 +msgid "" +":issue:`32173`: * Add `lazycache` function to `__all__`. * Use `dict.clear` " +"to clear the cache. * Refactoring `getline` function and `checkcache` " +"function." +msgstr "" + +#: ../../../build/NEWS:5680 +msgid "" +":issue:`17422`: The language reference now specifies restrictions on class " +"namespaces. Adapted from a patch by Ethan Furman." +msgstr "" + +#: ../../../build/NEWS:5683 +msgid "" +":issue:`39572`: Updated documentation of ``total`` flag of ``TypedDict``." +msgstr "" + +#: ../../../build/NEWS:5685 +msgid "" +":issue:`39654`: In pyclbr doc, update 'class' to 'module' where appropriate " +"and add readmodule comment. Patch by Hakan Çelik." +msgstr "" + +#: ../../../build/NEWS:5688 +msgid "" +":issue:`39153`: Clarify refcounting semantics for the following functions: -" +" PyObject_SetItem - PyMapping_SetItemString - PyDict_SetItem - " +"PyDict_SetItemString" +msgstr "" + +#: ../../../build/NEWS:5692 +msgid "" +":issue:`39392`: Explain that when filling with turtle, overlap regions may " +"be left unfilled." +msgstr "" + +#: ../../../build/NEWS:5695 +msgid "" +":issue:`39369`: Update mmap readline method description. The fact that the " +"readline method does update the file position should not be ignored since " +"this might give the impression for the programmer that it doesn't update it." +msgstr "" + +#: ../../../build/NEWS:5700 +msgid ":issue:`9056`: Include subsection in TOC for PDF version of docs." +msgstr "" + +#: ../../../build/NEWS:5705 +msgid ":issue:`38325`: Skip tests on non-BMP characters of test_winconsoleio." +msgstr "" + +#: ../../../build/NEWS:5707 +msgid "" +":issue:`39502`: Skip test_zipfile.test_add_file_after_2107() if " +":func:`time.localtime` fails with :exc:`OverflowError`. It is the case on " +"AIX 6.1 for example." +msgstr "" + +#: ../../../build/NEWS:5714 +msgid ":issue:`39489`: Remove ``COUNT_ALLOCS`` special build." +msgstr "" + +#: ../../../build/NEWS:5719 +msgid ":issue:`39553`: Delete unused code related to SxS manifests." +msgstr "" + +#: ../../../build/NEWS:5721 +msgid "" +":issue:`39439`: Honor the Python path when a virtualenv is active on " +"Windows." +msgstr "" + +#: ../../../build/NEWS:5723 +msgid "" +":issue:`39393`: Improve the error message when attempting to load a DLL with" +" unresolved dependencies." +msgstr "" + +#: ../../../build/NEWS:5726 +msgid "" +":issue:`38883`: :meth:`~pathlib.Path.home()` and " +":meth:`~pathlib.Path.expanduser()` on Windows now prefer " +":envvar:`USERPROFILE` and no longer use :envvar:`HOME`, which is not " +"normally set for regular user accounts. This makes them again behave like " +":func:`os.path.expanduser`, which was changed to ignore :envvar:`HOME` in " +"3.8, see :issue:`36264`." +msgstr "" + +#: ../../../build/NEWS:5733 +msgid "" +":issue:`39185`: The build.bat script has additional options for very-quiet " +"output (-q) and very-verbose output (-vv)" +msgstr "" + +#: ../../../build/NEWS:5739 +msgid ":issue:`39663`: Add tests for pyparse find_good_parse_start()." +msgstr "" + +#: ../../../build/NEWS:5741 +msgid "" +":issue:`39600`: In the font configuration window, remove duplicated font " +"names." +msgstr "" + +#: ../../../build/NEWS:5743 +msgid "" +":issue:`30780`: Add remaining configdialog tests for buttons and highlights " +"and keys tabs." +msgstr "" + +#: ../../../build/NEWS:5746 +msgid "" +":issue:`39388`: IDLE Settings Cancel button now cancels pending changes" +msgstr "" + +#: ../../../build/NEWS:5748 +msgid "" +":issue:`38792`: Close an IDLE shell calltip if a :exc:`KeyboardInterrupt` or" +" shell restart occurs. Patch by Zackery Spytz." +msgstr "" + +#: ../../../build/NEWS:5754 +msgid "" +":issue:`35081`: Move the ``bytes_methods.h`` header file to the internal C " +"API as ``pycore_bytes_methods.h``: it only contains private symbols " +"(prefixed by ``_Py``), except of the ``PyDoc_STRVAR_shared()`` macro." +msgstr "" + +#: ../../../build/NEWS:5758 +msgid "" +":issue:`35081`: Move the ``dtoa.h`` header file to the internal C API as " +"``pycore_dtoa.h``: it only contains private functions (prefixed by ``_Py``)." +" The :mod:`math` and :mod:`cmath` modules must now be compiled with the " +"``Py_BUILD_CORE`` macro defined." +msgstr "" + +#: ../../../build/NEWS:5763 +msgid "" +":issue:`39573`: Add :c:func:`Py_SET_SIZE` function to set the size of an " +"object." +msgstr "" + +#: ../../../build/NEWS:5766 +msgid "" +":issue:`39500`: :c:func:`PyUnicode_IsIdentifier` does not call " +":c:func:`Py_FatalError` anymore if the string is not ready." +msgstr "" + +#: ../../../build/NEWS:5769 +msgid "" +":issue:`39573`: Add :c:func:`Py_SET_TYPE` function to set the type of an " +"object." +msgstr "" + +#: ../../../build/NEWS:5772 +msgid "" +":issue:`39573`: Add a :c:func:`Py_SET_REFCNT` function to set the reference " +"counter of an object." +msgstr "" + +#: ../../../build/NEWS:5775 +msgid "" +":issue:`39542`: Convert :c:func:`PyType_HasFeature`, :c:func:`PyType_Check` " +"and :c:func:`PyType_CheckExact` macros to static inline functions." +msgstr "" + +#: ../../../build/NEWS:5778 +msgid "" +":issue:`39542`: In the limited C API, ``PyObject_INIT()`` and " +"``PyObject_INIT_VAR()`` are now defined as aliases to " +":c:func:`PyObject_Init` and :c:func:`PyObject_InitVar` to make their " +"implementation opaque. It avoids to leak implementation details in the " +"limited C API. Exclude the following functions from the limited C API: " +"``_Py_NewReference()``, ``_Py_ForgetReference()``, " +"``_PyTraceMalloc_NewReference()`` and ``_Py_GetRefTotal()``." +msgstr "" + +#: ../../../build/NEWS:5786 +msgid "" +":issue:`39542`: Exclude trashcan mechanism from the limited C API: it " +"requires access to PyTypeObject and PyThreadState structure fields, whereas " +"these structures are opaque in the limited C API." +msgstr "" + +#: ../../../build/NEWS:5790 +msgid "" +":issue:`39511`: The :c:func:`PyThreadState_Clear` function now calls the " +":c:member:`PyThreadState.on_delete` callback. Previously, that happened in " +":c:func:`PyThreadState_Delete`." +msgstr "" + +#: ../../../build/NEWS:5794 +msgid "" +":issue:`38076`: Fix to clear the interpreter state only after clearing " +"module globals to guarantee module state access from C Extensions during " +"runtime destruction" +msgstr "" + +#: ../../../build/NEWS:5798 +msgid "" +":issue:`39245`: The Vectorcall API (PEP 590) was made public, adding the " +"functions ``PyObject_Vectorcall``, ``PyObject_VectorcallMethod``, " +"``PyVectorcall_Function``, ``PyObject_CallOneArg``, " +"``PyObject_CallMethodNoArgs``, ``PyObject_CallMethodOneArg``, " +"``PyObject_FastCallDict``, and the flag ``Py_TPFLAGS_HAVE_VECTORCALL``." +msgstr "" + +#: ../../../build/NEWS:5806 +msgid "Python 3.9.0 alpha 3" +msgstr "" + +#: ../../../build/NEWS:5808 +msgid "*Release date: 2020-01-24*" +msgstr "*发布日期: 2020-01-24*" + +#: ../../../build/NEWS:5813 +msgid "" +":issue:`39427`: Document all possibilities for the ``-X`` options in the " +"command line help section. Patch by Pablo Galindo." +msgstr "" + +#: ../../../build/NEWS:5816 +msgid "" +":issue:`39421`: Fix possible crashes when operating with the functions in " +"the :mod:`heapq` module and custom comparison operators." +msgstr "" + +#: ../../../build/NEWS:5819 +msgid ":issue:`39386`: Prevent double awaiting of async iterator." +msgstr "" + +#: ../../../build/NEWS:5821 +msgid "" +":issue:`17005`: Add :class:`functools.TopologicalSorter` to the " +":mod:`functools` module to offers functionality to perform topological " +"sorting of graphs. Patch by Pablo Galindo, Tim Peters and Larry Hastings." +msgstr "" + +#: ../../../build/NEWS:5825 +msgid "" +":issue:`39320`: Replace four complex bytecodes for building sequences with " +"three simpler ones." +msgstr "" + +#: ../../../build/NEWS:5828 +msgid "The following four bytecodes have been removed:" +msgstr "" + +#: ../../../build/NEWS:5830 +msgid "BUILD_LIST_UNPACK" +msgstr "" + +#: ../../../build/NEWS:5831 +msgid "BUILD_TUPLE_UNPACK" +msgstr "" + +#: ../../../build/NEWS:5832 +msgid "BUILD_SET_UNPACK" +msgstr "" + +#: ../../../build/NEWS:5833 +msgid "BUILD_TUPLE_UNPACK_WITH_CALL" +msgstr "" + +#: ../../../build/NEWS:5835 +msgid "The following three bytecodes have been added:" +msgstr "" + +#: ../../../build/NEWS:5837 +msgid "LIST_TO_TUPLE" +msgstr "" + +#: ../../../build/NEWS:5838 +msgid "LIST_EXTEND" +msgstr "" + +#: ../../../build/NEWS:5839 +msgid "SET_UPDATE" +msgstr "" + +#: ../../../build/NEWS:5841 +msgid "" +":issue:`39336`: Import loaders which publish immutable module objects can " +"now publish immutable packages in addition to individual modules." +msgstr "" + +#: ../../../build/NEWS:5844 +msgid "" +":issue:`39322`: Added a new function :func:`gc.is_finalized` to check if an " +"object has been finalized by the garbage collector. Patch by Pablo Galindo." +msgstr "" + +#: ../../../build/NEWS:5848 +msgid "" +":issue:`39048`: Improve the displayed error message when incorrect types are" +" passed to ``async with`` statements by looking up the :meth:`__aenter__` " +"special method before the :meth:`__aexit__` special method when entering an " +"asynchronous context manager. Patch by Géry Ogam." +msgstr "" + +#: ../../../build/NEWS:5853 +msgid "" +":issue:`39235`: Fix AST end location for lone generator expression in " +"function call, e.g. f(i for i in a)." +msgstr "" + +#: ../../../build/NEWS:5856 +msgid "" +":issue:`39209`: Correctly handle multi-line tokens in interactive mode. " +"Patch by Pablo Galindo." +msgstr "" + +#: ../../../build/NEWS:5859 +msgid "" +":issue:`1635741`: Port _json extension module to multiphase initialization " +"(:pep:`489`)." +msgstr "" + +#: ../../../build/NEWS:5862 +msgid "" +":issue:`39216`: Fix constant folding optimization for positional only " +"arguments - by Anthony Sottile." +msgstr "" + +#: ../../../build/NEWS:5865 +msgid "" +":issue:`39215`: Fix ``SystemError`` when nested function has annotation on " +"positional-only argument - by Anthony Sottile." +msgstr "" + +#: ../../../build/NEWS:5868 +msgid "" +":issue:`39200`: Correct the error message when calling the :func:`min` or " +":func:`max` with no arguments. Patch by Dong-hee Na." +msgstr "" + +#: ../../../build/NEWS:5871 +msgid "" +":issue:`39200`: Correct the error message when trying to construct " +":class:`range` objects with no arguments. Patch by Pablo Galindo." +msgstr "" + +#: ../../../build/NEWS:5874 +msgid "" +":issue:`39166`: Fix incorrect line execution reporting in trace functions " +"when tracing the last iteration of asynchronous for loops. Patch by Pablo " +"Galindo." +msgstr "" + +#: ../../../build/NEWS:5878 +msgid "" +":issue:`39114`: Fix incorrect line execution reporting in trace functions " +"when tracing exception handlers with name binding. Patch by Pablo Galindo." +msgstr "" + +#: ../../../build/NEWS:5881 +msgid "" +":issue:`39156`: Split the COMPARE_OP bytecode instruction into four distinct" +" instructions." +msgstr "" + +#: ../../../build/NEWS:5884 +msgid "COMPARE_OP for rich comparisons" +msgstr "" + +#: ../../../build/NEWS:5885 +msgid "IS_OP for 'is' and 'is not' tests" +msgstr "" + +#: ../../../build/NEWS:5886 +msgid "CONTAINS_OP for 'in' and 'is not' tests" +msgstr "" + +#: ../../../build/NEWS:5887 +msgid "" +"JUMP_IF_NOT_EXC_MATCH for checking exceptions in 'try-except' statements." +msgstr "" + +#: ../../../build/NEWS:5889 +msgid "" +"This improves the clarity of the interpreter and should provide a modest " +"speedup." +msgstr "" + +#: ../../../build/NEWS:5892 +msgid "" +":issue:`38588`: Fix possible crashes in dict and list when calling " +":c:func:`PyObject_RichCompareBool`." +msgstr "" + +#: ../../../build/NEWS:5895 +msgid "" +":issue:`13601`: By default, ``sys.stderr`` is line-buffered now, even if " +"``stderr`` is redirected to a file. You can still make ``sys.stderr`` " +"unbuffered by passing the :option:`-u` command-line option or setting the " +":envvar:`PYTHONUNBUFFERED` environment variable." +msgstr "" + +#: ../../../build/NEWS:5900 +msgid "(Contributed by Jendrik Seipp in :issue:`13601`.)" +msgstr "" + +#: ../../../build/NEWS:5902 +msgid "" +":issue:`38610`: Fix possible crashes in several list methods by holding " +"strong references to list elements when calling " +":c:func:`PyObject_RichCompareBool`." +msgstr "" + +#: ../../../build/NEWS:5906 +msgid ":issue:`32021`: Include brotli .br encoding in mimetypes encodings_map" +msgstr "" + +#: ../../../build/NEWS:5911 +msgid "" +":issue:`39430`: Fixed race condition in lazy imports in :mod:`tarfile`." +msgstr "" + +#: ../../../build/NEWS:5913 +msgid "" +":issue:`39413`: The :func:`os.unsetenv` function is now also available on " +"Windows." +msgstr "" + +#: ../../../build/NEWS:5916 +msgid "" +":issue:`39390`: Fixed a regression with the `ignore` callback of " +":func:`shutil.copytree`. The argument types are now str and List[str] again." +msgstr "" + +#: ../../../build/NEWS:5920 +msgid "" +":issue:`39395`: The :func:`os.putenv` and :func:`os.unsetenv` functions are " +"now always available." +msgstr "" + +#: ../../../build/NEWS:5923 +msgid "" +":issue:`39406`: If ``setenv()`` C function is available, :func:`os.putenv` " +"is now implemented with ``setenv()`` instead of ``putenv()``, so Python " +"doesn't have to handle the environment variable memory." +msgstr "" + +#: ../../../build/NEWS:5927 +msgid ":issue:`39396`: Fix ``math.nextafter(-0.0, +0.0)`` on AIX 7.1." +msgstr "" + +#: ../../../build/NEWS:5929 +msgid "" +":issue:`29435`: Allow :func:`tarfile.is_tarfile` to be used with file and " +"file-like objects, like :func:`zipfile.is_zipfile`. Patch by William " +"Woodruff." +msgstr "" + +#: ../../../build/NEWS:5933 +msgid "" +":issue:`39377`: Removed ``encoding`` option from :func:`json.loads`. It has" +" been deprecated since Python 3.1." +msgstr "" + +#: ../../../build/NEWS:5936 +msgid "" +":issue:`39389`: Write accurate compression level metadata in :mod:`gzip` " +"archives, rather than always signaling maximum compression." +msgstr "" + +#: ../../../build/NEWS:5939 +msgid "" +":issue:`39366`: The previously deprecated ``xpath()`` and ``xgtitle()`` " +"methods of :class:`nntplib.NNTP` have been removed." +msgstr "" + +#: ../../../build/NEWS:5942 +msgid "" +":issue:`39357`: Remove the *buffering* parameter of :class:`bz2.BZ2File`. " +"Since Python 3.0, it was ignored and using it was emitting " +":exc:`DeprecationWarning`. Pass an open file object, to control how the file" +" is opened. The *compresslevel* parameter becomes keyword-only." +msgstr "" + +#: ../../../build/NEWS:5947 +msgid "" +":issue:`39353`: Deprecate binhex4 and hexbin4 standards. Deprecate the " +":mod:`binhex` module and the following :mod:`binascii` functions: " +":func:`~binascii.b2a_hqx`, :func:`~binascii.a2b_hqx`, " +":func:`~binascii.rlecode_hqx`, :func:`~binascii.rledecode_hqx`, " +":func:`~binascii.crc_hqx`." +msgstr "" + +#: ../../../build/NEWS:5953 +msgid "" +":issue:`39351`: Remove ``base64.encodestring()`` and " +"``base64.decodestring()``, aliases deprecated since Python 3.1: use " +":func:`base64.encodebytes` and :func:`base64.decodebytes` instead." +msgstr "" + +#: ../../../build/NEWS:5957 +msgid "" +":issue:`39350`: Remove ``fractions.gcd()`` function, deprecated since Python" +" 3.5 (:issue:`22486`): use :func:`math.gcd` instead." +msgstr "" + +#: ../../../build/NEWS:5960 +msgid "" +":issue:`39329`: :class:`~smtplib.LMTP` constructor now has an optional " +"*timeout* parameter. Patch by Dong-hee Na." +msgstr "" + +#: ../../../build/NEWS:5963 +msgid "" +":issue:`39313`: Add a new ``exec_function`` option (*--exec-function* in the" +" CLI) to ``RefactoringTool`` for making ``exec`` a function. Patch by " +"Batuhan Taskaya." +msgstr "" + +#: ../../../build/NEWS:5967 +msgid "" +":issue:`39259`: :class:`~ftplib.FTP_TLS` and :class:`~ftplib.FTP_TLS` now " +"raise a :class:`ValueError` if the given timeout for their constructor is " +"zero to prevent the creation of a non-blocking socket. Patch by Dong-hee Na." +msgstr "" + +#: ../../../build/NEWS:5971 +msgid "" +":issue:`39259`: :class:`~smtplib.SMTP` and :class:`~smtplib.SMTP_SSL` now " +"raise a :class:`ValueError` if the given timeout for their constructor is " +"zero to prevent the creation of a non-blocking socket. Patch by Dong-hee Na." +msgstr "" + +#: ../../../build/NEWS:5975 +msgid "" +":issue:`39310`: Add :func:`math.ulp`: return the value of the least " +"significant bit of a float." +msgstr "" + +#: ../../../build/NEWS:5978 +msgid "" +":issue:`39297`: Improved performance of importlib.metadata distribution " +"discovery and resilients to inaccessible sys.path entries " +"(importlib_metadata v1.4.0)." +msgstr "" + +#: ../../../build/NEWS:5982 +msgid "" +":issue:`39259`: :class:`~nntplib.NNTP` and :class:`~nntplib.NNTP_SSL` now " +"raise a :class:`ValueError` if the given timeout for their constructor is " +"zero to prevent the creation of a non-blocking socket. Patch by Dong-hee Na." +msgstr "" + +#: ../../../build/NEWS:5986 +msgid "" +":issue:`38901`: When you specify prompt='.' or equivalently python -m venv " +"--prompt . ... the basename of the current directory is used to set the " +"created venv's prompt when it's activated." +msgstr "" + +#: ../../../build/NEWS:5990 +msgid "" +":issue:`39288`: Add :func:`math.nextafter`: return the next floating-point " +"value after *x* towards *y*." +msgstr "" + +#: ../../../build/NEWS:5993 +msgid "" +":issue:`39259`: :class:`~poplib.POP3` and :class:`~poplib.POP3_SSL` now " +"raise a :class:`ValueError` if the given timeout for their constructor is " +"zero to prevent the creation of a non-blocking socket. Patch by Dong-hee Na." +msgstr "" + +#: ../../../build/NEWS:5997 +msgid "" +":issue:`39242`: Updated the Gmane domain from news.gmane.org to " +"news.gmane.io which is used for examples of :class:`~nntplib.NNTP` news " +"reader server and nntplib tests." +msgstr "" + +#: ../../../build/NEWS:6001 +msgid "" +":issue:`35292`: Proxy the `SimpleHTTPRequestHandler.guess_type` to " +"`mimetypes.guess_type` so the `mimetypes.init` is called lazily to avoid " +"unnecessary costs when :mod:`http.server` module is imported." +msgstr "" + +#: ../../../build/NEWS:6005 +msgid "" +":issue:`39239`: The :meth:`select.epoll.unregister` method no longer ignores" +" the :data:`~errno.EBADF` error." +msgstr "" + +#: ../../../build/NEWS:6008 +msgid "" +":issue:`38907`: In http.server script, restore binding to IPv4 on Windows." +msgstr "" + +#: ../../../build/NEWS:6010 +msgid "" +":issue:`39152`: Fix ttk.Scale.configure([name]) to return configuration " +"tuple for name or all options. Giovanni Lombardo contributed part of the " +"patch." +msgstr "" + +#: ../../../build/NEWS:6013 +msgid "" +":issue:`39198`: If an exception were to be thrown in `Logger.isEnabledFor` " +"(say, by asyncio timeouts or stopit) , the `logging` global lock may not be " +"released appropriately, resulting in deadlock. This change wraps that block" +" of code with `try...finally` to ensure the lock is released." +msgstr "" + +#: ../../../build/NEWS:6018 +msgid "" +":issue:`39191`: Perform a check for running loop before starting a new task " +"in ``loop.run_until_complete()`` to fail fast; it prevents the side effect " +"of new task spawning before exception raising." +msgstr "" + +#: ../../../build/NEWS:6022 +msgid "" +":issue:`38871`: Correctly parenthesize filter-based statements that contain " +"lambda expressions in mod:`lib2to3`. Patch by Dong-hee Na." +msgstr "" + +#: ../../../build/NEWS:6025 +msgid "" +":issue:`39142`: A change was made to logging.config.dictConfig to avoid " +"converting instances of named tuples to ConvertingTuple. It's assumed that " +"named tuples are too specialised to be treated like ordinary tuples; if a " +"user of named tuples requires ConvertingTuple functionality, they will have " +"to implement that themselves in their named tuple class." +msgstr "" + +#: ../../../build/NEWS:6031 +msgid ":issue:`39158`: ast.literal_eval() now supports empty sets." +msgstr "" + +#: ../../../build/NEWS:6033 +msgid ":issue:`39129`: Fix import path for ``asyncio.TimeoutError``" +msgstr "" + +#: ../../../build/NEWS:6035 +msgid "" +":issue:`39057`: :func:`urllib.request.proxy_bypass_environment` now ignores " +"leading dots and no longer ignores a trailing newline." +msgstr "" + +#: ../../../build/NEWS:6038 +msgid "" +":issue:`39056`: Fixed handling invalid warning category in the -W option. " +"No longer import the re module if it is not needed." +msgstr "" + +#: ../../../build/NEWS:6041 +msgid "" +":issue:`39055`: :func:`base64.b64decode` with ``validate=True`` raises now a" +" binascii.Error if the input ends with a single ``\\n``." +msgstr "" + +#: ../../../build/NEWS:6044 +msgid "" +":issue:`21600`: Fix :func:`mock.patch.stopall` to stop active patches that " +"were created with :func:`mock.patch.dict`." +msgstr "" + +#: ../../../build/NEWS:6047 +msgid "" +":issue:`39019`: Implement dummy ``__class_getitem__`` for " +":class:`tempfile.SpooledTemporaryFile`." +msgstr "" + +#: ../../../build/NEWS:6050 +msgid "" +":issue:`39019`: Implement dummy ``__class_getitem__`` for " +"``subprocess.Popen``, ``subprocess.CompletedProcess``" +msgstr "" + +#: ../../../build/NEWS:6053 +msgid "" +":issue:`38914`: Adjusted the wording of the warning issued by distutils' " +"``check`` command when the ``author`` and ``maintainer`` fields are supplied" +" but no corresponding e-mail field (``author_email`` or " +"``maintainer_email``) is found. The wording now reflects the fact that these" +" fields are suggested, but not required. Patch by Juergen Gmach." +msgstr "" + +#: ../../../build/NEWS:6059 +msgid "" +":issue:`38878`: Fixed __subclasshook__ of :class:`os.PathLike` to return a " +"correct result upon inheritance. Patch by Bar Harel." +msgstr "" + +#: ../../../build/NEWS:6062 +msgid "" +":issue:`38615`: :class:`~imaplib.IMAP4` and :class:`~imaplib.IMAP4_SSL` now " +"have an optional *timeout* parameter for their constructors. Also, the " +":meth:`~imaplib.IMAP4.open` method now has an optional *timeout* parameter " +"with this change. The overridden methods of :class:`~imaplib.IMAP4_SSL` and " +":class:`~imaplib.IMAP4_stream` were applied to this change. Patch by Dong-" +"hee Na." +msgstr "" + +#: ../../../build/NEWS:6069 +msgid "" +":issue:`35182`: Fixed :func:`Popen.communicate` subsequent call crash when " +"the child process has already closed any piped standard stream, but still " +"continues to be running. Patch by Andriy Maletsky." +msgstr "" + +#: ../../../build/NEWS:6073 +msgid "" +":issue:`38630`: On Unix, :meth:`subprocess.Popen.send_signal` now polls the " +"process status. Polling reduces the risk of sending a signal to the wrong " +"process if the process completed, the :attr:`subprocess.Popen.returncode` " +"attribute is still ``None``, and the pid has been reassigned (recycled) to a" +" new different process." +msgstr "" + +#: ../../../build/NEWS:6079 +msgid "" +":issue:`38536`: Removes trailing space in formatted currency with " +"`international=True` and a locale with symbol following value. E.g. " +"`locale.currency(12.34, international=True)` returned `'12,34 EUR '` instead" +" of `'12,34 EUR'`." +msgstr "" + +#: ../../../build/NEWS:6084 +msgid "" +":issue:`38473`: Use signature from inner mock for autospecced methods " +"attached with :func:`unittest.mock.attach_mock`. Patch by Karthikeyan " +"Singaravelan." +msgstr "" + +#: ../../../build/NEWS:6087 +msgid "" +":issue:`38361`: Fixed an issue where ``ident`` could include a leading path " +"separator when :func:`syslog.openlog` was called without arguments." +msgstr "" + +#: ../../../build/NEWS:6090 +msgid "" +":issue:`38293`: Add :func:`copy.copy` and :func:`copy.deepcopy` support to " +":func:`property` objects." +msgstr "" + +#: ../../../build/NEWS:6093 +msgid "" +":issue:`37958`: Added the pstats.Stats.get_profile_dict() method to return " +"the profile data as a StatsProfile instance." +msgstr "" + +#: ../../../build/NEWS:6096 +msgid "" +":issue:`28367`: Termios magic constants for the following baud rates: - " +"B500000 - B576000 - B921600 - B1000000 - B1152000 - B1500000 - " +"B2000000 - B2500000 - B3000000 - B3500000 - B4000000 Patch by Andrey" +" Smirnov" +msgstr "" + +#: ../../../build/NEWS:6104 +msgid "" +":issue:`39381`: Mention in docs that :func:`asyncio.get_event_loop` " +"implicitly creates new event loop only if called from the main thread." +msgstr "" + +#: ../../../build/NEWS:6107 +msgid "" +":issue:`38918`: Add an entry for ``__module__`` in the \"function\" & " +"\"method\" sections of the `inspect docs types and members table " +"`_" +msgstr "" + +#: ../../../build/NEWS:6111 +msgid "" +":issue:`3530`: In the :mod:`ast` module documentation, fix a misleading " +"``NodeTransformer`` example and add advice on when to use the " +"``fix_missing_locations`` function." +msgstr "" + +#: ../../../build/NEWS:6118 +msgid "" +":issue:`39395`: On non-Windows platforms, the :c:func:`setenv` and " +":c:func:`unsetenv` functions are now required to build Python." +msgstr "" + +#: ../../../build/NEWS:6121 +msgid "" +":issue:`39160`: Updated the documentation in `./configure --help` to show " +"default values, reference documentation where required and add additional " +"explanation where needed." +msgstr "" + +#: ../../../build/NEWS:6125 +msgid "" +":issue:`39144`: The ctags and etags build targets both include " +"Modules/_ctypes and Python standard library source files." +msgstr "" + +#: ../../../build/NEWS:6131 +msgid ":issue:`39050`: Make IDLE Settings dialog Help button work again." +msgstr "" + +#: ../../../build/NEWS:6133 +msgid "" +":issue:`34118`: Tag memoryview, range, and tuple as classes, the same as " +"list, etcetera, in the library manual built-in functions list." +msgstr "" + +#: ../../../build/NEWS:6136 +msgid "" +":issue:`32989`: Add tests for editor newline_and_indent_event method. Remove" +" dead code from pyparse find_good_parse_start method." +msgstr "" + +#: ../../../build/NEWS:6142 +msgid "" +":issue:`39372`: Clean header files of interfaces defined but with no " +"implementation. The public API symbols being removed are: " +"``_PyBytes_InsertThousandsGroupingLocale``, " +"``_PyBytes_InsertThousandsGrouping``, ``_Py_InitializeFromArgs``, " +"``_Py_InitializeFromWideArgs``, ``_PyFloat_Repr``, ``_PyFloat_Digits``, " +"``_PyFloat_DigitsInit``, ``PyFrame_ExtendStack``, ``_PyAIterWrapper_Type``, " +"``PyNullImporter_Type``, ``PyCmpWrapper_Type``, ``PySortWrapper_Type``, " +"``PyNoArgsFunction``." +msgstr "" + +#: ../../../build/NEWS:6151 +msgid "" +":issue:`39164`: Add a private ``_PyErr_GetExcInfo()`` function to retrieve " +"exception information of the specified Python thread state." +msgstr "" + +#: ../../../build/NEWS:6156 +msgid "Python 3.9.0 alpha 2" +msgstr "" + +#: ../../../build/NEWS:6158 +msgid "*Release date: 2019-12-18*" +msgstr "*发布日期: 2019-12-18*" + +#: ../../../build/NEWS:6163 +msgid "" +":issue:`38945`: Newline characters have been escaped when performing uu " +"encoding to prevent them from overflowing into to content section of the " +"encoded file. This prevents malicious or accidental modification of data " +"during the decoding process." +msgstr "" + +#: ../../../build/NEWS:6168 +msgid "" +":issue:`37228`: Due to significant security concerns, the *reuse_address* " +"parameter of :meth:`asyncio.loop.create_datagram_endpoint` is no longer " +"supported. This is because of the behavior of ``SO_REUSEADDR`` in UDP. For " +"more details, see the documentation for ``loop.create_datagram_endpoint()``." +" (Contributed by Kyle Stanley, Antoine Pitrou, and Yury Selivanov in " +":issue:`37228`.)" +msgstr "" + +#: ../../../build/NEWS:6175 +msgid "" +":issue:`38804`: Fixes a ReDoS vulnerability in :mod:`http.cookiejar`. Patch " +"by Ben Caller." +msgstr "" + +#: ../../../build/NEWS:6181 +msgid "" +":issue:`39028`: Slightly improve the speed of keyword argument parsing with " +"many kwargs by strengthening the assumption that kwargs are interned " +"strings." +msgstr "" + +#: ../../../build/NEWS:6185 +msgid "" +":issue:`39080`: Fix the value of *end_col_offset* for Starred Expression AST" +" nodes when they are among the elements in the *args* attribute of Call AST " +"nodes." +msgstr "" + +#: ../../../build/NEWS:6189 +msgid "" +":issue:`39031`: When parsing an \"elif\" node, lineno and col_offset of the " +"node now point to the \"elif\" keyword and not to its condition, making it " +"consistent with the \"if\" node. Patch by Lysandros Nikolaou." +msgstr "" + +#: ../../../build/NEWS:6193 +msgid "" +":issue:`20443`: In Python 3.9.0a1, sys.argv[0] was made an absolute path if " +"a filename was specified on the command line. Revert this change, since most" +" users expect sys.argv to be unmodified." +msgstr "" + +#: ../../../build/NEWS:6197 +msgid "" +":issue:`39008`: :c:func:`PySys_Audit` now requires ``Py_ssize_t`` to be used" +" for size arguments in the format string, regardless of whether " +"``PY_SSIZE_T_CLEAN`` was defined at include time." +msgstr "" + +#: ../../../build/NEWS:6201 +msgid "" +":issue:`38673`: In REPL mode, don't switch to PS2 if the line starts with " +"comment or whitespace. Based on work by Batuhan Taşkaya." +msgstr "" + +#: ../../../build/NEWS:6204 +msgid "" +":issue:`38922`: Calling ``replace`` on a code object now raises the " +"``code.__new__`` audit event." +msgstr "" + +#: ../../../build/NEWS:6207 +msgid "" +":issue:`38920`: Add audit hooks for when :func:`sys.excepthook` and " +":func:`sys.unraisablehook` are invoked." +msgstr "" + +#: ../../../build/NEWS:6210 +msgid "" +":issue:`38892`: Improve documentation for audit events table and functions." +msgstr "" + +#: ../../../build/NEWS:6212 +msgid "" +":issue:`38852`: Set the thread stack size to 8 Mb for debug builds on " +"android platforms." +msgstr "" + +#: ../../../build/NEWS:6215 +msgid "" +":issue:`38858`: Each Python subinterpreter now has its own \"small integer " +"singletons\": numbers in [-5; 257] range. It is no longer possible to change" +" the number of small integers at build time by overriding ``NSMALLNEGINTS`` " +"and ``NSMALLPOSINTS`` macros: macros should now be modified manually in " +"``pycore_pystate.h`` header file." +msgstr "" + +#: ../../../build/NEWS:6221 +msgid "" +":issue:`36854`: The garbage collector state becomes per interpreter " +"(``PyInterpreterState.gc``), rather than being global " +"(``_PyRuntimeState.gc``)." +msgstr "" + +#: ../../../build/NEWS:6225 +msgid "" +":issue:`38835`: The ``PyFPE_START_PROTECT()`` and ``PyFPE_END_PROTECT()`` " +"macros are empty: they have been doing nothing for the last year, so stop " +"using them." +msgstr "" + +#: ../../../build/NEWS:6229 +msgid "" +":issue:`38328`: Sped up the creation time of constant :class:`list` and " +":class:`set` displays. Patch by Brandt Bucher." +msgstr "" + +#: ../../../build/NEWS:6232 +msgid "" +":issue:`38707`: ``MainThread.native_id`` is now correctly reset in child " +"processes spawned using :class:`multiprocessing.Process`, instead of " +"retaining the parent's value." +msgstr "" + +#: ../../../build/NEWS:6236 +msgid "" +":issue:`38629`: Added ``__floor__`` and ``__ceil__`` methods to float " +"object. Patch by Batuhan Taşkaya." +msgstr "" + +#: ../../../build/NEWS:6239 +msgid "" +":issue:`27145`: int + int and int - int operators can now return small " +"integer singletons. Patch by hongweipeng." +msgstr "" + +#: ../../../build/NEWS:6242 +msgid "" +":issue:`38021`: Provide a platform tag for AIX that is sufficient for PEP425" +" binary distribution identification. Patch by Michael Felt." +msgstr "" + +#: ../../../build/NEWS:6245 +msgid "" +":issue:`35409`: Ignore GeneratorExit exceptions when throwing an exception " +"into the aclose coroutine of an asynchronous generator." +msgstr "" + +#: ../../../build/NEWS:6248 +msgid "" +":issue:`33387`: Removed WITH_CLEANUP_START, WITH_CLEANUP_FINISH, " +"BEGIN_FINALLY, END_FINALLY, CALL_FINALLY and POP_FINALLY bytecodes. Replaced" +" with RERAISE and WITH_EXCEPT_START bytecodes. The compiler now generates " +"different code for exceptional and non-exceptional branches for 'with' and " +"'try-except' statements. For 'try-finally' statements the 'finally' block is" +" replicated for each exit from the 'try' body." +msgstr "" + +#: ../../../build/NEWS:6258 +msgid "" +":issue:`39033`: Fix :exc:`NameError` in :mod:`zipimport`. Patch by " +"Karthikeyan Singaravelan." +msgstr "" + +#: ../../../build/NEWS:6261 +msgid "" +":issue:`39022`: Update importlib.metadata to include improvements from " +"importlib_metadata 1.3 including better serialization of EntryPoints and " +"improved documentation for custom finders." +msgstr "" + +#: ../../../build/NEWS:6265 +msgid "" +":issue:`39006`: Fix asyncio when the ssl module is missing: only check for " +"ssl.SSLSocket instance if the ssl module is available." +msgstr "" + +#: ../../../build/NEWS:6268 +msgid "" +":issue:`38708`: Fix a potential IndexError in email parser when parsing an " +"empty msg-id." +msgstr "" + +#: ../../../build/NEWS:6271 +msgid "" +":issue:`38698`: Add a new ``InvalidMessageID`` token to email parser to " +"represent invalid Message-ID headers. Also, add defects when there is " +"remaining value after parsing the header." +msgstr "" + +#: ../../../build/NEWS:6275 +msgid "" +":issue:`38994`: Implement ``__class_getitem__`` for ``os.PathLike``, " +"``pathlib.Path``." +msgstr "" + +#: ../../../build/NEWS:6278 +msgid "" +":issue:`38979`: Return class from ``ContextVar.__class_getitem__`` to " +"simplify subclassing." +msgstr "" + +#: ../../../build/NEWS:6281 +msgid "" +":issue:`38978`: Implement ``__class_getitem__`` on asyncio objects (Future, " +"Task, Queue). Patch by Batuhan Taskaya." +msgstr "" + +#: ../../../build/NEWS:6284 +msgid "" +":issue:`38916`: :class:`array.array`: Remove ``tostring()`` and " +"``fromstring()`` methods. They were aliases to ``tobytes()`` and " +"``frombytes()``, deprecated since Python 3.2." +msgstr "" + +#: ../../../build/NEWS:6288 +msgid "" +":issue:`38986`: Make repr of C accelerated TaskWakeupMethWrapper the same as" +" of pure Python version." +msgstr "" + +#: ../../../build/NEWS:6291 +msgid "" +":issue:`38982`: Fix asyncio ``PidfdChildWatcher``: handle ``waitpid()`` " +"error. If ``waitpid()`` is called elsewhere, ``waitpid()`` call fails with " +":exc:`ChildProcessError`: use return code 255 in this case, and log a " +"warning. It ensures that the pidfd file descriptor is closed if this error " +"occurs." +msgstr "" + +#: ../../../build/NEWS:6297 +msgid "" +":issue:`38529`: Drop too noisy asyncio warning about deletion of a stream " +"without explicit ``.close()`` call." +msgstr "" + +#: ../../../build/NEWS:6300 +msgid "" +":issue:`27413`: Added ability to pass through ``ensure_ascii`` options to " +"json.dumps in the ``json.tool`` command-line interface." +msgstr "" + +#: ../../../build/NEWS:6303 +msgid "" +":issue:`38634`: The :mod:`readline` module now detects if Python is linked " +"to libedit at runtime on all platforms. Previously, the check was only done" +" on macOS." +msgstr "" + +#: ../../../build/NEWS:6307 +msgid "" +":issue:`33684`: Fix ``json.tool`` failed to read a JSON file with non-ASCII " +"characters when locale encoding is not UTF-8." +msgstr "" + +#: ../../../build/NEWS:6310 +msgid "" +":issue:`38698`: Prevent UnboundLocalError to pop up in parse_message_id." +msgstr "" + +#: ../../../build/NEWS:6312 +msgid "" +"parse_message_id() was improperly using a token defined inside an exception " +"handler, which was raising `UnboundLocalError` on parsing an invalid value. " +"Patch by Claudiu Popa." +msgstr "" + +#: ../../../build/NEWS:6316 +msgid "" +":issue:`38927`: Use ``python -m pip`` instead of ``pip`` to upgrade " +"dependencies in venv." +msgstr "" + +#: ../../../build/NEWS:6319 +msgid "" +":issue:`26730`: Fix ``SpooledTemporaryFile.rollover()`` might corrupt the " +"file when it is in text mode. Patch by Serhiy Storchaka." +msgstr "" + +#: ../../../build/NEWS:6322 +msgid "" +":issue:`38881`: random.choices() now raises a ValueError when all the " +"weights are zero." +msgstr "" + +#: ../../../build/NEWS:6325 +msgid "" +":issue:`38876`: Raise pickle.UnpicklingError when loading an item from memo " +"for invalid input." +msgstr "" + +#: ../../../build/NEWS:6328 +msgid "" +"The previous code was raising a `KeyError` for both the Python and C " +"implementation. This was caused by the specified index of an invalid input " +"which did not exist in the memo structure, where the pickle stores what " +"objects it has seen. The malformed input would have caused either a `BINGET`" +" or `LONG_BINGET` load from the memo, leading to a `KeyError` as the " +"determined index was bogus. Patch by Claudiu Popa" +msgstr "" + +#: ../../../build/NEWS:6335 +msgid "" +":issue:`38688`: Calling func:`shutil.copytree` to copy a directory tree from" +" one directory to another subdirectory resulted in an endless loop and a " +"RecursionError. A fix was added to consume an iterator and create the list " +"of the entries to be copied, avoiding the recursion for newly created " +"directories. Patch by Bruno P. Kinoshita." +msgstr "" + +#: ../../../build/NEWS:6341 +msgid "" +":issue:`38863`: Improve :func:`is_cgi` function in :mod:`http.server`, which" +" enables processing the case that cgi directory is a child of another " +"directory other than root." +msgstr "" + +#: ../../../build/NEWS:6345 +msgid "" +":issue:`37838`: :meth:`typing.get_type_hints` properly handles functions " +"decorated with :meth:`functools.wraps`." +msgstr "" + +#: ../../../build/NEWS:6348 +msgid "" +":issue:`38870`: Expose :func:`ast.unparse` as a function of the :mod:`ast` " +"module that can be used to unparse an :class:`ast.AST` object and produce a " +"string with code that would produce an equivalent :class:`ast.AST` object " +"when parsed. Patch by Pablo Galindo and Batuhan Taskaya." +msgstr "" + +#: ../../../build/NEWS:6353 +msgid "" +":issue:`38859`: AsyncMock now returns StopAsyncIteration on the exhaustion " +"of a side_effects iterable. Since PEP-479 its Impossible to raise a " +"StopIteration exception from a coroutine." +msgstr "" + +#: ../../../build/NEWS:6357 +msgid "" +":issue:`38857`: AsyncMock fix for return values that are awaitable types. " +"This also covers side_effect iterable values that happened to be awaitable, " +"and wraps callables that return an awaitable type. Before these awaitables " +"were being awaited instead of being returned as is." +msgstr "" + +#: ../../../build/NEWS:6362 +msgid "" +":issue:`38834`: :class:`typing.TypedDict` subclasses now track which keys " +"are optional using the ``__required_keys__`` and ``__optional_keys__`` " +"attributes, to enable runtime validation by downstream projects. Patch by " +"Zac Hatfield-Dodds." +msgstr "" + +#: ../../../build/NEWS:6367 +msgid "" +":issue:`38821`: Fix unhandled exceptions in :mod:`argparse` when " +"internationalizing error messages for arguments with ``nargs`` set to " +"special (non-integer) values. Patch by Federico Bond." +msgstr "" + +#: ../../../build/NEWS:6371 +msgid "" +":issue:`38820`: Make Python compatible with OpenSSL 3.0.0. " +":func:`ssl.SSLSocket.getpeercert` no longer returns IPv6 addresses with a " +"trailing new line." +msgstr "" + +#: ../../../build/NEWS:6375 +msgid "" +":issue:`38811`: Fix an unhandled exception in :mod:`pathlib` when " +":meth:`os.link` is missing. Patch by Toke Høiland-Jørgensen." +msgstr "" + +#: ../../../build/NEWS:6378 +msgid "" +":issue:`38686`: Added support for multiple ``qop`` values in " +":class:`urllib.request.AbstractDigestAuthHandler`." +msgstr "" + +#: ../../../build/NEWS:6381 +msgid "" +":issue:`38712`: Add the Linux-specific :func:`signal.pidfd_send_signal` " +"function, which allows sending a signal to a process identified by a file " +"descriptor rather than a pid." +msgstr "" + +#: ../../../build/NEWS:6385 +msgid "" +":issue:`38348`: Add ``-i`` and ``--indent`` (indentation level), and ``--no-" +"type-comments`` (type comments) command line options to ast parsing tool." +msgstr "" + +#: ../../../build/NEWS:6389 +msgid "" +":issue:`37523`: Change :class:`zipfile.ZipExtFile` to raise ``ValueError`` " +"when trying to access the underlying file object after it has been closed. " +"This new behavior is consistent with how accessing closed files is handled " +"in other parts of Python." +msgstr "" + +#: ../../../build/NEWS:6394 +msgid "" +":issue:`38045`: Improve the performance of :func:`enum._decompose` in " +":mod:`enum`. Patch by hongweipeng." +msgstr "" + +#: ../../../build/NEWS:6397 +msgid "" +":issue:`36820`: Break cycle generated when saving an exception in socket.py," +" codeop.py and dyld.py as they keep alive not only the exception but user " +"objects through the ``__traceback__`` attribute. Patch by Mario Corchero." +msgstr "" + +#: ../../../build/NEWS:6401 +msgid "" +":issue:`36406`: Handle namespace packages in :mod:`doctest`. Patch by " +"Karthikeyan Singaravelan." +msgstr "" + +#: ../../../build/NEWS:6404 +msgid "" +":issue:`34776`: Fix dataclasses to support forward references in type " +"annotations" +msgstr "" + +#: ../../../build/NEWS:6407 +msgid "" +":issue:`20928`: ElementTree supports recursive XInclude processing. Patch " +"by Stefan Behnel." +msgstr "" + +#: ../../../build/NEWS:6410 +msgid "" +":issue:`29636`: Add whitespace options for formatting JSON with the " +"``json.tool`` CLI. The following mutually exclusive options are now " +"supported: ``--indent`` for setting the indent level in spaces; ``--tab`` " +"for indenting with tabs; ``--no-indent`` for suppressing newlines; and " +"``--compact`` for suppressing all whitespace. The default behavior remains " +"the same as ``--indent=4``." +msgstr "" + +#: ../../../build/NEWS:6420 +msgid "" +":issue:`38928`: Correct when venv's ``upgrade_dependencies()`` and " +"``--upgrade-deps`` are added." +msgstr "" + +#: ../../../build/NEWS:6423 +msgid "" +":issue:`38899`: Update documentation to state that to activate virtual " +"environments under fish one should use `source`, not `.` as documented at " +"https://fishshell.com/docs/current/commands.html#source." +msgstr "" + +#: ../../../build/NEWS:6427 +msgid "" +":issue:`22377`: Improves documentation of the values that " +":meth:`datetime.datetime.strptime` accepts for ``%Z``. Patch by Karl Dubost." +msgstr "" + +#: ../../../build/NEWS:6434 +msgid "" +":issue:`38546`: Fix test_ressources_gced_in_workers() of " +"test_concurrent_futures: explicitly stop the manager to prevent leaking a " +"child process running in the background after the test completes." +msgstr "" + +#: ../../../build/NEWS:6438 +msgid "" +":issue:`38546`: Multiprocessing and concurrent.futures tests now stop the " +"resource tracker process when tests complete." +msgstr "" + +#: ../../../build/NEWS:6441 +msgid "" +":issue:`38614`: Replace hardcoded timeout constants in tests with new " +":mod:`test.support` constants: :data:`~test.support.LOOPBACK_TIMEOUT`, " +":data:`~test.support.INTERNET_TIMEOUT`, :data:`~test.support.SHORT_TIMEOUT` " +"and :data:`~test.support.LONG_TIMEOUT`. It becomes easier to adjust these " +"four timeout constants for all tests at once, rather than having to adjust " +"every single test file." +msgstr "" + +#: ../../../build/NEWS:6449 +msgid "" +":issue:`38547`: Fix test_pty: if the process is the session leader, closing " +"the master file descriptor raises a SIGHUP signal: simply ignore SIGHUP when" +" running the tests." +msgstr "" + +#: ../../../build/NEWS:6453 +msgid "" +":issue:`38992`: Fix a test for :func:`math.fsum` that was failing due to " +"constant folding." +msgstr "" + +#: ../../../build/NEWS:6456 +msgid "" +":issue:`38991`: :mod:`test.support`: " +":func:`~test.support.run_python_until_end`, " +":func:`~test.support.assert_python_ok` and " +":func:`~test.support.assert_python_failure` functions no longer strip " +"whitespaces from stderr. Remove ``test.support.strip_python_stderr()`` " +"function." +msgstr "" + +#: ../../../build/NEWS:6463 +msgid "" +":issue:`38965`: Fix test_faulthandler on GCC 10. Use the \"volatile\" " +"keyword in ``faulthandler._stack_overflow()`` to prevent tail call " +"optimization on any compiler, rather than relying on compiler specific " +"pragma." +msgstr "" + +#: ../../../build/NEWS:6467 +msgid "" +":issue:`38875`: test_capi: trashcan tests now require the test \"cpu\" " +"resource." +msgstr "" + +#: ../../../build/NEWS:6469 +msgid "" +":issue:`38841`: Skip asyncio " +"test_create_datagram_endpoint_existing_sock_unix on platforms lacking a " +"functional bind() for named unix domain sockets." +msgstr "" + +#: ../../../build/NEWS:6472 +msgid "" +":issue:`38692`: Skip the test_posix.test_pidfd_open() test if " +"``os.pidfd_open()`` fails with a :exc:`PermissionError`. This situation can " +"happen in a Linux sandbox using a syscall whitelist which doesn't allow the " +"``pidfd_open()`` syscall yet." +msgstr "" + +#: ../../../build/NEWS:6477 +msgid "" +":issue:`38839`: Fix some unused functions in tests. Patch by Adam Johnson." +msgstr "" + +#: ../../../build/NEWS:6479 +msgid "" +":issue:`38669`: Raise :exc:`TypeError` when passing target as a string with " +":meth:`unittest.mock.patch.object`." +msgstr "" + +#: ../../../build/NEWS:6482 +msgid "" +":issue:`37957`: test.regrtest now can receive a list of test patterns to " +"ignore (using the -i/--ignore argument) or a file with a list of patterns to" +" ignore (using the --ignore-file argument). Patch by Pablo Galindo." +msgstr "" + +#: ../../../build/NEWS:6489 +msgid "" +":issue:`37404`: :mod:`asyncio` now raises :exc:`TyperError` when calling " +"incompatible methods with an :class:`ssl.SSLSocket` socket. Patch by Ido " +"Michael." +msgstr "" + +#: ../../../build/NEWS:6493 +msgid "" +":issue:`36500`: Added an optional \"regen\" project to the Visual Studio " +"solution that will regenerate all grammar, tokens, and opcodes." +msgstr "" + +#: ../../../build/NEWS:6499 +msgid ":issue:`39007`: Add auditing events to functions in :mod:`winreg`." +msgstr "" + +#: ../../../build/NEWS:6501 +msgid "" +":issue:`33125`: Add support for building and releasing Windows ARM64 " +"packages." +msgstr "" + +#: ../../../build/NEWS:6506 +msgid "" +":issue:`37931`: Fixed a crash on OSX dynamic builds that occurred when re-" +"initializing the posix module after a Py_Finalize if the environment had " +"changed since the previous `import posix`. Patch by Benoît Hudson." +msgstr "" + +#: ../../../build/NEWS:6513 +msgid "" +":issue:`38944`: Escape key now closes IDLE completion windows. Patch by " +"Johnny Najera." +msgstr "" + +#: ../../../build/NEWS:6516 +msgid "" +":issue:`38943`: Fix IDLE autocomplete windows not always appearing on some " +"systems. Patch by Johnny Najera." +msgstr "" + +#: ../../../build/NEWS:6519 +msgid "" +":issue:`38862`: 'Strip Trailing Whitespace' on the Format menu removes extra" +" newlines at the end of non-shell files." +msgstr "" + +#: ../../../build/NEWS:6522 +msgid "" +":issue:`38636`: Fix IDLE Format menu tab toggle and file indent width. These" +" functions (default shortcuts Alt-T and Alt-U) were mistakenly disabled in " +"3.7.5 and 3.8.0." +msgstr "" + +#: ../../../build/NEWS:6529 +msgid "" +":issue:`38896`: Remove ``PyUnicode_ClearFreeList()`` function: the Unicode " +"free list has been removed in Python 3.3." +msgstr "" + +#: ../../../build/NEWS:6532 +msgid "" +":issue:`37340`: Remove ``PyMethod_ClearFreeList()`` and " +"``PyCFunction_ClearFreeList()`` functions: the free lists of bound method " +"objects have been removed." +msgstr "" + +#: ../../../build/NEWS:6536 +msgid "" +":issue:`38835`: Exclude ``PyFPE_START_PROTECT()`` and " +"``PyFPE_END_PROTECT()`` macros of ``pyfpe.h`` from ``Py_LIMITED_API`` " +"(stable API)." +msgstr "" + +#: ../../../build/NEWS:6541 +msgid "Python 3.9.0 alpha 1" +msgstr "" + +#: ../../../build/NEWS:6543 +msgid "*Release date: 2019-11-19*" +msgstr "*发布日期: 2019-11-19*" + +#: ../../../build/NEWS:6548 +msgid "" +":issue:`38722`: :mod:`runpy` now uses :meth:`io.open_code` to open code " +"files. Patch by Jason Killen." +msgstr "" + +#: ../../../build/NEWS:6551 +msgid "" +":issue:`38622`: Add additional audit events for the :mod:`ctypes` module." +msgstr "" + +#: ../../../build/NEWS:6553 +msgid "" +":issue:`38418`: Fixes audit event for :func:`os.system` to be named " +"``os.system``." +msgstr "" + +#: ../../../build/NEWS:6556 +msgid "" +":issue:`38243`: Escape the server title of " +":class:`xmlrpc.server.DocXMLRPCServer` when rendering the document page as " +"HTML. (Contributed by Dong-hee Na in :issue:`38243`.)" +msgstr "" + +#: ../../../build/NEWS:6560 +msgid "" +":issue:`38174`: Update vendorized expat library version to 2.2.8, which " +"resolves CVE-2019-15903." +msgstr "" + +#: ../../../build/NEWS:6563 +msgid "" +":issue:`37764`: Fixes email._header_value_parser.get_unstructured going into" +" an infinite loop for a specific case in which the email header does not " +"have trailing whitespace, and the case in which it contains an invalid " +"encoded word. Patch by Ashwin Ramaswami." +msgstr "" + +#: ../../../build/NEWS:6568 +msgid "" +":issue:`37461`: Fix an infinite loop when parsing specially crafted email " +"headers. Patch by Abhilash Raj." +msgstr "" + +#: ../../../build/NEWS:6571 +msgid "" +":issue:`37363`: Adds audit events for the range of supported run commands " +"(see :ref:`using-on-general`)." +msgstr "" + +#: ../../../build/NEWS:6574 +msgid "" +":issue:`37463`: ssl.match_hostname() no longer accepts IPv4 addresses with " +"additional text after the address and only quad-dotted notation without " +"trailing whitespaces. Some inet_aton() implementations ignore whitespace and" +" all data after whitespace, e.g. '127.0.0.1 whatever'." +msgstr "" + +#: ../../../build/NEWS:6579 +msgid "" +":issue:`37363`: Adds audit events for :mod:`ensurepip`, :mod:`ftplib`, " +":mod:`glob`, :mod:`imaplib`, :mod:`nntplib`, :mod:`pdb`, :mod:`poplib`, " +":mod:`shutil`, :mod:`smtplib`, :mod:`sqlite3`, :mod:`subprocess`, " +":mod:`telnetlib`, :mod:`tempfile` and :mod:`webbrowser`, as well as " +":func:`os.listdir`, :func:`os.scandir` and :func:`breakpoint`." +msgstr "" + +#: ../../../build/NEWS:6585 +msgid "" +":issue:`37364`: :func:`io.open_code` is now used when reading :file:`.pth` " +"files." +msgstr "" + +#: ../../../build/NEWS:6588 +msgid ":issue:`34631`: Updated OpenSSL to 1.1.1c in Windows installer" +msgstr "" + +#: ../../../build/NEWS:6590 +msgid "" +":issue:`34155`: Fix parsing of invalid email addresses with more than one " +"``@`` (e.g. a@b@c.com.) to not return the part before 2nd ``@`` as valid " +"email address. Patch by maxking & jpic." +msgstr "" + +#: ../../../build/NEWS:6597 +msgid "" +":issue:`38631`: Replace ``Py_FatalError()`` call with a regular " +":exc:`RuntimeError` exception in :meth:`float.__getformat__`." +msgstr "" + +#: ../../../build/NEWS:6600 +msgid "" +":issue:`38639`: Optimized :func:`math.floor()`, :func:`math.ceil()` and " +":func:`math.trunc()` for floats." +msgstr "" + +#: ../../../build/NEWS:6603 +msgid "" +":issue:`38640`: Fixed a bug in the compiler that was causing to raise in the" +" presence of break statements and continue statements inside always false " +"while loops. Patch by Pablo Galindo." +msgstr "" + +#: ../../../build/NEWS:6607 +msgid "" +":issue:`38613`: Optimized some set operations (e.g. ``|``, ``^``, and ``-``)" +" of ``dict_keys``. ``d.keys() | other`` was slower than ``set(d) | other`` " +"but they are almost same performance for now." +msgstr "" + +#: ../../../build/NEWS:6611 +msgid "" +":issue:`28029`: ``\"\".replace(\"\", s, n)`` now returns ``s`` instead of an" +" empty string for all non-zero ``n``. There are similar changes for " +":class:`bytes` and :class:`bytearray` objects." +msgstr "" + +#: ../../../build/NEWS:6615 +msgid "" +":issue:`38535`: Fixed line numbers and column offsets for AST nodes for " +"calls without arguments in decorators." +msgstr "" + +#: ../../../build/NEWS:6618 +msgid "" +":issue:`38525`: Fix a segmentation fault when using reverse iterators of " +"empty ``dict`` objects. Patch by Dong-hee Na and Inada Naoki." +msgstr "" + +#: ../../../build/NEWS:6621 +msgid "" +":issue:`38465`: :class:`bytearray`, :class:`~array.array` and " +":class:`~mmap.mmap` objects allow now to export more than ``2**31`` buffers " +"at a time." +msgstr "" + +#: ../../../build/NEWS:6625 +msgid "" +":issue:`38469`: Fixed a bug where the scope of named expressions was not " +"being resolved correctly in the presence of the *global* keyword. Patch by " +"Pablo Galindo." +msgstr "" + +#: ../../../build/NEWS:6629 +msgid "" +":issue:`38437`: Activate the ``GC_DEBUG`` macro for debug builds of the " +"interpreter (when ``Py_DEBUG`` is set). Patch by Pablo Galindo." +msgstr "" + +#: ../../../build/NEWS:6632 +msgid "" +":issue:`38379`: When the garbage collector makes a collection in which some " +"objects resurrect (they are reachable from outside the isolated cycles after" +" the finalizers have been executed), do not block the collection of all " +"objects that are still unreachable. Patch by Pablo Galindo and Tim Peters." +msgstr "" + +#: ../../../build/NEWS:6638 +msgid "" +":issue:`38379`: When cyclic garbage collection (gc) runs finalizers that " +"resurrect unreachable objects, the current gc run ends, without collecting " +"any cyclic trash. However, the statistics reported by ``collect()`` and " +"``get_stats()`` claimed that all cyclic trash found was collected, and that " +"the resurrected objects were collected. Changed the stats to report that " +"none were collected." +msgstr "" + +#: ../../../build/NEWS:6645 +msgid "" +":issue:`38392`: In debug mode, :c:func:`PyObject_GC_Track` now calls " +"``tp_traverse()`` of the object type to ensure that the object is valid: " +"test that objects visited by ``tp_traverse()`` are valid." +msgstr "" + +#: ../../../build/NEWS:6649 +msgid "" +":issue:`38210`: Remove unnecessary intersection and update set operation in " +"dictview with empty set. (Contributed by Dong-hee Na in :issue:`38210`.)" +msgstr "" + +#: ../../../build/NEWS:6652 +msgid "" +":issue:`38402`: Check the error from the system's underlying ``crypt`` or " +"``crypt_r``." +msgstr "" + +#: ../../../build/NEWS:6655 +msgid "" +":issue:`37474`: On FreeBSD, Python no longer calls ``fedisableexcept()`` at " +"startup to control the floating point control mode. The call became useless " +"since FreeBSD 6: it became the default mode." +msgstr "" + +#: ../../../build/NEWS:6659 +msgid "" +":issue:`38006`: Fix a bug due to the interaction of weakrefs and the cyclic " +"garbage collector. We must clear any weakrefs in garbage in order to prevent" +" their callbacks from executing and causing a crash." +msgstr "" + +#: ../../../build/NEWS:6663 +msgid "" +":issue:`38317`: Fix warnings options priority: ``PyConfig.warnoptions`` has " +"the highest priority, as stated in the :pep:`587`." +msgstr "" + +#: ../../../build/NEWS:6666 +msgid "" +":issue:`38310`: Predict ``BUILD_MAP_UNPACK_WITH_CALL`` -> " +"``CALL_FUNCTION_EX`` opcode pairs in the main interpreter loop. Patch by " +"Brandt Bucher." +msgstr "" + +#: ../../../build/NEWS:6669 +msgid "" +":issue:`36871`: Improve error handling for the assert_has_calls and " +"assert_has_awaits methods of mocks. Fixed a bug where any errors encountered" +" while binding the expected calls to the mock's spec were silently " +"swallowed, leading to misleading error output." +msgstr "" + +#: ../../../build/NEWS:6674 +msgid "" +":issue:`11410`: Better control over symbol visibility is provided through " +"use of the visibility attributes available in gcc >= 4.0, provided in a " +"uniform way across POSIX and Windows. The POSIX build files have been " +"updated to compile with -fvisibility=hidden, minimising exported symbols." +msgstr "" + +#: ../../../build/NEWS:6679 +msgid "" +":issue:`38219`: Optimized the :class:`dict` constructor and the " +":meth:`~dict.update` method for the case when the argument is a dict." +msgstr "" + +#: ../../../build/NEWS:6682 +msgid "" +":issue:`38236`: Python now dumps path configuration if it fails to import " +"the Python codecs of the filesystem and stdio encodings." +msgstr "" + +#: ../../../build/NEWS:6685 +msgid "" +":issue:`38013`: Allow to call ``async_generator_athrow().throw(...)`` even " +"for non-started async generator helper. It fixes annoying warning at the end" +" of :func:`asyncio.run` call." +msgstr "" + +#: ../../../build/NEWS:6689 +msgid "" +":issue:`38124`: Fix an off-by-one error in PyState_AddModule that could " +"cause out-of-bounds memory access." +msgstr "" + +#: ../../../build/NEWS:6692 +msgid "" +":issue:`38116`: The select module is now PEP-384 compliant and no longer has" +" static state" +msgstr "" + +#: ../../../build/NEWS:6695 +msgid ":issue:`38113`: ast module updated to PEP-384 and all statics removed" +msgstr "" + +#: ../../../build/NEWS:6697 +msgid ":issue:`38076`: The struct module is now PEP-384 compatible" +msgstr "" + +#: ../../../build/NEWS:6699 +msgid ":issue:`38075`: The random module is now PEP-384 compatible" +msgstr "" + +#: ../../../build/NEWS:6701 +msgid ":issue:`38074`: zlib module made PEP-384 compatible" +msgstr "" + +#: ../../../build/NEWS:6703 +msgid ":issue:`38073`: Make pwd extension module PEP-384 compatible" +msgstr "" + +#: ../../../build/NEWS:6705 +msgid ":issue:`38072`: grp module made PEP-384 compatible" +msgstr "" + +#: ../../../build/NEWS:6707 +msgid ":issue:`38069`: Make _posixsubprocess PEP-384 compatible" +msgstr "" + +#: ../../../build/NEWS:6709 +msgid ":issue:`38071`: Make termios extension module PEP-384 compatible" +msgstr "" + +#: ../../../build/NEWS:6711 +msgid "" +":issue:`38005`: Fixed comparing and creating of InterpreterID and ChannelID." +msgstr "" + +#: ../../../build/NEWS:6713 +msgid "" +":issue:`36946`: Fix possible signed integer overflow when handling slices. " +"Patch by hongweipeng." +msgstr "" + +#: ../../../build/NEWS:6716 +msgid "" +":issue:`37994`: Fixed silencing arbitrary errors if an attribute lookup " +"fails in several sites. Only AttributeError should be silenced." +msgstr "" + +#: ../../../build/NEWS:6719 +msgid "" +":issue:`8425`: Optimize set difference_update for the case when the other " +"set is much larger than the base set. (Suggested by Evgeny Kapun with code " +"contributed by Michele Orrù)." +msgstr "" + +#: ../../../build/NEWS:6723 +msgid "" +":issue:`37966`: The implementation of :func:`~unicodedata.is_normalized` has" +" been greatly sped up on strings that aren't normalized, by implementing the" +" full normalization-quick-check algorithm from the Unicode standard." +msgstr "" + +#: ../../../build/NEWS:6727 +msgid "" +":issue:`37947`: Adjust correctly the recursion level in the symtable " +"generation for named expressions. Patch by Pablo Galindo." +msgstr "" + +#: ../../../build/NEWS:6730 +msgid "" +":issue:`37812`: The ``CHECK_SMALL_INT`` macro used inside " +":file:`Object/longobject.c` has been replaced with an explicit ``return`` at" +" each call site." +msgstr "" + +#: ../../../build/NEWS:6734 +msgid "" +":issue:`37751`: Fix :func:`codecs.lookup` to normalize the encoding name the" +" same way than :func:`encodings.normalize_encoding`, except that " +":func:`codecs.lookup` also converts the name to lower case." +msgstr "" + +#: ../../../build/NEWS:6738 +msgid "" +":issue:`37830`: Fixed compilation of :keyword:`break` and " +":keyword:`continue` in the :keyword:`finally` block when the corresponding " +":keyword:`try` block contains :keyword:`return` with a non-constant value." +msgstr "" + +#: ../../../build/NEWS:6742 +msgid "" +":issue:`20490`: Improve import error message for partially initialized " +"module on circular ``from`` imports - by Anthony Sottile." +msgstr "" + +#: ../../../build/NEWS:6745 +msgid "" +":issue:`37840`: Fix handling of negative indices in " +":c:member:`~PySequenceMethods.sq_item` of :class:`bytearray`. Patch by " +"Sergey Fedoseev." +msgstr "" + +#: ../../../build/NEWS:6749 +msgid "" +":issue:`37802`: Slightly improve performance of " +":c:func:`PyLong_FromUnsignedLong`, :c:func:`PyLong_FromUnsignedLongLong` and" +" :c:func:`PyLong_FromSize_t`. Patch by Sergey Fedoseev." +msgstr "" + +#: ../../../build/NEWS:6753 +msgid "" +":issue:`37409`: Ensure explicit relative imports from interactive sessions " +"and scripts (having no parent package) always raise ImportError, rather than" +" treating the current module as the package. Patch by Ben Lewis." +msgstr "" + +#: ../../../build/NEWS:6757 +msgid "" +":issue:`32912`: Reverted :issue:`32912`: emitting :exc:`SyntaxWarning` " +"instead of :exc:`DeprecationWarning` for invalid escape sequences in string " +"and bytes literals." +msgstr "" + +#: ../../../build/NEWS:6761 +msgid "" +":issue:`37757`: :pep:`572`: As described in the PEP, assignment expressions " +"now raise :exc:`SyntaxError` when their interaction with comprehension " +"scoping results in an ambiguous target scope." +msgstr "" + +#: ../../../build/NEWS:6765 +msgid "" +"The ``TargetScopeError`` subclass originally proposed by the PEP has been " +"removed in favour of just raising regular syntax errors for the disallowed " +"cases." +msgstr "" + +#: ../../../build/NEWS:6769 +msgid "" +":issue:`36279`: Fix potential use of uninitialized memory in " +":func:`os.wait3`." +msgstr "" + +#: ../../../build/NEWS:6771 +msgid "" +":issue:`36311`: Decoding bytes objects larger than 2GiB is faster and no " +"longer fails when a multibyte characters spans a chunk boundary." +msgstr "" + +#: ../../../build/NEWS:6774 +msgid "" +":issue:`34880`: The :keyword:`assert` statement now works properly if the " +":exc:`AssertionError` exception is being shadowed. Patch by Zackery Spytz." +msgstr "" + +#: ../../../build/NEWS:6777 +msgid "" +":issue:`37340`: Removed object cache (``free_list``) for bound method " +"objects. Temporary bound method objects are less used than before thanks to " +"the ``LOAD_METHOD`` opcode and the ``_PyObject_VectorcallMethod`` C API." +msgstr "" + +#: ../../../build/NEWS:6781 +msgid "" +":issue:`37648`: Fixed minor inconsistency in :meth:`list.__contains__`, " +":meth:`tuple.__contains__` and a few other places. The collection's item is " +"now always at the left and the needle is on the right of ``==``." +msgstr "" + +#: ../../../build/NEWS:6785 +msgid "" +":issue:`37444`: Update differing exception between " +":meth:`builtins.__import__` and :meth:`importlib.__import__`." +msgstr "" + +#: ../../../build/NEWS:6788 +msgid "" +":issue:`37619`: When adding a wrapper descriptor from one class to a " +"different class (for example, setting ``__add__ = str.__add__`` on an " +"``int`` subclass), an exception is correctly raised when the operator is " +"called." +msgstr "" + +#: ../../../build/NEWS:6792 +msgid "" +":issue:`37593`: Swap the positions of the *posonlyargs* and *args* " +"parameters in the constructor of :class:`ast.parameters` nodes." +msgstr "" + +#: ../../../build/NEWS:6795 +msgid ":issue:`37543`: Optimized pymalloc for non PGO build." +msgstr "" + +#: ../../../build/NEWS:6797 +msgid "" +":issue:`37537`: Compute allocated pymalloc blocks inside " +"_Py_GetAllocatedBlocks(). This slows down _Py_GetAllocatedBlocks() but " +"gives a small speedup to _PyObject_Malloc() and _PyObject_Free()." +msgstr "" + +#: ../../../build/NEWS:6801 +msgid "" +":issue:`37467`: Fix :func:`sys.excepthook` and :c:func:`PyErr_Display` if a " +"filename is a bytes string. For example, for a SyntaxError exception where " +"the filename attribute is a bytes string." +msgstr "" + +#: ../../../build/NEWS:6805 +msgid "" +":issue:`37433`: Fix ``SyntaxError`` indicator printing too many spaces for " +"multi-line strings - by Anthony Sottile." +msgstr "" + +#: ../../../build/NEWS:6808 +msgid "" +":issue:`37417`: :meth:`bytearray.extend` now correctly handles errors that " +"arise during iteration. Patch by Brandt Bucher." +msgstr "" + +#: ../../../build/NEWS:6811 +msgid "" +":issue:`37414`: The undocumented ``sys.callstats()`` function has been " +"removed. Since Python 3.7, it was deprecated and always returned ``None``. " +"It required a special build option ``CALL_PROFILE`` which was already " +"removed in Python 3.7." +msgstr "" + +#: ../../../build/NEWS:6816 +msgid "" +":issue:`37392`: Remove ``sys.getcheckinterval()`` and " +"``sys.setcheckinterval()`` functions. They were deprecated since Python 3.2." +" Use :func:`sys.getswitchinterval` and :func:`sys.setswitchinterval` " +"instead. Remove also ``check_interval`` field of the ``PyInterpreterState`` " +"structure." +msgstr "" + +#: ../../../build/NEWS:6822 +msgid "" +":issue:`37388`: In development mode and in debug build, *encoding* and " +"*errors* arguments are now checked on string encoding and decoding " +"operations. Examples: :func:`open`, :meth:`str.encode` and " +":meth:`bytes.decode`." +msgstr "" + +#: ../../../build/NEWS:6826 +msgid "" +"By default, for best performances, the *errors* argument is only checked at " +"the first encoding/decoding error, and the *encoding* argument is sometimes " +"ignored for empty strings." +msgstr "" + +#: ../../../build/NEWS:6830 +msgid "" +":issue:`37348`: Optimized decoding short ASCII string with UTF-8 and ascii " +"codecs. ``b\"foo\".decode()`` is about 15% faster. Patch by Inada Naoki." +msgstr "" + +#: ../../../build/NEWS:6833 +msgid "" +":issue:`24214`: Improved support of the surrogatepass error handler in the " +"UTF-8 and UTF-16 incremental decoders." +msgstr "" + +#: ../../../build/NEWS:6836 +msgid "" +":issue:`37330`: :func:`open`, :func:`io.open`, :func:`codecs.open` and " +":class:`fileinput.FileInput` no longer accept ``'U'`` (\"universal " +"newline\") in the file mode. This flag was deprecated since Python 3.3." +msgstr "" + +#: ../../../build/NEWS:6840 +msgid "" +":issue:`35224`: Reverse evaluation order of key: value in dict " +"comprehensions as proposed in PEP 572. I.e. in ``{k: v for ...}``, ``k`` " +"will be evaluated before ``v``." +msgstr "" + +#: ../../../build/NEWS:6844 +msgid "" +":issue:`37316`: Fix the :c:func:`PySys_Audit` call in :class:`mmap.mmap`." +msgstr "" + +#: ../../../build/NEWS:6846 +msgid ":issue:`37300`: Remove an unnecessary Py_XINCREF in classobject.c." +msgstr "" + +#: ../../../build/NEWS:6848 +msgid "" +":issue:`37269`: Fix a bug in the peephole optimizer that was not treating " +"correctly constant conditions with binary operators. Patch by Pablo Galindo." +msgstr "" + +#: ../../../build/NEWS:6852 +msgid "" +":issue:`20443`: Python now gets the absolute path of the script filename " +"specified on the command line (ex: \"python3 script.py\"): the __file__ " +"attribute of the __main__ module and sys.path[0] become an absolute path, " +"rather than a relative path." +msgstr "" + +#: ../../../build/NEWS:6857 +msgid "" +":issue:`37257`: Python's small object allocator (``obmalloc.c``) now allows " +"(no more than) one empty arena to remain available for immediate reuse, " +"without returning it to the OS. This prevents thrashing in simple loops " +"where an arena could be created and destroyed anew on each iteration." +msgstr "" + +#: ../../../build/NEWS:6862 +msgid "" +":issue:`37231`: The dispatching of type slots to special methods (for " +"example calling ``__mul__`` when doing ``x * y``) has been made faster." +msgstr "" + +#: ../../../build/NEWS:6865 +msgid "" +":issue:`36974`: Implemented separate vectorcall functions for every calling " +"convention of builtin functions and methods. This improves performance for " +"calls." +msgstr "" + +#: ../../../build/NEWS:6869 +msgid "" +":issue:`37213`: Handle correctly negative line offsets in the peephole " +"optimizer. Patch by Pablo Galindo." +msgstr "" + +#: ../../../build/NEWS:6872 +msgid "" +":issue:`37219`: Remove erroneous optimization for empty set differences." +msgstr "" + +#: ../../../build/NEWS:6874 +msgid "" +":issue:`15913`: Implement :c:func:`PyBuffer_SizeFromFormat()` function " +"(previously documented but not implemented): call :func:`struct.calcsize`. " +"Patch by Joannah Nanjekye." +msgstr "" + +#: ../../../build/NEWS:6878 +msgid "" +":issue:`36922`: Slot functions optimize any callable with " +"``Py_TPFLAGS_METHOD_DESCRIPTOR`` instead of only instances of ``function``." +msgstr "" + +#: ../../../build/NEWS:6882 +msgid "" +":issue:`36974`: The slot ``tp_vectorcall_offset`` is inherited " +"unconditionally to support ``super().__call__()`` when the base class uses " +"vectorcall." +msgstr "" + +#: ../../../build/NEWS:6885 +msgid "" +":issue:`37160`: :func:`threading.get_native_id` now also supports NetBSD." +msgstr "" + +#: ../../../build/NEWS:6887 +msgid "" +":issue:`37077`: Add :func:`threading.get_native_id` support for AIX. Patch " +"by M. Felt" +msgstr "" + +#: ../../../build/NEWS:6890 +msgid ":issue:`36781`: :func:`sum` has been optimized for boolean values." +msgstr "" + +#: ../../../build/NEWS:6892 +msgid "" +":issue:`34556`: Add ``--upgrade-deps`` to venv module. Patch by Cooper Ry " +"Lees" +msgstr "" + +#: ../../../build/NEWS:6894 +msgid "" +":issue:`20523`: ``pdb.Pdb`` supports ~/.pdbrc in Windows 7. Patch by Tim " +"Hopper and Dan Lidral-Porter." +msgstr "" + +#: ../../../build/NEWS:6897 +msgid "" +":issue:`35551`: Updated encodings: - Removed the \"tis260\" encoding, which " +"was an alias for the nonexistent \"tactis\" codec. - Added \"mac_centeuro\" " +"as an alias for the mac_latin2 encoding." +msgstr "" + +#: ../../../build/NEWS:6901 +msgid "" +":issue:`19072`: The :class:`classmethod` decorator can now wrap other " +"descriptors such as property objects. Adapted from a patch written by " +"Graham Dumpleton." +msgstr "" + +#: ../../../build/NEWS:6905 +msgid "" +":issue:`27575`: Improve speed of dictview intersection by directly using set" +" intersection logic. Patch by David Su." +msgstr "" + +#: ../../../build/NEWS:6908 +msgid "" +":issue:`30773`: Prohibit parallel running of aclose() / asend() / athrow(). " +"Fix ag_running to reflect the actual running status of the AG." +msgstr "" + +#: ../../../build/NEWS:6914 +msgid "" +":issue:`36589`: The :func:`curses.update_lines_cols` function now returns " +"``None`` instead of ``1`` on success." +msgstr "" + +#: ../../../build/NEWS:6917 +msgid "" +":issue:`38807`: Update :exc:`TypeError` messages for :meth:`os.path.join` to" +" include :class:`os.PathLike` objects as acceptable input types." +msgstr "" + +#: ../../../build/NEWS:6920 +msgid "" +":issue:`38724`: Add a repr for ``subprocess.Popen`` objects. Patch by Andrey" +" Doroschenko." +msgstr "" + +#: ../../../build/NEWS:6923 +msgid "" +":issue:`38786`: pydoc now recognizes and parses HTTPS URLs. Patch by " +"python273." +msgstr "" + +#: ../../../build/NEWS:6925 +msgid "" +":issue:`38785`: Prevent asyncio from crashing if parent ``__init__`` is not " +"called from a constructor of object derived from ``asyncio.Future``." +msgstr "" + +#: ../../../build/NEWS:6928 +msgid "" +":issue:`38723`: :mod:`pdb` now uses :meth:`io.open_code` to trigger auditing" +" events." +msgstr "" + +#: ../../../build/NEWS:6931 +msgid "" +":issue:`27805`: Allow opening pipes and other non-seekable files in append " +"mode with :func:`open`." +msgstr "" + +#: ../../../build/NEWS:6934 +msgid "" +":issue:`38438`: Simplify the :mod:`argparse` usage message for " +"``nargs=\"*\"``." +msgstr "" + +#: ../../../build/NEWS:6936 +msgid "" +":issue:`38761`: WeakSet is now registered as a collections.abc.MutableSet." +msgstr "" + +#: ../../../build/NEWS:6938 +msgid "" +":issue:`38716`: logging: change RotatingHandler namer and rotator to class-" +"level attributes. This stops __init__ from setting them to None in the case " +"where a subclass defines them with eponymous methods." +msgstr "" + +#: ../../../build/NEWS:6942 +msgid "" +":issue:`38713`: Add :data:`os.P_PIDFD` constant, which may be passed to " +":func:`os.waitid` to wait on a Linux process file descriptor." +msgstr "" + +#: ../../../build/NEWS:6945 +msgid "" +":issue:`38692`: Add :class:`asyncio.PidfdChildWatcher`, a Linux-specific " +"child watcher implementation that polls process file descriptors." +msgstr "" + +#: ../../../build/NEWS:6948 +msgid "" +":issue:`38692`: Expose the Linux ``pidfd_open`` syscall as " +":func:`os.pidfd_open`." +msgstr "" + +#: ../../../build/NEWS:6951 +msgid "" +":issue:`38602`: Added constants :data:`~fcntl.F_OFD_GETLK`, " +":data:`~fcntl.F_OFD_SETLK` and :data:`~fcntl.F_OFD_SETLKW` to the " +":mod:`fcntl` module. Patch by Dong-hee Na." +msgstr "" + +#: ../../../build/NEWS:6955 +msgid "" +":issue:`38334`: Fixed seeking backward on an encrypted " +":class:`zipfile.ZipExtFile`." +msgstr "" + +#: ../../../build/NEWS:6958 +msgid "" +":issue:`38312`: Add :func:`curses.get_escdelay`, " +":func:`curses.set_escdelay`, :func:`curses.get_tabsize`, and " +":func:`curses.set_tabsize` functions - by Anthony Sottile." +msgstr "" + +#: ../../../build/NEWS:6962 +msgid "" +":issue:`38586`: Now :func:`~logging.config.fileConfig` correctly sets the " +".name of handlers loaded." +msgstr "" + +#: ../../../build/NEWS:6965 +msgid "" +":issue:`38565`: Add new cache_parameters() method for functools.lru_cache() " +"to better support pickling." +msgstr "" + +#: ../../../build/NEWS:6968 +msgid "" +":issue:`34679`: asynci.ProactorEventLoop.close() now only calls " +"signal.set_wakeup_fd() in the main thread." +msgstr "" + +#: ../../../build/NEWS:6971 +msgid "" +":issue:`31202`: The case the result of :func:`pathlib.WindowsPath.glob` " +"matches now the case of the pattern for literal parts." +msgstr "" + +#: ../../../build/NEWS:6974 +msgid "" +":issue:`36321`: Remove misspelled attribute. The 3.8 changelog noted that " +"this would be removed in 3.9." +msgstr "" + +#: ../../../build/NEWS:6977 +msgid "" +":issue:`38521`: Fixed erroneous equality comparison in " +"statistics.NormalDist()." +msgstr "" + +#: ../../../build/NEWS:6979 +msgid "" +":issue:`38493`: Added :data:`~os.CLD_KILLED` and :data:`~os.CLD_STOPPED` for" +" :attr:`si_code`. Patch by Dong-hee Na." +msgstr "" + +#: ../../../build/NEWS:6982 +msgid "" +":issue:`38478`: Fixed a bug in :meth:`inspect.signature.bind` that was " +"causing it to fail when handling a keyword argument with same name as " +"positional-only parameter. Patch by Pablo Galindo." +msgstr "" + +#: ../../../build/NEWS:6986 +msgid "" +":issue:`33604`: Fixed `hmac.new` and `hmac.HMAC` to raise TypeError instead " +"of ValueError when the digestmod parameter, now required in 3.8, is omitted." +" Also clarified the hmac module documentation and docstrings." +msgstr "" + +#: ../../../build/NEWS:6990 +msgid "" +":issue:`38378`: Parameters *out* and *in* of :func:`os.sendfile` was renamed" +" to *out_fd* and *in_fd*." +msgstr "" + +#: ../../../build/NEWS:6993 +msgid "" +":issue:`38417`: Added support for setting the umask in the child process to " +"the subprocess module on POSIX systems." +msgstr "" + +#: ../../../build/NEWS:6996 +msgid "" +":issue:`38449`: Revert PR 15522, which introduces a regression in " +":meth:`mimetypes.guess_type` due to improper handling of filenames as urls." +msgstr "" + +#: ../../../build/NEWS:7000 +msgid "" +":issue:`38431`: Fix ``__repr__`` method for :class:`dataclasses.InitVar` to " +"support typing objects, patch by Samuel Colvin." +msgstr "" + +#: ../../../build/NEWS:7003 +msgid "" +":issue:`38109`: Add missing :data:`stat.S_IFDOOR`, :data:`stat.S_IFPORT`, " +":data:`stat.S_IFWHT`, :func:`stat.S_ISDOOR`, :func:`stat.S_ISPORT`, and " +":func:`stat.S_ISWHT` values to the Python implementation of :mod:`stat`." +msgstr "" + +#: ../../../build/NEWS:7007 +msgid ":issue:`38422`: Clarify docstrings of pathlib suffix(es)" +msgstr "" + +#: ../../../build/NEWS:7009 +msgid "" +":issue:`38405`: Nested subclasses of :class:`typing.NamedTuple` are now " +"pickleable." +msgstr "" + +#: ../../../build/NEWS:7012 +msgid "" +":issue:`38332`: Prevent :exc:`KeyError` thrown by " +":func:`_encoded_words.decode` when given an encoded-word with invalid " +"content-type encoding from propagating all the way to " +":func:`email.message.get`." +msgstr "" + +#: ../../../build/NEWS:7016 +msgid "" +":issue:`38371`: Deprecated the ``split()`` method in " +":class:`_tkinter.TkappType` in favour of the ``splitlist()`` method which " +"has more consistent and predicable behavior." +msgstr "" + +#: ../../../build/NEWS:7020 +msgid "" +":issue:`38341`: Add :exc:`smtplib.SMTPNotSupportedError` to the " +":mod:`smtplib` exported names." +msgstr "" + +#: ../../../build/NEWS:7023 +msgid "" +":issue:`38319`: sendfile() used in socket and shutil modules was raising " +"OverflowError for files >= 2GiB on 32-bit architectures. (patch by " +"Giampaolo Rodola)" +msgstr "" + +#: ../../../build/NEWS:7027 +msgid ":issue:`38242`: Revert the new asyncio Streams API" +msgstr "" + +#: ../../../build/NEWS:7029 +msgid "" +":issue:`13153`: OS native encoding is now used for converting between Python" +" strings and Tcl objects. This allows to display, copy and paste to " +"clipboard emoji and other non-BMP characters. Converting strings from Tcl " +"to Python and back now never fails (except MemoryError)." +msgstr "" + +#: ../../../build/NEWS:7034 +msgid "" +":issue:`38019`: Correctly handle pause/resume reading of closed asyncio unix" +" pipe." +msgstr "" + +#: ../../../build/NEWS:7037 +msgid "" +":issue:`38163`: Child mocks will now detect their type as either synchronous" +" or asynchronous, asynchronous child mocks will be AsyncMocks and " +"synchronous child mocks will be either MagicMock or Mock (depending on their" +" parent type)." +msgstr "" + +#: ../../../build/NEWS:7042 +msgid ":issue:`38161`: Removes _AwaitEvent from AsyncMock." +msgstr "" + +#: ../../../build/NEWS:7044 +msgid "" +":issue:`38216`: Allow the rare code that wants to send invalid http requests" +" from the `http.client` library a way to do so. The fixes for " +":issue:`30458` led to breakage for some projects that were relying on this " +"ability to test their own behavior in the face of bad requests." +msgstr "" + +#: ../../../build/NEWS:7049 +msgid "" +":issue:`28286`: Deprecate opening :class:`~gzip.GzipFile` for writing " +"implicitly. Always specify the *mode* argument for writing." +msgstr "" + +#: ../../../build/NEWS:7052 +msgid "" +":issue:`38108`: Any synchronous magic methods on an AsyncMock now return a " +"MagicMock. Any asynchronous magic methods on a MagicMock now return an " +"AsyncMock." +msgstr "" + +#: ../../../build/NEWS:7056 +msgid "" +":issue:`38265`: Update the *length* parameter of :func:`os.pread` to accept " +":c:type:`Py_ssize_t` instead of :c:type:`int`." +msgstr "" + +#: ../../../build/NEWS:7059 +msgid "" +":issue:`38112`: :mod:`compileall` has a higher default recursion limit and " +"new command-line arguments for path manipulation, symlinks handling, and " +"multiple optimization levels." +msgstr "" + +#: ../../../build/NEWS:7063 +msgid ":issue:`38248`: asyncio: Fix inconsistent immediate Task cancellation" +msgstr "" + +#: ../../../build/NEWS:7065 +msgid "" +":issue:`38237`: The arguments for the builtin pow function are more " +"descriptive. They can now also be passed in as keywords." +msgstr "" + +#: ../../../build/NEWS:7068 +msgid "" +":issue:`34002`: Improve efficiency in parts of email package by changing " +"while-pop to a for loop, using isdisjoint instead of set intersections." +msgstr "" + +#: ../../../build/NEWS:7071 +msgid "" +":issue:`38191`: Constructors of :class:`~typing.NamedTuple` and " +":class:`~typing.TypedDict` types now accept arbitrary keyword argument " +"names, including \"cls\", \"self\", \"typename\", \"_typename\", \"fields\" " +"and \"_fields\"." +msgstr "" + +#: ../../../build/NEWS:7076 +msgid "" +":issue:`38155`: Add ``__all__`` to :mod:`datetime`. Patch by Tahia Khan." +msgstr "" + +#: ../../../build/NEWS:7078 +msgid "" +":issue:`38185`: Fixed case-insensitive string comparison in " +":class:`sqlite3.Row` indexing." +msgstr "" + +#: ../../../build/NEWS:7081 +msgid "" +":issue:`38136`: Changes AsyncMock call count and await count to be two " +"different counters. Now await count only counts when a coroutine has been " +"awaited, not when it has been called, and vice-versa. Update the " +"documentation around this." +msgstr "" + +#: ../../../build/NEWS:7086 +msgid "" +":issue:`37828`: Fix default mock name in " +":meth:`unittest.mock.Mock.assert_called` exceptions. Patch by Abraham Toriz " +"Cruz." +msgstr "" + +#: ../../../build/NEWS:7090 +msgid "" +":issue:`38175`: Fix a memory leak in comparison of :class:`sqlite3.Row` " +"objects." +msgstr "" + +#: ../../../build/NEWS:7093 +msgid "" +":issue:`33936`: _hashlib no longer calls obsolete OpenSSL initialization " +"function with OpenSSL 1.1.0+." +msgstr "" + +#: ../../../build/NEWS:7096 +msgid "" +":issue:`34706`: Preserve subclassing in inspect.Signature.from_callable." +msgstr "" + +#: ../../../build/NEWS:7098 +msgid "" +":issue:`38153`: Names of hashing algorithms from OpenSSL are now normalized " +"to follow Python's naming conventions. For example OpenSSL uses sha3-512 " +"instead of sha3_512 or blake2b512 instead of blake2b." +msgstr "" + +#: ../../../build/NEWS:7102 +msgid "" +":issue:`38115`: Fix a bug in dis.findlinestarts() where it would return " +"invalid bytecode offsets. Document that a code object's co_lnotab can " +"contain invalid bytecode offsets." +msgstr "" + +#: ../../../build/NEWS:7106 +msgid "" +":issue:`38148`: Add slots to :mod:`asyncio` transport classes, which can " +"reduce memory usage." +msgstr "" + +#: ../../../build/NEWS:7109 +msgid "" +":issue:`38142`: The _hashlib OpenSSL wrapper extension module is now PEP-384" +" compliant." +msgstr "" + +#: ../../../build/NEWS:7112 +msgid "" +":issue:`9216`: hashlib constructors now support usedforsecurity flag to " +"signal that a hashing algorithm is not used in a security context." +msgstr "" + +#: ../../../build/NEWS:7115 +msgid "" +":issue:`36991`: Fixes a potential incorrect AttributeError exception " +"escaping ZipFile.extract() in some unsupported input error situations." +msgstr "" + +#: ../../../build/NEWS:7118 +msgid "" +":issue:`38134`: Remove obsolete copy of PBKDF2_HMAC_fast. All supported " +"OpenSSL versions contain a fast implementation." +msgstr "" + +#: ../../../build/NEWS:7121 +msgid "" +":issue:`38132`: The OpenSSL hashlib wrapper uses a simpler implementation. " +"Several Macros and pointless caches are gone. The hash name now comes from " +"OpenSSL's EVP. The algorithm name stays the same, except it is now always " +"lower case." +msgstr "" + +#: ../../../build/NEWS:7126 +msgid "" +":issue:`38008`: Fix parent class check in protocols to correctly identify " +"the module that provides a builtin protocol, instead of assuming they all " +"come from the :mod:`collections.abc` module" +msgstr "" + +#: ../../../build/NEWS:7130 +msgid "" +":issue:`34037`: For :mod:`asyncio`, add a new coroutine " +":meth:`loop.shutdown_default_executor`. The new coroutine provides an API to" +" schedule an executor shutdown that waits on the threadpool to finish " +"closing. Also, :func:`asyncio.run` has been updated to utilize the new " +"coroutine. Patch by Kyle Stanley." +msgstr "" + +#: ../../../build/NEWS:7136 +msgid "" +":issue:`37405`: Fixed regression bug for socket.getsockname() for non-" +"CAN_ISOTP AF_CAN address family sockets by returning a 1-tuple instead of " +"string." +msgstr "" + +#: ../../../build/NEWS:7139 +msgid "" +":issue:`38121`: Update parameter names on functions in importlib.metadata " +"matching the changes in the 0.22 release of importlib_metadata." +msgstr "" + +#: ../../../build/NEWS:7142 +msgid "" +":issue:`38110`: The os.closewalk() implementation now uses the libc fdwalk()" +" API on platforms where it is available." +msgstr "" + +#: ../../../build/NEWS:7145 +msgid "" +":issue:`38093`: Fixes AsyncMock so it doesn't crash when used with " +"AsyncContextManagers or AsyncIterators." +msgstr "" + +#: ../../../build/NEWS:7148 +msgid "" +":issue:`37488`: Add warning to :meth:`datetime.utctimetuple`, " +":meth:`datetime.utcnow` and :meth:`datetime.utcfromtimestamp` ." +msgstr "" + +#: ../../../build/NEWS:7151 +msgid "" +":issue:`35640`: Allow passing a :term:`path-like object` as ``directory`` " +"argument to the :class:`http.server.SimpleHTTPRequestHandler` class. Patch " +"by Géry Ogam." +msgstr "" + +#: ../../../build/NEWS:7155 +msgid "" +":issue:`38086`: Update importlib.metadata with changes from " +"`importlib_metadata 0.21 `_." +msgstr "" + +#: ../../../build/NEWS:7159 +msgid "" +":issue:`37251`: Remove `__code__` check in AsyncMock that incorrectly " +"evaluated function specs as async objects but failed to evaluate classes " +"with `__await__` but no `__code__` attribute defined as async objects." +msgstr "" + +#: ../../../build/NEWS:7163 +msgid ":issue:`38037`: Fix reference counters in the :mod:`signal` module." +msgstr "" + +#: ../../../build/NEWS:7165 +msgid "" +":issue:`38066`: Hide internal asyncio.Stream methods: feed_eof(), " +"feed_data(), set_exception() and set_transport()." +msgstr "" + +#: ../../../build/NEWS:7168 +msgid ":issue:`38059`: inspect.py now uses sys.exit() instead of exit()" +msgstr "" + +#: ../../../build/NEWS:7170 +msgid "" +":issue:`38049`: Added command-line interface for the :mod:`ast` module." +msgstr "" + +#: ../../../build/NEWS:7172 +msgid "" +":issue:`37953`: In :mod:`typing`, improved the ``__hash__`` and ``__eq__`` " +"methods for :class:`ForwardReferences`." +msgstr "" + +#: ../../../build/NEWS:7175 +msgid "" +":issue:`38026`: Fixed :func:`inspect.getattr_static` used ``isinstance`` " +"while it should avoid dynamic lookup." +msgstr "" + +#: ../../../build/NEWS:7178 +msgid "" +":issue:`35923`: Update :class:`importlib.machinery.BuiltinImporter` to use " +"``loader._ORIGIN`` instead of a hardcoded value. Patch by Dong-hee Na." +msgstr "" + +#: ../../../build/NEWS:7181 +msgid "" +":issue:`38010`: In ``importlib.metadata`` sync with ``importlib_metadata`` " +"0.20, clarifying behavior of ``files()`` and fixing issue where only one " +"requirement was returned for ``requires()`` on ``dist-info`` packages." +msgstr "" + +#: ../../../build/NEWS:7185 +msgid "" +":issue:`38006`: weakref.WeakValueDictionary defines a local remove() " +"function used as callback for weak references. This function was created " +"with a closure. Modify the implementation to avoid the closure." +msgstr "" + +#: ../../../build/NEWS:7189 +msgid "" +":issue:`37995`: Added the *indent* option to :func:`ast.dump` which allows " +"it to produce a multiline indented output." +msgstr "" + +#: ../../../build/NEWS:7192 +msgid "" +":issue:`34410`: Fixed a crash in the :func:`tee` iterator when re-enter it. " +"RuntimeError is now raised in this case." +msgstr "" + +#: ../../../build/NEWS:7195 +msgid "" +":issue:`37140`: Fix a ctypes regression of Python 3.8. When a " +"ctypes.Structure is passed by copy to a function, ctypes internals created a" +" temporary object which had the side effect of calling the structure " +"finalizer (__del__) twice. The Python semantics requires a finalizer to be " +"called exactly once. Fix ctypes internals to no longer call the finalizer " +"twice." +msgstr "" + +#: ../../../build/NEWS:7201 +msgid "" +":issue:`37587`: ``_json.scanstring`` is now up to 3x faster when there are " +"many backslash escaped characters in the JSON string." +msgstr "" + +#: ../../../build/NEWS:7204 +msgid "" +":issue:`37834`: Prevent shutil.rmtree exception when built on non-Windows " +"system without fd system call support, like older versions of macOS." +msgstr "" + +#: ../../../build/NEWS:7207 +msgid "" +":issue:`10978`: Semaphores and BoundedSemaphores can now release more than " +"one waiting thread at a time." +msgstr "" + +#: ../../../build/NEWS:7210 +msgid "" +":issue:`37972`: Subscripts to the `unittest.mock.call` objects now receive " +"the same chaining mechanism as any other custom attributes, so that the " +"following usage no longer raises a `TypeError`:" +msgstr "" + +#: ../../../build/NEWS:7214 +msgid "call().foo().__getitem__('bar')" +msgstr "" + +#: ../../../build/NEWS:7216 +msgid "Patch by blhsing" +msgstr "" + +#: ../../../build/NEWS:7218 +msgid "" +":issue:`37965`: Fix C compiler warning caused by " +"distutils.ccompiler.CCompiler.has_function." +msgstr "" + +#: ../../../build/NEWS:7221 +msgid ":issue:`37964`: Add ``F_GETPATH`` command to :mod:`fcntl`." +msgstr "" + +#: ../../../build/NEWS:7223 +msgid "" +":issue:`37960`: ``repr()`` of buffered and text streams now silences only " +"expected exceptions when get the value of \"name\" and \"mode\" attributes." +msgstr "" + +#: ../../../build/NEWS:7226 +msgid "" +":issue:`37961`: Add a ``total_nframe`` field to the traces collected by the " +"tracemalloc module. This field indicates the original number of frames " +"before it was truncated." +msgstr "" + +#: ../../../build/NEWS:7230 +msgid "" +":issue:`37951`: Most features of the subprocess module now work again in " +"subinterpreters. Only *preexec_fn* is restricted in subinterpreters." +msgstr "" + +#: ../../../build/NEWS:7233 +msgid "" +":issue:`36205`: Fix the rusage implementation of time.process_time() to " +"correctly report the sum of the system and user CPU time." +msgstr "" + +#: ../../../build/NEWS:7236 +msgid "" +":issue:`37950`: Fix :func:`ast.dump` when call with incompletely initialized" +" node." +msgstr "" + +#: ../../../build/NEWS:7239 +msgid "" +":issue:`34679`: Restores instantiation of Windows IOCP event loops from the " +"non-main thread." +msgstr "" + +#: ../../../build/NEWS:7242 +msgid "" +":issue:`36917`: Add default implementation of the " +":meth:`ast.NodeVisitor.visit_Constant` method which emits a deprecation " +"warning and calls corresponding methody ``visit_Num()``, ``visit_Str()``, " +"etc." +msgstr "" + +#: ../../../build/NEWS:7247 +msgid "" +":issue:`37798`: Update test_statistics.py to verify that the statistics " +"module works well for both C and Python implementations. Patch by Dong-hee " +"Na" +msgstr "" + +#: ../../../build/NEWS:7250 +msgid "" +":issue:`26589`: Added a new status code to the http module: 451 " +"UNAVAILABLE_FOR_LEGAL_REASONS" +msgstr "" + +#: ../../../build/NEWS:7253 +msgid "" +":issue:`37915`: Fix a segmentation fault that appeared when comparing " +"instances of ``datetime.timezone`` and ``datetime.tzinfo`` objects. Patch by" +" Pablo Galindo." +msgstr "" + +#: ../../../build/NEWS:7257 +msgid "" +":issue:`32554`: Deprecate having random.seed() call hash on arbitrary types." +msgstr "" + +#: ../../../build/NEWS:7259 +msgid "" +":issue:`9938`: Add optional keyword argument ``exit_on_error`` for " +":class:`ArgumentParser`." +msgstr "" + +#: ../../../build/NEWS:7262 +msgid "" +":issue:`37851`: The :mod:`faulthandler` module no longer allocates its " +"alternative stack at Python startup. Now the stack is only allocated at the " +"first faulthandler usage." +msgstr "" + +#: ../../../build/NEWS:7266 +msgid "" +":issue:`32793`: Fix a duplicated debug message when " +":meth:`smtplib.SMTP.connect` is called." +msgstr "" + +#: ../../../build/NEWS:7269 +msgid "" +":issue:`37885`: venv: Don't generate unset variable warning on deactivate." +msgstr "" + +#: ../../../build/NEWS:7271 +msgid "" +":issue:`37868`: Fix dataclasses.is_dataclass when given an instance that " +"never raises AttributeError in __getattr__. That is, an object that returns" +" something for __dataclass_fields__ even if it's not a dataclass." +msgstr "" + +#: ../../../build/NEWS:7275 +msgid "" +":issue:`37811`: Fix ``socket`` module's ``socket.connect(address)`` function" +" being unable to establish connection in case of interrupted system call. " +"The problem was observed on all OSes which ``poll(2)`` system call can take " +"only non-negative integers and -1 as a timeout value." +msgstr "" + +#: ../../../build/NEWS:7280 +msgid "" +":issue:`37863`: Optimizations for Fraction.__hash__ suggested by Tim Peters." +msgstr "" + +#: ../../../build/NEWS:7282 +msgid "" +":issue:`21131`: Fix ``faulthandler.register(chain=True)`` stack. " +"faulthandler now allocates a dedicated stack of ``SIGSTKSZ*2`` bytes, " +"instead of just ``SIGSTKSZ`` bytes. Calling the previous signal handler in " +"faulthandler signal handler uses more than ``SIGSTKSZ`` bytes of stack " +"memory on some platforms." +msgstr "" + +#: ../../../build/NEWS:7288 +msgid "" +":issue:`37798`: Add C fastpath for statistics.NormalDist.inv_cdf() Patch by " +"Dong-hee Na" +msgstr "" + +#: ../../../build/NEWS:7291 +msgid "" +":issue:`37804`: Remove the deprecated method `threading.Thread.isAlive()`. " +"Patch by Dong-hee Na." +msgstr "" + +#: ../../../build/NEWS:7294 +msgid "" +":issue:`37819`: Add Fraction.as_integer_ratio() to match the corresponding " +"methods in bool, int, float, and decimal." +msgstr "" + +#: ../../../build/NEWS:7297 +msgid "" +":issue:`14465`: Add an xml.etree.ElementTree.indent() function for pretty-" +"printing XML trees. Contributed by Stefan Behnel." +msgstr "" + +#: ../../../build/NEWS:7300 +msgid "" +":issue:`37810`: Fix :mod:`difflib` ``?`` hint in diff output when dealing " +"with tabs. Patch by Anthony Sottile." +msgstr "" + +#: ../../../build/NEWS:7303 +msgid "" +":issue:`37772`: In ``zipfile.Path``, when adding implicit dirs, ensure that " +"ancestral directories are added and that duplicates are excluded." +msgstr "" + +#: ../../../build/NEWS:7306 +msgid "" +":issue:`18578`: Renamed and documented `test.bytecode_helper` as " +"`test.support.bytecode_helper`. Patch by Joannah Nanjekye." +msgstr "" + +#: ../../../build/NEWS:7309 +msgid ":issue:`37785`: Fix xgettext warnings in :mod:`argparse`." +msgstr "" + +#: ../../../build/NEWS:7311 +msgid "" +":issue:`34488`: :meth:`writelines` method of :class:`io.BytesIO` is now " +"slightly faster when many small lines are passed. Patch by Sergey Fedoseev." +msgstr "" + +#: ../../../build/NEWS:7315 +msgid "" +":issue:`37449`: `ensurepip` now uses `importlib.resources.read_binary()` to " +"read data instead of `pkgutil.get_data()`. Patch by Joannah Nanjekye." +msgstr "" + +#: ../../../build/NEWS:7318 +msgid "" +":issue:`28292`: Mark calendar.py helper functions as being private. The " +"follows PEP 8 guidance to maintain the style conventions in the module and " +"it addresses a known case of user confusion." +msgstr "" + +#: ../../../build/NEWS:7322 +msgid "" +":issue:`18049`: Add definition of THREAD_STACK_SIZE for AIX in " +"Python/thread_pthread.h The default thread stacksize caused crashes with the" +" default recursion limit Patch by M Felt" +msgstr "" + +#: ../../../build/NEWS:7326 +msgid "" +":issue:`37742`: The logging.getLogger() API now returns the root logger when" +" passed the name 'root', whereas previously it returned a non-root logger " +"named 'root'. This could affect cases where user code explicitly wants a " +"non-root logger named 'root', or instantiates a logger using " +"logging.getLogger(__name__) in some top-level module called 'root.py'." +msgstr "" + +#: ../../../build/NEWS:7332 +msgid "" +":issue:`37738`: Fix the implementation of curses ``addch(str, color_pair)``:" +" pass the color pair to ``setcchar()``, instead of always passing 0 as the " +"color pair." +msgstr "" + +#: ../../../build/NEWS:7336 +msgid "" +":issue:`37723`: Fix performance regression on regular expression parsing " +"with huge character sets. Patch by Yann Vaginay." +msgstr "" + +#: ../../../build/NEWS:7339 +msgid "" +":issue:`35943`: The function :c:func:`PyImport_GetModule` now ensures any " +"module it returns is fully initialized. Patch by Joannah Nanjekye." +msgstr "" + +#: ../../../build/NEWS:7342 +msgid "" +":issue:`32178`: Fix IndexError in :mod:`email` package when trying to parse " +"invalid address fields starting with ``:``." +msgstr "" + +#: ../../../build/NEWS:7345 +msgid "" +":issue:`37268`: The :mod:`parser` module is deprecated and will be removed " +"in future versions of Python." +msgstr "" + +#: ../../../build/NEWS:7348 +msgid ":issue:`11953`: Completing WSA* error codes in :mod:`socket`." +msgstr "" + +#: ../../../build/NEWS:7350 +msgid "" +":issue:`37685`: Fixed comparisons of :class:`datetime.timedelta` and " +":class:`datetime.timezone`." +msgstr "" + +#: ../../../build/NEWS:7353 +msgid "" +":issue:`37697`: Synchronize ``importlib.metadata`` with `importlib_metadata " +"0.19 `_, " +"improving handling of EGG-INFO files and fixing a crash when entry point " +"names contained colons." +msgstr "" + +#: ../../../build/NEWS:7359 +msgid "" +":issue:`37695`: Correct :func:`curses.unget_wch` error message. Patch by " +"Anthony Sottile." +msgstr "" + +#: ../../../build/NEWS:7362 +msgid "" +":issue:`37689`: Add :meth:`is_relative_to` in :class:`PurePath` to determine" +" whether or not one path is relative to another." +msgstr "" + +#: ../../../build/NEWS:7365 +msgid "" +":issue:`29553`: Fixed :meth:`argparse.ArgumentParser.format_usage` for " +"mutually exclusive groups. Patch by Andrew Nester." +msgstr "" + +#: ../../../build/NEWS:7368 +msgid "" +":issue:`37691`: Let math.dist() accept coordinates as sequences (or " +"iterables) rather than just tuples." +msgstr "" + +#: ../../../build/NEWS:7371 +msgid "" +":issue:`37685`: Fixed ``__eq__``, ``__lt__`` etc implementations in some " +"classes. They now return :data:`NotImplemented` for unsupported type of the " +"other operand. This allows the other operand to play role (for example the " +"equality comparison with :data:`~unittest.mock.ANY` will return ``True``)." +msgstr "" + +#: ../../../build/NEWS:7377 +msgid "" +":issue:`37354`: Make Activate.ps1 Powershell script static to allow for " +"signing it." +msgstr "" + +#: ../../../build/NEWS:7380 +msgid "" +":issue:`37664`: Update wheels bundled with ensurepip (pip 19.2.3 and " +"setuptools 41.2.0)" +msgstr "" + +#: ../../../build/NEWS:7383 +msgid "" +":issue:`37663`: Bring consistency to venv shell activation scripts by always" +" using __VENV_PROMPT__." +msgstr "" + +#: ../../../build/NEWS:7386 +msgid "" +":issue:`37642`: Allowed the pure Python implementation of " +":class:`datetime.timezone` to represent sub-minute offsets close to minimum " +"and maximum boundaries, specifically in the ranges (23:59, 24:00) and " +"(-23:59, 24:00). Patch by Ngalim Siregar" +msgstr "" + +#: ../../../build/NEWS:7391 +msgid "" +":issue:`36161`: In :mod:`posix`, use ``ttyname_r`` instead of ``ttyname`` " +"for thread safety." +msgstr "" + +#: ../../../build/NEWS:7394 +msgid "" +":issue:`36324`: Make internal attributes for statistics.NormalDist() " +"private." +msgstr "" + +#: ../../../build/NEWS:7396 +msgid "" +":issue:`37555`: Fix `NonCallableMock._call_matcher` returning tuple instead " +"of `_Call` object when `self._spec_signature` exists. Patch by Elizabeth " +"Uselton" +msgstr "" + +#: ../../../build/NEWS:7400 +msgid "" +":issue:`29446`: Make `from tkinter import *` import only the expected " +"objects." +msgstr "" + +#: ../../../build/NEWS:7402 +msgid "" +":issue:`16970`: Adding a value error when an invalid value in passed to " +"nargs Patch by Robert Leenders" +msgstr "" + +#: ../../../build/NEWS:7405 +msgid "" +":issue:`34443`: Exceptions from :mod:`enum` now use the ``__qualname`` of " +"the enum class in the exception message instead of the ``__name__``." +msgstr "" + +#: ../../../build/NEWS:7408 +msgid "" +":issue:`37491`: Fix ``IndexError`` when parsing email headers with " +"unexpectedly ending bare-quoted string value. Patch by Abhilash Raj." +msgstr "" + +#: ../../../build/NEWS:7411 +msgid "" +":issue:`37587`: Make json.loads faster for long strings. (Patch by Marco " +"Paolini)" +msgstr "" + +#: ../../../build/NEWS:7414 +msgid "" +":issue:`18378`: Recognize \"UTF-8\" as a valid value for LC_CTYPE in " +"locale._parse_localename." +msgstr "" + +#: ../../../build/NEWS:7417 +msgid "" +":issue:`37579`: Return :exc:`NotImplemented` in Python implementation of " +"``__eq__`` for :class:`~datetime.timedelta` and :class:`~datetime.time` when" +" the other object being compared is not of the same type to match C " +"implementation. Patch by Karthikeyan Singaravelan." +msgstr "" + +#: ../../../build/NEWS:7422 +msgid "" +":issue:`21478`: Record calls to parent when autospecced object is attached " +"to a mock using :func:`unittest.mock.attach_mock`. Patch by Karthikeyan " +"Singaravelan." +msgstr "" + +#: ../../../build/NEWS:7426 +msgid "" +":issue:`37531`: \"python3 -m test -jN --timeout=TIMEOUT\" now kills a worker" +" process if it runs longer than *TIMEOUT* seconds." +msgstr "" + +#: ../../../build/NEWS:7429 +msgid "" +":issue:`37482`: Fix serialization of display name in originator or " +"destination address fields with both encoded words and special chars." +msgstr "" + +#: ../../../build/NEWS:7432 +msgid "" +":issue:`36993`: Improve error reporting for corrupt zip files with bad zip64" +" extra data. Patch by Daniel Hillier." +msgstr "" + +#: ../../../build/NEWS:7435 +msgid "" +":issue:`37502`: pickle.loads() no longer raises TypeError when the buffers " +"argument is set to None" +msgstr "" + +#: ../../../build/NEWS:7438 +msgid "" +":issue:`37520`: Correct behavior for zipfile.Path.parent when the path " +"object identifies a subdirectory." +msgstr "" + +#: ../../../build/NEWS:7441 +msgid "" +":issue:`18374`: Fix the ``.col_offset`` attribute of nested " +":class:`ast.BinOp` instances which had a too large value in some situations." +msgstr "" + +#: ../../../build/NEWS:7444 +msgid "" +":issue:`37424`: Fixes a possible hang when using a timeout on " +"`subprocess.run()` while capturing output. If the child process spawned its" +" own children or otherwise connected its stdout or stderr handles with " +"another process, we could hang after the timeout was reached and our child " +"was killed when attempting to read final output from the pipes." +msgstr "" + +#: ../../../build/NEWS:7450 +msgid "" +":issue:`37421`: Fix :func:`multiprocessing.util.get_temp_dir` finalizer: " +"clear also the 'tempdir' configuration of the current process, so next call " +"to ``get_temp_dir()`` will create a new temporary directory, rather than " +"reusing the removed temporary directory." +msgstr "" + +#: ../../../build/NEWS:7455 +msgid "" +":issue:`37481`: The distutils ``bdist_wininst`` command is deprecated in " +"Python 3.8, use ``bdist_wheel`` (wheel packages) instead." +msgstr "" + +#: ../../../build/NEWS:7458 +msgid "" +":issue:`37479`: When `Enum.__str__` is overridden in a derived class, the " +"override will be used by `Enum.__format__` regardless of whether mixin " +"classes are present." +msgstr "" + +#: ../../../build/NEWS:7462 +msgid "" +":issue:`37440`: http.client now enables TLS 1.3 post-handshake " +"authentication for default context or if a cert_file is passed to " +"HTTPSConnection." +msgstr "" + +#: ../../../build/NEWS:7465 +msgid ":issue:`37437`: Update vendorized expat version to 2.2.7." +msgstr "" + +#: ../../../build/NEWS:7467 +msgid "" +":issue:`37428`: SSLContext.post_handshake_auth = True no longer sets " +"SSL_VERIFY_POST_HANDSHAKE verify flag for client connections. Although the " +"option is documented as ignored for clients, OpenSSL implicitly enables cert" +" chain validation when the flag is set." +msgstr "" + +#: ../../../build/NEWS:7472 +msgid "" +":issue:`37420`: :func:`os.sched_setaffinity` now correctly handles errors " +"that arise during iteration over its ``mask`` argument. Patch by Brandt " +"Bucher." +msgstr "" + +#: ../../../build/NEWS:7475 +msgid "" +":issue:`37412`: The :func:`os.getcwdb` function now uses the UTF-8 encoding " +"on Windows, rather than the ANSI code page: see :pep:`529` for the " +"rationale. The function is no longer deprecated on Windows." +msgstr "" + +#: ../../../build/NEWS:7479 +msgid "" +":issue:`37406`: The sqlite3 module now raises TypeError, rather than " +"ValueError, if operation argument type is not str: execute(), executemany() " +"and calling a connection." +msgstr "" + +#: ../../../build/NEWS:7483 +msgid "" +":issue:`29412`: Fix IndexError in parsing a header value ending " +"unexpectedly. Patch by Abhilash Raj." +msgstr "" + +#: ../../../build/NEWS:7486 +msgid "" +":issue:`36546`: The *dist* argument for statistics.quantiles() is now " +"positional only. The current name doesn't reflect that the argument can be " +"either a dataset or a distribution. Marking the parameter as positional " +"avoids confusion and makes it possible to change the name later." +msgstr "" + +#: ../../../build/NEWS:7491 +msgid "" +":issue:`37394`: Fix a bug that was causing the :mod:`queue` module to fail " +"if the accelerator module was not available. Patch by Pablo Galindo." +msgstr "" + +#: ../../../build/NEWS:7494 +msgid "" +":issue:`37376`: :mod:`pprint` now has support for " +":class:`types.SimpleNamespace`. Patch by Carl Bordum Hansen." +msgstr "" + +#: ../../../build/NEWS:7497 +msgid "" +":issue:`26967`: An :class:`~argparse.ArgumentParser` with " +"``allow_abbrev=False`` no longer disables grouping of short flags, such as " +"``-vv``, but only disables abbreviation of long flags as documented. Patch " +"by Zac Hatfield-Dodds." +msgstr "" + +#: ../../../build/NEWS:7502 +msgid "" +":issue:`37212`: :func:`unittest.mock.call` now preserves the order of " +"keyword arguments in repr output. Patch by Karthikeyan Singaravelan." +msgstr "" + +#: ../../../build/NEWS:7505 +msgid "" +":issue:`37372`: Fix error unpickling datetime.time objects from Python 2 " +"with seconds>=24. Patch by Justin Blanchard." +msgstr "" + +#: ../../../build/NEWS:7508 +msgid "" +":issue:`37345`: Add formal support for UDPLITE sockets. Support was present " +"before, but it is now easier to detect support with ``hasattr(socket, " +"'IPPROTO_UDPLITE')`` and there are constants defined for each of the values " +"needed: :py:obj:`socket.IPPROTO_UDPLITE`, :py:obj:`UDPLITE_SEND_CSCOV`, and " +":py:obj:`UDPLITE_RECV_CSCOV`. Patch by Gabe Appleton." +msgstr "" + +#: ../../../build/NEWS:7515 +msgid ":issue:`37358`: Optimized ``functools.partial`` by using vectorcall." +msgstr "" + +#: ../../../build/NEWS:7517 +msgid "" +":issue:`37347`: :meth:`sqlite3.Connection.create_aggregate`, " +":meth:`sqlite3.Connection.create_function`, " +":meth:`sqlite3.Connection.set_authorizer`, " +":meth:`sqlite3.Connection.set_progress_handler` " +":meth:`sqlite3.Connection.set_trace_callback` methods lead to segfaults if " +"some of these methods are called twice with an equal object but not the " +"same. Now callbacks are stored more carefully. Patch by Aleksandr Balezin." +msgstr "" + +#: ../../../build/NEWS:7525 +msgid "" +":issue:`37163`: The *obj* argument of :func:`dataclasses.replace` is " +"positional-only now." +msgstr "" + +#: ../../../build/NEWS:7528 +msgid "" +":issue:`37085`: Add the optional Linux SocketCAN Broadcast Manager " +"constants, used as flags to configure the BCM behaviour, in the socket " +"module. Patch by Karl Ding." +msgstr "" + +#: ../../../build/NEWS:7532 +msgid "" +":issue:`37328`: ``HTMLParser.unescape`` is removed. It was undocumented and" +" deprecated since Python 3.4." +msgstr "" + +#: ../../../build/NEWS:7535 +msgid "" +":issue:`37305`: Add .webmanifest -> application/manifest+json to list of " +"recognized file types and content type headers" +msgstr "" + +#: ../../../build/NEWS:7538 +msgid "" +":issue:`37320`: ``aifc.openfp()`` alias to ``aifc.open()``, " +"``sunau.openfp()`` alias to ``sunau.open()``, and ``wave.openfp()`` alias to" +" ``wave.open()`` have been removed. They were deprecated since Python 3.7." +msgstr "" + +#: ../../../build/NEWS:7542 +msgid "" +":issue:`37315`: Deprecated accepting floats with integral value (like " +"``5.0``) in :func:`math.factorial`." +msgstr "" + +#: ../../../build/NEWS:7545 +msgid "" +":issue:`37312`: ``_dummy_thread`` and ``dummy_threading`` modules have been " +"removed. These modules were deprecated since Python 3.7 which requires " +"threading support." +msgstr "" + +#: ../../../build/NEWS:7549 +msgid "" +":issue:`33972`: Email with single part but content-type set to " +"``multipart/*`` doesn't raise AttributeError anymore." +msgstr "" + +#: ../../../build/NEWS:7552 +msgid "" +":issue:`37280`: Use threadpool for reading from file for sendfile fallback " +"mode." +msgstr "" + +#: ../../../build/NEWS:7555 +msgid "" +":issue:`37279`: Fix asyncio sendfile support when sendfile sends extra data " +"in fallback mode." +msgstr "" + +#: ../../../build/NEWS:7558 +msgid "" +":issue:`19865`: :func:`ctypes.create_unicode_buffer()` now also supports " +"non-BMP characters on platforms with 16-bit :c:type:`wchar_t` (for example, " +"Windows and AIX)." +msgstr "" + +#: ../../../build/NEWS:7562 +msgid "" +":issue:`37266`: In a subinterpreter, spawning a daemon thread now raises an " +"exception. Daemon threads were never supported in subinterpreters. " +"Previously, the subinterpreter finalization crashed with a Python fatal " +"error if a daemon thread was still running." +msgstr "" + +#: ../../../build/NEWS:7567 +msgid "" +":issue:`37210`: Allow pure Python implementation of :mod:`pickle` to work " +"even when the C :mod:`_pickle` module is unavailable." +msgstr "" + +#: ../../../build/NEWS:7570 +msgid "" +":issue:`21872`: Fix :mod:`lzma`: module decompresses data incompletely. When" +" decompressing a FORMAT_ALONE format file, and it doesn't have the end " +"marker, sometimes the last one to dozens bytes can't be output. Patch by Ma " +"Lin." +msgstr "" + +#: ../../../build/NEWS:7575 +msgid "" +":issue:`35922`: Fix :meth:`RobotFileParser.crawl_delay` and " +":meth:`RobotFileParser.request_rate` to return ``None`` rather than raise " +":exc:`AttributeError` when no relevant rule is defined in the robots.txt " +"file. Patch by Rémi Lapeyre." +msgstr "" + +#: ../../../build/NEWS:7580 +msgid "" +":issue:`35766`: Change the format of feature_version to be a (major, minor) " +"tuple." +msgstr "" + +#: ../../../build/NEWS:7583 +msgid "" +":issue:`36607`: Eliminate :exc:`RuntimeError` raised by " +":func:`asyncio.all_tasks()` if internal tasks weak set is changed by another" +" thread during iteration." +msgstr "" + +#: ../../../build/NEWS:7587 +msgid "" +":issue:`18748`: :class:`_pyio.IOBase` destructor now does nothing if getting" +" the ``closed`` attribute fails to better mimic :class:`_io.IOBase` " +"finalizer." +msgstr "" + +#: ../../../build/NEWS:7591 +msgid "" +":issue:`36402`: Fix a race condition at Python shutdown when waiting for " +"threads. Wait until the Python thread state of all non-daemon threads get " +"deleted (join all non-daemon threads), rather than just wait until non-" +"daemon Python threads complete." +msgstr "" + +#: ../../../build/NEWS:7596 +msgid "" +":issue:`37206`: Default values which cannot be represented as Python objects" +" no longer improperly represented as ``None`` in function signatures." +msgstr "" + +#: ../../../build/NEWS:7599 +msgid "" +":issue:`37111`: Added ``encoding`` and ``errors`` keyword parameters to " +"``logging.basicConfig``." +msgstr "" + +#: ../../../build/NEWS:7602 +msgid "" +":issue:`12144`: Ensure cookies with ``expires`` attribute are handled in " +":meth:`CookieJar.make_cookies`." +msgstr "" + +#: ../../../build/NEWS:7605 +msgid "" +":issue:`34886`: Fix an unintended ValueError from :func:`subprocess.run` " +"when checking for conflicting `input` and `stdin` or `capture_output` and " +"`stdout` or `stderr` args when they were explicitly provided but with `None`" +" values within a passed in `**kwargs` dict rather than as passed directly by" +" name. Patch contributed by Rémi Lapeyre." +msgstr "" + +#: ../../../build/NEWS:7611 +msgid "" +":issue:`37173`: The exception message for ``inspect.getfile()`` now " +"correctly reports the passed class rather than the builtins module." +msgstr "" + +#: ../../../build/NEWS:7614 +msgid "" +":issue:`37178`: Give math.perm() a one argument form that means the same as " +"math.factorial()." +msgstr "" + +#: ../../../build/NEWS:7617 +msgid "" +":issue:`37178`: For math.perm(n, k), let k default to n, giving the same " +"result as factorial." +msgstr "" + +#: ../../../build/NEWS:7620 +msgid "" +":issue:`37165`: Converted _collections._count_elements to use the Argument " +"Clinic." +msgstr "" + +#: ../../../build/NEWS:7623 +msgid "" +":issue:`34767`: Do not always create a :class:`collections.deque` in " +":class:`asyncio.Lock`." +msgstr "" + +#: ../../../build/NEWS:7626 +msgid "" +":issue:`37158`: Speed-up statistics.fmean() by switching from a function to " +"a generator." +msgstr "" + +#: ../../../build/NEWS:7629 +msgid ":issue:`34282`: Remove ``Enum._convert`` method, deprecated in 3.8." +msgstr "" + +#: ../../../build/NEWS:7631 +msgid "" +":issue:`37150`: `argparse._ActionsContainer.add_argument` now throws error, " +"if someone accidentally pass FileType class object instead of instance of " +"FileType as `type` argument" +msgstr "" + +#: ../../../build/NEWS:7635 +msgid "" +":issue:`28724`: The socket module now has the :func:`socket.send_fds` and " +":func:`socket.recv.fds` methods. Contributed by Joannah Nanjekye, Shinya " +"Okano and Victor Stinner." +msgstr "" + +#: ../../../build/NEWS:7639 +msgid "" +":issue:`35621`: Support running asyncio subprocesses when execution event " +"loop in a thread on UNIX." +msgstr "" + +#: ../../../build/NEWS:7642 +msgid "" +":issue:`36520`: Lengthy email headers with UTF-8 characters are now properly" +" encoded when they are folded. Patch by Jeffrey Kintscher." +msgstr "" + +#: ../../../build/NEWS:7645 +msgid "" +":issue:`30835`: Fixed a bug in email parsing where a message with invalid " +"bytes in content-transfer-encoding of a multipart message can cause an " +"AttributeError. Patch by Andrew Donnellan." +msgstr "" + +#: ../../../build/NEWS:7649 +msgid "" +":issue:`31163`: pathlib.Path instance's rename and replace methods now " +"return the new Path instance." +msgstr "" + +#: ../../../build/NEWS:7652 +msgid "" +":issue:`25068`: :class:`urllib.request.ProxyHandler` now lowercases the keys" +" of the passed dictionary." +msgstr "" + +#: ../../../build/NEWS:7655 +msgid "" +":issue:`26185`: Fix :func:`repr` on empty :class:`ZipInfo` object. Patch by " +"Mickaël Schoentgen." +msgstr "" + +#: ../../../build/NEWS:7658 +msgid "" +":issue:`21315`: Email headers containing RFC2047 encoded words are parsed " +"despite the missing whitespace, and a defect registered. Also missing " +"trailing whitespace after encoded words is now registered as a defect." +msgstr "" + +#: ../../../build/NEWS:7662 +msgid "" +":issue:`31904`: Port test_datetime to VxWorks: skip zoneinfo tests on " +"VxWorks" +msgstr "" + +#: ../../../build/NEWS:7664 +msgid "" +":issue:`35805`: Add parser for Message-ID header and add it to default " +"HeaderRegistry. This should prevent folding of Message-ID using RFC 2048 " +"encoded words." +msgstr "" + +#: ../../../build/NEWS:7668 +msgid "" +":issue:`36871`: Ensure method signature is used instead of constructor " +"signature of a class while asserting mock object against method calls. Patch" +" by Karthikeyan Singaravelan." +msgstr "" + +#: ../../../build/NEWS:7672 +msgid "" +":issue:`35070`: posix.getgrouplist() now works correctly when the user " +"belongs to NGROUPS_MAX supplemental groups. Patch by Jeffrey Kintscher." +msgstr "" + +#: ../../../build/NEWS:7675 +msgid "" +":issue:`31783`: Fix race condition in ThreadPoolExecutor when worker threads" +" are created during interpreter shutdown." +msgstr "" + +#: ../../../build/NEWS:7678 +msgid "" +":issue:`36582`: Fix ``UserString.encode()`` to correctly return ``bytes`` " +"rather than a ``UserString`` instance." +msgstr "" + +#: ../../../build/NEWS:7681 +msgid "" +":issue:`32424`: Deprecate xml.etree.ElementTree.Element.copy() in favor of " +"copy.copy()." +msgstr "" + +#: ../../../build/NEWS:7684 +msgid "Patch by Gordon P. Hemsley" +msgstr "" + +#: ../../../build/NEWS:7686 +msgid "" +":issue:`36564`: Fix infinite loop in email header folding logic that would " +"be triggered when an email policy's max_line_length is not long enough to " +"include the required markup and any values in the message. Patch by Paul " +"Ganssle" +msgstr "" + +#: ../../../build/NEWS:7691 +msgid "" +":issue:`36543`: Removed methods Element.getchildren(), Element.getiterator()" +" and ElementTree.getiterator() and the xml.etree.cElementTree module." +msgstr "" + +#: ../../../build/NEWS:7694 +msgid ":issue:`36409`: Remove the old plistlib API deprecated in Python 3.4" +msgstr "" + +#: ../../../build/NEWS:7696 +msgid "" +":issue:`36302`: distutils sorts source file lists so that Extension .so " +"files build more reproducibly by default" +msgstr "" + +#: ../../../build/NEWS:7699 +msgid "" +":issue:`36250`: Ignore ``ValueError`` from ``signal`` with ``interaction`` " +"in non-main thread." +msgstr "" + +#: ../../../build/NEWS:7702 +msgid "" +":issue:`36046`: Added ``user``, ``group`` and ``extra_groups`` parameters to" +" the subprocess.Popen constructor. Patch by Patrick McLean." +msgstr "" + +#: ../../../build/NEWS:7705 +msgid "" +":issue:`32627`: Fix compile error when ``_uuid`` headers conflicting " +"included." +msgstr "" + +#: ../../../build/NEWS:7707 +msgid "" +":issue:`35800`: Deprecate ``smtpd.MailmanProxy`` ready for future removal." +msgstr "" + +#: ../../../build/NEWS:7709 +msgid "" +":issue:`35168`: :attr:`shlex.shlex.punctuation_chars` is now a read-only " +"property." +msgstr "" + +#: ../../../build/NEWS:7712 +msgid "" +":issue:`8538`: Add support for boolean actions like ``--foo`` and ``--no-" +"foo`` to argparse. Patch contributed by Rémi Lapeyre." +msgstr "" + +#: ../../../build/NEWS:7715 +msgid "" +":issue:`20504`: Fixes a bug in :mod:`cgi` module when a multipart/form-data " +"request has no `Content-Length` header." +msgstr "" + +#: ../../../build/NEWS:7718 +msgid "" +":issue:`25988`: The abstract base classes in :mod:`collections.abc` no " +"longer are exposed in the regular :mod:`collections` module." +msgstr "" + +#: ../../../build/NEWS:7721 +msgid "" +":issue:`11122`: Distutils won't check for rpmbuild in specified paths only." +msgstr "" + +#: ../../../build/NEWS:7723 +msgid "" +":issue:`34775`: Division handling of PurePath now returns NotImplemented " +"instead of raising a TypeError when passed something other than an instance " +"of str or PurePath. Patch by Roger Aiudi." +msgstr "" + +#: ../../../build/NEWS:7727 +msgid "" +":issue:`34749`: :func:`binascii.a2b_base64` is now up to 2 times faster. " +"Patch by Sergey Fedoseev." +msgstr "" + +#: ../../../build/NEWS:7730 +msgid "" +":issue:`34519`: Add additional aliases for HP Roman 8. Patch by Michael " +"Osipov." +msgstr "" + +#: ../../../build/NEWS:7732 +msgid "" +":issue:`28009`: Fix uuid.getnode() on platforms with '.' as MAC Addr " +"delimiter as well fix for MAC Addr format that omits a leading 0 in MAC Addr" +" values. Currently, AIX is the only know platform with these settings. Patch" +" by Michael Felt." +msgstr "" + +#: ../../../build/NEWS:7737 +msgid "" +":issue:`30618`: Add :meth:`~pathlib.Path.readlink`. Patch by Girts " +"Folkmanis." +msgstr "" + +#: ../../../build/NEWS:7739 +msgid "" +":issue:`32498`: Made :func:`urllib.parse.unquote()` accept bytes in addition" +" to strings. Patch by Stein Karlsen." +msgstr "" + +#: ../../../build/NEWS:7742 +msgid "" +":issue:`33348`: lib2to3 now recognizes expressions after ``*`` and `**` like" +" in ``f(*[] or [])``." +msgstr "" + +#: ../../../build/NEWS:7745 +msgid "" +":issue:`32689`: Update :func:`shutil.move` function to allow for Path " +"objects to be used as source argument. Patch by Emily Morehouse and Maxwell " +"\"5.13b\" McKinnon." +msgstr "" + +#: ../../../build/NEWS:7749 +msgid "" +":issue:`32820`: Added __format__ to IPv4 and IPv6 classes. Always outputs a" +" fully zero- padded string. Supports b/x/n modifiers (bin/hex/native " +"format). Native format for IPv4 is bin, native format for IPv6 is hex. Also" +" supports '#' and '_' modifiers." +msgstr "" + +#: ../../../build/NEWS:7754 +msgid "" +":issue:`27657`: Fix urllib.parse.urlparse() with numeric paths. A string " +"like \"path:80\" is no longer parsed as a path but as a scheme (\"path\") " +"and a path (\"80\")." +msgstr "" + +#: ../../../build/NEWS:7758 +msgid "" +":issue:`4963`: Fixed non-deterministic behavior related to mimetypes " +"extension mapping and module reinitialization." +msgstr "" + +#: ../../../build/NEWS:7764 +msgid "" +":issue:`21767`: Explicitly mention abc support in functools.singledispatch" +msgstr "" + +#: ../../../build/NEWS:7766 +msgid "" +":issue:`38816`: Provides more details about the interaction between " +":c:func:`fork` and CPython's runtime, focusing just on the C-API. This " +"includes cautions about where :c:func:`fork` should and shouldn't be called." +msgstr "" + +#: ../../../build/NEWS:7771 +msgid "" +":issue:`38351`: Modernize :mod:`email` examples from %-formatting to " +"f-strings." +msgstr "" + +#: ../../../build/NEWS:7773 +msgid "" +":issue:`38778`: Document the fact that :exc:`RuntimeError` is raised if " +":meth:`os.fork` is called in a subinterpreter." +msgstr "" + +#: ../../../build/NEWS:7776 +msgid "" +":issue:`38592`: Add Brazilian Portuguese to the language switcher at Python " +"Documentation website." +msgstr "" + +#: ../../../build/NEWS:7779 +msgid "" +":issue:`38294`: Add list of no-longer-escaped chars to re.escape " +"documentation" +msgstr "" + +#: ../../../build/NEWS:7781 +msgid ":issue:`38053`: Modernized the plistlib documentation" +msgstr "" + +#: ../../../build/NEWS:7783 +msgid "" +":issue:`26868`: Fix example usage of :c:func:`PyModule_AddObject` to " +"properly handle errors." +msgstr "" + +#: ../../../build/NEWS:7786 +msgid ":issue:`36797`: Fix a dead link in the distutils API Reference." +msgstr "" + +#: ../../../build/NEWS:7788 +msgid ":issue:`37977`: Warn more strongly and clearly about pickle insecurity" +msgstr "" + +#: ../../../build/NEWS:7790 +msgid "" +":issue:`37979`: Added a link to dateutil.parser.isoparse in the " +"datetime.fromisoformat documentation. Patch by Paul Ganssle" +msgstr "" + +#: ../../../build/NEWS:7793 +msgid "" +":issue:`12707`: Deprecate info(), geturl(), getcode() methods in favor of " +"the headers, url, and status properties, respectively, for HTTPResponse and " +"addinfourl. Also deprecate the code attribute of addinfourl in favor of the " +"status attribute. Patch by Ashwin Ramaswami" +msgstr "" + +#: ../../../build/NEWS:7798 +msgid "" +":issue:`37937`: Mention ``frame.f_trace`` in :func:`sys.settrace` docs." +msgstr "" + +#: ../../../build/NEWS:7800 +msgid ":issue:`37878`: Make :c:func:`PyThreadState_DeleteCurrent` Internal." +msgstr "" + +#: ../../../build/NEWS:7802 +msgid ":issue:`37759`: Beginning edits to Whatsnew 3.8" +msgstr "" + +#: ../../../build/NEWS:7804 +msgid "" +":issue:`37726`: Stop recommending getopt in the tutorial for command line " +"argument parsing and promote argparse." +msgstr "" + +#: ../../../build/NEWS:7807 +msgid "" +":issue:`32910`: Remove implementation-specific behaviour of how venv's " +"Deactivate works." +msgstr "" + +#: ../../../build/NEWS:7810 +msgid "" +":issue:`37256`: Fix wording of arguments for :class:`Request` in " +":mod:`urllib.request`" +msgstr "" + +#: ../../../build/NEWS:7813 +msgid "" +":issue:`37284`: Add a brief note to indicate that any new " +"``sys.implementation`` required attributes must go through the PEP process." +msgstr "" + +#: ../../../build/NEWS:7817 +msgid "" +":issue:`30088`: Documented that :class:`mailbox.Maildir` constructor doesn't" +" attempt to verify the maildir folder layout correctness. Patch by " +"Sviatoslav Sydorenko." +msgstr "" + +#: ../../../build/NEWS:7821 +msgid "" +":issue:`37521`: Fix `importlib` examples to insert any newly created modules" +" via importlib.util.module_from_spec() immediately into sys.modules instead " +"of after calling loader.exec_module()." +msgstr "" + +#: ../../../build/NEWS:7825 +msgid "Thanks to Benjamin Mintz for finding the bug." +msgstr "" + +#: ../../../build/NEWS:7827 +msgid ":issue:`37456`: Slash ('/') is now part of syntax." +msgstr "" + +#: ../../../build/NEWS:7829 +msgid ":issue:`37487`: Fix PyList_GetItem index description to include 0." +msgstr "" + +#: ../../../build/NEWS:7831 +msgid "" +":issue:`37149`: Replace the dead link to the Tkinter 8.5 reference by John " +"Shipman, New Mexico Tech, with a link to the archive.org copy." +msgstr "" + +#: ../../../build/NEWS:7834 +msgid "" +":issue:`37478`: Added possible exceptions to the description of os.chdir()." +msgstr "" + +#: ../../../build/NEWS:7836 +msgid "" +":issue:`34903`: Documented that in :meth:`datetime.datetime.strptime()`, the" +" leading zero in some two-digit formats is optional. Patch by Mike Gleen." +msgstr "" + +#: ../../../build/NEWS:7839 +msgid "" +":issue:`36260`: Add decompression pitfalls to zipfile module documentation." +msgstr "" + +#: ../../../build/NEWS:7841 +msgid "" +":issue:`37004`: In the documentation for difflib, a note was added " +"explicitly warning that the results of SequenceMatcher's ratio method may " +"depend on the order of the input strings." +msgstr "" + +#: ../../../build/NEWS:7845 +msgid "" +":issue:`36960`: Restructured the :mod:`datetime` docs in the interest of " +"making them more user-friendly and improving readability. Patch by Brad " +"Solomon." +msgstr "" + +#: ../../../build/NEWS:7848 +msgid "" +":issue:`36487`: Make C-API docs clear about what the \"main\" interpreter " +"is." +msgstr "" + +#: ../../../build/NEWS:7850 +msgid "" +":issue:`23460`: The documentation for decimal string formatting using the " +"`:g` specifier has been updated to reflect the correct exponential notation " +"cutoff point. Original patch contributed by Tuomas Suutari." +msgstr "" + +#: ../../../build/NEWS:7854 +msgid "" +":issue:`35803`: Document and test that ``tempfile`` functions may accept a " +":term:`path-like object` for the ``dir`` argument. Patch by Anthony " +"Sottile." +msgstr "" + +#: ../../../build/NEWS:7858 +msgid "" +":issue:`33944`: Added a note about the intended use of code in .pth files." +msgstr "" + +#: ../../../build/NEWS:7860 +msgid "" +":issue:`34293`: Fix the Doc/Makefile regarding PAPER environment variable " +"and PDF builds" +msgstr "" + +#: ../../../build/NEWS:7863 +msgid ":issue:`25237`: Add documentation for tkinter modules" +msgstr "" + +#: ../../../build/NEWS:7868 +msgid "" +":issue:`38614`: Fix test_communicate() of test_asyncio.test_subprocess: use " +"``support.LONG_TIMEOUT`` (5 minutes), instead of just 1 minute." +msgstr "" + +#: ../../../build/NEWS:7871 +msgid "" +":issue:`38614`: Add timeout constants to :mod:`test.support`: " +":data:`~test.support.LOOPBACK_TIMEOUT`, " +":data:`~test.support.INTERNET_TIMEOUT`, :data:`~test.support.SHORT_TIMEOUT` " +"and :data:`~test.support.LONG_TIMEOUT`." +msgstr "" + +#: ../../../build/NEWS:7877 +msgid "" +":issue:`38502`: test.regrtest now uses process groups in the multiprocessing" +" mode (-jN command line option) if process groups are available: if " +":func:`os.setsid` and :func:`os.killpg` functions are available." +msgstr "" + +#: ../../../build/NEWS:7881 +msgid "" +":issue:`35998`: Fix a race condition in " +"test_asyncio.test_start_tls_server_1(). Previously, there was a race " +"condition between the test main() function which replaces the protocol and " +"the test ServerProto protocol which sends ANSWER once it gets HELLO. Now, " +"only the test main() function is responsible to send data, ServerProto no " +"longer sends data." +msgstr "" + +#: ../../../build/NEWS:7887 +msgid "" +":issue:`38470`: Fix ``test_compileall.test_compile_dir_maxlevels()`` on " +"Windows without long path support: only create 3 subdirectories instead of " +"between 20 and 100 subdirectories." +msgstr "" + +#: ../../../build/NEWS:7891 +msgid "" +":issue:`37531`: On timeout, regrtest no longer attempts to call " +"``popen.communicate()`` again: it can hang until all child processes using " +"stdout and stderr pipes completes. Kill the worker process and ignores its " +"output. Change also the faulthandler timeout of the main process from 1 " +"minute to 5 minutes, for Python slowest buildbots." +msgstr "" + +#: ../../../build/NEWS:7897 +msgid ":issue:`38239`: Fix test_gdb for Link Time Optimization (LTO) builds." +msgstr "" + +#: ../../../build/NEWS:7899 +msgid "" +":issue:`38275`: test_ssl now handles disabled TLS/SSL versions better. " +"OpenSSL's crypto policy and run-time settings are recognized and tests for " +"disabled versions are skipped. Tests also accept more TLS minimum_versions " +"for platforms that override OpenSSL's default with strict settings." +msgstr "" + +#: ../../../build/NEWS:7904 +msgid "" +":issue:`38271`: The private keys for test_ssl were encrypted with 3DES in " +"traditional PKCS#5 format. 3DES and the digest algorithm of PKCS#5 are " +"blocked by some strict crypto policies. Use PKCS#8 format with AES256 " +"encryption instead." +msgstr "" + +#: ../../../build/NEWS:7909 +msgid "" +":issue:`38270`: test.support now has a helper function to check for " +"availability of a hash digest function. Several tests are refactored avoid " +"MD5 and use SHA256 instead. Other tests are marked to use MD5 and skipped " +"when MD5 is disabled." +msgstr "" + +#: ../../../build/NEWS:7914 +msgid "" +":issue:`37123`: Multiprocessing test test_mymanager() now also expects " +"-SIGTERM, not only exitcode 0. BaseManager._finalize_manager() sends SIGTERM" +" to the manager process if it takes longer than 1 second to stop, which " +"happens on slow buildbots." +msgstr "" + +#: ../../../build/NEWS:7919 +msgid "" +":issue:`38212`: Multiprocessing tests: increase " +"test_queue_feeder_donot_stop_onexc() timeout from 1 to 60 seconds." +msgstr "" + +#: ../../../build/NEWS:7922 +msgid ":issue:`38117`: Test with OpenSSL 1.1.1d" +msgstr "" + +#: ../../../build/NEWS:7924 +msgid "" +":issue:`38018`: Increase code coverage for multiprocessing.shared_memory." +msgstr "" + +#: ../../../build/NEWS:7926 +msgid "" +":issue:`37805`: Add tests for json.dump(..., skipkeys=True). Patch by Dong-" +"hee Na." +msgstr "" + +#: ../../../build/NEWS:7929 +msgid "" +":issue:`37531`: Enhance regrtest multiprocess timeout: write a message when " +"killing a worker process, catch popen.kill() and popen.wait() exceptions, " +"put a timeout on the second call to popen.communicate()." +msgstr "" + +#: ../../../build/NEWS:7933 +msgid ":issue:`37876`: Add tests for ROT-13 codec." +msgstr "" + +#: ../../../build/NEWS:7935 +msgid "" +":issue:`36833`: Added tests for PyDateTime_xxx_GET_xxx() macros of the C API" +" of the :mod:`datetime` module. Patch by Joannah Nanjekye." +msgstr "" + +#: ../../../build/NEWS:7938 +msgid "" +":issue:`37558`: Fix test_shared_memory_cleaned_after_process_termination " +"name handling" +msgstr "" + +#: ../../../build/NEWS:7941 +msgid "" +":issue:`37526`: Add :func:`test.support.catch_threading_exception`: context " +"manager catching :class:`threading.Thread` exception using " +":func:`threading.excepthook`." +msgstr "" + +#: ../../../build/NEWS:7945 +msgid "" +":issue:`37421`: test_concurrent_futures now explicitly stops the ForkServer " +"instance if it's running." +msgstr "" + +#: ../../../build/NEWS:7948 +msgid "" +":issue:`37421`: multiprocessing tests now stop the ForkServer instance if " +"it's running: close the \"alive\" file descriptor to ask the server to stop " +"and then remove its UNIX address." +msgstr "" + +#: ../../../build/NEWS:7952 +msgid "" +":issue:`37421`: test_distutils.test_build_ext() is now able to remove the " +"temporary directory on Windows: don't import the newly built C extension " +"(\"xx\") in the current process, but test it in a separated process." +msgstr "" + +#: ../../../build/NEWS:7956 +msgid "" +":issue:`37421`: test_concurrent_futures now cleans up multiprocessing to " +"remove immediately temporary directories created by " +"multiprocessing.util.get_temp_dir()." +msgstr "" + +#: ../../../build/NEWS:7960 +msgid "" +":issue:`37421`: test_winconsoleio doesn't leak a temporary file anymore: use" +" tempfile.TemporaryFile() to remove it when the test completes." +msgstr "" + +#: ../../../build/NEWS:7963 +msgid "" +":issue:`37421`: multiprocessing tests now explicitly call " +"``_run_finalizers()`` to immediately remove temporary directories created by" +" tests." +msgstr "" + +#: ../../../build/NEWS:7966 +msgid "" +":issue:`37421`: urllib.request tests now call " +":func:`~urllib.request.urlcleanup` to remove temporary files created by " +"``urlretrieve()`` tests and to clear the ``_opener`` global variable set by " +"``urlopen()`` and functions calling indirectly ``urlopen()``." +msgstr "" + +#: ../../../build/NEWS:7971 +msgid ":issue:`37472`: Remove ``Lib/test/outstanding_bugs.py``." +msgstr "" + +#: ../../../build/NEWS:7973 +msgid "" +":issue:`37199`: Fix test failures when IPv6 is unavailable or disabled." +msgstr "" + +#: ../../../build/NEWS:7975 +msgid "" +":issue:`19696`: Replace deprecated method \"random.choose\" with " +"\"random.choice\" in \"test_pkg_import.py\"." +msgstr "" + +#: ../../../build/NEWS:7978 +msgid "" +":issue:`37335`: Remove no longer necessary code from c locale coercion tests" +msgstr "" + +#: ../../../build/NEWS:7980 +msgid ":issue:`37421`: Fix test_shutil to no longer leak temporary files." +msgstr "" + +#: ../../../build/NEWS:7982 +msgid "" +":issue:`37411`: Fix test_wsgiref.testEnviron() to no longer depend on the " +"environment variables (don't fail if \"X\" variable is set)." +msgstr "" + +#: ../../../build/NEWS:7985 +msgid "" +":issue:`37400`: Fix test_os.test_chown(): use os.getgroups() rather than " +"grp.getgrall() to get groups. Rename also the test to test_chown_gid()." +msgstr "" + +#: ../../../build/NEWS:7988 +msgid "" +":issue:`37359`: Add --cleanup option to python3 -m test to remove " +"``test_python_*`` directories of previous failed jobs. Add \"make " +"cleantest\" to run ``python3 -m test --cleanup``." +msgstr "" + +#: ../../../build/NEWS:7992 +msgid "" +":issue:`37362`: test_gdb no longer fails if it gets an \"unexpected\" " +"message on stderr: it now ignores stderr. The purpose of test_gdb is to test" +" that python-gdb.py commands work as expected, not to test gdb." +msgstr "" + +#: ../../../build/NEWS:7996 +msgid "" +":issue:`35998`: Avoid TimeoutError in test_asyncio: " +"test_start_tls_server_1()" +msgstr "" + +#: ../../../build/NEWS:7998 +msgid "" +":issue:`37278`: Fix test_asyncio ProactorLoopCtrlC: join the thread to " +"prevent leaking a running thread and leaking a reference." +msgstr "" + +#: ../../../build/NEWS:8001 +msgid "" +":issue:`37261`: Fix :func:`test.support.catch_unraisable_exception`: its " +"__exit__() method now ignores unraisable exception raised when clearing its " +"``unraisable`` attribute." +msgstr "" + +#: ../../../build/NEWS:8005 +msgid "" +":issue:`37069`: regrtest now uses :func:`sys.unraisablehook` to mark a test " +"as \"environment altered\" (ENV_CHANGED) if it emits an \"unraisable " +"exception\". Moreover, regrtest logs a warning in this case." +msgstr "" + +#: ../../../build/NEWS:8009 +msgid "" +"Use ``python3 -m test --fail-env-changed`` to catch unraisable exceptions in" +" tests." +msgstr "" + +#: ../../../build/NEWS:8012 +msgid "" +":issue:`37252`: Fix assertions in ``test_close`` and " +"``test_events_mask_overflow`` devpoll tests." +msgstr "" + +#: ../../../build/NEWS:8015 +msgid ":issue:`37169`: Rewrite ``_PyObject_IsFreed()`` unit tests." +msgstr "" + +#: ../../../build/NEWS:8017 +msgid "" +":issue:`37153`: ``test_venv.test_multiprocessing()`` now explicitly calls " +"``pool.terminate()`` to wait until the pool completes." +msgstr "" + +#: ../../../build/NEWS:8020 +msgid "" +":issue:`34001`: Make test_ssl pass with LibreSSL. LibreSSL handles minimum " +"and maximum TLS version differently than OpenSSL." +msgstr "" + +#: ../../../build/NEWS:8023 +msgid "" +":issue:`36919`: Make ``test_source_encoding.test_issue2301`` implementation " +"independent. The test will work now for both CPython and IronPython." +msgstr "" + +#: ../../../build/NEWS:8026 +msgid "" +":issue:`30202`: Update ``test.test_importlib.test_abc`` to test " +"``find_spec()``." +msgstr "" + +#: ../../../build/NEWS:8029 +msgid "" +":issue:`28009`: Modify the test_uuid logic to test when a program is " +"available AND can be used to obtain a MACADDR as basis for an UUID. Patch by" +" M. Felt" +msgstr "" + +#: ../../../build/NEWS:8032 +msgid "" +":issue:`34596`: Fallback to a default reason when :func:`unittest.skip` is " +"uncalled. Patch by Naitree Zhu." +msgstr "" + +#: ../../../build/NEWS:8038 +msgid "" +":issue:`38809`: On Windows, build scripts will now recognize and use " +"python.exe from an active virtual env." +msgstr "" + +#: ../../../build/NEWS:8041 +msgid "" +":issue:`38684`: Fix _hashlib build when Blake2 is disabled, but OpenSSL " +"supports it." +msgstr "" + +#: ../../../build/NEWS:8044 +msgid "" +":issue:`38468`: Misc/python-config.in now uses `getvar()` for all still " +"existing `sysconfig.get_config_var()` calls. Patch by Joannah Nanjekye." +msgstr "" + +#: ../../../build/NEWS:8047 +msgid "" +":issue:`37415`: Fix stdatomic.h header check for ICC compiler: the ICC " +"implementation lacks atomic_uintptr_t type which is needed by Python." +msgstr "" + +#: ../../../build/NEWS:8050 +msgid "" +":issue:`38301`: In Solaris family, we must be sure to use ``-D_REENTRANT``. " +"Patch by Jesús Cea Avión." +msgstr "" + +#: ../../../build/NEWS:8053 +msgid "" +":issue:`36002`: Locate ``llvm-profdata`` and ``llvm-ar`` binaries using " +"``AC_PATH_TOOL`` rather than ``AC_PATH_TARGET_TOOL``." +msgstr "" + +#: ../../../build/NEWS:8056 +msgid "" +":issue:`37936`: The :file:`.gitignore` file systematically keeps \"rooted\"," +" with a non-trailing slash, all the rules that are meant to apply to files " +"in a specific place in the repo. Previously, when the intended file to " +"ignore happened to be at the root of the repo, we'd most often accidentally " +"also ignore files and directories with the same name anywhere in the tree." +msgstr "" + +#: ../../../build/NEWS:8062 +msgid "" +":issue:`37760`: The :file:`Tools/unicode/makeunicodedata.py` script, which " +"is used for converting information from the Unicode Character Database into " +"generated code and data used by the methods of :class:`str` and by the " +":mod:`unicodedata` module, now handles each character's data as a " +"``dataclass`` with named attributes, rather than a length-18 list of " +"different fields." +msgstr "" + +#: ../../../build/NEWS:8069 +msgid "" +":issue:`37936`: The :file:`.gitignore` file no longer applies to any files " +"that are in fact tracked in the Git repository. Patch by Greg Price." +msgstr "" + +#: ../../../build/NEWS:8072 +msgid "" +":issue:`37725`: Change \"clean\" makefile target to also clean the program " +"guided optimization (PGO) data. Previously you would have to use \"make " +"clean\" and \"make profile-removal\", or \"make clobber\"." +msgstr "" + +#: ../../../build/NEWS:8076 +msgid "" +":issue:`37707`: Mark some individual tests to skip when --pgo is used. The " +"tests marked increase the PGO task time significantly and likely don't help " +"improve optimization of the final executable." +msgstr "" + +#: ../../../build/NEWS:8080 +msgid "" +":issue:`36044`: Reduce the number of unit tests run for the PGO generation " +"task. This speeds up the task by a factor of about 15x. Running the full " +"unit test suite is slow. This change may result in a slightly less " +"optimized build since not as many code branches will be executed. If you " +"are willing to wait for the much slower build, the old behavior can be " +"restored using './configure [..] PROFILE_TASK=\"-m test --pgo-extended\"'. " +"We make no guarantees as to which PGO task set produces a faster build. " +"Users who care should run their own relevant benchmarks as results can " +"depend on the environment, workload, and compiler tool chain." +msgstr "" + +#: ../../../build/NEWS:8090 +msgid "" +":issue:`37468`: ``make install`` no longer installs ``wininst-*.exe`` files " +"used by distutils bdist_wininst: bdist_wininst only works on Windows." +msgstr "" + +#: ../../../build/NEWS:8093 +msgid "" +":issue:`37189`: Many ``PyRun_XXX()`` functions like :c:func:`PyRun_String` " +"were no longer exported in ``libpython38.dll`` by mistake. Export them again" +" to fix the ABI compatibility." +msgstr "" + +#: ../../../build/NEWS:8097 +msgid "" +":issue:`25361`: Enables use of SSE2 instructions in Windows 32-bit build." +msgstr "" + +#: ../../../build/NEWS:8099 +msgid "" +":issue:`36210`: Update optional extension module detection for AIX. " +"ossaudiodev and spwd are not applicable for AIX, and are no longer reported " +"as missing. 3rd-party packaging of ncurses (with ASIS support) conflicts " +"with officially supported AIX curses library, so configure AIX to use " +"libcurses.a. However, skip trying to build _curses_panel." +msgstr "" + +#: ../../../build/NEWS:8105 +msgid "patch by M Felt" +msgstr "" + +#: ../../../build/NEWS:8110 +msgid "" +":issue:`38589`: Fixes HTML Help shortcut when Windows is not installed to C " +"drive" +msgstr "" + +#: ../../../build/NEWS:8113 +msgid "" +":issue:`38453`: Ensure ntpath.realpath() correctly resolves relative paths." +msgstr "" + +#: ../../../build/NEWS:8115 +msgid "" +":issue:`38519`: Restores the internal C headers that were missing from the " +"nuget.org and Microsoft Store packages." +msgstr "" + +#: ../../../build/NEWS:8118 +msgid "" +":issue:`38492`: Remove ``pythonw.exe`` dependency on the Microsoft C++ " +"runtime." +msgstr "" + +#: ../../../build/NEWS:8120 +msgid ":issue:`38344`: Fix error message in activate.bat" +msgstr "" + +#: ../../../build/NEWS:8122 +msgid "" +":issue:`38359`: Ensures ``pyw.exe`` launcher reads correct registry key." +msgstr "" + +#: ../../../build/NEWS:8124 +msgid "" +":issue:`38355`: Fixes ``ntpath.realpath`` failing on ``sys.executable``." +msgstr "" + +#: ../../../build/NEWS:8126 +msgid ":issue:`38117`: Update bundled OpenSSL to 1.1.1d" +msgstr "" + +#: ../../../build/NEWS:8128 +msgid "" +":issue:`38092`: Reduce overhead when using multiprocessing in a Windows " +"virtual environment." +msgstr "" + +#: ../../../build/NEWS:8131 +msgid "" +":issue:`38133`: Allow py.exe launcher to locate installations from the " +"Microsoft Store and improve display of active virtual environments." +msgstr "" + +#: ../../../build/NEWS:8134 +msgid "" +":issue:`38114`: The ``pip.ini`` is no longer included in the Nuget package." +msgstr "" + +#: ../../../build/NEWS:8136 +msgid "" +":issue:`32592`: Set Windows 8 as the minimum required version for API " +"support" +msgstr "" + +#: ../../../build/NEWS:8138 +msgid "" +":issue:`36634`: :func:`os.cpu_count` now returns active processors rather " +"than maximum processors." +msgstr "" + +#: ../../../build/NEWS:8141 +msgid "" +":issue:`36634`: venv activate.bat now works when the existing variables " +"contain double quote characters." +msgstr "" + +#: ../../../build/NEWS:8144 +msgid "" +":issue:`38081`: Prevent error calling :func:`os.path.realpath` on ``'NUL'``." +msgstr "" + +#: ../../../build/NEWS:8146 +msgid ":issue:`38087`: Fix case sensitivity in test_pathlib and test_ntpath." +msgstr "" + +#: ../../../build/NEWS:8148 +msgid "" +":issue:`38088`: Fixes distutils not finding vcruntime140.dll with only the " +"v142 toolset installed." +msgstr "" + +#: ../../../build/NEWS:8151 +msgid "" +":issue:`37283`: Ensure command-line and unattend.xml setting override " +"previously detected states in Windows installer." +msgstr "" + +#: ../../../build/NEWS:8154 +msgid "" +":issue:`38030`: Fixes :func:`os.stat` failing for block devices on Windows" +msgstr "" + +#: ../../../build/NEWS:8156 +msgid "" +":issue:`38020`: Fixes potential crash when calling :func:`os.readlink` (or " +"indirectly through :func:`~os.path.realpath`) on a file that is not a " +"supported link." +msgstr "" + +#: ../../../build/NEWS:8160 +msgid ":issue:`37705`: Improve the implementation of ``winerror_to_errno()``." +msgstr "" + +#: ../../../build/NEWS:8162 +msgid "" +":issue:`37549`: :func:`os.dup` no longer fails for standard streams on " +"Windows 7." +msgstr "" + +#: ../../../build/NEWS:8165 +msgid "" +":issue:`1311`: The ``nul`` file on Windows now returns True from " +":func:`~os.path.exists` and a valid result from :func:`os.stat` with " +"``S_IFCHR`` set." +msgstr "" + +#: ../../../build/NEWS:8169 +msgid "" +":issue:`9949`: Enable support for following symlinks in :func:`os.realpath`." +msgstr "" + +#: ../../../build/NEWS:8171 +msgid "" +":issue:`37834`: Treat all name surrogate reparse points on Windows in " +":func:`os.lstat` and other reparse points as regular files in " +":func:`os.stat`." +msgstr "" + +#: ../../../build/NEWS:8175 +msgid "" +":issue:`36266`: Add the module name in the formatted error message when DLL " +"load fail happens during module import in " +"``_PyImport_FindSharedFuncptrWindows()``. Patch by Srinivas Nyayapati." +msgstr "" + +#: ../../../build/NEWS:8179 +msgid "" +":issue:`25172`: Trying to import the :mod:`crypt` module on Windows will " +"result in an :exc:`ImportError` with a message explaining that the module " +"isn't supported on Windows. On other platforms, if the underlying ``_crypt``" +" module is not available, the ImportError will include a message explaining " +"the problem." +msgstr "" + +#: ../../../build/NEWS:8185 +msgid "" +":issue:`37778`: Fixes the icons used for file associations to the Microsoft " +"Store package." +msgstr "" + +#: ../../../build/NEWS:8188 +msgid "" +":issue:`37734`: Fix use of registry values to launch Python from Microsoft " +"Store app." +msgstr "" + +#: ../../../build/NEWS:8191 +msgid "" +":issue:`37702`: Fix memory leak on Windows in creating an SSLContext object " +"or running urllib.request.urlopen('https://...')." +msgstr "" + +#: ../../../build/NEWS:8194 +msgid "" +":issue:`37672`: Switch Windows Store package's pip to use bundled " +":file:`pip.ini` instead of :envvar:`PIP_USER` variable." +msgstr "" + +#: ../../../build/NEWS:8197 +msgid "" +":issue:`10945`: Officially drop support for creating bdist_wininst " +"installers on non-Windows systems." +msgstr "" + +#: ../../../build/NEWS:8200 +msgid "" +":issue:`37445`: Include the ``FORMAT_MESSAGE_IGNORE_INSERTS`` flag in " +"``FormatMessageW()`` calls." +msgstr "" + +#: ../../../build/NEWS:8203 +msgid "" +":issue:`37369`: Fixes path for :data:`sys.executable` when running from the " +"Microsoft Store." +msgstr "" + +#: ../../../build/NEWS:8206 +msgid "" +":issue:`37380`: Don't collect unfinished processes with " +"``subprocess._active`` on Windows to cleanup later. Patch by Ruslan " +"Kuprieiev." +msgstr "" + +#: ../../../build/NEWS:8209 +msgid "" +":issue:`37351`: Removes libpython38.a from standard Windows distribution." +msgstr "" + +#: ../../../build/NEWS:8211 +msgid ":issue:`35360`: Update Windows builds to use SQLite 3.28.0." +msgstr "" + +#: ../../../build/NEWS:8213 +msgid "" +":issue:`37267`: On Windows, :func:`os.dup` no longer creates an inheritable " +"fd when handling a character file." +msgstr "" + +#: ../../../build/NEWS:8216 +msgid "" +":issue:`36779`: Ensure ``time.tzname`` is correct on Windows when the active" +" code page is set to CP_UTF7 or CP_UTF8." +msgstr "" + +#: ../../../build/NEWS:8219 +msgid "" +":issue:`32587`: Make :data:`winreg.REG_MULTI_SZ` support zero-length " +"strings." +msgstr "" + +#: ../../../build/NEWS:8221 +msgid "" +":issue:`28269`: Replace use of :c:func:`strcasecmp` for the system function " +":c:func:`_stricmp`. Patch by Minmin Gong." +msgstr "" + +#: ../../../build/NEWS:8224 +msgid ":issue:`36590`: Add native Bluetooth RFCOMM support to socket module." +msgstr "" + +#: ../../../build/NEWS:8229 +msgid ":issue:`38117`: Updated OpenSSL to 1.1.1d in macOS installer." +msgstr "" + +#: ../../../build/NEWS:8231 +msgid "" +":issue:`38089`: Move Azure Pipelines to latest VM versions and make macOS " +"tests optional" +msgstr "" + +#: ../../../build/NEWS:8234 +msgid "" +":issue:`18049`: Increase the default stack size of threads from 5MB to 16MB " +"on macOS, to match the stack size of the main thread. This avoids crashes on" +" deep recursion in threads." +msgstr "" + +#: ../../../build/NEWS:8238 +msgid "" +":issue:`34602`: Avoid test suite failures on macOS by no longer calling " +"resource.setrlimit to increase the process stack size limit at runtime. The " +"runtime change is no longer needed since the interpreter is being built with" +" a larger default stack size." +msgstr "" + +#: ../../../build/NEWS:8243 +msgid ":issue:`35360`: Update macOS installer to use SQLite 3.28.0." +msgstr "" + +#: ../../../build/NEWS:8245 +msgid ":issue:`34631`: Updated OpenSSL to 1.1.1c in macOS installer." +msgstr "" + +#: ../../../build/NEWS:8250 +msgid ":issue:`26353`: Stop adding newline when saving an IDLE shell window." +msgstr "" + +#: ../../../build/NEWS:8252 +msgid "" +":issue:`4630`: Add an option to toggle IDLE's cursor blink for shell, " +"editor, and output windows. See Settings, General, Window Preferences, " +"Cursor Blink. Patch by Zackery Spytz." +msgstr "" + +#: ../../../build/NEWS:8256 +msgid ":issue:`38598`: Do not try to compile IDLE shell or output windows" +msgstr "" + +#: ../../../build/NEWS:8258 +msgid "" +":issue:`36698`: IDLE no longer fails when write non-encodable characters to " +"stderr. It now escapes them with a backslash, as the regular Python " +"interpreter. Added the ``errors`` field to the standard streams." +msgstr "" + +#: ../../../build/NEWS:8262 +msgid "" +":issue:`35379`: When exiting IDLE, catch any AttributeError. One happens " +"when EditorWindow.close is called twice. Printing a traceback, when IDLE is" +" run from a terminal, is useless and annoying." +msgstr "" + +#: ../../../build/NEWS:8266 +msgid "" +":issue:`38183`: To avoid problems, test_idle ignores the user config " +"directory. It no longer tries to create or access .idlerc or any files " +"within. Users must run IDLE to discover problems with saving settings." +msgstr "" + +#: ../../../build/NEWS:8270 +msgid "" +":issue:`38077`: IDLE no longer adds 'argv' to the user namespace when " +"initializing it. This bug only affected 3.7.4 and 3.8.0b2 to 3.8.0b4." +msgstr "" + +#: ../../../build/NEWS:8273 +msgid "" +":issue:`38041`: Shell restart lines now fill the window width, always start " +"with '=', and avoid wrapping unnecessarily. The line will still wrap if the " +"included file name is long relative to the width." +msgstr "" + +#: ../../../build/NEWS:8277 +msgid "" +":issue:`35771`: To avoid occasional spurious test_idle failures on slower " +"machines, increase the ``hover_delay`` in test_tooltip." +msgstr "" + +#: ../../../build/NEWS:8280 +msgid "" +":issue:`37824`: Properly handle user input warnings in IDLE shell. Cease " +"turning SyntaxWarnings into SyntaxErrors." +msgstr "" + +#: ../../../build/NEWS:8283 +msgid "" +":issue:`37929`: IDLE Settings dialog now closes properly when there is no " +"shell window." +msgstr "" + +#: ../../../build/NEWS:8286 +msgid "" +":issue:`37902`: Add mousewheel scrolling for IDLE module, path, and stack " +"browsers. Patch by George Zhang." +msgstr "" + +#: ../../../build/NEWS:8289 +msgid "" +":issue:`37849`: Fixed completions list appearing too high or low when shown " +"above the current line." +msgstr "" + +#: ../../../build/NEWS:8292 +msgid ":issue:`36419`: Refactor IDLE autocomplete and improve testing." +msgstr "" + +#: ../../../build/NEWS:8294 +msgid "" +":issue:`37748`: Reorder the Run menu. Put the most common choice, Run " +"Module, at the top." +msgstr "" + +#: ../../../build/NEWS:8297 +msgid "" +":issue:`37692`: Improve highlight config sample with example shell " +"interaction and better labels for shell elements." +msgstr "" + +#: ../../../build/NEWS:8300 +msgid ":issue:`37628`: Settings dialog no longer expands with font size." +msgstr "" + +#: ../../../build/NEWS:8302 +msgid "" +":issue:`37627`: Initialize the Customize Run dialog with the command line " +"arguments most recently entered before. The user can optionally edit before" +" submitting them." +msgstr "" + +#: ../../../build/NEWS:8306 +msgid "" +":issue:`33610`: Fix code context not showing the correct context when first " +"toggled on." +msgstr "" + +#: ../../../build/NEWS:8309 +msgid "" +":issue:`37530`: Optimize code context to reduce unneeded background " +"activity. Font and highlight changes now occur along with text changes " +"instead of after a random delay." +msgstr "" + +#: ../../../build/NEWS:8313 +msgid "" +":issue:`27452`: Cleanup ``config.py`` by inlining ``RemoveFile`` and " +"simplifying the handling of ``file`` in ``CreateConfigHandlers``." +msgstr "" + +#: ../../../build/NEWS:8316 +msgid "" +":issue:`37325`: Fix tab focus traversal order for help source and custom run" +" dialogs." +msgstr "" + +#: ../../../build/NEWS:8319 +msgid "" +":issue:`37321`: Both subprocess connection error messages now refer to the " +"'Startup failure' section of the IDLE doc." +msgstr "" + +#: ../../../build/NEWS:8322 +msgid "" +":issue:`17535`: Add optional line numbers for IDLE editor windows. Windows " +"open without line numbers unless set otherwise in the General tab of the " +"configuration dialog." +msgstr "" + +#: ../../../build/NEWS:8326 +msgid "" +":issue:`26806`: To compensate for stack frames added by IDLE and avoid " +"possible problems with low recursion limits, add 30 to limits in the user " +"code execution process. Subtract 30 when reporting recursion limits to make" +" this addition mostly transparent." +msgstr "" + +#: ../../../build/NEWS:8331 +msgid "" +":issue:`37177`: Properly 'attach' search dialogs to their main window so " +"that they behave like other dialogs and do not get hidden behind their main " +"window." +msgstr "" + +#: ../../../build/NEWS:8335 +msgid "" +":issue:`37039`: Adjust \"Zoom Height\" to individual screens by momentarily " +"maximizing the window on first use with a particular screen. Changing " +"screen settings may invalidate the saved height. While a window is " +"maximized, \"Zoom Height\" has no effect." +msgstr "" + +#: ../../../build/NEWS:8340 +msgid "" +":issue:`35763`: Make calltip reminder about '/' meaning positional-only less" +" obtrusive by only adding it when there is room on the first line." +msgstr "" + +#: ../../../build/NEWS:8343 +msgid "" +":issue:`5680`: Add 'Run... Customized' to the Run menu to run a module with " +"customized settings. Any 'command line arguments' entered are added to " +"sys.argv. One can suppress the normal Shell main module restart." +msgstr "" + +#: ../../../build/NEWS:8347 +msgid "" +":issue:`36390`: Gather Format menu functions into format.py. Combine " +"paragraph.py, rstrip.py, and format methods from editor.py." +msgstr "" + +#: ../../../build/NEWS:8353 +msgid "" +":issue:`38118`: Update Valgrind suppression file to ignore a false alarm in " +":c:func:`PyUnicode_Decode` when using GCC builtin strcmp()." +msgstr "" + +#: ../../../build/NEWS:8356 +msgid "" +":issue:`38347`: pathfix.py: Assume all files that end on '.py' are Python " +"scripts when working recursively." +msgstr "" + +#: ../../../build/NEWS:8359 +msgid "" +":issue:`37803`: pdb's ``--help`` and ``--version`` long options now work." +msgstr "" + +#: ../../../build/NEWS:8361 +msgid ":issue:`37942`: Improve ArgumentClinic converter for floats." +msgstr "" + +#: ../../../build/NEWS:8363 +msgid "" +":issue:`37704`: Remove ``Tools/scripts/h2py.py``: use cffi to access a C API" +" in Python." +msgstr "" + +#: ../../../build/NEWS:8366 +msgid "" +":issue:`37675`: 2to3 now works when run from a zipped standard library." +msgstr "" + +#: ../../../build/NEWS:8368 +msgid "" +":issue:`37034`: Argument Clinic now uses the argument name on errors with " +"keyword-only argument instead of their position. Patch contributed by Rémi " +"Lapeyre." +msgstr "" + +#: ../../../build/NEWS:8372 +msgid "" +":issue:`37064`: Add option -k to pathscript.py script: preserve shebang " +"flags. Add option -a to pathscript.py script: add flags." +msgstr "" + +#: ../../../build/NEWS:8378 +msgid "" +":issue:`37633`: Re-export some function compatibility wrappers for macros in" +" ``pythonrun.h``." +msgstr "" + +#: ../../../build/NEWS:8381 +msgid "" +":issue:`38644`: Provide :c:func:`Py_EnterRecursiveCall` and " +":c:func:`Py_LeaveRecursiveCall` as regular functions for the limited API. " +"Previously, there were defined as macros, but these macros didn't work with " +"the limited API which cannot access ``PyThreadState.recursion_depth`` field." +" Remove ``_Py_CheckRecursionLimit`` from the stable ABI." +msgstr "" + +#: ../../../build/NEWS:8387 +msgid "" +":issue:`38650`: The global variable :c:data:`PyStructSequence_UnnamedField` " +"is now a constant and refers to a constant string." +msgstr "" + +#: ../../../build/NEWS:8390 +msgid "" +":issue:`38540`: Fixed possible leak in :c:func:`PyArg_Parse` and similar " +"functions for format units ``\"es#\"`` and ``\"et#\"`` when the macro " +":c:macro:`PY_SSIZE_T_CLEAN` is not defined." +msgstr "" + +#: ../../../build/NEWS:8394 +msgid "" +":issue:`38395`: Fix a crash in :class:`weakref.proxy` objects due to " +"incorrect lifetime management when calling some associated methods that may " +"delete the last reference to object being referenced by the proxy. Patch by " +"Pablo Galindo." +msgstr "" + +#: ../../../build/NEWS:8399 +msgid "" +":issue:`36389`: The ``_PyObject_CheckConsistency()`` function is now also " +"available in release mode. For example, it can be used to debug a crash in " +"the ``visit_decref()`` function of the GC." +msgstr "" + +#: ../../../build/NEWS:8403 +msgid "" +":issue:`38266`: Revert the removal of PyThreadState_DeleteCurrent() with " +"documentation." +msgstr "" + +#: ../../../build/NEWS:8406 +msgid "" +":issue:`38303`: Update audioop extension module to use the stable ABI " +"(PEP-384). Patch by Tyler Kieft." +msgstr "" + +#: ../../../build/NEWS:8409 +msgid "" +":issue:`38234`: :c:func:`Py_SetPath` now sets :data:`sys.executable` to the " +"program full path (:c:func:`Py_GetProgramFullPath`) rather than to the " +"program name (:c:func:`Py_GetProgramName`)." +msgstr "" + +#: ../../../build/NEWS:8413 +msgid "" +":issue:`38234`: Python ignored arguments passed to :c:func:`Py_SetPath`, " +":c:func:`Py_SetPythonHome` and :c:func:`Py_SetProgramName`: fix Python " +"initialization to use specified arguments." +msgstr "" + +#: ../../../build/NEWS:8417 +msgid "" +":issue:`38205`: The :c:func:`Py_UNREACHABLE` macro now calls " +":c:func:`Py_FatalError`." +msgstr "" + +#: ../../../build/NEWS:8420 +msgid "" +":issue:`38140`: Make dict and weakref offsets opaque for C heap types by " +"passing the offsets through PyMemberDef" +msgstr "" + +#: ../../../build/NEWS:8423 +msgid "" +":issue:`15088`: The C function ``PyGen_NeedsFinalizing`` has been removed. " +"It was not documented, tested or used anywhere within CPython after the " +"implementation of :pep:`442`. Patch by Joannah Nanjekye. (Patch by Joannah " +"Nanjekye)" +msgstr "" + +#: ../../../build/NEWS:8428 +msgid "" +":issue:`36763`: Options added by ``PySys_AddXOption()`` are now handled the " +"same way than ``PyConfig.xoptions`` and command line ``-X`` options." +msgstr "" + +#: ../../../build/NEWS:8431 +msgid ":issue:`37926`: Fix a crash in ``PySys_SetArgvEx(0, NULL, 0)``." +msgstr "" + +#: ../../../build/NEWS:8433 +msgid "" +":issue:`37879`: Fix subtype_dealloc to suppress the type decref when the " +"base type is a C heap type" +msgstr "" + +#: ../../../build/NEWS:8436 +msgid "" +":issue:`37645`: Add :c:func:`_PyObject_FunctionStr` to get a user-friendly " +"string representation of a function-like object. Patch by Jeroen Demeyer." +msgstr "" + +#: ../../../build/NEWS:8439 +msgid "" +":issue:`29548`: The functions ``PyEval_CallObject``, " +"``PyEval_CallFunction``, ``PyEval_CallMethod`` and " +"``PyEval_CallObjectWithKeywords`` are deprecated. Use " +":c:func:`PyObject_Call` and its variants instead." +msgstr "" + +#: ../../../build/NEWS:8443 +msgid "" +":issue:`37151`: ``PyCFunction_Call`` is now a deprecated alias of " +":c:func:`PyObject_Call`." +msgstr "" + +#: ../../../build/NEWS:8446 +msgid "" +":issue:`37540`: The vectorcall protocol now requires that the caller passes " +"only strings as keyword names." +msgstr "" + +#: ../../../build/NEWS:8449 +msgid "" +":issue:`37207`: The vectorcall protocol is now enabled for ``type`` objects:" +" set ``tp_vectorcall`` to a vectorcall function to be used instead of " +"``tp_new`` and ``tp_init`` when calling the class itself." +msgstr "" + +#: ../../../build/NEWS:8453 +msgid "" +":issue:`21120`: Exclude Python-ast.h, ast.h and asdl.h from the limited API." +msgstr "" + +#: ../../../build/NEWS:8455 +msgid "" +":issue:`37483`: Add new function ``_PyObject_CallOneArg`` for calling an " +"object with one positional argument." +msgstr "" + +#: ../../../build/NEWS:8458 +msgid ":issue:`36763`: Add :func:`PyConfig_SetWideStringList` function." +msgstr "" + +#: ../../../build/NEWS:8460 +msgid "" +":issue:`37337`: Add fast functions for calling methods: " +":c:func:`_PyObject_VectorcallMethod`, :c:func:`_PyObject_CallMethodNoArgs` " +"and :c:func:`_PyObject_CallMethodOneArg`." +msgstr "" + +#: ../../../build/NEWS:8464 +msgid "" +":issue:`28805`: The :const:`METH_FASTCALL` calling convention has been " +"documented." +msgstr "" + +#: ../../../build/NEWS:8467 +msgid "" +":issue:`37221`: The new function :c:func:`PyCode_NewWithPosOnlyArgs` allows " +"to create code objects like :c:func:`PyCode_New`, but with an extra " +"*posonlyargcount* parameter for indicating the number of positonal-only " +"arguments." +msgstr "" + +#: ../../../build/NEWS:8472 +msgid ":issue:`37215`: Fix dtrace issue introduce by :issue:`36842`" +msgstr "" + +#: ../../../build/NEWS:8474 +msgid "" +":issue:`37194`: Add a new public :c:func:`PyObject_CallNoArgs` function to " +"the C API: call a callable Python object without any arguments. It is the " +"most efficient way to call a callback without any argument. On x86-64, for " +"example, ``PyObject_CallFunctionObjArgs(func, NULL)`` allocates 960 bytes on" +" the stack per call, whereas ``PyObject_CallNoArgs(func)`` only allocates " +"624 bytes per call." +msgstr "" + +#: ../../../build/NEWS:8481 +msgid "" +":issue:`37170`: Fix the cast on error in " +":c:func:`PyLong_AsUnsignedLongLongMask()`." +msgstr "" + +#: ../../../build/NEWS:8484 +msgid "" +":issue:`35381`: Convert posixmodule.c statically allocated types " +"``DirEntryType`` and ``ScandirIteratorType`` to heap-allocated types." +msgstr "" + +#: ../../../build/NEWS:8487 +msgid "" +":issue:`34331`: Use singular/plural noun in error message when instantiating" +" an abstract class with non-overriden abstract method(s)." +msgstr "" + +#: ../../../build/NEWS:8492 +msgid "Python 3.8.0 beta 1" +msgstr "Python 3.8.0 beta 1" + +#: ../../../build/NEWS:8494 +msgid "*Release date: 2019-06-04*" +msgstr "*发布日期: 2019-06-04*" + +#: ../../../build/NEWS:8499 +msgid "" +":issue:`35907`: CVE-2019-9948: Avoid file reading by disallowing ``local-" +"file://`` and ``local_file://`` URL schemes in ``URLopener().open()`` and " +"``URLopener().retrieve()`` of :mod:`urllib.request`." +msgstr "" + +#: ../../../build/NEWS:8504 +msgid "" +":issue:`33529`: Prevent fold function used in email header encoding from " +"entering infinite loop when there are too many non-ASCII characters in a " +"header." +msgstr "" + +#: ../../../build/NEWS:8508 +msgid "" +":issue:`33164`: Updated blake2 implementation which uses secure memset " +"implementation provided by platform." +msgstr "" + +#: ../../../build/NEWS:8514 +msgid "" +":issue:`35814`: Allow unpacking in the right hand side of annotated " +"assignments. In particular, ``t: Tuple[int, ...] = x, y, *z`` is now " +"allowed." +msgstr "" + +#: ../../../build/NEWS:8518 +msgid "" +":issue:`37126`: All structseq objects are now tracked by the garbage " +"collector. Patch by Pablo Galindo." +msgstr "" + +#: ../../../build/NEWS:8521 +msgid "" +":issue:`37122`: Make the *co_argcount* attribute of code objects represent " +"the total number of positional arguments (including positional-only " +"arguments). The value of *co_posonlyargcount* can be used to distinguish " +"which arguments are positional only, and the difference (*co_argcount* - " +"*co_posonlyargcount*) is the number of positional-or-keyword arguments. " +"Patch by Pablo Galindo." +msgstr "" + +#: ../../../build/NEWS:8528 +msgid "" +":issue:`20092`: Constructors of :class:`int`, :class:`float` and " +":class:`complex` will now use the :meth:`~object.__index__` special method, " +"if available and the corresponding method :meth:`~object.__int__`, " +":meth:`~object.__float__` or :meth:`~object.__complex__` is not available." +msgstr "" + +#: ../../../build/NEWS:8533 +msgid ":issue:`37087`: Add native thread ID (TID) support to OpenBSD." +msgstr "" + +#: ../../../build/NEWS:8535 +msgid "" +":issue:`26219`: Implemented per opcode cache mechanism and ``LOAD_GLOBAL`` " +"instruction use it. ``LOAD_GLOBAL`` is now about 40% faster. Contributed by " +"Yury Selivanov, and Inada Naoki." +msgstr "" + +#: ../../../build/NEWS:8539 +msgid "" +":issue:`37072`: Fix crash in PyAST_FromNodeObject() when flags is NULL." +msgstr "" + +#: ../../../build/NEWS:8541 +msgid "" +":issue:`37029`: Freeing a great many small objects could take time quadratic" +" in the number of arenas, due to using linear search to keep " +"``obmalloc.c``'s list of usable arenas sorted by order of number of free " +"memory pools. This is accomplished without search now, leaving the worst-" +"case time linear in the number of arenas. For programs where this quite " +"visibly matters (typically with more than 100 thousand small objects alive " +"simultaneously), this can greatly reduce the time needed to release their " +"memory." +msgstr "" + +#: ../../../build/NEWS:8550 +msgid "" +":issue:`26423`: Fix possible overflow in ``wrap_lenfunc()`` when " +"``sizeof(long) < sizeof(Py_ssize_t)`` (e.g., 64-bit Windows)." +msgstr "" + +#: ../../../build/NEWS:8553 +msgid "" +":issue:`37050`: Improve the AST for \"debug\" f-strings, which use '=' to " +"print out the source of the expression being evaluated. Delete expr_text " +"from the FormattedValue node, and instead use a Constant string node " +"(possibly merged with adjacent constant expressions inside the f-string)." +msgstr "" + +#: ../../../build/NEWS:8558 +msgid "" +":issue:`22385`: The `bytes.hex`, `bytearray.hex`, and `memoryview.hex` " +"methods as well as the `binascii.hexlify` and `b2a_hex` functions now have " +"the ability to include an optional separator between hex bytes. This " +"functionality was inspired by MicroPython's hexlify implementation." +msgstr "" + +#: ../../../build/NEWS:8563 +msgid ":issue:`26836`: Add :func:`os.memfd_create`." +msgstr "" + +#: ../../../build/NEWS:8565 +msgid "" +":issue:`37032`: Added new ``replace()`` method to the code type " +"(:class:`types.CodeType`)." +msgstr "" + +#: ../../../build/NEWS:8568 +msgid "" +":issue:`37007`: Implement :func:`socket.if_nameindex()`, " +":func:`socket.if_nametoindex()`, and :func:`socket.if_indextoname()` on " +"Windows." +msgstr "" + +#: ../../../build/NEWS:8572 +msgid "" +":issue:`36829`: :c:func:`PyErr_WriteUnraisable` now creates a traceback " +"object if there is no current traceback. Moreover, call " +":c:func:`PyErr_NormalizeException` and :c:func:`PyException_SetTraceback` to" +" normalize the exception value. Ignore any error." +msgstr "" + +#: ../../../build/NEWS:8577 +msgid "" +":issue:`36878`: Only accept text after `# type: ignore` if the first " +"character is ASCII. This is to disallow things like `# type: ignoreé`." +msgstr "" + +#: ../../../build/NEWS:8580 +msgid "" +":issue:`36878`: Store text appearing after a `# type: ignore` comment in the" +" AST. For example a type ignore like `# type: ignore[E1000]` will have the " +"string `\"[E1000]\"` stored in its AST node." +msgstr "" + +#: ../../../build/NEWS:8584 +msgid "" +":issue:`2180`: Treat line continuation at EOF as a ``SyntaxError`` by " +"Anthony Sottile." +msgstr "" + +#: ../../../build/NEWS:8587 +msgid "" +":issue:`36907`: Fix a crash when calling a C function with a keyword dict " +"(``f(**kwargs)``) and changing the dict ``kwargs`` while that function is " +"running." +msgstr "" + +#: ../../../build/NEWS:8591 +msgid "" +":issue:`36946`: Fix possible signed integer overflow when handling slices." +msgstr "" + +#: ../../../build/NEWS:8593 +msgid ":issue:`36826`: Add NamedExpression kind support to ast_unparse.c" +msgstr "" + +#: ../../../build/NEWS:8595 +msgid "" +":issue:`1875`: A :exc:`SyntaxError` is now raised if a code blocks that will" +" be optimized away (e.g. if conditions that are always false) contains " +"syntax errors. Patch by Pablo Galindo." +msgstr "" + +#: ../../../build/NEWS:8599 +msgid "" +":issue:`36027`: Allow computation of modular inverses via three-argument " +"``pow``: the second argument is now permitted to be negative in the case " +"where the first and third arguments are relatively prime." +msgstr "" + +#: ../../../build/NEWS:8603 +msgid ":issue:`36861`: Update the Unicode database to version 12.1.0." +msgstr "" + +#: ../../../build/NEWS:8605 +msgid "" +":issue:`28866`: Avoid caching attributes of classes which type defines mro()" +" to avoid a hard cache invalidation problem." +msgstr "" + +#: ../../../build/NEWS:8608 +msgid "" +":issue:`36851`: The ``FrameType`` stack is now correctly cleaned up if the " +"execution ends with a return and the stack is not empty." +msgstr "" + +#: ../../../build/NEWS:8611 +msgid "" +":issue:`34616`: The ``compile()`` builtin functions now support the " +"``ast.PyCF_ALLOW_TOP_LEVEL_AWAIT`` flag, which allow to compile sources " +"that contains top-level ``await``, ``async with`` or ``async for``. This is" +" useful to evaluate async-code from with an already async functions; for " +"example in a custom REPL." +msgstr "" + +#: ../../../build/NEWS:8617 +msgid "" +":issue:`36842`: Implement PEP 578, adding sys.audit, io.open_code and " +"related APIs." +msgstr "" + +#: ../../../build/NEWS:8620 +msgid "" +":issue:`27639`: Correct return type for UserList slicing operations. Patch " +"by Michael Blahay, Erick Cervantes, and vaultah" +msgstr "" + +#: ../../../build/NEWS:8623 +msgid "" +":issue:`36737`: Move PyRuntimeState.warnings into per-interpreter state (via" +" \"module state\")." +msgstr "" + +#: ../../../build/NEWS:8626 +msgid "" +":issue:`36793`: Removed ``__str__`` implementations from builtin types " +":class:`bool`, :class:`int`, :class:`float`, :class:`complex` and few " +"classes from the standard library. They now inherit ``__str__()`` from " +":class:`object`." +msgstr "" + +#: ../../../build/NEWS:8631 +msgid "" +":issue:`36817`: Add a ``=`` feature f-strings for debugging. This can " +"precede ``!s``, ``!r``, or ``!a``. It produces the text of the expression, " +"followed by an equal sign, followed by the repr of the value of the " +"expression. So ``f'{3*9+15=}'`` would be equal to the string " +"``'3*9+15=42'``. If ``=`` is specified, the default conversion is set to " +"``!r``, unless a format spec is given, in which case the formatting behavior" +" is unchanged, and __format__ will be used." +msgstr "" + +#: ../../../build/NEWS:8639 +msgid "" +":issue:`24048`: Save the live exception during import.c's " +"``remove_module()``." +msgstr "" + +#: ../../../build/NEWS:8641 +msgid "" +":issue:`27987`: pymalloc returns memory blocks aligned by 16 bytes, instead " +"of 8 bytes, on 64-bit platforms to conform x86-64 ABI. Recent compilers " +"assume this alignment more often. Patch by Inada Naoki." +msgstr "" + +#: ../../../build/NEWS:8645 +msgid "" +":issue:`36601`: A long-since-meaningless check for ``getpid() == main_pid`` " +"was removed from Python's internal C signal handler." +msgstr "" + +#: ../../../build/NEWS:8648 +msgid "" +":issue:`36594`: Fix incorrect use of ``%p`` in format strings. Patch by " +"Zackery Spytz." +msgstr "" + +#: ../../../build/NEWS:8651 +msgid "" +":issue:`36045`: builtins.help() now prefixes `async` for async functions" +msgstr "" + +#: ../../../build/NEWS:8653 +msgid "" +":issue:`36084`: Add native thread ID (TID) to threading.Thread objects " +"(supported platforms: Windows, FreeBSD, Linux, macOS)" +msgstr "" + +#: ../../../build/NEWS:8656 +msgid "" +":issue:`36035`: Added fix for broken symlinks in combination with pathlib" +msgstr "" + +#: ../../../build/NEWS:8658 +msgid "" +":issue:`35983`: Added new trashcan macros to deal with a double deallocation" +" that could occur when the `tp_dealloc` of a subclass calls the `tp_dealloc`" +" of a base class and that base class uses the trashcan mechanism. Patch by " +"Jeroen Demeyer." +msgstr "" + +#: ../../../build/NEWS:8663 +msgid "" +":issue:`20602`: Do not clear :data:`sys.flags` and :data:`sys.float_info` " +"during shutdown. Patch by Zackery Spytz." +msgstr "" + +#: ../../../build/NEWS:8666 +msgid "" +":issue:`26826`: Expose :func:`copy_file_range` as a low level API in the " +":mod:`os` module." +msgstr "" + +#: ../../../build/NEWS:8669 +msgid "" +":issue:`32388`: Remove cross-version binary compatibility requirement in " +"tp_flags." +msgstr "" + +#: ../../../build/NEWS:8672 +msgid "" +":issue:`31862`: Port binascii to PEP 489 multiphase initialization. Patch by" +" Marcel Plch." +msgstr "" + +#: ../../../build/NEWS:8678 +msgid ":issue:`37128`: Added :func:`math.perm`." +msgstr "" + +#: ../../../build/NEWS:8680 +msgid "" +":issue:`37120`: Add SSLContext.num_tickets to control the number of TLSv1.3 " +"session tickets." +msgstr "" + +#: ../../../build/NEWS:8683 +msgid "" +":issue:`12202`: Fix the error handling in " +":meth:`msilib.SummaryInformation.GetProperty`. Patch by Zackery Spytz." +msgstr "" + +#: ../../../build/NEWS:8686 +msgid "" +":issue:`26835`: The fcntl module now contains file sealing constants for " +"sealing of memfds." +msgstr "" + +#: ../../../build/NEWS:8689 +msgid "" +":issue:`29262`: Add ``get_origin()`` and ``get_args()`` introspection " +"helpers to ``typing`` module." +msgstr "" + +#: ../../../build/NEWS:8692 +msgid "" +":issue:`12639`: :meth:`msilib.Directory.start_component()` no longer fails " +"if *keyfile* is not ``None``." +msgstr "" + +#: ../../../build/NEWS:8695 +msgid "" +":issue:`36999`: Add the ``asyncio.Task.get_coro()`` method to publicly " +"expose the tasks's coroutine object." +msgstr "" + +#: ../../../build/NEWS:8698 +msgid "" +":issue:`35246`: Make :func:`asyncio.create_subprocess_exec` accept path-like" +" arguments." +msgstr "" + +#: ../../../build/NEWS:8701 +msgid "" +":issue:`35279`: Change default *max_workers* of ``ThreadPoolExecutor`` from " +"``cpu_count() * 5`` to ``min(32, cpu_count() + 4)``. Previous value was " +"unreasonably large on many cores machines." +msgstr "" + +#: ../../../build/NEWS:8705 +msgid "" +":issue:`37076`: :func:`_thread.start_new_thread` now logs uncaught exception" +" raised by the function using :func:`sys.unraisablehook`, rather than " +":func:`sys.excepthook`, so the hook gets access to the function which raised" +" the exception." +msgstr "" + +#: ../../../build/NEWS:8710 +msgid "" +":issue:`33725`: On macOS, the :mod:`multiprocessing` module now uses *spawn*" +" start method by default." +msgstr "" + +#: ../../../build/NEWS:8713 +msgid "" +":issue:`37054`: Fix destructor :class:`_pyio.BytesIO` and " +":class:`_pyio.TextIOWrapper`: initialize their ``_buffer`` attribute as soon" +" as possible (in the class body), because it's used by ``__del__()`` which " +"calls ``close()``." +msgstr "" + +#: ../../../build/NEWS:8718 +msgid "" +":issue:`37058`: PEP 544: Add ``Protocol`` and ``@runtime_checkable`` to the " +"``typing`` module." +msgstr "" + +#: ../../../build/NEWS:8721 +msgid "" +":issue:`36933`: The functions ``sys.set_coroutine_wrapper`` and " +"``sys.get_coroutine_wrapper`` that were deprecated and marked for removal in" +" 3.8 have been removed." +msgstr "" + +#: ../../../build/NEWS:8725 +msgid "" +":issue:`37047`: Handle late binding and attribute access in " +":class:`unittest.mock.AsyncMock` setup for autospeccing. Document newly " +"implemented async methods in :class:`unittest.mock.MagicMock`." +msgstr "" + +#: ../../../build/NEWS:8729 +msgid ":issue:`37049`: PEP 589: Add ``TypedDict`` to the ``typing`` module." +msgstr "" + +#: ../../../build/NEWS:8731 +msgid ":issue:`37046`: PEP 586: Add ``Literal`` to the ``typing`` module." +msgstr "" + +#: ../../../build/NEWS:8733 +msgid "" +":issue:`37045`: PEP 591: Add ``Final`` qualifier and ``@final`` decorator to" +" the ``typing`` module." +msgstr "" + +#: ../../../build/NEWS:8736 +msgid "" +":issue:`37035`: Don't log OSError based exceptions if a fatal error has " +"occurred in asyncio transport. Peer can generate almost any OSError, user " +"cannot avoid these exceptions by fixing own code. Errors are still " +"propagated to user code, it's just logging them is pointless and pollute " +"asyncio logs." +msgstr "" + +#: ../../../build/NEWS:8742 +msgid "" +":issue:`37001`: :func:`symtable.symtable` now accepts the same input types " +"for source code as the built-in :func:`compile` function. Patch by Dino " +"Viehland." +msgstr "" + +#: ../../../build/NEWS:8746 +msgid ":issue:`37028`: Implement asyncio REPL" +msgstr "" + +#: ../../../build/NEWS:8748 +msgid "" +":issue:`37027`: Return safe to use proxy socket object from " +"transport.get_extra_info('socket')" +msgstr "" + +#: ../../../build/NEWS:8751 +msgid ":issue:`32528`: Make asyncio.CancelledError a BaseException." +msgstr "" + +#: ../../../build/NEWS:8753 +msgid "" +"This will address the common mistake many asyncio users make: an \"except " +"Exception\" clause breaking Tasks cancellation." +msgstr "" + +#: ../../../build/NEWS:8756 +msgid "" +"In addition to this change, we stop inheriting asyncio.TimeoutError and " +"asyncio.InvalidStateError from their concurrent.futures.* counterparts. " +"There's no point for these exceptions to share the inheritance chain." +msgstr "" + +#: ../../../build/NEWS:8760 +msgid "" +":issue:`1230540`: Add a new :func:`threading.excepthook` function which " +"handles uncaught :meth:`threading.Thread.run` exception. It can be " +"overridden to control how uncaught :meth:`threading.Thread.run` exceptions " +"are handled." +msgstr "" + +#: ../../../build/NEWS:8764 +msgid "" +":issue:`36996`: Handle :func:`unittest.mock.patch` used as a decorator on " +"async functions." +msgstr "" + +#: ../../../build/NEWS:8767 +msgid "" +":issue:`37008`: Add support for calling :func:`next` with the mock resulting" +" from :func:`unittest.mock.mock_open`" +msgstr "" + +#: ../../../build/NEWS:8770 +msgid "" +":issue:`27737`: Allow whitespace only header encoding in ``email.header`` - " +"by Batuhan Taskaya" +msgstr "" + +#: ../../../build/NEWS:8773 +msgid "" +":issue:`36969`: PDB command `args` now display positional only arguments. " +"Patch contributed by Rémi Lapeyre." +msgstr "" + +#: ../../../build/NEWS:8776 +msgid "" +":issue:`36969`: PDB command `args` now display keyword only arguments. " +"Patch contributed by Rémi Lapeyre." +msgstr "" + +#: ../../../build/NEWS:8779 +msgid "" +":issue:`36983`: Add missing names to ``typing.__all__``: ``ChainMap``, " +"``ForwardRef``, ``OrderedDict`` - by Anthony Sottile." +msgstr "" + +#: ../../../build/NEWS:8782 +msgid "" +":issue:`36972`: Add SupportsIndex protocol to the typing module to allow " +"type checking to detect classes that can be passed to `hex()`, `oct()` and " +"`bin()`." +msgstr "" + +#: ../../../build/NEWS:8786 +msgid "" +":issue:`32972`: Implement ``unittest.IsolatedAsyncioTestCase`` to help " +"testing asyncio-based code." +msgstr "" + +#: ../../../build/NEWS:8789 +msgid "" +":issue:`36952`: :func:`fileinput.input` and :class:`fileinput.FileInput` " +"**bufsize** argument has been removed (was deprecated and ignored since " +"Python 3.6), and as a result the **mode** and **openhook** arguments have " +"been made keyword-only." +msgstr "" + +#: ../../../build/NEWS:8794 +msgid "" +":issue:`36952`: Starting with Python 3.3, importing ABCs from " +":mod:`collections` is deprecated, and import should be done from " +":mod:`collections.abc`. Still being able to import from :mod:`collections` " +"was marked for removal in 3.8, but has been delayed to 3.9; documentation " +"and ``DeprecationWarning`` clarified." +msgstr "" + +#: ../../../build/NEWS:8800 +msgid ":issue:`36949`: Implement __repr__ for WeakSet objects." +msgstr "" + +#: ../../../build/NEWS:8802 +msgid "" +":issue:`36948`: Fix :exc:`NameError` in " +":meth:`urllib.request.URLopener.retrieve`. Patch by Karthikeyan " +"Singaravelan." +msgstr "" + +#: ../../../build/NEWS:8806 +msgid "" +":issue:`33524`: Fix the folding of email header when the max_line_length is " +"0 or None and the header contains non-ascii characters. Contributed by " +"Licht Takeuchi (@Licht-T)." +msgstr "" + +#: ../../../build/NEWS:8810 +msgid "" +":issue:`24564`: :func:`shutil.copystat` now ignores :const:`errno.EINVAL` on" +" :func:`os.setxattr` which may occur when copying files on filesystems " +"without extended attributes support." +msgstr "" + +#: ../../../build/NEWS:8814 +msgid "Original patch by Giampaolo Rodola, updated by Ying Wang." +msgstr "" + +#: ../../../build/NEWS:8816 +msgid "" +":issue:`36888`: Python child processes can now access the status of their " +"parent process using multiprocessing.process.parent_process" +msgstr "" + +#: ../../../build/NEWS:8819 +msgid ":issue:`36921`: Deprecate ``@coroutine`` for sake of ``async def``." +msgstr "" + +#: ../../../build/NEWS:8821 +msgid "" +":issue:`25652`: Fix bug in ``__rmod__`` of ``UserString`` - by Batuhan " +"Taskaya." +msgstr "" + +#: ../../../build/NEWS:8823 +msgid "" +":issue:`36916`: Remove a message about an unhandled exception in a task when" +" writer.write() is used without await and writer.drain() fails with an " +"exception." +msgstr "" + +#: ../../../build/NEWS:8827 +msgid "" +":issue:`36889`: Introduce :class:`asyncio.Stream` class that merges " +":class:`asyncio.StreamReader` and :class:`asyncio.StreamWriter` " +"functionality. :class:`asyncio.Stream` can work in readonly, writeonly and " +"readwrite modes. Provide :func:`asyncio.connect`, " +":func:`asyncio.connect_unix`, :func:`asyncio.connect_read_pipe` and " +":func:`asyncio.connect_write_pipe` factories to open :class:`asyncio.Stream`" +" connections. Provide :class:`asyncio.StreamServer` and " +":class:`UnixStreamServer` to serve servers with asyncio.Stream API. Modify " +":func:`asyncio.create_subprocess_shell` and " +":func:`asyncio.create_subprocess_exec` to use :class:`asyncio.Stream` " +"instead of deprecated :class:`StreamReader` and :class:`StreamWriter`. " +"Deprecate :class:`asyncio.StreamReader` and :class:`asyncio.StreamWriter`. " +"Deprecate usage of private classes, e.g. :class:`asyncio.FlowControlMixing` " +"and :class:`asyncio.StreamReaderProtocol` outside of asyncio package." +msgstr "" + +#: ../../../build/NEWS:8843 +msgid "" +":issue:`36845`: Added validation of integer prefixes to the construction of " +"IP networks and interfaces in the ipaddress module." +msgstr "" + +#: ../../../build/NEWS:8846 +msgid ":issue:`23378`: Add an extend action to argparser." +msgstr "" + +#: ../../../build/NEWS:8848 +msgid "" +":issue:`36867`: Fix a bug making a SharedMemoryManager instance and its " +"parent process use two separate resource_tracker processes." +msgstr "" + +#: ../../../build/NEWS:8851 +msgid "" +":issue:`23896`: Adds a grammar to lib2to3.pygram that contains exec as a " +"function not as statement." +msgstr "" + +#: ../../../build/NEWS:8854 +msgid "" +":issue:`36895`: The function ``time.clock()`` was deprecated in 3.3 in favor" +" of ``time.perf_counter()`` and marked for removal in 3.8, it has removed." +msgstr "" + +#: ../../../build/NEWS:8857 +msgid "" +":issue:`35545`: Fix asyncio discarding IPv6 scopes when ensuring hostname " +"resolutions internally" +msgstr "" + +#: ../../../build/NEWS:8860 +msgid "" +":issue:`36887`: Add new function :func:`math.isqrt` to compute integer " +"square roots." +msgstr "" + +#: ../../../build/NEWS:8863 +msgid "" +":issue:`34632`: Introduce the ``importlib.metadata`` module with " +"(provisional) support for reading metadata from third-party packages." +msgstr "" + +#: ../../../build/NEWS:8866 +msgid "" +":issue:`36878`: When using `type_comments=True` in `ast.parse`, treat `# " +"type: ignore` followed by a non-alphanumeric character and then arbitrary " +"text as a type ignore, instead of requiring nothing but whitespace or " +"another comment. This is to permit formations such as `# type: " +"ignore[E1000]`." +msgstr "" + +#: ../../../build/NEWS:8871 +msgid "" +":issue:`36778`: ``cp65001`` encoding (Windows code page 65001) becomes an " +"alias to ``utf_8`` encoding." +msgstr "" + +#: ../../../build/NEWS:8874 +msgid "" +":issue:`36867`: The multiprocessing.resource_tracker replaces the " +"multiprocessing.semaphore_tracker module. Other than semaphores, " +"resource_tracker also tracks shared_memory segments." +msgstr "" + +#: ../../../build/NEWS:8878 +msgid "" +":issue:`30262`: The ``Cache`` and ``Statement`` objects of the " +":mod:`sqlite3` module are not exposed to the user. Patch by Aviv Palivoda." +msgstr "" + +#: ../../../build/NEWS:8881 +msgid "" +":issue:`24538`: In `shutil.copystat()`, first copy extended file attributes " +"and then file permissions, since extended attributes can only be set on the " +"destination while it is still writeable." +msgstr "" + +#: ../../../build/NEWS:8885 +msgid "" +":issue:`36829`: Add new :func:`sys.unraisablehook` function which can be " +"overridden to control how \"unraisable exceptions\" are handled. It is " +"called when an exception has occurred but there is no way for Python to " +"handle it. For example, when a destructor raises an exception or during " +"garbage collection (:func:`gc.collect`)." +msgstr "" + +#: ../../../build/NEWS:8891 +msgid "" +":issue:`36832`: Introducing ``zipfile.Path``, a pathlib-compatible wrapper " +"for traversing zip files." +msgstr "" + +#: ../../../build/NEWS:8894 +msgid "" +":issue:`36814`: Fix an issue where os.posix_spawnp() would incorrectly raise" +" a TypeError when file_actions is None." +msgstr "" + +#: ../../../build/NEWS:8897 +msgid "" +":issue:`33110`: Handle exceptions raised by functions added by " +"concurrent.futures add_done_callback correctly when the Future has already " +"completed." +msgstr "" + +#: ../../../build/NEWS:8901 +msgid "" +":issue:`26903`: Limit `max_workers` in `ProcessPoolExecutor` to 61 to work " +"around a WaitForMultipleObjects limitation." +msgstr "" + +#: ../../../build/NEWS:8904 +msgid "" +":issue:`36813`: Fix :class:`~logging.handlers.QueueListener` to call " +"``queue.task_done()`` upon stopping. Patch by Bar Harel." +msgstr "" + +#: ../../../build/NEWS:8907 +msgid "" +":issue:`36806`: Forbid creation of asyncio stream objects like StreamReader," +" StreamWriter, Process, and their protocols outside of asyncio package." +msgstr "" + +#: ../../../build/NEWS:8910 +msgid "" +":issue:`36802`: Provide both sync and async calls for StreamWriter.write() " +"and StreamWriter.close()" +msgstr "" + +#: ../../../build/NEWS:8913 +msgid "" +":issue:`36801`: Properly handle SSL connection closing in asyncio " +"StreamWriter.drain() call." +msgstr "" + +#: ../../../build/NEWS:8916 +msgid "" +":issue:`36785`: Implement PEP 574 (pickle protocol 5 with out-of-band " +"buffers)." +msgstr "" + +#: ../../../build/NEWS:8918 +msgid "" +":issue:`36772`: functools.lru_cache() can now be used as a straight " +"decorator in addition to its existing usage as a function that returns a " +"decorator." +msgstr "" + +#: ../../../build/NEWS:8921 +msgid "" +":issue:`6584`: Add a :exc:`~gzip.BadGzipFile` exception to the :mod:`gzip` " +"module." +msgstr "" + +#: ../../../build/NEWS:8924 +msgid "" +":issue:`36748`: Optimized write buffering in C implementation of " +"``TextIOWrapper``. Writing ASCII string to ``TextIOWrapper`` with ascii, " +"latin1, or utf-8 encoding is about 20% faster. Patch by Inada Naoki." +msgstr "" + +#: ../../../build/NEWS:8928 +msgid "" +":issue:`8138`: Don't mark ``wsgiref.simple_server.SimpleServer`` as multi-" +"threaded since ``wsgiref.simple_server.WSGIServer`` is single-threaded." +msgstr "" + +#: ../../../build/NEWS:8932 +msgid "" +":issue:`22640`: :func:`py_compile.compile` now supports silent mode. Patch " +"by Joannah Nanjekye" +msgstr "" + +#: ../../../build/NEWS:8935 +msgid "" +":issue:`29183`: Fix double exceptions in " +":class:`wsgiref.handlers.BaseHandler` by calling its " +":meth:`~wsgiref.handlers.BaseHandler.close` method only when no exception is" +" raised." +msgstr "" + +#: ../../../build/NEWS:8939 +msgid ":issue:`36548`: Improved the repr of regular expression flags." +msgstr "" + +#: ../../../build/NEWS:8941 +msgid "" +":issue:`36542`: The signature of Python functions can now be overridden by " +"specifying the ``__text_signature__`` attribute." +msgstr "" + +#: ../../../build/NEWS:8944 +msgid "" +":issue:`36533`: Reinitialize logging.Handler locks in forked child processes" +" instead of attempting to acquire them all in the parent before forking only" +" to be released in the child process. The acquire/release pattern was " +"leading to deadlocks in code that has implemented any form of chained " +"logging handlers that depend upon one another as the lock acquisition order " +"cannot be guaranteed." +msgstr "" + +#: ../../../build/NEWS:8951 +msgid "" +":issue:`35252`: Throw a TypeError instead of an AssertionError when using an" +" invalid type annotation with singledispatch." +msgstr "" + +#: ../../../build/NEWS:8954 +msgid "" +":issue:`35900`: Allow reduction methods to return a 6-item tuple where the " +"6th item specifies a custom state-setting method that's called instead of " +"the regular ``__setstate__`` method." +msgstr "" + +#: ../../../build/NEWS:8958 +msgid "" +":issue:`35900`: enable custom reduction callback registration for functions " +"and classes in _pickle.c, using the new Pickler's attribute " +"``reducer_override``" +msgstr "" + +#: ../../../build/NEWS:8962 +msgid "" +":issue:`36368`: Fix a bug crashing SharedMemoryManager instances in " +"interactive sessions after a ctrl-c (KeyboardInterrupt) was sent" +msgstr "" + +#: ../../../build/NEWS:8965 +msgid ":issue:`31904`: Fix mmap fail for VxWorks" +msgstr "" + +#: ../../../build/NEWS:8967 +msgid "" +":issue:`27497`: :meth:`csv.DictWriter.writeheader` now returns the return " +"value of the underlying :meth:`csv.Writer.writerow` method. Patch " +"contributed by Ashish Nitin Patil." +msgstr "" + +#: ../../../build/NEWS:8971 +msgid "" +":issue:`36239`: Parsing .mo files now ignores comments starting and ending " +"with #-#-#-#-#." +msgstr "" + +#: ../../../build/NEWS:8974 +msgid "" +":issue:`26707`: Enable plistlib to read and write binary plist files that " +"were created as a KeyedArchive file. Specifically, this allows the plistlib " +"to process 0x80 tokens as UID objects." +msgstr "" + +#: ../../../build/NEWS:8978 +msgid ":issue:`31904`: Add posix module support for VxWorks." +msgstr "" + +#: ../../../build/NEWS:8980 +msgid "" +":issue:`35125`: Asyncio: Remove inner callback on outer cancellation in " +"shield" +msgstr "" + +#: ../../../build/NEWS:8982 +msgid "" +":issue:`35721`: Fix :meth:`asyncio.SelectorEventLoop.subprocess_exec()` " +"leaks file descriptors if ``Popen`` fails and called with " +"``stdin=subprocess.PIPE``. Patch by Niklas Fiekas." +msgstr "" + +#: ../../../build/NEWS:8986 +msgid "" +":issue:`31855`: :func:`unittest.mock.mock_open` results now respects the " +"argument of read([size]). Patch contributed by Rémi Lapeyre." +msgstr "" + +#: ../../../build/NEWS:8989 +msgid "" +":issue:`35431`: Implement :func:`math.comb` that returns binomial " +"coefficient, that computes the number of ways to choose k items from n items" +" without repetition and without order. Patch by Yash Aggarwal and Keller " +"Fuchs." +msgstr "" + +#: ../../../build/NEWS:8993 +msgid "" +":issue:`26660`: Fixed permission errors in " +":class:`~tempfile.TemporaryDirectory` clean up. Previously " +"``TemporaryDirectory.cleanup()`` failed when non-writeable or non-searchable" +" files or directories were created inside a temporary directory." +msgstr "" + +#: ../../../build/NEWS:8999 +msgid "" +":issue:`34271`: Add debugging helpers to ssl module. It's now possible to " +"dump key material and to trace TLS protocol. The default and stdlib contexts" +" also support SSLKEYLOGFILE env var." +msgstr "" + +#: ../../../build/NEWS:9003 +msgid "" +":issue:`26467`: Added AsyncMock to support using unittest to mock asyncio " +"coroutines. Patch by Lisa Roach." +msgstr "" + +#: ../../../build/NEWS:9006 +msgid "" +":issue:`33569`: dataclasses.InitVar: Exposes the type used to create the " +"init var." +msgstr "" + +#: ../../../build/NEWS:9009 +msgid "" +":issue:`34424`: Fix serialization of messages containing encoded strings " +"when the policy.linesep is set to a multi-character string. Patch by Jens " +"Troeger." +msgstr "" + +#: ../../../build/NEWS:9013 +msgid "" +":issue:`34303`: Performance of :func:`functools.reduce` is slightly " +"improved. Patch by Sergey Fedoseev." +msgstr "" + +#: ../../../build/NEWS:9016 +msgid "" +":issue:`33361`: Fix a bug in :class:`codecs.StreamRecoder` where seeking " +"might leave old data in a buffer and break subsequent read calls. Patch by " +"Ammar Askar." +msgstr "" + +#: ../../../build/NEWS:9020 +msgid "" +":issue:`22454`: The :mod:`shlex` module now exposes :func:`shlex.join`, the " +"inverse of :func:`shlex.split`. Patch by Bo Bayles." +msgstr "" + +#: ../../../build/NEWS:9023 +msgid "" +":issue:`31922`: :meth:`asyncio.AbstractEventLoop.create_datagram_endpoint`: " +"Do not connect UDP socket when broadcast is allowed. This allows to receive " +"replies after a UDP broadcast." +msgstr "" + +#: ../../../build/NEWS:9027 +msgid "" +":issue:`24882`: Change ThreadPoolExecutor to use existing idle threads " +"before spinning up new ones." +msgstr "" + +#: ../../../build/NEWS:9030 +msgid "" +":issue:`31961`: Added support for bytes and path-like objects in " +":func:`subprocess.Popen` on Windows. The *args* parameter now accepts a " +":term:`path-like object` if *shell* is ``False`` and a sequence containing " +"bytes and path-like objects. The *executable* parameter now accepts a bytes " +"and :term:`path-like object`. The *cwd* parameter now accepts a bytes " +"object. Based on patch by Anders Lorentsen." +msgstr "" + +#: ../../../build/NEWS:9037 +msgid "" +":issue:`33123`: :class:`pathlib.Path.unlink` now accepts a *missing_ok* " +"parameter to avoid a :exc:`FileNotFoundError` from being raised. Patch by " +"Robert Buchholz." +msgstr "" + +#: ../../../build/NEWS:9041 +msgid "" +":issue:`32941`: Allow :class:`mmap.mmap` objects to access the madvise() " +"system call (through :meth:`mmap.mmap.madvise`)." +msgstr "" + +#: ../../../build/NEWS:9044 +msgid "" +":issue:`22102`: Added support for ZIP files with disks set to 0. Such files " +"are commonly created by builtin tools on Windows when use ZIP64 extension. " +"Patch by Francisco Facioni." +msgstr "" + +#: ../../../build/NEWS:9048 +msgid "" +":issue:`32515`: trace.py can now run modules via python3 -m trace -t " +"--module module_name" +msgstr "" + +#: ../../../build/NEWS:9051 +msgid "" +":issue:`32299`: Changed :func:`unittest.mock.patch.dict` to return the " +"patched dictionary when used as context manager. Patch by Vadim Tsander." +msgstr "" + +#: ../../../build/NEWS:9054 +msgid "" +":issue:`27141`: Added a ``__copy__()`` to ``collections.UserList`` and " +"``collections.UserDict`` in order to correctly implement shallow copying of " +"the objects. Patch by Bar Harel." +msgstr "" + +#: ../../../build/NEWS:9058 +msgid "" +":issue:`31829`: ``\\r``, ``\\0`` and ``\\x1a`` (end-of-file on Windows) are " +"now escaped in protocol 0 pickles of Unicode strings. This allows to load " +"them without loss from files open in text mode in Python 2." +msgstr "" + +#: ../../../build/NEWS:9062 +msgid "" +":issue:`23395`: ``_thread.interrupt_main()`` now avoids setting the Python " +"error status if the ``SIGINT`` signal is ignored or not handled by Python." +msgstr "" + +#: ../../../build/NEWS:9068 +msgid "" +":issue:`36896`: Clarify that some types have unstable constructor signature " +"between Python versions." +msgstr "" + +#: ../../../build/NEWS:9071 +msgid "" +":issue:`36686`: Improve documentation of the stdin, stdout, and stderr " +"arguments of the ``asyncio.subprocess_exec`` function to specify which " +"values are supported. Also mention that decoding as text is not supported." +msgstr "" + +#: ../../../build/NEWS:9075 +msgid "" +"Add a few tests to verify that the various values passed to the std* " +"arguments actually work." +msgstr "" + +#: ../../../build/NEWS:9078 +msgid "" +":issue:`36984`: Improve version added references in ``typing`` module - by " +"Anthony Sottile." +msgstr "" + +#: ../../../build/NEWS:9081 +msgid "" +":issue:`36868`: What's new now mentions " +"SSLContext.hostname_checks_common_name instead of SSLContext.host_flags." +msgstr "" + +#: ../../../build/NEWS:9084 +msgid "" +":issue:`35924`: Add a note to the ``curses.addstr()`` documentation to warn " +"that multiline strings can cause segfaults because of an ncurses bug." +msgstr "" + +#: ../../../build/NEWS:9087 +msgid "" +":issue:`36783`: Added C API Documentation for Time_FromTimeAndFold and " +"PyDateTime_FromDateAndTimeAndFold as per PEP 495. Patch by Edison Abahurire." +msgstr "" + +#: ../../../build/NEWS:9091 +msgid "" +":issue:`36797`: More of the legacy distutils documentation has been either " +"pruned, or else more clearly marked as being retained solely until the " +"setuptools documentation covers it independently." +msgstr "" + +#: ../../../build/NEWS:9095 +msgid "" +":issue:`22865`: Add detail to the documentation on the `pty.spawn` function." +msgstr "" + +#: ../../../build/NEWS:9097 +msgid "" +":issue:`35397`: Remove deprecation and document urllib.parse.unwrap(). Patch" +" contributed by Rémi Lapeyre." +msgstr "" + +#: ../../../build/NEWS:9100 +msgid ":issue:`32995`: Added the context variable in glossary." +msgstr "" + +#: ../../../build/NEWS:9102 +msgid "" +":issue:`33519`: Clarify that `copy()` is not part of the `MutableSequence` " +"ABC." +msgstr "" + +#: ../../../build/NEWS:9104 +msgid "" +":issue:`33482`: Make `codecs.StreamRecoder.writelines` take a list of bytes." +msgstr "" + +#: ../../../build/NEWS:9106 +msgid "" +":issue:`25735`: Added documentation for func factorial to indicate that " +"returns integer values" +msgstr "" + +#: ../../../build/NEWS:9109 +msgid "" +":issue:`20285`: Expand object.__doc__ (docstring) to make it clearer. Modify" +" pydoc.py so that help(object) lists object methods (for other classes, help" +" omits methods of the object base class.)" +msgstr "" + +#: ../../../build/NEWS:9116 +msgid "" +":issue:`37069`: Modify test_coroutines, test_cprofile, test_generators, " +"test_raise, test_ssl and test_yield_from to use " +":func:`test.support.catch_unraisable_exception` rather than " +":func:`test.support.captured_stderr`." +msgstr "" + +#: ../../../build/NEWS:9121 +msgid ":issue:`37098`: Fix test_memfd_create on older Linux Kernels." +msgstr "" + +#: ../../../build/NEWS:9123 +msgid ":issue:`37081`: Test with OpenSSL 1.1.1c" +msgstr "" + +#: ../../../build/NEWS:9125 +msgid "" +":issue:`36829`: Add :func:`test.support.catch_unraisable_exception`: context" +" manager catching unraisable exception using :func:`sys.unraisablehook`." +msgstr "" + +#: ../../../build/NEWS:9128 +msgid "" +":issue:`36915`: The main regrtest process now always removes all temporary " +"directories of worker processes even if they crash or if they are killed on " +"KeyboardInterrupt (CTRL+c)." +msgstr "" + +#: ../../../build/NEWS:9132 +msgid "" +":issue:`36719`: \"python3 -m test -jN ...\" now continues the execution of " +"next tests when a worker process crash (CHILD_ERROR state). Previously, the " +"test suite stopped immediately. Use --failfast to stop at the first error." +msgstr "" + +#: ../../../build/NEWS:9136 +msgid "" +":issue:`36816`: Update Lib/test/selfsigned_pythontestdotnet.pem to match " +"self-signed.pythontest.net's new TLS certificate." +msgstr "" + +#: ../../../build/NEWS:9139 +msgid "" +":issue:`35925`: Skip httplib and nntplib networking tests when they would " +"otherwise fail due to a modern OS or distro with a default OpenSSL policy of" +" rejecting connections to servers with weak certificates." +msgstr "" + +#: ../../../build/NEWS:9143 +msgid "" +":issue:`36782`: Add tests for several C API functions in the :mod:`datetime`" +" module. Patch by Edison Abahurire." +msgstr "" + +#: ../../../build/NEWS:9146 +msgid "" +":issue:`36342`: Fix test_multiprocessing in test_venv if platform lacks " +"functioning sem_open." +msgstr "" + +#: ../../../build/NEWS:9152 +msgid "" +":issue:`36721`: To embed Python into an application, a new ``--embed`` " +"option must be passed to ``python3-config --libs --embed`` to get " +"``-lpython3.8`` (link the application to libpython). To support both 3.8 and" +" older, try ``python3-config --libs --embed`` first and fallback to " +"``python3-config --libs`` (without ``--embed``) if the previous command " +"fails." +msgstr "" + +#: ../../../build/NEWS:9158 +msgid "" +"Add a pkg-config ``python-3.8-embed`` module to embed Python into an " +"application: ``pkg-config python-3.8-embed --libs`` includes " +"``-lpython3.8``. To support both 3.8 and older, try ``pkg-config " +"python-X.Y-embed --libs`` first and fallback to ``pkg-config python-X.Y " +"--libs`` (without ``--embed``) if the previous command fails (replace " +"``X.Y`` with the Python version)." +msgstr "" +"增加一个 pkg-config ``python-3.8-embed`` 模块用来将 Python 嵌入到一个应用中: ``pkg-config " +"python-3.8-embed --libs`` 包含 ``-lpython3.8``。 要同时支持 3.8 和旧版本,请先尝试 ``pkg-" +"config python-X.Y-embed --libs`` 并在此命令失败时回退到 ``pkg-config python-X.Y " +"--libs`` (即不带 ``--embed``) (请将 ``X.Y`` 替换为 Python 版本号)。" + +#: ../../../build/NEWS:9165 +msgid "" +"On the other hand, ``pkg-config python3.8 --libs`` no longer contains " +"``-lpython3.8``. C extensions must not be linked to libpython (except on " +"Android, case handled by the script); this change is backward incompatible " +"on purpose." +msgstr "" + +#: ../../../build/NEWS:9170 +msgid ":issue:`36786`: \"make install\" now runs compileall in parallel." +msgstr "" + +#: ../../../build/NEWS:9175 +msgid "" +":issue:`36965`: include of STATUS_CONTROL_C_EXIT without depending on MSC " +"compiler" +msgstr "" + +#: ../../../build/NEWS:9178 +msgid ":issue:`35926`: Update to OpenSSL 1.1.1b for Windows." +msgstr "" + +#: ../../../build/NEWS:9180 +msgid "" +":issue:`29883`: Add Windows support for UDP transports for the Proactor " +"Event Loop. Patch by Adam Meily." +msgstr "" + +#: ../../../build/NEWS:9183 +msgid "" +":issue:`33407`: The :c:macro:`Py_DEPRECATED()` macro has been implemented " +"for MSVC." +msgstr "" + +#: ../../../build/NEWS:9189 +msgid "" +":issue:`36231`: Support building Python on macOS without /usr/include " +"installed. As of macOS 10.14, system header files are only available within " +"an SDK provided by either the Command Line Tools or the Xcode app." +msgstr "" + +#: ../../../build/NEWS:9196 +msgid "" +":issue:`35610`: Replace now redundant .context_use_ps1 with " +".prompt_last_line. This finishes change started in :issue:`31858`." +msgstr "" + +#: ../../../build/NEWS:9199 +msgid ":issue:`37038`: Make idlelib.run runnable; add test clause." +msgstr "" + +#: ../../../build/NEWS:9201 +msgid "" +":issue:`36958`: Print any argument other than None or int passed to " +"SystemExit or sys.exit()." +msgstr "" + +#: ../../../build/NEWS:9204 +msgid "" +":issue:`36807`: When saving a file, call os.fsync() so bits are flushed to " +"e.g. USB drive." +msgstr "" + +#: ../../../build/NEWS:9207 +msgid "" +":issue:`32411`: In browser.py, remove extraneous sorting by line number " +"since dictionary was created in line number order." +msgstr "" + +#: ../../../build/NEWS:9213 +msgid "" +":issue:`37053`: Handle strings like u\"bar\" correctly in " +"Tools/parser/unparse.py. Patch by Chih-Hsuan Yen." +msgstr "" + +#: ../../../build/NEWS:9219 +msgid "" +":issue:`36763`: Implement the :pep:`587` \"Python Initialization " +"Configuration\"." +msgstr "" + +#: ../../../build/NEWS:9221 +msgid "" +":issue:`36379`: Fix crashes when attempting to use the *modulo* parameter " +"when ``__ipow__`` is implemented in C." +msgstr "" + +#: ../../../build/NEWS:9224 +msgid "" +":issue:`37107`: Update :c:func:`PyObject_CallMethodObjArgs` and " +"``_PyObject_CallMethodIdObjArgs`` to use ``_PyObject_GetMethod`` to avoid " +"creating a bound method object in many cases. Patch by Michael J. Sullivan." +msgstr "" + +#: ../../../build/NEWS:9229 +msgid "" +":issue:`36974`: Implement :pep:`590`: Vectorcall: a fast calling protocol " +"for CPython. This is a new protocol to optimize calls of custom callable " +"objects." +msgstr "" + +#: ../../../build/NEWS:9233 +msgid "" +":issue:`36763`: ``Py_Main()`` now returns the exitcode rather than calling " +"``Py_Exit(exitcode)`` when calling ``PyErr_Print()`` if the current " +"exception type is ``SystemExit``." +msgstr "" + +#: ../../../build/NEWS:9237 +msgid "" +":issue:`36922`: Add new type flag ``Py_TPFLAGS_METHOD_DESCRIPTOR`` for " +"objects behaving like unbound methods. These are objects supporting the " +"optimization given by the ``LOAD_METHOD``/``CALL_METHOD`` opcodes. See PEP " +"590." +msgstr "" + +#: ../../../build/NEWS:9242 +msgid "" +":issue:`36728`: The :c:func:`PyEval_ReInitThreads` function has been removed" +" from the C API. It should not be called explicitly: use " +":c:func:`PyOS_AfterFork_Child` instead." +msgstr "" + +#: ../../../build/NEWS:9248 +msgid "Python 3.8.0 alpha 4" +msgstr "Python 3.8.0 alpha 4" + +#: ../../../build/NEWS:9250 +msgid "*Release date: 2019-05-06*" +msgstr "*发布日期: 2019-05-06*" + +#: ../../../build/NEWS:9255 +msgid "" +":issue:`36742`: Fixes mishandling of pre-normalization characters in " +"urlsplit()." +msgstr "" + +#: ../../../build/NEWS:9258 +msgid "" +":issue:`30458`: Address CVE-2019-9740 by disallowing URL paths with embedded" +" whitespace or control characters through into the underlying http client " +"request. Such potentially malicious header injection URLs now cause an " +"http.client.InvalidURL exception to be raised." +msgstr "" + +#: ../../../build/NEWS:9263 +msgid "" +":issue:`35755`: :func:`shutil.which` now uses ``os.confstr(\"CS_PATH\")`` if" +" available and if the :envvar:`PATH` environment variable is not set. Remove" +" also the current directory from :data:`posixpath.defpath`. On Unix, " +":func:`shutil.which` and the :mod:`subprocess` module no longer search the " +"executable in the current directory if the :envvar:`PATH` environment " +"variable is not set." +msgstr "" + +#: ../../../build/NEWS:9273 +msgid "" +":issue:`36722`: In debug build, import now also looks for C extensions " +"compiled in release mode and for C extensions compiled in the stable ABI." +msgstr "" + +#: ../../../build/NEWS:9276 +msgid "" +":issue:`32849`: Fix Python Initialization code on FreeBSD to detect properly" +" when stdin file descriptor (fd 0) is invalid." +msgstr "" + +#: ../../../build/NEWS:9279 +msgid "" +":issue:`36623`: Remove parser headers and related function declarations that" +" lack implementations after the removal of pgen." +msgstr "" + +#: ../../../build/NEWS:9282 +msgid "" +":issue:`20180`: ``dict.pop()`` is now up to 33% faster thanks to Argument " +"Clinic. Patch by Inada Naoki." +msgstr "" + +#: ../../../build/NEWS:9285 +msgid "" +":issue:`36611`: Debug memory allocators: disable serialno field by default " +"from debug hooks on Python memory allocators to reduce the memory footprint " +"by 5%. Enable :mod:`tracemalloc` to get the traceback where a memory block " +"has been allocated when a fatal memory error is logged to decide where to " +"put a breakpoint. Compile Python with ``PYMEM_DEBUG_SERIALNO`` defined to " +"get back the field." +msgstr "" + +#: ../../../build/NEWS:9292 +msgid "" +":issue:`36588`: On AIX, :attr:`sys.platform` doesn't contain the major " +"version anymore. Always return ``'aix'``, instead of ``'aix3'`` .. " +"``'aix7'``. Since older Python versions include the version number, it is " +"recommended to always use ``sys.platform.startswith('aix')``. Contributed by" +" M. Felt." +msgstr "" + +#: ../../../build/NEWS:9297 +msgid "" +":issue:`36549`: Change str.capitalize to use titlecase for the first " +"character instead of uppercase." +msgstr "" + +#: ../../../build/NEWS:9300 +msgid "" +":issue:`36540`: Implement :pep:`570` (Python positional-only parameters). " +"Patch by Pablo Galindo." +msgstr "" + +#: ../../../build/NEWS:9303 +msgid "" +":issue:`36475`: :c:func:`PyEval_AcquireLock` and " +":c:func:`PyEval_AcquireThread` now terminate the current thread if called " +"while the interpreter is finalizing, making them consistent with " +":c:func:`PyEval_RestoreThread`, :c:func:`Py_END_ALLOW_THREADS`, and " +":c:func:`PyGILState_Ensure`." +msgstr "" + +#: ../../../build/NEWS:9308 +msgid "" +":issue:`36504`: Fix signed integer overflow in _ctypes.c's " +"``PyCArrayType_new()``." +msgstr "" + +#: ../../../build/NEWS:9311 +msgid "" +":issue:`20844`: Fix running script with encoding cookie and LF line ending " +"may fail on Windows." +msgstr "" + +#: ../../../build/NEWS:9314 +msgid "" +":issue:`24214`: Fixed support of the surrogatepass error handler in the " +"UTF-8 incremental decoder." +msgstr "" + +#: ../../../build/NEWS:9317 +msgid "" +":issue:`36452`: Changing ``dict`` keys during iteration of the dict itself, " +"``keys()``, ``values()``, or ``items()`` will now be detected in certain " +"corner cases where keys are deleted/added so that the number of keys isn't " +"changed. A `RuntimeError` will be raised after ``len(dict)`` iterations. " +"Contributed by Thomas Perl." +msgstr "" + +#: ../../../build/NEWS:9323 +msgid "" +":issue:`36459`: Fix a possible double ``PyMem_FREE()`` due to tokenizer.c's " +"``tok_nextc()``." +msgstr "" + +#: ../../../build/NEWS:9326 +msgid ":issue:`36433`: Fixed TypeError message in classmethoddescr_call." +msgstr "" + +#: ../../../build/NEWS:9328 +msgid "" +":issue:`36430`: Fix a possible reference leak in :func:`itertools.count`." +msgstr "" + +#: ../../../build/NEWS:9330 +msgid "" +":issue:`36440`: Include node names in ``ParserError`` messages, instead of " +"numeric IDs. Patch by A. Skrobov." +msgstr "" + +#: ../../../build/NEWS:9333 +msgid "" +":issue:`36143`: Regenerate :mod:`keyword` from the Grammar and Tokens file " +"using pgen. Patch by Pablo Galindo." +msgstr "" + +#: ../../../build/NEWS:9336 +msgid "" +":issue:`18372`: Add missing :c:func:`PyObject_GC_Track` calls in the " +":mod:`pickle` module. Patch by Zackery Spytz." +msgstr "" + +#: ../../../build/NEWS:9342 +msgid ":issue:`35952`: Fix pythoninfo when the compiler is missing." +msgstr "" + +#: ../../../build/NEWS:9344 +msgid "" +":issue:`28238`: The ``.find*()`` methods of xml.etree.ElementTree can now " +"search for wildcards like ``{*}tag`` and ``{ns}*`` that match a tag in any " +"namespace or all tags in a namespace. Patch by Stefan Behnel." +msgstr "" + +#: ../../../build/NEWS:9348 +msgid "" +":issue:`26978`: `pathlib.path.link_to()` is now implemented. It creates a " +"hard link pointing to a path." +msgstr "" + +#: ../../../build/NEWS:9351 +msgid "" +":issue:`1613500`: :class:`fileinput.FileInput` now uses the input file mode " +"to correctly set the output file mode (previously it was hardcoded to " +"``'w'``) when ``inplace=True`` is passed to its constructor." +msgstr "" + +#: ../../../build/NEWS:9355 +msgid "" +":issue:`36734`: Fix compilation of ``faulthandler.c`` on HP-UX. Initialize " +"``stack_t current_stack`` to zero using ``memset()``." +msgstr "" + +#: ../../../build/NEWS:9358 +msgid "" +":issue:`13611`: The xml.etree.ElementTree packages gained support for C14N " +"2.0 serialisation. Patch by Stefan Behnel." +msgstr "" + +#: ../../../build/NEWS:9361 +msgid "" +":issue:`36669`: Add missing matrix multiplication operator support to " +"weakref.proxy." +msgstr "" + +#: ../../../build/NEWS:9364 +msgid "" +":issue:`36676`: The XMLParser() in xml.etree.ElementTree provides namespace " +"prefix context to the parser target if it defines the callback methods " +"\"start_ns()\" and/or \"end_ns()\". Patch by Stefan Behnel." +msgstr "" + +#: ../../../build/NEWS:9368 +msgid "" +":issue:`36673`: The TreeBuilder and XMLPullParser in xml.etree.ElementTree " +"gained support for parsing comments and processing instructions. Patch by " +"Stefan Behnel." +msgstr "" + +#: ../../../build/NEWS:9372 +msgid "" +":issue:`36650`: The C version of functools.lru_cache() was treating calls " +"with an empty ``**kwargs`` dictionary as being distinct from calls with no " +"keywords at all. This did not result in an incorrect answer, but it did " +"trigger an unexpected cache miss." +msgstr "" + +#: ../../../build/NEWS:9377 +msgid "" +":issue:`28552`: Fix :mod:`distutils.sysconfig` if :data:`sys.executable` is " +"``None`` or an empty string: use :func:`os.getcwd` to initialize " +"``project_base``. Fix also the distutils build command: don't use " +":data:`sys.executable` if it is ``None`` or an empty string." +msgstr "" + +#: ../../../build/NEWS:9382 +msgid "" +":issue:`35755`: :func:`shutil.which` and " +":func:`distutils.spawn.find_executable` now use ``os.confstr(\"CS_PATH\")`` " +"if available instead of :data:`os.defpath`, if the ``PATH`` environment " +"variable is not set. Moreover, don't use ``os.confstr(\"CS_PATH\")`` nor " +":data:`os.defpath` if the ``PATH`` environment variable is set to an empty " +"string." +msgstr "" + +#: ../../../build/NEWS:9389 +msgid ":issue:`25430`: improve performance of ``IPNetwork.__contains__()``" +msgstr "" + +#: ../../../build/NEWS:9391 +msgid "" +":issue:`30485`: Path expressions in xml.etree.ElementTree can now avoid " +"explicit namespace prefixes for tags (or the \"{namespace}tag\" notation) by" +" passing a default namespace with an empty string prefix." +msgstr "" + +#: ../../../build/NEWS:9395 +msgid "" +":issue:`36613`: Fix :mod:`asyncio` wait() not removing callback if exception" +msgstr "" + +#: ../../../build/NEWS:9397 +msgid "" +":issue:`36598`: Fix ``isinstance`` check for Mock objects with spec when the" +" code is executed under tracing. Patch by Karthikeyan Singaravelan." +msgstr "" + +#: ../../../build/NEWS:9400 +msgid "" +":issue:`18748`: In development mode (:option:`-X` ``dev``) and in debug " +"build, the :class:`io.IOBase` destructor now logs ``close()`` exceptions. " +"These exceptions are silent by default in release mode." +msgstr "" + +#: ../../../build/NEWS:9404 +msgid "" +":issue:`36575`: The ``_lsprof`` module now uses internal timer same to " +"``time.perf_counter()`` by default. ``gettimeofday(2)`` was used on Unix. " +"New timer has better resolution on most Unix platforms and timings are no " +"longer impacted by system clock updates since ``perf_counter()`` is " +"monotonic. Patch by Inada Naoki." +msgstr "" + +#: ../../../build/NEWS:9410 +msgid "" +":issue:`33461`: ``json.loads`` now emits ``DeprecationWarning`` when " +"``encoding`` option is specified. Patch by Matthias Bussonnier." +msgstr "" + +#: ../../../build/NEWS:9413 +msgid "" +":issue:`36559`: The random module now prefers the lean internal _sha512 " +"module over hashlib for seed(version=2) to optimize import time." +msgstr "" + +#: ../../../build/NEWS:9416 +msgid "" +":issue:`17561`: Set backlog=None as the default for socket.create_server." +msgstr "" + +#: ../../../build/NEWS:9418 +msgid "" +":issue:`34373`: Fix :func:`time.mktime` error handling on AIX for year " +"before 1970." +msgstr "" + +#: ../../../build/NEWS:9421 +msgid "" +":issue:`36232`: Improve error message when trying to open existing DBM " +"database that actually doesn't exist. Patch by Marco Rougeth." +msgstr "" + +#: ../../../build/NEWS:9424 +msgid ":issue:`36546`: Add statistics.quantiles()" +msgstr "" + +#: ../../../build/NEWS:9426 +msgid "" +":issue:`36050`: Optimized ``http.client.HTTPResponse.read()`` for large " +"response. Patch by Inada Naoki." +msgstr "" + +#: ../../../build/NEWS:9429 +msgid "" +":issue:`36522`: If *debuglevel* is set to >0 in :mod:`http.client`, print " +"all values for headers with multiple values for the same header name. Patch " +"by Matt Houglum." +msgstr "" + +#: ../../../build/NEWS:9433 +msgid "" +":issue:`36492`: Deprecated passing required arguments like *func* as keyword" +" arguments in functions which should accept arbitrary keyword arguments and " +"pass them to other function. Arbitrary keyword arguments (even with names " +"\"self\" and \"func\") can now be passed to these functions if the required " +"arguments are passed as positional arguments." +msgstr "" + +#: ../../../build/NEWS:9439 +msgid ":issue:`27181`: Add statistics.geometric_mean()." +msgstr "" + +#: ../../../build/NEWS:9441 +msgid "" +":issue:`30427`: ``os.path.normcase()`` relies on ``os.fspath()`` to check " +"the type of its argument. Redundant checks have been removed from its " +"``posixpath.normcase()`` and ``ntpath.normcase()`` implementations. Patch by" +" Wolfgang Maier." +msgstr "" + +#: ../../../build/NEWS:9446 +msgid "" +":issue:`36385`: Stop rejecting IPv4 octets for being ambiguously octal. " +"Leading zeros are ignored, and no longer are assumed to specify octal " +"octets. Octets are always decimal numbers. Octets must still be no more than" +" three digits, including leading zeroes." +msgstr "" + +#: ../../../build/NEWS:9451 +msgid "" +":issue:`36434`: Errors during writing to a ZIP file no longer prevent to " +"properly close it." +msgstr "" + +#: ../../../build/NEWS:9454 +msgid "" +":issue:`36407`: Fixed wrong indentation writing for CDATA section in " +"xml.dom.minidom. Patch by Vladimir Surjaninov." +msgstr "" + +#: ../../../build/NEWS:9457 +msgid "" +":issue:`36326`: inspect.getdoc() can now find docstrings for member objects " +"when __slots__ is a dictionary." +msgstr "" + +#: ../../../build/NEWS:9460 +msgid "" +":issue:`36366`: Calling ``stop()`` on an unstarted or stopped " +":func:`unittest.mock.patch` object will now return `None` instead of raising" +" :exc:`RuntimeError`, making the method idempotent. Patch by Karthikeyan " +"Singaravelan." +msgstr "" + +#: ../../../build/NEWS:9465 +msgid "" +":issue:`36348`: The :meth:`imap.IMAP4.logout` method no longer ignores " +"silently arbitrary exceptions." +msgstr "" + +#: ../../../build/NEWS:9468 +msgid "" +":issue:`31904`: Add time module support and fix test_time faiures for " +"VxWorks." +msgstr "" + +#: ../../../build/NEWS:9470 +msgid "" +":issue:`36227`: Added support for keyword arguments `default_namespace` and " +"`xml_declaration` in functions ElementTree.tostring() and " +"ElementTree.tostringlist()." +msgstr "" + +#: ../../../build/NEWS:9474 +msgid "" +":issue:`36004`: Added new alternate constructors " +":meth:`datetime.date.fromisocalendar` and " +":meth:`datetime.datetime.fromisocalendar`, which construct date objects from" +" ISO year, week number and weekday; these are the inverse of each class's " +"``isocalendar`` method. Patch by Paul Ganssle." +msgstr "" + +#: ../../../build/NEWS:9480 +msgid "" +":issue:`35936`: :mod:`modulefinder` no longer depends on the deprecated " +":mod:`imp` module, and the initializer for " +":class:`modulefinder.ModuleFinder` now has immutable default arguments. " +"Patch by Brandt Bucher." +msgstr "" + +#: ../../../build/NEWS:9485 +msgid "" +":issue:`35376`: :mod:`modulefinder` correctly handles modules that have the " +"same name as a bad package. Patch by Brandt Bucher." +msgstr "" + +#: ../../../build/NEWS:9488 +msgid "" +":issue:`17396`: :mod:`modulefinder` no longer crashes when encountering " +"syntax errors in followed imports. Patch by Brandt Bucher." +msgstr "" + +#: ../../../build/NEWS:9491 +msgid "" +":issue:`35934`: Added :meth:`~socket.create_server()` and " +":meth:`~socket.has_dualstack_ipv6()` convenience functions to automate the " +"necessary tasks usually involved when creating a server socket, including " +"accepting both IPv4 and IPv6 connections on the same socket. (Contributed " +"by Giampaolo Rodola in :issue:`17561`.)" +msgstr "" + +#: ../../../build/NEWS:9497 +msgid "" +":issue:`23078`: Add support for :func:`classmethod` and :func:`staticmethod`" +" to :func:`unittest.mock.create_autospec`. Initial patch by Felipe Ochoa." +msgstr "" + +#: ../../../build/NEWS:9500 +msgid "" +":issue:`35416`: Fix potential resource warnings in distutils. Patch by " +"Mickaël Schoentgen." +msgstr "" + +#: ../../../build/NEWS:9503 +msgid "" +":issue:`25451`: Add transparency methods to :class:`tkinter.PhotoImage`. " +"Patch by Zackery Spytz." +msgstr "" + +#: ../../../build/NEWS:9506 +msgid "" +":issue:`35082`: Don't return deleted attributes when calling dir on a " +":class:`unittest.mock.Mock`." +msgstr "" + +#: ../../../build/NEWS:9509 +msgid "" +":issue:`34547`: :class:`wsgiref.handlers.BaseHandler` now handles abrupt " +"client connection terminations gracefully. Patch by Petter Strandmark." +msgstr "" + +#: ../../../build/NEWS:9512 +msgid "" +":issue:`31658`: :func:`xml.sax.parse` now supports :term:`path-like `. Patch by Mickaël Schoentgen." +msgstr "" + +#: ../../../build/NEWS:9515 +msgid ":issue:`34139`: Remove stale unix datagram socket before binding" +msgstr "" + +#: ../../../build/NEWS:9517 +msgid "" +":issue:`33530`: Implemented Happy Eyeballs in `asyncio.create_connection()`." +" Added two new arguments, *happy_eyeballs_delay* and *interleave*, to " +"specify Happy Eyeballs behavior." +msgstr "" + +#: ../../../build/NEWS:9521 +msgid "" +":issue:`33291`: Do not raise AttributeError when calling the inspect " +"functions isgeneratorfunction, iscoroutinefunction, isasyncgenfunction on a " +"method created from an arbitrary callable. Instead, return False." +msgstr "" + +#: ../../../build/NEWS:9525 +msgid "" +":issue:`31310`: Fix the multiprocessing.semaphore_tracker so it is reused by" +" child processes" +msgstr "" + +#: ../../../build/NEWS:9528 +msgid "" +":issue:`31292`: Fix ``setup.py check --restructuredtext`` for files " +"containing ``include`` directives." +msgstr "" + +#: ../../../build/NEWS:9534 +msgid "" +":issue:`36625`: Remove obsolete comments from docstrings in " +"fractions.Fraction" +msgstr "" + +#: ../../../build/NEWS:9536 +msgid ":issue:`30840`: Document relative imports" +msgstr "" + +#: ../../../build/NEWS:9538 +msgid ":issue:`36523`: Add docstring for io.IOBase.writelines()." +msgstr "" + +#: ../../../build/NEWS:9540 +msgid "" +":issue:`36425`: New documentation translation: `Simplified Chinese " +"`_." +msgstr "" + +#: ../../../build/NEWS:9543 +msgid "" +":issue:`36345`: Avoid the duplication of code from " +"``Tools/scripts/serve.py`` in using the :rst:dir:`literalinclude` directive " +"for the basic wsgiref-based web server in the documentation of " +":mod:`wsgiref`. Contributed by Stéphane Wirtel." +msgstr "" + +#: ../../../build/NEWS:9548 +msgid "" +":issue:`36345`: Using the code of the ``Tools/scripts/serve.py`` script as " +"an example in the :mod:`wsgiref` documentation. Contributed by Stéphane " +"Wirtel." +msgstr "" + +#: ../../../build/NEWS:9552 +msgid ":issue:`36157`: Added Documention for PyInterpreterState_Main()." +msgstr "" + +#: ../../../build/NEWS:9554 +msgid "" +":issue:`33043`: Updates the docs.python.org page with the addition of a " +"'Contributing to Docs' link at the end of the page (between 'Reporting Bugs'" +" and 'About Documentation'). Updates the 'Found a Bug' page with additional " +"links and information in the Documentation Bugs section." +msgstr "" + +#: ../../../build/NEWS:9559 +msgid "" +":issue:`35581`: @typing.type_check_only now allows type stubs to mark " +"functions and classes not available during runtime." +msgstr "" + +#: ../../../build/NEWS:9562 +msgid ":issue:`33832`: Add glossary entry for 'magic method'." +msgstr "" + +#: ../../../build/NEWS:9564 +msgid ":issue:`32913`: Added re.Match.groupdict example to regex HOWTO." +msgstr "" + +#: ../../../build/NEWS:9569 +msgid "" +":issue:`36719`: regrtest now always detects uncollectable objects. " +"Previously, the check was only enabled by ``--findleaks``. The check now " +"also works with ``-jN/--multiprocess N``. ``--findleaks`` becomes a " +"deprecated alias to ``--fail-env-changed``." +msgstr "" + +#: ../../../build/NEWS:9574 +msgid "" +":issue:`36725`: When using multiprocessing mode (-jN), regrtest now better " +"reports errors if a worker process fails, and it exits immediately on a " +"worker thread failure or when interrupted." +msgstr "" + +#: ../../../build/NEWS:9578 +msgid "" +":issue:`36454`: Change test_time.test_monotonic() to test only the lower " +"bound of elapsed time after a sleep command rather than the upper bound. " +"This prevents unnecessary test failures on slow buildbots. Patch by Victor " +"Stinner." +msgstr "" + +#: ../../../build/NEWS:9583 +msgid "" +":issue:`32424`: Improve test coverage for xml.etree.ElementTree. Patch by " +"Gordon P. Hemsley." +msgstr "" + +#: ../../../build/NEWS:9586 +msgid "" +":issue:`32424`: Fix typo in test_cyclic_gc() test for xml.etree.ElementTree." +" Patch by Gordon P. Hemsley." +msgstr "" + +#: ../../../build/NEWS:9589 +msgid "" +":issue:`36635`: Add a new :mod:`_testinternalcapi` module to test the " +"internal C API." +msgstr "" + +#: ../../../build/NEWS:9592 +msgid "" +":issue:`36629`: Fix ``test_imap4_host_default_value()`` of ``test_imaplib``:" +" catch also :data:`errno.ENETUNREACH` error." +msgstr "" + +#: ../../../build/NEWS:9595 +msgid "" +":issue:`36611`: Fix ``test_sys.test_getallocatedblocks()`` when " +":mod:`tracemalloc` is enabled." +msgstr "" + +#: ../../../build/NEWS:9598 +msgid "" +":issue:`36560`: Fix reference leak hunting in regrtest: compute also deltas " +"(of reference count, allocated memory blocks, file descriptor count) during " +"warmup, to ensure that everything is initialized before starting to hunt " +"reference leaks." +msgstr "" + +#: ../../../build/NEWS:9603 +msgid "" +":issue:`36565`: Fix reference hunting (``python3 -m test -R 3:3``) when " +"Python has no built-in abc module." +msgstr "" + +#: ../../../build/NEWS:9606 +msgid "" +":issue:`31904`: Port test_resource to VxWorks: skip tests cases setting " +"RLIMIT_FSIZE and RLIMIT_CPU." +msgstr "" + +#: ../../../build/NEWS:9609 +msgid "" +":issue:`31904`: Fix test_tabnanny on VxWorks: adjust ENOENT error message." +msgstr "" + +#: ../../../build/NEWS:9611 +msgid "" +":issue:`36436`: Fix ``_testcapi.pymem_buffer_overflow()``: handle memory " +"allocation failure." +msgstr "" + +#: ../../../build/NEWS:9614 +msgid "" +":issue:`31904`: Fix test_utf8_mode on VxWorks: Python always use UTF-8 on " +"VxWorks." +msgstr "" + +#: ../../../build/NEWS:9617 +msgid "" +":issue:`36341`: Fix tests that may fail with PermissionError upon calling " +"bind() on AF_UNIX sockets." +msgstr "" + +#: ../../../build/NEWS:9623 +msgid ":issue:`36747`: Remove the stale scriptsinstall Makefile target." +msgstr "" + +#: ../../../build/NEWS:9625 +msgid "" +":issue:`21536`: On Unix, C extensions are no longer linked to libpython " +"except on Android and Cygwin." +msgstr "" + +#: ../../../build/NEWS:9628 +msgid "" +"It is now possible for a statically linked Python to load a C extension " +"built using a shared library Python." +msgstr "通过共享库的 Python 构建的 C 扩展现在可以被静态链接的 Python 加载了。" + +#: ../../../build/NEWS:9631 +msgid "" +"When Python is embedded, ``libpython`` must not be loaded with " +"``RTLD_LOCAL``, but ``RTLD_GLOBAL`` instead. Previously, using " +"``RTLD_LOCAL``, it was already not possible to load C extensions which were " +"not linked to ``libpython``, such as C extensions of the standard library " +"built by the ``*shared*`` section of ``Modules/Setup``." +msgstr "" + +#: ../../../build/NEWS:9637 +msgid "distutils, python-config and python-config.py have been modified." +msgstr "distutils,python-config 和 python-config.py 已被修改。" + +#: ../../../build/NEWS:9639 +msgid "" +":issue:`36707`: ``./configure --with-pymalloc`` no longer adds the ``m`` " +"flag to SOABI (sys.implementation.cache_tag). Enabling or disabling pymalloc" +" has no impact on the ABI." +msgstr "" + +#: ../../../build/NEWS:9643 +msgid "" +":issue:`36635`: Change ``PyAPI_FUNC(type)``, ``PyAPI_DATA(type)`` and " +"``PyMODINIT_FUNC`` macros of ``pyport.h`` when ``Py_BUILD_CORE_MODULE`` is " +"defined. The ``Py_BUILD_CORE_MODULE`` define must be now be used to build a " +"C extension as a dynamic library accessing Python internals: export the " +"PyInit_xxx() function in DLL exports on Windows." +msgstr "" + +#: ../../../build/NEWS:9649 +msgid ":issue:`31904`: Don't build the ``_crypt`` extension on VxWorks." +msgstr "" + +#: ../../../build/NEWS:9651 +msgid "" +":issue:`36618`: Add ``-fmax-type-align=8`` to CFLAGS when clang compiler is " +"detected. The pymalloc memory allocator aligns memory on 8 bytes. On x86-64," +" clang expects alignment on 16 bytes by default and so uses MOVAPS " +"instruction which can lead to segmentation fault. Instruct clang that Python" +" is limited to alignment on 8 bytes to use MOVUPS instruction instead: " +"slower but don't trigger a SIGSEGV if the memory is not aligned on 16 bytes." +" Sadly, the flag must be added to ``CFLAGS`` and not just ``CFLAGS_NODIST``," +" since third party C extensions can have the same issue." +msgstr "" + +#: ../../../build/NEWS:9660 +msgid "" +":issue:`36605`: ``make tags`` and ``make TAGS`` now also parse " +"``Modules/_io/*.c`` and ``Modules/_io/*.h``." +msgstr "" + +#: ../../../build/NEWS:9663 +msgid "" +":issue:`36465`: Release builds and debug builds are now ABI compatible: " +"defining the ``Py_DEBUG`` macro no longer implies the ``Py_TRACE_REFS`` " +"macro, which introduces the only ABI incompatibility. The ``Py_TRACE_REFS`` " +"macro, which adds the :func:`sys.getobjects` function and the " +":envvar:`PYTHONDUMPREFS` environment variable, can be set using the new " +"``./configure --with-trace-refs`` build option." +msgstr "" + +#: ../../../build/NEWS:9670 +msgid "" +":issue:`36577`: setup.py now correctly reports missing OpenSSL headers and " +"libraries again." +msgstr "" + +#: ../../../build/NEWS:9673 +msgid "" +":issue:`36544`: Fix regression introduced in :issue:`36146` refactoring " +"setup.py" +msgstr "" + +#: ../../../build/NEWS:9675 +msgid "" +":issue:`36508`: ``python-config --ldflags`` no longer includes flags of the " +"``LINKFORSHARED`` variable. The ``LINKFORSHARED`` variable must only be used" +" to build executables." +msgstr "" + +#: ../../../build/NEWS:9679 +msgid ":issue:`36503`: Remove references to \"aix3\" and \"aix4\". Patch by M. Felt." +msgstr "" + +#: ../../../build/NEWS:9684 +msgid "" +":issue:`35920`: Added platform.win32_edition() and platform.win32_is_iot(). " +"Added support for cross-compiling packages for Windows ARM32. Skip tests " +"that are not expected to work on Windows IoT Core ARM32." +msgstr "" + +#: ../../../build/NEWS:9688 +msgid "" +":issue:`36649`: Remove trailing spaces for registry keys when installed via " +"the Store." +msgstr "" + +#: ../../../build/NEWS:9691 +msgid "" +":issue:`34144`: Fixed activate.bat to correctly update codepage when " +"chcp.com returns dots in output. Patch by Lorenz Mende." +msgstr "" + +#: ../../../build/NEWS:9694 +msgid "" +":issue:`36509`: Added preset-iot layout for Windows IoT ARM containers. This" +" layout doesn't contain UI components like tkinter or IDLE. It also doesn't " +"contain files to support on-target builds since Windows ARM32 builds must be" +" cross-compiled when using MSVC." +msgstr "" + +#: ../../../build/NEWS:9699 +msgid "" +":issue:`35941`: enum_certificates function of the ssl module now returns " +"certificates from all available certificate stores inside windows in a query" +" instead of returning only certificates from the system wide certificate " +"store. This includes certificates from these certificate stores: local " +"machine, local machine enterprise, local machine group policy, current user," +" current user group policy, services, users. ssl.enum_crls() function is " +"changed in the same way to return all certificate revocation lists inside " +"the windows certificate revocation list stores." +msgstr "" + +#: ../../../build/NEWS:9709 +msgid "" +":issue:`36441`: Fixes creating a venv when debug binaries are installed." +msgstr "" + +#: ../../../build/NEWS:9711 +msgid "" +":issue:`36085`: Enable better DLL resolution on Windows by using safe DLL " +"search paths and adding :func:`os.add_dll_directory`." +msgstr "" + +#: ../../../build/NEWS:9714 +msgid "" +":issue:`36010`: Add the venv standard library module to the nuget " +"distribution for Windows." +msgstr "" + +#: ../../../build/NEWS:9717 +msgid "" +":issue:`29515`: Add the following socket module constants on Windows: " +"IPPROTO_AH IPPROTO_CBT IPPROTO_DSTOPTS IPPROTO_EGP IPPROTO_ESP " +"IPPROTO_FRAGMENT IPPROTO_GGP IPPROTO_HOPOPTS IPPROTO_ICLFXBM IPPROTO_ICMPV6 " +"IPPROTO_IDP IPPROTO_IGMP IPPROTO_IGP IPPROTO_IPV4 IPPROTO_IPV6 IPPROTO_L2TP " +"IPPROTO_MAX IPPROTO_ND IPPROTO_NONE IPPROTO_PGM IPPROTO_PIM IPPROTO_PUP " +"IPPROTO_RDP IPPROTO_ROUTING IPPROTO_SCTP IPPROTO_ST" +msgstr "" + +#: ../../../build/NEWS:9725 +msgid "" +":issue:`35947`: Added current version of libffi to cpython-source-deps. " +"Change _ctypes to use current version of libffi on Windows." +msgstr "" + +#: ../../../build/NEWS:9728 +msgid "" +":issue:`34060`: Report system load when running test suite on Windows. Patch" +" by Ammar Askar. Based on prior work by Jeremy Kloth." +msgstr "" + +#: ../../../build/NEWS:9731 +msgid "" +":issue:`31512`: With the Windows 10 Creators Update, non-elevated users can " +"now create symlinks as long as the computer has Developer Mode enabled." +msgstr "" + +#: ../../../build/NEWS:9737 +msgid "" +":issue:`34602`: Avoid failures setting macOS stack resource limit with " +"resource.setrlimit. This reverts an earlier fix for :issue:`18075` which " +"forced a non-default stack size when building the interpreter executable on " +"macOS." +msgstr "" + +#: ../../../build/NEWS:9745 +msgid "" +":issue:`36429`: Fix starting IDLE with pyshell. Add idlelib.pyshell alias at" +" top; remove pyshell alias at bottom. Remove obsolete __name__=='__main__' " +"command." +msgstr "" + +#: ../../../build/NEWS:9752 +msgid ":issue:`14546`: Fix the argument handling in Tools/scripts/lll.py." +msgstr "" + +#: ../../../build/NEWS:9757 +msgid "" +":issue:`36763`: Fix memory leak in :c:func:`Py_SetStandardStreamEncoding`: " +"release memory if the function is called twice." +msgstr "" + +#: ../../../build/NEWS:9760 +msgid "" +":issue:`36641`: :c:macro:`PyDoc_VAR(name)` and " +":c:macro:`PyDoc_STRVAR(name,str)` now create ``static const char name[]`` " +"instead of ``static char name[]``. Patch by Inada Naoki." +msgstr "" + +#: ../../../build/NEWS:9764 +msgid "" +":issue:`36389`: Change the value of ``CLEANBYTE``, ``DEADDYTE`` and " +"``FORBIDDENBYTE`` internal constants used by debug hooks on Python memory " +"allocators (:c:func:`PyMem_SetupDebugHooks` function). Byte patterns " +"``0xCB``, ``0xDB`` and ``0xFB`` have been replaced with ``0xCD``, ``0xDD`` " +"and ``0xFD`` to use the same values than Windows CRT debug ``malloc()`` and " +"``free()``." +msgstr "" + +#: ../../../build/NEWS:9771 +msgid "" +":issue:`36443`: Since Python 3.7.0, calling :c:func:`Py_DecodeLocale` before" +" :c:func:`Py_Initialize` produces mojibake if the ``LC_CTYPE`` locale is " +"coerced and/or if the UTF-8 Mode is enabled by the user configuration. The " +"LC_CTYPE coercion and UTF-8 Mode are now disabled by default to fix the " +"mojibake issue. They must now be enabled explicitly (opt-in) using the new " +":c:func:`_Py_PreInitialize` API with ``_PyPreConfig``." +msgstr "" + +#: ../../../build/NEWS:9778 +msgid "" +":issue:`36025`: Fixed an accidental change to the datetime C API where the " +"arguments to the :c:func:`PyDate_FromTimestamp` function were incorrectly " +"interpreted as a single timestamp rather than an arguments tuple, which " +"causes existing code to start raising :exc:`TypeError`. The backwards-" +"incompatible change was only present in alpha releases of Python 3.8. Patch " +"by Paul Ganssle." +msgstr "" + +#: ../../../build/NEWS:9785 +msgid "" +":issue:`35810`: Modify ``PyObject_Init`` to correctly increase the refcount " +"of heap- allocated Type objects. Also fix the refcounts of the heap-" +"allocated types that were either doing this manually or not decreasing the " +"type's refcount in tp_dealloc" +msgstr "" + +#: ../../../build/NEWS:9792 +msgid "Python 3.8.0 alpha 3" +msgstr "Python 3.8.0 alpha 3" + +#: ../../../build/NEWS:9794 +msgid "*Release date: 2019-03-25*" +msgstr "*发布日期: 2019-03-25*" + +#: ../../../build/NEWS:9799 +msgid "" +":issue:`36216`: Changes urlsplit() to raise ValueError when the URL contains" +" characters that decompose under IDNA encoding (NFKC-normalization) into " +"characters that affect how the URL is parsed." +msgstr "" + +#: ../../../build/NEWS:9803 +msgid "" +":issue:`35121`: Don't send cookies of domain A without Domain attribute to " +"domain B when domain A is a suffix match of domain B while using a cookiejar" +" with :class:`http.cookiejar.DefaultCookiePolicy` policy. Patch by " +"Karthikeyan Singaravelan." +msgstr "" + +#: ../../../build/NEWS:9811 +msgid "" +":issue:`36421`: Fix a possible double decref in _ctypes.c's " +"``PyCArrayType_new()``." +msgstr "" + +#: ../../../build/NEWS:9814 +msgid ":issue:`36412`: Fix a possible crash when creating a new dictionary." +msgstr "" + +#: ../../../build/NEWS:9816 +msgid ":issue:`36398`: Fix a possible crash in ``structseq_repr()``." +msgstr "" + +#: ../../../build/NEWS:9818 +msgid "" +":issue:`36256`: Fix bug in parsermodule when parsing a state in a DFA that " +"has two or more arcs with labels of the same type. Patch by Pablo Galindo." +msgstr "" + +#: ../../../build/NEWS:9821 +msgid ":issue:`36365`: repr(structseq) is no longer limited to 512 bytes." +msgstr "" + +#: ../../../build/NEWS:9823 +msgid "" +":issue:`36374`: Fix a possible null pointer dereference in " +"``merge_consts_recursive()``. Patch by Zackery Spytz." +msgstr "" + +#: ../../../build/NEWS:9826 +msgid "" +":issue:`36236`: At Python initialization, the current directory is no longer" +" prepended to :data:`sys.path` if it has been removed." +msgstr "" + +#: ../../../build/NEWS:9829 +msgid "" +":issue:`36352`: Python initialization now fails with an error, rather than " +"silently truncating paths, if a path is too long." +msgstr "" + +#: ../../../build/NEWS:9832 +msgid "" +":issue:`36301`: Python initialization now fails if decoding " +"``pybuilddir.txt`` configuration file fails at startup." +msgstr "" + +#: ../../../build/NEWS:9835 +msgid "" +":issue:`36333`: Fix leak in _PyRuntimeState_Fini. Contributed by Stéphane " +"Wirtel." +msgstr "" + +#: ../../../build/NEWS:9838 +msgid "" +":issue:`36332`: The builtin :func:`compile` can now handle AST objects that " +"contain assignment expressions. Patch by Pablo Galindo." +msgstr "" + +#: ../../../build/NEWS:9841 +msgid "" +":issue:`36282`: Improved error message for too much positional arguments in " +"some builtin functions." +msgstr "" + +#: ../../../build/NEWS:9844 +msgid "" +":issue:`30040`: New empty dict uses fewer memory for now. It used more " +"memory than empty dict created by ``dict.clear()``. And empty dict creation" +" and deletion is about 2x faster. Patch by Inada Naoki." +msgstr "" + +#: ../../../build/NEWS:9848 +msgid "" +":issue:`36262`: Fix an unlikely memory leak on conversion from string to " +"float in the function ``_Py_dg_strtod()`` used by ``float(str)``, " +"``complex(str)``, :func:`pickle.load`, :func:`marshal.load`, etc." +msgstr "" + +#: ../../../build/NEWS:9852 +msgid ":issue:`36252`: Update Unicode databases to version 12.0.0." +msgstr "" + +#: ../../../build/NEWS:9854 +msgid "" +":issue:`36218`: Fix a segfault occurring when sorting a list of " +"heterogeneous values. Patch contributed by Rémi Lapeyre and Elliot " +"Gorokhovsky." +msgstr "" + +#: ../../../build/NEWS:9857 +msgid "" +":issue:`36188`: Cleaned up left-over vestiges of Python 2 unbound method " +"handling in method objects and documentation. Patch by Martijn Pieters" +msgstr "" + +#: ../../../build/NEWS:9860 +msgid "" +":issue:`36124`: Add a new interpreter-specific dict and expose it in the " +"C-API via PyInterpreterState_GetDict(). This parallels " +"PyThreadState_GetDict(). However, extension modules should continue using " +"PyModule_GetState() for their own internal per-interpreter state." +msgstr "" + +#: ../../../build/NEWS:9865 +msgid "" +":issue:`35975`: Add a ``feature_version`` flag to ``ast.parse()`` " +"(documented) and ``compile()`` (hidden) that allows tweaking the parser to " +"support older versions of the grammar. In particular, if ``feature_version``" +" is 5 or 6, the hacks for the ``async`` and ``await`` keyword from PEP 492 " +"are reinstated. (For 7 or higher, these are unconditionally treated as " +"keywords, but they are still special tokens rather than ``NAME`` tokens that" +" the parser driver recognizes.)" +msgstr "" + +#: ../../../build/NEWS:9873 +msgid ":issue:`31904`: Use UTF-8 as the system encoding on VxWorks." +msgstr "" + +#: ../../../build/NEWS:9875 +msgid "" +":issue:`36048`: The :meth:`~object.__index__` special method will be used " +"instead of :meth:`~object.__int__` for implicit conversion of Python numbers" +" to C integers. Using the ``__int__()`` method in implicit conversions has " +"been deprecated." +msgstr "" + +#: ../../../build/NEWS:9880 +msgid "" +":issue:`35808`: Retire pgen and use a modified version of pgen2 to generate " +"the parser. Patch by Pablo Galindo." +msgstr "" + +#: ../../../build/NEWS:9886 +msgid "" +":issue:`36401`: The class documentation created by pydoc now has a separate " +"section for readonly properties." +msgstr "" + +#: ../../../build/NEWS:9889 +msgid "" +":issue:`36320`: The typing.NamedTuple() class has deprecated the " +"_field_types attribute in favor of the __annotations__ attribute which " +"carried the same information. Also, both attributes were converted from " +"OrderedDict to a regular dict." +msgstr "" + +#: ../../../build/NEWS:9894 +msgid "" +":issue:`34745`: Fix :mod:`asyncio` ssl memory issues caused by circular " +"references" +msgstr "" + +#: ../../../build/NEWS:9897 +msgid "" +":issue:`36324`: Add method to statistics.NormalDist for computing the " +"inverse cumulative normal distribution." +msgstr "" + +#: ../../../build/NEWS:9900 +msgid "" +":issue:`36321`: collections.namedtuple() misspelled the name of an " +"attribute. To be consistent with typing.NamedTuple, the attribute name " +"should have been \"_field_defaults\" instead of \"_fields_defaults\". For " +"backwards compatibility, both spellings are now created. The misspelled " +"version may be removed in the future." +msgstr "" + +#: ../../../build/NEWS:9906 +msgid "" +":issue:`36297`: \"unicode_internal\" codec is removed. It was deprecated " +"since Python 3.3. Patch by Inada Naoki." +msgstr "" + +#: ../../../build/NEWS:9909 +msgid "" +":issue:`36298`: Raise ModuleNotFoundError in pyclbr when a module can't be " +"found. Thanks to 'mental' for the bug report." +msgstr "" + +#: ../../../build/NEWS:9912 +msgid "" +":issue:`36268`: Switch the default format used for writing tars with " +"mod:`tarfile` to the modern POSIX.1-2001 pax standard, from the vendor-" +"specific GNU. Contributed by C.A.M. Gerlach." +msgstr "" + +#: ../../../build/NEWS:9916 +msgid "" +":issue:`36285`: Fix integer overflows in the array module. Patch by Stephan " +"Hohe." +msgstr "" + +#: ../../../build/NEWS:9919 +msgid ":issue:`31904`: Add _signal module support for VxWorks." +msgstr "" + +#: ../../../build/NEWS:9921 +msgid "" +":issue:`36272`: :mod:`logging` does not silently ignore RecursionError " +"anymore. Patch contributed by Rémi Lapeyre." +msgstr "" + +#: ../../../build/NEWS:9924 +msgid "" +":issue:`36280`: Add a kind field to ast.Constant. It is 'u' if the literal " +"has a 'u' prefix (i.e. a Python 2 style unicode literal), else None." +msgstr "" + +#: ../../../build/NEWS:9927 +msgid "" +":issue:`35931`: The :mod:`pdb` ``debug`` command now gracefully handles all " +"exceptions." +msgstr "" + +#: ../../../build/NEWS:9930 +msgid "" +":issue:`36251`: Fix format strings used for stderrprinter and re.Match " +"reprs. Patch by Stephan Hohe." +msgstr "" + +#: ../../../build/NEWS:9933 +msgid "" +":issue:`36235`: Fix ``CFLAGS`` in ``customize_compiler()`` of " +"``distutils.sysconfig``: when the ``CFLAGS`` environment variable is " +"defined, don't override ``CFLAGS`` variable with the ``OPT`` variable " +"anymore. Initial patch written by David Malcolm." +msgstr "" + +#: ../../../build/NEWS:9938 +msgid "" +":issue:`35807`: Update ensurepip to install pip 19.0.3 and setuptools " +"40.8.0." +msgstr "" + +#: ../../../build/NEWS:9940 +msgid ":issue:`36139`: Release GIL when closing :class:`~mmap.mmap` objects." +msgstr "" + +#: ../../../build/NEWS:9942 +msgid "" +":issue:`36179`: Fix two unlikely reference leaks in _hashopenssl. The leaks " +"only occur in out-of-memory cases." +msgstr "" + +#: ../../../build/NEWS:9945 +msgid "" +":issue:`36169`: Add overlap() method to statistics.NormalDist. Computes the" +" overlapping coefficient for two normal distributions." +msgstr "" + +#: ../../../build/NEWS:9948 +msgid "" +":issue:`36103`: Default buffer size used by ``shutil.copyfileobj()`` is " +"changed from 16 KiB to 64 KiB on non-Windows platform to reduce system call " +"overhead. Contributed by Inada Naoki." +msgstr "" + +#: ../../../build/NEWS:9952 +msgid "" +":issue:`36130`: Fix ``pdb`` with ``skip=...`` when stepping into a frame " +"without a ``__name__`` global. Patch by Anthony Sottile." +msgstr "" + +#: ../../../build/NEWS:9955 +msgid "" +":issue:`35652`: shutil.copytree(copy_function=...) erroneously pass DirEntry" +" instead of a path string." +msgstr "" + +#: ../../../build/NEWS:9958 +msgid "" +":issue:`35178`: Ensure custom :func:`warnings.formatwarning` function can " +"receive `line` as positional argument. Based on patch by Tashrif Billah." +msgstr "" + +#: ../../../build/NEWS:9961 +msgid "" +":issue:`36106`: Resolve potential name clash with libm's sinpi(). Patch by " +"Dmitrii Pasechnik." +msgstr "" + +#: ../../../build/NEWS:9964 +msgid "" +":issue:`36091`: Clean up reference to async generator in Lib/types. Patch by" +" Henry Chen." +msgstr "" + +#: ../../../build/NEWS:9967 +msgid "" +":issue:`36043`: :class:`FileCookieJar` supports :term:`path-like object`. " +"Contributed by Stéphane Wirtel" +msgstr "" + +#: ../../../build/NEWS:9970 +msgid "" +":issue:`35899`: Enum has been fixed to correctly handle empty strings and " +"strings with non-Latin characters (ie. 'α', 'א') without crashing. Original " +"patch contributed by Maxwell. Assisted by Stéphane Wirtel." +msgstr "" + +#: ../../../build/NEWS:9974 +msgid "" +":issue:`21269`: Add ``args`` and ``kwargs`` properties to mock call objects." +" Contributed by Kumar Akshay." +msgstr "" + +#: ../../../build/NEWS:9977 +msgid "" +":issue:`30670`: `pprint.pp` has been added to pretty-print objects with " +"dictionary keys being sorted with their insertion order by default. " +"Parameter *sort_dicts* has been added to `pprint.pprint`, `pprint.pformat` " +"and `pprint.PrettyPrinter`. Contributed by Rémi Lapeyre." +msgstr "" + +#: ../../../build/NEWS:9982 +msgid "" +":issue:`35843`: Implement ``__getitem__`` for ``_NamespacePath``. Patch by " +"Anthony Sottile." +msgstr "" + +#: ../../../build/NEWS:9985 +msgid "" +":issue:`35802`: Clean up code which checked presence of ``os.stat`` / " +"``os.lstat`` / ``os.chmod`` which are always present. Patch by Anthony " +"Sottile." +msgstr "" + +#: ../../../build/NEWS:9989 +msgid "" +":issue:`35715`: Librates the return value of a ProcessPoolExecutor " +"_process_worker after it's no longer needed to free memory" +msgstr "" + +#: ../../../build/NEWS:9992 +msgid "" +":issue:`35493`: Use :func:`multiprocessing.connection.wait` instead of " +"polling each 0.2 seconds for worker updates in " +":class:`multiprocessing.Pool`. Patch by Pablo Galindo." +msgstr "" + +#: ../../../build/NEWS:9996 +msgid ":issue:`35661`: Store the venv prompt in pyvenv.cfg." +msgstr "" + +#: ../../../build/NEWS:9998 +msgid "" +":issue:`35121`: Don't set cookie for a request when the request path is a " +"prefix match of the cookie's path attribute but doesn't end with \"/\". " +"Patch by Karthikeyan Singaravelan." +msgstr "" + +#: ../../../build/NEWS:10002 +msgid "" +":issue:`21478`: Calls to a child function created with " +":func:`unittest.mock.create_autospec` should propagate to the parent. Patch " +"by Karthikeyan Singaravelan." +msgstr "" + +#: ../../../build/NEWS:10006 +msgid ":issue:`35198`: Fix C++ extension compilation on AIX" +msgstr "" + +#: ../../../build/NEWS:10011 +msgid "" +":issue:`36329`: Declare the path of the Python binary for the usage of " +"``Tools/scripts/serve.py`` when executing ``make -C Doc/ serve``. " +"Contributed by Stéphane Wirtel" +msgstr "" + +#: ../../../build/NEWS:10015 +msgid "" +":issue:`36138`: Improve documentation about converting datetime.timedelta to" +" scalars." +msgstr "" + +#: ../../../build/NEWS:10018 +msgid "" +":issue:`21314`: A new entry was added to the Core Language Section of the " +"Programming FAQ, which explaines the usage of slash(/) in the signature of a" +" function. Patch by Lysandros Nikolaou" +msgstr "" + +#: ../../../build/NEWS:10025 +msgid "" +":issue:`36234`: test_posix.PosixUidGidTests: add tests for invalid uid/gid " +"type (str). Initial patch written by David Malcolm." +msgstr "" + +#: ../../../build/NEWS:10028 +msgid "" +":issue:`29571`: Fix ``test_re.test_locale_flag()``: use " +"``locale.getpreferredencoding()`` rather than ``locale.getlocale()`` to get " +"the locale encoding. With some locales, ``locale.getlocale()`` returns the " +"wrong encoding." +msgstr "" + +#: ../../../build/NEWS:10033 +msgid ":issue:`36123`: Fix race condition in test_socket." +msgstr "" + +#: ../../../build/NEWS:10038 +msgid "" +":issue:`36356`: Fix leaks that led to build failure when configured with " +"address sanitizer." +msgstr "" + +#: ../../../build/NEWS:10041 +msgid "" +":issue:`36146`: Add ``TEST_EXTENSIONS`` constant to ``setup.py`` to allow to" +" not build test extensions like ``_testcapi``." +msgstr "" + +#: ../../../build/NEWS:10044 +msgid "" +":issue:`36146`: Fix setup.py on macOS: only add ``/usr/include/ffi`` to " +"include directories of _ctypes, not for all extensions." +msgstr "" + +#: ../../../build/NEWS:10047 +msgid ":issue:`31904`: Enable build system to cross-build for VxWorks RTOS." +msgstr "" + +#: ../../../build/NEWS:10052 +msgid "" +":issue:`36312`: Fixed decoders for the following code pages: 50220, 50221, " +"50222, 50225, 50227, 50229, 57002 through 57011, 65000 and 42." +msgstr "" + +#: ../../../build/NEWS:10055 +msgid "" +":issue:`36264`: Don't honor POSIX ``HOME`` in ``os.path.expanduser`` on " +"windows. Patch by Anthony Sottile." +msgstr "" + +#: ../../../build/NEWS:10058 +msgid "" +":issue:`24643`: Fix name collisions due to ``#define timezone _timezone`` in" +" PC/pyconfig.h." +msgstr "" + +#: ../../../build/NEWS:10064 +msgid ":issue:`36405`: Use dict unpacking in idlelib." +msgstr "" + +#: ../../../build/NEWS:10066 +msgid "" +":issue:`36396`: Remove fgBg param of idlelib.config.GetHighlight(). This " +"param was only used twice and changed the return type." +msgstr "" + +#: ../../../build/NEWS:10069 +msgid "" +":issue:`36176`: Fix IDLE autocomplete & calltip popup colors. Prevent " +"conflicts with Linux dark themes (and slightly darken calltip background)." +msgstr "" + +#: ../../../build/NEWS:10072 +msgid "" +":issue:`23205`: For the grep module, add tests for findfiles, refactor " +"findfiles to be a module-level function, and refactor findfiles to use " +"os.walk." +msgstr "" + +#: ../../../build/NEWS:10076 +msgid ":issue:`23216`: Add docstrings to IDLE search modules." +msgstr "" + +#: ../../../build/NEWS:10078 +msgid "" +":issue:`36152`: Remove colorizer.ColorDelegator.close_when_done and the " +"corresponding argument of .close(). In IDLE, both have always been None or " +"False since 2007." +msgstr "" + +#: ../../../build/NEWS:10082 +msgid "" +":issue:`32129`: Avoid blurry IDLE application icon on macOS with Tk 8.6. " +"Patch by Kevin Walzer." +msgstr "" + +#: ../../../build/NEWS:10085 +msgid "" +":issue:`36096`: Refactor class variables to instance variables in colorizer." +msgstr "" + +#: ../../../build/NEWS:10087 +msgid "" +":issue:`30348`: Increase test coverage of idlelib.autocomplete by 30%. Patch" +" by Louie Lu" +msgstr "" + +#: ../../../build/NEWS:10093 +msgid "" +":issue:`35132`: Fix py-list and py-bt commands of python-gdb.py on gdb7." +msgstr "" + +#: ../../../build/NEWS:10095 +msgid ":issue:`32217`: Fix freeze script on Windows." +msgstr "" + +#: ../../../build/NEWS:10100 +msgid "" +":issue:`36381`: Raise ``DeprecationWarning`` when '#' formats are used for " +"building or parsing values without ``PY_SSIZE_T_CLEAN``." +msgstr "" + +#: ../../../build/NEWS:10103 +msgid "" +":issue:`36142`: The whole coreconfig.h header is now excluded from " +"Py_LIMITED_API. Move functions definitions into a new internal " +"pycore_coreconfig.h header." +msgstr "" + +#: ../../../build/NEWS:10109 +msgid "Python 3.8.0 alpha 2" +msgstr "Python 3.8.0 alpha 2" + +#: ../../../build/NEWS:10111 +msgid "*Release date: 2019-02-25*" +msgstr "*发布日期: 2019-02-25*" + +#: ../../../build/NEWS:10116 +msgid "" +":issue:`36052`: Raise a :exc:`SyntaxError` when assigning a value to " +"`__debug__` with the Assignment Operator. Contributed by Stéphane Wirtel and" +" Pablo Galindo." +msgstr "" + +#: ../../../build/NEWS:10120 +msgid "" +":issue:`36012`: Doubled the speed of class variable writes. When a non-" +"dunder attribute was updated, there was an unnecessary call to update slots." +msgstr "" + +#: ../../../build/NEWS:10123 +msgid "" +":issue:`35942`: The error message emitted when returning invalid types from " +"``__fspath__`` in interfaces that allow passing :class:`~os.PathLike` " +"objects has been improved and now it does explain the origin of the error." +msgstr "" + +#: ../../../build/NEWS:10127 +msgid "" +":issue:`36016`: ``gc.get_objects`` can now receive an optional parameter " +"indicating a generation to get objects from. Patch by Pablo Galindo." +msgstr "" + +#: ../../../build/NEWS:10130 +msgid "" +":issue:`1054041`: When the main interpreter exits due to an uncaught " +"KeyboardInterrupt, the process now exits in the appropriate manner for its " +"parent process to detect that a SIGINT or ^C terminated the process. This " +"allows shells and batch scripts to understand that the user has asked them " +"to stop." +msgstr "" + +#: ../../../build/NEWS:10136 +msgid "" +":issue:`35992`: Fix ``__class_getitem__()`` not being called on a class with" +" a custom non-subscriptable metaclass." +msgstr "" + +#: ../../../build/NEWS:10139 +msgid "" +":issue:`35993`: Fix a crash on fork when using subinterpreters. Contributed " +"by Stéphane Wirtel" +msgstr "" + +#: ../../../build/NEWS:10142 +msgid "" +":issue:`35991`: Fix a potential double free in Modules/_randommodule.c." +msgstr "" + +#: ../../../build/NEWS:10144 +msgid "" +":issue:`35961`: Fix a crash in slice_richcompare(): use strong references " +"rather than stolen references for the two temporary internal tuples." +msgstr "" + +#: ../../../build/NEWS:10147 +msgid "" +":issue:`35911`: Enable the creation of cell objects by adding a " +"``cell.__new__`` method, and expose the type ``cell`` in ``Lib/types.py`` " +"under the name CellType. Patch by Pierre Glaser." +msgstr "" + +#: ../../../build/NEWS:10151 +msgid "" +":issue:`12822`: Use monotonic clock for ``pthread_cond_timedwait`` when " +"``pthread_condattr_setclock`` and ``CLOCK_MONOTONIC`` are available." +msgstr "" + +#: ../../../build/NEWS:10154 +msgid "" +":issue:`15248`: The compiler emits now syntax warnings in the case when a " +"comma is likely missed before tuple or list." +msgstr "" + +#: ../../../build/NEWS:10157 +msgid "" +":issue:`35886`: The implementation of PyInterpreterState has been moved into" +" the internal header files (guarded by Py_BUILD_CORE)." +msgstr "" + +#: ../../../build/NEWS:10160 +msgid "" +":issue:`31506`: Clarify the errors reported when ``object.__new__`` and " +"``object.__init__`` receive more than one argument. Contributed by Sanyam " +"Khurana." +msgstr "" + +#: ../../../build/NEWS:10164 +msgid "" +":issue:`35724`: Signal-handling is now guaranteed to happen relative to the " +"main interpreter." +msgstr "" + +#: ../../../build/NEWS:10167 +msgid "" +":issue:`33608`: We added a new internal _Py_AddPendingCall() that operates " +"relative to the provided interpreter. This allows us to use the existing " +"implementation to ask another interpreter to do work that cannot be done in " +"the current interpreter, like decref an object the other interpreter owns. " +"The existing Py_AddPendingCall() only operates relative to the main " +"interpreter." +msgstr "" + +#: ../../../build/NEWS:10174 +msgid "" +":issue:`33989`: Fix a possible crash in :meth:`list.sort` when sorting " +"objects with ``ob_type->tp_richcompare == NULL``. Patch by Zackery Spytz." +msgstr "" + +#: ../../../build/NEWS:10180 +msgid "" +":issue:`35512`: :func:`unittest.mock.patch.dict` used as a decorator with " +"string target resolves the target during function call instead of during " +"decorator construction. Patch by Karthikeyan Singaravelan." +msgstr "" + +#: ../../../build/NEWS:10184 +msgid "" +":issue:`36018`: Add statistics.NormalDist, a tool for creating and " +"manipulating normal distributions of random variable. Features a composite " +"class that treats the mean and standard deviation of measurement data as " +"single entity." +msgstr "" + +#: ../../../build/NEWS:10189 +msgid "" +":issue:`35904`: Added statistics.fmean() as a faster, floating point variant" +" of the existing mean() function." +msgstr "" + +#: ../../../build/NEWS:10192 +msgid "" +":issue:`35918`: Removed broken ``has_key`` method from " +"multiprocessing.managers.SyncManager.dict. Contributed by Rémi Lapeyre." +msgstr "" + +#: ../../../build/NEWS:10195 +msgid ":issue:`18283`: Add support for bytes to :func:`shutil.which`." +msgstr "" + +#: ../../../build/NEWS:10197 +msgid "" +":issue:`35960`: Fix :func:`dataclasses.field` throwing away empty mapping " +"objects passed as metadata." +msgstr "" + +#: ../../../build/NEWS:10200 +msgid "" +":issue:`35500`: Write expected and actual call parameters on separate lines " +"in :meth:`unittest.mock.Mock.assert_called_with` assertion errors. " +"Contributed by Susan Su." +msgstr "" + +#: ../../../build/NEWS:10204 +msgid "" +":issue:`35931`: The :mod:`pdb` ``debug`` command now gracefully handles " +"syntax errors." +msgstr "" + +#: ../../../build/NEWS:10207 +msgid "" +":issue:`24209`: In http.server script, rely on getaddrinfo to bind to " +"preferred address based on the bind parameter. Now default bind or binding " +"to a name may bind to IPv6 or dual-stack, depending on the environment." +msgstr "" + +#: ../../../build/NEWS:10211 +msgid "" +":issue:`35321`: Set ``__spec__.origin`` of ``_frozen_importlib`` to frozen " +"so that it matches the behavior of ``_frozen_importlib_external``. Patch by" +" Nina Zakharenko." +msgstr "" + +#: ../../../build/NEWS:10215 +msgid "" +":issue:`35378`: Fix a reference issue inside :class:`multiprocessing.Pool` " +"that caused the pool to remain alive if it was deleted without being closed " +"or terminated explicitly. A new strong reference is added to the pool " +"iterators to link the lifetime of the pool to the lifetime of its iterators " +"so the pool does not get destroyed if a pool iterator is still alive." +msgstr "" + +#: ../../../build/NEWS:10222 +msgid "" +":issue:`34294`: re module, fix wrong capturing groups in rare cases. " +":func:`re.search`, :func:`re.findall`, :func:`re.sub` and other functions " +"that scan through string looking for a match, should reset capturing groups " +"between two match attempts. Patch by Ma Lin." +msgstr "" + +#: ../../../build/NEWS:10227 +msgid "" +":issue:`35615`: :mod:`weakref`: Fix a RuntimeError when copying a " +"WeakKeyDictionary or a WeakValueDictionary, due to some keys or values " +"disappearing while iterating." +msgstr "" + +#: ../../../build/NEWS:10231 +msgid "" +":issue:`35606`: Implement :func:`math.prod` as analogous function to " +":func:`sum` that returns the product of a 'start' value (default: 1) times " +"an iterable of numbers. Patch by Pablo Galindo." +msgstr "" + +#: ../../../build/NEWS:10235 +msgid "" +":issue:`32417`: Performing arithmetic between :class:`datetime.datetime` " +"subclasses and :class:`datetime.timedelta` now returns an object of the same" +" type as the :class:`datetime.datetime` subclass. As a result, " +":meth:`datetime.datetime.astimezone` and alternate constructors like " +":meth:`datetime.datetime.now` and :meth:`datetime.fromtimestamp` called with" +" a ``tz`` argument now *also* retain their subclass." +msgstr "" + +#: ../../../build/NEWS:10242 +msgid "" +":issue:`35153`: Add *headers* optional keyword-only parameter to " +":class:`xmlrpc.client.ServerProxy`, :class:`xmlrpc.client.Transport` and " +":class:`xmlrpc.client.SafeTransport`. Patch by Cédric Krier." +msgstr "" + +#: ../../../build/NEWS:10246 +msgid "" +":issue:`34572`: Fix C implementation of pickle.loads to use importlib's " +"locking mechanisms, and thereby avoid using partially-loaded modules. Patch " +"by Tim Burgess." +msgstr "" + +#: ../../../build/NEWS:10253 +msgid "" +":issue:`36083`: Fix formatting of --check-hash-based-pycs options in the " +"manpage Synopsis." +msgstr "" + +#: ../../../build/NEWS:10256 +msgid "" +":issue:`36007`: Bump minimum sphinx version to 1.8. Patch by Anthony " +"Sottile." +msgstr "" + +#: ../../../build/NEWS:10258 +msgid "" +":issue:`22062`: Update documentation and docstrings for pathlib. Original " +"patch by Mike Short." +msgstr "" + +#: ../../../build/NEWS:10264 +msgid "" +":issue:`27313`: Avoid test_ttk_guionly ComboboxTest failure with macOS Cocoa" +" Tk." +msgstr "" + +#: ../../../build/NEWS:10267 +msgid "" +":issue:`36019`: Add test.support.TEST_HTTP_URL and replace references of " +"http://www.example.com by this new constant. Contributed by Stéphane Wirtel." +msgstr "" + +#: ../../../build/NEWS:10271 +msgid "" +":issue:`36037`: Fix test_ssl for strict OpenSSL configuration like RHEL8 " +"strict crypto policy. Use older TLS version for minimum TLS version of the " +"server SSL context if needed, to test TLS version older than default minimum" +" TLS version." +msgstr "" + +#: ../../../build/NEWS:10276 +msgid ":issue:`35798`: Added :func:`test.support.check_syntax_warning`." +msgstr "" + +#: ../../../build/NEWS:10278 +msgid "" +":issue:`35505`: Make test_imap4_host_default_value independent on whether " +"the local IMAP server is running." +msgstr "" + +#: ../../../build/NEWS:10281 +msgid "" +":issue:`35917`: multiprocessing: provide unit tests for SyncManager and " +"SharedMemoryManager classes + all the shareable types which are supposed to " +"be supported by them. (patch by Giampaolo Rodola)" +msgstr "" + +#: ../../../build/NEWS:10285 +msgid "" +":issue:`35704`: Skip ``test_shutil.test_unpack_archive_xztar`` to prevent a " +"MemoryError on 32-bit AIX when MAXDATA setting is less than 0x20000000." +msgstr "" + +#: ../../../build/NEWS:10288 +msgid "Patch by Michael Felt (aixtools)" +msgstr "" + +#: ../../../build/NEWS:10290 +msgid "" +":issue:`34720`: Assert m_state != NULL to mimic GC traversal functions that " +"do not correctly handle module creation when the module state has not been " +"created." +msgstr "" + +#: ../../../build/NEWS:10297 +msgid "" +":issue:`35976`: Added ARM build support to Windows build files in PCBuild." +msgstr "" + +#: ../../../build/NEWS:10299 +msgid "" +":issue:`35692`: ``pathlib`` no longer raises when checking file and " +"directory existence on drives that are not ready" +msgstr "" + +#: ../../../build/NEWS:10302 +msgid "" +":issue:`35872`: Uses the base Python executable when invoking venv in a " +"virtual environment" +msgstr "" + +#: ../../../build/NEWS:10305 +msgid ":issue:`35873`: Prevents venv paths being inherited by child processes" +msgstr "" + +#: ../../../build/NEWS:10307 +msgid "" +":issue:`35299`: Fix sysconfig detection of the source directory and " +"distutils handling of pyconfig.h during PGO profiling" +msgstr "" + +#: ../../../build/NEWS:10313 +msgid ":issue:`24310`: IDLE -- Document settings dialog font tab sample." +msgstr "" + +#: ../../../build/NEWS:10315 +msgid "" +":issue:`35833`: Revise IDLE doc for control codes sent to Shell. Add a code " +"example block." +msgstr "" + +#: ../../../build/NEWS:10318 +msgid ":issue:`35689`: Add docstrings and unittests for colorizer.py." +msgstr "" + +#: ../../../build/NEWS:10322 +msgid "Python 3.8.0 alpha 1" +msgstr "Python 3.8.0 alpha 1" + +#: ../../../build/NEWS:10324 +msgid "*Release date: 2019-02-03*" +msgstr "*发布日期: 2019-02-03*" + +#: ../../../build/NEWS:10329 +msgid "" +":issue:`35746`: [CVE-2019-5010] Fix a NULL pointer deref in ssl module. The " +"cert parser did not handle CRL distribution points with empty DP or URI " +"correctly. A malicious or buggy certificate can result into segfault. " +"Vulnerability (TALOS-2018-0758) reported by Colin Read and Nicolas Edet of " +"Cisco." +msgstr "" + +#: ../../../build/NEWS:10335 +msgid "" +":issue:`34812`: The :option:`-I` command line option (run Python in isolated" +" mode) is now also copied by the :mod:`multiprocessing` and :mod:`distutils`" +" modules when spawning child processes. Previously, only :option:`-E` and " +":option:`-s` options (enabled by :option:`-I`) were copied." +msgstr "" + +#: ../../../build/NEWS:10341 +msgid "" +":issue:`34791`: The xml.sax and xml.dom.domreg no longer use environment " +"variables to override parser implementations when " +"sys.flags.ignore_environment is set by -E or -I arguments." +msgstr "" + +#: ../../../build/NEWS:10345 +msgid "" +":issue:`17239`: The xml.sax and xml.dom.minidom parsers no longer processes " +"external entities by default. External DTD and ENTITY declarations no longer" +" load files or create network connections." +msgstr "" + +#: ../../../build/NEWS:10349 +msgid "" +":issue:`34623`: CVE-2018-14647: The C accelerated _elementtree module now " +"initializes hash randomization salt from _Py_HashSecret instead of " +"libexpat's default CSPRNG." +msgstr "" + +#: ../../../build/NEWS:10353 +msgid ":issue:`34405`: Updated to OpenSSL 1.1.0i for Windows builds." +msgstr "" + +#: ../../../build/NEWS:10355 +msgid "" +":issue:`33871`: Fixed sending the part of the file in :func:`os.sendfile` on" +" macOS. Using the *trailers* argument could cause sending more bytes from " +"the input file than was specified." +msgstr "" + +#: ../../../build/NEWS:10359 +msgid ":issue:`32533`: Fixed thread-safety of error handling in _ssl." +msgstr "" + +#: ../../../build/NEWS:10361 ../../../build/NEWS:13860 +msgid "" +":issue:`33136`: Harden ssl module against LibreSSL CVE-2018-8970. " +"X509_VERIFY_PARAM_set1_host() is called with an explicit namelen. A new test" +" ensures that NULL bytes are not allowed." +msgstr "" + +#: ../../../build/NEWS:10365 ../../../build/NEWS:13864 +#: ../../../build/NEWS:18257 +msgid "" +":issue:`33001`: Minimal fix to prevent buffer overrun in os.symlink on " +"Windows" +msgstr "" + +#: ../../../build/NEWS:10367 ../../../build/NEWS:13866 +#: ../../../build/NEWS:18259 +msgid "" +":issue:`32981`: Regexes in difflib and poplib were vulnerable to " +"catastrophic backtracking. These regexes formed potential DOS vectors " +"(REDOS). They have been refactored. This resolves CVE-2018-1060 and " +"CVE-2018-1061. Patch by Jamie Davis." +msgstr "" + +#: ../../../build/NEWS:10372 ../../../build/NEWS:14078 +msgid "" +":issue:`28414`: The ssl module now allows users to perform their own IDN " +"en/decoding when using SNI." +msgstr "" + +#: ../../../build/NEWS:10378 +msgid "" +":issue:`35877`: Make parenthesis optional for named expressions in while " +"statement. Patch by Karthikeyan Singaravelan." +msgstr "" + +#: ../../../build/NEWS:10381 +msgid "" +":issue:`35814`: Allow same right hand side expressions in annotated " +"assignments as in normal ones. In particular, ``x: Tuple[int, int] = 1, 2`` " +"(without parentheses on the right) is now allowed." +msgstr "" + +#: ../../../build/NEWS:10385 +msgid "" +":issue:`35766`: Add the option to parse PEP 484 type comments in the ast " +"module. (Off by default.) This is merging the key functionality of the third" +" party fork thereof, [typed_ast](https://github.com/python/typed_ast)." +msgstr "" + +#: ../../../build/NEWS:10390 +msgid "" +":issue:`35713`: Reorganize Python initialization to get working exceptions " +"and sys.stderr earlier." +msgstr "" + +#: ../../../build/NEWS:10393 +msgid "" +":issue:`33416`: Add end line and end column position information to the " +"Python AST nodes. This is a C-level backwards incompatible change." +msgstr "" + +#: ../../../build/NEWS:10396 +msgid "" +":issue:`35720`: Fixed a minor memory leak in pymain_parse_cmdline_impl " +"function in Modules/main.c" +msgstr "" + +#: ../../../build/NEWS:10399 +msgid "" +":issue:`35634`: ``func(**kwargs)`` will now raise an error when ``kwargs`` " +"is a mapping containing multiple entries with the same key. An error was " +"already raised when other keyword arguments are passed before ``**kwargs`` " +"since Python 3.6." +msgstr "" + +#: ../../../build/NEWS:10404 +msgid "" +":issue:`35623`: Fix a crash when sorting very long lists. Patch by Stephan " +"Hohe." +msgstr "" + +#: ../../../build/NEWS:10407 +msgid "" +":issue:`35214`: clang Memory Sanitizer build instrumentation was added to " +"work around false positives from posix, socket, time, test_io, and " +"test_faulthandler." +msgstr "" + +#: ../../../build/NEWS:10411 +msgid "" +":issue:`35560`: Fix an assertion error in :func:`format` in debug build for " +"floating point formatting with \"n\" format, zero padding and small width. " +"Release build is not impacted. Patch by Karthikeyan Singaravelan." +msgstr "" + +#: ../../../build/NEWS:10415 +msgid "" +":issue:`35552`: Format characters ``%s`` and ``%V`` in " +":c:func:`PyUnicode_FromFormat` and ``%s`` in :c:func:`PyBytes_FromFormat` no" +" longer read memory past the limit if *precision* is specified." +msgstr "" + +#: ../../../build/NEWS:10419 +msgid "" +":issue:`35504`: Fix segfaults and :exc:`SystemError`\\ s when deleting " +"certain attributes. Patch by Zackery Spytz." +msgstr "" + +#: ../../../build/NEWS:10422 +msgid "" +":issue:`35504`: Fixed a SystemError when delete the characters_written " +"attribute of an OSError." +msgstr "" + +#: ../../../build/NEWS:10425 +msgid "" +":issue:`35494`: Improved syntax error messages for unbalanced parentheses in" +" f-string." +msgstr "" + +#: ../../../build/NEWS:10428 +msgid "" +":issue:`35444`: Fixed error handling in pickling methods when fail to look " +"up builtin \"getattr\". Sped up pickling iterators." +msgstr "" + +#: ../../../build/NEWS:10431 +msgid "" +":issue:`35436`: Fix various issues with memory allocation error handling. " +"Patch by Zackery Spytz." +msgstr "" + +#: ../../../build/NEWS:10434 +msgid "" +":issue:`35423`: Separate the signal handling trigger in the eval loop from " +"the \"pending calls\" machinery. There is no semantic change and the " +"difference in performance is insignificant." +msgstr "" + +#: ../../../build/NEWS:10438 +msgid "" +":issue:`35357`: Internal attributes' names of unittest.mock._Call and " +"unittest.mock.MagicProxy (name, parent & from_kall) are now prefixed with " +"_mock_ in order to prevent clashes with widely used object attributes. Fixed" +" minor typo in test function name." +msgstr "" + +#: ../../../build/NEWS:10443 +msgid "" +":issue:`35372`: Fixed the code page decoder for input longer than 2 GiB " +"containing undecodable bytes." +msgstr "" + +#: ../../../build/NEWS:10446 +msgid "" +":issue:`35336`: Fix PYTHONCOERCECLOCALE=1 environment variable: only coerce " +"the C locale if the LC_CTYPE locale is \"C\"." +msgstr "" + +#: ../../../build/NEWS:10449 +msgid "" +":issue:`31241`: The *lineno* and *col_offset* attributes of AST nodes for " +"list comprehensions, generator expressions and tuples are now point to the " +"opening parenthesis or square brace. For tuples without parenthesis they " +"point to the position of the first item." +msgstr "" + +#: ../../../build/NEWS:10454 +msgid "" +":issue:`33954`: For :meth:`str.format`, :meth:`float.__format__` and " +":meth:`complex.__format__` methods for non-ASCII decimal point when using " +"the \"n\" formatter." +msgstr "" + +#: ../../../build/NEWS:10458 +msgid "" +":issue:`35269`: Fix a possible segfault involving a newly-created coroutine." +" Patch by Zackery Spytz." +msgstr "" + +#: ../../../build/NEWS:10461 +msgid "" +":issue:`35224`: Implement :pep:`572` (assignment expressions). Patch by " +"Emily Morehouse." +msgstr "" + +#: ../../../build/NEWS:10464 +msgid "" +":issue:`32492`: Speed up :class:`namedtuple` attribute access by 1.6x using " +"a C fast-path for the name descriptors. Patch by Pablo Galindo." +msgstr "" + +#: ../../../build/NEWS:10467 +msgid "" +":issue:`35214`: Fixed an out of bounds memory access when parsing a " +"truncated unicode escape sequence at the end of a string such as ``'\\N'``." +" It would read one byte beyond the end of the memory allocation." +msgstr "" + +#: ../../../build/NEWS:10471 +msgid "" +":issue:`35214`: The interpreter and extension modules have had annotations " +"added so that they work properly under clang's Memory Sanitizer. A new " +"configure flag --with-memory-sanitizer has been added to make test builds of" +" this nature easier to perform." +msgstr "" + +#: ../../../build/NEWS:10476 +msgid "" +":issue:`35193`: Fix an off by one error in the bytecode peephole optimizer " +"where it could read bytes beyond the end of bounds of an array when removing" +" unreachable code. This bug was present in every release of Python 3.6 and " +"3.7 until now." +msgstr "" + +#: ../../../build/NEWS:10481 +msgid ":issue:`35169`: Improved error messages for forbidden assignments." +msgstr "" + +#: ../../../build/NEWS:10483 +msgid "" +":issue:`34022`: Fix handling of hash-based bytecode files in " +":mod:`zipimport`. Patch by Elvis Pranskevichus." +msgstr "" + +#: ../../../build/NEWS:10486 +msgid "" +":issue:`28401`: Debug builds will no longer to attempt to import extension " +"modules built for the ABI as they were never compatible to begin with. Patch" +" by Stefano Rivera." +msgstr "" + +#: ../../../build/NEWS:10490 +msgid "" +":issue:`29341`: Clarify in the docstrings of :mod:`os` methods that path-" +"like objects are also accepted as input parameters." +msgstr "" + +#: ../../../build/NEWS:10493 +msgid "" +":issue:`35050`: :mod:`socket`: Fix off-by-one bug in length check for " +"``AF_ALG`` name and type." +msgstr "" + +#: ../../../build/NEWS:10496 +msgid "" +":issue:`29743`: Raise :exc:`ValueError` instead of :exc:`OverflowError` in " +"case of a negative ``_length_`` in a :class:`ctypes.Array` subclass. Also " +"raise :exc:`TypeError` instead of :exc:`AttributeError` for non-integer " +"``_length_``. Original patch by Oren Milman." +msgstr "" + +#: ../../../build/NEWS:10501 +msgid "" +":issue:`16806`: Fix ``lineno`` and ``col_offset`` for multi-line string " +"tokens." +msgstr "" + +#: ../../../build/NEWS:10503 +msgid "" +":issue:`35029`: :exc:`SyntaxWarning` raised as an exception at code " +"generation time will be now replaced with a :exc:`SyntaxError` for better " +"error reporting." +msgstr "" + +#: ../../../build/NEWS:10507 +msgid "" +":issue:`34983`: Expose :meth:`symtable.Symbol.is_nonlocal` in the symtable " +"module. Patch by Pablo Galindo." +msgstr "" + +#: ../../../build/NEWS:10510 +msgid "" +":issue:`34974`: :class:`bytes` and :class:`bytearray` constructors no longer" +" convert unexpected exceptions (e.g. :exc:`MemoryError` and " +":exc:`KeyboardInterrupt`) to :exc:`TypeError`." +msgstr "" + +#: ../../../build/NEWS:10514 +msgid "" +":issue:`34939`: Allow annotated names in module namespace that are declared " +"global before the annotation happens. Patch by Pablo Galindo." +msgstr "" + +#: ../../../build/NEWS:10517 +msgid "" +":issue:`34973`: Fixed crash in :func:`bytes` when the :class:`list` argument" +" is mutated while it is iterated." +msgstr "" + +#: ../../../build/NEWS:10520 +msgid "" +":issue:`34876`: The *lineno* and *col_offset* attributes of the AST for " +"decorated function and class refer now to the position of the corresponding " +"``def``, ``async def`` and ``class`` instead of the position of the first " +"decorator. This leads to more correct line reporting in tracing. This is the" +" only case when the position of child AST nodes can precede the position of " +"the parent AST node." +msgstr "" + +#: ../../../build/NEWS:10527 +msgid "" +":issue:`34879`: Fix a possible null pointer dereference in bytesobject.c. " +"Patch by Zackery Spytz." +msgstr "" + +#: ../../../build/NEWS:10530 +msgid "" +":issue:`34784`: Fix the implementation of PyStructSequence_NewType in order " +"to create heap allocated StructSequences." +msgstr "" + +#: ../../../build/NEWS:10533 +msgid "" +":issue:`32912`: A :exc:`SyntaxWarning` is now emitted instead of a " +":exc:`DeprecationWarning` for invalid escape sequences in string and bytes " +"literals." +msgstr "" + +#: ../../../build/NEWS:10537 +msgid "" +":issue:`34854`: Fixed a crash in compiling string annotations containing a " +"lambda with a keyword-only argument that doesn't have a default value." +msgstr "" + +#: ../../../build/NEWS:10540 +msgid "" +":issue:`34850`: The compiler now produces a :exc:`SyntaxWarning` when " +"identity checks (``is`` and ``is not``) are used with certain types of " +"literals (e.g. strings, ints). These can often work by accident in CPython," +" but are not guaranteed by the language spec. The warning advises users to " +"use equality tests (``==`` and ``!=``) instead." +msgstr "" + +#: ../../../build/NEWS:10546 +msgid "" +":issue:`34824`: Fix a possible null pointer dereference in Modules/_ssl.c. " +"Patch by Zackery Spytz." +msgstr "" + +#: ../../../build/NEWS:10549 +msgid "" +":issue:`30156`: The C function ``property_descr_get()`` uses a \"cached\" " +"tuple to optimize function calls. But this tuple can be discovered in debug " +"mode with :func:`sys.getobjects()`. Remove the optimization, it's not really" +" worth it and it causes 3 different crashes last years." +msgstr "" + +#: ../../../build/NEWS:10554 +msgid ":issue:`34762`: Fix contextvars C API to use PyObject* pointer types." +msgstr "" + +#: ../../../build/NEWS:10556 +msgid "" +":issue:`34751`: The hash function for tuples is now based on xxHash which " +"gives better collision results on (formerly) pathological cases. " +"Additionally, on 64-bit systems it improves tuple hashes in general. Patch " +"by Jeroen Demeyer with substantial contributions by Tim Peters." +msgstr "" + +#: ../../../build/NEWS:10561 +msgid "" +":issue:`34735`: Fix a memory leak in Modules/timemodule.c. Patch by Zackery" +" Spytz." +msgstr "" + +#: ../../../build/NEWS:10564 +msgid "" +":issue:`34683`: Fixed a bug where some SyntaxError error pointed to " +"locations that were off-by-one." +msgstr "" + +#: ../../../build/NEWS:10567 +msgid "" +":issue:`34651`: Only allow the main interpreter to fork. The avoids the " +"possibility of affecting the main interpreter, which is critical to " +"operation of the runtime." +msgstr "" + +#: ../../../build/NEWS:10571 +msgid "" +":issue:`34653`: Remove unused function PyParser_SimpleParseStringFilename." +msgstr "" + +#: ../../../build/NEWS:10573 +msgid "" +":issue:`32236`: Warn that line buffering is not supported if :func:`open` is" +" called with binary mode and ``buffering=1``." +msgstr "" + +#: ../../../build/NEWS:10576 +msgid "" +":issue:`34641`: Further restrict the syntax of the left-hand side of keyword" +" arguments in function calls. In particular, ``f((keyword)=arg)`` is now " +"disallowed." +msgstr "" + +#: ../../../build/NEWS:10580 +msgid "" +":issue:`34637`: Make the *start* argument to *sum()* visible as a keyword " +"argument." +msgstr "" + +#: ../../../build/NEWS:10583 +msgid "" +":issue:`1621`: Do not assume signed integer overflow behavior (C undefined " +"behavior) when performing set hash table resizing." +msgstr "" + +#: ../../../build/NEWS:10586 +msgid "" +":issue:`34588`: Fix an off-by-one in the recursive call pruning feature of " +"traceback formatting." +msgstr "" + +#: ../../../build/NEWS:10589 +msgid "" +":issue:`34485`: On Windows, the LC_CTYPE is now set to the user preferred " +"locale at startup. Previously, the LC_CTYPE locale was \"C\" at startup, but" +" changed when calling setlocale(LC_CTYPE, \"\") or setlocale(LC_ALL, \"\")." +msgstr "" + +#: ../../../build/NEWS:10593 +msgid "" +":issue:`34485`: Standard streams like sys.stdout now use the " +"\"surrogateescape\" error handler, instead of \"strict\", on the POSIX " +"locale (when the C locale is not coerced and the UTF-8 Mode is disabled)." +msgstr "" + +#: ../../../build/NEWS:10597 +msgid "" +":issue:`34485`: Fix the error handler of standard streams like sys.stdout: " +"PYTHONIOENCODING=\":\" is now ignored instead of setting the error handler " +"to \"strict\"." +msgstr "" + +#: ../../../build/NEWS:10601 +msgid "" +":issue:`34485`: Python now gets the locale encoding with C code to " +"initialize the encoding of standard streams like sys.stdout. Moreover, the " +"encoding is now initialized to the Python codec name to get a normalized " +"encoding name and to ensure that the codec is loaded. The change avoids " +"importing _bootlocale and _locale modules at startup by default." +msgstr "" + +#: ../../../build/NEWS:10607 +msgid "" +":issue:`34527`: On FreeBSD, Py_DecodeLocale() and Py_EncodeLocale() now also" +" forces the ASCII encoding if the LC_CTYPE locale is \"POSIX\", not only if " +"the LC_CTYPE locale is \"C\"." +msgstr "" + +#: ../../../build/NEWS:10611 +msgid "" +":issue:`34527`: The UTF-8 Mode is now also enabled by the \"POSIX\" locale, " +"not only by the \"C\" locale." +msgstr "" + +#: ../../../build/NEWS:10614 +msgid "" +":issue:`34403`: On HP-UX with C or POSIX locale, sys.getfilesystemencoding()" +" now returns \"ascii\" instead of \"roman8\" (when the UTF-8 Mode is " +"disabled and the C locale is not coerced)." +msgstr "" + +#: ../../../build/NEWS:10618 +msgid "" +":issue:`34523`: The Python filesystem encoding is now read earlier during " +"the Python initialization." +msgstr "" + +#: ../../../build/NEWS:10621 +msgid "" +":issue:`12458`: Tracebacks show now correct line number for subexpressions " +"in multiline expressions. Tracebacks show now the line number of the first " +"line for multiline expressions instead of the line number of the last " +"subexpression." +msgstr "" + +#: ../../../build/NEWS:10626 +msgid "" +":issue:`34408`: Prevent a null pointer dereference and resource leakage in " +"``PyInterpreterState_New()``." +msgstr "" + +#: ../../../build/NEWS:10629 +msgid "" +":issue:`34400`: Fix undefined behavior in parsetok.c. Patch by Zackery " +"Spytz." +msgstr "" + +#: ../../../build/NEWS:10631 +msgid "" +":issue:`33073`: Added as_integer_ratio to ints to make them more " +"interoperable with floats." +msgstr "" + +#: ../../../build/NEWS:10634 +msgid "" +":issue:`34377`: Update valgrind suppression list to use " +"``_PyObject_Free``/``_PyObject_Realloc`` instead of " +"``PyObject_Free``/``PyObject_Realloc``." +msgstr "" + +#: ../../../build/NEWS:10638 +msgid "" +":issue:`34353`: Added the \"socket\" option in the `stat.filemode()` Python " +"implementation to match the C implementation." +msgstr "" + +#: ../../../build/NEWS:10641 +msgid "" +":issue:`34320`: Fix ``dict(od)`` didn't copy iteration order of OrderedDict." +msgstr "" + +#: ../../../build/NEWS:10643 +msgid "" +":issue:`34113`: Fixed crash on debug builds when opcode stack was adjusted " +"with negative numbers. Patch by Constantin Petrisor." +msgstr "" + +#: ../../../build/NEWS:10646 +msgid "" +":issue:`34100`: Compiler now merges constants in tuples and frozensets " +"recursively. Code attributes like ``co_names`` are merged too." +msgstr "" + +#: ../../../build/NEWS:10649 +msgid "" +":issue:`34151`: Performance of list concatenation, repetition and slicing " +"operations is slightly improved. Patch by Sergey Fedoseev." +msgstr "" + +#: ../../../build/NEWS:10652 +msgid "" +":issue:`34170`: -X dev: it is now possible to override the memory allocator " +"using PYTHONMALLOC even if the developer mode is enabled." +msgstr "" + +#: ../../../build/NEWS:10655 +msgid "" +":issue:`33237`: Improved :exc:`AttributeError` message for partially " +"initialized module." +msgstr "" + +#: ../../../build/NEWS:10658 +msgid "" +":issue:`34149`: Fix min and max functions to get default behavior when key " +"is None." +msgstr "" + +#: ../../../build/NEWS:10661 +msgid "" +":issue:`34125`: Profiling of unbound built-in methods now works when " +"``**kwargs`` is given." +msgstr "" + +#: ../../../build/NEWS:10664 +msgid "" +":issue:`34141`: Optimized pickling atomic types (None, bool, int, float, " +"bytes, str)." +msgstr "" + +#: ../../../build/NEWS:10667 +msgid "" +":issue:`34126`: Fix crashes when profiling certain invalid calls of unbound " +"methods. Patch by Jeroen Demeyer." +msgstr "" + +#: ../../../build/NEWS:10670 +msgid "" +":issue:`24618`: Fixed reading invalid memory when create the code object " +"with too small varnames tuple or too large argument counts." +msgstr "" + +#: ../../../build/NEWS:10673 +msgid "" +":issue:`34068`: In :meth:`io.IOBase.close`, ensure that the " +":attr:`~io.IOBase.closed` attribute is not set with a live exception. Patch " +"by Zackery Spytz and Serhiy Storchaka." +msgstr "" + +#: ../../../build/NEWS:10677 +msgid "" +":issue:`34087`: Fix buffer overflow while converting unicode to numeric " +"values." +msgstr "" + +#: ../../../build/NEWS:10679 +msgid "" +":issue:`34080`: Fixed a memory leak in the compiler when it raised some " +"uncommon errors during tokenizing." +msgstr "" + +#: ../../../build/NEWS:10682 +msgid "" +":issue:`34066`: Disabled interruption by Ctrl-C between calling ``open()`` " +"and entering a **with** block in ``with open()``." +msgstr "" + +#: ../../../build/NEWS:10685 +msgid "" +":issue:`34042`: Fix dict.copy() to maintain correct total refcount (as " +"reported by sys.gettotalrefcount())." +msgstr "" + +#: ../../../build/NEWS:10688 +msgid "" +":issue:`33418`: Fix potential memory leak in function object when it creates" +" reference cycle." +msgstr "" + +#: ../../../build/NEWS:10691 +msgid ":issue:`33985`: Implement contextvars.ContextVar.name attribute." +msgstr "" + +#: ../../../build/NEWS:10693 +msgid ":issue:`33956`: Update vendored Expat library copy to version 2.2.5." +msgstr "" + +#: ../../../build/NEWS:10695 +msgid "" +":issue:`24596`: Decref the module object in " +":c:func:`PyRun_SimpleFileExFlags` before calling :c:func:`PyErr_Print()`. " +"Patch by Zackery Spytz." +msgstr "" + +#: ../../../build/NEWS:10698 +msgid "" +":issue:`33451`: Close directly executed pyc files before calling " +"``PyEval_EvalCode()``." +msgstr "" + +#: ../../../build/NEWS:10701 +msgid "" +":issue:`1617161`: The hash of :class:`BuiltinMethodType` instances (methods " +"of built-in classes) now depends on the hash of the identity of *__self__* " +"instead of its value. The hash and equality of :class:`ModuleType` and " +":class:`MethodWrapperType` instances (methods of user-defined classes and " +"some methods of built-in classes like ``str.__add__``) now depend on the " +"hash and equality of the identity of *__self__* instead of its value. " +":class:`MethodWrapperType` instances no longer support ordering." +msgstr "" + +#: ../../../build/NEWS:10709 +msgid "" +":issue:`33824`: Fix \"LC_ALL=C python3.7 -V\": reset properly the command " +"line parser when the encoding changes after reading the Python " +"configuration." +msgstr "" + +#: ../../../build/NEWS:10712 ../../../build/NEWS:13358 +msgid "" +":issue:`33803`: Fix a crash in hamt.c caused by enabling GC tracking for an " +"object that hadn't all of its fields set to NULL." +msgstr "" + +#: ../../../build/NEWS:10715 +msgid "" +":issue:`33738`: Seven macro incompatibilities with the Limited API were " +"fixed, and the macros :c:func:`PyIter_Check`, :c:func:`PyIndex_Check` and " +":c:func:`PyExceptionClass_Name` were added as functions. A script for " +"automatic macro checks was added." +msgstr "" + +#: ../../../build/NEWS:10720 ../../../build/NEWS:17930 +msgid "" +":issue:`33786`: Fix asynchronous generators to handle GeneratorExit in " +"athrow() correctly" +msgstr "" + +#: ../../../build/NEWS:10723 +msgid "" +":issue:`30167`: ``PyRun_SimpleFileExFlags`` removes ``__cached__`` from " +"module in addition to ``__file__``." +msgstr "" + +#: ../../../build/NEWS:10726 ../../../build/NEWS:13361 +msgid "" +":issue:`33706`: Fix a crash in Python initialization when parsing the " +"command line options. Thanks Christoph Gohlke for the bug report and the " +"fix!" +msgstr "" + +#: ../../../build/NEWS:10729 +msgid ":issue:`33597`: Reduce ``PyGC_Head`` size from 3 words to 2 words." +msgstr "" + +#: ../../../build/NEWS:10731 ../../../build/NEWS:13364 +#: ../../../build/NEWS:17933 +msgid "" +":issue:`30654`: Fixed reset of the SIGINT handler to SIG_DFL on interpreter " +"shutdown even when there was a custom handler set previously. Patch by " +"Philipp Kerling." +msgstr "" + +#: ../../../build/NEWS:10735 ../../../build/NEWS:13470 +#: ../../../build/NEWS:17937 +msgid "" +":issue:`33622`: Fixed a leak when the garbage collector fails to add an " +"object with the ``__del__`` method or referenced by it into the " +":data:`gc.garbage` list. :c:func:`PyGC_Collect` can now be called when an " +"exception is set and preserves it." +msgstr "" + +#: ../../../build/NEWS:10740 +msgid "" +":issue:`33462`: Make dict and dict views reversible. Patch by Rémi Lapeyre." +msgstr "" + +#: ../../../build/NEWS:10742 +msgid "" +":issue:`23722`: A :exc:`RuntimeError` is now raised when the custom " +"metaclass doesn't provide the ``__classcell__`` entry in the namespace " +"passed to ``type.__new__``. A :exc:`DeprecationWarning` was emitted in " +"Python 3.6--3.7." +msgstr "" + +#: ../../../build/NEWS:10747 +msgid "" +":issue:`33499`: Add :envvar:`PYTHONPYCACHEPREFIX` environment variable and " +":option:`-X` ``pycache_prefix`` command-line option to set an alternate root" +" directory for writing module bytecode cache files." +msgstr "" + +#: ../../../build/NEWS:10751 +msgid "" +":issue:`25711`: The :mod:`zipimport` module has been rewritten in pure " +"Python." +msgstr "" + +#: ../../../build/NEWS:10753 ../../../build/NEWS:13475 +msgid "" +":issue:`33509`: Fix module_globals parameter of warnings.warn_explicit(): " +"don't crash if module_globals is not a dict." +msgstr "" + +#: ../../../build/NEWS:10756 ../../../build/NEWS:13368 +#: ../../../build/NEWS:17942 +msgid ":issue:`31849`: Fix signed/unsigned comparison warning in pyhash.c." +msgstr "" + +#: ../../../build/NEWS:10758 ../../../build/NEWS:13482 +msgid "" +":issue:`33475`: Fixed miscellaneous bugs in converting annotations to " +"strings and optimized parentheses in the string representation." +msgstr "" + +#: ../../../build/NEWS:10761 +msgid "" +":issue:`20104`: Added support for the `setpgroup`, `resetids`, `setsigmask`," +" `setsigdef` and `scheduler` parameters of `posix_spawn`. Patch by Pablo " +"Galindo." +msgstr "" + +#: ../../../build/NEWS:10765 ../../../build/NEWS:13485 +#: ../../../build/NEWS:17944 +msgid ":issue:`33391`: Fix a leak in set_symmetric_difference()." +msgstr "" + +#: ../../../build/NEWS:10767 ../../../build/NEWS:13683 +msgid "" +":issue:`33363`: Raise a SyntaxError for ``async with`` and ``async for`` " +"statements outside of async functions." +msgstr "" + +#: ../../../build/NEWS:10770 ../../../build/NEWS:13487 +#: ../../../build/NEWS:17946 +msgid "" +":issue:`28055`: Fix unaligned accesses in siphash24(). Patch by Rolf Eike " +"Beer." +msgstr "" + +#: ../../../build/NEWS:10772 ../../../build/NEWS:13686 +msgid "" +":issue:`33128`: Fix a bug that causes PathFinder to appear twice on " +"sys.meta_path. Patch by Pablo Galindo Salgado." +msgstr "" + +#: ../../../build/NEWS:10775 +msgid "" +":issue:`33331`: Modules imported last are now cleared first at interpreter " +"shutdown." +msgstr "" + +#: ../../../build/NEWS:10778 ../../../build/NEWS:13689 +msgid "" +":issue:`33312`: Fixed clang ubsan (undefined behavior sanitizer) warnings in" +" dictobject.c by adjusting how the internal struct _dictkeysobject shared " +"keys structure is declared." +msgstr "" + +#: ../../../build/NEWS:10782 +msgid "" +":issue:`33305`: Improved syntax error messages for invalid numerical " +"literals." +msgstr "" + +#: ../../../build/NEWS:10784 +msgid "" +":issue:`33306`: Improved syntax error messages for unbalanced parentheses." +msgstr "" + +#: ../../../build/NEWS:10786 +msgid "" +":issue:`33234`: The list constructor will pre-size and not over-allocate " +"when the input length is known." +msgstr "" + +#: ../../../build/NEWS:10789 +msgid "" +":issue:`33270`: Intern the names for all anonymous code objects. Patch by " +"Zackery Spytz." +msgstr "" + +#: ../../../build/NEWS:10792 +msgid "" +":issue:`30455`: The C and Python code and the documentation related to " +"tokens are now generated from a single source file :file:`Grammar/Tokens`." +msgstr "" + +#: ../../../build/NEWS:10795 +msgid ":issue:`33176`: Add a ``toreadonly()`` method to memoryviews." +msgstr "" + +#: ../../../build/NEWS:10797 ../../../build/NEWS:13693 +#: ../../../build/NEWS:17948 +msgid ":issue:`33231`: Fix potential memory leak in ``normalizestring()``." +msgstr "" + +#: ../../../build/NEWS:10799 ../../../build/NEWS:13695 +msgid "" +":issue:`33205`: Change dict growth function from " +"``round_up_to_power_2(used*2+hashtable_size/2)`` to " +"``round_up_to_power_2(used*3)``. Previously, dict is shrinked only when " +"``used == 0``. Now dict has more chance to be shrinked." +msgstr "" + +#: ../../../build/NEWS:10804 ../../../build/NEWS:13700 +#: ../../../build/NEWS:17950 +msgid "" +":issue:`29922`: Improved error messages in 'async with' when " +"``__aenter__()`` or ``__aexit__()`` return non-awaitable object." +msgstr "" + +#: ../../../build/NEWS:10807 ../../../build/NEWS:13703 +#: ../../../build/NEWS:17953 +msgid "" +":issue:`33199`: Fix ``ma_version_tag`` in dict implementation is " +"uninitialized when copying from key-sharing dict." +msgstr "" + +#: ../../../build/NEWS:10810 ../../../build/NEWS:13874 +msgid "" +":issue:`33053`: When using the -m switch, sys.path[0] is now explicitly " +"expanded as the *starting* working directory, rather than being left as the " +"empty path (which allows imports from the current working directory at the " +"time of the import)" +msgstr "" + +#: ../../../build/NEWS:10815 +msgid "" +":issue:`33138`: Changed standard error message for non-pickleable and non-" +"copyable types. It now says \"cannot pickle\" instead of \"can't pickle\" or" +" \"cannot serialize\"." +msgstr "" + +#: ../../../build/NEWS:10819 ../../../build/NEWS:13879 +msgid "" +":issue:`33018`: Improve consistency of errors raised by ``issubclass()`` " +"when called with a non-class and an abstract base class as the first and " +"second arguments, respectively. Patch by Josh Bronson." +msgstr "" + +#: ../../../build/NEWS:10823 +msgid "" +":issue:`33083`: ``math.factorial`` no longer accepts arguments that are not " +"int-like. Patch by Pablo Galindo." +msgstr "" + +#: ../../../build/NEWS:10826 +msgid "" +":issue:`33041`: Added new opcode :opcode:`END_ASYNC_FOR` and fixes the " +"following issues:" +msgstr "" + +#: ../../../build/NEWS:10829 +msgid "" +"Setting global :exc:`StopAsyncIteration` no longer breaks ``async for`` " +"loops." +msgstr "" + +#: ../../../build/NEWS:10831 +msgid "Jumping into an ``async for`` loop is now disabled." +msgstr "跳入一个 ``async for`` 循环现在被禁止了。" + +#: ../../../build/NEWS:10832 +msgid "Jumping out of an ``async for`` loop no longer corrupts the stack." +msgstr "跳出一个 ``async for`` 循环不再会破坏堆栈了。" + +#: ../../../build/NEWS:10834 +msgid "" +":issue:`25750`: Fix rare Python crash due to bad refcounting in " +"``type_getattro()`` if a descriptor deletes itself from the class. Patch by " +"Jeroen Demeyer." +msgstr "" + +#: ../../../build/NEWS:10838 +msgid "" +":issue:`33041`: Fixed bytecode generation for \"async for\" with a complex " +"target. A StopAsyncIteration raised on assigning or unpacking will be now " +"propagated instead of stopping the iteration." +msgstr "" + +#: ../../../build/NEWS:10842 ../../../build/NEWS:13885 +#: ../../../build/NEWS:18267 +msgid ":issue:`33026`: Fixed jumping out of \"with\" block by setting f_lineno." +msgstr "" + +#: ../../../build/NEWS:10844 ../../../build/NEWS:13887 +msgid "" +":issue:`33005`: Fix a crash on fork when using a custom memory allocator " +"(ex: using PYTHONMALLOC env var). _PyGILState_Reinit() and " +"_PyInterpreterState_Enable() now use the default RAW memory allocator to " +"allocate a new interpreters mutex on fork." +msgstr "" + +#: ../../../build/NEWS:10849 ../../../build/NEWS:13489 +msgid "" +":issue:`32911`: Due to unexpected compatibility issues discovered during " +"downstream beta testing, reverted :issue:`29463`. ``docstring`` field is " +"removed from Module, ClassDef, FunctionDef, and AsyncFunctionDef ast nodes " +"which was added in 3.7a1. Docstring expression is restored as a first " +"statement in their body. Based on patch by Inada Naoki." +msgstr "" + +#: ../../../build/NEWS:10855 ../../../build/NEWS:13892 +#: ../../../build/NEWS:18269 +msgid "" +":issue:`17288`: Prevent jumps from 'return' and 'exception' trace events." +msgstr "" + +#: ../../../build/NEWS:10857 +msgid "" +":issue:`32946`: Importing names from already imported module with \"from ..." +" import ...\" is now 30% faster if the module is not a package." +msgstr "" + +#: ../../../build/NEWS:10860 +msgid "" +":issue:`32932`: Make error message more revealing when there are non-str " +"objects in ``__all__``." +msgstr "" + +#: ../../../build/NEWS:10863 +msgid "" +":issue:`32925`: Optimized iterating and containing test for literal lists " +"consisting of non-constants: ``x in [a, b]`` and ``for x in [a, b]``. The " +"case of all constant elements already was optimized." +msgstr "" + +#: ../../../build/NEWS:10867 ../../../build/NEWS:14084 +#: ../../../build/NEWS:18271 +msgid "" +":issue:`32889`: Update Valgrind suppression list to account for the rename " +"of ``Py_ADDRESS_IN_RANG`` to ``address_in_range``." +msgstr "" + +#: ../../../build/NEWS:10870 ../../../build/NEWS:13894 +msgid "" +":issue:`32836`: Don't use temporary variables in cases of list/dict/set " +"comprehensions" +msgstr "" + +#: ../../../build/NEWS:10873 ../../../build/NEWS:14087 +msgid "" +":issue:`31356`: Remove the new API added in :issue:`31356` " +"(gc.ensure_disabled() context manager)." +msgstr "" + +#: ../../../build/NEWS:10876 ../../../build/NEWS:14090 +msgid "" +":issue:`32305`: For namespace packages, ensure that both ``__file__`` and " +"``__spec__.origin`` are set to None." +msgstr "" + +#: ../../../build/NEWS:10879 ../../../build/NEWS:14093 +msgid "" +":issue:`32303`: Make sure ``__spec__.loader`` matches ``__loader__`` for " +"namespace packages." +msgstr "" + +#: ../../../build/NEWS:10882 ../../../build/NEWS:14096 +msgid "" +":issue:`32711`: Fix the warning messages for Python/ast_unparse.c. Patch by " +"Stéphane Wirtel" +msgstr "" + +#: ../../../build/NEWS:10885 ../../../build/NEWS:14099 +#: ../../../build/NEWS:18282 +msgid "" +":issue:`32583`: Fix possible crashing in builtin Unicode decoders caused by " +"write out-of-bound errors when using customized decode error handlers." +msgstr "" + +#: ../../../build/NEWS:10888 +msgid "" +":issue:`32489`: A :keyword:`continue` statement is now allowed in the " +":keyword:`finally` clause." +msgstr "" + +#: ../../../build/NEWS:10891 +msgid "" +":issue:`17611`: Simplified the interpreter loop by moving the logic of " +"unrolling the stack of blocks into the compiler. The compiler emits now " +"explicit instructions for adjusting the stack of values and calling the " +"cleaning up code for :keyword:`break`, :keyword:`continue` and " +":keyword:`return`." +msgstr "" + +#: ../../../build/NEWS:10897 +msgid "" +"Removed opcodes :opcode:`BREAK_LOOP`, :opcode:`CONTINUE_LOOP`, " +":opcode:`SETUP_LOOP` and :opcode:`SETUP_EXCEPT`. Added new opcodes " +":opcode:`ROT_FOUR`, :opcode:`BEGIN_FINALLY` and :opcode:`CALL_FINALLY` and " +":opcode:`POP_FINALLY`. Changed the behavior of :opcode:`END_FINALLY` and " +":opcode:`WITH_CLEANUP_START`." +msgstr "" + +#: ../../../build/NEWS:10903 +msgid "" +":issue:`32285`: New function unicodedata.is_normalized, which can check " +"whether a string is in a specific normal form." +msgstr "" + +#: ../../../build/NEWS:10906 +msgid "" +":issue:`10544`: Yield expressions are now disallowed in comprehensions and " +"generator expressions except the expression for the outermost iterable." +msgstr "" + +#: ../../../build/NEWS:10909 +msgid "" +":issue:`32117`: Iterable unpacking is now allowed without parentheses in " +"yield and return statements, e.g. ``yield 1, 2, 3, *rest``. Thanks to David " +"Cuthbert for the change and Jordan Chapman for added tests." +msgstr "" + +#: ../../../build/NEWS:10913 +msgid "" +":issue:`31902`: Fix the ``col_offset`` attribute for ast nodes " +"``ast.AsyncFor``, ``ast.AsyncFunctionDef``, and ``ast.AsyncWith``. " +"Previously, ``col_offset`` pointed to the keyword after ``async``." +msgstr "" + +#: ../../../build/NEWS:10917 +msgid "" +":issue:`25862`: Fix assertion failures in the ``tell()`` method of " +"``io.TextIOWrapper``. Patch by Zackery Spytz." +msgstr "" + +#: ../../../build/NEWS:10920 ../../../build/NEWS:13495 +#: ../../../build/NEWS:17961 +msgid "" +":issue:`21983`: Fix a crash in `ctypes.cast()` in case the type argument is " +"a ctypes structured data type. Patch by Eryk Sun and Oren Milman." +msgstr "" + +#: ../../../build/NEWS:10923 +msgid "" +":issue:`31577`: Fix a crash in `os.utime()` in case of a bad ns argument. " +"Patch by Oren Milman." +msgstr "" + +#: ../../../build/NEWS:10926 +msgid "" +":issue:`29832`: Remove references to 'getsockaddrarg' from various socket " +"error messages. Patch by Oren Milman." +msgstr "" + +#: ../../../build/NEWS:10932 +msgid ":issue:`35845`: Add 'order' parameter to memoryview.tobytes()." +msgstr "" + +#: ../../../build/NEWS:10934 +msgid "" +":issue:`35864`: The _asdict() method for collections.namedtuple now returns " +"a regular dict instead of an OrderedDict." +msgstr "" + +#: ../../../build/NEWS:10937 +msgid "" +":issue:`35537`: An ExitStack is now used internally within subprocess.POpen " +"to clean up pipe file handles. No behavior change in normal operation. But " +"if closing one handle were ever to cause an exception, the others will now " +"be closed instead of leaked. (patch by Giampaolo Rodola)" +msgstr "" + +#: ../../../build/NEWS:10942 +msgid "" +":issue:`35847`: RISC-V needed the CTYPES_PASS_BY_REF_HACK. Fixes ctypes " +"Structure test_pass_by_value." +msgstr "" + +#: ../../../build/NEWS:10945 +msgid "" +":issue:`35813`: Shared memory submodule added to multiprocessing to avoid " +"need for serialization between processes" +msgstr "" + +#: ../../../build/NEWS:10948 +msgid "" +":issue:`35780`: Fix lru_cache() errors arising in recursive, reentrant, or " +"multi-threaded code. These errors could result in orphan links and in the " +"cache being trapped in a state with fewer than the specified maximum number " +"of links. Fix handling of negative maxsize which should have been treated as" +" zero. Fix errors in toggling the \"full\" status flag. Fix misordering of " +"links when errors are encountered. Sync-up the C code and pure Python code " +"for the space saving path in functions with a single positional argument. In" +" this common case, the space overhead of an lru cache entry is reduced by " +"almost half. Fix counting of cache misses. In error cases, the miss count " +"was out of sync with the actual number of times the underlying user function" +" was called." +msgstr "" + +#: ../../../build/NEWS:10960 +msgid "" +":issue:`35537`: :func:`os.posix_spawn` and :func:`os.posix_spawnp` now have " +"a *setsid* parameter." +msgstr "" + +#: ../../../build/NEWS:10963 +msgid "" +":issue:`23846`: :class:`asyncio.ProactorEventLoop` now catches and logs send" +" errors when the self-pipe is full." +msgstr "" + +#: ../../../build/NEWS:10966 +msgid "" +":issue:`34323`: :mod:`asyncio`: Enhance ``IocpProactor.close()`` log: wait 1" +" second before the first log, then log every second. Log also the number of " +"seconds since ``close()`` was called." +msgstr "" + +#: ../../../build/NEWS:10970 +msgid "" +":issue:`35674`: Add a new :func:`os.posix_spawnp` function. Patch by Joannah" +" Nanjekye." +msgstr "" + +#: ../../../build/NEWS:10973 +msgid "" +":issue:`35733`: ``ast.Constant(boolean)`` no longer an instance of " +":class:`ast.Num`. Patch by Anthony Sottile." +msgstr "" + +#: ../../../build/NEWS:10976 +msgid "" +":issue:`35726`: QueueHandler.prepare() now makes a copy of the record before" +" modifying and enqueueing it, to avoid affecting other handlers in the " +"chain." +msgstr "" + +#: ../../../build/NEWS:10980 +msgid "" +":issue:`35719`: Sped up multi-argument :mod:`math` functions atan2(), " +"copysign(), remainder() and hypot() by 1.3--2.5 times." +msgstr "" + +#: ../../../build/NEWS:10983 +msgid "" +":issue:`35717`: Fix KeyError exception raised when using enums and compile. " +"Patch contributed by Rémi Lapeyre." +msgstr "" + +#: ../../../build/NEWS:10986 +msgid "" +":issue:`35699`: Fixed detection of Visual Studio Build Tools 2017 in " +"distutils" +msgstr "" + +#: ../../../build/NEWS:10988 +msgid "" +":issue:`32710`: Fix memory leaks in asyncio ProactorEventLoop on overlapped " +"operation failure." +msgstr "" + +#: ../../../build/NEWS:10991 +msgid "" +":issue:`35702`: The :data:`time.CLOCK_UPTIME_RAW` constant is now available " +"for macOS 10.12." +msgstr "" + +#: ../../../build/NEWS:10994 +msgid "" +":issue:`32710`: Fix a memory leak in asyncio in the ProactorEventLoop when " +"``ReadFile()`` or ``WSASend()`` overlapped operation fail immediately: " +"release the internal buffer." +msgstr "" + +#: ../../../build/NEWS:10998 +msgid "" +":issue:`35682`: Fix ``asyncio.ProactorEventLoop.sendfile()``: don't attempt " +"to set the result of an internal future if it's already done." +msgstr "" + +#: ../../../build/NEWS:11001 +msgid "" +":issue:`35283`: Add a deprecated warning for the " +":meth:`threading.Thread.isAlive` method. Patch by Dong-hee Na." +msgstr "" + +#: ../../../build/NEWS:11004 +msgid "" +":issue:`35664`: Improve operator.itemgetter() performance by 33% with " +"optimized argument handling and with adding a fast path for the common case " +"of a single non-negative integer index into a tuple (which is the typical " +"use case in the standard library)." +msgstr "" + +#: ../../../build/NEWS:11009 +msgid "" +":issue:`35643`: Fixed a SyntaxWarning: invalid escape sequence in " +"Modules/_sha3/cleanup.py. Patch by Mickaël Schoentgen." +msgstr "" + +#: ../../../build/NEWS:11012 +msgid "" +":issue:`35619`: Improved support of custom data descriptors in :func:`help` " +"and :mod:`pydoc`." +msgstr "" + +#: ../../../build/NEWS:11015 +msgid "" +":issue:`28503`: The `crypt` module now internally uses the `crypt_r()` " +"library function instead of `crypt()` when available." +msgstr "" + +#: ../../../build/NEWS:11018 +msgid ":issue:`35614`: Fixed help() on metaclasses. Patch by Sanyam Khurana." +msgstr "" + +#: ../../../build/NEWS:11020 +msgid ":issue:`35568`: Expose ``raise(signum)`` as `raise_signal`" +msgstr "" + +#: ../../../build/NEWS:11022 +msgid "" +":issue:`35588`: The floor division and modulo operations and the " +":func:`divmod` function on :class:`fractions.Fraction` types are 2--4x " +"faster. Patch by Stefan Behnel." +msgstr "" + +#: ../../../build/NEWS:11026 +msgid "" +":issue:`35585`: Speed-up building enums by value, e.g. http.HTTPStatus(200)." +msgstr "" + +#: ../../../build/NEWS:11028 +msgid "" +":issue:`30561`: random.gammavariate(1.0, beta) now computes the same result " +"as random.expovariate(1.0 / beta). This synchronizes the two algorithms and" +" eliminates some idiosyncrasies in the old implementation. It does however " +"produce a difference stream of random variables than it used to." +msgstr "" + +#: ../../../build/NEWS:11033 +msgid "" +":issue:`35537`: The :mod:`subprocess` module can now use the " +":func:`os.posix_spawn` function in some cases for better performance." +msgstr "" + +#: ../../../build/NEWS:11036 +msgid "" +":issue:`35526`: Delaying the 'joke' of barry_as_FLUFL.mandatory to Python " +"version 4.0" +msgstr "" + +#: ../../../build/NEWS:11039 +msgid "" +":issue:`35523`: Remove :mod:`ctypes` callback workaround: no longer create a" +" callback at startup. Avoid SELinux alert on ``import ctypes`` and ``import " +"uuid``." +msgstr "" + +#: ../../../build/NEWS:11043 +msgid "" +":issue:`31784`: :func:`uuid.uuid1` now calls :func:`time.time_ns` rather " +"than ``int(time.time() * 1e9)``." +msgstr "" + +#: ../../../build/NEWS:11046 +msgid "" +":issue:`35513`: :class:`~unittest.runner.TextTestRunner` of " +":mod:`unittest.runner` now uses :func:`time.perf_counter` rather than " +":func:`time.time` to measure the execution time of a test: :func:`time.time`" +" can go backwards, whereas :func:`time.perf_counter` is monotonic." +msgstr "" + +#: ../../../build/NEWS:11052 +msgid "" +":issue:`35502`: Fixed reference leaks in " +":class:`xml.etree.ElementTree.TreeBuilder` in case of unfinished building of" +" the tree (in particular when an error was raised during parsing XML)." +msgstr "" + +#: ../../../build/NEWS:11056 +msgid "" +":issue:`35348`: Make :func:`platform.architecture` parsing of ``file`` " +"command output more reliable: add the ``-b`` option to the ``file`` command " +"to omit the filename, force the usage of the C locale, and search also the " +"\"shared object\" pattern." +msgstr "" + +#: ../../../build/NEWS:11061 +msgid "" +":issue:`35491`: :mod:`multiprocessing`: Add ``Pool.__repr__()`` and enhance " +"``BaseProcess.__repr__()`` (add pid and parent pid) to ease debugging. Pool " +"state constant values are now strings instead of integers, for example " +"``RUN`` value becomes ``'RUN'`` instead of ``0``." +msgstr "" + +#: ../../../build/NEWS:11066 +msgid "" +":issue:`35477`: :meth:`multiprocessing.Pool.__enter__` now fails if the pool" +" is not running: ``with pool:`` fails if used more than once." +msgstr "" + +#: ../../../build/NEWS:11069 +msgid "" +":issue:`31446`: Copy command line that was passed to CreateProcessW since " +"this function can change the content of the input buffer." +msgstr "" + +#: ../../../build/NEWS:11072 +msgid "" +":issue:`35471`: Python 2.4 dropped MacOS 9 support. The macpath module was " +"deprecated in Python 3.7. The module is now removed." +msgstr "" + +#: ../../../build/NEWS:11075 +msgid "" +":issue:`23057`: Unblock Proactor event loop when keyboard interrupt is " +"received on Windows" +msgstr "" + +#: ../../../build/NEWS:11078 +msgid "" +":issue:`35052`: Fix xml.dom.minidom cloneNode() on a document with an " +"entity: pass the correct arguments to the user data handler of an entity." +msgstr "" + +#: ../../../build/NEWS:11081 +msgid "" +":issue:`20239`: Allow repeated assignment deletion of " +":class:`unittest.mock.Mock` attributes. Patch by Pablo Galindo." +msgstr "" + +#: ../../../build/NEWS:11084 +msgid "" +":issue:`17185`: Set ``__signature__`` on mock for :mod:`inspect` to get " +"signature. Patch by Karthikeyan Singaravelan." +msgstr "" + +#: ../../../build/NEWS:11087 +msgid "" +":issue:`35445`: Memory errors during creating posix.environ no longer " +"ignored." +msgstr "" + +#: ../../../build/NEWS:11089 +msgid ":issue:`35415`: Validate fileno= argument to socket.socket()." +msgstr "" + +#: ../../../build/NEWS:11091 +msgid "" +":issue:`35424`: :class:`multiprocessing.Pool` destructor now emits " +":exc:`ResourceWarning` if the pool is still running." +msgstr "" + +#: ../../../build/NEWS:11094 +msgid "" +":issue:`35330`: When a :class:`Mock` instance was used to wrap an object, if" +" `side_effect` is used in one of the mocks of it methods, don't call the " +"original implementation and return the result of using the side effect the " +"same way that it is done with return_value." +msgstr "" + +#: ../../../build/NEWS:11099 +msgid "" +":issue:`35346`: Drop Mac OS 9 and Rhapsody support from the :mod:`platform` " +"module. Rhapsody last release was in 2000. Mac OS 9 last release was in " +"2001." +msgstr "" + +#: ../../../build/NEWS:11103 +msgid "" +":issue:`10496`: :func:`~distutils.utils.check_environ` of " +":mod:`distutils.utils` now catches :exc:`KeyError` on calling " +":func:`pwd.getpwuid`: don't create the ``HOME`` environment variable in this" +" case." +msgstr "" + +#: ../../../build/NEWS:11108 +msgid "" +":issue:`10496`: :func:`posixpath.expanduser` now returns the input *path* " +"unchanged if the ``HOME`` environment variable is not set and the current " +"user has no home directory (if the current user identifier doesn't exist in " +"the password database). This change fix the :mod:`site` module if the " +"current user doesn't exist in the password database (if the user has no home" +" directory)." +msgstr "" + +#: ../../../build/NEWS:11115 +msgid "" +":issue:`35389`: :func:`platform.libc_ver` now uses " +"``os.confstr('CS_GNU_LIBC_VERSION')`` if available and the *executable* " +"parameter is not set." +msgstr "" + +#: ../../../build/NEWS:11119 +msgid ":issue:`35394`: Add empty slots to asyncio abstract protocols." +msgstr "" + +#: ../../../build/NEWS:11121 +msgid "" +":issue:`35310`: Fix a bug in :func:`select.select` where, in some cases, the" +" file descriptor sequences were returned unmodified after a signal " +"interruption, even though the file descriptors might not be ready yet. " +":func:`select.select` will now always return empty lists if a timeout has " +"occurred. Patch by Oran Avraham." +msgstr "" + +#: ../../../build/NEWS:11127 +msgid "" +":issue:`35380`: Enable TCP_NODELAY on Windows for proactor asyncio event " +"loop." +msgstr "" + +#: ../../../build/NEWS:11129 +msgid "" +":issue:`35341`: Add generic version of ``collections.OrderedDict`` to the " +"``typing`` module. Patch by Ismo Toijala." +msgstr "" + +#: ../../../build/NEWS:11132 +msgid "" +":issue:`35371`: Fixed possible crash in ``os.utime()`` on Windows when pass " +"incorrect arguments." +msgstr "" + +#: ../../../build/NEWS:11135 +msgid "" +":issue:`35346`: :func:`platform.uname` now redirects ``stderr`` to " +":data:`os.devnull` when running external programs like ``cmd /c ver``." +msgstr "" + +#: ../../../build/NEWS:11138 +msgid "" +":issue:`35066`: Previously, calling the strftime() method on a datetime " +"object with a trailing '%' in the format string would result in an " +"exception. However, this only occurred when the datetime C module was being " +"used; the python implementation did not match this behavior. Datetime is now" +" PEP-399 compliant, and will not throw an exception on a trailing '%'." +msgstr "" + +#: ../../../build/NEWS:11144 +msgid "" +":issue:`35345`: The function `platform.popen` has been removed, it was " +"deprecated since Python 3.3: use :func:`os.popen` instead." +msgstr "" + +#: ../../../build/NEWS:11147 +msgid "" +":issue:`35344`: On macOS, :func:`platform.platform` now uses " +":func:`platform.mac_ver`, if it returns a non-empty release string, to get " +"the macOS version rather than the darwin version." +msgstr "" + +#: ../../../build/NEWS:11151 +msgid "" +":issue:`35312`: Make ``lib2to3.pgen2.parse.ParseError`` round-trip pickle-" +"able. Patch by Anthony Sottile." +msgstr "" + +#: ../../../build/NEWS:11154 +msgid "" +":issue:`35308`: Fix regression in ``webbrowser`` where default browsers may " +"be preferred over browsers in the ``BROWSER`` environment variable." +msgstr "" + +#: ../../../build/NEWS:11157 +msgid "" +":issue:`24746`: Avoid stripping trailing whitespace in doctest fancy diff. " +"Original patch by R. David Murray & Jairo Trad. Enhanced by Sanyam Khurana." +msgstr "" + +#: ../../../build/NEWS:11161 +msgid "" +":issue:`28604`: :func:`locale.localeconv` now sets temporarily the " +"``LC_CTYPE`` locale to the ``LC_MONETARY`` locale if the two locales are " +"different and monetary strings are non-ASCII. This temporary change affects " +"other threads." +msgstr "" + +#: ../../../build/NEWS:11166 +msgid "" +":issue:`35277`: Update ensurepip to install pip 18.1 and setuptools 40.6.2." +msgstr "" + +#: ../../../build/NEWS:11168 +msgid ":issue:`24209`: Adds IPv6 support when invoking http.server directly." +msgstr "" + +#: ../../../build/NEWS:11170 +msgid "" +":issue:`35226`: Recursively check arguments when testing for equality of " +":class:`unittest.mock.call` objects and add note that tracking of parameters" +" used to create ancestors of mocks in ``mock_calls`` is not possible." +msgstr "" + +#: ../../../build/NEWS:11175 +msgid "" +":issue:`29564`: The warnings module now suggests to enable tracemalloc if " +"the source is specified, the tracemalloc module is available, but " +"tracemalloc is not tracing memory allocations." +msgstr "" + +#: ../../../build/NEWS:11179 +msgid "" +":issue:`35189`: Modify the following fnctl function to retry if interrupted " +"by a signal (EINTR): flock, lockf, fnctl" +msgstr "" + +#: ../../../build/NEWS:11182 +msgid "" +":issue:`30064`: Use add_done_callback() in sock_* asyncio API to unsubscribe" +" reader/writer early on calcellation." +msgstr "" + +#: ../../../build/NEWS:11185 +msgid "" +":issue:`35186`: Removed the \"built with\" comment added when ``setup.py " +"upload`` is used with either ``bdist_rpm`` or ``bdist_dumb``." +msgstr "" + +#: ../../../build/NEWS:11188 +msgid "" +":issue:`35152`: Allow sending more than 2 GB at once on a multiprocessing " +"connection on non-Windows systems." +msgstr "" + +#: ../../../build/NEWS:11191 +msgid "" +":issue:`35062`: Fix incorrect parsing of " +":class:`_io.IncrementalNewlineDecoder`'s *translate* argument." +msgstr "" + +#: ../../../build/NEWS:11194 +msgid "" +":issue:`35065`: Remove `StreamReaderProtocol._untrack_reader`. The call to " +"`_untrack_reader` is currently performed too soon, causing the protocol to " +"forget about the reader before `connection_lost` can run and feed the EOF to" +" the reader." +msgstr "" + +#: ../../../build/NEWS:11199 +msgid "" +":issue:`34160`: ElementTree and minidom now preserve the attribute order " +"specified by the user." +msgstr "" + +#: ../../../build/NEWS:11202 +msgid "" +":issue:`35079`: Improve difflib.SequenceManager.get_matching_blocks doc by " +"adding 'non-overlapping' and changing '!=' to '<'." +msgstr "" + +#: ../../../build/NEWS:11205 +msgid "" +":issue:`33710`: Deprecated ``l*gettext()`` functions and methods in the " +":mod:`gettext` module. They return encoded bytes instead of Unicode strings " +"and are artifacts from Python 2 times. Also deprecated functions and methods" +" related to setting the charset for ``l*gettext()`` functions and methods." +msgstr "" + +#: ../../../build/NEWS:11211 +msgid "" +":issue:`35017`: :meth:`socketserver.BaseServer.serve_forever` now exits " +"immediately if it's :meth:`~socketserver.BaseServer.shutdown` method is " +"called while it is polling for new events." +msgstr "" + +#: ../../../build/NEWS:11215 +msgid "" +":issue:`35024`: `importlib` no longer logs `wrote ` " +"redundantly after `(created|could not create) ` is already " +"logged. Patch by Quentin Agren." +msgstr "" + +#: ../../../build/NEWS:11219 +msgid "" +":issue:`35047`: ``unittest.mock`` now includes mock calls in exception " +"messages if ``assert_not_called``, ``assert_called_once``, or " +"``assert_called_once_with`` fails. Patch by Petter Strandmark." +msgstr "" + +#: ../../../build/NEWS:11223 +msgid "" +":issue:`31047`: Fix ``ntpath.abspath`` regression where it didn't remove a " +"trailing separator on Windows. Patch by Tim Graham." +msgstr "" + +#: ../../../build/NEWS:11226 +msgid "" +":issue:`35053`: tracemalloc now tries to update the traceback when an object" +" is reused from a \"free list\" (optimization for faster object creation, " +"used by the builtin list type for example)." +msgstr "" + +#: ../../../build/NEWS:11230 +msgid "" +":issue:`31553`: Add the --json-lines option to json.tool. Patch by " +"hongweipeng." +msgstr "" + +#: ../../../build/NEWS:11232 +msgid "" +":issue:`34794`: Fixed a leak in Tkinter when pass the Python wrapper around " +"Tcl_Obj back to Tcl/Tk." +msgstr "" + +#: ../../../build/NEWS:11235 +msgid "" +":issue:`34909`: Enum: fix grandchildren subclassing when parent mixed with " +"concrete data types." +msgstr "" + +#: ../../../build/NEWS:11238 +msgid "" +":issue:`35022`: :class:`unittest.mock.MagicMock` now supports the " +"``__fspath__`` method (from :class:`os.PathLike`)." +msgstr "" + +#: ../../../build/NEWS:11241 +msgid "" +":issue:`35008`: Fixed references leaks when call the ``__setstate__()`` " +"method of :class:`xml.etree.ElementTree.Element` in the C implementation for" +" already initialized element." +msgstr "" + +#: ../../../build/NEWS:11245 +msgid "" +":issue:`23420`: Verify the value for the parameter '-s' of the cProfile CLI." +" Patch by Robert Kuska" +msgstr "" + +#: ../../../build/NEWS:11248 +msgid "" +":issue:`33947`: dataclasses now handle recursive reprs without raising " +"RecursionError." +msgstr "" + +#: ../../../build/NEWS:11251 +msgid "" +":issue:`34890`: Make :func:`inspect.iscoroutinefunction`, " +":func:`inspect.isgeneratorfunction` and :func:`inspect.isasyncgenfunction` " +"work with :func:`functools.partial`. Patch by Pablo Galindo." +msgstr "" + +#: ../../../build/NEWS:11255 +msgid "" +":issue:`34521`: Use :func:`socket.CMSG_SPACE` to calculate ancillary data " +"size instead of :func:`socket.CMSG_LEN` in " +":func:`multiprocessing.reduction.recvfds` as :rfc:`3542` requires the use of" +" the former for portable applications." +msgstr "" + +#: ../../../build/NEWS:11260 +msgid "" +":issue:`31522`: The `mailbox.mbox.get_string` function *from_* parameter can" +" now successfully be set to a non-default value." +msgstr "" + +#: ../../../build/NEWS:11263 +msgid "" +":issue:`34970`: Protect tasks weak set manipulation in " +"``asyncio.all_tasks()``" +msgstr "" + +#: ../../../build/NEWS:11265 +msgid "" +":issue:`34969`: gzip: Add --fast, --best on the gzip CLI, these parameters " +"will be used for the fast compression method (quick) or the best method " +"compress (slower, but smaller file). Also, change the default compression " +"level to 6 (tradeoff)." +msgstr "" + +#: ../../../build/NEWS:11270 +msgid "" +":issue:`16965`: The :term:`2to3` :2to3fixer:`execfile` fixer now opens the " +"file with mode ``'rb'``. Patch by Zackery Spytz." +msgstr "" + +#: ../../../build/NEWS:11273 +msgid "" +":issue:`34966`: :mod:`pydoc` now supports aliases not only to methods " +"defined in the end class, but also to inherited methods. The docstring is " +"not duplicated for aliases." +msgstr "" + +#: ../../../build/NEWS:11277 +msgid "" +":issue:`34926`: :meth:`mimetypes.MimeTypes.guess_type` now accepts " +":term:`path-like object` in addition to url strings. Patch by Mayank " +"Asthana." +msgstr "" + +#: ../../../build/NEWS:11281 +msgid "" +":issue:`23831`: Add ``moveto()`` method to the ``tkinter.Canvas`` widget. " +"Patch by Juliette Monsel." +msgstr "" + +#: ../../../build/NEWS:11284 +msgid "" +":issue:`34941`: Methods ``find()``, ``findtext()`` and ``findall()`` of the " +"``Element`` class in the :mod:`xml.etree.ElementTree` module are now able to" +" find children which are instances of ``Element`` subclasses." +msgstr "" + +#: ../../../build/NEWS:11288 +msgid "" +":issue:`32680`: :class:`smtplib.SMTP` objects now always have a `sock` " +"attribute present" +msgstr "" + +#: ../../../build/NEWS:11291 +msgid "" +":issue:`34769`: Fix for async generators not finalizing when event loop is " +"in debug mode and garbage collector runs in another thread." +msgstr "" + +#: ../../../build/NEWS:11294 +msgid "" +":issue:`34936`: Fix ``TclError`` in ``tkinter.Spinbox.selection_element()``." +" Patch by Juliette Monsel." +msgstr "" + +#: ../../../build/NEWS:11297 +msgid "" +":issue:`34829`: Add methods ``selection_from``, ``selection_range``, " +"``selection_present`` and ``selection_to`` to the ``tkinter.Spinbox`` for " +"consistency with the ``tkinter.Entry`` widget. Patch by Juliette Monsel." +msgstr "" + +#: ../../../build/NEWS:11301 +msgid "" +":issue:`34911`: Added *secure_protocols* argument to " +"*http.cookiejar.DefaultCookiePolicy* to allow for tweaking of protocols and " +"also to add support by default for *wss*, the secure websocket protocol." +msgstr "" + +#: ../../../build/NEWS:11306 +msgid "" +":issue:`34922`: Fixed integer overflow in the " +":meth:`~hashlib.shake.digest()` and :meth:`~hashlib.shake.hexdigest()` " +"methods for the SHAKE algorithm in the :mod:`hashlib` module." +msgstr "" + +#: ../../../build/NEWS:11310 +msgid "" +":issue:`34925`: 25% speedup in argument parsing for the functions in the " +"bisect module." +msgstr "" + +#: ../../../build/NEWS:11313 +msgid "" +":issue:`34900`: Fixed :meth:`unittest.TestCase.debug` when used to call test" +" methods with subtests. Patch by Bruno Oliveira." +msgstr "" + +#: ../../../build/NEWS:11316 +msgid "" +":issue:`34844`: logging.Formatter enhancement - Ensure styles and fmt " +"matches in logging.Formatter - Added validate method in each format style " +"class: StrFormatStyle, PercentStyle, StringTemplateStyle. - This method is " +"called in the constructor of logging.Formatter class - Also re-raise the " +"KeyError in the format method of each style class, so it would a bit clear " +"that it's an error with the invalid format fields." +msgstr "" + +#: ../../../build/NEWS:11323 +msgid "" +":issue:`34897`: Adjust test.support.missing_compiler_executable check so " +"that a nominal command name of \"\" is ignored. Patch by Michael Felt." +msgstr "" + +#: ../../../build/NEWS:11326 +msgid "" +":issue:`34871`: Fix inspect module polluted ``sys.modules`` when parsing " +"``__text_signature__`` of callable." +msgstr "" + +#: ../../../build/NEWS:11329 +msgid "" +":issue:`34898`: Add `mtime` argument to `gzip.compress` for reproducible " +"output. Patch by Guo Ci Teo." +msgstr "" + +#: ../../../build/NEWS:11332 +msgid "" +":issue:`28441`: On Cygwin and MinGW, ensure that ``sys.executable`` always " +"includes the full filename in the path, including the ``.exe`` suffix " +"(unless it is a symbolic link)." +msgstr "" + +#: ../../../build/NEWS:11336 +msgid "" +":issue:`34866`: Adding ``max_num_fields`` to ``cgi.FieldStorage`` to make " +"DOS attacks harder by limiting the number of ``MiniFieldStorage`` objects " +"created by ``FieldStorage``." +msgstr "" + +#: ../../../build/NEWS:11340 +msgid "" +":issue:`34711`: http.server ensures it reports HTTPStatus.NOT_FOUND when the" +" local path ends with \"/\" and is not a directory, even if the underlying " +"OS (e.g. AIX) accepts such paths as a valid file reference. Patch by Michael" +" Felt." +msgstr "" + +#: ../../../build/NEWS:11345 +msgid "" +":issue:`34872`: Fix self-cancellation in C implementation of asyncio.Task" +msgstr "" + +#: ../../../build/NEWS:11347 +msgid "" +":issue:`34849`: Don't log waiting for ``selector.select`` in asyncio loop " +"iteration. The waiting is pretty normal for any asyncio program, logging its" +" time just adds a noise to logs without any useful information provided." +msgstr "" + +#: ../../../build/NEWS:11352 +msgid "" +":issue:`34022`: The :envvar:`SOURCE_DATE_EPOCH` environment variable no " +"longer overrides the value of the *invalidation_mode* argument to " +":func:`py_compile.compile`, and determines its default value instead." +msgstr "" + +#: ../../../build/NEWS:11356 +msgid "" +":issue:`34819`: Use a monotonic clock to compute timeouts in " +":meth:`Executor.map` and :func:`as_completed`, in order to prevent timeouts " +"from deviating when the system clock is adjusted." +msgstr "" + +#: ../../../build/NEWS:11360 +msgid "" +":issue:`34758`: Add .wasm -> application/wasm to list of recognized file " +"types and content type headers" +msgstr "" + +#: ../../../build/NEWS:11363 +msgid "" +":issue:`34789`: :func:`xml.sax.make_parser` now accepts any iterable as its " +"*parser_list* argument. Patch by Andrés Delfino." +msgstr "" + +#: ../../../build/NEWS:11366 +msgid "" +":issue:`34334`: In :class:`QueueHandler`, clear `exc_text` from " +":class:`LogRecord` to prevent traceback from being written twice." +msgstr "" + +#: ../../../build/NEWS:11369 +msgid "" +":issue:`34687`: On Windows, asyncio now uses ProactorEventLoop, instead of " +"SelectorEventLoop, by default." +msgstr "" + +#: ../../../build/NEWS:11372 +msgid "" +":issue:`5950`: Support reading zip files with archive comments in " +":mod:`zipimport`." +msgstr "" + +#: ../../../build/NEWS:11375 +msgid "" +":issue:`32892`: The parser now represents all constants as " +":class:`ast.Constant` instead of using specific constant AST types (``Num``," +" ``Str``, ``Bytes``, ``NameConstant`` and ``Ellipsis``). These classes are " +"considered deprecated and will be removed in future Python versions." +msgstr "" + +#: ../../../build/NEWS:11381 +msgid "" +":issue:`34728`: Add deprecation warning when `loop` is used in methods: " +"`asyncio.sleep`, `asyncio.wait` and `asyncio.wait_for`." +msgstr "" + +#: ../../../build/NEWS:11384 +msgid "" +":issue:`34738`: ZIP files created by :mod:`distutils` will now include " +"entries for directories." +msgstr "" + +#: ../../../build/NEWS:11387 +msgid "" +":issue:`34659`: Add an optional *initial* argument to " +"itertools.accumulate()." +msgstr "" + +#: ../../../build/NEWS:11389 +msgid ":issue:`29577`: Support multiple mixin classes when creating Enums." +msgstr "" + +#: ../../../build/NEWS:11391 +msgid "" +":issue:`34670`: Add SSLContext.post_handshake_auth and " +"SSLSocket.verify_client_post_handshake for TLS 1.3's post handshake " +"authentication feature." +msgstr "" + +#: ../../../build/NEWS:11395 +msgid "" +":issue:`32718`: The Activate.ps1 script from venv works with PowerShell Core" +" 6.1 and is now available under all operating systems." +msgstr "" + +#: ../../../build/NEWS:11398 +msgid "" +":issue:`31177`: Fix bug that prevented using :meth:`reset_mock " +"` on mock instances with deleted attributes" +msgstr "" + +#: ../../../build/NEWS:11401 +msgid "" +":issue:`34672`: Add a workaround, so the ``'Z'`` :func:`time.strftime` " +"specifier on the musl C library can work in some cases." +msgstr "" + +#: ../../../build/NEWS:11404 +msgid "" +":issue:`34666`: Implement ``asyncio.StreamWriter.awrite`` and " +"``asyncio.StreamWriter.aclose()`` coroutines. Methods are needed for " +"providing a consistent stream API with control flow switched on by default." +msgstr "" + +#: ../../../build/NEWS:11409 +msgid "" +":issue:`6721`: Acquire the logging module's commonly used internal locks " +"while fork()ing to avoid deadlocks in the child process." +msgstr "" + +#: ../../../build/NEWS:11412 +msgid "" +":issue:`34658`: Fix a rare interpreter unhandled exception state SystemError" +" only seen when using subprocess with a preexec_fn while an after_parent " +"handler has been registered with os.register_at_fork and the fork system " +"call fails." +msgstr "" + +#: ../../../build/NEWS:11417 +msgid ":issue:`34652`: Ensure :func:`os.lchmod` is never defined on Linux." +msgstr "" + +#: ../../../build/NEWS:11419 +msgid "" +":issue:`34638`: Store a weak reference to stream reader to break strong " +"references loop between reader and protocol. It allows to detect and close " +"the socket if the stream is deleted (garbage collected) without ``close()`` " +"call." +msgstr "" + +#: ../../../build/NEWS:11424 +msgid "" +":issue:`34536`: `Enum._missing_`: raise `ValueError` if None returned and " +"`TypeError` if non-member is returned." +msgstr "" + +#: ../../../build/NEWS:11427 +msgid "" +":issue:`34636`: Speed up re scanning of many non-matching characters for \\s" +" \\w and \\d within bytes objects. (microoptimization)" +msgstr "" + +#: ../../../build/NEWS:11430 +msgid "" +":issue:`24412`: Add :func:`~unittest.addModuleCleanup()` and " +":meth:`~unittest.TestCase.addClassCleanup()` to unittest to support cleanups" +" for :func:`~unittest.setUpModule()` and " +":meth:`~unittest.TestCase.setUpClass()`. Patch by Lisa Roach." +msgstr "" + +#: ../../../build/NEWS:11435 +msgid "" +":issue:`34630`: Don't log SSL certificate errors in asyncio code (connection" +" error logging is skipped already)." +msgstr "" + +#: ../../../build/NEWS:11438 +msgid "" +":issue:`32490`: Prevent filename duplication in :mod:`subprocess` exception " +"messages. Patch by Zackery Spytz." +msgstr "" + +#: ../../../build/NEWS:11441 +msgid "" +":issue:`34363`: dataclasses.asdict() and .astuple() now handle namedtuples " +"correctly." +msgstr "" + +#: ../../../build/NEWS:11444 +msgid ":issue:`34625`: Update vendorized expat library version to 2.2.6." +msgstr "" + +#: ../../../build/NEWS:11446 +msgid "" +":issue:`32270`: The subprocess module no longer mistakenly closes redirected" +" fds even when they were in pass_fds when outside of the default {0, 1, 2} " +"set." +msgstr "" + +#: ../../../build/NEWS:11450 +msgid "" +":issue:`34622`: Create a dedicated ``asyncio.CancelledError``, " +"``asyncio.InvalidStateError`` and ``asyncio.TimeoutError`` exception " +"classes. Inherit them from corresponding exceptions from " +"``concurrent.futures`` package. Extract ``asyncio`` exceptions into a " +"separate file." +msgstr "" + +#: ../../../build/NEWS:11456 +msgid "" +":issue:`34610`: Fixed iterator of " +":class:`multiprocessing.managers.DictProxy`." +msgstr "" + +#: ../../../build/NEWS:11458 +msgid "" +":issue:`34421`: Fix distutils logging for non-ASCII strings. This caused " +"installation issues on Windows." +msgstr "" + +#: ../../../build/NEWS:11461 +msgid "" +":issue:`34604`: Fix possible mojibake in the error message of `pwd.getpwnam`" +" and `grp.getgrnam` using string representation because of invisible " +"characters or trailing whitespaces. Patch by William Grzybowski." +msgstr "" + +#: ../../../build/NEWS:11465 +msgid "" +":issue:`30977`: Make uuid.UUID use ``__slots__`` to reduce its memory " +"footprint. Based on original patch by Wouter Bolsterlee." +msgstr "" + +#: ../../../build/NEWS:11468 +msgid "" +":issue:`34574`: OrderedDict iterators are not exhausted during pickling " +"anymore. Patch by Sergey Fedoseev." +msgstr "" + +#: ../../../build/NEWS:11471 +msgid "" +":issue:`8110`: Refactored :mod:`subprocess` to check for Windows-specific " +"modules rather than ``sys.platform == 'win32'``." +msgstr "" + +#: ../../../build/NEWS:11474 +msgid "" +":issue:`34530`: ``distutils.spawn.find_executable()`` now falls back on " +":data:`os.defpath` if the ``PATH`` environment variable is not set." +msgstr "" + +#: ../../../build/NEWS:11477 +msgid "" +":issue:`34563`: On Windows, fix multiprocessing.Connection for very large " +"read: fix _winapi.PeekNamedPipe() and _winapi.ReadFile() for read larger " +"than INT_MAX (usually ``2**31-1``)." +msgstr "" + +#: ../../../build/NEWS:11481 +msgid ":issue:`34558`: Correct typo in Lib/ctypes/_aix.py" +msgstr "" + +#: ../../../build/NEWS:11483 +msgid "" +":issue:`34282`: Move ``Enum._convert`` to ``EnumMeta._convert_`` and fix " +"enum members getting shadowed by parent attributes." +msgstr "" + +#: ../../../build/NEWS:11486 +msgid "" +":issue:`22872`: When the queue is closed, :exc:`ValueError` is now raised by" +" :meth:`multiprocessing.Queue.put` and :meth:`multiprocessing.Queue.get` " +"instead of :exc:`AssertionError` and :exc:`OSError`, respectively. Patch by " +"Zackery Spytz." +msgstr "" + +#: ../../../build/NEWS:11491 +msgid "" +":issue:`34515`: Fix parsing non-ASCII identifiers in " +":mod:`lib2to3.pgen2.tokenize` (PEP 3131)." +msgstr "" + +#: ../../../build/NEWS:11494 +msgid "" +":issue:`13312`: Avoids a possible integer underflow (undefined behavior) in " +"the time module's year handling code when passed a very low negative year " +"value." +msgstr "" + +#: ../../../build/NEWS:11498 +msgid "" +":issue:`34472`: Improved compatibility for streamed files in :mod:`zipfile`." +" Previously an optional signature was not being written and certain ZIP " +"applications were not supported. Patch by Silas Sewell." +msgstr "" + +#: ../../../build/NEWS:11502 +msgid "" +":issue:`34454`: Fix the .fromisoformat() methods of datetime types crashing " +"when given unicode with non-UTF-8-encodable code points. Specifically, " +"datetime.fromisoformat() now accepts surrogate unicode code points used as " +"the separator. Report and tests by Alexey Izbyshev, patch by Paul Ganssle." +msgstr "" + +#: ../../../build/NEWS:11507 +msgid "" +":issue:`6700`: Fix inspect.getsourcelines for module level " +"frames/tracebacks. Patch by Vladimir Matveev." +msgstr "" + +#: ../../../build/NEWS:11510 +msgid "" +":issue:`34171`: Running the :mod:`trace` module no longer creates the " +"``trace.cover`` file." +msgstr "" + +#: ../../../build/NEWS:11513 +msgid "" +":issue:`34441`: Fix crash when an ``ABC``-derived class with invalid " +"``__subclasses__`` is passed as the second argument to :func:`issubclass()`." +" Patch by Alexey Izbyshev." +msgstr "" + +#: ../../../build/NEWS:11517 +msgid "" +":issue:`34427`: Fix infinite loop in ``a.extend(a)`` for ``MutableSequence``" +" subclasses." +msgstr "" + +#: ../../../build/NEWS:11520 +msgid "" +":issue:`34412`: Make :func:`signal.strsignal` work on HP-UX. Patch by " +"Michael Osipov." +msgstr "" + +#: ../../../build/NEWS:11523 +msgid "" +":issue:`20849`: shutil.copytree now accepts a new ``dirs_exist_ok`` keyword " +"argument. Patch by Josh Bronson." +msgstr "" + +#: ../../../build/NEWS:11526 +msgid "" +":issue:`31715`: Associate ``.mjs`` file extension with " +"``application/javascript`` MIME Type." +msgstr "" + +#: ../../../build/NEWS:11529 +msgid "" +":issue:`34384`: :func:`os.readlink` now accepts :term:`path-like ` and :class:`bytes` objects on Windows." +msgstr "" + +#: ../../../build/NEWS:11532 +msgid "" +":issue:`22602`: The UTF-7 decoder now raises :exc:`UnicodeDecodeError` for " +"ill-formed sequences starting with \"+\" (as specified in RFC 2152). Patch " +"by Zackery Spytz." +msgstr "" + +#: ../../../build/NEWS:11536 +msgid "" +":issue:`2122`: The :meth:`mmap.flush() ` method now returns" +" ``None`` on success, raises an exception on error under all platforms." +msgstr "" + +#: ../../../build/NEWS:11539 +msgid "" +":issue:`34341`: Appending to the ZIP archive with the ZIP64 extension no " +"longer grows the size of extra fields of existing entries." +msgstr "" + +#: ../../../build/NEWS:11542 +msgid "" +":issue:`34333`: Fix %-formatting in :meth:`pathlib.PurePath.with_suffix` " +"when formatting an error message." +msgstr "" + +#: ../../../build/NEWS:11545 +msgid "" +":issue:`18540`: The :class:`imaplib.IMAP4` and :class:`imaplib.IMAP4_SSL` " +"classes now resolve to the local host IP correctly when the default value of" +" *host* parameter (``''``) is used." +msgstr "" + +#: ../../../build/NEWS:11549 +msgid "" +":issue:`26502`: Implement ``traceback.FrameSummary.__len__()`` method to " +"preserve compatibility with the old tuple API." +msgstr "" + +#: ../../../build/NEWS:11552 +msgid "" +":issue:`34318`: :func:`~unittest.TestCase.assertRaises`, " +":func:`~unittest.TestCase.assertRaisesRegex`, " +":func:`~unittest.TestCase.assertWarns` and " +":func:`~unittest.TestCase.assertWarnsRegex` no longer success if the passed " +"callable is None. They no longer ignore unknown keyword arguments in the " +"context manager mode. A DeprecationWarning was raised in these cases since " +"Python 3.5." +msgstr "" + +#: ../../../build/NEWS:11560 +msgid "" +":issue:`9372`: Deprecate :meth:`__getitem__` methods of " +":class:`xml.dom.pulldom.DOMEventStream`, :class:`wsgiref.util.FileWrapper` " +"and :class:`fileinput.FileInput`." +msgstr "" + +#: ../../../build/NEWS:11564 +msgid "" +":issue:`33613`: Fix a race condition in " +"``multiprocessing.semaphore_tracker`` when the tracker receives SIGINT " +"before it can register signal handlers for ignoring it." +msgstr "" + +#: ../../../build/NEWS:11568 +msgid "" +":issue:`34248`: Report filename in the exception raised when the database " +"file cannot be opened by :func:`dbm.gnu.open` and :func:`dbm.ndbm.open` due " +"to OS-related error. Patch by Zsolt Cserna." +msgstr "" + +#: ../../../build/NEWS:11572 +msgid "" +":issue:`33089`: Add math.dist() to compute the Euclidean distance between " +"two points." +msgstr "" + +#: ../../../build/NEWS:11575 +msgid "" +":issue:`34246`: :meth:`smtplib.SMTP.send_message` no longer modifies the " +"content of the *mail_options* argument. Patch by Pablo S. Blum de Aguiar." +msgstr "" + +#: ../../../build/NEWS:11578 +msgid "" +":issue:`31047`: Fix ``ntpath.abspath`` for invalid paths on windows. Patch " +"by Franz Woellert." +msgstr "" + +#: ../../../build/NEWS:11581 +msgid "" +":issue:`32321`: Add pure Python fallback for functools.reduce. Patch by " +"Robert Wright." +msgstr "" + +#: ../../../build/NEWS:11584 +msgid "" +":issue:`34270`: The default asyncio task class now always has a name which " +"can be get or set using two new methods (:meth:`~asyncio.Task.get_name()` " +"and :meth:`~asyncio.Task.set_name`) and is visible in the :func:`repr` " +"output. An initial name can also be set using the new ``name`` keyword " +"argument to :func:`asyncio.create_task` or the " +":meth:`~asyncio.AbstractEventLoop.create_task` method of the event loop. If " +"no initial name is set, the default Task implementation generates a name " +"like ``Task-1`` using a monotonic counter." +msgstr "" + +#: ../../../build/NEWS:11593 +msgid "" +":issue:`34263`: asyncio's event loop will not pass timeouts longer than one " +"day to epoll/select etc." +msgstr "" + +#: ../../../build/NEWS:11596 +msgid "" +":issue:`34035`: Fix several AttributeError in zipfile seek() methods. Patch " +"by Mickaël Schoentgen." +msgstr "" + +#: ../../../build/NEWS:11599 +msgid "" +":issue:`32215`: Fix performance regression in :mod:`sqlite3` when a DML " +"statement appeared in a different line than the rest of the SQL query." +msgstr "" + +#: ../../../build/NEWS:11602 +msgid "" +":issue:`34075`: Deprecate passing non-ThreadPoolExecutor instances to " +":meth:`AbstractEventLoop.set_default_executor`." +msgstr "" + +#: ../../../build/NEWS:11605 +msgid "" +":issue:`34251`: Restore ``msilib.Win64`` to preserve backwards compatibility" +" since it's already used by :mod:`distutils`' ``bdist_msi`` command." +msgstr "" + +#: ../../../build/NEWS:11608 +msgid "" +":issue:`19891`: Ignore errors caused by missing / non-writable homedir while" +" writing history during exit of an interactive session. Patch by Anthony " +"Sottile." +msgstr "" + +#: ../../../build/NEWS:11612 +msgid "" +":issue:`33089`: Enhanced math.hypot() to support more than two dimensions." +msgstr "" + +#: ../../../build/NEWS:11614 +msgid "" +":issue:`34228`: tracemalloc: PYTHONTRACEMALLOC=0 environment variable and -X" +" tracemalloc=0 command line option are now allowed to disable explicitly " +"tracemalloc at startup." +msgstr "" + +#: ../../../build/NEWS:11618 +msgid "" +":issue:`13041`: Use :func:`shutil.get_terminal_size` to calculate the " +"terminal width correctly in the ``argparse.HelpFormatter`` class. Initial " +"patch by Zbyszek Jędrzejewski-Szmek." +msgstr "" + +#: ../../../build/NEWS:11622 +msgid "" +":issue:`34213`: Allow frozen dataclasses to have a field named \"object\". " +"Previously this conflicted with an internal use of \"object\"." +msgstr "" + +#: ../../../build/NEWS:11625 +msgid "" +":issue:`34052`: :meth:`sqlite3.Connection.create_aggregate`, " +":meth:`sqlite3.Connection.create_function`, " +":meth:`sqlite3.Connection.set_authorizer`, " +":meth:`sqlite3.Connection.set_progress_handler` methods raises TypeError " +"when unhashable objects are passed as callable. These methods now don't pass" +" such objects to SQLite API. Previous behavior could lead to segfaults. " +"Patch by Sergey Fedoseev." +msgstr "" + +#: ../../../build/NEWS:11633 +msgid "" +":issue:`34197`: Attributes *skipinitialspace*, *doublequote* and *strict* of" +" the *dialect* attribute of the :mod:`csv` reader are now :class:`bool` " +"instances instead of integers 0 or 1." +msgstr "" + +#: ../../../build/NEWS:11637 +msgid "" +":issue:`32788`: Errors other than :exc:`TypeError` raised in methods " +"``__adapt__()`` and ``__conform__()`` in the :mod:`sqlite3` module are now " +"propagated to the user." +msgstr "" + +#: ../../../build/NEWS:11641 +msgid "" +":issue:`21446`: The :2to3fixer:`reload` fixer now uses " +":func:`importlib.reload` instead of deprecated :func:`imp.reload`." +msgstr "" + +#: ../../../build/NEWS:11644 +msgid "" +":issue:`940286`: pydoc's ``Helper.showtopic()`` method now prints the cross " +"references of a topic correctly." +msgstr "" + +#: ../../../build/NEWS:11647 +msgid "" +":issue:`34164`: :func:`base64.b32decode` could raise UnboundLocalError or " +"OverflowError for incorrect padding. Now it always raises " +":exc:`base64.Error` in these cases." +msgstr "" + +#: ../../../build/NEWS:11651 +msgid ":issue:`33729`: Fixed issues with arguments parsing in :mod:`hashlib`." +msgstr "" + +#: ../../../build/NEWS:11653 +msgid "" +":issue:`34097`: ZipFile can zip files older than 1980-01-01 and newer than " +"2107-12-31 using a new ``strict_timestamps`` parameter at the cost of " +"setting the timestamp to the limit." +msgstr "" + +#: ../../../build/NEWS:11657 +msgid ":issue:`34108`: Remove extraneous CR in 2to3 refactor." +msgstr "" + +#: ../../../build/NEWS:11659 +msgid "" +":issue:`34070`: Make sure to only check if the handle is a tty, when opening" +" a file with ``buffering=-1``." +msgstr "" + +#: ../../../build/NEWS:11662 +msgid "" +":issue:`27494`: Reverted :issue:`27494`. 2to3 rejects now a trailing comma " +"in generator expressions." +msgstr "" + +#: ../../../build/NEWS:11665 +msgid "" +":issue:`33967`: functools.singledispatch now raises TypeError instead of " +"IndexError when no positional arguments are passed." +msgstr "" + +#: ../../../build/NEWS:11668 +msgid "" +":issue:`34041`: Add the parameter *deterministic* to the " +":meth:`sqlite3.Connection.create_function` method. Patch by Sergey Fedoseev." +msgstr "" + +#: ../../../build/NEWS:11672 +msgid "" +":issue:`34056`: Ensure the loader shim created by ``imp.load_module`` always" +" returns bytes from its ``get_data()`` function. This fixes using " +"``imp.load_module`` with :pep:`552` hash-based pycs." +msgstr "" + +#: ../../../build/NEWS:11676 +msgid "" +":issue:`34054`: The multiprocessing module now uses the monotonic clock " +":func:`time.monotonic` instead of the system clock :func:`time.time` to " +"implement timeout." +msgstr "" + +#: ../../../build/NEWS:11680 +msgid "" +":issue:`34043`: Optimize tarfile uncompress performance about 15% when gzip " +"is used." +msgstr "" + +#: ../../../build/NEWS:11683 +msgid "" +":issue:`34044`: ``subprocess.Popen`` now copies the *startupinfo* argument " +"to leave it unchanged: it will modify the copy, so that the same " +"``STARTUPINFO`` object can be used multiple times." +msgstr "" + +#: ../../../build/NEWS:11687 +msgid "" +":issue:`34010`: Fixed a performance regression for reading streams with " +"tarfile. The buffered read should use a list, instead of appending to a " +"bytes object." +msgstr "" + +#: ../../../build/NEWS:11691 +msgid "" +":issue:`34019`: webbrowser: Correct the arguments passed to Opera Browser " +"when opening a new URL using the ``webbrowser`` module. Patch by Bumsik Kim." +msgstr "" + +#: ../../../build/NEWS:11694 +msgid "" +":issue:`34003`: csv.DictReader now creates dicts instead of OrderedDicts. " +"Patch by Michael Selik." +msgstr "" + +#: ../../../build/NEWS:11697 +msgid "" +":issue:`33978`: Closed existing logging handlers before reconfiguration via " +"fileConfig and dictConfig. Patch by Karthikeyan Singaravelan." +msgstr "" + +#: ../../../build/NEWS:11700 +msgid "" +":issue:`14117`: Make minor tweaks to turtledemo. The 'wikipedia' example is " +"now 'rosette', describing what it draws. The 'penrose' print output is " +"reduced. The'1024' output of 'tree' is eliminated." +msgstr "" + +#: ../../../build/NEWS:11704 +msgid "" +":issue:`33974`: Fixed passing lists and tuples of strings containing special" +" characters ``\"``, ``\\``, ``{``, ``}`` and ``\\n`` as options to " +":mod:`~tkinter.ttk` widgets." +msgstr "" + +#: ../../../build/NEWS:11708 +msgid ":issue:`27500`: Fix getaddrinfo to resolve IPv6 addresses correctly." +msgstr "" + +#: ../../../build/NEWS:11710 +msgid "" +":issue:`24567`: Improve random.choices() to handle subnormal input weights " +"that could occasionally trigger an IndexError." +msgstr "" + +#: ../../../build/NEWS:11713 +msgid "" +":issue:`33871`: Fixed integer overflow in :func:`os.readv`, " +":func:`os.writev`, :func:`os.preadv` and :func:`os.pwritev` and in " +":func:`os.sendfile` with *headers* or *trailers* arguments (on BSD-based " +"OSes and macOS)." +msgstr "" + +#: ../../../build/NEWS:11717 +msgid "" +":issue:`25007`: Add :func:`copy.copy` and :func:`copy.deepcopy` support to " +"zlib compressors and decompressors. Patch by Zackery Spytz." +msgstr "" + +#: ../../../build/NEWS:11720 +msgid "" +":issue:`33929`: multiprocessing: Fix a race condition in Popen of " +"multiprocessing.popen_spawn_win32. The child process now duplicates the read" +" end of pipe instead of \"stealing\" it. Previously, the read end of pipe " +"was \"stolen\" by the child process, but it leaked a handle if the child " +"process had been terminated before it could steal the handle from the parent" +" process." +msgstr "" + +#: ../../../build/NEWS:11727 +msgid "" +":issue:`33899`: Tokenize module now implicitly emits a NEWLINE when provided" +" with input that does not have a trailing new line. This behavior now " +"matches what the C tokenizer does internally. Contributed by Ammar Askar." +msgstr "" + +#: ../../../build/NEWS:11731 +msgid "" +":issue:`33897`: Added a 'force' keyword argument to logging.basicConfig()." +msgstr "" + +#: ../../../build/NEWS:11733 +msgid "" +":issue:`33695`: :func:`shutil.copytree` uses :func:`os.scandir` function and" +" all copy functions depending from it use cached :func:`os.stat` values. The" +" speedup for copying a directory with 8000 files is around +9% on Linux, " +"+20% on Windows and + 30% on a Windows SMB share. Also the number of " +":func:`os.stat` syscalls is reduced by 38% making :func:`shutil.copytree` " +"especially faster on network filesystems. (Contributed by Giampaolo Rodola' " +"in :issue:`33695`.)" +msgstr "" + +#: ../../../build/NEWS:11741 +msgid "" +":issue:`33916`: bz2 and lzma: When Decompressor.__init__() is called twice, " +"free the old lock to not leak memory." +msgstr "" + +#: ../../../build/NEWS:11744 +msgid "" +":issue:`32568`: Make select.epoll() and its documentation consistent " +"regarding *sizehint* and *flags*." +msgstr "" + +#: ../../../build/NEWS:11747 +msgid "" +":issue:`33833`: Fixed bug in asyncio where ProactorSocketTransport logs " +"AssertionError if force closed during write." +msgstr "" + +#: ../../../build/NEWS:11750 +msgid "" +":issue:`33663`: Convert content length to string before putting to header." +msgstr "" + +#: ../../../build/NEWS:11752 +msgid "" +":issue:`33721`: :mod:`os.path` functions that return a boolean result like " +":func:`~os.path.exists`, :func:`~os.path.lexists`, :func:`~os.path.isdir`, " +":func:`~os.path.isfile`, :func:`~os.path.islink`, and " +":func:`~os.path.ismount`, and :mod:`pathlib.Path` methods that return a " +"boolean result like :meth:`~pathlib.Path.exists()`, " +":meth:`~pathlib.Path.is_dir()`, :meth:`~pathlib.Path.is_file()`, " +":meth:`~pathlib.Path.is_mount()`, :meth:`~pathlib.Path.is_symlink()`, " +":meth:`~pathlib.Path.is_block_device()`, " +":meth:`~pathlib.Path.is_char_device()`, :meth:`~pathlib.Path.is_fifo()`, " +":meth:`~pathlib.Path.is_socket()` now return ``False`` instead of raising " +":exc:`ValueError` or its subclasses :exc:`UnicodeEncodeError` and " +":exc:`UnicodeDecodeError` for paths that contain characters or bytes " +"unrepresentable at the OS level." +msgstr "" + +#: ../../../build/NEWS:11766 +msgid "" +":issue:`26544`: Fixed implementation of :func:`platform.libc_ver`. It almost" +" always returned version '2.9' for glibc." +msgstr "" + +#: ../../../build/NEWS:11769 +msgid "" +":issue:`33843`: Remove deprecated ``cgi.escape``, ``cgi.parse_qs`` and " +"``cgi.parse_qsl``." +msgstr "" + +#: ../../../build/NEWS:11772 +msgid "" +":issue:`33842`: Remove ``tarfile.filemode`` which is deprecated since Python" +" 3.3." +msgstr "" + +#: ../../../build/NEWS:11775 ../../../build/NEWS:13373 +#: ../../../build/NEWS:17967 +msgid "" +":issue:`30167`: Prevent site.main() exception if PYTHONSTARTUP is set. Patch" +" by Steve Weber." +msgstr "" + +#: ../../../build/NEWS:11778 +msgid "" +":issue:`33805`: Improve error message of dataclasses.replace() when an " +"InitVar is not specified" +msgstr "" + +#: ../../../build/NEWS:11781 +msgid "" +":issue:`33687`: Fix the call to ``os.chmod()`` for ``uu.decode()`` if a mode" +" is given or decoded. Patch by Timo Furrer." +msgstr "" + +#: ../../../build/NEWS:11784 ../../../build/NEWS:13376 +#: ../../../build/NEWS:17970 +msgid "" +":issue:`33812`: Datetime instance d with non-None tzinfo, but with " +"d.tzinfo.utcoffset(d) returning None is now treated as naive by the " +"astimezone() method." +msgstr "" + +#: ../../../build/NEWS:11788 +msgid "" +":issue:`32108`: In configparser, don't clear section when it is assigned to " +"itself." +msgstr "" + +#: ../../../build/NEWS:11791 +msgid "" +":issue:`27397`: Make email module properly handle invalid-length base64 " +"strings." +msgstr "" + +#: ../../../build/NEWS:11794 +msgid ":issue:`33578`: Implement multibyte encoder/decoder state methods" +msgstr "" + +#: ../../../build/NEWS:11796 ../../../build/NEWS:13380 +#: ../../../build/NEWS:17974 +msgid ":issue:`30805`: Avoid race condition with debug logging" +msgstr "" + +#: ../../../build/NEWS:11798 +msgid "" +":issue:`33476`: Fix _header_value_parser.py when address group is missing " +"final ';'. Contributed by Enrique Perez-Terron" +msgstr "" + +#: ../../../build/NEWS:11801 ../../../build/NEWS:13382 +msgid "" +":issue:`33694`: asyncio: Fix a race condition causing data loss on " +"pause_reading()/resume_reading() when using the ProactorEventLoop." +msgstr "" + +#: ../../../build/NEWS:11804 ../../../build/NEWS:13385 +msgid "" +":issue:`32493`: Correct test for ``uuid_enc_be`` availability in " +"``configure.ac``. Patch by Michael Felt." +msgstr "" + +#: ../../../build/NEWS:11807 ../../../build/NEWS:13388 +msgid "" +":issue:`33792`: Add asyncio.WindowsSelectorEventLoopPolicy and " +"asyncio.WindowsProactorEventLoopPolicy." +msgstr "" + +#: ../../../build/NEWS:11810 +msgid "" +":issue:`33274`: W3C DOM Level 1 specifies return value of " +"Element.removeAttributeNode() as \"The Attr node that was removed.\" " +"xml.dom.minidom now complies with this requirement." +msgstr "" + +#: ../../../build/NEWS:11814 ../../../build/NEWS:13391 +msgid "" +":issue:`33778`: Update ``unicodedata``'s database to Unicode version 11.0.0." +msgstr "" + +#: ../../../build/NEWS:11816 +msgid "" +":issue:`33165`: Added a stacklevel parameter to logging calls to allow use " +"of wrapper/helper functions for logging APIs." +msgstr "" + +#: ../../../build/NEWS:11819 ../../../build/NEWS:13393 +msgid "" +":issue:`33770`: improve base64 exception message for encoded inputs of " +"invalid length" +msgstr "" + +#: ../../../build/NEWS:11822 ../../../build/NEWS:13396 +msgid "" +":issue:`33769`: asyncio/start_tls: Fix error message; cancel callbacks in " +"case of an unhandled error; mark SSLTransport as closed if it is aborted." +msgstr "" + +#: ../../../build/NEWS:11825 ../../../build/NEWS:13399 +#: ../../../build/NEWS:17976 +msgid "" +":issue:`33767`: The concatenation (``+``) and repetition (``*``) sequence " +"operations now raise :exc:`TypeError` instead of :exc:`SystemError` when " +"performed on :class:`mmap.mmap` objects. Patch by Zackery Spytz." +msgstr "" + +#: ../../../build/NEWS:11829 ../../../build/NEWS:13403 +msgid "" +":issue:`33734`: asyncio/ssl: Fix AttributeError, increase default handshake " +"timeout" +msgstr "" + +#: ../../../build/NEWS:11832 +msgid "" +":issue:`31014`: Fixed creating a controller for :mod:`webbrowser` when a " +"user specifies a path to an entry in the BROWSER environment variable. " +"Based on patch by John Still." +msgstr "" + +#: ../../../build/NEWS:11836 +msgid ":issue:`2504`: Add gettext.pgettext() and variants." +msgstr "" + +#: ../../../build/NEWS:11838 +msgid ":issue:`33197`: Add description property for _ParameterKind" +msgstr "" + +#: ../../../build/NEWS:11840 ../../../build/NEWS:13501 +msgid "" +":issue:`32751`: When cancelling the task due to a timeout, " +":meth:`asyncio.wait_for` will now wait until the cancellation is complete." +msgstr "" + +#: ../../../build/NEWS:11843 ../../../build/NEWS:13504 +#: ../../../build/NEWS:17980 +msgid "" +":issue:`32684`: Fix gather to propagate cancellation of itself even with " +"return_exceptions." +msgstr "" + +#: ../../../build/NEWS:11846 ../../../build/NEWS:13507 +msgid "" +":issue:`33654`: Support protocol type switching in " +"SSLTransport.set_protocol()." +msgstr "" + +#: ../../../build/NEWS:11848 ../../../build/NEWS:13509 +msgid "" +":issue:`33674`: Pause the transport as early as possible to further reduce " +"the risk of data_received() being called before connection_made()." +msgstr "" + +#: ../../../build/NEWS:11851 +msgid "" +":issue:`33671`: :func:`shutil.copyfile`, :func:`shutil.copy`, " +":func:`shutil.copy2`, :func:`shutil.copytree` and :func:`shutil.move` use " +"platform-specific fast-copy syscalls on Linux and macOS in order to copy the" +" file more efficiently. On Windows :func:`shutil.copyfile` uses a bigger " +"default buffer size (1 MiB instead of 16 KiB) and a :func:`memoryview`-based" +" variant of :func:`shutil.copyfileobj` is used. The speedup for copying a " +"512MiB file is about +26% on Linux, +50% on macOS and +40% on Windows. Also," +" much less CPU cycles are consumed. (Contributed by Giampaolo Rodola' in " +":issue:`25427`.)" +msgstr "" + +#: ../../../build/NEWS:11861 ../../../build/NEWS:13512 +#: ../../../build/NEWS:17983 +msgid "" +":issue:`33674`: Fix a race condition in SSLProtocol.connection_made() of " +"asyncio.sslproto: start immediately the handshake instead of using " +"call_soon(). Previously, data_received() could be called before the " +"handshake started, causing the handshake to hang or fail." +msgstr "" + +#: ../../../build/NEWS:11866 ../../../build/NEWS:13517 +#: ../../../build/NEWS:17988 +msgid "" +":issue:`31647`: Fixed bug where calling write_eof() on a " +"_SelectorSocketTransport after it's already closed raises AttributeError." +msgstr "" + +#: ../../../build/NEWS:11869 ../../../build/NEWS:13520 +msgid ":issue:`32610`: Make asyncio.all_tasks() return only pending tasks." +msgstr "" + +#: ../../../build/NEWS:11871 ../../../build/NEWS:13522 +msgid ":issue:`32410`: Avoid blocking on file IO in sendfile fallback code" +msgstr "" + +#: ../../../build/NEWS:11873 ../../../build/NEWS:13524 +#: ../../../build/NEWS:17993 +msgid "" +":issue:`33469`: Fix RuntimeError after closing loop that used " +"run_in_executor" +msgstr "" + +#: ../../../build/NEWS:11875 ../../../build/NEWS:13526 +#: ../../../build/NEWS:17991 +msgid ":issue:`33672`: Fix Task.__repr__ crash with Cython's bogus coroutines" +msgstr "" + +#: ../../../build/NEWS:11877 ../../../build/NEWS:13528 +msgid "" +":issue:`33654`: Fix transport.set_protocol() to support switching between " +"asyncio.Protocol and asyncio.BufferedProtocol. Fix loop.start_tls() to work" +" with asyncio.BufferedProtocols." +msgstr "" + +#: ../../../build/NEWS:11881 ../../../build/NEWS:13532 +msgid "" +":issue:`33652`: Pickles of type variables and subscripted generics are now " +"future-proof and compatible with older Python versions." +msgstr "" + +#: ../../../build/NEWS:11884 ../../../build/NEWS:13535 +msgid ":issue:`32493`: Fixed :func:`uuid.uuid1` on FreeBSD." +msgstr "" + +#: ../../../build/NEWS:11886 +msgid "" +":issue:`33238`: Add ``InvalidStateError`` to :mod:`concurrent.futures`. " +"``Future.set_result`` and ``Future.set_exception`` now raise " +"``InvalidStateError`` if the futures are not pending or running. Patch by " +"Jason Haydaman." +msgstr "" + +#: ../../../build/NEWS:11891 ../../../build/NEWS:13537 +msgid "" +":issue:`33618`: Finalize and document preliminary and experimental TLS 1.3 " +"support with OpenSSL 1.1.1" +msgstr "" + +#: ../../../build/NEWS:11894 +msgid "" +":issue:`33625`: Release GIL on `grp.getgrnam`, `grp.getgrgid`, " +"`pwd.getpwnam` and `pwd.getpwuid` if reentrant variants of these functions " +"are available. Patch by William Grzybowski." +msgstr "" + +#: ../../../build/NEWS:11898 ../../../build/NEWS:13540 +msgid "" +":issue:`33623`: Fix possible SIGSGV when asyncio.Future is created in " +"__del__" +msgstr "" + +#: ../../../build/NEWS:11900 ../../../build/NEWS:13406 +#: ../../../build/NEWS:17995 +msgid "" +":issue:`11874`: Use a better regex when breaking usage into wrappable parts." +" Avoids bogus assertion errors from custom metavar strings." +msgstr "" + +#: ../../../build/NEWS:11903 ../../../build/NEWS:13542 +#: ../../../build/NEWS:17998 +msgid "" +":issue:`30877`: Fixed a bug in the Python implementation of the JSON decoder" +" that prevented the cache of parsed strings from clearing after finishing " +"the decoding. Based on patch by c-fos." +msgstr "" + +#: ../../../build/NEWS:11907 +msgid "" +":issue:`33604`: Remove HMAC default to md5 marked for removal in 3.8 " +"(removal originally planned in 3.6, bump to 3.8 in PR 7062)." +msgstr "" + +#: ../../../build/NEWS:11910 ../../../build/NEWS:13409 +msgid ":issue:`33582`: Emit a deprecation warning for inspect.formatargspec" +msgstr "" + +#: ../../../build/NEWS:11912 +msgid "" +":issue:`21145`: Add ``functools.cached_property`` decorator, for computed " +"properties cached for the life of the instance." +msgstr "" + +#: ../../../build/NEWS:11915 ../../../build/NEWS:13546 +msgid "" +":issue:`33570`: Change TLS 1.3 cipher suite settings for compatibility with " +"OpenSSL 1.1.1-pre6 and newer. OpenSSL 1.1.1 will have TLS 1.3 ciphers " +"enabled by default." +msgstr "" + +#: ../../../build/NEWS:11919 ../../../build/NEWS:13550 +msgid "" +":issue:`28556`: Do not simplify arguments to `typing.Union`. Now " +"`Union[Manager, Employee]` is not simplified to `Employee` at runtime. Such " +"simplification previously caused several bugs and limited possibilities for " +"introspection." +msgstr "" + +#: ../../../build/NEWS:11924 +msgid "" +":issue:`12486`: :func:`tokenize.generate_tokens` is now documented as a " +"public API to tokenize unicode strings. It was previously present but " +"undocumented." +msgstr "" + +#: ../../../build/NEWS:11928 ../../../build/NEWS:13555 +msgid "" +":issue:`33540`: Add a new ``block_on_close`` class attribute to " +"``ForkingMixIn`` and ``ThreadingMixIn`` classes of :mod:`socketserver`." +msgstr "" + +#: ../../../build/NEWS:11931 ../../../build/NEWS:13558 +#: ../../../build/NEWS:18002 +msgid "" +":issue:`33548`: tempfile._candidate_tempdir_list should consider common TEMP" +" locations" +msgstr "" + +#: ../../../build/NEWS:11934 ../../../build/NEWS:13561 +msgid "" +":issue:`33109`: argparse subparsers are once again not required by default, " +"reverting the change in behavior introduced by :issue:`26510` in 3.7.0a2." +msgstr "" + +#: ../../../build/NEWS:11937 +msgid "" +":issue:`33541`: Remove unused private method ``_strptime.LocaleTime.__pad`` " +"(a.k.a. ``_LocaleTime__pad``)." +msgstr "" + +#: ../../../build/NEWS:11940 ../../../build/NEWS:13564 +msgid "" +":issue:`33536`: dataclasses.make_dataclass now checks for invalid field " +"names and duplicate fields. Also, added a check for invalid field " +"specifications." +msgstr "" + +#: ../../../build/NEWS:11944 ../../../build/NEWS:13568 +#: ../../../build/NEWS:18005 +msgid "" +":issue:`33542`: Prevent ``uuid.get_node`` from using a DUID instead of a MAC" +" on Windows. Patch by Zvi Effron" +msgstr "" + +#: ../../../build/NEWS:11947 ../../../build/NEWS:13571 +#: ../../../build/NEWS:18008 +msgid "" +":issue:`26819`: Fix race condition with `ReadTransport.resume_reading` in " +"Windows proactor event loop." +msgstr "" + +#: ../../../build/NEWS:11950 ../../../build/NEWS:13574 +msgid "" +"Fix failure in `typing.get_type_hints()` when ClassVar was provided as a " +"string forward reference." +msgstr "" + +#: ../../../build/NEWS:11953 +msgid "" +":issue:`33516`: :class:`unittest.mock.MagicMock` now supports the " +"``__round__`` magic method." +msgstr "" + +#: ../../../build/NEWS:11956 +msgid "" +":issue:`28612`: Added support for Site Maps to urllib's ``RobotFileParser`` " +"as :meth:`RobotFileParser.site_maps() " +"`. Patch by Lady Red, based on" +" patch by Peter Wirtz." +msgstr "" + +#: ../../../build/NEWS:11961 +msgid "" +":issue:`28167`: Remove platform.linux_distribution, which was deprecated " +"since 3.5." +msgstr "" + +#: ../../../build/NEWS:11964 +msgid "" +":issue:`33504`: Switch the default dictionary implementation for " +":mod:`configparser` from :class:`collections.OrderedDict` to the standard " +":class:`dict` type." +msgstr "" + +#: ../../../build/NEWS:11968 ../../../build/NEWS:13577 +msgid "" +":issue:`33505`: Optimize asyncio.ensure_future() by reordering if checks: " +"1.17x faster." +msgstr "" + +#: ../../../build/NEWS:11971 ../../../build/NEWS:13580 +msgid "" +":issue:`33497`: Add errors param to cgi.parse_multipart and make an encoding" +" in FieldStorage use the given errors (needed for Twisted). Patch by Amber " +"Brown." +msgstr "" + +#: ../../../build/NEWS:11975 +msgid "" +":issue:`29235`: The :class:`cProfile.Profile` class can now be used as a " +"context manager. Patch by Scott Sanderson." +msgstr "" + +#: ../../../build/NEWS:11978 ../../../build/NEWS:13584 +msgid "" +":issue:`33495`: Change dataclasses.Fields repr to use the repr of each of " +"its members, instead of str. This makes it more clear what each field " +"actually represents. This is especially true for the 'type' member." +msgstr "" + +#: ../../../build/NEWS:11982 +msgid "" +":issue:`26103`: Correct ``inspect.isdatadescriptor`` to look for ``__set__``" +" or ``__delete__``. Patch by Aaron Hall." +msgstr "" + +#: ../../../build/NEWS:11985 +msgid "" +":issue:`29209`: Removed the ``doctype()`` method and the *html* parameter of" +" the constructor of :class:`~xml.etree.ElementTree.XMLParser`. The " +"``doctype()`` method defined in a subclass will no longer be called. " +"Deprecated methods ``getchildren()`` and ``getiterator()`` in the " +":mod:`~xml.etree.ElementTree` module emit now a :exc:`DeprecationWarning` " +"instead of :exc:`PendingDeprecationWarning`." +msgstr "" + +#: ../../../build/NEWS:11992 ../../../build/NEWS:13588 +msgid "" +":issue:`33453`: Fix dataclasses to work if using literal string type " +"annotations or if using PEP 563 \"Postponed Evaluation of Annotations\". " +"Only specific string prefixes are detected for both ClassVar (\"ClassVar\" " +"and \"typing.ClassVar\") and InitVar (\"InitVar\" and " +"\"dataclasses.InitVar\")." +msgstr "" + +#: ../../../build/NEWS:11997 ../../../build/NEWS:13593 +#: ../../../build/NEWS:18011 +msgid "" +":issue:`28556`: Minor fixes in typing module: add annotations to " +"``NamedTuple.__new__``, pass ``*args`` and ``**kwds`` in " +"``Generic.__new__``. Original PRs by Paulius Šarka and Chad Dombrova." +msgstr "" + +#: ../../../build/NEWS:12001 +msgid "" +":issue:`33365`: Print the header values besides the header keys instead just" +" the header keys if *debuglevel* is set to >0 in :mod:`http.client`. Patch " +"by Marco Strigl." +msgstr "" + +#: ../../../build/NEWS:12005 ../../../build/NEWS:13597 +#: ../../../build/NEWS:18015 +msgid "" +":issue:`20087`: Updated alias mapping with glibc 2.27 supported locales." +msgstr "" + +#: ../../../build/NEWS:12007 ../../../build/NEWS:13599 +#: ../../../build/NEWS:18017 +msgid "" +":issue:`33422`: Fix trailing quotation marks getting deleted when looking up" +" byte/string literals on pydoc. Patch by Andrés Delfino." +msgstr "" + +#: ../../../build/NEWS:12010 ../../../build/NEWS:13602 +msgid "" +":issue:`28167`: The function ``platform.linux_distribution`` and " +"``platform.dist`` now trigger a ``DeprecationWarning`` and have been marked " +"for removal in Python 3.8" +msgstr "" + +#: ../../../build/NEWS:12014 ../../../build/NEWS:13709 +msgid ":issue:`33281`: Fix ctypes.util.find_library regression on macOS." +msgstr "" + +#: ../../../build/NEWS:12016 +msgid "" +":issue:`33311`: Text and html output generated by cgitb does not display " +"parentheses if the current call is done directly in the module. Patch by " +"Stéphane Blondon." +msgstr "" + +#: ../../../build/NEWS:12020 +msgid "" +":issue:`27300`: The file classes in *tempfile* now accept an *errors* " +"parameter that complements the already existing *encoding*. Patch by " +"Stephan Hohe." +msgstr "" + +#: ../../../build/NEWS:12023 +msgid "" +":issue:`32933`: :func:`unittest.mock.mock_open` now supports iteration over " +"the file contents. Patch by Tony Flury." +msgstr "" + +#: ../../../build/NEWS:12026 +msgid "" +":issue:`33217`: Raise :exc:`TypeError` when looking up non-Enum objects in " +"Enum classes and Enum members." +msgstr "" + +#: ../../../build/NEWS:12029 ../../../build/NEWS:13606 +#: ../../../build/NEWS:18020 +msgid "" +":issue:`33197`: Update error message when constructing invalid " +"inspect.Parameters Patch by Dong-hee Na." +msgstr "" + +#: ../../../build/NEWS:12032 ../../../build/NEWS:13711 +#: ../../../build/NEWS:18023 +msgid "" +":issue:`33383`: Fixed crash in the get() method of the :mod:`dbm.ndbm` " +"database object when it is called with a single argument." +msgstr "" + +#: ../../../build/NEWS:12035 +msgid "" +":issue:`33375`: The warnings module now finds the Python file associated " +"with a warning from the code object, rather than the frame's global " +"namespace. This is consistent with how tracebacks and pdb find filenames, " +"and should work better for dynamically executed code." +msgstr "" + +#: ../../../build/NEWS:12040 +msgid "" +":issue:`33336`: ``imaplib`` now allows ``MOVE`` command in ``IMAP4.uid()`` " +"(RFC 6851: IMAP MOVE Extension) and potentially as a name of supported " +"method of ``IMAP4`` object." +msgstr "" + +#: ../../../build/NEWS:12044 +msgid ":issue:`32455`: Added *jump* parameter to :func:`dis.stack_effect`." +msgstr "" + +#: ../../../build/NEWS:12046 +msgid "" +":issue:`27485`: Rename and deprecate undocumented functions in " +":func:`urllib.parse`." +msgstr "" + +#: ../../../build/NEWS:12049 +msgid "" +":issue:`33332`: Add ``signal.valid_signals()`` to expose the POSIX " +"sigfillset() functionality." +msgstr "" + +#: ../../../build/NEWS:12052 +msgid "" +":issue:`33251`: `ConfigParser.items()` was fixed so that key-value pairs " +"passed in via `vars` are not included in the resulting output." +msgstr "" + +#: ../../../build/NEWS:12055 ../../../build/NEWS:13714 +#: ../../../build/NEWS:18026 +msgid ":issue:`33329`: Fix multiprocessing regression on newer glibcs" +msgstr "" + +#: ../../../build/NEWS:12057 +msgid "" +":issue:`33334`: :func:`dis.stack_effect` now supports all defined opcodes " +"including NOP and EXTENDED_ARG." +msgstr "" + +#: ../../../build/NEWS:12060 ../../../build/NEWS:13716 +#: ../../../build/NEWS:18028 +msgid "" +":issue:`991266`: Fix quoting of the ``Comment`` attribute of " +":class:`http.cookies.SimpleCookie`." +msgstr "" + +#: ../../../build/NEWS:12063 ../../../build/NEWS:13719 +#: ../../../build/NEWS:18031 +msgid ":issue:`33131`: Upgrade bundled version of pip to 10.0.1." +msgstr "" + +#: ../../../build/NEWS:12065 ../../../build/NEWS:13721 +#: ../../../build/NEWS:18033 +msgid "" +":issue:`33308`: Fixed a crash in the :mod:`parser` module when converting an" +" ST object to a tree of tuples or lists with ``line_info=False`` and " +"``col_info=True``." +msgstr "" + +#: ../../../build/NEWS:12069 +msgid "" +":issue:`23403`: lib2to3 now uses pickle protocol 4 for pre-computed " +"grammars." +msgstr "" + +#: ../../../build/NEWS:12071 ../../../build/NEWS:13725 +msgid ":issue:`33266`: lib2to3 now recognizes ``rf'...'`` strings." +msgstr "" + +#: ../../../build/NEWS:12073 ../../../build/NEWS:13727 +msgid ":issue:`11594`: Ensure line-endings are respected when using lib2to3." +msgstr "" + +#: ../../../build/NEWS:12075 ../../../build/NEWS:13729 +msgid "" +":issue:`33254`: Have :func:`importlib.resources.contents` and " +":meth:`importlib.abc.ResourceReader.contents` return an :term:`iterable` " +"instead of an :term:`iterator`." +msgstr "" + +#: ../../../build/NEWS:12079 +msgid "" +":issue:`33265`: ``contextlib.ExitStack`` and ``contextlib.AsyncExitStack`` " +"now use a method instead of a wrapper function for exit callbacks." +msgstr "" + +#: ../../../build/NEWS:12082 ../../../build/NEWS:13609 +#: ../../../build/NEWS:18037 +msgid "" +":issue:`33263`: Fix FD leak in `_SelectorSocketTransport` Patch by Vlad " +"Starostin." +msgstr "" + +#: ../../../build/NEWS:12085 ../../../build/NEWS:13733 +#: ../../../build/NEWS:18040 +msgid "" +":issue:`33256`: Fix display of ```` call in the html produced by " +"``cgitb.html()``. Patch by Stéphane Blondon." +msgstr "" + +#: ../../../build/NEWS:12088 +msgid "" +":issue:`33144`: ``random.Random()`` and its subclassing mechanism got " +"optimized to check only once at class/subclass instantiation time whether " +"its ``getrandbits()`` method can be relied on by other methods, including " +"``randrange()``, for the generation of arbitrarily large random integers. " +"Patch by Wolfgang Maier." +msgstr "" + +#: ../../../build/NEWS:12094 +msgid "" +":issue:`33185`: Fixed regression when running pydoc with the :option:`-m` " +"switch. (The regression was introduced in 3.7.0b3 by the resolution of " +":issue:`33053`)" +msgstr "" + +#: ../../../build/NEWS:12098 +msgid "" +"This fix also changed pydoc to add ``os.getcwd()`` to :data:`sys.path` when " +"necessary, rather than adding ``\".\"``." +msgstr "" + +#: ../../../build/NEWS:12101 +msgid "" +":issue:`29613`: Added support for the ``SameSite`` cookie flag to the " +"``http.cookies`` module." +msgstr "" + +#: ../../../build/NEWS:12104 ../../../build/NEWS:13741 +msgid "" +":issue:`33169`: Delete entries of ``None`` in " +":data:`sys.path_importer_cache` when " +":meth:`importlib.machinery.invalidate_caches` is called." +msgstr "" + +#: ../../../build/NEWS:12107 ../../../build/NEWS:13747 +#: ../../../build/NEWS:18043 +msgid "" +":issue:`33203`: ``random.Random.choice()`` now raises ``IndexError`` for " +"empty sequences consistently even when called from subclasses without a " +"``getrandbits()`` implementation." +msgstr "" + +#: ../../../build/NEWS:12111 ../../../build/NEWS:13751 +#: ../../../build/NEWS:18047 +msgid "" +":issue:`33224`: Update difflib.mdiff() for :pep:`479`. Convert an uncaught " +"StopIteration in a generator into a return-statement." +msgstr "" + +#: ../../../build/NEWS:12114 ../../../build/NEWS:13754 +#: ../../../build/NEWS:18050 +msgid "" +":issue:`33209`: End framing at the end of C implementation of " +":func:`pickle.Pickler.dump`." +msgstr "" + +#: ../../../build/NEWS:12117 +msgid "" +":issue:`32861`: The urllib.robotparser's ``__str__`` representation now " +"includes wildcard entries and the \"Crawl-delay\" and \"Request-rate\" " +"fields. Also removes extra newlines that were being appended to the end of " +"the string. Patch by Michael Lazar." +msgstr "" + +#: ../../../build/NEWS:12122 +msgid "" +":issue:`23403`: ``DEFAULT_PROTOCOL`` in :mod:`pickle` was bumped to 4. " +"Protocol 4 is described in :pep:`3154` and available since Python 3.4. It " +"offers better performance and smaller size compared to protocol 3 introduced" +" in Python 3.0." +msgstr "" + +#: ../../../build/NEWS:12127 ../../../build/NEWS:13757 +msgid "" +":issue:`20104`: Improved error handling and fixed a reference leak in " +":func:`os.posix_spawn()`." +msgstr "" + +#: ../../../build/NEWS:12130 +msgid "" +":issue:`33106`: Deleting a key from a read-only dbm database raises module " +"specific error instead of KeyError." +msgstr "" + +#: ../../../build/NEWS:12133 ../../../build/NEWS:13760 +msgid "" +":issue:`33175`: In dataclasses, Field.__set_name__ now looks up the " +"__set_name__ special method on the class, not the instance, of the default " +"value." +msgstr "" + +#: ../../../build/NEWS:12137 +msgid "" +":issue:`32380`: Create functools.singledispatchmethod to support generic " +"single dispatch on descriptors and methods." +msgstr "" + +#: ../../../build/NEWS:12140 ../../../build/NEWS:13900 +msgid "" +":issue:`33141`: Have Field objects pass through __set_name__ to their " +"default values, if they have their own __set_name__." +msgstr "" + +#: ../../../build/NEWS:12143 ../../../build/NEWS:13903 +#: ../../../build/NEWS:18057 +msgid "" +":issue:`33096`: Allow ttk.Treeview.insert to insert iid that has a false " +"boolean value. Note iid=0 and iid=False would be same. Patch by Garvit " +"Khatri." +msgstr "" + +#: ../../../build/NEWS:12147 ../../../build/NEWS:13907 +msgid "" +":issue:`32873`: Treat type variables and special typing forms as immutable " +"by copy and pickle. This fixes several minor issues and inconsistencies, " +"and improves backwards compatibility with Python 3.6." +msgstr "" + +#: ../../../build/NEWS:12151 ../../../build/NEWS:13911 +msgid "" +":issue:`33134`: When computing dataclass's __hash__, use the lookup table to" +" contain the function which returns the __hash__ value. This is an " +"improvement over looking up a string, and then testing that string to see " +"what to do." +msgstr "" + +#: ../../../build/NEWS:12156 ../../../build/NEWS:13916 +#: ../../../build/NEWS:18061 +msgid ":issue:`33127`: The ssl module now compiles with LibreSSL 2.7.1." +msgstr "" + +#: ../../../build/NEWS:12158 ../../../build/NEWS:13918 +msgid "" +":issue:`32505`: Raise TypeError if a member variable of a dataclass is of " +"type Field, but doesn't have a type annotation." +msgstr "" + +#: ../../../build/NEWS:12161 ../../../build/NEWS:13921 +msgid "" +":issue:`33078`: Fix the failure on OSX caused by the tests relying on " +"sem_getvalue" +msgstr "" + +#: ../../../build/NEWS:12164 ../../../build/NEWS:13924 +msgid ":issue:`33116`: Add 'Field' to dataclasses.__all__." +msgstr "" + +#: ../../../build/NEWS:12166 ../../../build/NEWS:13926 +msgid "" +":issue:`32896`: Fix an error where subclassing a dataclass with a field that" +" uses a default_factory would generate an incorrect class." +msgstr "" + +#: ../../../build/NEWS:12169 ../../../build/NEWS:13929 +msgid "" +":issue:`33100`: Dataclasses: If a field has a default value that's a " +"MemberDescriptorType, then it's from that field being in __slots__, not an " +"actual default value." +msgstr "" + +#: ../../../build/NEWS:12173 ../../../build/NEWS:13933 +msgid "" +":issue:`32953`: If a non-dataclass inherits from a frozen dataclass, allow " +"attributes to be added to the derived class. Only attributes from the " +"frozen dataclass cannot be assigned to. Require all dataclasses in a " +"hierarchy to be either all frozen or all non-frozen." +msgstr "" + +#: ../../../build/NEWS:12178 ../../../build/NEWS:13764 +msgid "" +":issue:`33097`: Raise RuntimeError when ``executor.submit`` is called during" +" interpreter shutdown." +msgstr "" + +#: ../../../build/NEWS:12181 +msgid "" +":issue:`32968`: Modulo and floor division involving Fraction and float " +"should return float." +msgstr "" + +#: ../../../build/NEWS:12184 ../../../build/NEWS:13938 +msgid ":issue:`33061`: Add missing ``NoReturn`` to ``__all__`` in typing.py" +msgstr "" + +#: ../../../build/NEWS:12186 ../../../build/NEWS:13940 +msgid "" +":issue:`33078`: Fix the size handling in multiprocessing.Queue when a " +"pickling error occurs." +msgstr "" + +#: ../../../build/NEWS:12189 ../../../build/NEWS:13943 +#: ../../../build/NEWS:18313 +msgid "" +":issue:`33064`: lib2to3 now properly supports trailing commas after " +"``*args`` and ``**kwargs`` in function signatures." +msgstr "" + +#: ../../../build/NEWS:12192 ../../../build/NEWS:13946 +msgid "" +":issue:`33056`: FIX properly close leaking fds in " +"concurrent.futures.ProcessPoolExecutor." +msgstr "" + +#: ../../../build/NEWS:12195 ../../../build/NEWS:13949 +#: ../../../build/NEWS:18063 +msgid "" +":issue:`33021`: Release the GIL during fstat() calls, avoiding hang of all " +"threads when calling mmap.mmap(), os.urandom(), and random.seed(). Patch by" +" Nir Soffer." +msgstr "" + +#: ../../../build/NEWS:12199 ../../../build/NEWS:13953 +#: ../../../build/NEWS:18316 +msgid "" +":issue:`31804`: Avoid failing in multiprocessing.Process if the standard " +"streams are closed or None at exit." +msgstr "" + +#: ../../../build/NEWS:12202 +msgid "" +":issue:`33034`: Providing an explicit error message when casting the port " +"property to anything that is not an integer value using ``urlparse()`` and " +"``urlsplit()``. Patch by Matt Eaton." +msgstr "" + +#: ../../../build/NEWS:12206 +msgid "" +":issue:`30249`: Improve struct.unpack_from() exception messages for problems" +" with the buffer size and offset." +msgstr "" + +#: ../../../build/NEWS:12209 ../../../build/NEWS:13956 +#: ../../../build/NEWS:18319 +msgid "" +":issue:`33037`: Skip sending/receiving data after SSL transport closing." +msgstr "" + +#: ../../../build/NEWS:12211 ../../../build/NEWS:13958 +#: ../../../build/NEWS:18067 +msgid "" +":issue:`27683`: Fix a regression in :mod:`ipaddress` that result of " +":meth:`hosts` is empty when the network is constructed by a tuple containing" +" an integer mask and only 1 bit left for addresses." +msgstr "" + +#: ../../../build/NEWS:12215 +msgid "" +":issue:`22674`: Add the strsignal() function in the signal module that " +"returns the system description of the given signal, as returned by " +"strsignal(3)." +msgstr "" + +#: ../../../build/NEWS:12218 ../../../build/NEWS:13962 +msgid "" +":issue:`32999`: Fix C implementation of ``ABC.__subclasscheck__(cls, " +"subclass)`` crashed when ``subclass`` is not a type object." +msgstr "" + +#: ../../../build/NEWS:12221 ../../../build/NEWS:13965 +#: ../../../build/NEWS:18323 +msgid "" +":issue:`33009`: Fix inspect.signature() for single-parameter partialmethods." +msgstr "" + +#: ../../../build/NEWS:12223 ../../../build/NEWS:13967 +#: ../../../build/NEWS:18325 +msgid "" +":issue:`32969`: Expose several missing constants in zlib and fix " +"corresponding documentation." +msgstr "" + +#: ../../../build/NEWS:12226 ../../../build/NEWS:13970 +msgid "" +":issue:`32056`: Improved exceptions raised for invalid number of channels " +"and sample width when read an audio file in modules :mod:`aifc`, :mod:`wave`" +" and :mod:`sunau`." +msgstr "" + +#: ../../../build/NEWS:12230 +msgid ":issue:`32970`: Improved disassembly of the MAKE_FUNCTION instruction." +msgstr "" + +#: ../../../build/NEWS:12232 ../../../build/NEWS:13974 +#: ../../../build/NEWS:18071 +msgid "" +":issue:`32844`: Fix wrong redirection of a low descriptor (0 or 1) to stderr" +" in subprocess if another low descriptor is closed." +msgstr "" + +#: ../../../build/NEWS:12235 ../../../build/NEWS:14105 +msgid "" +":issue:`32960`: For dataclasses, disallow inheriting frozen from non-frozen " +"classes, and also disallow inheriting non-frozen from frozen classes. This " +"restriction will be relaxed at a future date." +msgstr "" + +#: ../../../build/NEWS:12239 ../../../build/NEWS:14109 +#: ../../../build/NEWS:18328 +msgid "" +":issue:`32713`: Fixed tarfile.itn handling of out-of-bounds float values. " +"Patch by Joffrey Fuhrer." +msgstr "" + +#: ../../../build/NEWS:12242 ../../../build/NEWS:13616 +msgid "" +":issue:`32257`: The ssl module now contains OP_NO_RENEGOTIATION constant, " +"available with OpenSSL 1.1.0h or 1.1.1." +msgstr "" + +#: ../../../build/NEWS:12245 ../../../build/NEWS:14112 +msgid "" +":issue:`32951`: Direct instantiation of SSLSocket and SSLObject objects is " +"now prohibited. The constructors were never documented, tested, or designed " +"as public constructors. Users were suppose to use ssl.wrap_socket() or " +"SSLContext." +msgstr "" + +#: ../../../build/NEWS:12250 ../../../build/NEWS:14117 +msgid "" +":issue:`32929`: Remove the tri-state parameter \"hash\", and add the boolean" +" \"unsafe_hash\". If unsafe_hash is True, add a __hash__ function, but if a " +"__hash__ exists, raise TypeError. If unsafe_hash is False, add a __hash__ " +"based on the values of eq= and frozen=. The unsafe_hash=False behavior is " +"the same as the old hash=None behavior. unsafe_hash=False is the default, " +"just as hash=None used to be." +msgstr "" + +#: ../../../build/NEWS:12257 ../../../build/NEWS:14124 +msgid "" +":issue:`32947`: Add OP_ENABLE_MIDDLEBOX_COMPAT and test workaround for " +"TLSv1.3 for future compatibility with OpenSSL 1.1.1." +msgstr "" + +#: ../../../build/NEWS:12260 +msgid "" +":issue:`32146`: Document the interaction between frozen executables and the " +"spawn and forkserver start methods in multiprocessing." +msgstr "" + +#: ../../../build/NEWS:12263 ../../../build/NEWS:14127 +#: ../../../build/NEWS:18331 +msgid "" +":issue:`30622`: The ssl module now detects missing NPN support in LibreSSL." +msgstr "" + +#: ../../../build/NEWS:12265 ../../../build/NEWS:14129 +#: ../../../build/NEWS:18333 +msgid "" +":issue:`32922`: dbm.open() now encodes filename with the filesystem encoding" +" rather than default encoding." +msgstr "" + +#: ../../../build/NEWS:12268 +msgid ":issue:`32759`: Free unused arenas in multiprocessing.heap." +msgstr "" + +#: ../../../build/NEWS:12270 ../../../build/NEWS:14132 +#: ../../../build/NEWS:18336 +msgid "" +":issue:`32859`: In ``os.dup2``, don't check every call whether the ``dup3`` " +"syscall exists or not." +msgstr "" + +#: ../../../build/NEWS:12273 ../../../build/NEWS:14135 +msgid "" +":issue:`32556`: nt._getfinalpathname, nt._getvolumepathname and " +"nt._getdiskusage now correctly convert from bytes." +msgstr "" + +#: ../../../build/NEWS:12276 ../../../build/NEWS:14141 +#: ../../../build/NEWS:18339 +msgid "" +":issue:`21060`: Rewrite confusing message from setup.py upload from \"No " +"dist file created in earlier command\" to the more helpful \"Must create and" +" upload files in one command\"." +msgstr "" + +#: ../../../build/NEWS:12280 ../../../build/NEWS:13977 +#: ../../../build/NEWS:18343 +msgid "" +":issue:`32857`: In :mod:`tkinter`, ``after_cancel(None)`` now raises a " +":exc:`ValueError` instead of canceling the first scheduled function. Patch " +"by Cheryl Sabella." +msgstr "" + +#: ../../../build/NEWS:12284 ../../../build/NEWS:14145 +#: ../../../build/NEWS:18347 +msgid "" +":issue:`32852`: Make sure sys.argv remains as a list when running trace." +msgstr "" + +#: ../../../build/NEWS:12286 +msgid "" +":issue:`31333`: ``_abc`` module is added. It is a speedup module with C " +"implementations for various functions and methods in ``abc``. Creating an " +"ABC subclass and calling ``isinstance`` or ``issubclass`` with an ABC " +"subclass are up to 1.5x faster. In addition, this makes Python start-up up " +"to 10% faster." +msgstr "" + +#: ../../../build/NEWS:12292 +msgid "" +"Note that the new implementation hides internal registry and caches, " +"previously accessible via private attributes ``_abc_registry``, " +"``_abc_cache``, and ``_abc_negative_cache``. There are three debugging " +"helper methods that can be used instead ``_dump_registry``, " +"``_abc_registry_clear``, and ``_abc_caches_clear``." +msgstr "" + +#: ../../../build/NEWS:12298 ../../../build/NEWS:14157 +#: ../../../build/NEWS:18349 +msgid "" +":issue:`32841`: Fixed `asyncio.Condition` issue which silently ignored " +"cancellation after notifying and cancelling a conditional lock. Patch by Bar" +" Harel." +msgstr "" + +#: ../../../build/NEWS:12302 ../../../build/NEWS:14161 +msgid "" +":issue:`32819`: ssl.match_hostname() has been simplified and no longer " +"depends on re and ipaddress module for wildcard and IP addresses. Error " +"reporting for invalid wildcards has been improved." +msgstr "" + +#: ../../../build/NEWS:12306 +msgid "" +":issue:`19675`: ``multiprocessing.Pool`` no longer leaks processes if its " +"initialization fails." +msgstr "" + +#: ../../../build/NEWS:12309 ../../../build/NEWS:14165 +msgid "" +":issue:`32394`: socket: Remove " +"TCP_FASTOPEN,TCP_KEEPCNT,TCP_KEEPIDLE,TCP_KEEPINTVL flags on older version " +"Windows during run-time." +msgstr "" + +#: ../../../build/NEWS:12313 ../../../build/NEWS:14169 +#: ../../../build/NEWS:18353 +msgid "" +":issue:`31787`: Fixed refleaks of ``__init__()`` methods in various modules." +" (Contributed by Oren Milman)" +msgstr "" + +#: ../../../build/NEWS:12316 ../../../build/NEWS:14172 +#: ../../../build/NEWS:18356 +msgid "" +":issue:`30157`: Fixed guessing quote and delimiter in csv.Sniffer.sniff() " +"when only the last field is quoted. Patch by Jake Davis." +msgstr "" + +#: ../../../build/NEWS:12319 +msgid "" +":issue:`30688`: Added support of ``\\N{name}`` escapes in regular " +"expressions. Based on patch by Jonathan Eunice." +msgstr "" + +#: ../../../build/NEWS:12322 ../../../build/NEWS:14175 +msgid "" +":issue:`32792`: collections.ChainMap() preserves the order of the underlying" +" mappings." +msgstr "" + +#: ../../../build/NEWS:12325 ../../../build/NEWS:14178 +msgid "" +":issue:`32775`: :func:`fnmatch.translate()` no longer produces patterns " +"which contain set operations. Sets starting with '[' or containing '--', " +"'&&', '~~' or '||' will be interpreted differently in regular expressions in" +" future versions. Currently they emit warnings. fnmatch.translate() now " +"avoids producing patterns containing such sets by accident." +msgstr "" + +#: ../../../build/NEWS:12331 ../../../build/NEWS:14184 +msgid "" +":issue:`32622`: Implement native fast sendfile for Windows proactor event " +"loop." +msgstr "" + +#: ../../../build/NEWS:12333 ../../../build/NEWS:14186 +#: ../../../build/NEWS:18362 +msgid "" +":issue:`32777`: Fix a rare but potential pre-exec child process deadlock in " +"subprocess on POSIX systems when marking file descriptors inheritable on " +"exec in the child process. This bug appears to have been introduced in 3.4." +msgstr "" + +#: ../../../build/NEWS:12338 ../../../build/NEWS:14191 +#: ../../../build/NEWS:18367 +msgid "" +":issue:`32647`: The ctypes module used to depend on indirect linking for " +"dlopen. The shared extension is now explicitly linked against libdl on " +"platforms with dl." +msgstr "" + +#: ../../../build/NEWS:12342 +msgid "" +":issue:`32749`: A :mod:`dbm.dumb` database opened with flags 'r' is now " +"read-only. :func:`dbm.dumb.open` with flags 'r' and 'w' no longer creates a " +"database if it does not exist." +msgstr "" + +#: ../../../build/NEWS:12346 ../../../build/NEWS:14195 +msgid ":issue:`32741`: Implement ``asyncio.TimerHandle.when()`` method." +msgstr "" + +#: ../../../build/NEWS:12348 ../../../build/NEWS:14197 +msgid ":issue:`32691`: Use mod_spec.parent when running modules with pdb" +msgstr "" + +#: ../../../build/NEWS:12350 ../../../build/NEWS:14199 +#: ../../../build/NEWS:18371 +msgid "" +":issue:`32734`: Fixed ``asyncio.Lock()`` safety issue which allowed " +"acquiring and locking the same lock multiple times, without it being free. " +"Patch by Bar Harel." +msgstr "" + +#: ../../../build/NEWS:12354 ../../../build/NEWS:14203 +#: ../../../build/NEWS:18375 +msgid "" +":issue:`32727`: Do not include name field in SMTP envelope from address. " +"Patch by Stéphane Wirtel" +msgstr "" + +#: ../../../build/NEWS:12357 ../../../build/NEWS:14206 +msgid "" +":issue:`31453`: Add TLSVersion constants and SSLContext.maximum_version / " +"minimum_version attributes. The new API wraps OpenSSL 1.1 " +"https://www.openssl.org/docs/man1.1.0/ssl/SSL_CTX_set_min_proto_version.html" +" feature." +msgstr "" + +#: ../../../build/NEWS:12362 ../../../build/NEWS:14211 +msgid "" +":issue:`24334`: Internal implementation details of ssl module were cleaned " +"up. The SSLSocket has one less layer of indirection. Owner and session " +"information are now handled by the SSLSocket and SSLObject constructor. " +"Channel binding implementation has been simplified." +msgstr "" + +#: ../../../build/NEWS:12367 ../../../build/NEWS:14216 +#: ../../../build/NEWS:18388 +msgid "" +":issue:`31848`: Fix the error handling in Aifc_read.initfp() when the SSND " +"chunk is not found. Patch by Zackery Spytz." +msgstr "" + +#: ../../../build/NEWS:12370 ../../../build/NEWS:14219 +msgid "" +":issue:`32585`: Add Ttk spinbox widget to :mod:`tkinter.ttk`. Patch by Alan" +" D Moore." +msgstr "" + +#: ../../../build/NEWS:12373 +msgid "" +":issue:`32512`: :mod:`profile` CLI accepts `-m module_name` as an " +"alternative to script path." +msgstr "" + +#: ../../../build/NEWS:12376 +msgid "" +":issue:`8525`: help() on a type now displays builtin subclasses. This is " +"intended primarily to help with notification of more specific exception " +"subclasses." +msgstr "" + +#: ../../../build/NEWS:12380 +msgid "Patch by Sanyam Khurana." +msgstr "" + +#: ../../../build/NEWS:12382 +msgid "" +":issue:`31639`: http.server now exposes a ThreadingHTTPServer class and uses" +" it when the module is run with ``-m`` to cope with web browsers pre-opening" +" sockets." +msgstr "" + +#: ../../../build/NEWS:12386 +msgid "" +":issue:`29877`: compileall: import ProcessPoolExecutor only when needed, " +"preventing hangs on low resource platforms" +msgstr "" + +#: ../../../build/NEWS:12389 ../../../build/NEWS:14222 +msgid "" +":issue:`32221`: Various functions returning tuple containing IPv6 addresses " +"now omit ``%scope`` part since the same information is already encoded in " +"*scopeid* tuple item. Especially this speeds up :func:`socket.recvfrom` when" +" it receives multicast packet since useless resolving of network interface " +"name is omitted." +msgstr "" + +#: ../../../build/NEWS:12395 +msgid "" +":issue:`32147`: :func:`binascii.unhexlify` is now up to 2 times faster. " +"Patch by Sergey Fedoseev." +msgstr "" + +#: ../../../build/NEWS:12398 ../../../build/NEWS:14228 +msgid "" +":issue:`30693`: The TarFile class now recurses directories in a reproducible" +" way." +msgstr "" + +#: ../../../build/NEWS:12401 ../../../build/NEWS:14231 +msgid "" +":issue:`30693`: The ZipFile class now recurses directories in a reproducible" +" way." +msgstr "" + +#: ../../../build/NEWS:12404 +msgid ":issue:`31680`: Added :data:`curses.ncurses_version`." +msgstr "" + +#: ../../../build/NEWS:12406 ../../../build/NEWS:13767 +#: ../../../build/NEWS:18074 +msgid "" +":issue:`31908`: Fix output of cover files for ``trace`` module command-line " +"tool. Previously emitted cover files only when ``--missing`` option was " +"used. Patch by Michael Selik." +msgstr "" + +#: ../../../build/NEWS:12410 +msgid "" +":issue:`31608`: Raise a ``TypeError`` instead of crashing if a " +"``collections.deque`` subclass returns a non-deque from ``__new__``. Patch " +"by Oren Milman." +msgstr "" + +#: ../../../build/NEWS:12414 +msgid "" +":issue:`31425`: Add support for sockets of the AF_QIPCRTR address family, " +"supported by the Linux kernel. This is used to communicate with services, " +"such as GPS or radio, running on Qualcomm devices. Patch by Bjorn Andersson." +msgstr "" + +#: ../../../build/NEWS:12419 +msgid "" +":issue:`22005`: Implemented unpickling instances of " +":class:`~datetime.datetime`, :class:`~datetime.date` and " +":class:`~datetime.time` pickled by Python 2. ``encoding='latin1'`` should be" +" used for successful decoding." +msgstr "" + +#: ../../../build/NEWS:12424 ../../../build/NEWS:13985 +msgid "" +":issue:`27645`: :class:`sqlite3.Connection` now exposes a " +":class:`~sqlite3.Connection.backup` method, if the underlying SQLite library" +" is at version 3.6.11 or higher. Patch by Lele Gaifax." +msgstr "" + +#: ../../../build/NEWS:12428 ../../../build/NEWS:13619 +#: ../../../build/NEWS:18081 +msgid "" +":issue:`16865`: Support arrays >=2GiB in :mod:`ctypes`. Patch by Segev " +"Finer." +msgstr "" + +#: ../../../build/NEWS:12430 +msgid "" +":issue:`31508`: Removed support of arguments in " +"`tkinter.ttk.Treeview.selection`. It was deprecated in 3.6. Use specialized" +" methods like `selection_set` for changing the selection." +msgstr "" + +#: ../../../build/NEWS:12434 +msgid "" +":issue:`29456`: Fix bugs in hangul normalization: u1176, u11a7 and u11c3" +msgstr "" + +#: ../../../build/NEWS:12439 +msgid ":issue:`21257`: Document :func:`http.client.parse_headers`." +msgstr "" + +#: ../../../build/NEWS:12441 +msgid ":issue:`34764`: Improve example of iter() with 2nd sentinel argument." +msgstr "" + +#: ../../../build/NEWS:12443 +msgid "" +":issue:`35564`: Explicitly set master_doc variable in conf.py for compliance" +" with Sphinx 2.0" +msgstr "" + +#: ../../../build/NEWS:12446 +msgid "" +":issue:`35511`: Specified that profile.Profile class doesn't not support " +"enable or disable methods. Also, elaborated that Profile object as a context" +" manager is only supported in cProfile module." +msgstr "" + +#: ../../../build/NEWS:12450 +msgid ":issue:`10536`: Enhance the gettext docs. Patch by Éric Araujo" +msgstr "" + +#: ../../../build/NEWS:12452 +msgid "" +":issue:`35089`: Remove mention of ``typing.io`` and ``typing.re``. Their " +"types should be imported from ``typing`` directly." +msgstr "" + +#: ../../../build/NEWS:12455 +msgid "" +":issue:`35038`: Fix the documentation about an unexisting `f_restricted` " +"attribute in the frame object. Patch by Stéphane Wirtel" +msgstr "" + +#: ../../../build/NEWS:12458 +msgid "" +":issue:`35042`: Replace PEP XYZ by the pep role and allow to use the direct " +"links to the PEPs." +msgstr "" + +#: ../../../build/NEWS:12461 +msgid "" +":issue:`35044`: Fix the documentation with the role ``exc`` for the " +"appropriated exception. Patch by Stéphane Wirtel" +msgstr "" + +#: ../../../build/NEWS:12464 +msgid "" +":issue:`35035`: Rename documentation for :mod:`email.utils` to " +"``email.utils.rst``." +msgstr "" + +#: ../../../build/NEWS:12467 +msgid "" +":issue:`34967`: Use app.add_object_type() instead of the deprecated Sphinx " +"function app.description_unit()" +msgstr "" + +#: ../../../build/NEWS:12470 +msgid "" +":issue:`34913`: Add documentation about the new command line interface of " +"the gzip module." +msgstr "" + +#: ../../../build/NEWS:12473 +msgid "" +":issue:`32174`: chm document displays non-ASCII charaters properly on some " +"MBCS Windows systems." +msgstr "" + +#: ../../../build/NEWS:12476 +msgid "" +":issue:`11233`: Create availability directive for documentation. Original " +"patch by Georg Brandl." +msgstr "" + +#: ../../../build/NEWS:12479 +msgid "" +":issue:`34790`: Document how passing coroutines to asyncio.wait() can be " +"confusing." +msgstr "" + +#: ../../../build/NEWS:12482 +msgid "" +":issue:`34552`: Make clear that ``==`` operator sometimes is equivalent to " +"`is`. The ``<``, ``<=``, ``>`` and ``>=`` operators are only defined where " +"they make sense." +msgstr "" + +#: ../../../build/NEWS:12486 +msgid "" +":issue:`28617`: Fixed info in the stdtypes docs concerning the types that " +"support membership tests." +msgstr "" + +#: ../../../build/NEWS:12489 +msgid "" +":issue:`20177`: Migrate datetime.date.fromtimestamp to Argument Clinic. " +"Patch by Tim Hoffmann." +msgstr "" + +#: ../../../build/NEWS:12492 +msgid "" +":issue:`34065`: Fix wrongly written basicConfig documentation markup syntax" +msgstr "" + +#: ../../../build/NEWS:12494 +msgid "" +":issue:`33460`: replaced ellipsis with correct error codes in tutorial " +"chapter 3." +msgstr "" + +#: ../../../build/NEWS:12497 +msgid ":issue:`33847`: Add '@' operator entry to index." +msgstr "" + +#: ../../../build/NEWS:12499 ../../../build/NEWS:13414 +msgid "" +":issue:`33409`: Clarified the relationship between :pep:`538`'s " +"PYTHONCOERCECLOCALE and PEP 540's PYTHONUTF8 mode." +msgstr "" + +#: ../../../build/NEWS:12502 +msgid "" +":issue:`33197`: Add versionadded tag to the documentation of " +"ParameterKind.description" +msgstr "" + +#: ../../../build/NEWS:12505 +msgid "" +":issue:`17045`: Improve the C-API doc for PyTypeObject. This includes " +"adding several quick-reference tables and a lot of missing slot/typedef " +"entries. The existing entries were also cleaned up with a slightly more " +"consistent format." +msgstr "" + +#: ../../../build/NEWS:12510 ../../../build/NEWS:13417 +msgid "" +":issue:`33736`: Improve the documentation of " +":func:`asyncio.open_connection`, :func:`asyncio.start_server` and their UNIX" +" socket counterparts." +msgstr "" + +#: ../../../build/NEWS:12513 ../../../build/NEWS:13624 +msgid "" +":issue:`23859`: Document that `asyncio.wait()` does not cancel its futures " +"on timeout." +msgstr "" + +#: ../../../build/NEWS:12516 ../../../build/NEWS:13627 +msgid ":issue:`32436`: Document :pep:`567` changes to asyncio." +msgstr "" + +#: ../../../build/NEWS:12518 ../../../build/NEWS:13629 +msgid "" +":issue:`33604`: Update HMAC md5 default to a DeprecationWarning, bump " +"removal to 3.8." +msgstr "" + +#: ../../../build/NEWS:12521 +msgid "" +":issue:`33594`: Document ``getargspec``, ``from_function`` and " +"``from_builtin`` as deprecated in their respective docstring, and include " +"version since deprecation in DeprecationWarning message." +msgstr "" + +#: ../../../build/NEWS:12525 ../../../build/NEWS:13632 +#: ../../../build/NEWS:18090 +msgid ":issue:`33503`: Fix broken pypi link" +msgstr "" + +#: ../../../build/NEWS:12527 ../../../build/NEWS:13634 +#: ../../../build/NEWS:18092 +msgid "" +":issue:`33421`: Add missing documentation for " +"``typing.AsyncContextManager``." +msgstr "" + +#: ../../../build/NEWS:12529 +msgid "" +":issue:`33487`: BZ2file now emit a DeprecationWarning when buffering=None is" +" passed, the deprecation message and documentation also now explicitly state" +" it is deprecated since 3.0." +msgstr "" + +#: ../../../build/NEWS:12533 ../../../build/NEWS:13774 +#: ../../../build/NEWS:18094 +msgid "" +":issue:`33378`: Add Korean language switcher for https://docs.python.org/3/" +msgstr "" + +#: ../../../build/NEWS:12535 ../../../build/NEWS:13776 +#: ../../../build/NEWS:18096 +msgid "" +":issue:`33276`: Clarify that the ``__path__`` attribute on modules cannot be" +" just any value." +msgstr "" + +#: ../../../build/NEWS:12538 ../../../build/NEWS:13779 +#: ../../../build/NEWS:18099 +msgid ":issue:`33201`: Modernize documentation for writing C extension types." +msgstr "" + +#: ../../../build/NEWS:12540 ../../../build/NEWS:13781 +#: ../../../build/NEWS:18101 +msgid "" +":issue:`33195`: Deprecate ``Py_UNICODE`` usage in ``c-api/arg`` document. " +"``Py_UNICODE`` related APIs are deprecated since Python 3.3, but it is " +"missed in the document." +msgstr "" + +#: ../../../build/NEWS:12544 ../../../build/NEWS:13992 +#: ../../../build/NEWS:18105 +msgid ":issue:`33126`: Document PyBuffer_ToContiguous()." +msgstr "" + +#: ../../../build/NEWS:12546 ../../../build/NEWS:13994 +#: ../../../build/NEWS:18107 +msgid "" +":issue:`27212`: Modify documentation for the :func:`islice` recipe to " +"consume initial values up to the start index." +msgstr "" + +#: ../../../build/NEWS:12549 ../../../build/NEWS:13997 +#: ../../../build/NEWS:18110 +msgid "" +":issue:`28247`: Update :mod:`zipapp` documentation to describe how to make " +"standalone applications." +msgstr "" + +#: ../../../build/NEWS:12552 ../../../build/NEWS:14000 +#: ../../../build/NEWS:18113 +msgid "" +":issue:`18802`: Documentation changes for ipaddress. Patch by Jon Foster " +"and Berker Peksag." +msgstr "" + +#: ../../../build/NEWS:12555 ../../../build/NEWS:14003 +#: ../../../build/NEWS:18116 +msgid "" +":issue:`27428`: Update documentation to clarify that " +"``WindowsRegistryFinder`` implements ``MetaPathFinder``. (Patch by Himanshu " +"Lakhara)" +msgstr "" + +#: ../../../build/NEWS:12558 ../../../build/NEWS:14237 +msgid "" +":issue:`28124`: The ssl module function ssl.wrap_socket() has been de-" +"emphasized and deprecated in favor of the more secure and efficient " +"SSLContext.wrap_socket() method." +msgstr "" + +#: ../../../build/NEWS:12562 ../../../build/NEWS:14241 +#: ../../../build/NEWS:18446 +msgid ":issue:`17232`: Clarify docs for -O and -OO. Patch by Terry Reedy." +msgstr "" + +#: ../../../build/NEWS:12564 ../../../build/NEWS:14243 +msgid "" +":issue:`32436`: Add documentation for the contextvars module (PEP 567)." +msgstr "" + +#: ../../../build/NEWS:12566 ../../../build/NEWS:14245 +#: ../../../build/NEWS:18448 +msgid ":issue:`32800`: Update link to w3c doc for xml default namespaces." +msgstr "" + +#: ../../../build/NEWS:12568 ../../../build/NEWS:14247 +msgid ":issue:`11015`: Update :mod:`test.support` documentation." +msgstr "" + +#: ../../../build/NEWS:12570 +msgid "" +":issue:`32613`: Update the faq/windows.html to use the py command from PEP " +"397 instead of python." +msgstr "" + +#: ../../../build/NEWS:12573 ../../../build/NEWS:14249 +#: ../../../build/NEWS:18450 +msgid "" +":issue:`8722`: Document :meth:`__getattr__` behavior when property " +":meth:`get` method raises :exc:`AttributeError`." +msgstr "" + +#: ../../../build/NEWS:12576 ../../../build/NEWS:14252 +#: ../../../build/NEWS:18453 +msgid "" +":issue:`32614`: Modify RE examples in documentation to use raw strings to " +"prevent :exc:`DeprecationWarning` and add text to REGEX HOWTO to highlight " +"the deprecation." +msgstr "" + +#: ../../../build/NEWS:12580 +msgid "" +":issue:`20709`: Remove the paragraph where we explain that os.utime() does " +"not support a directory as path under Windows. Patch by Jan-Philip Gehrcke" +msgstr "" + +#: ../../../build/NEWS:12583 +msgid "" +":issue:`32722`: Remove the bad example in the tutorial of the Generator " +"Expression. Patch by Stéphane Wirtel" +msgstr "" + +#: ../../../build/NEWS:12586 ../../../build/NEWS:14256 +#: ../../../build/NEWS:18457 +msgid ":issue:`31972`: Improve docstrings for `pathlib.PurePath` subclasses." +msgstr "" + +#: ../../../build/NEWS:12588 +msgid "" +":issue:`30607`: Use the externalized ``python-docs-theme`` package when " +"building the documentation." +msgstr "" + +#: ../../../build/NEWS:12591 ../../../build/NEWS:13785 +#: ../../../build/NEWS:18119 +msgid "" +":issue:`8243`: Add a note about curses.addch and curses.addstr exception " +"behavior when writing outside a window, or pad." +msgstr "" + +#: ../../../build/NEWS:12594 ../../../build/NEWS:13788 +msgid ":issue:`32337`: Update documentation related with ``dict`` order." +msgstr "" + +#: ../../../build/NEWS:12596 +msgid ":issue:`25041`: Document ``AF_PACKET`` in the :mod:`socket` module." +msgstr "" + +#: ../../../build/NEWS:12598 ../../../build/NEWS:13420 +#: ../../../build/NEWS:18122 +msgid "" +":issue:`31432`: Clarify meaning of CERT_NONE, CERT_OPTIONAL, and " +"CERT_REQUIRED flags for ssl.SSLContext.verify_mode." +msgstr "" + +#: ../../../build/NEWS:12604 +msgid "" +":issue:`35772`: Fix sparse file tests of test_tarfile on ppc64 with the " +"tmpfs filesystem. Fix the function testing if the filesystem supports sparse" +" files: create a file which contains data and \"holes\", instead of creating" +" a file which contains no data. tmpfs effective block size is a page size " +"(tmpfs lives in the page cache). RHEL uses 64 KiB pages on aarch64, ppc64, " +"ppc64le, only s390x and x86_64 use 4 KiB pages, whereas the test punch holes" +" of 4 KiB." +msgstr "" + +#: ../../../build/NEWS:12612 +msgid "" +":issue:`35045`: Make ssl tests less strict and also accept TLSv1 as system " +"default. The changes unbreaks test_min_max_version on Fedora 29." +msgstr "" + +#: ../../../build/NEWS:12615 +msgid "" +":issue:`32710`: ``test_asyncio/test_sendfile.py`` now resets the event loop " +"policy using :func:`tearDownModule` as done in other tests, to prevent a " +"warning when running tests on Windows." +msgstr "" + +#: ../../../build/NEWS:12619 +msgid "" +":issue:`33717`: test.pythoninfo now logs information of all clocks, not only" +" time.time() and time.perf_counter()." +msgstr "" + +#: ../../../build/NEWS:12622 +msgid "" +":issue:`35488`: Add a test to pathlib's Path.match() to verify it does not " +"support glob-style ** recursive pattern matching." +msgstr "" + +#: ../../../build/NEWS:12625 +msgid "" +":issue:`31731`: Fix a race condition in ``check_interrupted_write()`` of " +"test_io: create directly the thread with SIGALRM signal blocked, rather than" +" blocking the signal later from the thread. Previously, it was possible that" +" the thread gets the signal before the signal is blocked." +msgstr "" + +#: ../../../build/NEWS:12630 +msgid "" +":issue:`35424`: Fix test_multiprocessing_main_handling: use " +":class:`multiprocessing.Pool` with a context manager and then explicitly " +"join the pool." +msgstr "" + +#: ../../../build/NEWS:12634 +msgid "" +":issue:`35519`: Rename :mod:`test.bisect` module to :mod:`test.bisect_cmd` " +"to avoid conflict with :mod:`bisect` module when running directly a test " +"like ``./python Lib/test/test_xmlrpc.py``." +msgstr "" + +#: ../../../build/NEWS:12638 +msgid "" +":issue:`35513`: Replace :func:`time.time` with :func:`time.monotonic` in " +"tests to measure time delta." +msgstr "" + +#: ../../../build/NEWS:12641 +msgid "" +":issue:`34279`: :func:`test.support.run_unittest` no longer raise " +":exc:`TestDidNotRun` if the test result contains skipped tests. The " +"exception is now only raised if no test have been run and no test have been " +"skipped." +msgstr "" + +#: ../../../build/NEWS:12646 +msgid "" +":issue:`35412`: Add testcase to ``test_future4``: check unicode literal." +msgstr "" + +#: ../../../build/NEWS:12648 +msgid "" +":issue:`26704`: Added test demonstrating double-patching of an instance " +"method. Patch by Anthony Sottile." +msgstr "" + +#: ../../../build/NEWS:12651 +msgid "" +":issue:`33725`: test_multiprocessing_fork may crash on recent versions of " +"macOS. Until the issue is resolved, skip the test on macOS." +msgstr "" + +#: ../../../build/NEWS:12654 +msgid "" +":issue:`35352`: Modify test_asyncio to use the certificate set from the test" +" directory." +msgstr "" + +#: ../../../build/NEWS:12657 +msgid "" +":issue:`35317`: Fix ``mktime()`` overflow error in ``test_email``: run " +"``test_localtime_daylight_true_dst_true()`` and " +"``test_localtime_daylight_false_dst_true()`` with a specific timezone." +msgstr "" + +#: ../../../build/NEWS:12661 +msgid "" +":issue:`21263`: After several reports that test_gdb does not work properly " +"on macOS and since gdb is not shipped by default anymore, test_gdb is now " +"skipped on macOS when LLVM Clang has been used to compile Python. Patch by " +"Lysandros Nikolaou" +msgstr "" + +#: ../../../build/NEWS:12666 +msgid "" +":issue:`34279`: regrtest issue a warning when no tests have been executed in" +" a particular test file. Also, a new final result state is issued if no test" +" have been executed across all test files. Patch by Pablo Galindo." +msgstr "" + +#: ../../../build/NEWS:12670 +msgid "" +":issue:`34962`: make docstest in Doc now passes., and is enforced in CI" +msgstr "" + +#: ../../../build/NEWS:12672 +msgid "" +":issue:`23596`: Use argparse for the command line of the gzip module. Patch " +"by Antony Lee" +msgstr "" + +#: ../../../build/NEWS:12675 +msgid "" +":issue:`34537`: Fix ``test_gdb.test_strings()`` when ``LC_ALL=C`` and GDB " +"was compiled with Python 3.6 or earlier." +msgstr "" + +#: ../../../build/NEWS:12678 +msgid "" +":issue:`34587`: test_socket: Remove RDSTest.testCongestion(). The test tries" +" to fill the receiver's socket buffer and expects an error. But the RDS " +"protocol doesn't require that. Moreover, the Linux implementation of RDS " +"expects that the producer of the messages reduces its rate, it's not the " +"role of the receiver to trigger an error. The test fails on Fedora 28 by " +"design, so just remove it." +msgstr "" + +#: ../../../build/NEWS:12685 +msgid ":issue:`34661`: Fix test_shutil if unzip doesn't support -t." +msgstr "" + +#: ../../../build/NEWS:12687 +msgid "" +":issue:`34200`: Fixed non-deterministic flakiness of test_pkg by not using " +"the scary test.support.module_cleanup() logic to save and restore " +"sys.modules contents between test cases." +msgstr "" + +#: ../../../build/NEWS:12691 +msgid "" +":issue:`34569`: The experimental PEP 554 data channels now correctly pass " +"negative PyLong objects between subinterpreters on 32-bit systems. Patch by " +"Michael Felt." +msgstr "" + +#: ../../../build/NEWS:12695 +msgid ":issue:`34594`: Fix usage of hardcoded ``errno`` values in the tests." +msgstr "" + +#: ../../../build/NEWS:12697 +msgid ":issue:`34579`: Fix test_embed for AIX Patch by Michael Felt" +msgstr "" + +#: ../../../build/NEWS:12699 +msgid "" +":issue:`34542`: Use 3072 RSA keys and SHA-256 signature for test certs and " +"keys." +msgstr "" + +#: ../../../build/NEWS:12702 +msgid "" +":issue:`11193`: Remove special condition for AIX in " +"`test_subprocess.test_undecodable_env`" +msgstr "" + +#: ../../../build/NEWS:12705 +msgid ":issue:`34347`: Fix `test_utf8_mode.test_cmd_line` for AIX" +msgstr "" + +#: ../../../build/NEWS:12707 +msgid "" +":issue:`34490`: On AIX with AF_UNIX family sockets getsockname() does not " +"provide 'sockname', so skip calls to transport.get_extra_info('sockname')" +msgstr "" + +#: ../../../build/NEWS:12710 +msgid "" +":issue:`34391`: Fix ftplib test for TLS 1.3 by reading from data socket." +msgstr "" + +#: ../../../build/NEWS:12712 +msgid "" +":issue:`11192`: Fix `test_socket` on AIX 6.1 and later IPv6 zone id supports" +" only supported by inet_pton6_zone() Switch to runtime-based " +"platform.system() to establish current platform rather than build-time " +"based sys.platform()" +msgstr "" + +#: ../../../build/NEWS:12717 +msgid "" +":issue:`34399`: Update all RSA keys and DH params to use at least 2048 bits." +msgstr "" + +#: ../../../build/NEWS:12719 +msgid "" +":issue:`34373`: Fix ``test_mktime`` and ``test_pthread_getcpuclickid`` tests" +" for AIX Add range checking for ``_PyTime_localtime`` for AIX Patch by " +"Michael Felt" +msgstr "" + +#: ../../../build/NEWS:12723 +msgid "" +":issue:`11191`: Skip the distutils test 'test_search_cpp' when using XLC as " +"compiler patch by aixtools (Michael Felt)" +msgstr "" + +#: ../../../build/NEWS:12726 +msgid "Improved an error message when mock assert_has_calls fails." +msgstr "" + +#: ../../../build/NEWS:12728 +msgid ":issue:`33746`: Fix test_unittest when run in verbose mode." +msgstr "" + +#: ../../../build/NEWS:12730 +msgid "" +":issue:`33901`: Fix test_dbm_gnu on macOS with gdbm 1.15: add a larger value" +" to make sure that the file size changes." +msgstr "" + +#: ../../../build/NEWS:12733 +msgid "" +":issue:`33873`: Fix a bug in ``regrtest`` that caused an extra test to run " +"if --huntrleaks/-R was used. Exit with error in case that invalid parameters" +" are specified to --huntrleaks/-R (at least one warmup run and one " +"repetition must be used)." +msgstr "" + +#: ../../../build/NEWS:12738 +msgid "" +":issue:`33562`: Check that a global asyncio event loop policy is not left " +"behind by any tests." +msgstr "" + +#: ../../../build/NEWS:12741 ../../../build/NEWS:13639 +#: ../../../build/NEWS:18128 +msgid "" +":issue:`33655`: Ignore test_posix_fallocate failures on BSD platforms that " +"might be due to running on ZFS." +msgstr "" + +#: ../../../build/NEWS:12744 +msgid "" +":issue:`32962`: Fixed test_gdb when Python is compiled with flags -mcet " +"-fcf-protection -O0." +msgstr "" + +#: ../../../build/NEWS:12747 ../../../build/NEWS:13793 +msgid "" +":issue:`33358`: Fix ``test_embed.test_pre_initialization_sys_options()`` " +"when the interpreter is built with ``--enable-shared``." +msgstr "" + +#: ../../../build/NEWS:12750 ../../../build/NEWS:14009 +#: ../../../build/NEWS:18241 +msgid "" +":issue:`32872`: Avoid regrtest compatibility issue with namespace packages." +msgstr "" + +#: ../../../build/NEWS:12752 ../../../build/NEWS:14011 +#: ../../../build/NEWS:18466 +msgid "" +":issue:`32517`: Fix failing ``test_asyncio`` on macOS 10.12.2+ due to " +"transport of ``KqueueSelector`` loop was not being closed." +msgstr "" + +#: ../../../build/NEWS:12755 +msgid "" +":issue:`32663`: Making sure the `SMTPUTF8SimTests` class of tests gets run " +"in test_smtplib.py." +msgstr "" + +#: ../../../build/NEWS:12758 +msgid "" +":issue:`27643`: Test_C test case needs \"signed short\" bitfields, but the " +"IBM XLC compiler (on AIX) does not support this Skip the code and test when " +"AIX and XLC are used" +msgstr "" + +#: ../../../build/NEWS:12762 +msgid "Applicable to Python2-2.7 and later" +msgstr "" + +#: ../../../build/NEWS:12764 ../../../build/NEWS:14014 +#: ../../../build/NEWS:18131 +msgid ":issue:`19417`: Add test_bdb.py." +msgstr "" + +#: ../../../build/NEWS:12766 ../../../build/NEWS:14261 +msgid ":issue:`31809`: Add tests to verify connection with secp ECDH curves." +msgstr "" + +#: ../../../build/NEWS:12771 +msgid "" +":issue:`34691`: The _contextvars module is now built into the core Python " +"library on Windows." +msgstr "" + +#: ../../../build/NEWS:12774 +msgid "" +":issue:`35683`: Improved Azure Pipelines build steps and now verifying " +"layouts correctly" +msgstr "" + +#: ../../../build/NEWS:12777 +msgid ":issue:`35642`: Remove asynciomodule.c from pythoncore.vcxproj" +msgstr "" + +#: ../../../build/NEWS:12779 +msgid "" +":issue:`35550`: Fix incorrect Solaris #ifdef checks to look for __sun && " +"__SVR4 instead of sun when compiling." +msgstr "" + +#: ../../../build/NEWS:12782 +msgid "" +":issue:`35499`: ``make profile-opt`` no longer replaces ``CFLAGS_NODIST`` " +"with ``CFLAGS``. It now adds profile-guided optimization (PGO) flags to " +"``CFLAGS_NODIST``: existing ``CFLAGS_NODIST`` flags are kept." +msgstr "" + +#: ../../../build/NEWS:12786 +msgid "" +":issue:`35257`: Avoid leaking the linker flags from Link Time Optimizations " +"(LTO) into distutils when compiling C extensions." +msgstr "" + +#: ../../../build/NEWS:12789 +msgid "" +":issue:`35351`: When building Python with clang and LTO, LTO flags are no " +"longer passed into CFLAGS to build third-party C extensions through " +"distutils." +msgstr "" + +#: ../../../build/NEWS:12793 +msgid "" +":issue:`35139`: Fix a compiler error when statically linking `pyexpat` in " +"`Modules/Setup`." +msgstr "" + +#: ../../../build/NEWS:12796 +msgid "" +":issue:`35059`: PCbuild: Set InlineFunctionExpansion to OnlyExplicitInline " +"(\"/Ob1\" option) in pyproject.props in Debug mode to expand functions " +"marked as inline. This change should make Python compiled in Debug mode a " +"little bit faster on Windows." +msgstr "" + +#: ../../../build/NEWS:12801 +msgid "" +":issue:`35011`: Restores the use of pyexpatns.h to isolate our embedded copy" +" of the expat C library so that its symbols do not conflict at link or " +"dynamic loading time with an embedding application or other extension " +"modules with their own version of libexpat." +msgstr "" + +#: ../../../build/NEWS:12806 +msgid ":issue:`28015`: Have --with-lto works correctly with clang." +msgstr "" + +#: ../../../build/NEWS:12808 +msgid "" +":issue:`34765`: Update the outdated install-sh file to the latest revision " +"from automake v1.16.1" +msgstr "" + +#: ../../../build/NEWS:12811 +msgid "" +":issue:`34585`: Check for floating-point byte order in configure.ac using " +"compilation tests instead of executing code, so that these checks work in " +"cross-compiled builds." +msgstr "" + +#: ../../../build/NEWS:12815 +msgid ":issue:`34710`: Fixed SSL module build with OpenSSL & pedantic CFLAGS." +msgstr "" + +#: ../../../build/NEWS:12817 +msgid "" +":issue:`34582`: Add JUnit XML output for regression tests and update Azure " +"DevOps builds." +msgstr "" + +#: ../../../build/NEWS:12820 +msgid ":issue:`34081`: Make Sphinx warnings as errors in the Docs Makefile." +msgstr "" + +#: ../../../build/NEWS:12822 +msgid "" +":issue:`34555`: Fix for case where it was not possible to have both " +"``HAVE_LINUX_VM_SOCKETS_H`` and ``HAVE_SOCKADDR_ALG`` be undefined." +msgstr "" + +#: ../../../build/NEWS:12825 +msgid "" +":issue:`33015`: Fix an undefined behaviour in the pthread implementation of " +":c:func:`PyThread_start_new_thread`: add a function wrapper to always return" +" ``NULL``." +msgstr "" + +#: ../../../build/NEWS:12829 +msgid "" +":issue:`34245`: The Python shared library is now installed with write " +"permission (mode 0755), which is the standard way of installing such " +"libraries." +msgstr "" + +#: ../../../build/NEWS:12833 +msgid ":issue:`34121`: Fix detection of C11 atomic support on clang." +msgstr "" + +#: ../../../build/NEWS:12835 +msgid "" +":issue:`32430`: Rename Modules/Setup.dist to Modules/Setup, and remove the " +"necessity to copy the former manually to the latter when updating the local " +"source tree." +msgstr "" + +#: ../../../build/NEWS:12839 +msgid "" +":issue:`30345`: Add -g to LDFLAGS when compiling with LTO to get debug " +"symbols." +msgstr "" + +#: ../../../build/NEWS:12841 ../../../build/NEWS:13426 +#: ../../../build/NEWS:18136 +msgid "" +":issue:`5755`: Move ``-Wstrict-prototypes`` option to ``CFLAGS_NODIST`` from" +" ``OPT``. This option emitted annoying warnings when building extension " +"modules written in C++." +msgstr "" + +#: ../../../build/NEWS:12845 ../../../build/NEWS:13648 +#: ../../../build/NEWS:18140 +msgid "" +":issue:`33614`: Ensures module definition files for the stable ABI on " +"Windows are correctly regenerated." +msgstr "" + +#: ../../../build/NEWS:12848 +msgid "" +":issue:`33648`: The --with-c-locale-warning configuration flag has been " +"removed. It has had no effect for about a year." +msgstr "" + +#: ../../../build/NEWS:12851 ../../../build/NEWS:13651 +#: ../../../build/NEWS:18143 +msgid "" +":issue:`33522`: Enable CI builds on Visual Studio Team Services at " +"https://python.visualstudio.com/cpython" +msgstr "" + +#: ../../../build/NEWS:12854 +msgid ":issue:`33512`: configure's check for \"long double\" has been simplified" +msgstr "" + +#: ../../../build/NEWS:12856 +msgid "" +":issue:`33483`: C compiler is now correctly detected from the standard " +"environment variables. --without-gcc and --with-icc options have been " +"removed." +msgstr "" + +#: ../../../build/NEWS:12860 ../../../build/NEWS:13799 +#: ../../../build/NEWS:18150 +msgid "" +":issue:`33394`: Enable the verbose build for extension modules, when GNU " +"make is passed macros on the command line." +msgstr "" + +#: ../../../build/NEWS:12863 ../../../build/NEWS:13802 +msgid ":issue:`33393`: Update config.guess and config.sub files." +msgstr "" + +#: ../../../build/NEWS:12865 ../../../build/NEWS:13804 +msgid "" +":issue:`33377`: Add new triplets for mips r6 and riscv variants (used in " +"extension suffixes)." +msgstr "" + +#: ../../../build/NEWS:12868 ../../../build/NEWS:13807 +msgid "" +":issue:`32232`: By default, modules configured in `Modules/Setup` are no " +"longer built with `-DPy_BUILD_CORE`. Instead, modules that specifically need" +" that preprocessor definition include it in their individual entries." +msgstr "" + +#: ../../../build/NEWS:12872 ../../../build/NEWS:13811 +msgid "" +":issue:`33182`: The embedding tests can once again be built with clang 6.0" +msgstr "" + +#: ../../../build/NEWS:12874 ../../../build/NEWS:14019 +#: ../../../build/NEWS:18246 +msgid ":issue:`33163`: Upgrade pip to 9.0.3 and setuptools to v39.0.1." +msgstr "" + +#: ../../../build/NEWS:12876 +msgid "" +":issue:`33012`: gcc 8 has added a new warning heuristic to detect invalid " +"function casts and a stock python build seems to hit that warning quite " +"often. The most common is the cast of a METH_NOARGS function (that uses " +"just one argument) to a PyCFunction. Fix this by adding a dummy argument to " +"all functions that implement METH_NOARGS." +msgstr "" + +#: ../../../build/NEWS:12882 ../../../build/NEWS:14266 +msgid ":issue:`32898`: Fix the python debug build when using COUNT_ALLOCS." +msgstr "" + +#: ../../../build/NEWS:12884 +msgid ":issue:`29442`: Replace optparse with argparse in setup.py" +msgstr "" + +#: ../../../build/NEWS:12889 +msgid "" +":issue:`35890`: Fix API calling consistency of GetVersionEx and wcstok." +msgstr "" + +#: ../../../build/NEWS:12891 +msgid "" +":issue:`32560`: The ``py`` launcher now forwards its ``STARTUPINFO`` " +"structure to child processes." +msgstr "" + +#: ../../../build/NEWS:12894 +msgid ":issue:`35854`: Fix EnvBuilder and --symlinks in venv on Windows" +msgstr "" + +#: ../../../build/NEWS:12896 +msgid "" +":issue:`35811`: Avoid propagating venv settings when launching via py.exe" +msgstr "" + +#: ../../../build/NEWS:12898 +msgid "" +":issue:`35797`: Fix default executable used by the multiprocessing module" +msgstr "" + +#: ../../../build/NEWS:12900 +msgid ":issue:`35758`: Allow building on ARM with MSVC." +msgstr "" + +#: ../../../build/NEWS:12902 +msgid ":issue:`29734`: Fix handle leaks in os.stat on Windows." +msgstr "" + +#: ../../../build/NEWS:12904 +msgid "" +":issue:`35596`: Use unchecked PYCs for the embeddable distro to avoid " +"zipimport restrictions." +msgstr "" + +#: ../../../build/NEWS:12907 +msgid "" +":issue:`35596`: Fix vcruntime140.dll being added to embeddable distro " +"multiple times." +msgstr "" + +#: ../../../build/NEWS:12910 +msgid ":issue:`35402`: Update Windows build to use Tcl and Tk 8.6.9" +msgstr "" + +#: ../../../build/NEWS:12912 +msgid ":issue:`35401`: Updates Windows build to OpenSSL 1.1.0j" +msgstr "" + +#: ../../../build/NEWS:12914 +msgid "" +":issue:`34977`: venv on Windows will now use a python.exe redirector rather " +"than copying the actual binaries from the base environment." +msgstr "" + +#: ../../../build/NEWS:12917 +msgid ":issue:`34977`: Adds support for building a Windows App Store package" +msgstr "" + +#: ../../../build/NEWS:12919 +msgid "" +":issue:`35067`: Remove _distutils_findvs module and use vswhere.exe instead." +msgstr "" + +#: ../../../build/NEWS:12921 +msgid ":issue:`32557`: Allow shutil.disk_usage to take a file path on Windows" +msgstr "" + +#: ../../../build/NEWS:12923 +msgid "" +":issue:`34770`: Fix a possible null pointer dereference in pyshellext.cpp." +msgstr "" + +#: ../../../build/NEWS:12925 +msgid ":issue:`34603`: Fix returning structs from functions produced by MSVC" +msgstr "" + +#: ../../../build/NEWS:12927 +msgid "" +":issue:`34581`: Guard MSVC-specific code in socketmodule.c with ``#ifdef " +"_MSC_VER``." +msgstr "" + +#: ../../../build/NEWS:12930 +msgid ":issue:`34532`: Fixes exit code of list version arguments for py.exe." +msgstr "" + +#: ../../../build/NEWS:12932 +msgid "" +":issue:`34062`: Fixed the '--list' and '--list-paths' arguments for the " +"py.exe launcher" +msgstr "" + +#: ../../../build/NEWS:12935 +msgid "" +":issue:`34225`: Ensure INCLUDE and LIB directories do not end with a " +"backslash." +msgstr "" + +#: ../../../build/NEWS:12937 +msgid "" +":issue:`34011`: A suite of code has been changed which copied across DLLs " +"and init.tcl from the running Python location into a venv being created. " +"These copies are needed only when running from a Python source build, and " +"the copying code is now only run when that is the case, rather than whenever" +" a venv is created." +msgstr "" + +#: ../../../build/NEWS:12943 +msgid "" +":issue:`34006`: Revert line length limit for Windows help docs. The line-" +"length limit is not needed because the pages appear in a separate app rather" +" than on a browser tab. It can also interact badly with the DPI setting." +msgstr "" + +#: ../../../build/NEWS:12947 +msgid "" +":issue:`31546`: Restore running PyOS_InputHook while waiting for user input " +"at the prompt. The restores integration of interactive GUI windows (such as " +"Matplotlib figures) with the prompt on Windows." +msgstr "" + +#: ../../../build/NEWS:12951 +msgid "" +":issue:`30237`: Output error when ReadConsole is canceled by " +"CancelSynchronousIo instead of crashing." +msgstr "" + +#: ../../../build/NEWS:12954 +msgid "" +":issue:`33895`: GIL is released while calling functions that acquire Windows" +" loader lock." +msgstr "" + +#: ../../../build/NEWS:12957 ../../../build/NEWS:13433 +msgid "" +":issue:`33720`: Reduces maximum marshal recursion depth on release builds." +msgstr "" + +#: ../../../build/NEWS:12959 +msgid "" +":issue:`29097`: Fix bug where :meth:`datetime.fromtimestamp` erroneously " +"throws an :exc:`OSError` on Windows for values between 0 and 86400. Patch by" +" Ammar Askar." +msgstr "" + +#: ../../../build/NEWS:12963 +msgid ":issue:`33316`: PyThread_release_lock always fails" +msgstr "" + +#: ../../../build/NEWS:12965 ../../../build/NEWS:13816 +msgid ":issue:`33184`: Update Windows installer to use OpenSSL 1.1.0h." +msgstr "" + +#: ../../../build/NEWS:12967 +msgid "" +":issue:`32890`: Fix usage of GetLastError() instead of errno in os.execve() " +"and os.truncate()." +msgstr "" + +#: ../../../build/NEWS:12970 ../../../build/NEWS:14024 +#: ../../../build/NEWS:18487 +msgid "" +":issue:`33016`: Fix potential use of uninitialized memory in " +"nt._getfinalpathname" +msgstr "" + +#: ../../../build/NEWS:12973 ../../../build/NEWS:14027 +#: ../../../build/NEWS:18490 +msgid "" +":issue:`32903`: Fix a memory leak in os.chdir() on Windows if the current " +"directory is set to a UNC path." +msgstr "" + +#: ../../../build/NEWS:12976 ../../../build/NEWS:14271 +msgid ":issue:`32901`: Update Tcl and Tk versions to 8.6.8" +msgstr "" + +#: ../../../build/NEWS:12978 ../../../build/NEWS:14273 +#: ../../../build/NEWS:18493 +msgid ":issue:`31966`: Fixed WindowsConsoleIO.write() for writing empty data." +msgstr "" + +#: ../../../build/NEWS:12980 ../../../build/NEWS:14275 +#: ../../../build/NEWS:18495 +msgid ":issue:`32409`: Ensures activate.bat can handle Unicode contents." +msgstr "" + +#: ../../../build/NEWS:12982 ../../../build/NEWS:14277 +#: ../../../build/NEWS:18497 +msgid "" +":issue:`32457`: Improves handling of denormalized executable path when " +"launching Python." +msgstr "" + +#: ../../../build/NEWS:12985 ../../../build/NEWS:14280 +#: ../../../build/NEWS:18500 +msgid "" +":issue:`32370`: Use the correct encoding for ipconfig output in the uuid " +"module. Patch by Segev Finer." +msgstr "" + +#: ../../../build/NEWS:12988 ../../../build/NEWS:14283 +#: ../../../build/NEWS:18503 +msgid "" +":issue:`29248`: Fix :func:`os.readlink` on Windows, which was mistakenly " +"treating the ``PrintNameOffset`` field of the reparse data buffer as a " +"number of characters instead of bytes. Patch by Craig Holmquist and SSE4." +msgstr "" + +#: ../../../build/NEWS:12992 +msgid "" +":issue:`1104`: Correctly handle string length in " +"``msilib.SummaryInfo.GetProperty()`` to prevent it from truncating the last " +"character." +msgstr "" + +#: ../../../build/NEWS:12999 +msgid ":issue:`35401`: Update macOS installer to use OpenSSL 1.1.0j." +msgstr "" + +#: ../../../build/NEWS:13001 +msgid "" +":issue:`35025`: Properly guard the use of the ``CLOCK_GETTIME`` et al. " +"macros in ``timemodule`` on macOS." +msgstr "" + +#: ../../../build/NEWS:13004 +msgid "" +":issue:`24658`: On macOS, fix reading from and writing into a file with a " +"size larger than 2 GiB." +msgstr "" + +#: ../../../build/NEWS:13007 +msgid ":issue:`34405`: Update to OpenSSL 1.1.0i for macOS installer builds." +msgstr "" + +#: ../../../build/NEWS:13009 +msgid "" +":issue:`33635`: In macOS stat on some file descriptors (/dev/fd/3 f.e) will " +"result in bad file descriptor OSError. Guard against this exception was " +"added in is_dir, is_file and similar methods. DirEntry.is_dir can also throw" +" this exception so _RecursiveWildcardSelector._iterate_directories was also " +"extended with the same error ignoring pattern." +msgstr "" + +#: ../../../build/NEWS:13015 ../../../build/NEWS:13661 +msgid "" +":issue:`13631`: The .editrc file in user's home directory is now processed " +"correctly during the readline initialization through editline emulation on " +"macOS." +msgstr "" + +#: ../../../build/NEWS:13019 ../../../build/NEWS:13821 +msgid ":issue:`33184`: Update macOS installer build to use OpenSSL 1.1.0h." +msgstr "" + +#: ../../../build/NEWS:13021 ../../../build/NEWS:14033 +msgid "" +":issue:`32726`: Build and link with private copy of Tcl/Tk 8.6 for the macOS" +" 10.6+ installer. The 10.9+ installer variant already does this. This means" +" that the Python 3.7 provided by the python.org macOS installers no longer " +"need or use any external versions of Tcl/Tk, either system-provided or user-" +"installed, such as ActiveTcl." +msgstr "" + +#: ../../../build/NEWS:13027 ../../../build/NEWS:14290 +msgid ":issue:`32901`: Update macOS 10.9+ installer to Tcl/Tk 8.6.8." +msgstr "" + +#: ../../../build/NEWS:13029 +msgid "" +":issue:`31903`: In :mod:`_scproxy`, drop the GIL when calling into " +"``SystemConfiguration`` to avoid deadlocks." +msgstr "" + +#: ../../../build/NEWS:13035 +msgid "" +":issue:`35770`: IDLE macosx deletes Options => Configure IDLE. It previously" +" deleted Window => Zoom Height by mistake. (Zoom Height is now on the " +"Options menu). On Mac, the settings dialog is accessed via Preferences on " +"the IDLE menu." +msgstr "" + +#: ../../../build/NEWS:13040 +msgid "" +":issue:`35769`: Change IDLE's new file name from 'Untitled' to 'untitled'" +msgstr "" + +#: ../../../build/NEWS:13042 +msgid ":issue:`35660`: Fix imports in idlelib.window." +msgstr "" + +#: ../../../build/NEWS:13044 +msgid "" +":issue:`35641`: Proper format `calltip` when the function has no docstring." +msgstr "" + +#: ../../../build/NEWS:13046 +msgid ":issue:`33987`: Use ttk Frame for ttk widgets." +msgstr "" + +#: ../../../build/NEWS:13048 +msgid "" +":issue:`34055`: Fix erroneous 'smart' indents and newlines in IDLE Shell." +msgstr "" + +#: ../../../build/NEWS:13050 +msgid ":issue:`35591`: Find Selection now works when selection not found." +msgstr "" + +#: ../../../build/NEWS:13052 +msgid ":issue:`35196`: Speed up squeezer line counting." +msgstr "" + +#: ../../../build/NEWS:13054 +msgid "" +":issue:`35598`: Update config_key: use PEP 8 names and ttk widgets, make " +"some objects global, and add tests." +msgstr "" + +#: ../../../build/NEWS:13057 +msgid ":issue:`28097`: Add Previous/Next History entries to Shell menu." +msgstr "" + +#: ../../../build/NEWS:13059 +msgid "" +":issue:`35208`: Squeezer now properly counts wrapped lines before newlines." +msgstr "" + +#: ../../../build/NEWS:13061 +msgid "" +":issue:`35555`: Gray out Code Context menu entry when it's not applicable." +msgstr "" + +#: ../../../build/NEWS:13063 +msgid "" +":issue:`35521`: Document the IDLE editor code context feature. Add some " +"internal references within the IDLE doc." +msgstr "" + +#: ../../../build/NEWS:13066 +msgid "" +":issue:`22703`: The Code Context menu label now toggles between Show/Hide " +"Code Context. The Zoom Height menu now toggles between Zoom/Restore Height. " +"Zoom Height has moved from the Window menu to the Options menu." +msgstr "" + +#: ../../../build/NEWS:13070 +msgid ":issue:`35213`: Where appropriate, use 'macOS' in idlelib." +msgstr "" + +#: ../../../build/NEWS:13072 +msgid "" +":issue:`34864`: On macOS, warn if the system preference \"Prefer tabs when " +"opening documents\" is set to \"Always\"." +msgstr "" + +#: ../../../build/NEWS:13075 +msgid "" +":issue:`34864`: Document two IDLE on MacOS issues. The System Preferences " +"Dock \"prefer tabs always\" setting disables some IDLE features. Menus are " +"a bit different than as described for Windows and Linux." +msgstr "" + +#: ../../../build/NEWS:13079 +msgid ":issue:`35202`: Remove unused imports from lib/idlelib" +msgstr "" + +#: ../../../build/NEWS:13081 +msgid "" +":issue:`33000`: Document that IDLE's shell has no line limit. A program that" +" runs indefinitely can overfill memory." +msgstr "" + +#: ../../../build/NEWS:13084 +msgid ":issue:`23220`: Explain how IDLE's Shell displays output." +msgstr "" + +#: ../../../build/NEWS:13086 +msgid "" +":issue:`35099`: Improve the doc about IDLE running user code. The section " +"is renamed from \"IDLE -- console differences\" is renamed \"Running user " +"code\". It mostly covers the implications of using custom sys.stdxxx " +"objects." +msgstr "" + +#: ../../../build/NEWS:13090 +msgid "" +":issue:`35097`: Add IDLE doc subsection explaining editor windows. Topics " +"include opening, title and status bar, .py* extension, and running." +msgstr "" + +#: ../../../build/NEWS:13093 +msgid "" +":issue:`35093`: Document the IDLE document viewer in the IDLE doc. Add a " +"paragraph in \"Help and preferences\", \"Help sources\" subsection." +msgstr "" + +#: ../../../build/NEWS:13096 +msgid "" +":issue:`35088`: Update idlelib.help.copy_string docstring. We now use git " +"and backporting instead of hg and forward merging." +msgstr "" + +#: ../../../build/NEWS:13099 +msgid "" +":issue:`35087`: Update idlelib help files for the current doc build. The " +"main change is the elimination of chapter-section numbers." +msgstr "" + +#: ../../../build/NEWS:13102 +msgid ":issue:`34548`: Use configured color theme for read-only text views." +msgstr "" + +#: ../../../build/NEWS:13104 +msgid "" +":issue:`1529353`: Enable \"squeezing\" of long outputs in the shell, to " +"avoid performance degradation and to clean up the history without losing it." +" Squeezed outputs may be copied, viewed in a separate window, and " +"\"unsqueezed\"." +msgstr "" + +#: ../../../build/NEWS:13109 +msgid ":issue:`34047`: Fixed mousewheel scrolling direction on macOS." +msgstr "" + +#: ../../../build/NEWS:13111 +msgid "" +":issue:`34275`: Make IDLE calltips always visible on Mac. Some MacOS-tk " +"combinations need .update_idletasks(). Patch by Kevin Walzer." +msgstr "" + +#: ../../../build/NEWS:13114 +msgid "" +":issue:`34120`: Fix unresponsiveness after closing certain windows and " +"dialogs." +msgstr "" + +#: ../../../build/NEWS:13116 +msgid "" +":issue:`33975`: Avoid small type when running htests. Since part of the " +"purpose of human-viewed tests is to determine that widgets look right, it is" +" important that they look the same for testing as when running IDLE." +msgstr "" + +#: ../../../build/NEWS:13120 +msgid ":issue:`33905`: Add test for idlelib.stackview.StackBrowser." +msgstr "" + +#: ../../../build/NEWS:13122 +msgid "" +":issue:`33924`: Change mainmenu.menudefs key 'windows' to 'window'. Every " +"other menudef key is lowercase version of main menu entry." +msgstr "" + +#: ../../../build/NEWS:13125 +msgid "" +":issue:`33906`: Rename idlelib.windows as window Match Window on the main " +"menu and remove last plural module name." +msgstr "" + +#: ../../../build/NEWS:13128 +msgid "" +":issue:`33917`: Fix and document idlelib/idle_test/template.py. The revised " +"file compiles, runs, and tests OK. idle_test/README.txt explains how to use" +" it to create new IDLE test files." +msgstr "" + +#: ../../../build/NEWS:13132 +msgid "" +":issue:`33904`: IDLE: In rstrip, rename class RstripExtension as Rstrip" +msgstr "" + +#: ../../../build/NEWS:13134 +msgid "" +":issue:`33907`: For consistency and clarity, rename an IDLE module and " +"classes. Module calltips and its class CallTips are now calltip and Calltip." +" In module calltip_w, class CallTip is now CalltipWindow." +msgstr "" + +#: ../../../build/NEWS:13138 +msgid ":issue:`33856`: Add \"help\" in the welcome message of IDLE" +msgstr "" + +#: ../../../build/NEWS:13140 +msgid "" +":issue:`33839`: IDLE: refactor ToolTip and CallTip and add documentation and" +" tests" +msgstr "" + +#: ../../../build/NEWS:13143 +msgid "" +":issue:`33855`: Minimally test all IDLE modules. Add missing files, import " +"module, instantiate classes, and check coverage. Check existing files." +msgstr "" + +#: ../../../build/NEWS:13146 ../../../build/NEWS:13438 +#: ../../../build/NEWS:18166 +msgid "" +":issue:`33656`: On Windows, add API call saying that tk scales for DPI. On " +"Windows 8.1+ or 10, with DPI compatibility properties of the Python binary " +"unchanged, and a monitor resolution greater than 96 DPI, this should make " +"text and lines sharper. It should otherwise have no effect." +msgstr "" + +#: ../../../build/NEWS:13151 ../../../build/NEWS:13443 +#: ../../../build/NEWS:18171 +msgid "" +":issue:`33768`: Clicking on a context line moves that line to the top of the" +" editor window." +msgstr "" + +#: ../../../build/NEWS:13154 ../../../build/NEWS:13446 +#: ../../../build/NEWS:18174 +msgid "" +":issue:`33763`: IDLE: Use read-only text widget for code context instead of " +"label widget." +msgstr "" + +#: ../../../build/NEWS:13157 ../../../build/NEWS:13449 +#: ../../../build/NEWS:18177 +msgid "" +":issue:`33664`: Scroll IDLE editor text by lines. Previously, the mouse " +"wheel and scrollbar slider moved text by a fixed number of pixels, resulting" +" in partial lines at the top of the editor box. The change also applies to " +"the shell and grep output windows, but not to read-only text views." +msgstr "" + +#: ../../../build/NEWS:13162 ../../../build/NEWS:13454 +#: ../../../build/NEWS:18182 +msgid "" +":issue:`33679`: Enable theme-specific color configuration for Code Context. " +"Use the Highlights tab to see the setting for built-in themes or add " +"settings to custom themes." +msgstr "" + +#: ../../../build/NEWS:13166 ../../../build/NEWS:13458 +#: ../../../build/NEWS:18186 +msgid "" +":issue:`33642`: Display up to maxlines non-blank lines for Code Context. If " +"there is no current context, show a single blank line." +msgstr "" + +#: ../../../build/NEWS:13169 ../../../build/NEWS:13668 +#: ../../../build/NEWS:18189 +msgid ":issue:`33628`: IDLE: Cleanup codecontext.py and its test." +msgstr "" + +#: ../../../build/NEWS:13171 ../../../build/NEWS:13670 +#: ../../../build/NEWS:18191 +msgid "" +":issue:`33564`: IDLE's code context now recognizes async as a block opener." +msgstr "" + +#: ../../../build/NEWS:13173 ../../../build/NEWS:13826 +#: ../../../build/NEWS:18196 +msgid "" +":issue:`21474`: Update word/identifier definition from ascii to unicode. In " +"text and entry boxes, this affects selection by double-click, movement " +"left/right by control-left/right, and deletion left/right by control-" +"BACKSPACE/DEL." +msgstr "" + +#: ../../../build/NEWS:13178 ../../../build/NEWS:13831 +#: ../../../build/NEWS:18201 +msgid "" +":issue:`33204`: IDLE: consistently color invalid string prefixes. A 'u' " +"string prefix cannot be paired with either 'r' or 'f'. Consistently color as" +" much of the prefix, starting at the right, as is valid. Revise and extend " +"colorizer test." +msgstr "" + +#: ../../../build/NEWS:13183 ../../../build/NEWS:14042 +#: ../../../build/NEWS:18520 +msgid "" +":issue:`32984`: Set ``__file__`` while running a startup file. Like Python," +" IDLE optionally runs one startup file in the Shell window before presenting" +" the first interactive input prompt. For IDLE, ``-s`` runs a file named in " +"environmental variable :envvar:`IDLESTARTUP` or :envvar:`PYTHONSTARTUP`; " +"``-r file`` runs ``file``. Python sets ``__file__`` to the startup file " +"name before running the file and unsets it before the first prompt. IDLE " +"now does the same when run normally, without the ``-n`` option." +msgstr "" + +#: ../../../build/NEWS:13192 ../../../build/NEWS:14051 +#: ../../../build/NEWS:18529 +msgid "" +":issue:`32940`: Simplify and rename StringTranslatePseudoMapping in pyparse." +msgstr "" + +#: ../../../build/NEWS:13194 ../../../build/NEWS:14295 +#: ../../../build/NEWS:18531 +msgid ":issue:`32916`: Change ``str`` to ``code`` in pyparse." +msgstr "" + +#: ../../../build/NEWS:13196 ../../../build/NEWS:14297 +#: ../../../build/NEWS:18533 +msgid ":issue:`32905`: Remove unused code in pyparse module." +msgstr "" + +#: ../../../build/NEWS:13198 ../../../build/NEWS:14299 +#: ../../../build/NEWS:18535 +msgid ":issue:`32874`: Add tests for pyparse." +msgstr "" + +#: ../../../build/NEWS:13200 ../../../build/NEWS:14301 +#: ../../../build/NEWS:18537 +msgid "" +":issue:`32837`: Using the system and place-dependent default encoding for " +"open() is a bad idea for IDLE's system and location-independent files." +msgstr "" + +#: ../../../build/NEWS:13203 ../../../build/NEWS:14304 +#: ../../../build/NEWS:18540 +msgid "" +":issue:`32826`: Add \"encoding=utf-8\" to open() in IDLE's test_help_about. " +"GUI test test_file_buttons() only looks at initial ascii-only lines, but " +"failed on systems where open() defaults to 'ascii' because readline() " +"internally reads and decodes far enough ahead to encounter a non-ascii " +"character in CREDITS.txt." +msgstr "" + +#: ../../../build/NEWS:13209 ../../../build/NEWS:13672 +#: ../../../build/NEWS:18206 +msgid ":issue:`32831`: Add docstrings and tests for codecontext." +msgstr "" + +#: ../../../build/NEWS:13211 ../../../build/NEWS:14310 +#: ../../../build/NEWS:18546 +msgid "" +":issue:`32765`: Update configdialog General tab docstring to add new widgets" +" to the widget list." +msgstr "" + +#: ../../../build/NEWS:13217 +msgid "" +":issue:`35884`: Add a benchmark script for timing various ways to access " +"variables: ``Tools/scripts/var_access_benchmark.py``." +msgstr "" + +#: ../../../build/NEWS:13220 +msgid "" +":issue:`34989`: python-gdb.py now handles errors on computing the line " +"number of a Python frame." +msgstr "" + +#: ../../../build/NEWS:13223 +msgid "" +":issue:`20260`: Argument Clinic now has non-bitwise unsigned int converters." +msgstr "" + +#: ../../../build/NEWS:13225 +msgid "" +":issue:`32962`: python-gdb now catches ``UnicodeDecodeError`` exceptions " +"when calling ``string()``." +msgstr "" + +#: ../../../build/NEWS:13228 +msgid "" +":issue:`32962`: python-gdb now catches ValueError on read_var(): when Python" +" has no debug symbols for example." +msgstr "" + +#: ../../../build/NEWS:13231 ../../../build/NEWS:13839 +#: ../../../build/NEWS:18211 +msgid "" +":issue:`33189`: :program:`pygettext.py` now recognizes only literal strings " +"as docstrings and translatable strings, and rejects bytes literals and " +"f-string expressions." +msgstr "" + +#: ../../../build/NEWS:13235 ../../../build/NEWS:13843 +#: ../../../build/NEWS:18215 +msgid "" +":issue:`31920`: Fixed handling directories as arguments in the ``pygettext``" +" script. Based on patch by Oleg Krasnikov." +msgstr "" + +#: ../../../build/NEWS:13238 ../../../build/NEWS:13846 +#: ../../../build/NEWS:18218 +msgid ":issue:`29673`: Fix pystackv and pystack gdbinit macros." +msgstr "" + +#: ../../../build/NEWS:13240 +msgid "" +":issue:`25427`: Remove the pyvenv script in favor of ``python3 -m venv`` in " +"order to lower confusion as to what Python interpreter a virtual environment" +" will be created for." +msgstr "" + +#: ../../../build/NEWS:13244 ../../../build/NEWS:14056 +#: ../../../build/NEWS:18220 +msgid "" +":issue:`32885`: Add an ``-n`` flag for ``Tools/scripts/pathfix.py`` to " +"disable automatic backup creation (files with ``~`` suffix)." +msgstr "" + +#: ../../../build/NEWS:13247 ../../../build/NEWS:14316 +#: ../../../build/NEWS:18556 +msgid "" +":issue:`32222`: Fix pygettext not extracting docstrings for functions with " +"type annotated arguments. Patch by Toby Harradine." +msgstr "" + +#: ../../../build/NEWS:13250 ../../../build/NEWS:13848 +#: ../../../build/NEWS:18223 +msgid "" +":issue:`31583`: Fix 2to3 for using with --add-suffix option but without " +"--output-dir option for relative path to files in current directory." +msgstr "" + +#: ../../../build/NEWS:13256 +msgid "" +":issue:`35713`: The :c:func:`PyByteArray_Init` and " +":c:func:`PyByteArray_Fini` functions have been removed. They did nothing " +"since Python 2.7.4 and Python 3.2.0, were excluded from the limited API " +"(stable ABI), and were not documented." +msgstr "" + +#: ../../../build/NEWS:13261 +msgid "" +":issue:`33817`: Fixed :c:func:`_PyBytes_Resize` for empty bytes objects." +msgstr "" + +#: ../../../build/NEWS:13263 +msgid "" +":issue:`35322`: Fix memory leak in :c:func:`PyUnicode_EncodeLocale` and " +":c:func:`PyUnicode_EncodeFSDefault` on error handling." +msgstr "" + +#: ../../../build/NEWS:13266 +msgid "" +":issue:`35059`: The following C macros have been converted to static inline " +"functions: :c:func:`Py_INCREF`, :c:func:`Py_DECREF`, :c:func:`Py_XINCREF`, " +":c:func:`Py_XDECREF`, :c:func:`PyObject_INIT`, :c:func:`PyObject_INIT_VAR`." +msgstr "" + +#: ../../../build/NEWS:13271 +msgid "" +":issue:`35296`: ``make install`` now also installs the internal API: " +"``Include/internal/*.h`` header files." +msgstr "" + +#: ../../../build/NEWS:13274 +msgid "" +":issue:`35081`: Internal APIs surrounded by ``#ifdef Py_BUILD_CORE`` have " +"been moved from ``Include/*.h`` headers to new header files " +"``Include/internal/pycore_*.h``." +msgstr "" + +#: ../../../build/NEWS:13278 +msgid "" +":issue:`35259`: Conditionally declare :c:func:`Py_FinalizeEx()` (new in 3.6)" +" based on Py_LIMITED_API. Patch by Arthur Neufeld." +msgstr "" + +#: ../../../build/NEWS:13281 +msgid "" +":issue:`35081`: The :c:func:`_PyObject_GC_TRACK` and " +":c:func:`_PyObject_GC_UNTRACK` macros have been removed from the public C " +"API." +msgstr "" + +#: ../../../build/NEWS:13285 +msgid ":issue:`35134`: Creation of a new ``Include/cpython/`` subdirectory." +msgstr "" + +#: ../../../build/NEWS:13287 +msgid "" +":issue:`34725`: Adds _Py_SetProgramFullPath so embedders may override " +"sys.executable" +msgstr "" + +#: ../../../build/NEWS:13290 +msgid "" +":issue:`34910`: Ensure that :c:func:`PyObject_Print` always returns ``-1`` " +"on error. Patch by Zackery Spytz." +msgstr "" + +#: ../../../build/NEWS:13293 +msgid "" +":issue:`34523`: Py_DecodeLocale() and Py_EncodeLocale() now use the UTF-8 " +"encoding on Windows if Py_LegacyWindowsFSEncodingFlag is zero." +msgstr "" + +#: ../../../build/NEWS:13296 +msgid "" +":issue:`34193`: Fix pluralization in TypeError messages in getargs.c and " +"typeobject.c: '1 argument' instead of '1 arguments' and '1 element' instead " +"of '1 elements'." +msgstr "" + +#: ../../../build/NEWS:13300 +msgid "" +":issue:`34127`: Return grammatically correct error message based on argument" +" count. Patch by Karthikeyan Singaravelan." +msgstr "" + +#: ../../../build/NEWS:13303 +msgid "" +":issue:`23927`: Fixed :exc:`SystemError` in " +":c:func:`PyArg_ParseTupleAndKeywords` when the ``w*`` format unit is used " +"for optional parameter." +msgstr "" + +#: ../../../build/NEWS:13307 +msgid ":issue:`32455`: Added :c:func:`PyCompile_OpcodeStackEffectWithJump`." +msgstr "" + +#: ../../../build/NEWS:13309 +msgid "" +":issue:`34008`: Py_Main() can again be called after Py_Initialize(), as in " +"Python 3.6." +msgstr "" + +#: ../../../build/NEWS:13312 +msgid "" +":issue:`32500`: Fixed error messages for :c:func:`PySequence_Size`, " +":c:func:`PySequence_GetItem`, :c:func:`PySequence_SetItem` and " +":c:func:`PySequence_DelItem` called with a mapping and " +":c:func:`PyMapping_Size` called with a sequence." +msgstr "" + +#: ../../../build/NEWS:13317 +msgid "" +":issue:`33818`: :c:func:`PyExceptionClass_Name` will now return ``const char" +" *`` instead of ``char *``." +msgstr "" + +#: ../../../build/NEWS:13320 ../../../build/NEWS:14062 +msgid "" +":issue:`33042`: Embedding applications may once again call " +"PySys_ResetWarnOptions, PySys_AddWarnOption, and PySys_AddXOption prior to " +"calling Py_Initialize." +msgstr "" + +#: ../../../build/NEWS:13324 ../../../build/NEWS:14066 +#: ../../../build/NEWS:18229 +msgid "" +":issue:`32374`: Document that m_traverse for multi-phase initialized modules" +" can be called with m_state=NULL, and add a sanity check" +msgstr "" + +#: ../../../build/NEWS:13327 +msgid "" +":issue:`30863`: :c:func:`PyUnicode_AsWideChar` and " +":c:func:`PyUnicode_AsWideCharString` no longer cache the ``wchar_t*`` " +"representation of string objects." +msgstr "" + +#: ../../../build/NEWS:13333 +msgid "Python 3.7.0 final" +msgstr "Python 3.7.0 正式版" + +#: ../../../build/NEWS:13335 ../../../build/NEWS:17916 +msgid "*Release date: 2018-06-27*" +msgstr "*发布日期: 2018-06-27*" + +#: ../../../build/NEWS:13340 +msgid "" +":issue:`33851`: Fix :func:`ast.get_docstring` for a node that lacks a " +"docstring." +msgstr "" + +#: ../../../build/NEWS:13346 +msgid "" +":issue:`33932`: Calling Py_Initialize() twice does nothing, instead of " +"failing with a fatal error: restore the Python 3.6 behaviour." +msgstr "" + +#: ../../../build/NEWS:13351 +msgid "Python 3.7.0 release candidate 1" +msgstr "Python 3.7.0 rc1" + +#: ../../../build/NEWS:13353 +msgid "*Release date: 2018-06-12*" +msgstr "*发布日期: 2018-06-12*" + +#: ../../../build/NEWS:13463 +msgid "Python 3.7.0 beta 5" +msgstr "Python 3.7.0 beta 5" + +#: ../../../build/NEWS:13465 +msgid "*Release date: 2018-05-30*" +msgstr "*发布日期: 2018-05-30*" + +#: ../../../build/NEWS:13478 +msgid "" +":issue:`20104`: The new `os.posix_spawn` added in 3.7.0b1 was removed as we " +"are still working on what the API should look like. Expect this in 3.8 " +"instead." +msgstr "" + +#: ../../../build/NEWS:13612 ../../../build/NEWS:18053 +msgid "" +":issue:`32861`: The urllib.robotparser's ``__str__`` representation now " +"includes wildcard entries and the \"Crawl-delay\" and \"Request-rate\" " +"fields. Patch by Michael Lazar." +msgstr "" + +#: ../../../build/NEWS:13642 +msgid "" +":issue:`32604`: Remove the _xxsubinterpreters module (meant for testing) and" +" associated helpers. This module was originally added recently in 3.7b1." +msgstr "" + +#: ../../../build/NEWS:13654 ../../../build/NEWS:18146 +msgid "" +":issue:`33012`: Add ``-Wno-cast-function-type`` for gcc 8 for silencing " +"warnings about function casts like casting to PyCFunction in method " +"definition lists." +msgstr "" + +#: ../../../build/NEWS:13676 +msgid "Python 3.7.0 beta 4" +msgstr "Python 3.7.0 beta 4" + +#: ../../../build/NEWS:13678 +msgid "*Release date: 2018-05-02*" +msgstr "*发布日期: 2018-05-02*" + +#: ../../../build/NEWS:13736 +msgid "" +":issue:`33185`: Fixed regression when running pydoc with the :option:`-m` " +"switch. (The regression was introduced in 3.7.0b3 by the resolution of " +":issue:`33053`) This fix also changed pydoc to add ``os.getcwd()`` to " +":data:`sys.path` when necessary, rather than adding ``\".\"``." +msgstr "" + +#: ../../../build/NEWS:13744 +msgid "" +":issue:`33217`: Deprecate looking up non-Enum objects in Enum classes and " +"Enum members (will raise :exc:`TypeError` in 3.8+)." +msgstr "" + +#: ../../../build/NEWS:13853 +msgid "Python 3.7.0 beta 3" +msgstr "Python 3.7.0 beta 3" + +#: ../../../build/NEWS:13855 +msgid "*Release date: 2018-03-29*" +msgstr "*发布日期: 2018-03-29*" + +#: ../../../build/NEWS:13883 ../../../build/NEWS:17956 +msgid "" +":issue:`33041`: Fixed jumping when the function contains an ``async for`` " +"loop." +msgstr "" + +#: ../../../build/NEWS:13981 +msgid "" +":issue:`31639`: http.server now exposes a ThreadedHTTPServer class and uses " +"it when the module is run with ``-m`` to cope with web browsers pre-opening " +"sockets." +msgstr "" + +#: ../../../build/NEWS:14071 +msgid "Python 3.7.0 beta 2" +msgstr "Python 3.7.0 beta 2" + +#: ../../../build/NEWS:14073 +msgid "*Release date: 2018-02-27*" +msgstr "*发布日期: 2018-02-27*" + +#: ../../../build/NEWS:14138 +msgid "" +":issue:`25988`: Emit a :exc:`DeprecationWarning` when using or importing an " +"ABC directly from :mod:`collections` rather than from " +":mod:`collections.abc`." +msgstr "" + +#: ../../../build/NEWS:14147 +msgid "" +":issue:`31333`: ``_abc`` module is added. It is a speedup module with C " +"implementations for various functions and methods in ``abc``. Creating an " +"ABC subclass and calling ``isinstance`` or ``issubclass`` with an ABC " +"subclass are up to 1.5x faster. In addition, this makes Python start-up up " +"to 10% faster. Note that the new implementation hides internal registry and " +"caches, previously accessible via private attributes ``_abc_registry``, " +"``_abc_cache``, and ``_abc_negative_cache``. There are three debugging " +"helper methods that can be used instead ``_dump_registry``, " +"``_abc_registry_clear``, and ``_abc_caches_clear``." +msgstr "" + +#: ../../../build/NEWS:14321 +msgid "Python 3.7.0 beta 1" +msgstr "Python 3.7.0 beta 1" + +#: ../../../build/NEWS:14323 +msgid "*Release date: 2018-01-30*" +msgstr "*发布日期: 2018-01-30*" + +#: ../../../build/NEWS:14328 +msgid "" +":issue:`32703`: Fix coroutine's ResourceWarning when there's an active error" +" set when it's being finalized." +msgstr "" + +#: ../../../build/NEWS:14331 ../../../build/NEWS:18274 +msgid "" +":issue:`32650`: Pdb and other debuggers dependent on bdb.py will correctly " +"step over (next command) native coroutines. Patch by Pablo Galindo." +msgstr "" + +#: ../../../build/NEWS:14334 +msgid "" +":issue:`28685`: Optimize list.sort() and sorted() by using type specialized " +"comparisons when possible." +msgstr "" + +#: ../../../build/NEWS:14337 ../../../build/NEWS:18277 +msgid "" +":issue:`32685`: Improve suggestion when the Python 2 form of print statement" +" is either present on the same line as the header of a compound statement or" +" else terminated by a semi-colon instead of a newline. Patch by Nitish " +"Chandra." +msgstr "" + +#: ../../../build/NEWS:14342 +msgid "" +":issue:`32697`: Python now explicitly preserves the definition order of " +"keyword-only parameters. It's always preserved their order, but this " +"behavior was never guaranteed before; this behavior is now guaranteed and " +"tested." +msgstr "" + +#: ../../../build/NEWS:14347 +msgid "" +":issue:`32690`: The locals() dictionary now displays in the lexical order " +"that variables were defined. Previously, the order was reversed." +msgstr "" + +#: ../../../build/NEWS:14350 +msgid "" +":issue:`32677`: Add ``.isascii()`` method to ``str``, ``bytes`` and " +"``bytearray``. It can be used to test that string contains only ASCII " +"characters." +msgstr "" + +#: ../../../build/NEWS:14354 +msgid "" +":issue:`32670`: Enforce :pep:`479` for all code. This means that manually " +"raising a StopIteration exception from a generator is prohibited for all " +"code, regardless of whether 'from __future__ import generator_stop' was used" +" or not." +msgstr "" + +#: ../../../build/NEWS:14359 +msgid "" +":issue:`32591`: Added built-in support for tracking the origin of coroutine " +"objects; see sys.set_coroutine_origin_tracking_depth and " +"CoroutineType.cr_origin. This replaces the asyncio debug mode's use of " +"coroutine wrapping for native coroutine objects." +msgstr "" + +#: ../../../build/NEWS:14364 +msgid "" +":issue:`31368`: Expose preadv and pwritev system calls in the os module. " +"Patch by Pablo Galindo" +msgstr "" + +#: ../../../build/NEWS:14367 +msgid "" +":issue:`32544`: ``hasattr(obj, name)`` and ``getattr(obj, name, default)`` " +"are about 4 times faster than before when ``name`` is not found and ``obj`` " +"doesn't override ``__getattr__`` or ``__getattribute__``." +msgstr "" + +#: ../../../build/NEWS:14371 ../../../build/NEWS:18285 +msgid "" +":issue:`26163`: Improved frozenset() hash to create more distinct hash " +"values when faced with datasets containing many similar values." +msgstr "" + +#: ../../../build/NEWS:14374 +msgid ":issue:`32550`: Remove the STORE_ANNOTATION bytecode." +msgstr "" + +#: ../../../build/NEWS:14376 +msgid "" +":issue:`20104`: Expose posix_spawn as a low level API in the os module. " +"(removed before 3.7.0rc1)" +msgstr "" + +#: ../../../build/NEWS:14379 +msgid ":issue:`24340`: Fixed estimation of the code stack size." +msgstr "" + +#: ../../../build/NEWS:14381 +msgid ":issue:`32436`: Implement :pep:`567` Context Variables." +msgstr "" + +#: ../../../build/NEWS:14383 ../../../build/NEWS:18298 +msgid "" +":issue:`18533`: ``repr()`` on a dict containing its own ``values()`` or " +"``items()`` no longer raises ``RecursionError``; OrderedDict similarly. " +"Instead, use ``...``, as for other recursive structures. Patch by Ben " +"North." +msgstr "" + +#: ../../../build/NEWS:14388 +msgid "" +":issue:`20891`: Py_Initialize() now creates the GIL. The GIL is no longer " +"created \"on demand\" to fix a race condition when PyGILState_Ensure() is " +"called in a non-Python thread." +msgstr "" + +#: ../../../build/NEWS:14392 ../../../build/NEWS:18303 +msgid "" +":issue:`32028`: Leading whitespace is now correctly ignored when generating " +"suggestions for converting Py2 print statements to Py3 builtin print " +"function calls. Patch by Sanyam Khurana." +msgstr "" + +#: ../../../build/NEWS:14396 +msgid ":issue:`31179`: Make dict.copy() up to 5.5 times faster." +msgstr "" + +#: ../../../build/NEWS:14398 +msgid "" +":issue:`31113`: Get rid of recursion in the compiler for normal control " +"flow." +msgstr "" + +#: ../../../build/NEWS:14403 +msgid "" +":issue:`25988`: Deprecate exposing the contents of collections.abc in the " +"regular collections module." +msgstr "" + +#: ../../../build/NEWS:14406 +msgid "" +":issue:`31429`: The default cipher suite selection of the ssl module now " +"uses a blacklist approach rather than a hard-coded whitelist. Python no " +"longer re-enables ciphers that have been blocked by OpenSSL security update." +" Default cipher suite selection can be configured on compile time." +msgstr "" + +#: ../../../build/NEWS:14411 +msgid "" +":issue:`30306`: contextlib.contextmanager now releases the arguments passed " +"to the underlying generator as soon as the context manager is entered. " +"Previously it would keep them alive for as long as the context manager was " +"alive, even when not being used as a function decorator. Patch by Martin " +"Teichmann." +msgstr "" + +#: ../../../build/NEWS:14417 +msgid "" +":issue:`21417`: Added support for setting the compression level for " +"zipfile.ZipFile." +msgstr "" + +#: ../../../build/NEWS:14420 +msgid ":issue:`32251`: Implement asyncio.BufferedProtocol (provisional API)." +msgstr "" + +#: ../../../build/NEWS:14422 +msgid "" +":issue:`32513`: In dataclasses, allow easier overriding of dunder methods " +"without specifying decorator parameters." +msgstr "" + +#: ../../../build/NEWS:14425 +msgid "" +":issue:`32660`: :mod:`termios` makes available ``FIONREAD``, ``FIONCLEX``, " +"``FIOCLEX``, ``FIOASYNC`` and ``FIONBIO`` also under Solaris/derivatives." +msgstr "" + +#: ../../../build/NEWS:14428 ../../../build/NEWS:18378 +msgid "" +":issue:`27931`: Fix email address header parsing error when the username is " +"an empty quoted string. Patch by Xiang Zhang." +msgstr "" + +#: ../../../build/NEWS:14431 +msgid "" +":issue:`32659`: Under Solaris and derivatives, :class:`os.stat_result` " +"provides a st_fstype attribute." +msgstr "" + +#: ../../../build/NEWS:14434 +msgid "" +":issue:`32662`: Implement Server.start_serving(), Server.serve_forever(), " +"and Server.is_serving() methods. Add 'start_serving' keyword parameter to " +"loop.create_server() and loop.create_unix_server()." +msgstr "" + +#: ../../../build/NEWS:14438 +msgid "" +":issue:`32391`: Implement :meth:`asyncio.StreamWriter.wait_closed` and " +":meth:`asyncio.StreamWriter.is_closing` methods" +msgstr "" + +#: ../../../build/NEWS:14441 +msgid "" +":issue:`32643`: Make Task._step, Task._wakeup and Future._schedule_callbacks" +" methods private." +msgstr "" + +#: ../../../build/NEWS:14444 +msgid "" +":issue:`32630`: Refactor decimal module to use contextvars to store decimal " +"context." +msgstr "" + +#: ../../../build/NEWS:14447 +msgid ":issue:`32622`: Add :meth:`asyncio.AbstractEventLoop.sendfile` method." +msgstr "" + +#: ../../../build/NEWS:14449 ../../../build/NEWS:18381 +msgid "" +":issue:`32304`: distutils' upload command no longer corrupts tar files " +"ending with a CR byte, and no longer tries to convert CR to CRLF in any of " +"the upload text fields." +msgstr "" + +#: ../../../build/NEWS:14453 ../../../build/NEWS:18385 +msgid "" +":issue:`32502`: uuid.uuid1 no longer raises an exception if a 64-bit " +"hardware address is encountered." +msgstr "" + +#: ../../../build/NEWS:14456 +msgid "" +":issue:`32596`: ``concurrent.futures`` imports ``ThreadPoolExecutor`` and " +"``ProcessPoolExecutor`` lazily (using :pep:`562`). It makes ``import " +"asyncio`` about 15% faster because asyncio uses only ``ThreadPoolExecutor`` " +"by default." +msgstr "" + +#: ../../../build/NEWS:14461 +msgid "" +":issue:`31801`: Add ``_ignore_`` to ``Enum`` so temporary variables can be " +"used during class construction without being turned into members." +msgstr "" + +#: ../../../build/NEWS:14464 +msgid "" +":issue:`32576`: Use queue.SimpleQueue() in places where it can be invoked " +"from a weakref callback." +msgstr "" + +#: ../../../build/NEWS:14467 +msgid "" +":issue:`32574`: Fix memory leak in asyncio.Queue, when the queue has limited" +" size and it is full, the cancelation of queue.put() can cause a memory " +"leak. Patch by: José Melero." +msgstr "" + +#: ../../../build/NEWS:14471 ../../../build/NEWS:18395 +msgid "" +":issue:`32521`: The nis module is now compatible with new libnsl and headers" +" location." +msgstr "" + +#: ../../../build/NEWS:14474 +msgid "" +":issue:`32467`: collections.abc.ValuesView now inherits from " +"collections.abc.Collection." +msgstr "" + +#: ../../../build/NEWS:14477 ../../../build/NEWS:18398 +msgid ":issue:`32473`: Improve ABCMeta._dump_registry() output readability" +msgstr "" + +#: ../../../build/NEWS:14479 +msgid ":issue:`32102`: New argument ``capture_output`` for subprocess.run" +msgstr "" + +#: ../../../build/NEWS:14481 ../../../build/NEWS:18400 +msgid "" +":issue:`32521`: glibc has removed Sun RPC. Use replacement libtirpc headers " +"and library in nis module." +msgstr "" + +#: ../../../build/NEWS:14484 +msgid ":issue:`32493`: UUID module fixes build for FreeBSD/OpenBSD" +msgstr "" + +#: ../../../build/NEWS:14486 +msgid "" +":issue:`32503`: Pickling with protocol 4 no longer creates too small frames." +msgstr "" + +#: ../../../build/NEWS:14488 +msgid ":issue:`29237`: Create enum for pstats sorting options" +msgstr "" + +#: ../../../build/NEWS:14490 +msgid ":issue:`32454`: Add close(fd) function to the socket module." +msgstr "" + +#: ../../../build/NEWS:14492 +msgid "" +":issue:`25942`: The subprocess module is now more graceful when handling a " +"Ctrl-C KeyboardInterrupt during subprocess.call, subprocess.run, or a Popen " +"context manager. It now waits a short amount of time for the child " +"(presumed to have also gotten the SIGINT) to exit, before continuing the " +"KeyboardInterrupt exception handling. This still includes a SIGKILL in the " +"call() and run() APIs, but at least the child had a chance first." +msgstr "" + +#: ../../../build/NEWS:14499 +msgid "" +":issue:`32433`: The hmac module now has hmac.digest(), which provides an " +"optimized HMAC digest." +msgstr "" + +#: ../../../build/NEWS:14502 +msgid "" +":issue:`28134`: Sockets now auto-detect family, type and protocol from file " +"descriptor by default." +msgstr "" + +#: ../../../build/NEWS:14505 +msgid "" +":issue:`32404`: Fix bug where :meth:`datetime.datetime.fromtimestamp` did " +"not call __new__ in :class:`datetime.datetime` subclasses." +msgstr "" + +#: ../../../build/NEWS:14508 +msgid "" +":issue:`32403`: Improved speed of :class:`datetime.date` and " +":class:`datetime.datetime` alternate constructors." +msgstr "" + +#: ../../../build/NEWS:14511 ../../../build/NEWS:18403 +msgid "" +":issue:`32228`: Ensure that ``truncate()`` preserves the file position (as " +"reported by ``tell()``) after writes longer than the buffer size." +msgstr "" + +#: ../../../build/NEWS:14514 +msgid "" +":issue:`32410`: Implement ``loop.sock_sendfile`` for asyncio event loop." +msgstr "" + +#: ../../../build/NEWS:14516 +msgid "" +":issue:`22908`: Added seek and tell to the ZipExtFile class. This only works" +" if the file object used to open the zipfile is seekable." +msgstr "" + +#: ../../../build/NEWS:14519 +msgid ":issue:`32373`: Add socket.getblocking() method." +msgstr "" + +#: ../../../build/NEWS:14521 +msgid "" +":issue:`32248`: Add :mod:`importlib.resources` and " +":class:`importlib.abc.ResourceReader` as the unified API for reading " +"resources contained within packages. Loaders wishing to support resource " +"reading must implement the :meth:`get_resource_reader()` method. File-based " +"and zipimport-based loaders both implement these APIs. " +":class:`importlib.abc.ResourceLoader` is deprecated in favor of these new " +"APIs." +msgstr "" + +#: ../../../build/NEWS:14529 +msgid ":issue:`32320`: collections.namedtuple() now supports default values." +msgstr "" + +#: ../../../build/NEWS:14531 +msgid "" +":issue:`29302`: Add contextlib.AsyncExitStack. Patch by Alexander Mohr and " +"Ilya Kulakov." +msgstr "" + +#: ../../../build/NEWS:14534 +msgid "" +":issue:`31961`: *Removed in Python 3.7.0b2.* The *args* argument of " +"subprocess.Popen can now be a :term:`path-like object`. If *args* is given " +"as a sequence, it's first element can now be a :term:`path-like object` as " +"well." +msgstr "" + +#: ../../../build/NEWS:14539 ../../../build/NEWS:18431 +msgid "" +":issue:`31900`: The :func:`locale.localeconv` function now sets temporarily " +"the ``LC_CTYPE`` locale to the ``LC_NUMERIC`` locale to decode " +"``decimal_point`` and ``thousands_sep`` byte strings if they are non-ASCII " +"or longer than 1 byte, and the ``LC_NUMERIC`` locale is different than the " +"``LC_CTYPE`` locale. This temporary change affects other threads. Same " +"change for the :meth:`str.format` method when formatting a number " +"(:class:`int`, :class:`float`, :class:`float` and subclasses) with the ``n``" +" type (ex: ``'{:n}'.format(1234)``)." +msgstr "" + +#: ../../../build/NEWS:14548 +msgid "" +":issue:`31853`: Use super().method instead of socket.method in SSLSocket. " +"They were there most likely for legacy reasons." +msgstr "" + +#: ../../../build/NEWS:14551 +msgid "" +":issue:`31399`: The ssl module now uses OpenSSL's " +"X509_VERIFY_PARAM_set1_host() and X509_VERIFY_PARAM_set1_ip() API to verify " +"hostname and IP addresses. Subject common name fallback can be disabled with" +" SSLContext.hostname_checks_common_name." +msgstr "" + +#: ../../../build/NEWS:14556 +msgid "" +":issue:`14976`: Add a queue.SimpleQueue class, an unbounded FIFO queue with " +"a reentrant C implementation of put()." +msgstr "" + +#: ../../../build/NEWS:14562 +msgid "" +":issue:`32724`: Add references to some commands in the documentation of Pdb." +" Patch by Stéphane Wirtel" +msgstr "" + +#: ../../../build/NEWS:14565 +msgid "" +":issue:`32649`: Complete the C API documentation, profiling and tracing part" +" with the newly added per-opcode events." +msgstr "" + +#: ../../../build/NEWS:14568 ../../../build/NEWS:18459 +msgid "" +":issue:`17799`: Explain real behaviour of sys.settrace and sys.setprofile " +"and their C-API counterparts regarding which type of events are received in " +"each function. Patch by Pablo Galindo Salgado." +msgstr "" + +#: ../../../build/NEWS:14575 ../../../build/NEWS:18469 +msgid "" +":issue:`32721`: Fix test_hashlib to not fail if the _md5 module is not " +"built." +msgstr "" + +#: ../../../build/NEWS:14577 +msgid "" +":issue:`28414`: Add test cases for IDNA 2003 and 2008 host names. IDNA 2003 " +"internationalized host names are working since :issue:`31399` has landed. " +"IDNA 2008 are still broken." +msgstr "" + +#: ../../../build/NEWS:14581 +msgid "" +":issue:`32604`: Add a new \"_xxsubinterpreters\" extension module that " +"exposes the existing subinterpreter C-API and a new cross-interpreter data " +"sharing mechanism. The module is primarily intended for more thorough " +"testing of the existing subinterpreter support. Note that the " +"_xxsubinterpreters module has been removed in 3.7.0rc1." +msgstr "" + +#: ../../../build/NEWS:14587 +msgid "" +":issue:`32602`: Add test certs and test for ECDSA cert and EC/RSA dual mode." +msgstr "" + +#: ../../../build/NEWS:14589 +msgid "" +":issue:`32549`: On Travis CI, Python now Compiles and uses a local copy of " +"OpenSSL 1.1.0g for testing." +msgstr "" + +#: ../../../build/NEWS:14595 ../../../build/NEWS:18481 +msgid "" +":issue:`32635`: Fix segfault of the crypt module when libxcrypt is provided " +"instead of libcrypt at the system." +msgstr "" + +#: ../../../build/NEWS:14598 +msgid "" +":issue:`32598`: Use autoconf to detect OpenSSL libs, headers and supported " +"features. The ax_check_openssl M4 macro uses pkg-config to locate OpenSSL " +"and falls back to manual search." +msgstr "" + +#: ../../../build/NEWS:14602 +msgid ":issue:`32593`: Drop support of FreeBSD 9 and older." +msgstr "" + +#: ../../../build/NEWS:14604 +msgid "" +":issue:`29708`: If the :envvar:`SOURCE_DATE_EPOCH` environment variable is " +"set, :mod:`py_compile` will always create hash-based ``.pyc`` files." +msgstr "" + +#: ../../../build/NEWS:14610 +msgid "" +":issue:`32588`: Create standalone _distutils_findvs module and add missing " +"_queue module to installer." +msgstr "" + +#: ../../../build/NEWS:14613 +msgid "" +":issue:`29911`: Ensure separate Modify and Uninstall buttons are displayed." +msgstr "" + +#: ../../../build/NEWS:14615 +msgid "" +":issue:`32507`: Use app-local UCRT install rather than the proper update for" +" old versions of Windows." +msgstr "" + +#: ../../../build/NEWS:14621 +msgid "" +":issue:`32726`: Provide an additional, more modern macOS installer variant " +"that supports macOS 10.9+ systems in 64-bit mode only. Upgrade the supplied" +" third-party libraries to OpenSSL 1.1.0g and to SQLite 3.22.0. The 10.9+ " +"installer now links with and supplies its own copy of Tcl/Tk 8.6." +msgstr "" + +#: ../../../build/NEWS:14626 +msgid "" +":issue:`28440`: No longer add /Library/Python/3.x/site-packages to sys.path " +"for macOS framework builds to avoid future conflicts." +msgstr "" + +#: ../../../build/NEWS:14632 +msgid "" +":issue:`32681`: Fix uninitialized variable 'res' in the C implementation of " +"os.dup2. Patch by Stéphane Wirtel" +msgstr "" + +#: ../../../build/NEWS:14635 +msgid "" +":issue:`10381`: Add C API access to the ``datetime.timezone`` constructor " +"and ``datetime.timzone.UTC`` singleton." +msgstr "" + +#: ../../../build/NEWS:14640 +msgid "Python 3.7.0 alpha 4" +msgstr "Python 3.7.0 alpha 4" + +#: ../../../build/NEWS:14642 +msgid "*Release date: 2018-01-08*" +msgstr "*发布日期: 2018-01-08*" + +#: ../../../build/NEWS:14647 +msgid "" +":issue:`31975`: The default warning filter list now starts with a " +"\"default::DeprecationWarning:__main__\" entry, so deprecation warnings are " +"once again shown by default in single-file scripts and at the interactive " +"prompt." +msgstr "" + +#: ../../../build/NEWS:14652 +msgid "" +":issue:`32226`: ``__class_getitem__`` is now an automatic class method." +msgstr "" + +#: ../../../build/NEWS:14654 +msgid "" +":issue:`32399`: Add AIX uuid library support for RFC4122 using uuid_create()" +" in libc.a" +msgstr "" + +#: ../../../build/NEWS:14657 +msgid "" +":issue:`32390`: Fix the compilation failure on AIX after the f_fsid field " +"has been added to the object returned by os.statvfs() (:issue:`32143`). " +"Original patch by Michael Felt." +msgstr "" + +#: ../../../build/NEWS:14661 +msgid "" +":issue:`32379`: Make MRO computation faster when a class inherits from a " +"single base." +msgstr "" + +#: ../../../build/NEWS:14664 +msgid "" +":issue:`32259`: The error message of a TypeError raised when unpack non-" +"iterable is now more specific." +msgstr "" + +#: ../../../build/NEWS:14667 ../../../build/NEWS:18288 +msgid "" +":issue:`27169`: The ``__debug__`` constant is now optimized out at compile " +"time. This fixes also :issue:`22091`." +msgstr "" + +#: ../../../build/NEWS:14670 +msgid "" +":issue:`32329`: The :option:`-R` option now turns on hash randomization when" +" the :envvar:`PYTHONHASHSEED` environment variable is set to ``0``. " +"Previously, the option was ignored. Moreover, " +"``sys.flags.hash_randomization`` is now properly set to 0 when hash " +"randomization is turned off by ``PYTHONHASHSEED=0``." +msgstr "" + +#: ../../../build/NEWS:14676 +msgid "" +":issue:`30416`: The optimizer is now protected from spending much time doing" +" complex calculations and consuming much memory for creating large constants" +" in constant folding. Increased limits for constants that can be produced in" +" constant folding." +msgstr "" + +#: ../../../build/NEWS:14681 ../../../build/NEWS:17958 +msgid "" +":issue:`32282`: Fix an unnecessary ifdef in the include of VersionHelpers.h " +"in socketmodule on Windows." +msgstr "" + +#: ../../../build/NEWS:14684 +msgid "" +":issue:`30579`: Implement TracebackType.__new__ to allow Python-level " +"creation of traceback objects, and make TracebackType.tb_next mutable." +msgstr "" + +#: ../../../build/NEWS:14687 +msgid "" +":issue:`32260`: Don't byte swap the input keys to the SipHash algorithm on " +"big-endian platforms. This should ensure siphash gives consistent results " +"across platforms." +msgstr "" + +#: ../../../build/NEWS:14691 +msgid "" +":issue:`31506`: Improve the error message logic for object.__new__ and " +"object.__init__. Patch by Sanyam Khurana." +msgstr "" + +#: ../../../build/NEWS:14694 +msgid "" +":issue:`20361`: ``-b`` and ``-bb`` now inject ``'default::BytesWarning'`` " +"and ``error::BytesWarning`` entries into ``sys.warnoptions``, ensuring that " +"they take precedence over any other warning filters configured via the " +"``-W`` option or the ``PYTHONWARNINGS`` environment variable." +msgstr "" + +#: ../../../build/NEWS:14699 +msgid "" +":issue:`32230`: `-X dev` now injects a ``'default'`` entry into " +"sys.warnoptions, ensuring that it behaves identically to actually passing " +"``-Wdefault`` at the command line." +msgstr "" + +#: ../../../build/NEWS:14703 +msgid "" +":issue:`29240`: Add a new UTF-8 mode: implementation of the :pep:`540`." +msgstr "" + +#: ../../../build/NEWS:14705 +msgid "" +":issue:`32226`: :pep:`560`: Add support for ``__mro_entries__`` and " +"``__class_getitem__``. Implemented by Ivan Levkivskyi." +msgstr "" + +#: ../../../build/NEWS:14708 +msgid "" +":issue:`32225`: :pep:`562`: Add support for module ``__getattr__`` and " +"``__dir__``. Implemented by Ivan Levkivskyi." +msgstr "" + +#: ../../../build/NEWS:14711 +msgid "" +":issue:`31901`: The `atexit` module now has its callback stored per " +"interpreter." +msgstr "" + +#: ../../../build/NEWS:14714 +msgid "" +":issue:`31650`: Implement :pep:`552` (Deterministic pycs). Python now " +"supports invalidating bytecode cache files bashed on a source content hash " +"rather than source last-modified time." +msgstr "" + +#: ../../../build/NEWS:14718 +msgid "" +":issue:`29469`: Move constant folding from bytecode layer to AST layer. " +"Original patch by Eugene Toder." +msgstr "" + +#: ../../../build/NEWS:14724 +msgid "" +":issue:`32506`: Now that dict is defined as keeping insertion order, drop " +"OrderedDict and just use plain dict." +msgstr "" + +#: ../../../build/NEWS:14727 +msgid "" +":issue:`32279`: Add params to dataclasses.make_dataclasses(): init, repr, " +"eq, order, hash, and frozen. Pass them through to dataclass()." +msgstr "" + +#: ../../../build/NEWS:14730 +msgid "" +":issue:`32278`: Make type information optional on " +"dataclasses.make_dataclass(). If omitted, the string 'typing.Any' is used." +msgstr "" + +#: ../../../build/NEWS:14733 +msgid "" +":issue:`32499`: Add dataclasses.is_dataclass(obj), which returns True if obj" +" is a dataclass or an instance of one." +msgstr "" + +#: ../../../build/NEWS:14736 +msgid "" +":issue:`32468`: Improve frame repr() to mention filename, code name and " +"current line number." +msgstr "" + +#: ../../../build/NEWS:14739 +msgid ":issue:`23749`: asyncio: Implement loop.start_tls()" +msgstr "" + +#: ../../../build/NEWS:14741 +msgid "" +":issue:`32441`: Return the new file descriptor (i.e., the second argument) " +"from ``os.dup2``. Previously, ``None`` was always returned." +msgstr "" + +#: ../../../build/NEWS:14744 +msgid "" +":issue:`32422`: ``functools.lru_cache`` uses less memory (3 words for each " +"cached key) and takes about 1/3 time for cyclic GC." +msgstr "" + +#: ../../../build/NEWS:14747 +msgid "" +":issue:`31721`: Prevent Python crash from happening when " +"Future._log_traceback is set to True manually. Now it can only be set to " +"False, or a ValueError is raised." +msgstr "" + +#: ../../../build/NEWS:14751 +msgid ":issue:`32415`: asyncio: Add Task.get_loop() and Future.get_loop()" +msgstr "" + +#: ../../../build/NEWS:14753 ../../../build/NEWS:18406 +msgid "" +":issue:`26133`: Don't unsubscribe signals in asyncio UNIX event loop on " +"interpreter shutdown." +msgstr "" + +#: ../../../build/NEWS:14756 +msgid "" +":issue:`32363`: Make asyncio.Task.set_exception() and set_result() raise " +"NotImplementedError. Task._step() and Future.__await__() raise proper " +"exceptions when they are in an invalid state, instead of raising an " +"AssertionError." +msgstr "" + +#: ../../../build/NEWS:14761 +msgid "" +":issue:`32357`: Optimize asyncio.iscoroutine() and loop.create_task() for " +"non-native coroutines (e.g. async/await compiled with Cython). " +"'loop.create_task(python_coroutine)' used to be 20% faster than " +"'loop.create_task(cython_coroutine)'. Now, the latter is as fast." +msgstr "" + +#: ../../../build/NEWS:14766 +msgid "" +":issue:`32356`: asyncio.transport.resume_reading() and pause_reading() are " +"now idempotent. New transport.is_reading() method is added." +msgstr "" + +#: ../../../build/NEWS:14769 +msgid ":issue:`32355`: Optimize asyncio.gather(); now up to 15% faster." +msgstr "" + +#: ../../../build/NEWS:14771 +msgid ":issue:`32351`: Use fastpath in asyncio.sleep if delay<0 (2x boost)" +msgstr "" + +#: ../../../build/NEWS:14773 +msgid "" +":issue:`32348`: Optimize asyncio.Future schedule/add/remove callback. The " +"optimization shows 3-6% performance improvements of async/await code." +msgstr "" + +#: ../../../build/NEWS:14776 +msgid "" +":issue:`32331`: Fix socket.settimeout() and socket.setblocking() to keep " +"socket.type as is. Fix socket.socket() constructor to reset any bit flags " +"applied to socket's type. This change only affects OSes that have " +"SOCK_NONBLOCK and/or SOCK_CLOEXEC." +msgstr "" + +#: ../../../build/NEWS:14781 +msgid "" +":issue:`32248`: Add :class:`importlib.abc.ResourceReader` as an ABC for " +"loaders to provide a unified API for reading resources contained within " +"packages. Also add :mod:`importlib.resources` as the port of " +"``importlib_resources``." +msgstr "" + +#: ../../../build/NEWS:14786 +msgid ":issue:`32311`: Implement asyncio.create_task(coro) shortcut" +msgstr "" + +#: ../../../build/NEWS:14788 +msgid "" +":issue:`32327`: Convert asyncio functions that were documented as coroutines" +" to coroutines. Affected functions: loop.sock_sendall, loop.sock_recv, " +"loop.sock_accept, loop.getaddrinfo, loop.getnameinfo." +msgstr "" + +#: ../../../build/NEWS:14792 ../../../build/NEWS:18412 +msgid "" +":issue:`32323`: :func:`urllib.parse.urlsplit()` does not convert zone-id " +"(scope) to lower case for scoped IPv6 addresses in hostnames now." +msgstr "" + +#: ../../../build/NEWS:14795 ../../../build/NEWS:18415 +msgid "" +":issue:`32302`: Fix bdist_wininst of distutils for CRT v142: it binary " +"compatible with CRT v140." +msgstr "" + +#: ../../../build/NEWS:14798 +msgid "" +":issue:`29711`: Fix ``stop_serving`` in asyncio proactor loop kill all " +"listening servers" +msgstr "" + +#: ../../../build/NEWS:14801 +msgid "" +":issue:`32308`: :func:`re.sub()` now replaces empty matches adjacent to a " +"previous non-empty match." +msgstr "" + +#: ../../../build/NEWS:14804 +msgid "" +":issue:`29970`: Abort asyncio SSLProtocol connection if handshake not " +"complete within 10s" +msgstr "" + +#: ../../../build/NEWS:14807 +msgid ":issue:`32314`: Implement asyncio.run()." +msgstr "" + +#: ../../../build/NEWS:14809 +msgid "" +":issue:`17852`: Revert incorrect fix based on misunderstanding of " +"_Py_PyAtExit() semantics." +msgstr "" + +#: ../../../build/NEWS:14812 +msgid "" +":issue:`32296`: Implement asyncio._get_running_loop() and get_event_loop() " +"in C. This makes them 4x faster." +msgstr "" + +#: ../../../build/NEWS:14815 +msgid "" +":issue:`32250`: Implement ``asyncio.current_task()`` and " +"``asyncio.all_tasks()``. Add helpers intended to be used by alternative task" +" implementations: ``asyncio._register_task``, ``asyncio._enter_task``, " +"``asyncio._leave_task`` and ``asyncio._unregister_task``. Deprecate " +"``asyncio.Task.current_task()`` and ``asyncio.Task.all_tasks()``." +msgstr "" + +#: ../../../build/NEWS:14821 ../../../build/NEWS:18418 +msgid "" +":issue:`32255`: A single empty field is now always quoted when written into " +"a CSV file. This allows to distinguish an empty row from a row consisting of" +" a single empty field. Patch by Licht Takeuchi." +msgstr "" + +#: ../../../build/NEWS:14825 ../../../build/NEWS:18422 +msgid "" +":issue:`32277`: Raise ``NotImplementedError`` instead of ``SystemError`` on " +"platforms where ``chmod(..., follow_symlinks=False)`` is not supported. " +"Patch by Anthony Sottile." +msgstr "" + +#: ../../../build/NEWS:14829 +msgid "" +":issue:`30050`: New argument warn_on_full_buffer to signal.set_wakeup_fd " +"lets you control whether Python prints a warning on stderr when the wakeup " +"fd buffer overflows." +msgstr "" + +#: ../../../build/NEWS:14833 +msgid "" +":issue:`29137`: The ``fpectl`` library has been removed. It was never " +"enabled by default, never worked correctly on x86-64, and it changed the " +"Python ABI in ways that caused unexpected breakage of C extensions." +msgstr "" + +#: ../../../build/NEWS:14837 +msgid ":issue:`32273`: Move asyncio.test_utils to test.test_asyncio." +msgstr "" + +#: ../../../build/NEWS:14839 +msgid ":issue:`32272`: Remove asyncio.async() function." +msgstr "" + +#: ../../../build/NEWS:14841 +msgid ":issue:`32269`: Add asyncio.get_running_loop() function." +msgstr "" + +#: ../../../build/NEWS:14843 +msgid "" +":issue:`32265`: All class and static methods of builtin types now are " +"correctly classified by inspect.classify_class_attrs() and grouped in pydoc " +"ouput. Added types.ClassMethodDescriptorType for unbound class methods of " +"builtin types." +msgstr "" + +#: ../../../build/NEWS:14848 +msgid "" +":issue:`32253`: Deprecate ``yield from lock``, ``await lock``, ``with (yield" +" from lock)`` and ``with await lock`` for asyncio synchronization " +"primitives." +msgstr "" + +#: ../../../build/NEWS:14852 +msgid "" +":issue:`22589`: Changed MIME type of .bmp from 'image/x-ms-bmp' to " +"'image/bmp'" +msgstr "" + +#: ../../../build/NEWS:14854 +msgid "" +":issue:`32193`: Convert asyncio to use *async/await* syntax. Old styled " +"``yield from`` is still supported too." +msgstr "" + +#: ../../../build/NEWS:14857 +msgid ":issue:`32206`: Add support to run modules with pdb" +msgstr "" + +#: ../../../build/NEWS:14859 +msgid "" +":issue:`32227`: ``functools.singledispatch`` now supports registering " +"implementations using type annotations." +msgstr "" + +#: ../../../build/NEWS:14862 +msgid "" +":issue:`15873`: Added new alternate constructors " +":meth:`datetime.datetime.fromisoformat`, :meth:`datetime.time.fromisoformat`" +" and :meth:`datetime.date.fromisoformat` as the inverse operation of each " +"classes's respective ``isoformat`` methods." +msgstr "" + +#: ../../../build/NEWS:14868 ../../../build/NEWS:18426 +msgid "" +":issue:`32199`: The getnode() ip getter now uses 'ip link' instead of 'ip " +"link list'." +msgstr "" + +#: ../../../build/NEWS:14871 +msgid ":issue:`32143`: os.statvfs() includes the f_fsid field from statvfs(2)" +msgstr "" + +#: ../../../build/NEWS:14873 +msgid "" +":issue:`26439`: Fix ctypes.util.find_library() for AIX by implementing " +"ctypes._aix.find_library() Patch by: Michael Felt" +msgstr "" + +#: ../../../build/NEWS:14876 +msgid "" +":issue:`31993`: The pickler now uses less memory when serializing large " +"bytes and str objects into a file. Pickles created with protocol 4 will " +"require less memory for unpickling large bytes and str objects." +msgstr "" + +#: ../../../build/NEWS:14880 ../../../build/NEWS:18429 +msgid "" +":issue:`27456`: Ensure TCP_NODELAY is set on Linux. Tests by Victor Stinner." +msgstr "" + +#: ../../../build/NEWS:14882 +msgid "" +":issue:`31778`: ast.literal_eval() is now more strict. Addition and " +"subtraction of arbitrary numbers no longer allowed." +msgstr "" + +#: ../../../build/NEWS:14885 ../../../build/NEWS:18440 +msgid "" +":issue:`31802`: Importing native path module (``posixpath``, ``ntpath``) now" +" works even if the ``os`` module still is not imported." +msgstr "" + +#: ../../../build/NEWS:14888 +msgid "" +":issue:`30241`: Add contextlib.AbstractAsyncContextManager. Patch by Jelle " +"Zijlstra." +msgstr "" + +#: ../../../build/NEWS:14891 +msgid "" +":issue:`31699`: Fix deadlocks in " +":class:`concurrent.futures.ProcessPoolExecutor` when task arguments or " +"results cause pickling or unpickling errors. This should make sure that " +"calls to the :class:`ProcessPoolExecutor` API always eventually return." +msgstr "" + +#: ../../../build/NEWS:14896 +msgid "" +":issue:`15216`: ``TextIOWrapper.reconfigure()`` supports changing " +"*encoding*, *errors*, and *newline*." +msgstr "" + +#: ../../../build/NEWS:14902 +msgid "" +":issue:`32418`: Add get_loop() method to Server and AbstractServer classes." +msgstr "" + +#: ../../../build/NEWS:14907 ../../../build/NEWS:18471 +msgid "" +":issue:`32252`: Fix faulthandler_suppress_crash_report() used to prevent " +"core dump files when testing crashes. getrlimit() returns zero on success." +msgstr "" + +#: ../../../build/NEWS:14910 +msgid "" +":issue:`32002`: Adjust C locale coercion testing for the empty locale and " +"POSIX locale cases to more readily adjust to platform dependent behaviour." +msgstr "" + +#: ../../../build/NEWS:14916 +msgid "" +":issue:`19764`: Implement support for `subprocess.Popen(close_fds=True)` on " +"Windows. Patch by Segev Finer." +msgstr "" + +#: ../../../build/NEWS:14922 ../../../build/NEWS:18552 +msgid "" +":issue:`24960`: 2to3 and lib2to3 can now read pickled grammar files using " +"pkgutil.get_data() rather than probing the filesystem. This lets 2to3 and " +"lib2to3 work when run from a zipfile." +msgstr "" + +#: ../../../build/NEWS:14929 +msgid "" +":issue:`32030`: Py_Initialize() doesn't reset the memory allocators to " +"default if the ``PYTHONMALLOC`` environment variable is not set." +msgstr "" + +#: ../../../build/NEWS:14932 ../../../build/NEWS:18562 +msgid "" +":issue:`29084`: Undocumented C API for OrderedDict has been excluded from " +"the limited C API. It was added by mistake and actually never worked in the " +"limited C API." +msgstr "" + +#: ../../../build/NEWS:14936 +msgid "" +":issue:`32264`: Moved the pygetopt.h header into internal/, since it has no " +"public APIs." +msgstr "" + +#: ../../../build/NEWS:14939 +msgid "" +":issue:`32241`: :c:func:`Py_SetProgramName` and :c:func:`Py_SetPythonHome` " +"now take the ``const wchar *`` arguments instead of ``wchar *``." +msgstr "" + +#: ../../../build/NEWS:14944 +msgid "Python 3.7.0 alpha 3" +msgstr "Python 3.7.0 alpha 3" + +#: ../../../build/NEWS:14946 ../../../build/NEWS:18579 +msgid "*Release date: 2017-12-05*" +msgstr "*发布日期: 2017-12-05*" + +#: ../../../build/NEWS:14951 ../../../build/NEWS:18584 +msgid "" +":issue:`32176`: co_flags.CO_NOFREE is now always set correctly by the code " +"object constructor based on freevars and cellvars, rather than needing to be" +" set correctly by the caller. This ensures it will be cleared automatically " +"when additional cell references are injected into a modified code object and" +" function." +msgstr "" + +#: ../../../build/NEWS:14957 +msgid "" +":issue:`10544`: Yield expressions are now deprecated in comprehensions and " +"generator expressions. They are still permitted in the definition of the " +"outermost iterable, as that is evaluated directly in the enclosing scope." +msgstr "" + +#: ../../../build/NEWS:14961 ../../../build/NEWS:18307 +msgid "" +":issue:`32137`: The repr of deeply nested dict now raises a RecursionError " +"instead of crashing due to a stack overflow." +msgstr "" + +#: ../../../build/NEWS:14964 +msgid "" +":issue:`32096`: Revert memory allocator changes in the C API: move " +"structures back from _PyRuntime to Objects/obmalloc.c. The memory allocators" +" are once again initialized statically, and so PyMem_RawMalloc() and " +"Py_DecodeLocale() can be called before _PyRuntime_Initialize()." +msgstr "" + +#: ../../../build/NEWS:14969 +msgid "" +":issue:`32043`: Add a new \"developer mode\": new \"-X dev\" command line " +"option to enable debug checks at runtime." +msgstr "" + +#: ../../../build/NEWS:14972 +msgid "" +":issue:`32023`: SyntaxError is now correctly raised when a generator " +"expression without parenthesis is used instead of an inheritance list in a " +"class definition. The duplication of the parentheses can be omitted only on " +"calls." +msgstr "" + +#: ../../../build/NEWS:14977 +msgid "" +":issue:`32012`: SyntaxError is now correctly raised when a generator " +"expression without parenthesis is passed as an argument, but followed by a " +"trailing comma. A generator expression always needs to be directly inside a " +"set of parentheses and cannot have a comma on either side." +msgstr "" + +#: ../../../build/NEWS:14982 +msgid "" +":issue:`28180`: A new internal ``_Py_SetLocaleFromEnv(category)`` helper " +"function has been added in order to improve the consistency of behaviour " +"across different ``libc`` implementations (e.g. Android doesn't support " +"setting the locale from the environment by default)." +msgstr "" + +#: ../../../build/NEWS:14987 ../../../build/NEWS:18590 +msgid "" +":issue:`31949`: Fixed several issues in printing tracebacks " +"(PyTraceBack_Print()). Setting sys.tracebacklimit to 0 or less now " +"suppresses printing tracebacks. Setting sys.tracebacklimit to None now " +"causes using the default limit. Setting sys.tracebacklimit to an integer " +"larger than LONG_MAX now means using the limit LONG_MAX rather than the " +"default limit. Fixed integer overflows in the case of more than ``2**31`` " +"traceback items on Windows. Fixed output errors handling." +msgstr "" + +#: ../../../build/NEWS:14995 ../../../build/NEWS:18598 +msgid "" +":issue:`30696`: Fix the interactive interpreter looping endlessly when no " +"memory." +msgstr "" + +#: ../../../build/NEWS:14998 ../../../build/NEWS:18601 +msgid "" +":issue:`20047`: Bytearray methods partition() and rpartition() now accept " +"only bytes-like objects as separator, as documented. In particular they now" +" raise TypeError rather of returning a bogus result when an integer is " +"passed as a separator." +msgstr "" + +#: ../../../build/NEWS:15003 ../../../build/NEWS:18609 +msgid "" +":issue:`21720`: BytesWarning no longer emitted when the *fromlist* argument " +"of ``__import__()`` or the ``__all__`` attribute of the module contain bytes" +" instances." +msgstr "" + +#: ../../../build/NEWS:15007 +msgid "" +":issue:`31845`: Environment variables are once more read correctly at " +"interpreter startup." +msgstr "" + +#: ../../../build/NEWS:15010 +msgid "" +":issue:`28936`: Ensure that lexically first syntax error involving a " +"parameter and ``global`` or ``nonlocal`` is detected first at a given scope." +" Patch by Ivan Levkivskyi." +msgstr "" + +#: ../../../build/NEWS:15014 ../../../build/NEWS:18613 +msgid "" +":issue:`31825`: Fixed OverflowError in the 'unicode-escape' codec and in " +"codecs.escape_decode() when decode an escaped non-ascii byte." +msgstr "" + +#: ../../../build/NEWS:15017 +msgid "" +":issue:`31618`: The per-frame tracing logic added in 3.7a1 has been altered " +"so that ``frame->f_lineno`` is updated before either ``\"line\"`` or " +"``\"opcode\"`` events are emitted. Previously, opcode events were emitted " +"first, and therefore would occasionally see stale line numbers on the frame." +" The behavior of this feature has changed slightly as a result: when both " +"``f_trace_lines`` and ``f_trace_opcodes`` are enabled, line events now occur" +" first." +msgstr "" + +#: ../../../build/NEWS:15025 ../../../build/NEWS:18616 +msgid "" +":issue:`28603`: Print the full context/cause chain of exceptions on " +"interpreter exit, even if an exception in the chain is unhashable or " +"compares equal to later ones. Patch by Zane Bitter." +msgstr "" + +#: ../../../build/NEWS:15029 ../../../build/NEWS:18620 +msgid "" +":issue:`31786`: Fix timeout rounding in the select module to round correctly" +" negative timeouts between -1.0 and 0.0. The functions now block waiting for" +" events as expected. Previously, the call was incorrectly non-blocking. " +"Patch by Pablo Galindo." +msgstr "" + +#: ../../../build/NEWS:15034 +msgid "" +":issue:`31781`: Prevent crashes when calling methods of an uninitialized " +"``zipimport.zipimporter`` object. Patch by Oren Milman." +msgstr "" + +#: ../../../build/NEWS:15037 +msgid "" +":issue:`30399`: Standard repr() of BaseException with a single argument no " +"longer contains redundant trailing comma." +msgstr "" + +#: ../../../build/NEWS:15040 ../../../build/NEWS:18628 +msgid "" +":issue:`31626`: Fixed a bug in debug memory allocator. There was a write to" +" freed memory after shrinking a memory block." +msgstr "" + +#: ../../../build/NEWS:15043 ../../../build/NEWS:18673 +msgid "" +":issue:`30817`: `PyErr_PrintEx()` clears now the ignored exception that may " +"be raised by `_PySys_SetObjectId()`, for example when no memory." +msgstr "" + +#: ../../../build/NEWS:15049 ../../../build/NEWS:18679 +msgid "" +":issue:`28556`: Two minor fixes for ``typing`` module: allow shallow copying" +" instances of generic classes, improve interaction of ``__init_subclass__`` " +"with generics. Original PRs by Ivan Levkivskyi." +msgstr "" + +#: ../../../build/NEWS:15053 +msgid "" +":issue:`32214`: PEP 557, Data Classes. Provides a decorator which adds " +"boilerplate methods to classes which use type annotations so specify fields." +msgstr "" + +#: ../../../build/NEWS:15057 ../../../build/NEWS:18683 +msgid "" +":issue:`27240`: The header folding algorithm for the new email policies has " +"been rewritten, which also fixes :issue:`30788`, :issue:`31831`, and " +":issue:`32182`. In particular, RFC2231 folding is now done correctly." +msgstr "" + +#: ../../../build/NEWS:15061 ../../../build/NEWS:18687 +msgid "" +":issue:`32186`: io.FileIO.readall() and io.FileIO.read() now release the GIL" +" when getting the file size. Fixed hang of all threads with inaccessible NFS" +" server. Patch by Nir Soffer." +msgstr "" + +#: ../../../build/NEWS:15065 +msgid ":issue:`32101`: Add :attr:`sys.flags.dev_mode` flag" +msgstr "" + +#: ../../../build/NEWS:15067 +msgid "" +":issue:`32154`: The ``asyncio.windows_utils.socketpair()`` function has been" +" removed: use directly :func:`socket.socketpair` which is available on all " +"platforms since Python 3.5 (before, it wasn't available on Windows). " +"``asyncio.windows_utils.socketpair()`` was just an alias to " +"``socket.socketpair`` on Python 3.5 and newer." +msgstr "" + +#: ../../../build/NEWS:15073 +msgid "" +":issue:`32089`: warnings: In development (-X dev) and debug mode (pydebug " +"build), use the \"default\" action for ResourceWarning, rather than the " +"\"always\" action, in the default warnings filters." +msgstr "" + +#: ../../../build/NEWS:15077 +msgid "" +":issue:`32107`: ``uuid.getnode()`` now preferentially returns universally " +"administered MAC addresses if available, over locally administered MAC " +"addresses. This makes a better guarantee for global uniqueness of UUIDs " +"returned from ``uuid.uuid1()``. If only locally administered MAC addresses " +"are available, the first such one found is returned." +msgstr "" + +#: ../../../build/NEWS:15083 +msgid "" +":issue:`23033`: Wildcard is now supported in hostname when it is one and " +"only character in the left most segment of hostname in second argument of " +":meth:`ssl.match_hostname`. Patch by Mandeep Singh." +msgstr "" + +#: ../../../build/NEWS:15087 ../../../build/NEWS:18691 +msgid "" +":issue:`12239`: Make :meth:`msilib.SummaryInformation.GetProperty` return " +"``None`` when the value of property is ``VT_EMPTY``. Initial patch by Mark " +"Mc Mahon." +msgstr "" + +#: ../../../build/NEWS:15091 +msgid "" +":issue:`28334`: Use :func:`os.path.expanduser` to find the ``~/.netrc`` file" +" in :class:`netrc.netrc`. If it does not exist, :exc:`FileNotFoundError` is" +" raised. Patch by Dimitri Merejkowsky." +msgstr "" + +#: ../../../build/NEWS:15095 +msgid "" +":issue:`32121`: Made ``tracemalloc.Traceback`` behave more like the " +"traceback module, sorting the frames from oldest to most recent. " +"``Traceback.format()`` now accepts negative *limit*, truncating the result " +"to the ``abs(limit)`` oldest frames. To get the old behaviour, one can use " +"the new *most_recent_first* argument to ``Traceback.format()``. (Patch by " +"Jesse Bakker.)" +msgstr "" + +#: ../../../build/NEWS:15102 ../../../build/NEWS:18695 +msgid "" +":issue:`31325`: Fix wrong usage of :func:`collections.namedtuple` in the " +":meth:`RobotFileParser.parse() ` " +"method. Initial patch by Robin Wellner." +msgstr "" + +#: ../../../build/NEWS:15106 ../../../build/NEWS:18699 +msgid "" +":issue:`12382`: :func:`msilib.OpenDatabase` now raises a better exception " +"message when it couldn't open or create an MSI file. Initial patch by " +"William Tisäter." +msgstr "" + +#: ../../../build/NEWS:15110 +msgid "" +":issue:`19610`: ``setup()`` now warns about invalid types for some fields. " +"The ``distutils.dist.Distribution`` class now warns when ``classifiers``, " +"``keywords`` and ``platforms`` fields are not specified as a list or a " +"string." +msgstr "" + +#: ../../../build/NEWS:15115 +msgid "" +":issue:`32071`: Added the ``-k`` command-line option to ``python -m " +"unittest`` to run only tests that match the given pattern(s)." +msgstr "" + +#: ../../../build/NEWS:15118 +msgid "" +":issue:`10049`: Added *nullcontext* no-op context manager to contextlib. " +"This provides a simpler and faster alternative to ExitStack() when handling " +"optional context managers." +msgstr "" + +#: ../../../build/NEWS:15122 +msgid "" +":issue:`28684`: The new test.support.skip_unless_bind_unix_socket() " +"decorator is used here to skip asyncio tests that fail because the platform " +"lacks a functional bind() function for unix domain sockets (as it is the " +"case for non root users on the recent Android versions that run now SELinux " +"in enforcing mode)." +msgstr "" + +#: ../../../build/NEWS:15128 ../../../build/NEWS:18703 +msgid "" +":issue:`32110`: ``codecs.StreamReader.read(n)`` now returns not more than " +"*n* characters/bytes for non-negative *n*. This makes it compatible with " +"``read()`` methods of other file-like objects." +msgstr "" + +#: ../../../build/NEWS:15132 +msgid "" +":issue:`27535`: The warnings module doesn't leak memory anymore in the " +"hidden warnings registry for the \"ignore\" action of warnings filters. " +"warn_explicit() function doesn't add the warning key to the registry anymore" +" for the \"ignore\" action." +msgstr "" + +#: ../../../build/NEWS:15137 +msgid "" +":issue:`32088`: warnings: When Python is build is debug mode " +"(``Py_DEBUG``), :exc:`DeprecationWarning`, :exc:`PendingDeprecationWarning` " +"and :exc:`ImportWarning` warnings are now displayed by default." +msgstr "" + +#: ../../../build/NEWS:15141 +msgid "" +":issue:`1647489`: Fixed searching regular expression patterns that could " +"match an empty string. Non-empty string can now be correctly found after " +"matching an empty string." +msgstr "" + +#: ../../../build/NEWS:15145 +msgid "" +":issue:`25054`: Added support of splitting on a pattern that could match an " +"empty string." +msgstr "" + +#: ../../../build/NEWS:15148 ../../../build/NEWS:18707 +#: ../../../build/NEWS:23385 +msgid "" +":issue:`32072`: Fixed issues with binary plists: Fixed saving bytearrays. " +"Identical objects will be saved only once. Equal references will be load as " +"identical objects. Added support for saving and loading recursive data " +"structures." +msgstr "" + +#: ../../../build/NEWS:15153 +msgid "" +":issue:`32069`: Drop legacy SSL transport from asyncio, ssl.MemoryBIO is " +"always used anyway." +msgstr "" + +#: ../../../build/NEWS:15156 +msgid "" +":issue:`32066`: asyncio: Support pathlib.Path in create_unix_connection; " +"sock arg should be optional" +msgstr "" + +#: ../../../build/NEWS:15159 +msgid "" +":issue:`32046`: Updates 2to3 to convert from operator.isCallable(obj) to " +"callable(obj). Patch by Dong-hee Na." +msgstr "" + +#: ../../../build/NEWS:15162 +msgid "" +":issue:`32018`: inspect.signature should follow :pep:`8`, if the parameter " +"has an annotation and a default value. Patch by Dong-hee Na." +msgstr "" + +#: ../../../build/NEWS:15165 +msgid ":issue:`32025`: Add time.thread_time() and time.thread_time_ns()" +msgstr "" + +#: ../../../build/NEWS:15167 +msgid "" +":issue:`32037`: Integers that fit in a signed 32-bit integer will be now " +"pickled with protocol 0 using the INT opcode. This will decrease the size " +"of a pickle, speed up pickling and unpickling, and make these integers be " +"unpickled as int instances in Python 2." +msgstr "" + +#: ../../../build/NEWS:15172 ../../../build/NEWS:18712 +msgid "" +":issue:`32034`: Make asyncio.IncompleteReadError and LimitOverrunError " +"pickleable." +msgstr "" + +#: ../../../build/NEWS:15175 ../../../build/NEWS:18715 +msgid "" +":issue:`32015`: Fixed the looping of asyncio in the case of reconnection the" +" socket during waiting async read/write from/to the socket." +msgstr "" + +#: ../../../build/NEWS:15178 ../../../build/NEWS:18718 +msgid "" +":issue:`32011`: Restored support of loading marshal files with the " +"TYPE_INT64 code. These files can be produced in Python 2.7." +msgstr "" + +#: ../../../build/NEWS:15181 +msgid "" +":issue:`28369`: Enhance add_reader/writer check that socket is not used by " +"some transport. Before, only cases when add_reader/writer were called with " +"an int FD were supported. Now the check is implemented correctly for all " +"file-like objects." +msgstr "" + +#: ../../../build/NEWS:15186 +msgid "" +":issue:`31976`: Fix race condition when flushing a file is slow, which can " +"cause a segfault if closing the file from another thread." +msgstr "" + +#: ../../../build/NEWS:15189 +msgid "" +":issue:`31985`: Formally deprecated aifc.openfp, sunau.openfp, and " +"wave.openfp. Since change 7bc817d5ba917528e8bd07ec461c635291e7b06a in 1993, " +"openfp in each of the three modules had been pointing to that module's open " +"function as a matter of backwards compatibility, though it had been both " +"untested and undocumented." +msgstr "" + +#: ../../../build/NEWS:15195 +msgid "" +":issue:`21862`: cProfile command line now accepts `-m module_name` as an " +"alternative to script path. Patch by Sanyam Khurana." +msgstr "" + +#: ../../../build/NEWS:15198 ../../../build/NEWS:18721 +msgid ":issue:`31970`: Reduce performance overhead of asyncio debug mode." +msgstr "" + +#: ../../../build/NEWS:15200 +msgid "" +":issue:`31843`: *database* argument of sqlite3.connect() now accepts a " +":term:`path-like object`, instead of just a string." +msgstr "" + +#: ../../../build/NEWS:15203 +msgid "" +":issue:`31945`: Add Configurable *blocksize* to ``HTTPConnection`` and " +"``HTTPSConnection`` for improved upload throughput. Patch by Nir Soffer." +msgstr "" + +#: ../../../build/NEWS:15206 +msgid "" +":issue:`31943`: Add a ``cancelled()`` method to :class:`asyncio.Handle`. " +"Patch by Marat Sharafutdinov." +msgstr "" + +#: ../../../build/NEWS:15209 ../../../build/NEWS:18723 +msgid "" +":issue:`9678`: Fixed determining the MAC address in the uuid module: Using " +"ifconfig on NetBSD and OpenBSD. Using arp on Linux, FreeBSD, NetBSD and " +"OpenBSD. Based on patch by Takayuki Shimizukawa." +msgstr "" + +#: ../../../build/NEWS:15213 ../../../build/NEWS:18727 +msgid ":issue:`30057`: Fix potential missed signal in signal.signal()." +msgstr "" + +#: ../../../build/NEWS:15215 ../../../build/NEWS:18729 +msgid "" +":issue:`31933`: Fix Blake2 params leaf_size and node_offset on big endian " +"platforms. Patch by Jack O'Connor." +msgstr "" + +#: ../../../build/NEWS:15218 +msgid "" +":issue:`21423`: Add an initializer argument to {Process,Thread}PoolExecutor" +msgstr "" + +#: ../../../build/NEWS:15220 ../../../build/NEWS:18732 +msgid "" +":issue:`31927`: Fixed compilation of the socket module on NetBSD 8. Fixed " +"assertion failure or reading arbitrary data when parse a AF_BLUETOOTH " +"address on NetBSD and DragonFly BSD." +msgstr "" + +#: ../../../build/NEWS:15224 ../../../build/NEWS:18736 +msgid "" +":issue:`27666`: Fixed stack corruption in curses.box() and " +"curses.ungetmouse() when the size of types chtype or mmask_t is less than " +"the size of C long. curses.box() now accepts characters as arguments. Based" +" on patch by Steve Fink." +msgstr "" + +#: ../../../build/NEWS:15229 +msgid "" +":issue:`31917`: Add 3 new clock identifiers: :data:`time.CLOCK_BOOTTIME`, " +":data:`time.CLOCK_PROF` and :data:`time.CLOCK_UPTIME`." +msgstr "" + +#: ../../../build/NEWS:15232 ../../../build/NEWS:18741 +msgid "" +":issue:`31897`: plistlib now catches more errors when read binary plists and" +" raises InvalidFileException instead of unexpected exceptions." +msgstr "" + +#: ../../../build/NEWS:15235 ../../../build/NEWS:18744 +msgid "" +":issue:`25720`: Fix the method for checking pad state of curses WINDOW. " +"Patch by Masayuki Yamamoto." +msgstr "" + +#: ../../../build/NEWS:15238 ../../../build/NEWS:18747 +msgid "" +":issue:`31893`: Fixed the layout of the kqueue_event structure on OpenBSD " +"and NetBSD. Fixed the comparison of the kqueue_event objects." +msgstr "" + +#: ../../../build/NEWS:15241 ../../../build/NEWS:18750 +msgid ":issue:`31891`: Fixed building the curses module on NetBSD." +msgstr "" + +#: ../../../build/NEWS:15243 +msgid "" +":issue:`31884`: added required constants to subprocess module for setting " +"priority on windows" +msgstr "" + +#: ../../../build/NEWS:15246 +msgid "" +":issue:`28281`: Remove year (1-9999) limits on the Calendar.weekday() " +"function. Patch by Mark Gollahon." +msgstr "" + +#: ../../../build/NEWS:15249 +msgid "" +":issue:`31702`: crypt.mksalt() now allows to specify the number of rounds " +"for SHA-256 and SHA-512 hashing." +msgstr "" + +#: ../../../build/NEWS:15252 +msgid "" +":issue:`30639`: :func:`inspect.getfile` no longer computes the repr of " +"unknown objects to display in an error message, to protect against badly " +"behaved custom reprs." +msgstr "" + +#: ../../../build/NEWS:15256 +msgid "" +":issue:`30768`: Fix the pthread+semaphore implementation of " +"PyThread_acquire_lock_timed() when called with timeout > 0 and intr_flag=0: " +"recompute the timeout if sem_timedwait() is interrupted by a signal (EINTR)." +" See also the :pep:`475`." +msgstr "" + +#: ../../../build/NEWS:15261 +msgid ":issue:`31854`: Add ``mmap.ACCESS_DEFAULT`` constant." +msgstr "" + +#: ../../../build/NEWS:15263 +msgid "" +":issue:`31834`: Use optimized code for BLAKE2 only with SSSE3+. The pure " +"SSE2 implementation is slower than the pure C reference implementation." +msgstr "" + +#: ../../../build/NEWS:15266 +msgid "" +":issue:`28292`: Calendar.itermonthdates() will now consistently raise an " +"exception when a date falls outside of the 0001-01-01 through 9999-12-31 " +"range. To support applications that cannot tolerate such exceptions, the " +"new methods itermonthdays3() and itermonthdays4() are added. The new " +"methods return tuples and are not restricted by the range supported by " +"datetime.date." +msgstr "" + +#: ../../../build/NEWS:15273 +msgid "" +":issue:`28564`: The shutil.rmtree() function has been sped up to 20--40%. " +"This was done using the os.scandir() function." +msgstr "" + +#: ../../../build/NEWS:15276 ../../../build/NEWS:18752 +msgid "" +":issue:`28416`: Instances of pickle.Pickler subclass with the " +"persistent_id() method and pickle.Unpickler subclass with the " +"persistent_load() method no longer create reference cycles." +msgstr "" + +#: ../../../build/NEWS:15280 +msgid "" +":issue:`31653`: Don't release the GIL if we can acquire a multiprocessing " +"semaphore immediately." +msgstr "" + +#: ../../../build/NEWS:15283 ../../../build/NEWS:18756 +msgid "" +":issue:`28326`: Fix multiprocessing.Process when stdout and/or stderr is " +"closed or None." +msgstr "" + +#: ../../../build/NEWS:15286 +msgid "" +":issue:`20825`: Add `subnet_of` and `superset_of` containment tests to " +":class:`ipaddress.IPv6Network` and :class:`ipaddress.IPv4Network`. Patch by " +"Michel Albert and Cheryl Sabella." +msgstr "" + +#: ../../../build/NEWS:15290 +msgid "" +":issue:`31827`: Remove the os.stat_float_times() function. It was introduced" +" in Python 2.3 for backward compatibility with Python 2.2, and was " +"deprecated since Python 3.1." +msgstr "" + +#: ../../../build/NEWS:15294 +msgid "" +":issue:`31756`: Add a ``subprocess.Popen(text=False)`` keyword argument to " +"`subprocess` functions to be more explicit about when the library should " +"attempt to decode outputs into text. Patch by Andrew Clegg." +msgstr "" + +#: ../../../build/NEWS:15298 +msgid ":issue:`31819`: Add AbstractEventLoop.sock_recv_into()." +msgstr "" + +#: ../../../build/NEWS:15300 ../../../build/NEWS:18078 +#: ../../../build/NEWS:18759 +msgid "" +":issue:`31457`: If nested log adapters are used, the inner ``process()`` " +"methods are no longer omitted." +msgstr "" + +#: ../../../build/NEWS:15303 ../../../build/NEWS:18762 +msgid "" +":issue:`31457`: The ``manager`` property on LoggerAdapter objects is now " +"properly settable." +msgstr "" + +#: ../../../build/NEWS:15306 ../../../build/NEWS:18765 +msgid "" +":issue:`31806`: Fix timeout rounding in time.sleep(), " +"threading.Lock.acquire() and socket.socket.settimeout() to round correctly " +"negative timeouts between -1.0 and 0.0. The functions now block waiting for " +"events as expected. Previously, the call was incorrectly non-blocking. Patch" +" by Pablo Galindo." +msgstr "" + +#: ../../../build/NEWS:15312 +msgid "" +":issue:`31803`: time.clock() and time.get_clock_info('clock') now emit a " +"DeprecationWarning warning." +msgstr "" + +#: ../../../build/NEWS:15315 +msgid "" +":issue:`31800`: Extended support for parsing UTC offsets. strptime '%z' can " +"now parse the output generated by datetime.isoformat, including seconds and " +"microseconds." +msgstr "" + +#: ../../../build/NEWS:15319 ../../../build/NEWS:18771 +msgid "" +":issue:`28603`: traceback: Fix a TypeError that occurred during printing of " +"exception tracebacks when either the current exception or an exception in " +"its context/cause chain is unhashable. Patch by Zane Bitter." +msgstr "" + +#: ../../../build/NEWS:15323 +msgid "" +":issue:`30541`: Add new function to seal a mock and prevent the " +"automatically creation of child mocks. Patch by Mario Corchero." +msgstr "" + +#: ../../../build/NEWS:15326 +msgid "" +":issue:`31784`: Implement the :pep:`564`, add new 6 new functions with " +"nanosecond resolution to the :mod:`time` module: " +":func:`~time.clock_gettime_ns`, :func:`~time.clock_settime_ns`, " +":func:`~time.monotonic_ns`, :func:`~time.perf_counter_ns`, " +":func:`~time.process_time_ns`, :func:`~time.time_ns`." +msgstr "" + +#: ../../../build/NEWS:15332 +msgid "" +":issue:`30143`: 2to3 now generates a code that uses abstract collection " +"classes from collections.abc rather than collections." +msgstr "" + +#: ../../../build/NEWS:15335 ../../../build/NEWS:18777 +msgid "" +":issue:`31770`: Prevent a crash when calling the ``__init__()`` method of a " +"``sqlite3.Cursor`` object more than once. Patch by Oren Milman." +msgstr "" + +#: ../../../build/NEWS:15338 ../../../build/NEWS:18784 +msgid "" +":issue:`31764`: Prevent a crash in ``sqlite3.Cursor.close()`` in case the " +"``Cursor`` object is uninitialized. Patch by Oren Milman." +msgstr "" + +#: ../../../build/NEWS:15341 ../../../build/NEWS:18787 +msgid "" +":issue:`31752`: Fix possible crash in timedelta constructor called with " +"custom integers." +msgstr "" + +#: ../../../build/NEWS:15344 ../../../build/NEWS:18796 +msgid "" +":issue:`31620`: an empty asyncio.Queue now doesn't leak memory when " +"queue.get pollers timeout" +msgstr "" + +#: ../../../build/NEWS:15347 +msgid "" +":issue:`31690`: Allow the flags re.ASCII, re.LOCALE, and re.UNICODE to be " +"used as group flags for regular expressions." +msgstr "" + +#: ../../../build/NEWS:15350 +msgid "" +":issue:`30349`: FutureWarning is now emitted if a regular expression " +"contains character set constructs that will change semantically in the " +"future (nested sets and set operations)." +msgstr "" + +#: ../../../build/NEWS:15354 +msgid "" +":issue:`31664`: Added support for the Blowfish hashing in the crypt module." +msgstr "" + +#: ../../../build/NEWS:15356 ../../../build/NEWS:18799 +msgid "" +":issue:`31632`: Fix method set_protocol() of class _SSLProtocolTransport in " +"asyncio module. This method was previously modifying a wrong reference to " +"the protocol." +msgstr "" + +#: ../../../build/NEWS:15360 ../../../build/NEWS:18810 +msgid "" +":issue:`15037`: Added a workaround for getkey() in curses for ncurses 5.7 " +"and earlier." +msgstr "" + +#: ../../../build/NEWS:15363 +msgid "" +":issue:`31307`: Allow use of bytes objects for arguments to " +":meth:`configparser.ConfigParser.read`. Patch by Vincent Michel." +msgstr "" + +#: ../../../build/NEWS:15366 ../../../build/NEWS:18830 +msgid "" +":issue:`31334`: Fix ``poll.poll([timeout])`` in the ``select`` module for " +"arbitrary negative timeouts on all OSes where it can only be a non-negative " +"integer or -1. Patch by Riccardo Coccioli." +msgstr "" + +#: ../../../build/NEWS:15370 ../../../build/NEWS:18834 +msgid "" +":issue:`31310`: multiprocessing's semaphore tracker should be launched again" +" if crashed." +msgstr "" + +#: ../../../build/NEWS:15373 ../../../build/NEWS:18837 +msgid "" +":issue:`31308`: Make multiprocessing's forkserver process immune to Ctrl-C " +"and other user interruptions. If it crashes, restart it when necessary." +msgstr "" + +#: ../../../build/NEWS:15376 +msgid "" +":issue:`31245`: Added support for AF_UNIX socket in asyncio " +"`create_datagram_endpoint`." +msgstr "" + +#: ../../../build/NEWS:15379 +msgid "" +":issue:`30553`: Add HTTP/2 status code 421 (Misdirected Request) to " +":class:`http.HTTPStatus`. Patch by Vitor Pereira." +msgstr "" + +#: ../../../build/NEWS:15385 ../../../build/NEWS:18843 +msgid "" +":issue:`32105`: Added asyncio.BaseEventLoop.connect_accepted_socket " +"versionadded marker." +msgstr "" + +#: ../../../build/NEWS:15391 ../../../build/NEWS:18856 +msgid "" +":issue:`31380`: Skip test_httpservers test_undecodable_file on macOS: fails " +"on APFS." +msgstr "" + +#: ../../../build/NEWS:15394 ../../../build/NEWS:18859 +msgid "" +":issue:`31705`: Skip test_socket.test_sha256() on Linux kernel older than " +"4.5. The test fails with ENOKEY on kernel 3.10 (on ppc64le). A fix was " +"merged into the kernel 4.5." +msgstr "" + +#: ../../../build/NEWS:15398 +msgid "" +":issue:`32138`: Skip on Android test_faulthandler tests that raise SIGSEGV " +"and remove the test.support.requires_android_level decorator." +msgstr "" + +#: ../../../build/NEWS:15401 +msgid "" +":issue:`32136`: The runtime embedding tests have been split out from " +"``Lib/test/test_capi.py`` into a new ``Lib/test/test_embed.py`` file." +msgstr "" + +#: ../../../build/NEWS:15404 +msgid "" +":issue:`28668`: test.support.requires_multiprocessing_queue is removed. Skip" +" tests with test.support.import_module('multiprocessing.synchronize') " +"instead when the semaphore implementation is broken or missing." +msgstr "" + +#: ../../../build/NEWS:15408 +msgid "" +":issue:`32126`: Skip test_get_event_loop_new_process in " +"test.test_asyncio.test_events when sem_open() is not functional." +msgstr "" + +#: ../../../build/NEWS:15411 ../../../build/NEWS:18863 +msgid "" +":issue:`31174`: Fix test_tools.test_unparse: DirectoryTestCase now stores " +"the names sample to always test the same files. It prevents false alarms " +"when hunting reference leaks." +msgstr "" + +#: ../../../build/NEWS:15418 +msgid "" +":issue:`28538`: Revert the previous changes, the if_nameindex structure is " +"defined by Unified Headers." +msgstr "" + +#: ../../../build/NEWS:15421 +msgid "" +":issue:`28762`: Revert the last commit, the F_LOCK macro is defined by " +"Android Unified Headers." +msgstr "" + +#: ../../../build/NEWS:15424 +msgid "" +":issue:`29040`: Support building Android with Unified Headers. The first NDK" +" release to support Unified Headers is android-ndk-r14." +msgstr "" + +#: ../../../build/NEWS:15427 ../../../build/NEWS:18873 +msgid "" +":issue:`32059`: ``detect_modules()`` in ``setup.py`` now also searches the " +"sysroot paths when cross-compiling." +msgstr "" + +#: ../../../build/NEWS:15430 ../../../build/NEWS:18876 +msgid "" +":issue:`31957`: Fixes Windows SDK version detection when building for " +"Windows." +msgstr "" + +#: ../../../build/NEWS:15432 ../../../build/NEWS:18878 +msgid ":issue:`31609`: Fixes quotes in PCbuild/clean.bat" +msgstr "" + +#: ../../../build/NEWS:15434 ../../../build/NEWS:18880 +msgid "" +":issue:`31934`: Abort the build when building out of a not clean source " +"tree." +msgstr "" + +#: ../../../build/NEWS:15436 ../../../build/NEWS:18882 +msgid "" +":issue:`31926`: Fixed Argument Clinic sometimes causing compilation errors " +"when there was more than one function and/or method in a .c file with the " +"same name." +msgstr "" + +#: ../../../build/NEWS:15440 ../../../build/NEWS:18886 +msgid ":issue:`28791`: Update Windows builds to use SQLite 3.21.0." +msgstr "" + +#: ../../../build/NEWS:15442 ../../../build/NEWS:18888 +msgid ":issue:`28791`: Update OS X installer to use SQLite 3.21.0." +msgstr "" + +#: ../../../build/NEWS:15444 +msgid ":issue:`28643`: Record profile-opt build progress with stamp files." +msgstr "" + +#: ../../../build/NEWS:15446 +msgid ":issue:`31866`: Finish removing support for AtheOS." +msgstr "" + +#: ../../../build/NEWS:15451 ../../../build/NEWS:18898 +msgid "" +":issue:`1102`: Return ``None`` when ``View.Fetch()`` returns " +"``ERROR_NO_MORE_ITEMS`` instead of raising ``MSIError``. Initial patch by " +"Anthony Tuininga." +msgstr "" + +#: ../../../build/NEWS:15455 ../../../build/NEWS:18902 +msgid ":issue:`31944`: Fixes Modify button in Apps and Features dialog." +msgstr "" + +#: ../../../build/NEWS:15457 +msgid "" +":issue:`20486`: Implement the ``Database.Close()`` method to help closing " +"MSI database objects." +msgstr "" + +#: ../../../build/NEWS:15460 +msgid "" +":issue:`31857`: Make the behavior of USE_STACKCHECK deterministic in a " +"multi-threaded environment." +msgstr "" + +#: ../../../build/NEWS:15466 ../../../build/NEWS:18907 +msgid ":issue:`31392`: Update macOS installer to use OpenSSL 1.0.2m" +msgstr "" + +#: ../../../build/NEWS:15471 ../../../build/NEWS:18912 +msgid "" +":issue:`32207`: Improve tk event exception tracebacks in IDLE. When tk event" +" handling is driven by IDLE's run loop, a confusing and distracting " +"queue.EMPTY traceback context is no longer added to tk event exception " +"tracebacks. The traceback is now the same as when event handling is driven " +"by user code. Patch based on a suggestion by Serhiy Storchaka." +msgstr "" + +#: ../../../build/NEWS:15477 ../../../build/NEWS:18918 +msgid "" +":issue:`32164`: Delete unused file idlelib/tabbedpages.py. Use of " +"TabbedPageSet in configdialog was replaced by ttk.Notebook." +msgstr "" + +#: ../../../build/NEWS:15480 ../../../build/NEWS:18921 +msgid "" +":issue:`32100`: IDLE: Fix old and new bugs in pathbrowser; improve tests. " +"Patch mostly by Cheryl Sabella." +msgstr "" + +#: ../../../build/NEWS:15483 ../../../build/NEWS:18924 +msgid "" +":issue:`31858`: IDLE -- Restrict shell prompt manipulation to the shell. " +"Editor and output windows only see an empty last prompt line. This " +"simplifies the code and fixes a minor bug when newline is inserted. Sys.ps1," +" if present, is read on Shell start-up, but is not set or changed." +msgstr "" + +#: ../../../build/NEWS:15488 ../../../build/NEWS:18929 +msgid "" +":issue:`31860`: The font sample in the IDLE configuration dialog is now " +"editable. Changes persist while IDLE remains open" +msgstr "" + +#: ../../../build/NEWS:15491 ../../../build/NEWS:18932 +msgid "" +":issue:`31836`: Test_code_module now passes if run after test_idle, which " +"sets ps1. The code module uses sys.ps1 if present or sets it to '>>> ' if " +"not. Test_code_module now properly tests both behaviors. Ditto for ps2." +msgstr "" + +#: ../../../build/NEWS:15495 ../../../build/NEWS:18936 +msgid "" +":issue:`28603`: Fix a TypeError that caused a shell restart when printing a " +"traceback that includes an exception that is unhashable. Patch by Zane " +"Bitter." +msgstr "" + +#: ../../../build/NEWS:15499 +msgid "" +":issue:`13802`: Use non-Latin characters in the IDLE's Font settings sample." +" Even if one selects a font that defines a limited subset of the unicode " +"Basic Multilingual Plane, tcl/tk will use other fonts that define a " +"character. The expanded example give users of non-Latin characters a better " +"idea of what they might see in IDLE's shell and editors. To make room for " +"the expanded sample, frames on the Font tab are re-arranged. The Font/Tabs " +"help explains a bit about the additions." +msgstr "" + +#: ../../../build/NEWS:15510 +msgid "" +":issue:`32159`: Remove CVS and Subversion tools: remove svneol.py and " +"treesync.py scripts. CPython migrated from CVS to Subversion, to Mercurial, " +"and then to Git. CVS and Subversion are no longer used to develop CPython." +msgstr "" + +#: ../../../build/NEWS:15515 ../../../build/NEWS:18975 +msgid "" +":issue:`30722`: Make redemo work with Python 3.6 and newer versions. Also, " +"remove the ``LOCALE`` option since it doesn't work with string patterns in " +"Python 3. Patch by Christoph Sarnowski." +msgstr "" + +#: ../../../build/NEWS:15522 ../../../build/NEWS:18982 +msgid "" +":issue:`20891`: Fix PyGILState_Ensure(). When PyGILState_Ensure() is called " +"in a non-Python thread before PyEval_InitThreads(), only call " +"PyEval_InitThreads() after calling PyThreadState_New() to fix a crash." +msgstr "" + +#: ../../../build/NEWS:15526 +msgid "" +":issue:`32125`: The ``Py_UseClassExceptionsFlag`` flag has been removed. It " +"was deprecated and wasn't used anymore since Python 2.0." +msgstr "" + +#: ../../../build/NEWS:15529 +msgid "" +":issue:`25612`: Move the current exception state from the frame object to " +"the co-routine. This simplifies the interpreter and fixes a couple of " +"obscure bugs caused by having swap exception state when entering or exiting " +"a generator." +msgstr "" + +#: ../../../build/NEWS:15534 +msgid "" +":issue:`23699`: Add Py_RETURN_RICHCOMPARE macro to reduce boilerplate code " +"in rich comparison functions." +msgstr "" + +#: ../../../build/NEWS:15537 ../../../build/NEWS:18989 +msgid "" +":issue:`30697`: The `PyExc_RecursionErrorInst` singleton is removed and " +"`PyErr_NormalizeException()` does not use it anymore. This singleton is " +"persistent and its members being never cleared may cause a segfault during " +"finalization of the interpreter. See also :issue:`22898`." +msgstr "" + +#: ../../../build/NEWS:15544 +msgid "Python 3.7.0 alpha 2" +msgstr "Python 3.7.0 alpha 2" + +#: ../../../build/NEWS:15546 +msgid "*Release date: 2017-10-16*" +msgstr "*发布日期: 2017-10-16*" + +#: ../../../build/NEWS:15551 +msgid "" +":issue:`31558`: ``gc.freeze()`` is a new API that allows for moving all " +"objects currently tracked by the garbage collector to a permanent " +"generation, effectively removing them from future collection events. This " +"can be used to protect those objects from having their PyGC_Head mutated. In" +" effect, this enables great copy-on-write stability at fork()." +msgstr "" + +#: ../../../build/NEWS:15557 ../../../build/NEWS:18625 +msgid "" +":issue:`31642`: Restored blocking \"from package import module\" by setting " +"sys.modules[\"package.module\"] to None." +msgstr "" + +#: ../../../build/NEWS:15560 +msgid "" +":issue:`31708`: Allow use of asynchronous generator expressions in " +"synchronous functions." +msgstr "" + +#: ../../../build/NEWS:15563 +msgid ":issue:`31709`: Drop support of asynchronous __aiter__." +msgstr "" + +#: ../../../build/NEWS:15565 +msgid "" +":issue:`30404`: The -u option now makes the stdout and stderr streams " +"unbuffered rather than line-buffered." +msgstr "" + +#: ../../../build/NEWS:15568 ../../../build/NEWS:18631 +msgid "" +":issue:`31619`: Fixed a ValueError when convert a string with large number " +"of underscores to integer with binary base." +msgstr "" + +#: ../../../build/NEWS:15571 +msgid "" +":issue:`31602`: Fix an assertion failure in `zipimporter.get_source()` in " +"case of a bad `zlib.decompress()`. Patch by Oren Milman." +msgstr "" + +#: ../../../build/NEWS:15574 ../../../build/NEWS:18634 +msgid "" +":issue:`31592`: Fixed an assertion failure in Python parser in case of a bad" +" `unicodedata.normalize()`. Patch by Oren Milman." +msgstr "" + +#: ../../../build/NEWS:15577 ../../../build/NEWS:18637 +msgid "" +":issue:`31588`: Raise a `TypeError` with a helpful error message when class " +"creation fails due to a metaclass with a bad ``__prepare__()`` method. Patch" +" by Oren Milman." +msgstr "" + +#: ../../../build/NEWS:15581 +msgid "" +":issue:`31574`: Importlib was instrumented with two dtrace probes to profile" +" import timing." +msgstr "" + +#: ../../../build/NEWS:15584 ../../../build/NEWS:18641 +msgid "" +":issue:`31566`: Fix an assertion failure in `_warnings.warn()` in case of a " +"bad ``__name__`` global. Patch by Oren Milman." +msgstr "" + +#: ../../../build/NEWS:15587 +msgid "" +":issue:`31506`: Improved the error message logic for object.__new__ and " +"object.__init__." +msgstr "" + +#: ../../../build/NEWS:15590 ../../../build/NEWS:18644 +msgid "" +":issue:`31505`: Fix an assertion failure in `json`, in case " +"`_json.make_encoder()` received a bad `encoder()` argument. Patch by Oren " +"Milman." +msgstr "" + +#: ../../../build/NEWS:15594 ../../../build/NEWS:18648 +msgid "" +":issue:`31492`: Fix assertion failures in case of failing to import from a " +"module with a bad ``__name__`` attribute, and in case of failing to access " +"an attribute of such a module. Patch by Oren Milman." +msgstr "" + +#: ../../../build/NEWS:15598 ../../../build/NEWS:18656 +msgid "" +":issue:`31478`: Fix an assertion failure in `_random.Random.seed()` in case " +"the argument has a bad ``__abs__()`` method. Patch by Oren Milman." +msgstr "" + +#: ../../../build/NEWS:15601 +msgid "" +":issue:`31336`: Speed up class creation by 10-20% by reducing the overhead " +"in the necessary special method lookups. Patch by Stefan Behnel." +msgstr "" + +#: ../../../build/NEWS:15604 +msgid "" +":issue:`31415`: Add ``-X importtime`` option to show how long each import " +"takes. It can be used to optimize application's startup time. Support the " +":envvar:`PYTHONPROFILEIMPORTTIME` as an equivalent way to enable this." +msgstr "" + +#: ../../../build/NEWS:15608 +msgid ":issue:`31410`: Optimized calling wrapper and classmethod descriptors." +msgstr "" + +#: ../../../build/NEWS:15610 +msgid "" +":issue:`31353`: :pep:`553` - Add a new built-in called ``breakpoint()`` " +"which calls ``sys.breakpointhook()``. By default this imports ``pdb`` and " +"calls ``pdb.set_trace()``, but users may override ``sys.breakpointhook()`` " +"to call whatever debugger they want. The original value of the hook is " +"saved in ``sys.__breakpointhook__``." +msgstr "" + +#: ../../../build/NEWS:15616 +msgid "" +":issue:`17852`: Maintain a list of open buffered files, flush them before " +"exiting the interpreter. Based on a patch from Armin Rigo." +msgstr "" + +#: ../../../build/NEWS:15619 ../../../build/NEWS:18659 +msgid "" +":issue:`31315`: Fix an assertion failure in imp.create_dynamic(), when " +"spec.name is not a string. Patch by Oren Milman." +msgstr "" + +#: ../../../build/NEWS:15622 ../../../build/NEWS:18662 +msgid "" +":issue:`31311`: Fix a crash in the ``__setstate__()`` method of " +"`ctypes._CData`, in case of a bad ``__dict__``. Patch by Oren Milman." +msgstr "" + +#: ../../../build/NEWS:15625 ../../../build/NEWS:18665 +msgid "" +":issue:`31293`: Fix crashes in true division and multiplication of a " +"timedelta object by a float with a bad as_integer_ratio() method. Patch by " +"Oren Milman." +msgstr "" + +#: ../../../build/NEWS:15629 ../../../build/NEWS:18669 +msgid "" +":issue:`31285`: Fix an assertion failure in `warnings.warn_explicit`, when " +"the return value of the received loader's get_source() has a bad " +"splitlines() method. Patch by Oren Milman." +msgstr "" + +#: ../../../build/NEWS:15633 +msgid "" +":issue:`30406`: Make ``async`` and ``await`` proper keywords, as specified " +"in :pep:`492`." +msgstr "" + +#: ../../../build/NEWS:15639 ../../../build/NEWS:18775 +msgid ":issue:`30058`: Fixed buffer overflow in select.kqueue.control()." +msgstr "" + +#: ../../../build/NEWS:15641 ../../../build/NEWS:18780 +msgid "" +":issue:`31672`: ``idpattern`` in ``string.Template`` matched some non-ASCII " +"characters. Now it uses ``-i`` regular expression local flag to avoid non-" +"ASCII characters." +msgstr "" + +#: ../../../build/NEWS:15645 ../../../build/NEWS:18790 +msgid "" +":issue:`31701`: On Windows, faulthandler.enable() now ignores MSC and COM " +"exceptions." +msgstr "" + +#: ../../../build/NEWS:15648 ../../../build/NEWS:18793 +msgid "" +":issue:`31728`: Prevent crashes in `_elementtree` due to unsafe cleanup of " +"`Element.text` and `Element.tail`. Patch by Oren Milman." +msgstr "" + +#: ../../../build/NEWS:15651 +msgid "" +":issue:`31671`: Now ``re.compile()`` converts passed RegexFlag to normal int" +" object before compiling. bm_regex_compile benchmark shows 14% performance " +"improvements." +msgstr "" + +#: ../../../build/NEWS:15655 +msgid "" +":issue:`30397`: The types of compiled regular objects and match objects are " +"now exposed as `re.Pattern` and `re.Match`. This adds information in pydoc " +"output for the re module." +msgstr "" + +#: ../../../build/NEWS:15659 ../../../build/NEWS:18803 +msgid "" +":issue:`31675`: Fixed memory leaks in Tkinter's methods splitlist() and " +"split() when pass a string larger than 2 GiB." +msgstr "" + +#: ../../../build/NEWS:15662 ../../../build/NEWS:18806 +msgid "" +":issue:`31673`: Fixed typo in the name of Tkinter's method adderrorinfo()." +msgstr "" + +#: ../../../build/NEWS:15664 +msgid "" +":issue:`31648`: Improvements to path predicates in ElementTree: Allow " +"whitespace around predicate parts, i.e. \"[a = 'text']\" instead of " +"requiring the less readable \"[a='text']\". Add support for text comparison " +"of the current node, like \"[.='text']\". Patch by Stefan Behnel." +msgstr "" + +#: ../../../build/NEWS:15669 ../../../build/NEWS:18808 +msgid ":issue:`30806`: Fix the string representation of a netrc object." +msgstr "" + +#: ../../../build/NEWS:15671 +msgid "" +":issue:`31638`: Add optional argument ``compressed`` to " +"``zipapp.create_archive``, and add option ``--compress`` to the command line" +" interface of ``zipapp``." +msgstr "" + +#: ../../../build/NEWS:15675 ../../../build/NEWS:18813 +msgid ":issue:`25351`: Avoid venv activate failures with undefined variables" +msgstr "" + +#: ../../../build/NEWS:15677 +msgid "" +":issue:`20519`: Avoid ctypes use (if possible) and improve import time for " +"uuid." +msgstr "" + +#: ../../../build/NEWS:15680 +msgid "" +":issue:`28293`: The regular expression cache is no longer completely dumped " +"when it is full." +msgstr "" + +#: ../../../build/NEWS:15683 +msgid ":issue:`31596`: Added pthread_getcpuclockid() to the time module" +msgstr "" + +#: ../../../build/NEWS:15685 +msgid "" +":issue:`27494`: Make 2to3 accept a trailing comma in generator expressions. " +"For example, ``set(x for x in [],)`` is now allowed." +msgstr "" + +#: ../../../build/NEWS:15688 ../../../build/NEWS:18819 +msgid "" +":issue:`30347`: Stop crashes when concurrently iterate over " +"itertools.groupby() iterators." +msgstr "" + +#: ../../../build/NEWS:15691 +msgid "" +":issue:`30346`: An iterator produced by itertools.groupby() iterator now " +"becomes exhausted after advancing the groupby iterator." +msgstr "" + +#: ../../../build/NEWS:15694 +msgid ":issue:`31556`: Cancel asyncio.wait_for future faster if timeout <= 0" +msgstr "" + +#: ../../../build/NEWS:15696 +msgid "" +":issue:`31540`: Allow passing a context object in " +":class:`concurrent.futures.ProcessPoolExecutor` constructor. Also, free job " +"resources in :class:`concurrent.futures.ProcessPoolExecutor` earlier to " +"improve memory usage when a worker waits for new jobs." +msgstr "" + +#: ../../../build/NEWS:15701 ../../../build/NEWS:18822 +msgid "" +":issue:`31516`: ``threading.current_thread()`` should not return a dummy " +"thread at shutdown." +msgstr "" + +#: ../../../build/NEWS:15704 +msgid "" +":issue:`31525`: In the sqlite module, require the sqlite3_prepare_v2 API. " +"Thus, the sqlite module now requires sqlite version at least 3.3.9." +msgstr "" + +#: ../../../build/NEWS:15707 +msgid "" +":issue:`26510`: argparse subparsers are now required by default. This " +"matches behaviour in Python 2. For optional subparsers, use the new " +"parameter ``add_subparsers(required=False)``. Patch by Anthony Sottile. (As " +"of 3.7.0rc1, the default was changed to not required as had been the case " +"since Python 3.3.)" +msgstr "" + +#: ../../../build/NEWS:15713 +msgid "" +":issue:`27541`: Reprs of subclasses of some collection and iterator classes " +"(`bytearray`, `array.array`, `collections.deque`, `collections.defaultdict`," +" `itertools.count`, `itertools.repeat`) now contain actual type name " +"insteads of hardcoded name of the base class." +msgstr "" + +#: ../../../build/NEWS:15718 ../../../build/NEWS:18825 +msgid "" +":issue:`31351`: python -m ensurepip now exits with non-zero exit code if pip" +" bootstrapping has failed." +msgstr "" + +#: ../../../build/NEWS:15721 +msgid "" +":issue:`31389`: ``pdb.set_trace()`` now takes an optional keyword-only " +"argument ``header``. If given, this is printed to the console just before " +"debugging begins." +msgstr "" + +#: ../../../build/NEWS:15728 ../../../build/NEWS:18846 +msgid "" +":issue:`31537`: Fix incorrect usage of ``get_history_length`` in readline " +"documentation example code. Patch by Brad Smith." +msgstr "" + +#: ../../../build/NEWS:15731 ../../../build/NEWS:18849 +msgid "" +":issue:`30085`: The operator functions without double underscores are " +"preferred for clarity. The one with underscores are only kept for back-" +"compatibility." +msgstr "" + +#: ../../../build/NEWS:15738 +msgid "" +":issue:`31696`: Improve compiler version information in :data:`sys.version` " +"when Python is built with Clang." +msgstr "" + +#: ../../../build/NEWS:15741 +msgid "" +":issue:`31625`: Stop using ranlib on static libraries. Instead, we assume ar" +" supports the 's' flag." +msgstr "" + +#: ../../../build/NEWS:15744 +msgid ":issue:`31624`: Remove support for BSD/OS." +msgstr "" + +#: ../../../build/NEWS:15746 ../../../build/NEWS:18890 +msgid "" +":issue:`22140`: Prevent double substitution of prefix in python-config.sh." +msgstr "" + +#: ../../../build/NEWS:15748 +msgid "" +":issue:`31569`: Correct PCBuild/ case to PCbuild/ in build scripts and " +"documentation." +msgstr "" + +#: ../../../build/NEWS:15751 ../../../build/NEWS:18892 +msgid "" +":issue:`31536`: Avoid wholesale rebuild after `make regen-all` if nothing " +"changed." +msgstr "" + +#: ../../../build/NEWS:15757 ../../../build/NEWS:18948 +msgid "" +":issue:`31460`: Simplify the API of IDLE's Module Browser. Passing a widget " +"instead of an flist with a root widget opens the option of creating a " +"browser frame that is only part of a window. Passing a full file name " +"instead of pieces assumed to come from a .py file opens the possibility of " +"browsing python files that do not end in .py." +msgstr "" + +#: ../../../build/NEWS:15763 ../../../build/NEWS:18954 +msgid ":issue:`31649`: IDLE - Make _htest, _utest parameters keyword only." +msgstr "" + +#: ../../../build/NEWS:15765 ../../../build/NEWS:18956 +msgid "" +":issue:`31559`: Remove test order dependence in idle_test.test_browser." +msgstr "" + +#: ../../../build/NEWS:15767 ../../../build/NEWS:18958 +msgid "" +":issue:`31459`: Rename IDLE's module browser from Class Browser to Module " +"Browser. The original module-level class and method browser became a module " +"browser, with the addition of module-level functions, years ago. Nested " +"classes and functions were added yesterday. For back-compatibility, the " +"virtual event <>, which appears on the Keys tab of the " +"Settings dialog, is not changed. Patch by Cheryl Sabella." +msgstr "" + +#: ../../../build/NEWS:15775 ../../../build/NEWS:18966 +msgid ":issue:`31500`: Default fonts now are scaled on HiDPI displays." +msgstr "" + +#: ../../../build/NEWS:15777 ../../../build/NEWS:18968 +msgid "" +":issue:`1612262`: IDLE module browser now shows nested classes and " +"functions. Original patches for code and tests by Guilherme Polo and Cheryl " +"Sabella, respectively." +msgstr "" + +#: ../../../build/NEWS:15784 +msgid "" +":issue:`28280`: Make `PyMapping_Keys()`, `PyMapping_Values()` and " +"`PyMapping_Items()` always return a `list` (rather than a `list` or a " +"`tuple`). Patch by Oren Milman." +msgstr "" + +#: ../../../build/NEWS:15788 ../../../build/NEWS:18986 +msgid "" +":issue:`31532`: Fix memory corruption due to allocator mix in getpath.c " +"between Py_GetPath() and Py_SetPath()" +msgstr "" + +#: ../../../build/NEWS:15791 +msgid "" +":issue:`25658`: Implement :pep:`539` for Thread Specific Storage (TSS) API: " +"it is a new Thread Local Storage (TLS) API to CPython which would supersede " +"use of the existing TLS API within the CPython interpreter, while " +"deprecating the existing API. PEP written by Erik M. Bray, patch by Masayuki" +" Yamamoto." +msgstr "" + +#: ../../../build/NEWS:15799 +msgid "Python 3.7.0 alpha 1" +msgstr "Python 3.7.0 alpha 1" + +#: ../../../build/NEWS:15801 +msgid "*Release date: 2017-09-19*" +msgstr "*发布日期: 2017-09-19*" + +#: ../../../build/NEWS:15806 ../../../build/NEWS:19024 +msgid "" +":issue:`29781`: SSLObject.version() now correctly returns None when " +"handshake over BIO has not been performed yet." +msgstr "" + +#: ../../../build/NEWS:15809 +msgid "" +":issue:`29505`: Add fuzz tests for float(str), int(str), unicode(str); for " +"oss-fuzz." +msgstr "" + +#: ../../../build/NEWS:15812 ../../../build/NEWS:19027 +#: ../../../build/NEWS:23373 +msgid "" +":issue:`30947`: Upgrade libexpat embedded copy from version 2.2.1 to 2.2.3 " +"to get security fixes." +msgstr "" + +#: ../../../build/NEWS:15815 ../../../build/NEWS:19487 +#: ../../../build/NEWS:23415 +msgid "" +":issue:`30730`: Prevent environment variables injection in subprocess on " +"Windows. Prevent passing other environment variables and command arguments." +msgstr "" + +#: ../../../build/NEWS:15819 ../../../build/NEWS:19491 +#: ../../../build/NEWS:23419 +msgid "" +":issue:`30694`: Upgrade expat copy from 2.2.0 to 2.2.1 to get fixes of " +"multiple security vulnerabilities including: CVE-2017-9233 (External entity " +"infinite loop DoS), CVE-2016-9063 (Integer overflow, re-fix), CVE-2016-0718 " +"(Fix regression bugs from 2.2.0's fix to CVE-2016-0718) and CVE-2012-0876 " +"(Counter hash flooding with SipHash). Note: the CVE-2016-5300 (Use os-" +"specific entropy sources like getrandom) doesn't impact Python, since Python" +" already gets entropy from the OS to set the expat secret using " +"``XML_SetHashSalt()``." +msgstr "" + +#: ../../../build/NEWS:15828 ../../../build/NEWS:19500 +#: ../../../build/NEWS:23428 +msgid "" +":issue:`30500`: Fix urllib.parse.splithost() to correctly parse fragments. " +"For example, ``splithost('//127.0.0.1#@evil.com/')`` now correctly returns " +"the ``127.0.0.1`` host, instead of treating ``@evil.com`` as the host in an " +"authentication (``login@host``)." +msgstr "" + +#: ../../../build/NEWS:15833 ../../../build/NEWS:19514 +#: ../../../build/NEWS:23433 +msgid "" +":issue:`29591`: Update expat copy from 2.1.1 to 2.2.0 to get fixes of " +"CVE-2016-0718 and CVE-2016-4472. See " +"https://sourceforge.net/p/expat/bugs/537/ for more information." +msgstr "" + +#: ../../../build/NEWS:15840 ../../../build/NEWS:18652 +msgid "" +":issue:`31490`: Fix an assertion failure in `ctypes` class definition, in " +"case the class has an attribute whose name is specified in ``_anonymous_`` " +"but not in ``_fields_``. Patch by Oren Milman." +msgstr "" + +#: ../../../build/NEWS:15844 ../../../build/NEWS:19033 +msgid "" +":issue:`31471`: Fix an assertion failure in `subprocess.Popen()` on Windows," +" in case the env argument has a bad keys() method. Patch by Oren Milman." +msgstr "" + +#: ../../../build/NEWS:15847 ../../../build/NEWS:19036 +msgid "" +":issue:`31418`: Fix an assertion failure in `PyErr_WriteUnraisable()` in " +"case of an exception with a bad ``__module__`` attribute. Patch by Oren " +"Milman." +msgstr "" + +#: ../../../build/NEWS:15850 ../../../build/NEWS:19039 +msgid "" +":issue:`31416`: Fix assertion failures in case of a bad warnings.filters or " +"warnings.defaultaction. Patch by Oren Milman." +msgstr "" + +#: ../../../build/NEWS:15853 +msgid "" +":issue:`28411`: Change direct usage of PyInterpreterState.modules to " +"PyImport_GetModuleDict(). Also introduce more uniformity in other code that " +"deals with sys.modules. This helps reduce complications when working on " +"sys.modules." +msgstr "" + +#: ../../../build/NEWS:15858 +msgid "" +":issue:`28411`: Switch to the abstract API when dealing with " +"``PyInterpreterState.modules``. This allows later support for all dict " +"subclasses and other Mapping implementations. Also add a " +"``PyImport_GetModule()`` function to reduce a bunch of duplicated code." +msgstr "" + +#: ../../../build/NEWS:15863 ../../../build/NEWS:19042 +msgid "" +":issue:`31411`: Raise a TypeError instead of SystemError in case " +"warnings.onceregistry is not a dictionary. Patch by Oren Milman." +msgstr "" + +#: ../../../build/NEWS:15866 +msgid "" +":issue:`31344`: For finer control of tracing behaviour when testing the " +"interpreter, two new frame attributes have been added to control the " +"emission of particular trace events: ``f_trace_lines`` (``True`` by default)" +" to turn off per-line trace events; and ``f_trace_opcodes`` (``False`` by " +"default) to turn on per-opcode trace events." +msgstr "" + +#: ../../../build/NEWS:15872 ../../../build/NEWS:19045 +msgid "" +":issue:`31373`: Fix several possible instances of undefined behavior due to " +"floating-point demotions." +msgstr "" + +#: ../../../build/NEWS:15875 ../../../build/NEWS:19048 +msgid "" +":issue:`30465`: Location information (``lineno`` and ``col_offset``) in " +"f-strings is now (mostly) correct. This fixes tools like flake8 from " +"showing warnings on the wrong line (typically the first line of the file)." +msgstr "" + +#: ../../../build/NEWS:15879 +msgid "" +":issue:`30860`: Consolidate CPython's global runtime state under a single " +"struct. This improves discoverability of the runtime state." +msgstr "" + +#: ../../../build/NEWS:15882 +msgid "" +":issue:`31347`: Fix possible undefined behavior in " +"_PyObject_FastCall_Prepend." +msgstr "" + +#: ../../../build/NEWS:15884 ../../../build/NEWS:19052 +msgid "" +":issue:`31343`: Include sys/sysmacros.h for major(), minor(), and makedev()." +" GNU C libray plans to remove the functions from sys/types.h." +msgstr "" + +#: ../../../build/NEWS:15887 ../../../build/NEWS:19055 +msgid "" +":issue:`31291`: Fix an assertion failure in `zipimport.zipimporter.get_data`" +" on Windows, when the return value of ``pathname.replace('/','\\\\')`` isn't" +" a string. Patch by Oren Milman." +msgstr "" + +#: ../../../build/NEWS:15891 ../../../build/NEWS:19059 +msgid "" +":issue:`31271`: Fix an assertion failure in the write() method of " +"`io.TextIOWrapper`, when the encoder doesn't return a bytes object. Patch by" +" Oren Milman." +msgstr "" + +#: ../../../build/NEWS:15895 ../../../build/NEWS:19063 +msgid "" +":issue:`31243`: Fix a crash in some methods of `io.TextIOWrapper`, when the " +"decoder's state is invalid. Patch by Oren Milman." +msgstr "" + +#: ../../../build/NEWS:15898 ../../../build/NEWS:19066 +msgid "" +":issue:`30721`: ``print`` now shows correct usage hint for using Python 2 " +"redirection syntax. Patch by Sanyam Khurana." +msgstr "" + +#: ../../../build/NEWS:15901 ../../../build/NEWS:19069 +msgid ":issue:`31070`: Fix a race condition in importlib _get_module_lock()." +msgstr "" + +#: ../../../build/NEWS:15903 +msgid "" +":issue:`30747`: Add a non-dummy implementation of _Py_atomic_store and " +"_Py_atomic_load on MSVC." +msgstr "" + +#: ../../../build/NEWS:15906 ../../../build/NEWS:19071 +#: ../../../build/NEWS:23379 +msgid "" +":issue:`31095`: Fix potential crash during GC caused by ``tp_dealloc`` which" +" doesn't call ``PyObject_GC_UnTrack()``." +msgstr "" + +#: ../../../build/NEWS:15909 ../../../build/NEWS:19074 +msgid "" +":issue:`31071`: Avoid masking original TypeError in call with * unpacking " +"when other arguments are passed." +msgstr "" + +#: ../../../build/NEWS:15912 ../../../build/NEWS:19077 +msgid "" +":issue:`30978`: str.format_map() now passes key lookup exceptions through. " +"Previously any exception was replaced with a KeyError exception." +msgstr "" + +#: ../../../build/NEWS:15915 ../../../build/NEWS:19080 +msgid "" +":issue:`30808`: Use _Py_atomic API for concurrency-sensitive signal state." +msgstr "" + +#: ../../../build/NEWS:15917 ../../../build/NEWS:19082 +#: ../../../build/NEWS:23440 +msgid "" +":issue:`30876`: Relative import from unloaded package now reimports the " +"package instead of failing with SystemError. Relative import from non-" +"package now fails with ImportError rather than SystemError." +msgstr "" + +#: ../../../build/NEWS:15921 ../../../build/NEWS:19086 +msgid "" +":issue:`30703`: Improve signal delivery. Avoid using Py_AddPendingCall from " +"signal handler, to avoid calling signal-unsafe functions. The tests I'm " +"adding here fail without the rest of the patch, on Linux and OS X. This " +"means our signal delivery logic had defects (some signals could be lost)." +msgstr "" + +#: ../../../build/NEWS:15926 ../../../build/NEWS:19091 +#: ../../../build/NEWS:23444 +msgid "" +":issue:`30765`: Avoid blocking in pthread_mutex_lock() when " +"PyThread_acquire_lock() is asked not to block." +msgstr "" + +#: ../../../build/NEWS:15929 ../../../build/NEWS:19094 +msgid "" +":issue:`31161`: Make sure the 'Missing parentheses' syntax error message is " +"only applied to SyntaxError, not to subclasses. Patch by Martijn Pieters." +msgstr "" + +#: ../../../build/NEWS:15932 ../../../build/NEWS:19097 +msgid "" +":issue:`30814`: Fixed a race condition when import a submodule from a " +"package." +msgstr "" + +#: ../../../build/NEWS:15934 +msgid "" +":issue:`30736`: The internal unicodedata database has been upgraded to " +"Unicode 10.0." +msgstr "" + +#: ../../../build/NEWS:15937 +msgid "" +":issue:`30604`: Move co_extra_freefuncs from per-thread to per-interpreter " +"to avoid crashes." +msgstr "" + +#: ../../../build/NEWS:15940 ../../../build/NEWS:19099 +msgid "" +":issue:`30597`: ``print`` now shows expected input in custom error message " +"when used as a Python 2 statement. Patch by Sanyam Khurana." +msgstr "" + +#: ../../../build/NEWS:15943 ../../../build/NEWS:19521 +msgid "" +":issue:`30682`: Removed a too-strict assertion that failed for certain " +"f-strings, such as eval(\"f'\\\\\\n'\") and eval(\"f'\\\\\\r'\")." +msgstr "" + +#: ../../../build/NEWS:15946 +msgid "" +":issue:`30501`: The compiler now produces more optimal code for complex " +"condition expressions in the \"if\", \"while\" and \"assert\" statement, the" +" \"if\" expression, and generator expressions and comprehensions." +msgstr "" + +#: ../../../build/NEWS:15950 +msgid "" +":issue:`28180`: Implement :pep:`538` (legacy C locale coercion). This means " +"that when a suitable coercion target locale is available, both the core " +"interpreter and locale-aware C extensions will assume the use of UTF-8 as " +"the default text encoding, rather than ASCII." +msgstr "" + +#: ../../../build/NEWS:15955 +msgid "" +":issue:`30486`: Allows setting cell values for __closure__. Patch by Lisa " +"Roach." +msgstr "" + +#: ../../../build/NEWS:15958 +msgid "" +":issue:`30537`: itertools.islice now accepts integer-like objects (having an" +" __index__ method) as start, stop, and slice arguments" +msgstr "" + +#: ../../../build/NEWS:15961 +msgid "" +":issue:`25324`: Tokens needed for parsing in Python moved to C. ``COMMENT``," +" ``NL`` and ``ENCODING``. This way the tokens and tok_names in the token " +"module don't get changed when you import the tokenize module." +msgstr "" + +#: ../../../build/NEWS:15965 ../../../build/NEWS:19526 +msgid ":issue:`29104`: Fixed parsing backslashes in f-strings." +msgstr "" + +#: ../../../build/NEWS:15967 ../../../build/NEWS:19528 +#: ../../../build/NEWS:23447 +msgid "" +":issue:`27945`: Fixed various segfaults with dict when input collections are" +" mutated during searching, inserting or comparing. Based on patches by " +"Duane Griffin and Tim Mitchell." +msgstr "" + +#: ../../../build/NEWS:15971 ../../../build/NEWS:19532 +#: ../../../build/NEWS:23451 +msgid "" +":issue:`25794`: Fixed type.__setattr__() and type.__delattr__() for non-" +"interned attribute names. Based on patch by Eryk Sun." +msgstr "" + +#: ../../../build/NEWS:15974 ../../../build/NEWS:19535 +msgid "" +":issue:`30039`: If a KeyboardInterrupt happens when the interpreter is in " +"the middle of resuming a chain of nested 'yield from' or 'await' calls, it's" +" now correctly delivered to the innermost frame." +msgstr "" + +#: ../../../build/NEWS:15978 +msgid "" +":issue:`28974`: ``object.__format__(x, '')`` is now equivalent to ``str(x)``" +" rather than ``format(str(self), '')``." +msgstr "" + +#: ../../../build/NEWS:15981 +msgid "" +":issue:`30024`: Circular imports involving absolute imports with binding a " +"submodule to a name are now supported." +msgstr "" + +#: ../../../build/NEWS:15984 ../../../build/NEWS:19539 +msgid "" +":issue:`12414`: sys.getsizeof() on a code object now returns the sizes which" +" includes the code struct and sizes of objects which it references. Patch by" +" Dong-hee Na." +msgstr "" + +#: ../../../build/NEWS:15988 +msgid "" +":issue:`29839`: len() now raises ValueError rather than OverflowError if " +"__len__() returned a large negative integer." +msgstr "" + +#: ../../../build/NEWS:15991 +msgid "" +":issue:`11913`: README.rst is now included in the list of distutils standard" +" READMEs and therefore included in source distributions." +msgstr "" + +#: ../../../build/NEWS:15994 +msgid "" +":issue:`29914`: Fixed default implementations of __reduce__ and " +"__reduce_ex__(). object.__reduce__() no longer takes arguments, " +"object.__reduce_ex__() now requires one argument." +msgstr "" + +#: ../../../build/NEWS:15998 ../../../build/NEWS:19543 +msgid "" +":issue:`29949`: Fix memory usage regression of set and frozenset object." +msgstr "" + +#: ../../../build/NEWS:16000 ../../../build/NEWS:19545 +#: ../../../build/NEWS:23454 +msgid "" +":issue:`29935`: Fixed error messages in the index() method of tuple, list " +"and deque when pass indices of wrong type." +msgstr "" + +#: ../../../build/NEWS:16003 +msgid "" +":issue:`29816`: Shift operation now has less opportunity to raise " +"OverflowError. ValueError always is raised rather than OverflowError for " +"negative counts. Shifting zero with non-negative count always returns zero." +msgstr "" + +#: ../../../build/NEWS:16008 +msgid "" +":issue:`24821`: Fixed the slowing down to 25 times in the searching of some " +"unlucky Unicode characters." +msgstr "" + +#: ../../../build/NEWS:16011 +msgid "" +":issue:`29102`: Add a unique ID to PyInterpreterState. This makes it easier" +" to identify each subinterpreter." +msgstr "" + +#: ../../../build/NEWS:16014 +msgid "" +":issue:`29894`: The deprecation warning is emitted if __complex__ returns an" +" instance of a strict subclass of complex. In a future versions of Python " +"this can be an error." +msgstr "" + +#: ../../../build/NEWS:16018 ../../../build/NEWS:19548 +msgid "" +":issue:`29859`: Show correct error messages when any of the pthread_* calls " +"in thread_pthread.h fails." +msgstr "" + +#: ../../../build/NEWS:16021 +msgid "" +":issue:`29849`: Fix a memory leak when an ImportError is raised during from " +"import." +msgstr "" + +#: ../../../build/NEWS:16024 ../../../build/NEWS:19556 +msgid "" +":issue:`28856`: Fix an oversight that %b format for bytes should support " +"objects follow the buffer protocol." +msgstr "" + +#: ../../../build/NEWS:16027 ../../../build/NEWS:19863 +msgid "" +":issue:`29723`: The ``sys.path[0]`` initialization change for :issue:`29139`" +" caused a regression by revealing an inconsistency in how sys.path is " +"initialized when executing ``__main__`` from a zipfile, directory, or other " +"import location. The interpreter now consistently avoids ever adding the " +"import location's parent directory to ``sys.path``, and ensures no other " +"``sys.path`` entries are inadvertently modified when inserting the import " +"location named on the command line." +msgstr "" + +#: ../../../build/NEWS:16035 +msgid "" +":issue:`29568`: Escaped percent \"%%\" in the format string for classic " +"string formatting no longer allows any characters between two percents." +msgstr "" + +#: ../../../build/NEWS:16038 ../../../build/NEWS:19559 +msgid "" +":issue:`29714`: Fix a regression that bytes format may fail when containing " +"zero bytes inside." +msgstr "" + +#: ../../../build/NEWS:16041 +msgid "" +":issue:`29695`: bool(), float(), list() and tuple() no longer take keyword " +"arguments. The first argument of int() can now be passes only as positional " +"argument." +msgstr "" + +#: ../../../build/NEWS:16045 ../../../build/NEWS:19887 +msgid "" +":issue:`28893`: Set correct __cause__ for errors about invalid awaitables " +"returned from __aiter__ and __anext__." +msgstr "" + +#: ../../../build/NEWS:16048 ../../../build/NEWS:19551 +#: ../../../build/NEWS:23457 +msgid "" +":issue:`28876`: ``bool(range)`` works even if ``len(range)`` raises " +":exc:`OverflowError`." +msgstr "" + +#: ../../../build/NEWS:16051 ../../../build/NEWS:19890 +msgid "" +":issue:`29683`: Fixes to memory allocation in _PyCode_SetExtra. Patch by " +"Brian Coleman." +msgstr "" + +#: ../../../build/NEWS:16054 ../../../build/NEWS:19893 +msgid "" +":issue:`29684`: Fix minor regression of PyEval_CallObjectWithKeywords. It " +"should raise TypeError when kwargs is not a dict. But it might cause segv " +"when args=NULL and kwargs is not a dict." +msgstr "" + +#: ../../../build/NEWS:16058 ../../../build/NEWS:19897 +#: ../../../build/NEWS:23468 +msgid "" +":issue:`28598`: Support __rmod__ for subclasses of str being called before " +"str.__mod__. Patch by Martijn Pieters." +msgstr "" + +#: ../../../build/NEWS:16061 ../../../build/NEWS:19900 +msgid "" +":issue:`29607`: Fix stack_effect computation for CALL_FUNCTION_EX. Patch by " +"Matthieu Dartiailh." +msgstr "" + +#: ../../../build/NEWS:16064 ../../../build/NEWS:19903 +#: ../../../build/NEWS:23471 +msgid "" +":issue:`29602`: Fix incorrect handling of signed zeros in complex " +"constructor for complex subclasses and for inputs having a __complex__ " +"method. Patch by Serhiy Storchaka." +msgstr "" + +#: ../../../build/NEWS:16068 ../../../build/NEWS:19907 +#: ../../../build/NEWS:23475 +msgid "" +":issue:`29347`: Fixed possibly dereferencing undefined pointers when " +"creating weakref objects." +msgstr "" + +#: ../../../build/NEWS:16071 +msgid "" +":issue:`29463`: Add ``docstring`` field to Module, ClassDef, FunctionDef, " +"and AsyncFunctionDef ast nodes. docstring is not first stmt in their body " +"anymore. It affects ``co_firstlineno`` and ``co_lnotab`` of code object for" +" module and class. (Reverted in :issue:`32911`.)" +msgstr "" + +#: ../../../build/NEWS:16076 ../../../build/NEWS:19910 +#: ../../../build/NEWS:23478 +msgid ":issue:`29438`: Fixed use-after-free problem in key sharing dict." +msgstr "" + +#: ../../../build/NEWS:16078 +msgid "" +":issue:`29546`: Set the 'path' and 'name' attribute on ImportError for " +"``from ... import ...``." +msgstr "" + +#: ../../../build/NEWS:16081 +msgid ":issue:`29546`: Improve from-import error message with location" +msgstr "" + +#: ../../../build/NEWS:16083 ../../../build/NEWS:19562 +#: ../../../build/NEWS:23485 +msgid "" +":issue:`29478`: If max_line_length=None is specified while using the " +"Compat32 policy, it is no longer ignored. Patch by Mircea Cosbuc." +msgstr "" + +#: ../../../build/NEWS:16086 ../../../build/NEWS:19912 +#: ../../../build/NEWS:23480 +msgid ":issue:`29319`: Prevent RunMainFromImporter overwriting sys.path[0]." +msgstr "" + +#: ../../../build/NEWS:16088 ../../../build/NEWS:19914 +#: ../../../build/NEWS:23482 +msgid "" +":issue:`29337`: Fixed possible BytesWarning when compare the code objects. " +"Warnings could be emitted at compile time." +msgstr "" + +#: ../../../build/NEWS:16091 ../../../build/NEWS:19917 +msgid "" +":issue:`29327`: Fixed a crash when pass the iterable keyword argument to " +"sorted()." +msgstr "" + +#: ../../../build/NEWS:16094 ../../../build/NEWS:19920 +msgid "" +":issue:`29034`: Fix memory leak and use-after-free in os module " +"(path_converter)." +msgstr "" + +#: ../../../build/NEWS:16097 ../../../build/NEWS:19923 +msgid "" +":issue:`29159`: Fix regression in bytes(x) when x.__index__() raises " +"Exception." +msgstr "" + +#: ../../../build/NEWS:16099 +msgid "" +":issue:`29049`: Call _PyObject_GC_TRACK() lazily when calling Python " +"function. Calling function is up to 5% faster." +msgstr "" + +#: ../../../build/NEWS:16102 +msgid "" +":issue:`28927`: bytes.fromhex() and bytearray.fromhex() now ignore all ASCII" +" whitespace, not only spaces. Patch by Robert Xiao." +msgstr "" + +#: ../../../build/NEWS:16105 ../../../build/NEWS:19925 +#: ../../../build/NEWS:23843 +msgid ":issue:`28932`: Do not include if it does not exist." +msgstr "" + +#: ../../../build/NEWS:16107 ../../../build/NEWS:19927 +#: ../../../build/NEWS:23848 +msgid "" +":issue:`25677`: Correct the positioning of the syntax error caret for " +"indented blocks. Based on patch by Michael Layzell." +msgstr "" + +#: ../../../build/NEWS:16110 ../../../build/NEWS:19930 +#: ../../../build/NEWS:23851 +msgid "" +":issue:`29000`: Fixed bytes formatting of octals with zero padding in " +"alternate form." +msgstr "" + +#: ../../../build/NEWS:16113 +msgid "" +":issue:`18896`: Python function can now have more than 255 parameters. " +"collections.namedtuple() now supports tuples with more than 255 elements." +msgstr "" + +#: ../../../build/NEWS:16116 +msgid "" +":issue:`28596`: The preferred encoding is UTF-8 on Android. Patch written by" +" Chi Hsuan Yen." +msgstr "" + +#: ../../../build/NEWS:16119 +msgid ":issue:`22257`: Clean up interpreter startup (see :pep:`432`)." +msgstr "" + +#: ../../../build/NEWS:16121 ../../../build/NEWS:19933 +msgid "" +":issue:`26919`: On Android, operating system data is now always " +"encoded/decoded to/from UTF-8, instead of the locale encoding to avoid " +"inconsistencies with os.fsencode() and os.fsdecode() which are already using" +" UTF-8." +msgstr "" + +#: ../../../build/NEWS:16125 ../../../build/NEWS:19937 +msgid "" +":issue:`28991`: functools.lru_cache() was susceptible to an obscure " +"reentrancy bug triggerable by a monkey-patched len() function." +msgstr "" + +#: ../../../build/NEWS:16128 ../../../build/NEWS:20211 +msgid "" +":issue:`28147`: Fix a memory leak in split-table dictionaries: setattr() " +"must not convert combined table into split table. Patch written by INADA " +"Naoki." +msgstr "" + +#: ../../../build/NEWS:16131 ../../../build/NEWS:19940 +msgid "" +":issue:`28739`: f-string expressions are no longer accepted as docstrings " +"and by ast.literal_eval() even if they do not include expressions." +msgstr "" + +#: ../../../build/NEWS:16134 ../../../build/NEWS:19943 +#: ../../../build/NEWS:23854 +msgid "" +":issue:`28512`: Fixed setting the offset attribute of SyntaxError by " +"PyErr_SyntaxLocationEx() and PyErr_SyntaxLocationObject()." +msgstr "" + +#: ../../../build/NEWS:16137 ../../../build/NEWS:19946 +msgid "" +":issue:`28918`: Fix the cross compilation of xxlimited when Python has been " +"built with Py_DEBUG defined." +msgstr "" + +#: ../../../build/NEWS:16140 ../../../build/NEWS:20241 +msgid "" +":issue:`23722`: Rather than silently producing a class that doesn't support " +"zero-argument ``super()`` in methods, failing to pass the new " +"``__classcell__`` namespace entry up to ``type.__new__`` now results in a " +"``DeprecationWarning`` and a class that supports zero-argument ``super()``." +msgstr "" + +#: ../../../build/NEWS:16146 ../../../build/NEWS:20247 +msgid "" +":issue:`28797`: Modifying the class __dict__ inside the __set_name__ method " +"of a descriptor that is used inside that class no longer prevents calling " +"the __set_name__ method of other descriptors." +msgstr "" + +#: ../../../build/NEWS:16150 +msgid "" +":issue:`28799`: Remove the ``PyEval_GetCallStats()`` function and deprecate " +"the untested and undocumented ``sys.callstats()`` function. Remove the " +"``CALL_PROFILE`` special build: use the :func:`sys.setprofile` function, " +":mod:`cProfile` or :mod:`profile` to profile function calls." +msgstr "" + +#: ../../../build/NEWS:16155 +msgid "" +":issue:`12844`: More than 255 arguments can now be passed to a function." +msgstr "" + +#: ../../../build/NEWS:16157 ../../../build/NEWS:20251 +msgid "" +":issue:`28782`: Fix a bug in the implementation ``yield from`` when checking" +" if the next instruction is YIELD_FROM. Regression introduced by WORDCODE " +"(:issue:`26647`)." +msgstr "" + +#: ../../../build/NEWS:16161 +msgid "" +":issue:`28774`: Fix error position of the unicode error in ASCII and Latin1 " +"encoders when a string returned by the error handler contains multiple non-" +"encodable characters (non-ASCII for the ASCII codec, characters out of the " +"U+0000-U+00FF range for Latin1)." +msgstr "" + +#: ../../../build/NEWS:16166 ../../../build/NEWS:19949 +msgid "" +":issue:`28731`: Optimize _PyDict_NewPresized() to create correct size dict. " +"Improve speed of dict literal with constant keys up to 30%." +msgstr "" + +#: ../../../build/NEWS:16169 ../../../build/NEWS:20305 +msgid ":issue:`28532`: Show sys.version when -V option is supplied twice." +msgstr "" + +#: ../../../build/NEWS:16171 ../../../build/NEWS:20307 +msgid "" +":issue:`27100`: The with-statement now checks for __enter__ before it checks" +" for __exit__. This gives less confusing error messages when both methods " +"are missing. Patch by Jonathan Ellington." +msgstr "" + +#: ../../../build/NEWS:16175 ../../../build/NEWS:20311 +msgid "" +":issue:`28746`: Fix the set_inheritable() file descriptor method on " +"platforms that do not have the ioctl FIOCLEX and FIONCLEX commands." +msgstr "" + +#: ../../../build/NEWS:16178 ../../../build/NEWS:20314 +msgid "" +":issue:`26920`: Fix not getting the locale's charset upon initializing the " +"interpreter, on platforms that do not have langinfo." +msgstr "" + +#: ../../../build/NEWS:16181 ../../../build/NEWS:20317 +#: ../../../build/NEWS:23860 +msgid "" +":issue:`28648`: Fixed crash in Py_DecodeLocale() in debug build on Mac OS X " +"when decode astral characters. Patch by Xiang Zhang." +msgstr "" + +#: ../../../build/NEWS:16184 ../../../build/NEWS:20323 +msgid ":issue:`28665`: Improve speed of the STORE_DEREF opcode by 40%." +msgstr "" + +#: ../../../build/NEWS:16186 ../../../build/NEWS:20320 +#: ../../../build/NEWS:23863 +msgid "" +":issue:`19398`: Extra slash no longer added to sys.path components in case " +"of empty compile-time PYTHONPATH components." +msgstr "" + +#: ../../../build/NEWS:16189 +msgid "" +":issue:`28621`: Sped up converting int to float by reusing faster bits " +"counting implementation. Patch by Adrian Wielgosik." +msgstr "" + +#: ../../../build/NEWS:16192 +msgid "" +":issue:`28580`: Optimize iterating split table values. Patch by Xiang Zhang." +msgstr "" + +#: ../../../build/NEWS:16194 ../../../build/NEWS:20325 +msgid "" +":issue:`28583`: PyDict_SetDefault didn't combine split table when needed. " +"Patch by Xiang Zhang." +msgstr "" + +#: ../../../build/NEWS:16197 ../../../build/NEWS:20419 +msgid "" +":issue:`28128`: Deprecation warning for invalid str and byte escape " +"sequences now prints better information about where the error occurs. Patch " +"by Serhiy Storchaka and Eric Smith." +msgstr "" + +#: ../../../build/NEWS:16201 ../../../build/NEWS:20423 +msgid "" +":issue:`28509`: dict.update() no longer allocate unnecessary large memory." +msgstr "" + +#: ../../../build/NEWS:16203 ../../../build/NEWS:20425 +#: ../../../build/NEWS:23866 +msgid "" +":issue:`28426`: Fixed potential crash in PyUnicode_AsDecodedObject() in " +"debug build." +msgstr "" + +#: ../../../build/NEWS:16206 ../../../build/NEWS:20428 +msgid "" +":issue:`28517`: Fixed of-by-one error in the peephole optimizer that caused " +"keeping unreachable code." +msgstr "" + +#: ../../../build/NEWS:16209 ../../../build/NEWS:20431 +msgid "" +":issue:`28214`: Improved exception reporting for problematic __set_name__ " +"attributes." +msgstr "" + +#: ../../../build/NEWS:16212 ../../../build/NEWS:20434 +#: ../../../build/NEWS:23869 +msgid "" +":issue:`23782`: Fixed possible memory leak in _PyTraceback_Add() and " +"exception loss in PyTraceBack_Here()." +msgstr "" + +#: ../../../build/NEWS:16215 ../../../build/NEWS:20543 +msgid ":issue:`28183`: Optimize and cleanup dict iteration." +msgstr "" + +#: ../../../build/NEWS:16217 ../../../build/NEWS:20545 +msgid "" +":issue:`26081`: Added C implementation of asyncio.Future. Original patch by " +"Yury Selivanov." +msgstr "" + +#: ../../../build/NEWS:16220 ../../../build/NEWS:20548 +#: ../../../build/NEWS:23872 +msgid "" +":issue:`28379`: Added sanity checks and tests for " +"PyUnicode_CopyCharacters(). Patch by Xiang Zhang." +msgstr "" + +#: ../../../build/NEWS:16223 ../../../build/NEWS:20551 +#: ../../../build/NEWS:23875 +msgid "" +":issue:`28376`: The type of long range iterator is now registered as " +"Iterator. Patch by Oren Milman." +msgstr "" + +#: ../../../build/NEWS:16226 +msgid "" +":issue:`28376`: Creating instances of range_iterator by calling " +"range_iterator type now is disallowed. Calling iter() on range instance is " +"the only way. Patch by Oren Milman." +msgstr "" + +#: ../../../build/NEWS:16230 ../../../build/NEWS:20560 +#: ../../../build/NEWS:23881 +msgid "" +":issue:`26906`: Resolving special methods of uninitialized type now causes " +"implicit initialization of the type instead of a fail." +msgstr "" + +#: ../../../build/NEWS:16233 ../../../build/NEWS:20563 +#: ../../../build/NEWS:23884 +msgid "" +":issue:`18287`: PyType_Ready() now checks that tp_name is not NULL. Original" +" patch by Niklas Koep." +msgstr "" + +#: ../../../build/NEWS:16236 ../../../build/NEWS:20566 +#: ../../../build/NEWS:23887 +msgid "" +":issue:`24098`: Fixed possible crash when AST is changed in process of " +"compiling it." +msgstr "" + +#: ../../../build/NEWS:16239 ../../../build/NEWS:20569 +msgid "" +":issue:`28201`: Dict reduces possibility of 2nd conflict in hash table when " +"hashes have same lower bits." +msgstr "" + +#: ../../../build/NEWS:16242 ../../../build/NEWS:20572 +#: ../../../build/NEWS:23890 +msgid "" +":issue:`28350`: String constants with null character no longer interned." +msgstr "" + +#: ../../../build/NEWS:16244 ../../../build/NEWS:20574 +#: ../../../build/NEWS:23892 +msgid ":issue:`26617`: Fix crash when GC runs during weakref callbacks." +msgstr "" + +#: ../../../build/NEWS:16246 ../../../build/NEWS:20576 +#: ../../../build/NEWS:23894 +msgid "" +":issue:`27942`: String constants now interned recursively in tuples and " +"frozensets." +msgstr "" + +#: ../../../build/NEWS:16249 +msgid "" +":issue:`28289`: ImportError.__init__ now resets not specified attributes." +msgstr "" + +#: ../../../build/NEWS:16251 ../../../build/NEWS:20579 +#: ../../../build/NEWS:23897 +msgid "" +":issue:`21578`: Fixed misleading error message when ImportError called with " +"invalid keyword args." +msgstr "" + +#: ../../../build/NEWS:16254 ../../../build/NEWS:20582 +msgid "" +":issue:`28203`: Fix incorrect type in complex(1.0, {2:3}) error message. " +"Patch by Soumya Sharma." +msgstr "" + +#: ../../../build/NEWS:16257 ../../../build/NEWS:20585 +msgid "" +":issue:`28086`: Single var-positional argument of tuple subtype was passed " +"unscathed to the C-defined function. Now it is converted to exact tuple." +msgstr "" + +#: ../../../build/NEWS:16260 ../../../build/NEWS:20588 +msgid "" +":issue:`28214`: Now __set_name__ is looked up on the class instead of the " +"instance." +msgstr "" + +#: ../../../build/NEWS:16263 ../../../build/NEWS:20591 +#: ../../../build/NEWS:23903 +msgid "" +":issue:`27955`: Fallback on reading /dev/urandom device when the getrandom()" +" syscall fails with EPERM, for example when blocked by SECCOMP." +msgstr "" + +#: ../../../build/NEWS:16266 ../../../build/NEWS:20594 +msgid ":issue:`28192`: Don't import readline in isolated mode." +msgstr "" + +#: ../../../build/NEWS:16268 +msgid "" +":issue:`27441`: Remove some redundant assignments to ob_size in " +"longobject.c. Thanks Oren Milman." +msgstr "" + +#: ../../../build/NEWS:16271 +msgid "" +":issue:`27222`: Clean up redundant code in long_rshift function. Thanks Oren" +" Milman." +msgstr "" + +#: ../../../build/NEWS:16274 ../../../build/NEWS:20596 +msgid "Upgrade internal unicode databases to Unicode version 9.0.0." +msgstr "" + +#: ../../../build/NEWS:16276 ../../../build/NEWS:20598 +#: ../../../build/NEWS:23906 +msgid "" +":issue:`28131`: Fix a regression in zipimport's compile_source(). zipimport" +" should use the same optimization level as the interpreter." +msgstr "" + +#: ../../../build/NEWS:16279 ../../../build/NEWS:20601 +msgid "" +":issue:`28126`: Replace Py_MEMCPY with memcpy(). Visual Studio can properly " +"optimize memcpy()." +msgstr "" + +#: ../../../build/NEWS:16282 ../../../build/NEWS:20604 +msgid "" +":issue:`28120`: Fix dict.pop() for splitted dictionary when trying to remove" +" a \"pending key\" (Not yet inserted in split-table). Patch by Xiang Zhang." +msgstr "" + +#: ../../../build/NEWS:16285 ../../../build/NEWS:20607 +msgid "" +":issue:`26182`: Raise DeprecationWarning when async and await keywords are " +"used as variable/attribute/class/function name." +msgstr "" + +#: ../../../build/NEWS:16288 ../../../build/NEWS:20332 +msgid ":issue:`26182`: Fix a refleak in code that raises DeprecationWarning." +msgstr "" + +#: ../../../build/NEWS:16290 ../../../build/NEWS:20334 +msgid "" +":issue:`28721`: Fix asynchronous generators aclose() and athrow() to handle " +"StopAsyncIteration propagation properly." +msgstr "" + +#: ../../../build/NEWS:16293 +msgid "" +":issue:`26110`: Speed-up method calls: add LOAD_METHOD and CALL_METHOD " +"opcodes." +msgstr "" + +#: ../../../build/NEWS:16298 ../../../build/NEWS:19105 +msgid "" +":issue:`31499`: xml.etree: Fix a crash when a parser is part of a reference " +"cycle." +msgstr "" + +#: ../../../build/NEWS:16301 ../../../build/NEWS:18828 +msgid ":issue:`31482`: ``random.seed()`` now works with bytes in version=1" +msgstr "" + +#: ../../../build/NEWS:16303 ../../../build/NEWS:19108 +msgid "" +":issue:`28556`: typing.get_type_hints now finds the right globalns for " +"classes and modules by default (when no ``globalns`` was specified by the " +"caller)." +msgstr "" + +#: ../../../build/NEWS:16306 ../../../build/NEWS:19111 +msgid "" +":issue:`28556`: Speed improvements to the ``typing`` module. Original PRs " +"by Ivan Levkivskyi and Mitar." +msgstr "" + +#: ../../../build/NEWS:16309 ../../../build/NEWS:19114 +msgid "" +":issue:`31544`: The C accelerator module of ElementTree ignored exceptions " +"raised when looking up TreeBuilder target methods in XMLParser()." +msgstr "" + +#: ../../../build/NEWS:16312 ../../../build/NEWS:19117 +msgid "" +":issue:`31234`: socket.create_connection() now fixes manually a reference " +"cycle: clear the variable storing the last exception on success." +msgstr "" + +#: ../../../build/NEWS:16315 ../../../build/NEWS:19120 +msgid ":issue:`31457`: LoggerAdapter objects can now be nested." +msgstr "" + +#: ../../../build/NEWS:16317 +msgid "" +":issue:`31431`: SSLContext.check_hostname now automatically sets " +"SSLContext.verify_mode to ssl.CERT_REQUIRED instead of failing with a " +"ValueError." +msgstr "" + +#: ../../../build/NEWS:16321 +msgid "" +":issue:`31233`: socketserver.ThreadingMixIn now keeps a list of non-daemonic" +" threads to wait until all these threads complete in server_close()." +msgstr "" + +#: ../../../build/NEWS:16324 +msgid "" +":issue:`28638`: Changed the implementation strategy for " +"collections.namedtuple() to substantially reduce the use of exec() in favor " +"of precomputed methods. As a result, the *verbose* parameter and *_source* " +"attribute are no longer supported. The benefits include 1) having a smaller" +" memory footprint for applications using multiple named tuples, 2) faster " +"creation of the named tuple class (approx 4x to 6x depending on how it is " +"measured), and 3) minor speed-ups for instance creation using __new__, " +"_make, and _replace. (The primary patch contributor is Jelle Zijlstra with " +"further improvements by INADA Naoki, Serhiy Storchaka, and Raymond " +"Hettinger.)" +msgstr "" + +#: ../../../build/NEWS:16335 ../../../build/NEWS:19122 +msgid "" +":issue:`31400`: Improves SSL error handling to avoid losing error numbers." +msgstr "" + +#: ../../../build/NEWS:16337 +msgid "" +":issue:`27629`: Make return types of SSLContext.wrap_bio() and " +"SSLContext.wrap_socket() customizable." +msgstr "" + +#: ../../../build/NEWS:16340 ../../../build/NEWS:19124 +msgid "" +":issue:`28958`: ssl.SSLContext() now uses OpenSSL error information when a " +"context cannot be instantiated." +msgstr "" + +#: ../../../build/NEWS:16343 +msgid "" +":issue:`28182`: The SSL module now raises SSLCertVerificationError when " +"OpenSSL fails to verify the peer's certificate. The exception contains more " +"information about the error." +msgstr "" + +#: ../../../build/NEWS:16347 ../../../build/NEWS:19127 +msgid "" +":issue:`27340`: SSLSocket.sendall() now uses memoryview to create slices of " +"data. This fixes support for all bytes-like object. It is also more " +"efficient and avoids costly copies." +msgstr "" + +#: ../../../build/NEWS:16351 +msgid "" +":issue:`14191`: A new function " +"``argparse.ArgumentParser.parse_intermixed_args`` provides the ability to " +"parse command lines where there user intermixes options and positional " +"arguments." +msgstr "" + +#: ../../../build/NEWS:16356 ../../../build/NEWS:19131 +msgid "" +":issue:`31178`: Fix string concatenation bug in rare error path in the " +"subprocess module" +msgstr "" + +#: ../../../build/NEWS:16359 ../../../build/NEWS:19134 +msgid "" +":issue:`31350`: Micro-optimize :func:`asyncio._get_running_loop` to become " +"up to 10% faster." +msgstr "" + +#: ../../../build/NEWS:16362 ../../../build/NEWS:19137 +#: ../../../build/NEWS:23390 +msgid "" +":issue:`31170`: expat: Update libexpat from 2.2.3 to 2.2.4. Fix copying of " +"partial characters for UTF-8 input (libexpat bug 115): " +"https://github.com/libexpat/libexpat/issues/115" +msgstr "" + +#: ../../../build/NEWS:16366 ../../../build/NEWS:19141 +msgid ":issue:`29136`: Add TLS 1.3 cipher suites and OP_NO_TLSv1_3." +msgstr "" + +#: ../../../build/NEWS:16368 +msgid "" +":issue:`1198569`: ``string.Template`` subclasses can optionally define " +"``braceidpattern`` if they want to specify different placeholder patterns " +"inside and outside the braces. If None (the default) it falls back to " +"``idpattern``." +msgstr "" + +#: ../../../build/NEWS:16373 +msgid "" +":issue:`31326`: concurrent.futures.ProcessPoolExecutor.shutdown() now " +"explicitly closes the call queue. Moreover, shutdown(wait=True) now also " +"join the call queue thread, to prevent leaking a dangling thread." +msgstr "" + +#: ../../../build/NEWS:16377 ../../../build/NEWS:19152 +msgid "" +":issue:`27144`: The ``map()`` and ``as_completed()`` iterators in " +"``concurrent.futures`` now avoid keeping a reference to yielded objects." +msgstr "" + +#: ../../../build/NEWS:16380 +msgid "" +":issue:`31281`: Fix ``fileinput.FileInput(files, inplace=True)`` when " +"``files`` contain ``pathlib.Path`` objects." +msgstr "" + +#: ../../../build/NEWS:16383 ../../../build/NEWS:19155 +msgid "" +":issue:`10746`: Fix ctypes producing wrong :pep:`3118` type codes for " +"integer types." +msgstr "" + +#: ../../../build/NEWS:16386 +msgid "" +":issue:`27584`: ``AF_VSOCK`` has been added to the socket interface which " +"allows communication between virtual machines and their host." +msgstr "" + +#: ../../../build/NEWS:16389 ../../../build/NEWS:19158 +msgid "" +":issue:`22536`: The subprocess module now sets the filename when " +"FileNotFoundError is raised on POSIX systems due to the executable or cwd " +"not being found." +msgstr "" + +#: ../../../build/NEWS:16393 +msgid "" +":issue:`29741`: Update some methods in the _pyio module to also accept " +"integer types. Patch by Oren Milman." +msgstr "" + +#: ../../../build/NEWS:16396 ../../../build/NEWS:19162 +msgid "" +":issue:`31249`: concurrent.futures: WorkItem.run() used by " +"ThreadPoolExecutor now breaks a reference cycle between an exception object " +"and the WorkItem object." +msgstr "" + +#: ../../../build/NEWS:16400 ../../../build/NEWS:19166 +msgid "" +":issue:`31247`: xmlrpc.server now explicitly breaks reference cycles when " +"using sys.exc_info() in code handling exceptions." +msgstr "" + +#: ../../../build/NEWS:16403 +msgid "" +":issue:`23835`: configparser: reading defaults in the ``ConfigParser()`` " +"constructor is now using ``read_dict()``, making its behavior consistent " +"with the rest of the parser. Non-string keys and values in the defaults " +"dictionary are now being implicitly converted to strings. Patch by James " +"Tocknell." +msgstr "" + +#: ../../../build/NEWS:16409 ../../../build/NEWS:18083 +msgid "" +":issue:`31238`: pydoc: the stop() method of the private ServerThread class " +"now waits until DocServer.serve_until_quit() completes and then explicitly " +"sets its docserver attribute to None to break a reference cycle." +msgstr "" + +#: ../../../build/NEWS:16413 +msgid "" +":issue:`5001`: Many asserts in `multiprocessing` are now more informative, " +"and some error types have been changed to more specific ones." +msgstr "" + +#: ../../../build/NEWS:16416 +msgid ":issue:`31109`: Convert zipimport to use Argument Clinic." +msgstr "" + +#: ../../../build/NEWS:16418 ../../../build/NEWS:19169 +msgid "" +":issue:`30102`: The ssl and hashlib modules now call " +"OPENSSL_add_all_algorithms_noconf() on OpenSSL < 1.1.0. The function detects" +" CPU features and enables optimizations on some CPU architectures such as " +"POWER8. Patch is based on research from Gustavo Serra Scalet." +msgstr "" + +#: ../../../build/NEWS:16423 +msgid "" +":issue:`18966`: Non-daemonic threads created by a multiprocessing.Process " +"are now joined on child exit." +msgstr "" + +#: ../../../build/NEWS:16426 +msgid "" +":issue:`31183`: `dis` now works with asynchronous generator and coroutine " +"objects. Patch by George Collins based on diagnosis by Luciano Ramalho." +msgstr "" + +#: ../../../build/NEWS:16429 +msgid "" +":issue:`5001`: There are a number of uninformative asserts in the " +"`multiprocessing` module, as noted in issue 5001. This change fixes two of " +"the most potentially problematic ones, since they are in error-reporting " +"code, in the `multiprocessing.managers.convert_to_error` function. (It also " +"makes more informative a ValueError message.) The only potentially " +"problematic change is that the AssertionError is now a TypeError; however, " +"this should also help distinguish it from an AssertionError being *reported*" +" by the function/its caller (such as in issue 31169). - Patch by Allen W. " +"Smith (drallensmith on github)." +msgstr "" + +#: ../../../build/NEWS:16439 ../../../build/NEWS:19174 +msgid ":issue:`31185`: Fixed miscellaneous errors in asyncio speedup module." +msgstr "" + +#: ../../../build/NEWS:16441 +msgid "" +":issue:`31151`: socketserver.ForkingMixIn.server_close() now waits until all" +" child processes completed to prevent leaking zombie processes." +msgstr "" + +#: ../../../build/NEWS:16444 +msgid "" +":issue:`31072`: Add an ``include_file`` parameter to " +"``zipapp.create_archive()``" +msgstr "" + +#: ../../../build/NEWS:16447 +msgid "" +":issue:`24700`: Optimize array.array comparison. It is now from 10x up to " +"70x faster when comparing arrays holding values of the same integer type." +msgstr "" + +#: ../../../build/NEWS:16450 ../../../build/NEWS:19176 +msgid "" +":issue:`31135`: ttk: fix the destroy() method of LabeledScale and OptionMenu" +" classes. Call the parent destroy() method even if the used attribute " +"doesn't exist. The LabeledScale.destroy() method now also explicitly clears " +"label and scale attributes to help the garbage collector to destroy all " +"widgets." +msgstr "" + +#: ../../../build/NEWS:16456 ../../../build/NEWS:19182 +msgid "" +":issue:`31107`: Fix `copyreg._slotnames()` mangled attribute calculation for" +" classes whose name begins with an underscore. Patch by Shane Harvey." +msgstr "" + +#: ../../../build/NEWS:16459 +msgid "" +":issue:`31080`: Allow `logging.config.fileConfig` to accept kwargs and/or " +"args." +msgstr "" + +#: ../../../build/NEWS:16461 +msgid "" +":issue:`30897`: ``pathlib.Path`` objects now include an ``is_mount()`` " +"method (only implemented on POSIX). This is similar to " +"``os.path.ismount(p)``. Patch by Cooper Ry Lees." +msgstr "" + +#: ../../../build/NEWS:16465 ../../../build/NEWS:19185 +msgid ":issue:`31061`: Fixed a crash when using asyncio and threads." +msgstr "" + +#: ../../../build/NEWS:16467 +msgid "" +":issue:`30987`: Added support for CAN ISO-TP protocol in the socket module." +msgstr "" + +#: ../../../build/NEWS:16469 +msgid "" +":issue:`30522`: Added a ``setStream`` method to ``logging.StreamHandler`` to" +" allow the stream to be set after creation." +msgstr "" + +#: ../../../build/NEWS:16472 ../../../build/NEWS:19187 +msgid "" +":issue:`30502`: Fix handling of long oids in ssl. Based on patch by " +"Christian Heimes." +msgstr "" + +#: ../../../build/NEWS:16475 +msgid ":issue:`5288`: Support tzinfo objects with sub-minute offsets." +msgstr "" + +#: ../../../build/NEWS:16477 +msgid "" +":issue:`30919`: Fix shared memory performance regression in multiprocessing " +"in 3.x. Shared memory used anonymous memory mappings in 2.x, while 3.x mmaps" +" actual files. Try to be careful to do as little disk I/O as possible." +msgstr "" + +#: ../../../build/NEWS:16481 +msgid "" +":issue:`26732`: Fix too many fds in processes started with the " +"\"forkserver\" method. A child process would inherit as many fds as the " +"number of still-running children." +msgstr "" + +#: ../../../build/NEWS:16485 ../../../build/NEWS:19197 +#: ../../../build/NEWS:23491 +msgid "" +":issue:`29403`: Fix ``unittest.mock``'s autospec to not fail on method-bound" +" builtin functions. Patch by Aaron Gallagher." +msgstr "" + +#: ../../../build/NEWS:16488 ../../../build/NEWS:19200 +#: ../../../build/NEWS:23494 +msgid ":issue:`30961`: Fix decrementing a borrowed reference in tracemalloc." +msgstr "" + +#: ../../../build/NEWS:16490 +msgid "" +":issue:`19896`: Fix multiprocessing.sharedctypes to recognize typecodes " +"``'q'`` and ``'Q'``." +msgstr "" + +#: ../../../build/NEWS:16493 +msgid "" +":issue:`30946`: Remove obsolete code in readline module for platforms where " +"GNU readline is older than 2.1 or where select() is not available." +msgstr "" + +#: ../../../build/NEWS:16496 ../../../build/NEWS:19202 +msgid "" +":issue:`25684`: Change ``ttk.OptionMenu`` radiobuttons to be unique across " +"instances of ``OptionMenu``." +msgstr "" + +#: ../../../build/NEWS:16499 ../../../build/NEWS:19205 +#: ../../../build/NEWS:23496 +msgid "" +":issue:`30886`: Fix multiprocessing.Queue.join_thread(): it now waits until " +"the thread completes, even if the thread was started by the same process " +"which created the queue." +msgstr "" + +#: ../../../build/NEWS:16503 ../../../build/NEWS:19209 +#: ../../../build/NEWS:23500 +msgid "" +":issue:`29854`: Fix segfault in readline when using readline's history-size " +"option. Patch by Nir Soffer." +msgstr "" + +#: ../../../build/NEWS:16506 +msgid "" +":issue:`30794`: Added multiprocessing.Process.kill method to terminate using" +" the SIGKILL signal on Unix." +msgstr "" + +#: ../../../build/NEWS:16509 ../../../build/NEWS:19212 +msgid ":issue:`30319`: socket.close() now ignores ECONNRESET error." +msgstr "" + +#: ../../../build/NEWS:16511 ../../../build/NEWS:19214 +msgid "" +":issue:`30828`: Fix out of bounds write in " +"`asyncio.CFuture.remove_done_callback()`." +msgstr "" + +#: ../../../build/NEWS:16514 +msgid "" +":issue:`30302`: Use keywords in the ``repr`` of ``datetime.timedelta``." +msgstr "" + +#: ../../../build/NEWS:16516 ../../../build/NEWS:19217 +#: ../../../build/NEWS:23503 +msgid "" +":issue:`30807`: signal.setitimer() may disable the timer when passed a tiny " +"value. Tiny values (such as 1e-6) are valid non-zero values for setitimer()," +" which is specified as taking microsecond-resolution intervals. However, on " +"some platform, our conversion routine could convert 1e-6 into a zero " +"interval, therefore disabling the timer instead of (re-)scheduling it." +msgstr "" + +#: ../../../build/NEWS:16523 ../../../build/NEWS:19224 +#: ../../../build/NEWS:23510 +msgid "" +":issue:`30441`: Fix bug when modifying os.environ while iterating over it" +msgstr "" + +#: ../../../build/NEWS:16525 +msgid "" +":issue:`29585`: Avoid importing ``sysconfig`` from ``site`` to improve " +"startup speed. Python startup is about 5% faster on Linux and 30% faster on " +"macOS." +msgstr "" + +#: ../../../build/NEWS:16528 +msgid "" +":issue:`29293`: Add missing parameter \"n\" on " +"multiprocessing.Condition.notify(). The doc claims multiprocessing.Condition" +" behaves like threading.Condition, but its notify() method lacked the " +"optional \"n\" argument (to specify the number of sleepers to wake up) that " +"threading.Condition.notify() accepts." +msgstr "" + +#: ../../../build/NEWS:16534 ../../../build/NEWS:19226 +#: ../../../build/NEWS:23512 +msgid "" +":issue:`30532`: Fix email header value parser dropping folding white space " +"in certain cases." +msgstr "" + +#: ../../../build/NEWS:16537 +msgid "" +":issue:`30596`: Add a ``close()`` method to ``multiprocessing.Process``." +msgstr "" + +#: ../../../build/NEWS:16539 ../../../build/NEWS:19148 +msgid "" +":issue:`9146`: Fix a segmentation fault in _hashopenssl when standard hash " +"functions such as md5 are not available in the linked OpenSSL library. As " +"in some special FIPS-140 build environments." +msgstr "" + +#: ../../../build/NEWS:16543 ../../../build/NEWS:19955 +#: ../../../build/NEWS:23515 +msgid ":issue:`29169`: Update zlib to 1.2.11." +msgstr "" + +#: ../../../build/NEWS:16545 ../../../build/NEWS:19190 +#: ../../../build/NEWS:23403 +msgid "" +":issue:`30119`: ftplib.FTP.putline() now throws ValueError on commands that " +"contains CR or LF. Patch by Dong-hee Na." +msgstr "" + +#: ../../../build/NEWS:16548 ../../../build/NEWS:19229 +#: ../../../build/NEWS:23517 +msgid "" +":issue:`30879`: os.listdir() and os.scandir() now emit bytes names when " +"called with bytes-like argument." +msgstr "" + +#: ../../../build/NEWS:16551 ../../../build/NEWS:19232 +#: ../../../build/NEWS:23520 +msgid "" +":issue:`30746`: Prohibited the '=' character in environment variable names " +"in ``os.putenv()`` and ``os.spawn*()``." +msgstr "" + +#: ../../../build/NEWS:16554 +msgid "" +":issue:`30664`: The description of a unittest subtest now preserves the " +"order of keyword arguments of TestCase.subTest()." +msgstr "" + +#: ../../../build/NEWS:16557 +msgid "" +":issue:`21071`: struct.Struct.format type is now :class:`str` instead of " +":class:`bytes`." +msgstr "" + +#: ../../../build/NEWS:16560 ../../../build/NEWS:19143 +msgid "" +":issue:`29212`: Fix concurrent.futures.thread.ThreadPoolExecutor threads to " +"have a non repr() based thread name by default when no thread_name_prefix is" +" supplied. They will now identify themselves as \"ThreadPoolExecutor-y_n\"." +msgstr "" + +#: ../../../build/NEWS:16565 ../../../build/NEWS:19235 +#: ../../../build/NEWS:23523 +msgid "" +":issue:`29755`: Fixed the lgettext() family of functions in the gettext " +"module. They now always return bytes." +msgstr "" + +#: ../../../build/NEWS:16568 ../../../build/NEWS:19568 +msgid "" +":issue:`30616`: Functional API of enum allows to create empty enums. Patched" +" by Dong-hee Na" +msgstr "" + +#: ../../../build/NEWS:16571 ../../../build/NEWS:19571 +msgid "" +":issue:`30038`: Fix race condition between signal delivery and wakeup file " +"descriptor. Patch by Nathaniel Smith." +msgstr "" + +#: ../../../build/NEWS:16574 ../../../build/NEWS:19574 +msgid "" +":issue:`23894`: lib2to3 now recognizes ``rb'...'`` and ``f'...'`` strings." +msgstr "" + +#: ../../../build/NEWS:16576 +msgid "" +":issue:`24744`: pkgutil.walk_packages function now raises ValueError if " +"*path* is a string. Patch by Sanyam Khurana." +msgstr "" + +#: ../../../build/NEWS:16579 ../../../build/NEWS:23540 +msgid ":issue:`24484`: Avoid race condition in multiprocessing cleanup." +msgstr "" + +#: ../../../build/NEWS:16581 +msgid "" +":issue:`30589`: Fix multiprocessing.Process.exitcode to return the opposite " +"of the signal number when the process is killed by a signal (instead of 255)" +" when using the \"forkserver\" method." +msgstr "" + +#: ../../../build/NEWS:16585 ../../../build/NEWS:19595 +#: ../../../build/NEWS:23542 +msgid "" +":issue:`28994`: The traceback no longer displayed for SystemExit raised in a" +" callback registered by atexit." +msgstr "" + +#: ../../../build/NEWS:16588 ../../../build/NEWS:19598 +#: ../../../build/NEWS:23545 +msgid "" +":issue:`30508`: Don't log exceptions if Task/Future \"cancel()\" method was " +"called." +msgstr "" + +#: ../../../build/NEWS:16591 +msgid "" +":issue:`30645`: Fix path calculation in `imp.load_package()`, fixing it for " +"cases when a package is only shipped with bytecodes. Patch by Alexandru " +"Ardelean." +msgstr "" + +#: ../../../build/NEWS:16595 +msgid "" +":issue:`11822`: The dis.dis() function now is able to disassemble nested " +"code objects." +msgstr "" + +#: ../../../build/NEWS:16598 +msgid "" +":issue:`30624`: selectors does not take KeyboardInterrupt and SystemExit " +"into account, leaving a fd in a bad state in case of error. Patch by " +"Giampaolo Rodola'." +msgstr "" + +#: ../../../build/NEWS:16602 ../../../build/NEWS:19193 +msgid "" +":issue:`30595`: multiprocessing.Queue.get() with a timeout now polls its " +"reader in non-blocking mode if it succeeded to acquire the lock but the " +"acquire took longer than the timeout." +msgstr "" + +#: ../../../build/NEWS:16606 ../../../build/NEWS:19601 +#: ../../../build/NEWS:23548 +msgid "" +":issue:`28556`: Updates to typing module: Add generic AsyncContextManager, " +"add support for ContextManager on all versions. Original PRs by Jelle " +"Zijlstra and Ivan Levkivskyi" +msgstr "" + +#: ../../../build/NEWS:16610 ../../../build/NEWS:19590 +msgid "" +":issue:`30605`: re.compile() no longer raises a BytesWarning when compiling " +"a bytes instance with misplaced inline modifier. Patch by Roy Williams." +msgstr "" + +#: ../../../build/NEWS:16613 ../../../build/NEWS:19605 +#: ../../../build/NEWS:23552 +msgid "" +":issue:`29870`: Fix ssl sockets leaks when connection is aborted in " +"asyncio/ssl implementation. Patch by Michaël Sghaïer." +msgstr "" + +#: ../../../build/NEWS:16616 ../../../build/NEWS:19608 +#: ../../../build/NEWS:23555 +msgid "" +":issue:`29743`: Closing transport during handshake process leaks open " +"socket. Patch by Nikolay Kim" +msgstr "" + +#: ../../../build/NEWS:16619 ../../../build/NEWS:19611 +#: ../../../build/NEWS:23558 +msgid "" +":issue:`27585`: Fix waiter cancellation in asyncio.Lock. Patch by Mathieu " +"Sornay." +msgstr "" + +#: ../../../build/NEWS:16622 +msgid "" +":issue:`30014`: modify() method of poll(), epoll() and devpoll() based " +"classes of selectors module is around 10% faster. Patch by Giampaolo " +"Rodola'." +msgstr "" + +#: ../../../build/NEWS:16625 ../../../build/NEWS:19614 +#: ../../../build/NEWS:23561 +msgid "" +":issue:`30418`: On Windows, subprocess.Popen.communicate() now also ignore " +"EINVAL on stdin.write() if the child process is still running but closed the" +" pipe." +msgstr "" + +#: ../../../build/NEWS:16629 +msgid "" +":issue:`30463`: Addded empty __slots__ to abc.ABC. This allows subclassers " +"to deny __dict__ and __weakref__ creation. Patch by Aaron Hall." +msgstr "" + +#: ../../../build/NEWS:16632 +msgid ":issue:`30520`: Loggers are now pickleable." +msgstr "" + +#: ../../../build/NEWS:16634 ../../../build/NEWS:19625 +msgid "" +":issue:`30557`: faulthandler now correctly filters and displays exception " +"codes on Windows" +msgstr "" + +#: ../../../build/NEWS:16637 +msgid "" +":issue:`30526`: Add TextIOWrapper.reconfigure() and a " +"TextIOWrapper.write_through attribute." +msgstr "" + +#: ../../../build/NEWS:16640 +msgid "" +":issue:`30245`: Fix possible overflow when organize struct.pack_into error " +"message. Patch by Yuan Liu." +msgstr "" + +#: ../../../build/NEWS:16643 ../../../build/NEWS:19628 +#: ../../../build/NEWS:23565 +msgid "" +":issue:`30378`: Fix the problem that logging.handlers.SysLogHandler cannot " +"handle IPv6 addresses." +msgstr "" + +#: ../../../build/NEWS:16646 +msgid ":issue:`16500`: Allow registering at-fork handlers." +msgstr "" + +#: ../../../build/NEWS:16648 +msgid "" +":issue:`30470`: Deprecate invalid ctypes call protection on Windows. Patch " +"by Mariatta Wijaya." +msgstr "" + +#: ../../../build/NEWS:16651 ../../../build/NEWS:19634 +#: ../../../build/NEWS:23571 +msgid "" +":issue:`30414`: multiprocessing.Queue._feed background running thread do not" +" break from main loop on exception." +msgstr "" + +#: ../../../build/NEWS:16654 ../../../build/NEWS:19637 +#: ../../../build/NEWS:23574 +msgid "" +":issue:`30003`: Fix handling escape characters in HZ codec. Based on patch " +"by Ma Lin." +msgstr "" + +#: ../../../build/NEWS:16657 ../../../build/NEWS:19579 +#: ../../../build/NEWS:23533 +msgid "" +":issue:`30149`: inspect.signature() now supports callables with variable-" +"argument parameters wrapped with partialmethod. Patch by Dong-hee Na." +msgstr "" + +#: ../../../build/NEWS:16661 +msgid "" +":issue:`30436`: importlib.find_spec() raises ModuleNotFoundError instead of " +"AttributeError if the specified parent module is not a package (i.e. lacks a" +" __path__ attribute)." +msgstr "" + +#: ../../../build/NEWS:16665 ../../../build/NEWS:19640 +#: ../../../build/NEWS:23577 +msgid "" +":issue:`30301`: Fix AttributeError when using SimpleQueue.empty() under " +"*spawn* and *forkserver* start methods." +msgstr "" + +#: ../../../build/NEWS:16668 ../../../build/NEWS:19647 +#: ../../../build/NEWS:23584 +msgid "" +":issue:`30375`: Warnings emitted when compile a regular expression now " +"always point to the line in the user code. Previously they could point into" +" inners of the re module if emitted from inside of groups or conditionals." +msgstr "" + +#: ../../../build/NEWS:16672 ../../../build/NEWS:19643 +#: ../../../build/NEWS:23580 +msgid "" +":issue:`30329`: imaplib and poplib now catch the Windows socket WSAEINVAL " +"error (code 10022) on shutdown(SHUT_RDWR): An invalid operation was " +"attempted. This error occurs sometimes on SSL connections." +msgstr "" + +#: ../../../build/NEWS:16676 +msgid "" +":issue:`29196`: Removed previously deprecated in Python 2.4 classes Plist, " +"Dict and _InternalDict in the plistlib module. Dict values in the result of" +" functions readPlist() and readPlistFromBytes() are now normal dicts. You " +"no longer can use attribute access to access items of these dictionaries." +msgstr "" + +#: ../../../build/NEWS:16681 +msgid "" +":issue:`9850`: The :mod:`macpath` is now deprecated and will be removed in " +"Python 3.8." +msgstr "" + +#: ../../../build/NEWS:16684 +msgid "" +":issue:`30299`: Compiling regular expression in debug mode on CPython now " +"displays the compiled bytecode in human readable form." +msgstr "" + +#: ../../../build/NEWS:16687 ../../../build/NEWS:19651 +#: ../../../build/NEWS:23588 +msgid "" +":issue:`30048`: Fixed ``Task.cancel()`` can be ignored when the task is " +"running coroutine and the coroutine returned without any more ``await``." +msgstr "" + +#: ../../../build/NEWS:16690 ../../../build/NEWS:19654 +msgid "" +":issue:`30266`: contextlib.AbstractContextManager now supports anti-" +"registration by setting __enter__ = None or __exit__ = None, following the " +"pattern introduced in :issue:`25958`. Patch by Jelle Zijlstra." +msgstr "" + +#: ../../../build/NEWS:16694 +msgid "" +":issue:`30340`: Enhanced regular expressions optimization. This increased " +"the performance of matching some patterns up to 25 times." +msgstr "" + +#: ../../../build/NEWS:16697 ../../../build/NEWS:19658 +msgid "" +":issue:`30298`: Weaken the condition of deprecation warnings for inline " +"modifiers. Now allowed several subsequential inline modifiers at the start " +"of the pattern (e.g. ``'(?i)(?s)...'``). In verbose mode whitespaces and " +"comments now are allowed before and between inline modifiers (e.g. ``'(?x) " +"(?i) (?s)...'``)." +msgstr "" + +#: ../../../build/NEWS:16703 +msgid "" +":issue:`30285`: Optimized case-insensitive matching and searching of regular" +" expressions." +msgstr "" + +#: ../../../build/NEWS:16706 ../../../build/NEWS:19664 +#: ../../../build/NEWS:23591 +msgid "" +":issue:`29990`: Fix range checking in GB18030 decoder. Original patch by Ma" +" Lin." +msgstr "" + +#: ../../../build/NEWS:16709 +msgid "" +":issue:`29979`: rewrite cgi.parse_multipart, reusing the FieldStorage class " +"and making its results consistent with those of FieldStorage for " +"multipart/form-data requests. Patch by Pierre Quentel." +msgstr "" + +#: ../../../build/NEWS:16713 ../../../build/NEWS:19670 +#: ../../../build/NEWS:23597 +msgid "" +":issue:`30243`: Removed the __init__ methods of _json's scanner and encoder." +" Misusing them could cause memory leaks or crashes. Now scanner and encoder" +" objects are completely initialized in the __new__ methods." +msgstr "" + +#: ../../../build/NEWS:16717 +msgid "" +":issue:`30215`: Compiled regular expression objects with the re.LOCALE flag " +"no longer depend on the locale at compile time. Only the locale at matching" +" time affects the result of matching." +msgstr "" + +#: ../../../build/NEWS:16721 ../../../build/NEWS:19674 +#: ../../../build/NEWS:23601 +msgid "" +":issue:`30185`: Avoid KeyboardInterrupt tracebacks in forkserver helper " +"process when Ctrl-C is received." +msgstr "" + +#: ../../../build/NEWS:16724 +msgid "" +":issue:`30103`: binascii.b2a_uu() and uu.encode() now support using ``'`'`` " +"as zero instead of space." +msgstr "" + +#: ../../../build/NEWS:16727 ../../../build/NEWS:19677 +#: ../../../build/NEWS:23604 +msgid "" +":issue:`28556`: Various updates to typing module: add typing.NoReturn type, " +"use WrapperDescriptorType, minor bug-fixes. Original PRs by Jim Fasarakis-" +"Hilliard and Ivan Levkivskyi." +msgstr "" + +#: ../../../build/NEWS:16731 ../../../build/NEWS:19681 +#: ../../../build/NEWS:23608 +msgid "" +":issue:`30205`: Fix getsockname() for unbound AF_UNIX sockets on Linux." +msgstr "" + +#: ../../../build/NEWS:16733 +msgid "" +":issue:`30228`: The seek() and tell() methods of io.FileIO now set the " +"internal seekable attribute to avoid one syscall on open() (in buffered or " +"text mode)." +msgstr "" + +#: ../../../build/NEWS:16737 +msgid "" +":issue:`30190`: unittest's assertAlmostEqual and assertNotAlmostEqual " +"provide a better message in case of failure which includes the difference " +"between left and right arguments. (patch by Giampaolo Rodola')" +msgstr "" + +#: ../../../build/NEWS:16741 +msgid ":issue:`30101`: Add support for curses.A_ITALIC." +msgstr "" + +#: ../../../build/NEWS:16743 ../../../build/NEWS:19618 +msgid "" +":issue:`29822`: inspect.isabstract() now works during __init_subclass__. " +"Patch by Nate Soares." +msgstr "" + +#: ../../../build/NEWS:16746 ../../../build/NEWS:19631 +#: ../../../build/NEWS:23568 +msgid "" +":issue:`29960`: Preserve generator state when _random.Random.setstate() " +"raises an exception. Patch by Bryan Olson." +msgstr "" + +#: ../../../build/NEWS:16749 ../../../build/NEWS:19683 +#: ../../../build/NEWS:23610 +msgid "" +":issue:`30070`: Fixed leaks and crashes in errors handling in the parser " +"module." +msgstr "" + +#: ../../../build/NEWS:16752 +msgid "" +":issue:`22352`: Column widths in the output of dis.dis() are now adjusted " +"for large line numbers and instruction offsets." +msgstr "" + +#: ../../../build/NEWS:16755 ../../../build/NEWS:19686 +#: ../../../build/NEWS:23613 +msgid "" +":issue:`30061`: Fixed crashes in IOBase methods __next__() and readlines() " +"when readline() or __next__() respectively return non-sizeable object. Fixed" +" possible other errors caused by not checking results of PyObject_Size(), " +"PySequence_Size(), or PyMapping_Size()." +msgstr "" + +#: ../../../build/NEWS:16760 +msgid "" +":issue:`30218`: Fix PathLike support for shutil.unpack_archive. Patch by " +"Jelle Zijlstra." +msgstr "" + +#: ../../../build/NEWS:16763 +msgid "" +":issue:`10076`: Compiled regular expression and match objects in the re " +"module now support copy.copy() and copy.deepcopy() (they are considered " +"atomic)." +msgstr "" + +#: ../../../build/NEWS:16766 ../../../build/NEWS:19695 +#: ../../../build/NEWS:23618 +msgid "" +":issue:`30068`: _io._IOBase.readlines will check if it's closed first when " +"hint is present." +msgstr "" + +#: ../../../build/NEWS:16769 ../../../build/NEWS:19698 +#: ../../../build/NEWS:23621 +msgid "" +":issue:`29694`: Fixed race condition in pathlib mkdir with flags " +"parents=True. Patch by Armin Rigo." +msgstr "" + +#: ../../../build/NEWS:16772 ../../../build/NEWS:19701 +#: ../../../build/NEWS:23624 +msgid "" +":issue:`29692`: Fixed arbitrary unchaining of RuntimeError exceptions in " +"contextlib.contextmanager. Patch by Siddharth Velankar." +msgstr "" + +#: ../../../build/NEWS:16775 +msgid "" +":issue:`26187`: Test that sqlite3 trace callback is not called multiple " +"times when schema is changing. Indirectly fixed by switching to use " +"sqlite3_prepare_v2() in :issue:`9303`. Patch by Aviv Palivoda." +msgstr "" + +#: ../../../build/NEWS:16779 ../../../build/NEWS:19691 +msgid "" +":issue:`30017`: Allowed calling the close() method of the zip entry writer " +"object multiple times. Writing to a closed writer now always produces a " +"ValueError." +msgstr "" + +#: ../../../build/NEWS:16783 ../../../build/NEWS:19704 +#: ../../../build/NEWS:23627 +msgid "" +":issue:`29998`: Pickling and copying ImportError now preserves name and path" +" attributes." +msgstr "" + +#: ../../../build/NEWS:16786 +msgid ":issue:`29995`: re.escape() now escapes only regex special characters." +msgstr "" + +#: ../../../build/NEWS:16788 +msgid "" +":issue:`29962`: Add math.remainder operation, implementing remainder as " +"specified in IEEE 754." +msgstr "" + +#: ../../../build/NEWS:16791 +msgid "" +":issue:`29649`: Improve struct.pack_into() exception messages for problems " +"with the buffer size and offset. Patch by Andrew Nester." +msgstr "" + +#: ../../../build/NEWS:16794 +msgid "" +":issue:`29654`: Support If-Modified-Since HTTP header (browser cache). " +"Patch by Pierre Quentel." +msgstr "" + +#: ../../../build/NEWS:16797 ../../../build/NEWS:19587 +#: ../../../build/NEWS:23537 +msgid "" +":issue:`29931`: Fixed comparison check for ipaddress.ip_interface objects. " +"Patch by Sanjay Sundaresan." +msgstr "" + +#: ../../../build/NEWS:16800 ../../../build/NEWS:19707 +msgid "" +":issue:`29953`: Fixed memory leaks in the replace() method of datetime and " +"time objects when pass out of bound fold argument." +msgstr "" + +#: ../../../build/NEWS:16803 ../../../build/NEWS:19710 +#: ../../../build/NEWS:23630 +msgid "" +":issue:`29942`: Fix a crash in itertools.chain.from_iterable when " +"encountering long runs of empty iterables." +msgstr "" + +#: ../../../build/NEWS:16806 +msgid ":issue:`10030`: Sped up reading encrypted ZIP files by 2 times." +msgstr "" + +#: ../../../build/NEWS:16808 +msgid "" +":issue:`29204`: Element.getiterator() and the html parameter of XMLParser() " +"were deprecated only in the documentation (since Python 3.2 and 3.4 " +"correspondingly). Now using them emits a deprecation warning." +msgstr "" + +#: ../../../build/NEWS:16812 ../../../build/NEWS:19713 +#: ../../../build/NEWS:23633 +msgid "" +":issue:`27863`: Fixed multiple crashes in ElementTree caused by race " +"conditions and wrong types." +msgstr "" + +#: ../../../build/NEWS:16815 +msgid "" +":issue:`25996`: Added support of file descriptors in os.scandir() on Unix. " +"os.fwalk() is sped up by 2 times by using os.scandir()." +msgstr "" + +#: ../../../build/NEWS:16818 ../../../build/NEWS:19716 +#: ../../../build/NEWS:23636 +msgid "" +":issue:`28699`: Fixed a bug in pools in multiprocessing.pool that raising an" +" exception at the very first of an iterable may swallow the exception or " +"make the program hang. Patch by Davin Potts and Xiang Zhang." +msgstr "" + +#: ../../../build/NEWS:16822 ../../../build/NEWS:19576 +#: ../../../build/NEWS:23530 +msgid "" +":issue:`23890`: unittest.TestCase.assertRaises() now manually breaks a " +"reference cycle to not keep objects alive longer than expected." +msgstr "" + +#: ../../../build/NEWS:16825 +msgid "" +":issue:`29901`: The zipapp module now supports general path-like objects, " +"not just pathlib.Path." +msgstr "" + +#: ../../../build/NEWS:16828 ../../../build/NEWS:19720 +#: ../../../build/NEWS:23640 +msgid "" +":issue:`25803`: Avoid incorrect errors raised by Path.mkdir(exist_ok=True) " +"when the OS gives priority to errors such as EACCES over EEXIST." +msgstr "" + +#: ../../../build/NEWS:16831 ../../../build/NEWS:19723 +#: ../../../build/NEWS:23643 +msgid "" +":issue:`29861`: Release references to tasks, their arguments and their " +"results as soon as they are finished in multiprocessing.Pool." +msgstr "" + +#: ../../../build/NEWS:16834 +msgid "" +":issue:`19930`: The mode argument of os.makedirs() no longer affects the " +"file permission bits of newly-created intermediate-level directories." +msgstr "" + +#: ../../../build/NEWS:16837 ../../../build/NEWS:19726 +#: ../../../build/NEWS:23646 +msgid "" +":issue:`29884`: faulthandler: Restore the old sigaltstack during teardown. " +"Patch by Christophe Zeitouny." +msgstr "" + +#: ../../../build/NEWS:16840 ../../../build/NEWS:19729 +#: ../../../build/NEWS:23649 +msgid "" +":issue:`25455`: Fixed crashes in repr of recursive buffered file-like " +"objects." +msgstr "" + +#: ../../../build/NEWS:16842 ../../../build/NEWS:19731 +#: ../../../build/NEWS:23651 +msgid "" +":issue:`29800`: Fix crashes in partial.__repr__ if the keys of " +"partial.keywords are not strings. Patch by Michael Seifert." +msgstr "" + +#: ../../../build/NEWS:16845 ../../../build/NEWS:19737 +#: ../../../build/NEWS:23657 +msgid "" +":issue:`8256`: Fixed possible failing or crashing input() if attributes " +"\"encoding\" or \"errors\" of sys.stdin or sys.stdout are not set or are not" +" strings." +msgstr "" + +#: ../../../build/NEWS:16849 +msgid "" +":issue:`28692`: Using non-integer value for selecting a plural form in " +"gettext is now deprecated." +msgstr "" + +#: ../../../build/NEWS:16852 +msgid "" +":issue:`26121`: Use C library implementation for math functions erf() and " +"erfc()." +msgstr "" + +#: ../../../build/NEWS:16855 +msgid "" +":issue:`29619`: os.stat() and os.DirEntry.inode() now convert inode (st_ino)" +" using unsigned integers." +msgstr "" + +#: ../../../build/NEWS:16858 +msgid "" +":issue:`28298`: Fix a bug that prevented array 'Q', 'L' and 'I' from " +"accepting big intables (objects that have __int__) as elements." +msgstr "" + +#: ../../../build/NEWS:16861 +msgid "" +":issue:`29645`: Speed up importing the webbrowser module. " +"webbrowser.register() is now thread-safe." +msgstr "" + +#: ../../../build/NEWS:16864 ../../../build/NEWS:19745 +msgid "" +":issue:`28231`: The zipfile module now accepts path-like objects for " +"external paths." +msgstr "" + +#: ../../../build/NEWS:16867 ../../../build/NEWS:19748 +msgid "" +":issue:`26915`: index() and count() methods of collections.abc.Sequence now " +"check identity before checking equality when do comparisons." +msgstr "" + +#: ../../../build/NEWS:16870 +msgid ":issue:`28682`: Added support for bytes paths in os.fwalk()." +msgstr "" + +#: ../../../build/NEWS:16872 +msgid "" +":issue:`29728`: Add new :data:`socket.TCP_NOTSENT_LOWAT` (Linux 3.12) " +"constant. Patch by Nathaniel J. Smith." +msgstr "" + +#: ../../../build/NEWS:16875 ../../../build/NEWS:19957 +msgid "" +":issue:`29623`: Allow use of path-like object as a single argument in " +"ConfigParser.read(). Patch by David Ellis." +msgstr "" + +#: ../../../build/NEWS:16878 +msgid "" +":issue:`9303`: Migrate sqlite3 module to _v2 API. Patch by Aviv Palivoda." +msgstr "" + +#: ../../../build/NEWS:16880 ../../../build/NEWS:19960 +msgid "" +":issue:`28963`: Fix out of bound iteration in " +"asyncio.Future.remove_done_callback implemented in C." +msgstr "" + +#: ../../../build/NEWS:16883 ../../../build/NEWS:19963 +#: ../../../build/NEWS:23669 +msgid "" +":issue:`29704`: asyncio.subprocess.SubprocessStreamProtocol no longer closes" +" before all pipes are closed." +msgstr "" + +#: ../../../build/NEWS:16886 ../../../build/NEWS:19966 +msgid "" +":issue:`29271`: Fix Task.current_task and Task.all_tasks implemented in C to" +" accept None argument as their pure Python implementation." +msgstr "" + +#: ../../../build/NEWS:16889 ../../../build/NEWS:19969 +#: ../../../build/NEWS:23672 +msgid "" +":issue:`29703`: Fix asyncio to support instantiation of new event loops in " +"child processes." +msgstr "" + +#: ../../../build/NEWS:16892 ../../../build/NEWS:19751 +#: ../../../build/NEWS:23665 +msgid "" +":issue:`29615`: SimpleXMLRPCDispatcher no longer chains KeyError (or any " +"other exception) to exception(s) raised in the dispatched methods. Patch by " +"Petr Motejlek." +msgstr "" + +#: ../../../build/NEWS:16896 +msgid "" +":issue:`7769`: Method register_function() of " +"xmlrpc.server.SimpleXMLRPCDispatcher and its subclasses can now be used as a" +" decorator." +msgstr "" + +#: ../../../build/NEWS:16900 ../../../build/NEWS:19972 +#: ../../../build/NEWS:23675 +msgid "" +":issue:`29376`: Fix assertion error in threading._DummyThread.is_alive()." +msgstr "" + +#: ../../../build/NEWS:16902 ../../../build/NEWS:19974 +msgid "" +":issue:`28624`: Add a test that checks that cwd parameter of Popen() accepts" +" PathLike objects. Patch by Sayan Chowdhury." +msgstr "" + +#: ../../../build/NEWS:16905 ../../../build/NEWS:19977 +msgid "" +":issue:`28518`: Start a transaction implicitly before a DML statement. Patch" +" by Aviv Palivoda." +msgstr "" + +#: ../../../build/NEWS:16908 ../../../build/NEWS:19734 +#: ../../../build/NEWS:23654 +msgid "" +":issue:`29742`: get_extra_info() raises exception if get called on closed " +"ssl transport. Patch by Nikolay Kim." +msgstr "" + +#: ../../../build/NEWS:16911 +msgid "" +":issue:`16285`: urllib.parse.quote is now based on RFC 3986 and hence " +"includes '~' in the set of characters that is not quoted by default. Patch " +"by Christian Theune and Ratnadeep Debnath." +msgstr "" + +#: ../../../build/NEWS:16915 ../../../build/NEWS:19980 +#: ../../../build/NEWS:23683 +msgid "" +":issue:`29532`: Altering a kwarg dictionary passed to functools.partial() no" +" longer affects a partial object after creation." +msgstr "" + +#: ../../../build/NEWS:16918 ../../../build/NEWS:19983 +#: ../../../build/NEWS:23677 +msgid "" +":issue:`29110`: Fix file object leak in aifc.open() when file is given as a " +"filesystem path and is not in valid AIFF format. Patch by Anthony Zhang." +msgstr "" + +#: ../../../build/NEWS:16921 +msgid "" +":issue:`22807`: Add uuid.SafeUUID and uuid.UUID.is_safe to relay information" +" from the platform about whether generated UUIDs are generated with a " +"multiprocessing safe method." +msgstr "" + +#: ../../../build/NEWS:16925 +msgid "" +":issue:`29576`: Improve some deprecations in importlib. Some deprecated " +"methods now emit DeprecationWarnings and have better descriptive messages." +msgstr "" + +#: ../../../build/NEWS:16928 +msgid "" +":issue:`29534`: Fixed different behaviour of Decimal.from_float() for " +"_decimal and _pydecimal. Thanks Andrew Nester." +msgstr "" + +#: ../../../build/NEWS:16931 +msgid "" +":issue:`10379`: locale.format_string now supports the 'monetary' keyword " +"argument, and locale.format is deprecated." +msgstr "" + +#: ../../../build/NEWS:16934 +msgid "" +":issue:`29851`: importlib.reload() now raises ModuleNotFoundError if the " +"module lacks a spec." +msgstr "" + +#: ../../../build/NEWS:16937 ../../../build/NEWS:19986 +#: ../../../build/NEWS:23686 +msgid "" +":issue:`28556`: Various updates to typing module: typing.Counter, " +"typing.ChainMap, improved ABC caching, etc. Original PRs by Jelle Zijlstra, " +"Ivan Levkivskyi, Manuel Krebber, and Łukasz Langa." +msgstr "" + +#: ../../../build/NEWS:16941 ../../../build/NEWS:19990 +#: ../../../build/NEWS:23690 +msgid "" +":issue:`29100`: Fix datetime.fromtimestamp() regression introduced in Python" +" 3.6.0: check minimum and maximum years." +msgstr "" + +#: ../../../build/NEWS:16944 ../../../build/NEWS:19996 +#: ../../../build/NEWS:23696 +msgid ":issue:`29416`: Prevent infinite loop in pathlib.Path.mkdir" +msgstr "" + +#: ../../../build/NEWS:16946 ../../../build/NEWS:19998 +#: ../../../build/NEWS:23698 +msgid "" +":issue:`29444`: Fixed out-of-bounds buffer access in the group() method of " +"the match object. Based on patch by WGH." +msgstr "" + +#: ../../../build/NEWS:16949 +msgid "" +":issue:`29377`: Add WrapperDescriptorType, MethodWrapperType, and " +"MethodDescriptorType built-in types to types module. Original patch by " +"Manuel Krebber." +msgstr "" + +#: ../../../build/NEWS:16953 +msgid "" +":issue:`29218`: Unused install_misc command is now removed. It has been " +"documented as unused since 2000. Patch by Eric N. Vander Weele." +msgstr "" + +#: ../../../build/NEWS:16956 +msgid "" +":issue:`29368`: The extend() method is now called instead of the append() " +"method when unpickle collections.deque and other list-like objects. This can" +" speed up unpickling to 2 times." +msgstr "" + +#: ../../../build/NEWS:16960 +msgid "" +":issue:`29338`: The help of a builtin or extension class now includes the " +"constructor signature if __text_signature__ is provided for the class." +msgstr "" + +#: ../../../build/NEWS:16963 ../../../build/NEWS:20001 +#: ../../../build/NEWS:23701 +msgid "" +":issue:`29335`: Fix subprocess.Popen.wait() when the child process has " +"exited to a stopped instead of terminated state (ex: when under ptrace)." +msgstr "" + +#: ../../../build/NEWS:16966 ../../../build/NEWS:20004 +#: ../../../build/NEWS:23704 +msgid "" +":issue:`29290`: Fix a regression in argparse that help messages would wrap " +"at non-breaking spaces." +msgstr "" + +#: ../../../build/NEWS:16969 ../../../build/NEWS:20007 +#: ../../../build/NEWS:23707 +msgid ":issue:`28735`: Fixed the comparison of mock.MagickMock with mock.ANY." +msgstr "" + +#: ../../../build/NEWS:16971 +msgid ":issue:`29197`: Removed deprecated function ntpath.splitunc()." +msgstr "" + +#: ../../../build/NEWS:16973 +msgid "" +":issue:`29210`: Removed support of deprecated argument \"exclude\" in " +"tarfile.TarFile.add()." +msgstr "" + +#: ../../../build/NEWS:16976 ../../../build/NEWS:20012 +#: ../../../build/NEWS:23711 +msgid "" +":issue:`29219`: Fixed infinite recursion in the repr of uninitialized " +"ctypes.CDLL instances." +msgstr "" + +#: ../../../build/NEWS:16979 +msgid "" +":issue:`29192`: Removed deprecated features in the http.cookies module." +msgstr "" + +#: ../../../build/NEWS:16981 +msgid "" +":issue:`29193`: A format string argument for string.Formatter.format() is " +"now positional-only." +msgstr "" + +#: ../../../build/NEWS:16984 +msgid "" +":issue:`29195`: Removed support of deprecated undocumented keyword arguments" +" in methods of regular expression objects." +msgstr "" + +#: ../../../build/NEWS:16987 ../../../build/NEWS:20017 +#: ../../../build/NEWS:23714 +msgid "" +":issue:`28969`: Fixed race condition in C implementation of " +"functools.lru_cache. KeyError could be raised when cached function with full" +" cache was simultaneously called from different threads with the same " +"uncached arguments." +msgstr "" + +#: ../../../build/NEWS:16992 +msgid "" +":issue:`20804`: The unittest.mock.sentinel attributes now preserve their " +"identity when they are copied or pickled." +msgstr "" + +#: ../../../build/NEWS:16995 ../../../build/NEWS:20022 +#: ../../../build/NEWS:23719 +msgid "" +":issue:`29142`: In urllib.request, suffixes in no_proxy environment variable" +" with leading dots could match related hostnames again (e.g. .b.c matches " +"a.b.c). Patch by Milan Oberkirch." +msgstr "" + +#: ../../../build/NEWS:16999 ../../../build/NEWS:20026 +#: ../../../build/NEWS:23680 +msgid "" +":issue:`28961`: Fix unittest.mock._Call helper: don't ignore the name " +"parameter anymore. Patch written by Jiajun Huang." +msgstr "" + +#: ../../../build/NEWS:17002 ../../../build/NEWS:20033 +#: ../../../build/NEWS:23972 +msgid "" +":issue:`15812`: inspect.getframeinfo() now correctly shows the first line of" +" a context. Patch by Sam Breese." +msgstr "" + +#: ../../../build/NEWS:17005 +msgid "" +":issue:`28985`: Update authorizer constants in sqlite3 module. Patch by " +"Dingyuan Wang." +msgstr "" + +#: ../../../build/NEWS:17008 ../../../build/NEWS:20045 +msgid ":issue:`29079`: Prevent infinite loop in pathlib.resolve() on Windows" +msgstr "" + +#: ../../../build/NEWS:17010 ../../../build/NEWS:20047 +#: ../../../build/NEWS:23978 +msgid "" +":issue:`13051`: Fixed recursion errors in large or resized " +"curses.textpad.Textbox. Based on patch by Tycho Andersen." +msgstr "" + +#: ../../../build/NEWS:17013 ../../../build/NEWS:20054 +#: ../../../build/NEWS:23985 +msgid "" +":issue:`9770`: curses.ascii predicates now work correctly with negative " +"integers." +msgstr "" + +#: ../../../build/NEWS:17016 ../../../build/NEWS:20057 +#: ../../../build/NEWS:23988 +msgid "" +":issue:`28427`: old keys should not remove new values from " +"WeakValueDictionary when collecting from another thread." +msgstr "" + +#: ../../../build/NEWS:17019 ../../../build/NEWS:20060 +#: ../../../build/NEWS:23991 +msgid ":issue:`28923`: Remove editor artifacts from Tix.py." +msgstr "" + +#: ../../../build/NEWS:17021 ../../../build/NEWS:20065 +#: ../../../build/NEWS:23993 +msgid ":issue:`28871`: Fixed a crash when deallocate deep ElementTree." +msgstr "" + +#: ../../../build/NEWS:17023 ../../../build/NEWS:20067 +#: ../../../build/NEWS:23995 +msgid "" +":issue:`19542`: Fix bugs in WeakValueDictionary.setdefault() and " +"WeakValueDictionary.pop() when a GC collection happens in another thread." +msgstr "" + +#: ../../../build/NEWS:17026 ../../../build/NEWS:20070 +msgid "" +":issue:`20191`: Fixed a crash in resource.prlimit() when passing a sequence " +"that doesn't own its elements as limits." +msgstr "" + +#: ../../../build/NEWS:17029 +msgid "" +":issue:`16255`: subprocess.Popen uses /system/bin/sh on Android as the " +"shell, instead of /bin/sh." +msgstr "" + +#: ../../../build/NEWS:17032 ../../../build/NEWS:20073 +#: ../../../build/NEWS:24001 +msgid "" +":issue:`28779`: multiprocessing.set_forkserver_preload() would crash the " +"forkserver process if a preloaded module instantiated some multiprocessing " +"objects such as locks." +msgstr "" + +#: ../../../build/NEWS:17036 ../../../build/NEWS:20080 +msgid "" +":issue:`26937`: The chown() method of the tarfile.TarFile class does not " +"fail now when the grp module cannot be imported, as for example on Android " +"platforms." +msgstr "" + +#: ../../../build/NEWS:17040 +msgid "" +":issue:`28847`: dbm.dumb now supports reading read-only files and no longer " +"writes the index file when it is not changed. A deprecation warning is now " +"emitted if the index file is missed and recreated in the 'r' and 'w' modes " +"(will be an error in future Python releases)." +msgstr "" + +#: ../../../build/NEWS:17045 +msgid "" +":issue:`27030`: Unknown escapes consisting of ``'\\'`` and an ASCII letter " +"in re.sub() replacement templates regular expressions now are errors." +msgstr "" + +#: ../../../build/NEWS:17048 ../../../build/NEWS:20261 +msgid "" +":issue:`28835`: Fix a regression introduced in warnings.catch_warnings(): " +"call warnings.showwarning() if it was overridden inside the context manager." +msgstr "" + +#: ../../../build/NEWS:17051 ../../../build/NEWS:20264 +msgid "" +":issue:`27172`: To assist with upgrades from 2.7, the previously documented " +"deprecation of ``inspect.getfullargspec()`` has been reversed. This decision" +" may be revisited again after the Python 2.7 branch is no longer officially " +"supported." +msgstr "" + +#: ../../../build/NEWS:17056 +msgid "" +":issue:`28740`: Add sys.getandroidapilevel(): return the build time API " +"version of Android as an integer. Function only available on Android." +msgstr "" + +#: ../../../build/NEWS:17059 ../../../build/NEWS:20269 +msgid "" +":issue:`26273`: Add new :data:`socket.TCP_CONGESTION` (Linux 2.6.13) and " +":data:`socket.TCP_USER_TIMEOUT` (Linux 2.6.37) constants. Patch written by " +"Omar Sandoval." +msgstr "" + +#: ../../../build/NEWS:17063 ../../../build/NEWS:20340 +msgid ":issue:`28752`: Restored the __reduce__() methods of datetime objects." +msgstr "" + +#: ../../../build/NEWS:17065 ../../../build/NEWS:20342 +msgid "" +":issue:`28727`: Regular expression patterns, _sre.SRE_Pattern objects " +"created by re.compile(), become comparable (only x==y and x!=y operators). " +"This change should fix the :issue:`18383`: don't duplicate warning filters " +"when the warnings module is reloaded (thing usually only done in unit " +"tests)." +msgstr "" + +#: ../../../build/NEWS:17070 +msgid "" +":issue:`20572`: Remove the subprocess.Popen.wait endtime parameter. It was " +"deprecated in 3.4 and undocumented prior to that." +msgstr "" + +#: ../../../build/NEWS:17073 ../../../build/NEWS:20350 +#: ../../../build/NEWS:24008 +msgid "" +":issue:`25659`: In ctypes, prevent a crash calling the from_buffer() and " +"from_buffer_copy() methods on abstract classes like Array." +msgstr "" + +#: ../../../build/NEWS:17076 +msgid "" +":issue:`28548`: In the \"http.server\" module, parse the protocol version if" +" possible, to avoid using HTTP 0.9 in some error responses." +msgstr "" + +#: ../../../build/NEWS:17079 ../../../build/NEWS:20353 +msgid "" +":issue:`19717`: Makes Path.resolve() succeed on paths that do not exist. " +"Patch by Vajrasky Kok" +msgstr "" + +#: ../../../build/NEWS:17082 ../../../build/NEWS:20356 +msgid "" +":issue:`28563`: Fixed possible DoS and arbitrary code execution when handle " +"plural form selections in the gettext module. The expression parser now " +"supports exact syntax supported by GNU gettext." +msgstr "" + +#: ../../../build/NEWS:17086 ../../../build/NEWS:20360 +#: ../../../build/NEWS:24017 +msgid "" +":issue:`28387`: Fixed possible crash in _io.TextIOWrapper deallocator when " +"the garbage collector is invoked in other thread. Based on patch by " +"Sebastian Cufre." +msgstr "" + +#: ../../../build/NEWS:17090 ../../../build/NEWS:20443 +#: ../../../build/NEWS:24021 +msgid "" +":issue:`27517`: LZMA compressor and decompressor no longer raise exceptions " +"if given empty data twice. Patch by Benjamin Fogle." +msgstr "" + +#: ../../../build/NEWS:17093 ../../../build/NEWS:20446 +#: ../../../build/NEWS:24024 +msgid ":issue:`28549`: Fixed segfault in curses's addch() with ncurses6." +msgstr "" + +#: ../../../build/NEWS:17095 ../../../build/NEWS:20448 +#: ../../../build/NEWS:24026 +msgid "" +":issue:`28449`: tarfile.open() with mode \"r\" or \"r:\" now tries to open a" +" tar file with compression before trying to open it without compression. " +"Otherwise it had 50% chance failed with ignore_zeros=True." +msgstr "" + +#: ../../../build/NEWS:17099 ../../../build/NEWS:20452 +#: ../../../build/NEWS:24030 +msgid "" +":issue:`23262`: The webbrowser module now supports Firefox 36+ and derived " +"browsers. Based on patch by Oleg Broytman." +msgstr "" + +#: ../../../build/NEWS:17102 +msgid "" +":issue:`24241`: The webbrowser in an X environment now prefers using the " +"default browser directly. Also, the webbrowser register() function now has a" +" documented 'preferred' argument, to specify browsers to be returned by " +"get() with no arguments. Patch by David Steele" +msgstr "" + +#: ../../../build/NEWS:17107 ../../../build/NEWS:20455 +#: ../../../build/NEWS:24033 +msgid "" +":issue:`27939`: Fixed bugs in tkinter.ttk.LabeledScale and tkinter.Scale " +"caused by representing the scale as float value internally in Tk. " +"tkinter.IntVar now works if float value is set to underlying Tk variable." +msgstr "" + +#: ../../../build/NEWS:17111 +msgid "" +":issue:`28255`: calendar.TextCalendar.prweek() no longer prints a space " +"after a weeks's calendar. calendar.TextCalendar.pryear() no longer prints " +"redundant newline after a year's calendar. Based on patch by Xiang Zhang." +msgstr "" + +#: ../../../build/NEWS:17115 +msgid "" +":issue:`28255`: calendar.TextCalendar.prmonth() no longer prints a space at " +"the start of new line after printing a month's calendar. Patch by Xiang " +"Zhang." +msgstr "" + +#: ../../../build/NEWS:17119 ../../../build/NEWS:20466 +#: ../../../build/NEWS:24041 +msgid "" +":issue:`20491`: The textwrap.TextWrapper class now honors non-breaking " +"spaces. Based on patch by Kaarle Ritvanen." +msgstr "" + +#: ../../../build/NEWS:17122 ../../../build/NEWS:20469 +#: ../../../build/NEWS:24044 +msgid ":issue:`28353`: os.fwalk() no longer fails on broken links." +msgstr "" + +#: ../../../build/NEWS:17124 ../../../build/NEWS:20471 +msgid "" +":issue:`28430`: Fix iterator of C implemented asyncio.Future doesn't accept " +"non-None value is passed to it.send(val)." +msgstr "" + +#: ../../../build/NEWS:17127 ../../../build/NEWS:20474 +msgid "" +":issue:`27025`: Generated names for Tkinter widgets now start by the \"!\" " +"prefix for readability." +msgstr "" + +#: ../../../build/NEWS:17130 ../../../build/NEWS:20477 +#: ../../../build/NEWS:24046 +msgid "" +":issue:`25464`: Fixed HList.header_exists() in tkinter.tix module by addin a" +" workaround to Tix library bug." +msgstr "" + +#: ../../../build/NEWS:17133 ../../../build/NEWS:20480 +msgid "" +":issue:`28488`: shutil.make_archive() no longer adds entry \"./\" to ZIP " +"archive." +msgstr "" + +#: ../../../build/NEWS:17135 ../../../build/NEWS:20482 +msgid "" +":issue:`25953`: re.sub() now raises an error for invalid numerical group " +"reference in replacement template even if the pattern is not found in the " +"string. Error message for invalid group reference now includes the group " +"index and the position of the reference. Based on patch by SilentGhost." +msgstr "" + +#: ../../../build/NEWS:17140 +msgid "" +":issue:`28469`: timeit now uses the sequence 1, 2, 5, 10, 20, 50,... instead" +" of 1, 10, 100,... for autoranging." +msgstr "" + +#: ../../../build/NEWS:17143 +msgid "" +":issue:`28115`: Command-line interface of the zipfile module now uses " +"argparse. Added support of long options." +msgstr "" + +#: ../../../build/NEWS:17146 ../../../build/NEWS:20487 +msgid "" +":issue:`18219`: Optimize csv.DictWriter for large number of columns. Patch " +"by Mariatta Wijaya." +msgstr "" + +#: ../../../build/NEWS:17149 ../../../build/NEWS:20490 +msgid "" +":issue:`28448`: Fix C implemented asyncio.Future didn't work on Windows." +msgstr "" + +#: ../../../build/NEWS:17151 +msgid "" +":issue:`23214`: In the \"io\" module, the argument to BufferedReader and " +"BytesIO's read1() methods is now optional and can be -1, matching the " +"BufferedIOBase specification." +msgstr "" + +#: ../../../build/NEWS:17155 ../../../build/NEWS:20492 +msgid "" +":issue:`28480`: Fix error building socket module when multithreading is " +"disabled." +msgstr "" + +#: ../../../build/NEWS:17158 +msgid "" +":issue:`28240`: timeit: remove ``-c/--clock`` and ``-t/--time`` command line" +" options which were deprecated since Python 3.3." +msgstr "" + +#: ../../../build/NEWS:17161 +msgid "" +":issue:`28240`: timeit now repeats the benchmarks 5 times instead of only 3 " +"to make benchmarks more reliable." +msgstr "" + +#: ../../../build/NEWS:17164 +msgid "" +":issue:`28240`: timeit autorange now uses a single loop iteration if the " +"benchmark takes less than 10 seconds, instead of 10 iterations. \"python3 -m" +" timeit -s 'import time' 'time.sleep(1)'\" now takes 4 seconds instead of 40" +" seconds." +msgstr "" + +#: ../../../build/NEWS:17169 +msgid "" +"Distutils.sdist now looks for README and setup.py files with case " +"sensitivity. This behavior matches that found in Setuptools 6.0 and later. " +"See `setuptools 100 `_ for " +"rationale." +msgstr "" + +#: ../../../build/NEWS:17174 +msgid "" +":issue:`24452`: Make webbrowser support Chrome on Mac OS X. Patch by Ned " +"Batchelder." +msgstr "" + +#: ../../../build/NEWS:17177 ../../../build/NEWS:20497 +#: ../../../build/NEWS:24053 +msgid "" +":issue:`20766`: Fix references leaked by pdb in the handling of SIGINT " +"handlers." +msgstr "" + +#: ../../../build/NEWS:17180 ../../../build/NEWS:20613 +msgid "" +":issue:`27998`: Fixed bytes path support in os.scandir() on Windows. Patch " +"by Eryk Sun." +msgstr "" + +#: ../../../build/NEWS:17183 ../../../build/NEWS:20616 +msgid ":issue:`28317`: The disassembler now decodes FORMAT_VALUE argument." +msgstr "" + +#: ../../../build/NEWS:17185 ../../../build/NEWS:20622 +msgid "" +":issue:`28380`: unittest.mock Mock autospec functions now properly support " +"assert_called, assert_not_called, and assert_called_once." +msgstr "" + +#: ../../../build/NEWS:17188 ../../../build/NEWS:20627 +msgid ":issue:`28229`: lzma module now supports pathlib." +msgstr "" + +#: ../../../build/NEWS:17190 ../../../build/NEWS:20629 +#: ../../../build/NEWS:24060 +msgid "" +":issue:`28321`: Fixed writing non-BMP characters with binary format in " +"plistlib." +msgstr "" + +#: ../../../build/NEWS:17193 ../../../build/NEWS:20632 +msgid "" +":issue:`28225`: bz2 module now supports pathlib. Initial patch by Ethan " +"Furman." +msgstr "" + +#: ../../../build/NEWS:17196 ../../../build/NEWS:20635 +msgid ":issue:`28227`: gzip now supports pathlib. Patch by Ethan Furman." +msgstr "" + +#: ../../../build/NEWS:17198 +msgid "" +":issue:`28332`: Deprecated silent truncations in socket.htons and " +"socket.ntohs. Original patch by Oren Milman." +msgstr "" + +#: ../../../build/NEWS:17201 ../../../build/NEWS:20637 +msgid "" +":issue:`27358`: Optimized merging var-keyword arguments and improved error " +"message when passing a non-mapping as a var-keyword argument." +msgstr "" + +#: ../../../build/NEWS:17204 ../../../build/NEWS:20640 +msgid "" +":issue:`28257`: Improved error message when passing a non-iterable as a var-" +"positional argument. Added opcode BUILD_TUPLE_UNPACK_WITH_CALL." +msgstr "" + +#: ../../../build/NEWS:17207 ../../../build/NEWS:20643 +#: ../../../build/NEWS:24063 +msgid "" +":issue:`28322`: Fixed possible crashes when unpickle itertools objects from " +"incorrect pickle data. Based on patch by John Leitch." +msgstr "" + +#: ../../../build/NEWS:17210 ../../../build/NEWS:20646 +msgid ":issue:`28228`: imghdr now supports pathlib." +msgstr "" + +#: ../../../build/NEWS:17212 ../../../build/NEWS:20648 +msgid ":issue:`28226`: compileall now supports pathlib." +msgstr "" + +#: ../../../build/NEWS:17214 ../../../build/NEWS:20650 +msgid "" +":issue:`28314`: Fix function declaration (C flags) for the getiterator() " +"method of xml.etree.ElementTree.Element." +msgstr "" + +#: ../../../build/NEWS:17217 ../../../build/NEWS:20653 +msgid "" +":issue:`28148`: Stop using localtime() and gmtime() in the time module. " +"Introduced platform independent _PyTime_localtime API that is similar to " +"POSIX localtime_r, but available on all platforms. Patch by Ed Schouten." +msgstr "" + +#: ../../../build/NEWS:17221 ../../../build/NEWS:20657 +#: ../../../build/NEWS:24072 +msgid "" +":issue:`28253`: Fixed calendar functions for extreme months: 0001-01 and " +"9999-12. Methods itermonthdays() and itermonthdays2() are reimplemented so " +"that they don't call itermonthdates() which can cause datetime.date " +"under/overflow." +msgstr "" + +#: ../../../build/NEWS:17226 ../../../build/NEWS:20662 +#: ../../../build/NEWS:24077 +msgid "" +":issue:`28275`: Fixed possible use after free in the decompress() methods of" +" the LZMADecompressor and BZ2Decompressor classes. Original patch by John " +"Leitch." +msgstr "" + +#: ../../../build/NEWS:17230 ../../../build/NEWS:20666 +#: ../../../build/NEWS:24081 +msgid "" +":issue:`27897`: Fixed possible crash in " +"sqlite3.Connection.create_collation() if pass invalid string-like object as " +"a name. Patch by Xiang Zhang." +msgstr "" + +#: ../../../build/NEWS:17233 ../../../build/NEWS:20669 +msgid "" +":issue:`18844`: random.choices() now has k as a keyword-only argument to " +"improve the readability of common cases and come into line with the " +"signature used in other languages." +msgstr "" + +#: ../../../build/NEWS:17237 ../../../build/NEWS:20673 +#: ../../../build/NEWS:24084 +msgid "" +":issue:`18893`: Fix invalid exception handling in " +"Lib/ctypes/macholib/dyld.py. Patch by Madison May." +msgstr "" + +#: ../../../build/NEWS:17240 ../../../build/NEWS:20676 +msgid "" +":issue:`27611`: Fixed support of default root window in the tkinter.tix " +"module. Added the master parameter in the DisplayStyle constructor." +msgstr "" + +#: ../../../build/NEWS:17243 ../../../build/NEWS:20679 +#: ../../../build/NEWS:24089 +msgid "" +":issue:`27348`: In the traceback module, restore the formatting of exception" +" messages like \"Exception: None\". This fixes a regression introduced in " +"3.5a2." +msgstr "" + +#: ../../../build/NEWS:17247 ../../../build/NEWS:20683 +#: ../../../build/NEWS:24093 +msgid "" +":issue:`25651`: Allow falsy values to be used for msg parameter of " +"subTest()." +msgstr "" + +#: ../../../build/NEWS:17249 ../../../build/NEWS:20685 +msgid "" +":issue:`27778`: Fix a memory leak in os.getrandom() when the getrandom() is " +"interrupted by a signal and a signal handler raises a Python exception." +msgstr "" + +#: ../../../build/NEWS:17252 ../../../build/NEWS:20688 +msgid "" +":issue:`28200`: Fix memory leak on Windows in the os module (fix " +"path_converter() function)." +msgstr "" + +#: ../../../build/NEWS:17255 ../../../build/NEWS:20691 +msgid "" +":issue:`25400`: RobotFileParser now correctly returns default values for " +"crawl_delay and request_rate. Initial patch by Peter Wirtz." +msgstr "" + +#: ../../../build/NEWS:17258 ../../../build/NEWS:20694 +#: ../../../build/NEWS:24095 +msgid ":issue:`27932`: Prevent memory leak in win32_ver()." +msgstr "" + +#: ../../../build/NEWS:17260 ../../../build/NEWS:20696 +#: ../../../build/NEWS:24097 +msgid "Fix UnboundLocalError in socket._sendfile_use_sendfile." +msgstr "" + +#: ../../../build/NEWS:17262 ../../../build/NEWS:20698 +#: ../../../build/NEWS:24099 +msgid "" +":issue:`28075`: Check for ERROR_ACCESS_DENIED in Windows implementation of " +"os.stat(). Patch by Eryk Sun." +msgstr "" + +#: ../../../build/NEWS:17265 ../../../build/NEWS:20701 +msgid "" +":issue:`22493`: Warning message emitted by using inline flags in the middle " +"of regular expression now contains a (truncated) regex pattern. Patch by Tim" +" Graham." +msgstr "" + +#: ../../../build/NEWS:17269 ../../../build/NEWS:20705 +#: ../../../build/NEWS:24102 +msgid "" +":issue:`25270`: Prevent codecs.escape_encode() from raising SystemError when" +" an empty bytestring is passed." +msgstr "" + +#: ../../../build/NEWS:17272 ../../../build/NEWS:20708 +#: ../../../build/NEWS:24105 +msgid ":issue:`28181`: Get antigravity over HTTPS. Patch by Kaartic Sivaraam." +msgstr "" + +#: ../../../build/NEWS:17274 ../../../build/NEWS:20710 +#: ../../../build/NEWS:24107 +msgid "" +":issue:`25895`: Enable WebSocket URL schemes in urllib.parse.urljoin. Patch " +"by Gergely Imreh and Markus Holtermann." +msgstr "" + +#: ../../../build/NEWS:17277 ../../../build/NEWS:20713 +msgid "" +":issue:`28114`: Fix a crash in parse_envlist() when env contains byte " +"strings. Patch by Eryk Sun." +msgstr "" + +#: ../../../build/NEWS:17280 ../../../build/NEWS:20716 +#: ../../../build/NEWS:24110 +msgid "" +":issue:`27599`: Fixed buffer overrun in binascii.b2a_qp() and " +"binascii.a2b_qp()." +msgstr "" + +#: ../../../build/NEWS:17283 ../../../build/NEWS:20719 +#: ../../../build/NEWS:24293 +msgid "" +":issue:`27906`: Fix socket accept exhaustion during high TCP traffic. Patch " +"by Kevin Conway." +msgstr "" + +#: ../../../build/NEWS:17286 ../../../build/NEWS:20722 +#: ../../../build/NEWS:24296 +msgid "" +":issue:`28174`: Handle when SO_REUSEPORT isn't properly supported. Patch by " +"Seth Michael Larson." +msgstr "" + +#: ../../../build/NEWS:17289 ../../../build/NEWS:20725 +#: ../../../build/NEWS:24299 +msgid "" +":issue:`26654`: Inspect functools.partial in asyncio.Handle.__repr__. Patch " +"by iceboy." +msgstr "" + +#: ../../../build/NEWS:17292 ../../../build/NEWS:20728 +#: ../../../build/NEWS:24302 +msgid ":issue:`26909`: Fix slow pipes IO in asyncio. Patch by INADA Naoki." +msgstr "" + +#: ../../../build/NEWS:17294 ../../../build/NEWS:20730 +#: ../../../build/NEWS:24304 +msgid "" +":issue:`28176`: Fix callbacks race in asyncio.SelectorLoop.sock_connect." +msgstr "" + +#: ../../../build/NEWS:17296 ../../../build/NEWS:20732 +#: ../../../build/NEWS:24306 +msgid "" +":issue:`27759`: Fix selectors incorrectly retain invalid file descriptors. " +"Patch by Mark Williams." +msgstr "" + +#: ../../../build/NEWS:17299 +msgid "" +":issue:`28325`: Remove vestigial MacOS 9 macurl2path module and its tests." +msgstr "" + +#: ../../../build/NEWS:17301 ../../../build/NEWS:20735 +#: ../../../build/NEWS:24309 +msgid "" +":issue:`28368`: Refuse monitoring processes if the child watcher has no loop" +" attached. Patch by Vincent Michel." +msgstr "" + +#: ../../../build/NEWS:17304 ../../../build/NEWS:20738 +#: ../../../build/NEWS:24312 +msgid "" +":issue:`28369`: Raise RuntimeError when transport's FD is used with " +"add_reader, add_writer, etc." +msgstr "" + +#: ../../../build/NEWS:17307 ../../../build/NEWS:20741 +#: ../../../build/NEWS:24315 +msgid "" +":issue:`28370`: Speedup asyncio.StreamReader.readexactly. Patch by Коренберг" +" Марк." +msgstr "" + +#: ../../../build/NEWS:17310 ../../../build/NEWS:20744 +#: ../../../build/NEWS:24318 +msgid ":issue:`28371`: Deprecate passing asyncio.Handles to run_in_executor." +msgstr "" + +#: ../../../build/NEWS:17312 ../../../build/NEWS:20746 +#: ../../../build/NEWS:24320 +msgid "" +":issue:`28372`: Fix asyncio to support formatting of non-python coroutines." +msgstr "" + +#: ../../../build/NEWS:17314 ../../../build/NEWS:20748 +#: ../../../build/NEWS:24322 +msgid "" +":issue:`28399`: Remove UNIX socket from FS before binding. Patch by " +"Коренберг Марк." +msgstr "" + +#: ../../../build/NEWS:17317 ../../../build/NEWS:20751 +#: ../../../build/NEWS:24325 +msgid ":issue:`27972`: Prohibit Tasks to await on themselves." +msgstr "" + +#: ../../../build/NEWS:17319 ../../../build/NEWS:20273 +msgid "" +":issue:`24142`: Reading a corrupt config file left configparser in an " +"invalid state. Original patch by Florian Höch." +msgstr "" + +#: ../../../build/NEWS:17322 ../../../build/NEWS:19621 +msgid "" +":issue:`29581`: ABCMeta.__new__ now accepts ``**kwargs``, allowing abstract " +"base classes to use keyword parameters in __init_subclass__. Patch by Nate " +"Soares." +msgstr "" + +#: ../../../build/NEWS:17326 ../../../build/NEWS:18815 +msgid "" +":issue:`25532`: inspect.unwrap() will now only try to unwrap an object " +"sys.getrecursionlimit() times, to protect against objects which create a new" +" object on every attribute access." +msgstr "" + +#: ../../../build/NEWS:17330 ../../../build/NEWS:19755 +msgid "" +":issue:`30177`: path.resolve(strict=False) no longer cuts the path after the" +" first element not present in the filesystem. Patch by Antoine Pietri." +msgstr "" + +#: ../../../build/NEWS:17336 ../../../build/NEWS:19241 +msgid "" +":issue:`31294`: Fix incomplete code snippet in the ZeroMQSocketListener and " +"ZeroMQSocketHandler examples and adapt them to Python 3." +msgstr "" + +#: ../../../build/NEWS:17339 ../../../build/NEWS:19244 +msgid "" +":issue:`21649`: Add RFC 7525 and Mozilla server side TLS links to SSL " +"documentation." +msgstr "" + +#: ../../../build/NEWS:17342 +msgid ":issue:`31128`: Allow the pydoc server to bind to arbitrary hostnames." +msgstr "" + +#: ../../../build/NEWS:17344 ../../../build/NEWS:19247 +msgid "" +":issue:`30803`: Clarify doc on truth value testing. Original patch by Peter " +"Thomassen." +msgstr "" + +#: ../../../build/NEWS:17347 ../../../build/NEWS:19810 +#: ../../../build/NEWS:23726 +msgid "" +":issue:`30176`: Add missing attribute related constants in curses " +"documentation." +msgstr "" + +#: ../../../build/NEWS:17350 ../../../build/NEWS:19813 +msgid "" +":issue:`30052`: the link targets for :func:`bytes` and :func:`bytearray` are" +" now their respective type definitions, rather than the corresponding " +"builtin function entries. Use :ref:`bytes ` and :ref:`bytearray " +"` to reference the latter. In order to ensure this and " +"future cross-reference updates are applied automatically, the daily " +"documentation builds now disable the default output caching features in " +"Sphinx." +msgstr "" + +#: ../../../build/NEWS:17358 ../../../build/NEWS:19821 +#: ../../../build/NEWS:23729 +msgid "" +":issue:`26985`: Add missing info of code object in inspect documentation." +msgstr "" + +#: ../../../build/NEWS:17360 +msgid "" +":issue:`19824`: Improve the documentation for, and links to, template " +"strings by emphasizing their utility for internationalization, and by " +"clarifying some usage constraints. (See also: :issue:`20314`, " +":issue:`12518`)" +msgstr "" + +#: ../../../build/NEWS:17364 ../../../build/NEWS:20130 +#: ../../../build/NEWS:23731 +msgid ":issue:`28929`: Link the documentation to its source file on GitHub." +msgstr "" + +#: ../../../build/NEWS:17366 ../../../build/NEWS:20132 +#: ../../../build/NEWS:23733 +msgid "" +":issue:`25008`: Document smtpd.py as effectively deprecated and add a " +"pointer to aiosmtpd, a third-party asyncio-based replacement." +msgstr "" + +#: ../../../build/NEWS:17369 ../../../build/NEWS:20135 +#: ../../../build/NEWS:23736 +msgid "" +":issue:`26355`: Add canonical header link on each page to corresponding " +"major version of the documentation. Patch by Matthias Bussonnier." +msgstr "" + +#: ../../../build/NEWS:17372 ../../../build/NEWS:20138 +#: ../../../build/NEWS:23739 +msgid "" +":issue:`29349`: Fix Python 2 syntax in code for building the documentation." +msgstr "" + +#: ../../../build/NEWS:17374 +msgid "" +":issue:`23722`: The data model reference and the porting section in the 3.6 " +"What's New guide now cover the additional ``__classcell__`` handling needed " +"for custom metaclasses to fully support :pep:`487` and zero-argument " +"``super()``." +msgstr "" + +#: ../../../build/NEWS:17379 ../../../build/NEWS:20389 +#: ../../../build/NEWS:24393 +msgid ":issue:`28513`: Documented command-line interface of zipfile." +msgstr "" + +#: ../../../build/NEWS:17384 +msgid "" +":issue:`29639`: test.support.HOST is now \"localhost\", a new HOSTv4 " +"constant has been added for your ``127.0.0.1`` needs, similar to the " +"existing HOSTv6 constant." +msgstr "" + +#: ../../../build/NEWS:17388 ../../../build/NEWS:19253 +msgid ":issue:`31320`: Silence traceback in test_ssl" +msgstr "" + +#: ../../../build/NEWS:17390 +msgid "" +":issue:`31346`: Prefer PROTOCOL_TLS_CLIENT and PROTOCOL_TLS_SERVER protocols" +" for SSLContext." +msgstr "" + +#: ../../../build/NEWS:17393 ../../../build/NEWS:19255 +msgid ":issue:`25674`: Remove sha256.tbs-internet.com ssl test" +msgstr "" + +#: ../../../build/NEWS:17395 ../../../build/NEWS:19257 +msgid "" +":issue:`30715`: Address ALPN callback changes for OpenSSL 1.1.0f. The latest" +" version behaves like OpenSSL 1.0.2 and no longer aborts handshake." +msgstr "" + +#: ../../../build/NEWS:17398 ../../../build/NEWS:19260 +msgid "" +":issue:`30822`: regrtest: Exclude tzdata from regrtest --all. When running " +"the test suite using --use=all / -u all, exclude tzdata since it makes " +"test_datetime too slow (15-20 min on some buildbots) which then times out on" +" some buildbots. Fix also regrtest command line parser to allow passing -u " +"extralargefile to run test_zipfile64." +msgstr "" + +#: ../../../build/NEWS:17404 ../../../build/NEWS:18867 +msgid "" +":issue:`30695`: Add the `set_nomemory(start, stop)` and `remove_mem_hooks()`" +" functions to the _testcapi module." +msgstr "" + +#: ../../../build/NEWS:17407 ../../../build/NEWS:19832 +#: ../../../build/NEWS:23758 +msgid "" +":issue:`30357`: test_thread: setUp() now uses support.threading_setup() and " +"support.threading_cleanup() to wait until threads complete to avoid random " +"side effects on following tests. Initial patch written by Grzegorz Grzywacz." +msgstr "" + +#: ../../../build/NEWS:17412 ../../../build/NEWS:19837 +#: ../../../build/NEWS:23767 +msgid "" +":issue:`30197`: Enhanced functions swap_attr() and swap_item() in the " +"test.support module. They now work when delete replaced attribute or item " +"inside the with statement. The old value of the attribute or item (or None " +"if it doesn't exist) now will be assigned to the target of the \"as\" " +"clause, if there is one." +msgstr "" + +#: ../../../build/NEWS:17418 +msgid ":issue:`24932`: Use proper command line parsing in _testembed" +msgstr "" + +#: ../../../build/NEWS:17420 ../../../build/NEWS:20153 +msgid "" +":issue:`28950`: Disallow -j0 to be combined with -T/-l in regrtest command " +"line arguments." +msgstr "" + +#: ../../../build/NEWS:17423 ../../../build/NEWS:20156 +msgid "" +":issue:`28683`: Fix the tests that bind() a unix socket and raise " +"PermissionError on Android for a non-root user." +msgstr "" + +#: ../../../build/NEWS:17426 +msgid "" +":issue:`26936`: Fix the test_socket failures on Android - getservbyname(), " +"getservbyport() and getaddrinfo() are broken on some Android API levels." +msgstr "" + +#: ../../../build/NEWS:17429 ../../../build/NEWS:20394 +#: ../../../build/NEWS:24401 +msgid "" +":issue:`28666`: Now test.support.rmtree is able to remove unwritable or " +"unreadable directories." +msgstr "" + +#: ../../../build/NEWS:17432 ../../../build/NEWS:20397 +#: ../../../build/NEWS:24404 +msgid "" +":issue:`23839`: Various caches now are cleared before running every test " +"file." +msgstr "" + +#: ../../../build/NEWS:17434 ../../../build/NEWS:20529 +msgid "" +":issue:`26944`: Fix test_posix for Android where 'id -G' is entirely wrong " +"or missing the effective gid." +msgstr "" + +#: ../../../build/NEWS:17437 ../../../build/NEWS:20532 +#: ../../../build/NEWS:24406 +msgid ":issue:`28409`: regrtest: fix the parser of command line arguments." +msgstr "" + +#: ../../../build/NEWS:17439 ../../../build/NEWS:20800 +msgid ":issue:`28217`: Adds _testconsole module to test console input." +msgstr "" + +#: ../../../build/NEWS:17441 ../../../build/NEWS:20159 +msgid "" +":issue:`26939`: Add the support.setswitchinterval() function to fix " +"test_functools hanging on the Android armv7 qemu emulator." +msgstr "" + +#: ../../../build/NEWS:17447 +msgid "" +":issue:`31354`: Allow --with-lto to be used on all builds, not just `make " +"profile-opt`." +msgstr "" + +#: ../../../build/NEWS:17450 +msgid "" +":issue:`31370`: Remove support for building --without-threads. This option " +"is not really useful anymore in the 21st century. Removing lots of " +"conditional paths allows us to simplify the code base, including in " +"difficult to maintain low-level internal code." +msgstr "" + +#: ../../../build/NEWS:17455 +msgid "" +":issue:`31341`: Per :pep:`11`, support for the IRIX operating system was " +"removed." +msgstr "" + +#: ../../../build/NEWS:17458 ../../../build/NEWS:19269 +msgid "" +":issue:`30854`: Fix compile error when compiling --without-threads. Patch by" +" Masayuki Yamamoto." +msgstr "" + +#: ../../../build/NEWS:17461 ../../../build/NEWS:19846 +#: ../../../build/NEWS:23795 +msgid "" +":issue:`30687`: Locate msbuild.exe on Windows when building rather than " +"vcvarsall.bat" +msgstr "" + +#: ../../../build/NEWS:17464 +msgid "" +":issue:`20210`: Support the *disabled* marker in Setup files. Extension " +"modules listed after this marker are not built at all, neither by the " +"Makefile nor by setup.py." +msgstr "" + +#: ../../../build/NEWS:17468 ../../../build/NEWS:19790 +msgid "" +":issue:`29941`: Add ``--with-assertions`` configure flag to explicitly " +"enable C ``assert()`` checks. Defaults to off. ``--with-pydebug`` implies " +"``--with-assertions``." +msgstr "" + +#: ../../../build/NEWS:17472 ../../../build/NEWS:19794 +msgid "" +":issue:`28787`: Fix out-of-tree builds of Python when configured with " +"``--with--dtrace``." +msgstr "" + +#: ../../../build/NEWS:17475 ../../../build/NEWS:19797 +#: ../../../build/NEWS:23782 +msgid "" +":issue:`29243`: Prevent unnecessary rebuilding of Python during ``make " +"test``, ``make install`` and some other make targets when configured with " +"``--enable-optimizations``." +msgstr "" + +#: ../../../build/NEWS:17479 ../../../build/NEWS:19801 +#: ../../../build/NEWS:23786 +msgid "" +":issue:`23404`: Don't regenerate generated files based on file modification " +"time anymore: the action is now explicit. Replace ``make touch`` with ``make" +" regen-all``." +msgstr "" + +#: ../../../build/NEWS:17483 ../../../build/NEWS:19805 +#: ../../../build/NEWS:23790 +msgid ":issue:`29643`: Fix ``--enable-optimization`` didn't work." +msgstr "" + +#: ../../../build/NEWS:17485 ../../../build/NEWS:20165 +msgid "" +":issue:`27593`: sys.version and the platform module python_build(), " +"python_branch(), and python_revision() functions now use git information " +"rather than hg when building from a repo." +msgstr "" + +#: ../../../build/NEWS:17489 ../../../build/NEWS:20169 +msgid "" +":issue:`29572`: Update Windows build and OS X installers to use OpenSSL " +"1.0.2k." +msgstr "" + +#: ../../../build/NEWS:17491 +msgid "" +":issue:`27659`: Prohibit implicit C function declarations: use " +"``-Werror=implicit-function-declaration`` when possible (GCC and Clang, but " +"it depends on the compiler version). Patch written by Chi Hsuan Yen." +msgstr "" + +#: ../../../build/NEWS:17495 +msgid ":issue:`29384`: Remove old Be OS helper scripts." +msgstr "" + +#: ../../../build/NEWS:17497 ../../../build/NEWS:20171 +msgid ":issue:`26851`: Set Android compilation and link flags." +msgstr "" + +#: ../../../build/NEWS:17499 ../../../build/NEWS:20173 +msgid "" +":issue:`28768`: Fix implicit declaration of function _setmode. Patch by " +"Masayuki Yamamoto" +msgstr "" + +#: ../../../build/NEWS:17502 ../../../build/NEWS:20176 +#: ../../../build/NEWS:24444 +msgid "" +":issue:`29080`: Removes hard dependency on hg.exe from PCBuild/build.bat" +msgstr "" + +#: ../../../build/NEWS:17504 ../../../build/NEWS:20178 +#: ../../../build/NEWS:24446 +msgid ":issue:`23903`: Added missed names to PC/python3.def." +msgstr "" + +#: ../../../build/NEWS:17506 ../../../build/NEWS:20180 +msgid "" +":issue:`28762`: lockf() is available on Android API level 24, but the F_LOCK" +" macro is not defined in android-ndk-r13." +msgstr "" + +#: ../../../build/NEWS:17509 ../../../build/NEWS:20183 +msgid "" +":issue:`28538`: Fix the compilation error that occurs because if_nameindex()" +" is available on Android API level 24, but the if_nameindex structure is not" +" defined." +msgstr "" + +#: ../../../build/NEWS:17513 ../../../build/NEWS:20187 +msgid "" +":issue:`20211`: Do not add the directory for installing C header files and " +"the directory for installing object code libraries to the cross compilation " +"search paths. Original patch by Thomas Petazzoni." +msgstr "" + +#: ../../../build/NEWS:17517 ../../../build/NEWS:20191 +msgid "" +":issue:`28849`: Do not define sys.implementation._multiarch on Android." +msgstr "" + +#: ../../../build/NEWS:17519 ../../../build/NEWS:20402 +#: ../../../build/NEWS:24448 +msgid "" +":issue:`10656`: Fix out-of-tree building on AIX. Patch by Tristan Carel and" +" Michael Haubenwallner." +msgstr "" + +#: ../../../build/NEWS:17522 ../../../build/NEWS:20405 +#: ../../../build/NEWS:24451 +msgid ":issue:`26359`: Rename --with-optimiations to --enable-optimizations." +msgstr "" + +#: ../../../build/NEWS:17524 ../../../build/NEWS:20520 +#: ../../../build/NEWS:24453 +msgid ":issue:`28444`: Fix missing extensions modules when cross compiling." +msgstr "" + +#: ../../../build/NEWS:17526 ../../../build/NEWS:20522 +msgid "" +":issue:`28208`: Update Windows build and OS X installers to use SQLite " +"3.14.2." +msgstr "" + +#: ../../../build/NEWS:17528 ../../../build/NEWS:20524 +#: ../../../build/NEWS:24455 +msgid "" +":issue:`28248`: Update Windows build and OS X installers to use OpenSSL " +"1.0.2j." +msgstr "" + +#: ../../../build/NEWS:17530 +msgid "" +":issue:`21124`: Fix building the _struct module on Cygwin by passing " +"``NULL`` instead of ``&PyType_Type`` to PyVarObject_HEAD_INIT. Patch by " +"Masayuki Yamamoto." +msgstr "" + +#: ../../../build/NEWS:17534 +msgid "" +":issue:`13756`: Fix building extensions modules on Cygwin. Patch by Roumen " +"Petrov, based on original patch by Jason Tishler." +msgstr "" + +#: ../../../build/NEWS:17537 +msgid "" +":issue:`21085`: Add configure check for siginfo_t.si_band, which Cygwin does" +" not provide. Patch by Masayuki Yamamoto with review and rebase by Erik " +"Bray." +msgstr "" + +#: ../../../build/NEWS:17541 ../../../build/NEWS:20789 +#: ../../../build/NEWS:24457 +msgid "" +":issue:`28258`: Fixed build with Estonian locale (python-config and " +"distclean targets in Makefile). Patch by Arfrever Frehtes Taifersar " +"Arahesis." +msgstr "" + +#: ../../../build/NEWS:17544 ../../../build/NEWS:20792 +#: ../../../build/NEWS:24460 +msgid "" +":issue:`26661`: setup.py now detects system libffi with multiarch wrapper." +msgstr "" + +#: ../../../build/NEWS:17546 +msgid "" +":issue:`27979`: A full copy of libffi is no longer bundled for use when " +"building _ctypes on non-OSX UNIX platforms. An installed copy of libffi is " +"now required when building _ctypes on such platforms." +msgstr "" + +#: ../../../build/NEWS:17550 ../../../build/NEWS:20794 +#: ../../../build/NEWS:24465 +msgid "" +":issue:`15819`: Remove redundant include search directory option for " +"building outside the source tree." +msgstr "" + +#: ../../../build/NEWS:17553 ../../../build/NEWS:20407 +#: ../../../build/NEWS:24502 +msgid "" +":issue:`28676`: Prevent missing 'getentropy' declaration warning on macOS. " +"Patch by Gareth Rees." +msgstr "" + +#: ../../../build/NEWS:17559 +msgid ":issue:`31392`: Update Windows build to use OpenSSL 1.1.0f" +msgstr "" + +#: ../../../build/NEWS:17561 ../../../build/NEWS:19275 +msgid "" +":issue:`30389`: Adds detection of Visual Studio 2017 to distutils on " +"Windows." +msgstr "" + +#: ../../../build/NEWS:17563 +msgid "" +":issue:`31358`: zlib is no longer bundled in the CPython source, instead it " +"is downloaded on demand just like bz2, lzma, OpenSSL, Tcl/Tk, and SQLite." +msgstr "" + +#: ../../../build/NEWS:17566 ../../../build/NEWS:19277 +msgid "" +":issue:`31340`: Change to building with MSVC v141 (included with Visual " +"Studio 2017)" +msgstr "" + +#: ../../../build/NEWS:17569 ../../../build/NEWS:19280 +msgid "" +":issue:`30581`: os.cpu_count() now returns the correct number of processors " +"on Windows when the number of logical processors is greater than 64." +msgstr "" + +#: ../../../build/NEWS:17572 +msgid "" +":issue:`30916`: Pre-build OpenSSL, Tcl and Tk and include the binaries in " +"the build." +msgstr "" + +#: ../../../build/NEWS:17575 ../../../build/NEWS:19283 +msgid "" +":issue:`30731`: Add a missing xmlns to python.manifest so that it matches " +"the schema." +msgstr "" + +#: ../../../build/NEWS:17578 +msgid "" +":issue:`30291`: Allow requiring 64-bit interpreters from py.exe using -64 " +"suffix. Contributed by Steve (Gadget) Barnes." +msgstr "" + +#: ../../../build/NEWS:17581 +msgid "" +":issue:`30362`: Adds list options (-0, -0p) to py.exe launcher. Contributed " +"by Steve Barnes." +msgstr "" + +#: ../../../build/NEWS:17584 +msgid "" +":issue:`23451`: Fix socket deprecation warnings in socketmodule.c. Patch by " +"Segev Finer." +msgstr "" + +#: ../../../build/NEWS:17587 ../../../build/NEWS:19849 +msgid "" +":issue:`30450`: The build process on Windows no longer depends on " +"Subversion, instead pulling external code from GitHub via a Python script. " +"If Python 3.6 is not found on the system (via ``py -3.6``), NuGet is used to" +" download a copy of 32-bit Python." +msgstr "" + +#: ../../../build/NEWS:17592 +msgid ":issue:`29579`: Removes readme.txt from the installer." +msgstr "" + +#: ../../../build/NEWS:17594 ../../../build/NEWS:20106 +msgid "" +":issue:`25778`: winreg does not truncate string correctly (Patch by Eryk " +"Sun)" +msgstr "" + +#: ../../../build/NEWS:17596 +msgid "" +":issue:`28896`: Deprecate WindowsRegistryFinder and disable it by default" +msgstr "" + +#: ../../../build/NEWS:17598 ../../../build/NEWS:20515 +msgid ":issue:`28522`: Fixes mishandled buffer reallocation in getpathp.c" +msgstr "" + +#: ../../../build/NEWS:17600 ../../../build/NEWS:20756 +msgid ":issue:`28402`: Adds signed catalog files for stdlib on Windows." +msgstr "" + +#: ../../../build/NEWS:17602 ../../../build/NEWS:20758 +msgid "" +":issue:`28333`: Enables Unicode for ps1/ps2 and input() prompts. (Patch by " +"Eryk Sun)" +msgstr "" + +#: ../../../build/NEWS:17605 ../../../build/NEWS:20761 +#: ../../../build/NEWS:24429 +msgid ":issue:`28251`: Improvements to help manuals on Windows." +msgstr "" + +#: ../../../build/NEWS:17607 ../../../build/NEWS:20763 +#: ../../../build/NEWS:24431 +msgid "" +":issue:`28110`: launcher.msi has different product codes between 32-bit and " +"64-bit" +msgstr "" + +#: ../../../build/NEWS:17610 ../../../build/NEWS:20766 +msgid ":issue:`28161`: Opening CON for write access fails" +msgstr "" + +#: ../../../build/NEWS:17612 ../../../build/NEWS:20768 +msgid "" +":issue:`28162`: WindowsConsoleIO readall() fails if first line starts with " +"Ctrl+Z" +msgstr "" + +#: ../../../build/NEWS:17615 ../../../build/NEWS:20771 +msgid "" +":issue:`28163`: WindowsConsoleIO fileno() passes wrong flags to " +"_open_osfhandle" +msgstr "" + +#: ../../../build/NEWS:17617 ../../../build/NEWS:20773 +msgid ":issue:`28164`: _PyIO_get_console_type fails for various paths" +msgstr "" + +#: ../../../build/NEWS:17619 ../../../build/NEWS:20775 +msgid ":issue:`28137`: Renames Windows path file to ._pth" +msgstr "" + +#: ../../../build/NEWS:17621 ../../../build/NEWS:20777 +msgid ":issue:`28138`: Windows ._pth file should allow import site" +msgstr "" + +#: ../../../build/NEWS:17626 ../../../build/NEWS:19289 +msgid "" +":issue:`31493`: IDLE code context -- fix code update and font update timers." +" Canceling timers prevents a warning message when test_idle completes." +msgstr "" + +#: ../../../build/NEWS:17629 ../../../build/NEWS:19292 +msgid "" +":issue:`31488`: IDLE - Update non-key options in former extension classes. " +"When applying configdialog changes, call .reload for each feature class. " +"Change ParenMatch so updated options affect existing instances attached to " +"existing editor windows." +msgstr "" + +#: ../../../build/NEWS:17634 ../../../build/NEWS:19297 +msgid "" +":issue:`31477`: IDLE - Improve rstrip entry in doc. Strip trailing " +"whitespace strips more than blank spaces. Multiline string literals are not" +" skipped." +msgstr "" + +#: ../../../build/NEWS:17637 ../../../build/NEWS:19300 +msgid "" +":issue:`31480`: IDLE - make tests pass with zzdummy extension disabled by " +"default." +msgstr "" + +#: ../../../build/NEWS:17640 ../../../build/NEWS:19303 +msgid "" +":issue:`31421`: Document how IDLE runs tkinter programs. IDLE calls tcl/tk " +"update in the background in order to make live interaction and " +"experimentation with tkinter applications much easier." +msgstr "" + +#: ../../../build/NEWS:17644 ../../../build/NEWS:19307 +msgid "" +":issue:`31414`: IDLE -- fix tk entry box tests by deleting first. Adding to " +"an int entry is not the same as deleting and inserting because int('') will " +"fail." +msgstr "" + +#: ../../../build/NEWS:17648 ../../../build/NEWS:19311 +msgid "" +":issue:`31051`: Rearrange IDLE configdialog GenPage into Window, Editor, and" +" Help sections." +msgstr "" + +#: ../../../build/NEWS:17651 ../../../build/NEWS:19314 +msgid "" +":issue:`30617`: IDLE - Add docstrings and tests for outwin subclass of " +"editor. Move some data and functions from the class to module level. Patch " +"by Cheryl Sabella." +msgstr "" + +#: ../../../build/NEWS:17655 ../../../build/NEWS:19318 +msgid "" +":issue:`31287`: IDLE - Do not modify tkinter.message in test_configdialog." +msgstr "" + +#: ../../../build/NEWS:17657 ../../../build/NEWS:19320 +msgid "" +":issue:`27099`: Convert IDLE's built-in 'extensions' to regular features. " +"About 10 IDLE features were implemented as supposedly optional extensions. " +"Their different behavior could be confusing or worse for users and not good " +"for maintenance. Hence the conversion. The main difference for users is that" +" user configurable key bindings for builtin features are now handled " +"uniformly. Now, editing a binding in a keyset only affects its value in the " +"keyset. All bindings are defined together in the system-specific default " +"keysets in config-extensions.def. All custom keysets are saved as a whole in" +" config-extension.cfg. All take effect as soon as one clicks Apply or Ok. " +"The affected events are '<>', '<>', " +"'<>', '<>', '<>', '<>', '<>', and '<>'. Any (global) " +"customizations made before 3.6.3 will not affect their keyset-specific " +"customization after 3.6.3. and vice versa. Initial patch by Charles " +"Wohlganger." +msgstr "" + +#: ../../../build/NEWS:17673 ../../../build/NEWS:19336 +msgid "" +":issue:`31206`: IDLE: Factor HighPage(Frame) class from ConfigDialog. Patch " +"by Cheryl Sabella." +msgstr "" + +#: ../../../build/NEWS:17676 ../../../build/NEWS:19339 +msgid "" +":issue:`31001`: Add tests for configdialog highlight tab. Patch by Cheryl " +"Sabella." +msgstr "" + +#: ../../../build/NEWS:17679 ../../../build/NEWS:19342 +msgid "" +":issue:`31205`: IDLE: Factor KeysPage(Frame) class from ConfigDialog. The " +"slightly modified tests continue to pass. Patch by Cheryl Sabella." +msgstr "" + +#: ../../../build/NEWS:17682 ../../../build/NEWS:19345 +msgid "" +":issue:`31130`: IDLE -- stop leaks in test_configdialog. Initial patch by " +"Victor Stinner." +msgstr "" + +#: ../../../build/NEWS:17685 ../../../build/NEWS:19348 +msgid "" +":issue:`31002`: Add tests for configdialog keys tab. Patch by Cheryl " +"Sabella." +msgstr "" + +#: ../../../build/NEWS:17687 ../../../build/NEWS:19350 +msgid "" +":issue:`19903`: IDLE: Calltips use `inspect.signature` instead of " +"`inspect.getfullargspec`. This improves calltips for builtins converted to " +"use Argument Clinic. Patch by Louie Lu." +msgstr "" + +#: ../../../build/NEWS:17691 ../../../build/NEWS:19354 +msgid "" +":issue:`31083`: IDLE - Add an outline of a TabPage class in configdialog. " +"Update existing classes to match outline. Initial patch by Cheryl Sabella." +msgstr "" + +#: ../../../build/NEWS:17694 ../../../build/NEWS:19357 +msgid "" +":issue:`31050`: Factor GenPage(Frame) class from ConfigDialog. The slightly " +"modified tests continue to pass. Patch by Cheryl Sabella." +msgstr "" + +#: ../../../build/NEWS:17697 ../../../build/NEWS:19360 +msgid "" +":issue:`31004`: IDLE - Factor FontPage(Frame) class from ConfigDialog. " +"Slightly modified tests continue to pass. Fix General tests. Patch mostly by" +" Cheryl Sabella." +msgstr "" + +#: ../../../build/NEWS:17701 ../../../build/NEWS:19364 +msgid "" +":issue:`30781`: IDLE - Use ttk widgets in ConfigDialog. Patches by Terry Jan" +" Reedy and Cheryl Sabella." +msgstr "" + +#: ../../../build/NEWS:17704 ../../../build/NEWS:19367 +msgid "" +":issue:`31060`: IDLE - Finish rearranging methods of ConfigDialog Grouping " +"methods pertaining to each tab and the buttons will aid writing tests and " +"improving the tabs and will enable splitting the groups into classes." +msgstr "" + +#: ../../../build/NEWS:17708 ../../../build/NEWS:19371 +msgid "" +":issue:`30853`: IDLE -- Factor a VarTrace class out of ConfigDialog. " +"Instance tracers manages pairs consisting of a tk variable and a callback " +"function. When tracing is turned on, setting the variable calls the " +"function. Test coverage for the new class is 100%." +msgstr "" + +#: ../../../build/NEWS:17713 ../../../build/NEWS:19376 +msgid ":issue:`31003`: IDLE: Add more tests for General tab." +msgstr "" + +#: ../../../build/NEWS:17715 ../../../build/NEWS:19378 +msgid "" +":issue:`30993`: IDLE - Improve configdialog font page and tests. In " +"configdialog: Document causal pathways in create_font_tab docstring. " +"Simplify some attribute names. Move set_samples calls to var_changed_font " +"(idea from Cheryl Sabella). Move related functions to positions after the " +"create widgets function. In test_configdialog: Fix test_font_set so not " +"order dependent. Fix renamed test_indent_scale so it tests the widget. " +"Adjust tests for movement of set_samples call. Add tests for load " +"functions. Put all font tests in one class and tab indent tests in another." +" Except for two lines, these tests completely cover the related functions." +msgstr "" + +#: ../../../build/NEWS:17726 ../../../build/NEWS:19389 +msgid ":issue:`30981`: IDLE -- Add more configdialog font page tests." +msgstr "" + +#: ../../../build/NEWS:17728 ../../../build/NEWS:19391 +msgid ":issue:`28523`: IDLE: replace 'colour' with 'color' in configdialog." +msgstr "" + +#: ../../../build/NEWS:17730 ../../../build/NEWS:19393 +msgid "" +":issue:`30917`: Add tests for idlelib.config.IdleConf. Increase coverage " +"from 46% to 96%. Patch by Louie Lu." +msgstr "" + +#: ../../../build/NEWS:17733 ../../../build/NEWS:19396 +msgid "" +":issue:`30934`: Document coverage details for idlelib tests. Add section to " +"idlelib/idle-test/README.txt. Include check that branches are taken both " +"ways. Exclude IDLE-specific code that does not run during unit tests." +msgstr "" + +#: ../../../build/NEWS:17737 ../../../build/NEWS:19400 +msgid "" +":issue:`30913`: IDLE: Document ConfigDialog tk Vars, methods, and widgets in" +" docstrings This will facilitate improving the dialog and splitting up the " +"class. Original patch by Cheryl Sabella." +msgstr "" + +#: ../../../build/NEWS:17741 ../../../build/NEWS:19404 +msgid "" +":issue:`30899`: IDLE: Add tests for ConfigParser subclasses in config. Patch" +" by Louie Lu." +msgstr "" + +#: ../../../build/NEWS:17744 ../../../build/NEWS:19407 +msgid "" +":issue:`30881`: IDLE: Add docstrings to browser.py. Patch by Cheryl Sabella." +msgstr "" + +#: ../../../build/NEWS:17746 ../../../build/NEWS:19409 +msgid "" +":issue:`30851`: IDLE: Remove unused variables in configdialog. One is a " +"duplicate, one is set but cannot be altered by users. Patch by Cheryl " +"Sabella." +msgstr "" + +#: ../../../build/NEWS:17750 ../../../build/NEWS:19413 +msgid "" +":issue:`30870`: IDLE: In Settings dialog, select font with Up, Down keys as " +"well as mouse. Initial patch by Louie Lu." +msgstr "" + +#: ../../../build/NEWS:17753 ../../../build/NEWS:19416 +msgid ":issue:`8231`: IDLE: call config.IdleConf.GetUserCfgDir only once." +msgstr "" + +#: ../../../build/NEWS:17755 ../../../build/NEWS:19418 +msgid "" +":issue:`30779`: IDLE: Factor ConfigChanges class from configdialog, put in " +"config; test. * In config, put dump test code in a function; run it and " +"unittest in 'if __name__ == '__main__'. * Add class config.ConfigChanges " +"based on changes_class_v4.py on bpo issue. * Add class " +"test_config.ChangesTest, partly using configdialog_tests_v1.py. * Revise " +"configdialog to use ConfigChanges; see tracker msg297804. * Revise " +"test_configdialog to match configdialog changes. * Remove configdialog " +"functions unused or moved to ConfigChanges. Cheryl Sabella contributed parts" +" of the patch." +msgstr "" + +#: ../../../build/NEWS:17765 ../../../build/NEWS:19428 +msgid "" +":issue:`30777`: IDLE: configdialog - Add docstrings and fix comments. Patch " +"by Cheryl Sabella." +msgstr "" + +#: ../../../build/NEWS:17768 ../../../build/NEWS:19431 +msgid "" +":issue:`30495`: IDLE: Improve textview with docstrings, PEP8 names, and more" +" tests. Patch by Cheryl Sabella." +msgstr "" + +#: ../../../build/NEWS:17771 ../../../build/NEWS:19434 +msgid "" +":issue:`30723`: IDLE: Make several improvements to parenmatch. Add 'parens' " +"style to highlight both opener and closer. Make 'default' style, which is " +"not default, a synonym for 'opener'. Make time-delay work the same with all " +"styles. Add help for config dialog extensions tab, including help for " +"parenmatch. Add new tests. Original patch by Charles Wohlganger." +msgstr "" + +#: ../../../build/NEWS:17777 ../../../build/NEWS:19440 +msgid "" +":issue:`30674`: IDLE: add docstrings to grep module. Patch by Cheryl Sabella" +msgstr "" + +#: ../../../build/NEWS:17779 ../../../build/NEWS:19442 +msgid "" +":issue:`21519`: IDLE's basic custom key entry dialog now detects duplicates " +"properly. Original patch by Saimadhav Heblikar." +msgstr "" + +#: ../../../build/NEWS:17782 ../../../build/NEWS:19445 +msgid "" +":issue:`29910`: IDLE no longer deletes a character after commenting out a " +"region by a key shortcut. Add ``return 'break'`` for this and other " +"potential conflicts between IDLE and default key bindings." +msgstr "" + +#: ../../../build/NEWS:17786 ../../../build/NEWS:19449 +msgid "" +":issue:`30728`: Review and change idlelib.configdialog names. Lowercase " +"method and attribute names. Replace 'colour' with 'color', expand overly " +"cryptic names, delete unneeded underscores. Replace ``import *`` with " +"specific imports. Patches by Cheryl Sabella." +msgstr "" + +#: ../../../build/NEWS:17791 ../../../build/NEWS:19454 +msgid "" +":issue:`6739`: IDLE: Verify user-entered key sequences by trying to bind " +"them with tk. Add tests for all 3 validation functions. Original patch by G " +"Polo. Tests added by Cheryl Sabella." +msgstr "" + +#: ../../../build/NEWS:17795 ../../../build/NEWS:19761 +msgid "" +":issue:`15786`: Fix several problems with IDLE's autocompletion box. The " +"following should now work: clicking on selection box items; using the " +"scrollbar; selecting an item by hitting Return. Hangs on MacOSX should no " +"longer happen. Patch by Louie Lu." +msgstr "" + +#: ../../../build/NEWS:17800 ../../../build/NEWS:19766 +msgid "" +":issue:`25514`: Add doc subsubsection about IDLE failure to start. Popup no-" +"connection message directs users to this section." +msgstr "" + +#: ../../../build/NEWS:17803 ../../../build/NEWS:19769 +msgid "" +":issue:`30642`: Fix reference leaks in IDLE tests. Patches by Louie Lu and " +"Terry Jan Reedy." +msgstr "" + +#: ../../../build/NEWS:17806 ../../../build/NEWS:19772 +msgid "" +":issue:`30495`: Add docstrings for textview.py and use PEP8 names. Patches " +"by Cheryl Sabella and Terry Jan Reedy." +msgstr "" + +#: ../../../build/NEWS:17809 ../../../build/NEWS:19775 +msgid "" +":issue:`30290`: Help-about: use pep8 names and add tests. Increase coverage " +"to 100%. Patches by Louie Lu, Cheryl Sabella, and Terry Jan Reedy." +msgstr "" + +#: ../../../build/NEWS:17812 ../../../build/NEWS:19778 +msgid "" +":issue:`30303`: Add _utest option to textview; add new tests. Increase " +"coverage to 100%. Patches by Louie Lu and Terry Jan Reedy." +msgstr "" + +#: ../../../build/NEWS:17815 ../../../build/NEWS:20087 +msgid "" +":issue:`29071`: IDLE colors f-string prefixes (but not invalid ur prefixes)." +msgstr "" + +#: ../../../build/NEWS:17817 ../../../build/NEWS:20089 +msgid "" +":issue:`28572`: Add 10% to coverage of IDLE's test_configdialog. Update and " +"augment description of the configuration system." +msgstr "" + +#: ../../../build/NEWS:17823 ../../../build/NEWS:19461 +msgid "" +":issue:`30983`: gdb integration commands (py-bt, etc.) work on optimized " +"shared builds now, too. :pep:`523` introduced _PyEval_EvalFrameDefault " +"which inlines PyEval_EvalFrameEx on non-debug shared builds. This broke the" +" ability to use py-bt, py-up, and a few other Python-specific gdb " +"integrations. The problem is fixed by only looking for " +"_PyEval_EvalFrameDefault frames in python-gdb.py. Original patch by Bruno " +"\"Polaco\" Penteado." +msgstr "" + +#: ../../../build/NEWS:17831 +msgid ":issue:`29748`: Added the slice index converter in Argument Clinic." +msgstr "" + +#: ../../../build/NEWS:17833 +msgid "" +":issue:`24037`: Argument Clinic now uses the converter `bool(accept={int})` " +"rather than `int` for semantical booleans. This avoids repeating the " +"default value for Python and C and will help in converting to `bool` in " +"future." +msgstr "" + +#: ../../../build/NEWS:17838 ../../../build/NEWS:19826 +msgid "" +":issue:`29367`: python-gdb.py now supports also ``method-wrapper`` " +"(``wrapperobject``) objects." +msgstr "" + +#: ../../../build/NEWS:17841 ../../../build/NEWS:20294 +msgid "" +":issue:`28023`: Fix python-gdb.py didn't support new dict implementation." +msgstr "" + +#: ../../../build/NEWS:17843 +msgid "" +":issue:`15369`: The pybench and pystone microbenchmark have been removed " +"from Tools. Please use the new Python benchmark suite " +"https://github.com/python/performance which is more reliable and includes a " +"portable version of pybench working on Python 2 and Python 3." +msgstr "" + +#: ../../../build/NEWS:17848 +msgid "" +":issue:`28102`: The zipfile module CLI now prints usage to stderr. Patch by " +"Stephen J. Turnbull." +msgstr "" + +#: ../../../build/NEWS:17854 +msgid "" +":issue:`31338`: Added the ``Py_UNREACHABLE()`` macro for code paths which " +"are never expected to be reached. This and a few other useful macros are " +"now documented in the C API manual." +msgstr "" + +#: ../../../build/NEWS:17858 +msgid "" +":issue:`30832`: Remove own implementation for thread-local storage. CPython " +"has provided the own implementation for thread-local storage (TLS) on " +"Python/thread.c, it's used in the case which a platform has not supplied " +"native TLS. However, currently all supported platforms (Windows and " +"pthreads) have provided native TLS and defined the Py_HAVE_NATIVE_TLS macro " +"with unconditional in any case." +msgstr "" + +#: ../../../build/NEWS:17865 +msgid "" +":issue:`30708`: PyUnicode_AsWideCharString() now raises a ValueError if the " +"second argument is NULL and the wchar_t\\* string contains null characters." +msgstr "" + +#: ../../../build/NEWS:17868 +msgid "" +":issue:`16500`: Deprecate PyOS_AfterFork() and add PyOS_BeforeFork(), " +"PyOS_AfterFork_Parent() and PyOS_AfterFork_Child()." +msgstr "" + +#: ../../../build/NEWS:17871 +msgid "" +":issue:`6532`: The type of results of PyThread_start_new_thread() and " +"PyThread_get_thread_ident(), and the id parameter of " +"PyThreadState_SetAsyncExc() changed from \"long\" to \"unsigned long\"." +msgstr "" + +#: ../../../build/NEWS:17875 +msgid "" +":issue:`27867`: Function PySlice_GetIndicesEx() is deprecated and replaced " +"with a macro if Py_LIMITED_API is not set or set to the value between " +"0x03050400 and 0x03060000 (not including) or 0x03060100 or higher. Added " +"functions PySlice_Unpack() and PySlice_AdjustIndices()." +msgstr "" + +#: ../../../build/NEWS:17880 ../../../build/NEWS:20117 +#: ../../../build/NEWS:23808 +msgid "" +":issue:`29083`: Fixed the declaration of some public API functions. " +"PyArg_VaParse() and PyArg_VaParseTupleAndKeywords() were not available in " +"limited API. PyArg_ValidateKeywordArguments(), PyArg_UnpackTuple() and " +"Py_BuildValue() were not available in limited API of version < 3.3 when " +"PY_SSIZE_T_CLEAN is defined." +msgstr "" + +#: ../../../build/NEWS:17886 +msgid "" +":issue:`28769`: The result of PyUnicode_AsUTF8AndSize() and " +"PyUnicode_AsUTF8() is now of type ``const char *`` rather of ``char *``." +msgstr "" + +#: ../../../build/NEWS:17889 ../../../build/NEWS:20123 +msgid "" +":issue:`29058`: All stable API extensions added after Python 3.2 are now " +"available only when Py_LIMITED_API is set to the PY_VERSION_HEX value of the" +" minimum Python version supporting this API." +msgstr "" + +#: ../../../build/NEWS:17893 +msgid "" +":issue:`28822`: The index parameters *start* and *end* of " +"PyUnicode_FindChar() are now adjusted to behave like ``str[start:end]``." +msgstr "" + +#: ../../../build/NEWS:17896 ../../../build/NEWS:20281 +#: ../../../build/NEWS:24384 +msgid "" +":issue:`28808`: PyUnicode_CompareWithASCIIString() now never raises " +"exceptions." +msgstr "" + +#: ../../../build/NEWS:17898 +msgid "" +":issue:`28761`: The fields name and doc of structures PyMemberDef, " +"PyGetSetDef, PyStructSequence_Field, PyStructSequence_Desc, and wrapperbase " +"are now of type ``const char *`` rather of ``char *``." +msgstr "" + +#: ../../../build/NEWS:17902 +msgid "" +":issue:`28748`: Private variable _Py_PackageContext is now of type ``const " +"char *`` rather of ``char *``." +msgstr "" + +#: ../../../build/NEWS:17905 +msgid "" +":issue:`19569`: Compiler warnings are now emitted if use most of deprecated " +"functions." +msgstr "" + +#: ../../../build/NEWS:17908 ../../../build/NEWS:20782 +msgid "" +":issue:`28426`: Deprecated undocumented functions " +"PyUnicode_AsEncodedObject(), PyUnicode_AsDecodedObject(), " +"PyUnicode_AsDecodedUnicode() and PyUnicode_AsEncodedUnicode()." +msgstr "" + +#: ../../../build/NEWS:17914 +msgid "Python 3.6.6 final" +msgstr "Python 3.6.6 正式版" + +#: ../../../build/NEWS:17918 +msgid "There were no new changes in version 3.6.6." +msgstr "在 3.6.6 版本中没有新的更改。" + +#: ../../../build/NEWS:17923 +msgid "Python 3.6.6 release candidate 1" +msgstr "Python 3.6.6 rc1" + +#: ../../../build/NEWS:17925 +msgid "*Release date: 2018-06-11*" +msgstr "*发布日期: 2018-06-11*" + +#: ../../../build/NEWS:18156 +msgid ":issue:`33184`: Update Windows installer to OpenSSL 1.0.2o." +msgstr "" + +#: ../../../build/NEWS:18161 +msgid ":issue:`33184`: Update macOS installer build to use OpenSSL 1.0.2o." +msgstr "" + +#: ../../../build/NEWS:18193 +msgid "" +":issue:`29706`: IDLE now colors async and await as keywords in 3.6. They " +"become full keywords in 3.7." +msgstr "" + +#: ../../../build/NEWS:18234 +msgid "Python 3.6.5 final" +msgstr "Python 3.6.5 正式版" + +#: ../../../build/NEWS:18236 +msgid "*Release date: 2018-03-28*" +msgstr "*发布日期: 2018-03-28*" + +#: ../../../build/NEWS:18250 +msgid "Python 3.6.5 release candidate 1" +msgstr "Python 3.6.5 rc1" + +#: ../../../build/NEWS:18252 +msgid "*Release date: 2018-03-13*" +msgstr "*发布日期: 2018-03-13*" + +#: ../../../build/NEWS:18291 +msgid "" +":issue:`32329`: ``sys.flags.hash_randomization`` is now properly set to 0 " +"when hash randomization is turned off by ``PYTHONHASHSEED=0``." +msgstr "" + +#: ../../../build/NEWS:18294 +msgid "" +":issue:`30416`: The optimizer is now protected from spending much time doing" +" complex calculations and consuming much memory for creating large constants" +" in constant folding." +msgstr "" + +#: ../../../build/NEWS:18321 +msgid "" +":issue:`30353`: Fix ctypes pass-by-value for structs on 64-bit Cygwin/MinGW." +msgstr "" + +#: ../../../build/NEWS:18359 +msgid "" +":issue:`32394`: socket: Remove TCP_FASTOPEN, TCP_KEEPCNT flags on older " +"version Windows during run-time." +msgstr "" + +#: ../../../build/NEWS:18391 +msgid "" +":issue:`32555`: On FreeBSD and Solaris, os.strerror() now always decode the " +"byte string from the current locale encoding, rather than using " +"ASCII/surrogateescape in some cases." +msgstr "" + +#: ../../../build/NEWS:18409 +msgid "" +":issue:`32185`: The SSL module no longer sends IP addresses in SNI TLS " +"extension on platforms with OpenSSL 1.0.2+ or inet_pton." +msgstr "" + +#: ../../../build/NEWS:18474 +msgid "" +":issue:`31518`: Debian Unstable has disabled TLS 1.0 and 1.1 for " +"SSLv23_METHOD(). Change TLS/SSL protocol of some tests to PROTOCOL_TLS or " +"PROTOCOL_TLSv1_2 to make them pass on Debian." +msgstr "" + +#: ../../../build/NEWS:18507 +msgid ":issue:`32588`: Create standalone _distutils_findvs module." +msgstr "" + +#: ../../../build/NEWS:18512 +msgid "" +":issue:`32726`: Provide an additional, more modern macOS installer variant " +"that supports macOS 10.9+ systems in 64-bit mode only. Upgrade the supplied " +"third-party libraries to OpenSSL 1.0.2n, XZ 5.2.3, and SQLite 3.22.0. The " +"10.9+ installer now links with and supplies its own copy of Tcl/Tk 8.6.8." +msgstr "" + +#: ../../../build/NEWS:18568 +msgid "Python 3.6.4 final" +msgstr "Python 3.6.4 正式版" + +#: ../../../build/NEWS:18570 +msgid "*Release date: 2017-12-18*" +msgstr "*发布日期: 2017-12-18*" + +#: ../../../build/NEWS:18572 +msgid "There were no new code changes in version 3.6.4 since v3.6.4rc1." +msgstr "从 3.6.4 rc1 到 3.6.4 正式版中没有新的代码更改。" + +#: ../../../build/NEWS:18577 +msgid "Python 3.6.4 release candidate 1" +msgstr "Python 3.6.4 rc1" + +#: ../../../build/NEWS:18606 +msgid "" +":issue:`31852`: Fix a segmentation fault caused by a combination of the " +"async soft keyword and continuation lines." +msgstr "" + +#: ../../../build/NEWS:18940 +msgid "" +":issue:`13802`: Use non-Latin characters in the IDLE's Font settings sample." +" Even if one selects a font that defines a limited subset of the unicode " +"Basic Multilingual Plane, tcl/tk will use other fonts that define a " +"character. The expanded example give users of non-Latin characters a better " +"idea of what they might see in IDLE's shell and editors. To make room for " +"the expanded sample, frames on the Font tab are re-arranged. The Font/Tabs " +"help explains a bit about the additions." +msgstr "" + +#: ../../../build/NEWS:18996 +msgid "Python 3.6.3 final" +msgstr "Python 3.6.3 正式版" + +#: ../../../build/NEWS:18998 +msgid "*Release date: 2017-10-03*" +msgstr "*发布日期: 2017-10-03*" + +#: ../../../build/NEWS:19003 +msgid "" +":issue:`31641`: Re-allow arbitrary iterables in " +"`concurrent.futures.as_completed()`. Fixes regression in 3.6.3rc1." +msgstr "" + +#: ../../../build/NEWS:19009 +msgid "" +":issue:`31662`: Fix typos in Windows ``uploadrelease.bat`` script. Fix " +"Windows Doc build issues in ``Doc/make.bat``." +msgstr "" + +#: ../../../build/NEWS:19012 +msgid "" +":issue:`31423`: Fix building the PDF documentation with newer versions of " +"Sphinx." +msgstr "" + +#: ../../../build/NEWS:19017 +msgid "Python 3.6.3 release candidate 1" +msgstr "Python 3.6.3 rc1" + +#: ../../../build/NEWS:19019 +msgid "*Release date: 2017-09-18*" +msgstr "*发布日期: 2017-09-18*" + +#: ../../../build/NEWS:19471 +msgid "Python 3.6.2 final" +msgstr "Python 3.6.2 正式版" + +#: ../../../build/NEWS:19473 +msgid "*Release date: 2017-07-17*" +msgstr "*发布日期: 2017-07-17*" + +#: ../../../build/NEWS:19475 ../../../build/NEWS:20199 +msgid "No changes since release candidate 2" +msgstr "自rc2起没有更改" + +#: ../../../build/NEWS:19480 +msgid "Python 3.6.2 release candidate 2" +msgstr "Python 3.6.2 rc2" + +#: ../../../build/NEWS:19482 +msgid "*Release date: 2017-07-07*" +msgstr "*发布日期: 2017-07-07*" + +#: ../../../build/NEWS:19507 +msgid "Python 3.6.2 release candidate 1" +msgstr "Python 3.6.2 rc1" + +#: ../../../build/NEWS:19509 +msgid "*Release date: 2017-06-17*" +msgstr "*发布日期: 2017-06-17*" + +#: ../../../build/NEWS:19524 +msgid "" +":issue:`30604`: Move co_extra_freefuncs to not be per-thread to avoid " +"crashes" +msgstr "" + +#: ../../../build/NEWS:19554 ../../../build/NEWS:23460 +msgid ":issue:`29600`: Fix wrapping coroutine return values in StopIteration." +msgstr "" + +#: ../../../build/NEWS:19583 ../../../build/NEWS:23526 +msgid "" +":issue:`30645`: Fix path calculation in imp.load_package(), fixing it for " +"cases when a package is only shipped with bytecodes. Patch by Alexandru " +"Ardelean." +msgstr "" + +#: ../../../build/NEWS:19593 +msgid "" +":issue:`24484`: Avoid race condition in multiprocessing cleanup (#2159)" +msgstr "" + +#: ../../../build/NEWS:19667 ../../../build/NEWS:23594 +msgid "" +":issue:`26293`: Change resulted because of zipfile breakage. (See also: " +":issue:`29094`)" +msgstr "" + +#: ../../../build/NEWS:19741 ../../../build/NEWS:23661 +msgid "" +":issue:`28298`: Fix a bug that prevented array 'Q', 'L' and 'I' from " +"accepting big intables (objects that have __int__) as elements. Patch by " +"Oren Milman." +msgstr "" + +#: ../../../build/NEWS:19784 +msgid "" +":issue:`27867`: Function PySlice_GetIndicesEx() no longer replaced with a " +"macro if Py_LIMITED_API is not set." +msgstr "" + +#: ../../../build/NEWS:19856 +msgid "Python 3.6.1 final" +msgstr "Python 3.6.1 正式版" + +#: ../../../build/NEWS:19858 +msgid "*Release date: 2017-03-21*" +msgstr "*发布日期: 2017-03-21*" + +#: ../../../build/NEWS:19874 +msgid ":issue:`27593`: fix format of git information used in sys.version" +msgstr "" + +#: ../../../build/NEWS:19876 +msgid "Fix incompatible comment in python.h" +msgstr "" + +#: ../../../build/NEWS:19880 +msgid "Python 3.6.1 release candidate 1" +msgstr "Python 3.6.1 rc1" + +#: ../../../build/NEWS:19882 +msgid "*Release date: 2017-03-04*" +msgstr "*发布日期: 2017-03-04*" + +#: ../../../build/NEWS:19993 ../../../build/NEWS:23693 +msgid "" +":issue:`29519`: Fix weakref spewing exceptions during interpreter shutdown " +"when used with a rare combination of multiprocessing and custom codecs." +msgstr "" + +#: ../../../build/NEWS:20009 +msgid "" +":issue:`29316`: Restore the provisional status of typing module, add " +"corresponding note to documentation. Patch by Ivan L." +msgstr "" + +#: ../../../build/NEWS:20015 ../../../build/NEWS:23709 +msgid "" +":issue:`29011`: Fix an important omission by adding Deque to the typing " +"module." +msgstr "" + +#: ../../../build/NEWS:20029 +msgid "" +":issue:`29203`: functools.lru_cache() now respects :pep:`468` and preserves " +"the order of keyword arguments. f(a=1, b=2) is now cached separately from " +"f(b=2, a=1) since both calls could potentially give different results." +msgstr "" + +#: ../../../build/NEWS:20036 ../../../build/NEWS:23975 +msgid "" +":issue:`29094`: Offsets in a ZIP file created with extern file object and " +"modes \"w\" and \"x\" now are relative to the start of the file." +msgstr "" + +#: ../../../build/NEWS:20039 +msgid "" +":issue:`29085`: Allow random.Random.seed() to use high quality OS randomness" +" rather than the pid and time." +msgstr "" + +#: ../../../build/NEWS:20042 +msgid "" +":issue:`29061`: Fixed bug in secrets.randbelow() which would hang when given" +" a negative input. Patch by Brendan Donegan." +msgstr "" + +#: ../../../build/NEWS:20050 ../../../build/NEWS:23981 +msgid "" +":issue:`29119`: Fix weakrefs in the pure python version of " +"collections.OrderedDict move_to_end() method. Contributed by Andra Bogildea." +msgstr "" + +#: ../../../build/NEWS:20062 +msgid "" +":issue:`29055`: Neaten-up empty population error on random.choice() by " +"suppressing the upstream exception." +msgstr "" + +#: ../../../build/NEWS:20077 ../../../build/NEWS:24005 +msgid "" +":issue:`28847`: dbm.dumb now supports reading read-only files and no longer " +"writes the index file when it is not changed." +msgstr "" + +#: ../../../build/NEWS:20095 +msgid ":issue:`29579`: Removes readme.txt from the installer" +msgstr "" + +#: ../../../build/NEWS:20097 +msgid "" +":issue:`29326`: Ignores blank lines in ._pth files (Patch by Alexey " +"Izbyshev)" +msgstr "" + +#: ../../../build/NEWS:20099 +msgid "" +":issue:`28164`: Correctly handle special console filenames (patch by Eryk " +"Sun)" +msgstr "" + +#: ../../../build/NEWS:20101 +msgid ":issue:`29409`: Implement :pep:`529` for io.FileIO (Patch by Eryk Sun)" +msgstr "" + +#: ../../../build/NEWS:20103 ../../../build/NEWS:23798 +msgid "" +":issue:`29392`: Prevent crash when passing invalid arguments into msvcrt " +"module." +msgstr "" + +#: ../../../build/NEWS:20108 +msgid "" +":issue:`28896`: Deprecate WindowsRegistryFinder and disable it by default." +msgstr "" + +#: ../../../build/NEWS:20113 +msgid "" +":issue:`27867`: Function PySlice_GetIndicesEx() is replaced with a macro if " +"Py_LIMITED_API is not set or set to the value between 0x03050400 and " +"0x03060000 (not including) or 0x03060100 or higher." +msgstr "" + +#: ../../../build/NEWS:20143 ../../../build/NEWS:23763 +msgid "" +":issue:`28087`: Skip test_asyncore and test_eintr poll failures on macOS. " +"Skip some tests of select.poll when running on macOS due to unresolved " +"issues with the underlying system poll function on some macOS versions." +msgstr "" + +#: ../../../build/NEWS:20147 ../../../build/NEWS:23773 +msgid "" +":issue:`29571`: to match the behaviour of the ``re.LOCALE`` flag, " +"test_re.test_locale_flag now uses ``locale.getpreferredencoding(False)`` to " +"determine the candidate encoding for the test regex (allowing it to " +"correctly skip the test when the default locale encoding is a multi-byte " +"encoding)" +msgstr "" + +#: ../../../build/NEWS:20195 +msgid "Python 3.6.0 final" +msgstr "Python 3.6.0 正式版" + +#: ../../../build/NEWS:20197 +msgid "*Release date: 2016-12-23*" +msgstr "*发布日期: 2016-12-23*" + +#: ../../../build/NEWS:20204 +msgid "Python 3.6.0 release candidate 2" +msgstr "Python 3.6.0 rc2" + +#: ../../../build/NEWS:20206 +msgid "*Release date: 2016-12-16*" +msgstr "*发布日期: 2016-12-16*" + +#: ../../../build/NEWS:20214 +msgid "" +":issue:`28990`: Fix asyncio SSL hanging if connection is closed before " +"handshake is completed. (Patch by HoHo-Ho)" +msgstr "" + +#: ../../../build/NEWS:20220 +msgid ":issue:`28770`: Fix python-gdb.py for fastcalls." +msgstr "" + +#: ../../../build/NEWS:20225 +msgid ":issue:`28896`: Deprecate WindowsRegistryFinder." +msgstr "" + +#: ../../../build/NEWS:20230 +msgid "" +":issue:`28898`: Prevent gdb build errors due to HAVE_LONG_LONG redefinition." +msgstr "" + +#: ../../../build/NEWS:20234 +msgid "Python 3.6.0 release candidate 1" +msgstr "Python 3.6.0 rc1" + +#: ../../../build/NEWS:20236 +msgid "*Release date: 2016-12-06*" +msgstr "*发布日期: 2016-12-06*" + +#: ../../../build/NEWS:20258 +msgid "" +":issue:`27030`: Unknown escapes in re.sub() replacement template are allowed" +" again. But they still are deprecated and will be disabled in 3.7." +msgstr "" + +#: ../../../build/NEWS:20276 +msgid ":issue:`28843`: Fix asyncio C Task to handle exceptions __traceback__." +msgstr "" + +#: ../../../build/NEWS:20286 +msgid "" +":issue:`23722`: The data model reference and the porting section in the " +"What's New guide now cover the additional ``__classcell__`` handling needed " +"for custom metaclasses to fully support :pep:`487` and zero-argument " +"``super()``." +msgstr "" + +#: ../../../build/NEWS:20298 +msgid "Python 3.6.0 beta 4" +msgstr "Python 3.6.0 beta 4" + +#: ../../../build/NEWS:20300 +msgid "*Release date: 2016-11-21*" +msgstr "*发布日期: 2016-11-21*" + +#: ../../../build/NEWS:20328 +msgid "" +":issue:`27243`: Change PendingDeprecationWarning -> DeprecationWarning. As " +"it was agreed in the issue, __aiter__ returning an awaitable should result " +"in PendingDeprecationWarning in 3.5 and in DeprecationWarning in 3.6." +msgstr "" + +#: ../../../build/NEWS:20347 +msgid "" +":issue:`20572`: The subprocess.Popen.wait method's undocumented endtime " +"parameter now raises a DeprecationWarning." +msgstr "" + +#: ../../../build/NEWS:20364 +msgid ":issue:`28600`: Optimize loop.call_soon." +msgstr "" + +#: ../../../build/NEWS:20366 ../../../build/NEWS:24335 +msgid "" +":issue:`28613`: Fix get_event_loop() return the current loop if called from " +"coroutines/callbacks." +msgstr "" + +#: ../../../build/NEWS:20369 +msgid ":issue:`28634`: Fix asyncio.isfuture() to support unittest.Mock." +msgstr "" + +#: ../../../build/NEWS:20371 +msgid ":issue:`26081`: Fix refleak in _asyncio.Future.__iter__().throw." +msgstr "" + +#: ../../../build/NEWS:20373 ../../../build/NEWS:24338 +msgid "" +":issue:`28639`: Fix inspect.isawaitable to always return bool Patch by " +"Justin Mayfield." +msgstr "" + +#: ../../../build/NEWS:20376 ../../../build/NEWS:24341 +msgid "" +":issue:`28652`: Make loop methods reject socket kinds they do not support." +msgstr "" + +#: ../../../build/NEWS:20378 ../../../build/NEWS:24343 +msgid ":issue:`28653`: Fix a refleak in functools.lru_cache." +msgstr "" + +#: ../../../build/NEWS:20380 ../../../build/NEWS:24345 +msgid "" +":issue:`28703`: Fix asyncio.iscoroutinefunction to handle Mock objects." +msgstr "" + +#: ../../../build/NEWS:20382 +msgid "" +":issue:`28704`: Fix create_unix_server to support Path-like objects (PEP " +"519)." +msgstr "" + +#: ../../../build/NEWS:20384 +msgid ":issue:`28720`: Add collections.abc.AsyncGenerator." +msgstr "" + +#: ../../../build/NEWS:20412 +msgid "Python 3.6.0 beta 3" +msgstr "Python 3.6.0 beta 3" + +#: ../../../build/NEWS:20414 +msgid "*Release date: 2016-10-31*" +msgstr "*发布日期: 2016-10-31*" + +#: ../../../build/NEWS:20437 +msgid "" +":issue:`28471`: Fix \"Python memory allocator called without holding the " +"GIL\" crash in socket.setblocking." +msgstr "" + +#: ../../../build/NEWS:20459 +msgid "" +":issue:`18844`: The various ways of specifying weights for random.choices() " +"now produce the same result sequences." +msgstr "" + +#: ../../../build/NEWS:20462 ../../../build/NEWS:24037 +msgid "" +":issue:`28255`: calendar.TextCalendar().prmonth() no longer prints a space " +"at the start of new line after printing a month's calendar. Patch by Xiang " +"Zhang." +msgstr "" + +#: ../../../build/NEWS:20495 ../../../build/NEWS:24051 +msgid ":issue:`24452`: Make webbrowser support Chrome on Mac OS X." +msgstr "" + +#: ../../../build/NEWS:20500 +msgid "" +":issue:`28492`: Fix how StopIteration exception is raised in " +"_asyncio.Future." +msgstr "" + +#: ../../../build/NEWS:20502 +msgid "" +":issue:`28500`: Fix asyncio to handle async gens GC from another thread." +msgstr "" + +#: ../../../build/NEWS:20504 ../../../build/NEWS:24327 +msgid "" +":issue:`26923`: Fix asyncio.Gather to refuse being cancelled once all " +"children are done. Patch by Johannes Ebke." +msgstr "" + +#: ../../../build/NEWS:20507 ../../../build/NEWS:24330 +msgid "" +":issue:`26796`: Don't configure the number of workers for default threadpool" +" executor. Initial patch by Hans Lawrenz." +msgstr "" + +#: ../../../build/NEWS:20510 +msgid ":issue:`28544`: Implement asyncio.Task in C." +msgstr "" + +#: ../../../build/NEWS:20536 +msgid "Python 3.6.0 beta 2" +msgstr "Python 3.6.0 beta 2" + +#: ../../../build/NEWS:20538 +msgid "*Release date: 2016-10-10*" +msgstr "*发布日期: 2016-10-10*" + +#: ../../../build/NEWS:20554 +msgid "" +":issue:`28376`: Creating instances of range_iterator by calling " +"range_iterator type now is deprecated. Patch by Oren Milman." +msgstr "" + +#: ../../../build/NEWS:20557 ../../../build/NEWS:23878 +msgid "" +":issue:`28376`: The constructor of range_iterator now checks that step is " +"not 0. Patch by Oren Milman." +msgstr "" + +#: ../../../build/NEWS:20618 ../../../build/NEWS:24056 +msgid "" +":issue:`26293`: Fixed writing ZIP files that starts not from the start of " +"the file. Offsets in ZIP file now are relative to the start of the archive " +"in conforming to the specification." +msgstr "" + +#: ../../../build/NEWS:20625 +msgid ":issue:`27181`: remove statistics.geometric_mean and defer until 3.7." +msgstr "" + +#: ../../../build/NEWS:20804 +msgid "Python 3.6.0 beta 1" +msgstr "Python 3.6.0 beta 1" + +#: ../../../build/NEWS:20806 +msgid "*Release date: 2016-09-12*" +msgstr "*发布日期: 2016-09-12*" + +#: ../../../build/NEWS:20811 +msgid "" +":issue:`23722`: The __class__ cell used by zero-argument super() is now " +"initialized from type.__new__ rather than __build_class__, so class methods " +"relying on that will now work correctly when called from metaclass methods " +"during class creation. Patch by Martin Teichmann." +msgstr "" + +#: ../../../build/NEWS:20816 ../../../build/NEWS:23909 +msgid "" +":issue:`25221`: Fix corrupted result from PyLong_FromLong(0) when Python is " +"compiled with NSMALLPOSINTS = 0." +msgstr "" + +#: ../../../build/NEWS:20819 +msgid "" +":issue:`27080`: Implement formatting support for :pep:`515`. Initial patch " +"by Chris Angelico." +msgstr "" + +#: ../../../build/NEWS:20822 +msgid "" +":issue:`27199`: In tarfile, expose copyfileobj bufsize to improve " +"throughput. Patch by Jason Fried." +msgstr "" + +#: ../../../build/NEWS:20825 +msgid "" +":issue:`27948`: In f-strings, only allow backslashes inside the braces " +"(where the expressions are). This is a breaking change from the 3.6 alpha " +"releases, where backslashes are allowed anywhere in an f-string. Also, " +"require that expressions inside f-strings be enclosed within literal braces," +" and not escapes like ``f'\\x7b\"hi\"\\x7d'``." +msgstr "" + +#: ../../../build/NEWS:20831 +msgid ":issue:`28046`: Remove platform-specific directories from sys.path." +msgstr "" + +#: ../../../build/NEWS:20833 +msgid ":issue:`28071`: Add early-out for differencing from an empty set." +msgstr "" + +#: ../../../build/NEWS:20835 ../../../build/NEWS:23912 +msgid "" +":issue:`25758`: Prevents zipimport from unnecessarily encoding a filename " +"(patch by Eryk Sun)" +msgstr "" + +#: ../../../build/NEWS:20838 +msgid "" +":issue:`25856`: The __module__ attribute of extension classes and functions " +"now is interned. This leads to more compact pickle data with protocol 4." +msgstr "" + +#: ../../../build/NEWS:20841 +msgid "" +":issue:`27213`: Rework CALL_FUNCTION* opcodes to produce shorter and more " +"efficient bytecode. Patch by Demur Rumed, design by Serhiy Storchaka, " +"reviewed by Serhiy Storchaka and Victor Stinner." +msgstr "" + +#: ../../../build/NEWS:20845 +msgid "" +":issue:`26331`: Implement tokenizing support for :pep:`515`. Patch by Georg " +"Brandl." +msgstr "" + +#: ../../../build/NEWS:20848 +msgid "" +":issue:`27999`: Make \"global after use\" a SyntaxError, and ditto for " +"nonlocal. Patch by Ivan Levkivskyi." +msgstr "" + +#: ../../../build/NEWS:20851 +msgid ":issue:`28003`: Implement :pep:`525` -- Asynchronous Generators." +msgstr "" + +#: ../../../build/NEWS:20853 +msgid "" +":issue:`27985`: Implement :pep:`526` -- Syntax for Variable Annotations. " +"Patch by Ivan Levkivskyi." +msgstr "" + +#: ../../../build/NEWS:20856 +msgid "" +":issue:`26058`: Add a new private version to the builtin dict type, " +"incremented at each dictionary creation and at each dictionary change. " +"Implementation of the PEP 509." +msgstr "" + +#: ../../../build/NEWS:20860 +msgid "" +":issue:`27364`: A backslash-character pair that is not a valid escape " +"sequence now generates a DeprecationWarning. Patch by Emanuel Barry." +msgstr "" + +#: ../../../build/NEWS:20863 +msgid "" +":issue:`27350`: `dict` implementation is changed like PyPy. It is more " +"compact and preserves insertion order. (Concept developed by Raymond " +"Hettinger and patch by Inada Naoki.)" +msgstr "" + +#: ../../../build/NEWS:20867 +msgid "" +":issue:`27911`: Remove unnecessary error checks in " +"``exec_builtin_or_dynamic()``." +msgstr "" + +#: ../../../build/NEWS:20870 +msgid "" +":issue:`27078`: Added BUILD_STRING opcode. Optimized f-strings evaluation." +msgstr "" + +#: ../../../build/NEWS:20872 +msgid "" +":issue:`17884`: Python now requires systems with inttypes.h and stdint.h" +msgstr "" + +#: ../../../build/NEWS:20874 +msgid "" +":issue:`27961`: Require platforms to support ``long long``. Python hasn't " +"compiled without ``long long`` for years, so this is basically a formality." +msgstr "" + +#: ../../../build/NEWS:20878 +msgid "" +":issue:`27355`: Removed support for Windows CE. It was never finished, and " +"Windows CE is no longer a relevant platform for Python." +msgstr "" + +#: ../../../build/NEWS:20881 +msgid "Implement :pep:`523`." +msgstr "" + +#: ../../../build/NEWS:20883 +msgid "" +":issue:`27870`: A left shift of zero by a large integer no longer attempts " +"to allocate large amounts of memory." +msgstr "" + +#: ../../../build/NEWS:20886 +msgid "" +":issue:`25402`: In int-to-decimal-string conversion, improve the estimate of" +" the intermediate memory required, and remove an unnecessarily strict " +"overflow check. Patch by Serhiy Storchaka." +msgstr "" + +#: ../../../build/NEWS:20890 +msgid "" +":issue:`27214`: In long_invert, be more careful about modifying object " +"returned by long_add, and remove an unnecessary check for small longs. " +"Thanks Oren Milman for analysis and patch." +msgstr "" + +#: ../../../build/NEWS:20894 +msgid "" +":issue:`27506`: Support passing the bytes/bytearray.translate() \"delete\" " +"argument by keyword." +msgstr "" + +#: ../../../build/NEWS:20897 ../../../build/NEWS:23918 +msgid "" +":issue:`27812`: Properly clear out a generator's frame's backreference to " +"the generator to prevent crashes in frame.clear()." +msgstr "" + +#: ../../../build/NEWS:20900 ../../../build/NEWS:23921 +msgid "" +":issue:`27811`: Fix a crash when a coroutine that has not been awaited is " +"finalized with warnings-as-errors enabled." +msgstr "" + +#: ../../../build/NEWS:20903 ../../../build/NEWS:23924 +msgid "" +":issue:`27587`: Fix another issue found by PVS-Studio: Null pointer check " +"after use of 'def' in _PyState_AddModule(). Initial patch by Christian " +"Heimes." +msgstr "" + +#: ../../../build/NEWS:20906 +msgid "" +":issue:`27792`: The modulo operation applied to ``bool`` and other ``int`` " +"subclasses now always returns an ``int``. Previously the return type " +"depended on the input values. Patch by Xiang Zhang." +msgstr "" + +#: ../../../build/NEWS:20910 +msgid ":issue:`26984`: int() now always returns an instance of exact int." +msgstr "" + +#: ../../../build/NEWS:20912 +msgid "" +":issue:`25604`: Fix a minor bug in integer true division; this bug could " +"potentially have caused off-by-one-ulp results on platforms with unreliable " +"ldexp implementations." +msgstr "" + +#: ../../../build/NEWS:20916 +msgid ":issue:`24254`: Make class definition namespace ordered by default." +msgstr "" + +#: ../../../build/NEWS:20918 +msgid "" +":issue:`27662`: Fix an overflow check in ``List_New``: the original code was" +" checking against ``Py_SIZE_MAX`` instead of the correct upper bound of " +"``Py_SSIZE_T_MAX``. Patch by Xiang Zhang." +msgstr "" + +#: ../../../build/NEWS:20922 ../../../build/NEWS:23930 +msgid "" +":issue:`27782`: Multi-phase extension module import now correctly allows the" +" ``m_methods`` field to be used to add module level functions to instances " +"of non-module types returned from ``Py_create_mod``. Patch by Xiang Zhang." +msgstr "" + +#: ../../../build/NEWS:20926 ../../../build/NEWS:23934 +msgid "" +":issue:`27936`: The round() function accepted a second None argument for " +"some types but not for others. Fixed the inconsistency by accepting None " +"for all numeric types." +msgstr "" + +#: ../../../build/NEWS:20930 ../../../build/NEWS:23938 +msgid "" +":issue:`27487`: Warn if a submodule argument to \"python -m\" or " +"runpy.run_module() is found in sys.modules after parent packages are " +"imported, but before the submodule is executed." +msgstr "" + +#: ../../../build/NEWS:20934 +msgid "" +":issue:`27157`: Make only type() itself accept the one-argument form. Patch " +"by Eryk Sun and Emanuel Barry." +msgstr "" + +#: ../../../build/NEWS:20937 ../../../build/NEWS:23942 +msgid "" +":issue:`27558`: Fix a SystemError in the implementation of \"raise\" " +"statement. In a brand new thread, raise a RuntimeError since there is no " +"active exception to reraise. Patch written by Xiang Zhang." +msgstr "" + +#: ../../../build/NEWS:20941 +msgid ":issue:`28008`: Implement :pep:`530` -- asynchronous comprehensions." +msgstr "" + +#: ../../../build/NEWS:20943 ../../../build/NEWS:23967 +msgid ":issue:`27942`: Fix memory leak in codeobject.c" +msgstr "" + +#: ../../../build/NEWS:20948 ../../../build/NEWS:24011 +msgid ":issue:`28732`: Fix crash in os.spawnv() with no elements in args" +msgstr "" + +#: ../../../build/NEWS:20950 ../../../build/NEWS:24013 +msgid "" +":issue:`28485`: Always raise ValueError for negative " +"compileall.compile_dir(workers=...) parameter, even when multithreading is " +"unavailable." +msgstr "" + +#: ../../../build/NEWS:20954 +msgid "" +":issue:`28037`: Use sqlite3_get_autocommit() instead of setting " +"Connection->inTransaction manually." +msgstr "" + +#: ../../../build/NEWS:20957 +msgid "" +":issue:`25283`: Attributes tm_gmtoff and tm_zone are now available on all " +"platforms in the return values of time.localtime() and time.gmtime()." +msgstr "" + +#: ../../../build/NEWS:20960 +msgid "" +":issue:`24454`: Regular expression match object groups are now accessible " +"using __getitem__. \"mo[x]\" is equivalent to \"mo.group(x)\"." +msgstr "" + +#: ../../../build/NEWS:20963 +msgid "" +":issue:`10740`: sqlite3 no longer implicitly commit an open transaction " +"before DDL statements." +msgstr "" + +#: ../../../build/NEWS:20966 +msgid ":issue:`17941`: Add a *module* parameter to collections.namedtuple()." +msgstr "" + +#: ../../../build/NEWS:20968 +msgid "" +":issue:`22493`: Inline flags now should be used only at the start of the " +"regular expression. Deprecation warning is emitted if uses them in the " +"middle of the regular expression." +msgstr "" + +#: ../../../build/NEWS:20972 +msgid "" +":issue:`26885`: xmlrpc now supports unmarshalling additional data types used" +" by Apache XML-RPC implementation for numerics and None." +msgstr "" + +#: ../../../build/NEWS:20975 +msgid "" +":issue:`28070`: Fixed parsing inline verbose flag in regular expressions." +msgstr "" + +#: ../../../build/NEWS:20977 +msgid "" +":issue:`19500`: Add client-side SSL session resumption to the ssl module." +msgstr "" + +#: ../../../build/NEWS:20979 +msgid "" +":issue:`28022`: Deprecate ssl-related arguments in favor of SSLContext. The " +"deprecation include manual creation of SSLSocket and certfile/keyfile (or " +"similar) in ftplib, httplib, imaplib, smtplib, poplib and urllib." +msgstr "" + +#: ../../../build/NEWS:20983 +msgid "" +":issue:`28043`: SSLContext has improved default settings: OP_NO_SSLv2, " +"OP_NO_SSLv3, OP_NO_COMPRESSION, OP_CIPHER_SERVER_PREFERENCE, " +"OP_SINGLE_DH_USE, OP_SINGLE_ECDH_USE and HIGH ciphers without MD5." +msgstr "" + +#: ../../../build/NEWS:20987 +msgid "" +":issue:`24693`: Changed some RuntimeError's in the zipfile module to more " +"appropriate types. Improved some error messages and debugging output." +msgstr "" + +#: ../../../build/NEWS:20990 +msgid "" +":issue:`17909`: ``json.load`` and ``json.loads`` now support binary input " +"encoded as UTF-8, UTF-16 or UTF-32. Patch by Serhiy Storchaka." +msgstr "" + +#: ../../../build/NEWS:20993 +msgid "" +":issue:`27137`: the pure Python fallback implementation of " +"``functools.partial`` now matches the behaviour of its accelerated C " +"counterpart for subclassing, pickling and text representation purposes. " +"Patch by Emanuel Barry and Serhiy Storchaka." +msgstr "" + +#: ../../../build/NEWS:20998 ../../../build/NEWS:24066 +msgid "" +"Fix possible integer overflows and crashes in the mmap module with unusual " +"usage patterns." +msgstr "" + +#: ../../../build/NEWS:21001 ../../../build/NEWS:24069 +msgid "" +":issue:`1703178`: Fix the ability to pass the --link-objects option to the " +"distutils build_ext command." +msgstr "" + +#: ../../../build/NEWS:21004 ../../../build/NEWS:24116 +msgid "" +":issue:`28019`: itertools.count() no longer rounds non-integer step in range" +" between 1.0 and 2.0 to 1." +msgstr "" + +#: ../../../build/NEWS:21007 +msgid "" +":issue:`18401`: Pdb now supports the 'readrc' keyword argument to control " +"whether .pdbrc files should be read. Patch by Martin Matusiak and Sam " +"Kimbrel." +msgstr "" + +#: ../../../build/NEWS:21011 ../../../build/NEWS:24119 +msgid "" +":issue:`25969`: Update the lib2to3 grammar to handle the unpacking " +"generalizations added in 3.5." +msgstr "" + +#: ../../../build/NEWS:21014 ../../../build/NEWS:24122 +msgid "" +":issue:`14977`: mailcap now respects the order of the lines in the mailcap " +"files (\"first match\"), as required by RFC 1542. Patch by Michael Lazar." +msgstr "" + +#: ../../../build/NEWS:21017 +msgid ":issue:`28082`: Convert re flag constants to IntFlag." +msgstr "" + +#: ../../../build/NEWS:21019 +msgid "" +":issue:`28025`: Convert all ssl module constants to IntEnum and IntFlags. " +"SSLContext properties now return flags and enums." +msgstr "" + +#: ../../../build/NEWS:21022 +msgid ":issue:`23591`: Add Flag, IntFlag, and auto() to enum module." +msgstr "" + +#: ../../../build/NEWS:21024 +msgid "" +":issue:`433028`: Added support of modifier spans in regular expressions." +msgstr "" + +#: ../../../build/NEWS:21026 ../../../build/NEWS:24125 +msgid ":issue:`24594`: Validates persist parameter when opening MSI database" +msgstr "" + +#: ../../../build/NEWS:21028 ../../../build/NEWS:24127 +msgid "" +":issue:`17582`: xml.etree.ElementTree nows preserves whitespaces in " +"attributes (Patch by Duane Griffin. Reviewed and approved by Stefan " +"Behnel.)" +msgstr "" + +#: ../../../build/NEWS:21031 ../../../build/NEWS:24130 +msgid "" +":issue:`28047`: Fixed calculation of line length used for the base64 CTE in " +"the new email policies." +msgstr "" + +#: ../../../build/NEWS:21034 +msgid ":issue:`27576`: Fix call order in OrderedDict.__init__()." +msgstr "" + +#: ../../../build/NEWS:21036 +msgid "email.generator.DecodedGenerator now supports the policy keyword." +msgstr "" + +#: ../../../build/NEWS:21038 +msgid "" +":issue:`28027`: Remove undocumented modules from ``Lib/plat-*``: IN, CDROM, " +"DLFCN, TYPES, CDIO, and STROPTS." +msgstr "" + +#: ../../../build/NEWS:21041 ../../../build/NEWS:24133 +msgid "" +":issue:`27445`: Don't pass str(_charset) to MIMEText.set_payload(). Patch by" +" Claude Paroz." +msgstr "" + +#: ../../../build/NEWS:21044 +msgid "" +":issue:`24277`: The new email API is no longer provisional, and the docs " +"have been reorganized and rewritten to emphasize the new API." +msgstr "" + +#: ../../../build/NEWS:21047 ../../../build/NEWS:24136 +msgid "" +":issue:`22450`: urllib now includes an ``Accept: */*`` header among the " +"default headers. This makes the results of REST API requests more consistent" +" and predictable especially when proxy servers are involved." +msgstr "" + +#: ../../../build/NEWS:21051 ../../../build/NEWS:24140 +msgid "" +"lib2to3.pgen3.driver.load_grammar() now creates a stable cache file between " +"runs given the same Grammar.txt input regardless of the hash randomization " +"setting." +msgstr "" + +#: ../../../build/NEWS:21055 +msgid "" +":issue:`28005`: Allow ImportErrors in encoding implementation to propagate." +msgstr "" + +#: ../../../build/NEWS:21057 +msgid ":issue:`26667`: Support path-like objects in importlib.util." +msgstr "" + +#: ../../../build/NEWS:21059 ../../../build/NEWS:24144 +msgid "" +":issue:`27570`: Avoid zero-length memcpy() etc calls with null source " +"pointers in the \"ctypes\" and \"array\" modules." +msgstr "" + +#: ../../../build/NEWS:21062 ../../../build/NEWS:24147 +msgid "" +":issue:`22233`: Break email header lines *only* on the RFC specified CR and " +"LF characters, not on arbitrary unicode line breaks. This also fixes a bug " +"in HTTP header parsing." +msgstr "" + +#: ../../../build/NEWS:21066 +msgid "" +":issue:`27331`: The email.mime classes now all accept an optional policy " +"keyword." +msgstr "" + +#: ../../../build/NEWS:21069 ../../../build/NEWS:24151 +msgid "" +":issue:`27988`: Fix email iter_attachments incorrect mutation of payload " +"list." +msgstr "" + +#: ../../../build/NEWS:21071 +msgid ":issue:`16113`: Add SHA-3 and SHAKE support to hashlib module." +msgstr "" + +#: ../../../build/NEWS:21073 +msgid "Eliminate a tautological-pointer-compare warning in _scproxy.c." +msgstr "" + +#: ../../../build/NEWS:21075 +msgid "" +":issue:`27776`: The :func:`os.urandom` function does now block on Linux 3.17" +" and newer until the system urandom entropy pool is initialized to increase " +"the security. This change is part of the :pep:`524`." +msgstr "" + +#: ../../../build/NEWS:21079 +msgid "" +":issue:`27778`: Expose the Linux ``getrandom()`` syscall as a new " +":func:`os.getrandom` function. This change is part of the :pep:`524`." +msgstr "" + +#: ../../../build/NEWS:21082 ../../../build/NEWS:24153 +msgid "" +":issue:`27691`: Fix ssl module's parsing of GEN_RID subject alternative name" +" fields in X.509 certs." +msgstr "" + +#: ../../../build/NEWS:21085 +msgid ":issue:`18844`: Add random.choices()." +msgstr "" + +#: ../../../build/NEWS:21087 +msgid "" +":issue:`25761`: Improved error reporting about truncated pickle data in C " +"implementation of unpickler. UnpicklingError is now raised instead of " +"AttributeError and ValueError in some cases." +msgstr "" + +#: ../../../build/NEWS:21091 +msgid ":issue:`26798`: Add BLAKE2 (blake2b and blake2s) to hashlib." +msgstr "" + +#: ../../../build/NEWS:21093 +msgid "" +":issue:`26032`: Optimized globbing in pathlib by using os.scandir(); it is " +"now about 1.5--4 times faster." +msgstr "" + +#: ../../../build/NEWS:21096 +msgid "" +":issue:`25596`: Optimized glob() and iglob() functions in the glob module; " +"they are now about 3--6 times faster." +msgstr "" + +#: ../../../build/NEWS:21099 +msgid "" +":issue:`27928`: Add scrypt (password-based key derivation function) to " +"hashlib module (requires OpenSSL 1.1.0)." +msgstr "" + +#: ../../../build/NEWS:21102 ../../../build/NEWS:24156 +msgid "" +":issue:`27850`: Remove 3DES from ssl module's default cipher list to counter" +" measure sweet32 attack (CVE-2016-2183)." +msgstr "" + +#: ../../../build/NEWS:21105 ../../../build/NEWS:24159 +msgid "" +":issue:`27766`: Add ChaCha20 Poly1305 to ssl module's default cipher list. " +"(Required OpenSSL 1.1.0 or LibreSSL)." +msgstr "" + +#: ../../../build/NEWS:21108 +msgid ":issue:`25387`: Check return value of winsound.MessageBeep." +msgstr "" + +#: ../../../build/NEWS:21110 +msgid "" +":issue:`27866`: Add SSLContext.get_ciphers() method to get a list of all " +"enabled ciphers." +msgstr "" + +#: ../../../build/NEWS:21113 +msgid ":issue:`27744`: Add AF_ALG (Linux Kernel crypto) to socket module." +msgstr "" + +#: ../../../build/NEWS:21115 ../../../build/NEWS:24162 +msgid ":issue:`26470`: Port ssl and hashlib module to OpenSSL 1.1.0." +msgstr "" + +#: ../../../build/NEWS:21117 +msgid "" +":issue:`11620`: Fix support for SND_MEMORY in winsound.PlaySound. Based on " +"a patch by Tim Lesher." +msgstr "" + +#: ../../../build/NEWS:21120 +msgid "" +":issue:`11734`: Add support for IEEE 754 half-precision floats to the struct" +" module. Based on a patch by Eli Stevens." +msgstr "" + +#: ../../../build/NEWS:21123 +msgid "" +":issue:`27919`: Deprecated ``extra_path`` distribution option in distutils " +"packaging." +msgstr "" + +#: ../../../build/NEWS:21126 +msgid "" +":issue:`23229`: Add new ``cmath`` constants: ``cmath.inf`` and ``cmath.nan``" +" to match ``math.inf`` and ``math.nan``, and also ``cmath.infj`` and " +"``cmath.nanj`` to match the format used by complex repr." +msgstr "" + +#: ../../../build/NEWS:21130 +msgid "" +":issue:`27842`: The csv.DictReader now returns rows of type OrderedDict. " +"(Contributed by Steve Holden.)" +msgstr "" + +#: ../../../build/NEWS:21133 ../../../build/NEWS:24164 +msgid "" +"Remove support for passing a file descriptor to os.access. It never worked " +"but previously didn't raise." +msgstr "" + +#: ../../../build/NEWS:21136 ../../../build/NEWS:24167 +msgid ":issue:`12885`: Fix error when distutils encounters symlink." +msgstr "" + +#: ../../../build/NEWS:21138 ../../../build/NEWS:24169 +msgid "" +":issue:`27881`: Fixed possible bugs when setting " +"sqlite3.Connection.isolation_level. Based on patch by Xiang Zhang." +msgstr "" + +#: ../../../build/NEWS:21141 ../../../build/NEWS:24172 +msgid "" +":issue:`27861`: Fixed a crash in sqlite3.Connection.cursor() when a factory " +"creates not a cursor. Patch by Xiang Zhang." +msgstr "" + +#: ../../../build/NEWS:21144 ../../../build/NEWS:24175 +msgid ":issue:`19884`: Avoid spurious output on OS X with Gnu Readline." +msgstr "" + +#: ../../../build/NEWS:21146 ../../../build/NEWS:24177 +msgid "" +":issue:`27706`: Restore deterministic behavior of random.Random().seed() for" +" string seeds using seeding version 1. Allows sequences of calls to " +"random() to exactly match those obtained in Python 2. Patch by Nofar " +"Schnider." +msgstr "" + +#: ../../../build/NEWS:21151 ../../../build/NEWS:24182 +msgid "" +":issue:`10513`: Fix a regression in Connection.commit(). Statements should " +"not be reset after a commit." +msgstr "" + +#: ../../../build/NEWS:21154 +msgid "" +":issue:`12319`: Chunked transfer encoding support added to " +"http.client.HTTPConnection requests. The urllib.request.AbstractHTTPHandler" +" class does not enforce a Content-Length header any more. If a HTTP request" +" has a file or iterable body, but no Content-Length header, the library now " +"falls back to use chunked transfer-encoding." +msgstr "" + +#: ../../../build/NEWS:21161 +msgid "" +"A new version of typing.py from https://github.com/python/typing: - " +"Collection (only for 3.6) (:issue:`27598`) - Add FrozenSet to __all__ " +"(upstream #261) - fix crash in _get_type_vars() (upstream #259) - Remove the" +" dict constraint in ForwardRef._eval_type (upstream #252)" +msgstr "" + +#: ../../../build/NEWS:21166 +msgid "" +":issue:`27832`: Make ``_normalize`` parameter to ``Fraction`` constructor " +"keyword-only, so that ``Fraction(2, 3, 4)`` now raises ``TypeError``." +msgstr "" + +#: ../../../build/NEWS:21169 ../../../build/NEWS:24190 +msgid "" +":issue:`27539`: Fix unnormalised ``Fraction.__pow__`` result in the case of " +"negative exponent and negative base." +msgstr "" + +#: ../../../build/NEWS:21172 ../../../build/NEWS:24193 +msgid "" +":issue:`21718`: cursor.description is now available for queries using CTEs." +msgstr "" + +#: ../../../build/NEWS:21174 +msgid "" +":issue:`27819`: In distutils sdists, simply produce the \"gztar\" (gzipped " +"tar format) distributions on all platforms unless \"formats\" is supplied." +msgstr "" + +#: ../../../build/NEWS:21177 ../../../build/NEWS:24195 +msgid "" +":issue:`2466`: posixpath.ismount now correctly recognizes mount points which" +" the user does not have permission to access." +msgstr "" + +#: ../../../build/NEWS:21180 +msgid "" +":issue:`9998`: On Linux, ctypes.util.find_library now looks in " +"LD_LIBRARY_PATH for shared libraries." +msgstr "" + +#: ../../../build/NEWS:21183 +msgid ":issue:`27573`: exit message for code.interact is now configurable." +msgstr "" + +#: ../../../build/NEWS:21185 ../../../build/NEWS:24285 +msgid "" +":issue:`27930`: Improved behaviour of logging.handlers.QueueListener. Thanks" +" to Paulo Andrade and Petr Viktorin for the analysis and patch." +msgstr "" + +#: ../../../build/NEWS:21188 +msgid "" +":issue:`6766`: Distributed reference counting added to multiprocessing to " +"support nesting of shared values / proxy objects." +msgstr "" + +#: ../../../build/NEWS:21191 ../../../build/NEWS:24288 +msgid "" +":issue:`21201`: Improves readability of multiprocessing error message. " +"Thanks to Wojciech Walczak for patch." +msgstr "" + +#: ../../../build/NEWS:21194 +msgid "asyncio: Add set_protocol / get_protocol to Transports." +msgstr "asyncio: 在各Transport类中添加了 set_protocol / get_protocol 方法" + +#: ../../../build/NEWS:21196 ../../../build/NEWS:24291 +msgid ":issue:`27456`: asyncio: Set TCP_NODELAY by default." +msgstr "" + +#: ../../../build/NEWS:21201 ../../../build/NEWS:24356 +msgid "" +":issue:`15308`: Add 'interrupt execution' (^C) to Shell menu. Patch by Roger" +" Serwy, updated by Bayard Randel." +msgstr "" + +#: ../../../build/NEWS:21204 ../../../build/NEWS:24359 +msgid "" +":issue:`27922`: Stop IDLE tests from 'flashing' gui widgets on the screen." +msgstr "" + +#: ../../../build/NEWS:21206 +msgid "" +":issue:`27891`: Consistently group and sort imports within idlelib modules." +msgstr "" + +#: ../../../build/NEWS:21208 +msgid ":issue:`17642`: add larger font sizes for classroom projection." +msgstr "" + +#: ../../../build/NEWS:21210 ../../../build/NEWS:24361 +msgid "Add version to title of IDLE help window." +msgstr "在 IDLE 帮助窗口的标题中加入版本号" + +#: ../../../build/NEWS:21212 ../../../build/NEWS:24363 +msgid "" +":issue:`25564`: In section on IDLE -- console differences, mention that " +"using exec means that __builtins__ is defined for each statement." +msgstr "" + +#: ../../../build/NEWS:21215 +msgid "" +":issue:`27821`: Fix 3.6.0a3 regression that prevented custom key sets from " +"being selected when no custom theme was defined." +msgstr "" + +#: ../../../build/NEWS:21221 +msgid "" +":issue:`26900`: Excluded underscored names and other private API from " +"limited API." +msgstr "" + +#: ../../../build/NEWS:21224 +msgid "" +":issue:`26027`: Add support for path-like objects in PyUnicode_FSConverter()" +" & PyUnicode_FSDecoder()." +msgstr "" + +#: ../../../build/NEWS:21230 +msgid "" +":issue:`27427`: Additional tests for the math module. Patch by Francisco " +"Couzo." +msgstr "" + +#: ../../../build/NEWS:21232 +msgid "" +":issue:`27953`: Skip math and cmath tests that fail on OS X 10.4 due to a " +"poor libm implementation of tan." +msgstr "" + +#: ../../../build/NEWS:21235 +msgid "" +":issue:`26040`: Improve test_math and test_cmath coverage and rigour. Patch " +"by Jeff Allen." +msgstr "" + +#: ../../../build/NEWS:21238 ../../../build/NEWS:24408 +msgid "" +":issue:`27787`: Call gc.collect() before checking each test for \"dangling " +"threads\", since the dangling threads are weak references." +msgstr "" + +#: ../../../build/NEWS:21244 ../../../build/NEWS:24468 +msgid "" +":issue:`27566`: Fix clean target in freeze makefile (patch by Lisa Roach)" +msgstr "" + +#: ../../../build/NEWS:21246 ../../../build/NEWS:24470 +msgid ":issue:`27705`: Update message in validate_ucrtbase.py" +msgstr "" + +#: ../../../build/NEWS:21248 +msgid "" +":issue:`27976`: Deprecate building _ctypes with the bundled copy of libffi " +"on non-OSX UNIX platforms." +msgstr "" + +#: ../../../build/NEWS:21251 +msgid "" +":issue:`27983`: Cause lack of llvm-profdata tool when using clang as " +"required for PGO linking to be a configure time error rather than make time " +"when ``--with-optimizations`` is enabled. Also improve our ability to find " +"the llvm-profdata tool on MacOS and some Linuxes." +msgstr "" + +#: ../../../build/NEWS:21256 +msgid ":issue:`21590`: Support for DTrace and SystemTap probes." +msgstr "" + +#: ../../../build/NEWS:21258 ../../../build/NEWS:24477 +msgid "" +":issue:`26307`: The profile-opt build now applies PGO to the built-in " +"modules." +msgstr "" + +#: ../../../build/NEWS:21260 +msgid "" +":issue:`26359`: Add the --with-optimizations flag to turn on LTO and PGO " +"build support when available." +msgstr "" + +#: ../../../build/NEWS:21263 +msgid ":issue:`27917`: Set platform triplets for Android builds." +msgstr "" + +#: ../../../build/NEWS:21265 +msgid "" +":issue:`25825`: Update references to the $(LIBPL) installation path on AIX. " +"This path was changed in 3.2a4." +msgstr "" + +#: ../../../build/NEWS:21268 +msgid "Update OS X installer to use SQLite 3.14.1 and XZ 5.2.2." +msgstr "更新 OS X 安装包,使用SQLite 3.14.1 和 XZ 5.2.2版本。" + +#: ../../../build/NEWS:21270 +msgid ":issue:`21122`: Fix LTO builds on OS X." +msgstr "" + +#: ../../../build/NEWS:21272 +msgid "" +":issue:`17128`: Build OS X installer with a private copy of OpenSSL. Also " +"provide a sample Install Certificates command script to install a set of " +"root certificates from the third-party certifi module." +msgstr "" + +#: ../../../build/NEWS:21279 ../../../build/NEWS:24417 +msgid "" +":issue:`27952`: Get Tools/scripts/fixcid.py working with Python 3 and the " +"current \"re\" module, avoid invalid Python backslash escapes, and fix a bug" +" parsing escaped C quote signs." +msgstr "" + +#: ../../../build/NEWS:21286 +msgid "" +":issue:`28065`: Update xz dependency to 5.2.2 and build it from source." +msgstr "" + +#: ../../../build/NEWS:21288 ../../../build/NEWS:24434 +msgid "" +":issue:`25144`: Ensures TargetDir is set before continuing with custom " +"install." +msgstr "" + +#: ../../../build/NEWS:21290 +msgid "" +":issue:`1602`: Windows console doesn't input or print Unicode (PEP 528)" +msgstr "" + +#: ../../../build/NEWS:21292 +msgid "" +":issue:`27781`: Change file system encoding on Windows to UTF-8 (PEP 529)" +msgstr "" + +#: ../../../build/NEWS:21294 +msgid ":issue:`27731`: Opt-out of MAX_PATH on Windows 10" +msgstr "" + +#: ../../../build/NEWS:21296 +msgid ":issue:`6135`: Adds encoding and errors parameters to subprocess." +msgstr "" + +#: ../../../build/NEWS:21298 +msgid "" +":issue:`27959`: Adds oem encoding, alias ansi to mbcs, move aliasmbcs to " +"codec lookup." +msgstr "" + +#: ../../../build/NEWS:21301 +msgid "" +":issue:`27982`: The functions of the winsound module now accept keyword " +"arguments." +msgstr "" + +#: ../../../build/NEWS:21304 +msgid ":issue:`20366`: Build full text search support into SQLite on Windows." +msgstr "" + +#: ../../../build/NEWS:21306 +msgid "" +":issue:`27756`: Adds new icons for Python files and processes on Windows. " +"Designs by Cherry Wang." +msgstr "" + +#: ../../../build/NEWS:21309 +msgid ":issue:`27883`: Update sqlite to 3.14.1.0 on Windows." +msgstr "" + +#: ../../../build/NEWS:21313 +msgid "Python 3.6.0 alpha 4" +msgstr "Python 3.6.0 alpha 4" + +#: ../../../build/NEWS:21315 +msgid "*Release date: 2016-08-15*" +msgstr "*发布日期: 2016-08-15*" + +#: ../../../build/NEWS:21320 +msgid "" +":issue:`27704`: Optimized creating bytes and bytearray from byte-like " +"objects and iterables. Speed up to 3 times for short objects. Original " +"patch by Naoki Inada." +msgstr "" + +#: ../../../build/NEWS:21324 +msgid "" +":issue:`26823`: Large sections of repeated lines in tracebacks are now " +"abbreviated as \"[Previous line repeated {count} more times]\" by the " +"builtin traceback rendering. Patch by Emanuel Barry." +msgstr "" + +#: ../../../build/NEWS:21328 +msgid "" +":issue:`27574`: Decreased an overhead of parsing keyword arguments in " +"functions implemented with using Argument Clinic." +msgstr "" + +#: ../../../build/NEWS:21331 +msgid "" +":issue:`22557`: Now importing already imported modules is up to 2.5 times " +"faster." +msgstr "" + +#: ../../../build/NEWS:21334 +msgid ":issue:`17596`: Include to help with Min GW building." +msgstr "" + +#: ../../../build/NEWS:21336 +msgid "" +":issue:`17599`: On Windows, rename the privately defined REPARSE_DATA_BUFFER" +" structure to avoid conflicting with the definition from Min GW." +msgstr "" + +#: ../../../build/NEWS:21339 ../../../build/NEWS:23958 +msgid "" +":issue:`27507`: Add integer overflow check in bytearray.extend(). Patch by " +"Xiang Zhang." +msgstr "" + +#: ../../../build/NEWS:21342 ../../../build/NEWS:23961 +msgid "" +":issue:`27581`: Don't rely on wrapping for overflow check in " +"PySequence_Tuple(). Patch by Xiang Zhang." +msgstr "" + +#: ../../../build/NEWS:21345 +msgid "" +":issue:`1621`: Avoid signed integer overflow in list and tuple operations. " +"Patch by Xiang Zhang." +msgstr "" + +#: ../../../build/NEWS:21348 +msgid "" +":issue:`27419`: Standard __import__() no longer look up \"__import__\" in " +"globals or builtins for importing submodules or \"from import\". Fixed a " +"crash if raise a warning about unabling to resolve package from __spec__ or " +"__package__." +msgstr "" + +#: ../../../build/NEWS:21353 ../../../build/NEWS:23950 +msgid "" +":issue:`27083`: Respect the PYTHONCASEOK environment variable under Windows." +msgstr "" + +#: ../../../build/NEWS:21355 ../../../build/NEWS:23952 +msgid "" +":issue:`27514`: Make having too many statically nested blocks a SyntaxError " +"instead of SystemError." +msgstr "" + +#: ../../../build/NEWS:21358 +msgid "" +":issue:`27366`: Implemented :pep:`487` (Simpler customization of class " +"creation). Upon subclassing, the __init_subclass__ classmethod is called on " +"the base class. Descriptors are initialized with __set_name__ after class " +"creation." +msgstr "" + +#: ../../../build/NEWS:21366 +msgid "" +":issue:`26027`: Add :pep:`519`/__fspath__() support to the os and os.path " +"modules. Includes code from Jelle Zijlstra. (See also: :issue:`27524`)" +msgstr "" + +#: ../../../build/NEWS:21369 +msgid "" +":issue:`27598`: Add Collections to collections.abc. Patch by Ivan " +"Levkivskyi, docs by Neil Girdhar." +msgstr "" + +#: ../../../build/NEWS:21372 +msgid "" +":issue:`25958`: Support \"anti-registration\" of special methods from " +"various ABCs, like __hash__, __iter__ or __len__. All these (and several " +"more) can be set to None in an implementation class and the behavior will be" +" as if the method is not defined at all. (Previously, this mechanism existed" +" only for __hash__, to make mutable classes unhashable.) Code contributed " +"by Andrew Barnert and Ivan Levkivskyi." +msgstr "" + +#: ../../../build/NEWS:21379 +msgid "" +":issue:`16764`: Support keyword arguments to zlib.decompress(). Patch by " +"Xiang Zhang." +msgstr "" + +#: ../../../build/NEWS:21382 +msgid "" +":issue:`27736`: Prevent segfault after interpreter re-initialization due to " +"ref count problem introduced in code for :issue:`27038` in 3.6.0a3. Patch by" +" Xiang Zhang." +msgstr "" + +#: ../../../build/NEWS:21386 +msgid "" +":issue:`25628`: The *verbose* and *rename* parameters for " +"collections.namedtuple are now keyword-only." +msgstr "" + +#: ../../../build/NEWS:21389 +msgid "" +":issue:`12345`: Add mathematical constant tau to math and cmath. See also " +":pep:`628`." +msgstr "" + +#: ../../../build/NEWS:21392 +msgid "" +":issue:`26823`: traceback.StackSummary.format now abbreviates large sections" +" of repeated lines as \"[Previous line repeated {count} more times]\" (this " +"change then further affects other traceback display operations in the " +"module). Patch by Emanuel Barry." +msgstr "" + +#: ../../../build/NEWS:21397 +msgid "" +":issue:`27664`: Add to concurrent.futures.thread.ThreadPoolExecutor() the " +"ability to specify a thread name prefix." +msgstr "" + +#: ../../../build/NEWS:21400 +msgid "" +":issue:`27181`: Add geometric_mean and harmonic_mean to statistics module." +msgstr "" + +#: ../../../build/NEWS:21402 +msgid ":issue:`27573`: code.interact now prints an message when exiting." +msgstr "" + +#: ../../../build/NEWS:21404 +msgid ":issue:`6422`: Add autorange method to timeit.Timer objects." +msgstr "" + +#: ../../../build/NEWS:21406 ../../../build/NEWS:24198 +msgid "" +":issue:`27773`: Correct some memory management errors server_hostname in " +"_ssl.wrap_socket()." +msgstr "" + +#: ../../../build/NEWS:21409 +msgid "" +":issue:`26750`: unittest.mock.create_autospec() now works properly for " +"subclasses of property() and other data descriptors. Removes the never " +"publicly used, never documented unittest.mock.DescriptorTypes tuple." +msgstr "" + +#: ../../../build/NEWS:21413 +msgid "" +":issue:`26754`: Undocumented support of general bytes-like objects as path " +"in compile() and similar functions is now deprecated." +msgstr "" + +#: ../../../build/NEWS:21416 +msgid "" +":issue:`26800`: Undocumented support of general bytes-like objects as paths " +"in os functions is now deprecated." +msgstr "" + +#: ../../../build/NEWS:21419 +msgid "" +":issue:`26981`: Add _order_ compatibility shim to enum.Enum for Python 2/3 " +"code bases." +msgstr "" + +#: ../../../build/NEWS:21422 +msgid ":issue:`27661`: Added tzinfo keyword argument to datetime.combine." +msgstr "" + +#: ../../../build/NEWS:21424 ../../../build/NEWS:24204 +msgid "" +"In the curses module, raise an error if window.getstr() or window.instr() is" +" passed a negative value." +msgstr "" + +#: ../../../build/NEWS:21427 ../../../build/NEWS:24207 +msgid "" +":issue:`27783`: Fix possible usage of uninitialized memory in " +"operator.methodcaller." +msgstr "" + +#: ../../../build/NEWS:21430 ../../../build/NEWS:24210 +msgid ":issue:`27774`: Fix possible Py_DECREF on unowned object in _sre." +msgstr "" + +#: ../../../build/NEWS:21432 ../../../build/NEWS:24212 +msgid ":issue:`27760`: Fix possible integer overflow in binascii.b2a_qp." +msgstr "" + +#: ../../../build/NEWS:21434 ../../../build/NEWS:24214 +msgid "" +":issue:`27758`: Fix possible integer overflow in the _csv module for large " +"record lengths." +msgstr "" + +#: ../../../build/NEWS:21437 ../../../build/NEWS:24217 +msgid "" +":issue:`27568`: Prevent HTTPoxy attack (CVE-2016-1000110). Ignore the " +"HTTP_PROXY variable when REQUEST_METHOD environment is set, which indicates " +"that the script is in CGI mode." +msgstr "" + +#: ../../../build/NEWS:21441 +msgid "" +":issue:`7063`: Remove dead code from the \"array\" module's slice handling. " +"Patch by Chuck." +msgstr "" + +#: ../../../build/NEWS:21444 ../../../build/NEWS:24221 +msgid ":issue:`27656`: Do not assume sched.h defines any SCHED_* constants." +msgstr "" + +#: ../../../build/NEWS:21446 ../../../build/NEWS:24223 +msgid "" +":issue:`27130`: In the \"zlib\" module, fix handling of large buffers " +"(typically 4 GiB) when compressing and decompressing. Previously, inputs " +"were limited to 4 GiB, and compression and decompression operations did not " +"properly handle results of 4 GiB." +msgstr "" + +#: ../../../build/NEWS:21451 +msgid ":issue:`24773`: Implemented :pep:`495` (Local Time Disambiguation)." +msgstr "" + +#: ../../../build/NEWS:21453 +msgid "" +"Expose the EPOLLEXCLUSIVE constant (when it is defined) in the select " +"module." +msgstr "" + +#: ../../../build/NEWS:21456 +msgid "" +":issue:`27567`: Expose the EPOLLRDHUP and POLLRDHUP constants in the select " +"module." +msgstr "" + +#: ../../../build/NEWS:21459 +msgid "" +":issue:`1621`: Avoid signed int negation overflow in the \"audioop\" module." +msgstr "" + +#: ../../../build/NEWS:21461 ../../../build/NEWS:24228 +msgid ":issue:`27533`: Release GIL in nt._isdir" +msgstr "" + +#: ../../../build/NEWS:21463 ../../../build/NEWS:24230 +msgid "" +":issue:`17711`: Fixed unpickling by the persistent ID with protocol 0. " +"Original patch by Alexandre Vassalotti." +msgstr "" + +#: ../../../build/NEWS:21466 ../../../build/NEWS:24233 +msgid "" +":issue:`27522`: Avoid an unintentional reference cycle in email.feedparser." +msgstr "" + +#: ../../../build/NEWS:21468 +msgid "" +":issue:`27512`: Fix a segfault when os.fspath() called an __fspath__() " +"method that raised an exception. Patch by Xiang Zhang." +msgstr "" + +#: ../../../build/NEWS:21474 ../../../build/NEWS:24366 +msgid "" +":issue:`27714`: text_textview and test_autocomplete now pass when re-run in " +"the same process. This occurs when test_idle fails when run with the -w " +"option but without -jn. Fix warning from test_config." +msgstr "" + +#: ../../../build/NEWS:21478 +msgid "" +":issue:`27621`: Put query response validation error messages in the query " +"box itself instead of in a separate messagebox. Redo tests to match. Add " +"Mac OSX refinements. Original patch by Mark Roseman." +msgstr "" + +#: ../../../build/NEWS:21482 +msgid ":issue:`27620`: Escape key now closes Query box as cancelled." +msgstr "" + +#: ../../../build/NEWS:21484 +msgid "" +":issue:`27609`: IDLE: tab after initial whitespace should tab, not " +"autocomplete. This fixes problem with writing docstrings at least twice " +"indented." +msgstr "" + +#: ../../../build/NEWS:21488 +msgid "" +":issue:`27609`: Explicitly return None when there are also non-None returns." +" In a few cases, reverse a condition and eliminate a return." +msgstr "" + +#: ../../../build/NEWS:21491 ../../../build/NEWS:24370 +msgid "" +":issue:`25507`: IDLE no longer runs buggy code because of its tkinter " +"imports. Users must include the same imports required to run directly in " +"Python." +msgstr "" + +#: ../../../build/NEWS:21494 ../../../build/NEWS:21678 +msgid "" +":issue:`27173`: Add 'IDLE Modern Unix' to the built-in key sets. Make the " +"default key set depend on the platform. Add tests for the changes to the " +"config module." +msgstr "" + +#: ../../../build/NEWS:21498 ../../../build/NEWS:21685 +#: ../../../build/NEWS:24373 +msgid "" +":issue:`27452`: add line counter and crc to IDLE configHandler test dump." +msgstr "" + +#: ../../../build/NEWS:21503 +msgid "" +":issue:`25805`: Skip a test in test_pkgutil as needed that doesn't work when" +" ``__name__ == __main__``. Patch by SilentGhost." +msgstr "" + +#: ../../../build/NEWS:21506 +msgid "" +":issue:`27472`: Add test.support.unix_shell as the path to the default " +"shell." +msgstr "" + +#: ../../../build/NEWS:21508 ../../../build/NEWS:24411 +msgid "" +":issue:`27369`: In test_pyexpat, avoid testing an error message detail that " +"changed in Expat 2.2.0." +msgstr "" + +#: ../../../build/NEWS:21511 +msgid "" +":issue:`27594`: Prevent assertion error when running test_ast with coverage " +"enabled: ensure code object has a valid first line number. Patch suggested " +"by Ivan Levkivskyi." +msgstr "" + +#: ../../../build/NEWS:21518 +msgid ":issue:`27647`: Update bundled Tcl/Tk to 8.6.6." +msgstr "" + +#: ../../../build/NEWS:21520 +msgid ":issue:`27610`: Adds :pep:`514` metadata to Windows installer" +msgstr "" + +#: ../../../build/NEWS:21522 ../../../build/NEWS:24436 +msgid "" +":issue:`27469`: Adds a shell extension to the launcher so that drag and drop" +" works correctly." +msgstr "" + +#: ../../../build/NEWS:21525 +msgid "" +":issue:`27309`: Enables proper Windows styles in python[w].exe manifest." +msgstr "" + +#: ../../../build/NEWS:21530 ../../../build/NEWS:24481 +msgid "" +":issue:`27713`: Suppress spurious build warnings when updating importlib's " +"bootstrap files. Patch by Xiang Zhang" +msgstr "" + +#: ../../../build/NEWS:21533 +msgid "" +":issue:`25825`: Correct the references to Modules/python.exp, which is " +"required on AIX. The references were accidentally changed in 3.5.0a1." +msgstr "" + +#: ../../../build/NEWS:21536 ../../../build/NEWS:24489 +msgid "" +":issue:`27453`: CPP invocation in configure must use CPPFLAGS. Patch by Chi " +"Hsuan Yen." +msgstr "" + +#: ../../../build/NEWS:21539 ../../../build/NEWS:24492 +msgid "" +":issue:`27641`: The configure script now inserts comments into the makefile " +"to prevent the pgen and _freeze_importlib executables from being cross-" +"compiled." +msgstr "" + +#: ../../../build/NEWS:21543 ../../../build/NEWS:24496 +msgid "" +":issue:`26662`: Set PYTHON_FOR_GEN in configure as the Python program to be " +"used for file generation during the build." +msgstr "" + +#: ../../../build/NEWS:21546 ../../../build/NEWS:24499 +msgid "" +":issue:`10910`: Avoid C++ compilation errors on FreeBSD and OS X. Also " +"update FreedBSD version checks for the original ctype UTF-8 workaround." +msgstr "" + +#: ../../../build/NEWS:21551 +msgid "Python 3.6.0 alpha 3" +msgstr "Python 3.6.0 alpha 3" + +#: ../../../build/NEWS:21553 +msgid "*Release date: 2016-07-11*" +msgstr "*发布日期: 2016-07-11*" + +#: ../../../build/NEWS:21558 ../../../build/NEWS:23832 +msgid "" +":issue:`27278`: Fix os.urandom() implementation using getrandom() on Linux. " +"Truncate size to INT_MAX and loop until we collected enough random bytes, " +"instead of casting a directly Py_ssize_t to int." +msgstr "" + +#: ../../../build/NEWS:21562 ../../../build/NEWS:23836 +msgid "" +":issue:`22636`: Avoid shell injection problems with " +"ctypes.util.find_library()." +msgstr "" + +#: ../../../build/NEWS:21567 ../../../build/NEWS:23955 +msgid "" +":issue:`27473`: Fixed possible integer overflow in bytes and bytearray " +"concatenations. Patch by Xiang Zhang." +msgstr "" + +#: ../../../build/NEWS:21570 +msgid "" +":issue:`23034`: The output of a special Python build with defined " +"COUNT_ALLOCS, SHOW_ALLOC_COUNT or SHOW_TRACK_COUNT macros is now off by " +"default. It can be re-enabled using the \"-X showalloccount\" option. It " +"now outputs to stderr instead of stdout." +msgstr "" + +#: ../../../build/NEWS:21575 ../../../build/NEWS:23964 +msgid "" +":issue:`27443`: __length_hint__() of bytearray iterators no longer return a " +"negative integer for a resized bytearray." +msgstr "" + +#: ../../../build/NEWS:21578 +msgid "" +":issue:`27007`: The fromhex() class methods of bytes and bytearray " +"subclasses now return an instance of corresponding subclass." +msgstr "" + +#: ../../../build/NEWS:21584 ../../../build/NEWS:24235 +msgid "" +":issue:`26844`: Fix error message for imp.find_module() to refer to 'path' " +"instead of 'name'. Patch by Lev Maximov." +msgstr "" + +#: ../../../build/NEWS:21587 ../../../build/NEWS:24238 +msgid "" +":issue:`23804`: Fix SSL zero-length recv() calls to not block and not raise " +"an error about unclean EOF." +msgstr "" + +#: ../../../build/NEWS:21590 ../../../build/NEWS:24241 +msgid "" +":issue:`27466`: Change time format returned by http.cookie.time2netscape, " +"confirming the netscape cookie format and making it consistent with " +"documentation." +msgstr "" + +#: ../../../build/NEWS:21594 +msgid "" +":issue:`21708`: Deprecated dbm.dumb behavior that differs from common dbm " +"behavior: creating a database in 'r' and 'w' modes and modifying a database " +"in 'r' mode." +msgstr "" + +#: ../../../build/NEWS:21598 +msgid "" +":issue:`26721`: Change the socketserver.StreamRequestHandler.wfile attribute" +" to implement BufferedIOBase. In particular, the write() method no longer " +"does partial writes." +msgstr "" + +#: ../../../build/NEWS:21602 +msgid "" +":issue:`22115`: Added methods trace_add, trace_remove and trace_info in the " +"tkinter.Variable class. They replace old methods trace_variable, trace, " +"trace_vdelete and trace_vinfo that use obsolete Tcl commands and might not " +"work in future versions of Tcl. Fixed old tracing methods: trace_vdelete() " +"with wrong mode no longer break tracing, trace_vinfo() now always returns a " +"list of pairs of strings, tracing in the \"u\" mode now works." +msgstr "" + +#: ../../../build/NEWS:21610 +msgid "" +":issue:`26243`: Only the level argument to zlib.compress() is keyword " +"argument now. The first argument is positional-only." +msgstr "" + +#: ../../../build/NEWS:21613 +msgid "" +":issue:`27038`: Expose the DirEntry type as os.DirEntry. Code patch by Jelle" +" Zijlstra." +msgstr "" + +#: ../../../build/NEWS:21616 +msgid "" +":issue:`27186`: Update os.fspath()/PyOS_FSPath() to check the return value " +"of __fspath__() to be either str or bytes." +msgstr "" + +#: ../../../build/NEWS:21619 +msgid "" +":issue:`18726`: All optional parameters of the dump(), dumps(), load() and " +"loads() functions and JSONEncoder and JSONDecoder class constructors in the " +"json module are now keyword-only." +msgstr "" + +#: ../../../build/NEWS:21623 +msgid "" +":issue:`27319`: Methods selection_set(), selection_add(), selection_remove()" +" and selection_toggle() of ttk.TreeView now allow passing multiple items as " +"multiple arguments instead of passing them as a tuple. Deprecated " +"undocumented ability of calling the selection() method with arguments." +msgstr "" + +#: ../../../build/NEWS:21628 ../../../build/NEWS:24255 +msgid "" +":issue:`27079`: Fixed curses.ascii functions isblank(), iscntrl() and " +"ispunct()." +msgstr "" + +#: ../../../build/NEWS:21631 +msgid "" +":issue:`27294`: Numerical state in the repr for Tkinter event objects is now" +" represented as a combination of known flags." +msgstr "" + +#: ../../../build/NEWS:21634 +msgid "" +":issue:`27177`: Match objects in the re module now support index-like " +"objects as group indices. Based on patches by Jeroen Demeyer and Xiang " +"Zhang." +msgstr "" + +#: ../../../build/NEWS:21637 ../../../build/NEWS:24258 +msgid "" +":issue:`26754`: Some functions (compile() etc) accepted a filename argument " +"encoded as an iterable of integers. Now only strings and byte-like objects " +"are accepted." +msgstr "" + +#: ../../../build/NEWS:21641 +msgid "" +":issue:`26536`: socket.ioctl now supports SIO_LOOPBACK_FAST_PATH. Patch by " +"Daniel Stokes." +msgstr "" + +#: ../../../build/NEWS:21644 ../../../build/NEWS:24262 +msgid "" +":issue:`27048`: Prevents distutils failing on Windows when environment " +"variables contain non-ASCII characters" +msgstr "" + +#: ../../../build/NEWS:21647 ../../../build/NEWS:24265 +msgid ":issue:`27330`: Fixed possible leaks in the ctypes module." +msgstr "" + +#: ../../../build/NEWS:21649 ../../../build/NEWS:24267 +msgid "" +":issue:`27238`: Got rid of bare excepts in the turtle module. Original " +"patch by Jelle Zijlstra." +msgstr "" + +#: ../../../build/NEWS:21652 ../../../build/NEWS:24270 +msgid "" +":issue:`27122`: When an exception is raised within the context being managed" +" by a contextlib.ExitStack() and one of the exit stack generators catches " +"and raises it in a chain, do not re-raise the original exception when " +"exiting, let the new chained one through. This avoids the :pep:`479` bug " +"described in issue25782." +msgstr "" + +#: ../../../build/NEWS:21658 +msgid "" +":issue:`16864`: sqlite3.Cursor.lastrowid now supports REPLACE statement. " +"Initial patch by Alex LordThorsen." +msgstr "" + +#: ../../../build/NEWS:21661 ../../../build/NEWS:24276 +msgid "" +":issue:`26386`: Fixed ttk.TreeView selection operations with item id's " +"containing spaces." +msgstr "" + +#: ../../../build/NEWS:21664 +msgid "" +":issue:`8637`: Honor a pager set by the env var MANPAGER (in preference to " +"one set by the env var PAGER)." +msgstr "" + +#: ../../../build/NEWS:21667 ../../../build/NEWS:24279 +msgid "" +":issue:`16182`: Fix various functions in the \"readline\" module to use the " +"locale encoding, and fix get_begidx() and get_endidx() to return code point " +"indexes." +msgstr "" + +#: ../../../build/NEWS:21671 ../../../build/NEWS:24283 +msgid "" +":issue:`27392`: Add loop.connect_accepted_socket(). Patch by Jim Fulton." +msgstr "" + +#: ../../../build/NEWS:21676 +msgid ":issue:`27477`: IDLE search dialogs now use ttk widgets." +msgstr "" + +#: ../../../build/NEWS:21682 +msgid "" +":issue:`27452`: make command line \"idle-test> python test_help.py\" work. " +"__file__ is relative when python is started in the file's directory." +msgstr "" + +#: ../../../build/NEWS:21687 +msgid "" +":issue:`27380`: IDLE: add query.py with base Query dialog and ttk widgets. " +"Module had subclasses SectionName, ModuleName, and HelpSource, which are " +"used to get information from users by configdialog and file =>Load Module. " +"Each subclass has itw own validity checks. Using ModuleName allows users to" +" edit bad module names instead of starting over. Add tests and delete the " +"two files combined into the new one." +msgstr "" + +#: ../../../build/NEWS:21694 +msgid ":issue:`27372`: Test_idle no longer changes the locale." +msgstr "" + +#: ../../../build/NEWS:21696 ../../../build/NEWS:24375 +msgid "" +":issue:`27365`: Allow non-ascii chars in IDLE NEWS.txt, for contributor " +"names." +msgstr "" + +#: ../../../build/NEWS:21698 ../../../build/NEWS:24377 +msgid "" +":issue:`27245`: IDLE: Cleanly delete custom themes and key bindings. " +"Previously, when IDLE was started from a console or by import, a cascade of " +"warnings was emitted. Patch by Serhiy Storchaka." +msgstr "" + +#: ../../../build/NEWS:21702 +msgid "" +":issue:`24137`: Run IDLE, test_idle, and htest with tkinter default root " +"disabled. Fix code and tests that fail with this restriction. Fix htests " +"to not create a second and redundant root and mainloop." +msgstr "" + +#: ../../../build/NEWS:21706 +msgid "" +":issue:`27310`: Fix IDLE.app failure to launch on OS X due to vestigial " +"import." +msgstr "" + +#: ../../../build/NEWS:21711 +msgid "" +":issue:`26754`: PyUnicode_FSDecoder() accepted a filename argument encoded " +"as an iterable of integers. Now only strings and byte-like objects are " +"accepted." +msgstr "" + +#: ../../../build/NEWS:21718 ../../../build/NEWS:24462 +msgid "" +":issue:`28066`: Fix the logic that searches build directories for generated " +"include files when building outside the source tree." +msgstr "" + +#: ../../../build/NEWS:21721 +msgid "" +":issue:`27442`: Expose the Android API level that python was built against, " +"in sysconfig.get_config_vars() as 'ANDROID_API_LEVEL'." +msgstr "" + +#: ../../../build/NEWS:21724 +msgid "" +":issue:`27434`: The interpreter that runs the cross-build, found in PATH, " +"must now be of the same feature version (e.g. 3.6) as the source being " +"built." +msgstr "" + +#: ../../../build/NEWS:21727 ../../../build/NEWS:24514 +msgid ":issue:`26930`: Update Windows builds to use OpenSSL 1.0.2h." +msgstr "" + +#: ../../../build/NEWS:21729 +msgid "" +":issue:`23968`: Rename the platform directory from plat-$(MACHDEP) to " +"plat-$(PLATFORM_TRIPLET). Rename the config directory (LIBPL) from " +"config-$(LDVERSION) to config-$(LDVERSION)-$(PLATFORM_TRIPLET). Install the " +"platform specific _sysconfigdata module into the platform directory and " +"rename it to include the ABIFLAGS." +msgstr "" + +#: ../../../build/NEWS:21735 +msgid "Don't use largefile support for GNU/Hurd." +msgstr "在 GNU/Hurd 系统中不使用大文件支持。" + +#: ../../../build/NEWS:21740 ../../../build/NEWS:24421 +msgid "" +":issue:`27332`: Fixed the type of the first argument of module-level " +"functions generated by Argument Clinic. Patch by Petr Viktorin." +msgstr "" + +#: ../../../build/NEWS:21743 ../../../build/NEWS:24424 +msgid ":issue:`27418`: Fixed Tools/importbench/importbench.py." +msgstr "" + +#: ../../../build/NEWS:21748 ../../../build/NEWS:25119 +msgid "" +":issue:`19489`: Moved the search box from the sidebar to the header and " +"footer of each page. Patch by Ammar Askar." +msgstr "" + +#: ../../../build/NEWS:21751 +msgid "" +":issue:`27285`: Update documentation to reflect the deprecation of " +"``pyvenv`` and normalize on the term \"virtual environment\". Patch by Steve" +" Piercy." +msgstr "" + +#: ../../../build/NEWS:21757 +msgid "" +":issue:`27027`: Added test.support.is_android that is True when this is an " +"Android build." +msgstr "" + +#: ../../../build/NEWS:21762 +msgid "Python 3.6.0 alpha 2" +msgstr "Python 3.6.0 alpha 2" + +#: ../../../build/NEWS:21764 +msgid "*Release date: 2016-06-13*" +msgstr "*发布日期: 2016-06-13*" + +#: ../../../build/NEWS:21769 ../../../build/NEWS:24535 +msgid ":issue:`26556`: Update expat to 2.1.1, fixes CVE-2015-1283." +msgstr "" + +#: ../../../build/NEWS:21771 +msgid "" +"Fix TLS stripping vulnerability in smtplib, CVE-2016-0772. Reported by Team " +"Oststrom." +msgstr "" + +#: ../../../build/NEWS:21774 ../../../build/NEWS:24540 +msgid "" +":issue:`26839`: On Linux, :func:`os.urandom` now calls ``getrandom()`` with " +"``GRND_NONBLOCK`` to fall back on reading ``/dev/urandom`` if the urandom " +"entropy pool is not initialized yet. Patch written by Colm Buckley." +msgstr "" + +#: ../../../build/NEWS:21781 +msgid "" +":issue:`27095`: Simplified MAKE_FUNCTION and removed MAKE_CLOSURE opcodes. " +"Patch by Demur Rumed." +msgstr "" + +#: ../../../build/NEWS:21784 +msgid "" +":issue:`27190`: Raise NotSupportedError if sqlite3 is older than 3.3.1. " +"Patch by Dave Sawyer." +msgstr "" + +#: ../../../build/NEWS:21787 +msgid "" +":issue:`27286`: Fixed compiling BUILD_MAP_UNPACK_WITH_CALL opcode. Calling " +"function with generalized unpacking (PEP 448) and conflicting keyword names " +"could cause undefined behavior." +msgstr "" + +#: ../../../build/NEWS:21791 +msgid ":issue:`27140`: Added BUILD_CONST_KEY_MAP opcode." +msgstr "" + +#: ../../../build/NEWS:21793 +msgid "" +":issue:`27186`: Add support for os.PathLike objects to open() (part of " +":pep:`519`)." +msgstr "" + +#: ../../../build/NEWS:21796 ../../../build/NEWS:24557 +msgid "" +":issue:`27066`: Fixed SystemError if a custom opener (for open()) returns a " +"negative number without setting an exception." +msgstr "" + +#: ../../../build/NEWS:21799 +msgid "" +":issue:`26983`: float() now always return an instance of exact float. The " +"deprecation warning is emitted if __float__ returns an instance of a strict " +"subclass of float. In a future versions of Python this can be an error." +msgstr "" + +#: ../../../build/NEWS:21804 +msgid "" +":issue:`27097`: Python interpreter is now about 7% faster due to optimized " +"instruction decoding. Based on patch by Demur Rumed." +msgstr "" + +#: ../../../build/NEWS:21807 +msgid "" +":issue:`26647`: Python interpreter now uses 16-bit wordcode instead of " +"bytecode. Patch by Demur Rumed." +msgstr "" + +#: ../../../build/NEWS:21810 +msgid "" +":issue:`23275`: Allow assigning to an empty target list in round brackets: " +"() = iterable." +msgstr "" + +#: ../../../build/NEWS:21813 ../../../build/NEWS:24679 +msgid "" +":issue:`27243`: Update the __aiter__ protocol: instead of returning an " +"awaitable that resolves to an asynchronous iterator, the asynchronous " +"iterator should be returned directly. Doing the former will trigger a " +"PendingDeprecationWarning." +msgstr "" + +#: ../../../build/NEWS:21821 +msgid "" +"Comment out socket (SO_REUSEPORT) and posix (O_SHLOCK, O_EXLOCK) constants " +"exposed on the API which are not implemented on GNU/Hurd. They would not " +"work at runtime anyway." +msgstr "" + +#: ../../../build/NEWS:21825 +msgid "" +":issue:`27025`: Generated names for Tkinter widgets are now more meaningful " +"and recognizable." +msgstr "" + +#: ../../../build/NEWS:21828 +msgid "" +":issue:`25455`: Fixed crashes in repr of recursive ElementTree.Element and " +"functools.partial objects." +msgstr "" + +#: ../../../build/NEWS:21831 +msgid ":issue:`27294`: Improved repr for Tkinter event objects." +msgstr "" + +#: ../../../build/NEWS:21833 +msgid "" +":issue:`20508`: Improve exception message of IPv{4,6}Network.__getitem__. " +"Patch by Gareth Rees." +msgstr "" + +#: ../../../build/NEWS:21836 ../../../build/NEWS:24687 +msgid "" +":issue:`21386`: Implement missing IPv4Address.is_global property. It was " +"documented since 07a5610bae9d. Initial patch by Roger Luethi." +msgstr "" + +#: ../../../build/NEWS:21839 +msgid "" +":issue:`27029`: Removed deprecated support of universal newlines mode from " +"ZipFile.open()." +msgstr "" + +#: ../../../build/NEWS:21842 +msgid "" +":issue:`27030`: Unknown escapes consisting of ``'\\'`` and an ASCII letter " +"in regular expressions now are errors. The re.LOCALE flag now can be used " +"only with bytes patterns." +msgstr "" + +#: ../../../build/NEWS:21846 +msgid "" +":issue:`27186`: Add os.PathLike support to DirEntry (part of :pep:`519`). " +"Initial patch by Jelle Zijlstra." +msgstr "" + +#: ../../../build/NEWS:21849 ../../../build/NEWS:24690 +msgid "" +":issue:`20900`: distutils register command now decodes HTTP responses " +"correctly. Initial patch by ingrid." +msgstr "" + +#: ../../../build/NEWS:21852 +msgid "" +":issue:`27186`: Add os.PathLike support to pathlib, removing its provisional" +" status (part of PEP 519). Initial patch by Dusty Phillips." +msgstr "" + +#: ../../../build/NEWS:21855 +msgid "" +":issue:`27186`: Add support for os.PathLike objects to os.fsencode() and " +"os.fsdecode() (part of :pep:`519`)." +msgstr "" + +#: ../../../build/NEWS:21858 +msgid "" +":issue:`27186`: Introduce os.PathLike and os.fspath() (part of :pep:`519`)." +msgstr "" + +#: ../../../build/NEWS:21860 ../../../build/NEWS:24693 +msgid "" +"A new version of typing.py provides several new classes and features: " +"@overload outside stubs, Reversible, DefaultDict, Text, ContextManager, " +"Type[], NewType(), TYPE_CHECKING, and numerous bug fixes (note that some of " +"the new features are not yet implemented in mypy or other static analyzers)." +" Also classes for :pep:`492` (Awaitable, AsyncIterable, AsyncIterator) have " +"been added (in fact they made it into 3.5.1 but were never mentioned)." +msgstr "" + +#: ../../../build/NEWS:21868 ../../../build/NEWS:24701 +msgid "" +":issue:`25738`: Stop http.server.BaseHTTPRequestHandler.send_error() from " +"sending a message body for 205 Reset Content. Also, don't send Content " +"header fields in responses that don't have a body. Patch by Susumu Koshiba." +msgstr "" + +#: ../../../build/NEWS:21873 ../../../build/NEWS:24706 +msgid "" +":issue:`21313`: Fix the \"platform\" module to tolerate when sys.version " +"contains truncated build information." +msgstr "" + +#: ../../../build/NEWS:21876 +msgid "" +":issue:`23883`: Added missing APIs to __all__ to match the documented APIs " +"for the following modules: cgi, mailbox, mimetypes, plistlib and smtpd. " +"Patches by Jacek Kołodziej." +msgstr "" + +#: ../../../build/NEWS:21880 ../../../build/NEWS:24709 +msgid "" +":issue:`27164`: In the zlib module, allow decompressing raw Deflate streams " +"with a predefined zdict. Based on patch by Xiang Zhang." +msgstr "" + +#: ../../../build/NEWS:21883 ../../../build/NEWS:24712 +msgid "" +":issue:`24291`: Fix wsgiref.simple_server.WSGIRequestHandler to completely " +"write data to the client. Previously it could do partial writes and " +"truncate data. Also, wsgiref.handler.ServerHandler can now handle stdout " +"doing partial writes, but this is deprecated." +msgstr "" + +#: ../../../build/NEWS:21888 +msgid "" +":issue:`21272`: Use _sysconfigdata.py to initialize distutils.sysconfig." +msgstr "" + +#: ../../../build/NEWS:21890 +msgid "" +":issue:`19611`: :mod:`inspect` now reports the implicit ``.0`` parameters " +"generated by the compiler for comprehension and generator expression scopes " +"as if they were positional-only parameters called ``implicit0``. Patch by " +"Jelle Zijlstra." +msgstr "" + +#: ../../../build/NEWS:21895 ../../../build/NEWS:24717 +msgid "" +":issue:`26809`: Add ``__all__`` to :mod:`string`. Patch by Emanuel Barry." +msgstr "" + +#: ../../../build/NEWS:21897 ../../../build/NEWS:24719 +msgid "" +":issue:`26373`: subprocess.Popen.communicate now correctly ignores " +"BrokenPipeError when the child process dies before .communicate() is called " +"in more/all circumstances." +msgstr "" + +#: ../../../build/NEWS:21901 +msgid "" +"signal, socket, and ssl module IntEnum constant name lookups now return a " +"consistent name for values having multiple names. Ex: signal.Signals(6) now" +" refers to itself as signal.SIGALRM rather than flipping between that and " +"signal.SIGIOT based on the interpreter's hash randomization seed." +msgstr "" + +#: ../../../build/NEWS:21906 +msgid "" +":issue:`27167`: Clarify the subprocess.CalledProcessError error message text" +" when the child process died due to a signal." +msgstr "" + +#: ../../../build/NEWS:21909 +msgid "" +":issue:`25931`: Don't define socketserver.Forking* names on platforms such " +"as Windows that do not support os.fork()." +msgstr "" + +#: ../../../build/NEWS:21912 ../../../build/NEWS:24723 +msgid "" +":issue:`21776`: distutils.upload now correctly handles HTTPError. Initial " +"patch by Claudiu Popa." +msgstr "" + +#: ../../../build/NEWS:21915 +msgid "" +":issue:`26526`: Replace custom parse tree validation in the parser module " +"with a simple DFA validator." +msgstr "" + +#: ../../../build/NEWS:21918 ../../../build/NEWS:24726 +msgid "" +":issue:`27114`: Fix SSLContext._load_windows_store_certs fails with " +"PermissionError" +msgstr "" + +#: ../../../build/NEWS:21921 ../../../build/NEWS:24729 +msgid "" +":issue:`18383`: Avoid creating duplicate filters when using filterwarnings " +"and simplefilter. Based on patch by Alex Shkop." +msgstr "" + +#: ../../../build/NEWS:21924 +msgid "" +":issue:`23026`: winreg.QueryValueEx() now return an integer for REG_QWORD " +"type." +msgstr "" + +#: ../../../build/NEWS:21926 +msgid "" +":issue:`26741`: subprocess.Popen destructor now emits a ResourceWarning " +"warning if the child process is still running." +msgstr "" + +#: ../../../build/NEWS:21929 +msgid "" +":issue:`27056`: Optimize pickle.load() and pickle.loads(), up to 10% faster " +"to deserialize a lot of small objects." +msgstr "" + +#: ../../../build/NEWS:21932 +msgid ":issue:`21271`: New keyword only parameters in reset_mock call." +msgstr "" + +#: ../../../build/NEWS:21937 ../../../build/NEWS:25066 +msgid "" +":issue:`5124`: Paste with text selected now replaces the selection on X11. " +"This matches how paste works on Windows, Mac, most modern Linux apps, and " +"ttk widgets. Original patch by Serhiy Storchaka." +msgstr "" + +#: ../../../build/NEWS:21941 +msgid "" +":issue:`24750`: Switch all scrollbars in IDLE to ttk versions. Where needed," +" minimal tests are added to cover changes." +msgstr "" + +#: ../../../build/NEWS:21944 +msgid "" +":issue:`24759`: IDLE requires tk 8.5 and availability ttk widgets. Delete " +"now unneeded tk version tests and code for older versions. Add test for IDLE" +" syntax colorizer." +msgstr "" + +#: ../../../build/NEWS:21948 +msgid ":issue:`27239`: idlelib.macosx.isXyzTk functions initialize as needed." +msgstr "" + +#: ../../../build/NEWS:21950 +msgid "" +":issue:`27262`: move Aqua unbinding code, which enable context menus, to " +"macosx." +msgstr "" + +#: ../../../build/NEWS:21953 ../../../build/NEWS:25070 +msgid "" +":issue:`24759`: Make clear in idlelib.idle_test.__init__ that the directory " +"is a private implementation of test.test_idle and tool for maintainers." +msgstr "" + +#: ../../../build/NEWS:21956 ../../../build/NEWS:25073 +msgid "" +":issue:`27196`: Stop 'ThemeChanged' warnings when running IDLE tests. These " +"persisted after other warnings were suppressed in #20567. Apply Serhiy " +"Storchaka's update_idletasks solution to four test files. Record this " +"additional advice in idle_test/README.txt" +msgstr "" + +#: ../../../build/NEWS:21961 ../../../build/NEWS:25078 +msgid "" +":issue:`20567`: Revise idle_test/README.txt with advice about avoiding tk " +"warning messages from tests. Apply advice to several IDLE tests." +msgstr "" + +#: ../../../build/NEWS:21964 +msgid "" +":issue:`24225`: Update idlelib/README.txt with new file names and event " +"handlers." +msgstr "" + +#: ../../../build/NEWS:21967 +msgid ":issue:`27156`: Remove obsolete code not used by IDLE." +msgstr "" + +#: ../../../build/NEWS:21969 ../../../build/NEWS:25081 +msgid "" +":issue:`27117`: Make colorizer htest and turtledemo work with dark themes. " +"Move code for configuring text widget colors to a new function." +msgstr "" + +#: ../../../build/NEWS:21972 +msgid "" +":issue:`24225`: Rename many `idlelib/*.py` and `idle_test/test_*.py` files. " +"Edit files to replace old names with new names when the old name referred to" +" the module rather than the class it contained. See the issue and IDLE " +"section in What's New in 3.6 for more." +msgstr "" + +#: ../../../build/NEWS:21977 ../../../build/NEWS:25084 +msgid "" +":issue:`26673`: When tk reports font size as 0, change to size 10. Such " +"fonts on Linux prevented the configuration dialog from opening." +msgstr "" + +#: ../../../build/NEWS:21980 ../../../build/NEWS:25087 +msgid "" +":issue:`21939`: Add test for IDLE's percolator. Original patch by Saimadhav " +"Heblikar." +msgstr "" + +#: ../../../build/NEWS:21983 ../../../build/NEWS:25090 +msgid "" +":issue:`21676`: Add test for IDLE's replace dialog. Original patch by " +"Saimadhav Heblikar." +msgstr "" + +#: ../../../build/NEWS:21986 ../../../build/NEWS:25093 +msgid "" +":issue:`18410`: Add test for IDLE's search dialog. Original patch by Westley" +" Martínez." +msgstr "" + +#: ../../../build/NEWS:21989 +msgid "" +":issue:`21703`: Add test for undo delegator. Patch mostly by Saimadhav " +"Heblikar ." +msgstr "" + +#: ../../../build/NEWS:21992 ../../../build/NEWS:25099 +msgid "" +":issue:`27044`: Add ConfigDialog.remove_var_callbacks to stop memory leaks." +msgstr "" + +#: ../../../build/NEWS:21994 ../../../build/NEWS:25101 +msgid ":issue:`23977`: Add more asserts to test_delegator." +msgstr "" + +#: ../../../build/NEWS:21999 +msgid "" +":issue:`16484`: Change the default PYTHONDOCS URL to \"https:\", and fix the" +" resulting links to use lowercase. Patch by Sean Rodman, test by Kaushik " +"Nadikuditi." +msgstr "" + +#: ../../../build/NEWS:22003 ../../../build/NEWS:25122 +msgid ":issue:`24136`: Document the new :pep:`448` unpacking syntax of 3.5." +msgstr "" + +#: ../../../build/NEWS:22005 ../../../build/NEWS:25680 +msgid "" +":issue:`22558`: Add remaining doc links to source code for Python-coded " +"modules. Patch by Yoni Lavi." +msgstr "" + +#: ../../../build/NEWS:22011 +msgid "" +":issue:`25285`: regrtest now uses subprocesses when the -j1 command line " +"option is used: each test file runs in a fresh child process. Before, the " +"-j1 option was ignored." +msgstr "" + +#: ../../../build/NEWS:22015 +msgid "" +":issue:`25285`: Tools/buildbot/test.bat script now uses -j1 by default to " +"run each test file in fresh child process." +msgstr "" + +#: ../../../build/NEWS:22021 +msgid "" +":issue:`27064`: The py.exe launcher now defaults to Python 3. The Windows " +"launcher ``py.exe`` no longer prefers an installed Python 2 version over " +"Python 3 by default when used interactively." +msgstr "" + +#: ../../../build/NEWS:22025 ../../../build/NEWS:25237 +msgid "" +":issue:`17500`: Remove unused and outdated icons. (See also: " +"https://github.com/python/pythondotorg/issues/945)" +msgstr "" + +#: ../../../build/NEWS:22031 ../../../build/NEWS:25173 +msgid "" +":issue:`27229`: Fix the cross-compiling pgen rule for in-tree builds. Patch" +" by Xavier de Gaye." +msgstr "" + +#: ../../../build/NEWS:22034 ../../../build/NEWS:25210 +msgid "" +":issue:`26930`: Update OS X 10.5+ 32-bit-only installer to build and link " +"with OpenSSL 1.0.2h." +msgstr "" + +#: ../../../build/NEWS:22040 +msgid ":issue:`27186`: Add the PyOS_FSPath() function (part of :pep:`519`)." +msgstr "" + +#: ../../../build/NEWS:22042 +msgid "" +":issue:`26282`: PyArg_ParseTupleAndKeywords() now supports positional-only " +"parameters." +msgstr "" + +#: ../../../build/NEWS:22048 +msgid "" +":issue:`26282`: Argument Clinic now supports positional-only and keyword " +"parameters in the same function." +msgstr "" + +#: ../../../build/NEWS:22053 +msgid "Python 3.6.0 alpha 1" +msgstr "Python 3.6.0 alpha 1" + +#: ../../../build/NEWS:22055 +msgid "*Release date: 2016-05-16*" +msgstr "*发布日期: 2016-05-16*" + +#: ../../../build/NEWS:22060 ../../../build/NEWS:24544 +msgid "" +":issue:`26657`: Fix directory traversal vulnerability with http.server on " +"Windows. This fixes a regression that was introduced in 3.3.4rc1 and " +"3.4.0rc1. Based on patch by Philipp Hagemeister." +msgstr "" + +#: ../../../build/NEWS:22064 ../../../build/NEWS:24548 +msgid "" +":issue:`26313`: ssl.py _load_windows_store_certs fails if windows cert store" +" is empty. Patch by Baji." +msgstr "" + +#: ../../../build/NEWS:22067 ../../../build/NEWS:24551 +msgid "" +":issue:`25939`: On Windows open the cert store readonly in " +"ssl.enum_certificates." +msgstr "" + +#: ../../../build/NEWS:22073 ../../../build/NEWS:24560 +msgid "" +":issue:`20041`: Fixed TypeError when frame.f_trace is set to None. Patch by " +"Xavier de Gaye." +msgstr "" + +#: ../../../build/NEWS:22076 ../../../build/NEWS:24563 +msgid "" +":issue:`26168`: Fixed possible refleaks in failing Py_BuildValue() with the " +"\"N\" format unit." +msgstr "" + +#: ../../../build/NEWS:22079 ../../../build/NEWS:24566 +msgid "" +":issue:`26991`: Fix possible refleak when creating a function with " +"annotations." +msgstr "" + +#: ../../../build/NEWS:22081 +msgid "" +":issue:`27039`: Fixed bytearray.remove() for values greater than 127. Based" +" on patch by Joe Jevnik." +msgstr "" + +#: ../../../build/NEWS:22084 ../../../build/NEWS:24571 +msgid "" +":issue:`23640`: int.from_bytes() no longer bypasses constructors for " +"subclasses." +msgstr "" + +#: ../../../build/NEWS:22087 +msgid "" +":issue:`27005`: Optimized the float.fromhex() class method for exact float. " +"It is now 2 times faster." +msgstr "" + +#: ../../../build/NEWS:22090 +msgid "" +":issue:`18531`: Single var-keyword argument of dict subtype was passed " +"unscathed to the C-defined function. Now it is converted to exact dict." +msgstr "" + +#: ../../../build/NEWS:22093 ../../../build/NEWS:24574 +msgid "" +":issue:`26811`: gc.get_objects() no longer contains a broken tuple with NULL" +" pointer." +msgstr "" + +#: ../../../build/NEWS:22096 ../../../build/NEWS:24577 +msgid "" +":issue:`20120`: Use RawConfigParser for .pypirc parsing, removing support " +"for interpolation unintentionally added with move to Python 3. Behavior no " +"longer does any interpolation in .pypirc files, matching behavior in Python " +"2.7 and Setuptools 19.0." +msgstr "" + +#: ../../../build/NEWS:22101 +msgid "" +":issue:`26249`: Memory functions of the :c:func:`PyMem_Malloc` domain " +"(:c:data:`PYMEM_DOMAIN_MEM`) now use the :ref:`pymalloc allocator " +"` rather than system :c:func:`malloc`. Applications calling " +":c:func:`PyMem_Malloc` without holding the GIL can now crash: use " +"``PYTHONMALLOC=debug`` environment variable to validate the usage of memory " +"allocators in your application." +msgstr "" + +#: ../../../build/NEWS:22108 +msgid "" +":issue:`26802`: Optimize function calls only using unpacking like " +"``func(*tuple)`` (no other positional argument, no keyword): avoid copying " +"the tuple. Patch written by Joe Jevnik." +msgstr "" + +#: ../../../build/NEWS:22112 ../../../build/NEWS:24582 +msgid ":issue:`26659`: Make the builtin slice type support cycle collection." +msgstr "" + +#: ../../../build/NEWS:22114 ../../../build/NEWS:24584 +msgid "" +":issue:`26718`: super.__init__ no longer leaks memory if called multiple " +"times. NOTE: A direct call of super.__init__ is not endorsed!" +msgstr "" + +#: ../../../build/NEWS:22117 ../../../build/NEWS:24614 +msgid ":issue:`27138`: Fix the doc comment for FileFinder.find_spec()." +msgstr "" + +#: ../../../build/NEWS:22119 ../../../build/NEWS:24658 +msgid ":issue:`27147`: Mention :pep:`420` in the importlib docs." +msgstr "" + +#: ../../../build/NEWS:22121 ../../../build/NEWS:24587 +msgid "" +":issue:`25339`: PYTHONIOENCODING now has priority over locale in setting the" +" error handler for stdin and stdout." +msgstr "" + +#: ../../../build/NEWS:22124 ../../../build/NEWS:24590 +msgid "" +":issue:`26494`: Fixed crash on iterating exhausting iterators. Affected " +"classes are generic sequence iterators, iterators of str, bytes, bytearray, " +"list, tuple, set, frozenset, dict, OrderedDict, corresponding views and " +"os.scandir() iterator." +msgstr "" + +#: ../../../build/NEWS:22129 +msgid "" +":issue:`26574`: Optimize ``bytes.replace(b'', b'.')`` and " +"``bytearray.replace(b'', b'.')``. Patch written by Josh Snider." +msgstr "" + +#: ../../../build/NEWS:22132 ../../../build/NEWS:24595 +msgid "" +":issue:`26581`: If coding cookie is specified multiple times on a line in " +"Python source code file, only the first one is taken to account." +msgstr "" + +#: ../../../build/NEWS:22135 +msgid ":issue:`19711`: Add tests for reloading namespace packages." +msgstr "" + +#: ../../../build/NEWS:22137 +msgid "" +":issue:`21099`: Switch applicable importlib tests to use :pep:`451` API." +msgstr "" + +#: ../../../build/NEWS:22139 +msgid "" +":issue:`26563`: Debug hooks on Python memory allocators now raise a fatal " +"error if functions of the :c:func:`PyMem_Malloc` family are called without " +"holding the GIL." +msgstr "" + +#: ../../../build/NEWS:22143 +msgid "" +":issue:`26564`: On error, the debug hooks on Python memory allocators now " +"use the :mod:`tracemalloc` module to get the traceback where a memory block " +"was allocated." +msgstr "" + +#: ../../../build/NEWS:22147 +msgid "" +":issue:`26558`: The debug hooks on Python memory allocator " +":c:func:`PyObject_Malloc` now detect when functions are called without " +"holding the GIL." +msgstr "" + +#: ../../../build/NEWS:22151 +msgid "" +":issue:`26516`: Add :envvar:`PYTHONMALLOC` environment variable to set the " +"Python memory allocators and/or install debug hooks." +msgstr "" + +#: ../../../build/NEWS:22154 +msgid "" +":issue:`26516`: The :c:func:`PyMem_SetupDebugHooks` function can now also be" +" used on Python compiled in release mode." +msgstr "" + +#: ../../../build/NEWS:22157 +msgid "" +":issue:`26516`: The :envvar:`PYTHONMALLOCSTATS` environment variable can now" +" also be used on Python compiled in release mode. It now has no effect if " +"set to an empty string." +msgstr "" + +#: ../../../build/NEWS:22161 +msgid "" +":issue:`26516`: In debug mode, debug hooks are now also installed on Python " +"memory allocators when Python is configured without pymalloc." +msgstr "" + +#: ../../../build/NEWS:22164 ../../../build/NEWS:24598 +msgid "" +":issue:`26464`: Fix str.translate() when string is ASCII and first " +"replacements removes character, but next replacement uses a non-ASCII " +"character or a string longer than 1 character. Regression introduced in " +"Python 3.5.0." +msgstr "" + +#: ../../../build/NEWS:22168 ../../../build/NEWS:24602 +msgid "" +":issue:`22836`: Ensure exception reports from PyErr_Display() and " +"PyErr_WriteUnraisable() are sensible even when formatting them produces " +"secondary errors. This affects the reports produced by sys.__excepthook__()" +" and when __del__() raises an exception." +msgstr "" + +#: ../../../build/NEWS:22173 ../../../build/NEWS:24607 +msgid "" +":issue:`26302`: Correct behavior to reject comma as a legal character for " +"cookie names." +msgstr "" + +#: ../../../build/NEWS:22176 +msgid "" +":issue:`26136`: Upgrade the warning when a generator raises StopIteration " +"from PendingDeprecationWarning to DeprecationWarning. Patch by Anish Shah." +msgstr "" + +#: ../../../build/NEWS:22179 +msgid "" +":issue:`26204`: The compiler now ignores all constant statements: bytes, " +"str, int, float, complex, name constants (None, False, True), Ellipsis and " +"ast.Constant; not only str and int. For example, ``1.0`` is now ignored in " +"``def f(): 1.0``." +msgstr "" + +#: ../../../build/NEWS:22184 ../../../build/NEWS:24610 +msgid "" +":issue:`4806`: Avoid masking the original TypeError exception when using " +"star (``*``) unpacking in function calls. Based on patch by Hagen Fürstenau" +" and Daniel Urban." +msgstr "" + +#: ../../../build/NEWS:22188 +msgid "" +":issue:`26146`: Add a new kind of AST node: ``ast.Constant``. It can be used" +" by external AST optimizers, but the compiler does not emit directly such " +"node." +msgstr "" + +#: ../../../build/NEWS:22192 +msgid "" +":issue:`23601`: Sped-up allocation of dict key objects by using Python's " +"small object allocator. (Contributed by Julian Taylor.)" +msgstr "" + +#: ../../../build/NEWS:22195 +msgid "" +":issue:`18018`: Import raises ImportError instead of SystemError if a " +"relative import is attempted without a known parent package." +msgstr "" + +#: ../../../build/NEWS:22198 +msgid "" +":issue:`25843`: When compiling code, don't merge constants if they are equal" +" but have a different types. For example, ``f1, f2 = lambda: 1, lambda: " +"1.0`` is now correctly compiled to two different functions: ``f1()`` returns" +" ``1`` (``int``) and ``f2()`` returns ``1.0`` (``float``), even if ``1`` and" +" ``1.0`` are equal." +msgstr "" + +#: ../../../build/NEWS:22204 +msgid "" +":issue:`26107`: The format of the ``co_lnotab`` attribute of code objects " +"changes to support negative line number delta." +msgstr "" + +#: ../../../build/NEWS:22207 ../../../build/NEWS:24616 +msgid "" +":issue:`26154`: Add a new private _PyThreadState_UncheckedGet() function to " +"get the current Python thread state, but don't issue a fatal error if it is " +"NULL. This new function must be used instead of accessing directly the " +"_PyThreadState_Current variable. The variable is no more exposed since " +"Python 3.5.1 to hide the exact implementation of atomic C types, to avoid " +"compiler issues." +msgstr "" + +#: ../../../build/NEWS:22214 +msgid "" +":issue:`25791`: If __package__ != __spec__.parent or if neither __package__ " +"or __spec__ are defined then ImportWarning is raised." +msgstr "" + +#: ../../../build/NEWS:22217 ../../../build/NEWS:24633 +msgid "" +":issue:`22995`: [UPDATE] Comment out the one of the pickleability tests in " +"_PyObject_GetState() due to regressions observed in Cython-based projects." +msgstr "" + +#: ../../../build/NEWS:22220 ../../../build/NEWS:24636 +msgid ":issue:`25961`: Disallowed null characters in the type name." +msgstr "" + +#: ../../../build/NEWS:22222 ../../../build/NEWS:24638 +msgid "" +":issue:`25973`: Fix segfault when an invalid nonlocal statement binds a name" +" starting with two underscores." +msgstr "" + +#: ../../../build/NEWS:22225 ../../../build/NEWS:24641 +msgid "" +":issue:`22995`: Instances of extension types with a state that aren't " +"subclasses of list or dict and haven't implemented any pickle-related " +"methods (__reduce__, __reduce_ex__, __getnewargs__, __getnewargs_ex__, or " +"__getstate__), can no longer be pickled. Including memoryview." +msgstr "" + +#: ../../../build/NEWS:22230 ../../../build/NEWS:24646 +msgid "" +":issue:`20440`: Massive replacing unsafe attribute setting code with special" +" macro Py_SETREF." +msgstr "" + +#: ../../../build/NEWS:22233 ../../../build/NEWS:24649 +msgid "" +":issue:`25766`: Special method __bytes__() now works in str subclasses." +msgstr "" + +#: ../../../build/NEWS:22235 ../../../build/NEWS:24651 +msgid "" +":issue:`25421`: __sizeof__ methods of builtin types now use dynamic basic " +"size. This allows sys.getsize() to work correctly with their subclasses with" +" __slots__ defined." +msgstr "" + +#: ../../../build/NEWS:22239 ../../../build/NEWS:24655 +#: ../../../build/NEWS:25265 +msgid "" +":issue:`25709`: Fixed problem with in-place string concatenation and utf-8 " +"cache." +msgstr "" + +#: ../../../build/NEWS:22242 +msgid "" +":issue:`5319`: New Py_FinalizeEx() API allowing Python to set an exit status" +" of 120 on failure to flush buffered streams." +msgstr "" + +#: ../../../build/NEWS:22245 +msgid ":issue:`25485`: telnetlib.Telnet is now a context manager." +msgstr "" + +#: ../../../build/NEWS:22247 ../../../build/NEWS:24660 +msgid "" +":issue:`24097`: Fixed crash in object.__reduce__() if slot name is freed " +"inside __getattr__." +msgstr "" + +#: ../../../build/NEWS:22250 ../../../build/NEWS:24663 +msgid "" +":issue:`24731`: Fixed crash on converting objects with special methods " +"__bytes__, __trunc__, and __float__ returning instances of subclasses of " +"bytes, int, and float to subclasses of bytes, int, and float " +"correspondingly." +msgstr "" + +#: ../../../build/NEWS:22255 ../../../build/NEWS:25283 +msgid "" +":issue:`25630`: Fix a possible segfault during argument parsing in functions" +" that accept filesystem paths." +msgstr "" + +#: ../../../build/NEWS:22258 ../../../build/NEWS:25286 +msgid "" +":issue:`23564`: Fixed a partially broken sanity check in the " +"_posixsubprocess internals regarding how fds_to_pass were passed to the " +"child. The bug had no actual impact as subprocess.py already avoided it." +msgstr "" + +#: ../../../build/NEWS:22262 ../../../build/NEWS:25290 +msgid "" +":issue:`25388`: Fixed tokenizer crash when processing undecodable source " +"code with a null byte." +msgstr "" + +#: ../../../build/NEWS:22265 ../../../build/NEWS:25293 +msgid "" +":issue:`25462`: The hash of the key now is calculated only once in most " +"operations in C implementation of OrderedDict." +msgstr "" + +#: ../../../build/NEWS:22268 ../../../build/NEWS:25296 +msgid "" +":issue:`22995`: Default implementation of __reduce__ and __reduce_ex__ now " +"rejects builtin types with not defined __new__." +msgstr "" + +#: ../../../build/NEWS:22271 ../../../build/NEWS:25302 +msgid "" +":issue:`24802`: Avoid buffer overreads when int(), float(), compile(), " +"exec() and eval() are passed bytes-like objects. These objects are not " +"necessarily terminated by a null byte, but the functions assumed they were." +msgstr "" + +#: ../../../build/NEWS:22276 ../../../build/NEWS:25299 +msgid "" +":issue:`25555`: Fix parser and AST: fill lineno and col_offset of \"arg\" " +"node when compiling AST from Python objects." +msgstr "" + +#: ../../../build/NEWS:22279 ../../../build/NEWS:25307 +msgid "" +":issue:`24726`: Fixed a crash and leaking NULL in repr() of OrderedDict that" +" was mutated by direct calls of dict methods." +msgstr "" + +#: ../../../build/NEWS:22282 ../../../build/NEWS:25310 +msgid "" +":issue:`25449`: Iterating OrderedDict with keys with unstable hash now " +"raises KeyError in C implementations as well as in Python implementation." +msgstr "" + +#: ../../../build/NEWS:22285 ../../../build/NEWS:25313 +msgid "" +":issue:`25395`: Fixed crash when highly nested OrderedDict structures were " +"garbage collected." +msgstr "" + +#: ../../../build/NEWS:22288 +msgid "" +":issue:`25401`: Optimize bytes.fromhex() and bytearray.fromhex(): they are " +"now between 2x and 3.5x faster." +msgstr "" + +#: ../../../build/NEWS:22291 +msgid "" +":issue:`25399`: Optimize bytearray % args using the new private " +"_PyBytesWriter API. Formatting is now between 2.5 and 5 times faster." +msgstr "" + +#: ../../../build/NEWS:22294 ../../../build/NEWS:25316 +msgid "" +":issue:`25274`: sys.setrecursionlimit() now raises a RecursionError if the " +"new recursion limit is too low depending at the current recursion depth. " +"Modify also the \"lower-water mark\" formula to make it monotonic. This mark" +" is used to decide when the overflowed flag of the thread state is reset." +msgstr "" + +#: ../../../build/NEWS:22299 ../../../build/NEWS:25321 +msgid "" +":issue:`24402`: Fix input() to prompt to the redirected stdout when " +"sys.stdout.fileno() fails." +msgstr "" + +#: ../../../build/NEWS:22302 +msgid "" +":issue:`25349`: Optimize bytes % args using the new private _PyBytesWriter " +"API. Formatting is now up to 2 times faster." +msgstr "" + +#: ../../../build/NEWS:22305 ../../../build/NEWS:25324 +msgid "" +":issue:`24806`: Prevent builtin types that are not allowed to be subclassed " +"from being subclassed through multiple inheritance." +msgstr "" + +#: ../../../build/NEWS:22308 +msgid "" +":issue:`25301`: The UTF-8 decoder is now up to 15 times as fast for error " +"handlers: ``ignore``, ``replace`` and ``surrogateescape``." +msgstr "" + +#: ../../../build/NEWS:22311 ../../../build/NEWS:25327 +msgid "" +":issue:`24848`: Fixed a number of bugs in UTF-7 decoding of misformed data." +msgstr "" + +#: ../../../build/NEWS:22313 +msgid "" +":issue:`25267`: The UTF-8 encoder is now up to 75 times as fast for error " +"handlers: ``ignore``, ``replace``, ``surrogateescape``, ``surrogatepass``. " +"Patch co-written with Serhiy Storchaka." +msgstr "" + +#: ../../../build/NEWS:22317 ../../../build/NEWS:25329 +msgid "" +":issue:`25280`: Import trace messages emitted in verbose (-v) mode are no " +"longer formatted twice." +msgstr "" + +#: ../../../build/NEWS:22320 +msgid "" +":issue:`25227`: Optimize ASCII and latin1 encoders with the " +"``surrogateescape`` error handler: the encoders are now up to 3 times as " +"fast. Initial patch written by Serhiy Storchaka." +msgstr "" + +#: ../../../build/NEWS:22324 ../../../build/NEWS:25332 +msgid "" +":issue:`25003`: On Solaris 11.3 or newer, os.urandom() now uses the " +"getrandom() function instead of the getentropy() function. The getentropy() " +"function is blocking to generate very good quality entropy, os.urandom() " +"doesn't need such high-quality entropy." +msgstr "" + +#: ../../../build/NEWS:22329 +msgid "" +":issue:`9232`: Modify Python's grammar to allow trailing commas in the " +"argument list of a function declaration. For example, \"def f(\\*, a = 3,):" +" pass\" is now legal. Patch from Mark Dickinson." +msgstr "" + +#: ../../../build/NEWS:22333 +msgid "" +":issue:`24965`: Implement :pep:`498` \"Literal String Interpolation\". This " +"allows you to embed expressions inside f-strings, which are converted to " +"normal strings at run time. Given x=3, then f'value={x}' == 'value=3'. Patch" +" by Eric V. Smith." +msgstr "" + +#: ../../../build/NEWS:22338 ../../../build/NEWS:24668 +msgid "" +":issue:`26478`: Fix semantic bugs when using binary operators with " +"dictionary views and tuples." +msgstr "" + +#: ../../../build/NEWS:22341 ../../../build/NEWS:24671 +msgid "" +":issue:`26171`: Fix possible integer overflow and heap corruption in " +"zipimporter.get_data()." +msgstr "" + +#: ../../../build/NEWS:22344 ../../../build/NEWS:24674 +msgid ":issue:`25660`: Fix TAB key behaviour in REPL with readline." +msgstr "" + +#: ../../../build/NEWS:22346 +msgid ":issue:`26288`: Optimize PyLong_AsDouble." +msgstr "" + +#: ../../../build/NEWS:22348 +msgid "" +":issue:`26289`: Optimize floor and modulo division for single-digit longs. " +"Microbenchmarks show 2-2.5x improvement. Built-in 'divmod' function is now " +"also ~10% faster. (See also: :issue:`26315`)" +msgstr "" + +#: ../../../build/NEWS:22352 ../../../build/NEWS:24676 +msgid "" +":issue:`25887`: Raise a RuntimeError when a coroutine object is awaited more" +" than once." +msgstr "" + +#: ../../../build/NEWS:22358 ../../../build/NEWS:24732 +msgid "" +":issue:`27057`: Fix os.set_inheritable() on Android, ioctl() is blocked by " +"SELinux and fails with EACCESS. The function now falls back to fcntl(). " +"Patch written by Michał Bednarski." +msgstr "" + +#: ../../../build/NEWS:22362 ../../../build/NEWS:24736 +msgid "" +":issue:`27014`: Fix infinite recursion using typing.py. Thanks to Kalle " +"Tuure!" +msgstr "" + +#: ../../../build/NEWS:22364 +msgid "" +":issue:`27031`: Removed dummy methods in Tkinter widget classes: " +"tk_menuBar() and tk_bindForTraversal()." +msgstr "" + +#: ../../../build/NEWS:22367 ../../../build/NEWS:24738 +msgid "" +":issue:`14132`: Fix urllib.request redirect handling when the target only " +"has a query string. Original fix by Ján Janech." +msgstr "" + +#: ../../../build/NEWS:22370 ../../../build/NEWS:24741 +msgid "" +":issue:`17214`: The \"urllib.request\" module now percent-encodes non-ASCII " +"bytes found in redirect target URLs. Some servers send Location header " +"fields with non-ASCII bytes, but \"http.client\" requires the request target" +" to be ASCII-encodable, otherwise a UnicodeEncodeError is raised. Based on " +"patch by Christian Heimes." +msgstr "" + +#: ../../../build/NEWS:22376 +msgid "" +":issue:`27033`: The default value of the decode_data parameter for " +"smtpd.SMTPChannel and smtpd.SMTPServer constructors is changed to False." +msgstr "" + +#: ../../../build/NEWS:22379 +msgid ":issue:`27034`: Removed deprecated class asynchat.fifo." +msgstr "" + +#: ../../../build/NEWS:22381 +msgid "" +":issue:`26870`: Added readline.set_auto_history(), which can stop entries " +"being automatically added to the history list. Based on patch by Tyler " +"Crompton." +msgstr "" + +#: ../../../build/NEWS:22385 +msgid "" +":issue:`26039`: zipfile.ZipFile.open() can now be used to write data into a " +"ZIP file, as well as for extracting data. Patch by Thomas Kluyver." +msgstr "" + +#: ../../../build/NEWS:22388 ../../../build/NEWS:24747 +msgid "" +":issue:`26892`: Honor debuglevel flag in urllib.request.HTTPHandler. Patch " +"contributed by Chi Hsuan Yen." +msgstr "" + +#: ../../../build/NEWS:22391 ../../../build/NEWS:24750 +msgid "" +":issue:`22274`: In the subprocess module, allow stderr to be redirected to " +"stdout even when stdout is not redirected. Patch by Akira Li." +msgstr "" + +#: ../../../build/NEWS:22394 ../../../build/NEWS:24753 +msgid "" +":issue:`26807`: mock_open 'files' no longer error on readline at end of " +"file. Patch from Yolanda Robla." +msgstr "" + +#: ../../../build/NEWS:22397 ../../../build/NEWS:24756 +msgid ":issue:`25745`: Fixed leaking a userptr in curses panel destructor." +msgstr "" + +#: ../../../build/NEWS:22399 ../../../build/NEWS:24758 +msgid "" +":issue:`26977`: Removed unnecessary, and ignored, call to sum of squares " +"helper in statistics.pvariance." +msgstr "" + +#: ../../../build/NEWS:22402 +msgid "" +":issue:`26002`: Use bisect in statistics.median instead of a linear search. " +"Patch by Upendra Kuma." +msgstr "" + +#: ../../../build/NEWS:22405 +msgid "" +":issue:`25974`: Make use of new Decimal.as_integer_ratio() method in " +"statistics module. Patch by Stefan Krah." +msgstr "" + +#: ../../../build/NEWS:22408 +msgid ":issue:`26996`: Add secrets module as described in :pep:`506`." +msgstr "" + +#: ../../../build/NEWS:22410 ../../../build/NEWS:24761 +msgid "" +":issue:`26881`: The modulefinder module now supports extended opcode " +"arguments." +msgstr "" + +#: ../../../build/NEWS:22412 ../../../build/NEWS:24763 +msgid "" +":issue:`23815`: Fixed crashes related to directly created instances of types" +" in _tkinter and curses.panel modules." +msgstr "" + +#: ../../../build/NEWS:22415 ../../../build/NEWS:24766 +msgid "" +":issue:`17765`: weakref.ref() no longer silently ignores keyword arguments. " +"Patch by Georg Brandl." +msgstr "" + +#: ../../../build/NEWS:22418 ../../../build/NEWS:24769 +msgid "" +":issue:`26873`: xmlrpc now raises ResponseError on unsupported type tags " +"instead of silently return incorrect result." +msgstr "" + +#: ../../../build/NEWS:22421 +msgid "" +":issue:`26915`: The __contains__ methods in the collections ABCs now check " +"for identity before checking equality. This better matches the behavior of " +"the concrete classes, allows sensible handling of NaNs, and makes it easier " +"to reason about container invariants." +msgstr "" + +#: ../../../build/NEWS:22426 ../../../build/NEWS:24772 +msgid "" +":issue:`26711`: Fixed the comparison of plistlib.Data with other types." +msgstr "" + +#: ../../../build/NEWS:22428 ../../../build/NEWS:24774 +msgid "" +":issue:`24114`: Fix an uninitialized variable in `ctypes.util`. The bug only" +" occurs on SunOS when the ctypes implementation searches for the `crle` " +"program. Patch by Xiang Zhang. Tested on SunOS by Kees Bos." +msgstr "" + +#: ../../../build/NEWS:22432 ../../../build/NEWS:24778 +msgid "" +":issue:`26864`: In urllib.request, change the proxy bypass host checking " +"against no_proxy to be case-insensitive, and to not match unrelated host " +"names that happen to have a bypassed hostname as a suffix. Patch by Xiang " +"Zhang." +msgstr "" + +#: ../../../build/NEWS:22437 +msgid "" +":issue:`24902`: Print server URL on http.server startup. Initial patch by " +"Felix Kaiser." +msgstr "" + +#: ../../../build/NEWS:22440 +msgid "" +":issue:`25788`: fileinput.hook_encoded() now supports an \"errors\" argument" +" for passing to open. Original patch by Joseph Hackman." +msgstr "" + +#: ../../../build/NEWS:22443 ../../../build/NEWS:24783 +msgid "" +":issue:`26634`: recursive_repr() now sets __qualname__ of wrapper. Patch by" +" Xiang Zhang." +msgstr "" + +#: ../../../build/NEWS:22446 ../../../build/NEWS:24786 +msgid "" +":issue:`26804`: urllib.request will prefer lower_case proxy environment " +"variables over UPPER_CASE or Mixed_Case ones. Patch contributed by Hans-" +"Peter Jansen." +msgstr "" + +#: ../../../build/NEWS:22450 ../../../build/NEWS:24790 +msgid "" +":issue:`26837`: assertSequenceEqual() now correctly outputs non-stringified " +"differing items (like bytes in the -b mode). This affects assertListEqual()" +" and assertTupleEqual()." +msgstr "" + +#: ../../../build/NEWS:22454 ../../../build/NEWS:24794 +msgid "" +":issue:`26041`: Remove \"will be removed in Python 3.7\" from deprecation " +"messages of platform.dist() and platform.linux_distribution(). Patch by " +"Kumaripaba Miyurusara Athukorala." +msgstr "" + +#: ../../../build/NEWS:22458 ../../../build/NEWS:24798 +msgid "" +":issue:`26822`: itemgetter, attrgetter and methodcaller objects no longer " +"silently ignore keyword arguments." +msgstr "" + +#: ../../../build/NEWS:22461 ../../../build/NEWS:24801 +msgid "" +":issue:`26733`: Disassembling a class now disassembles class and static " +"methods. Patch by Xiang Zhang." +msgstr "" + +#: ../../../build/NEWS:22464 ../../../build/NEWS:24804 +msgid "" +":issue:`26801`: Fix error handling in :func:`shutil.get_terminal_size`, " +"catch :exc:`AttributeError` instead of :exc:`NameError`. Patch written by " +"Emanuel Barry." +msgstr "" + +#: ../../../build/NEWS:22468 ../../../build/NEWS:24808 +msgid "" +":issue:`24838`: tarfile's ustar and gnu formats now correctly calculate name" +" and link field limits for multibyte character encodings like utf-8." +msgstr "" + +#: ../../../build/NEWS:22471 ../../../build/NEWS:24811 +msgid "" +":issue:`26717`: Stop encoding Latin-1-ized WSGI paths with UTF-8. Patch by " +"Anthony Sottile." +msgstr "" + +#: ../../../build/NEWS:22474 +msgid ":issue:`26782`: Add STARTUPINFO to subprocess.__all__ on Windows." +msgstr "" + +#: ../../../build/NEWS:22476 +msgid "" +":issue:`26404`: Add context manager to socketserver. Patch by Aviv " +"Palivoda." +msgstr "" + +#: ../../../build/NEWS:22478 ../../../build/NEWS:24814 +msgid "" +":issue:`26735`: Fix :func:`os.urandom` on Solaris 11.3 and newer when " +"reading more than 1,024 bytes: call ``getrandom()`` multiple times with a " +"limit of 1024 bytes per call." +msgstr "" + +#: ../../../build/NEWS:22482 +msgid "" +":issue:`26585`: Eliminate http.server._quote_html() and use " +"html.escape(quote=False). Patch by Xiang Zhang." +msgstr "" + +#: ../../../build/NEWS:22485 +msgid ":issue:`26685`: Raise OSError if closing a socket fails." +msgstr "" + +#: ../../../build/NEWS:22487 ../../../build/NEWS:24818 +msgid "" +":issue:`16329`: Add .webm to mimetypes.types_map. Patch by Giampaolo " +"Rodola'." +msgstr "" + +#: ../../../build/NEWS:22489 ../../../build/NEWS:24820 +msgid "" +":issue:`13952`: Add .csv to mimetypes.types_map. Patch by Geoff Wilson." +msgstr "" + +#: ../../../build/NEWS:22491 +msgid "" +":issue:`26587`: the site module now allows .pth files to specify files to be" +" added to sys.path (e.g. zip files)." +msgstr "" + +#: ../../../build/NEWS:22494 +msgid "" +":issue:`25609`: Introduce contextlib.AbstractContextManager and " +"typing.ContextManager." +msgstr "" + +#: ../../../build/NEWS:22497 ../../../build/NEWS:24822 +msgid ":issue:`26709`: Fixed Y2038 problem in loading binary PLists." +msgstr "" + +#: ../../../build/NEWS:22499 ../../../build/NEWS:24824 +msgid "" +":issue:`23735`: Handle terminal resizing with Readline 6.3+ by installing " +"our own SIGWINCH handler. Patch by Eric Price." +msgstr "" + +#: ../../../build/NEWS:22502 +msgid "" +":issue:`25951`: Change SSLSocket.sendall() to return None, as explicitly " +"documented for plain socket objects. Patch by Aviv Palivoda." +msgstr "" + +#: ../../../build/NEWS:22505 ../../../build/NEWS:24827 +msgid "" +":issue:`26586`: In http.server, respond with \"413 Request header fields too" +" large\" if there are too many header fields to parse, rather than killing " +"the connection and raising an unhandled exception. Patch by Xiang Zhang." +msgstr "" + +#: ../../../build/NEWS:22509 +msgid ":issue:`26676`: Added missing XMLPullParser to ElementTree.__all__." +msgstr "" + +#: ../../../build/NEWS:22511 ../../../build/NEWS:24831 +msgid "" +":issue:`22854`: Change BufferedReader.writable() and " +"BufferedWriter.readable() to always return False." +msgstr "" + +#: ../../../build/NEWS:22514 +msgid "" +":issue:`26492`: Exhausted iterator of array.array now conforms with the " +"behavior of iterators of other mutable sequences: it lefts exhausted even if" +" iterated array is extended." +msgstr "" + +#: ../../../build/NEWS:22518 +msgid "" +":issue:`26641`: doctest.DocFileTest and doctest.testfile() now support " +"packages (module splitted into multiple directories) for the package " +"parameter." +msgstr "" + +#: ../../../build/NEWS:22521 ../../../build/NEWS:24834 +msgid "" +":issue:`25195`: Fix a regression in mock.MagicMock. _Call is a subclass of " +"tuple (changeset 3603bae63c13 only works for classes) so we need to " +"implement __ne__ ourselves. Patch by Andrew Plummer." +msgstr "" + +#: ../../../build/NEWS:22525 ../../../build/NEWS:24838 +msgid "" +":issue:`26644`: Raise ValueError rather than SystemError when a negative " +"length is passed to SSLSocket.recv() or read()." +msgstr "" + +#: ../../../build/NEWS:22528 ../../../build/NEWS:24841 +msgid "" +":issue:`23804`: Fix SSL recv(0) and read(0) methods to return zero bytes " +"instead of up to 1024." +msgstr "" + +#: ../../../build/NEWS:22531 ../../../build/NEWS:24844 +msgid ":issue:`26616`: Fixed a bug in datetime.astimezone() method." +msgstr "" + +#: ../../../build/NEWS:22533 +msgid "" +":issue:`26637`: The :mod:`importlib` module now emits an :exc:`ImportError` " +"rather than a :exc:`TypeError` if :func:`__import__` is tried during the " +"Python shutdown process but :data:`sys.path` is already cleared (set to " +"``None``)." +msgstr "" + +#: ../../../build/NEWS:22538 +msgid "" +":issue:`21925`: :func:`warnings.formatwarning` now catches exceptions when " +"calling :func:`linecache.getline` and " +":func:`tracemalloc.get_object_traceback` to be able to log " +":exc:`ResourceWarning` emitted late during the Python shutdown process." +msgstr "" + +#: ../../../build/NEWS:22543 +msgid "" +":issue:`23848`: On Windows, faulthandler.enable() now also installs an " +"exception handler to dump the traceback of all Python threads on any Windows" +" exception, not only on UNIX signals (SIGSEGV, SIGFPE, SIGABRT)." +msgstr "" + +#: ../../../build/NEWS:22547 +msgid "" +":issue:`26530`: Add C functions :c:func:`_PyTraceMalloc_Track` and " +":c:func:`_PyTraceMalloc_Untrack` to track memory blocks using the " +":mod:`tracemalloc` module. Add :c:func:`_PyTraceMalloc_GetTraceback` to get " +"the traceback of an object." +msgstr "" + +#: ../../../build/NEWS:22552 +msgid "" +":issue:`26588`: The _tracemalloc now supports tracing memory allocations of " +"multiple address spaces (domains)." +msgstr "" + +#: ../../../build/NEWS:22555 ../../../build/NEWS:24850 +msgid "" +":issue:`24266`: Ctrl+C during Readline history search now cancels the search" +" mode when compiled with Readline 7." +msgstr "" + +#: ../../../build/NEWS:22558 +msgid "" +":issue:`26590`: Implement a safe finalizer for the _socket.socket type. It " +"now releases the GIL to close the socket." +msgstr "" + +#: ../../../build/NEWS:22561 +msgid "" +":issue:`18787`: spwd.getspnam() now raises a PermissionError if the user " +"doesn't have privileges." +msgstr "" + +#: ../../../build/NEWS:22564 ../../../build/NEWS:24853 +msgid "" +":issue:`26560`: Avoid potential ValueError in BaseHandler.start_response. " +"Initial patch by Peter Inglesby." +msgstr "" + +#: ../../../build/NEWS:22567 +msgid "" +":issue:`26567`: Add a new function :c:func:`PyErr_ResourceWarning` function " +"to pass the destroyed object. Add a *source* attribute to " +":class:`warnings.WarningMessage`. Add warnings._showwarnmsg() which uses " +"tracemalloc to get the traceback where source object was allocated." +msgstr "" + +#: ../../../build/NEWS:22572 ../../../build/NEWS:24856 +msgid "" +":issue:`26569`: Fix :func:`pyclbr.readmodule` and " +":func:`pyclbr.readmodule_ex` to support importing packages." +msgstr "" + +#: ../../../build/NEWS:22575 ../../../build/NEWS:24859 +msgid "" +":issue:`26499`: Account for remaining Content-Length in " +"HTTPResponse.readline() and read1(). Based on patch by Silent Ghost. Also " +"document that HTTPResponse now supports these methods." +msgstr "" + +#: ../../../build/NEWS:22579 ../../../build/NEWS:24863 +msgid "" +":issue:`25320`: Handle sockets in directories unittest discovery is " +"scanning. Patch from Victor van den Elzen." +msgstr "" + +#: ../../../build/NEWS:22582 ../../../build/NEWS:24866 +msgid "" +":issue:`16181`: cookiejar.http2time() now returns None if year is higher " +"than datetime.MAXYEAR." +msgstr "" + +#: ../../../build/NEWS:22585 ../../../build/NEWS:24869 +msgid ":issue:`26513`: Fixes platform module detection of Windows Server" +msgstr "" + +#: ../../../build/NEWS:22587 ../../../build/NEWS:24871 +msgid "" +":issue:`23718`: Fixed parsing time in week 0 before Jan 1. Original patch " +"by Tamás Bence Gedai." +msgstr "" + +#: ../../../build/NEWS:22590 +msgid "" +":issue:`26323`: Add Mock.assert_called() and Mock.assert_called_once() " +"methods to unittest.mock. Patch written by Amit Saha." +msgstr "" + +#: ../../../build/NEWS:22593 ../../../build/NEWS:24874 +msgid "" +":issue:`20589`: Invoking Path.owner() and Path.group() on Windows now raise " +"NotImplementedError instead of ImportError." +msgstr "" + +#: ../../../build/NEWS:22596 ../../../build/NEWS:24877 +msgid "" +":issue:`26177`: Fixed the keys() method for Canvas and Scrollbar widgets." +msgstr "" + +#: ../../../build/NEWS:22598 +msgid "" +":issue:`15068`: Got rid of excessive buffering in fileinput. The bufsize " +"parameter is now deprecated and ignored." +msgstr "" + +#: ../../../build/NEWS:22601 +msgid "" +":issue:`19475`: Added an optional argument timespec to the datetime " +"isoformat() method to choose the precision of the time component." +msgstr "" + +#: ../../../build/NEWS:22604 ../../../build/NEWS:24882 +msgid "" +":issue:`2202`: Fix UnboundLocalError in " +"AbstractDigestAuthHandler.get_algorithm_impls. Initial patch by Mathieu " +"Dupuy." +msgstr "" + +#: ../../../build/NEWS:22608 +msgid "" +":issue:`26167`: Minimized overhead in copy.copy() and copy.deepcopy(). " +"Optimized copying and deepcopying bytearrays, NotImplemented, slices, short " +"lists, tuples, dicts, sets." +msgstr "" + +#: ../../../build/NEWS:22612 ../../../build/NEWS:24886 +msgid "" +":issue:`25718`: Fixed pickling and copying the accumulate() iterator with " +"total is None." +msgstr "" + +#: ../../../build/NEWS:22615 ../../../build/NEWS:24889 +msgid "" +":issue:`26475`: Fixed debugging output for regular expressions with the (?x)" +" flag." +msgstr "" + +#: ../../../build/NEWS:22618 +msgid ":issue:`26482`: Allowed pickling recursive dequeues." +msgstr "" + +#: ../../../build/NEWS:22620 +msgid "" +":issue:`26335`: Make mmap.write() return the number of bytes written like " +"other write methods. Patch by Jakub Stasiak." +msgstr "" + +#: ../../../build/NEWS:22623 ../../../build/NEWS:24892 +msgid "" +":issue:`26457`: Fixed the subnets() methods in IP network classes for the " +"case when resulting prefix length is equal to maximal prefix length. Based " +"on patch by Xiang Zhang." +msgstr "" + +#: ../../../build/NEWS:22627 ../../../build/NEWS:24896 +msgid "" +":issue:`26385`: Remove the file if the internal open() call in " +"NamedTemporaryFile() fails. Patch by Silent Ghost." +msgstr "" + +#: ../../../build/NEWS:22630 ../../../build/NEWS:24899 +msgid "" +":issue:`26402`: Fix XML-RPC client to retry when the server shuts down a " +"persistent connection. This was a regression related to the new " +"http.client.RemoteDisconnected exception in 3.5.0a4." +msgstr "" + +#: ../../../build/NEWS:22634 ../../../build/NEWS:24903 +msgid "" +":issue:`25913`: Leading ``<~`` is optional now in base64.a85decode() with " +"adobe=True. Patch by Swati Jaiswal." +msgstr "" + +#: ../../../build/NEWS:22637 ../../../build/NEWS:24906 +msgid "" +":issue:`26186`: Remove an invalid type check in importlib.util.LazyLoader." +msgstr "" + +#: ../../../build/NEWS:22639 +msgid "" +":issue:`26367`: importlib.__import__() raises ImportError like " +"builtins.__import__() when ``level`` is specified but without an " +"accompanying package specified." +msgstr "" + +#: ../../../build/NEWS:22643 ../../../build/NEWS:24912 +msgid "" +":issue:`26309`: In the \"socketserver\" module, shut down the request " +"(closing the connected socket) when verify_request() returns false. Patch " +"by Aviv Palivoda." +msgstr "" + +#: ../../../build/NEWS:22647 +msgid "" +":issue:`23430`: Change the socketserver module to only catch exceptions " +"raised from a request handler that are derived from Exception (instead of " +"BaseException). Therefore SystemExit and KeyboardInterrupt no longer trigger" +" the handle_error() method, and will now to stop a single-threaded server." +msgstr "" + +#: ../../../build/NEWS:22653 ../../../build/NEWS:24916 +msgid "" +":issue:`25995`: os.walk() no longer uses FDs proportional to the tree depth." +msgstr "" + +#: ../../../build/NEWS:22655 +msgid "" +":issue:`25994`: Added the close() method and the support of the context " +"manager protocol for the os.scandir() iterator." +msgstr "" + +#: ../../../build/NEWS:22658 +msgid "" +":issue:`23992`: multiprocessing: make MapResult not fail-fast upon " +"exception." +msgstr "" + +#: ../../../build/NEWS:22660 +msgid "" +":issue:`26243`: Support keyword arguments to zlib.compress(). Patch by Aviv" +" Palivoda." +msgstr "" + +#: ../../../build/NEWS:22663 ../../../build/NEWS:24918 +msgid "" +":issue:`26117`: The os.scandir() iterator now closes file descriptor not " +"only when the iteration is finished, but when it was failed with error." +msgstr "" + +#: ../../../build/NEWS:22666 +msgid "" +":issue:`25949`: __dict__ for an OrderedDict instance is now created only " +"when needed." +msgstr "" + +#: ../../../build/NEWS:22669 ../../../build/NEWS:24921 +msgid "" +":issue:`25911`: Restored support of bytes paths in os.walk() on Windows." +msgstr "" + +#: ../../../build/NEWS:22671 ../../../build/NEWS:24923 +msgid "" +":issue:`26045`: Add UTF-8 suggestion to error message when posting a non-" +"Latin-1 string with http.client." +msgstr "" + +#: ../../../build/NEWS:22674 +msgid "" +":issue:`26039`: Added zipfile.ZipInfo.from_file() and " +"zipinfo.ZipInfo.is_dir(). Patch by Thomas Kluyver." +msgstr "" + +#: ../../../build/NEWS:22677 ../../../build/NEWS:24926 +msgid "" +":issue:`12923`: Reset FancyURLopener's redirect counter even if there is an " +"exception. Based on patches by Brian Brazil and Daniel Rocco." +msgstr "" + +#: ../../../build/NEWS:22680 ../../../build/NEWS:24929 +msgid "" +":issue:`25945`: Fixed a crash when unpickle the functools.partial object " +"with wrong state. Fixed a leak in failed functools.partial constructor. " +"\"args\" and \"keywords\" attributes of functools.partial have now always " +"types tuple and dict correspondingly." +msgstr "" + +#: ../../../build/NEWS:22685 ../../../build/NEWS:24934 +msgid "" +":issue:`26202`: copy.deepcopy() now correctly copies range() objects with " +"non-atomic attributes." +msgstr "" + +#: ../../../build/NEWS:22688 ../../../build/NEWS:24937 +msgid "" +":issue:`23076`: Path.glob() now raises a ValueError if it's called with an " +"invalid pattern. Patch by Thomas Nyberg." +msgstr "" + +#: ../../../build/NEWS:22691 ../../../build/NEWS:24940 +msgid ":issue:`19883`: Fixed possible integer overflows in zipimport." +msgstr "" + +#: ../../../build/NEWS:22693 ../../../build/NEWS:24942 +msgid "" +":issue:`26227`: On Windows, getnameinfo(), gethostbyaddr() and " +"gethostbyname_ex() functions of the socket module now decode the hostname " +"from the ANSI code page rather than UTF-8." +msgstr "" + +#: ../../../build/NEWS:22697 +msgid "" +":issue:`26099`: The site module now writes an error into stderr if " +"sitecustomize module can be imported but executing the module raise an " +"ImportError. Same change for usercustomize." +msgstr "" + +#: ../../../build/NEWS:22701 ../../../build/NEWS:24946 +msgid "" +":issue:`26147`: xmlrpc now works with strings not encodable with used non-" +"UTF-8 encoding." +msgstr "" + +#: ../../../build/NEWS:22704 ../../../build/NEWS:24949 +msgid "" +":issue:`25935`: Garbage collector now breaks reference loops with " +"OrderedDict." +msgstr "" + +#: ../../../build/NEWS:22706 ../../../build/NEWS:24951 +msgid ":issue:`16620`: Fixed AttributeError in msilib.Directory.glob()." +msgstr "" + +#: ../../../build/NEWS:22708 ../../../build/NEWS:24953 +msgid "" +":issue:`26013`: Added compatibility with broken protocol 2 pickles created " +"in old Python 3 versions (3.4.3 and lower)." +msgstr "" + +#: ../../../build/NEWS:22711 +msgid ":issue:`26129`: Deprecated accepting non-integers in grp.getgrgid()." +msgstr "" + +#: ../../../build/NEWS:22713 ../../../build/NEWS:24956 +msgid ":issue:`25850`: Use cross-compilation by default for 64-bit Windows." +msgstr "" + +#: ../../../build/NEWS:22715 +msgid "" +":issue:`25822`: Add docstrings to the fields of urllib.parse results. Patch " +"contributed by Swati Jaiswal." +msgstr "" + +#: ../../../build/NEWS:22718 +msgid "" +":issue:`22642`: Convert trace module option parsing mechanism to argparse. " +"Patch contributed by SilentGhost." +msgstr "" + +#: ../../../build/NEWS:22721 ../../../build/NEWS:24960 +msgid "" +":issue:`24705`: Fix sysconfig._parse_makefile not expanding ${} vars " +"appearing before $() vars." +msgstr "" + +#: ../../../build/NEWS:22724 +msgid ":issue:`26069`: Remove the deprecated apis in the trace module." +msgstr "" + +#: ../../../build/NEWS:22726 ../../../build/NEWS:24963 +msgid "" +":issue:`22138`: Fix mock.patch behavior when patching descriptors. Restore " +"original values after patching. Patch contributed by Sean McCully." +msgstr "" + +#: ../../../build/NEWS:22729 ../../../build/NEWS:24966 +msgid "" +":issue:`25672`: In the ssl module, enable the SSL_MODE_RELEASE_BUFFERS mode " +"option if it is safe to do so." +msgstr "" + +#: ../../../build/NEWS:22732 ../../../build/NEWS:24969 +msgid "" +":issue:`26012`: Don't traverse into symlinks for ``**`` pattern in " +"pathlib.Path.[r]glob()." +msgstr "" + +#: ../../../build/NEWS:22735 ../../../build/NEWS:24972 +msgid "" +":issue:`24120`: Ignore PermissionError when traversing a tree with " +"pathlib.Path.[r]glob(). Patch by Ulrich Petri." +msgstr "" + +#: ../../../build/NEWS:22738 +msgid "" +":issue:`21815`: Accept ] characters in the data portion of imap responses, " +"in order to handle the flags with square brackets accepted and produced by " +"servers such as gmail." +msgstr "" + +#: ../../../build/NEWS:22742 ../../../build/NEWS:24975 +msgid "" +":issue:`25447`: fileinput now uses sys.stdin as-is if it does not have a " +"buffer attribute (restores backward compatibility)." +msgstr "" + +#: ../../../build/NEWS:22745 +msgid "" +":issue:`25971`: Optimized creating Fractions from floats by 2 times and from" +" Decimals by 3 times." +msgstr "" + +#: ../../../build/NEWS:22748 +msgid "" +":issue:`25802`: Document as deprecated the remaining implementations of " +"importlib.abc.Loader.load_module()." +msgstr "" + +#: ../../../build/NEWS:22751 +msgid ":issue:`25928`: Add Decimal.as_integer_ratio()." +msgstr "" + +#: ../../../build/NEWS:22753 ../../../build/NEWS:24978 +msgid "" +":issue:`25447`: Copying the lru_cache() wrapper object now always works, " +"independently from the type of the wrapped object (by returning the original" +" object unchanged)." +msgstr "" + +#: ../../../build/NEWS:22757 +msgid "" +":issue:`25768`: Have the functions in compileall return booleans instead of " +"ints and add proper documentation and tests for the return values." +msgstr "" + +#: ../../../build/NEWS:22760 ../../../build/NEWS:24982 +msgid "" +":issue:`24103`: Fixed possible use after free in ElementTree.XMLPullParser." +msgstr "" + +#: ../../../build/NEWS:22762 ../../../build/NEWS:24984 +msgid "" +":issue:`25860`: os.fwalk() no longer skips remaining directories when error " +"occurs. Original patch by Samson Lee." +msgstr "" + +#: ../../../build/NEWS:22765 ../../../build/NEWS:24987 +msgid ":issue:`25914`: Fixed and simplified OrderedDict.__sizeof__." +msgstr "" + +#: ../../../build/NEWS:22767 +msgid "" +":issue:`25869`: Optimized deepcopying ElementTree; it is now 20 times " +"faster." +msgstr "" + +#: ../../../build/NEWS:22769 +msgid "" +":issue:`25873`: Optimized iterating ElementTree. Iterating elements " +"Element.iter() is now 40% faster, iterating text Element.itertext() is now " +"up to 2.5 times faster." +msgstr "" + +#: ../../../build/NEWS:22773 ../../../build/NEWS:24989 +msgid "" +":issue:`25902`: Fixed various refcount issues in ElementTree iteration." +msgstr "" + +#: ../../../build/NEWS:22775 +msgid "" +":issue:`22227`: The TarFile iterator is reimplemented using generator. This " +"implementation is simpler that using class." +msgstr "" + +#: ../../../build/NEWS:22778 +msgid "" +":issue:`25638`: Optimized ElementTree.iterparse(); it is now 2x faster. " +"Optimized ElementTree parsing; it is now 10% faster." +msgstr "" + +#: ../../../build/NEWS:22781 +msgid ":issue:`25761`: Improved detecting errors in broken pickle data." +msgstr "" + +#: ../../../build/NEWS:22783 ../../../build/NEWS:24991 +msgid "" +":issue:`25717`: Restore the previous behaviour of tolerating most fstat() " +"errors when opening files. This was a regression in 3.5a1, and stopped " +"anonymous temporary files from working in special cases." +msgstr "" + +#: ../../../build/NEWS:22787 ../../../build/NEWS:24995 +msgid "" +":issue:`24903`: Fix regression in number of arguments compileall accepts " +"when '-d' is specified. The check on the number of arguments has been " +"dropped completely as it never worked correctly anyway." +msgstr "" + +#: ../../../build/NEWS:22791 ../../../build/NEWS:24999 +msgid "" +":issue:`25764`: In the subprocess module, preserve any exception caused by " +"fork() failure when preexec_fn is used." +msgstr "" + +#: ../../../build/NEWS:22794 +msgid "" +":issue:`25771`: Tweak the exception message for " +"importlib.util.resolve_name() when 'package' isn't specified but necessary." +msgstr "" + +#: ../../../build/NEWS:22797 ../../../build/NEWS:25002 +msgid "" +":issue:`6478`: _strptime's regexp cache now is reset after changing timezone" +" with time.tzset()." +msgstr "" + +#: ../../../build/NEWS:22800 ../../../build/NEWS:25005 +msgid "" +":issue:`14285`: When executing a package with the \"python -m package\" " +"option, and package initialization fails, a proper traceback is now " +"reported. The \"runpy\" module now lets exceptions from package " +"initialization pass back to the caller, rather than raising ImportError." +msgstr "" + +#: ../../../build/NEWS:22805 ../../../build/NEWS:25010 +msgid "" +":issue:`19771`: Also in runpy and the \"-m\" option, omit the irrelevant " +"message \". . . is a package and cannot be directly executed\" if the " +"package could not even be initialized (e.g. due to a bad ``*.pyc`` file)." +msgstr "" + +#: ../../../build/NEWS:22809 ../../../build/NEWS:25014 +msgid "" +":issue:`25177`: Fixed problem with the mean of very small and very large " +"numbers. As a side effect, statistics.mean and statistics.variance should be" +" significantly faster." +msgstr "" + +#: ../../../build/NEWS:22813 ../../../build/NEWS:25018 +msgid "" +":issue:`25718`: Fixed copying object with state with boolean value is false." +msgstr "" + +#: ../../../build/NEWS:22815 ../../../build/NEWS:25020 +msgid "" +":issue:`10131`: Fixed deep copying of minidom documents. Based on patch by " +"Marian Ganisin." +msgstr "" + +#: ../../../build/NEWS:22818 +msgid "" +":issue:`7990`: dir() on ElementTree.Element now lists properties: \"tag\", " +"\"text\", \"tail\" and \"attrib\". Original patch by Santoso Wijaya." +msgstr "" + +#: ../../../build/NEWS:22821 ../../../build/NEWS:25023 +msgid "" +":issue:`25725`: Fixed a reference leak in pickle.loads() when unpickling " +"invalid data including tuple instructions." +msgstr "" + +#: ../../../build/NEWS:22824 ../../../build/NEWS:25026 +msgid "" +":issue:`25663`: In the Readline completer, avoid listing duplicate global " +"names, and search the global namespace before searching builtins." +msgstr "" + +#: ../../../build/NEWS:22827 ../../../build/NEWS:25029 +msgid "" +":issue:`25688`: Fixed file leak in ElementTree.iterparse() raising an error." +msgstr "" + +#: ../../../build/NEWS:22829 ../../../build/NEWS:25031 +msgid "" +":issue:`23914`: Fixed SystemError raised by unpickler on broken pickle data." +msgstr "" + +#: ../../../build/NEWS:22831 ../../../build/NEWS:25033 +msgid "" +":issue:`25691`: Fixed crash on deleting ElementTree.Element attributes." +msgstr "" + +#: ../../../build/NEWS:22833 ../../../build/NEWS:25035 +msgid "" +":issue:`25624`: ZipFile now always writes a ZIP_STORED header for directory " +"entries. Patch by Dingyuan Wang." +msgstr "" + +#: ../../../build/NEWS:22836 ../../../build/NEWS:25351 +msgid "" +":issue:`25626`: Change three zlib functions to accept sizes that fit in " +"Py_ssize_t, but internally cap those sizes to UINT_MAX. This resolves a " +"regression in 3.5 where GzipFile.read() failed to read chunks larger than 2 " +"or 4 GiB. The change affects the zlib.Decompress.decompress() max_length " +"parameter, the zlib.decompress() bufsize parameter, and the " +"zlib.Decompress.flush() length parameter." +msgstr "" + +#: ../../../build/NEWS:22843 ../../../build/NEWS:25358 +msgid "" +":issue:`25583`: Avoid incorrect errors raised by os.makedirs(exist_ok=True) " +"when the OS gives priority to errors such as EACCES over EEXIST." +msgstr "" + +#: ../../../build/NEWS:22846 ../../../build/NEWS:25361 +msgid ":issue:`25593`: Change semantics of EventLoop.stop() in asyncio." +msgstr "" + +#: ../../../build/NEWS:22848 ../../../build/NEWS:25363 +msgid "" +":issue:`6973`: When we know a subprocess.Popen process has died, do not " +"allow the send_signal(), terminate(), or kill() methods to do anything as " +"they could potentially signal a different process." +msgstr "" + +#: ../../../build/NEWS:22852 +msgid "" +":issue:`23883`: Added missing APIs to __all__ to match the documented APIs " +"for the following modules: calendar, csv, enum, fileinput, ftplib, logging, " +"optparse, tarfile, threading and wave. Also added a " +"test.support.check__all__() helper. Patches by Jacek Kołodziej, Mauro S. M. " +"Rodrigues and Joel Taddei." +msgstr "" + +#: ../../../build/NEWS:22858 +msgid "" +":issue:`25590`: In the Readline completer, only call getattr() once per " +"attribute. Also complete names of attributes such as properties and slots " +"which are listed by dir() but not yet created on an instance." +msgstr "" + +#: ../../../build/NEWS:22862 ../../../build/NEWS:25370 +msgid "" +":issue:`25498`: Fix a crash when garbage-collecting ctypes objects created " +"by wrapping a memoryview. This was a regression made in 3.5a1. Based on " +"patch by Eryksun." +msgstr "" + +#: ../../../build/NEWS:22866 ../../../build/NEWS:25374 +msgid ":issue:`25584`: Added \"escape\" to the __all__ list in the glob module." +msgstr "" + +#: ../../../build/NEWS:22868 ../../../build/NEWS:25376 +msgid "" +":issue:`25584`: Fixed recursive glob() with patterns starting with ``**``." +msgstr "" + +#: ../../../build/NEWS:22870 ../../../build/NEWS:25378 +msgid ":issue:`25446`: Fix regression in smtplib's AUTH LOGIN support." +msgstr "" + +#: ../../../build/NEWS:22872 ../../../build/NEWS:25380 +msgid "" +":issue:`18010`: Fix the pydoc web server's module search function to handle " +"exceptions from importing packages." +msgstr "" + +#: ../../../build/NEWS:22875 ../../../build/NEWS:25383 +msgid "" +":issue:`25554`: Got rid of circular references in regular expression " +"parsing." +msgstr "" + +#: ../../../build/NEWS:22877 +msgid "" +":issue:`18973`: Command-line interface of the calendar module now uses " +"argparse instead of optparse." +msgstr "" + +#: ../../../build/NEWS:22880 ../../../build/NEWS:25385 +msgid "" +":issue:`25510`: fileinput.FileInput.readline() now returns b'' instead of ''" +" at the end if the FileInput was opened with binary mode. Patch by Ryosuke " +"Ito." +msgstr "" + +#: ../../../build/NEWS:22884 ../../../build/NEWS:25389 +msgid "" +":issue:`25503`: Fixed inspect.getdoc() for inherited docstrings of " +"properties. Original patch by John Mark Vandenberg." +msgstr "" + +#: ../../../build/NEWS:22887 ../../../build/NEWS:25392 +msgid "" +":issue:`25515`: Always use os.urandom as a source of randomness in " +"uuid.uuid4." +msgstr "" + +#: ../../../build/NEWS:22889 ../../../build/NEWS:25394 +msgid "" +":issue:`21827`: Fixed textwrap.dedent() for the case when largest common " +"whitespace is a substring of smallest leading whitespace. Based on patch by " +"Robert Li." +msgstr "" + +#: ../../../build/NEWS:22893 ../../../build/NEWS:25398 +msgid "" +":issue:`25447`: The lru_cache() wrapper objects now can be copied and " +"pickled (by returning the original object unchanged)." +msgstr "" + +#: ../../../build/NEWS:22896 ../../../build/NEWS:25401 +msgid ":issue:`25390`: typing: Don't crash on Union[str, Pattern]." +msgstr "" + +#: ../../../build/NEWS:22898 ../../../build/NEWS:25403 +msgid "" +":issue:`25441`: asyncio: Raise error from drain() when socket is closed." +msgstr "" + +#: ../../../build/NEWS:22900 ../../../build/NEWS:25405 +msgid "" +":issue:`25410`: Cleaned up and fixed minor bugs in C implementation of " +"OrderedDict." +msgstr "" + +#: ../../../build/NEWS:22903 ../../../build/NEWS:25408 +msgid "" +":issue:`25411`: Improved Unicode support in SMTPHandler through better use " +"of the email package. Thanks to user simon04 for the patch." +msgstr "" + +#: ../../../build/NEWS:22906 +msgid "" +"Move the imp module from a PendingDeprecationWarning to DeprecationWarning." +msgstr "" + +#: ../../../build/NEWS:22909 ../../../build/NEWS:25411 +msgid "" +":issue:`25407`: Remove mentions of the formatter module being removed in " +"Python 3.6." +msgstr "" + +#: ../../../build/NEWS:22912 ../../../build/NEWS:25414 +msgid "" +":issue:`25406`: Fixed a bug in C implementation of OrderedDict.move_to_end()" +" that caused segmentation fault or hang in iterating after moving several " +"items to the start of ordered dict." +msgstr "" + +#: ../../../build/NEWS:22916 +msgid "" +":issue:`25382`: pickletools.dis() now outputs implicit memo index for the " +"MEMOIZE opcode." +msgstr "" + +#: ../../../build/NEWS:22919 +msgid "" +":issue:`25357`: Add an optional newline parameter to binascii.b2a_base64(). " +"base64.b64encode() uses it to avoid a memory copy." +msgstr "" + +#: ../../../build/NEWS:22922 +msgid "" +":issue:`24164`: Objects that need calling ``__new__`` with keyword " +"arguments, can now be pickled using pickle protocols older than protocol " +"version 4." +msgstr "" + +#: ../../../build/NEWS:22925 ../../../build/NEWS:25418 +msgid ":issue:`25364`: zipfile now works in threads disabled builds." +msgstr "" + +#: ../../../build/NEWS:22927 ../../../build/NEWS:25420 +msgid "" +":issue:`25328`: smtpd's SMTPChannel now correctly raises a ValueError if " +"both decode_data and enable_SMTPUTF8 are set to true." +msgstr "" + +#: ../../../build/NEWS:22930 +msgid "" +":issue:`16099`: RobotFileParser now supports Crawl-delay and Request-rate " +"extensions. Patch by Nikolay Bogoychev." +msgstr "" + +#: ../../../build/NEWS:22933 ../../../build/NEWS:25423 +msgid "" +":issue:`25316`: distutils raises OSError instead of DistutilsPlatformError " +"when MSVC is not installed." +msgstr "" + +#: ../../../build/NEWS:22936 ../../../build/NEWS:25426 +msgid "" +":issue:`25380`: Fixed protocol for the STACK_GLOBAL opcode in " +"pickletools.opcodes." +msgstr "" + +#: ../../../build/NEWS:22939 ../../../build/NEWS:25429 +msgid "" +":issue:`23972`: Updates asyncio datagram create method allowing reuseport " +"and reuseaddr socket options to be set prior to binding the socket. " +"Mirroring the existing asyncio create_server method the reuseaddr option for" +" datagram sockets defaults to True if the O/S is 'posix' (except if the " +"platform is Cygwin). Patch by Chris Laws." +msgstr "" + +#: ../../../build/NEWS:22945 ../../../build/NEWS:25435 +msgid "" +":issue:`25304`: Add asyncio.run_coroutine_threadsafe(). This lets you " +"submit a coroutine to a loop from another thread, returning a " +"concurrent.futures.Future. By Vincent Michel." +msgstr "" + +#: ../../../build/NEWS:22949 ../../../build/NEWS:25439 +msgid "" +":issue:`25232`: Fix CGIRequestHandler to split the query from the URL at the" +" first question mark (?) rather than the last. Patch from Xiang Zhang." +msgstr "" + +#: ../../../build/NEWS:22952 ../../../build/NEWS:25442 +msgid "" +":issue:`24657`: Prevent CGIRequestHandler from collapsing slashes in the " +"query part of the URL as if it were a path. Patch from Xiang Zhang." +msgstr "" + +#: ../../../build/NEWS:22955 +msgid "" +":issue:`25287`: Don't add crypt.METHOD_CRYPT to crypt.methods if it's not " +"supported. Check if it is supported, it may not be supported on OpenBSD for " +"example." +msgstr "" + +#: ../../../build/NEWS:22959 ../../../build/NEWS:25470 +msgid "" +":issue:`23600`: Default implementation of tzinfo.fromutc() was returning " +"wrong results in some cases." +msgstr "" + +#: ../../../build/NEWS:22962 ../../../build/NEWS:25467 +msgid "" +":issue:`25203`: Failed readline.set_completer_delims() no longer left the " +"module in inconsistent state." +msgstr "" + +#: ../../../build/NEWS:22965 +msgid "" +":issue:`25011`: rlcompleter now omits private and special attribute names " +"unless the prefix starts with underscores." +msgstr "" + +#: ../../../build/NEWS:22968 +msgid "" +":issue:`25209`: rlcompleter now can add a space or a colon after completed " +"keyword." +msgstr "" + +#: ../../../build/NEWS:22971 +msgid ":issue:`22241`: timezone.utc name is now plain 'UTC', not 'UTC-00:00'." +msgstr "" + +#: ../../../build/NEWS:22973 +msgid "" +":issue:`23517`: fromtimestamp() and utcfromtimestamp() methods of " +"datetime.datetime now round microseconds to nearest with ties going to " +"nearest even integer (ROUND_HALF_EVEN), as round(float), instead of rounding" +" towards -Infinity (ROUND_FLOOR)." +msgstr "" + +#: ../../../build/NEWS:22978 +msgid "" +":issue:`23552`: Timeit now warns when there is substantial (4x) variance " +"between best and worst times. Patch from Serhiy Storchaka." +msgstr "" + +#: ../../../build/NEWS:22981 +msgid ":issue:`24633`: site-packages/README -> README.txt." +msgstr "" + +#: ../../../build/NEWS:22983 +msgid "" +":issue:`24879`: help() and pydoc can now list named tuple fields in the " +"order they were defined rather than alphabetically. The ordering is " +"determined by the _fields attribute if present." +msgstr "" + +#: ../../../build/NEWS:22987 +msgid "" +":issue:`24874`: Improve speed of itertools.cycle() and make its pickle more " +"compact." +msgstr "" + +#: ../../../build/NEWS:22990 +msgid "" +"Fix crash in itertools.cycle.__setstate__() when the first argument wasn't a" +" list." +msgstr "" + +#: ../../../build/NEWS:22993 +msgid "" +":issue:`20059`: urllib.parse raises ValueError on all invalid ports. Patch " +"by Martin Panter." +msgstr "" + +#: ../../../build/NEWS:22996 +msgid "" +":issue:`24360`: Improve __repr__ of argparse.Namespace() for invalid " +"identifiers. Patch by Matthias Bussonnier." +msgstr "" + +#: ../../../build/NEWS:22999 +msgid "" +":issue:`23426`: run_setup was broken in distutils. Patch from Alexander " +"Belopolsky." +msgstr "" + +#: ../../../build/NEWS:23002 +msgid "" +":issue:`13938`: 2to3 converts StringTypes to a tuple. Patch from Mark " +"Hammond." +msgstr "" + +#: ../../../build/NEWS:23004 +msgid "" +":issue:`2091`: open() accepted a 'U' mode string containing '+', but 'U' can" +" only be used with 'r'. Patch from Jeff Balogh and John O'Connor." +msgstr "" + +#: ../../../build/NEWS:23007 +msgid "" +":issue:`8585`: improved tests for zipimporter2. Patch from Mark Lawrence." +msgstr "" + +#: ../../../build/NEWS:23009 ../../../build/NEWS:26012 +msgid "" +":issue:`18622`: unittest.mock.mock_open().reset_mock would recurse " +"infinitely. Patch from Nicola Palumbo and Laurent De Buyst." +msgstr "" + +#: ../../../build/NEWS:23012 +msgid "" +":issue:`24426`: Fast searching optimization in regular expressions now works" +" for patterns that starts with capturing groups. Fast searching " +"optimization now can't be disabled at compile time." +msgstr "" + +#: ../../../build/NEWS:23016 ../../../build/NEWS:26015 +msgid "" +":issue:`23661`: unittest.mock side_effects can now be exceptions again. This" +" was a regression vs Python 3.4. Patch from Ignacio Rossi" +msgstr "" + +#: ../../../build/NEWS:23019 +msgid ":issue:`13248`: Remove deprecated inspect.getmoduleinfo function." +msgstr "" + +#: ../../../build/NEWS:23021 ../../../build/NEWS:25544 +msgid ":issue:`25578`: Fix (another) memory leak in SSLSocket.getpeercer()." +msgstr "" + +#: ../../../build/NEWS:23023 ../../../build/NEWS:25546 +msgid "" +":issue:`25530`: Disable the vulnerable SSLv3 protocol by default when " +"creating ssl.SSLContext." +msgstr "" + +#: ../../../build/NEWS:23026 ../../../build/NEWS:25549 +msgid ":issue:`25569`: Fix memory leak in SSLSocket.getpeercert()." +msgstr "" + +#: ../../../build/NEWS:23028 ../../../build/NEWS:25551 +msgid "" +":issue:`25471`: Sockets returned from accept() shouldn't appear to be " +"nonblocking." +msgstr "" + +#: ../../../build/NEWS:23031 ../../../build/NEWS:25554 +msgid "" +":issue:`25319`: When threading.Event is reinitialized, the underlying " +"condition should use a regular lock rather than a recursive lock." +msgstr "" + +#: ../../../build/NEWS:23034 ../../../build/NEWS:25038 +msgid "" +"Skip getaddrinfo if host is already resolved. Patch by A. Jesse Jiryu Davis." +msgstr "" + +#: ../../../build/NEWS:23037 ../../../build/NEWS:25041 +msgid "" +":issue:`26050`: Add asyncio.StreamReader.readuntil() method. Patch by Марк " +"Коренберг." +msgstr "" + +#: ../../../build/NEWS:23040 ../../../build/NEWS:25044 +msgid "" +":issue:`25924`: Avoid unnecessary serialization of getaddrinfo(3) calls on " +"OS X versions 10.5 or higher. Original patch by A. Jesse Jiryu Davis." +msgstr "" + +#: ../../../build/NEWS:23043 ../../../build/NEWS:25047 +msgid "" +":issue:`26406`: Avoid unnecessary serialization of getaddrinfo(3) calls on " +"current versions of OpenBSD and NetBSD. Patch by A. Jesse Jiryu Davis." +msgstr "" + +#: ../../../build/NEWS:23046 ../../../build/NEWS:25050 +msgid "" +":issue:`26848`: Fix asyncio/subprocess.communicate() to handle empty input. " +"Patch by Jack O'Connor." +msgstr "" + +#: ../../../build/NEWS:23049 ../../../build/NEWS:25053 +msgid ":issue:`27040`: Add loop.get_exception_handler method" +msgstr "" + +#: ../../../build/NEWS:23051 ../../../build/NEWS:25055 +msgid ":issue:`27041`: asyncio: Add loop.create_future method" +msgstr "" + +#: ../../../build/NEWS:23056 ../../../build/NEWS:25103 +msgid "" +":issue:`20640`: Add tests for idlelib.configHelpSourceEdit. Patch by " +"Saimadhav Heblikar." +msgstr "" + +#: ../../../build/NEWS:23059 ../../../build/NEWS:25106 +msgid "" +"In the 'IDLE-console differences' section of the IDLE doc, clarify how " +"running with IDLE affects sys.modules and the standard streams." +msgstr "" + +#: ../../../build/NEWS:23062 ../../../build/NEWS:25109 +msgid "" +":issue:`25507`: fix incorrect change in IOBinding that prevented printing. " +"Augment IOBinding htest to include all major IOBinding functions." +msgstr "" + +#: ../../../build/NEWS:23065 ../../../build/NEWS:25112 +msgid "" +":issue:`25905`: Revert unwanted conversion of ' to ’ RIGHT SINGLE QUOTATION " +"MARK in README.txt and open this and NEWS.txt with 'ascii'. Re-encode " +"CREDITS.txt to utf-8 and open it with 'utf-8'." +msgstr "" + +#: ../../../build/NEWS:23069 ../../../build/NEWS:25583 +msgid "" +":issue:`15348`: Stop the debugger engine (normally in a user process) before" +" closing the debugger window (running in the IDLE process). This prevents " +"the RuntimeErrors that were being caught and ignored." +msgstr "" + +#: ../../../build/NEWS:23073 ../../../build/NEWS:25587 +msgid "" +":issue:`24455`: Prevent IDLE from hanging when a) closing the shell while " +"the debugger is active (15347); b) closing the debugger with the [X] button " +"(15348); and c) activating the debugger when already active (24455). The " +"patch by Mark Roseman does this by making two changes. 1. Suspend and resume" +" the gui.interaction method with the tcl vwait mechanism intended for this " +"purpose (instead of root.mainloop & .quit). 2. In gui.run, allow any " +"existing interaction to terminate first." +msgstr "" + +#: ../../../build/NEWS:23081 ../../../build/NEWS:25595 +msgid "" +"Change 'The program' to 'Your program' in an IDLE 'kill program?' message to" +" make it clearer that the program referred to is the currently running user " +"program, not IDLE itself." +msgstr "" + +#: ../../../build/NEWS:23085 ../../../build/NEWS:25599 +msgid "" +":issue:`24750`: Improve the appearance of the IDLE editor window status bar." +" Patch by Mark Roseman." +msgstr "" + +#: ../../../build/NEWS:23088 ../../../build/NEWS:25602 +msgid "" +":issue:`25313`: Change the handling of new built-in text color themes to " +"better address the compatibility problem introduced by the addition of IDLE " +"Dark. Consistently use the revised idleConf.CurrentTheme everywhere in " +"idlelib." +msgstr "" + +#: ../../../build/NEWS:23092 ../../../build/NEWS:25606 +msgid "" +":issue:`24782`: Extension configuration is now a tab in the IDLE Preferences" +" dialog rather than a separate dialog. The former tabs are now a sorted " +"list. Patch by Mark Roseman." +msgstr "" + +#: ../../../build/NEWS:23096 ../../../build/NEWS:25610 +msgid "" +":issue:`22726`: Re-activate the config dialog help button with some content " +"about the other buttons and the new IDLE Dark theme." +msgstr "" + +#: ../../../build/NEWS:23099 ../../../build/NEWS:25613 +msgid "" +":issue:`24820`: IDLE now has an 'IDLE Dark' built-in text color theme. It is" +" more or less IDLE Classic inverted, with a cobalt blue background. Strings," +" comments, keywords, ... are still green, red, orange, ... . To use it with " +"IDLEs released before November 2015, hit the 'Save as New Custom Theme' " +"button and enter a new name, such as 'Custom Dark'. The custom theme will " +"work with any IDLE release, and can be modified." +msgstr "" + +#: ../../../build/NEWS:23106 ../../../build/NEWS:25620 +msgid "" +":issue:`25224`: README.txt is now an idlelib index for IDLE developers and " +"curious users. The previous user content is now in the IDLE doc chapter. " +"'IDLE' now means 'Integrated Development and Learning Environment'." +msgstr "" + +#: ../../../build/NEWS:23110 ../../../build/NEWS:25624 +msgid "" +":issue:`24820`: Users can now set breakpoint colors in Settings -> Custom " +"Highlighting. Original patch by Mark Roseman." +msgstr "" + +#: ../../../build/NEWS:23113 ../../../build/NEWS:25627 +msgid "" +":issue:`24972`: Inactive selection background now matches active selection " +"background, as configured by users, on all systems. Found items are now " +"always highlighted on Windows. Initial patch by Mark Roseman." +msgstr "" + +#: ../../../build/NEWS:23117 ../../../build/NEWS:25631 +msgid "" +":issue:`24570`: Idle: make calltip and completion boxes appear on Macs " +"affected by a tk regression. Initial patch by Mark Roseman." +msgstr "" + +#: ../../../build/NEWS:23120 ../../../build/NEWS:25634 +msgid "" +":issue:`24988`: Idle ScrolledList context menus (used in debugger) now work " +"on Mac Aqua. Patch by Mark Roseman." +msgstr "" + +#: ../../../build/NEWS:23123 ../../../build/NEWS:25637 +msgid "" +":issue:`24801`: Make right-click for context menu work on Mac Aqua. Patch by" +" Mark Roseman." +msgstr "" + +#: ../../../build/NEWS:23126 ../../../build/NEWS:25640 +msgid "" +":issue:`25173`: Associate tkinter messageboxes with a specific widget. For " +"Mac OSX, make them a 'sheet'. Patch by Mark Roseman." +msgstr "" + +#: ../../../build/NEWS:23129 ../../../build/NEWS:25643 +msgid "" +":issue:`25198`: Enhance the initial html viewer now used for Idle Help. " +"Properly indent fixed-pitch text (patch by Mark Roseman). Give code snippet " +"a very Sphinx-like light blueish-gray background. Re-use initial width and " +"height set by users for shell and editor. When the Table of Contents (TOC) " +"menu is used, put the section header at the top of the screen." +msgstr "" + +#: ../../../build/NEWS:23136 ../../../build/NEWS:25650 +msgid ":issue:`25225`: Condense and rewrite Idle doc section on text colors." +msgstr "" + +#: ../../../build/NEWS:23138 ../../../build/NEWS:25652 +msgid "" +":issue:`21995`: Explain some differences between IDLE and console Python." +msgstr "" + +#: ../../../build/NEWS:23140 ../../../build/NEWS:25654 +msgid "" +":issue:`22820`: Explain need for *print* when running file from Idle editor." +msgstr "" + +#: ../../../build/NEWS:23142 ../../../build/NEWS:25656 +msgid "" +":issue:`25224`: Doc: augment Idle feature list and no-subprocess section." +msgstr "" + +#: ../../../build/NEWS:23144 ../../../build/NEWS:25658 +msgid "" +":issue:`25219`: Update doc for Idle command line options. Some were missing " +"and notes were not correct." +msgstr "" + +#: ../../../build/NEWS:23147 ../../../build/NEWS:25661 +msgid "" +":issue:`24861`: Most of idlelib is private and subject to change. Use " +"idleib.idle.* to start Idle. See idlelib.__init__.__doc__." +msgstr "" + +#: ../../../build/NEWS:23150 ../../../build/NEWS:25664 +msgid "" +":issue:`25199`: Idle: add synchronization comments for future maintainers." +msgstr "" + +#: ../../../build/NEWS:23152 +msgid "" +":issue:`16893`: Replace help.txt with help.html for Idle doc display. The " +"new idlelib/help.html is rstripped Doc/build/html/library/idle.html. It " +"looks better than help.txt and will better document Idle as released. The " +"tkinter html viewer that works for this file was written by Rose Roseman. " +"The now unused EditorWindow.HelpDialog class and helt.txt file are " +"deprecated." +msgstr "" + +#: ../../../build/NEWS:23159 ../../../build/NEWS:25673 +msgid "" +":issue:`24199`: Deprecate unused idlelib.idlever with possible removal in " +"3.6." +msgstr "" + +#: ../../../build/NEWS:23161 ../../../build/NEWS:25675 +msgid "" +":issue:`24790`: Remove extraneous code (which also create 2 & 3 conflicts)." +msgstr "" + +#: ../../../build/NEWS:23166 ../../../build/NEWS:25124 +msgid "" +":issue:`26736`: Used HTTPS for external links in the documentation if " +"possible." +msgstr "" + +#: ../../../build/NEWS:23168 ../../../build/NEWS:25126 +msgid "" +":issue:`6953`: Rework the Readline module documentation to group related " +"functions together, and add more details such as what underlying Readline " +"functions and variables are accessed." +msgstr "" + +#: ../../../build/NEWS:23172 ../../../build/NEWS:25130 +msgid "" +":issue:`23606`: Adds note to ctypes documentation regarding cdll.msvcrt." +msgstr "" + +#: ../../../build/NEWS:23174 ../../../build/NEWS:25690 +msgid "" +":issue:`24952`: Clarify the default size argument of stack_size() in the " +"\"threading\" and \"_thread\" modules. Patch from Mattip." +msgstr "" + +#: ../../../build/NEWS:23177 ../../../build/NEWS:25135 +msgid "" +":issue:`26014`: Update 3.x packaging documentation: * \"See also\" links to " +"the new docs are now provided in the legacy pages * links to setuptools " +"documentation have been updated" +msgstr "" + +#: ../../../build/NEWS:23184 ../../../build/NEWS:25142 +msgid "" +":issue:`21916`: Added tests for the turtle module. Patch by ingrid, Gregory" +" Loyse and Jelle Zijlstra." +msgstr "" + +#: ../../../build/NEWS:23187 +msgid "" +":issue:`26295`: When using \"python3 -m test --testdir=TESTDIR\", regrtest " +"doesn't add \"test.\" prefix to test module names." +msgstr "" + +#: ../../../build/NEWS:23190 ../../../build/NEWS:25145 +msgid "" +":issue:`26523`: The multiprocessing thread pool (multiprocessing.dummy.Pool)" +" was untested." +msgstr "" + +#: ../../../build/NEWS:23193 ../../../build/NEWS:25148 +msgid "" +":issue:`26015`: Added new tests for pickling iterators of mutable sequences." +msgstr "" + +#: ../../../build/NEWS:23195 ../../../build/NEWS:25150 +msgid "" +":issue:`26325`: Added test.support.check_no_resource_warning() to check that" +" no ResourceWarning is emitted." +msgstr "" + +#: ../../../build/NEWS:23198 +msgid "" +":issue:`25940`: Changed test_ssl to use its internal local server more. " +"This avoids relying on svn.python.org, which recently changed root " +"certificate." +msgstr "" + +#: ../../../build/NEWS:23201 ../../../build/NEWS:25156 +msgid "" +":issue:`25616`: Tests for OrderedDict are extracted from test_collections " +"into separate file test_ordered_dict." +msgstr "" + +#: ../../../build/NEWS:23204 ../../../build/NEWS:25704 +msgid ":issue:`25449`: Added tests for OrderedDict subclasses." +msgstr "" + +#: ../../../build/NEWS:23206 +msgid "" +":issue:`25188`: Add -P/--pgo to test.regrtest to suppress error output when " +"running the test suite for the purposes of a PGO build. Initial patch by " +"Alecsandru Patrascu." +msgstr "" + +#: ../../../build/NEWS:23210 +msgid "" +":issue:`22806`: Add ``python -m test --list-tests`` command to list tests." +msgstr "" + +#: ../../../build/NEWS:23212 +msgid "" +":issue:`18174`: ``python -m test --huntrleaks ...`` now also checks for leak" +" of file descriptors. Patch written by Richard Oudkerk." +msgstr "" + +#: ../../../build/NEWS:23215 +msgid "" +":issue:`25260`: Fix ``python -m test --coverage`` on Windows. Remove the " +"list of ignored directories." +msgstr "" + +#: ../../../build/NEWS:23218 ../../../build/NEWS:25711 +msgid "" +"``PCbuild\\rt.bat`` now accepts an unlimited number of arguments to pass " +"along to regrtest.py. Previously there was a limit of 9." +msgstr "" + +#: ../../../build/NEWS:23221 ../../../build/NEWS:25159 +msgid "" +":issue:`26583`: Skip test_timestamp_overflow in test_import if bytecode " +"files cannot be written." +msgstr "" + +#: ../../../build/NEWS:23227 +msgid "" +":issue:`21277`: Don't try to link _ctypes with a ffi_convenience library." +msgstr "" + +#: ../../../build/NEWS:23229 ../../../build/NEWS:25165 +msgid "" +":issue:`26884`: Fix linking extension modules for cross builds. Patch by " +"Xavier de Gaye." +msgstr "" + +#: ../../../build/NEWS:23232 +msgid "" +":issue:`26932`: Fixed support of RTLD_* constants defined as enum values, " +"not via macros (in particular on Android). Patch by Chi Hsuan Yen." +msgstr "" + +#: ../../../build/NEWS:23235 ../../../build/NEWS:25168 +msgid "" +":issue:`22359`: Disable the rules for running _freeze_importlib and pgen " +"when cross-compiling. The output of these programs is normally saved with " +"the source code anyway, and is still regenerated when doing a native build. " +"Patch by Xavier de Gaye." +msgstr "" + +#: ../../../build/NEWS:23240 +msgid "" +":issue:`21668`: Link audioop, _datetime, _ctypes_test modules to libm, " +"except on Mac OS X. Patch written by Chi Hsuan Yen." +msgstr "" + +#: ../../../build/NEWS:23243 ../../../build/NEWS:25179 +msgid "" +":issue:`25702`: A --with-lto configure option has been added that will " +"enable link time optimizations at build time during a make profile-opt. Some" +" compilers and toolchains are known to not produce stable code when using " +"LTO, be sure to test things thoroughly before relying on it. It can provide " +"a few % speed up over profile-opt alone." +msgstr "" + +#: ../../../build/NEWS:23249 ../../../build/NEWS:25185 +msgid "" +":issue:`26624`: Adds validation of ucrtbase[d].dll version with warning for " +"old versions." +msgstr "" + +#: ../../../build/NEWS:23252 ../../../build/NEWS:25188 +msgid "" +":issue:`17603`: Avoid error about nonexistent fileblocks.o file by using a " +"lower-level check for st_blocks in struct stat." +msgstr "" + +#: ../../../build/NEWS:23255 ../../../build/NEWS:25191 +msgid "" +":issue:`26079`: Fixing the build output folder for tix-8.4.3.6. Patch by " +"Bjoern Thiel." +msgstr "" + +#: ../../../build/NEWS:23258 ../../../build/NEWS:25194 +msgid ":issue:`26465`: Update Windows builds to use OpenSSL 1.0.2g." +msgstr "" + +#: ../../../build/NEWS:23260 +msgid "" +":issue:`25348`: Added ``--pgo`` and ``--pgo-job`` arguments to " +"``PCbuild\\build.bat`` for building with Profile-Guided Optimization. The " +"old ``PCbuild\\build_pgo.bat`` script is removed." +msgstr "" + +#: ../../../build/NEWS:23264 ../../../build/NEWS:25205 +msgid "" +":issue:`25827`: Add support for building with ICC to ``configure``, " +"including a new ``--with-icc`` flag." +msgstr "" + +#: ../../../build/NEWS:23267 ../../../build/NEWS:25208 +msgid ":issue:`25696`: Fix installation of Python on UNIX with make -j9." +msgstr "" + +#: ../../../build/NEWS:23269 ../../../build/NEWS:25722 +msgid "" +":issue:`24986`: It is now possible to build Python on Windows without errors" +" when external libraries are not available." +msgstr "" + +#: ../../../build/NEWS:23272 ../../../build/NEWS:25196 +msgid "" +":issue:`24421`: Compile Modules/_math.c once, before building extensions. " +"Previously it could fail to compile properly if the math and cmath builds " +"were concurrent." +msgstr "" + +#: ../../../build/NEWS:23276 +msgid "" +":issue:`26465`: Update OS X 10.5+ 32-bit-only installer to build and link " +"with OpenSSL 1.0.2g." +msgstr "" + +#: ../../../build/NEWS:23279 ../../../build/NEWS:25213 +msgid ":issue:`26268`: Update Windows builds to use OpenSSL 1.0.2f." +msgstr "" + +#: ../../../build/NEWS:23281 ../../../build/NEWS:25215 +msgid "" +":issue:`25136`: Support Apple Xcode 7's new textual SDK stub libraries." +msgstr "" + +#: ../../../build/NEWS:23283 ../../../build/NEWS:25217 +msgid "" +":issue:`24324`: Do not enable unreachable code warnings when using gcc as " +"the option does not work correctly in older versions of gcc and has been " +"silently removed as of gcc-4.5." +msgstr "" + +#: ../../../build/NEWS:23290 ../../../build/NEWS:25224 +msgid "" +":issue:`27053`: Updates make_zip.py to correctly generate library ZIP file." +msgstr "" + +#: ../../../build/NEWS:23292 ../../../build/NEWS:25226 +msgid "" +":issue:`26268`: Update the prepare_ssl.py script to handle OpenSSL releases " +"that don't include the contents of the include directory (that is, 1.0.2e " +"and later)." +msgstr "" + +#: ../../../build/NEWS:23296 ../../../build/NEWS:25230 +msgid "" +":issue:`26071`: bdist_wininst created binaries fail to start and find 32bit " +"Python" +msgstr "" + +#: ../../../build/NEWS:23299 ../../../build/NEWS:25233 +msgid ":issue:`26073`: Update the list of magic numbers in launcher" +msgstr "" + +#: ../../../build/NEWS:23301 ../../../build/NEWS:25235 +msgid "" +":issue:`26065`: Excludes venv from library when generating embeddable " +"distro." +msgstr "" + +#: ../../../build/NEWS:23303 ../../../build/NEWS:25761 +msgid ":issue:`25022`: Removed very outdated PC/example_nt/ directory." +msgstr "" + +#: ../../../build/NEWS:23308 ../../../build/NEWS:25243 +msgid "" +":issue:`26799`: Fix python-gdb.py: don't get C types once when the Python " +"code is loaded, but get C types on demand. The C types can change if python-" +"gdb.py is loaded before the Python executable. Patch written by Thomas " +"Ilsche." +msgstr "" + +#: ../../../build/NEWS:23313 ../../../build/NEWS:25248 +msgid "" +":issue:`26271`: Fix the Freeze tool to properly use flags passed through " +"configure. Patch by Daniel Shaulov." +msgstr "" + +#: ../../../build/NEWS:23316 ../../../build/NEWS:25251 +msgid "" +":issue:`26489`: Add dictionary unpacking support to Tools/parser/unparse.py." +" Patch by Guo Ci Teo." +msgstr "" + +#: ../../../build/NEWS:23319 ../../../build/NEWS:25254 +msgid ":issue:`26316`: Fix variable name typo in Argument Clinic." +msgstr "" + +#: ../../../build/NEWS:23321 ../../../build/NEWS:25766 +msgid ":issue:`25440`: Fix output of python-config --extension-suffix." +msgstr "" + +#: ../../../build/NEWS:23323 +msgid "" +":issue:`25154`: The pyvenv script has been deprecated in favour of `python3 " +"-m venv`." +msgstr "" + +#: ../../../build/NEWS:23329 +msgid "" +":issue:`26312`: SystemError is now raised in all programming bugs with using" +" PyArg_ParseTupleAndKeywords(). RuntimeError did raised before in some " +"programming bugs." +msgstr "" + +#: ../../../build/NEWS:23333 +msgid "" +":issue:`26198`: ValueError is now raised instead of TypeError on buffer " +"overflow in parsing \"es#\" and \"et#\" format units. SystemError is now " +"raised instead of TypeError on programmatical error in parsing format " +"string." +msgstr "" + +#: ../../../build/NEWS:23340 +msgid "Python 3.5.5 final" +msgstr "Python 3.5.5 正式版" + +#: ../../../build/NEWS:23342 +msgid "*Release date: 2018-02-04*" +msgstr "*发布日期e: 2018-02-04*" + +#: ../../../build/NEWS:23344 +msgid "There were no new changes in version 3.5.5." +msgstr "在 3.5.5 版本中没有新的更改。" + +#: ../../../build/NEWS:23349 +msgid "Python 3.5.5 release candidate 1" +msgstr "Python 3.5.5 rc1" + +#: ../../../build/NEWS:23351 +msgid "*Release date: 2018-01-23*" +msgstr "*发布日期: 2018-01-23*" + +#: ../../../build/NEWS:23356 +msgid "" +":issue:`32551`: The ``sys.path[0]`` initialization change for :issue:`29139`" +" caused a regression by revealing an inconsistency in how sys.path is " +"initialized when executing ``__main__`` from a zipfile, directory, or other " +"import location. This is considered a potential security issue, as it may " +"lead to privileged processes unexpectedly loading code from user controlled " +"directories in situations where that was not previously the case. The " +"interpreter now consistently avoids ever adding the import location's parent" +" directory to ``sys.path``, and ensures no other ``sys.path`` entries are " +"inadvertently modified when inserting the import location named on the " +"command line. (Originally reported as :issue:`29723` against Python 3.6rc1, " +"but it was missed at the time that the then upcoming Python 3.5.4 release " +"would also be affected)" +msgstr "" + +#: ../../../build/NEWS:23369 +msgid "" +":issue:`30657`: Fixed possible integer overflow in PyBytes_DecodeEscape, " +"CVE-2017-1000158. Original patch by Jay Bosamiya; rebased to Python 3 by " +"Miro Hrončok." +msgstr "" + +#: ../../../build/NEWS:23396 +msgid "Python 3.5.4 final" +msgstr "Python 3.5.4 正式版" + +#: ../../../build/NEWS:23398 +msgid "*Release date: 2017-08-07*" +msgstr "*发布日期: 2017-08-07*" + +#: ../../../build/NEWS:23408 +msgid "Python 3.5.4 release candidate 1" +msgstr "Python 3.5.4 rc1" + +#: ../../../build/NEWS:23410 +msgid "*Release date: 2017-07-23*" +msgstr "*发布日期: 2017-07-23*" + +#: ../../../build/NEWS:23462 +msgid "" +":issue:`29537`: Restore runtime compatibility with bytecode files generated " +"by CPython 3.5.0 to 3.5.2, and adjust the eval loop to avoid the problems " +"that could be caused by the malformed variant of the " +"BUILD_MAP_UNPACK_WITH_CALL opcode that they may contain. Patch by Petr " +"Viktorin, Serhiy Storchaka, and Nick Coghlan." +msgstr "" + +#: ../../../build/NEWS:23744 +msgid "" +":issue:`30822`: Fix regrtest command line parser to allow passing -u " +"extralargefile to run test_zipfile64." +msgstr "" + +#: ../../../build/NEWS:23747 +msgid "" +":issue:`30383`: regrtest: Enhance regrtest and backport features from the " +"master branch. Add options: --coverage, --testdir, --list-tests (list test " +"files, don't run them), --list-cases (list test identifiers, don't run them," +" :issue:`30523`), --matchfile (load a list of test filters from a text file," +" :issue:`30540`), --slowest (alias to --slow). Enhance output: add " +"timestamp, test result, currently running tests, \"Tests result: xxx\" " +"summary with total duration, etc. Fix reference leak hunting in regrtest, " +"--huntrleaks: regrtest now warms up caches, create explicitly all internal " +"singletons which are created on demand to prevent false positives when " +"checking for reference leaks. (:issue:`30675`)." +msgstr "" + +#: ../../../build/NEWS:23804 +msgid "" +":issue:`27867`: Function PySlice_GetIndicesEx() is replaced with a macro if " +"Py_LIMITED_API is set to the value between 0x03050400 and 0x03060000 (not " +"including) or 0x03060100 or higher." +msgstr "" + +#: ../../../build/NEWS:23816 +msgid "Python 3.5.3 final" +msgstr "Python 3.5.3 正式版" + +#: ../../../build/NEWS:23818 +msgid "*Release date: 2017-01-17*" +msgstr "*发布日期: 2017-01-17*" + +#: ../../../build/NEWS:23820 +msgid "There were no code changes between 3.5.3rc1 and 3.5.3 final." +msgstr "" + +#: ../../../build/NEWS:23825 +msgid "Python 3.5.3 release candidate 1" +msgstr "Python 3.5.3 rc1" + +#: ../../../build/NEWS:23827 +msgid "*Release date: 2017-01-02*" +msgstr "*发布日期: 2017-01-02*" + +#: ../../../build/NEWS:23841 +msgid "" +":issue:`29073`: bytearray formatting no longer truncates on first null byte." +msgstr "" + +#: ../../../build/NEWS:23845 +msgid "" +":issue:`28147`: Fix a memory leak in split-table dictionaries: setattr() " +"must not convert combined table into split table." +msgstr "" + +#: ../../../build/NEWS:23857 +msgid "" +":issue:`28991`: functools.lru_cache() was susceptible to an obscure " +"reentrancy bug caused by a monkey-patched len() function." +msgstr "" + +#: ../../../build/NEWS:23900 +msgid "" +":issue:`28203`: Fix incorrect type in error message from ``complex(1.0, " +"{2:3})``. Patch by Soumya Sharma." +msgstr "" + +#: ../../../build/NEWS:23915 +msgid "" +":issue:`28189`: dictitems_contains no longer swallows compare errors. (Patch" +" by Xiang Zhang)" +msgstr "" + +#: ../../../build/NEWS:23927 +msgid "" +":issue:`26020`: set literal evaluation order did not match documented " +"behaviour." +msgstr "" + +#: ../../../build/NEWS:23946 +msgid "" +":issue:`27419`: Standard __import__() no longer look up \"__import__\" in " +"globals or builtins for importing submodules or \"from import\". Fixed " +"handling an error of non-string package name." +msgstr "" + +#: ../../../build/NEWS:23998 +msgid "" +":issue:`20191`: Fixed a crash in resource.prlimit() when pass a sequence " +"that doesn't own its elements as limits." +msgstr "" + +#: ../../../build/NEWS:24049 +msgid "" +":issue:`28488`: shutil.make_archive() no longer add entry \"./\" to ZIP " +"archive." +msgstr "" + +#: ../../../build/NEWS:24087 +msgid "" +":issue:`27611`: Fixed support of default root window in the tkinter.tix " +"module." +msgstr "" + +#: ../../../build/NEWS:24113 +msgid "" +":issue:`19003`: m email.generator now replaces only ``\\r`` and/or ``\\n`` " +"line endings, per the RFC, instead of all unicode line endings." +msgstr "" + +#: ../../../build/NEWS:24185 +msgid "" +"A new version of typing.py from https://github.com/python/typing: Collection" +" (only for 3.6) (:issue:`27598`). Add FrozenSet to __all__ (upstream #261). " +"Fix crash in _get_type_vars() (upstream #259). Remove the dict constraint in" +" ForwardRef._eval_type (upstream #252)." +msgstr "" + +#: ../../../build/NEWS:24201 +msgid "" +":issue:`26750`: unittest.mock.create_autospec() now works properly for " +"subclasses of property() and other data descriptors." +msgstr "" + +#: ../../../build/NEWS:24245 +msgid ":issue:`26664`: Fix activate.fish by removing mis-use of ``$``." +msgstr "" + +#: ../../../build/NEWS:24247 +msgid "" +":issue:`22115`: Fixed tracing Tkinter variables: trace_vdelete() with wrong " +"mode no longer break tracing, trace_vinfo() now always returns a list of " +"pairs of strings, tracing in the \"u\" mode now works." +msgstr "" + +#: ../../../build/NEWS:24251 +msgid "" +"Fix a scoping issue in importlib.util.LazyLoader which triggered an " +"UnboundLocalError when lazy-loading a module that was already put into " +"sys.modules." +msgstr "" + +#: ../../../build/NEWS:24333 +msgid ":issue:`28600`: Optimize loop.call_soon()." +msgstr "" + +#: ../../../build/NEWS:24347 +msgid "" +":issue:`24142`: Reading a corrupt config file left the parser in an invalid " +"state. Original patch by Florian Höch." +msgstr "" + +#: ../../../build/NEWS:24350 +msgid "" +":issue:`28990`: Fix SSL hanging if connection is closed before handshake " +"completed. (Patch by HoHo-Ho)" +msgstr "" + +#: ../../../build/NEWS:24386 +msgid "" +":issue:`26754`: PyUnicode_FSDecoder() accepted a filename argument encoded " +"as an iterable of integers. Now only strings and bytes-like objects are " +"accepted." +msgstr "" + +#: ../../../build/NEWS:24398 +msgid "" +":issue:`28950`: Disallow -j0 to be combined with -T/-l/-M in regrtest " +"command line arguments." +msgstr "" + +#: ../../../build/NEWS:24439 +msgid "" +":issue:`27309`: Enabled proper Windows styles in python[w].exe manifest." +msgstr "" + +#: ../../../build/NEWS:24472 +msgid "" +":issue:`27983`: Cause lack of llvm-profdata tool when using clang as " +"required for PGO linking to be a configure time error rather than make time " +"when --with-optimizations is enabled. Also improve our ability to find the " +"llvm-profdata tool on MacOS and some Linuxes." +msgstr "" + +#: ../../../build/NEWS:24479 +msgid ":issue:`26359`: Add the --with-optimizations configure flag." +msgstr "" + +#: ../../../build/NEWS:24484 +msgid "" +":issue:`25825`: Correct the references to Modules/python.exp and ld_so_aix, " +"which are required on AIX. This updates references to an installation path " +"that was changed in 3.2a4, and undoes changed references to the build tree " +"that were made in 3.5.0a1." +msgstr "" + +#: ../../../build/NEWS:24507 +msgid "Python 3.5.2 final" +msgstr "Python 3.5.2 正式版" + +#: ../../../build/NEWS:24509 +msgid "*Release date: 2016-06-26*" +msgstr "*发布日期: 2016-06-26*" + +#: ../../../build/NEWS:24519 +msgid "" +":issue:`26867`: Ubuntu's openssl OP_NO_SSLv3 is forced on by default; fix " +"test." +msgstr "" + +#: ../../../build/NEWS:24524 +msgid "" +":issue:`27365`: Allow non-ascii in idlelib/NEWS.txt - minimal part for " +"3.5.2." +msgstr "" + +#: ../../../build/NEWS:24528 +msgid "Python 3.5.2 release candidate 1" +msgstr "Python 3.5.2 rc1" + +#: ../../../build/NEWS:24530 +msgid "*Release date: 2016-06-12*" +msgstr "*发布日期: 2016-06-12*" + +#: ../../../build/NEWS:24537 +msgid "" +"Fix TLS stripping vulnerability in smtplib, CVE-2016-0772. Reported by Team " +"Oststrom" +msgstr "" + +#: ../../../build/NEWS:24568 +msgid "" +":issue:`27039`: Fixed bytearray.remove() for values greater than 127. Patch" +" by Joe Jevnik." +msgstr "" + +#: ../../../build/NEWS:24623 +msgid "" +":issue:`26194`: Deque.insert() gave odd results for bounded deques that had " +"reached their maximum size. Now an IndexError will be raised when " +"attempting to insert into a full deque." +msgstr "" + +#: ../../../build/NEWS:24627 +msgid "" +":issue:`25843`: When compiling code, don't merge constants if they are equal" +" but have a different types. For example, ``f1, f2 = lambda: 1, lambda: " +"1.0`` is now correctly compiled to two different functions: ``f1()`` returns" +" ``1`` (``int``) and ``f2()`` returns ``1.0`` (``int``), even if ``1`` and " +"``1.0`` are equal." +msgstr "" + +#: ../../../build/NEWS:24846 +msgid "" +":issue:`21925`: :func:`warnings.formatwarning` now catches exceptions on " +"``linecache.getline(...)`` to be able to log :exc:`ResourceWarning` emitted " +"late during the Python shutdown process." +msgstr "" + +#: ../../../build/NEWS:24879 +msgid "" +":issue:`15068`: Got rid of excessive buffering in the fileinput module. The " +"bufsize parameter is no longer used." +msgstr "" + +#: ../../../build/NEWS:24908 +msgid "" +":issue:`26367`: importlib.__import__() raises SystemError like " +"builtins.__import__() when ``level`` is specified but without an " +"accompanying package specified." +msgstr "" + +#: ../../../build/NEWS:24958 +msgid ":issue:`17633`: Improve zipimport's support for namespace packages." +msgstr "" + +#: ../../../build/NEWS:25057 +msgid "" +":issue:`27223`: asyncio: Fix _read_ready and _write_ready to respect " +"_conn_lost. Patch by Łukasz Langa." +msgstr "" + +#: ../../../build/NEWS:25060 +msgid "" +":issue:`22970`: asyncio: Fix inconsistency cancelling Condition.wait. Patch " +"by David Coles." +msgstr "" + +#: ../../../build/NEWS:25096 +msgid "" +":issue:`21703`: Add test for IDLE's undo delegator. Original patch by " +"Saimadhav Heblikar ." +msgstr "" + +#: ../../../build/NEWS:25132 +msgid "" +":issue:`25500`: Fix documentation to not claim that __import__ is searched " +"for in the global scope." +msgstr "" + +#: ../../../build/NEWS:25153 +msgid "" +":issue:`25940`: Changed test_ssl to use self-signed.pythontest.net. This " +"avoids relying on svn.python.org, which recently changed root certificate." +msgstr "" + +#: ../../../build/NEWS:25176 +msgid "" +":issue:`21668`: Link audioop, _datetime, _ctypes_test modules to libm, " +"except on Mac OS X. Patch written by Xavier de Gaye." +msgstr "" + +#: ../../../build/NEWS:25200 +msgid "" +":issue:`25348`: Added ``--pgo`` and ``--pgo-job`` arguments to " +"``PCbuild\\build.bat`` for building with Profile-Guided Optimization. The " +"old ``PCbuild\\build_pgo.bat`` script is now deprecated, and simply calls " +"``PCbuild\\build.bat --pgo %*``." +msgstr "" + +#: ../../../build/NEWS:25258 +msgid "Python 3.5.1 final" +msgstr "Python 3.5.1 正式版" + +#: ../../../build/NEWS:25260 +msgid "*Release date: 2015-12-06*" +msgstr "*发布日期: 2015-12-06*" + +#: ../../../build/NEWS:25271 +msgid "" +":issue:`25715`: Python 3.5.1 installer shows wrong upgrade path and " +"incorrect logic for launcher detection." +msgstr "" + +#: ../../../build/NEWS:25276 +msgid "Python 3.5.1 release candidate 1" +msgstr "Python 3.5.1 rc1" + +#: ../../../build/NEWS:25278 +msgid "*Release date: 2015-11-22*" +msgstr "*发布日期: 2015-11-22*" + +#: ../../../build/NEWS:25337 +msgid "" +":issue:`25182`: The stdprinter (used as sys.stderr before the io module is " +"imported at startup) now uses the backslashreplace error handler." +msgstr "" + +#: ../../../build/NEWS:25340 +msgid "" +":issue:`25131`: Make the line number and column offset of set/dict literals " +"and comprehensions correspond to the opening brace." +msgstr "" + +#: ../../../build/NEWS:25343 +msgid "" +":issue:`25150`: Hide the private _Py_atomic_xxx symbols from the public " +"Python.h header to fix a compilation error with OpenMP. PyThreadState_GET() " +"becomes an alias to PyThreadState_Get() to avoid ABI incompatibilities." +msgstr "" + +#: ../../../build/NEWS:25367 +msgid "" +":issue:`25590`: In the Readline completer, only call getattr() once per " +"attribute." +msgstr "" + +#: ../../../build/NEWS:25445 +msgid "" +":issue:`24483`: C implementation of functools.lru_cache() now calculates " +"key's hash only once." +msgstr "" + +#: ../../../build/NEWS:25448 +msgid "" +":issue:`22958`: Constructor and update method of weakref.WeakValueDictionary" +" now accept the self and the dict keyword arguments." +msgstr "" + +#: ../../../build/NEWS:25451 +msgid "" +":issue:`22609`: Constructor of collections.UserDict now accepts the self " +"keyword argument." +msgstr "" + +#: ../../../build/NEWS:25454 +msgid ":issue:`25111`: Fixed comparison of traceback.FrameSummary." +msgstr "" + +#: ../../../build/NEWS:25456 +msgid "" +":issue:`25262`: Added support for BINBYTES8 opcode in Python implementation " +"of unpickler. Highest 32 bits of 64-bit size for BINUNICODE8 and BINBYTES8 " +"opcodes no longer silently ignored on 32-bit platforms in C implementation." +msgstr "" + +#: ../../../build/NEWS:25461 +msgid "" +":issue:`25034`: Fix string.Formatter problem with auto-numbering and nested " +"format_specs. Patch by Anthon van der Neut." +msgstr "" + +#: ../../../build/NEWS:25464 +msgid "" +":issue:`25233`: Rewrite the guts of asyncio.Queue and asyncio.Semaphore to " +"be more understandable and correct." +msgstr "" + +#: ../../../build/NEWS:25473 +msgid "" +":issue:`23329`: Allow the ssl module to be built with older versions of " +"LibreSSL." +msgstr "" + +#: ../../../build/NEWS:25476 +msgid "Prevent overflow in _Unpickler_Read." +msgstr "" + +#: ../../../build/NEWS:25478 +msgid "" +":issue:`25047`: The XML encoding declaration written by Element Tree now " +"respects the letter case given by the user. This restores the ability to " +"write encoding names in uppercase like \"UTF-8\", which worked in Python 2." +msgstr "" + +#: ../../../build/NEWS:25482 +msgid "" +":issue:`25135`: Make deque_clear() safer by emptying the deque before " +"clearing. This helps avoid possible reentrancy issues." +msgstr "" + +#: ../../../build/NEWS:25485 +msgid "" +":issue:`19143`: platform module now reads Windows version from kernel32.dll " +"to avoid compatibility shims." +msgstr "" + +#: ../../../build/NEWS:25488 +msgid "" +":issue:`25092`: Fix datetime.strftime() failure when errno was already set " +"to EINVAL." +msgstr "" + +#: ../../../build/NEWS:25491 +msgid "" +":issue:`23517`: Fix rounding in fromtimestamp() and utcfromtimestamp() " +"methods of datetime.datetime: microseconds are now rounded to nearest with " +"ties going to nearest even integer (ROUND_HALF_EVEN), instead of being " +"rounding towards minus infinity (ROUND_FLOOR). It's important that these " +"methods use the same rounding mode than datetime.timedelta to keep the " +"property: (datetime(1970,1,1) + timedelta(seconds=t)) == " +"datetime.utcfromtimestamp(t). It also the rounding mode used by round(float)" +" for example." +msgstr "" + +#: ../../../build/NEWS:25500 +msgid "" +":issue:`25155`: Fix datetime.datetime.now() and datetime.datetime.utcnow() " +"on Windows to support date after year 2038. It was a regression introduced " +"in Python 3.5.0." +msgstr "" + +#: ../../../build/NEWS:25504 +msgid "" +":issue:`25108`: Omitted internal frames in traceback functions " +"print_stack(), format_stack(), and extract_stack() called without arguments." +msgstr "" + +#: ../../../build/NEWS:25507 +msgid "" +":issue:`25118`: Fix a regression of Python 3.5.0 in os.waitpid() on Windows." +msgstr "" + +#: ../../../build/NEWS:25509 +msgid "" +":issue:`24684`: socket.socket.getaddrinfo() now calls " +"PyUnicode_AsEncodedString() instead of calling the encode() method of the " +"host, to handle correctly custom string with an encode() method which " +"doesn't return a byte string. The encoder of the IDNA codec is now called " +"directly instead of calling the encode() method of the string." +msgstr "" + +#: ../../../build/NEWS:25515 +msgid ":issue:`25060`: Correctly compute stack usage of the BUILD_MAP opcode." +msgstr "" + +#: ../../../build/NEWS:25517 +msgid "" +":issue:`24857`: Comparing call_args to a long sequence now correctly returns" +" a boolean result instead of raising an exception. Patch by A Kaptur." +msgstr "" + +#: ../../../build/NEWS:25520 +msgid "" +":issue:`23144`: Make sure that HTMLParser.feed() returns all the data, even " +"when convert_charrefs is True." +msgstr "" + +#: ../../../build/NEWS:25523 +msgid "" +":issue:`24982`: shutil.make_archive() with the \"zip\" format now adds " +"entries for directories (including empty directories) in ZIP file." +msgstr "" + +#: ../../../build/NEWS:25526 +msgid "" +":issue:`25019`: Fixed a crash caused by setting non-string key of expat " +"parser. Based on patch by John Leitch." +msgstr "" + +#: ../../../build/NEWS:25529 +msgid "" +":issue:`16180`: Exit pdb if file has syntax error, instead of trapping user " +"in an infinite loop. Patch by Xavier de Gaye." +msgstr "" + +#: ../../../build/NEWS:25532 +msgid "" +":issue:`24891`: Fix a race condition at Python startup if the file " +"descriptor of stdin (0), stdout (1) or stderr (2) is closed while Python is " +"creating sys.stdin, sys.stdout and sys.stderr objects. These attributes are " +"now set to None if the creation of the object failed, instead of raising an " +"OSError exception. Initial patch written by Marco Paolini." +msgstr "" + +#: ../../../build/NEWS:25538 +msgid "" +":issue:`24992`: Fix error handling and a race condition (related to garbage " +"collection) in collections.OrderedDict constructor." +msgstr "" + +#: ../../../build/NEWS:25541 +msgid "" +":issue:`24881`: Fixed setting binary mode in Python implementation of FileIO" +" on Windows and Cygwin. Patch from Akira Li." +msgstr "" + +#: ../../../build/NEWS:25557 +msgid "" +":issue:`21112`: Fix regression in unittest.expectedFailure on subclasses. " +"Patch from Berker Peksag." +msgstr "" + +#: ../../../build/NEWS:25560 +msgid "" +":issue:`24764`: cgi.FieldStorage.read_multi() now ignores the Content-Length" +" header in part headers. Patch written by Peter Landry and reviewed by " +"Pierre Quentel." +msgstr "" + +#: ../../../build/NEWS:25564 ../../../build/NEWS:25829 +msgid "" +":issue:`24913`: Fix overrun error in deque.index(). Found by John Leitch and" +" Bryce Darling." +msgstr "" + +#: ../../../build/NEWS:25567 +msgid "" +":issue:`24774`: Fix docstring in http.server.test. Patch from Chiu-Hsiang " +"Hsu." +msgstr "" + +#: ../../../build/NEWS:25569 +msgid "" +":issue:`21159`: Improve message in " +"configparser.InterpolationMissingOptionError. Patch from Łukasz Langa." +msgstr "" + +#: ../../../build/NEWS:25572 +msgid "" +":issue:`20362`: Honour TestCase.longMessage correctly in assertRegex. Patch " +"from Ilia Kurenkov." +msgstr "" + +#: ../../../build/NEWS:25575 +msgid "" +":issue:`23572`: Fixed functools.singledispatch on classes with falsy " +"metaclasses. Patch by Ethan Furman." +msgstr "" + +#: ../../../build/NEWS:25578 +msgid "asyncio: ensure_future() now accepts awaitable objects." +msgstr "" + +#: ../../../build/NEWS:25666 +msgid "" +":issue:`16893`: Replace help.txt with help.html for Idle doc display. The " +"new idlelib/help.html is rstripped Doc/build/html/library/idle.html. It " +"looks better than help.txt and will better document Idle as released. The " +"tkinter html viewer that works for this file was written by Mark Roseman. " +"The now unused EditorWindow.HelpDialog class and helt.txt file are " +"deprecated." +msgstr "" + +#: ../../../build/NEWS:25683 +msgid "" +":issue:`12067`: Rewrite Comparisons section in the Expressions chapter of " +"the language reference. Some of the details of comparing mixed types were " +"incorrect or ambiguous. NotImplemented is only relevant at a lower level " +"than the Expressions chapter. Added details of comparing range() objects, " +"and default behaviour and consistency suggestions for user-defined classes. " +"Patch from Andy Maier." +msgstr "" + +#: ../../../build/NEWS:25693 +msgid "" +":issue:`23725`: Overhaul tempfile docs. Note deprecated status of mktemp. " +"Patch from Zbigniew Jędrzejewski-Szmek." +msgstr "" + +#: ../../../build/NEWS:25696 +msgid "" +":issue:`24808`: Update the types of some PyTypeObject fields. Patch by " +"Joseph Weston." +msgstr "" + +#: ../../../build/NEWS:25699 +msgid "" +":issue:`22812`: Fix unittest discovery examples. Patch from Pam McA'Nulty." +msgstr "" + +#: ../../../build/NEWS:25706 +msgid "" +":issue:`25099`: Make test_compileall not fail when an entry on sys.path " +"cannot be written to (commonly seen in administrative installs on Windows)." +msgstr "" + +#: ../../../build/NEWS:25709 +msgid ":issue:`23919`: Prevents assert dialogs appearing in the test suite." +msgstr "" + +#: ../../../build/NEWS:25717 +msgid "" +":issue:`24915`: Add LLVM support for PGO builds and use the test suite to " +"generate the profile data. Initial patch by Alecsandru Patrascu of Intel." +msgstr "" + +#: ../../../build/NEWS:25720 +msgid ":issue:`24910`: Windows MSIs now have unique display names." +msgstr "" + +#: ../../../build/NEWS:25728 +msgid "" +":issue:`25450`: Updates shortcuts to start Python in installation directory." +msgstr "" + +#: ../../../build/NEWS:25730 +msgid "" +":issue:`25164`: Changes default all-users install directory to match per-" +"user directory." +msgstr "" + +#: ../../../build/NEWS:25733 +msgid "" +":issue:`25143`: Improves installer error messages for unsupported platforms." +msgstr "" + +#: ../../../build/NEWS:25735 +msgid "" +":issue:`25163`: Display correct directory in installer when using non-" +"default settings." +msgstr "" + +#: ../../../build/NEWS:25738 +msgid "" +":issue:`25361`: Disables use of SSE2 instructions in Windows 32-bit build" +msgstr "" + +#: ../../../build/NEWS:25740 +msgid "" +":issue:`25089`: Adds logging to installer for case where launcher is not " +"selected on upgrade." +msgstr "" + +#: ../../../build/NEWS:25743 +msgid "" +":issue:`25165`: Windows uninstallation should not remove launcher if other " +"versions remain" +msgstr "" + +#: ../../../build/NEWS:25746 +msgid ":issue:`25112`: py.exe launcher is missing icons" +msgstr "" + +#: ../../../build/NEWS:25748 +msgid ":issue:`25102`: Windows installer does not precompile for -O or -OO." +msgstr "" + +#: ../../../build/NEWS:25750 +msgid "" +":issue:`25081`: Makes Back button in installer go back to upgrade page when " +"upgrading." +msgstr "" + +#: ../../../build/NEWS:25753 +msgid ":issue:`25091`: Increases font size of the installer." +msgstr "" + +#: ../../../build/NEWS:25755 +msgid "" +":issue:`25126`: Clarifies that the non-web installer will download some " +"components." +msgstr "" + +#: ../../../build/NEWS:25758 +msgid "" +":issue:`25213`: Restores requestedExecutionLevel to manifest to disable UAC " +"virtualization." +msgstr "" + +#: ../../../build/NEWS:25770 +msgid "Python 3.5.0 final" +msgstr "Python 3.5.0 正式版" + +#: ../../../build/NEWS:25772 +msgid "*Release date: 2015-09-13*" +msgstr "*发布日期: 2015-09-13*" + +#: ../../../build/NEWS:25777 +msgid "" +":issue:`25071`: Windows installer should not require TargetDir parameter " +"when installing quietly." +msgstr "" + +#: ../../../build/NEWS:25782 +msgid "Python 3.5.0 release candidate 4" +msgstr "Python 3.5.0 rc4" + +#: ../../../build/NEWS:25784 +msgid "*Release date: 2015-09-09*" +msgstr "*发布日期: 2015-09-09*" + +#: ../../../build/NEWS:25789 +msgid ":issue:`25029`: Fixes MemoryError in test_strptime." +msgstr "" + +#: ../../../build/NEWS:25794 +msgid "" +":issue:`25027`: Reverts partial-static build options and adds " +"vcruntime140.dll to Windows installation." +msgstr "" + +#: ../../../build/NEWS:25799 +msgid "Python 3.5.0 release candidate 3" +msgstr "Python 3.5.0 rc3" + +#: ../../../build/NEWS:25801 +msgid "*Release date: 2015-09-07*" +msgstr "*发布日期: 2015-09-07*" + +#: ../../../build/NEWS:25806 +msgid "" +":issue:`24305`: Prevent import subsystem stack frames from being counted by " +"the warnings.warn(stacklevel=) parameter." +msgstr "" + +#: ../../../build/NEWS:25809 +msgid "" +":issue:`24912`: Prevent __class__ assignment to immutable built-in objects." +msgstr "" + +#: ../../../build/NEWS:25811 +msgid ":issue:`24975`: Fix AST compilation for :pep:`448` syntax." +msgstr "" + +#: ../../../build/NEWS:25816 +msgid ":issue:`24917`: time_strftime() buffer over-read." +msgstr "" + +#: ../../../build/NEWS:25818 +msgid "" +":issue:`24748`: To resolve a compatibility problem found with py2exe and " +"pywin32, imp.load_dynamic() once again ignores previously loaded modules to " +"support Python modules replacing themselves with extension modules. Patch by" +" Petr Viktorin." +msgstr "" + +#: ../../../build/NEWS:25823 +msgid "" +":issue:`24635`: Fixed a bug in typing.py where isinstance([], " +"typing.Iterable) would return True once, then False on subsequent calls." +msgstr "" + +#: ../../../build/NEWS:25826 +msgid "" +":issue:`24989`: Fixed buffer overread in BytesIO.readline() if a position is" +" set beyond size. Based on patch by John Leitch." +msgstr "" + +#: ../../../build/NEWS:25834 +msgid "Python 3.5.0 release candidate 2" +msgstr "Python 3.5.0 rc2" + +#: ../../../build/NEWS:25836 +msgid "*Release date: 2015-08-25*" +msgstr "*发布日期: 2015-08-25*" + +#: ../../../build/NEWS:25841 +msgid "" +":issue:`24769`: Interpreter now starts properly when dynamic loading is " +"disabled. Patch by Petr Viktorin." +msgstr "" + +#: ../../../build/NEWS:25844 +msgid "" +":issue:`21167`: NAN operations are now handled correctly when python is " +"compiled with ICC even if -fp-model strict is not specified." +msgstr "" + +#: ../../../build/NEWS:25847 +msgid "" +":issue:`24492`: A \"package\" lacking a __name__ attribute when trying to " +"perform a ``from .. import ...`` statement will trigger an ImportError " +"instead of an AttributeError." +msgstr "" + +#: ../../../build/NEWS:25854 +msgid ":issue:`24847`: Removes vcruntime140.dll dependency from Tcl/Tk." +msgstr "" + +#: ../../../build/NEWS:25856 +msgid ":issue:`24839`: platform._syscmd_ver raises DeprecationWarning" +msgstr "" + +#: ../../../build/NEWS:25858 +msgid ":issue:`24867`: Fix Task.get_stack() for 'async def' coroutines" +msgstr "" + +#: ../../../build/NEWS:25862 +msgid "Python 3.5.0 release candidate 1" +msgstr "Python 3.5.0 rc1" + +#: ../../../build/NEWS:25864 +msgid "*Release date: 2015-08-09*" +msgstr "*发布日期: 2015-08-09*" + +#: ../../../build/NEWS:25869 +msgid "" +":issue:`24667`: Resize odict in all cases that the underlying dict resizes." +msgstr "" + +#: ../../../build/NEWS:25874 +msgid "" +":issue:`24824`: Signatures of codecs.encode() and codecs.decode() now are " +"compatible with pydoc." +msgstr "" + +#: ../../../build/NEWS:25877 +msgid ":issue:`24634`: Importing uuid should not try to load libc on Windows" +msgstr "" + +#: ../../../build/NEWS:25879 +msgid ":issue:`24798`: _msvccompiler.py doesn't properly support manifests" +msgstr "" + +#: ../../../build/NEWS:25881 +msgid "" +":issue:`4395`: Better testing and documentation of binary operators. Patch " +"by Martin Panter." +msgstr "" + +#: ../../../build/NEWS:25884 +msgid ":issue:`23973`: Update typing.py from GitHub repo." +msgstr "" + +#: ../../../build/NEWS:25886 +msgid "" +":issue:`23004`: mock_open() now reads binary data correctly when the type of" +" read_data is bytes. Initial patch by Aaron Hill." +msgstr "" + +#: ../../../build/NEWS:25889 +msgid ":issue:`23888`: Handle fractional time in cookie expiry. Patch by ssh." +msgstr "" + +#: ../../../build/NEWS:25891 +msgid "" +":issue:`23652`: Make it possible to compile the select module against the " +"libc headers from the Linux Standard Base, which do not include some EPOLL " +"macros. Patch by Matt Frank." +msgstr "" + +#: ../../../build/NEWS:25895 +msgid "" +":issue:`22932`: Fix timezones in email.utils.formatdate. Patch from Dmitry " +"Shachnev." +msgstr "" + +#: ../../../build/NEWS:25898 +msgid "" +":issue:`23779`: imaplib raises TypeError if authenticator tries to abort. " +"Patch from Craig Holmquist." +msgstr "" + +#: ../../../build/NEWS:25901 +msgid "" +":issue:`23319`: Fix ctypes.BigEndianStructure, swap correctly bytes. Patch " +"written by Matthieu Gautier." +msgstr "" + +#: ../../../build/NEWS:25904 +msgid "" +":issue:`23254`: Document how to close the TCPServer listening socket. Patch " +"from Martin Panter." +msgstr "" + +#: ../../../build/NEWS:25907 +msgid "" +":issue:`19450`: Update Windows and OS X installer builds to use SQLite " +"3.8.11." +msgstr "" + +#: ../../../build/NEWS:25909 +msgid "" +":issue:`17527`: Add PATCH to wsgiref.validator. Patch from Luca Sbardella." +msgstr "" + +#: ../../../build/NEWS:25911 +msgid ":issue:`24791`: Fix grammar regression for call syntax: 'g(\\*a or b)'." +msgstr "" + +#: ../../../build/NEWS:25916 +msgid "" +":issue:`23672`: Allow Idle to edit and run files with astral chars in name. " +"Patch by Mohd Sanad Zaki Rizvi." +msgstr "" + +#: ../../../build/NEWS:25919 +msgid "" +":issue:`24745`: Idle editor default font. Switch from Courier to platform-" +"sensitive TkFixedFont. This should not affect current customized font " +"selections. If there is a problem, edit $HOME/.idlerc/config-main.cfg and " +"remove 'fontxxx' entries from [Editor Window]. Patch by Mark Roseman." +msgstr "" + +#: ../../../build/NEWS:25925 +msgid "" +":issue:`21192`: Idle editor. When a file is run, put its name in the restart" +" bar. Do not print false prompts. Original patch by Adnan Umer." +msgstr "" + +#: ../../../build/NEWS:25928 +msgid "" +":issue:`13884`: Idle menus. Remove tearoff lines. Patch by Roger Serwy." +msgstr "" + +#: ../../../build/NEWS:25933 +msgid "" +":issue:`24129`: Clarify the reference documentation for name resolution. " +"This includes removing the assumption that readers will be familiar with the" +" name resolution scheme Python used prior to the introduction of lexical " +"scoping for function namespaces. Patch by Ivan Levkivskyi." +msgstr "" + +#: ../../../build/NEWS:25938 +msgid ":issue:`20769`: Improve reload() docs. Patch by Dorian Pula." +msgstr "" + +#: ../../../build/NEWS:25940 +msgid "" +":issue:`23589`: Remove duplicate sentence from the FAQ. Patch by Yongzhi " +"Pan." +msgstr "" + +#: ../../../build/NEWS:25942 +msgid "" +":issue:`24729`: Correct IO tutorial to match implementation regarding " +"encoding parameter to open function." +msgstr "" + +#: ../../../build/NEWS:25948 +msgid "" +":issue:`24751`: When running regrtest with the ``-w`` command line option, a" +" test run is no longer marked as a failure if all tests succeed when re-run." +msgstr "" + +#: ../../../build/NEWS:25954 +msgid "Python 3.5.0 beta 4" +msgstr "Python 3.5.0 beta 4" + +#: ../../../build/NEWS:25956 +msgid "*Release date: 2015-07-26*" +msgstr "*发布日期: 2015-07-26*" + +#: ../../../build/NEWS:25961 +msgid "" +":issue:`23573`: Restored optimization of bytes.rfind() and bytearray.rfind()" +" for single-byte argument on Linux." +msgstr "" + +#: ../../../build/NEWS:25964 +msgid ":issue:`24569`: Make :pep:`448` dictionary evaluation more consistent." +msgstr "" + +#: ../../../build/NEWS:25966 +msgid ":issue:`24583`: Fix crash when set is mutated while being updated." +msgstr "" + +#: ../../../build/NEWS:25968 +msgid ":issue:`24407`: Fix crash when dict is mutated while being updated." +msgstr "" + +#: ../../../build/NEWS:25970 +msgid "" +":issue:`24619`: New approach for tokenizing async/await. As a consequence, " +"it is now possible to have one-line 'async def foo(): await ..' functions." +msgstr "" + +#: ../../../build/NEWS:25973 +msgid "" +":issue:`24687`: Plug refleak on SyntaxError in function parameters " +"annotations." +msgstr "" + +#: ../../../build/NEWS:25975 +msgid "" +":issue:`15944`: memoryview: Allow arbitrary formats when casting to bytes. " +"Patch by Martin Panter." +msgstr "" + +#: ../../../build/NEWS:25981 +msgid "" +":issue:`23441`: rcompleter now prints a tab character instead of displaying " +"possible completions for an empty word. Initial patch by Martin Sekera." +msgstr "" + +#: ../../../build/NEWS:25984 +msgid "" +":issue:`24683`: Fixed crashes in _json functions called with arguments of " +"inappropriate type." +msgstr "" + +#: ../../../build/NEWS:25987 +msgid "" +":issue:`21697`: shutil.copytree() now correctly handles symbolic links that " +"point to directories. Patch by Eduardo Seabra and Thomas Kluyver." +msgstr "" + +#: ../../../build/NEWS:25990 +msgid "" +":issue:`14373`: Fixed segmentation fault when gc.collect() is called during " +"constructing lru_cache (C implementation)." +msgstr "" + +#: ../../../build/NEWS:25993 +msgid "" +":issue:`24695`: Fix a regression in traceback.print_exception(). If " +"exc_traceback is None we shouldn't print a traceback header like described " +"in the documentation." +msgstr "" + +#: ../../../build/NEWS:25997 +msgid "" +":issue:`24620`: Random.setstate() now validates the value of state last " +"element." +msgstr "" + +#: ../../../build/NEWS:26000 +msgid "" +":issue:`22485`: Fixed an issue that caused `inspect.getsource` to return " +"incorrect results on nested functions." +msgstr "" + +#: ../../../build/NEWS:26003 +msgid "" +":issue:`22153`: Improve unittest docs. Patch from Martin Panter and " +"evilzero." +msgstr "" + +#: ../../../build/NEWS:26005 +msgid "" +":issue:`24580`: Symbolic group references to open group in re patterns now " +"are explicitly forbidden as well as numeric group references." +msgstr "" + +#: ../../../build/NEWS:26008 +msgid ":issue:`24206`: Fixed __eq__ and __ne__ methods of inspect classes." +msgstr "" + +#: ../../../build/NEWS:26010 +msgid "" +":issue:`24631`: Fixed regression in the timeit module with multiline setup." +msgstr "" + +#: ../../../build/NEWS:26018 +msgid ":issue:`24608`: chunk.Chunk.read() now always returns bytes, not str." +msgstr "" + +#: ../../../build/NEWS:26020 +msgid ":issue:`18684`: Fixed reading out of the buffer in the re module." +msgstr "" + +#: ../../../build/NEWS:26022 +msgid "" +":issue:`24259`: tarfile now raises a ReadError if an archive is truncated " +"inside a data segment." +msgstr "" + +#: ../../../build/NEWS:26025 +msgid "" +":issue:`15014`: SMTP.auth() and SMTP.login() now support RFC 4954's optional" +" initial-response argument to the SMTP AUTH command." +msgstr "" + +#: ../../../build/NEWS:26028 +msgid "" +":issue:`24669`: Fix inspect.getsource() for 'async def' functions. Patch by " +"Kai Groner." +msgstr "" + +#: ../../../build/NEWS:26031 +msgid ":issue:`24688`: ast.get_docstring() for 'async def' functions." +msgstr "" + +#: ../../../build/NEWS:26036 +msgid "" +":issue:`24603`: Update Windows builds and OS X 10.5 installer to use OpenSSL" +" 1.0.2d." +msgstr "" + +#: ../../../build/NEWS:26041 +msgid "Python 3.5.0 beta 3" +msgstr "Python 3.5.0 beta 3" + +#: ../../../build/NEWS:26043 +msgid "*Release date: 2015-07-05*" +msgstr "*发布日期: 2015-07-05*" + +#: ../../../build/NEWS:26048 +msgid "" +":issue:`24467`: Fixed possible buffer over-read in bytearray. The bytearray " +"object now always allocates place for trailing null byte and it's buffer now" +" is always null-terminated." +msgstr "" + +#: ../../../build/NEWS:26052 +msgid "Upgrade to Unicode 8.0.0." +msgstr "" + +#: ../../../build/NEWS:26054 +msgid ":issue:`24345`: Add Py_tp_finalize slot for the stable ABI." +msgstr "" + +#: ../../../build/NEWS:26056 +msgid "" +":issue:`24400`: Introduce a distinct type for :pep:`492` coroutines; add " +"types.CoroutineType, inspect.getcoroutinestate, inspect.getcoroutinelocals; " +"coroutines no longer use CO_GENERATOR flag; sys.set_coroutine_wrapper works " +"only for 'async def' coroutines; inspect.iscoroutine no longer uses " +"collections.abc.Coroutine, it's intended to test for pure 'async def' " +"coroutines only; add new opcode: GET_YIELD_FROM_ITER; fix generators wrapper" +" used in types.coroutine to be instance of collections.abc.Generator; " +"collections.abc.Awaitable and collections.abc.Coroutine can no longer be " +"used to detect generator-based coroutines--use inspect.isawaitable instead." +msgstr "" + +#: ../../../build/NEWS:26067 +msgid "" +":issue:`24450`: Add gi_yieldfrom to generators and cr_await to coroutines. " +"Contributed by Benno Leslie and Yury Selivanov." +msgstr "" + +#: ../../../build/NEWS:26070 +msgid "" +":issue:`19235`: Add new RecursionError exception. Patch by Georg Brandl." +msgstr "" + +#: ../../../build/NEWS:26075 +msgid "" +":issue:`21750`: mock_open.read_data can now be read from each instance, as " +"it could in Python 3.3." +msgstr "" + +#: ../../../build/NEWS:26078 +msgid "" +":issue:`24552`: Fix use after free in an error case of the _pickle module." +msgstr "" + +#: ../../../build/NEWS:26080 +msgid "" +":issue:`24514`: tarfile now tolerates number fields consisting of only " +"whitespace." +msgstr "" + +#: ../../../build/NEWS:26083 +msgid "" +":issue:`19176`: Fixed doctype() related bugs in C implementation of " +"ElementTree. A deprecation warning no longer issued by XMLParser subclass " +"with default doctype() method. Direct call of doctype() now issues a " +"warning. Parser's doctype() now is not called if target's doctype() is " +"called. Based on patch by Martin Panter." +msgstr "" + +#: ../../../build/NEWS:26089 +msgid "" +":issue:`20387`: Restore semantic round-trip correctness in " +"tokenize/untokenize for tab-indented blocks." +msgstr "" + +#: ../../../build/NEWS:26092 +msgid "" +":issue:`24456`: Fixed possible buffer over-read in adpcm2lin() and " +"lin2adpcm() functions of the audioop module." +msgstr "" + +#: ../../../build/NEWS:26095 +msgid "" +":issue:`24336`: The contextmanager decorator now works with functions with " +"keyword arguments called \"func\" and \"self\". Patch by Martin Panter." +msgstr "" + +#: ../../../build/NEWS:26098 +msgid "" +":issue:`24522`: Fix possible integer overflow in json accelerator module." +msgstr "" + +#: ../../../build/NEWS:26100 +msgid "" +":issue:`24489`: ensure a previously set C errno doesn't disturb " +"cmath.polar()." +msgstr "" + +#: ../../../build/NEWS:26102 +msgid "" +":issue:`24408`: Fixed AttributeError in measure() and metrics() methods of " +"tkinter.Font." +msgstr "" + +#: ../../../build/NEWS:26105 +msgid "" +":issue:`14373`: C implementation of functools.lru_cache() now can be used " +"with methods." +msgstr "" + +#: ../../../build/NEWS:26108 +msgid ":issue:`24347`: Set KeyError if PyDict_GetItemWithError returns NULL." +msgstr "" + +#: ../../../build/NEWS:26110 +msgid ":issue:`24348`: Drop superfluous incref/decref." +msgstr "" + +#: ../../../build/NEWS:26112 +msgid ":issue:`24359`: Check for changed OrderedDict size during iteration." +msgstr "" + +#: ../../../build/NEWS:26114 +msgid ":issue:`24368`: Support keyword arguments in OrderedDict methods." +msgstr "" + +#: ../../../build/NEWS:26116 +msgid ":issue:`24362`: Simplify the C OrderedDict fast nodes resize logic." +msgstr "" + +#: ../../../build/NEWS:26118 +msgid ":issue:`24377`: Fix a ref leak in OrderedDict.__repr__." +msgstr "" + +#: ../../../build/NEWS:26120 +msgid ":issue:`24369`: Defend against key-changes during iteration." +msgstr "" + +#: ../../../build/NEWS:26125 +msgid "" +":issue:`24373`: _testmultiphase and xxlimited now use tp_traverse and " +"tp_finalize to avoid reference leaks encountered when combining tp_dealloc " +"with PyType_FromSpec (see :issue:`16690` for details)" +msgstr "" + +#: ../../../build/NEWS:26132 +msgid "" +":issue:`24458`: Update documentation to cover multi-phase initialization for" +" extension modules (PEP 489). Patch by Petr Viktorin." +msgstr "" + +#: ../../../build/NEWS:26135 +msgid "" +":issue:`24351`: Clarify what is meant by \"identifier\" in the context of " +"string.Template instances." +msgstr "" + +#: ../../../build/NEWS:26141 +msgid "" +":issue:`24432`: Update Windows builds and OS X 10.5 installer to use OpenSSL" +" 1.0.2c." +msgstr "" + +#: ../../../build/NEWS:26146 +msgid "Python 3.5.0 beta 2" +msgstr "Python 3.5.0 beta 2" + +#: ../../../build/NEWS:26148 +msgid "*Release date: 2015-05-31*" +msgstr "*发布日期: 2015-05-31*" + +#: ../../../build/NEWS:26153 +msgid "" +":issue:`24284`: The startswith and endswith methods of the str class no " +"longer return True when finding the empty string and the indexes are " +"completely out of range." +msgstr "" + +#: ../../../build/NEWS:26157 +msgid "" +":issue:`24115`: Update uses of PyObject_IsTrue(), PyObject_Not(), " +"PyObject_IsInstance(), PyObject_RichCompareBool() and _PyDict_Contains() to " +"check for and handle errors correctly." +msgstr "" + +#: ../../../build/NEWS:26161 +msgid ":issue:`24328`: Fix importing one character extension modules." +msgstr "" + +#: ../../../build/NEWS:26163 +msgid "" +":issue:`11205`: In dictionary displays, evaluate the key before the value." +msgstr "" + +#: ../../../build/NEWS:26165 +msgid "" +":issue:`24285`: Fixed regression that prevented importing extension modules " +"from inside packages. Patch by Petr Viktorin." +msgstr "" + +#: ../../../build/NEWS:26171 +msgid ":issue:`23247`: Fix a crash in the StreamWriter.reset() of CJK codecs." +msgstr "" + +#: ../../../build/NEWS:26173 +msgid "" +":issue:`24270`: Add math.isclose() and cmath.isclose() functions as per " +":pep:`485`. Contributed by Chris Barker and Tal Einat." +msgstr "" + +#: ../../../build/NEWS:26176 +msgid "" +":issue:`5633`: Fixed timeit when the statement is a string and the setup is " +"not." +msgstr "" + +#: ../../../build/NEWS:26179 +msgid "" +":issue:`24326`: Fixed audioop.ratecv() with non-default weightB argument. " +"Original patch by David Moore." +msgstr "" + +#: ../../../build/NEWS:26182 +msgid ":issue:`16991`: Add a C implementation of OrderedDict." +msgstr "" + +#: ../../../build/NEWS:26184 +msgid "" +":issue:`23934`: Fix inspect.signature to fail correctly for builtin types " +"lacking signature information. Initial patch by James Powell." +msgstr "" + +#: ../../../build/NEWS:26189 +msgid "Python 3.5.0 beta 1" +msgstr "Python 3.5.0 beta 1" + +#: ../../../build/NEWS:26191 +msgid "*Release date: 2015-05-24*" +msgstr "*发布日期: 2015-05-24*" + +#: ../../../build/NEWS:26196 +msgid ":issue:`24276`: Fixed optimization of property descriptor getter." +msgstr "" + +#: ../../../build/NEWS:26198 +msgid "" +":issue:`24268`: PEP 489: Multi-phase extension module initialization. Patch " +"by Petr Viktorin." +msgstr "" + +#: ../../../build/NEWS:26201 +msgid "" +":issue:`23955`: Add pyvenv.cfg option to suppress registry/environment " +"lookup for generating sys.path on Windows." +msgstr "" + +#: ../../../build/NEWS:26204 +msgid "" +":issue:`24257`: Fixed system error in the comparison of faked " +"types.SimpleNamespace." +msgstr "" + +#: ../../../build/NEWS:26207 +msgid "" +":issue:`22939`: Fixed integer overflow in iterator object. Patch by Clement" +" Rouault." +msgstr "" + +#: ../../../build/NEWS:26210 +msgid "" +":issue:`23985`: Fix a possible buffer overrun when deleting a slice from the" +" front of a bytearray and then appending some other bytes data." +msgstr "" + +#: ../../../build/NEWS:26213 +msgid "" +":issue:`24102`: Fixed exception type checking in standard error handlers." +msgstr "" + +#: ../../../build/NEWS:26215 +msgid ":issue:`15027`: The UTF-32 encoder is now 3x to 7x faster." +msgstr "" + +#: ../../../build/NEWS:26217 +msgid "" +":issue:`23290`: Optimize set_merge() for cases where the target is empty. " +"(Contributed by Serhiy Storchaka.)" +msgstr "" + +#: ../../../build/NEWS:26220 +msgid ":issue:`2292`: PEP 448: Additional Unpacking Generalizations." +msgstr "" + +#: ../../../build/NEWS:26222 +msgid "" +":issue:`24096`: Make warnings.warn_explicit more robust against mutation of " +"the warnings.filters list." +msgstr "" + +#: ../../../build/NEWS:26225 +msgid "" +":issue:`23996`: Avoid a crash when a delegated generator raises an " +"unnormalized StopIteration exception. Patch by Stefan Behnel." +msgstr "" + +#: ../../../build/NEWS:26228 +msgid "" +":issue:`23910`: Optimize property() getter calls. Patch by Joe Jevnik." +msgstr "" + +#: ../../../build/NEWS:26230 +msgid "" +":issue:`23911`: Move path-based importlib bootstrap code to a separate " +"frozen module." +msgstr "" + +#: ../../../build/NEWS:26233 +msgid ":issue:`24192`: Fix namespace package imports." +msgstr "" + +#: ../../../build/NEWS:26235 +msgid "" +":issue:`24022`: Fix tokenizer crash when processing undecodable source code." +msgstr "" + +#: ../../../build/NEWS:26237 +msgid "" +":issue:`9951`: Added a hex() method to bytes, bytearray, and memoryview." +msgstr "" + +#: ../../../build/NEWS:26239 +msgid "" +":issue:`22906`: PEP 479: Change StopIteration handling inside generators." +msgstr "" + +#: ../../../build/NEWS:26241 +msgid ":issue:`24017`: PEP 492: Coroutines with async and await syntax." +msgstr "" + +#: ../../../build/NEWS:26246 +msgid "" +":issue:`14373`: Added C implementation of functools.lru_cache(). Based on " +"patches by Matt Joiner and Alexey Kachayev." +msgstr "" + +#: ../../../build/NEWS:26249 +msgid "" +":issue:`24230`: The tempfile module now accepts bytes for prefix, suffix and" +" dir parameters and returns bytes in such situations (matching the os module" +" APIs)." +msgstr "" + +#: ../../../build/NEWS:26253 +msgid "" +":issue:`22189`: collections.UserString now supports __getnewargs__(), " +"__rmod__(), casefold(), format_map(), isprintable(), and maketrans(). Patch " +"by Joe Jevnik." +msgstr "" + +#: ../../../build/NEWS:26257 +msgid "" +":issue:`24244`: Prevents termination when an invalid format string is " +"encountered on Windows in strftime." +msgstr "" + +#: ../../../build/NEWS:26260 +msgid ":issue:`23973`: PEP 484: Add the typing module." +msgstr "" + +#: ../../../build/NEWS:26262 +msgid "" +":issue:`23086`: The collections.abc.Sequence() abstract base class added " +"*start* and *stop* parameters to the index() mixin. Patch by Devin " +"Jeanpierre." +msgstr "" + +#: ../../../build/NEWS:26266 +msgid "" +":issue:`20035`: Replaced the ``tkinter._fix`` module used for setting up the" +" Tcl/Tk environment on Windows with a private function in the ``_tkinter`` " +"module that makes no permanent changes to the environment." +msgstr "" + +#: ../../../build/NEWS:26270 +msgid "" +":issue:`24257`: Fixed segmentation fault in sqlite3.Row constructor with " +"faked cursor type." +msgstr "" + +#: ../../../build/NEWS:26273 +msgid "" +":issue:`15836`: assertRaises(), assertRaisesRegex(), assertWarns() and " +"assertWarnsRegex() assertments now check the type of the first argument to " +"prevent possible user error. Based on patch by Daniel Wagner-Hall." +msgstr "" + +#: ../../../build/NEWS:26277 +msgid "" +":issue:`9858`: Add missing method stubs to _io.RawIOBase. Patch by Laura " +"Rupprecht." +msgstr "" + +#: ../../../build/NEWS:26280 +msgid "" +":issue:`22955`: attrgetter, itemgetter and methodcaller objects in the " +"operator module now support pickling. Added readable and evaluable repr for" +" these objects. Based on patch by Josh Rosenberg." +msgstr "" + +#: ../../../build/NEWS:26284 +msgid "" +":issue:`22107`: tempfile.gettempdir() and tempfile.mkdtemp() now try again " +"when a directory with the chosen name already exists on Windows as well as " +"on Unix. tempfile.mkstemp() now fails early if parent directory is not valid" +" (not exists or is a file) on Windows." +msgstr "" + +#: ../../../build/NEWS:26289 +msgid "" +":issue:`23780`: Improved error message in os.path.join() with single " +"argument." +msgstr "" + +#: ../../../build/NEWS:26291 +msgid "" +":issue:`6598`: Increased time precision and random number range in " +"email.utils.make_msgid() to strengthen the uniqueness of the message ID." +msgstr "" + +#: ../../../build/NEWS:26294 +msgid "" +":issue:`24091`: Fixed various crashes in corner cases in C implementation of" +" ElementTree." +msgstr "" + +#: ../../../build/NEWS:26297 +msgid "" +":issue:`21931`: msilib.FCICreate() now raises TypeError in the case of a bad" +" argument instead of a ValueError with a bogus FCI error number. Patch by " +"Jeffrey Armstrong." +msgstr "" + +#: ../../../build/NEWS:26301 +msgid ":issue:`13866`: *quote_via* argument added to urllib.parse.urlencode." +msgstr "" + +#: ../../../build/NEWS:26303 +msgid "" +":issue:`20098`: New mangle_from policy option for email, default True for " +"compat32, but False for all other policies." +msgstr "" + +#: ../../../build/NEWS:26306 +msgid "" +":issue:`24211`: The email library now supports RFC 6532: it can generate " +"headers using utf-8 instead of encoded words." +msgstr "" + +#: ../../../build/NEWS:26309 +msgid ":issue:`16314`: Added support for the LZMA compression in distutils." +msgstr "" + +#: ../../../build/NEWS:26311 +msgid ":issue:`21804`: poplib now supports RFC 6856 (UTF8)." +msgstr "" + +#: ../../../build/NEWS:26313 +msgid ":issue:`18682`: Optimized pprint functions for builtin scalar types." +msgstr "" + +#: ../../../build/NEWS:26315 +msgid ":issue:`22027`: smtplib now supports RFC 6531 (SMTPUTF8)." +msgstr "" + +#: ../../../build/NEWS:26317 +msgid "" +":issue:`23488`: Random generator objects now consume 2x less memory on " +"64-bit." +msgstr "" + +#: ../../../build/NEWS:26319 +msgid "" +":issue:`1322`: platform.dist() and platform.linux_distribution() functions " +"are now deprecated. Initial patch by Vajrasky Kok." +msgstr "" + +#: ../../../build/NEWS:26322 +msgid "" +":issue:`22486`: Added the math.gcd() function. The fractions.gcd() function" +" now is deprecated. Based on patch by Mark Dickinson." +msgstr "" + +#: ../../../build/NEWS:26325 +msgid "" +":issue:`24064`: Property() docstrings are now writeable. (Patch by Berker " +"Peksag.)" +msgstr "" + +#: ../../../build/NEWS:26328 +msgid ":issue:`22681`: Added support for the koi8_t encoding." +msgstr "" + +#: ../../../build/NEWS:26330 +msgid ":issue:`22682`: Added support for the kz1048 encoding." +msgstr "" + +#: ../../../build/NEWS:26332 +msgid "" +":issue:`23796`: peek and read1 methods of BufferedReader now raise " +"ValueError if they called on a closed object. Patch by John Hergenroeder." +msgstr "" + +#: ../../../build/NEWS:26335 +msgid "" +":issue:`21795`: smtpd now supports the 8BITMIME extension whenever the new " +"*decode_data* constructor argument is set to False." +msgstr "" + +#: ../../../build/NEWS:26338 +msgid "" +":issue:`24155`: optimize heapq.heapify() for better cache performance when " +"heapifying large lists." +msgstr "" + +#: ../../../build/NEWS:26341 +msgid "" +":issue:`21800`: imaplib now supports RFC 5161 (enable), RFC 6855 " +"(utf8/internationalized email) and automatically encodes non-ASCII usernames" +" and passwords to UTF8." +msgstr "" + +#: ../../../build/NEWS:26345 +msgid "" +":issue:`20274`: When calling a _sqlite.Connection, it now complains if " +"passed any keyword arguments. Previously it silently ignored them." +msgstr "" + +#: ../../../build/NEWS:26348 +msgid "" +":issue:`20274`: Remove ignored and erroneous \"kwargs\" parameters from " +"three METH_VARARGS methods on _sqlite.Connection." +msgstr "" + +#: ../../../build/NEWS:26351 +msgid "" +":issue:`24134`: assertRaises(), assertRaisesRegex(), assertWarns() and " +"assertWarnsRegex() checks now emits a deprecation warning when callable is " +"None or keyword arguments except msg is passed in the context manager mode." +msgstr "" + +#: ../../../build/NEWS:26356 +msgid "" +":issue:`24018`: Add a collections.abc.Generator abstract base class. " +"Contributed by Stefan Behnel." +msgstr "" + +#: ../../../build/NEWS:26359 +msgid "" +":issue:`23880`: Tkinter's getint() and getdouble() now support Tcl_Obj. " +"Tkinter's getdouble() now supports any numbers (in particular int)." +msgstr "" + +#: ../../../build/NEWS:26362 +msgid "" +":issue:`22619`: Added negative limit support in the traceback module. Based " +"on patch by Dmitry Kazakov." +msgstr "" + +#: ../../../build/NEWS:26365 +msgid "" +":issue:`24094`: Fix possible crash in json.encode with poorly behaved dict " +"subclasses." +msgstr "" + +#: ../../../build/NEWS:26368 +msgid "" +":issue:`9246`: On POSIX, os.getcwd() now supports paths longer than 1025 " +"bytes. Patch written by William Orr." +msgstr "" + +#: ../../../build/NEWS:26371 +msgid "" +":issue:`17445`: add difflib.diff_bytes() to support comparison of byte " +"strings (fixes a regression from Python 2)." +msgstr "" + +#: ../../../build/NEWS:26374 +msgid "" +":issue:`23917`: Fall back to sequential compilation when ProcessPoolExecutor" +" doesn't exist. Patch by Claudiu Popa." +msgstr "" + +#: ../../../build/NEWS:26377 +msgid "" +":issue:`23008`: Fixed resolving attributes with boolean value is False in " +"pydoc." +msgstr "" + +#: ../../../build/NEWS:26380 +msgid "" +"Fix asyncio issue 235: LifoQueue and PriorityQueue's put didn't increment " +"unfinished tasks (this bug was introduced when JoinableQueue was merged with" +" Queue)." +msgstr "" + +#: ../../../build/NEWS:26384 +msgid "" +":issue:`23908`: os functions now reject paths with embedded null character " +"on Windows instead of silently truncating them." +msgstr "" + +#: ../../../build/NEWS:26387 +msgid "" +":issue:`23728`: binascii.crc_hqx() could return an integer outside of the " +"range 0-0xffff for empty data." +msgstr "" + +#: ../../../build/NEWS:26390 +msgid "" +":issue:`23887`: urllib.error.HTTPError now has a proper repr() " +"representation. Patch by Berker Peksag." +msgstr "" + +#: ../../../build/NEWS:26393 +msgid "" +"asyncio: New event loop APIs: set_task_factory() and get_task_factory()." +msgstr "" + +#: ../../../build/NEWS:26395 +msgid "asyncio: async() function is deprecated in favour of ensure_future()." +msgstr "" + +#: ../../../build/NEWS:26397 +msgid "" +":issue:`24178`: asyncio.Lock, Condition, Semaphore, and BoundedSemaphore " +"support new 'async with' syntax. Contributed by Yury Selivanov." +msgstr "" + +#: ../../../build/NEWS:26400 +msgid "" +":issue:`24179`: Support 'async for' for asyncio.StreamReader. Contributed by" +" Yury Selivanov." +msgstr "" + +#: ../../../build/NEWS:26403 +msgid "" +":issue:`24184`: Add AsyncIterator and AsyncIterable ABCs to collections.abc." +" Contributed by Yury Selivanov." +msgstr "" + +#: ../../../build/NEWS:26406 +msgid "" +":issue:`22547`: Implement informative __repr__ for inspect.BoundArguments. " +"Contributed by Yury Selivanov." +msgstr "" + +#: ../../../build/NEWS:26409 +msgid "" +":issue:`24190`: Implement inspect.BoundArgument.apply_defaults() method. " +"Contributed by Yury Selivanov." +msgstr "" + +#: ../../../build/NEWS:26412 +msgid "" +":issue:`20691`: Add 'follow_wrapped' argument to " +"inspect.Signature.from_callable() and inspect.signature(). Contributed by " +"Yury Selivanov." +msgstr "" + +#: ../../../build/NEWS:26416 +msgid "" +":issue:`24248`: Deprecate inspect.Signature.from_function() and " +"inspect.Signature.from_builtin()." +msgstr "" + +#: ../../../build/NEWS:26419 +msgid "" +":issue:`23898`: Fix inspect.classify_class_attrs() to support attributes " +"with overloaded __eq__ and __bool__. Patch by Mike Bayer." +msgstr "" + +#: ../../../build/NEWS:26422 +msgid "" +":issue:`24298`: Fix inspect.signature() to correctly unwrap wrappers around " +"bound methods." +msgstr "" + +#: ../../../build/NEWS:26428 +msgid "" +":issue:`23184`: remove unused names and imports in idlelib. Initial patch by" +" Al Sweigart." +msgstr "" + +#: ../../../build/NEWS:26434 +msgid "" +":issue:`21520`: test_zipfile no longer fails if the word 'bad' appears " +"anywhere in the name of the current directory." +msgstr "" + +#: ../../../build/NEWS:26437 +msgid "" +":issue:`9517`: Move script_helper into the support package. Patch by " +"Christie Wilson." +msgstr "" + +#: ../../../build/NEWS:26443 +msgid "" +":issue:`22155`: Add File Handlers subsection with createfilehandler to " +"tkinter doc. Remove obsolete example from FAQ. Patch by Martin Panter." +msgstr "" + +#: ../../../build/NEWS:26446 +msgid "" +":issue:`24029`: Document the name binding behavior for submodule imports." +msgstr "" + +#: ../../../build/NEWS:26448 +msgid ":issue:`24077`: Fix typo in man page for -I command option: -s, not -S" +msgstr "" + +#: ../../../build/NEWS:26453 +msgid "" +":issue:`24000`: Improved Argument Clinic's mapping of converters to legacy " +"\"format units\". Updated the documentation to match." +msgstr "" + +#: ../../../build/NEWS:26456 +msgid "" +":issue:`24001`: Argument Clinic converters now use accept={type} instead of " +"types={'type'} to specify the types the converter accepts." +msgstr "" + +#: ../../../build/NEWS:26459 +msgid ":issue:`23330`: h2py now supports arbitrary filenames in #include." +msgstr "" + +#: ../../../build/NEWS:26461 +msgid ":issue:`24031`: make patchcheck now supports git checkouts, too." +msgstr "" + +#: ../../../build/NEWS:26465 +msgid "Python 3.5.0 alpha 4" +msgstr "Python 3.5.0 alpha 4" + +#: ../../../build/NEWS:26467 +msgid "*Release date: 2015-04-19*" +msgstr "*发布日期: 2015-04-19*" + +#: ../../../build/NEWS:26472 +msgid "" +":issue:`22980`: Under Linux, GNU/KFreeBSD and the Hurd, C extensions now " +"include the architecture triplet in the extension name, to make it easy to " +"test builds for different ABIs in the same working tree. Under OS X, the " +"extension name now includes :pep:`3149`-style information." +msgstr "" + +#: ../../../build/NEWS:26477 +msgid "" +":issue:`22631`: Added Linux-specific socket constant CAN_RAW_FD_FRAMES. " +"Patch courtesy of Joe Jevnik." +msgstr "" + +#: ../../../build/NEWS:26480 +msgid ":issue:`23731`: Implement :pep:`488`: removal of .pyo files." +msgstr "" + +#: ../../../build/NEWS:26482 +msgid "" +":issue:`23726`: Don't enable GC for user subclasses of non-GC types that " +"don't add any new fields. Patch by Eugene Toder." +msgstr "" + +#: ../../../build/NEWS:26485 +msgid "" +":issue:`23309`: Avoid a deadlock at shutdown if a daemon thread is aborted " +"while it is holding a lock to a buffered I/O object, and the main thread " +"tries to use the same I/O object (typically stdout or stderr). A fatal " +"error is emitted instead." +msgstr "" + +#: ../../../build/NEWS:26490 +msgid "" +":issue:`22977`: Fixed formatting Windows error messages on Wine. Patch by " +"Martin Panter." +msgstr "" + +#: ../../../build/NEWS:26493 +msgid "" +":issue:`23466`: %c, %o, %x, and %X in bytes formatting now raise TypeError " +"on non-integer input." +msgstr "" + +#: ../../../build/NEWS:26496 +msgid "" +":issue:`24044`: Fix possible null pointer dereference in list.sort in out of" +" memory conditions." +msgstr "" + +#: ../../../build/NEWS:26499 +msgid "" +":issue:`21354`: PyCFunction_New function is exposed by python DLL again." +msgstr "" + +#: ../../../build/NEWS:26504 +msgid "" +":issue:`23840`: tokenize.open() now closes the temporary binary file on " +"error to fix a resource warning." +msgstr "" + +#: ../../../build/NEWS:26507 +msgid "" +":issue:`16914`: new debuglevel 2 in smtplib adds timestamps to debug output." +msgstr "" + +#: ../../../build/NEWS:26509 +msgid "" +":issue:`7159`: urllib.request now supports sending auth credentials " +"automatically after the first 401. This enhancement is a superset of the " +"enhancement from :issue:`19494` and supersedes that change." +msgstr "" + +#: ../../../build/NEWS:26513 +msgid "" +":issue:`23703`: Fix a regression in urljoin() introduced in 901e4e52b20a. " +"Patch by Demian Brecht." +msgstr "" + +#: ../../../build/NEWS:26516 +msgid ":issue:`4254`: Adds _curses.update_lines_cols(). Patch by Arnon Yaari" +msgstr "" + +#: ../../../build/NEWS:26518 +msgid "" +":issue:`19933`: Provide default argument for ndigits in round. Patch by " +"Vajrasky Kok." +msgstr "" + +#: ../../../build/NEWS:26521 +msgid "" +":issue:`23193`: Add a numeric_owner parameter to tarfile.TarFile.extract and" +" tarfile.TarFile.extractall. Patch by Michael Vogt and Eric Smith." +msgstr "" + +#: ../../../build/NEWS:26524 +msgid "" +":issue:`23342`: Add a subprocess.run() function than returns a CalledProcess" +" instance for a more consistent API than the existing call* functions." +msgstr "" + +#: ../../../build/NEWS:26527 +msgid "" +":issue:`21217`: inspect.getsourcelines() now tries to compute the start and " +"end lines from the code object, fixing an issue when a lambda function is " +"used as decorator argument. Patch by Thomas Ballinger and Allison Kaptur." +msgstr "" + +#: ../../../build/NEWS:26531 +msgid ":issue:`24521`: Fix possible integer overflows in the pickle module." +msgstr "" + +#: ../../../build/NEWS:26533 +msgid ":issue:`22931`: Allow '[' and ']' in cookie values." +msgstr "" + +#: ../../../build/NEWS:26535 +msgid "" +"The keywords attribute of functools.partial is now always a dictionary." +msgstr "" + +#: ../../../build/NEWS:26537 +msgid "" +":issue:`23811`: Add missing newline to the PyCompileError error message. " +"Patch by Alex Shkop." +msgstr "" + +#: ../../../build/NEWS:26540 +msgid "" +":issue:`21116`: Avoid blowing memory when allocating a multiprocessing " +"shared array that's larger than 50% of the available RAM. Patch by Médéric " +"Boquien." +msgstr "" + +#: ../../../build/NEWS:26544 +msgid "" +":issue:`22982`: Improve BOM handling when seeking to multiple positions of a" +" writable text file." +msgstr "" + +#: ../../../build/NEWS:26547 +msgid ":issue:`23464`: Removed deprecated asyncio JoinableQueue." +msgstr "" + +#: ../../../build/NEWS:26549 +msgid "" +":issue:`23529`: Limit the size of decompressed data when reading from " +"GzipFile, BZ2File or LZMAFile. This defeats denial of service attacks using" +" compressed bombs (i.e. compressed payloads which decompress to a huge " +"size). Patch by Martin Panter and Nikolaus Rath." +msgstr "" + +#: ../../../build/NEWS:26554 +msgid ":issue:`21859`: Added Python implementation of io.FileIO." +msgstr "" + +#: ../../../build/NEWS:26556 +msgid "" +":issue:`23865`: close() methods in multiple modules now are idempotent and " +"more robust at shutdown. If they need to release multiple resources, all are" +" released even if errors occur." +msgstr "" + +#: ../../../build/NEWS:26560 +msgid "" +":issue:`23400`: Raise same exception on both Python 2 and 3 if sem_open is " +"not available. Patch by Davin Potts." +msgstr "" + +#: ../../../build/NEWS:26563 +msgid "" +":issue:`10838`: The subprocess now module includes SubprocessError and " +"TimeoutError in its list of exported names for the users wild enough to use " +"``from subprocess import *``." +msgstr "" + +#: ../../../build/NEWS:26567 +msgid "" +":issue:`23411`: Added DefragResult, ParseResult, SplitResult, " +"DefragResultBytes, ParseResultBytes, and SplitResultBytes to " +"urllib.parse.__all__. Patch by Martin Panter." +msgstr "" + +#: ../../../build/NEWS:26571 +msgid "" +":issue:`23881`: urllib.request.ftpwrapper constructor now closes the socket " +"if the FTP connection failed to fix a ResourceWarning." +msgstr "" + +#: ../../../build/NEWS:26574 +msgid "" +":issue:`23853`: :meth:`socket.socket.sendall` does no more reset the socket " +"timeout each time data is sent successfully. The socket timeout is now the " +"maximum total duration to send all data." +msgstr "" + +#: ../../../build/NEWS:26578 +msgid "" +":issue:`22721`: An order of multiline pprint output of set or dict " +"containing orderable and non-orderable elements no longer depends on " +"iteration order of set or dict." +msgstr "" + +#: ../../../build/NEWS:26582 +msgid "" +":issue:`15133`: _tkinter.tkapp.getboolean() now supports Tcl_Obj and always " +"returns bool. tkinter.BooleanVar now validates input values (accepted bool, " +"int, str, and Tcl_Obj). tkinter.BooleanVar.get() now always returns bool." +msgstr "" + +#: ../../../build/NEWS:26587 +msgid ":issue:`10590`: xml.sax.parseString() now supports string argument." +msgstr "" + +#: ../../../build/NEWS:26589 +msgid "" +":issue:`23338`: Fixed formatting ctypes error messages on Cygwin. Patch by " +"Makoto Kato." +msgstr "" + +#: ../../../build/NEWS:26592 +msgid ":issue:`15582`: inspect.getdoc() now follows inheritance chains." +msgstr "" + +#: ../../../build/NEWS:26594 +msgid "" +":issue:`2175`: SAX parsers now support a character stream of InputSource " +"object." +msgstr "" + +#: ../../../build/NEWS:26597 +msgid "" +":issue:`16840`: Tkinter now supports 64-bit integers added in Tcl 8.4 and " +"arbitrary precision integers added in Tcl 8.5." +msgstr "" + +#: ../../../build/NEWS:26600 +msgid "" +":issue:`23834`: Fix socket.sendto(), use the C Py_ssize_t type to store the " +"result of sendto() instead of the C int type." +msgstr "" + +#: ../../../build/NEWS:26603 +msgid "" +":issue:`23618`: :meth:`socket.socket.connect` now waits until the connection" +" completes instead of raising :exc:`InterruptedError` if the connection is " +"interrupted by signals, signal handlers don't raise an exception and the " +"socket is blocking or has a timeout. :meth:`socket.socket.connect` still " +"raise :exc:`InterruptedError` for non-blocking sockets." +msgstr "" + +#: ../../../build/NEWS:26609 +msgid ":issue:`21526`: Tkinter now supports new boolean type in Tcl 8.5." +msgstr "" + +#: ../../../build/NEWS:26611 +msgid "" +":issue:`23836`: Fix the faulthandler module to handle reentrant calls to its" +" signal handlers." +msgstr "" + +#: ../../../build/NEWS:26614 +msgid "" +":issue:`23838`: linecache now clears the cache and returns an empty result " +"on MemoryError." +msgstr "" + +#: ../../../build/NEWS:26617 +msgid "" +":issue:`10395`: Added os.path.commonpath(). Implemented in posixpath and " +"ntpath. Based on patch by Rafik Draoui." +msgstr "" + +#: ../../../build/NEWS:26620 +msgid "" +":issue:`23611`: Serializing more \"lookupable\" objects (such as unbound " +"methods or nested classes) now are supported with pickle protocols < 4." +msgstr "" + +#: ../../../build/NEWS:26623 +msgid ":issue:`13583`: sqlite3.Row now supports slice indexing." +msgstr "" + +#: ../../../build/NEWS:26625 +msgid "" +":issue:`18473`: Fixed 2to3 and 3to2 compatible pickle mappings. Fixed " +"ambiguous reverse mappings. Added many new mappings. Import mapping is no " +"longer applied to modules already mapped with full name mapping." +msgstr "" + +#: ../../../build/NEWS:26629 +msgid "" +":issue:`23485`: select.select() is now retried automatically with the " +"recomputed timeout when interrupted by a signal, except if the signal " +"handler raises an exception. This change is part of the :pep:`475`." +msgstr "" + +#: ../../../build/NEWS:26633 +msgid "" +":issue:`23752`: When built from an existing file descriptor, io.FileIO() now" +" only calls fstat() once. Before fstat() was called twice, which was not " +"necessary." +msgstr "" + +#: ../../../build/NEWS:26637 +msgid "" +":issue:`23704`: collections.deque() objects now support __add__, __mul__, " +"and __imul__()." +msgstr "" + +#: ../../../build/NEWS:26640 +msgid "" +":issue:`23171`: csv.Writer.writerow() now supports arbitrary iterables." +msgstr "" + +#: ../../../build/NEWS:26642 +msgid "" +":issue:`23745`: The new email header parser now handles duplicate MIME " +"parameter names without error, similar to how get_param behaves." +msgstr "" + +#: ../../../build/NEWS:26645 +msgid "" +":issue:`22117`: Fix os.utime(), it now rounds the timestamp towards minus " +"infinity (-inf) instead of rounding towards zero." +msgstr "" + +#: ../../../build/NEWS:26648 +msgid "" +":issue:`23310`: Fix MagicMock's initializer to work with __methods__, just " +"like configure_mock(). Patch by Kasia Jachim." +msgstr "" + +#: ../../../build/NEWS:26654 +msgid "" +":issue:`23817`: FreeBSD now uses \"1.0\" in the SOVERSION as other operating" +" systems, instead of just \"1\"." +msgstr "" + +#: ../../../build/NEWS:26657 +msgid "" +":issue:`23501`: Argument Clinic now generates code into separate files by " +"default." +msgstr "" + +#: ../../../build/NEWS:26663 +msgid "" +":issue:`23799`: Added test.support.start_threads() for running and cleaning " +"up multiple threads." +msgstr "" + +#: ../../../build/NEWS:26666 +msgid "" +":issue:`22390`: test.regrtest now emits a warning if temporary files or " +"directories are left after running a test." +msgstr "" + +#: ../../../build/NEWS:26672 +msgid "" +":issue:`18128`: pygettext now uses standard +NNNN format in the POT-" +"Creation-Date header." +msgstr "" + +#: ../../../build/NEWS:26675 +msgid "" +":issue:`23935`: Argument Clinic's understanding of format units accepting " +"bytes, bytearrays, and buffers is now consistent with both the documentation" +" and the implementation." +msgstr "" + +#: ../../../build/NEWS:26679 +msgid "" +":issue:`23944`: Argument Clinic now wraps long impl prototypes at column 78." +msgstr "" + +#: ../../../build/NEWS:26681 +msgid "" +":issue:`20586`: Argument Clinic now ensures that functions without " +"docstrings have signatures." +msgstr "" + +#: ../../../build/NEWS:26684 +msgid "" +":issue:`23492`: Argument Clinic now generates argument parsing code with " +"PyArg_Parse instead of PyArg_ParseTuple if possible." +msgstr "" + +#: ../../../build/NEWS:26687 +msgid "" +":issue:`23500`: Argument Clinic is now smarter about generating the " +"\"#ifndef\" (empty) definition of the methoddef macro: it's only generated " +"once, even if Argument Clinic processes the same symbol multiple times, and " +"it's emitted at the end of all processing rather than immediately after the " +"first use." +msgstr "" + +#: ../../../build/NEWS:26696 +msgid "" +":issue:`23998`: PyImport_ReInitLock() now checks for lock allocation error" +msgstr "" + +#: ../../../build/NEWS:26700 +msgid "Python 3.5.0 alpha 3" +msgstr "Python 3.5.0 alpha 3" + +#: ../../../build/NEWS:26702 +msgid "*Release date: 2015-03-28*" +msgstr "*发布日期: 2015-03-28*" + +#: ../../../build/NEWS:26707 +msgid "" +":issue:`23573`: Increased performance of string search operations (str.find," +" str.index, str.count, the in operator, str.split, str.partition) with " +"arguments of different kinds (UCS1, UCS2, UCS4)." +msgstr "" + +#: ../../../build/NEWS:26711 +msgid "" +":issue:`23753`: Python doesn't support anymore platforms without stat() or " +"fstat(), these functions are always required." +msgstr "" + +#: ../../../build/NEWS:26714 +msgid "" +":issue:`23681`: The -b option now affects comparisons of bytes with int." +msgstr "" + +#: ../../../build/NEWS:26716 +msgid "" +":issue:`23632`: Memoryviews now allow tuple indexing (including for multi-" +"dimensional memoryviews)." +msgstr "" + +#: ../../../build/NEWS:26719 +msgid ":issue:`23192`: Fixed generator lambdas. Patch by Bruno Cauet." +msgstr "" + +#: ../../../build/NEWS:26721 +msgid "" +":issue:`23629`: Fix the default __sizeof__ implementation for variable-sized" +" objects." +msgstr "" + +#: ../../../build/NEWS:26727 +msgid "" +":issue:`14260`: The groupindex attribute of regular expression pattern " +"object now is non-modifiable mapping." +msgstr "" + +#: ../../../build/NEWS:26730 +msgid "" +":issue:`23792`: Ignore KeyboardInterrupt when the pydoc pager is active. " +"This mimics the behavior of the standard unix pagers, and prevents pipepager" +" from shutting down while the pager itself is still running." +msgstr "" + +#: ../../../build/NEWS:26734 +msgid "" +":issue:`23775`: pprint() of OrderedDict now outputs the same representation " +"as repr()." +msgstr "" + +#: ../../../build/NEWS:26737 +msgid ":issue:`23765`: Removed IsBadStringPtr calls in ctypes" +msgstr "" + +#: ../../../build/NEWS:26739 +msgid ":issue:`22364`: Improved some re error messages using regex for hints." +msgstr "" + +#: ../../../build/NEWS:26741 +msgid "" +":issue:`23742`: ntpath.expandvars() no longer loses unbalanced single " +"quotes." +msgstr "" + +#: ../../../build/NEWS:26743 +msgid "" +":issue:`21717`: The zipfile.ZipFile.open function now supports 'x' " +"(exclusive creation) mode." +msgstr "" + +#: ../../../build/NEWS:26746 +msgid "" +":issue:`21802`: The reader in BufferedRWPair now is closed even when closing" +" writer failed in BufferedRWPair.close()." +msgstr "" + +#: ../../../build/NEWS:26749 +msgid "" +":issue:`23622`: Unknown escapes in regular expressions that consist of " +"``'\\'`` and ASCII letter now raise a deprecation warning and will be " +"forbidden in Python 3.6." +msgstr "" + +#: ../../../build/NEWS:26753 +msgid "" +":issue:`23671`: string.Template now allows specifying the \"self\" parameter" +" as a keyword argument. string.Formatter now allows specifying the \"self\"" +" and the \"format_string\" parameters as keyword arguments." +msgstr "" + +#: ../../../build/NEWS:26757 +msgid ":issue:`23502`: The pprint module now supports mapping proxies." +msgstr "" + +#: ../../../build/NEWS:26759 +msgid ":issue:`17530`: pprint now wraps long bytes objects and bytearrays." +msgstr "" + +#: ../../../build/NEWS:26761 +msgid "" +":issue:`22687`: Fixed some corner cases in breaking words in tetxtwrap. Got " +"rid of quadratic complexity in breaking long words." +msgstr "" + +#: ../../../build/NEWS:26764 +msgid "" +":issue:`4727`: The copy module now uses pickle protocol 4 (PEP 3154) and " +"supports copying of instances of classes whose __new__ method takes keyword-" +"only arguments." +msgstr "" + +#: ../../../build/NEWS:26768 +msgid "" +":issue:`23491`: Added a zipapp module to support creating executable zip " +"file archives of Python code. Registered \".pyz\" and \".pyzw\" extensions " +"on Windows for these archives (PEP 441)." +msgstr "" + +#: ../../../build/NEWS:26772 +msgid "" +":issue:`23657`: Avoid explicit checks for str in zipapp, adding support for " +"pathlib.Path objects as arguments." +msgstr "" + +#: ../../../build/NEWS:26775 +msgid "" +":issue:`23688`: Added support of arbitrary bytes-like objects and avoided " +"unnecessary copying of memoryview in gzip.GzipFile.write(). Original patch " +"by Wolfgang Maier." +msgstr "" + +#: ../../../build/NEWS:26779 +msgid "" +":issue:`23252`: Added support for writing ZIP files to unseekable streams." +msgstr "" + +#: ../../../build/NEWS:26781 +msgid "" +":issue:`23647`: Increase imaplib's MAXLINE to accommodate modern mailbox " +"sizes." +msgstr "" + +#: ../../../build/NEWS:26783 +msgid "" +":issue:`23539`: If body is None, http.client.HTTPConnection.request now sets" +" Content-Length to 0 for PUT, POST, and PATCH headers to avoid 411 errors " +"from some web servers." +msgstr "" + +#: ../../../build/NEWS:26787 +msgid "" +":issue:`22351`: The nntplib.NNTP constructor no longer leaves the connection" +" and socket open until the garbage collector cleans them up. Patch by " +"Martin Panter." +msgstr "" + +#: ../../../build/NEWS:26791 +msgid "" +":issue:`23704`: collections.deque() objects now support methods for index()," +" insert(), and copy(). This allows deques to be registered as a " +"MutableSequence and it improves their substitutability for lists." +msgstr "" + +#: ../../../build/NEWS:26795 +msgid "" +":issue:`23715`: :func:`signal.sigwaitinfo` and :func:`signal.sigtimedwait` " +"are now retried when interrupted by a signal not in the *sigset* parameter, " +"if the signal handler does not raise an exception. signal.sigtimedwait() " +"recomputes the timeout with a monotonic clock when it is retried." +msgstr "" + +#: ../../../build/NEWS:26800 +msgid "" +":issue:`23001`: Few functions in modules mmap, ossaudiodev, socket, ssl, and" +" codecs, that accepted only read-only bytes-like object now accept writable " +"bytes-like object too." +msgstr "" + +#: ../../../build/NEWS:26804 +msgid "" +":issue:`23646`: If time.sleep() is interrupted by a signal, the sleep is now" +" retried with the recomputed delay, except if the signal handler raises an " +"exception (PEP 475)." +msgstr "" + +#: ../../../build/NEWS:26808 +msgid "" +":issue:`23136`: _strptime now uniformly handles all days in week 0, " +"including Dec 30 of previous year. Based on patch by Jim Carroll." +msgstr "" + +#: ../../../build/NEWS:26811 +msgid "" +":issue:`23700`: Iterator of NamedTemporaryFile now keeps a reference to " +"NamedTemporaryFile instance. Patch by Bohuslav Kabrda." +msgstr "" + +#: ../../../build/NEWS:26814 +msgid "" +":issue:`22903`: The fake test case created by unittest.loader when it fails " +"importing a test module is now picklable." +msgstr "" + +#: ../../../build/NEWS:26817 +msgid "" +":issue:`22181`: On Linux, os.urandom() now uses the new getrandom() syscall " +"if available, syscall introduced in the Linux kernel 3.17. It is more " +"reliable and more secure, because it avoids the need of a file descriptor " +"and waits until the kernel has enough entropy." +msgstr "" + +#: ../../../build/NEWS:26822 +msgid "" +":issue:`2211`: Updated the implementation of the http.cookies.Morsel class. " +"Setting attributes key, value and coded_value directly now is deprecated. " +"update() and setdefault() now transform and check keys. Comparing for " +"equality now takes into account attributes key, value and coded_value. " +"copy() now returns a Morsel, not a dict. repr() now contains all " +"attributes. Optimized checking keys and quoting values. Added new tests. " +"Original patch by Demian Brecht." +msgstr "" + +#: ../../../build/NEWS:26830 +msgid "" +":issue:`18983`: Allow selection of output units in timeit. Patch by Julian " +"Gindi." +msgstr "" + +#: ../../../build/NEWS:26833 +msgid "" +":issue:`23631`: Fix traceback.format_list when a traceback has been mutated." +msgstr "" + +#: ../../../build/NEWS:26835 +msgid "" +":issue:`23568`: Add rdivmod support to MagicMock() objects. Patch by Håkan " +"Lövdahl." +msgstr "" + +#: ../../../build/NEWS:26838 +msgid ":issue:`2052`: Add charset parameter to HtmlDiff.make_file()." +msgstr "" + +#: ../../../build/NEWS:26840 +msgid ":issue:`23668`: Support os.truncate and os.ftruncate on Windows." +msgstr "" + +#: ../../../build/NEWS:26842 +msgid "" +":issue:`23138`: Fixed parsing cookies with absent keys or values in " +"cookiejar. Patch by Demian Brecht." +msgstr "" + +#: ../../../build/NEWS:26845 +msgid "" +":issue:`23051`: multiprocessing.Pool methods imap() and imap_unordered() now" +" handle exceptions raised by an iterator. Patch by Alon Diamant and Davin " +"Potts." +msgstr "" + +#: ../../../build/NEWS:26849 +msgid "" +":issue:`23581`: Add matmul support to MagicMock. Patch by Håkan Lövdahl." +msgstr "" + +#: ../../../build/NEWS:26851 +msgid "" +":issue:`23566`: enable(), register(), dump_traceback() and " +"dump_traceback_later() functions of faulthandler now accept file " +"descriptors. Patch by Wei Wu." +msgstr "" + +#: ../../../build/NEWS:26855 +msgid "" +":issue:`22928`: Disabled HTTP header injections in http.client. Original " +"patch by Demian Brecht." +msgstr "" + +#: ../../../build/NEWS:26858 +msgid "" +":issue:`23615`: Modules bz2, tarfile and tokenize now can be reloaded with " +"imp.reload(). Patch by Thomas Kluyver." +msgstr "" + +#: ../../../build/NEWS:26861 +msgid "" +":issue:`23605`: os.walk() now calls os.scandir() instead of os.listdir(). " +"The usage of os.scandir() reduces the number of calls to os.stat(). Initial " +"patch written by Ben Hoyt." +msgstr "" + +#: ../../../build/NEWS:26868 +msgid ":issue:`23585`: make patchcheck will ensure the interpreter is built." +msgstr "" + +#: ../../../build/NEWS:26873 +msgid ":issue:`23583`: Added tests for standard IO streams in IDLE." +msgstr "" + +#: ../../../build/NEWS:26875 +msgid "" +":issue:`22289`: Prevent test_urllib2net failures due to ftp connection " +"timeout." +msgstr "" + +#: ../../../build/NEWS:26880 +msgid "" +":issue:`22826`: The result of open() in Tools/freeze/bkfile.py is now better" +" compatible with regular files (in particular it now supports the context " +"management protocol)." +msgstr "" + +#: ../../../build/NEWS:26886 +msgid "Python 3.5.0 alpha 2" +msgstr "Python 3.5.0 alpha 2" + +#: ../../../build/NEWS:26888 +msgid "*Release date: 2015-03-09*" +msgstr "*发布日期: 2015-03-09*" + +#: ../../../build/NEWS:26893 +msgid "" +":issue:`23571`: PyObject_Call() and PyCFunction_Call() now raise a " +"SystemError if a function returns a result and raises an exception. The " +"SystemError is chained to the previous exception." +msgstr "" + +#: ../../../build/NEWS:26900 +msgid "" +":issue:`22524`: New os.scandir() function, part of the :pep:`471`: " +"\"os.scandir() function -- a better and faster directory iterator\". Patch " +"written by Ben Hoyt." +msgstr "" + +#: ../../../build/NEWS:26904 +msgid "" +":issue:`23103`: Reduced the memory consumption of IPv4Address and " +"IPv6Address." +msgstr "" + +#: ../../../build/NEWS:26906 +msgid "" +":issue:`21793`: BaseHTTPRequestHandler again logs response code as numeric, " +"not as stringified enum. Patch by Demian Brecht." +msgstr "" + +#: ../../../build/NEWS:26909 +msgid "" +":issue:`23476`: In the ssl module, enable OpenSSL's " +"X509_V_FLAG_TRUSTED_FIRST flag on certificate stores when it is available." +msgstr "" + +#: ../../../build/NEWS:26912 +msgid "" +":issue:`23576`: Avoid stalling in SSL reads when EOF has been reached in the" +" SSL layer but the underlying connection hasn't been closed." +msgstr "" + +#: ../../../build/NEWS:26915 +msgid ":issue:`23504`: Added an __all__ to the types module." +msgstr "" + +#: ../../../build/NEWS:26917 +msgid ":issue:`23563`: Optimized utility functions in urllib.parse." +msgstr "" + +#: ../../../build/NEWS:26919 +msgid ":issue:`7830`: Flatten nested functools.partial." +msgstr "" + +#: ../../../build/NEWS:26921 +msgid ":issue:`20204`: Added the __module__ attribute to _tkinter classes." +msgstr "" + +#: ../../../build/NEWS:26923 +msgid "" +":issue:`19980`: Improved help() for non-recognized strings. help('') now " +"shows the help on str. help('help') now shows the help on help(). Original " +"patch by Mark Lawrence." +msgstr "" + +#: ../../../build/NEWS:26927 +msgid "" +":issue:`23521`: Corrected pure python implementation of timedelta division. " +"Eliminated OverflowError from ``timedelta * float`` for some floats; " +"Corrected rounding in timedelta true division." +msgstr "" + +#: ../../../build/NEWS:26931 +msgid "" +":issue:`21619`: Popen objects no longer leave a zombie after exit in the " +"with statement if the pipe was broken. Patch by Martin Panter." +msgstr "" + +#: ../../../build/NEWS:26934 +msgid "" +":issue:`22936`: Make it possible to show local variables in tracebacks for " +"both the traceback module and unittest." +msgstr "" + +#: ../../../build/NEWS:26937 +msgid "" +":issue:`15955`: Add an option to limit the output size in bz2.decompress(). " +"Patch by Nikolaus Rath." +msgstr "" + +#: ../../../build/NEWS:26940 +msgid "" +":issue:`6639`: Module-level turtle functions no longer raise TclError after " +"closing the window." +msgstr "" + +#: ../../../build/NEWS:26943 +msgid "" +":issue:`814253`: Group references and conditional group references now work " +"in lookbehind assertions in regular expressions. (See also: :issue:`9179`)" +msgstr "" + +#: ../../../build/NEWS:26946 +msgid "" +":issue:`23215`: Multibyte codecs with custom error handlers that ignores " +"errors consumed too much memory and raised SystemError or MemoryError. " +"Original patch by Aleksi Torhamo." +msgstr "" + +#: ../../../build/NEWS:26950 +msgid "" +":issue:`5700`: io.FileIO() called flush() after closing the file. flush() " +"was not called in close() if closefd=False." +msgstr "" + +#: ../../../build/NEWS:26953 +msgid "" +":issue:`23374`: Fixed pydoc failure with non-ASCII files when stdout " +"encoding differs from file system encoding (e.g. on Mac OS)." +msgstr "" + +#: ../../../build/NEWS:26956 +msgid ":issue:`23481`: Remove RC4 from the SSL module's default cipher list." +msgstr "" + +#: ../../../build/NEWS:26958 +msgid "" +":issue:`21548`: Fix pydoc.synopsis() and pydoc.apropos() on modules with " +"empty docstrings." +msgstr "" + +#: ../../../build/NEWS:26961 +msgid "" +":issue:`22885`: Fixed arbitrary code execution vulnerability in the dbm.dumb" +" module. Original patch by Claudiu Popa." +msgstr "" + +#: ../../../build/NEWS:26964 +msgid "" +":issue:`23239`: ssl.match_hostname() now supports matching of IP addresses." +msgstr "" + +#: ../../../build/NEWS:26966 +msgid "" +":issue:`23146`: Fix mishandling of absolute Windows paths with forward " +"slashes in pathlib." +msgstr "" + +#: ../../../build/NEWS:26969 +msgid "" +":issue:`23096`: Pickle representation of floats with protocol 0 now is the " +"same for both Python and C implementations." +msgstr "" + +#: ../../../build/NEWS:26972 +msgid "" +":issue:`19105`: pprint now more efficiently uses free space at the right." +msgstr "" + +#: ../../../build/NEWS:26974 +msgid "" +":issue:`14910`: Add allow_abbrev parameter to argparse.ArgumentParser. Patch" +" by Jonathan Paugh, Steven Bethard, paul j3 and Daniel Eriksson." +msgstr "" + +#: ../../../build/NEWS:26977 +msgid "" +":issue:`21717`: tarfile.open() now supports 'x' (exclusive creation) mode." +msgstr "" + +#: ../../../build/NEWS:26979 +msgid ":issue:`23344`: marshal.dumps() is now 20-25% faster on average." +msgstr "" + +#: ../../../build/NEWS:26981 +msgid "" +":issue:`20416`: marshal.dumps() with protocols 3 and 4 is now 40-50% faster " +"on average." +msgstr "" + +#: ../../../build/NEWS:26984 +msgid ":issue:`23421`: Fixed compression in tarfile CLI. Patch by wdv4758h." +msgstr "" + +#: ../../../build/NEWS:26986 +msgid ":issue:`23367`: Fix possible overflows in the unicodedata module." +msgstr "" + +#: ../../../build/NEWS:26988 +msgid "" +":issue:`23361`: Fix possible overflow in Windows subprocess creation code." +msgstr "" + +#: ../../../build/NEWS:26990 +msgid "" +"logging.handlers.QueueListener now takes a respect_handler_level keyword " +"argument which, if set to True, will pass messages to handlers taking " +"handler levels into account." +msgstr "" + +#: ../../../build/NEWS:26994 +msgid "" +":issue:`19705`: turtledemo now has a visual sorting algorithm demo. " +"Original patch from Jason Yeo." +msgstr "" + +#: ../../../build/NEWS:26997 +msgid "" +":issue:`23801`: Fix issue where cgi.FieldStorage did not always ignore the " +"entire preamble to a multipart body." +msgstr "" + +#: ../../../build/NEWS:27003 +msgid "" +":issue:`23445`: pydebug builds now use \"gcc -Og\" where possible, to make " +"the resulting executable faster." +msgstr "" + +#: ../../../build/NEWS:27006 +msgid "" +":issue:`23686`: Update OS X 10.5 installer build to use OpenSSL 1.0.2a." +msgstr "" + +#: ../../../build/NEWS:27011 +msgid "" +":issue:`20204`: Deprecation warning is now raised for builtin types without " +"the __module__ attribute." +msgstr "" + +#: ../../../build/NEWS:27017 +msgid "" +":issue:`23465`: Implement :pep:`486` - Make the Python Launcher aware of " +"virtual environments. Patch by Paul Moore." +msgstr "" + +#: ../../../build/NEWS:27020 +msgid "" +":issue:`23437`: Make user scripts directory versioned on Windows. Patch by " +"Paul Moore." +msgstr "" + +#: ../../../build/NEWS:27025 +msgid "Python 3.5.0 alpha 1" +msgstr "Python 3.5.0 alpha 1" + +#: ../../../build/NEWS:27027 +msgid "*Release date: 2015-02-08*" +msgstr "*发布日期: 2015-02-08*" + +#: ../../../build/NEWS:27032 +msgid ":issue:`23285`: PEP 475 - EINTR handling." +msgstr "" + +#: ../../../build/NEWS:27034 +msgid "" +":issue:`22735`: Fix many edge cases (including crashes) involving custom " +"mro() implementations." +msgstr "" + +#: ../../../build/NEWS:27037 +msgid "" +":issue:`22896`: Avoid using PyObject_AsCharBuffer(), PyObject_AsReadBuffer()" +" and PyObject_AsWriteBuffer()." +msgstr "" + +#: ../../../build/NEWS:27040 +msgid "" +":issue:`21295`: Revert some changes (:issue:`16795`) to AST line numbers and" +" column offsets that constituted a regression." +msgstr "" + +#: ../../../build/NEWS:27043 +msgid "" +":issue:`22986`: Allow changing an object's __class__ between a dynamic type " +"and static type in some cases." +msgstr "" + +#: ../../../build/NEWS:27046 +msgid "" +":issue:`15859`: PyUnicode_EncodeFSDefault(), PyUnicode_EncodeMBCS() and " +"PyUnicode_EncodeCodePage() now raise an exception if the object is not a " +"Unicode object. For PyUnicode_EncodeFSDefault(), it was already the case on " +"platforms other than Windows. Patch written by Campbell Barton." +msgstr "" + +#: ../../../build/NEWS:27051 +msgid "" +":issue:`21408`: The default __ne__() now returns NotImplemented if __eq__() " +"returned NotImplemented. Original patch by Martin Panter." +msgstr "" + +#: ../../../build/NEWS:27054 +msgid "" +":issue:`23321`: Fixed a crash in str.decode() when error handler returned " +"replacement string longer than malformed input data." +msgstr "" + +#: ../../../build/NEWS:27057 +msgid "" +":issue:`22286`: The \"backslashreplace\" error handlers now works with " +"decoding and translating." +msgstr "" + +#: ../../../build/NEWS:27060 +msgid "" +":issue:`23253`: Delay-load ShellExecute[AW] in os.startfile for reduced " +"startup overhead on Windows." +msgstr "" + +#: ../../../build/NEWS:27063 +msgid "" +":issue:`22038`: pyatomic.h now uses stdatomic.h or GCC built-in functions " +"for atomic memory access if available. Patch written by Vitor de Lima and " +"Gustavo Temple." +msgstr "" + +#: ../../../build/NEWS:27067 +msgid "" +":issue:`20284`: %-interpolation (aka printf) formatting added for bytes and " +"bytearray." +msgstr "" + +#: ../../../build/NEWS:27070 +msgid ":issue:`23048`: Fix jumping out of an infinite while loop in the pdb." +msgstr "" + +#: ../../../build/NEWS:27072 +msgid "" +":issue:`20335`: bytes constructor now raises TypeError when encoding or " +"errors is specified with non-string argument. Based on patch by Renaud " +"Blanch." +msgstr "" + +#: ../../../build/NEWS:27075 +msgid "" +":issue:`22834`: If the current working directory ends up being set to a non-" +"existent directory then import will no longer raise FileNotFoundError." +msgstr "" + +#: ../../../build/NEWS:27078 +msgid "" +":issue:`22869`: Move the interpreter startup & shutdown code to a new " +"dedicated pylifecycle.c module" +msgstr "" + +#: ../../../build/NEWS:27081 +msgid ":issue:`22847`: Improve method cache efficiency." +msgstr "" + +#: ../../../build/NEWS:27083 +msgid "" +":issue:`22335`: Fix crash when trying to enlarge a bytearray to 0x7fffffff " +"bytes on a 32-bit platform." +msgstr "" + +#: ../../../build/NEWS:27086 +msgid "" +":issue:`22653`: Fix an assertion failure in debug mode when doing a " +"reentrant dict insertion in debug mode." +msgstr "" + +#: ../../../build/NEWS:27089 +msgid "" +":issue:`22643`: Fix integer overflow in Unicode case operations (upper, " +"lower, title, swapcase, casefold)." +msgstr "" + +#: ../../../build/NEWS:27092 +msgid "" +":issue:`17636`: Circular imports involving relative imports are now " +"supported." +msgstr "" + +#: ../../../build/NEWS:27094 +msgid "" +":issue:`22604`: Fix assertion error in debug mode when dividing a complex " +"number by (nan+0j)." +msgstr "" + +#: ../../../build/NEWS:27097 +msgid "" +":issue:`21052`: Do not raise ImportWarning when sys.path_hooks or " +"sys.meta_path are set to None." +msgstr "" + +#: ../../../build/NEWS:27100 +msgid "" +":issue:`16518`: Use 'bytes-like object required' in error messages that " +"previously used the far more cryptic \"'x' does not support the buffer " +"protocol." +msgstr "" + +#: ../../../build/NEWS:27104 +msgid "" +":issue:`22470`: Fixed integer overflow issues in \"backslashreplace\", " +"\"xmlcharrefreplace\", and \"surrogatepass\" error handlers." +msgstr "" + +#: ../../../build/NEWS:27107 +msgid "" +":issue:`22540`: speed up `PyObject_IsInstance` and `PyObject_IsSubclass` in " +"the common case that the second argument has metaclass `type`." +msgstr "" + +#: ../../../build/NEWS:27110 +msgid "" +":issue:`18711`: Add a new `PyErr_FormatV` function, similar to " +"`PyErr_Format` but accepting a `va_list` argument." +msgstr "" + +#: ../../../build/NEWS:27113 +msgid "" +":issue:`22520`: Fix overflow checking when generating the repr of a unicode " +"object." +msgstr "" + +#: ../../../build/NEWS:27116 +msgid ":issue:`22519`: Fix overflow checking in PyBytes_Repr." +msgstr "" + +#: ../../../build/NEWS:27118 +msgid ":issue:`22518`: Fix integer overflow issues in latin-1 encoding." +msgstr "" + +#: ../../../build/NEWS:27120 +msgid "" +":issue:`16324`: _charset parameter of MIMEText now also accepts " +"email.charset.Charset instances. Initial patch by Claude Paroz." +msgstr "" + +#: ../../../build/NEWS:27123 +msgid "" +":issue:`1764286`: Fix inspect.getsource() to support decorated functions. " +"Patch by Claudiu Popa." +msgstr "" + +#: ../../../build/NEWS:27126 +msgid ":issue:`18554`: os.__all__ includes posix functions." +msgstr "" + +#: ../../../build/NEWS:27128 +msgid ":issue:`21391`: Use os.path.abspath in the shutil module." +msgstr "" + +#: ../../../build/NEWS:27130 +msgid "" +":issue:`11471`: avoid generating a JUMP_FORWARD instruction at the end of an" +" if-block if there is no else-clause. Original patch by Eugene Toder." +msgstr "" + +#: ../../../build/NEWS:27133 +msgid "" +":issue:`22215`: Now ValueError is raised instead of TypeError when str or " +"bytes argument contains not permitted null character or byte." +msgstr "" + +#: ../../../build/NEWS:27136 +msgid "" +":issue:`22258`: Fix the internal function set_inheritable() on Illumos. This" +" platform exposes the function ``ioctl(FIOCLEX)``, but calling it fails with" +" errno is ENOTTY: \"Inappropriate ioctl for device\". set_inheritable() now " +"falls back to the slower ``fcntl()`` (``F_GETFD`` and then ``F_SETFD``)." +msgstr "" + +#: ../../../build/NEWS:27142 +msgid "" +":issue:`21389`: Displaying the __qualname__ of the underlying function in " +"the repr of a bound method." +msgstr "" + +#: ../../../build/NEWS:27145 +msgid "" +":issue:`22206`: Using pthread, PyThread_create_key() now sets errno to " +"ENOMEM and returns -1 (error) on integer overflow." +msgstr "" + +#: ../../../build/NEWS:27148 +msgid "" +":issue:`20184`: Argument Clinic based signature introspection added for 30 " +"of the builtin functions." +msgstr "" + +#: ../../../build/NEWS:27151 +msgid "" +":issue:`22116`: C functions and methods (of the 'builtin_function_or_method'" +" type) can now be weakref'ed. Patch by Wei Wu." +msgstr "" + +#: ../../../build/NEWS:27154 +msgid "" +":issue:`22077`: Improve index error messages for bytearrays, bytes, lists, " +"and tuples by adding 'or slices'. Added ', not ' for bytearrays. " +"Original patch by Claudiu Popa." +msgstr "" + +#: ../../../build/NEWS:27158 +msgid "" +":issue:`20179`: Apply Argument Clinic to bytes and bytearray. Patch by Tal " +"Einat." +msgstr "" + +#: ../../../build/NEWS:27161 +msgid ":issue:`22082`: Clear interned strings in slotdefs." +msgstr "" + +#: ../../../build/NEWS:27163 +msgid "Upgrade Unicode database to Unicode 7.0.0." +msgstr "升级 Unicode 数据库到 7.0.0 版本。" + +#: ../../../build/NEWS:27165 +msgid "" +":issue:`21897`: Fix a crash with the f_locals attribute with closure " +"variables when frame.clear() has been called." +msgstr "" + +#: ../../../build/NEWS:27168 +msgid "" +":issue:`21205`: Add a new ``__qualname__`` attribute to generator, the " +"qualified name, and use it in the representation of a generator " +"(``repr(gen)``). The default name of the generator (``__name__`` attribute) " +"is now get from the function instead of the code. Use " +"``gen.gi_code.co_name`` to get the name of the code." +msgstr "" + +#: ../../../build/NEWS:27174 +msgid "" +":issue:`21669`: With the aid of heuristics in SyntaxError.__init__, the " +"parser now attempts to generate more meaningful (or at least more search " +"engine friendly) error messages when \"exec\" and \"print\" are used as " +"statements." +msgstr "" + +#: ../../../build/NEWS:27178 +msgid "" +":issue:`21642`: In the conditional if-else expression, allow an integer " +"written with no space between itself and the ``else`` keyword (e.g. ``True " +"if 42else False``) to be valid syntax." +msgstr "" + +#: ../../../build/NEWS:27182 +msgid "" +":issue:`21523`: Fix over-pessimistic computation of the stack effect of some" +" opcodes in the compiler. This also fixes a quadratic compilation time " +"issue noticeable when compiling code with a large number of \"and\" and " +"\"or\" operators." +msgstr "" + +#: ../../../build/NEWS:27187 +msgid "" +":issue:`21418`: Fix a crash in the builtin function super() when called " +"without argument and without current frame (ex: embedded Python)." +msgstr "" + +#: ../../../build/NEWS:27190 +msgid "" +":issue:`21425`: Fix flushing of standard streams in the interactive " +"interpreter." +msgstr "" + +#: ../../../build/NEWS:27193 +msgid "" +":issue:`21435`: In rare cases, when running finalizers on objects in cyclic " +"trash a bad pointer dereference could occur due to a subtle flaw in internal" +" iteration logic." +msgstr "" + +#: ../../../build/NEWS:27197 +msgid "" +":issue:`21377`: PyBytes_Concat() now tries to concatenate in-place when the " +"first argument has a reference count of 1. Patch by Nikolaus Rath." +msgstr "" + +#: ../../../build/NEWS:27200 +msgid "" +":issue:`20355`: -W command line options now have higher priority than the " +"PYTHONWARNINGS environment variable. Patch by Arfrever." +msgstr "" + +#: ../../../build/NEWS:27203 +msgid ":issue:`21274`: Define PATH_MAX for GNU/Hurd in Python/pythonrun.c." +msgstr "" + +#: ../../../build/NEWS:27205 +msgid ":issue:`20904`: Support setting FPU precision on m68k." +msgstr "" + +#: ../../../build/NEWS:27207 +msgid "" +":issue:`21209`: Fix sending tuples to custom generator objects with the " +"yield from syntax." +msgstr "" + +#: ../../../build/NEWS:27210 +msgid "" +":issue:`21193`: pow(a, b, c) now raises ValueError rather than TypeError " +"when b is negative. Patch by Josh Rosenberg." +msgstr "" + +#: ../../../build/NEWS:27213 +msgid "" +":issue:`21176`: PEP 465: Add the '@' operator for matrix multiplication." +msgstr "" + +#: ../../../build/NEWS:27215 +msgid "" +":issue:`21134`: Fix segfault when str is called on an uninitialized " +"UnicodeEncodeError, UnicodeDecodeError, or UnicodeTranslateError object." +msgstr "" + +#: ../../../build/NEWS:27218 +msgid "" +":issue:`19537`: Fix PyUnicode_DATA() alignment under m68k. Patch by Andreas" +" Schwab." +msgstr "" + +#: ../../../build/NEWS:27221 +msgid ":issue:`20929`: Add a type cast to avoid shifting a negative number." +msgstr "" + +#: ../../../build/NEWS:27223 +msgid "" +":issue:`20731`: Properly position in source code files even if they are " +"opened in text mode. Patch by Serhiy Storchaka." +msgstr "" + +#: ../../../build/NEWS:27226 +msgid "" +":issue:`20637`: Key-sharing now also works for instance dictionaries of " +"subclasses. Patch by Peter Ingebretson." +msgstr "" + +#: ../../../build/NEWS:27229 +msgid "" +":issue:`8297`: Attributes missing from modules now include the module name " +"in the error text. Original patch by ysj.ray." +msgstr "" + +#: ../../../build/NEWS:27232 +msgid "" +":issue:`19995`: %c, %o, %x, and %X now raise TypeError on non-integer input." +msgstr "" + +#: ../../../build/NEWS:27234 +msgid "" +":issue:`19655`: The ASDL parser - used by the build process to generate code" +" for managing the Python AST in C - was rewritten. The new parser is self " +"contained and does not require to carry long the spark.py parser-generator " +"library; spark.py was removed from the source base." +msgstr "" + +#: ../../../build/NEWS:27239 +msgid "" +":issue:`12546`: Allow ``\\x00`` to be used as a fill character when using " +"str, int, float, and complex __format__ methods." +msgstr "" + +#: ../../../build/NEWS:27242 +msgid ":issue:`20480`: Add ipaddress.reverse_pointer. Patch by Leon Weber." +msgstr "" + +#: ../../../build/NEWS:27244 +msgid "" +":issue:`13598`: Modify string.Formatter to support auto-numbering of " +"replacement fields. It now matches the behavior of str.format() in this " +"regard. Patches by Phil Elson and Ramchandra Apte." +msgstr "" + +#: ../../../build/NEWS:27248 +msgid "" +":issue:`8931`: Make alternate formatting ('#') for type 'c' raise an " +"exception. In versions prior to 3.5, '#' with 'c' had no effect. Now " +"specifying it is an error. Patch by Torsten Landschoff." +msgstr "" + +#: ../../../build/NEWS:27252 +msgid "" +":issue:`23165`: Perform overflow checks before allocating memory in the " +"_Py_char2wchar function." +msgstr "" + +#: ../../../build/NEWS:27258 +msgid ":issue:`23399`: pyvenv creates relative symlinks where possible." +msgstr "" + +#: ../../../build/NEWS:27260 +msgid "" +":issue:`20289`: cgi.FieldStorage() now supports the context management " +"protocol." +msgstr "" + +#: ../../../build/NEWS:27263 +msgid "" +":issue:`13128`: Print response headers for CONNECT requests when debuglevel " +"> 0. Patch by Demian Brecht." +msgstr "" + +#: ../../../build/NEWS:27266 +msgid "" +":issue:`15381`: Optimized io.BytesIO to make less allocations and copyings." +msgstr "" + +#: ../../../build/NEWS:27268 +msgid "" +":issue:`22818`: Splitting on a pattern that could match an empty string now " +"raises a warning. Patterns that can only match empty strings are now " +"rejected." +msgstr "" + +#: ../../../build/NEWS:27272 +msgid "" +":issue:`23099`: Closing io.BytesIO with exported buffer is rejected now to " +"prevent corrupting exported buffer." +msgstr "" + +#: ../../../build/NEWS:27275 +msgid "" +":issue:`23326`: Removed __ne__ implementations. Since fixing default __ne__" +" implementation in :issue:`21408` they are redundant." +msgstr "" + +#: ../../../build/NEWS:27278 +msgid ":issue:`23363`: Fix possible overflow in itertools.permutations." +msgstr "" + +#: ../../../build/NEWS:27280 +msgid ":issue:`23364`: Fix possible overflow in itertools.product." +msgstr "" + +#: ../../../build/NEWS:27282 +msgid "" +":issue:`23366`: Fixed possible integer overflow in itertools.combinations." +msgstr "" + +#: ../../../build/NEWS:27284 +msgid "" +":issue:`23369`: Fixed possible integer overflow in " +"_json.encode_basestring_ascii." +msgstr "" + +#: ../../../build/NEWS:27287 +msgid "" +":issue:`23353`: Fix the exception handling of generators in " +"PyEval_EvalFrameEx(). At entry, save or swap the exception state even if " +"PyEval_EvalFrameEx() is called with throwflag=0. At exit, the exception " +"state is now always restored or swapped, not only if why is WHY_YIELD or " +"WHY_RETURN. Patch co-written with Antoine Pitrou." +msgstr "" + +#: ../../../build/NEWS:27293 +msgid "" +":issue:`14099`: Restored support of writing ZIP files to tellable but non-" +"seekable streams." +msgstr "" + +#: ../../../build/NEWS:27296 +msgid "" +":issue:`14099`: Writing to ZipFile and reading multiple ZipExtFiles is " +"threadsafe now." +msgstr "" + +#: ../../../build/NEWS:27299 +msgid "" +":issue:`19361`: JSON decoder now raises JSONDecodeError instead of " +"ValueError." +msgstr "" + +#: ../../../build/NEWS:27301 +msgid "" +":issue:`18518`: timeit now rejects statements which can't be compiled " +"outside a function or a loop (e.g. \"return\" or \"break\")." +msgstr "" + +#: ../../../build/NEWS:27304 +msgid "" +":issue:`23094`: Fixed readline with frames in Python implementation of " +"pickle." +msgstr "" + +#: ../../../build/NEWS:27306 +msgid ":issue:`23268`: Fixed bugs in the comparison of ipaddress classes." +msgstr "" + +#: ../../../build/NEWS:27308 +msgid "" +":issue:`21408`: Removed incorrect implementations of __ne__() which didn't " +"returned NotImplemented if __eq__() returned NotImplemented. The default " +"__ne__() now works correctly." +msgstr "" + +#: ../../../build/NEWS:27312 +msgid "" +":issue:`19996`: :class:`email.feedparser.FeedParser` now handles (malformed)" +" headers with no key rather than assuming the body has started." +msgstr "" + +#: ../../../build/NEWS:27315 +msgid "" +":issue:`20188`: Support Application-Layer Protocol Negotiation (ALPN) in the" +" ssl module." +msgstr "" + +#: ../../../build/NEWS:27318 +msgid "" +":issue:`23133`: Pickling of ipaddress objects now produces more compact and " +"portable representation." +msgstr "" + +#: ../../../build/NEWS:27321 +msgid ":issue:`23248`: Update ssl error codes from latest OpenSSL git master." +msgstr "" + +#: ../../../build/NEWS:27323 +msgid "" +":issue:`23266`: Much faster implementation of ipaddress.collapse_addresses()" +" when there are many non-consecutive addresses." +msgstr "" + +#: ../../../build/NEWS:27326 +msgid ":issue:`23098`: 64-bit dev_t is now supported in the os module." +msgstr "" + +#: ../../../build/NEWS:27328 +msgid "" +":issue:`21817`: When an exception is raised in a task submitted to a " +"ProcessPoolExecutor, the remote traceback is now displayed in the parent " +"process. Patch by Claudiu Popa." +msgstr "" + +#: ../../../build/NEWS:27332 +msgid "" +":issue:`15955`: Add an option to limit output size when decompressing LZMA " +"data. Patch by Nikolaus Rath and Martin Panter." +msgstr "" + +#: ../../../build/NEWS:27335 +msgid "" +":issue:`23250`: In the http.cookies module, capitalize \"HttpOnly\" and " +"\"Secure\" as they are written in the standard." +msgstr "" + +#: ../../../build/NEWS:27338 +msgid "" +":issue:`23063`: In the distutils' check command, fix parsing of reST with " +"code or code-block directives." +msgstr "" + +#: ../../../build/NEWS:27341 +msgid "" +":issue:`23209`: selectors.BaseSelector.get_key() now raises a RuntimeError " +"if the selector is closed. And selectors.BaseSelector.close() now clears its" +" internal reference to the selector mapping to break a reference cycle. " +"Initial patch written by Martin Richard. (See also: :issue:`23225`)" +msgstr "" + +#: ../../../build/NEWS:27346 +msgid "" +":issue:`17911`: Provide a way to seed the linecache for a PEP-302 module " +"without actually loading the code." +msgstr "" + +#: ../../../build/NEWS:27349 +msgid "" +":issue:`17911`: Provide a new object API for traceback, including the " +"ability to not lookup lines at all until the traceback is actually rendered," +" without any trace of the original objects being kept alive." +msgstr "" + +#: ../../../build/NEWS:27353 +msgid "" +":issue:`19777`: Provide a home() classmethod on Path objects. Contributed " +"by Victor Salgado and Mayank Tripathi." +msgstr "" + +#: ../../../build/NEWS:27356 +msgid "" +":issue:`23206`: Make ``json.dumps(..., ensure_ascii=False)`` as fast as the " +"default case of ``ensure_ascii=True``. Patch by Naoki Inada." +msgstr "" + +#: ../../../build/NEWS:27359 +msgid ":issue:`23185`: Add math.inf and math.nan constants." +msgstr "" + +#: ../../../build/NEWS:27361 +msgid "" +":issue:`23186`: Add ssl.SSLObject.shared_ciphers() and " +"ssl.SSLSocket.shared_ciphers() to fetch the client's list ciphers sent at " +"handshake." +msgstr "" + +#: ../../../build/NEWS:27365 +msgid ":issue:`23143`: Remove compatibility with OpenSSLs older than 0.9.8." +msgstr "" + +#: ../../../build/NEWS:27367 +msgid "" +":issue:`23132`: Improve performance and introspection support of comparison " +"methods created by functool.total_ordering." +msgstr "" + +#: ../../../build/NEWS:27370 +msgid ":issue:`19776`: Add an expanduser() method on Path objects." +msgstr "" + +#: ../../../build/NEWS:27372 +msgid "" +":issue:`23112`: Fix SimpleHTTPServer to correctly carry the query string and" +" fragment when it redirects to add a trailing slash." +msgstr "" + +#: ../../../build/NEWS:27375 +msgid "" +":issue:`21793`: Added http.HTTPStatus enums (i.e. HTTPStatus.OK, " +"HTTPStatus.NOT_FOUND). Patch by Demian Brecht." +msgstr "" + +#: ../../../build/NEWS:27378 +msgid "" +":issue:`23093`: In the io, module allow more operations to work on detached " +"streams." +msgstr "" + +#: ../../../build/NEWS:27381 +msgid "" +":issue:`23111`: In the ftplib, make ssl.PROTOCOL_SSLv23 the default protocol" +" version." +msgstr "" + +#: ../../../build/NEWS:27384 +msgid "" +":issue:`22585`: On OpenBSD 5.6 and newer, os.urandom() now calls " +"getentropy(), instead of reading /dev/urandom, to get pseudo-random bytes." +msgstr "" + +#: ../../../build/NEWS:27387 +msgid "" +":issue:`19104`: pprint now produces evaluable output for wrapped strings." +msgstr "" + +#: ../../../build/NEWS:27389 +msgid "" +":issue:`23071`: Added missing names to codecs.__all__. Patch by Martin " +"Panter." +msgstr "" + +#: ../../../build/NEWS:27391 +msgid "" +":issue:`22783`: Pickling now uses the NEWOBJ opcode instead of the NEWOBJ_EX" +" opcode if possible." +msgstr "" + +#: ../../../build/NEWS:27394 +msgid ":issue:`15513`: Added a __sizeof__ implementation for pickle classes." +msgstr "" + +#: ../../../build/NEWS:27396 +msgid "" +":issue:`19858`: pickletools.optimize() now aware of the MEMOIZE opcode, can " +"produce more compact result and no longer produces invalid output if input " +"data contains MEMOIZE opcodes together with PUT or BINPUT opcodes." +msgstr "" + +#: ../../../build/NEWS:27400 +msgid "" +":issue:`22095`: Fixed HTTPConnection.set_tunnel with default port. The port" +" value in the host header was set to \"None\". Patch by Demian Brecht." +msgstr "" + +#: ../../../build/NEWS:27403 +msgid "" +":issue:`23016`: A warning no longer produces an AttributeError when the " +"program is run with pythonw.exe." +msgstr "" + +#: ../../../build/NEWS:27406 +msgid "" +":issue:`21775`: shutil.copytree(): fix crash when copying to VFAT. An " +"exception handler assumed that OSError objects always have a 'winerror' " +"attribute. That is not the case, so the exception handler itself raised " +"AttributeError when run on Linux (and, presumably, any other non-Windows " +"OS). Patch by Greg Ward." +msgstr "" + +#: ../../../build/NEWS:27412 +msgid "" +":issue:`1218234`: Fix inspect.getsource() to load updated source of reloaded" +" module. Initial patch by Berker Peksag." +msgstr "" + +#: ../../../build/NEWS:27415 +msgid "" +":issue:`21740`: Support wrapped callables in doctest. Patch by Claudiu Popa." +msgstr "" + +#: ../../../build/NEWS:27417 +msgid "" +":issue:`23009`: Make sure selectors.EpollSelector.select() works when no FD " +"is registered." +msgstr "" + +#: ../../../build/NEWS:27420 +msgid "" +":issue:`22959`: In the constructor of http.client.HTTPSConnection, prefer " +"the context's check_hostname attribute over the *check_hostname* parameter." +msgstr "" + +#: ../../../build/NEWS:27423 +msgid "" +":issue:`22696`: Add function :func:`sys.is_finalizing` to know about " +"interpreter shutdown." +msgstr "" + +#: ../../../build/NEWS:27426 +msgid "" +":issue:`16043`: Add a default limit for the amount of data " +"xmlrpclib.gzip_decode will return. This resolves CVE-2013-1753." +msgstr "" + +#: ../../../build/NEWS:27429 +msgid "" +":issue:`14099`: ZipFile.open() no longer reopen the underlying file. " +"Objects returned by ZipFile.open() can now operate independently of the " +"ZipFile even if the ZipFile was created by passing in a file-like object as " +"the first argument to the constructor." +msgstr "" + +#: ../../../build/NEWS:27434 +msgid "" +":issue:`22966`: Fix __pycache__ pyc file name clobber when pyc_compile is " +"asked to compile a source file containing multiple dots in the source file " +"name." +msgstr "" + +#: ../../../build/NEWS:27437 +msgid ":issue:`21971`: Update turtledemo doc and add module to the index." +msgstr "" + +#: ../../../build/NEWS:27439 +msgid "" +":issue:`21032`: Fixed socket leak if HTTPConnection.getresponse() fails. " +"Original patch by Martin Panter." +msgstr "" + +#: ../../../build/NEWS:27442 +msgid "" +":issue:`22407`: Deprecated the use of re.LOCALE flag with str patterns or " +"re.ASCII. It was newer worked." +msgstr "" + +#: ../../../build/NEWS:27445 +msgid "" +":issue:`22902`: The \"ip\" command is now used on Linux to determine MAC " +"address in uuid.getnode(). Pach by Bruno Cauet." +msgstr "" + +#: ../../../build/NEWS:27448 +msgid "" +":issue:`22960`: Add a context argument to xmlrpclib.ServerProxy constructor." +msgstr "" + +#: ../../../build/NEWS:27450 +msgid ":issue:`22389`: Add contextlib.redirect_stderr()." +msgstr "" + +#: ../../../build/NEWS:27452 +msgid "" +":issue:`21356`: Make ssl.RAND_egd() optional to support LibreSSL. The " +"availability of the function is checked during the compilation. Patch " +"written by Bernard Spil." +msgstr "" + +#: ../../../build/NEWS:27456 +msgid "" +":issue:`22915`: SAX parser now supports files opened with file descriptor or" +" bytes path." +msgstr "" + +#: ../../../build/NEWS:27459 +msgid "" +":issue:`22609`: Constructors and update methods of mapping classes in the " +"collections module now accept the self keyword argument." +msgstr "" + +#: ../../../build/NEWS:27462 +msgid ":issue:`22940`: Add readline.append_history_file." +msgstr "" + +#: ../../../build/NEWS:27464 +msgid ":issue:`19676`: Added the \"namereplace\" error handler." +msgstr "" + +#: ../../../build/NEWS:27466 +msgid "" +":issue:`22788`: Add *context* parameter to logging.handlers.HTTPHandler." +msgstr "" + +#: ../../../build/NEWS:27468 +msgid "" +":issue:`22921`: Allow SSLContext to take the *hostname* parameter even if " +"OpenSSL doesn't support SNI." +msgstr "" + +#: ../../../build/NEWS:27471 +msgid "" +":issue:`22894`: TestCase.subTest() would cause the test suite to be stopped " +"when in failfast mode, even in the absence of failures." +msgstr "" + +#: ../../../build/NEWS:27474 +msgid "" +":issue:`22796`: HTTP cookie parsing is now stricter, in order to protect " +"against potential injection attacks." +msgstr "" + +#: ../../../build/NEWS:27477 +msgid ":issue:`22370`: Windows detection in pathlib is now more robust." +msgstr "" + +#: ../../../build/NEWS:27479 +msgid "" +":issue:`22841`: Reject coroutines in asyncio add_signal_handler(). Patch by " +"Ludovic.Gasc." +msgstr "" + +#: ../../../build/NEWS:27482 +msgid "" +":issue:`19494`: Added urllib.request.HTTPBasicPriorAuthHandler. Patch by " +"Matej Cepl." +msgstr "" + +#: ../../../build/NEWS:27485 +msgid ":issue:`22578`: Added attributes to the re.error class." +msgstr "" + +#: ../../../build/NEWS:27487 +msgid "" +":issue:`22849`: Fix possible double free in the io.TextIOWrapper " +"constructor." +msgstr "" + +#: ../../../build/NEWS:27489 +msgid "" +":issue:`12728`: Different Unicode characters having the same uppercase but " +"different lowercase are now matched in case-insensitive regular expressions." +msgstr "" + +#: ../../../build/NEWS:27493 +msgid "" +":issue:`22821`: Fixed fcntl() with integer argument on 64-bit big-endian " +"platforms." +msgstr "" + +#: ../../../build/NEWS:27496 +msgid ":issue:`21650`: Add an `--sort-keys` option to json.tool CLI." +msgstr "" + +#: ../../../build/NEWS:27498 +msgid "" +":issue:`22824`: Updated reprlib output format for sets to use set literals. " +"Patch contributed by Berker Peksag." +msgstr "" + +#: ../../../build/NEWS:27501 +msgid "" +":issue:`22824`: Updated reprlib output format for arrays to display empty " +"arrays without an unnecessary empty list. Suggested by Serhiy Storchaka." +msgstr "" + +#: ../../../build/NEWS:27504 +msgid "" +":issue:`22406`: Fixed the uu_codec codec incorrectly ported to 3.x. Based on" +" patch by Martin Panter." +msgstr "" + +#: ../../../build/NEWS:27507 +msgid "" +":issue:`17293`: uuid.getnode() now determines MAC address on AIX using " +"netstat. Based on patch by Aivars Kalvāns." +msgstr "" + +#: ../../../build/NEWS:27510 +msgid "" +":issue:`22769`: Fixed ttk.Treeview.tag_has() when called without arguments." +msgstr "" + +#: ../../../build/NEWS:27512 +msgid ":issue:`22417`: Verify certificates by default in httplib (PEP 476)." +msgstr "" + +#: ../../../build/NEWS:27514 +msgid "" +":issue:`22775`: Fixed unpickling of http.cookies.SimpleCookie with protocol " +"2 and above. Patch by Tim Graham." +msgstr "" + +#: ../../../build/NEWS:27517 +msgid "" +":issue:`22776`: Brought excluded code into the scope of a try block in " +"SysLogHandler.emit()." +msgstr "" + +#: ../../../build/NEWS:27520 +msgid "" +":issue:`22665`: Add missing get_terminal_size and SameFileError to " +"shutil.__all__." +msgstr "" + +#: ../../../build/NEWS:27523 +msgid "" +":issue:`6623`: Remove deprecated Netrc class in the ftplib module. Patch by " +"Matt Chaput." +msgstr "" + +#: ../../../build/NEWS:27526 +msgid "" +":issue:`17381`: Fixed handling of case-insensitive ranges in regular " +"expressions." +msgstr "" + +#: ../../../build/NEWS:27529 +msgid "" +":issue:`22410`: Module level functions in the re module now cache compiled " +"locale-dependent regular expressions taking into account the locale." +msgstr "" + +#: ../../../build/NEWS:27532 +msgid "" +":issue:`22759`: Query methods on pathlib.Path() (exists(), is_dir(), etc.) " +"now return False when the underlying stat call raises NotADirectoryError." +msgstr "" + +#: ../../../build/NEWS:27535 +msgid "" +":issue:`8876`: distutils now falls back to copying files when hard linking " +"doesn't work. This allows use with special filesystems such as VirtualBox " +"shared folders." +msgstr "" + +#: ../../../build/NEWS:27539 +msgid ":issue:`22217`: Implemented reprs of classes in the zipfile module." +msgstr "" + +#: ../../../build/NEWS:27541 +msgid ":issue:`22457`: Honour load_tests in the start_dir of discovery." +msgstr "" + +#: ../../../build/NEWS:27543 +msgid "" +":issue:`18216`: gettext now raises an error when a .mo file has an " +"unsupported major version number. Patch by Aaron Hill." +msgstr "" + +#: ../../../build/NEWS:27546 +msgid "" +":issue:`13918`: Provide a locale.delocalize() function which can remove " +"locale-specific number formatting from a string representing a number, " +"without then converting it to a specific type. Patch by Cédric Krier." +msgstr "" + +#: ../../../build/NEWS:27550 +msgid "" +":issue:`22676`: Make the pickling of global objects which don't have a " +"__module__ attribute less slow." +msgstr "" + +#: ../../../build/NEWS:27553 +msgid ":issue:`18853`: Fixed ResourceWarning in shlex.__nain__." +msgstr "" + +#: ../../../build/NEWS:27555 +msgid "" +":issue:`9351`: Defaults set with set_defaults on an argparse subparser are " +"no longer ignored when also set on the parent parser." +msgstr "" + +#: ../../../build/NEWS:27558 +msgid "" +":issue:`7559`: unittest test loading ImportErrors are reported as import " +"errors with their import exception rather than as attribute errors after the" +" import has already failed." +msgstr "" + +#: ../../../build/NEWS:27562 +msgid "" +":issue:`19746`: Make it possible to examine the errors from unittest " +"discovery without executing the test suite. The new `errors` attribute on " +"TestLoader exposes these non-fatal errors encountered during discovery." +msgstr "" + +#: ../../../build/NEWS:27566 +msgid "" +":issue:`21991`: Make email.headerregistry's header 'params' attributes be " +"read-only (MappingProxyType). Previously the dictionary was modifiable but " +"a new one was created on each access of the attribute." +msgstr "" + +#: ../../../build/NEWS:27570 +msgid "" +":issue:`22638`: SSLv3 is now disabled throughout the standard library. It " +"can still be enabled by instantiating a SSLContext manually." +msgstr "" + +#: ../../../build/NEWS:27573 +msgid "" +":issue:`22641`: In asyncio, the default SSL context for client connections " +"is now created using ssl.create_default_context(), for stronger security." +msgstr "" + +#: ../../../build/NEWS:27576 +msgid ":issue:`17401`: Include closefd in io.FileIO repr." +msgstr "" + +#: ../../../build/NEWS:27578 +msgid "" +":issue:`21338`: Add silent mode for compileall. quiet parameters of " +"compile_{dir, file, path} functions now have a multilevel value. Also, -q " +"option of the CLI now have a multilevel value. Patch by Thomas Kluyver." +msgstr "" + +#: ../../../build/NEWS:27582 +msgid "" +":issue:`20152`: Convert the array and cmath modules to Argument Clinic." +msgstr "" + +#: ../../../build/NEWS:27584 +msgid ":issue:`18643`: Add socket.socketpair() on Windows." +msgstr "" + +#: ../../../build/NEWS:27586 +msgid "" +":issue:`22435`: Fix a file descriptor leak when socketserver bind fails." +msgstr "" + +#: ../../../build/NEWS:27588 +msgid "" +":issue:`13096`: Fixed segfault in CTypes POINTER handling of large values." +msgstr "" + +#: ../../../build/NEWS:27590 +msgid "" +":issue:`11694`: Raise ConversionError in xdrlib as documented. Patch by " +"Filip Gruszczyński and Claudiu Popa." +msgstr "" + +#: ../../../build/NEWS:27593 +msgid ":issue:`19380`: Optimized parsing of regular expressions." +msgstr "" + +#: ../../../build/NEWS:27595 +msgid "" +":issue:`1519638`: Now unmatched groups are replaced with empty strings in " +"re.sub() and re.subn()." +msgstr "" + +#: ../../../build/NEWS:27598 +msgid ":issue:`18615`: sndhdr.what/whathdr now return a namedtuple." +msgstr "" + +#: ../../../build/NEWS:27600 +msgid "" +":issue:`22462`: Fix pyexpat's creation of a dummy frame to make it appear in" +" exception tracebacks." +msgstr "" + +#: ../../../build/NEWS:27603 +msgid "" +":issue:`21965`: Add support for in-memory SSL to the ssl module. Patch by " +"Geert Jansen." +msgstr "" + +#: ../../../build/NEWS:27606 +msgid "" +":issue:`21173`: Fix len() on a WeakKeyDictionary when .clear() was called " +"with an iterator alive." +msgstr "" + +#: ../../../build/NEWS:27609 +msgid "" +":issue:`11866`: Eliminated race condition in the computation of names for " +"new threads." +msgstr "" + +#: ../../../build/NEWS:27612 +msgid "" +":issue:`21905`: Avoid RuntimeError in pickle.whichmodule() when sys.modules " +"is mutated while iterating. Patch by Olivier Grisel." +msgstr "" + +#: ../../../build/NEWS:27615 +msgid "" +":issue:`11271`: concurrent.futures.Executor.map() now takes a *chunksize* " +"argument to allow batching of tasks in child processes and improve " +"performance of ProcessPoolExecutor. Patch by Dan O'Reilly." +msgstr "" + +#: ../../../build/NEWS:27619 +msgid "" +":issue:`21883`: os.path.join() and os.path.relpath() now raise a TypeError " +"with more helpful error message for unsupported or mismatched types of " +"arguments." +msgstr "" + +#: ../../../build/NEWS:27623 +msgid "" +":issue:`22219`: The zipfile module CLI now adds entries for directories " +"(including empty directories) in ZIP file." +msgstr "" + +#: ../../../build/NEWS:27626 +msgid "" +":issue:`22449`: In the ssl.SSLContext.load_default_certs, consult the " +"environmental variables SSL_CERT_DIR and SSL_CERT_FILE on Windows." +msgstr "" + +#: ../../../build/NEWS:27629 +msgid "" +":issue:`22508`: The email.__version__ variable has been removed; the email " +"code is no longer shipped separately from the stdlib, and __version__ hasn't" +" been updated in several releases." +msgstr "" + +#: ../../../build/NEWS:27633 +msgid "" +":issue:`20076`: Added non derived UTF-8 aliases to locale aliases table." +msgstr "" + +#: ../../../build/NEWS:27635 +msgid "" +":issue:`20079`: Added locales supported in glibc 2.18 to locale alias table." +msgstr "" + +#: ../../../build/NEWS:27637 +msgid "" +":issue:`20218`: Added convenience methods read_text/write_text and " +"read_bytes/ write_bytes to pathlib.Path objects." +msgstr "" + +#: ../../../build/NEWS:27640 +msgid "" +":issue:`22396`: On 32-bit AIX platform, don't expose os.posix_fadvise() nor " +"os.posix_fallocate() because their prototypes in system headers are wrong." +msgstr "" + +#: ../../../build/NEWS:27643 +msgid "" +":issue:`22517`: When an io.BufferedRWPair object is deallocated, clear its " +"weakrefs." +msgstr "" + +#: ../../../build/NEWS:27646 +msgid "" +":issue:`22437`: Number of capturing groups in regular expression is no " +"longer limited by 100." +msgstr "" + +#: ../../../build/NEWS:27649 +msgid "" +":issue:`17442`: InteractiveInterpreter now displays the full chained " +"traceback in its showtraceback method, to match the built in interactive " +"interpreter." +msgstr "" + +#: ../../../build/NEWS:27653 +msgid ":issue:`23392`: Added tests for marshal C API that works with FILE*." +msgstr "" + +#: ../../../build/NEWS:27655 +msgid "" +":issue:`10510`: distutils register and upload methods now use HTML standards" +" compliant CRLF line endings." +msgstr "" + +#: ../../../build/NEWS:27658 +msgid "" +":issue:`9850`: Fixed macpath.join() for empty first component. Patch by " +"Oleg Oshmyan." +msgstr "" + +#: ../../../build/NEWS:27661 +msgid "" +":issue:`5309`: distutils' build and build_ext commands now accept a ``-j`` " +"option to enable parallel building of extension modules." +msgstr "" + +#: ../../../build/NEWS:27664 +msgid "" +":issue:`22448`: Improve canceled timer handles cleanup to prevent unbound " +"memory usage. Patch by Joshua Moore-Oliva." +msgstr "" + +#: ../../../build/NEWS:27667 +msgid "" +":issue:`22427`: TemporaryDirectory no longer attempts to clean up twice when" +" used in the with statement in generator." +msgstr "" + +#: ../../../build/NEWS:27670 +msgid "" +":issue:`22362`: Forbidden ambiguous octal escapes out of range 0-0o377 in " +"regular expressions." +msgstr "" + +#: ../../../build/NEWS:27673 +msgid "" +":issue:`20912`: Now directories added to ZIP file have correct Unix and MS-" +"DOS directory attributes." +msgstr "" + +#: ../../../build/NEWS:27676 +msgid "" +":issue:`21866`: ZipFile.close() no longer writes ZIP64 central directory " +"records if allowZip64 is false." +msgstr "" + +#: ../../../build/NEWS:27679 +msgid "" +":issue:`22278`: Fix urljoin problem with relative urls, a regression " +"observed after changes to issue22118 were submitted." +msgstr "" + +#: ../../../build/NEWS:27682 +msgid "" +":issue:`22415`: Fixed debugging output of the GROUPREF_EXISTS opcode in the " +"re module. Removed trailing spaces in debugging output." +msgstr "" + +#: ../../../build/NEWS:27685 +msgid "" +":issue:`22423`: Unhandled exception in thread no longer causes unhandled " +"AttributeError when sys.stderr is None." +msgstr "" + +#: ../../../build/NEWS:27688 +msgid "" +":issue:`21332`: Ensure that ``bufsize=1`` in subprocess.Popen() selects line" +" buffering, rather than block buffering. Patch by Akira Li." +msgstr "" + +#: ../../../build/NEWS:27691 +msgid "" +":issue:`21091`: Fix API bug: email.message.EmailMessage.is_attachment is now" +" a method." +msgstr "" + +#: ../../../build/NEWS:27694 +msgid "" +":issue:`21079`: Fix email.message.EmailMessage.is_attachment to return the " +"correct result when the header has parameters as well as a value." +msgstr "" + +#: ../../../build/NEWS:27697 +msgid ":issue:`22247`: Add NNTPError to nntplib.__all__." +msgstr "" + +#: ../../../build/NEWS:27699 +msgid "" +":issue:`22366`: urllib.request.urlopen will accept a context object " +"(SSLContext) as an argument which will then be used for HTTPS connection. " +"Patch by Alex Gaynor." +msgstr "" + +#: ../../../build/NEWS:27703 +msgid "" +":issue:`4180`: The warnings registries are now reset when the filters are " +"modified." +msgstr "" + +#: ../../../build/NEWS:27706 +msgid "" +":issue:`22419`: Limit the length of incoming HTTP request in wsgiref server " +"to 65536 bytes and send a 414 error code for higher lengths. Patch " +"contributed by Devin Cook." +msgstr "" + +#: ../../../build/NEWS:27710 +msgid "" +"Lax cookie parsing in http.cookies could be a security issue when combined " +"with non-standard cookie handling in some Web browsers. Reported by Sergey " +"Bobrov." +msgstr "" + +#: ../../../build/NEWS:27714 +msgid "" +":issue:`20537`: logging methods now accept an exception instance as well as " +"a Boolean value or exception tuple. Thanks to Yury Selivanov for the patch." +msgstr "" + +#: ../../../build/NEWS:27717 +msgid "" +":issue:`22384`: An exception in Tkinter callback no longer crashes the " +"program when it is run with pythonw.exe." +msgstr "" + +#: ../../../build/NEWS:27720 +msgid "" +":issue:`22168`: Prevent turtle AttributeError with non-default Canvas on OS " +"X." +msgstr "" + +#: ../../../build/NEWS:27722 +msgid "" +":issue:`21147`: sqlite3 now raises an exception if the request contains a " +"null character instead of truncating it. Based on patch by Victor Stinner." +msgstr "" + +#: ../../../build/NEWS:27725 +msgid "" +":issue:`13968`: The glob module now supports recursive search in " +"subdirectories using the ``**`` pattern." +msgstr "" + +#: ../../../build/NEWS:27728 +msgid "" +":issue:`21951`: Fixed a crash in Tkinter on AIX when called Tcl command with" +" empty string or tuple argument." +msgstr "" + +#: ../../../build/NEWS:27731 +msgid "" +":issue:`21951`: Tkinter now most likely raises MemoryError instead of crash " +"if the memory allocation fails." +msgstr "" + +#: ../../../build/NEWS:27734 +msgid "" +":issue:`22338`: Fix a crash in the json module on memory allocation failure." +msgstr "" + +#: ../../../build/NEWS:27736 +msgid "" +":issue:`12410`: imaplib.IMAP4 now supports the context management protocol. " +"Original patch by Tarek Ziadé." +msgstr "" + +#: ../../../build/NEWS:27739 +msgid "" +":issue:`21270`: We now override tuple methods in mock.call objects so that " +"they can be used as normal call attributes." +msgstr "" + +#: ../../../build/NEWS:27742 +msgid "" +":issue:`16662`: load_tests() is now unconditionally run when it is present " +"in a package's __init__.py. TestLoader.loadTestsFromModule() still accepts " +"use_load_tests, but it is deprecated and ignored. A new keyword-only " +"attribute `pattern` is added and documented. Patch given by Robert Collins," +" tweaked by Barry Warsaw." +msgstr "" + +#: ../../../build/NEWS:27748 +msgid "" +":issue:`22226`: First letter no longer is stripped from the \"status\" key " +"in the result of Treeview.heading()." +msgstr "" + +#: ../../../build/NEWS:27751 +msgid "" +":issue:`19524`: Fixed resource leak in the HTTP connection when an invalid " +"response is received. Patch by Martin Panter." +msgstr "" + +#: ../../../build/NEWS:27754 +msgid "" +":issue:`20421`: Add a .version() method to SSL sockets exposing the actual " +"protocol version in use." +msgstr "" + +#: ../../../build/NEWS:27757 +msgid "" +":issue:`19546`: configparser exceptions no longer expose implementation " +"details. Chained KeyErrors are removed, which leads to cleaner tracebacks. " +"Patch by Claudiu Popa." +msgstr "" + +#: ../../../build/NEWS:27761 +msgid "" +":issue:`22051`: turtledemo no longer reloads examples to re-run them. " +"Initialization of variables and gui setup should be done in main(), which is" +" called each time a demo is run, but not on import." +msgstr "" + +#: ../../../build/NEWS:27765 +msgid "" +":issue:`21933`: Turtledemo users can change the code font size with a menu " +"selection or control(command) '-' or '+' or control-mousewheel. Original " +"patch by Lita Cho." +msgstr "" + +#: ../../../build/NEWS:27769 +msgid "" +":issue:`21597`: The separator between the turtledemo text pane and the " +"drawing canvas can now be grabbed and dragged with a mouse. The code text " +"pane can be widened to easily view or copy the full width of the text. The " +"canvas can be widened on small screens. Original patches by Jan Kanis and " +"Lita Cho." +msgstr "" + +#: ../../../build/NEWS:27775 +msgid "" +":issue:`18132`: Turtledemo buttons no longer disappear when the window is " +"shrunk. Original patches by Jan Kanis and Lita Cho." +msgstr "" + +#: ../../../build/NEWS:27778 +msgid "" +":issue:`22043`: time.monotonic() is now always available. " +"``threading.Lock.acquire()``, ``threading.RLock.acquire()`` and socket " +"operations now use a monotonic clock, instead of the system clock, when a " +"timeout is used." +msgstr "" + +#: ../../../build/NEWS:27783 +msgid "" +":issue:`21527`: Add a default number of workers to ThreadPoolExecutor equal " +"to 5 times the number of CPUs. Patch by Claudiu Popa." +msgstr "" + +#: ../../../build/NEWS:27786 +msgid "" +":issue:`22216`: smtplib now resets its state more completely after a quit. " +"The most obvious consequence of the previous behavior was a STARTTLS failure" +" during a connect/starttls/quit/connect/starttls sequence." +msgstr "" + +#: ../../../build/NEWS:27790 +msgid "" +":issue:`22098`: ctypes' BigEndianStructure and LittleEndianStructure now " +"define an empty __slots__ so that subclasses don't always get an instance " +"dict. Patch by Claudiu Popa." +msgstr "" + +#: ../../../build/NEWS:27794 +msgid "" +":issue:`22185`: Fix an occasional RuntimeError in threading.Condition.wait()" +" caused by mutation of the waiters queue without holding the lock. Patch by" +" Doug Zongker." +msgstr "" + +#: ../../../build/NEWS:27798 +msgid "" +":issue:`22287`: On UNIX, _PyTime_gettimeofday() now uses " +"clock_gettime(CLOCK_REALTIME) if available. As a side effect, Python now " +"depends on the librt library on Solaris and on Linux (only with glibc older " +"than 2.17)." +msgstr "" + +#: ../../../build/NEWS:27803 +msgid "" +":issue:`22182`: Use e.args to unpack exceptions correctly in " +"distutils.file_util.move_file. Patch by Claudiu Popa." +msgstr "" + +#: ../../../build/NEWS:27806 +msgid "" +"The webbrowser module now uses subprocess's start_new_session=True rather " +"than a potentially risky preexec_fn=os.setsid call." +msgstr "" + +#: ../../../build/NEWS:27809 +msgid "" +":issue:`22042`: signal.set_wakeup_fd(fd) now raises an exception if the file" +" descriptor is in blocking mode." +msgstr "" + +#: ../../../build/NEWS:27812 +msgid "" +":issue:`16808`: inspect.stack() now returns a named tuple instead of a " +"tuple. Patch by Daniel Shahaf." +msgstr "" + +#: ../../../build/NEWS:27815 +msgid "" +":issue:`22236`: Fixed Tkinter images copying operations in NoDefaultRoot " +"mode." +msgstr "" + +#: ../../../build/NEWS:27817 +msgid "" +":issue:`2527`: Add a *globals* argument to timeit functions, in order to " +"override the globals namespace in which the timed code is executed. Patch by" +" Ben Roberts." +msgstr "" + +#: ../../../build/NEWS:27821 +msgid "" +":issue:`22118`: Switch urllib.parse to use RFC 3986 semantics for the " +"resolution of relative URLs, rather than RFCs 1808 and 2396. Patch by Demian" +" Brecht." +msgstr "" + +#: ../../../build/NEWS:27825 +msgid ":issue:`21549`: Added the \"members\" parameter to TarFile.list()." +msgstr "" + +#: ../../../build/NEWS:27827 +msgid "" +":issue:`19628`: Allow compileall recursion depth to be specified with a -r " +"option." +msgstr "" + +#: ../../../build/NEWS:27830 +msgid "" +":issue:`15696`: Add a __sizeof__ implementation for mmap objects on Windows." +msgstr "" + +#: ../../../build/NEWS:27832 +msgid "" +":issue:`22068`: Avoided reference loops with Variables and Fonts in Tkinter." +msgstr "" + +#: ../../../build/NEWS:27834 +msgid "" +":issue:`22165`: SimpleHTTPRequestHandler now supports undecodable file " +"names." +msgstr "" + +#: ../../../build/NEWS:27836 +msgid ":issue:`15381`: Optimized line reading in io.BytesIO." +msgstr "" + +#: ../../../build/NEWS:27838 +msgid "" +":issue:`8797`: Raise HTTPError on failed Basic Authentication immediately. " +"Initial patch by Sam Bull." +msgstr "" + +#: ../../../build/NEWS:27841 +msgid "" +":issue:`20729`: Restored the use of lazy iterkeys()/itervalues()/iteritems()" +" in the mailbox module." +msgstr "" + +#: ../../../build/NEWS:27844 +msgid "" +":issue:`21448`: Changed FeedParser feed() to avoid O(N\\ :sup:`2`) behavior " +"when parsing long line. Original patch by Raymond Hettinger." +msgstr "" + +#: ../../../build/NEWS:27847 +msgid "" +":issue:`22184`: The functools LRU Cache decorator factory now gives an " +"earlier and clearer error message when the user forgets the required " +"parameters." +msgstr "" + +#: ../../../build/NEWS:27850 +msgid "" +":issue:`17923`: glob() patterns ending with a slash no longer match non-dirs" +" on AIX. Based on patch by Delhallt." +msgstr "" + +#: ../../../build/NEWS:27853 +msgid ":issue:`21725`: Added support for RFC 6531 (SMTPUTF8) in smtpd." +msgstr "" + +#: ../../../build/NEWS:27855 +msgid "" +":issue:`22176`: Update the ctypes module's libffi to v3.1. This release " +"adds support for the Linux AArch64 and POWERPC ELF ABIv2 little endian " +"architectures." +msgstr "" + +#: ../../../build/NEWS:27859 +msgid "" +":issue:`5411`: Added support for the \"xztar\" format in the shutil module." +msgstr "" + +#: ../../../build/NEWS:27861 +msgid "" +":issue:`21121`: Don't force 3rd party C extensions to be built with " +"-Werror=declaration-after-statement." +msgstr "" + +#: ../../../build/NEWS:27864 +msgid "" +":issue:`21975`: Fixed crash when using uninitialized sqlite3.Row (in " +"particular when unpickling pickled sqlite3.Row). sqlite3.Row is now " +"initialized in the __new__() method." +msgstr "" + +#: ../../../build/NEWS:27868 +msgid ":issue:`20170`: Convert posixmodule to use Argument Clinic." +msgstr "" + +#: ../../../build/NEWS:27870 +msgid "" +":issue:`21539`: Add an *exists_ok* argument to `Pathlib.mkdir()` to mimic " +"`mkdir -p` and `os.makedirs()` functionality. When true, ignore " +"FileExistsErrors. Patch by Berker Peksag." +msgstr "" + +#: ../../../build/NEWS:27874 +msgid "" +":issue:`22127`: Bypass IDNA for pure-ASCII host names in the socket module " +"(in particular for numeric IPs)." +msgstr "" + +#: ../../../build/NEWS:27877 +msgid "" +":issue:`21047`: set the default value for the *convert_charrefs* argument of" +" HTMLParser to True. Patch by Berker Peksag." +msgstr "" + +#: ../../../build/NEWS:27880 +msgid "Add an __all__ to html.entities." +msgstr "在 html.entities 包中增加 __all__ 变量。" + +#: ../../../build/NEWS:27882 +msgid "" +":issue:`15114`: the strict mode and argument of HTMLParser, " +"HTMLParser.error, and the HTMLParserError exception have been removed." +msgstr "" + +#: ../../../build/NEWS:27885 +msgid ":issue:`22085`: Dropped support of Tk 8.3 in Tkinter." +msgstr "" + +#: ../../../build/NEWS:27887 +msgid "" +":issue:`21580`: Now Tkinter correctly handles bytes arguments passed to Tk. " +"In particular this allows initializing images from binary data." +msgstr "" + +#: ../../../build/NEWS:27890 +msgid "" +":issue:`22003`: When initialized from a bytes object, io.BytesIO() now " +"defers making a copy until it is mutated, improving performance and memory " +"use on some use cases. Patch by David Wilson." +msgstr "" + +#: ../../../build/NEWS:27894 +msgid "" +":issue:`22018`: On Windows, signal.set_wakeup_fd() now also supports " +"sockets. A side effect is that Python depends to the WinSock library." +msgstr "" + +#: ../../../build/NEWS:27897 +msgid "" +":issue:`22054`: Add os.get_blocking() and os.set_blocking() functions to get" +" and set the blocking mode of a file descriptor (False if the O_NONBLOCK " +"flag is set, True otherwise). These functions are not available on Windows." +msgstr "" + +#: ../../../build/NEWS:27902 +msgid "" +":issue:`17172`: Make turtledemo start as active on OS X even when run with " +"subprocess. Patch by Lita Cho." +msgstr "" + +#: ../../../build/NEWS:27905 +msgid "" +":issue:`21704`: Fix build error for _multiprocessing when semaphores are not" +" available. Patch by Arfrever Frehtes Taifersar Arahesis." +msgstr "" + +#: ../../../build/NEWS:27908 +msgid "" +":issue:`20173`: Convert sha1, sha256, sha512 and md5 to ArgumentClinic. " +"Patch by Vajrasky Kok." +msgstr "" + +#: ../../../build/NEWS:27911 +msgid "" +"Fix repr(_socket.socket) on Windows 64-bit: don't fail with OverflowError on" +" closed socket. repr(socket.socket) already works fine." +msgstr "" + +#: ../../../build/NEWS:27914 +msgid "" +":issue:`22033`: Reprs of most Python implemented classes now contain actual " +"class name instead of hardcoded one." +msgstr "" + +#: ../../../build/NEWS:27917 +msgid "" +":issue:`21947`: The dis module can now disassemble generator-iterator " +"objects based on their gi_code attribute. Patch by Clement Rouault." +msgstr "" + +#: ../../../build/NEWS:27920 +msgid "" +":issue:`16133`: The asynchat.async_chat.handle_read() method now ignores " +"BlockingIOError exceptions." +msgstr "" + +#: ../../../build/NEWS:27923 +msgid "" +":issue:`22044`: Fixed premature DECREF in call_tzinfo_method. Patch by Tom " +"Flanagan." +msgstr "" + +#: ../../../build/NEWS:27926 +msgid "" +":issue:`19884`: readline: Disable the meta modifier key if stdout is not a " +"terminal to not write the ANSI sequence ``\"\\033[1034h\"`` into stdout. " +"This sequence is used on some terminal (ex: TERM=xterm-256color\") to enable" +" support of 8 bit characters." +msgstr "" + +#: ../../../build/NEWS:27931 +msgid "" +":issue:`4350`: Removed a number of out-of-dated and non-working for a long " +"time Tkinter methods." +msgstr "" + +#: ../../../build/NEWS:27934 +msgid "" +":issue:`6167`: Scrollbar.activate() now returns the name of active element " +"if the argument is not specified. Scrollbar.set() now always accepts only 2" +" arguments." +msgstr "" + +#: ../../../build/NEWS:27938 +msgid ":issue:`15275`: Clean up and speed up the ntpath module." +msgstr "" + +#: ../../../build/NEWS:27940 +msgid "" +":issue:`21888`: plistlib's load() and loads() now work if the fmt parameter " +"is specified." +msgstr "" + +#: ../../../build/NEWS:27943 +msgid "" +":issue:`22032`: __qualname__ instead of __name__ is now always used to " +"format fully qualified class names of Python implemented classes." +msgstr "" + +#: ../../../build/NEWS:27946 +msgid "" +":issue:`22031`: Reprs now always use hexadecimal format with the \"0x\" " +"prefix when contain an id in form \" at 0x...\"." +msgstr "" + +#: ../../../build/NEWS:27949 +msgid "" +":issue:`22018`: signal.set_wakeup_fd() now raises an OSError instead of a " +"ValueError on ``fstat()`` failure." +msgstr "" + +#: ../../../build/NEWS:27952 +msgid "" +":issue:`21044`: tarfile.open() now handles fileobj with an integer 'name' " +"attribute. Based on patch by Antoine Pietri." +msgstr "" + +#: ../../../build/NEWS:27955 +msgid "" +":issue:`21966`: Respect -q command-line option when code module is ran." +msgstr "" + +#: ../../../build/NEWS:27957 +msgid "" +":issue:`19076`: Don't pass the redundant 'file' argument to self.error()." +msgstr "" + +#: ../../../build/NEWS:27959 +msgid "" +":issue:`16382`: Improve exception message of warnings.warn() for bad " +"category. Initial patch by Phil Elson." +msgstr "" + +#: ../../../build/NEWS:27962 +msgid "" +":issue:`21932`: os.read() now uses a :c:func:`Py_ssize_t` type instead of " +":c:type:`int` for the size to support reading more than 2 GB at once. On " +"Windows, the size is truncated to INT_MAX. As any call to os.read(), the OS " +"may read less bytes than the number of requested bytes." +msgstr "" + +#: ../../../build/NEWS:27967 +msgid "" +":issue:`21942`: Fixed source file viewing in pydoc's server mode on Windows." +msgstr "" + +#: ../../../build/NEWS:27969 +msgid "" +":issue:`11259`: asynchat.async_chat().set_terminator() now raises a " +"ValueError if the number of received bytes is negative." +msgstr "" + +#: ../../../build/NEWS:27972 +msgid "" +":issue:`12523`: asynchat.async_chat.push() now raises a TypeError if it " +"doesn't get a bytes string" +msgstr "" + +#: ../../../build/NEWS:27975 +msgid "" +":issue:`21707`: Add missing kwonlyargcount argument to " +"ModuleFinder.replace_paths_in_code()." +msgstr "" + +#: ../../../build/NEWS:27978 +msgid "" +":issue:`20639`: calling Path.with_suffix('') allows removing the suffix " +"again. Patch by July Tikhonov." +msgstr "" + +#: ../../../build/NEWS:27981 +msgid "" +":issue:`21714`: Disallow the construction of invalid paths using " +"Path.with_name(). Original patch by Antony Lee." +msgstr "" + +#: ../../../build/NEWS:27984 +msgid "" +":issue:`15014`: Added 'auth' method to smtplib to make implementing auth " +"mechanisms simpler, and used it internally in the login method." +msgstr "" + +#: ../../../build/NEWS:27987 +msgid "" +":issue:`21151`: Fixed a segfault in the winreg module when ``None`` is " +"passed as a ``REG_BINARY`` value to SetValueEx. Patch by John Ehresman." +msgstr "" + +#: ../../../build/NEWS:27990 +msgid "" +":issue:`21090`: io.FileIO.readall() does not ignore I/O errors anymore. " +"Before, it ignored I/O errors if at least the first C call read() succeed." +msgstr "" + +#: ../../../build/NEWS:27993 +msgid "" +":issue:`5800`: headers parameter of wsgiref.headers.Headers is now optional." +" Initial patch by Pablo Torres Navarrete and SilentGhost." +msgstr "" + +#: ../../../build/NEWS:27996 +msgid ":issue:`21781`: ssl.RAND_add() now supports strings longer than 2 GB." +msgstr "" + +#: ../../../build/NEWS:27998 +msgid "" +":issue:`21679`: Prevent extraneous fstat() calls during open(). Patch by " +"Bohuslav Kabrda." +msgstr "" + +#: ../../../build/NEWS:28001 +msgid "" +":issue:`21863`: cProfile now displays the module name of C extension " +"functions, in addition to their own name." +msgstr "" + +#: ../../../build/NEWS:28004 +msgid "" +":issue:`11453`: asyncore: emit a ResourceWarning when an unclosed " +"file_wrapper object is destroyed. The destructor now closes the file if " +"needed. The close() method can now be called twice: the second call does " +"nothing." +msgstr "" + +#: ../../../build/NEWS:28008 +msgid "" +":issue:`21858`: Better handling of Python exceptions in the sqlite3 module." +msgstr "" + +#: ../../../build/NEWS:28010 +msgid "" +":issue:`21476`: Make sure the email.parser.BytesParser TextIOWrapper is " +"discarded after parsing, so the input file isn't unexpectedly closed." +msgstr "" + +#: ../../../build/NEWS:28013 +msgid ":issue:`20295`: imghdr now recognizes OpenEXR format images." +msgstr "" + +#: ../../../build/NEWS:28015 +msgid "" +":issue:`21729`: Used the \"with\" statement in the dbm.dumb module to ensure" +" files closing. Patch by Claudiu Popa." +msgstr "" + +#: ../../../build/NEWS:28018 +msgid "" +":issue:`21491`: socketserver: Fix a race condition in child processes " +"reaping." +msgstr "" + +#: ../../../build/NEWS:28020 +msgid "" +":issue:`21719`: Added the ``st_file_attributes`` field to os.stat_result on " +"Windows." +msgstr "" + +#: ../../../build/NEWS:28023 +msgid ":issue:`21832`: Require named tuple inputs to be exact strings." +msgstr "" + +#: ../../../build/NEWS:28025 +msgid "" +":issue:`21722`: The distutils \"upload\" command now exits with a non-zero " +"return code when uploading fails. Patch by Martin Dengler." +msgstr "" + +#: ../../../build/NEWS:28028 +msgid "" +":issue:`21723`: asyncio.Queue: support any type of number (ex: float) for " +"the maximum size. Patch written by Vajrasky Kok." +msgstr "" + +#: ../../../build/NEWS:28031 +msgid "" +":issue:`21711`: support for \"site-python\" directories has now been removed" +" from the site module (it was deprecated in 3.4)." +msgstr "" + +#: ../../../build/NEWS:28034 +msgid "" +":issue:`17552`: new socket.sendfile() method allowing a file to be sent over" +" a socket by using high-performance os.sendfile() on UNIX. Patch by " +"Giampaolo Rodola'." +msgstr "" + +#: ../../../build/NEWS:28038 +msgid "" +":issue:`18039`: dbm.dump.open() now always creates a new database when the " +"flag has the value 'n'. Patch by Claudiu Popa." +msgstr "" + +#: ../../../build/NEWS:28041 +msgid "" +":issue:`21326`: Add a new is_closed() method to asyncio.BaseEventLoop. " +"run_forever() and run_until_complete() methods of asyncio.BaseEventLoop now " +"raise an exception if the event loop was closed." +msgstr "" + +#: ../../../build/NEWS:28045 +msgid "" +":issue:`21766`: Prevent a security hole in CGIHTTPServer by URL unquoting " +"paths before checking for a CGI script at that path." +msgstr "" + +#: ../../../build/NEWS:28048 +msgid ":issue:`21310`: Fixed possible resource leak in failed open()." +msgstr "" + +#: ../../../build/NEWS:28050 +msgid "" +":issue:`21256`: Printout of keyword args should be in deterministic order in" +" a mock function call. This will help to write better doctests." +msgstr "" + +#: ../../../build/NEWS:28053 +msgid "" +":issue:`21677`: Fixed chaining nonnormalized exceptions in io close() " +"methods." +msgstr "" + +#: ../../../build/NEWS:28055 +msgid "" +":issue:`11709`: Fix the pydoc.help function to not fail when sys.stdin is " +"not a valid file." +msgstr "" + +#: ../../../build/NEWS:28058 +msgid "" +":issue:`21515`: tempfile.TemporaryFile now uses os.O_TMPFILE flag is " +"available." +msgstr "" + +#: ../../../build/NEWS:28060 +msgid "" +":issue:`13223`: Fix pydoc.writedoc so that the HTML documentation for " +"methods that use 'self' in the example code is generated correctly." +msgstr "" + +#: ../../../build/NEWS:28063 +msgid ":issue:`21463`: In urllib.request, fix pruning of the FTP cache." +msgstr "" + +#: ../../../build/NEWS:28065 +msgid "" +":issue:`21618`: The subprocess module could fail to close open fds that were" +" inherited by the calling process and already higher than POSIX resource " +"limits would otherwise allow. On systems with a functioning /proc/self/fd " +"or /dev/fd interface the max is now ignored and all fds are closed." +msgstr "" + +#: ../../../build/NEWS:28070 +msgid "" +":issue:`20383`: Introduce importlib.util.module_from_spec() as the preferred" +" way to create a new module." +msgstr "" + +#: ../../../build/NEWS:28073 +msgid "" +":issue:`21552`: Fixed possible integer overflow of too long string lengths " +"in the tkinter module on 64-bit platforms." +msgstr "" + +#: ../../../build/NEWS:28076 +msgid "" +":issue:`14315`: The zipfile module now ignores extra fields in the central " +"directory that are too short to be parsed instead of letting a struct.unpack" +" error bubble up as this \"bad data\" appears in many real world zip files " +"in the wild and is ignored by other zip tools." +msgstr "" + +#: ../../../build/NEWS:28081 +msgid "" +":issue:`13742`: Added \"key\" and \"reverse\" parameters to heapq.merge(). " +"(First draft of patch contributed by Simon Sapin.)" +msgstr "" + +#: ../../../build/NEWS:28084 +msgid "" +":issue:`21402`: tkinter.ttk now works when default root window is not set." +msgstr "" + +#: ../../../build/NEWS:28086 +msgid "" +":issue:`3015`: _tkinter.create() now creates tkapp object with wantobject=1 " +"by default." +msgstr "" + +#: ../../../build/NEWS:28089 +msgid "" +":issue:`10203`: sqlite3.Row now truly supports sequence protocol. In " +"particular it supports reverse() and negative indices. Original patch by " +"Claudiu Popa." +msgstr "" + +#: ../../../build/NEWS:28093 +msgid "" +":issue:`18807`: If copying (no symlinks) specified for a venv, then the " +"python interpreter aliases (python, python3) are now created by copying " +"rather than symlinking." +msgstr "" + +#: ../../../build/NEWS:28097 +msgid "" +":issue:`20197`: Added support for the WebP image type in the imghdr module. " +"Patch by Fabrice Aneche and Claudiu Popa." +msgstr "" + +#: ../../../build/NEWS:28100 +msgid "" +":issue:`21513`: Speedup some properties of IP addresses (IPv4Address, " +"IPv6Address) such as .is_private or .is_multicast." +msgstr "" + +#: ../../../build/NEWS:28103 +msgid "" +":issue:`21137`: Improve the repr for threading.Lock() and its variants by " +"showing the \"locked\" or \"unlocked\" status. Patch by Berker Peksag." +msgstr "" + +#: ../../../build/NEWS:28106 +msgid "" +":issue:`21538`: The plistlib module now supports loading of binary plist " +"files when reference or offset size is not a power of two." +msgstr "" + +#: ../../../build/NEWS:28109 +msgid ":issue:`21455`: Add a default backlog to socket.listen()." +msgstr "" + +#: ../../../build/NEWS:28111 +msgid "" +":issue:`21525`: Most Tkinter methods which accepted tuples now accept lists " +"too." +msgstr "" + +#: ../../../build/NEWS:28114 +msgid "" +":issue:`22166`: With the assistance of a new internal _codecs._forget_codec " +"helping function, test_codecs now clears the encoding caches to avoid the " +"appearance of a reference leak" +msgstr "" + +#: ../../../build/NEWS:28118 +msgid "" +":issue:`22236`: Tkinter tests now don't reuse default root window. New root" +" window is created for every test class." +msgstr "" + +#: ../../../build/NEWS:28121 +msgid "" +":issue:`10744`: Fix :pep:`3118` format strings on ctypes objects with a " +"nontrivial shape." +msgstr "" + +#: ../../../build/NEWS:28124 +msgid ":issue:`20826`: Optimize ipaddress.collapse_addresses()." +msgstr "" + +#: ../../../build/NEWS:28126 +msgid "" +":issue:`21487`: Optimize ipaddress.summarize_address_range() and " +"ipaddress.{IPv4Network,IPv6Network}.subnets()." +msgstr "" + +#: ../../../build/NEWS:28129 +msgid "" +":issue:`21486`: Optimize parsing of netmasks in ipaddress.IPv4Network and " +"ipaddress.IPv6Network." +msgstr "" + +#: ../../../build/NEWS:28132 +msgid "" +":issue:`13916`: Disallowed the surrogatepass error handler for non UTF-\\* " +"encodings." +msgstr "" + +#: ../../../build/NEWS:28135 +msgid "" +":issue:`20998`: Fixed re.fullmatch() of repeated single character pattern " +"with ignore case. Original patch by Matthew Barnett." +msgstr "" + +#: ../../../build/NEWS:28138 +msgid "" +":issue:`21075`: fileinput.FileInput now reads bytes from standard stream if " +"binary mode is specified. Patch by Sam Kimbrel." +msgstr "" + +#: ../../../build/NEWS:28141 +msgid "" +":issue:`19775`: Add a samefile() method to pathlib Path objects. Initial " +"patch by Vajrasky Kok." +msgstr "" + +#: ../../../build/NEWS:28144 +msgid "" +":issue:`21226`: Set up modules properly in PyImport_ExecCodeModuleObject " +"(and friends)." +msgstr "" + +#: ../../../build/NEWS:28147 +msgid "" +":issue:`21398`: Fix a unicode error in the pydoc pager when the " +"documentation contains characters not encodable to the stdout encoding." +msgstr "" + +#: ../../../build/NEWS:28150 +msgid "" +":issue:`16531`: ipaddress.IPv4Network and ipaddress.IPv6Network now accept " +"an (address, netmask) tuple argument, so as to easily construct network " +"objects from existing addresses." +msgstr "" + +#: ../../../build/NEWS:28154 +msgid "" +":issue:`21156`: importlib.abc.InspectLoader.source_to_code() is now a " +"staticmethod." +msgstr "" + +#: ../../../build/NEWS:28157 +msgid "" +":issue:`21424`: Simplified and optimized heaqp.nlargest() and nmsmallest() " +"to make fewer tuple comparisons." +msgstr "" + +#: ../../../build/NEWS:28160 +msgid "" +":issue:`21396`: Fix TextIOWrapper(..., write_through=True) to not force a " +"flush() on the underlying binary stream. Patch by akira." +msgstr "" + +#: ../../../build/NEWS:28163 +msgid "" +":issue:`18314`: Unlink now removes junctions on Windows. Patch by Kim " +"Gräsman" +msgstr "" + +#: ../../../build/NEWS:28165 +msgid "" +":issue:`21088`: Bugfix for curses.window.addch() regression in 3.4.0. In " +"porting to Argument Clinic, the first two arguments were reversed." +msgstr "" + +#: ../../../build/NEWS:28168 +msgid ":issue:`21407`: _decimal: The module now supports function signatures." +msgstr "" + +#: ../../../build/NEWS:28170 +msgid "" +":issue:`10650`: Remove the non-standard 'watchexp' parameter from the " +"Decimal.quantize() method in the Python version. It had never been present " +"in the C version." +msgstr "" + +#: ../../../build/NEWS:28174 +msgid "" +":issue:`21469`: Reduced the risk of false positives in robotparser by " +"checking to make sure that robots.txt has been read or does not exist prior " +"to returning True in can_fetch()." +msgstr "" + +#: ../../../build/NEWS:28178 +msgid "" +":issue:`19414`: Have the OrderedDict mark deleted links as unusable. This " +"gives an early failure if the link is deleted during iteration." +msgstr "" + +#: ../../../build/NEWS:28181 +msgid "" +":issue:`21421`: Add __slots__ to the MappingViews ABC. Patch by Josh " +"Rosenberg." +msgstr "" + +#: ../../../build/NEWS:28183 +msgid "" +":issue:`21101`: Eliminate double hashing in the C speed-up code for " +"collections.Counter()." +msgstr "" + +#: ../../../build/NEWS:28186 +msgid "" +":issue:`21321`: itertools.islice() now releases the reference to the source " +"iterator when the slice is exhausted. Patch by Anton Afanasyev." +msgstr "" + +#: ../../../build/NEWS:28189 +msgid "" +":issue:`21057`: TextIOWrapper now allows the underlying binary stream's " +"read() or read1() method to return an arbitrary bytes-like object (such as a" +" memoryview). Patch by Nikolaus Rath." +msgstr "" + +#: ../../../build/NEWS:28193 +msgid "" +":issue:`20951`: SSLSocket.send() now raises either SSLWantReadError or " +"SSLWantWriteError on a non-blocking socket if the operation would block. " +"Previously, it would return 0. Patch by Nikolaus Rath." +msgstr "" + +#: ../../../build/NEWS:28197 +msgid "" +":issue:`13248`: removed previously deprecated asyncore.dispatcher " +"__getattr__ cheap inheritance hack." +msgstr "" + +#: ../../../build/NEWS:28200 +msgid "" +":issue:`9815`: assertRaises now tries to clear references to local variables" +" in the exception's traceback." +msgstr "" + +#: ../../../build/NEWS:28203 +msgid "" +":issue:`19940`: ssl.cert_time_to_seconds() now interprets the given time " +"string in the UTC timezone (as specified in RFC 5280), not the local " +"timezone." +msgstr "" + +#: ../../../build/NEWS:28206 +msgid "" +":issue:`13204`: Calling sys.flags.__new__ would crash the interpreter, now " +"it raises a TypeError." +msgstr "" + +#: ../../../build/NEWS:28209 +msgid "" +":issue:`19385`: Make operations on a closed dbm.dumb database always raise " +"the same exception." +msgstr "" + +#: ../../../build/NEWS:28212 +msgid "" +":issue:`21207`: Detect when the os.urandom cached fd has been closed or " +"replaced, and open it anew." +msgstr "" + +#: ../../../build/NEWS:28215 +msgid "" +":issue:`21291`: subprocess's Popen.wait() is now thread safe so that " +"multiple threads may be calling wait() or poll() on a Popen instance at the " +"same time without losing the Popen.returncode value." +msgstr "" + +#: ../../../build/NEWS:28219 +msgid "" +":issue:`21127`: Path objects can now be instantiated from str subclass " +"instances (such as ``numpy.str_``)." +msgstr "" + +#: ../../../build/NEWS:28222 +msgid "" +":issue:`15002`: urllib.response object to use _TemporaryFileWrapper (and " +"_TemporaryFileCloser) facility. Provides a better way to handle file " +"descriptor close. Patch contributed by Christian Theune." +msgstr "" + +#: ../../../build/NEWS:28226 +msgid "" +":issue:`12220`: mindom now raises a custom ValueError indicating it doesn't " +"support spaces in URIs instead of letting a 'split' ValueError bubble up." +msgstr "" + +#: ../../../build/NEWS:28229 +msgid ":issue:`21068`: The ssl.PROTOCOL* constants are now enum members." +msgstr "" + +#: ../../../build/NEWS:28231 +msgid "" +":issue:`21276`: posixmodule: Don't define USE_XATTRS on KFreeBSD and the " +"Hurd." +msgstr "" + +#: ../../../build/NEWS:28233 +msgid "" +":issue:`21262`: New method assert_not_called for Mock. It raises " +"AssertionError if the mock has been called." +msgstr "" + +#: ../../../build/NEWS:28236 +msgid "" +":issue:`21238`: New keyword argument `unsafe` to Mock. It raises " +"`AttributeError` incase of an attribute startswith assert or assret." +msgstr "" + +#: ../../../build/NEWS:28239 +msgid "" +":issue:`20896`: ssl.get_server_certificate() now uses PROTOCOL_SSLv23, not " +"PROTOCOL_SSLv3, for maximum compatibility." +msgstr "" + +#: ../../../build/NEWS:28242 +msgid "" +":issue:`21239`: patch.stopall() didn't work deterministically when the same " +"name was patched more than once." +msgstr "" + +#: ../../../build/NEWS:28245 +msgid "" +":issue:`21203`: Updated fileConfig and dictConfig to remove inconsistencies." +" Thanks to Jure Koren for the patch." +msgstr "" + +#: ../../../build/NEWS:28248 +msgid "" +":issue:`21222`: Passing name keyword argument to mock.create_autospec now " +"works." +msgstr "" + +#: ../../../build/NEWS:28251 +msgid "" +":issue:`21197`: Add lib64 -> lib symlink in venvs on 64-bit non-OS X POSIX." +msgstr "" + +#: ../../../build/NEWS:28253 +msgid "" +":issue:`17498`: Some SMTP servers disconnect after certain errors, violating" +" strict RFC conformance. Instead of losing the error code when we issue the" +" subsequent RSET, smtplib now returns the error code and defers raising the " +"SMTPServerDisconnected error until the next command is issued." +msgstr "" + +#: ../../../build/NEWS:28258 +msgid "" +":issue:`17826`: setting an iterable side_effect on a mock function created " +"by create_autospec now works. Patch by Kushal Das." +msgstr "" + +#: ../../../build/NEWS:28261 +msgid "" +":issue:`7776`: Fix ``Host:`` header and reconnection when using " +"http.client.HTTPConnection.set_tunnel(). Patch by Nikolaus Rath." +msgstr "" + +#: ../../../build/NEWS:28264 +msgid "" +":issue:`20968`: unittest.mock.MagicMock now supports division. Patch by " +"Johannes Baiter." +msgstr "" + +#: ../../../build/NEWS:28267 +msgid "" +":issue:`21529`: Fix arbitrary memory access in JSONDecoder.raw_decode with a" +" negative second parameter. Bug reported by Guido Vranken. (See also: " +"CVE-2014-4616)" +msgstr "" + +#: ../../../build/NEWS:28271 +msgid "" +":issue:`21169`: getpass now handles non-ascii characters that the input " +"stream encoding cannot encode by re-encoding using the replace error " +"handler." +msgstr "" + +#: ../../../build/NEWS:28274 +msgid "" +":issue:`21171`: Fixed undocumented filter API of the rot13 codec. Patch by " +"Berker Peksag." +msgstr "" + +#: ../../../build/NEWS:28277 +msgid "" +":issue:`20539`: Improved math.factorial error message for large positive " +"inputs and changed exception type (OverflowError -> ValueError) for large " +"negative inputs." +msgstr "" + +#: ../../../build/NEWS:28281 +msgid "" +":issue:`21172`: isinstance check relaxed from dict to collections.Mapping." +msgstr "" + +#: ../../../build/NEWS:28283 +msgid "" +":issue:`21155`: asyncio.EventLoop.create_unix_server() now raises a " +"ValueError if path and sock are specified at the same time." +msgstr "" + +#: ../../../build/NEWS:28286 +msgid "" +":issue:`21136`: Avoid unnecessary normalization of Fractions resulting from " +"power and other operations. Patch by Raymond Hettinger." +msgstr "" + +#: ../../../build/NEWS:28289 +msgid ":issue:`17621`: Introduce importlib.util.LazyLoader." +msgstr "" + +#: ../../../build/NEWS:28291 +msgid "" +":issue:`21076`: signal module constants were turned into enums. Patch by " +"Giampaolo Rodola'." +msgstr "" + +#: ../../../build/NEWS:28294 +msgid ":issue:`20636`: Improved the repr of Tkinter widgets." +msgstr "" + +#: ../../../build/NEWS:28296 +msgid "" +":issue:`19505`: The items, keys, and values views of OrderedDict now support" +" reverse iteration using reversed()." +msgstr "" + +#: ../../../build/NEWS:28299 +msgid "" +":issue:`21149`: Improved thread-safety in logging cleanup during interpreter" +" shutdown. Thanks to Devin Jeanpierre for the patch." +msgstr "" + +#: ../../../build/NEWS:28302 +msgid "" +":issue:`21058`: Fix a leak of file descriptor in " +":func:`tempfile.NamedTemporaryFile`, close the file descriptor if " +":func:`io.open` fails" +msgstr "" + +#: ../../../build/NEWS:28306 +msgid "" +":issue:`21200`: Return None from pkgutil.get_loader() when __spec__ is " +"missing." +msgstr "" + +#: ../../../build/NEWS:28308 +msgid "" +":issue:`21013`: Enhance ssl.create_default_context() when used for server " +"side sockets to provide better security by default." +msgstr "" + +#: ../../../build/NEWS:28311 +msgid "" +":issue:`20145`: `assertRaisesRegex` and `assertWarnsRegex` now raise a " +"TypeError if the second argument is not a string or compiled regex." +msgstr "" + +#: ../../../build/NEWS:28314 +msgid ":issue:`20633`: Replace relative import by absolute import." +msgstr "" + +#: ../../../build/NEWS:28316 +msgid ":issue:`20980`: Stop wrapping exception when using ThreadPool." +msgstr "" + +#: ../../../build/NEWS:28318 +msgid "" +":issue:`21082`: In os.makedirs, do not set the process-wide umask. Note this" +" changes behavior of makedirs when exist_ok=True." +msgstr "" + +#: ../../../build/NEWS:28321 +msgid ":issue:`20990`: Fix issues found by pyflakes for multiprocessing." +msgstr "" + +#: ../../../build/NEWS:28323 +msgid "" +":issue:`21015`: SSL contexts will now automatically select an elliptic curve" +" for ECDH key exchange on OpenSSL 1.0.2 and later, and otherwise default to " +"\"prime256v1\"." +msgstr "" + +#: ../../../build/NEWS:28327 +msgid ":issue:`21000`: Improve the command-line interface of json.tool." +msgstr "" + +#: ../../../build/NEWS:28329 +msgid "" +":issue:`20995`: Enhance default ciphers used by the ssl module to enable " +"better security and prioritize perfect forward secrecy." +msgstr "" + +#: ../../../build/NEWS:28332 +msgid "" +":issue:`20884`: Don't assume that __file__ is defined on importlib.__init__." +msgstr "" + +#: ../../../build/NEWS:28334 +msgid "" +":issue:`21499`: Ignore __builtins__ in several test_importlib.test_api " +"tests." +msgstr "" + +#: ../../../build/NEWS:28336 +msgid ":issue:`20627`: xmlrpc.client.ServerProxy is now a context manager." +msgstr "" + +#: ../../../build/NEWS:28338 +msgid "" +":issue:`19165`: The formatter module now raises DeprecationWarning instead " +"of PendingDeprecationWarning." +msgstr "" + +#: ../../../build/NEWS:28341 +msgid "" +":issue:`13936`: Remove the ability of datetime.time instances to be " +"considered false in boolean contexts." +msgstr "" + +#: ../../../build/NEWS:28344 +msgid "" +":issue:`18931`: selectors module now supports /dev/poll on Solaris. Patch by" +" Giampaolo Rodola'." +msgstr "" + +#: ../../../build/NEWS:28347 +msgid "" +":issue:`19977`: When the ``LC_TYPE`` locale is the POSIX locale (``C`` " +"locale), :py:data:`sys.stdin` and :py:data:`sys.stdout` are now using the " +"``surrogateescape`` error handler, instead of the ``strict`` error handler." +msgstr "" + +#: ../../../build/NEWS:28352 +msgid "" +":issue:`20574`: Implement incremental decoder for cp65001 code (Windows code" +" page 65001, Microsoft UTF-8)." +msgstr "" + +#: ../../../build/NEWS:28355 +msgid "" +":issue:`20879`: Delay the initialization of encoding and decoding tables for" +" base32, ascii85 and base85 codecs in the base64 module, and delay the " +"initialization of the unquote_to_bytes() table of the urllib.parse module, " +"to not waste memory if these modules are not used." +msgstr "" + +#: ../../../build/NEWS:28360 +msgid "" +":issue:`19157`: Include the broadcast address in the usuable hosts for IPv6 " +"in ipaddress." +msgstr "" + +#: ../../../build/NEWS:28363 +msgid "" +":issue:`11599`: When an external command (e.g. compiler) fails, distutils " +"now prints out the whole command line (instead of just the command name) if " +"the environment variable DISTUTILS_DEBUG is set." +msgstr "" + +#: ../../../build/NEWS:28367 +msgid "" +":issue:`4931`: distutils should not produce unhelpful \"error: None\" " +"messages anymore. distutils.util.grok_environment_error is kept but doc-" +"deprecated." +msgstr "" + +#: ../../../build/NEWS:28370 +msgid "" +":issue:`20875`: Prevent possible gzip \"'read' is not defined\" NameError. " +"Patch by Claudiu Popa." +msgstr "" + +#: ../../../build/NEWS:28373 +msgid "" +":issue:`11558`: ``email.message.Message.attach`` now returns a more useful " +"error message if ``attach`` is called on a message for which " +"``is_multipart`` is False." +msgstr "" + +#: ../../../build/NEWS:28377 +msgid "" +":issue:`20283`: RE pattern methods now accept the string keyword parameters " +"as documented. The pattern and source keyword parameters are left as " +"deprecated aliases." +msgstr "" + +#: ../../../build/NEWS:28381 +msgid ":issue:`20778`: Fix modulefinder to work with bytecode-only modules." +msgstr "" + +#: ../../../build/NEWS:28383 +msgid "" +":issue:`20791`: copy.copy() now doesn't make a copy when the input is a " +"bytes object. Initial patch by Peter Otten." +msgstr "" + +#: ../../../build/NEWS:28386 +msgid "" +":issue:`19748`: On AIX, time.mktime() now raises an OverflowError for year " +"outsize range [1902; 2037]." +msgstr "" + +#: ../../../build/NEWS:28389 +msgid "" +":issue:`19573`: inspect.signature: Use enum for parameter kind constants." +msgstr "" + +#: ../../../build/NEWS:28391 +msgid "" +":issue:`20726`: inspect.signature: Make Signature and Parameter picklable." +msgstr "" + +#: ../../../build/NEWS:28393 +msgid ":issue:`17373`: Add inspect.Signature.from_callable method." +msgstr "" + +#: ../../../build/NEWS:28395 +msgid "" +":issue:`20378`: Improve repr of inspect.Signature and inspect.Parameter." +msgstr "" + +#: ../../../build/NEWS:28397 +msgid "" +":issue:`20816`: Fix inspect.getcallargs() to raise correct TypeError for " +"missing keyword-only arguments. Patch by Jeremiah Lowin." +msgstr "" + +#: ../../../build/NEWS:28400 +msgid "" +":issue:`20817`: Fix inspect.getcallargs() to fail correctly if more than 3 " +"arguments are missing. Patch by Jeremiah Lowin." +msgstr "" + +#: ../../../build/NEWS:28403 +msgid "" +":issue:`6676`: Ensure a meaningful exception is raised when attempting to " +"parse more than one XML document per pyexpat xmlparser instance. (Original " +"patches by Hirokazu Yamamoto and Amaury Forgeot d'Arc, with suggested " +"wording by David Gutteridge)" +msgstr "" + +#: ../../../build/NEWS:28408 +msgid "" +":issue:`21117`: Fix inspect.signature to better support functools.partial. " +"Due to the specifics of functools.partial implementation, positional-or-" +"keyword arguments passed as keyword arguments become keyword-only." +msgstr "" + +#: ../../../build/NEWS:28413 +msgid "" +":issue:`20334`: inspect.Signature and inspect.Parameter are now hashable. " +"Thanks to Antony Lee for bug reports and suggestions." +msgstr "" + +#: ../../../build/NEWS:28416 +msgid "" +":issue:`15916`: doctest.DocTestSuite returns an empty unittest.TestSuite " +"instead of raising ValueError if it finds no tests" +msgstr "" + +#: ../../../build/NEWS:28419 +msgid "" +":issue:`21209`: Fix asyncio.tasks.CoroWrapper to workaround a bug in yield-" +"from implementation in CPythons prior to 3.4.1." +msgstr "" + +#: ../../../build/NEWS:28422 +msgid "" +"asyncio: Add gi_{frame,running,code} properties to CoroWrapper (upstream " +":issue:`163`)." +msgstr "" + +#: ../../../build/NEWS:28425 +msgid "" +":issue:`21311`: Avoid exception in _osx_support with non-standard compiler " +"configurations. Patch by John Szakmeister." +msgstr "" + +#: ../../../build/NEWS:28428 +msgid "" +":issue:`11571`: Ensure that the turtle window becomes the topmost window " +"when launched on OS X." +msgstr "" + +#: ../../../build/NEWS:28431 +msgid "" +":issue:`21801`: Validate that __signature__ is None or an instance of " +"Signature." +msgstr "" + +#: ../../../build/NEWS:28434 +msgid "" +":issue:`21923`: Prevent AttributeError in " +"distutils.sysconfig.customize_compiler due to possible uninitialized " +"_config_vars." +msgstr "" + +#: ../../../build/NEWS:28438 +msgid "" +":issue:`21323`: Fix http.server to again handle scripts in CGI " +"subdirectories, broken by the fix for security :issue:`19435`. Patch by " +"Zach Byrne." +msgstr "" + +#: ../../../build/NEWS:28441 +msgid "" +":issue:`22733`: Fix ffi_prep_args not zero-extending argument values " +"correctly on 64-bit Windows." +msgstr "" + +#: ../../../build/NEWS:28444 +msgid "" +":issue:`23302`: Default to TCP_NODELAY=1 upon establishing an " +"HTTPConnection. Removed use of hard-coded MSS as it's an optimization that's" +" no longer needed with Nagle disabled." +msgstr "" + +#: ../../../build/NEWS:28451 +msgid "" +":issue:`20577`: Configuration of the max line length for the FormatParagraph" +" extension has been moved from the General tab of the Idle preferences " +"dialog to the FormatParagraph tab of the Config Extensions dialog. Patch by " +"Tal Einat." +msgstr "" + +#: ../../../build/NEWS:28456 +msgid "" +":issue:`16893`: Update Idle doc chapter to match current Idle and add new " +"information." +msgstr "" + +#: ../../../build/NEWS:28459 +msgid "" +":issue:`3068`: Add Idle extension configuration dialog to Options menu. " +"Changes are written to HOME/.idlerc/config-extensions.cfg. Original patch by" +" Tal Einat." +msgstr "" + +#: ../../../build/NEWS:28463 +msgid "" +":issue:`16233`: A module browser (File : Class Browser, Alt+C) requires an " +"editor window with a filename. When Class Browser is requested otherwise, " +"from a shell, output window, or 'Untitled' editor, Idle no longer displays " +"an error box. It now pops up an Open Module box (Alt+M). If a valid name is " +"entered and a module is opened, a corresponding browser is also opened." +msgstr "" + +#: ../../../build/NEWS:28469 +msgid "" +":issue:`4832`: Save As to type Python files automatically adds .py to the " +"name you enter (even if your system does not display it). Some systems " +"automatically add .txt when type is Text files." +msgstr "" + +#: ../../../build/NEWS:28473 +msgid "" +":issue:`21986`: Code objects are not normally pickled by the pickle module. " +"To match this, they are no longer pickled when running under Idle." +msgstr "" + +#: ../../../build/NEWS:28476 +msgid "" +":issue:`17390`: Adjust Editor window title; remove 'Python', move version to" +" end." +msgstr "" + +#: ../../../build/NEWS:28479 +msgid "" +":issue:`14105`: Idle debugger breakpoints no longer disappear when inserting" +" or deleting lines." +msgstr "" + +#: ../../../build/NEWS:28482 +msgid "" +":issue:`17172`: Turtledemo can now be run from Idle. Currently, the entry is" +" on the Help menu, but it may move to Run. Patch by Ramchandra Apt and Lita " +"Cho." +msgstr "" + +#: ../../../build/NEWS:28486 +msgid ":issue:`21765`: Add support for non-ascii identifiers to HyperParser." +msgstr "" + +#: ../../../build/NEWS:28488 +msgid "" +":issue:`21940`: Add unittest for WidgetRedirector. Initial patch by " +"Saimadhav Heblikar." +msgstr "" + +#: ../../../build/NEWS:28491 +msgid "" +":issue:`18592`: Add unittest for SearchDialogBase. Patch by Phil Webster." +msgstr "" + +#: ../../../build/NEWS:28493 +msgid "" +":issue:`21694`: Add unittest for ParenMatch. Patch by Saimadhav Heblikar." +msgstr "" + +#: ../../../build/NEWS:28495 +msgid "" +":issue:`21686`: add unittest for HyperParser. Original patch by Saimadhav " +"Heblikar." +msgstr "" + +#: ../../../build/NEWS:28498 +msgid "" +":issue:`12387`: Add missing upper(lower)case versions of default Windows key" +" bindings for Idle so Caps Lock does not disable them. Patch by Roger Serwy." +msgstr "" + +#: ../../../build/NEWS:28502 +msgid "" +":issue:`21695`: Closing a Find-in-files output window while the search is " +"still in progress no longer closes Idle." +msgstr "" + +#: ../../../build/NEWS:28505 +msgid ":issue:`18910`: Add unittest for textView. Patch by Phil Webster." +msgstr "" + +#: ../../../build/NEWS:28507 +msgid "" +":issue:`18292`: Add unittest for AutoExpand. Patch by Saihadhav Heblikar." +msgstr "" + +#: ../../../build/NEWS:28509 +msgid ":issue:`18409`: Add unittest for AutoComplete. Patch by Phil Webster." +msgstr "" + +#: ../../../build/NEWS:28511 +msgid "" +":issue:`21477`: htest.py - Improve framework, complete set of tests. Patches" +" by Saimadhav Heblikar" +msgstr "" + +#: ../../../build/NEWS:28514 +msgid "" +":issue:`18104`: Add idlelib/idle_test/htest.py with a few sample tests to " +"begin consolidating and improving human-validated tests of Idle. Change " +"other files as needed to work with htest. Running the module as __main__ " +"runs all tests." +msgstr "" + +#: ../../../build/NEWS:28519 +msgid "" +":issue:`21139`: Change default paragraph width to 72, the :pep:`8` " +"recommendation." +msgstr "" + +#: ../../../build/NEWS:28522 +msgid "" +":issue:`21284`: Paragraph reformat test passes after user changes reformat " +"width." +msgstr "" + +#: ../../../build/NEWS:28525 +msgid "" +":issue:`17654`: Ensure IDLE menus are customized properly on OS X for non-" +"framework builds and for all variants of Tk." +msgstr "" + +#: ../../../build/NEWS:28528 +msgid "" +":issue:`23180`: Rename IDLE \"Windows\" menu item to \"Window\". Patch by Al" +" Sweigart." +msgstr "" + +#: ../../../build/NEWS:28534 +msgid "" +":issue:`15506`: Use standard PKG_PROG_PKG_CONFIG autoconf macro in the " +"configure script." +msgstr "" + +#: ../../../build/NEWS:28537 +msgid "" +":issue:`22935`: Allow the ssl module to be compiled if openssl doesn't " +"support SSL 3." +msgstr "" + +#: ../../../build/NEWS:28540 +msgid "" +":issue:`22592`: Drop support of the Borland C compiler to build Python. The " +"distutils module still supports it to build extensions." +msgstr "" + +#: ../../../build/NEWS:28543 +msgid "" +":issue:`22591`: Drop support of MS-DOS, especially of the DJGPP compiler " +"(MS-DOS port of GCC)." +msgstr "" + +#: ../../../build/NEWS:28546 +msgid "" +":issue:`16537`: Check whether self.extensions is empty in setup.py. Patch by" +" Jonathan Hosmer." +msgstr "" + +#: ../../../build/NEWS:28549 +msgid "" +":issue:`22359`: Remove incorrect uses of recursive make. Patch by Jonas " +"Wagner." +msgstr "" + +#: ../../../build/NEWS:28552 +msgid "" +":issue:`21958`: Define HAVE_ROUND when building with Visual Studio 2013 and " +"above. Patch by Zachary Turner." +msgstr "" + +#: ../../../build/NEWS:28555 +msgid "" +":issue:`18093`: the programs that embed the CPython runtime are now in a " +"separate \"Programs\" directory, rather than being kept in the Modules " +"directory." +msgstr "" + +#: ../../../build/NEWS:28559 +msgid "" +":issue:`15759`: \"make suspicious\", \"make linkcheck\" and \"make doctest\"" +" in Doc/ now display special message when and only when there are failures." +msgstr "" + +#: ../../../build/NEWS:28562 +msgid "" +":issue:`21141`: The Windows build process no longer attempts to find Perl, " +"instead relying on OpenSSL source being configured and ready to build. The " +"``PCbuild\\build_ssl.py`` script has been re-written and re-named to " +"``PCbuild\\prepare_ssl.py``, and takes care of configuring OpenSSL source " +"for both 32 and 64 bit platforms. OpenSSL sources obtained from " +"svn.python.org will always be pre-configured and ready to build." +msgstr "" + +#: ../../../build/NEWS:28569 +msgid ":issue:`21037`: Add a build option to enable AddressSanitizer support." +msgstr "" + +#: ../../../build/NEWS:28571 +msgid "" +":issue:`19962`: The Windows build process now creates \"python.bat\" in the " +"root of the source tree, which passes all arguments through to the most " +"recently built interpreter." +msgstr "" + +#: ../../../build/NEWS:28575 +msgid "" +":issue:`21285`: Refactor and fix curses configure check to always search in " +"a ncursesw directory." +msgstr "" + +#: ../../../build/NEWS:28578 +msgid "" +":issue:`15234`: For BerkeleyDB and Sqlite, only add the found library and " +"include directories if they aren't already being searched. This avoids an " +"explicit runtime library dependency." +msgstr "" + +#: ../../../build/NEWS:28582 +msgid "" +":issue:`17861`: Tools/scripts/generate_opcode_h.py automatically regenerates" +" Include/opcode.h from Lib/opcode.py if the latter gets any change." +msgstr "" + +#: ../../../build/NEWS:28585 +msgid "" +":issue:`20644`: OS X installer build support for documentation build changes" +" in 3.4.1: assume externally supplied sphinx-build is available in /usr/bin." +msgstr "" + +#: ../../../build/NEWS:28588 +msgid "" +":issue:`20022`: Eliminate use of deprecated bundlebuilder in OS X builds." +msgstr "" + +#: ../../../build/NEWS:28590 +msgid "" +":issue:`15968`: Incorporated Tcl, Tk, and Tix builds into the Windows build " +"solution." +msgstr "" + +#: ../../../build/NEWS:28593 +msgid ":issue:`17095`: Fix Modules/Setup *shared* support." +msgstr "" + +#: ../../../build/NEWS:28595 +msgid ":issue:`21811`: Anticipated fixes to support OS X versions > 10.9." +msgstr "" + +#: ../../../build/NEWS:28597 +msgid "" +":issue:`21166`: Prevent possible segfaults and other random failures of " +"python --generate-posix-vars in pybuilddir.txt build target." +msgstr "" + +#: ../../../build/NEWS:28600 +msgid ":issue:`18096`: Fix library order returned by python-config." +msgstr "" + +#: ../../../build/NEWS:28602 +msgid "" +":issue:`17219`: Add library build dir for Python extension cross-builds." +msgstr "" + +#: ../../../build/NEWS:28604 +msgid "" +":issue:`22919`: Windows build updated to support VC 14.0 (Visual Studio " +"2015), which will be used for the official release." +msgstr "" + +#: ../../../build/NEWS:28607 +msgid ":issue:`21236`: Build _msi.pyd with cabinet.lib instead of fci.lib" +msgstr "" + +#: ../../../build/NEWS:28609 +msgid "" +":issue:`17128`: Use private version of OpenSSL for OS X 10.5+ installer." +msgstr "" + +#: ../../../build/NEWS:28614 +msgid "" +":issue:`14203`: Remove obsolete support for view==NULL in " +"PyBuffer_FillInfo(), bytearray_getbuffer(), bytesiobuf_getbuffer() and " +"array_buffer_getbuf(). All functions now raise BufferError in that case." +msgstr "" + +#: ../../../build/NEWS:28618 +msgid "" +":issue:`22445`: PyBuffer_IsContiguous() now implements precise contiguity " +"tests, compatible with NumPy's NPY_RELAXED_STRIDES_CHECKING compilation " +"flag. Previously the function reported false negatives for corner cases." +msgstr "" + +#: ../../../build/NEWS:28622 +msgid "" +":issue:`22079`: PyType_Ready() now checks that statically allocated type has" +" no dynamically allocated bases." +msgstr "" + +#: ../../../build/NEWS:28625 +msgid ":issue:`22453`: Removed non-documented macro PyObject_REPR()." +msgstr "" + +#: ../../../build/NEWS:28627 +msgid "" +":issue:`18395`: Rename ``_Py_char2wchar()`` to :c:func:`Py_DecodeLocale`, " +"rename ``_Py_wchar2char()`` to :c:func:`Py_EncodeLocale`, and document these" +" functions." +msgstr "" + +#: ../../../build/NEWS:28631 +msgid "" +":issue:`21233`: Add new C functions: PyMem_RawCalloc(), PyMem_Calloc(), " +"PyObject_Calloc(), _PyObject_GC_Calloc(). bytes(int) is now using " +"``calloc()`` instead of ``malloc()`` for large objects which is faster and " +"use less memory." +msgstr "" + +#: ../../../build/NEWS:28636 +msgid "" +":issue:`20942`: PyImport_ImportFrozenModuleObject() no longer sets __file__ " +"to match what importlib does; this affects _frozen_importlib as well as any " +"module loaded using imp.init_frozen()." +msgstr "" + +#: ../../../build/NEWS:28643 +msgid "" +":issue:`19548`: Update the codecs module documentation to better cover the " +"distinction between text encodings and other codecs, together with other " +"clarifications. Patch by Martin Panter." +msgstr "" + +#: ../../../build/NEWS:28647 +msgid "" +":issue:`22394`: Doc/Makefile now supports ``make venv PYTHON=../python`` to " +"create a venv for generating the documentation, e.g., ``make html " +"PYTHON=venv/bin/python3``." +msgstr "" + +#: ../../../build/NEWS:28651 +msgid "" +":issue:`21514`: The documentation of the json module now refers to new JSON " +"RFC 7159 instead of obsoleted RFC 4627." +msgstr "" + +#: ../../../build/NEWS:28654 +msgid "" +":issue:`21777`: The binary sequence methods on bytes and bytearray are now " +"documented explicitly, rather than assuming users will be able to derive the" +" expected behaviour from the behaviour of the corresponding str methods." +msgstr "" + +#: ../../../build/NEWS:28659 +msgid ":issue:`6916`: undocument deprecated asynchat.fifo class." +msgstr "" + +#: ../../../build/NEWS:28661 +msgid "" +":issue:`17386`: Expanded functionality of the ``Doc/make.bat`` script to " +"make it much more comparable to ``Doc/Makefile``." +msgstr "" + +#: ../../../build/NEWS:28664 +msgid "" +":issue:`21312`: Update the thread_foobar.h template file to include newer " +"threading APIs. Patch by Jack McCracken." +msgstr "" + +#: ../../../build/NEWS:28667 +msgid "" +":issue:`21043`: Remove the recommendation for specific CA organizations and " +"to mention the ability to load the OS certificates." +msgstr "" + +#: ../../../build/NEWS:28670 +msgid "" +":issue:`20765`: Add missing documentation for PurePath.with_name() and " +"PurePath.with_suffix()." +msgstr "" + +#: ../../../build/NEWS:28673 +msgid "" +":issue:`19407`: New package installation and distribution guides based on " +"the Python Packaging Authority tools. Existing guides have been retained as " +"legacy links from the distutils docs, as they still contain some required " +"reference material for tool developers that isn't recorded anywhere else." +msgstr "" + +#: ../../../build/NEWS:28678 +msgid ":issue:`19697`: Document cases where __main__.__spec__ is None." +msgstr "" + +#: ../../../build/NEWS:28683 +msgid ":issue:`18982`: Add tests for CLI of the calendar module." +msgstr "" + +#: ../../../build/NEWS:28685 +msgid "" +":issue:`19548`: Added some additional checks to test_codecs to ensure that " +"statements in the updated documentation remain accurate. Patch by Martin " +"Panter." +msgstr "" + +#: ../../../build/NEWS:28689 +msgid "" +":issue:`22838`: All test_re tests now work with unittest test discovery." +msgstr "" + +#: ../../../build/NEWS:28691 +msgid ":issue:`22173`: Update lib2to3 tests to use unittest test discovery." +msgstr "" + +#: ../../../build/NEWS:28693 +msgid ":issue:`16000`: Convert test_curses to use unittest." +msgstr "" + +#: ../../../build/NEWS:28695 +msgid "" +":issue:`21456`: Skip two tests in test_urllib2net.py if _ssl module not " +"present. Patch by Remi Pointel." +msgstr "" + +#: ../../../build/NEWS:28698 +msgid "" +":issue:`20746`: Fix test_pdb to run in refleak mode (-R). Patch by Xavier " +"de Gaye." +msgstr "" + +#: ../../../build/NEWS:28701 +msgid "" +":issue:`22060`: test_ctypes has been somewhat cleaned up and simplified; it " +"now uses unittest test discovery to find its tests." +msgstr "" + +#: ../../../build/NEWS:28704 +msgid "" +":issue:`22104`: regrtest.py no longer holds a reference to the suite of " +"tests loaded from test modules that don't define test_main()." +msgstr "" + +#: ../../../build/NEWS:28707 +msgid "" +":issue:`22111`: Assorted cleanups in test_imaplib. Patch by Milan " +"Oberkirch." +msgstr "" + +#: ../../../build/NEWS:28709 +msgid "" +":issue:`22002`: Added ``load_package_tests`` function to test.support and " +"used it to implement/augment test discovery in test_asyncio, test_email, " +"test_importlib, test_json, and test_tools." +msgstr "" + +#: ../../../build/NEWS:28713 +msgid "" +":issue:`21976`: Fix test_ssl to accept LibreSSL version strings. Thanks to " +"William Orr." +msgstr "" + +#: ../../../build/NEWS:28716 +msgid "" +":issue:`21918`: Converted test_tools from a module to a package containing " +"separate test files for each tested script." +msgstr "" + +#: ../../../build/NEWS:28719 +msgid "" +":issue:`9554`: Use modern unittest features in test_argparse. Initial patch " +"by Denver Coneybeare and Radu Voicilas." +msgstr "" + +#: ../../../build/NEWS:28722 +msgid "" +":issue:`20155`: Changed HTTP method names in failing tests in " +"test_httpservers so that packet filtering software (specifically Windows " +"Base Filtering Engine) does not interfere with the transaction semantics " +"expected by the tests." +msgstr "" + +#: ../../../build/NEWS:28727 +msgid "" +":issue:`19493`: Refactored the ctypes test package to skip tests explicitly " +"rather than silently." +msgstr "" + +#: ../../../build/NEWS:28730 +msgid "" +":issue:`18492`: All resources are now allowed when tests are not run by " +"regrtest.py." +msgstr "" + +#: ../../../build/NEWS:28733 +msgid "" +":issue:`21634`: Fix pystone micro-benchmark: use floor division instead of " +"true division to benchmark integers instead of floating point numbers. Set " +"pystone version to 1.2. Patch written by Lennart Regebro." +msgstr "" + +#: ../../../build/NEWS:28737 +msgid ":issue:`21605`: Added tests for Tkinter images." +msgstr "" + +#: ../../../build/NEWS:28739 +msgid "" +":issue:`21493`: Added test for ntpath.expanduser(). Original patch by " +"Claudiu Popa." +msgstr "" + +#: ../../../build/NEWS:28742 +msgid "" +":issue:`19925`: Added tests for the spwd module. Original patch by Vajrasky " +"Kok." +msgstr "" + +#: ../../../build/NEWS:28745 +msgid "" +":issue:`21522`: Added Tkinter tests for Listbox.itemconfigure(), " +"PanedWindow.paneconfigure(), and Menu.entryconfigure()." +msgstr "" + +#: ../../../build/NEWS:28748 +msgid "" +":issue:`17756`: Fix test_code test when run from the installed location." +msgstr "" + +#: ../../../build/NEWS:28750 +msgid "" +":issue:`17752`: Fix distutils tests when run from the installed location." +msgstr "" + +#: ../../../build/NEWS:28752 +msgid "" +":issue:`18604`: Consolidated checks for GUI availability. All platforms now" +" at least check whether Tk can be instantiated when the GUI resource is " +"requested." +msgstr "" + +#: ../../../build/NEWS:28756 +msgid ":issue:`21275`: Fix a socket test on KFreeBSD." +msgstr ":issue:`21275`: 修复 KFreeBSD 上的一个套接字测试。" + +#: ../../../build/NEWS:28758 +msgid "" +":issue:`21223`: Pass test_site/test_startup_imports when some of the " +"extensions are built as builtins." +msgstr ":issue:`21223`: 当某些扩展作为内置模块编译时传入 test_site/test_startup_imports。" + +#: ../../../build/NEWS:28761 +msgid ":issue:`20635`: Added tests for Tk geometry managers." +msgstr ":issue:`20635`: 添加了针对 Tk geometry 管理器的测试。" + +#: ../../../build/NEWS:28763 +msgid "Add test case for freeze." +msgstr "增加freeze包的测试用例。" + +#: ../../../build/NEWS:28765 +msgid ":issue:`20743`: Fix a reference leak in test_tcl." +msgstr ":issue:`20743`: 修复了 test_tcl 中的一个引用泄漏。" + +#: ../../../build/NEWS:28767 +msgid ":issue:`21097`: Move test_namespace_pkgs into test_importlib." +msgstr ":issue:`21097`: 将 test_namespace_pkgs 移至 test_importlib." + +#: ../../../build/NEWS:28769 +msgid ":issue:`21503`: Use test_both() consistently in test_importlib." +msgstr ":issue:`21503`: 在 test_importlib 中一致地使用 test_both()。" + +#: ../../../build/NEWS:28771 +msgid "" +":issue:`20939`: Avoid various network test failures due to new redirect of " +"http://www.python.org/ to https://www.python.org: use http://www.example.com" +" instead." +msgstr "" +":issue:`20939`: 避免由于新增从 http://www.python.org/ 到 https://www.python.org " +"的重定向导致的网络测试失败:改用 http://www.example.com。" + +#: ../../../build/NEWS:28775 +msgid "" +":issue:`20668`: asyncio tests no longer rely on tests.txt file. (Patch by " +"Vajrasky Kok)" +msgstr ":issue:`20668`: asyncio 测试不再依赖 tests.txt 文件。 (由 Vajrasky Kok 编写补丁)" + +#: ../../../build/NEWS:28778 +msgid "" +":issue:`21093`: Prevent failures of ctypes test_macholib on OS X if a copy " +"of libz exists in $HOME/lib or /usr/local/lib." +msgstr "" +":issue:`21093`: 在 OS X 上防止当 libz 的副本存在于 $HOME/lib 或 /usr/local/lib 中时 ctypes" +" test_macholib 的失败。" + +#: ../../../build/NEWS:28781 +msgid "" +":issue:`22770`: Prevent some Tk segfaults on OS X when running gui tests." +msgstr ":issue:`22770`: 在 OS X 上防止当运行图形用户界面测试时的某些 Tk 段错误。" + +#: ../../../build/NEWS:28783 +msgid "" +":issue:`23211`: Workaround test_logging failure on some OS X 10.6 systems." +msgstr ":issue:`23211`: 在某些 OS X 10.6 系统上绕过 test_logging 失败" + +#: ../../../build/NEWS:28785 +msgid "" +":issue:`23345`: Prevent test_ssl failures with large OpenSSL patch level " +"values (like 0.9.8zc)." +msgstr ":issue:`23345`: 防止较大 OpenSSL 补丁级别值 (如 0.9.8zc) 导致的 test_ssl 失败。" + +#: ../../../build/NEWS:28791 +msgid "" +":issue:`22314`: pydoc now works when the LINES environment variable is set." +msgstr ":issue:`22314`: 现在当设置了 LINES 环境变量时 pydoc 将会可用。" + +#: ../../../build/NEWS:28793 +msgid "" +":issue:`22615`: Argument Clinic now supports the \"type\" argument for the " +"int converter. This permits using the int converter with enums and typedefs." +msgstr "" +":issue:`22615`: Argument Clinic 现在支持 int 转换器的 \"type\" 参数。 这允许将 int 转换器用于枚举和" +" typedef。" + +#: ../../../build/NEWS:28796 +msgid "" +":issue:`20076`: The makelocalealias.py script no longer ignores UTF-8 " +"mapping." +msgstr ":issue:`20076`: makelocalealias.py 脚本将不再忽略 UTF-8 映射。" + +#: ../../../build/NEWS:28798 +msgid "" +":issue:`20079`: The makelocalealias.py script now can parse the SUPPORTED " +"file from glibc sources and supports command line options for source paths." +msgstr "" +":issue:`20079`: makelocalealias.py 脚本现在能够解析 glibc 源代码中的 SUPPORTED " +"文件并支持针对源代码路径的命令行选项。" + +#: ../../../build/NEWS:28801 +msgid "" +":issue:`22201`: Command-line interface of the zipfile module now correctly " +"extracts ZIP files with directory entries. Patch by Ryan Wilson." +msgstr "" +":issue:`22201`: zipfile 模块的命令行界面现在能正确地提取带有目录项的 ZIP 文件。 由 Ryan Wilson 编写补丁。" + +#: ../../../build/NEWS:28804 +msgid "" +":issue:`22120`: For functions using an unsigned integer return converter, " +"Argument Clinic now generates a cast to that type for the comparison to -1 " +"in the generated code. (This suppresses a compilation warning.)" +msgstr "" +":issue:`22120`: 对于使用无符号整数返回转换器的函数,现在 Argument Clinic 会在所生成的代码中为与 -1 " +"的比较生成到该类型的强制转换。 (这将抑制一个编译警告。)" + +#: ../../../build/NEWS:28808 +msgid "" +":issue:`18974`: Tools/scripts/diff.py now uses argparse instead of optparse." +msgstr ":issue:`18974`: Tools/scripts/diff.py 现在将使用 argparse 而不是 optparse。" + +#: ../../../build/NEWS:28810 +msgid "" +":issue:`21906`: Make Tools/scripts/md5sum.py work in Python 3. Patch by " +"Zachary Ware." +msgstr "" +":issue:`21906`: 让 Tools/scripts/md5sum.py 适用于 Python 3。 由 Zachary Ware 编写补丁。" + +#: ../../../build/NEWS:28813 +msgid ":issue:`21629`: Fix Argument Clinic's \"--converters\" feature." +msgstr ":issue:`21629`: 修复 Argument Clinic 的 \"--converters\" 特性。" + +#: ../../../build/NEWS:28815 +msgid "Add support for ``yield from`` to 2to3." +msgstr "为2to3添加 ``yield from`` 的支持。" + +#: ../../../build/NEWS:28817 +msgid "Add support for the :pep:`465` matrix multiplication operator to 2to3." +msgstr "为 2to3 添加对 PEP 465 矩阵乘法运算符的支持。" + +#: ../../../build/NEWS:28819 +msgid "" +":issue:`16047`: Fix module exception list and __file__ handling in freeze. " +"Patch by Meador Inge." +msgstr ":issue:`16047`: 修正冻结中的模块异常列表和 __file__ 处理。 由 Meador Inge 编写补丁。" + +#: ../../../build/NEWS:28822 +msgid ":issue:`11824`: Consider ABI tags in freeze. Patch by Meador Inge." +msgstr ":issue:`11824`: 考虑冻结 ABI 标签。 由 Meador Inge 编写补丁。" + +#: ../../../build/NEWS:28824 +msgid "" +":issue:`20535`: PYTHONWARNING no longer affects the run_tests.py script. " +"Patch by Arfrever Frehtes Taifersar Arahesis." +msgstr "" +":issue:`20535`: PYTHONWARNING 不再影响 run_tests.py 脚本。 由 Arfrever Frehtes " +"Taifersar Arahesis 编写补丁。" + +#: ../../../build/NEWS:28830 +msgid ":issue:`23260`: Update Windows installer" +msgstr ":issue:`23260`: 更新 Windows 安装器" + +#: ../../../build/NEWS:28832 +msgid "" +"The bundled version of Tcl/Tk has been updated to 8.6.3. The most visible " +"result of this change is the addition of new native file dialogs when " +"running on Windows Vista or newer. See Tcl/Tk's TIP 432 for more " +"information. Also, this version of Tcl/Tk includes support for Windows 10." +msgstr "" +"捆绑的 Tcl/Tk 版本已被更新至 8.6.3。 这项改变最显示的结果是当在 Windows Vista 或更新版本上运行时增加了新的原生文件对话框。" +" 请参阅 Tcl/Tk 的 TIP 432 了解详情。 此外,该 Tcl/Tk 版本还包括了对 Windows 10 的支持。" + +#: ../../../build/NEWS:28838 +msgid "" +":issue:`17896`: The Windows build scripts now expect external library " +"sources to be in ``PCbuild\\..\\externals`` rather than ``PCbuild\\..\\..``." +msgstr "" +":issue:`17896`: 现在 Windows 构建脚本将预期外部库源代码位于 ``PCbuild\\..\\externals`` 而不是 " +"``PCbuild\\..\\..``。" + +#: ../../../build/NEWS:28841 +msgid "" +":issue:`17717`: The Windows build scripts now use a copy of NASM pulled from" +" svn.python.org to build OpenSSL." +msgstr "" +":issue:`17717`: 现在 Windows 构建脚本将使用来自 svn.python.org的 NASM 副本来构建 OpenSSL。" + +#: ../../../build/NEWS:28844 +msgid "" +":issue:`21907`: Improved the batch scripts provided for building Python." +msgstr ":issue:`21907`: 改进了供构建 Python 的处理脚本。" + +#: ../../../build/NEWS:28846 +msgid "" +":issue:`22644`: The bundled version of OpenSSL has been updated to 1.0.1j." +msgstr ":issue:`22644`: 捆绑的 OpenSSL 版本已更新到 1.0.1j。" + +#: ../../../build/NEWS:28848 +msgid "" +":issue:`10747`: Use versioned labels in the Windows start menu. Patch by " +"Olive Kilburn." +msgstr ":issue:`10747`: 在 Windows 开始菜单中使用带版本号的标签。 由 Olive Kilburn 编写补丁。" + +#: ../../../build/NEWS:28851 +msgid "" +":issue:`22980`: .pyd files with a version and platform tag (for example, " +"\".cp35-win32.pyd\") will now be loaded in preference to those without tags." +msgstr "" +":issue:`22980`: 带有版本号和平台标记的 .pyd 文件 (例如 \".cp35-win32.pyd\") " +"现在将优先于不带标记的文件被加载。" + +#: ../../../build/NEWS:28855 +msgid "**(For information about older versions, consult the HISTORY file.)**" +msgstr "**(有关旧版本的信息,请参阅HISTORY文件。)**" diff --git a/whatsnew/index.po b/whatsnew/index.po new file mode 100644 index 000000000..752cbccbf --- /dev/null +++ b/whatsnew/index.po @@ -0,0 +1,45 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) 2001-2022, Python Software Foundation +# This file is distributed under the same license as the Python package. +# FIRST AUTHOR , YEAR. +# +# Translators: +# 锟斤拷 , 2017 +# Shengjing Zhu , 2019 +# +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: Python 3.9\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2022-11-04 14:34+0000\n" +"PO-Revision-Date: 2017-02-16 23:45+0000\n" +"Last-Translator: Shengjing Zhu , 2019\n" +"Language-Team: Chinese (China) (https://www.transifex.com/python-doc/teams/5390/zh_CN/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: zh_CN\n" +"Plural-Forms: nplurals=1; plural=0;\n" + +#: ../../whatsnew/index.rst:5 +msgid "What's New in Python" +msgstr "Python 有什么新变化?" + +#: ../../whatsnew/index.rst:7 +msgid "" +"The \"What's New in Python\" series of essays takes tours through the most " +"important changes between major Python versions. They are a \"must read\" " +"for anyone wishing to stay up-to-date after a new release." +msgstr "" +"这个“Python 有什么新变化?”系列内容会带您浏览 Python 大版本之间重要的变化。在新版发布后,如果您希望掌握最新变化,请务必阅读这些内容。" + +#: ../../whatsnew/index.rst:33 +msgid "" +"The \"Changelog\" is an HTML version of the `file built " +"`_ from the contents of the " +":source:`Misc/NEWS.d` directory tree, which contains *all* nontrivial " +"changes to Python for the current version." +msgstr "" +"这个“更新日志”是 :source:`Misc/NEWS.d` 目录下文件 `构建 `_" +" 的 HTML 版本,它包含了对当前 Python 版本进行的 *所有* 重要的更改。"